<?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>188943</bug_id>
          
          <creation_ts>2018-08-25 04:49:06 -0700</creation_ts>
          <short_desc>[WebAssembly] Parse wasm modules in a streaming fashion</short_desc>
          <delta_ts>2018-08-27 23:39:17 -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>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dbates</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1453672</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-08-25 04:49:06 -0700</bug_when>
    <thetext>Enable stream decoding!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453731</commentid>
    <comment_count>1</comment_count>
      <attachid>348102</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-08-26 14:54:45 -0700</bug_when>
    <thetext>Created attachment 348102
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453827</commentid>
    <comment_count>2</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2018-08-27 01:42:04 -0700</bug_when>
    <thetext>Did you mean to mark this for review?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453829</commentid>
    <comment_count>3</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-08-27 01:49:44 -0700</bug_when>
    <thetext>(In reply to Keith Miller from comment #2)
&gt; Did you mean to mark this for review?

Not yet :) I&apos;ll do some cleaning up and set r=? later!
Currently my plan is the following,

1. In this patch, we separate SectionParser from ModuleParser, use SectionParser in old and new wasm parsers. Adding very basic tests specifically for our streaming parser, but we do not integrate streaming parser to our wasm pipeline yet in this patch.
2. In the subsequent patch, we change our BBQPlan to kick streaming parser, and streaming compilation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453856</commentid>
    <comment_count>4</comment_count>
      <attachid>348136</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-08-27 06:11:26 -0700</bug_when>
    <thetext>Created attachment 348136
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453857</commentid>
    <comment_count>5</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-08-27 06:11:58 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #1)
&gt; Created attachment 348102 [details]
&gt; Patch

Ready for reviews!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453858</commentid>
    <comment_count>6</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-08-27 06:14:03 -0700</bug_when>
    <thetext>Attachment 348136 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WasmSectionParser.h:58:  Do not use &apos;using namespace FailureHelper;&apos;.  [build/using_namespace] [4]
ERROR: Source/JavaScriptCore/wasm/WasmStreamingParser.cpp:211:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/wasm/WasmStreamingParser.cpp:377:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 3 in 36 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>1453869</commentid>
    <comment_count>7</comment_count>
      <attachid>348139</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-08-27 07:12:08 -0700</bug_when>
    <thetext>Created attachment 348139
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453870</commentid>
    <comment_count>8</comment_count>
      <attachid>348140</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-08-27 07:13:37 -0700</bug_when>
    <thetext>Created attachment 348140
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453871</commentid>
    <comment_count>9</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-08-27 07:14:55 -0700</bug_when>
    <thetext>Attachment 348140 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WasmSectionParser.h:58:  Do not use &apos;using namespace FailureHelper;&apos;.  [build/using_namespace] [4]
ERROR: Source/JavaScriptCore/wasm/WasmStreamingParser.cpp:211:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/wasm/WasmStreamingParser.cpp:377:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 3 in 38 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453872</commentid>
    <comment_count>10</comment_count>
      <attachid>348141</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-08-27 07:16:40 -0700</bug_when>
    <thetext>Created attachment 348141
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453873</commentid>
    <comment_count>11</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-08-27 07:17:58 -0700</bug_when>
    <thetext>Attachment 348141 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WasmSectionParser.h:58:  Do not use &apos;using namespace FailureHelper;&apos;.  [build/using_namespace] [4]
ERROR: Source/JavaScriptCore/wasm/WasmStreamingParser.cpp:211:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/wasm/WasmStreamingParser.cpp:377:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 3 in 38 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453874</commentid>
    <comment_count>12</comment_count>
      <attachid>348142</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-08-27 07:20:45 -0700</bug_when>
    <thetext>Created attachment 348142
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453875</commentid>
    <comment_count>13</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-08-27 07:23:29 -0700</bug_when>
    <thetext>Attachment 348142 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WasmSectionParser.h:58:  Do not use &apos;using namespace FailureHelper;&apos;.  [build/using_namespace] [4]
ERROR: Source/JavaScriptCore/wasm/WasmStreamingParser.cpp:210:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/wasm/WasmStreamingParser.cpp:376:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 3 in 38 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453879</commentid>
    <comment_count>14</comment_count>
      <attachid>348144</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-08-27 08:26:13 -0700</bug_when>
    <thetext>Created attachment 348144
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453880</commentid>
    <comment_count>15</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-08-27 08:29:45 -0700</bug_when>
    <thetext>Attachment 348144 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WasmSectionParser.h:58:  Do not use &apos;using namespace FailureHelper;&apos;.  [build/using_namespace] [4]
ERROR: Source/JavaScriptCore/wasm/WasmStreamingParser.cpp:210:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/wasm/WasmStreamingParser.cpp:376:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 3 in 38 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453887</commentid>
    <comment_count>16</comment_count>
      <attachid>348144</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-08-27 08:49:38 -0700</bug_when>
    <thetext>Comment on attachment 348144
Patch

OK, ready.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453893</commentid>
    <comment_count>17</comment_count>
      <attachid>348146</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-08-27 09:05:44 -0700</bug_when>
    <thetext>Created attachment 348146
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453894</commentid>
    <comment_count>18</comment_count>
      <attachid>348147</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-08-27 09:07:13 -0700</bug_when>
    <thetext>Created attachment 348147
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453899</commentid>
    <comment_count>19</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-08-27 09:11:51 -0700</bug_when>
    <thetext>Attachment 348147 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WasmSectionParser.h:58:  Do not use &apos;using namespace FailureHelper;&apos;.  [build/using_namespace] [4]
ERROR: Source/JavaScriptCore/wasm/WasmStreamingParser.cpp:210:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 2 in 38 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453975</commentid>
    <comment_count>20</comment_count>
      <attachid>348167</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-08-27 11:09:08 -0700</bug_when>
    <thetext>Created attachment 348167
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453976</commentid>
    <comment_count>21</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-08-27 11:10:43 -0700</bug_when>
    <thetext>Attachment 348167 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WasmSectionParser.h:58:  Do not use &apos;using namespace FailureHelper;&apos;.  [build/using_namespace] [4]
ERROR: Source/JavaScriptCore/wasm/WasmStreamingParser.cpp:210:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 2 in 38 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1454142</commentid>
    <comment_count>22</comment_count>
      <attachid>348167</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-08-27 15:31:23 -0700</bug_when>
    <thetext>Comment on attachment 348167
Patch

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

r=me with some suggested improvements.

&gt; Source/JavaScriptCore/ChangeLog:25
&gt; +        This object is introduced for testing purpose. Added new stress test uses this interface
&gt; +        to test streaming parser in the JSC shell.

I suggest you make it explicit that &quot;This object&quot; means &quot;The $vm WasmStreamingParser object&quot;.

&gt; Source/JavaScriptCore/ChangeLog:51
&gt; +        memoryCount and tableCount should be recoreded in ModuleInformation.

/recoreded/recorded/.

&gt; Source/JavaScriptCore/ChangeLog:106
&gt; +        SectionParser is extracted from ModuleParser. And it is used both the old (currently working) ModuleParser

/used both/used by both/.

&gt; Source/JavaScriptCore/ChangeLog:136
&gt; +        bunch of functions. StreamingParser extracts each function in a streaming fashion and enable streaming

/bunch of/a bunch of/.

&gt; Source/JavaScriptCore/ChangeLog:153
&gt; +        the user calls StreamingParser::finalize. StreamingParser is a state machine which feeds the incoming

/feeds the/feeds on the/.

&gt; Source/JavaScriptCore/wasm/WasmModuleInformation.h:65
&gt; +    uint32_t memoryCount() const { return memory ? 1 : 0; }
&gt; +    uint32_t tableCount() const { return tableInformation ? 1 : 0; }

How does this work?  It seems we&apos;re always returning 1 for the counts whereas the old code increments m_tableCount in ModuleParser.  I don&apos;t see tableCount being tracked anymore.

I see in SectionParser::parseExport() that we&apos;re checking &quot;kindIndex &gt;= m_info-&gt;tableCount()&quot;.  This suggests to me that that check is not functioning as intended, but your implementation of tableCount() is effectively just defeating the check.
Ditto for SectionParser::parseElement().

Oh, I see from SectionParser::parseTable() that we&apos;re allowed only 1 table.  I presume this is WASM spec thing.  Can you please add a comment here to explain that?  It took me a while to tease out this reason for why &quot;tableInformation ? 1 : 0&quot; is valid.  I suspect other folks who don&apos;t already intimately know the spec may find this equally confusing.

Ditto for memoryCount.

&gt; Source/JavaScriptCore/wasm/WasmSectionParser.cpp:218
&gt; +    WASM_PARSER_FAIL_IF(count &gt; 1, &quot;Table count of &quot;, count, &quot; is invalid, at most 1 is allowed for now&quot;);

Ohh ... we&apos;re only ever allowed 1 table.  That explains why we don&apos;t update a tableCount anymore.

Please add a comment in ModuleInformation::tableCount() about this constraint.

&gt; Source/JavaScriptCore/wasm/WasmSectionParser.cpp:268
&gt; +    WASM_PARSER_FAIL_IF(count != 1, &quot;Memory section has more than one memory, WebAssembly currently only allows zero or one&quot;);

Ditto: please add a comment in ModuleInformation::memoryCount() about this constraint.

&gt; Source/JavaScriptCore/wasm/WasmStreamingParser.cpp:250
&gt; +    if (Options::useEagerWebAssemblyModuleHashing())

UNLIKELY?

&gt; Source/JavaScriptCore/wasm/WasmStreamingParser.cpp:255
&gt; +    while (true) {
&gt; +        switch (m_state) {

Please ASSERT(offsetInBytes &lt;= bytesSize) above this switch.

&gt; Source/JavaScriptCore/wasm/WasmStreamingParser.h:55
&gt; +    // So this streaming parser handles Section as an unit for incremental parsing. The exception is Code section. The code section is large since it

/an unit/the unit/.
/is Code section/is the Code section/.

&gt; Source/JavaScriptCore/wasm/WasmStreamingParser.h:57
&gt; +    // parser specially handles the code section. In the code section, the streaming parser uses Function as an unit for incremental parsing.

/an unit/the unit/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1454300</commentid>
    <comment_count>23</comment_count>
      <attachid>348167</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-08-27 23:33:52 -0700</bug_when>
    <thetext>Comment on attachment 348167
Patch

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

Thank you!

&gt;&gt; Source/JavaScriptCore/ChangeLog:25
&gt;&gt; +        to test streaming parser in the JSC shell.
&gt; 
&gt; I suggest you make it explicit that &quot;This object&quot; means &quot;The $vm WasmStreamingParser object&quot;.

Fixed.

&gt;&gt; Source/JavaScriptCore/ChangeLog:51
&gt;&gt; +        memoryCount and tableCount should be recoreded in ModuleInformation.
&gt; 
&gt; /recoreded/recorded/.

Fixed.

&gt;&gt; Source/JavaScriptCore/ChangeLog:106
&gt;&gt; +        SectionParser is extracted from ModuleParser. And it is used both the old (currently working) ModuleParser
&gt; 
&gt; /used both/used by both/.

Fixed.

&gt;&gt; Source/JavaScriptCore/ChangeLog:136
&gt;&gt; +        bunch of functions. StreamingParser extracts each function in a streaming fashion and enable streaming
&gt; 
&gt; /bunch of/a bunch of/.

Fixed.

&gt;&gt; Source/JavaScriptCore/ChangeLog:153
&gt;&gt; +        the user calls StreamingParser::finalize. StreamingParser is a state machine which feeds the incoming
&gt; 
&gt; /feeds the/feeds on the/.

Fixed.

&gt;&gt; Source/JavaScriptCore/wasm/WasmModuleInformation.h:65
&gt;&gt; +    uint32_t tableCount() const { return tableInformation ? 1 : 0; }
&gt; 
&gt; How does this work?  It seems we&apos;re always returning 1 for the counts whereas the old code increments m_tableCount in ModuleParser.  I don&apos;t see tableCount being tracked anymore.
&gt; 
&gt; I see in SectionParser::parseExport() that we&apos;re checking &quot;kindIndex &gt;= m_info-&gt;tableCount()&quot;.  This suggests to me that that check is not functioning as intended, but your implementation of tableCount() is effectively just defeating the check.
&gt; Ditto for SectionParser::parseElement().
&gt; 
&gt; Oh, I see from SectionParser::parseTable() that we&apos;re allowed only 1 table.  I presume this is WASM spec thing.  Can you please add a comment here to explain that?  It took me a while to tease out this reason for why &quot;tableInformation ? 1 : 0&quot; is valid.  I suspect other folks who don&apos;t already intimately know the spec may find this equally confusing.
&gt; 
&gt; Ditto for memoryCount.

OK, I added the comment.

&gt;&gt; Source/JavaScriptCore/wasm/WasmSectionParser.cpp:218
&gt;&gt; +    WASM_PARSER_FAIL_IF(count &gt; 1, &quot;Table count of &quot;, count, &quot; is invalid, at most 1 is allowed for now&quot;);
&gt; 
&gt; Ohh ... we&apos;re only ever allowed 1 table.  That explains why we don&apos;t update a tableCount anymore.
&gt; 
&gt; Please add a comment in ModuleInformation::tableCount() about this constraint.

OK, added.

&gt;&gt; Source/JavaScriptCore/wasm/WasmSectionParser.cpp:268
&gt;&gt; +    WASM_PARSER_FAIL_IF(count != 1, &quot;Memory section has more than one memory, WebAssembly currently only allows zero or one&quot;);
&gt; 
&gt; Ditto: please add a comment in ModuleInformation::memoryCount() about this constraint.

Yeah, added.

&gt;&gt; Source/JavaScriptCore/wasm/WasmStreamingParser.cpp:250
&gt;&gt; +    if (Options::useEagerWebAssemblyModuleHashing())
&gt; 
&gt; UNLIKELY?

Added.

&gt;&gt; Source/JavaScriptCore/wasm/WasmStreamingParser.cpp:255
&gt;&gt; +        switch (m_state) {
&gt; 
&gt; Please ASSERT(offsetInBytes &lt;= bytesSize) above this switch.

Added.

&gt;&gt; Source/JavaScriptCore/wasm/WasmStreamingParser.h:55
&gt;&gt; +    // So this streaming parser handles Section as an unit for incremental parsing. The exception is Code section. The code section is large since it
&gt; 
&gt; /an unit/the unit/.
&gt; /is Code section/is the Code section/.

Fixed.

&gt;&gt; Source/JavaScriptCore/wasm/WasmStreamingParser.h:57
&gt;&gt; +    // parser specially handles the code section. In the code section, the streaming parser uses Function as an unit for incremental parsing.
&gt; 
&gt; /an unit/the unit/.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1454301</commentid>
    <comment_count>24</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-08-27 23:34:02 -0700</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=348167&amp;action=review

Thank you!

&gt;&gt; Source/JavaScriptCore/ChangeLog:25
&gt;&gt; +        to test streaming parser in the JSC shell.
&gt; 
&gt; I suggest you make it explicit that &quot;This object&quot; means &quot;The $vm WasmStreamingParser object&quot;.

Fixed.

&gt;&gt; Source/JavaScriptCore/ChangeLog:51
&gt;&gt; +        memoryCount and tableCount should be recoreded in ModuleInformation.
&gt; 
&gt; /recoreded/recorded/.

Fixed.

&gt;&gt; Source/JavaScriptCore/ChangeLog:106
&gt;&gt; +        SectionParser is extracted from ModuleParser. And it is used both the old (currently working) ModuleParser
&gt; 
&gt; /used both/used by both/.

Fixed.

&gt;&gt; Source/JavaScriptCore/ChangeLog:136
&gt;&gt; +        bunch of functions. StreamingParser extracts each function in a streaming fashion and enable streaming
&gt; 
&gt; /bunch of/a bunch of/.

Fixed.

&gt;&gt; Source/JavaScriptCore/ChangeLog:153
&gt;&gt; +        the user calls StreamingParser::finalize. StreamingParser is a state machine which feeds the incoming
&gt; 
&gt; /feeds the/feeds on the/.

Fixed.

&gt;&gt; Source/JavaScriptCore/wasm/WasmModuleInformation.h:65
&gt;&gt; +    uint32_t tableCount() const { return tableInformation ? 1 : 0; }
&gt; 
&gt; How does this work?  It seems we&apos;re always returning 1 for the counts whereas the old code increments m_tableCount in ModuleParser.  I don&apos;t see tableCount being tracked anymore.
&gt; 
&gt; I see in SectionParser::parseExport() that we&apos;re checking &quot;kindIndex &gt;= m_info-&gt;tableCount()&quot;.  This suggests to me that that check is not functioning as intended, but your implementation of tableCount() is effectively just defeating the check.
&gt; Ditto for SectionParser::parseElement().
&gt; 
&gt; Oh, I see from SectionParser::parseTable() that we&apos;re allowed only 1 table.  I presume this is WASM spec thing.  Can you please add a comment here to explain that?  It took me a while to tease out this reason for why &quot;tableInformation ? 1 : 0&quot; is valid.  I suspect other folks who don&apos;t already intimately know the spec may find this equally confusing.
&gt; 
&gt; Ditto for memoryCount.

OK, I added the comment.

&gt;&gt; Source/JavaScriptCore/wasm/WasmSectionParser.cpp:218
&gt;&gt; +    WASM_PARSER_FAIL_IF(count &gt; 1, &quot;Table count of &quot;, count, &quot; is invalid, at most 1 is allowed for now&quot;);
&gt; 
&gt; Ohh ... we&apos;re only ever allowed 1 table.  That explains why we don&apos;t update a tableCount anymore.
&gt; 
&gt; Please add a comment in ModuleInformation::tableCount() about this constraint.

OK, added.

&gt;&gt; Source/JavaScriptCore/wasm/WasmSectionParser.cpp:268
&gt;&gt; +    WASM_PARSER_FAIL_IF(count != 1, &quot;Memory section has more than one memory, WebAssembly currently only allows zero or one&quot;);
&gt; 
&gt; Ditto: please add a comment in ModuleInformation::memoryCount() about this constraint.

Yeah, added.

&gt;&gt; Source/JavaScriptCore/wasm/WasmStreamingParser.cpp:250
&gt;&gt; +    if (Options::useEagerWebAssemblyModuleHashing())
&gt; 
&gt; UNLIKELY?

Added.

&gt;&gt; Source/JavaScriptCore/wasm/WasmStreamingParser.cpp:255
&gt;&gt; +        switch (m_state) {
&gt; 
&gt; Please ASSERT(offsetInBytes &lt;= bytesSize) above this switch.

Added.

&gt;&gt; Source/JavaScriptCore/wasm/WasmStreamingParser.h:55
&gt;&gt; +    // So this streaming parser handles Section as an unit for incremental parsing. The exception is Code section. The code section is large since it
&gt; 
&gt; /an unit/the unit/.
&gt; /is Code section/is the Code section/.

Fixed.

&gt;&gt; Source/JavaScriptCore/wasm/WasmStreamingParser.h:57
&gt;&gt; +    // parser specially handles the code section. In the code section, the streaming parser uses Function as an unit for incremental parsing.
&gt; 
&gt; /an unit/the unit/.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1454303</commentid>
    <comment_count>25</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-08-27 23:38:35 -0700</bug_when>
    <thetext>Committed r235420: &lt;https://trac.webkit.org/changeset/235420&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1454305</commentid>
    <comment_count>26</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-08-27 23:39:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/43786871&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>348102</attachid>
            <date>2018-08-26 14:54:45 -0700</date>
            <delta_ts>2018-08-27 06:11:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-188943-20180827065444.patch</filename>
            <type>text/plain</type>
            <size>119716</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM1MzM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
ZGNmMTZhNDQ3MGZiOWE0NmY5OThlNWEzZDhjYmNlYjNkZDQxNzFlLi4zYjk3OWI4ZTk4NjVkM2U3
ODVmNzUyNTBjOGU4ZGVhYzlkY2VjMzhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4NyBAQAorMjAxOC0wOC0yNiAgWXVzdWtlIFN1enVraSAgPHl1c3VrZXN1enVraUBzbG93
c3RhcnQub3JnPgorCisgICAgICAgIFtXZWJBc3NlbWJseV0gUGFyc2Ugd2FzbSBtb2R1bGVzIGlu
IGEgc3RyZWFtaW5nIGZhc2hpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE4ODk0MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogdG9vbHMvSlNEb2xsYXJWTS5j
cHA6CisgICAgICAgIChXVEY6Oldhc21TdHJlYW1pbmdQYXJzZXI6Oldhc21TdHJlYW1pbmdQYXJz
ZXIpOgorICAgICAgICAoV1RGOjpXYXNtU3RyZWFtaW5nUGFyc2VyOjpjcmVhdGUpOgorICAgICAg
ICAoV1RGOjpXYXNtU3RyZWFtaW5nUGFyc2VyOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAo
V1RGOjpXYXNtU3RyZWFtaW5nUGFyc2VyOjpzdHJlYW1pbmdQYXJzZXIpOgorICAgICAgICAoV1RG
OjpXYXNtU3RyZWFtaW5nUGFyc2VyOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChXVEY6OmZ1
bmN0aW9uV2FzbVN0cmVhbWluZ1BhcnNlckFkZEJ5dGVzKToKKyAgICAgICAgKFdURjo6ZnVuY3Rp
b25XYXNtU3RyZWFtaW5nUGFyc2VyRmluYWxpemUpOgorICAgICAgICAoSlNDOjpmdW5jdGlvbkNy
ZWF0ZVdhc21TdHJlYW1pbmdQYXJzZXIpOgorICAgICAgICAoSlNDOjpKU0RvbGxhclZNOjpmaW5p
c2hDcmVhdGlvbik6CisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uaDoKKyAg
ICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlSW5mb3JtYXRpb246Om1lbW9yeUNvdW50IGNvbnN0KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlSW5mb3JtYXRpb246OnRhYmxlQ291bnQgY29uc3Qp
OgorICAgICAgICAqIHdhc20vV2FzbU1vZHVsZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6Oldh
c206Ok1vZHVsZVBhcnNlcjo6cGFyc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjptYWtlSTMySW5p
dEV4cHIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNl
VHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VJ
bXBvcnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNl
RnVuY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBh
cnNlUmVzaXphYmxlTGltaXRzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxl
UGFyc2VyOjpwYXJzZVRhYmxlSGVscGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6
TW9kdWxlUGFyc2VyOjpwYXJzZVRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6
TW9kdWxlUGFyc2VyOjpwYXJzZU1lbW9yeUhlbHBlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VNZW1vcnkpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlR2xvYmFsKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZUV4cG9ydCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VTdGFydCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VFbGVtZW50KTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZUNvZGUpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlSW5pdEV4cHIpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlR2xvYmFsVHlwZSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VEYXRhKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZUN1c3RvbSk6IERlbGV0ZWQuCisg
ICAgICAgICogd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmg6CisgICAgICAgICogd2FzbS9XYXNtUGFy
c2VyLmg6CisgICAgICAgIChKU0M6Oldhc206OlBhcnNlcjo6c291cmNlIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6UGFyc2VyOjpsZW5ndGggY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNt
OjpQYXJzZXI6Om9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OlBhcnNlcjo6ZmFp
bCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206Om1ha2VJMzJJbml0RXhwcik6CisgICAgICAg
ICogd2FzbS9XYXNtU2VjdGlvblBhcnNlci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwLgorICAgICAgICAoSlNDOjpXYXNtOjpT
ZWN0aW9uUGFyc2VyOjpwYXJzZVR5cGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFy
c2VyOjpwYXJzZUltcG9ydCk6CisgICAgICAgIChKU0M6Oldhc206OlNlY3Rpb25QYXJzZXI6OnBh
cnNlRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZVJl
c2l6YWJsZUxpbWl0cyk6CisgICAgICAgIChKU0M6Oldhc206OlNlY3Rpb25QYXJzZXI6OnBhcnNl
VGFibGVIZWxwZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZVRh
YmxlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VNZW1vcnlIZWxw
ZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZU1lbW9yeSk6Cisg
ICAgICAgIChKU0M6Oldhc206OlNlY3Rpb25QYXJzZXI6OnBhcnNlR2xvYmFsKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VFeHBvcnQpOgorICAgICAgICAoSlNDOjpX
YXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZVN0YXJ0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2Vj
dGlvblBhcnNlcjo6cGFyc2VFbGVtZW50KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBh
cnNlcjo6cGFyc2VDb2RlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFy
c2VJbml0RXhwcik6CisgICAgICAgIChKU0M6Oldhc206OlNlY3Rpb25QYXJzZXI6OnBhcnNlR2xv
YmFsVHlwZSk6CisgICAgICAgIChKU0M6Oldhc206OlNlY3Rpb25QYXJzZXI6OnBhcnNlRGF0YSk6
CisgICAgICAgIChKU0M6Oldhc206OlNlY3Rpb25QYXJzZXI6OnBhcnNlQ3VzdG9tKToKKyAgICAg
ICAgKiB3YXNtL1dhc21TZWN0aW9uUGFyc2VyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaC4KKyAgICAgICAgKiB3YXNtL1dhc21TdHJl
YW1pbmdQYXJzZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6cGFyc2VVSW50Nyk6
CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6U3RyZWFtaW5nUGFyc2VyKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6U3RyZWFtaW5nUGFyc2VyOjpwYXJzZU1vZHVsZUhlYWRlcik6
CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6cGFyc2VTZWN0aW9uSGVhZGVy
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U3RyZWFtaW5nUGFyc2VyOjpwYXJzZVNlY3Rpb25TaXpl
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U3RyZWFtaW5nUGFyc2VyOjpwYXJzZUNvZGVTZWN0aW9u
U2l6ZSk6CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6cGFyc2VGdW5jdGlv
bkhlYWRlcik6CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6cGFyc2VGdW5j
dGlvbkJvZHkpOgorICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OnBhcnNlU2Vj
dGlvbkJvZHkpOgorICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmNvbnN1bWUp
OgorICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmNvbnN1bWVWYXJVSW50MzIp
OgorICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6U3RyZWFtaW5nUGFyc2VyOjpmaW5hbGl6ZSk6CisgICAgICAgICogd2Fz
bS9XYXNtU3RyZWFtaW5nUGFyc2VyLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpTdHJl
YW1pbmdQYXJzZXI6OmFkZEJ5dGVzKToKKwogMjAxOC0wOC0yNCAgTWljaGFlbCBTYWJvZmYgIDxt
c2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBZQVJSOiBVcGRhdGUgVUNTIGNhbm9uaWNhbGl6
YXRpb24gdGFibGVzIGZvciBVbmljb2RlIDExCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKaW5k
ZXggODk3Njk4YzZlMDU5YWUxZDI2MjEzMWFjNTIwNDAwZTMxNzhlZGNjNS4uMDRkNDhlODViNTBm
YjgzZmIxMjUwNWZlZTE0YTg1MzU5Y2MxZTMwOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4
dApAQCAtOTkyLDcgKzk5Miw5IEBAIHdhc20vV2FzbU9NR1BsYW4uY3BwCiB3YXNtL1dhc21PcGNv
ZGVPcmlnaW4uY3BwCiB3YXNtL1dhc21QYWdlQ291bnQuY3BwCiB3YXNtL1dhc21QbGFuLmNwcAor
d2FzbS9XYXNtU2VjdGlvblBhcnNlci5jcHAKIHdhc20vV2FzbVNpZ25hdHVyZS5jcHAKK3dhc20v
V2FzbVN0cmVhbWluZ1BhcnNlci5jcHAKIHdhc20vV2FzbVRhYmxlLmNwcAogd2FzbS9XYXNtVGFi
bGUuaAogd2FzbS9XYXNtVGh1bmtzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pT
RG9sbGFyVk0uY3BwCmluZGV4IGViNTdjNzg0Yzk4MTgwNDYyZDRhOGU0M2M4NmI1MGJhYWFlODQ5
M2IuLjA1MzZiNzhjYzg5MTUxZDM4NmFjYWVhYmI1MWNlM2NlNzJmMDllNzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAKQEAgLTUxLDYgKzUxLDExIEBACiAj
aW5jbHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVh
bS5oPgogCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlI
ZWxwZXJzLmgiCisjaW5jbHVkZSAiV2FzbVN0cmVhbWluZ1BhcnNlci5oIgorI2VuZGlmCisKIHVz
aW5nIG5hbWVzcGFjZSBKU0M7CiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCkBAIC0xMDkzLDYgKzEw
OTgsODAgQEAgdm9pZCBFbGVtZW50OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFJvb3QqIHJvb3Qp
CiAgICAgbV9yb290LT5zZXRFbGVtZW50KHRoaXMpOwogfQogCisjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbldhc21T
dHJlYW1pbmdQYXJzZXJBZGRCeXRlcyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uV2FzbVN0cmVhbWluZ1BhcnNlckZpbmFsaXplKEV4ZWNT
dGF0ZSopOworCitjbGFzcyBXYXNtU3RyZWFtaW5nUGFyc2VyIDogcHVibGljIEpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0IHsKK3B1YmxpYzoKKyAgICBXYXNtU3RyZWFtaW5nUGFyc2VyKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQorICAgICAg
ICAsIG1faW5mbyhhZG9wdFJlZigqbmV3IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uKFZlY3Rvcjx1
aW50OF90PigpKSkpCisgICAgICAgICwgbV9zdHJlYW1pbmdQYXJzZXIobV9pbmZvLmdldCgpKQor
ICAgIHsKKyAgICB9CisKKyAgICB1c2luZyBCYXNlID0gSlNEZXN0cnVjdGlibGVPYmplY3Q7CisK
KyAgICBzdGF0aWMgV2FzbVN0cmVhbWluZ1BhcnNlciogY3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gY3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIGpzTnVsbCgpKTsKKyAgICAgICAg
V2FzbVN0cmVhbWluZ1BhcnNlciogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
V2FzbVN0cmVhbWluZ1BhcnNlcj4odm0uaGVhcCwgc2l6ZW9mKFdhc21TdHJlYW1pbmdQYXJzZXIp
KSkgV2FzbVN0cmVhbWluZ1BhcnNlcih2bSwgc3RydWN0dXJlKTsKKyAgICAgICAgcmVzdWx0LT5m
aW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAgV2FzbTo6
U3RyZWFtaW5nUGFyc2VyJiBzdHJlYW1pbmdQYXJzZXIoKSB7IHJldHVybiBtX3N0cmVhbWluZ1Bh
cnNlcjsgfQorCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0pCisgICAgeworICAgICAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IHRoaXMtPmdsb2JhbE9iamVjdCh2bSk7CisgICAgICAgIHB1dERpcmVjdE5h
dGl2ZUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZt
LCAiYWRkQnl0ZXMiKSwgMCwgZnVuY3Rpb25XYXNtU3RyZWFtaW5nUGFyc2VyQWRkQnl0ZXMsIE5v
SW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKSk7CisgICAgICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3Qs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZmluYWxpemUiKSwgMCwgZnVuY3Rpb25XYXNt
U3RyZWFtaW5nUGFyc2VyRmluYWxpemUsIE5vSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgfQorCisgICAgREVDTEFSRV9J
TkZPOworCisgICAgUmVmPFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPiBtX2luZm87CisgICAgV2Fz
bTo6U3RyZWFtaW5nUGFyc2VyIG1fc3RyZWFtaW5nUGFyc2VyOworfTsKKworY29uc3QgQ2xhc3NJ
bmZvIFdhc21TdHJlYW1pbmdQYXJzZXI6OnNfaW5mbyA9IHsgIldhc21TdHJlYW1pbmdQYXJzZXIi
LCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFdh
c21TdHJlYW1pbmdQYXJzZXIpIH07CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25XYXNtU3RyZWFtaW5nUGFyc2VyQWRkQnl0ZXMoRXhlY1N0YXRlKiBleGVjKQoreworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUoZXhlYy0+dm0oKSk7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzRHluYW1pY0Nhc3Q8V2Fz
bVN0cmVhbWluZ1BhcnNlcio+KHZtLCBleGVjLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCF0aGlz
T2JqZWN0KSB7CisgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKKyAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKTsKKyAgICB9CisgICAgYXV0byBkYXRhID0gZ2V0
V2FzbUJ1ZmZlckZyb21WYWx1ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgc2NvcGUucmVsZWFz
ZSgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50
MzJfdD4odGhpc09iamVjdC0+c3RyZWFtaW5nUGFyc2VyKCkuYWRkQnl0ZXMoYml0d2lzZV9jYXN0
PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmZpcnN0KSwgZGF0YS5zZWNvbmQpKSkpOworfQorCitFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uV2FzbVN0cmVhbWluZ1BhcnNlckZpbmFs
aXplKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0R5bmFtaWNDYXN0PFdhc21TdHJlYW1pbmdQYXJzZXIqPih2bSwg
ZXhlYy0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghdGhpc09iamVjdCkKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVtYmVyKHN0YXRpY19jYXN0PGludDMyX3Q+KHRoaXNPYmplY3QtPnN0cmVhbWlu
Z1BhcnNlcigpLmZpbmFsaXplKCkpKSk7Cit9CisKKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZQog
CiBuYW1lc3BhY2UgSlNDIHsKQEAgLTE2NDAsNiArMTcxOSwxNSBAQCBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZURPTUpJVEdldHRlckJhc2VKU09iamVj
dChFeGVjUwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAorI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1
bmN0aW9uQ3JlYXRlV2FzbVN0cmVhbWluZ1BhcnNlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShXYXNtU3RyZWFtaW5nUGFyc2VyOjpjcmVhdGUodm0sIGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKSkpOworfQorI2VuZGlmCisKIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2V0SW1wdXJlR2V0dGVyRGVsZWdhdGUoRXhlY1N0
YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CkBAIC0yMDQwLDYgKzIxMjgs
OSBAQCB2b2lkIEpTRG9sbGFyVk06OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICBhZGRGdW5j
dGlvbih2bSwgImNyZWF0ZURPTUpJVENoZWNrU3ViQ2xhc3NPYmplY3QiLCBmdW5jdGlvbkNyZWF0
ZURPTUpJVENoZWNrU3ViQ2xhc3NPYmplY3QsIDApOwogICAgIGFkZEZ1bmN0aW9uKHZtLCAiY3Jl
YXRlRE9NSklUR2V0dGVyQmFzZUpTT2JqZWN0IiwgZnVuY3Rpb25DcmVhdGVET01KSVRHZXR0ZXJC
YXNlSlNPYmplY3QsIDApOwogICAgIGFkZEZ1bmN0aW9uKHZtLCAiY3JlYXRlQnVpbHRpbiIsIGZ1
bmN0aW9uQ3JlYXRlQnVpbHRpbiwgMik7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIGFk
ZEZ1bmN0aW9uKHZtLCAiY3JlYXRlV2FzbVN0cmVhbWluZ1BhcnNlciIsIGZ1bmN0aW9uQ3JlYXRl
V2FzbVN0cmVhbWluZ1BhcnNlciwgMCk7CisjZW5kaWYKICAgICBhZGRGdW5jdGlvbih2bSwgImdl
dFByaXZhdGVQcm9wZXJ0eSIsIGZ1bmN0aW9uR2V0UHJpdmF0ZVByb3BlcnR5LCAyKTsKICAgICBh
ZGRGdW5jdGlvbih2bSwgInNldEltcHVyZUdldHRlckRlbGVnYXRlIiwgZnVuY3Rpb25TZXRJbXB1
cmVHZXR0ZXJEZWxlZ2F0ZSwgMik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgKaW5kZXggMGJhYjU3ZTA3MGQyZWEzMzA2MmYzNjM2
NThhMjQxNWU5YmQ1MWUyZC4uMTZkNTI1OWE3MjU3YTU3OTBjMDQ4Zjg5ZGQzZTQyOTRkNjdlMzRm
ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9y
bWF0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9y
bWF0aW9uLmgKQEAgLTU4LDYgKzU4LDkgQEAgc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uIDogcHVi
bGljIFRocmVhZFNhZmVSZWZDb3VudGVkPE1vZHVsZUluZm9ybWF0aW9uPiB7CiAgICAgdWludDMy
X3QgaW1wb3J0RnVuY3Rpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJuIGltcG9ydEZ1bmN0aW9uU2ln
bmF0dXJlSW5kaWNlcy5zaXplKCk7IH0KICAgICB1aW50MzJfdCBpbnRlcm5hbEZ1bmN0aW9uQ291
bnQoKSBjb25zdCB7IHJldHVybiBpbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXpl
KCk7IH0KIAorICAgIHVpbnQzMl90IG1lbW9yeUNvdW50KCkgY29uc3QgeyByZXR1cm4gbWVtb3J5
ID8gMSA6IDA7IH0KKyAgICB1aW50MzJfdCB0YWJsZUNvdW50KCkgY29uc3QgeyByZXR1cm4gdGFi
bGVJbmZvcm1hdGlvbiA/IDEgOiAwOyB9CisKICAgICBjb25zdCBWZWN0b3I8dWludDhfdD4gc291
cmNlOwogICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8Q1N0cmluZz4gaGFzaDsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAppbmRleCBmMDNlNjk4
N2Y0YTUwMjU5MWRmNzFkYzgxNTc4MjA4MDk5NjEzOGI0Li4wZDU0MGYxNjZlODcxYzE2MGZlNWYw
NjgwNWQ5ODRkODY5NDAwM2NhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTW9kdWxlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTW9kdWxlUGFyc2VyLmNwcApAQCAtMzIsMTggKzMyLDExIEBACiAjaW5jbHVkZSAiV2FzbU1l
bW9yeUluZm9ybWF0aW9uLmgiCiAjaW5jbHVkZSAiV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmgiCiAj
aW5jbHVkZSAiV2FzbU9wcy5oIgorI2luY2x1ZGUgIldhc21TZWN0aW9uUGFyc2VyLmgiCiAjaW5j
bHVkZSAiV2FzbVNlY3Rpb25zLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7
CiAKLUFMV0FZU19JTkxJTkUgSTMySW5pdEV4cHIgbWFrZUkzMkluaXRFeHByKHVpbnQ4X3Qgb3Bj
b2RlLCB1aW50MzJfdCBiaXRzKQotewotICAgIFJFTEVBU0VfQVNTRVJUKG9wY29kZSA9PSBJMzJD
b25zdCB8fCBvcGNvZGUgPT0gR2V0R2xvYmFsKTsKLSAgICBpZiAob3Bjb2RlID09IEkzMkNvbnN0
KQotICAgICAgICByZXR1cm4gSTMySW5pdEV4cHI6OmNvbnN0VmFsdWUoYml0cyk7Ci0gICAgcmV0
dXJuIEkzMkluaXRFeHByOjpnbG9iYWxJbXBvcnQoYml0cyk7Ci19Ci0KIGF1dG8gTW9kdWxlUGFy
c2VyOjpwYXJzZSgpIC0+IFJlc3VsdAogewogICAgIGNvbnN0IHNpemVfdCBtaW5TaXplID0gODsK
QEAgLTcxLDE5ICs2NCwxOSBAQCBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2UoKSAtPiBSZXN1bHQK
ICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoc2VjdGlvbkxlbmd0
aCksICJjYW4ndCBnZXQgIiwgc2VjdGlvbiwgIiBzZWN0aW9uJ3MgbGVuZ3RoIik7CiAgICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoc2VjdGlvbkxlbmd0aCA+IGxlbmd0aCgpIC0gbV9vZmZzZXQs
IHNlY3Rpb24sICIgc2VjdGlvbiBvZiBzaXplICIsIHNlY3Rpb25MZW5ndGgsICIgd291bGQgb3Zl
cmZsb3cgTW9kdWxlJ3Mgc2l6ZSIpOwogCi0gICAgICAgIGF1dG8gZW5kID0gbV9vZmZzZXQgKyBz
ZWN0aW9uTGVuZ3RoOworICAgICAgICBTZWN0aW9uUGFyc2VyIHBhcnNlcihzb3VyY2UoKSArIG1f
b2Zmc2V0LCBzZWN0aW9uTGVuZ3RoLCBtX29mZnNldCwgbV9pbmZvLmdldCgpKTsKIAogICAgICAg
ICBzd2l0Y2ggKHNlY3Rpb24pIHsKICNkZWZpbmUgV0FTTV9TRUNUSU9OX1BBUlNFKE5BTUUsIElE
LCBERVNDUklQVElPTikgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBjYXNlIFNlY3Rpb246
Ok5BTUU6IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
ICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlICMjIE5BTUUoKSk7ICAgICAgICAg
ICAgIFwKKyAgICAgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VyLnBhcnNl
ICMjIE5BTUUoKSk7ICAgICAgICAgICAgIFwKICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICB9CiAgICAg
ICAgIEZPUl9FQUNIX0tOT1dOX1dBU01fU0VDVElPTihXQVNNX1NFQ1RJT05fUEFSU0UpCiAjdW5k
ZWYgV0FTTV9TRUNUSU9OX1BBUlNFCiAKICAgICAgICAgY2FzZSBTZWN0aW9uOjpDdXN0b206IHsK
LSAgICAgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VDdXN0b20oc2VjdGlv
bkxlbmd0aCkpOworICAgICAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZXIu
cGFyc2VDdXN0b20oKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC05Myw3
ICs4Niw5IEBAIGF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZSgpIC0+IFJlc3VsdAogICAgICAgICB9
CiAgICAgICAgIH0KIAotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGVuZCAhPSBtX29mZnNl
dCwgInBhcnNpbmcgZW5kZWQgYmVmb3JlIHRoZSBlbmQgb2YgIiwgc2VjdGlvbiwgIiBzZWN0aW9u
Iik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYocGFyc2VyLmxlbmd0aCgpICE9IHBhcnNl
ci5vZmZzZXQoKSwgInBhcnNpbmcgZW5kZWQgYmVmb3JlIHRoZSBlbmQgb2YgIiwgc2VjdGlvbiwg
IiBzZWN0aW9uIik7CisKKyAgICAgICAgbV9vZmZzZXQgKz0gc2VjdGlvbkxlbmd0aDsKIAogCiAg
ICAgICAgIGlmIChpc0tub3duU2VjdGlvbihzZWN0aW9uKSkKQEAgLTEwMyw1MjggKzk4LDYgQEAg
YXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlKCkgLT4gUmVzdWx0CiAgICAgcmV0dXJuIHsgfTsKIH0K
IAotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlVHlwZSgpIC0+IFBhcnRpYWxSZXN1bHQKLXsKLSAg
ICB1aW50MzJfdCBjb3VudDsKLQotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUlu
dDMyKGNvdW50KSwgImNhbid0IGdldCBUeXBlIHNlY3Rpb24ncyBjb3VudCIpOwotICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoY291bnQgPiBtYXhUeXBlcywgIlR5cGUgc2VjdGlvbidzIGNvdW50IGlz
IHRvbyBiaWcgIiwgY291bnQsICIgbWF4aW11bSAiLCBtYXhUeXBlcyk7Ci0gICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighbV9pbmZvLT51c2VkU2lnbmF0dXJlcy50cnlSZXNlcnZlQ2FwYWNpdHkoY291
bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgVHlwZSBzZWN0aW9uJ3MgIiwg
Y291bnQsICIgZW50cmllcyIpOwotCi0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50
OyArK2kpIHsKLSAgICAgICAgaW50OF90IHR5cGU7Ci0gICAgICAgIHVpbnQzMl90IGFyZ3VtZW50
Q291bnQ7Ci0gICAgICAgIFZlY3RvcjxUeXBlPiBhcmd1bWVudFR5cGVzOwotCi0gICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlSW50Nyh0eXBlKSwgImNhbid0IGdldCAiLCBpLCAidGgg
VHlwZSdzIHR5cGUiKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0eXBlICE9IEZ1bmMs
IGksICJ0aCBUeXBlIGlzIG5vbi1GdW5jICIsIHR5cGUpOwotICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFwYXJzZVZhclVJbnQzMihhcmd1bWVudENvdW50KSwgImNhbid0IGdldCAiLCBpLCAi
dGggVHlwZSdzIGFyZ3VtZW50IGNvdW50Iik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
YXJndW1lbnRDb3VudCA+IG1heEZ1bmN0aW9uUGFyYW1zLCBpLCAidGggYXJndW1lbnQgY291bnQg
aXMgdG9vIGJpZyAiLCBhcmd1bWVudENvdW50LCAiIG1heGltdW0gIiwgbWF4RnVuY3Rpb25QYXJh
bXMpOwotICAgICAgICBSZWZQdHI8U2lnbmF0dXJlPiBtYXliZVNpZ25hdHVyZSA9IFNpZ25hdHVy
ZTo6dHJ5Q3JlYXRlKGFyZ3VtZW50Q291bnQpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFtYXliZVNpZ25hdHVyZSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIFR5cGUg
c2VjdGlvbidzICIsIGksICJ0aCBzaWduYXR1cmUiKTsKLSAgICAgICAgUmVmPFNpZ25hdHVyZT4g
c2lnbmF0dXJlID0gbWF5YmVTaWduYXR1cmUucmVsZWFzZU5vbk51bGwoKTsKLQotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytpKSB7Ci0gICAgICAgICAg
ICBUeXBlIGFyZ3VtZW50VHlwZTsKLSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBh
cnNlVmFsdWVUeXBlKGFyZ3VtZW50VHlwZSksICJjYW4ndCBnZXQgIiwgaSwgInRoIGFyZ3VtZW50
IFR5cGUiKTsKLSAgICAgICAgICAgIHNpZ25hdHVyZS0+YXJndW1lbnQoaSkgPSBhcmd1bWVudFR5
cGU7Ci0gICAgICAgIH0KLQotICAgICAgICB1aW50OF90IHJldHVybkNvdW50OwotICAgICAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQxKHJldHVybkNvdW50KSwgImNhbid0IGdl
dCAiLCBpLCAidGggVHlwZSdzIHJldHVybiBjb3VudCIpOwotICAgICAgICBUeXBlIHJldHVyblR5
cGU7Ci0gICAgICAgIGlmIChyZXR1cm5Db3VudCkgewotICAgICAgICAgICAgVHlwZSB2YWx1ZTsK
LSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFsdWVUeXBlKHZhbHVlKSwg
ImNhbid0IGdldCAiLCBpLCAidGggVHlwZSdzIHJldHVybiB2YWx1ZSIpOwotICAgICAgICAgICAg
cmV0dXJuVHlwZSA9IHN0YXRpY19jYXN0PFR5cGU+KHZhbHVlKTsKLSAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICByZXR1cm5UeXBlID0gVHlwZTo6Vm9pZDsKLSAgICAgICAgc2lnbmF0dXJlLT5y
ZXR1cm5UeXBlKCkgPSByZXR1cm5UeXBlOwotCi0gICAgICAgIHN0ZDo6cGFpcjxTaWduYXR1cmVJ
bmRleCwgUmVmPFNpZ25hdHVyZT4+IHJlc3VsdCA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjphZG9w
dChXVEZNb3ZlKHNpZ25hdHVyZSkpOwotICAgICAgICBtX2luZm8tPnVzZWRTaWduYXR1cmVzLnVu
Y2hlY2tlZEFwcGVuZChXVEZNb3ZlKHJlc3VsdC5zZWNvbmQpKTsKLSAgICB9Ci0gICAgcmV0dXJu
IHsgfTsKLX0KLQotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlSW1wb3J0KCkgLT4gUGFydGlhbFJl
c3VsdAotewotICAgIHVpbnQzMl90IGltcG9ydENvdW50OwotICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIXBhcnNlVmFyVUludDMyKGltcG9ydENvdW50KSwgImNhbid0IGdldCBJbXBvcnQgc2VjdGlv
bidzIGNvdW50Iik7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbXBvcnRDb3VudCA+IG1heElt
cG9ydHMsICJJbXBvcnQgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgaW1wb3J0Q291bnQs
ICIgbWF4aW11bSAiLCBtYXhJbXBvcnRzKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2lu
Zm8tPmdsb2JhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50KSwgImNhbid0IGFsbG9j
YXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGltcG9ydENvdW50LCAiIGdsb2JhbHMiKTsgLy8gRklY
TUUgdGhpcyBvdmVyLWFsbG9jYXRlcyB3aGVuIHdlIGZpeCB0aGUgRklYTUVzIGJlbG93LgotICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+aW1wb3J0cy50cnlSZXNlcnZlQ2FwYWNpdHko
aW1wb3J0Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgaW1wb3J0
Q291bnQsICIgaW1wb3J0cyIpOyAvLyBGSVhNRSB0aGlzIG92ZXItYWxsb2NhdGVzIHdoZW4gd2Ug
Zml4IHRoZSBGSVhNRXMgYmVsb3cuCi0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5p
bXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENv
dW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGltcG9ydENvdW50LCAi
IGltcG9ydCBmdW5jdGlvbiBzaWduYXR1cmVzIik7IC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0
ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxvdy4KLQotICAgIGZvciAodWludDMyX3QgaW1w
b3J0TnVtYmVyID0gMDsgaW1wb3J0TnVtYmVyIDwgaW1wb3J0Q291bnQ7ICsraW1wb3J0TnVtYmVy
KSB7Ci0gICAgICAgIHVpbnQzMl90IG1vZHVsZUxlbjsKLSAgICAgICAgdWludDMyX3QgZmllbGRM
ZW47Ci0gICAgICAgIE5hbWUgbW9kdWxlU3RyaW5nOwotICAgICAgICBOYW1lIGZpZWxkU3RyaW5n
OwotICAgICAgICBFeHRlcm5hbEtpbmQga2luZDsKLSAgICAgICAgdW5zaWduZWQga2luZEluZGV4
IHsgMCB9OwotCi0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKG1v
ZHVsZUxlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0J3MgbW9kdWxl
IG5hbWUgbGVuZ3RoIik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVVVEY4
U3RyaW5nKG1vZHVsZVN0cmluZywgbW9kdWxlTGVuKSwgImNhbid0IGdldCAiLCBpbXBvcnROdW1i
ZXIsICJ0aCBJbXBvcnQncyBtb2R1bGUgbmFtZSBvZiBsZW5ndGggIiwgbW9kdWxlTGVuKTsKLQot
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihmaWVsZExlbiksICJj
YW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0J3MgZmllbGQgbmFtZSBsZW5ndGgg
aW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIWNvbnN1bWVVVEY4U3RyaW5nKGZpZWxkU3RyaW5nLCBmaWVsZExlbiksICJjYW4ndCBn
ZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0J3MgZmllbGQgbmFtZSBvZiBsZW5ndGggIiwg
bW9kdWxlTGVuLCAiIGluIG1vZHVsZSAnIiwgbW9kdWxlU3RyaW5nLCAiJyIpOwotCi0gICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlRXh0ZXJuYWxLaW5kKGtpbmQpLCAiY2FuJ3QgZ2V0
ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdzIGtpbmQgaW4gbW9kdWxlICciLCBtb2R1bGVT
dHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0cmluZywgIiciKTsKLSAgICAgICAgc3dpdGNoIChr
aW5kKSB7Ci0gICAgICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpGdW5jdGlvbjogewotICAgICAgICAg
ICAgdWludDMyX3QgZnVuY3Rpb25TaWduYXR1cmVJbmRleDsKLSAgICAgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGZ1bmN0aW9uU2lnbmF0dXJlSW5kZXgpLCAiY2Fu
J3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdzIGZ1bmN0aW9uIHNpZ25hdHVyZSBp
biBtb2R1bGUgJyIsIG1vZHVsZVN0cmluZywgIicgZmllbGQgJyIsIGZpZWxkU3RyaW5nLCAiJyIp
OwotICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvblNpZ25hdHVyZUluZGV4
ID49IG1faW5mby0+dXNlZFNpZ25hdHVyZXMuc2l6ZSgpLCAiaW52YWxpZCBmdW5jdGlvbiBzaWdu
YXR1cmUgZm9yICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCwgIiwgZnVuY3Rpb25TaWduYXR1
cmVJbmRleCwgIiBpcyBvdXQgb2YgcmFuZ2Ugb2YgIiwgbV9pbmZvLT51c2VkU2lnbmF0dXJlcy5z
aXplKCksICIgaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0
cmluZywgIiciKTsKLSAgICAgICAgICAgIGtpbmRJbmRleCA9IG1faW5mby0+aW1wb3J0RnVuY3Rp
b25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsKLSAgICAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNp
Z25hdHVyZUluZGV4ID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChtX2luZm8tPnVzZWRTaWdu
YXR1cmVzW2Z1bmN0aW9uU2lnbmF0dXJlSW5kZXhdKTsKLSAgICAgICAgICAgIG1faW5mby0+aW1w
b3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnVuY2hlY2tlZEFwcGVuZChzaWduYXR1cmVJbmRl
eCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEV4dGVybmFs
S2luZDo6VGFibGU6IHsKLSAgICAgICAgICAgIGJvb2wgaXNJbXBvcnQgPSB0cnVlOwotICAgICAg
ICAgICAgUGFydGlhbFJlc3VsdCByZXN1bHQgPSBwYXJzZVRhYmxlSGVscGVyKGlzSW1wb3J0KTsK
LSAgICAgICAgICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoV1RGTW92ZShyZXN1bHQuZXJyb3IoKSkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6Ok1lbW9yeTogewot
ICAgICAgICAgICAgYm9vbCBpc0ltcG9ydCA9IHRydWU7Ci0gICAgICAgICAgICBQYXJ0aWFsUmVz
dWx0IHJlc3VsdCA9IHBhcnNlTWVtb3J5SGVscGVyKGlzSW1wb3J0KTsKLSAgICAgICAgICAgIGlm
IChVTkxJS0VMWSghcmVzdWx0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoV1RGTW92ZShyZXN1bHQuZXJyb3IoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6Okdsb2JhbDogewotICAgICAgICAgICAgR2xv
YmFsIGdsb2JhbDsKLSAgICAgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VH
bG9iYWxUeXBlKGdsb2JhbCkpOwotICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihnbG9i
YWwubXV0YWJpbGl0eSA9PSBHbG9iYWw6Ok11dGFibGUsICJNdXRhYmxlIEdsb2JhbHMgYXJlbid0
IHN1cHBvcnRlZCIpOwotCi0gICAgICAgICAgICBraW5kSW5kZXggPSBtX2luZm8tPmdsb2JhbHMu
c2l6ZSgpOwotICAgICAgICAgICAgbV9pbmZvLT5nbG9iYWxzLnVuY2hlY2tlZEFwcGVuZChXVEZN
b3ZlKGdsb2JhbCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIG1faW5mby0+aW1wb3J0cy51bmNoZWNrZWRBcHBlbmQoeyBXVEZNb3ZlKG1vZHVs
ZVN0cmluZyksIFdURk1vdmUoZmllbGRTdHJpbmcpLCBraW5kLCBraW5kSW5kZXggfSk7Ci0gICAg
fQotCi0gICAgbV9pbmZvLT5maXJzdEludGVybmFsR2xvYmFsID0gbV9pbmZvLT5nbG9iYWxzLnNp
emUoKTsKLSAgICByZXR1cm4geyB9OwotfQotCi1hdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VGdW5j
dGlvbigpIC0+IFBhcnRpYWxSZXN1bHQKLXsKLSAgICB1aW50MzJfdCBjb3VudDsKLSAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihjb3VudCksICJjYW4ndCBnZXQgRnVuY3Rp
b24gc2VjdGlvbidzIGNvdW50Iik7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRihjb3VudCA+IG1h
eEZ1bmN0aW9ucywgIkZ1bmN0aW9uIHNlY3Rpb24ncyBjb3VudCBpcyB0b28gYmlnICIsIGNvdW50
LCAiIG1heGltdW0gIiwgbWF4RnVuY3Rpb25zKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFt
X2luZm8tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnRyeVJlc2VydmVDYXBhY2l0
eShjb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBjb3VudCwgIiBG
dW5jdGlvbiBzaWduYXR1cmVzIik7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5m
dW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkudHJ5UmVzZXJ2ZUNhcGFjaXR5KGNvdW50KSwgImNhbid0
IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGNvdW50LCAiRnVuY3Rpb24gbG9jYXRpb25z
Iik7Ci0KLSAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAg
ICB1aW50MzJfdCB0eXBlTnVtYmVyOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJz
ZVZhclVJbnQzMih0eXBlTnVtYmVyKSwgImNhbid0IGdldCAiLCBpLCAidGggRnVuY3Rpb24ncyB0
eXBlIG51bWJlciIpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHR5cGVOdW1iZXIgPj0g
bV9pbmZvLT51c2VkU2lnbmF0dXJlcy5zaXplKCksIGksICJ0aCBGdW5jdGlvbiB0eXBlIG51bWJl
ciBpcyBpbnZhbGlkICIsIHR5cGVOdW1iZXIpOwotCi0gICAgICAgIFNpZ25hdHVyZUluZGV4IHNp
Z25hdHVyZUluZGV4ID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChtX2luZm8tPnVzZWRTaWdu
YXR1cmVzW3R5cGVOdW1iZXJdKTsKLSAgICAgICAgLy8gVGhlIENvZGUgc2VjdGlvbiBmaXhlcyB1
cCBzdGFydCBhbmQgZW5kLgotICAgICAgICBzaXplX3Qgc3RhcnQgPSAwOwotICAgICAgICBzaXpl
X3QgZW5kID0gMDsKLSAgICAgICAgbV9pbmZvLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5k
aWNlcy51bmNoZWNrZWRBcHBlbmQoc2lnbmF0dXJlSW5kZXgpOwotICAgICAgICBtX2luZm8tPmZ1
bmN0aW9uTG9jYXRpb25JbkJpbmFyeS51bmNoZWNrZWRBcHBlbmQoeyBzdGFydCwgZW5kIH0pOwot
ICAgIH0KLQotICAgIHJldHVybiB7IH07Ci19Ci0KLWF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZVJl
c2l6YWJsZUxpbWl0cyh1aW50MzJfdCYgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4m
IG1heGltdW0pIC0+IFBhcnRpYWxSZXN1bHQKLXsKLSAgICBBU1NFUlQoIW1heGltdW0pOwotCi0g
ICAgdWludDhfdCBmbGFnczsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQx
KGZsYWdzKSwgImNhbid0IHBhcnNlIHJlc2l6YWJsZSBsaW1pdHMgZmxhZ3MiKTsKLSAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbml0aWFsKSwgImNhbid0IHBhcnNlIHJl
c2l6YWJsZSBsaW1pdHMgaW5pdGlhbCBwYWdlIGNvdW50Iik7Ci0KLSAgICBpZiAoZmxhZ3MpIHsK
LSAgICAgICAgdWludDMyX3QgbWF4aW11bUludDsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RighcGFyc2VWYXJVSW50MzIobWF4aW11bUludCksICJjYW4ndCBwYXJzZSByZXNpemFibGUgbGlt
aXRzIG1heGltdW0gcGFnZSBjb3VudCIpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGlu
aXRpYWwgPiBtYXhpbXVtSW50LCAicmVzaXphYmxlIGxpbWl0cyBoYXMgYSBpbml0aWFsIHBhZ2Ug
Y291bnQgb2YgIiwgaW5pdGlhbCwgIiB3aGljaCBpcyBncmVhdGVyIHRoYW4gaXRzIG1heGltdW0g
IiwgbWF4aW11bUludCk7Ci0gICAgICAgIG1heGltdW0gPSBtYXhpbXVtSW50OwotICAgIH0KLQot
ICAgIHJldHVybiB7IH07Ci19Ci0KLWF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZVRhYmxlSGVscGVy
KGJvb2wgaXNJbXBvcnQpIC0+IFBhcnRpYWxSZXN1bHQKLXsKLSAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKG1fdGFibGVDb3VudCA+IDAsICJDYW5ub3QgaGF2ZSBtb3JlIHRoYW4gb25lIFRhYmxlIGZv
ciBub3ciKTsKLQotICAgICsrbV90YWJsZUNvdW50OwotCi0gICAgaW50OF90IHR5cGU7Ci0gICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VJbnQ3KHR5cGUpLCAiY2FuJ3QgcGFyc2UgVGFibGUg
dHlwZSIpOwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYodHlwZSAhPSBXYXNtOjpBbnlmdW5jLCAi
VGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290ICIsIHR5cGUpOwotCi0gICAgdWludDMy
X3QgaW5pdGlhbDsKLSAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtOwotICAgIFBh
cnRpYWxSZXN1bHQgbGltaXRzID0gcGFyc2VSZXNpemFibGVMaW1pdHMoaW5pdGlhbCwgbWF4aW11
bSk7Ci0gICAgaWYgKFVOTElLRUxZKCFsaW1pdHMpKQotICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoV1RGTW92ZShsaW1pdHMuZXJyb3IoKSkpOwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
aW5pdGlhbCA+IG1heFRhYmxlRW50cmllcywgIlRhYmxlJ3MgaW5pdGlhbCBwYWdlIGNvdW50IG9m
ICIsIGluaXRpYWwsICIgaXMgdG9vIGJpZywgbWF4aW11bSAiLCBtYXhUYWJsZUVudHJpZXMpOwot
Ci0gICAgQVNTRVJUKCFtYXhpbXVtIHx8ICptYXhpbXVtID49IGluaXRpYWwpOwotCi0gICAgbV9p
bmZvLT50YWJsZUluZm9ybWF0aW9uID0gVGFibGVJbmZvcm1hdGlvbihpbml0aWFsLCBtYXhpbXVt
LCBpc0ltcG9ydCk7Ci0KLSAgICByZXR1cm4geyB9OwotfQotCi1hdXRvIE1vZHVsZVBhcnNlcjo6
cGFyc2VUYWJsZSgpIC0+IFBhcnRpYWxSZXN1bHQKLXsKLSAgICB1aW50MzJfdCBjb3VudDsKLSAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihjb3VudCksICJjYW4ndCBnZXQg
VGFibGUncyBjb3VudCIpOwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoY291bnQgPiAxLCAiVGFi
bGUgY291bnQgb2YgIiwgY291bnQsICIgaXMgaW52YWxpZCwgYXQgbW9zdCAxIGlzIGFsbG93ZWQg
Zm9yIG5vdyIpOwotCi0gICAgaWYgKCFjb3VudCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAg
IGJvb2wgaXNJbXBvcnQgPSBmYWxzZTsKLSAgICBQYXJ0aWFsUmVzdWx0IHJlc3VsdCA9IHBhcnNl
VGFibGVIZWxwZXIoaXNJbXBvcnQpOwotICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkKLSAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFdURk1vdmUocmVzdWx0LmVycm9yKCkpKTsKLQotICAg
IHJldHVybiB7IH07Ci19Ci0KLWF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZU1lbW9yeUhlbHBlcihi
b29sIGlzSW1wb3J0KSAtPiBQYXJ0aWFsUmVzdWx0Ci17Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9J
RihtX21lbW9yeUNvdW50LCAidGhlcmUgY2FuIGF0IG1vc3QgYmUgb25lIE1lbW9yeSBzZWN0aW9u
IGZvciBub3ciKTsKLQotICAgICsrbV9tZW1vcnlDb3VudDsKLQotICAgIFBhZ2VDb3VudCBpbml0
aWFsUGFnZUNvdW50OwotICAgIFBhZ2VDb3VudCBtYXhpbXVtUGFnZUNvdW50OwotICAgIHsKLSAg
ICAgICAgdWludDMyX3QgaW5pdGlhbDsKLSAgICAgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4g
bWF4aW11bTsKLSAgICAgICAgUGFydGlhbFJlc3VsdCBsaW1pdHMgPSBwYXJzZVJlc2l6YWJsZUxp
bWl0cyhpbml0aWFsLCBtYXhpbXVtKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFsaW1pdHMpKQot
ICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFdURk1vdmUobGltaXRzLmVycm9yKCkp
KTsKLSAgICAgICAgQVNTRVJUKCFtYXhpbXVtIHx8ICptYXhpbXVtID49IGluaXRpYWwpOwotICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFQYWdlQ291bnQ6OmlzVmFsaWQoaW5pdGlhbCksICJN
ZW1vcnkncyBpbml0aWFsIHBhZ2UgY291bnQgb2YgIiwgaW5pdGlhbCwgIiBpcyBpbnZhbGlkIik7
Ci0KLSAgICAgICAgaW5pdGlhbFBhZ2VDb3VudCA9IFBhZ2VDb3VudChpbml0aWFsKTsKLQotICAg
ICAgICBpZiAobWF4aW11bSkgewotICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighUGFn
ZUNvdW50Ojppc1ZhbGlkKCptYXhpbXVtKSwgIk1lbW9yeSdzIG1heGltdW0gcGFnZSBjb3VudCBv
ZiAiLCAqbWF4aW11bSwgIiBpcyBpbnZhbGlkIik7Ci0gICAgICAgICAgICBtYXhpbXVtUGFnZUNv
dW50ID0gUGFnZUNvdW50KCptYXhpbXVtKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBBU1NFUlQo
aW5pdGlhbFBhZ2VDb3VudCk7Ci0gICAgQVNTRVJUKCFtYXhpbXVtUGFnZUNvdW50IHx8IG1heGlt
dW1QYWdlQ291bnQgPj0gaW5pdGlhbFBhZ2VDb3VudCk7Ci0KLSAgICBtX2luZm8tPm1lbW9yeSA9
IE1lbW9yeUluZm9ybWF0aW9uKGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1QYWdlQ291bnQsIGlz
SW1wb3J0KTsKLSAgICByZXR1cm4geyB9OwotfQotCi1hdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VN
ZW1vcnkoKSAtPiBQYXJ0aWFsUmVzdWx0Ci17Ci0gICAgdWludDhfdCBjb3VudDsKLSAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQxKGNvdW50KSwgImNhbid0IHBhcnNlIE1lbW9y
eSBzZWN0aW9uJ3MgY291bnQiKTsKLQotICAgIGlmICghY291bnQpCi0gICAgICAgIHJldHVybiB7
IH07Ci0KLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGNvdW50ICE9IDEsICJNZW1vcnkgc2VjdGlv
biBoYXMgbW9yZSB0aGFuIG9uZSBtZW1vcnksIFdlYkFzc2VtYmx5IGN1cnJlbnRseSBvbmx5IGFs
bG93cyB6ZXJvIG9yIG9uZSIpOwotCi0gICAgYm9vbCBpc0ltcG9ydCA9IGZhbHNlOwotICAgIHJl
dHVybiBwYXJzZU1lbW9yeUhlbHBlcihpc0ltcG9ydCk7Ci19Ci0KLWF1dG8gTW9kdWxlUGFyc2Vy
OjpwYXJzZUdsb2JhbCgpIC0+IFBhcnRpYWxSZXN1bHQKLXsKLSAgICB1aW50MzJfdCBnbG9iYWxD
b3VudDsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihnbG9iYWxDb3Vu
dCksICJjYW4ndCBnZXQgR2xvYmFsIHNlY3Rpb24ncyBjb3VudCIpOwotICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoZ2xvYmFsQ291bnQgPiBtYXhHbG9iYWxzLCAiR2xvYmFsIHNlY3Rpb24ncyBjb3Vu
dCBpcyB0b28gYmlnICIsIGdsb2JhbENvdW50LCAiIG1heGltdW0gIiwgbWF4R2xvYmFscyk7Ci0g
ICAgc2l6ZV90IHRvdGFsQnl0ZXMgPSBnbG9iYWxDb3VudCArIG1faW5mby0+Zmlyc3RJbnRlcm5h
bEdsb2JhbDsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKChzdGF0aWNfY2FzdDx1aW50MzJfdD4o
dG90YWxCeXRlcykgPCBnbG9iYWxDb3VudCkgfHwgIW1faW5mby0+Z2xvYmFscy50cnlSZXNlcnZl
Q2FwYWNpdHkodG90YWxCeXRlcyksICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yICIsIHRvdGFs
Qnl0ZXMsICIgZ2xvYmFscyIpOwotCi0gICAgZm9yICh1aW50MzJfdCBnbG9iYWxJbmRleCA9IDA7
IGdsb2JhbEluZGV4IDwgZ2xvYmFsQ291bnQ7ICsrZ2xvYmFsSW5kZXgpIHsKLSAgICAgICAgR2xv
YmFsIGdsb2JhbDsKLSAgICAgICAgdWludDhfdCBpbml0T3Bjb2RlOwotCi0gICAgICAgIFdBU01f
RkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VHbG9iYWxUeXBlKGdsb2JhbCkpOwotICAgICAgICBU
eXBlIHR5cGVGb3JJbml0T3Bjb2RlOwotICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxT
KHBhcnNlSW5pdEV4cHIoaW5pdE9wY29kZSwgZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1i
ZXIsIHR5cGVGb3JJbml0T3Bjb2RlKSk7Ci0gICAgICAgIGlmIChpbml0T3Bjb2RlID09IEdldEds
b2JhbCkKLSAgICAgICAgICAgIGdsb2JhbC5pbml0aWFsaXphdGlvblR5cGUgPSBHbG9iYWw6OkZy
b21HbG9iYWxJbXBvcnQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGdsb2JhbC5pbml0aWFs
aXphdGlvblR5cGUgPSBHbG9iYWw6OkZyb21FeHByZXNzaW9uOwotICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKHR5cGVGb3JJbml0T3Bjb2RlICE9IGdsb2JhbC50eXBlLCAiR2xvYmFsIGluaXRf
ZXhwciBvcGNvZGUgb2YgdHlwZSAiLCB0eXBlRm9ySW5pdE9wY29kZSwgIiBkb2Vzbid0IG1hdGNo
IGdsb2JhbCdzIHR5cGUgIiwgZ2xvYmFsLnR5cGUpOwotCi0gICAgICAgIG1faW5mby0+Z2xvYmFs
cy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShnbG9iYWwpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
eyB9OwotfQotCi1hdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VFeHBvcnQoKSAtPiBQYXJ0aWFsUmVz
dWx0Ci17Ci0gICAgdWludDMyX3QgZXhwb3J0Q291bnQ7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9J
RighcGFyc2VWYXJVSW50MzIoZXhwb3J0Q291bnQpLCAiY2FuJ3QgZ2V0IEV4cG9ydCBzZWN0aW9u
J3MgY291bnQiKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGV4cG9ydENvdW50ID4gbWF4RXhw
b3J0cywgIkV4cG9ydCBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBleHBvcnRDb3VudCwg
IiBtYXhpbXVtICIsIG1heEV4cG9ydHMpOwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5m
by0+ZXhwb3J0cy50cnlSZXNlcnZlQ2FwYWNpdHkoZXhwb3J0Q291bnQpLCAiY2FuJ3QgYWxsb2Nh
dGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgZXhwb3J0Q291bnQsICIgZXhwb3J0cyIpOwotCi0gICAg
SGFzaFNldDxTdHJpbmc+IGV4cG9ydE5hbWVzOwotICAgIGZvciAodWludDMyX3QgZXhwb3J0TnVt
YmVyID0gMDsgZXhwb3J0TnVtYmVyIDwgZXhwb3J0Q291bnQ7ICsrZXhwb3J0TnVtYmVyKSB7Ci0g
ICAgICAgIHVpbnQzMl90IGZpZWxkTGVuOwotICAgICAgICBOYW1lIGZpZWxkU3RyaW5nOwotICAg
ICAgICBFeHRlcm5hbEtpbmQga2luZDsKLSAgICAgICAgdW5zaWduZWQga2luZEluZGV4OwotCi0g
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGZpZWxkTGVuKSwgImNh
bid0IGdldCAiLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQncyBmaWVsZCBuYW1lIGxlbmd0aCIp
OwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFjb25zdW1lVVRGOFN0cmluZyhmaWVsZFN0
cmluZywgZmllbGRMZW4pLCAiY2FuJ3QgZ2V0ICIsIGV4cG9ydE51bWJlciwgInRoIEV4cG9ydCdz
IGZpZWxkIG5hbWUgb2YgbGVuZ3RoICIsIGZpZWxkTGVuKTsKLSAgICAgICAgU3RyaW5nIGZpZWxk
TmFtZSA9IFN0cmluZzo6ZnJvbVVURjgoZmllbGRTdHJpbmcpOwotICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKGV4cG9ydE5hbWVzLmNvbnRhaW5zKGZpZWxkTmFtZSksICJkdXBsaWNhdGUgZXhw
b3J0OiAnIiwgZmllbGRTdHJpbmcsICInIik7Ci0gICAgICAgIGV4cG9ydE5hbWVzLmFkZChmaWVs
ZE5hbWUpOwotCi0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlRXh0ZXJuYWxLaW5k
KGtpbmQpLCAiY2FuJ3QgZ2V0ICIsIGV4cG9ydE51bWJlciwgInRoIEV4cG9ydCdzIGtpbmQsIG5h
bWVkICciLCBmaWVsZFN0cmluZywgIiciKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
cGFyc2VWYXJVSW50MzIoa2luZEluZGV4KSwgImNhbid0IGdldCAiLCBleHBvcnROdW1iZXIsICJ0
aCBFeHBvcnQncyBraW5kIGluZGV4LCBuYW1lZCAnIiwgZmllbGRTdHJpbmcsICInIik7Ci0gICAg
ICAgIHN3aXRjaCAoa2luZCkgewotICAgICAgICBjYXNlIEV4dGVybmFsS2luZDo6RnVuY3Rpb246
IHsKLSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoa2luZEluZGV4ID49IG1faW5mby0+
ZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgpLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQgaGFzIGlu
dmFsaWQgZnVuY3Rpb24gbnVtYmVyICIsIGtpbmRJbmRleCwgIiBpdCBleGNlZWRzIHRoZSBmdW5j
dGlvbiBpbmRleCBzcGFjZSAiLCBtX2luZm8tPmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSwgIiwg
bmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6OlRhYmxlOiB7Ci0gICAgICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKGtpbmRJbmRleCA+PSBtX3RhYmxlQ291bnQsICJjYW4ndCBleHBvcnQg
VGFibGUgIiwga2luZEluZGV4LCAiIHRoZXJlIGFyZSAiLCBtX3RhYmxlQ291bnQsICIgVGFibGVz
Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEV4dGVybmFs
S2luZDo6TWVtb3J5OiB7Ci0gICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8t
Pm1lbW9yeSwgImNhbid0IGV4cG9ydCBhIG5vbi1leGlzdGVudCBNZW1vcnkiKTsKLSAgICAgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoa2luZEluZGV4LCAiY2FuJ3QgZXhwb3J0IE1lbW9yeSAi
LCBraW5kSW5kZXgsICIgb25seSBvbmUgVGFibGUgaXMgY3VycmVudGx5IHN1cHBvcnRlZCIpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6
Okdsb2JhbDogewotICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihraW5kSW5kZXggPj0g
bV9pbmZvLT5nbG9iYWxzLnNpemUoKSwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0IGhhcyBpbnZh
bGlkIGdsb2JhbCBudW1iZXIgIiwga2luZEluZGV4LCAiIGl0IGV4Y2VlZHMgdGhlIGdsb2JhbHMg
Y291bnQgIiwgbV9pbmZvLT5nbG9iYWxzLnNpemUoKSwgIiwgbmFtZWQgJyIsIGZpZWxkU3RyaW5n
LCAiJyIpOwotICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX2luZm8tPmdsb2JhbHNb
a2luZEluZGV4XS5tdXRhYmlsaXR5ICE9IEdsb2JhbDo6SW1tdXRhYmxlLCBleHBvcnROdW1iZXIs
ICJ0aCBFeHBvcnQgaXNuJ3QgaW1tdXRhYmxlLCBuYW1lZCAnIiwgZmllbGRTdHJpbmcsICInIik7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgbV9p
bmZvLT5leHBvcnRzLnVuY2hlY2tlZEFwcGVuZCh7IFdURk1vdmUoZmllbGRTdHJpbmcpLCBraW5k
LCBraW5kSW5kZXggfSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsgfTsKLX0KLQotYXV0byBNb2R1
bGVQYXJzZXI6OnBhcnNlU3RhcnQoKSAtPiBQYXJ0aWFsUmVzdWx0Ci17Ci0gICAgdWludDMyX3Qg
c3RhcnRGdW5jdGlvbkluZGV4OwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUlu
dDMyKHN0YXJ0RnVuY3Rpb25JbmRleCksICJjYW4ndCBnZXQgU3RhcnQgaW5kZXgiKTsKLSAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKHN0YXJ0RnVuY3Rpb25JbmRleCA+PSBtX2luZm8tPmZ1bmN0aW9u
SW5kZXhTcGFjZVNpemUoKSwgIlN0YXJ0IGluZGV4ICIsIHN0YXJ0RnVuY3Rpb25JbmRleCwgIiBl
eGNlZWRzIGZ1bmN0aW9uIGluZGV4IHNwYWNlICIsIG1faW5mby0+ZnVuY3Rpb25JbmRleFNwYWNl
U2l6ZSgpKTsKLSAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1faW5mby0+c2ln
bmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHN0YXJ0RnVuY3Rpb25JbmRleCk7Ci0g
ICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0
KHNpZ25hdHVyZUluZGV4KTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHNpZ25hdHVyZS5hcmd1
bWVudENvdW50KCksICJTdGFydCBmdW5jdGlvbiBjYW4ndCBoYXZlIGFyZ3VtZW50cyIpOwotICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoc2lnbmF0dXJlLnJldHVyblR5cGUoKSAhPSBWb2lkLCAiU3Rh
cnQgZnVuY3Rpb24gY2FuJ3QgcmV0dXJuIGEgdmFsdWUiKTsKLSAgICBtX2luZm8tPnN0YXJ0RnVu
Y3Rpb25JbmRleFNwYWNlID0gc3RhcnRGdW5jdGlvbkluZGV4OwotICAgIHJldHVybiB7IH07Ci19
Ci0KLWF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZUVsZW1lbnQoKSAtPiBQYXJ0aWFsUmVzdWx0Ci17
Ci0gICAgdWludDMyX3QgZWxlbWVudENvdW50OwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBh
cnNlVmFyVUludDMyKGVsZW1lbnRDb3VudCksICJjYW4ndCBnZXQgRWxlbWVudCBzZWN0aW9uJ3Mg
Y291bnQiKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGVsZW1lbnRDb3VudCA+IG1heFRhYmxl
RW50cmllcywgIkVsZW1lbnQgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgZWxlbWVudENv
dW50LCAiIG1heGltdW0gIiwgbWF4VGFibGVFbnRyaWVzKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKCFtX2luZm8tPmVsZW1lbnRzLnRyeVJlc2VydmVDYXBhY2l0eShlbGVtZW50Q291bnQpLCAi
Y2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiLCBlbGVtZW50Q291bnQsICIgRWxlbWVudHMiKTsK
LSAgICBmb3IgKHVuc2lnbmVkIGVsZW1lbnROdW0gPSAwOyBlbGVtZW50TnVtIDwgZWxlbWVudENv
dW50OyArK2VsZW1lbnROdW0pIHsKLSAgICAgICAgdWludDMyX3QgdGFibGVJbmRleDsKLSAgICAg
ICAgdWludDY0X3QgaW5pdEV4cHJCaXRzOwotICAgICAgICB1aW50OF90IGluaXRPcGNvZGU7Ci0g
ICAgICAgIHVpbnQzMl90IGluZGV4Q291bnQ7Ci0KLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RighcGFyc2VWYXJVSW50MzIodGFibGVJbmRleCksICJjYW4ndCBnZXQgIiwgZWxlbWVudE51bSwg
InRoIEVsZW1lbnQgdGFibGUgaW5kZXgiKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0
YWJsZUluZGV4ID49IG1fdGFibGVDb3VudCwgIkVsZW1lbnQgc2VjdGlvbiBmb3IgVGFibGUgIiwg
dGFibGVJbmRleCwgIiBleGNlZWRzIGF2YWlsYWJsZSBUYWJsZSAiLCBtX3RhYmxlQ291bnQpOwot
ICAgICAgICBUeXBlIGluaXRFeHByVHlwZTsKLSAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9G
QUlMUyhwYXJzZUluaXRFeHByKGluaXRPcGNvZGUsIGluaXRFeHByQml0cywgaW5pdEV4cHJUeXBl
KSk7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoaW5pdEV4cHJUeXBlICE9IEkzMiwgIkVs
ZW1lbnQgaW5pdF9leHByIG11c3QgcHJvZHVjZSBhbiBpMzIiKTsKLSAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoaW5kZXhDb3VudCksICJjYW4ndCBnZXQgIiwgZWxl
bWVudE51bSwgInRoIGluZGV4IGNvdW50IGZvciBFbGVtZW50IHNlY3Rpb24iKTsKLSAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRihpbmRleENvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWlu
dDMyX3Q+OjptYXgoKSwgIkVsZW1lbnQgc2VjdGlvbidzICIsIGVsZW1lbnROdW0sICJ0aCBpbmRl
eCBjb3VudCBpcyB0b28gYmlnICIsIGluZGV4Q291bnQpOwotCi0gICAgICAgIEFTU0VSVCghIW1f
aW5mby0+dGFibGVJbmZvcm1hdGlvbik7Ci0KLSAgICAgICAgRWxlbWVudCBlbGVtZW50KG1ha2VJ
MzJJbml0RXhwcihpbml0T3Bjb2RlLCBpbml0RXhwckJpdHMpKTsKLSAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighZWxlbWVudC5mdW5jdGlvbkluZGljZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGlu
ZGV4Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiLCBpbmRleENvdW50LCAiIEVs
ZW1lbnQgaW5kaWNlcyIpOwotCi0gICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRl
eCA8IGluZGV4Q291bnQ7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9u
SW5kZXg7Ci0gICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihm
dW5jdGlvbkluZGV4KSwgImNhbid0IGdldCBFbGVtZW50IHNlY3Rpb24ncyAiLCBlbGVtZW50TnVt
LCAidGggZWxlbWVudCdzICIsIGluZGV4LCAidGggaW5kZXgiKTsKLSAgICAgICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25JbmRleCA+PSBtX2luZm8tPmZ1bmN0aW9uSW5kZXhTcGFj
ZVNpemUoKSwgIkVsZW1lbnQgc2VjdGlvbidzICIsIGVsZW1lbnROdW0sICJ0aCBlbGVtZW50J3Mg
IiwgaW5kZXgsICJ0aCBpbmRleCBpcyAiLCBmdW5jdGlvbkluZGV4LCAiIHdoaWNoIGV4Y2VlZHMg
dGhlIGZ1bmN0aW9uIGluZGV4IHNwYWNlIHNpemUgb2YgIiwgbV9pbmZvLT5mdW5jdGlvbkluZGV4
U3BhY2VTaXplKCkpOwotCi0gICAgICAgICAgICBlbGVtZW50LmZ1bmN0aW9uSW5kaWNlcy51bmNo
ZWNrZWRBcHBlbmQoZnVuY3Rpb25JbmRleCk7Ci0gICAgICAgIH0KLQotICAgICAgICBtX2luZm8t
PmVsZW1lbnRzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGVsZW1lbnQpKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4geyB9OwotfQotCi1hdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VDb2RlKCkgLT4gUGFy
dGlhbFJlc3VsdAotewotICAgIHVpbnQzMl90IGNvdW50OwotICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIXBhcnNlVmFyVUludDMyKGNvdW50KSwgImNhbid0IGdldCBDb2RlIHNlY3Rpb24ncyBjb3Vu
dCIpOwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoY291bnQgPT0gc3RkOjpudW1lcmljX2xpbWl0
czx1aW50MzJfdD46Om1heCgpLCAiQ29kZSBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBj
b3VudCk7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRihjb3VudCAhPSBtX2luZm8tPmZ1bmN0aW9u
TG9jYXRpb25JbkJpbmFyeS5zaXplKCksICJDb2RlIHNlY3Rpb24gY291bnQgIiwgY291bnQsICIg
ZXhjZWVkcyB0aGUgZGVjbGFyZWQgbnVtYmVyIG9mIGZ1bmN0aW9ucyAiLCBtX2luZm8tPmZ1bmN0
aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCkpOwotCi0gICAgZm9yICh1aW50MzJfdCBpID0gMDsg
aSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgdWludDMyX3QgZnVuY3Rpb25TaXplOwotICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihmdW5jdGlvblNpemUpLCAiY2Fu
J3QgZ2V0ICIsIGksICJ0aCBDb2RlIGZ1bmN0aW9uJ3Mgc2l6ZSIpOwotICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKGZ1bmN0aW9uU2l6ZSA+IGxlbmd0aCgpLCAiQ29kZSBmdW5jdGlvbidzIHNp
emUgIiwgZnVuY3Rpb25TaXplLCAiIGV4Y2VlZHMgdGhlIG1vZHVsZSdzIHNpemUgIiwgbGVuZ3Ro
KCkpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGZ1bmN0aW9uU2l6ZSA+IGxlbmd0aCgp
IC0gbV9vZmZzZXQsICJDb2RlIGZ1bmN0aW9uJ3Mgc2l6ZSAiLCBmdW5jdGlvblNpemUsICIgZXhj
ZWVkcyB0aGUgbW9kdWxlJ3MgcmVtYWluaW5nIHNpemUiLCBsZW5ndGgoKSAtIG1fb2Zmc2V0KTsK
LSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvblNpemUgPiBtYXhGdW5jdGlvblNp
emUsICJDb2RlIGZ1bmN0aW9uJ3Mgc2l6ZSAiLCBmdW5jdGlvblNpemUsICIgaXMgdG9vIGJpZyIp
OwotCi0gICAgICAgIG1faW5mby0+ZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2ldLnN0YXJ0ID0g
bV9vZmZzZXQ7Ci0gICAgICAgIG1faW5mby0+ZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2ldLmVu
ZCA9IG1fb2Zmc2V0ICsgZnVuY3Rpb25TaXplOwotICAgICAgICBtX29mZnNldCA9IG1faW5mby0+
ZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2ldLmVuZDsKLSAgICB9Ci0KLSAgICByZXR1cm4geyB9
OwotfQotCi1hdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VJbml0RXhwcih1aW50OF90JiBvcGNvZGUs
IHVpbnQ2NF90JiBiaXRzT3JJbXBvcnROdW1iZXIsIFR5cGUmIHJlc3VsdFR5cGUpIC0+IFBhcnRp
YWxSZXN1bHQKLXsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ4KG9wY29kZSks
ICJjYW4ndCBnZXQgaW5pdF9leHByJ3Mgb3Bjb2RlIik7Ci0KLSAgICBzd2l0Y2ggKG9wY29kZSkg
ewotICAgIGNhc2UgSTMyQ29uc3Q6IHsKLSAgICAgICAgaW50MzJfdCBjb25zdGFudDsKLSAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJJbnQzMihjb25zdGFudCksICJjYW4ndCBn
ZXQgY29uc3RhbnQgdmFsdWUgZm9yIGluaXRfZXhwcidzIGkzMi5jb25zdCIpOwotICAgICAgICBi
aXRzT3JJbXBvcnROdW1iZXIgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oY29uc3RhbnQpOwotICAg
ICAgICByZXN1bHRUeXBlID0gSTMyOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNl
IEk2NENvbnN0OiB7Ci0gICAgICAgIGludDY0X3QgY29uc3RhbnQ7Ci0gICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIXBhcnNlVmFySW50NjQoY29uc3RhbnQpLCAiY2FuJ3QgZ2V0IGNvbnN0YW50
IHZhbHVlIGZvciBpbml0X2V4cHIncyBpNjQuY29uc3QiKTsKLSAgICAgICAgYml0c09ySW1wb3J0
TnVtYmVyID0gY29uc3RhbnQ7Ci0gICAgICAgIHJlc3VsdFR5cGUgPSBJNjQ7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLQotICAgIGNhc2UgRjMyQ29uc3Q6IHsKLSAgICAgICAgdWludDMyX3QgY29u
c3RhbnQ7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUludDMyKGNvbnN0YW50
KSwgImNhbid0IGdldCBjb25zdGFudCB2YWx1ZSBmb3IgaW5pdF9leHByJ3MgZjMyLmNvbnN0Iik7
Ci0gICAgICAgIGJpdHNPckltcG9ydE51bWJlciA9IGNvbnN0YW50OwotICAgICAgICByZXN1bHRU
eXBlID0gRjMyOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEY2NENvbnN0OiB7
Ci0gICAgICAgIHVpbnQ2NF90IGNvbnN0YW50OwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFwYXJzZVVJbnQ2NChjb25zdGFudCksICJjYW4ndCBnZXQgY29uc3RhbnQgdmFsdWUgZm9yIGlu
aXRfZXhwcidzIGY2NC5jb25zdCIpOwotICAgICAgICBiaXRzT3JJbXBvcnROdW1iZXIgPSBjb25z
dGFudDsKLSAgICAgICAgcmVzdWx0VHlwZSA9IEY2NDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
Ci0gICAgY2FzZSBHZXRHbG9iYWw6IHsKLSAgICAgICAgdWludDMyX3QgaW5kZXg7Ci0gICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGluZGV4KSwgImNhbid0IGdldCBn
ZXRfZ2xvYmFsJ3MgaW5kZXgiKTsKLQotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluZGV4
ID49IG1faW5mby0+Z2xvYmFscy5zaXplKCksICJnZXRfZ2xvYmFsJ3MgaW5kZXggIiwgaW5kZXgs
ICIgZXhjZWVkcyB0aGUgbnVtYmVyIG9mIGdsb2JhbHMgIiwgbV9pbmZvLT5nbG9iYWxzLnNpemUo
KSk7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoaW5kZXggPj0gbV9pbmZvLT5maXJzdElu
dGVybmFsR2xvYmFsLCAiZ2V0X2dsb2JhbCBpbXBvcnQga2luZCBpbmRleCAiLCBpbmRleCwgIiBl
eGNlZWRzIHRoZSBmaXJzdCBpbnRlcm5hbCBnbG9iYWwgIiwgbV9pbmZvLT5maXJzdEludGVybmFs
R2xvYmFsKTsKLQotICAgICAgICBBU1NFUlQobV9pbmZvLT5nbG9iYWxzW2luZGV4XS5tdXRhYmls
aXR5ID09IEdsb2JhbDo6SW1tdXRhYmxlKTsKLSAgICAgICAgcmVzdWx0VHlwZSA9IG1faW5mby0+
Z2xvYmFsc1tpbmRleF0udHlwZTsKLSAgICAgICAgYml0c09ySW1wb3J0TnVtYmVyID0gaW5kZXg7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYodHJ1ZSwgInVua25vd24gaW5pdF9leHByIG9wY29kZSAiLCBvcGNvZGUpOwot
ICAgIH0KLQotICAgIHVpbnQ4X3QgZW5kT3Bjb2RlOwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlVUludDgoZW5kT3Bjb2RlKSwgImNhbid0IGdldCBpbml0X2V4cHIncyBlbmQgb3Bjb2Rl
Iik7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRihlbmRPcGNvZGUgIT0gT3BUeXBlOjpFbmQsICJp
bml0X2V4cHIgc2hvdWxkIGVuZCB3aXRoIGVuZCwgZW5kZWQgd2l0aCAiLCBlbmRPcGNvZGUpOwot
Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlR2xvYmFsVHlw
ZShHbG9iYWwmIGdsb2JhbCkgLT4gUGFydGlhbFJlc3VsdAotewotICAgIHVpbnQ4X3QgbXV0YWJp
bGl0eTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhbHVlVHlwZShnbG9iYWwudHlw
ZSksICJjYW4ndCBnZXQgR2xvYmFsJ3MgdmFsdWUgdHlwZSIpOwotICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIXBhcnNlVmFyVUludDEobXV0YWJpbGl0eSksICJjYW4ndCBnZXQgR2xvYmFsIHR5cGUn
cyBtdXRhYmlsaXR5Iik7Ci0gICAgZ2xvYmFsLm11dGFiaWxpdHkgPSBzdGF0aWNfY2FzdDxHbG9i
YWw6Ok11dGFiaWxpdHk+KG11dGFiaWxpdHkpOwotICAgIHJldHVybiB7IH07Ci19Ci0KLWF1dG8g
TW9kdWxlUGFyc2VyOjpwYXJzZURhdGEoKSAtPiBQYXJ0aWFsUmVzdWx0Ci17Ci0gICAgdWludDMy
X3Qgc2VnbWVudENvdW50OwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMy
KHNlZ21lbnRDb3VudCksICJjYW4ndCBnZXQgRGF0YSBzZWN0aW9uJ3MgY291bnQiKTsKLSAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKHNlZ21lbnRDb3VudCA+IG1heERhdGFTZWdtZW50cywgIkRhdGEg
c2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgc2VnbWVudENvdW50LCAiIG1heGltdW0gIiwg
bWF4RGF0YVNlZ21lbnRzKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmRhdGEu
dHJ5UmVzZXJ2ZUNhcGFjaXR5KHNlZ21lbnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2gg
bWVtb3J5IGZvciBEYXRhIHNlY3Rpb24ncyAiLCBzZWdtZW50Q291bnQsICIgc2VnbWVudHMiKTsK
LQotICAgIGZvciAodWludDMyX3Qgc2VnbWVudE51bWJlciA9IDA7IHNlZ21lbnROdW1iZXIgPCBz
ZWdtZW50Q291bnQ7ICsrc2VnbWVudE51bWJlcikgewotICAgICAgICB1aW50MzJfdCBtZW1vcnlJ
bmRleDsKLSAgICAgICAgdWludDY0X3QgaW5pdEV4cHJCaXRzOwotICAgICAgICB1aW50OF90IGlu
aXRPcGNvZGU7Ci0gICAgICAgIHVpbnQzMl90IGRhdGFCeXRlTGVuZ3RoOwotCi0gICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKG1lbW9yeUluZGV4KSwgImNhbid0IGdl
dCAiLCBzZWdtZW50TnVtYmVyLCAidGggRGF0YSBzZWdtZW50J3MgaW5kZXgiKTsKLSAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRihtZW1vcnlJbmRleCA+PSBtX21lbW9yeUNvdW50LCBzZWdtZW50
TnVtYmVyLCAidGggRGF0YSBzZWdtZW50IGhhcyBpbmRleCAiLCBtZW1vcnlJbmRleCwgIiB3aGlj
aCBleGNlZWRzIHRoZSBudW1iZXIgb2YgTWVtb3JpZXMgIiwgbV9tZW1vcnlDb3VudCk7Ci0gICAg
ICAgIFR5cGUgaW5pdEV4cHJUeXBlOwotICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxT
KHBhcnNlSW5pdEV4cHIoaW5pdE9wY29kZSwgaW5pdEV4cHJCaXRzLCBpbml0RXhwclR5cGUpKTsK
LSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbml0RXhwclR5cGUgIT0gSTMyLCBzZWdtZW50
TnVtYmVyLCAidGggRGF0YSBzZWdtZW50J3MgaW5pdF9leHByIG11c3QgcHJvZHVjZSBhbiBpMzIi
KTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZGF0YUJ5dGVM
ZW5ndGgpLCAiY2FuJ3QgZ2V0ICIsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQncyBk
YXRhIGJ5dGUgbGVuZ3RoIik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZGF0YUJ5dGVM
ZW5ndGggPiBtYXhNb2R1bGVTaXplLCBzZWdtZW50TnVtYmVyLCAidGggRGF0YSBzZWdtZW50J3Mg
ZGF0YSBieXRlIGxlbmd0aCBpcyB0b28gYmlnICIsIGRhdGFCeXRlTGVuZ3RoLCAiIG1heGltdW0g
IiwgbWF4TW9kdWxlU2l6ZSk7Ci0KLSAgICAgICAgU2VnbWVudCogc2VnbWVudCA9IFNlZ21lbnQ6
OmNyZWF0ZShtYWtlSTMySW5pdEV4cHIoaW5pdE9wY29kZSwgaW5pdEV4cHJCaXRzKSwgZGF0YUJ5
dGVMZW5ndGgpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFzZWdtZW50LCAiY2FuJ3Qg
YWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgc2VnbWVudE51bWJlciwgInRoIERhdGEgc2Vn
bWVudCBvZiBzaXplICIsIGRhdGFCeXRlTGVuZ3RoKTsKLSAgICAgICAgbV9pbmZvLT5kYXRhLnVu
Y2hlY2tlZEFwcGVuZChTZWdtZW50OjphZG9wdFB0cihzZWdtZW50KSk7Ci0gICAgICAgIGZvciAo
dWludDMyX3QgZGF0YUJ5dGUgPSAwOyBkYXRhQnl0ZSA8IGRhdGFCeXRlTGVuZ3RoOyArK2RhdGFC
eXRlKSB7Ci0gICAgICAgICAgICB1aW50OF90IGJ5dGU7Ci0gICAgICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVVJbnQ4KGJ5dGUpLCAiY2FuJ3QgZ2V0ICIsIGRhdGFCeXRlLCAidGgg
ZGF0YSBieXRlIGZyb20gIiwgc2VnbWVudE51bWJlciwgInRoIERhdGEgc2VnbWVudCIpOwotICAg
ICAgICAgICAgc2VnbWVudC0+Ynl0ZShkYXRhQnl0ZSkgPSBieXRlOwotICAgICAgICB9Ci0gICAg
fQotICAgIHJldHVybiB7IH07Ci19Ci0gICAgCi1hdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VDdXN0
b20odWludDMyX3Qgc2VjdGlvbkxlbmd0aCkgLT4gUGFydGlhbFJlc3VsdAotewotICAgIGNvbnN0
IHVpbnQzMl90IGN1c3RvbVNlY3Rpb25TdGFydE9mZnNldCA9IG1fb2Zmc2V0OwotCi0gICAgQ3Vz
dG9tU2VjdGlvbiBzZWN0aW9uOwotICAgIHVpbnQzMl90IGN1c3RvbVNlY3Rpb25OdW1iZXIgPSBt
X2luZm8tPmN1c3RvbVNlY3Rpb25zLnNpemUoKSArIDE7Ci0gICAgdWludDMyX3QgbmFtZUxlbjsK
LSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmN1c3RvbVNlY3Rpb25zLnRyeVJlc2Vy
dmVDYXBhY2l0eShjdXN0b21TZWN0aW9uTnVtYmVyKSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBt
ZW1vcnkgZm9yICIsIGN1c3RvbVNlY3Rpb25OdW1iZXIsICJ0aCBjdXN0b20gc2VjdGlvbiIpOwot
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKG5hbWVMZW4pLCAiY2FuJ3Qg
Z2V0ICIsIGN1c3RvbVNlY3Rpb25OdW1iZXIsICJ0aCBjdXN0b20gc2VjdGlvbidzIG5hbWUgbGVu
Z3RoIik7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighY29uc3VtZVVURjhTdHJpbmcoc2VjdGlv
bi5uYW1lLCBuYW1lTGVuKSwgIm5hbWVMZW4gZ2V0ICIsIGN1c3RvbVNlY3Rpb25OdW1iZXIsICJ0
aCBjdXN0b20gc2VjdGlvbidzIG5hbWUgb2YgbGVuZ3RoICIsIG5hbWVMZW4pOwotCi0gICAgdWlu
dDMyX3QgcGF5bG9hZEJ5dGVzID0gc2VjdGlvbkxlbmd0aCAtIChtX29mZnNldCAtIGN1c3RvbVNl
Y3Rpb25TdGFydE9mZnNldCk7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighc2VjdGlvbi5wYXls
b2FkLnRyeVJlc2VydmVDYXBhY2l0eShwYXlsb2FkQnl0ZXMpLCAiY2FuJ3QgYWxsb2NhdGUgZW5v
dWdoIG1lbW9yeSBmb3IgIiwgY3VzdG9tU2VjdGlvbk51bWJlciwgInRoIGN1c3RvbSBzZWN0aW9u
J3MgIiwgcGF5bG9hZEJ5dGVzLCAiIGJ5dGVzIik7Ci0gICAgZm9yICh1aW50MzJfdCBieXRlTnVt
YmVyID0gMDsgYnl0ZU51bWJlciA8IHBheWxvYWRCeXRlczsgKytieXRlTnVtYmVyKSB7Ci0gICAg
ICAgIHVpbnQ4X3QgYnl0ZTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VVSW50
OChieXRlKSwgImNhbid0IGdldCAiLCBieXRlTnVtYmVyLCAidGggZGF0YSBieXRlIGZyb20gIiwg
Y3VzdG9tU2VjdGlvbk51bWJlciwgInRoIGN1c3RvbSBzZWN0aW9uIik7Ci0gICAgICAgIHNlY3Rp
b24ucGF5bG9hZC51bmNoZWNrZWRBcHBlbmQoYnl0ZSk7Ci0gICAgfQotCi0gICAgTmFtZSBuYW1l
TmFtZSA9IHsgJ24nLCAnYScsICdtJywgJ2UnIH07Ci0gICAgaWYgKHNlY3Rpb24ubmFtZSA9PSBu
YW1lTmFtZSkgewotICAgICAgICBOYW1lU2VjdGlvblBhcnNlciBuYW1lU2VjdGlvblBhcnNlcihz
ZWN0aW9uLnBheWxvYWQuYmVnaW4oKSwgc2VjdGlvbi5wYXlsb2FkLnNpemUoKSwgbV9pbmZvKTsK
LSAgICAgICAgaWYgKGF1dG8gbmFtZVNlY3Rpb24gPSBuYW1lU2VjdGlvblBhcnNlci5wYXJzZSgp
KQotICAgICAgICAgICAgbV9pbmZvLT5uYW1lU2VjdGlvbiA9IFdURk1vdmUoKm5hbWVTZWN0aW9u
KTsKLSAgICB9Ci0KLSAgICBtX2luZm8tPmN1c3RvbVNlY3Rpb25zLnVuY2hlY2tlZEFwcGVuZChX
VEZNb3ZlKHNlY3Rpb24pKTsKLQotICAgIHJldHVybiB7IH07Ci19Ci0KIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpXYXNtCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgKaW5kZXggYTY1MWJlMTdjZTIz
Yjg1ZmJiOTdiYmI2ODU3MDNiMzliNjRiNzJjNC4uMmU5ZjY4N2JhM2MwYzkwOGM5NDBiNjBkYmQy
YmVlYThhNDMzYTcwNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU1vZHVsZVBhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1
bGVQYXJzZXIuaApAQCAtNDYsMTggKzQ2LDYgQEAgY2xhc3MgTW9kdWxlUGFyc2VyIDogcHVibGlj
IFBhcnNlcjx2b2lkPiB7CiAgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZSgpOwog
CiBwcml2YXRlOgotCi0jZGVmaW5lIFdBU01fU0VDVElPTl9ERUNMQVJFX1BBUlNFUihOQU1FLCBJ
RCwgREVTQ1JJUFRJT04pIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlICMj
IE5BTUUoKTsKLSAgICBGT1JfRUFDSF9LTk9XTl9XQVNNX1NFQ1RJT04oV0FTTV9TRUNUSU9OX0RF
Q0xBUkVfUEFSU0VSKQotI3VuZGVmIFdBU01fU0VDVElPTl9ERUNMQVJFX1BBUlNFUgotCi0gICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VDdXN0b20odWludDMyX3QpOwot
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlR2xvYmFsVHlwZShHbG9i
YWwmKTsKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZU1lbW9yeUhl
bHBlcihib29sIGlzSW1wb3J0KTsKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBwYXJzZVRhYmxlSGVscGVyKGJvb2wgaXNJbXBvcnQpOwotICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIHBhcnNlUmVzaXphYmxlTGltaXRzKHVpbnQzMl90JiBpbml0aWFsLCBz
dGQ6Om9wdGlvbmFsPHVpbnQzMl90PiYgbWF4aW11bSk7Ci0gICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gcGFyc2VJbml0RXhwcih1aW50OF90JiwgdWludDY0X3QmLCBUeXBlJiBp
bml0RXhwclR5cGUpOwotCiAgICAgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiBtX2luZm87CiAgICAg
dWludDMyX3QgbV9tZW1vcnlDb3VudCB7IDAgfTsKICAgICB1aW50MzJfdCBtX3RhYmxlQ291bnQg
eyAwIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFyc2Vy
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFyc2VyLmgKaW5kZXggNjUxMDcw
NWVhZjU3OGNlMzNlM2JkNzZiMmJjODM4YWRkYTVmNWIwMC4uOWZjNGE0NTRjOWI3MjZmYTEzZTg0
YTRiNDczZmVhZDgxMmJiOTlmMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVBhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYXJz
ZXIuaApAQCAtNTgsNiArNTgsMTAgQEAgY2xhc3MgUGFyc2VyIHsKICAgICB0eXBlZGVmIEV4cGVj
dGVkPHZvaWQsIEVycm9yVHlwZT4gUGFydGlhbFJlc3VsdDsKICAgICB0eXBlZGVmIEV4cGVjdGVk
PFN1Y2Nlc3NUeXBlLCBFcnJvclR5cGU+IFJlc3VsdDsKIAorICAgIGNvbnN0IHVpbnQ4X3QqIHNv
dXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9CisgICAgc2l6ZV90IGxlbmd0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fc291cmNlTGVuZ3RoOyB9CisgICAgc2l6ZV90IG9mZnNldCgpIGNvbnN0
IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisKIHByb3RlY3RlZDoKICAgICBQYXJzZXIoY29uc3QgdWlu
dDhfdCosIHNpemVfdCk7CiAKQEAgLTgxLDE2ICs4NSwxMyBAQCBjbGFzcyBQYXJzZXIgewogICAg
IGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlVmFsdWVUeXBlKFR5cGUmKTsKICAgICBib29s
IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUV4dGVybmFsS2luZChFeHRlcm5hbEtpbmQmKTsKIAot
ICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9Ci0g
ICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlTGVuZ3RoOyB9Ci0KICAg
ICBzaXplX3QgbV9vZmZzZXQgPSAwOwogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIC4uLkFyZ3M+
CiAgICAgTkVWRVJfSU5MSU5FIFVuZXhwZWN0ZWRSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGZh
aWwoQXJncy4uLiBhcmdzKSBjb25zdAogICAgIHsKICAgICAgICAgdXNpbmcgbmFtZXNwYWNlIEZh
aWx1cmVIZWxwZXI7IC8vIFNlZSBBREwgY29tbWVudCBpbiBuYW1lc3BhY2UgYWJvdmUuCi0gICAg
ICAgIHJldHVybiBVbmV4cGVjdGVkUmVzdWx0KG1ha2VTdHJpbmcoIldlYkFzc2VtYmx5Lk1vZHVs
ZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgIl9zLCBTdHJpbmc6Om51bWJlcihtX29mZnNldCksICIg
LyAiX3MsIFN0cmluZzo6bnVtYmVyKG1fc291cmNlTGVuZ3RoKSwgIjogIl9zLCBtYWtlU3RyaW5n
KGFyZ3MpLi4uKSk7CisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkUmVzdWx0KG1ha2VTdHJpbmco
IldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgIl9zLCBTdHJpbmc6Om51
bWJlcihtX29mZnNldCksICI6ICJfcywgbWFrZVN0cmluZyhhcmdzKS4uLikpOwogICAgIH0KICNk
ZWZpbmUgV0FTTV9QQVJTRVJfRkFJTF9JRihjb25kaXRpb24sIC4uLikgZG8geyBcCiAgICAgaWYg
KFVOTElLRUxZKGNvbmRpdGlvbikpICAgICAgICAgICAgICAgICAgICAgXApAQCAtMjg1LDYgKzI4
NiwxNCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyPFN1Y2Nlc3NUeXBlPjo6cGFyc2VFeHRl
cm5hbEtpbmQoRXh0ZXJuYWxLaW5kJiByZXN1bHQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK0FM
V0FZU19JTkxJTkUgSTMySW5pdEV4cHIgbWFrZUkzMkluaXRFeHByKHVpbnQ4X3Qgb3Bjb2RlLCB1
aW50MzJfdCBiaXRzKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG9wY29kZSA9PSBJMzJDb25zdCB8
fCBvcGNvZGUgPT0gR2V0R2xvYmFsKTsKKyAgICBpZiAob3Bjb2RlID09IEkzMkNvbnN0KQorICAg
ICAgICByZXR1cm4gSTMySW5pdEV4cHI6OmNvbnN0VmFsdWUoYml0cyk7CisgICAgcmV0dXJuIEkz
MkluaXRFeHByOjpnbG9iYWxJbXBvcnQoYml0cyk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpXYXNtCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2I5YmRm
MDE4MDg2ZDE0ZTg3ZDMwZDM1NjhiZWNjNzlkMTc3NGViZgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9uUGFyc2VyLmNwcApAQCAtMCwwICsx
LDU1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2UgU3V6dWtpIDx5dXN1
a2VzdXp1a2lAc2xvd3N0YXJ0Lm9yZz4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXYXNtU2VjdGlvblBh
cnNlci5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiSWRlbnRpZmll
cklubGluZXMuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5SW5mb3JtYXRpb24uaCIKKyNpbmNsdWRl
ICJXYXNtTmFtZVNlY3Rpb25QYXJzZXIuaCIKKyNpbmNsdWRlICJXYXNtT3BzLmgiCisjaW5jbHVk
ZSAiV2FzbVNlY3Rpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisK
K2F1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VUeXBlKCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHVpbnQzMl90IGNvdW50OworCisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50
MzIoY291bnQpLCAiY2FuJ3QgZ2V0IFR5cGUgc2VjdGlvbidzIGNvdW50Iik7CisgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRihjb3VudCA+IG1heFR5cGVzLCAiVHlwZSBzZWN0aW9uJ3MgY291bnQgaXMg
dG9vIGJpZyAiLCBjb3VudCwgIiBtYXhpbXVtICIsIG1heFR5cGVzKTsKKyAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFtX2luZm8tPnVzZWRTaWduYXR1cmVzLnRyeVJlc2VydmVDYXBhY2l0eShjb3Vu
dCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBUeXBlIHNlY3Rpb24ncyAiLCBj
b3VudCwgIiBlbnRyaWVzIik7CisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgY291bnQ7
ICsraSkgeworICAgICAgICBpbnQ4X3QgdHlwZTsKKyAgICAgICAgdWludDMyX3QgYXJndW1lbnRD
b3VudDsKKyAgICAgICAgVmVjdG9yPFR5cGU+IGFyZ3VtZW50VHlwZXM7CisKKyAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighcGFyc2VJbnQ3KHR5cGUpLCAiY2FuJ3QgZ2V0ICIsIGksICJ0aCBU
eXBlJ3MgdHlwZSIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHR5cGUgIT0gRnVuYywg
aSwgInRoIFR5cGUgaXMgbm9uLUZ1bmMgIiwgdHlwZSk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIXBhcnNlVmFyVUludDMyKGFyZ3VtZW50Q291bnQpLCAiY2FuJ3QgZ2V0ICIsIGksICJ0
aCBUeXBlJ3MgYXJndW1lbnQgY291bnQiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihh
cmd1bWVudENvdW50ID4gbWF4RnVuY3Rpb25QYXJhbXMsIGksICJ0aCBhcmd1bWVudCBjb3VudCBp
cyB0b28gYmlnICIsIGFyZ3VtZW50Q291bnQsICIgbWF4aW11bSAiLCBtYXhGdW5jdGlvblBhcmFt
cyk7CisgICAgICAgIFJlZlB0cjxTaWduYXR1cmU+IG1heWJlU2lnbmF0dXJlID0gU2lnbmF0dXJl
Ojp0cnlDcmVhdGUoYXJndW1lbnRDb3VudCk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IW1heWJlU2lnbmF0dXJlLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgVHlwZSBz
ZWN0aW9uJ3MgIiwgaSwgInRoIHNpZ25hdHVyZSIpOworICAgICAgICBSZWY8U2lnbmF0dXJlPiBz
aWduYXR1cmUgPSBtYXliZVNpZ25hdHVyZS5yZWxlYXNlTm9uTnVsbCgpOworCisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmd1bWVudENvdW50OyArK2kpIHsKKyAgICAgICAgICAg
IFR5cGUgYXJndW1lbnRUeXBlOworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFy
c2VWYWx1ZVR5cGUoYXJndW1lbnRUeXBlKSwgImNhbid0IGdldCAiLCBpLCAidGggYXJndW1lbnQg
VHlwZSIpOworICAgICAgICAgICAgc2lnbmF0dXJlLT5hcmd1bWVudChpKSA9IGFyZ3VtZW50VHlw
ZTsKKyAgICAgICAgfQorCisgICAgICAgIHVpbnQ4X3QgcmV0dXJuQ291bnQ7CisgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDEocmV0dXJuQ291bnQpLCAiY2FuJ3QgZ2V0
ICIsIGksICJ0aCBUeXBlJ3MgcmV0dXJuIGNvdW50Iik7CisgICAgICAgIFR5cGUgcmV0dXJuVHlw
ZTsKKyAgICAgICAgaWYgKHJldHVybkNvdW50KSB7CisgICAgICAgICAgICBUeXBlIHZhbHVlOwor
ICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYWx1ZVR5cGUodmFsdWUpLCAi
Y2FuJ3QgZ2V0ICIsIGksICJ0aCBUeXBlJ3MgcmV0dXJuIHZhbHVlIik7CisgICAgICAgICAgICBy
ZXR1cm5UeXBlID0gc3RhdGljX2Nhc3Q8VHlwZT4odmFsdWUpOworICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgIHJldHVyblR5cGUgPSBUeXBlOjpWb2lkOworICAgICAgICBzaWduYXR1cmUtPnJl
dHVyblR5cGUoKSA9IHJldHVyblR5cGU7CisKKyAgICAgICAgc3RkOjpwYWlyPFNpZ25hdHVyZUlu
ZGV4LCBSZWY8U2lnbmF0dXJlPj4gcmVzdWx0ID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmFkb3B0
KFdURk1vdmUoc2lnbmF0dXJlKSk7CisgICAgICAgIG1faW5mby0+dXNlZFNpZ25hdHVyZXMudW5j
aGVja2VkQXBwZW5kKFdURk1vdmUocmVzdWx0LnNlY29uZCkpOworICAgIH0KKyAgICByZXR1cm4g
eyB9OworfQorCithdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlSW1wb3J0KCkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIHVpbnQzMl90IGltcG9ydENvdW50OworICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIXBhcnNlVmFyVUludDMyKGltcG9ydENvdW50KSwgImNhbid0IGdldCBJbXBvcnQgc2VjdGlv
bidzIGNvdW50Iik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbXBvcnRDb3VudCA+IG1heElt
cG9ydHMsICJJbXBvcnQgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgaW1wb3J0Q291bnQs
ICIgbWF4aW11bSAiLCBtYXhJbXBvcnRzKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2lu
Zm8tPmdsb2JhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50KSwgImNhbid0IGFsbG9j
YXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGltcG9ydENvdW50LCAiIGdsb2JhbHMiKTsgLy8gRklY
TUUgdGhpcyBvdmVyLWFsbG9jYXRlcyB3aGVuIHdlIGZpeCB0aGUgRklYTUVzIGJlbG93LgorICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+aW1wb3J0cy50cnlSZXNlcnZlQ2FwYWNpdHko
aW1wb3J0Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgaW1wb3J0
Q291bnQsICIgaW1wb3J0cyIpOyAvLyBGSVhNRSB0aGlzIG92ZXItYWxsb2NhdGVzIHdoZW4gd2Ug
Zml4IHRoZSBGSVhNRXMgYmVsb3cuCisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5p
bXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENv
dW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGltcG9ydENvdW50LCAi
IGltcG9ydCBmdW5jdGlvbiBzaWduYXR1cmVzIik7IC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0
ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxvdy4KKworICAgIGZvciAodWludDMyX3QgaW1w
b3J0TnVtYmVyID0gMDsgaW1wb3J0TnVtYmVyIDwgaW1wb3J0Q291bnQ7ICsraW1wb3J0TnVtYmVy
KSB7CisgICAgICAgIHVpbnQzMl90IG1vZHVsZUxlbjsKKyAgICAgICAgdWludDMyX3QgZmllbGRM
ZW47CisgICAgICAgIE5hbWUgbW9kdWxlU3RyaW5nOworICAgICAgICBOYW1lIGZpZWxkU3RyaW5n
OworICAgICAgICBFeHRlcm5hbEtpbmQga2luZDsKKyAgICAgICAgdW5zaWduZWQga2luZEluZGV4
IHsgMCB9OworCisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKG1v
ZHVsZUxlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0J3MgbW9kdWxl
IG5hbWUgbGVuZ3RoIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVVVEY4
U3RyaW5nKG1vZHVsZVN0cmluZywgbW9kdWxlTGVuKSwgImNhbid0IGdldCAiLCBpbXBvcnROdW1i
ZXIsICJ0aCBJbXBvcnQncyBtb2R1bGUgbmFtZSBvZiBsZW5ndGggIiwgbW9kdWxlTGVuKTsKKwor
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihmaWVsZExlbiksICJj
YW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0J3MgZmllbGQgbmFtZSBsZW5ndGgg
aW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIWNvbnN1bWVVVEY4U3RyaW5nKGZpZWxkU3RyaW5nLCBmaWVsZExlbiksICJjYW4ndCBn
ZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0J3MgZmllbGQgbmFtZSBvZiBsZW5ndGggIiwg
bW9kdWxlTGVuLCAiIGluIG1vZHVsZSAnIiwgbW9kdWxlU3RyaW5nLCAiJyIpOworCisgICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlRXh0ZXJuYWxLaW5kKGtpbmQpLCAiY2FuJ3QgZ2V0
ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdzIGtpbmQgaW4gbW9kdWxlICciLCBtb2R1bGVT
dHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0cmluZywgIiciKTsKKyAgICAgICAgc3dpdGNoIChr
aW5kKSB7CisgICAgICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpGdW5jdGlvbjogeworICAgICAgICAg
ICAgdWludDMyX3QgZnVuY3Rpb25TaWduYXR1cmVJbmRleDsKKyAgICAgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGZ1bmN0aW9uU2lnbmF0dXJlSW5kZXgpLCAiY2Fu
J3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdzIGZ1bmN0aW9uIHNpZ25hdHVyZSBp
biBtb2R1bGUgJyIsIG1vZHVsZVN0cmluZywgIicgZmllbGQgJyIsIGZpZWxkU3RyaW5nLCAiJyIp
OworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvblNpZ25hdHVyZUluZGV4
ID49IG1faW5mby0+dXNlZFNpZ25hdHVyZXMuc2l6ZSgpLCAiaW52YWxpZCBmdW5jdGlvbiBzaWdu
YXR1cmUgZm9yICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCwgIiwgZnVuY3Rpb25TaWduYXR1
cmVJbmRleCwgIiBpcyBvdXQgb2YgcmFuZ2Ugb2YgIiwgbV9pbmZvLT51c2VkU2lnbmF0dXJlcy5z
aXplKCksICIgaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0
cmluZywgIiciKTsKKyAgICAgICAgICAgIGtpbmRJbmRleCA9IG1faW5mby0+aW1wb3J0RnVuY3Rp
b25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsKKyAgICAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNp
Z25hdHVyZUluZGV4ID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChtX2luZm8tPnVzZWRTaWdu
YXR1cmVzW2Z1bmN0aW9uU2lnbmF0dXJlSW5kZXhdKTsKKyAgICAgICAgICAgIG1faW5mby0+aW1w
b3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnVuY2hlY2tlZEFwcGVuZChzaWduYXR1cmVJbmRl
eCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEV4dGVybmFs
S2luZDo6VGFibGU6IHsKKyAgICAgICAgICAgIGJvb2wgaXNJbXBvcnQgPSB0cnVlOworICAgICAg
ICAgICAgUGFydGlhbFJlc3VsdCByZXN1bHQgPSBwYXJzZVRhYmxlSGVscGVyKGlzSW1wb3J0KTsK
KyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoV1RGTW92ZShyZXN1bHQuZXJyb3IoKSkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6Ok1lbW9yeTogewor
ICAgICAgICAgICAgYm9vbCBpc0ltcG9ydCA9IHRydWU7CisgICAgICAgICAgICBQYXJ0aWFsUmVz
dWx0IHJlc3VsdCA9IHBhcnNlTWVtb3J5SGVscGVyKGlzSW1wb3J0KTsKKyAgICAgICAgICAgIGlm
IChVTkxJS0VMWSghcmVzdWx0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoV1RGTW92ZShyZXN1bHQuZXJyb3IoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6Okdsb2JhbDogeworICAgICAgICAgICAgR2xv
YmFsIGdsb2JhbDsKKyAgICAgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VH
bG9iYWxUeXBlKGdsb2JhbCkpOworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihnbG9i
YWwubXV0YWJpbGl0eSA9PSBHbG9iYWw6Ok11dGFibGUsICJNdXRhYmxlIEdsb2JhbHMgYXJlbid0
IHN1cHBvcnRlZCIpOworCisgICAgICAgICAgICBraW5kSW5kZXggPSBtX2luZm8tPmdsb2JhbHMu
c2l6ZSgpOworICAgICAgICAgICAgbV9pbmZvLT5nbG9iYWxzLnVuY2hlY2tlZEFwcGVuZChXVEZN
b3ZlKGdsb2JhbCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIG1faW5mby0+aW1wb3J0cy51bmNoZWNrZWRBcHBlbmQoeyBXVEZNb3ZlKG1vZHVs
ZVN0cmluZyksIFdURk1vdmUoZmllbGRTdHJpbmcpLCBraW5kLCBraW5kSW5kZXggfSk7CisgICAg
fQorCisgICAgbV9pbmZvLT5maXJzdEludGVybmFsR2xvYmFsID0gbV9pbmZvLT5nbG9iYWxzLnNp
emUoKTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlRnVu
Y3Rpb24oKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgdWludDMyX3QgY291bnQ7CisgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoY291bnQpLCAiY2FuJ3QgZ2V0IEZ1bmN0
aW9uIHNlY3Rpb24ncyBjb3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoY291bnQgPiBt
YXhGdW5jdGlvbnMsICJGdW5jdGlvbiBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBjb3Vu
dCwgIiBtYXhpbXVtICIsIG1heEZ1bmN0aW9ucyk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
bV9pbmZvLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy50cnlSZXNlcnZlQ2FwYWNp
dHkoY291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgY291bnQsICIg
RnVuY3Rpb24gc2lnbmF0dXJlcyIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+
ZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnRyeVJlc2VydmVDYXBhY2l0eShjb3VudCksICJjYW4n
dCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBjb3VudCwgIkZ1bmN0aW9uIGxvY2F0aW9u
cyIpOworCisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAg
ICAgdWludDMyX3QgdHlwZU51bWJlcjsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFy
c2VWYXJVSW50MzIodHlwZU51bWJlciksICJjYW4ndCBnZXQgIiwgaSwgInRoIEZ1bmN0aW9uJ3Mg
dHlwZSBudW1iZXIiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0eXBlTnVtYmVyID49
IG1faW5mby0+dXNlZFNpZ25hdHVyZXMuc2l6ZSgpLCBpLCAidGggRnVuY3Rpb24gdHlwZSBudW1i
ZXIgaXMgaW52YWxpZCAiLCB0eXBlTnVtYmVyKTsKKworICAgICAgICBTaWduYXR1cmVJbmRleCBz
aWduYXR1cmVJbmRleCA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQobV9pbmZvLT51c2VkU2ln
bmF0dXJlc1t0eXBlTnVtYmVyXSk7CisgICAgICAgIC8vIFRoZSBDb2RlIHNlY3Rpb24gZml4ZXMg
dXAgc3RhcnQgYW5kIGVuZC4KKyAgICAgICAgc2l6ZV90IHN0YXJ0ID0gMDsKKyAgICAgICAgc2l6
ZV90IGVuZCA9IDA7CisgICAgICAgIG1faW5mby0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUlu
ZGljZXMudW5jaGVja2VkQXBwZW5kKHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgbV9pbmZvLT5m
dW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkudW5jaGVja2VkQXBwZW5kKHsgc3RhcnQsIGVuZCB9KTsK
KyAgICB9CisKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNl
UmVzaXphYmxlTGltaXRzKHVpbnQzMl90JiBpbml0aWFsLCBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90
PiYgbWF4aW11bSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIEFTU0VSVCghbWF4aW11bSk7CisK
KyAgICB1aW50OF90IGZsYWdzOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUlu
dDEoZmxhZ3MpLCAiY2FuJ3QgcGFyc2UgcmVzaXphYmxlIGxpbWl0cyBmbGFncyIpOworICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGluaXRpYWwpLCAiY2FuJ3QgcGFyc2Ug
cmVzaXphYmxlIGxpbWl0cyBpbml0aWFsIHBhZ2UgY291bnQiKTsKKworICAgIGlmIChmbGFncykg
eworICAgICAgICB1aW50MzJfdCBtYXhpbXVtSW50OworICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKCFwYXJzZVZhclVJbnQzMihtYXhpbXVtSW50KSwgImNhbid0IHBhcnNlIHJlc2l6YWJsZSBs
aW1pdHMgbWF4aW11bSBwYWdlIGNvdW50Iik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
aW5pdGlhbCA+IG1heGltdW1JbnQsICJyZXNpemFibGUgbGltaXRzIGhhcyBhIGluaXRpYWwgcGFn
ZSBjb3VudCBvZiAiLCBpbml0aWFsLCAiIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiBpdHMgbWF4aW11
bSAiLCBtYXhpbXVtSW50KTsKKyAgICAgICAgbWF4aW11bSA9IG1heGltdW1JbnQ7CisgICAgfQor
CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZVRhYmxlSGVs
cGVyKGJvb2wgaXNJbXBvcnQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKG1faW5mby0+dGFibGVDb3VudCgpID4gMCwgIkNhbm5vdCBoYXZlIG1vcmUgdGhhbiBv
bmUgVGFibGUgZm9yIG5vdyIpOworCisgICAgaW50OF90IHR5cGU7CisgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighcGFyc2VJbnQ3KHR5cGUpLCAiY2FuJ3QgcGFyc2UgVGFibGUgdHlwZSIpOworICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYodHlwZSAhPSBXYXNtOjpBbnlmdW5jLCAiVGFibGUgdHlwZSBz
aG91bGQgYmUgYW55ZnVuYywgZ290ICIsIHR5cGUpOworCisgICAgdWludDMyX3QgaW5pdGlhbDsK
KyAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtOworICAgIFBhcnRpYWxSZXN1bHQg
bGltaXRzID0gcGFyc2VSZXNpemFibGVMaW1pdHMoaW5pdGlhbCwgbWF4aW11bSk7CisgICAgaWYg
KFVOTElLRUxZKCFsaW1pdHMpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoV1RGTW92
ZShsaW1pdHMuZXJyb3IoKSkpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoaW5pdGlhbCA+IG1h
eFRhYmxlRW50cmllcywgIlRhYmxlJ3MgaW5pdGlhbCBwYWdlIGNvdW50IG9mICIsIGluaXRpYWws
ICIgaXMgdG9vIGJpZywgbWF4aW11bSAiLCBtYXhUYWJsZUVudHJpZXMpOworCisgICAgQVNTRVJU
KCFtYXhpbXVtIHx8ICptYXhpbXVtID49IGluaXRpYWwpOworCisgICAgbV9pbmZvLT50YWJsZUlu
Zm9ybWF0aW9uID0gVGFibGVJbmZvcm1hdGlvbihpbml0aWFsLCBtYXhpbXVtLCBpc0ltcG9ydCk7
CisKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlVGFibGUo
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgdWludDMyX3QgY291bnQ7CisgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoY291bnQpLCAiY2FuJ3QgZ2V0IFRhYmxlJ3MgY291
bnQiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGNvdW50ID4gMSwgIlRhYmxlIGNvdW50IG9m
ICIsIGNvdW50LCAiIGlzIGludmFsaWQsIGF0IG1vc3QgMSBpcyBhbGxvd2VkIGZvciBub3ciKTsK
KworICAgIGlmICghY291bnQpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBib29sIGlzSW1w
b3J0ID0gZmFsc2U7CisgICAgUGFydGlhbFJlc3VsdCByZXN1bHQgPSBwYXJzZVRhYmxlSGVscGVy
KGlzSW1wb3J0KTsKKyAgICBpZiAoVU5MSUtFTFkoIXJlc3VsdCkpCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChXVEZNb3ZlKHJlc3VsdC5lcnJvcigpKSk7CisKKyAgICByZXR1cm4geyB9
OworfQorCithdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlTWVtb3J5SGVscGVyKGJvb2wgaXNJbXBv
cnQpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG1faW5mby0+
bWVtb3J5Q291bnQoKSwgInRoZXJlIGNhbiBhdCBtb3N0IGJlIG9uZSBNZW1vcnkgc2VjdGlvbiBm
b3Igbm93Iik7CisKKyAgICBQYWdlQ291bnQgaW5pdGlhbFBhZ2VDb3VudDsKKyAgICBQYWdlQ291
bnQgbWF4aW11bVBhZ2VDb3VudDsKKyAgICB7CisgICAgICAgIHVpbnQzMl90IGluaXRpYWw7Cisg
ICAgICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW07CisgICAgICAgIFBhcnRpYWxS
ZXN1bHQgbGltaXRzID0gcGFyc2VSZXNpemFibGVMaW1pdHMoaW5pdGlhbCwgbWF4aW11bSk7Cisg
ICAgICAgIGlmIChVTkxJS0VMWSghbGltaXRzKSkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChXVEZNb3ZlKGxpbWl0cy5lcnJvcigpKSk7CisgICAgICAgIEFTU0VSVCghbWF4aW11
bSB8fCAqbWF4aW11bSA+PSBpbml0aWFsKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
UGFnZUNvdW50Ojppc1ZhbGlkKGluaXRpYWwpLCAiTWVtb3J5J3MgaW5pdGlhbCBwYWdlIGNvdW50
IG9mICIsIGluaXRpYWwsICIgaXMgaW52YWxpZCIpOworCisgICAgICAgIGluaXRpYWxQYWdlQ291
bnQgPSBQYWdlQ291bnQoaW5pdGlhbCk7CisKKyAgICAgICAgaWYgKG1heGltdW0pIHsKKyAgICAg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIVBhZ2VDb3VudDo6aXNWYWxpZCgqbWF4aW11bSks
ICJNZW1vcnkncyBtYXhpbXVtIHBhZ2UgY291bnQgb2YgIiwgKm1heGltdW0sICIgaXMgaW52YWxp
ZCIpOworICAgICAgICAgICAgbWF4aW11bVBhZ2VDb3VudCA9IFBhZ2VDb3VudCgqbWF4aW11bSk7
CisgICAgICAgIH0KKyAgICB9CisgICAgQVNTRVJUKGluaXRpYWxQYWdlQ291bnQpOworICAgIEFT
U0VSVCghbWF4aW11bVBhZ2VDb3VudCB8fCBtYXhpbXVtUGFnZUNvdW50ID49IGluaXRpYWxQYWdl
Q291bnQpOworCisgICAgbV9pbmZvLT5tZW1vcnkgPSBNZW1vcnlJbmZvcm1hdGlvbihpbml0aWFs
UGFnZUNvdW50LCBtYXhpbXVtUGFnZUNvdW50LCBpc0ltcG9ydCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKworYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZU1lbW9yeSgpIC0+IFBhcnRpYWxSZXN1bHQK
K3sKKyAgICB1aW50OF90IGNvdW50OworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFy
VUludDEoY291bnQpLCAiY2FuJ3QgcGFyc2UgTWVtb3J5IHNlY3Rpb24ncyBjb3VudCIpOworCisg
ICAgaWYgKCFjb3VudCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoY291bnQgIT0gMSwgIk1lbW9yeSBzZWN0aW9uIGhhcyBtb3JlIHRoYW4gb25lIG1lbW9y
eSwgV2ViQXNzZW1ibHkgY3VycmVudGx5IG9ubHkgYWxsb3dzIHplcm8gb3Igb25lIik7CisKKyAg
ICBib29sIGlzSW1wb3J0ID0gZmFsc2U7CisgICAgcmV0dXJuIHBhcnNlTWVtb3J5SGVscGVyKGlz
SW1wb3J0KTsKK30KKworYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZUdsb2JhbCgpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICB1aW50MzJfdCBnbG9iYWxDb3VudDsKKyAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFwYXJzZVZhclVJbnQzMihnbG9iYWxDb3VudCksICJjYW4ndCBnZXQgR2xvYmFsIHNl
Y3Rpb24ncyBjb3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZ2xvYmFsQ291bnQgPiBt
YXhHbG9iYWxzLCAiR2xvYmFsIHNlY3Rpb24ncyBjb3VudCBpcyB0b28gYmlnICIsIGdsb2JhbENv
dW50LCAiIG1heGltdW0gIiwgbWF4R2xvYmFscyk7CisgICAgc2l6ZV90IHRvdGFsQnl0ZXMgPSBn
bG9iYWxDb3VudCArIG1faW5mby0+Zmlyc3RJbnRlcm5hbEdsb2JhbDsKKyAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKChzdGF0aWNfY2FzdDx1aW50MzJfdD4odG90YWxCeXRlcykgPCBnbG9iYWxDb3Vu
dCkgfHwgIW1faW5mby0+Z2xvYmFscy50cnlSZXNlcnZlQ2FwYWNpdHkodG90YWxCeXRlcyksICJj
YW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yICIsIHRvdGFsQnl0ZXMsICIgZ2xvYmFscyIpOworCisg
ICAgZm9yICh1aW50MzJfdCBnbG9iYWxJbmRleCA9IDA7IGdsb2JhbEluZGV4IDwgZ2xvYmFsQ291
bnQ7ICsrZ2xvYmFsSW5kZXgpIHsKKyAgICAgICAgR2xvYmFsIGdsb2JhbDsKKyAgICAgICAgdWlu
dDhfdCBpbml0T3Bjb2RlOworCisgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFy
c2VHbG9iYWxUeXBlKGdsb2JhbCkpOworICAgICAgICBUeXBlIHR5cGVGb3JJbml0T3Bjb2RlOwor
ICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlSW5pdEV4cHIoaW5pdE9wY29k
ZSwgZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIsIHR5cGVGb3JJbml0T3Bjb2RlKSk7
CisgICAgICAgIGlmIChpbml0T3Bjb2RlID09IEdldEdsb2JhbCkKKyAgICAgICAgICAgIGdsb2Jh
bC5pbml0aWFsaXphdGlvblR5cGUgPSBHbG9iYWw6OkZyb21HbG9iYWxJbXBvcnQ7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGdsb2JhbC5pbml0aWFsaXphdGlvblR5cGUgPSBHbG9iYWw6OkZy
b21FeHByZXNzaW9uOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHR5cGVGb3JJbml0T3Bj
b2RlICE9IGdsb2JhbC50eXBlLCAiR2xvYmFsIGluaXRfZXhwciBvcGNvZGUgb2YgdHlwZSAiLCB0
eXBlRm9ySW5pdE9wY29kZSwgIiBkb2Vzbid0IG1hdGNoIGdsb2JhbCdzIHR5cGUgIiwgZ2xvYmFs
LnR5cGUpOworCisgICAgICAgIG1faW5mby0+Z2xvYmFscy51bmNoZWNrZWRBcHBlbmQoV1RGTW92
ZShnbG9iYWwpKTsKKyAgICB9CisKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIFNlY3Rpb25Q
YXJzZXI6OnBhcnNlRXhwb3J0KCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHVpbnQzMl90IGV4
cG9ydENvdW50OworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGV4cG9y
dENvdW50KSwgImNhbid0IGdldCBFeHBvcnQgc2VjdGlvbidzIGNvdW50Iik7CisgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRihleHBvcnRDb3VudCA+IG1heEV4cG9ydHMsICJFeHBvcnQgc2VjdGlvbidz
IGNvdW50IGlzIHRvbyBiaWcgIiwgZXhwb3J0Q291bnQsICIgbWF4aW11bSAiLCBtYXhFeHBvcnRz
KTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmV4cG9ydHMudHJ5UmVzZXJ2ZUNh
cGFjaXR5KGV4cG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIs
IGV4cG9ydENvdW50LCAiIGV4cG9ydHMiKTsKKworICAgIEhhc2hTZXQ8U3RyaW5nPiBleHBvcnRO
YW1lczsKKyAgICBmb3IgKHVpbnQzMl90IGV4cG9ydE51bWJlciA9IDA7IGV4cG9ydE51bWJlciA8
IGV4cG9ydENvdW50OyArK2V4cG9ydE51bWJlcikgeworICAgICAgICB1aW50MzJfdCBmaWVsZExl
bjsKKyAgICAgICAgTmFtZSBmaWVsZFN0cmluZzsKKyAgICAgICAgRXh0ZXJuYWxLaW5kIGtpbmQ7
CisgICAgICAgIHVuc2lnbmVkIGtpbmRJbmRleDsKKworICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKCFwYXJzZVZhclVJbnQzMihmaWVsZExlbiksICJjYW4ndCBnZXQgIiwgZXhwb3J0TnVtYmVy
LCAidGggRXhwb3J0J3MgZmllbGQgbmFtZSBsZW5ndGgiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighY29uc3VtZVVURjhTdHJpbmcoZmllbGRTdHJpbmcsIGZpZWxkTGVuKSwgImNhbid0
IGdldCAiLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQncyBmaWVsZCBuYW1lIG9mIGxlbmd0aCAi
LCBmaWVsZExlbik7CisgICAgICAgIFN0cmluZyBmaWVsZE5hbWUgPSBTdHJpbmc6OmZyb21VVEY4
KGZpZWxkU3RyaW5nKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihleHBvcnROYW1lcy5j
b250YWlucyhmaWVsZE5hbWUpLCAiZHVwbGljYXRlIGV4cG9ydDogJyIsIGZpZWxkU3RyaW5nLCAi
JyIpOworICAgICAgICBleHBvcnROYW1lcy5hZGQoZmllbGROYW1lKTsKKworICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFwYXJzZUV4dGVybmFsS2luZChraW5kKSwgImNhbid0IGdldCAiLCBl
eHBvcnROdW1iZXIsICJ0aCBFeHBvcnQncyBraW5kLCBuYW1lZCAnIiwgZmllbGRTdHJpbmcsICIn
Iik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGtpbmRJbmRl
eCksICJjYW4ndCBnZXQgIiwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0J3Mga2luZCBpbmRleCwg
bmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOworICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKKyAg
ICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6OkZ1bmN0aW9uOiB7CisgICAgICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKGtpbmRJbmRleCA+PSBtX2luZm8tPmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUo
KSwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0IGhhcyBpbnZhbGlkIGZ1bmN0aW9uIG51bWJlciAi
LCBraW5kSW5kZXgsICIgaXQgZXhjZWVkcyB0aGUgZnVuY3Rpb24gaW5kZXggc3BhY2UgIiwgbV9p
bmZvLT5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCksICIsIG5hbWVkICciLCBmaWVsZFN0cmluZywg
IiciKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRXh0ZXJu
YWxLaW5kOjpUYWJsZTogeworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihraW5kSW5k
ZXggPj0gbV9pbmZvLT50YWJsZUNvdW50KCksICJjYW4ndCBleHBvcnQgVGFibGUgIiwga2luZElu
ZGV4LCAiIHRoZXJlIGFyZSAiLCBtX2luZm8tPnRhYmxlQ291bnQoKSwgIiBUYWJsZXMiKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpN
ZW1vcnk6IHsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+bWVtb3J5
LCAiY2FuJ3QgZXhwb3J0IGEgbm9uLWV4aXN0ZW50IE1lbW9yeSIpOworICAgICAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRihraW5kSW5kZXgsICJjYW4ndCBleHBvcnQgTWVtb3J5ICIsIGtpbmRJ
bmRleCwgIiBvbmx5IG9uZSBUYWJsZSBpcyBjdXJyZW50bHkgc3VwcG9ydGVkIik7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEV4dGVybmFsS2luZDo6R2xvYmFs
OiB7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGtpbmRJbmRleCA+PSBtX2luZm8t
Pmdsb2JhbHMuc2l6ZSgpLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQgaGFzIGludmFsaWQgZ2xv
YmFsIG51bWJlciAiLCBraW5kSW5kZXgsICIgaXQgZXhjZWVkcyB0aGUgZ2xvYmFscyBjb3VudCAi
LCBtX2luZm8tPmdsb2JhbHMuc2l6ZSgpLCAiLCBuYW1lZCAnIiwgZmllbGRTdHJpbmcsICInIik7
CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG1faW5mby0+Z2xvYmFsc1traW5kSW5k
ZXhdLm11dGFiaWxpdHkgIT0gR2xvYmFsOjpJbW11dGFibGUsIGV4cG9ydE51bWJlciwgInRoIEV4
cG9ydCBpc24ndCBpbW11dGFibGUsIG5hbWVkICciLCBmaWVsZFN0cmluZywgIiciKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBtX2luZm8tPmV4
cG9ydHMudW5jaGVja2VkQXBwZW5kKHsgV1RGTW92ZShmaWVsZFN0cmluZyksIGtpbmQsIGtpbmRJ
bmRleCB9KTsKKyAgICB9CisKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIFNlY3Rpb25QYXJz
ZXI6OnBhcnNlU3RhcnQoKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgdWludDMyX3Qgc3RhcnRG
dW5jdGlvbkluZGV4OworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKHN0
YXJ0RnVuY3Rpb25JbmRleCksICJjYW4ndCBnZXQgU3RhcnQgaW5kZXgiKTsKKyAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKHN0YXJ0RnVuY3Rpb25JbmRleCA+PSBtX2luZm8tPmZ1bmN0aW9uSW5kZXhT
cGFjZVNpemUoKSwgIlN0YXJ0IGluZGV4ICIsIHN0YXJ0RnVuY3Rpb25JbmRleCwgIiBleGNlZWRz
IGZ1bmN0aW9uIGluZGV4IHNwYWNlICIsIG1faW5mby0+ZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgp
KTsKKyAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1faW5mby0+c2lnbmF0dXJl
SW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHN0YXJ0RnVuY3Rpb25JbmRleCk7CisgICAgY29u
c3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25h
dHVyZUluZGV4KTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHNpZ25hdHVyZS5hcmd1bWVudENv
dW50KCksICJTdGFydCBmdW5jdGlvbiBjYW4ndCBoYXZlIGFyZ3VtZW50cyIpOworICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoc2lnbmF0dXJlLnJldHVyblR5cGUoKSAhPSBWb2lkLCAiU3RhcnQgZnVu
Y3Rpb24gY2FuJ3QgcmV0dXJuIGEgdmFsdWUiKTsKKyAgICBtX2luZm8tPnN0YXJ0RnVuY3Rpb25J
bmRleFNwYWNlID0gc3RhcnRGdW5jdGlvbkluZGV4OworICAgIHJldHVybiB7IH07Cit9CisKK2F1
dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VFbGVtZW50KCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHVpbnQzMl90IGVsZW1lbnRDb3VudDsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZh
clVJbnQzMihlbGVtZW50Q291bnQpLCAiY2FuJ3QgZ2V0IEVsZW1lbnQgc2VjdGlvbidzIGNvdW50
Iik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihlbGVtZW50Q291bnQgPiBtYXhUYWJsZUVudHJp
ZXMsICJFbGVtZW50IHNlY3Rpb24ncyBjb3VudCBpcyB0b28gYmlnICIsIGVsZW1lbnRDb3VudCwg
IiBtYXhpbXVtICIsIG1heFRhYmxlRW50cmllcyk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
bV9pbmZvLT5lbGVtZW50cy50cnlSZXNlcnZlQ2FwYWNpdHkoZWxlbWVudENvdW50KSwgImNhbid0
IGFsbG9jYXRlIG1lbW9yeSBmb3IgIiwgZWxlbWVudENvdW50LCAiIEVsZW1lbnRzIik7CisgICAg
Zm9yICh1bnNpZ25lZCBlbGVtZW50TnVtID0gMDsgZWxlbWVudE51bSA8IGVsZW1lbnRDb3VudDsg
KytlbGVtZW50TnVtKSB7CisgICAgICAgIHVpbnQzMl90IHRhYmxlSW5kZXg7CisgICAgICAgIHVp
bnQ2NF90IGluaXRFeHByQml0czsKKyAgICAgICAgdWludDhfdCBpbml0T3Bjb2RlOworICAgICAg
ICB1aW50MzJfdCBpbmRleENvdW50OworCisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBh
cnNlVmFyVUludDMyKHRhYmxlSW5kZXgpLCAiY2FuJ3QgZ2V0ICIsIGVsZW1lbnROdW0sICJ0aCBF
bGVtZW50IHRhYmxlIGluZGV4Iik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYodGFibGVJ
bmRleCA+PSBtX2luZm8tPnRhYmxlQ291bnQoKSwgIkVsZW1lbnQgc2VjdGlvbiBmb3IgVGFibGUg
IiwgdGFibGVJbmRleCwgIiBleGNlZWRzIGF2YWlsYWJsZSBUYWJsZSAiLCBtX2luZm8tPnRhYmxl
Q291bnQoKSk7CisgICAgICAgIFR5cGUgaW5pdEV4cHJUeXBlOworICAgICAgICBXQVNNX0ZBSUxf
SUZfSEVMUEVSX0ZBSUxTKHBhcnNlSW5pdEV4cHIoaW5pdE9wY29kZSwgaW5pdEV4cHJCaXRzLCBp
bml0RXhwclR5cGUpKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbml0RXhwclR5cGUg
IT0gSTMyLCAiRWxlbWVudCBpbml0X2V4cHIgbXVzdCBwcm9kdWNlIGFuIGkzMiIpOworICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbmRleENvdW50KSwgImNhbid0
IGdldCAiLCBlbGVtZW50TnVtLCAidGggaW5kZXggY291bnQgZm9yIEVsZW1lbnQgc2VjdGlvbiIp
OworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluZGV4Q291bnQgPT0gc3RkOjpudW1lcmlj
X2xpbWl0czx1aW50MzJfdD46Om1heCgpLCAiRWxlbWVudCBzZWN0aW9uJ3MgIiwgZWxlbWVudE51
bSwgInRoIGluZGV4IGNvdW50IGlzIHRvbyBiaWcgIiwgaW5kZXhDb3VudCk7CisKKyAgICAgICAg
QVNTRVJUKCEhbV9pbmZvLT50YWJsZUluZm9ybWF0aW9uKTsKKworICAgICAgICBFbGVtZW50IGVs
ZW1lbnQobWFrZUkzMkluaXRFeHByKGluaXRPcGNvZGUsIGluaXRFeHByQml0cykpOworICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFlbGVtZW50LmZ1bmN0aW9uSW5kaWNlcy50cnlSZXNlcnZl
Q2FwYWNpdHkoaW5kZXhDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yICIsIGluZGV4
Q291bnQsICIgRWxlbWVudCBpbmRpY2VzIik7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRl
eCA9IDA7IGluZGV4IDwgaW5kZXhDb3VudDsgKytpbmRleCkgeworICAgICAgICAgICAgdWludDMy
X3QgZnVuY3Rpb25JbmRleDsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNl
VmFyVUludDMyKGZ1bmN0aW9uSW5kZXgpLCAiY2FuJ3QgZ2V0IEVsZW1lbnQgc2VjdGlvbidzICIs
IGVsZW1lbnROdW0sICJ0aCBlbGVtZW50J3MgIiwgaW5kZXgsICJ0aCBpbmRleCIpOworICAgICAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvbkluZGV4ID49IG1faW5mby0+ZnVuY3Rp
b25JbmRleFNwYWNlU2l6ZSgpLCAiRWxlbWVudCBzZWN0aW9uJ3MgIiwgZWxlbWVudE51bSwgInRo
IGVsZW1lbnQncyAiLCBpbmRleCwgInRoIGluZGV4IGlzICIsIGZ1bmN0aW9uSW5kZXgsICIgd2hp
Y2ggZXhjZWVkcyB0aGUgZnVuY3Rpb24gaW5kZXggc3BhY2Ugc2l6ZSBvZiAiLCBtX2luZm8tPmZ1
bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7CisKKyAgICAgICAgICAgIGVsZW1lbnQuZnVuY3Rpb25J
bmRpY2VzLnVuY2hlY2tlZEFwcGVuZChmdW5jdGlvbkluZGV4KTsKKyAgICAgICAgfQorCisgICAg
ICAgIG1faW5mby0+ZWxlbWVudHMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoZWxlbWVudCkpOwor
ICAgIH0KKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VD
b2RlKCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHVpbnQzMl90IGNvdW50OworICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGNvdW50KSwgImNhbid0IGdldCBDb2RlIHNl
Y3Rpb24ncyBjb3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoY291bnQgPT0gc3RkOjpu
dW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLCAiQ29kZSBzZWN0aW9uJ3MgY291bnQgaXMg
dG9vIGJpZyAiLCBjb3VudCk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihjb3VudCAhPSBtX2lu
Zm8tPmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCksICJDb2RlIHNlY3Rpb24gY291bnQg
IiwgY291bnQsICIgZXhjZWVkcyB0aGUgZGVjbGFyZWQgbnVtYmVyIG9mIGZ1bmN0aW9ucyAiLCBt
X2luZm8tPmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCkpOworCisgICAgZm9yICh1aW50
MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgdWludDMyX3QgZnVuY3Rpb25T
aXplOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihmdW5jdGlv
blNpemUpLCAiY2FuJ3QgZ2V0ICIsIGksICJ0aCBDb2RlIGZ1bmN0aW9uJ3Mgc2l6ZSIpOworICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGZ1bmN0aW9uU2l6ZSA+IGxlbmd0aCgpLCAiQ29kZSBm
dW5jdGlvbidzIHNpemUgIiwgZnVuY3Rpb25TaXplLCAiIGV4Y2VlZHMgdGhlIG1vZHVsZSdzIHNp
emUgIiwgbGVuZ3RoKCkpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGZ1bmN0aW9uU2l6
ZSA+IGxlbmd0aCgpIC0gbV9vZmZzZXQsICJDb2RlIGZ1bmN0aW9uJ3Mgc2l6ZSAiLCBmdW5jdGlv
blNpemUsICIgZXhjZWVkcyB0aGUgbW9kdWxlJ3MgcmVtYWluaW5nIHNpemUiLCBsZW5ndGgoKSAt
IG1fb2Zmc2V0KTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvblNpemUgPiBt
YXhGdW5jdGlvblNpemUsICJDb2RlIGZ1bmN0aW9uJ3Mgc2l6ZSAiLCBmdW5jdGlvblNpemUsICIg
aXMgdG9vIGJpZyIpOworCisgICAgICAgIG1faW5mby0+ZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5
W2ldLnN0YXJ0ID0gbV9vZmZzZXRJblNvdXJjZSArIG1fb2Zmc2V0OworICAgICAgICBtX2luZm8t
PmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtpXS5lbmQgPSBtX29mZnNldEluU291cmNlICsgbV9v
ZmZzZXQgKyBmdW5jdGlvblNpemU7CisgICAgICAgIG1fb2Zmc2V0ICs9IGZ1bmN0aW9uU2l6ZTsK
KyAgICB9CisKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNl
SW5pdEV4cHIodWludDhfdCYgb3Bjb2RlLCB1aW50NjRfdCYgYml0c09ySW1wb3J0TnVtYmVyLCBU
eXBlJiByZXN1bHRUeXBlKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VVSW50OChvcGNvZGUpLCAiY2FuJ3QgZ2V0IGluaXRfZXhwcidzIG9wY29kZSIp
OworCisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIEkzMkNvbnN0OiB7CisgICAgICAg
IGludDMyX3QgY29uc3RhbnQ7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFy
SW50MzIoY29uc3RhbnQpLCAiY2FuJ3QgZ2V0IGNvbnN0YW50IHZhbHVlIGZvciBpbml0X2V4cHIn
cyBpMzIuY29uc3QiKTsKKyAgICAgICAgYml0c09ySW1wb3J0TnVtYmVyID0gc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KGNvbnN0YW50KTsKKyAgICAgICAgcmVzdWx0VHlwZSA9IEkzMjsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgY2FzZSBJNjRDb25zdDogeworICAgICAgICBpbnQ2NF90IGNv
bnN0YW50OworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhckludDY0KGNvbnN0
YW50KSwgImNhbid0IGdldCBjb25zdGFudCB2YWx1ZSBmb3IgaW5pdF9leHByJ3MgaTY0LmNvbnN0
Iik7CisgICAgICAgIGJpdHNPckltcG9ydE51bWJlciA9IGNvbnN0YW50OworICAgICAgICByZXN1
bHRUeXBlID0gSTY0OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEYzMkNvbnN0
OiB7CisgICAgICAgIHVpbnQzMl90IGNvbnN0YW50OworICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKCFwYXJzZVVJbnQzMihjb25zdGFudCksICJjYW4ndCBnZXQgY29uc3RhbnQgdmFsdWUgZm9y
IGluaXRfZXhwcidzIGYzMi5jb25zdCIpOworICAgICAgICBiaXRzT3JJbXBvcnROdW1iZXIgPSBj
b25zdGFudDsKKyAgICAgICAgcmVzdWx0VHlwZSA9IEYzMjsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgY2FzZSBGNjRDb25zdDogeworICAgICAgICB1aW50NjRfdCBjb25zdGFudDsKKyAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VVSW50NjQoY29uc3RhbnQpLCAiY2FuJ3Qg
Z2V0IGNvbnN0YW50IHZhbHVlIGZvciBpbml0X2V4cHIncyBmNjQuY29uc3QiKTsKKyAgICAgICAg
Yml0c09ySW1wb3J0TnVtYmVyID0gY29uc3RhbnQ7CisgICAgICAgIHJlc3VsdFR5cGUgPSBGNjQ7
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgR2V0R2xvYmFsOiB7CisgICAgICAg
IHVpbnQzMl90IGluZGV4OworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJ
bnQzMihpbmRleCksICJjYW4ndCBnZXQgZ2V0X2dsb2JhbCdzIGluZGV4Iik7CisKKyAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRihpbmRleCA+PSBtX2luZm8tPmdsb2JhbHMuc2l6ZSgpLCAiZ2V0
X2dsb2JhbCdzIGluZGV4ICIsIGluZGV4LCAiIGV4Y2VlZHMgdGhlIG51bWJlciBvZiBnbG9iYWxz
ICIsIG1faW5mby0+Z2xvYmFscy5zaXplKCkpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KGluZGV4ID49IG1faW5mby0+Zmlyc3RJbnRlcm5hbEdsb2JhbCwgImdldF9nbG9iYWwgaW1wb3J0
IGtpbmQgaW5kZXggIiwgaW5kZXgsICIgZXhjZWVkcyB0aGUgZmlyc3QgaW50ZXJuYWwgZ2xvYmFs
ICIsIG1faW5mby0+Zmlyc3RJbnRlcm5hbEdsb2JhbCk7CisKKyAgICAgICAgQVNTRVJUKG1faW5m
by0+Z2xvYmFsc1tpbmRleF0ubXV0YWJpbGl0eSA9PSBHbG9iYWw6OkltbXV0YWJsZSk7CisgICAg
ICAgIHJlc3VsdFR5cGUgPSBtX2luZm8tPmdsb2JhbHNbaW5kZXhdLnR5cGU7CisgICAgICAgIGJp
dHNPckltcG9ydE51bWJlciA9IGluZGV4OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBk
ZWZhdWx0OgorICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHRydWUsICJ1bmtub3duIGluaXRf
ZXhwciBvcGNvZGUgIiwgb3Bjb2RlKTsKKyAgICB9CisKKyAgICB1aW50OF90IGVuZE9wY29kZTsK
KyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ4KGVuZE9wY29kZSksICJjYW4ndCBn
ZXQgaW5pdF9leHByJ3MgZW5kIG9wY29kZSIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZW5k
T3Bjb2RlICE9IE9wVHlwZTo6RW5kLCAiaW5pdF9leHByIHNob3VsZCBlbmQgd2l0aCBlbmQsIGVu
ZGVkIHdpdGggIiwgZW5kT3Bjb2RlKTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gU2Vj
dGlvblBhcnNlcjo6cGFyc2VHbG9iYWxUeXBlKEdsb2JhbCYgZ2xvYmFsKSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgdWludDhfdCBtdXRhYmlsaXR5OworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlVmFsdWVUeXBlKGdsb2JhbC50eXBlKSwgImNhbid0IGdldCBHbG9iYWwncyB2YWx1ZSB0
eXBlIik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MShtdXRhYmlsaXR5
KSwgImNhbid0IGdldCBHbG9iYWwgdHlwZSdzIG11dGFiaWxpdHkiKTsKKyAgICBnbG9iYWwubXV0
YWJpbGl0eSA9IHN0YXRpY19jYXN0PEdsb2JhbDo6TXV0YWJpbGl0eT4obXV0YWJpbGl0eSk7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZURhdGEoKSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgdWludDMyX3Qgc2VnbWVudENvdW50OworICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKHNlZ21lbnRDb3VudCksICJjYW4ndCBnZXQgRGF0
YSBzZWN0aW9uJ3MgY291bnQiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHNlZ21lbnRDb3Vu
dCA+IG1heERhdGFTZWdtZW50cywgIkRhdGEgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwg
c2VnbWVudENvdW50LCAiIG1heGltdW0gIiwgbWF4RGF0YVNlZ21lbnRzKTsKKyAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFtX2luZm8tPmRhdGEudHJ5UmVzZXJ2ZUNhcGFjaXR5KHNlZ21lbnRDb3Vu
dCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBEYXRhIHNlY3Rpb24ncyAiLCBz
ZWdtZW50Q291bnQsICIgc2VnbWVudHMiKTsKKworICAgIGZvciAodWludDMyX3Qgc2VnbWVudE51
bWJlciA9IDA7IHNlZ21lbnROdW1iZXIgPCBzZWdtZW50Q291bnQ7ICsrc2VnbWVudE51bWJlcikg
eworICAgICAgICB1aW50MzJfdCBtZW1vcnlJbmRleDsKKyAgICAgICAgdWludDY0X3QgaW5pdEV4
cHJCaXRzOworICAgICAgICB1aW50OF90IGluaXRPcGNvZGU7CisgICAgICAgIHVpbnQzMl90IGRh
dGFCeXRlTGVuZ3RoOworCisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUlu
dDMyKG1lbW9yeUluZGV4KSwgImNhbid0IGdldCAiLCBzZWdtZW50TnVtYmVyLCAidGggRGF0YSBz
ZWdtZW50J3MgaW5kZXgiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtZW1vcnlJbmRl
eCA+PSBtX2luZm8tPm1lbW9yeUNvdW50KCksIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21l
bnQgaGFzIGluZGV4ICIsIG1lbW9yeUluZGV4LCAiIHdoaWNoIGV4Y2VlZHMgdGhlIG51bWJlciBv
ZiBNZW1vcmllcyAiLCBtX2luZm8tPm1lbW9yeUNvdW50KCkpOworICAgICAgICBUeXBlIGluaXRF
eHByVHlwZTsKKyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUluaXRFeHBy
KGluaXRPcGNvZGUsIGluaXRFeHByQml0cywgaW5pdEV4cHJUeXBlKSk7CisgICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoaW5pdEV4cHJUeXBlICE9IEkzMiwgc2VnbWVudE51bWJlciwgInRoIERh
dGEgc2VnbWVudCdzIGluaXRfZXhwciBtdXN0IHByb2R1Y2UgYW4gaTMyIik7CisgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGRhdGFCeXRlTGVuZ3RoKSwgImNhbid0
IGdldCAiLCBzZWdtZW50TnVtYmVyLCAidGggRGF0YSBzZWdtZW50J3MgZGF0YSBieXRlIGxlbmd0
aCIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGRhdGFCeXRlTGVuZ3RoID4gbWF4TW9k
dWxlU2l6ZSwgc2VnbWVudE51bWJlciwgInRoIERhdGEgc2VnbWVudCdzIGRhdGEgYnl0ZSBsZW5n
dGggaXMgdG9vIGJpZyAiLCBkYXRhQnl0ZUxlbmd0aCwgIiBtYXhpbXVtICIsIG1heE1vZHVsZVNp
emUpOworCisgICAgICAgIFNlZ21lbnQqIHNlZ21lbnQgPSBTZWdtZW50OjpjcmVhdGUobWFrZUkz
MkluaXRFeHByKGluaXRPcGNvZGUsIGluaXRFeHByQml0cyksIGRhdGFCeXRlTGVuZ3RoKTsKKyAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighc2VnbWVudCwgImNhbid0IGFsbG9jYXRlIGVub3Vn
aCBtZW1vcnkgZm9yICIsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQgb2Ygc2l6ZSAi
LCBkYXRhQnl0ZUxlbmd0aCk7CisgICAgICAgIG1faW5mby0+ZGF0YS51bmNoZWNrZWRBcHBlbmQo
U2VnbWVudDo6YWRvcHRQdHIoc2VnbWVudCkpOworICAgICAgICBmb3IgKHVpbnQzMl90IGRhdGFC
eXRlID0gMDsgZGF0YUJ5dGUgPCBkYXRhQnl0ZUxlbmd0aDsgKytkYXRhQnl0ZSkgeworICAgICAg
ICAgICAgdWludDhfdCBieXRlOworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFy
c2VVSW50OChieXRlKSwgImNhbid0IGdldCAiLCBkYXRhQnl0ZSwgInRoIGRhdGEgYnl0ZSBmcm9t
ICIsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQiKTsKKyAgICAgICAgICAgIHNlZ21l
bnQtPmJ5dGUoZGF0YUJ5dGUpID0gYnl0ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4g
eyB9OworfQorCithdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlQ3VzdG9tKCkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIEN1c3RvbVNlY3Rpb24gc2VjdGlvbjsKKyAgICB1aW50MzJfdCBjdXN0b21T
ZWN0aW9uTnVtYmVyID0gbV9pbmZvLT5jdXN0b21TZWN0aW9ucy5zaXplKCkgKyAxOworICAgIHVp
bnQzMl90IG5hbWVMZW47CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5jdXN0b21T
ZWN0aW9ucy50cnlSZXNlcnZlQ2FwYWNpdHkoY3VzdG9tU2VjdGlvbk51bWJlciksICJjYW4ndCBh
bGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBjdXN0b21TZWN0aW9uTnVtYmVyLCAidGggY3Vz
dG9tIHNlY3Rpb24iKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihu
YW1lTGVuKSwgImNhbid0IGdldCAiLCBjdXN0b21TZWN0aW9uTnVtYmVyLCAidGggY3VzdG9tIHNl
Y3Rpb24ncyBuYW1lIGxlbmd0aCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVV
VEY4U3RyaW5nKHNlY3Rpb24ubmFtZSwgbmFtZUxlbiksICJuYW1lTGVuIGdldCAiLCBjdXN0b21T
ZWN0aW9uTnVtYmVyLCAidGggY3VzdG9tIHNlY3Rpb24ncyBuYW1lIG9mIGxlbmd0aCAiLCBuYW1l
TGVuKTsKKworICAgIHVpbnQzMl90IHBheWxvYWRCeXRlcyA9IGxlbmd0aCgpIC0gbV9vZmZzZXQ7
CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighc2VjdGlvbi5wYXlsb2FkLnRyeVJlc2VydmVDYXBh
Y2l0eShwYXlsb2FkQnl0ZXMpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwg
Y3VzdG9tU2VjdGlvbk51bWJlciwgInRoIGN1c3RvbSBzZWN0aW9uJ3MgIiwgcGF5bG9hZEJ5dGVz
LCAiIGJ5dGVzIik7CisgICAgZm9yICh1aW50MzJfdCBieXRlTnVtYmVyID0gMDsgYnl0ZU51bWJl
ciA8IHBheWxvYWRCeXRlczsgKytieXRlTnVtYmVyKSB7CisgICAgICAgIHVpbnQ4X3QgYnl0ZTsK
KyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VVSW50OChieXRlKSwgImNhbid0IGdl
dCAiLCBieXRlTnVtYmVyLCAidGggZGF0YSBieXRlIGZyb20gIiwgY3VzdG9tU2VjdGlvbk51bWJl
ciwgInRoIGN1c3RvbSBzZWN0aW9uIik7CisgICAgICAgIHNlY3Rpb24ucGF5bG9hZC51bmNoZWNr
ZWRBcHBlbmQoYnl0ZSk7CisgICAgfQorCisgICAgTmFtZSBuYW1lTmFtZSA9IHsgJ24nLCAnYScs
ICdtJywgJ2UnIH07CisgICAgaWYgKHNlY3Rpb24ubmFtZSA9PSBuYW1lTmFtZSkgeworICAgICAg
ICBOYW1lU2VjdGlvblBhcnNlciBuYW1lU2VjdGlvblBhcnNlcihzZWN0aW9uLnBheWxvYWQuYmVn
aW4oKSwgc2VjdGlvbi5wYXlsb2FkLnNpemUoKSwgbV9pbmZvKTsKKyAgICAgICAgaWYgKGF1dG8g
bmFtZVNlY3Rpb24gPSBuYW1lU2VjdGlvblBhcnNlci5wYXJzZSgpKQorICAgICAgICAgICAgbV9p
bmZvLT5uYW1lU2VjdGlvbiA9IFdURk1vdmUoKm5hbWVTZWN0aW9uKTsKKyAgICB9CisKKyAgICBt
X2luZm8tPmN1c3RvbVNlY3Rpb25zLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKHNlY3Rpb24pKTsK
KworICAgIHJldHVybiB7IH07Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNl
bmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVNlY3Rpb25QYXJzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43OGQwMjgzNmZjOWYzMmJjMmI3OGZi
ZjkwYWQyYzVkYTlmOTEyODNkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVNlY3Rpb25QYXJzZXIuaApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxOCBZdXN1a2UgU3V6dWtpIDx5dXN1a2VzdXp1a2lAc2xvd3N0YXJ0Lm9yZz4u
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgor
I2luY2x1ZGUgIldhc21PcHMuaCIKKyNpbmNsdWRlICJXYXNtUGFyc2VyLmgiCisjaW5jbHVkZSA8
d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIFdhc20geworCitjbGFzcyBTZWN0aW9uUGFyc2VyIGZpbmFsIDogcHVibGlj
IFBhcnNlcjx2b2lkPiB7CitwdWJsaWM6CisgICAgU2VjdGlvblBhcnNlcihjb25zdCB1aW50OF90
KiBkYXRhLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG9mZnNldEluU291cmNlLCBNb2R1bGVJbmZvcm1h
dGlvbiYgaW5mbykKKyAgICAgICAgOiBQYXJzZXIoZGF0YSwgc2l6ZSkKKyAgICAgICAgLCBtX29m
ZnNldEluU291cmNlKG9mZnNldEluU291cmNlKQorICAgICAgICAsIG1faW5mbyhpbmZvKQorICAg
IHsKKyAgICB9CisKKyNkZWZpbmUgV0FTTV9TRUNUSU9OX0RFQ0xBUkVfUEFSU0VSKE5BTUUsIElE
LCBERVNDUklQVElPTikgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2UgIyMg
TkFNRSgpOworICAgIEZPUl9FQUNIX0tOT1dOX1dBU01fU0VDVElPTihXQVNNX1NFQ1RJT05fREVD
TEFSRV9QQVJTRVIpCisjdW5kZWYgV0FTTV9TRUNUSU9OX0RFQ0xBUkVfUEFSU0VSCisKKyAgICBQ
YXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUN1c3RvbSgpOworCitwcml2YXRl
OgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSAuLi5BcmdzPgorICAgIE5FVkVSX0lOTElORSBVbmV4
cGVjdGVkUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBmYWlsKEFyZ3MuLi4gYXJncykgY29uc3QK
KyAgICB7CisgICAgICAgIHVzaW5nIG5hbWVzcGFjZSBGYWlsdXJlSGVscGVyOyAvLyBTZWUgQURM
IGNvbW1lbnQgaW4gbmFtZXNwYWNlIGFib3ZlLgorICAgICAgICByZXR1cm4gVW5leHBlY3RlZFJl
c3VsdChtYWtlU3RyaW5nKCJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRl
ICJfcywgU3RyaW5nOjpudW1iZXIobV9vZmZzZXQgKyBtX29mZnNldEluU291cmNlKSwgIjogIl9z
LCBtYWtlU3RyaW5nKGFyZ3MpLi4uKSk7CisgICAgfQorCisgICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gcGFyc2VHbG9iYWxUeXBlKEdsb2JhbCYpOworICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlTWVtb3J5SGVscGVyKGJvb2wgaXNJbXBvcnQpOwor
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlVGFibGVIZWxwZXIoYm9v
bCBpc0ltcG9ydCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VS
ZXNpemFibGVMaW1pdHModWludDMyX3QmIGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+
JiBtYXhpbXVtKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUlu
aXRFeHByKHVpbnQ4X3QmLCB1aW50NjRfdCYsIFR5cGUmIGluaXRFeHByVHlwZSk7CisKKyAgICBz
aXplX3QgbV9vZmZzZXRJblNvdXJjZTsKKyAgICBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IG1faW5m
bzsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
U3RyZWFtaW5nUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TdHJl
YW1pbmdQYXJzZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI4ZThiNDE4NzI3MmNhYmVkNWY4NDA1MjFmN2Mz
ZjJhMjkyMTcyOWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtU3RyZWFtaW5nUGFyc2VyLmNwcApAQCAtMCwwICsxLDMzMSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOCBZdXN1a2UgU3V6dWtpIDx5dXN1a2VzdXp1a2lAc2xvd3N0YXJ0Lm9yZz4u
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXYXNtU3RyZWFtaW5nUGFyc2VyLmgiCisKKyNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJXYXNtTW9kdWxlUGFyc2VyLmgiCisjaW5jbHVkZSAi
V2FzbVNlY3Rpb25QYXJzZXIuaCIKKyNpbmNsdWRlIDx3dGYvVW5hbGlnbmVkQWNjZXNzLmg+CisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK25hbWVzcGFjZSBXYXNtU3RyZWFt
aW5nUGFyc2VySW50ZXJuYWwgeworc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSB0cnVl
OworfQorCisjZGVmaW5lIFdBU01fU1RSRUFNSU5HX1BBUlNFUl9GQUlMX0lGKGNvbmRpdGlvbiwg
Li4uKSBcCisgICAgZG8geyBcCisgICAgICAgIGlmIChVTkxJS0VMWShjb25kaXRpb24pKSB7IFwK
KyAgICAgICAgICAgIGRhdGFMb2dMbklmKFdhc21TdHJlYW1pbmdQYXJzZXJJbnRlcm5hbDo6dmVy
Ym9zZSwgX19WQV9BUkdTX18pOyBcCisgICAgICAgICAgICByZXR1cm4gU3RhdGU6OkZhdGFsRXJy
b3I7IFwKKyAgICAgICAgfSBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBXQVNNX1NUUkVB
TUlOR19QQVJTRVJfRkFJTF9JRl9IRUxQRVJfRkFJTFMoaGVscGVyKSBcCisgICAgZG8geyBcCisg
ICAgICAgIGF1dG8gaGVscGVyUmVzdWx0ID0gaGVscGVyOyBcCisgICAgICAgIGlmIChVTkxJS0VM
WSghaGVscGVyUmVzdWx0KSkgXAorICAgICAgICAgICAgcmV0dXJuIFN0YXRlOjpGYXRhbEVycm9y
OyBcCisgICAgfSB3aGlsZSAoMCkKKworQUxXQVlTX0lOTElORSBzdGQ6Om9wdGlvbmFsPHVpbnQ4
X3Q+IHBhcnNlVUludDcoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90JiBvZmZzZXQsIHNpemVf
dCBzaXplKQoreworICAgIGlmIChvZmZzZXQgPj0gc2l6ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHVpbnQ4X3QgcmVzdWx0ID0gZGF0YVtvZmZzZXQrK107CisgICAgaWYgKHJlc3VsdCA8
IDB4ODApCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
K30KKworU3RyZWFtaW5nUGFyc2VyOjpTdHJlYW1pbmdQYXJzZXIoTW9kdWxlSW5mb3JtYXRpb24m
IGluZm8pCisgICAgOiBtX2luZm8oaW5mbykKK3sKKyAgICBkYXRhTG9nTG5JZihXYXNtU3RyZWFt
aW5nUGFyc2VySW50ZXJuYWw6OnZlcmJvc2UsICJzdGFydGluZyB2YWxpZGF0aW9uIik7Cit9CisK
K2F1dG8gU3RyZWFtaW5nUGFyc2VyOjpwYXJzZU1vZHVsZUhlYWRlcihWZWN0b3I8dWludDhfdD4m
JiBkYXRhKSAtPiBTdGF0ZQoreworICAgIEFTU0VSVChkYXRhLnNpemUoKSA9PSBtb2R1bGVIZWFk
ZXJTaXplKTsKKyAgICBkYXRhTG9nTG5JZihXYXNtU3RyZWFtaW5nUGFyc2VySW50ZXJuYWw6OnZl
cmJvc2UsICJoZWFkZXIgdmFsaWRhdGlvbiIpOworICAgIFdBU01fU1RSRUFNSU5HX1BBUlNFUl9G
QUlMX0lGKGRhdGFbMF0gIT0gJ1wwJyB8fCBkYXRhWzFdICE9ICdhJyB8fCBkYXRhWzJdICE9ICdz
JyB8fCBkYXRhWzNdICE9ICdtJywgIm1vZHVsZXMgZG9lc24ndCBzdGFydCB3aXRoICdcXDBhc20n
Iik7CisgICAgdWludDMyX3QgdmVyc2lvbk51bWJlciA9IFdURjo6dW5hbGlnbmVkTG9hZDx1aW50
MzJfdD4oZGF0YS5kYXRhKCkgKyA0KTsKKyAgICBXQVNNX1NUUkVBTUlOR19QQVJTRVJfRkFJTF9J
Rih2ZXJzaW9uTnVtYmVyICE9IGV4cGVjdGVkVmVyc2lvbk51bWJlciwgInVuZXhwZWN0ZWQgdmVy
c2lvbiBudW1iZXIgIiwgdmVyc2lvbk51bWJlciwgIiBleHBlY3RlZCAiLCBleHBlY3RlZFZlcnNp
b25OdW1iZXIpOworICAgIG1fdmVyc2lvbk51bWJlciA9IHZlcnNpb25OdW1iZXI7CisgICAgcmV0
dXJuIFN0YXRlOjpTZWN0aW9uSGVhZGVyOworfQorCithdXRvIFN0cmVhbWluZ1BhcnNlcjo6cGFy
c2VTZWN0aW9uSGVhZGVyKFZlY3Rvcjx1aW50OF90PiYmIGRhdGEpIC0+IFN0YXRlCit7CisgICAg
QVNTRVJUKGRhdGEuc2l6ZSgpID09IHNlY3Rpb25IZWFkZXJTaXplKTsKKyAgICBzaXplX3Qgb2Zm
c2V0ID0gMDsKKyAgICBhdXRvIHJlc3VsdCA9IHBhcnNlVUludDcoZGF0YS5kYXRhKCksIG9mZnNl
dCwgZGF0YS5zaXplKCkpOworICAgIFdBU01fU1RSRUFNSU5HX1BBUlNFUl9GQUlMX0lGKCFyZXN1
bHQsICJjYW4ndCBnZXQgc2VjdGlvbiBieXRlIik7CisKKyAgICBTZWN0aW9uIHNlY3Rpb24gPSBT
ZWN0aW9uOjpDdXN0b207CisgICAgV0FTTV9TVFJFQU1JTkdfUEFSU0VSX0ZBSUxfSUYoIWRlY29k
ZVNlY3Rpb24oKnJlc3VsdCwgc2VjdGlvbiksICJpbnZhbGlkIHNlY3Rpb24iKTsKKyAgICBBU1NF
UlQoc2VjdGlvbiAhPSBTZWN0aW9uOjpCZWdpbik7CisgICAgV0FTTV9TVFJFQU1JTkdfUEFSU0VS
X0ZBSUxfSUYoIXZhbGlkYXRlT3JkZXIobV9wcmV2aW91c0tub3duU2VjdGlvbiwgc2VjdGlvbiks
ICJpbnZhbGlkIHNlY3Rpb24gb3JkZXIsICIsIG1ha2VTdHJpbmcobV9wcmV2aW91c0tub3duU2Vj
dGlvbiksICIgZm9sbG93ZWQgYnkgIiwgbWFrZVN0cmluZyhzZWN0aW9uKSk7CisgICAgbV9zZWN0
aW9uID0gc2VjdGlvbjsKKyAgICBpZiAoaXNLbm93blNlY3Rpb24oc2VjdGlvbikpCisgICAgICAg
IG1fcHJldmlvdXNLbm93blNlY3Rpb24gPSBzZWN0aW9uOworICAgIHJldHVybiBTdGF0ZTo6U2Vj
dGlvblNpemU7Cit9CisKK2F1dG8gU3RyZWFtaW5nUGFyc2VyOjpwYXJzZVNlY3Rpb25TaXplKHVp
bnQzMl90IHNlY3Rpb25MZW5ndGgpIC0+IFN0YXRlCit7CisgICAgbV9zZWN0aW9uTGVuZ3RoID0g
c2VjdGlvbkxlbmd0aDsKKyAgICBpZiAobV9zZWN0aW9uID09IFNlY3Rpb246OkNvZGUpCisgICAg
ICAgIHJldHVybiBTdGF0ZTo6Q29kZVNlY3Rpb25TaXplOworICAgIHJldHVybiBTdGF0ZTo6U2Vj
dGlvbkJvZHk7Cit9CisKK2F1dG8gU3RyZWFtaW5nUGFyc2VyOjpwYXJzZUNvZGVTZWN0aW9uU2l6
ZSh1aW50MzJfdCBmdW5jdGlvbkNvdW50KSAtPiBTdGF0ZQoreworICAgIG1fZnVuY3Rpb25Db3Vu
dCA9IGZ1bmN0aW9uQ291bnQ7CisgICAgbV9mdW5jdGlvbkluZGV4ID0gMDsKKyAgICBtX2NvZGVP
ZmZzZXQgPSBtX29mZnNldDsKKworICAgIFdBU01fU1RSRUFNSU5HX1BBUlNFUl9GQUlMX0lGKGZ1
bmN0aW9uQ291bnQgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLCAiQ29k
ZSBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBmdW5jdGlvbkNvdW50KTsKKyAgICBXQVNN
X1NUUkVBTUlOR19QQVJTRVJfRkFJTF9JRihmdW5jdGlvbkNvdW50ICE9IG1faW5mby0+ZnVuY3Rp
b25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKSwgIkNvZGUgc2VjdGlvbiBjb3VudCAiLCBmdW5jdGlv
bkNvdW50LCAiIGV4Y2VlZHMgdGhlIGRlY2xhcmVkIG51bWJlciBvZiBmdW5jdGlvbnMgIiwgbV9p
bmZvLT5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpKTsKKworICAgIGlmIChtX2Z1bmN0
aW9uSW5kZXggPT0gbV9mdW5jdGlvbkNvdW50KSB7CisgICAgICAgIGlmICgobV9jb2RlT2Zmc2V0
ICsgbV9zZWN0aW9uTGVuZ3RoKSA9PSBtX29mZnNldCkKKyAgICAgICAgICAgIHJldHVybiBTdGF0
ZTo6U2VjdGlvbkhlYWRlcjsKKyAgICAgICAgcmV0dXJuIFN0YXRlOjpGYXRhbEVycm9yOworICAg
IH0KKyAgICByZXR1cm4gU3RhdGU6OkZ1bmN0aW9uSGVhZGVyOworfQorCithdXRvIFN0cmVhbWlu
Z1BhcnNlcjo6cGFyc2VGdW5jdGlvbkhlYWRlcih1aW50MzJfdCBmdW5jdGlvblNpemUpIC0+IFN0
YXRlCit7CisgICAgbV9mdW5jdGlvblNpemUgPSBmdW5jdGlvblNpemU7CisgICAgV0FTTV9TVFJF
QU1JTkdfUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25TaXplID4gbWF4RnVuY3Rpb25TaXplLCAiQ29k
ZSBmdW5jdGlvbidzIHNpemUgIiwgZnVuY3Rpb25TaXplLCAiIGlzIHRvbyBiaWciKTsKKyAgICBy
ZXR1cm4gU3RhdGU6OkZ1bmN0aW9uQm9keTsKK30KKworYXV0byBTdHJlYW1pbmdQYXJzZXI6OnBh
cnNlRnVuY3Rpb25Cb2R5KFZlY3Rvcjx1aW50OF90PiYmIGRhdGEpIC0+IFN0YXRlCit7CisgICAg
bV9pbmZvLT5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlbbV9mdW5jdGlvbkluZGV4XS5zdGFydCA9
IG1fb2Zmc2V0OworICAgIG1faW5mby0+ZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W21fZnVuY3Rp
b25JbmRleF0uZW5kID0gbV9vZmZzZXQgKyBtX2Z1bmN0aW9uU2l6ZTsKKyAgICBkYXRhTG9nTG5J
ZihXYXNtU3RyZWFtaW5nUGFyc2VySW50ZXJuYWw6OnZlcmJvc2UsICJQcm9jZXNzaW5nIGZ1bmN0
aW9uIHN0YXJ0aW5nIGF0OiAiLCBtX2luZm8tPmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVttX2Z1
bmN0aW9uSW5kZXhdLnN0YXJ0LCAiIGFuZCBlbmRpbmcgYXQ6ICIsIG1faW5mby0+ZnVuY3Rpb25M
b2NhdGlvbkluQmluYXJ5W21fZnVuY3Rpb25JbmRleF0uZW5kKTsKKyAgICArK21fZnVuY3Rpb25J
bmRleDsKKyAgICBpZiAobV9mdW5jdGlvbkluZGV4ID09IG1fZnVuY3Rpb25Db3VudCkgeworICAg
ICAgICBpZiAoKG1fY29kZU9mZnNldCArIG1fc2VjdGlvbkxlbmd0aCkgPT0gbV9vZmZzZXQgKyBt
X2Z1bmN0aW9uU2l6ZSkKKyAgICAgICAgICAgIHJldHVybiBTdGF0ZTo6U2VjdGlvbkhlYWRlcjsK
KyAgICAgICAgcmV0dXJuIFN0YXRlOjpGYXRhbEVycm9yOworICAgIH0KKyAgICByZXR1cm4gU3Rh
dGU6OkZ1bmN0aW9uSGVhZGVyOworfQorCithdXRvIFN0cmVhbWluZ1BhcnNlcjo6cGFyc2VTZWN0
aW9uQm9keShWZWN0b3I8dWludDhfdD4mJiBkYXRhKSAtPiBTdGF0ZQoreworICAgIFNlY3Rpb25Q
YXJzZXIgcGFyc2VyKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwgbV9vZmZzZXQsIG1faW5mby5n
ZXQoKSk7CisgICAgc3dpdGNoIChtX3NlY3Rpb24pIHsKKyNkZWZpbmUgV0FTTV9TRUNUSU9OX1BB
UlNFKE5BTUUsIElELCBERVNDUklQVElPTikgXAorICAgIGNhc2UgU2VjdGlvbjo6TkFNRTogeyBc
CisgICAgICAgIFdBU01fU1RSRUFNSU5HX1BBUlNFUl9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJz
ZXIucGFyc2UgIyMgTkFNRSgpKTsgXAorICAgICAgICBicmVhazsgXAorICAgIH0KKyAgICBGT1Jf
RUFDSF9LTk9XTl9XQVNNX1NFQ1RJT04oV0FTTV9TRUNUSU9OX1BBUlNFKQorI3VuZGVmIFdBU01f
U0VDVElPTl9QQVJTRQorCisgICAgY2FzZSBTZWN0aW9uOjpDdXN0b206IHsKKyAgICAgICAgV0FT
TV9TVFJFQU1JTkdfUEFSU0VSX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlci5wYXJzZUN1c3Rv
bSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBTZWN0aW9uOjpCZWdpbjog
eworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgfQorCisgICAgV0FTTV9TVFJFQU1JTkdfUEFSU0VSX0ZBSUxfSUYocGFyc2Vy
Lmxlbmd0aCgpICE9IHBhcnNlci5vZmZzZXQoKSwgInBhcnNpbmcgZW5kZWQgYmVmb3JlIHRoZSBl
bmQgb2YgIiwgbWFrZVN0cmluZyhtX3NlY3Rpb24pLCAiIHNlY3Rpb24iKTsKKworICAgIHJldHVy
biBTdGF0ZTo6U2VjdGlvbkhlYWRlcjsKK30KKworYXV0byBTdHJlYW1pbmdQYXJzZXI6OmNvbnN1
bWUoY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBieXRlc1NpemUsIHNpemVfdCYgb2Zmc2V0
SW5CeXRlcywgc2l6ZV90IHJlcXVpcmVkU2l6ZSkgLT4gRXhwZWN0ZWQ8VmVjdG9yPHVpbnQ4X3Q+
LCBTdGF0ZT4KK3sKKyAgICBpZiAobV9yZW1haW5pbmcuc2l6ZSgpID09IHJlcXVpcmVkU2l6ZSkg
eworICAgICAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0ID0gV1RGTW92ZShtX3JlbWFpbmluZyk7
CisgICAgICAgIG1fbmV4dE9mZnNldCArPSByZXF1aXJlZFNpemU7CisgICAgICAgIHJldHVybiBX
VEZNb3ZlKHJlc3VsdCk7CisgICAgfQorCisgICAgaWYgKG1fcmVtYWluaW5nLnNpemUoKSA+PSBy
ZXF1aXJlZFNpemUpIHsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdChyZXF1aXJlZFNp
emUpOworICAgICAgICBtZW1jcHkocmVzdWx0LmRhdGEoKSwgbV9yZW1haW5pbmcuZGF0YSgpLCBy
ZXF1aXJlZFNpemUpOworICAgICAgICBtX3JlbWFpbmluZy5yZW1vdmUoMCwgcmVxdWlyZWRTaXpl
KTsKKyAgICAgICAgbV9uZXh0T2Zmc2V0ICs9IHJlcXVpcmVkU2l6ZTsKKyAgICAgICAgcmV0dXJu
IFdURk1vdmUocmVzdWx0KTsKKyAgICB9CisKKyAgICBBU1NFUlQobV9yZW1haW5pbmcuc2l6ZSgp
IDwgcmVxdWlyZWRTaXplKTsKKyAgICBzaXplX3QgYnl0ZXNSZW1haW5pbmdTaXplID0gYnl0ZXNT
aXplIC0gb2Zmc2V0SW5CeXRlczsKKyAgICBzaXplX3QgdG90YWxEYXRhU2l6ZSA9IG1fcmVtYWlu
aW5nLnNpemUoKSArIGJ5dGVzUmVtYWluaW5nU2l6ZTsKKyAgICBpZiAodG90YWxEYXRhU2l6ZSA8
IHJlcXVpcmVkU2l6ZSkgeworICAgICAgICBtX3JlbWFpbmluZy5hcHBlbmQoYnl0ZXMgKyBvZmZz
ZXRJbkJ5dGVzLCBieXRlc1JlbWFpbmluZ1NpemUpOworICAgICAgICBvZmZzZXRJbkJ5dGVzID0g
Ynl0ZXNTaXplOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQobV9zdGF0ZSk7CisgICAg
fQorCisgICAgc2l6ZV90IHVzZWRTaXplID0gcmVxdWlyZWRTaXplIC0gbV9yZW1haW5pbmcuc2l6
ZSgpOworICAgIG1fcmVtYWluaW5nLmFwcGVuZChieXRlcyArIG9mZnNldEluQnl0ZXMsIHVzZWRT
aXplKTsKKyAgICBvZmZzZXRJbkJ5dGVzICs9IHVzZWRTaXplOworICAgIFZlY3Rvcjx1aW50OF90
PiByZXN1bHQgPSBXVEZNb3ZlKG1fcmVtYWluaW5nKTsKKyAgICBtX25leHRPZmZzZXQgKz0gcmVx
dWlyZWRTaXplOworICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7Cit9CisKK2F1dG8gU3RyZWFt
aW5nUGFyc2VyOjpjb25zdW1lVmFyVUludDMyKGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3Qg
Ynl0ZXNTaXplLCBzaXplX3QmIG9mZnNldEluQnl0ZXMsIElzRW5kT2ZTdHJlYW0gaXNFbmRPZlN0
cmVhbSkgLT4gRXhwZWN0ZWQ8dWludDMyX3QsIFN0YXRlPgoreworICAgIGNvbnN0ZXhwciBzaXpl
X3QgbWF4U2l6ZSA9IDU7CisgICAgc2l6ZV90IGJ5dGVzUmVtYWluaW5nU2l6ZSA9IGJ5dGVzU2l6
ZSAtIG9mZnNldEluQnl0ZXM7CisgICAgc2l6ZV90IHRvdGFsRGF0YVNpemUgPSBtX3JlbWFpbmlu
Zy5zaXplKCkgKyBieXRlc1JlbWFpbmluZ1NpemU7CisgICAgaWYgKG1fcmVtYWluaW5nLnNpemUo
KSA+PSBtYXhTaXplKSB7CisgICAgICAgIC8vIERvIG5vdGhpbmcuCisgICAgfSBlbHNlIGlmICh0
b3RhbERhdGFTaXplID49IG1heFNpemUpIHsKKyAgICAgICAgc2l6ZV90IHVzZWRTaXplID0gbWF4
U2l6ZSAtIG1fcmVtYWluaW5nLnNpemUoKTsKKyAgICAgICAgbV9yZW1haW5pbmcuYXBwZW5kKGJ5
dGVzICsgb2Zmc2V0SW5CeXRlcywgdXNlZFNpemUpOworICAgICAgICBvZmZzZXRJbkJ5dGVzICs9
IHVzZWRTaXplOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fcmVtYWluaW5nLmFwcGVuZChieXRl
cyArIG9mZnNldEluQnl0ZXMsIGJ5dGVzUmVtYWluaW5nU2l6ZSk7CisgICAgICAgIG9mZnNldElu
Qnl0ZXMgKz0gYnl0ZXNSZW1haW5pbmdTaXplOworICAgICAgICBpZiAoaXNFbmRPZlN0cmVhbSA9
PSBJc0VuZE9mU3RyZWFtOjpObykKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCht
X3N0YXRlKTsKKyAgICB9CisKKyAgICBzaXplX3Qgb2Zmc2V0ID0gMDsKKyAgICB1aW50MzJfdCBy
ZXN1bHQgPSAwOworICAgIGlmICghV1RGOjpMRUJEZWNvZGVyOjpkZWNvZGVVSW50MzIobV9yZW1h
aW5pbmcuZGF0YSgpLCBtX3JlbWFpbmluZy5zaXplKCksIG9mZnNldCwgcmVzdWx0KSkKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0YXRlOjpGYXRhbEVycm9yKTsKKyAgICBzaXplX3Qg
Y29uc3VtZWRTaXplID0gb2Zmc2V0OworICAgIG1fcmVtYWluaW5nLnJlbW92ZSgwLCBjb25zdW1l
ZFNpemUpOworICAgIG1fbmV4dE9mZnNldCArPSBjb25zdW1lZFNpemU7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworYXV0byBTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKGNvbnN0IHVpbnQ4X3Qq
IGJ5dGVzLCBzaXplX3QgYnl0ZXNTaXplLCBJc0VuZE9mU3RyZWFtIGlzRW5kT2ZTdHJlYW0pIC0+
IFN0YXRlCit7CisgICAgc2l6ZV90IG9mZnNldEluQnl0ZXMgPSAwOworICAgIHdoaWxlICh0cnVl
KSB7CisgICAgICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgICAgICBjYXNlIFN0YXRlOjpNb2R1
bGVIZWFkZXI6IHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gY29uc3VtZShieXRlcywgYnl0
ZXNTaXplLCBvZmZzZXRJbkJ5dGVzLCBtb2R1bGVIZWFkZXJTaXplKTsKKyAgICAgICAgICAgIGlm
ICghcmVzdWx0KSB7CisgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IHJlc3VsdC5lcnJvcigpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBtX3N0YXRlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgbV9zdGF0ZSA9IHBhcnNlTW9kdWxlSGVhZGVyKFdURk1vdmUoKnJlc3VsdCkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFN0YXRlOjpTZWN0aW9uSGVh
ZGVyOiB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGNvbnN1bWUoYnl0ZXMsIGJ5dGVzU2l6
ZSwgb2Zmc2V0SW5CeXRlcywgc2VjdGlvbkhlYWRlclNpemUpOworICAgICAgICAgICAgaWYgKCFy
ZXN1bHQpIHsKKyAgICAgICAgICAgICAgICBtX3N0YXRlID0gcmVzdWx0LmVycm9yKCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIG1fc3RhdGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBt
X3N0YXRlID0gcGFyc2VTZWN0aW9uSGVhZGVyKFdURk1vdmUoKnJlc3VsdCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFN0YXRlOjpTZWN0aW9uU2l6ZTog
eworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBjb25zdW1lVmFyVUludDMyKGJ5dGVzLCBieXRl
c1NpemUsIG9mZnNldEluQnl0ZXMsIGlzRW5kT2ZTdHJlYW0pOworICAgICAgICAgICAgaWYgKCFy
ZXN1bHQpIHsKKyAgICAgICAgICAgICAgICBtX3N0YXRlID0gcmVzdWx0LmVycm9yKCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIG1fc3RhdGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBt
X3N0YXRlID0gcGFyc2VTZWN0aW9uU2l6ZSgqcmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgY2FzZSBTdGF0ZTo6U2VjdGlvbkJvZHk6IHsKKyAgICAgICAg
ICAgIGF1dG8gcmVzdWx0ID0gY29uc3VtZShieXRlcywgYnl0ZXNTaXplLCBvZmZzZXRJbkJ5dGVz
LCBtX3NlY3Rpb25MZW5ndGgpOworICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAg
ICAgICAgICBtX3N0YXRlID0gcmVzdWx0LmVycm9yKCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IG1fc3RhdGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX3N0YXRlID0gcGFyc2VTZWN0
aW9uQm9keShXVEZNb3ZlKCpyZXN1bHQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisKKyAgICAgICAgY2FzZSBTdGF0ZTo6Q29kZVNlY3Rpb25TaXplOiB7CisgICAgICAgICAgICBh
dXRvIHJlc3VsdCA9IGNvbnN1bWVWYXJVSW50MzIoYnl0ZXMsIGJ5dGVzU2l6ZSwgb2Zmc2V0SW5C
eXRlcywgaXNFbmRPZlN0cmVhbSk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkgeworICAgICAg
ICAgICAgICAgIG1fc3RhdGUgPSByZXN1bHQuZXJyb3IoKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gbV9zdGF0ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fc3RhdGUgPSBwYXJzZUNv
ZGVTZWN0aW9uU2l6ZSgqcmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgY2FzZSBTdGF0ZTo6RnVuY3Rpb25IZWFkZXI6IHsKKyAgICAgICAgICAgIGF1dG8g
cmVzdWx0ID0gY29uc3VtZVZhclVJbnQzMihieXRlcywgYnl0ZXNTaXplLCBvZmZzZXRJbkJ5dGVz
LCBpc0VuZE9mU3RyZWFtKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgICAg
ICAgICAgbV9zdGF0ZSA9IHJlc3VsdC5lcnJvcigpOworICAgICAgICAgICAgICAgIHJldHVybiBt
X3N0YXRlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9zdGF0ZSA9IHBhcnNlRnVuY3Rp
b25IZWFkZXIoKnJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIGNhc2UgU3RhdGU6OkZ1bmN0aW9uQm9keTogeworICAgICAgICAgICAgYXV0byByZXN1bHQg
PSBjb25zdW1lKGJ5dGVzLCBieXRlc1NpemUsIG9mZnNldEluQnl0ZXMsIG1fZnVuY3Rpb25TaXpl
KTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgICAgICAgICAgbV9zdGF0ZSA9
IHJlc3VsdC5lcnJvcigpOworICAgICAgICAgICAgICAgIHJldHVybiBtX3N0YXRlOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgbV9zdGF0ZSA9IHBhcnNlRnVuY3Rpb25Cb2R5KFdURk1vdmUo
KnJlc3VsdCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNl
IFN0YXRlOjpGaW5pc2hlZDoKKyAgICAgICAgY2FzZSBTdGF0ZTo6RmF0YWxFcnJvcjoKKyAgICAg
ICAgICAgIHJldHVybiBtX3N0YXRlOworICAgICAgICB9CisKKyAgICAgICAgbV9vZmZzZXQgPSBt
X25leHRPZmZzZXQ7CisgICAgfQorfQorCithdXRvIFN0cmVhbWluZ1BhcnNlcjo6ZmluYWxpemUo
KSAtPiBTdGF0ZQoreworICAgIGFkZEJ5dGVzKG51bGxwdHIsIDAsIElzRW5kT2ZTdHJlYW06Olll
cyk7CisgICAgaWYgKG1fcmVtYWluaW5nLnNpemUoKSA9PSAwICYmIG1fc3RhdGUgPT0gU3RhdGU6
OlNlY3Rpb25IZWFkZXIpCisgICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6RmluaXNoZWQ7CisgICAg
ZWxzZQorICAgICAgICBtX3N0YXRlID0gU3RhdGU6OkZhdGFsRXJyb3I7CisgICAgcmV0dXJuIG1f
c3RhdGU7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFC
TEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtU3RyZWFtaW5nUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU3Ry
ZWFtaW5nUGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzQyOTlkNDczNTNlN2EwNmIzMmRmMGY0MTc2MjZh
MWYyZjcwYWMxNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21TdHJlYW1pbmdQYXJzZXIuaApAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxOCBZdXN1a2UgU3V6dWtpIDx5dXN1a2VzdXp1a2lAc2xvd3N0YXJ0Lm9yZz4uCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiV2FzbU1vZHVsZUluZm9ybWF0
aW9uLmgiCisjaW5jbHVkZSAiV2FzbVNlY3Rpb25zLmgiCisjaW5jbHVkZSA8d3RmL0V4cGVjdGVk
Lmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIFdhc20geworCitjbGFzcyBTdHJlYW1pbmdQYXJzZXJDbGllbnQgeworfTsKKworY2xhc3Mg
U3RyZWFtaW5nUGFyc2VyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICBlbnVtIGNsYXNzIFN0YXRlIDogdWludDhfdCB7CisgICAgICAgIE1vZHVsZUhlYWRlciwK
KyAgICAgICAgU2VjdGlvbkhlYWRlciwKKyAgICAgICAgU2VjdGlvblNpemUsCisgICAgICAgIFNl
Y3Rpb25Cb2R5LAorICAgICAgICBDb2RlU2VjdGlvblNpemUsCisgICAgICAgIEZ1bmN0aW9uSGVh
ZGVyLAorICAgICAgICBGdW5jdGlvbkJvZHksCisgICAgICAgIEZpbmlzaGVkLAorICAgICAgICBG
YXRhbEVycm9yLAorICAgIH07CisKKyAgICBlbnVtIGNsYXNzIElzRW5kT2ZTdHJlYW0geyBZZXMs
IE5vIH07CisKKyAgICBTdHJlYW1pbmdQYXJzZXIoTW9kdWxlSW5mb3JtYXRpb24mKTsKKworICAg
IFN0YXRlIGFkZEJ5dGVzKGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoKSB7IHJl
dHVybiBhZGRCeXRlcyhieXRlcywgbGVuZ3RoLCBJc0VuZE9mU3RyZWFtOjpObyk7IH0KKyAgICBT
dGF0ZSBmaW5hbGl6ZSgpOworCitwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgbW9kdWxlSGVhZGVyU2l6ZSA9IDg7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBz
ZWN0aW9uSGVhZGVyU2l6ZSA9IDE7CisKKyAgICBTdGF0ZSBhZGRCeXRlcyhjb25zdCB1aW50OF90
KiBieXRlcywgc2l6ZV90IGxlbmd0aCwgSXNFbmRPZlN0cmVhbSk7CisKKyAgICBTdGF0ZSBwYXJz
ZU1vZHVsZUhlYWRlcihWZWN0b3I8dWludDhfdD4mJik7CisgICAgU3RhdGUgcGFyc2VTZWN0aW9u
SGVhZGVyKFZlY3Rvcjx1aW50OF90PiYmKTsKKyAgICBTdGF0ZSBwYXJzZVNlY3Rpb25TaXplKHVp
bnQzMl90KTsKKyAgICBTdGF0ZSBwYXJzZVNlY3Rpb25Cb2R5KFZlY3Rvcjx1aW50OF90PiYmKTsK
KworICAgIFN0YXRlIHBhcnNlQ29kZVNlY3Rpb25TaXplKHVpbnQzMl90KTsKKyAgICBTdGF0ZSBw
YXJzZUZ1bmN0aW9uSGVhZGVyKHVpbnQzMl90KTsKKyAgICBTdGF0ZSBwYXJzZUZ1bmN0aW9uQm9k
eShWZWN0b3I8dWludDhfdD4mJik7CisKKworICAgIEV4cGVjdGVkPFZlY3Rvcjx1aW50OF90Piwg
U3RhdGU+IGNvbnN1bWUoY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCwgc2l6ZV90Jiwgc2l6
ZV90KTsKKyAgICBFeHBlY3RlZDx1aW50MzJfdCwgU3RhdGU+IGNvbnN1bWVWYXJVSW50MzIoY29u
c3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCwgc2l6ZV90JiwgSXNFbmRPZlN0cmVhbSk7CisKKyAg
ICBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IG1faW5mbzsKKyAgICBWZWN0b3I8dWludDhfdD4gbV9y
ZW1haW5pbmc7CisgICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlOworCisgICAgc2l6ZV90IG1fb2Zm
c2V0IHsgMCB9OworICAgIHNpemVfdCBtX25leHRPZmZzZXQgeyAwIH07CisgICAgc2l6ZV90IG1f
Y29kZU9mZnNldCB7IDAgfTsKKworICAgIHVpbnQzMl90IG1fdmVyc2lvbk51bWJlciB7IDAgfTsK
KyAgICB1aW50MzJfdCBtX3NlY3Rpb25MZW5ndGggeyAwIH07CisKKyAgICB1aW50MzJfdCBtX2Z1
bmN0aW9uQ291bnQgeyAwIH07CisgICAgdWludDMyX3QgbV9mdW5jdGlvbkluZGV4IHsgMCB9Owor
CisgICAgdWludDMyX3QgbV9mdW5jdGlvblNpemUgeyAwIH07CisKKyAgICBTdGF0ZSBtX3N0YXRl
IHsgU3RhdGU6Ok1vZHVsZUhlYWRlciB9OworICAgIFNlY3Rpb24gbV9zZWN0aW9uIHsgU2VjdGlv
bjo6QmVnaW4gfTsKKyAgICBTZWN0aW9uIG1fcHJldmlvdXNLbm93blNlY3Rpb24geyBTZWN0aW9u
OjpCZWdpbiB9OworfTsKKworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYg
Ly8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9K
U1Rlc3RzL0NoYW5nZUxvZwppbmRleCBhMTlhYjU3YzE5ZmVlNTU5NDU1NTgzMzk2MGY2YTI2MGY4
YTMxNzU0Li40MTc4ZDk4OWE0YjdmYmVjZTFmYjM5YTJlMjYyOThhYzQ4Y2FiY2RmIDEwMDY0NAot
LS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDM1IEBACisyMDE4LTA4LTI2ICBZdXN1a2UgU3V6dWtpICA8eXVzdWtlc3V6dWtpQHNsb3dzdGFy
dC5vcmc+CisKKyAgICAgICAgW1dlYkFzc2VtYmx5XSBQYXJzZSB3YXNtIG1vZHVsZXMgaW4gYSBz
dHJlYW1pbmcgZmFzaGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTg4OTQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiB3YXNtL2Z1bmN0aW9uLXRlc3RzL2ludmFsaWQtZHVwbGljYXRlLWV4cG9ydC5q
czoKKyAgICAgICAgKiB3YXNtL2Z1bmN0aW9uLXRlc3RzL21lbW9yeS1hbGlnbm1lbnQuanM6Cisg
ICAgICAgIChjb25zdC5vcC5vZi5XQVNNLm9wY29kZXMpOgorICAgICAgICAqIHdhc20vZnVuY3Rp
b24tdGVzdHMvbWVtb3J5LXNlY3Rpb24tYW5kLWltcG9ydC5qczoKKyAgICAgICAgKiB3YXNtL2Z1
bmN0aW9uLXRlc3RzL3ZvaWQtYXJndW1lbnQtdHlwZS1zaG91bGQtYmUtYS12YWxpZGF0aW9uLWVy
cm9yLmpzOgorICAgICAgICAqIHdhc20vanMtYXBpL01vZHVsZS1jb21waWxlLmpzOgorICAgICAg
ICAoYXN5bmMudGVzdFByb21pc2VBUEkpOgorICAgICAgICAqIHdhc20vanMtYXBpL2VsZW1lbnQu
anM6CisgICAgICAgIChhc3NlcnQudGhyb3dzLm5ldy5XZWJBc3NlbWJseS5Nb2R1bGUuYnVpbGRl
ci5XZWJBc3NlbWJseSk6CisgICAgICAgIChhc3NlcnQudGhyb3dzKToKKyAgICAgICAgKiB3YXNt
L2pzLWFwaS9nbG9iYWwtZXJyb3IuanM6CisgICAgICAgIChhc3NlcnQudGhyb3dzLm5ldy5XZWJB
c3NlbWJseS5Nb2R1bGUuYmluKToKKyAgICAgICAgKGFzc2VydC50aHJvd3MpOgorICAgICAgICAq
IHdhc20vanMtYXBpL3RhYmxlLmpzOgorICAgICAgICAobmV3LldlYkFzc2VtYmx5Lk1vZHVsZSk6
CisgICAgICAgIChhc3NlcnQudGhyb3dzKToKKyAgICAgICAgKGFzc2VydEJhZFRhYmxlSW1wb3J0
KToKKyAgICAgICAgKiB3YXNtL2pzLWFwaS90ZXN0X0RhdGEuanM6CisgICAgICAgIChEYXRhU2Vj
dGlvbldpdGhvdXRNZW1vcnkpOgorICAgICAgICAqIHdhc20vanMtYXBpL3Rlc3RfU3RhcnQuanM6
CisgICAgICAgIChJbnZhbGlkU3RhcnRGdW5jdGlvbkluZGV4KToKKyAgICAgICAgKiB3YXNtL2pz
LWFwaS90ZXN0X2Jhc2ljX2FwaS5qczoKKyAgICAgICAgKGNvbnN0LmMuaW4uY29uc3RydWN0b3JQ
cm9wZXJ0aWVzLnN3aXRjaCk6CisgICAgICAgICogd2FzbS9qcy1hcGkvdmVyc2lvbi5qczoKKwog
MjAxOC0wOC0yMiAgU2FhbSBiYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBN
YWtlIGRhdGEtdmlldy1hY2Nlc3MuanMgcnVuIGxlc3MgdGltZSB0byBwcmV2ZW50IHRpbWVvdXRz
IG9uIDMyLWJpdApkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL2ludmFs
aWQtZHVwbGljYXRlLWV4cG9ydC5qcyBiL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9pbnZh
bGlkLWR1cGxpY2F0ZS1leHBvcnQuanMKaW5kZXggYzQ3YjFlMTY2MmMyY2I2MGM5M2Q2YzliOTU3
MzliZGFiYTc4MGU3My4uNDE4ZDUxYWE0OTkwMTlhYTI0NjliYWE1ZjFmZDhlMWFiZDNiZjI5MSAx
MDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL2ludmFsaWQtZHVwbGljYXRl
LWV4cG9ydC5qcworKysgYi9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvaW52YWxpZC1kdXBs
aWNhdGUtZXhwb3J0LmpzCkBAIC0xNSw1ICsxNSw1IEBACiAgICAgICAgIC5FbmQoKTsKIAogICAg
IGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKLSAgICBhc3NlcnQudGhy
b3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKSwgV2ViQXNzZW1ibHkuQ29tcGls
ZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzMSAvIDM5
OiBkdXBsaWNhdGUgZXhwb3J0OiAnZm9vJyIpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3
IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJB
c3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDMxOiBkdXBsaWNhdGUgZXhwb3J0
OiAnZm9vJyIpOwogfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL21l
bW9yeS1hbGlnbm1lbnQuanMgYi9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LWFs
aWdubWVudC5qcwppbmRleCBhYmM1NzQxMjE0NmYyZTM5NzI2MWU3MzI2ZWNjOGE1YzgxOWEwNDlj
Li5lNjA1ODk4OTAwYWExYmVkNjdiOWQzMmFjNmYyYWEwMTJlYjI5OWVlIDEwMDY0NAotLS0gYS9K
U1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LWFsaWdubWVudC5qcworKysgYi9KU1Rl
c3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LWFsaWdubWVudC5qcwpAQCAtNDIsNyArNDIs
NyBAQAogICAgICAgICBpZiAoYWxpZ25Mb2cyIDw9IG1heEFsaWduTG9nMikKICAgICAgICAgICAg
IGluc3RhbmNlKCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFzc2VydC50aHJvd3MoaW5z
dGFuY2UsIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgYFdlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vz
bid0IHBhcnNlIGF0IGJ5dGUgJHtzdGFydH0gLyAke2VuZH06IGJ5dGUgYWxpZ25tZW50ICR7MSA8
PCBhbGlnbkxvZzJ9IGV4Y2VlZHMgJHtpbmZvLnR5cGV9J3MgbmF0dXJhbCBhbGlnbm1lbnQgJHsx
IDw8IG1heEFsaWduTG9nMn0sIGluIGZ1bmN0aW9uIGF0IGluZGV4IDBgKTsKKyAgICAgICAgICAg
IGFzc2VydC50aHJvd3MoaW5zdGFuY2UsIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgYFdlYkFz
c2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgJHtzdGFydH06IGJ5dGUgYWxpZ25t
ZW50ICR7MSA8PCBhbGlnbkxvZzJ9IGV4Y2VlZHMgJHtpbmZvLnR5cGV9J3MgbmF0dXJhbCBhbGln
bm1lbnQgJHsxIDw8IG1heEFsaWduTG9nMn0sIGluIGZ1bmN0aW9uIGF0IGluZGV4IDBgKTsKIAog
ICAgIH0KIH0KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9tZW1vcnkt
c2VjdGlvbi1hbmQtaW1wb3J0LmpzIGIvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL21lbW9y
eS1zZWN0aW9uLWFuZC1pbXBvcnQuanMKaW5kZXggYTFkYjljZTI1Nzc5MzUwYjViZDU1NzdmNzY3
ZTY2Nzc3NGJkOGIwYi4uMTUyMDdlZjcxODhlZmEwZjY5MjM1NzNjMWRmZWE1YTNlYTViNzFmZiAx
MDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL21lbW9yeS1zZWN0aW9uLWFu
ZC1pbXBvcnQuanMKKysrIGIvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL21lbW9yeS1zZWN0
aW9uLWFuZC1pbXBvcnQuanMKQEAgLTI4LDQgKzI4LDQgQEAKICAgICAgIC5Db2RlKCkuRW5kKCk7
CiAKIGNvbnN0IGkwID0gaW5zdGFudGlhdGUoYnVpbGRlcjApOwotYXNzZXJ0LnRocm93cygoKSA9
PiBpbnN0YW50aWF0ZShidWlsZGVyMSwgeyBpbXA6IHsgbWVtb3J5OiBpMC5leHBvcnRzLm1lbW9y
eSB9IH0pLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsIGBXZWJBc3NlbWJseS5Nb2R1bGUgZG9l
c24ndCBwYXJzZSBhdCBieXRlIDM1IC8gNDE6IHRoZXJlIGNhbiBhdCBtb3N0IGJlIG9uZSBNZW1v
cnkgc2VjdGlvbiBmb3Igbm93YCk7Cithc3NlcnQudGhyb3dzKCgpID0+IGluc3RhbnRpYXRlKGJ1
aWxkZXIxLCB7IGltcDogeyBtZW1vcnk6IGkwLmV4cG9ydHMubWVtb3J5IH0gfSksIFdlYkFzc2Vt
Ymx5LkNvbXBpbGVFcnJvciwgYFdlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5
dGUgMzU6IHRoZXJlIGNhbiBhdCBtb3N0IGJlIG9uZSBNZW1vcnkgc2VjdGlvbiBmb3Igbm93YCk7
CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvdm9pZC1hcmd1bWVudC10
eXBlLXNob3VsZC1iZS1hLXZhbGlkYXRpb24tZXJyb3IuanMgYi9KU1Rlc3RzL3dhc20vZnVuY3Rp
b24tdGVzdHMvdm9pZC1hcmd1bWVudC10eXBlLXNob3VsZC1iZS1hLXZhbGlkYXRpb24tZXJyb3Iu
anMKaW5kZXggNDcxNDliMWQ3ZmI5MzIzMWMyNWQwNzhhODYyOThiNzUwMmJmZjY4YS4uMjE3ODgx
MGE3ODE3ZDk3MzM1ZTYyZjc4YjNmYzUxN2UzZmU3N2U0MSAxMDA2NDQKLS0tIGEvSlNUZXN0cy93
YXNtL2Z1bmN0aW9uLXRlc3RzL3ZvaWQtYXJndW1lbnQtdHlwZS1zaG91bGQtYmUtYS12YWxpZGF0
aW9uLWVycm9yLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy92b2lkLWFyZ3Vt
ZW50LXR5cGUtc2hvdWxkLWJlLWEtdmFsaWRhdGlvbi1lcnJvci5qcwpAQCAtMTcsNiArMTcsNiBA
QCBmdW5jdGlvbiBnZXRCaW5hcnkocGFyYW1zKSB7CiAgICAgcmV0dXJuIGJ1aWxkZXIuV2ViQXNz
ZW1ibHkoKS5nZXQoKTsKIH0KIAotYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHku
TW9kdWxlKGdldEJpbmFyeShbImkzMiIsICJ2b2lkIl0pKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVy
cm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxNSAvIDQ3OiBj
YW4ndCBnZXQgMXRoIGFyZ3VtZW50IFR5cGUiKTsKLWFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdl
YkFzc2VtYmx5Lk1vZHVsZShnZXRCaW5hcnkoWyJ2b2lkIl0pKSwgV2ViQXNzZW1ibHkuQ29tcGls
ZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxNCAvIDQ2
OiBjYW4ndCBnZXQgMHRoIGFyZ3VtZW50IFR5cGUiKTsKLWFzc2VydC50aHJvd3MoKCkgPT4gbmV3
IFdlYkFzc2VtYmx5Lk1vZHVsZShnZXRCaW5hcnkoWyJpMzIiLCAidm9pZCIsICJpMzIiXSkpLCBX
ZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJz
ZSBhdCBieXRlIDE1IC8gNDg6IGNhbid0IGdldCAxdGggYXJndW1lbnQgVHlwZSIpOworYXNzZXJ0
LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGdldEJpbmFyeShbImkzMiIsICJ2
b2lkIl0pKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRv
ZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxNTogY2FuJ3QgZ2V0IDF0aCBhcmd1bWVudCBUeXBlIik7Cith
c3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoZ2V0QmluYXJ5KFsidm9p
ZCJdKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vz
bid0IHBhcnNlIGF0IGJ5dGUgMTQ6IGNhbid0IGdldCAwdGggYXJndW1lbnQgVHlwZSIpOworYXNz
ZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGdldEJpbmFyeShbImkzMiIs
ICJ2b2lkIiwgImkzMiJdKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5
Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTU6IGNhbid0IGdldCAxdGggYXJndW1lbnQg
VHlwZSIpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS9Nb2R1bGUtY29tcGlsZS5q
cyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvTW9kdWxlLWNvbXBpbGUuanMKaW5kZXggZDNiZWIzMzI1
NzdhZWRiMDU4YzhlNDFkMjNhZGRhOWM5MWYxZGY3OC4uZDcyM2JmNGQ3MGI0OWM0OWExMzY1ZmRj
NjdiNDUyNDJiMzgyNzJlNiAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2pzLWFwaS9Nb2R1bGUt
Y29tcGlsZS5qcworKysgYi9KU1Rlc3RzL3dhc20vanMtYXBpL01vZHVsZS1jb21waWxlLmpzCkBA
IC0yMSw3ICsyMSw3IEBAIGFzeW5jIGZ1bmN0aW9uIHRlc3RQcm9taXNlQVBJKCkgewogICAgICAg
ICAgICAgYXdhaXQgV2ViQXNzZW1ibHkuY29tcGlsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0
KCkpOwogICAgICAgICB9IGNhdGNoKGUpIHsKICAgICAgICAgICAgIGFzc2VydC50cnV0aHkoZSBp
bnN0YW5jZW9mIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvcik7Ci0gICAgICAgICAgICBhc3NlcnQu
dHJ1dGh5KGUubWVzc2FnZSA9PT0gIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0
IGJ5dGUgMzQgLyA0MzogdGhlcmUgY2FuIGF0IG1vc3QgYmUgb25lIE1lbW9yeSBzZWN0aW9uIGZv
ciBub3ciKTsKKyAgICAgICAgICAgIGFzc2VydC50cnV0aHkoZS5tZXNzYWdlID09PSAiV2ViQXNz
ZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzNDogdGhlcmUgY2FuIGF0IG1vc3Qg
YmUgb25lIE1lbW9yeSBzZWN0aW9uIGZvciBub3ciKTsKICAgICAgICAgfQogICAgIH0KIApkaWZm
IC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS9lbGVtZW50LmpzIGIvSlNUZXN0cy93YXNtL2pz
LWFwaS9lbGVtZW50LmpzCmluZGV4IDE4OGFjNzQxNTExMjYwNDhiODI3MjQ4ZGM0NzM4MjA1YWE4
NmExNDkuLmZjYmUyODI3ZjM3MTY2M2FhODRmZGY1YzEwMTAwYjgxNzgxNzczOTAgMTAwNjQ0Ci0t
LSBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvZWxlbWVudC5qcworKysgYi9KU1Rlc3RzL3dhc20vanMt
YXBpL2VsZW1lbnQuanMKQEAgLTE4LDcgKzE4LDcgQEAKICAgICAgICAgICAgIC5FbmQoKQogICAg
ICAgICAuRW5kKCk7CiAKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5N
b2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVy
cm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNCAvIDQxOiBF
bGVtZW50IHNlY3Rpb24gZm9yIFRhYmxlIDAgZXhjZWVkcyBhdmFpbGFibGUgVGFibGUgMCIpOwor
ICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldl
YkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJs
eS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI0OiBFbGVtZW50IHNlY3Rpb24gZm9yIFRh
YmxlIDAgZXhjZWVkcyBhdmFpbGFibGUgVGFibGUgMCIpOwogfQogCiB7CkBAIC00MSw3ICs0MSw3
IEBACiAgICAgICAgICAgICAuRW5kKCkKICAgICAgICAgLkVuZCgpOwogCi0gICAgYXNzZXJ0LnRo
cm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5n
ZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vz
bid0IHBhcnNlIGF0IGJ5dGUgMzAgLyA0NzogRWxlbWVudCBzZWN0aW9uIGZvciBUYWJsZSAxIGV4
Y2VlZHMgYXZhaWxhYmxlIFRhYmxlIDEiKTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBX
ZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwgV2ViQXNzZW1i
bHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0
ZSAzMDogRWxlbWVudCBzZWN0aW9uIGZvciBUYWJsZSAxIGV4Y2VlZHMgYXZhaWxhYmxlIFRhYmxl
IDEiKTsKIH0KIAogewpAQCAtMTEyLDcgKzExMiw3IEBACiAgICAgICAgICAgICAuRW5kKCkKICAg
ICAgICAgLkVuZCgpOwogCi0gICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHku
TW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVF
cnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzggLyA1MDog
RWxlbWVudCBzZWN0aW9uJ3MgMHRoIGVsZW1lbnQncyAydGggaW5kZXggaXMgMSB3aGljaCBleGNl
ZWRzIHRoZSBmdW5jdGlvbiBpbmRleCBzcGFjZSBzaXplIG9mIDEgKGV2YWx1YXRpbmcgJ25ldyBX
ZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIik7CisgICAg
YXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNz
ZW1ibHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1v
ZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzg6IEVsZW1lbnQgc2VjdGlvbidzIDB0aCBlbGVt
ZW50J3MgMnRoIGluZGV4IGlzIDEgd2hpY2ggZXhjZWVkcyB0aGUgZnVuY3Rpb24gaW5kZXggc3Bh
Y2Ugc2l6ZSBvZiAxIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIu
V2ViQXNzZW1ibHkoKS5nZXQoKSknKSIpOwogfQogCiB7CkBAIC0yMTUsNSArMjE1LDUgQEAgZnVu
Y3Rpb24gYmFkTW9kdWxlKCkgewogICAgICAgICByZXR1cm4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVs
ZShiaW4pOwogICAgIH0KIAotICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYmFkTW9kdWxlKCksIFdl
YkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNl
IGF0IGJ5dGUgNTggLyA3MjogRWxlbWVudCBpbml0X2V4cHIgbXVzdCBwcm9kdWNlIGFuIGkzMiIp
OworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYmFkTW9kdWxlKCksIFdlYkFzc2VtYmx5LkNvbXBp
bGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgNTg6IEVs
ZW1lbnQgaW5pdF9leHByIG11c3QgcHJvZHVjZSBhbiBpMzIiKTsKIH0KZGlmZiAtLWdpdCBhL0pT
VGVzdHMvd2FzbS9qcy1hcGkvZ2xvYmFsLWVycm9yLmpzIGIvSlNUZXN0cy93YXNtL2pzLWFwaS9n
bG9iYWwtZXJyb3IuanMKaW5kZXggMDlmOGQ3OTlkYzRlMmYzOWQ5YTU0MzAyY2FhYmRlN2E3NmQ1
MTA3Yi4uZDNlZGY4OThlN2Q5ZmEwN2U0NzBjZmMzMmM2YWIzNmYxNzMxYjUxMyAxMDA2NDQKLS0t
IGEvSlNUZXN0cy93YXNtL2pzLWFwaS9nbG9iYWwtZXJyb3IuanMKKysrIGIvSlNUZXN0cy93YXNt
L2pzLWFwaS9nbG9iYWwtZXJyb3IuanMKQEAgLTIzLDcgKzIzLDcgQEAKICAgICBjb25zdCBiaW4g
PSBidWlsZGVyLldlYkFzc2VtYmx5KCk7CiAgICAgYmluLnRyaW0oKTsKIAotICAgIGFzc2VydC50
aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4uZ2V0KCkpLCBXZWJBc3NlbWJs
eS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRl
IDI2IC8gNTk6IGdldF9nbG9iYWwncyBpbmRleCAwIGV4Y2VlZHMgdGhlIG51bWJlciBvZiBnbG9i
YWxzIDAgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKScpIik7
CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbi5nZXQo
KSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0
IHBhcnNlIGF0IGJ5dGUgMjY6IGdldF9nbG9iYWwncyBpbmRleCAwIGV4Y2VlZHMgdGhlIG51bWJl
ciBvZiBnbG9iYWxzIDAgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdl
dCgpKScpIik7CiB9CiAKIApAQCAtNTIsNyArNTIsNyBAQAogICAgIGNvbnN0IGJpbiA9IGJ1aWxk
ZXIuV2ViQXNzZW1ibHkoKTsKICAgICBiaW4udHJpbSgpOwogCi0gICAgYXNzZXJ0LnRocm93cygo
KSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbi5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBp
bGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzIgLyA3
NjogTXV0YWJsZSBHbG9iYWxzIGFyZW4ndCBzdXBwb3J0ZWQgKGV2YWx1YXRpbmcgJ25ldyBXZWJB
c3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKScpIik7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBu
ZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbi5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJv
ciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzI6IE11dGFibGUg
R2xvYmFscyBhcmVuJ3Qgc3VwcG9ydGVkIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9k
dWxlKGJpbi5nZXQoKSknKSIpOwogfQogCiB7CkBAIC03Nyw3ICs3Nyw3IEBACiAgICAgY29uc3Qg
YmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpOwogICAgIGJpbi50cmltKCk7CiAKLSAgICBhc3Nl
cnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKSwgV2ViQXNz
ZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQg
Ynl0ZSA1MSAvIDU5OiAxdGggRXhwb3J0IGlzbid0IGltbXV0YWJsZSwgbmFtZWQgJ2dsb2JhbCcg
KGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKScpIik7CisgICAg
YXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbi5nZXQoKSksIFdl
YkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNl
IGF0IGJ5dGUgNTE6IDF0aCBFeHBvcnQgaXNuJ3QgaW1tdXRhYmxlLCBuYW1lZCAnZ2xvYmFsJyAo
ZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4uZ2V0KCkpJykiKTsKIH0KIAog
ewpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS90YWJsZS5qcyBiL0pTVGVzdHMvd2Fz
bS9qcy1hcGkvdGFibGUuanMKaW5kZXggYjgzMmUxMTc2NjQxMzAyMzBmYzgwYmZiMTMwYzEzNjZh
MzEyZTMyNS4uY2Y2OGI0NDA0OTVmNmJlNmY4YjI3OTQ3NzEyNDU2ZDdjYTdjOGM2ZiAxMDA2NDQK
LS0tIGEvSlNUZXN0cy93YXNtL2pzLWFwaS90YWJsZS5qcworKysgYi9KU1Rlc3RzL3dhc20vanMt
YXBpL3RhYmxlLmpzCkBAIC0xMyw3ICsxMyw3IEBACiAgICAgICAgIC5FbmQoKQogICAgICAgICAu
Q29kZSgpCiAgICAgICAgIC5FbmQoKTsKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJB
c3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwgV2ViQXNzZW1ibHku
Q29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAz
NCAvIDQxOiBDYW5ub3QgaGF2ZSBtb3JlIHRoYW4gb25lIFRhYmxlIGZvciBub3ciKTsKKyAgICBh
c3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3Nl
bWJseSgpLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9k
dWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzNDogQ2Fubm90IGhhdmUgbW9yZSB0aGFuIG9uZSBU
YWJsZSBmb3Igbm93Iik7CiB9CiAKIHsKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgLkVuZCgp
CiAgICAgICAgIC5Db2RlKCkKICAgICAgICAgLkVuZCgpOwotICAgIGFzc2VydC50aHJvd3MoKCkg
PT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBX
ZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJz
ZSBhdCBieXRlIDE3IC8gMjg6IFRhYmxlIGNvdW50IG9mIDIgaXMgaW52YWxpZCwgYXQgbW9zdCAx
IGlzIGFsbG93ZWQgZm9yIG5vdyAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShi
dWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiKTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+
IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwgV2Vi
QXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2Ug
YXQgYnl0ZSAxNzogVGFibGUgY291bnQgb2YgMiBpcyBpbnZhbGlkLCBhdCBtb3N0IDEgaXMgYWxs
b3dlZCBmb3Igbm93IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIu
V2ViQXNzZW1ibHkoKS5nZXQoKSknKSIpOwogfQogCiB7CkBAIC01NCw3ICs1NCw3IEBACiAgICAg
ICAgICAgICAgICAgLkNhbGxJbmRpcmVjdCgwLCAwKQogICAgICAgICAgICAgLkVuZCgpCiAgICAg
ICAgIC5FbmQoKTsKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1
bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9y
LCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSA0IC8gNzogY2FsbF9p
bmRpcmVjdCBpcyBvbmx5IHZhbGlkIHdoZW4gYSB0YWJsZSBpcyBkZWZpbmVkIG9yIGltcG9ydGVk
LCBpbiBmdW5jdGlvbiBhdCBpbmRleCAwIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9k
dWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIpOworICAgIGFzc2VydC50aHJvd3Mo
KCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkp
LCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBw
YXJzZSBhdCBieXRlIDQ6IGNhbGxfaW5kaXJlY3QgaXMgb25seSB2YWxpZCB3aGVuIGEgdGFibGUg
aXMgZGVmaW5lZCBvciBpbXBvcnRlZCwgaW4gZnVuY3Rpb24gYXQgaW5kZXggMCAoZXZhbHVhdGlu
ZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJyki
KTsKIH0KIAogewpAQCAtNzMsNyArNzMsNyBAQAogICAgICAgICAgICAgICAgIC5DYWxsSW5kaXJl
Y3QoMCwgMSkKICAgICAgICAgICAgIC5FbmQoKQogICAgICAgICAuRW5kKCk7Ci0gICAgYXNzZXJ0
LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHko
KS5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBk
b2Vzbid0IHBhcnNlIGF0IGJ5dGUgNiAvIDc6IGNhbGxfaW5kaXJlY3QncyAncmVzZXJ2ZWQnIHZh
cnVpbnQxIG11c3QgYmUgMHgwLCBpbiBmdW5jdGlvbiBhdCBpbmRleCAwIChldmFsdWF0aW5nICdu
ZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIpOwor
ICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldl
YkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJs
eS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDY6IGNhbGxfaW5kaXJlY3QncyAncmVzZXJ2
ZWQnIHZhcnVpbnQxIG11c3QgYmUgMHgwLCBpbiBmdW5jdGlvbiBhdCBpbmRleCAwIChldmFsdWF0
aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSkn
KSIpOwogfQogCiB7CkBAIC04Niw3ICs4Niw3IEBACiAgICAgICAgIC5FbmQoKQogICAgICAgICAu
Q29kZSgpCiAgICAgICAgIC5FbmQoKTsKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJB
c3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwgV2ViQXNzZW1ibHku
Q29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAy
MyAvIDI2OiBjYW4ndCBleHBvcnQgVGFibGUgMCB0aGVyZSBhcmUgMCBUYWJsZXMiKTsKKyAgICBh
c3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3Nl
bWJseSgpLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9k
dWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyMzogY2FuJ3QgZXhwb3J0IFRhYmxlIDAgdGhlcmUg
YXJlIDAgVGFibGVzIik7CiB9CiAKIHsKQEAgLTEwMiw3ICsxMDIsNyBAQAogICAgICAgICAuRW5k
KCkKICAgICAgICAgLkNvZGUoKQogICAgICAgICAuRW5kKCk7Ci0gICAgYXNzZXJ0LnRocm93cygo
KSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSks
IFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBh
cnNlIGF0IGJ5dGUgMzAgLyAzMzogY2FuJ3QgZXhwb3J0IFRhYmxlIDEgdGhlcmUgYXJlIDEgVGFi
bGVzIik7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1
aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldl
YkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzA6IGNhbid0IGV4cG9ydCBU
YWJsZSAxIHRoZXJlIGFyZSAxIFRhYmxlcyIpOwogfQogCiBmdW5jdGlvbiBhc3NlcnRCYWRUYWJs
ZSh0YWJsZURlc2NyaXB0aW9uLCBtZXNzYWdlKSB7CkBAIC0xMzIsNDIgKzEzMiw0MiBAQCBmdW5j
dGlvbiBhc3NlcnRCYWRUYWJsZUltcG9ydCh0YWJsZURlc2NyaXB0aW9uLCBtZXNzYWdlKSB7CiB7
CiAgICAgbGV0IGJhZERlc2NyaXB0aW9ucyA9IFsKICAgICAgICAgW3tpbml0aWFsOiAxMCwgZWxl
bWVudDogImkzMiJ9LAotICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNl
IGF0IGJ5dGUgMTggLyAyMzogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC0xIChl
dmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5n
ZXQoKSknKSIsCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQg
Ynl0ZSAyNiAvIDM0OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTEgKGV2YWx1
YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgp
KScpIl0sCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0
ZSAxODogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC0xIChldmFsdWF0aW5nICdu
ZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCisg
ICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNjogVGFi
bGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC0xIChldmFsdWF0aW5nICduZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAogICAgICAgICBb
e2luaXRpYWw6IDEwLCBlbGVtZW50OiAiZjMyIn0sCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9k
dWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxOCAvIDIzOiBUYWJsZSB0eXBlIHNob3VsZCBiZSBh
bnlmdW5jLCBnb3QgLTMgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRl
ci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKLSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUg
ZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2IC8gMzQ6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1
bmMsIGdvdCAtMyAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldl
YkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9l
c24ndCBwYXJzZSBhdCBieXRlIDE4OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3Qg
LTMgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJs
eSgpLmdldCgpKScpIiwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJz
ZSBhdCBieXRlIDI2OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTMgKGV2YWx1
YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgp
KScpIl0sCiAgICAgICAgIFt7aW5pdGlhbDogMTAsIGVsZW1lbnQ6ICJmNjQifSwKLSAgICAgICAg
ICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE4IC8gMjM6IFRhYmxl
IHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtNCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2Vt
Ymx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAotICAgICAgICAgIldl
YkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjYgLyAzNDogVGFibGUgdHlw
ZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC00IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHku
TW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAorICAgICAgICAgIldlYkFz
c2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTg6IFRhYmxlIHR5cGUgc2hvdWxk
IGJlIGFueWZ1bmMsIGdvdCAtNCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShi
dWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAorICAgICAgICAgIldlYkFzc2VtYmx5Lk1v
ZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjY6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1
bmMsIGdvdCAtNCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldl
YkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKICAgICAgICAgW3tpbml0aWFsOiAxMCwgZWxlbWVudDog
Imk2NCJ9LAotICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5
dGUgMTggLyAyMzogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC0yIChldmFsdWF0
aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSkn
KSIsCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAy
NiAvIDM0OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTIgKGV2YWx1YXRpbmcg
J25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0s
CisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxODog
VGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC0yIChldmFsdWF0aW5nICduZXcgV2Vi
QXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCisgICAgICAg
ICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNjogVGFibGUgdHlw
ZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC0yIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHku
TW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAogICAgICAgICBbe2luaXRp
YWw6IDEwLCBtYXhpbXVtOiAyMCwgZWxlbWVudDogImkzMiJ9LAotICAgICAgICAgIldlYkFzc2Vt
Ymx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTggLyAyNDogVGFibGUgdHlwZSBzaG91
bGQgYmUgYW55ZnVuYywgZ290IC0xIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxl
KGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCi0gICAgICAgICAiV2ViQXNzZW1ibHku
TW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNiAvIDM1OiBUYWJsZSB0eXBlIHNob3VsZCBi
ZSBhbnlmdW5jLCBnb3QgLTEgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVp
bGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9k
dWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxODogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVu
YywgZ290IC0xIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2Vi
QXNzZW1ibHkoKS5nZXQoKSknKSIsCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNu
J3QgcGFyc2UgYXQgYnl0ZSAyNjogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC0x
IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHko
KS5nZXQoKSknKSJdLAogICAgICAgICBbe2luaXRpYWw6IDEwLCBtYXhpbXVtOiAyMCwgZWxlbWVu
dDogImYzMiJ9LAotICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0
IGJ5dGUgMTggLyAyNDogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC0zIChldmFs
dWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQo
KSknKSIsCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0
ZSAyNiAvIDM1OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTMgKGV2YWx1YXRp
bmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScp
Il0sCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAx
ODogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC0zIChldmFsdWF0aW5nICduZXcg
V2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCisgICAg
ICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNjogVGFibGUg
dHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC0zIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1i
bHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAogICAgICAgICBbe2lu
aXRpYWw6IDEwLCBtYXhpbXVtOiAyMCwgZWxlbWVudDogImY2NCJ9LAotICAgICAgICAgIldlYkFz
c2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTggLyAyNDogVGFibGUgdHlwZSBz
aG91bGQgYmUgYW55ZnVuYywgZ290IC00IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9k
dWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCi0gICAgICAgICAiV2ViQXNzZW1i
bHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNiAvIDM1OiBUYWJsZSB0eXBlIHNob3Vs
ZCBiZSBhbnlmdW5jLCBnb3QgLTQgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUo
YnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCisgICAgICAgICAiV2ViQXNzZW1ibHku
TW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxODogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55
ZnVuYywgZ290IC00IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIu
V2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRv
ZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNjogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290
IC00IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1i
bHkoKS5nZXQoKSknKSJdLAogICAgICAgICBbe2luaXRpYWw6IDEwLCBtYXhpbXVtOiAyMCwgZWxl
bWVudDogImk2NCJ9LAotICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNl
IGF0IGJ5dGUgMTggLyAyNDogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC0yIChl
dmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5n
ZXQoKSknKSIsCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQg
Ynl0ZSAyNiAvIDM1OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTIgKGV2YWx1
YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgp
KScpIl0sCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0
ZSAxODogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC0yIChldmFsdWF0aW5nICdu
ZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCisg
ICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNjogVGFi
bGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC0yIChldmFsdWF0aW5nICduZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAogCiAgICAgICAg
IFt7aW5pdGlhbDogMTAsIG1heGltdW06IDksIGVsZW1lbnQ6ICJhbnlmdW5jIn0sCi0gICAgICAg
ICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyMSAvIDI0OiByZXNp
emFibGUgbGltaXRzIGhhcyBhIGluaXRpYWwgcGFnZSBjb3VudCBvZiAxMCB3aGljaCBpcyBncmVh
dGVyIHRoYW4gaXRzIG1heGltdW0gOSAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVs
ZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAotICAgICAgICAgIldlYkFzc2VtYmx5
Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjkgLyAzNTogcmVzaXphYmxlIGxpbWl0cyBo
YXMgYSBpbml0aWFsIHBhZ2UgY291bnQgb2YgMTAgd2hpY2ggaXMgZ3JlYXRlciB0aGFuIGl0cyBt
YXhpbXVtIDkgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJB
c3NlbWJseSgpLmdldCgpKScpIl0sCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNu
J3QgcGFyc2UgYXQgYnl0ZSAyMTogcmVzaXphYmxlIGxpbWl0cyBoYXMgYSBpbml0aWFsIHBhZ2Ug
Y291bnQgb2YgMTAgd2hpY2ggaXMgZ3JlYXRlciB0aGFuIGl0cyBtYXhpbXVtIDkgKGV2YWx1YXRp
bmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScp
IiwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI5
OiByZXNpemFibGUgbGltaXRzIGhhcyBhIGluaXRpYWwgcGFnZSBjb3VudCBvZiAxMCB3aGljaCBp
cyBncmVhdGVyIHRoYW4gaXRzIG1heGltdW0gOSAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5
Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKICAgICAgICAgW3tpbml0
aWFsOiAxLCBtYXhpbXVtOiAwLCBlbGVtZW50OiAiYW55ZnVuYyJ9LAotICAgICAgICAgIldlYkFz
c2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjEgLyAyNDogcmVzaXphYmxlIGxp
bWl0cyBoYXMgYSBpbml0aWFsIHBhZ2UgY291bnQgb2YgMSB3aGljaCBpcyBncmVhdGVyIHRoYW4g
aXRzIG1heGltdW0gMCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVy
LldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAotICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBk
b2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjkgLyAzNTogcmVzaXphYmxlIGxpbWl0cyBoYXMgYSBpbml0
aWFsIHBhZ2UgY291bnQgb2YgMSB3aGljaCBpcyBncmVhdGVyIHRoYW4gaXRzIG1heGltdW0gMCAo
ZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCku
Z2V0KCkpJykiXSwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBh
dCBieXRlIDIxOiByZXNpemFibGUgbGltaXRzIGhhcyBhIGluaXRpYWwgcGFnZSBjb3VudCBvZiAx
IHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiBpdHMgbWF4aW11bSAwIChldmFsdWF0aW5nICduZXcgV2Vi
QXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCisgICAgICAg
ICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyOTogcmVzaXphYmxl
IGxpbWl0cyBoYXMgYSBpbml0aWFsIHBhZ2UgY291bnQgb2YgMSB3aGljaCBpcyBncmVhdGVyIHRo
YW4gaXRzIG1heGltdW0gMCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWls
ZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKICAgICAgICAgW3tpbml0aWFsOiAyKiozMiAt
IDEsIG1heGltdW06IDIqKjMyIC0gMiwgZWxlbWVudDogImFueWZ1bmMifSwKLSAgICAgICAgICJX
ZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI5IC8gMzI6IHJlc2l6YWJs
ZSBsaW1pdHMgaGFzIGEgaW5pdGlhbCBwYWdlIGNvdW50IG9mIDQyOTQ5NjcyOTUgd2hpY2ggaXMg
Z3JlYXRlciB0aGFuIGl0cyBtYXhpbXVtIDQyOTQ5NjcyOTQgKGV2YWx1YXRpbmcgJ25ldyBXZWJB
c3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKLSAgICAgICAg
ICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDM3IC8gNDM6IHJlc2l6
YWJsZSBsaW1pdHMgaGFzIGEgaW5pdGlhbCBwYWdlIGNvdW50IG9mIDQyOTQ5NjcyOTUgd2hpY2gg
aXMgZ3JlYXRlciB0aGFuIGl0cyBtYXhpbXVtIDQyOTQ5NjcyOTQgKGV2YWx1YXRpbmcgJ25ldyBX
ZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCisgICAg
ICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyOTogcmVzaXph
YmxlIGxpbWl0cyBoYXMgYSBpbml0aWFsIHBhZ2UgY291bnQgb2YgNDI5NDk2NzI5NSB3aGljaCBp
cyBncmVhdGVyIHRoYW4gaXRzIG1heGltdW0gNDI5NDk2NzI5NCAoZXZhbHVhdGluZyAnbmV3IFdl
YkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAorICAgICAg
ICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzc6IHJlc2l6YWJs
ZSBsaW1pdHMgaGFzIGEgaW5pdGlhbCBwYWdlIGNvdW50IG9mIDQyOTQ5NjcyOTUgd2hpY2ggaXMg
Z3JlYXRlciB0aGFuIGl0cyBtYXhpbXVtIDQyOTQ5NjcyOTQgKGV2YWx1YXRpbmcgJ25ldyBXZWJB
c3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCiAgICAgICAg
IFt7aW5pdGlhbDogMioqMzEsIGVsZW1lbnQ6ICJhbnlmdW5jIn0sCi0gICAgICAgICAiV2ViQXNz
ZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNCAvIDI3OiBUYWJsZSdzIGluaXRp
YWwgcGFnZSBjb3VudCBvZiAyMTQ3NDgzNjQ4IGlzIHRvbyBiaWcsIG1heGltdW0gMTAwMDAwMDAg
KGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgp
LmdldCgpKScpIiwKLSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBh
dCBieXRlIDMyIC8gMzg6IFRhYmxlJ3MgaW5pdGlhbCBwYWdlIGNvdW50IG9mIDIxNDc0ODM2NDgg
aXMgdG9vIGJpZywgbWF4aW11bSAxMDAwMDAwMCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5
Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKKyAgICAgICAgICJXZWJB
c3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI0OiBUYWJsZSdzIGluaXRpYWwg
cGFnZSBjb3VudCBvZiAyMTQ3NDgzNjQ4IGlzIHRvbyBiaWcsIG1heGltdW0gMTAwMDAwMDAgKGV2
YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdl
dCgpKScpIiwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBi
eXRlIDMyOiBUYWJsZSdzIGluaXRpYWwgcGFnZSBjb3VudCBvZiAyMTQ3NDgzNjQ4IGlzIHRvbyBi
aWcsIG1heGltdW0gMTAwMDAwMDAgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUo
YnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCiAgICAgXTsKIAogICAgIGZvciAoY29u
c3QgZCBvZiBiYWREZXNjcmlwdGlvbnMpIHsKQEAgLTE4Niw3ICsxODYsNyBAQCBmdW5jdGlvbiBh
c3NlcnRCYWRUYWJsZUltcG9ydCh0YWJsZURlc2NyaXB0aW9uLCBtZXNzYWdlKSB7CiAgICAgICAg
IC5GdW5jdGlvbigpLkVuZCgpCiAgICAgICAgIC5Db2RlKCkKICAgICAgICAgLkVuZCgpOwotICAg
IGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFz
c2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5N
b2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDM5IC8gNDg6IENhbm5vdCBoYXZlIG1vcmUgdGhh
biBvbmUgVGFibGUgZm9yIG5vdyIpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFz
c2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5D
b21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDM5
OiBDYW5ub3QgaGF2ZSBtb3JlIHRoYW4gb25lIFRhYmxlIGZvciBub3ciKTsKIH0KIAogCmRpZmYg
LS1naXQgYS9KU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfRGF0YS5qcyBiL0pTVGVzdHMvd2FzbS9q
cy1hcGkvdGVzdF9EYXRhLmpzCmluZGV4IGNjYTBjZjNiYzQ1ZDBmNGRkMzNiZDljYTU5Nzk4OTU0
ZDJkNDViMTguLjQxNzE0MzUxMjhhMDg0ZDU5NDlkOGZmMmI4YjEyNTcwYjdmMjMzNzUgMTAwNjQ0
Ci0tLSBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9EYXRhLmpzCisrKyBiL0pTVGVzdHMvd2Fz
bS9qcy1hcGkvdGVzdF9EYXRhLmpzCkBAIC01Miw3ICs1Miw3IEBACiAgICAgICAgICAgLlNlZ21l
bnQoWzB4ZmZdKS5PZmZzZXQoMCkuRW5kKCkKICAgICAgICAgLkVuZCgpOwogICAgIGNvbnN0IGJp
biA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+
IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCBg
V2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxNSAvIDIwOiAwdGggRGF0
YSBzZWdtZW50IGhhcyBpbmRleCAwIHdoaWNoIGV4Y2VlZHMgdGhlIG51bWJlciBvZiBNZW1vcmll
cyAwYCk7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJp
biksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgYFdlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0
IHBhcnNlIGF0IGJ5dGUgMTU6IDB0aCBEYXRhIHNlZ21lbnQgaGFzIGluZGV4IDAgd2hpY2ggZXhj
ZWVkcyB0aGUgbnVtYmVyIG9mIE1lbW9yaWVzIDBgKTsKIH0pKCk7CiAKIChmdW5jdGlvbiBFbXB0
eURhdGFTZWN0aW9uV2l0aG91dE1lbW9yeSgpIHsKQEAgLTYyLDcgKzYyLDcgQEAKICAgICAgICAg
ICAuU2VnbWVudChbXSkuT2Zmc2V0KDApLkVuZCgpCiAgICAgICAgIC5FbmQoKTsKICAgICBjb25z
dCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7Ci0gICAgYXNzZXJ0LnRocm93cygo
KSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbiksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJv
ciwgYFdlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTUgLyAxOTogMHRo
IERhdGEgc2VnbWVudCBoYXMgaW5kZXggMCB3aGljaCBleGNlZWRzIHRoZSBudW1iZXIgb2YgTWVt
b3JpZXMgMGApOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVs
ZShiaW4pLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsIGBXZWJBc3NlbWJseS5Nb2R1bGUgZG9l
c24ndCBwYXJzZSBhdCBieXRlIDE1OiAwdGggRGF0YSBzZWdtZW50IGhhcyBpbmRleCAwIHdoaWNo
IGV4Y2VlZHMgdGhlIG51bWJlciBvZiBNZW1vcmllcyAwYCk7CiB9KSgpOwogCiAoZnVuY3Rpb24g
RGF0YVNlY3Rpb25CaWdnZXJUaGFuTWVtb3J5KCkgewpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNt
L2pzLWFwaS90ZXN0X1N0YXJ0LmpzIGIvSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X1N0YXJ0Lmpz
CmluZGV4IGI0NDQ1NjkzMmQ5MGI1YzgzMzE0NWVjM2YzNDJmYzUwNDZmNzllMGIuLjVjMzE1MGUx
Y2FiZWJmYjg0MzMzZWY3MTQyM2E4ODg2Y2RlMGVhZTggMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2Fz
bS9qcy1hcGkvdGVzdF9TdGFydC5qcworKysgYi9KU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfU3Rh
cnQuanMKQEAgLTMxLDUgKzMxLDUgQEAKICAgICAgICAgLlN0YXJ0KDApLkVuZCgpIC8vIEludmFs
aWQgaW5kZXguCiAgICAgICAgIC5Db2RlKCkuRW5kKCk7CiAgICAgY29uc3QgYmluID0gYi5XZWJB
c3NlbWJseSgpLmdldCgpOwotICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5
Lk1vZHVsZShiaW4pLCBFcnJvciwgYFdlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0
IGJ5dGUgMTcgLyAyMDogU3RhcnQgaW5kZXggMCBleGNlZWRzIGZ1bmN0aW9uIGluZGV4IHNwYWNl
IDAgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKScpYCk7CisgICAgYXNz
ZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbiksIEVycm9yLCBgV2Vi
QXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxNzogU3RhcnQgaW5kZXggMCBl
eGNlZWRzIGZ1bmN0aW9uIGluZGV4IHNwYWNlIDAgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJs
eS5Nb2R1bGUoYmluKScpYCk7CiB9KSgpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFw
aS90ZXN0X2Jhc2ljX2FwaS5qcyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9iYXNpY19hcGku
anMKaW5kZXggMDhlNzRhYTMyNGE3MTc4OGU1ODE5YzRhOGJiZTc3NDc1ODViMWE4OS4uMWEyZDIy
MjEwMzA0NTFkZjA2NDViMzBlYTMxYmIyNzQ4ZjU1MzZkMCAxMDA2NDQKLS0tIGEvSlNUZXN0cy93
YXNtL2pzLWFwaS90ZXN0X2Jhc2ljX2FwaS5qcworKysgYi9KU1Rlc3RzL3dhc20vanMtYXBpL3Rl
c3RfYmFzaWNfYXBpLmpzCkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgICAgICAgICBhc3NlcnQudGhy
b3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseVtjXShpbnZhbGlkKSwgVHlwZUVycm9yLCBgZmlyc3Qg
YXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheUJ1ZmZlclZpZXcgb3IgYW4gQXJyYXlCdWZmZXIgKGV2
YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseVtjXShpbnZhbGlkKScpYCk7CiAgICAgICAgIGZvciAo
Y29uc3QgYnVmZmVyIG9mIFtuZXcgQXJyYXlCdWZmZXIoKSwgbmV3IERhdGFWaWV3KG5ldyBBcnJh
eUJ1ZmZlcigpKSwgbmV3IEludDhBcnJheSgpLCBuZXcgVWludDhBcnJheSgpLCBuZXcgVWludDhD
bGFtcGVkQXJyYXkoKSwgbmV3IEludDE2QXJyYXkoKSwgbmV3IFVpbnQxNkFycmF5KCksIG5ldyBJ
bnQzMkFycmF5KCksIG5ldyBVaW50MzJBcnJheSgpLCBuZXcgRmxvYXQzMkFycmF5KCksIG5ldyBG
bG9hdDY0QXJyYXkoKV0pCiAgICAgICAgICAgICAvLyBGSVhNRSB0aGUgZm9sbG93aW5nIHNob3Vs
ZCBiZSBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjM3NjgKLSAgICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3
IFdlYkFzc2VtYmx5W2NdKGJ1ZmZlciksIEVycm9yLCBgV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNu
J3QgcGFyc2UgYXQgYnl0ZSAwIC8gMDogZXhwZWN0ZWQgYSBtb2R1bGUgb2YgYXQgbGVhc3QgOCBi
eXRlcyAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5W2NdKGJ1ZmZlciknKWApOworICAgICAg
ICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHlbY10oYnVmZmVyKSwgRXJy
b3IsIGBXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDA6IGV4cGVjdGVk
IGEgbW9kdWxlIG9mIGF0IGxlYXN0IDggYnl0ZXMgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJs
eVtjXShidWZmZXIpJylgKTsKICAgICAgICAgYXNzZXJ0Lmluc3RhbmNlb2YobmV3IFdlYkFzc2Vt
Ymx5W2NdKGVtcHR5TW9kdWxlQXJyYXkpLCBXZWJBc3NlbWJseS5Nb2R1bGUpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlICJJbnN0YW5jZSI6CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vanMt
YXBpL3ZlcnNpb24uanMgYi9KU1Rlc3RzL3dhc20vanMtYXBpL3ZlcnNpb24uanMKaW5kZXggODFj
ZDdmZjAxMjJmYjIxY2U5MWY4MGZiNTFlNGM2OWUxNDU5OGM0Ny4uMDQ4NmZjZmRkZWZkMDgyMWQz
OTI0NmNiNjQwODczNGJmZWJmMjJlMiAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2pzLWFwaS92
ZXJzaW9uLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvdmVyc2lvbi5qcwpAQCAtNSw1ICs1
LDUgQEAKICAgICBpZiAodmVyc2lvbiA9PT0gMSkKICAgICAgICAgY29udGludWU7CiAgICAgY29u
c3QgZW1wdHlNb2R1bGVBcnJheSA9IFVpbnQ4QXJyYXkub2YoMHgwLCAweDYxLCAweDczLCAweDZk
LCB2ZXJzaW9uLCAweDAwLCAweDAwLCAweDAwKTsKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5l
dyBXZWJBc3NlbWJseS5Nb2R1bGUoZW1wdHlNb2R1bGVBcnJheSksIFdlYkFzc2VtYmx5LkNvbXBp
bGVFcnJvciwgYFdlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgOCAvIDg6
IHVuZXhwZWN0ZWQgdmVyc2lvbiBudW1iZXIgJHt2ZXJzaW9ufSBleHBlY3RlZCAxYCk7CisgICAg
YXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGVtcHR5TW9kdWxlQXJy
YXkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsIGBXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24n
dCBwYXJzZSBhdCBieXRlIDg6IHVuZXhwZWN0ZWQgdmVyc2lvbiBudW1iZXIgJHt2ZXJzaW9ufSBl
eHBlY3RlZCAxYCk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>348136</attachid>
            <date>2018-08-27 06:11:26 -0700</date>
            <delta_ts>2018-08-27 07:12:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-188943-20180827221125.patch</filename>
            <type>text/plain</type>
            <size>167043</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM1MzU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
ZDJhYzBiZmEwNjcxODA3MDdlMGE1YmI1YWFlNzRlZjJlYjNhZTYwLi4wYjUzMWFiZDhmZmM4Yjg2
MjQ0ZTYxODQzZDUxMmIxZmU1YWFhZDgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNjUgQEAKKzIwMTgtMDgtMjcgIFl1c3VrZSBTdXp1a2kgIDx5dXN1a2VzdXp1a2lAc2xv
d3N0YXJ0Lm9yZz4KKworICAgICAgICBbV2ViQXNzZW1ibHldIFBhcnNlIHdhc20gbW9kdWxlcyBp
biBhIHN0cmVhbWluZyBmYXNoaW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xODg5NDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgV2FzbTo6U3RyZWFtaW5nUGFyc2VyLCB3aGlj
aCBwYXJzZXMgd2FzbSBiaW5hcnkgaW4gYSBzdHJlYW1pbmcgZmFzaGlvbi4KKyAgICAgICAgQ3Vy
cmVudGx5LCB0aGlzIFN0cmVhbWluZ1BhcnNlciBpcyBub3QgZW5hYmxlZCBhbmQgaW50ZWdyYXRl
ZC4gSW4gc3Vic2VxdWVudCBwYXRjaGVzLAorICAgICAgICB3ZSBzdGFydCBpbnRlZ3JhdGluZyBp
dCBpbnRvIEJCUVBsYW4gYW5kIGRyb3BwaW5nIHRoZSBvbGQgTW9kdWxlUGFyc2VyLgorCisgICAg
ICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiB0b29scy9KU0RvbGxhclZNLmNwcDoKKyAgICAgICAg
KFdURjo6V2FzbVN0cmVhbWluZ1BhcnNlcjo6V2FzbVN0cmVhbWluZ1BhcnNlcik6CisgICAgICAg
IChXVEY6Oldhc21TdHJlYW1pbmdQYXJzZXI6OmNyZWF0ZSk6CisgICAgICAgIChXVEY6Oldhc21T
dHJlYW1pbmdQYXJzZXI6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXVEY6Oldhc21TdHJl
YW1pbmdQYXJzZXI6OnN0cmVhbWluZ1BhcnNlcik6CisgICAgICAgIChXVEY6Oldhc21TdHJlYW1p
bmdQYXJzZXI6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdURjo6ZnVuY3Rpb25XYXNtU3Ry
ZWFtaW5nUGFyc2VyQWRkQnl0ZXMpOgorICAgICAgICAoV1RGOjpmdW5jdGlvbldhc21TdHJlYW1p
bmdQYXJzZXJGaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uQ3JlYXRlV2FzbVN0cmVh
bWluZ1BhcnNlcik6CisgICAgICAgIChKU0M6OkpTRG9sbGFyVk06OmZpbmlzaENyZWF0aW9uKToK
KyAgICAgICAgVGhpcyBvYmplY3QgaXMgaW50cm9kdWNlZCBmb3IgdGVzdGluZyBwdXJwb3NlLiBB
ZGRlZCBuZXcgc3RyZXNzIHRlc3QgdXNlcyB0aGlzIGludGVyZmFjZQorICAgICAgICB0byB0ZXN0
IHN0cmVhbWluZyBwYXJzZXIgaW4gdGhlIEpTQyBzaGVsbC4KKworICAgICAgICAqIHdhc20vV2Fz
bUJCUVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpCQlFQbGFuKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSk6CisgICAg
ICAgIChKU0M6Oldhc206OkJCUVBsYW46OnByZXBhcmUpOgorICAgICAgICAoSlNDOjpXYXNtOjpC
QlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6
Y29tcGxldGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjp3b3JrKToKKyAgICAgICAg
KiB3YXNtL1dhc21CQlFQbGFuLmg6CisgICAgICAgIEJCUVBsYW4gaGFzIG1fc291cmNlLCBidXQg
b25jZSBNb2R1bGVJbmZvcm1hdGlvbiBpcyBwYXJzZWQsIGl0IGlzIG5vIGxvbmdlciBuZWNlc3Nh
cnkuCisgICAgICAgIEluIHN1YnNlcXVlbnQgcGF0Y2hlcywgd2Ugd2lsbCByZW1vdmUgdGhpcywg
YW5kIHN0cmVhbSB0aGUgZGF0YSBpbnRvIHRoZSBCQlFQbGFuLgorCisgICAgICAgICogd2FzbS9X
YXNtRm9ybWF0Lmg6CisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbjo6TW9kdWxlSW5mb3JtYXRpb24p
OgorICAgICAgICAqIHdhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmg6CisgICAgICAgIE9uZSBv
ZiB0aGUgbGFyZ2VzdCBjaGFuZ2UgaW4gdGhpcyBwYXRjaCBpcyB0aGF0IE1vZHVsZUluZm9ybWF0
aW9uIG5vIGxvbmdlciBob2xkcyBzb3VyY2UgYnl0ZXMsCisgICAgICAgIHNpbmNlIHNvdXJjZSBi
eXRlcyBjYW4gYmUgYWRkZWQgaW4gYSBzdHJlYW1pbmcgZmFzaGlvbi4gSW5zdGVhZCBvZiBob2xk
aW5nIGFsbCB0aGUgc291cmNlIGJ5dGVzCisgICAgICAgIGluIE1vZHVsZUluZm9ybWF0aW9uLCBl
YWNoIGZ1bmN0aW9uIChNb2R1bGVJbmZvcm1hdGlvbjo6ZnVuY3Rpb25zLCBGdW5jdGlvbkRhdGEp
IHNob3VsZCBoYXZlCisgICAgICAgIFZlY3Rvcjx1aW50OF90PiBmb3IgaXRzIGRhdGEuIFRoaXMg
ZGF0YSBpcyBldmVudHVhbGx5IGZpbGxlZCBieSBTdHJlYW1pbmdQYXJzZXIsIGFuZCBjb21waWxp
bmcKKyAgICAgICAgYSBmdW5jdGlvbiB3aXRoIHRoaXMgZGF0YSBjYW4gYmUgZG9uZSBjb25jdXJy
ZW50bHkgd2l0aCBTdHJlYW1pbmdQYXJzZXIuCisKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxl
SW5mb3JtYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZUluZm9ybWF0
aW9uOjptZW1vcnlDb3VudCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZUluZm9y
bWF0aW9uOjp0YWJsZUNvdW50IGNvbnN0KToKKyAgICAgICAgbWVtb3J5Q291bnQgYW5kIHRhYmxl
Q291bnQgc2hvdWxkIGJlIHJlY29yZWRlZCBpbiBNb2R1bGVJbmZvcm1hdGlvbi4KKworICAgICAg
ICAqIHdhc20vV2FzbU1vZHVsZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVs
ZVBhcnNlcjo6cGFyc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjptYWtlSTMySW5pdEV4cHIpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlVHlwZSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VJbXBvcnQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb24p
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlUmVzaXph
YmxlTGltaXRzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpw
YXJzZVRhYmxlSGVscGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFy
c2VyOjpwYXJzZVRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFy
c2VyOjpwYXJzZU1lbW9yeUhlbHBlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206Ok1v
ZHVsZVBhcnNlcjo6cGFyc2VNZW1vcnkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpN
b2R1bGVQYXJzZXI6OnBhcnNlR2xvYmFsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6
TW9kdWxlUGFyc2VyOjpwYXJzZUV4cG9ydCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206
Ok1vZHVsZVBhcnNlcjo6cGFyc2VTdGFydCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206
Ok1vZHVsZVBhcnNlcjo6cGFyc2VFbGVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2Fz
bTo6TW9kdWxlUGFyc2VyOjpwYXJzZUNvZGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNt
OjpNb2R1bGVQYXJzZXI6OnBhcnNlSW5pdEV4cHIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpX
YXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlR2xvYmFsVHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZUN1c3RvbSk6IERlbGV0ZWQuCisgICAgICAgIEV4
dHJhY3Qgc2VjdGlvbiBwYXJzaW5nIGNvZGUgb3V0IGZyb20gTW9kdWxlUGFyc2VyLiBXZSBjcmVh
dGUgU2VjdGlvblBhcnNlciBhbmQgTW9kdWxlUGFyc2VyIHVzZXMgaXQuCisgICAgICAgIFNlY3Rp
b25QYXJzZXIgaXMgYWxzbyB1c2VkIGJ5IFN0cmVhbWluZ1BhcnNlci4KKworICAgICAgICAqIHdh
c20vV2FzbU1vZHVsZVBhcnNlci5oOgorICAgICAgICAqIHdhc20vV2FzbU5hbWVTZWN0aW9uLmg6
CisgICAgICAgIChKU0M6Oldhc206Ok5hbWVTZWN0aW9uOjpOYW1lU2VjdGlvbik6CisgICAgICAg
IChKU0M6Oldhc206Ok5hbWVTZWN0aW9uOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpO
YW1lU2VjdGlvbjo6c2V0SGFzaCk6CisgICAgICAgIEhhc2ggY2FsY3VsYXRpb24gaXMgZGVmZXJy
ZWQgc2luY2UgYWxsIHRoZSBzb3VyY2UgaXMgbm90IGF2YWlsYWJsZSBpbiBzdHJlYW1pbmcgcGFy
c2luZy4KKworICAgICAgICAqIHdhc20vV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmNwcDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6TmFtZVNlY3Rpb25QYXJzZXI6OnBhcnNlKToKKyAgICAgICAgKiB3YXNt
L1dhc21OYW1lU2VjdGlvblBhcnNlci5oOgorICAgICAgICBVc2UgUmVmPE5hbWVTZWN0aW9uPi4K
KworICAgICAgICAqIHdhc20vV2FzbU9NR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpP
TUdQbGFuOjp3b3JrKToKKyAgICAgICAgV2FzbTo6UGxhbiBubyBsb25nZXIgaGF2ZSBtX3NvdXJj
ZSBzaW5jZSBkYXRhIHdpbGwgYmUgZXZlbnR1YWxseSBmaWxsZWQgaW4gYSBzdHJlYW1pbmcgZmFz
aGlvbi4KKyAgICAgICAgT01HUGxhbiBjYW4gZ2V0IGRhdGEgb2YgdGhlIGZ1bmN0aW9uIGJ5IHVz
aW5nIE1vZHVsZUluZm9ybWF0aW9uOjpmdW5jdGlvbnMuCisKKyAgICAgICAgKiB3YXNtL1dhc21Q
YXJzZXIuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGFyc2VyOjpzb3VyY2UgY29uc3QpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpQYXJzZXI6Omxlbmd0aCBjb25zdCk6CisgICAgICAgIChKU0M6Oldh
c206OlBhcnNlcjo6b2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGFyc2VyOjpm
YWlsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6bWFrZUkzMkluaXRFeHByKToKKyAgICAg
ICAgKiB3YXNtL1dhc21QbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6UGxhbik6
CisgICAgICAgIFdhc206OlBsYW4gc2hvdWxkIG5vdCBoYXZlIGFsbCB0aGUgc291cmNlIGFwcmlv
cmkuIFN0cmVhbWVkIGRhdGEgd2lsbCBiZSBwdW1wZWQgZnJvbSB0aGUgcHJvdmlkZXIuCisKKyAg
ICAgICAgKiB3YXNtL1dhc21QbGFuLmg6CisgICAgICAgICogd2FzbS9XYXNtU2VjdGlvblBhcnNl
ci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQ
YXJzZXIuY3BwLgorICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZVR5cGUp
OgorICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZUltcG9ydCk6CisgICAg
ICAgIChKU0M6Oldhc206OlNlY3Rpb25QYXJzZXI6OnBhcnNlRnVuY3Rpb24pOgorICAgICAgICAo
SlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZVJlc2l6YWJsZUxpbWl0cyk6CisgICAgICAg
IChKU0M6Oldhc206OlNlY3Rpb25QYXJzZXI6OnBhcnNlVGFibGVIZWxwZXIpOgorICAgICAgICAo
SlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZVRhYmxlKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6U2VjdGlvblBhcnNlcjo6cGFyc2VNZW1vcnlIZWxwZXIpOgorICAgICAgICAoSlNDOjpXYXNt
OjpTZWN0aW9uUGFyc2VyOjpwYXJzZU1lbW9yeSk6CisgICAgICAgIChKU0M6Oldhc206OlNlY3Rp
b25QYXJzZXI6OnBhcnNlR2xvYmFsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNl
cjo6cGFyc2VFeHBvcnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJz
ZVN0YXJ0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VFbGVtZW50
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VDb2RlKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VJbml0RXhwcik6CisgICAgICAgIChK
U0M6Oldhc206OlNlY3Rpb25QYXJzZXI6OnBhcnNlR2xvYmFsVHlwZSk6CisgICAgICAgIChKU0M6
Oldhc206OlNlY3Rpb25QYXJzZXI6OnBhcnNlRGF0YSk6CisgICAgICAgIChKU0M6Oldhc206OlNl
Y3Rpb25QYXJzZXI6OnBhcnNlQ3VzdG9tKToKKyAgICAgICAgKiB3YXNtL1dhc21TZWN0aW9uUGFy
c2VyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQ
YXJzZXIuaC4KKyAgICAgICAgU2VjdGlvblBhcnNlciBpcyBleHRyYWN0ZWQgZnJvbSBNb2R1bGVQ
YXJzZXIuIEFuZCBpdCBpcyB1c2VkIGJvdGggdGhlIG9sZCAoY3VycmVudGx5IHdvcmtpbmcpIE1v
ZHVsZVBhcnNlcgorICAgICAgICBhbmQgdGhlIG5ldyBTdHJlYW1pbmdQYXJzZXIuCisKKyAgICAg
ICAgKiB3YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
V2FzbTo6cGFyc2VVSW50Nyk6CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6
ZmFpbCk6CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6U3RyZWFtaW5nUGFy
c2VyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U3RyZWFtaW5nUGFyc2VyOjpwYXJzZU1vZHVsZUhl
YWRlcik6CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6cGFyc2VTZWN0aW9u
SGVhZGVyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U3RyZWFtaW5nUGFyc2VyOjpwYXJzZVNlY3Rp
b25TaXplKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U3RyZWFtaW5nUGFyc2VyOjpwYXJzZUNvZGVT
ZWN0aW9uU2l6ZSk6CisgICAgICAgIENvZGUgc2VjdGlvbiBpbiBXYXNtIGJpbmFyeSBpcyBzcGVj
aWFsbHkgaGFuZGxlZCBjb21wYXJlZCB3aXRoIHRoZSBvdGhlciBzZWN0aW9ucyBzaW5jZSBpdCBp
bmNsdWRlcworICAgICAgICBidW5jaCBvZiBmdW5jdGlvbnMuIFN0cmVhbWluZ1BhcnNlciBleHRy
YWN0cyBlYWNoIGZ1bmN0aW9uIGluIGEgc3RyZWFtaW5nIGZhc2hpb24gYW5kIGVuYWJsZSBzdHJl
YW1pbmcKKyAgICAgICAgdmFsaWRhdGlvbiAvIGNvbXBpbGF0aW9uIG9mIFdhc20gZnVuY3Rpb25z
LgorCisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6cGFyc2VGdW5jdGlvbkhl
YWRlcik6CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6cGFyc2VGdW5jdGlv
bkJvZHkpOgorICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OnBhcnNlU2VjdGlv
bkJvZHkpOgorICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmNvbnN1bWUpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmNvbnN1bWVWYXJVSW50MzIpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6U3RyZWFtaW5nUGFyc2VyOjpmYWlsT25TdGF0ZSk6CisgICAgICAgIChKU0M6
Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6ZmluYWxpemUpOgorICAgICAgICAqIHdhc20vV2FzbVN0
cmVhbWluZ1BhcnNlci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6U3RyZWFtaW5nUGFy
c2VyOjphZGRCeXRlcyk6CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6ZXJy
b3JNZXNzYWdlIGNvbnN0KToKKyAgICAgICAgVGhpcyBpcyBvdXIgbmV3IFN0cmVhbWluZ1BhcnNl
ciBpbXBsZW1lbnRhdGlvbi4gU3RyZWFtaW5nUGFyc2VyOjpjb25zdW1lWFhYIGZ1bmN0aW9ucyBn
ZXQgZGF0YSwgYW5kCisgICAgICAgIFN0cmVhbWluZ1BhcnNlcjo6cGFyc2VYWFggZnVuY3Rpb25z
IHBhcnNlIGNvbnN1bWVkIGRhdGEuIFRoZSB1c2VyIG9mIFN0cmVhbWluZ1BhcnNlciBjYWxscwor
ICAgICAgICBTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKCkgdG8gcHVtcCB0aGUgYnl0ZXMgc3Ry
ZWFtIGludG8gdGhlIHBhcnNlci4gQW5kIG9uY2UgYWxsIHRoZSBkYXRhIGlzIHB1bXBlZCwKKyAg
ICAgICAgdGhlIHVzZXIgY2FsbHMgU3RyZWFtaW5nUGFyc2VyOjpmaW5hbGl6ZS4gU3RyZWFtaW5n
UGFyc2VyIGlzIGEgc3RhdGUgbWFjaGluZSB3aGljaCBmZWVkcyB0aGUgaW5jb21pbmcKKyAgICAg
ICAgYnl0ZSBzdHJlYW0uCisKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUu
Y3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpzb3VyY2UgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICBBbGwgdGhlIHNvdXJjZSBzaG91bGQgbm90IGJlIGhlbGQuCisKKyAg
ICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaDoKKyAgICAgICAgKiB3YXNtL2pz
L1dlYkFzc2VtYmx5UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlWYWxp
ZGF0ZUZ1bmMpOgorCiAyMDE4LTA4LTI0ICBZdXN1a2UgU3V6dWtpICA8eXVzdWtlc3V6dWtpQHNs
b3dzdGFydC5vcmc+CiAKICAgICAgICAgW0pTQ10gQXJyYXkucHJvdG90eXBlLnJldmVyc2UgbW9k
aWZpZXMgSlNJbW11dGFibGVCdXR0ZXJmbHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggMTdhNDhiZGE2ZDRiZTM5N2IwOGU5NDZjYmQ0ODYxMDY3NDc5OWRhZS4uNDI2ZDE5ZGNlOTU0
ODJlODUxYmZlOWM5Mzg3ZDJjZjYzM2Y1NWQ0OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTE3MzQsNiArMTczNCw4IEBACiAJCUUzOTNBREQ4MUZFNzAyRDAwMDIyRDY4MSAvKiBX
ZWFrTWFwSW1wbElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUzOTNBREQ3MUZFNzAyQ0MwMDIyRDY4MSAvKiBXZWFrTWFwSW1wbElubGluZXMu
aCAqLzsgfTsKIAkJRTM5RDQ1RjUxRDM5MDA1NjAwQjNCMzc3IC8qIEludGVycHJldGVySW5saW5l
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM5RDlE
ODQxRDM5MDAwNjAwNjY3MjgyIC8qIEludGVycHJldGVySW5saW5lcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUzOURBNEE3MUI3RThCN0MwMDg0
RjMzQSAvKiBKU01vZHVsZVJlY29yZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTM5REE0QTUxQjdFOEI3QzAwODRGMzNBIC8qIEpTTW9kdWxlUmVjb3Jk
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRTNB
MDUzMUEyMTM0MkI2ODAwMjJFQzE0IC8qIFdhc21TdHJlYW1pbmdQYXJzZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzQTA1MzE2MjEzNDJCNjYwMDIy
RUMxNCAvKiBXYXNtU3RyZWFtaW5nUGFyc2VyLmggKi87IH07CisJCUUzQTA1MzFDMjEzNDJCNjgw
MDIyRUMxNCAvKiBXYXNtU2VjdGlvblBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTNBMDUzMTgyMTM0MkI2NzAwMjJFQzE0IC8qIFdhc21TZWN0
aW9uUGFyc2VyLmggKi87IH07CiAJCUUzQTMyQkM3MUZDODMxNDcwMDdEN0U3NiAvKiBXZWFrTWFw
SW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTNB
MzJCQzYxRkM4MzEyRTAwN0Q3RTc2IC8qIFdlYWtNYXBJbXBsLmggKi87IH07CiAJCUUzQTQyMTQz
MUQ2RjU4OTMwMDA3QzYxNyAvKiBQcmVjaXNlSnVtcFRhcmdldHNJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFM0E0MjE0MjFENkY1ODhGMDAw
N0M2MTcgLyogUHJlY2lzZUp1bXBUYXJnZXRzSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUzQkZEMEJDMURBRjgwOEUwMDY1REVBMiAv
KiBBY2Nlc3NDYXNlU25pcHBldFBhcmFtcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTNCRkQwQkExREFGODA3QzAwNjVERUEyIC8qIEFjY2Vzc0Nhc2VT
bmlwcGV0UGFyYW1zLmggKi87IH07CkBAIC00NjIyLDYgKzQ2MjQsMTAgQEAKIAkJRTM5RDlEODQx
RDM5MDAwNjAwNjY3MjgyIC8qIEludGVycHJldGVySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJbnRlcnByZXRlcklubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTM5REE0QTQxQjdFOEI3QzAwODRGMzNBIC8qIEpTTW9kdWxlUmVjb3JkLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTW9kdWxlUmVjb3JkLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM5REE0QTUxQjdFOEI3QzAwODRGMzNB
IC8qIEpTTW9kdWxlUmVjb3JkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
TW9kdWxlUmVjb3JkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzQTA1MzE2MjEz
NDJCNjYwMDIyRUMxNCAvKiBXYXNtU3RyZWFtaW5nUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdhc21TdHJlYW1pbmdQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRTNBMDUzMTcyMTM0MkI2NjAwMjJFQzE0IC8qIFdhc21TZWN0aW9uUGFyc2Vy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21TZWN0aW9uUGFy
c2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTNBMDUzMTgyMTM0MkI2NzAw
MjJFQzE0IC8qIFdhc21TZWN0aW9uUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdhc21TZWN0aW9uUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUUzQTA1MzE5MjEzNDJCNjcwMDIyRUMxNCAvKiBXYXNtU3RyZWFtaW5nUGFyc2VyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21TdHJlYW1pbmdQYXJzZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFM0EzMkJDNTFGQzgzMTJEMDA3RDdFNzYg
LyogV2Vha01hcEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2Vha01hcEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFM0EzMkJDNjFG
QzgzMTJFMDA3RDdFNzYgLyogV2Vha01hcEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2Vha01hcEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTNB
NDIxNDIxRDZGNTg4RjAwMDdDNjE3IC8qIFByZWNpc2VKdW1wVGFyZ2V0c0lubGluZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJlY2lzZUp1bXBUYXJnZXRzSW5saW5lcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjM0OCw5ICs2MzU0LDEzIEBACiAJCQkJ
NTNGNDBFOEMxRDU5MDFGMjAwOTlBMUI2IC8qIFdhc21QYXJzZXIuaCAqLywKIAkJCQk1MzEzNzRC
RTFENUNFOTUwMDBBRjdBMEIgLyogV2FzbVBsYW4uY3BwICovLAogCQkJCTUzMTM3NEJDMUQ1Q0U2
NzYwMEFGN0EwQiAvKiBXYXNtUGxhbi5oICovLAorCQkJCUUzQTA1MzE3MjEzNDJCNjYwMDIyRUMx
NCAvKiBXYXNtU2VjdGlvblBhcnNlci5jcHAgKi8sCisJCQkJRTNBMDUzMTgyMTM0MkI2NzAwMjJF
QzE0IC8qIFdhc21TZWN0aW9uUGFyc2VyLmggKi8sCiAJCQkJNTNGNDBFODQxRDU4Rjk3NzAwOTlB
MUI2IC8qIFdhc21TZWN0aW9ucy5oICovLAogCQkJCUFENzQzOEJFMUUwNDU3OTIwMEZEMEMyQSAv
KiBXYXNtU2lnbmF0dXJlLmNwcCAqLywKIAkJCQlBRDc0MzhCRjFFMDQ1NzkyMDBGRDBDMkEgLyog
V2FzbVNpZ25hdHVyZS5oICovLAorCQkJCUUzQTA1MzE5MjEzNDJCNjcwMDIyRUMxNCAvKiBXYXNt
U3RyZWFtaW5nUGFyc2VyLmNwcCAqLywKKwkJCQlFM0EwNTMxNjIxMzQyQjY2MDAyMkVDMTQgLyog
V2FzbVN0cmVhbWluZ1BhcnNlci5oICovLAogCQkJCUFENUMzNkUzMUY2OUVDOEIwMDBCQ0FBRiAv
KiBXYXNtVGFibGUuY3BwICovLAogCQkJCUFENUMzNkU0MUY2OUVDOEIwMDBCQ0FBRiAvKiBXYXNt
VGFibGUuaCAqLywKIAkJCQk1MjUwRDJDRjFFOERBMDVBMDAyOUE5MzIgLyogV2FzbVRodW5rcy5j
cHAgKi8sCkBAIC04NDQ4LDcgKzg0NTgsNiBAQAogCQkJCUMyRkNBRTEzMTdBOUMyNEUwMDM0Qzcz
NSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjY2
RUMwMTgzNTY2RjkwMEQwMTdGMSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFMzI4REFFQjFEMzhEMDA1MDAxQTI1MjkgLyogQnl0ZWNvZGVS
ZXdyaXRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRkVBM0JCQUMyMTJDOTdDQjAwRTkzQUQxIC8q
IERGR0NGRy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjUxNEYyMTkxOEIzRTE2NzAwOThGRjhCIC8q
IEJ5dGVjb2Rlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4ODVFMTExODQ5QTNCRTAwRjFFM0ZB
IC8qIEJ5dGVjb2RlVXNlRGVmLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjgwMjNFQTE2MTM4MzJC
MDBBMEJBNDUgLyogQnlWYWxJbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTg1ODEsNiArODU5MCw3
IEBACiAJCQkJMEZCREI5QUQxQUIwRkJDNjAwMEI1N0U1IC8qIERGR0NhbGxDcmVhdGVEaXJlY3RB
cmd1bWVudHNTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3QjI5NEIx
NEMzQ0QyRjAwN0MzREIxIC8qIERGR0NhcGFiaWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZGRkM5NTgxNEVGOTBBMjAwQzcyNTMyIC8qIERGR0NGQVBoYXNlLmggaW4gSGVhZGVycyAqLywK
KwkJCQlGRUEzQkJBQzIxMkM5N0NCMDBFOTNBRDEgLyogREZHQ0ZHLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjNCM0EyODE1NDRDOTk3MDAzRUQwRkYgLyogREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFz
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RDM2OTUxQUU5Q0MzMzAwMEQ0REZCIC8qIERGR0Ns
ZWFuVXBQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3QTQyNDAxN0EwQkJGRDAwQThEQjgx
IC8qIERGR0Nsb2JiZXJpemUuaCBpbiBIZWFkZXJzICovLApAQCAtOTYwNyw4ICs5NjE3LDEwIEBA
CiAJCQkJNzlCNzU5NzYxREZBNEM2MDAwNTIxNzRDIC8qIFdhc21QYWdlQ291bnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTUzRjQwRThEMUQ1OTAxRjIwMDk5QTFCNiAvKiBXYXNtUGFyc2VyLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1MzEzNzRCRDFENUNFNjc2MDBBRjdBMEIgLyogV2FzbVBsYW4uaCBp
biBIZWFkZXJzICovLAorCQkJCUUzQTA1MzFDMjEzNDJCNjgwMDIyRUMxNCAvKiBXYXNtU2VjdGlv
blBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTNGNDBFODUxRDU4Rjk3NzAwOTlBMUI2IC8q
IFdhc21TZWN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ3NDM4QzAxRTA0NTdBNDAwRkQw
QzJBIC8qIFdhc21TaWduYXR1cmUuaCBpbiBIZWFkZXJzICovLAorCQkJCUUzQTA1MzFBMjEzNDJC
NjgwMDIyRUMxNCAvKiBXYXNtU3RyZWFtaW5nUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
RDVDMzZFNjFGNjlFQzkxMDAwQkNBQUYgLyogV2FzbVRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1MjUwRDJEMjFFOERBMDVBMDAyOUE5MzIgLyogV2FzbVRodW5rcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTNFOUUwQUYxRUFFQzQ1NzAwRkVFMjUxIC8qIFdhc21UaWVyVXBDb3VudC5oIGluIEhl
YWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKaW5kZXggODk3Njk4YzZlMDU5YWUx
ZDI2MjEzMWFjNTIwNDAwZTMxNzhlZGNjNS4uMDRkNDhlODViNTBmYjgzZmIxMjUwNWZlZTE0YTg1
MzU5Y2MxZTMwOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dApAQCAtOTkyLDcgKzk5Miw5
IEBAIHdhc20vV2FzbU9NR1BsYW4uY3BwCiB3YXNtL1dhc21PcGNvZGVPcmlnaW4uY3BwCiB3YXNt
L1dhc21QYWdlQ291bnQuY3BwCiB3YXNtL1dhc21QbGFuLmNwcAord2FzbS9XYXNtU2VjdGlvblBh
cnNlci5jcHAKIHdhc20vV2FzbVNpZ25hdHVyZS5jcHAKK3dhc20vV2FzbVN0cmVhbWluZ1BhcnNl
ci5jcHAKIHdhc20vV2FzbVRhYmxlLmNwcAogd2FzbS9XYXNtVGFibGUuaAogd2FzbS9XYXNtVGh1
bmtzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFy
Vk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCmluZGV4
IGViNTdjNzg0Yzk4MTgwNDYyZDRhOGU0M2M4NmI1MGJhYWFlODQ5M2IuLmVmMjU1NzI0YmM2YTEx
MjAwMTZiN2YyMmY5NjlkYmZmZDljYWUyM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9v
bHMvSlNEb2xsYXJWTS5jcHAKQEAgLTUxLDYgKzUxLDExIEBACiAjaW5jbHVkZSA8d3RmL1Byb2Nl
c3NJRC5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgogCisjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlIZWxwZXJzLmgiCisjaW5jbHVk
ZSAiV2FzbVN0cmVhbWluZ1BhcnNlci5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCkBAIC0xMDkzLDYgKzEwOTgsODAgQEAgdm9pZCBFbGVt
ZW50OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFJvb3QqIHJvb3QpCiAgICAgbV9yb290LT5zZXRF
bGVtZW50KHRoaXMpOwogfQogCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCitzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbldhc21TdHJlYW1pbmdQYXJzZXJBZGRC
eXRlcyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1
bmN0aW9uV2FzbVN0cmVhbWluZ1BhcnNlckZpbmFsaXplKEV4ZWNTdGF0ZSopOworCitjbGFzcyBX
YXNtU3RyZWFtaW5nUGFyc2VyIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKK3B1Ymxp
YzoKKyAgICBXYXNtU3RyZWFtaW5nUGFyc2VyKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQorICAgICAgICAsIG1faW5mbyhXYXNtOjpN
b2R1bGVJbmZvcm1hdGlvbjo6Y3JlYXRlKCkpCisgICAgICAgICwgbV9zdHJlYW1pbmdQYXJzZXIo
bV9pbmZvLmdldCgpKQorICAgIHsKKyAgICB9CisKKyAgICB1c2luZyBCYXNlID0gSlNEZXN0cnVj
dGlibGVPYmplY3Q7CisKKyAgICBzdGF0aWMgV2FzbVN0cmVhbWluZ1BhcnNlciogY3JlYXRlKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gY3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIGpzTnVs
bCgpKTsKKyAgICAgICAgV2FzbVN0cmVhbWluZ1BhcnNlciogcmVzdWx0ID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8V2FzbVN0cmVhbWluZ1BhcnNlcj4odm0uaGVhcCwgc2l6ZW9mKFdhc21T
dHJlYW1pbmdQYXJzZXIpKSkgV2FzbVN0cmVhbWluZ1BhcnNlcih2bSwgc3RydWN0dXJlKTsKKyAg
ICAgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgewor
ICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAg
fQorCisgICAgV2FzbTo6U3RyZWFtaW5nUGFyc2VyJiBzdHJlYW1pbmdQYXJzZXIoKSB7IHJldHVy
biBtX3N0cmVhbWluZ1BhcnNlcjsgfQorCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0p
CisgICAgeworICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisKKyAgICAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRoaXMtPmdsb2JhbE9iamVjdCh2bSk7CisgICAg
ICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCAiYWRkQnl0ZXMiKSwgMCwgZnVuY3Rpb25XYXNtU3RyZWFtaW5nUGFy
c2VyQWRkQnl0ZXMsIE5vSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZt
LCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZmluYWxpemUiKSwg
MCwgZnVuY3Rpb25XYXNtU3RyZWFtaW5nUGFyc2VyRmluYWxpemUsIE5vSW50cmluc2ljLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgfQor
CisgICAgREVDTEFSRV9JTkZPOworCisgICAgUmVmPFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPiBt
X2luZm87CisgICAgV2FzbTo6U3RyZWFtaW5nUGFyc2VyIG1fc3RyZWFtaW5nUGFyc2VyOworfTsK
KworY29uc3QgQ2xhc3NJbmZvIFdhc21TdHJlYW1pbmdQYXJzZXI6OnNfaW5mbyA9IHsgIldhc21T
dHJlYW1pbmdQYXJzZXIiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKFdhc21TdHJlYW1pbmdQYXJzZXIpIH07CisKK0VuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25XYXNtU3RyZWFtaW5nUGFyc2VyQWRkQnl0ZXMoRXhlY1N0YXRl
KiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUoZXhlYy0+dm0oKSk7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpz
RHluYW1pY0Nhc3Q8V2FzbVN0cmVhbWluZ1BhcnNlcio+KHZtLCBleGVjLT50aGlzVmFsdWUoKSk7
CisgICAgaWYgKCF0aGlzT2JqZWN0KSB7CisgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKTsKKyAgICB9CisgICAg
YXV0byBkYXRhID0gZ2V0V2FzbUJ1ZmZlckZyb21WYWx1ZShleGVjLCBleGVjLT5hcmd1bWVudCgw
KSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Cisg
ICAgc2NvcGUucmVsZWFzZSgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIo
c3RhdGljX2Nhc3Q8aW50MzJfdD4odGhpc09iamVjdC0+c3RyZWFtaW5nUGFyc2VyKCkuYWRkQnl0
ZXMoYml0d2lzZV9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmZpcnN0KSwgZGF0YS5zZWNvbmQp
KSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uV2FzbVN0cmVh
bWluZ1BhcnNlckZpbmFsaXplKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0R5bmFtaWNDYXN0PFdhc21TdHJlYW1p
bmdQYXJzZXIqPih2bSwgZXhlYy0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghdGhpc09iamVjdCkK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHN0YXRpY19jYXN0PGludDMyX3Q+KHRoaXNP
YmplY3QtPnN0cmVhbWluZ1BhcnNlcigpLmZpbmFsaXplKCkpKSk7Cit9CisKKyNlbmRpZgorCiB9
IC8vIG5hbWVzcGFjZQogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTE2NDAsNiArMTcxOSwxNSBAQCBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZURPTUpJVEdl
dHRlckJhc2VKU09iamVjdChFeGVjUwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKIH0KIAorI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlV2FzbVN0cmVhbWluZ1BhcnNlcihFeGVjU3RhdGUq
IGV4ZWMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayh2bSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShXYXNtU3RyZWFtaW5nUGFyc2VyOjpj
cmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSkpOworfQorI2VuZGlmCisKIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2V0SW1wdXJlR2V0dGVy
RGVsZWdhdGUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CkBA
IC0yMDQwLDYgKzIxMjgsOSBAQCB2b2lkIEpTRG9sbGFyVk06OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSkKICAgICBhZGRGdW5jdGlvbih2bSwgImNyZWF0ZURPTUpJVENoZWNrU3ViQ2xhc3NPYmplY3Qi
LCBmdW5jdGlvbkNyZWF0ZURPTUpJVENoZWNrU3ViQ2xhc3NPYmplY3QsIDApOwogICAgIGFkZEZ1
bmN0aW9uKHZtLCAiY3JlYXRlRE9NSklUR2V0dGVyQmFzZUpTT2JqZWN0IiwgZnVuY3Rpb25DcmVh
dGVET01KSVRHZXR0ZXJCYXNlSlNPYmplY3QsIDApOwogICAgIGFkZEZ1bmN0aW9uKHZtLCAiY3Jl
YXRlQnVpbHRpbiIsIGZ1bmN0aW9uQ3JlYXRlQnVpbHRpbiwgMik7CisjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZKQorICAgIGFkZEZ1bmN0aW9uKHZtLCAiY3JlYXRlV2FzbVN0cmVhbWluZ1BhcnNlciIs
IGZ1bmN0aW9uQ3JlYXRlV2FzbVN0cmVhbWluZ1BhcnNlciwgMCk7CisjZW5kaWYKICAgICBhZGRG
dW5jdGlvbih2bSwgImdldFByaXZhdGVQcm9wZXJ0eSIsIGZ1bmN0aW9uR2V0UHJpdmF0ZVByb3Bl
cnR5LCAyKTsKICAgICBhZGRGdW5jdGlvbih2bSwgInNldEltcHVyZUdldHRlckRlbGVnYXRlIiwg
ZnVuY3Rpb25TZXRJbXB1cmVHZXR0ZXJEZWxlZ2F0ZSwgMik7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAppbmRleCBmNjcyNjg2ZDNmOTlhMGQwZDJlOWMzMjFm
MjdiYzBhMWNiZjViMmRkLi40M2M4ZjU2MmFmYTFjMzYzM2E3ZTZjNjFmNDA5MjJlYzBiZTk3MjEz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCkBAIC01OSwx
MyArNTksMTUgQEAgQkJRUGxhbjo6QkJRUGxhbihDb250ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxl
SW5mb3JtYXRpb24+IGluZm8sIEFzeW5jV29yayB3b3JrLAogfQogCiBCQlFQbGFuOjpCQlFQbGFu
KENvbnRleHQqIGNvbnRleHQsIFZlY3Rvcjx1aW50OF90PiYmIHNvdXJjZSwgQXN5bmNXb3JrIHdv
cmssIENvbXBsZXRpb25UYXNrJiYgdGFzaywgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYgY3JlYXRl
RW1iZWRkZXJXcmFwcGVyLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQot
ICAgIDogQkJRUGxhbihjb250ZXh0LCBhZG9wdFJlZigqbmV3IE1vZHVsZUluZm9ybWF0aW9uKFdU
Rk1vdmUoc291cmNlKSkpLCB3b3JrLCBXVEZNb3ZlKHRhc2spLCBXVEZNb3ZlKGNyZWF0ZUVtYmVk
ZGVyV3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlvbikKKyAgICA6IEJhc2UoY29udGV4dCwgTW9k
dWxlSW5mb3JtYXRpb246OmNyZWF0ZSgpLCBXVEZNb3ZlKHRhc2spLCBXVEZNb3ZlKGNyZWF0ZUVt
YmVkZGVyV3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlvbikKKyAgICAsIG1fc291cmNlKFdURk1v
dmUoc291cmNlKSkKKyAgICAsIG1fc3RhdGUoU3RhdGU6OkluaXRpYWwpCisgICAgLCBtX2FzeW5j
V29yayh3b3JrKQogewotICAgIG1fc3RhdGUgPSBTdGF0ZTo6SW5pdGlhbDsKIH0KIAotQkJRUGxh
bjo6QkJRUGxhbihDb250ZXh0KiBjb250ZXh0LCBjb25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVf
dCBzb3VyY2VMZW5ndGgsIEFzeW5jV29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCi0g
ICAgOiBCYXNlKGNvbnRleHQsIHNvdXJjZSwgc291cmNlTGVuZ3RoLCBXVEZNb3ZlKHRhc2spKQor
QkJRUGxhbjo6QkJRUGxhbihDb250ZXh0KiBjb250ZXh0LCBBc3luY1dvcmsgd29yaywgQ29tcGxl
dGlvblRhc2smJiB0YXNrKQorICAgIDogQmFzZShjb250ZXh0LCBXVEZNb3ZlKHRhc2spKQogICAg
ICwgbV9zdGF0ZShTdGF0ZTo6SW5pdGlhbCkKICAgICAsIG1fYXN5bmNXb3JrKHdvcmspCiB7CkBA
IC05MCw3ICs5Miw3IEBAIHZvaWQgQkJRUGxhbjo6bW92ZVRvU3RhdGUoU3RhdGUgc3RhdGUpCiAg
ICAgbV9zdGF0ZSA9IHN0YXRlOwogfQogCi1ib29sIEJCUVBsYW46OnBhcnNlQW5kVmFsaWRhdGVN
b2R1bGUoKQorYm9vbCBCQlFQbGFuOjpwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKGNvbnN0IHVpbnQ4
X3QqIHNvdXJjZSwgc2l6ZV90IHNvdXJjZUxlbmd0aCkKIHsKICAgICBpZiAobV9zdGF0ZSAhPSBT
dGF0ZTo6SW5pdGlhbCkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMDEsNyArMTAzLDcgQEAg
Ym9vbCBCQlFQbGFuOjpwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKCkKICAgICAgICAgc3RhcnRUaW1l
ID0gTW9ub3RvbmljVGltZTo6bm93KCk7CiAKICAgICB7Ci0gICAgICAgIE1vZHVsZVBhcnNlciBt
b2R1bGVQYXJzZXIobV9zb3VyY2UsIG1fc291cmNlTGVuZ3RoLCBtX21vZHVsZUluZm9ybWF0aW9u
KTsKKyAgICAgICAgTW9kdWxlUGFyc2VyIG1vZHVsZVBhcnNlcihzb3VyY2UsIHNvdXJjZUxlbmd0
aCwgbV9tb2R1bGVJbmZvcm1hdGlvbik7CiAgICAgICAgIGF1dG8gcGFyc2VSZXN1bHQgPSBtb2R1
bGVQYXJzZXIucGFyc2UoKTsKICAgICAgICAgaWYgKCFwYXJzZVJlc3VsdCkgewogICAgICAgICAg
ICAgQmFzZTo6ZmFpbChob2xkTG9jayhtX2xvY2spLCBXVEZNb3ZlKHBhcnNlUmVzdWx0LmVycm9y
KCkpKTsKQEAgLTEwOSwyMCArMTExLDIxIEBAIGJvb2wgQkJRUGxhbjo6cGFyc2VBbmRWYWxpZGF0
ZU1vZHVsZSgpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBjb25zdCBhdXRvJiBmdW5jdGlvbkxv
Y2F0aW9ucyA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeTsK
LSAgICBmb3IgKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXggPSAwOyBmdW5jdGlvbkluZGV4IDwgZnVu
Y3Rpb25Mb2NhdGlvbnMuc2l6ZSgpOyArK2Z1bmN0aW9uSW5kZXgpIHsKLSAgICAgICAgZGF0YUxv
Z0xuSWYoV2FzbUJCUVBsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIlByb2Nlc3NpbmcgZnVuY3Rpb24g
c3RhcnRpbmcgYXQ6ICIsIGZ1bmN0aW9uTG9jYXRpb25zW2Z1bmN0aW9uSW5kZXhdLnN0YXJ0LCAi
IGFuZCBlbmRpbmcgYXQ6ICIsIGZ1bmN0aW9uTG9jYXRpb25zW2Z1bmN0aW9uSW5kZXhdLmVuZCk7
Ci0gICAgICAgIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQgPSBtX3NvdXJjZSArIGZ1bmN0
aW9uTG9jYXRpb25zW2Z1bmN0aW9uSW5kZXhdLnN0YXJ0OwotICAgICAgICBzaXplX3QgZnVuY3Rp
b25MZW5ndGggPSBmdW5jdGlvbkxvY2F0aW9uc1tmdW5jdGlvbkluZGV4XS5lbmQgLSBmdW5jdGlv
bkxvY2F0aW9uc1tmdW5jdGlvbkluZGV4XS5zdGFydDsKLSAgICAgICAgQVNTRVJUKGZ1bmN0aW9u
TGVuZ3RoIDw9IG1fc291cmNlTGVuZ3RoKTsKKyAgICBjb25zdCBhdXRvJiBmdW5jdGlvbnMgPSBt
X21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbnM7CisgICAgZm9yICh1bnNpZ25lZCBmdW5jdGlv
bkluZGV4ID0gMDsgZnVuY3Rpb25JbmRleCA8IGZ1bmN0aW9ucy5zaXplKCk7ICsrZnVuY3Rpb25J
bmRleCkgeworICAgICAgICBjb25zdCBhdXRvJiBmdW5jdGlvbiA9IGZ1bmN0aW9uc1tmdW5jdGlv
bkluZGV4XTsKKyAgICAgICAgZGF0YUxvZ0xuSWYoV2FzbUJCUVBsYW5JbnRlcm5hbDo6dmVyYm9z
ZSwgIlByb2Nlc3NpbmcgZnVuY3Rpb24gc3RhcnRpbmcgYXQ6ICIsIGZ1bmN0aW9uLnN0YXJ0LCAi
IGFuZCBlbmRpbmcgYXQ6ICIsIGZ1bmN0aW9uLmVuZCk7CisgICAgICAgIHNpemVfdCBmdW5jdGlv
bkxlbmd0aCA9IGZ1bmN0aW9uLmVuZCAtIGZ1bmN0aW9uLnN0YXJ0OworICAgICAgICBBU1NFUlQo
ZnVuY3Rpb25MZW5ndGggPD0gc291cmNlTGVuZ3RoKTsKKyAgICAgICAgQVNTRVJUKGZ1bmN0aW9u
TGVuZ3RoID09IGZ1bmN0aW9uLmRhdGEuc2l6ZSgpKTsKICAgICAgICAgU2lnbmF0dXJlSW5kZXgg
c2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2ln
bmF0dXJlSW5kaWNlc1tmdW5jdGlvbkluZGV4XTsKICAgICAgICAgY29uc3QgU2lnbmF0dXJlJiBz
aWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKIAot
ICAgICAgICBhdXRvIHZhbGlkYXRpb25SZXN1bHQgPSB2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9u
U3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0
KCkpOworICAgICAgICBhdXRvIHZhbGlkYXRpb25SZXN1bHQgPSB2YWxpZGF0ZUZ1bmN0aW9uKGZ1
bmN0aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRhLnNpemUoKSwgc2lnbmF0dXJlLCBtX21v
ZHVsZUluZm9ybWF0aW9uLmdldCgpKTsKICAgICAgICAgaWYgKCF2YWxpZGF0aW9uUmVzdWx0KSB7
CiAgICAgICAgICAgICBpZiAoV2FzbUJCUVBsYW5JbnRlcm5hbDo6dmVyYm9zZSkgewogICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmdW5jdGlvbkxlbmd0aDsgKytpKQot
ICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIocmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oZnVuY3Rpb25TdGFydFtpXSkpLCAiLCAiKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZyhSYXdQb2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGZ1bmN0aW9uLmRhdGFbaV0p
KSwgIiwgIik7CiAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBCYXNlOjpmYWlsKGhvbGRMb2NrKG1fbG9jayksIG1ha2VTdHJpbmcodmFsaWRh
dGlvblJlc3VsdC5lcnJvcigpLCAiLCBpbiBmdW5jdGlvbiBhdCBpbmRleCAiLCBTdHJpbmc6Om51
bWJlcihmdW5jdGlvbkluZGV4KSkpOyAvLyBGSVhNRSBtYWtlIHRoaXMgYW4gRXhwZWN0ZWQuCkBA
IC0xNTYsMTggKzE1OSwxOCBAQCB2b2lkIEJCUVBsYW46OnByZXBhcmUoKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9OwogCi0gICAgY29uc3QgYXV0byYgZnVuY3Rpb25Mb2NhdGlvbnMgPSBt
X21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnk7CisgICAgY29uc3Qg
YXV0byYgZnVuY3Rpb25zID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25zOwogICAgIGlm
ICghdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fd2FzbVRvV2FzbUV4aXRTdHVicywgbV9tb2R1bGVJbmZv
cm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKSwgIiBXZWJBc3Nl
bWJseSB0byBKYXZhU2NyaXB0IHN0dWJzIikKLSAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0
eShtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5jdGlvbkxvY2F0aW9ucy5zaXplKCksICIg
dW5saW5rZWQgV2ViQXNzZW1ibHkgdG8gV2ViQXNzZW1ibHkgY2FsbHMiKQotICAgICAgICB8fCAh
dHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fd2FzbUludGVybmFsRnVuY3Rpb25zLCBmdW5jdGlvbkxvY2F0
aW9ucy5zaXplKCksICIgV2ViQXNzZW1ibHkgZnVuY3Rpb25zIikKLSAgICAgICAgfHwgIXRyeVJl
c2VydmVDYXBhY2l0eShtX2NvbXBpbGF0aW9uQ29udGV4dHMsIGZ1bmN0aW9uTG9jYXRpb25zLnNp
emUoKSwgIiBjb21waWxhdGlvbiBjb250ZXh0cyIpCi0gICAgICAgIHx8ICF0cnlSZXNlcnZlQ2Fw
YWNpdHkobV90aWVyVXBDb3VudHMsIGZ1bmN0aW9uTG9jYXRpb25zLnNpemUoKSwgIiB0aWVyLXVw
IGNvdW50cyIpKQorICAgICAgICB8fCAhdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fdW5saW5rZWRXYXNt
VG9XYXNtQ2FsbHMsIGZ1bmN0aW9ucy5zaXplKCksICIgdW5saW5rZWQgV2ViQXNzZW1ibHkgdG8g
V2ViQXNzZW1ibHkgY2FsbHMiKQorICAgICAgICB8fCAhdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fd2Fz
bUludGVybmFsRnVuY3Rpb25zLCBmdW5jdGlvbnMuc2l6ZSgpLCAiIFdlYkFzc2VtYmx5IGZ1bmN0
aW9ucyIpCisgICAgICAgIHx8ICF0cnlSZXNlcnZlQ2FwYWNpdHkobV9jb21waWxhdGlvbkNvbnRl
eHRzLCBmdW5jdGlvbnMuc2l6ZSgpLCAiIGNvbXBpbGF0aW9uIGNvbnRleHRzIikKKyAgICAgICAg
fHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX3RpZXJVcENvdW50cywgZnVuY3Rpb25zLnNpemUoKSwg
IiB0aWVyLXVwIGNvdW50cyIpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3VubGlua2VkV2Fz
bVRvV2FzbUNhbGxzLnJlc2l6ZShmdW5jdGlvbkxvY2F0aW9ucy5zaXplKCkpOwotICAgIG1fd2Fz
bUludGVybmFsRnVuY3Rpb25zLnJlc2l6ZShmdW5jdGlvbkxvY2F0aW9ucy5zaXplKCkpOwotICAg
IG1fY29tcGlsYXRpb25Db250ZXh0cy5yZXNpemUoZnVuY3Rpb25Mb2NhdGlvbnMuc2l6ZSgpKTsK
LSAgICBtX3RpZXJVcENvdW50cy5yZXNpemUoZnVuY3Rpb25Mb2NhdGlvbnMuc2l6ZSgpKTsKKyAg
ICBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLnJlc2l6ZShmdW5jdGlvbnMuc2l6ZSgpKTsKKyAg
ICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5yZXNpemUoZnVuY3Rpb25zLnNpemUoKSk7CisgICAg
bV9jb21waWxhdGlvbkNvbnRleHRzLnJlc2l6ZShmdW5jdGlvbnMuc2l6ZSgpKTsKKyAgICBtX3Rp
ZXJVcENvdW50cy5yZXNpemUoZnVuY3Rpb25zLnNpemUoKSk7CiAKICAgICBmb3IgKHVuc2lnbmVk
IGltcG9ydEluZGV4ID0gMDsgaW1wb3J0SW5kZXggPCBtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBv
cnRzLnNpemUoKTsgKytpbXBvcnRJbmRleCkgewogICAgICAgICBJbXBvcnQqIGltcG9ydCA9ICZt
X21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRzW2ltcG9ydEluZGV4XTsKQEAgLTI0MSw3ICsyNDQs
NyBAQCB2b2lkIEJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbnMoQ29tcGlsYXRpb25FZmZvcnQgZWZm
b3J0KQogICAgIFRocmVhZENvdW50SG9sZGVyIGhvbGRlcigqdGhpcyk7CiAKICAgICBzaXplX3Qg
Ynl0ZXNDb21waWxlZCA9IDA7Ci0gICAgY29uc3QgYXV0byYgZnVuY3Rpb25Mb2NhdGlvbnMgPSBt
X21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnk7CisgICAgY29uc3Qg
YXV0byYgZnVuY3Rpb25zID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25zOwogICAgIHdo
aWxlICh0cnVlKSB7CiAgICAgICAgIGlmIChlZmZvcnQgPT0gUGFydGlhbCAmJiBieXRlc0NvbXBp
bGVkID49IE9wdGlvbnM6OndlYkFzc2VtYmx5UGFydGlhbENvbXBpbGVMaW1pdCgpKQogICAgICAg
ICAgICAgcmV0dXJuOwpAQCAtMjQ5LDcgKzI1Miw3IEBAIHZvaWQgQkJRUGxhbjo6Y29tcGlsZUZ1
bmN0aW9ucyhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAgICAgICAgIHVpbnQzMl90IGZ1bmN0
aW9uSW5kZXg7CiAgICAgICAgIHsKICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
bV9sb2NrKTsKLSAgICAgICAgICAgIGlmIChtX2N1cnJlbnRJbmRleCA+PSBmdW5jdGlvbkxvY2F0
aW9ucy5zaXplKCkpIHsKKyAgICAgICAgICAgIGlmIChtX2N1cnJlbnRJbmRleCA+PSBmdW5jdGlv
bnMuc2l6ZSgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGhhc1dvcmsoKSkKICAgICAgICAgICAg
ICAgICAgICAgbW92ZVRvU3RhdGUoU3RhdGU6OkNvbXBpbGVkKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm47CkBAIC0yNTgsMTggKzI2MSwxNiBAQCB2b2lkIEJCUVBsYW46OmNvbXBpbGVGdW5jdGlv
bnMoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogICAgICAgICAgICAgKyttX2N1cnJlbnRJbmRl
eDsKICAgICAgICAgfQogCi0gICAgICAgIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQgPSBt
X3NvdXJjZSArIGZ1bmN0aW9uTG9jYXRpb25zW2Z1bmN0aW9uSW5kZXhdLnN0YXJ0OwotICAgICAg
ICBzaXplX3QgZnVuY3Rpb25MZW5ndGggPSBmdW5jdGlvbkxvY2F0aW9uc1tmdW5jdGlvbkluZGV4
XS5lbmQgLSBmdW5jdGlvbkxvY2F0aW9uc1tmdW5jdGlvbkluZGV4XS5zdGFydDsKLSAgICAgICAg
QVNTRVJUKGZ1bmN0aW9uTGVuZ3RoIDw9IG1fc291cmNlTGVuZ3RoKTsKKyAgICAgICAgY29uc3Qg
YXV0byYgZnVuY3Rpb24gPSBmdW5jdGlvbnNbZnVuY3Rpb25JbmRleF07CiAgICAgICAgIFNpZ25h
dHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxG
dW5jdGlvblNpZ25hdHVyZUluZGljZXNbZnVuY3Rpb25JbmRleF07CiAgICAgICAgIGNvbnN0IFNp
Z25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJ
bmRleCk7CiAgICAgICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSA9IG1fd2FzbVRvV2Fz
bUV4aXRTdHVicy5zaXplKCkgKyBmdW5jdGlvbkluZGV4OwogICAgICAgICBBU1NFUlRfVU5VU0VE
KGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+c2lnbmF0dXJlSW5kZXhG
cm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhTcGFjZSkgPT0gc2lnbmF0dXJlSW5k
ZXgpOwotICAgICAgICBBU1NFUlQodmFsaWRhdGVGdW5jdGlvbihmdW5jdGlvblN0YXJ0LCBmdW5j
dGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpKSk7CisgICAg
ICAgIEFTU0VSVCh2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlv
bi5kYXRhLnNpemUoKSwgc2lnbmF0dXJlLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpKSk7CiAK
ICAgICAgICAgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSA9IFZlY3Rv
cjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPigpOwogICAgICAgICBUaWVyVXBDb3VudCogdGllclVw
ID0gT3B0aW9uczo6dXNlQkJRVGllclVwQ2hlY2tzKCkgPyAmbV90aWVyVXBDb3VudHNbZnVuY3Rp
b25JbmRleF0gOiBudWxscHRyOwotICAgICAgICBhdXRvIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9
IHBhcnNlQW5kQ29tcGlsZShtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0sIGZ1
bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIG1fdW5saW5rZWRXYXNtVG9X
YXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9k
ZSwgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBmdW5jdGlvbkluZGV4LCB0aWVyVXAsIG1fdGhy
b3dXYXNtRXhjZXB0aW9uKTsKKyAgICAgICAgYXV0byBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBw
YXJzZUFuZENvbXBpbGUobV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBmdW5j
dGlvbi5kYXRhLmRhdGEoKSwgZnVuY3Rpb24uZGF0YS5zaXplKCksIHNpZ25hdHVyZSwgbV91bmxp
bmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5n
ZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRp
ZXJVcCwgbV90aHJvd1dhc21FeGNlcHRpb24pOwogCiAgICAgICAgIGlmIChVTkxJS0VMWSghcGFy
c2VBbmRDb21waWxlUmVzdWx0KSkgewogICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
ayhtX2xvY2spOwpAQCAtMjc3LDcgKzI3OCw3IEBAIHZvaWQgQkJRUGxhbjo6Y29tcGlsZUZ1bmN0
aW9ucyhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAgICAgICAgICAgICAgICAgLy8gTXVsdGlw
bGUgY29tcGlsZXMgY291bGQgZmFpbCBzaW11bHRhbmVvdXNseS4gV2UgYXJiaXRyYXJpbHkgY2hv
b3NlIHRoZSBmaXJzdC4KICAgICAgICAgICAgICAgICBmYWlsKGxvY2tlciwgbWFrZVN0cmluZyhw
YXJzZUFuZENvbXBpbGVSZXN1bHQuZXJyb3IoKSwgIiwgaW4gZnVuY3Rpb24gYXQgaW5kZXggIiwg
U3RyaW5nOjpudW1iZXIoZnVuY3Rpb25JbmRleCkpKTsgLy8gRklYTUUgbWFrZSB0aGlzIGFuIEV4
cGVjdGVkLgogICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9jdXJyZW50SW5kZXggPSBmdW5j
dGlvbkxvY2F0aW9ucy5zaXplKCk7CisgICAgICAgICAgICBtX2N1cnJlbnRJbmRleCA9IGZ1bmN0
aW9ucy5zaXplKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMjg5LDE3
ICsyOTAsMTcgQEAgdm9pZCBCQlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKENvbXBpbGF0aW9uRWZm
b3J0IGVmZm9ydCkKICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNO
ZXdFbnRyeSk7CiAgICAgICAgIH0KIAotICAgICAgICBieXRlc0NvbXBpbGVkICs9IGZ1bmN0aW9u
TGVuZ3RoOworICAgICAgICBieXRlc0NvbXBpbGVkICs9IGZ1bmN0aW9uLmRhdGEuc2l6ZSgpOwog
ICAgIH0KIH0KIAogdm9pZCBCQlFQbGFuOjpjb21wbGV0ZShjb25zdCBBYnN0cmFjdExvY2tlciYg
bG9ja2VyKQogewotICAgIEFTU0VSVChtX3N0YXRlICE9IFN0YXRlOjpDb21waWxlZCB8fCBtX2N1
cnJlbnRJbmRleCA+PSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbkxvY2F0aW9uSW5CaW5h
cnkuc2l6ZSgpKTsKKyAgICBBU1NFUlQobV9zdGF0ZSAhPSBTdGF0ZTo6Q29tcGlsZWQgfHwgbV9j
dXJyZW50SW5kZXggPj0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25zLnNpemUoKSk7CiAg
ICAgZGF0YUxvZ0xuSWYoV2FzbUJCUVBsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIlN0YXJ0aW5nIENv
bXBsZXRpb24iKTsKIAogICAgIGlmICghZmFpbGVkKCkgJiYgbV9zdGF0ZSA9PSBTdGF0ZTo6Q29t
cGlsZWQpIHsKLSAgICAgICAgZm9yICh1aW50MzJfdCBmdW5jdGlvbkluZGV4ID0gMDsgZnVuY3Rp
b25JbmRleCA8IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5z
aXplKCk7IGZ1bmN0aW9uSW5kZXgrKykgeworICAgICAgICBmb3IgKHVpbnQzMl90IGZ1bmN0aW9u
SW5kZXggPSAwOyBmdW5jdGlvbkluZGV4IDwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25z
LnNpemUoKTsgZnVuY3Rpb25JbmRleCsrKSB7CiAgICAgICAgICAgICBDb21waWxhdGlvbkNvbnRl
eHQmIGNvbnRleHQgPSBtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF07CiAgICAg
ICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRp
b24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0aW9uSW5kZXhdOwogICAg
ICAgICAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlv
bjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKQEAgLTM1MSw3ICszNTIsNyBAQCB2b2lkIEJCUVBsYW46
OndvcmsoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewogICAgIHN3aXRjaCAobV9zdGF0ZSkg
ewogICAgIGNhc2UgU3RhdGU6OkluaXRpYWw6Ci0gICAgICAgIHBhcnNlQW5kVmFsaWRhdGVNb2R1
bGUoKTsKKyAgICAgICAgcGFyc2VBbmRWYWxpZGF0ZU1vZHVsZShtX3NvdXJjZS5kYXRhKCksIG1f
c291cmNlLnNpemUoKSk7CiAgICAgICAgIGlmICghaGFzV29yaygpKSB7CiAgICAgICAgICAgICBB
U1NFUlQoaXNDb21wbGV0ZSgpKTsKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oCmluZGV4IGQ4ODE0NWQ3ZGRkYmQ2YjE5MTA1Nzc4MTdj
ZTdjYjhkYjQxMjFkMWUuLjk0MWFjNzVmNzBlNmY5MTFiOWZiYjNkZGIxMzc4Y2NmOTY5OTQxYWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaApAQCAtNTIsMTEgKzUy
LDE0IEBAIGNsYXNzIEJCUVBsYW4gZmluYWwgOiBwdWJsaWMgUGxhbiB7CiAgICAgLy8gTm90ZTog
Q29tcGxldGlvblRhc2sgc2hvdWxkIG5vdCBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBQbGFuIG90
aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGEgcmVmZXJlbmNlIGN5Y2xlLgogICAgIEJCUVBsYW4oQ29u
dGV4dCosIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4sIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2sm
JiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4Y2VwdGlvbik7CiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgQkJRUGxhbihDb250ZXh0KiwgVmVjdG9yPHVpbnQ4X3Q+JiYsIEFzeW5j
V29yaywgQ29tcGxldGlvblRhc2smJiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93V2Fz
bUV4Y2VwdGlvbik7Ci0gICAgLy8gTm90ZTogVGhpcyBjb25zdHJ1Y3RvciBzaG91bGQgb25seSBi
ZSB1c2VkIGlmIHlvdSBhcmUgbm90IGFjdHVhbGx5IGJ1aWxkaW5nIGEgbW9kdWxlIGUuZy4gdmFs
aWRhdGlvbi9mdW5jdGlvbiB0ZXN0cwotICAgIC8vIEZJWE1FOiBXaGVuIHdlIGdldCByaWQgb2Yg
ZnVuY3Rpb24gdGVzdHMgd2Ugc2hvdWxkIHJlbW92ZSBBc3luY1dvcmsgZnJvbSB0aGlzIGNvbnN0
cnVjdG9yLgotICAgIEpTX0VYUE9SVF9QUklWQVRFIEJCUVBsYW4oQ29udGV4dCosIGNvbnN0IHVp
bnQ4X3QqLCBzaXplX3QsIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJik7CisgICAgQkJRUGxh
bihDb250ZXh0KiwgQXN5bmNXb3JrLCBDb21wbGV0aW9uVGFzayYmKTsKIAotICAgIGJvb2wgcGFy
c2VBbmRWYWxpZGF0ZU1vZHVsZSgpOworCisgICAgYm9vbCBwYXJzZUFuZFZhbGlkYXRlTW9kdWxl
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKG1fc291cmNl
LmRhdGEoKSwgbV9zb3VyY2Uuc2l6ZSgpKTsKKyAgICB9CisgICAgYm9vbCBwYXJzZUFuZFZhbGlk
YXRlTW9kdWxlKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBwcmVwYXJlKCk7CiAgICAgdm9pZCBjb21waWxlRnVuY3Rpb25zKENvbXBpbGF0aW9u
RWZmb3J0KTsKQEAgLTEzNiw2ICsxMzksNyBAQCBjbGFzcyBCQlFQbGFuIGZpbmFsIDogcHVibGlj
IFBsYW4gewogCiAgICAgY29uc3QgY2hhciogc3RhdGVTdHJpbmcoU3RhdGUpOwogICAgIAorICAg
IFZlY3Rvcjx1aW50OF90PiBtX3NvdXJjZTsKICAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2NhbGxM
aW5rSW5mb3M7CiAgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJU
YWc+PiBtX3dhc21Ub1dhc21FeGl0U3R1YnM7CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxJ
bnRlcm5hbEZ1bmN0aW9uPj4gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnM7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKaW5kZXggMjc4NGU5MGFmMzg0MWEwMmU1ODczMzMyY2Zm
OGJiMDY0ODdlMzNkZS4uZTQzZjRlZDkzNjE2N2ZmMjkzOGQ4MzdhMGNlMDg4ZDQzZDIwYTRlNiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaApAQCAtMTQwLDkgKzE0MCwx
MCBAQCBzdHJ1Y3QgR2xvYmFsIHsKICAgICB1aW50NjRfdCBpbml0aWFsQml0c09ySW1wb3J0TnVt
YmVyIHsgMCB9OwogfTsKIAotc3RydWN0IEZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeSB7CitzdHJ1
Y3QgRnVuY3Rpb25EYXRhIHsKICAgICBzaXplX3Qgc3RhcnQ7CiAgICAgc2l6ZV90IGVuZDsKKyAg
ICBWZWN0b3I8dWludDhfdD4gZGF0YTsKIH07CiAKIGNsYXNzIEkzMkluaXRFeHByIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uY3Bw
CmluZGV4IGNiOGRiMGUwOTNmOTRjZGEzMTZkZDI0YmFmMzllNTEyZWRhMjAzMTQuLjhhMjU0YzAw
MmZiZTllZjkwY2VmMWFiZGZjNDE2OWMxZTQ2YzUzZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmNwcApAQCAtMzEsMjEgKzMx
LDEwIEBACiAjaW5jbHVkZSAiV2FzbU5hbWVTZWN0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL1NIQTEu
aD4KIAotbmFtZXNwYWNlIHsKLUNTdHJpbmcgc2hhMShjb25zdCBWZWN0b3I8dWludDhfdD4mIGlu
cHV0KQotewotICAgIFNIQTEgaGFzaDsKLSAgICBoYXNoLmFkZEJ5dGVzKGlucHV0KTsKLSAgICBy
ZXR1cm4gaGFzaC5jb21wdXRlSGV4RGlnZXN0KCk7Ci19Ci19Ci0KIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgV2FzbSB7CiAKLU1vZHVsZUluZm9ybWF0aW9uOjpNb2R1bGVJbmZvcm1hdGlvbihW
ZWN0b3I8dWludDhfdD4mJiBzb3VyY2VCeXRlcykKLSAgICA6IHNvdXJjZShXVEZNb3ZlKHNvdXJj
ZUJ5dGVzKSkKLSAgICAsIGhhc2goT3B0aW9uczo6dXNlRWFnZXJXZWJBc3NlbWJseU1vZHVsZUhh
c2hpbmcoKSA/IHN0ZDo6bWFrZV9vcHRpb25hbChzaGExKHNvdXJjZSkpIDogc3RkOjpudWxsb3B0
KQotICAgICwgbmFtZVNlY3Rpb24obmV3IE5hbWVTZWN0aW9uKGhhc2gpKQorTW9kdWxlSW5mb3Jt
YXRpb246Ok1vZHVsZUluZm9ybWF0aW9uKCkKKyAgICA6IG5hbWVTZWN0aW9uKE5hbWVTZWN0aW9u
OjpjcmVhdGUoKSkKIHsKIH0KIE1vZHVsZUluZm9ybWF0aW9uOjp+TW9kdWxlSW5mb3JtYXRpb24o
KSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJ
bmZvcm1hdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9y
bWF0aW9uLmgKaW5kZXggMGJhYjU3ZTA3MGQyZWEzMzA2MmYzNjM2NThhMjQxNWU5YmQ1MWUyZC4u
ZmI1ZTNhMGNkZWQ0ZTczODAyNDMwM2JlNWUwZjU2N2FmNTViYTAyNSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgKQEAgLTM0LDEx
ICszNCwxNCBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAogc3RydWN0IE1v
ZHVsZUluZm9ybWF0aW9uIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPE1vZHVsZUluZm9y
bWF0aW9uPiB7Ci0gICAgTW9kdWxlSW5mb3JtYXRpb24oKSA9IGRlbGV0ZTsKKyAgICBNb2R1bGVJ
bmZvcm1hdGlvbigpOwogICAgIE1vZHVsZUluZm9ybWF0aW9uKGNvbnN0IE1vZHVsZUluZm9ybWF0
aW9uJikgPSBkZWxldGU7CiAgICAgTW9kdWxlSW5mb3JtYXRpb24oTW9kdWxlSW5mb3JtYXRpb24m
JikgPSBkZWxldGU7CiAKLSAgICBNb2R1bGVJbmZvcm1hdGlvbihWZWN0b3I8dWludDhfdD4mJiBz
b3VyY2VCeXRlcyk7CisgICAgc3RhdGljIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4gY3JlYXRlKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE1vZHVsZUluZm9ybWF0aW9uKTsK
KyAgICB9CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB+TW9kdWxlSW5mb3JtYXRpb24oKTsKICAg
ICAKQEAgLTU4LDggKzYxLDggQEAgc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uIDogcHVibGljIFRo
cmVhZFNhZmVSZWZDb3VudGVkPE1vZHVsZUluZm9ybWF0aW9uPiB7CiAgICAgdWludDMyX3QgaW1w
b3J0RnVuY3Rpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJuIGltcG9ydEZ1bmN0aW9uU2lnbmF0dXJl
SW5kaWNlcy5zaXplKCk7IH0KICAgICB1aW50MzJfdCBpbnRlcm5hbEZ1bmN0aW9uQ291bnQoKSBj
b25zdCB7IHJldHVybiBpbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7IH0K
IAotICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiBzb3VyY2U7Ci0gICAgY29uc3Qgc3RkOjpvcHRp
b25hbDxDU3RyaW5nPiBoYXNoOworICAgIHVpbnQzMl90IG1lbW9yeUNvdW50KCkgY29uc3QgeyBy
ZXR1cm4gbWVtb3J5ID8gMSA6IDA7IH0KKyAgICB1aW50MzJfdCB0YWJsZUNvdW50KCkgY29uc3Qg
eyByZXR1cm4gdGFibGVJbmZvcm1hdGlvbiA/IDEgOiAwOyB9CiAKICAgICBWZWN0b3I8SW1wb3J0
PiBpbXBvcnRzOwogICAgIFZlY3RvcjxTaWduYXR1cmVJbmRleD4gaW1wb3J0RnVuY3Rpb25TaWdu
YXR1cmVJbmRpY2VzOwpAQCAtNjgsNyArNzEsNyBAQCBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24g
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TW9kdWxlSW5mb3JtYXRpb24+IHsKIAogICAg
IE1lbW9yeUluZm9ybWF0aW9uIG1lbW9yeTsKIAotICAgIFZlY3RvcjxGdW5jdGlvbkxvY2F0aW9u
SW5CaW5hcnk+IGZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeTsKKyAgICBWZWN0b3I8RnVuY3Rpb25E
YXRhPiBmdW5jdGlvbnM7CiAKICAgICBWZWN0b3I8RXhwb3J0PiBleHBvcnRzOwogICAgIHN0ZDo6
b3B0aW9uYWw8dWludDMyX3Q+IHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlOwpAQCAtNzgsNyArODEs
NyBAQCBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50
ZWQ8TW9kdWxlSW5mb3JtYXRpb24+IHsKICAgICBWZWN0b3I8R2xvYmFsPiBnbG9iYWxzOwogICAg
IHVuc2lnbmVkIGZpcnN0SW50ZXJuYWxHbG9iYWwgeyAwIH07CiAgICAgVmVjdG9yPEN1c3RvbVNl
Y3Rpb24+IGN1c3RvbVNlY3Rpb25zOwotICAgIFJlZlB0cjxOYW1lU2VjdGlvbj4gbmFtZVNlY3Rp
b247CisgICAgUmVmPE5hbWVTZWN0aW9uPiBuYW1lU2VjdGlvbjsKIH07CiAKICAgICAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKaW5kZXggZjAz
ZTY5ODdmNGE1MDI1OTFkZjcxZGM4MTU3ODIwODA5OTYxMzhiNC4uYThlZDhkMmU2YjE5Yzk1ZjY3
MWZmY2JjNTQ3ODNkYTc0YzY1MDgwZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU1vZHVsZVBhcnNlci5jcHAKQEAgLTMyLDE4ICszMiwxMSBAQAogI2luY2x1ZGUgIldh
c21NZW1vcnlJbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUgIldhc21OYW1lU2VjdGlvblBhcnNlci5o
IgogI2luY2x1ZGUgIldhc21PcHMuaCIKKyNpbmNsdWRlICJXYXNtU2VjdGlvblBhcnNlci5oIgog
I2luY2x1ZGUgIldhc21TZWN0aW9ucy5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdh
c20gewogCi1BTFdBWVNfSU5MSU5FIEkzMkluaXRFeHByIG1ha2VJMzJJbml0RXhwcih1aW50OF90
IG9wY29kZSwgdWludDMyX3QgYml0cykKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChvcGNvZGUgPT0g
STMyQ29uc3QgfHwgb3Bjb2RlID09IEdldEdsb2JhbCk7Ci0gICAgaWYgKG9wY29kZSA9PSBJMzJD
b25zdCkKLSAgICAgICAgcmV0dXJuIEkzMkluaXRFeHByOjpjb25zdFZhbHVlKGJpdHMpOwotICAg
IHJldHVybiBJMzJJbml0RXhwcjo6Z2xvYmFsSW1wb3J0KGJpdHMpOwotfQotCiBhdXRvIE1vZHVs
ZVBhcnNlcjo6cGFyc2UoKSAtPiBSZXN1bHQKIHsKICAgICBjb25zdCBzaXplX3QgbWluU2l6ZSA9
IDg7CkBAIC03MSwxOSArNjQsMTkgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlKCkgLT4gUmVz
dWx0CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKHNlY3Rpb25M
ZW5ndGgpLCAiY2FuJ3QgZ2V0ICIsIHNlY3Rpb24sICIgc2VjdGlvbidzIGxlbmd0aCIpOwogICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHNlY3Rpb25MZW5ndGggPiBsZW5ndGgoKSAtIG1fb2Zm
c2V0LCBzZWN0aW9uLCAiIHNlY3Rpb24gb2Ygc2l6ZSAiLCBzZWN0aW9uTGVuZ3RoLCAiIHdvdWxk
IG92ZXJmbG93IE1vZHVsZSdzIHNpemUiKTsKIAotICAgICAgICBhdXRvIGVuZCA9IG1fb2Zmc2V0
ICsgc2VjdGlvbkxlbmd0aDsKKyAgICAgICAgU2VjdGlvblBhcnNlciBwYXJzZXIoc291cmNlKCkg
KyBtX29mZnNldCwgc2VjdGlvbkxlbmd0aCwgbV9vZmZzZXQsIG1faW5mby5nZXQoKSk7CiAKICAg
ICAgICAgc3dpdGNoIChzZWN0aW9uKSB7CiAjZGVmaW5lIFdBU01fU0VDVElPTl9QQVJTRShOQU1F
LCBJRCwgREVTQ1JJUFRJT04pICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgY2FzZSBTZWN0
aW9uOjpOQU1FOiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZSAjIyBOQU1FKCkpOyAgICAg
ICAgICAgICBcCisgICAgICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlci5w
YXJzZSAjIyBOQU1FKCkpOyAgICAgICAgICAgICBcCiAgICAgICAgICAgICBicmVhazsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgfQog
ICAgICAgICBGT1JfRUFDSF9LTk9XTl9XQVNNX1NFQ1RJT04oV0FTTV9TRUNUSU9OX1BBUlNFKQog
I3VuZGVmIFdBU01fU0VDVElPTl9QQVJTRQogCiAgICAgICAgIGNhc2UgU2VjdGlvbjo6Q3VzdG9t
OiB7Ci0gICAgICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlQ3VzdG9tKHNl
Y3Rpb25MZW5ndGgpKTsKKyAgICAgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFy
c2VyLnBhcnNlQ3VzdG9tKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAt
OTMsNTM4ICs4NiwyNCBAQCBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2UoKSAtPiBSZXN1bHQKICAg
ICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihlbmQgIT0g
bV9vZmZzZXQsICJwYXJzaW5nIGVuZGVkIGJlZm9yZSB0aGUgZW5kIG9mICIsIHNlY3Rpb24sICIg
c2VjdGlvbiIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHBhcnNlci5sZW5ndGgoKSAh
PSBwYXJzZXIub2Zmc2V0KCksICJwYXJzaW5nIGVuZGVkIGJlZm9yZSB0aGUgZW5kIG9mICIsIHNl
Y3Rpb24sICIgc2VjdGlvbiIpOworCisgICAgICAgIG1fb2Zmc2V0ICs9IHNlY3Rpb25MZW5ndGg7
CiAKIAogICAgICAgICBpZiAoaXNLbm93blNlY3Rpb24oc2VjdGlvbikpCiAgICAgICAgICAgICBw
cmV2aW91c0tub3duU2VjdGlvbiA9IHNlY3Rpb247CiAgICAgfQogCi0gICAgcmV0dXJuIHsgfTsK
LX0KLQotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlVHlwZSgpIC0+IFBhcnRpYWxSZXN1bHQKLXsK
LSAgICB1aW50MzJfdCBjb3VudDsKLQotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFy
VUludDMyKGNvdW50KSwgImNhbid0IGdldCBUeXBlIHNlY3Rpb24ncyBjb3VudCIpOwotICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoY291bnQgPiBtYXhUeXBlcywgIlR5cGUgc2VjdGlvbidzIGNvdW50
IGlzIHRvbyBiaWcgIiwgY291bnQsICIgbWF4aW11bSAiLCBtYXhUeXBlcyk7Ci0gICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighbV9pbmZvLT51c2VkU2lnbmF0dXJlcy50cnlSZXNlcnZlQ2FwYWNpdHko
Y291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgVHlwZSBzZWN0aW9uJ3Mg
IiwgY291bnQsICIgZW50cmllcyIpOwotCi0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNv
dW50OyArK2kpIHsKLSAgICAgICAgaW50OF90IHR5cGU7Ci0gICAgICAgIHVpbnQzMl90IGFyZ3Vt
ZW50Q291bnQ7Ci0gICAgICAgIFZlY3RvcjxUeXBlPiBhcmd1bWVudFR5cGVzOwotCi0gICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlSW50Nyh0eXBlKSwgImNhbid0IGdldCAiLCBpLCAi
dGggVHlwZSdzIHR5cGUiKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0eXBlICE9IEZ1
bmMsIGksICJ0aCBUeXBlIGlzIG5vbi1GdW5jICIsIHR5cGUpOwotICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihhcmd1bWVudENvdW50KSwgImNhbid0IGdldCAiLCBp
LCAidGggVHlwZSdzIGFyZ3VtZW50IGNvdW50Iik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoYXJndW1lbnRDb3VudCA+IG1heEZ1bmN0aW9uUGFyYW1zLCBpLCAidGggYXJndW1lbnQgY291
bnQgaXMgdG9vIGJpZyAiLCBhcmd1bWVudENvdW50LCAiIG1heGltdW0gIiwgbWF4RnVuY3Rpb25Q
YXJhbXMpOwotICAgICAgICBSZWZQdHI8U2lnbmF0dXJlPiBtYXliZVNpZ25hdHVyZSA9IFNpZ25h
dHVyZTo6dHJ5Q3JlYXRlKGFyZ3VtZW50Q291bnQpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKCFtYXliZVNpZ25hdHVyZSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIFR5
cGUgc2VjdGlvbidzICIsIGksICJ0aCBzaWduYXR1cmUiKTsKLSAgICAgICAgUmVmPFNpZ25hdHVy
ZT4gc2lnbmF0dXJlID0gbWF5YmVTaWduYXR1cmUucmVsZWFzZU5vbk51bGwoKTsKLQotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytpKSB7Ci0gICAgICAg
ICAgICBUeXBlIGFyZ3VtZW50VHlwZTsKLSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlVmFsdWVUeXBlKGFyZ3VtZW50VHlwZSksICJjYW4ndCBnZXQgIiwgaSwgInRoIGFyZ3Vt
ZW50IFR5cGUiKTsKLSAgICAgICAgICAgIHNpZ25hdHVyZS0+YXJndW1lbnQoaSkgPSBhcmd1bWVu
dFR5cGU7Ci0gICAgICAgIH0KLQotICAgICAgICB1aW50OF90IHJldHVybkNvdW50OwotICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQxKHJldHVybkNvdW50KSwgImNhbid0
IGdldCAiLCBpLCAidGggVHlwZSdzIHJldHVybiBjb3VudCIpOwotICAgICAgICBUeXBlIHJldHVy
blR5cGU7Ci0gICAgICAgIGlmIChyZXR1cm5Db3VudCkgewotICAgICAgICAgICAgVHlwZSB2YWx1
ZTsKLSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFsdWVUeXBlKHZhbHVl
KSwgImNhbid0IGdldCAiLCBpLCAidGggVHlwZSdzIHJldHVybiB2YWx1ZSIpOwotICAgICAgICAg
ICAgcmV0dXJuVHlwZSA9IHN0YXRpY19jYXN0PFR5cGU+KHZhbHVlKTsKLSAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICByZXR1cm5UeXBlID0gVHlwZTo6Vm9pZDsKLSAgICAgICAgc2lnbmF0dXJl
LT5yZXR1cm5UeXBlKCkgPSByZXR1cm5UeXBlOwotCi0gICAgICAgIHN0ZDo6cGFpcjxTaWduYXR1
cmVJbmRleCwgUmVmPFNpZ25hdHVyZT4+IHJlc3VsdCA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjph
ZG9wdChXVEZNb3ZlKHNpZ25hdHVyZSkpOwotICAgICAgICBtX2luZm8tPnVzZWRTaWduYXR1cmVz
LnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKHJlc3VsdC5zZWNvbmQpKTsKLSAgICB9Ci0gICAgcmV0
dXJuIHsgfTsKLX0KLQotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlSW1wb3J0KCkgLT4gUGFydGlh
bFJlc3VsdAotewotICAgIHVpbnQzMl90IGltcG9ydENvdW50OwotICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIXBhcnNlVmFyVUludDMyKGltcG9ydENvdW50KSwgImNhbid0IGdldCBJbXBvcnQgc2Vj
dGlvbidzIGNvdW50Iik7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbXBvcnRDb3VudCA+IG1h
eEltcG9ydHMsICJJbXBvcnQgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgaW1wb3J0Q291
bnQsICIgbWF4aW11bSAiLCBtYXhJbXBvcnRzKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFt
X2luZm8tPmdsb2JhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50KSwgImNhbid0IGFs
bG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGltcG9ydENvdW50LCAiIGdsb2JhbHMiKTsgLy8g
RklYTUUgdGhpcyBvdmVyLWFsbG9jYXRlcyB3aGVuIHdlIGZpeCB0aGUgRklYTUVzIGJlbG93Lgot
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+aW1wb3J0cy50cnlSZXNlcnZlQ2FwYWNp
dHkoaW1wb3J0Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgaW1w
b3J0Q291bnQsICIgaW1wb3J0cyIpOyAvLyBGSVhNRSB0aGlzIG92ZXItYWxsb2NhdGVzIHdoZW4g
d2UgZml4IHRoZSBGSVhNRXMgYmVsb3cuCi0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZv
LT5pbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9y
dENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGltcG9ydENvdW50
LCAiIGltcG9ydCBmdW5jdGlvbiBzaWduYXR1cmVzIik7IC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxv
Y2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxvdy4KLQotICAgIGZvciAodWludDMyX3Qg
aW1wb3J0TnVtYmVyID0gMDsgaW1wb3J0TnVtYmVyIDwgaW1wb3J0Q291bnQ7ICsraW1wb3J0TnVt
YmVyKSB7Ci0gICAgICAgIHVpbnQzMl90IG1vZHVsZUxlbjsKLSAgICAgICAgdWludDMyX3QgZmll
bGRMZW47Ci0gICAgICAgIE5hbWUgbW9kdWxlU3RyaW5nOwotICAgICAgICBOYW1lIGZpZWxkU3Ry
aW5nOwotICAgICAgICBFeHRlcm5hbEtpbmQga2luZDsKLSAgICAgICAgdW5zaWduZWQga2luZElu
ZGV4IHsgMCB9OwotCi0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMy
KG1vZHVsZUxlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0J3MgbW9k
dWxlIG5hbWUgbGVuZ3RoIik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVV
VEY4U3RyaW5nKG1vZHVsZVN0cmluZywgbW9kdWxlTGVuKSwgImNhbid0IGdldCAiLCBpbXBvcnRO
dW1iZXIsICJ0aCBJbXBvcnQncyBtb2R1bGUgbmFtZSBvZiBsZW5ndGggIiwgbW9kdWxlTGVuKTsK
LQotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihmaWVsZExlbiks
ICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0J3MgZmllbGQgbmFtZSBsZW5n
dGggaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIik7Ci0gICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIWNvbnN1bWVVVEY4U3RyaW5nKGZpZWxkU3RyaW5nLCBmaWVsZExlbiksICJjYW4n
dCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0J3MgZmllbGQgbmFtZSBvZiBsZW5ndGgg
IiwgbW9kdWxlTGVuLCAiIGluIG1vZHVsZSAnIiwgbW9kdWxlU3RyaW5nLCAiJyIpOwotCi0gICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlRXh0ZXJuYWxLaW5kKGtpbmQpLCAiY2FuJ3Qg
Z2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdzIGtpbmQgaW4gbW9kdWxlICciLCBtb2R1
bGVTdHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0cmluZywgIiciKTsKLSAgICAgICAgc3dpdGNo
IChraW5kKSB7Ci0gICAgICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpGdW5jdGlvbjogewotICAgICAg
ICAgICAgdWludDMyX3QgZnVuY3Rpb25TaWduYXR1cmVJbmRleDsKLSAgICAgICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGZ1bmN0aW9uU2lnbmF0dXJlSW5kZXgpLCAi
Y2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdzIGZ1bmN0aW9uIHNpZ25hdHVy
ZSBpbiBtb2R1bGUgJyIsIG1vZHVsZVN0cmluZywgIicgZmllbGQgJyIsIGZpZWxkU3RyaW5nLCAi
JyIpOwotICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvblNpZ25hdHVyZUlu
ZGV4ID49IG1faW5mby0+dXNlZFNpZ25hdHVyZXMuc2l6ZSgpLCAiaW52YWxpZCBmdW5jdGlvbiBz
aWduYXR1cmUgZm9yICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCwgIiwgZnVuY3Rpb25TaWdu
YXR1cmVJbmRleCwgIiBpcyBvdXQgb2YgcmFuZ2Ugb2YgIiwgbV9pbmZvLT51c2VkU2lnbmF0dXJl
cy5zaXplKCksICIgaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIGZpZWxkICciLCBmaWVs
ZFN0cmluZywgIiciKTsKLSAgICAgICAgICAgIGtpbmRJbmRleCA9IG1faW5mby0+aW1wb3J0RnVu
Y3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsKLSAgICAgICAgICAgIFNpZ25hdHVyZUluZGV4
IHNpZ25hdHVyZUluZGV4ID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChtX2luZm8tPnVzZWRT
aWduYXR1cmVzW2Z1bmN0aW9uU2lnbmF0dXJlSW5kZXhdKTsKLSAgICAgICAgICAgIG1faW5mby0+
aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnVuY2hlY2tlZEFwcGVuZChzaWduYXR1cmVJ
bmRleCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEV4dGVy
bmFsS2luZDo6VGFibGU6IHsKLSAgICAgICAgICAgIGJvb2wgaXNJbXBvcnQgPSB0cnVlOwotICAg
ICAgICAgICAgUGFydGlhbFJlc3VsdCByZXN1bHQgPSBwYXJzZVRhYmxlSGVscGVyKGlzSW1wb3J0
KTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoV1RGTW92ZShyZXN1bHQuZXJyb3IoKSkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6Ok1lbW9yeTog
ewotICAgICAgICAgICAgYm9vbCBpc0ltcG9ydCA9IHRydWU7Ci0gICAgICAgICAgICBQYXJ0aWFs
UmVzdWx0IHJlc3VsdCA9IHBhcnNlTWVtb3J5SGVscGVyKGlzSW1wb3J0KTsKLSAgICAgICAgICAg
IGlmIChVTkxJS0VMWSghcmVzdWx0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoV1RGTW92ZShyZXN1bHQuZXJyb3IoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6Okdsb2JhbDogewotICAgICAgICAgICAg
R2xvYmFsIGdsb2JhbDsKLSAgICAgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFy
c2VHbG9iYWxUeXBlKGdsb2JhbCkpOwotICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihn
bG9iYWwubXV0YWJpbGl0eSA9PSBHbG9iYWw6Ok11dGFibGUsICJNdXRhYmxlIEdsb2JhbHMgYXJl
bid0IHN1cHBvcnRlZCIpOwotCi0gICAgICAgICAgICBraW5kSW5kZXggPSBtX2luZm8tPmdsb2Jh
bHMuc2l6ZSgpOwotICAgICAgICAgICAgbV9pbmZvLT5nbG9iYWxzLnVuY2hlY2tlZEFwcGVuZChX
VEZNb3ZlKGdsb2JhbCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
fQotCi0gICAgICAgIG1faW5mby0+aW1wb3J0cy51bmNoZWNrZWRBcHBlbmQoeyBXVEZNb3ZlKG1v
ZHVsZVN0cmluZyksIFdURk1vdmUoZmllbGRTdHJpbmcpLCBraW5kLCBraW5kSW5kZXggfSk7Ci0g
ICAgfQotCi0gICAgbV9pbmZvLT5maXJzdEludGVybmFsR2xvYmFsID0gbV9pbmZvLT5nbG9iYWxz
LnNpemUoKTsKLSAgICByZXR1cm4geyB9OwotfQotCi1hdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VG
dW5jdGlvbigpIC0+IFBhcnRpYWxSZXN1bHQKLXsKLSAgICB1aW50MzJfdCBjb3VudDsKLSAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihjb3VudCksICJjYW4ndCBnZXQgRnVu
Y3Rpb24gc2VjdGlvbidzIGNvdW50Iik7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRihjb3VudCA+
IG1heEZ1bmN0aW9ucywgIkZ1bmN0aW9uIHNlY3Rpb24ncyBjb3VudCBpcyB0b28gYmlnICIsIGNv
dW50LCAiIG1heGltdW0gIiwgbWF4RnVuY3Rpb25zKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFtX2luZm8tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnRyeVJlc2VydmVDYXBh
Y2l0eShjb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBjb3VudCwg
IiBGdW5jdGlvbiBzaWduYXR1cmVzIik7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZv
LT5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkudHJ5UmVzZXJ2ZUNhcGFjaXR5KGNvdW50KSwgImNh
bid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGNvdW50LCAiRnVuY3Rpb24gbG9jYXRp
b25zIik7Ci0KLSAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAg
ICAgICB1aW50MzJfdCB0eXBlTnVtYmVyOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFw
YXJzZVZhclVJbnQzMih0eXBlTnVtYmVyKSwgImNhbid0IGdldCAiLCBpLCAidGggRnVuY3Rpb24n
cyB0eXBlIG51bWJlciIpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHR5cGVOdW1iZXIg
Pj0gbV9pbmZvLT51c2VkU2lnbmF0dXJlcy5zaXplKCksIGksICJ0aCBGdW5jdGlvbiB0eXBlIG51
bWJlciBpcyBpbnZhbGlkICIsIHR5cGVOdW1iZXIpOwotCi0gICAgICAgIFNpZ25hdHVyZUluZGV4
IHNpZ25hdHVyZUluZGV4ID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChtX2luZm8tPnVzZWRT
aWduYXR1cmVzW3R5cGVOdW1iZXJdKTsKLSAgICAgICAgLy8gVGhlIENvZGUgc2VjdGlvbiBmaXhl
cyB1cCBzdGFydCBhbmQgZW5kLgotICAgICAgICBzaXplX3Qgc3RhcnQgPSAwOwotICAgICAgICBz
aXplX3QgZW5kID0gMDsKLSAgICAgICAgbV9pbmZvLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJl
SW5kaWNlcy51bmNoZWNrZWRBcHBlbmQoc2lnbmF0dXJlSW5kZXgpOwotICAgICAgICBtX2luZm8t
PmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS51bmNoZWNrZWRBcHBlbmQoeyBzdGFydCwgZW5kIH0p
OworICAgIGlmIChPcHRpb25zOjp1c2VFYWdlcldlYkFzc2VtYmx5TW9kdWxlSGFzaGluZygpKSB7
CisgICAgICAgIFNIQTEgaGFzaGVyOworICAgICAgICBoYXNoZXIuYWRkQnl0ZXMoc291cmNlKCks
IGxlbmd0aCgpKTsKKyAgICAgICAgbV9pbmZvLT5uYW1lU2VjdGlvbi0+c2V0SGFzaChoYXNoZXIu
Y29tcHV0ZUhleERpZ2VzdCgpKTsKICAgICB9CiAKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRv
IE1vZHVsZVBhcnNlcjo6cGFyc2VSZXNpemFibGVMaW1pdHModWludDMyX3QmIGluaXRpYWwsIHN0
ZDo6b3B0aW9uYWw8dWludDMyX3Q+JiBtYXhpbXVtKSAtPiBQYXJ0aWFsUmVzdWx0Ci17Ci0gICAg
QVNTRVJUKCFtYXhpbXVtKTsKLQotICAgIHVpbnQ4X3QgZmxhZ3M7Ci0gICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighcGFyc2VWYXJVSW50MShmbGFncyksICJjYW4ndCBwYXJzZSByZXNpemFibGUgbGlt
aXRzIGZsYWdzIik7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoaW5p
dGlhbCksICJjYW4ndCBwYXJzZSByZXNpemFibGUgbGltaXRzIGluaXRpYWwgcGFnZSBjb3VudCIp
OwotCi0gICAgaWYgKGZsYWdzKSB7Ci0gICAgICAgIHVpbnQzMl90IG1heGltdW1JbnQ7Ci0gICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKG1heGltdW1JbnQpLCAiY2Fu
J3QgcGFyc2UgcmVzaXphYmxlIGxpbWl0cyBtYXhpbXVtIHBhZ2UgY291bnQiKTsKLSAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRihpbml0aWFsID4gbWF4aW11bUludCwgInJlc2l6YWJsZSBsaW1p
dHMgaGFzIGEgaW5pdGlhbCBwYWdlIGNvdW50IG9mICIsIGluaXRpYWwsICIgd2hpY2ggaXMgZ3Jl
YXRlciB0aGFuIGl0cyBtYXhpbXVtICIsIG1heGltdW1JbnQpOwotICAgICAgICBtYXhpbXVtID0g
bWF4aW11bUludDsKLSAgICB9Ci0KLSAgICByZXR1cm4geyB9OwotfQotCi1hdXRvIE1vZHVsZVBh
cnNlcjo6cGFyc2VUYWJsZUhlbHBlcihib29sIGlzSW1wb3J0KSAtPiBQYXJ0aWFsUmVzdWx0Ci17
Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX3RhYmxlQ291bnQgPiAwLCAiQ2Fubm90IGhhdmUg
bW9yZSB0aGFuIG9uZSBUYWJsZSBmb3Igbm93Iik7Ci0KLSAgICArK21fdGFibGVDb3VudDsKLQot
ICAgIGludDhfdCB0eXBlOwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlSW50Nyh0eXBl
KSwgImNhbid0IHBhcnNlIFRhYmxlIHR5cGUiKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHR5
cGUgIT0gV2FzbTo6QW55ZnVuYywgIlRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAi
LCB0eXBlKTsKLQotICAgIHVpbnQzMl90IGluaXRpYWw7Ci0gICAgc3RkOjpvcHRpb25hbDx1aW50
MzJfdD4gbWF4aW11bTsKLSAgICBQYXJ0aWFsUmVzdWx0IGxpbWl0cyA9IHBhcnNlUmVzaXphYmxl
TGltaXRzKGluaXRpYWwsIG1heGltdW0pOwotICAgIGlmIChVTkxJS0VMWSghbGltaXRzKSkKLSAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFdURk1vdmUobGltaXRzLmVycm9yKCkpKTsKLSAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluaXRpYWwgPiBtYXhUYWJsZUVudHJpZXMsICJUYWJsZSdz
IGluaXRpYWwgcGFnZSBjb3VudCBvZiAiLCBpbml0aWFsLCAiIGlzIHRvbyBiaWcsIG1heGltdW0g
IiwgbWF4VGFibGVFbnRyaWVzKTsKLQotICAgIEFTU0VSVCghbWF4aW11bSB8fCAqbWF4aW11bSA+
PSBpbml0aWFsKTsKLQotICAgIG1faW5mby0+dGFibGVJbmZvcm1hdGlvbiA9IFRhYmxlSW5mb3Jt
YXRpb24oaW5pdGlhbCwgbWF4aW11bSwgaXNJbXBvcnQpOwotCi0gICAgcmV0dXJuIHsgfTsKLX0K
LQotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlVGFibGUoKSAtPiBQYXJ0aWFsUmVzdWx0Ci17Ci0g
ICAgdWludDMyX3QgY291bnQ7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50
MzIoY291bnQpLCAiY2FuJ3QgZ2V0IFRhYmxlJ3MgY291bnQiKTsKLSAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKGNvdW50ID4gMSwgIlRhYmxlIGNvdW50IG9mICIsIGNvdW50LCAiIGlzIGludmFsaWQs
IGF0IG1vc3QgMSBpcyBhbGxvd2VkIGZvciBub3ciKTsKLQotICAgIGlmICghY291bnQpCi0gICAg
ICAgIHJldHVybiB7IH07Ci0KLSAgICBib29sIGlzSW1wb3J0ID0gZmFsc2U7Ci0gICAgUGFydGlh
bFJlc3VsdCByZXN1bHQgPSBwYXJzZVRhYmxlSGVscGVyKGlzSW1wb3J0KTsKLSAgICBpZiAoVU5M
SUtFTFkoIXJlc3VsdCkpCi0gICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChXVEZNb3ZlKHJl
c3VsdC5lcnJvcigpKSk7Ci0KLSAgICByZXR1cm4geyB9OwotfQotCi1hdXRvIE1vZHVsZVBhcnNl
cjo6cGFyc2VNZW1vcnlIZWxwZXIoYm9vbCBpc0ltcG9ydCkgLT4gUGFydGlhbFJlc3VsdAotewot
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9tZW1vcnlDb3VudCwgInRoZXJlIGNhbiBhdCBtb3N0
IGJlIG9uZSBNZW1vcnkgc2VjdGlvbiBmb3Igbm93Iik7Ci0KLSAgICArK21fbWVtb3J5Q291bnQ7
Ci0KLSAgICBQYWdlQ291bnQgaW5pdGlhbFBhZ2VDb3VudDsKLSAgICBQYWdlQ291bnQgbWF4aW11
bVBhZ2VDb3VudDsKLSAgICB7Ci0gICAgICAgIHVpbnQzMl90IGluaXRpYWw7Ci0gICAgICAgIHN0
ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW07Ci0gICAgICAgIFBhcnRpYWxSZXN1bHQgbGlt
aXRzID0gcGFyc2VSZXNpemFibGVMaW1pdHMoaW5pdGlhbCwgbWF4aW11bSk7Ci0gICAgICAgIGlm
IChVTkxJS0VMWSghbGltaXRzKSkKLSAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChX
VEZNb3ZlKGxpbWl0cy5lcnJvcigpKSk7Ci0gICAgICAgIEFTU0VSVCghbWF4aW11bSB8fCAqbWF4
aW11bSA+PSBpbml0aWFsKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighUGFnZUNvdW50
Ojppc1ZhbGlkKGluaXRpYWwpLCAiTWVtb3J5J3MgaW5pdGlhbCBwYWdlIGNvdW50IG9mICIsIGlu
aXRpYWwsICIgaXMgaW52YWxpZCIpOwotCi0gICAgICAgIGluaXRpYWxQYWdlQ291bnQgPSBQYWdl
Q291bnQoaW5pdGlhbCk7Ci0KLSAgICAgICAgaWYgKG1heGltdW0pIHsKLSAgICAgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIVBhZ2VDb3VudDo6aXNWYWxpZCgqbWF4aW11bSksICJNZW1vcnkn
cyBtYXhpbXVtIHBhZ2UgY291bnQgb2YgIiwgKm1heGltdW0sICIgaXMgaW52YWxpZCIpOwotICAg
ICAgICAgICAgbWF4aW11bVBhZ2VDb3VudCA9IFBhZ2VDb3VudCgqbWF4aW11bSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgQVNTRVJUKGluaXRpYWxQYWdlQ291bnQpOwotICAgIEFTU0VSVCghbWF4
aW11bVBhZ2VDb3VudCB8fCBtYXhpbXVtUGFnZUNvdW50ID49IGluaXRpYWxQYWdlQ291bnQpOwot
Ci0gICAgbV9pbmZvLT5tZW1vcnkgPSBNZW1vcnlJbmZvcm1hdGlvbihpbml0aWFsUGFnZUNvdW50
LCBtYXhpbXVtUGFnZUNvdW50LCBpc0ltcG9ydCk7Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQotYXV0
byBNb2R1bGVQYXJzZXI6OnBhcnNlTWVtb3J5KCkgLT4gUGFydGlhbFJlc3VsdAotewotICAgIHVp
bnQ4X3QgY291bnQ7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MShjb3Vu
dCksICJjYW4ndCBwYXJzZSBNZW1vcnkgc2VjdGlvbidzIGNvdW50Iik7Ci0KLSAgICBpZiAoIWNv
dW50KQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRihjb3Vu
dCAhPSAxLCAiTWVtb3J5IHNlY3Rpb24gaGFzIG1vcmUgdGhhbiBvbmUgbWVtb3J5LCBXZWJBc3Nl
bWJseSBjdXJyZW50bHkgb25seSBhbGxvd3MgemVybyBvciBvbmUiKTsKLQotICAgIGJvb2wgaXNJ
bXBvcnQgPSBmYWxzZTsKLSAgICByZXR1cm4gcGFyc2VNZW1vcnlIZWxwZXIoaXNJbXBvcnQpOwot
fQotCi1hdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VHbG9iYWwoKSAtPiBQYXJ0aWFsUmVzdWx0Ci17
Ci0gICAgdWludDMyX3QgZ2xvYmFsQ291bnQ7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFy
c2VWYXJVSW50MzIoZ2xvYmFsQ291bnQpLCAiY2FuJ3QgZ2V0IEdsb2JhbCBzZWN0aW9uJ3MgY291
bnQiKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGdsb2JhbENvdW50ID4gbWF4R2xvYmFscywg
Ikdsb2JhbCBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBnbG9iYWxDb3VudCwgIiBtYXhp
bXVtICIsIG1heEdsb2JhbHMpOwotICAgIHNpemVfdCB0b3RhbEJ5dGVzID0gZ2xvYmFsQ291bnQg
KyBtX2luZm8tPmZpcnN0SW50ZXJuYWxHbG9iYWw7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRigo
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KHRvdGFsQnl0ZXMpIDwgZ2xvYmFsQ291bnQpIHx8ICFtX2lu
Zm8tPmdsb2JhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KHRvdGFsQnl0ZXMpLCAiY2FuJ3QgYWxsb2Nh
dGUgbWVtb3J5IGZvciAiLCB0b3RhbEJ5dGVzLCAiIGdsb2JhbHMiKTsKLQotICAgIGZvciAodWlu
dDMyX3QgZ2xvYmFsSW5kZXggPSAwOyBnbG9iYWxJbmRleCA8IGdsb2JhbENvdW50OyArK2dsb2Jh
bEluZGV4KSB7Ci0gICAgICAgIEdsb2JhbCBnbG9iYWw7Ci0gICAgICAgIHVpbnQ4X3QgaW5pdE9w
Y29kZTsKLQotICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlR2xvYmFsVHlw
ZShnbG9iYWwpKTsKLSAgICAgICAgVHlwZSB0eXBlRm9ySW5pdE9wY29kZTsKLSAgICAgICAgV0FT
TV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUluaXRFeHByKGluaXRPcGNvZGUsIGdsb2JhbC5p
bml0aWFsQml0c09ySW1wb3J0TnVtYmVyLCB0eXBlRm9ySW5pdE9wY29kZSkpOwotICAgICAgICBp
ZiAoaW5pdE9wY29kZSA9PSBHZXRHbG9iYWwpCi0gICAgICAgICAgICBnbG9iYWwuaW5pdGlhbGl6
YXRpb25UeXBlID0gR2xvYmFsOjpGcm9tR2xvYmFsSW1wb3J0OwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBnbG9iYWwuaW5pdGlhbGl6YXRpb25UeXBlID0gR2xvYmFsOjpGcm9tRXhwcmVzc2lv
bjsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0eXBlRm9ySW5pdE9wY29kZSAhPSBnbG9i
YWwudHlwZSwgIkdsb2JhbCBpbml0X2V4cHIgb3Bjb2RlIG9mIHR5cGUgIiwgdHlwZUZvckluaXRP
cGNvZGUsICIgZG9lc24ndCBtYXRjaCBnbG9iYWwncyB0eXBlICIsIGdsb2JhbC50eXBlKTsKLQot
ICAgICAgICBtX2luZm8tPmdsb2JhbHMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoZ2xvYmFsKSk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHsgfTsKLX0KLQotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNl
RXhwb3J0KCkgLT4gUGFydGlhbFJlc3VsdAotewotICAgIHVpbnQzMl90IGV4cG9ydENvdW50Owot
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGV4cG9ydENvdW50KSwgImNh
bid0IGdldCBFeHBvcnQgc2VjdGlvbidzIGNvdW50Iik7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9J
RihleHBvcnRDb3VudCA+IG1heEV4cG9ydHMsICJFeHBvcnQgc2VjdGlvbidzIGNvdW50IGlzIHRv
byBiaWcgIiwgZXhwb3J0Q291bnQsICIgbWF4aW11bSAiLCBtYXhFeHBvcnRzKTsKLSAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmV4cG9ydHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGV4cG9y
dENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGV4cG9ydENvdW50
LCAiIGV4cG9ydHMiKTsKLQotICAgIEhhc2hTZXQ8U3RyaW5nPiBleHBvcnROYW1lczsKLSAgICBm
b3IgKHVpbnQzMl90IGV4cG9ydE51bWJlciA9IDA7IGV4cG9ydE51bWJlciA8IGV4cG9ydENvdW50
OyArK2V4cG9ydE51bWJlcikgewotICAgICAgICB1aW50MzJfdCBmaWVsZExlbjsKLSAgICAgICAg
TmFtZSBmaWVsZFN0cmluZzsKLSAgICAgICAgRXh0ZXJuYWxLaW5kIGtpbmQ7Ci0gICAgICAgIHVu
c2lnbmVkIGtpbmRJbmRleDsKLQotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZh
clVJbnQzMihmaWVsZExlbiksICJjYW4ndCBnZXQgIiwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0
J3MgZmllbGQgbmFtZSBsZW5ndGgiKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighY29u
c3VtZVVURjhTdHJpbmcoZmllbGRTdHJpbmcsIGZpZWxkTGVuKSwgImNhbid0IGdldCAiLCBleHBv
cnROdW1iZXIsICJ0aCBFeHBvcnQncyBmaWVsZCBuYW1lIG9mIGxlbmd0aCAiLCBmaWVsZExlbik7
Ci0gICAgICAgIFN0cmluZyBmaWVsZE5hbWUgPSBTdHJpbmc6OmZyb21VVEY4KGZpZWxkU3RyaW5n
KTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihleHBvcnROYW1lcy5jb250YWlucyhmaWVs
ZE5hbWUpLCAiZHVwbGljYXRlIGV4cG9ydDogJyIsIGZpZWxkU3RyaW5nLCAiJyIpOwotICAgICAg
ICBleHBvcnROYW1lcy5hZGQoZmllbGROYW1lKTsKLQotICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKCFwYXJzZUV4dGVybmFsS2luZChraW5kKSwgImNhbid0IGdldCAiLCBleHBvcnROdW1iZXIs
ICJ0aCBFeHBvcnQncyBraW5kLCBuYW1lZCAnIiwgZmllbGRTdHJpbmcsICInIik7Ci0gICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGtpbmRJbmRleCksICJjYW4ndCBn
ZXQgIiwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0J3Mga2luZCBpbmRleCwgbmFtZWQgJyIsIGZp
ZWxkU3RyaW5nLCAiJyIpOwotICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICAgICAgY2FzZSBF
eHRlcm5hbEtpbmQ6OkZ1bmN0aW9uOiB7Ci0gICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KGtpbmRJbmRleCA+PSBtX2luZm8tPmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSwgZXhwb3J0TnVt
YmVyLCAidGggRXhwb3J0IGhhcyBpbnZhbGlkIGZ1bmN0aW9uIG51bWJlciAiLCBraW5kSW5kZXgs
ICIgaXQgZXhjZWVkcyB0aGUgZnVuY3Rpb24gaW5kZXggc3BhY2UgIiwgbV9pbmZvLT5mdW5jdGlv
bkluZGV4U3BhY2VTaXplKCksICIsIG5hbWVkICciLCBmaWVsZFN0cmluZywgIiciKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpUYWJs
ZTogewotICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihraW5kSW5kZXggPj0gbV90YWJs
ZUNvdW50LCAiY2FuJ3QgZXhwb3J0IFRhYmxlICIsIGtpbmRJbmRleCwgIiB0aGVyZSBhcmUgIiwg
bV90YWJsZUNvdW50LCAiIFRhYmxlcyIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6Ok1lbW9yeTogewotICAgICAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighbV9pbmZvLT5tZW1vcnksICJjYW4ndCBleHBvcnQgYSBub24tZXhpc3Rl
bnQgTWVtb3J5Iik7Ci0gICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGtpbmRJbmRleCwg
ImNhbid0IGV4cG9ydCBNZW1vcnkgIiwga2luZEluZGV4LCAiIG9ubHkgb25lIFRhYmxlIGlzIGN1
cnJlbnRseSBzdXBwb3J0ZWQiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpHbG9iYWw6IHsKLSAgICAgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoa2luZEluZGV4ID49IG1faW5mby0+Z2xvYmFscy5zaXplKCksIGV4cG9ydE51bWJl
ciwgInRoIEV4cG9ydCBoYXMgaW52YWxpZCBnbG9iYWwgbnVtYmVyICIsIGtpbmRJbmRleCwgIiBp
dCBleGNlZWRzIHRoZSBnbG9iYWxzIGNvdW50ICIsIG1faW5mby0+Z2xvYmFscy5zaXplKCksICIs
IG5hbWVkICciLCBmaWVsZFN0cmluZywgIiciKTsKLSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYobV9pbmZvLT5nbG9iYWxzW2tpbmRJbmRleF0ubXV0YWJpbGl0eSAhPSBHbG9iYWw6Oklt
bXV0YWJsZSwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0IGlzbid0IGltbXV0YWJsZSwgbmFtZWQg
JyIsIGZpZWxkU3RyaW5nLCAiJyIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgICAgIG1faW5mby0+ZXhwb3J0cy51bmNoZWNrZWRBcHBlbmQoeyBXVEZN
b3ZlKGZpZWxkU3RyaW5nKSwga2luZCwga2luZEluZGV4IH0pOwotICAgIH0KLQotICAgIHJldHVy
biB7IH07Ci19Ci0KLWF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZVN0YXJ0KCkgLT4gUGFydGlhbFJl
c3VsdAotewotICAgIHVpbnQzMl90IHN0YXJ0RnVuY3Rpb25JbmRleDsKLSAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihzdGFydEZ1bmN0aW9uSW5kZXgpLCAiY2FuJ3QgZ2V0
IFN0YXJ0IGluZGV4Iik7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRihzdGFydEZ1bmN0aW9uSW5k
ZXggPj0gbV9pbmZvLT5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCksICJTdGFydCBpbmRleCAiLCBz
dGFydEZ1bmN0aW9uSW5kZXgsICIgZXhjZWVkcyBmdW5jdGlvbiBpbmRleCBzcGFjZSAiLCBtX2lu
Zm8tPmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7Ci0gICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0
dXJlSW5kZXggPSBtX2luZm8tPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShz
dGFydEZ1bmN0aW9uSW5kZXgpOwotICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2ln
bmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7Ci0gICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCAiU3RhcnQgZnVuY3Rpb24gY2FuJ3Qg
aGF2ZSBhcmd1bWVudHMiKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHNpZ25hdHVyZS5yZXR1
cm5UeXBlKCkgIT0gVm9pZCwgIlN0YXJ0IGZ1bmN0aW9uIGNhbid0IHJldHVybiBhIHZhbHVlIik7
Ci0gICAgbV9pbmZvLT5zdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSA9IHN0YXJ0RnVuY3Rpb25JbmRl
eDsKLSAgICByZXR1cm4geyB9OwotfQotCi1hdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VFbGVtZW50
KCkgLT4gUGFydGlhbFJlc3VsdAotewotICAgIHVpbnQzMl90IGVsZW1lbnRDb3VudDsKLSAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihlbGVtZW50Q291bnQpLCAiY2FuJ3Qg
Z2V0IEVsZW1lbnQgc2VjdGlvbidzIGNvdW50Iik7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRihl
bGVtZW50Q291bnQgPiBtYXhUYWJsZUVudHJpZXMsICJFbGVtZW50IHNlY3Rpb24ncyBjb3VudCBp
cyB0b28gYmlnICIsIGVsZW1lbnRDb3VudCwgIiBtYXhpbXVtICIsIG1heFRhYmxlRW50cmllcyk7
Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5lbGVtZW50cy50cnlSZXNlcnZlQ2Fw
YWNpdHkoZWxlbWVudENvdW50KSwgImNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgIiwgZWxlbWVu
dENvdW50LCAiIEVsZW1lbnRzIik7Ci0gICAgZm9yICh1bnNpZ25lZCBlbGVtZW50TnVtID0gMDsg
ZWxlbWVudE51bSA8IGVsZW1lbnRDb3VudDsgKytlbGVtZW50TnVtKSB7Ci0gICAgICAgIHVpbnQz
Ml90IHRhYmxlSW5kZXg7Ci0gICAgICAgIHVpbnQ2NF90IGluaXRFeHByQml0czsKLSAgICAgICAg
dWludDhfdCBpbml0T3Bjb2RlOwotICAgICAgICB1aW50MzJfdCBpbmRleENvdW50OwotCi0gICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKHRhYmxlSW5kZXgpLCAiY2Fu
J3QgZ2V0ICIsIGVsZW1lbnROdW0sICJ0aCBFbGVtZW50IHRhYmxlIGluZGV4Iik7Ci0gICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYodGFibGVJbmRleCA+PSBtX3RhYmxlQ291bnQsICJFbGVtZW50
IHNlY3Rpb24gZm9yIFRhYmxlICIsIHRhYmxlSW5kZXgsICIgZXhjZWVkcyBhdmFpbGFibGUgVGFi
bGUgIiwgbV90YWJsZUNvdW50KTsKLSAgICAgICAgVHlwZSBpbml0RXhwclR5cGU7Ci0gICAgICAg
IFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VJbml0RXhwcihpbml0T3Bjb2RlLCBpbml0
RXhwckJpdHMsIGluaXRFeHByVHlwZSkpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGlu
aXRFeHByVHlwZSAhPSBJMzIsICJFbGVtZW50IGluaXRfZXhwciBtdXN0IHByb2R1Y2UgYW4gaTMy
Iik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGluZGV4Q291
bnQpLCAiY2FuJ3QgZ2V0ICIsIGVsZW1lbnROdW0sICJ0aCBpbmRleCBjb3VudCBmb3IgRWxlbWVu
dCBzZWN0aW9uIik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoaW5kZXhDb3VudCA9PSBz
dGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksICJFbGVtZW50IHNlY3Rpb24ncyAi
LCBlbGVtZW50TnVtLCAidGggaW5kZXggY291bnQgaXMgdG9vIGJpZyAiLCBpbmRleENvdW50KTsK
LQotICAgICAgICBBU1NFUlQoISFtX2luZm8tPnRhYmxlSW5mb3JtYXRpb24pOwotCi0gICAgICAg
IEVsZW1lbnQgZWxlbWVudChtYWtlSTMySW5pdEV4cHIoaW5pdE9wY29kZSwgaW5pdEV4cHJCaXRz
KSk7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWVsZW1lbnQuZnVuY3Rpb25JbmRpY2Vz
LnRyeVJlc2VydmVDYXBhY2l0eShpbmRleENvdW50KSwgImNhbid0IGFsbG9jYXRlIG1lbW9yeSBm
b3IgIiwgaW5kZXhDb3VudCwgIiBFbGVtZW50IGluZGljZXMiKTsKLQotICAgICAgICBmb3IgKHVu
c2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBpbmRleENvdW50OyArK2luZGV4KSB7Ci0gICAgICAg
ICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4OwotICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VWYXJVSW50MzIoZnVuY3Rpb25JbmRleCksICJjYW4ndCBnZXQgRWxlbWVudCBz
ZWN0aW9uJ3MgIiwgZWxlbWVudE51bSwgInRoIGVsZW1lbnQncyAiLCBpbmRleCwgInRoIGluZGV4
Iik7Ci0gICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGZ1bmN0aW9uSW5kZXggPj0gbV9p
bmZvLT5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCksICJFbGVtZW50IHNlY3Rpb24ncyAiLCBlbGVt
ZW50TnVtLCAidGggZWxlbWVudCdzICIsIGluZGV4LCAidGggaW5kZXggaXMgIiwgZnVuY3Rpb25J
bmRleCwgIiB3aGljaCBleGNlZWRzIHRoZSBmdW5jdGlvbiBpbmRleCBzcGFjZSBzaXplIG9mICIs
IG1faW5mby0+ZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgpKTsKLQotICAgICAgICAgICAgZWxlbWVu
dC5mdW5jdGlvbkluZGljZXMudW5jaGVja2VkQXBwZW5kKGZ1bmN0aW9uSW5kZXgpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgbV9pbmZvLT5lbGVtZW50cy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShl
bGVtZW50KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsgfTsKLX0KLQotYXV0byBNb2R1bGVQYXJz
ZXI6OnBhcnNlQ29kZSgpIC0+IFBhcnRpYWxSZXN1bHQKLXsKLSAgICB1aW50MzJfdCBjb3VudDsK
LSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihjb3VudCksICJjYW4ndCBn
ZXQgQ29kZSBzZWN0aW9uJ3MgY291bnQiKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGNvdW50
ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwgIkNvZGUgc2VjdGlvbidz
IGNvdW50IGlzIHRvbyBiaWcgIiwgY291bnQpOwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoY291
bnQgIT0gbV9pbmZvLT5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpLCAiQ29kZSBzZWN0
aW9uIGNvdW50ICIsIGNvdW50LCAiIGV4Y2VlZHMgdGhlIGRlY2xhcmVkIG51bWJlciBvZiBmdW5j
dGlvbnMgIiwgbV9pbmZvLT5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpKTsKLQotICAg
IGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIHVpbnQzMl90
IGZ1bmN0aW9uU2l6ZTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50
MzIoZnVuY3Rpb25TaXplKSwgImNhbid0IGdldCAiLCBpLCAidGggQ29kZSBmdW5jdGlvbidzIHNp
emUiKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvblNpemUgPiBsZW5ndGgo
KSwgIkNvZGUgZnVuY3Rpb24ncyBzaXplICIsIGZ1bmN0aW9uU2l6ZSwgIiBleGNlZWRzIHRoZSBt
b2R1bGUncyBzaXplICIsIGxlbmd0aCgpKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihm
dW5jdGlvblNpemUgPiBsZW5ndGgoKSAtIG1fb2Zmc2V0LCAiQ29kZSBmdW5jdGlvbidzIHNpemUg
IiwgZnVuY3Rpb25TaXplLCAiIGV4Y2VlZHMgdGhlIG1vZHVsZSdzIHJlbWFpbmluZyBzaXplIiwg
bGVuZ3RoKCkgLSBtX29mZnNldCk7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rp
b25TaXplID4gbWF4RnVuY3Rpb25TaXplLCAiQ29kZSBmdW5jdGlvbidzIHNpemUgIiwgZnVuY3Rp
b25TaXplLCAiIGlzIHRvbyBiaWciKTsKLQotICAgICAgICBtX2luZm8tPmZ1bmN0aW9uTG9jYXRp
b25JbkJpbmFyeVtpXS5zdGFydCA9IG1fb2Zmc2V0OwotICAgICAgICBtX2luZm8tPmZ1bmN0aW9u
TG9jYXRpb25JbkJpbmFyeVtpXS5lbmQgPSBtX29mZnNldCArIGZ1bmN0aW9uU2l6ZTsKLSAgICAg
ICAgbV9vZmZzZXQgPSBtX2luZm8tPmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtpXS5lbmQ7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHsgfTsKLX0KLQotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlSW5p
dEV4cHIodWludDhfdCYgb3Bjb2RlLCB1aW50NjRfdCYgYml0c09ySW1wb3J0TnVtYmVyLCBUeXBl
JiByZXN1bHRUeXBlKSAtPiBQYXJ0aWFsUmVzdWx0Ci17Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9J
RighcGFyc2VVSW50OChvcGNvZGUpLCAiY2FuJ3QgZ2V0IGluaXRfZXhwcidzIG9wY29kZSIpOwot
Ci0gICAgc3dpdGNoIChvcGNvZGUpIHsKLSAgICBjYXNlIEkzMkNvbnN0OiB7Ci0gICAgICAgIGlu
dDMyX3QgY29uc3RhbnQ7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFySW50
MzIoY29uc3RhbnQpLCAiY2FuJ3QgZ2V0IGNvbnN0YW50IHZhbHVlIGZvciBpbml0X2V4cHIncyBp
MzIuY29uc3QiKTsKLSAgICAgICAgYml0c09ySW1wb3J0TnVtYmVyID0gc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KGNvbnN0YW50KTsKLSAgICAgICAgcmVzdWx0VHlwZSA9IEkzMjsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotCi0gICAgY2FzZSBJNjRDb25zdDogewotICAgICAgICBpbnQ2NF90IGNvbnN0
YW50OwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhckludDY0KGNvbnN0YW50
KSwgImNhbid0IGdldCBjb25zdGFudCB2YWx1ZSBmb3IgaW5pdF9leHByJ3MgaTY0LmNvbnN0Iik7
Ci0gICAgICAgIGJpdHNPckltcG9ydE51bWJlciA9IGNvbnN0YW50OwotICAgICAgICByZXN1bHRU
eXBlID0gSTY0OwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEYzMkNvbnN0OiB7
Ci0gICAgICAgIHVpbnQzMl90IGNvbnN0YW50OwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFwYXJzZVVJbnQzMihjb25zdGFudCksICJjYW4ndCBnZXQgY29uc3RhbnQgdmFsdWUgZm9yIGlu
aXRfZXhwcidzIGYzMi5jb25zdCIpOwotICAgICAgICBiaXRzT3JJbXBvcnROdW1iZXIgPSBjb25z
dGFudDsKLSAgICAgICAgcmVzdWx0VHlwZSA9IEYzMjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
Ci0gICAgY2FzZSBGNjRDb25zdDogewotICAgICAgICB1aW50NjRfdCBjb25zdGFudDsKLSAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VVSW50NjQoY29uc3RhbnQpLCAiY2FuJ3QgZ2V0
IGNvbnN0YW50IHZhbHVlIGZvciBpbml0X2V4cHIncyBmNjQuY29uc3QiKTsKLSAgICAgICAgYml0
c09ySW1wb3J0TnVtYmVyID0gY29uc3RhbnQ7Ci0gICAgICAgIHJlc3VsdFR5cGUgPSBGNjQ7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgR2V0R2xvYmFsOiB7Ci0gICAgICAgIHVp
bnQzMl90IGluZGV4OwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQz
MihpbmRleCksICJjYW4ndCBnZXQgZ2V0X2dsb2JhbCdzIGluZGV4Iik7Ci0KLSAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRihpbmRleCA+PSBtX2luZm8tPmdsb2JhbHMuc2l6ZSgpLCAiZ2V0X2ds
b2JhbCdzIGluZGV4ICIsIGluZGV4LCAiIGV4Y2VlZHMgdGhlIG51bWJlciBvZiBnbG9iYWxzICIs
IG1faW5mby0+Z2xvYmFscy5zaXplKCkpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGlu
ZGV4ID49IG1faW5mby0+Zmlyc3RJbnRlcm5hbEdsb2JhbCwgImdldF9nbG9iYWwgaW1wb3J0IGtp
bmQgaW5kZXggIiwgaW5kZXgsICIgZXhjZWVkcyB0aGUgZmlyc3QgaW50ZXJuYWwgZ2xvYmFsICIs
IG1faW5mby0+Zmlyc3RJbnRlcm5hbEdsb2JhbCk7Ci0KLSAgICAgICAgQVNTRVJUKG1faW5mby0+
Z2xvYmFsc1tpbmRleF0ubXV0YWJpbGl0eSA9PSBHbG9iYWw6OkltbXV0YWJsZSk7Ci0gICAgICAg
IHJlc3VsdFR5cGUgPSBtX2luZm8tPmdsb2JhbHNbaW5kZXhdLnR5cGU7Ci0gICAgICAgIGJpdHNP
ckltcG9ydE51bWJlciA9IGluZGV4OwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBkZWZh
dWx0OgotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHRydWUsICJ1bmtub3duIGluaXRfZXhw
ciBvcGNvZGUgIiwgb3Bjb2RlKTsKLSAgICB9Ci0KLSAgICB1aW50OF90IGVuZE9wY29kZTsKLSAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ4KGVuZE9wY29kZSksICJjYW4ndCBnZXQg
aW5pdF9leHByJ3MgZW5kIG9wY29kZSIpOwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZW5kT3Bj
b2RlICE9IE9wVHlwZTo6RW5kLCAiaW5pdF9leHByIHNob3VsZCBlbmQgd2l0aCBlbmQsIGVuZGVk
IHdpdGggIiwgZW5kT3Bjb2RlKTsKLQotICAgIHJldHVybiB7IH07Ci19Ci0KLWF1dG8gTW9kdWxl
UGFyc2VyOjpwYXJzZUdsb2JhbFR5cGUoR2xvYmFsJiBnbG9iYWwpIC0+IFBhcnRpYWxSZXN1bHQK
LXsKLSAgICB1aW50OF90IG11dGFiaWxpdHk7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFy
c2VWYWx1ZVR5cGUoZ2xvYmFsLnR5cGUpLCAiY2FuJ3QgZ2V0IEdsb2JhbCdzIHZhbHVlIHR5cGUi
KTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQxKG11dGFiaWxpdHkpLCAi
Y2FuJ3QgZ2V0IEdsb2JhbCB0eXBlJ3MgbXV0YWJpbGl0eSIpOwotICAgIGdsb2JhbC5tdXRhYmls
aXR5ID0gc3RhdGljX2Nhc3Q8R2xvYmFsOjpNdXRhYmlsaXR5PihtdXRhYmlsaXR5KTsKLSAgICBy
ZXR1cm4geyB9OwotfQotCi1hdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VEYXRhKCkgLT4gUGFydGlh
bFJlc3VsdAotewotICAgIHVpbnQzMl90IHNlZ21lbnRDb3VudDsKLSAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFwYXJzZVZhclVJbnQzMihzZWdtZW50Q291bnQpLCAiY2FuJ3QgZ2V0IERhdGEgc2Vj
dGlvbidzIGNvdW50Iik7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRihzZWdtZW50Q291bnQgPiBt
YXhEYXRhU2VnbWVudHMsICJEYXRhIHNlY3Rpb24ncyBjb3VudCBpcyB0b28gYmlnICIsIHNlZ21l
bnRDb3VudCwgIiBtYXhpbXVtICIsIG1heERhdGFTZWdtZW50cyk7Ci0gICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighbV9pbmZvLT5kYXRhLnRyeVJlc2VydmVDYXBhY2l0eShzZWdtZW50Q291bnQpLCAi
Y2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgRGF0YSBzZWN0aW9uJ3MgIiwgc2VnbWVu
dENvdW50LCAiIHNlZ21lbnRzIik7Ci0KLSAgICBmb3IgKHVpbnQzMl90IHNlZ21lbnROdW1iZXIg
PSAwOyBzZWdtZW50TnVtYmVyIDwgc2VnbWVudENvdW50OyArK3NlZ21lbnROdW1iZXIpIHsKLSAg
ICAgICAgdWludDMyX3QgbWVtb3J5SW5kZXg7Ci0gICAgICAgIHVpbnQ2NF90IGluaXRFeHByQml0
czsKLSAgICAgICAgdWludDhfdCBpbml0T3Bjb2RlOwotICAgICAgICB1aW50MzJfdCBkYXRhQnl0
ZUxlbmd0aDsKLQotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMiht
ZW1vcnlJbmRleCksICJjYW4ndCBnZXQgIiwgc2VnbWVudE51bWJlciwgInRoIERhdGEgc2VnbWVu
dCdzIGluZGV4Iik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobWVtb3J5SW5kZXggPj0g
bV9tZW1vcnlDb3VudCwgc2VnbWVudE51bWJlciwgInRoIERhdGEgc2VnbWVudCBoYXMgaW5kZXgg
IiwgbWVtb3J5SW5kZXgsICIgd2hpY2ggZXhjZWVkcyB0aGUgbnVtYmVyIG9mIE1lbW9yaWVzICIs
IG1fbWVtb3J5Q291bnQpOwotICAgICAgICBUeXBlIGluaXRFeHByVHlwZTsKLSAgICAgICAgV0FT
TV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUluaXRFeHByKGluaXRPcGNvZGUsIGluaXRFeHBy
Qml0cywgaW5pdEV4cHJUeXBlKSk7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoaW5pdEV4
cHJUeXBlICE9IEkzMiwgc2VnbWVudE51bWJlciwgInRoIERhdGEgc2VnbWVudCdzIGluaXRfZXhw
ciBtdXN0IHByb2R1Y2UgYW4gaTMyIik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBh
cnNlVmFyVUludDMyKGRhdGFCeXRlTGVuZ3RoKSwgImNhbid0IGdldCAiLCBzZWdtZW50TnVtYmVy
LCAidGggRGF0YSBzZWdtZW50J3MgZGF0YSBieXRlIGxlbmd0aCIpOwotICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKGRhdGFCeXRlTGVuZ3RoID4gbWF4TW9kdWxlU2l6ZSwgc2VnbWVudE51bWJl
ciwgInRoIERhdGEgc2VnbWVudCdzIGRhdGEgYnl0ZSBsZW5ndGggaXMgdG9vIGJpZyAiLCBkYXRh
Qnl0ZUxlbmd0aCwgIiBtYXhpbXVtICIsIG1heE1vZHVsZVNpemUpOwotCi0gICAgICAgIFNlZ21l
bnQqIHNlZ21lbnQgPSBTZWdtZW50OjpjcmVhdGUobWFrZUkzMkluaXRFeHByKGluaXRPcGNvZGUs
IGluaXRFeHByQml0cyksIGRhdGFCeXRlTGVuZ3RoKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighc2VnbWVudCwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIHNlZ21l
bnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQgb2Ygc2l6ZSAiLCBkYXRhQnl0ZUxlbmd0aCk7Ci0g
ICAgICAgIG1faW5mby0+ZGF0YS51bmNoZWNrZWRBcHBlbmQoU2VnbWVudDo6YWRvcHRQdHIoc2Vn
bWVudCkpOwotICAgICAgICBmb3IgKHVpbnQzMl90IGRhdGFCeXRlID0gMDsgZGF0YUJ5dGUgPCBk
YXRhQnl0ZUxlbmd0aDsgKytkYXRhQnl0ZSkgewotICAgICAgICAgICAgdWludDhfdCBieXRlOwot
ICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VVSW50OChieXRlKSwgImNhbid0
IGdldCAiLCBkYXRhQnl0ZSwgInRoIGRhdGEgYnl0ZSBmcm9tICIsIHNlZ21lbnROdW1iZXIsICJ0
aCBEYXRhIHNlZ21lbnQiKTsKLSAgICAgICAgICAgIHNlZ21lbnQtPmJ5dGUoZGF0YUJ5dGUpID0g
Ynl0ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4geyB9OwotfQotICAgIAotYXV0byBN
b2R1bGVQYXJzZXI6OnBhcnNlQ3VzdG9tKHVpbnQzMl90IHNlY3Rpb25MZW5ndGgpIC0+IFBhcnRp
YWxSZXN1bHQKLXsKLSAgICBjb25zdCB1aW50MzJfdCBjdXN0b21TZWN0aW9uU3RhcnRPZmZzZXQg
PSBtX29mZnNldDsKLQotICAgIEN1c3RvbVNlY3Rpb24gc2VjdGlvbjsKLSAgICB1aW50MzJfdCBj
dXN0b21TZWN0aW9uTnVtYmVyID0gbV9pbmZvLT5jdXN0b21TZWN0aW9ucy5zaXplKCkgKyAxOwot
ICAgIHVpbnQzMl90IG5hbWVMZW47Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5j
dXN0b21TZWN0aW9ucy50cnlSZXNlcnZlQ2FwYWNpdHkoY3VzdG9tU2VjdGlvbk51bWJlciksICJj
YW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBjdXN0b21TZWN0aW9uTnVtYmVyLCAi
dGggY3VzdG9tIHNlY3Rpb24iKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJ
bnQzMihuYW1lTGVuKSwgImNhbid0IGdldCAiLCBjdXN0b21TZWN0aW9uTnVtYmVyLCAidGggY3Vz
dG9tIHNlY3Rpb24ncyBuYW1lIGxlbmd0aCIpOwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWNv
bnN1bWVVVEY4U3RyaW5nKHNlY3Rpb24ubmFtZSwgbmFtZUxlbiksICJuYW1lTGVuIGdldCAiLCBj
dXN0b21TZWN0aW9uTnVtYmVyLCAidGggY3VzdG9tIHNlY3Rpb24ncyBuYW1lIG9mIGxlbmd0aCAi
LCBuYW1lTGVuKTsKLQotICAgIHVpbnQzMl90IHBheWxvYWRCeXRlcyA9IHNlY3Rpb25MZW5ndGgg
LSAobV9vZmZzZXQgLSBjdXN0b21TZWN0aW9uU3RhcnRPZmZzZXQpOwotICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXNlY3Rpb24ucGF5bG9hZC50cnlSZXNlcnZlQ2FwYWNpdHkocGF5bG9hZEJ5dGVz
KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGN1c3RvbVNlY3Rpb25OdW1i
ZXIsICJ0aCBjdXN0b20gc2VjdGlvbidzICIsIHBheWxvYWRCeXRlcywgIiBieXRlcyIpOwotICAg
IGZvciAodWludDMyX3QgYnl0ZU51bWJlciA9IDA7IGJ5dGVOdW1iZXIgPCBwYXlsb2FkQnl0ZXM7
ICsrYnl0ZU51bWJlcikgewotICAgICAgICB1aW50OF90IGJ5dGU7Ci0gICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIXBhcnNlVUludDgoYnl0ZSksICJjYW4ndCBnZXQgIiwgYnl0ZU51bWJlciwg
InRoIGRhdGEgYnl0ZSBmcm9tICIsIGN1c3RvbVNlY3Rpb25OdW1iZXIsICJ0aCBjdXN0b20gc2Vj
dGlvbiIpOwotICAgICAgICBzZWN0aW9uLnBheWxvYWQudW5jaGVja2VkQXBwZW5kKGJ5dGUpOwot
ICAgIH0KLQotICAgIE5hbWUgbmFtZU5hbWUgPSB7ICduJywgJ2EnLCAnbScsICdlJyB9OwotICAg
IGlmIChzZWN0aW9uLm5hbWUgPT0gbmFtZU5hbWUpIHsKLSAgICAgICAgTmFtZVNlY3Rpb25QYXJz
ZXIgbmFtZVNlY3Rpb25QYXJzZXIoc2VjdGlvbi5wYXlsb2FkLmJlZ2luKCksIHNlY3Rpb24ucGF5
bG9hZC5zaXplKCksIG1faW5mbyk7Ci0gICAgICAgIGlmIChhdXRvIG5hbWVTZWN0aW9uID0gbmFt
ZVNlY3Rpb25QYXJzZXIucGFyc2UoKSkKLSAgICAgICAgICAgIG1faW5mby0+bmFtZVNlY3Rpb24g
PSBXVEZNb3ZlKCpuYW1lU2VjdGlvbik7Ci0gICAgfQotCi0gICAgbV9pbmZvLT5jdXN0b21TZWN0
aW9ucy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShzZWN0aW9uKSk7Ci0KLSAgICByZXR1cm4geyB9
OwotfQotCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxFKFdF
QkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1v
ZHVsZVBhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNl
ci5oCmluZGV4IGE2NTFiZTE3Y2UyM2I4NWZiYjk3YmJiNjg1NzAzYjM5YjY0YjcyYzQuLjJlOWY2
ODdiYTNjMGM5MDhjOTQwYjYwZGJkMmJlZWE4YTQzM2E3MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgKQEAgLTQ2LDE4ICs0Niw2IEBAIGNsYXNz
IE1vZHVsZVBhcnNlciA6IHB1YmxpYyBQYXJzZXI8dm9pZD4gewogICAgIFJlc3VsdCBXQVJOX1VO
VVNFRF9SRVRVUk4gcGFyc2UoKTsKIAogcHJpdmF0ZToKLQotI2RlZmluZSBXQVNNX1NFQ1RJT05f
REVDTEFSRV9QQVJTRVIoTkFNRSwgSUQsIERFU0NSSVBUSU9OKSBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBwYXJzZSAjIyBOQU1FKCk7Ci0gICAgRk9SX0VBQ0hfS05PV05fV0FTTV9T
RUNUSU9OKFdBU01fU0VDVElPTl9ERUNMQVJFX1BBUlNFUikKLSN1bmRlZiBXQVNNX1NFQ1RJT05f
REVDTEFSRV9QQVJTRVIKLQotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBh
cnNlQ3VzdG9tKHVpbnQzMl90KTsKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBwYXJzZUdsb2JhbFR5cGUoR2xvYmFsJik7Ci0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gcGFyc2VNZW1vcnlIZWxwZXIoYm9vbCBpc0ltcG9ydCk7Ci0gICAgUGFydGlhbFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VUYWJsZUhlbHBlcihib29sIGlzSW1wb3J0KTsK
LSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVJlc2l6YWJsZUxpbWl0
cyh1aW50MzJfdCYgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4mIG1heGltdW0pOwot
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlSW5pdEV4cHIodWludDhf
dCYsIHVpbnQ2NF90JiwgVHlwZSYgaW5pdEV4cHJUeXBlKTsKLQogICAgIFJlZjxNb2R1bGVJbmZv
cm1hdGlvbj4gbV9pbmZvOwogICAgIHVpbnQzMl90IG1fbWVtb3J5Q291bnQgeyAwIH07CiAgICAg
dWludDMyX3QgbV90YWJsZUNvdW50IHsgMCB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU5hbWVTZWN0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTmFtZVNlY3Rpb24uaAppbmRleCA3YzAyZjJmNDE5NzcwNWFjOGJlZWVmNDQxODk5MGQy
OGVlMzRmMDg0Li5mZTYzY2Y1NTQ3MzY2ZmMxNzQwYzFmMGM3MGJhODFiZTc1MzZhODhlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTmFtZVNlY3Rpb24uaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTmFtZVNlY3Rpb24uaApAQCAtMzYsMTEg
KzM2LDIwIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKIHN0cnVjdCBOYW1l
U2VjdGlvbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxOYW1lU2VjdGlvbj4gewogICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKE5hbWVTZWN0aW9uKTsKLQogcHVibGljOgotICAgIE5hbWVT
ZWN0aW9uKGNvbnN0IHN0ZDo6b3B0aW9uYWw8Q1N0cmluZz4gJmhhc2gpCi0gICAgICAgIDogbW9k
dWxlSGFzaChoYXNoID8gaGFzaC0+bGVuZ3RoKCkgOiAzKQorICAgIE5hbWVTZWN0aW9uKCkKKyAg
ICB7CisgICAgICAgIHNldEhhc2goc3RkOjpudWxsb3B0KTsKKyAgICB9CisKKyAgICBzdGF0aWMg
UmVmPE5hbWVTZWN0aW9uPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgTmFtZVNlY3Rpb24pOworICAgIH0KKworICAgIHZvaWQgc2V0SGFzaChjb25zdCBzdGQ6
Om9wdGlvbmFsPENTdHJpbmc+ICZoYXNoKQogICAgIHsKKyAgICAgICAgbW9kdWxlSGFzaCA9IE5h
bWUoaGFzaCA/IGhhc2gtPmxlbmd0aCgpIDogMyk7CiAgICAgICAgIGlmIChoYXNoKSB7CiAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGhhc2gtPmxlbmd0aCgpOyArK2kpCiAgICAg
ICAgICAgICAgICAgbW9kdWxlSGFzaFtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KCooaGFzaC0+
ZGF0YSgpICsgaSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU5hbWVTZWN0aW9uUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21O
YW1lU2VjdGlvblBhcnNlci5jcHAKaW5kZXggNzMzOTYyMTVjZjU4YmM1MjZiMzQ4Y2MwYTg4Yzcx
M2Q0ZGVjNTk3Ny4uYzdmZTg4NGMzMjM0YWJhYWM1ZWJhN2M4OTQ2NTQ4OWNkODIyZjI5MSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU5hbWVTZWN0aW9uUGFyc2Vy
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTmFtZVNlY3Rpb25QYXJz
ZXIuY3BwCkBAIC0zNSw3ICszNSw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7
CiAKIGF1dG8gTmFtZVNlY3Rpb25QYXJzZXI6OnBhcnNlKCkgLT4gUmVzdWx0CiB7Ci0gICAgUmVm
UHRyPE5hbWVTZWN0aW9uPiBuYW1lU2VjdGlvbihhZG9wdFJlZigqbmV3IE5hbWVTZWN0aW9uKG1f
aW5mby5oYXNoKSkpOworICAgIFJlZjxOYW1lU2VjdGlvbj4gbmFtZVNlY3Rpb24gPSBOYW1lU2Vj
dGlvbjo6Y3JlYXRlKCk7CiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbmFtZVNlY3Rpb24tPmZ1
bmN0aW9uTmFtZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KG1faW5mby5mdW5jdGlvbkluZGV4U3BhY2VT
aXplKCkpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgZnVuY3Rpb24gbmFtZXMi
KTsKICAgICBuYW1lU2VjdGlvbi0+ZnVuY3Rpb25OYW1lcy5yZXNpemUobV9pbmZvLmZ1bmN0aW9u
SW5kZXhTcGFjZVNpemUoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21OYW1lU2VjdGlvblBhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU5hbWVTZWN0aW9uUGFyc2VyLmgKaW5kZXggYjdhZjBkOWI5MGE2ZDUyNmU5MmQ0ZDgyNGZl
ZWRiNDRkNTk4NzY4My4uZDhlNmFlNzFiMjZiNGJlY2M4Yjg4OGJiZmQ1ZWIyNzk4NWM2ZDIxOSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU5hbWVTZWN0aW9uUGFy
c2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU5hbWVTZWN0aW9uUGFy
c2VyLmgKQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNt
IHsKIAotY2xhc3MgTmFtZVNlY3Rpb25QYXJzZXIgOiBwdWJsaWMgUGFyc2VyPFJlZlB0cjxOYW1l
U2VjdGlvbj4+IHsKK2NsYXNzIE5hbWVTZWN0aW9uUGFyc2VyIDogcHVibGljIFBhcnNlcjxSZWY8
TmFtZVNlY3Rpb24+PiB7CiBwdWJsaWM6CiAgICAgTmFtZVNlY3Rpb25QYXJzZXIoY29uc3QgdWlu
dDhfdCogc291cmNlQnVmZmVyLCBzaXplX3Qgc291cmNlTGVuZ3RoLCBjb25zdCBNb2R1bGVJbmZv
cm1hdGlvbiYgaW5mbykKICAgICAgICAgOiBQYXJzZXIoc291cmNlQnVmZmVyLCBzb3VyY2VMZW5n
dGgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAKaW5kZXggNDdk
ZWFkNjRhZjhmZDVjMzY5OWQyZThmNjQwZWQ4YmViMDQyMGM5ZC4uOWUwYzRhNTY2NmU0NGUwZWFj
YzIzMTJhYmJiNzY1NDUzYjg3OWY0OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU9NR1BsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21PTUdQbGFuLmNwcApAQCAtNjksMjEgKzY5LDE4IEBAIHZvaWQgT01HUGxhbjo6d29yayhDb21w
aWxhdGlvbkVmZm9ydCkKIHsKICAgICBBU1NFUlQobV9jb2RlQmxvY2stPnJ1bm5hYmxlKCkpOwog
ICAgIEFTU0VSVChtX2NvZGVCbG9jay5wdHIoKSA9PSBtX21vZHVsZS0+Y29kZUJsb2NrRm9yKG1v
ZGUoKSkpOwotICAgIGNvbnN0IEZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeSYgbG9jYXRpb24gPSBt
X21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlbbV9mdW5jdGlvbklu
ZGV4XTsKLSAgICBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0ID0gbV9tb2R1bGVJbmZvcm1h
dGlvbi0+c291cmNlLmRhdGEoKSArIGxvY2F0aW9uLnN0YXJ0OwotICAgIGNvbnN0IHNpemVfdCBm
dW5jdGlvbkxlbmd0aCA9IGxvY2F0aW9uLmVuZCAtIGxvY2F0aW9uLnN0YXJ0OwotICAgIEFTU0VS
VChmdW5jdGlvblN0YXJ0ICsgZnVuY3Rpb25MZW5ndGggPD0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+
c291cmNlLmVuZCgpKTsKKyAgICBjb25zdCBGdW5jdGlvbkRhdGEmIGZ1bmN0aW9uID0gbV9tb2R1
bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25zW21fZnVuY3Rpb25JbmRleF07CiAKICAgICBjb25zdCB1
aW50MzJfdCBmdW5jdGlvbkluZGV4U3BhY2UgPSBtX2Z1bmN0aW9uSW5kZXggKyBtX21vZHVsZS0+
bW9kdWxlSW5mb3JtYXRpb24oKS5pbXBvcnRGdW5jdGlvbkNvdW50KCk7CiAgICAgQVNTRVJUKGZ1
bmN0aW9uSW5kZXhTcGFjZSA8IG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLmZ1bmN0aW9u
SW5kZXhTcGFjZVNpemUoKSk7CiAKICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9
IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW21f
ZnVuY3Rpb25JbmRleF07CiAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1
cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKLSAgICBBU1NFUlQodmFsaWRhdGVG
dW5jdGlvbihmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBtX21vZHVs
ZUluZm9ybWF0aW9uLmdldCgpKSk7CisgICAgQVNTRVJUKHZhbGlkYXRlRnVuY3Rpb24oZnVuY3Rp
b24uZGF0YS5kYXRhKCksIGZ1bmN0aW9uLmRhdGEuc2l6ZSgpLCBzaWduYXR1cmUsIG1fbW9kdWxl
SW5mb3JtYXRpb24uZ2V0KCkpKTsKIAogICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxs
PiB1bmxpbmtlZENhbGxzOwogICAgIENvbXBpbGF0aW9uQ29udGV4dCBjb250ZXh0OwotICAgIGF1
dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlKGNvbnRleHQsIGZ1bmN0
aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIHVubGlua2VkQ2FsbHMsIG1fbW9k
dWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpPTUdNb2RlLCBt
X2Z1bmN0aW9uSW5kZXgpOworICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VB
bmRDb21waWxlKGNvbnRleHQsIGZ1bmN0aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRhLnNp
emUoKSwgc2lnbmF0dXJlLCB1bmxpbmtlZENhbGxzLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgp
LCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6T01HTW9kZSwgbV9mdW5jdGlvbkluZGV4KTsKIAog
ICAgIGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxlUmVzdWx0KSkgewogICAgICAgICBmYWls
KGhvbGRMb2NrKG1fbG9jayksIG1ha2VTdHJpbmcocGFyc2VBbmRDb21waWxlUmVzdWx0LmVycm9y
KCksICJ3aGVuIHRyeWluZyB0byB0aWVyIHVwICIsIFN0cmluZzo6bnVtYmVyKG1fZnVuY3Rpb25J
bmRleCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYXJz
ZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYXJzZXIuaAppbmRleCA2NTEw
NzA1ZWFmNTc4Y2UzM2UzYmQ3NmIyYmM4MzhhZGRhNWY1YjAwLi45ZmM0YTQ1NGM5YjcyNmZhMTNl
ODRhNGI0NzNmZWFkODEyYmI5OWYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBh
cnNlci5oCkBAIC01OCw2ICs1OCwxMCBAQCBjbGFzcyBQYXJzZXIgewogICAgIHR5cGVkZWYgRXhw
ZWN0ZWQ8dm9pZCwgRXJyb3JUeXBlPiBQYXJ0aWFsUmVzdWx0OwogICAgIHR5cGVkZWYgRXhwZWN0
ZWQ8U3VjY2Vzc1R5cGUsIEVycm9yVHlwZT4gUmVzdWx0OwogCisgICAgY29uc3QgdWludDhfdCog
c291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KKyAgICBzaXplX3QgbGVuZ3RoKCkg
Y29uc3QgeyByZXR1cm4gbV9zb3VyY2VMZW5ndGg7IH0KKyAgICBzaXplX3Qgb2Zmc2V0KCkgY29u
c3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKwogcHJvdGVjdGVkOgogICAgIFBhcnNlcihjb25zdCB1
aW50OF90Kiwgc2l6ZV90KTsKIApAQCAtODEsMTYgKzg1LDEzIEBAIGNsYXNzIFBhcnNlciB7CiAg
ICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VWYWx1ZVR5cGUoVHlwZSYpOwogICAgIGJv
b2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlRXh0ZXJuYWxLaW5kKEV4dGVybmFsS2luZCYpOwog
Ci0gICAgY29uc3QgdWludDhfdCogc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0K
LSAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VMZW5ndGg7IH0KLQog
ICAgIHNpemVfdCBtX29mZnNldCA9IDA7CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uQXJn
cz4KICAgICBORVZFUl9JTkxJTkUgVW5leHBlY3RlZFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
ZmFpbChBcmdzLi4uIGFyZ3MpIGNvbnN0CiAgICAgewogICAgICAgICB1c2luZyBuYW1lc3BhY2Ug
RmFpbHVyZUhlbHBlcjsgLy8gU2VlIEFETCBjb21tZW50IGluIG5hbWVzcGFjZSBhYm92ZS4KLSAg
ICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRSZXN1bHQobWFrZVN0cmluZygiV2ViQXNzZW1ibHkuTW9k
dWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAiX3MsIFN0cmluZzo6bnVtYmVyKG1fb2Zmc2V0KSwg
IiAvICJfcywgU3RyaW5nOjpudW1iZXIobV9zb3VyY2VMZW5ndGgpLCAiOiAiX3MsIG1ha2VTdHJp
bmcoYXJncykuLi4pKTsKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRSZXN1bHQobWFrZVN0cmlu
ZygiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAiX3MsIFN0cmluZzo6
bnVtYmVyKG1fb2Zmc2V0KSwgIjogIl9zLCBtYWtlU3RyaW5nKGFyZ3MpLi4uKSk7CiAgICAgfQog
I2RlZmluZSBXQVNNX1BBUlNFUl9GQUlMX0lGKGNvbmRpdGlvbiwgLi4uKSBkbyB7IFwKICAgICBp
ZiAoVU5MSUtFTFkoY29uZGl0aW9uKSkgICAgICAgICAgICAgICAgICAgICBcCkBAIC0yODUsNiAr
Mjg2LDE0IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI8U3VjY2Vzc1R5cGU+OjpwYXJzZUV4
dGVybmFsS2luZChFeHRlcm5hbEtpbmQmIHJlc3VsdCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAor
QUxXQVlTX0lOTElORSBJMzJJbml0RXhwciBtYWtlSTMySW5pdEV4cHIodWludDhfdCBvcGNvZGUs
IHVpbnQzMl90IGJpdHMpCit7CisgICAgUkVMRUFTRV9BU1NFUlQob3Bjb2RlID09IEkzMkNvbnN0
IHx8IG9wY29kZSA9PSBHZXRHbG9iYWwpOworICAgIGlmIChvcGNvZGUgPT0gSTMyQ29uc3QpCisg
ICAgICAgIHJldHVybiBJMzJJbml0RXhwcjo6Y29uc3RWYWx1ZShiaXRzKTsKKyAgICByZXR1cm4g
STMySW5pdEV4cHI6Omdsb2JhbEltcG9ydChiaXRzKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6Oldhc20KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21QbGFuLmNwcAppbmRleCBhMzRkZWVjYjE2YjE0MGJlYjUzYjg3YzZlMmE3
MDM5ODM0OTMwYzJjLi45OTc0ZWNmZTU1YmFmMjg5ZWVjNTY1MDY2YTFjZDQ5YWUyM2E4MjBhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCkBAIC01Myw4ICs1Myw2IEBA
IFBsYW46OlBsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiBpbmZv
LCBDb21wbGV0aW9uVGFzayYmIHRhc2ssCiAgICAgOiBtX21vZHVsZUluZm9ybWF0aW9uKFdURk1v
dmUoaW5mbykpCiAgICAgLCBtX2NyZWF0ZUVtYmVkZGVyV3JhcHBlcihXVEZNb3ZlKGNyZWF0ZUVt
YmVkZGVyV3JhcHBlcikpCiAgICAgLCBtX3Rocm93V2FzbUV4Y2VwdGlvbih0aHJvd1dhc21FeGNl
cHRpb24pCi0gICAgLCBtX3NvdXJjZShtX21vZHVsZUluZm9ybWF0aW9uLT5zb3VyY2UuZGF0YSgp
KQotICAgICwgbV9zb3VyY2VMZW5ndGgobV9tb2R1bGVJbmZvcm1hdGlvbi0+c291cmNlLnNpemUo
KSkKIHsKICAgICBtX2NvbXBsZXRpb25UYXNrcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoY29udGV4
dCwgV1RGTW92ZSh0YXNrKSkpOwogfQpAQCAtNjQsMTAgKzYyLDggQEAgUGxhbjo6UGxhbihDb250
ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGluZm8sIENvbXBsZXRpb25UYXNr
JiYgdGFzaykKIHsKIH0KIAotUGxhbjo6UGxhbihDb250ZXh0KiBjb250ZXh0LCBjb25zdCB1aW50
OF90KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgsIENvbXBsZXRpb25UYXNrJiYgdGFzaykK
LSAgICA6IG1fbW9kdWxlSW5mb3JtYXRpb24oYWRvcHRSZWYoKm5ldyBNb2R1bGVJbmZvcm1hdGlv
bihWZWN0b3I8dWludDhfdD4oKSkpKQotICAgICwgbV9zb3VyY2Uoc291cmNlKQotICAgICwgbV9z
b3VyY2VMZW5ndGgoc291cmNlTGVuZ3RoKQorUGxhbjo6UGxhbihDb250ZXh0KiBjb250ZXh0LCBD
b21wbGV0aW9uVGFzayYmIHRhc2spCisgICAgOiBtX21vZHVsZUluZm9ybWF0aW9uKE1vZHVsZUlu
Zm9ybWF0aW9uOjpjcmVhdGUoKSkKIHsKICAgICBtX2NvbXBsZXRpb25UYXNrcy5hcHBlbmQoc3Rk
OjptYWtlX3BhaXIoY29udGV4dCwgV1RGTW92ZSh0YXNrKSkpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21QbGFuLmgKaW5kZXggN2EwN2JmZDNhMGIwNmU5MzQ0MDk1N2RiMzZkZTZkZGRh
ZTYzYzY0Yy4uOWVjNjg4NjU4MTMzMWJhY2M5ZjA4ZGQyNmY5YWFiYjRlOWJkNTNiZiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCkBAIC01NCw3ICs1NCw3IEBAIGNsYXNzIFBs
YW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UGxhbj4gewogICAgIFBsYW4oQ29udGV4
dCosIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4sIENvbXBsZXRpb25UYXNrJiYpOwogCiAgICAgLy8g
Tm90ZTogVGhpcyBjb25zdHJ1Y3RvciBzaG91bGQgb25seSBiZSB1c2VkIGlmIHlvdSBhcmUgbm90
IGFjdHVhbGx5IGJ1aWxkaW5nIGEgbW9kdWxlIGUuZy4gdmFsaWRhdGlvbi9mdW5jdGlvbiB0ZXN0
cwotICAgIEpTX0VYUE9SVF9QUklWQVRFIFBsYW4oQ29udGV4dCosIGNvbnN0IHVpbnQ4X3QqLCBz
aXplX3QsIENvbXBsZXRpb25UYXNrJiYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFBsYW4oQ29u
dGV4dCosIENvbXBsZXRpb25UYXNrJiYpOwogICAgIHZpcnR1YWwgSlNfRVhQT1JUX1BSSVZBVEUg
flBsYW4oKTsKIAogICAgIC8vIElmIHlvdSBndWFyYW50ZWUgdGhlIG9yZGVyaW5nIGhlcmUsIHlv
dSBjYW4gcmVseSBvbiBGSUZPIG9mIHRoZQpAQCAtOTAsOCArOTAsNiBAQCBjbGFzcyBQbGFuIDog
cHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFBsYW4+IHsKICAgICBDcmVhdGVFbWJlZGRlcldy
YXBwZXIgbV9jcmVhdGVFbWJlZGRlcldyYXBwZXI7CiAgICAgVGhyb3dXYXNtRXhjZXB0aW9uIG1f
dGhyb3dXYXNtRXhjZXB0aW9uIHsgbnVsbHB0ciB9OwogCi0gICAgY29uc3QgdWludDhfdCogbV9z
b3VyY2U7Ci0gICAgY29uc3Qgc2l6ZV90IG1fc291cmNlTGVuZ3RoOwogICAgIFN0cmluZyBtX2Vy
cm9yTWVzc2FnZTsKICAgICBNZW1vcnlNb2RlIG1fbW9kZSB7IE1lbW9yeU1vZGU6OkJvdW5kc0No
ZWNraW5nIH07CiAgICAgTG9jayBtX2xvY2s7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtU2VjdGlvblBhcnNlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWE5YmFjYjY3ZGVkMjUwNDUz
NWQ4YzJkZTVjNWVkODMzZGVmMTYwMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21TZWN0aW9uUGFyc2VyLmNwcApAQCAtMCwwICsxLDU2MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2UgU3V6dWtpIDx5dXN1a2VzdXp1a2lAc2xv
d3N0YXJ0Lm9yZz4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXYXNtU2VjdGlvblBhcnNlci5oIgorCisj
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiSWRlbnRpZmllcklubGluZXMuaCIK
KyNpbmNsdWRlICJXYXNtTWVtb3J5SW5mb3JtYXRpb24uaCIKKyNpbmNsdWRlICJXYXNtTmFtZVNl
Y3Rpb25QYXJzZXIuaCIKKyNpbmNsdWRlICJXYXNtT3BzLmgiCisjaW5jbHVkZSAiV2FzbVNlY3Rp
b25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK2F1dG8gU2VjdGlv
blBhcnNlcjo6cGFyc2VUeXBlKCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHVpbnQzMl90IGNv
dW50OworCisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoY291bnQpLCAi
Y2FuJ3QgZ2V0IFR5cGUgc2VjdGlvbidzIGNvdW50Iik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9J
Rihjb3VudCA+IG1heFR5cGVzLCAiVHlwZSBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBj
b3VudCwgIiBtYXhpbXVtICIsIG1heFR5cGVzKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFt
X2luZm8tPnVzZWRTaWduYXR1cmVzLnRyeVJlc2VydmVDYXBhY2l0eShjb3VudCksICJjYW4ndCBh
bGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBUeXBlIHNlY3Rpb24ncyAiLCBjb3VudCwgIiBlbnRy
aWVzIik7CisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAg
ICAgICBpbnQ4X3QgdHlwZTsKKyAgICAgICAgdWludDMyX3QgYXJndW1lbnRDb3VudDsKKyAgICAg
ICAgVmVjdG9yPFR5cGU+IGFyZ3VtZW50VHlwZXM7CisKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VJbnQ3KHR5cGUpLCAiY2FuJ3QgZ2V0ICIsIGksICJ0aCBUeXBlJ3MgdHlwZSIp
OworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHR5cGUgIT0gRnVuYywgaSwgInRoIFR5cGUg
aXMgbm9uLUZ1bmMgIiwgdHlwZSk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNl
VmFyVUludDMyKGFyZ3VtZW50Q291bnQpLCAiY2FuJ3QgZ2V0ICIsIGksICJ0aCBUeXBlJ3MgYXJn
dW1lbnQgY291bnQiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihhcmd1bWVudENvdW50
ID4gbWF4RnVuY3Rpb25QYXJhbXMsIGksICJ0aCBhcmd1bWVudCBjb3VudCBpcyB0b28gYmlnICIs
IGFyZ3VtZW50Q291bnQsICIgbWF4aW11bSAiLCBtYXhGdW5jdGlvblBhcmFtcyk7CisgICAgICAg
IFJlZlB0cjxTaWduYXR1cmU+IG1heWJlU2lnbmF0dXJlID0gU2lnbmF0dXJlOjp0cnlDcmVhdGUo
YXJndW1lbnRDb3VudCk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1heWJlU2lnbmF0
dXJlLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgVHlwZSBzZWN0aW9uJ3MgIiwg
aSwgInRoIHNpZ25hdHVyZSIpOworICAgICAgICBSZWY8U2lnbmF0dXJlPiBzaWduYXR1cmUgPSBt
YXliZVNpZ25hdHVyZS5yZWxlYXNlTm9uTnVsbCgpOworCisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBhcmd1bWVudENvdW50OyArK2kpIHsKKyAgICAgICAgICAgIFR5cGUgYXJndW1l
bnRUeXBlOworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYWx1ZVR5cGUo
YXJndW1lbnRUeXBlKSwgImNhbid0IGdldCAiLCBpLCAidGggYXJndW1lbnQgVHlwZSIpOworICAg
ICAgICAgICAgc2lnbmF0dXJlLT5hcmd1bWVudChpKSA9IGFyZ3VtZW50VHlwZTsKKyAgICAgICAg
fQorCisgICAgICAgIHVpbnQ4X3QgcmV0dXJuQ291bnQ7CisgICAgICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIXBhcnNlVmFyVUludDEocmV0dXJuQ291bnQpLCAiY2FuJ3QgZ2V0ICIsIGksICJ0aCBU
eXBlJ3MgcmV0dXJuIGNvdW50Iik7CisgICAgICAgIFR5cGUgcmV0dXJuVHlwZTsKKyAgICAgICAg
aWYgKHJldHVybkNvdW50KSB7CisgICAgICAgICAgICBUeXBlIHZhbHVlOworICAgICAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYWx1ZVR5cGUodmFsdWUpLCAiY2FuJ3QgZ2V0ICIs
IGksICJ0aCBUeXBlJ3MgcmV0dXJuIHZhbHVlIik7CisgICAgICAgICAgICByZXR1cm5UeXBlID0g
c3RhdGljX2Nhc3Q8VHlwZT4odmFsdWUpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJl
dHVyblR5cGUgPSBUeXBlOjpWb2lkOworICAgICAgICBzaWduYXR1cmUtPnJldHVyblR5cGUoKSA9
IHJldHVyblR5cGU7CisKKyAgICAgICAgc3RkOjpwYWlyPFNpZ25hdHVyZUluZGV4LCBSZWY8U2ln
bmF0dXJlPj4gcmVzdWx0ID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmFkb3B0KFdURk1vdmUoc2ln
bmF0dXJlKSk7CisgICAgICAgIG1faW5mby0+dXNlZFNpZ25hdHVyZXMudW5jaGVja2VkQXBwZW5k
KFdURk1vdmUocmVzdWx0LnNlY29uZCkpOworICAgIH0KKyAgICByZXR1cm4geyB9OworfQorCith
dXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlSW1wb3J0KCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHVpbnQzMl90IGltcG9ydENvdW50OworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFy
VUludDMyKGltcG9ydENvdW50KSwgImNhbid0IGdldCBJbXBvcnQgc2VjdGlvbidzIGNvdW50Iik7
CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbXBvcnRDb3VudCA+IG1heEltcG9ydHMsICJJbXBv
cnQgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgaW1wb3J0Q291bnQsICIgbWF4aW11bSAi
LCBtYXhJbXBvcnRzKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmdsb2JhbHMu
dHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBt
ZW1vcnkgZm9yICIsIGltcG9ydENvdW50LCAiIGdsb2JhbHMiKTsgLy8gRklYTUUgdGhpcyBvdmVy
LWFsbG9jYXRlcyB3aGVuIHdlIGZpeCB0aGUgRklYTUVzIGJlbG93LgorICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIW1faW5mby0+aW1wb3J0cy50cnlSZXNlcnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQp
LCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgaW1wb3J0Q291bnQsICIgaW1w
b3J0cyIpOyAvLyBGSVhNRSB0aGlzIG92ZXItYWxsb2NhdGVzIHdoZW4gd2UgZml4IHRoZSBGSVhN
RXMgYmVsb3cuCisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5pbXBvcnRGdW5jdGlv
blNpZ25hdHVyZUluZGljZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50KSwgImNhbid0
IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGltcG9ydENvdW50LCAiIGltcG9ydCBmdW5j
dGlvbiBzaWduYXR1cmVzIik7IC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBm
aXggdGhlIEZJWE1FcyBiZWxvdy4KKworICAgIGZvciAodWludDMyX3QgaW1wb3J0TnVtYmVyID0g
MDsgaW1wb3J0TnVtYmVyIDwgaW1wb3J0Q291bnQ7ICsraW1wb3J0TnVtYmVyKSB7CisgICAgICAg
IHVpbnQzMl90IG1vZHVsZUxlbjsKKyAgICAgICAgdWludDMyX3QgZmllbGRMZW47CisgICAgICAg
IE5hbWUgbW9kdWxlU3RyaW5nOworICAgICAgICBOYW1lIGZpZWxkU3RyaW5nOworICAgICAgICBF
eHRlcm5hbEtpbmQga2luZDsKKyAgICAgICAgdW5zaWduZWQga2luZEluZGV4IHsgMCB9OworCisg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKG1vZHVsZUxlbiksICJj
YW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0J3MgbW9kdWxlIG5hbWUgbGVuZ3Ro
Iik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVVVEY4U3RyaW5nKG1vZHVs
ZVN0cmluZywgbW9kdWxlTGVuKSwgImNhbid0IGdldCAiLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBv
cnQncyBtb2R1bGUgbmFtZSBvZiBsZW5ndGggIiwgbW9kdWxlTGVuKTsKKworICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihmaWVsZExlbiksICJjYW4ndCBnZXQgIiwg
aW1wb3J0TnVtYmVyLCAidGggSW1wb3J0J3MgZmllbGQgbmFtZSBsZW5ndGggaW4gbW9kdWxlICci
LCBtb2R1bGVTdHJpbmcsICInIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWNvbnN1
bWVVVEY4U3RyaW5nKGZpZWxkU3RyaW5nLCBmaWVsZExlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0
TnVtYmVyLCAidGggSW1wb3J0J3MgZmllbGQgbmFtZSBvZiBsZW5ndGggIiwgbW9kdWxlTGVuLCAi
IGluIG1vZHVsZSAnIiwgbW9kdWxlU3RyaW5nLCAiJyIpOworCisgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXBhcnNlRXh0ZXJuYWxLaW5kKGtpbmQpLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51
bWJlciwgInRoIEltcG9ydCdzIGtpbmQgaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIGZp
ZWxkICciLCBmaWVsZFN0cmluZywgIiciKTsKKyAgICAgICAgc3dpdGNoIChraW5kKSB7CisgICAg
ICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpGdW5jdGlvbjogeworICAgICAgICAgICAgdWludDMyX3Qg
ZnVuY3Rpb25TaWduYXR1cmVJbmRleDsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlVmFyVUludDMyKGZ1bmN0aW9uU2lnbmF0dXJlSW5kZXgpLCAiY2FuJ3QgZ2V0ICIsIGlt
cG9ydE51bWJlciwgInRoIEltcG9ydCdzIGZ1bmN0aW9uIHNpZ25hdHVyZSBpbiBtb2R1bGUgJyIs
IG1vZHVsZVN0cmluZywgIicgZmllbGQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOworICAgICAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvblNpZ25hdHVyZUluZGV4ID49IG1faW5mby0+
dXNlZFNpZ25hdHVyZXMuc2l6ZSgpLCAiaW52YWxpZCBmdW5jdGlvbiBzaWduYXR1cmUgZm9yICIs
IGltcG9ydE51bWJlciwgInRoIEltcG9ydCwgIiwgZnVuY3Rpb25TaWduYXR1cmVJbmRleCwgIiBp
cyBvdXQgb2YgcmFuZ2Ugb2YgIiwgbV9pbmZvLT51c2VkU2lnbmF0dXJlcy5zaXplKCksICIgaW4g
bW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0cmluZywgIiciKTsK
KyAgICAgICAgICAgIGtpbmRJbmRleCA9IG1faW5mby0+aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJ
bmRpY2VzLnNpemUoKTsKKyAgICAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4
ID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChtX2luZm8tPnVzZWRTaWduYXR1cmVzW2Z1bmN0
aW9uU2lnbmF0dXJlSW5kZXhdKTsKKyAgICAgICAgICAgIG1faW5mby0+aW1wb3J0RnVuY3Rpb25T
aWduYXR1cmVJbmRpY2VzLnVuY2hlY2tlZEFwcGVuZChzaWduYXR1cmVJbmRleCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEV4dGVybmFsS2luZDo6VGFibGU6
IHsKKyAgICAgICAgICAgIGJvb2wgaXNJbXBvcnQgPSB0cnVlOworICAgICAgICAgICAgUGFydGlh
bFJlc3VsdCByZXN1bHQgPSBwYXJzZVRhYmxlSGVscGVyKGlzSW1wb3J0KTsKKyAgICAgICAgICAg
IGlmIChVTkxJS0VMWSghcmVzdWx0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoV1RGTW92ZShyZXN1bHQuZXJyb3IoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6Ok1lbW9yeTogeworICAgICAgICAgICAg
Ym9vbCBpc0ltcG9ydCA9IHRydWU7CisgICAgICAgICAgICBQYXJ0aWFsUmVzdWx0IHJlc3VsdCA9
IHBhcnNlTWVtb3J5SGVscGVyKGlzSW1wb3J0KTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSgh
cmVzdWx0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoV1RGTW92ZShy
ZXN1bHQuZXJyb3IoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBFeHRlcm5hbEtpbmQ6Okdsb2JhbDogeworICAgICAgICAgICAgR2xvYmFsIGdsb2JhbDsK
KyAgICAgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VHbG9iYWxUeXBlKGds
b2JhbCkpOworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihnbG9iYWwubXV0YWJpbGl0
eSA9PSBHbG9iYWw6Ok11dGFibGUsICJNdXRhYmxlIEdsb2JhbHMgYXJlbid0IHN1cHBvcnRlZCIp
OworCisgICAgICAgICAgICBraW5kSW5kZXggPSBtX2luZm8tPmdsb2JhbHMuc2l6ZSgpOworICAg
ICAgICAgICAgbV9pbmZvLT5nbG9iYWxzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGdsb2JhbCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG1f
aW5mby0+aW1wb3J0cy51bmNoZWNrZWRBcHBlbmQoeyBXVEZNb3ZlKG1vZHVsZVN0cmluZyksIFdU
Rk1vdmUoZmllbGRTdHJpbmcpLCBraW5kLCBraW5kSW5kZXggfSk7CisgICAgfQorCisgICAgbV9p
bmZvLT5maXJzdEludGVybmFsR2xvYmFsID0gbV9pbmZvLT5nbG9iYWxzLnNpemUoKTsKKyAgICBy
ZXR1cm4geyB9OworfQorCithdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlRnVuY3Rpb24oKSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgdWludDMyX3QgY291bnQ7CisgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VWYXJVSW50MzIoY291bnQpLCAiY2FuJ3QgZ2V0IEZ1bmN0aW9uIHNlY3Rpb24n
cyBjb3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoY291bnQgPiBtYXhGdW5jdGlvbnMs
ICJGdW5jdGlvbiBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBjb3VudCwgIiBtYXhpbXVt
ICIsIG1heEZ1bmN0aW9ucyk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5pbnRl
cm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy50cnlSZXNlcnZlQ2FwYWNpdHkoY291bnQpLCAi
Y2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgY291bnQsICIgRnVuY3Rpb24gc2ln
bmF0dXJlcyIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+ZnVuY3Rpb25zLnRy
eVJlc2VydmVDYXBhY2l0eShjb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZv
ciAiLCBjb3VudCwgIkZ1bmN0aW9uIGxvY2F0aW9ucyIpOworCisgICAgZm9yICh1aW50MzJfdCBp
ID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgdWludDMyX3QgdHlwZU51bWJlcjsKKyAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIodHlwZU51bWJlciksICJj
YW4ndCBnZXQgIiwgaSwgInRoIEZ1bmN0aW9uJ3MgdHlwZSBudW1iZXIiKTsKKyAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRih0eXBlTnVtYmVyID49IG1faW5mby0+dXNlZFNpZ25hdHVyZXMuc2l6
ZSgpLCBpLCAidGggRnVuY3Rpb24gdHlwZSBudW1iZXIgaXMgaW52YWxpZCAiLCB0eXBlTnVtYmVy
KTsKKworICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IFNpZ25hdHVyZUlu
Zm9ybWF0aW9uOjpnZXQobV9pbmZvLT51c2VkU2lnbmF0dXJlc1t0eXBlTnVtYmVyXSk7CisgICAg
ICAgIC8vIFRoZSBDb2RlIHNlY3Rpb24gZml4ZXMgdXAgc3RhcnQgYW5kIGVuZC4KKyAgICAgICAg
c2l6ZV90IHN0YXJ0ID0gMDsKKyAgICAgICAgc2l6ZV90IGVuZCA9IDA7CisgICAgICAgIG1faW5m
by0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXMudW5jaGVja2VkQXBwZW5kKHNpZ25h
dHVyZUluZGV4KTsKKyAgICAgICAgbV9pbmZvLT5mdW5jdGlvbnMudW5jaGVja2VkQXBwZW5kKHsg
c3RhcnQsIGVuZCwgVmVjdG9yPHVpbnQ4X3Q+KCkgfSk7CisgICAgfQorCisgICAgcmV0dXJuIHsg
fTsKK30KKworYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZVJlc2l6YWJsZUxpbWl0cyh1aW50MzJf
dCYgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4mIG1heGltdW0pIC0+IFBhcnRpYWxS
ZXN1bHQKK3sKKyAgICBBU1NFUlQoIW1heGltdW0pOworCisgICAgdWludDhfdCBmbGFnczsKKyAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQxKGZsYWdzKSwgImNhbid0IHBhcnNl
IHJlc2l6YWJsZSBsaW1pdHMgZmxhZ3MiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJz
ZVZhclVJbnQzMihpbml0aWFsKSwgImNhbid0IHBhcnNlIHJlc2l6YWJsZSBsaW1pdHMgaW5pdGlh
bCBwYWdlIGNvdW50Iik7CisKKyAgICBpZiAoZmxhZ3MpIHsKKyAgICAgICAgdWludDMyX3QgbWF4
aW11bUludDsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIobWF4
aW11bUludCksICJjYW4ndCBwYXJzZSByZXNpemFibGUgbGltaXRzIG1heGltdW0gcGFnZSBjb3Vu
dCIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluaXRpYWwgPiBtYXhpbXVtSW50LCAi
cmVzaXphYmxlIGxpbWl0cyBoYXMgYSBpbml0aWFsIHBhZ2UgY291bnQgb2YgIiwgaW5pdGlhbCwg
IiB3aGljaCBpcyBncmVhdGVyIHRoYW4gaXRzIG1heGltdW0gIiwgbWF4aW11bUludCk7CisgICAg
ICAgIG1heGltdW0gPSBtYXhpbXVtSW50OworICAgIH0KKworICAgIHJldHVybiB7IH07Cit9CisK
K2F1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VUYWJsZUhlbHBlcihib29sIGlzSW1wb3J0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX2luZm8tPnRhYmxlQ291
bnQoKSA+IDAsICJDYW5ub3QgaGF2ZSBtb3JlIHRoYW4gb25lIFRhYmxlIGZvciBub3ciKTsKKwor
ICAgIGludDhfdCB0eXBlOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlSW50Nyh0eXBl
KSwgImNhbid0IHBhcnNlIFRhYmxlIHR5cGUiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHR5
cGUgIT0gV2FzbTo6QW55ZnVuYywgIlRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAi
LCB0eXBlKTsKKworICAgIHVpbnQzMl90IGluaXRpYWw7CisgICAgc3RkOjpvcHRpb25hbDx1aW50
MzJfdD4gbWF4aW11bTsKKyAgICBQYXJ0aWFsUmVzdWx0IGxpbWl0cyA9IHBhcnNlUmVzaXphYmxl
TGltaXRzKGluaXRpYWwsIG1heGltdW0pOworICAgIGlmIChVTkxJS0VMWSghbGltaXRzKSkKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFdURk1vdmUobGltaXRzLmVycm9yKCkpKTsKKyAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluaXRpYWwgPiBtYXhUYWJsZUVudHJpZXMsICJUYWJsZSdz
IGluaXRpYWwgcGFnZSBjb3VudCBvZiAiLCBpbml0aWFsLCAiIGlzIHRvbyBiaWcsIG1heGltdW0g
IiwgbWF4VGFibGVFbnRyaWVzKTsKKworICAgIEFTU0VSVCghbWF4aW11bSB8fCAqbWF4aW11bSA+
PSBpbml0aWFsKTsKKworICAgIG1faW5mby0+dGFibGVJbmZvcm1hdGlvbiA9IFRhYmxlSW5mb3Jt
YXRpb24oaW5pdGlhbCwgbWF4aW11bSwgaXNJbXBvcnQpOworCisgICAgcmV0dXJuIHsgfTsKK30K
KworYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZVRhYmxlKCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHVpbnQzMl90IGNvdW50OworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUlu
dDMyKGNvdW50KSwgImNhbid0IGdldCBUYWJsZSdzIGNvdW50Iik7CisgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihjb3VudCA+IDEsICJUYWJsZSBjb3VudCBvZiAiLCBjb3VudCwgIiBpcyBpbnZhbGlk
LCBhdCBtb3N0IDEgaXMgYWxsb3dlZCBmb3Igbm93Iik7CisKKyAgICBpZiAoIWNvdW50KQorICAg
ICAgICByZXR1cm4geyB9OworCisgICAgYm9vbCBpc0ltcG9ydCA9IGZhbHNlOworICAgIFBhcnRp
YWxSZXN1bHQgcmVzdWx0ID0gcGFyc2VUYWJsZUhlbHBlcihpc0ltcG9ydCk7CisgICAgaWYgKFVO
TElLRUxZKCFyZXN1bHQpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoV1RGTW92ZShy
ZXN1bHQuZXJyb3IoKSkpOworCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBTZWN0aW9uUGFy
c2VyOjpwYXJzZU1lbW9yeUhlbHBlcihib29sIGlzSW1wb3J0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7
CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX2luZm8tPm1lbW9yeUNvdW50KCksICJ0aGVyZSBj
YW4gYXQgbW9zdCBiZSBvbmUgTWVtb3J5IHNlY3Rpb24gZm9yIG5vdyIpOworCisgICAgUGFnZUNv
dW50IGluaXRpYWxQYWdlQ291bnQ7CisgICAgUGFnZUNvdW50IG1heGltdW1QYWdlQ291bnQ7Cisg
ICAgeworICAgICAgICB1aW50MzJfdCBpbml0aWFsOworICAgICAgICBzdGQ6Om9wdGlvbmFsPHVp
bnQzMl90PiBtYXhpbXVtOworICAgICAgICBQYXJ0aWFsUmVzdWx0IGxpbWl0cyA9IHBhcnNlUmVz
aXphYmxlTGltaXRzKGluaXRpYWwsIG1heGltdW0pOworICAgICAgICBpZiAoVU5MSUtFTFkoIWxp
bWl0cykpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoV1RGTW92ZShsaW1pdHMu
ZXJyb3IoKSkpOworICAgICAgICBBU1NFUlQoIW1heGltdW0gfHwgKm1heGltdW0gPj0gaW5pdGlh
bCk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIVBhZ2VDb3VudDo6aXNWYWxpZChpbml0
aWFsKSwgIk1lbW9yeSdzIGluaXRpYWwgcGFnZSBjb3VudCBvZiAiLCBpbml0aWFsLCAiIGlzIGlu
dmFsaWQiKTsKKworICAgICAgICBpbml0aWFsUGFnZUNvdW50ID0gUGFnZUNvdW50KGluaXRpYWwp
OworCisgICAgICAgIGlmIChtYXhpbXVtKSB7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKCFQYWdlQ291bnQ6OmlzVmFsaWQoKm1heGltdW0pLCAiTWVtb3J5J3MgbWF4aW11bSBwYWdl
IGNvdW50IG9mICIsICptYXhpbXVtLCAiIGlzIGludmFsaWQiKTsKKyAgICAgICAgICAgIG1heGlt
dW1QYWdlQ291bnQgPSBQYWdlQ291bnQoKm1heGltdW0pOworICAgICAgICB9CisgICAgfQorICAg
IEFTU0VSVChpbml0aWFsUGFnZUNvdW50KTsKKyAgICBBU1NFUlQoIW1heGltdW1QYWdlQ291bnQg
fHwgbWF4aW11bVBhZ2VDb3VudCA+PSBpbml0aWFsUGFnZUNvdW50KTsKKworICAgIG1faW5mby0+
bWVtb3J5ID0gTWVtb3J5SW5mb3JtYXRpb24oaW5pdGlhbFBhZ2VDb3VudCwgbWF4aW11bVBhZ2VD
b3VudCwgaXNJbXBvcnQpOworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gU2VjdGlvblBhcnNl
cjo6cGFyc2VNZW1vcnkoKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgdWludDhfdCBjb3VudDsK
KyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQxKGNvdW50KSwgImNhbid0IHBh
cnNlIE1lbW9yeSBzZWN0aW9uJ3MgY291bnQiKTsKKworICAgIGlmICghY291bnQpCisgICAgICAg
IHJldHVybiB7IH07CisKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGNvdW50ICE9IDEsICJNZW1v
cnkgc2VjdGlvbiBoYXMgbW9yZSB0aGFuIG9uZSBtZW1vcnksIFdlYkFzc2VtYmx5IGN1cnJlbnRs
eSBvbmx5IGFsbG93cyB6ZXJvIG9yIG9uZSIpOworCisgICAgYm9vbCBpc0ltcG9ydCA9IGZhbHNl
OworICAgIHJldHVybiBwYXJzZU1lbW9yeUhlbHBlcihpc0ltcG9ydCk7Cit9CisKK2F1dG8gU2Vj
dGlvblBhcnNlcjo6cGFyc2VHbG9iYWwoKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgdWludDMy
X3QgZ2xvYmFsQ291bnQ7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIo
Z2xvYmFsQ291bnQpLCAiY2FuJ3QgZ2V0IEdsb2JhbCBzZWN0aW9uJ3MgY291bnQiKTsKKyAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKGdsb2JhbENvdW50ID4gbWF4R2xvYmFscywgIkdsb2JhbCBzZWN0
aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBnbG9iYWxDb3VudCwgIiBtYXhpbXVtICIsIG1heEds
b2JhbHMpOworICAgIHNpemVfdCB0b3RhbEJ5dGVzID0gZ2xvYmFsQ291bnQgKyBtX2luZm8tPmZp
cnN0SW50ZXJuYWxHbG9iYWw7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigoc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KHRvdGFsQnl0ZXMpIDwgZ2xvYmFsQ291bnQpIHx8ICFtX2luZm8tPmdsb2JhbHMu
dHJ5UmVzZXJ2ZUNhcGFjaXR5KHRvdGFsQnl0ZXMpLCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZv
ciAiLCB0b3RhbEJ5dGVzLCAiIGdsb2JhbHMiKTsKKworICAgIGZvciAodWludDMyX3QgZ2xvYmFs
SW5kZXggPSAwOyBnbG9iYWxJbmRleCA8IGdsb2JhbENvdW50OyArK2dsb2JhbEluZGV4KSB7Cisg
ICAgICAgIEdsb2JhbCBnbG9iYWw7CisgICAgICAgIHVpbnQ4X3QgaW5pdE9wY29kZTsKKworICAg
ICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlR2xvYmFsVHlwZShnbG9iYWwpKTsK
KyAgICAgICAgVHlwZSB0eXBlRm9ySW5pdE9wY29kZTsKKyAgICAgICAgV0FTTV9GQUlMX0lGX0hF
TFBFUl9GQUlMUyhwYXJzZUluaXRFeHByKGluaXRPcGNvZGUsIGdsb2JhbC5pbml0aWFsQml0c09y
SW1wb3J0TnVtYmVyLCB0eXBlRm9ySW5pdE9wY29kZSkpOworICAgICAgICBpZiAoaW5pdE9wY29k
ZSA9PSBHZXRHbG9iYWwpCisgICAgICAgICAgICBnbG9iYWwuaW5pdGlhbGl6YXRpb25UeXBlID0g
R2xvYmFsOjpGcm9tR2xvYmFsSW1wb3J0OworICAgICAgICBlbHNlCisgICAgICAgICAgICBnbG9i
YWwuaW5pdGlhbGl6YXRpb25UeXBlID0gR2xvYmFsOjpGcm9tRXhwcmVzc2lvbjsKKyAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRih0eXBlRm9ySW5pdE9wY29kZSAhPSBnbG9iYWwudHlwZSwgIkds
b2JhbCBpbml0X2V4cHIgb3Bjb2RlIG9mIHR5cGUgIiwgdHlwZUZvckluaXRPcGNvZGUsICIgZG9l
c24ndCBtYXRjaCBnbG9iYWwncyB0eXBlICIsIGdsb2JhbC50eXBlKTsKKworICAgICAgICBtX2lu
Zm8tPmdsb2JhbHMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoZ2xvYmFsKSk7CisgICAgfQorCisg
ICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZUV4cG9ydCgpIC0+
IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1aW50MzJfdCBleHBvcnRDb3VudDsKKyAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihleHBvcnRDb3VudCksICJjYW4ndCBnZXQgRXhw
b3J0IHNlY3Rpb24ncyBjb3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZXhwb3J0Q291
bnQgPiBtYXhFeHBvcnRzLCAiRXhwb3J0IHNlY3Rpb24ncyBjb3VudCBpcyB0b28gYmlnICIsIGV4
cG9ydENvdW50LCAiIG1heGltdW0gIiwgbWF4RXhwb3J0cyk7CisgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighbV9pbmZvLT5leHBvcnRzLnRyeVJlc2VydmVDYXBhY2l0eShleHBvcnRDb3VudCksICJj
YW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBleHBvcnRDb3VudCwgIiBleHBvcnRz
Iik7CisKKyAgICBIYXNoU2V0PFN0cmluZz4gZXhwb3J0TmFtZXM7CisgICAgZm9yICh1aW50MzJf
dCBleHBvcnROdW1iZXIgPSAwOyBleHBvcnROdW1iZXIgPCBleHBvcnRDb3VudDsgKytleHBvcnRO
dW1iZXIpIHsKKyAgICAgICAgdWludDMyX3QgZmllbGRMZW47CisgICAgICAgIE5hbWUgZmllbGRT
dHJpbmc7CisgICAgICAgIEV4dGVybmFsS2luZCBraW5kOworICAgICAgICB1bnNpZ25lZCBraW5k
SW5kZXg7CisKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZmll
bGRMZW4pLCAiY2FuJ3QgZ2V0ICIsIGV4cG9ydE51bWJlciwgInRoIEV4cG9ydCdzIGZpZWxkIG5h
bWUgbGVuZ3RoIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVVVEY4U3Ry
aW5nKGZpZWxkU3RyaW5nLCBmaWVsZExlbiksICJjYW4ndCBnZXQgIiwgZXhwb3J0TnVtYmVyLCAi
dGggRXhwb3J0J3MgZmllbGQgbmFtZSBvZiBsZW5ndGggIiwgZmllbGRMZW4pOworICAgICAgICBT
dHJpbmcgZmllbGROYW1lID0gU3RyaW5nOjpmcm9tVVRGOChmaWVsZFN0cmluZyk7CisgICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoZXhwb3J0TmFtZXMuY29udGFpbnMoZmllbGROYW1lKSwgImR1
cGxpY2F0ZSBleHBvcnQ6ICciLCBmaWVsZFN0cmluZywgIiciKTsKKyAgICAgICAgZXhwb3J0TmFt
ZXMuYWRkKGZpZWxkTmFtZSk7CisKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VF
eHRlcm5hbEtpbmQoa2luZCksICJjYW4ndCBnZXQgIiwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0
J3Mga2luZCwgbmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOworICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihraW5kSW5kZXgpLCAiY2FuJ3QgZ2V0ICIsIGV4cG9y
dE51bWJlciwgInRoIEV4cG9ydCdzIGtpbmQgaW5kZXgsIG5hbWVkICciLCBmaWVsZFN0cmluZywg
IiciKTsKKyAgICAgICAgc3dpdGNoIChraW5kKSB7CisgICAgICAgIGNhc2UgRXh0ZXJuYWxLaW5k
OjpGdW5jdGlvbjogeworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihraW5kSW5kZXgg
Pj0gbV9pbmZvLT5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCksIGV4cG9ydE51bWJlciwgInRoIEV4
cG9ydCBoYXMgaW52YWxpZCBmdW5jdGlvbiBudW1iZXIgIiwga2luZEluZGV4LCAiIGl0IGV4Y2Vl
ZHMgdGhlIGZ1bmN0aW9uIGluZGV4IHNwYWNlICIsIG1faW5mby0+ZnVuY3Rpb25JbmRleFNwYWNl
U2l6ZSgpLCAiLCBuYW1lZCAnIiwgZmllbGRTdHJpbmcsICInIik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEV4dGVybmFsS2luZDo6VGFibGU6IHsKKyAgICAg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoa2luZEluZGV4ID49IG1faW5mby0+dGFibGVDb3Vu
dCgpLCAiY2FuJ3QgZXhwb3J0IFRhYmxlICIsIGtpbmRJbmRleCwgIiB0aGVyZSBhcmUgIiwgbV9p
bmZvLT50YWJsZUNvdW50KCksICIgVGFibGVzIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIEV4dGVybmFsS2luZDo6TWVtb3J5OiB7CisgICAgICAgICAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPm1lbW9yeSwgImNhbid0IGV4cG9ydCBhIG5vbi1l
eGlzdGVudCBNZW1vcnkiKTsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoa2luZElu
ZGV4LCAiY2FuJ3QgZXhwb3J0IE1lbW9yeSAiLCBraW5kSW5kZXgsICIgb25seSBvbmUgVGFibGUg
aXMgY3VycmVudGx5IHN1cHBvcnRlZCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6Okdsb2JhbDogeworICAgICAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRihraW5kSW5kZXggPj0gbV9pbmZvLT5nbG9iYWxzLnNpemUoKSwgZXhwb3J0
TnVtYmVyLCAidGggRXhwb3J0IGhhcyBpbnZhbGlkIGdsb2JhbCBudW1iZXIgIiwga2luZEluZGV4
LCAiIGl0IGV4Y2VlZHMgdGhlIGdsb2JhbHMgY291bnQgIiwgbV9pbmZvLT5nbG9iYWxzLnNpemUo
KSwgIiwgbmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOworICAgICAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRihtX2luZm8tPmdsb2JhbHNba2luZEluZGV4XS5tdXRhYmlsaXR5ICE9IEdsb2Jh
bDo6SW1tdXRhYmxlLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQgaXNuJ3QgaW1tdXRhYmxlLCBu
YW1lZCAnIiwgZmllbGRTdHJpbmcsICInIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgbV9pbmZvLT5leHBvcnRzLnVuY2hlY2tlZEFwcGVuZCh7
IFdURk1vdmUoZmllbGRTdHJpbmcpLCBraW5kLCBraW5kSW5kZXggfSk7CisgICAgfQorCisgICAg
cmV0dXJuIHsgfTsKK30KKworYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZVN0YXJ0KCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHVpbnQzMl90IHN0YXJ0RnVuY3Rpb25JbmRleDsKKyAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihzdGFydEZ1bmN0aW9uSW5kZXgpLCAiY2Fu
J3QgZ2V0IFN0YXJ0IGluZGV4Iik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihzdGFydEZ1bmN0
aW9uSW5kZXggPj0gbV9pbmZvLT5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCksICJTdGFydCBpbmRl
eCAiLCBzdGFydEZ1bmN0aW9uSW5kZXgsICIgZXhjZWVkcyBmdW5jdGlvbiBpbmRleCBzcGFjZSAi
LCBtX2luZm8tPmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7CisgICAgU2lnbmF0dXJlSW5kZXgg
c2lnbmF0dXJlSW5kZXggPSBtX2luZm8tPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZShzdGFydEZ1bmN0aW9uSW5kZXgpOworICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJl
ID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CisgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRihzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCAiU3RhcnQgZnVuY3Rpb24g
Y2FuJ3QgaGF2ZSBhcmd1bWVudHMiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHNpZ25hdHVy
ZS5yZXR1cm5UeXBlKCkgIT0gVm9pZCwgIlN0YXJ0IGZ1bmN0aW9uIGNhbid0IHJldHVybiBhIHZh
bHVlIik7CisgICAgbV9pbmZvLT5zdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSA9IHN0YXJ0RnVuY3Rp
b25JbmRleDsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNl
RWxlbWVudCgpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1aW50MzJfdCBlbGVtZW50Q291bnQ7
CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZWxlbWVudENvdW50KSwg
ImNhbid0IGdldCBFbGVtZW50IHNlY3Rpb24ncyBjb3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoZWxlbWVudENvdW50ID4gbWF4VGFibGVFbnRyaWVzLCAiRWxlbWVudCBzZWN0aW9uJ3Mg
Y291bnQgaXMgdG9vIGJpZyAiLCBlbGVtZW50Q291bnQsICIgbWF4aW11bSAiLCBtYXhUYWJsZUVu
dHJpZXMpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+ZWxlbWVudHMudHJ5UmVz
ZXJ2ZUNhcGFjaXR5KGVsZW1lbnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yICIs
IGVsZW1lbnRDb3VudCwgIiBFbGVtZW50cyIpOworICAgIGZvciAodW5zaWduZWQgZWxlbWVudE51
bSA9IDA7IGVsZW1lbnROdW0gPCBlbGVtZW50Q291bnQ7ICsrZWxlbWVudE51bSkgeworICAgICAg
ICB1aW50MzJfdCB0YWJsZUluZGV4OworICAgICAgICB1aW50NjRfdCBpbml0RXhwckJpdHM7Cisg
ICAgICAgIHVpbnQ4X3QgaW5pdE9wY29kZTsKKyAgICAgICAgdWludDMyX3QgaW5kZXhDb3VudDsK
KworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMih0YWJsZUluZGV4
KSwgImNhbid0IGdldCAiLCBlbGVtZW50TnVtLCAidGggRWxlbWVudCB0YWJsZSBpbmRleCIpOwor
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHRhYmxlSW5kZXggPj0gbV9pbmZvLT50YWJsZUNv
dW50KCksICJFbGVtZW50IHNlY3Rpb24gZm9yIFRhYmxlICIsIHRhYmxlSW5kZXgsICIgZXhjZWVk
cyBhdmFpbGFibGUgVGFibGUgIiwgbV9pbmZvLT50YWJsZUNvdW50KCkpOworICAgICAgICBUeXBl
IGluaXRFeHByVHlwZTsKKyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUlu
aXRFeHByKGluaXRPcGNvZGUsIGluaXRFeHByQml0cywgaW5pdEV4cHJUeXBlKSk7CisgICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoaW5pdEV4cHJUeXBlICE9IEkzMiwgIkVsZW1lbnQgaW5pdF9l
eHByIG11c3QgcHJvZHVjZSBhbiBpMzIiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
cGFyc2VWYXJVSW50MzIoaW5kZXhDb3VudCksICJjYW4ndCBnZXQgIiwgZWxlbWVudE51bSwgInRo
IGluZGV4IGNvdW50IGZvciBFbGVtZW50IHNlY3Rpb24iKTsKKyAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihpbmRleENvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgo
KSwgIkVsZW1lbnQgc2VjdGlvbidzICIsIGVsZW1lbnROdW0sICJ0aCBpbmRleCBjb3VudCBpcyB0
b28gYmlnICIsIGluZGV4Q291bnQpOworCisgICAgICAgIEFTU0VSVCghIW1faW5mby0+dGFibGVJ
bmZvcm1hdGlvbik7CisKKyAgICAgICAgRWxlbWVudCBlbGVtZW50KG1ha2VJMzJJbml0RXhwcihp
bml0T3Bjb2RlLCBpbml0RXhwckJpdHMpKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
ZWxlbWVudC5mdW5jdGlvbkluZGljZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGluZGV4Q291bnQpLCAi
Y2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiLCBpbmRleENvdW50LCAiIEVsZW1lbnQgaW5kaWNl
cyIpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IGluZGV4Q291
bnQ7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXg7CisgICAg
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihmdW5jdGlvbkluZGV4
KSwgImNhbid0IGdldCBFbGVtZW50IHNlY3Rpb24ncyAiLCBlbGVtZW50TnVtLCAidGggZWxlbWVu
dCdzICIsIGluZGV4LCAidGggaW5kZXgiKTsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoZnVuY3Rpb25JbmRleCA+PSBtX2luZm8tPmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSwgIkVs
ZW1lbnQgc2VjdGlvbidzICIsIGVsZW1lbnROdW0sICJ0aCBlbGVtZW50J3MgIiwgaW5kZXgsICJ0
aCBpbmRleCBpcyAiLCBmdW5jdGlvbkluZGV4LCAiIHdoaWNoIGV4Y2VlZHMgdGhlIGZ1bmN0aW9u
IGluZGV4IHNwYWNlIHNpemUgb2YgIiwgbV9pbmZvLT5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCkp
OworCisgICAgICAgICAgICBlbGVtZW50LmZ1bmN0aW9uSW5kaWNlcy51bmNoZWNrZWRBcHBlbmQo
ZnVuY3Rpb25JbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBtX2luZm8tPmVsZW1lbnRzLnVu
Y2hlY2tlZEFwcGVuZChXVEZNb3ZlKGVsZW1lbnQpKTsKKyAgICB9CisKKyAgICByZXR1cm4geyB9
OworfQorCisvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2hhbmdlZCB0byBiZSBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCBvbmNlIHdlIHN3aXRjaCBvdXIgcGFyc2luZyBpbmZyYXN0cnVjdHVy
ZSB0byB0aGUgc3RyZWFtaW5nIHBhcnNlci4KK2F1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VDb2Rl
KCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHVpbnQzMl90IGNvdW50OworICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGNvdW50KSwgImNhbid0IGdldCBDb2RlIHNlY3Rp
b24ncyBjb3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoY291bnQgPT0gc3RkOjpudW1l
cmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLCAiQ29kZSBzZWN0aW9uJ3MgY291bnQgaXMgdG9v
IGJpZyAiLCBjb3VudCk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihjb3VudCAhPSBtX2luZm8t
PmZ1bmN0aW9ucy5zaXplKCksICJDb2RlIHNlY3Rpb24gY291bnQgIiwgY291bnQsICIgZXhjZWVk
cyB0aGUgZGVjbGFyZWQgbnVtYmVyIG9mIGZ1bmN0aW9ucyAiLCBtX2luZm8tPmZ1bmN0aW9ucy5z
aXplKCkpOworCisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAg
ICAgICAgdWludDMyX3QgZnVuY3Rpb25TaXplOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFwYXJzZVZhclVJbnQzMihmdW5jdGlvblNpemUpLCAiY2FuJ3QgZ2V0ICIsIGksICJ0aCBDb2Rl
IGZ1bmN0aW9uJ3Mgc2l6ZSIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGZ1bmN0aW9u
U2l6ZSA+IGxlbmd0aCgpLCAiQ29kZSBmdW5jdGlvbidzIHNpemUgIiwgZnVuY3Rpb25TaXplLCAi
IGV4Y2VlZHMgdGhlIG1vZHVsZSdzIHNpemUgIiwgbGVuZ3RoKCkpOworICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKGZ1bmN0aW9uU2l6ZSA+IGxlbmd0aCgpIC0gbV9vZmZzZXQsICJDb2RlIGZ1
bmN0aW9uJ3Mgc2l6ZSAiLCBmdW5jdGlvblNpemUsICIgZXhjZWVkcyB0aGUgbW9kdWxlJ3MgcmVt
YWluaW5nIHNpemUiLCBsZW5ndGgoKSAtIG1fb2Zmc2V0KTsKKyAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihmdW5jdGlvblNpemUgPiBtYXhGdW5jdGlvblNpemUsICJDb2RlIGZ1bmN0aW9uJ3Mg
c2l6ZSAiLCBmdW5jdGlvblNpemUsICIgaXMgdG9vIGJpZyIpOworCisgICAgICAgIFZlY3Rvcjx1
aW50OF90PiBkYXRhKGZ1bmN0aW9uU2l6ZSk7CisgICAgICAgIHN0ZDo6bWVtY3B5KGRhdGEuZGF0
YSgpLCBzb3VyY2UoKSArIG1fb2Zmc2V0LCBmdW5jdGlvblNpemUpOworICAgICAgICBtX2luZm8t
PmZ1bmN0aW9uc1tpXS5zdGFydCA9IG1fb2Zmc2V0SW5Tb3VyY2UgKyBtX29mZnNldDsKKyAgICAg
ICAgbV9pbmZvLT5mdW5jdGlvbnNbaV0uZW5kID0gbV9vZmZzZXRJblNvdXJjZSArIG1fb2Zmc2V0
ICsgZnVuY3Rpb25TaXplOworICAgICAgICBtX2luZm8tPmZ1bmN0aW9uc1tpXS5kYXRhID0gV1RG
TW92ZShkYXRhKTsKKyAgICAgICAgbV9vZmZzZXQgKz0gZnVuY3Rpb25TaXplOworICAgIH0KKwor
ICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VJbml0RXhwcih1
aW50OF90JiBvcGNvZGUsIHVpbnQ2NF90JiBiaXRzT3JJbXBvcnROdW1iZXIsIFR5cGUmIHJlc3Vs
dFR5cGUpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJz
ZVVJbnQ4KG9wY29kZSksICJjYW4ndCBnZXQgaW5pdF9leHByJ3Mgb3Bjb2RlIik7CisKKyAgICBz
d2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgSTMyQ29uc3Q6IHsKKyAgICAgICAgaW50MzJfdCBj
b25zdGFudDsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJJbnQzMihjb25z
dGFudCksICJjYW4ndCBnZXQgY29uc3RhbnQgdmFsdWUgZm9yIGluaXRfZXhwcidzIGkzMi5jb25z
dCIpOworICAgICAgICBiaXRzT3JJbXBvcnROdW1iZXIgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4o
Y29uc3RhbnQpOworICAgICAgICByZXN1bHRUeXBlID0gSTMyOworICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICBjYXNlIEk2NENvbnN0OiB7CisgICAgICAgIGludDY0X3QgY29uc3RhbnQ7Cisg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFySW50NjQoY29uc3RhbnQpLCAiY2Fu
J3QgZ2V0IGNvbnN0YW50IHZhbHVlIGZvciBpbml0X2V4cHIncyBpNjQuY29uc3QiKTsKKyAgICAg
ICAgYml0c09ySW1wb3J0TnVtYmVyID0gY29uc3RhbnQ7CisgICAgICAgIHJlc3VsdFR5cGUgPSBJ
NjQ7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRjMyQ29uc3Q6IHsKKyAgICAg
ICAgdWludDMyX3QgY29uc3RhbnQ7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNl
VUludDMyKGNvbnN0YW50KSwgImNhbid0IGdldCBjb25zdGFudCB2YWx1ZSBmb3IgaW5pdF9leHBy
J3MgZjMyLmNvbnN0Iik7CisgICAgICAgIGJpdHNPckltcG9ydE51bWJlciA9IGNvbnN0YW50Owor
ICAgICAgICByZXN1bHRUeXBlID0gRjMyOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBj
YXNlIEY2NENvbnN0OiB7CisgICAgICAgIHVpbnQ2NF90IGNvbnN0YW50OworICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ2NChjb25zdGFudCksICJjYW4ndCBnZXQgY29uc3Rh
bnQgdmFsdWUgZm9yIGluaXRfZXhwcidzIGY2NC5jb25zdCIpOworICAgICAgICBiaXRzT3JJbXBv
cnROdW1iZXIgPSBjb25zdGFudDsKKyAgICAgICAgcmVzdWx0VHlwZSA9IEY2NDsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgY2FzZSBHZXRHbG9iYWw6IHsKKyAgICAgICAgdWludDMyX3Qg
aW5kZXg7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGluZGV4
KSwgImNhbid0IGdldCBnZXRfZ2xvYmFsJ3MgaW5kZXgiKTsKKworICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKGluZGV4ID49IG1faW5mby0+Z2xvYmFscy5zaXplKCksICJnZXRfZ2xvYmFsJ3Mg
aW5kZXggIiwgaW5kZXgsICIgZXhjZWVkcyB0aGUgbnVtYmVyIG9mIGdsb2JhbHMgIiwgbV9pbmZv
LT5nbG9iYWxzLnNpemUoKSk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoaW5kZXggPj0g
bV9pbmZvLT5maXJzdEludGVybmFsR2xvYmFsLCAiZ2V0X2dsb2JhbCBpbXBvcnQga2luZCBpbmRl
eCAiLCBpbmRleCwgIiBleGNlZWRzIHRoZSBmaXJzdCBpbnRlcm5hbCBnbG9iYWwgIiwgbV9pbmZv
LT5maXJzdEludGVybmFsR2xvYmFsKTsKKworICAgICAgICBBU1NFUlQobV9pbmZvLT5nbG9iYWxz
W2luZGV4XS5tdXRhYmlsaXR5ID09IEdsb2JhbDo6SW1tdXRhYmxlKTsKKyAgICAgICAgcmVzdWx0
VHlwZSA9IG1faW5mby0+Z2xvYmFsc1tpbmRleF0udHlwZTsKKyAgICAgICAgYml0c09ySW1wb3J0
TnVtYmVyID0gaW5kZXg7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYodHJ1ZSwgInVua25vd24gaW5pdF9leHByIG9wY29k
ZSAiLCBvcGNvZGUpOworICAgIH0KKworICAgIHVpbnQ4X3QgZW5kT3Bjb2RlOworICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUludDgoZW5kT3Bjb2RlKSwgImNhbid0IGdldCBpbml0X2V4
cHIncyBlbmQgb3Bjb2RlIik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihlbmRPcGNvZGUgIT0g
T3BUeXBlOjpFbmQsICJpbml0X2V4cHIgc2hvdWxkIGVuZCB3aXRoIGVuZCwgZW5kZWQgd2l0aCAi
LCBlbmRPcGNvZGUpOworCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBTZWN0aW9uUGFyc2Vy
OjpwYXJzZUdsb2JhbFR5cGUoR2xvYmFsJiBnbG9iYWwpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICB1aW50OF90IG11dGFiaWxpdHk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYWx1
ZVR5cGUoZ2xvYmFsLnR5cGUpLCAiY2FuJ3QgZ2V0IEdsb2JhbCdzIHZhbHVlIHR5cGUiKTsKKyAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQxKG11dGFiaWxpdHkpLCAiY2FuJ3Qg
Z2V0IEdsb2JhbCB0eXBlJ3MgbXV0YWJpbGl0eSIpOworICAgIGdsb2JhbC5tdXRhYmlsaXR5ID0g
c3RhdGljX2Nhc3Q8R2xvYmFsOjpNdXRhYmlsaXR5PihtdXRhYmlsaXR5KTsKKyAgICByZXR1cm4g
eyB9OworfQorCithdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlRGF0YSgpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICB1aW50MzJfdCBzZWdtZW50Q291bnQ7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RighcGFyc2VWYXJVSW50MzIoc2VnbWVudENvdW50KSwgImNhbid0IGdldCBEYXRhIHNlY3Rpb24n
cyBjb3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoc2VnbWVudENvdW50ID4gbWF4RGF0
YVNlZ21lbnRzLCAiRGF0YSBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBzZWdtZW50Q291
bnQsICIgbWF4aW11bSAiLCBtYXhEYXRhU2VnbWVudHMpOworICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIW1faW5mby0+ZGF0YS50cnlSZXNlcnZlQ2FwYWNpdHkoc2VnbWVudENvdW50KSwgImNhbid0
IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIERhdGEgc2VjdGlvbidzICIsIHNlZ21lbnRDb3Vu
dCwgIiBzZWdtZW50cyIpOworCisgICAgZm9yICh1aW50MzJfdCBzZWdtZW50TnVtYmVyID0gMDsg
c2VnbWVudE51bWJlciA8IHNlZ21lbnRDb3VudDsgKytzZWdtZW50TnVtYmVyKSB7CisgICAgICAg
IHVpbnQzMl90IG1lbW9yeUluZGV4OworICAgICAgICB1aW50NjRfdCBpbml0RXhwckJpdHM7Cisg
ICAgICAgIHVpbnQ4X3QgaW5pdE9wY29kZTsKKyAgICAgICAgdWludDMyX3QgZGF0YUJ5dGVMZW5n
dGg7CisKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIobWVtb3J5
SW5kZXgpLCAiY2FuJ3QgZ2V0ICIsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQncyBp
bmRleCIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG1lbW9yeUluZGV4ID49IG1faW5m
by0+bWVtb3J5Q291bnQoKSwgc2VnbWVudE51bWJlciwgInRoIERhdGEgc2VnbWVudCBoYXMgaW5k
ZXggIiwgbWVtb3J5SW5kZXgsICIgd2hpY2ggZXhjZWVkcyB0aGUgbnVtYmVyIG9mIE1lbW9yaWVz
ICIsIG1faW5mby0+bWVtb3J5Q291bnQoKSk7CisgICAgICAgIFR5cGUgaW5pdEV4cHJUeXBlOwor
ICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlSW5pdEV4cHIoaW5pdE9wY29k
ZSwgaW5pdEV4cHJCaXRzLCBpbml0RXhwclR5cGUpKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRihpbml0RXhwclR5cGUgIT0gSTMyLCBzZWdtZW50TnVtYmVyLCAidGggRGF0YSBzZWdtZW50
J3MgaW5pdF9leHByIG11c3QgcHJvZHVjZSBhbiBpMzIiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighcGFyc2VWYXJVSW50MzIoZGF0YUJ5dGVMZW5ndGgpLCAiY2FuJ3QgZ2V0ICIsIHNl
Z21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQncyBkYXRhIGJ5dGUgbGVuZ3RoIik7CisgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZGF0YUJ5dGVMZW5ndGggPiBtYXhNb2R1bGVTaXplLCBz
ZWdtZW50TnVtYmVyLCAidGggRGF0YSBzZWdtZW50J3MgZGF0YSBieXRlIGxlbmd0aCBpcyB0b28g
YmlnICIsIGRhdGFCeXRlTGVuZ3RoLCAiIG1heGltdW0gIiwgbWF4TW9kdWxlU2l6ZSk7CisKKyAg
ICAgICAgU2VnbWVudCogc2VnbWVudCA9IFNlZ21lbnQ6OmNyZWF0ZShtYWtlSTMySW5pdEV4cHIo
aW5pdE9wY29kZSwgaW5pdEV4cHJCaXRzKSwgZGF0YUJ5dGVMZW5ndGgpOworICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFzZWdtZW50LCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBm
b3IgIiwgc2VnbWVudE51bWJlciwgInRoIERhdGEgc2VnbWVudCBvZiBzaXplICIsIGRhdGFCeXRl
TGVuZ3RoKTsKKyAgICAgICAgbV9pbmZvLT5kYXRhLnVuY2hlY2tlZEFwcGVuZChTZWdtZW50Ojph
ZG9wdFB0cihzZWdtZW50KSk7CisgICAgICAgIGZvciAodWludDMyX3QgZGF0YUJ5dGUgPSAwOyBk
YXRhQnl0ZSA8IGRhdGFCeXRlTGVuZ3RoOyArK2RhdGFCeXRlKSB7CisgICAgICAgICAgICB1aW50
OF90IGJ5dGU7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ4KGJ5
dGUpLCAiY2FuJ3QgZ2V0ICIsIGRhdGFCeXRlLCAidGggZGF0YSBieXRlIGZyb20gIiwgc2VnbWVu
dE51bWJlciwgInRoIERhdGEgc2VnbWVudCIpOworICAgICAgICAgICAgc2VnbWVudC0+Ynl0ZShk
YXRhQnl0ZSkgPSBieXRlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB7IH07Cit9CisK
K2F1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VDdXN0b20oKSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgQ3VzdG9tU2VjdGlvbiBzZWN0aW9uOworICAgIHVpbnQzMl90IGN1c3RvbVNlY3Rpb25OdW1i
ZXIgPSBtX2luZm8tPmN1c3RvbVNlY3Rpb25zLnNpemUoKSArIDE7CisgICAgdWludDMyX3QgbmFt
ZUxlbjsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmN1c3RvbVNlY3Rpb25zLnRy
eVJlc2VydmVDYXBhY2l0eShjdXN0b21TZWN0aW9uTnVtYmVyKSwgImNhbid0IGFsbG9jYXRlIGVu
b3VnaCBtZW1vcnkgZm9yICIsIGN1c3RvbVNlY3Rpb25OdW1iZXIsICJ0aCBjdXN0b20gc2VjdGlv
biIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKG5hbWVMZW4pLCAi
Y2FuJ3QgZ2V0ICIsIGN1c3RvbVNlY3Rpb25OdW1iZXIsICJ0aCBjdXN0b20gc2VjdGlvbidzIG5h
bWUgbGVuZ3RoIik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighY29uc3VtZVVURjhTdHJpbmco
c2VjdGlvbi5uYW1lLCBuYW1lTGVuKSwgIm5hbWVMZW4gZ2V0ICIsIGN1c3RvbVNlY3Rpb25OdW1i
ZXIsICJ0aCBjdXN0b20gc2VjdGlvbidzIG5hbWUgb2YgbGVuZ3RoICIsIG5hbWVMZW4pOworCisg
ICAgdWludDMyX3QgcGF5bG9hZEJ5dGVzID0gbGVuZ3RoKCkgLSBtX29mZnNldDsKKyAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFzZWN0aW9uLnBheWxvYWQudHJ5UmVzZXJ2ZUNhcGFjaXR5KHBheWxv
YWRCeXRlcyksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBjdXN0b21TZWN0
aW9uTnVtYmVyLCAidGggY3VzdG9tIHNlY3Rpb24ncyAiLCBwYXlsb2FkQnl0ZXMsICIgYnl0ZXMi
KTsKKyAgICBmb3IgKHVpbnQzMl90IGJ5dGVOdW1iZXIgPSAwOyBieXRlTnVtYmVyIDwgcGF5bG9h
ZEJ5dGVzOyArK2J5dGVOdW1iZXIpIHsKKyAgICAgICAgdWludDhfdCBieXRlOworICAgICAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ4KGJ5dGUpLCAiY2FuJ3QgZ2V0ICIsIGJ5dGVO
dW1iZXIsICJ0aCBkYXRhIGJ5dGUgZnJvbSAiLCBjdXN0b21TZWN0aW9uTnVtYmVyLCAidGggY3Vz
dG9tIHNlY3Rpb24iKTsKKyAgICAgICAgc2VjdGlvbi5wYXlsb2FkLnVuY2hlY2tlZEFwcGVuZChi
eXRlKTsKKyAgICB9CisKKyAgICBOYW1lIG5hbWVOYW1lID0geyAnbicsICdhJywgJ20nLCAnZScg
fTsKKyAgICBpZiAoc2VjdGlvbi5uYW1lID09IG5hbWVOYW1lKSB7CisgICAgICAgIE5hbWVTZWN0
aW9uUGFyc2VyIG5hbWVTZWN0aW9uUGFyc2VyKHNlY3Rpb24ucGF5bG9hZC5iZWdpbigpLCBzZWN0
aW9uLnBheWxvYWQuc2l6ZSgpLCBtX2luZm8pOworICAgICAgICBpZiAoYXV0byBuYW1lU2VjdGlv
biA9IG5hbWVTZWN0aW9uUGFyc2VyLnBhcnNlKCkpCisgICAgICAgICAgICBtX2luZm8tPm5hbWVT
ZWN0aW9uID0gV1RGTW92ZSgqbmFtZVNlY3Rpb24pOworICAgIH0KKworICAgIG1faW5mby0+Y3Vz
dG9tU2VjdGlvbnMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoc2VjdGlvbikpOworCisgICAgcmV0
dXJuIHsgfTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVO
QUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21TZWN0aW9uUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2Vj
dGlvblBhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc4ZDAyODM2ZmM5ZjMyYmMyYjc4ZmJmOTBhZDJjNWRh
OWY5MTI4M2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtU2VjdGlvblBhcnNlci5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE4IFl1c3VrZSBTdXp1a2kgPHl1c3VrZXN1enVraUBzbG93c3RhcnQub3JnPi4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCisjaW5jbHVkZSAi
V2FzbU9wcy5oIgorI2luY2x1ZGUgIldhc21QYXJzZXIuaCIKKyNpbmNsdWRlIDx3dGYvT3B0aW9u
YWwuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgV2FzbSB7CisKK2NsYXNzIFNlY3Rpb25QYXJzZXIgZmluYWwgOiBwdWJsaWMgUGFyc2VyPHZv
aWQ+IHsKK3B1YmxpYzoKKyAgICBTZWN0aW9uUGFyc2VyKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNp
emVfdCBzaXplLCBzaXplX3Qgb2Zmc2V0SW5Tb3VyY2UsIE1vZHVsZUluZm9ybWF0aW9uJiBpbmZv
KQorICAgICAgICA6IFBhcnNlcihkYXRhLCBzaXplKQorICAgICAgICAsIG1fb2Zmc2V0SW5Tb3Vy
Y2Uob2Zmc2V0SW5Tb3VyY2UpCisgICAgICAgICwgbV9pbmZvKGluZm8pCisgICAgeworICAgIH0K
KworI2RlZmluZSBXQVNNX1NFQ1RJT05fREVDTEFSRV9QQVJTRVIoTkFNRSwgSUQsIERFU0NSSVBU
SU9OKSBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZSAjIyBOQU1FKCk7Cisg
ICAgRk9SX0VBQ0hfS05PV05fV0FTTV9TRUNUSU9OKFdBU01fU0VDVElPTl9ERUNMQVJFX1BBUlNF
UikKKyN1bmRlZiBXQVNNX1NFQ1RJT05fREVDTEFSRV9QQVJTRVIKKworICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlQ3VzdG9tKCk7CisKK3ByaXZhdGU6CisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIC4uLkFyZ3M+CisgICAgTkVWRVJfSU5MSU5FIFVuZXhwZWN0ZWRSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGZhaWwoQXJncy4uLiBhcmdzKSBjb25zdAorICAgIHsKKyAg
ICAgICAgdXNpbmcgbmFtZXNwYWNlIEZhaWx1cmVIZWxwZXI7IC8vIFNlZSBBREwgY29tbWVudCBp
biBuYW1lc3BhY2UgYWJvdmUuCisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkUmVzdWx0KG1ha2VT
dHJpbmcoIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgIl9zLCBTdHJp
bmc6Om51bWJlcihtX29mZnNldCArIG1fb2Zmc2V0SW5Tb3VyY2UpLCAiOiAiX3MsIG1ha2VTdHJp
bmcoYXJncykuLi4pKTsKKyAgICB9CisKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBwYXJzZUdsb2JhbFR5cGUoR2xvYmFsJik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VO
VVNFRF9SRVRVUk4gcGFyc2VNZW1vcnlIZWxwZXIoYm9vbCBpc0ltcG9ydCk7CisgICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VUYWJsZUhlbHBlcihib29sIGlzSW1wb3J0
KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVJlc2l6YWJsZUxp
bWl0cyh1aW50MzJfdCYgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4mIG1heGltdW0p
OworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlSW5pdEV4cHIodWlu
dDhfdCYsIHVpbnQ2NF90JiwgVHlwZSYgaW5pdEV4cHJUeXBlKTsKKworICAgIHNpemVfdCBtX29m
ZnNldEluU291cmNlOworICAgIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4gbV9pbmZvOworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJM
WSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TdHJlYW1pbmdQ
YXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNl
ci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uM2MyZDNmOWEzMWIxMmZkMmZhZjVjY2FiYmVhNTEzZTNiNGM3YzI0
MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TdHJl
YW1pbmdQYXJzZXIuY3BwCkBAIC0wLDAgKzEsMzkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE4IFl1c3VrZSBTdXp1a2kgPHl1c3VrZXN1enVraUBzbG93c3RhcnQub3JnPi4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldhc21TdHJlYW1pbmdQYXJzZXIuaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKKworI2luY2x1ZGUgIldhc21Nb2R1bGVQYXJzZXIuaCIKKyNpbmNsdWRlICJXYXNtU2VjdGlv
blBhcnNlci5oIgorI2luY2x1ZGUgPHd0Zi9VbmFsaWduZWRBY2Nlc3MuaD4KKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworbmFtZXNwYWNlIFdhc21TdHJlYW1pbmdQYXJzZXJJ
bnRlcm5hbCB7CitzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOworfQorCisj
ZGVmaW5lIFdBU01fU1RSRUFNSU5HX1BBUlNFUl9GQUlMX0lGX0hFTFBFUl9GQUlMUyhoZWxwZXIp
IFwKKyAgICBkbyB7IFwKKyAgICAgICAgYXV0byBoZWxwZXJSZXN1bHQgPSBoZWxwZXI7IFwKKyAg
ICAgICAgaWYgKFVOTElLRUxZKCFoZWxwZXJSZXN1bHQpKSB7IFwKKyAgICAgICAgICAgIG1fZXJy
b3JNZXNzYWdlID0gaGVscGVyUmVzdWx0LmVycm9yKCk7IFwKKyAgICAgICAgICAgIHJldHVybiBT
dGF0ZTo6RmF0YWxFcnJvcjsgXAorICAgICAgICB9IFwKKyAgICB9IHdoaWxlICgwKQorCitBTFdB
WVNfSU5MSU5FIHN0ZDo6b3B0aW9uYWw8dWludDhfdD4gcGFyc2VVSW50Nyhjb25zdCB1aW50OF90
KiBkYXRhLCBzaXplX3QmIG9mZnNldCwgc2l6ZV90IHNpemUpCit7CisgICAgaWYgKG9mZnNldCA+
PSBzaXplKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgdWludDhfdCByZXN1bHQgPSBkYXRh
W29mZnNldCsrXTsKKyAgICBpZiAocmVzdWx0IDwgMHg4MCkKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgLi4u
QXJncz4KK05FVkVSX0lOTElORSBhdXRvIFdBUk5fVU5VU0VEX1JFVFVSTiBTdHJlYW1pbmdQYXJz
ZXI6OmZhaWwoQXJncy4uLiBhcmdzKSAtPiBTdGF0ZQoreworICAgIHVzaW5nIG5hbWVzcGFjZSBG
YWlsdXJlSGVscGVyOyAvLyBTZWUgQURMIGNvbW1lbnQgaW4gbmFtZXNwYWNlIGFib3ZlLgorICAg
IG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3Qg
cGFyc2UgYXQgYnl0ZSAiX3MsIFN0cmluZzo6bnVtYmVyKG1fb2Zmc2V0KSwgIjogIl9zLCBtYWtl
U3RyaW5nKGFyZ3MpLi4uKTsKKyAgICBkYXRhTG9nTG5JZihXYXNtU3RyZWFtaW5nUGFyc2VySW50
ZXJuYWw6OnZlcmJvc2UsIG1fZXJyb3JNZXNzYWdlKTsKKyAgICByZXR1cm4gU3RhdGU6OkZhdGFs
RXJyb3I7Cit9CisKK1N0cmVhbWluZ1BhcnNlcjo6U3RyZWFtaW5nUGFyc2VyKE1vZHVsZUluZm9y
bWF0aW9uJiBpbmZvKQorICAgIDogbV9pbmZvKGluZm8pCit7CisgICAgZGF0YUxvZ0xuSWYoV2Fz
bVN0cmVhbWluZ1BhcnNlckludGVybmFsOjp2ZXJib3NlLCAic3RhcnRpbmcgdmFsaWRhdGlvbiIp
OworfQorCithdXRvIFN0cmVhbWluZ1BhcnNlcjo6cGFyc2VNb2R1bGVIZWFkZXIoVmVjdG9yPHVp
bnQ4X3Q+JiYgZGF0YSkgLT4gU3RhdGUKK3sKKyAgICBBU1NFUlQoZGF0YS5zaXplKCkgPT0gbW9k
dWxlSGVhZGVyU2l6ZSk7CisgICAgZGF0YUxvZ0xuSWYoV2FzbVN0cmVhbWluZ1BhcnNlckludGVy
bmFsOjp2ZXJib3NlLCAiaGVhZGVyIHZhbGlkYXRpb24iKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKGRhdGFbMF0gIT0gJ1wwJyB8fCBkYXRhWzFdICE9ICdhJyB8fCBkYXRhWzJdICE9ICdzJyB8
fCBkYXRhWzNdICE9ICdtJywgIm1vZHVsZXMgZG9lc24ndCBzdGFydCB3aXRoICdcXDBhc20nIik7
CisgICAgdWludDMyX3QgdmVyc2lvbk51bWJlciA9IFdURjo6dW5hbGlnbmVkTG9hZDx1aW50MzJf
dD4oZGF0YS5kYXRhKCkgKyA0KTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHZlcnNpb25OdW1i
ZXIgIT0gZXhwZWN0ZWRWZXJzaW9uTnVtYmVyLCAidW5leHBlY3RlZCB2ZXJzaW9uIG51bWJlciAi
LCB2ZXJzaW9uTnVtYmVyLCAiIGV4cGVjdGVkICIsIGV4cGVjdGVkVmVyc2lvbk51bWJlcik7Cisg
ICAgbV92ZXJzaW9uTnVtYmVyID0gdmVyc2lvbk51bWJlcjsKKyAgICByZXR1cm4gU3RhdGU6OlNl
Y3Rpb25IZWFkZXI7Cit9CisKK2F1dG8gU3RyZWFtaW5nUGFyc2VyOjpwYXJzZVNlY3Rpb25IZWFk
ZXIoVmVjdG9yPHVpbnQ4X3Q+JiYgZGF0YSkgLT4gU3RhdGUKK3sKKyAgICBBU1NFUlQoZGF0YS5z
aXplKCkgPT0gc2VjdGlvbkhlYWRlclNpemUpOworICAgIHNpemVfdCBvZmZzZXQgPSAwOworICAg
IGF1dG8gcmVzdWx0ID0gcGFyc2VVSW50NyhkYXRhLmRhdGEoKSwgb2Zmc2V0LCBkYXRhLnNpemUo
KSk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcmVzdWx0LCAiY2FuJ3QgZ2V0IHNlY3Rpb24g
Ynl0ZSIpOworCisgICAgU2VjdGlvbiBzZWN0aW9uID0gU2VjdGlvbjo6Q3VzdG9tOworICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIWRlY29kZVNlY3Rpb24oKnJlc3VsdCwgc2VjdGlvbiksICJpbnZh
bGlkIHNlY3Rpb24iKTsKKyAgICBBU1NFUlQoc2VjdGlvbiAhPSBTZWN0aW9uOjpCZWdpbik7Cisg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighdmFsaWRhdGVPcmRlcihtX3ByZXZpb3VzS25vd25TZWN0
aW9uLCBzZWN0aW9uKSwgImludmFsaWQgc2VjdGlvbiBvcmRlciwgIiwgbV9wcmV2aW91c0tub3du
U2VjdGlvbiwgIiBmb2xsb3dlZCBieSAiLCBzZWN0aW9uKTsKKyAgICBtX3NlY3Rpb24gPSBzZWN0
aW9uOworICAgIGlmIChpc0tub3duU2VjdGlvbihzZWN0aW9uKSkKKyAgICAgICAgbV9wcmV2aW91
c0tub3duU2VjdGlvbiA9IHNlY3Rpb247CisgICAgcmV0dXJuIFN0YXRlOjpTZWN0aW9uU2l6ZTsK
K30KKworYXV0byBTdHJlYW1pbmdQYXJzZXI6OnBhcnNlU2VjdGlvblNpemUodWludDMyX3Qgc2Vj
dGlvbkxlbmd0aCkgLT4gU3RhdGUKK3sKKyAgICBtX3NlY3Rpb25MZW5ndGggPSBzZWN0aW9uTGVu
Z3RoOworICAgIGlmIChtX3NlY3Rpb24gPT0gU2VjdGlvbjo6Q29kZSkKKyAgICAgICAgcmV0dXJu
IFN0YXRlOjpDb2RlU2VjdGlvblNpemU7CisgICAgcmV0dXJuIFN0YXRlOjpTZWN0aW9uQm9keTsK
K30KKworYXV0byBTdHJlYW1pbmdQYXJzZXI6OnBhcnNlQ29kZVNlY3Rpb25TaXplKHVpbnQzMl90
IGZ1bmN0aW9uQ291bnQpIC0+IFN0YXRlCit7CisgICAgbV9mdW5jdGlvbkNvdW50ID0gZnVuY3Rp
b25Db3VudDsKKyAgICBtX2Z1bmN0aW9uSW5kZXggPSAwOworICAgIG1fY29kZU9mZnNldCA9IG1f
b2Zmc2V0OworCisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvbkNvdW50ID09IHN0ZDo6
bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwgIkNvZGUgc2VjdGlvbidzIGNvdW50IGlz
IHRvbyBiaWcgIiwgZnVuY3Rpb25Db3VudCk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5j
dGlvbkNvdW50ICE9IG1faW5mby0+ZnVuY3Rpb25zLnNpemUoKSwgIkNvZGUgc2VjdGlvbiBjb3Vu
dCAiLCBmdW5jdGlvbkNvdW50LCAiIGV4Y2VlZHMgdGhlIGRlY2xhcmVkIG51bWJlciBvZiBmdW5j
dGlvbnMgIiwgbV9pbmZvLT5mdW5jdGlvbnMuc2l6ZSgpKTsKKworICAgIGlmIChtX2Z1bmN0aW9u
SW5kZXggPT0gbV9mdW5jdGlvbkNvdW50KSB7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
KG1fY29kZU9mZnNldCArIG1fc2VjdGlvbkxlbmd0aCkgIT0gbV9vZmZzZXQsICJwYXJzaW5nIGVu
ZGVkIGJlZm9yZSB0aGUgZW5kIG9mICIsIG1fc2VjdGlvbiwgIiBzZWN0aW9uIik7CisgICAgICAg
IHJldHVybiBTdGF0ZTo6U2VjdGlvbkhlYWRlcjsKKyAgICB9CisgICAgcmV0dXJuIFN0YXRlOjpG
dW5jdGlvbkhlYWRlcjsKK30KKworYXV0byBTdHJlYW1pbmdQYXJzZXI6OnBhcnNlRnVuY3Rpb25I
ZWFkZXIodWludDMyX3QgZnVuY3Rpb25TaXplKSAtPiBTdGF0ZQoreworICAgIG1fZnVuY3Rpb25T
aXplID0gZnVuY3Rpb25TaXplOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25TaXpl
ID4gbWF4RnVuY3Rpb25TaXplLCAiQ29kZSBmdW5jdGlvbidzIHNpemUgIiwgZnVuY3Rpb25TaXpl
LCAiIGlzIHRvbyBiaWciKTsKKyAgICByZXR1cm4gU3RhdGU6OkZ1bmN0aW9uQm9keTsKK30KKwor
YXV0byBTdHJlYW1pbmdQYXJzZXI6OnBhcnNlRnVuY3Rpb25Cb2R5KFZlY3Rvcjx1aW50OF90PiYm
IGRhdGEpIC0+IFN0YXRlCit7CisgICAgYXV0byYgZnVuY3Rpb24gPSBtX2luZm8tPmZ1bmN0aW9u
c1ttX2Z1bmN0aW9uSW5kZXhdOworICAgIGZ1bmN0aW9uLnN0YXJ0ID0gbV9vZmZzZXQ7CisgICAg
ZnVuY3Rpb24uZW5kID0gbV9vZmZzZXQgKyBtX2Z1bmN0aW9uU2l6ZTsKKyAgICBmdW5jdGlvbi5k
YXRhID0gV1RGTW92ZShkYXRhKTsKKyAgICBkYXRhTG9nTG5JZihXYXNtU3RyZWFtaW5nUGFyc2Vy
SW50ZXJuYWw6OnZlcmJvc2UsICJQcm9jZXNzaW5nIGZ1bmN0aW9uIHN0YXJ0aW5nIGF0OiAiLCBm
dW5jdGlvbi5zdGFydCwgIiBhbmQgZW5kaW5nIGF0OiAiLCBmdW5jdGlvbi5lbmQpOworICAgICsr
bV9mdW5jdGlvbkluZGV4OworICAgIGlmIChtX2Z1bmN0aW9uSW5kZXggPT0gbV9mdW5jdGlvbkNv
dW50KSB7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoKG1fY29kZU9mZnNldCArIG1fc2Vj
dGlvbkxlbmd0aCkgIT0gKG1fb2Zmc2V0ICsgbV9mdW5jdGlvblNpemUpLCAicGFyc2luZyBlbmRl
ZCBiZWZvcmUgdGhlIGVuZCBvZiAiLCBtX3NlY3Rpb24sICIgc2VjdGlvbiIpOworICAgICAgICBy
ZXR1cm4gU3RhdGU6OlNlY3Rpb25IZWFkZXI7CisgICAgfQorICAgIHJldHVybiBTdGF0ZTo6RnVu
Y3Rpb25IZWFkZXI7Cit9CisKK2F1dG8gU3RyZWFtaW5nUGFyc2VyOjpwYXJzZVNlY3Rpb25Cb2R5
KFZlY3Rvcjx1aW50OF90PiYmIGRhdGEpIC0+IFN0YXRlCit7CisgICAgU2VjdGlvblBhcnNlciBw
YXJzZXIoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCBtX29mZnNldCwgbV9pbmZvLmdldCgpKTsK
KyAgICBzd2l0Y2ggKG1fc2VjdGlvbikgeworI2RlZmluZSBXQVNNX1NFQ1RJT05fUEFSU0UoTkFN
RSwgSUQsIERFU0NSSVBUSU9OKSBcCisgICAgY2FzZSBTZWN0aW9uOjpOQU1FOiB7IFwKKyAgICAg
ICAgV0FTTV9TVFJFQU1JTkdfUEFSU0VSX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlci5wYXJz
ZSAjIyBOQU1FKCkpOyBcCisgICAgICAgIGJyZWFrOyBcCisgICAgfQorICAgIEZPUl9FQUNIX0tO
T1dOX1dBU01fU0VDVElPTihXQVNNX1NFQ1RJT05fUEFSU0UpCisjdW5kZWYgV0FTTV9TRUNUSU9O
X1BBUlNFCisKKyAgICBjYXNlIFNlY3Rpb246OkN1c3RvbTogeworICAgICAgICBXQVNNX1NUUkVB
TUlOR19QQVJTRVJfRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VyLnBhcnNlQ3VzdG9tKCkpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIFNlY3Rpb246OkJlZ2luOiB7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICB9CisKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHBhcnNlci5sZW5ndGgoKSAhPSBwYXJz
ZXIub2Zmc2V0KCksICJwYXJzaW5nIGVuZGVkIGJlZm9yZSB0aGUgZW5kIG9mICIsIG1fc2VjdGlv
biwgIiBzZWN0aW9uIik7CisKKyAgICByZXR1cm4gU3RhdGU6OlNlY3Rpb25IZWFkZXI7Cit9CisK
K2F1dG8gU3RyZWFtaW5nUGFyc2VyOjpjb25zdW1lKGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXpl
X3QgYnl0ZXNTaXplLCBzaXplX3QmIG9mZnNldEluQnl0ZXMsIHNpemVfdCByZXF1aXJlZFNpemUp
IC0+IHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PgoreworICAgIGlmIChtX3JlbWFpbmlu
Zy5zaXplKCkgPT0gcmVxdWlyZWRTaXplKSB7CisgICAgICAgIFZlY3Rvcjx1aW50OF90PiByZXN1
bHQgPSBXVEZNb3ZlKG1fcmVtYWluaW5nKTsKKyAgICAgICAgbV9uZXh0T2Zmc2V0ICs9IHJlcXVp
cmVkU2l6ZTsKKyAgICAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKKyAgICB9CisKKyAgICBp
ZiAobV9yZW1haW5pbmcuc2l6ZSgpID49IHJlcXVpcmVkU2l6ZSkgeworICAgICAgICBWZWN0b3I8
dWludDhfdD4gcmVzdWx0KHJlcXVpcmVkU2l6ZSk7CisgICAgICAgIG1lbWNweShyZXN1bHQuZGF0
YSgpLCBtX3JlbWFpbmluZy5kYXRhKCksIHJlcXVpcmVkU2l6ZSk7CisgICAgICAgIG1fcmVtYWlu
aW5nLnJlbW92ZSgwLCByZXF1aXJlZFNpemUpOworICAgICAgICBtX25leHRPZmZzZXQgKz0gcmVx
dWlyZWRTaXplOworICAgICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOworICAgIH0KKworICAg
IEFTU0VSVChtX3JlbWFpbmluZy5zaXplKCkgPCByZXF1aXJlZFNpemUpOworICAgIHNpemVfdCBi
eXRlc1JlbWFpbmluZ1NpemUgPSBieXRlc1NpemUgLSBvZmZzZXRJbkJ5dGVzOworICAgIHNpemVf
dCB0b3RhbERhdGFTaXplID0gbV9yZW1haW5pbmcuc2l6ZSgpICsgYnl0ZXNSZW1haW5pbmdTaXpl
OworICAgIGlmICh0b3RhbERhdGFTaXplIDwgcmVxdWlyZWRTaXplKSB7CisgICAgICAgIG1fcmVt
YWluaW5nLmFwcGVuZChieXRlcyArIG9mZnNldEluQnl0ZXMsIGJ5dGVzUmVtYWluaW5nU2l6ZSk7
CisgICAgICAgIG9mZnNldEluQnl0ZXMgPSBieXRlc1NpemU7CisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisgICAgfQorCisgICAgc2l6ZV90IHVzZWRTaXplID0gcmVxdWlyZWRTaXplIC0g
bV9yZW1haW5pbmcuc2l6ZSgpOworICAgIG1fcmVtYWluaW5nLmFwcGVuZChieXRlcyArIG9mZnNl
dEluQnl0ZXMsIHVzZWRTaXplKTsKKyAgICBvZmZzZXRJbkJ5dGVzICs9IHVzZWRTaXplOworICAg
IFZlY3Rvcjx1aW50OF90PiByZXN1bHQgPSBXVEZNb3ZlKG1fcmVtYWluaW5nKTsKKyAgICBtX25l
eHRPZmZzZXQgKz0gcmVxdWlyZWRTaXplOworICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7Cit9
CisKK2F1dG8gU3RyZWFtaW5nUGFyc2VyOjpjb25zdW1lVmFyVUludDMyKGNvbnN0IHVpbnQ4X3Qq
IGJ5dGVzLCBzaXplX3QgYnl0ZXNTaXplLCBzaXplX3QmIG9mZnNldEluQnl0ZXMsIElzRW5kT2ZT
dHJlYW0gaXNFbmRPZlN0cmVhbSkgLT4gRXhwZWN0ZWQ8dWludDMyX3QsIFN0YXRlPgoreworICAg
IGNvbnN0ZXhwciBzaXplX3QgbWF4U2l6ZSA9IDU7CisgICAgc2l6ZV90IGJ5dGVzUmVtYWluaW5n
U2l6ZSA9IGJ5dGVzU2l6ZSAtIG9mZnNldEluQnl0ZXM7CisgICAgc2l6ZV90IHRvdGFsRGF0YVNp
emUgPSBtX3JlbWFpbmluZy5zaXplKCkgKyBieXRlc1JlbWFpbmluZ1NpemU7CisgICAgaWYgKG1f
cmVtYWluaW5nLnNpemUoKSA+PSBtYXhTaXplKSB7CisgICAgICAgIC8vIERvIG5vdGhpbmcuCisg
ICAgfSBlbHNlIGlmICh0b3RhbERhdGFTaXplID49IG1heFNpemUpIHsKKyAgICAgICAgc2l6ZV90
IHVzZWRTaXplID0gbWF4U2l6ZSAtIG1fcmVtYWluaW5nLnNpemUoKTsKKyAgICAgICAgbV9yZW1h
aW5pbmcuYXBwZW5kKGJ5dGVzICsgb2Zmc2V0SW5CeXRlcywgdXNlZFNpemUpOworICAgICAgICBv
ZmZzZXRJbkJ5dGVzICs9IHVzZWRTaXplOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fcmVtYWlu
aW5nLmFwcGVuZChieXRlcyArIG9mZnNldEluQnl0ZXMsIGJ5dGVzUmVtYWluaW5nU2l6ZSk7Cisg
ICAgICAgIG9mZnNldEluQnl0ZXMgKz0gYnl0ZXNSZW1haW5pbmdTaXplOworICAgICAgICBpZiAo
aXNFbmRPZlN0cmVhbSA9PSBJc0VuZE9mU3RyZWFtOjpObykKKyAgICAgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChtX3N0YXRlKTsKKyAgICB9CisKKyAgICBzaXplX3Qgb2Zmc2V0ID0gMDsK
KyAgICB1aW50MzJfdCByZXN1bHQgPSAwOworICAgIGlmICghV1RGOjpMRUJEZWNvZGVyOjpkZWNv
ZGVVSW50MzIobV9yZW1haW5pbmcuZGF0YSgpLCBtX3JlbWFpbmluZy5zaXplKCksIG9mZnNldCwg
cmVzdWx0KSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0YXRlOjpGYXRhbEVycm9y
KTsKKyAgICBzaXplX3QgY29uc3VtZWRTaXplID0gb2Zmc2V0OworICAgIG1fcmVtYWluaW5nLnJl
bW92ZSgwLCBjb25zdW1lZFNpemUpOworICAgIG1fbmV4dE9mZnNldCArPSBjb25zdW1lZFNpemU7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYXV0byBTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVz
KGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3QgYnl0ZXNTaXplLCBJc0VuZE9mU3RyZWFtIGlz
RW5kT2ZTdHJlYW0pIC0+IFN0YXRlCit7CisgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkZhdGFs
RXJyb3IpCisgICAgICAgIHJldHVybiBtX3N0YXRlOworCisgICAgbV90b3RhbFNpemUgKz0gYnl0
ZXNTaXplOworICAgIGlmIChVTkxJS0VMWShtX3RvdGFsU2l6ZS5oYXNPdmVyZmxvd2VkKCkgfHwg
bV90b3RhbFNpemUudW5zYWZlR2V0KCkgPiBtYXhNb2R1bGVTaXplKSkgeworICAgICAgICBtX3N0
YXRlID0gZmFpbCgibW9kdWxlIHNpemUgaXMgdG9vIGxhcmdlLCBtYXhpbXVtICIsIG1heE1vZHVs
ZVNpemUpOworICAgICAgICByZXR1cm4gbV9zdGF0ZTsKKyAgICB9CisKKyAgICBpZiAoT3B0aW9u
czo6dXNlRWFnZXJXZWJBc3NlbWJseU1vZHVsZUhhc2hpbmcoKSkKKyAgICAgICAgbV9oYXNoZXIu
YWRkQnl0ZXMoYnl0ZXMsIGJ5dGVzU2l6ZSk7CisKKyAgICBzaXplX3Qgb2Zmc2V0SW5CeXRlcyA9
IDA7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAg
ICAgIGNhc2UgU3RhdGU6Ok1vZHVsZUhlYWRlcjogeworICAgICAgICAgICAgYXV0byByZXN1bHQg
PSBjb25zdW1lKGJ5dGVzLCBieXRlc1NpemUsIG9mZnNldEluQnl0ZXMsIG1vZHVsZUhlYWRlclNp
emUpOworICAgICAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1f
c3RhdGU7CisgICAgICAgICAgICBtX3N0YXRlID0gcGFyc2VNb2R1bGVIZWFkZXIoV1RGTW92ZSgq
cmVzdWx0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ug
U3RhdGU6OlNlY3Rpb25IZWFkZXI6IHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gY29uc3Vt
ZShieXRlcywgYnl0ZXNTaXplLCBvZmZzZXRJbkJ5dGVzLCBzZWN0aW9uSGVhZGVyU2l6ZSk7Cisg
ICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9zdGF0ZTsK
KyAgICAgICAgICAgIG1fc3RhdGUgPSBwYXJzZVNlY3Rpb25IZWFkZXIoV1RGTW92ZSgqcmVzdWx0
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgU3RhdGU6
OlNlY3Rpb25TaXplOiB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGNvbnN1bWVWYXJVSW50
MzIoYnl0ZXMsIGJ5dGVzU2l6ZSwgb2Zmc2V0SW5CeXRlcywgaXNFbmRPZlN0cmVhbSk7CisgICAg
ICAgICAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZXJyb3Io
KSA9PSBTdGF0ZTo6RmF0YWxFcnJvcikKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IGZh
aWxPblN0YXRlKG1fc3RhdGUpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgbV9zdGF0ZSA9IHJlc3VsdC5lcnJvcigpOworICAgICAgICAgICAgICAgIHJldHVybiBt
X3N0YXRlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9zdGF0ZSA9IHBhcnNlU2VjdGlv
blNpemUoKnJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IGNhc2UgU3RhdGU6OlNlY3Rpb25Cb2R5OiB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGNv
bnN1bWUoYnl0ZXMsIGJ5dGVzU2l6ZSwgb2Zmc2V0SW5CeXRlcywgbV9zZWN0aW9uTGVuZ3RoKTsK
KyAgICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgICAgIHJldHVybiBtX3N0YXRl
OworICAgICAgICAgICAgbV9zdGF0ZSA9IHBhcnNlU2VjdGlvbkJvZHkoV1RGTW92ZSgqcmVzdWx0
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgU3RhdGU6
OkNvZGVTZWN0aW9uU2l6ZTogeworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBjb25zdW1lVmFy
VUludDMyKGJ5dGVzLCBieXRlc1NpemUsIG9mZnNldEluQnl0ZXMsIGlzRW5kT2ZTdHJlYW0pOwor
ICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmVy
cm9yKCkgPT0gU3RhdGU6OkZhdGFsRXJyb3IpCisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUg
PSBmYWlsT25TdGF0ZShtX3N0YXRlKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIG1fc3RhdGUgPSByZXN1bHQuZXJyb3IoKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gbV9zdGF0ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fc3RhdGUgPSBwYXJzZUNv
ZGVTZWN0aW9uU2l6ZSgqcmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgY2FzZSBTdGF0ZTo6RnVuY3Rpb25IZWFkZXI6IHsKKyAgICAgICAgICAgIGF1dG8g
cmVzdWx0ID0gY29uc3VtZVZhclVJbnQzMihieXRlcywgYnl0ZXNTaXplLCBvZmZzZXRJbkJ5dGVz
LCBpc0VuZE9mU3RyZWFtKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgICAg
ICAgICAgaWYgKHJlc3VsdC5lcnJvcigpID09IFN0YXRlOjpGYXRhbEVycm9yKQorICAgICAgICAg
ICAgICAgICAgICBtX3N0YXRlID0gZmFpbE9uU3RhdGUobV9zdGF0ZSk7CisgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gcmVzdWx0LmVycm9yKCk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIG1fc3RhdGU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBtX3N0YXRlID0gcGFyc2VGdW5jdGlvbkhlYWRlcigqcmVzdWx0KTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBTdGF0ZTo6RnVuY3Rpb25Cb2R5OiB7Cisg
ICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGNvbnN1bWUoYnl0ZXMsIGJ5dGVzU2l6ZSwgb2Zmc2V0
SW5CeXRlcywgbV9mdW5jdGlvblNpemUpOworICAgICAgICAgICAgaWYgKCFyZXN1bHQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIG1fc3RhdGU7CisgICAgICAgICAgICBtX3N0YXRlID0gcGFyc2VG
dW5jdGlvbkJvZHkoV1RGTW92ZSgqcmVzdWx0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIGNhc2UgU3RhdGU6OkZpbmlzaGVkOgorICAgICAgICBjYXNlIFN0YXRl
OjpGYXRhbEVycm9yOgorICAgICAgICAgICAgcmV0dXJuIG1fc3RhdGU7CisgICAgICAgIH0KKwor
ICAgICAgICBtX29mZnNldCA9IG1fbmV4dE9mZnNldDsKKyAgICB9Cit9CisKK2F1dG8gU3RyZWFt
aW5nUGFyc2VyOjpmYWlsT25TdGF0ZShTdGF0ZSkgLT4gU3RhdGUKK3sKKyAgICBzd2l0Y2ggKG1f
c3RhdGUpIHsKKyAgICBjYXNlIFN0YXRlOjpNb2R1bGVIZWFkZXI6CisgICAgICAgIHJldHVybiBm
YWlsKCJleHBlY3RlZCBhIG1vZHVsZSBvZiBhdCBsZWFzdCAiLCBtb2R1bGVIZWFkZXJTaXplLCAi
IGJ5dGVzIik7CisgICAgY2FzZSBTdGF0ZTo6U2VjdGlvbkhlYWRlcjoKKyAgICAgICAgcmV0dXJu
IGZhaWwoImNhbid0IGdldCBzZWN0aW9uIGJ5dGUiKTsKKyAgICBjYXNlIFN0YXRlOjpTZWN0aW9u
U2l6ZToKKyAgICAgICAgcmV0dXJuIGZhaWwoImNhbid0IGdldCAiLCBtX3NlY3Rpb24sICIgc2Vj
dGlvbidzIGxlbmd0aCIpOworICAgIGNhc2UgU3RhdGU6OlNlY3Rpb25Cb2R5OgorICAgICAgICBy
ZXR1cm4gZmFpbChtX3NlY3Rpb24sICIgc2VjdGlvbiBvZiBzaXplICIsIG1fc2VjdGlvbkxlbmd0
aCwgIiB3b3VsZCBvdmVyZmxvdyBNb2R1bGUncyBzaXplIik7CisgICAgY2FzZSBTdGF0ZTo6Q29k
ZVNlY3Rpb25TaXplOgorICAgICAgICByZXR1cm4gZmFpbCgiY2FuJ3QgZ2V0IENvZGUgc2VjdGlv
bidzIGNvdW50Iik7CisgICAgY2FzZSBTdGF0ZTo6RnVuY3Rpb25IZWFkZXI6CisgICAgICAgIHJl
dHVybiBmYWlsKCJjYW4ndCBnZXQgIiwgbV9mdW5jdGlvbkluZGV4LCAidGggQ29kZSBmdW5jdGlv
bidzIHNpemUiKTsKKyAgICBjYXNlIFN0YXRlOjpGdW5jdGlvbkJvZHk6CisgICAgICAgIHJldHVy
biBmYWlsKCJDb2RlIGZ1bmN0aW9uJ3Mgc2l6ZSAiLCBtX2Z1bmN0aW9uU2l6ZSwgIiBleGNlZWRz
IHRoZSBtb2R1bGUncyByZW1haW5pbmcgc2l6ZSIpOworICAgIGNhc2UgU3RhdGU6OkZpbmlzaGVk
OgorICAgIGNhc2UgU3RhdGU6OkZhdGFsRXJyb3I6CisgICAgICAgIHJldHVybiBtX3N0YXRlOwor
ICAgIH0KKyAgICByZXR1cm4gbV9zdGF0ZTsKK30KKworYXV0byBTdHJlYW1pbmdQYXJzZXI6OmZp
bmFsaXplKCkgLT4gU3RhdGUKK3sKKyAgICBhZGRCeXRlcyhudWxscHRyLCAwLCBJc0VuZE9mU3Ry
ZWFtOjpZZXMpOworICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2UgU3RhdGU6Ok1vZHVs
ZUhlYWRlcjoKKyAgICBjYXNlIFN0YXRlOjpTZWN0aW9uU2l6ZToKKyAgICBjYXNlIFN0YXRlOjpT
ZWN0aW9uQm9keToKKyAgICBjYXNlIFN0YXRlOjpDb2RlU2VjdGlvblNpemU6CisgICAgY2FzZSBT
dGF0ZTo6RnVuY3Rpb25IZWFkZXI6CisgICAgY2FzZSBTdGF0ZTo6RnVuY3Rpb25Cb2R5OgorICAg
ICAgICBtX3N0YXRlID0gZmFpbE9uU3RhdGUobV9zdGF0ZSk7CisgICAgICAgIGJyZWFrOworCisg
ICAgY2FzZSBTdGF0ZTo6RmluaXNoZWQ6CisgICAgY2FzZSBTdGF0ZTo6RmF0YWxFcnJvcjoKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFN0YXRlOjpTZWN0aW9uSGVhZGVyOgorICAgICAgICBp
ZiAobV9yZW1haW5pbmcuc2l6ZSgpID09IDApIHsKKyAgICAgICAgICAgIGlmIChPcHRpb25zOjp1
c2VFYWdlcldlYkFzc2VtYmx5TW9kdWxlSGFzaGluZygpKQorICAgICAgICAgICAgICAgIG1faW5m
by0+bmFtZVNlY3Rpb24tPnNldEhhc2gobV9oYXNoZXIuY29tcHV0ZUhleERpZ2VzdCgpKTsKKyAg
ICAgICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6RmluaXNoZWQ7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgbV9zdGF0ZSA9IGZhaWxPblN0YXRlKFN0YXRlOjpTZWN0aW9uSGVhZGVyKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBtX3N0YXRlOworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmUwY2QxMDc3M2IyYzA3YzljNTJkNTk5NzI5NmQwNDYwYzE3NjhjMDQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU3RyZWFtaW5nUGFyc2VyLmgK
QEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggWXVzdWtlIFN1enVr
aSA8eXVzdWtlc3V6dWtpQHNsb3dzdGFydC5vcmc+LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKKworI2luY2x1ZGUgIldhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIgorI2luY2x1ZGUgIldhc21Q
YXJzZXIuaCIKKyNpbmNsdWRlICJXYXNtU2VjdGlvbnMuaCIKKyNpbmNsdWRlIDx3dGYvRXhwZWN0
ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvU0hBMS5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworY2xhc3MgU3RyZWFtaW5nUGFy
c2VyQ2xpZW50IHsKK307CisKK2NsYXNzIFN0cmVhbWluZ1BhcnNlciB7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZW51bSBjbGFzcyBTdGF0ZSA6IHVpbnQ4X3Qg
eworICAgICAgICBNb2R1bGVIZWFkZXIsCisgICAgICAgIFNlY3Rpb25IZWFkZXIsCisgICAgICAg
IFNlY3Rpb25TaXplLAorICAgICAgICBTZWN0aW9uQm9keSwKKyAgICAgICAgQ29kZVNlY3Rpb25T
aXplLAorICAgICAgICBGdW5jdGlvbkhlYWRlciwKKyAgICAgICAgRnVuY3Rpb25Cb2R5LAorICAg
ICAgICBGaW5pc2hlZCwKKyAgICAgICAgRmF0YWxFcnJvciwKKyAgICB9OworCisgICAgZW51bSBj
bGFzcyBJc0VuZE9mU3RyZWFtIHsgWWVzLCBObyB9OworCisgICAgU3RyZWFtaW5nUGFyc2VyKE1v
ZHVsZUluZm9ybWF0aW9uJik7CisKKyAgICBTdGF0ZSBhZGRCeXRlcyhjb25zdCB1aW50OF90KiBi
eXRlcywgc2l6ZV90IGxlbmd0aCkgeyByZXR1cm4gYWRkQnl0ZXMoYnl0ZXMsIGxlbmd0aCwgSXNF
bmRPZlN0cmVhbTo6Tm8pOyB9CisgICAgU3RhdGUgZmluYWxpemUoKTsKKworICAgIGNvbnN0IFN0
cmluZyYgZXJyb3JNZXNzYWdlKCkgY29uc3QgeyByZXR1cm4gbV9lcnJvck1lc3NhZ2U7IH0KKwor
cHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1vZHVsZUhlYWRlclNpemUg
PSA4OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgc2VjdGlvbkhlYWRlclNpemUgPSAx
OworCisgICAgU3RhdGUgYWRkQnl0ZXMoY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBsZW5n
dGgsIElzRW5kT2ZTdHJlYW0pOworCisgICAgU3RhdGUgcGFyc2VNb2R1bGVIZWFkZXIoVmVjdG9y
PHVpbnQ4X3Q+JiYpOworICAgIFN0YXRlIHBhcnNlU2VjdGlvbkhlYWRlcihWZWN0b3I8dWludDhf
dD4mJik7CisgICAgU3RhdGUgcGFyc2VTZWN0aW9uU2l6ZSh1aW50MzJfdCk7CisgICAgU3RhdGUg
cGFyc2VTZWN0aW9uQm9keShWZWN0b3I8dWludDhfdD4mJik7CisKKyAgICBTdGF0ZSBwYXJzZUNv
ZGVTZWN0aW9uU2l6ZSh1aW50MzJfdCk7CisgICAgU3RhdGUgcGFyc2VGdW5jdGlvbkhlYWRlcih1
aW50MzJfdCk7CisgICAgU3RhdGUgcGFyc2VGdW5jdGlvbkJvZHkoVmVjdG9yPHVpbnQ4X3Q+JiYp
OworCisgICAgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGNvbnN1bWUoY29uc3QgdWlu
dDhfdCogYnl0ZXMsIHNpemVfdCwgc2l6ZV90Jiwgc2l6ZV90KTsKKyAgICBFeHBlY3RlZDx1aW50
MzJfdCwgU3RhdGU+IGNvbnN1bWVWYXJVSW50MzIoY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVf
dCwgc2l6ZV90JiwgSXNFbmRPZlN0cmVhbSk7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgLi4u
QXJncz4gTkVWRVJfSU5MSU5FIFN0YXRlIFdBUk5fVU5VU0VEX1JFVFVSTiBmYWlsKEFyZ3MuLi4p
OworCisgICAgU3RhdGUgZmFpbE9uU3RhdGUoU3RhdGUpOworCisgICAgUmVmPE1vZHVsZUluZm9y
bWF0aW9uPiBtX2luZm87CisgICAgVmVjdG9yPHVpbnQ4X3Q+IG1fcmVtYWluaW5nOworICAgIFN0
cmluZyBtX2Vycm9yTWVzc2FnZTsKKworICAgIENoZWNrZWRTaXplIG1fdG90YWxTaXplIHsgMCB9
OworICAgIHNpemVfdCBtX29mZnNldCB7IDAgfTsKKyAgICBzaXplX3QgbV9uZXh0T2Zmc2V0IHsg
MCB9OworICAgIHNpemVfdCBtX2NvZGVPZmZzZXQgeyAwIH07CisKKyAgICBTSEExIG1faGFzaGVy
OworCisgICAgdWludDMyX3QgbV92ZXJzaW9uTnVtYmVyIHsgMCB9OworICAgIHVpbnQzMl90IG1f
c2VjdGlvbkxlbmd0aCB7IDAgfTsKKworICAgIHVpbnQzMl90IG1fZnVuY3Rpb25Db3VudCB7IDAg
fTsKKyAgICB1aW50MzJfdCBtX2Z1bmN0aW9uSW5kZXggeyAwIH07CisKKyAgICB1aW50MzJfdCBt
X2Z1bmN0aW9uU2l6ZSB7IDAgfTsKKworICAgIFN0YXRlIG1fc3RhdGUgeyBTdGF0ZTo6TW9kdWxl
SGVhZGVyIH07CisgICAgU2VjdGlvbiBtX3NlY3Rpb24geyBTZWN0aW9uOjpCZWdpbiB9OworICAg
IFNlY3Rpb24gbV9wcmV2aW91c0tub3duU2VjdGlvbiB7IFNlY3Rpb246OkJlZ2luIH07Cit9Owor
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNT
RU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5TW9kdWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlNb2R1bGUuY3BwCmluZGV4IDIzZmVmMjJlNThiZWUxZWZjYzAyOWJiNzY4ZTA1MjI2YTky
MDM2YmUuLmFlYmNlMGM0MTA4MzkxZDYxZjFhOTJjZGYyNTkwNmQ0ZTFiYTgyNGIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUu
Y3BwCkBAIC0xNDAsMTEgKzE0MCw2IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgICAgICB2aXNp
dG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2NvZGVCbG9ja3NbaV0pOwogfQogCi1jb25zdCBWZWN0
b3I8dWludDhfdD4mIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnNvdXJjZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1vZHVsZUluZm9ybWF0aW9uKCkuc291cmNlOwotfQotCiB9IC8vIG5hbWVzcGFjZSBK
U0MKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAppbmRleCAxN2JlZDYxMjVm
NGU3ZjMxOWE4YjdhZjJlMWRkZjg2NGFlYjJmYTVhLi5kMzkzMDA2OTE5ZDI3YWQxNzQ2OWZlMjY5
NWRiODQzODQyM2QwODJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCkBAIC02OCw4ICs2OCw2IEBAIGNsYXNzIEpTV2ViQXNz
ZW1ibHlNb2R1bGUgZmluYWwgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewogICAgIEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jayhXYXNtOjpNZW1vcnlNb2RlIG1vZGUpOwog
ICAgIHZvaWQgc2V0Q29kZUJsb2NrKFZNJiwgV2FzbTo6TWVtb3J5TW9kZSwgSlNXZWJBc3NlbWJs
eUNvZGVCbG9jayopOwogCi0gICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBzb3VyY2UoKSBjb25z
dDsKLQogICAgIEpTX0VYUE9SVF9QUklWQVRFIFdhc206Ok1vZHVsZSYgbW9kdWxlKCk7CiAKIHBy
aXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseVByb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseVByb3RvdHlwZS5jcHAKaW5kZXggOTZkNGMxNGQ3NGM3ZWUxYWY4YWVlNzYxMGM0OTRhYTdj
OTRiMDZjNS4uZGNhZGMwZDBkYmNlNWE5ZDI1NTNhNGRiZGM4Y2U0YjRmY2M1ZDQ1MCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlQcm90b3R5cGUu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5UHJvdG90
eXBlLmNwcApAQCAtMjk0LDEwICsyOTQsMTAgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgd2ViQXNzZW1ibHlWYWxpZGF0ZUZ1bmMoRXhlY1N0YXRlKiBleGVjKQogICAgIHNp
emVfdCBieXRlU2l6ZTsKICAgICBzdGQ6OnRpZShiYXNlLCBieXRlU2l6ZSkgPSBnZXRXYXNtQnVm
ZmVyRnJvbVZhbHVlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBCQlFQbGFuIHBsYW4oJnZtLndh
c21Db250ZXh0LCBiYXNlLCBieXRlU2l6ZSwgQkJRUGxhbjo6VmFsaWRhdGlvbiwgUGxhbjo6ZG9u
dEZpbmFsaXplKCkpOworICAgIEJCUVBsYW4gcGxhbigmdm0ud2FzbUNvbnRleHQsIEJCUVBsYW46
OlZhbGlkYXRpb24sIFBsYW46OmRvbnRGaW5hbGl6ZSgpKTsKICAgICAvLyBGSVhNRTogV2UgbWln
aHQgd2FudCB0byB0aHJvdyBhbiBPT00gZXhjZXB0aW9uIGhlcmUgaWYgd2UgZGV0ZWN0IHRoYXQg
c29tZXRoaW5nIHdpbGwgT09NLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjYwMTUKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihw
bGFuLnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKHBsYW4ucGFyc2VBbmRWYWxpZGF0ZU1vZHVsZShiYXNlLCBieXRlU2l6ZSkp
KTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseUNvbXBpbGVT
dHJlYW1pbmdJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMpCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0No
YW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDQ3MTAwZGI3MDcwNGYwZDQ2NjQ2OGY4
NGE2NzMxZjY0MjlhYmEzNGUuLjk0MjAzODE4YjQwNjRmMTM1ZmQ2NDVkMjk0OTZiMjRlNjdiZGFj
MjUgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsNDIgQEAKKzIwMTgtMDgtMjcgIFl1c3VrZSBTdXp1a2kgIDx5dXN1a2VzdXp1
a2lAc2xvd3N0YXJ0Lm9yZz4KKworICAgICAgICBbV2ViQXNzZW1ibHldIFBhcnNlIHdhc20gbW9k
dWxlcyBpbiBhIHN0cmVhbWluZyBmYXNoaW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xODg5NDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXYXNtIHBhcnNpbmcgZXJyb3Igc2hvdWxkIG5vdCByZXBvcnQg
dGhlIHRvdGFsIGJ5dGUgc2l6ZSBzaW5jZSBzdHJlYW1pbmcgcGFyc2luZyBkb2VzIG5vdAorICAg
ICAgICB3YW50IHRvIGxvYWQgYWxsIHRoZSBieXRlcy4KKyAgICAgICAgQWRkIGEgc2ltcGxlIHRl
c3Qgd2FzbS9zdHJlc3Mvc3RyZWFtaW5nLWJhc2ljLmpzIGZvciBpbml0aWFsIHN0cmVhbWluZyBw
YXJzaW5nIGltcGxlbWVudGF0aW9uLgorCisgICAgICAgICogd2FzbS9mdW5jdGlvbi10ZXN0cy9p
bnZhbGlkLWR1cGxpY2F0ZS1leHBvcnQuanM6CisgICAgICAgICogd2FzbS9mdW5jdGlvbi10ZXN0
cy9tZW1vcnktYWxpZ25tZW50LmpzOgorICAgICAgICAoY29uc3Qub3Aub2YuV0FTTS5vcGNvZGVz
KToKKyAgICAgICAgKiB3YXNtL2Z1bmN0aW9uLXRlc3RzL21lbW9yeS1zZWN0aW9uLWFuZC1pbXBv
cnQuanM6CisgICAgICAgICogd2FzbS9mdW5jdGlvbi10ZXN0cy92b2lkLWFyZ3VtZW50LXR5cGUt
c2hvdWxkLWJlLWEtdmFsaWRhdGlvbi1lcnJvci5qczoKKyAgICAgICAgKiB3YXNtL2pzLWFwaS9N
b2R1bGUtY29tcGlsZS5qczoKKyAgICAgICAgKGFzeW5jLnRlc3RQcm9taXNlQVBJKToKKyAgICAg
ICAgKiB3YXNtL2pzLWFwaS9lbGVtZW50LmpzOgorICAgICAgICAoYXNzZXJ0LnRocm93cy5uZXcu
V2ViQXNzZW1ibHkuTW9kdWxlLmJ1aWxkZXIuV2ViQXNzZW1ibHkpOgorICAgICAgICAoYXNzZXJ0
LnRocm93cyk6CisgICAgICAgICogd2FzbS9qcy1hcGkvZ2xvYmFsLWVycm9yLmpzOgorICAgICAg
ICAoYXNzZXJ0LnRocm93cy5uZXcuV2ViQXNzZW1ibHkuTW9kdWxlLmJpbik6CisgICAgICAgIChh
c3NlcnQudGhyb3dzKToKKyAgICAgICAgKiB3YXNtL2pzLWFwaS90YWJsZS5qczoKKyAgICAgICAg
KG5ldy5XZWJBc3NlbWJseS5Nb2R1bGUpOgorICAgICAgICAoYXNzZXJ0LnRocm93cyk6CisgICAg
ICAgIChhc3NlcnRCYWRUYWJsZUltcG9ydCk6CisgICAgICAgICogd2FzbS9qcy1hcGkvdGVzdF9E
YXRhLmpzOgorICAgICAgICAoRGF0YVNlY3Rpb25XaXRob3V0TWVtb3J5KToKKyAgICAgICAgKiB3
YXNtL2pzLWFwaS90ZXN0X1N0YXJ0LmpzOgorICAgICAgICAoSW52YWxpZFN0YXJ0RnVuY3Rpb25J
bmRleCk6CisgICAgICAgICogd2FzbS9qcy1hcGkvdGVzdF9iYXNpY19hcGkuanM6CisgICAgICAg
IChjb25zdC5jLmluLmNvbnN0cnVjdG9yUHJvcGVydGllcy5zd2l0Y2gpOgorICAgICAgICAqIHdh
c20vanMtYXBpL3ZlcnNpb24uanM6CisgICAgICAgICogd2FzbS9zdHJlc3MvbmFtZVNlY3Rpb24u
d2FzbTogQWRkZWQuCisgICAgICAgICogd2FzbS9zdHJlc3Mvc3RyZWFtaW5nLWJhc2ljLmpzOiBB
ZGRlZC4KKyAgICAgICAgKGNoZWNrKToKKwogMjAxOC0wOC0yNCAgWXVzdWtlIFN1enVraSAgPHl1
c3VrZXN1enVraUBzbG93c3RhcnQub3JnPgogCiAgICAgICAgIFtKU0NdIEFycmF5LnByb3RvdHlw
ZS5yZXZlcnNlIG1vZGlmaWVzIEpTSW1tdXRhYmxlQnV0dGVyZmx5CmRpZmYgLS1naXQgYS9KU1Rl
c3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvaW52YWxpZC1kdXBsaWNhdGUtZXhwb3J0LmpzIGIvSlNU
ZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL2ludmFsaWQtZHVwbGljYXRlLWV4cG9ydC5qcwppbmRl
eCBjNDdiMWUxNjYyYzJjYjYwYzkzZDZjOWI5NTczOWJkYWJhNzgwZTczLi40MThkNTFhYTQ5OTAx
OWFhMjQ2OWJhYTVmMWZkOGUxYWJkM2JmMjkxIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vZnVu
Y3Rpb24tdGVzdHMvaW52YWxpZC1kdXBsaWNhdGUtZXhwb3J0LmpzCisrKyBiL0pTVGVzdHMvd2Fz
bS9mdW5jdGlvbi10ZXN0cy9pbnZhbGlkLWR1cGxpY2F0ZS1leHBvcnQuanMKQEAgLTE1LDUgKzE1
LDUgQEAKICAgICAgICAgLkVuZCgpOwogCiAgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3Nl
bWJseSgpLmdldCgpOwotICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1v
ZHVsZShiaW4pLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUg
ZG9lc24ndCBwYXJzZSBhdCBieXRlIDMxIC8gMzk6IGR1cGxpY2F0ZSBleHBvcnQ6ICdmb28nIik7
CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbiksIFdl
YkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNl
IGF0IGJ5dGUgMzE6IGR1cGxpY2F0ZSBleHBvcnQ6ICdmb28nIik7CiB9CmRpZmYgLS1naXQgYS9K
U1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LWFsaWdubWVudC5qcyBiL0pTVGVzdHMv
d2FzbS9mdW5jdGlvbi10ZXN0cy9tZW1vcnktYWxpZ25tZW50LmpzCmluZGV4IGFiYzU3NDEyMTQ2
ZjJlMzk3MjYxZTczMjZlY2M4YTVjODE5YTA0OWMuLmU2MDU4OTg5MDBhYTFiZWQ2N2I5ZDMyYWM2
ZjJhYTAxMmViMjk5ZWUgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9t
ZW1vcnktYWxpZ25tZW50LmpzCisrKyBiL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9tZW1v
cnktYWxpZ25tZW50LmpzCkBAIC00Miw3ICs0Miw3IEBACiAgICAgICAgIGlmIChhbGlnbkxvZzIg
PD0gbWF4QWxpZ25Mb2cyKQogICAgICAgICAgICAgaW5zdGFuY2UoKTsKICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgYXNzZXJ0LnRocm93cyhpbnN0YW5jZSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVy
cm9yLCBgV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAke3N0YXJ0fSAv
ICR7ZW5kfTogYnl0ZSBhbGlnbm1lbnQgJHsxIDw8IGFsaWduTG9nMn0gZXhjZWVkcyAke2luZm8u
dHlwZX0ncyBuYXR1cmFsIGFsaWdubWVudCAkezEgPDwgbWF4QWxpZ25Mb2cyfSwgaW4gZnVuY3Rp
b24gYXQgaW5kZXggMGApOworICAgICAgICAgICAgYXNzZXJ0LnRocm93cyhpbnN0YW5jZSwgV2Vi
QXNzZW1ibHkuQ29tcGlsZUVycm9yLCBgV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2Ug
YXQgYnl0ZSAke3N0YXJ0fTogYnl0ZSBhbGlnbm1lbnQgJHsxIDw8IGFsaWduTG9nMn0gZXhjZWVk
cyAke2luZm8udHlwZX0ncyBuYXR1cmFsIGFsaWdubWVudCAkezEgPDwgbWF4QWxpZ25Mb2cyfSwg
aW4gZnVuY3Rpb24gYXQgaW5kZXggMGApOwogCiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvSlNUZXN0
cy93YXNtL2Z1bmN0aW9uLXRlc3RzL21lbW9yeS1zZWN0aW9uLWFuZC1pbXBvcnQuanMgYi9KU1Rl
c3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LXNlY3Rpb24tYW5kLWltcG9ydC5qcwppbmRl
eCBhMWRiOWNlMjU3NzkzNTBiNWJkNTU3N2Y3NjdlNjY3Nzc0YmQ4YjBiLi4xNTIwN2VmNzE4OGVm
YTBmNjkyMzU3M2MxZGZlYTVhM2VhNWI3MWZmIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vZnVu
Y3Rpb24tdGVzdHMvbWVtb3J5LXNlY3Rpb24tYW5kLWltcG9ydC5qcworKysgYi9KU1Rlc3RzL3dh
c20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LXNlY3Rpb24tYW5kLWltcG9ydC5qcwpAQCAtMjgsNCAr
MjgsNCBAQAogICAgICAgLkNvZGUoKS5FbmQoKTsKIAogY29uc3QgaTAgPSBpbnN0YW50aWF0ZShi
dWlsZGVyMCk7Ci1hc3NlcnQudGhyb3dzKCgpID0+IGluc3RhbnRpYXRlKGJ1aWxkZXIxLCB7IGlt
cDogeyBtZW1vcnk6IGkwLmV4cG9ydHMubWVtb3J5IH0gfSksIFdlYkFzc2VtYmx5LkNvbXBpbGVF
cnJvciwgYFdlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzUgLyA0MTog
dGhlcmUgY2FuIGF0IG1vc3QgYmUgb25lIE1lbW9yeSBzZWN0aW9uIGZvciBub3dgKTsKK2Fzc2Vy
dC50aHJvd3MoKCkgPT4gaW5zdGFudGlhdGUoYnVpbGRlcjEsIHsgaW1wOiB7IG1lbW9yeTogaTAu
ZXhwb3J0cy5tZW1vcnkgfSB9KSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCBgV2ViQXNzZW1i
bHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzNTogdGhlcmUgY2FuIGF0IG1vc3QgYmUg
b25lIE1lbW9yeSBzZWN0aW9uIGZvciBub3dgKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9m
dW5jdGlvbi10ZXN0cy92b2lkLWFyZ3VtZW50LXR5cGUtc2hvdWxkLWJlLWEtdmFsaWRhdGlvbi1l
cnJvci5qcyBiL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy92b2lkLWFyZ3VtZW50LXR5cGUt
c2hvdWxkLWJlLWEtdmFsaWRhdGlvbi1lcnJvci5qcwppbmRleCA0NzE0OWIxZDdmYjkzMjMxYzI1
ZDA3OGE4NjI5OGI3NTAyYmZmNjhhLi4yMTc4ODEwYTc4MTdkOTczMzVlNjJmNzhiM2ZjNTE3ZTNm
ZTc3ZTQxIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvdm9pZC1hcmd1
bWVudC10eXBlLXNob3VsZC1iZS1hLXZhbGlkYXRpb24tZXJyb3IuanMKKysrIGIvSlNUZXN0cy93
YXNtL2Z1bmN0aW9uLXRlc3RzL3ZvaWQtYXJndW1lbnQtdHlwZS1zaG91bGQtYmUtYS12YWxpZGF0
aW9uLWVycm9yLmpzCkBAIC0xNyw2ICsxNyw2IEBAIGZ1bmN0aW9uIGdldEJpbmFyeShwYXJhbXMp
IHsKICAgICByZXR1cm4gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOwogfQogCi1hc3NlcnQu
dGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoZ2V0QmluYXJ5KFsiaTMyIiwgInZv
aWQiXSkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9l
c24ndCBwYXJzZSBhdCBieXRlIDE1IC8gNDc6IGNhbid0IGdldCAxdGggYXJndW1lbnQgVHlwZSIp
OwotYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGdldEJpbmFyeShb
InZvaWQiXSkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUg
ZG9lc24ndCBwYXJzZSBhdCBieXRlIDE0IC8gNDY6IGNhbid0IGdldCAwdGggYXJndW1lbnQgVHlw
ZSIpOwotYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGdldEJpbmFy
eShbImkzMiIsICJ2b2lkIiwgImkzMiJdKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldl
YkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTUgLyA0ODogY2FuJ3QgZ2V0
IDF0aCBhcmd1bWVudCBUeXBlIik7Cithc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJs
eS5Nb2R1bGUoZ2V0QmluYXJ5KFsiaTMyIiwgInZvaWQiXSkpLCBXZWJBc3NlbWJseS5Db21waWxl
RXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE1OiBjYW4n
dCBnZXQgMXRoIGFyZ3VtZW50IFR5cGUiKTsKK2Fzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFz
c2VtYmx5Lk1vZHVsZShnZXRCaW5hcnkoWyJ2b2lkIl0pKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVy
cm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxNDogY2FuJ3Qg
Z2V0IDB0aCBhcmd1bWVudCBUeXBlIik7Cithc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3Nl
bWJseS5Nb2R1bGUoZ2V0QmluYXJ5KFsiaTMyIiwgInZvaWQiLCAiaTMyIl0pKSwgV2ViQXNzZW1i
bHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0
ZSAxNTogY2FuJ3QgZ2V0IDF0aCBhcmd1bWVudCBUeXBlIik7CmRpZmYgLS1naXQgYS9KU1Rlc3Rz
L3dhc20vanMtYXBpL01vZHVsZS1jb21waWxlLmpzIGIvSlNUZXN0cy93YXNtL2pzLWFwaS9Nb2R1
bGUtY29tcGlsZS5qcwppbmRleCBkM2JlYjMzMjU3N2FlZGIwNThjOGU0MWQyM2FkZGE5YzkxZjFk
Zjc4Li5kNzIzYmY0ZDcwYjQ5YzQ5YTEzNjVmZGM2N2I0NTI0MmIzODI3MmU2IDEwMDY0NAotLS0g
YS9KU1Rlc3RzL3dhc20vanMtYXBpL01vZHVsZS1jb21waWxlLmpzCisrKyBiL0pTVGVzdHMvd2Fz
bS9qcy1hcGkvTW9kdWxlLWNvbXBpbGUuanMKQEAgLTIxLDcgKzIxLDcgQEAgYXN5bmMgZnVuY3Rp
b24gdGVzdFByb21pc2VBUEkoKSB7CiAgICAgICAgICAgICBhd2FpdCBXZWJBc3NlbWJseS5jb21w
aWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSk7CiAgICAgICAgIH0gY2F0Y2goZSkgewog
ICAgICAgICAgICAgYXNzZXJ0LnRydXRoeShlIGluc3RhbmNlb2YgV2ViQXNzZW1ibHkuQ29tcGls
ZUVycm9yKTsKLSAgICAgICAgICAgIGFzc2VydC50cnV0aHkoZS5tZXNzYWdlID09PSAiV2ViQXNz
ZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzNCAvIDQzOiB0aGVyZSBjYW4gYXQg
bW9zdCBiZSBvbmUgTWVtb3J5IHNlY3Rpb24gZm9yIG5vdyIpOworICAgICAgICAgICAgYXNzZXJ0
LnRydXRoeShlLm1lc3NhZ2UgPT09ICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBh
dCBieXRlIDM0OiB0aGVyZSBjYW4gYXQgbW9zdCBiZSBvbmUgTWVtb3J5IHNlY3Rpb24gZm9yIG5v
dyIpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vanMtYXBp
L2VsZW1lbnQuanMgYi9KU1Rlc3RzL3dhc20vanMtYXBpL2VsZW1lbnQuanMKaW5kZXggMTg4YWM3
NDE1MTEyNjA0OGI4MjcyNDhkYzQ3MzgyMDVhYTg2YTE0OS4uZmNiZTI4MjdmMzcxNjYzYWE4NGZk
ZjVjMTAxMDBiODE3ODE3NzM5MCAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2pzLWFwaS9lbGVt
ZW50LmpzCisrKyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvZWxlbWVudC5qcwpAQCAtMTgsNyArMTgs
NyBAQAogICAgICAgICAgICAgLkVuZCgpCiAgICAgICAgIC5FbmQoKTsKIAotICAgIGFzc2VydC50
aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCku
Z2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9l
c24ndCBwYXJzZSBhdCBieXRlIDI0IC8gNDE6IEVsZW1lbnQgc2VjdGlvbiBmb3IgVGFibGUgMCBl
eGNlZWRzIGF2YWlsYWJsZSBUYWJsZSAwIik7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcg
V2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIFdlYkFzc2Vt
Ymx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5
dGUgMjQ6IEVsZW1lbnQgc2VjdGlvbiBmb3IgVGFibGUgMCBleGNlZWRzIGF2YWlsYWJsZSBUYWJs
ZSAwIik7CiB9CiAKIHsKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgICAgIC5FbmQoKQogICAg
ICAgICAuRW5kKCk7CiAKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5N
b2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVy
cm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzMCAvIDQ3OiBF
bGVtZW50IHNlY3Rpb24gZm9yIFRhYmxlIDEgZXhjZWVkcyBhdmFpbGFibGUgVGFibGUgMSIpOwor
ICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldl
YkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJs
eS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDMwOiBFbGVtZW50IHNlY3Rpb24gZm9yIFRh
YmxlIDEgZXhjZWVkcyBhdmFpbGFibGUgVGFibGUgMSIpOwogfQogCiB7CkBAIC0xMTIsNyArMTEy
LDcgQEAKICAgICAgICAgICAgIC5FbmQoKQogICAgICAgICAuRW5kKCk7CiAKLSAgICBhc3NlcnQu
dGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgp
LmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRv
ZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzOCAvIDUwOiBFbGVtZW50IHNlY3Rpb24ncyAwdGggZWxlbWVu
dCdzIDJ0aCBpbmRleCBpcyAxIHdoaWNoIGV4Y2VlZHMgdGhlIGZ1bmN0aW9uIGluZGV4IHNwYWNl
IHNpemUgb2YgMSAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldl
YkFzc2VtYmx5KCkuZ2V0KCkpJykiKTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJB
c3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwgV2ViQXNzZW1ibHku
Q29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAz
ODogRWxlbWVudCBzZWN0aW9uJ3MgMHRoIGVsZW1lbnQncyAydGggaW5kZXggaXMgMSB3aGljaCBl
eGNlZWRzIHRoZSBmdW5jdGlvbiBpbmRleCBzcGFjZSBzaXplIG9mIDEgKGV2YWx1YXRpbmcgJ25l
dyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIik7CiB9
CiAKIHsKQEAgLTIxNSw1ICsyMTUsNSBAQCBmdW5jdGlvbiBiYWRNb2R1bGUoKSB7CiAgICAgICAg
IHJldHVybiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CiAgICAgfQogCi0gICAgYXNzZXJ0
LnRocm93cygoKSA9PiBiYWRNb2R1bGUoKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2Vi
QXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSA1OCAvIDcyOiBFbGVtZW50IGlu
aXRfZXhwciBtdXN0IHByb2R1Y2UgYW4gaTMyIik7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBi
YWRNb2R1bGUoKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxl
IGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSA1ODogRWxlbWVudCBpbml0X2V4cHIgbXVzdCBwcm9kdWNl
IGFuIGkzMiIpOwogfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS9nbG9iYWwtZXJy
b3IuanMgYi9KU1Rlc3RzL3dhc20vanMtYXBpL2dsb2JhbC1lcnJvci5qcwppbmRleCAwOWY4ZDc5
OWRjNGUyZjM5ZDlhNTQzMDJjYWFiZGU3YTc2ZDUxMDdiLi5kM2VkZjg5OGU3ZDlmYTA3ZTQ3MGNm
YzMyYzZhYjM2ZjE3MzFiNTEzIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vanMtYXBpL2dsb2Jh
bC1lcnJvci5qcworKysgYi9KU1Rlc3RzL3dhc20vanMtYXBpL2dsb2JhbC1lcnJvci5qcwpAQCAt
MjMsNyArMjMsNyBAQAogICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKTsKICAg
ICBiaW4udHJpbSgpOwogCi0gICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHku
TW9kdWxlKGJpbi5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5
Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjYgLyA1OTogZ2V0X2dsb2JhbCdzIGluZGV4
IDAgZXhjZWVkcyB0aGUgbnVtYmVyIG9mIGdsb2JhbHMgMCAoZXZhbHVhdGluZyAnbmV3IFdlYkFz
c2VtYmx5Lk1vZHVsZShiaW4uZ2V0KCkpJykiKTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5l
dyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9y
LCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNjogZ2V0X2dsb2Jh
bCdzIGluZGV4IDAgZXhjZWVkcyB0aGUgbnVtYmVyIG9mIGdsb2JhbHMgMCAoZXZhbHVhdGluZyAn
bmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4uZ2V0KCkpJykiKTsKIH0KIAogCkBAIC01Miw3ICs1
Miw3IEBACiAgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpOwogICAgIGJpbi50
cmltKCk7CiAKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUo
YmluLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxl
IGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzMiAvIDc2OiBNdXRhYmxlIEdsb2JhbHMgYXJlbid0IHN1
cHBvcnRlZCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4uZ2V0KCkpJyki
KTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdl
dCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNu
J3QgcGFyc2UgYXQgYnl0ZSAzMjogTXV0YWJsZSBHbG9iYWxzIGFyZW4ndCBzdXBwb3J0ZWQgKGV2
YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKScpIik7CiB9CiAKIHsK
QEAgLTc3LDcgKzc3LDcgQEAKICAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCk7
CiAgICAgYmluLnRyaW0oKTsKIAotICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2Vt
Ymx5Lk1vZHVsZShiaW4uZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3Nl
bWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDUxIC8gNTk6IDF0aCBFeHBvcnQgaXNu
J3QgaW1tdXRhYmxlLCBuYW1lZCAnZ2xvYmFsJyAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5
Lk1vZHVsZShiaW4uZ2V0KCkpJykiKTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJB
c3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2Vi
QXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSA1MTogMXRoIEV4cG9ydCBpc24n
dCBpbW11dGFibGUsIG5hbWVkICdnbG9iYWwnIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHku
TW9kdWxlKGJpbi5nZXQoKSknKSIpOwogfQogCiB7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20v
anMtYXBpL3RhYmxlLmpzIGIvSlNUZXN0cy93YXNtL2pzLWFwaS90YWJsZS5qcwppbmRleCBiODMy
ZTExNzY2NDEzMDIzMGZjODBiZmIxMzBjMTM2NmEzMTJlMzI1Li5jZjY4YjQ0MDQ5NWY2YmU2Zjhi
Mjc5NDc3MTI0NTZkN2NhN2M4YzZmIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vanMtYXBpL3Rh
YmxlLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGFibGUuanMKQEAgLTEzLDcgKzEzLDcg
QEAKICAgICAgICAgLkVuZCgpCiAgICAgICAgIC5Db2RlKCkKICAgICAgICAgLkVuZCgpOwotICAg
IGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFz
c2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5N
b2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDM0IC8gNDE6IENhbm5vdCBoYXZlIG1vcmUgdGhh
biBvbmUgVGFibGUgZm9yIG5vdyIpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFz
c2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5D
b21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDM0
OiBDYW5ub3QgaGF2ZSBtb3JlIHRoYW4gb25lIFRhYmxlIGZvciBub3ciKTsKIH0KIAogewpAQCAt
MzgsNyArMzgsNyBAQAogICAgICAgICAuRW5kKCkKICAgICAgICAgLkNvZGUoKQogICAgICAgICAu
RW5kKCk7Ci0gICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1
aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldl
YkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTcgLyAyODogVGFibGUgY291
bnQgb2YgMiBpcyBpbnZhbGlkLCBhdCBtb3N0IDEgaXMgYWxsb3dlZCBmb3Igbm93IChldmFsdWF0
aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSkn
KSIpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWls
ZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJB
c3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE3OiBUYWJsZSBjb3VudCBvZiAy
IGlzIGludmFsaWQsIGF0IG1vc3QgMSBpcyBhbGxvd2VkIGZvciBub3cgKGV2YWx1YXRpbmcgJ25l
dyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIik7CiB9
CiAKIHsKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICAgICAgICAgICAuQ2FsbEluZGlyZWN0KDAs
IDApCiAgICAgICAgICAgICAuRW5kKCkKICAgICAgICAgLkVuZCgpOwotICAgIGFzc2VydC50aHJv
d3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0
KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24n
dCBwYXJzZSBhdCBieXRlIDQgLyA3OiBjYWxsX2luZGlyZWN0IGlzIG9ubHkgdmFsaWQgd2hlbiBh
IHRhYmxlIGlzIGRlZmluZWQgb3IgaW1wb3J0ZWQsIGluIGZ1bmN0aW9uIGF0IGluZGV4IDAgKGV2
YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdl
dCgpKScpIik7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxl
KGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwg
IldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgNDogY2FsbF9pbmRpcmVj
dCBpcyBvbmx5IHZhbGlkIHdoZW4gYSB0YWJsZSBpcyBkZWZpbmVkIG9yIGltcG9ydGVkLCBpbiBm
dW5jdGlvbiBhdCBpbmRleCAwIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1
aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIpOwogfQogCiB7CkBAIC03Myw3ICs3Myw3IEBA
CiAgICAgICAgICAgICAgICAgLkNhbGxJbmRpcmVjdCgwLCAxKQogICAgICAgICAgICAgLkVuZCgp
CiAgICAgICAgIC5FbmQoKTsKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJs
eS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGls
ZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSA2IC8gNzog
Y2FsbF9pbmRpcmVjdCdzICdyZXNlcnZlZCcgdmFydWludDEgbXVzdCBiZSAweDAsIGluIGZ1bmN0
aW9uIGF0IGluZGV4IDAgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRl
ci5XZWJBc3NlbWJseSgpLmdldCgpKScpIik7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcg
V2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIFdlYkFzc2Vt
Ymx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5
dGUgNjogY2FsbF9pbmRpcmVjdCdzICdyZXNlcnZlZCcgdmFydWludDEgbXVzdCBiZSAweDAsIGlu
IGZ1bmN0aW9uIGF0IGluZGV4IDAgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUo
YnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIik7CiB9CiAKIHsKQEAgLTg2LDcgKzg2LDcg
QEAKICAgICAgICAgLkVuZCgpCiAgICAgICAgIC5Db2RlKCkKICAgICAgICAgLkVuZCgpOwotICAg
IGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFz
c2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5N
b2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDIzIC8gMjY6IGNhbid0IGV4cG9ydCBUYWJsZSAw
IHRoZXJlIGFyZSAwIFRhYmxlcyIpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFz
c2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5D
b21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDIz
OiBjYW4ndCBleHBvcnQgVGFibGUgMCB0aGVyZSBhcmUgMCBUYWJsZXMiKTsKIH0KIAogewpAQCAt
MTAyLDcgKzEwMiw3IEBACiAgICAgICAgIC5FbmQoKQogICAgICAgICAuQ29kZSgpCiAgICAgICAg
IC5FbmQoKTsKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUo
YnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAi
V2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzMCAvIDMzOiBjYW4ndCBl
eHBvcnQgVGFibGUgMSB0aGVyZSBhcmUgMSBUYWJsZXMiKTsKKyAgICBhc3NlcnQudGhyb3dzKCgp
ID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwg
V2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFy
c2UgYXQgYnl0ZSAzMDogY2FuJ3QgZXhwb3J0IFRhYmxlIDEgdGhlcmUgYXJlIDEgVGFibGVzIik7
CiB9CiAKIGZ1bmN0aW9uIGFzc2VydEJhZFRhYmxlKHRhYmxlRGVzY3JpcHRpb24sIG1lc3NhZ2Up
IHsKQEAgLTEzMiw0MiArMTMyLDQyIEBAIGZ1bmN0aW9uIGFzc2VydEJhZFRhYmxlSW1wb3J0KHRh
YmxlRGVzY3JpcHRpb24sIG1lc3NhZ2UpIHsKIHsKICAgICBsZXQgYmFkRGVzY3JpcHRpb25zID0g
WwogICAgICAgICBbe2luaXRpYWw6IDEwLCBlbGVtZW50OiAiaTMyIn0sCi0gICAgICAgICAiV2Vi
QXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxOCAvIDIzOiBUYWJsZSB0eXBl
IHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTEgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5N
b2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKLSAgICAgICAgICJXZWJBc3Nl
bWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2IC8gMzQ6IFRhYmxlIHR5cGUgc2hv
dWxkIGJlIGFueWZ1bmMsIGdvdCAtMSAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVs
ZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKKyAgICAgICAgICJXZWJBc3NlbWJs
eS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE4OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBh
bnlmdW5jLCBnb3QgLTEgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRl
ci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUg
ZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBn
b3QgLTEgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3Nl
bWJseSgpLmdldCgpKScpIl0sCiAgICAgICAgIFt7aW5pdGlhbDogMTAsIGVsZW1lbnQ6ICJmMzIi
fSwKLSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE4
IC8gMjM6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtMyAoZXZhbHVhdGluZyAn
bmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAot
ICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjYgLyAz
NDogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC0zIChldmFsdWF0aW5nICduZXcg
V2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAorICAg
ICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTg6IFRhYmxl
IHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtMyAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2Vt
Ymx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAorICAgICAgICAgIldl
YkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjY6IFRhYmxlIHR5cGUgc2hv
dWxkIGJlIGFueWZ1bmMsIGdvdCAtMyAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVs
ZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKICAgICAgICAgW3tpbml0aWFsOiAx
MCwgZWxlbWVudDogImY2NCJ9LAotICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0
IHBhcnNlIGF0IGJ5dGUgMTggLyAyMzogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290
IC00IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1i
bHkoKS5nZXQoKSknKSIsCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFy
c2UgYXQgYnl0ZSAyNiAvIDM0OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTQg
KGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgp
LmdldCgpKScpIl0sCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2Ug
YXQgYnl0ZSAxODogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC00IChldmFsdWF0
aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSkn
KSIsCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAy
NjogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC00IChldmFsdWF0aW5nICduZXcg
V2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAogICAg
ICAgICBbe2luaXRpYWw6IDEwLCBlbGVtZW50OiAiaTY0In0sCi0gICAgICAgICAiV2ViQXNzZW1i
bHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxOCAvIDIzOiBUYWJsZSB0eXBlIHNob3Vs
ZCBiZSBhbnlmdW5jLCBnb3QgLTIgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUo
YnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKLSAgICAgICAgICJXZWJBc3NlbWJseS5N
b2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2IC8gMzQ6IFRhYmxlIHR5cGUgc2hvdWxkIGJl
IGFueWZ1bmMsIGdvdCAtMiAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWls
ZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1
bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE4OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5j
LCBnb3QgLTIgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJB
c3NlbWJseSgpLmdldCgpKScpIiwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24n
dCBwYXJzZSBhdCBieXRlIDI2OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTIg
KGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgp
LmdldCgpKScpIl0sCiAgICAgICAgIFt7aW5pdGlhbDogMTAsIG1heGltdW06IDIwLCBlbGVtZW50
OiAiaTMyIn0sCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQg
Ynl0ZSAxOCAvIDI0OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTEgKGV2YWx1
YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgp
KScpIiwKLSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRl
IDI2IC8gMzU6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtMSAoZXZhbHVhdGlu
ZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJyki
XSwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE4
OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTEgKGV2YWx1YXRpbmcgJ25ldyBX
ZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKKyAgICAg
ICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2OiBUYWJsZSB0
eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTEgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJs
eS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCiAgICAgICAgIFt7aW5p
dGlhbDogMTAsIG1heGltdW06IDIwLCBlbGVtZW50OiAiZjMyIn0sCi0gICAgICAgICAiV2ViQXNz
ZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxOCAvIDI0OiBUYWJsZSB0eXBlIHNo
b3VsZCBiZSBhbnlmdW5jLCBnb3QgLTMgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1
bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKLSAgICAgICAgICJXZWJBc3NlbWJs
eS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2IC8gMzU6IFRhYmxlIHR5cGUgc2hvdWxk
IGJlIGFueWZ1bmMsIGdvdCAtMyAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShi
dWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKKyAgICAgICAgICJXZWJBc3NlbWJseS5N
b2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE4OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlm
dW5jLCBnb3QgLTMgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5X
ZWJBc3NlbWJseSgpLmdldCgpKScpIiwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9l
c24ndCBwYXJzZSBhdCBieXRlIDI2OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3Qg
LTMgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJs
eSgpLmdldCgpKScpIl0sCiAgICAgICAgIFt7aW5pdGlhbDogMTAsIG1heGltdW06IDIwLCBlbGVt
ZW50OiAiZjY0In0sCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2Ug
YXQgYnl0ZSAxOCAvIDI0OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTQgKGV2
YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdl
dCgpKScpIiwKLSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBi
eXRlIDI2IC8gMzU6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtNCAoZXZhbHVh
dGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkp
JykiXSwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRl
IDE4OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTQgKGV2YWx1YXRpbmcgJ25l
dyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKKyAg
ICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2OiBUYWJs
ZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTQgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3Nl
bWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCiAgICAgICAgIFt7
aW5pdGlhbDogMTAsIG1heGltdW06IDIwLCBlbGVtZW50OiAiaTY0In0sCi0gICAgICAgICAiV2Vi
QXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxOCAvIDI0OiBUYWJsZSB0eXBl
IHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTIgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5N
b2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKLSAgICAgICAgICJXZWJBc3Nl
bWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2IC8gMzU6IFRhYmxlIHR5cGUgc2hv
dWxkIGJlIGFueWZ1bmMsIGdvdCAtMiAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVs
ZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKKyAgICAgICAgICJXZWJBc3NlbWJs
eS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE4OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBh
bnlmdW5jLCBnb3QgLTIgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRl
ci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUg
ZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBn
b3QgLTIgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3Nl
bWJseSgpLmdldCgpKScpIl0sCiAKICAgICAgICAgW3tpbml0aWFsOiAxMCwgbWF4aW11bTogOSwg
ZWxlbWVudDogImFueWZ1bmMifSwKLSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24n
dCBwYXJzZSBhdCBieXRlIDIxIC8gMjQ6IHJlc2l6YWJsZSBsaW1pdHMgaGFzIGEgaW5pdGlhbCBw
YWdlIGNvdW50IG9mIDEwIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiBpdHMgbWF4aW11bSA5IChldmFs
dWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQo
KSknKSIsCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0
ZSAyOSAvIDM1OiByZXNpemFibGUgbGltaXRzIGhhcyBhIGluaXRpYWwgcGFnZSBjb3VudCBvZiAx
MCB3aGljaCBpcyBncmVhdGVyIHRoYW4gaXRzIG1heGltdW0gOSAoZXZhbHVhdGluZyAnbmV3IFdl
YkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKKyAgICAg
ICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDIxOiByZXNpemFi
bGUgbGltaXRzIGhhcyBhIGluaXRpYWwgcGFnZSBjb3VudCBvZiAxMCB3aGljaCBpcyBncmVhdGVy
IHRoYW4gaXRzIG1heGltdW0gOSAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShi
dWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAorICAgICAgICAgIldlYkFzc2VtYmx5Lk1v
ZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjk6IHJlc2l6YWJsZSBsaW1pdHMgaGFzIGEgaW5p
dGlhbCBwYWdlIGNvdW50IG9mIDEwIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiBpdHMgbWF4aW11bSA5
IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHko
KS5nZXQoKSknKSJdLAogICAgICAgICBbe2luaXRpYWw6IDEsIG1heGltdW06IDAsIGVsZW1lbnQ6
ICJhbnlmdW5jIn0sCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2Ug
YXQgYnl0ZSAyMSAvIDI0OiByZXNpemFibGUgbGltaXRzIGhhcyBhIGluaXRpYWwgcGFnZSBjb3Vu
dCBvZiAxIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiBpdHMgbWF4aW11bSAwIChldmFsdWF0aW5nICdu
ZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCi0g
ICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyOSAvIDM1
OiByZXNpemFibGUgbGltaXRzIGhhcyBhIGluaXRpYWwgcGFnZSBjb3VudCBvZiAxIHdoaWNoIGlz
IGdyZWF0ZXIgdGhhbiBpdHMgbWF4aW11bSAwIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHku
TW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAorICAgICAgICAgIldlYkFz
c2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjE6IHJlc2l6YWJsZSBsaW1pdHMg
aGFzIGEgaW5pdGlhbCBwYWdlIGNvdW50IG9mIDEgd2hpY2ggaXMgZ3JlYXRlciB0aGFuIGl0cyBt
YXhpbXVtIDAgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJB
c3NlbWJseSgpLmdldCgpKScpIiwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24n
dCBwYXJzZSBhdCBieXRlIDI5OiByZXNpemFibGUgbGltaXRzIGhhcyBhIGluaXRpYWwgcGFnZSBj
b3VudCBvZiAxIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiBpdHMgbWF4aW11bSAwIChldmFsdWF0aW5n
ICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJd
LAogICAgICAgICBbe2luaXRpYWw6IDIqKjMyIC0gMSwgbWF4aW11bTogMioqMzIgLSAyLCBlbGVt
ZW50OiAiYW55ZnVuYyJ9LAotICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBh
cnNlIGF0IGJ5dGUgMjkgLyAzMjogcmVzaXphYmxlIGxpbWl0cyBoYXMgYSBpbml0aWFsIHBhZ2Ug
Y291bnQgb2YgNDI5NDk2NzI5NSB3aGljaCBpcyBncmVhdGVyIHRoYW4gaXRzIG1heGltdW0gNDI5
NDk2NzI5NCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFz
c2VtYmx5KCkuZ2V0KCkpJykiLAotICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0
IHBhcnNlIGF0IGJ5dGUgMzcgLyA0MzogcmVzaXphYmxlIGxpbWl0cyBoYXMgYSBpbml0aWFsIHBh
Z2UgY291bnQgb2YgNDI5NDk2NzI5NSB3aGljaCBpcyBncmVhdGVyIHRoYW4gaXRzIG1heGltdW0g
NDI5NDk2NzI5NCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldl
YkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9l
c24ndCBwYXJzZSBhdCBieXRlIDI5OiByZXNpemFibGUgbGltaXRzIGhhcyBhIGluaXRpYWwgcGFn
ZSBjb3VudCBvZiA0Mjk0OTY3Mjk1IHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiBpdHMgbWF4aW11bSA0
Mjk0OTY3Mjk0IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2Vi
QXNzZW1ibHkoKS5nZXQoKSknKSIsCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNu
J3QgcGFyc2UgYXQgYnl0ZSAzNzogcmVzaXphYmxlIGxpbWl0cyBoYXMgYSBpbml0aWFsIHBhZ2Ug
Y291bnQgb2YgNDI5NDk2NzI5NSB3aGljaCBpcyBncmVhdGVyIHRoYW4gaXRzIG1heGltdW0gNDI5
NDk2NzI5NCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFz
c2VtYmx5KCkuZ2V0KCkpJykiXSwKICAgICAgICAgW3tpbml0aWFsOiAyKiozMSwgZWxlbWVudDog
ImFueWZ1bmMifSwKLSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBh
dCBieXRlIDI0IC8gMjc6IFRhYmxlJ3MgaW5pdGlhbCBwYWdlIGNvdW50IG9mIDIxNDc0ODM2NDgg
aXMgdG9vIGJpZywgbWF4aW11bSAxMDAwMDAwMCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5
Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAotICAgICAgICAgIldlYkFz
c2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzIgLyAzODogVGFibGUncyBpbml0
aWFsIHBhZ2UgY291bnQgb2YgMjE0NzQ4MzY0OCBpcyB0b28gYmlnLCBtYXhpbXVtIDEwMDAwMDAw
IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHko
KS5nZXQoKSknKSJdLAorICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNl
IGF0IGJ5dGUgMjQ6IFRhYmxlJ3MgaW5pdGlhbCBwYWdlIGNvdW50IG9mIDIxNDc0ODM2NDggaXMg
dG9vIGJpZywgbWF4aW11bSAxMDAwMDAwMCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1v
ZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAorICAgICAgICAgIldlYkFzc2Vt
Ymx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzI6IFRhYmxlJ3MgaW5pdGlhbCBwYWdl
IGNvdW50IG9mIDIxNDc0ODM2NDggaXMgdG9vIGJpZywgbWF4aW11bSAxMDAwMDAwMCAoZXZhbHVh
dGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkp
JykiXSwKICAgICBdOwogCiAgICAgZm9yIChjb25zdCBkIG9mIGJhZERlc2NyaXB0aW9ucykgewpA
QCAtMTg2LDcgKzE4Niw3IEBAIGZ1bmN0aW9uIGFzc2VydEJhZFRhYmxlSW1wb3J0KHRhYmxlRGVz
Y3JpcHRpb24sIG1lc3NhZ2UpIHsKICAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKICAgICAgICAg
LkNvZGUoKQogICAgICAgICAuRW5kKCk7Ci0gICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2Vi
QXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5
LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUg
MzkgLyA0ODogQ2Fubm90IGhhdmUgbW9yZSB0aGFuIG9uZSBUYWJsZSBmb3Igbm93Iik7CisgICAg
YXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNz
ZW1ibHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1v
ZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzk6IENhbm5vdCBoYXZlIG1vcmUgdGhhbiBvbmUg
VGFibGUgZm9yIG5vdyIpOwogfQogCiAKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9qcy1hcGkv
dGVzdF9EYXRhLmpzIGIvSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X0RhdGEuanMKaW5kZXggY2Nh
MGNmM2JjNDVkMGY0ZGQzM2JkOWNhNTk3OTg5NTRkMmQ0NWIxOC4uNDE3MTQzNTEyOGEwODRkNTk0
OWQ4ZmYyYjhiMTI1NzBiN2YyMzM3NSAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2pzLWFwaS90
ZXN0X0RhdGEuanMKKysrIGIvSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X0RhdGEuanMKQEAgLTUy
LDcgKzUyLDcgQEAKICAgICAgICAgICAuU2VnbWVudChbMHhmZl0pLk9mZnNldCgwKS5FbmQoKQog
ICAgICAgICAuRW5kKCk7CiAgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdl
dCgpOwotICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4p
LCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsIGBXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBw
YXJzZSBhdCBieXRlIDE1IC8gMjA6IDB0aCBEYXRhIHNlZ21lbnQgaGFzIGluZGV4IDAgd2hpY2gg
ZXhjZWVkcyB0aGUgbnVtYmVyIG9mIE1lbW9yaWVzIDBgKTsKKyAgICBhc3NlcnQudGhyb3dzKCgp
ID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9y
LCBgV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxNTogMHRoIERhdGEg
c2VnbWVudCBoYXMgaW5kZXggMCB3aGljaCBleGNlZWRzIHRoZSBudW1iZXIgb2YgTWVtb3JpZXMg
MGApOwogfSkoKTsKIAogKGZ1bmN0aW9uIEVtcHR5RGF0YVNlY3Rpb25XaXRob3V0TWVtb3J5KCkg
ewpAQCAtNjIsNyArNjIsNyBAQAogICAgICAgICAgIC5TZWdtZW50KFtdKS5PZmZzZXQoMCkuRW5k
KCkKICAgICAgICAgLkVuZCgpOwogICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHko
KS5nZXQoKTsKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUo
YmluKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCBgV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNu
J3QgcGFyc2UgYXQgYnl0ZSAxNSAvIDE5OiAwdGggRGF0YSBzZWdtZW50IGhhcyBpbmRleCAwIHdo
aWNoIGV4Y2VlZHMgdGhlIG51bWJlciBvZiBNZW1vcmllcyAwYCk7CisgICAgYXNzZXJ0LnRocm93
cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbiksIFdlYkFzc2VtYmx5LkNvbXBpbGVF
cnJvciwgYFdlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTU6IDB0aCBE
YXRhIHNlZ21lbnQgaGFzIGluZGV4IDAgd2hpY2ggZXhjZWVkcyB0aGUgbnVtYmVyIG9mIE1lbW9y
aWVzIDBgKTsKIH0pKCk7CiAKIChmdW5jdGlvbiBEYXRhU2VjdGlvbkJpZ2dlclRoYW5NZW1vcnko
KSB7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfU3RhcnQuanMgYi9KU1Rl
c3RzL3dhc20vanMtYXBpL3Rlc3RfU3RhcnQuanMKaW5kZXggYjQ0NDU2OTMyZDkwYjVjODMzMTQ1
ZWMzZjM0MmZjNTA0NmY3OWUwYi4uNWMzMTUwZTFjYWJlYmZiODQzMzNlZjcxNDIzYTg4ODZjZGUw
ZWFlOCAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X1N0YXJ0LmpzCisrKyBi
L0pTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9TdGFydC5qcwpAQCAtMzEsNSArMzEsNSBAQAogICAg
ICAgICAuU3RhcnQoMCkuRW5kKCkgLy8gSW52YWxpZCBpbmRleC4KICAgICAgICAgLkNvZGUoKS5F
bmQoKTsKICAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7Ci0gICAgYXNzZXJ0
LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbiksIEVycm9yLCBgV2ViQXNz
ZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxNyAvIDIwOiBTdGFydCBpbmRleCAw
IGV4Y2VlZHMgZnVuY3Rpb24gaW5kZXggc3BhY2UgMCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2Vt
Ymx5Lk1vZHVsZShiaW4pJylgKTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3Nl
bWJseS5Nb2R1bGUoYmluKSwgRXJyb3IsIGBXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJz
ZSBhdCBieXRlIDE3OiBTdGFydCBpbmRleCAwIGV4Y2VlZHMgZnVuY3Rpb24gaW5kZXggc3BhY2Ug
MCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pJylgKTsKIH0pKCk7CmRp
ZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfYmFzaWNfYXBpLmpzIGIvSlNUZXN0
cy93YXNtL2pzLWFwaS90ZXN0X2Jhc2ljX2FwaS5qcwppbmRleCAwOGU3NGFhMzI0YTcxNzg4ZTU4
MTljNGE4YmJlNzc0NzU4NWIxYTg5Li4xYTJkMjIyMTAzMDQ1MWRmMDY0NWIzMGVhMzFiYjI3NDhm
NTUzNmQwIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfYmFzaWNfYXBpLmpz
CisrKyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9iYXNpY19hcGkuanMKQEAgLTY3LDcgKzY3
LDcgQEAKICAgICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5W2Nd
KGludmFsaWQpLCBUeXBlRXJyb3IsIGBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5QnVm
ZmVyVmlldyBvciBhbiBBcnJheUJ1ZmZlciAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5W2Nd
KGludmFsaWQpJylgKTsKICAgICAgICAgZm9yIChjb25zdCBidWZmZXIgb2YgW25ldyBBcnJheUJ1
ZmZlcigpLCBuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKCkpLCBuZXcgSW50OEFycmF5KCks
IG5ldyBVaW50OEFycmF5KCksIG5ldyBVaW50OENsYW1wZWRBcnJheSgpLCBuZXcgSW50MTZBcnJh
eSgpLCBuZXcgVWludDE2QXJyYXkoKSwgbmV3IEludDMyQXJyYXkoKSwgbmV3IFVpbnQzMkFycmF5
KCksIG5ldyBGbG9hdDMyQXJyYXkoKSwgbmV3IEZsb2F0NjRBcnJheSgpXSkKICAgICAgICAgICAg
IC8vIEZJWE1FIHRoZSBmb2xsb3dpbmcgc2hvdWxkIGJlIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJv
ci4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mzc2OAotICAgICAg
ICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHlbY10oYnVmZmVyKSwgRXJy
b3IsIGBXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDAgLyAwOiBleHBl
Y3RlZCBhIG1vZHVsZSBvZiBhdCBsZWFzdCA4IGJ5dGVzIChldmFsdWF0aW5nICduZXcgV2ViQXNz
ZW1ibHlbY10oYnVmZmVyKScpYCk7CisgICAgICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5l
dyBXZWJBc3NlbWJseVtjXShidWZmZXIpLCBFcnJvciwgYFdlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vz
bid0IHBhcnNlIGF0IGJ5dGUgMDogZXhwZWN0ZWQgYSBtb2R1bGUgb2YgYXQgbGVhc3QgOCBieXRl
cyAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5W2NdKGJ1ZmZlciknKWApOwogICAgICAgICBh
c3NlcnQuaW5zdGFuY2VvZihuZXcgV2ViQXNzZW1ibHlbY10oZW1wdHlNb2R1bGVBcnJheSksIFdl
YkFzc2VtYmx5Lk1vZHVsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgIkluc3RhbmNlIjoK
ZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvdmVyc2lvbi5qcyBiL0pTVGVzdHMvd2Fz
bS9qcy1hcGkvdmVyc2lvbi5qcwppbmRleCA4MWNkN2ZmMDEyMmZiMjFjZTkxZjgwZmI1MWU0YzY5
ZTE0NTk4YzQ3Li4wNDg2ZmNmZGRlZmQwODIxZDM5MjQ2Y2I2NDA4NzM0YmZlYmYyMmUyIDEwMDY0
NAotLS0gYS9KU1Rlc3RzL3dhc20vanMtYXBpL3ZlcnNpb24uanMKKysrIGIvSlNUZXN0cy93YXNt
L2pzLWFwaS92ZXJzaW9uLmpzCkBAIC01LDUgKzUsNSBAQAogICAgIGlmICh2ZXJzaW9uID09PSAx
KQogICAgICAgICBjb250aW51ZTsKICAgICBjb25zdCBlbXB0eU1vZHVsZUFycmF5ID0gVWludDhB
cnJheS5vZigweDAsIDB4NjEsIDB4NzMsIDB4NmQsIHZlcnNpb24sIDB4MDAsIDB4MDAsIDB4MDAp
OwotICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShlbXB0eU1v
ZHVsZUFycmF5KSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCBgV2ViQXNzZW1ibHkuTW9kdWxl
IGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSA4IC8gODogdW5leHBlY3RlZCB2ZXJzaW9uIG51bWJlciAk
e3ZlcnNpb259IGV4cGVjdGVkIDFgKTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJB
c3NlbWJseS5Nb2R1bGUoZW1wdHlNb2R1bGVBcnJheSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJv
ciwgYFdlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgODogdW5leHBlY3Rl
ZCB2ZXJzaW9uIG51bWJlciAke3ZlcnNpb259IGV4cGVjdGVkIDFgKTsKIH0KZGlmZiAtLWdpdCBh
L0pTVGVzdHMvd2FzbS9zdHJlc3MvbmFtZVNlY3Rpb24ud2FzbSBiL0pTVGVzdHMvd2FzbS9zdHJl
c3MvbmFtZVNlY3Rpb24ud2FzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNGIyMmIxYWVlYTM4ZTQ2OWMzMjYwYmEz
NGQ1ZGE0YTZkYjEyMTUzCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAxMzQwOQp6Y21iVzhPTj9B
dWRCQEx2UmFNdW0+TW9DTT0kWX4wZCM/PWBGd2deb0tfakkyZ3hHXklXKFlHMnZaYHImWTZlJWcK
ei1SfGxkISQ+SUlBJmBzfHFDfkprKGQ0bH0xZCVMUUJvWWZHdFVSUGRWITxNalNmR2VTQjFPdUUj
WUQ9MldiKnJlCno9aVlqQl9lPXVnPkFKNlQmLXZjcHxOSEt9WmdjTlc8ZVpFQzteNSVHYilITjFf
eEdkeT1PWD5ZYH0+WVBfbmhPdgp6SVVUYztHSjxYVnJRaGE7KTUrLVd7bmNPbGpaZ1UtKkZOXl8p
MU14R2BxfEdVYCVZJiYmcGhpdGNBYXplQHJvU30Kelp9YHZGQyRpMChKQ210UEdgSyZ5eVMrSmlh
ZGN5SlhKXylWT0tzWDBON0g5X3JrbVN+QypOdX1KJD82TW58SlQtCnpPck0oVWUxN3JqVFpXQE1k
JCVVSD9AZFF7aGomSklacnl1JWM9UHMpJklvRGBocntpaVRVJWtwKS1XdWVYe25xYAp6ZCF5LTwk
PmRXejtqKjIxZEdGVGRfVnkqJEc3PmM9b08lMy1qY34zdCtgR05Le2ohVFJwZj99enAobiFpNjs4
YyQKemNmTSRVS0lIS3k+VW1xeDNEMHFLNUZmO3ZDITIyRysjV151cUwhYE80Y0M4bGI4cG0wKGdy
anF6OXElSUp4WUB9CnpQU1N8flF1Rzw2RFZyIXNHZnBIS1hJa3lad2Y8Q05UbD4qRG0tNz9wQys1
Zk51PSMwIWBBWkJzKiZnMTNfbmxrcgp6VUFnb3l4XndSe3F2P2hfKWdIZF4hdUNzaHBMNmZiQ29r
Um9edj5TJm5iQ0M1eShkUzB2ciM4Y2pgbD80P1krLUUKekd1XnprXn59QV5UTylVM2dfOWc/LVhG
TyY9MHtoZnNlNWxXK2BCcDFhdSorNlIzMiolVSk8aWd4dyQ+dXpKMnFTCnpkKVVVS1B4cnBBJkVr
IT8pc0J8XisrXzU1X2ZVSXlaKnd4KW5ZIzZDX2ArbH5hX3tjaCRqP0JfJlNjflVDeUBTVgp6R1Al
MVdHdVdLby1ucn1FKV93a0VZLXhMWWM+QV97ZXtYKWs7bHwyV0M5Y1N3T1lfI19rOT9weV5Kdz80
ZTxFVDMKemlKaXY+X1JxRC09dj1GQzxNWFheRXgkSlFfamI+PmlZVSomdFJlMVBFQl90YURjdCMx
e2A8QllVKURocG9wMHkpCnpBQkl0I0UyJk8pSUp1SX5AOH53T2JuYCNaeihefD1acU98d0V3T2Em
XmZCayZhP0g4NmhJMyFCaDVjKll7SlM9RAp6Sm1iWD07SDhNRnhOc05aan1GUjl2R2M3VzkmYHFl
bEAwPTdIcVpaQ0NXODV4MDVVaz0mYGxabG1mOTVLRGsrPmwKekdwPCVII0k4ITJxdEo7ezxFcVB2
QkhoeHRseWxMZ3hXZ3ZDNiEoZyhpV3V8SmFuKW10WmkkTFNxYXg0Y1BKOWBgCnpyQTBpaFF2V3No
QU1eKjBSbmdWSF5Lc2N1RTtHdH4zTW4jdHQ3SzsxOEpFYmpOR2AtXyl4VGNsVDxlcmNVZ1pBbAp6
KVNyRStYcGhTX0R8MX43PD5gTFcmdjFkUURqRk5QSns/emBxR09sMGJmIzRfYmhRRnF0KWVhSmpo
dDNQUFRXSD8KenVtSjt1Vm5yS1FiaT45O3FSdGwrb29vQn1ZUCM9VFI+VmYqUiRsN1ghVWtRR0Jy
ZTFvUHtKZTw1fGh7X0ZFUnVqCno9bFE9YXN4M3RXZyoxPiM/eDs7U0J3QlNyIztMXjVzYX14eHo8
KDkjM3wwbkBkR35SK2NZZEZ7e0M7THM9SUE7Tgp6eThhX0c2fE5zVmNSayU3eXY7K1IxWSQkO3sx
di1BSU9gdnthYyFASUJDcVoxcGlgZzFYI1Q/fVBKKyRNREp+TnYKemh+MlFSTjhSVXhrUkdeUWBO
U2VPVTtqMzg1SS00R19tYGt1SSkjaVUtRjFsXkV5amFLPVgzYFRNNVd9WjFCYlFOCno/eml2JURq
I0oyYCsxKUt1M2diX0ZhUEZtRilFVEQkVSF5cGg0Xzx4fEM4RHFUcXM+SFd7dHRRRDx6Sj5GXmVJ
egp6MiZ4Qz9hbUxiUnslNWpuYlpYbmRKN3JDIThAISM5UmdfKiVGajFURjZTe0EzJk13Q35jUz04
SnVDcWB5eEtPeEIKej4yZkM1KGZNNExLMmsrfWR+V2EjYWhkMEA4bGtQNFAkYHUkNG5nMjxGPyU9
cUleZHI7SVBhNVBBQ0ZIc19sVHgpCnp4WFpxb25hbz9aVSFASDBqSF51aHQhdl5JQThLdVJ2JW19
VStnVXBwYnNWZjJmMExFTCM/MDZsa1hKN00qN3FkSQp6KD9RWEZPdyVHdHpaXilne3khc0kjT0d1
R2gyMWp0NHwxKkM9MVA3STtTSCk3bSZrb2B6akY3aGchTGdRQHpKaTIKel82VzA4PGRkb1lfWihK
NWIqZyppPnM1PEFiZFBlYnJrOXglMk9+Jkt7cj11QV5yMHNJQlEzPCpnTyp0NzEodTcxCno7UlAj
LTJ9R2Y+NDlHRHZ0eUUhP3hUfnpyalVfU3slcmkwez8mQmI+SEkoSzUhSSlUKzRpbyhxWnQ1WExf
akFZQQp6V1ZoYmdfNHxuM193TV9fRjRRdGtKWkFUT1hJRn10YTMrT3VBSyYtc1prMD8+aDZMZkdg
I3dIJjlMPGd1NW9AN2oKejVgfChHdiQ3fEhXRXI/JDVLM3g3c1Q1Uj42Xm8pPTVET3QkVihGTXpp
Z3A8X3FLUml4QXNsRDtaISNAblYhREBICnpRcjFoeWckNGFKYm4jRDs0UExWKm91V2B2QTU9dnMy
bm1+bCU+Pk9IcVhqKT5NTjtBY1doPjk1UUhHbj9ISkl+YAp6Xjk4fmVpRylOMnd6ejAxQXxyV0Bh
PHBQcEt0VyhjYHMlTGJ7X2pqJWlYT1JsTVpXY0JURVB2Wm1GTzRPaWpTeE0KelhaXjkxZiM7PUlK
MkUyTE1maWghYWQzcVpjQTAzQ1QkVytnZ0RNaXR3VzxTc0VvQ2gyeEtnPTZjUVMwQFBKQkkpCnpl
QyhJMCZCJmBrWlJVN0A2NlZVJiFSbEZiejNrekk/RFElJEFscmA9S31fXmM1bShnQjU0fGhYVVh0
ZWBQdmd3QQp6eCh3XjBLKzxVbENFUmgkMV5HfVExbk5TUlVeWWwpXiR2TmVBcmZ+OF9aUUpxamQj
fHo4emAqcHVkQSU8a1ZJLWAKem44UWE7MVolIUNAKTtBaShKc0Y1Qm4/a3QzV2NMLUd9KGokU2p2
anRsQk0rfFRURmlkNzFCI3tjT1VMQ0BGM1R1CnptVE93e0YyKERuI0w3fHlgViMzRnpEI2RgK3Bf
cE5jUzc1I0ZsMT5wOCtLfG9qRGJXK3JocHF2bkpgbTM3JklSVgp6SXx6YDc2VDtGOF9YVkcwWiFH
SX4jb1h1OEJSOzJ+Yyt9X09DRUFqNXdUUjBzXyM2O3Y/c0thTUtnKX5OQVJDeUsKeiYqQVFkZzYy
TGFEJiV1M1oxWH0rN3Zac00xWC0tUGBFfnZXYC1EcnNVbll0fDFhemwta2stIUdMS2dUclVQcmJ9
Cnp7cCt2NC1VZlg1dmtFcWwhTEBfYGBJV0lCU21ZJG1NKmlUWlhZSDd7aVRfVXxCISVDRDEzKT4k
MiVwaHBpI3kyKQp6WXhsS1Vkd2lkPyFjNVYwMDwkRlI2Q1M7N2x+SF9JfEI0ZH05Km1hIyE8Pm9r
WjxSNCNBeClwflhCIUJZUGZKMmMKejhPdSo8SHdOUmI3TUFOKTticGFxNU1Jbk8hVmhLQyVne01Q
UGdNX0hESVM2ZHRQZi1nb2dwTndVWSk+cm1LNl5QCnppNlFlVlJZbkc2bklofEpoS3dtKSYqazZf
UzJ8NnIzOWw2S20wZk9aayRwfXFXKkBuQmlvZG9NTUcjK3pkR1JiMAp6RzM5K3lZUkUoPVdJXzxs
PH1vaTtDV19+b1h6Nz90UjNERyQ1LVh2TGQ3dntFMmJwWGUpLXpaS0cpMF5qJDs2TEAKejN2LWIl
e0YtNilqSHtxPi1HdmJ5amhSM3FTKmd0dTs4R1R7RmRDRjIpaXp6TiktRF52NWMjX2FnI2V9WFFY
enlMCnpnK2pvJT95MTM0V3VZKXVEMTxnPWhsc2VkN3oma0pEK1FuKT5ge0A7TGc2dE5sKUN+VXUt
PTVpaihrQyh1KD44Uwp6MzVCfTloITtibFduYG5VRD0lfEpGTyZwT0d6KjBpNitBQTVMZVh2XnpV
YiZLUmhiSGZncDR7QVIqSSs9NEQrUUIKemtlZkx3N3soek8maEElNj5aTCZFcUVwOTJuWWJXVHJe
cG8ocDxxelEjQmUxR18oM3N8U3JpaSlhJEhRYkZ0Mz1YCnpWVjMhX2c8dDg0YHFFVHUwMFIjV0Yl
Wil8Q1B0I3xTJllQVTQ0MTRGKipHQTkzQG4wMlg4c2A3ajE4IzdrcGRofAp6NUslLV81JV8jI1lf
ZilOd25MbUd0PFU0KzhkaXk7dHl1JnQrUz5GZTxFJmEtdXtmej4wPDBGb1RlY1k5dmowMjAKejhC
bU9oXmNNX28jS0AyJHV+KH1wJnJxTFk7aShLVk1PPGNESFJxfHlGQndaeHE9QikoakZHPzJ7V1ZX
KUkjd0JCCnpZRG4qNE01eiEtaztZeVY5dXZaMjVgcnE7LVVQXyhEdUltVXJZT1NWVXNBYHZ4LVBs
V00rZDQ3TCE1KEBCXnlvTgp6Z3JIUGBCYEQ3UHg0eUdWcFRAaz5yPiYkMjk3TjQ1Y3RRdVprTzhX
YURBdDIoZyM7RmQxViNrS1kzSU5BS0BJKWsKejFkdnJAVUVIQHdYZTQrUTFqPllmR3p1MWNPXzA+
OGM/IVNVREFAeEolMEMkdU9qZVExdzg2YldFNmlBMUdrYSQzCnpwPnR0IylKYXgkM2JfNURmbV9u
Tio4WlUpazRWd2xLaEY3SVFFTnNIYlQod243UG98NSYtSU5waExkKnhPeHVpJgp6S1BXV1F0SWZf
ZypGeDllK3g3TUAqODwlP1VrITgqaVVBIWx8S3NvY15MTWc2SDZOVisySHY2Vkt8IXF1JE0yX2gK
enFsb2JFemcxWm9sLSQ3VWZEUFdrJlZRe00jcWpibytwe1IlRjUoO2JtQWdLZmtDYzZFKDlAQmZg
SlpibkJeMDswCnpHUmxKT0hRWm1KMnRIVS12TD5id2o5aTY9dzVCUkthKWV8d1g3V0JaI058I0Vf
YWtmXmsxZTlEMHVtIVI/Q1dpZAp6OUR8RStwLUJxNlAyclhqYD5CMl9RKFY+Uklybjt9YWVrbDZN
aTNJenkwT1laYXVfYClfPlpAQ1N3S20kQW5AIUwKekxKTUZ8KXgzZkNZfEtTejdPZSNlIzkpdytp
VWpWdyFCMG5HKEp9QHlCMzMzdVVoUmBAQEZhc0V3NWE0RD9JTX5fCnpXbn1NSypKVnk5IS1ANyMw
ZnlUT1c+OF4mTWt+fUM1bHtESFBDJlQyZ2NwcytxQlhlcWglcVYpOCQkXnc4bF5PUAp6UUE4MXtv
ezJGdkBrbUpWSDZzS34+XzQ+JjklS1VTTFZAREtfPEdlNm0hVEJlenA2eUdIKD9ybjJeTH1ySz9Q
WnsKenN5UTY8eWUzPGFHclJfXyl4eXxFQEI/TnVMeSZuUz1xKHJuT1VlcVlBPGBMTkI/e0Y+Ozdu
KjdeZUVRX3NBej49Cno8MGt8Wjx2RDh8MWBoPHVRa0xTOVJsTWNmNiNKfHhZfGxRYiNoR3dKYnVy
YCRjcXdnNV95bUA2RVM2YCVmIXViMQp6QGEldCpgKXx1O3hFfUl2LU94Wl9hUGNFN1NhJTlqITNR
RUl3WEt6RCY2KE9IMUBWQG9BJHZ8fkNyU1N0R158KWIKekxUblcwPE59UWslckt7eks+SUt1bzxm
Vms0c0VIeFAlMnZtVUo+WU10MEllVitIa2NAZH1XSTtMXz9NVkEmfHdTCnpeUChreF8rY0hoM1lN
fFJmU15jfnZgOEI8V0dyZjMxUHYhTlRETjYzb2NPdnRUc1B2c2w5YlhjOzFidVA0TXdARQp6SFla
Z0VnYk0mNTkoRG8qVXwzSHtPNSs4fFctUyM1NTxAdT52dFNQU2d0aUV4WWBSM0U9fExXRmdJODly
VFRaT2EKelk7PEBTME1vUUFQRXJUWT1DUz9ec1plQGhmR2JhT2dVeU05RCshJm5xeVh6ZXM7eGtu
a2c1JD1yPTREa1ZncGtjCnotWGN7cHphMSVjeVJ5NThSJjd8eUxTKWx8cCY+c3VfOyZlJWw3Mykh
cD5YZSNfKUlqLUhOeylkc3dPVjdNWUwrYwp6KDVTP3VyQU00TSprKDdSKVNgdkFpWGx5U1l+fGs3
Xy07UH1mUHtKdyE3ZGM8N3xzJERQPX5SZzBYVHBWNjtNVUUKenw0UUcwWVBTWmVQNFY3VW5ZQGxr
SFFZUE5lXiRZRk1ZUFo9bGhoU0ZfOUhOfCpoMCtjJDFfZkZISD1lcyRrb0xMCnozNkhWPW9ZMGo/
S344fGpgUUtDPDYzYzlRV2I4RlAyQUx1LXIjOGZTaGIpJDFOdWxLRVcyKk1MKiNxbi1sOUM+Qgp6
Kil0MHwrQTQje3ZQYiRsNzV0Pjk0THxCKGJtU2A+JHlpbHEyU249NnZhMVk3M1ZlaiE7fGxJJXZF
VzhGKSs5VEcKek5FMGkjWTR7eTJ4RF9zUEVPPkBVWCo2N2wmbEdMYmlvaz1PYD49N3IwMiYjQDRL
QnFhWWgybm16bShjO2M7bjxVCnpFPT4lVjstOHBwZ0ctfWhhY1RQSXhITjhYc2o/fmN4Qk90PFQ5
JTh5RitwI0hPSm17RXhXPVdYb3Y0fGBhQXtCeQp6IWEqUVF4T0J4WlV3I1BBKDd6WClBKDBYTENA
NzI4NDluTzxDZzJGcXE8KT8zcXRLcE9FQyhIK1gtaUk3aH4rZD4KenJIbWUzYEp6Pks8P1ckYj9B
T093Y2pQfXk4PHdkb0xBMWp4JTVyK1JISmhsKU5ER3BQdksmc2JSYXNBJjk4c3FACnpfS3Yyd0l0
QllqPHVvMUdkc3BsfVlgZD83VTdmUyY7PWZFNHJzPTwwTChmOyVMYlhldk9ZbSFwaz18NHlJKllF
TQp6SGRMcF9iZy0hQ1poQCRBUUYxaG9LaCRsKHo3WE82dVY5UkUoV1FkWDBgNzhTRWg8an5VUkZa
RTJyZGZ0dElUajMKejRfKFFOKTFpUyFEXkN2RVFmYmw9JGRINTUybVlsQ00pMVRoKCt8VnZYNl8w
OGxZNF42NzQmK0dvPntYI3N+RUFQCnorQjI7a1k0bFVpSCV4SS1lSDRwfDNsKmNHLWtFMntjeEVL
PDVgYkNWQUZfJihVXm9RXlRnNkM7WCZ0a1cxeWd3QAp6PXVrTj5jO0BvTTFiVkE3cigrNHEzPW8r
bUR9VFh5PT1kJkZqQ09uZGo2dCY/a1ZaUX1GMTJUN157dyQwSXJUTVIKekBmeDFWUG1lZCtmNmJ8
alNYWU1wKD4mQnZVXnh0IXgtVUhNMCtxPXNZe01mQ0ZNI1dkcit7Kzc2WFY3Y2dGaT5YCno2S2pg
X2dmfUJSKE5AM3tGfjNrMUxMKEEyUXkxaHIweWU/enBgcyoxKSlnZ3R6aWRVQl5aMXl3PDNmM3Q9
WVI5SAp6Zzk4XjA/MiMqfGc9Y0J0R2NndlZQd2M1NSpMXldPQztgUypibi16PSFlWCs1RllIIzdN
ZVNJd1p0YT5fSDNSdlMKelBOVmhMQFQ/KmFiNHhAazBAKzB+dXt1SSNPYnhzd2JUeSFnTTctLTAj
Um5jYUBDV2QqTFBqO2JWMCVHUXVHMmJ0CnpwMjt2QytmYFV1UURPKUIpYD1ZJDBLJH5yZ1RRZy1U
Q2FOT2ZtUiFlZ3ZrcUcmS2g1KWh3eD9BO0xBZilrJDNFSQp6anYtQVJMP3A4cjRRVSFvMyhkZj9X
aVUqY0ZvWVI8UE9gfE9ZNnpqdXpOODkwRHAzdWpEaiYyWUFiWUpOZ1lYcSoKejZaQ1JiN0VvdT9C
aEEhSHdQODhLYT49MT0zM1ZGb0lfODNecWFYeXFKSn41SlJGQmpJKT84RWY2NGFedDghMEkrCnpo
TjMtQ2lCNUdoQmtNVjgpWStGTkhRTzEyZDtQRlRsIzg9ZyRRZ0JxYmNRKlA3cSpeWl5ARHwpZWQt
N1IrN3wkSQp6aHg/X0FhOzRgI0AwO3BieU50TH5ebzNqJCYqb3g5MW9oTSVhUmFhd2ZyNnVPbz5y
MjQ5Y0M3WG92TWN8bnVZezgKekh7VX0/JSRGQUpgc3R1cXo2QyNkNjUxNFhqdDNfIUNRbDBwN0Jq
MCY5UnZePlM5TmlRQUdKZWFFdDgjOWI7S3pQCnpJc2dNSjFNcS0pMHZybEVyXmkhd3h0Z3ZRdTB3
LUlsZ3cocFcpZjtXdikxX31jeEleZUxoUFZ9cUYwY3R5cmI+SQp6JlZoQSErajJmWW05PXhgJlMl
QmxWd1QzVzwkJiRSMFpBdyNXVEMqRCojd3hHNUQ8SnlOdF8yPGl9Xi1qU3J4NDsKendKalRTajQt
RHJfUjhfckVLWCNpWH0jPH50N3hxMSE4SCFYKXErTigwfGhqTDY/IV54eFdLYnZXKX4mVmgoTHZf
CnpuTjF5WUw4TDgwKjRaTm82P3JEMiNwQGM0JVcwbFFGM2IjVFJCdHU0bjF9aEFBdSQrajNPek5Z
ZmFGVjZvO1oqPQp6cU5ZbE5tdClJM3htbz4/cClxb344QmR4QSZ+ZG9WMUpIKD8oTDlnbm4jVysw
X3w7NT8xbnFqUiEofD5yREQkTUkKekNEOXpOXjY7MzE1RUskN0lKPHU0bmtARHdFYnczckVnRHI0
bztuUnxmKzA0MjEpJEhveFRCUz9VUyR4Z3NrbmFQCnpUb1c2VzEzPUFjSyN0Jj5JZFVaOGFLMEQ+
LSZ6ZUpKdDxhJk8+aCRJNDhPbi0hOz1QVTgjV0o4cWhzcWolRnNnKAp6UWMwKFc+YmxoR0l5eE9r
PnBFLXJASkx8Pjk0VHhDOUZxVlhaTnF5JmJ4e3w0SEI3M15jKmlhYjRea29QQXU5JXcKekY1JHVT
MnA7Nl5LTlQlPUpqZXxKNTJ9R2hNbHc3fHU1SXcodlEjWXIwJWp6cGJ2QmpgWlBUSH03OTI/Ums+
K2FmCno7NmtOVl9pMUxjNyM8OFY1OXxnIW44Qjs2aCNDXyZHNFJOZTA0PFE7UGdVQCVEe0t5aEor
NVdgbTleNUA4eUpCUQp6TEplak4/clZAQEs2fUlNVStmaC1kelZ3cnNsSVBgQyQofWtWTDVRMEsm
PGh7aUlUa1oyUW5RYmtORG84P2YyTDYKemF8OVBUYVdzZk8hRyVhTWhEKTViOXdqNFNCaFVaWC11
ejU/eHI8flBoZFNgfVhxVll6fEY/UHJHbSNtR213SmxtCnpOI3s1c0IhX3d7XjxNPDhgM0Z3VDt6
KUttcjctYVdgKDIrLSUwemI7RXFtIU1tXkF1UDhEPC12NUMkZExNbS12Pwp6c1JoR140NjRuVXVx
bmRrZUFyd0ZuflB6eTVqSWJSJX0ydUtxbWNPa0FzTC1VTUR9cXhxfjtWMFg/LWNUWWlZUTQKemdn
c2pMZEgjPWpGRncrSGopPiZvZnhWVEFTWlIpQCUyNyhqNX1aPDRCMUkmLWd1fVZpVmd6NTwkUmZK
disrMmJUCnpSViRySV5ebX5vKkZeRytPYGNnR0khSTAtI09TdDE+cF5+OzE0MmxJPzE4flNuYzVx
S1cqMio+Zi1Lb3Y1OGBDKwp6T3BxdmgjaWR3NlckKFBicV5VZ2AoLUpMdjdjYSQ8RV8pbDdWaE5i
TkNvYVgzRj8lMW02aWR3UEBuWSZzKChvZ1IKekRebXJqIzxmJSU7IVdzYExpUlJELUFHPX5oPmc9
YGEzZGxLM3c9YWQ9YzA/QmJsQVQza3wmKWNFJlZNXzYmNmhECnoxKURqe1AtYClwZUNaJEJFOHlK
OTlNU0hIJG1MKFJjU2JvdVRobWsrVWEhbzUmKDZvWihtVE08XjcoTlRqYFAzUQp6ZlZUN0JVJi1U
Rkd2e0FoJHM7eGctOF9uVEVZezZlQmo7U3EtfWw9NXF8U2RnVD4xZk54dk5KZGojbz9iX19mc2kK
emBCI2BLeX1ObTU2dXFrNTU0IUx6TVlRfUdNWkNLRjF4NH5rQTVXeGpAWkNoI2RAfDloem17ayhl
a2pwZHs2PURCCno+Qz1YZFp2QUNNelZ1Tjxafmk/KmVgKS1zKXJGVigqWEV4STQzXiZES1hLZXcx
ck49PjA2NGskM0Jzd3h1TkY+Ywp6IV9rV2A/IUJjb3l0I1I2PWs4bmk7XjV4cW8lUUJ9ZnJzRGgl
WSNRJl8wN2lnYFApMGdUaVpLKHFldGgqcFAkXkcKemo/TmUoYzcxTyYrSXF8YGh0RVdZbGhPMlRN
P1gzXmR5Kk9OUDVFZUheTGY1SCo/d1g4X3tJbHx7P2Uoa0pBRDQ3CnpKOWwwbGUoMXYrKW1vcm49
Y1ZiO21PTGxIPiFYcXZaZn1weVl5SSR6aTROYmNZZGJJUylkYmh5cD0md18qV2NORQp6eUsmKG0m
V0YhOT5Qd15OLV8/QlpAJFReVCNDc00kQDM8SmcoUmdxMyhaPjZsdVFBQGdAY3FRYigmclA4JDJU
YFYKSjVaYD9LZSpzODFUakJyIQoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEv
SlNUZXN0cy93YXNtL3N0cmVzcy9zdHJlYW1pbmctYmFzaWMuanMgYi9KU1Rlc3RzL3dhc20vc3Ry
ZXNzL3N0cmVhbWluZy1iYXNpYy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iM2ZiYzI0NzlmNzIxNjNkZmFkMzIx
MDQwNTZiYTI3NDM1OTIzNWRhCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3N0cmVz
cy9zdHJlYW1pbmctYmFzaWMuanMKQEAgLTAsMCArMSwxOCBAQAoraW1wb3J0ICogYXMgYXNzZXJ0
IGZyb20gJy4uL2Fzc2VydC5qcyc7CisKK3ZhciBkYXRhID0gcmVhZCgiLi9uYW1lU2VjdGlvbi53
YXNtIiwgImJpbmFyeSIpOworCitmdW5jdGlvbiBjaGVjayhzdGVwKQoreworICAgIHZhciBwYXJz
ZXIgPSAkdm0uY3JlYXRlV2FzbVN0cmVhbWluZ1BhcnNlcigpOworICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgZGF0YS5ieXRlTGVuZ3RoOyBpICs9IHN0ZXApIHsKKyAgICAgICAgcGFyc2VyLmFkZEJ5
dGVzKGRhdGEuc3ViYXJyYXkoaSwgaSArIE1hdGgubWluKHN0ZXAsIGRhdGEuYnl0ZUxlbmd0aCAt
IGkpKSk7CisgICAgfQorICAgIGFzc2VydC5lcShwYXJzZXIuZmluYWxpemUoKSwgNyk7Cit9CisK
K2ZvciAodmFyIGkgPSAwOyBpIDwgMTA7ICsraSkKKyAgICBjaGVjayhpICsgMSk7CitjaGVjaygx
MDApOworY2hlY2soMTAwMCk7CitjaGVjaygyMDAwKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>348139</attachid>
            <date>2018-08-27 07:12:08 -0700</date>
            <delta_ts>2018-08-27 07:13:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-188943-20180827231207.patch</filename>
            <type>text/plain</type>
            <size>170089</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM1MzU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
ZDJhYzBiZmEwNjcxODA3MDdlMGE1YmI1YWFlNzRlZjJlYjNhZTYwLi4wYjUzMWFiZDhmZmM4Yjg2
MjQ0ZTYxODQzZDUxMmIxZmU1YWFhZDgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNjUgQEAKKzIwMTgtMDgtMjcgIFl1c3VrZSBTdXp1a2kgIDx5dXN1a2VzdXp1a2lAc2xv
d3N0YXJ0Lm9yZz4KKworICAgICAgICBbV2ViQXNzZW1ibHldIFBhcnNlIHdhc20gbW9kdWxlcyBp
biBhIHN0cmVhbWluZyBmYXNoaW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xODg5NDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgV2FzbTo6U3RyZWFtaW5nUGFyc2VyLCB3aGlj
aCBwYXJzZXMgd2FzbSBiaW5hcnkgaW4gYSBzdHJlYW1pbmcgZmFzaGlvbi4KKyAgICAgICAgQ3Vy
cmVudGx5LCB0aGlzIFN0cmVhbWluZ1BhcnNlciBpcyBub3QgZW5hYmxlZCBhbmQgaW50ZWdyYXRl
ZC4gSW4gc3Vic2VxdWVudCBwYXRjaGVzLAorICAgICAgICB3ZSBzdGFydCBpbnRlZ3JhdGluZyBp
dCBpbnRvIEJCUVBsYW4gYW5kIGRyb3BwaW5nIHRoZSBvbGQgTW9kdWxlUGFyc2VyLgorCisgICAg
ICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiB0b29scy9KU0RvbGxhclZNLmNwcDoKKyAgICAgICAg
KFdURjo6V2FzbVN0cmVhbWluZ1BhcnNlcjo6V2FzbVN0cmVhbWluZ1BhcnNlcik6CisgICAgICAg
IChXVEY6Oldhc21TdHJlYW1pbmdQYXJzZXI6OmNyZWF0ZSk6CisgICAgICAgIChXVEY6Oldhc21T
dHJlYW1pbmdQYXJzZXI6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXVEY6Oldhc21TdHJl
YW1pbmdQYXJzZXI6OnN0cmVhbWluZ1BhcnNlcik6CisgICAgICAgIChXVEY6Oldhc21TdHJlYW1p
bmdQYXJzZXI6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdURjo6ZnVuY3Rpb25XYXNtU3Ry
ZWFtaW5nUGFyc2VyQWRkQnl0ZXMpOgorICAgICAgICAoV1RGOjpmdW5jdGlvbldhc21TdHJlYW1p
bmdQYXJzZXJGaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uQ3JlYXRlV2FzbVN0cmVh
bWluZ1BhcnNlcik6CisgICAgICAgIChKU0M6OkpTRG9sbGFyVk06OmZpbmlzaENyZWF0aW9uKToK
KyAgICAgICAgVGhpcyBvYmplY3QgaXMgaW50cm9kdWNlZCBmb3IgdGVzdGluZyBwdXJwb3NlLiBB
ZGRlZCBuZXcgc3RyZXNzIHRlc3QgdXNlcyB0aGlzIGludGVyZmFjZQorICAgICAgICB0byB0ZXN0
IHN0cmVhbWluZyBwYXJzZXIgaW4gdGhlIEpTQyBzaGVsbC4KKworICAgICAgICAqIHdhc20vV2Fz
bUJCUVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpCQlFQbGFuKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSk6CisgICAg
ICAgIChKU0M6Oldhc206OkJCUVBsYW46OnByZXBhcmUpOgorICAgICAgICAoSlNDOjpXYXNtOjpC
QlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6
Y29tcGxldGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjp3b3JrKToKKyAgICAgICAg
KiB3YXNtL1dhc21CQlFQbGFuLmg6CisgICAgICAgIEJCUVBsYW4gaGFzIG1fc291cmNlLCBidXQg
b25jZSBNb2R1bGVJbmZvcm1hdGlvbiBpcyBwYXJzZWQsIGl0IGlzIG5vIGxvbmdlciBuZWNlc3Nh
cnkuCisgICAgICAgIEluIHN1YnNlcXVlbnQgcGF0Y2hlcywgd2Ugd2lsbCByZW1vdmUgdGhpcywg
YW5kIHN0cmVhbSB0aGUgZGF0YSBpbnRvIHRoZSBCQlFQbGFuLgorCisgICAgICAgICogd2FzbS9X
YXNtRm9ybWF0Lmg6CisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbjo6TW9kdWxlSW5mb3JtYXRpb24p
OgorICAgICAgICAqIHdhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmg6CisgICAgICAgIE9uZSBv
ZiB0aGUgbGFyZ2VzdCBjaGFuZ2UgaW4gdGhpcyBwYXRjaCBpcyB0aGF0IE1vZHVsZUluZm9ybWF0
aW9uIG5vIGxvbmdlciBob2xkcyBzb3VyY2UgYnl0ZXMsCisgICAgICAgIHNpbmNlIHNvdXJjZSBi
eXRlcyBjYW4gYmUgYWRkZWQgaW4gYSBzdHJlYW1pbmcgZmFzaGlvbi4gSW5zdGVhZCBvZiBob2xk
aW5nIGFsbCB0aGUgc291cmNlIGJ5dGVzCisgICAgICAgIGluIE1vZHVsZUluZm9ybWF0aW9uLCBl
YWNoIGZ1bmN0aW9uIChNb2R1bGVJbmZvcm1hdGlvbjo6ZnVuY3Rpb25zLCBGdW5jdGlvbkRhdGEp
IHNob3VsZCBoYXZlCisgICAgICAgIFZlY3Rvcjx1aW50OF90PiBmb3IgaXRzIGRhdGEuIFRoaXMg
ZGF0YSBpcyBldmVudHVhbGx5IGZpbGxlZCBieSBTdHJlYW1pbmdQYXJzZXIsIGFuZCBjb21waWxp
bmcKKyAgICAgICAgYSBmdW5jdGlvbiB3aXRoIHRoaXMgZGF0YSBjYW4gYmUgZG9uZSBjb25jdXJy
ZW50bHkgd2l0aCBTdHJlYW1pbmdQYXJzZXIuCisKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxl
SW5mb3JtYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZUluZm9ybWF0
aW9uOjptZW1vcnlDb3VudCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZUluZm9y
bWF0aW9uOjp0YWJsZUNvdW50IGNvbnN0KToKKyAgICAgICAgbWVtb3J5Q291bnQgYW5kIHRhYmxl
Q291bnQgc2hvdWxkIGJlIHJlY29yZWRlZCBpbiBNb2R1bGVJbmZvcm1hdGlvbi4KKworICAgICAg
ICAqIHdhc20vV2FzbU1vZHVsZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVs
ZVBhcnNlcjo6cGFyc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjptYWtlSTMySW5pdEV4cHIpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlVHlwZSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VJbXBvcnQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb24p
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlUmVzaXph
YmxlTGltaXRzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpw
YXJzZVRhYmxlSGVscGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFy
c2VyOjpwYXJzZVRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFy
c2VyOjpwYXJzZU1lbW9yeUhlbHBlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206Ok1v
ZHVsZVBhcnNlcjo6cGFyc2VNZW1vcnkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpN
b2R1bGVQYXJzZXI6OnBhcnNlR2xvYmFsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6
TW9kdWxlUGFyc2VyOjpwYXJzZUV4cG9ydCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206
Ok1vZHVsZVBhcnNlcjo6cGFyc2VTdGFydCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206
Ok1vZHVsZVBhcnNlcjo6cGFyc2VFbGVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2Fz
bTo6TW9kdWxlUGFyc2VyOjpwYXJzZUNvZGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNt
OjpNb2R1bGVQYXJzZXI6OnBhcnNlSW5pdEV4cHIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpX
YXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlR2xvYmFsVHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZUN1c3RvbSk6IERlbGV0ZWQuCisgICAgICAgIEV4
dHJhY3Qgc2VjdGlvbiBwYXJzaW5nIGNvZGUgb3V0IGZyb20gTW9kdWxlUGFyc2VyLiBXZSBjcmVh
dGUgU2VjdGlvblBhcnNlciBhbmQgTW9kdWxlUGFyc2VyIHVzZXMgaXQuCisgICAgICAgIFNlY3Rp
b25QYXJzZXIgaXMgYWxzbyB1c2VkIGJ5IFN0cmVhbWluZ1BhcnNlci4KKworICAgICAgICAqIHdh
c20vV2FzbU1vZHVsZVBhcnNlci5oOgorICAgICAgICAqIHdhc20vV2FzbU5hbWVTZWN0aW9uLmg6
CisgICAgICAgIChKU0M6Oldhc206Ok5hbWVTZWN0aW9uOjpOYW1lU2VjdGlvbik6CisgICAgICAg
IChKU0M6Oldhc206Ok5hbWVTZWN0aW9uOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpO
YW1lU2VjdGlvbjo6c2V0SGFzaCk6CisgICAgICAgIEhhc2ggY2FsY3VsYXRpb24gaXMgZGVmZXJy
ZWQgc2luY2UgYWxsIHRoZSBzb3VyY2UgaXMgbm90IGF2YWlsYWJsZSBpbiBzdHJlYW1pbmcgcGFy
c2luZy4KKworICAgICAgICAqIHdhc20vV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmNwcDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6TmFtZVNlY3Rpb25QYXJzZXI6OnBhcnNlKToKKyAgICAgICAgKiB3YXNt
L1dhc21OYW1lU2VjdGlvblBhcnNlci5oOgorICAgICAgICBVc2UgUmVmPE5hbWVTZWN0aW9uPi4K
KworICAgICAgICAqIHdhc20vV2FzbU9NR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpP
TUdQbGFuOjp3b3JrKToKKyAgICAgICAgV2FzbTo6UGxhbiBubyBsb25nZXIgaGF2ZSBtX3NvdXJj
ZSBzaW5jZSBkYXRhIHdpbGwgYmUgZXZlbnR1YWxseSBmaWxsZWQgaW4gYSBzdHJlYW1pbmcgZmFz
aGlvbi4KKyAgICAgICAgT01HUGxhbiBjYW4gZ2V0IGRhdGEgb2YgdGhlIGZ1bmN0aW9uIGJ5IHVz
aW5nIE1vZHVsZUluZm9ybWF0aW9uOjpmdW5jdGlvbnMuCisKKyAgICAgICAgKiB3YXNtL1dhc21Q
YXJzZXIuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGFyc2VyOjpzb3VyY2UgY29uc3QpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpQYXJzZXI6Omxlbmd0aCBjb25zdCk6CisgICAgICAgIChKU0M6Oldh
c206OlBhcnNlcjo6b2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGFyc2VyOjpm
YWlsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6bWFrZUkzMkluaXRFeHByKToKKyAgICAg
ICAgKiB3YXNtL1dhc21QbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6UGxhbik6
CisgICAgICAgIFdhc206OlBsYW4gc2hvdWxkIG5vdCBoYXZlIGFsbCB0aGUgc291cmNlIGFwcmlv
cmkuIFN0cmVhbWVkIGRhdGEgd2lsbCBiZSBwdW1wZWQgZnJvbSB0aGUgcHJvdmlkZXIuCisKKyAg
ICAgICAgKiB3YXNtL1dhc21QbGFuLmg6CisgICAgICAgICogd2FzbS9XYXNtU2VjdGlvblBhcnNl
ci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQ
YXJzZXIuY3BwLgorICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZVR5cGUp
OgorICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZUltcG9ydCk6CisgICAg
ICAgIChKU0M6Oldhc206OlNlY3Rpb25QYXJzZXI6OnBhcnNlRnVuY3Rpb24pOgorICAgICAgICAo
SlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZVJlc2l6YWJsZUxpbWl0cyk6CisgICAgICAg
IChKU0M6Oldhc206OlNlY3Rpb25QYXJzZXI6OnBhcnNlVGFibGVIZWxwZXIpOgorICAgICAgICAo
SlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZVRhYmxlKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6U2VjdGlvblBhcnNlcjo6cGFyc2VNZW1vcnlIZWxwZXIpOgorICAgICAgICAoSlNDOjpXYXNt
OjpTZWN0aW9uUGFyc2VyOjpwYXJzZU1lbW9yeSk6CisgICAgICAgIChKU0M6Oldhc206OlNlY3Rp
b25QYXJzZXI6OnBhcnNlR2xvYmFsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNl
cjo6cGFyc2VFeHBvcnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJz
ZVN0YXJ0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VFbGVtZW50
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VDb2RlKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VJbml0RXhwcik6CisgICAgICAgIChK
U0M6Oldhc206OlNlY3Rpb25QYXJzZXI6OnBhcnNlR2xvYmFsVHlwZSk6CisgICAgICAgIChKU0M6
Oldhc206OlNlY3Rpb25QYXJzZXI6OnBhcnNlRGF0YSk6CisgICAgICAgIChKU0M6Oldhc206OlNl
Y3Rpb25QYXJzZXI6OnBhcnNlQ3VzdG9tKToKKyAgICAgICAgKiB3YXNtL1dhc21TZWN0aW9uUGFy
c2VyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQ
YXJzZXIuaC4KKyAgICAgICAgU2VjdGlvblBhcnNlciBpcyBleHRyYWN0ZWQgZnJvbSBNb2R1bGVQ
YXJzZXIuIEFuZCBpdCBpcyB1c2VkIGJvdGggdGhlIG9sZCAoY3VycmVudGx5IHdvcmtpbmcpIE1v
ZHVsZVBhcnNlcgorICAgICAgICBhbmQgdGhlIG5ldyBTdHJlYW1pbmdQYXJzZXIuCisKKyAgICAg
ICAgKiB3YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
V2FzbTo6cGFyc2VVSW50Nyk6CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6
ZmFpbCk6CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6U3RyZWFtaW5nUGFy
c2VyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U3RyZWFtaW5nUGFyc2VyOjpwYXJzZU1vZHVsZUhl
YWRlcik6CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6cGFyc2VTZWN0aW9u
SGVhZGVyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U3RyZWFtaW5nUGFyc2VyOjpwYXJzZVNlY3Rp
b25TaXplKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U3RyZWFtaW5nUGFyc2VyOjpwYXJzZUNvZGVT
ZWN0aW9uU2l6ZSk6CisgICAgICAgIENvZGUgc2VjdGlvbiBpbiBXYXNtIGJpbmFyeSBpcyBzcGVj
aWFsbHkgaGFuZGxlZCBjb21wYXJlZCB3aXRoIHRoZSBvdGhlciBzZWN0aW9ucyBzaW5jZSBpdCBp
bmNsdWRlcworICAgICAgICBidW5jaCBvZiBmdW5jdGlvbnMuIFN0cmVhbWluZ1BhcnNlciBleHRy
YWN0cyBlYWNoIGZ1bmN0aW9uIGluIGEgc3RyZWFtaW5nIGZhc2hpb24gYW5kIGVuYWJsZSBzdHJl
YW1pbmcKKyAgICAgICAgdmFsaWRhdGlvbiAvIGNvbXBpbGF0aW9uIG9mIFdhc20gZnVuY3Rpb25z
LgorCisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6cGFyc2VGdW5jdGlvbkhl
YWRlcik6CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6cGFyc2VGdW5jdGlv
bkJvZHkpOgorICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OnBhcnNlU2VjdGlv
bkJvZHkpOgorICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmNvbnN1bWUpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmNvbnN1bWVWYXJVSW50MzIpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6U3RyZWFtaW5nUGFyc2VyOjpmYWlsT25TdGF0ZSk6CisgICAgICAgIChKU0M6
Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6ZmluYWxpemUpOgorICAgICAgICAqIHdhc20vV2FzbVN0
cmVhbWluZ1BhcnNlci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6U3RyZWFtaW5nUGFy
c2VyOjphZGRCeXRlcyk6CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6ZXJy
b3JNZXNzYWdlIGNvbnN0KToKKyAgICAgICAgVGhpcyBpcyBvdXIgbmV3IFN0cmVhbWluZ1BhcnNl
ciBpbXBsZW1lbnRhdGlvbi4gU3RyZWFtaW5nUGFyc2VyOjpjb25zdW1lWFhYIGZ1bmN0aW9ucyBn
ZXQgZGF0YSwgYW5kCisgICAgICAgIFN0cmVhbWluZ1BhcnNlcjo6cGFyc2VYWFggZnVuY3Rpb25z
IHBhcnNlIGNvbnN1bWVkIGRhdGEuIFRoZSB1c2VyIG9mIFN0cmVhbWluZ1BhcnNlciBjYWxscwor
ICAgICAgICBTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKCkgdG8gcHVtcCB0aGUgYnl0ZXMgc3Ry
ZWFtIGludG8gdGhlIHBhcnNlci4gQW5kIG9uY2UgYWxsIHRoZSBkYXRhIGlzIHB1bXBlZCwKKyAg
ICAgICAgdGhlIHVzZXIgY2FsbHMgU3RyZWFtaW5nUGFyc2VyOjpmaW5hbGl6ZS4gU3RyZWFtaW5n
UGFyc2VyIGlzIGEgc3RhdGUgbWFjaGluZSB3aGljaCBmZWVkcyB0aGUgaW5jb21pbmcKKyAgICAg
ICAgYnl0ZSBzdHJlYW0uCisKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUu
Y3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpzb3VyY2UgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICBBbGwgdGhlIHNvdXJjZSBzaG91bGQgbm90IGJlIGhlbGQuCisKKyAg
ICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaDoKKyAgICAgICAgKiB3YXNtL2pz
L1dlYkFzc2VtYmx5UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlWYWxp
ZGF0ZUZ1bmMpOgorCiAyMDE4LTA4LTI0ICBZdXN1a2UgU3V6dWtpICA8eXVzdWtlc3V6dWtpQHNs
b3dzdGFydC5vcmc+CiAKICAgICAgICAgW0pTQ10gQXJyYXkucHJvdG90eXBlLnJldmVyc2UgbW9k
aWZpZXMgSlNJbW11dGFibGVCdXR0ZXJmbHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdl
TG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggYzJmMWVmYTE5ZmE1ODQ0NmI4MGQ2MjQ0
YmRiZDk1YWVkOTFiYWNhNS4uNWJhZjA1M2RiMGRkZjczNjgwYmM1YzZiMjk3NWU2ZDY1OTlkZGEx
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxOC0wOC0yNyAgWXVzdWtlIFN1enVraSAgPHl1c3Vr
ZXN1enVraUBzbG93c3RhcnQub3JnPgorCisgICAgICAgIFtXZWJBc3NlbWJseV0gUGFyc2Ugd2Fz
bSBtb2R1bGVzIGluIGEgc3RyZWFtaW5nIGZhc2hpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4ODk0MworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBtYXhCeXRlTGVuZ3RoIGZ1bmN0aW9uIHRvIGdl
dCB0aGUgbWF4aW11bSBzaXplIGZvciBULgorCisgICAgICAgICogd3RmL0xFQkRlY29kZXIuaDoK
KyAgICAgICAgKFdURjo6TEVCRGVjb2Rlcjo6bWF4Qnl0ZUxlbmd0aCk6CisgICAgICAgIChXVEY6
OkxFQkRlY29kZXI6OmRlY29kZVVJbnQpOgorICAgICAgICAoV1RGOjpMRUJEZWNvZGVyOjpkZWNv
ZGVJbnQpOgorCiAyMDE4LTA4LTI1ICBZdXN1a2UgU3V6dWtpICA8eXVzdWtlc3V6dWtpQHNsb3dz
dGFydC5vcmc+CiAKICAgICAgICAgU2hyaW5rIHNpemUgb2YgWE1MSHR0cFJlcXVlc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMTdhNDhiZGE2ZDRiZTM5N2IwOGU5NDZjYmQ0ODYx
MDY3NDc5OWRhZS4uNDI2ZDE5ZGNlOTU0ODJlODUxYmZlOWM5Mzg3ZDJjZjYzM2Y1NWQ0OCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE3MzQsNiArMTczNCw4IEBACiAJCUUzOTNB
REQ4MUZFNzAyRDAwMDIyRDY4MSAvKiBXZWFrTWFwSW1wbElubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzOTNBREQ3MUZFNzAyQ0MwMDIyRDY4
MSAvKiBXZWFrTWFwSW1wbElubGluZXMuaCAqLzsgfTsKIAkJRTM5RDQ1RjUxRDM5MDA1NjAwQjNC
Mzc3IC8qIEludGVycHJldGVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTM5RDlEODQxRDM5MDAwNjAwNjY3MjgyIC8qIEludGVycHJldGVy
SW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUUzOURBNEE3MUI3RThCN0MwMDg0RjMzQSAvKiBKU01vZHVsZVJlY29yZC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM5REE0QTUxQjdFOEI3QzAw
ODRGMzNBIC8qIEpTTW9kdWxlUmVjb3JkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJRTNBMDUzMUEyMTM0MkI2ODAwMjJFQzE0IC8qIFdhc21TdHJl
YW1pbmdQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUzQTA1MzE2MjEzNDJCNjYwMDIyRUMxNCAvKiBXYXNtU3RyZWFtaW5nUGFyc2VyLmggKi87
IH07CisJCUUzQTA1MzFDMjEzNDJCNjgwMDIyRUMxNCAvKiBXYXNtU2VjdGlvblBhcnNlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTNBMDUzMTgyMTM0
MkI2NzAwMjJFQzE0IC8qIFdhc21TZWN0aW9uUGFyc2VyLmggKi87IH07CiAJCUUzQTMyQkM3MUZD
ODMxNDcwMDdEN0U3NiAvKiBXZWFrTWFwSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTNBMzJCQzYxRkM4MzEyRTAwN0Q3RTc2IC8qIFdlYWtNYXBJ
bXBsLmggKi87IH07CiAJCUUzQTQyMTQzMUQ2RjU4OTMwMDA3QzYxNyAvKiBQcmVjaXNlSnVtcFRh
cmdldHNJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFM0E0MjE0MjFENkY1ODhGMDAwN0M2MTcgLyogUHJlY2lzZUp1bXBUYXJnZXRzSW5saW5l
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUz
QkZEMEJDMURBRjgwOEUwMDY1REVBMiAvKiBBY2Nlc3NDYXNlU25pcHBldFBhcmFtcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTNCRkQwQkExREFGODA3
QzAwNjVERUEyIC8qIEFjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmggKi87IH07CkBAIC00NjIyLDYg
KzQ2MjQsMTAgQEAKIAkJRTM5RDlEODQxRDM5MDAwNjAwNjY3MjgyIC8qIEludGVycHJldGVySW5s
aW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlcnByZXRlcklubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM5REE0QTQxQjdFOEI3QzAwODRG
MzNBIC8qIEpTTW9kdWxlUmVjb3JkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTTW9kdWxlUmVjb3JkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTM5REE0QTUxQjdFOEI3QzAwODRGMzNBIC8qIEpTTW9kdWxlUmVjb3JkLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTW9kdWxlUmVjb3JkLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUUzQTA1MzE2MjEzNDJCNjYwMDIyRUMxNCAvKiBXYXNtU3RyZWFtaW5nUGFy
c2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21TdHJlYW1pbmdQYXJz
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTNBMDUzMTcyMTM0MkI2NjAwMjJF
QzE0IC8qIFdhc21TZWN0aW9uUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdhc21TZWN0aW9uUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRTNBMDUzMTgyMTM0MkI2NzAwMjJFQzE0IC8qIFdhc21TZWN0aW9uUGFyc2VyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21TZWN0aW9uUGFyc2VyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzQTA1MzE5MjEzNDJCNjcwMDIyRUMxNCAvKiBXYXNt
U3RyZWFtaW5nUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdhc21TdHJlYW1pbmdQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
M0EzMkJDNTFGQzgzMTJEMDA3RDdFNzYgLyogV2Vha01hcEltcGwuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Vha01hcEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFM0EzMkJDNjFGQzgzMTJFMDA3RDdFNzYgLyogV2Vha01hcEltcGwuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vha01hcEltcGwuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTNBNDIxNDIxRDZGNTg4RjAwMDdDNjE3IC8qIFByZWNpc2VK
dW1wVGFyZ2V0c0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJl
Y2lzZUp1bXBUYXJnZXRzSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
NjM0OCw5ICs2MzU0LDEzIEBACiAJCQkJNTNGNDBFOEMxRDU5MDFGMjAwOTlBMUI2IC8qIFdhc21Q
YXJzZXIuaCAqLywKIAkJCQk1MzEzNzRCRTFENUNFOTUwMDBBRjdBMEIgLyogV2FzbVBsYW4uY3Bw
ICovLAogCQkJCTUzMTM3NEJDMUQ1Q0U2NzYwMEFGN0EwQiAvKiBXYXNtUGxhbi5oICovLAorCQkJ
CUUzQTA1MzE3MjEzNDJCNjYwMDIyRUMxNCAvKiBXYXNtU2VjdGlvblBhcnNlci5jcHAgKi8sCisJ
CQkJRTNBMDUzMTgyMTM0MkI2NzAwMjJFQzE0IC8qIFdhc21TZWN0aW9uUGFyc2VyLmggKi8sCiAJ
CQkJNTNGNDBFODQxRDU4Rjk3NzAwOTlBMUI2IC8qIFdhc21TZWN0aW9ucy5oICovLAogCQkJCUFE
NzQzOEJFMUUwNDU3OTIwMEZEMEMyQSAvKiBXYXNtU2lnbmF0dXJlLmNwcCAqLywKIAkJCQlBRDc0
MzhCRjFFMDQ1NzkyMDBGRDBDMkEgLyogV2FzbVNpZ25hdHVyZS5oICovLAorCQkJCUUzQTA1MzE5
MjEzNDJCNjcwMDIyRUMxNCAvKiBXYXNtU3RyZWFtaW5nUGFyc2VyLmNwcCAqLywKKwkJCQlFM0Ew
NTMxNjIxMzQyQjY2MDAyMkVDMTQgLyogV2FzbVN0cmVhbWluZ1BhcnNlci5oICovLAogCQkJCUFE
NUMzNkUzMUY2OUVDOEIwMDBCQ0FBRiAvKiBXYXNtVGFibGUuY3BwICovLAogCQkJCUFENUMzNkU0
MUY2OUVDOEIwMDBCQ0FBRiAvKiBXYXNtVGFibGUuaCAqLywKIAkJCQk1MjUwRDJDRjFFOERBMDVB
MDAyOUE5MzIgLyogV2FzbVRodW5rcy5jcHAgKi8sCkBAIC04NDQ4LDcgKzg0NTgsNiBAQAogCQkJ
CUMyRkNBRTEzMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNjY2RUMwMTgzNTY2RjkwMEQwMTdGMSAvKiBCeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzI4REFFQjFEMzhE
MDA1MDAxQTI1MjkgLyogQnl0ZWNvZGVSZXdyaXRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRkVB
M0JCQUMyMTJDOTdDQjAwRTkzQUQxIC8qIERGR0NGRy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjUx
NEYyMTkxOEIzRTE2NzAwOThGRjhCIC8qIEJ5dGVjb2Rlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY4ODVFMTExODQ5QTNCRTAwRjFFM0ZBIC8qIEJ5dGVjb2RlVXNlRGVmLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjgwMjNFQTE2MTM4MzJCMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggaW4gSGVhZGVy
cyAqLywKQEAgLTg1ODEsNiArODU5MCw3IEBACiAJCQkJMEZCREI5QUQxQUIwRkJDNjAwMEI1N0U1
IC8qIERGR0NhbGxDcmVhdGVEaXJlY3RBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY3QjI5NEIxNEMzQ0QyRjAwN0MzREIxIC8qIERGR0NhcGFiaWxpdGll
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5NTgxNEVGOTBBMjAwQzcyNTMyIC8qIERGR0NG
QVBoYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRUEzQkJBQzIxMkM5N0NCMDBFOTNBRDEgLyog
REZHQ0ZHLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjNCM0EyODE1NDRDOTk3MDAzRUQwRkYgLyog
REZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RDM2OTUx
QUU5Q0MzMzAwMEQ0REZCIC8qIERGR0NsZWFuVXBQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTc3QTQyNDAxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Nsb2JiZXJpemUuaCBpbiBIZWFkZXJzICov
LApAQCAtOTYwNyw4ICs5NjE3LDEwIEBACiAJCQkJNzlCNzU5NzYxREZBNEM2MDAwNTIxNzRDIC8q
IFdhc21QYWdlQ291bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzRjQwRThEMUQ1OTAxRjIwMDk5
QTFCNiAvKiBXYXNtUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzEzNzRCRDFENUNFNjc2
MDBBRjdBMEIgLyogV2FzbVBsYW4uaCBpbiBIZWFkZXJzICovLAorCQkJCUUzQTA1MzFDMjEzNDJC
NjgwMDIyRUMxNCAvKiBXYXNtU2VjdGlvblBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTNG
NDBFODUxRDU4Rjk3NzAwOTlBMUI2IC8qIFdhc21TZWN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQUQ3NDM4QzAxRTA0NTdBNDAwRkQwQzJBIC8qIFdhc21TaWduYXR1cmUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUUzQTA1MzFBMjEzNDJCNjgwMDIyRUMxNCAvKiBXYXNtU3RyZWFtaW5nUGFyc2Vy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDVDMzZFNjFGNjlFQzkxMDAwQkNBQUYgLyogV2FzbVRh
YmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MjUwRDJEMjFFOERBMDVBMDAyOUE5MzIgLyogV2Fz
bVRodW5rcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTNFOUUwQUYxRUFFQzQ1NzAwRkVFMjUxIC8q
IFdhc21UaWVyVXBDb3VudC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50
eHQKaW5kZXggODk3Njk4YzZlMDU5YWUxZDI2MjEzMWFjNTIwNDAwZTMxNzhlZGNjNS4uMDRkNDhl
ODViNTBmYjgzZmIxMjUwNWZlZTE0YTg1MzU5Y2MxZTMwOSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3Vy
Y2VzLnR4dApAQCAtOTkyLDcgKzk5Miw5IEBAIHdhc20vV2FzbU9NR1BsYW4uY3BwCiB3YXNtL1dh
c21PcGNvZGVPcmlnaW4uY3BwCiB3YXNtL1dhc21QYWdlQ291bnQuY3BwCiB3YXNtL1dhc21QbGFu
LmNwcAord2FzbS9XYXNtU2VjdGlvblBhcnNlci5jcHAKIHdhc20vV2FzbVNpZ25hdHVyZS5jcHAK
K3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAKIHdhc20vV2FzbVRhYmxlLmNwcAogd2FzbS9X
YXNtVGFibGUuaAogd2FzbS9XYXNtVGh1bmtzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rv
b2xzL0pTRG9sbGFyVk0uY3BwCmluZGV4IGViNTdjNzg0Yzk4MTgwNDYyZDRhOGU0M2M4NmI1MGJh
YWFlODQ5M2IuLmVmMjU1NzI0YmM2YTExMjAwMTZiN2YyMmY5NjlkYmZmZDljYWUyM2YgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAKQEAgLTUxLDYgKzUxLDEx
IEBACiAjaW5jbHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmlu
dFN0cmVhbS5oPgogCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorI2luY2x1ZGUgIkpTV2ViQXNz
ZW1ibHlIZWxwZXJzLmgiCisjaW5jbHVkZSAiV2FzbVN0cmVhbWluZ1BhcnNlci5oIgorI2VuZGlm
CisKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCkBAIC0xMDkz
LDYgKzEwOTgsODAgQEAgdm9pZCBFbGVtZW50OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFJvb3Qq
IHJvb3QpCiAgICAgbV9yb290LT5zZXRFbGVtZW50KHRoaXMpOwogfQogCisjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bldhc21TdHJlYW1pbmdQYXJzZXJBZGRCeXRlcyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uV2FzbVN0cmVhbWluZ1BhcnNlckZpbmFsaXpl
KEV4ZWNTdGF0ZSopOworCitjbGFzcyBXYXNtU3RyZWFtaW5nUGFyc2VyIDogcHVibGljIEpTRGVz
dHJ1Y3RpYmxlT2JqZWN0IHsKK3B1YmxpYzoKKyAgICBXYXNtU3RyZWFtaW5nUGFyc2VyKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQor
ICAgICAgICAsIG1faW5mbyhXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbjo6Y3JlYXRlKCkpCisgICAg
ICAgICwgbV9zdHJlYW1pbmdQYXJzZXIobV9pbmZvLmdldCgpKQorICAgIHsKKyAgICB9CisKKyAg
ICB1c2luZyBCYXNlID0gSlNEZXN0cnVjdGlibGVPYmplY3Q7CisKKyAgICBzdGF0aWMgV2FzbVN0
cmVhbWluZ1BhcnNlciogY3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKKyAgICB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY3JlYXRlU3RydWN0dXJl
KHZtLCBnbG9iYWxPYmplY3QsIGpzTnVsbCgpKTsKKyAgICAgICAgV2FzbVN0cmVhbWluZ1BhcnNl
ciogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2FzbVN0cmVhbWluZ1BhcnNl
cj4odm0uaGVhcCwgc2l6ZW9mKFdhc21TdHJlYW1pbmdQYXJzZXIpKSkgV2FzbVN0cmVhbWluZ1Bh
cnNlcih2bSwgc3RydWN0dXJlKTsKKyAgICAgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAgV2FzbTo6U3RyZWFtaW5nUGFyc2VyJiBz
dHJlYW1pbmdQYXJzZXIoKSB7IHJldHVybiBtX3N0cmVhbWluZ1BhcnNlcjsgfQorCisgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0pCisgICAgeworICAgICAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbih2bSk7CisKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRoaXMt
Pmdsb2JhbE9iamVjdCh2bSk7CisgICAgICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCBn
bG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiYWRkQnl0ZXMiKSwgMCwg
ZnVuY3Rpb25XYXNtU3RyZWFtaW5nUGFyc2VyQWRkQnl0ZXMsIE5vSW50cmluc2ljLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgICAgIHB1
dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnZtLCAiZmluYWxpemUiKSwgMCwgZnVuY3Rpb25XYXNtU3RyZWFtaW5nUGFyc2VyRmlu
YWxpemUsIE5vSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtKSk7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworCisgICAgUmVmPFdh
c206Ok1vZHVsZUluZm9ybWF0aW9uPiBtX2luZm87CisgICAgV2FzbTo6U3RyZWFtaW5nUGFyc2Vy
IG1fc3RyZWFtaW5nUGFyc2VyOworfTsKKworY29uc3QgQ2xhc3NJbmZvIFdhc21TdHJlYW1pbmdQ
YXJzZXI6OnNfaW5mbyA9IHsgIldhc21TdHJlYW1pbmdQYXJzZXIiLCAmQmFzZTo6c19pbmZvLCBu
dWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFdhc21TdHJlYW1pbmdQYXJzZXIp
IH07CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25XYXNtU3RyZWFtaW5n
UGFyc2VyQWRkQnl0ZXMoRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZXhlYy0+dm0oKSk7Cisg
ICAgYXV0byogdGhpc09iamVjdCA9IGpzRHluYW1pY0Nhc3Q8V2FzbVN0cmVhbWluZ1BhcnNlcio+
KHZtLCBleGVjLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCF0aGlzT2JqZWN0KSB7CisgICAgICAg
IHNjb3BlLnJlbGVhc2UoKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4oZmFsc2UpKTsKKyAgICB9CisgICAgYXV0byBkYXRhID0gZ2V0V2FzbUJ1ZmZlckZyb21WYWx1
ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgc2NvcGUucmVsZWFzZSgpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50MzJfdD4odGhpc09iamVjdC0+
c3RyZWFtaW5nUGFyc2VyKCkuYWRkQnl0ZXMoYml0d2lzZV9jYXN0PGNvbnN0IHVpbnQ4X3QqPihk
YXRhLmZpcnN0KSwgZGF0YS5zZWNvbmQpKSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uV2FzbVN0cmVhbWluZ1BhcnNlckZpbmFsaXplKEV4ZWNTdGF0ZSogZXhl
YykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBq
c0R5bmFtaWNDYXN0PFdhc21TdHJlYW1pbmdQYXJzZXIqPih2bSwgZXhlYy0+dGhpc1ZhbHVlKCkp
OworICAgIGlmICghdGhpc09iamVjdCkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c0Jvb2xlYW4oZmFsc2UpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHN0
YXRpY19jYXN0PGludDMyX3Q+KHRoaXNPYmplY3QtPnN0cmVhbWluZ1BhcnNlcigpLmZpbmFsaXpl
KCkpKSk7Cit9CisKKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZQogCiBuYW1lc3BhY2UgSlNDIHsK
QEAgLTE2NDAsNiArMTcxOSwxNSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvbkNyZWF0ZURPTUpJVEdldHRlckJhc2VKU09iamVjdChFeGVjUwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAorI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
K3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlV2FzbVN0
cmVhbWluZ1BhcnNlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShXYXNtU3RyZWFtaW5nUGFyc2VyOjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSkpOworfQorI2VuZGlmCisKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uU2V0SW1wdXJlR2V0dGVyRGVsZWdhdGUoRXhlY1N0YXRlKiBleGVjKQogewogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CkBAIC0yMDQwLDYgKzIxMjgsOSBAQCB2b2lkIEpTRG9sbGFy
Vk06OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICBhZGRGdW5jdGlvbih2bSwgImNyZWF0ZURP
TUpJVENoZWNrU3ViQ2xhc3NPYmplY3QiLCBmdW5jdGlvbkNyZWF0ZURPTUpJVENoZWNrU3ViQ2xh
c3NPYmplY3QsIDApOwogICAgIGFkZEZ1bmN0aW9uKHZtLCAiY3JlYXRlRE9NSklUR2V0dGVyQmFz
ZUpTT2JqZWN0IiwgZnVuY3Rpb25DcmVhdGVET01KSVRHZXR0ZXJCYXNlSlNPYmplY3QsIDApOwog
ICAgIGFkZEZ1bmN0aW9uKHZtLCAiY3JlYXRlQnVpbHRpbiIsIGZ1bmN0aW9uQ3JlYXRlQnVpbHRp
biwgMik7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIGFkZEZ1bmN0aW9uKHZtLCAiY3Jl
YXRlV2FzbVN0cmVhbWluZ1BhcnNlciIsIGZ1bmN0aW9uQ3JlYXRlV2FzbVN0cmVhbWluZ1BhcnNl
ciwgMCk7CisjZW5kaWYKICAgICBhZGRGdW5jdGlvbih2bSwgImdldFByaXZhdGVQcm9wZXJ0eSIs
IGZ1bmN0aW9uR2V0UHJpdmF0ZVByb3BlcnR5LCAyKTsKICAgICBhZGRGdW5jdGlvbih2bSwgInNl
dEltcHVyZUdldHRlckRlbGVnYXRlIiwgZnVuY3Rpb25TZXRJbXB1cmVHZXR0ZXJEZWxlZ2F0ZSwg
Mik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFu
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAppbmRleCBm
NjcyNjg2ZDNmOTlhMGQwZDJlOWMzMjFmMjdiYzBhMWNiZjViMmRkLi40M2M4ZjU2MmFmYTFjMzYz
M2E3ZTZjNjFmNDA5MjJlYzBiZTk3MjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUJCUVBsYW4uY3BwCkBAIC01OSwxMyArNTksMTUgQEAgQkJRUGxhbjo6QkJRUGxhbihDb250
ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGluZm8sIEFzeW5jV29yayB3b3Jr
LAogfQogCiBCQlFQbGFuOjpCQlFQbGFuKENvbnRleHQqIGNvbnRleHQsIFZlY3Rvcjx1aW50OF90
PiYmIHNvdXJjZSwgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFzaywgQ3JlYXRl
RW1iZWRkZXJXcmFwcGVyJiYgY3JlYXRlRW1iZWRkZXJXcmFwcGVyLCBUaHJvd1dhc21FeGNlcHRp
b24gdGhyb3dXYXNtRXhjZXB0aW9uKQotICAgIDogQkJRUGxhbihjb250ZXh0LCBhZG9wdFJlZigq
bmV3IE1vZHVsZUluZm9ybWF0aW9uKFdURk1vdmUoc291cmNlKSkpLCB3b3JrLCBXVEZNb3ZlKHRh
c2spLCBXVEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlvbikK
KyAgICA6IEJhc2UoY29udGV4dCwgTW9kdWxlSW5mb3JtYXRpb246OmNyZWF0ZSgpLCBXVEZNb3Zl
KHRhc2spLCBXVEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlv
bikKKyAgICAsIG1fc291cmNlKFdURk1vdmUoc291cmNlKSkKKyAgICAsIG1fc3RhdGUoU3RhdGU6
OkluaXRpYWwpCisgICAgLCBtX2FzeW5jV29yayh3b3JrKQogewotICAgIG1fc3RhdGUgPSBTdGF0
ZTo6SW5pdGlhbDsKIH0KIAotQkJRUGxhbjo6QkJRUGxhbihDb250ZXh0KiBjb250ZXh0LCBjb25z
dCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgsIEFzeW5jV29yayB3b3JrLCBD
b21wbGV0aW9uVGFzayYmIHRhc2spCi0gICAgOiBCYXNlKGNvbnRleHQsIHNvdXJjZSwgc291cmNl
TGVuZ3RoLCBXVEZNb3ZlKHRhc2spKQorQkJRUGxhbjo6QkJRUGxhbihDb250ZXh0KiBjb250ZXh0
LCBBc3luY1dvcmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0YXNrKQorICAgIDogQmFzZShjb250
ZXh0LCBXVEZNb3ZlKHRhc2spKQogICAgICwgbV9zdGF0ZShTdGF0ZTo6SW5pdGlhbCkKICAgICAs
IG1fYXN5bmNXb3JrKHdvcmspCiB7CkBAIC05MCw3ICs5Miw3IEBAIHZvaWQgQkJRUGxhbjo6bW92
ZVRvU3RhdGUoU3RhdGUgc3RhdGUpCiAgICAgbV9zdGF0ZSA9IHN0YXRlOwogfQogCi1ib29sIEJC
UVBsYW46OnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKQorYm9vbCBCQlFQbGFuOjpwYXJzZUFuZFZh
bGlkYXRlTW9kdWxlKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IHNvdXJjZUxlbmd0aCkK
IHsKICAgICBpZiAobV9zdGF0ZSAhPSBTdGF0ZTo6SW5pdGlhbCkKICAgICAgICAgcmV0dXJuIHRy
dWU7CkBAIC0xMDEsNyArMTAzLDcgQEAgYm9vbCBCQlFQbGFuOjpwYXJzZUFuZFZhbGlkYXRlTW9k
dWxlKCkKICAgICAgICAgc3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CiAKICAgICB7
Ci0gICAgICAgIE1vZHVsZVBhcnNlciBtb2R1bGVQYXJzZXIobV9zb3VyY2UsIG1fc291cmNlTGVu
Z3RoLCBtX21vZHVsZUluZm9ybWF0aW9uKTsKKyAgICAgICAgTW9kdWxlUGFyc2VyIG1vZHVsZVBh
cnNlcihzb3VyY2UsIHNvdXJjZUxlbmd0aCwgbV9tb2R1bGVJbmZvcm1hdGlvbik7CiAgICAgICAg
IGF1dG8gcGFyc2VSZXN1bHQgPSBtb2R1bGVQYXJzZXIucGFyc2UoKTsKICAgICAgICAgaWYgKCFw
YXJzZVJlc3VsdCkgewogICAgICAgICAgICAgQmFzZTo6ZmFpbChob2xkTG9jayhtX2xvY2spLCBX
VEZNb3ZlKHBhcnNlUmVzdWx0LmVycm9yKCkpKTsKQEAgLTEwOSwyMCArMTExLDIxIEBAIGJvb2wg
QkJRUGxhbjo6cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpCiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBjb25zdCBhdXRvJiBmdW5jdGlvbkxvY2F0aW9ucyA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1
bmN0aW9uTG9jYXRpb25JbkJpbmFyeTsKLSAgICBmb3IgKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgg
PSAwOyBmdW5jdGlvbkluZGV4IDwgZnVuY3Rpb25Mb2NhdGlvbnMuc2l6ZSgpOyArK2Z1bmN0aW9u
SW5kZXgpIHsKLSAgICAgICAgZGF0YUxvZ0xuSWYoV2FzbUJCUVBsYW5JbnRlcm5hbDo6dmVyYm9z
ZSwgIlByb2Nlc3NpbmcgZnVuY3Rpb24gc3RhcnRpbmcgYXQ6ICIsIGZ1bmN0aW9uTG9jYXRpb25z
W2Z1bmN0aW9uSW5kZXhdLnN0YXJ0LCAiIGFuZCBlbmRpbmcgYXQ6ICIsIGZ1bmN0aW9uTG9jYXRp
b25zW2Z1bmN0aW9uSW5kZXhdLmVuZCk7Ci0gICAgICAgIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9u
U3RhcnQgPSBtX3NvdXJjZSArIGZ1bmN0aW9uTG9jYXRpb25zW2Z1bmN0aW9uSW5kZXhdLnN0YXJ0
OwotICAgICAgICBzaXplX3QgZnVuY3Rpb25MZW5ndGggPSBmdW5jdGlvbkxvY2F0aW9uc1tmdW5j
dGlvbkluZGV4XS5lbmQgLSBmdW5jdGlvbkxvY2F0aW9uc1tmdW5jdGlvbkluZGV4XS5zdGFydDsK
LSAgICAgICAgQVNTRVJUKGZ1bmN0aW9uTGVuZ3RoIDw9IG1fc291cmNlTGVuZ3RoKTsKKyAgICBj
b25zdCBhdXRvJiBmdW5jdGlvbnMgPSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbnM7Cisg
ICAgZm9yICh1bnNpZ25lZCBmdW5jdGlvbkluZGV4ID0gMDsgZnVuY3Rpb25JbmRleCA8IGZ1bmN0
aW9ucy5zaXplKCk7ICsrZnVuY3Rpb25JbmRleCkgeworICAgICAgICBjb25zdCBhdXRvJiBmdW5j
dGlvbiA9IGZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XTsKKyAgICAgICAgZGF0YUxvZ0xuSWYoV2Fz
bUJCUVBsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIlByb2Nlc3NpbmcgZnVuY3Rpb24gc3RhcnRpbmcg
YXQ6ICIsIGZ1bmN0aW9uLnN0YXJ0LCAiIGFuZCBlbmRpbmcgYXQ6ICIsIGZ1bmN0aW9uLmVuZCk7
CisgICAgICAgIHNpemVfdCBmdW5jdGlvbkxlbmd0aCA9IGZ1bmN0aW9uLmVuZCAtIGZ1bmN0aW9u
LnN0YXJ0OworICAgICAgICBBU1NFUlQoZnVuY3Rpb25MZW5ndGggPD0gc291cmNlTGVuZ3RoKTsK
KyAgICAgICAgQVNTRVJUKGZ1bmN0aW9uTGVuZ3RoID09IGZ1bmN0aW9uLmRhdGEuc2l6ZSgpKTsK
ICAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0
aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tmdW5jdGlvbkluZGV4XTsKICAg
ICAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6
Z2V0KHNpZ25hdHVyZUluZGV4KTsKIAotICAgICAgICBhdXRvIHZhbGlkYXRpb25SZXN1bHQgPSB2
YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUs
IG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCkpOworICAgICAgICBhdXRvIHZhbGlkYXRpb25SZXN1
bHQgPSB2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRh
LnNpemUoKSwgc2lnbmF0dXJlLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpKTsKICAgICAgICAg
aWYgKCF2YWxpZGF0aW9uUmVzdWx0KSB7CiAgICAgICAgICAgICBpZiAoV2FzbUJCUVBsYW5JbnRl
cm5hbDo6dmVyYm9zZSkgewogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBmdW5jdGlvbkxlbmd0aDsgKytpKQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKFJhd1Bv
aW50ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZnVuY3Rpb25TdGFydFtpXSkpLCAiLCAiKTsK
KyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KGZ1bmN0aW9uLmRhdGFbaV0pKSwgIiwgIik7CiAgICAgICAgICAgICAgICAgZGF0YUxv
Z0xuKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBCYXNlOjpmYWlsKGhvbGRMb2NrKG1f
bG9jayksIG1ha2VTdHJpbmcodmFsaWRhdGlvblJlc3VsdC5lcnJvcigpLCAiLCBpbiBmdW5jdGlv
biBhdCBpbmRleCAiLCBTdHJpbmc6Om51bWJlcihmdW5jdGlvbkluZGV4KSkpOyAvLyBGSVhNRSBt
YWtlIHRoaXMgYW4gRXhwZWN0ZWQuCkBAIC0xNTYsMTggKzE1OSwxOCBAQCB2b2lkIEJCUVBsYW46
OnByZXBhcmUoKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9OwogCi0gICAgY29uc3QgYXV0
byYgZnVuY3Rpb25Mb2NhdGlvbnMgPSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbkxvY2F0
aW9uSW5CaW5hcnk7CisgICAgY29uc3QgYXV0byYgZnVuY3Rpb25zID0gbV9tb2R1bGVJbmZvcm1h
dGlvbi0+ZnVuY3Rpb25zOwogICAgIGlmICghdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fd2FzbVRvV2Fz
bUV4aXRTdHVicywgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJ
bmRpY2VzLnNpemUoKSwgIiBXZWJBc3NlbWJseSB0byBKYXZhU2NyaXB0IHN0dWJzIikKLSAgICAg
ICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5j
dGlvbkxvY2F0aW9ucy5zaXplKCksICIgdW5saW5rZWQgV2ViQXNzZW1ibHkgdG8gV2ViQXNzZW1i
bHkgY2FsbHMiKQotICAgICAgICB8fCAhdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fd2FzbUludGVybmFs
RnVuY3Rpb25zLCBmdW5jdGlvbkxvY2F0aW9ucy5zaXplKCksICIgV2ViQXNzZW1ibHkgZnVuY3Rp
b25zIikKLSAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX2NvbXBpbGF0aW9uQ29udGV4
dHMsIGZ1bmN0aW9uTG9jYXRpb25zLnNpemUoKSwgIiBjb21waWxhdGlvbiBjb250ZXh0cyIpCi0g
ICAgICAgIHx8ICF0cnlSZXNlcnZlQ2FwYWNpdHkobV90aWVyVXBDb3VudHMsIGZ1bmN0aW9uTG9j
YXRpb25zLnNpemUoKSwgIiB0aWVyLXVwIGNvdW50cyIpKQorICAgICAgICB8fCAhdHJ5UmVzZXJ2
ZUNhcGFjaXR5KG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9ucy5zaXplKCksICIg
dW5saW5rZWQgV2ViQXNzZW1ibHkgdG8gV2ViQXNzZW1ibHkgY2FsbHMiKQorICAgICAgICB8fCAh
dHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fd2FzbUludGVybmFsRnVuY3Rpb25zLCBmdW5jdGlvbnMuc2l6
ZSgpLCAiIFdlYkFzc2VtYmx5IGZ1bmN0aW9ucyIpCisgICAgICAgIHx8ICF0cnlSZXNlcnZlQ2Fw
YWNpdHkobV9jb21waWxhdGlvbkNvbnRleHRzLCBmdW5jdGlvbnMuc2l6ZSgpLCAiIGNvbXBpbGF0
aW9uIGNvbnRleHRzIikKKyAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX3RpZXJVcENv
dW50cywgZnVuY3Rpb25zLnNpemUoKSwgIiB0aWVyLXVwIGNvdW50cyIpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLnJlc2l6ZShmdW5jdGlvbkxvY2F0
aW9ucy5zaXplKCkpOwotICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zLnJlc2l6ZShmdW5jdGlv
bkxvY2F0aW9ucy5zaXplKCkpOwotICAgIG1fY29tcGlsYXRpb25Db250ZXh0cy5yZXNpemUoZnVu
Y3Rpb25Mb2NhdGlvbnMuc2l6ZSgpKTsKLSAgICBtX3RpZXJVcENvdW50cy5yZXNpemUoZnVuY3Rp
b25Mb2NhdGlvbnMuc2l6ZSgpKTsKKyAgICBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLnJlc2l6
ZShmdW5jdGlvbnMuc2l6ZSgpKTsKKyAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5yZXNpemUo
ZnVuY3Rpb25zLnNpemUoKSk7CisgICAgbV9jb21waWxhdGlvbkNvbnRleHRzLnJlc2l6ZShmdW5j
dGlvbnMuc2l6ZSgpKTsKKyAgICBtX3RpZXJVcENvdW50cy5yZXNpemUoZnVuY3Rpb25zLnNpemUo
KSk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGltcG9ydEluZGV4ID0gMDsgaW1wb3J0SW5kZXggPCBt
X21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRzLnNpemUoKTsgKytpbXBvcnRJbmRleCkgewogICAg
ICAgICBJbXBvcnQqIGltcG9ydCA9ICZtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRzW2ltcG9y
dEluZGV4XTsKQEAgLTI0MSw3ICsyNDQsNyBAQCB2b2lkIEJCUVBsYW46OmNvbXBpbGVGdW5jdGlv
bnMoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogICAgIFRocmVhZENvdW50SG9sZGVyIGhvbGRl
cigqdGhpcyk7CiAKICAgICBzaXplX3QgYnl0ZXNDb21waWxlZCA9IDA7Ci0gICAgY29uc3QgYXV0
byYgZnVuY3Rpb25Mb2NhdGlvbnMgPSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbkxvY2F0
aW9uSW5CaW5hcnk7CisgICAgY29uc3QgYXV0byYgZnVuY3Rpb25zID0gbV9tb2R1bGVJbmZvcm1h
dGlvbi0+ZnVuY3Rpb25zOwogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIGlmIChlZmZvcnQg
PT0gUGFydGlhbCAmJiBieXRlc0NvbXBpbGVkID49IE9wdGlvbnM6OndlYkFzc2VtYmx5UGFydGlh
bENvbXBpbGVMaW1pdCgpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjQ5LDcgKzI1Miw3IEBA
IHZvaWQgQkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQp
CiAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXg7CiAgICAgICAgIHsKICAgICAgICAgICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKLSAgICAgICAgICAgIGlmIChtX2N1cnJl
bnRJbmRleCA+PSBmdW5jdGlvbkxvY2F0aW9ucy5zaXplKCkpIHsKKyAgICAgICAgICAgIGlmICht
X2N1cnJlbnRJbmRleCA+PSBmdW5jdGlvbnMuc2l6ZSgpKSB7CiAgICAgICAgICAgICAgICAgaWYg
KGhhc1dvcmsoKSkKICAgICAgICAgICAgICAgICAgICAgbW92ZVRvU3RhdGUoU3RhdGU6OkNvbXBp
bGVkKTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0yNTgsMTggKzI2MSwxNiBAQCB2b2lk
IEJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbnMoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogICAg
ICAgICAgICAgKyttX2N1cnJlbnRJbmRleDsKICAgICAgICAgfQogCi0gICAgICAgIGNvbnN0IHVp
bnQ4X3QqIGZ1bmN0aW9uU3RhcnQgPSBtX3NvdXJjZSArIGZ1bmN0aW9uTG9jYXRpb25zW2Z1bmN0
aW9uSW5kZXhdLnN0YXJ0OwotICAgICAgICBzaXplX3QgZnVuY3Rpb25MZW5ndGggPSBmdW5jdGlv
bkxvY2F0aW9uc1tmdW5jdGlvbkluZGV4XS5lbmQgLSBmdW5jdGlvbkxvY2F0aW9uc1tmdW5jdGlv
bkluZGV4XS5zdGFydDsKLSAgICAgICAgQVNTRVJUKGZ1bmN0aW9uTGVuZ3RoIDw9IG1fc291cmNl
TGVuZ3RoKTsKKyAgICAgICAgY29uc3QgYXV0byYgZnVuY3Rpb24gPSBmdW5jdGlvbnNbZnVuY3Rp
b25JbmRleF07CiAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1
bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNbZnVuY3Rpb25J
bmRleF07CiAgICAgICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5m
b3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CiAgICAgICAgIHVuc2lnbmVkIGZ1bmN0aW9u
SW5kZXhTcGFjZSA9IG1fd2FzbVRvV2FzbUV4aXRTdHVicy5zaXplKCkgKyBmdW5jdGlvbkluZGV4
OwogICAgICAgICBBU1NFUlRfVU5VU0VEKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZv
cm1hdGlvbi0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5k
ZXhTcGFjZSkgPT0gc2lnbmF0dXJlSW5kZXgpOwotICAgICAgICBBU1NFUlQodmFsaWRhdGVGdW5j
dGlvbihmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBtX21vZHVsZUlu
Zm9ybWF0aW9uLmdldCgpKSk7CisgICAgICAgIEFTU0VSVCh2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0
aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRhLnNpemUoKSwgc2lnbmF0dXJlLCBtX21vZHVs
ZUluZm9ybWF0aW9uLmdldCgpKSk7CiAKICAgICAgICAgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxs
c1tmdW5jdGlvbkluZGV4XSA9IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPigpOwogICAg
ICAgICBUaWVyVXBDb3VudCogdGllclVwID0gT3B0aW9uczo6dXNlQkJRVGllclVwQ2hlY2tzKCkg
PyAmbV90aWVyVXBDb3VudHNbZnVuY3Rpb25JbmRleF0gOiBudWxscHRyOwotICAgICAgICBhdXRv
IHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZShtX2NvbXBpbGF0aW9uQ29u
dGV4dHNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWdu
YXR1cmUsIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG1fbW9kdWxl
SW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBmdW5j
dGlvbkluZGV4LCB0aWVyVXAsIG1fdGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICAgICAgYXV0byBw
YXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUobV9jb21waWxhdGlvbkNvbnRl
eHRzW2Z1bmN0aW9uSW5kZXhdLCBmdW5jdGlvbi5kYXRhLmRhdGEoKSwgZnVuY3Rpb24uZGF0YS5z
aXplKCksIHNpZ25hdHVyZSwgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4
XSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6OkJC
UU1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwgbV90aHJvd1dhc21FeGNlcHRpb24pOwogCiAg
ICAgICAgIGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxlUmVzdWx0KSkgewogICAgICAgICAg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwpAQCAtMjc3LDcgKzI3OCw3IEBAIHZv
aWQgQkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAg
ICAgICAgICAgICAgICAgLy8gTXVsdGlwbGUgY29tcGlsZXMgY291bGQgZmFpbCBzaW11bHRhbmVv
dXNseS4gV2UgYXJiaXRyYXJpbHkgY2hvb3NlIHRoZSBmaXJzdC4KICAgICAgICAgICAgICAgICBm
YWlsKGxvY2tlciwgbWFrZVN0cmluZyhwYXJzZUFuZENvbXBpbGVSZXN1bHQuZXJyb3IoKSwgIiwg
aW4gZnVuY3Rpb24gYXQgaW5kZXggIiwgU3RyaW5nOjpudW1iZXIoZnVuY3Rpb25JbmRleCkpKTsg
Ly8gRklYTUUgbWFrZSB0aGlzIGFuIEV4cGVjdGVkLgogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgbV9jdXJyZW50SW5kZXggPSBmdW5jdGlvbkxvY2F0aW9ucy5zaXplKCk7CisgICAgICAgICAg
ICBtX2N1cnJlbnRJbmRleCA9IGZ1bmN0aW9ucy5zaXplKCk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KIApAQCAtMjg5LDE3ICsyOTAsMTcgQEAgdm9pZCBCQlFQbGFuOjpjb21waWxl
RnVuY3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAgICAgICAgICAgIEFTU0VSVF9V
TlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CiAgICAgICAgIH0KIAotICAgICAgICBi
eXRlc0NvbXBpbGVkICs9IGZ1bmN0aW9uTGVuZ3RoOworICAgICAgICBieXRlc0NvbXBpbGVkICs9
IGZ1bmN0aW9uLmRhdGEuc2l6ZSgpOwogICAgIH0KIH0KIAogdm9pZCBCQlFQbGFuOjpjb21wbGV0
ZShjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyKQogewotICAgIEFTU0VSVChtX3N0YXRlICE9
IFN0YXRlOjpDb21waWxlZCB8fCBtX2N1cnJlbnRJbmRleCA+PSBtX21vZHVsZUluZm9ybWF0aW9u
LT5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpKTsKKyAgICBBU1NFUlQobV9zdGF0ZSAh
PSBTdGF0ZTo6Q29tcGlsZWQgfHwgbV9jdXJyZW50SW5kZXggPj0gbV9tb2R1bGVJbmZvcm1hdGlv
bi0+ZnVuY3Rpb25zLnNpemUoKSk7CiAgICAgZGF0YUxvZ0xuSWYoV2FzbUJCUVBsYW5JbnRlcm5h
bDo6dmVyYm9zZSwgIlN0YXJ0aW5nIENvbXBsZXRpb24iKTsKIAogICAgIGlmICghZmFpbGVkKCkg
JiYgbV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGlsZWQpIHsKLSAgICAgICAgZm9yICh1aW50MzJfdCBm
dW5jdGlvbkluZGV4ID0gMDsgZnVuY3Rpb25JbmRleCA8IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1
bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCk7IGZ1bmN0aW9uSW5kZXgrKykgeworICAgICAg
ICBmb3IgKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXggPSAwOyBmdW5jdGlvbkluZGV4IDwgbV9tb2R1
bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25zLnNpemUoKTsgZnVuY3Rpb25JbmRleCsrKSB7CiAgICAg
ICAgICAgICBDb21waWxhdGlvbkNvbnRleHQmIGNvbnRleHQgPSBtX2NvbXBpbGF0aW9uQ29udGV4
dHNbZnVuY3Rpb25JbmRleF07CiAgICAgICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJ
bmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRp
Y2VzW2Z1bmN0aW9uSW5kZXhdOwogICAgICAgICAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1
cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKQEAgLTM1MSw3
ICszNTIsNyBAQCB2b2lkIEJCUVBsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQog
ewogICAgIHN3aXRjaCAobV9zdGF0ZSkgewogICAgIGNhc2UgU3RhdGU6OkluaXRpYWw6Ci0gICAg
ICAgIHBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKTsKKyAgICAgICAgcGFyc2VBbmRWYWxpZGF0ZU1v
ZHVsZShtX3NvdXJjZS5kYXRhKCksIG1fc291cmNlLnNpemUoKSk7CiAgICAgICAgIGlmICghaGFz
V29yaygpKSB7CiAgICAgICAgICAgICBBU1NFUlQoaXNDb21wbGV0ZSgpKTsKICAgICAgICAgICAg
IHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQ
bGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oCmluZGV4IGQ4
ODE0NWQ3ZGRkYmQ2YjE5MTA1Nzc4MTdjZTdjYjhkYjQxMjFkMWUuLjk0MWFjNzVmNzBlNmY5MTFi
OWZiYjNkZGIxMzc4Y2NmOTY5OTQxYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CQlFQbGFuLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUJCUVBsYW4uaApAQCAtNTIsMTEgKzUyLDE0IEBAIGNsYXNzIEJCUVBsYW4gZmluYWwgOiBwdWJs
aWMgUGxhbiB7CiAgICAgLy8gTm90ZTogQ29tcGxldGlvblRhc2sgc2hvdWxkIG5vdCBob2xkIGEg
cmVmZXJlbmNlIHRvIHRoZSBQbGFuIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGEgcmVmZXJlbmNl
IGN5Y2xlLgogICAgIEJCUVBsYW4oQ29udGV4dCosIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4sIEFz
eW5jV29yaywgQ29tcGxldGlvblRhc2smJiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93
V2FzbUV4Y2VwdGlvbik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQkJRUGxhbihDb250ZXh0Kiwg
VmVjdG9yPHVpbnQ4X3Q+JiYsIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJiwgQ3JlYXRlRW1i
ZWRkZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4Y2VwdGlvbik7Ci0gICAgLy8gTm90ZTogVGhpcyBj
b25zdHJ1Y3RvciBzaG91bGQgb25seSBiZSB1c2VkIGlmIHlvdSBhcmUgbm90IGFjdHVhbGx5IGJ1
aWxkaW5nIGEgbW9kdWxlIGUuZy4gdmFsaWRhdGlvbi9mdW5jdGlvbiB0ZXN0cwotICAgIC8vIEZJ
WE1FOiBXaGVuIHdlIGdldCByaWQgb2YgZnVuY3Rpb24gdGVzdHMgd2Ugc2hvdWxkIHJlbW92ZSBB
c3luY1dvcmsgZnJvbSB0aGlzIGNvbnN0cnVjdG9yLgotICAgIEpTX0VYUE9SVF9QUklWQVRFIEJC
UVBsYW4oQ29udGV4dCosIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIEFzeW5jV29yaywgQ29tcGxl
dGlvblRhc2smJik7CisgICAgQkJRUGxhbihDb250ZXh0KiwgQXN5bmNXb3JrLCBDb21wbGV0aW9u
VGFzayYmKTsKIAotICAgIGJvb2wgcGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpOworCisgICAgYm9v
bCBwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBwYXJzZUFu
ZFZhbGlkYXRlTW9kdWxlKG1fc291cmNlLmRhdGEoKSwgbV9zb3VyY2Uuc2l6ZSgpKTsKKyAgICB9
CisgICAgYm9vbCBwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3Qp
OwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmVwYXJlKCk7CiAgICAgdm9pZCBjb21w
aWxlRnVuY3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0KTsKQEAgLTEzNiw2ICsxMzksNyBAQCBjbGFz
cyBCQlFQbGFuIGZpbmFsIDogcHVibGljIFBsYW4gewogCiAgICAgY29uc3QgY2hhciogc3RhdGVT
dHJpbmcoU3RhdGUpOwogICAgIAorICAgIFZlY3Rvcjx1aW50OF90PiBtX3NvdXJjZTsKICAgICBC
YWc8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7CiAgICAgVmVjdG9yPE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiBtX3dhc21Ub1dhc21FeGl0U3R1YnM7CiAgICAg
VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPj4gbV93YXNtSW50ZXJuYWxG
dW5jdGlvbnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9y
bWF0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKaW5kZXggMjc4
NGU5MGFmMzg0MWEwMmU1ODczMzMyY2ZmOGJiMDY0ODdlMzNkZS4uZTQzZjRlZDkzNjE2N2ZmMjkz
OGQ4MzdhMGNlMDg4ZDQzZDIwYTRlNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUZvcm1hdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21G
b3JtYXQuaApAQCAtMTQwLDkgKzE0MCwxMCBAQCBzdHJ1Y3QgR2xvYmFsIHsKICAgICB1aW50NjRf
dCBpbml0aWFsQml0c09ySW1wb3J0TnVtYmVyIHsgMCB9OwogfTsKIAotc3RydWN0IEZ1bmN0aW9u
TG9jYXRpb25JbkJpbmFyeSB7CitzdHJ1Y3QgRnVuY3Rpb25EYXRhIHsKICAgICBzaXplX3Qgc3Rh
cnQ7CiAgICAgc2l6ZV90IGVuZDsKKyAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKIH07CiAKIGNs
YXNzIEkzMkluaXRFeHByIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTW9kdWxlSW5mb3JtYXRpb24uY3BwCmluZGV4IGNiOGRiMGUwOTNmOTRjZGEzMTZkZDI0YmFm
MzllNTEyZWRhMjAzMTQuLjhhMjU0YzAwMmZiZTllZjkwY2VmMWFiZGZjNDE2OWMxZTQ2YzUzZGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1h
dGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9y
bWF0aW9uLmNwcApAQCAtMzEsMjEgKzMxLDEwIEBACiAjaW5jbHVkZSAiV2FzbU5hbWVTZWN0aW9u
LmgiCiAjaW5jbHVkZSA8d3RmL1NIQTEuaD4KIAotbmFtZXNwYWNlIHsKLUNTdHJpbmcgc2hhMShj
b25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0KQotewotICAgIFNIQTEgaGFzaDsKLSAgICBoYXNo
LmFkZEJ5dGVzKGlucHV0KTsKLSAgICByZXR1cm4gaGFzaC5jb21wdXRlSGV4RGlnZXN0KCk7Ci19
Ci19Ci0KIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKLU1vZHVsZUluZm9ybWF0
aW9uOjpNb2R1bGVJbmZvcm1hdGlvbihWZWN0b3I8dWludDhfdD4mJiBzb3VyY2VCeXRlcykKLSAg
ICA6IHNvdXJjZShXVEZNb3ZlKHNvdXJjZUJ5dGVzKSkKLSAgICAsIGhhc2goT3B0aW9uczo6dXNl
RWFnZXJXZWJBc3NlbWJseU1vZHVsZUhhc2hpbmcoKSA/IHN0ZDo6bWFrZV9vcHRpb25hbChzaGEx
KHNvdXJjZSkpIDogc3RkOjpudWxsb3B0KQotICAgICwgbmFtZVNlY3Rpb24obmV3IE5hbWVTZWN0
aW9uKGhhc2gpKQorTW9kdWxlSW5mb3JtYXRpb246Ok1vZHVsZUluZm9ybWF0aW9uKCkKKyAgICA6
IG5hbWVTZWN0aW9uKE5hbWVTZWN0aW9uOjpjcmVhdGUoKSkKIHsKIH0KIE1vZHVsZUluZm9ybWF0
aW9uOjp+TW9kdWxlSW5mb3JtYXRpb24oKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgKaW5kZXggMGJhYjU3ZTA3MGQyZWEzMzA2
MmYzNjM2NThhMjQxNWU5YmQ1MWUyZC4uZmI1ZTNhMGNkZWQ0ZTczODAyNDMwM2JlNWUwZjU2N2Fm
NTViYTAyNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVs
ZUluZm9ybWF0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVs
ZUluZm9ybWF0aW9uLmgKQEAgLTM0LDExICszNCwxNCBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBXYXNtIHsKIAogc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uIDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPE1vZHVsZUluZm9ybWF0aW9uPiB7Ci0gICAgTW9kdWxlSW5mb3JtYXRpb24o
KSA9IGRlbGV0ZTsKKyAgICBNb2R1bGVJbmZvcm1hdGlvbigpOwogICAgIE1vZHVsZUluZm9ybWF0
aW9uKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJikgPSBkZWxldGU7CiAgICAgTW9kdWxlSW5mb3Jt
YXRpb24oTW9kdWxlSW5mb3JtYXRpb24mJikgPSBkZWxldGU7CiAKLSAgICBNb2R1bGVJbmZvcm1h
dGlvbihWZWN0b3I8dWludDhfdD4mJiBzb3VyY2VCeXRlcyk7CisgICAgc3RhdGljIFJlZjxNb2R1
bGVJbmZvcm1hdGlvbj4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IE1vZHVsZUluZm9ybWF0aW9uKTsKKyAgICB9CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB+
TW9kdWxlSW5mb3JtYXRpb24oKTsKICAgICAKQEAgLTU4LDggKzYxLDggQEAgc3RydWN0IE1vZHVs
ZUluZm9ybWF0aW9uIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPE1vZHVsZUluZm9ybWF0
aW9uPiB7CiAgICAgdWludDMyX3QgaW1wb3J0RnVuY3Rpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJu
IGltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7IH0KICAgICB1aW50MzJfdCBp
bnRlcm5hbEZ1bmN0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBpbnRlcm5hbEZ1bmN0aW9uU2ln
bmF0dXJlSW5kaWNlcy5zaXplKCk7IH0KIAotICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiBzb3Vy
Y2U7Ci0gICAgY29uc3Qgc3RkOjpvcHRpb25hbDxDU3RyaW5nPiBoYXNoOworICAgIHVpbnQzMl90
IG1lbW9yeUNvdW50KCkgY29uc3QgeyByZXR1cm4gbWVtb3J5ID8gMSA6IDA7IH0KKyAgICB1aW50
MzJfdCB0YWJsZUNvdW50KCkgY29uc3QgeyByZXR1cm4gdGFibGVJbmZvcm1hdGlvbiA/IDEgOiAw
OyB9CiAKICAgICBWZWN0b3I8SW1wb3J0PiBpbXBvcnRzOwogICAgIFZlY3RvcjxTaWduYXR1cmVJ
bmRleD4gaW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzOwpAQCAtNjgsNyArNzEsNyBAQCBz
dHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TW9k
dWxlSW5mb3JtYXRpb24+IHsKIAogICAgIE1lbW9yeUluZm9ybWF0aW9uIG1lbW9yeTsKIAotICAg
IFZlY3RvcjxGdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnk+IGZ1bmN0aW9uTG9jYXRpb25JbkJpbmFy
eTsKKyAgICBWZWN0b3I8RnVuY3Rpb25EYXRhPiBmdW5jdGlvbnM7CiAKICAgICBWZWN0b3I8RXhw
b3J0PiBleHBvcnRzOwogICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IHN0YXJ0RnVuY3Rpb25J
bmRleFNwYWNlOwpAQCAtNzgsNyArODEsNyBAQCBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TW9kdWxlSW5mb3JtYXRpb24+IHsKICAgICBWZWN0
b3I8R2xvYmFsPiBnbG9iYWxzOwogICAgIHVuc2lnbmVkIGZpcnN0SW50ZXJuYWxHbG9iYWwgeyAw
IH07CiAgICAgVmVjdG9yPEN1c3RvbVNlY3Rpb24+IGN1c3RvbVNlY3Rpb25zOwotICAgIFJlZlB0
cjxOYW1lU2VjdGlvbj4gbmFtZVNlY3Rpb247CisgICAgUmVmPE5hbWVTZWN0aW9uPiBuYW1lU2Vj
dGlvbjsKIH07CiAKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Nb2R1bGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1v
ZHVsZVBhcnNlci5jcHAKaW5kZXggZjAzZTY5ODdmNGE1MDI1OTFkZjcxZGM4MTU3ODIwODA5OTYx
MzhiNC4uYThlZDhkMmU2YjE5Yzk1ZjY3MWZmY2JjNTQ3ODNkYTc0YzY1MDgwZiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKQEAgLTMyLDE4
ICszMiwxMSBAQAogI2luY2x1ZGUgIldhc21NZW1vcnlJbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUg
Ildhc21OYW1lU2VjdGlvblBhcnNlci5oIgogI2luY2x1ZGUgIldhc21PcHMuaCIKKyNpbmNsdWRl
ICJXYXNtU2VjdGlvblBhcnNlci5oIgogI2luY2x1ZGUgIldhc21TZWN0aW9ucy5oIgogCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi1BTFdBWVNfSU5MSU5FIEkzMkluaXRFeHBy
IG1ha2VJMzJJbml0RXhwcih1aW50OF90IG9wY29kZSwgdWludDMyX3QgYml0cykKLXsKLSAgICBS
RUxFQVNFX0FTU0VSVChvcGNvZGUgPT0gSTMyQ29uc3QgfHwgb3Bjb2RlID09IEdldEdsb2JhbCk7
Ci0gICAgaWYgKG9wY29kZSA9PSBJMzJDb25zdCkKLSAgICAgICAgcmV0dXJuIEkzMkluaXRFeHBy
Ojpjb25zdFZhbHVlKGJpdHMpOwotICAgIHJldHVybiBJMzJJbml0RXhwcjo6Z2xvYmFsSW1wb3J0
KGJpdHMpOwotfQotCiBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2UoKSAtPiBSZXN1bHQKIHsKICAg
ICBjb25zdCBzaXplX3QgbWluU2l6ZSA9IDg7CkBAIC03MSwxOSArNjQsMTkgQEAgYXV0byBNb2R1
bGVQYXJzZXI6OnBhcnNlKCkgLT4gUmVzdWx0CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlVmFyVUludDMyKHNlY3Rpb25MZW5ndGgpLCAiY2FuJ3QgZ2V0ICIsIHNlY3Rpb24sICIg
c2VjdGlvbidzIGxlbmd0aCIpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHNlY3Rpb25M
ZW5ndGggPiBsZW5ndGgoKSAtIG1fb2Zmc2V0LCBzZWN0aW9uLCAiIHNlY3Rpb24gb2Ygc2l6ZSAi
LCBzZWN0aW9uTGVuZ3RoLCAiIHdvdWxkIG92ZXJmbG93IE1vZHVsZSdzIHNpemUiKTsKIAotICAg
ICAgICBhdXRvIGVuZCA9IG1fb2Zmc2V0ICsgc2VjdGlvbkxlbmd0aDsKKyAgICAgICAgU2VjdGlv
blBhcnNlciBwYXJzZXIoc291cmNlKCkgKyBtX29mZnNldCwgc2VjdGlvbkxlbmd0aCwgbV9vZmZz
ZXQsIG1faW5mby5nZXQoKSk7CiAKICAgICAgICAgc3dpdGNoIChzZWN0aW9uKSB7CiAjZGVmaW5l
IFdBU01fU0VDVElPTl9QQVJTRShOQU1FLCBJRCwgREVTQ1JJUFRJT04pICAgICAgICAgICAgICAg
ICAgIFwKICAgICAgICAgY2FzZSBTZWN0aW9uOjpOQU1FOiB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlM
UyhwYXJzZSAjIyBOQU1FKCkpOyAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQVNNX0ZBSUxf
SUZfSEVMUEVSX0ZBSUxTKHBhcnNlci5wYXJzZSAjIyBOQU1FKCkpOyAgICAgICAgICAgICBcCiAg
ICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKICAgICAgICAgfQogICAgICAgICBGT1JfRUFDSF9LTk9XTl9XQVNNX1NFQ1RJ
T04oV0FTTV9TRUNUSU9OX1BBUlNFKQogI3VuZGVmIFdBU01fU0VDVElPTl9QQVJTRQogCiAgICAg
ICAgIGNhc2UgU2VjdGlvbjo6Q3VzdG9tOiB7Ci0gICAgICAgICAgICBXQVNNX0ZBSUxfSUZfSEVM
UEVSX0ZBSUxTKHBhcnNlQ3VzdG9tKHNlY3Rpb25MZW5ndGgpKTsKKyAgICAgICAgICAgIFdBU01f
RkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VyLnBhcnNlQ3VzdG9tKCkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KIApAQCAtOTMsNTM4ICs4NiwyNCBAQCBhdXRvIE1vZHVsZVBhcnNl
cjo6cGFyc2UoKSAtPiBSZXN1bHQKICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRihlbmQgIT0gbV9vZmZzZXQsICJwYXJzaW5nIGVuZGVkIGJlZm9yZSB0
aGUgZW5kIG9mICIsIHNlY3Rpb24sICIgc2VjdGlvbiIpOworICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKHBhcnNlci5sZW5ndGgoKSAhPSBwYXJzZXIub2Zmc2V0KCksICJwYXJzaW5nIGVuZGVk
IGJlZm9yZSB0aGUgZW5kIG9mICIsIHNlY3Rpb24sICIgc2VjdGlvbiIpOworCisgICAgICAgIG1f
b2Zmc2V0ICs9IHNlY3Rpb25MZW5ndGg7CiAKIAogICAgICAgICBpZiAoaXNLbm93blNlY3Rpb24o
c2VjdGlvbikpCiAgICAgICAgICAgICBwcmV2aW91c0tub3duU2VjdGlvbiA9IHNlY3Rpb247CiAg
ICAgfQogCi0gICAgcmV0dXJuIHsgfTsKLX0KLQotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlVHlw
ZSgpIC0+IFBhcnRpYWxSZXN1bHQKLXsKLSAgICB1aW50MzJfdCBjb3VudDsKLQotICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGNvdW50KSwgImNhbid0IGdldCBUeXBlIHNl
Y3Rpb24ncyBjb3VudCIpOwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoY291bnQgPiBtYXhUeXBl
cywgIlR5cGUgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgY291bnQsICIgbWF4aW11bSAi
LCBtYXhUeXBlcyk7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT51c2VkU2lnbmF0
dXJlcy50cnlSZXNlcnZlQ2FwYWNpdHkoY291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1l
bW9yeSBmb3IgVHlwZSBzZWN0aW9uJ3MgIiwgY291bnQsICIgZW50cmllcyIpOwotCi0gICAgZm9y
ICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgaW50OF90IHR5cGU7
Ci0gICAgICAgIHVpbnQzMl90IGFyZ3VtZW50Q291bnQ7Ci0gICAgICAgIFZlY3RvcjxUeXBlPiBh
cmd1bWVudFR5cGVzOwotCi0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlSW50Nyh0
eXBlKSwgImNhbid0IGdldCAiLCBpLCAidGggVHlwZSdzIHR5cGUiKTsKLSAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRih0eXBlICE9IEZ1bmMsIGksICJ0aCBUeXBlIGlzIG5vbi1GdW5jICIsIHR5
cGUpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihhcmd1bWVu
dENvdW50KSwgImNhbid0IGdldCAiLCBpLCAidGggVHlwZSdzIGFyZ3VtZW50IGNvdW50Iik7Ci0g
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoYXJndW1lbnRDb3VudCA+IG1heEZ1bmN0aW9uUGFy
YW1zLCBpLCAidGggYXJndW1lbnQgY291bnQgaXMgdG9vIGJpZyAiLCBhcmd1bWVudENvdW50LCAi
IG1heGltdW0gIiwgbWF4RnVuY3Rpb25QYXJhbXMpOwotICAgICAgICBSZWZQdHI8U2lnbmF0dXJl
PiBtYXliZVNpZ25hdHVyZSA9IFNpZ25hdHVyZTo6dHJ5Q3JlYXRlKGFyZ3VtZW50Q291bnQpOwot
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtYXliZVNpZ25hdHVyZSwgImNhbid0IGFsbG9j
YXRlIGVub3VnaCBtZW1vcnkgZm9yIFR5cGUgc2VjdGlvbidzICIsIGksICJ0aCBzaWduYXR1cmUi
KTsKLSAgICAgICAgUmVmPFNpZ25hdHVyZT4gc2lnbmF0dXJlID0gbWF5YmVTaWduYXR1cmUucmVs
ZWFzZU5vbk51bGwoKTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJndW1l
bnRDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBUeXBlIGFyZ3VtZW50VHlwZTsKLSAgICAgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFsdWVUeXBlKGFyZ3VtZW50VHlwZSksICJj
YW4ndCBnZXQgIiwgaSwgInRoIGFyZ3VtZW50IFR5cGUiKTsKLSAgICAgICAgICAgIHNpZ25hdHVy
ZS0+YXJndW1lbnQoaSkgPSBhcmd1bWVudFR5cGU7Ci0gICAgICAgIH0KLQotICAgICAgICB1aW50
OF90IHJldHVybkNvdW50OwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJ
bnQxKHJldHVybkNvdW50KSwgImNhbid0IGdldCAiLCBpLCAidGggVHlwZSdzIHJldHVybiBjb3Vu
dCIpOwotICAgICAgICBUeXBlIHJldHVyblR5cGU7Ci0gICAgICAgIGlmIChyZXR1cm5Db3VudCkg
ewotICAgICAgICAgICAgVHlwZSB2YWx1ZTsKLSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIXBhcnNlVmFsdWVUeXBlKHZhbHVlKSwgImNhbid0IGdldCAiLCBpLCAidGggVHlwZSdzIHJl
dHVybiB2YWx1ZSIpOwotICAgICAgICAgICAgcmV0dXJuVHlwZSA9IHN0YXRpY19jYXN0PFR5cGU+
KHZhbHVlKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICByZXR1cm5UeXBlID0gVHlwZTo6
Vm9pZDsKLSAgICAgICAgc2lnbmF0dXJlLT5yZXR1cm5UeXBlKCkgPSByZXR1cm5UeXBlOwotCi0g
ICAgICAgIHN0ZDo6cGFpcjxTaWduYXR1cmVJbmRleCwgUmVmPFNpZ25hdHVyZT4+IHJlc3VsdCA9
IFNpZ25hdHVyZUluZm9ybWF0aW9uOjphZG9wdChXVEZNb3ZlKHNpZ25hdHVyZSkpOwotICAgICAg
ICBtX2luZm8tPnVzZWRTaWduYXR1cmVzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKHJlc3VsdC5z
ZWNvbmQpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQotYXV0byBNb2R1bGVQYXJzZXI6
OnBhcnNlSW1wb3J0KCkgLT4gUGFydGlhbFJlc3VsdAotewotICAgIHVpbnQzMl90IGltcG9ydENv
dW50OwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGltcG9ydENvdW50
KSwgImNhbid0IGdldCBJbXBvcnQgc2VjdGlvbidzIGNvdW50Iik7Ci0gICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihpbXBvcnRDb3VudCA+IG1heEltcG9ydHMsICJJbXBvcnQgc2VjdGlvbidzIGNvdW50
IGlzIHRvbyBiaWcgIiwgaW1wb3J0Q291bnQsICIgbWF4aW11bSAiLCBtYXhJbXBvcnRzKTsKLSAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmdsb2JhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5
KGltcG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGltcG9y
dENvdW50LCAiIGdsb2JhbHMiKTsgLy8gRklYTUUgdGhpcyBvdmVyLWFsbG9jYXRlcyB3aGVuIHdl
IGZpeCB0aGUgRklYTUVzIGJlbG93LgotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+
aW1wb3J0cy50cnlSZXNlcnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUg
ZW5vdWdoIG1lbW9yeSBmb3IgIiwgaW1wb3J0Q291bnQsICIgaW1wb3J0cyIpOyAvLyBGSVhNRSB0
aGlzIG92ZXItYWxsb2NhdGVzIHdoZW4gd2UgZml4IHRoZSBGSVhNRXMgYmVsb3cuCi0gICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5pbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMu
dHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBt
ZW1vcnkgZm9yICIsIGltcG9ydENvdW50LCAiIGltcG9ydCBmdW5jdGlvbiBzaWduYXR1cmVzIik7
IC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxv
dy4KLQotICAgIGZvciAodWludDMyX3QgaW1wb3J0TnVtYmVyID0gMDsgaW1wb3J0TnVtYmVyIDwg
aW1wb3J0Q291bnQ7ICsraW1wb3J0TnVtYmVyKSB7Ci0gICAgICAgIHVpbnQzMl90IG1vZHVsZUxl
bjsKLSAgICAgICAgdWludDMyX3QgZmllbGRMZW47Ci0gICAgICAgIE5hbWUgbW9kdWxlU3RyaW5n
OwotICAgICAgICBOYW1lIGZpZWxkU3RyaW5nOwotICAgICAgICBFeHRlcm5hbEtpbmQga2luZDsK
LSAgICAgICAgdW5zaWduZWQga2luZEluZGV4IHsgMCB9OwotCi0gICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKG1vZHVsZUxlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0
TnVtYmVyLCAidGggSW1wb3J0J3MgbW9kdWxlIG5hbWUgbGVuZ3RoIik7Ci0gICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVVVEY4U3RyaW5nKG1vZHVsZVN0cmluZywgbW9kdWxlTGVu
KSwgImNhbid0IGdldCAiLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQncyBtb2R1bGUgbmFtZSBv
ZiBsZW5ndGggIiwgbW9kdWxlTGVuKTsKLQotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFw
YXJzZVZhclVJbnQzMihmaWVsZExlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGgg
SW1wb3J0J3MgZmllbGQgbmFtZSBsZW5ndGggaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICIn
Iik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVVVEY4U3RyaW5nKGZpZWxk
U3RyaW5nLCBmaWVsZExlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0
J3MgZmllbGQgbmFtZSBvZiBsZW5ndGggIiwgbW9kdWxlTGVuLCAiIGluIG1vZHVsZSAnIiwgbW9k
dWxlU3RyaW5nLCAiJyIpOwotCi0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlRXh0
ZXJuYWxLaW5kKGtpbmQpLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdz
IGtpbmQgaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0cmlu
ZywgIiciKTsKLSAgICAgICAgc3dpdGNoIChraW5kKSB7Ci0gICAgICAgIGNhc2UgRXh0ZXJuYWxL
aW5kOjpGdW5jdGlvbjogewotICAgICAgICAgICAgdWludDMyX3QgZnVuY3Rpb25TaWduYXR1cmVJ
bmRleDsKLSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGZ1
bmN0aW9uU2lnbmF0dXJlSW5kZXgpLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIElt
cG9ydCdzIGZ1bmN0aW9uIHNpZ25hdHVyZSBpbiBtb2R1bGUgJyIsIG1vZHVsZVN0cmluZywgIicg
ZmllbGQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOwotICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRihmdW5jdGlvblNpZ25hdHVyZUluZGV4ID49IG1faW5mby0+dXNlZFNpZ25hdHVyZXMuc2l6
ZSgpLCAiaW52YWxpZCBmdW5jdGlvbiBzaWduYXR1cmUgZm9yICIsIGltcG9ydE51bWJlciwgInRo
IEltcG9ydCwgIiwgZnVuY3Rpb25TaWduYXR1cmVJbmRleCwgIiBpcyBvdXQgb2YgcmFuZ2Ugb2Yg
IiwgbV9pbmZvLT51c2VkU2lnbmF0dXJlcy5zaXplKCksICIgaW4gbW9kdWxlICciLCBtb2R1bGVT
dHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0cmluZywgIiciKTsKLSAgICAgICAgICAgIGtpbmRJ
bmRleCA9IG1faW5mby0+aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsKLSAg
ICAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gU2lnbmF0dXJlSW5mb3Jt
YXRpb246OmdldChtX2luZm8tPnVzZWRTaWduYXR1cmVzW2Z1bmN0aW9uU2lnbmF0dXJlSW5kZXhd
KTsKLSAgICAgICAgICAgIG1faW5mby0+aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnVu
Y2hlY2tlZEFwcGVuZChzaWduYXR1cmVJbmRleCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIEV4dGVybmFsS2luZDo6VGFibGU6IHsKLSAgICAgICAgICAgIGJv
b2wgaXNJbXBvcnQgPSB0cnVlOwotICAgICAgICAgICAgUGFydGlhbFJlc3VsdCByZXN1bHQgPSBw
YXJzZVRhYmxlSGVscGVyKGlzSW1wb3J0KTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSghcmVz
dWx0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoV1RGTW92ZShyZXN1
bHQuZXJyb3IoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBFeHRlcm5hbEtpbmQ6Ok1lbW9yeTogewotICAgICAgICAgICAgYm9vbCBpc0ltcG9ydCA9IHRy
dWU7Ci0gICAgICAgICAgICBQYXJ0aWFsUmVzdWx0IHJlc3VsdCA9IHBhcnNlTWVtb3J5SGVscGVy
KGlzSW1wb3J0KTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoV1RGTW92ZShyZXN1bHQuZXJyb3IoKSkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6
Okdsb2JhbDogewotICAgICAgICAgICAgR2xvYmFsIGdsb2JhbDsKLSAgICAgICAgICAgIFdBU01f
RkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VHbG9iYWxUeXBlKGdsb2JhbCkpOwotICAgICAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihnbG9iYWwubXV0YWJpbGl0eSA9PSBHbG9iYWw6Ok11dGFi
bGUsICJNdXRhYmxlIEdsb2JhbHMgYXJlbid0IHN1cHBvcnRlZCIpOwotCi0gICAgICAgICAgICBr
aW5kSW5kZXggPSBtX2luZm8tPmdsb2JhbHMuc2l6ZSgpOwotICAgICAgICAgICAgbV9pbmZvLT5n
bG9iYWxzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGdsb2JhbCkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIG1faW5mby0+aW1wb3J0cy51bmNo
ZWNrZWRBcHBlbmQoeyBXVEZNb3ZlKG1vZHVsZVN0cmluZyksIFdURk1vdmUoZmllbGRTdHJpbmcp
LCBraW5kLCBraW5kSW5kZXggfSk7Ci0gICAgfQotCi0gICAgbV9pbmZvLT5maXJzdEludGVybmFs
R2xvYmFsID0gbV9pbmZvLT5nbG9iYWxzLnNpemUoKTsKLSAgICByZXR1cm4geyB9OwotfQotCi1h
dXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbigpIC0+IFBhcnRpYWxSZXN1bHQKLXsKLSAg
ICB1aW50MzJfdCBjb3VudDsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQz
Mihjb3VudCksICJjYW4ndCBnZXQgRnVuY3Rpb24gc2VjdGlvbidzIGNvdW50Iik7Ci0gICAgV0FT
TV9QQVJTRVJfRkFJTF9JRihjb3VudCA+IG1heEZ1bmN0aW9ucywgIkZ1bmN0aW9uIHNlY3Rpb24n
cyBjb3VudCBpcyB0b28gYmlnICIsIGNvdW50LCAiIG1heGltdW0gIiwgbWF4RnVuY3Rpb25zKTsK
LSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmludGVybmFsRnVuY3Rpb25TaWduYXR1
cmVJbmRpY2VzLnRyeVJlc2VydmVDYXBhY2l0eShjb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91
Z2ggbWVtb3J5IGZvciAiLCBjb3VudCwgIiBGdW5jdGlvbiBzaWduYXR1cmVzIik7Ci0gICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkudHJ5UmVz
ZXJ2ZUNhcGFjaXR5KGNvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIs
IGNvdW50LCAiRnVuY3Rpb24gbG9jYXRpb25zIik7Ci0KLSAgICBmb3IgKHVpbnQzMl90IGkgPSAw
OyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICB1aW50MzJfdCB0eXBlTnVtYmVyOwotICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMih0eXBlTnVtYmVyKSwgImNhbid0
IGdldCAiLCBpLCAidGggRnVuY3Rpb24ncyB0eXBlIG51bWJlciIpOwotICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKHR5cGVOdW1iZXIgPj0gbV9pbmZvLT51c2VkU2lnbmF0dXJlcy5zaXplKCks
IGksICJ0aCBGdW5jdGlvbiB0eXBlIG51bWJlciBpcyBpbnZhbGlkICIsIHR5cGVOdW1iZXIpOwot
Ci0gICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gU2lnbmF0dXJlSW5mb3Jt
YXRpb246OmdldChtX2luZm8tPnVzZWRTaWduYXR1cmVzW3R5cGVOdW1iZXJdKTsKLSAgICAgICAg
Ly8gVGhlIENvZGUgc2VjdGlvbiBmaXhlcyB1cCBzdGFydCBhbmQgZW5kLgotICAgICAgICBzaXpl
X3Qgc3RhcnQgPSAwOwotICAgICAgICBzaXplX3QgZW5kID0gMDsKLSAgICAgICAgbV9pbmZvLT5p
bnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy51bmNoZWNrZWRBcHBlbmQoc2lnbmF0dXJl
SW5kZXgpOwotICAgICAgICBtX2luZm8tPmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS51bmNoZWNr
ZWRBcHBlbmQoeyBzdGFydCwgZW5kIH0pOworICAgIGlmIChPcHRpb25zOjp1c2VFYWdlcldlYkFz
c2VtYmx5TW9kdWxlSGFzaGluZygpKSB7CisgICAgICAgIFNIQTEgaGFzaGVyOworICAgICAgICBo
YXNoZXIuYWRkQnl0ZXMoc291cmNlKCksIGxlbmd0aCgpKTsKKyAgICAgICAgbV9pbmZvLT5uYW1l
U2VjdGlvbi0+c2V0SGFzaChoYXNoZXIuY29tcHV0ZUhleERpZ2VzdCgpKTsKICAgICB9CiAKICAg
ICByZXR1cm4geyB9OwogfQogCi1hdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VSZXNpemFibGVMaW1p
dHModWludDMyX3QmIGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+JiBtYXhpbXVtKSAt
PiBQYXJ0aWFsUmVzdWx0Ci17Ci0gICAgQVNTRVJUKCFtYXhpbXVtKTsKLQotICAgIHVpbnQ4X3Qg
ZmxhZ3M7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MShmbGFncyksICJj
YW4ndCBwYXJzZSByZXNpemFibGUgbGltaXRzIGZsYWdzIik7Ci0gICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VWYXJVSW50MzIoaW5pdGlhbCksICJjYW4ndCBwYXJzZSByZXNpemFibGUgbGlt
aXRzIGluaXRpYWwgcGFnZSBjb3VudCIpOwotCi0gICAgaWYgKGZsYWdzKSB7Ci0gICAgICAgIHVp
bnQzMl90IG1heGltdW1JbnQ7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFy
VUludDMyKG1heGltdW1JbnQpLCAiY2FuJ3QgcGFyc2UgcmVzaXphYmxlIGxpbWl0cyBtYXhpbXVt
IHBhZ2UgY291bnQiKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbml0aWFsID4gbWF4
aW11bUludCwgInJlc2l6YWJsZSBsaW1pdHMgaGFzIGEgaW5pdGlhbCBwYWdlIGNvdW50IG9mICIs
IGluaXRpYWwsICIgd2hpY2ggaXMgZ3JlYXRlciB0aGFuIGl0cyBtYXhpbXVtICIsIG1heGltdW1J
bnQpOwotICAgICAgICBtYXhpbXVtID0gbWF4aW11bUludDsKLSAgICB9Ci0KLSAgICByZXR1cm4g
eyB9OwotfQotCi1hdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VUYWJsZUhlbHBlcihib29sIGlzSW1w
b3J0KSAtPiBQYXJ0aWFsUmVzdWx0Ci17Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX3RhYmxl
Q291bnQgPiAwLCAiQ2Fubm90IGhhdmUgbW9yZSB0aGFuIG9uZSBUYWJsZSBmb3Igbm93Iik7Ci0K
LSAgICArK21fdGFibGVDb3VudDsKLQotICAgIGludDhfdCB0eXBlOwotICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXBhcnNlSW50Nyh0eXBlKSwgImNhbid0IHBhcnNlIFRhYmxlIHR5cGUiKTsKLSAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKHR5cGUgIT0gV2FzbTo6QW55ZnVuYywgIlRhYmxlIHR5cGUg
c2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAiLCB0eXBlKTsKLQotICAgIHVpbnQzMl90IGluaXRpYWw7
Ci0gICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bTsKLSAgICBQYXJ0aWFsUmVzdWx0
IGxpbWl0cyA9IHBhcnNlUmVzaXphYmxlTGltaXRzKGluaXRpYWwsIG1heGltdW0pOwotICAgIGlm
IChVTkxJS0VMWSghbGltaXRzKSkKLSAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFdURk1v
dmUobGltaXRzLmVycm9yKCkpKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluaXRpYWwgPiBt
YXhUYWJsZUVudHJpZXMsICJUYWJsZSdzIGluaXRpYWwgcGFnZSBjb3VudCBvZiAiLCBpbml0aWFs
LCAiIGlzIHRvbyBiaWcsIG1heGltdW0gIiwgbWF4VGFibGVFbnRyaWVzKTsKLQotICAgIEFTU0VS
VCghbWF4aW11bSB8fCAqbWF4aW11bSA+PSBpbml0aWFsKTsKLQotICAgIG1faW5mby0+dGFibGVJ
bmZvcm1hdGlvbiA9IFRhYmxlSW5mb3JtYXRpb24oaW5pdGlhbCwgbWF4aW11bSwgaXNJbXBvcnQp
OwotCi0gICAgcmV0dXJuIHsgfTsKLX0KLQotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlVGFibGUo
KSAtPiBQYXJ0aWFsUmVzdWx0Ci17Ci0gICAgdWludDMyX3QgY291bnQ7Ci0gICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoY291bnQpLCAiY2FuJ3QgZ2V0IFRhYmxlJ3MgY291
bnQiKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGNvdW50ID4gMSwgIlRhYmxlIGNvdW50IG9m
ICIsIGNvdW50LCAiIGlzIGludmFsaWQsIGF0IG1vc3QgMSBpcyBhbGxvd2VkIGZvciBub3ciKTsK
LQotICAgIGlmICghY291bnQpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBib29sIGlzSW1w
b3J0ID0gZmFsc2U7Ci0gICAgUGFydGlhbFJlc3VsdCByZXN1bHQgPSBwYXJzZVRhYmxlSGVscGVy
KGlzSW1wb3J0KTsKLSAgICBpZiAoVU5MSUtFTFkoIXJlc3VsdCkpCi0gICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChXVEZNb3ZlKHJlc3VsdC5lcnJvcigpKSk7Ci0KLSAgICByZXR1cm4geyB9
OwotfQotCi1hdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VNZW1vcnlIZWxwZXIoYm9vbCBpc0ltcG9y
dCkgLT4gUGFydGlhbFJlc3VsdAotewotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9tZW1vcnlD
b3VudCwgInRoZXJlIGNhbiBhdCBtb3N0IGJlIG9uZSBNZW1vcnkgc2VjdGlvbiBmb3Igbm93Iik7
Ci0KLSAgICArK21fbWVtb3J5Q291bnQ7Ci0KLSAgICBQYWdlQ291bnQgaW5pdGlhbFBhZ2VDb3Vu
dDsKLSAgICBQYWdlQ291bnQgbWF4aW11bVBhZ2VDb3VudDsKLSAgICB7Ci0gICAgICAgIHVpbnQz
Ml90IGluaXRpYWw7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW07Ci0g
ICAgICAgIFBhcnRpYWxSZXN1bHQgbGltaXRzID0gcGFyc2VSZXNpemFibGVMaW1pdHMoaW5pdGlh
bCwgbWF4aW11bSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghbGltaXRzKSkKLSAgICAgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZChXVEZNb3ZlKGxpbWl0cy5lcnJvcigpKSk7Ci0gICAgICAg
IEFTU0VSVCghbWF4aW11bSB8fCAqbWF4aW11bSA+PSBpbml0aWFsKTsKLSAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighUGFnZUNvdW50Ojppc1ZhbGlkKGluaXRpYWwpLCAiTWVtb3J5J3MgaW5p
dGlhbCBwYWdlIGNvdW50IG9mICIsIGluaXRpYWwsICIgaXMgaW52YWxpZCIpOwotCi0gICAgICAg
IGluaXRpYWxQYWdlQ291bnQgPSBQYWdlQ291bnQoaW5pdGlhbCk7Ci0KLSAgICAgICAgaWYgKG1h
eGltdW0pIHsKLSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIVBhZ2VDb3VudDo6aXNW
YWxpZCgqbWF4aW11bSksICJNZW1vcnkncyBtYXhpbXVtIHBhZ2UgY291bnQgb2YgIiwgKm1heGlt
dW0sICIgaXMgaW52YWxpZCIpOwotICAgICAgICAgICAgbWF4aW11bVBhZ2VDb3VudCA9IFBhZ2VD
b3VudCgqbWF4aW11bSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgQVNTRVJUKGluaXRpYWxQYWdl
Q291bnQpOwotICAgIEFTU0VSVCghbWF4aW11bVBhZ2VDb3VudCB8fCBtYXhpbXVtUGFnZUNvdW50
ID49IGluaXRpYWxQYWdlQ291bnQpOwotCi0gICAgbV9pbmZvLT5tZW1vcnkgPSBNZW1vcnlJbmZv
cm1hdGlvbihpbml0aWFsUGFnZUNvdW50LCBtYXhpbXVtUGFnZUNvdW50LCBpc0ltcG9ydCk7Ci0g
ICAgcmV0dXJuIHsgfTsKLX0KLQotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlTWVtb3J5KCkgLT4g
UGFydGlhbFJlc3VsdAotewotICAgIHVpbnQ4X3QgY291bnQ7Ci0gICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VWYXJVSW50MShjb3VudCksICJjYW4ndCBwYXJzZSBNZW1vcnkgc2VjdGlvbidz
IGNvdW50Iik7Ci0KLSAgICBpZiAoIWNvdW50KQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAg
V0FTTV9QQVJTRVJfRkFJTF9JRihjb3VudCAhPSAxLCAiTWVtb3J5IHNlY3Rpb24gaGFzIG1vcmUg
dGhhbiBvbmUgbWVtb3J5LCBXZWJBc3NlbWJseSBjdXJyZW50bHkgb25seSBhbGxvd3MgemVybyBv
ciBvbmUiKTsKLQotICAgIGJvb2wgaXNJbXBvcnQgPSBmYWxzZTsKLSAgICByZXR1cm4gcGFyc2VN
ZW1vcnlIZWxwZXIoaXNJbXBvcnQpOwotfQotCi1hdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VHbG9i
YWwoKSAtPiBQYXJ0aWFsUmVzdWx0Ci17Ci0gICAgdWludDMyX3QgZ2xvYmFsQ291bnQ7Ci0gICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZ2xvYmFsQ291bnQpLCAiY2FuJ3Qg
Z2V0IEdsb2JhbCBzZWN0aW9uJ3MgY291bnQiKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGds
b2JhbENvdW50ID4gbWF4R2xvYmFscywgIkdsb2JhbCBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJp
ZyAiLCBnbG9iYWxDb3VudCwgIiBtYXhpbXVtICIsIG1heEdsb2JhbHMpOwotICAgIHNpemVfdCB0
b3RhbEJ5dGVzID0gZ2xvYmFsQ291bnQgKyBtX2luZm8tPmZpcnN0SW50ZXJuYWxHbG9iYWw7Ci0g
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRigoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHRvdGFsQnl0ZXMp
IDwgZ2xvYmFsQ291bnQpIHx8ICFtX2luZm8tPmdsb2JhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KHRv
dGFsQnl0ZXMpLCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiLCB0b3RhbEJ5dGVzLCAiIGds
b2JhbHMiKTsKLQotICAgIGZvciAodWludDMyX3QgZ2xvYmFsSW5kZXggPSAwOyBnbG9iYWxJbmRl
eCA8IGdsb2JhbENvdW50OyArK2dsb2JhbEluZGV4KSB7Ci0gICAgICAgIEdsb2JhbCBnbG9iYWw7
Ci0gICAgICAgIHVpbnQ4X3QgaW5pdE9wY29kZTsKLQotICAgICAgICBXQVNNX0ZBSUxfSUZfSEVM
UEVSX0ZBSUxTKHBhcnNlR2xvYmFsVHlwZShnbG9iYWwpKTsKLSAgICAgICAgVHlwZSB0eXBlRm9y
SW5pdE9wY29kZTsKLSAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUluaXRF
eHByKGluaXRPcGNvZGUsIGdsb2JhbC5pbml0aWFsQml0c09ySW1wb3J0TnVtYmVyLCB0eXBlRm9y
SW5pdE9wY29kZSkpOwotICAgICAgICBpZiAoaW5pdE9wY29kZSA9PSBHZXRHbG9iYWwpCi0gICAg
ICAgICAgICBnbG9iYWwuaW5pdGlhbGl6YXRpb25UeXBlID0gR2xvYmFsOjpGcm9tR2xvYmFsSW1w
b3J0OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBnbG9iYWwuaW5pdGlhbGl6YXRpb25UeXBl
ID0gR2xvYmFsOjpGcm9tRXhwcmVzc2lvbjsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0
eXBlRm9ySW5pdE9wY29kZSAhPSBnbG9iYWwudHlwZSwgIkdsb2JhbCBpbml0X2V4cHIgb3Bjb2Rl
IG9mIHR5cGUgIiwgdHlwZUZvckluaXRPcGNvZGUsICIgZG9lc24ndCBtYXRjaCBnbG9iYWwncyB0
eXBlICIsIGdsb2JhbC50eXBlKTsKLQotICAgICAgICBtX2luZm8tPmdsb2JhbHMudW5jaGVja2Vk
QXBwZW5kKFdURk1vdmUoZ2xvYmFsKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsgfTsKLX0KLQot
YXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlRXhwb3J0KCkgLT4gUGFydGlhbFJlc3VsdAotewotICAg
IHVpbnQzMl90IGV4cG9ydENvdW50OwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFy
VUludDMyKGV4cG9ydENvdW50KSwgImNhbid0IGdldCBFeHBvcnQgc2VjdGlvbidzIGNvdW50Iik7
Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRihleHBvcnRDb3VudCA+IG1heEV4cG9ydHMsICJFeHBv
cnQgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgZXhwb3J0Q291bnQsICIgbWF4aW11bSAi
LCBtYXhFeHBvcnRzKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmV4cG9ydHMu
dHJ5UmVzZXJ2ZUNhcGFjaXR5KGV4cG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBt
ZW1vcnkgZm9yICIsIGV4cG9ydENvdW50LCAiIGV4cG9ydHMiKTsKLQotICAgIEhhc2hTZXQ8U3Ry
aW5nPiBleHBvcnROYW1lczsKLSAgICBmb3IgKHVpbnQzMl90IGV4cG9ydE51bWJlciA9IDA7IGV4
cG9ydE51bWJlciA8IGV4cG9ydENvdW50OyArK2V4cG9ydE51bWJlcikgewotICAgICAgICB1aW50
MzJfdCBmaWVsZExlbjsKLSAgICAgICAgTmFtZSBmaWVsZFN0cmluZzsKLSAgICAgICAgRXh0ZXJu
YWxLaW5kIGtpbmQ7Ci0gICAgICAgIHVuc2lnbmVkIGtpbmRJbmRleDsKLQotICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihmaWVsZExlbiksICJjYW4ndCBnZXQgIiwg
ZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0J3MgZmllbGQgbmFtZSBsZW5ndGgiKTsKLSAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighY29uc3VtZVVURjhTdHJpbmcoZmllbGRTdHJpbmcsIGZpZWxk
TGVuKSwgImNhbid0IGdldCAiLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQncyBmaWVsZCBuYW1l
IG9mIGxlbmd0aCAiLCBmaWVsZExlbik7Ci0gICAgICAgIFN0cmluZyBmaWVsZE5hbWUgPSBTdHJp
bmc6OmZyb21VVEY4KGZpZWxkU3RyaW5nKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihl
eHBvcnROYW1lcy5jb250YWlucyhmaWVsZE5hbWUpLCAiZHVwbGljYXRlIGV4cG9ydDogJyIsIGZp
ZWxkU3RyaW5nLCAiJyIpOwotICAgICAgICBleHBvcnROYW1lcy5hZGQoZmllbGROYW1lKTsKLQot
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUV4dGVybmFsS2luZChraW5kKSwgImNh
bid0IGdldCAiLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQncyBraW5kLCBuYW1lZCAnIiwgZmll
bGRTdHJpbmcsICInIik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUlu
dDMyKGtpbmRJbmRleCksICJjYW4ndCBnZXQgIiwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0J3Mg
a2luZCBpbmRleCwgbmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOwotICAgICAgICBzd2l0Y2gg
KGtpbmQpIHsKLSAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6OkZ1bmN0aW9uOiB7Ci0gICAgICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGtpbmRJbmRleCA+PSBtX2luZm8tPmZ1bmN0aW9uSW5k
ZXhTcGFjZVNpemUoKSwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0IGhhcyBpbnZhbGlkIGZ1bmN0
aW9uIG51bWJlciAiLCBraW5kSW5kZXgsICIgaXQgZXhjZWVkcyB0aGUgZnVuY3Rpb24gaW5kZXgg
c3BhY2UgIiwgbV9pbmZvLT5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCksICIsIG5hbWVkICciLCBm
aWVsZFN0cmluZywgIiciKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgRXh0ZXJuYWxLaW5kOjpUYWJsZTogewotICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRihraW5kSW5kZXggPj0gbV90YWJsZUNvdW50LCAiY2FuJ3QgZXhwb3J0IFRhYmxlICIsIGtp
bmRJbmRleCwgIiB0aGVyZSBhcmUgIiwgbV90YWJsZUNvdW50LCAiIFRhYmxlcyIpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6Ok1lbW9y
eTogewotICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5tZW1vcnksICJj
YW4ndCBleHBvcnQgYSBub24tZXhpc3RlbnQgTWVtb3J5Iik7Ci0gICAgICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKGtpbmRJbmRleCwgImNhbid0IGV4cG9ydCBNZW1vcnkgIiwga2luZEluZGV4
LCAiIG9ubHkgb25lIFRhYmxlIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQiKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpHbG9iYWw6IHsK
LSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoa2luZEluZGV4ID49IG1faW5mby0+Z2xv
YmFscy5zaXplKCksIGV4cG9ydE51bWJlciwgInRoIEV4cG9ydCBoYXMgaW52YWxpZCBnbG9iYWwg
bnVtYmVyICIsIGtpbmRJbmRleCwgIiBpdCBleGNlZWRzIHRoZSBnbG9iYWxzIGNvdW50ICIsIG1f
aW5mby0+Z2xvYmFscy5zaXplKCksICIsIG5hbWVkICciLCBmaWVsZFN0cmluZywgIiciKTsKLSAg
ICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9pbmZvLT5nbG9iYWxzW2tpbmRJbmRleF0u
bXV0YWJpbGl0eSAhPSBHbG9iYWw6OkltbXV0YWJsZSwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0
IGlzbid0IGltbXV0YWJsZSwgbmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIG1faW5mby0+ZXhwb3J0
cy51bmNoZWNrZWRBcHBlbmQoeyBXVEZNb3ZlKGZpZWxkU3RyaW5nKSwga2luZCwga2luZEluZGV4
IH0pOwotICAgIH0KLQotICAgIHJldHVybiB7IH07Ci19Ci0KLWF1dG8gTW9kdWxlUGFyc2VyOjpw
YXJzZVN0YXJ0KCkgLT4gUGFydGlhbFJlc3VsdAotewotICAgIHVpbnQzMl90IHN0YXJ0RnVuY3Rp
b25JbmRleDsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihzdGFydEZ1
bmN0aW9uSW5kZXgpLCAiY2FuJ3QgZ2V0IFN0YXJ0IGluZGV4Iik7Ci0gICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihzdGFydEZ1bmN0aW9uSW5kZXggPj0gbV9pbmZvLT5mdW5jdGlvbkluZGV4U3BhY2VT
aXplKCksICJTdGFydCBpbmRleCAiLCBzdGFydEZ1bmN0aW9uSW5kZXgsICIgZXhjZWVkcyBmdW5j
dGlvbiBpbmRleCBzcGFjZSAiLCBtX2luZm8tPmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7Ci0g
ICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX2luZm8tPnNpZ25hdHVyZUluZGV4
RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXgpOwotICAgIGNvbnN0IFNp
Z25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJ
bmRleCk7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRihzaWduYXR1cmUuYXJndW1lbnRDb3VudCgp
LCAiU3RhcnQgZnVuY3Rpb24gY2FuJ3QgaGF2ZSBhcmd1bWVudHMiKTsKLSAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKHNpZ25hdHVyZS5yZXR1cm5UeXBlKCkgIT0gVm9pZCwgIlN0YXJ0IGZ1bmN0aW9u
IGNhbid0IHJldHVybiBhIHZhbHVlIik7Ci0gICAgbV9pbmZvLT5zdGFydEZ1bmN0aW9uSW5kZXhT
cGFjZSA9IHN0YXJ0RnVuY3Rpb25JbmRleDsKLSAgICByZXR1cm4geyB9OwotfQotCi1hdXRvIE1v
ZHVsZVBhcnNlcjo6cGFyc2VFbGVtZW50KCkgLT4gUGFydGlhbFJlc3VsdAotewotICAgIHVpbnQz
Ml90IGVsZW1lbnRDb3VudDsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQz
MihlbGVtZW50Q291bnQpLCAiY2FuJ3QgZ2V0IEVsZW1lbnQgc2VjdGlvbidzIGNvdW50Iik7Ci0g
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihlbGVtZW50Q291bnQgPiBtYXhUYWJsZUVudHJpZXMsICJF
bGVtZW50IHNlY3Rpb24ncyBjb3VudCBpcyB0b28gYmlnICIsIGVsZW1lbnRDb3VudCwgIiBtYXhp
bXVtICIsIG1heFRhYmxlRW50cmllcyk7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZv
LT5lbGVtZW50cy50cnlSZXNlcnZlQ2FwYWNpdHkoZWxlbWVudENvdW50KSwgImNhbid0IGFsbG9j
YXRlIG1lbW9yeSBmb3IgIiwgZWxlbWVudENvdW50LCAiIEVsZW1lbnRzIik7Ci0gICAgZm9yICh1
bnNpZ25lZCBlbGVtZW50TnVtID0gMDsgZWxlbWVudE51bSA8IGVsZW1lbnRDb3VudDsgKytlbGVt
ZW50TnVtKSB7Ci0gICAgICAgIHVpbnQzMl90IHRhYmxlSW5kZXg7Ci0gICAgICAgIHVpbnQ2NF90
IGluaXRFeHByQml0czsKLSAgICAgICAgdWludDhfdCBpbml0T3Bjb2RlOwotICAgICAgICB1aW50
MzJfdCBpbmRleENvdW50OwotCi0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFy
VUludDMyKHRhYmxlSW5kZXgpLCAiY2FuJ3QgZ2V0ICIsIGVsZW1lbnROdW0sICJ0aCBFbGVtZW50
IHRhYmxlIGluZGV4Iik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYodGFibGVJbmRleCA+
PSBtX3RhYmxlQ291bnQsICJFbGVtZW50IHNlY3Rpb24gZm9yIFRhYmxlICIsIHRhYmxlSW5kZXgs
ICIgZXhjZWVkcyBhdmFpbGFibGUgVGFibGUgIiwgbV90YWJsZUNvdW50KTsKLSAgICAgICAgVHlw
ZSBpbml0RXhwclR5cGU7Ci0gICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VJ
bml0RXhwcihpbml0T3Bjb2RlLCBpbml0RXhwckJpdHMsIGluaXRFeHByVHlwZSkpOwotICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluaXRFeHByVHlwZSAhPSBJMzIsICJFbGVtZW50IGluaXRf
ZXhwciBtdXN0IHByb2R1Y2UgYW4gaTMyIik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlVmFyVUludDMyKGluZGV4Q291bnQpLCAiY2FuJ3QgZ2V0ICIsIGVsZW1lbnROdW0sICJ0
aCBpbmRleCBjb3VudCBmb3IgRWxlbWVudCBzZWN0aW9uIik7Ci0gICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoaW5kZXhDb3VudCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4
KCksICJFbGVtZW50IHNlY3Rpb24ncyAiLCBlbGVtZW50TnVtLCAidGggaW5kZXggY291bnQgaXMg
dG9vIGJpZyAiLCBpbmRleENvdW50KTsKLQotICAgICAgICBBU1NFUlQoISFtX2luZm8tPnRhYmxl
SW5mb3JtYXRpb24pOwotCi0gICAgICAgIEVsZW1lbnQgZWxlbWVudChtYWtlSTMySW5pdEV4cHIo
aW5pdE9wY29kZSwgaW5pdEV4cHJCaXRzKSk7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IWVsZW1lbnQuZnVuY3Rpb25JbmRpY2VzLnRyeVJlc2VydmVDYXBhY2l0eShpbmRleENvdW50KSwg
ImNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgIiwgaW5kZXhDb3VudCwgIiBFbGVtZW50IGluZGlj
ZXMiKTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBpbmRleENv
dW50OyArK2luZGV4KSB7Ci0gICAgICAgICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4OwotICAg
ICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZnVuY3Rpb25JbmRl
eCksICJjYW4ndCBnZXQgRWxlbWVudCBzZWN0aW9uJ3MgIiwgZWxlbWVudE51bSwgInRoIGVsZW1l
bnQncyAiLCBpbmRleCwgInRoIGluZGV4Iik7Ci0gICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKGZ1bmN0aW9uSW5kZXggPj0gbV9pbmZvLT5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCksICJF
bGVtZW50IHNlY3Rpb24ncyAiLCBlbGVtZW50TnVtLCAidGggZWxlbWVudCdzICIsIGluZGV4LCAi
dGggaW5kZXggaXMgIiwgZnVuY3Rpb25JbmRleCwgIiB3aGljaCBleGNlZWRzIHRoZSBmdW5jdGlv
biBpbmRleCBzcGFjZSBzaXplIG9mICIsIG1faW5mby0+ZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgp
KTsKLQotICAgICAgICAgICAgZWxlbWVudC5mdW5jdGlvbkluZGljZXMudW5jaGVja2VkQXBwZW5k
KGZ1bmN0aW9uSW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9pbmZvLT5lbGVtZW50cy51
bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShlbGVtZW50KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsg
fTsKLX0KLQotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlQ29kZSgpIC0+IFBhcnRpYWxSZXN1bHQK
LXsKLSAgICB1aW50MzJfdCBjb3VudDsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZh
clVJbnQzMihjb3VudCksICJjYW4ndCBnZXQgQ29kZSBzZWN0aW9uJ3MgY291bnQiKTsKLSAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKGNvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+
OjptYXgoKSwgIkNvZGUgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgY291bnQpOwotICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoY291bnQgIT0gbV9pbmZvLT5mdW5jdGlvbkxvY2F0aW9uSW5C
aW5hcnkuc2l6ZSgpLCAiQ29kZSBzZWN0aW9uIGNvdW50ICIsIGNvdW50LCAiIGV4Y2VlZHMgdGhl
IGRlY2xhcmVkIG51bWJlciBvZiBmdW5jdGlvbnMgIiwgbV9pbmZvLT5mdW5jdGlvbkxvY2F0aW9u
SW5CaW5hcnkuc2l6ZSgpKTsKLQotICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsg
KytpKSB7Ci0gICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uU2l6ZTsKLSAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZnVuY3Rpb25TaXplKSwgImNhbid0IGdldCAiLCBp
LCAidGggQ29kZSBmdW5jdGlvbidzIHNpemUiKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RihmdW5jdGlvblNpemUgPiBsZW5ndGgoKSwgIkNvZGUgZnVuY3Rpb24ncyBzaXplICIsIGZ1bmN0
aW9uU2l6ZSwgIiBleGNlZWRzIHRoZSBtb2R1bGUncyBzaXplICIsIGxlbmd0aCgpKTsKLSAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvblNpemUgPiBsZW5ndGgoKSAtIG1fb2Zmc2V0
LCAiQ29kZSBmdW5jdGlvbidzIHNpemUgIiwgZnVuY3Rpb25TaXplLCAiIGV4Y2VlZHMgdGhlIG1v
ZHVsZSdzIHJlbWFpbmluZyBzaXplIiwgbGVuZ3RoKCkgLSBtX29mZnNldCk7Ci0gICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25TaXplID4gbWF4RnVuY3Rpb25TaXplLCAiQ29kZSBm
dW5jdGlvbidzIHNpemUgIiwgZnVuY3Rpb25TaXplLCAiIGlzIHRvbyBiaWciKTsKLQotICAgICAg
ICBtX2luZm8tPmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtpXS5zdGFydCA9IG1fb2Zmc2V0Owot
ICAgICAgICBtX2luZm8tPmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtpXS5lbmQgPSBtX29mZnNl
dCArIGZ1bmN0aW9uU2l6ZTsKLSAgICAgICAgbV9vZmZzZXQgPSBtX2luZm8tPmZ1bmN0aW9uTG9j
YXRpb25JbkJpbmFyeVtpXS5lbmQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsgfTsKLX0KLQotYXV0
byBNb2R1bGVQYXJzZXI6OnBhcnNlSW5pdEV4cHIodWludDhfdCYgb3Bjb2RlLCB1aW50NjRfdCYg
Yml0c09ySW1wb3J0TnVtYmVyLCBUeXBlJiByZXN1bHRUeXBlKSAtPiBQYXJ0aWFsUmVzdWx0Ci17
Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VVSW50OChvcGNvZGUpLCAiY2FuJ3QgZ2V0
IGluaXRfZXhwcidzIG9wY29kZSIpOwotCi0gICAgc3dpdGNoIChvcGNvZGUpIHsKLSAgICBjYXNl
IEkzMkNvbnN0OiB7Ci0gICAgICAgIGludDMyX3QgY29uc3RhbnQ7Ci0gICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIXBhcnNlVmFySW50MzIoY29uc3RhbnQpLCAiY2FuJ3QgZ2V0IGNvbnN0YW50
IHZhbHVlIGZvciBpbml0X2V4cHIncyBpMzIuY29uc3QiKTsKLSAgICAgICAgYml0c09ySW1wb3J0
TnVtYmVyID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGNvbnN0YW50KTsKLSAgICAgICAgcmVzdWx0
VHlwZSA9IEkzMjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBJNjRDb25zdDog
ewotICAgICAgICBpbnQ2NF90IGNvbnN0YW50OwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFwYXJzZVZhckludDY0KGNvbnN0YW50KSwgImNhbid0IGdldCBjb25zdGFudCB2YWx1ZSBmb3Ig
aW5pdF9leHByJ3MgaTY0LmNvbnN0Iik7Ci0gICAgICAgIGJpdHNPckltcG9ydE51bWJlciA9IGNv
bnN0YW50OwotICAgICAgICByZXN1bHRUeXBlID0gSTY0OwotICAgICAgICBicmVhazsKLSAgICB9
Ci0KLSAgICBjYXNlIEYzMkNvbnN0OiB7Ci0gICAgICAgIHVpbnQzMl90IGNvbnN0YW50OwotICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQzMihjb25zdGFudCksICJjYW4ndCBn
ZXQgY29uc3RhbnQgdmFsdWUgZm9yIGluaXRfZXhwcidzIGYzMi5jb25zdCIpOwotICAgICAgICBi
aXRzT3JJbXBvcnROdW1iZXIgPSBjb25zdGFudDsKLSAgICAgICAgcmVzdWx0VHlwZSA9IEYzMjsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBGNjRDb25zdDogewotICAgICAgICB1
aW50NjRfdCBjb25zdGFudDsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VVSW50
NjQoY29uc3RhbnQpLCAiY2FuJ3QgZ2V0IGNvbnN0YW50IHZhbHVlIGZvciBpbml0X2V4cHIncyBm
NjQuY29uc3QiKTsKLSAgICAgICAgYml0c09ySW1wb3J0TnVtYmVyID0gY29uc3RhbnQ7Ci0gICAg
ICAgIHJlc3VsdFR5cGUgPSBGNjQ7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2Ug
R2V0R2xvYmFsOiB7Ci0gICAgICAgIHVpbnQzMl90IGluZGV4OwotICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbmRleCksICJjYW4ndCBnZXQgZ2V0X2dsb2JhbCdz
IGluZGV4Iik7Ci0KLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbmRleCA+PSBtX2luZm8t
Pmdsb2JhbHMuc2l6ZSgpLCAiZ2V0X2dsb2JhbCdzIGluZGV4ICIsIGluZGV4LCAiIGV4Y2VlZHMg
dGhlIG51bWJlciBvZiBnbG9iYWxzICIsIG1faW5mby0+Z2xvYmFscy5zaXplKCkpOwotICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluZGV4ID49IG1faW5mby0+Zmlyc3RJbnRlcm5hbEdsb2Jh
bCwgImdldF9nbG9iYWwgaW1wb3J0IGtpbmQgaW5kZXggIiwgaW5kZXgsICIgZXhjZWVkcyB0aGUg
Zmlyc3QgaW50ZXJuYWwgZ2xvYmFsICIsIG1faW5mby0+Zmlyc3RJbnRlcm5hbEdsb2JhbCk7Ci0K
LSAgICAgICAgQVNTRVJUKG1faW5mby0+Z2xvYmFsc1tpbmRleF0ubXV0YWJpbGl0eSA9PSBHbG9i
YWw6OkltbXV0YWJsZSk7Ci0gICAgICAgIHJlc3VsdFR5cGUgPSBtX2luZm8tPmdsb2JhbHNbaW5k
ZXhdLnR5cGU7Ci0gICAgICAgIGJpdHNPckltcG9ydE51bWJlciA9IGluZGV4OwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KHRydWUsICJ1bmtub3duIGluaXRfZXhwciBvcGNvZGUgIiwgb3Bjb2RlKTsKLSAgICB9Ci0KLSAg
ICB1aW50OF90IGVuZE9wY29kZTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ4
KGVuZE9wY29kZSksICJjYW4ndCBnZXQgaW5pdF9leHByJ3MgZW5kIG9wY29kZSIpOwotICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoZW5kT3Bjb2RlICE9IE9wVHlwZTo6RW5kLCAiaW5pdF9leHByIHNo
b3VsZCBlbmQgd2l0aCBlbmQsIGVuZGVkIHdpdGggIiwgZW5kT3Bjb2RlKTsKLQotICAgIHJldHVy
biB7IH07Ci19Ci0KLWF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZUdsb2JhbFR5cGUoR2xvYmFsJiBn
bG9iYWwpIC0+IFBhcnRpYWxSZXN1bHQKLXsKLSAgICB1aW50OF90IG11dGFiaWxpdHk7Ci0gICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYWx1ZVR5cGUoZ2xvYmFsLnR5cGUpLCAiY2FuJ3Qg
Z2V0IEdsb2JhbCdzIHZhbHVlIHR5cGUiKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJz
ZVZhclVJbnQxKG11dGFiaWxpdHkpLCAiY2FuJ3QgZ2V0IEdsb2JhbCB0eXBlJ3MgbXV0YWJpbGl0
eSIpOwotICAgIGdsb2JhbC5tdXRhYmlsaXR5ID0gc3RhdGljX2Nhc3Q8R2xvYmFsOjpNdXRhYmls
aXR5PihtdXRhYmlsaXR5KTsKLSAgICByZXR1cm4geyB9OwotfQotCi1hdXRvIE1vZHVsZVBhcnNl
cjo6cGFyc2VEYXRhKCkgLT4gUGFydGlhbFJlc3VsdAotewotICAgIHVpbnQzMl90IHNlZ21lbnRD
b3VudDsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihzZWdtZW50Q291
bnQpLCAiY2FuJ3QgZ2V0IERhdGEgc2VjdGlvbidzIGNvdW50Iik7Ci0gICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihzZWdtZW50Q291bnQgPiBtYXhEYXRhU2VnbWVudHMsICJEYXRhIHNlY3Rpb24ncyBj
b3VudCBpcyB0b28gYmlnICIsIHNlZ21lbnRDb3VudCwgIiBtYXhpbXVtICIsIG1heERhdGFTZWdt
ZW50cyk7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5kYXRhLnRyeVJlc2VydmVD
YXBhY2l0eShzZWdtZW50Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3Ig
RGF0YSBzZWN0aW9uJ3MgIiwgc2VnbWVudENvdW50LCAiIHNlZ21lbnRzIik7Ci0KLSAgICBmb3Ig
KHVpbnQzMl90IHNlZ21lbnROdW1iZXIgPSAwOyBzZWdtZW50TnVtYmVyIDwgc2VnbWVudENvdW50
OyArK3NlZ21lbnROdW1iZXIpIHsKLSAgICAgICAgdWludDMyX3QgbWVtb3J5SW5kZXg7Ci0gICAg
ICAgIHVpbnQ2NF90IGluaXRFeHByQml0czsKLSAgICAgICAgdWludDhfdCBpbml0T3Bjb2RlOwot
ICAgICAgICB1aW50MzJfdCBkYXRhQnl0ZUxlbmd0aDsKLQotICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFwYXJzZVZhclVJbnQzMihtZW1vcnlJbmRleCksICJjYW4ndCBnZXQgIiwgc2VnbWVu
dE51bWJlciwgInRoIERhdGEgc2VnbWVudCdzIGluZGV4Iik7Ci0gICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYobWVtb3J5SW5kZXggPj0gbV9tZW1vcnlDb3VudCwgc2VnbWVudE51bWJlciwgInRo
IERhdGEgc2VnbWVudCBoYXMgaW5kZXggIiwgbWVtb3J5SW5kZXgsICIgd2hpY2ggZXhjZWVkcyB0
aGUgbnVtYmVyIG9mIE1lbW9yaWVzICIsIG1fbWVtb3J5Q291bnQpOwotICAgICAgICBUeXBlIGlu
aXRFeHByVHlwZTsKLSAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUluaXRF
eHByKGluaXRPcGNvZGUsIGluaXRFeHByQml0cywgaW5pdEV4cHJUeXBlKSk7Ci0gICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoaW5pdEV4cHJUeXBlICE9IEkzMiwgc2VnbWVudE51bWJlciwgInRo
IERhdGEgc2VnbWVudCdzIGluaXRfZXhwciBtdXN0IHByb2R1Y2UgYW4gaTMyIik7Ci0gICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGRhdGFCeXRlTGVuZ3RoKSwgImNh
bid0IGdldCAiLCBzZWdtZW50TnVtYmVyLCAidGggRGF0YSBzZWdtZW50J3MgZGF0YSBieXRlIGxl
bmd0aCIpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGRhdGFCeXRlTGVuZ3RoID4gbWF4
TW9kdWxlU2l6ZSwgc2VnbWVudE51bWJlciwgInRoIERhdGEgc2VnbWVudCdzIGRhdGEgYnl0ZSBs
ZW5ndGggaXMgdG9vIGJpZyAiLCBkYXRhQnl0ZUxlbmd0aCwgIiBtYXhpbXVtICIsIG1heE1vZHVs
ZVNpemUpOwotCi0gICAgICAgIFNlZ21lbnQqIHNlZ21lbnQgPSBTZWdtZW50OjpjcmVhdGUobWFr
ZUkzMkluaXRFeHByKGluaXRPcGNvZGUsIGluaXRFeHByQml0cyksIGRhdGFCeXRlTGVuZ3RoKTsK
LSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighc2VnbWVudCwgImNhbid0IGFsbG9jYXRlIGVu
b3VnaCBtZW1vcnkgZm9yICIsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQgb2Ygc2l6
ZSAiLCBkYXRhQnl0ZUxlbmd0aCk7Ci0gICAgICAgIG1faW5mby0+ZGF0YS51bmNoZWNrZWRBcHBl
bmQoU2VnbWVudDo6YWRvcHRQdHIoc2VnbWVudCkpOwotICAgICAgICBmb3IgKHVpbnQzMl90IGRh
dGFCeXRlID0gMDsgZGF0YUJ5dGUgPCBkYXRhQnl0ZUxlbmd0aDsgKytkYXRhQnl0ZSkgewotICAg
ICAgICAgICAgdWludDhfdCBieXRlOwotICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
cGFyc2VVSW50OChieXRlKSwgImNhbid0IGdldCAiLCBkYXRhQnl0ZSwgInRoIGRhdGEgYnl0ZSBm
cm9tICIsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQiKTsKLSAgICAgICAgICAgIHNl
Z21lbnQtPmJ5dGUoZGF0YUJ5dGUpID0gYnl0ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1
cm4geyB9OwotfQotICAgIAotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlQ3VzdG9tKHVpbnQzMl90
IHNlY3Rpb25MZW5ndGgpIC0+IFBhcnRpYWxSZXN1bHQKLXsKLSAgICBjb25zdCB1aW50MzJfdCBj
dXN0b21TZWN0aW9uU3RhcnRPZmZzZXQgPSBtX29mZnNldDsKLQotICAgIEN1c3RvbVNlY3Rpb24g
c2VjdGlvbjsKLSAgICB1aW50MzJfdCBjdXN0b21TZWN0aW9uTnVtYmVyID0gbV9pbmZvLT5jdXN0
b21TZWN0aW9ucy5zaXplKCkgKyAxOwotICAgIHVpbnQzMl90IG5hbWVMZW47Ci0gICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighbV9pbmZvLT5jdXN0b21TZWN0aW9ucy50cnlSZXNlcnZlQ2FwYWNpdHko
Y3VzdG9tU2VjdGlvbk51bWJlciksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAi
LCBjdXN0b21TZWN0aW9uTnVtYmVyLCAidGggY3VzdG9tIHNlY3Rpb24iKTsKLSAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihuYW1lTGVuKSwgImNhbid0IGdldCAiLCBjdXN0
b21TZWN0aW9uTnVtYmVyLCAidGggY3VzdG9tIHNlY3Rpb24ncyBuYW1lIGxlbmd0aCIpOwotICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVVVEY4U3RyaW5nKHNlY3Rpb24ubmFtZSwgbmFt
ZUxlbiksICJuYW1lTGVuIGdldCAiLCBjdXN0b21TZWN0aW9uTnVtYmVyLCAidGggY3VzdG9tIHNl
Y3Rpb24ncyBuYW1lIG9mIGxlbmd0aCAiLCBuYW1lTGVuKTsKLQotICAgIHVpbnQzMl90IHBheWxv
YWRCeXRlcyA9IHNlY3Rpb25MZW5ndGggLSAobV9vZmZzZXQgLSBjdXN0b21TZWN0aW9uU3RhcnRP
ZmZzZXQpOwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXNlY3Rpb24ucGF5bG9hZC50cnlSZXNl
cnZlQ2FwYWNpdHkocGF5bG9hZEJ5dGVzKSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkg
Zm9yICIsIGN1c3RvbVNlY3Rpb25OdW1iZXIsICJ0aCBjdXN0b20gc2VjdGlvbidzICIsIHBheWxv
YWRCeXRlcywgIiBieXRlcyIpOwotICAgIGZvciAodWludDMyX3QgYnl0ZU51bWJlciA9IDA7IGJ5
dGVOdW1iZXIgPCBwYXlsb2FkQnl0ZXM7ICsrYnl0ZU51bWJlcikgewotICAgICAgICB1aW50OF90
IGJ5dGU7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUludDgoYnl0ZSksICJj
YW4ndCBnZXQgIiwgYnl0ZU51bWJlciwgInRoIGRhdGEgYnl0ZSBmcm9tICIsIGN1c3RvbVNlY3Rp
b25OdW1iZXIsICJ0aCBjdXN0b20gc2VjdGlvbiIpOwotICAgICAgICBzZWN0aW9uLnBheWxvYWQu
dW5jaGVja2VkQXBwZW5kKGJ5dGUpOwotICAgIH0KLQotICAgIE5hbWUgbmFtZU5hbWUgPSB7ICdu
JywgJ2EnLCAnbScsICdlJyB9OwotICAgIGlmIChzZWN0aW9uLm5hbWUgPT0gbmFtZU5hbWUpIHsK
LSAgICAgICAgTmFtZVNlY3Rpb25QYXJzZXIgbmFtZVNlY3Rpb25QYXJzZXIoc2VjdGlvbi5wYXls
b2FkLmJlZ2luKCksIHNlY3Rpb24ucGF5bG9hZC5zaXplKCksIG1faW5mbyk7Ci0gICAgICAgIGlm
IChhdXRvIG5hbWVTZWN0aW9uID0gbmFtZVNlY3Rpb25QYXJzZXIucGFyc2UoKSkKLSAgICAgICAg
ICAgIG1faW5mby0+bmFtZVNlY3Rpb24gPSBXVEZNb3ZlKCpuYW1lU2VjdGlvbik7Ci0gICAgfQot
Ci0gICAgbV9pbmZvLT5jdXN0b21TZWN0aW9ucy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShzZWN0
aW9uKSk7Ci0KLSAgICByZXR1cm4geyB9OwotfQotCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2Fz
bQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oCmluZGV4IGE2NTFiZTE3Y2UyM2I4NWZiYjk3YmJi
Njg1NzAzYjM5YjY0YjcyYzQuLjJlOWY2ODdiYTNjMGM5MDhjOTQwYjYwZGJkMmJlZWE4YTQzM2E3
MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJz
ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgK
QEAgLTQ2LDE4ICs0Niw2IEBAIGNsYXNzIE1vZHVsZVBhcnNlciA6IHB1YmxpYyBQYXJzZXI8dm9p
ZD4gewogICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2UoKTsKIAogcHJpdmF0ZToK
LQotI2RlZmluZSBXQVNNX1NFQ1RJT05fREVDTEFSRV9QQVJTRVIoTkFNRSwgSUQsIERFU0NSSVBU
SU9OKSBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZSAjIyBOQU1FKCk7Ci0g
ICAgRk9SX0VBQ0hfS05PV05fV0FTTV9TRUNUSU9OKFdBU01fU0VDVElPTl9ERUNMQVJFX1BBUlNF
UikKLSN1bmRlZiBXQVNNX1NFQ1RJT05fREVDTEFSRV9QQVJTRVIKLQotICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlQ3VzdG9tKHVpbnQzMl90KTsKLSAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUdsb2JhbFR5cGUoR2xvYmFsJik7Ci0gICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VNZW1vcnlIZWxwZXIoYm9vbCBp
c0ltcG9ydCk7Ci0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VUYWJs
ZUhlbHBlcihib29sIGlzSW1wb3J0KTsKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBwYXJzZVJlc2l6YWJsZUxpbWl0cyh1aW50MzJfdCYgaW5pdGlhbCwgc3RkOjpvcHRpb25h
bDx1aW50MzJfdD4mIG1heGltdW0pOwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIHBhcnNlSW5pdEV4cHIodWludDhfdCYsIHVpbnQ2NF90JiwgVHlwZSYgaW5pdEV4cHJUeXBl
KTsKLQogICAgIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4gbV9pbmZvOwogICAgIHVpbnQzMl90IG1f
bWVtb3J5Q291bnQgeyAwIH07CiAgICAgdWludDMyX3QgbV90YWJsZUNvdW50IHsgMCB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU5hbWVTZWN0aW9uLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTmFtZVNlY3Rpb24uaAppbmRleCA3YzAyZjJm
NDE5NzcwNWFjOGJlZWVmNDQxODk5MGQyOGVlMzRmMDg0Li5mZTYzY2Y1NTQ3MzY2ZmMxNzQwYzFm
MGM3MGJhODFiZTc1MzZhODhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTmFtZVNlY3Rpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TmFtZVNlY3Rpb24uaApAQCAtMzYsMTEgKzM2LDIwIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgV2FzbSB7CiAKIHN0cnVjdCBOYW1lU2VjdGlvbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxOYW1lU2VjdGlvbj4gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE5hbWVTZWN0aW9u
KTsKLQogcHVibGljOgotICAgIE5hbWVTZWN0aW9uKGNvbnN0IHN0ZDo6b3B0aW9uYWw8Q1N0cmlu
Zz4gJmhhc2gpCi0gICAgICAgIDogbW9kdWxlSGFzaChoYXNoID8gaGFzaC0+bGVuZ3RoKCkgOiAz
KQorICAgIE5hbWVTZWN0aW9uKCkKKyAgICB7CisgICAgICAgIHNldEhhc2goc3RkOjpudWxsb3B0
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgUmVmPE5hbWVTZWN0aW9uPiBjcmVhdGUoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmFtZVNlY3Rpb24pOworICAgIH0KKworICAg
IHZvaWQgc2V0SGFzaChjb25zdCBzdGQ6Om9wdGlvbmFsPENTdHJpbmc+ICZoYXNoKQogICAgIHsK
KyAgICAgICAgbW9kdWxlSGFzaCA9IE5hbWUoaGFzaCA/IGhhc2gtPmxlbmd0aCgpIDogMyk7CiAg
ICAgICAgIGlmIChoYXNoKSB7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGhh
c2gtPmxlbmd0aCgpOyArK2kpCiAgICAgICAgICAgICAgICAgbW9kdWxlSGFzaFtpXSA9IHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KCooaGFzaC0+ZGF0YSgpICsgaSkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21OYW1lU2VjdGlvblBhcnNlci5jcHAKaW5kZXggNzMzOTYy
MTVjZjU4YmM1MjZiMzQ4Y2MwYTg4YzcxM2Q0ZGVjNTk3Ny4uYzdmZTg4NGMzMjM0YWJhYWM1ZWJh
N2M4OTQ2NTQ4OWNkODIyZjI5MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTmFtZVNlY3Rpb25QYXJzZXIuY3BwCkBAIC0zNSw3ICszNSw3IEBAIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKIGF1dG8gTmFtZVNlY3Rpb25QYXJzZXI6OnBhcnNl
KCkgLT4gUmVzdWx0CiB7Ci0gICAgUmVmUHRyPE5hbWVTZWN0aW9uPiBuYW1lU2VjdGlvbihhZG9w
dFJlZigqbmV3IE5hbWVTZWN0aW9uKG1faW5mby5oYXNoKSkpOworICAgIFJlZjxOYW1lU2VjdGlv
bj4gbmFtZVNlY3Rpb24gPSBOYW1lU2VjdGlvbjo6Y3JlYXRlKCk7CiAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighbmFtZVNlY3Rpb24tPmZ1bmN0aW9uTmFtZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KG1f
aW5mby5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCkpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1l
bW9yeSBmb3IgZnVuY3Rpb24gbmFtZXMiKTsKICAgICBuYW1lU2VjdGlvbi0+ZnVuY3Rpb25OYW1l
cy5yZXNpemUobV9pbmZvLmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21OYW1lU2VjdGlvblBhcnNlci5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmgKaW5kZXggYjdh
ZjBkOWI5MGE2ZDUyNmU5MmQ0ZDgyNGZlZWRiNDRkNTk4NzY4My4uZDhlNmFlNzFiMjZiNGJlY2M4
Yjg4OGJiZmQ1ZWIyNzk4NWM2ZDIxOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmgKQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAotY2xhc3MgTmFtZVNlY3Rpb25QYXJzZXIgOiBw
dWJsaWMgUGFyc2VyPFJlZlB0cjxOYW1lU2VjdGlvbj4+IHsKK2NsYXNzIE5hbWVTZWN0aW9uUGFy
c2VyIDogcHVibGljIFBhcnNlcjxSZWY8TmFtZVNlY3Rpb24+PiB7CiBwdWJsaWM6CiAgICAgTmFt
ZVNlY3Rpb25QYXJzZXIoY29uc3QgdWludDhfdCogc291cmNlQnVmZmVyLCBzaXplX3Qgc291cmNl
TGVuZ3RoLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbykKICAgICAgICAgOiBQYXJzZXIo
c291cmNlQnVmZmVyLCBzb3VyY2VMZW5ndGgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtT01HUGxhbi5jcHAKaW5kZXggNDdkZWFkNjRhZjhmZDVjMzY5OWQyZThmNjQwZWQ4YmViMDQy
MGM5ZC4uOWUwYzRhNTY2NmU0NGUwZWFjYzIzMTJhYmJiNzY1NDUzYjg3OWY0OCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcApAQCAtNjksMjEgKzY5LDE4IEBA
IHZvaWQgT01HUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKIHsKICAgICBBU1NFUlQobV9j
b2RlQmxvY2stPnJ1bm5hYmxlKCkpOwogICAgIEFTU0VSVChtX2NvZGVCbG9jay5wdHIoKSA9PSBt
X21vZHVsZS0+Y29kZUJsb2NrRm9yKG1vZGUoKSkpOwotICAgIGNvbnN0IEZ1bmN0aW9uTG9jYXRp
b25JbkJpbmFyeSYgbG9jYXRpb24gPSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbkxvY2F0
aW9uSW5CaW5hcnlbbV9mdW5jdGlvbkluZGV4XTsKLSAgICBjb25zdCB1aW50OF90KiBmdW5jdGlv
blN0YXJ0ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+c291cmNlLmRhdGEoKSArIGxvY2F0aW9uLnN0
YXJ0OwotICAgIGNvbnN0IHNpemVfdCBmdW5jdGlvbkxlbmd0aCA9IGxvY2F0aW9uLmVuZCAtIGxv
Y2F0aW9uLnN0YXJ0OwotICAgIEFTU0VSVChmdW5jdGlvblN0YXJ0ICsgZnVuY3Rpb25MZW5ndGgg
PD0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+c291cmNlLmVuZCgpKTsKKyAgICBjb25zdCBGdW5jdGlv
bkRhdGEmIGZ1bmN0aW9uID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25zW21fZnVuY3Rp
b25JbmRleF07CiAKICAgICBjb25zdCB1aW50MzJfdCBmdW5jdGlvbkluZGV4U3BhY2UgPSBtX2Z1
bmN0aW9uSW5kZXggKyBtX21vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5pbXBvcnRGdW5jdGlv
bkNvdW50KCk7CiAgICAgQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA8IG1fbW9kdWxlLT5tb2R1
bGVJbmZvcm1hdGlvbigpLmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7CiAKICAgICBTaWduYXR1
cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVu
Y3Rpb25TaWduYXR1cmVJbmRpY2VzW21fZnVuY3Rpb25JbmRleF07CiAgICAgY29uc3QgU2lnbmF0
dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4
KTsKLSAgICBBU1NFUlQodmFsaWRhdGVGdW5jdGlvbihmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxl
bmd0aCwgc2lnbmF0dXJlLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpKSk7CisgICAgQVNTRVJU
KHZhbGlkYXRlRnVuY3Rpb24oZnVuY3Rpb24uZGF0YS5kYXRhKCksIGZ1bmN0aW9uLmRhdGEuc2l6
ZSgpLCBzaWduYXR1cmUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCkpKTsKIAogICAgIFZlY3Rv
cjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiB1bmxpbmtlZENhbGxzOwogICAgIENvbXBpbGF0aW9u
Q29udGV4dCBjb250ZXh0OwotICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VB
bmRDb21waWxlKGNvbnRleHQsIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1
cmUsIHVubGlua2VkQ2FsbHMsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29t
cGlsYXRpb25Nb2RlOjpPTUdNb2RlLCBtX2Z1bmN0aW9uSW5kZXgpOworICAgIGF1dG8gcGFyc2VB
bmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlKGNvbnRleHQsIGZ1bmN0aW9uLmRhdGEu
ZGF0YSgpLCBmdW5jdGlvbi5kYXRhLnNpemUoKSwgc2lnbmF0dXJlLCB1bmxpbmtlZENhbGxzLCBt
X21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6T01HTW9k
ZSwgbV9mdW5jdGlvbkluZGV4KTsKIAogICAgIGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxl
UmVzdWx0KSkgewogICAgICAgICBmYWlsKGhvbGRMb2NrKG1fbG9jayksIG1ha2VTdHJpbmcocGFy
c2VBbmRDb21waWxlUmVzdWx0LmVycm9yKCksICJ3aGVuIHRyeWluZyB0byB0aWVyIHVwICIsIFN0
cmluZzo6bnVtYmVyKG1fZnVuY3Rpb25JbmRleCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21QYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21QYXJzZXIuaAppbmRleCA2NTEwNzA1ZWFmNTc4Y2UzM2UzYmQ3NmIyYmM4MzhhZGRhNWY1
YjAwLi45ZmM0YTQ1NGM5YjcyNmZhMTNlODRhNGI0NzNmZWFkODEyYmI5OWYwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFyc2VyLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhcnNlci5oCkBAIC01OCw2ICs1OCwxMCBAQCBjbGFzcyBQ
YXJzZXIgewogICAgIHR5cGVkZWYgRXhwZWN0ZWQ8dm9pZCwgRXJyb3JUeXBlPiBQYXJ0aWFsUmVz
dWx0OwogICAgIHR5cGVkZWYgRXhwZWN0ZWQ8U3VjY2Vzc1R5cGUsIEVycm9yVHlwZT4gUmVzdWx0
OwogCisgICAgY29uc3QgdWludDhfdCogc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7
IH0KKyAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VMZW5ndGg7IH0K
KyAgICBzaXplX3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKwogcHJvdGVj
dGVkOgogICAgIFBhcnNlcihjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKIApAQCAtODEsMTYgKzg1
LDEzIEBAIGNsYXNzIFBhcnNlciB7CiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VW
YWx1ZVR5cGUoVHlwZSYpOwogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlRXh0ZXJu
YWxLaW5kKEV4dGVybmFsS2luZCYpOwogCi0gICAgY29uc3QgdWludDhfdCogc291cmNlKCkgY29u
c3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KLSAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1
cm4gbV9zb3VyY2VMZW5ndGg7IH0KLQogICAgIHNpemVfdCBtX29mZnNldCA9IDA7CiAKICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uQXJncz4KICAgICBORVZFUl9JTkxJTkUgVW5leHBlY3RlZFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZmFpbChBcmdzLi4uIGFyZ3MpIGNvbnN0CiAgICAgewog
ICAgICAgICB1c2luZyBuYW1lc3BhY2UgRmFpbHVyZUhlbHBlcjsgLy8gU2VlIEFETCBjb21tZW50
IGluIG5hbWVzcGFjZSBhYm92ZS4KLSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRSZXN1bHQobWFr
ZVN0cmluZygiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAiX3MsIFN0
cmluZzo6bnVtYmVyKG1fb2Zmc2V0KSwgIiAvICJfcywgU3RyaW5nOjpudW1iZXIobV9zb3VyY2VM
ZW5ndGgpLCAiOiAiX3MsIG1ha2VTdHJpbmcoYXJncykuLi4pKTsKKyAgICAgICAgcmV0dXJuIFVu
ZXhwZWN0ZWRSZXN1bHQobWFrZVN0cmluZygiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFy
c2UgYXQgYnl0ZSAiX3MsIFN0cmluZzo6bnVtYmVyKG1fb2Zmc2V0KSwgIjogIl9zLCBtYWtlU3Ry
aW5nKGFyZ3MpLi4uKSk7CiAgICAgfQogI2RlZmluZSBXQVNNX1BBUlNFUl9GQUlMX0lGKGNvbmRp
dGlvbiwgLi4uKSBkbyB7IFwKICAgICBpZiAoVU5MSUtFTFkoY29uZGl0aW9uKSkgICAgICAgICAg
ICAgICAgICAgICBcCkBAIC0yODUsNiArMjg2LDE0IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBQYXJz
ZXI8U3VjY2Vzc1R5cGU+OjpwYXJzZUV4dGVybmFsS2luZChFeHRlcm5hbEtpbmQmIHJlc3VsdCkK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorQUxXQVlTX0lOTElORSBJMzJJbml0RXhwciBtYWtlSTMy
SW5pdEV4cHIodWludDhfdCBvcGNvZGUsIHVpbnQzMl90IGJpdHMpCit7CisgICAgUkVMRUFTRV9B
U1NFUlQob3Bjb2RlID09IEkzMkNvbnN0IHx8IG9wY29kZSA9PSBHZXRHbG9iYWwpOworICAgIGlm
IChvcGNvZGUgPT0gSTMyQ29uc3QpCisgICAgICAgIHJldHVybiBJMzJJbml0RXhwcjo6Y29uc3RW
YWx1ZShiaXRzKTsKKyAgICByZXR1cm4gSTMySW5pdEV4cHI6Omdsb2JhbEltcG9ydChiaXRzKTsK
K30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJB
U1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFu
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAppbmRleCBhMzRk
ZWVjYjE2YjE0MGJlYjUzYjg3YzZlMmE3MDM5ODM0OTMwYzJjLi45OTc0ZWNmZTU1YmFmMjg5ZWVj
NTY1MDY2YTFjZDQ5YWUyM2E4MjBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBs
YW4uY3BwCkBAIC01Myw4ICs1Myw2IEBAIFBsYW46OlBsYW4oQ29udGV4dCogY29udGV4dCwgUmVm
PE1vZHVsZUluZm9ybWF0aW9uPiBpbmZvLCBDb21wbGV0aW9uVGFzayYmIHRhc2ssCiAgICAgOiBt
X21vZHVsZUluZm9ybWF0aW9uKFdURk1vdmUoaW5mbykpCiAgICAgLCBtX2NyZWF0ZUVtYmVkZGVy
V3JhcHBlcihXVEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlcikpCiAgICAgLCBtX3Rocm93V2Fz
bUV4Y2VwdGlvbih0aHJvd1dhc21FeGNlcHRpb24pCi0gICAgLCBtX3NvdXJjZShtX21vZHVsZUlu
Zm9ybWF0aW9uLT5zb3VyY2UuZGF0YSgpKQotICAgICwgbV9zb3VyY2VMZW5ndGgobV9tb2R1bGVJ
bmZvcm1hdGlvbi0+c291cmNlLnNpemUoKSkKIHsKICAgICBtX2NvbXBsZXRpb25UYXNrcy5hcHBl
bmQoc3RkOjptYWtlX3BhaXIoY29udGV4dCwgV1RGTW92ZSh0YXNrKSkpOwogfQpAQCAtNjQsMTAg
KzYyLDggQEAgUGxhbjo6UGxhbihDb250ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlSW5mb3JtYXRp
b24+IGluZm8sIENvbXBsZXRpb25UYXNrJiYgdGFzaykKIHsKIH0KIAotUGxhbjo6UGxhbihDb250
ZXh0KiBjb250ZXh0LCBjb25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgs
IENvbXBsZXRpb25UYXNrJiYgdGFzaykKLSAgICA6IG1fbW9kdWxlSW5mb3JtYXRpb24oYWRvcHRS
ZWYoKm5ldyBNb2R1bGVJbmZvcm1hdGlvbihWZWN0b3I8dWludDhfdD4oKSkpKQotICAgICwgbV9z
b3VyY2Uoc291cmNlKQotICAgICwgbV9zb3VyY2VMZW5ndGgoc291cmNlTGVuZ3RoKQorUGxhbjo6
UGxhbihDb250ZXh0KiBjb250ZXh0LCBDb21wbGV0aW9uVGFzayYmIHRhc2spCisgICAgOiBtX21v
ZHVsZUluZm9ybWF0aW9uKE1vZHVsZUluZm9ybWF0aW9uOjpjcmVhdGUoKSkKIHsKICAgICBtX2Nv
bXBsZXRpb25UYXNrcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoY29udGV4dCwgV1RGTW92ZSh0YXNr
KSkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4u
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgKaW5kZXggN2EwN2JmZDNh
MGIwNmU5MzQ0MDk1N2RiMzZkZTZkZGRhZTYzYzY0Yy4uOWVjNjg4NjU4MTMzMWJhY2M5ZjA4ZGQy
NmY5YWFiYjRlOWJkNTNiZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVBsYW4uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCkBA
IC01NCw3ICs1NCw3IEBAIGNsYXNzIFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8
UGxhbj4gewogICAgIFBsYW4oQ29udGV4dCosIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4sIENvbXBs
ZXRpb25UYXNrJiYpOwogCiAgICAgLy8gTm90ZTogVGhpcyBjb25zdHJ1Y3RvciBzaG91bGQgb25s
eSBiZSB1c2VkIGlmIHlvdSBhcmUgbm90IGFjdHVhbGx5IGJ1aWxkaW5nIGEgbW9kdWxlIGUuZy4g
dmFsaWRhdGlvbi9mdW5jdGlvbiB0ZXN0cwotICAgIEpTX0VYUE9SVF9QUklWQVRFIFBsYW4oQ29u
dGV4dCosIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIENvbXBsZXRpb25UYXNrJiYpOworICAgIEpT
X0VYUE9SVF9QUklWQVRFIFBsYW4oQ29udGV4dCosIENvbXBsZXRpb25UYXNrJiYpOwogICAgIHZp
cnR1YWwgSlNfRVhQT1JUX1BSSVZBVEUgflBsYW4oKTsKIAogICAgIC8vIElmIHlvdSBndWFyYW50
ZWUgdGhlIG9yZGVyaW5nIGhlcmUsIHlvdSBjYW4gcmVseSBvbiBGSUZPIG9mIHRoZQpAQCAtOTAs
OCArOTAsNiBAQCBjbGFzcyBQbGFuIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFBsYW4+
IHsKICAgICBDcmVhdGVFbWJlZGRlcldyYXBwZXIgbV9jcmVhdGVFbWJlZGRlcldyYXBwZXI7CiAg
ICAgVGhyb3dXYXNtRXhjZXB0aW9uIG1fdGhyb3dXYXNtRXhjZXB0aW9uIHsgbnVsbHB0ciB9Owog
Ci0gICAgY29uc3QgdWludDhfdCogbV9zb3VyY2U7Ci0gICAgY29uc3Qgc2l6ZV90IG1fc291cmNl
TGVuZ3RoOwogICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsKICAgICBNZW1vcnlNb2RlIG1fbW9k
ZSB7IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nIH07CiAgICAgTG9jayBtX2xvY2s7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOWE5YmFjYjY3ZGVkMjUwNDUzNWQ4YzJkZTVjNWVkODMzZGVmMTYwMgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9uUGFyc2VyLmNw
cApAQCAtMCwwICsxLDU2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2Ug
U3V6dWtpIDx5dXN1a2VzdXp1a2lAc2xvd3N0YXJ0Lm9yZz4uCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
YXNtU2VjdGlvblBhcnNlci5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVk
ZSAiSWRlbnRpZmllcklubGluZXMuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5SW5mb3JtYXRpb24u
aCIKKyNpbmNsdWRlICJXYXNtTmFtZVNlY3Rpb25QYXJzZXIuaCIKKyNpbmNsdWRlICJXYXNtT3Bz
LmgiCisjaW5jbHVkZSAiV2FzbVNlY3Rpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgV2FzbSB7CisKK2F1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VUeXBlKCkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIHVpbnQzMl90IGNvdW50OworCisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
cGFyc2VWYXJVSW50MzIoY291bnQpLCAiY2FuJ3QgZ2V0IFR5cGUgc2VjdGlvbidzIGNvdW50Iik7
CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihjb3VudCA+IG1heFR5cGVzLCAiVHlwZSBzZWN0aW9u
J3MgY291bnQgaXMgdG9vIGJpZyAiLCBjb3VudCwgIiBtYXhpbXVtICIsIG1heFR5cGVzKTsKKyAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPnVzZWRTaWduYXR1cmVzLnRyeVJlc2VydmVD
YXBhY2l0eShjb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBUeXBlIHNl
Y3Rpb24ncyAiLCBjb3VudCwgIiBlbnRyaWVzIik7CisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAw
OyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBpbnQ4X3QgdHlwZTsKKyAgICAgICAgdWludDMy
X3QgYXJndW1lbnRDb3VudDsKKyAgICAgICAgVmVjdG9yPFR5cGU+IGFyZ3VtZW50VHlwZXM7CisK
KyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VJbnQ3KHR5cGUpLCAiY2FuJ3QgZ2V0
ICIsIGksICJ0aCBUeXBlJ3MgdHlwZSIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHR5
cGUgIT0gRnVuYywgaSwgInRoIFR5cGUgaXMgbm9uLUZ1bmMgIiwgdHlwZSk7CisgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGFyZ3VtZW50Q291bnQpLCAiY2FuJ3Qg
Z2V0ICIsIGksICJ0aCBUeXBlJ3MgYXJndW1lbnQgY291bnQiKTsKKyAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRihhcmd1bWVudENvdW50ID4gbWF4RnVuY3Rpb25QYXJhbXMsIGksICJ0aCBhcmd1
bWVudCBjb3VudCBpcyB0b28gYmlnICIsIGFyZ3VtZW50Q291bnQsICIgbWF4aW11bSAiLCBtYXhG
dW5jdGlvblBhcmFtcyk7CisgICAgICAgIFJlZlB0cjxTaWduYXR1cmU+IG1heWJlU2lnbmF0dXJl
ID0gU2lnbmF0dXJlOjp0cnlDcmVhdGUoYXJndW1lbnRDb3VudCk7CisgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIW1heWJlU2lnbmF0dXJlLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9y
eSBmb3IgVHlwZSBzZWN0aW9uJ3MgIiwgaSwgInRoIHNpZ25hdHVyZSIpOworICAgICAgICBSZWY8
U2lnbmF0dXJlPiBzaWduYXR1cmUgPSBtYXliZVNpZ25hdHVyZS5yZWxlYXNlTm9uTnVsbCgpOwor
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmd1bWVudENvdW50OyArK2kpIHsK
KyAgICAgICAgICAgIFR5cGUgYXJndW1lbnRUeXBlOworICAgICAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighcGFyc2VWYWx1ZVR5cGUoYXJndW1lbnRUeXBlKSwgImNhbid0IGdldCAiLCBpLCAi
dGggYXJndW1lbnQgVHlwZSIpOworICAgICAgICAgICAgc2lnbmF0dXJlLT5hcmd1bWVudChpKSA9
IGFyZ3VtZW50VHlwZTsKKyAgICAgICAgfQorCisgICAgICAgIHVpbnQ4X3QgcmV0dXJuQ291bnQ7
CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDEocmV0dXJuQ291bnQp
LCAiY2FuJ3QgZ2V0ICIsIGksICJ0aCBUeXBlJ3MgcmV0dXJuIGNvdW50Iik7CisgICAgICAgIFR5
cGUgcmV0dXJuVHlwZTsKKyAgICAgICAgaWYgKHJldHVybkNvdW50KSB7CisgICAgICAgICAgICBU
eXBlIHZhbHVlOworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYWx1ZVR5
cGUodmFsdWUpLCAiY2FuJ3QgZ2V0ICIsIGksICJ0aCBUeXBlJ3MgcmV0dXJuIHZhbHVlIik7Cisg
ICAgICAgICAgICByZXR1cm5UeXBlID0gc3RhdGljX2Nhc3Q8VHlwZT4odmFsdWUpOworICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgIHJldHVyblR5cGUgPSBUeXBlOjpWb2lkOworICAgICAgICBz
aWduYXR1cmUtPnJldHVyblR5cGUoKSA9IHJldHVyblR5cGU7CisKKyAgICAgICAgc3RkOjpwYWly
PFNpZ25hdHVyZUluZGV4LCBSZWY8U2lnbmF0dXJlPj4gcmVzdWx0ID0gU2lnbmF0dXJlSW5mb3Jt
YXRpb246OmFkb3B0KFdURk1vdmUoc2lnbmF0dXJlKSk7CisgICAgICAgIG1faW5mby0+dXNlZFNp
Z25hdHVyZXMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUocmVzdWx0LnNlY29uZCkpOworICAgIH0K
KyAgICByZXR1cm4geyB9OworfQorCithdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlSW1wb3J0KCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIHVpbnQzMl90IGltcG9ydENvdW50OworICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGltcG9ydENvdW50KSwgImNhbid0IGdldCBJ
bXBvcnQgc2VjdGlvbidzIGNvdW50Iik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbXBvcnRD
b3VudCA+IG1heEltcG9ydHMsICJJbXBvcnQgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwg
aW1wb3J0Q291bnQsICIgbWF4aW11bSAiLCBtYXhJbXBvcnRzKTsKKyAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFtX2luZm8tPmdsb2JhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50KSwg
ImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGltcG9ydENvdW50LCAiIGdsb2Jh
bHMiKTsgLy8gRklYTUUgdGhpcyBvdmVyLWFsbG9jYXRlcyB3aGVuIHdlIGZpeCB0aGUgRklYTUVz
IGJlbG93LgorICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+aW1wb3J0cy50cnlSZXNl
cnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBm
b3IgIiwgaW1wb3J0Q291bnQsICIgaW1wb3J0cyIpOyAvLyBGSVhNRSB0aGlzIG92ZXItYWxsb2Nh
dGVzIHdoZW4gd2UgZml4IHRoZSBGSVhNRXMgYmVsb3cuCisgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RighbV9pbmZvLT5pbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMudHJ5UmVzZXJ2ZUNhcGFj
aXR5KGltcG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGlt
cG9ydENvdW50LCAiIGltcG9ydCBmdW5jdGlvbiBzaWduYXR1cmVzIik7IC8vIEZJWE1FIHRoaXMg
b3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxvdy4KKworICAgIGZvciAo
dWludDMyX3QgaW1wb3J0TnVtYmVyID0gMDsgaW1wb3J0TnVtYmVyIDwgaW1wb3J0Q291bnQ7ICsr
aW1wb3J0TnVtYmVyKSB7CisgICAgICAgIHVpbnQzMl90IG1vZHVsZUxlbjsKKyAgICAgICAgdWlu
dDMyX3QgZmllbGRMZW47CisgICAgICAgIE5hbWUgbW9kdWxlU3RyaW5nOworICAgICAgICBOYW1l
IGZpZWxkU3RyaW5nOworICAgICAgICBFeHRlcm5hbEtpbmQga2luZDsKKyAgICAgICAgdW5zaWdu
ZWQga2luZEluZGV4IHsgMCB9OworCisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNl
VmFyVUludDMyKG1vZHVsZUxlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1w
b3J0J3MgbW9kdWxlIG5hbWUgbGVuZ3RoIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IWNvbnN1bWVVVEY4U3RyaW5nKG1vZHVsZVN0cmluZywgbW9kdWxlTGVuKSwgImNhbid0IGdldCAi
LCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQncyBtb2R1bGUgbmFtZSBvZiBsZW5ndGggIiwgbW9k
dWxlTGVuKTsKKworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihm
aWVsZExlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0J3MgZmllbGQg
bmFtZSBsZW5ndGggaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIik7CisgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVVVEY4U3RyaW5nKGZpZWxkU3RyaW5nLCBmaWVsZExl
biksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0J3MgZmllbGQgbmFtZSBv
ZiBsZW5ndGggIiwgbW9kdWxlTGVuLCAiIGluIG1vZHVsZSAnIiwgbW9kdWxlU3RyaW5nLCAiJyIp
OworCisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlRXh0ZXJuYWxLaW5kKGtpbmQp
LCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdzIGtpbmQgaW4gbW9kdWxl
ICciLCBtb2R1bGVTdHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0cmluZywgIiciKTsKKyAgICAg
ICAgc3dpdGNoIChraW5kKSB7CisgICAgICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpGdW5jdGlvbjog
eworICAgICAgICAgICAgdWludDMyX3QgZnVuY3Rpb25TaWduYXR1cmVJbmRleDsKKyAgICAgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGZ1bmN0aW9uU2lnbmF0dXJl
SW5kZXgpLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdzIGZ1bmN0aW9u
IHNpZ25hdHVyZSBpbiBtb2R1bGUgJyIsIG1vZHVsZVN0cmluZywgIicgZmllbGQgJyIsIGZpZWxk
U3RyaW5nLCAiJyIpOworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvblNp
Z25hdHVyZUluZGV4ID49IG1faW5mby0+dXNlZFNpZ25hdHVyZXMuc2l6ZSgpLCAiaW52YWxpZCBm
dW5jdGlvbiBzaWduYXR1cmUgZm9yICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCwgIiwgZnVu
Y3Rpb25TaWduYXR1cmVJbmRleCwgIiBpcyBvdXQgb2YgcmFuZ2Ugb2YgIiwgbV9pbmZvLT51c2Vk
U2lnbmF0dXJlcy5zaXplKCksICIgaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIGZpZWxk
ICciLCBmaWVsZFN0cmluZywgIiciKTsKKyAgICAgICAgICAgIGtpbmRJbmRleCA9IG1faW5mby0+
aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsKKyAgICAgICAgICAgIFNpZ25h
dHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChtX2lu
Zm8tPnVzZWRTaWduYXR1cmVzW2Z1bmN0aW9uU2lnbmF0dXJlSW5kZXhdKTsKKyAgICAgICAgICAg
IG1faW5mby0+aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnVuY2hlY2tlZEFwcGVuZChz
aWduYXR1cmVJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIEV4dGVybmFsS2luZDo6VGFibGU6IHsKKyAgICAgICAgICAgIGJvb2wgaXNJbXBvcnQgPSB0
cnVlOworICAgICAgICAgICAgUGFydGlhbFJlc3VsdCByZXN1bHQgPSBwYXJzZVRhYmxlSGVscGVy
KGlzSW1wb3J0KTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoV1RGTW92ZShyZXN1bHQuZXJyb3IoKSkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6
Ok1lbW9yeTogeworICAgICAgICAgICAgYm9vbCBpc0ltcG9ydCA9IHRydWU7CisgICAgICAgICAg
ICBQYXJ0aWFsUmVzdWx0IHJlc3VsdCA9IHBhcnNlTWVtb3J5SGVscGVyKGlzSW1wb3J0KTsKKyAg
ICAgICAgICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoV1RGTW92ZShyZXN1bHQuZXJyb3IoKSkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6Okdsb2JhbDogeworICAg
ICAgICAgICAgR2xvYmFsIGdsb2JhbDsKKyAgICAgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJf
RkFJTFMocGFyc2VHbG9iYWxUeXBlKGdsb2JhbCkpOworICAgICAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihnbG9iYWwubXV0YWJpbGl0eSA9PSBHbG9iYWw6Ok11dGFibGUsICJNdXRhYmxlIEds
b2JhbHMgYXJlbid0IHN1cHBvcnRlZCIpOworCisgICAgICAgICAgICBraW5kSW5kZXggPSBtX2lu
Zm8tPmdsb2JhbHMuc2l6ZSgpOworICAgICAgICAgICAgbV9pbmZvLT5nbG9iYWxzLnVuY2hlY2tl
ZEFwcGVuZChXVEZNb3ZlKGdsb2JhbCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIG1faW5mby0+aW1wb3J0cy51bmNoZWNrZWRBcHBlbmQoeyBX
VEZNb3ZlKG1vZHVsZVN0cmluZyksIFdURk1vdmUoZmllbGRTdHJpbmcpLCBraW5kLCBraW5kSW5k
ZXggfSk7CisgICAgfQorCisgICAgbV9pbmZvLT5maXJzdEludGVybmFsR2xvYmFsID0gbV9pbmZv
LT5nbG9iYWxzLnNpemUoKTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIFNlY3Rpb25QYXJz
ZXI6OnBhcnNlRnVuY3Rpb24oKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgdWludDMyX3QgY291
bnQ7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoY291bnQpLCAiY2Fu
J3QgZ2V0IEZ1bmN0aW9uIHNlY3Rpb24ncyBjb3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoY291bnQgPiBtYXhGdW5jdGlvbnMsICJGdW5jdGlvbiBzZWN0aW9uJ3MgY291bnQgaXMgdG9v
IGJpZyAiLCBjb3VudCwgIiBtYXhpbXVtICIsIG1heEZ1bmN0aW9ucyk7CisgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighbV9pbmZvLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy50cnlS
ZXNlcnZlQ2FwYWNpdHkoY291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3Ig
IiwgY291bnQsICIgRnVuY3Rpb24gc2lnbmF0dXJlcyIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIW1faW5mby0+ZnVuY3Rpb25zLnRyeVJlc2VydmVDYXBhY2l0eShjb3VudCksICJjYW4ndCBh
bGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBjb3VudCwgIkZ1bmN0aW9uIGxvY2F0aW9ucyIp
OworCisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAg
dWludDMyX3QgdHlwZU51bWJlcjsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VW
YXJVSW50MzIodHlwZU51bWJlciksICJjYW4ndCBnZXQgIiwgaSwgInRoIEZ1bmN0aW9uJ3MgdHlw
ZSBudW1iZXIiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0eXBlTnVtYmVyID49IG1f
aW5mby0+dXNlZFNpZ25hdHVyZXMuc2l6ZSgpLCBpLCAidGggRnVuY3Rpb24gdHlwZSBudW1iZXIg
aXMgaW52YWxpZCAiLCB0eXBlTnVtYmVyKTsKKworICAgICAgICBTaWduYXR1cmVJbmRleCBzaWdu
YXR1cmVJbmRleCA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQobV9pbmZvLT51c2VkU2lnbmF0
dXJlc1t0eXBlTnVtYmVyXSk7CisgICAgICAgIC8vIFRoZSBDb2RlIHNlY3Rpb24gZml4ZXMgdXAg
c3RhcnQgYW5kIGVuZC4KKyAgICAgICAgc2l6ZV90IHN0YXJ0ID0gMDsKKyAgICAgICAgc2l6ZV90
IGVuZCA9IDA7CisgICAgICAgIG1faW5mby0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGlj
ZXMudW5jaGVja2VkQXBwZW5kKHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgbV9pbmZvLT5mdW5j
dGlvbnMudW5jaGVja2VkQXBwZW5kKHsgc3RhcnQsIGVuZCwgVmVjdG9yPHVpbnQ4X3Q+KCkgfSk7
CisgICAgfQorCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJz
ZVJlc2l6YWJsZUxpbWl0cyh1aW50MzJfdCYgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50MzJf
dD4mIG1heGltdW0pIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQoIW1heGltdW0pOwor
CisgICAgdWludDhfdCBmbGFnczsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJ
bnQxKGZsYWdzKSwgImNhbid0IHBhcnNlIHJlc2l6YWJsZSBsaW1pdHMgZmxhZ3MiKTsKKyAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbml0aWFsKSwgImNhbid0IHBhcnNl
IHJlc2l6YWJsZSBsaW1pdHMgaW5pdGlhbCBwYWdlIGNvdW50Iik7CisKKyAgICBpZiAoZmxhZ3Mp
IHsKKyAgICAgICAgdWludDMyX3QgbWF4aW11bUludDsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VWYXJVSW50MzIobWF4aW11bUludCksICJjYW4ndCBwYXJzZSByZXNpemFibGUg
bGltaXRzIG1heGltdW0gcGFnZSBjb3VudCIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KGluaXRpYWwgPiBtYXhpbXVtSW50LCAicmVzaXphYmxlIGxpbWl0cyBoYXMgYSBpbml0aWFsIHBh
Z2UgY291bnQgb2YgIiwgaW5pdGlhbCwgIiB3aGljaCBpcyBncmVhdGVyIHRoYW4gaXRzIG1heGlt
dW0gIiwgbWF4aW11bUludCk7CisgICAgICAgIG1heGltdW0gPSBtYXhpbXVtSW50OworICAgIH0K
KworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VUYWJsZUhl
bHBlcihib29sIGlzSW1wb3J0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihtX2luZm8tPnRhYmxlQ291bnQoKSA+IDAsICJDYW5ub3QgaGF2ZSBtb3JlIHRoYW4g
b25lIFRhYmxlIGZvciBub3ciKTsKKworICAgIGludDhfdCB0eXBlOworICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXBhcnNlSW50Nyh0eXBlKSwgImNhbid0IHBhcnNlIFRhYmxlIHR5cGUiKTsKKyAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKHR5cGUgIT0gV2FzbTo6QW55ZnVuYywgIlRhYmxlIHR5cGUg
c2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAiLCB0eXBlKTsKKworICAgIHVpbnQzMl90IGluaXRpYWw7
CisgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bTsKKyAgICBQYXJ0aWFsUmVzdWx0
IGxpbWl0cyA9IHBhcnNlUmVzaXphYmxlTGltaXRzKGluaXRpYWwsIG1heGltdW0pOworICAgIGlm
IChVTkxJS0VMWSghbGltaXRzKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFdURk1v
dmUobGltaXRzLmVycm9yKCkpKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluaXRpYWwgPiBt
YXhUYWJsZUVudHJpZXMsICJUYWJsZSdzIGluaXRpYWwgcGFnZSBjb3VudCBvZiAiLCBpbml0aWFs
LCAiIGlzIHRvbyBiaWcsIG1heGltdW0gIiwgbWF4VGFibGVFbnRyaWVzKTsKKworICAgIEFTU0VS
VCghbWF4aW11bSB8fCAqbWF4aW11bSA+PSBpbml0aWFsKTsKKworICAgIG1faW5mby0+dGFibGVJ
bmZvcm1hdGlvbiA9IFRhYmxlSW5mb3JtYXRpb24oaW5pdGlhbCwgbWF4aW11bSwgaXNJbXBvcnQp
OworCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZVRhYmxl
KCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHVpbnQzMl90IGNvdW50OworICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGNvdW50KSwgImNhbid0IGdldCBUYWJsZSdzIGNv
dW50Iik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihjb3VudCA+IDEsICJUYWJsZSBjb3VudCBv
ZiAiLCBjb3VudCwgIiBpcyBpbnZhbGlkLCBhdCBtb3N0IDEgaXMgYWxsb3dlZCBmb3Igbm93Iik7
CisKKyAgICBpZiAoIWNvdW50KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgYm9vbCBpc0lt
cG9ydCA9IGZhbHNlOworICAgIFBhcnRpYWxSZXN1bHQgcmVzdWx0ID0gcGFyc2VUYWJsZUhlbHBl
cihpc0ltcG9ydCk7CisgICAgaWYgKFVOTElLRUxZKCFyZXN1bHQpKQorICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoV1RGTW92ZShyZXN1bHQuZXJyb3IoKSkpOworCisgICAgcmV0dXJuIHsg
fTsKK30KKworYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZU1lbW9yeUhlbHBlcihib29sIGlzSW1w
b3J0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX2luZm8t
Pm1lbW9yeUNvdW50KCksICJ0aGVyZSBjYW4gYXQgbW9zdCBiZSBvbmUgTWVtb3J5IHNlY3Rpb24g
Zm9yIG5vdyIpOworCisgICAgUGFnZUNvdW50IGluaXRpYWxQYWdlQ291bnQ7CisgICAgUGFnZUNv
dW50IG1heGltdW1QYWdlQ291bnQ7CisgICAgeworICAgICAgICB1aW50MzJfdCBpbml0aWFsOwor
ICAgICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtOworICAgICAgICBQYXJ0aWFs
UmVzdWx0IGxpbWl0cyA9IHBhcnNlUmVzaXphYmxlTGltaXRzKGluaXRpYWwsIG1heGltdW0pOwor
ICAgICAgICBpZiAoVU5MSUtFTFkoIWxpbWl0cykpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoV1RGTW92ZShsaW1pdHMuZXJyb3IoKSkpOworICAgICAgICBBU1NFUlQoIW1heGlt
dW0gfHwgKm1heGltdW0gPj0gaW5pdGlhbCk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IVBhZ2VDb3VudDo6aXNWYWxpZChpbml0aWFsKSwgIk1lbW9yeSdzIGluaXRpYWwgcGFnZSBjb3Vu
dCBvZiAiLCBpbml0aWFsLCAiIGlzIGludmFsaWQiKTsKKworICAgICAgICBpbml0aWFsUGFnZUNv
dW50ID0gUGFnZUNvdW50KGluaXRpYWwpOworCisgICAgICAgIGlmIChtYXhpbXVtKSB7CisgICAg
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFQYWdlQ291bnQ6OmlzVmFsaWQoKm1heGltdW0p
LCAiTWVtb3J5J3MgbWF4aW11bSBwYWdlIGNvdW50IG9mICIsICptYXhpbXVtLCAiIGlzIGludmFs
aWQiKTsKKyAgICAgICAgICAgIG1heGltdW1QYWdlQ291bnQgPSBQYWdlQ291bnQoKm1heGltdW0p
OworICAgICAgICB9CisgICAgfQorICAgIEFTU0VSVChpbml0aWFsUGFnZUNvdW50KTsKKyAgICBB
U1NFUlQoIW1heGltdW1QYWdlQ291bnQgfHwgbWF4aW11bVBhZ2VDb3VudCA+PSBpbml0aWFsUGFn
ZUNvdW50KTsKKworICAgIG1faW5mby0+bWVtb3J5ID0gTWVtb3J5SW5mb3JtYXRpb24oaW5pdGlh
bFBhZ2VDb3VudCwgbWF4aW11bVBhZ2VDb3VudCwgaXNJbXBvcnQpOworICAgIHJldHVybiB7IH07
Cit9CisKK2F1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VNZW1vcnkoKSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgdWludDhfdCBjb3VudDsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZh
clVJbnQxKGNvdW50KSwgImNhbid0IHBhcnNlIE1lbW9yeSBzZWN0aW9uJ3MgY291bnQiKTsKKwor
ICAgIGlmICghY291bnQpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKGNvdW50ICE9IDEsICJNZW1vcnkgc2VjdGlvbiBoYXMgbW9yZSB0aGFuIG9uZSBtZW1v
cnksIFdlYkFzc2VtYmx5IGN1cnJlbnRseSBvbmx5IGFsbG93cyB6ZXJvIG9yIG9uZSIpOworCisg
ICAgYm9vbCBpc0ltcG9ydCA9IGZhbHNlOworICAgIHJldHVybiBwYXJzZU1lbW9yeUhlbHBlcihp
c0ltcG9ydCk7Cit9CisKK2F1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VHbG9iYWwoKSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgdWludDMyX3QgZ2xvYmFsQ291bnQ7CisgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighcGFyc2VWYXJVSW50MzIoZ2xvYmFsQ291bnQpLCAiY2FuJ3QgZ2V0IEdsb2JhbCBz
ZWN0aW9uJ3MgY291bnQiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGdsb2JhbENvdW50ID4g
bWF4R2xvYmFscywgIkdsb2JhbCBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBnbG9iYWxD
b3VudCwgIiBtYXhpbXVtICIsIG1heEdsb2JhbHMpOworICAgIHNpemVfdCB0b3RhbEJ5dGVzID0g
Z2xvYmFsQ291bnQgKyBtX2luZm8tPmZpcnN0SW50ZXJuYWxHbG9iYWw7CisgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRigoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHRvdGFsQnl0ZXMpIDwgZ2xvYmFsQ291
bnQpIHx8ICFtX2luZm8tPmdsb2JhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KHRvdGFsQnl0ZXMpLCAi
Y2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiLCB0b3RhbEJ5dGVzLCAiIGdsb2JhbHMiKTsKKwor
ICAgIGZvciAodWludDMyX3QgZ2xvYmFsSW5kZXggPSAwOyBnbG9iYWxJbmRleCA8IGdsb2JhbENv
dW50OyArK2dsb2JhbEluZGV4KSB7CisgICAgICAgIEdsb2JhbCBnbG9iYWw7CisgICAgICAgIHVp
bnQ4X3QgaW5pdE9wY29kZTsKKworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBh
cnNlR2xvYmFsVHlwZShnbG9iYWwpKTsKKyAgICAgICAgVHlwZSB0eXBlRm9ySW5pdE9wY29kZTsK
KyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUluaXRFeHByKGluaXRPcGNv
ZGUsIGdsb2JhbC5pbml0aWFsQml0c09ySW1wb3J0TnVtYmVyLCB0eXBlRm9ySW5pdE9wY29kZSkp
OworICAgICAgICBpZiAoaW5pdE9wY29kZSA9PSBHZXRHbG9iYWwpCisgICAgICAgICAgICBnbG9i
YWwuaW5pdGlhbGl6YXRpb25UeXBlID0gR2xvYmFsOjpGcm9tR2xvYmFsSW1wb3J0OworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBnbG9iYWwuaW5pdGlhbGl6YXRpb25UeXBlID0gR2xvYmFsOjpG
cm9tRXhwcmVzc2lvbjsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0eXBlRm9ySW5pdE9w
Y29kZSAhPSBnbG9iYWwudHlwZSwgIkdsb2JhbCBpbml0X2V4cHIgb3Bjb2RlIG9mIHR5cGUgIiwg
dHlwZUZvckluaXRPcGNvZGUsICIgZG9lc24ndCBtYXRjaCBnbG9iYWwncyB0eXBlICIsIGdsb2Jh
bC50eXBlKTsKKworICAgICAgICBtX2luZm8tPmdsb2JhbHMudW5jaGVja2VkQXBwZW5kKFdURk1v
dmUoZ2xvYmFsKSk7CisgICAgfQorCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBTZWN0aW9u
UGFyc2VyOjpwYXJzZUV4cG9ydCgpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1aW50MzJfdCBl
eHBvcnRDb3VudDsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihleHBv
cnRDb3VudCksICJjYW4ndCBnZXQgRXhwb3J0IHNlY3Rpb24ncyBjb3VudCIpOworICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoZXhwb3J0Q291bnQgPiBtYXhFeHBvcnRzLCAiRXhwb3J0IHNlY3Rpb24n
cyBjb3VudCBpcyB0b28gYmlnICIsIGV4cG9ydENvdW50LCAiIG1heGltdW0gIiwgbWF4RXhwb3J0
cyk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5leHBvcnRzLnRyeVJlc2VydmVD
YXBhY2l0eShleHBvcnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAi
LCBleHBvcnRDb3VudCwgIiBleHBvcnRzIik7CisKKyAgICBIYXNoU2V0PFN0cmluZz4gZXhwb3J0
TmFtZXM7CisgICAgZm9yICh1aW50MzJfdCBleHBvcnROdW1iZXIgPSAwOyBleHBvcnROdW1iZXIg
PCBleHBvcnRDb3VudDsgKytleHBvcnROdW1iZXIpIHsKKyAgICAgICAgdWludDMyX3QgZmllbGRM
ZW47CisgICAgICAgIE5hbWUgZmllbGRTdHJpbmc7CisgICAgICAgIEV4dGVybmFsS2luZCBraW5k
OworICAgICAgICB1bnNpZ25lZCBraW5kSW5kZXg7CisKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VWYXJVSW50MzIoZmllbGRMZW4pLCAiY2FuJ3QgZ2V0ICIsIGV4cG9ydE51bWJl
ciwgInRoIEV4cG9ydCdzIGZpZWxkIG5hbWUgbGVuZ3RoIik7CisgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIWNvbnN1bWVVVEY4U3RyaW5nKGZpZWxkU3RyaW5nLCBmaWVsZExlbiksICJjYW4n
dCBnZXQgIiwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0J3MgZmllbGQgbmFtZSBvZiBsZW5ndGgg
IiwgZmllbGRMZW4pOworICAgICAgICBTdHJpbmcgZmllbGROYW1lID0gU3RyaW5nOjpmcm9tVVRG
OChmaWVsZFN0cmluZyk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZXhwb3J0TmFtZXMu
Y29udGFpbnMoZmllbGROYW1lKSwgImR1cGxpY2F0ZSBleHBvcnQ6ICciLCBmaWVsZFN0cmluZywg
IiciKTsKKyAgICAgICAgZXhwb3J0TmFtZXMuYWRkKGZpZWxkTmFtZSk7CisKKyAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighcGFyc2VFeHRlcm5hbEtpbmQoa2luZCksICJjYW4ndCBnZXQgIiwg
ZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0J3Mga2luZCwgbmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAi
JyIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihraW5kSW5k
ZXgpLCAiY2FuJ3QgZ2V0ICIsIGV4cG9ydE51bWJlciwgInRoIEV4cG9ydCdzIGtpbmQgaW5kZXgs
IG5hbWVkICciLCBmaWVsZFN0cmluZywgIiciKTsKKyAgICAgICAgc3dpdGNoIChraW5kKSB7Cisg
ICAgICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpGdW5jdGlvbjogeworICAgICAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRihraW5kSW5kZXggPj0gbV9pbmZvLT5mdW5jdGlvbkluZGV4U3BhY2VTaXpl
KCksIGV4cG9ydE51bWJlciwgInRoIEV4cG9ydCBoYXMgaW52YWxpZCBmdW5jdGlvbiBudW1iZXIg
Iiwga2luZEluZGV4LCAiIGl0IGV4Y2VlZHMgdGhlIGZ1bmN0aW9uIGluZGV4IHNwYWNlICIsIG1f
aW5mby0+ZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgpLCAiLCBuYW1lZCAnIiwgZmllbGRTdHJpbmcs
ICInIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEV4dGVy
bmFsS2luZDo6VGFibGU6IHsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoa2luZElu
ZGV4ID49IG1faW5mby0+dGFibGVDb3VudCgpLCAiY2FuJ3QgZXhwb3J0IFRhYmxlICIsIGtpbmRJ
bmRleCwgIiB0aGVyZSBhcmUgIiwgbV9pbmZvLT50YWJsZUNvdW50KCksICIgVGFibGVzIik7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEV4dGVybmFsS2luZDo6
TWVtb3J5OiB7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPm1lbW9y
eSwgImNhbid0IGV4cG9ydCBhIG5vbi1leGlzdGVudCBNZW1vcnkiKTsKKyAgICAgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoa2luZEluZGV4LCAiY2FuJ3QgZXhwb3J0IE1lbW9yeSAiLCBraW5k
SW5kZXgsICIgb25seSBvbmUgVGFibGUgaXMgY3VycmVudGx5IHN1cHBvcnRlZCIpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6Okdsb2Jh
bDogeworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihraW5kSW5kZXggPj0gbV9pbmZv
LT5nbG9iYWxzLnNpemUoKSwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0IGhhcyBpbnZhbGlkIGds
b2JhbCBudW1iZXIgIiwga2luZEluZGV4LCAiIGl0IGV4Y2VlZHMgdGhlIGdsb2JhbHMgY291bnQg
IiwgbV9pbmZvLT5nbG9iYWxzLnNpemUoKSwgIiwgbmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIp
OworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX2luZm8tPmdsb2JhbHNba2luZElu
ZGV4XS5tdXRhYmlsaXR5ICE9IEdsb2JhbDo6SW1tdXRhYmxlLCBleHBvcnROdW1iZXIsICJ0aCBF
eHBvcnQgaXNuJ3QgaW1tdXRhYmxlLCBuYW1lZCAnIiwgZmllbGRTdHJpbmcsICInIik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbV9pbmZvLT5l
eHBvcnRzLnVuY2hlY2tlZEFwcGVuZCh7IFdURk1vdmUoZmllbGRTdHJpbmcpLCBraW5kLCBraW5k
SW5kZXggfSk7CisgICAgfQorCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBTZWN0aW9uUGFy
c2VyOjpwYXJzZVN0YXJ0KCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHVpbnQzMl90IHN0YXJ0
RnVuY3Rpb25JbmRleDsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihz
dGFydEZ1bmN0aW9uSW5kZXgpLCAiY2FuJ3QgZ2V0IFN0YXJ0IGluZGV4Iik7CisgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRihzdGFydEZ1bmN0aW9uSW5kZXggPj0gbV9pbmZvLT5mdW5jdGlvbkluZGV4
U3BhY2VTaXplKCksICJTdGFydCBpbmRleCAiLCBzdGFydEZ1bmN0aW9uSW5kZXgsICIgZXhjZWVk
cyBmdW5jdGlvbiBpbmRleCBzcGFjZSAiLCBtX2luZm8tPmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUo
KSk7CisgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX2luZm8tPnNpZ25hdHVy
ZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXgpOworICAgIGNv
bnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWdu
YXR1cmVJbmRleCk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihzaWduYXR1cmUuYXJndW1lbnRD
b3VudCgpLCAiU3RhcnQgZnVuY3Rpb24gY2FuJ3QgaGF2ZSBhcmd1bWVudHMiKTsKKyAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKHNpZ25hdHVyZS5yZXR1cm5UeXBlKCkgIT0gVm9pZCwgIlN0YXJ0IGZ1
bmN0aW9uIGNhbid0IHJldHVybiBhIHZhbHVlIik7CisgICAgbV9pbmZvLT5zdGFydEZ1bmN0aW9u
SW5kZXhTcGFjZSA9IHN0YXJ0RnVuY3Rpb25JbmRleDsKKyAgICByZXR1cm4geyB9OworfQorCith
dXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlRWxlbWVudCgpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICB1aW50MzJfdCBlbGVtZW50Q291bnQ7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VW
YXJVSW50MzIoZWxlbWVudENvdW50KSwgImNhbid0IGdldCBFbGVtZW50IHNlY3Rpb24ncyBjb3Vu
dCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZWxlbWVudENvdW50ID4gbWF4VGFibGVFbnRy
aWVzLCAiRWxlbWVudCBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBlbGVtZW50Q291bnQs
ICIgbWF4aW11bSAiLCBtYXhUYWJsZUVudHJpZXMpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IW1faW5mby0+ZWxlbWVudHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGVsZW1lbnRDb3VudCksICJjYW4n
dCBhbGxvY2F0ZSBtZW1vcnkgZm9yICIsIGVsZW1lbnRDb3VudCwgIiBFbGVtZW50cyIpOworICAg
IGZvciAodW5zaWduZWQgZWxlbWVudE51bSA9IDA7IGVsZW1lbnROdW0gPCBlbGVtZW50Q291bnQ7
ICsrZWxlbWVudE51bSkgeworICAgICAgICB1aW50MzJfdCB0YWJsZUluZGV4OworICAgICAgICB1
aW50NjRfdCBpbml0RXhwckJpdHM7CisgICAgICAgIHVpbnQ4X3QgaW5pdE9wY29kZTsKKyAgICAg
ICAgdWludDMyX3QgaW5kZXhDb3VudDsKKworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFw
YXJzZVZhclVJbnQzMih0YWJsZUluZGV4KSwgImNhbid0IGdldCAiLCBlbGVtZW50TnVtLCAidGgg
RWxlbWVudCB0YWJsZSBpbmRleCIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHRhYmxl
SW5kZXggPj0gbV9pbmZvLT50YWJsZUNvdW50KCksICJFbGVtZW50IHNlY3Rpb24gZm9yIFRhYmxl
ICIsIHRhYmxlSW5kZXgsICIgZXhjZWVkcyBhdmFpbGFibGUgVGFibGUgIiwgbV9pbmZvLT50YWJs
ZUNvdW50KCkpOworICAgICAgICBUeXBlIGluaXRFeHByVHlwZTsKKyAgICAgICAgV0FTTV9GQUlM
X0lGX0hFTFBFUl9GQUlMUyhwYXJzZUluaXRFeHByKGluaXRPcGNvZGUsIGluaXRFeHByQml0cywg
aW5pdEV4cHJUeXBlKSk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoaW5pdEV4cHJUeXBl
ICE9IEkzMiwgIkVsZW1lbnQgaW5pdF9leHByIG11c3QgcHJvZHVjZSBhbiBpMzIiKTsKKyAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoaW5kZXhDb3VudCksICJjYW4n
dCBnZXQgIiwgZWxlbWVudE51bSwgInRoIGluZGV4IGNvdW50IGZvciBFbGVtZW50IHNlY3Rpb24i
KTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbmRleENvdW50ID09IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwgIkVsZW1lbnQgc2VjdGlvbidzICIsIGVsZW1lbnRO
dW0sICJ0aCBpbmRleCBjb3VudCBpcyB0b28gYmlnICIsIGluZGV4Q291bnQpOworCisgICAgICAg
IEFTU0VSVCghIW1faW5mby0+dGFibGVJbmZvcm1hdGlvbik7CisKKyAgICAgICAgRWxlbWVudCBl
bGVtZW50KG1ha2VJMzJJbml0RXhwcihpbml0T3Bjb2RlLCBpbml0RXhwckJpdHMpKTsKKyAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighZWxlbWVudC5mdW5jdGlvbkluZGljZXMudHJ5UmVzZXJ2
ZUNhcGFjaXR5KGluZGV4Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiLCBpbmRl
eENvdW50LCAiIEVsZW1lbnQgaW5kaWNlcyIpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaW5k
ZXggPSAwOyBpbmRleCA8IGluZGV4Q291bnQ7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIHVpbnQz
Ml90IGZ1bmN0aW9uSW5kZXg7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJz
ZVZhclVJbnQzMihmdW5jdGlvbkluZGV4KSwgImNhbid0IGdldCBFbGVtZW50IHNlY3Rpb24ncyAi
LCBlbGVtZW50TnVtLCAidGggZWxlbWVudCdzICIsIGluZGV4LCAidGggaW5kZXgiKTsKKyAgICAg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25JbmRleCA+PSBtX2luZm8tPmZ1bmN0
aW9uSW5kZXhTcGFjZVNpemUoKSwgIkVsZW1lbnQgc2VjdGlvbidzICIsIGVsZW1lbnROdW0sICJ0
aCBlbGVtZW50J3MgIiwgaW5kZXgsICJ0aCBpbmRleCBpcyAiLCBmdW5jdGlvbkluZGV4LCAiIHdo
aWNoIGV4Y2VlZHMgdGhlIGZ1bmN0aW9uIGluZGV4IHNwYWNlIHNpemUgb2YgIiwgbV9pbmZvLT5m
dW5jdGlvbkluZGV4U3BhY2VTaXplKCkpOworCisgICAgICAgICAgICBlbGVtZW50LmZ1bmN0aW9u
SW5kaWNlcy51bmNoZWNrZWRBcHBlbmQoZnVuY3Rpb25JbmRleCk7CisgICAgICAgIH0KKworICAg
ICAgICBtX2luZm8tPmVsZW1lbnRzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGVsZW1lbnQpKTsK
KyAgICB9CisKKyAgICByZXR1cm4geyB9OworfQorCisvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUg
Y2hhbmdlZCB0byBiZSBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCBvbmNlIHdlIHN3aXRjaCBv
dXIgcGFyc2luZyBpbmZyYXN0cnVjdHVyZSB0byB0aGUgc3RyZWFtaW5nIHBhcnNlci4KK2F1dG8g
U2VjdGlvblBhcnNlcjo6cGFyc2VDb2RlKCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHVpbnQz
Ml90IGNvdW50OworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGNvdW50
KSwgImNhbid0IGdldCBDb2RlIHNlY3Rpb24ncyBjb3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoY291bnQgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLCAiQ29k
ZSBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBjb3VudCk7CisgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihjb3VudCAhPSBtX2luZm8tPmZ1bmN0aW9ucy5zaXplKCksICJDb2RlIHNlY3Rpb24g
Y291bnQgIiwgY291bnQsICIgZXhjZWVkcyB0aGUgZGVjbGFyZWQgbnVtYmVyIG9mIGZ1bmN0aW9u
cyAiLCBtX2luZm8tPmZ1bmN0aW9ucy5zaXplKCkpOworCisgICAgZm9yICh1aW50MzJfdCBpID0g
MDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgdWludDMyX3QgZnVuY3Rpb25TaXplOworICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihmdW5jdGlvblNpemUpLCAi
Y2FuJ3QgZ2V0ICIsIGksICJ0aCBDb2RlIGZ1bmN0aW9uJ3Mgc2l6ZSIpOworICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKGZ1bmN0aW9uU2l6ZSA+IGxlbmd0aCgpLCAiQ29kZSBmdW5jdGlvbidz
IHNpemUgIiwgZnVuY3Rpb25TaXplLCAiIGV4Y2VlZHMgdGhlIG1vZHVsZSdzIHNpemUgIiwgbGVu
Z3RoKCkpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGZ1bmN0aW9uU2l6ZSA+IGxlbmd0
aCgpIC0gbV9vZmZzZXQsICJDb2RlIGZ1bmN0aW9uJ3Mgc2l6ZSAiLCBmdW5jdGlvblNpemUsICIg
ZXhjZWVkcyB0aGUgbW9kdWxlJ3MgcmVtYWluaW5nIHNpemUiLCBsZW5ndGgoKSAtIG1fb2Zmc2V0
KTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvblNpemUgPiBtYXhGdW5jdGlv
blNpemUsICJDb2RlIGZ1bmN0aW9uJ3Mgc2l6ZSAiLCBmdW5jdGlvblNpemUsICIgaXMgdG9vIGJp
ZyIpOworCisgICAgICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhKGZ1bmN0aW9uU2l6ZSk7CisgICAg
ICAgIHN0ZDo6bWVtY3B5KGRhdGEuZGF0YSgpLCBzb3VyY2UoKSArIG1fb2Zmc2V0LCBmdW5jdGlv
blNpemUpOworICAgICAgICBtX2luZm8tPmZ1bmN0aW9uc1tpXS5zdGFydCA9IG1fb2Zmc2V0SW5T
b3VyY2UgKyBtX29mZnNldDsKKyAgICAgICAgbV9pbmZvLT5mdW5jdGlvbnNbaV0uZW5kID0gbV9v
ZmZzZXRJblNvdXJjZSArIG1fb2Zmc2V0ICsgZnVuY3Rpb25TaXplOworICAgICAgICBtX2luZm8t
PmZ1bmN0aW9uc1tpXS5kYXRhID0gV1RGTW92ZShkYXRhKTsKKyAgICAgICAgbV9vZmZzZXQgKz0g
ZnVuY3Rpb25TaXplOworICAgIH0KKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gU2VjdGlv
blBhcnNlcjo6cGFyc2VJbml0RXhwcih1aW50OF90JiBvcGNvZGUsIHVpbnQ2NF90JiBiaXRzT3JJ
bXBvcnROdW1iZXIsIFR5cGUmIHJlc3VsdFR5cGUpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ4KG9wY29kZSksICJjYW4ndCBnZXQgaW5pdF9l
eHByJ3Mgb3Bjb2RlIik7CisKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgSTMyQ29u
c3Q6IHsKKyAgICAgICAgaW50MzJfdCBjb25zdGFudDsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VWYXJJbnQzMihjb25zdGFudCksICJjYW4ndCBnZXQgY29uc3RhbnQgdmFsdWUg
Zm9yIGluaXRfZXhwcidzIGkzMi5jb25zdCIpOworICAgICAgICBiaXRzT3JJbXBvcnROdW1iZXIg
PSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oY29uc3RhbnQpOworICAgICAgICByZXN1bHRUeXBlID0g
STMyOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEk2NENvbnN0OiB7CisgICAg
ICAgIGludDY0X3QgY29uc3RhbnQ7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNl
VmFySW50NjQoY29uc3RhbnQpLCAiY2FuJ3QgZ2V0IGNvbnN0YW50IHZhbHVlIGZvciBpbml0X2V4
cHIncyBpNjQuY29uc3QiKTsKKyAgICAgICAgYml0c09ySW1wb3J0TnVtYmVyID0gY29uc3RhbnQ7
CisgICAgICAgIHJlc3VsdFR5cGUgPSBJNjQ7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IGNhc2UgRjMyQ29uc3Q6IHsKKyAgICAgICAgdWludDMyX3QgY29uc3RhbnQ7CisgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUludDMyKGNvbnN0YW50KSwgImNhbid0IGdldCBjb25z
dGFudCB2YWx1ZSBmb3IgaW5pdF9leHByJ3MgZjMyLmNvbnN0Iik7CisgICAgICAgIGJpdHNPcklt
cG9ydE51bWJlciA9IGNvbnN0YW50OworICAgICAgICByZXN1bHRUeXBlID0gRjMyOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEY2NENvbnN0OiB7CisgICAgICAgIHVpbnQ2NF90
IGNvbnN0YW50OworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ2NChjb25z
dGFudCksICJjYW4ndCBnZXQgY29uc3RhbnQgdmFsdWUgZm9yIGluaXRfZXhwcidzIGY2NC5jb25z
dCIpOworICAgICAgICBiaXRzT3JJbXBvcnROdW1iZXIgPSBjb25zdGFudDsKKyAgICAgICAgcmVz
dWx0VHlwZSA9IEY2NDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBHZXRHbG9i
YWw6IHsKKyAgICAgICAgdWludDMyX3QgaW5kZXg7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIXBhcnNlVmFyVUludDMyKGluZGV4KSwgImNhbid0IGdldCBnZXRfZ2xvYmFsJ3MgaW5kZXgi
KTsKKworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluZGV4ID49IG1faW5mby0+Z2xvYmFs
cy5zaXplKCksICJnZXRfZ2xvYmFsJ3MgaW5kZXggIiwgaW5kZXgsICIgZXhjZWVkcyB0aGUgbnVt
YmVyIG9mIGdsb2JhbHMgIiwgbV9pbmZvLT5nbG9iYWxzLnNpemUoKSk7CisgICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoaW5kZXggPj0gbV9pbmZvLT5maXJzdEludGVybmFsR2xvYmFsLCAiZ2V0
X2dsb2JhbCBpbXBvcnQga2luZCBpbmRleCAiLCBpbmRleCwgIiBleGNlZWRzIHRoZSBmaXJzdCBp
bnRlcm5hbCBnbG9iYWwgIiwgbV9pbmZvLT5maXJzdEludGVybmFsR2xvYmFsKTsKKworICAgICAg
ICBBU1NFUlQobV9pbmZvLT5nbG9iYWxzW2luZGV4XS5tdXRhYmlsaXR5ID09IEdsb2JhbDo6SW1t
dXRhYmxlKTsKKyAgICAgICAgcmVzdWx0VHlwZSA9IG1faW5mby0+Z2xvYmFsc1tpbmRleF0udHlw
ZTsKKyAgICAgICAgYml0c09ySW1wb3J0TnVtYmVyID0gaW5kZXg7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGRlZmF1bHQ6CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYodHJ1ZSwg
InVua25vd24gaW5pdF9leHByIG9wY29kZSAiLCBvcGNvZGUpOworICAgIH0KKworICAgIHVpbnQ4
X3QgZW5kT3Bjb2RlOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUludDgoZW5kT3Bj
b2RlKSwgImNhbid0IGdldCBpbml0X2V4cHIncyBlbmQgb3Bjb2RlIik7CisgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRihlbmRPcGNvZGUgIT0gT3BUeXBlOjpFbmQsICJpbml0X2V4cHIgc2hvdWxkIGVu
ZCB3aXRoIGVuZCwgZW5kZWQgd2l0aCAiLCBlbmRPcGNvZGUpOworCisgICAgcmV0dXJuIHsgfTsK
K30KKworYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZUdsb2JhbFR5cGUoR2xvYmFsJiBnbG9iYWwp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1aW50OF90IG11dGFiaWxpdHk7CisgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighcGFyc2VWYWx1ZVR5cGUoZ2xvYmFsLnR5cGUpLCAiY2FuJ3QgZ2V0IEds
b2JhbCdzIHZhbHVlIHR5cGUiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJ
bnQxKG11dGFiaWxpdHkpLCAiY2FuJ3QgZ2V0IEdsb2JhbCB0eXBlJ3MgbXV0YWJpbGl0eSIpOwor
ICAgIGdsb2JhbC5tdXRhYmlsaXR5ID0gc3RhdGljX2Nhc3Q8R2xvYmFsOjpNdXRhYmlsaXR5Piht
dXRhYmlsaXR5KTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIFNlY3Rpb25QYXJzZXI6OnBh
cnNlRGF0YSgpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1aW50MzJfdCBzZWdtZW50Q291bnQ7
CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoc2VnbWVudENvdW50KSwg
ImNhbid0IGdldCBEYXRhIHNlY3Rpb24ncyBjb3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoc2VnbWVudENvdW50ID4gbWF4RGF0YVNlZ21lbnRzLCAiRGF0YSBzZWN0aW9uJ3MgY291bnQg
aXMgdG9vIGJpZyAiLCBzZWdtZW50Q291bnQsICIgbWF4aW11bSAiLCBtYXhEYXRhU2VnbWVudHMp
OworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+ZGF0YS50cnlSZXNlcnZlQ2FwYWNp
dHkoc2VnbWVudENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIERhdGEg
c2VjdGlvbidzICIsIHNlZ21lbnRDb3VudCwgIiBzZWdtZW50cyIpOworCisgICAgZm9yICh1aW50
MzJfdCBzZWdtZW50TnVtYmVyID0gMDsgc2VnbWVudE51bWJlciA8IHNlZ21lbnRDb3VudDsgKytz
ZWdtZW50TnVtYmVyKSB7CisgICAgICAgIHVpbnQzMl90IG1lbW9yeUluZGV4OworICAgICAgICB1
aW50NjRfdCBpbml0RXhwckJpdHM7CisgICAgICAgIHVpbnQ4X3QgaW5pdE9wY29kZTsKKyAgICAg
ICAgdWludDMyX3QgZGF0YUJ5dGVMZW5ndGg7CisKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RighcGFyc2VWYXJVSW50MzIobWVtb3J5SW5kZXgpLCAiY2FuJ3QgZ2V0ICIsIHNlZ21lbnROdW1i
ZXIsICJ0aCBEYXRhIHNlZ21lbnQncyBpbmRleCIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKG1lbW9yeUluZGV4ID49IG1faW5mby0+bWVtb3J5Q291bnQoKSwgc2VnbWVudE51bWJlciwg
InRoIERhdGEgc2VnbWVudCBoYXMgaW5kZXggIiwgbWVtb3J5SW5kZXgsICIgd2hpY2ggZXhjZWVk
cyB0aGUgbnVtYmVyIG9mIE1lbW9yaWVzICIsIG1faW5mby0+bWVtb3J5Q291bnQoKSk7CisgICAg
ICAgIFR5cGUgaW5pdEV4cHJUeXBlOworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxT
KHBhcnNlSW5pdEV4cHIoaW5pdE9wY29kZSwgaW5pdEV4cHJCaXRzLCBpbml0RXhwclR5cGUpKTsK
KyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbml0RXhwclR5cGUgIT0gSTMyLCBzZWdtZW50
TnVtYmVyLCAidGggRGF0YSBzZWdtZW50J3MgaW5pdF9leHByIG11c3QgcHJvZHVjZSBhbiBpMzIi
KTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZGF0YUJ5dGVM
ZW5ndGgpLCAiY2FuJ3QgZ2V0ICIsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQncyBk
YXRhIGJ5dGUgbGVuZ3RoIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZGF0YUJ5dGVM
ZW5ndGggPiBtYXhNb2R1bGVTaXplLCBzZWdtZW50TnVtYmVyLCAidGggRGF0YSBzZWdtZW50J3Mg
ZGF0YSBieXRlIGxlbmd0aCBpcyB0b28gYmlnICIsIGRhdGFCeXRlTGVuZ3RoLCAiIG1heGltdW0g
IiwgbWF4TW9kdWxlU2l6ZSk7CisKKyAgICAgICAgU2VnbWVudCogc2VnbWVudCA9IFNlZ21lbnQ6
OmNyZWF0ZShtYWtlSTMySW5pdEV4cHIoaW5pdE9wY29kZSwgaW5pdEV4cHJCaXRzKSwgZGF0YUJ5
dGVMZW5ndGgpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFzZWdtZW50LCAiY2FuJ3Qg
YWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgc2VnbWVudE51bWJlciwgInRoIERhdGEgc2Vn
bWVudCBvZiBzaXplICIsIGRhdGFCeXRlTGVuZ3RoKTsKKyAgICAgICAgbV9pbmZvLT5kYXRhLnVu
Y2hlY2tlZEFwcGVuZChTZWdtZW50OjphZG9wdFB0cihzZWdtZW50KSk7CisgICAgICAgIGZvciAo
dWludDMyX3QgZGF0YUJ5dGUgPSAwOyBkYXRhQnl0ZSA8IGRhdGFCeXRlTGVuZ3RoOyArK2RhdGFC
eXRlKSB7CisgICAgICAgICAgICB1aW50OF90IGJ5dGU7CisgICAgICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVVJbnQ4KGJ5dGUpLCAiY2FuJ3QgZ2V0ICIsIGRhdGFCeXRlLCAidGgg
ZGF0YSBieXRlIGZyb20gIiwgc2VnbWVudE51bWJlciwgInRoIERhdGEgc2VnbWVudCIpOworICAg
ICAgICAgICAgc2VnbWVudC0+Ynl0ZShkYXRhQnl0ZSkgPSBieXRlOworICAgICAgICB9CisgICAg
fQorICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VDdXN0b20o
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQ3VzdG9tU2VjdGlvbiBzZWN0aW9uOworICAgIHVp
bnQzMl90IGN1c3RvbVNlY3Rpb25OdW1iZXIgPSBtX2luZm8tPmN1c3RvbVNlY3Rpb25zLnNpemUo
KSArIDE7CisgICAgdWludDMyX3QgbmFtZUxlbjsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFt
X2luZm8tPmN1c3RvbVNlY3Rpb25zLnRyeVJlc2VydmVDYXBhY2l0eShjdXN0b21TZWN0aW9uTnVt
YmVyKSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGN1c3RvbVNlY3Rpb25O
dW1iZXIsICJ0aCBjdXN0b20gc2VjdGlvbiIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBh
cnNlVmFyVUludDMyKG5hbWVMZW4pLCAiY2FuJ3QgZ2V0ICIsIGN1c3RvbVNlY3Rpb25OdW1iZXIs
ICJ0aCBjdXN0b20gc2VjdGlvbidzIG5hbWUgbGVuZ3RoIik7CisgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighY29uc3VtZVVURjhTdHJpbmcoc2VjdGlvbi5uYW1lLCBuYW1lTGVuKSwgIm5hbWVMZW4g
Z2V0ICIsIGN1c3RvbVNlY3Rpb25OdW1iZXIsICJ0aCBjdXN0b20gc2VjdGlvbidzIG5hbWUgb2Yg
bGVuZ3RoICIsIG5hbWVMZW4pOworCisgICAgdWludDMyX3QgcGF5bG9hZEJ5dGVzID0gbGVuZ3Ro
KCkgLSBtX29mZnNldDsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFzZWN0aW9uLnBheWxvYWQu
dHJ5UmVzZXJ2ZUNhcGFjaXR5KHBheWxvYWRCeXRlcyksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2gg
bWVtb3J5IGZvciAiLCBjdXN0b21TZWN0aW9uTnVtYmVyLCAidGggY3VzdG9tIHNlY3Rpb24ncyAi
LCBwYXlsb2FkQnl0ZXMsICIgYnl0ZXMiKTsKKyAgICBmb3IgKHVpbnQzMl90IGJ5dGVOdW1iZXIg
PSAwOyBieXRlTnVtYmVyIDwgcGF5bG9hZEJ5dGVzOyArK2J5dGVOdW1iZXIpIHsKKyAgICAgICAg
dWludDhfdCBieXRlOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ4KGJ5
dGUpLCAiY2FuJ3QgZ2V0ICIsIGJ5dGVOdW1iZXIsICJ0aCBkYXRhIGJ5dGUgZnJvbSAiLCBjdXN0
b21TZWN0aW9uTnVtYmVyLCAidGggY3VzdG9tIHNlY3Rpb24iKTsKKyAgICAgICAgc2VjdGlvbi5w
YXlsb2FkLnVuY2hlY2tlZEFwcGVuZChieXRlKTsKKyAgICB9CisKKyAgICBOYW1lIG5hbWVOYW1l
ID0geyAnbicsICdhJywgJ20nLCAnZScgfTsKKyAgICBpZiAoc2VjdGlvbi5uYW1lID09IG5hbWVO
YW1lKSB7CisgICAgICAgIE5hbWVTZWN0aW9uUGFyc2VyIG5hbWVTZWN0aW9uUGFyc2VyKHNlY3Rp
b24ucGF5bG9hZC5iZWdpbigpLCBzZWN0aW9uLnBheWxvYWQuc2l6ZSgpLCBtX2luZm8pOworICAg
ICAgICBpZiAoYXV0byBuYW1lU2VjdGlvbiA9IG5hbWVTZWN0aW9uUGFyc2VyLnBhcnNlKCkpCisg
ICAgICAgICAgICBtX2luZm8tPm5hbWVTZWN0aW9uID0gV1RGTW92ZSgqbmFtZVNlY3Rpb24pOwor
ICAgIH0KKworICAgIG1faW5mby0+Y3VzdG9tU2VjdGlvbnMudW5jaGVja2VkQXBwZW5kKFdURk1v
dmUoc2VjdGlvbikpOworCisgICAgcmV0dXJuIHsgfTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9uUGFyc2VyLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc4ZDAyODM2
ZmM5ZjMyYmMyYjc4ZmJmOTBhZDJjNWRhOWY5MTI4M2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5oCkBAIC0wLDAgKzEsNzQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kgPHl1c3VrZXN1enVraUBz
bG93c3RhcnQub3JnPi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJX
YXNtRm9ybWF0LmgiCisjaW5jbHVkZSAiV2FzbU9wcy5oIgorI2luY2x1ZGUgIldhc21QYXJzZXIu
aCIKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK2NsYXNzIFNlY3Rpb25QYXJzZXIg
ZmluYWwgOiBwdWJsaWMgUGFyc2VyPHZvaWQ+IHsKK3B1YmxpYzoKKyAgICBTZWN0aW9uUGFyc2Vy
KGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCBzaXplX3Qgb2Zmc2V0SW5Tb3VyY2Us
IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvKQorICAgICAgICA6IFBhcnNlcihkYXRhLCBzaXplKQor
ICAgICAgICAsIG1fb2Zmc2V0SW5Tb3VyY2Uob2Zmc2V0SW5Tb3VyY2UpCisgICAgICAgICwgbV9p
bmZvKGluZm8pCisgICAgeworICAgIH0KKworI2RlZmluZSBXQVNNX1NFQ1RJT05fREVDTEFSRV9Q
QVJTRVIoTkFNRSwgSUQsIERFU0NSSVBUSU9OKSBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBwYXJzZSAjIyBOQU1FKCk7CisgICAgRk9SX0VBQ0hfS05PV05fV0FTTV9TRUNUSU9OKFdB
U01fU0VDVElPTl9ERUNMQVJFX1BBUlNFUikKKyN1bmRlZiBXQVNNX1NFQ1RJT05fREVDTEFSRV9Q
QVJTRVIKKworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlQ3VzdG9t
KCk7CisKK3ByaXZhdGU6CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIC4uLkFyZ3M+CisgICAgTkVW
RVJfSU5MSU5FIFVuZXhwZWN0ZWRSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGZhaWwoQXJncy4u
LiBhcmdzKSBjb25zdAorICAgIHsKKyAgICAgICAgdXNpbmcgbmFtZXNwYWNlIEZhaWx1cmVIZWxw
ZXI7IC8vIFNlZSBBREwgY29tbWVudCBpbiBuYW1lc3BhY2UgYWJvdmUuCisgICAgICAgIHJldHVy
biBVbmV4cGVjdGVkUmVzdWx0KG1ha2VTdHJpbmcoIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0
IHBhcnNlIGF0IGJ5dGUgIl9zLCBTdHJpbmc6Om51bWJlcihtX29mZnNldCArIG1fb2Zmc2V0SW5T
b3VyY2UpLCAiOiAiX3MsIG1ha2VTdHJpbmcoYXJncykuLi4pKTsKKyAgICB9CisKKyAgICBQYXJ0
aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUdsb2JhbFR5cGUoR2xvYmFsJik7Cisg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VNZW1vcnlIZWxwZXIoYm9v
bCBpc0ltcG9ydCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VU
YWJsZUhlbHBlcihib29sIGlzSW1wb3J0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBwYXJzZVJlc2l6YWJsZUxpbWl0cyh1aW50MzJfdCYgaW5pdGlhbCwgc3RkOjpvcHRp
b25hbDx1aW50MzJfdD4mIG1heGltdW0pOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIHBhcnNlSW5pdEV4cHIodWludDhfdCYsIHVpbnQ2NF90JiwgVHlwZSYgaW5pdEV4cHJU
eXBlKTsKKworICAgIHNpemVfdCBtX29mZnNldEluU291cmNlOworICAgIFJlZjxNb2R1bGVJbmZv
cm1hdGlvbj4gbV9pbmZvOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2Vu
ZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjRkNzEyMDY1YTFlOTRj
YjUyNjJkNmMyOTA5NDNiODYzNThmMWY0MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwCkBAIC0wLDAgKzEsMzkwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kgPHl1c3VrZXN1enVraUBz
bG93c3RhcnQub3JnPi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21TdHJlYW1pbmdQYXJzZXIuaCIK
KworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIldhc21Nb2R1bGVQYXJzZXIu
aCIKKyNpbmNsdWRlICJXYXNtU2VjdGlvblBhcnNlci5oIgorI2luY2x1ZGUgPHd0Zi9VbmFsaWdu
ZWRBY2Nlc3MuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworbmFtZXNw
YWNlIFdhc21TdHJlYW1pbmdQYXJzZXJJbnRlcm5hbCB7CitzdGF0aWMgY29uc3RleHByIGJvb2wg
dmVyYm9zZSA9IGZhbHNlOworfQorCisjZGVmaW5lIFdBU01fU1RSRUFNSU5HX1BBUlNFUl9GQUlM
X0lGX0hFTFBFUl9GQUlMUyhoZWxwZXIpIFwKKyAgICBkbyB7IFwKKyAgICAgICAgYXV0byBoZWxw
ZXJSZXN1bHQgPSBoZWxwZXI7IFwKKyAgICAgICAgaWYgKFVOTElLRUxZKCFoZWxwZXJSZXN1bHQp
KSB7IFwKKyAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gaGVscGVyUmVzdWx0LmVycm9yKCk7
IFwKKyAgICAgICAgICAgIHJldHVybiBTdGF0ZTo6RmF0YWxFcnJvcjsgXAorICAgICAgICB9IFwK
KyAgICB9IHdoaWxlICgwKQorCitBTFdBWVNfSU5MSU5FIHN0ZDo6b3B0aW9uYWw8dWludDhfdD4g
cGFyc2VVSW50Nyhjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QmIG9mZnNldCwgc2l6ZV90IHNp
emUpCit7CisgICAgaWYgKG9mZnNldCA+PSBzaXplKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgdWludDhfdCByZXN1bHQgPSBkYXRhW29mZnNldCsrXTsKKyAgICBpZiAocmVzdWx0IDwgMHg4
MCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uQXJncz4KK05FVkVSX0lOTElORSBhdXRvIFdBUk5fVU5V
U0VEX1JFVFVSTiBTdHJlYW1pbmdQYXJzZXI6OmZhaWwoQXJncy4uLiBhcmdzKSAtPiBTdGF0ZQor
eworICAgIHVzaW5nIG5hbWVzcGFjZSBGYWlsdXJlSGVscGVyOyAvLyBTZWUgQURMIGNvbW1lbnQg
aW4gbmFtZXNwYWNlIGFib3ZlLgorICAgIG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygiV2Vi
QXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAiX3MsIFN0cmluZzo6bnVtYmVy
KG1fb2Zmc2V0KSwgIjogIl9zLCBtYWtlU3RyaW5nKGFyZ3MpLi4uKTsKKyAgICBkYXRhTG9nTG5J
ZihXYXNtU3RyZWFtaW5nUGFyc2VySW50ZXJuYWw6OnZlcmJvc2UsIG1fZXJyb3JNZXNzYWdlKTsK
KyAgICByZXR1cm4gU3RhdGU6OkZhdGFsRXJyb3I7Cit9CisKK1N0cmVhbWluZ1BhcnNlcjo6U3Ry
ZWFtaW5nUGFyc2VyKE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvKQorICAgIDogbV9pbmZvKGluZm8p
Cit7CisgICAgZGF0YUxvZ0xuSWYoV2FzbVN0cmVhbWluZ1BhcnNlckludGVybmFsOjp2ZXJib3Nl
LCAic3RhcnRpbmcgdmFsaWRhdGlvbiIpOworfQorCithdXRvIFN0cmVhbWluZ1BhcnNlcjo6cGFy
c2VNb2R1bGVIZWFkZXIoVmVjdG9yPHVpbnQ4X3Q+JiYgZGF0YSkgLT4gU3RhdGUKK3sKKyAgICBB
U1NFUlQoZGF0YS5zaXplKCkgPT0gbW9kdWxlSGVhZGVyU2l6ZSk7CisgICAgZGF0YUxvZ0xuSWYo
V2FzbVN0cmVhbWluZ1BhcnNlckludGVybmFsOjp2ZXJib3NlLCAiaGVhZGVyIHZhbGlkYXRpb24i
KTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGRhdGFbMF0gIT0gJ1wwJyB8fCBkYXRhWzFdICE9
ICdhJyB8fCBkYXRhWzJdICE9ICdzJyB8fCBkYXRhWzNdICE9ICdtJywgIm1vZHVsZXMgZG9lc24n
dCBzdGFydCB3aXRoICdcXDBhc20nIik7CisgICAgdWludDMyX3QgdmVyc2lvbk51bWJlciA9IFdU
Rjo6dW5hbGlnbmVkTG9hZDx1aW50MzJfdD4oZGF0YS5kYXRhKCkgKyA0KTsKKyAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKHZlcnNpb25OdW1iZXIgIT0gZXhwZWN0ZWRWZXJzaW9uTnVtYmVyLCAidW5l
eHBlY3RlZCB2ZXJzaW9uIG51bWJlciAiLCB2ZXJzaW9uTnVtYmVyLCAiIGV4cGVjdGVkICIsIGV4
cGVjdGVkVmVyc2lvbk51bWJlcik7CisgICAgbV92ZXJzaW9uTnVtYmVyID0gdmVyc2lvbk51bWJl
cjsKKyAgICByZXR1cm4gU3RhdGU6OlNlY3Rpb25IZWFkZXI7Cit9CisKK2F1dG8gU3RyZWFtaW5n
UGFyc2VyOjpwYXJzZVNlY3Rpb25IZWFkZXIoVmVjdG9yPHVpbnQ4X3Q+JiYgZGF0YSkgLT4gU3Rh
dGUKK3sKKyAgICBBU1NFUlQoZGF0YS5zaXplKCkgPT0gc2VjdGlvbkhlYWRlclNpemUpOworICAg
IHNpemVfdCBvZmZzZXQgPSAwOworICAgIGF1dG8gcmVzdWx0ID0gcGFyc2VVSW50NyhkYXRhLmRh
dGEoKSwgb2Zmc2V0LCBkYXRhLnNpemUoKSk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcmVz
dWx0LCAiY2FuJ3QgZ2V0IHNlY3Rpb24gYnl0ZSIpOworCisgICAgU2VjdGlvbiBzZWN0aW9uID0g
U2VjdGlvbjo6Q3VzdG9tOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWRlY29kZVNlY3Rpb24o
KnJlc3VsdCwgc2VjdGlvbiksICJpbnZhbGlkIHNlY3Rpb24iKTsKKyAgICBBU1NFUlQoc2VjdGlv
biAhPSBTZWN0aW9uOjpCZWdpbik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighdmFsaWRhdGVP
cmRlcihtX3ByZXZpb3VzS25vd25TZWN0aW9uLCBzZWN0aW9uKSwgImludmFsaWQgc2VjdGlvbiBv
cmRlciwgIiwgbV9wcmV2aW91c0tub3duU2VjdGlvbiwgIiBmb2xsb3dlZCBieSAiLCBzZWN0aW9u
KTsKKyAgICBtX3NlY3Rpb24gPSBzZWN0aW9uOworICAgIGlmIChpc0tub3duU2VjdGlvbihzZWN0
aW9uKSkKKyAgICAgICAgbV9wcmV2aW91c0tub3duU2VjdGlvbiA9IHNlY3Rpb247CisgICAgcmV0
dXJuIFN0YXRlOjpTZWN0aW9uU2l6ZTsKK30KKworYXV0byBTdHJlYW1pbmdQYXJzZXI6OnBhcnNl
U2VjdGlvblNpemUodWludDMyX3Qgc2VjdGlvbkxlbmd0aCkgLT4gU3RhdGUKK3sKKyAgICBtX3Nl
Y3Rpb25MZW5ndGggPSBzZWN0aW9uTGVuZ3RoOworICAgIGlmIChtX3NlY3Rpb24gPT0gU2VjdGlv
bjo6Q29kZSkKKyAgICAgICAgcmV0dXJuIFN0YXRlOjpDb2RlU2VjdGlvblNpemU7CisgICAgcmV0
dXJuIFN0YXRlOjpTZWN0aW9uQm9keTsKK30KKworYXV0byBTdHJlYW1pbmdQYXJzZXI6OnBhcnNl
Q29kZVNlY3Rpb25TaXplKHVpbnQzMl90IGZ1bmN0aW9uQ291bnQpIC0+IFN0YXRlCit7CisgICAg
bV9mdW5jdGlvbkNvdW50ID0gZnVuY3Rpb25Db3VudDsKKyAgICBtX2Z1bmN0aW9uSW5kZXggPSAw
OworICAgIG1fY29kZU9mZnNldCA9IG1fb2Zmc2V0OworCisgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RihmdW5jdGlvbkNvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwg
IkNvZGUgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgZnVuY3Rpb25Db3VudCk7CisgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvbkNvdW50ICE9IG1faW5mby0+ZnVuY3Rpb25zLnNp
emUoKSwgIkNvZGUgc2VjdGlvbiBjb3VudCAiLCBmdW5jdGlvbkNvdW50LCAiIGV4Y2VlZHMgdGhl
IGRlY2xhcmVkIG51bWJlciBvZiBmdW5jdGlvbnMgIiwgbV9pbmZvLT5mdW5jdGlvbnMuc2l6ZSgp
KTsKKworICAgIGlmIChtX2Z1bmN0aW9uSW5kZXggPT0gbV9mdW5jdGlvbkNvdW50KSB7CisgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoKG1fY29kZU9mZnNldCArIG1fc2VjdGlvbkxlbmd0aCkg
IT0gbV9vZmZzZXQsICJwYXJzaW5nIGVuZGVkIGJlZm9yZSB0aGUgZW5kIG9mICIsIG1fc2VjdGlv
biwgIiBzZWN0aW9uIik7CisgICAgICAgIHJldHVybiBTdGF0ZTo6U2VjdGlvbkhlYWRlcjsKKyAg
ICB9CisgICAgcmV0dXJuIFN0YXRlOjpGdW5jdGlvbkhlYWRlcjsKK30KKworYXV0byBTdHJlYW1p
bmdQYXJzZXI6OnBhcnNlRnVuY3Rpb25IZWFkZXIodWludDMyX3QgZnVuY3Rpb25TaXplKSAtPiBT
dGF0ZQoreworICAgIG1fZnVuY3Rpb25TaXplID0gZnVuY3Rpb25TaXplOworICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoZnVuY3Rpb25TaXplID4gbWF4RnVuY3Rpb25TaXplLCAiQ29kZSBmdW5jdGlv
bidzIHNpemUgIiwgZnVuY3Rpb25TaXplLCAiIGlzIHRvbyBiaWciKTsKKyAgICByZXR1cm4gU3Rh
dGU6OkZ1bmN0aW9uQm9keTsKK30KKworYXV0byBTdHJlYW1pbmdQYXJzZXI6OnBhcnNlRnVuY3Rp
b25Cb2R5KFZlY3Rvcjx1aW50OF90PiYmIGRhdGEpIC0+IFN0YXRlCit7CisgICAgYXV0byYgZnVu
Y3Rpb24gPSBtX2luZm8tPmZ1bmN0aW9uc1ttX2Z1bmN0aW9uSW5kZXhdOworICAgIGZ1bmN0aW9u
LnN0YXJ0ID0gbV9vZmZzZXQ7CisgICAgZnVuY3Rpb24uZW5kID0gbV9vZmZzZXQgKyBtX2Z1bmN0
aW9uU2l6ZTsKKyAgICBmdW5jdGlvbi5kYXRhID0gV1RGTW92ZShkYXRhKTsKKyAgICBkYXRhTG9n
TG5JZihXYXNtU3RyZWFtaW5nUGFyc2VySW50ZXJuYWw6OnZlcmJvc2UsICJQcm9jZXNzaW5nIGZ1
bmN0aW9uIHN0YXJ0aW5nIGF0OiAiLCBmdW5jdGlvbi5zdGFydCwgIiBhbmQgZW5kaW5nIGF0OiAi
LCBmdW5jdGlvbi5lbmQpOworICAgICsrbV9mdW5jdGlvbkluZGV4OworICAgIGlmIChtX2Z1bmN0
aW9uSW5kZXggPT0gbV9mdW5jdGlvbkNvdW50KSB7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoKG1fY29kZU9mZnNldCArIG1fc2VjdGlvbkxlbmd0aCkgIT0gKG1fb2Zmc2V0ICsgbV9mdW5j
dGlvblNpemUpLCAicGFyc2luZyBlbmRlZCBiZWZvcmUgdGhlIGVuZCBvZiAiLCBtX3NlY3Rpb24s
ICIgc2VjdGlvbiIpOworICAgICAgICByZXR1cm4gU3RhdGU6OlNlY3Rpb25IZWFkZXI7CisgICAg
fQorICAgIHJldHVybiBTdGF0ZTo6RnVuY3Rpb25IZWFkZXI7Cit9CisKK2F1dG8gU3RyZWFtaW5n
UGFyc2VyOjpwYXJzZVNlY3Rpb25Cb2R5KFZlY3Rvcjx1aW50OF90PiYmIGRhdGEpIC0+IFN0YXRl
Cit7CisgICAgU2VjdGlvblBhcnNlciBwYXJzZXIoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCBt
X29mZnNldCwgbV9pbmZvLmdldCgpKTsKKyAgICBzd2l0Y2ggKG1fc2VjdGlvbikgeworI2RlZmlu
ZSBXQVNNX1NFQ1RJT05fUEFSU0UoTkFNRSwgSUQsIERFU0NSSVBUSU9OKSBcCisgICAgY2FzZSBT
ZWN0aW9uOjpOQU1FOiB7IFwKKyAgICAgICAgV0FTTV9TVFJFQU1JTkdfUEFSU0VSX0ZBSUxfSUZf
SEVMUEVSX0ZBSUxTKHBhcnNlci5wYXJzZSAjIyBOQU1FKCkpOyBcCisgICAgICAgIGJyZWFrOyBc
CisgICAgfQorICAgIEZPUl9FQUNIX0tOT1dOX1dBU01fU0VDVElPTihXQVNNX1NFQ1RJT05fUEFS
U0UpCisjdW5kZWYgV0FTTV9TRUNUSU9OX1BBUlNFCisKKyAgICBjYXNlIFNlY3Rpb246OkN1c3Rv
bTogeworICAgICAgICBXQVNNX1NUUkVBTUlOR19QQVJTRVJfRkFJTF9JRl9IRUxQRVJfRkFJTFMo
cGFyc2VyLnBhcnNlQ3VzdG9tKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNl
IFNlY3Rpb246OkJlZ2luOiB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9CisKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KHBhcnNlci5sZW5ndGgoKSAhPSBwYXJzZXIub2Zmc2V0KCksICJwYXJzaW5nIGVuZGVkIGJlZm9y
ZSB0aGUgZW5kIG9mICIsIG1fc2VjdGlvbiwgIiBzZWN0aW9uIik7CisKKyAgICByZXR1cm4gU3Rh
dGU6OlNlY3Rpb25IZWFkZXI7Cit9CisKK2F1dG8gU3RyZWFtaW5nUGFyc2VyOjpjb25zdW1lKGNv
bnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3QgYnl0ZXNTaXplLCBzaXplX3QmIG9mZnNldEluQnl0
ZXMsIHNpemVfdCByZXF1aXJlZFNpemUpIC0+IHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+
PgoreworICAgIGlmIChtX3JlbWFpbmluZy5zaXplKCkgPT0gcmVxdWlyZWRTaXplKSB7CisgICAg
ICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQgPSBXVEZNb3ZlKG1fcmVtYWluaW5nKTsKKyAgICAg
ICAgbV9uZXh0T2Zmc2V0ICs9IHJlcXVpcmVkU2l6ZTsKKyAgICAgICAgcmV0dXJuIFdURk1vdmUo
cmVzdWx0KTsKKyAgICB9CisKKyAgICBpZiAobV9yZW1haW5pbmcuc2l6ZSgpID4gcmVxdWlyZWRT
aXplKSB7CisgICAgICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQocmVxdWlyZWRTaXplKTsKKyAg
ICAgICAgbWVtY3B5KHJlc3VsdC5kYXRhKCksIG1fcmVtYWluaW5nLmRhdGEoKSwgcmVxdWlyZWRT
aXplKTsKKyAgICAgICAgbV9yZW1haW5pbmcucmVtb3ZlKDAsIHJlcXVpcmVkU2l6ZSk7CisgICAg
ICAgIG1fbmV4dE9mZnNldCArPSByZXF1aXJlZFNpemU7CisgICAgICAgIHJldHVybiBXVEZNb3Zl
KHJlc3VsdCk7CisgICAgfQorCisgICAgQVNTRVJUKG1fcmVtYWluaW5nLnNpemUoKSA8IHJlcXVp
cmVkU2l6ZSk7CisgICAgc2l6ZV90IGJ5dGVzUmVtYWluaW5nU2l6ZSA9IGJ5dGVzU2l6ZSAtIG9m
ZnNldEluQnl0ZXM7CisgICAgc2l6ZV90IHRvdGFsRGF0YVNpemUgPSBtX3JlbWFpbmluZy5zaXpl
KCkgKyBieXRlc1JlbWFpbmluZ1NpemU7CisgICAgaWYgKHRvdGFsRGF0YVNpemUgPCByZXF1aXJl
ZFNpemUpIHsKKyAgICAgICAgbV9yZW1haW5pbmcuYXBwZW5kKGJ5dGVzICsgb2Zmc2V0SW5CeXRl
cywgYnl0ZXNSZW1haW5pbmdTaXplKTsKKyAgICAgICAgb2Zmc2V0SW5CeXRlcyA9IGJ5dGVzU2l6
ZTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBzaXplX3QgdXNl
ZFNpemUgPSByZXF1aXJlZFNpemUgLSBtX3JlbWFpbmluZy5zaXplKCk7CisgICAgbV9yZW1haW5p
bmcuYXBwZW5kKGJ5dGVzICsgb2Zmc2V0SW5CeXRlcywgdXNlZFNpemUpOworICAgIG9mZnNldElu
Qnl0ZXMgKz0gdXNlZFNpemU7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdCA9IFdURk1vdmUo
bV9yZW1haW5pbmcpOworICAgIG1fbmV4dE9mZnNldCArPSByZXF1aXJlZFNpemU7CisgICAgcmV0
dXJuIFdURk1vdmUocmVzdWx0KTsKK30KKworYXV0byBTdHJlYW1pbmdQYXJzZXI6OmNvbnN1bWVW
YXJVSW50MzIoY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBieXRlc1NpemUsIHNpemVfdCYg
b2Zmc2V0SW5CeXRlcywgSXNFbmRPZlN0cmVhbSBpc0VuZE9mU3RyZWFtKSAtPiBFeHBlY3RlZDx1
aW50MzJfdCwgU3RhdGU+Cit7CisgICAgY29uc3RleHByIHNpemVfdCBtYXhTaXplID0gV1RGOjpM
RUJEZWNvZGVyOjptYXhCeXRlc0xlbmd0aDx1aW50MzJfdD4oKTsKKyAgICBzaXplX3QgYnl0ZXNS
ZW1haW5pbmdTaXplID0gYnl0ZXNTaXplIC0gb2Zmc2V0SW5CeXRlczsKKyAgICBzaXplX3QgdG90
YWxEYXRhU2l6ZSA9IG1fcmVtYWluaW5nLnNpemUoKSArIGJ5dGVzUmVtYWluaW5nU2l6ZTsKKyAg
ICBpZiAobV9yZW1haW5pbmcuc2l6ZSgpID49IG1heFNpemUpIHsKKyAgICAgICAgLy8gRG8gbm90
aGluZy4KKyAgICB9IGVsc2UgaWYgKHRvdGFsRGF0YVNpemUgPj0gbWF4U2l6ZSkgeworICAgICAg
ICBzaXplX3QgdXNlZFNpemUgPSBtYXhTaXplIC0gbV9yZW1haW5pbmcuc2l6ZSgpOworICAgICAg
ICBtX3JlbWFpbmluZy5hcHBlbmQoYnl0ZXMgKyBvZmZzZXRJbkJ5dGVzLCB1c2VkU2l6ZSk7Cisg
ICAgICAgIG9mZnNldEluQnl0ZXMgKz0gdXNlZFNpemU7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
bV9yZW1haW5pbmcuYXBwZW5kKGJ5dGVzICsgb2Zmc2V0SW5CeXRlcywgYnl0ZXNSZW1haW5pbmdT
aXplKTsKKyAgICAgICAgb2Zmc2V0SW5CeXRlcyArPSBieXRlc1JlbWFpbmluZ1NpemU7CisgICAg
ICAgIGlmIChpc0VuZE9mU3RyZWFtID09IElzRW5kT2ZTdHJlYW06Ok5vKQorICAgICAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKG1fc3RhdGUpOworICAgIH0KKworICAgIHNpemVfdCBvZmZz
ZXQgPSAwOworICAgIHVpbnQzMl90IHJlc3VsdCA9IDA7CisgICAgaWYgKCFXVEY6OkxFQkRlY29k
ZXI6OmRlY29kZVVJbnQzMihtX3JlbWFpbmluZy5kYXRhKCksIG1fcmVtYWluaW5nLnNpemUoKSwg
b2Zmc2V0LCByZXN1bHQpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoU3RhdGU6OkZh
dGFsRXJyb3IpOworICAgIHNpemVfdCBjb25zdW1lZFNpemUgPSBvZmZzZXQ7CisgICAgbV9yZW1h
aW5pbmcucmVtb3ZlKDAsIGNvbnN1bWVkU2l6ZSk7CisgICAgbV9uZXh0T2Zmc2V0ICs9IGNvbnN1
bWVkU2l6ZTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCithdXRvIFN0cmVhbWluZ1BhcnNlcjo6
YWRkQnl0ZXMoY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBieXRlc1NpemUsIElzRW5kT2ZT
dHJlYW0gaXNFbmRPZlN0cmVhbSkgLT4gU3RhdGUKK3sKKyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0
ZTo6RmF0YWxFcnJvcikKKyAgICAgICAgcmV0dXJuIG1fc3RhdGU7CisKKyAgICBtX3RvdGFsU2l6
ZSArPSBieXRlc1NpemU7CisgICAgaWYgKFVOTElLRUxZKG1fdG90YWxTaXplLmhhc092ZXJmbG93
ZWQoKSB8fCBtX3RvdGFsU2l6ZS51bnNhZmVHZXQoKSA+IG1heE1vZHVsZVNpemUpKSB7CisgICAg
ICAgIG1fc3RhdGUgPSBmYWlsKCJtb2R1bGUgc2l6ZSBpcyB0b28gbGFyZ2UsIG1heGltdW0gIiwg
bWF4TW9kdWxlU2l6ZSk7CisgICAgICAgIHJldHVybiBtX3N0YXRlOworICAgIH0KKworICAgIGlm
IChPcHRpb25zOjp1c2VFYWdlcldlYkFzc2VtYmx5TW9kdWxlSGFzaGluZygpKQorICAgICAgICBt
X2hhc2hlci5hZGRCeXRlcyhieXRlcywgYnl0ZXNTaXplKTsKKworICAgIHNpemVfdCBvZmZzZXRJ
bkJ5dGVzID0gMDsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBzd2l0Y2ggKG1fc3RhdGUp
IHsKKyAgICAgICAgY2FzZSBTdGF0ZTo6TW9kdWxlSGVhZGVyOiB7CisgICAgICAgICAgICBhdXRv
IHJlc3VsdCA9IGNvbnN1bWUoYnl0ZXMsIGJ5dGVzU2l6ZSwgb2Zmc2V0SW5CeXRlcywgbW9kdWxl
SGVhZGVyU2l6ZSk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9zdGF0ZTsKKyAgICAgICAgICAgIG1fc3RhdGUgPSBwYXJzZU1vZHVsZUhlYWRlcihX
VEZNb3ZlKCpyZXN1bHQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAg
ICAgY2FzZSBTdGF0ZTo6U2VjdGlvbkhlYWRlcjogeworICAgICAgICAgICAgYXV0byByZXN1bHQg
PSBjb25zdW1lKGJ5dGVzLCBieXRlc1NpemUsIG9mZnNldEluQnl0ZXMsIHNlY3Rpb25IZWFkZXJT
aXplKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgICAgIHJldHVybiBt
X3N0YXRlOworICAgICAgICAgICAgbV9zdGF0ZSA9IHBhcnNlU2VjdGlvbkhlYWRlcihXVEZNb3Zl
KCpyZXN1bHQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2Fz
ZSBTdGF0ZTo6U2VjdGlvblNpemU6IHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gY29uc3Vt
ZVZhclVJbnQzMihieXRlcywgYnl0ZXNTaXplLCBvZmZzZXRJbkJ5dGVzLCBpc0VuZE9mU3RyZWFt
KTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgICAgICAgICAgaWYgKHJlc3Vs
dC5lcnJvcigpID09IFN0YXRlOjpGYXRhbEVycm9yKQorICAgICAgICAgICAgICAgICAgICBtX3N0
YXRlID0gZmFpbE9uU3RhdGUobV9zdGF0ZSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICBtX3N0YXRlID0gcmVzdWx0LmVycm9yKCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIG1fc3RhdGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX3N0YXRlID0gcGFy
c2VTZWN0aW9uU2l6ZSgqcmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgY2FzZSBTdGF0ZTo6U2VjdGlvbkJvZHk6IHsKKyAgICAgICAgICAgIGF1dG8gcmVz
dWx0ID0gY29uc3VtZShieXRlcywgYnl0ZXNTaXplLCBvZmZzZXRJbkJ5dGVzLCBtX3NlY3Rpb25M
ZW5ndGgpOworICAgICAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0dXJu
IG1fc3RhdGU7CisgICAgICAgICAgICBtX3N0YXRlID0gcGFyc2VTZWN0aW9uQm9keShXVEZNb3Zl
KCpyZXN1bHQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2Fz
ZSBTdGF0ZTo6Q29kZVNlY3Rpb25TaXplOiB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGNv
bnN1bWVWYXJVSW50MzIoYnl0ZXMsIGJ5dGVzU2l6ZSwgb2Zmc2V0SW5CeXRlcywgaXNFbmRPZlN0
cmVhbSk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICAgICAgICAgIGlmIChy
ZXN1bHQuZXJyb3IoKSA9PSBTdGF0ZTo6RmF0YWxFcnJvcikKKyAgICAgICAgICAgICAgICAgICAg
bV9zdGF0ZSA9IGZhaWxPblN0YXRlKG1fc3RhdGUpOworICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IHJlc3VsdC5lcnJvcigpOworICAgICAgICAgICAg
ICAgIHJldHVybiBtX3N0YXRlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9zdGF0ZSA9
IHBhcnNlQ29kZVNlY3Rpb25TaXplKCpyZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgICAgICBjYXNlIFN0YXRlOjpGdW5jdGlvbkhlYWRlcjogeworICAgICAgICAg
ICAgYXV0byByZXN1bHQgPSBjb25zdW1lVmFyVUludDMyKGJ5dGVzLCBieXRlc1NpemUsIG9mZnNl
dEluQnl0ZXMsIGlzRW5kT2ZTdHJlYW0pOworICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHsKKyAg
ICAgICAgICAgICAgICBpZiAocmVzdWx0LmVycm9yKCkgPT0gU3RhdGU6OkZhdGFsRXJyb3IpCisg
ICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBmYWlsT25TdGF0ZShtX3N0YXRlKTsKKyAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSByZXN1bHQuZXJy
b3IoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9zdGF0ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIG1fc3RhdGUgPSBwYXJzZUZ1bmN0aW9uSGVhZGVyKCpyZXN1bHQpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFN0YXRlOjpGdW5jdGlvbkJv
ZHk6IHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gY29uc3VtZShieXRlcywgYnl0ZXNTaXpl
LCBvZmZzZXRJbkJ5dGVzLCBtX2Z1bmN0aW9uU2l6ZSk7CisgICAgICAgICAgICBpZiAoIXJlc3Vs
dCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9zdGF0ZTsKKyAgICAgICAgICAgIG1fc3RhdGUg
PSBwYXJzZUZ1bmN0aW9uQm9keShXVEZNb3ZlKCpyZXN1bHQpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBTdGF0ZTo6RmluaXNoZWQ6CisgICAgICAgIGNh
c2UgU3RhdGU6OkZhdGFsRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gbV9zdGF0ZTsKKyAgICAg
ICAgfQorCisgICAgICAgIG1fb2Zmc2V0ID0gbV9uZXh0T2Zmc2V0OworICAgIH0KK30KKworYXV0
byBTdHJlYW1pbmdQYXJzZXI6OmZhaWxPblN0YXRlKFN0YXRlKSAtPiBTdGF0ZQoreworICAgIHN3
aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2UgU3RhdGU6Ok1vZHVsZUhlYWRlcjoKKyAgICAgICAg
cmV0dXJuIGZhaWwoImV4cGVjdGVkIGEgbW9kdWxlIG9mIGF0IGxlYXN0ICIsIG1vZHVsZUhlYWRl
clNpemUsICIgYnl0ZXMiKTsKKyAgICBjYXNlIFN0YXRlOjpTZWN0aW9uSGVhZGVyOgorICAgICAg
ICByZXR1cm4gZmFpbCgiY2FuJ3QgZ2V0IHNlY3Rpb24gYnl0ZSIpOworICAgIGNhc2UgU3RhdGU6
OlNlY3Rpb25TaXplOgorICAgICAgICByZXR1cm4gZmFpbCgiY2FuJ3QgZ2V0ICIsIG1fc2VjdGlv
biwgIiBzZWN0aW9uJ3MgbGVuZ3RoIik7CisgICAgY2FzZSBTdGF0ZTo6U2VjdGlvbkJvZHk6Cisg
ICAgICAgIHJldHVybiBmYWlsKG1fc2VjdGlvbiwgIiBzZWN0aW9uIG9mIHNpemUgIiwgbV9zZWN0
aW9uTGVuZ3RoLCAiIHdvdWxkIG92ZXJmbG93IE1vZHVsZSdzIHNpemUiKTsKKyAgICBjYXNlIFN0
YXRlOjpDb2RlU2VjdGlvblNpemU6CisgICAgICAgIHJldHVybiBmYWlsKCJjYW4ndCBnZXQgQ29k
ZSBzZWN0aW9uJ3MgY291bnQiKTsKKyAgICBjYXNlIFN0YXRlOjpGdW5jdGlvbkhlYWRlcjoKKyAg
ICAgICAgcmV0dXJuIGZhaWwoImNhbid0IGdldCAiLCBtX2Z1bmN0aW9uSW5kZXgsICJ0aCBDb2Rl
IGZ1bmN0aW9uJ3Mgc2l6ZSIpOworICAgIGNhc2UgU3RhdGU6OkZ1bmN0aW9uQm9keToKKyAgICAg
ICAgcmV0dXJuIGZhaWwoIkNvZGUgZnVuY3Rpb24ncyBzaXplICIsIG1fZnVuY3Rpb25TaXplLCAi
IGV4Y2VlZHMgdGhlIG1vZHVsZSdzIHJlbWFpbmluZyBzaXplIik7CisgICAgY2FzZSBTdGF0ZTo6
RmluaXNoZWQ6CisgICAgY2FzZSBTdGF0ZTo6RmF0YWxFcnJvcjoKKyAgICAgICAgcmV0dXJuIG1f
c3RhdGU7CisgICAgfQorICAgIHJldHVybiBtX3N0YXRlOworfQorCithdXRvIFN0cmVhbWluZ1Bh
cnNlcjo6ZmluYWxpemUoKSAtPiBTdGF0ZQoreworICAgIGFkZEJ5dGVzKG51bGxwdHIsIDAsIElz
RW5kT2ZTdHJlYW06Olllcyk7CisgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAgY2FzZSBTdGF0
ZTo6TW9kdWxlSGVhZGVyOgorICAgIGNhc2UgU3RhdGU6OlNlY3Rpb25TaXplOgorICAgIGNhc2Ug
U3RhdGU6OlNlY3Rpb25Cb2R5OgorICAgIGNhc2UgU3RhdGU6OkNvZGVTZWN0aW9uU2l6ZToKKyAg
ICBjYXNlIFN0YXRlOjpGdW5jdGlvbkhlYWRlcjoKKyAgICBjYXNlIFN0YXRlOjpGdW5jdGlvbkJv
ZHk6CisgICAgICAgIG1fc3RhdGUgPSBmYWlsT25TdGF0ZShtX3N0YXRlKTsKKyAgICAgICAgYnJl
YWs7CisKKyAgICBjYXNlIFN0YXRlOjpGaW5pc2hlZDoKKyAgICBjYXNlIFN0YXRlOjpGYXRhbEVy
cm9yOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgU3RhdGU6OlNlY3Rpb25IZWFkZXI6Cisg
ICAgICAgIGlmIChtX3JlbWFpbmluZy5zaXplKCkgPT0gMCkgeworICAgICAgICAgICAgaWYgKE9w
dGlvbnM6OnVzZUVhZ2VyV2ViQXNzZW1ibHlNb2R1bGVIYXNoaW5nKCkpCisgICAgICAgICAgICAg
ICAgbV9pbmZvLT5uYW1lU2VjdGlvbi0+c2V0SGFzaChtX2hhc2hlci5jb21wdXRlSGV4RGlnZXN0
KCkpOworICAgICAgICAgICAgbV9zdGF0ZSA9IFN0YXRlOjpGaW5pc2hlZDsKKyAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICBtX3N0YXRlID0gZmFpbE9uU3RhdGUoU3RhdGU6OlNlY3Rpb25IZWFk
ZXIpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIG1fc3RhdGU7Cit9CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU3RyZWFtaW5nUGFy
c2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU3RyZWFtaW5nUGFyc2VyLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZTBjZDEwNzczYjJjMDdjOWM1MmQ1OTk3Mjk2ZDA0NjBjMTc2OGMwNAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TdHJlYW1pbmdQ
YXJzZXIuaApAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBZdXN1
a2UgU3V6dWtpIDx5dXN1a2VzdXp1a2lAc2xvd3N0YXJ0Lm9yZz4uCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQorCisjaW5jbHVkZSAiV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgiCisjaW5jbHVk
ZSAiV2FzbVBhcnNlci5oIgorI2luY2x1ZGUgIldhc21TZWN0aW9ucy5oIgorI2luY2x1ZGUgPHd0
Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9T
SEExLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCitjbGFzcyBTdHJl
YW1pbmdQYXJzZXJDbGllbnQgeworfTsKKworY2xhc3MgU3RyZWFtaW5nUGFyc2VyIHsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIFN0YXRlIDog
dWludDhfdCB7CisgICAgICAgIE1vZHVsZUhlYWRlciwKKyAgICAgICAgU2VjdGlvbkhlYWRlciwK
KyAgICAgICAgU2VjdGlvblNpemUsCisgICAgICAgIFNlY3Rpb25Cb2R5LAorICAgICAgICBDb2Rl
U2VjdGlvblNpemUsCisgICAgICAgIEZ1bmN0aW9uSGVhZGVyLAorICAgICAgICBGdW5jdGlvbkJv
ZHksCisgICAgICAgIEZpbmlzaGVkLAorICAgICAgICBGYXRhbEVycm9yLAorICAgIH07CisKKyAg
ICBlbnVtIGNsYXNzIElzRW5kT2ZTdHJlYW0geyBZZXMsIE5vIH07CisKKyAgICBTdHJlYW1pbmdQ
YXJzZXIoTW9kdWxlSW5mb3JtYXRpb24mKTsKKworICAgIFN0YXRlIGFkZEJ5dGVzKGNvbnN0IHVp
bnQ4X3QqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoKSB7IHJldHVybiBhZGRCeXRlcyhieXRlcywgbGVu
Z3RoLCBJc0VuZE9mU3RyZWFtOjpObyk7IH0KKyAgICBTdGF0ZSBmaW5hbGl6ZSgpOworCisgICAg
Y29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UoKSBjb25zdCB7IHJldHVybiBtX2Vycm9yTWVzc2Fn
ZTsgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbW9kdWxlSGVh
ZGVyU2l6ZSA9IDg7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBzZWN0aW9uSGVhZGVy
U2l6ZSA9IDE7CisKKyAgICBTdGF0ZSBhZGRCeXRlcyhjb25zdCB1aW50OF90KiBieXRlcywgc2l6
ZV90IGxlbmd0aCwgSXNFbmRPZlN0cmVhbSk7CisKKyAgICBTdGF0ZSBwYXJzZU1vZHVsZUhlYWRl
cihWZWN0b3I8dWludDhfdD4mJik7CisgICAgU3RhdGUgcGFyc2VTZWN0aW9uSGVhZGVyKFZlY3Rv
cjx1aW50OF90PiYmKTsKKyAgICBTdGF0ZSBwYXJzZVNlY3Rpb25TaXplKHVpbnQzMl90KTsKKyAg
ICBTdGF0ZSBwYXJzZVNlY3Rpb25Cb2R5KFZlY3Rvcjx1aW50OF90PiYmKTsKKworICAgIFN0YXRl
IHBhcnNlQ29kZVNlY3Rpb25TaXplKHVpbnQzMl90KTsKKyAgICBTdGF0ZSBwYXJzZUZ1bmN0aW9u
SGVhZGVyKHVpbnQzMl90KTsKKyAgICBTdGF0ZSBwYXJzZUZ1bmN0aW9uQm9keShWZWN0b3I8dWlu
dDhfdD4mJik7CisKKyAgICBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gY29uc3VtZShj
b25zdCB1aW50OF90KiBieXRlcywgc2l6ZV90LCBzaXplX3QmLCBzaXplX3QpOworICAgIEV4cGVj
dGVkPHVpbnQzMl90LCBTdGF0ZT4gY29uc3VtZVZhclVJbnQzMihjb25zdCB1aW50OF90KiBieXRl
cywgc2l6ZV90LCBzaXplX3QmLCBJc0VuZE9mU3RyZWFtKTsKKworICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSAuLi5BcmdzPiBORVZFUl9JTkxJTkUgU3RhdGUgV0FSTl9VTlVTRURfUkVUVVJOIGZhaWwo
QXJncy4uLik7CisKKyAgICBTdGF0ZSBmYWlsT25TdGF0ZShTdGF0ZSk7CisKKyAgICBSZWY8TW9k
dWxlSW5mb3JtYXRpb24+IG1faW5mbzsKKyAgICBWZWN0b3I8dWludDhfdD4gbV9yZW1haW5pbmc7
CisgICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlOworCisgICAgQ2hlY2tlZFNpemUgbV90b3RhbFNp
emUgeyAwIH07CisgICAgc2l6ZV90IG1fb2Zmc2V0IHsgMCB9OworICAgIHNpemVfdCBtX25leHRP
ZmZzZXQgeyAwIH07CisgICAgc2l6ZV90IG1fY29kZU9mZnNldCB7IDAgfTsKKworICAgIFNIQTEg
bV9oYXNoZXI7CisKKyAgICB1aW50MzJfdCBtX3ZlcnNpb25OdW1iZXIgeyAwIH07CisgICAgdWlu
dDMyX3QgbV9zZWN0aW9uTGVuZ3RoIHsgMCB9OworCisgICAgdWludDMyX3QgbV9mdW5jdGlvbkNv
dW50IHsgMCB9OworICAgIHVpbnQzMl90IG1fZnVuY3Rpb25JbmRleCB7IDAgfTsKKworICAgIHVp
bnQzMl90IG1fZnVuY3Rpb25TaXplIHsgMCB9OworCisgICAgU3RhdGUgbV9zdGF0ZSB7IFN0YXRl
OjpNb2R1bGVIZWFkZXIgfTsKKyAgICBTZWN0aW9uIG1fc2VjdGlvbiB7IFNlY3Rpb246OkJlZ2lu
IH07CisgICAgU2VjdGlvbiBtX3ByZXZpb3VzS25vd25TZWN0aW9uIHsgU2VjdGlvbjo6QmVnaW4g
fTsKK307CisKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJM
RShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseU1vZHVsZS5jcHAKaW5kZXggMjNmZWYyMmU1OGJlZTFlZmNjMDI5YmI3Njhl
MDUyMjZhOTIwMzZiZS4uYWViY2UwYzQxMDgzOTFkNjFmMWE5MmNkZjI1OTA2ZDRlMWJhODI0YiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1v
ZHVsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eU1vZHVsZS5jcHAKQEAgLTE0MCwxMSArMTQwLDYgQEAgdm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxl
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAg
ICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fY29kZUJsb2Nrc1tpXSk7CiB9CiAKLWNv
bnN0IFZlY3Rvcjx1aW50OF90PiYgSlNXZWJBc3NlbWJseU1vZHVsZTo6c291cmNlKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbW9kdWxlSW5mb3JtYXRpb24oKS5zb3VyY2U7Ci19Ci0KIH0gLy8gbmFt
ZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCmluZGV4IDE3
YmVkNjEyNWY0ZTdmMzE5YThiN2FmMmUxZGRmODY0YWViMmZhNWEuLmQzOTMwMDY5MTlkMjdhZDE3
NDY5ZmUyNjk1ZGI4NDM4NDIzZDA4MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKQEAgLTY4LDggKzY4LDYgQEAgY2xhc3Mg
SlNXZWJBc3NlbWJseU1vZHVsZSBmaW5hbCA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7
CiAgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrKFdhc206Ok1lbW9yeU1vZGUg
bW9kZSk7CiAgICAgdm9pZCBzZXRDb2RlQmxvY2soVk0mLCBXYXNtOjpNZW1vcnlNb2RlLCBKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrKik7CiAKLSAgICBjb25zdCBWZWN0b3I8dWludDhfdD4mIHNvdXJj
ZSgpIGNvbnN0OwotCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgV2FzbTo6TW9kdWxlJiBtb2R1bGUo
KTsKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5UHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5UHJvdG90eXBlLmNwcAppbmRleCA5NmQ0YzE0ZDc0YzdlZTFhZjhhZWU3NjEw
YzQ5NGFhN2M5NGIwNmM1Li5kY2FkYzBkMGRiY2U1YTlkMjU1M2E0ZGJkYzhjZTRiNGZjYzVkNDUw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVBy
b3RvdHlwZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlQcm90b3R5cGUuY3BwCkBAIC0yOTQsMTAgKzI5NCwxMCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseVZhbGlkYXRlRnVuYyhFeGVjU3RhdGUqIGV4ZWMp
CiAgICAgc2l6ZV90IGJ5dGVTaXplOwogICAgIHN0ZDo6dGllKGJhc2UsIGJ5dGVTaXplKSA9IGdl
dFdhc21CdWZmZXJGcm9tVmFsdWUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIEJCUVBsYW4gcGxh
bigmdm0ud2FzbUNvbnRleHQsIGJhc2UsIGJ5dGVTaXplLCBCQlFQbGFuOjpWYWxpZGF0aW9uLCBQ
bGFuOjpkb250RmluYWxpemUoKSk7CisgICAgQkJRUGxhbiBwbGFuKCZ2bS53YXNtQ29udGV4dCwg
QkJRUGxhbjo6VmFsaWRhdGlvbiwgUGxhbjo6ZG9udEZpbmFsaXplKCkpOwogICAgIC8vIEZJWE1F
OiBXZSBtaWdodCB3YW50IHRvIHRocm93IGFuIE9PTSBleGNlcHRpb24gaGVyZSBpZiB3ZSBkZXRl
Y3QgdGhhdCBzb21ldGhpbmcgd2lsbCBPT00uCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2NjAxNQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNC
b29sZWFuKHBsYW4ucGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpKSk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc0Jvb2xlYW4ocGxhbi5wYXJzZUFuZFZhbGlkYXRlTW9kdWxlKGJhc2UsIGJ5
dGVTaXplKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5
Q29tcGlsZVN0cmVhbWluZ0ludGVybmFsKEV4ZWNTdGF0ZSogZXhlYykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL0xFQkRlY29kZXIuaCBiL1NvdXJjZS9XVEYvd3RmL0xFQkRlY29kZXIuaApp
bmRleCA5NDYyNzcwYzY5OWNkMDVlYTY1NzNlM2VkOWMxYzk3NWE4YjUxNTA3Li45OWE1YzA5YWQ0
YTU0MThjODBkMDEzN2IxMGUwMGQwYjQyNmMwODgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9MRUJEZWNvZGVyLmgKKysrIGIvU291cmNlL1dURi93dGYvTEVCRGVjb2Rlci5oCkBAIC0zNiwx
NSArMzYsMjAgQEAKIG5hbWVzcGFjZSBXVEYgeyBuYW1lc3BhY2UgTEVCRGVjb2RlciB7CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gZGVjb2Rl
VUludChjb25zdCB1aW50OF90KiBieXRlcywgc2l6ZV90IGxlbmd0aCwgc2l6ZV90JiBvZmZzZXQs
IFQmIHJlc3VsdCkKK2lubGluZSBjb25zdGV4cHIgc2l6ZV90IG1heEJ5dGVMZW5ndGgoKQogewog
ICAgIGNvbnN0IHNpemVfdCBudW1CaXRzID0gc2l6ZW9mKFQpICogQ0hBUl9CSVQ7Ci0gICAgY29u
c3Qgc2l6ZV90IG1heEJ5dGVMZW5ndGggPSAobnVtQml0cyAtIDEpIC8gNyArIDE7IC8vIG51bUJp
dHMgLyA3IHJvdW5kaW5nIHVwLgorICAgIHJldHVybiAobnVtQml0cyAtIDEpIC8gNyArIDE7IC8v
IG51bUJpdHMgLyA3IHJvdW5kaW5nIHVwLgorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5s
aW5lIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGRlY29kZVVJbnQoY29uc3QgdWludDhfdCogYnl0
ZXMsIHNpemVfdCBsZW5ndGgsIHNpemVfdCYgb2Zmc2V0LCBUJiByZXN1bHQpCit7CiAgICAgaWYg
KGxlbmd0aCA8PSBvZmZzZXQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXN1bHQgPSAw
OwogICAgIHVuc2lnbmVkIHNoaWZ0ID0gMDsKLSAgICBzaXplX3QgbGFzdCA9IHN0ZDo6bWluKG1h
eEJ5dGVMZW5ndGgsIGxlbmd0aCAtIG9mZnNldCkgLSAxOworICAgIHNpemVfdCBsYXN0ID0gc3Rk
OjptaW4obWF4Qnl0ZUxlbmd0aDxUPigpLCBsZW5ndGggLSBvZmZzZXQpIC0gMTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyB0cnVlOyArK2kpIHsKICAgICAgICAgdWludDhfdCBieXRlID0gYnl0
ZXNbb2Zmc2V0KytdOwogICAgICAgICByZXN1bHQgfD0gc3RhdGljX2Nhc3Q8VD4oYnl0ZSAmIDB4
N2YpIDw8IHNoaWZ0OwpAQCAtNjEsMTMgKzY2LDExIEBAIGlubGluZSBib29sIFdBUk5fVU5VU0VE
X1JFVFVSTiBkZWNvZGVVSW50KGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBz
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogaW5saW5lIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGRl
Y29kZUludChjb25zdCB1aW50OF90KiBieXRlcywgc2l6ZV90IGxlbmd0aCwgc2l6ZV90JiBvZmZz
ZXQsIFQmIHJlc3VsdCkKIHsKLSAgICBjb25zdCBzaXplX3QgbnVtQml0cyA9IHNpemVvZihUKSAq
IENIQVJfQklUOwotICAgIGNvbnN0IHNpemVfdCBtYXhCeXRlTGVuZ3RoID0gKG51bUJpdHMgLSAx
KSAvIDcgKyAxOyAvLyBudW1CaXRzIC8gNyByb3VuZGluZyB1cC4KICAgICBpZiAobGVuZ3RoIDw9
IG9mZnNldCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJlc3VsdCA9IDA7CiAgICAgdW5z
aWduZWQgc2hpZnQgPSAwOwotICAgIHNpemVfdCBsYXN0ID0gc3RkOjptaW4obWF4Qnl0ZUxlbmd0
aCwgbGVuZ3RoIC0gb2Zmc2V0KSAtIDE7CisgICAgc2l6ZV90IGxhc3QgPSBzdGQ6Om1pbihtYXhC
eXRlTGVuZ3RoPFQ+KCksIGxlbmd0aCAtIG9mZnNldCkgLSAxOwogICAgIHVpbnQ4X3QgYnl0ZTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyB0cnVlOyArK2kpIHsKICAgICAgICAgYnl0ZSA9IGJ5
dGVzW29mZnNldCsrXTsKQEAgLTgwLDYgKzgzLDcgQEAgaW5saW5lIGJvb2wgV0FSTl9VTlVTRURf
UkVUVVJOIGRlY29kZUludChjb25zdCB1aW50OF90KiBieXRlcywgc2l6ZV90IGxlbmd0aCwgc2kK
ICAgICB9CiAKICAgICB1c2luZyBVbnNpZ25lZFQgPSB0eXBlbmFtZSBzdGQ6Om1ha2VfdW5zaWdu
ZWQ8VD46OnR5cGU7CisgICAgY29uc3Qgc2l6ZV90IG51bUJpdHMgPSBzaXplb2YoVCkgKiBDSEFS
X0JJVDsKICAgICBpZiAoc2hpZnQgPCBudW1CaXRzICYmIChieXRlICYgMHg0MCkpCiAgICAgICAg
IHJlc3VsdCA9IHN0YXRpY19jYXN0PFQ+KHN0YXRpY19jYXN0PFVuc2lnbmVkVD4ocmVzdWx0KSB8
IChzdGF0aWNfY2FzdDxVbnNpZ25lZFQ+KC0xKSA8PCBzaGlmdCkpOwogICAgIHJldHVybiB0cnVl
OwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRl
eCA0NzEwMGRiNzA3MDRmMGQ0NjY0NjhmODRhNjczMWY2NDI5YWJhMzRlLi45NDIwMzgxOGI0MDY0
ZjEzNWZkNjQ1ZDI5NDk2YjI0ZTY3YmRhYzI1IDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxv
ZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDE4LTA4LTI3ICBZ
dXN1a2UgU3V6dWtpICA8eXVzdWtlc3V6dWtpQHNsb3dzdGFydC5vcmc+CisKKyAgICAgICAgW1dl
YkFzc2VtYmx5XSBQYXJzZSB3YXNtIG1vZHVsZXMgaW4gYSBzdHJlYW1pbmcgZmFzaGlvbgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg4OTQzCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2FzbSBwYXJzaW5n
IGVycm9yIHNob3VsZCBub3QgcmVwb3J0IHRoZSB0b3RhbCBieXRlIHNpemUgc2luY2Ugc3RyZWFt
aW5nIHBhcnNpbmcgZG9lcyBub3QKKyAgICAgICAgd2FudCB0byBsb2FkIGFsbCB0aGUgYnl0ZXMu
CisgICAgICAgIEFkZCBhIHNpbXBsZSB0ZXN0IHdhc20vc3RyZXNzL3N0cmVhbWluZy1iYXNpYy5q
cyBmb3IgaW5pdGlhbCBzdHJlYW1pbmcgcGFyc2luZyBpbXBsZW1lbnRhdGlvbi4KKworICAgICAg
ICAqIHdhc20vZnVuY3Rpb24tdGVzdHMvaW52YWxpZC1kdXBsaWNhdGUtZXhwb3J0LmpzOgorICAg
ICAgICAqIHdhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LWFsaWdubWVudC5qczoKKyAgICAgICAg
KGNvbnN0Lm9wLm9mLldBU00ub3Bjb2Rlcyk6CisgICAgICAgICogd2FzbS9mdW5jdGlvbi10ZXN0
cy9tZW1vcnktc2VjdGlvbi1hbmQtaW1wb3J0LmpzOgorICAgICAgICAqIHdhc20vZnVuY3Rpb24t
dGVzdHMvdm9pZC1hcmd1bWVudC10eXBlLXNob3VsZC1iZS1hLXZhbGlkYXRpb24tZXJyb3IuanM6
CisgICAgICAgICogd2FzbS9qcy1hcGkvTW9kdWxlLWNvbXBpbGUuanM6CisgICAgICAgIChhc3lu
Yy50ZXN0UHJvbWlzZUFQSSk6CisgICAgICAgICogd2FzbS9qcy1hcGkvZWxlbWVudC5qczoKKyAg
ICAgICAgKGFzc2VydC50aHJvd3MubmV3LldlYkFzc2VtYmx5Lk1vZHVsZS5idWlsZGVyLldlYkFz
c2VtYmx5KToKKyAgICAgICAgKGFzc2VydC50aHJvd3MpOgorICAgICAgICAqIHdhc20vanMtYXBp
L2dsb2JhbC1lcnJvci5qczoKKyAgICAgICAgKGFzc2VydC50aHJvd3MubmV3LldlYkFzc2VtYmx5
Lk1vZHVsZS5iaW4pOgorICAgICAgICAoYXNzZXJ0LnRocm93cyk6CisgICAgICAgICogd2FzbS9q
cy1hcGkvdGFibGUuanM6CisgICAgICAgIChuZXcuV2ViQXNzZW1ibHkuTW9kdWxlKToKKyAgICAg
ICAgKGFzc2VydC50aHJvd3MpOgorICAgICAgICAoYXNzZXJ0QmFkVGFibGVJbXBvcnQpOgorICAg
ICAgICAqIHdhc20vanMtYXBpL3Rlc3RfRGF0YS5qczoKKyAgICAgICAgKERhdGFTZWN0aW9uV2l0
aG91dE1lbW9yeSk6CisgICAgICAgICogd2FzbS9qcy1hcGkvdGVzdF9TdGFydC5qczoKKyAgICAg
ICAgKEludmFsaWRTdGFydEZ1bmN0aW9uSW5kZXgpOgorICAgICAgICAqIHdhc20vanMtYXBpL3Rl
c3RfYmFzaWNfYXBpLmpzOgorICAgICAgICAoY29uc3QuYy5pbi5jb25zdHJ1Y3RvclByb3BlcnRp
ZXMuc3dpdGNoKToKKyAgICAgICAgKiB3YXNtL2pzLWFwaS92ZXJzaW9uLmpzOgorICAgICAgICAq
IHdhc20vc3RyZXNzL25hbWVTZWN0aW9uLndhc206IEFkZGVkLgorICAgICAgICAqIHdhc20vc3Ry
ZXNzL3N0cmVhbWluZy1iYXNpYy5qczogQWRkZWQuCisgICAgICAgIChjaGVjayk6CisKIDIwMTgt
MDgtMjQgIFl1c3VrZSBTdXp1a2kgIDx5dXN1a2VzdXp1a2lAc2xvd3N0YXJ0Lm9yZz4KIAogICAg
ICAgICBbSlNDXSBBcnJheS5wcm90b3R5cGUucmV2ZXJzZSBtb2RpZmllcyBKU0ltbXV0YWJsZUJ1
dHRlcmZseQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL2ludmFsaWQt
ZHVwbGljYXRlLWV4cG9ydC5qcyBiL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9pbnZhbGlk
LWR1cGxpY2F0ZS1leHBvcnQuanMKaW5kZXggYzQ3YjFlMTY2MmMyY2I2MGM5M2Q2YzliOTU3Mzli
ZGFiYTc4MGU3My4uNDE4ZDUxYWE0OTkwMTlhYTI0NjliYWE1ZjFmZDhlMWFiZDNiZjI5MSAxMDA2
NDQKLS0tIGEvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL2ludmFsaWQtZHVwbGljYXRlLWV4
cG9ydC5qcworKysgYi9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvaW52YWxpZC1kdXBsaWNh
dGUtZXhwb3J0LmpzCkBAIC0xNSw1ICsxNSw1IEBACiAgICAgICAgIC5FbmQoKTsKIAogICAgIGNv
bnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKLSAgICBhc3NlcnQudGhyb3dz
KCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVy
cm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzMSAvIDM5OiBk
dXBsaWNhdGUgZXhwb3J0OiAnZm9vJyIpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdl
YkFzc2VtYmx5Lk1vZHVsZShiaW4pLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3Nl
bWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDMxOiBkdXBsaWNhdGUgZXhwb3J0OiAn
Zm9vJyIpOwogfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL21lbW9y
eS1hbGlnbm1lbnQuanMgYi9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LWFsaWdu
bWVudC5qcwppbmRleCBhYmM1NzQxMjE0NmYyZTM5NzI2MWU3MzI2ZWNjOGE1YzgxOWEwNDljLi5l
NjA1ODk4OTAwYWExYmVkNjdiOWQzMmFjNmYyYWEwMTJlYjI5OWVlIDEwMDY0NAotLS0gYS9KU1Rl
c3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LWFsaWdubWVudC5qcworKysgYi9KU1Rlc3Rz
L3dhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LWFsaWdubWVudC5qcwpAQCAtNDIsNyArNDIsNyBA
QAogICAgICAgICBpZiAoYWxpZ25Mb2cyIDw9IG1heEFsaWduTG9nMikKICAgICAgICAgICAgIGlu
c3RhbmNlKCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFzc2VydC50aHJvd3MoaW5zdGFu
Y2UsIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgYFdlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0
IHBhcnNlIGF0IGJ5dGUgJHtzdGFydH0gLyAke2VuZH06IGJ5dGUgYWxpZ25tZW50ICR7MSA8PCBh
bGlnbkxvZzJ9IGV4Y2VlZHMgJHtpbmZvLnR5cGV9J3MgbmF0dXJhbCBhbGlnbm1lbnQgJHsxIDw8
IG1heEFsaWduTG9nMn0sIGluIGZ1bmN0aW9uIGF0IGluZGV4IDBgKTsKKyAgICAgICAgICAgIGFz
c2VydC50aHJvd3MoaW5zdGFuY2UsIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgYFdlYkFzc2Vt
Ymx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgJHtzdGFydH06IGJ5dGUgYWxpZ25tZW50
ICR7MSA8PCBhbGlnbkxvZzJ9IGV4Y2VlZHMgJHtpbmZvLnR5cGV9J3MgbmF0dXJhbCBhbGlnbm1l
bnQgJHsxIDw8IG1heEFsaWduTG9nMn0sIGluIGZ1bmN0aW9uIGF0IGluZGV4IDBgKTsKIAogICAg
IH0KIH0KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9tZW1vcnktc2Vj
dGlvbi1hbmQtaW1wb3J0LmpzIGIvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL21lbW9yeS1z
ZWN0aW9uLWFuZC1pbXBvcnQuanMKaW5kZXggYTFkYjljZTI1Nzc5MzUwYjViZDU1NzdmNzY3ZTY2
Nzc3NGJkOGIwYi4uMTUyMDdlZjcxODhlZmEwZjY5MjM1NzNjMWRmZWE1YTNlYTViNzFmZiAxMDA2
NDQKLS0tIGEvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL21lbW9yeS1zZWN0aW9uLWFuZC1p
bXBvcnQuanMKKysrIGIvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL21lbW9yeS1zZWN0aW9u
LWFuZC1pbXBvcnQuanMKQEAgLTI4LDQgKzI4LDQgQEAKICAgICAgIC5Db2RlKCkuRW5kKCk7CiAK
IGNvbnN0IGkwID0gaW5zdGFudGlhdGUoYnVpbGRlcjApOwotYXNzZXJ0LnRocm93cygoKSA9PiBp
bnN0YW50aWF0ZShidWlsZGVyMSwgeyBpbXA6IHsgbWVtb3J5OiBpMC5leHBvcnRzLm1lbW9yeSB9
IH0pLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsIGBXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24n
dCBwYXJzZSBhdCBieXRlIDM1IC8gNDE6IHRoZXJlIGNhbiBhdCBtb3N0IGJlIG9uZSBNZW1vcnkg
c2VjdGlvbiBmb3Igbm93YCk7Cithc3NlcnQudGhyb3dzKCgpID0+IGluc3RhbnRpYXRlKGJ1aWxk
ZXIxLCB7IGltcDogeyBtZW1vcnk6IGkwLmV4cG9ydHMubWVtb3J5IH0gfSksIFdlYkFzc2VtYmx5
LkNvbXBpbGVFcnJvciwgYFdlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUg
MzU6IHRoZXJlIGNhbiBhdCBtb3N0IGJlIG9uZSBNZW1vcnkgc2VjdGlvbiBmb3Igbm93YCk7CmRp
ZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvdm9pZC1hcmd1bWVudC10eXBl
LXNob3VsZC1iZS1hLXZhbGlkYXRpb24tZXJyb3IuanMgYi9KU1Rlc3RzL3dhc20vZnVuY3Rpb24t
dGVzdHMvdm9pZC1hcmd1bWVudC10eXBlLXNob3VsZC1iZS1hLXZhbGlkYXRpb24tZXJyb3IuanMK
aW5kZXggNDcxNDliMWQ3ZmI5MzIzMWMyNWQwNzhhODYyOThiNzUwMmJmZjY4YS4uMjE3ODgxMGE3
ODE3ZDk3MzM1ZTYyZjc4YjNmYzUxN2UzZmU3N2U0MSAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNt
L2Z1bmN0aW9uLXRlc3RzL3ZvaWQtYXJndW1lbnQtdHlwZS1zaG91bGQtYmUtYS12YWxpZGF0aW9u
LWVycm9yLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy92b2lkLWFyZ3VtZW50
LXR5cGUtc2hvdWxkLWJlLWEtdmFsaWRhdGlvbi1lcnJvci5qcwpAQCAtMTcsNiArMTcsNiBAQCBm
dW5jdGlvbiBnZXRCaW5hcnkocGFyYW1zKSB7CiAgICAgcmV0dXJuIGJ1aWxkZXIuV2ViQXNzZW1i
bHkoKS5nZXQoKTsKIH0KIAotYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9k
dWxlKGdldEJpbmFyeShbImkzMiIsICJ2b2lkIl0pKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9y
LCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxNSAvIDQ3OiBjYW4n
dCBnZXQgMXRoIGFyZ3VtZW50IFR5cGUiKTsKLWFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFz
c2VtYmx5Lk1vZHVsZShnZXRCaW5hcnkoWyJ2b2lkIl0pKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVy
cm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxNCAvIDQ2OiBj
YW4ndCBnZXQgMHRoIGFyZ3VtZW50IFR5cGUiKTsKLWFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdl
YkFzc2VtYmx5Lk1vZHVsZShnZXRCaW5hcnkoWyJpMzIiLCAidm9pZCIsICJpMzIiXSkpLCBXZWJB
c3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBh
dCBieXRlIDE1IC8gNDg6IGNhbid0IGdldCAxdGggYXJndW1lbnQgVHlwZSIpOworYXNzZXJ0LnRo
cm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGdldEJpbmFyeShbImkzMiIsICJ2b2lk
Il0pKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNu
J3QgcGFyc2UgYXQgYnl0ZSAxNTogY2FuJ3QgZ2V0IDF0aCBhcmd1bWVudCBUeXBlIik7Cithc3Nl
cnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoZ2V0QmluYXJ5KFsidm9pZCJd
KSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0
IHBhcnNlIGF0IGJ5dGUgMTQ6IGNhbid0IGdldCAwdGggYXJndW1lbnQgVHlwZSIpOworYXNzZXJ0
LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGdldEJpbmFyeShbImkzMiIsICJ2
b2lkIiwgImkzMiJdKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1v
ZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTU6IGNhbid0IGdldCAxdGggYXJndW1lbnQgVHlw
ZSIpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS9Nb2R1bGUtY29tcGlsZS5qcyBi
L0pTVGVzdHMvd2FzbS9qcy1hcGkvTW9kdWxlLWNvbXBpbGUuanMKaW5kZXggZDNiZWIzMzI1Nzdh
ZWRiMDU4YzhlNDFkMjNhZGRhOWM5MWYxZGY3OC4uZDcyM2JmNGQ3MGI0OWM0OWExMzY1ZmRjNjdi
NDUyNDJiMzgyNzJlNiAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2pzLWFwaS9Nb2R1bGUtY29t
cGlsZS5qcworKysgYi9KU1Rlc3RzL3dhc20vanMtYXBpL01vZHVsZS1jb21waWxlLmpzCkBAIC0y
MSw3ICsyMSw3IEBAIGFzeW5jIGZ1bmN0aW9uIHRlc3RQcm9taXNlQVBJKCkgewogICAgICAgICAg
ICAgYXdhaXQgV2ViQXNzZW1ibHkuY29tcGlsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkp
OwogICAgICAgICB9IGNhdGNoKGUpIHsKICAgICAgICAgICAgIGFzc2VydC50cnV0aHkoZSBpbnN0
YW5jZW9mIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvcik7Ci0gICAgICAgICAgICBhc3NlcnQudHJ1
dGh5KGUubWVzc2FnZSA9PT0gIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5
dGUgMzQgLyA0MzogdGhlcmUgY2FuIGF0IG1vc3QgYmUgb25lIE1lbW9yeSBzZWN0aW9uIGZvciBu
b3ciKTsKKyAgICAgICAgICAgIGFzc2VydC50cnV0aHkoZS5tZXNzYWdlID09PSAiV2ViQXNzZW1i
bHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzNDogdGhlcmUgY2FuIGF0IG1vc3QgYmUg
b25lIE1lbW9yeSBzZWN0aW9uIGZvciBub3ciKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0t
Z2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS9lbGVtZW50LmpzIGIvSlNUZXN0cy93YXNtL2pzLWFw
aS9lbGVtZW50LmpzCmluZGV4IDE4OGFjNzQxNTExMjYwNDhiODI3MjQ4ZGM0NzM4MjA1YWE4NmEx
NDkuLmZjYmUyODI3ZjM3MTY2M2FhODRmZGY1YzEwMTAwYjgxNzgxNzczOTAgMTAwNjQ0Ci0tLSBh
L0pTVGVzdHMvd2FzbS9qcy1hcGkvZWxlbWVudC5qcworKysgYi9KU1Rlc3RzL3dhc20vanMtYXBp
L2VsZW1lbnQuanMKQEAgLTE4LDcgKzE4LDcgQEAKICAgICAgICAgICAgIC5FbmQoKQogICAgICAg
ICAuRW5kKCk7CiAKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1
bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9y
LCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNCAvIDQxOiBFbGVt
ZW50IHNlY3Rpb24gZm9yIFRhYmxlIDAgZXhjZWVkcyBhdmFpbGFibGUgVGFibGUgMCIpOworICAg
IGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFz
c2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5N
b2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI0OiBFbGVtZW50IHNlY3Rpb24gZm9yIFRhYmxl
IDAgZXhjZWVkcyBhdmFpbGFibGUgVGFibGUgMCIpOwogfQogCiB7CkBAIC00MSw3ICs0MSw3IEBA
CiAgICAgICAgICAgICAuRW5kKCkKICAgICAgICAgLkVuZCgpOwogCi0gICAgYXNzZXJ0LnRocm93
cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQo
KSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0
IHBhcnNlIGF0IGJ5dGUgMzAgLyA0NzogRWxlbWVudCBzZWN0aW9uIGZvciBUYWJsZSAxIGV4Y2Vl
ZHMgYXZhaWxhYmxlIFRhYmxlIDEiKTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJB
c3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwgV2ViQXNzZW1ibHku
Q29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAz
MDogRWxlbWVudCBzZWN0aW9uIGZvciBUYWJsZSAxIGV4Y2VlZHMgYXZhaWxhYmxlIFRhYmxlIDEi
KTsKIH0KIAogewpAQCAtMTEyLDcgKzExMiw3IEBACiAgICAgICAgICAgICAuRW5kKCkKICAgICAg
ICAgLkVuZCgpOwogCi0gICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9k
dWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJv
ciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzggLyA1MDogRWxl
bWVudCBzZWN0aW9uJ3MgMHRoIGVsZW1lbnQncyAydGggaW5kZXggaXMgMSB3aGljaCBleGNlZWRz
IHRoZSBmdW5jdGlvbiBpbmRleCBzcGFjZSBzaXplIG9mIDEgKGV2YWx1YXRpbmcgJ25ldyBXZWJB
c3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIik7CisgICAgYXNz
ZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1i
bHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVs
ZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzg6IEVsZW1lbnQgc2VjdGlvbidzIDB0aCBlbGVtZW50
J3MgMnRoIGluZGV4IGlzIDEgd2hpY2ggZXhjZWVkcyB0aGUgZnVuY3Rpb24gaW5kZXggc3BhY2Ug
c2l6ZSBvZiAxIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2Vi
QXNzZW1ibHkoKS5nZXQoKSknKSIpOwogfQogCiB7CkBAIC0yMTUsNSArMjE1LDUgQEAgZnVuY3Rp
b24gYmFkTW9kdWxlKCkgewogICAgICAgICByZXR1cm4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShi
aW4pOwogICAgIH0KIAotICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYmFkTW9kdWxlKCksIFdlYkFz
c2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0
IGJ5dGUgNTggLyA3MjogRWxlbWVudCBpbml0X2V4cHIgbXVzdCBwcm9kdWNlIGFuIGkzMiIpOwor
ICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYmFkTW9kdWxlKCksIFdlYkFzc2VtYmx5LkNvbXBpbGVF
cnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgNTg6IEVsZW1l
bnQgaW5pdF9leHByIG11c3QgcHJvZHVjZSBhbiBpMzIiKTsKIH0KZGlmZiAtLWdpdCBhL0pTVGVz
dHMvd2FzbS9qcy1hcGkvZ2xvYmFsLWVycm9yLmpzIGIvSlNUZXN0cy93YXNtL2pzLWFwaS9nbG9i
YWwtZXJyb3IuanMKaW5kZXggMDlmOGQ3OTlkYzRlMmYzOWQ5YTU0MzAyY2FhYmRlN2E3NmQ1MTA3
Yi4uZDNlZGY4OThlN2Q5ZmEwN2U0NzBjZmMzMmM2YWIzNmYxNzMxYjUxMyAxMDA2NDQKLS0tIGEv
SlNUZXN0cy93YXNtL2pzLWFwaS9nbG9iYWwtZXJyb3IuanMKKysrIGIvSlNUZXN0cy93YXNtL2pz
LWFwaS9nbG9iYWwtZXJyb3IuanMKQEAgLTIzLDcgKzIzLDcgQEAKICAgICBjb25zdCBiaW4gPSBi
dWlsZGVyLldlYkFzc2VtYmx5KCk7CiAgICAgYmluLnRyaW0oKTsKIAotICAgIGFzc2VydC50aHJv
d3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4uZ2V0KCkpLCBXZWJBc3NlbWJseS5D
b21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2
IC8gNTk6IGdldF9nbG9iYWwncyBpbmRleCAwIGV4Y2VlZHMgdGhlIG51bWJlciBvZiBnbG9iYWxz
IDAgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKScpIik7Cisg
ICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbi5nZXQoKSks
IFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBh
cnNlIGF0IGJ5dGUgMjY6IGdldF9nbG9iYWwncyBpbmRleCAwIGV4Y2VlZHMgdGhlIG51bWJlciBv
ZiBnbG9iYWxzIDAgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdldCgp
KScpIik7CiB9CiAKIApAQCAtNTIsNyArNTIsNyBAQAogICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIu
V2ViQXNzZW1ibHkoKTsKICAgICBiaW4udHJpbSgpOwogCi0gICAgYXNzZXJ0LnRocm93cygoKSA9
PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbi5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVF
cnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzIgLyA3Njog
TXV0YWJsZSBHbG9iYWxzIGFyZW4ndCBzdXBwb3J0ZWQgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3Nl
bWJseS5Nb2R1bGUoYmluLmdldCgpKScpIik7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcg
V2ViQXNzZW1ibHkuTW9kdWxlKGJpbi5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwg
IldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzI6IE11dGFibGUgR2xv
YmFscyBhcmVuJ3Qgc3VwcG9ydGVkIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxl
KGJpbi5nZXQoKSknKSIpOwogfQogCiB7CkBAIC03Nyw3ICs3Nyw3IEBACiAgICAgY29uc3QgYmlu
ID0gYnVpbGRlci5XZWJBc3NlbWJseSgpOwogICAgIGJpbi50cmltKCk7CiAKLSAgICBhc3NlcnQu
dGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKSwgV2ViQXNzZW1i
bHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0
ZSA1MSAvIDU5OiAxdGggRXhwb3J0IGlzbid0IGltbXV0YWJsZSwgbmFtZWQgJ2dsb2JhbCcgKGV2
YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKScpIik7CisgICAgYXNz
ZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbi5nZXQoKSksIFdlYkFz
c2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0
IGJ5dGUgNTE6IDF0aCBFeHBvcnQgaXNuJ3QgaW1tdXRhYmxlLCBuYW1lZCAnZ2xvYmFsJyAoZXZh
bHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4uZ2V0KCkpJykiKTsKIH0KIAogewpk
aWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS90YWJsZS5qcyBiL0pTVGVzdHMvd2FzbS9q
cy1hcGkvdGFibGUuanMKaW5kZXggYjgzMmUxMTc2NjQxMzAyMzBmYzgwYmZiMTMwYzEzNjZhMzEy
ZTMyNS4uY2Y2OGI0NDA0OTVmNmJlNmY4YjI3OTQ3NzEyNDU2ZDdjYTdjOGM2ZiAxMDA2NDQKLS0t
IGEvSlNUZXN0cy93YXNtL2pzLWFwaS90YWJsZS5qcworKysgYi9KU1Rlc3RzL3dhc20vanMtYXBp
L3RhYmxlLmpzCkBAIC0xMyw3ICsxMyw3IEBACiAgICAgICAgIC5FbmQoKQogICAgICAgICAuQ29k
ZSgpCiAgICAgICAgIC5FbmQoKTsKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3Nl
bWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29t
cGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzNCAv
IDQxOiBDYW5ub3QgaGF2ZSBtb3JlIHRoYW4gb25lIFRhYmxlIGZvciBub3ciKTsKKyAgICBhc3Nl
cnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJs
eSgpLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxl
IGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzNDogQ2Fubm90IGhhdmUgbW9yZSB0aGFuIG9uZSBUYWJs
ZSBmb3Igbm93Iik7CiB9CiAKIHsKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgLkVuZCgpCiAg
ICAgICAgIC5Db2RlKCkKICAgICAgICAgLkVuZCgpOwotICAgIGFzc2VydC50aHJvd3MoKCkgPT4g
bmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJB
c3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBh
dCBieXRlIDE3IC8gMjg6IFRhYmxlIGNvdW50IG9mIDIgaXMgaW52YWxpZCwgYXQgbW9zdCAxIGlz
IGFsbG93ZWQgZm9yIG5vdyAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWls
ZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiKTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5l
dyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwgV2ViQXNz
ZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQg
Ynl0ZSAxNzogVGFibGUgY291bnQgb2YgMiBpcyBpbnZhbGlkLCBhdCBtb3N0IDEgaXMgYWxsb3dl
ZCBmb3Igbm93IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2Vi
QXNzZW1ibHkoKS5nZXQoKSknKSIpOwogfQogCiB7CkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAg
ICAgICAgICAgLkNhbGxJbmRpcmVjdCgwLCAwKQogICAgICAgICAgICAgLkVuZCgpCiAgICAgICAg
IC5FbmQoKTsKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUo
YnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAi
V2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSA0IC8gNzogY2FsbF9pbmRp
cmVjdCBpcyBvbmx5IHZhbGlkIHdoZW4gYSB0YWJsZSBpcyBkZWZpbmVkIG9yIGltcG9ydGVkLCBp
biBmdW5jdGlvbiBhdCBpbmRleCAwIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxl
KGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIpOworICAgIGFzc2VydC50aHJvd3MoKCkg
PT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBX
ZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJz
ZSBhdCBieXRlIDQ6IGNhbGxfaW5kaXJlY3QgaXMgb25seSB2YWxpZCB3aGVuIGEgdGFibGUgaXMg
ZGVmaW5lZCBvciBpbXBvcnRlZCwgaW4gZnVuY3Rpb24gYXQgaW5kZXggMCAoZXZhbHVhdGluZyAn
bmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiKTsK
IH0KIAogewpAQCAtNzMsNyArNzMsNyBAQAogICAgICAgICAgICAgICAgIC5DYWxsSW5kaXJlY3Qo
MCwgMSkKICAgICAgICAgICAgIC5FbmQoKQogICAgICAgICAuRW5kKCk7Ci0gICAgYXNzZXJ0LnRo
cm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5n
ZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vz
bid0IHBhcnNlIGF0IGJ5dGUgNiAvIDc6IGNhbGxfaW5kaXJlY3QncyAncmVzZXJ2ZWQnIHZhcnVp
bnQxIG11c3QgYmUgMHgwLCBpbiBmdW5jdGlvbiBhdCBpbmRleCAwIChldmFsdWF0aW5nICduZXcg
V2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIpOworICAg
IGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFz
c2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5N
b2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDY6IGNhbGxfaW5kaXJlY3QncyAncmVzZXJ2ZWQn
IHZhcnVpbnQxIG11c3QgYmUgMHgwLCBpbiBmdW5jdGlvbiBhdCBpbmRleCAwIChldmFsdWF0aW5n
ICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIp
OwogfQogCiB7CkBAIC04Niw3ICs4Niw3IEBACiAgICAgICAgIC5FbmQoKQogICAgICAgICAuQ29k
ZSgpCiAgICAgICAgIC5FbmQoKTsKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3Nl
bWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29t
cGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyMyAv
IDI2OiBjYW4ndCBleHBvcnQgVGFibGUgMCB0aGVyZSBhcmUgMCBUYWJsZXMiKTsKKyAgICBhc3Nl
cnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJs
eSgpLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxl
IGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyMzogY2FuJ3QgZXhwb3J0IFRhYmxlIDAgdGhlcmUgYXJl
IDAgVGFibGVzIik7CiB9CiAKIHsKQEAgLTEwMiw3ICsxMDIsNyBAQAogICAgICAgICAuRW5kKCkK
ICAgICAgICAgLkNvZGUoKQogICAgICAgICAuRW5kKCk7Ci0gICAgYXNzZXJ0LnRocm93cygoKSA9
PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIFdl
YkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNl
IGF0IGJ5dGUgMzAgLyAzMzogY2FuJ3QgZXhwb3J0IFRhYmxlIDEgdGhlcmUgYXJlIDEgVGFibGVz
Iik7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxk
ZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFz
c2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzA6IGNhbid0IGV4cG9ydCBUYWJs
ZSAxIHRoZXJlIGFyZSAxIFRhYmxlcyIpOwogfQogCiBmdW5jdGlvbiBhc3NlcnRCYWRUYWJsZSh0
YWJsZURlc2NyaXB0aW9uLCBtZXNzYWdlKSB7CkBAIC0xMzIsNDIgKzEzMiw0MiBAQCBmdW5jdGlv
biBhc3NlcnRCYWRUYWJsZUltcG9ydCh0YWJsZURlc2NyaXB0aW9uLCBtZXNzYWdlKSB7CiB7CiAg
ICAgbGV0IGJhZERlc2NyaXB0aW9ucyA9IFsKICAgICAgICAgW3tpbml0aWFsOiAxMCwgZWxlbWVu
dDogImkzMiJ9LAotICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0
IGJ5dGUgMTggLyAyMzogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC0xIChldmFs
dWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQo
KSknKSIsCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0
ZSAyNiAvIDM0OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTEgKGV2YWx1YXRp
bmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScp
Il0sCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAx
ODogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC0xIChldmFsdWF0aW5nICduZXcg
V2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCisgICAg
ICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNjogVGFibGUg
dHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC0xIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1i
bHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAogICAgICAgICBbe2lu
aXRpYWw6IDEwLCBlbGVtZW50OiAiZjMyIn0sCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxl
IGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxOCAvIDIzOiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlm
dW5jLCBnb3QgLTMgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5X
ZWJBc3NlbWJseSgpLmdldCgpKScpIiwKLSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9l
c24ndCBwYXJzZSBhdCBieXRlIDI2IC8gMzQ6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMs
IGdvdCAtMyAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFz
c2VtYmx5KCkuZ2V0KCkpJykiXSwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24n
dCBwYXJzZSBhdCBieXRlIDE4OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTMg
KGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgp
LmdldCgpKScpIiwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBh
dCBieXRlIDI2OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTMgKGV2YWx1YXRp
bmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScp
Il0sCiAgICAgICAgIFt7aW5pdGlhbDogMTAsIGVsZW1lbnQ6ICJmNjQifSwKLSAgICAgICAgICJX
ZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE4IC8gMjM6IFRhYmxlIHR5
cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtNCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5
Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAotICAgICAgICAgIldlYkFz
c2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjYgLyAzNDogVGFibGUgdHlwZSBz
aG91bGQgYmUgYW55ZnVuYywgZ290IC00IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9k
dWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAorICAgICAgICAgIldlYkFzc2Vt
Ymx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTg6IFRhYmxlIHR5cGUgc2hvdWxkIGJl
IGFueWZ1bmMsIGdvdCAtNCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWls
ZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAorICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVs
ZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjY6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMs
IGdvdCAtNCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFz
c2VtYmx5KCkuZ2V0KCkpJykiXSwKICAgICAgICAgW3tpbml0aWFsOiAxMCwgZWxlbWVudDogImk2
NCJ9LAotICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUg
MTggLyAyMzogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC0yIChldmFsdWF0aW5n
ICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIs
Ci0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNiAv
IDM0OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTIgKGV2YWx1YXRpbmcgJ25l
dyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCisg
ICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxODogVGFi
bGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC0yIChldmFsdWF0aW5nICduZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCisgICAgICAgICAi
V2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNjogVGFibGUgdHlwZSBz
aG91bGQgYmUgYW55ZnVuYywgZ290IC0yIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9k
dWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAogICAgICAgICBbe2luaXRpYWw6
IDEwLCBtYXhpbXVtOiAyMCwgZWxlbWVudDogImkzMiJ9LAotICAgICAgICAgIldlYkFzc2VtYmx5
Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTggLyAyNDogVGFibGUgdHlwZSBzaG91bGQg
YmUgYW55ZnVuYywgZ290IC0xIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1
aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9k
dWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNiAvIDM1OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBh
bnlmdW5jLCBnb3QgLTEgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRl
ci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxl
IGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxODogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywg
Z290IC0xIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNz
ZW1ibHkoKS5nZXQoKSknKSIsCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3Qg
cGFyc2UgYXQgYnl0ZSAyNjogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC0xIChl
dmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5n
ZXQoKSknKSJdLAogICAgICAgICBbe2luaXRpYWw6IDEwLCBtYXhpbXVtOiAyMCwgZWxlbWVudDog
ImYzMiJ9LAotICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5
dGUgMTggLyAyNDogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC0zIChldmFsdWF0
aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSkn
KSIsCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAy
NiAvIDM1OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTMgKGV2YWx1YXRpbmcg
J25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0s
CisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxODog
VGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC0zIChldmFsdWF0aW5nICduZXcgV2Vi
QXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCisgICAgICAg
ICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNjogVGFibGUgdHlw
ZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC0zIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHku
TW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAogICAgICAgICBbe2luaXRp
YWw6IDEwLCBtYXhpbXVtOiAyMCwgZWxlbWVudDogImY2NCJ9LAotICAgICAgICAgIldlYkFzc2Vt
Ymx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTggLyAyNDogVGFibGUgdHlwZSBzaG91
bGQgYmUgYW55ZnVuYywgZ290IC00IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxl
KGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCi0gICAgICAgICAiV2ViQXNzZW1ibHku
TW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNiAvIDM1OiBUYWJsZSB0eXBlIHNob3VsZCBi
ZSBhbnlmdW5jLCBnb3QgLTQgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVp
bGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9k
dWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxODogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVu
YywgZ290IC00IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2Vi
QXNzZW1ibHkoKS5nZXQoKSknKSIsCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNu
J3QgcGFyc2UgYXQgYnl0ZSAyNjogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC00
IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHko
KS5nZXQoKSknKSJdLAogICAgICAgICBbe2luaXRpYWw6IDEwLCBtYXhpbXVtOiAyMCwgZWxlbWVu
dDogImk2NCJ9LAotICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0
IGJ5dGUgMTggLyAyNDogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC0yIChldmFs
dWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQo
KSknKSIsCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0
ZSAyNiAvIDM1OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTIgKGV2YWx1YXRp
bmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScp
Il0sCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAx
ODogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC0yIChldmFsdWF0aW5nICduZXcg
V2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCisgICAg
ICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNjogVGFibGUg
dHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC0yIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1i
bHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAogCiAgICAgICAgIFt7
aW5pdGlhbDogMTAsIG1heGltdW06IDksIGVsZW1lbnQ6ICJhbnlmdW5jIn0sCi0gICAgICAgICAi
V2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyMSAvIDI0OiByZXNpemFi
bGUgbGltaXRzIGhhcyBhIGluaXRpYWwgcGFnZSBjb3VudCBvZiAxMCB3aGljaCBpcyBncmVhdGVy
IHRoYW4gaXRzIG1heGltdW0gOSAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShi
dWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAotICAgICAgICAgIldlYkFzc2VtYmx5Lk1v
ZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjkgLyAzNTogcmVzaXphYmxlIGxpbWl0cyBoYXMg
YSBpbml0aWFsIHBhZ2UgY291bnQgb2YgMTAgd2hpY2ggaXMgZ3JlYXRlciB0aGFuIGl0cyBtYXhp
bXVtIDkgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3Nl
bWJseSgpLmdldCgpKScpIl0sCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3Qg
cGFyc2UgYXQgYnl0ZSAyMTogcmVzaXphYmxlIGxpbWl0cyBoYXMgYSBpbml0aWFsIHBhZ2UgY291
bnQgb2YgMTAgd2hpY2ggaXMgZ3JlYXRlciB0aGFuIGl0cyBtYXhpbXVtIDkgKGV2YWx1YXRpbmcg
J25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwK
KyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI5OiBy
ZXNpemFibGUgbGltaXRzIGhhcyBhIGluaXRpYWwgcGFnZSBjb3VudCBvZiAxMCB3aGljaCBpcyBn
cmVhdGVyIHRoYW4gaXRzIG1heGltdW0gOSAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1v
ZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKICAgICAgICAgW3tpbml0aWFs
OiAxLCBtYXhpbXVtOiAwLCBlbGVtZW50OiAiYW55ZnVuYyJ9LAotICAgICAgICAgIldlYkFzc2Vt
Ymx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjEgLyAyNDogcmVzaXphYmxlIGxpbWl0
cyBoYXMgYSBpbml0aWFsIHBhZ2UgY291bnQgb2YgMSB3aGljaCBpcyBncmVhdGVyIHRoYW4gaXRz
IG1heGltdW0gMCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldl
YkFzc2VtYmx5KCkuZ2V0KCkpJykiLAotICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vz
bid0IHBhcnNlIGF0IGJ5dGUgMjkgLyAzNTogcmVzaXphYmxlIGxpbWl0cyBoYXMgYSBpbml0aWFs
IHBhZ2UgY291bnQgb2YgMSB3aGljaCBpcyBncmVhdGVyIHRoYW4gaXRzIG1heGltdW0gMCAoZXZh
bHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0
KCkpJykiXSwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBi
eXRlIDIxOiByZXNpemFibGUgbGltaXRzIGhhcyBhIGluaXRpYWwgcGFnZSBjb3VudCBvZiAxIHdo
aWNoIGlzIGdyZWF0ZXIgdGhhbiBpdHMgbWF4aW11bSAwIChldmFsdWF0aW5nICduZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCisgICAgICAgICAi
V2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyOTogcmVzaXphYmxlIGxp
bWl0cyBoYXMgYSBpbml0aWFsIHBhZ2UgY291bnQgb2YgMSB3aGljaCBpcyBncmVhdGVyIHRoYW4g
aXRzIG1heGltdW0gMCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVy
LldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKICAgICAgICAgW3tpbml0aWFsOiAyKiozMiAtIDEs
IG1heGltdW06IDIqKjMyIC0gMiwgZWxlbWVudDogImFueWZ1bmMifSwKLSAgICAgICAgICJXZWJB
c3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI5IC8gMzI6IHJlc2l6YWJsZSBs
aW1pdHMgaGFzIGEgaW5pdGlhbCBwYWdlIGNvdW50IG9mIDQyOTQ5NjcyOTUgd2hpY2ggaXMgZ3Jl
YXRlciB0aGFuIGl0cyBtYXhpbXVtIDQyOTQ5NjcyOTQgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3Nl
bWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKLSAgICAgICAgICJX
ZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDM3IC8gNDM6IHJlc2l6YWJs
ZSBsaW1pdHMgaGFzIGEgaW5pdGlhbCBwYWdlIGNvdW50IG9mIDQyOTQ5NjcyOTUgd2hpY2ggaXMg
Z3JlYXRlciB0aGFuIGl0cyBtYXhpbXVtIDQyOTQ5NjcyOTQgKGV2YWx1YXRpbmcgJ25ldyBXZWJB
c3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCisgICAgICAg
ICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyOTogcmVzaXphYmxl
IGxpbWl0cyBoYXMgYSBpbml0aWFsIHBhZ2UgY291bnQgb2YgNDI5NDk2NzI5NSB3aGljaCBpcyBn
cmVhdGVyIHRoYW4gaXRzIG1heGltdW0gNDI5NDk2NzI5NCAoZXZhbHVhdGluZyAnbmV3IFdlYkFz
c2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAorICAgICAgICAg
IldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzc6IHJlc2l6YWJsZSBs
aW1pdHMgaGFzIGEgaW5pdGlhbCBwYWdlIGNvdW50IG9mIDQyOTQ5NjcyOTUgd2hpY2ggaXMgZ3Jl
YXRlciB0aGFuIGl0cyBtYXhpbXVtIDQyOTQ5NjcyOTQgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3Nl
bWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCiAgICAgICAgIFt7
aW5pdGlhbDogMioqMzEsIGVsZW1lbnQ6ICJhbnlmdW5jIn0sCi0gICAgICAgICAiV2ViQXNzZW1i
bHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNCAvIDI3OiBUYWJsZSdzIGluaXRpYWwg
cGFnZSBjb3VudCBvZiAyMTQ3NDgzNjQ4IGlzIHRvbyBiaWcsIG1heGltdW0gMTAwMDAwMDAgKGV2
YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdl
dCgpKScpIiwKLSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBi
eXRlIDMyIC8gMzg6IFRhYmxlJ3MgaW5pdGlhbCBwYWdlIGNvdW50IG9mIDIxNDc0ODM2NDggaXMg
dG9vIGJpZywgbWF4aW11bSAxMDAwMDAwMCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1v
ZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKKyAgICAgICAgICJXZWJBc3Nl
bWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI0OiBUYWJsZSdzIGluaXRpYWwgcGFn
ZSBjb3VudCBvZiAyMTQ3NDgzNjQ4IGlzIHRvbyBiaWcsIG1heGltdW0gMTAwMDAwMDAgKGV2YWx1
YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgp
KScpIiwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRl
IDMyOiBUYWJsZSdzIGluaXRpYWwgcGFnZSBjb3VudCBvZiAyMTQ3NDgzNjQ4IGlzIHRvbyBiaWcs
IG1heGltdW0gMTAwMDAwMDAgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVp
bGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCiAgICAgXTsKIAogICAgIGZvciAoY29uc3Qg
ZCBvZiBiYWREZXNjcmlwdGlvbnMpIHsKQEAgLTE4Niw3ICsxODYsNyBAQCBmdW5jdGlvbiBhc3Nl
cnRCYWRUYWJsZUltcG9ydCh0YWJsZURlc2NyaXB0aW9uLCBtZXNzYWdlKSB7CiAgICAgICAgIC5G
dW5jdGlvbigpLkVuZCgpCiAgICAgICAgIC5Db2RlKCkKICAgICAgICAgLkVuZCgpOwotICAgIGFz
c2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2Vt
Ymx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1
bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDM5IC8gNDg6IENhbm5vdCBoYXZlIG1vcmUgdGhhbiBv
bmUgVGFibGUgZm9yIG5vdyIpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2Vt
Ymx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21w
aWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDM5OiBD
YW5ub3QgaGF2ZSBtb3JlIHRoYW4gb25lIFRhYmxlIGZvciBub3ciKTsKIH0KIAogCmRpZmYgLS1n
aXQgYS9KU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfRGF0YS5qcyBiL0pTVGVzdHMvd2FzbS9qcy1h
cGkvdGVzdF9EYXRhLmpzCmluZGV4IGNjYTBjZjNiYzQ1ZDBmNGRkMzNiZDljYTU5Nzk4OTU0ZDJk
NDViMTguLjQxNzE0MzUxMjhhMDg0ZDU5NDlkOGZmMmI4YjEyNTcwYjdmMjMzNzUgMTAwNjQ0Ci0t
LSBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9EYXRhLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9q
cy1hcGkvdGVzdF9EYXRhLmpzCkBAIC01Miw3ICs1Miw3IEBACiAgICAgICAgICAgLlNlZ21lbnQo
WzB4ZmZdKS5PZmZzZXQoMCkuRW5kKCkKICAgICAgICAgLkVuZCgpOwogICAgIGNvbnN0IGJpbiA9
IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5l
dyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCBgV2Vi
QXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxNSAvIDIwOiAwdGggRGF0YSBz
ZWdtZW50IGhhcyBpbmRleCAwIHdoaWNoIGV4Y2VlZHMgdGhlIG51bWJlciBvZiBNZW1vcmllcyAw
YCk7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbiks
IFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgYFdlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBh
cnNlIGF0IGJ5dGUgMTU6IDB0aCBEYXRhIHNlZ21lbnQgaGFzIGluZGV4IDAgd2hpY2ggZXhjZWVk
cyB0aGUgbnVtYmVyIG9mIE1lbW9yaWVzIDBgKTsKIH0pKCk7CiAKIChmdW5jdGlvbiBFbXB0eURh
dGFTZWN0aW9uV2l0aG91dE1lbW9yeSgpIHsKQEAgLTYyLDcgKzYyLDcgQEAKICAgICAgICAgICAu
U2VnbWVudChbXSkuT2Zmc2V0KDApLkVuZCgpCiAgICAgICAgIC5FbmQoKTsKICAgICBjb25zdCBi
aW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7Ci0gICAgYXNzZXJ0LnRocm93cygoKSA9
PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbiksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwg
YFdlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTUgLyAxOTogMHRoIERh
dGEgc2VnbWVudCBoYXMgaW5kZXggMCB3aGljaCBleGNlZWRzIHRoZSBudW1iZXIgb2YgTWVtb3Jp
ZXMgMGApOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShi
aW4pLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsIGBXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24n
dCBwYXJzZSBhdCBieXRlIDE1OiAwdGggRGF0YSBzZWdtZW50IGhhcyBpbmRleCAwIHdoaWNoIGV4
Y2VlZHMgdGhlIG51bWJlciBvZiBNZW1vcmllcyAwYCk7CiB9KSgpOwogCiAoZnVuY3Rpb24gRGF0
YVNlY3Rpb25CaWdnZXJUaGFuTWVtb3J5KCkgewpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pz
LWFwaS90ZXN0X1N0YXJ0LmpzIGIvSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X1N0YXJ0LmpzCmlu
ZGV4IGI0NDQ1NjkzMmQ5MGI1YzgzMzE0NWVjM2YzNDJmYzUwNDZmNzllMGIuLjVjMzE1MGUxY2Fi
ZWJmYjg0MzMzZWY3MTQyM2E4ODg2Y2RlMGVhZTggMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9q
cy1hcGkvdGVzdF9TdGFydC5qcworKysgYi9KU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfU3RhcnQu
anMKQEAgLTMxLDUgKzMxLDUgQEAKICAgICAgICAgLlN0YXJ0KDApLkVuZCgpIC8vIEludmFsaWQg
aW5kZXguCiAgICAgICAgIC5Db2RlKCkuRW5kKCk7CiAgICAgY29uc3QgYmluID0gYi5XZWJBc3Nl
bWJseSgpLmdldCgpOwotICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1v
ZHVsZShiaW4pLCBFcnJvciwgYFdlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5
dGUgMTcgLyAyMDogU3RhcnQgaW5kZXggMCBleGNlZWRzIGZ1bmN0aW9uIGluZGV4IHNwYWNlIDAg
KGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKScpYCk7CisgICAgYXNzZXJ0
LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbiksIEVycm9yLCBgV2ViQXNz
ZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxNzogU3RhcnQgaW5kZXggMCBleGNl
ZWRzIGZ1bmN0aW9uIGluZGV4IHNwYWNlIDAgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5N
b2R1bGUoYmluKScpYCk7CiB9KSgpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS90
ZXN0X2Jhc2ljX2FwaS5qcyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9iYXNpY19hcGkuanMK
aW5kZXggMDhlNzRhYTMyNGE3MTc4OGU1ODE5YzRhOGJiZTc3NDc1ODViMWE4OS4uMWEyZDIyMjEw
MzA0NTFkZjA2NDViMzBlYTMxYmIyNzQ4ZjU1MzZkMCAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNt
L2pzLWFwaS90ZXN0X2Jhc2ljX2FwaS5qcworKysgYi9KU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3Rf
YmFzaWNfYXBpLmpzCkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgICAgICAgICBhc3NlcnQudGhyb3dz
KCgpID0+IG5ldyBXZWJBc3NlbWJseVtjXShpbnZhbGlkKSwgVHlwZUVycm9yLCBgZmlyc3QgYXJn
dW1lbnQgbXVzdCBiZSBhbiBBcnJheUJ1ZmZlclZpZXcgb3IgYW4gQXJyYXlCdWZmZXIgKGV2YWx1
YXRpbmcgJ25ldyBXZWJBc3NlbWJseVtjXShpbnZhbGlkKScpYCk7CiAgICAgICAgIGZvciAoY29u
c3QgYnVmZmVyIG9mIFtuZXcgQXJyYXlCdWZmZXIoKSwgbmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1
ZmZlcigpKSwgbmV3IEludDhBcnJheSgpLCBuZXcgVWludDhBcnJheSgpLCBuZXcgVWludDhDbGFt
cGVkQXJyYXkoKSwgbmV3IEludDE2QXJyYXkoKSwgbmV3IFVpbnQxNkFycmF5KCksIG5ldyBJbnQz
MkFycmF5KCksIG5ldyBVaW50MzJBcnJheSgpLCBuZXcgRmxvYXQzMkFycmF5KCksIG5ldyBGbG9h
dDY0QXJyYXkoKV0pCiAgICAgICAgICAgICAvLyBGSVhNRSB0aGUgZm9sbG93aW5nIHNob3VsZCBi
ZSBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjM3NjgKLSAgICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdl
YkFzc2VtYmx5W2NdKGJ1ZmZlciksIEVycm9yLCBgV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3Qg
cGFyc2UgYXQgYnl0ZSAwIC8gMDogZXhwZWN0ZWQgYSBtb2R1bGUgb2YgYXQgbGVhc3QgOCBieXRl
cyAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5W2NdKGJ1ZmZlciknKWApOworICAgICAgICAg
ICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHlbY10oYnVmZmVyKSwgRXJyb3Is
IGBXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDA6IGV4cGVjdGVkIGEg
bW9kdWxlIG9mIGF0IGxlYXN0IDggYnl0ZXMgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseVtj
XShidWZmZXIpJylgKTsKICAgICAgICAgYXNzZXJ0Lmluc3RhbmNlb2YobmV3IFdlYkFzc2VtYmx5
W2NdKGVtcHR5TW9kdWxlQXJyYXkpLCBXZWJBc3NlbWJseS5Nb2R1bGUpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlICJJbnN0YW5jZSI6CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vanMtYXBp
L3ZlcnNpb24uanMgYi9KU1Rlc3RzL3dhc20vanMtYXBpL3ZlcnNpb24uanMKaW5kZXggODFjZDdm
ZjAxMjJmYjIxY2U5MWY4MGZiNTFlNGM2OWUxNDU5OGM0Ny4uMDQ4NmZjZmRkZWZkMDgyMWQzOTI0
NmNiNjQwODczNGJmZWJmMjJlMiAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2pzLWFwaS92ZXJz
aW9uLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvdmVyc2lvbi5qcwpAQCAtNSw1ICs1LDUg
QEAKICAgICBpZiAodmVyc2lvbiA9PT0gMSkKICAgICAgICAgY29udGludWU7CiAgICAgY29uc3Qg
ZW1wdHlNb2R1bGVBcnJheSA9IFVpbnQ4QXJyYXkub2YoMHgwLCAweDYxLCAweDczLCAweDZkLCB2
ZXJzaW9uLCAweDAwLCAweDAwLCAweDAwKTsKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBX
ZWJBc3NlbWJseS5Nb2R1bGUoZW1wdHlNb2R1bGVBcnJheSksIFdlYkFzc2VtYmx5LkNvbXBpbGVF
cnJvciwgYFdlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgOCAvIDg6IHVu
ZXhwZWN0ZWQgdmVyc2lvbiBudW1iZXIgJHt2ZXJzaW9ufSBleHBlY3RlZCAxYCk7CisgICAgYXNz
ZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGVtcHR5TW9kdWxlQXJyYXkp
LCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsIGBXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBw
YXJzZSBhdCBieXRlIDg6IHVuZXhwZWN0ZWQgdmVyc2lvbiBudW1iZXIgJHt2ZXJzaW9ufSBleHBl
Y3RlZCAxYCk7CiB9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vc3RyZXNzL25hbWVTZWN0aW9u
Lndhc20gYi9KU1Rlc3RzL3dhc20vc3RyZXNzL25hbWVTZWN0aW9uLndhc20KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MjRiMjJiMWFlZWEzOGU0NjljMzI2MGJhMzRkNWRhNGE2ZGIxMjE1MwpHSVQgYmluYXJ5IHBhdGNo
CmxpdGVyYWwgMTM0MDkKemNtYlc4T04/QXVkQkBMdlJhTXVtPk1vQ009JFl+MGQjPz1gRndnXm9L
X2pJMmd4R15JVyhZRzJ2WmByJlk2ZSVnCnotUnxsZCEkPklJQSZgc3xxQ35KayhkNGx9MWQlTFFC
b1lmR3RVUlBkViE8TWpTZkdlU0IxT3VFI1lEPTJXYipyZQp6PWlZakJfZT11Zz5BSjZUJi12Y3B8
TkhLfVpnY05XPGVaRUM7XjUlR2IpSE4xX3hHZHk9T1g+WWB9PllQX25oT3YKeklVVGM7R0o8WFZy
UWhhOyk1Ky1Xe25jT2xqWmdVLSpGTl5fKTFNeEdgcXxHVWAlWSYmJnBoaXRjQWF6ZUByb1N9Cnpa
fWB2RkMkaTAoSkNtdFBHYEsmeXlTK0ppYWRjeUpYSl8pVk9Lc1gwTjdIOV9ya21TfkMqTnV9SiQ/
Nk1ufEpULQp6T3JNKFVlMTdyalRaV0BNZCQlVUg/QGRRe2hqJkpJWnJ5dSVjPVBzKSZJb0RgaHJ7
aWlUVSVrcCktV3VlWHtucWAKemQheS08JD5kV3o7aioyMWRHRlRkX1Z5KiRHNz5jPW9PJTMtamN+
M3QrYEdOS3tqIVRScGY/fXpwKG4haTY7OGMkCnpjZk0kVUtJSEt5PlVtcXgzRDBxSzVGZjt2QyEy
MkcrI1dedXFMIWBPNGNDOGxiOHBtMChncmpxejlxJUlKeFlAfQp6UFNTfH5RdUc8NkRWciFzR2Zw
SEtYSWt5WndmPENOVGw+KkRtLTc/cEMrNWZOdT0jMCFgQVpCcyomZzEzX25sa3IKelVBZ295eF53
Untxdj9oXylnSGReIXVDc2hwTDZmYkNva1JvXnY+UyZuYkNDNXkoZFMwdnIjOGNqYGw/ND9ZKy1F
CnpHdV56a15+fUFeVE8pVTNnXzlnPy1YRk8mPTB7aGZzZTVsVytgQnAxYXUqKzZSMzIqJVUpPGln
eHckPnV6SjJxUwp6ZClVVUtQeHJwQSZFayE/KXNCfF4rK181NV9mVUl5Wip3eCluWSM2Q19gK2x+
YV97Y2gkaj9CXyZTY35VQ3lAU1YKekdQJTFXR3VXS28tbnJ9RSlfd2tFWS14TFljPkFfe2V7WClr
O2x8MldDOWNTd09ZXyNfazk/cHleSnc/NGU8RVQzCnppSml2Pl9ScUQtPXY9RkM8TVhYXkV4JEpR
X2piPj5pWVUqJnRSZTFQRUJfdGFEY3QjMXtgPEJZVSlEaHBvcDB5KQp6QUJJdCNFMiZPKUlKdUl+
QDh+d09ibmAjWnooXnw9WnFPfHdFd09hJl5mQmsmYT9IODZoSTMhQmg1YypZe0pTPUQKekptYlg9
O0g4TUZ4TnNOWmp9RlI5dkdjN1c5JmBxZWxAMD03SHFaWkNDVzg1eDA1VWs9JmBsWmxtZjk1S0Rr
Kz5sCnpHcDwlSCNJOCEycXRKO3s8RXFQdkJIaHh0bHlsTGd4V2d2QzYhKGcoaVd1fEphbiltdFpp
JExTcWF4NGNQSjlgYAp6ckEwaWhRdldzaEFNXiowUm5nVkheS3NjdUU7R3R+M01uI3R0N0s7MThK
RWJqTkdgLV8peFRjbFQ8ZXJjVWdaQWwKeilTckUrWHBoU19EfDF+Nzw+YExXJnYxZFFEakZOUEp7
P3pgcUdPbDBiZiM0X2JoUUZxdCllYUpqaHQzUFBUV0g/Cnp1bUo7dVZucktRYmk+OTtxUnRsK29v
b0J9WVAjPVRSPlZmKlIkbDdYIVVrUUdCcmUxb1B7SmU8NXxoe19GRVJ1agp6PWxRPWFzeDN0V2cq
MT4jP3g7O1NCd0JTciM7TF41c2F9eHh6PCg5IzN8MG5AZEd+UitjWWRGe3tDO0xzPUlBO04Kenk4
YV9HNnxOc1ZjUmslN3l2OytSMVkkJDt7MXYtQUlPYHZ7YWMhQElCQ3FaMXBpYGcxWCNUP31QSisk
TURKfk52CnpofjJRUk44UlV4a1JHXlFgTlNlT1U7ajM4NUktNEdfbWBrdUkpI2lVLUYxbF5FeWph
Sz1YM2BUTTVXfVoxQmJRTgp6P3ppdiVEaiNKMmArMSlLdTNnYl9GYVBGbUYpRVREJFUheXBoNF88
eHxDOERxVHFzPkhXe3R0UUQ8eko+Rl5lSXoKejImeEM/YW1MYlJ7JTVqbmJaWG5kSjdyQyE4QCEj
OVJnXyolRmoxVEY2U3tBMyZNd0N+Y1M9OEp1Q3FgeXhLT3hCCno+MmZDNShmTTRMSzJrK31kfldh
I2FoZDBAOGxrUDRQJGB1JDRuZzI8Rj8lPXFJXmRyO0lQYTVQQUNGSHNfbFR4KQp6eFhacW9uYW8/
WlUhQEgwakhedWh0IXZeSUE4S3VSdiVtfVUrZ1VwcGJzVmYyZjBMRUwjPzA2bGtYSjdNKjdxZEkK
eig/UVhGT3clR3R6Wl4pZ3t5IXNJI09HdUdoMjFqdDR8MSpDPTFQN0k7U0gpN20ma29gempGN2hn
IUxnUUB6SmkyCnpfNlcwODxkZG9ZX1ooSjViKmcqaT5zNTxBYmRQZWJyazl4JTJPfiZLe3I9dUFe
cjBzSUJRMzwqZ08qdDcxKHU3MQp6O1JQIy0yfUdmPjQ5R0R2dHlFIT94VH56cmpVX1N7JXJpMHs/
JkJiPkhJKEs1IUkpVCs0aW8ocVp0NVhMX2pBWUEKeldWaGJnXzR8bjNfd01fX0Y0UXRrSlpBVE9Y
SUZ9dGEzK091QUsmLXNaazA/Pmg2TGZHYCN3SCY5TDxndTVvQDdqCno1YHwoR3YkN3xIV0VyPyQ1
SzN4N3NUNVI+Nl5vKT01RE90JFYoRk16aWdwPF9xS1JpeEFzbEQ7WiEjQG5WIURASAp6UXIxaHln
JDRhSmJuI0Q7NFBMVipvdVdgdkE1PXZzMm5tfmwlPj5PSHFYaik+TU47QWNXaD45NVFIR24/SEpJ
fmAKel45OH5laUcpTjJ3enowMUF8cldAYTxwUHBLdFcoY2BzJUxie19qaiVpWE9SbE1aV2NCVEVQ
dlptRk80T2lqU3hNCnpYWl45MWYjOz1JSjJFMkxNZmloIWFkM3FaY0EwM0NUJFcrZ2dETWl0d1c8
U3NFb0NoMnhLZz02Y1FTMEBQSkJJKQp6ZUMoSTAmQiZga1pSVTdANjZWVSYhUmxGYnoza3pJP0RR
JSRBbHJgPUt9X15jNW0oZ0I1NHxoWFVYdGVgUHZnd0EKengod14wSys8VWxDRVJoJDFeR31RMW5O
U1JVXllsKV4kdk5lQXJmfjhfWlFKcWpkI3x6OHpgKnB1ZEElPGtWSS1gCnpuOFFhOzFaJSFDQCk7
QWkoSnNGNUJuP2t0M1djTC1HfShqJFNqdmp0bEJNK3xUVEZpZDcxQiN7Y09VTENARjNUdQp6bVRP
d3tGMihEbiNMN3x5YFYjM0Z6RCNkYCtwX3BOY1M3NSNGbDE+cDgrS3xvakRiVytyaHBxdm5KYG0z
NyZJUlYKekl8emA3NlQ7RjhfWFZHMFohR0l+I29YdThCUjsyfmMrfV9PQ0VBajV3VFIwc18jNjt2
P3NLYU1LZyl+TkFSQ3lLCnomKkFRZGc2MkxhRCYldTNaMVh9Kzd2WnNNMVgtLVBgRX52V2AtRHJz
VW5ZdHwxYXpsLWtrLSFHTEtnVHJVUHJifQp6e3ArdjQtVWZYNXZrRXFsIUxAX2BgSVdJQlNtWSRt
TSppVFpYWUg3e2lUX1V8QiElQ0QxMyk+JDIlcGhwaSN5MikKell4bEtVZHdpZD8hYzVWMDA8JEZS
NkNTOzdsfkhfSXxCNGR9OSptYSMhPD5va1o8UjQjQXgpcH5YQiFCWVBmSjJjCno4T3UqPEh3TlJi
N01BTik7YnBhcTVNSW5PIVZoS0MlZ3tNUFBnTV9IRElTNmR0UGYtZ29ncE53VVkpPnJtSzZeUAp6
aTZRZVZSWW5HNm5JaHxKaEt3bSkmKms2X1MyfDZyMzlsNkttMGZPWmskcH1xVypAbkJpb2RvTU1H
Iyt6ZEdSYjAKekczOSt5WVJFKD1XSV88bDx9b2k7Q1dffm9Yejc/dFIzREckNS1YdkxkN3Z7RTJi
cFhlKS16WktHKTBeaiQ7NkxACnozdi1iJXtGLTYpakh7cT4tR3ZieWpoUjNxUypndHU7OEdUe0Zk
Q0YyKWl6ek4pLURedjVjI19hZyNlfVhRWHp5TAp6ZytqbyU/eTEzNFd1WSl1RDE8Zz1obHNlZDd6
JmtKRCtRbik+YHtAO0xnNnRObClDflV1LT01aWooa0ModSg+OFMKejM1Qn05aCE7YmxXbmBuVUQ9
JXxKRk8mcE9HeiowaTYrQUE1TGVYdl56VWImS1JoYkhmZ3A0e0FSKkkrPTREK1FCCnprZWZMdzd7
KHpPJmhBJTY+WkwmRXFFcDkyblliV1RyXnBvKHA8cXpRI0JlMUdfKDNzfFNyaWkpYSRIUWJGdDM9
WAp6VlYzIV9nPHQ4NGBxRVR1MDBSI1dGJVopfENQdCN8UyZZUFU0NDE0RioqR0E5M0BuMDJYOHNg
N2oxOCM3a3BkaHwKejVLJS1fNSVfIyNZX2YpTnduTG1HdDxVNCs4ZGl5O3R5dSZ0K1M+RmU8RSZh
LXV7Zno+MDwwRm9UZWNZOXZqMDIwCno4Qm1PaF5jTV9vI0tAMiR1fih9cCZycUxZO2koS1ZNTzxj
REhScXx5RkJ3WnhxPUIpKGpGRz8ye1dWVylJI3dCQgp6WURuKjRNNXohLWs7WXlWOXV2WjI1YHJx
Oy1VUF8oRHVJbVVyWU9TVlVzQWB2eC1QbFdNK2Q0N0whNShAQl55b04KemdySFBgQmBEN1B4NHlH
VnBUQGs+cj4mJDI5N040NWN0UXVaa084V2FEQXQyKGcjO0ZkMVYja0tZM0lOQUtASSlrCnoxZHZy
QFVFSEB3WGU0K1Exaj5ZZkd6dTFjT18wPjhjPyFTVURBQHhKJTBDJHVPamVRMXc4NmJXRTZpQTFH
a2EkMwp6cD50dCMpSmF4JDNiXzVEZm1fbk4qOFpVKWs0VndsS2hGN0lRRU5zSGJUKHduN1BvfDUm
LUlOcGhMZCp4T3h1aSYKektQV1dRdElmX2cqRng5ZSt4N01AKjg8JT9VayE4KmlVQSFsfEtzb2Ne
TE1nNkg2TlYrMkh2NlZLfCFxdSRNMl9oCnpxbG9iRXpnMVpvbC0kN1VmRFBXayZWUXtNI3FqYm8r
cHtSJUY1KDtibUFnS2ZrQ2M2RSg5QEJmYEpaYm5CXjA7MAp6R1JsSk9IUVptSjJ0SFUtdkw+Yndq
OWk2PXc1QlJLYSllfHdYN1dCWiNOfCNFX2FrZl5rMWU5RDB1bSFSP0NXaWQKejlEfEUrcC1CcTZQ
MnJYamA+QjJfUShWPlJJcm47fWFla2w2TWkzSXp5ME9ZWmF1X2ApXz5aQENTd0ttJEFuQCFMCnpM
Sk1GfCl4M2ZDWXxLU3o3T2UjZSM5KXcraVVqVnchQjBuRyhKfUB5QjMzM3VVaFJgQEBGYXNFdzVh
NEQ/SU1+Xwp6V259TUsqSlZ5OSEtQDcjMGZ5VE9XPjheJk1rfn1DNWx7REhQQyZUMmdjcHMrcUJY
ZXFoJXFWKTgkJF53OGxeT1AKelFBODF7b3syRnZAa21KVkg2c0t+Pl80PiY5JUtVU0xWQERLXzxH
ZTZtIVRCZXpwNnlHSCg/cm4yXkx9cks/UFp7CnpzeVE2PHllMzxhR3JSX18peHl8RUBCP051THkm
blM9cShybk9VZXFZQTxgTE5CP3tGPjs3bio3XmVFUV9zQXo+PQp6PDBrfFo8dkQ4fDFgaDx1UWtM
UzlSbE1jZjYjSnx4WXxsUWIjaEd3SmJ1cmAkY3F3ZzVfeW1ANkVTNmAlZiF1YjEKekBhJXQqYCl8
dTt4RX1Jdi1PeFpfYVBjRTdTYSU5aiEzUUVJd1hLekQmNihPSDFAVkBvQSR2fH5DclNTdEdefCli
CnpMVG5XMDxOfVFrJXJLe3pLPklLdW88ZlZrNHNFSHhQJTJ2bVVKPllNdDBJZVYrSGtjQGR9V0k7
TF8/TVZBJnx3Uwp6XlAoa3hfK2NIaDNZTXxSZlNeY352YDhCPFdHcmYzMVB2IU5URE42M29jT3Z0
VHNQdnNsOWJYYzsxYnVQNE13QEUKekhZWmdFZ2JNJjU5KERvKlV8M0h7TzUrOHxXLVMjNTU8QHU+
dnRTUFNndGlFeFlgUjNFPXxMV0ZnSTg5clRUWk9hCnpZOzxAUzBNb1FBUEVyVFk9Q1M/XnNaZUBo
ZkdiYU9nVXlNOUQrISZucXlYemVzO3hrbmtnNSQ9cj00RGtWZ3BrYwp6LVhje3B6YTElY3lSeTU4
UiY3fHlMUylsfHAmPnN1XzsmZSVsNzMpIXA+WGUjXylJai1ITnspZHN3T1Y3TVlMK2MKeig1Uz91
ckFNNE0qayg3UilTYHZBaVhseVNZfnxrN18tO1B9ZlB7SnchN2RjPDd8cyREUD1+UmcwWFRwVjY7
TVVFCnp8NFFHMFlQU1plUDRWN1VuWUBsa0hRWVBOZV4kWUZNWVBaPWxoaFNGXzlITnwqaDArYyQx
X2ZGSEg9ZXMka29MTAp6MzZIVj1vWTBqP0t+OHxqYFFLQzw2M2M5UVdiOEZQMkFMdS1yIzhmU2hi
KSQxTnVsS0VXMipNTCojcW4tbDlDPkIKeiopdDB8K0E0I3t2UGIkbDc1dD45NEx8QihibVNgPiR5
aWxxMlNuPTZ2YTFZNzNWZWohO3xsSSV2RVc4RikrOVRHCnpORTBpI1k0e3kyeERfc1BFTz5AVVgq
NjdsJmxHTGJpb2s9T2A+PTdyMDImI0A0S0JxYVloMm5tem0oYztjO248VQp6RT0+JVY7LThwcGdH
LX1oYWNUUEl4SE44WHNqP35jeEJPdDxUOSU4eUYrcCNIT0pte0V4Vz1XWG92NHxgYUF7QnkKeiFh
KlFReE9CeFpVdyNQQSg3elgpQSgwWExDQDcyODQ5bk88Q2cyRnFxPCk/M3F0S3BPRUMoSCtYLWlJ
N2h+K2Q+CnpySG1lM2BKej5LPD9XJGI/QU9Pd2NqUH15ODx3ZG9MQTFqeCU1citSSEpobClOREdw
UHZLJnNiUmFzQSY5OHNxQAp6X0t2MndJdEJZajx1bzFHZHNwbH1ZYGQ/N1U3ZlMmOz1mRTRycz08
MEwoZjslTGJYZXZPWW0hcGs9fDR5SSpZRU0KekhkTHBfYmctIUNaaEAkQVFGMWhvS2gkbCh6N1hP
NnVWOVJFKFdRZFgwYDc4U0VoPGp+VVJGWkUycmRmdHRJVGozCno0XyhRTikxaVMhRF5DdkVRZmJs
PSRkSDU1Mm1ZbENNKTFUaCgrfFZ2WDZfMDhsWTReNjc0JitHbz57WCNzfkVBUAp6K0IyO2tZNGxV
aUgleEktZUg0cHwzbCpjRy1rRTJ7Y3hFSzw1YGJDVkFGXyYoVV5vUV5UZzZDO1gmdGtXMXlnd0AK
ej11a04+YztAb00xYlZBN3IoKzRxMz1vK21EfVRYeT09ZCZGakNPbmRqNnQmP2tWWlF9RjEyVDde
e3ckMElyVE1SCnpAZngxVlBtZWQrZjZifGpTWFlNcCg+JkJ2VV54dCF4LVVITTArcT1zWXtNZkNG
TSNXZHIreys3NlhWN2NnRmk+WAp6NktqYF9nZn1CUihOQDN7Rn4zazFMTChBMlF5MWhyMHllP3pw
YHMqMSkpZ2d0emlkVUJeWjF5dzwzZjN0PVlSOUgKemc5OF4wPzIjKnxnPWNCdEdjZ3ZWUHdjNTUq
TF5XT0M7YFMqYm4tej0hZVgrNUZZSCM3TWVTSXdadGE+X0gzUnZTCnpQTlZoTEBUPyphYjR4QGsw
QCswfnV7dUkjT2J4c3diVHkhZ003LS0wI1JuY2FAQ1dkKkxQajtiVjAlR1F1RzJidAp6cDI7dkMr
ZmBVdVFETylCKWA9WSQwSyR+cmdUUWctVENhTk9mbVIhZWd2a3FHJktoNSlod3g/QTtMQWYpayQz
RUkKemp2LUFSTD9wOHI0UVUhbzMoZGY/V2lVKmNGb1lSPFBPYHxPWTZ6anV6Tjg5MERwM3VqRGom
MllBYllKTmdZWHEqCno2WkNSYjdFb3U/QmhBIUh3UDg4S2E+PTE9MzNWRm9JXzgzXnFhWHlxSkp+
NUpSRkJqSSk/OEVmNjRhXnQ4ITBJKwp6aE4zLUNpQjVHaEJrTVY4KVkrRk5IUU8xMmQ7UEZUbCM4
PWckUWdCcWJjUSpQN3EqXlpeQER8KWVkLTdSKzd8JEkKemh4P19BYTs0YCNAMDtwYnlOdEx+Xm8z
aiQmKm94OTFvaE0lYVJhYXdmcjZ1T28+cjI0OWNDN1hvdk1jfG51WXs4CnpIe1V9PyUkRkFKYHN0
dXF6NkMjZDY1MTRYanQzXyFDUWwwcDdCajAmOVJ2Xj5TOU5pUUFHSmVhRXQ4IzliO0t6UAp6SXNn
TUoxTXEtKTB2cmxFcl5pIXd4dGd2UXUwdy1JbGd3KHBXKWY7V3YpMV99Y3hJXmVMaFBWfXFGMGN0
eXJiPkkKeiZWaEEhK2oyZlltOT14YCZTJUJsVndUM1c8JCYkUjBaQXcjV1RDKkQqI3d4RzVEPEp5
TnRfMjxpfV4talNyeDQ7Cnp3SmpUU2o0LURyX1I4X3JFS1gjaVh9Izx+dDd4cTEhOEghWClxK04o
MHxoakw2PyFeeHhXS2J2Vyl+JlZoKEx2Xwp6bk4xeVlMOEw4MCo0Wk5vNj9yRDIjcEBjNCVXMGxR
RjNiI1RSQnR1NG4xfWhBQXUkK2ozT3pOWWZhRlY2bztaKj0KenFOWWxObXQpSTN4bW8+P3ApcW9+
OEJkeEEmfmRvVjFKSCg/KEw5Z25uI1crMF98OzU/MW5xalIhKHw+ckREJE1JCnpDRDl6Tl42OzMx
NUVLJDdJSjx1NG5rQER3RWJ3M3JFZ0RyNG87blJ8ZiswNDIxKSRIb3hUQlM/VVMkeGdza25hUAp6
VG9XNlcxMz1BY0sjdCY+SWRVWjhhSzBEPi0memVKSnQ8YSZPPmgkSTQ4T24tITs9UFU4I1dKOHFo
c3FqJUZzZygKelFjMChXPmJsaEdJeXhPaz5wRS1yQEpMfD45NFR4QzlGcVZYWk5xeSZieHt8NEhC
NzNeYyppYWI0XmtvUEF1OSV3CnpGNSR1UzJwOzZeS05UJT1KamV8SjUyfUdoTWx3N3x1NUl3KHZR
I1lyMCVqenBidkJqYFpQVEh9NzkyP1JrPithZgp6OzZrTlZfaTFMYzcjPDhWNTl8ZyFuOEI7Nmgj
Q18mRzRSTmUwNDxRO1BnVUAlRHtLeWhKKzVXYG05XjVAOHlKQlEKekxKZWpOP3JWQEBLNn1JTVUr
ZmgtZHpWd3JzbElQYEMkKH1rVkw1UTBLJjxoe2lJVGtaMlFuUWJrTkRvOD9mMkw2CnphfDlQVGFX
c2ZPIUclYU1oRCk1Yjl3ajRTQmhVWlgtdXo1P3hyPH5QaGRTYH1YcVZZenxGP1ByR20jbUdtd0ps
bQp6TiN7NXNCIV93e148TTw4YDNGd1Q7eilLbXI3LWFXYCgyKy0lMHpiO0VxbSFNbV5BdVA4RDwt
djVDJGRMTW0tdj8KenNSaEdeNDY0blV1cW5ka2VBcndGbn5Qenk1akliUiV9MnVLcW1jT2tBc0wt
VU1EfXF4cX47VjBYPy1jVFlpWVE0CnpnZ3NqTGRIIz1qRkZ3K0hqKT4mb2Z4VlRBU1pSKUAlMjco
ajV9Wjw0QjFJJi1ndX1WaVZnejU8JFJmSnYrKzJiVAp6UlYkckleXm1+bypGXkcrT2BjZ0dJIUkw
LSNPU3QxPnBefjsxNDJsST8xOH5TbmM1cUtXKjIqPmYtS292NThgQysKek9wcXZoI2lkdzZXJChQ
YnFeVWdgKC1KTHY3Y2EkPEVfKWw3VmhOYk5Db2FYM0Y/JTFtNmlkd1BAblkmcygob2dSCnpEXm1y
aiM8ZiUlOyFXc2BMaVJSRC1BRz1+aD5nPWBhM2RsSzN3PWFkPWMwP0JibEFUM2t8JiljRSZWTV82
JjZoRAp6MSlEantQLWApcGVDWiRCRTh5Sjk5TVNISCRtTChSY1Nib3VUaG1rK1VhIW81Jig2b1oo
bVRNPF43KE5UamBQM1EKemZWVDdCVSYtVEZHdntBaCRzO3hnLThfblRFWXs2ZUJqO1NxLX1sPTVx
fFNkZ1Q+MWZOeHZOSmRqI28/Yl9fZnNpCnpgQiNgS3l9Tm01NnVxazU1NCFMek1ZUX1HTVpDS0Yx
eDR+a0E1V3hqQFpDaCNkQHw5aHpte2soZWtqcGR7Nj1EQgp6PkM9WGRadkFDTXpWdU48Wn5pPypl
YCktcylyRlYoKlhFeEk0M14mREtYS2V3MXJOPT4wNjRrJDNCc3d4dU5GPmMKeiFfa1dgPyFCY295
dCNSNj1rOG5pO141eHFvJVFCfWZyc0RoJVkjUSZfMDdpZ2BQKTBnVGlaSyhxZXRoKnBQJF5HCnpq
P05lKGM3MU8mK0lxfGBodEVXWWxoTzJUTT9YM15keSpPTlA1RWVIXkxmNUgqP3dYOF97SWx8ez9l
KGtKQUQ0Nwp6SjlsMGxlKDF2Kyltb3JuPWNWYjttT0xsSD4hWHF2WmZ9cHlZeUkkemk0TmJjWWRi
SVMpZGJoeXA9JndfKldjTkUKenlLJihtJldGITk+UHdeTi1fP0JaQCRUXlQjQ3NNJEAzPEpnKFJn
cTMoWj42bHVRQUBnQGNxUWIoJnJQOCQyVGBWCko1WmA/S2UqczgxVGpCciEKCmxpdGVyYWwgMApI
Y21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9zdHJlc3Mvc3RyZWFtaW5nLWJh
c2ljLmpzIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9zdHJlYW1pbmctYmFzaWMuanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYjNmYmMyNDc5ZjcyMTYzZGZhZDMyMTA0MDU2YmEyNzQzNTkyMzVkYQotLS0gL2Rldi9udWxs
CisrKyBiL0pTVGVzdHMvd2FzbS9zdHJlc3Mvc3RyZWFtaW5nLWJhc2ljLmpzCkBAIC0wLDAgKzEs
MTggQEAKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnOworCit2YXIgZGF0
YSA9IHJlYWQoIi4vbmFtZVNlY3Rpb24ud2FzbSIsICJiaW5hcnkiKTsKKworZnVuY3Rpb24gY2hl
Y2soc3RlcCkKK3sKKyAgICB2YXIgcGFyc2VyID0gJHZtLmNyZWF0ZVdhc21TdHJlYW1pbmdQYXJz
ZXIoKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEuYnl0ZUxlbmd0aDsgaSArPSBzdGVw
KSB7CisgICAgICAgIHBhcnNlci5hZGRCeXRlcyhkYXRhLnN1YmFycmF5KGksIGkgKyBNYXRoLm1p
bihzdGVwLCBkYXRhLmJ5dGVMZW5ndGggLSBpKSkpOworICAgIH0KKyAgICBhc3NlcnQuZXEocGFy
c2VyLmZpbmFsaXplKCksIDcpOworfQorCitmb3IgKHZhciBpID0gMDsgaSA8IDEwOyArK2kpCisg
ICAgY2hlY2soaSArIDEpOworY2hlY2soMTAwKTsKK2NoZWNrKDEwMDApOworY2hlY2soMjAwMCk7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>348140</attachid>
            <date>2018-08-27 07:13:37 -0700</date>
            <delta_ts>2018-08-27 07:16:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-188943-20180827231336.patch</filename>
            <type>text/plain</type>
            <size>170088</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM1MzU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
ZDJhYzBiZmEwNjcxODA3MDdlMGE1YmI1YWFlNzRlZjJlYjNhZTYwLi4wYjUzMWFiZDhmZmM4Yjg2
MjQ0ZTYxODQzZDUxMmIxZmU1YWFhZDgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNjUgQEAKKzIwMTgtMDgtMjcgIFl1c3VrZSBTdXp1a2kgIDx5dXN1a2VzdXp1a2lAc2xv
d3N0YXJ0Lm9yZz4KKworICAgICAgICBbV2ViQXNzZW1ibHldIFBhcnNlIHdhc20gbW9kdWxlcyBp
biBhIHN0cmVhbWluZyBmYXNoaW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xODg5NDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgV2FzbTo6U3RyZWFtaW5nUGFyc2VyLCB3aGlj
aCBwYXJzZXMgd2FzbSBiaW5hcnkgaW4gYSBzdHJlYW1pbmcgZmFzaGlvbi4KKyAgICAgICAgQ3Vy
cmVudGx5LCB0aGlzIFN0cmVhbWluZ1BhcnNlciBpcyBub3QgZW5hYmxlZCBhbmQgaW50ZWdyYXRl
ZC4gSW4gc3Vic2VxdWVudCBwYXRjaGVzLAorICAgICAgICB3ZSBzdGFydCBpbnRlZ3JhdGluZyBp
dCBpbnRvIEJCUVBsYW4gYW5kIGRyb3BwaW5nIHRoZSBvbGQgTW9kdWxlUGFyc2VyLgorCisgICAg
ICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiB0b29scy9KU0RvbGxhclZNLmNwcDoKKyAgICAgICAg
KFdURjo6V2FzbVN0cmVhbWluZ1BhcnNlcjo6V2FzbVN0cmVhbWluZ1BhcnNlcik6CisgICAgICAg
IChXVEY6Oldhc21TdHJlYW1pbmdQYXJzZXI6OmNyZWF0ZSk6CisgICAgICAgIChXVEY6Oldhc21T
dHJlYW1pbmdQYXJzZXI6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXVEY6Oldhc21TdHJl
YW1pbmdQYXJzZXI6OnN0cmVhbWluZ1BhcnNlcik6CisgICAgICAgIChXVEY6Oldhc21TdHJlYW1p
bmdQYXJzZXI6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdURjo6ZnVuY3Rpb25XYXNtU3Ry
ZWFtaW5nUGFyc2VyQWRkQnl0ZXMpOgorICAgICAgICAoV1RGOjpmdW5jdGlvbldhc21TdHJlYW1p
bmdQYXJzZXJGaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uQ3JlYXRlV2FzbVN0cmVh
bWluZ1BhcnNlcik6CisgICAgICAgIChKU0M6OkpTRG9sbGFyVk06OmZpbmlzaENyZWF0aW9uKToK
KyAgICAgICAgVGhpcyBvYmplY3QgaXMgaW50cm9kdWNlZCBmb3IgdGVzdGluZyBwdXJwb3NlLiBB
ZGRlZCBuZXcgc3RyZXNzIHRlc3QgdXNlcyB0aGlzIGludGVyZmFjZQorICAgICAgICB0byB0ZXN0
IHN0cmVhbWluZyBwYXJzZXIgaW4gdGhlIEpTQyBzaGVsbC4KKworICAgICAgICAqIHdhc20vV2Fz
bUJCUVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpCQlFQbGFuKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSk6CisgICAg
ICAgIChKU0M6Oldhc206OkJCUVBsYW46OnByZXBhcmUpOgorICAgICAgICAoSlNDOjpXYXNtOjpC
QlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6
Y29tcGxldGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjp3b3JrKToKKyAgICAgICAg
KiB3YXNtL1dhc21CQlFQbGFuLmg6CisgICAgICAgIEJCUVBsYW4gaGFzIG1fc291cmNlLCBidXQg
b25jZSBNb2R1bGVJbmZvcm1hdGlvbiBpcyBwYXJzZWQsIGl0IGlzIG5vIGxvbmdlciBuZWNlc3Nh
cnkuCisgICAgICAgIEluIHN1YnNlcXVlbnQgcGF0Y2hlcywgd2Ugd2lsbCByZW1vdmUgdGhpcywg
YW5kIHN0cmVhbSB0aGUgZGF0YSBpbnRvIHRoZSBCQlFQbGFuLgorCisgICAgICAgICogd2FzbS9X
YXNtRm9ybWF0Lmg6CisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbjo6TW9kdWxlSW5mb3JtYXRpb24p
OgorICAgICAgICAqIHdhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmg6CisgICAgICAgIE9uZSBv
ZiB0aGUgbGFyZ2VzdCBjaGFuZ2UgaW4gdGhpcyBwYXRjaCBpcyB0aGF0IE1vZHVsZUluZm9ybWF0
aW9uIG5vIGxvbmdlciBob2xkcyBzb3VyY2UgYnl0ZXMsCisgICAgICAgIHNpbmNlIHNvdXJjZSBi
eXRlcyBjYW4gYmUgYWRkZWQgaW4gYSBzdHJlYW1pbmcgZmFzaGlvbi4gSW5zdGVhZCBvZiBob2xk
aW5nIGFsbCB0aGUgc291cmNlIGJ5dGVzCisgICAgICAgIGluIE1vZHVsZUluZm9ybWF0aW9uLCBl
YWNoIGZ1bmN0aW9uIChNb2R1bGVJbmZvcm1hdGlvbjo6ZnVuY3Rpb25zLCBGdW5jdGlvbkRhdGEp
IHNob3VsZCBoYXZlCisgICAgICAgIFZlY3Rvcjx1aW50OF90PiBmb3IgaXRzIGRhdGEuIFRoaXMg
ZGF0YSBpcyBldmVudHVhbGx5IGZpbGxlZCBieSBTdHJlYW1pbmdQYXJzZXIsIGFuZCBjb21waWxp
bmcKKyAgICAgICAgYSBmdW5jdGlvbiB3aXRoIHRoaXMgZGF0YSBjYW4gYmUgZG9uZSBjb25jdXJy
ZW50bHkgd2l0aCBTdHJlYW1pbmdQYXJzZXIuCisKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxl
SW5mb3JtYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZUluZm9ybWF0
aW9uOjptZW1vcnlDb3VudCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZUluZm9y
bWF0aW9uOjp0YWJsZUNvdW50IGNvbnN0KToKKyAgICAgICAgbWVtb3J5Q291bnQgYW5kIHRhYmxl
Q291bnQgc2hvdWxkIGJlIHJlY29yZWRlZCBpbiBNb2R1bGVJbmZvcm1hdGlvbi4KKworICAgICAg
ICAqIHdhc20vV2FzbU1vZHVsZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVs
ZVBhcnNlcjo6cGFyc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjptYWtlSTMySW5pdEV4cHIpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlVHlwZSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VJbXBvcnQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb24p
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlUmVzaXph
YmxlTGltaXRzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpw
YXJzZVRhYmxlSGVscGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFy
c2VyOjpwYXJzZVRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFy
c2VyOjpwYXJzZU1lbW9yeUhlbHBlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206Ok1v
ZHVsZVBhcnNlcjo6cGFyc2VNZW1vcnkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpN
b2R1bGVQYXJzZXI6OnBhcnNlR2xvYmFsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6
TW9kdWxlUGFyc2VyOjpwYXJzZUV4cG9ydCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206
Ok1vZHVsZVBhcnNlcjo6cGFyc2VTdGFydCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206
Ok1vZHVsZVBhcnNlcjo6cGFyc2VFbGVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2Fz
bTo6TW9kdWxlUGFyc2VyOjpwYXJzZUNvZGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNt
OjpNb2R1bGVQYXJzZXI6OnBhcnNlSW5pdEV4cHIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpX
YXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlR2xvYmFsVHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZUN1c3RvbSk6IERlbGV0ZWQuCisgICAgICAgIEV4
dHJhY3Qgc2VjdGlvbiBwYXJzaW5nIGNvZGUgb3V0IGZyb20gTW9kdWxlUGFyc2VyLiBXZSBjcmVh
dGUgU2VjdGlvblBhcnNlciBhbmQgTW9kdWxlUGFyc2VyIHVzZXMgaXQuCisgICAgICAgIFNlY3Rp
b25QYXJzZXIgaXMgYWxzbyB1c2VkIGJ5IFN0cmVhbWluZ1BhcnNlci4KKworICAgICAgICAqIHdh
c20vV2FzbU1vZHVsZVBhcnNlci5oOgorICAgICAgICAqIHdhc20vV2FzbU5hbWVTZWN0aW9uLmg6
CisgICAgICAgIChKU0M6Oldhc206Ok5hbWVTZWN0aW9uOjpOYW1lU2VjdGlvbik6CisgICAgICAg
IChKU0M6Oldhc206Ok5hbWVTZWN0aW9uOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpO
YW1lU2VjdGlvbjo6c2V0SGFzaCk6CisgICAgICAgIEhhc2ggY2FsY3VsYXRpb24gaXMgZGVmZXJy
ZWQgc2luY2UgYWxsIHRoZSBzb3VyY2UgaXMgbm90IGF2YWlsYWJsZSBpbiBzdHJlYW1pbmcgcGFy
c2luZy4KKworICAgICAgICAqIHdhc20vV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmNwcDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6TmFtZVNlY3Rpb25QYXJzZXI6OnBhcnNlKToKKyAgICAgICAgKiB3YXNt
L1dhc21OYW1lU2VjdGlvblBhcnNlci5oOgorICAgICAgICBVc2UgUmVmPE5hbWVTZWN0aW9uPi4K
KworICAgICAgICAqIHdhc20vV2FzbU9NR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpP
TUdQbGFuOjp3b3JrKToKKyAgICAgICAgV2FzbTo6UGxhbiBubyBsb25nZXIgaGF2ZSBtX3NvdXJj
ZSBzaW5jZSBkYXRhIHdpbGwgYmUgZXZlbnR1YWxseSBmaWxsZWQgaW4gYSBzdHJlYW1pbmcgZmFz
aGlvbi4KKyAgICAgICAgT01HUGxhbiBjYW4gZ2V0IGRhdGEgb2YgdGhlIGZ1bmN0aW9uIGJ5IHVz
aW5nIE1vZHVsZUluZm9ybWF0aW9uOjpmdW5jdGlvbnMuCisKKyAgICAgICAgKiB3YXNtL1dhc21Q
YXJzZXIuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGFyc2VyOjpzb3VyY2UgY29uc3QpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpQYXJzZXI6Omxlbmd0aCBjb25zdCk6CisgICAgICAgIChKU0M6Oldh
c206OlBhcnNlcjo6b2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGFyc2VyOjpm
YWlsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6bWFrZUkzMkluaXRFeHByKToKKyAgICAg
ICAgKiB3YXNtL1dhc21QbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6UGxhbik6
CisgICAgICAgIFdhc206OlBsYW4gc2hvdWxkIG5vdCBoYXZlIGFsbCB0aGUgc291cmNlIGFwcmlv
cmkuIFN0cmVhbWVkIGRhdGEgd2lsbCBiZSBwdW1wZWQgZnJvbSB0aGUgcHJvdmlkZXIuCisKKyAg
ICAgICAgKiB3YXNtL1dhc21QbGFuLmg6CisgICAgICAgICogd2FzbS9XYXNtU2VjdGlvblBhcnNl
ci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQ
YXJzZXIuY3BwLgorICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZVR5cGUp
OgorICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZUltcG9ydCk6CisgICAg
ICAgIChKU0M6Oldhc206OlNlY3Rpb25QYXJzZXI6OnBhcnNlRnVuY3Rpb24pOgorICAgICAgICAo
SlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZVJlc2l6YWJsZUxpbWl0cyk6CisgICAgICAg
IChKU0M6Oldhc206OlNlY3Rpb25QYXJzZXI6OnBhcnNlVGFibGVIZWxwZXIpOgorICAgICAgICAo
SlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZVRhYmxlKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6U2VjdGlvblBhcnNlcjo6cGFyc2VNZW1vcnlIZWxwZXIpOgorICAgICAgICAoSlNDOjpXYXNt
OjpTZWN0aW9uUGFyc2VyOjpwYXJzZU1lbW9yeSk6CisgICAgICAgIChKU0M6Oldhc206OlNlY3Rp
b25QYXJzZXI6OnBhcnNlR2xvYmFsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNl
cjo6cGFyc2VFeHBvcnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJz
ZVN0YXJ0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VFbGVtZW50
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VDb2RlKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VJbml0RXhwcik6CisgICAgICAgIChK
U0M6Oldhc206OlNlY3Rpb25QYXJzZXI6OnBhcnNlR2xvYmFsVHlwZSk6CisgICAgICAgIChKU0M6
Oldhc206OlNlY3Rpb25QYXJzZXI6OnBhcnNlRGF0YSk6CisgICAgICAgIChKU0M6Oldhc206OlNl
Y3Rpb25QYXJzZXI6OnBhcnNlQ3VzdG9tKToKKyAgICAgICAgKiB3YXNtL1dhc21TZWN0aW9uUGFy
c2VyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQ
YXJzZXIuaC4KKyAgICAgICAgU2VjdGlvblBhcnNlciBpcyBleHRyYWN0ZWQgZnJvbSBNb2R1bGVQ
YXJzZXIuIEFuZCBpdCBpcyB1c2VkIGJvdGggdGhlIG9sZCAoY3VycmVudGx5IHdvcmtpbmcpIE1v
ZHVsZVBhcnNlcgorICAgICAgICBhbmQgdGhlIG5ldyBTdHJlYW1pbmdQYXJzZXIuCisKKyAgICAg
ICAgKiB3YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
V2FzbTo6cGFyc2VVSW50Nyk6CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6
ZmFpbCk6CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6U3RyZWFtaW5nUGFy
c2VyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U3RyZWFtaW5nUGFyc2VyOjpwYXJzZU1vZHVsZUhl
YWRlcik6CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6cGFyc2VTZWN0aW9u
SGVhZGVyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U3RyZWFtaW5nUGFyc2VyOjpwYXJzZVNlY3Rp
b25TaXplKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U3RyZWFtaW5nUGFyc2VyOjpwYXJzZUNvZGVT
ZWN0aW9uU2l6ZSk6CisgICAgICAgIENvZGUgc2VjdGlvbiBpbiBXYXNtIGJpbmFyeSBpcyBzcGVj
aWFsbHkgaGFuZGxlZCBjb21wYXJlZCB3aXRoIHRoZSBvdGhlciBzZWN0aW9ucyBzaW5jZSBpdCBp
bmNsdWRlcworICAgICAgICBidW5jaCBvZiBmdW5jdGlvbnMuIFN0cmVhbWluZ1BhcnNlciBleHRy
YWN0cyBlYWNoIGZ1bmN0aW9uIGluIGEgc3RyZWFtaW5nIGZhc2hpb24gYW5kIGVuYWJsZSBzdHJl
YW1pbmcKKyAgICAgICAgdmFsaWRhdGlvbiAvIGNvbXBpbGF0aW9uIG9mIFdhc20gZnVuY3Rpb25z
LgorCisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6cGFyc2VGdW5jdGlvbkhl
YWRlcik6CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6cGFyc2VGdW5jdGlv
bkJvZHkpOgorICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OnBhcnNlU2VjdGlv
bkJvZHkpOgorICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmNvbnN1bWUpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmNvbnN1bWVWYXJVSW50MzIpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6U3RyZWFtaW5nUGFyc2VyOjpmYWlsT25TdGF0ZSk6CisgICAgICAgIChKU0M6
Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6ZmluYWxpemUpOgorICAgICAgICAqIHdhc20vV2FzbVN0
cmVhbWluZ1BhcnNlci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6U3RyZWFtaW5nUGFy
c2VyOjphZGRCeXRlcyk6CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6ZXJy
b3JNZXNzYWdlIGNvbnN0KToKKyAgICAgICAgVGhpcyBpcyBvdXIgbmV3IFN0cmVhbWluZ1BhcnNl
ciBpbXBsZW1lbnRhdGlvbi4gU3RyZWFtaW5nUGFyc2VyOjpjb25zdW1lWFhYIGZ1bmN0aW9ucyBn
ZXQgZGF0YSwgYW5kCisgICAgICAgIFN0cmVhbWluZ1BhcnNlcjo6cGFyc2VYWFggZnVuY3Rpb25z
IHBhcnNlIGNvbnN1bWVkIGRhdGEuIFRoZSB1c2VyIG9mIFN0cmVhbWluZ1BhcnNlciBjYWxscwor
ICAgICAgICBTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKCkgdG8gcHVtcCB0aGUgYnl0ZXMgc3Ry
ZWFtIGludG8gdGhlIHBhcnNlci4gQW5kIG9uY2UgYWxsIHRoZSBkYXRhIGlzIHB1bXBlZCwKKyAg
ICAgICAgdGhlIHVzZXIgY2FsbHMgU3RyZWFtaW5nUGFyc2VyOjpmaW5hbGl6ZS4gU3RyZWFtaW5n
UGFyc2VyIGlzIGEgc3RhdGUgbWFjaGluZSB3aGljaCBmZWVkcyB0aGUgaW5jb21pbmcKKyAgICAg
ICAgYnl0ZSBzdHJlYW0uCisKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUu
Y3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpzb3VyY2UgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICBBbGwgdGhlIHNvdXJjZSBzaG91bGQgbm90IGJlIGhlbGQuCisKKyAg
ICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaDoKKyAgICAgICAgKiB3YXNtL2pz
L1dlYkFzc2VtYmx5UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlWYWxp
ZGF0ZUZ1bmMpOgorCiAyMDE4LTA4LTI0ICBZdXN1a2UgU3V6dWtpICA8eXVzdWtlc3V6dWtpQHNs
b3dzdGFydC5vcmc+CiAKICAgICAgICAgW0pTQ10gQXJyYXkucHJvdG90eXBlLnJldmVyc2UgbW9k
aWZpZXMgSlNJbW11dGFibGVCdXR0ZXJmbHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdl
TG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggYzJmMWVmYTE5ZmE1ODQ0NmI4MGQ2MjQ0
YmRiZDk1YWVkOTFiYWNhNS4uNWJhZjA1M2RiMGRkZjczNjgwYmM1YzZiMjk3NWU2ZDY1OTlkZGEx
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxOC0wOC0yNyAgWXVzdWtlIFN1enVraSAgPHl1c3Vr
ZXN1enVraUBzbG93c3RhcnQub3JnPgorCisgICAgICAgIFtXZWJBc3NlbWJseV0gUGFyc2Ugd2Fz
bSBtb2R1bGVzIGluIGEgc3RyZWFtaW5nIGZhc2hpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4ODk0MworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBtYXhCeXRlTGVuZ3RoIGZ1bmN0aW9uIHRvIGdl
dCB0aGUgbWF4aW11bSBzaXplIGZvciBULgorCisgICAgICAgICogd3RmL0xFQkRlY29kZXIuaDoK
KyAgICAgICAgKFdURjo6TEVCRGVjb2Rlcjo6bWF4Qnl0ZUxlbmd0aCk6CisgICAgICAgIChXVEY6
OkxFQkRlY29kZXI6OmRlY29kZVVJbnQpOgorICAgICAgICAoV1RGOjpMRUJEZWNvZGVyOjpkZWNv
ZGVJbnQpOgorCiAyMDE4LTA4LTI1ICBZdXN1a2UgU3V6dWtpICA8eXVzdWtlc3V6dWtpQHNsb3dz
dGFydC5vcmc+CiAKICAgICAgICAgU2hyaW5rIHNpemUgb2YgWE1MSHR0cFJlcXVlc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMTdhNDhiZGE2ZDRiZTM5N2IwOGU5NDZjYmQ0ODYx
MDY3NDc5OWRhZS4uNDI2ZDE5ZGNlOTU0ODJlODUxYmZlOWM5Mzg3ZDJjZjYzM2Y1NWQ0OCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE3MzQsNiArMTczNCw4IEBACiAJCUUzOTNB
REQ4MUZFNzAyRDAwMDIyRDY4MSAvKiBXZWFrTWFwSW1wbElubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzOTNBREQ3MUZFNzAyQ0MwMDIyRDY4
MSAvKiBXZWFrTWFwSW1wbElubGluZXMuaCAqLzsgfTsKIAkJRTM5RDQ1RjUxRDM5MDA1NjAwQjNC
Mzc3IC8qIEludGVycHJldGVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTM5RDlEODQxRDM5MDAwNjAwNjY3MjgyIC8qIEludGVycHJldGVy
SW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUUzOURBNEE3MUI3RThCN0MwMDg0RjMzQSAvKiBKU01vZHVsZVJlY29yZC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM5REE0QTUxQjdFOEI3QzAw
ODRGMzNBIC8qIEpTTW9kdWxlUmVjb3JkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJRTNBMDUzMUEyMTM0MkI2ODAwMjJFQzE0IC8qIFdhc21TdHJl
YW1pbmdQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUzQTA1MzE2MjEzNDJCNjYwMDIyRUMxNCAvKiBXYXNtU3RyZWFtaW5nUGFyc2VyLmggKi87
IH07CisJCUUzQTA1MzFDMjEzNDJCNjgwMDIyRUMxNCAvKiBXYXNtU2VjdGlvblBhcnNlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTNBMDUzMTgyMTM0
MkI2NzAwMjJFQzE0IC8qIFdhc21TZWN0aW9uUGFyc2VyLmggKi87IH07CiAJCUUzQTMyQkM3MUZD
ODMxNDcwMDdEN0U3NiAvKiBXZWFrTWFwSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTNBMzJCQzYxRkM4MzEyRTAwN0Q3RTc2IC8qIFdlYWtNYXBJ
bXBsLmggKi87IH07CiAJCUUzQTQyMTQzMUQ2RjU4OTMwMDA3QzYxNyAvKiBQcmVjaXNlSnVtcFRh
cmdldHNJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFM0E0MjE0MjFENkY1ODhGMDAwN0M2MTcgLyogUHJlY2lzZUp1bXBUYXJnZXRzSW5saW5l
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUz
QkZEMEJDMURBRjgwOEUwMDY1REVBMiAvKiBBY2Nlc3NDYXNlU25pcHBldFBhcmFtcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTNCRkQwQkExREFGODA3
QzAwNjVERUEyIC8qIEFjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmggKi87IH07CkBAIC00NjIyLDYg
KzQ2MjQsMTAgQEAKIAkJRTM5RDlEODQxRDM5MDAwNjAwNjY3MjgyIC8qIEludGVycHJldGVySW5s
aW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlcnByZXRlcklubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM5REE0QTQxQjdFOEI3QzAwODRG
MzNBIC8qIEpTTW9kdWxlUmVjb3JkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTTW9kdWxlUmVjb3JkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTM5REE0QTUxQjdFOEI3QzAwODRGMzNBIC8qIEpTTW9kdWxlUmVjb3JkLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTW9kdWxlUmVjb3JkLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUUzQTA1MzE2MjEzNDJCNjYwMDIyRUMxNCAvKiBXYXNtU3RyZWFtaW5nUGFy
c2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21TdHJlYW1pbmdQYXJz
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTNBMDUzMTcyMTM0MkI2NjAwMjJF
QzE0IC8qIFdhc21TZWN0aW9uUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdhc21TZWN0aW9uUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRTNBMDUzMTgyMTM0MkI2NzAwMjJFQzE0IC8qIFdhc21TZWN0aW9uUGFyc2VyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21TZWN0aW9uUGFyc2VyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzQTA1MzE5MjEzNDJCNjcwMDIyRUMxNCAvKiBXYXNt
U3RyZWFtaW5nUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdhc21TdHJlYW1pbmdQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
M0EzMkJDNTFGQzgzMTJEMDA3RDdFNzYgLyogV2Vha01hcEltcGwuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Vha01hcEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFM0EzMkJDNjFGQzgzMTJFMDA3RDdFNzYgLyogV2Vha01hcEltcGwuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vha01hcEltcGwuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTNBNDIxNDIxRDZGNTg4RjAwMDdDNjE3IC8qIFByZWNpc2VK
dW1wVGFyZ2V0c0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJl
Y2lzZUp1bXBUYXJnZXRzSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
NjM0OCw5ICs2MzU0LDEzIEBACiAJCQkJNTNGNDBFOEMxRDU5MDFGMjAwOTlBMUI2IC8qIFdhc21Q
YXJzZXIuaCAqLywKIAkJCQk1MzEzNzRCRTFENUNFOTUwMDBBRjdBMEIgLyogV2FzbVBsYW4uY3Bw
ICovLAogCQkJCTUzMTM3NEJDMUQ1Q0U2NzYwMEFGN0EwQiAvKiBXYXNtUGxhbi5oICovLAorCQkJ
CUUzQTA1MzE3MjEzNDJCNjYwMDIyRUMxNCAvKiBXYXNtU2VjdGlvblBhcnNlci5jcHAgKi8sCisJ
CQkJRTNBMDUzMTgyMTM0MkI2NzAwMjJFQzE0IC8qIFdhc21TZWN0aW9uUGFyc2VyLmggKi8sCiAJ
CQkJNTNGNDBFODQxRDU4Rjk3NzAwOTlBMUI2IC8qIFdhc21TZWN0aW9ucy5oICovLAogCQkJCUFE
NzQzOEJFMUUwNDU3OTIwMEZEMEMyQSAvKiBXYXNtU2lnbmF0dXJlLmNwcCAqLywKIAkJCQlBRDc0
MzhCRjFFMDQ1NzkyMDBGRDBDMkEgLyogV2FzbVNpZ25hdHVyZS5oICovLAorCQkJCUUzQTA1MzE5
MjEzNDJCNjcwMDIyRUMxNCAvKiBXYXNtU3RyZWFtaW5nUGFyc2VyLmNwcCAqLywKKwkJCQlFM0Ew
NTMxNjIxMzQyQjY2MDAyMkVDMTQgLyogV2FzbVN0cmVhbWluZ1BhcnNlci5oICovLAogCQkJCUFE
NUMzNkUzMUY2OUVDOEIwMDBCQ0FBRiAvKiBXYXNtVGFibGUuY3BwICovLAogCQkJCUFENUMzNkU0
MUY2OUVDOEIwMDBCQ0FBRiAvKiBXYXNtVGFibGUuaCAqLywKIAkJCQk1MjUwRDJDRjFFOERBMDVB
MDAyOUE5MzIgLyogV2FzbVRodW5rcy5jcHAgKi8sCkBAIC04NDQ4LDcgKzg0NTgsNiBAQAogCQkJ
CUMyRkNBRTEzMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNjY2RUMwMTgzNTY2RjkwMEQwMTdGMSAvKiBCeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzI4REFFQjFEMzhE
MDA1MDAxQTI1MjkgLyogQnl0ZWNvZGVSZXdyaXRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRkVB
M0JCQUMyMTJDOTdDQjAwRTkzQUQxIC8qIERGR0NGRy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjUx
NEYyMTkxOEIzRTE2NzAwOThGRjhCIC8qIEJ5dGVjb2Rlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY4ODVFMTExODQ5QTNCRTAwRjFFM0ZBIC8qIEJ5dGVjb2RlVXNlRGVmLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjgwMjNFQTE2MTM4MzJCMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggaW4gSGVhZGVy
cyAqLywKQEAgLTg1ODEsNiArODU5MCw3IEBACiAJCQkJMEZCREI5QUQxQUIwRkJDNjAwMEI1N0U1
IC8qIERGR0NhbGxDcmVhdGVEaXJlY3RBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY3QjI5NEIxNEMzQ0QyRjAwN0MzREIxIC8qIERGR0NhcGFiaWxpdGll
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5NTgxNEVGOTBBMjAwQzcyNTMyIC8qIERGR0NG
QVBoYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRUEzQkJBQzIxMkM5N0NCMDBFOTNBRDEgLyog
REZHQ0ZHLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjNCM0EyODE1NDRDOTk3MDAzRUQwRkYgLyog
REZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RDM2OTUx
QUU5Q0MzMzAwMEQ0REZCIC8qIERGR0NsZWFuVXBQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTc3QTQyNDAxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Nsb2JiZXJpemUuaCBpbiBIZWFkZXJzICov
LApAQCAtOTYwNyw4ICs5NjE3LDEwIEBACiAJCQkJNzlCNzU5NzYxREZBNEM2MDAwNTIxNzRDIC8q
IFdhc21QYWdlQ291bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzRjQwRThEMUQ1OTAxRjIwMDk5
QTFCNiAvKiBXYXNtUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzEzNzRCRDFENUNFNjc2
MDBBRjdBMEIgLyogV2FzbVBsYW4uaCBpbiBIZWFkZXJzICovLAorCQkJCUUzQTA1MzFDMjEzNDJC
NjgwMDIyRUMxNCAvKiBXYXNtU2VjdGlvblBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTNG
NDBFODUxRDU4Rjk3NzAwOTlBMUI2IC8qIFdhc21TZWN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQUQ3NDM4QzAxRTA0NTdBNDAwRkQwQzJBIC8qIFdhc21TaWduYXR1cmUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUUzQTA1MzFBMjEzNDJCNjgwMDIyRUMxNCAvKiBXYXNtU3RyZWFtaW5nUGFyc2Vy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDVDMzZFNjFGNjlFQzkxMDAwQkNBQUYgLyogV2FzbVRh
YmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MjUwRDJEMjFFOERBMDVBMDAyOUE5MzIgLyogV2Fz
bVRodW5rcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTNFOUUwQUYxRUFFQzQ1NzAwRkVFMjUxIC8q
IFdhc21UaWVyVXBDb3VudC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50
eHQKaW5kZXggODk3Njk4YzZlMDU5YWUxZDI2MjEzMWFjNTIwNDAwZTMxNzhlZGNjNS4uMDRkNDhl
ODViNTBmYjgzZmIxMjUwNWZlZTE0YTg1MzU5Y2MxZTMwOSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3Vy
Y2VzLnR4dApAQCAtOTkyLDcgKzk5Miw5IEBAIHdhc20vV2FzbU9NR1BsYW4uY3BwCiB3YXNtL1dh
c21PcGNvZGVPcmlnaW4uY3BwCiB3YXNtL1dhc21QYWdlQ291bnQuY3BwCiB3YXNtL1dhc21QbGFu
LmNwcAord2FzbS9XYXNtU2VjdGlvblBhcnNlci5jcHAKIHdhc20vV2FzbVNpZ25hdHVyZS5jcHAK
K3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAKIHdhc20vV2FzbVRhYmxlLmNwcAogd2FzbS9X
YXNtVGFibGUuaAogd2FzbS9XYXNtVGh1bmtzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rv
b2xzL0pTRG9sbGFyVk0uY3BwCmluZGV4IGViNTdjNzg0Yzk4MTgwNDYyZDRhOGU0M2M4NmI1MGJh
YWFlODQ5M2IuLmVmMjU1NzI0YmM2YTExMjAwMTZiN2YyMmY5NjlkYmZmZDljYWUyM2YgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAKQEAgLTUxLDYgKzUxLDEx
IEBACiAjaW5jbHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmlu
dFN0cmVhbS5oPgogCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorI2luY2x1ZGUgIkpTV2ViQXNz
ZW1ibHlIZWxwZXJzLmgiCisjaW5jbHVkZSAiV2FzbVN0cmVhbWluZ1BhcnNlci5oIgorI2VuZGlm
CisKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCkBAIC0xMDkz
LDYgKzEwOTgsODAgQEAgdm9pZCBFbGVtZW50OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFJvb3Qq
IHJvb3QpCiAgICAgbV9yb290LT5zZXRFbGVtZW50KHRoaXMpOwogfQogCisjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bldhc21TdHJlYW1pbmdQYXJzZXJBZGRCeXRlcyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uV2FzbVN0cmVhbWluZ1BhcnNlckZpbmFsaXpl
KEV4ZWNTdGF0ZSopOworCitjbGFzcyBXYXNtU3RyZWFtaW5nUGFyc2VyIDogcHVibGljIEpTRGVz
dHJ1Y3RpYmxlT2JqZWN0IHsKK3B1YmxpYzoKKyAgICBXYXNtU3RyZWFtaW5nUGFyc2VyKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQor
ICAgICAgICAsIG1faW5mbyhXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbjo6Y3JlYXRlKCkpCisgICAg
ICAgICwgbV9zdHJlYW1pbmdQYXJzZXIobV9pbmZvLmdldCgpKQorICAgIHsKKyAgICB9CisKKyAg
ICB1c2luZyBCYXNlID0gSlNEZXN0cnVjdGlibGVPYmplY3Q7CisKKyAgICBzdGF0aWMgV2FzbVN0
cmVhbWluZ1BhcnNlciogY3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKKyAgICB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY3JlYXRlU3RydWN0dXJl
KHZtLCBnbG9iYWxPYmplY3QsIGpzTnVsbCgpKTsKKyAgICAgICAgV2FzbVN0cmVhbWluZ1BhcnNl
ciogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2FzbVN0cmVhbWluZ1BhcnNl
cj4odm0uaGVhcCwgc2l6ZW9mKFdhc21TdHJlYW1pbmdQYXJzZXIpKSkgV2FzbVN0cmVhbWluZ1Bh
cnNlcih2bSwgc3RydWN0dXJlKTsKKyAgICAgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAgV2FzbTo6U3RyZWFtaW5nUGFyc2VyJiBz
dHJlYW1pbmdQYXJzZXIoKSB7IHJldHVybiBtX3N0cmVhbWluZ1BhcnNlcjsgfQorCisgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0pCisgICAgeworICAgICAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbih2bSk7CisKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRoaXMt
Pmdsb2JhbE9iamVjdCh2bSk7CisgICAgICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCBn
bG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiYWRkQnl0ZXMiKSwgMCwg
ZnVuY3Rpb25XYXNtU3RyZWFtaW5nUGFyc2VyQWRkQnl0ZXMsIE5vSW50cmluc2ljLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgICAgIHB1
dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnZtLCAiZmluYWxpemUiKSwgMCwgZnVuY3Rpb25XYXNtU3RyZWFtaW5nUGFyc2VyRmlu
YWxpemUsIE5vSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtKSk7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworCisgICAgUmVmPFdh
c206Ok1vZHVsZUluZm9ybWF0aW9uPiBtX2luZm87CisgICAgV2FzbTo6U3RyZWFtaW5nUGFyc2Vy
IG1fc3RyZWFtaW5nUGFyc2VyOworfTsKKworY29uc3QgQ2xhc3NJbmZvIFdhc21TdHJlYW1pbmdQ
YXJzZXI6OnNfaW5mbyA9IHsgIldhc21TdHJlYW1pbmdQYXJzZXIiLCAmQmFzZTo6c19pbmZvLCBu
dWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFdhc21TdHJlYW1pbmdQYXJzZXIp
IH07CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25XYXNtU3RyZWFtaW5n
UGFyc2VyQWRkQnl0ZXMoRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZXhlYy0+dm0oKSk7Cisg
ICAgYXV0byogdGhpc09iamVjdCA9IGpzRHluYW1pY0Nhc3Q8V2FzbVN0cmVhbWluZ1BhcnNlcio+
KHZtLCBleGVjLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCF0aGlzT2JqZWN0KSB7CisgICAgICAg
IHNjb3BlLnJlbGVhc2UoKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4oZmFsc2UpKTsKKyAgICB9CisgICAgYXV0byBkYXRhID0gZ2V0V2FzbUJ1ZmZlckZyb21WYWx1
ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgc2NvcGUucmVsZWFzZSgpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50MzJfdD4odGhpc09iamVjdC0+
c3RyZWFtaW5nUGFyc2VyKCkuYWRkQnl0ZXMoYml0d2lzZV9jYXN0PGNvbnN0IHVpbnQ4X3QqPihk
YXRhLmZpcnN0KSwgZGF0YS5zZWNvbmQpKSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uV2FzbVN0cmVhbWluZ1BhcnNlckZpbmFsaXplKEV4ZWNTdGF0ZSogZXhl
YykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBq
c0R5bmFtaWNDYXN0PFdhc21TdHJlYW1pbmdQYXJzZXIqPih2bSwgZXhlYy0+dGhpc1ZhbHVlKCkp
OworICAgIGlmICghdGhpc09iamVjdCkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c0Jvb2xlYW4oZmFsc2UpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHN0
YXRpY19jYXN0PGludDMyX3Q+KHRoaXNPYmplY3QtPnN0cmVhbWluZ1BhcnNlcigpLmZpbmFsaXpl
KCkpKSk7Cit9CisKKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZQogCiBuYW1lc3BhY2UgSlNDIHsK
QEAgLTE2NDAsNiArMTcxOSwxNSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvbkNyZWF0ZURPTUpJVEdldHRlckJhc2VKU09iamVjdChFeGVjUwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAorI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
K3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlV2FzbVN0
cmVhbWluZ1BhcnNlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShXYXNtU3RyZWFtaW5nUGFyc2VyOjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSkpOworfQorI2VuZGlmCisKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uU2V0SW1wdXJlR2V0dGVyRGVsZWdhdGUoRXhlY1N0YXRlKiBleGVjKQogewogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CkBAIC0yMDQwLDYgKzIxMjgsOSBAQCB2b2lkIEpTRG9sbGFy
Vk06OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICBhZGRGdW5jdGlvbih2bSwgImNyZWF0ZURP
TUpJVENoZWNrU3ViQ2xhc3NPYmplY3QiLCBmdW5jdGlvbkNyZWF0ZURPTUpJVENoZWNrU3ViQ2xh
c3NPYmplY3QsIDApOwogICAgIGFkZEZ1bmN0aW9uKHZtLCAiY3JlYXRlRE9NSklUR2V0dGVyQmFz
ZUpTT2JqZWN0IiwgZnVuY3Rpb25DcmVhdGVET01KSVRHZXR0ZXJCYXNlSlNPYmplY3QsIDApOwog
ICAgIGFkZEZ1bmN0aW9uKHZtLCAiY3JlYXRlQnVpbHRpbiIsIGZ1bmN0aW9uQ3JlYXRlQnVpbHRp
biwgMik7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIGFkZEZ1bmN0aW9uKHZtLCAiY3Jl
YXRlV2FzbVN0cmVhbWluZ1BhcnNlciIsIGZ1bmN0aW9uQ3JlYXRlV2FzbVN0cmVhbWluZ1BhcnNl
ciwgMCk7CisjZW5kaWYKICAgICBhZGRGdW5jdGlvbih2bSwgImdldFByaXZhdGVQcm9wZXJ0eSIs
IGZ1bmN0aW9uR2V0UHJpdmF0ZVByb3BlcnR5LCAyKTsKICAgICBhZGRGdW5jdGlvbih2bSwgInNl
dEltcHVyZUdldHRlckRlbGVnYXRlIiwgZnVuY3Rpb25TZXRJbXB1cmVHZXR0ZXJEZWxlZ2F0ZSwg
Mik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFu
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAppbmRleCBm
NjcyNjg2ZDNmOTlhMGQwZDJlOWMzMjFmMjdiYzBhMWNiZjViMmRkLi40M2M4ZjU2MmFmYTFjMzYz
M2E3ZTZjNjFmNDA5MjJlYzBiZTk3MjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUJCUVBsYW4uY3BwCkBAIC01OSwxMyArNTksMTUgQEAgQkJRUGxhbjo6QkJRUGxhbihDb250
ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGluZm8sIEFzeW5jV29yayB3b3Jr
LAogfQogCiBCQlFQbGFuOjpCQlFQbGFuKENvbnRleHQqIGNvbnRleHQsIFZlY3Rvcjx1aW50OF90
PiYmIHNvdXJjZSwgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFzaywgQ3JlYXRl
RW1iZWRkZXJXcmFwcGVyJiYgY3JlYXRlRW1iZWRkZXJXcmFwcGVyLCBUaHJvd1dhc21FeGNlcHRp
b24gdGhyb3dXYXNtRXhjZXB0aW9uKQotICAgIDogQkJRUGxhbihjb250ZXh0LCBhZG9wdFJlZigq
bmV3IE1vZHVsZUluZm9ybWF0aW9uKFdURk1vdmUoc291cmNlKSkpLCB3b3JrLCBXVEZNb3ZlKHRh
c2spLCBXVEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlvbikK
KyAgICA6IEJhc2UoY29udGV4dCwgTW9kdWxlSW5mb3JtYXRpb246OmNyZWF0ZSgpLCBXVEZNb3Zl
KHRhc2spLCBXVEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlv
bikKKyAgICAsIG1fc291cmNlKFdURk1vdmUoc291cmNlKSkKKyAgICAsIG1fc3RhdGUoU3RhdGU6
OkluaXRpYWwpCisgICAgLCBtX2FzeW5jV29yayh3b3JrKQogewotICAgIG1fc3RhdGUgPSBTdGF0
ZTo6SW5pdGlhbDsKIH0KIAotQkJRUGxhbjo6QkJRUGxhbihDb250ZXh0KiBjb250ZXh0LCBjb25z
dCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgsIEFzeW5jV29yayB3b3JrLCBD
b21wbGV0aW9uVGFzayYmIHRhc2spCi0gICAgOiBCYXNlKGNvbnRleHQsIHNvdXJjZSwgc291cmNl
TGVuZ3RoLCBXVEZNb3ZlKHRhc2spKQorQkJRUGxhbjo6QkJRUGxhbihDb250ZXh0KiBjb250ZXh0
LCBBc3luY1dvcmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0YXNrKQorICAgIDogQmFzZShjb250
ZXh0LCBXVEZNb3ZlKHRhc2spKQogICAgICwgbV9zdGF0ZShTdGF0ZTo6SW5pdGlhbCkKICAgICAs
IG1fYXN5bmNXb3JrKHdvcmspCiB7CkBAIC05MCw3ICs5Miw3IEBAIHZvaWQgQkJRUGxhbjo6bW92
ZVRvU3RhdGUoU3RhdGUgc3RhdGUpCiAgICAgbV9zdGF0ZSA9IHN0YXRlOwogfQogCi1ib29sIEJC
UVBsYW46OnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKQorYm9vbCBCQlFQbGFuOjpwYXJzZUFuZFZh
bGlkYXRlTW9kdWxlKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IHNvdXJjZUxlbmd0aCkK
IHsKICAgICBpZiAobV9zdGF0ZSAhPSBTdGF0ZTo6SW5pdGlhbCkKICAgICAgICAgcmV0dXJuIHRy
dWU7CkBAIC0xMDEsNyArMTAzLDcgQEAgYm9vbCBCQlFQbGFuOjpwYXJzZUFuZFZhbGlkYXRlTW9k
dWxlKCkKICAgICAgICAgc3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CiAKICAgICB7
Ci0gICAgICAgIE1vZHVsZVBhcnNlciBtb2R1bGVQYXJzZXIobV9zb3VyY2UsIG1fc291cmNlTGVu
Z3RoLCBtX21vZHVsZUluZm9ybWF0aW9uKTsKKyAgICAgICAgTW9kdWxlUGFyc2VyIG1vZHVsZVBh
cnNlcihzb3VyY2UsIHNvdXJjZUxlbmd0aCwgbV9tb2R1bGVJbmZvcm1hdGlvbik7CiAgICAgICAg
IGF1dG8gcGFyc2VSZXN1bHQgPSBtb2R1bGVQYXJzZXIucGFyc2UoKTsKICAgICAgICAgaWYgKCFw
YXJzZVJlc3VsdCkgewogICAgICAgICAgICAgQmFzZTo6ZmFpbChob2xkTG9jayhtX2xvY2spLCBX
VEZNb3ZlKHBhcnNlUmVzdWx0LmVycm9yKCkpKTsKQEAgLTEwOSwyMCArMTExLDIxIEBAIGJvb2wg
QkJRUGxhbjo6cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpCiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBjb25zdCBhdXRvJiBmdW5jdGlvbkxvY2F0aW9ucyA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1
bmN0aW9uTG9jYXRpb25JbkJpbmFyeTsKLSAgICBmb3IgKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgg
PSAwOyBmdW5jdGlvbkluZGV4IDwgZnVuY3Rpb25Mb2NhdGlvbnMuc2l6ZSgpOyArK2Z1bmN0aW9u
SW5kZXgpIHsKLSAgICAgICAgZGF0YUxvZ0xuSWYoV2FzbUJCUVBsYW5JbnRlcm5hbDo6dmVyYm9z
ZSwgIlByb2Nlc3NpbmcgZnVuY3Rpb24gc3RhcnRpbmcgYXQ6ICIsIGZ1bmN0aW9uTG9jYXRpb25z
W2Z1bmN0aW9uSW5kZXhdLnN0YXJ0LCAiIGFuZCBlbmRpbmcgYXQ6ICIsIGZ1bmN0aW9uTG9jYXRp
b25zW2Z1bmN0aW9uSW5kZXhdLmVuZCk7Ci0gICAgICAgIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9u
U3RhcnQgPSBtX3NvdXJjZSArIGZ1bmN0aW9uTG9jYXRpb25zW2Z1bmN0aW9uSW5kZXhdLnN0YXJ0
OwotICAgICAgICBzaXplX3QgZnVuY3Rpb25MZW5ndGggPSBmdW5jdGlvbkxvY2F0aW9uc1tmdW5j
dGlvbkluZGV4XS5lbmQgLSBmdW5jdGlvbkxvY2F0aW9uc1tmdW5jdGlvbkluZGV4XS5zdGFydDsK
LSAgICAgICAgQVNTRVJUKGZ1bmN0aW9uTGVuZ3RoIDw9IG1fc291cmNlTGVuZ3RoKTsKKyAgICBj
b25zdCBhdXRvJiBmdW5jdGlvbnMgPSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbnM7Cisg
ICAgZm9yICh1bnNpZ25lZCBmdW5jdGlvbkluZGV4ID0gMDsgZnVuY3Rpb25JbmRleCA8IGZ1bmN0
aW9ucy5zaXplKCk7ICsrZnVuY3Rpb25JbmRleCkgeworICAgICAgICBjb25zdCBhdXRvJiBmdW5j
dGlvbiA9IGZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XTsKKyAgICAgICAgZGF0YUxvZ0xuSWYoV2Fz
bUJCUVBsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIlByb2Nlc3NpbmcgZnVuY3Rpb24gc3RhcnRpbmcg
YXQ6ICIsIGZ1bmN0aW9uLnN0YXJ0LCAiIGFuZCBlbmRpbmcgYXQ6ICIsIGZ1bmN0aW9uLmVuZCk7
CisgICAgICAgIHNpemVfdCBmdW5jdGlvbkxlbmd0aCA9IGZ1bmN0aW9uLmVuZCAtIGZ1bmN0aW9u
LnN0YXJ0OworICAgICAgICBBU1NFUlQoZnVuY3Rpb25MZW5ndGggPD0gc291cmNlTGVuZ3RoKTsK
KyAgICAgICAgQVNTRVJUKGZ1bmN0aW9uTGVuZ3RoID09IGZ1bmN0aW9uLmRhdGEuc2l6ZSgpKTsK
ICAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0
aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tmdW5jdGlvbkluZGV4XTsKICAg
ICAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6
Z2V0KHNpZ25hdHVyZUluZGV4KTsKIAotICAgICAgICBhdXRvIHZhbGlkYXRpb25SZXN1bHQgPSB2
YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUs
IG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCkpOworICAgICAgICBhdXRvIHZhbGlkYXRpb25SZXN1
bHQgPSB2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRh
LnNpemUoKSwgc2lnbmF0dXJlLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpKTsKICAgICAgICAg
aWYgKCF2YWxpZGF0aW9uUmVzdWx0KSB7CiAgICAgICAgICAgICBpZiAoV2FzbUJCUVBsYW5JbnRl
cm5hbDo6dmVyYm9zZSkgewogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBmdW5jdGlvbkxlbmd0aDsgKytpKQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKFJhd1Bv
aW50ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZnVuY3Rpb25TdGFydFtpXSkpLCAiLCAiKTsK
KyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KGZ1bmN0aW9uLmRhdGFbaV0pKSwgIiwgIik7CiAgICAgICAgICAgICAgICAgZGF0YUxv
Z0xuKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBCYXNlOjpmYWlsKGhvbGRMb2NrKG1f
bG9jayksIG1ha2VTdHJpbmcodmFsaWRhdGlvblJlc3VsdC5lcnJvcigpLCAiLCBpbiBmdW5jdGlv
biBhdCBpbmRleCAiLCBTdHJpbmc6Om51bWJlcihmdW5jdGlvbkluZGV4KSkpOyAvLyBGSVhNRSBt
YWtlIHRoaXMgYW4gRXhwZWN0ZWQuCkBAIC0xNTYsMTggKzE1OSwxOCBAQCB2b2lkIEJCUVBsYW46
OnByZXBhcmUoKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9OwogCi0gICAgY29uc3QgYXV0
byYgZnVuY3Rpb25Mb2NhdGlvbnMgPSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbkxvY2F0
aW9uSW5CaW5hcnk7CisgICAgY29uc3QgYXV0byYgZnVuY3Rpb25zID0gbV9tb2R1bGVJbmZvcm1h
dGlvbi0+ZnVuY3Rpb25zOwogICAgIGlmICghdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fd2FzbVRvV2Fz
bUV4aXRTdHVicywgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJ
bmRpY2VzLnNpemUoKSwgIiBXZWJBc3NlbWJseSB0byBKYXZhU2NyaXB0IHN0dWJzIikKLSAgICAg
ICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5j
dGlvbkxvY2F0aW9ucy5zaXplKCksICIgdW5saW5rZWQgV2ViQXNzZW1ibHkgdG8gV2ViQXNzZW1i
bHkgY2FsbHMiKQotICAgICAgICB8fCAhdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fd2FzbUludGVybmFs
RnVuY3Rpb25zLCBmdW5jdGlvbkxvY2F0aW9ucy5zaXplKCksICIgV2ViQXNzZW1ibHkgZnVuY3Rp
b25zIikKLSAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX2NvbXBpbGF0aW9uQ29udGV4
dHMsIGZ1bmN0aW9uTG9jYXRpb25zLnNpemUoKSwgIiBjb21waWxhdGlvbiBjb250ZXh0cyIpCi0g
ICAgICAgIHx8ICF0cnlSZXNlcnZlQ2FwYWNpdHkobV90aWVyVXBDb3VudHMsIGZ1bmN0aW9uTG9j
YXRpb25zLnNpemUoKSwgIiB0aWVyLXVwIGNvdW50cyIpKQorICAgICAgICB8fCAhdHJ5UmVzZXJ2
ZUNhcGFjaXR5KG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9ucy5zaXplKCksICIg
dW5saW5rZWQgV2ViQXNzZW1ibHkgdG8gV2ViQXNzZW1ibHkgY2FsbHMiKQorICAgICAgICB8fCAh
dHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fd2FzbUludGVybmFsRnVuY3Rpb25zLCBmdW5jdGlvbnMuc2l6
ZSgpLCAiIFdlYkFzc2VtYmx5IGZ1bmN0aW9ucyIpCisgICAgICAgIHx8ICF0cnlSZXNlcnZlQ2Fw
YWNpdHkobV9jb21waWxhdGlvbkNvbnRleHRzLCBmdW5jdGlvbnMuc2l6ZSgpLCAiIGNvbXBpbGF0
aW9uIGNvbnRleHRzIikKKyAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX3RpZXJVcENv
dW50cywgZnVuY3Rpb25zLnNpemUoKSwgIiB0aWVyLXVwIGNvdW50cyIpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLnJlc2l6ZShmdW5jdGlvbkxvY2F0
aW9ucy5zaXplKCkpOwotICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zLnJlc2l6ZShmdW5jdGlv
bkxvY2F0aW9ucy5zaXplKCkpOwotICAgIG1fY29tcGlsYXRpb25Db250ZXh0cy5yZXNpemUoZnVu
Y3Rpb25Mb2NhdGlvbnMuc2l6ZSgpKTsKLSAgICBtX3RpZXJVcENvdW50cy5yZXNpemUoZnVuY3Rp
b25Mb2NhdGlvbnMuc2l6ZSgpKTsKKyAgICBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLnJlc2l6
ZShmdW5jdGlvbnMuc2l6ZSgpKTsKKyAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5yZXNpemUo
ZnVuY3Rpb25zLnNpemUoKSk7CisgICAgbV9jb21waWxhdGlvbkNvbnRleHRzLnJlc2l6ZShmdW5j
dGlvbnMuc2l6ZSgpKTsKKyAgICBtX3RpZXJVcENvdW50cy5yZXNpemUoZnVuY3Rpb25zLnNpemUo
KSk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGltcG9ydEluZGV4ID0gMDsgaW1wb3J0SW5kZXggPCBt
X21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRzLnNpemUoKTsgKytpbXBvcnRJbmRleCkgewogICAg
ICAgICBJbXBvcnQqIGltcG9ydCA9ICZtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRzW2ltcG9y
dEluZGV4XTsKQEAgLTI0MSw3ICsyNDQsNyBAQCB2b2lkIEJCUVBsYW46OmNvbXBpbGVGdW5jdGlv
bnMoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogICAgIFRocmVhZENvdW50SG9sZGVyIGhvbGRl
cigqdGhpcyk7CiAKICAgICBzaXplX3QgYnl0ZXNDb21waWxlZCA9IDA7Ci0gICAgY29uc3QgYXV0
byYgZnVuY3Rpb25Mb2NhdGlvbnMgPSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbkxvY2F0
aW9uSW5CaW5hcnk7CisgICAgY29uc3QgYXV0byYgZnVuY3Rpb25zID0gbV9tb2R1bGVJbmZvcm1h
dGlvbi0+ZnVuY3Rpb25zOwogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIGlmIChlZmZvcnQg
PT0gUGFydGlhbCAmJiBieXRlc0NvbXBpbGVkID49IE9wdGlvbnM6OndlYkFzc2VtYmx5UGFydGlh
bENvbXBpbGVMaW1pdCgpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjQ5LDcgKzI1Miw3IEBA
IHZvaWQgQkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQp
CiAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXg7CiAgICAgICAgIHsKICAgICAgICAgICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKLSAgICAgICAgICAgIGlmIChtX2N1cnJl
bnRJbmRleCA+PSBmdW5jdGlvbkxvY2F0aW9ucy5zaXplKCkpIHsKKyAgICAgICAgICAgIGlmICht
X2N1cnJlbnRJbmRleCA+PSBmdW5jdGlvbnMuc2l6ZSgpKSB7CiAgICAgICAgICAgICAgICAgaWYg
KGhhc1dvcmsoKSkKICAgICAgICAgICAgICAgICAgICAgbW92ZVRvU3RhdGUoU3RhdGU6OkNvbXBp
bGVkKTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0yNTgsMTggKzI2MSwxNiBAQCB2b2lk
IEJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbnMoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogICAg
ICAgICAgICAgKyttX2N1cnJlbnRJbmRleDsKICAgICAgICAgfQogCi0gICAgICAgIGNvbnN0IHVp
bnQ4X3QqIGZ1bmN0aW9uU3RhcnQgPSBtX3NvdXJjZSArIGZ1bmN0aW9uTG9jYXRpb25zW2Z1bmN0
aW9uSW5kZXhdLnN0YXJ0OwotICAgICAgICBzaXplX3QgZnVuY3Rpb25MZW5ndGggPSBmdW5jdGlv
bkxvY2F0aW9uc1tmdW5jdGlvbkluZGV4XS5lbmQgLSBmdW5jdGlvbkxvY2F0aW9uc1tmdW5jdGlv
bkluZGV4XS5zdGFydDsKLSAgICAgICAgQVNTRVJUKGZ1bmN0aW9uTGVuZ3RoIDw9IG1fc291cmNl
TGVuZ3RoKTsKKyAgICAgICAgY29uc3QgYXV0byYgZnVuY3Rpb24gPSBmdW5jdGlvbnNbZnVuY3Rp
b25JbmRleF07CiAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1
bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNbZnVuY3Rpb25J
bmRleF07CiAgICAgICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5m
b3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CiAgICAgICAgIHVuc2lnbmVkIGZ1bmN0aW9u
SW5kZXhTcGFjZSA9IG1fd2FzbVRvV2FzbUV4aXRTdHVicy5zaXplKCkgKyBmdW5jdGlvbkluZGV4
OwogICAgICAgICBBU1NFUlRfVU5VU0VEKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZv
cm1hdGlvbi0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5k
ZXhTcGFjZSkgPT0gc2lnbmF0dXJlSW5kZXgpOwotICAgICAgICBBU1NFUlQodmFsaWRhdGVGdW5j
dGlvbihmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBtX21vZHVsZUlu
Zm9ybWF0aW9uLmdldCgpKSk7CisgICAgICAgIEFTU0VSVCh2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0
aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRhLnNpemUoKSwgc2lnbmF0dXJlLCBtX21vZHVs
ZUluZm9ybWF0aW9uLmdldCgpKSk7CiAKICAgICAgICAgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxs
c1tmdW5jdGlvbkluZGV4XSA9IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPigpOwogICAg
ICAgICBUaWVyVXBDb3VudCogdGllclVwID0gT3B0aW9uczo6dXNlQkJRVGllclVwQ2hlY2tzKCkg
PyAmbV90aWVyVXBDb3VudHNbZnVuY3Rpb25JbmRleF0gOiBudWxscHRyOwotICAgICAgICBhdXRv
IHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZShtX2NvbXBpbGF0aW9uQ29u
dGV4dHNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWdu
YXR1cmUsIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG1fbW9kdWxl
SW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBmdW5j
dGlvbkluZGV4LCB0aWVyVXAsIG1fdGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICAgICAgYXV0byBw
YXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUobV9jb21waWxhdGlvbkNvbnRl
eHRzW2Z1bmN0aW9uSW5kZXhdLCBmdW5jdGlvbi5kYXRhLmRhdGEoKSwgZnVuY3Rpb24uZGF0YS5z
aXplKCksIHNpZ25hdHVyZSwgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4
XSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6OkJC
UU1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwgbV90aHJvd1dhc21FeGNlcHRpb24pOwogCiAg
ICAgICAgIGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxlUmVzdWx0KSkgewogICAgICAgICAg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwpAQCAtMjc3LDcgKzI3OCw3IEBAIHZv
aWQgQkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAg
ICAgICAgICAgICAgICAgLy8gTXVsdGlwbGUgY29tcGlsZXMgY291bGQgZmFpbCBzaW11bHRhbmVv
dXNseS4gV2UgYXJiaXRyYXJpbHkgY2hvb3NlIHRoZSBmaXJzdC4KICAgICAgICAgICAgICAgICBm
YWlsKGxvY2tlciwgbWFrZVN0cmluZyhwYXJzZUFuZENvbXBpbGVSZXN1bHQuZXJyb3IoKSwgIiwg
aW4gZnVuY3Rpb24gYXQgaW5kZXggIiwgU3RyaW5nOjpudW1iZXIoZnVuY3Rpb25JbmRleCkpKTsg
Ly8gRklYTUUgbWFrZSB0aGlzIGFuIEV4cGVjdGVkLgogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgbV9jdXJyZW50SW5kZXggPSBmdW5jdGlvbkxvY2F0aW9ucy5zaXplKCk7CisgICAgICAgICAg
ICBtX2N1cnJlbnRJbmRleCA9IGZ1bmN0aW9ucy5zaXplKCk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KIApAQCAtMjg5LDE3ICsyOTAsMTcgQEAgdm9pZCBCQlFQbGFuOjpjb21waWxl
RnVuY3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAgICAgICAgICAgIEFTU0VSVF9V
TlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CiAgICAgICAgIH0KIAotICAgICAgICBi
eXRlc0NvbXBpbGVkICs9IGZ1bmN0aW9uTGVuZ3RoOworICAgICAgICBieXRlc0NvbXBpbGVkICs9
IGZ1bmN0aW9uLmRhdGEuc2l6ZSgpOwogICAgIH0KIH0KIAogdm9pZCBCQlFQbGFuOjpjb21wbGV0
ZShjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyKQogewotICAgIEFTU0VSVChtX3N0YXRlICE9
IFN0YXRlOjpDb21waWxlZCB8fCBtX2N1cnJlbnRJbmRleCA+PSBtX21vZHVsZUluZm9ybWF0aW9u
LT5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpKTsKKyAgICBBU1NFUlQobV9zdGF0ZSAh
PSBTdGF0ZTo6Q29tcGlsZWQgfHwgbV9jdXJyZW50SW5kZXggPj0gbV9tb2R1bGVJbmZvcm1hdGlv
bi0+ZnVuY3Rpb25zLnNpemUoKSk7CiAgICAgZGF0YUxvZ0xuSWYoV2FzbUJCUVBsYW5JbnRlcm5h
bDo6dmVyYm9zZSwgIlN0YXJ0aW5nIENvbXBsZXRpb24iKTsKIAogICAgIGlmICghZmFpbGVkKCkg
JiYgbV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGlsZWQpIHsKLSAgICAgICAgZm9yICh1aW50MzJfdCBm
dW5jdGlvbkluZGV4ID0gMDsgZnVuY3Rpb25JbmRleCA8IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1
bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCk7IGZ1bmN0aW9uSW5kZXgrKykgeworICAgICAg
ICBmb3IgKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXggPSAwOyBmdW5jdGlvbkluZGV4IDwgbV9tb2R1
bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25zLnNpemUoKTsgZnVuY3Rpb25JbmRleCsrKSB7CiAgICAg
ICAgICAgICBDb21waWxhdGlvbkNvbnRleHQmIGNvbnRleHQgPSBtX2NvbXBpbGF0aW9uQ29udGV4
dHNbZnVuY3Rpb25JbmRleF07CiAgICAgICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJ
bmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRp
Y2VzW2Z1bmN0aW9uSW5kZXhdOwogICAgICAgICAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1
cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKQEAgLTM1MSw3
ICszNTIsNyBAQCB2b2lkIEJCUVBsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQog
ewogICAgIHN3aXRjaCAobV9zdGF0ZSkgewogICAgIGNhc2UgU3RhdGU6OkluaXRpYWw6Ci0gICAg
ICAgIHBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKTsKKyAgICAgICAgcGFyc2VBbmRWYWxpZGF0ZU1v
ZHVsZShtX3NvdXJjZS5kYXRhKCksIG1fc291cmNlLnNpemUoKSk7CiAgICAgICAgIGlmICghaGFz
V29yaygpKSB7CiAgICAgICAgICAgICBBU1NFUlQoaXNDb21wbGV0ZSgpKTsKICAgICAgICAgICAg
IHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQ
bGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oCmluZGV4IGQ4
ODE0NWQ3ZGRkYmQ2YjE5MTA1Nzc4MTdjZTdjYjhkYjQxMjFkMWUuLjk0MWFjNzVmNzBlNmY5MTFi
OWZiYjNkZGIxMzc4Y2NmOTY5OTQxYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CQlFQbGFuLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUJCUVBsYW4uaApAQCAtNTIsMTEgKzUyLDE0IEBAIGNsYXNzIEJCUVBsYW4gZmluYWwgOiBwdWJs
aWMgUGxhbiB7CiAgICAgLy8gTm90ZTogQ29tcGxldGlvblRhc2sgc2hvdWxkIG5vdCBob2xkIGEg
cmVmZXJlbmNlIHRvIHRoZSBQbGFuIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGEgcmVmZXJlbmNl
IGN5Y2xlLgogICAgIEJCUVBsYW4oQ29udGV4dCosIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4sIEFz
eW5jV29yaywgQ29tcGxldGlvblRhc2smJiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93
V2FzbUV4Y2VwdGlvbik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQkJRUGxhbihDb250ZXh0Kiwg
VmVjdG9yPHVpbnQ4X3Q+JiYsIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJiwgQ3JlYXRlRW1i
ZWRkZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4Y2VwdGlvbik7Ci0gICAgLy8gTm90ZTogVGhpcyBj
b25zdHJ1Y3RvciBzaG91bGQgb25seSBiZSB1c2VkIGlmIHlvdSBhcmUgbm90IGFjdHVhbGx5IGJ1
aWxkaW5nIGEgbW9kdWxlIGUuZy4gdmFsaWRhdGlvbi9mdW5jdGlvbiB0ZXN0cwotICAgIC8vIEZJ
WE1FOiBXaGVuIHdlIGdldCByaWQgb2YgZnVuY3Rpb24gdGVzdHMgd2Ugc2hvdWxkIHJlbW92ZSBB
c3luY1dvcmsgZnJvbSB0aGlzIGNvbnN0cnVjdG9yLgotICAgIEpTX0VYUE9SVF9QUklWQVRFIEJC
UVBsYW4oQ29udGV4dCosIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIEFzeW5jV29yaywgQ29tcGxl
dGlvblRhc2smJik7CisgICAgQkJRUGxhbihDb250ZXh0KiwgQXN5bmNXb3JrLCBDb21wbGV0aW9u
VGFzayYmKTsKIAotICAgIGJvb2wgcGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpOworCisgICAgYm9v
bCBwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBwYXJzZUFu
ZFZhbGlkYXRlTW9kdWxlKG1fc291cmNlLmRhdGEoKSwgbV9zb3VyY2Uuc2l6ZSgpKTsKKyAgICB9
CisgICAgYm9vbCBwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3Qp
OwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmVwYXJlKCk7CiAgICAgdm9pZCBjb21w
aWxlRnVuY3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0KTsKQEAgLTEzNiw2ICsxMzksNyBAQCBjbGFz
cyBCQlFQbGFuIGZpbmFsIDogcHVibGljIFBsYW4gewogCiAgICAgY29uc3QgY2hhciogc3RhdGVT
dHJpbmcoU3RhdGUpOwogICAgIAorICAgIFZlY3Rvcjx1aW50OF90PiBtX3NvdXJjZTsKICAgICBC
YWc8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7CiAgICAgVmVjdG9yPE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiBtX3dhc21Ub1dhc21FeGl0U3R1YnM7CiAgICAg
VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPj4gbV93YXNtSW50ZXJuYWxG
dW5jdGlvbnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9y
bWF0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKaW5kZXggMjc4
NGU5MGFmMzg0MWEwMmU1ODczMzMyY2ZmOGJiMDY0ODdlMzNkZS4uZTQzZjRlZDkzNjE2N2ZmMjkz
OGQ4MzdhMGNlMDg4ZDQzZDIwYTRlNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUZvcm1hdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21G
b3JtYXQuaApAQCAtMTQwLDkgKzE0MCwxMCBAQCBzdHJ1Y3QgR2xvYmFsIHsKICAgICB1aW50NjRf
dCBpbml0aWFsQml0c09ySW1wb3J0TnVtYmVyIHsgMCB9OwogfTsKIAotc3RydWN0IEZ1bmN0aW9u
TG9jYXRpb25JbkJpbmFyeSB7CitzdHJ1Y3QgRnVuY3Rpb25EYXRhIHsKICAgICBzaXplX3Qgc3Rh
cnQ7CiAgICAgc2l6ZV90IGVuZDsKKyAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKIH07CiAKIGNs
YXNzIEkzMkluaXRFeHByIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTW9kdWxlSW5mb3JtYXRpb24uY3BwCmluZGV4IGNiOGRiMGUwOTNmOTRjZGEzMTZkZDI0YmFm
MzllNTEyZWRhMjAzMTQuLjhhMjU0YzAwMmZiZTllZjkwY2VmMWFiZGZjNDE2OWMxZTQ2YzUzZGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1h
dGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9y
bWF0aW9uLmNwcApAQCAtMzEsMjEgKzMxLDEwIEBACiAjaW5jbHVkZSAiV2FzbU5hbWVTZWN0aW9u
LmgiCiAjaW5jbHVkZSA8d3RmL1NIQTEuaD4KIAotbmFtZXNwYWNlIHsKLUNTdHJpbmcgc2hhMShj
b25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0KQotewotICAgIFNIQTEgaGFzaDsKLSAgICBoYXNo
LmFkZEJ5dGVzKGlucHV0KTsKLSAgICByZXR1cm4gaGFzaC5jb21wdXRlSGV4RGlnZXN0KCk7Ci19
Ci19Ci0KIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKLU1vZHVsZUluZm9ybWF0
aW9uOjpNb2R1bGVJbmZvcm1hdGlvbihWZWN0b3I8dWludDhfdD4mJiBzb3VyY2VCeXRlcykKLSAg
ICA6IHNvdXJjZShXVEZNb3ZlKHNvdXJjZUJ5dGVzKSkKLSAgICAsIGhhc2goT3B0aW9uczo6dXNl
RWFnZXJXZWJBc3NlbWJseU1vZHVsZUhhc2hpbmcoKSA/IHN0ZDo6bWFrZV9vcHRpb25hbChzaGEx
KHNvdXJjZSkpIDogc3RkOjpudWxsb3B0KQotICAgICwgbmFtZVNlY3Rpb24obmV3IE5hbWVTZWN0
aW9uKGhhc2gpKQorTW9kdWxlSW5mb3JtYXRpb246Ok1vZHVsZUluZm9ybWF0aW9uKCkKKyAgICA6
IG5hbWVTZWN0aW9uKE5hbWVTZWN0aW9uOjpjcmVhdGUoKSkKIHsKIH0KIE1vZHVsZUluZm9ybWF0
aW9uOjp+TW9kdWxlSW5mb3JtYXRpb24oKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgKaW5kZXggMGJhYjU3ZTA3MGQyZWEzMzA2
MmYzNjM2NThhMjQxNWU5YmQ1MWUyZC4uZmI1ZTNhMGNkZWQ0ZTczODAyNDMwM2JlNWUwZjU2N2Fm
NTViYTAyNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVs
ZUluZm9ybWF0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVs
ZUluZm9ybWF0aW9uLmgKQEAgLTM0LDExICszNCwxNCBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBXYXNtIHsKIAogc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uIDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPE1vZHVsZUluZm9ybWF0aW9uPiB7Ci0gICAgTW9kdWxlSW5mb3JtYXRpb24o
KSA9IGRlbGV0ZTsKKyAgICBNb2R1bGVJbmZvcm1hdGlvbigpOwogICAgIE1vZHVsZUluZm9ybWF0
aW9uKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJikgPSBkZWxldGU7CiAgICAgTW9kdWxlSW5mb3Jt
YXRpb24oTW9kdWxlSW5mb3JtYXRpb24mJikgPSBkZWxldGU7CiAKLSAgICBNb2R1bGVJbmZvcm1h
dGlvbihWZWN0b3I8dWludDhfdD4mJiBzb3VyY2VCeXRlcyk7CisgICAgc3RhdGljIFJlZjxNb2R1
bGVJbmZvcm1hdGlvbj4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IE1vZHVsZUluZm9ybWF0aW9uKTsKKyAgICB9CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB+
TW9kdWxlSW5mb3JtYXRpb24oKTsKICAgICAKQEAgLTU4LDggKzYxLDggQEAgc3RydWN0IE1vZHVs
ZUluZm9ybWF0aW9uIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPE1vZHVsZUluZm9ybWF0
aW9uPiB7CiAgICAgdWludDMyX3QgaW1wb3J0RnVuY3Rpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJu
IGltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7IH0KICAgICB1aW50MzJfdCBp
bnRlcm5hbEZ1bmN0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBpbnRlcm5hbEZ1bmN0aW9uU2ln
bmF0dXJlSW5kaWNlcy5zaXplKCk7IH0KIAotICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiBzb3Vy
Y2U7Ci0gICAgY29uc3Qgc3RkOjpvcHRpb25hbDxDU3RyaW5nPiBoYXNoOworICAgIHVpbnQzMl90
IG1lbW9yeUNvdW50KCkgY29uc3QgeyByZXR1cm4gbWVtb3J5ID8gMSA6IDA7IH0KKyAgICB1aW50
MzJfdCB0YWJsZUNvdW50KCkgY29uc3QgeyByZXR1cm4gdGFibGVJbmZvcm1hdGlvbiA/IDEgOiAw
OyB9CiAKICAgICBWZWN0b3I8SW1wb3J0PiBpbXBvcnRzOwogICAgIFZlY3RvcjxTaWduYXR1cmVJ
bmRleD4gaW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzOwpAQCAtNjgsNyArNzEsNyBAQCBz
dHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TW9k
dWxlSW5mb3JtYXRpb24+IHsKIAogICAgIE1lbW9yeUluZm9ybWF0aW9uIG1lbW9yeTsKIAotICAg
IFZlY3RvcjxGdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnk+IGZ1bmN0aW9uTG9jYXRpb25JbkJpbmFy
eTsKKyAgICBWZWN0b3I8RnVuY3Rpb25EYXRhPiBmdW5jdGlvbnM7CiAKICAgICBWZWN0b3I8RXhw
b3J0PiBleHBvcnRzOwogICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IHN0YXJ0RnVuY3Rpb25J
bmRleFNwYWNlOwpAQCAtNzgsNyArODEsNyBAQCBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TW9kdWxlSW5mb3JtYXRpb24+IHsKICAgICBWZWN0
b3I8R2xvYmFsPiBnbG9iYWxzOwogICAgIHVuc2lnbmVkIGZpcnN0SW50ZXJuYWxHbG9iYWwgeyAw
IH07CiAgICAgVmVjdG9yPEN1c3RvbVNlY3Rpb24+IGN1c3RvbVNlY3Rpb25zOwotICAgIFJlZlB0
cjxOYW1lU2VjdGlvbj4gbmFtZVNlY3Rpb247CisgICAgUmVmPE5hbWVTZWN0aW9uPiBuYW1lU2Vj
dGlvbjsKIH07CiAKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Nb2R1bGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1v
ZHVsZVBhcnNlci5jcHAKaW5kZXggZjAzZTY5ODdmNGE1MDI1OTFkZjcxZGM4MTU3ODIwODA5OTYx
MzhiNC4uYThlZDhkMmU2YjE5Yzk1ZjY3MWZmY2JjNTQ3ODNkYTc0YzY1MDgwZiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKQEAgLTMyLDE4
ICszMiwxMSBAQAogI2luY2x1ZGUgIldhc21NZW1vcnlJbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUg
Ildhc21OYW1lU2VjdGlvblBhcnNlci5oIgogI2luY2x1ZGUgIldhc21PcHMuaCIKKyNpbmNsdWRl
ICJXYXNtU2VjdGlvblBhcnNlci5oIgogI2luY2x1ZGUgIldhc21TZWN0aW9ucy5oIgogCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi1BTFdBWVNfSU5MSU5FIEkzMkluaXRFeHBy
IG1ha2VJMzJJbml0RXhwcih1aW50OF90IG9wY29kZSwgdWludDMyX3QgYml0cykKLXsKLSAgICBS
RUxFQVNFX0FTU0VSVChvcGNvZGUgPT0gSTMyQ29uc3QgfHwgb3Bjb2RlID09IEdldEdsb2JhbCk7
Ci0gICAgaWYgKG9wY29kZSA9PSBJMzJDb25zdCkKLSAgICAgICAgcmV0dXJuIEkzMkluaXRFeHBy
Ojpjb25zdFZhbHVlKGJpdHMpOwotICAgIHJldHVybiBJMzJJbml0RXhwcjo6Z2xvYmFsSW1wb3J0
KGJpdHMpOwotfQotCiBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2UoKSAtPiBSZXN1bHQKIHsKICAg
ICBjb25zdCBzaXplX3QgbWluU2l6ZSA9IDg7CkBAIC03MSwxOSArNjQsMTkgQEAgYXV0byBNb2R1
bGVQYXJzZXI6OnBhcnNlKCkgLT4gUmVzdWx0CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlVmFyVUludDMyKHNlY3Rpb25MZW5ndGgpLCAiY2FuJ3QgZ2V0ICIsIHNlY3Rpb24sICIg
c2VjdGlvbidzIGxlbmd0aCIpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHNlY3Rpb25M
ZW5ndGggPiBsZW5ndGgoKSAtIG1fb2Zmc2V0LCBzZWN0aW9uLCAiIHNlY3Rpb24gb2Ygc2l6ZSAi
LCBzZWN0aW9uTGVuZ3RoLCAiIHdvdWxkIG92ZXJmbG93IE1vZHVsZSdzIHNpemUiKTsKIAotICAg
ICAgICBhdXRvIGVuZCA9IG1fb2Zmc2V0ICsgc2VjdGlvbkxlbmd0aDsKKyAgICAgICAgU2VjdGlv
blBhcnNlciBwYXJzZXIoc291cmNlKCkgKyBtX29mZnNldCwgc2VjdGlvbkxlbmd0aCwgbV9vZmZz
ZXQsIG1faW5mby5nZXQoKSk7CiAKICAgICAgICAgc3dpdGNoIChzZWN0aW9uKSB7CiAjZGVmaW5l
IFdBU01fU0VDVElPTl9QQVJTRShOQU1FLCBJRCwgREVTQ1JJUFRJT04pICAgICAgICAgICAgICAg
ICAgIFwKICAgICAgICAgY2FzZSBTZWN0aW9uOjpOQU1FOiB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlM
UyhwYXJzZSAjIyBOQU1FKCkpOyAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQVNNX0ZBSUxf
SUZfSEVMUEVSX0ZBSUxTKHBhcnNlci5wYXJzZSAjIyBOQU1FKCkpOyAgICAgICAgICAgICBcCiAg
ICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKICAgICAgICAgfQogICAgICAgICBGT1JfRUFDSF9LTk9XTl9XQVNNX1NFQ1RJ
T04oV0FTTV9TRUNUSU9OX1BBUlNFKQogI3VuZGVmIFdBU01fU0VDVElPTl9QQVJTRQogCiAgICAg
ICAgIGNhc2UgU2VjdGlvbjo6Q3VzdG9tOiB7Ci0gICAgICAgICAgICBXQVNNX0ZBSUxfSUZfSEVM
UEVSX0ZBSUxTKHBhcnNlQ3VzdG9tKHNlY3Rpb25MZW5ndGgpKTsKKyAgICAgICAgICAgIFdBU01f
RkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VyLnBhcnNlQ3VzdG9tKCkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KIApAQCAtOTMsNTM4ICs4NiwyNCBAQCBhdXRvIE1vZHVsZVBhcnNl
cjo6cGFyc2UoKSAtPiBSZXN1bHQKICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRihlbmQgIT0gbV9vZmZzZXQsICJwYXJzaW5nIGVuZGVkIGJlZm9yZSB0
aGUgZW5kIG9mICIsIHNlY3Rpb24sICIgc2VjdGlvbiIpOworICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKHBhcnNlci5sZW5ndGgoKSAhPSBwYXJzZXIub2Zmc2V0KCksICJwYXJzaW5nIGVuZGVk
IGJlZm9yZSB0aGUgZW5kIG9mICIsIHNlY3Rpb24sICIgc2VjdGlvbiIpOworCisgICAgICAgIG1f
b2Zmc2V0ICs9IHNlY3Rpb25MZW5ndGg7CiAKIAogICAgICAgICBpZiAoaXNLbm93blNlY3Rpb24o
c2VjdGlvbikpCiAgICAgICAgICAgICBwcmV2aW91c0tub3duU2VjdGlvbiA9IHNlY3Rpb247CiAg
ICAgfQogCi0gICAgcmV0dXJuIHsgfTsKLX0KLQotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlVHlw
ZSgpIC0+IFBhcnRpYWxSZXN1bHQKLXsKLSAgICB1aW50MzJfdCBjb3VudDsKLQotICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGNvdW50KSwgImNhbid0IGdldCBUeXBlIHNl
Y3Rpb24ncyBjb3VudCIpOwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoY291bnQgPiBtYXhUeXBl
cywgIlR5cGUgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgY291bnQsICIgbWF4aW11bSAi
LCBtYXhUeXBlcyk7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT51c2VkU2lnbmF0
dXJlcy50cnlSZXNlcnZlQ2FwYWNpdHkoY291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1l
bW9yeSBmb3IgVHlwZSBzZWN0aW9uJ3MgIiwgY291bnQsICIgZW50cmllcyIpOwotCi0gICAgZm9y
ICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgaW50OF90IHR5cGU7
Ci0gICAgICAgIHVpbnQzMl90IGFyZ3VtZW50Q291bnQ7Ci0gICAgICAgIFZlY3RvcjxUeXBlPiBh
cmd1bWVudFR5cGVzOwotCi0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlSW50Nyh0
eXBlKSwgImNhbid0IGdldCAiLCBpLCAidGggVHlwZSdzIHR5cGUiKTsKLSAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRih0eXBlICE9IEZ1bmMsIGksICJ0aCBUeXBlIGlzIG5vbi1GdW5jICIsIHR5
cGUpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihhcmd1bWVu
dENvdW50KSwgImNhbid0IGdldCAiLCBpLCAidGggVHlwZSdzIGFyZ3VtZW50IGNvdW50Iik7Ci0g
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoYXJndW1lbnRDb3VudCA+IG1heEZ1bmN0aW9uUGFy
YW1zLCBpLCAidGggYXJndW1lbnQgY291bnQgaXMgdG9vIGJpZyAiLCBhcmd1bWVudENvdW50LCAi
IG1heGltdW0gIiwgbWF4RnVuY3Rpb25QYXJhbXMpOwotICAgICAgICBSZWZQdHI8U2lnbmF0dXJl
PiBtYXliZVNpZ25hdHVyZSA9IFNpZ25hdHVyZTo6dHJ5Q3JlYXRlKGFyZ3VtZW50Q291bnQpOwot
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtYXliZVNpZ25hdHVyZSwgImNhbid0IGFsbG9j
YXRlIGVub3VnaCBtZW1vcnkgZm9yIFR5cGUgc2VjdGlvbidzICIsIGksICJ0aCBzaWduYXR1cmUi
KTsKLSAgICAgICAgUmVmPFNpZ25hdHVyZT4gc2lnbmF0dXJlID0gbWF5YmVTaWduYXR1cmUucmVs
ZWFzZU5vbk51bGwoKTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJndW1l
bnRDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBUeXBlIGFyZ3VtZW50VHlwZTsKLSAgICAgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFsdWVUeXBlKGFyZ3VtZW50VHlwZSksICJj
YW4ndCBnZXQgIiwgaSwgInRoIGFyZ3VtZW50IFR5cGUiKTsKLSAgICAgICAgICAgIHNpZ25hdHVy
ZS0+YXJndW1lbnQoaSkgPSBhcmd1bWVudFR5cGU7Ci0gICAgICAgIH0KLQotICAgICAgICB1aW50
OF90IHJldHVybkNvdW50OwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJ
bnQxKHJldHVybkNvdW50KSwgImNhbid0IGdldCAiLCBpLCAidGggVHlwZSdzIHJldHVybiBjb3Vu
dCIpOwotICAgICAgICBUeXBlIHJldHVyblR5cGU7Ci0gICAgICAgIGlmIChyZXR1cm5Db3VudCkg
ewotICAgICAgICAgICAgVHlwZSB2YWx1ZTsKLSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIXBhcnNlVmFsdWVUeXBlKHZhbHVlKSwgImNhbid0IGdldCAiLCBpLCAidGggVHlwZSdzIHJl
dHVybiB2YWx1ZSIpOwotICAgICAgICAgICAgcmV0dXJuVHlwZSA9IHN0YXRpY19jYXN0PFR5cGU+
KHZhbHVlKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICByZXR1cm5UeXBlID0gVHlwZTo6
Vm9pZDsKLSAgICAgICAgc2lnbmF0dXJlLT5yZXR1cm5UeXBlKCkgPSByZXR1cm5UeXBlOwotCi0g
ICAgICAgIHN0ZDo6cGFpcjxTaWduYXR1cmVJbmRleCwgUmVmPFNpZ25hdHVyZT4+IHJlc3VsdCA9
IFNpZ25hdHVyZUluZm9ybWF0aW9uOjphZG9wdChXVEZNb3ZlKHNpZ25hdHVyZSkpOwotICAgICAg
ICBtX2luZm8tPnVzZWRTaWduYXR1cmVzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKHJlc3VsdC5z
ZWNvbmQpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQotYXV0byBNb2R1bGVQYXJzZXI6
OnBhcnNlSW1wb3J0KCkgLT4gUGFydGlhbFJlc3VsdAotewotICAgIHVpbnQzMl90IGltcG9ydENv
dW50OwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGltcG9ydENvdW50
KSwgImNhbid0IGdldCBJbXBvcnQgc2VjdGlvbidzIGNvdW50Iik7Ci0gICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihpbXBvcnRDb3VudCA+IG1heEltcG9ydHMsICJJbXBvcnQgc2VjdGlvbidzIGNvdW50
IGlzIHRvbyBiaWcgIiwgaW1wb3J0Q291bnQsICIgbWF4aW11bSAiLCBtYXhJbXBvcnRzKTsKLSAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmdsb2JhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5
KGltcG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGltcG9y
dENvdW50LCAiIGdsb2JhbHMiKTsgLy8gRklYTUUgdGhpcyBvdmVyLWFsbG9jYXRlcyB3aGVuIHdl
IGZpeCB0aGUgRklYTUVzIGJlbG93LgotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+
aW1wb3J0cy50cnlSZXNlcnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUg
ZW5vdWdoIG1lbW9yeSBmb3IgIiwgaW1wb3J0Q291bnQsICIgaW1wb3J0cyIpOyAvLyBGSVhNRSB0
aGlzIG92ZXItYWxsb2NhdGVzIHdoZW4gd2UgZml4IHRoZSBGSVhNRXMgYmVsb3cuCi0gICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5pbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMu
dHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBt
ZW1vcnkgZm9yICIsIGltcG9ydENvdW50LCAiIGltcG9ydCBmdW5jdGlvbiBzaWduYXR1cmVzIik7
IC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxv
dy4KLQotICAgIGZvciAodWludDMyX3QgaW1wb3J0TnVtYmVyID0gMDsgaW1wb3J0TnVtYmVyIDwg
aW1wb3J0Q291bnQ7ICsraW1wb3J0TnVtYmVyKSB7Ci0gICAgICAgIHVpbnQzMl90IG1vZHVsZUxl
bjsKLSAgICAgICAgdWludDMyX3QgZmllbGRMZW47Ci0gICAgICAgIE5hbWUgbW9kdWxlU3RyaW5n
OwotICAgICAgICBOYW1lIGZpZWxkU3RyaW5nOwotICAgICAgICBFeHRlcm5hbEtpbmQga2luZDsK
LSAgICAgICAgdW5zaWduZWQga2luZEluZGV4IHsgMCB9OwotCi0gICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKG1vZHVsZUxlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0
TnVtYmVyLCAidGggSW1wb3J0J3MgbW9kdWxlIG5hbWUgbGVuZ3RoIik7Ci0gICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVVVEY4U3RyaW5nKG1vZHVsZVN0cmluZywgbW9kdWxlTGVu
KSwgImNhbid0IGdldCAiLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQncyBtb2R1bGUgbmFtZSBv
ZiBsZW5ndGggIiwgbW9kdWxlTGVuKTsKLQotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFw
YXJzZVZhclVJbnQzMihmaWVsZExlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGgg
SW1wb3J0J3MgZmllbGQgbmFtZSBsZW5ndGggaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICIn
Iik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVVVEY4U3RyaW5nKGZpZWxk
U3RyaW5nLCBmaWVsZExlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0
J3MgZmllbGQgbmFtZSBvZiBsZW5ndGggIiwgbW9kdWxlTGVuLCAiIGluIG1vZHVsZSAnIiwgbW9k
dWxlU3RyaW5nLCAiJyIpOwotCi0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlRXh0
ZXJuYWxLaW5kKGtpbmQpLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdz
IGtpbmQgaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0cmlu
ZywgIiciKTsKLSAgICAgICAgc3dpdGNoIChraW5kKSB7Ci0gICAgICAgIGNhc2UgRXh0ZXJuYWxL
aW5kOjpGdW5jdGlvbjogewotICAgICAgICAgICAgdWludDMyX3QgZnVuY3Rpb25TaWduYXR1cmVJ
bmRleDsKLSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGZ1
bmN0aW9uU2lnbmF0dXJlSW5kZXgpLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIElt
cG9ydCdzIGZ1bmN0aW9uIHNpZ25hdHVyZSBpbiBtb2R1bGUgJyIsIG1vZHVsZVN0cmluZywgIicg
ZmllbGQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOwotICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRihmdW5jdGlvblNpZ25hdHVyZUluZGV4ID49IG1faW5mby0+dXNlZFNpZ25hdHVyZXMuc2l6
ZSgpLCAiaW52YWxpZCBmdW5jdGlvbiBzaWduYXR1cmUgZm9yICIsIGltcG9ydE51bWJlciwgInRo
IEltcG9ydCwgIiwgZnVuY3Rpb25TaWduYXR1cmVJbmRleCwgIiBpcyBvdXQgb2YgcmFuZ2Ugb2Yg
IiwgbV9pbmZvLT51c2VkU2lnbmF0dXJlcy5zaXplKCksICIgaW4gbW9kdWxlICciLCBtb2R1bGVT
dHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0cmluZywgIiciKTsKLSAgICAgICAgICAgIGtpbmRJ
bmRleCA9IG1faW5mby0+aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsKLSAg
ICAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gU2lnbmF0dXJlSW5mb3Jt
YXRpb246OmdldChtX2luZm8tPnVzZWRTaWduYXR1cmVzW2Z1bmN0aW9uU2lnbmF0dXJlSW5kZXhd
KTsKLSAgICAgICAgICAgIG1faW5mby0+aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnVu
Y2hlY2tlZEFwcGVuZChzaWduYXR1cmVJbmRleCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIEV4dGVybmFsS2luZDo6VGFibGU6IHsKLSAgICAgICAgICAgIGJv
b2wgaXNJbXBvcnQgPSB0cnVlOwotICAgICAgICAgICAgUGFydGlhbFJlc3VsdCByZXN1bHQgPSBw
YXJzZVRhYmxlSGVscGVyKGlzSW1wb3J0KTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSghcmVz
dWx0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoV1RGTW92ZShyZXN1
bHQuZXJyb3IoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBFeHRlcm5hbEtpbmQ6Ok1lbW9yeTogewotICAgICAgICAgICAgYm9vbCBpc0ltcG9ydCA9IHRy
dWU7Ci0gICAgICAgICAgICBQYXJ0aWFsUmVzdWx0IHJlc3VsdCA9IHBhcnNlTWVtb3J5SGVscGVy
KGlzSW1wb3J0KTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoV1RGTW92ZShyZXN1bHQuZXJyb3IoKSkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6
Okdsb2JhbDogewotICAgICAgICAgICAgR2xvYmFsIGdsb2JhbDsKLSAgICAgICAgICAgIFdBU01f
RkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VHbG9iYWxUeXBlKGdsb2JhbCkpOwotICAgICAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihnbG9iYWwubXV0YWJpbGl0eSA9PSBHbG9iYWw6Ok11dGFi
bGUsICJNdXRhYmxlIEdsb2JhbHMgYXJlbid0IHN1cHBvcnRlZCIpOwotCi0gICAgICAgICAgICBr
aW5kSW5kZXggPSBtX2luZm8tPmdsb2JhbHMuc2l6ZSgpOwotICAgICAgICAgICAgbV9pbmZvLT5n
bG9iYWxzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGdsb2JhbCkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIG1faW5mby0+aW1wb3J0cy51bmNo
ZWNrZWRBcHBlbmQoeyBXVEZNb3ZlKG1vZHVsZVN0cmluZyksIFdURk1vdmUoZmllbGRTdHJpbmcp
LCBraW5kLCBraW5kSW5kZXggfSk7Ci0gICAgfQotCi0gICAgbV9pbmZvLT5maXJzdEludGVybmFs
R2xvYmFsID0gbV9pbmZvLT5nbG9iYWxzLnNpemUoKTsKLSAgICByZXR1cm4geyB9OwotfQotCi1h
dXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbigpIC0+IFBhcnRpYWxSZXN1bHQKLXsKLSAg
ICB1aW50MzJfdCBjb3VudDsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQz
Mihjb3VudCksICJjYW4ndCBnZXQgRnVuY3Rpb24gc2VjdGlvbidzIGNvdW50Iik7Ci0gICAgV0FT
TV9QQVJTRVJfRkFJTF9JRihjb3VudCA+IG1heEZ1bmN0aW9ucywgIkZ1bmN0aW9uIHNlY3Rpb24n
cyBjb3VudCBpcyB0b28gYmlnICIsIGNvdW50LCAiIG1heGltdW0gIiwgbWF4RnVuY3Rpb25zKTsK
LSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmludGVybmFsRnVuY3Rpb25TaWduYXR1
cmVJbmRpY2VzLnRyeVJlc2VydmVDYXBhY2l0eShjb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91
Z2ggbWVtb3J5IGZvciAiLCBjb3VudCwgIiBGdW5jdGlvbiBzaWduYXR1cmVzIik7Ci0gICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkudHJ5UmVz
ZXJ2ZUNhcGFjaXR5KGNvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIs
IGNvdW50LCAiRnVuY3Rpb24gbG9jYXRpb25zIik7Ci0KLSAgICBmb3IgKHVpbnQzMl90IGkgPSAw
OyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICB1aW50MzJfdCB0eXBlTnVtYmVyOwotICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMih0eXBlTnVtYmVyKSwgImNhbid0
IGdldCAiLCBpLCAidGggRnVuY3Rpb24ncyB0eXBlIG51bWJlciIpOwotICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKHR5cGVOdW1iZXIgPj0gbV9pbmZvLT51c2VkU2lnbmF0dXJlcy5zaXplKCks
IGksICJ0aCBGdW5jdGlvbiB0eXBlIG51bWJlciBpcyBpbnZhbGlkICIsIHR5cGVOdW1iZXIpOwot
Ci0gICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gU2lnbmF0dXJlSW5mb3Jt
YXRpb246OmdldChtX2luZm8tPnVzZWRTaWduYXR1cmVzW3R5cGVOdW1iZXJdKTsKLSAgICAgICAg
Ly8gVGhlIENvZGUgc2VjdGlvbiBmaXhlcyB1cCBzdGFydCBhbmQgZW5kLgotICAgICAgICBzaXpl
X3Qgc3RhcnQgPSAwOwotICAgICAgICBzaXplX3QgZW5kID0gMDsKLSAgICAgICAgbV9pbmZvLT5p
bnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy51bmNoZWNrZWRBcHBlbmQoc2lnbmF0dXJl
SW5kZXgpOwotICAgICAgICBtX2luZm8tPmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS51bmNoZWNr
ZWRBcHBlbmQoeyBzdGFydCwgZW5kIH0pOworICAgIGlmIChPcHRpb25zOjp1c2VFYWdlcldlYkFz
c2VtYmx5TW9kdWxlSGFzaGluZygpKSB7CisgICAgICAgIFNIQTEgaGFzaGVyOworICAgICAgICBo
YXNoZXIuYWRkQnl0ZXMoc291cmNlKCksIGxlbmd0aCgpKTsKKyAgICAgICAgbV9pbmZvLT5uYW1l
U2VjdGlvbi0+c2V0SGFzaChoYXNoZXIuY29tcHV0ZUhleERpZ2VzdCgpKTsKICAgICB9CiAKICAg
ICByZXR1cm4geyB9OwogfQogCi1hdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VSZXNpemFibGVMaW1p
dHModWludDMyX3QmIGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+JiBtYXhpbXVtKSAt
PiBQYXJ0aWFsUmVzdWx0Ci17Ci0gICAgQVNTRVJUKCFtYXhpbXVtKTsKLQotICAgIHVpbnQ4X3Qg
ZmxhZ3M7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MShmbGFncyksICJj
YW4ndCBwYXJzZSByZXNpemFibGUgbGltaXRzIGZsYWdzIik7Ci0gICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VWYXJVSW50MzIoaW5pdGlhbCksICJjYW4ndCBwYXJzZSByZXNpemFibGUgbGlt
aXRzIGluaXRpYWwgcGFnZSBjb3VudCIpOwotCi0gICAgaWYgKGZsYWdzKSB7Ci0gICAgICAgIHVp
bnQzMl90IG1heGltdW1JbnQ7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFy
VUludDMyKG1heGltdW1JbnQpLCAiY2FuJ3QgcGFyc2UgcmVzaXphYmxlIGxpbWl0cyBtYXhpbXVt
IHBhZ2UgY291bnQiKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbml0aWFsID4gbWF4
aW11bUludCwgInJlc2l6YWJsZSBsaW1pdHMgaGFzIGEgaW5pdGlhbCBwYWdlIGNvdW50IG9mICIs
IGluaXRpYWwsICIgd2hpY2ggaXMgZ3JlYXRlciB0aGFuIGl0cyBtYXhpbXVtICIsIG1heGltdW1J
bnQpOwotICAgICAgICBtYXhpbXVtID0gbWF4aW11bUludDsKLSAgICB9Ci0KLSAgICByZXR1cm4g
eyB9OwotfQotCi1hdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VUYWJsZUhlbHBlcihib29sIGlzSW1w
b3J0KSAtPiBQYXJ0aWFsUmVzdWx0Ci17Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX3RhYmxl
Q291bnQgPiAwLCAiQ2Fubm90IGhhdmUgbW9yZSB0aGFuIG9uZSBUYWJsZSBmb3Igbm93Iik7Ci0K
LSAgICArK21fdGFibGVDb3VudDsKLQotICAgIGludDhfdCB0eXBlOwotICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXBhcnNlSW50Nyh0eXBlKSwgImNhbid0IHBhcnNlIFRhYmxlIHR5cGUiKTsKLSAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKHR5cGUgIT0gV2FzbTo6QW55ZnVuYywgIlRhYmxlIHR5cGUg
c2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAiLCB0eXBlKTsKLQotICAgIHVpbnQzMl90IGluaXRpYWw7
Ci0gICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bTsKLSAgICBQYXJ0aWFsUmVzdWx0
IGxpbWl0cyA9IHBhcnNlUmVzaXphYmxlTGltaXRzKGluaXRpYWwsIG1heGltdW0pOwotICAgIGlm
IChVTkxJS0VMWSghbGltaXRzKSkKLSAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFdURk1v
dmUobGltaXRzLmVycm9yKCkpKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluaXRpYWwgPiBt
YXhUYWJsZUVudHJpZXMsICJUYWJsZSdzIGluaXRpYWwgcGFnZSBjb3VudCBvZiAiLCBpbml0aWFs
LCAiIGlzIHRvbyBiaWcsIG1heGltdW0gIiwgbWF4VGFibGVFbnRyaWVzKTsKLQotICAgIEFTU0VS
VCghbWF4aW11bSB8fCAqbWF4aW11bSA+PSBpbml0aWFsKTsKLQotICAgIG1faW5mby0+dGFibGVJ
bmZvcm1hdGlvbiA9IFRhYmxlSW5mb3JtYXRpb24oaW5pdGlhbCwgbWF4aW11bSwgaXNJbXBvcnQp
OwotCi0gICAgcmV0dXJuIHsgfTsKLX0KLQotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlVGFibGUo
KSAtPiBQYXJ0aWFsUmVzdWx0Ci17Ci0gICAgdWludDMyX3QgY291bnQ7Ci0gICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoY291bnQpLCAiY2FuJ3QgZ2V0IFRhYmxlJ3MgY291
bnQiKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGNvdW50ID4gMSwgIlRhYmxlIGNvdW50IG9m
ICIsIGNvdW50LCAiIGlzIGludmFsaWQsIGF0IG1vc3QgMSBpcyBhbGxvd2VkIGZvciBub3ciKTsK
LQotICAgIGlmICghY291bnQpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBib29sIGlzSW1w
b3J0ID0gZmFsc2U7Ci0gICAgUGFydGlhbFJlc3VsdCByZXN1bHQgPSBwYXJzZVRhYmxlSGVscGVy
KGlzSW1wb3J0KTsKLSAgICBpZiAoVU5MSUtFTFkoIXJlc3VsdCkpCi0gICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChXVEZNb3ZlKHJlc3VsdC5lcnJvcigpKSk7Ci0KLSAgICByZXR1cm4geyB9
OwotfQotCi1hdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VNZW1vcnlIZWxwZXIoYm9vbCBpc0ltcG9y
dCkgLT4gUGFydGlhbFJlc3VsdAotewotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9tZW1vcnlD
b3VudCwgInRoZXJlIGNhbiBhdCBtb3N0IGJlIG9uZSBNZW1vcnkgc2VjdGlvbiBmb3Igbm93Iik7
Ci0KLSAgICArK21fbWVtb3J5Q291bnQ7Ci0KLSAgICBQYWdlQ291bnQgaW5pdGlhbFBhZ2VDb3Vu
dDsKLSAgICBQYWdlQ291bnQgbWF4aW11bVBhZ2VDb3VudDsKLSAgICB7Ci0gICAgICAgIHVpbnQz
Ml90IGluaXRpYWw7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW07Ci0g
ICAgICAgIFBhcnRpYWxSZXN1bHQgbGltaXRzID0gcGFyc2VSZXNpemFibGVMaW1pdHMoaW5pdGlh
bCwgbWF4aW11bSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghbGltaXRzKSkKLSAgICAgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZChXVEZNb3ZlKGxpbWl0cy5lcnJvcigpKSk7Ci0gICAgICAg
IEFTU0VSVCghbWF4aW11bSB8fCAqbWF4aW11bSA+PSBpbml0aWFsKTsKLSAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighUGFnZUNvdW50Ojppc1ZhbGlkKGluaXRpYWwpLCAiTWVtb3J5J3MgaW5p
dGlhbCBwYWdlIGNvdW50IG9mICIsIGluaXRpYWwsICIgaXMgaW52YWxpZCIpOwotCi0gICAgICAg
IGluaXRpYWxQYWdlQ291bnQgPSBQYWdlQ291bnQoaW5pdGlhbCk7Ci0KLSAgICAgICAgaWYgKG1h
eGltdW0pIHsKLSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIVBhZ2VDb3VudDo6aXNW
YWxpZCgqbWF4aW11bSksICJNZW1vcnkncyBtYXhpbXVtIHBhZ2UgY291bnQgb2YgIiwgKm1heGlt
dW0sICIgaXMgaW52YWxpZCIpOwotICAgICAgICAgICAgbWF4aW11bVBhZ2VDb3VudCA9IFBhZ2VD
b3VudCgqbWF4aW11bSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgQVNTRVJUKGluaXRpYWxQYWdl
Q291bnQpOwotICAgIEFTU0VSVCghbWF4aW11bVBhZ2VDb3VudCB8fCBtYXhpbXVtUGFnZUNvdW50
ID49IGluaXRpYWxQYWdlQ291bnQpOwotCi0gICAgbV9pbmZvLT5tZW1vcnkgPSBNZW1vcnlJbmZv
cm1hdGlvbihpbml0aWFsUGFnZUNvdW50LCBtYXhpbXVtUGFnZUNvdW50LCBpc0ltcG9ydCk7Ci0g
ICAgcmV0dXJuIHsgfTsKLX0KLQotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlTWVtb3J5KCkgLT4g
UGFydGlhbFJlc3VsdAotewotICAgIHVpbnQ4X3QgY291bnQ7Ci0gICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VWYXJVSW50MShjb3VudCksICJjYW4ndCBwYXJzZSBNZW1vcnkgc2VjdGlvbidz
IGNvdW50Iik7Ci0KLSAgICBpZiAoIWNvdW50KQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAg
V0FTTV9QQVJTRVJfRkFJTF9JRihjb3VudCAhPSAxLCAiTWVtb3J5IHNlY3Rpb24gaGFzIG1vcmUg
dGhhbiBvbmUgbWVtb3J5LCBXZWJBc3NlbWJseSBjdXJyZW50bHkgb25seSBhbGxvd3MgemVybyBv
ciBvbmUiKTsKLQotICAgIGJvb2wgaXNJbXBvcnQgPSBmYWxzZTsKLSAgICByZXR1cm4gcGFyc2VN
ZW1vcnlIZWxwZXIoaXNJbXBvcnQpOwotfQotCi1hdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VHbG9i
YWwoKSAtPiBQYXJ0aWFsUmVzdWx0Ci17Ci0gICAgdWludDMyX3QgZ2xvYmFsQ291bnQ7Ci0gICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZ2xvYmFsQ291bnQpLCAiY2FuJ3Qg
Z2V0IEdsb2JhbCBzZWN0aW9uJ3MgY291bnQiKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGds
b2JhbENvdW50ID4gbWF4R2xvYmFscywgIkdsb2JhbCBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJp
ZyAiLCBnbG9iYWxDb3VudCwgIiBtYXhpbXVtICIsIG1heEdsb2JhbHMpOwotICAgIHNpemVfdCB0
b3RhbEJ5dGVzID0gZ2xvYmFsQ291bnQgKyBtX2luZm8tPmZpcnN0SW50ZXJuYWxHbG9iYWw7Ci0g
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRigoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHRvdGFsQnl0ZXMp
IDwgZ2xvYmFsQ291bnQpIHx8ICFtX2luZm8tPmdsb2JhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KHRv
dGFsQnl0ZXMpLCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiLCB0b3RhbEJ5dGVzLCAiIGds
b2JhbHMiKTsKLQotICAgIGZvciAodWludDMyX3QgZ2xvYmFsSW5kZXggPSAwOyBnbG9iYWxJbmRl
eCA8IGdsb2JhbENvdW50OyArK2dsb2JhbEluZGV4KSB7Ci0gICAgICAgIEdsb2JhbCBnbG9iYWw7
Ci0gICAgICAgIHVpbnQ4X3QgaW5pdE9wY29kZTsKLQotICAgICAgICBXQVNNX0ZBSUxfSUZfSEVM
UEVSX0ZBSUxTKHBhcnNlR2xvYmFsVHlwZShnbG9iYWwpKTsKLSAgICAgICAgVHlwZSB0eXBlRm9y
SW5pdE9wY29kZTsKLSAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUluaXRF
eHByKGluaXRPcGNvZGUsIGdsb2JhbC5pbml0aWFsQml0c09ySW1wb3J0TnVtYmVyLCB0eXBlRm9y
SW5pdE9wY29kZSkpOwotICAgICAgICBpZiAoaW5pdE9wY29kZSA9PSBHZXRHbG9iYWwpCi0gICAg
ICAgICAgICBnbG9iYWwuaW5pdGlhbGl6YXRpb25UeXBlID0gR2xvYmFsOjpGcm9tR2xvYmFsSW1w
b3J0OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBnbG9iYWwuaW5pdGlhbGl6YXRpb25UeXBl
ID0gR2xvYmFsOjpGcm9tRXhwcmVzc2lvbjsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0
eXBlRm9ySW5pdE9wY29kZSAhPSBnbG9iYWwudHlwZSwgIkdsb2JhbCBpbml0X2V4cHIgb3Bjb2Rl
IG9mIHR5cGUgIiwgdHlwZUZvckluaXRPcGNvZGUsICIgZG9lc24ndCBtYXRjaCBnbG9iYWwncyB0
eXBlICIsIGdsb2JhbC50eXBlKTsKLQotICAgICAgICBtX2luZm8tPmdsb2JhbHMudW5jaGVja2Vk
QXBwZW5kKFdURk1vdmUoZ2xvYmFsKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsgfTsKLX0KLQot
YXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlRXhwb3J0KCkgLT4gUGFydGlhbFJlc3VsdAotewotICAg
IHVpbnQzMl90IGV4cG9ydENvdW50OwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFy
VUludDMyKGV4cG9ydENvdW50KSwgImNhbid0IGdldCBFeHBvcnQgc2VjdGlvbidzIGNvdW50Iik7
Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRihleHBvcnRDb3VudCA+IG1heEV4cG9ydHMsICJFeHBv
cnQgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgZXhwb3J0Q291bnQsICIgbWF4aW11bSAi
LCBtYXhFeHBvcnRzKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmV4cG9ydHMu
dHJ5UmVzZXJ2ZUNhcGFjaXR5KGV4cG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBt
ZW1vcnkgZm9yICIsIGV4cG9ydENvdW50LCAiIGV4cG9ydHMiKTsKLQotICAgIEhhc2hTZXQ8U3Ry
aW5nPiBleHBvcnROYW1lczsKLSAgICBmb3IgKHVpbnQzMl90IGV4cG9ydE51bWJlciA9IDA7IGV4
cG9ydE51bWJlciA8IGV4cG9ydENvdW50OyArK2V4cG9ydE51bWJlcikgewotICAgICAgICB1aW50
MzJfdCBmaWVsZExlbjsKLSAgICAgICAgTmFtZSBmaWVsZFN0cmluZzsKLSAgICAgICAgRXh0ZXJu
YWxLaW5kIGtpbmQ7Ci0gICAgICAgIHVuc2lnbmVkIGtpbmRJbmRleDsKLQotICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihmaWVsZExlbiksICJjYW4ndCBnZXQgIiwg
ZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0J3MgZmllbGQgbmFtZSBsZW5ndGgiKTsKLSAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighY29uc3VtZVVURjhTdHJpbmcoZmllbGRTdHJpbmcsIGZpZWxk
TGVuKSwgImNhbid0IGdldCAiLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQncyBmaWVsZCBuYW1l
IG9mIGxlbmd0aCAiLCBmaWVsZExlbik7Ci0gICAgICAgIFN0cmluZyBmaWVsZE5hbWUgPSBTdHJp
bmc6OmZyb21VVEY4KGZpZWxkU3RyaW5nKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihl
eHBvcnROYW1lcy5jb250YWlucyhmaWVsZE5hbWUpLCAiZHVwbGljYXRlIGV4cG9ydDogJyIsIGZp
ZWxkU3RyaW5nLCAiJyIpOwotICAgICAgICBleHBvcnROYW1lcy5hZGQoZmllbGROYW1lKTsKLQot
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUV4dGVybmFsS2luZChraW5kKSwgImNh
bid0IGdldCAiLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQncyBraW5kLCBuYW1lZCAnIiwgZmll
bGRTdHJpbmcsICInIik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUlu
dDMyKGtpbmRJbmRleCksICJjYW4ndCBnZXQgIiwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0J3Mg
a2luZCBpbmRleCwgbmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOwotICAgICAgICBzd2l0Y2gg
KGtpbmQpIHsKLSAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6OkZ1bmN0aW9uOiB7Ci0gICAgICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGtpbmRJbmRleCA+PSBtX2luZm8tPmZ1bmN0aW9uSW5k
ZXhTcGFjZVNpemUoKSwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0IGhhcyBpbnZhbGlkIGZ1bmN0
aW9uIG51bWJlciAiLCBraW5kSW5kZXgsICIgaXQgZXhjZWVkcyB0aGUgZnVuY3Rpb24gaW5kZXgg
c3BhY2UgIiwgbV9pbmZvLT5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCksICIsIG5hbWVkICciLCBm
aWVsZFN0cmluZywgIiciKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgRXh0ZXJuYWxLaW5kOjpUYWJsZTogewotICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRihraW5kSW5kZXggPj0gbV90YWJsZUNvdW50LCAiY2FuJ3QgZXhwb3J0IFRhYmxlICIsIGtp
bmRJbmRleCwgIiB0aGVyZSBhcmUgIiwgbV90YWJsZUNvdW50LCAiIFRhYmxlcyIpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6Ok1lbW9y
eTogewotICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5tZW1vcnksICJj
YW4ndCBleHBvcnQgYSBub24tZXhpc3RlbnQgTWVtb3J5Iik7Ci0gICAgICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKGtpbmRJbmRleCwgImNhbid0IGV4cG9ydCBNZW1vcnkgIiwga2luZEluZGV4
LCAiIG9ubHkgb25lIFRhYmxlIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQiKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpHbG9iYWw6IHsK
LSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoa2luZEluZGV4ID49IG1faW5mby0+Z2xv
YmFscy5zaXplKCksIGV4cG9ydE51bWJlciwgInRoIEV4cG9ydCBoYXMgaW52YWxpZCBnbG9iYWwg
bnVtYmVyICIsIGtpbmRJbmRleCwgIiBpdCBleGNlZWRzIHRoZSBnbG9iYWxzIGNvdW50ICIsIG1f
aW5mby0+Z2xvYmFscy5zaXplKCksICIsIG5hbWVkICciLCBmaWVsZFN0cmluZywgIiciKTsKLSAg
ICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9pbmZvLT5nbG9iYWxzW2tpbmRJbmRleF0u
bXV0YWJpbGl0eSAhPSBHbG9iYWw6OkltbXV0YWJsZSwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0
IGlzbid0IGltbXV0YWJsZSwgbmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIG1faW5mby0+ZXhwb3J0
cy51bmNoZWNrZWRBcHBlbmQoeyBXVEZNb3ZlKGZpZWxkU3RyaW5nKSwga2luZCwga2luZEluZGV4
IH0pOwotICAgIH0KLQotICAgIHJldHVybiB7IH07Ci19Ci0KLWF1dG8gTW9kdWxlUGFyc2VyOjpw
YXJzZVN0YXJ0KCkgLT4gUGFydGlhbFJlc3VsdAotewotICAgIHVpbnQzMl90IHN0YXJ0RnVuY3Rp
b25JbmRleDsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihzdGFydEZ1
bmN0aW9uSW5kZXgpLCAiY2FuJ3QgZ2V0IFN0YXJ0IGluZGV4Iik7Ci0gICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihzdGFydEZ1bmN0aW9uSW5kZXggPj0gbV9pbmZvLT5mdW5jdGlvbkluZGV4U3BhY2VT
aXplKCksICJTdGFydCBpbmRleCAiLCBzdGFydEZ1bmN0aW9uSW5kZXgsICIgZXhjZWVkcyBmdW5j
dGlvbiBpbmRleCBzcGFjZSAiLCBtX2luZm8tPmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7Ci0g
ICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX2luZm8tPnNpZ25hdHVyZUluZGV4
RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXgpOwotICAgIGNvbnN0IFNp
Z25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJ
bmRleCk7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRihzaWduYXR1cmUuYXJndW1lbnRDb3VudCgp
LCAiU3RhcnQgZnVuY3Rpb24gY2FuJ3QgaGF2ZSBhcmd1bWVudHMiKTsKLSAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKHNpZ25hdHVyZS5yZXR1cm5UeXBlKCkgIT0gVm9pZCwgIlN0YXJ0IGZ1bmN0aW9u
IGNhbid0IHJldHVybiBhIHZhbHVlIik7Ci0gICAgbV9pbmZvLT5zdGFydEZ1bmN0aW9uSW5kZXhT
cGFjZSA9IHN0YXJ0RnVuY3Rpb25JbmRleDsKLSAgICByZXR1cm4geyB9OwotfQotCi1hdXRvIE1v
ZHVsZVBhcnNlcjo6cGFyc2VFbGVtZW50KCkgLT4gUGFydGlhbFJlc3VsdAotewotICAgIHVpbnQz
Ml90IGVsZW1lbnRDb3VudDsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQz
MihlbGVtZW50Q291bnQpLCAiY2FuJ3QgZ2V0IEVsZW1lbnQgc2VjdGlvbidzIGNvdW50Iik7Ci0g
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihlbGVtZW50Q291bnQgPiBtYXhUYWJsZUVudHJpZXMsICJF
bGVtZW50IHNlY3Rpb24ncyBjb3VudCBpcyB0b28gYmlnICIsIGVsZW1lbnRDb3VudCwgIiBtYXhp
bXVtICIsIG1heFRhYmxlRW50cmllcyk7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZv
LT5lbGVtZW50cy50cnlSZXNlcnZlQ2FwYWNpdHkoZWxlbWVudENvdW50KSwgImNhbid0IGFsbG9j
YXRlIG1lbW9yeSBmb3IgIiwgZWxlbWVudENvdW50LCAiIEVsZW1lbnRzIik7Ci0gICAgZm9yICh1
bnNpZ25lZCBlbGVtZW50TnVtID0gMDsgZWxlbWVudE51bSA8IGVsZW1lbnRDb3VudDsgKytlbGVt
ZW50TnVtKSB7Ci0gICAgICAgIHVpbnQzMl90IHRhYmxlSW5kZXg7Ci0gICAgICAgIHVpbnQ2NF90
IGluaXRFeHByQml0czsKLSAgICAgICAgdWludDhfdCBpbml0T3Bjb2RlOwotICAgICAgICB1aW50
MzJfdCBpbmRleENvdW50OwotCi0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFy
VUludDMyKHRhYmxlSW5kZXgpLCAiY2FuJ3QgZ2V0ICIsIGVsZW1lbnROdW0sICJ0aCBFbGVtZW50
IHRhYmxlIGluZGV4Iik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYodGFibGVJbmRleCA+
PSBtX3RhYmxlQ291bnQsICJFbGVtZW50IHNlY3Rpb24gZm9yIFRhYmxlICIsIHRhYmxlSW5kZXgs
ICIgZXhjZWVkcyBhdmFpbGFibGUgVGFibGUgIiwgbV90YWJsZUNvdW50KTsKLSAgICAgICAgVHlw
ZSBpbml0RXhwclR5cGU7Ci0gICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VJ
bml0RXhwcihpbml0T3Bjb2RlLCBpbml0RXhwckJpdHMsIGluaXRFeHByVHlwZSkpOwotICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluaXRFeHByVHlwZSAhPSBJMzIsICJFbGVtZW50IGluaXRf
ZXhwciBtdXN0IHByb2R1Y2UgYW4gaTMyIik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlVmFyVUludDMyKGluZGV4Q291bnQpLCAiY2FuJ3QgZ2V0ICIsIGVsZW1lbnROdW0sICJ0
aCBpbmRleCBjb3VudCBmb3IgRWxlbWVudCBzZWN0aW9uIik7Ci0gICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoaW5kZXhDb3VudCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4
KCksICJFbGVtZW50IHNlY3Rpb24ncyAiLCBlbGVtZW50TnVtLCAidGggaW5kZXggY291bnQgaXMg
dG9vIGJpZyAiLCBpbmRleENvdW50KTsKLQotICAgICAgICBBU1NFUlQoISFtX2luZm8tPnRhYmxl
SW5mb3JtYXRpb24pOwotCi0gICAgICAgIEVsZW1lbnQgZWxlbWVudChtYWtlSTMySW5pdEV4cHIo
aW5pdE9wY29kZSwgaW5pdEV4cHJCaXRzKSk7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IWVsZW1lbnQuZnVuY3Rpb25JbmRpY2VzLnRyeVJlc2VydmVDYXBhY2l0eShpbmRleENvdW50KSwg
ImNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgIiwgaW5kZXhDb3VudCwgIiBFbGVtZW50IGluZGlj
ZXMiKTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBpbmRleENv
dW50OyArK2luZGV4KSB7Ci0gICAgICAgICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4OwotICAg
ICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZnVuY3Rpb25JbmRl
eCksICJjYW4ndCBnZXQgRWxlbWVudCBzZWN0aW9uJ3MgIiwgZWxlbWVudE51bSwgInRoIGVsZW1l
bnQncyAiLCBpbmRleCwgInRoIGluZGV4Iik7Ci0gICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKGZ1bmN0aW9uSW5kZXggPj0gbV9pbmZvLT5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCksICJF
bGVtZW50IHNlY3Rpb24ncyAiLCBlbGVtZW50TnVtLCAidGggZWxlbWVudCdzICIsIGluZGV4LCAi
dGggaW5kZXggaXMgIiwgZnVuY3Rpb25JbmRleCwgIiB3aGljaCBleGNlZWRzIHRoZSBmdW5jdGlv
biBpbmRleCBzcGFjZSBzaXplIG9mICIsIG1faW5mby0+ZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgp
KTsKLQotICAgICAgICAgICAgZWxlbWVudC5mdW5jdGlvbkluZGljZXMudW5jaGVja2VkQXBwZW5k
KGZ1bmN0aW9uSW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9pbmZvLT5lbGVtZW50cy51
bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShlbGVtZW50KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsg
fTsKLX0KLQotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlQ29kZSgpIC0+IFBhcnRpYWxSZXN1bHQK
LXsKLSAgICB1aW50MzJfdCBjb3VudDsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZh
clVJbnQzMihjb3VudCksICJjYW4ndCBnZXQgQ29kZSBzZWN0aW9uJ3MgY291bnQiKTsKLSAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKGNvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+
OjptYXgoKSwgIkNvZGUgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgY291bnQpOwotICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoY291bnQgIT0gbV9pbmZvLT5mdW5jdGlvbkxvY2F0aW9uSW5C
aW5hcnkuc2l6ZSgpLCAiQ29kZSBzZWN0aW9uIGNvdW50ICIsIGNvdW50LCAiIGV4Y2VlZHMgdGhl
IGRlY2xhcmVkIG51bWJlciBvZiBmdW5jdGlvbnMgIiwgbV9pbmZvLT5mdW5jdGlvbkxvY2F0aW9u
SW5CaW5hcnkuc2l6ZSgpKTsKLQotICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsg
KytpKSB7Ci0gICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uU2l6ZTsKLSAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZnVuY3Rpb25TaXplKSwgImNhbid0IGdldCAiLCBp
LCAidGggQ29kZSBmdW5jdGlvbidzIHNpemUiKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RihmdW5jdGlvblNpemUgPiBsZW5ndGgoKSwgIkNvZGUgZnVuY3Rpb24ncyBzaXplICIsIGZ1bmN0
aW9uU2l6ZSwgIiBleGNlZWRzIHRoZSBtb2R1bGUncyBzaXplICIsIGxlbmd0aCgpKTsKLSAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvblNpemUgPiBsZW5ndGgoKSAtIG1fb2Zmc2V0
LCAiQ29kZSBmdW5jdGlvbidzIHNpemUgIiwgZnVuY3Rpb25TaXplLCAiIGV4Y2VlZHMgdGhlIG1v
ZHVsZSdzIHJlbWFpbmluZyBzaXplIiwgbGVuZ3RoKCkgLSBtX29mZnNldCk7Ci0gICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25TaXplID4gbWF4RnVuY3Rpb25TaXplLCAiQ29kZSBm
dW5jdGlvbidzIHNpemUgIiwgZnVuY3Rpb25TaXplLCAiIGlzIHRvbyBiaWciKTsKLQotICAgICAg
ICBtX2luZm8tPmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtpXS5zdGFydCA9IG1fb2Zmc2V0Owot
ICAgICAgICBtX2luZm8tPmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtpXS5lbmQgPSBtX29mZnNl
dCArIGZ1bmN0aW9uU2l6ZTsKLSAgICAgICAgbV9vZmZzZXQgPSBtX2luZm8tPmZ1bmN0aW9uTG9j
YXRpb25JbkJpbmFyeVtpXS5lbmQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsgfTsKLX0KLQotYXV0
byBNb2R1bGVQYXJzZXI6OnBhcnNlSW5pdEV4cHIodWludDhfdCYgb3Bjb2RlLCB1aW50NjRfdCYg
Yml0c09ySW1wb3J0TnVtYmVyLCBUeXBlJiByZXN1bHRUeXBlKSAtPiBQYXJ0aWFsUmVzdWx0Ci17
Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VVSW50OChvcGNvZGUpLCAiY2FuJ3QgZ2V0
IGluaXRfZXhwcidzIG9wY29kZSIpOwotCi0gICAgc3dpdGNoIChvcGNvZGUpIHsKLSAgICBjYXNl
IEkzMkNvbnN0OiB7Ci0gICAgICAgIGludDMyX3QgY29uc3RhbnQ7Ci0gICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIXBhcnNlVmFySW50MzIoY29uc3RhbnQpLCAiY2FuJ3QgZ2V0IGNvbnN0YW50
IHZhbHVlIGZvciBpbml0X2V4cHIncyBpMzIuY29uc3QiKTsKLSAgICAgICAgYml0c09ySW1wb3J0
TnVtYmVyID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGNvbnN0YW50KTsKLSAgICAgICAgcmVzdWx0
VHlwZSA9IEkzMjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBJNjRDb25zdDog
ewotICAgICAgICBpbnQ2NF90IGNvbnN0YW50OwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFwYXJzZVZhckludDY0KGNvbnN0YW50KSwgImNhbid0IGdldCBjb25zdGFudCB2YWx1ZSBmb3Ig
aW5pdF9leHByJ3MgaTY0LmNvbnN0Iik7Ci0gICAgICAgIGJpdHNPckltcG9ydE51bWJlciA9IGNv
bnN0YW50OwotICAgICAgICByZXN1bHRUeXBlID0gSTY0OwotICAgICAgICBicmVhazsKLSAgICB9
Ci0KLSAgICBjYXNlIEYzMkNvbnN0OiB7Ci0gICAgICAgIHVpbnQzMl90IGNvbnN0YW50OwotICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQzMihjb25zdGFudCksICJjYW4ndCBn
ZXQgY29uc3RhbnQgdmFsdWUgZm9yIGluaXRfZXhwcidzIGYzMi5jb25zdCIpOwotICAgICAgICBi
aXRzT3JJbXBvcnROdW1iZXIgPSBjb25zdGFudDsKLSAgICAgICAgcmVzdWx0VHlwZSA9IEYzMjsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBGNjRDb25zdDogewotICAgICAgICB1
aW50NjRfdCBjb25zdGFudDsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VVSW50
NjQoY29uc3RhbnQpLCAiY2FuJ3QgZ2V0IGNvbnN0YW50IHZhbHVlIGZvciBpbml0X2V4cHIncyBm
NjQuY29uc3QiKTsKLSAgICAgICAgYml0c09ySW1wb3J0TnVtYmVyID0gY29uc3RhbnQ7Ci0gICAg
ICAgIHJlc3VsdFR5cGUgPSBGNjQ7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2Ug
R2V0R2xvYmFsOiB7Ci0gICAgICAgIHVpbnQzMl90IGluZGV4OwotICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbmRleCksICJjYW4ndCBnZXQgZ2V0X2dsb2JhbCdz
IGluZGV4Iik7Ci0KLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbmRleCA+PSBtX2luZm8t
Pmdsb2JhbHMuc2l6ZSgpLCAiZ2V0X2dsb2JhbCdzIGluZGV4ICIsIGluZGV4LCAiIGV4Y2VlZHMg
dGhlIG51bWJlciBvZiBnbG9iYWxzICIsIG1faW5mby0+Z2xvYmFscy5zaXplKCkpOwotICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluZGV4ID49IG1faW5mby0+Zmlyc3RJbnRlcm5hbEdsb2Jh
bCwgImdldF9nbG9iYWwgaW1wb3J0IGtpbmQgaW5kZXggIiwgaW5kZXgsICIgZXhjZWVkcyB0aGUg
Zmlyc3QgaW50ZXJuYWwgZ2xvYmFsICIsIG1faW5mby0+Zmlyc3RJbnRlcm5hbEdsb2JhbCk7Ci0K
LSAgICAgICAgQVNTRVJUKG1faW5mby0+Z2xvYmFsc1tpbmRleF0ubXV0YWJpbGl0eSA9PSBHbG9i
YWw6OkltbXV0YWJsZSk7Ci0gICAgICAgIHJlc3VsdFR5cGUgPSBtX2luZm8tPmdsb2JhbHNbaW5k
ZXhdLnR5cGU7Ci0gICAgICAgIGJpdHNPckltcG9ydE51bWJlciA9IGluZGV4OwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KHRydWUsICJ1bmtub3duIGluaXRfZXhwciBvcGNvZGUgIiwgb3Bjb2RlKTsKLSAgICB9Ci0KLSAg
ICB1aW50OF90IGVuZE9wY29kZTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ4
KGVuZE9wY29kZSksICJjYW4ndCBnZXQgaW5pdF9leHByJ3MgZW5kIG9wY29kZSIpOwotICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoZW5kT3Bjb2RlICE9IE9wVHlwZTo6RW5kLCAiaW5pdF9leHByIHNo
b3VsZCBlbmQgd2l0aCBlbmQsIGVuZGVkIHdpdGggIiwgZW5kT3Bjb2RlKTsKLQotICAgIHJldHVy
biB7IH07Ci19Ci0KLWF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZUdsb2JhbFR5cGUoR2xvYmFsJiBn
bG9iYWwpIC0+IFBhcnRpYWxSZXN1bHQKLXsKLSAgICB1aW50OF90IG11dGFiaWxpdHk7Ci0gICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYWx1ZVR5cGUoZ2xvYmFsLnR5cGUpLCAiY2FuJ3Qg
Z2V0IEdsb2JhbCdzIHZhbHVlIHR5cGUiKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJz
ZVZhclVJbnQxKG11dGFiaWxpdHkpLCAiY2FuJ3QgZ2V0IEdsb2JhbCB0eXBlJ3MgbXV0YWJpbGl0
eSIpOwotICAgIGdsb2JhbC5tdXRhYmlsaXR5ID0gc3RhdGljX2Nhc3Q8R2xvYmFsOjpNdXRhYmls
aXR5PihtdXRhYmlsaXR5KTsKLSAgICByZXR1cm4geyB9OwotfQotCi1hdXRvIE1vZHVsZVBhcnNl
cjo6cGFyc2VEYXRhKCkgLT4gUGFydGlhbFJlc3VsdAotewotICAgIHVpbnQzMl90IHNlZ21lbnRD
b3VudDsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihzZWdtZW50Q291
bnQpLCAiY2FuJ3QgZ2V0IERhdGEgc2VjdGlvbidzIGNvdW50Iik7Ci0gICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihzZWdtZW50Q291bnQgPiBtYXhEYXRhU2VnbWVudHMsICJEYXRhIHNlY3Rpb24ncyBj
b3VudCBpcyB0b28gYmlnICIsIHNlZ21lbnRDb3VudCwgIiBtYXhpbXVtICIsIG1heERhdGFTZWdt
ZW50cyk7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5kYXRhLnRyeVJlc2VydmVD
YXBhY2l0eShzZWdtZW50Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3Ig
RGF0YSBzZWN0aW9uJ3MgIiwgc2VnbWVudENvdW50LCAiIHNlZ21lbnRzIik7Ci0KLSAgICBmb3Ig
KHVpbnQzMl90IHNlZ21lbnROdW1iZXIgPSAwOyBzZWdtZW50TnVtYmVyIDwgc2VnbWVudENvdW50
OyArK3NlZ21lbnROdW1iZXIpIHsKLSAgICAgICAgdWludDMyX3QgbWVtb3J5SW5kZXg7Ci0gICAg
ICAgIHVpbnQ2NF90IGluaXRFeHByQml0czsKLSAgICAgICAgdWludDhfdCBpbml0T3Bjb2RlOwot
ICAgICAgICB1aW50MzJfdCBkYXRhQnl0ZUxlbmd0aDsKLQotICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFwYXJzZVZhclVJbnQzMihtZW1vcnlJbmRleCksICJjYW4ndCBnZXQgIiwgc2VnbWVu
dE51bWJlciwgInRoIERhdGEgc2VnbWVudCdzIGluZGV4Iik7Ci0gICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYobWVtb3J5SW5kZXggPj0gbV9tZW1vcnlDb3VudCwgc2VnbWVudE51bWJlciwgInRo
IERhdGEgc2VnbWVudCBoYXMgaW5kZXggIiwgbWVtb3J5SW5kZXgsICIgd2hpY2ggZXhjZWVkcyB0
aGUgbnVtYmVyIG9mIE1lbW9yaWVzICIsIG1fbWVtb3J5Q291bnQpOwotICAgICAgICBUeXBlIGlu
aXRFeHByVHlwZTsKLSAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUluaXRF
eHByKGluaXRPcGNvZGUsIGluaXRFeHByQml0cywgaW5pdEV4cHJUeXBlKSk7Ci0gICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoaW5pdEV4cHJUeXBlICE9IEkzMiwgc2VnbWVudE51bWJlciwgInRo
IERhdGEgc2VnbWVudCdzIGluaXRfZXhwciBtdXN0IHByb2R1Y2UgYW4gaTMyIik7Ci0gICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGRhdGFCeXRlTGVuZ3RoKSwgImNh
bid0IGdldCAiLCBzZWdtZW50TnVtYmVyLCAidGggRGF0YSBzZWdtZW50J3MgZGF0YSBieXRlIGxl
bmd0aCIpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGRhdGFCeXRlTGVuZ3RoID4gbWF4
TW9kdWxlU2l6ZSwgc2VnbWVudE51bWJlciwgInRoIERhdGEgc2VnbWVudCdzIGRhdGEgYnl0ZSBs
ZW5ndGggaXMgdG9vIGJpZyAiLCBkYXRhQnl0ZUxlbmd0aCwgIiBtYXhpbXVtICIsIG1heE1vZHVs
ZVNpemUpOwotCi0gICAgICAgIFNlZ21lbnQqIHNlZ21lbnQgPSBTZWdtZW50OjpjcmVhdGUobWFr
ZUkzMkluaXRFeHByKGluaXRPcGNvZGUsIGluaXRFeHByQml0cyksIGRhdGFCeXRlTGVuZ3RoKTsK
LSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighc2VnbWVudCwgImNhbid0IGFsbG9jYXRlIGVu
b3VnaCBtZW1vcnkgZm9yICIsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQgb2Ygc2l6
ZSAiLCBkYXRhQnl0ZUxlbmd0aCk7Ci0gICAgICAgIG1faW5mby0+ZGF0YS51bmNoZWNrZWRBcHBl
bmQoU2VnbWVudDo6YWRvcHRQdHIoc2VnbWVudCkpOwotICAgICAgICBmb3IgKHVpbnQzMl90IGRh
dGFCeXRlID0gMDsgZGF0YUJ5dGUgPCBkYXRhQnl0ZUxlbmd0aDsgKytkYXRhQnl0ZSkgewotICAg
ICAgICAgICAgdWludDhfdCBieXRlOwotICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
cGFyc2VVSW50OChieXRlKSwgImNhbid0IGdldCAiLCBkYXRhQnl0ZSwgInRoIGRhdGEgYnl0ZSBm
cm9tICIsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQiKTsKLSAgICAgICAgICAgIHNl
Z21lbnQtPmJ5dGUoZGF0YUJ5dGUpID0gYnl0ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1
cm4geyB9OwotfQotICAgIAotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlQ3VzdG9tKHVpbnQzMl90
IHNlY3Rpb25MZW5ndGgpIC0+IFBhcnRpYWxSZXN1bHQKLXsKLSAgICBjb25zdCB1aW50MzJfdCBj
dXN0b21TZWN0aW9uU3RhcnRPZmZzZXQgPSBtX29mZnNldDsKLQotICAgIEN1c3RvbVNlY3Rpb24g
c2VjdGlvbjsKLSAgICB1aW50MzJfdCBjdXN0b21TZWN0aW9uTnVtYmVyID0gbV9pbmZvLT5jdXN0
b21TZWN0aW9ucy5zaXplKCkgKyAxOwotICAgIHVpbnQzMl90IG5hbWVMZW47Ci0gICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighbV9pbmZvLT5jdXN0b21TZWN0aW9ucy50cnlSZXNlcnZlQ2FwYWNpdHko
Y3VzdG9tU2VjdGlvbk51bWJlciksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAi
LCBjdXN0b21TZWN0aW9uTnVtYmVyLCAidGggY3VzdG9tIHNlY3Rpb24iKTsKLSAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihuYW1lTGVuKSwgImNhbid0IGdldCAiLCBjdXN0
b21TZWN0aW9uTnVtYmVyLCAidGggY3VzdG9tIHNlY3Rpb24ncyBuYW1lIGxlbmd0aCIpOwotICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVVVEY4U3RyaW5nKHNlY3Rpb24ubmFtZSwgbmFt
ZUxlbiksICJuYW1lTGVuIGdldCAiLCBjdXN0b21TZWN0aW9uTnVtYmVyLCAidGggY3VzdG9tIHNl
Y3Rpb24ncyBuYW1lIG9mIGxlbmd0aCAiLCBuYW1lTGVuKTsKLQotICAgIHVpbnQzMl90IHBheWxv
YWRCeXRlcyA9IHNlY3Rpb25MZW5ndGggLSAobV9vZmZzZXQgLSBjdXN0b21TZWN0aW9uU3RhcnRP
ZmZzZXQpOwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXNlY3Rpb24ucGF5bG9hZC50cnlSZXNl
cnZlQ2FwYWNpdHkocGF5bG9hZEJ5dGVzKSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkg
Zm9yICIsIGN1c3RvbVNlY3Rpb25OdW1iZXIsICJ0aCBjdXN0b20gc2VjdGlvbidzICIsIHBheWxv
YWRCeXRlcywgIiBieXRlcyIpOwotICAgIGZvciAodWludDMyX3QgYnl0ZU51bWJlciA9IDA7IGJ5
dGVOdW1iZXIgPCBwYXlsb2FkQnl0ZXM7ICsrYnl0ZU51bWJlcikgewotICAgICAgICB1aW50OF90
IGJ5dGU7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUludDgoYnl0ZSksICJj
YW4ndCBnZXQgIiwgYnl0ZU51bWJlciwgInRoIGRhdGEgYnl0ZSBmcm9tICIsIGN1c3RvbVNlY3Rp
b25OdW1iZXIsICJ0aCBjdXN0b20gc2VjdGlvbiIpOwotICAgICAgICBzZWN0aW9uLnBheWxvYWQu
dW5jaGVja2VkQXBwZW5kKGJ5dGUpOwotICAgIH0KLQotICAgIE5hbWUgbmFtZU5hbWUgPSB7ICdu
JywgJ2EnLCAnbScsICdlJyB9OwotICAgIGlmIChzZWN0aW9uLm5hbWUgPT0gbmFtZU5hbWUpIHsK
LSAgICAgICAgTmFtZVNlY3Rpb25QYXJzZXIgbmFtZVNlY3Rpb25QYXJzZXIoc2VjdGlvbi5wYXls
b2FkLmJlZ2luKCksIHNlY3Rpb24ucGF5bG9hZC5zaXplKCksIG1faW5mbyk7Ci0gICAgICAgIGlm
IChhdXRvIG5hbWVTZWN0aW9uID0gbmFtZVNlY3Rpb25QYXJzZXIucGFyc2UoKSkKLSAgICAgICAg
ICAgIG1faW5mby0+bmFtZVNlY3Rpb24gPSBXVEZNb3ZlKCpuYW1lU2VjdGlvbik7Ci0gICAgfQot
Ci0gICAgbV9pbmZvLT5jdXN0b21TZWN0aW9ucy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShzZWN0
aW9uKSk7Ci0KLSAgICByZXR1cm4geyB9OwotfQotCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2Fz
bQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oCmluZGV4IGE2NTFiZTE3Y2UyM2I4NWZiYjk3YmJi
Njg1NzAzYjM5YjY0YjcyYzQuLjJlOWY2ODdiYTNjMGM5MDhjOTQwYjYwZGJkMmJlZWE4YTQzM2E3
MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJz
ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgK
QEAgLTQ2LDE4ICs0Niw2IEBAIGNsYXNzIE1vZHVsZVBhcnNlciA6IHB1YmxpYyBQYXJzZXI8dm9p
ZD4gewogICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2UoKTsKIAogcHJpdmF0ZToK
LQotI2RlZmluZSBXQVNNX1NFQ1RJT05fREVDTEFSRV9QQVJTRVIoTkFNRSwgSUQsIERFU0NSSVBU
SU9OKSBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZSAjIyBOQU1FKCk7Ci0g
ICAgRk9SX0VBQ0hfS05PV05fV0FTTV9TRUNUSU9OKFdBU01fU0VDVElPTl9ERUNMQVJFX1BBUlNF
UikKLSN1bmRlZiBXQVNNX1NFQ1RJT05fREVDTEFSRV9QQVJTRVIKLQotICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlQ3VzdG9tKHVpbnQzMl90KTsKLSAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUdsb2JhbFR5cGUoR2xvYmFsJik7Ci0gICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VNZW1vcnlIZWxwZXIoYm9vbCBp
c0ltcG9ydCk7Ci0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VUYWJs
ZUhlbHBlcihib29sIGlzSW1wb3J0KTsKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBwYXJzZVJlc2l6YWJsZUxpbWl0cyh1aW50MzJfdCYgaW5pdGlhbCwgc3RkOjpvcHRpb25h
bDx1aW50MzJfdD4mIG1heGltdW0pOwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIHBhcnNlSW5pdEV4cHIodWludDhfdCYsIHVpbnQ2NF90JiwgVHlwZSYgaW5pdEV4cHJUeXBl
KTsKLQogICAgIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4gbV9pbmZvOwogICAgIHVpbnQzMl90IG1f
bWVtb3J5Q291bnQgeyAwIH07CiAgICAgdWludDMyX3QgbV90YWJsZUNvdW50IHsgMCB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU5hbWVTZWN0aW9uLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTmFtZVNlY3Rpb24uaAppbmRleCA3YzAyZjJm
NDE5NzcwNWFjOGJlZWVmNDQxODk5MGQyOGVlMzRmMDg0Li5mZTYzY2Y1NTQ3MzY2ZmMxNzQwYzFm
MGM3MGJhODFiZTc1MzZhODhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTmFtZVNlY3Rpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TmFtZVNlY3Rpb24uaApAQCAtMzYsMTEgKzM2LDIwIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgV2FzbSB7CiAKIHN0cnVjdCBOYW1lU2VjdGlvbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxOYW1lU2VjdGlvbj4gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE5hbWVTZWN0aW9u
KTsKLQogcHVibGljOgotICAgIE5hbWVTZWN0aW9uKGNvbnN0IHN0ZDo6b3B0aW9uYWw8Q1N0cmlu
Zz4gJmhhc2gpCi0gICAgICAgIDogbW9kdWxlSGFzaChoYXNoID8gaGFzaC0+bGVuZ3RoKCkgOiAz
KQorICAgIE5hbWVTZWN0aW9uKCkKKyAgICB7CisgICAgICAgIHNldEhhc2goc3RkOjpudWxsb3B0
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgUmVmPE5hbWVTZWN0aW9uPiBjcmVhdGUoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmFtZVNlY3Rpb24pOworICAgIH0KKworICAg
IHZvaWQgc2V0SGFzaChjb25zdCBzdGQ6Om9wdGlvbmFsPENTdHJpbmc+ICZoYXNoKQogICAgIHsK
KyAgICAgICAgbW9kdWxlSGFzaCA9IE5hbWUoaGFzaCA/IGhhc2gtPmxlbmd0aCgpIDogMyk7CiAg
ICAgICAgIGlmIChoYXNoKSB7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGhh
c2gtPmxlbmd0aCgpOyArK2kpCiAgICAgICAgICAgICAgICAgbW9kdWxlSGFzaFtpXSA9IHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KCooaGFzaC0+ZGF0YSgpICsgaSkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21OYW1lU2VjdGlvblBhcnNlci5jcHAKaW5kZXggNzMzOTYy
MTVjZjU4YmM1MjZiMzQ4Y2MwYTg4YzcxM2Q0ZGVjNTk3Ny4uYzdmZTg4NGMzMjM0YWJhYWM1ZWJh
N2M4OTQ2NTQ4OWNkODIyZjI5MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTmFtZVNlY3Rpb25QYXJzZXIuY3BwCkBAIC0zNSw3ICszNSw3IEBAIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKIGF1dG8gTmFtZVNlY3Rpb25QYXJzZXI6OnBhcnNl
KCkgLT4gUmVzdWx0CiB7Ci0gICAgUmVmUHRyPE5hbWVTZWN0aW9uPiBuYW1lU2VjdGlvbihhZG9w
dFJlZigqbmV3IE5hbWVTZWN0aW9uKG1faW5mby5oYXNoKSkpOworICAgIFJlZjxOYW1lU2VjdGlv
bj4gbmFtZVNlY3Rpb24gPSBOYW1lU2VjdGlvbjo6Y3JlYXRlKCk7CiAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighbmFtZVNlY3Rpb24tPmZ1bmN0aW9uTmFtZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KG1f
aW5mby5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCkpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1l
bW9yeSBmb3IgZnVuY3Rpb24gbmFtZXMiKTsKICAgICBuYW1lU2VjdGlvbi0+ZnVuY3Rpb25OYW1l
cy5yZXNpemUobV9pbmZvLmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21OYW1lU2VjdGlvblBhcnNlci5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmgKaW5kZXggYjdh
ZjBkOWI5MGE2ZDUyNmU5MmQ0ZDgyNGZlZWRiNDRkNTk4NzY4My4uZDhlNmFlNzFiMjZiNGJlY2M4
Yjg4OGJiZmQ1ZWIyNzk4NWM2ZDIxOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmgKQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAotY2xhc3MgTmFtZVNlY3Rpb25QYXJzZXIgOiBw
dWJsaWMgUGFyc2VyPFJlZlB0cjxOYW1lU2VjdGlvbj4+IHsKK2NsYXNzIE5hbWVTZWN0aW9uUGFy
c2VyIDogcHVibGljIFBhcnNlcjxSZWY8TmFtZVNlY3Rpb24+PiB7CiBwdWJsaWM6CiAgICAgTmFt
ZVNlY3Rpb25QYXJzZXIoY29uc3QgdWludDhfdCogc291cmNlQnVmZmVyLCBzaXplX3Qgc291cmNl
TGVuZ3RoLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbykKICAgICAgICAgOiBQYXJzZXIo
c291cmNlQnVmZmVyLCBzb3VyY2VMZW5ndGgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtT01HUGxhbi5jcHAKaW5kZXggNDdkZWFkNjRhZjhmZDVjMzY5OWQyZThmNjQwZWQ4YmViMDQy
MGM5ZC4uOWUwYzRhNTY2NmU0NGUwZWFjYzIzMTJhYmJiNzY1NDUzYjg3OWY0OCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcApAQCAtNjksMjEgKzY5LDE4IEBA
IHZvaWQgT01HUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKIHsKICAgICBBU1NFUlQobV9j
b2RlQmxvY2stPnJ1bm5hYmxlKCkpOwogICAgIEFTU0VSVChtX2NvZGVCbG9jay5wdHIoKSA9PSBt
X21vZHVsZS0+Y29kZUJsb2NrRm9yKG1vZGUoKSkpOwotICAgIGNvbnN0IEZ1bmN0aW9uTG9jYXRp
b25JbkJpbmFyeSYgbG9jYXRpb24gPSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbkxvY2F0
aW9uSW5CaW5hcnlbbV9mdW5jdGlvbkluZGV4XTsKLSAgICBjb25zdCB1aW50OF90KiBmdW5jdGlv
blN0YXJ0ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+c291cmNlLmRhdGEoKSArIGxvY2F0aW9uLnN0
YXJ0OwotICAgIGNvbnN0IHNpemVfdCBmdW5jdGlvbkxlbmd0aCA9IGxvY2F0aW9uLmVuZCAtIGxv
Y2F0aW9uLnN0YXJ0OwotICAgIEFTU0VSVChmdW5jdGlvblN0YXJ0ICsgZnVuY3Rpb25MZW5ndGgg
PD0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+c291cmNlLmVuZCgpKTsKKyAgICBjb25zdCBGdW5jdGlv
bkRhdGEmIGZ1bmN0aW9uID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25zW21fZnVuY3Rp
b25JbmRleF07CiAKICAgICBjb25zdCB1aW50MzJfdCBmdW5jdGlvbkluZGV4U3BhY2UgPSBtX2Z1
bmN0aW9uSW5kZXggKyBtX21vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5pbXBvcnRGdW5jdGlv
bkNvdW50KCk7CiAgICAgQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA8IG1fbW9kdWxlLT5tb2R1
bGVJbmZvcm1hdGlvbigpLmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7CiAKICAgICBTaWduYXR1
cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVu
Y3Rpb25TaWduYXR1cmVJbmRpY2VzW21fZnVuY3Rpb25JbmRleF07CiAgICAgY29uc3QgU2lnbmF0
dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4
KTsKLSAgICBBU1NFUlQodmFsaWRhdGVGdW5jdGlvbihmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxl
bmd0aCwgc2lnbmF0dXJlLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpKSk7CisgICAgQVNTRVJU
KHZhbGlkYXRlRnVuY3Rpb24oZnVuY3Rpb24uZGF0YS5kYXRhKCksIGZ1bmN0aW9uLmRhdGEuc2l6
ZSgpLCBzaWduYXR1cmUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCkpKTsKIAogICAgIFZlY3Rv
cjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiB1bmxpbmtlZENhbGxzOwogICAgIENvbXBpbGF0aW9u
Q29udGV4dCBjb250ZXh0OwotICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VB
bmRDb21waWxlKGNvbnRleHQsIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1
cmUsIHVubGlua2VkQ2FsbHMsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29t
cGlsYXRpb25Nb2RlOjpPTUdNb2RlLCBtX2Z1bmN0aW9uSW5kZXgpOworICAgIGF1dG8gcGFyc2VB
bmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlKGNvbnRleHQsIGZ1bmN0aW9uLmRhdGEu
ZGF0YSgpLCBmdW5jdGlvbi5kYXRhLnNpemUoKSwgc2lnbmF0dXJlLCB1bmxpbmtlZENhbGxzLCBt
X21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6T01HTW9k
ZSwgbV9mdW5jdGlvbkluZGV4KTsKIAogICAgIGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxl
UmVzdWx0KSkgewogICAgICAgICBmYWlsKGhvbGRMb2NrKG1fbG9jayksIG1ha2VTdHJpbmcocGFy
c2VBbmRDb21waWxlUmVzdWx0LmVycm9yKCksICJ3aGVuIHRyeWluZyB0byB0aWVyIHVwICIsIFN0
cmluZzo6bnVtYmVyKG1fZnVuY3Rpb25JbmRleCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21QYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21QYXJzZXIuaAppbmRleCA2NTEwNzA1ZWFmNTc4Y2UzM2UzYmQ3NmIyYmM4MzhhZGRhNWY1
YjAwLi45ZmM0YTQ1NGM5YjcyNmZhMTNlODRhNGI0NzNmZWFkODEyYmI5OWYwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFyc2VyLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhcnNlci5oCkBAIC01OCw2ICs1OCwxMCBAQCBjbGFzcyBQ
YXJzZXIgewogICAgIHR5cGVkZWYgRXhwZWN0ZWQ8dm9pZCwgRXJyb3JUeXBlPiBQYXJ0aWFsUmVz
dWx0OwogICAgIHR5cGVkZWYgRXhwZWN0ZWQ8U3VjY2Vzc1R5cGUsIEVycm9yVHlwZT4gUmVzdWx0
OwogCisgICAgY29uc3QgdWludDhfdCogc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7
IH0KKyAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VMZW5ndGg7IH0K
KyAgICBzaXplX3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKwogcHJvdGVj
dGVkOgogICAgIFBhcnNlcihjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKIApAQCAtODEsMTYgKzg1
LDEzIEBAIGNsYXNzIFBhcnNlciB7CiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VW
YWx1ZVR5cGUoVHlwZSYpOwogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlRXh0ZXJu
YWxLaW5kKEV4dGVybmFsS2luZCYpOwogCi0gICAgY29uc3QgdWludDhfdCogc291cmNlKCkgY29u
c3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KLSAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1
cm4gbV9zb3VyY2VMZW5ndGg7IH0KLQogICAgIHNpemVfdCBtX29mZnNldCA9IDA7CiAKICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uQXJncz4KICAgICBORVZFUl9JTkxJTkUgVW5leHBlY3RlZFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZmFpbChBcmdzLi4uIGFyZ3MpIGNvbnN0CiAgICAgewog
ICAgICAgICB1c2luZyBuYW1lc3BhY2UgRmFpbHVyZUhlbHBlcjsgLy8gU2VlIEFETCBjb21tZW50
IGluIG5hbWVzcGFjZSBhYm92ZS4KLSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRSZXN1bHQobWFr
ZVN0cmluZygiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAiX3MsIFN0
cmluZzo6bnVtYmVyKG1fb2Zmc2V0KSwgIiAvICJfcywgU3RyaW5nOjpudW1iZXIobV9zb3VyY2VM
ZW5ndGgpLCAiOiAiX3MsIG1ha2VTdHJpbmcoYXJncykuLi4pKTsKKyAgICAgICAgcmV0dXJuIFVu
ZXhwZWN0ZWRSZXN1bHQobWFrZVN0cmluZygiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFy
c2UgYXQgYnl0ZSAiX3MsIFN0cmluZzo6bnVtYmVyKG1fb2Zmc2V0KSwgIjogIl9zLCBtYWtlU3Ry
aW5nKGFyZ3MpLi4uKSk7CiAgICAgfQogI2RlZmluZSBXQVNNX1BBUlNFUl9GQUlMX0lGKGNvbmRp
dGlvbiwgLi4uKSBkbyB7IFwKICAgICBpZiAoVU5MSUtFTFkoY29uZGl0aW9uKSkgICAgICAgICAg
ICAgICAgICAgICBcCkBAIC0yODUsNiArMjg2LDE0IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBQYXJz
ZXI8U3VjY2Vzc1R5cGU+OjpwYXJzZUV4dGVybmFsS2luZChFeHRlcm5hbEtpbmQmIHJlc3VsdCkK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorQUxXQVlTX0lOTElORSBJMzJJbml0RXhwciBtYWtlSTMy
SW5pdEV4cHIodWludDhfdCBvcGNvZGUsIHVpbnQzMl90IGJpdHMpCit7CisgICAgUkVMRUFTRV9B
U1NFUlQob3Bjb2RlID09IEkzMkNvbnN0IHx8IG9wY29kZSA9PSBHZXRHbG9iYWwpOworICAgIGlm
IChvcGNvZGUgPT0gSTMyQ29uc3QpCisgICAgICAgIHJldHVybiBJMzJJbml0RXhwcjo6Y29uc3RW
YWx1ZShiaXRzKTsKKyAgICByZXR1cm4gSTMySW5pdEV4cHI6Omdsb2JhbEltcG9ydChiaXRzKTsK
K30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJB
U1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFu
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAppbmRleCBhMzRk
ZWVjYjE2YjE0MGJlYjUzYjg3YzZlMmE3MDM5ODM0OTMwYzJjLi45OTc0ZWNmZTU1YmFmMjg5ZWVj
NTY1MDY2YTFjZDQ5YWUyM2E4MjBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBs
YW4uY3BwCkBAIC01Myw4ICs1Myw2IEBAIFBsYW46OlBsYW4oQ29udGV4dCogY29udGV4dCwgUmVm
PE1vZHVsZUluZm9ybWF0aW9uPiBpbmZvLCBDb21wbGV0aW9uVGFzayYmIHRhc2ssCiAgICAgOiBt
X21vZHVsZUluZm9ybWF0aW9uKFdURk1vdmUoaW5mbykpCiAgICAgLCBtX2NyZWF0ZUVtYmVkZGVy
V3JhcHBlcihXVEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlcikpCiAgICAgLCBtX3Rocm93V2Fz
bUV4Y2VwdGlvbih0aHJvd1dhc21FeGNlcHRpb24pCi0gICAgLCBtX3NvdXJjZShtX21vZHVsZUlu
Zm9ybWF0aW9uLT5zb3VyY2UuZGF0YSgpKQotICAgICwgbV9zb3VyY2VMZW5ndGgobV9tb2R1bGVJ
bmZvcm1hdGlvbi0+c291cmNlLnNpemUoKSkKIHsKICAgICBtX2NvbXBsZXRpb25UYXNrcy5hcHBl
bmQoc3RkOjptYWtlX3BhaXIoY29udGV4dCwgV1RGTW92ZSh0YXNrKSkpOwogfQpAQCAtNjQsMTAg
KzYyLDggQEAgUGxhbjo6UGxhbihDb250ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlSW5mb3JtYXRp
b24+IGluZm8sIENvbXBsZXRpb25UYXNrJiYgdGFzaykKIHsKIH0KIAotUGxhbjo6UGxhbihDb250
ZXh0KiBjb250ZXh0LCBjb25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgs
IENvbXBsZXRpb25UYXNrJiYgdGFzaykKLSAgICA6IG1fbW9kdWxlSW5mb3JtYXRpb24oYWRvcHRS
ZWYoKm5ldyBNb2R1bGVJbmZvcm1hdGlvbihWZWN0b3I8dWludDhfdD4oKSkpKQotICAgICwgbV9z
b3VyY2Uoc291cmNlKQotICAgICwgbV9zb3VyY2VMZW5ndGgoc291cmNlTGVuZ3RoKQorUGxhbjo6
UGxhbihDb250ZXh0KiBjb250ZXh0LCBDb21wbGV0aW9uVGFzayYmIHRhc2spCisgICAgOiBtX21v
ZHVsZUluZm9ybWF0aW9uKE1vZHVsZUluZm9ybWF0aW9uOjpjcmVhdGUoKSkKIHsKICAgICBtX2Nv
bXBsZXRpb25UYXNrcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoY29udGV4dCwgV1RGTW92ZSh0YXNr
KSkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4u
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgKaW5kZXggN2EwN2JmZDNh
MGIwNmU5MzQ0MDk1N2RiMzZkZTZkZGRhZTYzYzY0Yy4uOWVjNjg4NjU4MTMzMWJhY2M5ZjA4ZGQy
NmY5YWFiYjRlOWJkNTNiZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVBsYW4uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCkBA
IC01NCw3ICs1NCw3IEBAIGNsYXNzIFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8
UGxhbj4gewogICAgIFBsYW4oQ29udGV4dCosIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4sIENvbXBs
ZXRpb25UYXNrJiYpOwogCiAgICAgLy8gTm90ZTogVGhpcyBjb25zdHJ1Y3RvciBzaG91bGQgb25s
eSBiZSB1c2VkIGlmIHlvdSBhcmUgbm90IGFjdHVhbGx5IGJ1aWxkaW5nIGEgbW9kdWxlIGUuZy4g
dmFsaWRhdGlvbi9mdW5jdGlvbiB0ZXN0cwotICAgIEpTX0VYUE9SVF9QUklWQVRFIFBsYW4oQ29u
dGV4dCosIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIENvbXBsZXRpb25UYXNrJiYpOworICAgIEpT
X0VYUE9SVF9QUklWQVRFIFBsYW4oQ29udGV4dCosIENvbXBsZXRpb25UYXNrJiYpOwogICAgIHZp
cnR1YWwgSlNfRVhQT1JUX1BSSVZBVEUgflBsYW4oKTsKIAogICAgIC8vIElmIHlvdSBndWFyYW50
ZWUgdGhlIG9yZGVyaW5nIGhlcmUsIHlvdSBjYW4gcmVseSBvbiBGSUZPIG9mIHRoZQpAQCAtOTAs
OCArOTAsNiBAQCBjbGFzcyBQbGFuIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFBsYW4+
IHsKICAgICBDcmVhdGVFbWJlZGRlcldyYXBwZXIgbV9jcmVhdGVFbWJlZGRlcldyYXBwZXI7CiAg
ICAgVGhyb3dXYXNtRXhjZXB0aW9uIG1fdGhyb3dXYXNtRXhjZXB0aW9uIHsgbnVsbHB0ciB9Owog
Ci0gICAgY29uc3QgdWludDhfdCogbV9zb3VyY2U7Ci0gICAgY29uc3Qgc2l6ZV90IG1fc291cmNl
TGVuZ3RoOwogICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsKICAgICBNZW1vcnlNb2RlIG1fbW9k
ZSB7IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nIH07CiAgICAgTG9jayBtX2xvY2s7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOWE5YmFjYjY3ZGVkMjUwNDUzNWQ4YzJkZTVjNWVkODMzZGVmMTYwMgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9uUGFyc2VyLmNw
cApAQCAtMCwwICsxLDU2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2Ug
U3V6dWtpIDx5dXN1a2VzdXp1a2lAc2xvd3N0YXJ0Lm9yZz4uCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
YXNtU2VjdGlvblBhcnNlci5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVk
ZSAiSWRlbnRpZmllcklubGluZXMuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5SW5mb3JtYXRpb24u
aCIKKyNpbmNsdWRlICJXYXNtTmFtZVNlY3Rpb25QYXJzZXIuaCIKKyNpbmNsdWRlICJXYXNtT3Bz
LmgiCisjaW5jbHVkZSAiV2FzbVNlY3Rpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgV2FzbSB7CisKK2F1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VUeXBlKCkgLT4gUGFydGlhbFJl
c3VsdAoreworICAgIHVpbnQzMl90IGNvdW50OworCisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
cGFyc2VWYXJVSW50MzIoY291bnQpLCAiY2FuJ3QgZ2V0IFR5cGUgc2VjdGlvbidzIGNvdW50Iik7
CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihjb3VudCA+IG1heFR5cGVzLCAiVHlwZSBzZWN0aW9u
J3MgY291bnQgaXMgdG9vIGJpZyAiLCBjb3VudCwgIiBtYXhpbXVtICIsIG1heFR5cGVzKTsKKyAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPnVzZWRTaWduYXR1cmVzLnRyeVJlc2VydmVD
YXBhY2l0eShjb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBUeXBlIHNl
Y3Rpb24ncyAiLCBjb3VudCwgIiBlbnRyaWVzIik7CisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAw
OyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBpbnQ4X3QgdHlwZTsKKyAgICAgICAgdWludDMy
X3QgYXJndW1lbnRDb3VudDsKKyAgICAgICAgVmVjdG9yPFR5cGU+IGFyZ3VtZW50VHlwZXM7CisK
KyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VJbnQ3KHR5cGUpLCAiY2FuJ3QgZ2V0
ICIsIGksICJ0aCBUeXBlJ3MgdHlwZSIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHR5
cGUgIT0gRnVuYywgaSwgInRoIFR5cGUgaXMgbm9uLUZ1bmMgIiwgdHlwZSk7CisgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGFyZ3VtZW50Q291bnQpLCAiY2FuJ3Qg
Z2V0ICIsIGksICJ0aCBUeXBlJ3MgYXJndW1lbnQgY291bnQiKTsKKyAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRihhcmd1bWVudENvdW50ID4gbWF4RnVuY3Rpb25QYXJhbXMsIGksICJ0aCBhcmd1
bWVudCBjb3VudCBpcyB0b28gYmlnICIsIGFyZ3VtZW50Q291bnQsICIgbWF4aW11bSAiLCBtYXhG
dW5jdGlvblBhcmFtcyk7CisgICAgICAgIFJlZlB0cjxTaWduYXR1cmU+IG1heWJlU2lnbmF0dXJl
ID0gU2lnbmF0dXJlOjp0cnlDcmVhdGUoYXJndW1lbnRDb3VudCk7CisgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIW1heWJlU2lnbmF0dXJlLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9y
eSBmb3IgVHlwZSBzZWN0aW9uJ3MgIiwgaSwgInRoIHNpZ25hdHVyZSIpOworICAgICAgICBSZWY8
U2lnbmF0dXJlPiBzaWduYXR1cmUgPSBtYXliZVNpZ25hdHVyZS5yZWxlYXNlTm9uTnVsbCgpOwor
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmd1bWVudENvdW50OyArK2kpIHsK
KyAgICAgICAgICAgIFR5cGUgYXJndW1lbnRUeXBlOworICAgICAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighcGFyc2VWYWx1ZVR5cGUoYXJndW1lbnRUeXBlKSwgImNhbid0IGdldCAiLCBpLCAi
dGggYXJndW1lbnQgVHlwZSIpOworICAgICAgICAgICAgc2lnbmF0dXJlLT5hcmd1bWVudChpKSA9
IGFyZ3VtZW50VHlwZTsKKyAgICAgICAgfQorCisgICAgICAgIHVpbnQ4X3QgcmV0dXJuQ291bnQ7
CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDEocmV0dXJuQ291bnQp
LCAiY2FuJ3QgZ2V0ICIsIGksICJ0aCBUeXBlJ3MgcmV0dXJuIGNvdW50Iik7CisgICAgICAgIFR5
cGUgcmV0dXJuVHlwZTsKKyAgICAgICAgaWYgKHJldHVybkNvdW50KSB7CisgICAgICAgICAgICBU
eXBlIHZhbHVlOworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYWx1ZVR5
cGUodmFsdWUpLCAiY2FuJ3QgZ2V0ICIsIGksICJ0aCBUeXBlJ3MgcmV0dXJuIHZhbHVlIik7Cisg
ICAgICAgICAgICByZXR1cm5UeXBlID0gc3RhdGljX2Nhc3Q8VHlwZT4odmFsdWUpOworICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgIHJldHVyblR5cGUgPSBUeXBlOjpWb2lkOworICAgICAgICBz
aWduYXR1cmUtPnJldHVyblR5cGUoKSA9IHJldHVyblR5cGU7CisKKyAgICAgICAgc3RkOjpwYWly
PFNpZ25hdHVyZUluZGV4LCBSZWY8U2lnbmF0dXJlPj4gcmVzdWx0ID0gU2lnbmF0dXJlSW5mb3Jt
YXRpb246OmFkb3B0KFdURk1vdmUoc2lnbmF0dXJlKSk7CisgICAgICAgIG1faW5mby0+dXNlZFNp
Z25hdHVyZXMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUocmVzdWx0LnNlY29uZCkpOworICAgIH0K
KyAgICByZXR1cm4geyB9OworfQorCithdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlSW1wb3J0KCkg
LT4gUGFydGlhbFJlc3VsdAoreworICAgIHVpbnQzMl90IGltcG9ydENvdW50OworICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGltcG9ydENvdW50KSwgImNhbid0IGdldCBJ
bXBvcnQgc2VjdGlvbidzIGNvdW50Iik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbXBvcnRD
b3VudCA+IG1heEltcG9ydHMsICJJbXBvcnQgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwg
aW1wb3J0Q291bnQsICIgbWF4aW11bSAiLCBtYXhJbXBvcnRzKTsKKyAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFtX2luZm8tPmdsb2JhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50KSwg
ImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGltcG9ydENvdW50LCAiIGdsb2Jh
bHMiKTsgLy8gRklYTUUgdGhpcyBvdmVyLWFsbG9jYXRlcyB3aGVuIHdlIGZpeCB0aGUgRklYTUVz
IGJlbG93LgorICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+aW1wb3J0cy50cnlSZXNl
cnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBm
b3IgIiwgaW1wb3J0Q291bnQsICIgaW1wb3J0cyIpOyAvLyBGSVhNRSB0aGlzIG92ZXItYWxsb2Nh
dGVzIHdoZW4gd2UgZml4IHRoZSBGSVhNRXMgYmVsb3cuCisgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RighbV9pbmZvLT5pbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMudHJ5UmVzZXJ2ZUNhcGFj
aXR5KGltcG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGlt
cG9ydENvdW50LCAiIGltcG9ydCBmdW5jdGlvbiBzaWduYXR1cmVzIik7IC8vIEZJWE1FIHRoaXMg
b3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxvdy4KKworICAgIGZvciAo
dWludDMyX3QgaW1wb3J0TnVtYmVyID0gMDsgaW1wb3J0TnVtYmVyIDwgaW1wb3J0Q291bnQ7ICsr
aW1wb3J0TnVtYmVyKSB7CisgICAgICAgIHVpbnQzMl90IG1vZHVsZUxlbjsKKyAgICAgICAgdWlu
dDMyX3QgZmllbGRMZW47CisgICAgICAgIE5hbWUgbW9kdWxlU3RyaW5nOworICAgICAgICBOYW1l
IGZpZWxkU3RyaW5nOworICAgICAgICBFeHRlcm5hbEtpbmQga2luZDsKKyAgICAgICAgdW5zaWdu
ZWQga2luZEluZGV4IHsgMCB9OworCisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNl
VmFyVUludDMyKG1vZHVsZUxlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1w
b3J0J3MgbW9kdWxlIG5hbWUgbGVuZ3RoIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IWNvbnN1bWVVVEY4U3RyaW5nKG1vZHVsZVN0cmluZywgbW9kdWxlTGVuKSwgImNhbid0IGdldCAi
LCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQncyBtb2R1bGUgbmFtZSBvZiBsZW5ndGggIiwgbW9k
dWxlTGVuKTsKKworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihm
aWVsZExlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0J3MgZmllbGQg
bmFtZSBsZW5ndGggaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIik7CisgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVVVEY4U3RyaW5nKGZpZWxkU3RyaW5nLCBmaWVsZExl
biksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0J3MgZmllbGQgbmFtZSBv
ZiBsZW5ndGggIiwgbW9kdWxlTGVuLCAiIGluIG1vZHVsZSAnIiwgbW9kdWxlU3RyaW5nLCAiJyIp
OworCisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlRXh0ZXJuYWxLaW5kKGtpbmQp
LCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdzIGtpbmQgaW4gbW9kdWxl
ICciLCBtb2R1bGVTdHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0cmluZywgIiciKTsKKyAgICAg
ICAgc3dpdGNoIChraW5kKSB7CisgICAgICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpGdW5jdGlvbjog
eworICAgICAgICAgICAgdWludDMyX3QgZnVuY3Rpb25TaWduYXR1cmVJbmRleDsKKyAgICAgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGZ1bmN0aW9uU2lnbmF0dXJl
SW5kZXgpLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdzIGZ1bmN0aW9u
IHNpZ25hdHVyZSBpbiBtb2R1bGUgJyIsIG1vZHVsZVN0cmluZywgIicgZmllbGQgJyIsIGZpZWxk
U3RyaW5nLCAiJyIpOworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvblNp
Z25hdHVyZUluZGV4ID49IG1faW5mby0+dXNlZFNpZ25hdHVyZXMuc2l6ZSgpLCAiaW52YWxpZCBm
dW5jdGlvbiBzaWduYXR1cmUgZm9yICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCwgIiwgZnVu
Y3Rpb25TaWduYXR1cmVJbmRleCwgIiBpcyBvdXQgb2YgcmFuZ2Ugb2YgIiwgbV9pbmZvLT51c2Vk
U2lnbmF0dXJlcy5zaXplKCksICIgaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIGZpZWxk
ICciLCBmaWVsZFN0cmluZywgIiciKTsKKyAgICAgICAgICAgIGtpbmRJbmRleCA9IG1faW5mby0+
aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsKKyAgICAgICAgICAgIFNpZ25h
dHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChtX2lu
Zm8tPnVzZWRTaWduYXR1cmVzW2Z1bmN0aW9uU2lnbmF0dXJlSW5kZXhdKTsKKyAgICAgICAgICAg
IG1faW5mby0+aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnVuY2hlY2tlZEFwcGVuZChz
aWduYXR1cmVJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIEV4dGVybmFsS2luZDo6VGFibGU6IHsKKyAgICAgICAgICAgIGJvb2wgaXNJbXBvcnQgPSB0
cnVlOworICAgICAgICAgICAgUGFydGlhbFJlc3VsdCByZXN1bHQgPSBwYXJzZVRhYmxlSGVscGVy
KGlzSW1wb3J0KTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoV1RGTW92ZShyZXN1bHQuZXJyb3IoKSkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6
Ok1lbW9yeTogeworICAgICAgICAgICAgYm9vbCBpc0ltcG9ydCA9IHRydWU7CisgICAgICAgICAg
ICBQYXJ0aWFsUmVzdWx0IHJlc3VsdCA9IHBhcnNlTWVtb3J5SGVscGVyKGlzSW1wb3J0KTsKKyAg
ICAgICAgICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoV1RGTW92ZShyZXN1bHQuZXJyb3IoKSkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6Okdsb2JhbDogeworICAg
ICAgICAgICAgR2xvYmFsIGdsb2JhbDsKKyAgICAgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJf
RkFJTFMocGFyc2VHbG9iYWxUeXBlKGdsb2JhbCkpOworICAgICAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihnbG9iYWwubXV0YWJpbGl0eSA9PSBHbG9iYWw6Ok11dGFibGUsICJNdXRhYmxlIEds
b2JhbHMgYXJlbid0IHN1cHBvcnRlZCIpOworCisgICAgICAgICAgICBraW5kSW5kZXggPSBtX2lu
Zm8tPmdsb2JhbHMuc2l6ZSgpOworICAgICAgICAgICAgbV9pbmZvLT5nbG9iYWxzLnVuY2hlY2tl
ZEFwcGVuZChXVEZNb3ZlKGdsb2JhbCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIG1faW5mby0+aW1wb3J0cy51bmNoZWNrZWRBcHBlbmQoeyBX
VEZNb3ZlKG1vZHVsZVN0cmluZyksIFdURk1vdmUoZmllbGRTdHJpbmcpLCBraW5kLCBraW5kSW5k
ZXggfSk7CisgICAgfQorCisgICAgbV9pbmZvLT5maXJzdEludGVybmFsR2xvYmFsID0gbV9pbmZv
LT5nbG9iYWxzLnNpemUoKTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIFNlY3Rpb25QYXJz
ZXI6OnBhcnNlRnVuY3Rpb24oKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgdWludDMyX3QgY291
bnQ7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoY291bnQpLCAiY2Fu
J3QgZ2V0IEZ1bmN0aW9uIHNlY3Rpb24ncyBjb3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoY291bnQgPiBtYXhGdW5jdGlvbnMsICJGdW5jdGlvbiBzZWN0aW9uJ3MgY291bnQgaXMgdG9v
IGJpZyAiLCBjb3VudCwgIiBtYXhpbXVtICIsIG1heEZ1bmN0aW9ucyk7CisgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighbV9pbmZvLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy50cnlS
ZXNlcnZlQ2FwYWNpdHkoY291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3Ig
IiwgY291bnQsICIgRnVuY3Rpb24gc2lnbmF0dXJlcyIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIW1faW5mby0+ZnVuY3Rpb25zLnRyeVJlc2VydmVDYXBhY2l0eShjb3VudCksICJjYW4ndCBh
bGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBjb3VudCwgIkZ1bmN0aW9uIGxvY2F0aW9ucyIp
OworCisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAg
dWludDMyX3QgdHlwZU51bWJlcjsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VW
YXJVSW50MzIodHlwZU51bWJlciksICJjYW4ndCBnZXQgIiwgaSwgInRoIEZ1bmN0aW9uJ3MgdHlw
ZSBudW1iZXIiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0eXBlTnVtYmVyID49IG1f
aW5mby0+dXNlZFNpZ25hdHVyZXMuc2l6ZSgpLCBpLCAidGggRnVuY3Rpb24gdHlwZSBudW1iZXIg
aXMgaW52YWxpZCAiLCB0eXBlTnVtYmVyKTsKKworICAgICAgICBTaWduYXR1cmVJbmRleCBzaWdu
YXR1cmVJbmRleCA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQobV9pbmZvLT51c2VkU2lnbmF0
dXJlc1t0eXBlTnVtYmVyXSk7CisgICAgICAgIC8vIFRoZSBDb2RlIHNlY3Rpb24gZml4ZXMgdXAg
c3RhcnQgYW5kIGVuZC4KKyAgICAgICAgc2l6ZV90IHN0YXJ0ID0gMDsKKyAgICAgICAgc2l6ZV90
IGVuZCA9IDA7CisgICAgICAgIG1faW5mby0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGlj
ZXMudW5jaGVja2VkQXBwZW5kKHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgbV9pbmZvLT5mdW5j
dGlvbnMudW5jaGVja2VkQXBwZW5kKHsgc3RhcnQsIGVuZCwgVmVjdG9yPHVpbnQ4X3Q+KCkgfSk7
CisgICAgfQorCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJz
ZVJlc2l6YWJsZUxpbWl0cyh1aW50MzJfdCYgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50MzJf
dD4mIG1heGltdW0pIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQoIW1heGltdW0pOwor
CisgICAgdWludDhfdCBmbGFnczsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJ
bnQxKGZsYWdzKSwgImNhbid0IHBhcnNlIHJlc2l6YWJsZSBsaW1pdHMgZmxhZ3MiKTsKKyAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbml0aWFsKSwgImNhbid0IHBhcnNl
IHJlc2l6YWJsZSBsaW1pdHMgaW5pdGlhbCBwYWdlIGNvdW50Iik7CisKKyAgICBpZiAoZmxhZ3Mp
IHsKKyAgICAgICAgdWludDMyX3QgbWF4aW11bUludDsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VWYXJVSW50MzIobWF4aW11bUludCksICJjYW4ndCBwYXJzZSByZXNpemFibGUg
bGltaXRzIG1heGltdW0gcGFnZSBjb3VudCIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KGluaXRpYWwgPiBtYXhpbXVtSW50LCAicmVzaXphYmxlIGxpbWl0cyBoYXMgYSBpbml0aWFsIHBh
Z2UgY291bnQgb2YgIiwgaW5pdGlhbCwgIiB3aGljaCBpcyBncmVhdGVyIHRoYW4gaXRzIG1heGlt
dW0gIiwgbWF4aW11bUludCk7CisgICAgICAgIG1heGltdW0gPSBtYXhpbXVtSW50OworICAgIH0K
KworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VUYWJsZUhl
bHBlcihib29sIGlzSW1wb3J0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihtX2luZm8tPnRhYmxlQ291bnQoKSA+IDAsICJDYW5ub3QgaGF2ZSBtb3JlIHRoYW4g
b25lIFRhYmxlIGZvciBub3ciKTsKKworICAgIGludDhfdCB0eXBlOworICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXBhcnNlSW50Nyh0eXBlKSwgImNhbid0IHBhcnNlIFRhYmxlIHR5cGUiKTsKKyAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKHR5cGUgIT0gV2FzbTo6QW55ZnVuYywgIlRhYmxlIHR5cGUg
c2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAiLCB0eXBlKTsKKworICAgIHVpbnQzMl90IGluaXRpYWw7
CisgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bTsKKyAgICBQYXJ0aWFsUmVzdWx0
IGxpbWl0cyA9IHBhcnNlUmVzaXphYmxlTGltaXRzKGluaXRpYWwsIG1heGltdW0pOworICAgIGlm
IChVTkxJS0VMWSghbGltaXRzKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFdURk1v
dmUobGltaXRzLmVycm9yKCkpKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluaXRpYWwgPiBt
YXhUYWJsZUVudHJpZXMsICJUYWJsZSdzIGluaXRpYWwgcGFnZSBjb3VudCBvZiAiLCBpbml0aWFs
LCAiIGlzIHRvbyBiaWcsIG1heGltdW0gIiwgbWF4VGFibGVFbnRyaWVzKTsKKworICAgIEFTU0VS
VCghbWF4aW11bSB8fCAqbWF4aW11bSA+PSBpbml0aWFsKTsKKworICAgIG1faW5mby0+dGFibGVJ
bmZvcm1hdGlvbiA9IFRhYmxlSW5mb3JtYXRpb24oaW5pdGlhbCwgbWF4aW11bSwgaXNJbXBvcnQp
OworCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZVRhYmxl
KCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHVpbnQzMl90IGNvdW50OworICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGNvdW50KSwgImNhbid0IGdldCBUYWJsZSdzIGNv
dW50Iik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihjb3VudCA+IDEsICJUYWJsZSBjb3VudCBv
ZiAiLCBjb3VudCwgIiBpcyBpbnZhbGlkLCBhdCBtb3N0IDEgaXMgYWxsb3dlZCBmb3Igbm93Iik7
CisKKyAgICBpZiAoIWNvdW50KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgYm9vbCBpc0lt
cG9ydCA9IGZhbHNlOworICAgIFBhcnRpYWxSZXN1bHQgcmVzdWx0ID0gcGFyc2VUYWJsZUhlbHBl
cihpc0ltcG9ydCk7CisgICAgaWYgKFVOTElLRUxZKCFyZXN1bHQpKQorICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoV1RGTW92ZShyZXN1bHQuZXJyb3IoKSkpOworCisgICAgcmV0dXJuIHsg
fTsKK30KKworYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZU1lbW9yeUhlbHBlcihib29sIGlzSW1w
b3J0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX2luZm8t
Pm1lbW9yeUNvdW50KCksICJ0aGVyZSBjYW4gYXQgbW9zdCBiZSBvbmUgTWVtb3J5IHNlY3Rpb24g
Zm9yIG5vdyIpOworCisgICAgUGFnZUNvdW50IGluaXRpYWxQYWdlQ291bnQ7CisgICAgUGFnZUNv
dW50IG1heGltdW1QYWdlQ291bnQ7CisgICAgeworICAgICAgICB1aW50MzJfdCBpbml0aWFsOwor
ICAgICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtOworICAgICAgICBQYXJ0aWFs
UmVzdWx0IGxpbWl0cyA9IHBhcnNlUmVzaXphYmxlTGltaXRzKGluaXRpYWwsIG1heGltdW0pOwor
ICAgICAgICBpZiAoVU5MSUtFTFkoIWxpbWl0cykpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoV1RGTW92ZShsaW1pdHMuZXJyb3IoKSkpOworICAgICAgICBBU1NFUlQoIW1heGlt
dW0gfHwgKm1heGltdW0gPj0gaW5pdGlhbCk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IVBhZ2VDb3VudDo6aXNWYWxpZChpbml0aWFsKSwgIk1lbW9yeSdzIGluaXRpYWwgcGFnZSBjb3Vu
dCBvZiAiLCBpbml0aWFsLCAiIGlzIGludmFsaWQiKTsKKworICAgICAgICBpbml0aWFsUGFnZUNv
dW50ID0gUGFnZUNvdW50KGluaXRpYWwpOworCisgICAgICAgIGlmIChtYXhpbXVtKSB7CisgICAg
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFQYWdlQ291bnQ6OmlzVmFsaWQoKm1heGltdW0p
LCAiTWVtb3J5J3MgbWF4aW11bSBwYWdlIGNvdW50IG9mICIsICptYXhpbXVtLCAiIGlzIGludmFs
aWQiKTsKKyAgICAgICAgICAgIG1heGltdW1QYWdlQ291bnQgPSBQYWdlQ291bnQoKm1heGltdW0p
OworICAgICAgICB9CisgICAgfQorICAgIEFTU0VSVChpbml0aWFsUGFnZUNvdW50KTsKKyAgICBB
U1NFUlQoIW1heGltdW1QYWdlQ291bnQgfHwgbWF4aW11bVBhZ2VDb3VudCA+PSBpbml0aWFsUGFn
ZUNvdW50KTsKKworICAgIG1faW5mby0+bWVtb3J5ID0gTWVtb3J5SW5mb3JtYXRpb24oaW5pdGlh
bFBhZ2VDb3VudCwgbWF4aW11bVBhZ2VDb3VudCwgaXNJbXBvcnQpOworICAgIHJldHVybiB7IH07
Cit9CisKK2F1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VNZW1vcnkoKSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgdWludDhfdCBjb3VudDsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZh
clVJbnQxKGNvdW50KSwgImNhbid0IHBhcnNlIE1lbW9yeSBzZWN0aW9uJ3MgY291bnQiKTsKKwor
ICAgIGlmICghY291bnQpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKGNvdW50ICE9IDEsICJNZW1vcnkgc2VjdGlvbiBoYXMgbW9yZSB0aGFuIG9uZSBtZW1v
cnksIFdlYkFzc2VtYmx5IGN1cnJlbnRseSBvbmx5IGFsbG93cyB6ZXJvIG9yIG9uZSIpOworCisg
ICAgYm9vbCBpc0ltcG9ydCA9IGZhbHNlOworICAgIHJldHVybiBwYXJzZU1lbW9yeUhlbHBlcihp
c0ltcG9ydCk7Cit9CisKK2F1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VHbG9iYWwoKSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgdWludDMyX3QgZ2xvYmFsQ291bnQ7CisgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighcGFyc2VWYXJVSW50MzIoZ2xvYmFsQ291bnQpLCAiY2FuJ3QgZ2V0IEdsb2JhbCBz
ZWN0aW9uJ3MgY291bnQiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGdsb2JhbENvdW50ID4g
bWF4R2xvYmFscywgIkdsb2JhbCBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBnbG9iYWxD
b3VudCwgIiBtYXhpbXVtICIsIG1heEdsb2JhbHMpOworICAgIHNpemVfdCB0b3RhbEJ5dGVzID0g
Z2xvYmFsQ291bnQgKyBtX2luZm8tPmZpcnN0SW50ZXJuYWxHbG9iYWw7CisgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRigoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHRvdGFsQnl0ZXMpIDwgZ2xvYmFsQ291
bnQpIHx8ICFtX2luZm8tPmdsb2JhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KHRvdGFsQnl0ZXMpLCAi
Y2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiLCB0b3RhbEJ5dGVzLCAiIGdsb2JhbHMiKTsKKwor
ICAgIGZvciAodWludDMyX3QgZ2xvYmFsSW5kZXggPSAwOyBnbG9iYWxJbmRleCA8IGdsb2JhbENv
dW50OyArK2dsb2JhbEluZGV4KSB7CisgICAgICAgIEdsb2JhbCBnbG9iYWw7CisgICAgICAgIHVp
bnQ4X3QgaW5pdE9wY29kZTsKKworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBh
cnNlR2xvYmFsVHlwZShnbG9iYWwpKTsKKyAgICAgICAgVHlwZSB0eXBlRm9ySW5pdE9wY29kZTsK
KyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUluaXRFeHByKGluaXRPcGNv
ZGUsIGdsb2JhbC5pbml0aWFsQml0c09ySW1wb3J0TnVtYmVyLCB0eXBlRm9ySW5pdE9wY29kZSkp
OworICAgICAgICBpZiAoaW5pdE9wY29kZSA9PSBHZXRHbG9iYWwpCisgICAgICAgICAgICBnbG9i
YWwuaW5pdGlhbGl6YXRpb25UeXBlID0gR2xvYmFsOjpGcm9tR2xvYmFsSW1wb3J0OworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBnbG9iYWwuaW5pdGlhbGl6YXRpb25UeXBlID0gR2xvYmFsOjpG
cm9tRXhwcmVzc2lvbjsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0eXBlRm9ySW5pdE9w
Y29kZSAhPSBnbG9iYWwudHlwZSwgIkdsb2JhbCBpbml0X2V4cHIgb3Bjb2RlIG9mIHR5cGUgIiwg
dHlwZUZvckluaXRPcGNvZGUsICIgZG9lc24ndCBtYXRjaCBnbG9iYWwncyB0eXBlICIsIGdsb2Jh
bC50eXBlKTsKKworICAgICAgICBtX2luZm8tPmdsb2JhbHMudW5jaGVja2VkQXBwZW5kKFdURk1v
dmUoZ2xvYmFsKSk7CisgICAgfQorCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBTZWN0aW9u
UGFyc2VyOjpwYXJzZUV4cG9ydCgpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1aW50MzJfdCBl
eHBvcnRDb3VudDsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihleHBv
cnRDb3VudCksICJjYW4ndCBnZXQgRXhwb3J0IHNlY3Rpb24ncyBjb3VudCIpOworICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoZXhwb3J0Q291bnQgPiBtYXhFeHBvcnRzLCAiRXhwb3J0IHNlY3Rpb24n
cyBjb3VudCBpcyB0b28gYmlnICIsIGV4cG9ydENvdW50LCAiIG1heGltdW0gIiwgbWF4RXhwb3J0
cyk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5leHBvcnRzLnRyeVJlc2VydmVD
YXBhY2l0eShleHBvcnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAi
LCBleHBvcnRDb3VudCwgIiBleHBvcnRzIik7CisKKyAgICBIYXNoU2V0PFN0cmluZz4gZXhwb3J0
TmFtZXM7CisgICAgZm9yICh1aW50MzJfdCBleHBvcnROdW1iZXIgPSAwOyBleHBvcnROdW1iZXIg
PCBleHBvcnRDb3VudDsgKytleHBvcnROdW1iZXIpIHsKKyAgICAgICAgdWludDMyX3QgZmllbGRM
ZW47CisgICAgICAgIE5hbWUgZmllbGRTdHJpbmc7CisgICAgICAgIEV4dGVybmFsS2luZCBraW5k
OworICAgICAgICB1bnNpZ25lZCBraW5kSW5kZXg7CisKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VWYXJVSW50MzIoZmllbGRMZW4pLCAiY2FuJ3QgZ2V0ICIsIGV4cG9ydE51bWJl
ciwgInRoIEV4cG9ydCdzIGZpZWxkIG5hbWUgbGVuZ3RoIik7CisgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIWNvbnN1bWVVVEY4U3RyaW5nKGZpZWxkU3RyaW5nLCBmaWVsZExlbiksICJjYW4n
dCBnZXQgIiwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0J3MgZmllbGQgbmFtZSBvZiBsZW5ndGgg
IiwgZmllbGRMZW4pOworICAgICAgICBTdHJpbmcgZmllbGROYW1lID0gU3RyaW5nOjpmcm9tVVRG
OChmaWVsZFN0cmluZyk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZXhwb3J0TmFtZXMu
Y29udGFpbnMoZmllbGROYW1lKSwgImR1cGxpY2F0ZSBleHBvcnQ6ICciLCBmaWVsZFN0cmluZywg
IiciKTsKKyAgICAgICAgZXhwb3J0TmFtZXMuYWRkKGZpZWxkTmFtZSk7CisKKyAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighcGFyc2VFeHRlcm5hbEtpbmQoa2luZCksICJjYW4ndCBnZXQgIiwg
ZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0J3Mga2luZCwgbmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAi
JyIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihraW5kSW5k
ZXgpLCAiY2FuJ3QgZ2V0ICIsIGV4cG9ydE51bWJlciwgInRoIEV4cG9ydCdzIGtpbmQgaW5kZXgs
IG5hbWVkICciLCBmaWVsZFN0cmluZywgIiciKTsKKyAgICAgICAgc3dpdGNoIChraW5kKSB7Cisg
ICAgICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpGdW5jdGlvbjogeworICAgICAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRihraW5kSW5kZXggPj0gbV9pbmZvLT5mdW5jdGlvbkluZGV4U3BhY2VTaXpl
KCksIGV4cG9ydE51bWJlciwgInRoIEV4cG9ydCBoYXMgaW52YWxpZCBmdW5jdGlvbiBudW1iZXIg
Iiwga2luZEluZGV4LCAiIGl0IGV4Y2VlZHMgdGhlIGZ1bmN0aW9uIGluZGV4IHNwYWNlICIsIG1f
aW5mby0+ZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgpLCAiLCBuYW1lZCAnIiwgZmllbGRTdHJpbmcs
ICInIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEV4dGVy
bmFsS2luZDo6VGFibGU6IHsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoa2luZElu
ZGV4ID49IG1faW5mby0+dGFibGVDb3VudCgpLCAiY2FuJ3QgZXhwb3J0IFRhYmxlICIsIGtpbmRJ
bmRleCwgIiB0aGVyZSBhcmUgIiwgbV9pbmZvLT50YWJsZUNvdW50KCksICIgVGFibGVzIik7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEV4dGVybmFsS2luZDo6
TWVtb3J5OiB7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPm1lbW9y
eSwgImNhbid0IGV4cG9ydCBhIG5vbi1leGlzdGVudCBNZW1vcnkiKTsKKyAgICAgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoa2luZEluZGV4LCAiY2FuJ3QgZXhwb3J0IE1lbW9yeSAiLCBraW5k
SW5kZXgsICIgb25seSBvbmUgVGFibGUgaXMgY3VycmVudGx5IHN1cHBvcnRlZCIpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6Okdsb2Jh
bDogeworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihraW5kSW5kZXggPj0gbV9pbmZv
LT5nbG9iYWxzLnNpemUoKSwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0IGhhcyBpbnZhbGlkIGds
b2JhbCBudW1iZXIgIiwga2luZEluZGV4LCAiIGl0IGV4Y2VlZHMgdGhlIGdsb2JhbHMgY291bnQg
IiwgbV9pbmZvLT5nbG9iYWxzLnNpemUoKSwgIiwgbmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIp
OworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX2luZm8tPmdsb2JhbHNba2luZElu
ZGV4XS5tdXRhYmlsaXR5ICE9IEdsb2JhbDo6SW1tdXRhYmxlLCBleHBvcnROdW1iZXIsICJ0aCBF
eHBvcnQgaXNuJ3QgaW1tdXRhYmxlLCBuYW1lZCAnIiwgZmllbGRTdHJpbmcsICInIik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbV9pbmZvLT5l
eHBvcnRzLnVuY2hlY2tlZEFwcGVuZCh7IFdURk1vdmUoZmllbGRTdHJpbmcpLCBraW5kLCBraW5k
SW5kZXggfSk7CisgICAgfQorCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBTZWN0aW9uUGFy
c2VyOjpwYXJzZVN0YXJ0KCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHVpbnQzMl90IHN0YXJ0
RnVuY3Rpb25JbmRleDsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihz
dGFydEZ1bmN0aW9uSW5kZXgpLCAiY2FuJ3QgZ2V0IFN0YXJ0IGluZGV4Iik7CisgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRihzdGFydEZ1bmN0aW9uSW5kZXggPj0gbV9pbmZvLT5mdW5jdGlvbkluZGV4
U3BhY2VTaXplKCksICJTdGFydCBpbmRleCAiLCBzdGFydEZ1bmN0aW9uSW5kZXgsICIgZXhjZWVk
cyBmdW5jdGlvbiBpbmRleCBzcGFjZSAiLCBtX2luZm8tPmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUo
KSk7CisgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX2luZm8tPnNpZ25hdHVy
ZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXgpOworICAgIGNv
bnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWdu
YXR1cmVJbmRleCk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihzaWduYXR1cmUuYXJndW1lbnRD
b3VudCgpLCAiU3RhcnQgZnVuY3Rpb24gY2FuJ3QgaGF2ZSBhcmd1bWVudHMiKTsKKyAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKHNpZ25hdHVyZS5yZXR1cm5UeXBlKCkgIT0gVm9pZCwgIlN0YXJ0IGZ1
bmN0aW9uIGNhbid0IHJldHVybiBhIHZhbHVlIik7CisgICAgbV9pbmZvLT5zdGFydEZ1bmN0aW9u
SW5kZXhTcGFjZSA9IHN0YXJ0RnVuY3Rpb25JbmRleDsKKyAgICByZXR1cm4geyB9OworfQorCith
dXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlRWxlbWVudCgpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICB1aW50MzJfdCBlbGVtZW50Q291bnQ7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VW
YXJVSW50MzIoZWxlbWVudENvdW50KSwgImNhbid0IGdldCBFbGVtZW50IHNlY3Rpb24ncyBjb3Vu
dCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZWxlbWVudENvdW50ID4gbWF4VGFibGVFbnRy
aWVzLCAiRWxlbWVudCBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBlbGVtZW50Q291bnQs
ICIgbWF4aW11bSAiLCBtYXhUYWJsZUVudHJpZXMpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IW1faW5mby0+ZWxlbWVudHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGVsZW1lbnRDb3VudCksICJjYW4n
dCBhbGxvY2F0ZSBtZW1vcnkgZm9yICIsIGVsZW1lbnRDb3VudCwgIiBFbGVtZW50cyIpOworICAg
IGZvciAodW5zaWduZWQgZWxlbWVudE51bSA9IDA7IGVsZW1lbnROdW0gPCBlbGVtZW50Q291bnQ7
ICsrZWxlbWVudE51bSkgeworICAgICAgICB1aW50MzJfdCB0YWJsZUluZGV4OworICAgICAgICB1
aW50NjRfdCBpbml0RXhwckJpdHM7CisgICAgICAgIHVpbnQ4X3QgaW5pdE9wY29kZTsKKyAgICAg
ICAgdWludDMyX3QgaW5kZXhDb3VudDsKKworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFw
YXJzZVZhclVJbnQzMih0YWJsZUluZGV4KSwgImNhbid0IGdldCAiLCBlbGVtZW50TnVtLCAidGgg
RWxlbWVudCB0YWJsZSBpbmRleCIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHRhYmxl
SW5kZXggPj0gbV9pbmZvLT50YWJsZUNvdW50KCksICJFbGVtZW50IHNlY3Rpb24gZm9yIFRhYmxl
ICIsIHRhYmxlSW5kZXgsICIgZXhjZWVkcyBhdmFpbGFibGUgVGFibGUgIiwgbV9pbmZvLT50YWJs
ZUNvdW50KCkpOworICAgICAgICBUeXBlIGluaXRFeHByVHlwZTsKKyAgICAgICAgV0FTTV9GQUlM
X0lGX0hFTFBFUl9GQUlMUyhwYXJzZUluaXRFeHByKGluaXRPcGNvZGUsIGluaXRFeHByQml0cywg
aW5pdEV4cHJUeXBlKSk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoaW5pdEV4cHJUeXBl
ICE9IEkzMiwgIkVsZW1lbnQgaW5pdF9leHByIG11c3QgcHJvZHVjZSBhbiBpMzIiKTsKKyAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoaW5kZXhDb3VudCksICJjYW4n
dCBnZXQgIiwgZWxlbWVudE51bSwgInRoIGluZGV4IGNvdW50IGZvciBFbGVtZW50IHNlY3Rpb24i
KTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbmRleENvdW50ID09IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwgIkVsZW1lbnQgc2VjdGlvbidzICIsIGVsZW1lbnRO
dW0sICJ0aCBpbmRleCBjb3VudCBpcyB0b28gYmlnICIsIGluZGV4Q291bnQpOworCisgICAgICAg
IEFTU0VSVCghIW1faW5mby0+dGFibGVJbmZvcm1hdGlvbik7CisKKyAgICAgICAgRWxlbWVudCBl
bGVtZW50KG1ha2VJMzJJbml0RXhwcihpbml0T3Bjb2RlLCBpbml0RXhwckJpdHMpKTsKKyAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighZWxlbWVudC5mdW5jdGlvbkluZGljZXMudHJ5UmVzZXJ2
ZUNhcGFjaXR5KGluZGV4Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiLCBpbmRl
eENvdW50LCAiIEVsZW1lbnQgaW5kaWNlcyIpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaW5k
ZXggPSAwOyBpbmRleCA8IGluZGV4Q291bnQ7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIHVpbnQz
Ml90IGZ1bmN0aW9uSW5kZXg7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJz
ZVZhclVJbnQzMihmdW5jdGlvbkluZGV4KSwgImNhbid0IGdldCBFbGVtZW50IHNlY3Rpb24ncyAi
LCBlbGVtZW50TnVtLCAidGggZWxlbWVudCdzICIsIGluZGV4LCAidGggaW5kZXgiKTsKKyAgICAg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25JbmRleCA+PSBtX2luZm8tPmZ1bmN0
aW9uSW5kZXhTcGFjZVNpemUoKSwgIkVsZW1lbnQgc2VjdGlvbidzICIsIGVsZW1lbnROdW0sICJ0
aCBlbGVtZW50J3MgIiwgaW5kZXgsICJ0aCBpbmRleCBpcyAiLCBmdW5jdGlvbkluZGV4LCAiIHdo
aWNoIGV4Y2VlZHMgdGhlIGZ1bmN0aW9uIGluZGV4IHNwYWNlIHNpemUgb2YgIiwgbV9pbmZvLT5m
dW5jdGlvbkluZGV4U3BhY2VTaXplKCkpOworCisgICAgICAgICAgICBlbGVtZW50LmZ1bmN0aW9u
SW5kaWNlcy51bmNoZWNrZWRBcHBlbmQoZnVuY3Rpb25JbmRleCk7CisgICAgICAgIH0KKworICAg
ICAgICBtX2luZm8tPmVsZW1lbnRzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGVsZW1lbnQpKTsK
KyAgICB9CisKKyAgICByZXR1cm4geyB9OworfQorCisvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUg
Y2hhbmdlZCB0byBiZSBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCBvbmNlIHdlIHN3aXRjaCBv
dXIgcGFyc2luZyBpbmZyYXN0cnVjdHVyZSB0byB0aGUgc3RyZWFtaW5nIHBhcnNlci4KK2F1dG8g
U2VjdGlvblBhcnNlcjo6cGFyc2VDb2RlKCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHVpbnQz
Ml90IGNvdW50OworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGNvdW50
KSwgImNhbid0IGdldCBDb2RlIHNlY3Rpb24ncyBjb3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoY291bnQgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLCAiQ29k
ZSBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBjb3VudCk7CisgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihjb3VudCAhPSBtX2luZm8tPmZ1bmN0aW9ucy5zaXplKCksICJDb2RlIHNlY3Rpb24g
Y291bnQgIiwgY291bnQsICIgZXhjZWVkcyB0aGUgZGVjbGFyZWQgbnVtYmVyIG9mIGZ1bmN0aW9u
cyAiLCBtX2luZm8tPmZ1bmN0aW9ucy5zaXplKCkpOworCisgICAgZm9yICh1aW50MzJfdCBpID0g
MDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgdWludDMyX3QgZnVuY3Rpb25TaXplOworICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihmdW5jdGlvblNpemUpLCAi
Y2FuJ3QgZ2V0ICIsIGksICJ0aCBDb2RlIGZ1bmN0aW9uJ3Mgc2l6ZSIpOworICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKGZ1bmN0aW9uU2l6ZSA+IGxlbmd0aCgpLCAiQ29kZSBmdW5jdGlvbidz
IHNpemUgIiwgZnVuY3Rpb25TaXplLCAiIGV4Y2VlZHMgdGhlIG1vZHVsZSdzIHNpemUgIiwgbGVu
Z3RoKCkpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGZ1bmN0aW9uU2l6ZSA+IGxlbmd0
aCgpIC0gbV9vZmZzZXQsICJDb2RlIGZ1bmN0aW9uJ3Mgc2l6ZSAiLCBmdW5jdGlvblNpemUsICIg
ZXhjZWVkcyB0aGUgbW9kdWxlJ3MgcmVtYWluaW5nIHNpemUiLCBsZW5ndGgoKSAtIG1fb2Zmc2V0
KTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvblNpemUgPiBtYXhGdW5jdGlv
blNpemUsICJDb2RlIGZ1bmN0aW9uJ3Mgc2l6ZSAiLCBmdW5jdGlvblNpemUsICIgaXMgdG9vIGJp
ZyIpOworCisgICAgICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhKGZ1bmN0aW9uU2l6ZSk7CisgICAg
ICAgIHN0ZDo6bWVtY3B5KGRhdGEuZGF0YSgpLCBzb3VyY2UoKSArIG1fb2Zmc2V0LCBmdW5jdGlv
blNpemUpOworICAgICAgICBtX2luZm8tPmZ1bmN0aW9uc1tpXS5zdGFydCA9IG1fb2Zmc2V0SW5T
b3VyY2UgKyBtX29mZnNldDsKKyAgICAgICAgbV9pbmZvLT5mdW5jdGlvbnNbaV0uZW5kID0gbV9v
ZmZzZXRJblNvdXJjZSArIG1fb2Zmc2V0ICsgZnVuY3Rpb25TaXplOworICAgICAgICBtX2luZm8t
PmZ1bmN0aW9uc1tpXS5kYXRhID0gV1RGTW92ZShkYXRhKTsKKyAgICAgICAgbV9vZmZzZXQgKz0g
ZnVuY3Rpb25TaXplOworICAgIH0KKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gU2VjdGlv
blBhcnNlcjo6cGFyc2VJbml0RXhwcih1aW50OF90JiBvcGNvZGUsIHVpbnQ2NF90JiBiaXRzT3JJ
bXBvcnROdW1iZXIsIFR5cGUmIHJlc3VsdFR5cGUpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ4KG9wY29kZSksICJjYW4ndCBnZXQgaW5pdF9l
eHByJ3Mgb3Bjb2RlIik7CisKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgSTMyQ29u
c3Q6IHsKKyAgICAgICAgaW50MzJfdCBjb25zdGFudDsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VWYXJJbnQzMihjb25zdGFudCksICJjYW4ndCBnZXQgY29uc3RhbnQgdmFsdWUg
Zm9yIGluaXRfZXhwcidzIGkzMi5jb25zdCIpOworICAgICAgICBiaXRzT3JJbXBvcnROdW1iZXIg
PSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oY29uc3RhbnQpOworICAgICAgICByZXN1bHRUeXBlID0g
STMyOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEk2NENvbnN0OiB7CisgICAg
ICAgIGludDY0X3QgY29uc3RhbnQ7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNl
VmFySW50NjQoY29uc3RhbnQpLCAiY2FuJ3QgZ2V0IGNvbnN0YW50IHZhbHVlIGZvciBpbml0X2V4
cHIncyBpNjQuY29uc3QiKTsKKyAgICAgICAgYml0c09ySW1wb3J0TnVtYmVyID0gY29uc3RhbnQ7
CisgICAgICAgIHJlc3VsdFR5cGUgPSBJNjQ7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IGNhc2UgRjMyQ29uc3Q6IHsKKyAgICAgICAgdWludDMyX3QgY29uc3RhbnQ7CisgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUludDMyKGNvbnN0YW50KSwgImNhbid0IGdldCBjb25z
dGFudCB2YWx1ZSBmb3IgaW5pdF9leHByJ3MgZjMyLmNvbnN0Iik7CisgICAgICAgIGJpdHNPcklt
cG9ydE51bWJlciA9IGNvbnN0YW50OworICAgICAgICByZXN1bHRUeXBlID0gRjMyOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEY2NENvbnN0OiB7CisgICAgICAgIHVpbnQ2NF90
IGNvbnN0YW50OworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ2NChjb25z
dGFudCksICJjYW4ndCBnZXQgY29uc3RhbnQgdmFsdWUgZm9yIGluaXRfZXhwcidzIGY2NC5jb25z
dCIpOworICAgICAgICBiaXRzT3JJbXBvcnROdW1iZXIgPSBjb25zdGFudDsKKyAgICAgICAgcmVz
dWx0VHlwZSA9IEY2NDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBHZXRHbG9i
YWw6IHsKKyAgICAgICAgdWludDMyX3QgaW5kZXg7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIXBhcnNlVmFyVUludDMyKGluZGV4KSwgImNhbid0IGdldCBnZXRfZ2xvYmFsJ3MgaW5kZXgi
KTsKKworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluZGV4ID49IG1faW5mby0+Z2xvYmFs
cy5zaXplKCksICJnZXRfZ2xvYmFsJ3MgaW5kZXggIiwgaW5kZXgsICIgZXhjZWVkcyB0aGUgbnVt
YmVyIG9mIGdsb2JhbHMgIiwgbV9pbmZvLT5nbG9iYWxzLnNpemUoKSk7CisgICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoaW5kZXggPj0gbV9pbmZvLT5maXJzdEludGVybmFsR2xvYmFsLCAiZ2V0
X2dsb2JhbCBpbXBvcnQga2luZCBpbmRleCAiLCBpbmRleCwgIiBleGNlZWRzIHRoZSBmaXJzdCBp
bnRlcm5hbCBnbG9iYWwgIiwgbV9pbmZvLT5maXJzdEludGVybmFsR2xvYmFsKTsKKworICAgICAg
ICBBU1NFUlQobV9pbmZvLT5nbG9iYWxzW2luZGV4XS5tdXRhYmlsaXR5ID09IEdsb2JhbDo6SW1t
dXRhYmxlKTsKKyAgICAgICAgcmVzdWx0VHlwZSA9IG1faW5mby0+Z2xvYmFsc1tpbmRleF0udHlw
ZTsKKyAgICAgICAgYml0c09ySW1wb3J0TnVtYmVyID0gaW5kZXg7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGRlZmF1bHQ6CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYodHJ1ZSwg
InVua25vd24gaW5pdF9leHByIG9wY29kZSAiLCBvcGNvZGUpOworICAgIH0KKworICAgIHVpbnQ4
X3QgZW5kT3Bjb2RlOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUludDgoZW5kT3Bj
b2RlKSwgImNhbid0IGdldCBpbml0X2V4cHIncyBlbmQgb3Bjb2RlIik7CisgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRihlbmRPcGNvZGUgIT0gT3BUeXBlOjpFbmQsICJpbml0X2V4cHIgc2hvdWxkIGVu
ZCB3aXRoIGVuZCwgZW5kZWQgd2l0aCAiLCBlbmRPcGNvZGUpOworCisgICAgcmV0dXJuIHsgfTsK
K30KKworYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZUdsb2JhbFR5cGUoR2xvYmFsJiBnbG9iYWwp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1aW50OF90IG11dGFiaWxpdHk7CisgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighcGFyc2VWYWx1ZVR5cGUoZ2xvYmFsLnR5cGUpLCAiY2FuJ3QgZ2V0IEds
b2JhbCdzIHZhbHVlIHR5cGUiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJ
bnQxKG11dGFiaWxpdHkpLCAiY2FuJ3QgZ2V0IEdsb2JhbCB0eXBlJ3MgbXV0YWJpbGl0eSIpOwor
ICAgIGdsb2JhbC5tdXRhYmlsaXR5ID0gc3RhdGljX2Nhc3Q8R2xvYmFsOjpNdXRhYmlsaXR5Piht
dXRhYmlsaXR5KTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIFNlY3Rpb25QYXJzZXI6OnBh
cnNlRGF0YSgpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1aW50MzJfdCBzZWdtZW50Q291bnQ7
CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoc2VnbWVudENvdW50KSwg
ImNhbid0IGdldCBEYXRhIHNlY3Rpb24ncyBjb3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoc2VnbWVudENvdW50ID4gbWF4RGF0YVNlZ21lbnRzLCAiRGF0YSBzZWN0aW9uJ3MgY291bnQg
aXMgdG9vIGJpZyAiLCBzZWdtZW50Q291bnQsICIgbWF4aW11bSAiLCBtYXhEYXRhU2VnbWVudHMp
OworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+ZGF0YS50cnlSZXNlcnZlQ2FwYWNp
dHkoc2VnbWVudENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIERhdGEg
c2VjdGlvbidzICIsIHNlZ21lbnRDb3VudCwgIiBzZWdtZW50cyIpOworCisgICAgZm9yICh1aW50
MzJfdCBzZWdtZW50TnVtYmVyID0gMDsgc2VnbWVudE51bWJlciA8IHNlZ21lbnRDb3VudDsgKytz
ZWdtZW50TnVtYmVyKSB7CisgICAgICAgIHVpbnQzMl90IG1lbW9yeUluZGV4OworICAgICAgICB1
aW50NjRfdCBpbml0RXhwckJpdHM7CisgICAgICAgIHVpbnQ4X3QgaW5pdE9wY29kZTsKKyAgICAg
ICAgdWludDMyX3QgZGF0YUJ5dGVMZW5ndGg7CisKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RighcGFyc2VWYXJVSW50MzIobWVtb3J5SW5kZXgpLCAiY2FuJ3QgZ2V0ICIsIHNlZ21lbnROdW1i
ZXIsICJ0aCBEYXRhIHNlZ21lbnQncyBpbmRleCIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKG1lbW9yeUluZGV4ID49IG1faW5mby0+bWVtb3J5Q291bnQoKSwgc2VnbWVudE51bWJlciwg
InRoIERhdGEgc2VnbWVudCBoYXMgaW5kZXggIiwgbWVtb3J5SW5kZXgsICIgd2hpY2ggZXhjZWVk
cyB0aGUgbnVtYmVyIG9mIE1lbW9yaWVzICIsIG1faW5mby0+bWVtb3J5Q291bnQoKSk7CisgICAg
ICAgIFR5cGUgaW5pdEV4cHJUeXBlOworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxT
KHBhcnNlSW5pdEV4cHIoaW5pdE9wY29kZSwgaW5pdEV4cHJCaXRzLCBpbml0RXhwclR5cGUpKTsK
KyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbml0RXhwclR5cGUgIT0gSTMyLCBzZWdtZW50
TnVtYmVyLCAidGggRGF0YSBzZWdtZW50J3MgaW5pdF9leHByIG11c3QgcHJvZHVjZSBhbiBpMzIi
KTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZGF0YUJ5dGVM
ZW5ndGgpLCAiY2FuJ3QgZ2V0ICIsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQncyBk
YXRhIGJ5dGUgbGVuZ3RoIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZGF0YUJ5dGVM
ZW5ndGggPiBtYXhNb2R1bGVTaXplLCBzZWdtZW50TnVtYmVyLCAidGggRGF0YSBzZWdtZW50J3Mg
ZGF0YSBieXRlIGxlbmd0aCBpcyB0b28gYmlnICIsIGRhdGFCeXRlTGVuZ3RoLCAiIG1heGltdW0g
IiwgbWF4TW9kdWxlU2l6ZSk7CisKKyAgICAgICAgU2VnbWVudCogc2VnbWVudCA9IFNlZ21lbnQ6
OmNyZWF0ZShtYWtlSTMySW5pdEV4cHIoaW5pdE9wY29kZSwgaW5pdEV4cHJCaXRzKSwgZGF0YUJ5
dGVMZW5ndGgpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFzZWdtZW50LCAiY2FuJ3Qg
YWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgc2VnbWVudE51bWJlciwgInRoIERhdGEgc2Vn
bWVudCBvZiBzaXplICIsIGRhdGFCeXRlTGVuZ3RoKTsKKyAgICAgICAgbV9pbmZvLT5kYXRhLnVu
Y2hlY2tlZEFwcGVuZChTZWdtZW50OjphZG9wdFB0cihzZWdtZW50KSk7CisgICAgICAgIGZvciAo
dWludDMyX3QgZGF0YUJ5dGUgPSAwOyBkYXRhQnl0ZSA8IGRhdGFCeXRlTGVuZ3RoOyArK2RhdGFC
eXRlKSB7CisgICAgICAgICAgICB1aW50OF90IGJ5dGU7CisgICAgICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVVJbnQ4KGJ5dGUpLCAiY2FuJ3QgZ2V0ICIsIGRhdGFCeXRlLCAidGgg
ZGF0YSBieXRlIGZyb20gIiwgc2VnbWVudE51bWJlciwgInRoIERhdGEgc2VnbWVudCIpOworICAg
ICAgICAgICAgc2VnbWVudC0+Ynl0ZShkYXRhQnl0ZSkgPSBieXRlOworICAgICAgICB9CisgICAg
fQorICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VDdXN0b20o
KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQ3VzdG9tU2VjdGlvbiBzZWN0aW9uOworICAgIHVp
bnQzMl90IGN1c3RvbVNlY3Rpb25OdW1iZXIgPSBtX2luZm8tPmN1c3RvbVNlY3Rpb25zLnNpemUo
KSArIDE7CisgICAgdWludDMyX3QgbmFtZUxlbjsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFt
X2luZm8tPmN1c3RvbVNlY3Rpb25zLnRyeVJlc2VydmVDYXBhY2l0eShjdXN0b21TZWN0aW9uTnVt
YmVyKSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGN1c3RvbVNlY3Rpb25O
dW1iZXIsICJ0aCBjdXN0b20gc2VjdGlvbiIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBh
cnNlVmFyVUludDMyKG5hbWVMZW4pLCAiY2FuJ3QgZ2V0ICIsIGN1c3RvbVNlY3Rpb25OdW1iZXIs
ICJ0aCBjdXN0b20gc2VjdGlvbidzIG5hbWUgbGVuZ3RoIik7CisgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighY29uc3VtZVVURjhTdHJpbmcoc2VjdGlvbi5uYW1lLCBuYW1lTGVuKSwgIm5hbWVMZW4g
Z2V0ICIsIGN1c3RvbVNlY3Rpb25OdW1iZXIsICJ0aCBjdXN0b20gc2VjdGlvbidzIG5hbWUgb2Yg
bGVuZ3RoICIsIG5hbWVMZW4pOworCisgICAgdWludDMyX3QgcGF5bG9hZEJ5dGVzID0gbGVuZ3Ro
KCkgLSBtX29mZnNldDsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFzZWN0aW9uLnBheWxvYWQu
dHJ5UmVzZXJ2ZUNhcGFjaXR5KHBheWxvYWRCeXRlcyksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2gg
bWVtb3J5IGZvciAiLCBjdXN0b21TZWN0aW9uTnVtYmVyLCAidGggY3VzdG9tIHNlY3Rpb24ncyAi
LCBwYXlsb2FkQnl0ZXMsICIgYnl0ZXMiKTsKKyAgICBmb3IgKHVpbnQzMl90IGJ5dGVOdW1iZXIg
PSAwOyBieXRlTnVtYmVyIDwgcGF5bG9hZEJ5dGVzOyArK2J5dGVOdW1iZXIpIHsKKyAgICAgICAg
dWludDhfdCBieXRlOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ4KGJ5
dGUpLCAiY2FuJ3QgZ2V0ICIsIGJ5dGVOdW1iZXIsICJ0aCBkYXRhIGJ5dGUgZnJvbSAiLCBjdXN0
b21TZWN0aW9uTnVtYmVyLCAidGggY3VzdG9tIHNlY3Rpb24iKTsKKyAgICAgICAgc2VjdGlvbi5w
YXlsb2FkLnVuY2hlY2tlZEFwcGVuZChieXRlKTsKKyAgICB9CisKKyAgICBOYW1lIG5hbWVOYW1l
ID0geyAnbicsICdhJywgJ20nLCAnZScgfTsKKyAgICBpZiAoc2VjdGlvbi5uYW1lID09IG5hbWVO
YW1lKSB7CisgICAgICAgIE5hbWVTZWN0aW9uUGFyc2VyIG5hbWVTZWN0aW9uUGFyc2VyKHNlY3Rp
b24ucGF5bG9hZC5iZWdpbigpLCBzZWN0aW9uLnBheWxvYWQuc2l6ZSgpLCBtX2luZm8pOworICAg
ICAgICBpZiAoYXV0byBuYW1lU2VjdGlvbiA9IG5hbWVTZWN0aW9uUGFyc2VyLnBhcnNlKCkpCisg
ICAgICAgICAgICBtX2luZm8tPm5hbWVTZWN0aW9uID0gV1RGTW92ZSgqbmFtZVNlY3Rpb24pOwor
ICAgIH0KKworICAgIG1faW5mby0+Y3VzdG9tU2VjdGlvbnMudW5jaGVja2VkQXBwZW5kKFdURk1v
dmUoc2VjdGlvbikpOworCisgICAgcmV0dXJuIHsgfTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9uUGFyc2VyLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc4ZDAyODM2
ZmM5ZjMyYmMyYjc4ZmJmOTBhZDJjNWRhOWY5MTI4M2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5oCkBAIC0wLDAgKzEsNzQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kgPHl1c3VrZXN1enVraUBz
bG93c3RhcnQub3JnPi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJX
YXNtRm9ybWF0LmgiCisjaW5jbHVkZSAiV2FzbU9wcy5oIgorI2luY2x1ZGUgIldhc21QYXJzZXIu
aCIKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK2NsYXNzIFNlY3Rpb25QYXJzZXIg
ZmluYWwgOiBwdWJsaWMgUGFyc2VyPHZvaWQ+IHsKK3B1YmxpYzoKKyAgICBTZWN0aW9uUGFyc2Vy
KGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCBzaXplX3Qgb2Zmc2V0SW5Tb3VyY2Us
IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvKQorICAgICAgICA6IFBhcnNlcihkYXRhLCBzaXplKQor
ICAgICAgICAsIG1fb2Zmc2V0SW5Tb3VyY2Uob2Zmc2V0SW5Tb3VyY2UpCisgICAgICAgICwgbV9p
bmZvKGluZm8pCisgICAgeworICAgIH0KKworI2RlZmluZSBXQVNNX1NFQ1RJT05fREVDTEFSRV9Q
QVJTRVIoTkFNRSwgSUQsIERFU0NSSVBUSU9OKSBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBwYXJzZSAjIyBOQU1FKCk7CisgICAgRk9SX0VBQ0hfS05PV05fV0FTTV9TRUNUSU9OKFdB
U01fU0VDVElPTl9ERUNMQVJFX1BBUlNFUikKKyN1bmRlZiBXQVNNX1NFQ1RJT05fREVDTEFSRV9Q
QVJTRVIKKworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlQ3VzdG9t
KCk7CisKK3ByaXZhdGU6CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIC4uLkFyZ3M+CisgICAgTkVW
RVJfSU5MSU5FIFVuZXhwZWN0ZWRSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGZhaWwoQXJncy4u
LiBhcmdzKSBjb25zdAorICAgIHsKKyAgICAgICAgdXNpbmcgbmFtZXNwYWNlIEZhaWx1cmVIZWxw
ZXI7IC8vIFNlZSBBREwgY29tbWVudCBpbiBuYW1lc3BhY2UgYWJvdmUuCisgICAgICAgIHJldHVy
biBVbmV4cGVjdGVkUmVzdWx0KG1ha2VTdHJpbmcoIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0
IHBhcnNlIGF0IGJ5dGUgIl9zLCBTdHJpbmc6Om51bWJlcihtX29mZnNldCArIG1fb2Zmc2V0SW5T
b3VyY2UpLCAiOiAiX3MsIG1ha2VTdHJpbmcoYXJncykuLi4pKTsKKyAgICB9CisKKyAgICBQYXJ0
aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUdsb2JhbFR5cGUoR2xvYmFsJik7Cisg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VNZW1vcnlIZWxwZXIoYm9v
bCBpc0ltcG9ydCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VU
YWJsZUhlbHBlcihib29sIGlzSW1wb3J0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBwYXJzZVJlc2l6YWJsZUxpbWl0cyh1aW50MzJfdCYgaW5pdGlhbCwgc3RkOjpvcHRp
b25hbDx1aW50MzJfdD4mIG1heGltdW0pOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIHBhcnNlSW5pdEV4cHIodWludDhfdCYsIHVpbnQ2NF90JiwgVHlwZSYgaW5pdEV4cHJU
eXBlKTsKKworICAgIHNpemVfdCBtX29mZnNldEluU291cmNlOworICAgIFJlZjxNb2R1bGVJbmZv
cm1hdGlvbj4gbV9pbmZvOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2Vu
ZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2FiMzUxM2E0NjdjYTUy
NDU2NjRlMTY0ZDM5M2Q1N2UwMGM0N2UyMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwCkBAIC0wLDAgKzEsMzkwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kgPHl1c3VrZXN1enVraUBz
bG93c3RhcnQub3JnPi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21TdHJlYW1pbmdQYXJzZXIuaCIK
KworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIldhc21Nb2R1bGVQYXJzZXIu
aCIKKyNpbmNsdWRlICJXYXNtU2VjdGlvblBhcnNlci5oIgorI2luY2x1ZGUgPHd0Zi9VbmFsaWdu
ZWRBY2Nlc3MuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworbmFtZXNw
YWNlIFdhc21TdHJlYW1pbmdQYXJzZXJJbnRlcm5hbCB7CitzdGF0aWMgY29uc3RleHByIGJvb2wg
dmVyYm9zZSA9IGZhbHNlOworfQorCisjZGVmaW5lIFdBU01fU1RSRUFNSU5HX1BBUlNFUl9GQUlM
X0lGX0hFTFBFUl9GQUlMUyhoZWxwZXIpIFwKKyAgICBkbyB7IFwKKyAgICAgICAgYXV0byBoZWxw
ZXJSZXN1bHQgPSBoZWxwZXI7IFwKKyAgICAgICAgaWYgKFVOTElLRUxZKCFoZWxwZXJSZXN1bHQp
KSB7IFwKKyAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gaGVscGVyUmVzdWx0LmVycm9yKCk7
IFwKKyAgICAgICAgICAgIHJldHVybiBTdGF0ZTo6RmF0YWxFcnJvcjsgXAorICAgICAgICB9IFwK
KyAgICB9IHdoaWxlICgwKQorCitBTFdBWVNfSU5MSU5FIHN0ZDo6b3B0aW9uYWw8dWludDhfdD4g
cGFyc2VVSW50Nyhjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QmIG9mZnNldCwgc2l6ZV90IHNp
emUpCit7CisgICAgaWYgKG9mZnNldCA+PSBzaXplKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgdWludDhfdCByZXN1bHQgPSBkYXRhW29mZnNldCsrXTsKKyAgICBpZiAocmVzdWx0IDwgMHg4
MCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uQXJncz4KK05FVkVSX0lOTElORSBhdXRvIFdBUk5fVU5V
U0VEX1JFVFVSTiBTdHJlYW1pbmdQYXJzZXI6OmZhaWwoQXJncy4uLiBhcmdzKSAtPiBTdGF0ZQor
eworICAgIHVzaW5nIG5hbWVzcGFjZSBGYWlsdXJlSGVscGVyOyAvLyBTZWUgQURMIGNvbW1lbnQg
aW4gbmFtZXNwYWNlIGFib3ZlLgorICAgIG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygiV2Vi
QXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAiX3MsIFN0cmluZzo6bnVtYmVy
KG1fb2Zmc2V0KSwgIjogIl9zLCBtYWtlU3RyaW5nKGFyZ3MpLi4uKTsKKyAgICBkYXRhTG9nTG5J
ZihXYXNtU3RyZWFtaW5nUGFyc2VySW50ZXJuYWw6OnZlcmJvc2UsIG1fZXJyb3JNZXNzYWdlKTsK
KyAgICByZXR1cm4gU3RhdGU6OkZhdGFsRXJyb3I7Cit9CisKK1N0cmVhbWluZ1BhcnNlcjo6U3Ry
ZWFtaW5nUGFyc2VyKE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvKQorICAgIDogbV9pbmZvKGluZm8p
Cit7CisgICAgZGF0YUxvZ0xuSWYoV2FzbVN0cmVhbWluZ1BhcnNlckludGVybmFsOjp2ZXJib3Nl
LCAic3RhcnRpbmcgdmFsaWRhdGlvbiIpOworfQorCithdXRvIFN0cmVhbWluZ1BhcnNlcjo6cGFy
c2VNb2R1bGVIZWFkZXIoVmVjdG9yPHVpbnQ4X3Q+JiYgZGF0YSkgLT4gU3RhdGUKK3sKKyAgICBB
U1NFUlQoZGF0YS5zaXplKCkgPT0gbW9kdWxlSGVhZGVyU2l6ZSk7CisgICAgZGF0YUxvZ0xuSWYo
V2FzbVN0cmVhbWluZ1BhcnNlckludGVybmFsOjp2ZXJib3NlLCAiaGVhZGVyIHZhbGlkYXRpb24i
KTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGRhdGFbMF0gIT0gJ1wwJyB8fCBkYXRhWzFdICE9
ICdhJyB8fCBkYXRhWzJdICE9ICdzJyB8fCBkYXRhWzNdICE9ICdtJywgIm1vZHVsZXMgZG9lc24n
dCBzdGFydCB3aXRoICdcXDBhc20nIik7CisgICAgdWludDMyX3QgdmVyc2lvbk51bWJlciA9IFdU
Rjo6dW5hbGlnbmVkTG9hZDx1aW50MzJfdD4oZGF0YS5kYXRhKCkgKyA0KTsKKyAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKHZlcnNpb25OdW1iZXIgIT0gZXhwZWN0ZWRWZXJzaW9uTnVtYmVyLCAidW5l
eHBlY3RlZCB2ZXJzaW9uIG51bWJlciAiLCB2ZXJzaW9uTnVtYmVyLCAiIGV4cGVjdGVkICIsIGV4
cGVjdGVkVmVyc2lvbk51bWJlcik7CisgICAgbV92ZXJzaW9uTnVtYmVyID0gdmVyc2lvbk51bWJl
cjsKKyAgICByZXR1cm4gU3RhdGU6OlNlY3Rpb25IZWFkZXI7Cit9CisKK2F1dG8gU3RyZWFtaW5n
UGFyc2VyOjpwYXJzZVNlY3Rpb25IZWFkZXIoVmVjdG9yPHVpbnQ4X3Q+JiYgZGF0YSkgLT4gU3Rh
dGUKK3sKKyAgICBBU1NFUlQoZGF0YS5zaXplKCkgPT0gc2VjdGlvbkhlYWRlclNpemUpOworICAg
IHNpemVfdCBvZmZzZXQgPSAwOworICAgIGF1dG8gcmVzdWx0ID0gcGFyc2VVSW50NyhkYXRhLmRh
dGEoKSwgb2Zmc2V0LCBkYXRhLnNpemUoKSk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcmVz
dWx0LCAiY2FuJ3QgZ2V0IHNlY3Rpb24gYnl0ZSIpOworCisgICAgU2VjdGlvbiBzZWN0aW9uID0g
U2VjdGlvbjo6Q3VzdG9tOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWRlY29kZVNlY3Rpb24o
KnJlc3VsdCwgc2VjdGlvbiksICJpbnZhbGlkIHNlY3Rpb24iKTsKKyAgICBBU1NFUlQoc2VjdGlv
biAhPSBTZWN0aW9uOjpCZWdpbik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighdmFsaWRhdGVP
cmRlcihtX3ByZXZpb3VzS25vd25TZWN0aW9uLCBzZWN0aW9uKSwgImludmFsaWQgc2VjdGlvbiBv
cmRlciwgIiwgbV9wcmV2aW91c0tub3duU2VjdGlvbiwgIiBmb2xsb3dlZCBieSAiLCBzZWN0aW9u
KTsKKyAgICBtX3NlY3Rpb24gPSBzZWN0aW9uOworICAgIGlmIChpc0tub3duU2VjdGlvbihzZWN0
aW9uKSkKKyAgICAgICAgbV9wcmV2aW91c0tub3duU2VjdGlvbiA9IHNlY3Rpb247CisgICAgcmV0
dXJuIFN0YXRlOjpTZWN0aW9uU2l6ZTsKK30KKworYXV0byBTdHJlYW1pbmdQYXJzZXI6OnBhcnNl
U2VjdGlvblNpemUodWludDMyX3Qgc2VjdGlvbkxlbmd0aCkgLT4gU3RhdGUKK3sKKyAgICBtX3Nl
Y3Rpb25MZW5ndGggPSBzZWN0aW9uTGVuZ3RoOworICAgIGlmIChtX3NlY3Rpb24gPT0gU2VjdGlv
bjo6Q29kZSkKKyAgICAgICAgcmV0dXJuIFN0YXRlOjpDb2RlU2VjdGlvblNpemU7CisgICAgcmV0
dXJuIFN0YXRlOjpTZWN0aW9uQm9keTsKK30KKworYXV0byBTdHJlYW1pbmdQYXJzZXI6OnBhcnNl
Q29kZVNlY3Rpb25TaXplKHVpbnQzMl90IGZ1bmN0aW9uQ291bnQpIC0+IFN0YXRlCit7CisgICAg
bV9mdW5jdGlvbkNvdW50ID0gZnVuY3Rpb25Db3VudDsKKyAgICBtX2Z1bmN0aW9uSW5kZXggPSAw
OworICAgIG1fY29kZU9mZnNldCA9IG1fb2Zmc2V0OworCisgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RihmdW5jdGlvbkNvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwg
IkNvZGUgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgZnVuY3Rpb25Db3VudCk7CisgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvbkNvdW50ICE9IG1faW5mby0+ZnVuY3Rpb25zLnNp
emUoKSwgIkNvZGUgc2VjdGlvbiBjb3VudCAiLCBmdW5jdGlvbkNvdW50LCAiIGV4Y2VlZHMgdGhl
IGRlY2xhcmVkIG51bWJlciBvZiBmdW5jdGlvbnMgIiwgbV9pbmZvLT5mdW5jdGlvbnMuc2l6ZSgp
KTsKKworICAgIGlmIChtX2Z1bmN0aW9uSW5kZXggPT0gbV9mdW5jdGlvbkNvdW50KSB7CisgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoKG1fY29kZU9mZnNldCArIG1fc2VjdGlvbkxlbmd0aCkg
IT0gbV9vZmZzZXQsICJwYXJzaW5nIGVuZGVkIGJlZm9yZSB0aGUgZW5kIG9mICIsIG1fc2VjdGlv
biwgIiBzZWN0aW9uIik7CisgICAgICAgIHJldHVybiBTdGF0ZTo6U2VjdGlvbkhlYWRlcjsKKyAg
ICB9CisgICAgcmV0dXJuIFN0YXRlOjpGdW5jdGlvbkhlYWRlcjsKK30KKworYXV0byBTdHJlYW1p
bmdQYXJzZXI6OnBhcnNlRnVuY3Rpb25IZWFkZXIodWludDMyX3QgZnVuY3Rpb25TaXplKSAtPiBT
dGF0ZQoreworICAgIG1fZnVuY3Rpb25TaXplID0gZnVuY3Rpb25TaXplOworICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoZnVuY3Rpb25TaXplID4gbWF4RnVuY3Rpb25TaXplLCAiQ29kZSBmdW5jdGlv
bidzIHNpemUgIiwgZnVuY3Rpb25TaXplLCAiIGlzIHRvbyBiaWciKTsKKyAgICByZXR1cm4gU3Rh
dGU6OkZ1bmN0aW9uQm9keTsKK30KKworYXV0byBTdHJlYW1pbmdQYXJzZXI6OnBhcnNlRnVuY3Rp
b25Cb2R5KFZlY3Rvcjx1aW50OF90PiYmIGRhdGEpIC0+IFN0YXRlCit7CisgICAgYXV0byYgZnVu
Y3Rpb24gPSBtX2luZm8tPmZ1bmN0aW9uc1ttX2Z1bmN0aW9uSW5kZXhdOworICAgIGZ1bmN0aW9u
LnN0YXJ0ID0gbV9vZmZzZXQ7CisgICAgZnVuY3Rpb24uZW5kID0gbV9vZmZzZXQgKyBtX2Z1bmN0
aW9uU2l6ZTsKKyAgICBmdW5jdGlvbi5kYXRhID0gV1RGTW92ZShkYXRhKTsKKyAgICBkYXRhTG9n
TG5JZihXYXNtU3RyZWFtaW5nUGFyc2VySW50ZXJuYWw6OnZlcmJvc2UsICJQcm9jZXNzaW5nIGZ1
bmN0aW9uIHN0YXJ0aW5nIGF0OiAiLCBmdW5jdGlvbi5zdGFydCwgIiBhbmQgZW5kaW5nIGF0OiAi
LCBmdW5jdGlvbi5lbmQpOworICAgICsrbV9mdW5jdGlvbkluZGV4OworICAgIGlmIChtX2Z1bmN0
aW9uSW5kZXggPT0gbV9mdW5jdGlvbkNvdW50KSB7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoKG1fY29kZU9mZnNldCArIG1fc2VjdGlvbkxlbmd0aCkgIT0gKG1fb2Zmc2V0ICsgbV9mdW5j
dGlvblNpemUpLCAicGFyc2luZyBlbmRlZCBiZWZvcmUgdGhlIGVuZCBvZiAiLCBtX3NlY3Rpb24s
ICIgc2VjdGlvbiIpOworICAgICAgICByZXR1cm4gU3RhdGU6OlNlY3Rpb25IZWFkZXI7CisgICAg
fQorICAgIHJldHVybiBTdGF0ZTo6RnVuY3Rpb25IZWFkZXI7Cit9CisKK2F1dG8gU3RyZWFtaW5n
UGFyc2VyOjpwYXJzZVNlY3Rpb25Cb2R5KFZlY3Rvcjx1aW50OF90PiYmIGRhdGEpIC0+IFN0YXRl
Cit7CisgICAgU2VjdGlvblBhcnNlciBwYXJzZXIoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCBt
X29mZnNldCwgbV9pbmZvLmdldCgpKTsKKyAgICBzd2l0Y2ggKG1fc2VjdGlvbikgeworI2RlZmlu
ZSBXQVNNX1NFQ1RJT05fUEFSU0UoTkFNRSwgSUQsIERFU0NSSVBUSU9OKSBcCisgICAgY2FzZSBT
ZWN0aW9uOjpOQU1FOiB7IFwKKyAgICAgICAgV0FTTV9TVFJFQU1JTkdfUEFSU0VSX0ZBSUxfSUZf
SEVMUEVSX0ZBSUxTKHBhcnNlci5wYXJzZSAjIyBOQU1FKCkpOyBcCisgICAgICAgIGJyZWFrOyBc
CisgICAgfQorICAgIEZPUl9FQUNIX0tOT1dOX1dBU01fU0VDVElPTihXQVNNX1NFQ1RJT05fUEFS
U0UpCisjdW5kZWYgV0FTTV9TRUNUSU9OX1BBUlNFCisKKyAgICBjYXNlIFNlY3Rpb246OkN1c3Rv
bTogeworICAgICAgICBXQVNNX1NUUkVBTUlOR19QQVJTRVJfRkFJTF9JRl9IRUxQRVJfRkFJTFMo
cGFyc2VyLnBhcnNlQ3VzdG9tKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNl
IFNlY3Rpb246OkJlZ2luOiB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9CisKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KHBhcnNlci5sZW5ndGgoKSAhPSBwYXJzZXIub2Zmc2V0KCksICJwYXJzaW5nIGVuZGVkIGJlZm9y
ZSB0aGUgZW5kIG9mICIsIG1fc2VjdGlvbiwgIiBzZWN0aW9uIik7CisKKyAgICByZXR1cm4gU3Rh
dGU6OlNlY3Rpb25IZWFkZXI7Cit9CisKK2F1dG8gU3RyZWFtaW5nUGFyc2VyOjpjb25zdW1lKGNv
bnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3QgYnl0ZXNTaXplLCBzaXplX3QmIG9mZnNldEluQnl0
ZXMsIHNpemVfdCByZXF1aXJlZFNpemUpIC0+IHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+
PgoreworICAgIGlmIChtX3JlbWFpbmluZy5zaXplKCkgPT0gcmVxdWlyZWRTaXplKSB7CisgICAg
ICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQgPSBXVEZNb3ZlKG1fcmVtYWluaW5nKTsKKyAgICAg
ICAgbV9uZXh0T2Zmc2V0ICs9IHJlcXVpcmVkU2l6ZTsKKyAgICAgICAgcmV0dXJuIFdURk1vdmUo
cmVzdWx0KTsKKyAgICB9CisKKyAgICBpZiAobV9yZW1haW5pbmcuc2l6ZSgpID4gcmVxdWlyZWRT
aXplKSB7CisgICAgICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQocmVxdWlyZWRTaXplKTsKKyAg
ICAgICAgbWVtY3B5KHJlc3VsdC5kYXRhKCksIG1fcmVtYWluaW5nLmRhdGEoKSwgcmVxdWlyZWRT
aXplKTsKKyAgICAgICAgbV9yZW1haW5pbmcucmVtb3ZlKDAsIHJlcXVpcmVkU2l6ZSk7CisgICAg
ICAgIG1fbmV4dE9mZnNldCArPSByZXF1aXJlZFNpemU7CisgICAgICAgIHJldHVybiBXVEZNb3Zl
KHJlc3VsdCk7CisgICAgfQorCisgICAgQVNTRVJUKG1fcmVtYWluaW5nLnNpemUoKSA8IHJlcXVp
cmVkU2l6ZSk7CisgICAgc2l6ZV90IGJ5dGVzUmVtYWluaW5nU2l6ZSA9IGJ5dGVzU2l6ZSAtIG9m
ZnNldEluQnl0ZXM7CisgICAgc2l6ZV90IHRvdGFsRGF0YVNpemUgPSBtX3JlbWFpbmluZy5zaXpl
KCkgKyBieXRlc1JlbWFpbmluZ1NpemU7CisgICAgaWYgKHRvdGFsRGF0YVNpemUgPCByZXF1aXJl
ZFNpemUpIHsKKyAgICAgICAgbV9yZW1haW5pbmcuYXBwZW5kKGJ5dGVzICsgb2Zmc2V0SW5CeXRl
cywgYnl0ZXNSZW1haW5pbmdTaXplKTsKKyAgICAgICAgb2Zmc2V0SW5CeXRlcyA9IGJ5dGVzU2l6
ZTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBzaXplX3QgdXNl
ZFNpemUgPSByZXF1aXJlZFNpemUgLSBtX3JlbWFpbmluZy5zaXplKCk7CisgICAgbV9yZW1haW5p
bmcuYXBwZW5kKGJ5dGVzICsgb2Zmc2V0SW5CeXRlcywgdXNlZFNpemUpOworICAgIG9mZnNldElu
Qnl0ZXMgKz0gdXNlZFNpemU7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdCA9IFdURk1vdmUo
bV9yZW1haW5pbmcpOworICAgIG1fbmV4dE9mZnNldCArPSByZXF1aXJlZFNpemU7CisgICAgcmV0
dXJuIFdURk1vdmUocmVzdWx0KTsKK30KKworYXV0byBTdHJlYW1pbmdQYXJzZXI6OmNvbnN1bWVW
YXJVSW50MzIoY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBieXRlc1NpemUsIHNpemVfdCYg
b2Zmc2V0SW5CeXRlcywgSXNFbmRPZlN0cmVhbSBpc0VuZE9mU3RyZWFtKSAtPiBFeHBlY3RlZDx1
aW50MzJfdCwgU3RhdGU+Cit7CisgICAgY29uc3RleHByIHNpemVfdCBtYXhTaXplID0gV1RGOjpM
RUJEZWNvZGVyOjptYXhCeXRlTGVuZ3RoPHVpbnQzMl90PigpOworICAgIHNpemVfdCBieXRlc1Jl
bWFpbmluZ1NpemUgPSBieXRlc1NpemUgLSBvZmZzZXRJbkJ5dGVzOworICAgIHNpemVfdCB0b3Rh
bERhdGFTaXplID0gbV9yZW1haW5pbmcuc2l6ZSgpICsgYnl0ZXNSZW1haW5pbmdTaXplOworICAg
IGlmIChtX3JlbWFpbmluZy5zaXplKCkgPj0gbWF4U2l6ZSkgeworICAgICAgICAvLyBEbyBub3Ro
aW5nLgorICAgIH0gZWxzZSBpZiAodG90YWxEYXRhU2l6ZSA+PSBtYXhTaXplKSB7CisgICAgICAg
IHNpemVfdCB1c2VkU2l6ZSA9IG1heFNpemUgLSBtX3JlbWFpbmluZy5zaXplKCk7CisgICAgICAg
IG1fcmVtYWluaW5nLmFwcGVuZChieXRlcyArIG9mZnNldEluQnl0ZXMsIHVzZWRTaXplKTsKKyAg
ICAgICAgb2Zmc2V0SW5CeXRlcyArPSB1c2VkU2l6ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBt
X3JlbWFpbmluZy5hcHBlbmQoYnl0ZXMgKyBvZmZzZXRJbkJ5dGVzLCBieXRlc1JlbWFpbmluZ1Np
emUpOworICAgICAgICBvZmZzZXRJbkJ5dGVzICs9IGJ5dGVzUmVtYWluaW5nU2l6ZTsKKyAgICAg
ICAgaWYgKGlzRW5kT2ZTdHJlYW0gPT0gSXNFbmRPZlN0cmVhbTo6Tm8pCisgICAgICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQobV9zdGF0ZSk7CisgICAgfQorCisgICAgc2l6ZV90IG9mZnNl
dCA9IDA7CisgICAgdWludDMyX3QgcmVzdWx0ID0gMDsKKyAgICBpZiAoIVdURjo6TEVCRGVjb2Rl
cjo6ZGVjb2RlVUludDMyKG1fcmVtYWluaW5nLmRhdGEoKSwgbV9yZW1haW5pbmcuc2l6ZSgpLCBv
ZmZzZXQsIHJlc3VsdCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChTdGF0ZTo6RmF0
YWxFcnJvcik7CisgICAgc2l6ZV90IGNvbnN1bWVkU2l6ZSA9IG9mZnNldDsKKyAgICBtX3JlbWFp
bmluZy5yZW1vdmUoMCwgY29uc3VtZWRTaXplKTsKKyAgICBtX25leHRPZmZzZXQgKz0gY29uc3Vt
ZWRTaXplOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2F1dG8gU3RyZWFtaW5nUGFyc2VyOjph
ZGRCeXRlcyhjb25zdCB1aW50OF90KiBieXRlcywgc2l6ZV90IGJ5dGVzU2l6ZSwgSXNFbmRPZlN0
cmVhbSBpc0VuZE9mU3RyZWFtKSAtPiBTdGF0ZQoreworICAgIGlmIChtX3N0YXRlID09IFN0YXRl
OjpGYXRhbEVycm9yKQorICAgICAgICByZXR1cm4gbV9zdGF0ZTsKKworICAgIG1fdG90YWxTaXpl
ICs9IGJ5dGVzU2l6ZTsKKyAgICBpZiAoVU5MSUtFTFkobV90b3RhbFNpemUuaGFzT3ZlcmZsb3dl
ZCgpIHx8IG1fdG90YWxTaXplLnVuc2FmZUdldCgpID4gbWF4TW9kdWxlU2l6ZSkpIHsKKyAgICAg
ICAgbV9zdGF0ZSA9IGZhaWwoIm1vZHVsZSBzaXplIGlzIHRvbyBsYXJnZSwgbWF4aW11bSAiLCBt
YXhNb2R1bGVTaXplKTsKKyAgICAgICAgcmV0dXJuIG1fc3RhdGU7CisgICAgfQorCisgICAgaWYg
KE9wdGlvbnM6OnVzZUVhZ2VyV2ViQXNzZW1ibHlNb2R1bGVIYXNoaW5nKCkpCisgICAgICAgIG1f
aGFzaGVyLmFkZEJ5dGVzKGJ5dGVzLCBieXRlc1NpemUpOworCisgICAgc2l6ZV90IG9mZnNldElu
Qnl0ZXMgPSAwOworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIHN3aXRjaCAobV9zdGF0ZSkg
eworICAgICAgICBjYXNlIFN0YXRlOjpNb2R1bGVIZWFkZXI6IHsKKyAgICAgICAgICAgIGF1dG8g
cmVzdWx0ID0gY29uc3VtZShieXRlcywgYnl0ZXNTaXplLCBvZmZzZXRJbkJ5dGVzLCBtb2R1bGVI
ZWFkZXJTaXplKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgICAgIHJl
dHVybiBtX3N0YXRlOworICAgICAgICAgICAgbV9zdGF0ZSA9IHBhcnNlTW9kdWxlSGVhZGVyKFdU
Rk1vdmUoKnJlc3VsdCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAg
ICBjYXNlIFN0YXRlOjpTZWN0aW9uSGVhZGVyOiB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9
IGNvbnN1bWUoYnl0ZXMsIGJ5dGVzU2l6ZSwgb2Zmc2V0SW5CeXRlcywgc2VjdGlvbkhlYWRlclNp
emUpOworICAgICAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1f
c3RhdGU7CisgICAgICAgICAgICBtX3N0YXRlID0gcGFyc2VTZWN0aW9uSGVhZGVyKFdURk1vdmUo
KnJlc3VsdCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNl
IFN0YXRlOjpTZWN0aW9uU2l6ZTogeworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBjb25zdW1l
VmFyVUludDMyKGJ5dGVzLCBieXRlc1NpemUsIG9mZnNldEluQnl0ZXMsIGlzRW5kT2ZTdHJlYW0p
OworICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0
LmVycm9yKCkgPT0gU3RhdGU6OkZhdGFsRXJyb3IpCisgICAgICAgICAgICAgICAgICAgIG1fc3Rh
dGUgPSBmYWlsT25TdGF0ZShtX3N0YXRlKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIG1fc3RhdGUgPSByZXN1bHQuZXJyb3IoKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9zdGF0ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fc3RhdGUgPSBwYXJz
ZVNlY3Rpb25TaXplKCpyZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICBjYXNlIFN0YXRlOjpTZWN0aW9uQm9keTogeworICAgICAgICAgICAgYXV0byByZXN1
bHQgPSBjb25zdW1lKGJ5dGVzLCBieXRlc1NpemUsIG9mZnNldEluQnl0ZXMsIG1fc2VjdGlvbkxl
bmd0aCk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4g
bV9zdGF0ZTsKKyAgICAgICAgICAgIG1fc3RhdGUgPSBwYXJzZVNlY3Rpb25Cb2R5KFdURk1vdmUo
KnJlc3VsdCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNl
IFN0YXRlOjpDb2RlU2VjdGlvblNpemU6IHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gY29u
c3VtZVZhclVJbnQzMihieXRlcywgYnl0ZXNTaXplLCBvZmZzZXRJbkJ5dGVzLCBpc0VuZE9mU3Ry
ZWFtKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgICAgICAgICAgaWYgKHJl
c3VsdC5lcnJvcigpID09IFN0YXRlOjpGYXRhbEVycm9yKQorICAgICAgICAgICAgICAgICAgICBt
X3N0YXRlID0gZmFpbE9uU3RhdGUobV9zdGF0ZSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICBtX3N0YXRlID0gcmVzdWx0LmVycm9yKCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIG1fc3RhdGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX3N0YXRlID0g
cGFyc2VDb2RlU2VjdGlvblNpemUoKnJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIGNhc2UgU3RhdGU6OkZ1bmN0aW9uSGVhZGVyOiB7CisgICAgICAgICAg
ICBhdXRvIHJlc3VsdCA9IGNvbnN1bWVWYXJVSW50MzIoYnl0ZXMsIGJ5dGVzU2l6ZSwgb2Zmc2V0
SW5CeXRlcywgaXNFbmRPZlN0cmVhbSk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkgeworICAg
ICAgICAgICAgICAgIGlmIChyZXN1bHQuZXJyb3IoKSA9PSBTdGF0ZTo6RmF0YWxFcnJvcikKKyAg
ICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IGZhaWxPblN0YXRlKG1fc3RhdGUpOworICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IHJlc3VsdC5lcnJv
cigpOworICAgICAgICAgICAgICAgIHJldHVybiBtX3N0YXRlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgbV9zdGF0ZSA9IHBhcnNlRnVuY3Rpb25IZWFkZXIoKnJlc3VsdCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgU3RhdGU6OkZ1bmN0aW9uQm9k
eTogeworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBjb25zdW1lKGJ5dGVzLCBieXRlc1NpemUs
IG9mZnNldEluQnl0ZXMsIG1fZnVuY3Rpb25TaXplKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0
KQorICAgICAgICAgICAgICAgIHJldHVybiBtX3N0YXRlOworICAgICAgICAgICAgbV9zdGF0ZSA9
IHBhcnNlRnVuY3Rpb25Cb2R5KFdURk1vdmUoKnJlc3VsdCkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFN0YXRlOjpGaW5pc2hlZDoKKyAgICAgICAgY2Fz
ZSBTdGF0ZTo6RmF0YWxFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBtX3N0YXRlOworICAgICAg
ICB9CisKKyAgICAgICAgbV9vZmZzZXQgPSBtX25leHRPZmZzZXQ7CisgICAgfQorfQorCithdXRv
IFN0cmVhbWluZ1BhcnNlcjo6ZmFpbE9uU3RhdGUoU3RhdGUpIC0+IFN0YXRlCit7CisgICAgc3dp
dGNoIChtX3N0YXRlKSB7CisgICAgY2FzZSBTdGF0ZTo6TW9kdWxlSGVhZGVyOgorICAgICAgICBy
ZXR1cm4gZmFpbCgiZXhwZWN0ZWQgYSBtb2R1bGUgb2YgYXQgbGVhc3QgIiwgbW9kdWxlSGVhZGVy
U2l6ZSwgIiBieXRlcyIpOworICAgIGNhc2UgU3RhdGU6OlNlY3Rpb25IZWFkZXI6CisgICAgICAg
IHJldHVybiBmYWlsKCJjYW4ndCBnZXQgc2VjdGlvbiBieXRlIik7CisgICAgY2FzZSBTdGF0ZTo6
U2VjdGlvblNpemU6CisgICAgICAgIHJldHVybiBmYWlsKCJjYW4ndCBnZXQgIiwgbV9zZWN0aW9u
LCAiIHNlY3Rpb24ncyBsZW5ndGgiKTsKKyAgICBjYXNlIFN0YXRlOjpTZWN0aW9uQm9keToKKyAg
ICAgICAgcmV0dXJuIGZhaWwobV9zZWN0aW9uLCAiIHNlY3Rpb24gb2Ygc2l6ZSAiLCBtX3NlY3Rp
b25MZW5ndGgsICIgd291bGQgb3ZlcmZsb3cgTW9kdWxlJ3Mgc2l6ZSIpOworICAgIGNhc2UgU3Rh
dGU6OkNvZGVTZWN0aW9uU2l6ZToKKyAgICAgICAgcmV0dXJuIGZhaWwoImNhbid0IGdldCBDb2Rl
IHNlY3Rpb24ncyBjb3VudCIpOworICAgIGNhc2UgU3RhdGU6OkZ1bmN0aW9uSGVhZGVyOgorICAg
ICAgICByZXR1cm4gZmFpbCgiY2FuJ3QgZ2V0ICIsIG1fZnVuY3Rpb25JbmRleCwgInRoIENvZGUg
ZnVuY3Rpb24ncyBzaXplIik7CisgICAgY2FzZSBTdGF0ZTo6RnVuY3Rpb25Cb2R5OgorICAgICAg
ICByZXR1cm4gZmFpbCgiQ29kZSBmdW5jdGlvbidzIHNpemUgIiwgbV9mdW5jdGlvblNpemUsICIg
ZXhjZWVkcyB0aGUgbW9kdWxlJ3MgcmVtYWluaW5nIHNpemUiKTsKKyAgICBjYXNlIFN0YXRlOjpG
aW5pc2hlZDoKKyAgICBjYXNlIFN0YXRlOjpGYXRhbEVycm9yOgorICAgICAgICByZXR1cm4gbV9z
dGF0ZTsKKyAgICB9CisgICAgcmV0dXJuIG1fc3RhdGU7Cit9CisKK2F1dG8gU3RyZWFtaW5nUGFy
c2VyOjpmaW5hbGl6ZSgpIC0+IFN0YXRlCit7CisgICAgYWRkQnl0ZXMobnVsbHB0ciwgMCwgSXNF
bmRPZlN0cmVhbTo6WWVzKTsKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIFN0YXRl
OjpNb2R1bGVIZWFkZXI6CisgICAgY2FzZSBTdGF0ZTo6U2VjdGlvblNpemU6CisgICAgY2FzZSBT
dGF0ZTo6U2VjdGlvbkJvZHk6CisgICAgY2FzZSBTdGF0ZTo6Q29kZVNlY3Rpb25TaXplOgorICAg
IGNhc2UgU3RhdGU6OkZ1bmN0aW9uSGVhZGVyOgorICAgIGNhc2UgU3RhdGU6OkZ1bmN0aW9uQm9k
eToKKyAgICAgICAgbV9zdGF0ZSA9IGZhaWxPblN0YXRlKG1fc3RhdGUpOworICAgICAgICBicmVh
azsKKworICAgIGNhc2UgU3RhdGU6OkZpbmlzaGVkOgorICAgIGNhc2UgU3RhdGU6OkZhdGFsRXJy
b3I6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTdGF0ZTo6U2VjdGlvbkhlYWRlcjoKKyAg
ICAgICAgaWYgKG1fcmVtYWluaW5nLnNpemUoKSA9PSAwKSB7CisgICAgICAgICAgICBpZiAoT3B0
aW9uczo6dXNlRWFnZXJXZWJBc3NlbWJseU1vZHVsZUhhc2hpbmcoKSkKKyAgICAgICAgICAgICAg
ICBtX2luZm8tPm5hbWVTZWN0aW9uLT5zZXRIYXNoKG1faGFzaGVyLmNvbXB1dGVIZXhEaWdlc3Qo
KSk7CisgICAgICAgICAgICBtX3N0YXRlID0gU3RhdGU6OkZpbmlzaGVkOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIG1fc3RhdGUgPSBmYWlsT25TdGF0ZShTdGF0ZTo6U2VjdGlvbkhlYWRl
cik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gbV9zdGF0ZTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TdHJlYW1pbmdQYXJz
ZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5lMGNkMTA3NzNiMmMwN2M5YzUyZDU5OTcyOTZkMDQ2MGMxNzY4YzA0Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1Bh
cnNlci5oCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFl1c3Vr
ZSBTdXp1a2kgPHl1c3VrZXN1enVraUBzbG93c3RhcnQub3JnPi4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCisKKyNpbmNsdWRlICJXYXNtTW9kdWxlSW5mb3JtYXRpb24uaCIKKyNpbmNsdWRl
ICJXYXNtUGFyc2VyLmgiCisjaW5jbHVkZSAiV2FzbVNlY3Rpb25zLmgiCisjaW5jbHVkZSA8d3Rm
L0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1NI
QTEuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK2NsYXNzIFN0cmVh
bWluZ1BhcnNlckNsaWVudCB7Cit9OworCitjbGFzcyBTdHJlYW1pbmdQYXJzZXIgeworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGVudW0gY2xhc3MgU3RhdGUgOiB1
aW50OF90IHsKKyAgICAgICAgTW9kdWxlSGVhZGVyLAorICAgICAgICBTZWN0aW9uSGVhZGVyLAor
ICAgICAgICBTZWN0aW9uU2l6ZSwKKyAgICAgICAgU2VjdGlvbkJvZHksCisgICAgICAgIENvZGVT
ZWN0aW9uU2l6ZSwKKyAgICAgICAgRnVuY3Rpb25IZWFkZXIsCisgICAgICAgIEZ1bmN0aW9uQm9k
eSwKKyAgICAgICAgRmluaXNoZWQsCisgICAgICAgIEZhdGFsRXJyb3IsCisgICAgfTsKKworICAg
IGVudW0gY2xhc3MgSXNFbmRPZlN0cmVhbSB7IFllcywgTm8gfTsKKworICAgIFN0cmVhbWluZ1Bh
cnNlcihNb2R1bGVJbmZvcm1hdGlvbiYpOworCisgICAgU3RhdGUgYWRkQnl0ZXMoY29uc3QgdWlu
dDhfdCogYnl0ZXMsIHNpemVfdCBsZW5ndGgpIHsgcmV0dXJuIGFkZEJ5dGVzKGJ5dGVzLCBsZW5n
dGgsIElzRW5kT2ZTdHJlYW06Ok5vKTsgfQorICAgIFN0YXRlIGZpbmFsaXplKCk7CisKKyAgICBj
b25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXJyb3JNZXNzYWdl
OyB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtb2R1bGVIZWFk
ZXJTaXplID0gODsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNlY3Rpb25IZWFkZXJT
aXplID0gMTsKKworICAgIFN0YXRlIGFkZEJ5dGVzKGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXpl
X3QgbGVuZ3RoLCBJc0VuZE9mU3RyZWFtKTsKKworICAgIFN0YXRlIHBhcnNlTW9kdWxlSGVhZGVy
KFZlY3Rvcjx1aW50OF90PiYmKTsKKyAgICBTdGF0ZSBwYXJzZVNlY3Rpb25IZWFkZXIoVmVjdG9y
PHVpbnQ4X3Q+JiYpOworICAgIFN0YXRlIHBhcnNlU2VjdGlvblNpemUodWludDMyX3QpOworICAg
IFN0YXRlIHBhcnNlU2VjdGlvbkJvZHkoVmVjdG9yPHVpbnQ4X3Q+JiYpOworCisgICAgU3RhdGUg
cGFyc2VDb2RlU2VjdGlvblNpemUodWludDMyX3QpOworICAgIFN0YXRlIHBhcnNlRnVuY3Rpb25I
ZWFkZXIodWludDMyX3QpOworICAgIFN0YXRlIHBhcnNlRnVuY3Rpb25Cb2R5KFZlY3Rvcjx1aW50
OF90PiYmKTsKKworICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBjb25zdW1lKGNv
bnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3QsIHNpemVfdCYsIHNpemVfdCk7CisgICAgRXhwZWN0
ZWQ8dWludDMyX3QsIFN0YXRlPiBjb25zdW1lVmFyVUludDMyKGNvbnN0IHVpbnQ4X3QqIGJ5dGVz
LCBzaXplX3QsIHNpemVfdCYsIElzRW5kT2ZTdHJlYW0pOworCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIC4uLkFyZ3M+IE5FVkVSX0lOTElORSBTdGF0ZSBXQVJOX1VOVVNFRF9SRVRVUk4gZmFpbChB
cmdzLi4uKTsKKworICAgIFN0YXRlIGZhaWxPblN0YXRlKFN0YXRlKTsKKworICAgIFJlZjxNb2R1
bGVJbmZvcm1hdGlvbj4gbV9pbmZvOworICAgIFZlY3Rvcjx1aW50OF90PiBtX3JlbWFpbmluZzsK
KyAgICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7CisKKyAgICBDaGVja2VkU2l6ZSBtX3RvdGFsU2l6
ZSB7IDAgfTsKKyAgICBzaXplX3QgbV9vZmZzZXQgeyAwIH07CisgICAgc2l6ZV90IG1fbmV4dE9m
ZnNldCB7IDAgfTsKKyAgICBzaXplX3QgbV9jb2RlT2Zmc2V0IHsgMCB9OworCisgICAgU0hBMSBt
X2hhc2hlcjsKKworICAgIHVpbnQzMl90IG1fdmVyc2lvbk51bWJlciB7IDAgfTsKKyAgICB1aW50
MzJfdCBtX3NlY3Rpb25MZW5ndGggeyAwIH07CisKKyAgICB1aW50MzJfdCBtX2Z1bmN0aW9uQ291
bnQgeyAwIH07CisgICAgdWludDMyX3QgbV9mdW5jdGlvbkluZGV4IHsgMCB9OworCisgICAgdWlu
dDMyX3QgbV9mdW5jdGlvblNpemUgeyAwIH07CisKKyAgICBTdGF0ZSBtX3N0YXRlIHsgU3RhdGU6
Ok1vZHVsZUhlYWRlciB9OworICAgIFNlY3Rpb24gbV9zZWN0aW9uIHsgU2VjdGlvbjo6QmVnaW4g
fTsKKyAgICBTZWN0aW9uIG1fcHJldmlvdXNLbm93blNlY3Rpb24geyBTZWN0aW9uOjpCZWdpbiB9
OworfTsKKworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxF
KFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseU1vZHVsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5TW9kdWxlLmNwcAppbmRleCAyM2ZlZjIyZTU4YmVlMWVmY2MwMjliYjc2OGUw
NTIyNmE5MjAzNmJlLi5hZWJjZTBjNDEwODM5MWQ2MWYxYTkyY2RmMjU5MDZkNGUxYmE4MjRiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9k
dWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
TW9kdWxlLmNwcApAQCAtMTQwLDExICsxNDAsNiBAQCB2b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICAg
ICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9jb2RlQmxvY2tzW2ldKTsKIH0KIAotY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpzb3VyY2UoKSBjb25zdAot
ewotICAgIHJldHVybiBtb2R1bGVJbmZvcm1hdGlvbigpLnNvdXJjZTsKLX0KLQogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKaW5kZXggMTdi
ZWQ2MTI1ZjRlN2YzMTlhOGI3YWYyZTFkZGY4NjRhZWIyZmE1YS4uZDM5MzAwNjkxOWQyN2FkMTc0
NjlmZTI2OTVkYjg0Mzg0MjNkMDgyZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaApAQCAtNjgsOCArNjgsNiBAQCBjbGFzcyBK
U1dlYkFzc2VtYmx5TW9kdWxlIGZpbmFsIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsK
ICAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2soV2FzbTo6TWVtb3J5TW9kZSBt
b2RlKTsKICAgICB2b2lkIHNldENvZGVCbG9jayhWTSYsIFdhc206Ok1lbW9yeU1vZGUsIEpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2sqKTsKIAotICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgc291cmNl
KCkgY29uc3Q7Ci0KICAgICBKU19FWFBPUlRfUFJJVkFURSBXYXNtOjpNb2R1bGUmIG1vZHVsZSgp
OwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlQcm90b3R5cGUuY3BwCmluZGV4IDk2ZDRjMTRkNzRjN2VlMWFmOGFlZTc2MTBj
NDk0YWE3Yzk0YjA2YzUuLmRjYWRjMGQwZGJjZTVhOWQyNTUzYTRkYmRjOGNlNGI0ZmNjNWQ0NTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5UHJv
dG90eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eVByb3RvdHlwZS5jcHAKQEAgLTI5NCwxMCArMjk0LDEwIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5VmFsaWRhdGVGdW5jKEV4ZWNTdGF0ZSogZXhlYykK
ICAgICBzaXplX3QgYnl0ZVNpemU7CiAgICAgc3RkOjp0aWUoYmFzZSwgYnl0ZVNpemUpID0gZ2V0
V2FzbUJ1ZmZlckZyb21WYWx1ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgQkJRUGxhbiBwbGFu
KCZ2bS53YXNtQ29udGV4dCwgYmFzZSwgYnl0ZVNpemUsIEJCUVBsYW46OlZhbGlkYXRpb24sIFBs
YW46OmRvbnRGaW5hbGl6ZSgpKTsKKyAgICBCQlFQbGFuIHBsYW4oJnZtLndhc21Db250ZXh0LCBC
QlFQbGFuOjpWYWxpZGF0aW9uLCBQbGFuOjpkb250RmluYWxpemUoKSk7CiAgICAgLy8gRklYTUU6
IFdlIG1pZ2h0IHdhbnQgdG8gdGhyb3cgYW4gT09NIGV4Y2VwdGlvbiBoZXJlIGlmIHdlIGRldGVj
dCB0aGF0IHNvbWV0aGluZyB3aWxsIE9PTS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY2MDE1Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jv
b2xlYW4ocGxhbi5wYXJzZUFuZFZhbGlkYXRlTW9kdWxlKCkpKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzQm9vbGVhbihwbGFuLnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoYmFzZSwgYnl0
ZVNpemUpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlD
b21waWxlU3RyZWFtaW5nSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvTEVCRGVjb2Rlci5oIGIvU291cmNlL1dURi93dGYvTEVCRGVjb2Rlci5oCmlu
ZGV4IDk0NjI3NzBjNjk5Y2QwNWVhNjU3M2UzZWQ5YzFjOTc1YThiNTE1MDcuLjk5YTVjMDlhZDRh
NTQxOGM4MGQwMTM3YjEwZTAwZDBiNDI2YzA4ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L0xFQkRlY29kZXIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9MRUJEZWNvZGVyLmgKQEAgLTM2LDE1
ICszNiwyMCBAQAogbmFtZXNwYWNlIFdURiB7IG5hbWVzcGFjZSBMRUJEZWNvZGVyIHsKIAogdGVt
cGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBkZWNvZGVV
SW50KGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBzaXplX3QmIG9mZnNldCwg
VCYgcmVzdWx0KQoraW5saW5lIGNvbnN0ZXhwciBzaXplX3QgbWF4Qnl0ZUxlbmd0aCgpCiB7CiAg
ICAgY29uc3Qgc2l6ZV90IG51bUJpdHMgPSBzaXplb2YoVCkgKiBDSEFSX0JJVDsKLSAgICBjb25z
dCBzaXplX3QgbWF4Qnl0ZUxlbmd0aCA9IChudW1CaXRzIC0gMSkgLyA3ICsgMTsgLy8gbnVtQml0
cyAvIDcgcm91bmRpbmcgdXAuCisgICAgcmV0dXJuIChudW1CaXRzIC0gMSkgLyA3ICsgMTsgLy8g
bnVtQml0cyAvIDcgcm91bmRpbmcgdXAuCit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citpbmxp
bmUgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gZGVjb2RlVUludChjb25zdCB1aW50OF90KiBieXRl
cywgc2l6ZV90IGxlbmd0aCwgc2l6ZV90JiBvZmZzZXQsIFQmIHJlc3VsdCkKK3sKICAgICBpZiAo
bGVuZ3RoIDw9IG9mZnNldCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJlc3VsdCA9IDA7
CiAgICAgdW5zaWduZWQgc2hpZnQgPSAwOwotICAgIHNpemVfdCBsYXN0ID0gc3RkOjptaW4obWF4
Qnl0ZUxlbmd0aCwgbGVuZ3RoIC0gb2Zmc2V0KSAtIDE7CisgICAgc2l6ZV90IGxhc3QgPSBzdGQ6
Om1pbihtYXhCeXRlTGVuZ3RoPFQ+KCksIGxlbmd0aCAtIG9mZnNldCkgLSAxOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IHRydWU7ICsraSkgewogICAgICAgICB1aW50OF90IGJ5dGUgPSBieXRl
c1tvZmZzZXQrK107CiAgICAgICAgIHJlc3VsdCB8PSBzdGF0aWNfY2FzdDxUPihieXRlICYgMHg3
ZikgPDwgc2hpZnQ7CkBAIC02MSwxMyArNjYsMTEgQEAgaW5saW5lIGJvb2wgV0FSTl9VTlVTRURf
UkVUVVJOIGRlY29kZVVJbnQoY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIHMK
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBpbmxpbmUgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gZGVj
b2RlSW50KGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBzaXplX3QmIG9mZnNl
dCwgVCYgcmVzdWx0KQogewotICAgIGNvbnN0IHNpemVfdCBudW1CaXRzID0gc2l6ZW9mKFQpICog
Q0hBUl9CSVQ7Ci0gICAgY29uc3Qgc2l6ZV90IG1heEJ5dGVMZW5ndGggPSAobnVtQml0cyAtIDEp
IC8gNyArIDE7IC8vIG51bUJpdHMgLyA3IHJvdW5kaW5nIHVwLgogICAgIGlmIChsZW5ndGggPD0g
b2Zmc2V0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmVzdWx0ID0gMDsKICAgICB1bnNp
Z25lZCBzaGlmdCA9IDA7Ci0gICAgc2l6ZV90IGxhc3QgPSBzdGQ6Om1pbihtYXhCeXRlTGVuZ3Ro
LCBsZW5ndGggLSBvZmZzZXQpIC0gMTsKKyAgICBzaXplX3QgbGFzdCA9IHN0ZDo6bWluKG1heEJ5
dGVMZW5ndGg8VD4oKSwgbGVuZ3RoIC0gb2Zmc2V0KSAtIDE7CiAgICAgdWludDhfdCBieXRlOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IHRydWU7ICsraSkgewogICAgICAgICBieXRlID0gYnl0
ZXNbb2Zmc2V0KytdOwpAQCAtODAsNiArODMsNyBAQCBpbmxpbmUgYm9vbCBXQVJOX1VOVVNFRF9S
RVRVUk4gZGVjb2RlSW50KGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBzaQog
ICAgIH0KIAogICAgIHVzaW5nIFVuc2lnbmVkVCA9IHR5cGVuYW1lIHN0ZDo6bWFrZV91bnNpZ25l
ZDxUPjo6dHlwZTsKKyAgICBjb25zdCBzaXplX3QgbnVtQml0cyA9IHNpemVvZihUKSAqIENIQVJf
QklUOwogICAgIGlmIChzaGlmdCA8IG51bUJpdHMgJiYgKGJ5dGUgJiAweDQwKSkKICAgICAgICAg
cmVzdWx0ID0gc3RhdGljX2Nhc3Q8VD4oc3RhdGljX2Nhc3Q8VW5zaWduZWRUPihyZXN1bHQpIHwg
KHN0YXRpY19jYXN0PFVuc2lnbmVkVD4oLTEpIDw8IHNoaWZ0KSk7CiAgICAgcmV0dXJuIHRydWU7
CmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4
IDQ3MTAwZGI3MDcwNGYwZDQ2NjQ2OGY4NGE2NzMxZjY0MjlhYmEzNGUuLjk0MjAzODE4YjQwNjRm
MTM1ZmQ2NDVkMjk0OTZiMjRlNjdiZGFjMjUgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9n
CisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIgQEAKKzIwMTgtMDgtMjcgIFl1
c3VrZSBTdXp1a2kgIDx5dXN1a2VzdXp1a2lAc2xvd3N0YXJ0Lm9yZz4KKworICAgICAgICBbV2Vi
QXNzZW1ibHldIFBhcnNlIHdhc20gbW9kdWxlcyBpbiBhIHN0cmVhbWluZyBmYXNoaW9uCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODg5NDMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXYXNtIHBhcnNpbmcg
ZXJyb3Igc2hvdWxkIG5vdCByZXBvcnQgdGhlIHRvdGFsIGJ5dGUgc2l6ZSBzaW5jZSBzdHJlYW1p
bmcgcGFyc2luZyBkb2VzIG5vdAorICAgICAgICB3YW50IHRvIGxvYWQgYWxsIHRoZSBieXRlcy4K
KyAgICAgICAgQWRkIGEgc2ltcGxlIHRlc3Qgd2FzbS9zdHJlc3Mvc3RyZWFtaW5nLWJhc2ljLmpz
IGZvciBpbml0aWFsIHN0cmVhbWluZyBwYXJzaW5nIGltcGxlbWVudGF0aW9uLgorCisgICAgICAg
ICogd2FzbS9mdW5jdGlvbi10ZXN0cy9pbnZhbGlkLWR1cGxpY2F0ZS1leHBvcnQuanM6CisgICAg
ICAgICogd2FzbS9mdW5jdGlvbi10ZXN0cy9tZW1vcnktYWxpZ25tZW50LmpzOgorICAgICAgICAo
Y29uc3Qub3Aub2YuV0FTTS5vcGNvZGVzKToKKyAgICAgICAgKiB3YXNtL2Z1bmN0aW9uLXRlc3Rz
L21lbW9yeS1zZWN0aW9uLWFuZC1pbXBvcnQuanM6CisgICAgICAgICogd2FzbS9mdW5jdGlvbi10
ZXN0cy92b2lkLWFyZ3VtZW50LXR5cGUtc2hvdWxkLWJlLWEtdmFsaWRhdGlvbi1lcnJvci5qczoK
KyAgICAgICAgKiB3YXNtL2pzLWFwaS9Nb2R1bGUtY29tcGlsZS5qczoKKyAgICAgICAgKGFzeW5j
LnRlc3RQcm9taXNlQVBJKToKKyAgICAgICAgKiB3YXNtL2pzLWFwaS9lbGVtZW50LmpzOgorICAg
ICAgICAoYXNzZXJ0LnRocm93cy5uZXcuV2ViQXNzZW1ibHkuTW9kdWxlLmJ1aWxkZXIuV2ViQXNz
ZW1ibHkpOgorICAgICAgICAoYXNzZXJ0LnRocm93cyk6CisgICAgICAgICogd2FzbS9qcy1hcGkv
Z2xvYmFsLWVycm9yLmpzOgorICAgICAgICAoYXNzZXJ0LnRocm93cy5uZXcuV2ViQXNzZW1ibHku
TW9kdWxlLmJpbik6CisgICAgICAgIChhc3NlcnQudGhyb3dzKToKKyAgICAgICAgKiB3YXNtL2pz
LWFwaS90YWJsZS5qczoKKyAgICAgICAgKG5ldy5XZWJBc3NlbWJseS5Nb2R1bGUpOgorICAgICAg
ICAoYXNzZXJ0LnRocm93cyk6CisgICAgICAgIChhc3NlcnRCYWRUYWJsZUltcG9ydCk6CisgICAg
ICAgICogd2FzbS9qcy1hcGkvdGVzdF9EYXRhLmpzOgorICAgICAgICAoRGF0YVNlY3Rpb25XaXRo
b3V0TWVtb3J5KToKKyAgICAgICAgKiB3YXNtL2pzLWFwaS90ZXN0X1N0YXJ0LmpzOgorICAgICAg
ICAoSW52YWxpZFN0YXJ0RnVuY3Rpb25JbmRleCk6CisgICAgICAgICogd2FzbS9qcy1hcGkvdGVz
dF9iYXNpY19hcGkuanM6CisgICAgICAgIChjb25zdC5jLmluLmNvbnN0cnVjdG9yUHJvcGVydGll
cy5zd2l0Y2gpOgorICAgICAgICAqIHdhc20vanMtYXBpL3ZlcnNpb24uanM6CisgICAgICAgICog
d2FzbS9zdHJlc3MvbmFtZVNlY3Rpb24ud2FzbTogQWRkZWQuCisgICAgICAgICogd2FzbS9zdHJl
c3Mvc3RyZWFtaW5nLWJhc2ljLmpzOiBBZGRlZC4KKyAgICAgICAgKGNoZWNrKToKKwogMjAxOC0w
OC0yNCAgWXVzdWtlIFN1enVraSAgPHl1c3VrZXN1enVraUBzbG93c3RhcnQub3JnPgogCiAgICAg
ICAgIFtKU0NdIEFycmF5LnByb3RvdHlwZS5yZXZlcnNlIG1vZGlmaWVzIEpTSW1tdXRhYmxlQnV0
dGVyZmx5CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvaW52YWxpZC1k
dXBsaWNhdGUtZXhwb3J0LmpzIGIvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL2ludmFsaWQt
ZHVwbGljYXRlLWV4cG9ydC5qcwppbmRleCBjNDdiMWUxNjYyYzJjYjYwYzkzZDZjOWI5NTczOWJk
YWJhNzgwZTczLi40MThkNTFhYTQ5OTAxOWFhMjQ2OWJhYTVmMWZkOGUxYWJkM2JmMjkxIDEwMDY0
NAotLS0gYS9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvaW52YWxpZC1kdXBsaWNhdGUtZXhw
b3J0LmpzCisrKyBiL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9pbnZhbGlkLWR1cGxpY2F0
ZS1leHBvcnQuanMKQEAgLTE1LDUgKzE1LDUgQEAKICAgICAgICAgLkVuZCgpOwogCiAgICAgY29u
c3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOwotICAgIGFzc2VydC50aHJvd3Mo
KCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pLCBXZWJBc3NlbWJseS5Db21waWxlRXJy
b3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDMxIC8gMzk6IGR1
cGxpY2F0ZSBleHBvcnQ6ICdmb28nIik7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2Vi
QXNzZW1ibHkuTW9kdWxlKGJpbiksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2Vt
Ymx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzE6IGR1cGxpY2F0ZSBleHBvcnQ6ICdm
b28nIik7CiB9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5
LWFsaWdubWVudC5qcyBiL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9tZW1vcnktYWxpZ25t
ZW50LmpzCmluZGV4IGFiYzU3NDEyMTQ2ZjJlMzk3MjYxZTczMjZlY2M4YTVjODE5YTA0OWMuLmU2
MDU4OTg5MDBhYTFiZWQ2N2I5ZDMyYWM2ZjJhYTAxMmViMjk5ZWUgMTAwNjQ0Ci0tLSBhL0pTVGVz
dHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9tZW1vcnktYWxpZ25tZW50LmpzCisrKyBiL0pTVGVzdHMv
d2FzbS9mdW5jdGlvbi10ZXN0cy9tZW1vcnktYWxpZ25tZW50LmpzCkBAIC00Miw3ICs0Miw3IEBA
CiAgICAgICAgIGlmIChhbGlnbkxvZzIgPD0gbWF4QWxpZ25Mb2cyKQogICAgICAgICAgICAgaW5z
dGFuY2UoKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgYXNzZXJ0LnRocm93cyhpbnN0YW5j
ZSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCBgV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3Qg
cGFyc2UgYXQgYnl0ZSAke3N0YXJ0fSAvICR7ZW5kfTogYnl0ZSBhbGlnbm1lbnQgJHsxIDw8IGFs
aWduTG9nMn0gZXhjZWVkcyAke2luZm8udHlwZX0ncyBuYXR1cmFsIGFsaWdubWVudCAkezEgPDwg
bWF4QWxpZ25Mb2cyfSwgaW4gZnVuY3Rpb24gYXQgaW5kZXggMGApOworICAgICAgICAgICAgYXNz
ZXJ0LnRocm93cyhpbnN0YW5jZSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCBgV2ViQXNzZW1i
bHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAke3N0YXJ0fTogYnl0ZSBhbGlnbm1lbnQg
JHsxIDw8IGFsaWduTG9nMn0gZXhjZWVkcyAke2luZm8udHlwZX0ncyBuYXR1cmFsIGFsaWdubWVu
dCAkezEgPDwgbWF4QWxpZ25Mb2cyfSwgaW4gZnVuY3Rpb24gYXQgaW5kZXggMGApOwogCiAgICAg
fQogfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL21lbW9yeS1zZWN0
aW9uLWFuZC1pbXBvcnQuanMgYi9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LXNl
Y3Rpb24tYW5kLWltcG9ydC5qcwppbmRleCBhMWRiOWNlMjU3NzkzNTBiNWJkNTU3N2Y3NjdlNjY3
Nzc0YmQ4YjBiLi4xNTIwN2VmNzE4OGVmYTBmNjkyMzU3M2MxZGZlYTVhM2VhNWI3MWZmIDEwMDY0
NAotLS0gYS9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LXNlY3Rpb24tYW5kLWlt
cG9ydC5qcworKysgYi9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LXNlY3Rpb24t
YW5kLWltcG9ydC5qcwpAQCAtMjgsNCArMjgsNCBAQAogICAgICAgLkNvZGUoKS5FbmQoKTsKIAog
Y29uc3QgaTAgPSBpbnN0YW50aWF0ZShidWlsZGVyMCk7Ci1hc3NlcnQudGhyb3dzKCgpID0+IGlu
c3RhbnRpYXRlKGJ1aWxkZXIxLCB7IGltcDogeyBtZW1vcnk6IGkwLmV4cG9ydHMubWVtb3J5IH0g
fSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgYFdlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0
IHBhcnNlIGF0IGJ5dGUgMzUgLyA0MTogdGhlcmUgY2FuIGF0IG1vc3QgYmUgb25lIE1lbW9yeSBz
ZWN0aW9uIGZvciBub3dgKTsKK2Fzc2VydC50aHJvd3MoKCkgPT4gaW5zdGFudGlhdGUoYnVpbGRl
cjEsIHsgaW1wOiB7IG1lbW9yeTogaTAuZXhwb3J0cy5tZW1vcnkgfSB9KSwgV2ViQXNzZW1ibHku
Q29tcGlsZUVycm9yLCBgV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAz
NTogdGhlcmUgY2FuIGF0IG1vc3QgYmUgb25lIE1lbW9yeSBzZWN0aW9uIGZvciBub3dgKTsKZGlm
ZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy92b2lkLWFyZ3VtZW50LXR5cGUt
c2hvdWxkLWJlLWEtdmFsaWRhdGlvbi1lcnJvci5qcyBiL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10
ZXN0cy92b2lkLWFyZ3VtZW50LXR5cGUtc2hvdWxkLWJlLWEtdmFsaWRhdGlvbi1lcnJvci5qcwpp
bmRleCA0NzE0OWIxZDdmYjkzMjMxYzI1ZDA3OGE4NjI5OGI3NTAyYmZmNjhhLi4yMTc4ODEwYTc4
MTdkOTczMzVlNjJmNzhiM2ZjNTE3ZTNmZTc3ZTQxIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20v
ZnVuY3Rpb24tdGVzdHMvdm9pZC1hcmd1bWVudC10eXBlLXNob3VsZC1iZS1hLXZhbGlkYXRpb24t
ZXJyb3IuanMKKysrIGIvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL3ZvaWQtYXJndW1lbnQt
dHlwZS1zaG91bGQtYmUtYS12YWxpZGF0aW9uLWVycm9yLmpzCkBAIC0xNyw2ICsxNyw2IEBAIGZ1
bmN0aW9uIGdldEJpbmFyeShwYXJhbXMpIHsKICAgICByZXR1cm4gYnVpbGRlci5XZWJBc3NlbWJs
eSgpLmdldCgpOwogfQogCi1hc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1
bGUoZ2V0QmluYXJ5KFsiaTMyIiwgInZvaWQiXSkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3Is
ICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE1IC8gNDc6IGNhbid0
IGdldCAxdGggYXJndW1lbnQgVHlwZSIpOwotYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGdldEJpbmFyeShbInZvaWQiXSkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJy
b3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE0IC8gNDY6IGNh
bid0IGdldCAwdGggYXJndW1lbnQgVHlwZSIpOwotYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2Vi
QXNzZW1ibHkuTW9kdWxlKGdldEJpbmFyeShbImkzMiIsICJ2b2lkIiwgImkzMiJdKSksIFdlYkFz
c2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0
IGJ5dGUgMTUgLyA0ODogY2FuJ3QgZ2V0IDF0aCBhcmd1bWVudCBUeXBlIik7Cithc3NlcnQudGhy
b3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoZ2V0QmluYXJ5KFsiaTMyIiwgInZvaWQi
XSkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24n
dCBwYXJzZSBhdCBieXRlIDE1OiBjYW4ndCBnZXQgMXRoIGFyZ3VtZW50IFR5cGUiKTsKK2Fzc2Vy
dC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShnZXRCaW5hcnkoWyJ2b2lkIl0p
KSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3Qg
cGFyc2UgYXQgYnl0ZSAxNDogY2FuJ3QgZ2V0IDB0aCBhcmd1bWVudCBUeXBlIik7Cithc3NlcnQu
dGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoZ2V0QmluYXJ5KFsiaTMyIiwgInZv
aWQiLCAiaTMyIl0pKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9k
dWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxNTogY2FuJ3QgZ2V0IDF0aCBhcmd1bWVudCBUeXBl
Iik7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vanMtYXBpL01vZHVsZS1jb21waWxlLmpzIGIv
SlNUZXN0cy93YXNtL2pzLWFwaS9Nb2R1bGUtY29tcGlsZS5qcwppbmRleCBkM2JlYjMzMjU3N2Fl
ZGIwNThjOGU0MWQyM2FkZGE5YzkxZjFkZjc4Li5kNzIzYmY0ZDcwYjQ5YzQ5YTEzNjVmZGM2N2I0
NTI0MmIzODI3MmU2IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vanMtYXBpL01vZHVsZS1jb21w
aWxlLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvTW9kdWxlLWNvbXBpbGUuanMKQEAgLTIx
LDcgKzIxLDcgQEAgYXN5bmMgZnVuY3Rpb24gdGVzdFByb21pc2VBUEkoKSB7CiAgICAgICAgICAg
ICBhd2FpdCBXZWJBc3NlbWJseS5jb21waWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSk7
CiAgICAgICAgIH0gY2F0Y2goZSkgewogICAgICAgICAgICAgYXNzZXJ0LnRydXRoeShlIGluc3Rh
bmNlb2YgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yKTsKLSAgICAgICAgICAgIGFzc2VydC50cnV0
aHkoZS5tZXNzYWdlID09PSAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0
ZSAzNCAvIDQzOiB0aGVyZSBjYW4gYXQgbW9zdCBiZSBvbmUgTWVtb3J5IHNlY3Rpb24gZm9yIG5v
dyIpOworICAgICAgICAgICAgYXNzZXJ0LnRydXRoeShlLm1lc3NhZ2UgPT09ICJXZWJBc3NlbWJs
eS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDM0OiB0aGVyZSBjYW4gYXQgbW9zdCBiZSBv
bmUgTWVtb3J5IHNlY3Rpb24gZm9yIG5vdyIpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1n
aXQgYS9KU1Rlc3RzL3dhc20vanMtYXBpL2VsZW1lbnQuanMgYi9KU1Rlc3RzL3dhc20vanMtYXBp
L2VsZW1lbnQuanMKaW5kZXggMTg4YWM3NDE1MTEyNjA0OGI4MjcyNDhkYzQ3MzgyMDVhYTg2YTE0
OS4uZmNiZTI4MjdmMzcxNjYzYWE4NGZkZjVjMTAxMDBiODE3ODE3NzM5MCAxMDA2NDQKLS0tIGEv
SlNUZXN0cy93YXNtL2pzLWFwaS9lbGVtZW50LmpzCisrKyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkv
ZWxlbWVudC5qcwpAQCAtMTgsNyArMTgsNyBAQAogICAgICAgICAgICAgLkVuZCgpCiAgICAgICAg
IC5FbmQoKTsKIAotICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVs
ZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3Is
ICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI0IC8gNDE6IEVsZW1l
bnQgc2VjdGlvbiBmb3IgVGFibGUgMCBleGNlZWRzIGF2YWlsYWJsZSBUYWJsZSAwIik7CisgICAg
YXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNz
ZW1ibHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1v
ZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjQ6IEVsZW1lbnQgc2VjdGlvbiBmb3IgVGFibGUg
MCBleGNlZWRzIGF2YWlsYWJsZSBUYWJsZSAwIik7CiB9CiAKIHsKQEAgLTQxLDcgKzQxLDcgQEAK
ICAgICAgICAgICAgIC5FbmQoKQogICAgICAgICAuRW5kKCk7CiAKLSAgICBhc3NlcnQudGhyb3dz
KCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgp
KSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3Qg
cGFyc2UgYXQgYnl0ZSAzMCAvIDQ3OiBFbGVtZW50IHNlY3Rpb24gZm9yIFRhYmxlIDEgZXhjZWVk
cyBhdmFpbGFibGUgVGFibGUgMSIpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFz
c2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5D
b21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDMw
OiBFbGVtZW50IHNlY3Rpb24gZm9yIFRhYmxlIDEgZXhjZWVkcyBhdmFpbGFibGUgVGFibGUgMSIp
OwogfQogCiB7CkBAIC0xMTIsNyArMTEyLDcgQEAKICAgICAgICAgICAgIC5FbmQoKQogICAgICAg
ICAuRW5kKCk7CiAKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1
bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9y
LCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzOCAvIDUwOiBFbGVt
ZW50IHNlY3Rpb24ncyAwdGggZWxlbWVudCdzIDJ0aCBpbmRleCBpcyAxIHdoaWNoIGV4Y2VlZHMg
dGhlIGZ1bmN0aW9uIGluZGV4IHNwYWNlIHNpemUgb2YgMSAoZXZhbHVhdGluZyAnbmV3IFdlYkFz
c2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiKTsKKyAgICBhc3Nl
cnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJs
eSgpLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxl
IGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzODogRWxlbWVudCBzZWN0aW9uJ3MgMHRoIGVsZW1lbnQn
cyAydGggaW5kZXggaXMgMSB3aGljaCBleGNlZWRzIHRoZSBmdW5jdGlvbiBpbmRleCBzcGFjZSBz
aXplIG9mIDEgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJB
c3NlbWJseSgpLmdldCgpKScpIik7CiB9CiAKIHsKQEAgLTIxNSw1ICsyMTUsNSBAQCBmdW5jdGlv
biBiYWRNb2R1bGUoKSB7CiAgICAgICAgIHJldHVybiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJp
bik7CiAgICAgfQogCi0gICAgYXNzZXJ0LnRocm93cygoKSA9PiBiYWRNb2R1bGUoKSwgV2ViQXNz
ZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQg
Ynl0ZSA1OCAvIDcyOiBFbGVtZW50IGluaXRfZXhwciBtdXN0IHByb2R1Y2UgYW4gaTMyIik7Cisg
ICAgYXNzZXJ0LnRocm93cygoKSA9PiBiYWRNb2R1bGUoKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVy
cm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSA1ODogRWxlbWVu
dCBpbml0X2V4cHIgbXVzdCBwcm9kdWNlIGFuIGkzMiIpOwogfQpkaWZmIC0tZ2l0IGEvSlNUZXN0
cy93YXNtL2pzLWFwaS9nbG9iYWwtZXJyb3IuanMgYi9KU1Rlc3RzL3dhc20vanMtYXBpL2dsb2Jh
bC1lcnJvci5qcwppbmRleCAwOWY4ZDc5OWRjNGUyZjM5ZDlhNTQzMDJjYWFiZGU3YTc2ZDUxMDdi
Li5kM2VkZjg5OGU3ZDlmYTA3ZTQ3MGNmYzMyYzZhYjM2ZjE3MzFiNTEzIDEwMDY0NAotLS0gYS9K
U1Rlc3RzL3dhc20vanMtYXBpL2dsb2JhbC1lcnJvci5qcworKysgYi9KU1Rlc3RzL3dhc20vanMt
YXBpL2dsb2JhbC1lcnJvci5qcwpAQCAtMjMsNyArMjMsNyBAQAogICAgIGNvbnN0IGJpbiA9IGJ1
aWxkZXIuV2ViQXNzZW1ibHkoKTsKICAgICBiaW4udHJpbSgpOwogCi0gICAgYXNzZXJ0LnRocm93
cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbi5nZXQoKSksIFdlYkFzc2VtYmx5LkNv
bXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjYg
LyA1OTogZ2V0X2dsb2JhbCdzIGluZGV4IDAgZXhjZWVkcyB0aGUgbnVtYmVyIG9mIGdsb2JhbHMg
MCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4uZ2V0KCkpJykiKTsKKyAg
ICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKSwg
V2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFy
c2UgYXQgYnl0ZSAyNjogZ2V0X2dsb2JhbCdzIGluZGV4IDAgZXhjZWVkcyB0aGUgbnVtYmVyIG9m
IGdsb2JhbHMgMCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4uZ2V0KCkp
JykiKTsKIH0KIAogCkBAIC01Miw3ICs1Miw3IEBACiAgICAgY29uc3QgYmluID0gYnVpbGRlci5X
ZWJBc3NlbWJseSgpOwogICAgIGJpbi50cmltKCk7CiAKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+
IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVy
cm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzMiAvIDc2OiBN
dXRhYmxlIEdsb2JhbHMgYXJlbid0IHN1cHBvcnRlZCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2Vt
Ymx5Lk1vZHVsZShiaW4uZ2V0KCkpJykiKTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBX
ZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAi
V2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzMjogTXV0YWJsZSBHbG9i
YWxzIGFyZW4ndCBzdXBwb3J0ZWQgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUo
YmluLmdldCgpKScpIik7CiB9CiAKIHsKQEAgLTc3LDcgKzc3LDcgQEAKICAgICBjb25zdCBiaW4g
PSBidWlsZGVyLldlYkFzc2VtYmx5KCk7CiAgICAgYmluLnRyaW0oKTsKIAotICAgIGFzc2VydC50
aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4uZ2V0KCkpLCBXZWJBc3NlbWJs
eS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRl
IDUxIC8gNTk6IDF0aCBFeHBvcnQgaXNuJ3QgaW1tdXRhYmxlLCBuYW1lZCAnZ2xvYmFsJyAoZXZh
bHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4uZ2V0KCkpJykiKTsKKyAgICBhc3Nl
cnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKSwgV2ViQXNz
ZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQg
Ynl0ZSA1MTogMXRoIEV4cG9ydCBpc24ndCBpbW11dGFibGUsIG5hbWVkICdnbG9iYWwnIChldmFs
dWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbi5nZXQoKSknKSIpOwogfQogCiB7CmRp
ZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vanMtYXBpL3RhYmxlLmpzIGIvSlNUZXN0cy93YXNtL2pz
LWFwaS90YWJsZS5qcwppbmRleCBiODMyZTExNzY2NDEzMDIzMGZjODBiZmIxMzBjMTM2NmEzMTJl
MzI1Li5jZjY4YjQ0MDQ5NWY2YmU2ZjhiMjc5NDc3MTI0NTZkN2NhN2M4YzZmIDEwMDY0NAotLS0g
YS9KU1Rlc3RzL3dhc20vanMtYXBpL3RhYmxlLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkv
dGFibGUuanMKQEAgLTEzLDcgKzEzLDcgQEAKICAgICAgICAgLkVuZCgpCiAgICAgICAgIC5Db2Rl
KCkKICAgICAgICAgLkVuZCgpOwotICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2Vt
Ymx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21w
aWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDM0IC8g
NDE6IENhbm5vdCBoYXZlIG1vcmUgdGhhbiBvbmUgVGFibGUgZm9yIG5vdyIpOworICAgIGFzc2Vy
dC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5
KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUg
ZG9lc24ndCBwYXJzZSBhdCBieXRlIDM0OiBDYW5ub3QgaGF2ZSBtb3JlIHRoYW4gb25lIFRhYmxl
IGZvciBub3ciKTsKIH0KIAogewpAQCAtMzgsNyArMzgsNyBAQAogICAgICAgICAuRW5kKCkKICAg
ICAgICAgLkNvZGUoKQogICAgICAgICAuRW5kKCk7Ci0gICAgYXNzZXJ0LnRocm93cygoKSA9PiBu
ZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIFdlYkFz
c2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0
IGJ5dGUgMTcgLyAyODogVGFibGUgY291bnQgb2YgMiBpcyBpbnZhbGlkLCBhdCBtb3N0IDEgaXMg
YWxsb3dlZCBmb3Igbm93IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxk
ZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3
IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3Nl
bWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBi
eXRlIDE3OiBUYWJsZSBjb3VudCBvZiAyIGlzIGludmFsaWQsIGF0IG1vc3QgMSBpcyBhbGxvd2Vk
IGZvciBub3cgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJB
c3NlbWJseSgpLmdldCgpKScpIik7CiB9CiAKIHsKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICAg
ICAgICAgICAuQ2FsbEluZGlyZWN0KDAsIDApCiAgICAgICAgICAgICAuRW5kKCkKICAgICAgICAg
LkVuZCgpOwotICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShi
dWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJX
ZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDQgLyA3OiBjYWxsX2luZGly
ZWN0IGlzIG9ubHkgdmFsaWQgd2hlbiBhIHRhYmxlIGlzIGRlZmluZWQgb3IgaW1wb3J0ZWQsIGlu
IGZ1bmN0aW9uIGF0IGluZGV4IDAgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUo
YnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIik7CisgICAgYXNzZXJ0LnRocm93cygoKSA9
PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIFdl
YkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNl
IGF0IGJ5dGUgNDogY2FsbF9pbmRpcmVjdCBpcyBvbmx5IHZhbGlkIHdoZW4gYSB0YWJsZSBpcyBk
ZWZpbmVkIG9yIGltcG9ydGVkLCBpbiBmdW5jdGlvbiBhdCBpbmRleCAwIChldmFsdWF0aW5nICdu
ZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIpOwog
fQogCiB7CkBAIC03Myw3ICs3Myw3IEBACiAgICAgICAgICAgICAgICAgLkNhbGxJbmRpcmVjdCgw
LCAxKQogICAgICAgICAgICAgLkVuZCgpCiAgICAgICAgIC5FbmQoKTsKLSAgICBhc3NlcnQudGhy
b3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdl
dCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNu
J3QgcGFyc2UgYXQgYnl0ZSA2IC8gNzogY2FsbF9pbmRpcmVjdCdzICdyZXNlcnZlZCcgdmFydWlu
dDEgbXVzdCBiZSAweDAsIGluIGZ1bmN0aW9uIGF0IGluZGV4IDAgKGV2YWx1YXRpbmcgJ25ldyBX
ZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIik7CisgICAg
YXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNz
ZW1ibHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1v
ZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgNjogY2FsbF9pbmRpcmVjdCdzICdyZXNlcnZlZCcg
dmFydWludDEgbXVzdCBiZSAweDAsIGluIGZ1bmN0aW9uIGF0IGluZGV4IDAgKGV2YWx1YXRpbmcg
J25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIik7
CiB9CiAKIHsKQEAgLTg2LDcgKzg2LDcgQEAKICAgICAgICAgLkVuZCgpCiAgICAgICAgIC5Db2Rl
KCkKICAgICAgICAgLkVuZCgpOwotICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2Vt
Ymx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21w
aWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDIzIC8g
MjY6IGNhbid0IGV4cG9ydCBUYWJsZSAwIHRoZXJlIGFyZSAwIFRhYmxlcyIpOworICAgIGFzc2Vy
dC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5
KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUg
ZG9lc24ndCBwYXJzZSBhdCBieXRlIDIzOiBjYW4ndCBleHBvcnQgVGFibGUgMCB0aGVyZSBhcmUg
MCBUYWJsZXMiKTsKIH0KIAogewpAQCAtMTAyLDcgKzEwMiw3IEBACiAgICAgICAgIC5FbmQoKQog
ICAgICAgICAuQ29kZSgpCiAgICAgICAgIC5FbmQoKTsKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+
IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwgV2Vi
QXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2Ug
YXQgYnl0ZSAzMCAvIDMzOiBjYW4ndCBleHBvcnQgVGFibGUgMSB0aGVyZSBhcmUgMSBUYWJsZXMi
KTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRl
ci5XZWJBc3NlbWJseSgpLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNz
ZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzMDogY2FuJ3QgZXhwb3J0IFRhYmxl
IDEgdGhlcmUgYXJlIDEgVGFibGVzIik7CiB9CiAKIGZ1bmN0aW9uIGFzc2VydEJhZFRhYmxlKHRh
YmxlRGVzY3JpcHRpb24sIG1lc3NhZ2UpIHsKQEAgLTEzMiw0MiArMTMyLDQyIEBAIGZ1bmN0aW9u
IGFzc2VydEJhZFRhYmxlSW1wb3J0KHRhYmxlRGVzY3JpcHRpb24sIG1lc3NhZ2UpIHsKIHsKICAg
ICBsZXQgYmFkRGVzY3JpcHRpb25zID0gWwogICAgICAgICBbe2luaXRpYWw6IDEwLCBlbGVtZW50
OiAiaTMyIn0sCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQg
Ynl0ZSAxOCAvIDIzOiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTEgKGV2YWx1
YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgp
KScpIiwKLSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRl
IDI2IC8gMzQ6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtMSAoZXZhbHVhdGlu
ZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJyki
XSwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE4
OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTEgKGV2YWx1YXRpbmcgJ25ldyBX
ZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKKyAgICAg
ICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2OiBUYWJsZSB0
eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTEgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJs
eS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCiAgICAgICAgIFt7aW5p
dGlhbDogMTAsIGVsZW1lbnQ6ICJmMzIifSwKLSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUg
ZG9lc24ndCBwYXJzZSBhdCBieXRlIDE4IC8gMjM6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1
bmMsIGdvdCAtMyAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldl
YkFzc2VtYmx5KCkuZ2V0KCkpJykiLAotICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vz
bid0IHBhcnNlIGF0IGJ5dGUgMjYgLyAzNDogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywg
Z290IC0zIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNz
ZW1ibHkoKS5nZXQoKSknKSJdLAorICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0
IHBhcnNlIGF0IGJ5dGUgMTg6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtMyAo
ZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCku
Z2V0KCkpJykiLAorICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0
IGJ5dGUgMjY6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtMyAoZXZhbHVhdGlu
ZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJyki
XSwKICAgICAgICAgW3tpbml0aWFsOiAxMCwgZWxlbWVudDogImY2NCJ9LAotICAgICAgICAgIldl
YkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTggLyAyMzogVGFibGUgdHlw
ZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC00IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHku
TW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCi0gICAgICAgICAiV2ViQXNz
ZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNiAvIDM0OiBUYWJsZSB0eXBlIHNo
b3VsZCBiZSBhbnlmdW5jLCBnb3QgLTQgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1
bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCisgICAgICAgICAiV2ViQXNzZW1i
bHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxODogVGFibGUgdHlwZSBzaG91bGQgYmUg
YW55ZnVuYywgZ290IC00IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxk
ZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxl
IGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNjogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywg
Z290IC00IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNz
ZW1ibHkoKS5nZXQoKSknKSJdLAogICAgICAgICBbe2luaXRpYWw6IDEwLCBlbGVtZW50OiAiaTY0
In0sCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAx
OCAvIDIzOiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTIgKGV2YWx1YXRpbmcg
J25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwK
LSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2IC8g
MzQ6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtMiAoZXZhbHVhdGluZyAnbmV3
IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKKyAg
ICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE4OiBUYWJs
ZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTIgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3Nl
bWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKKyAgICAgICAgICJX
ZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2OiBUYWJsZSB0eXBlIHNo
b3VsZCBiZSBhbnlmdW5jLCBnb3QgLTIgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1
bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCiAgICAgICAgIFt7aW5pdGlhbDog
MTAsIG1heGltdW06IDIwLCBlbGVtZW50OiAiaTMyIn0sCi0gICAgICAgICAiV2ViQXNzZW1ibHku
TW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxOCAvIDI0OiBUYWJsZSB0eXBlIHNob3VsZCBi
ZSBhbnlmdW5jLCBnb3QgLTEgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVp
bGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKLSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1
bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2IC8gMzU6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFu
eWZ1bmMsIGdvdCAtMSAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVy
LldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUg
ZG9lc24ndCBwYXJzZSBhdCBieXRlIDE4OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBn
b3QgLTEgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3Nl
bWJseSgpLmdldCgpKScpIiwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBw
YXJzZSBhdCBieXRlIDI2OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTEgKGV2
YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdl
dCgpKScpIl0sCiAgICAgICAgIFt7aW5pdGlhbDogMTAsIG1heGltdW06IDIwLCBlbGVtZW50OiAi
ZjMyIn0sCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0
ZSAxOCAvIDI0OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTMgKGV2YWx1YXRp
bmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScp
IiwKLSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2
IC8gMzU6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtMyAoZXZhbHVhdGluZyAn
bmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwK
KyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE4OiBU
YWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTMgKGV2YWx1YXRpbmcgJ25ldyBXZWJB
c3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKKyAgICAgICAg
ICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2OiBUYWJsZSB0eXBl
IHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTMgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5N
b2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCiAgICAgICAgIFt7aW5pdGlh
bDogMTAsIG1heGltdW06IDIwLCBlbGVtZW50OiAiZjY0In0sCi0gICAgICAgICAiV2ViQXNzZW1i
bHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxOCAvIDI0OiBUYWJsZSB0eXBlIHNob3Vs
ZCBiZSBhbnlmdW5jLCBnb3QgLTQgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUo
YnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKLSAgICAgICAgICJXZWJBc3NlbWJseS5N
b2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2IC8gMzU6IFRhYmxlIHR5cGUgc2hvdWxkIGJl
IGFueWZ1bmMsIGdvdCAtNCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWls
ZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1
bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE4OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5j
LCBnb3QgLTQgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJB
c3NlbWJseSgpLmdldCgpKScpIiwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24n
dCBwYXJzZSBhdCBieXRlIDI2OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTQg
KGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgp
LmdldCgpKScpIl0sCiAgICAgICAgIFt7aW5pdGlhbDogMTAsIG1heGltdW06IDIwLCBlbGVtZW50
OiAiaTY0In0sCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQg
Ynl0ZSAxOCAvIDI0OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTIgKGV2YWx1
YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgp
KScpIiwKLSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRl
IDI2IC8gMzU6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtMiAoZXZhbHVhdGlu
ZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJyki
XSwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE4
OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTIgKGV2YWx1YXRpbmcgJ25ldyBX
ZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKKyAgICAg
ICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2OiBUYWJsZSB0
eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTIgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJs
eS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCiAKICAgICAgICAgW3tp
bml0aWFsOiAxMCwgbWF4aW11bTogOSwgZWxlbWVudDogImFueWZ1bmMifSwKLSAgICAgICAgICJX
ZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDIxIC8gMjQ6IHJlc2l6YWJs
ZSBsaW1pdHMgaGFzIGEgaW5pdGlhbCBwYWdlIGNvdW50IG9mIDEwIHdoaWNoIGlzIGdyZWF0ZXIg
dGhhbiBpdHMgbWF4aW11bSA5IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1
aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9k
dWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyOSAvIDM1OiByZXNpemFibGUgbGltaXRzIGhhcyBh
IGluaXRpYWwgcGFnZSBjb3VudCBvZiAxMCB3aGljaCBpcyBncmVhdGVyIHRoYW4gaXRzIG1heGlt
dW0gOSAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2Vt
Ymx5KCkuZ2V0KCkpJykiXSwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBw
YXJzZSBhdCBieXRlIDIxOiByZXNpemFibGUgbGltaXRzIGhhcyBhIGluaXRpYWwgcGFnZSBjb3Vu
dCBvZiAxMCB3aGljaCBpcyBncmVhdGVyIHRoYW4gaXRzIG1heGltdW0gOSAoZXZhbHVhdGluZyAn
bmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAor
ICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjk6IHJl
c2l6YWJsZSBsaW1pdHMgaGFzIGEgaW5pdGlhbCBwYWdlIGNvdW50IG9mIDEwIHdoaWNoIGlzIGdy
ZWF0ZXIgdGhhbiBpdHMgbWF4aW11bSA5IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9k
dWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAogICAgICAgICBbe2luaXRpYWw6
IDEsIG1heGltdW06IDAsIGVsZW1lbnQ6ICJhbnlmdW5jIn0sCi0gICAgICAgICAiV2ViQXNzZW1i
bHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyMSAvIDI0OiByZXNpemFibGUgbGltaXRz
IGhhcyBhIGluaXRpYWwgcGFnZSBjb3VudCBvZiAxIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiBpdHMg
bWF4aW11bSAwIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2Vi
QXNzZW1ibHkoKS5nZXQoKSknKSIsCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNu
J3QgcGFyc2UgYXQgYnl0ZSAyOSAvIDM1OiByZXNpemFibGUgbGltaXRzIGhhcyBhIGluaXRpYWwg
cGFnZSBjb3VudCBvZiAxIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiBpdHMgbWF4aW11bSAwIChldmFs
dWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQo
KSknKSJdLAorICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5
dGUgMjE6IHJlc2l6YWJsZSBsaW1pdHMgaGFzIGEgaW5pdGlhbCBwYWdlIGNvdW50IG9mIDEgd2hp
Y2ggaXMgZ3JlYXRlciB0aGFuIGl0cyBtYXhpbXVtIDAgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3Nl
bWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKKyAgICAgICAgICJX
ZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI5OiByZXNpemFibGUgbGlt
aXRzIGhhcyBhIGluaXRpYWwgcGFnZSBjb3VudCBvZiAxIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiBp
dHMgbWF4aW11bSAwIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIu
V2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAogICAgICAgICBbe2luaXRpYWw6IDIqKjMyIC0gMSwg
bWF4aW11bTogMioqMzIgLSAyLCBlbGVtZW50OiAiYW55ZnVuYyJ9LAotICAgICAgICAgIldlYkFz
c2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjkgLyAzMjogcmVzaXphYmxlIGxp
bWl0cyBoYXMgYSBpbml0aWFsIHBhZ2UgY291bnQgb2YgNDI5NDk2NzI5NSB3aGljaCBpcyBncmVh
dGVyIHRoYW4gaXRzIG1heGltdW0gNDI5NDk2NzI5NCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2Vt
Ymx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAotICAgICAgICAgIldl
YkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzcgLyA0MzogcmVzaXphYmxl
IGxpbWl0cyBoYXMgYSBpbml0aWFsIHBhZ2UgY291bnQgb2YgNDI5NDk2NzI5NSB3aGljaCBpcyBn
cmVhdGVyIHRoYW4gaXRzIG1heGltdW0gNDI5NDk2NzI5NCAoZXZhbHVhdGluZyAnbmV3IFdlYkFz
c2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKKyAgICAgICAg
ICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI5OiByZXNpemFibGUg
bGltaXRzIGhhcyBhIGluaXRpYWwgcGFnZSBjb3VudCBvZiA0Mjk0OTY3Mjk1IHdoaWNoIGlzIGdy
ZWF0ZXIgdGhhbiBpdHMgbWF4aW11bSA0Mjk0OTY3Mjk0IChldmFsdWF0aW5nICduZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCisgICAgICAgICAi
V2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzNzogcmVzaXphYmxlIGxp
bWl0cyBoYXMgYSBpbml0aWFsIHBhZ2UgY291bnQgb2YgNDI5NDk2NzI5NSB3aGljaCBpcyBncmVh
dGVyIHRoYW4gaXRzIG1heGltdW0gNDI5NDk2NzI5NCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2Vt
Ymx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKICAgICAgICAgW3tp
bml0aWFsOiAyKiozMSwgZWxlbWVudDogImFueWZ1bmMifSwKLSAgICAgICAgICJXZWJBc3NlbWJs
eS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI0IC8gMjc6IFRhYmxlJ3MgaW5pdGlhbCBw
YWdlIGNvdW50IG9mIDIxNDc0ODM2NDggaXMgdG9vIGJpZywgbWF4aW11bSAxMDAwMDAwMCAoZXZh
bHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0
KCkpJykiLAotICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5
dGUgMzIgLyAzODogVGFibGUncyBpbml0aWFsIHBhZ2UgY291bnQgb2YgMjE0NzQ4MzY0OCBpcyB0
b28gYmlnLCBtYXhpbXVtIDEwMDAwMDAwIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9k
dWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAorICAgICAgICAgIldlYkFzc2Vt
Ymx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjQ6IFRhYmxlJ3MgaW5pdGlhbCBwYWdl
IGNvdW50IG9mIDIxNDc0ODM2NDggaXMgdG9vIGJpZywgbWF4aW11bSAxMDAwMDAwMCAoZXZhbHVh
dGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkp
JykiLAorICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUg
MzI6IFRhYmxlJ3MgaW5pdGlhbCBwYWdlIGNvdW50IG9mIDIxNDc0ODM2NDggaXMgdG9vIGJpZywg
bWF4aW11bSAxMDAwMDAwMCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWls
ZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKICAgICBdOwogCiAgICAgZm9yIChjb25zdCBk
IG9mIGJhZERlc2NyaXB0aW9ucykgewpAQCAtMTg2LDcgKzE4Niw3IEBAIGZ1bmN0aW9uIGFzc2Vy
dEJhZFRhYmxlSW1wb3J0KHRhYmxlRGVzY3JpcHRpb24sIG1lc3NhZ2UpIHsKICAgICAgICAgLkZ1
bmN0aW9uKCkuRW5kKCkKICAgICAgICAgLkNvZGUoKQogICAgICAgICAuRW5kKCk7Ci0gICAgYXNz
ZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1i
bHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVs
ZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzkgLyA0ODogQ2Fubm90IGhhdmUgbW9yZSB0aGFuIG9u
ZSBUYWJsZSBmb3Igbm93Iik7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1i
bHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBp
bGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzk6IENh
bm5vdCBoYXZlIG1vcmUgdGhhbiBvbmUgVGFibGUgZm9yIG5vdyIpOwogfQogCiAKZGlmZiAtLWdp
dCBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9EYXRhLmpzIGIvSlNUZXN0cy93YXNtL2pzLWFw
aS90ZXN0X0RhdGEuanMKaW5kZXggY2NhMGNmM2JjNDVkMGY0ZGQzM2JkOWNhNTk3OTg5NTRkMmQ0
NWIxOC4uNDE3MTQzNTEyOGEwODRkNTk0OWQ4ZmYyYjhiMTI1NzBiN2YyMzM3NSAxMDA2NDQKLS0t
IGEvSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X0RhdGEuanMKKysrIGIvSlNUZXN0cy93YXNtL2pz
LWFwaS90ZXN0X0RhdGEuanMKQEAgLTUyLDcgKzUyLDcgQEAKICAgICAgICAgICAuU2VnbWVudChb
MHhmZl0pLk9mZnNldCgwKS5FbmQoKQogICAgICAgICAuRW5kKCk7CiAgICAgY29uc3QgYmluID0g
YnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOwotICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3
IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsIGBXZWJB
c3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE1IC8gMjA6IDB0aCBEYXRhIHNl
Z21lbnQgaGFzIGluZGV4IDAgd2hpY2ggZXhjZWVkcyB0aGUgbnVtYmVyIG9mIE1lbW9yaWVzIDBg
KTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKSwg
V2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCBgV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFy
c2UgYXQgYnl0ZSAxNTogMHRoIERhdGEgc2VnbWVudCBoYXMgaW5kZXggMCB3aGljaCBleGNlZWRz
IHRoZSBudW1iZXIgb2YgTWVtb3JpZXMgMGApOwogfSkoKTsKIAogKGZ1bmN0aW9uIEVtcHR5RGF0
YVNlY3Rpb25XaXRob3V0TWVtb3J5KCkgewpAQCAtNjIsNyArNjIsNyBAQAogICAgICAgICAgIC5T
ZWdtZW50KFtdKS5PZmZzZXQoMCkuRW5kKCkKICAgICAgICAgLkVuZCgpOwogICAgIGNvbnN0IGJp
biA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+
IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCBg
V2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxNSAvIDE5OiAwdGggRGF0
YSBzZWdtZW50IGhhcyBpbmRleCAwIHdoaWNoIGV4Y2VlZHMgdGhlIG51bWJlciBvZiBNZW1vcmll
cyAwYCk7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJp
biksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgYFdlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0
IHBhcnNlIGF0IGJ5dGUgMTU6IDB0aCBEYXRhIHNlZ21lbnQgaGFzIGluZGV4IDAgd2hpY2ggZXhj
ZWVkcyB0aGUgbnVtYmVyIG9mIE1lbW9yaWVzIDBgKTsKIH0pKCk7CiAKIChmdW5jdGlvbiBEYXRh
U2VjdGlvbkJpZ2dlclRoYW5NZW1vcnkoKSB7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vanMt
YXBpL3Rlc3RfU3RhcnQuanMgYi9KU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfU3RhcnQuanMKaW5k
ZXggYjQ0NDU2OTMyZDkwYjVjODMzMTQ1ZWMzZjM0MmZjNTA0NmY3OWUwYi4uNWMzMTUwZTFjYWJl
YmZiODQzMzNlZjcxNDIzYTg4ODZjZGUwZWFlOCAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2pz
LWFwaS90ZXN0X1N0YXJ0LmpzCisrKyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9TdGFydC5q
cwpAQCAtMzEsNSArMzEsNSBAQAogICAgICAgICAuU3RhcnQoMCkuRW5kKCkgLy8gSW52YWxpZCBp
bmRleC4KICAgICAgICAgLkNvZGUoKS5FbmQoKTsKICAgICBjb25zdCBiaW4gPSBiLldlYkFzc2Vt
Ymx5KCkuZ2V0KCk7Ci0gICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9k
dWxlKGJpbiksIEVycm9yLCBgV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0
ZSAxNyAvIDIwOiBTdGFydCBpbmRleCAwIGV4Y2VlZHMgZnVuY3Rpb24gaW5kZXggc3BhY2UgMCAo
ZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pJylgKTsKKyAgICBhc3NlcnQu
dGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKSwgRXJyb3IsIGBXZWJBc3Nl
bWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE3OiBTdGFydCBpbmRleCAwIGV4Y2Vl
ZHMgZnVuY3Rpb24gaW5kZXggc3BhY2UgMCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1v
ZHVsZShiaW4pJylgKTsKIH0pKCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vanMtYXBpL3Rl
c3RfYmFzaWNfYXBpLmpzIGIvSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X2Jhc2ljX2FwaS5qcwpp
bmRleCAwOGU3NGFhMzI0YTcxNzg4ZTU4MTljNGE4YmJlNzc0NzU4NWIxYTg5Li4xYTJkMjIyMTAz
MDQ1MWRmMDY0NWIzMGVhMzFiYjI3NDhmNTUzNmQwIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20v
anMtYXBpL3Rlc3RfYmFzaWNfYXBpLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9i
YXNpY19hcGkuanMKQEAgLTY3LDcgKzY3LDcgQEAKICAgICAgICAgICAgIGFzc2VydC50aHJvd3Mo
KCkgPT4gbmV3IFdlYkFzc2VtYmx5W2NdKGludmFsaWQpLCBUeXBlRXJyb3IsIGBmaXJzdCBhcmd1
bWVudCBtdXN0IGJlIGFuIEFycmF5QnVmZmVyVmlldyBvciBhbiBBcnJheUJ1ZmZlciAoZXZhbHVh
dGluZyAnbmV3IFdlYkFzc2VtYmx5W2NdKGludmFsaWQpJylgKTsKICAgICAgICAgZm9yIChjb25z
dCBidWZmZXIgb2YgW25ldyBBcnJheUJ1ZmZlcigpLCBuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVm
ZmVyKCkpLCBuZXcgSW50OEFycmF5KCksIG5ldyBVaW50OEFycmF5KCksIG5ldyBVaW50OENsYW1w
ZWRBcnJheSgpLCBuZXcgSW50MTZBcnJheSgpLCBuZXcgVWludDE2QXJyYXkoKSwgbmV3IEludDMy
QXJyYXkoKSwgbmV3IFVpbnQzMkFycmF5KCksIG5ldyBGbG9hdDMyQXJyYXkoKSwgbmV3IEZsb2F0
NjRBcnJheSgpXSkKICAgICAgICAgICAgIC8vIEZJWE1FIHRoZSBmb2xsb3dpbmcgc2hvdWxkIGJl
IFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvci4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2Mzc2OAotICAgICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2Vi
QXNzZW1ibHlbY10oYnVmZmVyKSwgRXJyb3IsIGBXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBw
YXJzZSBhdCBieXRlIDAgLyAwOiBleHBlY3RlZCBhIG1vZHVsZSBvZiBhdCBsZWFzdCA4IGJ5dGVz
IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHlbY10oYnVmZmVyKScpYCk7CisgICAgICAgICAg
ICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseVtjXShidWZmZXIpLCBFcnJvciwg
YFdlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMDogZXhwZWN0ZWQgYSBt
b2R1bGUgb2YgYXQgbGVhc3QgOCBieXRlcyAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5W2Nd
KGJ1ZmZlciknKWApOwogICAgICAgICBhc3NlcnQuaW5zdGFuY2VvZihuZXcgV2ViQXNzZW1ibHlb
Y10oZW1wdHlNb2R1bGVBcnJheSksIFdlYkFzc2VtYmx5Lk1vZHVsZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgIkluc3RhbmNlIjoKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9qcy1hcGkv
dmVyc2lvbi5qcyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvdmVyc2lvbi5qcwppbmRleCA4MWNkN2Zm
MDEyMmZiMjFjZTkxZjgwZmI1MWU0YzY5ZTE0NTk4YzQ3Li4wNDg2ZmNmZGRlZmQwODIxZDM5MjQ2
Y2I2NDA4NzM0YmZlYmYyMmUyIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vanMtYXBpL3ZlcnNp
b24uanMKKysrIGIvSlNUZXN0cy93YXNtL2pzLWFwaS92ZXJzaW9uLmpzCkBAIC01LDUgKzUsNSBA
QAogICAgIGlmICh2ZXJzaW9uID09PSAxKQogICAgICAgICBjb250aW51ZTsKICAgICBjb25zdCBl
bXB0eU1vZHVsZUFycmF5ID0gVWludDhBcnJheS5vZigweDAsIDB4NjEsIDB4NzMsIDB4NmQsIHZl
cnNpb24sIDB4MDAsIDB4MDAsIDB4MDApOwotICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdl
YkFzc2VtYmx5Lk1vZHVsZShlbXB0eU1vZHVsZUFycmF5KSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVy
cm9yLCBgV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSA4IC8gODogdW5l
eHBlY3RlZCB2ZXJzaW9uIG51bWJlciAke3ZlcnNpb259IGV4cGVjdGVkIDFgKTsKKyAgICBhc3Nl
cnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoZW1wdHlNb2R1bGVBcnJheSks
IFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgYFdlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBh
cnNlIGF0IGJ5dGUgODogdW5leHBlY3RlZCB2ZXJzaW9uIG51bWJlciAke3ZlcnNpb259IGV4cGVj
dGVkIDFgKTsKIH0KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvbmFtZVNlY3Rpb24u
d2FzbSBiL0pTVGVzdHMvd2FzbS9zdHJlc3MvbmFtZVNlY3Rpb24ud2FzbQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4y
NGIyMmIxYWVlYTM4ZTQ2OWMzMjYwYmEzNGQ1ZGE0YTZkYjEyMTUzCkdJVCBiaW5hcnkgcGF0Y2gK
bGl0ZXJhbCAxMzQwOQp6Y21iVzhPTj9BdWRCQEx2UmFNdW0+TW9DTT0kWX4wZCM/PWBGd2deb0tf
akkyZ3hHXklXKFlHMnZaYHImWTZlJWcKei1SfGxkISQ+SUlBJmBzfHFDfkprKGQ0bH0xZCVMUUJv
WWZHdFVSUGRWITxNalNmR2VTQjFPdUUjWUQ9MldiKnJlCno9aVlqQl9lPXVnPkFKNlQmLXZjcHxO
SEt9WmdjTlc8ZVpFQzteNSVHYilITjFfeEdkeT1PWD5ZYH0+WVBfbmhPdgp6SVVUYztHSjxYVnJR
aGE7KTUrLVd7bmNPbGpaZ1UtKkZOXl8pMU14R2BxfEdVYCVZJiYmcGhpdGNBYXplQHJvU30Kelp9
YHZGQyRpMChKQ210UEdgSyZ5eVMrSmlhZGN5SlhKXylWT0tzWDBON0g5X3JrbVN+QypOdX1KJD82
TW58SlQtCnpPck0oVWUxN3JqVFpXQE1kJCVVSD9AZFF7aGomSklacnl1JWM9UHMpJklvRGBocntp
aVRVJWtwKS1XdWVYe25xYAp6ZCF5LTwkPmRXejtqKjIxZEdGVGRfVnkqJEc3PmM9b08lMy1qY34z
dCtgR05Le2ohVFJwZj99enAobiFpNjs4YyQKemNmTSRVS0lIS3k+VW1xeDNEMHFLNUZmO3ZDITIy
RysjV151cUwhYE80Y0M4bGI4cG0wKGdyanF6OXElSUp4WUB9CnpQU1N8flF1Rzw2RFZyIXNHZnBI
S1hJa3lad2Y8Q05UbD4qRG0tNz9wQys1Zk51PSMwIWBBWkJzKiZnMTNfbmxrcgp6VUFnb3l4XndS
e3F2P2hfKWdIZF4hdUNzaHBMNmZiQ29rUm9edj5TJm5iQ0M1eShkUzB2ciM4Y2pgbD80P1krLUUK
ekd1XnprXn59QV5UTylVM2dfOWc/LVhGTyY9MHtoZnNlNWxXK2BCcDFhdSorNlIzMiolVSk8aWd4
dyQ+dXpKMnFTCnpkKVVVS1B4cnBBJkVrIT8pc0J8XisrXzU1X2ZVSXlaKnd4KW5ZIzZDX2ArbH5h
X3tjaCRqP0JfJlNjflVDeUBTVgp6R1AlMVdHdVdLby1ucn1FKV93a0VZLXhMWWM+QV97ZXtYKWs7
bHwyV0M5Y1N3T1lfI19rOT9weV5Kdz80ZTxFVDMKemlKaXY+X1JxRC09dj1GQzxNWFheRXgkSlFf
amI+PmlZVSomdFJlMVBFQl90YURjdCMxe2A8QllVKURocG9wMHkpCnpBQkl0I0UyJk8pSUp1SX5A
OH53T2JuYCNaeihefD1acU98d0V3T2EmXmZCayZhP0g4NmhJMyFCaDVjKll7SlM9RAp6Sm1iWD07
SDhNRnhOc05aan1GUjl2R2M3VzkmYHFlbEAwPTdIcVpaQ0NXODV4MDVVaz0mYGxabG1mOTVLRGsr
PmwKekdwPCVII0k4ITJxdEo7ezxFcVB2QkhoeHRseWxMZ3hXZ3ZDNiEoZyhpV3V8SmFuKW10Wmkk
TFNxYXg0Y1BKOWBgCnpyQTBpaFF2V3NoQU1eKjBSbmdWSF5Lc2N1RTtHdH4zTW4jdHQ3SzsxOEpF
YmpOR2AtXyl4VGNsVDxlcmNVZ1pBbAp6KVNyRStYcGhTX0R8MX43PD5gTFcmdjFkUURqRk5QSns/
emBxR09sMGJmIzRfYmhRRnF0KWVhSmpodDNQUFRXSD8KenVtSjt1Vm5yS1FiaT45O3FSdGwrb29v
Qn1ZUCM9VFI+VmYqUiRsN1ghVWtRR0JyZTFvUHtKZTw1fGh7X0ZFUnVqCno9bFE9YXN4M3RXZyox
PiM/eDs7U0J3QlNyIztMXjVzYX14eHo8KDkjM3wwbkBkR35SK2NZZEZ7e0M7THM9SUE7Tgp6eThh
X0c2fE5zVmNSayU3eXY7K1IxWSQkO3sxdi1BSU9gdnthYyFASUJDcVoxcGlgZzFYI1Q/fVBKKyRN
REp+TnYKemh+MlFSTjhSVXhrUkdeUWBOU2VPVTtqMzg1SS00R19tYGt1SSkjaVUtRjFsXkV5amFL
PVgzYFRNNVd9WjFCYlFOCno/eml2JURqI0oyYCsxKUt1M2diX0ZhUEZtRilFVEQkVSF5cGg0Xzx4
fEM4RHFUcXM+SFd7dHRRRDx6Sj5GXmVJegp6MiZ4Qz9hbUxiUnslNWpuYlpYbmRKN3JDIThAISM5
UmdfKiVGajFURjZTe0EzJk13Q35jUz04SnVDcWB5eEtPeEIKej4yZkM1KGZNNExLMmsrfWR+V2Ej
YWhkMEA4bGtQNFAkYHUkNG5nMjxGPyU9cUleZHI7SVBhNVBBQ0ZIc19sVHgpCnp4WFpxb25hbz9a
VSFASDBqSF51aHQhdl5JQThLdVJ2JW19VStnVXBwYnNWZjJmMExFTCM/MDZsa1hKN00qN3FkSQp6
KD9RWEZPdyVHdHpaXilne3khc0kjT0d1R2gyMWp0NHwxKkM9MVA3STtTSCk3bSZrb2B6akY3aGch
TGdRQHpKaTIKel82VzA4PGRkb1lfWihKNWIqZyppPnM1PEFiZFBlYnJrOXglMk9+Jkt7cj11QV5y
MHNJQlEzPCpnTyp0NzEodTcxCno7UlAjLTJ9R2Y+NDlHRHZ0eUUhP3hUfnpyalVfU3slcmkwez8m
QmI+SEkoSzUhSSlUKzRpbyhxWnQ1WExfakFZQQp6V1ZoYmdfNHxuM193TV9fRjRRdGtKWkFUT1hJ
Rn10YTMrT3VBSyYtc1prMD8+aDZMZkdgI3dIJjlMPGd1NW9AN2oKejVgfChHdiQ3fEhXRXI/JDVL
M3g3c1Q1Uj42Xm8pPTVET3QkVihGTXppZ3A8X3FLUml4QXNsRDtaISNAblYhREBICnpRcjFoeWck
NGFKYm4jRDs0UExWKm91V2B2QTU9dnMybm1+bCU+Pk9IcVhqKT5NTjtBY1doPjk1UUhHbj9ISkl+
YAp6Xjk4fmVpRylOMnd6ejAxQXxyV0BhPHBQcEt0VyhjYHMlTGJ7X2pqJWlYT1JsTVpXY0JURVB2
Wm1GTzRPaWpTeE0KelhaXjkxZiM7PUlKMkUyTE1maWghYWQzcVpjQTAzQ1QkVytnZ0RNaXR3VzxT
c0VvQ2gyeEtnPTZjUVMwQFBKQkkpCnplQyhJMCZCJmBrWlJVN0A2NlZVJiFSbEZiejNrekk/RFEl
JEFscmA9S31fXmM1bShnQjU0fGhYVVh0ZWBQdmd3QQp6eCh3XjBLKzxVbENFUmgkMV5HfVExbk5T
UlVeWWwpXiR2TmVBcmZ+OF9aUUpxamQjfHo4emAqcHVkQSU8a1ZJLWAKem44UWE7MVolIUNAKTtB
aShKc0Y1Qm4/a3QzV2NMLUd9KGokU2p2anRsQk0rfFRURmlkNzFCI3tjT1VMQ0BGM1R1CnptVE93
e0YyKERuI0w3fHlgViMzRnpEI2RgK3BfcE5jUzc1I0ZsMT5wOCtLfG9qRGJXK3JocHF2bkpgbTM3
JklSVgp6SXx6YDc2VDtGOF9YVkcwWiFHSX4jb1h1OEJSOzJ+Yyt9X09DRUFqNXdUUjBzXyM2O3Y/
c0thTUtnKX5OQVJDeUsKeiYqQVFkZzYyTGFEJiV1M1oxWH0rN3Zac00xWC0tUGBFfnZXYC1EcnNV
bll0fDFhemwta2stIUdMS2dUclVQcmJ9Cnp7cCt2NC1VZlg1dmtFcWwhTEBfYGBJV0lCU21ZJG1N
KmlUWlhZSDd7aVRfVXxCISVDRDEzKT4kMiVwaHBpI3kyKQp6WXhsS1Vkd2lkPyFjNVYwMDwkRlI2
Q1M7N2x+SF9JfEI0ZH05Km1hIyE8Pm9rWjxSNCNBeClwflhCIUJZUGZKMmMKejhPdSo8SHdOUmI3
TUFOKTticGFxNU1Jbk8hVmhLQyVne01QUGdNX0hESVM2ZHRQZi1nb2dwTndVWSk+cm1LNl5QCnpp
NlFlVlJZbkc2bklofEpoS3dtKSYqazZfUzJ8NnIzOWw2S20wZk9aayRwfXFXKkBuQmlvZG9NTUcj
K3pkR1JiMAp6RzM5K3lZUkUoPVdJXzxsPH1vaTtDV19+b1h6Nz90UjNERyQ1LVh2TGQ3dntFMmJw
WGUpLXpaS0cpMF5qJDs2TEAKejN2LWIle0YtNilqSHtxPi1HdmJ5amhSM3FTKmd0dTs4R1R7RmRD
RjIpaXp6TiktRF52NWMjX2FnI2V9WFFYenlMCnpnK2pvJT95MTM0V3VZKXVEMTxnPWhsc2VkN3om
a0pEK1FuKT5ge0A7TGc2dE5sKUN+VXUtPTVpaihrQyh1KD44Uwp6MzVCfTloITtibFduYG5VRD0l
fEpGTyZwT0d6KjBpNitBQTVMZVh2XnpVYiZLUmhiSGZncDR7QVIqSSs9NEQrUUIKemtlZkx3N3so
ek8maEElNj5aTCZFcUVwOTJuWWJXVHJecG8ocDxxelEjQmUxR18oM3N8U3JpaSlhJEhRYkZ0Mz1Y
CnpWVjMhX2c8dDg0YHFFVHUwMFIjV0YlWil8Q1B0I3xTJllQVTQ0MTRGKipHQTkzQG4wMlg4c2A3
ajE4IzdrcGRofAp6NUslLV81JV8jI1lfZilOd25MbUd0PFU0KzhkaXk7dHl1JnQrUz5GZTxFJmEt
dXtmej4wPDBGb1RlY1k5dmowMjAKejhCbU9oXmNNX28jS0AyJHV+KH1wJnJxTFk7aShLVk1PPGNE
SFJxfHlGQndaeHE9QikoakZHPzJ7V1ZXKUkjd0JCCnpZRG4qNE01eiEtaztZeVY5dXZaMjVgcnE7
LVVQXyhEdUltVXJZT1NWVXNBYHZ4LVBsV00rZDQ3TCE1KEBCXnlvTgp6Z3JIUGBCYEQ3UHg0eUdW
cFRAaz5yPiYkMjk3TjQ1Y3RRdVprTzhXYURBdDIoZyM7RmQxViNrS1kzSU5BS0BJKWsKejFkdnJA
VUVIQHdYZTQrUTFqPllmR3p1MWNPXzA+OGM/IVNVREFAeEolMEMkdU9qZVExdzg2YldFNmlBMUdr
YSQzCnpwPnR0IylKYXgkM2JfNURmbV9uTio4WlUpazRWd2xLaEY3SVFFTnNIYlQod243UG98NSYt
SU5waExkKnhPeHVpJgp6S1BXV1F0SWZfZypGeDllK3g3TUAqODwlP1VrITgqaVVBIWx8S3NvY15M
TWc2SDZOVisySHY2Vkt8IXF1JE0yX2gKenFsb2JFemcxWm9sLSQ3VWZEUFdrJlZRe00jcWpibytw
e1IlRjUoO2JtQWdLZmtDYzZFKDlAQmZgSlpibkJeMDswCnpHUmxKT0hRWm1KMnRIVS12TD5id2o5
aTY9dzVCUkthKWV8d1g3V0JaI058I0VfYWtmXmsxZTlEMHVtIVI/Q1dpZAp6OUR8RStwLUJxNlAy
clhqYD5CMl9RKFY+Uklybjt9YWVrbDZNaTNJenkwT1laYXVfYClfPlpAQ1N3S20kQW5AIUwKekxK
TUZ8KXgzZkNZfEtTejdPZSNlIzkpdytpVWpWdyFCMG5HKEp9QHlCMzMzdVVoUmBAQEZhc0V3NWE0
RD9JTX5fCnpXbn1NSypKVnk5IS1ANyMwZnlUT1c+OF4mTWt+fUM1bHtESFBDJlQyZ2NwcytxQlhl
cWglcVYpOCQkXnc4bF5PUAp6UUE4MXtvezJGdkBrbUpWSDZzS34+XzQ+JjklS1VTTFZAREtfPEdl
Nm0hVEJlenA2eUdIKD9ybjJeTH1ySz9QWnsKenN5UTY8eWUzPGFHclJfXyl4eXxFQEI/TnVMeSZu
Uz1xKHJuT1VlcVlBPGBMTkI/e0Y+OzduKjdeZUVRX3NBej49Cno8MGt8Wjx2RDh8MWBoPHVRa0xT
OVJsTWNmNiNKfHhZfGxRYiNoR3dKYnVyYCRjcXdnNV95bUA2RVM2YCVmIXViMQp6QGEldCpgKXx1
O3hFfUl2LU94Wl9hUGNFN1NhJTlqITNRRUl3WEt6RCY2KE9IMUBWQG9BJHZ8fkNyU1N0R158KWIK
ekxUblcwPE59UWslckt7eks+SUt1bzxmVms0c0VIeFAlMnZtVUo+WU10MEllVitIa2NAZH1XSTtM
Xz9NVkEmfHdTCnpeUChreF8rY0hoM1lNfFJmU15jfnZgOEI8V0dyZjMxUHYhTlRETjYzb2NPdnRU
c1B2c2w5YlhjOzFidVA0TXdARQp6SFlaZ0VnYk0mNTkoRG8qVXwzSHtPNSs4fFctUyM1NTxAdT52
dFNQU2d0aUV4WWBSM0U9fExXRmdJODlyVFRaT2EKelk7PEBTME1vUUFQRXJUWT1DUz9ec1plQGhm
R2JhT2dVeU05RCshJm5xeVh6ZXM7eGtua2c1JD1yPTREa1ZncGtjCnotWGN7cHphMSVjeVJ5NThS
Jjd8eUxTKWx8cCY+c3VfOyZlJWw3MykhcD5YZSNfKUlqLUhOeylkc3dPVjdNWUwrYwp6KDVTP3Vy
QU00TSprKDdSKVNgdkFpWGx5U1l+fGs3Xy07UH1mUHtKdyE3ZGM8N3xzJERQPX5SZzBYVHBWNjtN
VUUKenw0UUcwWVBTWmVQNFY3VW5ZQGxrSFFZUE5lXiRZRk1ZUFo9bGhoU0ZfOUhOfCpoMCtjJDFf
ZkZISD1lcyRrb0xMCnozNkhWPW9ZMGo/S344fGpgUUtDPDYzYzlRV2I4RlAyQUx1LXIjOGZTaGIp
JDFOdWxLRVcyKk1MKiNxbi1sOUM+Qgp6Kil0MHwrQTQje3ZQYiRsNzV0Pjk0THxCKGJtU2A+JHlp
bHEyU249NnZhMVk3M1ZlaiE7fGxJJXZFVzhGKSs5VEcKek5FMGkjWTR7eTJ4RF9zUEVPPkBVWCo2
N2wmbEdMYmlvaz1PYD49N3IwMiYjQDRLQnFhWWgybm16bShjO2M7bjxVCnpFPT4lVjstOHBwZ0ct
fWhhY1RQSXhITjhYc2o/fmN4Qk90PFQ5JTh5RitwI0hPSm17RXhXPVdYb3Y0fGBhQXtCeQp6IWEq
UVF4T0J4WlV3I1BBKDd6WClBKDBYTENANzI4NDluTzxDZzJGcXE8KT8zcXRLcE9FQyhIK1gtaUk3
aH4rZD4KenJIbWUzYEp6Pks8P1ckYj9BT093Y2pQfXk4PHdkb0xBMWp4JTVyK1JISmhsKU5ER3BQ
dksmc2JSYXNBJjk4c3FACnpfS3Yyd0l0QllqPHVvMUdkc3BsfVlgZD83VTdmUyY7PWZFNHJzPTww
TChmOyVMYlhldk9ZbSFwaz18NHlJKllFTQp6SGRMcF9iZy0hQ1poQCRBUUYxaG9LaCRsKHo3WE82
dVY5UkUoV1FkWDBgNzhTRWg8an5VUkZaRTJyZGZ0dElUajMKejRfKFFOKTFpUyFEXkN2RVFmYmw9
JGRINTUybVlsQ00pMVRoKCt8VnZYNl8wOGxZNF42NzQmK0dvPntYI3N+RUFQCnorQjI7a1k0bFVp
SCV4SS1lSDRwfDNsKmNHLWtFMntjeEVLPDVgYkNWQUZfJihVXm9RXlRnNkM7WCZ0a1cxeWd3QAp6
PXVrTj5jO0BvTTFiVkE3cigrNHEzPW8rbUR9VFh5PT1kJkZqQ09uZGo2dCY/a1ZaUX1GMTJUN157
dyQwSXJUTVIKekBmeDFWUG1lZCtmNmJ8alNYWU1wKD4mQnZVXnh0IXgtVUhNMCtxPXNZe01mQ0ZN
I1dkcit7Kzc2WFY3Y2dGaT5YCno2S2pgX2dmfUJSKE5AM3tGfjNrMUxMKEEyUXkxaHIweWU/enBg
cyoxKSlnZ3R6aWRVQl5aMXl3PDNmM3Q9WVI5SAp6Zzk4XjA/MiMqfGc9Y0J0R2NndlZQd2M1NSpM
XldPQztgUypibi16PSFlWCs1RllIIzdNZVNJd1p0YT5fSDNSdlMKelBOVmhMQFQ/KmFiNHhAazBA
KzB+dXt1SSNPYnhzd2JUeSFnTTctLTAjUm5jYUBDV2QqTFBqO2JWMCVHUXVHMmJ0CnpwMjt2Qytm
YFV1UURPKUIpYD1ZJDBLJH5yZ1RRZy1UQ2FOT2ZtUiFlZ3ZrcUcmS2g1KWh3eD9BO0xBZilrJDNF
SQp6anYtQVJMP3A4cjRRVSFvMyhkZj9XaVUqY0ZvWVI8UE9gfE9ZNnpqdXpOODkwRHAzdWpEaiYy
WUFiWUpOZ1lYcSoKejZaQ1JiN0VvdT9CaEEhSHdQODhLYT49MT0zM1ZGb0lfODNecWFYeXFKSn41
SlJGQmpJKT84RWY2NGFedDghMEkrCnpoTjMtQ2lCNUdoQmtNVjgpWStGTkhRTzEyZDtQRlRsIzg9
ZyRRZ0JxYmNRKlA3cSpeWl5ARHwpZWQtN1IrN3wkSQp6aHg/X0FhOzRgI0AwO3BieU50TH5ebzNq
JCYqb3g5MW9oTSVhUmFhd2ZyNnVPbz5yMjQ5Y0M3WG92TWN8bnVZezgKekh7VX0/JSRGQUpgc3R1
cXo2QyNkNjUxNFhqdDNfIUNRbDBwN0JqMCY5UnZePlM5TmlRQUdKZWFFdDgjOWI7S3pQCnpJc2dN
SjFNcS0pMHZybEVyXmkhd3h0Z3ZRdTB3LUlsZ3cocFcpZjtXdikxX31jeEleZUxoUFZ9cUYwY3R5
cmI+SQp6JlZoQSErajJmWW05PXhgJlMlQmxWd1QzVzwkJiRSMFpBdyNXVEMqRCojd3hHNUQ8SnlO
dF8yPGl9Xi1qU3J4NDsKendKalRTajQtRHJfUjhfckVLWCNpWH0jPH50N3hxMSE4SCFYKXErTigw
fGhqTDY/IV54eFdLYnZXKX4mVmgoTHZfCnpuTjF5WUw4TDgwKjRaTm82P3JEMiNwQGM0JVcwbFFG
M2IjVFJCdHU0bjF9aEFBdSQrajNPek5ZZmFGVjZvO1oqPQp6cU5ZbE5tdClJM3htbz4/cClxb344
QmR4QSZ+ZG9WMUpIKD8oTDlnbm4jVyswX3w7NT8xbnFqUiEofD5yREQkTUkKekNEOXpOXjY7MzE1
RUskN0lKPHU0bmtARHdFYnczckVnRHI0bztuUnxmKzA0MjEpJEhveFRCUz9VUyR4Z3NrbmFQCnpU
b1c2VzEzPUFjSyN0Jj5JZFVaOGFLMEQ+LSZ6ZUpKdDxhJk8+aCRJNDhPbi0hOz1QVTgjV0o4cWhz
cWolRnNnKAp6UWMwKFc+YmxoR0l5eE9rPnBFLXJASkx8Pjk0VHhDOUZxVlhaTnF5JmJ4e3w0SEI3
M15jKmlhYjRea29QQXU5JXcKekY1JHVTMnA7Nl5LTlQlPUpqZXxKNTJ9R2hNbHc3fHU1SXcodlEj
WXIwJWp6cGJ2QmpgWlBUSH03OTI/Ums+K2FmCno7NmtOVl9pMUxjNyM8OFY1OXxnIW44Qjs2aCND
XyZHNFJOZTA0PFE7UGdVQCVEe0t5aEorNVdgbTleNUA4eUpCUQp6TEplak4/clZAQEs2fUlNVStm
aC1kelZ3cnNsSVBgQyQofWtWTDVRMEsmPGh7aUlUa1oyUW5RYmtORG84P2YyTDYKemF8OVBUYVdz
Zk8hRyVhTWhEKTViOXdqNFNCaFVaWC11ejU/eHI8flBoZFNgfVhxVll6fEY/UHJHbSNtR213Smxt
CnpOI3s1c0IhX3d7XjxNPDhgM0Z3VDt6KUttcjctYVdgKDIrLSUwemI7RXFtIU1tXkF1UDhEPC12
NUMkZExNbS12Pwp6c1JoR140NjRuVXVxbmRrZUFyd0ZuflB6eTVqSWJSJX0ydUtxbWNPa0FzTC1V
TUR9cXhxfjtWMFg/LWNUWWlZUTQKemdnc2pMZEgjPWpGRncrSGopPiZvZnhWVEFTWlIpQCUyNyhq
NX1aPDRCMUkmLWd1fVZpVmd6NTwkUmZKdisrMmJUCnpSViRySV5ebX5vKkZeRytPYGNnR0khSTAt
I09TdDE+cF5+OzE0MmxJPzE4flNuYzVxS1cqMio+Zi1Lb3Y1OGBDKwp6T3BxdmgjaWR3NlckKFBi
cV5VZ2AoLUpMdjdjYSQ8RV8pbDdWaE5iTkNvYVgzRj8lMW02aWR3UEBuWSZzKChvZ1IKekRebXJq
IzxmJSU7IVdzYExpUlJELUFHPX5oPmc9YGEzZGxLM3c9YWQ9YzA/QmJsQVQza3wmKWNFJlZNXzYm
NmhECnoxKURqe1AtYClwZUNaJEJFOHlKOTlNU0hIJG1MKFJjU2JvdVRobWsrVWEhbzUmKDZvWiht
VE08XjcoTlRqYFAzUQp6ZlZUN0JVJi1URkd2e0FoJHM7eGctOF9uVEVZezZlQmo7U3EtfWw9NXF8
U2RnVD4xZk54dk5KZGojbz9iX19mc2kKemBCI2BLeX1ObTU2dXFrNTU0IUx6TVlRfUdNWkNLRjF4
NH5rQTVXeGpAWkNoI2RAfDloem17ayhla2pwZHs2PURCCno+Qz1YZFp2QUNNelZ1Tjxafmk/KmVg
KS1zKXJGVigqWEV4STQzXiZES1hLZXcxck49PjA2NGskM0Jzd3h1TkY+Ywp6IV9rV2A/IUJjb3l0
I1I2PWs4bmk7XjV4cW8lUUJ9ZnJzRGglWSNRJl8wN2lnYFApMGdUaVpLKHFldGgqcFAkXkcKemo/
TmUoYzcxTyYrSXF8YGh0RVdZbGhPMlRNP1gzXmR5Kk9OUDVFZUheTGY1SCo/d1g4X3tJbHx7P2Uo
a0pBRDQ3CnpKOWwwbGUoMXYrKW1vcm49Y1ZiO21PTGxIPiFYcXZaZn1weVl5SSR6aTROYmNZZGJJ
UylkYmh5cD0md18qV2NORQp6eUsmKG0mV0YhOT5Qd15OLV8/QlpAJFReVCNDc00kQDM8SmcoUmdx
MyhaPjZsdVFBQGdAY3FRYigmclA4JDJUYFYKSjVaYD9LZSpzODFUakJyIQoKbGl0ZXJhbCAwCkhj
bVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3N0cmVzcy9zdHJlYW1pbmctYmFz
aWMuanMgYi9KU1Rlc3RzL3dhc20vc3RyZXNzL3N0cmVhbWluZy1iYXNpYy5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5iM2ZiYzI0NzlmNzIxNjNkZmFkMzIxMDQwNTZiYTI3NDM1OTIzNWRhCi0tLSAvZGV2L251bGwK
KysrIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9zdHJlYW1pbmctYmFzaWMuanMKQEAgLTAsMCArMSwx
OCBAQAoraW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcyc7CisKK3ZhciBkYXRh
ID0gcmVhZCgiLi9uYW1lU2VjdGlvbi53YXNtIiwgImJpbmFyeSIpOworCitmdW5jdGlvbiBjaGVj
ayhzdGVwKQoreworICAgIHZhciBwYXJzZXIgPSAkdm0uY3JlYXRlV2FzbVN0cmVhbWluZ1BhcnNl
cigpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5ieXRlTGVuZ3RoOyBpICs9IHN0ZXAp
IHsKKyAgICAgICAgcGFyc2VyLmFkZEJ5dGVzKGRhdGEuc3ViYXJyYXkoaSwgaSArIE1hdGgubWlu
KHN0ZXAsIGRhdGEuYnl0ZUxlbmd0aCAtIGkpKSk7CisgICAgfQorICAgIGFzc2VydC5lcShwYXJz
ZXIuZmluYWxpemUoKSwgNyk7Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTA7ICsraSkKKyAg
ICBjaGVjayhpICsgMSk7CitjaGVjaygxMDApOworY2hlY2soMTAwMCk7CitjaGVjaygyMDAwKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>348141</attachid>
            <date>2018-08-27 07:16:40 -0700</date>
            <delta_ts>2018-08-27 07:20:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-188943-20180827231639.patch</filename>
            <type>text/plain</type>
            <size>170364</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM1MzU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
ZDJhYzBiZmEwNjcxODA3MDdlMGE1YmI1YWFlNzRlZjJlYjNhZTYwLi4wYjUzMWFiZDhmZmM4Yjg2
MjQ0ZTYxODQzZDUxMmIxZmU1YWFhZDgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNjUgQEAKKzIwMTgtMDgtMjcgIFl1c3VrZSBTdXp1a2kgIDx5dXN1a2VzdXp1a2lAc2xv
d3N0YXJ0Lm9yZz4KKworICAgICAgICBbV2ViQXNzZW1ibHldIFBhcnNlIHdhc20gbW9kdWxlcyBp
biBhIHN0cmVhbWluZyBmYXNoaW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xODg5NDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgV2FzbTo6U3RyZWFtaW5nUGFyc2VyLCB3aGlj
aCBwYXJzZXMgd2FzbSBiaW5hcnkgaW4gYSBzdHJlYW1pbmcgZmFzaGlvbi4KKyAgICAgICAgQ3Vy
cmVudGx5LCB0aGlzIFN0cmVhbWluZ1BhcnNlciBpcyBub3QgZW5hYmxlZCBhbmQgaW50ZWdyYXRl
ZC4gSW4gc3Vic2VxdWVudCBwYXRjaGVzLAorICAgICAgICB3ZSBzdGFydCBpbnRlZ3JhdGluZyBp
dCBpbnRvIEJCUVBsYW4gYW5kIGRyb3BwaW5nIHRoZSBvbGQgTW9kdWxlUGFyc2VyLgorCisgICAg
ICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiB0b29scy9KU0RvbGxhclZNLmNwcDoKKyAgICAgICAg
KFdURjo6V2FzbVN0cmVhbWluZ1BhcnNlcjo6V2FzbVN0cmVhbWluZ1BhcnNlcik6CisgICAgICAg
IChXVEY6Oldhc21TdHJlYW1pbmdQYXJzZXI6OmNyZWF0ZSk6CisgICAgICAgIChXVEY6Oldhc21T
dHJlYW1pbmdQYXJzZXI6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXVEY6Oldhc21TdHJl
YW1pbmdQYXJzZXI6OnN0cmVhbWluZ1BhcnNlcik6CisgICAgICAgIChXVEY6Oldhc21TdHJlYW1p
bmdQYXJzZXI6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdURjo6ZnVuY3Rpb25XYXNtU3Ry
ZWFtaW5nUGFyc2VyQWRkQnl0ZXMpOgorICAgICAgICAoV1RGOjpmdW5jdGlvbldhc21TdHJlYW1p
bmdQYXJzZXJGaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uQ3JlYXRlV2FzbVN0cmVh
bWluZ1BhcnNlcik6CisgICAgICAgIChKU0M6OkpTRG9sbGFyVk06OmZpbmlzaENyZWF0aW9uKToK
KyAgICAgICAgVGhpcyBvYmplY3QgaXMgaW50cm9kdWNlZCBmb3IgdGVzdGluZyBwdXJwb3NlLiBB
ZGRlZCBuZXcgc3RyZXNzIHRlc3QgdXNlcyB0aGlzIGludGVyZmFjZQorICAgICAgICB0byB0ZXN0
IHN0cmVhbWluZyBwYXJzZXIgaW4gdGhlIEpTQyBzaGVsbC4KKworICAgICAgICAqIHdhc20vV2Fz
bUJCUVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpCQlFQbGFuKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSk6CisgICAg
ICAgIChKU0M6Oldhc206OkJCUVBsYW46OnByZXBhcmUpOgorICAgICAgICAoSlNDOjpXYXNtOjpC
QlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6
Y29tcGxldGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjp3b3JrKToKKyAgICAgICAg
KiB3YXNtL1dhc21CQlFQbGFuLmg6CisgICAgICAgIEJCUVBsYW4gaGFzIG1fc291cmNlLCBidXQg
b25jZSBNb2R1bGVJbmZvcm1hdGlvbiBpcyBwYXJzZWQsIGl0IGlzIG5vIGxvbmdlciBuZWNlc3Nh
cnkuCisgICAgICAgIEluIHN1YnNlcXVlbnQgcGF0Y2hlcywgd2Ugd2lsbCByZW1vdmUgdGhpcywg
YW5kIHN0cmVhbSB0aGUgZGF0YSBpbnRvIHRoZSBCQlFQbGFuLgorCisgICAgICAgICogd2FzbS9X
YXNtRm9ybWF0Lmg6CisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbjo6TW9kdWxlSW5mb3JtYXRpb24p
OgorICAgICAgICAqIHdhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmg6CisgICAgICAgIE9uZSBv
ZiB0aGUgbGFyZ2VzdCBjaGFuZ2UgaW4gdGhpcyBwYXRjaCBpcyB0aGF0IE1vZHVsZUluZm9ybWF0
aW9uIG5vIGxvbmdlciBob2xkcyBzb3VyY2UgYnl0ZXMsCisgICAgICAgIHNpbmNlIHNvdXJjZSBi
eXRlcyBjYW4gYmUgYWRkZWQgaW4gYSBzdHJlYW1pbmcgZmFzaGlvbi4gSW5zdGVhZCBvZiBob2xk
aW5nIGFsbCB0aGUgc291cmNlIGJ5dGVzCisgICAgICAgIGluIE1vZHVsZUluZm9ybWF0aW9uLCBl
YWNoIGZ1bmN0aW9uIChNb2R1bGVJbmZvcm1hdGlvbjo6ZnVuY3Rpb25zLCBGdW5jdGlvbkRhdGEp
IHNob3VsZCBoYXZlCisgICAgICAgIFZlY3Rvcjx1aW50OF90PiBmb3IgaXRzIGRhdGEuIFRoaXMg
ZGF0YSBpcyBldmVudHVhbGx5IGZpbGxlZCBieSBTdHJlYW1pbmdQYXJzZXIsIGFuZCBjb21waWxp
bmcKKyAgICAgICAgYSBmdW5jdGlvbiB3aXRoIHRoaXMgZGF0YSBjYW4gYmUgZG9uZSBjb25jdXJy
ZW50bHkgd2l0aCBTdHJlYW1pbmdQYXJzZXIuCisKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxl
SW5mb3JtYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZUluZm9ybWF0
aW9uOjptZW1vcnlDb3VudCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZUluZm9y
bWF0aW9uOjp0YWJsZUNvdW50IGNvbnN0KToKKyAgICAgICAgbWVtb3J5Q291bnQgYW5kIHRhYmxl
Q291bnQgc2hvdWxkIGJlIHJlY29yZWRlZCBpbiBNb2R1bGVJbmZvcm1hdGlvbi4KKworICAgICAg
ICAqIHdhc20vV2FzbU1vZHVsZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVs
ZVBhcnNlcjo6cGFyc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjptYWtlSTMySW5pdEV4cHIpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlVHlwZSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VJbXBvcnQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb24p
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlUmVzaXph
YmxlTGltaXRzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpw
YXJzZVRhYmxlSGVscGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFy
c2VyOjpwYXJzZVRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFy
c2VyOjpwYXJzZU1lbW9yeUhlbHBlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206Ok1v
ZHVsZVBhcnNlcjo6cGFyc2VNZW1vcnkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpN
b2R1bGVQYXJzZXI6OnBhcnNlR2xvYmFsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6
TW9kdWxlUGFyc2VyOjpwYXJzZUV4cG9ydCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206
Ok1vZHVsZVBhcnNlcjo6cGFyc2VTdGFydCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206
Ok1vZHVsZVBhcnNlcjo6cGFyc2VFbGVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2Fz
bTo6TW9kdWxlUGFyc2VyOjpwYXJzZUNvZGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNt
OjpNb2R1bGVQYXJzZXI6OnBhcnNlSW5pdEV4cHIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpX
YXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlR2xvYmFsVHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZUN1c3RvbSk6IERlbGV0ZWQuCisgICAgICAgIEV4
dHJhY3Qgc2VjdGlvbiBwYXJzaW5nIGNvZGUgb3V0IGZyb20gTW9kdWxlUGFyc2VyLiBXZSBjcmVh
dGUgU2VjdGlvblBhcnNlciBhbmQgTW9kdWxlUGFyc2VyIHVzZXMgaXQuCisgICAgICAgIFNlY3Rp
b25QYXJzZXIgaXMgYWxzbyB1c2VkIGJ5IFN0cmVhbWluZ1BhcnNlci4KKworICAgICAgICAqIHdh
c20vV2FzbU1vZHVsZVBhcnNlci5oOgorICAgICAgICAqIHdhc20vV2FzbU5hbWVTZWN0aW9uLmg6
CisgICAgICAgIChKU0M6Oldhc206Ok5hbWVTZWN0aW9uOjpOYW1lU2VjdGlvbik6CisgICAgICAg
IChKU0M6Oldhc206Ok5hbWVTZWN0aW9uOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpO
YW1lU2VjdGlvbjo6c2V0SGFzaCk6CisgICAgICAgIEhhc2ggY2FsY3VsYXRpb24gaXMgZGVmZXJy
ZWQgc2luY2UgYWxsIHRoZSBzb3VyY2UgaXMgbm90IGF2YWlsYWJsZSBpbiBzdHJlYW1pbmcgcGFy
c2luZy4KKworICAgICAgICAqIHdhc20vV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmNwcDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6TmFtZVNlY3Rpb25QYXJzZXI6OnBhcnNlKToKKyAgICAgICAgKiB3YXNt
L1dhc21OYW1lU2VjdGlvblBhcnNlci5oOgorICAgICAgICBVc2UgUmVmPE5hbWVTZWN0aW9uPi4K
KworICAgICAgICAqIHdhc20vV2FzbU9NR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpP
TUdQbGFuOjp3b3JrKToKKyAgICAgICAgV2FzbTo6UGxhbiBubyBsb25nZXIgaGF2ZSBtX3NvdXJj
ZSBzaW5jZSBkYXRhIHdpbGwgYmUgZXZlbnR1YWxseSBmaWxsZWQgaW4gYSBzdHJlYW1pbmcgZmFz
aGlvbi4KKyAgICAgICAgT01HUGxhbiBjYW4gZ2V0IGRhdGEgb2YgdGhlIGZ1bmN0aW9uIGJ5IHVz
aW5nIE1vZHVsZUluZm9ybWF0aW9uOjpmdW5jdGlvbnMuCisKKyAgICAgICAgKiB3YXNtL1dhc21Q
YXJzZXIuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGFyc2VyOjpzb3VyY2UgY29uc3QpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpQYXJzZXI6Omxlbmd0aCBjb25zdCk6CisgICAgICAgIChKU0M6Oldh
c206OlBhcnNlcjo6b2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGFyc2VyOjpm
YWlsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6bWFrZUkzMkluaXRFeHByKToKKyAgICAg
ICAgKiB3YXNtL1dhc21QbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6UGxhbik6
CisgICAgICAgIFdhc206OlBsYW4gc2hvdWxkIG5vdCBoYXZlIGFsbCB0aGUgc291cmNlIGFwcmlv
cmkuIFN0cmVhbWVkIGRhdGEgd2lsbCBiZSBwdW1wZWQgZnJvbSB0aGUgcHJvdmlkZXIuCisKKyAg
ICAgICAgKiB3YXNtL1dhc21QbGFuLmg6CisgICAgICAgICogd2FzbS9XYXNtU2VjdGlvblBhcnNl
ci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQ
YXJzZXIuY3BwLgorICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZVR5cGUp
OgorICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZUltcG9ydCk6CisgICAg
ICAgIChKU0M6Oldhc206OlNlY3Rpb25QYXJzZXI6OnBhcnNlRnVuY3Rpb24pOgorICAgICAgICAo
SlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZVJlc2l6YWJsZUxpbWl0cyk6CisgICAgICAg
IChKU0M6Oldhc206OlNlY3Rpb25QYXJzZXI6OnBhcnNlVGFibGVIZWxwZXIpOgorICAgICAgICAo
SlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZVRhYmxlKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6U2VjdGlvblBhcnNlcjo6cGFyc2VNZW1vcnlIZWxwZXIpOgorICAgICAgICAoSlNDOjpXYXNt
OjpTZWN0aW9uUGFyc2VyOjpwYXJzZU1lbW9yeSk6CisgICAgICAgIChKU0M6Oldhc206OlNlY3Rp
b25QYXJzZXI6OnBhcnNlR2xvYmFsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNl
cjo6cGFyc2VFeHBvcnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJz
ZVN0YXJ0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VFbGVtZW50
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VDb2RlKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VJbml0RXhwcik6CisgICAgICAgIChK
U0M6Oldhc206OlNlY3Rpb25QYXJzZXI6OnBhcnNlR2xvYmFsVHlwZSk6CisgICAgICAgIChKU0M6
Oldhc206OlNlY3Rpb25QYXJzZXI6OnBhcnNlRGF0YSk6CisgICAgICAgIChKU0M6Oldhc206OlNl
Y3Rpb25QYXJzZXI6OnBhcnNlQ3VzdG9tKToKKyAgICAgICAgKiB3YXNtL1dhc21TZWN0aW9uUGFy
c2VyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQ
YXJzZXIuaC4KKyAgICAgICAgU2VjdGlvblBhcnNlciBpcyBleHRyYWN0ZWQgZnJvbSBNb2R1bGVQ
YXJzZXIuIEFuZCBpdCBpcyB1c2VkIGJvdGggdGhlIG9sZCAoY3VycmVudGx5IHdvcmtpbmcpIE1v
ZHVsZVBhcnNlcgorICAgICAgICBhbmQgdGhlIG5ldyBTdHJlYW1pbmdQYXJzZXIuCisKKyAgICAg
ICAgKiB3YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
V2FzbTo6cGFyc2VVSW50Nyk6CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6
ZmFpbCk6CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6U3RyZWFtaW5nUGFy
c2VyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U3RyZWFtaW5nUGFyc2VyOjpwYXJzZU1vZHVsZUhl
YWRlcik6CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6cGFyc2VTZWN0aW9u
SGVhZGVyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U3RyZWFtaW5nUGFyc2VyOjpwYXJzZVNlY3Rp
b25TaXplKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U3RyZWFtaW5nUGFyc2VyOjpwYXJzZUNvZGVT
ZWN0aW9uU2l6ZSk6CisgICAgICAgIENvZGUgc2VjdGlvbiBpbiBXYXNtIGJpbmFyeSBpcyBzcGVj
aWFsbHkgaGFuZGxlZCBjb21wYXJlZCB3aXRoIHRoZSBvdGhlciBzZWN0aW9ucyBzaW5jZSBpdCBp
bmNsdWRlcworICAgICAgICBidW5jaCBvZiBmdW5jdGlvbnMuIFN0cmVhbWluZ1BhcnNlciBleHRy
YWN0cyBlYWNoIGZ1bmN0aW9uIGluIGEgc3RyZWFtaW5nIGZhc2hpb24gYW5kIGVuYWJsZSBzdHJl
YW1pbmcKKyAgICAgICAgdmFsaWRhdGlvbiAvIGNvbXBpbGF0aW9uIG9mIFdhc20gZnVuY3Rpb25z
LgorCisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6cGFyc2VGdW5jdGlvbkhl
YWRlcik6CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6cGFyc2VGdW5jdGlv
bkJvZHkpOgorICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OnBhcnNlU2VjdGlv
bkJvZHkpOgorICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmNvbnN1bWUpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmNvbnN1bWVWYXJVSW50MzIpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6U3RyZWFtaW5nUGFyc2VyOjpmYWlsT25TdGF0ZSk6CisgICAgICAgIChKU0M6
Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6ZmluYWxpemUpOgorICAgICAgICAqIHdhc20vV2FzbVN0
cmVhbWluZ1BhcnNlci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6U3RyZWFtaW5nUGFy
c2VyOjphZGRCeXRlcyk6CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6ZXJy
b3JNZXNzYWdlIGNvbnN0KToKKyAgICAgICAgVGhpcyBpcyBvdXIgbmV3IFN0cmVhbWluZ1BhcnNl
ciBpbXBsZW1lbnRhdGlvbi4gU3RyZWFtaW5nUGFyc2VyOjpjb25zdW1lWFhYIGZ1bmN0aW9ucyBn
ZXQgZGF0YSwgYW5kCisgICAgICAgIFN0cmVhbWluZ1BhcnNlcjo6cGFyc2VYWFggZnVuY3Rpb25z
IHBhcnNlIGNvbnN1bWVkIGRhdGEuIFRoZSB1c2VyIG9mIFN0cmVhbWluZ1BhcnNlciBjYWxscwor
ICAgICAgICBTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKCkgdG8gcHVtcCB0aGUgYnl0ZXMgc3Ry
ZWFtIGludG8gdGhlIHBhcnNlci4gQW5kIG9uY2UgYWxsIHRoZSBkYXRhIGlzIHB1bXBlZCwKKyAg
ICAgICAgdGhlIHVzZXIgY2FsbHMgU3RyZWFtaW5nUGFyc2VyOjpmaW5hbGl6ZS4gU3RyZWFtaW5n
UGFyc2VyIGlzIGEgc3RhdGUgbWFjaGluZSB3aGljaCBmZWVkcyB0aGUgaW5jb21pbmcKKyAgICAg
ICAgYnl0ZSBzdHJlYW0uCisKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUu
Y3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpzb3VyY2UgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICBBbGwgdGhlIHNvdXJjZSBzaG91bGQgbm90IGJlIGhlbGQuCisKKyAg
ICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaDoKKyAgICAgICAgKiB3YXNtL2pz
L1dlYkFzc2VtYmx5UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlWYWxp
ZGF0ZUZ1bmMpOgorCiAyMDE4LTA4LTI0ICBZdXN1a2UgU3V6dWtpICA8eXVzdWtlc3V6dWtpQHNs
b3dzdGFydC5vcmc+CiAKICAgICAgICAgW0pTQ10gQXJyYXkucHJvdG90eXBlLnJldmVyc2UgbW9k
aWZpZXMgSlNJbW11dGFibGVCdXR0ZXJmbHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdl
TG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggYzJmMWVmYTE5ZmE1ODQ0NmI4MGQ2MjQ0
YmRiZDk1YWVkOTFiYWNhNS4uNWJhZjA1M2RiMGRkZjczNjgwYmM1YzZiMjk3NWU2ZDY1OTlkZGEx
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxOC0wOC0yNyAgWXVzdWtlIFN1enVraSAgPHl1c3Vr
ZXN1enVraUBzbG93c3RhcnQub3JnPgorCisgICAgICAgIFtXZWJBc3NlbWJseV0gUGFyc2Ugd2Fz
bSBtb2R1bGVzIGluIGEgc3RyZWFtaW5nIGZhc2hpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4ODk0MworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBtYXhCeXRlTGVuZ3RoIGZ1bmN0aW9uIHRvIGdl
dCB0aGUgbWF4aW11bSBzaXplIGZvciBULgorCisgICAgICAgICogd3RmL0xFQkRlY29kZXIuaDoK
KyAgICAgICAgKFdURjo6TEVCRGVjb2Rlcjo6bWF4Qnl0ZUxlbmd0aCk6CisgICAgICAgIChXVEY6
OkxFQkRlY29kZXI6OmRlY29kZVVJbnQpOgorICAgICAgICAoV1RGOjpMRUJEZWNvZGVyOjpkZWNv
ZGVJbnQpOgorCiAyMDE4LTA4LTI1ICBZdXN1a2UgU3V6dWtpICA8eXVzdWtlc3V6dWtpQHNsb3dz
dGFydC5vcmc+CiAKICAgICAgICAgU2hyaW5rIHNpemUgb2YgWE1MSHR0cFJlcXVlc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMTdhNDhiZGE2ZDRiZTM5N2IwOGU5NDZjYmQ0ODYx
MDY3NDc5OWRhZS4uNDI2ZDE5ZGNlOTU0ODJlODUxYmZlOWM5Mzg3ZDJjZjYzM2Y1NWQ0OCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE3MzQsNiArMTczNCw4IEBACiAJCUUzOTNB
REQ4MUZFNzAyRDAwMDIyRDY4MSAvKiBXZWFrTWFwSW1wbElubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzOTNBREQ3MUZFNzAyQ0MwMDIyRDY4
MSAvKiBXZWFrTWFwSW1wbElubGluZXMuaCAqLzsgfTsKIAkJRTM5RDQ1RjUxRDM5MDA1NjAwQjNC
Mzc3IC8qIEludGVycHJldGVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTM5RDlEODQxRDM5MDAwNjAwNjY3MjgyIC8qIEludGVycHJldGVy
SW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUUzOURBNEE3MUI3RThCN0MwMDg0RjMzQSAvKiBKU01vZHVsZVJlY29yZC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM5REE0QTUxQjdFOEI3QzAw
ODRGMzNBIC8qIEpTTW9kdWxlUmVjb3JkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJRTNBMDUzMUEyMTM0MkI2ODAwMjJFQzE0IC8qIFdhc21TdHJl
YW1pbmdQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUzQTA1MzE2MjEzNDJCNjYwMDIyRUMxNCAvKiBXYXNtU3RyZWFtaW5nUGFyc2VyLmggKi87
IH07CisJCUUzQTA1MzFDMjEzNDJCNjgwMDIyRUMxNCAvKiBXYXNtU2VjdGlvblBhcnNlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTNBMDUzMTgyMTM0
MkI2NzAwMjJFQzE0IC8qIFdhc21TZWN0aW9uUGFyc2VyLmggKi87IH07CiAJCUUzQTMyQkM3MUZD
ODMxNDcwMDdEN0U3NiAvKiBXZWFrTWFwSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTNBMzJCQzYxRkM4MzEyRTAwN0Q3RTc2IC8qIFdlYWtNYXBJ
bXBsLmggKi87IH07CiAJCUUzQTQyMTQzMUQ2RjU4OTMwMDA3QzYxNyAvKiBQcmVjaXNlSnVtcFRh
cmdldHNJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFM0E0MjE0MjFENkY1ODhGMDAwN0M2MTcgLyogUHJlY2lzZUp1bXBUYXJnZXRzSW5saW5l
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUz
QkZEMEJDMURBRjgwOEUwMDY1REVBMiAvKiBBY2Nlc3NDYXNlU25pcHBldFBhcmFtcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTNCRkQwQkExREFGODA3
QzAwNjVERUEyIC8qIEFjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmggKi87IH07CkBAIC00NjIyLDYg
KzQ2MjQsMTAgQEAKIAkJRTM5RDlEODQxRDM5MDAwNjAwNjY3MjgyIC8qIEludGVycHJldGVySW5s
aW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlcnByZXRlcklubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM5REE0QTQxQjdFOEI3QzAwODRG
MzNBIC8qIEpTTW9kdWxlUmVjb3JkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTTW9kdWxlUmVjb3JkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTM5REE0QTUxQjdFOEI3QzAwODRGMzNBIC8qIEpTTW9kdWxlUmVjb3JkLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTW9kdWxlUmVjb3JkLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUUzQTA1MzE2MjEzNDJCNjYwMDIyRUMxNCAvKiBXYXNtU3RyZWFtaW5nUGFy
c2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21TdHJlYW1pbmdQYXJz
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTNBMDUzMTcyMTM0MkI2NjAwMjJF
QzE0IC8qIFdhc21TZWN0aW9uUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdhc21TZWN0aW9uUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRTNBMDUzMTgyMTM0MkI2NzAwMjJFQzE0IC8qIFdhc21TZWN0aW9uUGFyc2VyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21TZWN0aW9uUGFyc2VyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzQTA1MzE5MjEzNDJCNjcwMDIyRUMxNCAvKiBXYXNt
U3RyZWFtaW5nUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdhc21TdHJlYW1pbmdQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
M0EzMkJDNTFGQzgzMTJEMDA3RDdFNzYgLyogV2Vha01hcEltcGwuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Vha01hcEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFM0EzMkJDNjFGQzgzMTJFMDA3RDdFNzYgLyogV2Vha01hcEltcGwuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vha01hcEltcGwuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTNBNDIxNDIxRDZGNTg4RjAwMDdDNjE3IC8qIFByZWNpc2VK
dW1wVGFyZ2V0c0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJl
Y2lzZUp1bXBUYXJnZXRzSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
NjM0OCw5ICs2MzU0LDEzIEBACiAJCQkJNTNGNDBFOEMxRDU5MDFGMjAwOTlBMUI2IC8qIFdhc21Q
YXJzZXIuaCAqLywKIAkJCQk1MzEzNzRCRTFENUNFOTUwMDBBRjdBMEIgLyogV2FzbVBsYW4uY3Bw
ICovLAogCQkJCTUzMTM3NEJDMUQ1Q0U2NzYwMEFGN0EwQiAvKiBXYXNtUGxhbi5oICovLAorCQkJ
CUUzQTA1MzE3MjEzNDJCNjYwMDIyRUMxNCAvKiBXYXNtU2VjdGlvblBhcnNlci5jcHAgKi8sCisJ
CQkJRTNBMDUzMTgyMTM0MkI2NzAwMjJFQzE0IC8qIFdhc21TZWN0aW9uUGFyc2VyLmggKi8sCiAJ
CQkJNTNGNDBFODQxRDU4Rjk3NzAwOTlBMUI2IC8qIFdhc21TZWN0aW9ucy5oICovLAogCQkJCUFE
NzQzOEJFMUUwNDU3OTIwMEZEMEMyQSAvKiBXYXNtU2lnbmF0dXJlLmNwcCAqLywKIAkJCQlBRDc0
MzhCRjFFMDQ1NzkyMDBGRDBDMkEgLyogV2FzbVNpZ25hdHVyZS5oICovLAorCQkJCUUzQTA1MzE5
MjEzNDJCNjcwMDIyRUMxNCAvKiBXYXNtU3RyZWFtaW5nUGFyc2VyLmNwcCAqLywKKwkJCQlFM0Ew
NTMxNjIxMzQyQjY2MDAyMkVDMTQgLyogV2FzbVN0cmVhbWluZ1BhcnNlci5oICovLAogCQkJCUFE
NUMzNkUzMUY2OUVDOEIwMDBCQ0FBRiAvKiBXYXNtVGFibGUuY3BwICovLAogCQkJCUFENUMzNkU0
MUY2OUVDOEIwMDBCQ0FBRiAvKiBXYXNtVGFibGUuaCAqLywKIAkJCQk1MjUwRDJDRjFFOERBMDVB
MDAyOUE5MzIgLyogV2FzbVRodW5rcy5jcHAgKi8sCkBAIC04NDQ4LDcgKzg0NTgsNiBAQAogCQkJ
CUMyRkNBRTEzMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNjY2RUMwMTgzNTY2RjkwMEQwMTdGMSAvKiBCeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzI4REFFQjFEMzhE
MDA1MDAxQTI1MjkgLyogQnl0ZWNvZGVSZXdyaXRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRkVB
M0JCQUMyMTJDOTdDQjAwRTkzQUQxIC8qIERGR0NGRy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjUx
NEYyMTkxOEIzRTE2NzAwOThGRjhCIC8qIEJ5dGVjb2Rlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY4ODVFMTExODQ5QTNCRTAwRjFFM0ZBIC8qIEJ5dGVjb2RlVXNlRGVmLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjgwMjNFQTE2MTM4MzJCMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggaW4gSGVhZGVy
cyAqLywKQEAgLTg1ODEsNiArODU5MCw3IEBACiAJCQkJMEZCREI5QUQxQUIwRkJDNjAwMEI1N0U1
IC8qIERGR0NhbGxDcmVhdGVEaXJlY3RBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY3QjI5NEIxNEMzQ0QyRjAwN0MzREIxIC8qIERGR0NhcGFiaWxpdGll
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5NTgxNEVGOTBBMjAwQzcyNTMyIC8qIERGR0NG
QVBoYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRUEzQkJBQzIxMkM5N0NCMDBFOTNBRDEgLyog
REZHQ0ZHLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjNCM0EyODE1NDRDOTk3MDAzRUQwRkYgLyog
REZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RDM2OTUx
QUU5Q0MzMzAwMEQ0REZCIC8qIERGR0NsZWFuVXBQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTc3QTQyNDAxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Nsb2JiZXJpemUuaCBpbiBIZWFkZXJzICov
LApAQCAtOTYwNyw4ICs5NjE3LDEwIEBACiAJCQkJNzlCNzU5NzYxREZBNEM2MDAwNTIxNzRDIC8q
IFdhc21QYWdlQ291bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzRjQwRThEMUQ1OTAxRjIwMDk5
QTFCNiAvKiBXYXNtUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzEzNzRCRDFENUNFNjc2
MDBBRjdBMEIgLyogV2FzbVBsYW4uaCBpbiBIZWFkZXJzICovLAorCQkJCUUzQTA1MzFDMjEzNDJC
NjgwMDIyRUMxNCAvKiBXYXNtU2VjdGlvblBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTNG
NDBFODUxRDU4Rjk3NzAwOTlBMUI2IC8qIFdhc21TZWN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQUQ3NDM4QzAxRTA0NTdBNDAwRkQwQzJBIC8qIFdhc21TaWduYXR1cmUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUUzQTA1MzFBMjEzNDJCNjgwMDIyRUMxNCAvKiBXYXNtU3RyZWFtaW5nUGFyc2Vy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDVDMzZFNjFGNjlFQzkxMDAwQkNBQUYgLyogV2FzbVRh
YmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MjUwRDJEMjFFOERBMDVBMDAyOUE5MzIgLyogV2Fz
bVRodW5rcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTNFOUUwQUYxRUFFQzQ1NzAwRkVFMjUxIC8q
IFdhc21UaWVyVXBDb3VudC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50
eHQKaW5kZXggODk3Njk4YzZlMDU5YWUxZDI2MjEzMWFjNTIwNDAwZTMxNzhlZGNjNS4uMDRkNDhl
ODViNTBmYjgzZmIxMjUwNWZlZTE0YTg1MzU5Y2MxZTMwOSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3Vy
Y2VzLnR4dApAQCAtOTkyLDcgKzk5Miw5IEBAIHdhc20vV2FzbU9NR1BsYW4uY3BwCiB3YXNtL1dh
c21PcGNvZGVPcmlnaW4uY3BwCiB3YXNtL1dhc21QYWdlQ291bnQuY3BwCiB3YXNtL1dhc21QbGFu
LmNwcAord2FzbS9XYXNtU2VjdGlvblBhcnNlci5jcHAKIHdhc20vV2FzbVNpZ25hdHVyZS5jcHAK
K3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAKIHdhc20vV2FzbVRhYmxlLmNwcAogd2FzbS9X
YXNtVGFibGUuaAogd2FzbS9XYXNtVGh1bmtzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rv
b2xzL0pTRG9sbGFyVk0uY3BwCmluZGV4IGViNTdjNzg0Yzk4MTgwNDYyZDRhOGU0M2M4NmI1MGJh
YWFlODQ5M2IuLmVmMjU1NzI0YmM2YTExMjAwMTZiN2YyMmY5NjlkYmZmZDljYWUyM2YgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAKQEAgLTUxLDYgKzUxLDEx
IEBACiAjaW5jbHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmlu
dFN0cmVhbS5oPgogCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorI2luY2x1ZGUgIkpTV2ViQXNz
ZW1ibHlIZWxwZXJzLmgiCisjaW5jbHVkZSAiV2FzbVN0cmVhbWluZ1BhcnNlci5oIgorI2VuZGlm
CisKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCkBAIC0xMDkz
LDYgKzEwOTgsODAgQEAgdm9pZCBFbGVtZW50OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFJvb3Qq
IHJvb3QpCiAgICAgbV9yb290LT5zZXRFbGVtZW50KHRoaXMpOwogfQogCisjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bldhc21TdHJlYW1pbmdQYXJzZXJBZGRCeXRlcyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uV2FzbVN0cmVhbWluZ1BhcnNlckZpbmFsaXpl
KEV4ZWNTdGF0ZSopOworCitjbGFzcyBXYXNtU3RyZWFtaW5nUGFyc2VyIDogcHVibGljIEpTRGVz
dHJ1Y3RpYmxlT2JqZWN0IHsKK3B1YmxpYzoKKyAgICBXYXNtU3RyZWFtaW5nUGFyc2VyKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQor
ICAgICAgICAsIG1faW5mbyhXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbjo6Y3JlYXRlKCkpCisgICAg
ICAgICwgbV9zdHJlYW1pbmdQYXJzZXIobV9pbmZvLmdldCgpKQorICAgIHsKKyAgICB9CisKKyAg
ICB1c2luZyBCYXNlID0gSlNEZXN0cnVjdGlibGVPYmplY3Q7CisKKyAgICBzdGF0aWMgV2FzbVN0
cmVhbWluZ1BhcnNlciogY3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKKyAgICB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY3JlYXRlU3RydWN0dXJl
KHZtLCBnbG9iYWxPYmplY3QsIGpzTnVsbCgpKTsKKyAgICAgICAgV2FzbVN0cmVhbWluZ1BhcnNl
ciogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2FzbVN0cmVhbWluZ1BhcnNl
cj4odm0uaGVhcCwgc2l6ZW9mKFdhc21TdHJlYW1pbmdQYXJzZXIpKSkgV2FzbVN0cmVhbWluZ1Bh
cnNlcih2bSwgc3RydWN0dXJlKTsKKyAgICAgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAgV2FzbTo6U3RyZWFtaW5nUGFyc2VyJiBz
dHJlYW1pbmdQYXJzZXIoKSB7IHJldHVybiBtX3N0cmVhbWluZ1BhcnNlcjsgfQorCisgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0pCisgICAgeworICAgICAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbih2bSk7CisKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRoaXMt
Pmdsb2JhbE9iamVjdCh2bSk7CisgICAgICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCBn
bG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiYWRkQnl0ZXMiKSwgMCwg
ZnVuY3Rpb25XYXNtU3RyZWFtaW5nUGFyc2VyQWRkQnl0ZXMsIE5vSW50cmluc2ljLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgICAgIHB1
dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnZtLCAiZmluYWxpemUiKSwgMCwgZnVuY3Rpb25XYXNtU3RyZWFtaW5nUGFyc2VyRmlu
YWxpemUsIE5vSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtKSk7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworCisgICAgUmVmPFdh
c206Ok1vZHVsZUluZm9ybWF0aW9uPiBtX2luZm87CisgICAgV2FzbTo6U3RyZWFtaW5nUGFyc2Vy
IG1fc3RyZWFtaW5nUGFyc2VyOworfTsKKworY29uc3QgQ2xhc3NJbmZvIFdhc21TdHJlYW1pbmdQ
YXJzZXI6OnNfaW5mbyA9IHsgIldhc21TdHJlYW1pbmdQYXJzZXIiLCAmQmFzZTo6c19pbmZvLCBu
dWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFdhc21TdHJlYW1pbmdQYXJzZXIp
IH07CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25XYXNtU3RyZWFtaW5n
UGFyc2VyQWRkQnl0ZXMoRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZXhlYy0+dm0oKSk7Cisg
ICAgYXV0byogdGhpc09iamVjdCA9IGpzRHluYW1pY0Nhc3Q8V2FzbVN0cmVhbWluZ1BhcnNlcio+
KHZtLCBleGVjLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCF0aGlzT2JqZWN0KSB7CisgICAgICAg
IHNjb3BlLnJlbGVhc2UoKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4oZmFsc2UpKTsKKyAgICB9CisgICAgYXV0byBkYXRhID0gZ2V0V2FzbUJ1ZmZlckZyb21WYWx1
ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgc2NvcGUucmVsZWFzZSgpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50MzJfdD4odGhpc09iamVjdC0+
c3RyZWFtaW5nUGFyc2VyKCkuYWRkQnl0ZXMoYml0d2lzZV9jYXN0PGNvbnN0IHVpbnQ4X3QqPihk
YXRhLmZpcnN0KSwgZGF0YS5zZWNvbmQpKSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uV2FzbVN0cmVhbWluZ1BhcnNlckZpbmFsaXplKEV4ZWNTdGF0ZSogZXhl
YykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBq
c0R5bmFtaWNDYXN0PFdhc21TdHJlYW1pbmdQYXJzZXIqPih2bSwgZXhlYy0+dGhpc1ZhbHVlKCkp
OworICAgIGlmICghdGhpc09iamVjdCkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c0Jvb2xlYW4oZmFsc2UpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHN0
YXRpY19jYXN0PGludDMyX3Q+KHRoaXNPYmplY3QtPnN0cmVhbWluZ1BhcnNlcigpLmZpbmFsaXpl
KCkpKSk7Cit9CisKKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZQogCiBuYW1lc3BhY2UgSlNDIHsK
QEAgLTE2NDAsNiArMTcxOSwxNSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvbkNyZWF0ZURPTUpJVEdldHRlckJhc2VKU09iamVjdChFeGVjUwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAorI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
K3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlV2FzbVN0
cmVhbWluZ1BhcnNlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShXYXNtU3RyZWFtaW5nUGFyc2VyOjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSkpOworfQorI2VuZGlmCisKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uU2V0SW1wdXJlR2V0dGVyRGVsZWdhdGUoRXhlY1N0YXRlKiBleGVjKQogewogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CkBAIC0yMDQwLDYgKzIxMjgsOSBAQCB2b2lkIEpTRG9sbGFy
Vk06OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICBhZGRGdW5jdGlvbih2bSwgImNyZWF0ZURP
TUpJVENoZWNrU3ViQ2xhc3NPYmplY3QiLCBmdW5jdGlvbkNyZWF0ZURPTUpJVENoZWNrU3ViQ2xh
c3NPYmplY3QsIDApOwogICAgIGFkZEZ1bmN0aW9uKHZtLCAiY3JlYXRlRE9NSklUR2V0dGVyQmFz
ZUpTT2JqZWN0IiwgZnVuY3Rpb25DcmVhdGVET01KSVRHZXR0ZXJCYXNlSlNPYmplY3QsIDApOwog
ICAgIGFkZEZ1bmN0aW9uKHZtLCAiY3JlYXRlQnVpbHRpbiIsIGZ1bmN0aW9uQ3JlYXRlQnVpbHRp
biwgMik7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIGFkZEZ1bmN0aW9uKHZtLCAiY3Jl
YXRlV2FzbVN0cmVhbWluZ1BhcnNlciIsIGZ1bmN0aW9uQ3JlYXRlV2FzbVN0cmVhbWluZ1BhcnNl
ciwgMCk7CisjZW5kaWYKICAgICBhZGRGdW5jdGlvbih2bSwgImdldFByaXZhdGVQcm9wZXJ0eSIs
IGZ1bmN0aW9uR2V0UHJpdmF0ZVByb3BlcnR5LCAyKTsKICAgICBhZGRGdW5jdGlvbih2bSwgInNl
dEltcHVyZUdldHRlckRlbGVnYXRlIiwgZnVuY3Rpb25TZXRJbXB1cmVHZXR0ZXJEZWxlZ2F0ZSwg
Mik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFu
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAppbmRleCBm
NjcyNjg2ZDNmOTlhMGQwZDJlOWMzMjFmMjdiYzBhMWNiZjViMmRkLi40M2M4ZjU2MmFmYTFjMzYz
M2E3ZTZjNjFmNDA5MjJlYzBiZTk3MjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUJCUVBsYW4uY3BwCkBAIC01OSwxMyArNTksMTUgQEAgQkJRUGxhbjo6QkJRUGxhbihDb250
ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGluZm8sIEFzeW5jV29yayB3b3Jr
LAogfQogCiBCQlFQbGFuOjpCQlFQbGFuKENvbnRleHQqIGNvbnRleHQsIFZlY3Rvcjx1aW50OF90
PiYmIHNvdXJjZSwgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFzaywgQ3JlYXRl
RW1iZWRkZXJXcmFwcGVyJiYgY3JlYXRlRW1iZWRkZXJXcmFwcGVyLCBUaHJvd1dhc21FeGNlcHRp
b24gdGhyb3dXYXNtRXhjZXB0aW9uKQotICAgIDogQkJRUGxhbihjb250ZXh0LCBhZG9wdFJlZigq
bmV3IE1vZHVsZUluZm9ybWF0aW9uKFdURk1vdmUoc291cmNlKSkpLCB3b3JrLCBXVEZNb3ZlKHRh
c2spLCBXVEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlvbikK
KyAgICA6IEJhc2UoY29udGV4dCwgTW9kdWxlSW5mb3JtYXRpb246OmNyZWF0ZSgpLCBXVEZNb3Zl
KHRhc2spLCBXVEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlv
bikKKyAgICAsIG1fc291cmNlKFdURk1vdmUoc291cmNlKSkKKyAgICAsIG1fc3RhdGUoU3RhdGU6
OkluaXRpYWwpCisgICAgLCBtX2FzeW5jV29yayh3b3JrKQogewotICAgIG1fc3RhdGUgPSBTdGF0
ZTo6SW5pdGlhbDsKIH0KIAotQkJRUGxhbjo6QkJRUGxhbihDb250ZXh0KiBjb250ZXh0LCBjb25z
dCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgsIEFzeW5jV29yayB3b3JrLCBD
b21wbGV0aW9uVGFzayYmIHRhc2spCi0gICAgOiBCYXNlKGNvbnRleHQsIHNvdXJjZSwgc291cmNl
TGVuZ3RoLCBXVEZNb3ZlKHRhc2spKQorQkJRUGxhbjo6QkJRUGxhbihDb250ZXh0KiBjb250ZXh0
LCBBc3luY1dvcmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0YXNrKQorICAgIDogQmFzZShjb250
ZXh0LCBXVEZNb3ZlKHRhc2spKQogICAgICwgbV9zdGF0ZShTdGF0ZTo6SW5pdGlhbCkKICAgICAs
IG1fYXN5bmNXb3JrKHdvcmspCiB7CkBAIC05MCw3ICs5Miw3IEBAIHZvaWQgQkJRUGxhbjo6bW92
ZVRvU3RhdGUoU3RhdGUgc3RhdGUpCiAgICAgbV9zdGF0ZSA9IHN0YXRlOwogfQogCi1ib29sIEJC
UVBsYW46OnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKQorYm9vbCBCQlFQbGFuOjpwYXJzZUFuZFZh
bGlkYXRlTW9kdWxlKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IHNvdXJjZUxlbmd0aCkK
IHsKICAgICBpZiAobV9zdGF0ZSAhPSBTdGF0ZTo6SW5pdGlhbCkKICAgICAgICAgcmV0dXJuIHRy
dWU7CkBAIC0xMDEsNyArMTAzLDcgQEAgYm9vbCBCQlFQbGFuOjpwYXJzZUFuZFZhbGlkYXRlTW9k
dWxlKCkKICAgICAgICAgc3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CiAKICAgICB7
Ci0gICAgICAgIE1vZHVsZVBhcnNlciBtb2R1bGVQYXJzZXIobV9zb3VyY2UsIG1fc291cmNlTGVu
Z3RoLCBtX21vZHVsZUluZm9ybWF0aW9uKTsKKyAgICAgICAgTW9kdWxlUGFyc2VyIG1vZHVsZVBh
cnNlcihzb3VyY2UsIHNvdXJjZUxlbmd0aCwgbV9tb2R1bGVJbmZvcm1hdGlvbik7CiAgICAgICAg
IGF1dG8gcGFyc2VSZXN1bHQgPSBtb2R1bGVQYXJzZXIucGFyc2UoKTsKICAgICAgICAgaWYgKCFw
YXJzZVJlc3VsdCkgewogICAgICAgICAgICAgQmFzZTo6ZmFpbChob2xkTG9jayhtX2xvY2spLCBX
VEZNb3ZlKHBhcnNlUmVzdWx0LmVycm9yKCkpKTsKQEAgLTEwOSwyMCArMTExLDIxIEBAIGJvb2wg
QkJRUGxhbjo6cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpCiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBjb25zdCBhdXRvJiBmdW5jdGlvbkxvY2F0aW9ucyA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1
bmN0aW9uTG9jYXRpb25JbkJpbmFyeTsKLSAgICBmb3IgKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgg
PSAwOyBmdW5jdGlvbkluZGV4IDwgZnVuY3Rpb25Mb2NhdGlvbnMuc2l6ZSgpOyArK2Z1bmN0aW9u
SW5kZXgpIHsKLSAgICAgICAgZGF0YUxvZ0xuSWYoV2FzbUJCUVBsYW5JbnRlcm5hbDo6dmVyYm9z
ZSwgIlByb2Nlc3NpbmcgZnVuY3Rpb24gc3RhcnRpbmcgYXQ6ICIsIGZ1bmN0aW9uTG9jYXRpb25z
W2Z1bmN0aW9uSW5kZXhdLnN0YXJ0LCAiIGFuZCBlbmRpbmcgYXQ6ICIsIGZ1bmN0aW9uTG9jYXRp
b25zW2Z1bmN0aW9uSW5kZXhdLmVuZCk7Ci0gICAgICAgIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9u
U3RhcnQgPSBtX3NvdXJjZSArIGZ1bmN0aW9uTG9jYXRpb25zW2Z1bmN0aW9uSW5kZXhdLnN0YXJ0
OwotICAgICAgICBzaXplX3QgZnVuY3Rpb25MZW5ndGggPSBmdW5jdGlvbkxvY2F0aW9uc1tmdW5j
dGlvbkluZGV4XS5lbmQgLSBmdW5jdGlvbkxvY2F0aW9uc1tmdW5jdGlvbkluZGV4XS5zdGFydDsK
LSAgICAgICAgQVNTRVJUKGZ1bmN0aW9uTGVuZ3RoIDw9IG1fc291cmNlTGVuZ3RoKTsKKyAgICBj
b25zdCBhdXRvJiBmdW5jdGlvbnMgPSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbnM7Cisg
ICAgZm9yICh1bnNpZ25lZCBmdW5jdGlvbkluZGV4ID0gMDsgZnVuY3Rpb25JbmRleCA8IGZ1bmN0
aW9ucy5zaXplKCk7ICsrZnVuY3Rpb25JbmRleCkgeworICAgICAgICBjb25zdCBhdXRvJiBmdW5j
dGlvbiA9IGZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XTsKKyAgICAgICAgZGF0YUxvZ0xuSWYoV2Fz
bUJCUVBsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIlByb2Nlc3NpbmcgZnVuY3Rpb24gc3RhcnRpbmcg
YXQ6ICIsIGZ1bmN0aW9uLnN0YXJ0LCAiIGFuZCBlbmRpbmcgYXQ6ICIsIGZ1bmN0aW9uLmVuZCk7
CisgICAgICAgIHNpemVfdCBmdW5jdGlvbkxlbmd0aCA9IGZ1bmN0aW9uLmVuZCAtIGZ1bmN0aW9u
LnN0YXJ0OworICAgICAgICBBU1NFUlQoZnVuY3Rpb25MZW5ndGggPD0gc291cmNlTGVuZ3RoKTsK
KyAgICAgICAgQVNTRVJUKGZ1bmN0aW9uTGVuZ3RoID09IGZ1bmN0aW9uLmRhdGEuc2l6ZSgpKTsK
ICAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0
aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tmdW5jdGlvbkluZGV4XTsKICAg
ICAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6
Z2V0KHNpZ25hdHVyZUluZGV4KTsKIAotICAgICAgICBhdXRvIHZhbGlkYXRpb25SZXN1bHQgPSB2
YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUs
IG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCkpOworICAgICAgICBhdXRvIHZhbGlkYXRpb25SZXN1
bHQgPSB2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRh
LnNpemUoKSwgc2lnbmF0dXJlLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpKTsKICAgICAgICAg
aWYgKCF2YWxpZGF0aW9uUmVzdWx0KSB7CiAgICAgICAgICAgICBpZiAoV2FzbUJCUVBsYW5JbnRl
cm5hbDo6dmVyYm9zZSkgewogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBmdW5jdGlvbkxlbmd0aDsgKytpKQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKFJhd1Bv
aW50ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZnVuY3Rpb25TdGFydFtpXSkpLCAiLCAiKTsK
KyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KGZ1bmN0aW9uLmRhdGFbaV0pKSwgIiwgIik7CiAgICAgICAgICAgICAgICAgZGF0YUxv
Z0xuKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBCYXNlOjpmYWlsKGhvbGRMb2NrKG1f
bG9jayksIG1ha2VTdHJpbmcodmFsaWRhdGlvblJlc3VsdC5lcnJvcigpLCAiLCBpbiBmdW5jdGlv
biBhdCBpbmRleCAiLCBTdHJpbmc6Om51bWJlcihmdW5jdGlvbkluZGV4KSkpOyAvLyBGSVhNRSBt
YWtlIHRoaXMgYW4gRXhwZWN0ZWQuCkBAIC0xNTYsMTggKzE1OSwxOCBAQCB2b2lkIEJCUVBsYW46
OnByZXBhcmUoKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9OwogCi0gICAgY29uc3QgYXV0
byYgZnVuY3Rpb25Mb2NhdGlvbnMgPSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbkxvY2F0
aW9uSW5CaW5hcnk7CisgICAgY29uc3QgYXV0byYgZnVuY3Rpb25zID0gbV9tb2R1bGVJbmZvcm1h
dGlvbi0+ZnVuY3Rpb25zOwogICAgIGlmICghdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fd2FzbVRvV2Fz
bUV4aXRTdHVicywgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJ
bmRpY2VzLnNpemUoKSwgIiBXZWJBc3NlbWJseSB0byBKYXZhU2NyaXB0IHN0dWJzIikKLSAgICAg
ICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5j
dGlvbkxvY2F0aW9ucy5zaXplKCksICIgdW5saW5rZWQgV2ViQXNzZW1ibHkgdG8gV2ViQXNzZW1i
bHkgY2FsbHMiKQotICAgICAgICB8fCAhdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fd2FzbUludGVybmFs
RnVuY3Rpb25zLCBmdW5jdGlvbkxvY2F0aW9ucy5zaXplKCksICIgV2ViQXNzZW1ibHkgZnVuY3Rp
b25zIikKLSAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX2NvbXBpbGF0aW9uQ29udGV4
dHMsIGZ1bmN0aW9uTG9jYXRpb25zLnNpemUoKSwgIiBjb21waWxhdGlvbiBjb250ZXh0cyIpCi0g
ICAgICAgIHx8ICF0cnlSZXNlcnZlQ2FwYWNpdHkobV90aWVyVXBDb3VudHMsIGZ1bmN0aW9uTG9j
YXRpb25zLnNpemUoKSwgIiB0aWVyLXVwIGNvdW50cyIpKQorICAgICAgICB8fCAhdHJ5UmVzZXJ2
ZUNhcGFjaXR5KG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9ucy5zaXplKCksICIg
dW5saW5rZWQgV2ViQXNzZW1ibHkgdG8gV2ViQXNzZW1ibHkgY2FsbHMiKQorICAgICAgICB8fCAh
dHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fd2FzbUludGVybmFsRnVuY3Rpb25zLCBmdW5jdGlvbnMuc2l6
ZSgpLCAiIFdlYkFzc2VtYmx5IGZ1bmN0aW9ucyIpCisgICAgICAgIHx8ICF0cnlSZXNlcnZlQ2Fw
YWNpdHkobV9jb21waWxhdGlvbkNvbnRleHRzLCBmdW5jdGlvbnMuc2l6ZSgpLCAiIGNvbXBpbGF0
aW9uIGNvbnRleHRzIikKKyAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX3RpZXJVcENv
dW50cywgZnVuY3Rpb25zLnNpemUoKSwgIiB0aWVyLXVwIGNvdW50cyIpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLnJlc2l6ZShmdW5jdGlvbkxvY2F0
aW9ucy5zaXplKCkpOwotICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zLnJlc2l6ZShmdW5jdGlv
bkxvY2F0aW9ucy5zaXplKCkpOwotICAgIG1fY29tcGlsYXRpb25Db250ZXh0cy5yZXNpemUoZnVu
Y3Rpb25Mb2NhdGlvbnMuc2l6ZSgpKTsKLSAgICBtX3RpZXJVcENvdW50cy5yZXNpemUoZnVuY3Rp
b25Mb2NhdGlvbnMuc2l6ZSgpKTsKKyAgICBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLnJlc2l6
ZShmdW5jdGlvbnMuc2l6ZSgpKTsKKyAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5yZXNpemUo
ZnVuY3Rpb25zLnNpemUoKSk7CisgICAgbV9jb21waWxhdGlvbkNvbnRleHRzLnJlc2l6ZShmdW5j
dGlvbnMuc2l6ZSgpKTsKKyAgICBtX3RpZXJVcENvdW50cy5yZXNpemUoZnVuY3Rpb25zLnNpemUo
KSk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGltcG9ydEluZGV4ID0gMDsgaW1wb3J0SW5kZXggPCBt
X21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRzLnNpemUoKTsgKytpbXBvcnRJbmRleCkgewogICAg
ICAgICBJbXBvcnQqIGltcG9ydCA9ICZtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRzW2ltcG9y
dEluZGV4XTsKQEAgLTI0MSw3ICsyNDQsNyBAQCB2b2lkIEJCUVBsYW46OmNvbXBpbGVGdW5jdGlv
bnMoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogICAgIFRocmVhZENvdW50SG9sZGVyIGhvbGRl
cigqdGhpcyk7CiAKICAgICBzaXplX3QgYnl0ZXNDb21waWxlZCA9IDA7Ci0gICAgY29uc3QgYXV0
byYgZnVuY3Rpb25Mb2NhdGlvbnMgPSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbkxvY2F0
aW9uSW5CaW5hcnk7CisgICAgY29uc3QgYXV0byYgZnVuY3Rpb25zID0gbV9tb2R1bGVJbmZvcm1h
dGlvbi0+ZnVuY3Rpb25zOwogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIGlmIChlZmZvcnQg
PT0gUGFydGlhbCAmJiBieXRlc0NvbXBpbGVkID49IE9wdGlvbnM6OndlYkFzc2VtYmx5UGFydGlh
bENvbXBpbGVMaW1pdCgpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjQ5LDcgKzI1Miw3IEBA
IHZvaWQgQkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQp
CiAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXg7CiAgICAgICAgIHsKICAgICAgICAgICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKLSAgICAgICAgICAgIGlmIChtX2N1cnJl
bnRJbmRleCA+PSBmdW5jdGlvbkxvY2F0aW9ucy5zaXplKCkpIHsKKyAgICAgICAgICAgIGlmICht
X2N1cnJlbnRJbmRleCA+PSBmdW5jdGlvbnMuc2l6ZSgpKSB7CiAgICAgICAgICAgICAgICAgaWYg
KGhhc1dvcmsoKSkKICAgICAgICAgICAgICAgICAgICAgbW92ZVRvU3RhdGUoU3RhdGU6OkNvbXBp
bGVkKTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0yNTgsMTggKzI2MSwxNiBAQCB2b2lk
IEJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbnMoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogICAg
ICAgICAgICAgKyttX2N1cnJlbnRJbmRleDsKICAgICAgICAgfQogCi0gICAgICAgIGNvbnN0IHVp
bnQ4X3QqIGZ1bmN0aW9uU3RhcnQgPSBtX3NvdXJjZSArIGZ1bmN0aW9uTG9jYXRpb25zW2Z1bmN0
aW9uSW5kZXhdLnN0YXJ0OwotICAgICAgICBzaXplX3QgZnVuY3Rpb25MZW5ndGggPSBmdW5jdGlv
bkxvY2F0aW9uc1tmdW5jdGlvbkluZGV4XS5lbmQgLSBmdW5jdGlvbkxvY2F0aW9uc1tmdW5jdGlv
bkluZGV4XS5zdGFydDsKLSAgICAgICAgQVNTRVJUKGZ1bmN0aW9uTGVuZ3RoIDw9IG1fc291cmNl
TGVuZ3RoKTsKKyAgICAgICAgY29uc3QgYXV0byYgZnVuY3Rpb24gPSBmdW5jdGlvbnNbZnVuY3Rp
b25JbmRleF07CiAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1
bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNbZnVuY3Rpb25J
bmRleF07CiAgICAgICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5m
b3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CiAgICAgICAgIHVuc2lnbmVkIGZ1bmN0aW9u
SW5kZXhTcGFjZSA9IG1fd2FzbVRvV2FzbUV4aXRTdHVicy5zaXplKCkgKyBmdW5jdGlvbkluZGV4
OwogICAgICAgICBBU1NFUlRfVU5VU0VEKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZv
cm1hdGlvbi0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5k
ZXhTcGFjZSkgPT0gc2lnbmF0dXJlSW5kZXgpOwotICAgICAgICBBU1NFUlQodmFsaWRhdGVGdW5j
dGlvbihmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBtX21vZHVsZUlu
Zm9ybWF0aW9uLmdldCgpKSk7CisgICAgICAgIEFTU0VSVCh2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0
aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRhLnNpemUoKSwgc2lnbmF0dXJlLCBtX21vZHVs
ZUluZm9ybWF0aW9uLmdldCgpKSk7CiAKICAgICAgICAgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxs
c1tmdW5jdGlvbkluZGV4XSA9IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPigpOwogICAg
ICAgICBUaWVyVXBDb3VudCogdGllclVwID0gT3B0aW9uczo6dXNlQkJRVGllclVwQ2hlY2tzKCkg
PyAmbV90aWVyVXBDb3VudHNbZnVuY3Rpb25JbmRleF0gOiBudWxscHRyOwotICAgICAgICBhdXRv
IHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZShtX2NvbXBpbGF0aW9uQ29u
dGV4dHNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWdu
YXR1cmUsIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG1fbW9kdWxl
SW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBmdW5j
dGlvbkluZGV4LCB0aWVyVXAsIG1fdGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICAgICAgYXV0byBw
YXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUobV9jb21waWxhdGlvbkNvbnRl
eHRzW2Z1bmN0aW9uSW5kZXhdLCBmdW5jdGlvbi5kYXRhLmRhdGEoKSwgZnVuY3Rpb24uZGF0YS5z
aXplKCksIHNpZ25hdHVyZSwgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4
XSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6OkJC
UU1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwgbV90aHJvd1dhc21FeGNlcHRpb24pOwogCiAg
ICAgICAgIGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxlUmVzdWx0KSkgewogICAgICAgICAg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwpAQCAtMjc3LDcgKzI3OCw3IEBAIHZv
aWQgQkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAg
ICAgICAgICAgICAgICAgLy8gTXVsdGlwbGUgY29tcGlsZXMgY291bGQgZmFpbCBzaW11bHRhbmVv
dXNseS4gV2UgYXJiaXRyYXJpbHkgY2hvb3NlIHRoZSBmaXJzdC4KICAgICAgICAgICAgICAgICBm
YWlsKGxvY2tlciwgbWFrZVN0cmluZyhwYXJzZUFuZENvbXBpbGVSZXN1bHQuZXJyb3IoKSwgIiwg
aW4gZnVuY3Rpb24gYXQgaW5kZXggIiwgU3RyaW5nOjpudW1iZXIoZnVuY3Rpb25JbmRleCkpKTsg
Ly8gRklYTUUgbWFrZSB0aGlzIGFuIEV4cGVjdGVkLgogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgbV9jdXJyZW50SW5kZXggPSBmdW5jdGlvbkxvY2F0aW9ucy5zaXplKCk7CisgICAgICAgICAg
ICBtX2N1cnJlbnRJbmRleCA9IGZ1bmN0aW9ucy5zaXplKCk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KIApAQCAtMjg5LDE3ICsyOTAsMTcgQEAgdm9pZCBCQlFQbGFuOjpjb21waWxl
RnVuY3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAgICAgICAgICAgIEFTU0VSVF9V
TlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CiAgICAgICAgIH0KIAotICAgICAgICBi
eXRlc0NvbXBpbGVkICs9IGZ1bmN0aW9uTGVuZ3RoOworICAgICAgICBieXRlc0NvbXBpbGVkICs9
IGZ1bmN0aW9uLmRhdGEuc2l6ZSgpOwogICAgIH0KIH0KIAogdm9pZCBCQlFQbGFuOjpjb21wbGV0
ZShjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyKQogewotICAgIEFTU0VSVChtX3N0YXRlICE9
IFN0YXRlOjpDb21waWxlZCB8fCBtX2N1cnJlbnRJbmRleCA+PSBtX21vZHVsZUluZm9ybWF0aW9u
LT5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpKTsKKyAgICBBU1NFUlQobV9zdGF0ZSAh
PSBTdGF0ZTo6Q29tcGlsZWQgfHwgbV9jdXJyZW50SW5kZXggPj0gbV9tb2R1bGVJbmZvcm1hdGlv
bi0+ZnVuY3Rpb25zLnNpemUoKSk7CiAgICAgZGF0YUxvZ0xuSWYoV2FzbUJCUVBsYW5JbnRlcm5h
bDo6dmVyYm9zZSwgIlN0YXJ0aW5nIENvbXBsZXRpb24iKTsKIAogICAgIGlmICghZmFpbGVkKCkg
JiYgbV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGlsZWQpIHsKLSAgICAgICAgZm9yICh1aW50MzJfdCBm
dW5jdGlvbkluZGV4ID0gMDsgZnVuY3Rpb25JbmRleCA8IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1
bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCk7IGZ1bmN0aW9uSW5kZXgrKykgeworICAgICAg
ICBmb3IgKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXggPSAwOyBmdW5jdGlvbkluZGV4IDwgbV9tb2R1
bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25zLnNpemUoKTsgZnVuY3Rpb25JbmRleCsrKSB7CiAgICAg
ICAgICAgICBDb21waWxhdGlvbkNvbnRleHQmIGNvbnRleHQgPSBtX2NvbXBpbGF0aW9uQ29udGV4
dHNbZnVuY3Rpb25JbmRleF07CiAgICAgICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJ
bmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRp
Y2VzW2Z1bmN0aW9uSW5kZXhdOwogICAgICAgICAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1
cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKQEAgLTM1MSw3
ICszNTIsNyBAQCB2b2lkIEJCUVBsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQog
ewogICAgIHN3aXRjaCAobV9zdGF0ZSkgewogICAgIGNhc2UgU3RhdGU6OkluaXRpYWw6Ci0gICAg
ICAgIHBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKTsKKyAgICAgICAgcGFyc2VBbmRWYWxpZGF0ZU1v
ZHVsZShtX3NvdXJjZS5kYXRhKCksIG1fc291cmNlLnNpemUoKSk7CiAgICAgICAgIGlmICghaGFz
V29yaygpKSB7CiAgICAgICAgICAgICBBU1NFUlQoaXNDb21wbGV0ZSgpKTsKICAgICAgICAgICAg
IHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQ
bGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oCmluZGV4IGQ4
ODE0NWQ3ZGRkYmQ2YjE5MTA1Nzc4MTdjZTdjYjhkYjQxMjFkMWUuLjk0MWFjNzVmNzBlNmY5MTFi
OWZiYjNkZGIxMzc4Y2NmOTY5OTQxYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CQlFQbGFuLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUJCUVBsYW4uaApAQCAtNTIsMTEgKzUyLDE0IEBAIGNsYXNzIEJCUVBsYW4gZmluYWwgOiBwdWJs
aWMgUGxhbiB7CiAgICAgLy8gTm90ZTogQ29tcGxldGlvblRhc2sgc2hvdWxkIG5vdCBob2xkIGEg
cmVmZXJlbmNlIHRvIHRoZSBQbGFuIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGEgcmVmZXJlbmNl
IGN5Y2xlLgogICAgIEJCUVBsYW4oQ29udGV4dCosIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4sIEFz
eW5jV29yaywgQ29tcGxldGlvblRhc2smJiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93
V2FzbUV4Y2VwdGlvbik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQkJRUGxhbihDb250ZXh0Kiwg
VmVjdG9yPHVpbnQ4X3Q+JiYsIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJiwgQ3JlYXRlRW1i
ZWRkZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4Y2VwdGlvbik7Ci0gICAgLy8gTm90ZTogVGhpcyBj
b25zdHJ1Y3RvciBzaG91bGQgb25seSBiZSB1c2VkIGlmIHlvdSBhcmUgbm90IGFjdHVhbGx5IGJ1
aWxkaW5nIGEgbW9kdWxlIGUuZy4gdmFsaWRhdGlvbi9mdW5jdGlvbiB0ZXN0cwotICAgIC8vIEZJ
WE1FOiBXaGVuIHdlIGdldCByaWQgb2YgZnVuY3Rpb24gdGVzdHMgd2Ugc2hvdWxkIHJlbW92ZSBB
c3luY1dvcmsgZnJvbSB0aGlzIGNvbnN0cnVjdG9yLgotICAgIEpTX0VYUE9SVF9QUklWQVRFIEJC
UVBsYW4oQ29udGV4dCosIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIEFzeW5jV29yaywgQ29tcGxl
dGlvblRhc2smJik7CisgICAgQkJRUGxhbihDb250ZXh0KiwgQXN5bmNXb3JrLCBDb21wbGV0aW9u
VGFzayYmKTsKIAotICAgIGJvb2wgcGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpOworCisgICAgYm9v
bCBwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBwYXJzZUFu
ZFZhbGlkYXRlTW9kdWxlKG1fc291cmNlLmRhdGEoKSwgbV9zb3VyY2Uuc2l6ZSgpKTsKKyAgICB9
CisgICAgYm9vbCBwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3Qp
OwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmVwYXJlKCk7CiAgICAgdm9pZCBjb21w
aWxlRnVuY3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0KTsKQEAgLTEzNiw2ICsxMzksNyBAQCBjbGFz
cyBCQlFQbGFuIGZpbmFsIDogcHVibGljIFBsYW4gewogCiAgICAgY29uc3QgY2hhciogc3RhdGVT
dHJpbmcoU3RhdGUpOwogICAgIAorICAgIFZlY3Rvcjx1aW50OF90PiBtX3NvdXJjZTsKICAgICBC
YWc8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7CiAgICAgVmVjdG9yPE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiBtX3dhc21Ub1dhc21FeGl0U3R1YnM7CiAgICAg
VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPj4gbV93YXNtSW50ZXJuYWxG
dW5jdGlvbnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9y
bWF0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKaW5kZXggMjc4
NGU5MGFmMzg0MWEwMmU1ODczMzMyY2ZmOGJiMDY0ODdlMzNkZS4uZTQzZjRlZDkzNjE2N2ZmMjkz
OGQ4MzdhMGNlMDg4ZDQzZDIwYTRlNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUZvcm1hdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21G
b3JtYXQuaApAQCAtMTQwLDkgKzE0MCwxMCBAQCBzdHJ1Y3QgR2xvYmFsIHsKICAgICB1aW50NjRf
dCBpbml0aWFsQml0c09ySW1wb3J0TnVtYmVyIHsgMCB9OwogfTsKIAotc3RydWN0IEZ1bmN0aW9u
TG9jYXRpb25JbkJpbmFyeSB7CitzdHJ1Y3QgRnVuY3Rpb25EYXRhIHsKICAgICBzaXplX3Qgc3Rh
cnQ7CiAgICAgc2l6ZV90IGVuZDsKKyAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKIH07CiAKIGNs
YXNzIEkzMkluaXRFeHByIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTW9kdWxlSW5mb3JtYXRpb24uY3BwCmluZGV4IGNiOGRiMGUwOTNmOTRjZGEzMTZkZDI0YmFm
MzllNTEyZWRhMjAzMTQuLjhhMjU0YzAwMmZiZTllZjkwY2VmMWFiZGZjNDE2OWMxZTQ2YzUzZGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1h
dGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9y
bWF0aW9uLmNwcApAQCAtMzEsMjEgKzMxLDEwIEBACiAjaW5jbHVkZSAiV2FzbU5hbWVTZWN0aW9u
LmgiCiAjaW5jbHVkZSA8d3RmL1NIQTEuaD4KIAotbmFtZXNwYWNlIHsKLUNTdHJpbmcgc2hhMShj
b25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0KQotewotICAgIFNIQTEgaGFzaDsKLSAgICBoYXNo
LmFkZEJ5dGVzKGlucHV0KTsKLSAgICByZXR1cm4gaGFzaC5jb21wdXRlSGV4RGlnZXN0KCk7Ci19
Ci19Ci0KIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKLU1vZHVsZUluZm9ybWF0
aW9uOjpNb2R1bGVJbmZvcm1hdGlvbihWZWN0b3I8dWludDhfdD4mJiBzb3VyY2VCeXRlcykKLSAg
ICA6IHNvdXJjZShXVEZNb3ZlKHNvdXJjZUJ5dGVzKSkKLSAgICAsIGhhc2goT3B0aW9uczo6dXNl
RWFnZXJXZWJBc3NlbWJseU1vZHVsZUhhc2hpbmcoKSA/IHN0ZDo6bWFrZV9vcHRpb25hbChzaGEx
KHNvdXJjZSkpIDogc3RkOjpudWxsb3B0KQotICAgICwgbmFtZVNlY3Rpb24obmV3IE5hbWVTZWN0
aW9uKGhhc2gpKQorTW9kdWxlSW5mb3JtYXRpb246Ok1vZHVsZUluZm9ybWF0aW9uKCkKKyAgICA6
IG5hbWVTZWN0aW9uKE5hbWVTZWN0aW9uOjpjcmVhdGUoKSkKIHsKIH0KIE1vZHVsZUluZm9ybWF0
aW9uOjp+TW9kdWxlSW5mb3JtYXRpb24oKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgKaW5kZXggMGJhYjU3ZTA3MGQyZWEzMzA2
MmYzNjM2NThhMjQxNWU5YmQ1MWUyZC4uZmI1ZTNhMGNkZWQ0ZTczODAyNDMwM2JlNWUwZjU2N2Fm
NTViYTAyNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVs
ZUluZm9ybWF0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVs
ZUluZm9ybWF0aW9uLmgKQEAgLTM0LDExICszNCwxNCBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBXYXNtIHsKIAogc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uIDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPE1vZHVsZUluZm9ybWF0aW9uPiB7Ci0gICAgTW9kdWxlSW5mb3JtYXRpb24o
KSA9IGRlbGV0ZTsKKyAgICBNb2R1bGVJbmZvcm1hdGlvbigpOwogICAgIE1vZHVsZUluZm9ybWF0
aW9uKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJikgPSBkZWxldGU7CiAgICAgTW9kdWxlSW5mb3Jt
YXRpb24oTW9kdWxlSW5mb3JtYXRpb24mJikgPSBkZWxldGU7CiAKLSAgICBNb2R1bGVJbmZvcm1h
dGlvbihWZWN0b3I8dWludDhfdD4mJiBzb3VyY2VCeXRlcyk7CisgICAgc3RhdGljIFJlZjxNb2R1
bGVJbmZvcm1hdGlvbj4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IE1vZHVsZUluZm9ybWF0aW9uKTsKKyAgICB9CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB+
TW9kdWxlSW5mb3JtYXRpb24oKTsKICAgICAKQEAgLTU4LDggKzYxLDggQEAgc3RydWN0IE1vZHVs
ZUluZm9ybWF0aW9uIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPE1vZHVsZUluZm9ybWF0
aW9uPiB7CiAgICAgdWludDMyX3QgaW1wb3J0RnVuY3Rpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJu
IGltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7IH0KICAgICB1aW50MzJfdCBp
bnRlcm5hbEZ1bmN0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBpbnRlcm5hbEZ1bmN0aW9uU2ln
bmF0dXJlSW5kaWNlcy5zaXplKCk7IH0KIAotICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiBzb3Vy
Y2U7Ci0gICAgY29uc3Qgc3RkOjpvcHRpb25hbDxDU3RyaW5nPiBoYXNoOworICAgIHVpbnQzMl90
IG1lbW9yeUNvdW50KCkgY29uc3QgeyByZXR1cm4gbWVtb3J5ID8gMSA6IDA7IH0KKyAgICB1aW50
MzJfdCB0YWJsZUNvdW50KCkgY29uc3QgeyByZXR1cm4gdGFibGVJbmZvcm1hdGlvbiA/IDEgOiAw
OyB9CiAKICAgICBWZWN0b3I8SW1wb3J0PiBpbXBvcnRzOwogICAgIFZlY3RvcjxTaWduYXR1cmVJ
bmRleD4gaW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzOwpAQCAtNjgsNyArNzEsNyBAQCBz
dHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TW9k
dWxlSW5mb3JtYXRpb24+IHsKIAogICAgIE1lbW9yeUluZm9ybWF0aW9uIG1lbW9yeTsKIAotICAg
IFZlY3RvcjxGdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnk+IGZ1bmN0aW9uTG9jYXRpb25JbkJpbmFy
eTsKKyAgICBWZWN0b3I8RnVuY3Rpb25EYXRhPiBmdW5jdGlvbnM7CiAKICAgICBWZWN0b3I8RXhw
b3J0PiBleHBvcnRzOwogICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IHN0YXJ0RnVuY3Rpb25J
bmRleFNwYWNlOwpAQCAtNzgsNyArODEsNyBAQCBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TW9kdWxlSW5mb3JtYXRpb24+IHsKICAgICBWZWN0
b3I8R2xvYmFsPiBnbG9iYWxzOwogICAgIHVuc2lnbmVkIGZpcnN0SW50ZXJuYWxHbG9iYWwgeyAw
IH07CiAgICAgVmVjdG9yPEN1c3RvbVNlY3Rpb24+IGN1c3RvbVNlY3Rpb25zOwotICAgIFJlZlB0
cjxOYW1lU2VjdGlvbj4gbmFtZVNlY3Rpb247CisgICAgUmVmPE5hbWVTZWN0aW9uPiBuYW1lU2Vj
dGlvbjsKIH07CiAKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Nb2R1bGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1v
ZHVsZVBhcnNlci5jcHAKaW5kZXggZjAzZTY5ODdmNGE1MDI1OTFkZjcxZGM4MTU3ODIwODA5OTYx
MzhiNC4uYThlZDhkMmU2YjE5Yzk1ZjY3MWZmY2JjNTQ3ODNkYTc0YzY1MDgwZiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKQEAgLTMyLDE4
ICszMiwxMSBAQAogI2luY2x1ZGUgIldhc21NZW1vcnlJbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUg
Ildhc21OYW1lU2VjdGlvblBhcnNlci5oIgogI2luY2x1ZGUgIldhc21PcHMuaCIKKyNpbmNsdWRl
ICJXYXNtU2VjdGlvblBhcnNlci5oIgogI2luY2x1ZGUgIldhc21TZWN0aW9ucy5oIgogCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi1BTFdBWVNfSU5MSU5FIEkzMkluaXRFeHBy
IG1ha2VJMzJJbml0RXhwcih1aW50OF90IG9wY29kZSwgdWludDMyX3QgYml0cykKLXsKLSAgICBS
RUxFQVNFX0FTU0VSVChvcGNvZGUgPT0gSTMyQ29uc3QgfHwgb3Bjb2RlID09IEdldEdsb2JhbCk7
Ci0gICAgaWYgKG9wY29kZSA9PSBJMzJDb25zdCkKLSAgICAgICAgcmV0dXJuIEkzMkluaXRFeHBy
Ojpjb25zdFZhbHVlKGJpdHMpOwotICAgIHJldHVybiBJMzJJbml0RXhwcjo6Z2xvYmFsSW1wb3J0
KGJpdHMpOwotfQotCiBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2UoKSAtPiBSZXN1bHQKIHsKICAg
ICBjb25zdCBzaXplX3QgbWluU2l6ZSA9IDg7CkBAIC03MSwxOSArNjQsMTkgQEAgYXV0byBNb2R1
bGVQYXJzZXI6OnBhcnNlKCkgLT4gUmVzdWx0CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlVmFyVUludDMyKHNlY3Rpb25MZW5ndGgpLCAiY2FuJ3QgZ2V0ICIsIHNlY3Rpb24sICIg
c2VjdGlvbidzIGxlbmd0aCIpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHNlY3Rpb25M
ZW5ndGggPiBsZW5ndGgoKSAtIG1fb2Zmc2V0LCBzZWN0aW9uLCAiIHNlY3Rpb24gb2Ygc2l6ZSAi
LCBzZWN0aW9uTGVuZ3RoLCAiIHdvdWxkIG92ZXJmbG93IE1vZHVsZSdzIHNpemUiKTsKIAotICAg
ICAgICBhdXRvIGVuZCA9IG1fb2Zmc2V0ICsgc2VjdGlvbkxlbmd0aDsKKyAgICAgICAgU2VjdGlv
blBhcnNlciBwYXJzZXIoc291cmNlKCkgKyBtX29mZnNldCwgc2VjdGlvbkxlbmd0aCwgbV9vZmZz
ZXQsIG1faW5mby5nZXQoKSk7CiAKICAgICAgICAgc3dpdGNoIChzZWN0aW9uKSB7CiAjZGVmaW5l
IFdBU01fU0VDVElPTl9QQVJTRShOQU1FLCBJRCwgREVTQ1JJUFRJT04pICAgICAgICAgICAgICAg
ICAgIFwKICAgICAgICAgY2FzZSBTZWN0aW9uOjpOQU1FOiB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlM
UyhwYXJzZSAjIyBOQU1FKCkpOyAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQVNNX0ZBSUxf
SUZfSEVMUEVSX0ZBSUxTKHBhcnNlci5wYXJzZSAjIyBOQU1FKCkpOyAgICAgICAgICAgICBcCiAg
ICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKICAgICAgICAgfQogICAgICAgICBGT1JfRUFDSF9LTk9XTl9XQVNNX1NFQ1RJ
T04oV0FTTV9TRUNUSU9OX1BBUlNFKQogI3VuZGVmIFdBU01fU0VDVElPTl9QQVJTRQogCiAgICAg
ICAgIGNhc2UgU2VjdGlvbjo6Q3VzdG9tOiB7Ci0gICAgICAgICAgICBXQVNNX0ZBSUxfSUZfSEVM
UEVSX0ZBSUxTKHBhcnNlQ3VzdG9tKHNlY3Rpb25MZW5ndGgpKTsKKyAgICAgICAgICAgIFdBU01f
RkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VyLnBhcnNlQ3VzdG9tKCkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KIApAQCAtOTMsNTM4ICs4NiwyNCBAQCBhdXRvIE1vZHVsZVBhcnNl
cjo6cGFyc2UoKSAtPiBSZXN1bHQKICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRihlbmQgIT0gbV9vZmZzZXQsICJwYXJzaW5nIGVuZGVkIGJlZm9yZSB0
aGUgZW5kIG9mICIsIHNlY3Rpb24sICIgc2VjdGlvbiIpOworICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKHBhcnNlci5sZW5ndGgoKSAhPSBwYXJzZXIub2Zmc2V0KCksICJwYXJzaW5nIGVuZGVk
IGJlZm9yZSB0aGUgZW5kIG9mICIsIHNlY3Rpb24sICIgc2VjdGlvbiIpOworCisgICAgICAgIG1f
b2Zmc2V0ICs9IHNlY3Rpb25MZW5ndGg7CiAKIAogICAgICAgICBpZiAoaXNLbm93blNlY3Rpb24o
c2VjdGlvbikpCiAgICAgICAgICAgICBwcmV2aW91c0tub3duU2VjdGlvbiA9IHNlY3Rpb247CiAg
ICAgfQogCi0gICAgcmV0dXJuIHsgfTsKLX0KLQotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlVHlw
ZSgpIC0+IFBhcnRpYWxSZXN1bHQKLXsKLSAgICB1aW50MzJfdCBjb3VudDsKLQotICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGNvdW50KSwgImNhbid0IGdldCBUeXBlIHNl
Y3Rpb24ncyBjb3VudCIpOwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoY291bnQgPiBtYXhUeXBl
cywgIlR5cGUgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgY291bnQsICIgbWF4aW11bSAi
LCBtYXhUeXBlcyk7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT51c2VkU2lnbmF0
dXJlcy50cnlSZXNlcnZlQ2FwYWNpdHkoY291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1l
bW9yeSBmb3IgVHlwZSBzZWN0aW9uJ3MgIiwgY291bnQsICIgZW50cmllcyIpOwotCi0gICAgZm9y
ICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgaW50OF90IHR5cGU7
Ci0gICAgICAgIHVpbnQzMl90IGFyZ3VtZW50Q291bnQ7Ci0gICAgICAgIFZlY3RvcjxUeXBlPiBh
cmd1bWVudFR5cGVzOwotCi0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlSW50Nyh0
eXBlKSwgImNhbid0IGdldCAiLCBpLCAidGggVHlwZSdzIHR5cGUiKTsKLSAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRih0eXBlICE9IEZ1bmMsIGksICJ0aCBUeXBlIGlzIG5vbi1GdW5jICIsIHR5
cGUpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihhcmd1bWVu
dENvdW50KSwgImNhbid0IGdldCAiLCBpLCAidGggVHlwZSdzIGFyZ3VtZW50IGNvdW50Iik7Ci0g
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoYXJndW1lbnRDb3VudCA+IG1heEZ1bmN0aW9uUGFy
YW1zLCBpLCAidGggYXJndW1lbnQgY291bnQgaXMgdG9vIGJpZyAiLCBhcmd1bWVudENvdW50LCAi
IG1heGltdW0gIiwgbWF4RnVuY3Rpb25QYXJhbXMpOwotICAgICAgICBSZWZQdHI8U2lnbmF0dXJl
PiBtYXliZVNpZ25hdHVyZSA9IFNpZ25hdHVyZTo6dHJ5Q3JlYXRlKGFyZ3VtZW50Q291bnQpOwot
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtYXliZVNpZ25hdHVyZSwgImNhbid0IGFsbG9j
YXRlIGVub3VnaCBtZW1vcnkgZm9yIFR5cGUgc2VjdGlvbidzICIsIGksICJ0aCBzaWduYXR1cmUi
KTsKLSAgICAgICAgUmVmPFNpZ25hdHVyZT4gc2lnbmF0dXJlID0gbWF5YmVTaWduYXR1cmUucmVs
ZWFzZU5vbk51bGwoKTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJndW1l
bnRDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBUeXBlIGFyZ3VtZW50VHlwZTsKLSAgICAgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFsdWVUeXBlKGFyZ3VtZW50VHlwZSksICJj
YW4ndCBnZXQgIiwgaSwgInRoIGFyZ3VtZW50IFR5cGUiKTsKLSAgICAgICAgICAgIHNpZ25hdHVy
ZS0+YXJndW1lbnQoaSkgPSBhcmd1bWVudFR5cGU7Ci0gICAgICAgIH0KLQotICAgICAgICB1aW50
OF90IHJldHVybkNvdW50OwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJ
bnQxKHJldHVybkNvdW50KSwgImNhbid0IGdldCAiLCBpLCAidGggVHlwZSdzIHJldHVybiBjb3Vu
dCIpOwotICAgICAgICBUeXBlIHJldHVyblR5cGU7Ci0gICAgICAgIGlmIChyZXR1cm5Db3VudCkg
ewotICAgICAgICAgICAgVHlwZSB2YWx1ZTsKLSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIXBhcnNlVmFsdWVUeXBlKHZhbHVlKSwgImNhbid0IGdldCAiLCBpLCAidGggVHlwZSdzIHJl
dHVybiB2YWx1ZSIpOwotICAgICAgICAgICAgcmV0dXJuVHlwZSA9IHN0YXRpY19jYXN0PFR5cGU+
KHZhbHVlKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICByZXR1cm5UeXBlID0gVHlwZTo6
Vm9pZDsKLSAgICAgICAgc2lnbmF0dXJlLT5yZXR1cm5UeXBlKCkgPSByZXR1cm5UeXBlOwotCi0g
ICAgICAgIHN0ZDo6cGFpcjxTaWduYXR1cmVJbmRleCwgUmVmPFNpZ25hdHVyZT4+IHJlc3VsdCA9
IFNpZ25hdHVyZUluZm9ybWF0aW9uOjphZG9wdChXVEZNb3ZlKHNpZ25hdHVyZSkpOwotICAgICAg
ICBtX2luZm8tPnVzZWRTaWduYXR1cmVzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKHJlc3VsdC5z
ZWNvbmQpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQotYXV0byBNb2R1bGVQYXJzZXI6
OnBhcnNlSW1wb3J0KCkgLT4gUGFydGlhbFJlc3VsdAotewotICAgIHVpbnQzMl90IGltcG9ydENv
dW50OwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGltcG9ydENvdW50
KSwgImNhbid0IGdldCBJbXBvcnQgc2VjdGlvbidzIGNvdW50Iik7Ci0gICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihpbXBvcnRDb3VudCA+IG1heEltcG9ydHMsICJJbXBvcnQgc2VjdGlvbidzIGNvdW50
IGlzIHRvbyBiaWcgIiwgaW1wb3J0Q291bnQsICIgbWF4aW11bSAiLCBtYXhJbXBvcnRzKTsKLSAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmdsb2JhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5
KGltcG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGltcG9y
dENvdW50LCAiIGdsb2JhbHMiKTsgLy8gRklYTUUgdGhpcyBvdmVyLWFsbG9jYXRlcyB3aGVuIHdl
IGZpeCB0aGUgRklYTUVzIGJlbG93LgotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+
aW1wb3J0cy50cnlSZXNlcnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUg
ZW5vdWdoIG1lbW9yeSBmb3IgIiwgaW1wb3J0Q291bnQsICIgaW1wb3J0cyIpOyAvLyBGSVhNRSB0
aGlzIG92ZXItYWxsb2NhdGVzIHdoZW4gd2UgZml4IHRoZSBGSVhNRXMgYmVsb3cuCi0gICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5pbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMu
dHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBt
ZW1vcnkgZm9yICIsIGltcG9ydENvdW50LCAiIGltcG9ydCBmdW5jdGlvbiBzaWduYXR1cmVzIik7
IC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxv
dy4KLQotICAgIGZvciAodWludDMyX3QgaW1wb3J0TnVtYmVyID0gMDsgaW1wb3J0TnVtYmVyIDwg
aW1wb3J0Q291bnQ7ICsraW1wb3J0TnVtYmVyKSB7Ci0gICAgICAgIHVpbnQzMl90IG1vZHVsZUxl
bjsKLSAgICAgICAgdWludDMyX3QgZmllbGRMZW47Ci0gICAgICAgIE5hbWUgbW9kdWxlU3RyaW5n
OwotICAgICAgICBOYW1lIGZpZWxkU3RyaW5nOwotICAgICAgICBFeHRlcm5hbEtpbmQga2luZDsK
LSAgICAgICAgdW5zaWduZWQga2luZEluZGV4IHsgMCB9OwotCi0gICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKG1vZHVsZUxlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0
TnVtYmVyLCAidGggSW1wb3J0J3MgbW9kdWxlIG5hbWUgbGVuZ3RoIik7Ci0gICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVVVEY4U3RyaW5nKG1vZHVsZVN0cmluZywgbW9kdWxlTGVu
KSwgImNhbid0IGdldCAiLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQncyBtb2R1bGUgbmFtZSBv
ZiBsZW5ndGggIiwgbW9kdWxlTGVuKTsKLQotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFw
YXJzZVZhclVJbnQzMihmaWVsZExlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGgg
SW1wb3J0J3MgZmllbGQgbmFtZSBsZW5ndGggaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICIn
Iik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVVVEY4U3RyaW5nKGZpZWxk
U3RyaW5nLCBmaWVsZExlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0
J3MgZmllbGQgbmFtZSBvZiBsZW5ndGggIiwgbW9kdWxlTGVuLCAiIGluIG1vZHVsZSAnIiwgbW9k
dWxlU3RyaW5nLCAiJyIpOwotCi0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlRXh0
ZXJuYWxLaW5kKGtpbmQpLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdz
IGtpbmQgaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0cmlu
ZywgIiciKTsKLSAgICAgICAgc3dpdGNoIChraW5kKSB7Ci0gICAgICAgIGNhc2UgRXh0ZXJuYWxL
aW5kOjpGdW5jdGlvbjogewotICAgICAgICAgICAgdWludDMyX3QgZnVuY3Rpb25TaWduYXR1cmVJ
bmRleDsKLSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGZ1
bmN0aW9uU2lnbmF0dXJlSW5kZXgpLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIElt
cG9ydCdzIGZ1bmN0aW9uIHNpZ25hdHVyZSBpbiBtb2R1bGUgJyIsIG1vZHVsZVN0cmluZywgIicg
ZmllbGQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOwotICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRihmdW5jdGlvblNpZ25hdHVyZUluZGV4ID49IG1faW5mby0+dXNlZFNpZ25hdHVyZXMuc2l6
ZSgpLCAiaW52YWxpZCBmdW5jdGlvbiBzaWduYXR1cmUgZm9yICIsIGltcG9ydE51bWJlciwgInRo
IEltcG9ydCwgIiwgZnVuY3Rpb25TaWduYXR1cmVJbmRleCwgIiBpcyBvdXQgb2YgcmFuZ2Ugb2Yg
IiwgbV9pbmZvLT51c2VkU2lnbmF0dXJlcy5zaXplKCksICIgaW4gbW9kdWxlICciLCBtb2R1bGVT
dHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0cmluZywgIiciKTsKLSAgICAgICAgICAgIGtpbmRJ
bmRleCA9IG1faW5mby0+aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsKLSAg
ICAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gU2lnbmF0dXJlSW5mb3Jt
YXRpb246OmdldChtX2luZm8tPnVzZWRTaWduYXR1cmVzW2Z1bmN0aW9uU2lnbmF0dXJlSW5kZXhd
KTsKLSAgICAgICAgICAgIG1faW5mby0+aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnVu
Y2hlY2tlZEFwcGVuZChzaWduYXR1cmVJbmRleCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIEV4dGVybmFsS2luZDo6VGFibGU6IHsKLSAgICAgICAgICAgIGJv
b2wgaXNJbXBvcnQgPSB0cnVlOwotICAgICAgICAgICAgUGFydGlhbFJlc3VsdCByZXN1bHQgPSBw
YXJzZVRhYmxlSGVscGVyKGlzSW1wb3J0KTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSghcmVz
dWx0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoV1RGTW92ZShyZXN1
bHQuZXJyb3IoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBFeHRlcm5hbEtpbmQ6Ok1lbW9yeTogewotICAgICAgICAgICAgYm9vbCBpc0ltcG9ydCA9IHRy
dWU7Ci0gICAgICAgICAgICBQYXJ0aWFsUmVzdWx0IHJlc3VsdCA9IHBhcnNlTWVtb3J5SGVscGVy
KGlzSW1wb3J0KTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoV1RGTW92ZShyZXN1bHQuZXJyb3IoKSkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6
Okdsb2JhbDogewotICAgICAgICAgICAgR2xvYmFsIGdsb2JhbDsKLSAgICAgICAgICAgIFdBU01f
RkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VHbG9iYWxUeXBlKGdsb2JhbCkpOwotICAgICAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihnbG9iYWwubXV0YWJpbGl0eSA9PSBHbG9iYWw6Ok11dGFi
bGUsICJNdXRhYmxlIEdsb2JhbHMgYXJlbid0IHN1cHBvcnRlZCIpOwotCi0gICAgICAgICAgICBr
aW5kSW5kZXggPSBtX2luZm8tPmdsb2JhbHMuc2l6ZSgpOwotICAgICAgICAgICAgbV9pbmZvLT5n
bG9iYWxzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGdsb2JhbCkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIG1faW5mby0+aW1wb3J0cy51bmNo
ZWNrZWRBcHBlbmQoeyBXVEZNb3ZlKG1vZHVsZVN0cmluZyksIFdURk1vdmUoZmllbGRTdHJpbmcp
LCBraW5kLCBraW5kSW5kZXggfSk7Ci0gICAgfQotCi0gICAgbV9pbmZvLT5maXJzdEludGVybmFs
R2xvYmFsID0gbV9pbmZvLT5nbG9iYWxzLnNpemUoKTsKLSAgICByZXR1cm4geyB9OwotfQotCi1h
dXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbigpIC0+IFBhcnRpYWxSZXN1bHQKLXsKLSAg
ICB1aW50MzJfdCBjb3VudDsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQz
Mihjb3VudCksICJjYW4ndCBnZXQgRnVuY3Rpb24gc2VjdGlvbidzIGNvdW50Iik7Ci0gICAgV0FT
TV9QQVJTRVJfRkFJTF9JRihjb3VudCA+IG1heEZ1bmN0aW9ucywgIkZ1bmN0aW9uIHNlY3Rpb24n
cyBjb3VudCBpcyB0b28gYmlnICIsIGNvdW50LCAiIG1heGltdW0gIiwgbWF4RnVuY3Rpb25zKTsK
LSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmludGVybmFsRnVuY3Rpb25TaWduYXR1
cmVJbmRpY2VzLnRyeVJlc2VydmVDYXBhY2l0eShjb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91
Z2ggbWVtb3J5IGZvciAiLCBjb3VudCwgIiBGdW5jdGlvbiBzaWduYXR1cmVzIik7Ci0gICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkudHJ5UmVz
ZXJ2ZUNhcGFjaXR5KGNvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIs
IGNvdW50LCAiRnVuY3Rpb24gbG9jYXRpb25zIik7Ci0KLSAgICBmb3IgKHVpbnQzMl90IGkgPSAw
OyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICB1aW50MzJfdCB0eXBlTnVtYmVyOwotICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMih0eXBlTnVtYmVyKSwgImNhbid0
IGdldCAiLCBpLCAidGggRnVuY3Rpb24ncyB0eXBlIG51bWJlciIpOwotICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKHR5cGVOdW1iZXIgPj0gbV9pbmZvLT51c2VkU2lnbmF0dXJlcy5zaXplKCks
IGksICJ0aCBGdW5jdGlvbiB0eXBlIG51bWJlciBpcyBpbnZhbGlkICIsIHR5cGVOdW1iZXIpOwot
Ci0gICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gU2lnbmF0dXJlSW5mb3Jt
YXRpb246OmdldChtX2luZm8tPnVzZWRTaWduYXR1cmVzW3R5cGVOdW1iZXJdKTsKLSAgICAgICAg
Ly8gVGhlIENvZGUgc2VjdGlvbiBmaXhlcyB1cCBzdGFydCBhbmQgZW5kLgotICAgICAgICBzaXpl
X3Qgc3RhcnQgPSAwOwotICAgICAgICBzaXplX3QgZW5kID0gMDsKLSAgICAgICAgbV9pbmZvLT5p
bnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy51bmNoZWNrZWRBcHBlbmQoc2lnbmF0dXJl
SW5kZXgpOwotICAgICAgICBtX2luZm8tPmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS51bmNoZWNr
ZWRBcHBlbmQoeyBzdGFydCwgZW5kIH0pOworICAgIGlmIChPcHRpb25zOjp1c2VFYWdlcldlYkFz
c2VtYmx5TW9kdWxlSGFzaGluZygpKSB7CisgICAgICAgIFNIQTEgaGFzaGVyOworICAgICAgICBo
YXNoZXIuYWRkQnl0ZXMoc291cmNlKCksIGxlbmd0aCgpKTsKKyAgICAgICAgbV9pbmZvLT5uYW1l
U2VjdGlvbi0+c2V0SGFzaChoYXNoZXIuY29tcHV0ZUhleERpZ2VzdCgpKTsKICAgICB9CiAKICAg
ICByZXR1cm4geyB9OwogfQogCi1hdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VSZXNpemFibGVMaW1p
dHModWludDMyX3QmIGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+JiBtYXhpbXVtKSAt
PiBQYXJ0aWFsUmVzdWx0Ci17Ci0gICAgQVNTRVJUKCFtYXhpbXVtKTsKLQotICAgIHVpbnQ4X3Qg
ZmxhZ3M7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MShmbGFncyksICJj
YW4ndCBwYXJzZSByZXNpemFibGUgbGltaXRzIGZsYWdzIik7Ci0gICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VWYXJVSW50MzIoaW5pdGlhbCksICJjYW4ndCBwYXJzZSByZXNpemFibGUgbGlt
aXRzIGluaXRpYWwgcGFnZSBjb3VudCIpOwotCi0gICAgaWYgKGZsYWdzKSB7Ci0gICAgICAgIHVp
bnQzMl90IG1heGltdW1JbnQ7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFy
VUludDMyKG1heGltdW1JbnQpLCAiY2FuJ3QgcGFyc2UgcmVzaXphYmxlIGxpbWl0cyBtYXhpbXVt
IHBhZ2UgY291bnQiKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbml0aWFsID4gbWF4
aW11bUludCwgInJlc2l6YWJsZSBsaW1pdHMgaGFzIGEgaW5pdGlhbCBwYWdlIGNvdW50IG9mICIs
IGluaXRpYWwsICIgd2hpY2ggaXMgZ3JlYXRlciB0aGFuIGl0cyBtYXhpbXVtICIsIG1heGltdW1J
bnQpOwotICAgICAgICBtYXhpbXVtID0gbWF4aW11bUludDsKLSAgICB9Ci0KLSAgICByZXR1cm4g
eyB9OwotfQotCi1hdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VUYWJsZUhlbHBlcihib29sIGlzSW1w
b3J0KSAtPiBQYXJ0aWFsUmVzdWx0Ci17Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX3RhYmxl
Q291bnQgPiAwLCAiQ2Fubm90IGhhdmUgbW9yZSB0aGFuIG9uZSBUYWJsZSBmb3Igbm93Iik7Ci0K
LSAgICArK21fdGFibGVDb3VudDsKLQotICAgIGludDhfdCB0eXBlOwotICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXBhcnNlSW50Nyh0eXBlKSwgImNhbid0IHBhcnNlIFRhYmxlIHR5cGUiKTsKLSAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKHR5cGUgIT0gV2FzbTo6QW55ZnVuYywgIlRhYmxlIHR5cGUg
c2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAiLCB0eXBlKTsKLQotICAgIHVpbnQzMl90IGluaXRpYWw7
Ci0gICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bTsKLSAgICBQYXJ0aWFsUmVzdWx0
IGxpbWl0cyA9IHBhcnNlUmVzaXphYmxlTGltaXRzKGluaXRpYWwsIG1heGltdW0pOwotICAgIGlm
IChVTkxJS0VMWSghbGltaXRzKSkKLSAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFdURk1v
dmUobGltaXRzLmVycm9yKCkpKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluaXRpYWwgPiBt
YXhUYWJsZUVudHJpZXMsICJUYWJsZSdzIGluaXRpYWwgcGFnZSBjb3VudCBvZiAiLCBpbml0aWFs
LCAiIGlzIHRvbyBiaWcsIG1heGltdW0gIiwgbWF4VGFibGVFbnRyaWVzKTsKLQotICAgIEFTU0VS
VCghbWF4aW11bSB8fCAqbWF4aW11bSA+PSBpbml0aWFsKTsKLQotICAgIG1faW5mby0+dGFibGVJ
bmZvcm1hdGlvbiA9IFRhYmxlSW5mb3JtYXRpb24oaW5pdGlhbCwgbWF4aW11bSwgaXNJbXBvcnQp
OwotCi0gICAgcmV0dXJuIHsgfTsKLX0KLQotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlVGFibGUo
KSAtPiBQYXJ0aWFsUmVzdWx0Ci17Ci0gICAgdWludDMyX3QgY291bnQ7Ci0gICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoY291bnQpLCAiY2FuJ3QgZ2V0IFRhYmxlJ3MgY291
bnQiKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGNvdW50ID4gMSwgIlRhYmxlIGNvdW50IG9m
ICIsIGNvdW50LCAiIGlzIGludmFsaWQsIGF0IG1vc3QgMSBpcyBhbGxvd2VkIGZvciBub3ciKTsK
LQotICAgIGlmICghY291bnQpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBib29sIGlzSW1w
b3J0ID0gZmFsc2U7Ci0gICAgUGFydGlhbFJlc3VsdCByZXN1bHQgPSBwYXJzZVRhYmxlSGVscGVy
KGlzSW1wb3J0KTsKLSAgICBpZiAoVU5MSUtFTFkoIXJlc3VsdCkpCi0gICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChXVEZNb3ZlKHJlc3VsdC5lcnJvcigpKSk7Ci0KLSAgICByZXR1cm4geyB9
OwotfQotCi1hdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VNZW1vcnlIZWxwZXIoYm9vbCBpc0ltcG9y
dCkgLT4gUGFydGlhbFJlc3VsdAotewotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9tZW1vcnlD
b3VudCwgInRoZXJlIGNhbiBhdCBtb3N0IGJlIG9uZSBNZW1vcnkgc2VjdGlvbiBmb3Igbm93Iik7
Ci0KLSAgICArK21fbWVtb3J5Q291bnQ7Ci0KLSAgICBQYWdlQ291bnQgaW5pdGlhbFBhZ2VDb3Vu
dDsKLSAgICBQYWdlQ291bnQgbWF4aW11bVBhZ2VDb3VudDsKLSAgICB7Ci0gICAgICAgIHVpbnQz
Ml90IGluaXRpYWw7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW07Ci0g
ICAgICAgIFBhcnRpYWxSZXN1bHQgbGltaXRzID0gcGFyc2VSZXNpemFibGVMaW1pdHMoaW5pdGlh
bCwgbWF4aW11bSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghbGltaXRzKSkKLSAgICAgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZChXVEZNb3ZlKGxpbWl0cy5lcnJvcigpKSk7Ci0gICAgICAg
IEFTU0VSVCghbWF4aW11bSB8fCAqbWF4aW11bSA+PSBpbml0aWFsKTsKLSAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighUGFnZUNvdW50Ojppc1ZhbGlkKGluaXRpYWwpLCAiTWVtb3J5J3MgaW5p
dGlhbCBwYWdlIGNvdW50IG9mICIsIGluaXRpYWwsICIgaXMgaW52YWxpZCIpOwotCi0gICAgICAg
IGluaXRpYWxQYWdlQ291bnQgPSBQYWdlQ291bnQoaW5pdGlhbCk7Ci0KLSAgICAgICAgaWYgKG1h
eGltdW0pIHsKLSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIVBhZ2VDb3VudDo6aXNW
YWxpZCgqbWF4aW11bSksICJNZW1vcnkncyBtYXhpbXVtIHBhZ2UgY291bnQgb2YgIiwgKm1heGlt
dW0sICIgaXMgaW52YWxpZCIpOwotICAgICAgICAgICAgbWF4aW11bVBhZ2VDb3VudCA9IFBhZ2VD
b3VudCgqbWF4aW11bSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgQVNTRVJUKGluaXRpYWxQYWdl
Q291bnQpOwotICAgIEFTU0VSVCghbWF4aW11bVBhZ2VDb3VudCB8fCBtYXhpbXVtUGFnZUNvdW50
ID49IGluaXRpYWxQYWdlQ291bnQpOwotCi0gICAgbV9pbmZvLT5tZW1vcnkgPSBNZW1vcnlJbmZv
cm1hdGlvbihpbml0aWFsUGFnZUNvdW50LCBtYXhpbXVtUGFnZUNvdW50LCBpc0ltcG9ydCk7Ci0g
ICAgcmV0dXJuIHsgfTsKLX0KLQotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlTWVtb3J5KCkgLT4g
UGFydGlhbFJlc3VsdAotewotICAgIHVpbnQ4X3QgY291bnQ7Ci0gICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VWYXJVSW50MShjb3VudCksICJjYW4ndCBwYXJzZSBNZW1vcnkgc2VjdGlvbidz
IGNvdW50Iik7Ci0KLSAgICBpZiAoIWNvdW50KQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAg
V0FTTV9QQVJTRVJfRkFJTF9JRihjb3VudCAhPSAxLCAiTWVtb3J5IHNlY3Rpb24gaGFzIG1vcmUg
dGhhbiBvbmUgbWVtb3J5LCBXZWJBc3NlbWJseSBjdXJyZW50bHkgb25seSBhbGxvd3MgemVybyBv
ciBvbmUiKTsKLQotICAgIGJvb2wgaXNJbXBvcnQgPSBmYWxzZTsKLSAgICByZXR1cm4gcGFyc2VN
ZW1vcnlIZWxwZXIoaXNJbXBvcnQpOwotfQotCi1hdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VHbG9i
YWwoKSAtPiBQYXJ0aWFsUmVzdWx0Ci17Ci0gICAgdWludDMyX3QgZ2xvYmFsQ291bnQ7Ci0gICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZ2xvYmFsQ291bnQpLCAiY2FuJ3Qg
Z2V0IEdsb2JhbCBzZWN0aW9uJ3MgY291bnQiKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGds
b2JhbENvdW50ID4gbWF4R2xvYmFscywgIkdsb2JhbCBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJp
ZyAiLCBnbG9iYWxDb3VudCwgIiBtYXhpbXVtICIsIG1heEdsb2JhbHMpOwotICAgIHNpemVfdCB0
b3RhbEJ5dGVzID0gZ2xvYmFsQ291bnQgKyBtX2luZm8tPmZpcnN0SW50ZXJuYWxHbG9iYWw7Ci0g
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRigoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHRvdGFsQnl0ZXMp
IDwgZ2xvYmFsQ291bnQpIHx8ICFtX2luZm8tPmdsb2JhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KHRv
dGFsQnl0ZXMpLCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiLCB0b3RhbEJ5dGVzLCAiIGds
b2JhbHMiKTsKLQotICAgIGZvciAodWludDMyX3QgZ2xvYmFsSW5kZXggPSAwOyBnbG9iYWxJbmRl
eCA8IGdsb2JhbENvdW50OyArK2dsb2JhbEluZGV4KSB7Ci0gICAgICAgIEdsb2JhbCBnbG9iYWw7
Ci0gICAgICAgIHVpbnQ4X3QgaW5pdE9wY29kZTsKLQotICAgICAgICBXQVNNX0ZBSUxfSUZfSEVM
UEVSX0ZBSUxTKHBhcnNlR2xvYmFsVHlwZShnbG9iYWwpKTsKLSAgICAgICAgVHlwZSB0eXBlRm9y
SW5pdE9wY29kZTsKLSAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUluaXRF
eHByKGluaXRPcGNvZGUsIGdsb2JhbC5pbml0aWFsQml0c09ySW1wb3J0TnVtYmVyLCB0eXBlRm9y
SW5pdE9wY29kZSkpOwotICAgICAgICBpZiAoaW5pdE9wY29kZSA9PSBHZXRHbG9iYWwpCi0gICAg
ICAgICAgICBnbG9iYWwuaW5pdGlhbGl6YXRpb25UeXBlID0gR2xvYmFsOjpGcm9tR2xvYmFsSW1w
b3J0OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBnbG9iYWwuaW5pdGlhbGl6YXRpb25UeXBl
ID0gR2xvYmFsOjpGcm9tRXhwcmVzc2lvbjsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0
eXBlRm9ySW5pdE9wY29kZSAhPSBnbG9iYWwudHlwZSwgIkdsb2JhbCBpbml0X2V4cHIgb3Bjb2Rl
IG9mIHR5cGUgIiwgdHlwZUZvckluaXRPcGNvZGUsICIgZG9lc24ndCBtYXRjaCBnbG9iYWwncyB0
eXBlICIsIGdsb2JhbC50eXBlKTsKLQotICAgICAgICBtX2luZm8tPmdsb2JhbHMudW5jaGVja2Vk
QXBwZW5kKFdURk1vdmUoZ2xvYmFsKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsgfTsKLX0KLQot
YXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlRXhwb3J0KCkgLT4gUGFydGlhbFJlc3VsdAotewotICAg
IHVpbnQzMl90IGV4cG9ydENvdW50OwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFy
VUludDMyKGV4cG9ydENvdW50KSwgImNhbid0IGdldCBFeHBvcnQgc2VjdGlvbidzIGNvdW50Iik7
Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRihleHBvcnRDb3VudCA+IG1heEV4cG9ydHMsICJFeHBv
cnQgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgZXhwb3J0Q291bnQsICIgbWF4aW11bSAi
LCBtYXhFeHBvcnRzKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmV4cG9ydHMu
dHJ5UmVzZXJ2ZUNhcGFjaXR5KGV4cG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBt
ZW1vcnkgZm9yICIsIGV4cG9ydENvdW50LCAiIGV4cG9ydHMiKTsKLQotICAgIEhhc2hTZXQ8U3Ry
aW5nPiBleHBvcnROYW1lczsKLSAgICBmb3IgKHVpbnQzMl90IGV4cG9ydE51bWJlciA9IDA7IGV4
cG9ydE51bWJlciA8IGV4cG9ydENvdW50OyArK2V4cG9ydE51bWJlcikgewotICAgICAgICB1aW50
MzJfdCBmaWVsZExlbjsKLSAgICAgICAgTmFtZSBmaWVsZFN0cmluZzsKLSAgICAgICAgRXh0ZXJu
YWxLaW5kIGtpbmQ7Ci0gICAgICAgIHVuc2lnbmVkIGtpbmRJbmRleDsKLQotICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihmaWVsZExlbiksICJjYW4ndCBnZXQgIiwg
ZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0J3MgZmllbGQgbmFtZSBsZW5ndGgiKTsKLSAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighY29uc3VtZVVURjhTdHJpbmcoZmllbGRTdHJpbmcsIGZpZWxk
TGVuKSwgImNhbid0IGdldCAiLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQncyBmaWVsZCBuYW1l
IG9mIGxlbmd0aCAiLCBmaWVsZExlbik7Ci0gICAgICAgIFN0cmluZyBmaWVsZE5hbWUgPSBTdHJp
bmc6OmZyb21VVEY4KGZpZWxkU3RyaW5nKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihl
eHBvcnROYW1lcy5jb250YWlucyhmaWVsZE5hbWUpLCAiZHVwbGljYXRlIGV4cG9ydDogJyIsIGZp
ZWxkU3RyaW5nLCAiJyIpOwotICAgICAgICBleHBvcnROYW1lcy5hZGQoZmllbGROYW1lKTsKLQot
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUV4dGVybmFsS2luZChraW5kKSwgImNh
bid0IGdldCAiLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQncyBraW5kLCBuYW1lZCAnIiwgZmll
bGRTdHJpbmcsICInIik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUlu
dDMyKGtpbmRJbmRleCksICJjYW4ndCBnZXQgIiwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0J3Mg
a2luZCBpbmRleCwgbmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOwotICAgICAgICBzd2l0Y2gg
KGtpbmQpIHsKLSAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6OkZ1bmN0aW9uOiB7Ci0gICAgICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGtpbmRJbmRleCA+PSBtX2luZm8tPmZ1bmN0aW9uSW5k
ZXhTcGFjZVNpemUoKSwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0IGhhcyBpbnZhbGlkIGZ1bmN0
aW9uIG51bWJlciAiLCBraW5kSW5kZXgsICIgaXQgZXhjZWVkcyB0aGUgZnVuY3Rpb24gaW5kZXgg
c3BhY2UgIiwgbV9pbmZvLT5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCksICIsIG5hbWVkICciLCBm
aWVsZFN0cmluZywgIiciKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgRXh0ZXJuYWxLaW5kOjpUYWJsZTogewotICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRihraW5kSW5kZXggPj0gbV90YWJsZUNvdW50LCAiY2FuJ3QgZXhwb3J0IFRhYmxlICIsIGtp
bmRJbmRleCwgIiB0aGVyZSBhcmUgIiwgbV90YWJsZUNvdW50LCAiIFRhYmxlcyIpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6Ok1lbW9y
eTogewotICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5tZW1vcnksICJj
YW4ndCBleHBvcnQgYSBub24tZXhpc3RlbnQgTWVtb3J5Iik7Ci0gICAgICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKGtpbmRJbmRleCwgImNhbid0IGV4cG9ydCBNZW1vcnkgIiwga2luZEluZGV4
LCAiIG9ubHkgb25lIFRhYmxlIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQiKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpHbG9iYWw6IHsK
LSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoa2luZEluZGV4ID49IG1faW5mby0+Z2xv
YmFscy5zaXplKCksIGV4cG9ydE51bWJlciwgInRoIEV4cG9ydCBoYXMgaW52YWxpZCBnbG9iYWwg
bnVtYmVyICIsIGtpbmRJbmRleCwgIiBpdCBleGNlZWRzIHRoZSBnbG9iYWxzIGNvdW50ICIsIG1f
aW5mby0+Z2xvYmFscy5zaXplKCksICIsIG5hbWVkICciLCBmaWVsZFN0cmluZywgIiciKTsKLSAg
ICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9pbmZvLT5nbG9iYWxzW2tpbmRJbmRleF0u
bXV0YWJpbGl0eSAhPSBHbG9iYWw6OkltbXV0YWJsZSwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0
IGlzbid0IGltbXV0YWJsZSwgbmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIG1faW5mby0+ZXhwb3J0
cy51bmNoZWNrZWRBcHBlbmQoeyBXVEZNb3ZlKGZpZWxkU3RyaW5nKSwga2luZCwga2luZEluZGV4
IH0pOwotICAgIH0KLQotICAgIHJldHVybiB7IH07Ci19Ci0KLWF1dG8gTW9kdWxlUGFyc2VyOjpw
YXJzZVN0YXJ0KCkgLT4gUGFydGlhbFJlc3VsdAotewotICAgIHVpbnQzMl90IHN0YXJ0RnVuY3Rp
b25JbmRleDsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihzdGFydEZ1
bmN0aW9uSW5kZXgpLCAiY2FuJ3QgZ2V0IFN0YXJ0IGluZGV4Iik7Ci0gICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihzdGFydEZ1bmN0aW9uSW5kZXggPj0gbV9pbmZvLT5mdW5jdGlvbkluZGV4U3BhY2VT
aXplKCksICJTdGFydCBpbmRleCAiLCBzdGFydEZ1bmN0aW9uSW5kZXgsICIgZXhjZWVkcyBmdW5j
dGlvbiBpbmRleCBzcGFjZSAiLCBtX2luZm8tPmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7Ci0g
ICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX2luZm8tPnNpZ25hdHVyZUluZGV4
RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXgpOwotICAgIGNvbnN0IFNp
Z25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJ
bmRleCk7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRihzaWduYXR1cmUuYXJndW1lbnRDb3VudCgp
LCAiU3RhcnQgZnVuY3Rpb24gY2FuJ3QgaGF2ZSBhcmd1bWVudHMiKTsKLSAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKHNpZ25hdHVyZS5yZXR1cm5UeXBlKCkgIT0gVm9pZCwgIlN0YXJ0IGZ1bmN0aW9u
IGNhbid0IHJldHVybiBhIHZhbHVlIik7Ci0gICAgbV9pbmZvLT5zdGFydEZ1bmN0aW9uSW5kZXhT
cGFjZSA9IHN0YXJ0RnVuY3Rpb25JbmRleDsKLSAgICByZXR1cm4geyB9OwotfQotCi1hdXRvIE1v
ZHVsZVBhcnNlcjo6cGFyc2VFbGVtZW50KCkgLT4gUGFydGlhbFJlc3VsdAotewotICAgIHVpbnQz
Ml90IGVsZW1lbnRDb3VudDsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQz
MihlbGVtZW50Q291bnQpLCAiY2FuJ3QgZ2V0IEVsZW1lbnQgc2VjdGlvbidzIGNvdW50Iik7Ci0g
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihlbGVtZW50Q291bnQgPiBtYXhUYWJsZUVudHJpZXMsICJF
bGVtZW50IHNlY3Rpb24ncyBjb3VudCBpcyB0b28gYmlnICIsIGVsZW1lbnRDb3VudCwgIiBtYXhp
bXVtICIsIG1heFRhYmxlRW50cmllcyk7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZv
LT5lbGVtZW50cy50cnlSZXNlcnZlQ2FwYWNpdHkoZWxlbWVudENvdW50KSwgImNhbid0IGFsbG9j
YXRlIG1lbW9yeSBmb3IgIiwgZWxlbWVudENvdW50LCAiIEVsZW1lbnRzIik7Ci0gICAgZm9yICh1
bnNpZ25lZCBlbGVtZW50TnVtID0gMDsgZWxlbWVudE51bSA8IGVsZW1lbnRDb3VudDsgKytlbGVt
ZW50TnVtKSB7Ci0gICAgICAgIHVpbnQzMl90IHRhYmxlSW5kZXg7Ci0gICAgICAgIHVpbnQ2NF90
IGluaXRFeHByQml0czsKLSAgICAgICAgdWludDhfdCBpbml0T3Bjb2RlOwotICAgICAgICB1aW50
MzJfdCBpbmRleENvdW50OwotCi0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFy
VUludDMyKHRhYmxlSW5kZXgpLCAiY2FuJ3QgZ2V0ICIsIGVsZW1lbnROdW0sICJ0aCBFbGVtZW50
IHRhYmxlIGluZGV4Iik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYodGFibGVJbmRleCA+
PSBtX3RhYmxlQ291bnQsICJFbGVtZW50IHNlY3Rpb24gZm9yIFRhYmxlICIsIHRhYmxlSW5kZXgs
ICIgZXhjZWVkcyBhdmFpbGFibGUgVGFibGUgIiwgbV90YWJsZUNvdW50KTsKLSAgICAgICAgVHlw
ZSBpbml0RXhwclR5cGU7Ci0gICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VJ
bml0RXhwcihpbml0T3Bjb2RlLCBpbml0RXhwckJpdHMsIGluaXRFeHByVHlwZSkpOwotICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluaXRFeHByVHlwZSAhPSBJMzIsICJFbGVtZW50IGluaXRf
ZXhwciBtdXN0IHByb2R1Y2UgYW4gaTMyIik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlVmFyVUludDMyKGluZGV4Q291bnQpLCAiY2FuJ3QgZ2V0ICIsIGVsZW1lbnROdW0sICJ0
aCBpbmRleCBjb3VudCBmb3IgRWxlbWVudCBzZWN0aW9uIik7Ci0gICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoaW5kZXhDb3VudCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4
KCksICJFbGVtZW50IHNlY3Rpb24ncyAiLCBlbGVtZW50TnVtLCAidGggaW5kZXggY291bnQgaXMg
dG9vIGJpZyAiLCBpbmRleENvdW50KTsKLQotICAgICAgICBBU1NFUlQoISFtX2luZm8tPnRhYmxl
SW5mb3JtYXRpb24pOwotCi0gICAgICAgIEVsZW1lbnQgZWxlbWVudChtYWtlSTMySW5pdEV4cHIo
aW5pdE9wY29kZSwgaW5pdEV4cHJCaXRzKSk7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IWVsZW1lbnQuZnVuY3Rpb25JbmRpY2VzLnRyeVJlc2VydmVDYXBhY2l0eShpbmRleENvdW50KSwg
ImNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgIiwgaW5kZXhDb3VudCwgIiBFbGVtZW50IGluZGlj
ZXMiKTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBpbmRleENv
dW50OyArK2luZGV4KSB7Ci0gICAgICAgICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4OwotICAg
ICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZnVuY3Rpb25JbmRl
eCksICJjYW4ndCBnZXQgRWxlbWVudCBzZWN0aW9uJ3MgIiwgZWxlbWVudE51bSwgInRoIGVsZW1l
bnQncyAiLCBpbmRleCwgInRoIGluZGV4Iik7Ci0gICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKGZ1bmN0aW9uSW5kZXggPj0gbV9pbmZvLT5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCksICJF
bGVtZW50IHNlY3Rpb24ncyAiLCBlbGVtZW50TnVtLCAidGggZWxlbWVudCdzICIsIGluZGV4LCAi
dGggaW5kZXggaXMgIiwgZnVuY3Rpb25JbmRleCwgIiB3aGljaCBleGNlZWRzIHRoZSBmdW5jdGlv
biBpbmRleCBzcGFjZSBzaXplIG9mICIsIG1faW5mby0+ZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgp
KTsKLQotICAgICAgICAgICAgZWxlbWVudC5mdW5jdGlvbkluZGljZXMudW5jaGVja2VkQXBwZW5k
KGZ1bmN0aW9uSW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9pbmZvLT5lbGVtZW50cy51
bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShlbGVtZW50KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsg
fTsKLX0KLQotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlQ29kZSgpIC0+IFBhcnRpYWxSZXN1bHQK
LXsKLSAgICB1aW50MzJfdCBjb3VudDsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZh
clVJbnQzMihjb3VudCksICJjYW4ndCBnZXQgQ29kZSBzZWN0aW9uJ3MgY291bnQiKTsKLSAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKGNvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+
OjptYXgoKSwgIkNvZGUgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgY291bnQpOwotICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoY291bnQgIT0gbV9pbmZvLT5mdW5jdGlvbkxvY2F0aW9uSW5C
aW5hcnkuc2l6ZSgpLCAiQ29kZSBzZWN0aW9uIGNvdW50ICIsIGNvdW50LCAiIGV4Y2VlZHMgdGhl
IGRlY2xhcmVkIG51bWJlciBvZiBmdW5jdGlvbnMgIiwgbV9pbmZvLT5mdW5jdGlvbkxvY2F0aW9u
SW5CaW5hcnkuc2l6ZSgpKTsKLQotICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsg
KytpKSB7Ci0gICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uU2l6ZTsKLSAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZnVuY3Rpb25TaXplKSwgImNhbid0IGdldCAiLCBp
LCAidGggQ29kZSBmdW5jdGlvbidzIHNpemUiKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RihmdW5jdGlvblNpemUgPiBsZW5ndGgoKSwgIkNvZGUgZnVuY3Rpb24ncyBzaXplICIsIGZ1bmN0
aW9uU2l6ZSwgIiBleGNlZWRzIHRoZSBtb2R1bGUncyBzaXplICIsIGxlbmd0aCgpKTsKLSAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvblNpemUgPiBsZW5ndGgoKSAtIG1fb2Zmc2V0
LCAiQ29kZSBmdW5jdGlvbidzIHNpemUgIiwgZnVuY3Rpb25TaXplLCAiIGV4Y2VlZHMgdGhlIG1v
ZHVsZSdzIHJlbWFpbmluZyBzaXplIiwgbGVuZ3RoKCkgLSBtX29mZnNldCk7Ci0gICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25TaXplID4gbWF4RnVuY3Rpb25TaXplLCAiQ29kZSBm
dW5jdGlvbidzIHNpemUgIiwgZnVuY3Rpb25TaXplLCAiIGlzIHRvbyBiaWciKTsKLQotICAgICAg
ICBtX2luZm8tPmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtpXS5zdGFydCA9IG1fb2Zmc2V0Owot
ICAgICAgICBtX2luZm8tPmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtpXS5lbmQgPSBtX29mZnNl
dCArIGZ1bmN0aW9uU2l6ZTsKLSAgICAgICAgbV9vZmZzZXQgPSBtX2luZm8tPmZ1bmN0aW9uTG9j
YXRpb25JbkJpbmFyeVtpXS5lbmQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsgfTsKLX0KLQotYXV0
byBNb2R1bGVQYXJzZXI6OnBhcnNlSW5pdEV4cHIodWludDhfdCYgb3Bjb2RlLCB1aW50NjRfdCYg
Yml0c09ySW1wb3J0TnVtYmVyLCBUeXBlJiByZXN1bHRUeXBlKSAtPiBQYXJ0aWFsUmVzdWx0Ci17
Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VVSW50OChvcGNvZGUpLCAiY2FuJ3QgZ2V0
IGluaXRfZXhwcidzIG9wY29kZSIpOwotCi0gICAgc3dpdGNoIChvcGNvZGUpIHsKLSAgICBjYXNl
IEkzMkNvbnN0OiB7Ci0gICAgICAgIGludDMyX3QgY29uc3RhbnQ7Ci0gICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIXBhcnNlVmFySW50MzIoY29uc3RhbnQpLCAiY2FuJ3QgZ2V0IGNvbnN0YW50
IHZhbHVlIGZvciBpbml0X2V4cHIncyBpMzIuY29uc3QiKTsKLSAgICAgICAgYml0c09ySW1wb3J0
TnVtYmVyID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGNvbnN0YW50KTsKLSAgICAgICAgcmVzdWx0
VHlwZSA9IEkzMjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBJNjRDb25zdDog
ewotICAgICAgICBpbnQ2NF90IGNvbnN0YW50OwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFwYXJzZVZhckludDY0KGNvbnN0YW50KSwgImNhbid0IGdldCBjb25zdGFudCB2YWx1ZSBmb3Ig
aW5pdF9leHByJ3MgaTY0LmNvbnN0Iik7Ci0gICAgICAgIGJpdHNPckltcG9ydE51bWJlciA9IGNv
bnN0YW50OwotICAgICAgICByZXN1bHRUeXBlID0gSTY0OwotICAgICAgICBicmVhazsKLSAgICB9
Ci0KLSAgICBjYXNlIEYzMkNvbnN0OiB7Ci0gICAgICAgIHVpbnQzMl90IGNvbnN0YW50OwotICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQzMihjb25zdGFudCksICJjYW4ndCBn
ZXQgY29uc3RhbnQgdmFsdWUgZm9yIGluaXRfZXhwcidzIGYzMi5jb25zdCIpOwotICAgICAgICBi
aXRzT3JJbXBvcnROdW1iZXIgPSBjb25zdGFudDsKLSAgICAgICAgcmVzdWx0VHlwZSA9IEYzMjsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBGNjRDb25zdDogewotICAgICAgICB1
aW50NjRfdCBjb25zdGFudDsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VVSW50
NjQoY29uc3RhbnQpLCAiY2FuJ3QgZ2V0IGNvbnN0YW50IHZhbHVlIGZvciBpbml0X2V4cHIncyBm
NjQuY29uc3QiKTsKLSAgICAgICAgYml0c09ySW1wb3J0TnVtYmVyID0gY29uc3RhbnQ7Ci0gICAg
ICAgIHJlc3VsdFR5cGUgPSBGNjQ7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2Ug
R2V0R2xvYmFsOiB7Ci0gICAgICAgIHVpbnQzMl90IGluZGV4OwotICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbmRleCksICJjYW4ndCBnZXQgZ2V0X2dsb2JhbCdz
IGluZGV4Iik7Ci0KLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbmRleCA+PSBtX2luZm8t
Pmdsb2JhbHMuc2l6ZSgpLCAiZ2V0X2dsb2JhbCdzIGluZGV4ICIsIGluZGV4LCAiIGV4Y2VlZHMg
dGhlIG51bWJlciBvZiBnbG9iYWxzICIsIG1faW5mby0+Z2xvYmFscy5zaXplKCkpOwotICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluZGV4ID49IG1faW5mby0+Zmlyc3RJbnRlcm5hbEdsb2Jh
bCwgImdldF9nbG9iYWwgaW1wb3J0IGtpbmQgaW5kZXggIiwgaW5kZXgsICIgZXhjZWVkcyB0aGUg
Zmlyc3QgaW50ZXJuYWwgZ2xvYmFsICIsIG1faW5mby0+Zmlyc3RJbnRlcm5hbEdsb2JhbCk7Ci0K
LSAgICAgICAgQVNTRVJUKG1faW5mby0+Z2xvYmFsc1tpbmRleF0ubXV0YWJpbGl0eSA9PSBHbG9i
YWw6OkltbXV0YWJsZSk7Ci0gICAgICAgIHJlc3VsdFR5cGUgPSBtX2luZm8tPmdsb2JhbHNbaW5k
ZXhdLnR5cGU7Ci0gICAgICAgIGJpdHNPckltcG9ydE51bWJlciA9IGluZGV4OwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KHRydWUsICJ1bmtub3duIGluaXRfZXhwciBvcGNvZGUgIiwgb3Bjb2RlKTsKLSAgICB9Ci0KLSAg
ICB1aW50OF90IGVuZE9wY29kZTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ4
KGVuZE9wY29kZSksICJjYW4ndCBnZXQgaW5pdF9leHByJ3MgZW5kIG9wY29kZSIpOwotICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoZW5kT3Bjb2RlICE9IE9wVHlwZTo6RW5kLCAiaW5pdF9leHByIHNo
b3VsZCBlbmQgd2l0aCBlbmQsIGVuZGVkIHdpdGggIiwgZW5kT3Bjb2RlKTsKLQotICAgIHJldHVy
biB7IH07Ci19Ci0KLWF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZUdsb2JhbFR5cGUoR2xvYmFsJiBn
bG9iYWwpIC0+IFBhcnRpYWxSZXN1bHQKLXsKLSAgICB1aW50OF90IG11dGFiaWxpdHk7Ci0gICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYWx1ZVR5cGUoZ2xvYmFsLnR5cGUpLCAiY2FuJ3Qg
Z2V0IEdsb2JhbCdzIHZhbHVlIHR5cGUiKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJz
ZVZhclVJbnQxKG11dGFiaWxpdHkpLCAiY2FuJ3QgZ2V0IEdsb2JhbCB0eXBlJ3MgbXV0YWJpbGl0
eSIpOwotICAgIGdsb2JhbC5tdXRhYmlsaXR5ID0gc3RhdGljX2Nhc3Q8R2xvYmFsOjpNdXRhYmls
aXR5PihtdXRhYmlsaXR5KTsKLSAgICByZXR1cm4geyB9OwotfQotCi1hdXRvIE1vZHVsZVBhcnNl
cjo6cGFyc2VEYXRhKCkgLT4gUGFydGlhbFJlc3VsdAotewotICAgIHVpbnQzMl90IHNlZ21lbnRD
b3VudDsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihzZWdtZW50Q291
bnQpLCAiY2FuJ3QgZ2V0IERhdGEgc2VjdGlvbidzIGNvdW50Iik7Ci0gICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihzZWdtZW50Q291bnQgPiBtYXhEYXRhU2VnbWVudHMsICJEYXRhIHNlY3Rpb24ncyBj
b3VudCBpcyB0b28gYmlnICIsIHNlZ21lbnRDb3VudCwgIiBtYXhpbXVtICIsIG1heERhdGFTZWdt
ZW50cyk7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5kYXRhLnRyeVJlc2VydmVD
YXBhY2l0eShzZWdtZW50Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3Ig
RGF0YSBzZWN0aW9uJ3MgIiwgc2VnbWVudENvdW50LCAiIHNlZ21lbnRzIik7Ci0KLSAgICBmb3Ig
KHVpbnQzMl90IHNlZ21lbnROdW1iZXIgPSAwOyBzZWdtZW50TnVtYmVyIDwgc2VnbWVudENvdW50
OyArK3NlZ21lbnROdW1iZXIpIHsKLSAgICAgICAgdWludDMyX3QgbWVtb3J5SW5kZXg7Ci0gICAg
ICAgIHVpbnQ2NF90IGluaXRFeHByQml0czsKLSAgICAgICAgdWludDhfdCBpbml0T3Bjb2RlOwot
ICAgICAgICB1aW50MzJfdCBkYXRhQnl0ZUxlbmd0aDsKLQotICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFwYXJzZVZhclVJbnQzMihtZW1vcnlJbmRleCksICJjYW4ndCBnZXQgIiwgc2VnbWVu
dE51bWJlciwgInRoIERhdGEgc2VnbWVudCdzIGluZGV4Iik7Ci0gICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYobWVtb3J5SW5kZXggPj0gbV9tZW1vcnlDb3VudCwgc2VnbWVudE51bWJlciwgInRo
IERhdGEgc2VnbWVudCBoYXMgaW5kZXggIiwgbWVtb3J5SW5kZXgsICIgd2hpY2ggZXhjZWVkcyB0
aGUgbnVtYmVyIG9mIE1lbW9yaWVzICIsIG1fbWVtb3J5Q291bnQpOwotICAgICAgICBUeXBlIGlu
aXRFeHByVHlwZTsKLSAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUluaXRF
eHByKGluaXRPcGNvZGUsIGluaXRFeHByQml0cywgaW5pdEV4cHJUeXBlKSk7Ci0gICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoaW5pdEV4cHJUeXBlICE9IEkzMiwgc2VnbWVudE51bWJlciwgInRo
IERhdGEgc2VnbWVudCdzIGluaXRfZXhwciBtdXN0IHByb2R1Y2UgYW4gaTMyIik7Ci0gICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGRhdGFCeXRlTGVuZ3RoKSwgImNh
bid0IGdldCAiLCBzZWdtZW50TnVtYmVyLCAidGggRGF0YSBzZWdtZW50J3MgZGF0YSBieXRlIGxl
bmd0aCIpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGRhdGFCeXRlTGVuZ3RoID4gbWF4
TW9kdWxlU2l6ZSwgc2VnbWVudE51bWJlciwgInRoIERhdGEgc2VnbWVudCdzIGRhdGEgYnl0ZSBs
ZW5ndGggaXMgdG9vIGJpZyAiLCBkYXRhQnl0ZUxlbmd0aCwgIiBtYXhpbXVtICIsIG1heE1vZHVs
ZVNpemUpOwotCi0gICAgICAgIFNlZ21lbnQqIHNlZ21lbnQgPSBTZWdtZW50OjpjcmVhdGUobWFr
ZUkzMkluaXRFeHByKGluaXRPcGNvZGUsIGluaXRFeHByQml0cyksIGRhdGFCeXRlTGVuZ3RoKTsK
LSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighc2VnbWVudCwgImNhbid0IGFsbG9jYXRlIGVu
b3VnaCBtZW1vcnkgZm9yICIsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQgb2Ygc2l6
ZSAiLCBkYXRhQnl0ZUxlbmd0aCk7Ci0gICAgICAgIG1faW5mby0+ZGF0YS51bmNoZWNrZWRBcHBl
bmQoU2VnbWVudDo6YWRvcHRQdHIoc2VnbWVudCkpOwotICAgICAgICBmb3IgKHVpbnQzMl90IGRh
dGFCeXRlID0gMDsgZGF0YUJ5dGUgPCBkYXRhQnl0ZUxlbmd0aDsgKytkYXRhQnl0ZSkgewotICAg
ICAgICAgICAgdWludDhfdCBieXRlOwotICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
cGFyc2VVSW50OChieXRlKSwgImNhbid0IGdldCAiLCBkYXRhQnl0ZSwgInRoIGRhdGEgYnl0ZSBm
cm9tICIsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQiKTsKLSAgICAgICAgICAgIHNl
Z21lbnQtPmJ5dGUoZGF0YUJ5dGUpID0gYnl0ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1
cm4geyB9OwotfQotICAgIAotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlQ3VzdG9tKHVpbnQzMl90
IHNlY3Rpb25MZW5ndGgpIC0+IFBhcnRpYWxSZXN1bHQKLXsKLSAgICBjb25zdCB1aW50MzJfdCBj
dXN0b21TZWN0aW9uU3RhcnRPZmZzZXQgPSBtX29mZnNldDsKLQotICAgIEN1c3RvbVNlY3Rpb24g
c2VjdGlvbjsKLSAgICB1aW50MzJfdCBjdXN0b21TZWN0aW9uTnVtYmVyID0gbV9pbmZvLT5jdXN0
b21TZWN0aW9ucy5zaXplKCkgKyAxOwotICAgIHVpbnQzMl90IG5hbWVMZW47Ci0gICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighbV9pbmZvLT5jdXN0b21TZWN0aW9ucy50cnlSZXNlcnZlQ2FwYWNpdHko
Y3VzdG9tU2VjdGlvbk51bWJlciksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAi
LCBjdXN0b21TZWN0aW9uTnVtYmVyLCAidGggY3VzdG9tIHNlY3Rpb24iKTsKLSAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihuYW1lTGVuKSwgImNhbid0IGdldCAiLCBjdXN0
b21TZWN0aW9uTnVtYmVyLCAidGggY3VzdG9tIHNlY3Rpb24ncyBuYW1lIGxlbmd0aCIpOwotICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVVVEY4U3RyaW5nKHNlY3Rpb24ubmFtZSwgbmFt
ZUxlbiksICJuYW1lTGVuIGdldCAiLCBjdXN0b21TZWN0aW9uTnVtYmVyLCAidGggY3VzdG9tIHNl
Y3Rpb24ncyBuYW1lIG9mIGxlbmd0aCAiLCBuYW1lTGVuKTsKLQotICAgIHVpbnQzMl90IHBheWxv
YWRCeXRlcyA9IHNlY3Rpb25MZW5ndGggLSAobV9vZmZzZXQgLSBjdXN0b21TZWN0aW9uU3RhcnRP
ZmZzZXQpOwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXNlY3Rpb24ucGF5bG9hZC50cnlSZXNl
cnZlQ2FwYWNpdHkocGF5bG9hZEJ5dGVzKSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkg
Zm9yICIsIGN1c3RvbVNlY3Rpb25OdW1iZXIsICJ0aCBjdXN0b20gc2VjdGlvbidzICIsIHBheWxv
YWRCeXRlcywgIiBieXRlcyIpOwotICAgIGZvciAodWludDMyX3QgYnl0ZU51bWJlciA9IDA7IGJ5
dGVOdW1iZXIgPCBwYXlsb2FkQnl0ZXM7ICsrYnl0ZU51bWJlcikgewotICAgICAgICB1aW50OF90
IGJ5dGU7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUludDgoYnl0ZSksICJj
YW4ndCBnZXQgIiwgYnl0ZU51bWJlciwgInRoIGRhdGEgYnl0ZSBmcm9tICIsIGN1c3RvbVNlY3Rp
b25OdW1iZXIsICJ0aCBjdXN0b20gc2VjdGlvbiIpOwotICAgICAgICBzZWN0aW9uLnBheWxvYWQu
dW5jaGVja2VkQXBwZW5kKGJ5dGUpOwotICAgIH0KLQotICAgIE5hbWUgbmFtZU5hbWUgPSB7ICdu
JywgJ2EnLCAnbScsICdlJyB9OwotICAgIGlmIChzZWN0aW9uLm5hbWUgPT0gbmFtZU5hbWUpIHsK
LSAgICAgICAgTmFtZVNlY3Rpb25QYXJzZXIgbmFtZVNlY3Rpb25QYXJzZXIoc2VjdGlvbi5wYXls
b2FkLmJlZ2luKCksIHNlY3Rpb24ucGF5bG9hZC5zaXplKCksIG1faW5mbyk7Ci0gICAgICAgIGlm
IChhdXRvIG5hbWVTZWN0aW9uID0gbmFtZVNlY3Rpb25QYXJzZXIucGFyc2UoKSkKLSAgICAgICAg
ICAgIG1faW5mby0+bmFtZVNlY3Rpb24gPSBXVEZNb3ZlKCpuYW1lU2VjdGlvbik7Ci0gICAgfQot
Ci0gICAgbV9pbmZvLT5jdXN0b21TZWN0aW9ucy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShzZWN0
aW9uKSk7Ci0KLSAgICByZXR1cm4geyB9OwotfQotCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2Fz
bQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oCmluZGV4IGE2NTFiZTE3Y2UyM2I4NWZiYjk3YmJi
Njg1NzAzYjM5YjY0YjcyYzQuLmQzM2I3Nzk1MzM3M2RiMjdmMTUxOTlkOTgwNDA4MGYwOTI5NmVk
YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJz
ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgK
QEAgLTQ2LDIxICs0Niw3IEBAIGNsYXNzIE1vZHVsZVBhcnNlciA6IHB1YmxpYyBQYXJzZXI8dm9p
ZD4gewogICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2UoKTsKIAogcHJpdmF0ZToK
LQotI2RlZmluZSBXQVNNX1NFQ1RJT05fREVDTEFSRV9QQVJTRVIoTkFNRSwgSUQsIERFU0NSSVBU
SU9OKSBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZSAjIyBOQU1FKCk7Ci0g
ICAgRk9SX0VBQ0hfS05PV05fV0FTTV9TRUNUSU9OKFdBU01fU0VDVElPTl9ERUNMQVJFX1BBUlNF
UikKLSN1bmRlZiBXQVNNX1NFQ1RJT05fREVDTEFSRV9QQVJTRVIKLQotICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlQ3VzdG9tKHVpbnQzMl90KTsKLSAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUdsb2JhbFR5cGUoR2xvYmFsJik7Ci0gICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VNZW1vcnlIZWxwZXIoYm9vbCBp
c0ltcG9ydCk7Ci0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VUYWJs
ZUhlbHBlcihib29sIGlzSW1wb3J0KTsKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBwYXJzZVJlc2l6YWJsZUxpbWl0cyh1aW50MzJfdCYgaW5pdGlhbCwgc3RkOjpvcHRpb25h
bDx1aW50MzJfdD4mIG1heGltdW0pOwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIHBhcnNlSW5pdEV4cHIodWludDhfdCYsIHVpbnQ2NF90JiwgVHlwZSYgaW5pdEV4cHJUeXBl
KTsKLQogICAgIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4gbV9pbmZvOwotICAgIHVpbnQzMl90IG1f
bWVtb3J5Q291bnQgeyAwIH07Ci0gICAgdWludDMyX3QgbV90YWJsZUNvdW50IHsgMCB9OwogfTsK
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21OYW1lU2VjdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU5hbWVTZWN0aW9uLmgKaW5kZXggN2MwMmYyZjQxOTc3MDVhYzhiZWVlZjQ0MTg5OTBk
MjhlZTM0ZjA4NC4uZmU2M2NmNTU0NzM2NmZjMTc0MGMxZjBjNzBiYTgxYmU3NTM2YTg4ZSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU5hbWVTZWN0aW9uLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU5hbWVTZWN0aW9uLmgKQEAgLTM2LDEx
ICszNiwyMCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCiBzdHJ1Y3QgTmFt
ZVNlY3Rpb24gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TmFtZVNlY3Rpb24+IHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShOYW1lU2VjdGlvbik7Ci0KIHB1YmxpYzoKLSAgICBOYW1l
U2VjdGlvbihjb25zdCBzdGQ6Om9wdGlvbmFsPENTdHJpbmc+ICZoYXNoKQotICAgICAgICA6IG1v
ZHVsZUhhc2goaGFzaCA/IGhhc2gtPmxlbmd0aCgpIDogMykKKyAgICBOYW1lU2VjdGlvbigpCisg
ICAgeworICAgICAgICBzZXRIYXNoKHN0ZDo6bnVsbG9wdCk7CisgICAgfQorCisgICAgc3RhdGlj
IFJlZjxOYW1lU2VjdGlvbj4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IE5hbWVTZWN0aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIHNldEhhc2goY29uc3Qgc3Rk
OjpvcHRpb25hbDxDU3RyaW5nPiAmaGFzaCkKICAgICB7CisgICAgICAgIG1vZHVsZUhhc2ggPSBO
YW1lKGhhc2ggPyBoYXNoLT5sZW5ndGgoKSA6IDMpOwogICAgICAgICBpZiAoaGFzaCkgewogICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBoYXNoLT5sZW5ndGgoKTsgKytpKQogICAg
ICAgICAgICAgICAgIG1vZHVsZUhhc2hbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90PigqKGhhc2gt
PmRhdGEoKSArIGkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21OYW1lU2VjdGlvblBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TmFtZVNlY3Rpb25QYXJzZXIuY3BwCmluZGV4IDczMzk2MjE1Y2Y1OGJjNTI2YjM0OGNjMGE4OGM3
MTNkNGRlYzU5NzcuLjVlYmRjMGNjYWU0MDdhMmI5YjlhM2I5MWY2ZWNhNTgyNWMxMmExZWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21OYW1lU2VjdGlvblBhcnNl
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU5hbWVTZWN0aW9uUGFy
c2VyLmNwcApAQCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20g
ewogCiBhdXRvIE5hbWVTZWN0aW9uUGFyc2VyOjpwYXJzZSgpIC0+IFJlc3VsdAogewotICAgIFJl
ZlB0cjxOYW1lU2VjdGlvbj4gbmFtZVNlY3Rpb24oYWRvcHRSZWYoKm5ldyBOYW1lU2VjdGlvbiht
X2luZm8uaGFzaCkpKTsKKyAgICBSZWY8TmFtZVNlY3Rpb24+IG5hbWVTZWN0aW9uID0gTmFtZVNl
Y3Rpb246OmNyZWF0ZSgpOwogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW5hbWVTZWN0aW9uLT5m
dW5jdGlvbk5hbWVzLnRyeVJlc2VydmVDYXBhY2l0eShtX2luZm8uZnVuY3Rpb25JbmRleFNwYWNl
U2l6ZSgpKSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIGZ1bmN0aW9uIG5hbWVz
Iik7CiAgICAgbmFtZVNlY3Rpb24tPmZ1bmN0aW9uTmFtZXMucmVzaXplKG1faW5mby5mdW5jdGlv
bkluZGV4U3BhY2VTaXplKCkpOwogCkBAIC05Niw3ICs5Niw3IEBAIGF1dG8gTmFtZVNlY3Rpb25Q
YXJzZXI6OnBhcnNlKCkgLT4gUmVzdWx0CiAgICAgICAgIH0KICAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihwYXlsb2FkU3RhcnQgKyBwYXlsb2FkTGVuZ3RoICE9IG1fb2Zmc2V0KTsKICAgICB9
Ci0gICAgcmV0dXJuIG5hbWVTZWN0aW9uOworICAgIHJldHVybiBXVEZNb3ZlKG5hbWVTZWN0aW9u
KTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21OYW1lU2VjdGlvblBhcnNlci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmgKaW5kZXggYjdhZjBkOWI5MGE2
ZDUyNmU5MmQ0ZDgyNGZlZWRiNDRkNTk4NzY4My4uZDhlNmFlNzFiMjZiNGJlY2M4Yjg4OGJiZmQ1
ZWIyNzk4NWM2ZDIxOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU5hbWVTZWN0aW9uUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU5hbWVTZWN0aW9uUGFyc2VyLmgKQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBXYXNtIHsKIAotY2xhc3MgTmFtZVNlY3Rpb25QYXJzZXIgOiBwdWJsaWMgUGFy
c2VyPFJlZlB0cjxOYW1lU2VjdGlvbj4+IHsKK2NsYXNzIE5hbWVTZWN0aW9uUGFyc2VyIDogcHVi
bGljIFBhcnNlcjxSZWY8TmFtZVNlY3Rpb24+PiB7CiBwdWJsaWM6CiAgICAgTmFtZVNlY3Rpb25Q
YXJzZXIoY29uc3QgdWludDhfdCogc291cmNlQnVmZmVyLCBzaXplX3Qgc291cmNlTGVuZ3RoLCBj
b25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbykKICAgICAgICAgOiBQYXJzZXIoc291cmNlQnVm
ZmVyLCBzb3VyY2VMZW5ndGgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtT01HUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxh
bi5jcHAKaW5kZXggNDdkZWFkNjRhZjhmZDVjMzY5OWQyZThmNjQwZWQ4YmViMDQyMGM5ZC4uOWUw
YzRhNTY2NmU0NGUwZWFjYzIzMTJhYmJiNzY1NDUzYjg3OWY0OCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcApAQCAtNjksMjEgKzY5LDE4IEBAIHZvaWQgT01H
UGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKIHsKICAgICBBU1NFUlQobV9jb2RlQmxvY2st
PnJ1bm5hYmxlKCkpOwogICAgIEFTU0VSVChtX2NvZGVCbG9jay5wdHIoKSA9PSBtX21vZHVsZS0+
Y29kZUJsb2NrRm9yKG1vZGUoKSkpOwotICAgIGNvbnN0IEZ1bmN0aW9uTG9jYXRpb25JbkJpbmFy
eSYgbG9jYXRpb24gPSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbkxvY2F0aW9uSW5CaW5h
cnlbbV9mdW5jdGlvbkluZGV4XTsKLSAgICBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0ID0g
bV9tb2R1bGVJbmZvcm1hdGlvbi0+c291cmNlLmRhdGEoKSArIGxvY2F0aW9uLnN0YXJ0OwotICAg
IGNvbnN0IHNpemVfdCBmdW5jdGlvbkxlbmd0aCA9IGxvY2F0aW9uLmVuZCAtIGxvY2F0aW9uLnN0
YXJ0OwotICAgIEFTU0VSVChmdW5jdGlvblN0YXJ0ICsgZnVuY3Rpb25MZW5ndGggPD0gbV9tb2R1
bGVJbmZvcm1hdGlvbi0+c291cmNlLmVuZCgpKTsKKyAgICBjb25zdCBGdW5jdGlvbkRhdGEmIGZ1
bmN0aW9uID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25zW21fZnVuY3Rpb25JbmRleF07
CiAKICAgICBjb25zdCB1aW50MzJfdCBmdW5jdGlvbkluZGV4U3BhY2UgPSBtX2Z1bmN0aW9uSW5k
ZXggKyBtX21vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5pbXBvcnRGdW5jdGlvbkNvdW50KCk7
CiAgICAgQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA8IG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1h
dGlvbigpLmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7CiAKICAgICBTaWduYXR1cmVJbmRleCBz
aWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWdu
YXR1cmVJbmRpY2VzW21fZnVuY3Rpb25JbmRleF07CiAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWdu
YXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKLSAgICBB
U1NFUlQodmFsaWRhdGVGdW5jdGlvbihmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2ln
bmF0dXJlLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpKSk7CisgICAgQVNTRVJUKHZhbGlkYXRl
RnVuY3Rpb24oZnVuY3Rpb24uZGF0YS5kYXRhKCksIGZ1bmN0aW9uLmRhdGEuc2l6ZSgpLCBzaWdu
YXR1cmUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCkpKTsKIAogICAgIFZlY3RvcjxVbmxpbmtl
ZFdhc21Ub1dhc21DYWxsPiB1bmxpbmtlZENhbGxzOwogICAgIENvbXBpbGF0aW9uQ29udGV4dCBj
b250ZXh0OwotICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxl
KGNvbnRleHQsIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIHVubGlu
a2VkQ2FsbHMsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25N
b2RlOjpPTUdNb2RlLCBtX2Z1bmN0aW9uSW5kZXgpOworICAgIGF1dG8gcGFyc2VBbmRDb21waWxl
UmVzdWx0ID0gcGFyc2VBbmRDb21waWxlKGNvbnRleHQsIGZ1bmN0aW9uLmRhdGEuZGF0YSgpLCBm
dW5jdGlvbi5kYXRhLnNpemUoKSwgc2lnbmF0dXJlLCB1bmxpbmtlZENhbGxzLCBtX21vZHVsZUlu
Zm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6T01HTW9kZSwgbV9mdW5j
dGlvbkluZGV4KTsKIAogICAgIGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxlUmVzdWx0KSkg
ewogICAgICAgICBmYWlsKGhvbGRMb2NrKG1fbG9jayksIG1ha2VTdHJpbmcocGFyc2VBbmRDb21w
aWxlUmVzdWx0LmVycm9yKCksICJ3aGVuIHRyeWluZyB0byB0aWVyIHVwICIsIFN0cmluZzo6bnVt
YmVyKG1fZnVuY3Rpb25JbmRleCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21QYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYXJz
ZXIuaAppbmRleCA2NTEwNzA1ZWFmNTc4Y2UzM2UzYmQ3NmIyYmM4MzhhZGRhNWY1YjAwLi45ZmM0
YTQ1NGM5YjcyNmZhMTNlODRhNGI0NzNmZWFkODEyYmI5OWYwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVBhcnNlci5oCkBAIC01OCw2ICs1OCwxMCBAQCBjbGFzcyBQYXJzZXIgewog
ICAgIHR5cGVkZWYgRXhwZWN0ZWQ8dm9pZCwgRXJyb3JUeXBlPiBQYXJ0aWFsUmVzdWx0OwogICAg
IHR5cGVkZWYgRXhwZWN0ZWQ8U3VjY2Vzc1R5cGUsIEVycm9yVHlwZT4gUmVzdWx0OwogCisgICAg
Y29uc3QgdWludDhfdCogc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KKyAgICBz
aXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VMZW5ndGg7IH0KKyAgICBzaXpl
X3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKwogcHJvdGVjdGVkOgogICAg
IFBhcnNlcihjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKIApAQCAtODEsMTYgKzg1LDEzIEBAIGNs
YXNzIFBhcnNlciB7CiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VWYWx1ZVR5cGUo
VHlwZSYpOwogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlRXh0ZXJuYWxLaW5kKEV4
dGVybmFsS2luZCYpOwogCi0gICAgY29uc3QgdWludDhfdCogc291cmNlKCkgY29uc3QgeyByZXR1
cm4gbV9zb3VyY2U7IH0KLSAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9zb3Vy
Y2VMZW5ndGg7IH0KLQogICAgIHNpemVfdCBtX29mZnNldCA9IDA7CiAKICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgLi4uQXJncz4KICAgICBORVZFUl9JTkxJTkUgVW5leHBlY3RlZFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gZmFpbChBcmdzLi4uIGFyZ3MpIGNvbnN0CiAgICAgewogICAgICAgICB1
c2luZyBuYW1lc3BhY2UgRmFpbHVyZUhlbHBlcjsgLy8gU2VlIEFETCBjb21tZW50IGluIG5hbWVz
cGFjZSBhYm92ZS4KLSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRSZXN1bHQobWFrZVN0cmluZygi
V2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAiX3MsIFN0cmluZzo6bnVt
YmVyKG1fb2Zmc2V0KSwgIiAvICJfcywgU3RyaW5nOjpudW1iZXIobV9zb3VyY2VMZW5ndGgpLCAi
OiAiX3MsIG1ha2VTdHJpbmcoYXJncykuLi4pKTsKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRS
ZXN1bHQobWFrZVN0cmluZygiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0
ZSAiX3MsIFN0cmluZzo6bnVtYmVyKG1fb2Zmc2V0KSwgIjogIl9zLCBtYWtlU3RyaW5nKGFyZ3Mp
Li4uKSk7CiAgICAgfQogI2RlZmluZSBXQVNNX1BBUlNFUl9GQUlMX0lGKGNvbmRpdGlvbiwgLi4u
KSBkbyB7IFwKICAgICBpZiAoVU5MSUtFTFkoY29uZGl0aW9uKSkgICAgICAgICAgICAgICAgICAg
ICBcCkBAIC0yODUsNiArMjg2LDE0IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI8U3VjY2Vz
c1R5cGU+OjpwYXJzZUV4dGVybmFsS2luZChFeHRlcm5hbEtpbmQmIHJlc3VsdCkKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAorQUxXQVlTX0lOTElORSBJMzJJbml0RXhwciBtYWtlSTMySW5pdEV4cHIo
dWludDhfdCBvcGNvZGUsIHVpbnQzMl90IGJpdHMpCit7CisgICAgUkVMRUFTRV9BU1NFUlQob3Bj
b2RlID09IEkzMkNvbnN0IHx8IG9wY29kZSA9PSBHZXRHbG9iYWwpOworICAgIGlmIChvcGNvZGUg
PT0gSTMyQ29uc3QpCisgICAgICAgIHJldHVybiBJMzJJbml0RXhwcjo6Y29uc3RWYWx1ZShiaXRz
KTsKKyAgICByZXR1cm4gSTMySW5pdEV4cHI6Omdsb2JhbEltcG9ydChiaXRzKTsKK30KKwogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAppbmRleCBhMzRkZWVjYjE2YjE0
MGJlYjUzYjg3YzZlMmE3MDM5ODM0OTMwYzJjLi45OTc0ZWNmZTU1YmFmMjg5ZWVjNTY1MDY2YTFj
ZDQ5YWUyM2E4MjBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
UGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCkBA
IC01Myw4ICs1Myw2IEBAIFBsYW46OlBsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVsZUlu
Zm9ybWF0aW9uPiBpbmZvLCBDb21wbGV0aW9uVGFzayYmIHRhc2ssCiAgICAgOiBtX21vZHVsZUlu
Zm9ybWF0aW9uKFdURk1vdmUoaW5mbykpCiAgICAgLCBtX2NyZWF0ZUVtYmVkZGVyV3JhcHBlcihX
VEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlcikpCiAgICAgLCBtX3Rocm93V2FzbUV4Y2VwdGlv
bih0aHJvd1dhc21FeGNlcHRpb24pCi0gICAgLCBtX3NvdXJjZShtX21vZHVsZUluZm9ybWF0aW9u
LT5zb3VyY2UuZGF0YSgpKQotICAgICwgbV9zb3VyY2VMZW5ndGgobV9tb2R1bGVJbmZvcm1hdGlv
bi0+c291cmNlLnNpemUoKSkKIHsKICAgICBtX2NvbXBsZXRpb25UYXNrcy5hcHBlbmQoc3RkOjpt
YWtlX3BhaXIoY29udGV4dCwgV1RGTW92ZSh0YXNrKSkpOwogfQpAQCAtNjQsMTAgKzYyLDggQEAg
UGxhbjo6UGxhbihDb250ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGluZm8s
IENvbXBsZXRpb25UYXNrJiYgdGFzaykKIHsKIH0KIAotUGxhbjo6UGxhbihDb250ZXh0KiBjb250
ZXh0LCBjb25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgsIENvbXBsZXRp
b25UYXNrJiYgdGFzaykKLSAgICA6IG1fbW9kdWxlSW5mb3JtYXRpb24oYWRvcHRSZWYoKm5ldyBN
b2R1bGVJbmZvcm1hdGlvbihWZWN0b3I8dWludDhfdD4oKSkpKQotICAgICwgbV9zb3VyY2Uoc291
cmNlKQotICAgICwgbV9zb3VyY2VMZW5ndGgoc291cmNlTGVuZ3RoKQorUGxhbjo6UGxhbihDb250
ZXh0KiBjb250ZXh0LCBDb21wbGV0aW9uVGFzayYmIHRhc2spCisgICAgOiBtX21vZHVsZUluZm9y
bWF0aW9uKE1vZHVsZUluZm9ybWF0aW9uOjpjcmVhdGUoKSkKIHsKICAgICBtX2NvbXBsZXRpb25U
YXNrcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoY29udGV4dCwgV1RGTW92ZSh0YXNrKSkpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgKaW5kZXggN2EwN2JmZDNhMGIwNmU5MzQ0
MDk1N2RiMzZkZTZkZGRhZTYzYzY0Yy4uOWVjNjg4NjU4MTMzMWJhY2M5ZjA4ZGQyNmY5YWFiYjRl
OWJkNTNiZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4u
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCkBAIC01NCw3ICs1
NCw3IEBAIGNsYXNzIFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UGxhbj4gewog
ICAgIFBsYW4oQ29udGV4dCosIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4sIENvbXBsZXRpb25UYXNr
JiYpOwogCiAgICAgLy8gTm90ZTogVGhpcyBjb25zdHJ1Y3RvciBzaG91bGQgb25seSBiZSB1c2Vk
IGlmIHlvdSBhcmUgbm90IGFjdHVhbGx5IGJ1aWxkaW5nIGEgbW9kdWxlIGUuZy4gdmFsaWRhdGlv
bi9mdW5jdGlvbiB0ZXN0cwotICAgIEpTX0VYUE9SVF9QUklWQVRFIFBsYW4oQ29udGV4dCosIGNv
bnN0IHVpbnQ4X3QqLCBzaXplX3QsIENvbXBsZXRpb25UYXNrJiYpOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIFBsYW4oQ29udGV4dCosIENvbXBsZXRpb25UYXNrJiYpOwogICAgIHZpcnR1YWwgSlNf
RVhQT1JUX1BSSVZBVEUgflBsYW4oKTsKIAogICAgIC8vIElmIHlvdSBndWFyYW50ZWUgdGhlIG9y
ZGVyaW5nIGhlcmUsIHlvdSBjYW4gcmVseSBvbiBGSUZPIG9mIHRoZQpAQCAtOTAsOCArOTAsNiBA
QCBjbGFzcyBQbGFuIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFBsYW4+IHsKICAgICBD
cmVhdGVFbWJlZGRlcldyYXBwZXIgbV9jcmVhdGVFbWJlZGRlcldyYXBwZXI7CiAgICAgVGhyb3dX
YXNtRXhjZXB0aW9uIG1fdGhyb3dXYXNtRXhjZXB0aW9uIHsgbnVsbHB0ciB9OwogCi0gICAgY29u
c3QgdWludDhfdCogbV9zb3VyY2U7Ci0gICAgY29uc3Qgc2l6ZV90IG1fc291cmNlTGVuZ3RoOwog
ICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsKICAgICBNZW1vcnlNb2RlIG1fbW9kZSB7IE1lbW9y
eU1vZGU6OkJvdW5kc0NoZWNraW5nIH07CiAgICAgTG9jayBtX2xvY2s7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWE5
YmFjYjY3ZGVkMjUwNDUzNWQ4YzJkZTVjNWVkODMzZGVmMTYwMgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9uUGFyc2VyLmNwcApAQCAtMCww
ICsxLDU2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2UgU3V6dWtpIDx5
dXN1a2VzdXp1a2lAc2xvd3N0YXJ0Lm9yZz4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXYXNtU2VjdGlv
blBhcnNlci5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiSWRlbnRp
ZmllcklubGluZXMuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5SW5mb3JtYXRpb24uaCIKKyNpbmNs
dWRlICJXYXNtTmFtZVNlY3Rpb25QYXJzZXIuaCIKKyNpbmNsdWRlICJXYXNtT3BzLmgiCisjaW5j
bHVkZSAiV2FzbVNlY3Rpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7
CisKK2F1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VUeXBlKCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHVpbnQzMl90IGNvdW50OworCisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJV
SW50MzIoY291bnQpLCAiY2FuJ3QgZ2V0IFR5cGUgc2VjdGlvbidzIGNvdW50Iik7CisgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRihjb3VudCA+IG1heFR5cGVzLCAiVHlwZSBzZWN0aW9uJ3MgY291bnQg
aXMgdG9vIGJpZyAiLCBjb3VudCwgIiBtYXhpbXVtICIsIG1heFR5cGVzKTsKKyAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFtX2luZm8tPnVzZWRTaWduYXR1cmVzLnRyeVJlc2VydmVDYXBhY2l0eShj
b3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBUeXBlIHNlY3Rpb24ncyAi
LCBjb3VudCwgIiBlbnRyaWVzIik7CisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgY291
bnQ7ICsraSkgeworICAgICAgICBpbnQ4X3QgdHlwZTsKKyAgICAgICAgdWludDMyX3QgYXJndW1l
bnRDb3VudDsKKyAgICAgICAgVmVjdG9yPFR5cGU+IGFyZ3VtZW50VHlwZXM7CisKKyAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VJbnQ3KHR5cGUpLCAiY2FuJ3QgZ2V0ICIsIGksICJ0
aCBUeXBlJ3MgdHlwZSIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHR5cGUgIT0gRnVu
YywgaSwgInRoIFR5cGUgaXMgbm9uLUZ1bmMgIiwgdHlwZSk7CisgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGFyZ3VtZW50Q291bnQpLCAiY2FuJ3QgZ2V0ICIsIGks
ICJ0aCBUeXBlJ3MgYXJndW1lbnQgY291bnQiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
Rihhcmd1bWVudENvdW50ID4gbWF4RnVuY3Rpb25QYXJhbXMsIGksICJ0aCBhcmd1bWVudCBjb3Vu
dCBpcyB0b28gYmlnICIsIGFyZ3VtZW50Q291bnQsICIgbWF4aW11bSAiLCBtYXhGdW5jdGlvblBh
cmFtcyk7CisgICAgICAgIFJlZlB0cjxTaWduYXR1cmU+IG1heWJlU2lnbmF0dXJlID0gU2lnbmF0
dXJlOjp0cnlDcmVhdGUoYXJndW1lbnRDb3VudCk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIW1heWJlU2lnbmF0dXJlLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgVHlw
ZSBzZWN0aW9uJ3MgIiwgaSwgInRoIHNpZ25hdHVyZSIpOworICAgICAgICBSZWY8U2lnbmF0dXJl
PiBzaWduYXR1cmUgPSBtYXliZVNpZ25hdHVyZS5yZWxlYXNlTm9uTnVsbCgpOworCisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmd1bWVudENvdW50OyArK2kpIHsKKyAgICAgICAg
ICAgIFR5cGUgYXJndW1lbnRUeXBlOworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
cGFyc2VWYWx1ZVR5cGUoYXJndW1lbnRUeXBlKSwgImNhbid0IGdldCAiLCBpLCAidGggYXJndW1l
bnQgVHlwZSIpOworICAgICAgICAgICAgc2lnbmF0dXJlLT5hcmd1bWVudChpKSA9IGFyZ3VtZW50
VHlwZTsKKyAgICAgICAgfQorCisgICAgICAgIHVpbnQ4X3QgcmV0dXJuQ291bnQ7CisgICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDEocmV0dXJuQ291bnQpLCAiY2FuJ3Qg
Z2V0ICIsIGksICJ0aCBUeXBlJ3MgcmV0dXJuIGNvdW50Iik7CisgICAgICAgIFR5cGUgcmV0dXJu
VHlwZTsKKyAgICAgICAgaWYgKHJldHVybkNvdW50KSB7CisgICAgICAgICAgICBUeXBlIHZhbHVl
OworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYWx1ZVR5cGUodmFsdWUp
LCAiY2FuJ3QgZ2V0ICIsIGksICJ0aCBUeXBlJ3MgcmV0dXJuIHZhbHVlIik7CisgICAgICAgICAg
ICByZXR1cm5UeXBlID0gc3RhdGljX2Nhc3Q8VHlwZT4odmFsdWUpOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIHJldHVyblR5cGUgPSBUeXBlOjpWb2lkOworICAgICAgICBzaWduYXR1cmUt
PnJldHVyblR5cGUoKSA9IHJldHVyblR5cGU7CisKKyAgICAgICAgc3RkOjpwYWlyPFNpZ25hdHVy
ZUluZGV4LCBSZWY8U2lnbmF0dXJlPj4gcmVzdWx0ID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmFk
b3B0KFdURk1vdmUoc2lnbmF0dXJlKSk7CisgICAgICAgIG1faW5mby0+dXNlZFNpZ25hdHVyZXMu
dW5jaGVja2VkQXBwZW5kKFdURk1vdmUocmVzdWx0LnNlY29uZCkpOworICAgIH0KKyAgICByZXR1
cm4geyB9OworfQorCithdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlSW1wb3J0KCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHVpbnQzMl90IGltcG9ydENvdW50OworICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIXBhcnNlVmFyVUludDMyKGltcG9ydENvdW50KSwgImNhbid0IGdldCBJbXBvcnQgc2Vj
dGlvbidzIGNvdW50Iik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbXBvcnRDb3VudCA+IG1h
eEltcG9ydHMsICJJbXBvcnQgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgaW1wb3J0Q291
bnQsICIgbWF4aW11bSAiLCBtYXhJbXBvcnRzKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFt
X2luZm8tPmdsb2JhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50KSwgImNhbid0IGFs
bG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGltcG9ydENvdW50LCAiIGdsb2JhbHMiKTsgLy8g
RklYTUUgdGhpcyBvdmVyLWFsbG9jYXRlcyB3aGVuIHdlIGZpeCB0aGUgRklYTUVzIGJlbG93Lgor
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+aW1wb3J0cy50cnlSZXNlcnZlQ2FwYWNp
dHkoaW1wb3J0Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgaW1w
b3J0Q291bnQsICIgaW1wb3J0cyIpOyAvLyBGSVhNRSB0aGlzIG92ZXItYWxsb2NhdGVzIHdoZW4g
d2UgZml4IHRoZSBGSVhNRXMgYmVsb3cuCisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZv
LT5pbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9y
dENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGltcG9ydENvdW50
LCAiIGltcG9ydCBmdW5jdGlvbiBzaWduYXR1cmVzIik7IC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxv
Y2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxvdy4KKworICAgIGZvciAodWludDMyX3Qg
aW1wb3J0TnVtYmVyID0gMDsgaW1wb3J0TnVtYmVyIDwgaW1wb3J0Q291bnQ7ICsraW1wb3J0TnVt
YmVyKSB7CisgICAgICAgIHVpbnQzMl90IG1vZHVsZUxlbjsKKyAgICAgICAgdWludDMyX3QgZmll
bGRMZW47CisgICAgICAgIE5hbWUgbW9kdWxlU3RyaW5nOworICAgICAgICBOYW1lIGZpZWxkU3Ry
aW5nOworICAgICAgICBFeHRlcm5hbEtpbmQga2luZDsKKyAgICAgICAgdW5zaWduZWQga2luZElu
ZGV4IHsgMCB9OworCisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMy
KG1vZHVsZUxlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0J3MgbW9k
dWxlIG5hbWUgbGVuZ3RoIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVV
VEY4U3RyaW5nKG1vZHVsZVN0cmluZywgbW9kdWxlTGVuKSwgImNhbid0IGdldCAiLCBpbXBvcnRO
dW1iZXIsICJ0aCBJbXBvcnQncyBtb2R1bGUgbmFtZSBvZiBsZW5ndGggIiwgbW9kdWxlTGVuKTsK
KworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihmaWVsZExlbiks
ICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0J3MgZmllbGQgbmFtZSBsZW5n
dGggaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIik7CisgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIWNvbnN1bWVVVEY4U3RyaW5nKGZpZWxkU3RyaW5nLCBmaWVsZExlbiksICJjYW4n
dCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0J3MgZmllbGQgbmFtZSBvZiBsZW5ndGgg
IiwgbW9kdWxlTGVuLCAiIGluIG1vZHVsZSAnIiwgbW9kdWxlU3RyaW5nLCAiJyIpOworCisgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlRXh0ZXJuYWxLaW5kKGtpbmQpLCAiY2FuJ3Qg
Z2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdzIGtpbmQgaW4gbW9kdWxlICciLCBtb2R1
bGVTdHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0cmluZywgIiciKTsKKyAgICAgICAgc3dpdGNo
IChraW5kKSB7CisgICAgICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpGdW5jdGlvbjogeworICAgICAg
ICAgICAgdWludDMyX3QgZnVuY3Rpb25TaWduYXR1cmVJbmRleDsKKyAgICAgICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGZ1bmN0aW9uU2lnbmF0dXJlSW5kZXgpLCAi
Y2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdzIGZ1bmN0aW9uIHNpZ25hdHVy
ZSBpbiBtb2R1bGUgJyIsIG1vZHVsZVN0cmluZywgIicgZmllbGQgJyIsIGZpZWxkU3RyaW5nLCAi
JyIpOworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvblNpZ25hdHVyZUlu
ZGV4ID49IG1faW5mby0+dXNlZFNpZ25hdHVyZXMuc2l6ZSgpLCAiaW52YWxpZCBmdW5jdGlvbiBz
aWduYXR1cmUgZm9yICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCwgIiwgZnVuY3Rpb25TaWdu
YXR1cmVJbmRleCwgIiBpcyBvdXQgb2YgcmFuZ2Ugb2YgIiwgbV9pbmZvLT51c2VkU2lnbmF0dXJl
cy5zaXplKCksICIgaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIGZpZWxkICciLCBmaWVs
ZFN0cmluZywgIiciKTsKKyAgICAgICAgICAgIGtpbmRJbmRleCA9IG1faW5mby0+aW1wb3J0RnVu
Y3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsKKyAgICAgICAgICAgIFNpZ25hdHVyZUluZGV4
IHNpZ25hdHVyZUluZGV4ID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChtX2luZm8tPnVzZWRT
aWduYXR1cmVzW2Z1bmN0aW9uU2lnbmF0dXJlSW5kZXhdKTsKKyAgICAgICAgICAgIG1faW5mby0+
aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnVuY2hlY2tlZEFwcGVuZChzaWduYXR1cmVJ
bmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEV4dGVy
bmFsS2luZDo6VGFibGU6IHsKKyAgICAgICAgICAgIGJvb2wgaXNJbXBvcnQgPSB0cnVlOworICAg
ICAgICAgICAgUGFydGlhbFJlc3VsdCByZXN1bHQgPSBwYXJzZVRhYmxlSGVscGVyKGlzSW1wb3J0
KTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoV1RGTW92ZShyZXN1bHQuZXJyb3IoKSkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6Ok1lbW9yeTog
eworICAgICAgICAgICAgYm9vbCBpc0ltcG9ydCA9IHRydWU7CisgICAgICAgICAgICBQYXJ0aWFs
UmVzdWx0IHJlc3VsdCA9IHBhcnNlTWVtb3J5SGVscGVyKGlzSW1wb3J0KTsKKyAgICAgICAgICAg
IGlmIChVTkxJS0VMWSghcmVzdWx0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoV1RGTW92ZShyZXN1bHQuZXJyb3IoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6Okdsb2JhbDogeworICAgICAgICAgICAg
R2xvYmFsIGdsb2JhbDsKKyAgICAgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFy
c2VHbG9iYWxUeXBlKGdsb2JhbCkpOworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihn
bG9iYWwubXV0YWJpbGl0eSA9PSBHbG9iYWw6Ok11dGFibGUsICJNdXRhYmxlIEdsb2JhbHMgYXJl
bid0IHN1cHBvcnRlZCIpOworCisgICAgICAgICAgICBraW5kSW5kZXggPSBtX2luZm8tPmdsb2Jh
bHMuc2l6ZSgpOworICAgICAgICAgICAgbV9pbmZvLT5nbG9iYWxzLnVuY2hlY2tlZEFwcGVuZChX
VEZNb3ZlKGdsb2JhbCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIG1faW5mby0+aW1wb3J0cy51bmNoZWNrZWRBcHBlbmQoeyBXVEZNb3ZlKG1v
ZHVsZVN0cmluZyksIFdURk1vdmUoZmllbGRTdHJpbmcpLCBraW5kLCBraW5kSW5kZXggfSk7Cisg
ICAgfQorCisgICAgbV9pbmZvLT5maXJzdEludGVybmFsR2xvYmFsID0gbV9pbmZvLT5nbG9iYWxz
LnNpemUoKTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNl
RnVuY3Rpb24oKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgdWludDMyX3QgY291bnQ7CisgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoY291bnQpLCAiY2FuJ3QgZ2V0IEZ1
bmN0aW9uIHNlY3Rpb24ncyBjb3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoY291bnQg
PiBtYXhGdW5jdGlvbnMsICJGdW5jdGlvbiBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBj
b3VudCwgIiBtYXhpbXVtICIsIG1heEZ1bmN0aW9ucyk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RighbV9pbmZvLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy50cnlSZXNlcnZlQ2Fw
YWNpdHkoY291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgY291bnQs
ICIgRnVuY3Rpb24gc2lnbmF0dXJlcyIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5m
by0+ZnVuY3Rpb25zLnRyeVJlc2VydmVDYXBhY2l0eShjb3VudCksICJjYW4ndCBhbGxvY2F0ZSBl
bm91Z2ggbWVtb3J5IGZvciAiLCBjb3VudCwgIkZ1bmN0aW9uIGxvY2F0aW9ucyIpOworCisgICAg
Zm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgdWludDMyX3Qg
dHlwZU51bWJlcjsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIo
dHlwZU51bWJlciksICJjYW4ndCBnZXQgIiwgaSwgInRoIEZ1bmN0aW9uJ3MgdHlwZSBudW1iZXIi
KTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0eXBlTnVtYmVyID49IG1faW5mby0+dXNl
ZFNpZ25hdHVyZXMuc2l6ZSgpLCBpLCAidGggRnVuY3Rpb24gdHlwZSBudW1iZXIgaXMgaW52YWxp
ZCAiLCB0eXBlTnVtYmVyKTsKKworICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRl
eCA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQobV9pbmZvLT51c2VkU2lnbmF0dXJlc1t0eXBl
TnVtYmVyXSk7CisgICAgICAgIC8vIFRoZSBDb2RlIHNlY3Rpb24gZml4ZXMgdXAgc3RhcnQgYW5k
IGVuZC4KKyAgICAgICAgc2l6ZV90IHN0YXJ0ID0gMDsKKyAgICAgICAgc2l6ZV90IGVuZCA9IDA7
CisgICAgICAgIG1faW5mby0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXMudW5jaGVj
a2VkQXBwZW5kKHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgbV9pbmZvLT5mdW5jdGlvbnMudW5j
aGVja2VkQXBwZW5kKHsgc3RhcnQsIGVuZCwgVmVjdG9yPHVpbnQ4X3Q+KCkgfSk7CisgICAgfQor
CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZVJlc2l6YWJs
ZUxpbWl0cyh1aW50MzJfdCYgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4mIG1heGlt
dW0pIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQoIW1heGltdW0pOworCisgICAgdWlu
dDhfdCBmbGFnczsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQxKGZsYWdz
KSwgImNhbid0IHBhcnNlIHJlc2l6YWJsZSBsaW1pdHMgZmxhZ3MiKTsKKyAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbml0aWFsKSwgImNhbid0IHBhcnNlIHJlc2l6YWJs
ZSBsaW1pdHMgaW5pdGlhbCBwYWdlIGNvdW50Iik7CisKKyAgICBpZiAoZmxhZ3MpIHsKKyAgICAg
ICAgdWludDMyX3QgbWF4aW11bUludDsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFy
c2VWYXJVSW50MzIobWF4aW11bUludCksICJjYW4ndCBwYXJzZSByZXNpemFibGUgbGltaXRzIG1h
eGltdW0gcGFnZSBjb3VudCIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluaXRpYWwg
PiBtYXhpbXVtSW50LCAicmVzaXphYmxlIGxpbWl0cyBoYXMgYSBpbml0aWFsIHBhZ2UgY291bnQg
b2YgIiwgaW5pdGlhbCwgIiB3aGljaCBpcyBncmVhdGVyIHRoYW4gaXRzIG1heGltdW0gIiwgbWF4
aW11bUludCk7CisgICAgICAgIG1heGltdW0gPSBtYXhpbXVtSW50OworICAgIH0KKworICAgIHJl
dHVybiB7IH07Cit9CisKK2F1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VUYWJsZUhlbHBlcihib29s
IGlzSW1wb3J0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRiht
X2luZm8tPnRhYmxlQ291bnQoKSA+IDAsICJDYW5ub3QgaGF2ZSBtb3JlIHRoYW4gb25lIFRhYmxl
IGZvciBub3ciKTsKKworICAgIGludDhfdCB0eXBlOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlSW50Nyh0eXBlKSwgImNhbid0IHBhcnNlIFRhYmxlIHR5cGUiKTsKKyAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKHR5cGUgIT0gV2FzbTo6QW55ZnVuYywgIlRhYmxlIHR5cGUgc2hvdWxkIGJl
IGFueWZ1bmMsIGdvdCAiLCB0eXBlKTsKKworICAgIHVpbnQzMl90IGluaXRpYWw7CisgICAgc3Rk
OjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bTsKKyAgICBQYXJ0aWFsUmVzdWx0IGxpbWl0cyA9
IHBhcnNlUmVzaXphYmxlTGltaXRzKGluaXRpYWwsIG1heGltdW0pOworICAgIGlmIChVTkxJS0VM
WSghbGltaXRzKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFdURk1vdmUobGltaXRz
LmVycm9yKCkpKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluaXRpYWwgPiBtYXhUYWJsZUVu
dHJpZXMsICJUYWJsZSdzIGluaXRpYWwgcGFnZSBjb3VudCBvZiAiLCBpbml0aWFsLCAiIGlzIHRv
byBiaWcsIG1heGltdW0gIiwgbWF4VGFibGVFbnRyaWVzKTsKKworICAgIEFTU0VSVCghbWF4aW11
bSB8fCAqbWF4aW11bSA+PSBpbml0aWFsKTsKKworICAgIG1faW5mby0+dGFibGVJbmZvcm1hdGlv
biA9IFRhYmxlSW5mb3JtYXRpb24oaW5pdGlhbCwgbWF4aW11bSwgaXNJbXBvcnQpOworCisgICAg
cmV0dXJuIHsgfTsKK30KKworYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZVRhYmxlKCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHVpbnQzMl90IGNvdW50OworICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIXBhcnNlVmFyVUludDMyKGNvdW50KSwgImNhbid0IGdldCBUYWJsZSdzIGNvdW50Iik7Cisg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihjb3VudCA+IDEsICJUYWJsZSBjb3VudCBvZiAiLCBjb3Vu
dCwgIiBpcyBpbnZhbGlkLCBhdCBtb3N0IDEgaXMgYWxsb3dlZCBmb3Igbm93Iik7CisKKyAgICBp
ZiAoIWNvdW50KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgYm9vbCBpc0ltcG9ydCA9IGZh
bHNlOworICAgIFBhcnRpYWxSZXN1bHQgcmVzdWx0ID0gcGFyc2VUYWJsZUhlbHBlcihpc0ltcG9y
dCk7CisgICAgaWYgKFVOTElLRUxZKCFyZXN1bHQpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoV1RGTW92ZShyZXN1bHQuZXJyb3IoKSkpOworCisgICAgcmV0dXJuIHsgfTsKK30KKwor
YXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZU1lbW9yeUhlbHBlcihib29sIGlzSW1wb3J0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX2luZm8tPm1lbW9yeUNv
dW50KCksICJ0aGVyZSBjYW4gYXQgbW9zdCBiZSBvbmUgTWVtb3J5IHNlY3Rpb24gZm9yIG5vdyIp
OworCisgICAgUGFnZUNvdW50IGluaXRpYWxQYWdlQ291bnQ7CisgICAgUGFnZUNvdW50IG1heGlt
dW1QYWdlQ291bnQ7CisgICAgeworICAgICAgICB1aW50MzJfdCBpbml0aWFsOworICAgICAgICBz
dGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtOworICAgICAgICBQYXJ0aWFsUmVzdWx0IGxp
bWl0cyA9IHBhcnNlUmVzaXphYmxlTGltaXRzKGluaXRpYWwsIG1heGltdW0pOworICAgICAgICBp
ZiAoVU5MSUtFTFkoIWxpbWl0cykpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
V1RGTW92ZShsaW1pdHMuZXJyb3IoKSkpOworICAgICAgICBBU1NFUlQoIW1heGltdW0gfHwgKm1h
eGltdW0gPj0gaW5pdGlhbCk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIVBhZ2VDb3Vu
dDo6aXNWYWxpZChpbml0aWFsKSwgIk1lbW9yeSdzIGluaXRpYWwgcGFnZSBjb3VudCBvZiAiLCBp
bml0aWFsLCAiIGlzIGludmFsaWQiKTsKKworICAgICAgICBpbml0aWFsUGFnZUNvdW50ID0gUGFn
ZUNvdW50KGluaXRpYWwpOworCisgICAgICAgIGlmIChtYXhpbXVtKSB7CisgICAgICAgICAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFQYWdlQ291bnQ6OmlzVmFsaWQoKm1heGltdW0pLCAiTWVtb3J5
J3MgbWF4aW11bSBwYWdlIGNvdW50IG9mICIsICptYXhpbXVtLCAiIGlzIGludmFsaWQiKTsKKyAg
ICAgICAgICAgIG1heGltdW1QYWdlQ291bnQgPSBQYWdlQ291bnQoKm1heGltdW0pOworICAgICAg
ICB9CisgICAgfQorICAgIEFTU0VSVChpbml0aWFsUGFnZUNvdW50KTsKKyAgICBBU1NFUlQoIW1h
eGltdW1QYWdlQ291bnQgfHwgbWF4aW11bVBhZ2VDb3VudCA+PSBpbml0aWFsUGFnZUNvdW50KTsK
KworICAgIG1faW5mby0+bWVtb3J5ID0gTWVtb3J5SW5mb3JtYXRpb24oaW5pdGlhbFBhZ2VDb3Vu
dCwgbWF4aW11bVBhZ2VDb3VudCwgaXNJbXBvcnQpOworICAgIHJldHVybiB7IH07Cit9CisKK2F1
dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VNZW1vcnkoKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
dWludDhfdCBjb3VudDsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQxKGNv
dW50KSwgImNhbid0IHBhcnNlIE1lbW9yeSBzZWN0aW9uJ3MgY291bnQiKTsKKworICAgIGlmICgh
Y291bnQpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGNv
dW50ICE9IDEsICJNZW1vcnkgc2VjdGlvbiBoYXMgbW9yZSB0aGFuIG9uZSBtZW1vcnksIFdlYkFz
c2VtYmx5IGN1cnJlbnRseSBvbmx5IGFsbG93cyB6ZXJvIG9yIG9uZSIpOworCisgICAgYm9vbCBp
c0ltcG9ydCA9IGZhbHNlOworICAgIHJldHVybiBwYXJzZU1lbW9yeUhlbHBlcihpc0ltcG9ydCk7
Cit9CisKK2F1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VHbG9iYWwoKSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgdWludDMyX3QgZ2xvYmFsQ291bnQ7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
cGFyc2VWYXJVSW50MzIoZ2xvYmFsQ291bnQpLCAiY2FuJ3QgZ2V0IEdsb2JhbCBzZWN0aW9uJ3Mg
Y291bnQiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGdsb2JhbENvdW50ID4gbWF4R2xvYmFs
cywgIkdsb2JhbCBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBnbG9iYWxDb3VudCwgIiBt
YXhpbXVtICIsIG1heEdsb2JhbHMpOworICAgIHNpemVfdCB0b3RhbEJ5dGVzID0gZ2xvYmFsQ291
bnQgKyBtX2luZm8tPmZpcnN0SW50ZXJuYWxHbG9iYWw7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9J
Rigoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHRvdGFsQnl0ZXMpIDwgZ2xvYmFsQ291bnQpIHx8ICFt
X2luZm8tPmdsb2JhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KHRvdGFsQnl0ZXMpLCAiY2FuJ3QgYWxs
b2NhdGUgbWVtb3J5IGZvciAiLCB0b3RhbEJ5dGVzLCAiIGdsb2JhbHMiKTsKKworICAgIGZvciAo
dWludDMyX3QgZ2xvYmFsSW5kZXggPSAwOyBnbG9iYWxJbmRleCA8IGdsb2JhbENvdW50OyArK2ds
b2JhbEluZGV4KSB7CisgICAgICAgIEdsb2JhbCBnbG9iYWw7CisgICAgICAgIHVpbnQ4X3QgaW5p
dE9wY29kZTsKKworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlR2xvYmFs
VHlwZShnbG9iYWwpKTsKKyAgICAgICAgVHlwZSB0eXBlRm9ySW5pdE9wY29kZTsKKyAgICAgICAg
V0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUluaXRFeHByKGluaXRPcGNvZGUsIGdsb2Jh
bC5pbml0aWFsQml0c09ySW1wb3J0TnVtYmVyLCB0eXBlRm9ySW5pdE9wY29kZSkpOworICAgICAg
ICBpZiAoaW5pdE9wY29kZSA9PSBHZXRHbG9iYWwpCisgICAgICAgICAgICBnbG9iYWwuaW5pdGlh
bGl6YXRpb25UeXBlID0gR2xvYmFsOjpGcm9tR2xvYmFsSW1wb3J0OworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBnbG9iYWwuaW5pdGlhbGl6YXRpb25UeXBlID0gR2xvYmFsOjpGcm9tRXhwcmVz
c2lvbjsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0eXBlRm9ySW5pdE9wY29kZSAhPSBn
bG9iYWwudHlwZSwgIkdsb2JhbCBpbml0X2V4cHIgb3Bjb2RlIG9mIHR5cGUgIiwgdHlwZUZvcklu
aXRPcGNvZGUsICIgZG9lc24ndCBtYXRjaCBnbG9iYWwncyB0eXBlICIsIGdsb2JhbC50eXBlKTsK
KworICAgICAgICBtX2luZm8tPmdsb2JhbHMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoZ2xvYmFs
KSk7CisgICAgfQorCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBTZWN0aW9uUGFyc2VyOjpw
YXJzZUV4cG9ydCgpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1aW50MzJfdCBleHBvcnRDb3Vu
dDsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihleHBvcnRDb3VudCks
ICJjYW4ndCBnZXQgRXhwb3J0IHNlY3Rpb24ncyBjb3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoZXhwb3J0Q291bnQgPiBtYXhFeHBvcnRzLCAiRXhwb3J0IHNlY3Rpb24ncyBjb3VudCBp
cyB0b28gYmlnICIsIGV4cG9ydENvdW50LCAiIG1heGltdW0gIiwgbWF4RXhwb3J0cyk7CisgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5leHBvcnRzLnRyeVJlc2VydmVDYXBhY2l0eShl
eHBvcnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBleHBvcnRD
b3VudCwgIiBleHBvcnRzIik7CisKKyAgICBIYXNoU2V0PFN0cmluZz4gZXhwb3J0TmFtZXM7Cisg
ICAgZm9yICh1aW50MzJfdCBleHBvcnROdW1iZXIgPSAwOyBleHBvcnROdW1iZXIgPCBleHBvcnRD
b3VudDsgKytleHBvcnROdW1iZXIpIHsKKyAgICAgICAgdWludDMyX3QgZmllbGRMZW47CisgICAg
ICAgIE5hbWUgZmllbGRTdHJpbmc7CisgICAgICAgIEV4dGVybmFsS2luZCBraW5kOworICAgICAg
ICB1bnNpZ25lZCBraW5kSW5kZXg7CisKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFy
c2VWYXJVSW50MzIoZmllbGRMZW4pLCAiY2FuJ3QgZ2V0ICIsIGV4cG9ydE51bWJlciwgInRoIEV4
cG9ydCdzIGZpZWxkIG5hbWUgbGVuZ3RoIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IWNvbnN1bWVVVEY4U3RyaW5nKGZpZWxkU3RyaW5nLCBmaWVsZExlbiksICJjYW4ndCBnZXQgIiwg
ZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0J3MgZmllbGQgbmFtZSBvZiBsZW5ndGggIiwgZmllbGRM
ZW4pOworICAgICAgICBTdHJpbmcgZmllbGROYW1lID0gU3RyaW5nOjpmcm9tVVRGOChmaWVsZFN0
cmluZyk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZXhwb3J0TmFtZXMuY29udGFpbnMo
ZmllbGROYW1lKSwgImR1cGxpY2F0ZSBleHBvcnQ6ICciLCBmaWVsZFN0cmluZywgIiciKTsKKyAg
ICAgICAgZXhwb3J0TmFtZXMuYWRkKGZpZWxkTmFtZSk7CisKKyAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighcGFyc2VFeHRlcm5hbEtpbmQoa2luZCksICJjYW4ndCBnZXQgIiwgZXhwb3J0TnVt
YmVyLCAidGggRXhwb3J0J3Mga2luZCwgbmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOworICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihraW5kSW5kZXgpLCAiY2Fu
J3QgZ2V0ICIsIGV4cG9ydE51bWJlciwgInRoIEV4cG9ydCdzIGtpbmQgaW5kZXgsIG5hbWVkICci
LCBmaWVsZFN0cmluZywgIiciKTsKKyAgICAgICAgc3dpdGNoIChraW5kKSB7CisgICAgICAgIGNh
c2UgRXh0ZXJuYWxLaW5kOjpGdW5jdGlvbjogeworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRihraW5kSW5kZXggPj0gbV9pbmZvLT5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCksIGV4cG9y
dE51bWJlciwgInRoIEV4cG9ydCBoYXMgaW52YWxpZCBmdW5jdGlvbiBudW1iZXIgIiwga2luZElu
ZGV4LCAiIGl0IGV4Y2VlZHMgdGhlIGZ1bmN0aW9uIGluZGV4IHNwYWNlICIsIG1faW5mby0+ZnVu
Y3Rpb25JbmRleFNwYWNlU2l6ZSgpLCAiLCBuYW1lZCAnIiwgZmllbGRTdHJpbmcsICInIik7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEV4dGVybmFsS2luZDo6
VGFibGU6IHsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoa2luZEluZGV4ID49IG1f
aW5mby0+dGFibGVDb3VudCgpLCAiY2FuJ3QgZXhwb3J0IFRhYmxlICIsIGtpbmRJbmRleCwgIiB0
aGVyZSBhcmUgIiwgbV9pbmZvLT50YWJsZUNvdW50KCksICIgVGFibGVzIik7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEV4dGVybmFsS2luZDo6TWVtb3J5OiB7
CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPm1lbW9yeSwgImNhbid0
IGV4cG9ydCBhIG5vbi1leGlzdGVudCBNZW1vcnkiKTsKKyAgICAgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoa2luZEluZGV4LCAiY2FuJ3QgZXhwb3J0IE1lbW9yeSAiLCBraW5kSW5kZXgsICIg
b25seSBvbmUgVGFibGUgaXMgY3VycmVudGx5IHN1cHBvcnRlZCIpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6Okdsb2JhbDogeworICAg
ICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihraW5kSW5kZXggPj0gbV9pbmZvLT5nbG9iYWxz
LnNpemUoKSwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0IGhhcyBpbnZhbGlkIGdsb2JhbCBudW1i
ZXIgIiwga2luZEluZGV4LCAiIGl0IGV4Y2VlZHMgdGhlIGdsb2JhbHMgY291bnQgIiwgbV9pbmZv
LT5nbG9iYWxzLnNpemUoKSwgIiwgbmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOworICAgICAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX2luZm8tPmdsb2JhbHNba2luZEluZGV4XS5tdXRh
YmlsaXR5ICE9IEdsb2JhbDo6SW1tdXRhYmxlLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQgaXNu
J3QgaW1tdXRhYmxlLCBuYW1lZCAnIiwgZmllbGRTdHJpbmcsICInIik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbV9pbmZvLT5leHBvcnRzLnVu
Y2hlY2tlZEFwcGVuZCh7IFdURk1vdmUoZmllbGRTdHJpbmcpLCBraW5kLCBraW5kSW5kZXggfSk7
CisgICAgfQorCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJz
ZVN0YXJ0KCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHVpbnQzMl90IHN0YXJ0RnVuY3Rpb25J
bmRleDsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihzdGFydEZ1bmN0
aW9uSW5kZXgpLCAiY2FuJ3QgZ2V0IFN0YXJ0IGluZGV4Iik7CisgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRihzdGFydEZ1bmN0aW9uSW5kZXggPj0gbV9pbmZvLT5mdW5jdGlvbkluZGV4U3BhY2VTaXpl
KCksICJTdGFydCBpbmRleCAiLCBzdGFydEZ1bmN0aW9uSW5kZXgsICIgZXhjZWVkcyBmdW5jdGlv
biBpbmRleCBzcGFjZSAiLCBtX2luZm8tPmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7CisgICAg
U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX2luZm8tPnNpZ25hdHVyZUluZGV4RnJv
bUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXgpOworICAgIGNvbnN0IFNpZ25h
dHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRl
eCk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCAi
U3RhcnQgZnVuY3Rpb24gY2FuJ3QgaGF2ZSBhcmd1bWVudHMiKTsKKyAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKHNpZ25hdHVyZS5yZXR1cm5UeXBlKCkgIT0gVm9pZCwgIlN0YXJ0IGZ1bmN0aW9uIGNh
bid0IHJldHVybiBhIHZhbHVlIik7CisgICAgbV9pbmZvLT5zdGFydEZ1bmN0aW9uSW5kZXhTcGFj
ZSA9IHN0YXJ0RnVuY3Rpb25JbmRleDsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIFNlY3Rp
b25QYXJzZXI6OnBhcnNlRWxlbWVudCgpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1aW50MzJf
dCBlbGVtZW50Q291bnQ7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIo
ZWxlbWVudENvdW50KSwgImNhbid0IGdldCBFbGVtZW50IHNlY3Rpb24ncyBjb3VudCIpOworICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoZWxlbWVudENvdW50ID4gbWF4VGFibGVFbnRyaWVzLCAiRWxl
bWVudCBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBlbGVtZW50Q291bnQsICIgbWF4aW11
bSAiLCBtYXhUYWJsZUVudHJpZXMpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+
ZWxlbWVudHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGVsZW1lbnRDb3VudCksICJjYW4ndCBhbGxvY2F0
ZSBtZW1vcnkgZm9yICIsIGVsZW1lbnRDb3VudCwgIiBFbGVtZW50cyIpOworICAgIGZvciAodW5z
aWduZWQgZWxlbWVudE51bSA9IDA7IGVsZW1lbnROdW0gPCBlbGVtZW50Q291bnQ7ICsrZWxlbWVu
dE51bSkgeworICAgICAgICB1aW50MzJfdCB0YWJsZUluZGV4OworICAgICAgICB1aW50NjRfdCBp
bml0RXhwckJpdHM7CisgICAgICAgIHVpbnQ4X3QgaW5pdE9wY29kZTsKKyAgICAgICAgdWludDMy
X3QgaW5kZXhDb3VudDsKKworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJ
bnQzMih0YWJsZUluZGV4KSwgImNhbid0IGdldCAiLCBlbGVtZW50TnVtLCAidGggRWxlbWVudCB0
YWJsZSBpbmRleCIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHRhYmxlSW5kZXggPj0g
bV9pbmZvLT50YWJsZUNvdW50KCksICJFbGVtZW50IHNlY3Rpb24gZm9yIFRhYmxlICIsIHRhYmxl
SW5kZXgsICIgZXhjZWVkcyBhdmFpbGFibGUgVGFibGUgIiwgbV9pbmZvLT50YWJsZUNvdW50KCkp
OworICAgICAgICBUeXBlIGluaXRFeHByVHlwZTsKKyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBF
Ul9GQUlMUyhwYXJzZUluaXRFeHByKGluaXRPcGNvZGUsIGluaXRFeHByQml0cywgaW5pdEV4cHJU
eXBlKSk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoaW5pdEV4cHJUeXBlICE9IEkzMiwg
IkVsZW1lbnQgaW5pdF9leHByIG11c3QgcHJvZHVjZSBhbiBpMzIiKTsKKyAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoaW5kZXhDb3VudCksICJjYW4ndCBnZXQgIiwg
ZWxlbWVudE51bSwgInRoIGluZGV4IGNvdW50IGZvciBFbGVtZW50IHNlY3Rpb24iKTsKKyAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbmRleENvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8
dWludDMyX3Q+OjptYXgoKSwgIkVsZW1lbnQgc2VjdGlvbidzICIsIGVsZW1lbnROdW0sICJ0aCBp
bmRleCBjb3VudCBpcyB0b28gYmlnICIsIGluZGV4Q291bnQpOworCisgICAgICAgIEFTU0VSVCgh
IW1faW5mby0+dGFibGVJbmZvcm1hdGlvbik7CisKKyAgICAgICAgRWxlbWVudCBlbGVtZW50KG1h
a2VJMzJJbml0RXhwcihpbml0T3Bjb2RlLCBpbml0RXhwckJpdHMpKTsKKyAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighZWxlbWVudC5mdW5jdGlvbkluZGljZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5
KGluZGV4Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiLCBpbmRleENvdW50LCAi
IEVsZW1lbnQgaW5kaWNlcyIpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBp
bmRleCA8IGluZGV4Q291bnQ7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIHVpbnQzMl90IGZ1bmN0
aW9uSW5kZXg7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQz
MihmdW5jdGlvbkluZGV4KSwgImNhbid0IGdldCBFbGVtZW50IHNlY3Rpb24ncyAiLCBlbGVtZW50
TnVtLCAidGggZWxlbWVudCdzICIsIGluZGV4LCAidGggaW5kZXgiKTsKKyAgICAgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25JbmRleCA+PSBtX2luZm8tPmZ1bmN0aW9uSW5kZXhT
cGFjZVNpemUoKSwgIkVsZW1lbnQgc2VjdGlvbidzICIsIGVsZW1lbnROdW0sICJ0aCBlbGVtZW50
J3MgIiwgaW5kZXgsICJ0aCBpbmRleCBpcyAiLCBmdW5jdGlvbkluZGV4LCAiIHdoaWNoIGV4Y2Vl
ZHMgdGhlIGZ1bmN0aW9uIGluZGV4IHNwYWNlIHNpemUgb2YgIiwgbV9pbmZvLT5mdW5jdGlvbklu
ZGV4U3BhY2VTaXplKCkpOworCisgICAgICAgICAgICBlbGVtZW50LmZ1bmN0aW9uSW5kaWNlcy51
bmNoZWNrZWRBcHBlbmQoZnVuY3Rpb25JbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBtX2lu
Zm8tPmVsZW1lbnRzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGVsZW1lbnQpKTsKKyAgICB9CisK
KyAgICByZXR1cm4geyB9OworfQorCisvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2hhbmdlZCB0
byBiZSBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCBvbmNlIHdlIHN3aXRjaCBvdXIgcGFyc2lu
ZyBpbmZyYXN0cnVjdHVyZSB0byB0aGUgc3RyZWFtaW5nIHBhcnNlci4KK2F1dG8gU2VjdGlvblBh
cnNlcjo6cGFyc2VDb2RlKCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHVpbnQzMl90IGNvdW50
OworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGNvdW50KSwgImNhbid0
IGdldCBDb2RlIHNlY3Rpb24ncyBjb3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoY291
bnQgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLCAiQ29kZSBzZWN0aW9u
J3MgY291bnQgaXMgdG9vIGJpZyAiLCBjb3VudCk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihj
b3VudCAhPSBtX2luZm8tPmZ1bmN0aW9ucy5zaXplKCksICJDb2RlIHNlY3Rpb24gY291bnQgIiwg
Y291bnQsICIgZXhjZWVkcyB0aGUgZGVjbGFyZWQgbnVtYmVyIG9mIGZ1bmN0aW9ucyAiLCBtX2lu
Zm8tPmZ1bmN0aW9ucy5zaXplKCkpOworCisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNv
dW50OyArK2kpIHsKKyAgICAgICAgdWludDMyX3QgZnVuY3Rpb25TaXplOworICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihmdW5jdGlvblNpemUpLCAiY2FuJ3QgZ2V0
ICIsIGksICJ0aCBDb2RlIGZ1bmN0aW9uJ3Mgc2l6ZSIpOworICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKGZ1bmN0aW9uU2l6ZSA+IGxlbmd0aCgpLCAiQ29kZSBmdW5jdGlvbidzIHNpemUgIiwg
ZnVuY3Rpb25TaXplLCAiIGV4Y2VlZHMgdGhlIG1vZHVsZSdzIHNpemUgIiwgbGVuZ3RoKCkpOwor
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGZ1bmN0aW9uU2l6ZSA+IGxlbmd0aCgpIC0gbV9v
ZmZzZXQsICJDb2RlIGZ1bmN0aW9uJ3Mgc2l6ZSAiLCBmdW5jdGlvblNpemUsICIgZXhjZWVkcyB0
aGUgbW9kdWxlJ3MgcmVtYWluaW5nIHNpemUiLCBsZW5ndGgoKSAtIG1fb2Zmc2V0KTsKKyAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvblNpemUgPiBtYXhGdW5jdGlvblNpemUsICJD
b2RlIGZ1bmN0aW9uJ3Mgc2l6ZSAiLCBmdW5jdGlvblNpemUsICIgaXMgdG9vIGJpZyIpOworCisg
ICAgICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhKGZ1bmN0aW9uU2l6ZSk7CisgICAgICAgIHN0ZDo6
bWVtY3B5KGRhdGEuZGF0YSgpLCBzb3VyY2UoKSArIG1fb2Zmc2V0LCBmdW5jdGlvblNpemUpOwor
ICAgICAgICBtX2luZm8tPmZ1bmN0aW9uc1tpXS5zdGFydCA9IG1fb2Zmc2V0SW5Tb3VyY2UgKyBt
X29mZnNldDsKKyAgICAgICAgbV9pbmZvLT5mdW5jdGlvbnNbaV0uZW5kID0gbV9vZmZzZXRJblNv
dXJjZSArIG1fb2Zmc2V0ICsgZnVuY3Rpb25TaXplOworICAgICAgICBtX2luZm8tPmZ1bmN0aW9u
c1tpXS5kYXRhID0gV1RGTW92ZShkYXRhKTsKKyAgICAgICAgbV9vZmZzZXQgKz0gZnVuY3Rpb25T
aXplOworICAgIH0KKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gU2VjdGlvblBhcnNlcjo6
cGFyc2VJbml0RXhwcih1aW50OF90JiBvcGNvZGUsIHVpbnQ2NF90JiBiaXRzT3JJbXBvcnROdW1i
ZXIsIFR5cGUmIHJlc3VsdFR5cGUpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVVJbnQ4KG9wY29kZSksICJjYW4ndCBnZXQgaW5pdF9leHByJ3Mgb3Bj
b2RlIik7CisKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgSTMyQ29uc3Q6IHsKKyAg
ICAgICAgaW50MzJfdCBjb25zdGFudDsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFy
c2VWYXJJbnQzMihjb25zdGFudCksICJjYW4ndCBnZXQgY29uc3RhbnQgdmFsdWUgZm9yIGluaXRf
ZXhwcidzIGkzMi5jb25zdCIpOworICAgICAgICBiaXRzT3JJbXBvcnROdW1iZXIgPSBzdGF0aWNf
Y2FzdDx1aW50NjRfdD4oY29uc3RhbnQpOworICAgICAgICByZXN1bHRUeXBlID0gSTMyOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEk2NENvbnN0OiB7CisgICAgICAgIGludDY0
X3QgY29uc3RhbnQ7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFySW50NjQo
Y29uc3RhbnQpLCAiY2FuJ3QgZ2V0IGNvbnN0YW50IHZhbHVlIGZvciBpbml0X2V4cHIncyBpNjQu
Y29uc3QiKTsKKyAgICAgICAgYml0c09ySW1wb3J0TnVtYmVyID0gY29uc3RhbnQ7CisgICAgICAg
IHJlc3VsdFR5cGUgPSBJNjQ7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRjMy
Q29uc3Q6IHsKKyAgICAgICAgdWludDMyX3QgY29uc3RhbnQ7CisgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXBhcnNlVUludDMyKGNvbnN0YW50KSwgImNhbid0IGdldCBjb25zdGFudCB2YWx1
ZSBmb3IgaW5pdF9leHByJ3MgZjMyLmNvbnN0Iik7CisgICAgICAgIGJpdHNPckltcG9ydE51bWJl
ciA9IGNvbnN0YW50OworICAgICAgICByZXN1bHRUeXBlID0gRjMyOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBjYXNlIEY2NENvbnN0OiB7CisgICAgICAgIHVpbnQ2NF90IGNvbnN0YW50
OworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ2NChjb25zdGFudCksICJj
YW4ndCBnZXQgY29uc3RhbnQgdmFsdWUgZm9yIGluaXRfZXhwcidzIGY2NC5jb25zdCIpOworICAg
ICAgICBiaXRzT3JJbXBvcnROdW1iZXIgPSBjb25zdGFudDsKKyAgICAgICAgcmVzdWx0VHlwZSA9
IEY2NDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBHZXRHbG9iYWw6IHsKKyAg
ICAgICAgdWludDMyX3QgaW5kZXg7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNl
VmFyVUludDMyKGluZGV4KSwgImNhbid0IGdldCBnZXRfZ2xvYmFsJ3MgaW5kZXgiKTsKKworICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluZGV4ID49IG1faW5mby0+Z2xvYmFscy5zaXplKCks
ICJnZXRfZ2xvYmFsJ3MgaW5kZXggIiwgaW5kZXgsICIgZXhjZWVkcyB0aGUgbnVtYmVyIG9mIGds
b2JhbHMgIiwgbV9pbmZvLT5nbG9iYWxzLnNpemUoKSk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoaW5kZXggPj0gbV9pbmZvLT5maXJzdEludGVybmFsR2xvYmFsLCAiZ2V0X2dsb2JhbCBp
bXBvcnQga2luZCBpbmRleCAiLCBpbmRleCwgIiBleGNlZWRzIHRoZSBmaXJzdCBpbnRlcm5hbCBn
bG9iYWwgIiwgbV9pbmZvLT5maXJzdEludGVybmFsR2xvYmFsKTsKKworICAgICAgICBBU1NFUlQo
bV9pbmZvLT5nbG9iYWxzW2luZGV4XS5tdXRhYmlsaXR5ID09IEdsb2JhbDo6SW1tdXRhYmxlKTsK
KyAgICAgICAgcmVzdWx0VHlwZSA9IG1faW5mby0+Z2xvYmFsc1tpbmRleF0udHlwZTsKKyAgICAg
ICAgYml0c09ySW1wb3J0TnVtYmVyID0gaW5kZXg7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYodHJ1ZSwgInVua25vd24g
aW5pdF9leHByIG9wY29kZSAiLCBvcGNvZGUpOworICAgIH0KKworICAgIHVpbnQ4X3QgZW5kT3Bj
b2RlOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUludDgoZW5kT3Bjb2RlKSwgImNh
bid0IGdldCBpbml0X2V4cHIncyBlbmQgb3Bjb2RlIik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RihlbmRPcGNvZGUgIT0gT3BUeXBlOjpFbmQsICJpbml0X2V4cHIgc2hvdWxkIGVuZCB3aXRoIGVu
ZCwgZW5kZWQgd2l0aCAiLCBlbmRPcGNvZGUpOworCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0
byBTZWN0aW9uUGFyc2VyOjpwYXJzZUdsb2JhbFR5cGUoR2xvYmFsJiBnbG9iYWwpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICB1aW50OF90IG11dGFiaWxpdHk7CisgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VWYWx1ZVR5cGUoZ2xvYmFsLnR5cGUpLCAiY2FuJ3QgZ2V0IEdsb2JhbCdzIHZh
bHVlIHR5cGUiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQxKG11dGFi
aWxpdHkpLCAiY2FuJ3QgZ2V0IEdsb2JhbCB0eXBlJ3MgbXV0YWJpbGl0eSIpOworICAgIGdsb2Jh
bC5tdXRhYmlsaXR5ID0gc3RhdGljX2Nhc3Q8R2xvYmFsOjpNdXRhYmlsaXR5PihtdXRhYmlsaXR5
KTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlRGF0YSgp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1aW50MzJfdCBzZWdtZW50Q291bnQ7CisgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoc2VnbWVudENvdW50KSwgImNhbid0IGdl
dCBEYXRhIHNlY3Rpb24ncyBjb3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoc2VnbWVu
dENvdW50ID4gbWF4RGF0YVNlZ21lbnRzLCAiRGF0YSBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJp
ZyAiLCBzZWdtZW50Q291bnQsICIgbWF4aW11bSAiLCBtYXhEYXRhU2VnbWVudHMpOworICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+ZGF0YS50cnlSZXNlcnZlQ2FwYWNpdHkoc2VnbWVu
dENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIERhdGEgc2VjdGlvbidz
ICIsIHNlZ21lbnRDb3VudCwgIiBzZWdtZW50cyIpOworCisgICAgZm9yICh1aW50MzJfdCBzZWdt
ZW50TnVtYmVyID0gMDsgc2VnbWVudE51bWJlciA8IHNlZ21lbnRDb3VudDsgKytzZWdtZW50TnVt
YmVyKSB7CisgICAgICAgIHVpbnQzMl90IG1lbW9yeUluZGV4OworICAgICAgICB1aW50NjRfdCBp
bml0RXhwckJpdHM7CisgICAgICAgIHVpbnQ4X3QgaW5pdE9wY29kZTsKKyAgICAgICAgdWludDMy
X3QgZGF0YUJ5dGVMZW5ndGg7CisKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VW
YXJVSW50MzIobWVtb3J5SW5kZXgpLCAiY2FuJ3QgZ2V0ICIsIHNlZ21lbnROdW1iZXIsICJ0aCBE
YXRhIHNlZ21lbnQncyBpbmRleCIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG1lbW9y
eUluZGV4ID49IG1faW5mby0+bWVtb3J5Q291bnQoKSwgc2VnbWVudE51bWJlciwgInRoIERhdGEg
c2VnbWVudCBoYXMgaW5kZXggIiwgbWVtb3J5SW5kZXgsICIgd2hpY2ggZXhjZWVkcyB0aGUgbnVt
YmVyIG9mIE1lbW9yaWVzICIsIG1faW5mby0+bWVtb3J5Q291bnQoKSk7CisgICAgICAgIFR5cGUg
aW5pdEV4cHJUeXBlOworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlSW5p
dEV4cHIoaW5pdE9wY29kZSwgaW5pdEV4cHJCaXRzLCBpbml0RXhwclR5cGUpKTsKKyAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRihpbml0RXhwclR5cGUgIT0gSTMyLCBzZWdtZW50TnVtYmVyLCAi
dGggRGF0YSBzZWdtZW50J3MgaW5pdF9leHByIG11c3QgcHJvZHVjZSBhbiBpMzIiKTsKKyAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZGF0YUJ5dGVMZW5ndGgpLCAi
Y2FuJ3QgZ2V0ICIsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQncyBkYXRhIGJ5dGUg
bGVuZ3RoIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZGF0YUJ5dGVMZW5ndGggPiBt
YXhNb2R1bGVTaXplLCBzZWdtZW50TnVtYmVyLCAidGggRGF0YSBzZWdtZW50J3MgZGF0YSBieXRl
IGxlbmd0aCBpcyB0b28gYmlnICIsIGRhdGFCeXRlTGVuZ3RoLCAiIG1heGltdW0gIiwgbWF4TW9k
dWxlU2l6ZSk7CisKKyAgICAgICAgU2VnbWVudCogc2VnbWVudCA9IFNlZ21lbnQ6OmNyZWF0ZSht
YWtlSTMySW5pdEV4cHIoaW5pdE9wY29kZSwgaW5pdEV4cHJCaXRzKSwgZGF0YUJ5dGVMZW5ndGgp
OworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFzZWdtZW50LCAiY2FuJ3QgYWxsb2NhdGUg
ZW5vdWdoIG1lbW9yeSBmb3IgIiwgc2VnbWVudE51bWJlciwgInRoIERhdGEgc2VnbWVudCBvZiBz
aXplICIsIGRhdGFCeXRlTGVuZ3RoKTsKKyAgICAgICAgbV9pbmZvLT5kYXRhLnVuY2hlY2tlZEFw
cGVuZChTZWdtZW50OjphZG9wdFB0cihzZWdtZW50KSk7CisgICAgICAgIGZvciAodWludDMyX3Qg
ZGF0YUJ5dGUgPSAwOyBkYXRhQnl0ZSA8IGRhdGFCeXRlTGVuZ3RoOyArK2RhdGFCeXRlKSB7Cisg
ICAgICAgICAgICB1aW50OF90IGJ5dGU7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFwYXJzZVVJbnQ4KGJ5dGUpLCAiY2FuJ3QgZ2V0ICIsIGRhdGFCeXRlLCAidGggZGF0YSBieXRl
IGZyb20gIiwgc2VnbWVudE51bWJlciwgInRoIERhdGEgc2VnbWVudCIpOworICAgICAgICAgICAg
c2VnbWVudC0+Ynl0ZShkYXRhQnl0ZSkgPSBieXRlOworICAgICAgICB9CisgICAgfQorICAgIHJl
dHVybiB7IH07Cit9CisKK2F1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VDdXN0b20oKSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgQ3VzdG9tU2VjdGlvbiBzZWN0aW9uOworICAgIHVpbnQzMl90IGN1
c3RvbVNlY3Rpb25OdW1iZXIgPSBtX2luZm8tPmN1c3RvbVNlY3Rpb25zLnNpemUoKSArIDE7Cisg
ICAgdWludDMyX3QgbmFtZUxlbjsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmN1
c3RvbVNlY3Rpb25zLnRyeVJlc2VydmVDYXBhY2l0eShjdXN0b21TZWN0aW9uTnVtYmVyKSwgImNh
bid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGN1c3RvbVNlY3Rpb25OdW1iZXIsICJ0
aCBjdXN0b20gc2VjdGlvbiIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUlu
dDMyKG5hbWVMZW4pLCAiY2FuJ3QgZ2V0ICIsIGN1c3RvbVNlY3Rpb25OdW1iZXIsICJ0aCBjdXN0
b20gc2VjdGlvbidzIG5hbWUgbGVuZ3RoIik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighY29u
c3VtZVVURjhTdHJpbmcoc2VjdGlvbi5uYW1lLCBuYW1lTGVuKSwgIm5hbWVMZW4gZ2V0ICIsIGN1
c3RvbVNlY3Rpb25OdW1iZXIsICJ0aCBjdXN0b20gc2VjdGlvbidzIG5hbWUgb2YgbGVuZ3RoICIs
IG5hbWVMZW4pOworCisgICAgdWludDMyX3QgcGF5bG9hZEJ5dGVzID0gbGVuZ3RoKCkgLSBtX29m
ZnNldDsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFzZWN0aW9uLnBheWxvYWQudHJ5UmVzZXJ2
ZUNhcGFjaXR5KHBheWxvYWRCeXRlcyksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZv
ciAiLCBjdXN0b21TZWN0aW9uTnVtYmVyLCAidGggY3VzdG9tIHNlY3Rpb24ncyAiLCBwYXlsb2Fk
Qnl0ZXMsICIgYnl0ZXMiKTsKKyAgICBmb3IgKHVpbnQzMl90IGJ5dGVOdW1iZXIgPSAwOyBieXRl
TnVtYmVyIDwgcGF5bG9hZEJ5dGVzOyArK2J5dGVOdW1iZXIpIHsKKyAgICAgICAgdWludDhfdCBi
eXRlOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ4KGJ5dGUpLCAiY2Fu
J3QgZ2V0ICIsIGJ5dGVOdW1iZXIsICJ0aCBkYXRhIGJ5dGUgZnJvbSAiLCBjdXN0b21TZWN0aW9u
TnVtYmVyLCAidGggY3VzdG9tIHNlY3Rpb24iKTsKKyAgICAgICAgc2VjdGlvbi5wYXlsb2FkLnVu
Y2hlY2tlZEFwcGVuZChieXRlKTsKKyAgICB9CisKKyAgICBOYW1lIG5hbWVOYW1lID0geyAnbics
ICdhJywgJ20nLCAnZScgfTsKKyAgICBpZiAoc2VjdGlvbi5uYW1lID09IG5hbWVOYW1lKSB7Cisg
ICAgICAgIE5hbWVTZWN0aW9uUGFyc2VyIG5hbWVTZWN0aW9uUGFyc2VyKHNlY3Rpb24ucGF5bG9h
ZC5iZWdpbigpLCBzZWN0aW9uLnBheWxvYWQuc2l6ZSgpLCBtX2luZm8pOworICAgICAgICBpZiAo
YXV0byBuYW1lU2VjdGlvbiA9IG5hbWVTZWN0aW9uUGFyc2VyLnBhcnNlKCkpCisgICAgICAgICAg
ICBtX2luZm8tPm5hbWVTZWN0aW9uID0gV1RGTW92ZSgqbmFtZVNlY3Rpb24pOworICAgIH0KKwor
ICAgIG1faW5mby0+Y3VzdG9tU2VjdGlvbnMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoc2VjdGlv
bikpOworCisgICAgcmV0dXJuIHsgfTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20K
KworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9uUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc4ZDAyODM2ZmM5ZjMyYmMy
Yjc4ZmJmOTBhZDJjNWRhOWY5MTI4M2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kgPHl1c3VrZXN1enVraUBzbG93c3RhcnQu
b3JnPi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJXYXNtRm9ybWF0
LmgiCisjaW5jbHVkZSAiV2FzbU9wcy5oIgorI2luY2x1ZGUgIldhc21QYXJzZXIuaCIKKyNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK2NsYXNzIFNlY3Rpb25QYXJzZXIgZmluYWwgOiBw
dWJsaWMgUGFyc2VyPHZvaWQ+IHsKK3B1YmxpYzoKKyAgICBTZWN0aW9uUGFyc2VyKGNvbnN0IHVp
bnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCBzaXplX3Qgb2Zmc2V0SW5Tb3VyY2UsIE1vZHVsZUlu
Zm9ybWF0aW9uJiBpbmZvKQorICAgICAgICA6IFBhcnNlcihkYXRhLCBzaXplKQorICAgICAgICAs
IG1fb2Zmc2V0SW5Tb3VyY2Uob2Zmc2V0SW5Tb3VyY2UpCisgICAgICAgICwgbV9pbmZvKGluZm8p
CisgICAgeworICAgIH0KKworI2RlZmluZSBXQVNNX1NFQ1RJT05fREVDTEFSRV9QQVJTRVIoTkFN
RSwgSUQsIERFU0NSSVBUSU9OKSBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJz
ZSAjIyBOQU1FKCk7CisgICAgRk9SX0VBQ0hfS05PV05fV0FTTV9TRUNUSU9OKFdBU01fU0VDVElP
Tl9ERUNMQVJFX1BBUlNFUikKKyN1bmRlZiBXQVNNX1NFQ1RJT05fREVDTEFSRV9QQVJTRVIKKwor
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlQ3VzdG9tKCk7CisKK3By
aXZhdGU6CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIC4uLkFyZ3M+CisgICAgTkVWRVJfSU5MSU5F
IFVuZXhwZWN0ZWRSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGZhaWwoQXJncy4uLiBhcmdzKSBj
b25zdAorICAgIHsKKyAgICAgICAgdXNpbmcgbmFtZXNwYWNlIEZhaWx1cmVIZWxwZXI7IC8vIFNl
ZSBBREwgY29tbWVudCBpbiBuYW1lc3BhY2UgYWJvdmUuCisgICAgICAgIHJldHVybiBVbmV4cGVj
dGVkUmVzdWx0KG1ha2VTdHJpbmcoIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0
IGJ5dGUgIl9zLCBTdHJpbmc6Om51bWJlcihtX29mZnNldCArIG1fb2Zmc2V0SW5Tb3VyY2UpLCAi
OiAiX3MsIG1ha2VTdHJpbmcoYXJncykuLi4pKTsKKyAgICB9CisKKyAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUdsb2JhbFR5cGUoR2xvYmFsJik7CisgICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VNZW1vcnlIZWxwZXIoYm9vbCBpc0ltcG9y
dCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VUYWJsZUhlbHBl
cihib29sIGlzSW1wb3J0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBw
YXJzZVJlc2l6YWJsZUxpbWl0cyh1aW50MzJfdCYgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50
MzJfdD4mIG1heGltdW0pOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBh
cnNlSW5pdEV4cHIodWludDhfdCYsIHVpbnQ2NF90JiwgVHlwZSYgaW5pdEV4cHJUeXBlKTsKKwor
ICAgIHNpemVfdCBtX29mZnNldEluU291cmNlOworICAgIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4g
bV9pbmZvOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVO
QUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVN0cmVhbWluZ1BhcnNlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2FiMzUxM2E0NjdjYTUyNDU2NjRlMTY0
ZDM5M2Q1N2UwMGM0N2UyMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwCkBAIC0wLDAgKzEsMzkwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kgPHl1c3VrZXN1enVraUBzbG93c3RhcnQu
b3JnPi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21TdHJlYW1pbmdQYXJzZXIuaCIKKworI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIldhc21Nb2R1bGVQYXJzZXIuaCIKKyNpbmNs
dWRlICJXYXNtU2VjdGlvblBhcnNlci5oIgorI2luY2x1ZGUgPHd0Zi9VbmFsaWduZWRBY2Nlc3Mu
aD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworbmFtZXNwYWNlIFdhc21T
dHJlYW1pbmdQYXJzZXJJbnRlcm5hbCB7CitzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9
IGZhbHNlOworfQorCisjZGVmaW5lIFdBU01fU1RSRUFNSU5HX1BBUlNFUl9GQUlMX0lGX0hFTFBF
Ul9GQUlMUyhoZWxwZXIpIFwKKyAgICBkbyB7IFwKKyAgICAgICAgYXV0byBoZWxwZXJSZXN1bHQg
PSBoZWxwZXI7IFwKKyAgICAgICAgaWYgKFVOTElLRUxZKCFoZWxwZXJSZXN1bHQpKSB7IFwKKyAg
ICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gaGVscGVyUmVzdWx0LmVycm9yKCk7IFwKKyAgICAg
ICAgICAgIHJldHVybiBTdGF0ZTo6RmF0YWxFcnJvcjsgXAorICAgICAgICB9IFwKKyAgICB9IHdo
aWxlICgwKQorCitBTFdBWVNfSU5MSU5FIHN0ZDo6b3B0aW9uYWw8dWludDhfdD4gcGFyc2VVSW50
Nyhjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QmIG9mZnNldCwgc2l6ZV90IHNpemUpCit7Cisg
ICAgaWYgKG9mZnNldCA+PSBzaXplKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgdWludDhf
dCByZXN1bHQgPSBkYXRhW29mZnNldCsrXTsKKyAgICBpZiAocmVzdWx0IDwgMHg4MCkKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgLi4uQXJncz4KK05FVkVSX0lOTElORSBhdXRvIFdBUk5fVU5VU0VEX1JFVFVS
TiBTdHJlYW1pbmdQYXJzZXI6OmZhaWwoQXJncy4uLiBhcmdzKSAtPiBTdGF0ZQoreworICAgIHVz
aW5nIG5hbWVzcGFjZSBGYWlsdXJlSGVscGVyOyAvLyBTZWUgQURMIGNvbW1lbnQgaW4gbmFtZXNw
YWNlIGFib3ZlLgorICAgIG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygiV2ViQXNzZW1ibHku
TW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAiX3MsIFN0cmluZzo6bnVtYmVyKG1fb2Zmc2V0
KSwgIjogIl9zLCBtYWtlU3RyaW5nKGFyZ3MpLi4uKTsKKyAgICBkYXRhTG9nTG5JZihXYXNtU3Ry
ZWFtaW5nUGFyc2VySW50ZXJuYWw6OnZlcmJvc2UsIG1fZXJyb3JNZXNzYWdlKTsKKyAgICByZXR1
cm4gU3RhdGU6OkZhdGFsRXJyb3I7Cit9CisKK1N0cmVhbWluZ1BhcnNlcjo6U3RyZWFtaW5nUGFy
c2VyKE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvKQorICAgIDogbV9pbmZvKGluZm8pCit7CisgICAg
ZGF0YUxvZ0xuSWYoV2FzbVN0cmVhbWluZ1BhcnNlckludGVybmFsOjp2ZXJib3NlLCAic3RhcnRp
bmcgdmFsaWRhdGlvbiIpOworfQorCithdXRvIFN0cmVhbWluZ1BhcnNlcjo6cGFyc2VNb2R1bGVI
ZWFkZXIoVmVjdG9yPHVpbnQ4X3Q+JiYgZGF0YSkgLT4gU3RhdGUKK3sKKyAgICBBU1NFUlQoZGF0
YS5zaXplKCkgPT0gbW9kdWxlSGVhZGVyU2l6ZSk7CisgICAgZGF0YUxvZ0xuSWYoV2FzbVN0cmVh
bWluZ1BhcnNlckludGVybmFsOjp2ZXJib3NlLCAiaGVhZGVyIHZhbGlkYXRpb24iKTsKKyAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKGRhdGFbMF0gIT0gJ1wwJyB8fCBkYXRhWzFdICE9ICdhJyB8fCBk
YXRhWzJdICE9ICdzJyB8fCBkYXRhWzNdICE9ICdtJywgIm1vZHVsZXMgZG9lc24ndCBzdGFydCB3
aXRoICdcXDBhc20nIik7CisgICAgdWludDMyX3QgdmVyc2lvbk51bWJlciA9IFdURjo6dW5hbGln
bmVkTG9hZDx1aW50MzJfdD4oZGF0YS5kYXRhKCkgKyA0KTsKKyAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKHZlcnNpb25OdW1iZXIgIT0gZXhwZWN0ZWRWZXJzaW9uTnVtYmVyLCAidW5leHBlY3RlZCB2
ZXJzaW9uIG51bWJlciAiLCB2ZXJzaW9uTnVtYmVyLCAiIGV4cGVjdGVkICIsIGV4cGVjdGVkVmVy
c2lvbk51bWJlcik7CisgICAgbV92ZXJzaW9uTnVtYmVyID0gdmVyc2lvbk51bWJlcjsKKyAgICBy
ZXR1cm4gU3RhdGU6OlNlY3Rpb25IZWFkZXI7Cit9CisKK2F1dG8gU3RyZWFtaW5nUGFyc2VyOjpw
YXJzZVNlY3Rpb25IZWFkZXIoVmVjdG9yPHVpbnQ4X3Q+JiYgZGF0YSkgLT4gU3RhdGUKK3sKKyAg
ICBBU1NFUlQoZGF0YS5zaXplKCkgPT0gc2VjdGlvbkhlYWRlclNpemUpOworICAgIHNpemVfdCBv
ZmZzZXQgPSAwOworICAgIGF1dG8gcmVzdWx0ID0gcGFyc2VVSW50NyhkYXRhLmRhdGEoKSwgb2Zm
c2V0LCBkYXRhLnNpemUoKSk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcmVzdWx0LCAiY2Fu
J3QgZ2V0IHNlY3Rpb24gYnl0ZSIpOworCisgICAgU2VjdGlvbiBzZWN0aW9uID0gU2VjdGlvbjo6
Q3VzdG9tOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWRlY29kZVNlY3Rpb24oKnJlc3VsdCwg
c2VjdGlvbiksICJpbnZhbGlkIHNlY3Rpb24iKTsKKyAgICBBU1NFUlQoc2VjdGlvbiAhPSBTZWN0
aW9uOjpCZWdpbik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighdmFsaWRhdGVPcmRlcihtX3By
ZXZpb3VzS25vd25TZWN0aW9uLCBzZWN0aW9uKSwgImludmFsaWQgc2VjdGlvbiBvcmRlciwgIiwg
bV9wcmV2aW91c0tub3duU2VjdGlvbiwgIiBmb2xsb3dlZCBieSAiLCBzZWN0aW9uKTsKKyAgICBt
X3NlY3Rpb24gPSBzZWN0aW9uOworICAgIGlmIChpc0tub3duU2VjdGlvbihzZWN0aW9uKSkKKyAg
ICAgICAgbV9wcmV2aW91c0tub3duU2VjdGlvbiA9IHNlY3Rpb247CisgICAgcmV0dXJuIFN0YXRl
OjpTZWN0aW9uU2l6ZTsKK30KKworYXV0byBTdHJlYW1pbmdQYXJzZXI6OnBhcnNlU2VjdGlvblNp
emUodWludDMyX3Qgc2VjdGlvbkxlbmd0aCkgLT4gU3RhdGUKK3sKKyAgICBtX3NlY3Rpb25MZW5n
dGggPSBzZWN0aW9uTGVuZ3RoOworICAgIGlmIChtX3NlY3Rpb24gPT0gU2VjdGlvbjo6Q29kZSkK
KyAgICAgICAgcmV0dXJuIFN0YXRlOjpDb2RlU2VjdGlvblNpemU7CisgICAgcmV0dXJuIFN0YXRl
OjpTZWN0aW9uQm9keTsKK30KKworYXV0byBTdHJlYW1pbmdQYXJzZXI6OnBhcnNlQ29kZVNlY3Rp
b25TaXplKHVpbnQzMl90IGZ1bmN0aW9uQ291bnQpIC0+IFN0YXRlCit7CisgICAgbV9mdW5jdGlv
bkNvdW50ID0gZnVuY3Rpb25Db3VudDsKKyAgICBtX2Z1bmN0aW9uSW5kZXggPSAwOworICAgIG1f
Y29kZU9mZnNldCA9IG1fb2Zmc2V0OworCisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlv
bkNvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwgIkNvZGUgc2Vj
dGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgZnVuY3Rpb25Db3VudCk7CisgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRihmdW5jdGlvbkNvdW50ICE9IG1faW5mby0+ZnVuY3Rpb25zLnNpemUoKSwgIkNv
ZGUgc2VjdGlvbiBjb3VudCAiLCBmdW5jdGlvbkNvdW50LCAiIGV4Y2VlZHMgdGhlIGRlY2xhcmVk
IG51bWJlciBvZiBmdW5jdGlvbnMgIiwgbV9pbmZvLT5mdW5jdGlvbnMuc2l6ZSgpKTsKKworICAg
IGlmIChtX2Z1bmN0aW9uSW5kZXggPT0gbV9mdW5jdGlvbkNvdW50KSB7CisgICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoKG1fY29kZU9mZnNldCArIG1fc2VjdGlvbkxlbmd0aCkgIT0gbV9vZmZz
ZXQsICJwYXJzaW5nIGVuZGVkIGJlZm9yZSB0aGUgZW5kIG9mICIsIG1fc2VjdGlvbiwgIiBzZWN0
aW9uIik7CisgICAgICAgIHJldHVybiBTdGF0ZTo6U2VjdGlvbkhlYWRlcjsKKyAgICB9CisgICAg
cmV0dXJuIFN0YXRlOjpGdW5jdGlvbkhlYWRlcjsKK30KKworYXV0byBTdHJlYW1pbmdQYXJzZXI6
OnBhcnNlRnVuY3Rpb25IZWFkZXIodWludDMyX3QgZnVuY3Rpb25TaXplKSAtPiBTdGF0ZQorewor
ICAgIG1fZnVuY3Rpb25TaXplID0gZnVuY3Rpb25TaXplOworICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoZnVuY3Rpb25TaXplID4gbWF4RnVuY3Rpb25TaXplLCAiQ29kZSBmdW5jdGlvbidzIHNpemUg
IiwgZnVuY3Rpb25TaXplLCAiIGlzIHRvbyBiaWciKTsKKyAgICByZXR1cm4gU3RhdGU6OkZ1bmN0
aW9uQm9keTsKK30KKworYXV0byBTdHJlYW1pbmdQYXJzZXI6OnBhcnNlRnVuY3Rpb25Cb2R5KFZl
Y3Rvcjx1aW50OF90PiYmIGRhdGEpIC0+IFN0YXRlCit7CisgICAgYXV0byYgZnVuY3Rpb24gPSBt
X2luZm8tPmZ1bmN0aW9uc1ttX2Z1bmN0aW9uSW5kZXhdOworICAgIGZ1bmN0aW9uLnN0YXJ0ID0g
bV9vZmZzZXQ7CisgICAgZnVuY3Rpb24uZW5kID0gbV9vZmZzZXQgKyBtX2Z1bmN0aW9uU2l6ZTsK
KyAgICBmdW5jdGlvbi5kYXRhID0gV1RGTW92ZShkYXRhKTsKKyAgICBkYXRhTG9nTG5JZihXYXNt
U3RyZWFtaW5nUGFyc2VySW50ZXJuYWw6OnZlcmJvc2UsICJQcm9jZXNzaW5nIGZ1bmN0aW9uIHN0
YXJ0aW5nIGF0OiAiLCBmdW5jdGlvbi5zdGFydCwgIiBhbmQgZW5kaW5nIGF0OiAiLCBmdW5jdGlv
bi5lbmQpOworICAgICsrbV9mdW5jdGlvbkluZGV4OworICAgIGlmIChtX2Z1bmN0aW9uSW5kZXgg
PT0gbV9mdW5jdGlvbkNvdW50KSB7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoKG1fY29k
ZU9mZnNldCArIG1fc2VjdGlvbkxlbmd0aCkgIT0gKG1fb2Zmc2V0ICsgbV9mdW5jdGlvblNpemUp
LCAicGFyc2luZyBlbmRlZCBiZWZvcmUgdGhlIGVuZCBvZiAiLCBtX3NlY3Rpb24sICIgc2VjdGlv
biIpOworICAgICAgICByZXR1cm4gU3RhdGU6OlNlY3Rpb25IZWFkZXI7CisgICAgfQorICAgIHJl
dHVybiBTdGF0ZTo6RnVuY3Rpb25IZWFkZXI7Cit9CisKK2F1dG8gU3RyZWFtaW5nUGFyc2VyOjpw
YXJzZVNlY3Rpb25Cb2R5KFZlY3Rvcjx1aW50OF90PiYmIGRhdGEpIC0+IFN0YXRlCit7CisgICAg
U2VjdGlvblBhcnNlciBwYXJzZXIoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCBtX29mZnNldCwg
bV9pbmZvLmdldCgpKTsKKyAgICBzd2l0Y2ggKG1fc2VjdGlvbikgeworI2RlZmluZSBXQVNNX1NF
Q1RJT05fUEFSU0UoTkFNRSwgSUQsIERFU0NSSVBUSU9OKSBcCisgICAgY2FzZSBTZWN0aW9uOjpO
QU1FOiB7IFwKKyAgICAgICAgV0FTTV9TVFJFQU1JTkdfUEFSU0VSX0ZBSUxfSUZfSEVMUEVSX0ZB
SUxTKHBhcnNlci5wYXJzZSAjIyBOQU1FKCkpOyBcCisgICAgICAgIGJyZWFrOyBcCisgICAgfQor
ICAgIEZPUl9FQUNIX0tOT1dOX1dBU01fU0VDVElPTihXQVNNX1NFQ1RJT05fUEFSU0UpCisjdW5k
ZWYgV0FTTV9TRUNUSU9OX1BBUlNFCisKKyAgICBjYXNlIFNlY3Rpb246OkN1c3RvbTogeworICAg
ICAgICBXQVNNX1NUUkVBTUlOR19QQVJTRVJfRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VyLnBh
cnNlQ3VzdG9tKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIFNlY3Rpb246
OkJlZ2luOiB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICB9CisKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHBhcnNlci5s
ZW5ndGgoKSAhPSBwYXJzZXIub2Zmc2V0KCksICJwYXJzaW5nIGVuZGVkIGJlZm9yZSB0aGUgZW5k
IG9mICIsIG1fc2VjdGlvbiwgIiBzZWN0aW9uIik7CisKKyAgICByZXR1cm4gU3RhdGU6OlNlY3Rp
b25IZWFkZXI7Cit9CisKK2F1dG8gU3RyZWFtaW5nUGFyc2VyOjpjb25zdW1lKGNvbnN0IHVpbnQ4
X3QqIGJ5dGVzLCBzaXplX3QgYnl0ZXNTaXplLCBzaXplX3QmIG9mZnNldEluQnl0ZXMsIHNpemVf
dCByZXF1aXJlZFNpemUpIC0+IHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PgoreworICAg
IGlmIChtX3JlbWFpbmluZy5zaXplKCkgPT0gcmVxdWlyZWRTaXplKSB7CisgICAgICAgIFZlY3Rv
cjx1aW50OF90PiByZXN1bHQgPSBXVEZNb3ZlKG1fcmVtYWluaW5nKTsKKyAgICAgICAgbV9uZXh0
T2Zmc2V0ICs9IHJlcXVpcmVkU2l6ZTsKKyAgICAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsK
KyAgICB9CisKKyAgICBpZiAobV9yZW1haW5pbmcuc2l6ZSgpID4gcmVxdWlyZWRTaXplKSB7Cisg
ICAgICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQocmVxdWlyZWRTaXplKTsKKyAgICAgICAgbWVt
Y3B5KHJlc3VsdC5kYXRhKCksIG1fcmVtYWluaW5nLmRhdGEoKSwgcmVxdWlyZWRTaXplKTsKKyAg
ICAgICAgbV9yZW1haW5pbmcucmVtb3ZlKDAsIHJlcXVpcmVkU2l6ZSk7CisgICAgICAgIG1fbmV4
dE9mZnNldCArPSByZXF1aXJlZFNpemU7CisgICAgICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7
CisgICAgfQorCisgICAgQVNTRVJUKG1fcmVtYWluaW5nLnNpemUoKSA8IHJlcXVpcmVkU2l6ZSk7
CisgICAgc2l6ZV90IGJ5dGVzUmVtYWluaW5nU2l6ZSA9IGJ5dGVzU2l6ZSAtIG9mZnNldEluQnl0
ZXM7CisgICAgc2l6ZV90IHRvdGFsRGF0YVNpemUgPSBtX3JlbWFpbmluZy5zaXplKCkgKyBieXRl
c1JlbWFpbmluZ1NpemU7CisgICAgaWYgKHRvdGFsRGF0YVNpemUgPCByZXF1aXJlZFNpemUpIHsK
KyAgICAgICAgbV9yZW1haW5pbmcuYXBwZW5kKGJ5dGVzICsgb2Zmc2V0SW5CeXRlcywgYnl0ZXNS
ZW1haW5pbmdTaXplKTsKKyAgICAgICAgb2Zmc2V0SW5CeXRlcyA9IGJ5dGVzU2l6ZTsKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBzaXplX3QgdXNlZFNpemUgPSBy
ZXF1aXJlZFNpemUgLSBtX3JlbWFpbmluZy5zaXplKCk7CisgICAgbV9yZW1haW5pbmcuYXBwZW5k
KGJ5dGVzICsgb2Zmc2V0SW5CeXRlcywgdXNlZFNpemUpOworICAgIG9mZnNldEluQnl0ZXMgKz0g
dXNlZFNpemU7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdCA9IFdURk1vdmUobV9yZW1haW5p
bmcpOworICAgIG1fbmV4dE9mZnNldCArPSByZXF1aXJlZFNpemU7CisgICAgcmV0dXJuIFdURk1v
dmUocmVzdWx0KTsKK30KKworYXV0byBTdHJlYW1pbmdQYXJzZXI6OmNvbnN1bWVWYXJVSW50MzIo
Y29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBieXRlc1NpemUsIHNpemVfdCYgb2Zmc2V0SW5C
eXRlcywgSXNFbmRPZlN0cmVhbSBpc0VuZE9mU3RyZWFtKSAtPiBFeHBlY3RlZDx1aW50MzJfdCwg
U3RhdGU+Cit7CisgICAgY29uc3RleHByIHNpemVfdCBtYXhTaXplID0gV1RGOjpMRUJEZWNvZGVy
OjptYXhCeXRlTGVuZ3RoPHVpbnQzMl90PigpOworICAgIHNpemVfdCBieXRlc1JlbWFpbmluZ1Np
emUgPSBieXRlc1NpemUgLSBvZmZzZXRJbkJ5dGVzOworICAgIHNpemVfdCB0b3RhbERhdGFTaXpl
ID0gbV9yZW1haW5pbmcuc2l6ZSgpICsgYnl0ZXNSZW1haW5pbmdTaXplOworICAgIGlmIChtX3Jl
bWFpbmluZy5zaXplKCkgPj0gbWF4U2l6ZSkgeworICAgICAgICAvLyBEbyBub3RoaW5nLgorICAg
IH0gZWxzZSBpZiAodG90YWxEYXRhU2l6ZSA+PSBtYXhTaXplKSB7CisgICAgICAgIHNpemVfdCB1
c2VkU2l6ZSA9IG1heFNpemUgLSBtX3JlbWFpbmluZy5zaXplKCk7CisgICAgICAgIG1fcmVtYWlu
aW5nLmFwcGVuZChieXRlcyArIG9mZnNldEluQnl0ZXMsIHVzZWRTaXplKTsKKyAgICAgICAgb2Zm
c2V0SW5CeXRlcyArPSB1c2VkU2l6ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX3JlbWFpbmlu
Zy5hcHBlbmQoYnl0ZXMgKyBvZmZzZXRJbkJ5dGVzLCBieXRlc1JlbWFpbmluZ1NpemUpOworICAg
ICAgICBvZmZzZXRJbkJ5dGVzICs9IGJ5dGVzUmVtYWluaW5nU2l6ZTsKKyAgICAgICAgaWYgKGlz
RW5kT2ZTdHJlYW0gPT0gSXNFbmRPZlN0cmVhbTo6Tm8pCisgICAgICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQobV9zdGF0ZSk7CisgICAgfQorCisgICAgc2l6ZV90IG9mZnNldCA9IDA7Cisg
ICAgdWludDMyX3QgcmVzdWx0ID0gMDsKKyAgICBpZiAoIVdURjo6TEVCRGVjb2Rlcjo6ZGVjb2Rl
VUludDMyKG1fcmVtYWluaW5nLmRhdGEoKSwgbV9yZW1haW5pbmcuc2l6ZSgpLCBvZmZzZXQsIHJl
c3VsdCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChTdGF0ZTo6RmF0YWxFcnJvcik7
CisgICAgc2l6ZV90IGNvbnN1bWVkU2l6ZSA9IG9mZnNldDsKKyAgICBtX3JlbWFpbmluZy5yZW1v
dmUoMCwgY29uc3VtZWRTaXplKTsKKyAgICBtX25leHRPZmZzZXQgKz0gY29uc3VtZWRTaXplOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2F1dG8gU3RyZWFtaW5nUGFyc2VyOjphZGRCeXRlcyhj
b25zdCB1aW50OF90KiBieXRlcywgc2l6ZV90IGJ5dGVzU2l6ZSwgSXNFbmRPZlN0cmVhbSBpc0Vu
ZE9mU3RyZWFtKSAtPiBTdGF0ZQoreworICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpGYXRhbEVy
cm9yKQorICAgICAgICByZXR1cm4gbV9zdGF0ZTsKKworICAgIG1fdG90YWxTaXplICs9IGJ5dGVz
U2l6ZTsKKyAgICBpZiAoVU5MSUtFTFkobV90b3RhbFNpemUuaGFzT3ZlcmZsb3dlZCgpIHx8IG1f
dG90YWxTaXplLnVuc2FmZUdldCgpID4gbWF4TW9kdWxlU2l6ZSkpIHsKKyAgICAgICAgbV9zdGF0
ZSA9IGZhaWwoIm1vZHVsZSBzaXplIGlzIHRvbyBsYXJnZSwgbWF4aW11bSAiLCBtYXhNb2R1bGVT
aXplKTsKKyAgICAgICAgcmV0dXJuIG1fc3RhdGU7CisgICAgfQorCisgICAgaWYgKE9wdGlvbnM6
OnVzZUVhZ2VyV2ViQXNzZW1ibHlNb2R1bGVIYXNoaW5nKCkpCisgICAgICAgIG1faGFzaGVyLmFk
ZEJ5dGVzKGJ5dGVzLCBieXRlc1NpemUpOworCisgICAgc2l6ZV90IG9mZnNldEluQnl0ZXMgPSAw
OworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgICAg
ICBjYXNlIFN0YXRlOjpNb2R1bGVIZWFkZXI6IHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0g
Y29uc3VtZShieXRlcywgYnl0ZXNTaXplLCBvZmZzZXRJbkJ5dGVzLCBtb2R1bGVIZWFkZXJTaXpl
KTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgICAgIHJldHVybiBtX3N0
YXRlOworICAgICAgICAgICAgbV9zdGF0ZSA9IHBhcnNlTW9kdWxlSGVhZGVyKFdURk1vdmUoKnJl
c3VsdCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFN0
YXRlOjpTZWN0aW9uSGVhZGVyOiB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGNvbnN1bWUo
Ynl0ZXMsIGJ5dGVzU2l6ZSwgb2Zmc2V0SW5CeXRlcywgc2VjdGlvbkhlYWRlclNpemUpOworICAg
ICAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fc3RhdGU7Cisg
ICAgICAgICAgICBtX3N0YXRlID0gcGFyc2VTZWN0aW9uSGVhZGVyKFdURk1vdmUoKnJlc3VsdCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFN0YXRlOjpT
ZWN0aW9uU2l6ZTogeworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBjb25zdW1lVmFyVUludDMy
KGJ5dGVzLCBieXRlc1NpemUsIG9mZnNldEluQnl0ZXMsIGlzRW5kT2ZTdHJlYW0pOworICAgICAg
ICAgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmVycm9yKCkg
PT0gU3RhdGU6OkZhdGFsRXJyb3IpCisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBmYWls
T25TdGF0ZShtX3N0YXRlKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIG1fc3RhdGUgPSByZXN1bHQuZXJyb3IoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9z
dGF0ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fc3RhdGUgPSBwYXJzZVNlY3Rpb25T
aXplKCpyZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBj
YXNlIFN0YXRlOjpTZWN0aW9uQm9keTogeworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBjb25z
dW1lKGJ5dGVzLCBieXRlc1NpemUsIG9mZnNldEluQnl0ZXMsIG1fc2VjdGlvbkxlbmd0aCk7Cisg
ICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9zdGF0ZTsK
KyAgICAgICAgICAgIG1fc3RhdGUgPSBwYXJzZVNlY3Rpb25Cb2R5KFdURk1vdmUoKnJlc3VsdCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFN0YXRlOjpD
b2RlU2VjdGlvblNpemU6IHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gY29uc3VtZVZhclVJ
bnQzMihieXRlcywgYnl0ZXNTaXplLCBvZmZzZXRJbkJ5dGVzLCBpc0VuZE9mU3RyZWFtKTsKKyAg
ICAgICAgICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5lcnJv
cigpID09IFN0YXRlOjpGYXRhbEVycm9yKQorICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0g
ZmFpbE9uU3RhdGUobV9zdGF0ZSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICBtX3N0YXRlID0gcmVzdWx0LmVycm9yKCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IG1fc3RhdGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX3N0YXRlID0gcGFyc2VDb2Rl
U2VjdGlvblNpemUoKnJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg
ICAgICAgIGNhc2UgU3RhdGU6OkZ1bmN0aW9uSGVhZGVyOiB7CisgICAgICAgICAgICBhdXRvIHJl
c3VsdCA9IGNvbnN1bWVWYXJVSW50MzIoYnl0ZXMsIGJ5dGVzU2l6ZSwgb2Zmc2V0SW5CeXRlcywg
aXNFbmRPZlN0cmVhbSk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICAgICAg
ICAgIGlmIChyZXN1bHQuZXJyb3IoKSA9PSBTdGF0ZTo6RmF0YWxFcnJvcikKKyAgICAgICAgICAg
ICAgICAgICAgbV9zdGF0ZSA9IGZhaWxPblN0YXRlKG1fc3RhdGUpOworICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IHJlc3VsdC5lcnJvcigpOworICAg
ICAgICAgICAgICAgIHJldHVybiBtX3N0YXRlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
bV9zdGF0ZSA9IHBhcnNlRnVuY3Rpb25IZWFkZXIoKnJlc3VsdCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgU3RhdGU6OkZ1bmN0aW9uQm9keTogeworICAg
ICAgICAgICAgYXV0byByZXN1bHQgPSBjb25zdW1lKGJ5dGVzLCBieXRlc1NpemUsIG9mZnNldElu
Qnl0ZXMsIG1fZnVuY3Rpb25TaXplKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAg
ICAgICAgICAgIHJldHVybiBtX3N0YXRlOworICAgICAgICAgICAgbV9zdGF0ZSA9IHBhcnNlRnVu
Y3Rpb25Cb2R5KFdURk1vdmUoKnJlc3VsdCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBjYXNlIFN0YXRlOjpGaW5pc2hlZDoKKyAgICAgICAgY2FzZSBTdGF0ZTo6
RmF0YWxFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBtX3N0YXRlOworICAgICAgICB9CisKKyAg
ICAgICAgbV9vZmZzZXQgPSBtX25leHRPZmZzZXQ7CisgICAgfQorfQorCithdXRvIFN0cmVhbWlu
Z1BhcnNlcjo6ZmFpbE9uU3RhdGUoU3RhdGUpIC0+IFN0YXRlCit7CisgICAgc3dpdGNoIChtX3N0
YXRlKSB7CisgICAgY2FzZSBTdGF0ZTo6TW9kdWxlSGVhZGVyOgorICAgICAgICByZXR1cm4gZmFp
bCgiZXhwZWN0ZWQgYSBtb2R1bGUgb2YgYXQgbGVhc3QgIiwgbW9kdWxlSGVhZGVyU2l6ZSwgIiBi
eXRlcyIpOworICAgIGNhc2UgU3RhdGU6OlNlY3Rpb25IZWFkZXI6CisgICAgICAgIHJldHVybiBm
YWlsKCJjYW4ndCBnZXQgc2VjdGlvbiBieXRlIik7CisgICAgY2FzZSBTdGF0ZTo6U2VjdGlvblNp
emU6CisgICAgICAgIHJldHVybiBmYWlsKCJjYW4ndCBnZXQgIiwgbV9zZWN0aW9uLCAiIHNlY3Rp
b24ncyBsZW5ndGgiKTsKKyAgICBjYXNlIFN0YXRlOjpTZWN0aW9uQm9keToKKyAgICAgICAgcmV0
dXJuIGZhaWwobV9zZWN0aW9uLCAiIHNlY3Rpb24gb2Ygc2l6ZSAiLCBtX3NlY3Rpb25MZW5ndGgs
ICIgd291bGQgb3ZlcmZsb3cgTW9kdWxlJ3Mgc2l6ZSIpOworICAgIGNhc2UgU3RhdGU6OkNvZGVT
ZWN0aW9uU2l6ZToKKyAgICAgICAgcmV0dXJuIGZhaWwoImNhbid0IGdldCBDb2RlIHNlY3Rpb24n
cyBjb3VudCIpOworICAgIGNhc2UgU3RhdGU6OkZ1bmN0aW9uSGVhZGVyOgorICAgICAgICByZXR1
cm4gZmFpbCgiY2FuJ3QgZ2V0ICIsIG1fZnVuY3Rpb25JbmRleCwgInRoIENvZGUgZnVuY3Rpb24n
cyBzaXplIik7CisgICAgY2FzZSBTdGF0ZTo6RnVuY3Rpb25Cb2R5OgorICAgICAgICByZXR1cm4g
ZmFpbCgiQ29kZSBmdW5jdGlvbidzIHNpemUgIiwgbV9mdW5jdGlvblNpemUsICIgZXhjZWVkcyB0
aGUgbW9kdWxlJ3MgcmVtYWluaW5nIHNpemUiKTsKKyAgICBjYXNlIFN0YXRlOjpGaW5pc2hlZDoK
KyAgICBjYXNlIFN0YXRlOjpGYXRhbEVycm9yOgorICAgICAgICByZXR1cm4gbV9zdGF0ZTsKKyAg
ICB9CisgICAgcmV0dXJuIG1fc3RhdGU7Cit9CisKK2F1dG8gU3RyZWFtaW5nUGFyc2VyOjpmaW5h
bGl6ZSgpIC0+IFN0YXRlCit7CisgICAgYWRkQnl0ZXMobnVsbHB0ciwgMCwgSXNFbmRPZlN0cmVh
bTo6WWVzKTsKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIFN0YXRlOjpNb2R1bGVI
ZWFkZXI6CisgICAgY2FzZSBTdGF0ZTo6U2VjdGlvblNpemU6CisgICAgY2FzZSBTdGF0ZTo6U2Vj
dGlvbkJvZHk6CisgICAgY2FzZSBTdGF0ZTo6Q29kZVNlY3Rpb25TaXplOgorICAgIGNhc2UgU3Rh
dGU6OkZ1bmN0aW9uSGVhZGVyOgorICAgIGNhc2UgU3RhdGU6OkZ1bmN0aW9uQm9keToKKyAgICAg
ICAgbV9zdGF0ZSA9IGZhaWxPblN0YXRlKG1fc3RhdGUpOworICAgICAgICBicmVhazsKKworICAg
IGNhc2UgU3RhdGU6OkZpbmlzaGVkOgorICAgIGNhc2UgU3RhdGU6OkZhdGFsRXJyb3I6CisgICAg
ICAgIGJyZWFrOworCisgICAgY2FzZSBTdGF0ZTo6U2VjdGlvbkhlYWRlcjoKKyAgICAgICAgaWYg
KG1fcmVtYWluaW5nLnNpemUoKSA9PSAwKSB7CisgICAgICAgICAgICBpZiAoT3B0aW9uczo6dXNl
RWFnZXJXZWJBc3NlbWJseU1vZHVsZUhhc2hpbmcoKSkKKyAgICAgICAgICAgICAgICBtX2luZm8t
Pm5hbWVTZWN0aW9uLT5zZXRIYXNoKG1faGFzaGVyLmNvbXB1dGVIZXhEaWdlc3QoKSk7CisgICAg
ICAgICAgICBtX3N0YXRlID0gU3RhdGU6OkZpbmlzaGVkOworICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIG1fc3RhdGUgPSBmYWlsT25TdGF0ZShTdGF0ZTo6U2VjdGlvbkhlYWRlcik7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gbV9zdGF0ZTsKK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5lMGNkMTA3NzNiMmMwN2M5YzUyZDU5OTcyOTZkMDQ2MGMxNzY4YzA0Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5oCkBA
IC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kg
PHl1c3VrZXN1enVraUBzbG93c3RhcnQub3JnPi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkp
CisKKyNpbmNsdWRlICJXYXNtTW9kdWxlSW5mb3JtYXRpb24uaCIKKyNpbmNsdWRlICJXYXNtUGFy
c2VyLmgiCisjaW5jbHVkZSAiV2FzbVNlY3Rpb25zLmgiCisjaW5jbHVkZSA8d3RmL0V4cGVjdGVk
Lmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1NIQTEuaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK2NsYXNzIFN0cmVhbWluZ1BhcnNl
ckNsaWVudCB7Cit9OworCitjbGFzcyBTdHJlYW1pbmdQYXJzZXIgeworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGVudW0gY2xhc3MgU3RhdGUgOiB1aW50OF90IHsK
KyAgICAgICAgTW9kdWxlSGVhZGVyLAorICAgICAgICBTZWN0aW9uSGVhZGVyLAorICAgICAgICBT
ZWN0aW9uU2l6ZSwKKyAgICAgICAgU2VjdGlvbkJvZHksCisgICAgICAgIENvZGVTZWN0aW9uU2l6
ZSwKKyAgICAgICAgRnVuY3Rpb25IZWFkZXIsCisgICAgICAgIEZ1bmN0aW9uQm9keSwKKyAgICAg
ICAgRmluaXNoZWQsCisgICAgICAgIEZhdGFsRXJyb3IsCisgICAgfTsKKworICAgIGVudW0gY2xh
c3MgSXNFbmRPZlN0cmVhbSB7IFllcywgTm8gfTsKKworICAgIFN0cmVhbWluZ1BhcnNlcihNb2R1
bGVJbmZvcm1hdGlvbiYpOworCisgICAgU3RhdGUgYWRkQnl0ZXMoY29uc3QgdWludDhfdCogYnl0
ZXMsIHNpemVfdCBsZW5ndGgpIHsgcmV0dXJuIGFkZEJ5dGVzKGJ5dGVzLCBsZW5ndGgsIElzRW5k
T2ZTdHJlYW06Ok5vKTsgfQorICAgIFN0YXRlIGZpbmFsaXplKCk7CisKKyAgICBjb25zdCBTdHJp
bmcmIGVycm9yTWVzc2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXJyb3JNZXNzYWdlOyB9CisKK3By
aXZhdGU6CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtb2R1bGVIZWFkZXJTaXplID0g
ODsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNlY3Rpb25IZWFkZXJTaXplID0gMTsK
KworICAgIFN0YXRlIGFkZEJ5dGVzKGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3QgbGVuZ3Ro
LCBJc0VuZE9mU3RyZWFtKTsKKworICAgIFN0YXRlIHBhcnNlTW9kdWxlSGVhZGVyKFZlY3Rvcjx1
aW50OF90PiYmKTsKKyAgICBTdGF0ZSBwYXJzZVNlY3Rpb25IZWFkZXIoVmVjdG9yPHVpbnQ4X3Q+
JiYpOworICAgIFN0YXRlIHBhcnNlU2VjdGlvblNpemUodWludDMyX3QpOworICAgIFN0YXRlIHBh
cnNlU2VjdGlvbkJvZHkoVmVjdG9yPHVpbnQ4X3Q+JiYpOworCisgICAgU3RhdGUgcGFyc2VDb2Rl
U2VjdGlvblNpemUodWludDMyX3QpOworICAgIFN0YXRlIHBhcnNlRnVuY3Rpb25IZWFkZXIodWlu
dDMyX3QpOworICAgIFN0YXRlIHBhcnNlRnVuY3Rpb25Cb2R5KFZlY3Rvcjx1aW50OF90PiYmKTsK
KworICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBjb25zdW1lKGNvbnN0IHVpbnQ4
X3QqIGJ5dGVzLCBzaXplX3QsIHNpemVfdCYsIHNpemVfdCk7CisgICAgRXhwZWN0ZWQ8dWludDMy
X3QsIFN0YXRlPiBjb25zdW1lVmFyVUludDMyKGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3Qs
IHNpemVfdCYsIElzRW5kT2ZTdHJlYW0pOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIC4uLkFy
Z3M+IE5FVkVSX0lOTElORSBTdGF0ZSBXQVJOX1VOVVNFRF9SRVRVUk4gZmFpbChBcmdzLi4uKTsK
KworICAgIFN0YXRlIGZhaWxPblN0YXRlKFN0YXRlKTsKKworICAgIFJlZjxNb2R1bGVJbmZvcm1h
dGlvbj4gbV9pbmZvOworICAgIFZlY3Rvcjx1aW50OF90PiBtX3JlbWFpbmluZzsKKyAgICBTdHJp
bmcgbV9lcnJvck1lc3NhZ2U7CisKKyAgICBDaGVja2VkU2l6ZSBtX3RvdGFsU2l6ZSB7IDAgfTsK
KyAgICBzaXplX3QgbV9vZmZzZXQgeyAwIH07CisgICAgc2l6ZV90IG1fbmV4dE9mZnNldCB7IDAg
fTsKKyAgICBzaXplX3QgbV9jb2RlT2Zmc2V0IHsgMCB9OworCisgICAgU0hBMSBtX2hhc2hlcjsK
KworICAgIHVpbnQzMl90IG1fdmVyc2lvbk51bWJlciB7IDAgfTsKKyAgICB1aW50MzJfdCBtX3Nl
Y3Rpb25MZW5ndGggeyAwIH07CisKKyAgICB1aW50MzJfdCBtX2Z1bmN0aW9uQ291bnQgeyAwIH07
CisgICAgdWludDMyX3QgbV9mdW5jdGlvbkluZGV4IHsgMCB9OworCisgICAgdWludDMyX3QgbV9m
dW5jdGlvblNpemUgeyAwIH07CisKKyAgICBTdGF0ZSBtX3N0YXRlIHsgU3RhdGU6Ok1vZHVsZUhl
YWRlciB9OworICAgIFNlY3Rpb24gbV9zZWN0aW9uIHsgU2VjdGlvbjo6QmVnaW4gfTsKKyAgICBT
ZWN0aW9uIG1fcHJldmlvdXNLbm93blNlY3Rpb24geyBTZWN0aW9uOjpCZWdpbiB9OworfTsKKwor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VN
QkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseU1vZHVsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5TW9kdWxlLmNwcAppbmRleCAyM2ZlZjIyZTU4YmVlMWVmY2MwMjliYjc2OGUwNTIyNmE5MjAz
NmJlLi5hZWJjZTBjNDEwODM5MWQ2MWYxYTkyY2RmMjU5MDZkNGUxYmE4MjRiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNw
cApAQCAtMTQwLDExICsxNDAsNiBAQCB2b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICAgICAgdmlzaXRv
ci5hcHBlbmQodGhpc09iamVjdC0+bV9jb2RlQmxvY2tzW2ldKTsKIH0KIAotY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpzb3VyY2UoKSBjb25zdAotewotICAgIHJl
dHVybiBtb2R1bGVJbmZvcm1hdGlvbigpLnNvdXJjZTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlND
CiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKaW5kZXggMTdiZWQ2MTI1ZjRl
N2YzMTlhOGI3YWYyZTFkZGY4NjRhZWIyZmE1YS4uZDM5MzAwNjkxOWQyN2FkMTc0NjlmZTI2OTVk
Yjg0Mzg0MjNkMDgyZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseU1vZHVsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlNb2R1bGUuaApAQCAtNjgsOCArNjgsNiBAQCBjbGFzcyBKU1dlYkFzc2Vt
Ymx5TW9kdWxlIGZpbmFsIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKICAgICBKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2soV2FzbTo6TWVtb3J5TW9kZSBtb2RlKTsKICAg
ICB2b2lkIHNldENvZGVCbG9jayhWTSYsIFdhc206Ok1lbW9yeU1vZGUsIEpTV2ViQXNzZW1ibHlD
b2RlQmxvY2sqKTsKIAotICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgc291cmNlKCkgY29uc3Q7
Ci0KICAgICBKU19FWFBPUlRfUFJJVkFURSBXYXNtOjpNb2R1bGUmIG1vZHVsZSgpOwogCiBwcml2
YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlQcm90b3R5cGUuY3BwCmluZGV4IDk2ZDRjMTRkNzRjN2VlMWFmOGFlZTc2MTBjNDk0YWE3Yzk0
YjA2YzUuLmRjYWRjMGQwZGJjZTVhOWQyNTUzYTRkYmRjOGNlNGI0ZmNjNWQ0NTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5UHJvdG90eXBlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVByb3RvdHlw
ZS5jcHAKQEAgLTI5NCwxMCArMjk0LDEwIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHdlYkFzc2VtYmx5VmFsaWRhdGVGdW5jKEV4ZWNTdGF0ZSogZXhlYykKICAgICBzaXpl
X3QgYnl0ZVNpemU7CiAgICAgc3RkOjp0aWUoYmFzZSwgYnl0ZVNpemUpID0gZ2V0V2FzbUJ1ZmZl
ckZyb21WYWx1ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgQkJRUGxhbiBwbGFuKCZ2bS53YXNt
Q29udGV4dCwgYmFzZSwgYnl0ZVNpemUsIEJCUVBsYW46OlZhbGlkYXRpb24sIFBsYW46OmRvbnRG
aW5hbGl6ZSgpKTsKKyAgICBCQlFQbGFuIHBsYW4oJnZtLndhc21Db250ZXh0LCBCQlFQbGFuOjpW
YWxpZGF0aW9uLCBQbGFuOjpkb250RmluYWxpemUoKSk7CiAgICAgLy8gRklYTUU6IFdlIG1pZ2h0
IHdhbnQgdG8gdGhyb3cgYW4gT09NIGV4Y2VwdGlvbiBoZXJlIGlmIHdlIGRldGVjdCB0aGF0IHNv
bWV0aGluZyB3aWxsIE9PTS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY2MDE1Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ocGxh
bi5wYXJzZUFuZFZhbGlkYXRlTW9kdWxlKCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzQm9vbGVhbihwbGFuLnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoYmFzZSwgYnl0ZVNpemUpKSk7
CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlDb21waWxlU3Ry
ZWFtaW5nSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvTEVCRGVjb2Rlci5oIGIvU291cmNlL1dURi93dGYvTEVCRGVjb2Rlci5oCmluZGV4IDk0NjI3
NzBjNjk5Y2QwNWVhNjU3M2UzZWQ5YzFjOTc1YThiNTE1MDcuLjk5YTVjMDlhZDRhNTQxOGM4MGQw
MTM3YjEwZTAwZDBiNDI2YzA4ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0xFQkRlY29k
ZXIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9MRUJEZWNvZGVyLmgKQEAgLTM2LDE1ICszNiwyMCBA
QAogbmFtZXNwYWNlIFdURiB7IG5hbWVzcGFjZSBMRUJEZWNvZGVyIHsKIAogdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KLWlubGluZSBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBkZWNvZGVVSW50KGNvbnN0
IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBzaXplX3QmIG9mZnNldCwgVCYgcmVzdWx0
KQoraW5saW5lIGNvbnN0ZXhwciBzaXplX3QgbWF4Qnl0ZUxlbmd0aCgpCiB7CiAgICAgY29uc3Qg
c2l6ZV90IG51bUJpdHMgPSBzaXplb2YoVCkgKiBDSEFSX0JJVDsKLSAgICBjb25zdCBzaXplX3Qg
bWF4Qnl0ZUxlbmd0aCA9IChudW1CaXRzIC0gMSkgLyA3ICsgMTsgLy8gbnVtQml0cyAvIDcgcm91
bmRpbmcgdXAuCisgICAgcmV0dXJuIChudW1CaXRzIC0gMSkgLyA3ICsgMTsgLy8gbnVtQml0cyAv
IDcgcm91bmRpbmcgdXAuCit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUgYm9vbCBX
QVJOX1VOVVNFRF9SRVRVUk4gZGVjb2RlVUludChjb25zdCB1aW50OF90KiBieXRlcywgc2l6ZV90
IGxlbmd0aCwgc2l6ZV90JiBvZmZzZXQsIFQmIHJlc3VsdCkKK3sKICAgICBpZiAobGVuZ3RoIDw9
IG9mZnNldCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJlc3VsdCA9IDA7CiAgICAgdW5z
aWduZWQgc2hpZnQgPSAwOwotICAgIHNpemVfdCBsYXN0ID0gc3RkOjptaW4obWF4Qnl0ZUxlbmd0
aCwgbGVuZ3RoIC0gb2Zmc2V0KSAtIDE7CisgICAgc2l6ZV90IGxhc3QgPSBzdGQ6Om1pbihtYXhC
eXRlTGVuZ3RoPFQ+KCksIGxlbmd0aCAtIG9mZnNldCkgLSAxOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IHRydWU7ICsraSkgewogICAgICAgICB1aW50OF90IGJ5dGUgPSBieXRlc1tvZmZzZXQr
K107CiAgICAgICAgIHJlc3VsdCB8PSBzdGF0aWNfY2FzdDxUPihieXRlICYgMHg3ZikgPDwgc2hp
ZnQ7CkBAIC02MSwxMyArNjYsMTEgQEAgaW5saW5lIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGRl
Y29kZVVJbnQoY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIHMKIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CiBpbmxpbmUgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gZGVjb2RlSW50KGNv
bnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBzaXplX3QmIG9mZnNldCwgVCYgcmVz
dWx0KQogewotICAgIGNvbnN0IHNpemVfdCBudW1CaXRzID0gc2l6ZW9mKFQpICogQ0hBUl9CSVQ7
Ci0gICAgY29uc3Qgc2l6ZV90IG1heEJ5dGVMZW5ndGggPSAobnVtQml0cyAtIDEpIC8gNyArIDE7
IC8vIG51bUJpdHMgLyA3IHJvdW5kaW5nIHVwLgogICAgIGlmIChsZW5ndGggPD0gb2Zmc2V0KQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmVzdWx0ID0gMDsKICAgICB1bnNpZ25lZCBzaGlm
dCA9IDA7Ci0gICAgc2l6ZV90IGxhc3QgPSBzdGQ6Om1pbihtYXhCeXRlTGVuZ3RoLCBsZW5ndGgg
LSBvZmZzZXQpIC0gMTsKKyAgICBzaXplX3QgbGFzdCA9IHN0ZDo6bWluKG1heEJ5dGVMZW5ndGg8
VD4oKSwgbGVuZ3RoIC0gb2Zmc2V0KSAtIDE7CiAgICAgdWludDhfdCBieXRlOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IHRydWU7ICsraSkgewogICAgICAgICBieXRlID0gYnl0ZXNbb2Zmc2V0
KytdOwpAQCAtODAsNiArODMsNyBAQCBpbmxpbmUgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gZGVj
b2RlSW50KGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBzaQogICAgIH0KIAog
ICAgIHVzaW5nIFVuc2lnbmVkVCA9IHR5cGVuYW1lIHN0ZDo6bWFrZV91bnNpZ25lZDxUPjo6dHlw
ZTsKKyAgICBjb25zdCBzaXplX3QgbnVtQml0cyA9IHNpemVvZihUKSAqIENIQVJfQklUOwogICAg
IGlmIChzaGlmdCA8IG51bUJpdHMgJiYgKGJ5dGUgJiAweDQwKSkKICAgICAgICAgcmVzdWx0ID0g
c3RhdGljX2Nhc3Q8VD4oc3RhdGljX2Nhc3Q8VW5zaWduZWRUPihyZXN1bHQpIHwgKHN0YXRpY19j
YXN0PFVuc2lnbmVkVD4oLTEpIDw8IHNoaWZ0KSk7CiAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1n
aXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDQ3MTAwZGI3
MDcwNGYwZDQ2NjQ2OGY4NGE2NzMxZjY0MjlhYmEzNGUuLjk0MjAzODE4YjQwNjRmMTM1ZmQ2NDVk
Mjk0OTZiMjRlNjdiZGFjMjUgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pT
VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIgQEAKKzIwMTgtMDgtMjcgIFl1c3VrZSBTdXp1
a2kgIDx5dXN1a2VzdXp1a2lAc2xvd3N0YXJ0Lm9yZz4KKworICAgICAgICBbV2ViQXNzZW1ibHld
IFBhcnNlIHdhc20gbW9kdWxlcyBpbiBhIHN0cmVhbWluZyBmYXNoaW9uCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODg5NDMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXYXNtIHBhcnNpbmcgZXJyb3Igc2hv
dWxkIG5vdCByZXBvcnQgdGhlIHRvdGFsIGJ5dGUgc2l6ZSBzaW5jZSBzdHJlYW1pbmcgcGFyc2lu
ZyBkb2VzIG5vdAorICAgICAgICB3YW50IHRvIGxvYWQgYWxsIHRoZSBieXRlcy4KKyAgICAgICAg
QWRkIGEgc2ltcGxlIHRlc3Qgd2FzbS9zdHJlc3Mvc3RyZWFtaW5nLWJhc2ljLmpzIGZvciBpbml0
aWFsIHN0cmVhbWluZyBwYXJzaW5nIGltcGxlbWVudGF0aW9uLgorCisgICAgICAgICogd2FzbS9m
dW5jdGlvbi10ZXN0cy9pbnZhbGlkLWR1cGxpY2F0ZS1leHBvcnQuanM6CisgICAgICAgICogd2Fz
bS9mdW5jdGlvbi10ZXN0cy9tZW1vcnktYWxpZ25tZW50LmpzOgorICAgICAgICAoY29uc3Qub3Au
b2YuV0FTTS5vcGNvZGVzKToKKyAgICAgICAgKiB3YXNtL2Z1bmN0aW9uLXRlc3RzL21lbW9yeS1z
ZWN0aW9uLWFuZC1pbXBvcnQuanM6CisgICAgICAgICogd2FzbS9mdW5jdGlvbi10ZXN0cy92b2lk
LWFyZ3VtZW50LXR5cGUtc2hvdWxkLWJlLWEtdmFsaWRhdGlvbi1lcnJvci5qczoKKyAgICAgICAg
KiB3YXNtL2pzLWFwaS9Nb2R1bGUtY29tcGlsZS5qczoKKyAgICAgICAgKGFzeW5jLnRlc3RQcm9t
aXNlQVBJKToKKyAgICAgICAgKiB3YXNtL2pzLWFwaS9lbGVtZW50LmpzOgorICAgICAgICAoYXNz
ZXJ0LnRocm93cy5uZXcuV2ViQXNzZW1ibHkuTW9kdWxlLmJ1aWxkZXIuV2ViQXNzZW1ibHkpOgor
ICAgICAgICAoYXNzZXJ0LnRocm93cyk6CisgICAgICAgICogd2FzbS9qcy1hcGkvZ2xvYmFsLWVy
cm9yLmpzOgorICAgICAgICAoYXNzZXJ0LnRocm93cy5uZXcuV2ViQXNzZW1ibHkuTW9kdWxlLmJp
bik6CisgICAgICAgIChhc3NlcnQudGhyb3dzKToKKyAgICAgICAgKiB3YXNtL2pzLWFwaS90YWJs
ZS5qczoKKyAgICAgICAgKG5ldy5XZWJBc3NlbWJseS5Nb2R1bGUpOgorICAgICAgICAoYXNzZXJ0
LnRocm93cyk6CisgICAgICAgIChhc3NlcnRCYWRUYWJsZUltcG9ydCk6CisgICAgICAgICogd2Fz
bS9qcy1hcGkvdGVzdF9EYXRhLmpzOgorICAgICAgICAoRGF0YVNlY3Rpb25XaXRob3V0TWVtb3J5
KToKKyAgICAgICAgKiB3YXNtL2pzLWFwaS90ZXN0X1N0YXJ0LmpzOgorICAgICAgICAoSW52YWxp
ZFN0YXJ0RnVuY3Rpb25JbmRleCk6CisgICAgICAgICogd2FzbS9qcy1hcGkvdGVzdF9iYXNpY19h
cGkuanM6CisgICAgICAgIChjb25zdC5jLmluLmNvbnN0cnVjdG9yUHJvcGVydGllcy5zd2l0Y2gp
OgorICAgICAgICAqIHdhc20vanMtYXBpL3ZlcnNpb24uanM6CisgICAgICAgICogd2FzbS9zdHJl
c3MvbmFtZVNlY3Rpb24ud2FzbTogQWRkZWQuCisgICAgICAgICogd2FzbS9zdHJlc3Mvc3RyZWFt
aW5nLWJhc2ljLmpzOiBBZGRlZC4KKyAgICAgICAgKGNoZWNrKToKKwogMjAxOC0wOC0yNCAgWXVz
dWtlIFN1enVraSAgPHl1c3VrZXN1enVraUBzbG93c3RhcnQub3JnPgogCiAgICAgICAgIFtKU0Nd
IEFycmF5LnByb3RvdHlwZS5yZXZlcnNlIG1vZGlmaWVzIEpTSW1tdXRhYmxlQnV0dGVyZmx5CmRp
ZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvaW52YWxpZC1kdXBsaWNhdGUt
ZXhwb3J0LmpzIGIvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL2ludmFsaWQtZHVwbGljYXRl
LWV4cG9ydC5qcwppbmRleCBjNDdiMWUxNjYyYzJjYjYwYzkzZDZjOWI5NTczOWJkYWJhNzgwZTcz
Li40MThkNTFhYTQ5OTAxOWFhMjQ2OWJhYTVmMWZkOGUxYWJkM2JmMjkxIDEwMDY0NAotLS0gYS9K
U1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvaW52YWxpZC1kdXBsaWNhdGUtZXhwb3J0LmpzCisr
KyBiL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9pbnZhbGlkLWR1cGxpY2F0ZS1leHBvcnQu
anMKQEAgLTE1LDUgKzE1LDUgQEAKICAgICAgICAgLkVuZCgpOwogCiAgICAgY29uc3QgYmluID0g
YnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOwotICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3
IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJB
c3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDMxIC8gMzk6IGR1cGxpY2F0ZSBl
eHBvcnQ6ICdmb28nIik7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHku
TW9kdWxlKGJpbiksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVs
ZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzE6IGR1cGxpY2F0ZSBleHBvcnQ6ICdmb28nIik7CiB9
CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LWFsaWdubWVu
dC5qcyBiL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9tZW1vcnktYWxpZ25tZW50LmpzCmlu
ZGV4IGFiYzU3NDEyMTQ2ZjJlMzk3MjYxZTczMjZlY2M4YTVjODE5YTA0OWMuLmU2MDU4OTg5MDBh
YTFiZWQ2N2I5ZDMyYWM2ZjJhYTAxMmViMjk5ZWUgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9m
dW5jdGlvbi10ZXN0cy9tZW1vcnktYWxpZ25tZW50LmpzCisrKyBiL0pTVGVzdHMvd2FzbS9mdW5j
dGlvbi10ZXN0cy9tZW1vcnktYWxpZ25tZW50LmpzCkBAIC00Miw3ICs0Miw3IEBACiAgICAgICAg
IGlmIChhbGlnbkxvZzIgPD0gbWF4QWxpZ25Mb2cyKQogICAgICAgICAgICAgaW5zdGFuY2UoKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgYXNzZXJ0LnRocm93cyhpbnN0YW5jZSwgV2ViQXNz
ZW1ibHkuQ29tcGlsZUVycm9yLCBgV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQg
Ynl0ZSAke3N0YXJ0fSAvICR7ZW5kfTogYnl0ZSBhbGlnbm1lbnQgJHsxIDw8IGFsaWduTG9nMn0g
ZXhjZWVkcyAke2luZm8udHlwZX0ncyBuYXR1cmFsIGFsaWdubWVudCAkezEgPDwgbWF4QWxpZ25M
b2cyfSwgaW4gZnVuY3Rpb24gYXQgaW5kZXggMGApOworICAgICAgICAgICAgYXNzZXJ0LnRocm93
cyhpbnN0YW5jZSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCBgV2ViQXNzZW1ibHkuTW9kdWxl
IGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAke3N0YXJ0fTogYnl0ZSBhbGlnbm1lbnQgJHsxIDw8IGFs
aWduTG9nMn0gZXhjZWVkcyAke2luZm8udHlwZX0ncyBuYXR1cmFsIGFsaWdubWVudCAkezEgPDwg
bWF4QWxpZ25Mb2cyfSwgaW4gZnVuY3Rpb24gYXQgaW5kZXggMGApOwogCiAgICAgfQogfQpkaWZm
IC0tZ2l0IGEvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL21lbW9yeS1zZWN0aW9uLWFuZC1p
bXBvcnQuanMgYi9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LXNlY3Rpb24tYW5k
LWltcG9ydC5qcwppbmRleCBhMWRiOWNlMjU3NzkzNTBiNWJkNTU3N2Y3NjdlNjY3Nzc0YmQ4YjBi
Li4xNTIwN2VmNzE4OGVmYTBmNjkyMzU3M2MxZGZlYTVhM2VhNWI3MWZmIDEwMDY0NAotLS0gYS9K
U1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LXNlY3Rpb24tYW5kLWltcG9ydC5qcwor
KysgYi9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LXNlY3Rpb24tYW5kLWltcG9y
dC5qcwpAQCAtMjgsNCArMjgsNCBAQAogICAgICAgLkNvZGUoKS5FbmQoKTsKIAogY29uc3QgaTAg
PSBpbnN0YW50aWF0ZShidWlsZGVyMCk7Ci1hc3NlcnQudGhyb3dzKCgpID0+IGluc3RhbnRpYXRl
KGJ1aWxkZXIxLCB7IGltcDogeyBtZW1vcnk6IGkwLmV4cG9ydHMubWVtb3J5IH0gfSksIFdlYkFz
c2VtYmx5LkNvbXBpbGVFcnJvciwgYFdlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0
IGJ5dGUgMzUgLyA0MTogdGhlcmUgY2FuIGF0IG1vc3QgYmUgb25lIE1lbW9yeSBzZWN0aW9uIGZv
ciBub3dgKTsKK2Fzc2VydC50aHJvd3MoKCkgPT4gaW5zdGFudGlhdGUoYnVpbGRlcjEsIHsgaW1w
OiB7IG1lbW9yeTogaTAuZXhwb3J0cy5tZW1vcnkgfSB9KSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVy
cm9yLCBgV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzNTogdGhlcmUg
Y2FuIGF0IG1vc3QgYmUgb25lIE1lbW9yeSBzZWN0aW9uIGZvciBub3dgKTsKZGlmZiAtLWdpdCBh
L0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy92b2lkLWFyZ3VtZW50LXR5cGUtc2hvdWxkLWJl
LWEtdmFsaWRhdGlvbi1lcnJvci5qcyBiL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy92b2lk
LWFyZ3VtZW50LXR5cGUtc2hvdWxkLWJlLWEtdmFsaWRhdGlvbi1lcnJvci5qcwppbmRleCA0NzE0
OWIxZDdmYjkzMjMxYzI1ZDA3OGE4NjI5OGI3NTAyYmZmNjhhLi4yMTc4ODEwYTc4MTdkOTczMzVl
NjJmNzhiM2ZjNTE3ZTNmZTc3ZTQxIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vZnVuY3Rpb24t
dGVzdHMvdm9pZC1hcmd1bWVudC10eXBlLXNob3VsZC1iZS1hLXZhbGlkYXRpb24tZXJyb3IuanMK
KysrIGIvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL3ZvaWQtYXJndW1lbnQtdHlwZS1zaG91
bGQtYmUtYS12YWxpZGF0aW9uLWVycm9yLmpzCkBAIC0xNyw2ICsxNyw2IEBAIGZ1bmN0aW9uIGdl
dEJpbmFyeShwYXJhbXMpIHsKICAgICByZXR1cm4gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgp
OwogfQogCi1hc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoZ2V0Qmlu
YXJ5KFsiaTMyIiwgInZvaWQiXSkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3Nl
bWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE1IC8gNDc6IGNhbid0IGdldCAxdGgg
YXJndW1lbnQgVHlwZSIpOwotYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9k
dWxlKGdldEJpbmFyeShbInZvaWQiXSkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJB
c3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE0IC8gNDY6IGNhbid0IGdldCAw
dGggYXJndW1lbnQgVHlwZSIpOwotYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHku
TW9kdWxlKGdldEJpbmFyeShbImkzMiIsICJ2b2lkIiwgImkzMiJdKSksIFdlYkFzc2VtYmx5LkNv
bXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTUg
LyA0ODogY2FuJ3QgZ2V0IDF0aCBhcmd1bWVudCBUeXBlIik7Cithc3NlcnQudGhyb3dzKCgpID0+
IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoZ2V0QmluYXJ5KFsiaTMyIiwgInZvaWQiXSkpLCBXZWJB
c3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBh
dCBieXRlIDE1OiBjYW4ndCBnZXQgMXRoIGFyZ3VtZW50IFR5cGUiKTsKK2Fzc2VydC50aHJvd3Mo
KCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShnZXRCaW5hcnkoWyJ2b2lkIl0pKSwgV2ViQXNz
ZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQg
Ynl0ZSAxNDogY2FuJ3QgZ2V0IDB0aCBhcmd1bWVudCBUeXBlIik7Cithc3NlcnQudGhyb3dzKCgp
ID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoZ2V0QmluYXJ5KFsiaTMyIiwgInZvaWQiLCAiaTMy
Il0pKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNu
J3QgcGFyc2UgYXQgYnl0ZSAxNTogY2FuJ3QgZ2V0IDF0aCBhcmd1bWVudCBUeXBlIik7CmRpZmYg
LS1naXQgYS9KU1Rlc3RzL3dhc20vanMtYXBpL01vZHVsZS1jb21waWxlLmpzIGIvSlNUZXN0cy93
YXNtL2pzLWFwaS9Nb2R1bGUtY29tcGlsZS5qcwppbmRleCBkM2JlYjMzMjU3N2FlZGIwNThjOGU0
MWQyM2FkZGE5YzkxZjFkZjc4Li5kNzIzYmY0ZDcwYjQ5YzQ5YTEzNjVmZGM2N2I0NTI0MmIzODI3
MmU2IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vanMtYXBpL01vZHVsZS1jb21waWxlLmpzCisr
KyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvTW9kdWxlLWNvbXBpbGUuanMKQEAgLTIxLDcgKzIxLDcg
QEAgYXN5bmMgZnVuY3Rpb24gdGVzdFByb21pc2VBUEkoKSB7CiAgICAgICAgICAgICBhd2FpdCBX
ZWJBc3NlbWJseS5jb21waWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSk7CiAgICAgICAg
IH0gY2F0Y2goZSkgewogICAgICAgICAgICAgYXNzZXJ0LnRydXRoeShlIGluc3RhbmNlb2YgV2Vi
QXNzZW1ibHkuQ29tcGlsZUVycm9yKTsKLSAgICAgICAgICAgIGFzc2VydC50cnV0aHkoZS5tZXNz
YWdlID09PSAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzNCAvIDQz
OiB0aGVyZSBjYW4gYXQgbW9zdCBiZSBvbmUgTWVtb3J5IHNlY3Rpb24gZm9yIG5vdyIpOworICAg
ICAgICAgICAgYXNzZXJ0LnRydXRoeShlLm1lc3NhZ2UgPT09ICJXZWJBc3NlbWJseS5Nb2R1bGUg
ZG9lc24ndCBwYXJzZSBhdCBieXRlIDM0OiB0aGVyZSBjYW4gYXQgbW9zdCBiZSBvbmUgTWVtb3J5
IHNlY3Rpb24gZm9yIG5vdyIpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9KU1Rl
c3RzL3dhc20vanMtYXBpL2VsZW1lbnQuanMgYi9KU1Rlc3RzL3dhc20vanMtYXBpL2VsZW1lbnQu
anMKaW5kZXggMTg4YWM3NDE1MTEyNjA0OGI4MjcyNDhkYzQ3MzgyMDVhYTg2YTE0OS4uZmNiZTI4
MjdmMzcxNjYzYWE4NGZkZjVjMTAxMDBiODE3ODE3NzM5MCAxMDA2NDQKLS0tIGEvSlNUZXN0cy93
YXNtL2pzLWFwaS9lbGVtZW50LmpzCisrKyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvZWxlbWVudC5q
cwpAQCAtMTgsNyArMTgsNyBAQAogICAgICAgICAgICAgLkVuZCgpCiAgICAgICAgIC5FbmQoKTsK
IAotICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVy
LldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3Nl
bWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI0IC8gNDE6IEVsZW1lbnQgc2VjdGlv
biBmb3IgVGFibGUgMCBleGNlZWRzIGF2YWlsYWJsZSBUYWJsZSAwIik7CisgICAgYXNzZXJ0LnRo
cm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5n
ZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vz
bid0IHBhcnNlIGF0IGJ5dGUgMjQ6IEVsZW1lbnQgc2VjdGlvbiBmb3IgVGFibGUgMCBleGNlZWRz
IGF2YWlsYWJsZSBUYWJsZSAwIik7CiB9CiAKIHsKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAg
ICAgIC5FbmQoKQogICAgICAgICAuRW5kKCk7CiAKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5l
dyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwgV2ViQXNz
ZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQg
Ynl0ZSAzMCAvIDQ3OiBFbGVtZW50IHNlY3Rpb24gZm9yIFRhYmxlIDEgZXhjZWVkcyBhdmFpbGFi
bGUgVGFibGUgMSIpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1v
ZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJy
b3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDMwOiBFbGVtZW50
IHNlY3Rpb24gZm9yIFRhYmxlIDEgZXhjZWVkcyBhdmFpbGFibGUgVGFibGUgMSIpOwogfQogCiB7
CkBAIC0xMTIsNyArMTEyLDcgQEAKICAgICAgICAgICAgIC5FbmQoKQogICAgICAgICAuRW5kKCk7
CiAKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRl
ci5XZWJBc3NlbWJseSgpLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNz
ZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzOCAvIDUwOiBFbGVtZW50IHNlY3Rp
b24ncyAwdGggZWxlbWVudCdzIDJ0aCBpbmRleCBpcyAxIHdoaWNoIGV4Y2VlZHMgdGhlIGZ1bmN0
aW9uIGluZGV4IHNwYWNlIHNpemUgb2YgMSAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1v
ZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiKTsKKyAgICBhc3NlcnQudGhyb3dz
KCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgp
KSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3Qg
cGFyc2UgYXQgYnl0ZSAzODogRWxlbWVudCBzZWN0aW9uJ3MgMHRoIGVsZW1lbnQncyAydGggaW5k
ZXggaXMgMSB3aGljaCBleGNlZWRzIHRoZSBmdW5jdGlvbiBpbmRleCBzcGFjZSBzaXplIG9mIDEg
KGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgp
LmdldCgpKScpIik7CiB9CiAKIHsKQEAgLTIxNSw1ICsyMTUsNSBAQCBmdW5jdGlvbiBiYWRNb2R1
bGUoKSB7CiAgICAgICAgIHJldHVybiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CiAgICAg
fQogCi0gICAgYXNzZXJ0LnRocm93cygoKSA9PiBiYWRNb2R1bGUoKSwgV2ViQXNzZW1ibHkuQ29t
cGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSA1OCAv
IDcyOiBFbGVtZW50IGluaXRfZXhwciBtdXN0IHByb2R1Y2UgYW4gaTMyIik7CisgICAgYXNzZXJ0
LnRocm93cygoKSA9PiBiYWRNb2R1bGUoKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2Vi
QXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSA1ODogRWxlbWVudCBpbml0X2V4
cHIgbXVzdCBwcm9kdWNlIGFuIGkzMiIpOwogfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pz
LWFwaS9nbG9iYWwtZXJyb3IuanMgYi9KU1Rlc3RzL3dhc20vanMtYXBpL2dsb2JhbC1lcnJvci5q
cwppbmRleCAwOWY4ZDc5OWRjNGUyZjM5ZDlhNTQzMDJjYWFiZGU3YTc2ZDUxMDdiLi5kM2VkZjg5
OGU3ZDlmYTA3ZTQ3MGNmYzMyYzZhYjM2ZjE3MzFiNTEzIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dh
c20vanMtYXBpL2dsb2JhbC1lcnJvci5qcworKysgYi9KU1Rlc3RzL3dhc20vanMtYXBpL2dsb2Jh
bC1lcnJvci5qcwpAQCAtMjMsNyArMjMsNyBAQAogICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2Vi
QXNzZW1ibHkoKTsKICAgICBiaW4udHJpbSgpOwogCi0gICAgYXNzZXJ0LnRocm93cygoKSA9PiBu
ZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbi5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJv
ciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjYgLyA1OTogZ2V0
X2dsb2JhbCdzIGluZGV4IDAgZXhjZWVkcyB0aGUgbnVtYmVyIG9mIGdsb2JhbHMgMCAoZXZhbHVh
dGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4uZ2V0KCkpJykiKTsKKyAgICBhc3NlcnQu
dGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKSwgV2ViQXNzZW1i
bHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0
ZSAyNjogZ2V0X2dsb2JhbCdzIGluZGV4IDAgZXhjZWVkcyB0aGUgbnVtYmVyIG9mIGdsb2JhbHMg
MCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4uZ2V0KCkpJykiKTsKIH0K
IAogCkBAIC01Miw3ICs1Miw3IEBACiAgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJs
eSgpOwogICAgIGJpbi50cmltKCk7CiAKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJB
c3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2Vi
QXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzMiAvIDc2OiBNdXRhYmxlIEds
b2JhbHMgYXJlbid0IHN1cHBvcnRlZCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVs
ZShiaW4uZ2V0KCkpJykiKTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJs
eS5Nb2R1bGUoYmluLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1i
bHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzMjogTXV0YWJsZSBHbG9iYWxzIGFyZW4n
dCBzdXBwb3J0ZWQgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdldCgp
KScpIik7CiB9CiAKIHsKQEAgLTc3LDcgKzc3LDcgQEAKICAgICBjb25zdCBiaW4gPSBidWlsZGVy
LldlYkFzc2VtYmx5KCk7CiAgICAgYmluLnRyaW0oKTsKIAotICAgIGFzc2VydC50aHJvd3MoKCkg
PT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4uZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxl
RXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDUxIC8gNTk6
IDF0aCBFeHBvcnQgaXNuJ3QgaW1tdXRhYmxlLCBuYW1lZCAnZ2xvYmFsJyAoZXZhbHVhdGluZyAn
bmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4uZ2V0KCkpJykiKTsKKyAgICBhc3NlcnQudGhyb3dz
KCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29t
cGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSA1MTog
MXRoIEV4cG9ydCBpc24ndCBpbW11dGFibGUsIG5hbWVkICdnbG9iYWwnIChldmFsdWF0aW5nICdu
ZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbi5nZXQoKSknKSIpOwogfQogCiB7CmRpZmYgLS1naXQg
YS9KU1Rlc3RzL3dhc20vanMtYXBpL3RhYmxlLmpzIGIvSlNUZXN0cy93YXNtL2pzLWFwaS90YWJs
ZS5qcwppbmRleCBiODMyZTExNzY2NDEzMDIzMGZjODBiZmIxMzBjMTM2NmEzMTJlMzI1Li5jZjY4
YjQ0MDQ5NWY2YmU2ZjhiMjc5NDc3MTI0NTZkN2NhN2M4YzZmIDEwMDY0NAotLS0gYS9KU1Rlc3Rz
L3dhc20vanMtYXBpL3RhYmxlLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGFibGUuanMK
QEAgLTEzLDcgKzEzLDcgQEAKICAgICAgICAgLkVuZCgpCiAgICAgICAgIC5Db2RlKCkKICAgICAg
ICAgLkVuZCgpOwotICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVs
ZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3Is
ICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDM0IC8gNDE6IENhbm5v
dCBoYXZlIG1vcmUgdGhhbiBvbmUgVGFibGUgZm9yIG5vdyIpOworICAgIGFzc2VydC50aHJvd3Mo
KCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkp
LCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBw
YXJzZSBhdCBieXRlIDM0OiBDYW5ub3QgaGF2ZSBtb3JlIHRoYW4gb25lIFRhYmxlIGZvciBub3ci
KTsKIH0KIAogewpAQCAtMzgsNyArMzgsNyBAQAogICAgICAgICAuRW5kKCkKICAgICAgICAgLkNv
ZGUoKQogICAgICAgICAuRW5kKCk7Ci0gICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5LkNv
bXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTcg
LyAyODogVGFibGUgY291bnQgb2YgMiBpcyBpbnZhbGlkLCBhdCBtb3N0IDEgaXMgYWxsb3dlZCBm
b3Igbm93IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNz
ZW1ibHkoKS5nZXQoKSknKSIpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2Vt
Ymx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21w
aWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE3OiBU
YWJsZSBjb3VudCBvZiAyIGlzIGludmFsaWQsIGF0IG1vc3QgMSBpcyBhbGxvd2VkIGZvciBub3cg
KGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgp
LmdldCgpKScpIik7CiB9CiAKIHsKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICAgICAgICAgICAu
Q2FsbEluZGlyZWN0KDAsIDApCiAgICAgICAgICAgICAuRW5kKCkKICAgICAgICAgLkVuZCgpOwot
ICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldl
YkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJs
eS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDQgLyA3OiBjYWxsX2luZGlyZWN0IGlzIG9u
bHkgdmFsaWQgd2hlbiBhIHRhYmxlIGlzIGRlZmluZWQgb3IgaW1wb3J0ZWQsIGluIGZ1bmN0aW9u
IGF0IGluZGV4IDAgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5X
ZWJBc3NlbWJseSgpLmdldCgpKScpIik7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2Vi
QXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5
LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUg
NDogY2FsbF9pbmRpcmVjdCBpcyBvbmx5IHZhbGlkIHdoZW4gYSB0YWJsZSBpcyBkZWZpbmVkIG9y
IGltcG9ydGVkLCBpbiBmdW5jdGlvbiBhdCBpbmRleCAwIChldmFsdWF0aW5nICduZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIpOwogfQogCiB7CkBA
IC03Myw3ICs3Myw3IEBACiAgICAgICAgICAgICAgICAgLkNhbGxJbmRpcmVjdCgwLCAxKQogICAg
ICAgICAgICAgLkVuZCgpCiAgICAgICAgIC5FbmQoKTsKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+
IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwgV2Vi
QXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2Ug
YXQgYnl0ZSA2IC8gNzogY2FsbF9pbmRpcmVjdCdzICdyZXNlcnZlZCcgdmFydWludDEgbXVzdCBi
ZSAweDAsIGluIGZ1bmN0aW9uIGF0IGluZGV4IDAgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJs
eS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIik7CisgICAgYXNzZXJ0LnRo
cm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5n
ZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vz
bid0IHBhcnNlIGF0IGJ5dGUgNjogY2FsbF9pbmRpcmVjdCdzICdyZXNlcnZlZCcgdmFydWludDEg
bXVzdCBiZSAweDAsIGluIGZ1bmN0aW9uIGF0IGluZGV4IDAgKGV2YWx1YXRpbmcgJ25ldyBXZWJB
c3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIik7CiB9CiAKIHsK
QEAgLTg2LDcgKzg2LDcgQEAKICAgICAgICAgLkVuZCgpCiAgICAgICAgIC5Db2RlKCkKICAgICAg
ICAgLkVuZCgpOwotICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVs
ZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3Is
ICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDIzIC8gMjY6IGNhbid0
IGV4cG9ydCBUYWJsZSAwIHRoZXJlIGFyZSAwIFRhYmxlcyIpOworICAgIGFzc2VydC50aHJvd3Mo
KCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkp
LCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBw
YXJzZSBhdCBieXRlIDIzOiBjYW4ndCBleHBvcnQgVGFibGUgMCB0aGVyZSBhcmUgMCBUYWJsZXMi
KTsKIH0KIAogewpAQCAtMTAyLDcgKzEwMiw3IEBACiAgICAgICAgIC5FbmQoKQogICAgICAgICAu
Q29kZSgpCiAgICAgICAgIC5FbmQoKTsKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJB
c3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwgV2ViQXNzZW1ibHku
Q29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAz
MCAvIDMzOiBjYW4ndCBleHBvcnQgVGFibGUgMSB0aGVyZSBhcmUgMSBUYWJsZXMiKTsKKyAgICBh
c3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3Nl
bWJseSgpLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9k
dWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzMDogY2FuJ3QgZXhwb3J0IFRhYmxlIDEgdGhlcmUg
YXJlIDEgVGFibGVzIik7CiB9CiAKIGZ1bmN0aW9uIGFzc2VydEJhZFRhYmxlKHRhYmxlRGVzY3Jp
cHRpb24sIG1lc3NhZ2UpIHsKQEAgLTEzMiw0MiArMTMyLDQyIEBAIGZ1bmN0aW9uIGFzc2VydEJh
ZFRhYmxlSW1wb3J0KHRhYmxlRGVzY3JpcHRpb24sIG1lc3NhZ2UpIHsKIHsKICAgICBsZXQgYmFk
RGVzY3JpcHRpb25zID0gWwogICAgICAgICBbe2luaXRpYWw6IDEwLCBlbGVtZW50OiAiaTMyIn0s
Ci0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxOCAv
IDIzOiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTEgKGV2YWx1YXRpbmcgJ25l
dyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKLSAg
ICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2IC8gMzQ6
IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtMSAoZXZhbHVhdGluZyAnbmV3IFdl
YkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKKyAgICAg
ICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE4OiBUYWJsZSB0
eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTEgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJs
eS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKKyAgICAgICAgICJXZWJB
c3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2OiBUYWJsZSB0eXBlIHNob3Vs
ZCBiZSBhbnlmdW5jLCBnb3QgLTEgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUo
YnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCiAgICAgICAgIFt7aW5pdGlhbDogMTAs
IGVsZW1lbnQ6ICJmMzIifSwKLSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBw
YXJzZSBhdCBieXRlIDE4IC8gMjM6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAt
MyAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5
KCkuZ2V0KCkpJykiLAotICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNl
IGF0IGJ5dGUgMjYgLyAzNDogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC0zIChl
dmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5n
ZXQoKSknKSJdLAorICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0
IGJ5dGUgMTg6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtMyAoZXZhbHVhdGlu
ZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJyki
LAorICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjY6
IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtMyAoZXZhbHVhdGluZyAnbmV3IFdl
YkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKICAgICAg
ICAgW3tpbml0aWFsOiAxMCwgZWxlbWVudDogImY2NCJ9LAotICAgICAgICAgIldlYkFzc2VtYmx5
Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTggLyAyMzogVGFibGUgdHlwZSBzaG91bGQg
YmUgYW55ZnVuYywgZ290IC00IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1
aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9k
dWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNiAvIDM0OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBh
bnlmdW5jLCBnb3QgLTQgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRl
ci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxl
IGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxODogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywg
Z290IC00IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNz
ZW1ibHkoKS5nZXQoKSknKSIsCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3Qg
cGFyc2UgYXQgYnl0ZSAyNjogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC00IChl
dmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5n
ZXQoKSknKSJdLAogICAgICAgICBbe2luaXRpYWw6IDEwLCBlbGVtZW50OiAiaTY0In0sCi0gICAg
ICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxOCAvIDIzOiBU
YWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTIgKGV2YWx1YXRpbmcgJ25ldyBXZWJB
c3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKLSAgICAgICAg
ICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2IC8gMzQ6IFRhYmxl
IHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtMiAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2Vt
Ymx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKKyAgICAgICAgICJX
ZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE4OiBUYWJsZSB0eXBlIHNo
b3VsZCBiZSBhbnlmdW5jLCBnb3QgLTIgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1
bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKKyAgICAgICAgICJXZWJBc3NlbWJs
eS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBh
bnlmdW5jLCBnb3QgLTIgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRl
ci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCiAgICAgICAgIFt7aW5pdGlhbDogMTAsIG1heGlt
dW06IDIwLCBlbGVtZW50OiAiaTMyIn0sCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRv
ZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxOCAvIDI0OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5j
LCBnb3QgLTEgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJB
c3NlbWJseSgpLmdldCgpKScpIiwKLSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24n
dCBwYXJzZSBhdCBieXRlIDI2IC8gMzU6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdv
dCAtMSAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2Vt
Ymx5KCkuZ2V0KCkpJykiXSwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBw
YXJzZSBhdCBieXRlIDE4OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTEgKGV2
YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdl
dCgpKScpIiwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBi
eXRlIDI2OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTEgKGV2YWx1YXRpbmcg
J25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0s
CiAgICAgICAgIFt7aW5pdGlhbDogMTAsIG1heGltdW06IDIwLCBlbGVtZW50OiAiZjMyIn0sCi0g
ICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxOCAvIDI0
OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTMgKGV2YWx1YXRpbmcgJ25ldyBX
ZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKLSAgICAg
ICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2IC8gMzU6IFRh
YmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtMyAoZXZhbHVhdGluZyAnbmV3IFdlYkFz
c2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKKyAgICAgICAg
ICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE4OiBUYWJsZSB0eXBl
IHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTMgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5N
b2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKKyAgICAgICAgICJXZWJBc3Nl
bWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2OiBUYWJsZSB0eXBlIHNob3VsZCBi
ZSBhbnlmdW5jLCBnb3QgLTMgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVp
bGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCiAgICAgICAgIFt7aW5pdGlhbDogMTAsIG1h
eGltdW06IDIwLCBlbGVtZW50OiAiZjY0In0sCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxl
IGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxOCAvIDI0OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlm
dW5jLCBnb3QgLTQgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5X
ZWJBc3NlbWJseSgpLmdldCgpKScpIiwKLSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9l
c24ndCBwYXJzZSBhdCBieXRlIDI2IC8gMzU6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMs
IGdvdCAtNCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFz
c2VtYmx5KCkuZ2V0KCkpJykiXSwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24n
dCBwYXJzZSBhdCBieXRlIDE4OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTQg
KGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgp
LmdldCgpKScpIiwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBh
dCBieXRlIDI2OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTQgKGV2YWx1YXRp
bmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScp
Il0sCiAgICAgICAgIFt7aW5pdGlhbDogMTAsIG1heGltdW06IDIwLCBlbGVtZW50OiAiaTY0In0s
Ci0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxOCAv
IDI0OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTIgKGV2YWx1YXRpbmcgJ25l
dyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKLSAg
ICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2IC8gMzU6
IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtMiAoZXZhbHVhdGluZyAnbmV3IFdl
YkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKKyAgICAg
ICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE4OiBUYWJsZSB0
eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTIgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJs
eS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKKyAgICAgICAgICJXZWJB
c3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2OiBUYWJsZSB0eXBlIHNob3Vs
ZCBiZSBhbnlmdW5jLCBnb3QgLTIgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUo
YnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCiAKICAgICAgICAgW3tpbml0aWFsOiAx
MCwgbWF4aW11bTogOSwgZWxlbWVudDogImFueWZ1bmMifSwKLSAgICAgICAgICJXZWJBc3NlbWJs
eS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDIxIC8gMjQ6IHJlc2l6YWJsZSBsaW1pdHMg
aGFzIGEgaW5pdGlhbCBwYWdlIGNvdW50IG9mIDEwIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiBpdHMg
bWF4aW11bSA5IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2Vi
QXNzZW1ibHkoKS5nZXQoKSknKSIsCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNu
J3QgcGFyc2UgYXQgYnl0ZSAyOSAvIDM1OiByZXNpemFibGUgbGltaXRzIGhhcyBhIGluaXRpYWwg
cGFnZSBjb3VudCBvZiAxMCB3aGljaCBpcyBncmVhdGVyIHRoYW4gaXRzIG1heGltdW0gOSAoZXZh
bHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0
KCkpJykiXSwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBi
eXRlIDIxOiByZXNpemFibGUgbGltaXRzIGhhcyBhIGluaXRpYWwgcGFnZSBjb3VudCBvZiAxMCB3
aGljaCBpcyBncmVhdGVyIHRoYW4gaXRzIG1heGltdW0gOSAoZXZhbHVhdGluZyAnbmV3IFdlYkFz
c2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAorICAgICAgICAg
IldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjk6IHJlc2l6YWJsZSBs
aW1pdHMgaGFzIGEgaW5pdGlhbCBwYWdlIGNvdW50IG9mIDEwIHdoaWNoIGlzIGdyZWF0ZXIgdGhh
biBpdHMgbWF4aW11bSA5IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxk
ZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAogICAgICAgICBbe2luaXRpYWw6IDEsIG1heGlt
dW06IDAsIGVsZW1lbnQ6ICJhbnlmdW5jIn0sCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxl
IGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyMSAvIDI0OiByZXNpemFibGUgbGltaXRzIGhhcyBhIGlu
aXRpYWwgcGFnZSBjb3VudCBvZiAxIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiBpdHMgbWF4aW11bSAw
IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHko
KS5nZXQoKSknKSIsCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2Ug
YXQgYnl0ZSAyOSAvIDM1OiByZXNpemFibGUgbGltaXRzIGhhcyBhIGluaXRpYWwgcGFnZSBjb3Vu
dCBvZiAxIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiBpdHMgbWF4aW11bSAwIChldmFsdWF0aW5nICdu
ZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAor
ICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjE6IHJl
c2l6YWJsZSBsaW1pdHMgaGFzIGEgaW5pdGlhbCBwYWdlIGNvdW50IG9mIDEgd2hpY2ggaXMgZ3Jl
YXRlciB0aGFuIGl0cyBtYXhpbXVtIDAgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1
bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKKyAgICAgICAgICJXZWJBc3NlbWJs
eS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI5OiByZXNpemFibGUgbGltaXRzIGhhcyBh
IGluaXRpYWwgcGFnZSBjb3VudCBvZiAxIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiBpdHMgbWF4aW11
bSAwIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1i
bHkoKS5nZXQoKSknKSJdLAogICAgICAgICBbe2luaXRpYWw6IDIqKjMyIC0gMSwgbWF4aW11bTog
MioqMzIgLSAyLCBlbGVtZW50OiAiYW55ZnVuYyJ9LAotICAgICAgICAgIldlYkFzc2VtYmx5Lk1v
ZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjkgLyAzMjogcmVzaXphYmxlIGxpbWl0cyBoYXMg
YSBpbml0aWFsIHBhZ2UgY291bnQgb2YgNDI5NDk2NzI5NSB3aGljaCBpcyBncmVhdGVyIHRoYW4g
aXRzIG1heGltdW0gNDI5NDk2NzI5NCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVs
ZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAotICAgICAgICAgIldlYkFzc2VtYmx5
Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzcgLyA0MzogcmVzaXphYmxlIGxpbWl0cyBo
YXMgYSBpbml0aWFsIHBhZ2UgY291bnQgb2YgNDI5NDk2NzI5NSB3aGljaCBpcyBncmVhdGVyIHRo
YW4gaXRzIG1heGltdW0gNDI5NDk2NzI5NCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1v
ZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKKyAgICAgICAgICJXZWJBc3Nl
bWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI5OiByZXNpemFibGUgbGltaXRzIGhh
cyBhIGluaXRpYWwgcGFnZSBjb3VudCBvZiA0Mjk0OTY3Mjk1IHdoaWNoIGlzIGdyZWF0ZXIgdGhh
biBpdHMgbWF4aW11bSA0Mjk0OTY3Mjk0IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9k
dWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCisgICAgICAgICAiV2ViQXNzZW1i
bHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzNzogcmVzaXphYmxlIGxpbWl0cyBoYXMg
YSBpbml0aWFsIHBhZ2UgY291bnQgb2YgNDI5NDk2NzI5NSB3aGljaCBpcyBncmVhdGVyIHRoYW4g
aXRzIG1heGltdW0gNDI5NDk2NzI5NCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVs
ZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKICAgICAgICAgW3tpbml0aWFsOiAy
KiozMSwgZWxlbWVudDogImFueWZ1bmMifSwKLSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUg
ZG9lc24ndCBwYXJzZSBhdCBieXRlIDI0IC8gMjc6IFRhYmxlJ3MgaW5pdGlhbCBwYWdlIGNvdW50
IG9mIDIxNDc0ODM2NDggaXMgdG9vIGJpZywgbWF4aW11bSAxMDAwMDAwMCAoZXZhbHVhdGluZyAn
bmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAot
ICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzIgLyAz
ODogVGFibGUncyBpbml0aWFsIHBhZ2UgY291bnQgb2YgMjE0NzQ4MzY0OCBpcyB0b28gYmlnLCBt
YXhpbXVtIDEwMDAwMDAwIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxk
ZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAorICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVs
ZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjQ6IFRhYmxlJ3MgaW5pdGlhbCBwYWdlIGNvdW50IG9m
IDIxNDc0ODM2NDggaXMgdG9vIGJpZywgbWF4aW11bSAxMDAwMDAwMCAoZXZhbHVhdGluZyAnbmV3
IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAorICAg
ICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzI6IFRhYmxl
J3MgaW5pdGlhbCBwYWdlIGNvdW50IG9mIDIxNDc0ODM2NDggaXMgdG9vIGJpZywgbWF4aW11bSAx
MDAwMDAwMCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFz
c2VtYmx5KCkuZ2V0KCkpJykiXSwKICAgICBdOwogCiAgICAgZm9yIChjb25zdCBkIG9mIGJhZERl
c2NyaXB0aW9ucykgewpAQCAtMTg2LDcgKzE4Niw3IEBAIGZ1bmN0aW9uIGFzc2VydEJhZFRhYmxl
SW1wb3J0KHRhYmxlRGVzY3JpcHRpb24sIG1lc3NhZ2UpIHsKICAgICAgICAgLkZ1bmN0aW9uKCku
RW5kKCkKICAgICAgICAgLkNvZGUoKQogICAgICAgICAuRW5kKCk7Ci0gICAgYXNzZXJ0LnRocm93
cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQo
KSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0
IHBhcnNlIGF0IGJ5dGUgMzkgLyA0ODogQ2Fubm90IGhhdmUgbW9yZSB0aGFuIG9uZSBUYWJsZSBm
b3Igbm93Iik7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxl
KGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwg
IldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzk6IENhbm5vdCBoYXZl
IG1vcmUgdGhhbiBvbmUgVGFibGUgZm9yIG5vdyIpOwogfQogCiAKZGlmZiAtLWdpdCBhL0pTVGVz
dHMvd2FzbS9qcy1hcGkvdGVzdF9EYXRhLmpzIGIvSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X0Rh
dGEuanMKaW5kZXggY2NhMGNmM2JjNDVkMGY0ZGQzM2JkOWNhNTk3OTg5NTRkMmQ0NWIxOC4uNDE3
MTQzNTEyOGEwODRkNTk0OWQ4ZmYyYjhiMTI1NzBiN2YyMzM3NSAxMDA2NDQKLS0tIGEvSlNUZXN0
cy93YXNtL2pzLWFwaS90ZXN0X0RhdGEuanMKKysrIGIvSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0
X0RhdGEuanMKQEAgLTUyLDcgKzUyLDcgQEAKICAgICAgICAgICAuU2VnbWVudChbMHhmZl0pLk9m
ZnNldCgwKS5FbmQoKQogICAgICAgICAuRW5kKCk7CiAgICAgY29uc3QgYmluID0gYnVpbGRlci5X
ZWJBc3NlbWJseSgpLmdldCgpOwotICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2Vt
Ymx5Lk1vZHVsZShiaW4pLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsIGBXZWJBc3NlbWJseS5N
b2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE1IC8gMjA6IDB0aCBEYXRhIHNlZ21lbnQgaGFz
IGluZGV4IDAgd2hpY2ggZXhjZWVkcyB0aGUgbnVtYmVyIG9mIE1lbW9yaWVzIDBgKTsKKyAgICBh
c3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKSwgV2ViQXNzZW1i
bHkuQ29tcGlsZUVycm9yLCBgV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0
ZSAxNTogMHRoIERhdGEgc2VnbWVudCBoYXMgaW5kZXggMCB3aGljaCBleGNlZWRzIHRoZSBudW1i
ZXIgb2YgTWVtb3JpZXMgMGApOwogfSkoKTsKIAogKGZ1bmN0aW9uIEVtcHR5RGF0YVNlY3Rpb25X
aXRob3V0TWVtb3J5KCkgewpAQCAtNjIsNyArNjIsNyBAQAogICAgICAgICAgIC5TZWdtZW50KFtd
KS5PZmZzZXQoMCkuRW5kKCkKICAgICAgICAgLkVuZCgpOwogICAgIGNvbnN0IGJpbiA9IGJ1aWxk
ZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJB
c3NlbWJseS5Nb2R1bGUoYmluKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCBgV2ViQXNzZW1i
bHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxNSAvIDE5OiAwdGggRGF0YSBzZWdtZW50
IGhhcyBpbmRleCAwIHdoaWNoIGV4Y2VlZHMgdGhlIG51bWJlciBvZiBNZW1vcmllcyAwYCk7Cisg
ICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbiksIFdlYkFz
c2VtYmx5LkNvbXBpbGVFcnJvciwgYFdlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0
IGJ5dGUgMTU6IDB0aCBEYXRhIHNlZ21lbnQgaGFzIGluZGV4IDAgd2hpY2ggZXhjZWVkcyB0aGUg
bnVtYmVyIG9mIE1lbW9yaWVzIDBgKTsKIH0pKCk7CiAKIChmdW5jdGlvbiBEYXRhU2VjdGlvbkJp
Z2dlclRoYW5NZW1vcnkoKSB7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3Rf
U3RhcnQuanMgYi9KU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfU3RhcnQuanMKaW5kZXggYjQ0NDU2
OTMyZDkwYjVjODMzMTQ1ZWMzZjM0MmZjNTA0NmY3OWUwYi4uNWMzMTUwZTFjYWJlYmZiODQzMzNl
ZjcxNDIzYTg4ODZjZGUwZWFlOCAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0
X1N0YXJ0LmpzCisrKyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9TdGFydC5qcwpAQCAtMzEs
NSArMzEsNSBAQAogICAgICAgICAuU3RhcnQoMCkuRW5kKCkgLy8gSW52YWxpZCBpbmRleC4KICAg
ICAgICAgLkNvZGUoKS5FbmQoKTsKICAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0
KCk7Ci0gICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbiks
IEVycm9yLCBgV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxNyAvIDIw
OiBTdGFydCBpbmRleCAwIGV4Y2VlZHMgZnVuY3Rpb24gaW5kZXggc3BhY2UgMCAoZXZhbHVhdGlu
ZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pJylgKTsKKyAgICBhc3NlcnQudGhyb3dzKCgp
ID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKSwgRXJyb3IsIGBXZWJBc3NlbWJseS5Nb2R1
bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE3OiBTdGFydCBpbmRleCAwIGV4Y2VlZHMgZnVuY3Rp
b24gaW5kZXggc3BhY2UgMCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4p
JylgKTsKIH0pKCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfYmFzaWNf
YXBpLmpzIGIvSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X2Jhc2ljX2FwaS5qcwppbmRleCAwOGU3
NGFhMzI0YTcxNzg4ZTU4MTljNGE4YmJlNzc0NzU4NWIxYTg5Li4xYTJkMjIyMTAzMDQ1MWRmMDY0
NWIzMGVhMzFiYjI3NDhmNTUzNmQwIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vanMtYXBpL3Rl
c3RfYmFzaWNfYXBpLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9iYXNpY19hcGku
anMKQEAgLTY3LDcgKzY3LDcgQEAKICAgICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3
IFdlYkFzc2VtYmx5W2NdKGludmFsaWQpLCBUeXBlRXJyb3IsIGBmaXJzdCBhcmd1bWVudCBtdXN0
IGJlIGFuIEFycmF5QnVmZmVyVmlldyBvciBhbiBBcnJheUJ1ZmZlciAoZXZhbHVhdGluZyAnbmV3
IFdlYkFzc2VtYmx5W2NdKGludmFsaWQpJylgKTsKICAgICAgICAgZm9yIChjb25zdCBidWZmZXIg
b2YgW25ldyBBcnJheUJ1ZmZlcigpLCBuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKCkpLCBu
ZXcgSW50OEFycmF5KCksIG5ldyBVaW50OEFycmF5KCksIG5ldyBVaW50OENsYW1wZWRBcnJheSgp
LCBuZXcgSW50MTZBcnJheSgpLCBuZXcgVWludDE2QXJyYXkoKSwgbmV3IEludDMyQXJyYXkoKSwg
bmV3IFVpbnQzMkFycmF5KCksIG5ldyBGbG9hdDMyQXJyYXkoKSwgbmV3IEZsb2F0NjRBcnJheSgp
XSkKICAgICAgICAgICAgIC8vIEZJWE1FIHRoZSBmb2xsb3dpbmcgc2hvdWxkIGJlIFdlYkFzc2Vt
Ymx5LkNvbXBpbGVFcnJvci4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2Mzc2OAotICAgICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHlb
Y10oYnVmZmVyKSwgRXJyb3IsIGBXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBi
eXRlIDAgLyAwOiBleHBlY3RlZCBhIG1vZHVsZSBvZiBhdCBsZWFzdCA4IGJ5dGVzIChldmFsdWF0
aW5nICduZXcgV2ViQXNzZW1ibHlbY10oYnVmZmVyKScpYCk7CisgICAgICAgICAgICBhc3NlcnQu
dGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseVtjXShidWZmZXIpLCBFcnJvciwgYFdlYkFzc2Vt
Ymx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMDogZXhwZWN0ZWQgYSBtb2R1bGUgb2Yg
YXQgbGVhc3QgOCBieXRlcyAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5W2NdKGJ1ZmZlcikn
KWApOwogICAgICAgICBhc3NlcnQuaW5zdGFuY2VvZihuZXcgV2ViQXNzZW1ibHlbY10oZW1wdHlN
b2R1bGVBcnJheSksIFdlYkFzc2VtYmx5Lk1vZHVsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgIkluc3RhbmNlIjoKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvdmVyc2lvbi5q
cyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvdmVyc2lvbi5qcwppbmRleCA4MWNkN2ZmMDEyMmZiMjFj
ZTkxZjgwZmI1MWU0YzY5ZTE0NTk4YzQ3Li4wNDg2ZmNmZGRlZmQwODIxZDM5MjQ2Y2I2NDA4NzM0
YmZlYmYyMmUyIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vanMtYXBpL3ZlcnNpb24uanMKKysr
IGIvSlNUZXN0cy93YXNtL2pzLWFwaS92ZXJzaW9uLmpzCkBAIC01LDUgKzUsNSBAQAogICAgIGlm
ICh2ZXJzaW9uID09PSAxKQogICAgICAgICBjb250aW51ZTsKICAgICBjb25zdCBlbXB0eU1vZHVs
ZUFycmF5ID0gVWludDhBcnJheS5vZigweDAsIDB4NjEsIDB4NzMsIDB4NmQsIHZlcnNpb24sIDB4
MDAsIDB4MDAsIDB4MDApOwotICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5
Lk1vZHVsZShlbXB0eU1vZHVsZUFycmF5KSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCBgV2Vi
QXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSA4IC8gODogdW5leHBlY3RlZCB2
ZXJzaW9uIG51bWJlciAke3ZlcnNpb259IGV4cGVjdGVkIDFgKTsKKyAgICBhc3NlcnQudGhyb3dz
KCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoZW1wdHlNb2R1bGVBcnJheSksIFdlYkFzc2Vt
Ymx5LkNvbXBpbGVFcnJvciwgYFdlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5
dGUgODogdW5leHBlY3RlZCB2ZXJzaW9uIG51bWJlciAke3ZlcnNpb259IGV4cGVjdGVkIDFgKTsK
IH0KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvbmFtZVNlY3Rpb24ud2FzbSBiL0pT
VGVzdHMvd2FzbS9zdHJlc3MvbmFtZVNlY3Rpb24ud2FzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNGIyMmIxYWVl
YTM4ZTQ2OWMzMjYwYmEzNGQ1ZGE0YTZkYjEyMTUzCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAx
MzQwOQp6Y21iVzhPTj9BdWRCQEx2UmFNdW0+TW9DTT0kWX4wZCM/PWBGd2deb0tfakkyZ3hHXklX
KFlHMnZaYHImWTZlJWcKei1SfGxkISQ+SUlBJmBzfHFDfkprKGQ0bH0xZCVMUUJvWWZHdFVSUGRW
ITxNalNmR2VTQjFPdUUjWUQ9MldiKnJlCno9aVlqQl9lPXVnPkFKNlQmLXZjcHxOSEt9WmdjTlc8
ZVpFQzteNSVHYilITjFfeEdkeT1PWD5ZYH0+WVBfbmhPdgp6SVVUYztHSjxYVnJRaGE7KTUrLVd7
bmNPbGpaZ1UtKkZOXl8pMU14R2BxfEdVYCVZJiYmcGhpdGNBYXplQHJvU30Kelp9YHZGQyRpMChK
Q210UEdgSyZ5eVMrSmlhZGN5SlhKXylWT0tzWDBON0g5X3JrbVN+QypOdX1KJD82TW58SlQtCnpP
ck0oVWUxN3JqVFpXQE1kJCVVSD9AZFF7aGomSklacnl1JWM9UHMpJklvRGBocntpaVRVJWtwKS1X
dWVYe25xYAp6ZCF5LTwkPmRXejtqKjIxZEdGVGRfVnkqJEc3PmM9b08lMy1qY34zdCtgR05Le2oh
VFJwZj99enAobiFpNjs4YyQKemNmTSRVS0lIS3k+VW1xeDNEMHFLNUZmO3ZDITIyRysjV151cUwh
YE80Y0M4bGI4cG0wKGdyanF6OXElSUp4WUB9CnpQU1N8flF1Rzw2RFZyIXNHZnBIS1hJa3lad2Y8
Q05UbD4qRG0tNz9wQys1Zk51PSMwIWBBWkJzKiZnMTNfbmxrcgp6VUFnb3l4XndSe3F2P2hfKWdI
ZF4hdUNzaHBMNmZiQ29rUm9edj5TJm5iQ0M1eShkUzB2ciM4Y2pgbD80P1krLUUKekd1XnprXn59
QV5UTylVM2dfOWc/LVhGTyY9MHtoZnNlNWxXK2BCcDFhdSorNlIzMiolVSk8aWd4dyQ+dXpKMnFT
CnpkKVVVS1B4cnBBJkVrIT8pc0J8XisrXzU1X2ZVSXlaKnd4KW5ZIzZDX2ArbH5hX3tjaCRqP0Jf
JlNjflVDeUBTVgp6R1AlMVdHdVdLby1ucn1FKV93a0VZLXhMWWM+QV97ZXtYKWs7bHwyV0M5Y1N3
T1lfI19rOT9weV5Kdz80ZTxFVDMKemlKaXY+X1JxRC09dj1GQzxNWFheRXgkSlFfamI+PmlZVSom
dFJlMVBFQl90YURjdCMxe2A8QllVKURocG9wMHkpCnpBQkl0I0UyJk8pSUp1SX5AOH53T2JuYCNa
eihefD1acU98d0V3T2EmXmZCayZhP0g4NmhJMyFCaDVjKll7SlM9RAp6Sm1iWD07SDhNRnhOc05a
an1GUjl2R2M3VzkmYHFlbEAwPTdIcVpaQ0NXODV4MDVVaz0mYGxabG1mOTVLRGsrPmwKekdwPCVI
I0k4ITJxdEo7ezxFcVB2QkhoeHRseWxMZ3hXZ3ZDNiEoZyhpV3V8SmFuKW10WmkkTFNxYXg0Y1BK
OWBgCnpyQTBpaFF2V3NoQU1eKjBSbmdWSF5Lc2N1RTtHdH4zTW4jdHQ3SzsxOEpFYmpOR2AtXyl4
VGNsVDxlcmNVZ1pBbAp6KVNyRStYcGhTX0R8MX43PD5gTFcmdjFkUURqRk5QSns/emBxR09sMGJm
IzRfYmhRRnF0KWVhSmpodDNQUFRXSD8KenVtSjt1Vm5yS1FiaT45O3FSdGwrb29vQn1ZUCM9VFI+
VmYqUiRsN1ghVWtRR0JyZTFvUHtKZTw1fGh7X0ZFUnVqCno9bFE9YXN4M3RXZyoxPiM/eDs7U0J3
QlNyIztMXjVzYX14eHo8KDkjM3wwbkBkR35SK2NZZEZ7e0M7THM9SUE7Tgp6eThhX0c2fE5zVmNS
ayU3eXY7K1IxWSQkO3sxdi1BSU9gdnthYyFASUJDcVoxcGlgZzFYI1Q/fVBKKyRNREp+TnYKemh+
MlFSTjhSVXhrUkdeUWBOU2VPVTtqMzg1SS00R19tYGt1SSkjaVUtRjFsXkV5amFLPVgzYFRNNVd9
WjFCYlFOCno/eml2JURqI0oyYCsxKUt1M2diX0ZhUEZtRilFVEQkVSF5cGg0Xzx4fEM4RHFUcXM+
SFd7dHRRRDx6Sj5GXmVJegp6MiZ4Qz9hbUxiUnslNWpuYlpYbmRKN3JDIThAISM5UmdfKiVGajFU
RjZTe0EzJk13Q35jUz04SnVDcWB5eEtPeEIKej4yZkM1KGZNNExLMmsrfWR+V2EjYWhkMEA4bGtQ
NFAkYHUkNG5nMjxGPyU9cUleZHI7SVBhNVBBQ0ZIc19sVHgpCnp4WFpxb25hbz9aVSFASDBqSF51
aHQhdl5JQThLdVJ2JW19VStnVXBwYnNWZjJmMExFTCM/MDZsa1hKN00qN3FkSQp6KD9RWEZPdyVH
dHpaXilne3khc0kjT0d1R2gyMWp0NHwxKkM9MVA3STtTSCk3bSZrb2B6akY3aGchTGdRQHpKaTIK
el82VzA4PGRkb1lfWihKNWIqZyppPnM1PEFiZFBlYnJrOXglMk9+Jkt7cj11QV5yMHNJQlEzPCpn
Typ0NzEodTcxCno7UlAjLTJ9R2Y+NDlHRHZ0eUUhP3hUfnpyalVfU3slcmkwez8mQmI+SEkoSzUh
SSlUKzRpbyhxWnQ1WExfakFZQQp6V1ZoYmdfNHxuM193TV9fRjRRdGtKWkFUT1hJRn10YTMrT3VB
SyYtc1prMD8+aDZMZkdgI3dIJjlMPGd1NW9AN2oKejVgfChHdiQ3fEhXRXI/JDVLM3g3c1Q1Uj42
Xm8pPTVET3QkVihGTXppZ3A8X3FLUml4QXNsRDtaISNAblYhREBICnpRcjFoeWckNGFKYm4jRDs0
UExWKm91V2B2QTU9dnMybm1+bCU+Pk9IcVhqKT5NTjtBY1doPjk1UUhHbj9ISkl+YAp6Xjk4fmVp
RylOMnd6ejAxQXxyV0BhPHBQcEt0VyhjYHMlTGJ7X2pqJWlYT1JsTVpXY0JURVB2Wm1GTzRPaWpT
eE0KelhaXjkxZiM7PUlKMkUyTE1maWghYWQzcVpjQTAzQ1QkVytnZ0RNaXR3VzxTc0VvQ2gyeEtn
PTZjUVMwQFBKQkkpCnplQyhJMCZCJmBrWlJVN0A2NlZVJiFSbEZiejNrekk/RFElJEFscmA9S31f
XmM1bShnQjU0fGhYVVh0ZWBQdmd3QQp6eCh3XjBLKzxVbENFUmgkMV5HfVExbk5TUlVeWWwpXiR2
TmVBcmZ+OF9aUUpxamQjfHo4emAqcHVkQSU8a1ZJLWAKem44UWE7MVolIUNAKTtBaShKc0Y1Qm4/
a3QzV2NMLUd9KGokU2p2anRsQk0rfFRURmlkNzFCI3tjT1VMQ0BGM1R1CnptVE93e0YyKERuI0w3
fHlgViMzRnpEI2RgK3BfcE5jUzc1I0ZsMT5wOCtLfG9qRGJXK3JocHF2bkpgbTM3JklSVgp6SXx6
YDc2VDtGOF9YVkcwWiFHSX4jb1h1OEJSOzJ+Yyt9X09DRUFqNXdUUjBzXyM2O3Y/c0thTUtnKX5O
QVJDeUsKeiYqQVFkZzYyTGFEJiV1M1oxWH0rN3Zac00xWC0tUGBFfnZXYC1EcnNVbll0fDFhemwt
a2stIUdMS2dUclVQcmJ9Cnp7cCt2NC1VZlg1dmtFcWwhTEBfYGBJV0lCU21ZJG1NKmlUWlhZSDd7
aVRfVXxCISVDRDEzKT4kMiVwaHBpI3kyKQp6WXhsS1Vkd2lkPyFjNVYwMDwkRlI2Q1M7N2x+SF9J
fEI0ZH05Km1hIyE8Pm9rWjxSNCNBeClwflhCIUJZUGZKMmMKejhPdSo8SHdOUmI3TUFOKTticGFx
NU1Jbk8hVmhLQyVne01QUGdNX0hESVM2ZHRQZi1nb2dwTndVWSk+cm1LNl5QCnppNlFlVlJZbkc2
bklofEpoS3dtKSYqazZfUzJ8NnIzOWw2S20wZk9aayRwfXFXKkBuQmlvZG9NTUcjK3pkR1JiMAp6
RzM5K3lZUkUoPVdJXzxsPH1vaTtDV19+b1h6Nz90UjNERyQ1LVh2TGQ3dntFMmJwWGUpLXpaS0cp
MF5qJDs2TEAKejN2LWIle0YtNilqSHtxPi1HdmJ5amhSM3FTKmd0dTs4R1R7RmRDRjIpaXp6Tikt
RF52NWMjX2FnI2V9WFFYenlMCnpnK2pvJT95MTM0V3VZKXVEMTxnPWhsc2VkN3oma0pEK1FuKT5g
e0A7TGc2dE5sKUN+VXUtPTVpaihrQyh1KD44Uwp6MzVCfTloITtibFduYG5VRD0lfEpGTyZwT0d6
KjBpNitBQTVMZVh2XnpVYiZLUmhiSGZncDR7QVIqSSs9NEQrUUIKemtlZkx3N3soek8maEElNj5a
TCZFcUVwOTJuWWJXVHJecG8ocDxxelEjQmUxR18oM3N8U3JpaSlhJEhRYkZ0Mz1YCnpWVjMhX2c8
dDg0YHFFVHUwMFIjV0YlWil8Q1B0I3xTJllQVTQ0MTRGKipHQTkzQG4wMlg4c2A3ajE4IzdrcGRo
fAp6NUslLV81JV8jI1lfZilOd25MbUd0PFU0KzhkaXk7dHl1JnQrUz5GZTxFJmEtdXtmej4wPDBG
b1RlY1k5dmowMjAKejhCbU9oXmNNX28jS0AyJHV+KH1wJnJxTFk7aShLVk1PPGNESFJxfHlGQnda
eHE9QikoakZHPzJ7V1ZXKUkjd0JCCnpZRG4qNE01eiEtaztZeVY5dXZaMjVgcnE7LVVQXyhEdUlt
VXJZT1NWVXNBYHZ4LVBsV00rZDQ3TCE1KEBCXnlvTgp6Z3JIUGBCYEQ3UHg0eUdWcFRAaz5yPiYk
Mjk3TjQ1Y3RRdVprTzhXYURBdDIoZyM7RmQxViNrS1kzSU5BS0BJKWsKejFkdnJAVUVIQHdYZTQr
UTFqPllmR3p1MWNPXzA+OGM/IVNVREFAeEolMEMkdU9qZVExdzg2YldFNmlBMUdrYSQzCnpwPnR0
IylKYXgkM2JfNURmbV9uTio4WlUpazRWd2xLaEY3SVFFTnNIYlQod243UG98NSYtSU5waExkKnhP
eHVpJgp6S1BXV1F0SWZfZypGeDllK3g3TUAqODwlP1VrITgqaVVBIWx8S3NvY15MTWc2SDZOVisy
SHY2Vkt8IXF1JE0yX2gKenFsb2JFemcxWm9sLSQ3VWZEUFdrJlZRe00jcWpibytwe1IlRjUoO2Jt
QWdLZmtDYzZFKDlAQmZgSlpibkJeMDswCnpHUmxKT0hRWm1KMnRIVS12TD5id2o5aTY9dzVCUkth
KWV8d1g3V0JaI058I0VfYWtmXmsxZTlEMHVtIVI/Q1dpZAp6OUR8RStwLUJxNlAyclhqYD5CMl9R
KFY+Uklybjt9YWVrbDZNaTNJenkwT1laYXVfYClfPlpAQ1N3S20kQW5AIUwKekxKTUZ8KXgzZkNZ
fEtTejdPZSNlIzkpdytpVWpWdyFCMG5HKEp9QHlCMzMzdVVoUmBAQEZhc0V3NWE0RD9JTX5fCnpX
bn1NSypKVnk5IS1ANyMwZnlUT1c+OF4mTWt+fUM1bHtESFBDJlQyZ2NwcytxQlhlcWglcVYpOCQk
Xnc4bF5PUAp6UUE4MXtvezJGdkBrbUpWSDZzS34+XzQ+JjklS1VTTFZAREtfPEdlNm0hVEJlenA2
eUdIKD9ybjJeTH1ySz9QWnsKenN5UTY8eWUzPGFHclJfXyl4eXxFQEI/TnVMeSZuUz1xKHJuT1Vl
cVlBPGBMTkI/e0Y+OzduKjdeZUVRX3NBej49Cno8MGt8Wjx2RDh8MWBoPHVRa0xTOVJsTWNmNiNK
fHhZfGxRYiNoR3dKYnVyYCRjcXdnNV95bUA2RVM2YCVmIXViMQp6QGEldCpgKXx1O3hFfUl2LU94
Wl9hUGNFN1NhJTlqITNRRUl3WEt6RCY2KE9IMUBWQG9BJHZ8fkNyU1N0R158KWIKekxUblcwPE59
UWslckt7eks+SUt1bzxmVms0c0VIeFAlMnZtVUo+WU10MEllVitIa2NAZH1XSTtMXz9NVkEmfHdT
CnpeUChreF8rY0hoM1lNfFJmU15jfnZgOEI8V0dyZjMxUHYhTlRETjYzb2NPdnRUc1B2c2w5Ylhj
OzFidVA0TXdARQp6SFlaZ0VnYk0mNTkoRG8qVXwzSHtPNSs4fFctUyM1NTxAdT52dFNQU2d0aUV4
WWBSM0U9fExXRmdJODlyVFRaT2EKelk7PEBTME1vUUFQRXJUWT1DUz9ec1plQGhmR2JhT2dVeU05
RCshJm5xeVh6ZXM7eGtua2c1JD1yPTREa1ZncGtjCnotWGN7cHphMSVjeVJ5NThSJjd8eUxTKWx8
cCY+c3VfOyZlJWw3MykhcD5YZSNfKUlqLUhOeylkc3dPVjdNWUwrYwp6KDVTP3VyQU00TSprKDdS
KVNgdkFpWGx5U1l+fGs3Xy07UH1mUHtKdyE3ZGM8N3xzJERQPX5SZzBYVHBWNjtNVUUKenw0UUcw
WVBTWmVQNFY3VW5ZQGxrSFFZUE5lXiRZRk1ZUFo9bGhoU0ZfOUhOfCpoMCtjJDFfZkZISD1lcyRr
b0xMCnozNkhWPW9ZMGo/S344fGpgUUtDPDYzYzlRV2I4RlAyQUx1LXIjOGZTaGIpJDFOdWxLRVcy
Kk1MKiNxbi1sOUM+Qgp6Kil0MHwrQTQje3ZQYiRsNzV0Pjk0THxCKGJtU2A+JHlpbHEyU249NnZh
MVk3M1ZlaiE7fGxJJXZFVzhGKSs5VEcKek5FMGkjWTR7eTJ4RF9zUEVPPkBVWCo2N2wmbEdMYmlv
az1PYD49N3IwMiYjQDRLQnFhWWgybm16bShjO2M7bjxVCnpFPT4lVjstOHBwZ0ctfWhhY1RQSXhI
TjhYc2o/fmN4Qk90PFQ5JTh5RitwI0hPSm17RXhXPVdYb3Y0fGBhQXtCeQp6IWEqUVF4T0J4WlV3
I1BBKDd6WClBKDBYTENANzI4NDluTzxDZzJGcXE8KT8zcXRLcE9FQyhIK1gtaUk3aH4rZD4KenJI
bWUzYEp6Pks8P1ckYj9BT093Y2pQfXk4PHdkb0xBMWp4JTVyK1JISmhsKU5ER3BQdksmc2JSYXNB
Jjk4c3FACnpfS3Yyd0l0QllqPHVvMUdkc3BsfVlgZD83VTdmUyY7PWZFNHJzPTwwTChmOyVMYlhl
dk9ZbSFwaz18NHlJKllFTQp6SGRMcF9iZy0hQ1poQCRBUUYxaG9LaCRsKHo3WE82dVY5UkUoV1Fk
WDBgNzhTRWg8an5VUkZaRTJyZGZ0dElUajMKejRfKFFOKTFpUyFEXkN2RVFmYmw9JGRINTUybVls
Q00pMVRoKCt8VnZYNl8wOGxZNF42NzQmK0dvPntYI3N+RUFQCnorQjI7a1k0bFVpSCV4SS1lSDRw
fDNsKmNHLWtFMntjeEVLPDVgYkNWQUZfJihVXm9RXlRnNkM7WCZ0a1cxeWd3QAp6PXVrTj5jO0Bv
TTFiVkE3cigrNHEzPW8rbUR9VFh5PT1kJkZqQ09uZGo2dCY/a1ZaUX1GMTJUN157dyQwSXJUTVIK
ekBmeDFWUG1lZCtmNmJ8alNYWU1wKD4mQnZVXnh0IXgtVUhNMCtxPXNZe01mQ0ZNI1dkcit7Kzc2
WFY3Y2dGaT5YCno2S2pgX2dmfUJSKE5AM3tGfjNrMUxMKEEyUXkxaHIweWU/enBgcyoxKSlnZ3R6
aWRVQl5aMXl3PDNmM3Q9WVI5SAp6Zzk4XjA/MiMqfGc9Y0J0R2NndlZQd2M1NSpMXldPQztgUypi
bi16PSFlWCs1RllIIzdNZVNJd1p0YT5fSDNSdlMKelBOVmhMQFQ/KmFiNHhAazBAKzB+dXt1SSNP
Ynhzd2JUeSFnTTctLTAjUm5jYUBDV2QqTFBqO2JWMCVHUXVHMmJ0CnpwMjt2QytmYFV1UURPKUIp
YD1ZJDBLJH5yZ1RRZy1UQ2FOT2ZtUiFlZ3ZrcUcmS2g1KWh3eD9BO0xBZilrJDNFSQp6anYtQVJM
P3A4cjRRVSFvMyhkZj9XaVUqY0ZvWVI8UE9gfE9ZNnpqdXpOODkwRHAzdWpEaiYyWUFiWUpOZ1lY
cSoKejZaQ1JiN0VvdT9CaEEhSHdQODhLYT49MT0zM1ZGb0lfODNecWFYeXFKSn41SlJGQmpJKT84
RWY2NGFedDghMEkrCnpoTjMtQ2lCNUdoQmtNVjgpWStGTkhRTzEyZDtQRlRsIzg9ZyRRZ0JxYmNR
KlA3cSpeWl5ARHwpZWQtN1IrN3wkSQp6aHg/X0FhOzRgI0AwO3BieU50TH5ebzNqJCYqb3g5MW9o
TSVhUmFhd2ZyNnVPbz5yMjQ5Y0M3WG92TWN8bnVZezgKekh7VX0/JSRGQUpgc3R1cXo2QyNkNjUx
NFhqdDNfIUNRbDBwN0JqMCY5UnZePlM5TmlRQUdKZWFFdDgjOWI7S3pQCnpJc2dNSjFNcS0pMHZy
bEVyXmkhd3h0Z3ZRdTB3LUlsZ3cocFcpZjtXdikxX31jeEleZUxoUFZ9cUYwY3R5cmI+SQp6JlZo
QSErajJmWW05PXhgJlMlQmxWd1QzVzwkJiRSMFpBdyNXVEMqRCojd3hHNUQ8SnlOdF8yPGl9Xi1q
U3J4NDsKendKalRTajQtRHJfUjhfckVLWCNpWH0jPH50N3hxMSE4SCFYKXErTigwfGhqTDY/IV54
eFdLYnZXKX4mVmgoTHZfCnpuTjF5WUw4TDgwKjRaTm82P3JEMiNwQGM0JVcwbFFGM2IjVFJCdHU0
bjF9aEFBdSQrajNPek5ZZmFGVjZvO1oqPQp6cU5ZbE5tdClJM3htbz4/cClxb344QmR4QSZ+ZG9W
MUpIKD8oTDlnbm4jVyswX3w7NT8xbnFqUiEofD5yREQkTUkKekNEOXpOXjY7MzE1RUskN0lKPHU0
bmtARHdFYnczckVnRHI0bztuUnxmKzA0MjEpJEhveFRCUz9VUyR4Z3NrbmFQCnpUb1c2VzEzPUFj
SyN0Jj5JZFVaOGFLMEQ+LSZ6ZUpKdDxhJk8+aCRJNDhPbi0hOz1QVTgjV0o4cWhzcWolRnNnKAp6
UWMwKFc+YmxoR0l5eE9rPnBFLXJASkx8Pjk0VHhDOUZxVlhaTnF5JmJ4e3w0SEI3M15jKmlhYjRe
a29QQXU5JXcKekY1JHVTMnA7Nl5LTlQlPUpqZXxKNTJ9R2hNbHc3fHU1SXcodlEjWXIwJWp6cGJ2
QmpgWlBUSH03OTI/Ums+K2FmCno7NmtOVl9pMUxjNyM8OFY1OXxnIW44Qjs2aCNDXyZHNFJOZTA0
PFE7UGdVQCVEe0t5aEorNVdgbTleNUA4eUpCUQp6TEplak4/clZAQEs2fUlNVStmaC1kelZ3cnNs
SVBgQyQofWtWTDVRMEsmPGh7aUlUa1oyUW5RYmtORG84P2YyTDYKemF8OVBUYVdzZk8hRyVhTWhE
KTViOXdqNFNCaFVaWC11ejU/eHI8flBoZFNgfVhxVll6fEY/UHJHbSNtR213SmxtCnpOI3s1c0Ih
X3d7XjxNPDhgM0Z3VDt6KUttcjctYVdgKDIrLSUwemI7RXFtIU1tXkF1UDhEPC12NUMkZExNbS12
Pwp6c1JoR140NjRuVXVxbmRrZUFyd0ZuflB6eTVqSWJSJX0ydUtxbWNPa0FzTC1VTUR9cXhxfjtW
MFg/LWNUWWlZUTQKemdnc2pMZEgjPWpGRncrSGopPiZvZnhWVEFTWlIpQCUyNyhqNX1aPDRCMUkm
LWd1fVZpVmd6NTwkUmZKdisrMmJUCnpSViRySV5ebX5vKkZeRytPYGNnR0khSTAtI09TdDE+cF5+
OzE0MmxJPzE4flNuYzVxS1cqMio+Zi1Lb3Y1OGBDKwp6T3BxdmgjaWR3NlckKFBicV5VZ2AoLUpM
djdjYSQ8RV8pbDdWaE5iTkNvYVgzRj8lMW02aWR3UEBuWSZzKChvZ1IKekRebXJqIzxmJSU7IVdz
YExpUlJELUFHPX5oPmc9YGEzZGxLM3c9YWQ9YzA/QmJsQVQza3wmKWNFJlZNXzYmNmhECnoxKURq
e1AtYClwZUNaJEJFOHlKOTlNU0hIJG1MKFJjU2JvdVRobWsrVWEhbzUmKDZvWihtVE08XjcoTlRq
YFAzUQp6ZlZUN0JVJi1URkd2e0FoJHM7eGctOF9uVEVZezZlQmo7U3EtfWw9NXF8U2RnVD4xZk54
dk5KZGojbz9iX19mc2kKemBCI2BLeX1ObTU2dXFrNTU0IUx6TVlRfUdNWkNLRjF4NH5rQTVXeGpA
WkNoI2RAfDloem17ayhla2pwZHs2PURCCno+Qz1YZFp2QUNNelZ1Tjxafmk/KmVgKS1zKXJGVigq
WEV4STQzXiZES1hLZXcxck49PjA2NGskM0Jzd3h1TkY+Ywp6IV9rV2A/IUJjb3l0I1I2PWs4bmk7
XjV4cW8lUUJ9ZnJzRGglWSNRJl8wN2lnYFApMGdUaVpLKHFldGgqcFAkXkcKemo/TmUoYzcxTyYr
SXF8YGh0RVdZbGhPMlRNP1gzXmR5Kk9OUDVFZUheTGY1SCo/d1g4X3tJbHx7P2Uoa0pBRDQ3CnpK
OWwwbGUoMXYrKW1vcm49Y1ZiO21PTGxIPiFYcXZaZn1weVl5SSR6aTROYmNZZGJJUylkYmh5cD0m
d18qV2NORQp6eUsmKG0mV0YhOT5Qd15OLV8/QlpAJFReVCNDc00kQDM8SmcoUmdxMyhaPjZsdVFB
QGdAY3FRYigmclA4JDJUYFYKSjVaYD9LZSpzODFUakJyIQoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAx
CgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3N0cmVzcy9zdHJlYW1pbmctYmFzaWMuanMgYi9K
U1Rlc3RzL3dhc20vc3RyZXNzL3N0cmVhbWluZy1iYXNpYy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iM2ZiYzI0
NzlmNzIxNjNkZmFkMzIxMDQwNTZiYTI3NDM1OTIzNWRhCi0tLSAvZGV2L251bGwKKysrIGIvSlNU
ZXN0cy93YXNtL3N0cmVzcy9zdHJlYW1pbmctYmFzaWMuanMKQEAgLTAsMCArMSwxOCBAQAoraW1w
b3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcyc7CisKK3ZhciBkYXRhID0gcmVhZCgi
Li9uYW1lU2VjdGlvbi53YXNtIiwgImJpbmFyeSIpOworCitmdW5jdGlvbiBjaGVjayhzdGVwKQor
eworICAgIHZhciBwYXJzZXIgPSAkdm0uY3JlYXRlV2FzbVN0cmVhbWluZ1BhcnNlcigpOworICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5ieXRlTGVuZ3RoOyBpICs9IHN0ZXApIHsKKyAgICAg
ICAgcGFyc2VyLmFkZEJ5dGVzKGRhdGEuc3ViYXJyYXkoaSwgaSArIE1hdGgubWluKHN0ZXAsIGRh
dGEuYnl0ZUxlbmd0aCAtIGkpKSk7CisgICAgfQorICAgIGFzc2VydC5lcShwYXJzZXIuZmluYWxp
emUoKSwgNyk7Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTA7ICsraSkKKyAgICBjaGVjayhp
ICsgMSk7CitjaGVjaygxMDApOworY2hlY2soMTAwMCk7CitjaGVjaygyMDAwKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>348142</attachid>
            <date>2018-08-27 07:20:45 -0700</date>
            <delta_ts>2018-08-27 08:26:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-188943-20180827232044.patch</filename>
            <type>text/plain</type>
            <size>170289</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM1MzU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
ZDJhYzBiZmEwNjcxODA3MDdlMGE1YmI1YWFlNzRlZjJlYjNhZTYwLi4wYjUzMWFiZDhmZmM4Yjg2
MjQ0ZTYxODQzZDUxMmIxZmU1YWFhZDgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNjUgQEAKKzIwMTgtMDgtMjcgIFl1c3VrZSBTdXp1a2kgIDx5dXN1a2VzdXp1a2lAc2xv
d3N0YXJ0Lm9yZz4KKworICAgICAgICBbV2ViQXNzZW1ibHldIFBhcnNlIHdhc20gbW9kdWxlcyBp
biBhIHN0cmVhbWluZyBmYXNoaW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xODg5NDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgV2FzbTo6U3RyZWFtaW5nUGFyc2VyLCB3aGlj
aCBwYXJzZXMgd2FzbSBiaW5hcnkgaW4gYSBzdHJlYW1pbmcgZmFzaGlvbi4KKyAgICAgICAgQ3Vy
cmVudGx5LCB0aGlzIFN0cmVhbWluZ1BhcnNlciBpcyBub3QgZW5hYmxlZCBhbmQgaW50ZWdyYXRl
ZC4gSW4gc3Vic2VxdWVudCBwYXRjaGVzLAorICAgICAgICB3ZSBzdGFydCBpbnRlZ3JhdGluZyBp
dCBpbnRvIEJCUVBsYW4gYW5kIGRyb3BwaW5nIHRoZSBvbGQgTW9kdWxlUGFyc2VyLgorCisgICAg
ICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiB0b29scy9KU0RvbGxhclZNLmNwcDoKKyAgICAgICAg
KFdURjo6V2FzbVN0cmVhbWluZ1BhcnNlcjo6V2FzbVN0cmVhbWluZ1BhcnNlcik6CisgICAgICAg
IChXVEY6Oldhc21TdHJlYW1pbmdQYXJzZXI6OmNyZWF0ZSk6CisgICAgICAgIChXVEY6Oldhc21T
dHJlYW1pbmdQYXJzZXI6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXVEY6Oldhc21TdHJl
YW1pbmdQYXJzZXI6OnN0cmVhbWluZ1BhcnNlcik6CisgICAgICAgIChXVEY6Oldhc21TdHJlYW1p
bmdQYXJzZXI6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdURjo6ZnVuY3Rpb25XYXNtU3Ry
ZWFtaW5nUGFyc2VyQWRkQnl0ZXMpOgorICAgICAgICAoV1RGOjpmdW5jdGlvbldhc21TdHJlYW1p
bmdQYXJzZXJGaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uQ3JlYXRlV2FzbVN0cmVh
bWluZ1BhcnNlcik6CisgICAgICAgIChKU0M6OkpTRG9sbGFyVk06OmZpbmlzaENyZWF0aW9uKToK
KyAgICAgICAgVGhpcyBvYmplY3QgaXMgaW50cm9kdWNlZCBmb3IgdGVzdGluZyBwdXJwb3NlLiBB
ZGRlZCBuZXcgc3RyZXNzIHRlc3QgdXNlcyB0aGlzIGludGVyZmFjZQorICAgICAgICB0byB0ZXN0
IHN0cmVhbWluZyBwYXJzZXIgaW4gdGhlIEpTQyBzaGVsbC4KKworICAgICAgICAqIHdhc20vV2Fz
bUJCUVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpCQlFQbGFuKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSk6CisgICAg
ICAgIChKU0M6Oldhc206OkJCUVBsYW46OnByZXBhcmUpOgorICAgICAgICAoSlNDOjpXYXNtOjpC
QlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6
Y29tcGxldGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjp3b3JrKToKKyAgICAgICAg
KiB3YXNtL1dhc21CQlFQbGFuLmg6CisgICAgICAgIEJCUVBsYW4gaGFzIG1fc291cmNlLCBidXQg
b25jZSBNb2R1bGVJbmZvcm1hdGlvbiBpcyBwYXJzZWQsIGl0IGlzIG5vIGxvbmdlciBuZWNlc3Nh
cnkuCisgICAgICAgIEluIHN1YnNlcXVlbnQgcGF0Y2hlcywgd2Ugd2lsbCByZW1vdmUgdGhpcywg
YW5kIHN0cmVhbSB0aGUgZGF0YSBpbnRvIHRoZSBCQlFQbGFuLgorCisgICAgICAgICogd2FzbS9X
YXNtRm9ybWF0Lmg6CisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbjo6TW9kdWxlSW5mb3JtYXRpb24p
OgorICAgICAgICAqIHdhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmg6CisgICAgICAgIE9uZSBv
ZiB0aGUgbGFyZ2VzdCBjaGFuZ2UgaW4gdGhpcyBwYXRjaCBpcyB0aGF0IE1vZHVsZUluZm9ybWF0
aW9uIG5vIGxvbmdlciBob2xkcyBzb3VyY2UgYnl0ZXMsCisgICAgICAgIHNpbmNlIHNvdXJjZSBi
eXRlcyBjYW4gYmUgYWRkZWQgaW4gYSBzdHJlYW1pbmcgZmFzaGlvbi4gSW5zdGVhZCBvZiBob2xk
aW5nIGFsbCB0aGUgc291cmNlIGJ5dGVzCisgICAgICAgIGluIE1vZHVsZUluZm9ybWF0aW9uLCBl
YWNoIGZ1bmN0aW9uIChNb2R1bGVJbmZvcm1hdGlvbjo6ZnVuY3Rpb25zLCBGdW5jdGlvbkRhdGEp
IHNob3VsZCBoYXZlCisgICAgICAgIFZlY3Rvcjx1aW50OF90PiBmb3IgaXRzIGRhdGEuIFRoaXMg
ZGF0YSBpcyBldmVudHVhbGx5IGZpbGxlZCBieSBTdHJlYW1pbmdQYXJzZXIsIGFuZCBjb21waWxp
bmcKKyAgICAgICAgYSBmdW5jdGlvbiB3aXRoIHRoaXMgZGF0YSBjYW4gYmUgZG9uZSBjb25jdXJy
ZW50bHkgd2l0aCBTdHJlYW1pbmdQYXJzZXIuCisKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxl
SW5mb3JtYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZUluZm9ybWF0
aW9uOjptZW1vcnlDb3VudCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZUluZm9y
bWF0aW9uOjp0YWJsZUNvdW50IGNvbnN0KToKKyAgICAgICAgbWVtb3J5Q291bnQgYW5kIHRhYmxl
Q291bnQgc2hvdWxkIGJlIHJlY29yZWRlZCBpbiBNb2R1bGVJbmZvcm1hdGlvbi4KKworICAgICAg
ICAqIHdhc20vV2FzbU1vZHVsZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVs
ZVBhcnNlcjo6cGFyc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjptYWtlSTMySW5pdEV4cHIpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlVHlwZSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VJbXBvcnQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb24p
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlUmVzaXph
YmxlTGltaXRzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpw
YXJzZVRhYmxlSGVscGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFy
c2VyOjpwYXJzZVRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFy
c2VyOjpwYXJzZU1lbW9yeUhlbHBlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206Ok1v
ZHVsZVBhcnNlcjo6cGFyc2VNZW1vcnkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpN
b2R1bGVQYXJzZXI6OnBhcnNlR2xvYmFsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6
TW9kdWxlUGFyc2VyOjpwYXJzZUV4cG9ydCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206
Ok1vZHVsZVBhcnNlcjo6cGFyc2VTdGFydCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206
Ok1vZHVsZVBhcnNlcjo6cGFyc2VFbGVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2Fz
bTo6TW9kdWxlUGFyc2VyOjpwYXJzZUNvZGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNt
OjpNb2R1bGVQYXJzZXI6OnBhcnNlSW5pdEV4cHIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpX
YXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlR2xvYmFsVHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZUN1c3RvbSk6IERlbGV0ZWQuCisgICAgICAgIEV4
dHJhY3Qgc2VjdGlvbiBwYXJzaW5nIGNvZGUgb3V0IGZyb20gTW9kdWxlUGFyc2VyLiBXZSBjcmVh
dGUgU2VjdGlvblBhcnNlciBhbmQgTW9kdWxlUGFyc2VyIHVzZXMgaXQuCisgICAgICAgIFNlY3Rp
b25QYXJzZXIgaXMgYWxzbyB1c2VkIGJ5IFN0cmVhbWluZ1BhcnNlci4KKworICAgICAgICAqIHdh
c20vV2FzbU1vZHVsZVBhcnNlci5oOgorICAgICAgICAqIHdhc20vV2FzbU5hbWVTZWN0aW9uLmg6
CisgICAgICAgIChKU0M6Oldhc206Ok5hbWVTZWN0aW9uOjpOYW1lU2VjdGlvbik6CisgICAgICAg
IChKU0M6Oldhc206Ok5hbWVTZWN0aW9uOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpO
YW1lU2VjdGlvbjo6c2V0SGFzaCk6CisgICAgICAgIEhhc2ggY2FsY3VsYXRpb24gaXMgZGVmZXJy
ZWQgc2luY2UgYWxsIHRoZSBzb3VyY2UgaXMgbm90IGF2YWlsYWJsZSBpbiBzdHJlYW1pbmcgcGFy
c2luZy4KKworICAgICAgICAqIHdhc20vV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmNwcDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6TmFtZVNlY3Rpb25QYXJzZXI6OnBhcnNlKToKKyAgICAgICAgKiB3YXNt
L1dhc21OYW1lU2VjdGlvblBhcnNlci5oOgorICAgICAgICBVc2UgUmVmPE5hbWVTZWN0aW9uPi4K
KworICAgICAgICAqIHdhc20vV2FzbU9NR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpP
TUdQbGFuOjp3b3JrKToKKyAgICAgICAgV2FzbTo6UGxhbiBubyBsb25nZXIgaGF2ZSBtX3NvdXJj
ZSBzaW5jZSBkYXRhIHdpbGwgYmUgZXZlbnR1YWxseSBmaWxsZWQgaW4gYSBzdHJlYW1pbmcgZmFz
aGlvbi4KKyAgICAgICAgT01HUGxhbiBjYW4gZ2V0IGRhdGEgb2YgdGhlIGZ1bmN0aW9uIGJ5IHVz
aW5nIE1vZHVsZUluZm9ybWF0aW9uOjpmdW5jdGlvbnMuCisKKyAgICAgICAgKiB3YXNtL1dhc21Q
YXJzZXIuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGFyc2VyOjpzb3VyY2UgY29uc3QpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpQYXJzZXI6Omxlbmd0aCBjb25zdCk6CisgICAgICAgIChKU0M6Oldh
c206OlBhcnNlcjo6b2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGFyc2VyOjpm
YWlsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6bWFrZUkzMkluaXRFeHByKToKKyAgICAg
ICAgKiB3YXNtL1dhc21QbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6UGxhbik6
CisgICAgICAgIFdhc206OlBsYW4gc2hvdWxkIG5vdCBoYXZlIGFsbCB0aGUgc291cmNlIGFwcmlv
cmkuIFN0cmVhbWVkIGRhdGEgd2lsbCBiZSBwdW1wZWQgZnJvbSB0aGUgcHJvdmlkZXIuCisKKyAg
ICAgICAgKiB3YXNtL1dhc21QbGFuLmg6CisgICAgICAgICogd2FzbS9XYXNtU2VjdGlvblBhcnNl
ci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQ
YXJzZXIuY3BwLgorICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZVR5cGUp
OgorICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZUltcG9ydCk6CisgICAg
ICAgIChKU0M6Oldhc206OlNlY3Rpb25QYXJzZXI6OnBhcnNlRnVuY3Rpb24pOgorICAgICAgICAo
SlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZVJlc2l6YWJsZUxpbWl0cyk6CisgICAgICAg
IChKU0M6Oldhc206OlNlY3Rpb25QYXJzZXI6OnBhcnNlVGFibGVIZWxwZXIpOgorICAgICAgICAo
SlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZVRhYmxlKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6U2VjdGlvblBhcnNlcjo6cGFyc2VNZW1vcnlIZWxwZXIpOgorICAgICAgICAoSlNDOjpXYXNt
OjpTZWN0aW9uUGFyc2VyOjpwYXJzZU1lbW9yeSk6CisgICAgICAgIChKU0M6Oldhc206OlNlY3Rp
b25QYXJzZXI6OnBhcnNlR2xvYmFsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNl
cjo6cGFyc2VFeHBvcnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJz
ZVN0YXJ0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VFbGVtZW50
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VDb2RlKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VJbml0RXhwcik6CisgICAgICAgIChK
U0M6Oldhc206OlNlY3Rpb25QYXJzZXI6OnBhcnNlR2xvYmFsVHlwZSk6CisgICAgICAgIChKU0M6
Oldhc206OlNlY3Rpb25QYXJzZXI6OnBhcnNlRGF0YSk6CisgICAgICAgIChKU0M6Oldhc206OlNl
Y3Rpb25QYXJzZXI6OnBhcnNlQ3VzdG9tKToKKyAgICAgICAgKiB3YXNtL1dhc21TZWN0aW9uUGFy
c2VyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQ
YXJzZXIuaC4KKyAgICAgICAgU2VjdGlvblBhcnNlciBpcyBleHRyYWN0ZWQgZnJvbSBNb2R1bGVQ
YXJzZXIuIEFuZCBpdCBpcyB1c2VkIGJvdGggdGhlIG9sZCAoY3VycmVudGx5IHdvcmtpbmcpIE1v
ZHVsZVBhcnNlcgorICAgICAgICBhbmQgdGhlIG5ldyBTdHJlYW1pbmdQYXJzZXIuCisKKyAgICAg
ICAgKiB3YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
V2FzbTo6cGFyc2VVSW50Nyk6CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6
ZmFpbCk6CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6U3RyZWFtaW5nUGFy
c2VyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U3RyZWFtaW5nUGFyc2VyOjpwYXJzZU1vZHVsZUhl
YWRlcik6CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6cGFyc2VTZWN0aW9u
SGVhZGVyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U3RyZWFtaW5nUGFyc2VyOjpwYXJzZVNlY3Rp
b25TaXplKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U3RyZWFtaW5nUGFyc2VyOjpwYXJzZUNvZGVT
ZWN0aW9uU2l6ZSk6CisgICAgICAgIENvZGUgc2VjdGlvbiBpbiBXYXNtIGJpbmFyeSBpcyBzcGVj
aWFsbHkgaGFuZGxlZCBjb21wYXJlZCB3aXRoIHRoZSBvdGhlciBzZWN0aW9ucyBzaW5jZSBpdCBp
bmNsdWRlcworICAgICAgICBidW5jaCBvZiBmdW5jdGlvbnMuIFN0cmVhbWluZ1BhcnNlciBleHRy
YWN0cyBlYWNoIGZ1bmN0aW9uIGluIGEgc3RyZWFtaW5nIGZhc2hpb24gYW5kIGVuYWJsZSBzdHJl
YW1pbmcKKyAgICAgICAgdmFsaWRhdGlvbiAvIGNvbXBpbGF0aW9uIG9mIFdhc20gZnVuY3Rpb25z
LgorCisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6cGFyc2VGdW5jdGlvbkhl
YWRlcik6CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6cGFyc2VGdW5jdGlv
bkJvZHkpOgorICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OnBhcnNlU2VjdGlv
bkJvZHkpOgorICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmNvbnN1bWUpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmNvbnN1bWVWYXJVSW50MzIpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6U3RyZWFtaW5nUGFyc2VyOjpmYWlsT25TdGF0ZSk6CisgICAgICAgIChKU0M6
Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6ZmluYWxpemUpOgorICAgICAgICAqIHdhc20vV2FzbVN0
cmVhbWluZ1BhcnNlci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6U3RyZWFtaW5nUGFy
c2VyOjphZGRCeXRlcyk6CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6ZXJy
b3JNZXNzYWdlIGNvbnN0KToKKyAgICAgICAgVGhpcyBpcyBvdXIgbmV3IFN0cmVhbWluZ1BhcnNl
ciBpbXBsZW1lbnRhdGlvbi4gU3RyZWFtaW5nUGFyc2VyOjpjb25zdW1lWFhYIGZ1bmN0aW9ucyBn
ZXQgZGF0YSwgYW5kCisgICAgICAgIFN0cmVhbWluZ1BhcnNlcjo6cGFyc2VYWFggZnVuY3Rpb25z
IHBhcnNlIGNvbnN1bWVkIGRhdGEuIFRoZSB1c2VyIG9mIFN0cmVhbWluZ1BhcnNlciBjYWxscwor
ICAgICAgICBTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKCkgdG8gcHVtcCB0aGUgYnl0ZXMgc3Ry
ZWFtIGludG8gdGhlIHBhcnNlci4gQW5kIG9uY2UgYWxsIHRoZSBkYXRhIGlzIHB1bXBlZCwKKyAg
ICAgICAgdGhlIHVzZXIgY2FsbHMgU3RyZWFtaW5nUGFyc2VyOjpmaW5hbGl6ZS4gU3RyZWFtaW5n
UGFyc2VyIGlzIGEgc3RhdGUgbWFjaGluZSB3aGljaCBmZWVkcyB0aGUgaW5jb21pbmcKKyAgICAg
ICAgYnl0ZSBzdHJlYW0uCisKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUu
Y3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpzb3VyY2UgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICBBbGwgdGhlIHNvdXJjZSBzaG91bGQgbm90IGJlIGhlbGQuCisKKyAg
ICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaDoKKyAgICAgICAgKiB3YXNtL2pz
L1dlYkFzc2VtYmx5UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlWYWxp
ZGF0ZUZ1bmMpOgorCiAyMDE4LTA4LTI0ICBZdXN1a2UgU3V6dWtpICA8eXVzdWtlc3V6dWtpQHNs
b3dzdGFydC5vcmc+CiAKICAgICAgICAgW0pTQ10gQXJyYXkucHJvdG90eXBlLnJldmVyc2UgbW9k
aWZpZXMgSlNJbW11dGFibGVCdXR0ZXJmbHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdl
TG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggYzJmMWVmYTE5ZmE1ODQ0NmI4MGQ2MjQ0
YmRiZDk1YWVkOTFiYWNhNS4uNWJhZjA1M2RiMGRkZjczNjgwYmM1YzZiMjk3NWU2ZDY1OTlkZGEx
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxOC0wOC0yNyAgWXVzdWtlIFN1enVraSAgPHl1c3Vr
ZXN1enVraUBzbG93c3RhcnQub3JnPgorCisgICAgICAgIFtXZWJBc3NlbWJseV0gUGFyc2Ugd2Fz
bSBtb2R1bGVzIGluIGEgc3RyZWFtaW5nIGZhc2hpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4ODk0MworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBtYXhCeXRlTGVuZ3RoIGZ1bmN0aW9uIHRvIGdl
dCB0aGUgbWF4aW11bSBzaXplIGZvciBULgorCisgICAgICAgICogd3RmL0xFQkRlY29kZXIuaDoK
KyAgICAgICAgKFdURjo6TEVCRGVjb2Rlcjo6bWF4Qnl0ZUxlbmd0aCk6CisgICAgICAgIChXVEY6
OkxFQkRlY29kZXI6OmRlY29kZVVJbnQpOgorICAgICAgICAoV1RGOjpMRUJEZWNvZGVyOjpkZWNv
ZGVJbnQpOgorCiAyMDE4LTA4LTI1ICBZdXN1a2UgU3V6dWtpICA8eXVzdWtlc3V6dWtpQHNsb3dz
dGFydC5vcmc+CiAKICAgICAgICAgU2hyaW5rIHNpemUgb2YgWE1MSHR0cFJlcXVlc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMTdhNDhiZGE2ZDRiZTM5N2IwOGU5NDZjYmQ0ODYx
MDY3NDc5OWRhZS4uNDI2ZDE5ZGNlOTU0ODJlODUxYmZlOWM5Mzg3ZDJjZjYzM2Y1NWQ0OCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE3MzQsNiArMTczNCw4IEBACiAJCUUzOTNB
REQ4MUZFNzAyRDAwMDIyRDY4MSAvKiBXZWFrTWFwSW1wbElubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzOTNBREQ3MUZFNzAyQ0MwMDIyRDY4
MSAvKiBXZWFrTWFwSW1wbElubGluZXMuaCAqLzsgfTsKIAkJRTM5RDQ1RjUxRDM5MDA1NjAwQjNC
Mzc3IC8qIEludGVycHJldGVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTM5RDlEODQxRDM5MDAwNjAwNjY3MjgyIC8qIEludGVycHJldGVy
SW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUUzOURBNEE3MUI3RThCN0MwMDg0RjMzQSAvKiBKU01vZHVsZVJlY29yZC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM5REE0QTUxQjdFOEI3QzAw
ODRGMzNBIC8qIEpTTW9kdWxlUmVjb3JkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJRTNBMDUzMUEyMTM0MkI2ODAwMjJFQzE0IC8qIFdhc21TdHJl
YW1pbmdQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUzQTA1MzE2MjEzNDJCNjYwMDIyRUMxNCAvKiBXYXNtU3RyZWFtaW5nUGFyc2VyLmggKi87
IH07CisJCUUzQTA1MzFDMjEzNDJCNjgwMDIyRUMxNCAvKiBXYXNtU2VjdGlvblBhcnNlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTNBMDUzMTgyMTM0
MkI2NzAwMjJFQzE0IC8qIFdhc21TZWN0aW9uUGFyc2VyLmggKi87IH07CiAJCUUzQTMyQkM3MUZD
ODMxNDcwMDdEN0U3NiAvKiBXZWFrTWFwSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTNBMzJCQzYxRkM4MzEyRTAwN0Q3RTc2IC8qIFdlYWtNYXBJ
bXBsLmggKi87IH07CiAJCUUzQTQyMTQzMUQ2RjU4OTMwMDA3QzYxNyAvKiBQcmVjaXNlSnVtcFRh
cmdldHNJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFM0E0MjE0MjFENkY1ODhGMDAwN0M2MTcgLyogUHJlY2lzZUp1bXBUYXJnZXRzSW5saW5l
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUz
QkZEMEJDMURBRjgwOEUwMDY1REVBMiAvKiBBY2Nlc3NDYXNlU25pcHBldFBhcmFtcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTNCRkQwQkExREFGODA3
QzAwNjVERUEyIC8qIEFjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmggKi87IH07CkBAIC00NjIyLDYg
KzQ2MjQsMTAgQEAKIAkJRTM5RDlEODQxRDM5MDAwNjAwNjY3MjgyIC8qIEludGVycHJldGVySW5s
aW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlcnByZXRlcklubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM5REE0QTQxQjdFOEI3QzAwODRG
MzNBIC8qIEpTTW9kdWxlUmVjb3JkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTTW9kdWxlUmVjb3JkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTM5REE0QTUxQjdFOEI3QzAwODRGMzNBIC8qIEpTTW9kdWxlUmVjb3JkLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTW9kdWxlUmVjb3JkLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUUzQTA1MzE2MjEzNDJCNjYwMDIyRUMxNCAvKiBXYXNtU3RyZWFtaW5nUGFy
c2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21TdHJlYW1pbmdQYXJz
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTNBMDUzMTcyMTM0MkI2NjAwMjJF
QzE0IC8qIFdhc21TZWN0aW9uUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdhc21TZWN0aW9uUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRTNBMDUzMTgyMTM0MkI2NzAwMjJFQzE0IC8qIFdhc21TZWN0aW9uUGFyc2VyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21TZWN0aW9uUGFyc2VyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzQTA1MzE5MjEzNDJCNjcwMDIyRUMxNCAvKiBXYXNt
U3RyZWFtaW5nUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdhc21TdHJlYW1pbmdQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
M0EzMkJDNTFGQzgzMTJEMDA3RDdFNzYgLyogV2Vha01hcEltcGwuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Vha01hcEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFM0EzMkJDNjFGQzgzMTJFMDA3RDdFNzYgLyogV2Vha01hcEltcGwuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vha01hcEltcGwuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTNBNDIxNDIxRDZGNTg4RjAwMDdDNjE3IC8qIFByZWNpc2VK
dW1wVGFyZ2V0c0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJl
Y2lzZUp1bXBUYXJnZXRzSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
NjM0OCw5ICs2MzU0LDEzIEBACiAJCQkJNTNGNDBFOEMxRDU5MDFGMjAwOTlBMUI2IC8qIFdhc21Q
YXJzZXIuaCAqLywKIAkJCQk1MzEzNzRCRTFENUNFOTUwMDBBRjdBMEIgLyogV2FzbVBsYW4uY3Bw
ICovLAogCQkJCTUzMTM3NEJDMUQ1Q0U2NzYwMEFGN0EwQiAvKiBXYXNtUGxhbi5oICovLAorCQkJ
CUUzQTA1MzE3MjEzNDJCNjYwMDIyRUMxNCAvKiBXYXNtU2VjdGlvblBhcnNlci5jcHAgKi8sCisJ
CQkJRTNBMDUzMTgyMTM0MkI2NzAwMjJFQzE0IC8qIFdhc21TZWN0aW9uUGFyc2VyLmggKi8sCiAJ
CQkJNTNGNDBFODQxRDU4Rjk3NzAwOTlBMUI2IC8qIFdhc21TZWN0aW9ucy5oICovLAogCQkJCUFE
NzQzOEJFMUUwNDU3OTIwMEZEMEMyQSAvKiBXYXNtU2lnbmF0dXJlLmNwcCAqLywKIAkJCQlBRDc0
MzhCRjFFMDQ1NzkyMDBGRDBDMkEgLyogV2FzbVNpZ25hdHVyZS5oICovLAorCQkJCUUzQTA1MzE5
MjEzNDJCNjcwMDIyRUMxNCAvKiBXYXNtU3RyZWFtaW5nUGFyc2VyLmNwcCAqLywKKwkJCQlFM0Ew
NTMxNjIxMzQyQjY2MDAyMkVDMTQgLyogV2FzbVN0cmVhbWluZ1BhcnNlci5oICovLAogCQkJCUFE
NUMzNkUzMUY2OUVDOEIwMDBCQ0FBRiAvKiBXYXNtVGFibGUuY3BwICovLAogCQkJCUFENUMzNkU0
MUY2OUVDOEIwMDBCQ0FBRiAvKiBXYXNtVGFibGUuaCAqLywKIAkJCQk1MjUwRDJDRjFFOERBMDVB
MDAyOUE5MzIgLyogV2FzbVRodW5rcy5jcHAgKi8sCkBAIC04NDQ4LDcgKzg0NTgsNiBAQAogCQkJ
CUMyRkNBRTEzMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNjY2RUMwMTgzNTY2RjkwMEQwMTdGMSAvKiBCeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzI4REFFQjFEMzhE
MDA1MDAxQTI1MjkgLyogQnl0ZWNvZGVSZXdyaXRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRkVB
M0JCQUMyMTJDOTdDQjAwRTkzQUQxIC8qIERGR0NGRy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjUx
NEYyMTkxOEIzRTE2NzAwOThGRjhCIC8qIEJ5dGVjb2Rlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY4ODVFMTExODQ5QTNCRTAwRjFFM0ZBIC8qIEJ5dGVjb2RlVXNlRGVmLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjgwMjNFQTE2MTM4MzJCMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggaW4gSGVhZGVy
cyAqLywKQEAgLTg1ODEsNiArODU5MCw3IEBACiAJCQkJMEZCREI5QUQxQUIwRkJDNjAwMEI1N0U1
IC8qIERGR0NhbGxDcmVhdGVEaXJlY3RBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY3QjI5NEIxNEMzQ0QyRjAwN0MzREIxIC8qIERGR0NhcGFiaWxpdGll
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5NTgxNEVGOTBBMjAwQzcyNTMyIC8qIERGR0NG
QVBoYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRUEzQkJBQzIxMkM5N0NCMDBFOTNBRDEgLyog
REZHQ0ZHLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjNCM0EyODE1NDRDOTk3MDAzRUQwRkYgLyog
REZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RDM2OTUx
QUU5Q0MzMzAwMEQ0REZCIC8qIERGR0NsZWFuVXBQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTc3QTQyNDAxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Nsb2JiZXJpemUuaCBpbiBIZWFkZXJzICov
LApAQCAtOTYwNyw4ICs5NjE3LDEwIEBACiAJCQkJNzlCNzU5NzYxREZBNEM2MDAwNTIxNzRDIC8q
IFdhc21QYWdlQ291bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzRjQwRThEMUQ1OTAxRjIwMDk5
QTFCNiAvKiBXYXNtUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzEzNzRCRDFENUNFNjc2
MDBBRjdBMEIgLyogV2FzbVBsYW4uaCBpbiBIZWFkZXJzICovLAorCQkJCUUzQTA1MzFDMjEzNDJC
NjgwMDIyRUMxNCAvKiBXYXNtU2VjdGlvblBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTNG
NDBFODUxRDU4Rjk3NzAwOTlBMUI2IC8qIFdhc21TZWN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQUQ3NDM4QzAxRTA0NTdBNDAwRkQwQzJBIC8qIFdhc21TaWduYXR1cmUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUUzQTA1MzFBMjEzNDJCNjgwMDIyRUMxNCAvKiBXYXNtU3RyZWFtaW5nUGFyc2Vy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDVDMzZFNjFGNjlFQzkxMDAwQkNBQUYgLyogV2FzbVRh
YmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MjUwRDJEMjFFOERBMDVBMDAyOUE5MzIgLyogV2Fz
bVRodW5rcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTNFOUUwQUYxRUFFQzQ1NzAwRkVFMjUxIC8q
IFdhc21UaWVyVXBDb3VudC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50
eHQKaW5kZXggODk3Njk4YzZlMDU5YWUxZDI2MjEzMWFjNTIwNDAwZTMxNzhlZGNjNS4uMDRkNDhl
ODViNTBmYjgzZmIxMjUwNWZlZTE0YTg1MzU5Y2MxZTMwOSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3Vy
Y2VzLnR4dApAQCAtOTkyLDcgKzk5Miw5IEBAIHdhc20vV2FzbU9NR1BsYW4uY3BwCiB3YXNtL1dh
c21PcGNvZGVPcmlnaW4uY3BwCiB3YXNtL1dhc21QYWdlQ291bnQuY3BwCiB3YXNtL1dhc21QbGFu
LmNwcAord2FzbS9XYXNtU2VjdGlvblBhcnNlci5jcHAKIHdhc20vV2FzbVNpZ25hdHVyZS5jcHAK
K3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAKIHdhc20vV2FzbVRhYmxlLmNwcAogd2FzbS9X
YXNtVGFibGUuaAogd2FzbS9XYXNtVGh1bmtzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rv
b2xzL0pTRG9sbGFyVk0uY3BwCmluZGV4IGViNTdjNzg0Yzk4MTgwNDYyZDRhOGU0M2M4NmI1MGJh
YWFlODQ5M2IuLmVmMjU1NzI0YmM2YTExMjAwMTZiN2YyMmY5NjlkYmZmZDljYWUyM2YgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAKQEAgLTUxLDYgKzUxLDEx
IEBACiAjaW5jbHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmlu
dFN0cmVhbS5oPgogCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorI2luY2x1ZGUgIkpTV2ViQXNz
ZW1ibHlIZWxwZXJzLmgiCisjaW5jbHVkZSAiV2FzbVN0cmVhbWluZ1BhcnNlci5oIgorI2VuZGlm
CisKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCkBAIC0xMDkz
LDYgKzEwOTgsODAgQEAgdm9pZCBFbGVtZW50OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFJvb3Qq
IHJvb3QpCiAgICAgbV9yb290LT5zZXRFbGVtZW50KHRoaXMpOwogfQogCisjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bldhc21TdHJlYW1pbmdQYXJzZXJBZGRCeXRlcyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uV2FzbVN0cmVhbWluZ1BhcnNlckZpbmFsaXpl
KEV4ZWNTdGF0ZSopOworCitjbGFzcyBXYXNtU3RyZWFtaW5nUGFyc2VyIDogcHVibGljIEpTRGVz
dHJ1Y3RpYmxlT2JqZWN0IHsKK3B1YmxpYzoKKyAgICBXYXNtU3RyZWFtaW5nUGFyc2VyKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQor
ICAgICAgICAsIG1faW5mbyhXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbjo6Y3JlYXRlKCkpCisgICAg
ICAgICwgbV9zdHJlYW1pbmdQYXJzZXIobV9pbmZvLmdldCgpKQorICAgIHsKKyAgICB9CisKKyAg
ICB1c2luZyBCYXNlID0gSlNEZXN0cnVjdGlibGVPYmplY3Q7CisKKyAgICBzdGF0aWMgV2FzbVN0
cmVhbWluZ1BhcnNlciogY3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKKyAgICB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY3JlYXRlU3RydWN0dXJl
KHZtLCBnbG9iYWxPYmplY3QsIGpzTnVsbCgpKTsKKyAgICAgICAgV2FzbVN0cmVhbWluZ1BhcnNl
ciogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2FzbVN0cmVhbWluZ1BhcnNl
cj4odm0uaGVhcCwgc2l6ZW9mKFdhc21TdHJlYW1pbmdQYXJzZXIpKSkgV2FzbVN0cmVhbWluZ1Bh
cnNlcih2bSwgc3RydWN0dXJlKTsKKyAgICAgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAgV2FzbTo6U3RyZWFtaW5nUGFyc2VyJiBz
dHJlYW1pbmdQYXJzZXIoKSB7IHJldHVybiBtX3N0cmVhbWluZ1BhcnNlcjsgfQorCisgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0pCisgICAgeworICAgICAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbih2bSk7CisKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRoaXMt
Pmdsb2JhbE9iamVjdCh2bSk7CisgICAgICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCBn
bG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiYWRkQnl0ZXMiKSwgMCwg
ZnVuY3Rpb25XYXNtU3RyZWFtaW5nUGFyc2VyQWRkQnl0ZXMsIE5vSW50cmluc2ljLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgICAgIHB1
dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnZtLCAiZmluYWxpemUiKSwgMCwgZnVuY3Rpb25XYXNtU3RyZWFtaW5nUGFyc2VyRmlu
YWxpemUsIE5vSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtKSk7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworCisgICAgUmVmPFdh
c206Ok1vZHVsZUluZm9ybWF0aW9uPiBtX2luZm87CisgICAgV2FzbTo6U3RyZWFtaW5nUGFyc2Vy
IG1fc3RyZWFtaW5nUGFyc2VyOworfTsKKworY29uc3QgQ2xhc3NJbmZvIFdhc21TdHJlYW1pbmdQ
YXJzZXI6OnNfaW5mbyA9IHsgIldhc21TdHJlYW1pbmdQYXJzZXIiLCAmQmFzZTo6c19pbmZvLCBu
dWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFdhc21TdHJlYW1pbmdQYXJzZXIp
IH07CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25XYXNtU3RyZWFtaW5n
UGFyc2VyQWRkQnl0ZXMoRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZXhlYy0+dm0oKSk7Cisg
ICAgYXV0byogdGhpc09iamVjdCA9IGpzRHluYW1pY0Nhc3Q8V2FzbVN0cmVhbWluZ1BhcnNlcio+
KHZtLCBleGVjLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCF0aGlzT2JqZWN0KSB7CisgICAgICAg
IHNjb3BlLnJlbGVhc2UoKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4oZmFsc2UpKTsKKyAgICB9CisgICAgYXV0byBkYXRhID0gZ2V0V2FzbUJ1ZmZlckZyb21WYWx1
ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgc2NvcGUucmVsZWFzZSgpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50MzJfdD4odGhpc09iamVjdC0+
c3RyZWFtaW5nUGFyc2VyKCkuYWRkQnl0ZXMoYml0d2lzZV9jYXN0PGNvbnN0IHVpbnQ4X3QqPihk
YXRhLmZpcnN0KSwgZGF0YS5zZWNvbmQpKSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uV2FzbVN0cmVhbWluZ1BhcnNlckZpbmFsaXplKEV4ZWNTdGF0ZSogZXhl
YykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBq
c0R5bmFtaWNDYXN0PFdhc21TdHJlYW1pbmdQYXJzZXIqPih2bSwgZXhlYy0+dGhpc1ZhbHVlKCkp
OworICAgIGlmICghdGhpc09iamVjdCkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c0Jvb2xlYW4oZmFsc2UpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHN0
YXRpY19jYXN0PGludDMyX3Q+KHRoaXNPYmplY3QtPnN0cmVhbWluZ1BhcnNlcigpLmZpbmFsaXpl
KCkpKSk7Cit9CisKKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZQogCiBuYW1lc3BhY2UgSlNDIHsK
QEAgLTE2NDAsNiArMTcxOSwxNSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvbkNyZWF0ZURPTUpJVEdldHRlckJhc2VKU09iamVjdChFeGVjUwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAorI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
K3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlV2FzbVN0
cmVhbWluZ1BhcnNlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShXYXNtU3RyZWFtaW5nUGFyc2VyOjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSkpOworfQorI2VuZGlmCisKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uU2V0SW1wdXJlR2V0dGVyRGVsZWdhdGUoRXhlY1N0YXRlKiBleGVjKQogewogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CkBAIC0yMDQwLDYgKzIxMjgsOSBAQCB2b2lkIEpTRG9sbGFy
Vk06OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICBhZGRGdW5jdGlvbih2bSwgImNyZWF0ZURP
TUpJVENoZWNrU3ViQ2xhc3NPYmplY3QiLCBmdW5jdGlvbkNyZWF0ZURPTUpJVENoZWNrU3ViQ2xh
c3NPYmplY3QsIDApOwogICAgIGFkZEZ1bmN0aW9uKHZtLCAiY3JlYXRlRE9NSklUR2V0dGVyQmFz
ZUpTT2JqZWN0IiwgZnVuY3Rpb25DcmVhdGVET01KSVRHZXR0ZXJCYXNlSlNPYmplY3QsIDApOwog
ICAgIGFkZEZ1bmN0aW9uKHZtLCAiY3JlYXRlQnVpbHRpbiIsIGZ1bmN0aW9uQ3JlYXRlQnVpbHRp
biwgMik7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIGFkZEZ1bmN0aW9uKHZtLCAiY3Jl
YXRlV2FzbVN0cmVhbWluZ1BhcnNlciIsIGZ1bmN0aW9uQ3JlYXRlV2FzbVN0cmVhbWluZ1BhcnNl
ciwgMCk7CisjZW5kaWYKICAgICBhZGRGdW5jdGlvbih2bSwgImdldFByaXZhdGVQcm9wZXJ0eSIs
IGZ1bmN0aW9uR2V0UHJpdmF0ZVByb3BlcnR5LCAyKTsKICAgICBhZGRGdW5jdGlvbih2bSwgInNl
dEltcHVyZUdldHRlckRlbGVnYXRlIiwgZnVuY3Rpb25TZXRJbXB1cmVHZXR0ZXJEZWxlZ2F0ZSwg
Mik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFu
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAppbmRleCBm
NjcyNjg2ZDNmOTlhMGQwZDJlOWMzMjFmMjdiYzBhMWNiZjViMmRkLi40M2M4ZjU2MmFmYTFjMzYz
M2E3ZTZjNjFmNDA5MjJlYzBiZTk3MjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUJCUVBsYW4uY3BwCkBAIC01OSwxMyArNTksMTUgQEAgQkJRUGxhbjo6QkJRUGxhbihDb250
ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGluZm8sIEFzeW5jV29yayB3b3Jr
LAogfQogCiBCQlFQbGFuOjpCQlFQbGFuKENvbnRleHQqIGNvbnRleHQsIFZlY3Rvcjx1aW50OF90
PiYmIHNvdXJjZSwgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFzaywgQ3JlYXRl
RW1iZWRkZXJXcmFwcGVyJiYgY3JlYXRlRW1iZWRkZXJXcmFwcGVyLCBUaHJvd1dhc21FeGNlcHRp
b24gdGhyb3dXYXNtRXhjZXB0aW9uKQotICAgIDogQkJRUGxhbihjb250ZXh0LCBhZG9wdFJlZigq
bmV3IE1vZHVsZUluZm9ybWF0aW9uKFdURk1vdmUoc291cmNlKSkpLCB3b3JrLCBXVEZNb3ZlKHRh
c2spLCBXVEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlvbikK
KyAgICA6IEJhc2UoY29udGV4dCwgTW9kdWxlSW5mb3JtYXRpb246OmNyZWF0ZSgpLCBXVEZNb3Zl
KHRhc2spLCBXVEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlv
bikKKyAgICAsIG1fc291cmNlKFdURk1vdmUoc291cmNlKSkKKyAgICAsIG1fc3RhdGUoU3RhdGU6
OkluaXRpYWwpCisgICAgLCBtX2FzeW5jV29yayh3b3JrKQogewotICAgIG1fc3RhdGUgPSBTdGF0
ZTo6SW5pdGlhbDsKIH0KIAotQkJRUGxhbjo6QkJRUGxhbihDb250ZXh0KiBjb250ZXh0LCBjb25z
dCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgsIEFzeW5jV29yayB3b3JrLCBD
b21wbGV0aW9uVGFzayYmIHRhc2spCi0gICAgOiBCYXNlKGNvbnRleHQsIHNvdXJjZSwgc291cmNl
TGVuZ3RoLCBXVEZNb3ZlKHRhc2spKQorQkJRUGxhbjo6QkJRUGxhbihDb250ZXh0KiBjb250ZXh0
LCBBc3luY1dvcmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0YXNrKQorICAgIDogQmFzZShjb250
ZXh0LCBXVEZNb3ZlKHRhc2spKQogICAgICwgbV9zdGF0ZShTdGF0ZTo6SW5pdGlhbCkKICAgICAs
IG1fYXN5bmNXb3JrKHdvcmspCiB7CkBAIC05MCw3ICs5Miw3IEBAIHZvaWQgQkJRUGxhbjo6bW92
ZVRvU3RhdGUoU3RhdGUgc3RhdGUpCiAgICAgbV9zdGF0ZSA9IHN0YXRlOwogfQogCi1ib29sIEJC
UVBsYW46OnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKQorYm9vbCBCQlFQbGFuOjpwYXJzZUFuZFZh
bGlkYXRlTW9kdWxlKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IHNvdXJjZUxlbmd0aCkK
IHsKICAgICBpZiAobV9zdGF0ZSAhPSBTdGF0ZTo6SW5pdGlhbCkKICAgICAgICAgcmV0dXJuIHRy
dWU7CkBAIC0xMDEsNyArMTAzLDcgQEAgYm9vbCBCQlFQbGFuOjpwYXJzZUFuZFZhbGlkYXRlTW9k
dWxlKCkKICAgICAgICAgc3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CiAKICAgICB7
Ci0gICAgICAgIE1vZHVsZVBhcnNlciBtb2R1bGVQYXJzZXIobV9zb3VyY2UsIG1fc291cmNlTGVu
Z3RoLCBtX21vZHVsZUluZm9ybWF0aW9uKTsKKyAgICAgICAgTW9kdWxlUGFyc2VyIG1vZHVsZVBh
cnNlcihzb3VyY2UsIHNvdXJjZUxlbmd0aCwgbV9tb2R1bGVJbmZvcm1hdGlvbik7CiAgICAgICAg
IGF1dG8gcGFyc2VSZXN1bHQgPSBtb2R1bGVQYXJzZXIucGFyc2UoKTsKICAgICAgICAgaWYgKCFw
YXJzZVJlc3VsdCkgewogICAgICAgICAgICAgQmFzZTo6ZmFpbChob2xkTG9jayhtX2xvY2spLCBX
VEZNb3ZlKHBhcnNlUmVzdWx0LmVycm9yKCkpKTsKQEAgLTEwOSwyMCArMTExLDIxIEBAIGJvb2wg
QkJRUGxhbjo6cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpCiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBjb25zdCBhdXRvJiBmdW5jdGlvbkxvY2F0aW9ucyA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1
bmN0aW9uTG9jYXRpb25JbkJpbmFyeTsKLSAgICBmb3IgKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgg
PSAwOyBmdW5jdGlvbkluZGV4IDwgZnVuY3Rpb25Mb2NhdGlvbnMuc2l6ZSgpOyArK2Z1bmN0aW9u
SW5kZXgpIHsKLSAgICAgICAgZGF0YUxvZ0xuSWYoV2FzbUJCUVBsYW5JbnRlcm5hbDo6dmVyYm9z
ZSwgIlByb2Nlc3NpbmcgZnVuY3Rpb24gc3RhcnRpbmcgYXQ6ICIsIGZ1bmN0aW9uTG9jYXRpb25z
W2Z1bmN0aW9uSW5kZXhdLnN0YXJ0LCAiIGFuZCBlbmRpbmcgYXQ6ICIsIGZ1bmN0aW9uTG9jYXRp
b25zW2Z1bmN0aW9uSW5kZXhdLmVuZCk7Ci0gICAgICAgIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9u
U3RhcnQgPSBtX3NvdXJjZSArIGZ1bmN0aW9uTG9jYXRpb25zW2Z1bmN0aW9uSW5kZXhdLnN0YXJ0
OwotICAgICAgICBzaXplX3QgZnVuY3Rpb25MZW5ndGggPSBmdW5jdGlvbkxvY2F0aW9uc1tmdW5j
dGlvbkluZGV4XS5lbmQgLSBmdW5jdGlvbkxvY2F0aW9uc1tmdW5jdGlvbkluZGV4XS5zdGFydDsK
LSAgICAgICAgQVNTRVJUKGZ1bmN0aW9uTGVuZ3RoIDw9IG1fc291cmNlTGVuZ3RoKTsKKyAgICBj
b25zdCBhdXRvJiBmdW5jdGlvbnMgPSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbnM7Cisg
ICAgZm9yICh1bnNpZ25lZCBmdW5jdGlvbkluZGV4ID0gMDsgZnVuY3Rpb25JbmRleCA8IGZ1bmN0
aW9ucy5zaXplKCk7ICsrZnVuY3Rpb25JbmRleCkgeworICAgICAgICBjb25zdCBhdXRvJiBmdW5j
dGlvbiA9IGZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XTsKKyAgICAgICAgZGF0YUxvZ0xuSWYoV2Fz
bUJCUVBsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIlByb2Nlc3NpbmcgZnVuY3Rpb24gc3RhcnRpbmcg
YXQ6ICIsIGZ1bmN0aW9uLnN0YXJ0LCAiIGFuZCBlbmRpbmcgYXQ6ICIsIGZ1bmN0aW9uLmVuZCk7
CisgICAgICAgIHNpemVfdCBmdW5jdGlvbkxlbmd0aCA9IGZ1bmN0aW9uLmVuZCAtIGZ1bmN0aW9u
LnN0YXJ0OworICAgICAgICBBU1NFUlQoZnVuY3Rpb25MZW5ndGggPD0gc291cmNlTGVuZ3RoKTsK
KyAgICAgICAgQVNTRVJUKGZ1bmN0aW9uTGVuZ3RoID09IGZ1bmN0aW9uLmRhdGEuc2l6ZSgpKTsK
ICAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0
aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tmdW5jdGlvbkluZGV4XTsKICAg
ICAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6
Z2V0KHNpZ25hdHVyZUluZGV4KTsKIAotICAgICAgICBhdXRvIHZhbGlkYXRpb25SZXN1bHQgPSB2
YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUs
IG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCkpOworICAgICAgICBhdXRvIHZhbGlkYXRpb25SZXN1
bHQgPSB2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRh
LnNpemUoKSwgc2lnbmF0dXJlLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpKTsKICAgICAgICAg
aWYgKCF2YWxpZGF0aW9uUmVzdWx0KSB7CiAgICAgICAgICAgICBpZiAoV2FzbUJCUVBsYW5JbnRl
cm5hbDo6dmVyYm9zZSkgewogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBmdW5jdGlvbkxlbmd0aDsgKytpKQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKFJhd1Bv
aW50ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZnVuY3Rpb25TdGFydFtpXSkpLCAiLCAiKTsK
KyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KGZ1bmN0aW9uLmRhdGFbaV0pKSwgIiwgIik7CiAgICAgICAgICAgICAgICAgZGF0YUxv
Z0xuKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBCYXNlOjpmYWlsKGhvbGRMb2NrKG1f
bG9jayksIG1ha2VTdHJpbmcodmFsaWRhdGlvblJlc3VsdC5lcnJvcigpLCAiLCBpbiBmdW5jdGlv
biBhdCBpbmRleCAiLCBTdHJpbmc6Om51bWJlcihmdW5jdGlvbkluZGV4KSkpOyAvLyBGSVhNRSBt
YWtlIHRoaXMgYW4gRXhwZWN0ZWQuCkBAIC0xNTYsMTggKzE1OSwxOCBAQCB2b2lkIEJCUVBsYW46
OnByZXBhcmUoKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9OwogCi0gICAgY29uc3QgYXV0
byYgZnVuY3Rpb25Mb2NhdGlvbnMgPSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbkxvY2F0
aW9uSW5CaW5hcnk7CisgICAgY29uc3QgYXV0byYgZnVuY3Rpb25zID0gbV9tb2R1bGVJbmZvcm1h
dGlvbi0+ZnVuY3Rpb25zOwogICAgIGlmICghdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fd2FzbVRvV2Fz
bUV4aXRTdHVicywgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJ
bmRpY2VzLnNpemUoKSwgIiBXZWJBc3NlbWJseSB0byBKYXZhU2NyaXB0IHN0dWJzIikKLSAgICAg
ICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5j
dGlvbkxvY2F0aW9ucy5zaXplKCksICIgdW5saW5rZWQgV2ViQXNzZW1ibHkgdG8gV2ViQXNzZW1i
bHkgY2FsbHMiKQotICAgICAgICB8fCAhdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fd2FzbUludGVybmFs
RnVuY3Rpb25zLCBmdW5jdGlvbkxvY2F0aW9ucy5zaXplKCksICIgV2ViQXNzZW1ibHkgZnVuY3Rp
b25zIikKLSAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX2NvbXBpbGF0aW9uQ29udGV4
dHMsIGZ1bmN0aW9uTG9jYXRpb25zLnNpemUoKSwgIiBjb21waWxhdGlvbiBjb250ZXh0cyIpCi0g
ICAgICAgIHx8ICF0cnlSZXNlcnZlQ2FwYWNpdHkobV90aWVyVXBDb3VudHMsIGZ1bmN0aW9uTG9j
YXRpb25zLnNpemUoKSwgIiB0aWVyLXVwIGNvdW50cyIpKQorICAgICAgICB8fCAhdHJ5UmVzZXJ2
ZUNhcGFjaXR5KG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9ucy5zaXplKCksICIg
dW5saW5rZWQgV2ViQXNzZW1ibHkgdG8gV2ViQXNzZW1ibHkgY2FsbHMiKQorICAgICAgICB8fCAh
dHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fd2FzbUludGVybmFsRnVuY3Rpb25zLCBmdW5jdGlvbnMuc2l6
ZSgpLCAiIFdlYkFzc2VtYmx5IGZ1bmN0aW9ucyIpCisgICAgICAgIHx8ICF0cnlSZXNlcnZlQ2Fw
YWNpdHkobV9jb21waWxhdGlvbkNvbnRleHRzLCBmdW5jdGlvbnMuc2l6ZSgpLCAiIGNvbXBpbGF0
aW9uIGNvbnRleHRzIikKKyAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX3RpZXJVcENv
dW50cywgZnVuY3Rpb25zLnNpemUoKSwgIiB0aWVyLXVwIGNvdW50cyIpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLnJlc2l6ZShmdW5jdGlvbkxvY2F0
aW9ucy5zaXplKCkpOwotICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zLnJlc2l6ZShmdW5jdGlv
bkxvY2F0aW9ucy5zaXplKCkpOwotICAgIG1fY29tcGlsYXRpb25Db250ZXh0cy5yZXNpemUoZnVu
Y3Rpb25Mb2NhdGlvbnMuc2l6ZSgpKTsKLSAgICBtX3RpZXJVcENvdW50cy5yZXNpemUoZnVuY3Rp
b25Mb2NhdGlvbnMuc2l6ZSgpKTsKKyAgICBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLnJlc2l6
ZShmdW5jdGlvbnMuc2l6ZSgpKTsKKyAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5yZXNpemUo
ZnVuY3Rpb25zLnNpemUoKSk7CisgICAgbV9jb21waWxhdGlvbkNvbnRleHRzLnJlc2l6ZShmdW5j
dGlvbnMuc2l6ZSgpKTsKKyAgICBtX3RpZXJVcENvdW50cy5yZXNpemUoZnVuY3Rpb25zLnNpemUo
KSk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGltcG9ydEluZGV4ID0gMDsgaW1wb3J0SW5kZXggPCBt
X21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRzLnNpemUoKTsgKytpbXBvcnRJbmRleCkgewogICAg
ICAgICBJbXBvcnQqIGltcG9ydCA9ICZtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRzW2ltcG9y
dEluZGV4XTsKQEAgLTI0MSw3ICsyNDQsNyBAQCB2b2lkIEJCUVBsYW46OmNvbXBpbGVGdW5jdGlv
bnMoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogICAgIFRocmVhZENvdW50SG9sZGVyIGhvbGRl
cigqdGhpcyk7CiAKICAgICBzaXplX3QgYnl0ZXNDb21waWxlZCA9IDA7Ci0gICAgY29uc3QgYXV0
byYgZnVuY3Rpb25Mb2NhdGlvbnMgPSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbkxvY2F0
aW9uSW5CaW5hcnk7CisgICAgY29uc3QgYXV0byYgZnVuY3Rpb25zID0gbV9tb2R1bGVJbmZvcm1h
dGlvbi0+ZnVuY3Rpb25zOwogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIGlmIChlZmZvcnQg
PT0gUGFydGlhbCAmJiBieXRlc0NvbXBpbGVkID49IE9wdGlvbnM6OndlYkFzc2VtYmx5UGFydGlh
bENvbXBpbGVMaW1pdCgpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjQ5LDcgKzI1Miw3IEBA
IHZvaWQgQkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQp
CiAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXg7CiAgICAgICAgIHsKICAgICAgICAgICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKLSAgICAgICAgICAgIGlmIChtX2N1cnJl
bnRJbmRleCA+PSBmdW5jdGlvbkxvY2F0aW9ucy5zaXplKCkpIHsKKyAgICAgICAgICAgIGlmICht
X2N1cnJlbnRJbmRleCA+PSBmdW5jdGlvbnMuc2l6ZSgpKSB7CiAgICAgICAgICAgICAgICAgaWYg
KGhhc1dvcmsoKSkKICAgICAgICAgICAgICAgICAgICAgbW92ZVRvU3RhdGUoU3RhdGU6OkNvbXBp
bGVkKTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0yNTgsMTggKzI2MSwxNiBAQCB2b2lk
IEJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbnMoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogICAg
ICAgICAgICAgKyttX2N1cnJlbnRJbmRleDsKICAgICAgICAgfQogCi0gICAgICAgIGNvbnN0IHVp
bnQ4X3QqIGZ1bmN0aW9uU3RhcnQgPSBtX3NvdXJjZSArIGZ1bmN0aW9uTG9jYXRpb25zW2Z1bmN0
aW9uSW5kZXhdLnN0YXJ0OwotICAgICAgICBzaXplX3QgZnVuY3Rpb25MZW5ndGggPSBmdW5jdGlv
bkxvY2F0aW9uc1tmdW5jdGlvbkluZGV4XS5lbmQgLSBmdW5jdGlvbkxvY2F0aW9uc1tmdW5jdGlv
bkluZGV4XS5zdGFydDsKLSAgICAgICAgQVNTRVJUKGZ1bmN0aW9uTGVuZ3RoIDw9IG1fc291cmNl
TGVuZ3RoKTsKKyAgICAgICAgY29uc3QgYXV0byYgZnVuY3Rpb24gPSBmdW5jdGlvbnNbZnVuY3Rp
b25JbmRleF07CiAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1
bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNbZnVuY3Rpb25J
bmRleF07CiAgICAgICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5m
b3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CiAgICAgICAgIHVuc2lnbmVkIGZ1bmN0aW9u
SW5kZXhTcGFjZSA9IG1fd2FzbVRvV2FzbUV4aXRTdHVicy5zaXplKCkgKyBmdW5jdGlvbkluZGV4
OwogICAgICAgICBBU1NFUlRfVU5VU0VEKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZv
cm1hdGlvbi0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5k
ZXhTcGFjZSkgPT0gc2lnbmF0dXJlSW5kZXgpOwotICAgICAgICBBU1NFUlQodmFsaWRhdGVGdW5j
dGlvbihmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBtX21vZHVsZUlu
Zm9ybWF0aW9uLmdldCgpKSk7CisgICAgICAgIEFTU0VSVCh2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0
aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRhLnNpemUoKSwgc2lnbmF0dXJlLCBtX21vZHVs
ZUluZm9ybWF0aW9uLmdldCgpKSk7CiAKICAgICAgICAgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxs
c1tmdW5jdGlvbkluZGV4XSA9IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPigpOwogICAg
ICAgICBUaWVyVXBDb3VudCogdGllclVwID0gT3B0aW9uczo6dXNlQkJRVGllclVwQ2hlY2tzKCkg
PyAmbV90aWVyVXBDb3VudHNbZnVuY3Rpb25JbmRleF0gOiBudWxscHRyOwotICAgICAgICBhdXRv
IHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZShtX2NvbXBpbGF0aW9uQ29u
dGV4dHNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWdu
YXR1cmUsIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG1fbW9kdWxl
SW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBmdW5j
dGlvbkluZGV4LCB0aWVyVXAsIG1fdGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICAgICAgYXV0byBw
YXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUobV9jb21waWxhdGlvbkNvbnRl
eHRzW2Z1bmN0aW9uSW5kZXhdLCBmdW5jdGlvbi5kYXRhLmRhdGEoKSwgZnVuY3Rpb24uZGF0YS5z
aXplKCksIHNpZ25hdHVyZSwgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4
XSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6OkJC
UU1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwgbV90aHJvd1dhc21FeGNlcHRpb24pOwogCiAg
ICAgICAgIGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxlUmVzdWx0KSkgewogICAgICAgICAg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwpAQCAtMjc3LDcgKzI3OCw3IEBAIHZv
aWQgQkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAg
ICAgICAgICAgICAgICAgLy8gTXVsdGlwbGUgY29tcGlsZXMgY291bGQgZmFpbCBzaW11bHRhbmVv
dXNseS4gV2UgYXJiaXRyYXJpbHkgY2hvb3NlIHRoZSBmaXJzdC4KICAgICAgICAgICAgICAgICBm
YWlsKGxvY2tlciwgbWFrZVN0cmluZyhwYXJzZUFuZENvbXBpbGVSZXN1bHQuZXJyb3IoKSwgIiwg
aW4gZnVuY3Rpb24gYXQgaW5kZXggIiwgU3RyaW5nOjpudW1iZXIoZnVuY3Rpb25JbmRleCkpKTsg
Ly8gRklYTUUgbWFrZSB0aGlzIGFuIEV4cGVjdGVkLgogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgbV9jdXJyZW50SW5kZXggPSBmdW5jdGlvbkxvY2F0aW9ucy5zaXplKCk7CisgICAgICAgICAg
ICBtX2N1cnJlbnRJbmRleCA9IGZ1bmN0aW9ucy5zaXplKCk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KIApAQCAtMjg5LDE3ICsyOTAsMTcgQEAgdm9pZCBCQlFQbGFuOjpjb21waWxl
RnVuY3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAgICAgICAgICAgIEFTU0VSVF9V
TlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CiAgICAgICAgIH0KIAotICAgICAgICBi
eXRlc0NvbXBpbGVkICs9IGZ1bmN0aW9uTGVuZ3RoOworICAgICAgICBieXRlc0NvbXBpbGVkICs9
IGZ1bmN0aW9uLmRhdGEuc2l6ZSgpOwogICAgIH0KIH0KIAogdm9pZCBCQlFQbGFuOjpjb21wbGV0
ZShjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyKQogewotICAgIEFTU0VSVChtX3N0YXRlICE9
IFN0YXRlOjpDb21waWxlZCB8fCBtX2N1cnJlbnRJbmRleCA+PSBtX21vZHVsZUluZm9ybWF0aW9u
LT5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpKTsKKyAgICBBU1NFUlQobV9zdGF0ZSAh
PSBTdGF0ZTo6Q29tcGlsZWQgfHwgbV9jdXJyZW50SW5kZXggPj0gbV9tb2R1bGVJbmZvcm1hdGlv
bi0+ZnVuY3Rpb25zLnNpemUoKSk7CiAgICAgZGF0YUxvZ0xuSWYoV2FzbUJCUVBsYW5JbnRlcm5h
bDo6dmVyYm9zZSwgIlN0YXJ0aW5nIENvbXBsZXRpb24iKTsKIAogICAgIGlmICghZmFpbGVkKCkg
JiYgbV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGlsZWQpIHsKLSAgICAgICAgZm9yICh1aW50MzJfdCBm
dW5jdGlvbkluZGV4ID0gMDsgZnVuY3Rpb25JbmRleCA8IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1
bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCk7IGZ1bmN0aW9uSW5kZXgrKykgeworICAgICAg
ICBmb3IgKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXggPSAwOyBmdW5jdGlvbkluZGV4IDwgbV9tb2R1
bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25zLnNpemUoKTsgZnVuY3Rpb25JbmRleCsrKSB7CiAgICAg
ICAgICAgICBDb21waWxhdGlvbkNvbnRleHQmIGNvbnRleHQgPSBtX2NvbXBpbGF0aW9uQ29udGV4
dHNbZnVuY3Rpb25JbmRleF07CiAgICAgICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJ
bmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRp
Y2VzW2Z1bmN0aW9uSW5kZXhdOwogICAgICAgICAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1
cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKQEAgLTM1MSw3
ICszNTIsNyBAQCB2b2lkIEJCUVBsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQog
ewogICAgIHN3aXRjaCAobV9zdGF0ZSkgewogICAgIGNhc2UgU3RhdGU6OkluaXRpYWw6Ci0gICAg
ICAgIHBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKTsKKyAgICAgICAgcGFyc2VBbmRWYWxpZGF0ZU1v
ZHVsZShtX3NvdXJjZS5kYXRhKCksIG1fc291cmNlLnNpemUoKSk7CiAgICAgICAgIGlmICghaGFz
V29yaygpKSB7CiAgICAgICAgICAgICBBU1NFUlQoaXNDb21wbGV0ZSgpKTsKICAgICAgICAgICAg
IHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQ
bGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oCmluZGV4IGQ4
ODE0NWQ3ZGRkYmQ2YjE5MTA1Nzc4MTdjZTdjYjhkYjQxMjFkMWUuLjk0MWFjNzVmNzBlNmY5MTFi
OWZiYjNkZGIxMzc4Y2NmOTY5OTQxYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CQlFQbGFuLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUJCUVBsYW4uaApAQCAtNTIsMTEgKzUyLDE0IEBAIGNsYXNzIEJCUVBsYW4gZmluYWwgOiBwdWJs
aWMgUGxhbiB7CiAgICAgLy8gTm90ZTogQ29tcGxldGlvblRhc2sgc2hvdWxkIG5vdCBob2xkIGEg
cmVmZXJlbmNlIHRvIHRoZSBQbGFuIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGEgcmVmZXJlbmNl
IGN5Y2xlLgogICAgIEJCUVBsYW4oQ29udGV4dCosIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4sIEFz
eW5jV29yaywgQ29tcGxldGlvblRhc2smJiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93
V2FzbUV4Y2VwdGlvbik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQkJRUGxhbihDb250ZXh0Kiwg
VmVjdG9yPHVpbnQ4X3Q+JiYsIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJiwgQ3JlYXRlRW1i
ZWRkZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4Y2VwdGlvbik7Ci0gICAgLy8gTm90ZTogVGhpcyBj
b25zdHJ1Y3RvciBzaG91bGQgb25seSBiZSB1c2VkIGlmIHlvdSBhcmUgbm90IGFjdHVhbGx5IGJ1
aWxkaW5nIGEgbW9kdWxlIGUuZy4gdmFsaWRhdGlvbi9mdW5jdGlvbiB0ZXN0cwotICAgIC8vIEZJ
WE1FOiBXaGVuIHdlIGdldCByaWQgb2YgZnVuY3Rpb24gdGVzdHMgd2Ugc2hvdWxkIHJlbW92ZSBB
c3luY1dvcmsgZnJvbSB0aGlzIGNvbnN0cnVjdG9yLgotICAgIEpTX0VYUE9SVF9QUklWQVRFIEJC
UVBsYW4oQ29udGV4dCosIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIEFzeW5jV29yaywgQ29tcGxl
dGlvblRhc2smJik7CisgICAgQkJRUGxhbihDb250ZXh0KiwgQXN5bmNXb3JrLCBDb21wbGV0aW9u
VGFzayYmKTsKIAotICAgIGJvb2wgcGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpOworCisgICAgYm9v
bCBwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBwYXJzZUFu
ZFZhbGlkYXRlTW9kdWxlKG1fc291cmNlLmRhdGEoKSwgbV9zb3VyY2Uuc2l6ZSgpKTsKKyAgICB9
CisgICAgYm9vbCBwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3Qp
OwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmVwYXJlKCk7CiAgICAgdm9pZCBjb21w
aWxlRnVuY3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0KTsKQEAgLTEzNiw2ICsxMzksNyBAQCBjbGFz
cyBCQlFQbGFuIGZpbmFsIDogcHVibGljIFBsYW4gewogCiAgICAgY29uc3QgY2hhciogc3RhdGVT
dHJpbmcoU3RhdGUpOwogICAgIAorICAgIFZlY3Rvcjx1aW50OF90PiBtX3NvdXJjZTsKICAgICBC
YWc8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7CiAgICAgVmVjdG9yPE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiBtX3dhc21Ub1dhc21FeGl0U3R1YnM7CiAgICAg
VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPj4gbV93YXNtSW50ZXJuYWxG
dW5jdGlvbnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9y
bWF0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKaW5kZXggMjc4
NGU5MGFmMzg0MWEwMmU1ODczMzMyY2ZmOGJiMDY0ODdlMzNkZS4uZTQzZjRlZDkzNjE2N2ZmMjkz
OGQ4MzdhMGNlMDg4ZDQzZDIwYTRlNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUZvcm1hdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21G
b3JtYXQuaApAQCAtMTQwLDkgKzE0MCwxMCBAQCBzdHJ1Y3QgR2xvYmFsIHsKICAgICB1aW50NjRf
dCBpbml0aWFsQml0c09ySW1wb3J0TnVtYmVyIHsgMCB9OwogfTsKIAotc3RydWN0IEZ1bmN0aW9u
TG9jYXRpb25JbkJpbmFyeSB7CitzdHJ1Y3QgRnVuY3Rpb25EYXRhIHsKICAgICBzaXplX3Qgc3Rh
cnQ7CiAgICAgc2l6ZV90IGVuZDsKKyAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKIH07CiAKIGNs
YXNzIEkzMkluaXRFeHByIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTW9kdWxlSW5mb3JtYXRpb24uY3BwCmluZGV4IGNiOGRiMGUwOTNmOTRjZGEzMTZkZDI0YmFm
MzllNTEyZWRhMjAzMTQuLjhhMjU0YzAwMmZiZTllZjkwY2VmMWFiZGZjNDE2OWMxZTQ2YzUzZGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1h
dGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9y
bWF0aW9uLmNwcApAQCAtMzEsMjEgKzMxLDEwIEBACiAjaW5jbHVkZSAiV2FzbU5hbWVTZWN0aW9u
LmgiCiAjaW5jbHVkZSA8d3RmL1NIQTEuaD4KIAotbmFtZXNwYWNlIHsKLUNTdHJpbmcgc2hhMShj
b25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0KQotewotICAgIFNIQTEgaGFzaDsKLSAgICBoYXNo
LmFkZEJ5dGVzKGlucHV0KTsKLSAgICByZXR1cm4gaGFzaC5jb21wdXRlSGV4RGlnZXN0KCk7Ci19
Ci19Ci0KIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKLU1vZHVsZUluZm9ybWF0
aW9uOjpNb2R1bGVJbmZvcm1hdGlvbihWZWN0b3I8dWludDhfdD4mJiBzb3VyY2VCeXRlcykKLSAg
ICA6IHNvdXJjZShXVEZNb3ZlKHNvdXJjZUJ5dGVzKSkKLSAgICAsIGhhc2goT3B0aW9uczo6dXNl
RWFnZXJXZWJBc3NlbWJseU1vZHVsZUhhc2hpbmcoKSA/IHN0ZDo6bWFrZV9vcHRpb25hbChzaGEx
KHNvdXJjZSkpIDogc3RkOjpudWxsb3B0KQotICAgICwgbmFtZVNlY3Rpb24obmV3IE5hbWVTZWN0
aW9uKGhhc2gpKQorTW9kdWxlSW5mb3JtYXRpb246Ok1vZHVsZUluZm9ybWF0aW9uKCkKKyAgICA6
IG5hbWVTZWN0aW9uKE5hbWVTZWN0aW9uOjpjcmVhdGUoKSkKIHsKIH0KIE1vZHVsZUluZm9ybWF0
aW9uOjp+TW9kdWxlSW5mb3JtYXRpb24oKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgKaW5kZXggMGJhYjU3ZTA3MGQyZWEzMzA2
MmYzNjM2NThhMjQxNWU5YmQ1MWUyZC4uZmI1ZTNhMGNkZWQ0ZTczODAyNDMwM2JlNWUwZjU2N2Fm
NTViYTAyNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVs
ZUluZm9ybWF0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVs
ZUluZm9ybWF0aW9uLmgKQEAgLTM0LDExICszNCwxNCBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBXYXNtIHsKIAogc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uIDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPE1vZHVsZUluZm9ybWF0aW9uPiB7Ci0gICAgTW9kdWxlSW5mb3JtYXRpb24o
KSA9IGRlbGV0ZTsKKyAgICBNb2R1bGVJbmZvcm1hdGlvbigpOwogICAgIE1vZHVsZUluZm9ybWF0
aW9uKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJikgPSBkZWxldGU7CiAgICAgTW9kdWxlSW5mb3Jt
YXRpb24oTW9kdWxlSW5mb3JtYXRpb24mJikgPSBkZWxldGU7CiAKLSAgICBNb2R1bGVJbmZvcm1h
dGlvbihWZWN0b3I8dWludDhfdD4mJiBzb3VyY2VCeXRlcyk7CisgICAgc3RhdGljIFJlZjxNb2R1
bGVJbmZvcm1hdGlvbj4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IE1vZHVsZUluZm9ybWF0aW9uKTsKKyAgICB9CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB+
TW9kdWxlSW5mb3JtYXRpb24oKTsKICAgICAKQEAgLTU4LDggKzYxLDggQEAgc3RydWN0IE1vZHVs
ZUluZm9ybWF0aW9uIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPE1vZHVsZUluZm9ybWF0
aW9uPiB7CiAgICAgdWludDMyX3QgaW1wb3J0RnVuY3Rpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJu
IGltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7IH0KICAgICB1aW50MzJfdCBp
bnRlcm5hbEZ1bmN0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBpbnRlcm5hbEZ1bmN0aW9uU2ln
bmF0dXJlSW5kaWNlcy5zaXplKCk7IH0KIAotICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiBzb3Vy
Y2U7Ci0gICAgY29uc3Qgc3RkOjpvcHRpb25hbDxDU3RyaW5nPiBoYXNoOworICAgIHVpbnQzMl90
IG1lbW9yeUNvdW50KCkgY29uc3QgeyByZXR1cm4gbWVtb3J5ID8gMSA6IDA7IH0KKyAgICB1aW50
MzJfdCB0YWJsZUNvdW50KCkgY29uc3QgeyByZXR1cm4gdGFibGVJbmZvcm1hdGlvbiA/IDEgOiAw
OyB9CiAKICAgICBWZWN0b3I8SW1wb3J0PiBpbXBvcnRzOwogICAgIFZlY3RvcjxTaWduYXR1cmVJ
bmRleD4gaW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzOwpAQCAtNjgsNyArNzEsNyBAQCBz
dHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TW9k
dWxlSW5mb3JtYXRpb24+IHsKIAogICAgIE1lbW9yeUluZm9ybWF0aW9uIG1lbW9yeTsKIAotICAg
IFZlY3RvcjxGdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnk+IGZ1bmN0aW9uTG9jYXRpb25JbkJpbmFy
eTsKKyAgICBWZWN0b3I8RnVuY3Rpb25EYXRhPiBmdW5jdGlvbnM7CiAKICAgICBWZWN0b3I8RXhw
b3J0PiBleHBvcnRzOwogICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IHN0YXJ0RnVuY3Rpb25J
bmRleFNwYWNlOwpAQCAtNzgsNyArODEsNyBAQCBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TW9kdWxlSW5mb3JtYXRpb24+IHsKICAgICBWZWN0
b3I8R2xvYmFsPiBnbG9iYWxzOwogICAgIHVuc2lnbmVkIGZpcnN0SW50ZXJuYWxHbG9iYWwgeyAw
IH07CiAgICAgVmVjdG9yPEN1c3RvbVNlY3Rpb24+IGN1c3RvbVNlY3Rpb25zOwotICAgIFJlZlB0
cjxOYW1lU2VjdGlvbj4gbmFtZVNlY3Rpb247CisgICAgUmVmPE5hbWVTZWN0aW9uPiBuYW1lU2Vj
dGlvbjsKIH07CiAKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Nb2R1bGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1v
ZHVsZVBhcnNlci5jcHAKaW5kZXggZjAzZTY5ODdmNGE1MDI1OTFkZjcxZGM4MTU3ODIwODA5OTYx
MzhiNC4uYThlZDhkMmU2YjE5Yzk1ZjY3MWZmY2JjNTQ3ODNkYTc0YzY1MDgwZiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKQEAgLTMyLDE4
ICszMiwxMSBAQAogI2luY2x1ZGUgIldhc21NZW1vcnlJbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUg
Ildhc21OYW1lU2VjdGlvblBhcnNlci5oIgogI2luY2x1ZGUgIldhc21PcHMuaCIKKyNpbmNsdWRl
ICJXYXNtU2VjdGlvblBhcnNlci5oIgogI2luY2x1ZGUgIldhc21TZWN0aW9ucy5oIgogCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi1BTFdBWVNfSU5MSU5FIEkzMkluaXRFeHBy
IG1ha2VJMzJJbml0RXhwcih1aW50OF90IG9wY29kZSwgdWludDMyX3QgYml0cykKLXsKLSAgICBS
RUxFQVNFX0FTU0VSVChvcGNvZGUgPT0gSTMyQ29uc3QgfHwgb3Bjb2RlID09IEdldEdsb2JhbCk7
Ci0gICAgaWYgKG9wY29kZSA9PSBJMzJDb25zdCkKLSAgICAgICAgcmV0dXJuIEkzMkluaXRFeHBy
Ojpjb25zdFZhbHVlKGJpdHMpOwotICAgIHJldHVybiBJMzJJbml0RXhwcjo6Z2xvYmFsSW1wb3J0
KGJpdHMpOwotfQotCiBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2UoKSAtPiBSZXN1bHQKIHsKICAg
ICBjb25zdCBzaXplX3QgbWluU2l6ZSA9IDg7CkBAIC03MSwxOSArNjQsMTkgQEAgYXV0byBNb2R1
bGVQYXJzZXI6OnBhcnNlKCkgLT4gUmVzdWx0CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlVmFyVUludDMyKHNlY3Rpb25MZW5ndGgpLCAiY2FuJ3QgZ2V0ICIsIHNlY3Rpb24sICIg
c2VjdGlvbidzIGxlbmd0aCIpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHNlY3Rpb25M
ZW5ndGggPiBsZW5ndGgoKSAtIG1fb2Zmc2V0LCBzZWN0aW9uLCAiIHNlY3Rpb24gb2Ygc2l6ZSAi
LCBzZWN0aW9uTGVuZ3RoLCAiIHdvdWxkIG92ZXJmbG93IE1vZHVsZSdzIHNpemUiKTsKIAotICAg
ICAgICBhdXRvIGVuZCA9IG1fb2Zmc2V0ICsgc2VjdGlvbkxlbmd0aDsKKyAgICAgICAgU2VjdGlv
blBhcnNlciBwYXJzZXIoc291cmNlKCkgKyBtX29mZnNldCwgc2VjdGlvbkxlbmd0aCwgbV9vZmZz
ZXQsIG1faW5mby5nZXQoKSk7CiAKICAgICAgICAgc3dpdGNoIChzZWN0aW9uKSB7CiAjZGVmaW5l
IFdBU01fU0VDVElPTl9QQVJTRShOQU1FLCBJRCwgREVTQ1JJUFRJT04pICAgICAgICAgICAgICAg
ICAgIFwKICAgICAgICAgY2FzZSBTZWN0aW9uOjpOQU1FOiB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlM
UyhwYXJzZSAjIyBOQU1FKCkpOyAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQVNNX0ZBSUxf
SUZfSEVMUEVSX0ZBSUxTKHBhcnNlci5wYXJzZSAjIyBOQU1FKCkpOyAgICAgICAgICAgICBcCiAg
ICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKICAgICAgICAgfQogICAgICAgICBGT1JfRUFDSF9LTk9XTl9XQVNNX1NFQ1RJ
T04oV0FTTV9TRUNUSU9OX1BBUlNFKQogI3VuZGVmIFdBU01fU0VDVElPTl9QQVJTRQogCiAgICAg
ICAgIGNhc2UgU2VjdGlvbjo6Q3VzdG9tOiB7Ci0gICAgICAgICAgICBXQVNNX0ZBSUxfSUZfSEVM
UEVSX0ZBSUxTKHBhcnNlQ3VzdG9tKHNlY3Rpb25MZW5ndGgpKTsKKyAgICAgICAgICAgIFdBU01f
RkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VyLnBhcnNlQ3VzdG9tKCkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KIApAQCAtOTMsNTM4ICs4NiwyNCBAQCBhdXRvIE1vZHVsZVBhcnNl
cjo6cGFyc2UoKSAtPiBSZXN1bHQKICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRihlbmQgIT0gbV9vZmZzZXQsICJwYXJzaW5nIGVuZGVkIGJlZm9yZSB0
aGUgZW5kIG9mICIsIHNlY3Rpb24sICIgc2VjdGlvbiIpOworICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKHBhcnNlci5sZW5ndGgoKSAhPSBwYXJzZXIub2Zmc2V0KCksICJwYXJzaW5nIGVuZGVk
IGJlZm9yZSB0aGUgZW5kIG9mICIsIHNlY3Rpb24sICIgc2VjdGlvbiIpOworCisgICAgICAgIG1f
b2Zmc2V0ICs9IHNlY3Rpb25MZW5ndGg7CiAKIAogICAgICAgICBpZiAoaXNLbm93blNlY3Rpb24o
c2VjdGlvbikpCiAgICAgICAgICAgICBwcmV2aW91c0tub3duU2VjdGlvbiA9IHNlY3Rpb247CiAg
ICAgfQogCi0gICAgcmV0dXJuIHsgfTsKLX0KLQotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlVHlw
ZSgpIC0+IFBhcnRpYWxSZXN1bHQKLXsKLSAgICB1aW50MzJfdCBjb3VudDsKLQotICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGNvdW50KSwgImNhbid0IGdldCBUeXBlIHNl
Y3Rpb24ncyBjb3VudCIpOwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoY291bnQgPiBtYXhUeXBl
cywgIlR5cGUgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgY291bnQsICIgbWF4aW11bSAi
LCBtYXhUeXBlcyk7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT51c2VkU2lnbmF0
dXJlcy50cnlSZXNlcnZlQ2FwYWNpdHkoY291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1l
bW9yeSBmb3IgVHlwZSBzZWN0aW9uJ3MgIiwgY291bnQsICIgZW50cmllcyIpOwotCi0gICAgZm9y
ICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgaW50OF90IHR5cGU7
Ci0gICAgICAgIHVpbnQzMl90IGFyZ3VtZW50Q291bnQ7Ci0gICAgICAgIFZlY3RvcjxUeXBlPiBh
cmd1bWVudFR5cGVzOwotCi0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlSW50Nyh0
eXBlKSwgImNhbid0IGdldCAiLCBpLCAidGggVHlwZSdzIHR5cGUiKTsKLSAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRih0eXBlICE9IEZ1bmMsIGksICJ0aCBUeXBlIGlzIG5vbi1GdW5jICIsIHR5
cGUpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihhcmd1bWVu
dENvdW50KSwgImNhbid0IGdldCAiLCBpLCAidGggVHlwZSdzIGFyZ3VtZW50IGNvdW50Iik7Ci0g
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoYXJndW1lbnRDb3VudCA+IG1heEZ1bmN0aW9uUGFy
YW1zLCBpLCAidGggYXJndW1lbnQgY291bnQgaXMgdG9vIGJpZyAiLCBhcmd1bWVudENvdW50LCAi
IG1heGltdW0gIiwgbWF4RnVuY3Rpb25QYXJhbXMpOwotICAgICAgICBSZWZQdHI8U2lnbmF0dXJl
PiBtYXliZVNpZ25hdHVyZSA9IFNpZ25hdHVyZTo6dHJ5Q3JlYXRlKGFyZ3VtZW50Q291bnQpOwot
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtYXliZVNpZ25hdHVyZSwgImNhbid0IGFsbG9j
YXRlIGVub3VnaCBtZW1vcnkgZm9yIFR5cGUgc2VjdGlvbidzICIsIGksICJ0aCBzaWduYXR1cmUi
KTsKLSAgICAgICAgUmVmPFNpZ25hdHVyZT4gc2lnbmF0dXJlID0gbWF5YmVTaWduYXR1cmUucmVs
ZWFzZU5vbk51bGwoKTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJndW1l
bnRDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBUeXBlIGFyZ3VtZW50VHlwZTsKLSAgICAgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFsdWVUeXBlKGFyZ3VtZW50VHlwZSksICJj
YW4ndCBnZXQgIiwgaSwgInRoIGFyZ3VtZW50IFR5cGUiKTsKLSAgICAgICAgICAgIHNpZ25hdHVy
ZS0+YXJndW1lbnQoaSkgPSBhcmd1bWVudFR5cGU7Ci0gICAgICAgIH0KLQotICAgICAgICB1aW50
OF90IHJldHVybkNvdW50OwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJ
bnQxKHJldHVybkNvdW50KSwgImNhbid0IGdldCAiLCBpLCAidGggVHlwZSdzIHJldHVybiBjb3Vu
dCIpOwotICAgICAgICBUeXBlIHJldHVyblR5cGU7Ci0gICAgICAgIGlmIChyZXR1cm5Db3VudCkg
ewotICAgICAgICAgICAgVHlwZSB2YWx1ZTsKLSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIXBhcnNlVmFsdWVUeXBlKHZhbHVlKSwgImNhbid0IGdldCAiLCBpLCAidGggVHlwZSdzIHJl
dHVybiB2YWx1ZSIpOwotICAgICAgICAgICAgcmV0dXJuVHlwZSA9IHN0YXRpY19jYXN0PFR5cGU+
KHZhbHVlKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICByZXR1cm5UeXBlID0gVHlwZTo6
Vm9pZDsKLSAgICAgICAgc2lnbmF0dXJlLT5yZXR1cm5UeXBlKCkgPSByZXR1cm5UeXBlOwotCi0g
ICAgICAgIHN0ZDo6cGFpcjxTaWduYXR1cmVJbmRleCwgUmVmPFNpZ25hdHVyZT4+IHJlc3VsdCA9
IFNpZ25hdHVyZUluZm9ybWF0aW9uOjphZG9wdChXVEZNb3ZlKHNpZ25hdHVyZSkpOwotICAgICAg
ICBtX2luZm8tPnVzZWRTaWduYXR1cmVzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKHJlc3VsdC5z
ZWNvbmQpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQotYXV0byBNb2R1bGVQYXJzZXI6
OnBhcnNlSW1wb3J0KCkgLT4gUGFydGlhbFJlc3VsdAotewotICAgIHVpbnQzMl90IGltcG9ydENv
dW50OwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGltcG9ydENvdW50
KSwgImNhbid0IGdldCBJbXBvcnQgc2VjdGlvbidzIGNvdW50Iik7Ci0gICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihpbXBvcnRDb3VudCA+IG1heEltcG9ydHMsICJJbXBvcnQgc2VjdGlvbidzIGNvdW50
IGlzIHRvbyBiaWcgIiwgaW1wb3J0Q291bnQsICIgbWF4aW11bSAiLCBtYXhJbXBvcnRzKTsKLSAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmdsb2JhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5
KGltcG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGltcG9y
dENvdW50LCAiIGdsb2JhbHMiKTsgLy8gRklYTUUgdGhpcyBvdmVyLWFsbG9jYXRlcyB3aGVuIHdl
IGZpeCB0aGUgRklYTUVzIGJlbG93LgotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+
aW1wb3J0cy50cnlSZXNlcnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUg
ZW5vdWdoIG1lbW9yeSBmb3IgIiwgaW1wb3J0Q291bnQsICIgaW1wb3J0cyIpOyAvLyBGSVhNRSB0
aGlzIG92ZXItYWxsb2NhdGVzIHdoZW4gd2UgZml4IHRoZSBGSVhNRXMgYmVsb3cuCi0gICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5pbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMu
dHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBt
ZW1vcnkgZm9yICIsIGltcG9ydENvdW50LCAiIGltcG9ydCBmdW5jdGlvbiBzaWduYXR1cmVzIik7
IC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxv
dy4KLQotICAgIGZvciAodWludDMyX3QgaW1wb3J0TnVtYmVyID0gMDsgaW1wb3J0TnVtYmVyIDwg
aW1wb3J0Q291bnQ7ICsraW1wb3J0TnVtYmVyKSB7Ci0gICAgICAgIHVpbnQzMl90IG1vZHVsZUxl
bjsKLSAgICAgICAgdWludDMyX3QgZmllbGRMZW47Ci0gICAgICAgIE5hbWUgbW9kdWxlU3RyaW5n
OwotICAgICAgICBOYW1lIGZpZWxkU3RyaW5nOwotICAgICAgICBFeHRlcm5hbEtpbmQga2luZDsK
LSAgICAgICAgdW5zaWduZWQga2luZEluZGV4IHsgMCB9OwotCi0gICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKG1vZHVsZUxlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0
TnVtYmVyLCAidGggSW1wb3J0J3MgbW9kdWxlIG5hbWUgbGVuZ3RoIik7Ci0gICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVVVEY4U3RyaW5nKG1vZHVsZVN0cmluZywgbW9kdWxlTGVu
KSwgImNhbid0IGdldCAiLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQncyBtb2R1bGUgbmFtZSBv
ZiBsZW5ndGggIiwgbW9kdWxlTGVuKTsKLQotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFw
YXJzZVZhclVJbnQzMihmaWVsZExlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGgg
SW1wb3J0J3MgZmllbGQgbmFtZSBsZW5ndGggaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICIn
Iik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVVVEY4U3RyaW5nKGZpZWxk
U3RyaW5nLCBmaWVsZExlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0
J3MgZmllbGQgbmFtZSBvZiBsZW5ndGggIiwgbW9kdWxlTGVuLCAiIGluIG1vZHVsZSAnIiwgbW9k
dWxlU3RyaW5nLCAiJyIpOwotCi0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlRXh0
ZXJuYWxLaW5kKGtpbmQpLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdz
IGtpbmQgaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0cmlu
ZywgIiciKTsKLSAgICAgICAgc3dpdGNoIChraW5kKSB7Ci0gICAgICAgIGNhc2UgRXh0ZXJuYWxL
aW5kOjpGdW5jdGlvbjogewotICAgICAgICAgICAgdWludDMyX3QgZnVuY3Rpb25TaWduYXR1cmVJ
bmRleDsKLSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGZ1
bmN0aW9uU2lnbmF0dXJlSW5kZXgpLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIElt
cG9ydCdzIGZ1bmN0aW9uIHNpZ25hdHVyZSBpbiBtb2R1bGUgJyIsIG1vZHVsZVN0cmluZywgIicg
ZmllbGQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOwotICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRihmdW5jdGlvblNpZ25hdHVyZUluZGV4ID49IG1faW5mby0+dXNlZFNpZ25hdHVyZXMuc2l6
ZSgpLCAiaW52YWxpZCBmdW5jdGlvbiBzaWduYXR1cmUgZm9yICIsIGltcG9ydE51bWJlciwgInRo
IEltcG9ydCwgIiwgZnVuY3Rpb25TaWduYXR1cmVJbmRleCwgIiBpcyBvdXQgb2YgcmFuZ2Ugb2Yg
IiwgbV9pbmZvLT51c2VkU2lnbmF0dXJlcy5zaXplKCksICIgaW4gbW9kdWxlICciLCBtb2R1bGVT
dHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0cmluZywgIiciKTsKLSAgICAgICAgICAgIGtpbmRJ
bmRleCA9IG1faW5mby0+aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsKLSAg
ICAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gU2lnbmF0dXJlSW5mb3Jt
YXRpb246OmdldChtX2luZm8tPnVzZWRTaWduYXR1cmVzW2Z1bmN0aW9uU2lnbmF0dXJlSW5kZXhd
KTsKLSAgICAgICAgICAgIG1faW5mby0+aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnVu
Y2hlY2tlZEFwcGVuZChzaWduYXR1cmVJbmRleCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIEV4dGVybmFsS2luZDo6VGFibGU6IHsKLSAgICAgICAgICAgIGJv
b2wgaXNJbXBvcnQgPSB0cnVlOwotICAgICAgICAgICAgUGFydGlhbFJlc3VsdCByZXN1bHQgPSBw
YXJzZVRhYmxlSGVscGVyKGlzSW1wb3J0KTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSghcmVz
dWx0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoV1RGTW92ZShyZXN1
bHQuZXJyb3IoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBFeHRlcm5hbEtpbmQ6Ok1lbW9yeTogewotICAgICAgICAgICAgYm9vbCBpc0ltcG9ydCA9IHRy
dWU7Ci0gICAgICAgICAgICBQYXJ0aWFsUmVzdWx0IHJlc3VsdCA9IHBhcnNlTWVtb3J5SGVscGVy
KGlzSW1wb3J0KTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoV1RGTW92ZShyZXN1bHQuZXJyb3IoKSkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6
Okdsb2JhbDogewotICAgICAgICAgICAgR2xvYmFsIGdsb2JhbDsKLSAgICAgICAgICAgIFdBU01f
RkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VHbG9iYWxUeXBlKGdsb2JhbCkpOwotICAgICAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihnbG9iYWwubXV0YWJpbGl0eSA9PSBHbG9iYWw6Ok11dGFi
bGUsICJNdXRhYmxlIEdsb2JhbHMgYXJlbid0IHN1cHBvcnRlZCIpOwotCi0gICAgICAgICAgICBr
aW5kSW5kZXggPSBtX2luZm8tPmdsb2JhbHMuc2l6ZSgpOwotICAgICAgICAgICAgbV9pbmZvLT5n
bG9iYWxzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGdsb2JhbCkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIG1faW5mby0+aW1wb3J0cy51bmNo
ZWNrZWRBcHBlbmQoeyBXVEZNb3ZlKG1vZHVsZVN0cmluZyksIFdURk1vdmUoZmllbGRTdHJpbmcp
LCBraW5kLCBraW5kSW5kZXggfSk7Ci0gICAgfQotCi0gICAgbV9pbmZvLT5maXJzdEludGVybmFs
R2xvYmFsID0gbV9pbmZvLT5nbG9iYWxzLnNpemUoKTsKLSAgICByZXR1cm4geyB9OwotfQotCi1h
dXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbigpIC0+IFBhcnRpYWxSZXN1bHQKLXsKLSAg
ICB1aW50MzJfdCBjb3VudDsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQz
Mihjb3VudCksICJjYW4ndCBnZXQgRnVuY3Rpb24gc2VjdGlvbidzIGNvdW50Iik7Ci0gICAgV0FT
TV9QQVJTRVJfRkFJTF9JRihjb3VudCA+IG1heEZ1bmN0aW9ucywgIkZ1bmN0aW9uIHNlY3Rpb24n
cyBjb3VudCBpcyB0b28gYmlnICIsIGNvdW50LCAiIG1heGltdW0gIiwgbWF4RnVuY3Rpb25zKTsK
LSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmludGVybmFsRnVuY3Rpb25TaWduYXR1
cmVJbmRpY2VzLnRyeVJlc2VydmVDYXBhY2l0eShjb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91
Z2ggbWVtb3J5IGZvciAiLCBjb3VudCwgIiBGdW5jdGlvbiBzaWduYXR1cmVzIik7Ci0gICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkudHJ5UmVz
ZXJ2ZUNhcGFjaXR5KGNvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIs
IGNvdW50LCAiRnVuY3Rpb24gbG9jYXRpb25zIik7Ci0KLSAgICBmb3IgKHVpbnQzMl90IGkgPSAw
OyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICB1aW50MzJfdCB0eXBlTnVtYmVyOwotICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMih0eXBlTnVtYmVyKSwgImNhbid0
IGdldCAiLCBpLCAidGggRnVuY3Rpb24ncyB0eXBlIG51bWJlciIpOwotICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKHR5cGVOdW1iZXIgPj0gbV9pbmZvLT51c2VkU2lnbmF0dXJlcy5zaXplKCks
IGksICJ0aCBGdW5jdGlvbiB0eXBlIG51bWJlciBpcyBpbnZhbGlkICIsIHR5cGVOdW1iZXIpOwot
Ci0gICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gU2lnbmF0dXJlSW5mb3Jt
YXRpb246OmdldChtX2luZm8tPnVzZWRTaWduYXR1cmVzW3R5cGVOdW1iZXJdKTsKLSAgICAgICAg
Ly8gVGhlIENvZGUgc2VjdGlvbiBmaXhlcyB1cCBzdGFydCBhbmQgZW5kLgotICAgICAgICBzaXpl
X3Qgc3RhcnQgPSAwOwotICAgICAgICBzaXplX3QgZW5kID0gMDsKLSAgICAgICAgbV9pbmZvLT5p
bnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy51bmNoZWNrZWRBcHBlbmQoc2lnbmF0dXJl
SW5kZXgpOwotICAgICAgICBtX2luZm8tPmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS51bmNoZWNr
ZWRBcHBlbmQoeyBzdGFydCwgZW5kIH0pOworICAgIGlmIChPcHRpb25zOjp1c2VFYWdlcldlYkFz
c2VtYmx5TW9kdWxlSGFzaGluZygpKSB7CisgICAgICAgIFNIQTEgaGFzaGVyOworICAgICAgICBo
YXNoZXIuYWRkQnl0ZXMoc291cmNlKCksIGxlbmd0aCgpKTsKKyAgICAgICAgbV9pbmZvLT5uYW1l
U2VjdGlvbi0+c2V0SGFzaChoYXNoZXIuY29tcHV0ZUhleERpZ2VzdCgpKTsKICAgICB9CiAKICAg
ICByZXR1cm4geyB9OwogfQogCi1hdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VSZXNpemFibGVMaW1p
dHModWludDMyX3QmIGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+JiBtYXhpbXVtKSAt
PiBQYXJ0aWFsUmVzdWx0Ci17Ci0gICAgQVNTRVJUKCFtYXhpbXVtKTsKLQotICAgIHVpbnQ4X3Qg
ZmxhZ3M7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MShmbGFncyksICJj
YW4ndCBwYXJzZSByZXNpemFibGUgbGltaXRzIGZsYWdzIik7Ci0gICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VWYXJVSW50MzIoaW5pdGlhbCksICJjYW4ndCBwYXJzZSByZXNpemFibGUgbGlt
aXRzIGluaXRpYWwgcGFnZSBjb3VudCIpOwotCi0gICAgaWYgKGZsYWdzKSB7Ci0gICAgICAgIHVp
bnQzMl90IG1heGltdW1JbnQ7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFy
VUludDMyKG1heGltdW1JbnQpLCAiY2FuJ3QgcGFyc2UgcmVzaXphYmxlIGxpbWl0cyBtYXhpbXVt
IHBhZ2UgY291bnQiKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbml0aWFsID4gbWF4
aW11bUludCwgInJlc2l6YWJsZSBsaW1pdHMgaGFzIGEgaW5pdGlhbCBwYWdlIGNvdW50IG9mICIs
IGluaXRpYWwsICIgd2hpY2ggaXMgZ3JlYXRlciB0aGFuIGl0cyBtYXhpbXVtICIsIG1heGltdW1J
bnQpOwotICAgICAgICBtYXhpbXVtID0gbWF4aW11bUludDsKLSAgICB9Ci0KLSAgICByZXR1cm4g
eyB9OwotfQotCi1hdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VUYWJsZUhlbHBlcihib29sIGlzSW1w
b3J0KSAtPiBQYXJ0aWFsUmVzdWx0Ci17Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX3RhYmxl
Q291bnQgPiAwLCAiQ2Fubm90IGhhdmUgbW9yZSB0aGFuIG9uZSBUYWJsZSBmb3Igbm93Iik7Ci0K
LSAgICArK21fdGFibGVDb3VudDsKLQotICAgIGludDhfdCB0eXBlOwotICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXBhcnNlSW50Nyh0eXBlKSwgImNhbid0IHBhcnNlIFRhYmxlIHR5cGUiKTsKLSAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKHR5cGUgIT0gV2FzbTo6QW55ZnVuYywgIlRhYmxlIHR5cGUg
c2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAiLCB0eXBlKTsKLQotICAgIHVpbnQzMl90IGluaXRpYWw7
Ci0gICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bTsKLSAgICBQYXJ0aWFsUmVzdWx0
IGxpbWl0cyA9IHBhcnNlUmVzaXphYmxlTGltaXRzKGluaXRpYWwsIG1heGltdW0pOwotICAgIGlm
IChVTkxJS0VMWSghbGltaXRzKSkKLSAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFdURk1v
dmUobGltaXRzLmVycm9yKCkpKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluaXRpYWwgPiBt
YXhUYWJsZUVudHJpZXMsICJUYWJsZSdzIGluaXRpYWwgcGFnZSBjb3VudCBvZiAiLCBpbml0aWFs
LCAiIGlzIHRvbyBiaWcsIG1heGltdW0gIiwgbWF4VGFibGVFbnRyaWVzKTsKLQotICAgIEFTU0VS
VCghbWF4aW11bSB8fCAqbWF4aW11bSA+PSBpbml0aWFsKTsKLQotICAgIG1faW5mby0+dGFibGVJ
bmZvcm1hdGlvbiA9IFRhYmxlSW5mb3JtYXRpb24oaW5pdGlhbCwgbWF4aW11bSwgaXNJbXBvcnQp
OwotCi0gICAgcmV0dXJuIHsgfTsKLX0KLQotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlVGFibGUo
KSAtPiBQYXJ0aWFsUmVzdWx0Ci17Ci0gICAgdWludDMyX3QgY291bnQ7Ci0gICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoY291bnQpLCAiY2FuJ3QgZ2V0IFRhYmxlJ3MgY291
bnQiKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGNvdW50ID4gMSwgIlRhYmxlIGNvdW50IG9m
ICIsIGNvdW50LCAiIGlzIGludmFsaWQsIGF0IG1vc3QgMSBpcyBhbGxvd2VkIGZvciBub3ciKTsK
LQotICAgIGlmICghY291bnQpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBib29sIGlzSW1w
b3J0ID0gZmFsc2U7Ci0gICAgUGFydGlhbFJlc3VsdCByZXN1bHQgPSBwYXJzZVRhYmxlSGVscGVy
KGlzSW1wb3J0KTsKLSAgICBpZiAoVU5MSUtFTFkoIXJlc3VsdCkpCi0gICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChXVEZNb3ZlKHJlc3VsdC5lcnJvcigpKSk7Ci0KLSAgICByZXR1cm4geyB9
OwotfQotCi1hdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VNZW1vcnlIZWxwZXIoYm9vbCBpc0ltcG9y
dCkgLT4gUGFydGlhbFJlc3VsdAotewotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9tZW1vcnlD
b3VudCwgInRoZXJlIGNhbiBhdCBtb3N0IGJlIG9uZSBNZW1vcnkgc2VjdGlvbiBmb3Igbm93Iik7
Ci0KLSAgICArK21fbWVtb3J5Q291bnQ7Ci0KLSAgICBQYWdlQ291bnQgaW5pdGlhbFBhZ2VDb3Vu
dDsKLSAgICBQYWdlQ291bnQgbWF4aW11bVBhZ2VDb3VudDsKLSAgICB7Ci0gICAgICAgIHVpbnQz
Ml90IGluaXRpYWw7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW07Ci0g
ICAgICAgIFBhcnRpYWxSZXN1bHQgbGltaXRzID0gcGFyc2VSZXNpemFibGVMaW1pdHMoaW5pdGlh
bCwgbWF4aW11bSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghbGltaXRzKSkKLSAgICAgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZChXVEZNb3ZlKGxpbWl0cy5lcnJvcigpKSk7Ci0gICAgICAg
IEFTU0VSVCghbWF4aW11bSB8fCAqbWF4aW11bSA+PSBpbml0aWFsKTsKLSAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighUGFnZUNvdW50Ojppc1ZhbGlkKGluaXRpYWwpLCAiTWVtb3J5J3MgaW5p
dGlhbCBwYWdlIGNvdW50IG9mICIsIGluaXRpYWwsICIgaXMgaW52YWxpZCIpOwotCi0gICAgICAg
IGluaXRpYWxQYWdlQ291bnQgPSBQYWdlQ291bnQoaW5pdGlhbCk7Ci0KLSAgICAgICAgaWYgKG1h
eGltdW0pIHsKLSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIVBhZ2VDb3VudDo6aXNW
YWxpZCgqbWF4aW11bSksICJNZW1vcnkncyBtYXhpbXVtIHBhZ2UgY291bnQgb2YgIiwgKm1heGlt
dW0sICIgaXMgaW52YWxpZCIpOwotICAgICAgICAgICAgbWF4aW11bVBhZ2VDb3VudCA9IFBhZ2VD
b3VudCgqbWF4aW11bSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgQVNTRVJUKGluaXRpYWxQYWdl
Q291bnQpOwotICAgIEFTU0VSVCghbWF4aW11bVBhZ2VDb3VudCB8fCBtYXhpbXVtUGFnZUNvdW50
ID49IGluaXRpYWxQYWdlQ291bnQpOwotCi0gICAgbV9pbmZvLT5tZW1vcnkgPSBNZW1vcnlJbmZv
cm1hdGlvbihpbml0aWFsUGFnZUNvdW50LCBtYXhpbXVtUGFnZUNvdW50LCBpc0ltcG9ydCk7Ci0g
ICAgcmV0dXJuIHsgfTsKLX0KLQotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlTWVtb3J5KCkgLT4g
UGFydGlhbFJlc3VsdAotewotICAgIHVpbnQ4X3QgY291bnQ7Ci0gICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VWYXJVSW50MShjb3VudCksICJjYW4ndCBwYXJzZSBNZW1vcnkgc2VjdGlvbidz
IGNvdW50Iik7Ci0KLSAgICBpZiAoIWNvdW50KQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAg
V0FTTV9QQVJTRVJfRkFJTF9JRihjb3VudCAhPSAxLCAiTWVtb3J5IHNlY3Rpb24gaGFzIG1vcmUg
dGhhbiBvbmUgbWVtb3J5LCBXZWJBc3NlbWJseSBjdXJyZW50bHkgb25seSBhbGxvd3MgemVybyBv
ciBvbmUiKTsKLQotICAgIGJvb2wgaXNJbXBvcnQgPSBmYWxzZTsKLSAgICByZXR1cm4gcGFyc2VN
ZW1vcnlIZWxwZXIoaXNJbXBvcnQpOwotfQotCi1hdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VHbG9i
YWwoKSAtPiBQYXJ0aWFsUmVzdWx0Ci17Ci0gICAgdWludDMyX3QgZ2xvYmFsQ291bnQ7Ci0gICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZ2xvYmFsQ291bnQpLCAiY2FuJ3Qg
Z2V0IEdsb2JhbCBzZWN0aW9uJ3MgY291bnQiKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGds
b2JhbENvdW50ID4gbWF4R2xvYmFscywgIkdsb2JhbCBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJp
ZyAiLCBnbG9iYWxDb3VudCwgIiBtYXhpbXVtICIsIG1heEdsb2JhbHMpOwotICAgIHNpemVfdCB0
b3RhbEJ5dGVzID0gZ2xvYmFsQ291bnQgKyBtX2luZm8tPmZpcnN0SW50ZXJuYWxHbG9iYWw7Ci0g
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRigoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHRvdGFsQnl0ZXMp
IDwgZ2xvYmFsQ291bnQpIHx8ICFtX2luZm8tPmdsb2JhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KHRv
dGFsQnl0ZXMpLCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiLCB0b3RhbEJ5dGVzLCAiIGds
b2JhbHMiKTsKLQotICAgIGZvciAodWludDMyX3QgZ2xvYmFsSW5kZXggPSAwOyBnbG9iYWxJbmRl
eCA8IGdsb2JhbENvdW50OyArK2dsb2JhbEluZGV4KSB7Ci0gICAgICAgIEdsb2JhbCBnbG9iYWw7
Ci0gICAgICAgIHVpbnQ4X3QgaW5pdE9wY29kZTsKLQotICAgICAgICBXQVNNX0ZBSUxfSUZfSEVM
UEVSX0ZBSUxTKHBhcnNlR2xvYmFsVHlwZShnbG9iYWwpKTsKLSAgICAgICAgVHlwZSB0eXBlRm9y
SW5pdE9wY29kZTsKLSAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUluaXRF
eHByKGluaXRPcGNvZGUsIGdsb2JhbC5pbml0aWFsQml0c09ySW1wb3J0TnVtYmVyLCB0eXBlRm9y
SW5pdE9wY29kZSkpOwotICAgICAgICBpZiAoaW5pdE9wY29kZSA9PSBHZXRHbG9iYWwpCi0gICAg
ICAgICAgICBnbG9iYWwuaW5pdGlhbGl6YXRpb25UeXBlID0gR2xvYmFsOjpGcm9tR2xvYmFsSW1w
b3J0OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBnbG9iYWwuaW5pdGlhbGl6YXRpb25UeXBl
ID0gR2xvYmFsOjpGcm9tRXhwcmVzc2lvbjsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0
eXBlRm9ySW5pdE9wY29kZSAhPSBnbG9iYWwudHlwZSwgIkdsb2JhbCBpbml0X2V4cHIgb3Bjb2Rl
IG9mIHR5cGUgIiwgdHlwZUZvckluaXRPcGNvZGUsICIgZG9lc24ndCBtYXRjaCBnbG9iYWwncyB0
eXBlICIsIGdsb2JhbC50eXBlKTsKLQotICAgICAgICBtX2luZm8tPmdsb2JhbHMudW5jaGVja2Vk
QXBwZW5kKFdURk1vdmUoZ2xvYmFsKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsgfTsKLX0KLQot
YXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlRXhwb3J0KCkgLT4gUGFydGlhbFJlc3VsdAotewotICAg
IHVpbnQzMl90IGV4cG9ydENvdW50OwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFy
VUludDMyKGV4cG9ydENvdW50KSwgImNhbid0IGdldCBFeHBvcnQgc2VjdGlvbidzIGNvdW50Iik7
Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRihleHBvcnRDb3VudCA+IG1heEV4cG9ydHMsICJFeHBv
cnQgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgZXhwb3J0Q291bnQsICIgbWF4aW11bSAi
LCBtYXhFeHBvcnRzKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmV4cG9ydHMu
dHJ5UmVzZXJ2ZUNhcGFjaXR5KGV4cG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBt
ZW1vcnkgZm9yICIsIGV4cG9ydENvdW50LCAiIGV4cG9ydHMiKTsKLQotICAgIEhhc2hTZXQ8U3Ry
aW5nPiBleHBvcnROYW1lczsKLSAgICBmb3IgKHVpbnQzMl90IGV4cG9ydE51bWJlciA9IDA7IGV4
cG9ydE51bWJlciA8IGV4cG9ydENvdW50OyArK2V4cG9ydE51bWJlcikgewotICAgICAgICB1aW50
MzJfdCBmaWVsZExlbjsKLSAgICAgICAgTmFtZSBmaWVsZFN0cmluZzsKLSAgICAgICAgRXh0ZXJu
YWxLaW5kIGtpbmQ7Ci0gICAgICAgIHVuc2lnbmVkIGtpbmRJbmRleDsKLQotICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihmaWVsZExlbiksICJjYW4ndCBnZXQgIiwg
ZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0J3MgZmllbGQgbmFtZSBsZW5ndGgiKTsKLSAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighY29uc3VtZVVURjhTdHJpbmcoZmllbGRTdHJpbmcsIGZpZWxk
TGVuKSwgImNhbid0IGdldCAiLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQncyBmaWVsZCBuYW1l
IG9mIGxlbmd0aCAiLCBmaWVsZExlbik7Ci0gICAgICAgIFN0cmluZyBmaWVsZE5hbWUgPSBTdHJp
bmc6OmZyb21VVEY4KGZpZWxkU3RyaW5nKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihl
eHBvcnROYW1lcy5jb250YWlucyhmaWVsZE5hbWUpLCAiZHVwbGljYXRlIGV4cG9ydDogJyIsIGZp
ZWxkU3RyaW5nLCAiJyIpOwotICAgICAgICBleHBvcnROYW1lcy5hZGQoZmllbGROYW1lKTsKLQot
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUV4dGVybmFsS2luZChraW5kKSwgImNh
bid0IGdldCAiLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQncyBraW5kLCBuYW1lZCAnIiwgZmll
bGRTdHJpbmcsICInIik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUlu
dDMyKGtpbmRJbmRleCksICJjYW4ndCBnZXQgIiwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0J3Mg
a2luZCBpbmRleCwgbmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOwotICAgICAgICBzd2l0Y2gg
KGtpbmQpIHsKLSAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6OkZ1bmN0aW9uOiB7Ci0gICAgICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGtpbmRJbmRleCA+PSBtX2luZm8tPmZ1bmN0aW9uSW5k
ZXhTcGFjZVNpemUoKSwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0IGhhcyBpbnZhbGlkIGZ1bmN0
aW9uIG51bWJlciAiLCBraW5kSW5kZXgsICIgaXQgZXhjZWVkcyB0aGUgZnVuY3Rpb24gaW5kZXgg
c3BhY2UgIiwgbV9pbmZvLT5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCksICIsIG5hbWVkICciLCBm
aWVsZFN0cmluZywgIiciKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgRXh0ZXJuYWxLaW5kOjpUYWJsZTogewotICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRihraW5kSW5kZXggPj0gbV90YWJsZUNvdW50LCAiY2FuJ3QgZXhwb3J0IFRhYmxlICIsIGtp
bmRJbmRleCwgIiB0aGVyZSBhcmUgIiwgbV90YWJsZUNvdW50LCAiIFRhYmxlcyIpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6Ok1lbW9y
eTogewotICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5tZW1vcnksICJj
YW4ndCBleHBvcnQgYSBub24tZXhpc3RlbnQgTWVtb3J5Iik7Ci0gICAgICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKGtpbmRJbmRleCwgImNhbid0IGV4cG9ydCBNZW1vcnkgIiwga2luZEluZGV4
LCAiIG9ubHkgb25lIFRhYmxlIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQiKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpHbG9iYWw6IHsK
LSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoa2luZEluZGV4ID49IG1faW5mby0+Z2xv
YmFscy5zaXplKCksIGV4cG9ydE51bWJlciwgInRoIEV4cG9ydCBoYXMgaW52YWxpZCBnbG9iYWwg
bnVtYmVyICIsIGtpbmRJbmRleCwgIiBpdCBleGNlZWRzIHRoZSBnbG9iYWxzIGNvdW50ICIsIG1f
aW5mby0+Z2xvYmFscy5zaXplKCksICIsIG5hbWVkICciLCBmaWVsZFN0cmluZywgIiciKTsKLSAg
ICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9pbmZvLT5nbG9iYWxzW2tpbmRJbmRleF0u
bXV0YWJpbGl0eSAhPSBHbG9iYWw6OkltbXV0YWJsZSwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0
IGlzbid0IGltbXV0YWJsZSwgbmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIG1faW5mby0+ZXhwb3J0
cy51bmNoZWNrZWRBcHBlbmQoeyBXVEZNb3ZlKGZpZWxkU3RyaW5nKSwga2luZCwga2luZEluZGV4
IH0pOwotICAgIH0KLQotICAgIHJldHVybiB7IH07Ci19Ci0KLWF1dG8gTW9kdWxlUGFyc2VyOjpw
YXJzZVN0YXJ0KCkgLT4gUGFydGlhbFJlc3VsdAotewotICAgIHVpbnQzMl90IHN0YXJ0RnVuY3Rp
b25JbmRleDsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihzdGFydEZ1
bmN0aW9uSW5kZXgpLCAiY2FuJ3QgZ2V0IFN0YXJ0IGluZGV4Iik7Ci0gICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihzdGFydEZ1bmN0aW9uSW5kZXggPj0gbV9pbmZvLT5mdW5jdGlvbkluZGV4U3BhY2VT
aXplKCksICJTdGFydCBpbmRleCAiLCBzdGFydEZ1bmN0aW9uSW5kZXgsICIgZXhjZWVkcyBmdW5j
dGlvbiBpbmRleCBzcGFjZSAiLCBtX2luZm8tPmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7Ci0g
ICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX2luZm8tPnNpZ25hdHVyZUluZGV4
RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXgpOwotICAgIGNvbnN0IFNp
Z25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJ
bmRleCk7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRihzaWduYXR1cmUuYXJndW1lbnRDb3VudCgp
LCAiU3RhcnQgZnVuY3Rpb24gY2FuJ3QgaGF2ZSBhcmd1bWVudHMiKTsKLSAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKHNpZ25hdHVyZS5yZXR1cm5UeXBlKCkgIT0gVm9pZCwgIlN0YXJ0IGZ1bmN0aW9u
IGNhbid0IHJldHVybiBhIHZhbHVlIik7Ci0gICAgbV9pbmZvLT5zdGFydEZ1bmN0aW9uSW5kZXhT
cGFjZSA9IHN0YXJ0RnVuY3Rpb25JbmRleDsKLSAgICByZXR1cm4geyB9OwotfQotCi1hdXRvIE1v
ZHVsZVBhcnNlcjo6cGFyc2VFbGVtZW50KCkgLT4gUGFydGlhbFJlc3VsdAotewotICAgIHVpbnQz
Ml90IGVsZW1lbnRDb3VudDsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQz
MihlbGVtZW50Q291bnQpLCAiY2FuJ3QgZ2V0IEVsZW1lbnQgc2VjdGlvbidzIGNvdW50Iik7Ci0g
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihlbGVtZW50Q291bnQgPiBtYXhUYWJsZUVudHJpZXMsICJF
bGVtZW50IHNlY3Rpb24ncyBjb3VudCBpcyB0b28gYmlnICIsIGVsZW1lbnRDb3VudCwgIiBtYXhp
bXVtICIsIG1heFRhYmxlRW50cmllcyk7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZv
LT5lbGVtZW50cy50cnlSZXNlcnZlQ2FwYWNpdHkoZWxlbWVudENvdW50KSwgImNhbid0IGFsbG9j
YXRlIG1lbW9yeSBmb3IgIiwgZWxlbWVudENvdW50LCAiIEVsZW1lbnRzIik7Ci0gICAgZm9yICh1
bnNpZ25lZCBlbGVtZW50TnVtID0gMDsgZWxlbWVudE51bSA8IGVsZW1lbnRDb3VudDsgKytlbGVt
ZW50TnVtKSB7Ci0gICAgICAgIHVpbnQzMl90IHRhYmxlSW5kZXg7Ci0gICAgICAgIHVpbnQ2NF90
IGluaXRFeHByQml0czsKLSAgICAgICAgdWludDhfdCBpbml0T3Bjb2RlOwotICAgICAgICB1aW50
MzJfdCBpbmRleENvdW50OwotCi0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFy
VUludDMyKHRhYmxlSW5kZXgpLCAiY2FuJ3QgZ2V0ICIsIGVsZW1lbnROdW0sICJ0aCBFbGVtZW50
IHRhYmxlIGluZGV4Iik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYodGFibGVJbmRleCA+
PSBtX3RhYmxlQ291bnQsICJFbGVtZW50IHNlY3Rpb24gZm9yIFRhYmxlICIsIHRhYmxlSW5kZXgs
ICIgZXhjZWVkcyBhdmFpbGFibGUgVGFibGUgIiwgbV90YWJsZUNvdW50KTsKLSAgICAgICAgVHlw
ZSBpbml0RXhwclR5cGU7Ci0gICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VJ
bml0RXhwcihpbml0T3Bjb2RlLCBpbml0RXhwckJpdHMsIGluaXRFeHByVHlwZSkpOwotICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluaXRFeHByVHlwZSAhPSBJMzIsICJFbGVtZW50IGluaXRf
ZXhwciBtdXN0IHByb2R1Y2UgYW4gaTMyIik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlVmFyVUludDMyKGluZGV4Q291bnQpLCAiY2FuJ3QgZ2V0ICIsIGVsZW1lbnROdW0sICJ0
aCBpbmRleCBjb3VudCBmb3IgRWxlbWVudCBzZWN0aW9uIik7Ci0gICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoaW5kZXhDb3VudCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4
KCksICJFbGVtZW50IHNlY3Rpb24ncyAiLCBlbGVtZW50TnVtLCAidGggaW5kZXggY291bnQgaXMg
dG9vIGJpZyAiLCBpbmRleENvdW50KTsKLQotICAgICAgICBBU1NFUlQoISFtX2luZm8tPnRhYmxl
SW5mb3JtYXRpb24pOwotCi0gICAgICAgIEVsZW1lbnQgZWxlbWVudChtYWtlSTMySW5pdEV4cHIo
aW5pdE9wY29kZSwgaW5pdEV4cHJCaXRzKSk7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IWVsZW1lbnQuZnVuY3Rpb25JbmRpY2VzLnRyeVJlc2VydmVDYXBhY2l0eShpbmRleENvdW50KSwg
ImNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgIiwgaW5kZXhDb3VudCwgIiBFbGVtZW50IGluZGlj
ZXMiKTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBpbmRleENv
dW50OyArK2luZGV4KSB7Ci0gICAgICAgICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4OwotICAg
ICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZnVuY3Rpb25JbmRl
eCksICJjYW4ndCBnZXQgRWxlbWVudCBzZWN0aW9uJ3MgIiwgZWxlbWVudE51bSwgInRoIGVsZW1l
bnQncyAiLCBpbmRleCwgInRoIGluZGV4Iik7Ci0gICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKGZ1bmN0aW9uSW5kZXggPj0gbV9pbmZvLT5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCksICJF
bGVtZW50IHNlY3Rpb24ncyAiLCBlbGVtZW50TnVtLCAidGggZWxlbWVudCdzICIsIGluZGV4LCAi
dGggaW5kZXggaXMgIiwgZnVuY3Rpb25JbmRleCwgIiB3aGljaCBleGNlZWRzIHRoZSBmdW5jdGlv
biBpbmRleCBzcGFjZSBzaXplIG9mICIsIG1faW5mby0+ZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgp
KTsKLQotICAgICAgICAgICAgZWxlbWVudC5mdW5jdGlvbkluZGljZXMudW5jaGVja2VkQXBwZW5k
KGZ1bmN0aW9uSW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9pbmZvLT5lbGVtZW50cy51
bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShlbGVtZW50KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsg
fTsKLX0KLQotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlQ29kZSgpIC0+IFBhcnRpYWxSZXN1bHQK
LXsKLSAgICB1aW50MzJfdCBjb3VudDsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZh
clVJbnQzMihjb3VudCksICJjYW4ndCBnZXQgQ29kZSBzZWN0aW9uJ3MgY291bnQiKTsKLSAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKGNvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+
OjptYXgoKSwgIkNvZGUgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgY291bnQpOwotICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoY291bnQgIT0gbV9pbmZvLT5mdW5jdGlvbkxvY2F0aW9uSW5C
aW5hcnkuc2l6ZSgpLCAiQ29kZSBzZWN0aW9uIGNvdW50ICIsIGNvdW50LCAiIGV4Y2VlZHMgdGhl
IGRlY2xhcmVkIG51bWJlciBvZiBmdW5jdGlvbnMgIiwgbV9pbmZvLT5mdW5jdGlvbkxvY2F0aW9u
SW5CaW5hcnkuc2l6ZSgpKTsKLQotICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsg
KytpKSB7Ci0gICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uU2l6ZTsKLSAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZnVuY3Rpb25TaXplKSwgImNhbid0IGdldCAiLCBp
LCAidGggQ29kZSBmdW5jdGlvbidzIHNpemUiKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RihmdW5jdGlvblNpemUgPiBsZW5ndGgoKSwgIkNvZGUgZnVuY3Rpb24ncyBzaXplICIsIGZ1bmN0
aW9uU2l6ZSwgIiBleGNlZWRzIHRoZSBtb2R1bGUncyBzaXplICIsIGxlbmd0aCgpKTsKLSAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvblNpemUgPiBsZW5ndGgoKSAtIG1fb2Zmc2V0
LCAiQ29kZSBmdW5jdGlvbidzIHNpemUgIiwgZnVuY3Rpb25TaXplLCAiIGV4Y2VlZHMgdGhlIG1v
ZHVsZSdzIHJlbWFpbmluZyBzaXplIiwgbGVuZ3RoKCkgLSBtX29mZnNldCk7Ci0gICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25TaXplID4gbWF4RnVuY3Rpb25TaXplLCAiQ29kZSBm
dW5jdGlvbidzIHNpemUgIiwgZnVuY3Rpb25TaXplLCAiIGlzIHRvbyBiaWciKTsKLQotICAgICAg
ICBtX2luZm8tPmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtpXS5zdGFydCA9IG1fb2Zmc2V0Owot
ICAgICAgICBtX2luZm8tPmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtpXS5lbmQgPSBtX29mZnNl
dCArIGZ1bmN0aW9uU2l6ZTsKLSAgICAgICAgbV9vZmZzZXQgPSBtX2luZm8tPmZ1bmN0aW9uTG9j
YXRpb25JbkJpbmFyeVtpXS5lbmQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsgfTsKLX0KLQotYXV0
byBNb2R1bGVQYXJzZXI6OnBhcnNlSW5pdEV4cHIodWludDhfdCYgb3Bjb2RlLCB1aW50NjRfdCYg
Yml0c09ySW1wb3J0TnVtYmVyLCBUeXBlJiByZXN1bHRUeXBlKSAtPiBQYXJ0aWFsUmVzdWx0Ci17
Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VVSW50OChvcGNvZGUpLCAiY2FuJ3QgZ2V0
IGluaXRfZXhwcidzIG9wY29kZSIpOwotCi0gICAgc3dpdGNoIChvcGNvZGUpIHsKLSAgICBjYXNl
IEkzMkNvbnN0OiB7Ci0gICAgICAgIGludDMyX3QgY29uc3RhbnQ7Ci0gICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIXBhcnNlVmFySW50MzIoY29uc3RhbnQpLCAiY2FuJ3QgZ2V0IGNvbnN0YW50
IHZhbHVlIGZvciBpbml0X2V4cHIncyBpMzIuY29uc3QiKTsKLSAgICAgICAgYml0c09ySW1wb3J0
TnVtYmVyID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGNvbnN0YW50KTsKLSAgICAgICAgcmVzdWx0
VHlwZSA9IEkzMjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBJNjRDb25zdDog
ewotICAgICAgICBpbnQ2NF90IGNvbnN0YW50OwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFwYXJzZVZhckludDY0KGNvbnN0YW50KSwgImNhbid0IGdldCBjb25zdGFudCB2YWx1ZSBmb3Ig
aW5pdF9leHByJ3MgaTY0LmNvbnN0Iik7Ci0gICAgICAgIGJpdHNPckltcG9ydE51bWJlciA9IGNv
bnN0YW50OwotICAgICAgICByZXN1bHRUeXBlID0gSTY0OwotICAgICAgICBicmVhazsKLSAgICB9
Ci0KLSAgICBjYXNlIEYzMkNvbnN0OiB7Ci0gICAgICAgIHVpbnQzMl90IGNvbnN0YW50OwotICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQzMihjb25zdGFudCksICJjYW4ndCBn
ZXQgY29uc3RhbnQgdmFsdWUgZm9yIGluaXRfZXhwcidzIGYzMi5jb25zdCIpOwotICAgICAgICBi
aXRzT3JJbXBvcnROdW1iZXIgPSBjb25zdGFudDsKLSAgICAgICAgcmVzdWx0VHlwZSA9IEYzMjsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBGNjRDb25zdDogewotICAgICAgICB1
aW50NjRfdCBjb25zdGFudDsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VVSW50
NjQoY29uc3RhbnQpLCAiY2FuJ3QgZ2V0IGNvbnN0YW50IHZhbHVlIGZvciBpbml0X2V4cHIncyBm
NjQuY29uc3QiKTsKLSAgICAgICAgYml0c09ySW1wb3J0TnVtYmVyID0gY29uc3RhbnQ7Ci0gICAg
ICAgIHJlc3VsdFR5cGUgPSBGNjQ7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2Ug
R2V0R2xvYmFsOiB7Ci0gICAgICAgIHVpbnQzMl90IGluZGV4OwotICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbmRleCksICJjYW4ndCBnZXQgZ2V0X2dsb2JhbCdz
IGluZGV4Iik7Ci0KLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbmRleCA+PSBtX2luZm8t
Pmdsb2JhbHMuc2l6ZSgpLCAiZ2V0X2dsb2JhbCdzIGluZGV4ICIsIGluZGV4LCAiIGV4Y2VlZHMg
dGhlIG51bWJlciBvZiBnbG9iYWxzICIsIG1faW5mby0+Z2xvYmFscy5zaXplKCkpOwotICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluZGV4ID49IG1faW5mby0+Zmlyc3RJbnRlcm5hbEdsb2Jh
bCwgImdldF9nbG9iYWwgaW1wb3J0IGtpbmQgaW5kZXggIiwgaW5kZXgsICIgZXhjZWVkcyB0aGUg
Zmlyc3QgaW50ZXJuYWwgZ2xvYmFsICIsIG1faW5mby0+Zmlyc3RJbnRlcm5hbEdsb2JhbCk7Ci0K
LSAgICAgICAgQVNTRVJUKG1faW5mby0+Z2xvYmFsc1tpbmRleF0ubXV0YWJpbGl0eSA9PSBHbG9i
YWw6OkltbXV0YWJsZSk7Ci0gICAgICAgIHJlc3VsdFR5cGUgPSBtX2luZm8tPmdsb2JhbHNbaW5k
ZXhdLnR5cGU7Ci0gICAgICAgIGJpdHNPckltcG9ydE51bWJlciA9IGluZGV4OwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KHRydWUsICJ1bmtub3duIGluaXRfZXhwciBvcGNvZGUgIiwgb3Bjb2RlKTsKLSAgICB9Ci0KLSAg
ICB1aW50OF90IGVuZE9wY29kZTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ4
KGVuZE9wY29kZSksICJjYW4ndCBnZXQgaW5pdF9leHByJ3MgZW5kIG9wY29kZSIpOwotICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoZW5kT3Bjb2RlICE9IE9wVHlwZTo6RW5kLCAiaW5pdF9leHByIHNo
b3VsZCBlbmQgd2l0aCBlbmQsIGVuZGVkIHdpdGggIiwgZW5kT3Bjb2RlKTsKLQotICAgIHJldHVy
biB7IH07Ci19Ci0KLWF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZUdsb2JhbFR5cGUoR2xvYmFsJiBn
bG9iYWwpIC0+IFBhcnRpYWxSZXN1bHQKLXsKLSAgICB1aW50OF90IG11dGFiaWxpdHk7Ci0gICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYWx1ZVR5cGUoZ2xvYmFsLnR5cGUpLCAiY2FuJ3Qg
Z2V0IEdsb2JhbCdzIHZhbHVlIHR5cGUiKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJz
ZVZhclVJbnQxKG11dGFiaWxpdHkpLCAiY2FuJ3QgZ2V0IEdsb2JhbCB0eXBlJ3MgbXV0YWJpbGl0
eSIpOwotICAgIGdsb2JhbC5tdXRhYmlsaXR5ID0gc3RhdGljX2Nhc3Q8R2xvYmFsOjpNdXRhYmls
aXR5PihtdXRhYmlsaXR5KTsKLSAgICByZXR1cm4geyB9OwotfQotCi1hdXRvIE1vZHVsZVBhcnNl
cjo6cGFyc2VEYXRhKCkgLT4gUGFydGlhbFJlc3VsdAotewotICAgIHVpbnQzMl90IHNlZ21lbnRD
b3VudDsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihzZWdtZW50Q291
bnQpLCAiY2FuJ3QgZ2V0IERhdGEgc2VjdGlvbidzIGNvdW50Iik7Ci0gICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihzZWdtZW50Q291bnQgPiBtYXhEYXRhU2VnbWVudHMsICJEYXRhIHNlY3Rpb24ncyBj
b3VudCBpcyB0b28gYmlnICIsIHNlZ21lbnRDb3VudCwgIiBtYXhpbXVtICIsIG1heERhdGFTZWdt
ZW50cyk7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5kYXRhLnRyeVJlc2VydmVD
YXBhY2l0eShzZWdtZW50Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3Ig
RGF0YSBzZWN0aW9uJ3MgIiwgc2VnbWVudENvdW50LCAiIHNlZ21lbnRzIik7Ci0KLSAgICBmb3Ig
KHVpbnQzMl90IHNlZ21lbnROdW1iZXIgPSAwOyBzZWdtZW50TnVtYmVyIDwgc2VnbWVudENvdW50
OyArK3NlZ21lbnROdW1iZXIpIHsKLSAgICAgICAgdWludDMyX3QgbWVtb3J5SW5kZXg7Ci0gICAg
ICAgIHVpbnQ2NF90IGluaXRFeHByQml0czsKLSAgICAgICAgdWludDhfdCBpbml0T3Bjb2RlOwot
ICAgICAgICB1aW50MzJfdCBkYXRhQnl0ZUxlbmd0aDsKLQotICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFwYXJzZVZhclVJbnQzMihtZW1vcnlJbmRleCksICJjYW4ndCBnZXQgIiwgc2VnbWVu
dE51bWJlciwgInRoIERhdGEgc2VnbWVudCdzIGluZGV4Iik7Ci0gICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYobWVtb3J5SW5kZXggPj0gbV9tZW1vcnlDb3VudCwgc2VnbWVudE51bWJlciwgInRo
IERhdGEgc2VnbWVudCBoYXMgaW5kZXggIiwgbWVtb3J5SW5kZXgsICIgd2hpY2ggZXhjZWVkcyB0
aGUgbnVtYmVyIG9mIE1lbW9yaWVzICIsIG1fbWVtb3J5Q291bnQpOwotICAgICAgICBUeXBlIGlu
aXRFeHByVHlwZTsKLSAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUluaXRF
eHByKGluaXRPcGNvZGUsIGluaXRFeHByQml0cywgaW5pdEV4cHJUeXBlKSk7Ci0gICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoaW5pdEV4cHJUeXBlICE9IEkzMiwgc2VnbWVudE51bWJlciwgInRo
IERhdGEgc2VnbWVudCdzIGluaXRfZXhwciBtdXN0IHByb2R1Y2UgYW4gaTMyIik7Ci0gICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGRhdGFCeXRlTGVuZ3RoKSwgImNh
bid0IGdldCAiLCBzZWdtZW50TnVtYmVyLCAidGggRGF0YSBzZWdtZW50J3MgZGF0YSBieXRlIGxl
bmd0aCIpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGRhdGFCeXRlTGVuZ3RoID4gbWF4
TW9kdWxlU2l6ZSwgc2VnbWVudE51bWJlciwgInRoIERhdGEgc2VnbWVudCdzIGRhdGEgYnl0ZSBs
ZW5ndGggaXMgdG9vIGJpZyAiLCBkYXRhQnl0ZUxlbmd0aCwgIiBtYXhpbXVtICIsIG1heE1vZHVs
ZVNpemUpOwotCi0gICAgICAgIFNlZ21lbnQqIHNlZ21lbnQgPSBTZWdtZW50OjpjcmVhdGUobWFr
ZUkzMkluaXRFeHByKGluaXRPcGNvZGUsIGluaXRFeHByQml0cyksIGRhdGFCeXRlTGVuZ3RoKTsK
LSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighc2VnbWVudCwgImNhbid0IGFsbG9jYXRlIGVu
b3VnaCBtZW1vcnkgZm9yICIsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQgb2Ygc2l6
ZSAiLCBkYXRhQnl0ZUxlbmd0aCk7Ci0gICAgICAgIG1faW5mby0+ZGF0YS51bmNoZWNrZWRBcHBl
bmQoU2VnbWVudDo6YWRvcHRQdHIoc2VnbWVudCkpOwotICAgICAgICBmb3IgKHVpbnQzMl90IGRh
dGFCeXRlID0gMDsgZGF0YUJ5dGUgPCBkYXRhQnl0ZUxlbmd0aDsgKytkYXRhQnl0ZSkgewotICAg
ICAgICAgICAgdWludDhfdCBieXRlOwotICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
cGFyc2VVSW50OChieXRlKSwgImNhbid0IGdldCAiLCBkYXRhQnl0ZSwgInRoIGRhdGEgYnl0ZSBm
cm9tICIsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQiKTsKLSAgICAgICAgICAgIHNl
Z21lbnQtPmJ5dGUoZGF0YUJ5dGUpID0gYnl0ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1
cm4geyB9OwotfQotICAgIAotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlQ3VzdG9tKHVpbnQzMl90
IHNlY3Rpb25MZW5ndGgpIC0+IFBhcnRpYWxSZXN1bHQKLXsKLSAgICBjb25zdCB1aW50MzJfdCBj
dXN0b21TZWN0aW9uU3RhcnRPZmZzZXQgPSBtX29mZnNldDsKLQotICAgIEN1c3RvbVNlY3Rpb24g
c2VjdGlvbjsKLSAgICB1aW50MzJfdCBjdXN0b21TZWN0aW9uTnVtYmVyID0gbV9pbmZvLT5jdXN0
b21TZWN0aW9ucy5zaXplKCkgKyAxOwotICAgIHVpbnQzMl90IG5hbWVMZW47Ci0gICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighbV9pbmZvLT5jdXN0b21TZWN0aW9ucy50cnlSZXNlcnZlQ2FwYWNpdHko
Y3VzdG9tU2VjdGlvbk51bWJlciksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAi
LCBjdXN0b21TZWN0aW9uTnVtYmVyLCAidGggY3VzdG9tIHNlY3Rpb24iKTsKLSAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihuYW1lTGVuKSwgImNhbid0IGdldCAiLCBjdXN0
b21TZWN0aW9uTnVtYmVyLCAidGggY3VzdG9tIHNlY3Rpb24ncyBuYW1lIGxlbmd0aCIpOwotICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVVVEY4U3RyaW5nKHNlY3Rpb24ubmFtZSwgbmFt
ZUxlbiksICJuYW1lTGVuIGdldCAiLCBjdXN0b21TZWN0aW9uTnVtYmVyLCAidGggY3VzdG9tIHNl
Y3Rpb24ncyBuYW1lIG9mIGxlbmd0aCAiLCBuYW1lTGVuKTsKLQotICAgIHVpbnQzMl90IHBheWxv
YWRCeXRlcyA9IHNlY3Rpb25MZW5ndGggLSAobV9vZmZzZXQgLSBjdXN0b21TZWN0aW9uU3RhcnRP
ZmZzZXQpOwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXNlY3Rpb24ucGF5bG9hZC50cnlSZXNl
cnZlQ2FwYWNpdHkocGF5bG9hZEJ5dGVzKSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkg
Zm9yICIsIGN1c3RvbVNlY3Rpb25OdW1iZXIsICJ0aCBjdXN0b20gc2VjdGlvbidzICIsIHBheWxv
YWRCeXRlcywgIiBieXRlcyIpOwotICAgIGZvciAodWludDMyX3QgYnl0ZU51bWJlciA9IDA7IGJ5
dGVOdW1iZXIgPCBwYXlsb2FkQnl0ZXM7ICsrYnl0ZU51bWJlcikgewotICAgICAgICB1aW50OF90
IGJ5dGU7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUludDgoYnl0ZSksICJj
YW4ndCBnZXQgIiwgYnl0ZU51bWJlciwgInRoIGRhdGEgYnl0ZSBmcm9tICIsIGN1c3RvbVNlY3Rp
b25OdW1iZXIsICJ0aCBjdXN0b20gc2VjdGlvbiIpOwotICAgICAgICBzZWN0aW9uLnBheWxvYWQu
dW5jaGVja2VkQXBwZW5kKGJ5dGUpOwotICAgIH0KLQotICAgIE5hbWUgbmFtZU5hbWUgPSB7ICdu
JywgJ2EnLCAnbScsICdlJyB9OwotICAgIGlmIChzZWN0aW9uLm5hbWUgPT0gbmFtZU5hbWUpIHsK
LSAgICAgICAgTmFtZVNlY3Rpb25QYXJzZXIgbmFtZVNlY3Rpb25QYXJzZXIoc2VjdGlvbi5wYXls
b2FkLmJlZ2luKCksIHNlY3Rpb24ucGF5bG9hZC5zaXplKCksIG1faW5mbyk7Ci0gICAgICAgIGlm
IChhdXRvIG5hbWVTZWN0aW9uID0gbmFtZVNlY3Rpb25QYXJzZXIucGFyc2UoKSkKLSAgICAgICAg
ICAgIG1faW5mby0+bmFtZVNlY3Rpb24gPSBXVEZNb3ZlKCpuYW1lU2VjdGlvbik7Ci0gICAgfQot
Ci0gICAgbV9pbmZvLT5jdXN0b21TZWN0aW9ucy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShzZWN0
aW9uKSk7Ci0KLSAgICByZXR1cm4geyB9OwotfQotCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2Fz
bQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oCmluZGV4IGE2NTFiZTE3Y2UyM2I4NWZiYjk3YmJi
Njg1NzAzYjM5YjY0YjcyYzQuLmQzM2I3Nzk1MzM3M2RiMjdmMTUxOTlkOTgwNDA4MGYwOTI5NmVk
YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJz
ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgK
QEAgLTQ2LDIxICs0Niw3IEBAIGNsYXNzIE1vZHVsZVBhcnNlciA6IHB1YmxpYyBQYXJzZXI8dm9p
ZD4gewogICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2UoKTsKIAogcHJpdmF0ZToK
LQotI2RlZmluZSBXQVNNX1NFQ1RJT05fREVDTEFSRV9QQVJTRVIoTkFNRSwgSUQsIERFU0NSSVBU
SU9OKSBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZSAjIyBOQU1FKCk7Ci0g
ICAgRk9SX0VBQ0hfS05PV05fV0FTTV9TRUNUSU9OKFdBU01fU0VDVElPTl9ERUNMQVJFX1BBUlNF
UikKLSN1bmRlZiBXQVNNX1NFQ1RJT05fREVDTEFSRV9QQVJTRVIKLQotICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlQ3VzdG9tKHVpbnQzMl90KTsKLSAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUdsb2JhbFR5cGUoR2xvYmFsJik7Ci0gICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VNZW1vcnlIZWxwZXIoYm9vbCBp
c0ltcG9ydCk7Ci0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VUYWJs
ZUhlbHBlcihib29sIGlzSW1wb3J0KTsKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBwYXJzZVJlc2l6YWJsZUxpbWl0cyh1aW50MzJfdCYgaW5pdGlhbCwgc3RkOjpvcHRpb25h
bDx1aW50MzJfdD4mIG1heGltdW0pOwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIHBhcnNlSW5pdEV4cHIodWludDhfdCYsIHVpbnQ2NF90JiwgVHlwZSYgaW5pdEV4cHJUeXBl
KTsKLQogICAgIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4gbV9pbmZvOwotICAgIHVpbnQzMl90IG1f
bWVtb3J5Q291bnQgeyAwIH07Ci0gICAgdWludDMyX3QgbV90YWJsZUNvdW50IHsgMCB9OwogfTsK
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21OYW1lU2VjdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU5hbWVTZWN0aW9uLmgKaW5kZXggN2MwMmYyZjQxOTc3MDVhYzhiZWVlZjQ0MTg5OTBk
MjhlZTM0ZjA4NC4uZmU2M2NmNTU0NzM2NmZjMTc0MGMxZjBjNzBiYTgxYmU3NTM2YTg4ZSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU5hbWVTZWN0aW9uLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU5hbWVTZWN0aW9uLmgKQEAgLTM2LDEx
ICszNiwyMCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCiBzdHJ1Y3QgTmFt
ZVNlY3Rpb24gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TmFtZVNlY3Rpb24+IHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShOYW1lU2VjdGlvbik7Ci0KIHB1YmxpYzoKLSAgICBOYW1l
U2VjdGlvbihjb25zdCBzdGQ6Om9wdGlvbmFsPENTdHJpbmc+ICZoYXNoKQotICAgICAgICA6IG1v
ZHVsZUhhc2goaGFzaCA/IGhhc2gtPmxlbmd0aCgpIDogMykKKyAgICBOYW1lU2VjdGlvbigpCisg
ICAgeworICAgICAgICBzZXRIYXNoKHN0ZDo6bnVsbG9wdCk7CisgICAgfQorCisgICAgc3RhdGlj
IFJlZjxOYW1lU2VjdGlvbj4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IE5hbWVTZWN0aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIHNldEhhc2goY29uc3Qgc3Rk
OjpvcHRpb25hbDxDU3RyaW5nPiAmaGFzaCkKICAgICB7CisgICAgICAgIG1vZHVsZUhhc2ggPSBO
YW1lKGhhc2ggPyBoYXNoLT5sZW5ndGgoKSA6IDMpOwogICAgICAgICBpZiAoaGFzaCkgewogICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBoYXNoLT5sZW5ndGgoKTsgKytpKQogICAg
ICAgICAgICAgICAgIG1vZHVsZUhhc2hbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90PigqKGhhc2gt
PmRhdGEoKSArIGkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21OYW1lU2VjdGlvblBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TmFtZVNlY3Rpb25QYXJzZXIuY3BwCmluZGV4IDczMzk2MjE1Y2Y1OGJjNTI2YjM0OGNjMGE4OGM3
MTNkNGRlYzU5NzcuLjVlYmRjMGNjYWU0MDdhMmI5YjlhM2I5MWY2ZWNhNTgyNWMxMmExZWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21OYW1lU2VjdGlvblBhcnNl
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU5hbWVTZWN0aW9uUGFy
c2VyLmNwcApAQCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20g
ewogCiBhdXRvIE5hbWVTZWN0aW9uUGFyc2VyOjpwYXJzZSgpIC0+IFJlc3VsdAogewotICAgIFJl
ZlB0cjxOYW1lU2VjdGlvbj4gbmFtZVNlY3Rpb24oYWRvcHRSZWYoKm5ldyBOYW1lU2VjdGlvbiht
X2luZm8uaGFzaCkpKTsKKyAgICBSZWY8TmFtZVNlY3Rpb24+IG5hbWVTZWN0aW9uID0gTmFtZVNl
Y3Rpb246OmNyZWF0ZSgpOwogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW5hbWVTZWN0aW9uLT5m
dW5jdGlvbk5hbWVzLnRyeVJlc2VydmVDYXBhY2l0eShtX2luZm8uZnVuY3Rpb25JbmRleFNwYWNl
U2l6ZSgpKSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIGZ1bmN0aW9uIG5hbWVz
Iik7CiAgICAgbmFtZVNlY3Rpb24tPmZ1bmN0aW9uTmFtZXMucmVzaXplKG1faW5mby5mdW5jdGlv
bkluZGV4U3BhY2VTaXplKCkpOwogCkBAIC05Niw3ICs5Niw3IEBAIGF1dG8gTmFtZVNlY3Rpb25Q
YXJzZXI6OnBhcnNlKCkgLT4gUmVzdWx0CiAgICAgICAgIH0KICAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihwYXlsb2FkU3RhcnQgKyBwYXlsb2FkTGVuZ3RoICE9IG1fb2Zmc2V0KTsKICAgICB9
Ci0gICAgcmV0dXJuIG5hbWVTZWN0aW9uOworICAgIHJldHVybiBXVEZNb3ZlKG5hbWVTZWN0aW9u
KTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21OYW1lU2VjdGlvblBhcnNlci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmgKaW5kZXggYjdhZjBkOWI5MGE2
ZDUyNmU5MmQ0ZDgyNGZlZWRiNDRkNTk4NzY4My4uZDhlNmFlNzFiMjZiNGJlY2M4Yjg4OGJiZmQ1
ZWIyNzk4NWM2ZDIxOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU5hbWVTZWN0aW9uUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU5hbWVTZWN0aW9uUGFyc2VyLmgKQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBXYXNtIHsKIAotY2xhc3MgTmFtZVNlY3Rpb25QYXJzZXIgOiBwdWJsaWMgUGFy
c2VyPFJlZlB0cjxOYW1lU2VjdGlvbj4+IHsKK2NsYXNzIE5hbWVTZWN0aW9uUGFyc2VyIDogcHVi
bGljIFBhcnNlcjxSZWY8TmFtZVNlY3Rpb24+PiB7CiBwdWJsaWM6CiAgICAgTmFtZVNlY3Rpb25Q
YXJzZXIoY29uc3QgdWludDhfdCogc291cmNlQnVmZmVyLCBzaXplX3Qgc291cmNlTGVuZ3RoLCBj
b25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbykKICAgICAgICAgOiBQYXJzZXIoc291cmNlQnVm
ZmVyLCBzb3VyY2VMZW5ndGgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtT01HUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxh
bi5jcHAKaW5kZXggNDdkZWFkNjRhZjhmZDVjMzY5OWQyZThmNjQwZWQ4YmViMDQyMGM5ZC4uOWUw
YzRhNTY2NmU0NGUwZWFjYzIzMTJhYmJiNzY1NDUzYjg3OWY0OCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcApAQCAtNjksMjEgKzY5LDE4IEBAIHZvaWQgT01H
UGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKIHsKICAgICBBU1NFUlQobV9jb2RlQmxvY2st
PnJ1bm5hYmxlKCkpOwogICAgIEFTU0VSVChtX2NvZGVCbG9jay5wdHIoKSA9PSBtX21vZHVsZS0+
Y29kZUJsb2NrRm9yKG1vZGUoKSkpOwotICAgIGNvbnN0IEZ1bmN0aW9uTG9jYXRpb25JbkJpbmFy
eSYgbG9jYXRpb24gPSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbkxvY2F0aW9uSW5CaW5h
cnlbbV9mdW5jdGlvbkluZGV4XTsKLSAgICBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0ID0g
bV9tb2R1bGVJbmZvcm1hdGlvbi0+c291cmNlLmRhdGEoKSArIGxvY2F0aW9uLnN0YXJ0OwotICAg
IGNvbnN0IHNpemVfdCBmdW5jdGlvbkxlbmd0aCA9IGxvY2F0aW9uLmVuZCAtIGxvY2F0aW9uLnN0
YXJ0OwotICAgIEFTU0VSVChmdW5jdGlvblN0YXJ0ICsgZnVuY3Rpb25MZW5ndGggPD0gbV9tb2R1
bGVJbmZvcm1hdGlvbi0+c291cmNlLmVuZCgpKTsKKyAgICBjb25zdCBGdW5jdGlvbkRhdGEmIGZ1
bmN0aW9uID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25zW21fZnVuY3Rpb25JbmRleF07
CiAKICAgICBjb25zdCB1aW50MzJfdCBmdW5jdGlvbkluZGV4U3BhY2UgPSBtX2Z1bmN0aW9uSW5k
ZXggKyBtX21vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5pbXBvcnRGdW5jdGlvbkNvdW50KCk7
CiAgICAgQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA8IG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1h
dGlvbigpLmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7CiAKICAgICBTaWduYXR1cmVJbmRleCBz
aWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWdu
YXR1cmVJbmRpY2VzW21fZnVuY3Rpb25JbmRleF07CiAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWdu
YXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKLSAgICBB
U1NFUlQodmFsaWRhdGVGdW5jdGlvbihmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2ln
bmF0dXJlLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpKSk7CisgICAgQVNTRVJUKHZhbGlkYXRl
RnVuY3Rpb24oZnVuY3Rpb24uZGF0YS5kYXRhKCksIGZ1bmN0aW9uLmRhdGEuc2l6ZSgpLCBzaWdu
YXR1cmUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCkpKTsKIAogICAgIFZlY3RvcjxVbmxpbmtl
ZFdhc21Ub1dhc21DYWxsPiB1bmxpbmtlZENhbGxzOwogICAgIENvbXBpbGF0aW9uQ29udGV4dCBj
b250ZXh0OwotICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxl
KGNvbnRleHQsIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIHVubGlu
a2VkQ2FsbHMsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25N
b2RlOjpPTUdNb2RlLCBtX2Z1bmN0aW9uSW5kZXgpOworICAgIGF1dG8gcGFyc2VBbmRDb21waWxl
UmVzdWx0ID0gcGFyc2VBbmRDb21waWxlKGNvbnRleHQsIGZ1bmN0aW9uLmRhdGEuZGF0YSgpLCBm
dW5jdGlvbi5kYXRhLnNpemUoKSwgc2lnbmF0dXJlLCB1bmxpbmtlZENhbGxzLCBtX21vZHVsZUlu
Zm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6T01HTW9kZSwgbV9mdW5j
dGlvbkluZGV4KTsKIAogICAgIGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxlUmVzdWx0KSkg
ewogICAgICAgICBmYWlsKGhvbGRMb2NrKG1fbG9jayksIG1ha2VTdHJpbmcocGFyc2VBbmRDb21w
aWxlUmVzdWx0LmVycm9yKCksICJ3aGVuIHRyeWluZyB0byB0aWVyIHVwICIsIFN0cmluZzo6bnVt
YmVyKG1fZnVuY3Rpb25JbmRleCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21QYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYXJz
ZXIuaAppbmRleCA2NTEwNzA1ZWFmNTc4Y2UzM2UzYmQ3NmIyYmM4MzhhZGRhNWY1YjAwLi45ZmM0
YTQ1NGM5YjcyNmZhMTNlODRhNGI0NzNmZWFkODEyYmI5OWYwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVBhcnNlci5oCkBAIC01OCw2ICs1OCwxMCBAQCBjbGFzcyBQYXJzZXIgewog
ICAgIHR5cGVkZWYgRXhwZWN0ZWQ8dm9pZCwgRXJyb3JUeXBlPiBQYXJ0aWFsUmVzdWx0OwogICAg
IHR5cGVkZWYgRXhwZWN0ZWQ8U3VjY2Vzc1R5cGUsIEVycm9yVHlwZT4gUmVzdWx0OwogCisgICAg
Y29uc3QgdWludDhfdCogc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KKyAgICBz
aXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VMZW5ndGg7IH0KKyAgICBzaXpl
X3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKwogcHJvdGVjdGVkOgogICAg
IFBhcnNlcihjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKIApAQCAtODEsMTYgKzg1LDEzIEBAIGNs
YXNzIFBhcnNlciB7CiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VWYWx1ZVR5cGUo
VHlwZSYpOwogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlRXh0ZXJuYWxLaW5kKEV4
dGVybmFsS2luZCYpOwogCi0gICAgY29uc3QgdWludDhfdCogc291cmNlKCkgY29uc3QgeyByZXR1
cm4gbV9zb3VyY2U7IH0KLSAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9zb3Vy
Y2VMZW5ndGg7IH0KLQogICAgIHNpemVfdCBtX29mZnNldCA9IDA7CiAKICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgLi4uQXJncz4KICAgICBORVZFUl9JTkxJTkUgVW5leHBlY3RlZFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gZmFpbChBcmdzLi4uIGFyZ3MpIGNvbnN0CiAgICAgewogICAgICAgICB1
c2luZyBuYW1lc3BhY2UgRmFpbHVyZUhlbHBlcjsgLy8gU2VlIEFETCBjb21tZW50IGluIG5hbWVz
cGFjZSBhYm92ZS4KLSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRSZXN1bHQobWFrZVN0cmluZygi
V2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAiX3MsIFN0cmluZzo6bnVt
YmVyKG1fb2Zmc2V0KSwgIiAvICJfcywgU3RyaW5nOjpudW1iZXIobV9zb3VyY2VMZW5ndGgpLCAi
OiAiX3MsIG1ha2VTdHJpbmcoYXJncykuLi4pKTsKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRS
ZXN1bHQobWFrZVN0cmluZygiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0
ZSAiX3MsIFN0cmluZzo6bnVtYmVyKG1fb2Zmc2V0KSwgIjogIl9zLCBtYWtlU3RyaW5nKGFyZ3Mp
Li4uKSk7CiAgICAgfQogI2RlZmluZSBXQVNNX1BBUlNFUl9GQUlMX0lGKGNvbmRpdGlvbiwgLi4u
KSBkbyB7IFwKICAgICBpZiAoVU5MSUtFTFkoY29uZGl0aW9uKSkgICAgICAgICAgICAgICAgICAg
ICBcCkBAIC0yODUsNiArMjg2LDE0IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI8U3VjY2Vz
c1R5cGU+OjpwYXJzZUV4dGVybmFsS2luZChFeHRlcm5hbEtpbmQmIHJlc3VsdCkKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAorQUxXQVlTX0lOTElORSBJMzJJbml0RXhwciBtYWtlSTMySW5pdEV4cHIo
dWludDhfdCBvcGNvZGUsIHVpbnQzMl90IGJpdHMpCit7CisgICAgUkVMRUFTRV9BU1NFUlQob3Bj
b2RlID09IEkzMkNvbnN0IHx8IG9wY29kZSA9PSBHZXRHbG9iYWwpOworICAgIGlmIChvcGNvZGUg
PT0gSTMyQ29uc3QpCisgICAgICAgIHJldHVybiBJMzJJbml0RXhwcjo6Y29uc3RWYWx1ZShiaXRz
KTsKKyAgICByZXR1cm4gSTMySW5pdEV4cHI6Omdsb2JhbEltcG9ydChiaXRzKTsKK30KKwogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAppbmRleCBhMzRkZWVjYjE2YjE0
MGJlYjUzYjg3YzZlMmE3MDM5ODM0OTMwYzJjLi45OTc0ZWNmZTU1YmFmMjg5ZWVjNTY1MDY2YTFj
ZDQ5YWUyM2E4MjBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
UGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCkBA
IC01Myw4ICs1Myw2IEBAIFBsYW46OlBsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVsZUlu
Zm9ybWF0aW9uPiBpbmZvLCBDb21wbGV0aW9uVGFzayYmIHRhc2ssCiAgICAgOiBtX21vZHVsZUlu
Zm9ybWF0aW9uKFdURk1vdmUoaW5mbykpCiAgICAgLCBtX2NyZWF0ZUVtYmVkZGVyV3JhcHBlcihX
VEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlcikpCiAgICAgLCBtX3Rocm93V2FzbUV4Y2VwdGlv
bih0aHJvd1dhc21FeGNlcHRpb24pCi0gICAgLCBtX3NvdXJjZShtX21vZHVsZUluZm9ybWF0aW9u
LT5zb3VyY2UuZGF0YSgpKQotICAgICwgbV9zb3VyY2VMZW5ndGgobV9tb2R1bGVJbmZvcm1hdGlv
bi0+c291cmNlLnNpemUoKSkKIHsKICAgICBtX2NvbXBsZXRpb25UYXNrcy5hcHBlbmQoc3RkOjpt
YWtlX3BhaXIoY29udGV4dCwgV1RGTW92ZSh0YXNrKSkpOwogfQpAQCAtNjQsMTAgKzYyLDggQEAg
UGxhbjo6UGxhbihDb250ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGluZm8s
IENvbXBsZXRpb25UYXNrJiYgdGFzaykKIHsKIH0KIAotUGxhbjo6UGxhbihDb250ZXh0KiBjb250
ZXh0LCBjb25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgsIENvbXBsZXRp
b25UYXNrJiYgdGFzaykKLSAgICA6IG1fbW9kdWxlSW5mb3JtYXRpb24oYWRvcHRSZWYoKm5ldyBN
b2R1bGVJbmZvcm1hdGlvbihWZWN0b3I8dWludDhfdD4oKSkpKQotICAgICwgbV9zb3VyY2Uoc291
cmNlKQotICAgICwgbV9zb3VyY2VMZW5ndGgoc291cmNlTGVuZ3RoKQorUGxhbjo6UGxhbihDb250
ZXh0KiBjb250ZXh0LCBDb21wbGV0aW9uVGFzayYmIHRhc2spCisgICAgOiBtX21vZHVsZUluZm9y
bWF0aW9uKE1vZHVsZUluZm9ybWF0aW9uOjpjcmVhdGUoKSkKIHsKICAgICBtX2NvbXBsZXRpb25U
YXNrcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoY29udGV4dCwgV1RGTW92ZSh0YXNrKSkpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgKaW5kZXggN2EwN2JmZDNhMGIwNmU5MzQ0
MDk1N2RiMzZkZTZkZGRhZTYzYzY0Yy4uOWVjNjg4NjU4MTMzMWJhY2M5ZjA4ZGQyNmY5YWFiYjRl
OWJkNTNiZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4u
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCkBAIC01NCw3ICs1
NCw3IEBAIGNsYXNzIFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UGxhbj4gewog
ICAgIFBsYW4oQ29udGV4dCosIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4sIENvbXBsZXRpb25UYXNr
JiYpOwogCiAgICAgLy8gTm90ZTogVGhpcyBjb25zdHJ1Y3RvciBzaG91bGQgb25seSBiZSB1c2Vk
IGlmIHlvdSBhcmUgbm90IGFjdHVhbGx5IGJ1aWxkaW5nIGEgbW9kdWxlIGUuZy4gdmFsaWRhdGlv
bi9mdW5jdGlvbiB0ZXN0cwotICAgIEpTX0VYUE9SVF9QUklWQVRFIFBsYW4oQ29udGV4dCosIGNv
bnN0IHVpbnQ4X3QqLCBzaXplX3QsIENvbXBsZXRpb25UYXNrJiYpOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIFBsYW4oQ29udGV4dCosIENvbXBsZXRpb25UYXNrJiYpOwogICAgIHZpcnR1YWwgSlNf
RVhQT1JUX1BSSVZBVEUgflBsYW4oKTsKIAogICAgIC8vIElmIHlvdSBndWFyYW50ZWUgdGhlIG9y
ZGVyaW5nIGhlcmUsIHlvdSBjYW4gcmVseSBvbiBGSUZPIG9mIHRoZQpAQCAtOTAsOCArOTAsNiBA
QCBjbGFzcyBQbGFuIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFBsYW4+IHsKICAgICBD
cmVhdGVFbWJlZGRlcldyYXBwZXIgbV9jcmVhdGVFbWJlZGRlcldyYXBwZXI7CiAgICAgVGhyb3dX
YXNtRXhjZXB0aW9uIG1fdGhyb3dXYXNtRXhjZXB0aW9uIHsgbnVsbHB0ciB9OwogCi0gICAgY29u
c3QgdWludDhfdCogbV9zb3VyY2U7Ci0gICAgY29uc3Qgc2l6ZV90IG1fc291cmNlTGVuZ3RoOwog
ICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsKICAgICBNZW1vcnlNb2RlIG1fbW9kZSB7IE1lbW9y
eU1vZGU6OkJvdW5kc0NoZWNraW5nIH07CiAgICAgTG9jayBtX2xvY2s7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWE5
YmFjYjY3ZGVkMjUwNDUzNWQ4YzJkZTVjNWVkODMzZGVmMTYwMgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9uUGFyc2VyLmNwcApAQCAtMCww
ICsxLDU2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2UgU3V6dWtpIDx5
dXN1a2VzdXp1a2lAc2xvd3N0YXJ0Lm9yZz4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXYXNtU2VjdGlv
blBhcnNlci5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiSWRlbnRp
ZmllcklubGluZXMuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5SW5mb3JtYXRpb24uaCIKKyNpbmNs
dWRlICJXYXNtTmFtZVNlY3Rpb25QYXJzZXIuaCIKKyNpbmNsdWRlICJXYXNtT3BzLmgiCisjaW5j
bHVkZSAiV2FzbVNlY3Rpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7
CisKK2F1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VUeXBlKCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHVpbnQzMl90IGNvdW50OworCisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJV
SW50MzIoY291bnQpLCAiY2FuJ3QgZ2V0IFR5cGUgc2VjdGlvbidzIGNvdW50Iik7CisgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRihjb3VudCA+IG1heFR5cGVzLCAiVHlwZSBzZWN0aW9uJ3MgY291bnQg
aXMgdG9vIGJpZyAiLCBjb3VudCwgIiBtYXhpbXVtICIsIG1heFR5cGVzKTsKKyAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFtX2luZm8tPnVzZWRTaWduYXR1cmVzLnRyeVJlc2VydmVDYXBhY2l0eShj
b3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBUeXBlIHNlY3Rpb24ncyAi
LCBjb3VudCwgIiBlbnRyaWVzIik7CisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgY291
bnQ7ICsraSkgeworICAgICAgICBpbnQ4X3QgdHlwZTsKKyAgICAgICAgdWludDMyX3QgYXJndW1l
bnRDb3VudDsKKyAgICAgICAgVmVjdG9yPFR5cGU+IGFyZ3VtZW50VHlwZXM7CisKKyAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VJbnQ3KHR5cGUpLCAiY2FuJ3QgZ2V0ICIsIGksICJ0
aCBUeXBlJ3MgdHlwZSIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHR5cGUgIT0gRnVu
YywgaSwgInRoIFR5cGUgaXMgbm9uLUZ1bmMgIiwgdHlwZSk7CisgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGFyZ3VtZW50Q291bnQpLCAiY2FuJ3QgZ2V0ICIsIGks
ICJ0aCBUeXBlJ3MgYXJndW1lbnQgY291bnQiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
Rihhcmd1bWVudENvdW50ID4gbWF4RnVuY3Rpb25QYXJhbXMsIGksICJ0aCBhcmd1bWVudCBjb3Vu
dCBpcyB0b28gYmlnICIsIGFyZ3VtZW50Q291bnQsICIgbWF4aW11bSAiLCBtYXhGdW5jdGlvblBh
cmFtcyk7CisgICAgICAgIFJlZlB0cjxTaWduYXR1cmU+IG1heWJlU2lnbmF0dXJlID0gU2lnbmF0
dXJlOjp0cnlDcmVhdGUoYXJndW1lbnRDb3VudCk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIW1heWJlU2lnbmF0dXJlLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgVHlw
ZSBzZWN0aW9uJ3MgIiwgaSwgInRoIHNpZ25hdHVyZSIpOworICAgICAgICBSZWY8U2lnbmF0dXJl
PiBzaWduYXR1cmUgPSBtYXliZVNpZ25hdHVyZS5yZWxlYXNlTm9uTnVsbCgpOworCisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmd1bWVudENvdW50OyArK2kpIHsKKyAgICAgICAg
ICAgIFR5cGUgYXJndW1lbnRUeXBlOworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
cGFyc2VWYWx1ZVR5cGUoYXJndW1lbnRUeXBlKSwgImNhbid0IGdldCAiLCBpLCAidGggYXJndW1l
bnQgVHlwZSIpOworICAgICAgICAgICAgc2lnbmF0dXJlLT5hcmd1bWVudChpKSA9IGFyZ3VtZW50
VHlwZTsKKyAgICAgICAgfQorCisgICAgICAgIHVpbnQ4X3QgcmV0dXJuQ291bnQ7CisgICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDEocmV0dXJuQ291bnQpLCAiY2FuJ3Qg
Z2V0ICIsIGksICJ0aCBUeXBlJ3MgcmV0dXJuIGNvdW50Iik7CisgICAgICAgIFR5cGUgcmV0dXJu
VHlwZTsKKyAgICAgICAgaWYgKHJldHVybkNvdW50KSB7CisgICAgICAgICAgICBUeXBlIHZhbHVl
OworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYWx1ZVR5cGUodmFsdWUp
LCAiY2FuJ3QgZ2V0ICIsIGksICJ0aCBUeXBlJ3MgcmV0dXJuIHZhbHVlIik7CisgICAgICAgICAg
ICByZXR1cm5UeXBlID0gc3RhdGljX2Nhc3Q8VHlwZT4odmFsdWUpOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIHJldHVyblR5cGUgPSBUeXBlOjpWb2lkOworICAgICAgICBzaWduYXR1cmUt
PnJldHVyblR5cGUoKSA9IHJldHVyblR5cGU7CisKKyAgICAgICAgc3RkOjpwYWlyPFNpZ25hdHVy
ZUluZGV4LCBSZWY8U2lnbmF0dXJlPj4gcmVzdWx0ID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmFk
b3B0KFdURk1vdmUoc2lnbmF0dXJlKSk7CisgICAgICAgIG1faW5mby0+dXNlZFNpZ25hdHVyZXMu
dW5jaGVja2VkQXBwZW5kKFdURk1vdmUocmVzdWx0LnNlY29uZCkpOworICAgIH0KKyAgICByZXR1
cm4geyB9OworfQorCithdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlSW1wb3J0KCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHVpbnQzMl90IGltcG9ydENvdW50OworICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIXBhcnNlVmFyVUludDMyKGltcG9ydENvdW50KSwgImNhbid0IGdldCBJbXBvcnQgc2Vj
dGlvbidzIGNvdW50Iik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbXBvcnRDb3VudCA+IG1h
eEltcG9ydHMsICJJbXBvcnQgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgaW1wb3J0Q291
bnQsICIgbWF4aW11bSAiLCBtYXhJbXBvcnRzKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFt
X2luZm8tPmdsb2JhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50KSwgImNhbid0IGFs
bG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGltcG9ydENvdW50LCAiIGdsb2JhbHMiKTsgLy8g
RklYTUUgdGhpcyBvdmVyLWFsbG9jYXRlcyB3aGVuIHdlIGZpeCB0aGUgRklYTUVzIGJlbG93Lgor
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+aW1wb3J0cy50cnlSZXNlcnZlQ2FwYWNp
dHkoaW1wb3J0Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgaW1w
b3J0Q291bnQsICIgaW1wb3J0cyIpOyAvLyBGSVhNRSB0aGlzIG92ZXItYWxsb2NhdGVzIHdoZW4g
d2UgZml4IHRoZSBGSVhNRXMgYmVsb3cuCisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZv
LT5pbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9y
dENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGltcG9ydENvdW50
LCAiIGltcG9ydCBmdW5jdGlvbiBzaWduYXR1cmVzIik7IC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxv
Y2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxvdy4KKworICAgIGZvciAodWludDMyX3Qg
aW1wb3J0TnVtYmVyID0gMDsgaW1wb3J0TnVtYmVyIDwgaW1wb3J0Q291bnQ7ICsraW1wb3J0TnVt
YmVyKSB7CisgICAgICAgIHVpbnQzMl90IG1vZHVsZUxlbjsKKyAgICAgICAgdWludDMyX3QgZmll
bGRMZW47CisgICAgICAgIE5hbWUgbW9kdWxlU3RyaW5nOworICAgICAgICBOYW1lIGZpZWxkU3Ry
aW5nOworICAgICAgICBFeHRlcm5hbEtpbmQga2luZDsKKyAgICAgICAgdW5zaWduZWQga2luZElu
ZGV4IHsgMCB9OworCisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMy
KG1vZHVsZUxlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0J3MgbW9k
dWxlIG5hbWUgbGVuZ3RoIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVV
VEY4U3RyaW5nKG1vZHVsZVN0cmluZywgbW9kdWxlTGVuKSwgImNhbid0IGdldCAiLCBpbXBvcnRO
dW1iZXIsICJ0aCBJbXBvcnQncyBtb2R1bGUgbmFtZSBvZiBsZW5ndGggIiwgbW9kdWxlTGVuKTsK
KworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihmaWVsZExlbiks
ICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0J3MgZmllbGQgbmFtZSBsZW5n
dGggaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIik7CisgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIWNvbnN1bWVVVEY4U3RyaW5nKGZpZWxkU3RyaW5nLCBmaWVsZExlbiksICJjYW4n
dCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0J3MgZmllbGQgbmFtZSBvZiBsZW5ndGgg
IiwgbW9kdWxlTGVuLCAiIGluIG1vZHVsZSAnIiwgbW9kdWxlU3RyaW5nLCAiJyIpOworCisgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlRXh0ZXJuYWxLaW5kKGtpbmQpLCAiY2FuJ3Qg
Z2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdzIGtpbmQgaW4gbW9kdWxlICciLCBtb2R1
bGVTdHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0cmluZywgIiciKTsKKyAgICAgICAgc3dpdGNo
IChraW5kKSB7CisgICAgICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpGdW5jdGlvbjogeworICAgICAg
ICAgICAgdWludDMyX3QgZnVuY3Rpb25TaWduYXR1cmVJbmRleDsKKyAgICAgICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGZ1bmN0aW9uU2lnbmF0dXJlSW5kZXgpLCAi
Y2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdzIGZ1bmN0aW9uIHNpZ25hdHVy
ZSBpbiBtb2R1bGUgJyIsIG1vZHVsZVN0cmluZywgIicgZmllbGQgJyIsIGZpZWxkU3RyaW5nLCAi
JyIpOworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvblNpZ25hdHVyZUlu
ZGV4ID49IG1faW5mby0+dXNlZFNpZ25hdHVyZXMuc2l6ZSgpLCAiaW52YWxpZCBmdW5jdGlvbiBz
aWduYXR1cmUgZm9yICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCwgIiwgZnVuY3Rpb25TaWdu
YXR1cmVJbmRleCwgIiBpcyBvdXQgb2YgcmFuZ2Ugb2YgIiwgbV9pbmZvLT51c2VkU2lnbmF0dXJl
cy5zaXplKCksICIgaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIGZpZWxkICciLCBmaWVs
ZFN0cmluZywgIiciKTsKKyAgICAgICAgICAgIGtpbmRJbmRleCA9IG1faW5mby0+aW1wb3J0RnVu
Y3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsKKyAgICAgICAgICAgIFNpZ25hdHVyZUluZGV4
IHNpZ25hdHVyZUluZGV4ID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChtX2luZm8tPnVzZWRT
aWduYXR1cmVzW2Z1bmN0aW9uU2lnbmF0dXJlSW5kZXhdKTsKKyAgICAgICAgICAgIG1faW5mby0+
aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnVuY2hlY2tlZEFwcGVuZChzaWduYXR1cmVJ
bmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEV4dGVy
bmFsS2luZDo6VGFibGU6IHsKKyAgICAgICAgICAgIGJvb2wgaXNJbXBvcnQgPSB0cnVlOworICAg
ICAgICAgICAgUGFydGlhbFJlc3VsdCByZXN1bHQgPSBwYXJzZVRhYmxlSGVscGVyKGlzSW1wb3J0
KTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoV1RGTW92ZShyZXN1bHQuZXJyb3IoKSkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6Ok1lbW9yeTog
eworICAgICAgICAgICAgYm9vbCBpc0ltcG9ydCA9IHRydWU7CisgICAgICAgICAgICBQYXJ0aWFs
UmVzdWx0IHJlc3VsdCA9IHBhcnNlTWVtb3J5SGVscGVyKGlzSW1wb3J0KTsKKyAgICAgICAgICAg
IGlmIChVTkxJS0VMWSghcmVzdWx0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoV1RGTW92ZShyZXN1bHQuZXJyb3IoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6Okdsb2JhbDogeworICAgICAgICAgICAg
R2xvYmFsIGdsb2JhbDsKKyAgICAgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFy
c2VHbG9iYWxUeXBlKGdsb2JhbCkpOworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihn
bG9iYWwubXV0YWJpbGl0eSA9PSBHbG9iYWw6Ok11dGFibGUsICJNdXRhYmxlIEdsb2JhbHMgYXJl
bid0IHN1cHBvcnRlZCIpOworCisgICAgICAgICAgICBraW5kSW5kZXggPSBtX2luZm8tPmdsb2Jh
bHMuc2l6ZSgpOworICAgICAgICAgICAgbV9pbmZvLT5nbG9iYWxzLnVuY2hlY2tlZEFwcGVuZChX
VEZNb3ZlKGdsb2JhbCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIG1faW5mby0+aW1wb3J0cy51bmNoZWNrZWRBcHBlbmQoeyBXVEZNb3ZlKG1v
ZHVsZVN0cmluZyksIFdURk1vdmUoZmllbGRTdHJpbmcpLCBraW5kLCBraW5kSW5kZXggfSk7Cisg
ICAgfQorCisgICAgbV9pbmZvLT5maXJzdEludGVybmFsR2xvYmFsID0gbV9pbmZvLT5nbG9iYWxz
LnNpemUoKTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNl
RnVuY3Rpb24oKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgdWludDMyX3QgY291bnQ7CisgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoY291bnQpLCAiY2FuJ3QgZ2V0IEZ1
bmN0aW9uIHNlY3Rpb24ncyBjb3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoY291bnQg
PiBtYXhGdW5jdGlvbnMsICJGdW5jdGlvbiBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBj
b3VudCwgIiBtYXhpbXVtICIsIG1heEZ1bmN0aW9ucyk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RighbV9pbmZvLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy50cnlSZXNlcnZlQ2Fw
YWNpdHkoY291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgY291bnQs
ICIgRnVuY3Rpb24gc2lnbmF0dXJlcyIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5m
by0+ZnVuY3Rpb25zLnRyeVJlc2VydmVDYXBhY2l0eShjb3VudCksICJjYW4ndCBhbGxvY2F0ZSBl
bm91Z2ggbWVtb3J5IGZvciAiLCBjb3VudCwgIkZ1bmN0aW9uIGxvY2F0aW9ucyIpOworCisgICAg
Zm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgdWludDMyX3Qg
dHlwZU51bWJlcjsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIo
dHlwZU51bWJlciksICJjYW4ndCBnZXQgIiwgaSwgInRoIEZ1bmN0aW9uJ3MgdHlwZSBudW1iZXIi
KTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0eXBlTnVtYmVyID49IG1faW5mby0+dXNl
ZFNpZ25hdHVyZXMuc2l6ZSgpLCBpLCAidGggRnVuY3Rpb24gdHlwZSBudW1iZXIgaXMgaW52YWxp
ZCAiLCB0eXBlTnVtYmVyKTsKKworICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRl
eCA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQobV9pbmZvLT51c2VkU2lnbmF0dXJlc1t0eXBl
TnVtYmVyXSk7CisgICAgICAgIC8vIFRoZSBDb2RlIHNlY3Rpb24gZml4ZXMgdXAgc3RhcnQgYW5k
IGVuZC4KKyAgICAgICAgc2l6ZV90IHN0YXJ0ID0gMDsKKyAgICAgICAgc2l6ZV90IGVuZCA9IDA7
CisgICAgICAgIG1faW5mby0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXMudW5jaGVj
a2VkQXBwZW5kKHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgbV9pbmZvLT5mdW5jdGlvbnMudW5j
aGVja2VkQXBwZW5kKHsgc3RhcnQsIGVuZCwgVmVjdG9yPHVpbnQ4X3Q+KCkgfSk7CisgICAgfQor
CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZVJlc2l6YWJs
ZUxpbWl0cyh1aW50MzJfdCYgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4mIG1heGlt
dW0pIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQoIW1heGltdW0pOworCisgICAgdWlu
dDhfdCBmbGFnczsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQxKGZsYWdz
KSwgImNhbid0IHBhcnNlIHJlc2l6YWJsZSBsaW1pdHMgZmxhZ3MiKTsKKyAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbml0aWFsKSwgImNhbid0IHBhcnNlIHJlc2l6YWJs
ZSBsaW1pdHMgaW5pdGlhbCBwYWdlIGNvdW50Iik7CisKKyAgICBpZiAoZmxhZ3MpIHsKKyAgICAg
ICAgdWludDMyX3QgbWF4aW11bUludDsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFy
c2VWYXJVSW50MzIobWF4aW11bUludCksICJjYW4ndCBwYXJzZSByZXNpemFibGUgbGltaXRzIG1h
eGltdW0gcGFnZSBjb3VudCIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluaXRpYWwg
PiBtYXhpbXVtSW50LCAicmVzaXphYmxlIGxpbWl0cyBoYXMgYSBpbml0aWFsIHBhZ2UgY291bnQg
b2YgIiwgaW5pdGlhbCwgIiB3aGljaCBpcyBncmVhdGVyIHRoYW4gaXRzIG1heGltdW0gIiwgbWF4
aW11bUludCk7CisgICAgICAgIG1heGltdW0gPSBtYXhpbXVtSW50OworICAgIH0KKworICAgIHJl
dHVybiB7IH07Cit9CisKK2F1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VUYWJsZUhlbHBlcihib29s
IGlzSW1wb3J0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRiht
X2luZm8tPnRhYmxlQ291bnQoKSA+IDAsICJDYW5ub3QgaGF2ZSBtb3JlIHRoYW4gb25lIFRhYmxl
IGZvciBub3ciKTsKKworICAgIGludDhfdCB0eXBlOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlSW50Nyh0eXBlKSwgImNhbid0IHBhcnNlIFRhYmxlIHR5cGUiKTsKKyAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKHR5cGUgIT0gV2FzbTo6QW55ZnVuYywgIlRhYmxlIHR5cGUgc2hvdWxkIGJl
IGFueWZ1bmMsIGdvdCAiLCB0eXBlKTsKKworICAgIHVpbnQzMl90IGluaXRpYWw7CisgICAgc3Rk
OjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bTsKKyAgICBQYXJ0aWFsUmVzdWx0IGxpbWl0cyA9
IHBhcnNlUmVzaXphYmxlTGltaXRzKGluaXRpYWwsIG1heGltdW0pOworICAgIGlmIChVTkxJS0VM
WSghbGltaXRzKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFdURk1vdmUobGltaXRz
LmVycm9yKCkpKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluaXRpYWwgPiBtYXhUYWJsZUVu
dHJpZXMsICJUYWJsZSdzIGluaXRpYWwgcGFnZSBjb3VudCBvZiAiLCBpbml0aWFsLCAiIGlzIHRv
byBiaWcsIG1heGltdW0gIiwgbWF4VGFibGVFbnRyaWVzKTsKKworICAgIEFTU0VSVCghbWF4aW11
bSB8fCAqbWF4aW11bSA+PSBpbml0aWFsKTsKKworICAgIG1faW5mby0+dGFibGVJbmZvcm1hdGlv
biA9IFRhYmxlSW5mb3JtYXRpb24oaW5pdGlhbCwgbWF4aW11bSwgaXNJbXBvcnQpOworCisgICAg
cmV0dXJuIHsgfTsKK30KKworYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZVRhYmxlKCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHVpbnQzMl90IGNvdW50OworICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIXBhcnNlVmFyVUludDMyKGNvdW50KSwgImNhbid0IGdldCBUYWJsZSdzIGNvdW50Iik7Cisg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihjb3VudCA+IDEsICJUYWJsZSBjb3VudCBvZiAiLCBjb3Vu
dCwgIiBpcyBpbnZhbGlkLCBhdCBtb3N0IDEgaXMgYWxsb3dlZCBmb3Igbm93Iik7CisKKyAgICBp
ZiAoIWNvdW50KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgYm9vbCBpc0ltcG9ydCA9IGZh
bHNlOworICAgIFBhcnRpYWxSZXN1bHQgcmVzdWx0ID0gcGFyc2VUYWJsZUhlbHBlcihpc0ltcG9y
dCk7CisgICAgaWYgKFVOTElLRUxZKCFyZXN1bHQpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoV1RGTW92ZShyZXN1bHQuZXJyb3IoKSkpOworCisgICAgcmV0dXJuIHsgfTsKK30KKwor
YXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZU1lbW9yeUhlbHBlcihib29sIGlzSW1wb3J0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX2luZm8tPm1lbW9yeUNv
dW50KCksICJ0aGVyZSBjYW4gYXQgbW9zdCBiZSBvbmUgTWVtb3J5IHNlY3Rpb24gZm9yIG5vdyIp
OworCisgICAgUGFnZUNvdW50IGluaXRpYWxQYWdlQ291bnQ7CisgICAgUGFnZUNvdW50IG1heGlt
dW1QYWdlQ291bnQ7CisgICAgeworICAgICAgICB1aW50MzJfdCBpbml0aWFsOworICAgICAgICBz
dGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtOworICAgICAgICBQYXJ0aWFsUmVzdWx0IGxp
bWl0cyA9IHBhcnNlUmVzaXphYmxlTGltaXRzKGluaXRpYWwsIG1heGltdW0pOworICAgICAgICBp
ZiAoVU5MSUtFTFkoIWxpbWl0cykpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
V1RGTW92ZShsaW1pdHMuZXJyb3IoKSkpOworICAgICAgICBBU1NFUlQoIW1heGltdW0gfHwgKm1h
eGltdW0gPj0gaW5pdGlhbCk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIVBhZ2VDb3Vu
dDo6aXNWYWxpZChpbml0aWFsKSwgIk1lbW9yeSdzIGluaXRpYWwgcGFnZSBjb3VudCBvZiAiLCBp
bml0aWFsLCAiIGlzIGludmFsaWQiKTsKKworICAgICAgICBpbml0aWFsUGFnZUNvdW50ID0gUGFn
ZUNvdW50KGluaXRpYWwpOworCisgICAgICAgIGlmIChtYXhpbXVtKSB7CisgICAgICAgICAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFQYWdlQ291bnQ6OmlzVmFsaWQoKm1heGltdW0pLCAiTWVtb3J5
J3MgbWF4aW11bSBwYWdlIGNvdW50IG9mICIsICptYXhpbXVtLCAiIGlzIGludmFsaWQiKTsKKyAg
ICAgICAgICAgIG1heGltdW1QYWdlQ291bnQgPSBQYWdlQ291bnQoKm1heGltdW0pOworICAgICAg
ICB9CisgICAgfQorICAgIEFTU0VSVChpbml0aWFsUGFnZUNvdW50KTsKKyAgICBBU1NFUlQoIW1h
eGltdW1QYWdlQ291bnQgfHwgbWF4aW11bVBhZ2VDb3VudCA+PSBpbml0aWFsUGFnZUNvdW50KTsK
KworICAgIG1faW5mby0+bWVtb3J5ID0gTWVtb3J5SW5mb3JtYXRpb24oaW5pdGlhbFBhZ2VDb3Vu
dCwgbWF4aW11bVBhZ2VDb3VudCwgaXNJbXBvcnQpOworICAgIHJldHVybiB7IH07Cit9CisKK2F1
dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VNZW1vcnkoKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
dWludDhfdCBjb3VudDsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQxKGNv
dW50KSwgImNhbid0IHBhcnNlIE1lbW9yeSBzZWN0aW9uJ3MgY291bnQiKTsKKworICAgIGlmICgh
Y291bnQpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGNv
dW50ICE9IDEsICJNZW1vcnkgc2VjdGlvbiBoYXMgbW9yZSB0aGFuIG9uZSBtZW1vcnksIFdlYkFz
c2VtYmx5IGN1cnJlbnRseSBvbmx5IGFsbG93cyB6ZXJvIG9yIG9uZSIpOworCisgICAgYm9vbCBp
c0ltcG9ydCA9IGZhbHNlOworICAgIHJldHVybiBwYXJzZU1lbW9yeUhlbHBlcihpc0ltcG9ydCk7
Cit9CisKK2F1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VHbG9iYWwoKSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgdWludDMyX3QgZ2xvYmFsQ291bnQ7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
cGFyc2VWYXJVSW50MzIoZ2xvYmFsQ291bnQpLCAiY2FuJ3QgZ2V0IEdsb2JhbCBzZWN0aW9uJ3Mg
Y291bnQiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGdsb2JhbENvdW50ID4gbWF4R2xvYmFs
cywgIkdsb2JhbCBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBnbG9iYWxDb3VudCwgIiBt
YXhpbXVtICIsIG1heEdsb2JhbHMpOworICAgIHNpemVfdCB0b3RhbEJ5dGVzID0gZ2xvYmFsQ291
bnQgKyBtX2luZm8tPmZpcnN0SW50ZXJuYWxHbG9iYWw7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9J
Rigoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHRvdGFsQnl0ZXMpIDwgZ2xvYmFsQ291bnQpIHx8ICFt
X2luZm8tPmdsb2JhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KHRvdGFsQnl0ZXMpLCAiY2FuJ3QgYWxs
b2NhdGUgbWVtb3J5IGZvciAiLCB0b3RhbEJ5dGVzLCAiIGdsb2JhbHMiKTsKKworICAgIGZvciAo
dWludDMyX3QgZ2xvYmFsSW5kZXggPSAwOyBnbG9iYWxJbmRleCA8IGdsb2JhbENvdW50OyArK2ds
b2JhbEluZGV4KSB7CisgICAgICAgIEdsb2JhbCBnbG9iYWw7CisgICAgICAgIHVpbnQ4X3QgaW5p
dE9wY29kZTsKKworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlR2xvYmFs
VHlwZShnbG9iYWwpKTsKKyAgICAgICAgVHlwZSB0eXBlRm9ySW5pdE9wY29kZTsKKyAgICAgICAg
V0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUluaXRFeHByKGluaXRPcGNvZGUsIGdsb2Jh
bC5pbml0aWFsQml0c09ySW1wb3J0TnVtYmVyLCB0eXBlRm9ySW5pdE9wY29kZSkpOworICAgICAg
ICBpZiAoaW5pdE9wY29kZSA9PSBHZXRHbG9iYWwpCisgICAgICAgICAgICBnbG9iYWwuaW5pdGlh
bGl6YXRpb25UeXBlID0gR2xvYmFsOjpGcm9tR2xvYmFsSW1wb3J0OworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBnbG9iYWwuaW5pdGlhbGl6YXRpb25UeXBlID0gR2xvYmFsOjpGcm9tRXhwcmVz
c2lvbjsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0eXBlRm9ySW5pdE9wY29kZSAhPSBn
bG9iYWwudHlwZSwgIkdsb2JhbCBpbml0X2V4cHIgb3Bjb2RlIG9mIHR5cGUgIiwgdHlwZUZvcklu
aXRPcGNvZGUsICIgZG9lc24ndCBtYXRjaCBnbG9iYWwncyB0eXBlICIsIGdsb2JhbC50eXBlKTsK
KworICAgICAgICBtX2luZm8tPmdsb2JhbHMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoZ2xvYmFs
KSk7CisgICAgfQorCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBTZWN0aW9uUGFyc2VyOjpw
YXJzZUV4cG9ydCgpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1aW50MzJfdCBleHBvcnRDb3Vu
dDsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihleHBvcnRDb3VudCks
ICJjYW4ndCBnZXQgRXhwb3J0IHNlY3Rpb24ncyBjb3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoZXhwb3J0Q291bnQgPiBtYXhFeHBvcnRzLCAiRXhwb3J0IHNlY3Rpb24ncyBjb3VudCBp
cyB0b28gYmlnICIsIGV4cG9ydENvdW50LCAiIG1heGltdW0gIiwgbWF4RXhwb3J0cyk7CisgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5leHBvcnRzLnRyeVJlc2VydmVDYXBhY2l0eShl
eHBvcnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBleHBvcnRD
b3VudCwgIiBleHBvcnRzIik7CisKKyAgICBIYXNoU2V0PFN0cmluZz4gZXhwb3J0TmFtZXM7Cisg
ICAgZm9yICh1aW50MzJfdCBleHBvcnROdW1iZXIgPSAwOyBleHBvcnROdW1iZXIgPCBleHBvcnRD
b3VudDsgKytleHBvcnROdW1iZXIpIHsKKyAgICAgICAgdWludDMyX3QgZmllbGRMZW47CisgICAg
ICAgIE5hbWUgZmllbGRTdHJpbmc7CisgICAgICAgIEV4dGVybmFsS2luZCBraW5kOworICAgICAg
ICB1bnNpZ25lZCBraW5kSW5kZXg7CisKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFy
c2VWYXJVSW50MzIoZmllbGRMZW4pLCAiY2FuJ3QgZ2V0ICIsIGV4cG9ydE51bWJlciwgInRoIEV4
cG9ydCdzIGZpZWxkIG5hbWUgbGVuZ3RoIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IWNvbnN1bWVVVEY4U3RyaW5nKGZpZWxkU3RyaW5nLCBmaWVsZExlbiksICJjYW4ndCBnZXQgIiwg
ZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0J3MgZmllbGQgbmFtZSBvZiBsZW5ndGggIiwgZmllbGRM
ZW4pOworICAgICAgICBTdHJpbmcgZmllbGROYW1lID0gU3RyaW5nOjpmcm9tVVRGOChmaWVsZFN0
cmluZyk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZXhwb3J0TmFtZXMuY29udGFpbnMo
ZmllbGROYW1lKSwgImR1cGxpY2F0ZSBleHBvcnQ6ICciLCBmaWVsZFN0cmluZywgIiciKTsKKyAg
ICAgICAgZXhwb3J0TmFtZXMuYWRkKGZpZWxkTmFtZSk7CisKKyAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighcGFyc2VFeHRlcm5hbEtpbmQoa2luZCksICJjYW4ndCBnZXQgIiwgZXhwb3J0TnVt
YmVyLCAidGggRXhwb3J0J3Mga2luZCwgbmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOworICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihraW5kSW5kZXgpLCAiY2Fu
J3QgZ2V0ICIsIGV4cG9ydE51bWJlciwgInRoIEV4cG9ydCdzIGtpbmQgaW5kZXgsIG5hbWVkICci
LCBmaWVsZFN0cmluZywgIiciKTsKKyAgICAgICAgc3dpdGNoIChraW5kKSB7CisgICAgICAgIGNh
c2UgRXh0ZXJuYWxLaW5kOjpGdW5jdGlvbjogeworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRihraW5kSW5kZXggPj0gbV9pbmZvLT5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCksIGV4cG9y
dE51bWJlciwgInRoIEV4cG9ydCBoYXMgaW52YWxpZCBmdW5jdGlvbiBudW1iZXIgIiwga2luZElu
ZGV4LCAiIGl0IGV4Y2VlZHMgdGhlIGZ1bmN0aW9uIGluZGV4IHNwYWNlICIsIG1faW5mby0+ZnVu
Y3Rpb25JbmRleFNwYWNlU2l6ZSgpLCAiLCBuYW1lZCAnIiwgZmllbGRTdHJpbmcsICInIik7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEV4dGVybmFsS2luZDo6
VGFibGU6IHsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoa2luZEluZGV4ID49IG1f
aW5mby0+dGFibGVDb3VudCgpLCAiY2FuJ3QgZXhwb3J0IFRhYmxlICIsIGtpbmRJbmRleCwgIiB0
aGVyZSBhcmUgIiwgbV9pbmZvLT50YWJsZUNvdW50KCksICIgVGFibGVzIik7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEV4dGVybmFsS2luZDo6TWVtb3J5OiB7
CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPm1lbW9yeSwgImNhbid0
IGV4cG9ydCBhIG5vbi1leGlzdGVudCBNZW1vcnkiKTsKKyAgICAgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoa2luZEluZGV4LCAiY2FuJ3QgZXhwb3J0IE1lbW9yeSAiLCBraW5kSW5kZXgsICIg
b25seSBvbmUgVGFibGUgaXMgY3VycmVudGx5IHN1cHBvcnRlZCIpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6Okdsb2JhbDogeworICAg
ICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihraW5kSW5kZXggPj0gbV9pbmZvLT5nbG9iYWxz
LnNpemUoKSwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0IGhhcyBpbnZhbGlkIGdsb2JhbCBudW1i
ZXIgIiwga2luZEluZGV4LCAiIGl0IGV4Y2VlZHMgdGhlIGdsb2JhbHMgY291bnQgIiwgbV9pbmZv
LT5nbG9iYWxzLnNpemUoKSwgIiwgbmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOworICAgICAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX2luZm8tPmdsb2JhbHNba2luZEluZGV4XS5tdXRh
YmlsaXR5ICE9IEdsb2JhbDo6SW1tdXRhYmxlLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQgaXNu
J3QgaW1tdXRhYmxlLCBuYW1lZCAnIiwgZmllbGRTdHJpbmcsICInIik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbV9pbmZvLT5leHBvcnRzLnVu
Y2hlY2tlZEFwcGVuZCh7IFdURk1vdmUoZmllbGRTdHJpbmcpLCBraW5kLCBraW5kSW5kZXggfSk7
CisgICAgfQorCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJz
ZVN0YXJ0KCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHVpbnQzMl90IHN0YXJ0RnVuY3Rpb25J
bmRleDsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihzdGFydEZ1bmN0
aW9uSW5kZXgpLCAiY2FuJ3QgZ2V0IFN0YXJ0IGluZGV4Iik7CisgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRihzdGFydEZ1bmN0aW9uSW5kZXggPj0gbV9pbmZvLT5mdW5jdGlvbkluZGV4U3BhY2VTaXpl
KCksICJTdGFydCBpbmRleCAiLCBzdGFydEZ1bmN0aW9uSW5kZXgsICIgZXhjZWVkcyBmdW5jdGlv
biBpbmRleCBzcGFjZSAiLCBtX2luZm8tPmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7CisgICAg
U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX2luZm8tPnNpZ25hdHVyZUluZGV4RnJv
bUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXgpOworICAgIGNvbnN0IFNpZ25h
dHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRl
eCk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCAi
U3RhcnQgZnVuY3Rpb24gY2FuJ3QgaGF2ZSBhcmd1bWVudHMiKTsKKyAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKHNpZ25hdHVyZS5yZXR1cm5UeXBlKCkgIT0gVm9pZCwgIlN0YXJ0IGZ1bmN0aW9uIGNh
bid0IHJldHVybiBhIHZhbHVlIik7CisgICAgbV9pbmZvLT5zdGFydEZ1bmN0aW9uSW5kZXhTcGFj
ZSA9IHN0YXJ0RnVuY3Rpb25JbmRleDsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIFNlY3Rp
b25QYXJzZXI6OnBhcnNlRWxlbWVudCgpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1aW50MzJf
dCBlbGVtZW50Q291bnQ7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIo
ZWxlbWVudENvdW50KSwgImNhbid0IGdldCBFbGVtZW50IHNlY3Rpb24ncyBjb3VudCIpOworICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoZWxlbWVudENvdW50ID4gbWF4VGFibGVFbnRyaWVzLCAiRWxl
bWVudCBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBlbGVtZW50Q291bnQsICIgbWF4aW11
bSAiLCBtYXhUYWJsZUVudHJpZXMpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+
ZWxlbWVudHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGVsZW1lbnRDb3VudCksICJjYW4ndCBhbGxvY2F0
ZSBtZW1vcnkgZm9yICIsIGVsZW1lbnRDb3VudCwgIiBFbGVtZW50cyIpOworICAgIGZvciAodW5z
aWduZWQgZWxlbWVudE51bSA9IDA7IGVsZW1lbnROdW0gPCBlbGVtZW50Q291bnQ7ICsrZWxlbWVu
dE51bSkgeworICAgICAgICB1aW50MzJfdCB0YWJsZUluZGV4OworICAgICAgICB1aW50NjRfdCBp
bml0RXhwckJpdHM7CisgICAgICAgIHVpbnQ4X3QgaW5pdE9wY29kZTsKKyAgICAgICAgdWludDMy
X3QgaW5kZXhDb3VudDsKKworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJ
bnQzMih0YWJsZUluZGV4KSwgImNhbid0IGdldCAiLCBlbGVtZW50TnVtLCAidGggRWxlbWVudCB0
YWJsZSBpbmRleCIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHRhYmxlSW5kZXggPj0g
bV9pbmZvLT50YWJsZUNvdW50KCksICJFbGVtZW50IHNlY3Rpb24gZm9yIFRhYmxlICIsIHRhYmxl
SW5kZXgsICIgZXhjZWVkcyBhdmFpbGFibGUgVGFibGUgIiwgbV9pbmZvLT50YWJsZUNvdW50KCkp
OworICAgICAgICBUeXBlIGluaXRFeHByVHlwZTsKKyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBF
Ul9GQUlMUyhwYXJzZUluaXRFeHByKGluaXRPcGNvZGUsIGluaXRFeHByQml0cywgaW5pdEV4cHJU
eXBlKSk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoaW5pdEV4cHJUeXBlICE9IEkzMiwg
IkVsZW1lbnQgaW5pdF9leHByIG11c3QgcHJvZHVjZSBhbiBpMzIiKTsKKyAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoaW5kZXhDb3VudCksICJjYW4ndCBnZXQgIiwg
ZWxlbWVudE51bSwgInRoIGluZGV4IGNvdW50IGZvciBFbGVtZW50IHNlY3Rpb24iKTsKKyAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbmRleENvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8
dWludDMyX3Q+OjptYXgoKSwgIkVsZW1lbnQgc2VjdGlvbidzICIsIGVsZW1lbnROdW0sICJ0aCBp
bmRleCBjb3VudCBpcyB0b28gYmlnICIsIGluZGV4Q291bnQpOworCisgICAgICAgIEFTU0VSVCgh
IW1faW5mby0+dGFibGVJbmZvcm1hdGlvbik7CisKKyAgICAgICAgRWxlbWVudCBlbGVtZW50KG1h
a2VJMzJJbml0RXhwcihpbml0T3Bjb2RlLCBpbml0RXhwckJpdHMpKTsKKyAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighZWxlbWVudC5mdW5jdGlvbkluZGljZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5
KGluZGV4Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiLCBpbmRleENvdW50LCAi
IEVsZW1lbnQgaW5kaWNlcyIpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBp
bmRleCA8IGluZGV4Q291bnQ7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIHVpbnQzMl90IGZ1bmN0
aW9uSW5kZXg7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQz
MihmdW5jdGlvbkluZGV4KSwgImNhbid0IGdldCBFbGVtZW50IHNlY3Rpb24ncyAiLCBlbGVtZW50
TnVtLCAidGggZWxlbWVudCdzICIsIGluZGV4LCAidGggaW5kZXgiKTsKKyAgICAgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25JbmRleCA+PSBtX2luZm8tPmZ1bmN0aW9uSW5kZXhT
cGFjZVNpemUoKSwgIkVsZW1lbnQgc2VjdGlvbidzICIsIGVsZW1lbnROdW0sICJ0aCBlbGVtZW50
J3MgIiwgaW5kZXgsICJ0aCBpbmRleCBpcyAiLCBmdW5jdGlvbkluZGV4LCAiIHdoaWNoIGV4Y2Vl
ZHMgdGhlIGZ1bmN0aW9uIGluZGV4IHNwYWNlIHNpemUgb2YgIiwgbV9pbmZvLT5mdW5jdGlvbklu
ZGV4U3BhY2VTaXplKCkpOworCisgICAgICAgICAgICBlbGVtZW50LmZ1bmN0aW9uSW5kaWNlcy51
bmNoZWNrZWRBcHBlbmQoZnVuY3Rpb25JbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBtX2lu
Zm8tPmVsZW1lbnRzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGVsZW1lbnQpKTsKKyAgICB9CisK
KyAgICByZXR1cm4geyB9OworfQorCisvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2hhbmdlZCB0
byBiZSBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCBvbmNlIHdlIHN3aXRjaCBvdXIgcGFyc2lu
ZyBpbmZyYXN0cnVjdHVyZSB0byB0aGUgc3RyZWFtaW5nIHBhcnNlci4KK2F1dG8gU2VjdGlvblBh
cnNlcjo6cGFyc2VDb2RlKCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHVpbnQzMl90IGNvdW50
OworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGNvdW50KSwgImNhbid0
IGdldCBDb2RlIHNlY3Rpb24ncyBjb3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoY291
bnQgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLCAiQ29kZSBzZWN0aW9u
J3MgY291bnQgaXMgdG9vIGJpZyAiLCBjb3VudCk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihj
b3VudCAhPSBtX2luZm8tPmZ1bmN0aW9ucy5zaXplKCksICJDb2RlIHNlY3Rpb24gY291bnQgIiwg
Y291bnQsICIgZXhjZWVkcyB0aGUgZGVjbGFyZWQgbnVtYmVyIG9mIGZ1bmN0aW9ucyAiLCBtX2lu
Zm8tPmZ1bmN0aW9ucy5zaXplKCkpOworCisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNv
dW50OyArK2kpIHsKKyAgICAgICAgdWludDMyX3QgZnVuY3Rpb25TaXplOworICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihmdW5jdGlvblNpemUpLCAiY2FuJ3QgZ2V0
ICIsIGksICJ0aCBDb2RlIGZ1bmN0aW9uJ3Mgc2l6ZSIpOworICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKGZ1bmN0aW9uU2l6ZSA+IGxlbmd0aCgpLCAiQ29kZSBmdW5jdGlvbidzIHNpemUgIiwg
ZnVuY3Rpb25TaXplLCAiIGV4Y2VlZHMgdGhlIG1vZHVsZSdzIHNpemUgIiwgbGVuZ3RoKCkpOwor
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGZ1bmN0aW9uU2l6ZSA+IGxlbmd0aCgpIC0gbV9v
ZmZzZXQsICJDb2RlIGZ1bmN0aW9uJ3Mgc2l6ZSAiLCBmdW5jdGlvblNpemUsICIgZXhjZWVkcyB0
aGUgbW9kdWxlJ3MgcmVtYWluaW5nIHNpemUiLCBsZW5ndGgoKSAtIG1fb2Zmc2V0KTsKKyAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvblNpemUgPiBtYXhGdW5jdGlvblNpemUsICJD
b2RlIGZ1bmN0aW9uJ3Mgc2l6ZSAiLCBmdW5jdGlvblNpemUsICIgaXMgdG9vIGJpZyIpOworCisg
ICAgICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhKGZ1bmN0aW9uU2l6ZSk7CisgICAgICAgIHN0ZDo6
bWVtY3B5KGRhdGEuZGF0YSgpLCBzb3VyY2UoKSArIG1fb2Zmc2V0LCBmdW5jdGlvblNpemUpOwor
ICAgICAgICBtX2luZm8tPmZ1bmN0aW9uc1tpXS5zdGFydCA9IG1fb2Zmc2V0SW5Tb3VyY2UgKyBt
X29mZnNldDsKKyAgICAgICAgbV9pbmZvLT5mdW5jdGlvbnNbaV0uZW5kID0gbV9vZmZzZXRJblNv
dXJjZSArIG1fb2Zmc2V0ICsgZnVuY3Rpb25TaXplOworICAgICAgICBtX2luZm8tPmZ1bmN0aW9u
c1tpXS5kYXRhID0gV1RGTW92ZShkYXRhKTsKKyAgICAgICAgbV9vZmZzZXQgKz0gZnVuY3Rpb25T
aXplOworICAgIH0KKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gU2VjdGlvblBhcnNlcjo6
cGFyc2VJbml0RXhwcih1aW50OF90JiBvcGNvZGUsIHVpbnQ2NF90JiBiaXRzT3JJbXBvcnROdW1i
ZXIsIFR5cGUmIHJlc3VsdFR5cGUpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVVJbnQ4KG9wY29kZSksICJjYW4ndCBnZXQgaW5pdF9leHByJ3Mgb3Bj
b2RlIik7CisKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgSTMyQ29uc3Q6IHsKKyAg
ICAgICAgaW50MzJfdCBjb25zdGFudDsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFy
c2VWYXJJbnQzMihjb25zdGFudCksICJjYW4ndCBnZXQgY29uc3RhbnQgdmFsdWUgZm9yIGluaXRf
ZXhwcidzIGkzMi5jb25zdCIpOworICAgICAgICBiaXRzT3JJbXBvcnROdW1iZXIgPSBzdGF0aWNf
Y2FzdDx1aW50NjRfdD4oY29uc3RhbnQpOworICAgICAgICByZXN1bHRUeXBlID0gSTMyOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEk2NENvbnN0OiB7CisgICAgICAgIGludDY0
X3QgY29uc3RhbnQ7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFySW50NjQo
Y29uc3RhbnQpLCAiY2FuJ3QgZ2V0IGNvbnN0YW50IHZhbHVlIGZvciBpbml0X2V4cHIncyBpNjQu
Y29uc3QiKTsKKyAgICAgICAgYml0c09ySW1wb3J0TnVtYmVyID0gY29uc3RhbnQ7CisgICAgICAg
IHJlc3VsdFR5cGUgPSBJNjQ7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRjMy
Q29uc3Q6IHsKKyAgICAgICAgdWludDMyX3QgY29uc3RhbnQ7CisgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXBhcnNlVUludDMyKGNvbnN0YW50KSwgImNhbid0IGdldCBjb25zdGFudCB2YWx1
ZSBmb3IgaW5pdF9leHByJ3MgZjMyLmNvbnN0Iik7CisgICAgICAgIGJpdHNPckltcG9ydE51bWJl
ciA9IGNvbnN0YW50OworICAgICAgICByZXN1bHRUeXBlID0gRjMyOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBjYXNlIEY2NENvbnN0OiB7CisgICAgICAgIHVpbnQ2NF90IGNvbnN0YW50
OworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ2NChjb25zdGFudCksICJj
YW4ndCBnZXQgY29uc3RhbnQgdmFsdWUgZm9yIGluaXRfZXhwcidzIGY2NC5jb25zdCIpOworICAg
ICAgICBiaXRzT3JJbXBvcnROdW1iZXIgPSBjb25zdGFudDsKKyAgICAgICAgcmVzdWx0VHlwZSA9
IEY2NDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBHZXRHbG9iYWw6IHsKKyAg
ICAgICAgdWludDMyX3QgaW5kZXg7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNl
VmFyVUludDMyKGluZGV4KSwgImNhbid0IGdldCBnZXRfZ2xvYmFsJ3MgaW5kZXgiKTsKKworICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluZGV4ID49IG1faW5mby0+Z2xvYmFscy5zaXplKCks
ICJnZXRfZ2xvYmFsJ3MgaW5kZXggIiwgaW5kZXgsICIgZXhjZWVkcyB0aGUgbnVtYmVyIG9mIGds
b2JhbHMgIiwgbV9pbmZvLT5nbG9iYWxzLnNpemUoKSk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoaW5kZXggPj0gbV9pbmZvLT5maXJzdEludGVybmFsR2xvYmFsLCAiZ2V0X2dsb2JhbCBp
bXBvcnQga2luZCBpbmRleCAiLCBpbmRleCwgIiBleGNlZWRzIHRoZSBmaXJzdCBpbnRlcm5hbCBn
bG9iYWwgIiwgbV9pbmZvLT5maXJzdEludGVybmFsR2xvYmFsKTsKKworICAgICAgICBBU1NFUlQo
bV9pbmZvLT5nbG9iYWxzW2luZGV4XS5tdXRhYmlsaXR5ID09IEdsb2JhbDo6SW1tdXRhYmxlKTsK
KyAgICAgICAgcmVzdWx0VHlwZSA9IG1faW5mby0+Z2xvYmFsc1tpbmRleF0udHlwZTsKKyAgICAg
ICAgYml0c09ySW1wb3J0TnVtYmVyID0gaW5kZXg7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYodHJ1ZSwgInVua25vd24g
aW5pdF9leHByIG9wY29kZSAiLCBvcGNvZGUpOworICAgIH0KKworICAgIHVpbnQ4X3QgZW5kT3Bj
b2RlOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUludDgoZW5kT3Bjb2RlKSwgImNh
bid0IGdldCBpbml0X2V4cHIncyBlbmQgb3Bjb2RlIik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RihlbmRPcGNvZGUgIT0gT3BUeXBlOjpFbmQsICJpbml0X2V4cHIgc2hvdWxkIGVuZCB3aXRoIGVu
ZCwgZW5kZWQgd2l0aCAiLCBlbmRPcGNvZGUpOworCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0
byBTZWN0aW9uUGFyc2VyOjpwYXJzZUdsb2JhbFR5cGUoR2xvYmFsJiBnbG9iYWwpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICB1aW50OF90IG11dGFiaWxpdHk7CisgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VWYWx1ZVR5cGUoZ2xvYmFsLnR5cGUpLCAiY2FuJ3QgZ2V0IEdsb2JhbCdzIHZh
bHVlIHR5cGUiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQxKG11dGFi
aWxpdHkpLCAiY2FuJ3QgZ2V0IEdsb2JhbCB0eXBlJ3MgbXV0YWJpbGl0eSIpOworICAgIGdsb2Jh
bC5tdXRhYmlsaXR5ID0gc3RhdGljX2Nhc3Q8R2xvYmFsOjpNdXRhYmlsaXR5PihtdXRhYmlsaXR5
KTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlRGF0YSgp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1aW50MzJfdCBzZWdtZW50Q291bnQ7CisgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoc2VnbWVudENvdW50KSwgImNhbid0IGdl
dCBEYXRhIHNlY3Rpb24ncyBjb3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoc2VnbWVu
dENvdW50ID4gbWF4RGF0YVNlZ21lbnRzLCAiRGF0YSBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJp
ZyAiLCBzZWdtZW50Q291bnQsICIgbWF4aW11bSAiLCBtYXhEYXRhU2VnbWVudHMpOworICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+ZGF0YS50cnlSZXNlcnZlQ2FwYWNpdHkoc2VnbWVu
dENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIERhdGEgc2VjdGlvbidz
ICIsIHNlZ21lbnRDb3VudCwgIiBzZWdtZW50cyIpOworCisgICAgZm9yICh1aW50MzJfdCBzZWdt
ZW50TnVtYmVyID0gMDsgc2VnbWVudE51bWJlciA8IHNlZ21lbnRDb3VudDsgKytzZWdtZW50TnVt
YmVyKSB7CisgICAgICAgIHVpbnQzMl90IG1lbW9yeUluZGV4OworICAgICAgICB1aW50NjRfdCBp
bml0RXhwckJpdHM7CisgICAgICAgIHVpbnQ4X3QgaW5pdE9wY29kZTsKKyAgICAgICAgdWludDMy
X3QgZGF0YUJ5dGVMZW5ndGg7CisKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VW
YXJVSW50MzIobWVtb3J5SW5kZXgpLCAiY2FuJ3QgZ2V0ICIsIHNlZ21lbnROdW1iZXIsICJ0aCBE
YXRhIHNlZ21lbnQncyBpbmRleCIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG1lbW9y
eUluZGV4ID49IG1faW5mby0+bWVtb3J5Q291bnQoKSwgc2VnbWVudE51bWJlciwgInRoIERhdGEg
c2VnbWVudCBoYXMgaW5kZXggIiwgbWVtb3J5SW5kZXgsICIgd2hpY2ggZXhjZWVkcyB0aGUgbnVt
YmVyIG9mIE1lbW9yaWVzICIsIG1faW5mby0+bWVtb3J5Q291bnQoKSk7CisgICAgICAgIFR5cGUg
aW5pdEV4cHJUeXBlOworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlSW5p
dEV4cHIoaW5pdE9wY29kZSwgaW5pdEV4cHJCaXRzLCBpbml0RXhwclR5cGUpKTsKKyAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRihpbml0RXhwclR5cGUgIT0gSTMyLCBzZWdtZW50TnVtYmVyLCAi
dGggRGF0YSBzZWdtZW50J3MgaW5pdF9leHByIG11c3QgcHJvZHVjZSBhbiBpMzIiKTsKKyAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZGF0YUJ5dGVMZW5ndGgpLCAi
Y2FuJ3QgZ2V0ICIsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQncyBkYXRhIGJ5dGUg
bGVuZ3RoIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZGF0YUJ5dGVMZW5ndGggPiBt
YXhNb2R1bGVTaXplLCBzZWdtZW50TnVtYmVyLCAidGggRGF0YSBzZWdtZW50J3MgZGF0YSBieXRl
IGxlbmd0aCBpcyB0b28gYmlnICIsIGRhdGFCeXRlTGVuZ3RoLCAiIG1heGltdW0gIiwgbWF4TW9k
dWxlU2l6ZSk7CisKKyAgICAgICAgU2VnbWVudCogc2VnbWVudCA9IFNlZ21lbnQ6OmNyZWF0ZSht
YWtlSTMySW5pdEV4cHIoaW5pdE9wY29kZSwgaW5pdEV4cHJCaXRzKSwgZGF0YUJ5dGVMZW5ndGgp
OworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFzZWdtZW50LCAiY2FuJ3QgYWxsb2NhdGUg
ZW5vdWdoIG1lbW9yeSBmb3IgIiwgc2VnbWVudE51bWJlciwgInRoIERhdGEgc2VnbWVudCBvZiBz
aXplICIsIGRhdGFCeXRlTGVuZ3RoKTsKKyAgICAgICAgbV9pbmZvLT5kYXRhLnVuY2hlY2tlZEFw
cGVuZChTZWdtZW50OjphZG9wdFB0cihzZWdtZW50KSk7CisgICAgICAgIGZvciAodWludDMyX3Qg
ZGF0YUJ5dGUgPSAwOyBkYXRhQnl0ZSA8IGRhdGFCeXRlTGVuZ3RoOyArK2RhdGFCeXRlKSB7Cisg
ICAgICAgICAgICB1aW50OF90IGJ5dGU7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFwYXJzZVVJbnQ4KGJ5dGUpLCAiY2FuJ3QgZ2V0ICIsIGRhdGFCeXRlLCAidGggZGF0YSBieXRl
IGZyb20gIiwgc2VnbWVudE51bWJlciwgInRoIERhdGEgc2VnbWVudCIpOworICAgICAgICAgICAg
c2VnbWVudC0+Ynl0ZShkYXRhQnl0ZSkgPSBieXRlOworICAgICAgICB9CisgICAgfQorICAgIHJl
dHVybiB7IH07Cit9CisKK2F1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VDdXN0b20oKSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgQ3VzdG9tU2VjdGlvbiBzZWN0aW9uOworICAgIHVpbnQzMl90IGN1
c3RvbVNlY3Rpb25OdW1iZXIgPSBtX2luZm8tPmN1c3RvbVNlY3Rpb25zLnNpemUoKSArIDE7Cisg
ICAgdWludDMyX3QgbmFtZUxlbjsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmN1
c3RvbVNlY3Rpb25zLnRyeVJlc2VydmVDYXBhY2l0eShjdXN0b21TZWN0aW9uTnVtYmVyKSwgImNh
bid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGN1c3RvbVNlY3Rpb25OdW1iZXIsICJ0
aCBjdXN0b20gc2VjdGlvbiIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUlu
dDMyKG5hbWVMZW4pLCAiY2FuJ3QgZ2V0ICIsIGN1c3RvbVNlY3Rpb25OdW1iZXIsICJ0aCBjdXN0
b20gc2VjdGlvbidzIG5hbWUgbGVuZ3RoIik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighY29u
c3VtZVVURjhTdHJpbmcoc2VjdGlvbi5uYW1lLCBuYW1lTGVuKSwgIm5hbWVMZW4gZ2V0ICIsIGN1
c3RvbVNlY3Rpb25OdW1iZXIsICJ0aCBjdXN0b20gc2VjdGlvbidzIG5hbWUgb2YgbGVuZ3RoICIs
IG5hbWVMZW4pOworCisgICAgdWludDMyX3QgcGF5bG9hZEJ5dGVzID0gbGVuZ3RoKCkgLSBtX29m
ZnNldDsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFzZWN0aW9uLnBheWxvYWQudHJ5UmVzZXJ2
ZUNhcGFjaXR5KHBheWxvYWRCeXRlcyksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZv
ciAiLCBjdXN0b21TZWN0aW9uTnVtYmVyLCAidGggY3VzdG9tIHNlY3Rpb24ncyAiLCBwYXlsb2Fk
Qnl0ZXMsICIgYnl0ZXMiKTsKKyAgICBmb3IgKHVpbnQzMl90IGJ5dGVOdW1iZXIgPSAwOyBieXRl
TnVtYmVyIDwgcGF5bG9hZEJ5dGVzOyArK2J5dGVOdW1iZXIpIHsKKyAgICAgICAgdWludDhfdCBi
eXRlOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ4KGJ5dGUpLCAiY2Fu
J3QgZ2V0ICIsIGJ5dGVOdW1iZXIsICJ0aCBkYXRhIGJ5dGUgZnJvbSAiLCBjdXN0b21TZWN0aW9u
TnVtYmVyLCAidGggY3VzdG9tIHNlY3Rpb24iKTsKKyAgICAgICAgc2VjdGlvbi5wYXlsb2FkLnVu
Y2hlY2tlZEFwcGVuZChieXRlKTsKKyAgICB9CisKKyAgICBOYW1lIG5hbWVOYW1lID0geyAnbics
ICdhJywgJ20nLCAnZScgfTsKKyAgICBpZiAoc2VjdGlvbi5uYW1lID09IG5hbWVOYW1lKSB7Cisg
ICAgICAgIE5hbWVTZWN0aW9uUGFyc2VyIG5hbWVTZWN0aW9uUGFyc2VyKHNlY3Rpb24ucGF5bG9h
ZC5iZWdpbigpLCBzZWN0aW9uLnBheWxvYWQuc2l6ZSgpLCBtX2luZm8pOworICAgICAgICBpZiAo
YXV0byBuYW1lU2VjdGlvbiA9IG5hbWVTZWN0aW9uUGFyc2VyLnBhcnNlKCkpCisgICAgICAgICAg
ICBtX2luZm8tPm5hbWVTZWN0aW9uID0gV1RGTW92ZSgqbmFtZVNlY3Rpb24pOworICAgIH0KKwor
ICAgIG1faW5mby0+Y3VzdG9tU2VjdGlvbnMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoc2VjdGlv
bikpOworCisgICAgcmV0dXJuIHsgfTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20K
KworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9uUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc4ZDAyODM2ZmM5ZjMyYmMy
Yjc4ZmJmOTBhZDJjNWRhOWY5MTI4M2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kgPHl1c3VrZXN1enVraUBzbG93c3RhcnQu
b3JnPi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJXYXNtRm9ybWF0
LmgiCisjaW5jbHVkZSAiV2FzbU9wcy5oIgorI2luY2x1ZGUgIldhc21QYXJzZXIuaCIKKyNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK2NsYXNzIFNlY3Rpb25QYXJzZXIgZmluYWwgOiBw
dWJsaWMgUGFyc2VyPHZvaWQ+IHsKK3B1YmxpYzoKKyAgICBTZWN0aW9uUGFyc2VyKGNvbnN0IHVp
bnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCBzaXplX3Qgb2Zmc2V0SW5Tb3VyY2UsIE1vZHVsZUlu
Zm9ybWF0aW9uJiBpbmZvKQorICAgICAgICA6IFBhcnNlcihkYXRhLCBzaXplKQorICAgICAgICAs
IG1fb2Zmc2V0SW5Tb3VyY2Uob2Zmc2V0SW5Tb3VyY2UpCisgICAgICAgICwgbV9pbmZvKGluZm8p
CisgICAgeworICAgIH0KKworI2RlZmluZSBXQVNNX1NFQ1RJT05fREVDTEFSRV9QQVJTRVIoTkFN
RSwgSUQsIERFU0NSSVBUSU9OKSBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJz
ZSAjIyBOQU1FKCk7CisgICAgRk9SX0VBQ0hfS05PV05fV0FTTV9TRUNUSU9OKFdBU01fU0VDVElP
Tl9ERUNMQVJFX1BBUlNFUikKKyN1bmRlZiBXQVNNX1NFQ1RJT05fREVDTEFSRV9QQVJTRVIKKwor
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlQ3VzdG9tKCk7CisKK3By
aXZhdGU6CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIC4uLkFyZ3M+CisgICAgTkVWRVJfSU5MSU5F
IFVuZXhwZWN0ZWRSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGZhaWwoQXJncy4uLiBhcmdzKSBj
b25zdAorICAgIHsKKyAgICAgICAgdXNpbmcgbmFtZXNwYWNlIEZhaWx1cmVIZWxwZXI7IC8vIFNl
ZSBBREwgY29tbWVudCBpbiBuYW1lc3BhY2UgYWJvdmUuCisgICAgICAgIHJldHVybiBVbmV4cGVj
dGVkUmVzdWx0KG1ha2VTdHJpbmcoIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0
IGJ5dGUgIl9zLCBTdHJpbmc6Om51bWJlcihtX29mZnNldCArIG1fb2Zmc2V0SW5Tb3VyY2UpLCAi
OiAiX3MsIG1ha2VTdHJpbmcoYXJncykuLi4pKTsKKyAgICB9CisKKyAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUdsb2JhbFR5cGUoR2xvYmFsJik7CisgICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VNZW1vcnlIZWxwZXIoYm9vbCBpc0ltcG9y
dCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VUYWJsZUhlbHBl
cihib29sIGlzSW1wb3J0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBw
YXJzZVJlc2l6YWJsZUxpbWl0cyh1aW50MzJfdCYgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50
MzJfdD4mIG1heGltdW0pOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBh
cnNlSW5pdEV4cHIodWludDhfdCYsIHVpbnQ2NF90JiwgVHlwZSYgaW5pdEV4cHJUeXBlKTsKKwor
ICAgIHNpemVfdCBtX29mZnNldEluU291cmNlOworICAgIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4g
bV9pbmZvOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVO
QUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVN0cmVhbWluZ1BhcnNlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTE1NGIyMjRhYmNmYzZlNTA3MDI2MjNk
MzhhZDM0YTIzZDA1YTgyYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwCkBAIC0wLDAgKzEsMzg5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kgPHl1c3VrZXN1enVraUBzbG93c3RhcnQu
b3JnPi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21TdHJlYW1pbmdQYXJzZXIuaCIKKworI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIldhc21Nb2R1bGVQYXJzZXIuaCIKKyNpbmNs
dWRlICJXYXNtU2VjdGlvblBhcnNlci5oIgorI2luY2x1ZGUgPHd0Zi9VbmFsaWduZWRBY2Nlc3Mu
aD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworbmFtZXNwYWNlIFdhc21T
dHJlYW1pbmdQYXJzZXJJbnRlcm5hbCB7CitzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9
IGZhbHNlOworfQorCisjZGVmaW5lIFdBU01fU1RSRUFNSU5HX1BBUlNFUl9GQUlMX0lGX0hFTFBF
Ul9GQUlMUyhoZWxwZXIpIFwKKyAgICBkbyB7IFwKKyAgICAgICAgYXV0byBoZWxwZXJSZXN1bHQg
PSBoZWxwZXI7IFwKKyAgICAgICAgaWYgKFVOTElLRUxZKCFoZWxwZXJSZXN1bHQpKSB7IFwKKyAg
ICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gaGVscGVyUmVzdWx0LmVycm9yKCk7IFwKKyAgICAg
ICAgICAgIHJldHVybiBTdGF0ZTo6RmF0YWxFcnJvcjsgXAorICAgICAgICB9IFwKKyAgICB9IHdo
aWxlICgwKQorCitBTFdBWVNfSU5MSU5FIHN0ZDo6b3B0aW9uYWw8dWludDhfdD4gcGFyc2VVSW50
Nyhjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QmIG9mZnNldCwgc2l6ZV90IHNpemUpCit7Cisg
ICAgaWYgKG9mZnNldCA+PSBzaXplKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgdWludDhf
dCByZXN1bHQgPSBkYXRhW29mZnNldCsrXTsKKyAgICBpZiAocmVzdWx0IDwgMHg4MCkKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgLi4uQXJncz4KK05FVkVSX0lOTElORSBhdXRvIFdBUk5fVU5VU0VEX1JFVFVS
TiBTdHJlYW1pbmdQYXJzZXI6OmZhaWwoQXJncy4uLiBhcmdzKSAtPiBTdGF0ZQoreworICAgIHVz
aW5nIG5hbWVzcGFjZSBGYWlsdXJlSGVscGVyOyAvLyBTZWUgQURMIGNvbW1lbnQgaW4gbmFtZXNw
YWNlIGFib3ZlLgorICAgIG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygiV2ViQXNzZW1ibHku
TW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAiX3MsIFN0cmluZzo6bnVtYmVyKG1fb2Zmc2V0
KSwgIjogIl9zLCBtYWtlU3RyaW5nKGFyZ3MpLi4uKTsKKyAgICBkYXRhTG9nTG5JZihXYXNtU3Ry
ZWFtaW5nUGFyc2VySW50ZXJuYWw6OnZlcmJvc2UsIG1fZXJyb3JNZXNzYWdlKTsKKyAgICByZXR1
cm4gU3RhdGU6OkZhdGFsRXJyb3I7Cit9CisKK1N0cmVhbWluZ1BhcnNlcjo6U3RyZWFtaW5nUGFy
c2VyKE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvKQorICAgIDogbV9pbmZvKGluZm8pCit7CisgICAg
ZGF0YUxvZ0xuSWYoV2FzbVN0cmVhbWluZ1BhcnNlckludGVybmFsOjp2ZXJib3NlLCAic3RhcnRp
bmcgdmFsaWRhdGlvbiIpOworfQorCithdXRvIFN0cmVhbWluZ1BhcnNlcjo6cGFyc2VNb2R1bGVI
ZWFkZXIoVmVjdG9yPHVpbnQ4X3Q+JiYgZGF0YSkgLT4gU3RhdGUKK3sKKyAgICBBU1NFUlQoZGF0
YS5zaXplKCkgPT0gbW9kdWxlSGVhZGVyU2l6ZSk7CisgICAgZGF0YUxvZ0xuSWYoV2FzbVN0cmVh
bWluZ1BhcnNlckludGVybmFsOjp2ZXJib3NlLCAiaGVhZGVyIHZhbGlkYXRpb24iKTsKKyAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKGRhdGFbMF0gIT0gJ1wwJyB8fCBkYXRhWzFdICE9ICdhJyB8fCBk
YXRhWzJdICE9ICdzJyB8fCBkYXRhWzNdICE9ICdtJywgIm1vZHVsZXMgZG9lc24ndCBzdGFydCB3
aXRoICdcXDBhc20nIik7CisgICAgdWludDMyX3QgdmVyc2lvbk51bWJlciA9IFdURjo6dW5hbGln
bmVkTG9hZDx1aW50MzJfdD4oZGF0YS5kYXRhKCkgKyA0KTsKKyAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKHZlcnNpb25OdW1iZXIgIT0gZXhwZWN0ZWRWZXJzaW9uTnVtYmVyLCAidW5leHBlY3RlZCB2
ZXJzaW9uIG51bWJlciAiLCB2ZXJzaW9uTnVtYmVyLCAiIGV4cGVjdGVkICIsIGV4cGVjdGVkVmVy
c2lvbk51bWJlcik7CisgICAgcmV0dXJuIFN0YXRlOjpTZWN0aW9uSGVhZGVyOworfQorCithdXRv
IFN0cmVhbWluZ1BhcnNlcjo6cGFyc2VTZWN0aW9uSGVhZGVyKFZlY3Rvcjx1aW50OF90PiYmIGRh
dGEpIC0+IFN0YXRlCit7CisgICAgQVNTRVJUKGRhdGEuc2l6ZSgpID09IHNlY3Rpb25IZWFkZXJT
aXplKTsKKyAgICBzaXplX3Qgb2Zmc2V0ID0gMDsKKyAgICBhdXRvIHJlc3VsdCA9IHBhcnNlVUlu
dDcoZGF0YS5kYXRhKCksIG9mZnNldCwgZGF0YS5zaXplKCkpOworICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIXJlc3VsdCwgImNhbid0IGdldCBzZWN0aW9uIGJ5dGUiKTsKKworICAgIFNlY3Rpb24g
c2VjdGlvbiA9IFNlY3Rpb246OkN1c3RvbTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFkZWNv
ZGVTZWN0aW9uKCpyZXN1bHQsIHNlY3Rpb24pLCAiaW52YWxpZCBzZWN0aW9uIik7CisgICAgQVNT
RVJUKHNlY3Rpb24gIT0gU2VjdGlvbjo6QmVnaW4pOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXZhbGlkYXRlT3JkZXIobV9wcmV2aW91c0tub3duU2VjdGlvbiwgc2VjdGlvbiksICJpbnZhbGlk
IHNlY3Rpb24gb3JkZXIsICIsIG1fcHJldmlvdXNLbm93blNlY3Rpb24sICIgZm9sbG93ZWQgYnkg
Iiwgc2VjdGlvbik7CisgICAgbV9zZWN0aW9uID0gc2VjdGlvbjsKKyAgICBpZiAoaXNLbm93blNl
Y3Rpb24oc2VjdGlvbikpCisgICAgICAgIG1fcHJldmlvdXNLbm93blNlY3Rpb24gPSBzZWN0aW9u
OworICAgIHJldHVybiBTdGF0ZTo6U2VjdGlvblNpemU7Cit9CisKK2F1dG8gU3RyZWFtaW5nUGFy
c2VyOjpwYXJzZVNlY3Rpb25TaXplKHVpbnQzMl90IHNlY3Rpb25MZW5ndGgpIC0+IFN0YXRlCit7
CisgICAgbV9zZWN0aW9uTGVuZ3RoID0gc2VjdGlvbkxlbmd0aDsKKyAgICBpZiAobV9zZWN0aW9u
ID09IFNlY3Rpb246OkNvZGUpCisgICAgICAgIHJldHVybiBTdGF0ZTo6Q29kZVNlY3Rpb25TaXpl
OworICAgIHJldHVybiBTdGF0ZTo6U2VjdGlvbkJvZHk7Cit9CisKK2F1dG8gU3RyZWFtaW5nUGFy
c2VyOjpwYXJzZUNvZGVTZWN0aW9uU2l6ZSh1aW50MzJfdCBmdW5jdGlvbkNvdW50KSAtPiBTdGF0
ZQoreworICAgIG1fZnVuY3Rpb25Db3VudCA9IGZ1bmN0aW9uQ291bnQ7CisgICAgbV9mdW5jdGlv
bkluZGV4ID0gMDsKKyAgICBtX2NvZGVPZmZzZXQgPSBtX29mZnNldDsKKworICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoZnVuY3Rpb25Db3VudCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90
Pjo6bWF4KCksICJDb2RlIHNlY3Rpb24ncyBjb3VudCBpcyB0b28gYmlnICIsIGZ1bmN0aW9uQ291
bnQpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25Db3VudCAhPSBtX2luZm8tPmZ1
bmN0aW9ucy5zaXplKCksICJDb2RlIHNlY3Rpb24gY291bnQgIiwgZnVuY3Rpb25Db3VudCwgIiBl
eGNlZWRzIHRoZSBkZWNsYXJlZCBudW1iZXIgb2YgZnVuY3Rpb25zICIsIG1faW5mby0+ZnVuY3Rp
b25zLnNpemUoKSk7CisKKyAgICBpZiAobV9mdW5jdGlvbkluZGV4ID09IG1fZnVuY3Rpb25Db3Vu
dCkgeworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKChtX2NvZGVPZmZzZXQgKyBtX3NlY3Rp
b25MZW5ndGgpICE9IG1fb2Zmc2V0LCAicGFyc2luZyBlbmRlZCBiZWZvcmUgdGhlIGVuZCBvZiAi
LCBtX3NlY3Rpb24sICIgc2VjdGlvbiIpOworICAgICAgICByZXR1cm4gU3RhdGU6OlNlY3Rpb25I
ZWFkZXI7CisgICAgfQorICAgIHJldHVybiBTdGF0ZTo6RnVuY3Rpb25IZWFkZXI7Cit9CisKK2F1
dG8gU3RyZWFtaW5nUGFyc2VyOjpwYXJzZUZ1bmN0aW9uSGVhZGVyKHVpbnQzMl90IGZ1bmN0aW9u
U2l6ZSkgLT4gU3RhdGUKK3sKKyAgICBtX2Z1bmN0aW9uU2l6ZSA9IGZ1bmN0aW9uU2l6ZTsKKyAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKGZ1bmN0aW9uU2l6ZSA+IG1heEZ1bmN0aW9uU2l6ZSwgIkNv
ZGUgZnVuY3Rpb24ncyBzaXplICIsIGZ1bmN0aW9uU2l6ZSwgIiBpcyB0b28gYmlnIik7CisgICAg
cmV0dXJuIFN0YXRlOjpGdW5jdGlvbkJvZHk7Cit9CisKK2F1dG8gU3RyZWFtaW5nUGFyc2VyOjpw
YXJzZUZ1bmN0aW9uQm9keShWZWN0b3I8dWludDhfdD4mJiBkYXRhKSAtPiBTdGF0ZQoreworICAg
IGF1dG8mIGZ1bmN0aW9uID0gbV9pbmZvLT5mdW5jdGlvbnNbbV9mdW5jdGlvbkluZGV4XTsKKyAg
ICBmdW5jdGlvbi5zdGFydCA9IG1fb2Zmc2V0OworICAgIGZ1bmN0aW9uLmVuZCA9IG1fb2Zmc2V0
ICsgbV9mdW5jdGlvblNpemU7CisgICAgZnVuY3Rpb24uZGF0YSA9IFdURk1vdmUoZGF0YSk7Cisg
ICAgZGF0YUxvZ0xuSWYoV2FzbVN0cmVhbWluZ1BhcnNlckludGVybmFsOjp2ZXJib3NlLCAiUHJv
Y2Vzc2luZyBmdW5jdGlvbiBzdGFydGluZyBhdDogIiwgZnVuY3Rpb24uc3RhcnQsICIgYW5kIGVu
ZGluZyBhdDogIiwgZnVuY3Rpb24uZW5kKTsKKyAgICArK21fZnVuY3Rpb25JbmRleDsKKyAgICBp
ZiAobV9mdW5jdGlvbkluZGV4ID09IG1fZnVuY3Rpb25Db3VudCkgeworICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKChtX2NvZGVPZmZzZXQgKyBtX3NlY3Rpb25MZW5ndGgpICE9IChtX29mZnNl
dCArIG1fZnVuY3Rpb25TaXplKSwgInBhcnNpbmcgZW5kZWQgYmVmb3JlIHRoZSBlbmQgb2YgIiwg
bV9zZWN0aW9uLCAiIHNlY3Rpb24iKTsKKyAgICAgICAgcmV0dXJuIFN0YXRlOjpTZWN0aW9uSGVh
ZGVyOworICAgIH0KKyAgICByZXR1cm4gU3RhdGU6OkZ1bmN0aW9uSGVhZGVyOworfQorCithdXRv
IFN0cmVhbWluZ1BhcnNlcjo6cGFyc2VTZWN0aW9uQm9keShWZWN0b3I8dWludDhfdD4mJiBkYXRh
KSAtPiBTdGF0ZQoreworICAgIFNlY3Rpb25QYXJzZXIgcGFyc2VyKGRhdGEuZGF0YSgpLCBkYXRh
LnNpemUoKSwgbV9vZmZzZXQsIG1faW5mby5nZXQoKSk7CisgICAgc3dpdGNoIChtX3NlY3Rpb24p
IHsKKyNkZWZpbmUgV0FTTV9TRUNUSU9OX1BBUlNFKE5BTUUsIElELCBERVNDUklQVElPTikgXAor
ICAgIGNhc2UgU2VjdGlvbjo6TkFNRTogeyBcCisgICAgICAgIFdBU01fU1RSRUFNSU5HX1BBUlNF
Ul9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZXIucGFyc2UgIyMgTkFNRSgpKTsgXAorICAgICAg
ICBicmVhazsgXAorICAgIH0KKyAgICBGT1JfRUFDSF9LTk9XTl9XQVNNX1NFQ1RJT04oV0FTTV9T
RUNUSU9OX1BBUlNFKQorI3VuZGVmIFdBU01fU0VDVElPTl9QQVJTRQorCisgICAgY2FzZSBTZWN0
aW9uOjpDdXN0b206IHsKKyAgICAgICAgV0FTTV9TVFJFQU1JTkdfUEFSU0VSX0ZBSUxfSUZfSEVM
UEVSX0ZBSUxTKHBhcnNlci5wYXJzZUN1c3RvbSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBTZWN0aW9uOjpCZWdpbjogeworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgfQorCisgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRihwYXJzZXIubGVuZ3RoKCkgIT0gcGFyc2VyLm9mZnNldCgpLCAicGFyc2luZyBl
bmRlZCBiZWZvcmUgdGhlIGVuZCBvZiAiLCBtX3NlY3Rpb24sICIgc2VjdGlvbiIpOworCisgICAg
cmV0dXJuIFN0YXRlOjpTZWN0aW9uSGVhZGVyOworfQorCithdXRvIFN0cmVhbWluZ1BhcnNlcjo6
Y29uc3VtZShjb25zdCB1aW50OF90KiBieXRlcywgc2l6ZV90IGJ5dGVzU2l6ZSwgc2l6ZV90JiBv
ZmZzZXRJbkJ5dGVzLCBzaXplX3QgcmVxdWlyZWRTaXplKSAtPiBzdGQ6Om9wdGlvbmFsPFZlY3Rv
cjx1aW50OF90Pj4KK3sKKyAgICBpZiAobV9yZW1haW5pbmcuc2l6ZSgpID09IHJlcXVpcmVkU2l6
ZSkgeworICAgICAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0ID0gV1RGTW92ZShtX3JlbWFpbmlu
Zyk7CisgICAgICAgIG1fbmV4dE9mZnNldCArPSByZXF1aXJlZFNpemU7CisgICAgICAgIHJldHVy
biBXVEZNb3ZlKHJlc3VsdCk7CisgICAgfQorCisgICAgaWYgKG1fcmVtYWluaW5nLnNpemUoKSA+
IHJlcXVpcmVkU2l6ZSkgeworICAgICAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0KHJlcXVpcmVk
U2l6ZSk7CisgICAgICAgIG1lbWNweShyZXN1bHQuZGF0YSgpLCBtX3JlbWFpbmluZy5kYXRhKCks
IHJlcXVpcmVkU2l6ZSk7CisgICAgICAgIG1fcmVtYWluaW5nLnJlbW92ZSgwLCByZXF1aXJlZFNp
emUpOworICAgICAgICBtX25leHRPZmZzZXQgKz0gcmVxdWlyZWRTaXplOworICAgICAgICByZXR1
cm4gV1RGTW92ZShyZXN1bHQpOworICAgIH0KKworICAgIEFTU0VSVChtX3JlbWFpbmluZy5zaXpl
KCkgPCByZXF1aXJlZFNpemUpOworICAgIHNpemVfdCBieXRlc1JlbWFpbmluZ1NpemUgPSBieXRl
c1NpemUgLSBvZmZzZXRJbkJ5dGVzOworICAgIHNpemVfdCB0b3RhbERhdGFTaXplID0gbV9yZW1h
aW5pbmcuc2l6ZSgpICsgYnl0ZXNSZW1haW5pbmdTaXplOworICAgIGlmICh0b3RhbERhdGFTaXpl
IDwgcmVxdWlyZWRTaXplKSB7CisgICAgICAgIG1fcmVtYWluaW5nLmFwcGVuZChieXRlcyArIG9m
ZnNldEluQnl0ZXMsIGJ5dGVzUmVtYWluaW5nU2l6ZSk7CisgICAgICAgIG9mZnNldEluQnl0ZXMg
PSBieXRlc1NpemU7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAg
c2l6ZV90IHVzZWRTaXplID0gcmVxdWlyZWRTaXplIC0gbV9yZW1haW5pbmcuc2l6ZSgpOworICAg
IG1fcmVtYWluaW5nLmFwcGVuZChieXRlcyArIG9mZnNldEluQnl0ZXMsIHVzZWRTaXplKTsKKyAg
ICBvZmZzZXRJbkJ5dGVzICs9IHVzZWRTaXplOworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQg
PSBXVEZNb3ZlKG1fcmVtYWluaW5nKTsKKyAgICBtX25leHRPZmZzZXQgKz0gcmVxdWlyZWRTaXpl
OworICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7Cit9CisKK2F1dG8gU3RyZWFtaW5nUGFyc2Vy
Ojpjb25zdW1lVmFyVUludDMyKGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3QgYnl0ZXNTaXpl
LCBzaXplX3QmIG9mZnNldEluQnl0ZXMsIElzRW5kT2ZTdHJlYW0gaXNFbmRPZlN0cmVhbSkgLT4g
RXhwZWN0ZWQ8dWludDMyX3QsIFN0YXRlPgoreworICAgIGNvbnN0ZXhwciBzaXplX3QgbWF4U2l6
ZSA9IFdURjo6TEVCRGVjb2Rlcjo6bWF4Qnl0ZUxlbmd0aDx1aW50MzJfdD4oKTsKKyAgICBzaXpl
X3QgYnl0ZXNSZW1haW5pbmdTaXplID0gYnl0ZXNTaXplIC0gb2Zmc2V0SW5CeXRlczsKKyAgICBz
aXplX3QgdG90YWxEYXRhU2l6ZSA9IG1fcmVtYWluaW5nLnNpemUoKSArIGJ5dGVzUmVtYWluaW5n
U2l6ZTsKKyAgICBpZiAobV9yZW1haW5pbmcuc2l6ZSgpID49IG1heFNpemUpIHsKKyAgICAgICAg
Ly8gRG8gbm90aGluZy4KKyAgICB9IGVsc2UgaWYgKHRvdGFsRGF0YVNpemUgPj0gbWF4U2l6ZSkg
eworICAgICAgICBzaXplX3QgdXNlZFNpemUgPSBtYXhTaXplIC0gbV9yZW1haW5pbmcuc2l6ZSgp
OworICAgICAgICBtX3JlbWFpbmluZy5hcHBlbmQoYnl0ZXMgKyBvZmZzZXRJbkJ5dGVzLCB1c2Vk
U2l6ZSk7CisgICAgICAgIG9mZnNldEluQnl0ZXMgKz0gdXNlZFNpemU7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgbV9yZW1haW5pbmcuYXBwZW5kKGJ5dGVzICsgb2Zmc2V0SW5CeXRlcywgYnl0ZXNS
ZW1haW5pbmdTaXplKTsKKyAgICAgICAgb2Zmc2V0SW5CeXRlcyArPSBieXRlc1JlbWFpbmluZ1Np
emU7CisgICAgICAgIGlmIChpc0VuZE9mU3RyZWFtID09IElzRW5kT2ZTdHJlYW06Ok5vKQorICAg
ICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKG1fc3RhdGUpOworICAgIH0KKworICAgIHNp
emVfdCBvZmZzZXQgPSAwOworICAgIHVpbnQzMl90IHJlc3VsdCA9IDA7CisgICAgaWYgKCFXVEY6
OkxFQkRlY29kZXI6OmRlY29kZVVJbnQzMihtX3JlbWFpbmluZy5kYXRhKCksIG1fcmVtYWluaW5n
LnNpemUoKSwgb2Zmc2V0LCByZXN1bHQpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
U3RhdGU6OkZhdGFsRXJyb3IpOworICAgIHNpemVfdCBjb25zdW1lZFNpemUgPSBvZmZzZXQ7Cisg
ICAgbV9yZW1haW5pbmcucmVtb3ZlKDAsIGNvbnN1bWVkU2l6ZSk7CisgICAgbV9uZXh0T2Zmc2V0
ICs9IGNvbnN1bWVkU2l6ZTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCithdXRvIFN0cmVhbWlu
Z1BhcnNlcjo6YWRkQnl0ZXMoY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBieXRlc1NpemUs
IElzRW5kT2ZTdHJlYW0gaXNFbmRPZlN0cmVhbSkgLT4gU3RhdGUKK3sKKyAgICBpZiAobV9zdGF0
ZSA9PSBTdGF0ZTo6RmF0YWxFcnJvcikKKyAgICAgICAgcmV0dXJuIG1fc3RhdGU7CisKKyAgICBt
X3RvdGFsU2l6ZSArPSBieXRlc1NpemU7CisgICAgaWYgKFVOTElLRUxZKG1fdG90YWxTaXplLmhh
c092ZXJmbG93ZWQoKSB8fCBtX3RvdGFsU2l6ZS51bnNhZmVHZXQoKSA+IG1heE1vZHVsZVNpemUp
KSB7CisgICAgICAgIG1fc3RhdGUgPSBmYWlsKCJtb2R1bGUgc2l6ZSBpcyB0b28gbGFyZ2UsIG1h
eGltdW0gIiwgbWF4TW9kdWxlU2l6ZSk7CisgICAgICAgIHJldHVybiBtX3N0YXRlOworICAgIH0K
KworICAgIGlmIChPcHRpb25zOjp1c2VFYWdlcldlYkFzc2VtYmx5TW9kdWxlSGFzaGluZygpKQor
ICAgICAgICBtX2hhc2hlci5hZGRCeXRlcyhieXRlcywgYnl0ZXNTaXplKTsKKworICAgIHNpemVf
dCBvZmZzZXRJbkJ5dGVzID0gMDsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBzd2l0Y2gg
KG1fc3RhdGUpIHsKKyAgICAgICAgY2FzZSBTdGF0ZTo6TW9kdWxlSGVhZGVyOiB7CisgICAgICAg
ICAgICBhdXRvIHJlc3VsdCA9IGNvbnN1bWUoYnl0ZXMsIGJ5dGVzU2l6ZSwgb2Zmc2V0SW5CeXRl
cywgbW9kdWxlSGVhZGVyU2l6ZSk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbV9zdGF0ZTsKKyAgICAgICAgICAgIG1fc3RhdGUgPSBwYXJzZU1vZHVs
ZUhlYWRlcihXVEZNb3ZlKCpyZXN1bHQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisKKyAgICAgICAgY2FzZSBTdGF0ZTo6U2VjdGlvbkhlYWRlcjogeworICAgICAgICAgICAgYXV0
byByZXN1bHQgPSBjb25zdW1lKGJ5dGVzLCBieXRlc1NpemUsIG9mZnNldEluQnl0ZXMsIHNlY3Rp
b25IZWFkZXJTaXplKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgICAg
IHJldHVybiBtX3N0YXRlOworICAgICAgICAgICAgbV9zdGF0ZSA9IHBhcnNlU2VjdGlvbkhlYWRl
cihXVEZNb3ZlKCpyZXN1bHQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgY2FzZSBTdGF0ZTo6U2VjdGlvblNpemU6IHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0
ID0gY29uc3VtZVZhclVJbnQzMihieXRlcywgYnl0ZXNTaXplLCBvZmZzZXRJbkJ5dGVzLCBpc0Vu
ZE9mU3RyZWFtKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgICAgICAgICAg
aWYgKHJlc3VsdC5lcnJvcigpID09IFN0YXRlOjpGYXRhbEVycm9yKQorICAgICAgICAgICAgICAg
ICAgICBtX3N0YXRlID0gZmFpbE9uU3RhdGUobV9zdGF0ZSk7CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gcmVzdWx0LmVycm9yKCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG1fc3RhdGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX3N0
YXRlID0gcGFyc2VTZWN0aW9uU2l6ZSgqcmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgY2FzZSBTdGF0ZTo6U2VjdGlvbkJvZHk6IHsKKyAgICAgICAgICAg
IGF1dG8gcmVzdWx0ID0gY29uc3VtZShieXRlcywgYnl0ZXNTaXplLCBvZmZzZXRJbkJ5dGVzLCBt
X3NlY3Rpb25MZW5ndGgpOworICAgICAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIG1fc3RhdGU7CisgICAgICAgICAgICBtX3N0YXRlID0gcGFyc2VTZWN0aW9uQm9k
eShXVEZNb3ZlKCpyZXN1bHQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgY2FzZSBTdGF0ZTo6Q29kZVNlY3Rpb25TaXplOiB7CisgICAgICAgICAgICBhdXRvIHJl
c3VsdCA9IGNvbnN1bWVWYXJVSW50MzIoYnl0ZXMsIGJ5dGVzU2l6ZSwgb2Zmc2V0SW5CeXRlcywg
aXNFbmRPZlN0cmVhbSk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICAgICAg
ICAgIGlmIChyZXN1bHQuZXJyb3IoKSA9PSBTdGF0ZTo6RmF0YWxFcnJvcikKKyAgICAgICAgICAg
ICAgICAgICAgbV9zdGF0ZSA9IGZhaWxPblN0YXRlKG1fc3RhdGUpOworICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IHJlc3VsdC5lcnJvcigpOworICAg
ICAgICAgICAgICAgIHJldHVybiBtX3N0YXRlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
bV9zdGF0ZSA9IHBhcnNlQ29kZVNlY3Rpb25TaXplKCpyZXN1bHQpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFN0YXRlOjpGdW5jdGlvbkhlYWRlcjogewor
ICAgICAgICAgICAgYXV0byByZXN1bHQgPSBjb25zdW1lVmFyVUludDMyKGJ5dGVzLCBieXRlc1Np
emUsIG9mZnNldEluQnl0ZXMsIGlzRW5kT2ZTdHJlYW0pOworICAgICAgICAgICAgaWYgKCFyZXN1
bHQpIHsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmVycm9yKCkgPT0gU3RhdGU6OkZhdGFs
RXJyb3IpCisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBmYWlsT25TdGF0ZShtX3N0YXRl
KTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBy
ZXN1bHQuZXJyb3IoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9zdGF0ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG1fc3RhdGUgPSBwYXJzZUZ1bmN0aW9uSGVhZGVyKCpyZXN1bHQp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFN0YXRlOjpG
dW5jdGlvbkJvZHk6IHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gY29uc3VtZShieXRlcywg
Ynl0ZXNTaXplLCBvZmZzZXRJbkJ5dGVzLCBtX2Z1bmN0aW9uU2l6ZSk7CisgICAgICAgICAgICBp
ZiAoIXJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9zdGF0ZTsKKyAgICAgICAgICAg
IG1fc3RhdGUgPSBwYXJzZUZ1bmN0aW9uQm9keShXVEZNb3ZlKCpyZXN1bHQpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBTdGF0ZTo6RmluaXNoZWQ6Cisg
ICAgICAgIGNhc2UgU3RhdGU6OkZhdGFsRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gbV9zdGF0
ZTsKKyAgICAgICAgfQorCisgICAgICAgIG1fb2Zmc2V0ID0gbV9uZXh0T2Zmc2V0OworICAgIH0K
K30KKworYXV0byBTdHJlYW1pbmdQYXJzZXI6OmZhaWxPblN0YXRlKFN0YXRlKSAtPiBTdGF0ZQor
eworICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2UgU3RhdGU6Ok1vZHVsZUhlYWRlcjoK
KyAgICAgICAgcmV0dXJuIGZhaWwoImV4cGVjdGVkIGEgbW9kdWxlIG9mIGF0IGxlYXN0ICIsIG1v
ZHVsZUhlYWRlclNpemUsICIgYnl0ZXMiKTsKKyAgICBjYXNlIFN0YXRlOjpTZWN0aW9uSGVhZGVy
OgorICAgICAgICByZXR1cm4gZmFpbCgiY2FuJ3QgZ2V0IHNlY3Rpb24gYnl0ZSIpOworICAgIGNh
c2UgU3RhdGU6OlNlY3Rpb25TaXplOgorICAgICAgICByZXR1cm4gZmFpbCgiY2FuJ3QgZ2V0ICIs
IG1fc2VjdGlvbiwgIiBzZWN0aW9uJ3MgbGVuZ3RoIik7CisgICAgY2FzZSBTdGF0ZTo6U2VjdGlv
bkJvZHk6CisgICAgICAgIHJldHVybiBmYWlsKG1fc2VjdGlvbiwgIiBzZWN0aW9uIG9mIHNpemUg
IiwgbV9zZWN0aW9uTGVuZ3RoLCAiIHdvdWxkIG92ZXJmbG93IE1vZHVsZSdzIHNpemUiKTsKKyAg
ICBjYXNlIFN0YXRlOjpDb2RlU2VjdGlvblNpemU6CisgICAgICAgIHJldHVybiBmYWlsKCJjYW4n
dCBnZXQgQ29kZSBzZWN0aW9uJ3MgY291bnQiKTsKKyAgICBjYXNlIFN0YXRlOjpGdW5jdGlvbkhl
YWRlcjoKKyAgICAgICAgcmV0dXJuIGZhaWwoImNhbid0IGdldCAiLCBtX2Z1bmN0aW9uSW5kZXgs
ICJ0aCBDb2RlIGZ1bmN0aW9uJ3Mgc2l6ZSIpOworICAgIGNhc2UgU3RhdGU6OkZ1bmN0aW9uQm9k
eToKKyAgICAgICAgcmV0dXJuIGZhaWwoIkNvZGUgZnVuY3Rpb24ncyBzaXplICIsIG1fZnVuY3Rp
b25TaXplLCAiIGV4Y2VlZHMgdGhlIG1vZHVsZSdzIHJlbWFpbmluZyBzaXplIik7CisgICAgY2Fz
ZSBTdGF0ZTo6RmluaXNoZWQ6CisgICAgY2FzZSBTdGF0ZTo6RmF0YWxFcnJvcjoKKyAgICAgICAg
cmV0dXJuIG1fc3RhdGU7CisgICAgfQorICAgIHJldHVybiBtX3N0YXRlOworfQorCithdXRvIFN0
cmVhbWluZ1BhcnNlcjo6ZmluYWxpemUoKSAtPiBTdGF0ZQoreworICAgIGFkZEJ5dGVzKG51bGxw
dHIsIDAsIElzRW5kT2ZTdHJlYW06Olllcyk7CisgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAg
Y2FzZSBTdGF0ZTo6TW9kdWxlSGVhZGVyOgorICAgIGNhc2UgU3RhdGU6OlNlY3Rpb25TaXplOgor
ICAgIGNhc2UgU3RhdGU6OlNlY3Rpb25Cb2R5OgorICAgIGNhc2UgU3RhdGU6OkNvZGVTZWN0aW9u
U2l6ZToKKyAgICBjYXNlIFN0YXRlOjpGdW5jdGlvbkhlYWRlcjoKKyAgICBjYXNlIFN0YXRlOjpG
dW5jdGlvbkJvZHk6CisgICAgICAgIG1fc3RhdGUgPSBmYWlsT25TdGF0ZShtX3N0YXRlKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFN0YXRlOjpGaW5pc2hlZDoKKyAgICBjYXNlIFN0YXRl
OjpGYXRhbEVycm9yOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgU3RhdGU6OlNlY3Rpb25I
ZWFkZXI6CisgICAgICAgIGlmIChtX3JlbWFpbmluZy5zaXplKCkgPT0gMCkgeworICAgICAgICAg
ICAgaWYgKE9wdGlvbnM6OnVzZUVhZ2VyV2ViQXNzZW1ibHlNb2R1bGVIYXNoaW5nKCkpCisgICAg
ICAgICAgICAgICAgbV9pbmZvLT5uYW1lU2VjdGlvbi0+c2V0SGFzaChtX2hhc2hlci5jb21wdXRl
SGV4RGlnZXN0KCkpOworICAgICAgICAgICAgbV9zdGF0ZSA9IFN0YXRlOjpGaW5pc2hlZDsKKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX3N0YXRlID0gZmFpbE9uU3RhdGUoU3RhdGU6OlNl
Y3Rpb25IZWFkZXIpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIG1fc3RhdGU7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VC
QVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU3Ry
ZWFtaW5nUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU3RyZWFtaW5n
UGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMzVlNjgwOWYyMDRlMTljYmIxNzg1ZTFhYzNhODgzMzQ0Yzk5
ZGNhZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21T
dHJlYW1pbmdQYXJzZXIuaApAQCAtMCwwICsxLDExNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOCBZdXN1a2UgU3V6dWtpIDx5dXN1a2VzdXp1a2lAc2xvd3N0YXJ0Lm9yZz4uCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgi
CisjaW5jbHVkZSAiV2FzbVBhcnNlci5oIgorI2luY2x1ZGUgIldhc21TZWN0aW9ucy5oIgorI2lu
Y2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1
ZGUgPHd0Zi9TSEExLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCitj
bGFzcyBTdHJlYW1pbmdQYXJzZXJDbGllbnQgeworfTsKKworY2xhc3MgU3RyZWFtaW5nUGFyc2Vy
IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNz
IFN0YXRlIDogdWludDhfdCB7CisgICAgICAgIE1vZHVsZUhlYWRlciwKKyAgICAgICAgU2VjdGlv
bkhlYWRlciwKKyAgICAgICAgU2VjdGlvblNpemUsCisgICAgICAgIFNlY3Rpb25Cb2R5LAorICAg
ICAgICBDb2RlU2VjdGlvblNpemUsCisgICAgICAgIEZ1bmN0aW9uSGVhZGVyLAorICAgICAgICBG
dW5jdGlvbkJvZHksCisgICAgICAgIEZpbmlzaGVkLAorICAgICAgICBGYXRhbEVycm9yLAorICAg
IH07CisKKyAgICBlbnVtIGNsYXNzIElzRW5kT2ZTdHJlYW0geyBZZXMsIE5vIH07CisKKyAgICBT
dHJlYW1pbmdQYXJzZXIoTW9kdWxlSW5mb3JtYXRpb24mKTsKKworICAgIFN0YXRlIGFkZEJ5dGVz
KGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoKSB7IHJldHVybiBhZGRCeXRlcyhi
eXRlcywgbGVuZ3RoLCBJc0VuZE9mU3RyZWFtOjpObyk7IH0KKyAgICBTdGF0ZSBmaW5hbGl6ZSgp
OworCisgICAgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UoKSBjb25zdCB7IHJldHVybiBtX2Vy
cm9yTWVzc2FnZTsgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
bW9kdWxlSGVhZGVyU2l6ZSA9IDg7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBzZWN0
aW9uSGVhZGVyU2l6ZSA9IDE7CisKKyAgICBTdGF0ZSBhZGRCeXRlcyhjb25zdCB1aW50OF90KiBi
eXRlcywgc2l6ZV90IGxlbmd0aCwgSXNFbmRPZlN0cmVhbSk7CisKKyAgICBTdGF0ZSBwYXJzZU1v
ZHVsZUhlYWRlcihWZWN0b3I8dWludDhfdD4mJik7CisgICAgU3RhdGUgcGFyc2VTZWN0aW9uSGVh
ZGVyKFZlY3Rvcjx1aW50OF90PiYmKTsKKyAgICBTdGF0ZSBwYXJzZVNlY3Rpb25TaXplKHVpbnQz
Ml90KTsKKyAgICBTdGF0ZSBwYXJzZVNlY3Rpb25Cb2R5KFZlY3Rvcjx1aW50OF90PiYmKTsKKwor
ICAgIFN0YXRlIHBhcnNlQ29kZVNlY3Rpb25TaXplKHVpbnQzMl90KTsKKyAgICBTdGF0ZSBwYXJz
ZUZ1bmN0aW9uSGVhZGVyKHVpbnQzMl90KTsKKyAgICBTdGF0ZSBwYXJzZUZ1bmN0aW9uQm9keShW
ZWN0b3I8dWludDhfdD4mJik7CisKKyAgICBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4g
Y29uc3VtZShjb25zdCB1aW50OF90KiBieXRlcywgc2l6ZV90LCBzaXplX3QmLCBzaXplX3QpOwor
ICAgIEV4cGVjdGVkPHVpbnQzMl90LCBTdGF0ZT4gY29uc3VtZVZhclVJbnQzMihjb25zdCB1aW50
OF90KiBieXRlcywgc2l6ZV90LCBzaXplX3QmLCBJc0VuZE9mU3RyZWFtKTsKKworICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSAuLi5BcmdzPiBORVZFUl9JTkxJTkUgU3RhdGUgV0FSTl9VTlVTRURfUkVU
VVJOIGZhaWwoQXJncy4uLik7CisKKyAgICBTdGF0ZSBmYWlsT25TdGF0ZShTdGF0ZSk7CisKKyAg
ICBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IG1faW5mbzsKKyAgICBWZWN0b3I8dWludDhfdD4gbV9y
ZW1haW5pbmc7CisgICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlOworCisgICAgQ2hlY2tlZFNpemUg
bV90b3RhbFNpemUgeyAwIH07CisgICAgc2l6ZV90IG1fb2Zmc2V0IHsgMCB9OworICAgIHNpemVf
dCBtX25leHRPZmZzZXQgeyAwIH07CisgICAgc2l6ZV90IG1fY29kZU9mZnNldCB7IDAgfTsKKwor
ICAgIFNIQTEgbV9oYXNoZXI7CisKKyAgICB1aW50MzJfdCBtX3NlY3Rpb25MZW5ndGggeyAwIH07
CisKKyAgICB1aW50MzJfdCBtX2Z1bmN0aW9uQ291bnQgeyAwIH07CisgICAgdWludDMyX3QgbV9m
dW5jdGlvbkluZGV4IHsgMCB9OworCisgICAgdWludDMyX3QgbV9mdW5jdGlvblNpemUgeyAwIH07
CisKKyAgICBTdGF0ZSBtX3N0YXRlIHsgU3RhdGU6Ok1vZHVsZUhlYWRlciB9OworICAgIFNlY3Rp
b24gbV9zZWN0aW9uIHsgU2VjdGlvbjo6QmVnaW4gfTsKKyAgICBTZWN0aW9uIG1fcHJldmlvdXNL
bm93blNlY3Rpb24geyBTZWN0aW9uOjpCZWdpbiB9OworfTsKKworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAppbmRl
eCAyM2ZlZjIyZTU4YmVlMWVmY2MwMjliYjc2OGUwNTIyNmE5MjAzNmJlLi5hZWJjZTBjNDEwODM5
MWQ2MWYxYTkyY2RmMjU5MDZkNGUxYmE4MjRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcApAQCAtMTQwLDExICsxNDAs
NiBAQCB2b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVj
dC0+bV9jb2RlQmxvY2tzW2ldKTsKIH0KIAotY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBKU1dlYkFz
c2VtYmx5TW9kdWxlOjpzb3VyY2UoKSBjb25zdAotewotICAgIHJldHVybiBtb2R1bGVJbmZvcm1h
dGlvbigpLnNvdXJjZTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFC
TEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5TW9kdWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5TW9kdWxlLmgKaW5kZXggMTdiZWQ2MTI1ZjRlN2YzMTlhOGI3YWYyZTFkZGY4
NjRhZWIyZmE1YS4uZDM5MzAwNjkxOWQyN2FkMTc0NjlmZTI2OTVkYjg0Mzg0MjNkMDgyZSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVs
ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1
bGUuaApAQCAtNjgsOCArNjgsNiBAQCBjbGFzcyBKU1dlYkFzc2VtYmx5TW9kdWxlIGZpbmFsIDog
cHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKICAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
KiBjb2RlQmxvY2soV2FzbTo6TWVtb3J5TW9kZSBtb2RlKTsKICAgICB2b2lkIHNldENvZGVCbG9j
ayhWTSYsIFdhc206Ok1lbW9yeU1vZGUsIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqKTsKIAotICAg
IGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgc291cmNlKCkgY29uc3Q7Ci0KICAgICBKU19FWFBPUlRf
UFJJVkFURSBXYXNtOjpNb2R1bGUmIG1vZHVsZSgpOwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlQcm90b3R5cGUuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlQcm90b3R5cGUuY3BwCmlu
ZGV4IDk2ZDRjMTRkNzRjN2VlMWFmOGFlZTc2MTBjNDk0YWE3Yzk0YjA2YzUuLmRjYWRjMGQwZGJj
ZTVhOWQyNTUzYTRkYmRjOGNlNGI0ZmNjNWQ0NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5UHJvdG90eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVByb3RvdHlwZS5jcHAKQEAgLTI5NCwxMCAr
Mjk0LDEwIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5
VmFsaWRhdGVGdW5jKEV4ZWNTdGF0ZSogZXhlYykKICAgICBzaXplX3QgYnl0ZVNpemU7CiAgICAg
c3RkOjp0aWUoYmFzZSwgYnl0ZVNpemUpID0gZ2V0V2FzbUJ1ZmZlckZyb21WYWx1ZShleGVjLCBl
eGVjLT5hcmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7Ci0gICAgQkJRUGxhbiBwbGFuKCZ2bS53YXNtQ29udGV4dCwgYmFzZSwgYnl0
ZVNpemUsIEJCUVBsYW46OlZhbGlkYXRpb24sIFBsYW46OmRvbnRGaW5hbGl6ZSgpKTsKKyAgICBC
QlFQbGFuIHBsYW4oJnZtLndhc21Db250ZXh0LCBCQlFQbGFuOjpWYWxpZGF0aW9uLCBQbGFuOjpk
b250RmluYWxpemUoKSk7CiAgICAgLy8gRklYTUU6IFdlIG1pZ2h0IHdhbnQgdG8gdGhyb3cgYW4g
T09NIGV4Y2VwdGlvbiBoZXJlIGlmIHdlIGRldGVjdCB0aGF0IHNvbWV0aGluZyB3aWxsIE9PTS4K
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2MDE1Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ocGxhbi5wYXJzZUFuZFZhbGlkYXRl
TW9kdWxlKCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihwbGFuLnBh
cnNlQW5kVmFsaWRhdGVNb2R1bGUoYmFzZSwgYnl0ZVNpemUpKSk7CiB9CiAKIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlDb21waWxlU3RyZWFtaW5nSW50ZXJuYWwoRXhl
Y1N0YXRlKiBleGVjKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvTEVCRGVjb2Rlci5oIGIv
U291cmNlL1dURi93dGYvTEVCRGVjb2Rlci5oCmluZGV4IDk0NjI3NzBjNjk5Y2QwNWVhNjU3M2Uz
ZWQ5YzFjOTc1YThiNTE1MDcuLjk5YTVjMDlhZDRhNTQxOGM4MGQwMTM3YjEwZTAwZDBiNDI2YzA4
ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0xFQkRlY29kZXIuaAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9MRUJEZWNvZGVyLmgKQEAgLTM2LDE1ICszNiwyMCBAQAogbmFtZXNwYWNlIFdURiB7
IG5hbWVzcGFjZSBMRUJEZWNvZGVyIHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBi
b29sIFdBUk5fVU5VU0VEX1JFVFVSTiBkZWNvZGVVSW50KGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBz
aXplX3QgbGVuZ3RoLCBzaXplX3QmIG9mZnNldCwgVCYgcmVzdWx0KQoraW5saW5lIGNvbnN0ZXhw
ciBzaXplX3QgbWF4Qnl0ZUxlbmd0aCgpCiB7CiAgICAgY29uc3Qgc2l6ZV90IG51bUJpdHMgPSBz
aXplb2YoVCkgKiBDSEFSX0JJVDsKLSAgICBjb25zdCBzaXplX3QgbWF4Qnl0ZUxlbmd0aCA9IChu
dW1CaXRzIC0gMSkgLyA3ICsgMTsgLy8gbnVtQml0cyAvIDcgcm91bmRpbmcgdXAuCisgICAgcmV0
dXJuIChudW1CaXRzIC0gMSkgLyA3ICsgMTsgLy8gbnVtQml0cyAvIDcgcm91bmRpbmcgdXAuCit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4g
ZGVjb2RlVUludChjb25zdCB1aW50OF90KiBieXRlcywgc2l6ZV90IGxlbmd0aCwgc2l6ZV90JiBv
ZmZzZXQsIFQmIHJlc3VsdCkKK3sKICAgICBpZiAobGVuZ3RoIDw9IG9mZnNldCkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIHJlc3VsdCA9IDA7CiAgICAgdW5zaWduZWQgc2hpZnQgPSAwOwot
ICAgIHNpemVfdCBsYXN0ID0gc3RkOjptaW4obWF4Qnl0ZUxlbmd0aCwgbGVuZ3RoIC0gb2Zmc2V0
KSAtIDE7CisgICAgc2l6ZV90IGxhc3QgPSBzdGQ6Om1pbihtYXhCeXRlTGVuZ3RoPFQ+KCksIGxl
bmd0aCAtIG9mZnNldCkgLSAxOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IHRydWU7ICsraSkg
ewogICAgICAgICB1aW50OF90IGJ5dGUgPSBieXRlc1tvZmZzZXQrK107CiAgICAgICAgIHJlc3Vs
dCB8PSBzdGF0aWNfY2FzdDxUPihieXRlICYgMHg3ZikgPDwgc2hpZnQ7CkBAIC02MSwxMyArNjYs
MTEgQEAgaW5saW5lIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGRlY29kZVVJbnQoY29uc3QgdWlu
dDhfdCogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIHMKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBpbmxp
bmUgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gZGVjb2RlSW50KGNvbnN0IHVpbnQ4X3QqIGJ5dGVz
LCBzaXplX3QgbGVuZ3RoLCBzaXplX3QmIG9mZnNldCwgVCYgcmVzdWx0KQogewotICAgIGNvbnN0
IHNpemVfdCBudW1CaXRzID0gc2l6ZW9mKFQpICogQ0hBUl9CSVQ7Ci0gICAgY29uc3Qgc2l6ZV90
IG1heEJ5dGVMZW5ndGggPSAobnVtQml0cyAtIDEpIC8gNyArIDE7IC8vIG51bUJpdHMgLyA3IHJv
dW5kaW5nIHVwLgogICAgIGlmIChsZW5ndGggPD0gb2Zmc2V0KQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgcmVzdWx0ID0gMDsKICAgICB1bnNpZ25lZCBzaGlmdCA9IDA7Ci0gICAgc2l6ZV90
IGxhc3QgPSBzdGQ6Om1pbihtYXhCeXRlTGVuZ3RoLCBsZW5ndGggLSBvZmZzZXQpIC0gMTsKKyAg
ICBzaXplX3QgbGFzdCA9IHN0ZDo6bWluKG1heEJ5dGVMZW5ndGg8VD4oKSwgbGVuZ3RoIC0gb2Zm
c2V0KSAtIDE7CiAgICAgdWludDhfdCBieXRlOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IHRy
dWU7ICsraSkgewogICAgICAgICBieXRlID0gYnl0ZXNbb2Zmc2V0KytdOwpAQCAtODAsNiArODMs
NyBAQCBpbmxpbmUgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gZGVjb2RlSW50KGNvbnN0IHVpbnQ4
X3QqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBzaQogICAgIH0KIAogICAgIHVzaW5nIFVuc2lnbmVk
VCA9IHR5cGVuYW1lIHN0ZDo6bWFrZV91bnNpZ25lZDxUPjo6dHlwZTsKKyAgICBjb25zdCBzaXpl
X3QgbnVtQml0cyA9IHNpemVvZihUKSAqIENIQVJfQklUOwogICAgIGlmIChzaGlmdCA8IG51bUJp
dHMgJiYgKGJ5dGUgJiAweDQwKSkKICAgICAgICAgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8VD4oc3Rh
dGljX2Nhc3Q8VW5zaWduZWRUPihyZXN1bHQpIHwgKHN0YXRpY19jYXN0PFVuc2lnbmVkVD4oLTEp
IDw8IHNoaWZ0KSk7CiAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5n
ZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDQ3MTAwZGI3MDcwNGYwZDQ2NjQ2OGY4NGE2
NzMxZjY0MjlhYmEzNGUuLjk0MjAzODE4YjQwNjRmMTM1ZmQ2NDVkMjk0OTZiMjRlNjdiZGFjMjUg
MTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNDIgQEAKKzIwMTgtMDgtMjcgIFl1c3VrZSBTdXp1a2kgIDx5dXN1a2VzdXp1a2lA
c2xvd3N0YXJ0Lm9yZz4KKworICAgICAgICBbV2ViQXNzZW1ibHldIFBhcnNlIHdhc20gbW9kdWxl
cyBpbiBhIHN0cmVhbWluZyBmYXNoaW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xODg5NDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBXYXNtIHBhcnNpbmcgZXJyb3Igc2hvdWxkIG5vdCByZXBvcnQgdGhl
IHRvdGFsIGJ5dGUgc2l6ZSBzaW5jZSBzdHJlYW1pbmcgcGFyc2luZyBkb2VzIG5vdAorICAgICAg
ICB3YW50IHRvIGxvYWQgYWxsIHRoZSBieXRlcy4KKyAgICAgICAgQWRkIGEgc2ltcGxlIHRlc3Qg
d2FzbS9zdHJlc3Mvc3RyZWFtaW5nLWJhc2ljLmpzIGZvciBpbml0aWFsIHN0cmVhbWluZyBwYXJz
aW5nIGltcGxlbWVudGF0aW9uLgorCisgICAgICAgICogd2FzbS9mdW5jdGlvbi10ZXN0cy9pbnZh
bGlkLWR1cGxpY2F0ZS1leHBvcnQuanM6CisgICAgICAgICogd2FzbS9mdW5jdGlvbi10ZXN0cy9t
ZW1vcnktYWxpZ25tZW50LmpzOgorICAgICAgICAoY29uc3Qub3Aub2YuV0FTTS5vcGNvZGVzKToK
KyAgICAgICAgKiB3YXNtL2Z1bmN0aW9uLXRlc3RzL21lbW9yeS1zZWN0aW9uLWFuZC1pbXBvcnQu
anM6CisgICAgICAgICogd2FzbS9mdW5jdGlvbi10ZXN0cy92b2lkLWFyZ3VtZW50LXR5cGUtc2hv
dWxkLWJlLWEtdmFsaWRhdGlvbi1lcnJvci5qczoKKyAgICAgICAgKiB3YXNtL2pzLWFwaS9Nb2R1
bGUtY29tcGlsZS5qczoKKyAgICAgICAgKGFzeW5jLnRlc3RQcm9taXNlQVBJKToKKyAgICAgICAg
KiB3YXNtL2pzLWFwaS9lbGVtZW50LmpzOgorICAgICAgICAoYXNzZXJ0LnRocm93cy5uZXcuV2Vi
QXNzZW1ibHkuTW9kdWxlLmJ1aWxkZXIuV2ViQXNzZW1ibHkpOgorICAgICAgICAoYXNzZXJ0LnRo
cm93cyk6CisgICAgICAgICogd2FzbS9qcy1hcGkvZ2xvYmFsLWVycm9yLmpzOgorICAgICAgICAo
YXNzZXJ0LnRocm93cy5uZXcuV2ViQXNzZW1ibHkuTW9kdWxlLmJpbik6CisgICAgICAgIChhc3Nl
cnQudGhyb3dzKToKKyAgICAgICAgKiB3YXNtL2pzLWFwaS90YWJsZS5qczoKKyAgICAgICAgKG5l
dy5XZWJBc3NlbWJseS5Nb2R1bGUpOgorICAgICAgICAoYXNzZXJ0LnRocm93cyk6CisgICAgICAg
IChhc3NlcnRCYWRUYWJsZUltcG9ydCk6CisgICAgICAgICogd2FzbS9qcy1hcGkvdGVzdF9EYXRh
LmpzOgorICAgICAgICAoRGF0YVNlY3Rpb25XaXRob3V0TWVtb3J5KToKKyAgICAgICAgKiB3YXNt
L2pzLWFwaS90ZXN0X1N0YXJ0LmpzOgorICAgICAgICAoSW52YWxpZFN0YXJ0RnVuY3Rpb25JbmRl
eCk6CisgICAgICAgICogd2FzbS9qcy1hcGkvdGVzdF9iYXNpY19hcGkuanM6CisgICAgICAgIChj
b25zdC5jLmluLmNvbnN0cnVjdG9yUHJvcGVydGllcy5zd2l0Y2gpOgorICAgICAgICAqIHdhc20v
anMtYXBpL3ZlcnNpb24uanM6CisgICAgICAgICogd2FzbS9zdHJlc3MvbmFtZVNlY3Rpb24ud2Fz
bTogQWRkZWQuCisgICAgICAgICogd2FzbS9zdHJlc3Mvc3RyZWFtaW5nLWJhc2ljLmpzOiBBZGRl
ZC4KKyAgICAgICAgKGNoZWNrKToKKwogMjAxOC0wOC0yNCAgWXVzdWtlIFN1enVraSAgPHl1c3Vr
ZXN1enVraUBzbG93c3RhcnQub3JnPgogCiAgICAgICAgIFtKU0NdIEFycmF5LnByb3RvdHlwZS5y
ZXZlcnNlIG1vZGlmaWVzIEpTSW1tdXRhYmxlQnV0dGVyZmx5CmRpZmYgLS1naXQgYS9KU1Rlc3Rz
L3dhc20vZnVuY3Rpb24tdGVzdHMvaW52YWxpZC1kdXBsaWNhdGUtZXhwb3J0LmpzIGIvSlNUZXN0
cy93YXNtL2Z1bmN0aW9uLXRlc3RzL2ludmFsaWQtZHVwbGljYXRlLWV4cG9ydC5qcwppbmRleCBj
NDdiMWUxNjYyYzJjYjYwYzkzZDZjOWI5NTczOWJkYWJhNzgwZTczLi40MThkNTFhYTQ5OTAxOWFh
MjQ2OWJhYTVmMWZkOGUxYWJkM2JmMjkxIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vZnVuY3Rp
b24tdGVzdHMvaW52YWxpZC1kdXBsaWNhdGUtZXhwb3J0LmpzCisrKyBiL0pTVGVzdHMvd2FzbS9m
dW5jdGlvbi10ZXN0cy9pbnZhbGlkLWR1cGxpY2F0ZS1leHBvcnQuanMKQEAgLTE1LDUgKzE1LDUg
QEAKICAgICAgICAgLkVuZCgpOwogCiAgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJs
eSgpLmdldCgpOwotICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVs
ZShiaW4pLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9l
c24ndCBwYXJzZSBhdCBieXRlIDMxIC8gMzk6IGR1cGxpY2F0ZSBleHBvcnQ6ICdmb28nIik7Cisg
ICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbiksIFdlYkFz
c2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0
IGJ5dGUgMzE6IGR1cGxpY2F0ZSBleHBvcnQ6ICdmb28nIik7CiB9CmRpZmYgLS1naXQgYS9KU1Rl
c3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LWFsaWdubWVudC5qcyBiL0pTVGVzdHMvd2Fz
bS9mdW5jdGlvbi10ZXN0cy9tZW1vcnktYWxpZ25tZW50LmpzCmluZGV4IGFiYzU3NDEyMTQ2ZjJl
Mzk3MjYxZTczMjZlY2M4YTVjODE5YTA0OWMuLmU2MDU4OTg5MDBhYTFiZWQ2N2I5ZDMyYWM2ZjJh
YTAxMmViMjk5ZWUgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9tZW1v
cnktYWxpZ25tZW50LmpzCisrKyBiL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9tZW1vcnkt
YWxpZ25tZW50LmpzCkBAIC00Miw3ICs0Miw3IEBACiAgICAgICAgIGlmIChhbGlnbkxvZzIgPD0g
bWF4QWxpZ25Mb2cyKQogICAgICAgICAgICAgaW5zdGFuY2UoKTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgYXNzZXJ0LnRocm93cyhpbnN0YW5jZSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9y
LCBgV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAke3N0YXJ0fSAvICR7
ZW5kfTogYnl0ZSBhbGlnbm1lbnQgJHsxIDw8IGFsaWduTG9nMn0gZXhjZWVkcyAke2luZm8udHlw
ZX0ncyBuYXR1cmFsIGFsaWdubWVudCAkezEgPDwgbWF4QWxpZ25Mb2cyfSwgaW4gZnVuY3Rpb24g
YXQgaW5kZXggMGApOworICAgICAgICAgICAgYXNzZXJ0LnRocm93cyhpbnN0YW5jZSwgV2ViQXNz
ZW1ibHkuQ29tcGlsZUVycm9yLCBgV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQg
Ynl0ZSAke3N0YXJ0fTogYnl0ZSBhbGlnbm1lbnQgJHsxIDw8IGFsaWduTG9nMn0gZXhjZWVkcyAk
e2luZm8udHlwZX0ncyBuYXR1cmFsIGFsaWdubWVudCAkezEgPDwgbWF4QWxpZ25Mb2cyfSwgaW4g
ZnVuY3Rpb24gYXQgaW5kZXggMGApOwogCiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93
YXNtL2Z1bmN0aW9uLXRlc3RzL21lbW9yeS1zZWN0aW9uLWFuZC1pbXBvcnQuanMgYi9KU1Rlc3Rz
L3dhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LXNlY3Rpb24tYW5kLWltcG9ydC5qcwppbmRleCBh
MWRiOWNlMjU3NzkzNTBiNWJkNTU3N2Y3NjdlNjY3Nzc0YmQ4YjBiLi4xNTIwN2VmNzE4OGVmYTBm
NjkyMzU3M2MxZGZlYTVhM2VhNWI3MWZmIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vZnVuY3Rp
b24tdGVzdHMvbWVtb3J5LXNlY3Rpb24tYW5kLWltcG9ydC5qcworKysgYi9KU1Rlc3RzL3dhc20v
ZnVuY3Rpb24tdGVzdHMvbWVtb3J5LXNlY3Rpb24tYW5kLWltcG9ydC5qcwpAQCAtMjgsNCArMjgs
NCBAQAogICAgICAgLkNvZGUoKS5FbmQoKTsKIAogY29uc3QgaTAgPSBpbnN0YW50aWF0ZShidWls
ZGVyMCk7Ci1hc3NlcnQudGhyb3dzKCgpID0+IGluc3RhbnRpYXRlKGJ1aWxkZXIxLCB7IGltcDog
eyBtZW1vcnk6IGkwLmV4cG9ydHMubWVtb3J5IH0gfSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJv
ciwgYFdlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzUgLyA0MTogdGhl
cmUgY2FuIGF0IG1vc3QgYmUgb25lIE1lbW9yeSBzZWN0aW9uIGZvciBub3dgKTsKK2Fzc2VydC50
aHJvd3MoKCkgPT4gaW5zdGFudGlhdGUoYnVpbGRlcjEsIHsgaW1wOiB7IG1lbW9yeTogaTAuZXhw
b3J0cy5tZW1vcnkgfSB9KSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCBgV2ViQXNzZW1ibHku
TW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzNTogdGhlcmUgY2FuIGF0IG1vc3QgYmUgb25l
IE1lbW9yeSBzZWN0aW9uIGZvciBub3dgKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9mdW5j
dGlvbi10ZXN0cy92b2lkLWFyZ3VtZW50LXR5cGUtc2hvdWxkLWJlLWEtdmFsaWRhdGlvbi1lcnJv
ci5qcyBiL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy92b2lkLWFyZ3VtZW50LXR5cGUtc2hv
dWxkLWJlLWEtdmFsaWRhdGlvbi1lcnJvci5qcwppbmRleCA0NzE0OWIxZDdmYjkzMjMxYzI1ZDA3
OGE4NjI5OGI3NTAyYmZmNjhhLi4yMTc4ODEwYTc4MTdkOTczMzVlNjJmNzhiM2ZjNTE3ZTNmZTc3
ZTQxIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvdm9pZC1hcmd1bWVu
dC10eXBlLXNob3VsZC1iZS1hLXZhbGlkYXRpb24tZXJyb3IuanMKKysrIGIvSlNUZXN0cy93YXNt
L2Z1bmN0aW9uLXRlc3RzL3ZvaWQtYXJndW1lbnQtdHlwZS1zaG91bGQtYmUtYS12YWxpZGF0aW9u
LWVycm9yLmpzCkBAIC0xNyw2ICsxNyw2IEBAIGZ1bmN0aW9uIGdldEJpbmFyeShwYXJhbXMpIHsK
ICAgICByZXR1cm4gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOwogfQogCi1hc3NlcnQudGhy
b3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoZ2V0QmluYXJ5KFsiaTMyIiwgInZvaWQi
XSkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24n
dCBwYXJzZSBhdCBieXRlIDE1IC8gNDc6IGNhbid0IGdldCAxdGggYXJndW1lbnQgVHlwZSIpOwot
YXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGdldEJpbmFyeShbInZv
aWQiXSkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9l
c24ndCBwYXJzZSBhdCBieXRlIDE0IC8gNDY6IGNhbid0IGdldCAwdGggYXJndW1lbnQgVHlwZSIp
OwotYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGdldEJpbmFyeShb
ImkzMiIsICJ2b2lkIiwgImkzMiJdKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFz
c2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTUgLyA0ODogY2FuJ3QgZ2V0IDF0
aCBhcmd1bWVudCBUeXBlIik7Cithc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5N
b2R1bGUoZ2V0QmluYXJ5KFsiaTMyIiwgInZvaWQiXSkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJy
b3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE1OiBjYW4ndCBn
ZXQgMXRoIGFyZ3VtZW50IFR5cGUiKTsKK2Fzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2Vt
Ymx5Lk1vZHVsZShnZXRCaW5hcnkoWyJ2b2lkIl0pKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9y
LCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxNDogY2FuJ3QgZ2V0
IDB0aCBhcmd1bWVudCBUeXBlIik7Cithc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJs
eS5Nb2R1bGUoZ2V0QmluYXJ5KFsiaTMyIiwgInZvaWQiLCAiaTMyIl0pKSwgV2ViQXNzZW1ibHku
Q29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAx
NTogY2FuJ3QgZ2V0IDF0aCBhcmd1bWVudCBUeXBlIik7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dh
c20vanMtYXBpL01vZHVsZS1jb21waWxlLmpzIGIvSlNUZXN0cy93YXNtL2pzLWFwaS9Nb2R1bGUt
Y29tcGlsZS5qcwppbmRleCBkM2JlYjMzMjU3N2FlZGIwNThjOGU0MWQyM2FkZGE5YzkxZjFkZjc4
Li5kNzIzYmY0ZDcwYjQ5YzQ5YTEzNjVmZGM2N2I0NTI0MmIzODI3MmU2IDEwMDY0NAotLS0gYS9K
U1Rlc3RzL3dhc20vanMtYXBpL01vZHVsZS1jb21waWxlLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9q
cy1hcGkvTW9kdWxlLWNvbXBpbGUuanMKQEAgLTIxLDcgKzIxLDcgQEAgYXN5bmMgZnVuY3Rpb24g
dGVzdFByb21pc2VBUEkoKSB7CiAgICAgICAgICAgICBhd2FpdCBXZWJBc3NlbWJseS5jb21waWxl
KGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSk7CiAgICAgICAgIH0gY2F0Y2goZSkgewogICAg
ICAgICAgICAgYXNzZXJ0LnRydXRoeShlIGluc3RhbmNlb2YgV2ViQXNzZW1ibHkuQ29tcGlsZUVy
cm9yKTsKLSAgICAgICAgICAgIGFzc2VydC50cnV0aHkoZS5tZXNzYWdlID09PSAiV2ViQXNzZW1i
bHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzNCAvIDQzOiB0aGVyZSBjYW4gYXQgbW9z
dCBiZSBvbmUgTWVtb3J5IHNlY3Rpb24gZm9yIG5vdyIpOworICAgICAgICAgICAgYXNzZXJ0LnRy
dXRoeShlLm1lc3NhZ2UgPT09ICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBi
eXRlIDM0OiB0aGVyZSBjYW4gYXQgbW9zdCBiZSBvbmUgTWVtb3J5IHNlY3Rpb24gZm9yIG5vdyIp
OwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vanMtYXBpL2Vs
ZW1lbnQuanMgYi9KU1Rlc3RzL3dhc20vanMtYXBpL2VsZW1lbnQuanMKaW5kZXggMTg4YWM3NDE1
MTEyNjA0OGI4MjcyNDhkYzQ3MzgyMDVhYTg2YTE0OS4uZmNiZTI4MjdmMzcxNjYzYWE4NGZkZjVj
MTAxMDBiODE3ODE3NzM5MCAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2pzLWFwaS9lbGVtZW50
LmpzCisrKyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvZWxlbWVudC5qcwpAQCAtMTgsNyArMTgsNyBA
QAogICAgICAgICAgICAgLkVuZCgpCiAgICAgICAgIC5FbmQoKTsKIAotICAgIGFzc2VydC50aHJv
d3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0
KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24n
dCBwYXJzZSBhdCBieXRlIDI0IC8gNDE6IEVsZW1lbnQgc2VjdGlvbiBmb3IgVGFibGUgMCBleGNl
ZWRzIGF2YWlsYWJsZSBUYWJsZSAwIik7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2Vi
QXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5
LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUg
MjQ6IEVsZW1lbnQgc2VjdGlvbiBmb3IgVGFibGUgMCBleGNlZWRzIGF2YWlsYWJsZSBUYWJsZSAw
Iik7CiB9CiAKIHsKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgICAgIC5FbmQoKQogICAgICAg
ICAuRW5kKCk7CiAKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1
bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9y
LCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzMCAvIDQ3OiBFbGVt
ZW50IHNlY3Rpb24gZm9yIFRhYmxlIDEgZXhjZWVkcyBhdmFpbGFibGUgVGFibGUgMSIpOworICAg
IGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFz
c2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5N
b2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDMwOiBFbGVtZW50IHNlY3Rpb24gZm9yIFRhYmxl
IDEgZXhjZWVkcyBhdmFpbGFibGUgVGFibGUgMSIpOwogfQogCiB7CkBAIC0xMTIsNyArMTEyLDcg
QEAKICAgICAgICAgICAgIC5FbmQoKQogICAgICAgICAuRW5kKCk7CiAKLSAgICBhc3NlcnQudGhy
b3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdl
dCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNu
J3QgcGFyc2UgYXQgYnl0ZSAzOCAvIDUwOiBFbGVtZW50IHNlY3Rpb24ncyAwdGggZWxlbWVudCdz
IDJ0aCBpbmRleCBpcyAxIHdoaWNoIGV4Y2VlZHMgdGhlIGZ1bmN0aW9uIGluZGV4IHNwYWNlIHNp
emUgb2YgMSAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFz
c2VtYmx5KCkuZ2V0KCkpJykiKTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3Nl
bWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29t
cGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzODog
RWxlbWVudCBzZWN0aW9uJ3MgMHRoIGVsZW1lbnQncyAydGggaW5kZXggaXMgMSB3aGljaCBleGNl
ZWRzIHRoZSBmdW5jdGlvbiBpbmRleCBzcGFjZSBzaXplIG9mIDEgKGV2YWx1YXRpbmcgJ25ldyBX
ZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIik7CiB9CiAK
IHsKQEAgLTIxNSw1ICsyMTUsNSBAQCBmdW5jdGlvbiBiYWRNb2R1bGUoKSB7CiAgICAgICAgIHJl
dHVybiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CiAgICAgfQogCi0gICAgYXNzZXJ0LnRo
cm93cygoKSA9PiBiYWRNb2R1bGUoKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNz
ZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSA1OCAvIDcyOiBFbGVtZW50IGluaXRf
ZXhwciBtdXN0IHByb2R1Y2UgYW4gaTMyIik7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBiYWRN
b2R1bGUoKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRv
ZXNuJ3QgcGFyc2UgYXQgYnl0ZSA1ODogRWxlbWVudCBpbml0X2V4cHIgbXVzdCBwcm9kdWNlIGFu
IGkzMiIpOwogfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS9nbG9iYWwtZXJyb3Iu
anMgYi9KU1Rlc3RzL3dhc20vanMtYXBpL2dsb2JhbC1lcnJvci5qcwppbmRleCAwOWY4ZDc5OWRj
NGUyZjM5ZDlhNTQzMDJjYWFiZGU3YTc2ZDUxMDdiLi5kM2VkZjg5OGU3ZDlmYTA3ZTQ3MGNmYzMy
YzZhYjM2ZjE3MzFiNTEzIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vanMtYXBpL2dsb2JhbC1l
cnJvci5qcworKysgYi9KU1Rlc3RzL3dhc20vanMtYXBpL2dsb2JhbC1lcnJvci5qcwpAQCAtMjMs
NyArMjMsNyBAQAogICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKTsKICAgICBi
aW4udHJpbSgpOwogCi0gICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9k
dWxlKGJpbi5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1v
ZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjYgLyA1OTogZ2V0X2dsb2JhbCdzIGluZGV4IDAg
ZXhjZWVkcyB0aGUgbnVtYmVyIG9mIGdsb2JhbHMgMCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2Vt
Ymx5Lk1vZHVsZShiaW4uZ2V0KCkpJykiKTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBX
ZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAi
V2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNjogZ2V0X2dsb2JhbCdz
IGluZGV4IDAgZXhjZWVkcyB0aGUgbnVtYmVyIG9mIGdsb2JhbHMgMCAoZXZhbHVhdGluZyAnbmV3
IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4uZ2V0KCkpJykiKTsKIH0KIAogCkBAIC01Miw3ICs1Miw3
IEBACiAgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpOwogICAgIGJpbi50cmlt
KCk7CiAKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmlu
LmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRv
ZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzMiAvIDc2OiBNdXRhYmxlIEdsb2JhbHMgYXJlbid0IHN1cHBv
cnRlZCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4uZ2V0KCkpJykiKTsK
KyAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdldCgp
KSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3Qg
cGFyc2UgYXQgYnl0ZSAzMjogTXV0YWJsZSBHbG9iYWxzIGFyZW4ndCBzdXBwb3J0ZWQgKGV2YWx1
YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKScpIik7CiB9CiAKIHsKQEAg
LTc3LDcgKzc3LDcgQEAKICAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCk7CiAg
ICAgYmluLnRyaW0oKTsKIAotICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5
Lk1vZHVsZShiaW4uZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJs
eS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDUxIC8gNTk6IDF0aCBFeHBvcnQgaXNuJ3Qg
aW1tdXRhYmxlLCBuYW1lZCAnZ2xvYmFsJyAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1v
ZHVsZShiaW4uZ2V0KCkpJykiKTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3Nl
bWJseS5Nb2R1bGUoYmluLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNz
ZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSA1MTogMXRoIEV4cG9ydCBpc24ndCBp
bW11dGFibGUsIG5hbWVkICdnbG9iYWwnIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9k
dWxlKGJpbi5nZXQoKSknKSIpOwogfQogCiB7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vanMt
YXBpL3RhYmxlLmpzIGIvSlNUZXN0cy93YXNtL2pzLWFwaS90YWJsZS5qcwppbmRleCBiODMyZTEx
NzY2NDEzMDIzMGZjODBiZmIxMzBjMTM2NmEzMTJlMzI1Li5jZjY4YjQ0MDQ5NWY2YmU2ZjhiMjc5
NDc3MTI0NTZkN2NhN2M4YzZmIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vanMtYXBpL3RhYmxl
LmpzCisrKyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGFibGUuanMKQEAgLTEzLDcgKzEzLDcgQEAK
ICAgICAgICAgLkVuZCgpCiAgICAgICAgIC5Db2RlKCkKICAgICAgICAgLkVuZCgpOwotICAgIGFz
c2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2Vt
Ymx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1
bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDM0IC8gNDE6IENhbm5vdCBoYXZlIG1vcmUgdGhhbiBv
bmUgVGFibGUgZm9yIG5vdyIpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2Vt
Ymx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21w
aWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDM0OiBD
YW5ub3QgaGF2ZSBtb3JlIHRoYW4gb25lIFRhYmxlIGZvciBub3ciKTsKIH0KIAogewpAQCAtMzgs
NyArMzgsNyBAQAogICAgICAgICAuRW5kKCkKICAgICAgICAgLkNvZGUoKQogICAgICAgICAuRW5k
KCk7Ci0gICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxk
ZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFz
c2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTcgLyAyODogVGFibGUgY291bnQg
b2YgMiBpcyBpbnZhbGlkLCBhdCBtb3N0IDEgaXMgYWxsb3dlZCBmb3Igbm93IChldmFsdWF0aW5n
ICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIp
OworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVy
LldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3Nl
bWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE3OiBUYWJsZSBjb3VudCBvZiAyIGlz
IGludmFsaWQsIGF0IG1vc3QgMSBpcyBhbGxvd2VkIGZvciBub3cgKGV2YWx1YXRpbmcgJ25ldyBX
ZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIik7CiB9CiAK
IHsKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICAgICAgICAgICAuQ2FsbEluZGlyZWN0KDAsIDAp
CiAgICAgICAgICAgICAuRW5kKCkKICAgICAgICAgLkVuZCgpOwotICAgIGFzc2VydC50aHJvd3Mo
KCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkp
LCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBw
YXJzZSBhdCBieXRlIDQgLyA3OiBjYWxsX2luZGlyZWN0IGlzIG9ubHkgdmFsaWQgd2hlbiBhIHRh
YmxlIGlzIGRlZmluZWQgb3IgaW1wb3J0ZWQsIGluIGZ1bmN0aW9uIGF0IGluZGV4IDAgKGV2YWx1
YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgp
KScpIik7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1
aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldl
YkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgNDogY2FsbF9pbmRpcmVjdCBp
cyBvbmx5IHZhbGlkIHdoZW4gYSB0YWJsZSBpcyBkZWZpbmVkIG9yIGltcG9ydGVkLCBpbiBmdW5j
dGlvbiBhdCBpbmRleCAwIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxk
ZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIpOwogfQogCiB7CkBAIC03Myw3ICs3Myw3IEBACiAg
ICAgICAgICAgICAgICAgLkNhbGxJbmRpcmVjdCgwLCAxKQogICAgICAgICAgICAgLkVuZCgpCiAg
ICAgICAgIC5FbmQoKTsKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5N
b2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVy
cm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSA2IC8gNzogY2Fs
bF9pbmRpcmVjdCdzICdyZXNlcnZlZCcgdmFydWludDEgbXVzdCBiZSAweDAsIGluIGZ1bmN0aW9u
IGF0IGluZGV4IDAgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5X
ZWJBc3NlbWJseSgpLmdldCgpKScpIik7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2Vi
QXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5
LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUg
NjogY2FsbF9pbmRpcmVjdCdzICdyZXNlcnZlZCcgdmFydWludDEgbXVzdCBiZSAweDAsIGluIGZ1
bmN0aW9uIGF0IGluZGV4IDAgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVp
bGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIik7CiB9CiAKIHsKQEAgLTg2LDcgKzg2LDcgQEAK
ICAgICAgICAgLkVuZCgpCiAgICAgICAgIC5Db2RlKCkKICAgICAgICAgLkVuZCgpOwotICAgIGFz
c2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2Vt
Ymx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1
bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDIzIC8gMjY6IGNhbid0IGV4cG9ydCBUYWJsZSAwIHRo
ZXJlIGFyZSAwIFRhYmxlcyIpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2Vt
Ymx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21w
aWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDIzOiBj
YW4ndCBleHBvcnQgVGFibGUgMCB0aGVyZSBhcmUgMCBUYWJsZXMiKTsKIH0KIAogewpAQCAtMTAy
LDcgKzEwMiw3IEBACiAgICAgICAgIC5FbmQoKQogICAgICAgICAuQ29kZSgpCiAgICAgICAgIC5F
bmQoKTsKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVp
bGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2Vi
QXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzMCAvIDMzOiBjYW4ndCBleHBv
cnQgVGFibGUgMSB0aGVyZSBhcmUgMSBUYWJsZXMiKTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+
IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwgV2Vi
QXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2Ug
YXQgYnl0ZSAzMDogY2FuJ3QgZXhwb3J0IFRhYmxlIDEgdGhlcmUgYXJlIDEgVGFibGVzIik7CiB9
CiAKIGZ1bmN0aW9uIGFzc2VydEJhZFRhYmxlKHRhYmxlRGVzY3JpcHRpb24sIG1lc3NhZ2UpIHsK
QEAgLTEzMiw0MiArMTMyLDQyIEBAIGZ1bmN0aW9uIGFzc2VydEJhZFRhYmxlSW1wb3J0KHRhYmxl
RGVzY3JpcHRpb24sIG1lc3NhZ2UpIHsKIHsKICAgICBsZXQgYmFkRGVzY3JpcHRpb25zID0gWwog
ICAgICAgICBbe2luaXRpYWw6IDEwLCBlbGVtZW50OiAiaTMyIn0sCi0gICAgICAgICAiV2ViQXNz
ZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxOCAvIDIzOiBUYWJsZSB0eXBlIHNo
b3VsZCBiZSBhbnlmdW5jLCBnb3QgLTEgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1
bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKLSAgICAgICAgICJXZWJBc3NlbWJs
eS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2IC8gMzQ6IFRhYmxlIHR5cGUgc2hvdWxk
IGJlIGFueWZ1bmMsIGdvdCAtMSAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShi
dWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKKyAgICAgICAgICJXZWJBc3NlbWJseS5N
b2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE4OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlm
dW5jLCBnb3QgLTEgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5X
ZWJBc3NlbWJseSgpLmdldCgpKScpIiwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9l
c24ndCBwYXJzZSBhdCBieXRlIDI2OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3Qg
LTEgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJs
eSgpLmdldCgpKScpIl0sCiAgICAgICAgIFt7aW5pdGlhbDogMTAsIGVsZW1lbnQ6ICJmMzIifSwK
LSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE4IC8g
MjM6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtMyAoZXZhbHVhdGluZyAnbmV3
IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAotICAg
ICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjYgLyAzNDog
VGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC0zIChldmFsdWF0aW5nICduZXcgV2Vi
QXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAorICAgICAg
ICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTg6IFRhYmxlIHR5
cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtMyAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5
Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAorICAgICAgICAgIldlYkFz
c2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjY6IFRhYmxlIHR5cGUgc2hvdWxk
IGJlIGFueWZ1bmMsIGdvdCAtMyAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShi
dWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKICAgICAgICAgW3tpbml0aWFsOiAxMCwg
ZWxlbWVudDogImY2NCJ9LAotICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBh
cnNlIGF0IGJ5dGUgMTggLyAyMzogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC00
IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHko
KS5nZXQoKSknKSIsCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2Ug
YXQgYnl0ZSAyNiAvIDM0OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTQgKGV2
YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdl
dCgpKScpIl0sCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQg
Ynl0ZSAxODogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC00IChldmFsdWF0aW5n
ICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIs
CisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNjog
VGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC00IChldmFsdWF0aW5nICduZXcgV2Vi
QXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAogICAgICAg
ICBbe2luaXRpYWw6IDEwLCBlbGVtZW50OiAiaTY0In0sCi0gICAgICAgICAiV2ViQXNzZW1ibHku
TW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxOCAvIDIzOiBUYWJsZSB0eXBlIHNob3VsZCBi
ZSBhbnlmdW5jLCBnb3QgLTIgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVp
bGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKLSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1
bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2IC8gMzQ6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFu
eWZ1bmMsIGdvdCAtMiAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVy
LldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUg
ZG9lc24ndCBwYXJzZSBhdCBieXRlIDE4OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBn
b3QgLTIgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3Nl
bWJseSgpLmdldCgpKScpIiwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBw
YXJzZSBhdCBieXRlIDI2OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTIgKGV2
YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdl
dCgpKScpIl0sCiAgICAgICAgIFt7aW5pdGlhbDogMTAsIG1heGltdW06IDIwLCBlbGVtZW50OiAi
aTMyIn0sCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0
ZSAxOCAvIDI0OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTEgKGV2YWx1YXRp
bmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScp
IiwKLSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2
IC8gMzU6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtMSAoZXZhbHVhdGluZyAn
bmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwK
KyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE4OiBU
YWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTEgKGV2YWx1YXRpbmcgJ25ldyBXZWJB
c3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKKyAgICAgICAg
ICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2OiBUYWJsZSB0eXBl
IHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTEgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5N
b2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCiAgICAgICAgIFt7aW5pdGlh
bDogMTAsIG1heGltdW06IDIwLCBlbGVtZW50OiAiZjMyIn0sCi0gICAgICAgICAiV2ViQXNzZW1i
bHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxOCAvIDI0OiBUYWJsZSB0eXBlIHNob3Vs
ZCBiZSBhbnlmdW5jLCBnb3QgLTMgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUo
YnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKLSAgICAgICAgICJXZWJBc3NlbWJseS5N
b2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2IC8gMzU6IFRhYmxlIHR5cGUgc2hvdWxkIGJl
IGFueWZ1bmMsIGdvdCAtMyAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWls
ZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1
bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE4OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5j
LCBnb3QgLTMgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJB
c3NlbWJseSgpLmdldCgpKScpIiwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24n
dCBwYXJzZSBhdCBieXRlIDI2OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTMg
KGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgp
LmdldCgpKScpIl0sCiAgICAgICAgIFt7aW5pdGlhbDogMTAsIG1heGltdW06IDIwLCBlbGVtZW50
OiAiZjY0In0sCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQg
Ynl0ZSAxOCAvIDI0OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTQgKGV2YWx1
YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgp
KScpIiwKLSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRl
IDI2IC8gMzU6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtNCAoZXZhbHVhdGlu
ZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJyki
XSwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE4
OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTQgKGV2YWx1YXRpbmcgJ25ldyBX
ZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKKyAgICAg
ICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2OiBUYWJsZSB0
eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTQgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJs
eS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCiAgICAgICAgIFt7aW5p
dGlhbDogMTAsIG1heGltdW06IDIwLCBlbGVtZW50OiAiaTY0In0sCi0gICAgICAgICAiV2ViQXNz
ZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxOCAvIDI0OiBUYWJsZSB0eXBlIHNo
b3VsZCBiZSBhbnlmdW5jLCBnb3QgLTIgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1
bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKLSAgICAgICAgICJXZWJBc3NlbWJs
eS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2IC8gMzU6IFRhYmxlIHR5cGUgc2hvdWxk
IGJlIGFueWZ1bmMsIGdvdCAtMiAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShi
dWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKKyAgICAgICAgICJXZWJBc3NlbWJseS5N
b2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE4OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlm
dW5jLCBnb3QgLTIgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5X
ZWJBc3NlbWJseSgpLmdldCgpKScpIiwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9l
c24ndCBwYXJzZSBhdCBieXRlIDI2OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3Qg
LTIgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJs
eSgpLmdldCgpKScpIl0sCiAKICAgICAgICAgW3tpbml0aWFsOiAxMCwgbWF4aW11bTogOSwgZWxl
bWVudDogImFueWZ1bmMifSwKLSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBw
YXJzZSBhdCBieXRlIDIxIC8gMjQ6IHJlc2l6YWJsZSBsaW1pdHMgaGFzIGEgaW5pdGlhbCBwYWdl
IGNvdW50IG9mIDEwIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiBpdHMgbWF4aW11bSA5IChldmFsdWF0
aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSkn
KSIsCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAy
OSAvIDM1OiByZXNpemFibGUgbGltaXRzIGhhcyBhIGluaXRpYWwgcGFnZSBjb3VudCBvZiAxMCB3
aGljaCBpcyBncmVhdGVyIHRoYW4gaXRzIG1heGltdW0gOSAoZXZhbHVhdGluZyAnbmV3IFdlYkFz
c2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKKyAgICAgICAg
ICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDIxOiByZXNpemFibGUg
bGltaXRzIGhhcyBhIGluaXRpYWwgcGFnZSBjb3VudCBvZiAxMCB3aGljaCBpcyBncmVhdGVyIHRo
YW4gaXRzIG1heGltdW0gOSAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWls
ZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAorICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVs
ZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjk6IHJlc2l6YWJsZSBsaW1pdHMgaGFzIGEgaW5pdGlh
bCBwYWdlIGNvdW50IG9mIDEwIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiBpdHMgbWF4aW11bSA5IChl
dmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5n
ZXQoKSknKSJdLAogICAgICAgICBbe2luaXRpYWw6IDEsIG1heGltdW06IDAsIGVsZW1lbnQ6ICJh
bnlmdW5jIn0sCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQg
Ynl0ZSAyMSAvIDI0OiByZXNpemFibGUgbGltaXRzIGhhcyBhIGluaXRpYWwgcGFnZSBjb3VudCBv
ZiAxIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiBpdHMgbWF4aW11bSAwIChldmFsdWF0aW5nICduZXcg
V2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCi0gICAg
ICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyOSAvIDM1OiBy
ZXNpemFibGUgbGltaXRzIGhhcyBhIGluaXRpYWwgcGFnZSBjb3VudCBvZiAxIHdoaWNoIGlzIGdy
ZWF0ZXIgdGhhbiBpdHMgbWF4aW11bSAwIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9k
dWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAorICAgICAgICAgIldlYkFzc2Vt
Ymx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjE6IHJlc2l6YWJsZSBsaW1pdHMgaGFz
IGEgaW5pdGlhbCBwYWdlIGNvdW50IG9mIDEgd2hpY2ggaXMgZ3JlYXRlciB0aGFuIGl0cyBtYXhp
bXVtIDAgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3Nl
bWJseSgpLmdldCgpKScpIiwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBw
YXJzZSBhdCBieXRlIDI5OiByZXNpemFibGUgbGltaXRzIGhhcyBhIGluaXRpYWwgcGFnZSBjb3Vu
dCBvZiAxIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiBpdHMgbWF4aW11bSAwIChldmFsdWF0aW5nICdu
ZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAog
ICAgICAgICBbe2luaXRpYWw6IDIqKjMyIC0gMSwgbWF4aW11bTogMioqMzIgLSAyLCBlbGVtZW50
OiAiYW55ZnVuYyJ9LAotICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNl
IGF0IGJ5dGUgMjkgLyAzMjogcmVzaXphYmxlIGxpbWl0cyBoYXMgYSBpbml0aWFsIHBhZ2UgY291
bnQgb2YgNDI5NDk2NzI5NSB3aGljaCBpcyBncmVhdGVyIHRoYW4gaXRzIG1heGltdW0gNDI5NDk2
NzI5NCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2Vt
Ymx5KCkuZ2V0KCkpJykiLAotICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBh
cnNlIGF0IGJ5dGUgMzcgLyA0MzogcmVzaXphYmxlIGxpbWl0cyBoYXMgYSBpbml0aWFsIHBhZ2Ug
Y291bnQgb2YgNDI5NDk2NzI5NSB3aGljaCBpcyBncmVhdGVyIHRoYW4gaXRzIG1heGltdW0gNDI5
NDk2NzI5NCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFz
c2VtYmx5KCkuZ2V0KCkpJykiXSwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24n
dCBwYXJzZSBhdCBieXRlIDI5OiByZXNpemFibGUgbGltaXRzIGhhcyBhIGluaXRpYWwgcGFnZSBj
b3VudCBvZiA0Mjk0OTY3Mjk1IHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiBpdHMgbWF4aW11bSA0Mjk0
OTY3Mjk0IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNz
ZW1ibHkoKS5nZXQoKSknKSIsCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3Qg
cGFyc2UgYXQgYnl0ZSAzNzogcmVzaXphYmxlIGxpbWl0cyBoYXMgYSBpbml0aWFsIHBhZ2UgY291
bnQgb2YgNDI5NDk2NzI5NSB3aGljaCBpcyBncmVhdGVyIHRoYW4gaXRzIG1heGltdW0gNDI5NDk2
NzI5NCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2Vt
Ymx5KCkuZ2V0KCkpJykiXSwKICAgICAgICAgW3tpbml0aWFsOiAyKiozMSwgZWxlbWVudDogImFu
eWZ1bmMifSwKLSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBi
eXRlIDI0IC8gMjc6IFRhYmxlJ3MgaW5pdGlhbCBwYWdlIGNvdW50IG9mIDIxNDc0ODM2NDggaXMg
dG9vIGJpZywgbWF4aW11bSAxMDAwMDAwMCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1v
ZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAotICAgICAgICAgIldlYkFzc2Vt
Ymx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzIgLyAzODogVGFibGUncyBpbml0aWFs
IHBhZ2UgY291bnQgb2YgMjE0NzQ4MzY0OCBpcyB0b28gYmlnLCBtYXhpbXVtIDEwMDAwMDAwIChl
dmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5n
ZXQoKSknKSJdLAorICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0
IGJ5dGUgMjQ6IFRhYmxlJ3MgaW5pdGlhbCBwYWdlIGNvdW50IG9mIDIxNDc0ODM2NDggaXMgdG9v
IGJpZywgbWF4aW11bSAxMDAwMDAwMCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVs
ZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAorICAgICAgICAgIldlYkFzc2VtYmx5
Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzI6IFRhYmxlJ3MgaW5pdGlhbCBwYWdlIGNv
dW50IG9mIDIxNDc0ODM2NDggaXMgdG9vIGJpZywgbWF4aW11bSAxMDAwMDAwMCAoZXZhbHVhdGlu
ZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJyki
XSwKICAgICBdOwogCiAgICAgZm9yIChjb25zdCBkIG9mIGJhZERlc2NyaXB0aW9ucykgewpAQCAt
MTg2LDcgKzE4Niw3IEBAIGZ1bmN0aW9uIGFzc2VydEJhZFRhYmxlSW1wb3J0KHRhYmxlRGVzY3Jp
cHRpb24sIG1lc3NhZ2UpIHsKICAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKICAgICAgICAgLkNv
ZGUoKQogICAgICAgICAuRW5kKCk7Ci0gICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5LkNv
bXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzkg
LyA0ODogQ2Fubm90IGhhdmUgbW9yZSB0aGFuIG9uZSBUYWJsZSBmb3Igbm93Iik7CisgICAgYXNz
ZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1i
bHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVs
ZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzk6IENhbm5vdCBoYXZlIG1vcmUgdGhhbiBvbmUgVGFi
bGUgZm9yIG5vdyIpOwogfQogCiAKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGVz
dF9EYXRhLmpzIGIvSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X0RhdGEuanMKaW5kZXggY2NhMGNm
M2JjNDVkMGY0ZGQzM2JkOWNhNTk3OTg5NTRkMmQ0NWIxOC4uNDE3MTQzNTEyOGEwODRkNTk0OWQ4
ZmYyYjhiMTI1NzBiN2YyMzM3NSAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0
X0RhdGEuanMKKysrIGIvSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X0RhdGEuanMKQEAgLTUyLDcg
KzUyLDcgQEAKICAgICAgICAgICAuU2VnbWVudChbMHhmZl0pLk9mZnNldCgwKS5FbmQoKQogICAg
ICAgICAuRW5kKCk7CiAgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgp
OwotICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pLCBX
ZWJBc3NlbWJseS5Db21waWxlRXJyb3IsIGBXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJz
ZSBhdCBieXRlIDE1IC8gMjA6IDB0aCBEYXRhIHNlZ21lbnQgaGFzIGluZGV4IDAgd2hpY2ggZXhj
ZWVkcyB0aGUgbnVtYmVyIG9mIE1lbW9yaWVzIDBgKTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+
IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCBg
V2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxNTogMHRoIERhdGEgc2Vn
bWVudCBoYXMgaW5kZXggMCB3aGljaCBleGNlZWRzIHRoZSBudW1iZXIgb2YgTWVtb3JpZXMgMGAp
OwogfSkoKTsKIAogKGZ1bmN0aW9uIEVtcHR5RGF0YVNlY3Rpb25XaXRob3V0TWVtb3J5KCkgewpA
QCAtNjIsNyArNjIsNyBAQAogICAgICAgICAgIC5TZWdtZW50KFtdKS5PZmZzZXQoMCkuRW5kKCkK
ICAgICAgICAgLkVuZCgpOwogICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5n
ZXQoKTsKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmlu
KSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCBgV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3Qg
cGFyc2UgYXQgYnl0ZSAxNSAvIDE5OiAwdGggRGF0YSBzZWdtZW50IGhhcyBpbmRleCAwIHdoaWNo
IGV4Y2VlZHMgdGhlIG51bWJlciBvZiBNZW1vcmllcyAwYCk7CisgICAgYXNzZXJ0LnRocm93cygo
KSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbiksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJv
ciwgYFdlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTU6IDB0aCBEYXRh
IHNlZ21lbnQgaGFzIGluZGV4IDAgd2hpY2ggZXhjZWVkcyB0aGUgbnVtYmVyIG9mIE1lbW9yaWVz
IDBgKTsKIH0pKCk7CiAKIChmdW5jdGlvbiBEYXRhU2VjdGlvbkJpZ2dlclRoYW5NZW1vcnkoKSB7
CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfU3RhcnQuanMgYi9KU1Rlc3Rz
L3dhc20vanMtYXBpL3Rlc3RfU3RhcnQuanMKaW5kZXggYjQ0NDU2OTMyZDkwYjVjODMzMTQ1ZWMz
ZjM0MmZjNTA0NmY3OWUwYi4uNWMzMTUwZTFjYWJlYmZiODQzMzNlZjcxNDIzYTg4ODZjZGUwZWFl
OCAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X1N0YXJ0LmpzCisrKyBiL0pT
VGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9TdGFydC5qcwpAQCAtMzEsNSArMzEsNSBAQAogICAgICAg
ICAuU3RhcnQoMCkuRW5kKCkgLy8gSW52YWxpZCBpbmRleC4KICAgICAgICAgLkNvZGUoKS5FbmQo
KTsKICAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCkuZ2V0KCk7Ci0gICAgYXNzZXJ0LnRo
cm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbiksIEVycm9yLCBgV2ViQXNzZW1i
bHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxNyAvIDIwOiBTdGFydCBpbmRleCAwIGV4
Y2VlZHMgZnVuY3Rpb24gaW5kZXggc3BhY2UgMCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5
Lk1vZHVsZShiaW4pJylgKTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJs
eS5Nb2R1bGUoYmluKSwgRXJyb3IsIGBXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBh
dCBieXRlIDE3OiBTdGFydCBpbmRleCAwIGV4Y2VlZHMgZnVuY3Rpb24gaW5kZXggc3BhY2UgMCAo
ZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pJylgKTsKIH0pKCk7CmRpZmYg
LS1naXQgYS9KU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfYmFzaWNfYXBpLmpzIGIvSlNUZXN0cy93
YXNtL2pzLWFwaS90ZXN0X2Jhc2ljX2FwaS5qcwppbmRleCAwOGU3NGFhMzI0YTcxNzg4ZTU4MTlj
NGE4YmJlNzc0NzU4NWIxYTg5Li4xYTJkMjIyMTAzMDQ1MWRmMDY0NWIzMGVhMzFiYjI3NDhmNTUz
NmQwIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfYmFzaWNfYXBpLmpzCisr
KyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9iYXNpY19hcGkuanMKQEAgLTY3LDcgKzY3LDcg
QEAKICAgICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5W2NdKGlu
dmFsaWQpLCBUeXBlRXJyb3IsIGBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5QnVmZmVy
VmlldyBvciBhbiBBcnJheUJ1ZmZlciAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5W2NdKGlu
dmFsaWQpJylgKTsKICAgICAgICAgZm9yIChjb25zdCBidWZmZXIgb2YgW25ldyBBcnJheUJ1ZmZl
cigpLCBuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKCkpLCBuZXcgSW50OEFycmF5KCksIG5l
dyBVaW50OEFycmF5KCksIG5ldyBVaW50OENsYW1wZWRBcnJheSgpLCBuZXcgSW50MTZBcnJheSgp
LCBuZXcgVWludDE2QXJyYXkoKSwgbmV3IEludDMyQXJyYXkoKSwgbmV3IFVpbnQzMkFycmF5KCks
IG5ldyBGbG9hdDMyQXJyYXkoKSwgbmV3IEZsb2F0NjRBcnJheSgpXSkKICAgICAgICAgICAgIC8v
IEZJWE1FIHRoZSBmb2xsb3dpbmcgc2hvdWxkIGJlIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvci4g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mzc2OAotICAgICAgICAg
ICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHlbY10oYnVmZmVyKSwgRXJyb3Is
IGBXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDAgLyAwOiBleHBlY3Rl
ZCBhIG1vZHVsZSBvZiBhdCBsZWFzdCA4IGJ5dGVzIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1i
bHlbY10oYnVmZmVyKScpYCk7CisgICAgICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBX
ZWJBc3NlbWJseVtjXShidWZmZXIpLCBFcnJvciwgYFdlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0
IHBhcnNlIGF0IGJ5dGUgMDogZXhwZWN0ZWQgYSBtb2R1bGUgb2YgYXQgbGVhc3QgOCBieXRlcyAo
ZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5W2NdKGJ1ZmZlciknKWApOwogICAgICAgICBhc3Nl
cnQuaW5zdGFuY2VvZihuZXcgV2ViQXNzZW1ibHlbY10oZW1wdHlNb2R1bGVBcnJheSksIFdlYkFz
c2VtYmx5Lk1vZHVsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgIkluc3RhbmNlIjoKZGlm
ZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvdmVyc2lvbi5qcyBiL0pTVGVzdHMvd2FzbS9q
cy1hcGkvdmVyc2lvbi5qcwppbmRleCA4MWNkN2ZmMDEyMmZiMjFjZTkxZjgwZmI1MWU0YzY5ZTE0
NTk4YzQ3Li4wNDg2ZmNmZGRlZmQwODIxZDM5MjQ2Y2I2NDA4NzM0YmZlYmYyMmUyIDEwMDY0NAot
LS0gYS9KU1Rlc3RzL3dhc20vanMtYXBpL3ZlcnNpb24uanMKKysrIGIvSlNUZXN0cy93YXNtL2pz
LWFwaS92ZXJzaW9uLmpzCkBAIC01LDUgKzUsNSBAQAogICAgIGlmICh2ZXJzaW9uID09PSAxKQog
ICAgICAgICBjb250aW51ZTsKICAgICBjb25zdCBlbXB0eU1vZHVsZUFycmF5ID0gVWludDhBcnJh
eS5vZigweDAsIDB4NjEsIDB4NzMsIDB4NmQsIHZlcnNpb24sIDB4MDAsIDB4MDAsIDB4MDApOwot
ICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShlbXB0eU1vZHVs
ZUFycmF5KSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCBgV2ViQXNzZW1ibHkuTW9kdWxlIGRv
ZXNuJ3QgcGFyc2UgYXQgYnl0ZSA4IC8gODogdW5leHBlY3RlZCB2ZXJzaW9uIG51bWJlciAke3Zl
cnNpb259IGV4cGVjdGVkIDFgKTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3Nl
bWJseS5Nb2R1bGUoZW1wdHlNb2R1bGVBcnJheSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwg
YFdlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgODogdW5leHBlY3RlZCB2
ZXJzaW9uIG51bWJlciAke3ZlcnNpb259IGV4cGVjdGVkIDFgKTsKIH0KZGlmZiAtLWdpdCBhL0pT
VGVzdHMvd2FzbS9zdHJlc3MvbmFtZVNlY3Rpb24ud2FzbSBiL0pTVGVzdHMvd2FzbS9zdHJlc3Mv
bmFtZVNlY3Rpb24ud2FzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNGIyMmIxYWVlYTM4ZTQ2OWMzMjYwYmEzNGQ1
ZGE0YTZkYjEyMTUzCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAxMzQwOQp6Y21iVzhPTj9BdWRC
QEx2UmFNdW0+TW9DTT0kWX4wZCM/PWBGd2deb0tfakkyZ3hHXklXKFlHMnZaYHImWTZlJWcKei1S
fGxkISQ+SUlBJmBzfHFDfkprKGQ0bH0xZCVMUUJvWWZHdFVSUGRWITxNalNmR2VTQjFPdUUjWUQ9
MldiKnJlCno9aVlqQl9lPXVnPkFKNlQmLXZjcHxOSEt9WmdjTlc8ZVpFQzteNSVHYilITjFfeEdk
eT1PWD5ZYH0+WVBfbmhPdgp6SVVUYztHSjxYVnJRaGE7KTUrLVd7bmNPbGpaZ1UtKkZOXl8pMU14
R2BxfEdVYCVZJiYmcGhpdGNBYXplQHJvU30Kelp9YHZGQyRpMChKQ210UEdgSyZ5eVMrSmlhZGN5
SlhKXylWT0tzWDBON0g5X3JrbVN+QypOdX1KJD82TW58SlQtCnpPck0oVWUxN3JqVFpXQE1kJCVV
SD9AZFF7aGomSklacnl1JWM9UHMpJklvRGBocntpaVRVJWtwKS1XdWVYe25xYAp6ZCF5LTwkPmRX
ejtqKjIxZEdGVGRfVnkqJEc3PmM9b08lMy1qY34zdCtgR05Le2ohVFJwZj99enAobiFpNjs4YyQK
emNmTSRVS0lIS3k+VW1xeDNEMHFLNUZmO3ZDITIyRysjV151cUwhYE80Y0M4bGI4cG0wKGdyanF6
OXElSUp4WUB9CnpQU1N8flF1Rzw2RFZyIXNHZnBIS1hJa3lad2Y8Q05UbD4qRG0tNz9wQys1Zk51
PSMwIWBBWkJzKiZnMTNfbmxrcgp6VUFnb3l4XndSe3F2P2hfKWdIZF4hdUNzaHBMNmZiQ29rUm9e
dj5TJm5iQ0M1eShkUzB2ciM4Y2pgbD80P1krLUUKekd1XnprXn59QV5UTylVM2dfOWc/LVhGTyY9
MHtoZnNlNWxXK2BCcDFhdSorNlIzMiolVSk8aWd4dyQ+dXpKMnFTCnpkKVVVS1B4cnBBJkVrIT8p
c0J8XisrXzU1X2ZVSXlaKnd4KW5ZIzZDX2ArbH5hX3tjaCRqP0JfJlNjflVDeUBTVgp6R1AlMVdH
dVdLby1ucn1FKV93a0VZLXhMWWM+QV97ZXtYKWs7bHwyV0M5Y1N3T1lfI19rOT9weV5Kdz80ZTxF
VDMKemlKaXY+X1JxRC09dj1GQzxNWFheRXgkSlFfamI+PmlZVSomdFJlMVBFQl90YURjdCMxe2A8
QllVKURocG9wMHkpCnpBQkl0I0UyJk8pSUp1SX5AOH53T2JuYCNaeihefD1acU98d0V3T2EmXmZC
ayZhP0g4NmhJMyFCaDVjKll7SlM9RAp6Sm1iWD07SDhNRnhOc05aan1GUjl2R2M3VzkmYHFlbEAw
PTdIcVpaQ0NXODV4MDVVaz0mYGxabG1mOTVLRGsrPmwKekdwPCVII0k4ITJxdEo7ezxFcVB2Qkho
eHRseWxMZ3hXZ3ZDNiEoZyhpV3V8SmFuKW10WmkkTFNxYXg0Y1BKOWBgCnpyQTBpaFF2V3NoQU1e
KjBSbmdWSF5Lc2N1RTtHdH4zTW4jdHQ3SzsxOEpFYmpOR2AtXyl4VGNsVDxlcmNVZ1pBbAp6KVNy
RStYcGhTX0R8MX43PD5gTFcmdjFkUURqRk5QSns/emBxR09sMGJmIzRfYmhRRnF0KWVhSmpodDNQ
UFRXSD8KenVtSjt1Vm5yS1FiaT45O3FSdGwrb29vQn1ZUCM9VFI+VmYqUiRsN1ghVWtRR0JyZTFv
UHtKZTw1fGh7X0ZFUnVqCno9bFE9YXN4M3RXZyoxPiM/eDs7U0J3QlNyIztMXjVzYX14eHo8KDkj
M3wwbkBkR35SK2NZZEZ7e0M7THM9SUE7Tgp6eThhX0c2fE5zVmNSayU3eXY7K1IxWSQkO3sxdi1B
SU9gdnthYyFASUJDcVoxcGlgZzFYI1Q/fVBKKyRNREp+TnYKemh+MlFSTjhSVXhrUkdeUWBOU2VP
VTtqMzg1SS00R19tYGt1SSkjaVUtRjFsXkV5amFLPVgzYFRNNVd9WjFCYlFOCno/eml2JURqI0oy
YCsxKUt1M2diX0ZhUEZtRilFVEQkVSF5cGg0Xzx4fEM4RHFUcXM+SFd7dHRRRDx6Sj5GXmVJegp6
MiZ4Qz9hbUxiUnslNWpuYlpYbmRKN3JDIThAISM5UmdfKiVGajFURjZTe0EzJk13Q35jUz04SnVD
cWB5eEtPeEIKej4yZkM1KGZNNExLMmsrfWR+V2EjYWhkMEA4bGtQNFAkYHUkNG5nMjxGPyU9cUle
ZHI7SVBhNVBBQ0ZIc19sVHgpCnp4WFpxb25hbz9aVSFASDBqSF51aHQhdl5JQThLdVJ2JW19VStn
VXBwYnNWZjJmMExFTCM/MDZsa1hKN00qN3FkSQp6KD9RWEZPdyVHdHpaXilne3khc0kjT0d1R2gy
MWp0NHwxKkM9MVA3STtTSCk3bSZrb2B6akY3aGchTGdRQHpKaTIKel82VzA4PGRkb1lfWihKNWIq
ZyppPnM1PEFiZFBlYnJrOXglMk9+Jkt7cj11QV5yMHNJQlEzPCpnTyp0NzEodTcxCno7UlAjLTJ9
R2Y+NDlHRHZ0eUUhP3hUfnpyalVfU3slcmkwez8mQmI+SEkoSzUhSSlUKzRpbyhxWnQ1WExfakFZ
QQp6V1ZoYmdfNHxuM193TV9fRjRRdGtKWkFUT1hJRn10YTMrT3VBSyYtc1prMD8+aDZMZkdgI3dI
JjlMPGd1NW9AN2oKejVgfChHdiQ3fEhXRXI/JDVLM3g3c1Q1Uj42Xm8pPTVET3QkVihGTXppZ3A8
X3FLUml4QXNsRDtaISNAblYhREBICnpRcjFoeWckNGFKYm4jRDs0UExWKm91V2B2QTU9dnMybm1+
bCU+Pk9IcVhqKT5NTjtBY1doPjk1UUhHbj9ISkl+YAp6Xjk4fmVpRylOMnd6ejAxQXxyV0BhPHBQ
cEt0VyhjYHMlTGJ7X2pqJWlYT1JsTVpXY0JURVB2Wm1GTzRPaWpTeE0KelhaXjkxZiM7PUlKMkUy
TE1maWghYWQzcVpjQTAzQ1QkVytnZ0RNaXR3VzxTc0VvQ2gyeEtnPTZjUVMwQFBKQkkpCnplQyhJ
MCZCJmBrWlJVN0A2NlZVJiFSbEZiejNrekk/RFElJEFscmA9S31fXmM1bShnQjU0fGhYVVh0ZWBQ
dmd3QQp6eCh3XjBLKzxVbENFUmgkMV5HfVExbk5TUlVeWWwpXiR2TmVBcmZ+OF9aUUpxamQjfHo4
emAqcHVkQSU8a1ZJLWAKem44UWE7MVolIUNAKTtBaShKc0Y1Qm4/a3QzV2NMLUd9KGokU2p2anRs
Qk0rfFRURmlkNzFCI3tjT1VMQ0BGM1R1CnptVE93e0YyKERuI0w3fHlgViMzRnpEI2RgK3BfcE5j
Uzc1I0ZsMT5wOCtLfG9qRGJXK3JocHF2bkpgbTM3JklSVgp6SXx6YDc2VDtGOF9YVkcwWiFHSX4j
b1h1OEJSOzJ+Yyt9X09DRUFqNXdUUjBzXyM2O3Y/c0thTUtnKX5OQVJDeUsKeiYqQVFkZzYyTGFE
JiV1M1oxWH0rN3Zac00xWC0tUGBFfnZXYC1EcnNVbll0fDFhemwta2stIUdMS2dUclVQcmJ9Cnp7
cCt2NC1VZlg1dmtFcWwhTEBfYGBJV0lCU21ZJG1NKmlUWlhZSDd7aVRfVXxCISVDRDEzKT4kMiVw
aHBpI3kyKQp6WXhsS1Vkd2lkPyFjNVYwMDwkRlI2Q1M7N2x+SF9JfEI0ZH05Km1hIyE8Pm9rWjxS
NCNBeClwflhCIUJZUGZKMmMKejhPdSo8SHdOUmI3TUFOKTticGFxNU1Jbk8hVmhLQyVne01QUGdN
X0hESVM2ZHRQZi1nb2dwTndVWSk+cm1LNl5QCnppNlFlVlJZbkc2bklofEpoS3dtKSYqazZfUzJ8
NnIzOWw2S20wZk9aayRwfXFXKkBuQmlvZG9NTUcjK3pkR1JiMAp6RzM5K3lZUkUoPVdJXzxsPH1v
aTtDV19+b1h6Nz90UjNERyQ1LVh2TGQ3dntFMmJwWGUpLXpaS0cpMF5qJDs2TEAKejN2LWIle0Yt
NilqSHtxPi1HdmJ5amhSM3FTKmd0dTs4R1R7RmRDRjIpaXp6TiktRF52NWMjX2FnI2V9WFFYenlM
CnpnK2pvJT95MTM0V3VZKXVEMTxnPWhsc2VkN3oma0pEK1FuKT5ge0A7TGc2dE5sKUN+VXUtPTVp
aihrQyh1KD44Uwp6MzVCfTloITtibFduYG5VRD0lfEpGTyZwT0d6KjBpNitBQTVMZVh2XnpVYiZL
UmhiSGZncDR7QVIqSSs9NEQrUUIKemtlZkx3N3soek8maEElNj5aTCZFcUVwOTJuWWJXVHJecG8o
cDxxelEjQmUxR18oM3N8U3JpaSlhJEhRYkZ0Mz1YCnpWVjMhX2c8dDg0YHFFVHUwMFIjV0YlWil8
Q1B0I3xTJllQVTQ0MTRGKipHQTkzQG4wMlg4c2A3ajE4IzdrcGRofAp6NUslLV81JV8jI1lfZilO
d25MbUd0PFU0KzhkaXk7dHl1JnQrUz5GZTxFJmEtdXtmej4wPDBGb1RlY1k5dmowMjAKejhCbU9o
XmNNX28jS0AyJHV+KH1wJnJxTFk7aShLVk1PPGNESFJxfHlGQndaeHE9QikoakZHPzJ7V1ZXKUkj
d0JCCnpZRG4qNE01eiEtaztZeVY5dXZaMjVgcnE7LVVQXyhEdUltVXJZT1NWVXNBYHZ4LVBsV00r
ZDQ3TCE1KEBCXnlvTgp6Z3JIUGBCYEQ3UHg0eUdWcFRAaz5yPiYkMjk3TjQ1Y3RRdVprTzhXYURB
dDIoZyM7RmQxViNrS1kzSU5BS0BJKWsKejFkdnJAVUVIQHdYZTQrUTFqPllmR3p1MWNPXzA+OGM/
IVNVREFAeEolMEMkdU9qZVExdzg2YldFNmlBMUdrYSQzCnpwPnR0IylKYXgkM2JfNURmbV9uTio4
WlUpazRWd2xLaEY3SVFFTnNIYlQod243UG98NSYtSU5waExkKnhPeHVpJgp6S1BXV1F0SWZfZypG
eDllK3g3TUAqODwlP1VrITgqaVVBIWx8S3NvY15MTWc2SDZOVisySHY2Vkt8IXF1JE0yX2gKenFs
b2JFemcxWm9sLSQ3VWZEUFdrJlZRe00jcWpibytwe1IlRjUoO2JtQWdLZmtDYzZFKDlAQmZgSlpi
bkJeMDswCnpHUmxKT0hRWm1KMnRIVS12TD5id2o5aTY9dzVCUkthKWV8d1g3V0JaI058I0VfYWtm
XmsxZTlEMHVtIVI/Q1dpZAp6OUR8RStwLUJxNlAyclhqYD5CMl9RKFY+Uklybjt9YWVrbDZNaTNJ
enkwT1laYXVfYClfPlpAQ1N3S20kQW5AIUwKekxKTUZ8KXgzZkNZfEtTejdPZSNlIzkpdytpVWpW
dyFCMG5HKEp9QHlCMzMzdVVoUmBAQEZhc0V3NWE0RD9JTX5fCnpXbn1NSypKVnk5IS1ANyMwZnlU
T1c+OF4mTWt+fUM1bHtESFBDJlQyZ2NwcytxQlhlcWglcVYpOCQkXnc4bF5PUAp6UUE4MXtvezJG
dkBrbUpWSDZzS34+XzQ+JjklS1VTTFZAREtfPEdlNm0hVEJlenA2eUdIKD9ybjJeTH1ySz9QWnsK
enN5UTY8eWUzPGFHclJfXyl4eXxFQEI/TnVMeSZuUz1xKHJuT1VlcVlBPGBMTkI/e0Y+OzduKjde
ZUVRX3NBej49Cno8MGt8Wjx2RDh8MWBoPHVRa0xTOVJsTWNmNiNKfHhZfGxRYiNoR3dKYnVyYCRj
cXdnNV95bUA2RVM2YCVmIXViMQp6QGEldCpgKXx1O3hFfUl2LU94Wl9hUGNFN1NhJTlqITNRRUl3
WEt6RCY2KE9IMUBWQG9BJHZ8fkNyU1N0R158KWIKekxUblcwPE59UWslckt7eks+SUt1bzxmVms0
c0VIeFAlMnZtVUo+WU10MEllVitIa2NAZH1XSTtMXz9NVkEmfHdTCnpeUChreF8rY0hoM1lNfFJm
U15jfnZgOEI8V0dyZjMxUHYhTlRETjYzb2NPdnRUc1B2c2w5YlhjOzFidVA0TXdARQp6SFlaZ0Vn
Yk0mNTkoRG8qVXwzSHtPNSs4fFctUyM1NTxAdT52dFNQU2d0aUV4WWBSM0U9fExXRmdJODlyVFRa
T2EKelk7PEBTME1vUUFQRXJUWT1DUz9ec1plQGhmR2JhT2dVeU05RCshJm5xeVh6ZXM7eGtua2c1
JD1yPTREa1ZncGtjCnotWGN7cHphMSVjeVJ5NThSJjd8eUxTKWx8cCY+c3VfOyZlJWw3MykhcD5Y
ZSNfKUlqLUhOeylkc3dPVjdNWUwrYwp6KDVTP3VyQU00TSprKDdSKVNgdkFpWGx5U1l+fGs3Xy07
UH1mUHtKdyE3ZGM8N3xzJERQPX5SZzBYVHBWNjtNVUUKenw0UUcwWVBTWmVQNFY3VW5ZQGxrSFFZ
UE5lXiRZRk1ZUFo9bGhoU0ZfOUhOfCpoMCtjJDFfZkZISD1lcyRrb0xMCnozNkhWPW9ZMGo/S344
fGpgUUtDPDYzYzlRV2I4RlAyQUx1LXIjOGZTaGIpJDFOdWxLRVcyKk1MKiNxbi1sOUM+Qgp6Kil0
MHwrQTQje3ZQYiRsNzV0Pjk0THxCKGJtU2A+JHlpbHEyU249NnZhMVk3M1ZlaiE7fGxJJXZFVzhG
KSs5VEcKek5FMGkjWTR7eTJ4RF9zUEVPPkBVWCo2N2wmbEdMYmlvaz1PYD49N3IwMiYjQDRLQnFh
WWgybm16bShjO2M7bjxVCnpFPT4lVjstOHBwZ0ctfWhhY1RQSXhITjhYc2o/fmN4Qk90PFQ5JTh5
RitwI0hPSm17RXhXPVdYb3Y0fGBhQXtCeQp6IWEqUVF4T0J4WlV3I1BBKDd6WClBKDBYTENANzI4
NDluTzxDZzJGcXE8KT8zcXRLcE9FQyhIK1gtaUk3aH4rZD4KenJIbWUzYEp6Pks8P1ckYj9BT093
Y2pQfXk4PHdkb0xBMWp4JTVyK1JISmhsKU5ER3BQdksmc2JSYXNBJjk4c3FACnpfS3Yyd0l0Qllq
PHVvMUdkc3BsfVlgZD83VTdmUyY7PWZFNHJzPTwwTChmOyVMYlhldk9ZbSFwaz18NHlJKllFTQp6
SGRMcF9iZy0hQ1poQCRBUUYxaG9LaCRsKHo3WE82dVY5UkUoV1FkWDBgNzhTRWg8an5VUkZaRTJy
ZGZ0dElUajMKejRfKFFOKTFpUyFEXkN2RVFmYmw9JGRINTUybVlsQ00pMVRoKCt8VnZYNl8wOGxZ
NF42NzQmK0dvPntYI3N+RUFQCnorQjI7a1k0bFVpSCV4SS1lSDRwfDNsKmNHLWtFMntjeEVLPDVg
YkNWQUZfJihVXm9RXlRnNkM7WCZ0a1cxeWd3QAp6PXVrTj5jO0BvTTFiVkE3cigrNHEzPW8rbUR9
VFh5PT1kJkZqQ09uZGo2dCY/a1ZaUX1GMTJUN157dyQwSXJUTVIKekBmeDFWUG1lZCtmNmJ8alNY
WU1wKD4mQnZVXnh0IXgtVUhNMCtxPXNZe01mQ0ZNI1dkcit7Kzc2WFY3Y2dGaT5YCno2S2pgX2dm
fUJSKE5AM3tGfjNrMUxMKEEyUXkxaHIweWU/enBgcyoxKSlnZ3R6aWRVQl5aMXl3PDNmM3Q9WVI5
SAp6Zzk4XjA/MiMqfGc9Y0J0R2NndlZQd2M1NSpMXldPQztgUypibi16PSFlWCs1RllIIzdNZVNJ
d1p0YT5fSDNSdlMKelBOVmhMQFQ/KmFiNHhAazBAKzB+dXt1SSNPYnhzd2JUeSFnTTctLTAjUm5j
YUBDV2QqTFBqO2JWMCVHUXVHMmJ0CnpwMjt2QytmYFV1UURPKUIpYD1ZJDBLJH5yZ1RRZy1UQ2FO
T2ZtUiFlZ3ZrcUcmS2g1KWh3eD9BO0xBZilrJDNFSQp6anYtQVJMP3A4cjRRVSFvMyhkZj9XaVUq
Y0ZvWVI8UE9gfE9ZNnpqdXpOODkwRHAzdWpEaiYyWUFiWUpOZ1lYcSoKejZaQ1JiN0VvdT9CaEEh
SHdQODhLYT49MT0zM1ZGb0lfODNecWFYeXFKSn41SlJGQmpJKT84RWY2NGFedDghMEkrCnpoTjMt
Q2lCNUdoQmtNVjgpWStGTkhRTzEyZDtQRlRsIzg9ZyRRZ0JxYmNRKlA3cSpeWl5ARHwpZWQtN1Ir
N3wkSQp6aHg/X0FhOzRgI0AwO3BieU50TH5ebzNqJCYqb3g5MW9oTSVhUmFhd2ZyNnVPbz5yMjQ5
Y0M3WG92TWN8bnVZezgKekh7VX0/JSRGQUpgc3R1cXo2QyNkNjUxNFhqdDNfIUNRbDBwN0JqMCY5
UnZePlM5TmlRQUdKZWFFdDgjOWI7S3pQCnpJc2dNSjFNcS0pMHZybEVyXmkhd3h0Z3ZRdTB3LUls
Z3cocFcpZjtXdikxX31jeEleZUxoUFZ9cUYwY3R5cmI+SQp6JlZoQSErajJmWW05PXhgJlMlQmxW
d1QzVzwkJiRSMFpBdyNXVEMqRCojd3hHNUQ8SnlOdF8yPGl9Xi1qU3J4NDsKendKalRTajQtRHJf
UjhfckVLWCNpWH0jPH50N3hxMSE4SCFYKXErTigwfGhqTDY/IV54eFdLYnZXKX4mVmgoTHZfCnpu
TjF5WUw4TDgwKjRaTm82P3JEMiNwQGM0JVcwbFFGM2IjVFJCdHU0bjF9aEFBdSQrajNPek5ZZmFG
VjZvO1oqPQp6cU5ZbE5tdClJM3htbz4/cClxb344QmR4QSZ+ZG9WMUpIKD8oTDlnbm4jVyswX3w7
NT8xbnFqUiEofD5yREQkTUkKekNEOXpOXjY7MzE1RUskN0lKPHU0bmtARHdFYnczckVnRHI0bztu
UnxmKzA0MjEpJEhveFRCUz9VUyR4Z3NrbmFQCnpUb1c2VzEzPUFjSyN0Jj5JZFVaOGFLMEQ+LSZ6
ZUpKdDxhJk8+aCRJNDhPbi0hOz1QVTgjV0o4cWhzcWolRnNnKAp6UWMwKFc+YmxoR0l5eE9rPnBF
LXJASkx8Pjk0VHhDOUZxVlhaTnF5JmJ4e3w0SEI3M15jKmlhYjRea29QQXU5JXcKekY1JHVTMnA7
Nl5LTlQlPUpqZXxKNTJ9R2hNbHc3fHU1SXcodlEjWXIwJWp6cGJ2QmpgWlBUSH03OTI/Ums+K2Fm
Cno7NmtOVl9pMUxjNyM8OFY1OXxnIW44Qjs2aCNDXyZHNFJOZTA0PFE7UGdVQCVEe0t5aEorNVdg
bTleNUA4eUpCUQp6TEplak4/clZAQEs2fUlNVStmaC1kelZ3cnNsSVBgQyQofWtWTDVRMEsmPGh7
aUlUa1oyUW5RYmtORG84P2YyTDYKemF8OVBUYVdzZk8hRyVhTWhEKTViOXdqNFNCaFVaWC11ejU/
eHI8flBoZFNgfVhxVll6fEY/UHJHbSNtR213SmxtCnpOI3s1c0IhX3d7XjxNPDhgM0Z3VDt6KUtt
cjctYVdgKDIrLSUwemI7RXFtIU1tXkF1UDhEPC12NUMkZExNbS12Pwp6c1JoR140NjRuVXVxbmRr
ZUFyd0ZuflB6eTVqSWJSJX0ydUtxbWNPa0FzTC1VTUR9cXhxfjtWMFg/LWNUWWlZUTQKemdnc2pM
ZEgjPWpGRncrSGopPiZvZnhWVEFTWlIpQCUyNyhqNX1aPDRCMUkmLWd1fVZpVmd6NTwkUmZKdisr
MmJUCnpSViRySV5ebX5vKkZeRytPYGNnR0khSTAtI09TdDE+cF5+OzE0MmxJPzE4flNuYzVxS1cq
Mio+Zi1Lb3Y1OGBDKwp6T3BxdmgjaWR3NlckKFBicV5VZ2AoLUpMdjdjYSQ8RV8pbDdWaE5iTkNv
YVgzRj8lMW02aWR3UEBuWSZzKChvZ1IKekRebXJqIzxmJSU7IVdzYExpUlJELUFHPX5oPmc9YGEz
ZGxLM3c9YWQ9YzA/QmJsQVQza3wmKWNFJlZNXzYmNmhECnoxKURqe1AtYClwZUNaJEJFOHlKOTlN
U0hIJG1MKFJjU2JvdVRobWsrVWEhbzUmKDZvWihtVE08XjcoTlRqYFAzUQp6ZlZUN0JVJi1URkd2
e0FoJHM7eGctOF9uVEVZezZlQmo7U3EtfWw9NXF8U2RnVD4xZk54dk5KZGojbz9iX19mc2kKemBC
I2BLeX1ObTU2dXFrNTU0IUx6TVlRfUdNWkNLRjF4NH5rQTVXeGpAWkNoI2RAfDloem17ayhla2pw
ZHs2PURCCno+Qz1YZFp2QUNNelZ1Tjxafmk/KmVgKS1zKXJGVigqWEV4STQzXiZES1hLZXcxck49
PjA2NGskM0Jzd3h1TkY+Ywp6IV9rV2A/IUJjb3l0I1I2PWs4bmk7XjV4cW8lUUJ9ZnJzRGglWSNR
Jl8wN2lnYFApMGdUaVpLKHFldGgqcFAkXkcKemo/TmUoYzcxTyYrSXF8YGh0RVdZbGhPMlRNP1gz
XmR5Kk9OUDVFZUheTGY1SCo/d1g4X3tJbHx7P2Uoa0pBRDQ3CnpKOWwwbGUoMXYrKW1vcm49Y1Zi
O21PTGxIPiFYcXZaZn1weVl5SSR6aTROYmNZZGJJUylkYmh5cD0md18qV2NORQp6eUsmKG0mV0Yh
OT5Qd15OLV8/QlpAJFReVCNDc00kQDM8SmcoUmdxMyhaPjZsdVFBQGdAY3FRYigmclA4JDJUYFYK
SjVaYD9LZSpzODFUakJyIQoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvSlNU
ZXN0cy93YXNtL3N0cmVzcy9zdHJlYW1pbmctYmFzaWMuanMgYi9KU1Rlc3RzL3dhc20vc3RyZXNz
L3N0cmVhbWluZy1iYXNpYy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iM2ZiYzI0NzlmNzIxNjNkZmFkMzIxMDQw
NTZiYTI3NDM1OTIzNWRhCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9z
dHJlYW1pbmctYmFzaWMuanMKQEAgLTAsMCArMSwxOCBAQAoraW1wb3J0ICogYXMgYXNzZXJ0IGZy
b20gJy4uL2Fzc2VydC5qcyc7CisKK3ZhciBkYXRhID0gcmVhZCgiLi9uYW1lU2VjdGlvbi53YXNt
IiwgImJpbmFyeSIpOworCitmdW5jdGlvbiBjaGVjayhzdGVwKQoreworICAgIHZhciBwYXJzZXIg
PSAkdm0uY3JlYXRlV2FzbVN0cmVhbWluZ1BhcnNlcigpOworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgZGF0YS5ieXRlTGVuZ3RoOyBpICs9IHN0ZXApIHsKKyAgICAgICAgcGFyc2VyLmFkZEJ5dGVz
KGRhdGEuc3ViYXJyYXkoaSwgaSArIE1hdGgubWluKHN0ZXAsIGRhdGEuYnl0ZUxlbmd0aCAtIGkp
KSk7CisgICAgfQorICAgIGFzc2VydC5lcShwYXJzZXIuZmluYWxpemUoKSwgNyk7Cit9CisKK2Zv
ciAodmFyIGkgPSAwOyBpIDwgMTA7ICsraSkKKyAgICBjaGVjayhpICsgMSk7CitjaGVjaygxMDAp
OworY2hlY2soMTAwMCk7CitjaGVjaygyMDAwKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>348144</attachid>
            <date>2018-08-27 08:26:13 -0700</date>
            <delta_ts>2018-08-27 09:05:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-188943-20180828002611.patch</filename>
            <type>text/plain</type>
            <size>170293</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM1MzU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
ZDJhYzBiZmEwNjcxODA3MDdlMGE1YmI1YWFlNzRlZjJlYjNhZTYwLi4wYjUzMWFiZDhmZmM4Yjg2
MjQ0ZTYxODQzZDUxMmIxZmU1YWFhZDgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNjUgQEAKKzIwMTgtMDgtMjcgIFl1c3VrZSBTdXp1a2kgIDx5dXN1a2VzdXp1a2lAc2xv
d3N0YXJ0Lm9yZz4KKworICAgICAgICBbV2ViQXNzZW1ibHldIFBhcnNlIHdhc20gbW9kdWxlcyBp
biBhIHN0cmVhbWluZyBmYXNoaW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xODg5NDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgV2FzbTo6U3RyZWFtaW5nUGFyc2VyLCB3aGlj
aCBwYXJzZXMgd2FzbSBiaW5hcnkgaW4gYSBzdHJlYW1pbmcgZmFzaGlvbi4KKyAgICAgICAgQ3Vy
cmVudGx5LCB0aGlzIFN0cmVhbWluZ1BhcnNlciBpcyBub3QgZW5hYmxlZCBhbmQgaW50ZWdyYXRl
ZC4gSW4gc3Vic2VxdWVudCBwYXRjaGVzLAorICAgICAgICB3ZSBzdGFydCBpbnRlZ3JhdGluZyBp
dCBpbnRvIEJCUVBsYW4gYW5kIGRyb3BwaW5nIHRoZSBvbGQgTW9kdWxlUGFyc2VyLgorCisgICAg
ICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiB0b29scy9KU0RvbGxhclZNLmNwcDoKKyAgICAgICAg
KFdURjo6V2FzbVN0cmVhbWluZ1BhcnNlcjo6V2FzbVN0cmVhbWluZ1BhcnNlcik6CisgICAgICAg
IChXVEY6Oldhc21TdHJlYW1pbmdQYXJzZXI6OmNyZWF0ZSk6CisgICAgICAgIChXVEY6Oldhc21T
dHJlYW1pbmdQYXJzZXI6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXVEY6Oldhc21TdHJl
YW1pbmdQYXJzZXI6OnN0cmVhbWluZ1BhcnNlcik6CisgICAgICAgIChXVEY6Oldhc21TdHJlYW1p
bmdQYXJzZXI6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdURjo6ZnVuY3Rpb25XYXNtU3Ry
ZWFtaW5nUGFyc2VyQWRkQnl0ZXMpOgorICAgICAgICAoV1RGOjpmdW5jdGlvbldhc21TdHJlYW1p
bmdQYXJzZXJGaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uQ3JlYXRlV2FzbVN0cmVh
bWluZ1BhcnNlcik6CisgICAgICAgIChKU0M6OkpTRG9sbGFyVk06OmZpbmlzaENyZWF0aW9uKToK
KyAgICAgICAgVGhpcyBvYmplY3QgaXMgaW50cm9kdWNlZCBmb3IgdGVzdGluZyBwdXJwb3NlLiBB
ZGRlZCBuZXcgc3RyZXNzIHRlc3QgdXNlcyB0aGlzIGludGVyZmFjZQorICAgICAgICB0byB0ZXN0
IHN0cmVhbWluZyBwYXJzZXIgaW4gdGhlIEpTQyBzaGVsbC4KKworICAgICAgICAqIHdhc20vV2Fz
bUJCUVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpCQlFQbGFuKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSk6CisgICAg
ICAgIChKU0M6Oldhc206OkJCUVBsYW46OnByZXBhcmUpOgorICAgICAgICAoSlNDOjpXYXNtOjpC
QlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6
Y29tcGxldGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjp3b3JrKToKKyAgICAgICAg
KiB3YXNtL1dhc21CQlFQbGFuLmg6CisgICAgICAgIEJCUVBsYW4gaGFzIG1fc291cmNlLCBidXQg
b25jZSBNb2R1bGVJbmZvcm1hdGlvbiBpcyBwYXJzZWQsIGl0IGlzIG5vIGxvbmdlciBuZWNlc3Nh
cnkuCisgICAgICAgIEluIHN1YnNlcXVlbnQgcGF0Y2hlcywgd2Ugd2lsbCByZW1vdmUgdGhpcywg
YW5kIHN0cmVhbSB0aGUgZGF0YSBpbnRvIHRoZSBCQlFQbGFuLgorCisgICAgICAgICogd2FzbS9X
YXNtRm9ybWF0Lmg6CisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbjo6TW9kdWxlSW5mb3JtYXRpb24p
OgorICAgICAgICAqIHdhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmg6CisgICAgICAgIE9uZSBv
ZiB0aGUgbGFyZ2VzdCBjaGFuZ2UgaW4gdGhpcyBwYXRjaCBpcyB0aGF0IE1vZHVsZUluZm9ybWF0
aW9uIG5vIGxvbmdlciBob2xkcyBzb3VyY2UgYnl0ZXMsCisgICAgICAgIHNpbmNlIHNvdXJjZSBi
eXRlcyBjYW4gYmUgYWRkZWQgaW4gYSBzdHJlYW1pbmcgZmFzaGlvbi4gSW5zdGVhZCBvZiBob2xk
aW5nIGFsbCB0aGUgc291cmNlIGJ5dGVzCisgICAgICAgIGluIE1vZHVsZUluZm9ybWF0aW9uLCBl
YWNoIGZ1bmN0aW9uIChNb2R1bGVJbmZvcm1hdGlvbjo6ZnVuY3Rpb25zLCBGdW5jdGlvbkRhdGEp
IHNob3VsZCBoYXZlCisgICAgICAgIFZlY3Rvcjx1aW50OF90PiBmb3IgaXRzIGRhdGEuIFRoaXMg
ZGF0YSBpcyBldmVudHVhbGx5IGZpbGxlZCBieSBTdHJlYW1pbmdQYXJzZXIsIGFuZCBjb21waWxp
bmcKKyAgICAgICAgYSBmdW5jdGlvbiB3aXRoIHRoaXMgZGF0YSBjYW4gYmUgZG9uZSBjb25jdXJy
ZW50bHkgd2l0aCBTdHJlYW1pbmdQYXJzZXIuCisKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxl
SW5mb3JtYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZUluZm9ybWF0
aW9uOjptZW1vcnlDb3VudCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZUluZm9y
bWF0aW9uOjp0YWJsZUNvdW50IGNvbnN0KToKKyAgICAgICAgbWVtb3J5Q291bnQgYW5kIHRhYmxl
Q291bnQgc2hvdWxkIGJlIHJlY29yZWRlZCBpbiBNb2R1bGVJbmZvcm1hdGlvbi4KKworICAgICAg
ICAqIHdhc20vV2FzbU1vZHVsZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVs
ZVBhcnNlcjo6cGFyc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjptYWtlSTMySW5pdEV4cHIpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlVHlwZSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VJbXBvcnQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb24p
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlUmVzaXph
YmxlTGltaXRzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpw
YXJzZVRhYmxlSGVscGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFy
c2VyOjpwYXJzZVRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFy
c2VyOjpwYXJzZU1lbW9yeUhlbHBlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206Ok1v
ZHVsZVBhcnNlcjo6cGFyc2VNZW1vcnkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpN
b2R1bGVQYXJzZXI6OnBhcnNlR2xvYmFsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6
TW9kdWxlUGFyc2VyOjpwYXJzZUV4cG9ydCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206
Ok1vZHVsZVBhcnNlcjo6cGFyc2VTdGFydCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206
Ok1vZHVsZVBhcnNlcjo6cGFyc2VFbGVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2Fz
bTo6TW9kdWxlUGFyc2VyOjpwYXJzZUNvZGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNt
OjpNb2R1bGVQYXJzZXI6OnBhcnNlSW5pdEV4cHIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpX
YXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlR2xvYmFsVHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZUN1c3RvbSk6IERlbGV0ZWQuCisgICAgICAgIEV4
dHJhY3Qgc2VjdGlvbiBwYXJzaW5nIGNvZGUgb3V0IGZyb20gTW9kdWxlUGFyc2VyLiBXZSBjcmVh
dGUgU2VjdGlvblBhcnNlciBhbmQgTW9kdWxlUGFyc2VyIHVzZXMgaXQuCisgICAgICAgIFNlY3Rp
b25QYXJzZXIgaXMgYWxzbyB1c2VkIGJ5IFN0cmVhbWluZ1BhcnNlci4KKworICAgICAgICAqIHdh
c20vV2FzbU1vZHVsZVBhcnNlci5oOgorICAgICAgICAqIHdhc20vV2FzbU5hbWVTZWN0aW9uLmg6
CisgICAgICAgIChKU0M6Oldhc206Ok5hbWVTZWN0aW9uOjpOYW1lU2VjdGlvbik6CisgICAgICAg
IChKU0M6Oldhc206Ok5hbWVTZWN0aW9uOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpO
YW1lU2VjdGlvbjo6c2V0SGFzaCk6CisgICAgICAgIEhhc2ggY2FsY3VsYXRpb24gaXMgZGVmZXJy
ZWQgc2luY2UgYWxsIHRoZSBzb3VyY2UgaXMgbm90IGF2YWlsYWJsZSBpbiBzdHJlYW1pbmcgcGFy
c2luZy4KKworICAgICAgICAqIHdhc20vV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmNwcDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6TmFtZVNlY3Rpb25QYXJzZXI6OnBhcnNlKToKKyAgICAgICAgKiB3YXNt
L1dhc21OYW1lU2VjdGlvblBhcnNlci5oOgorICAgICAgICBVc2UgUmVmPE5hbWVTZWN0aW9uPi4K
KworICAgICAgICAqIHdhc20vV2FzbU9NR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpP
TUdQbGFuOjp3b3JrKToKKyAgICAgICAgV2FzbTo6UGxhbiBubyBsb25nZXIgaGF2ZSBtX3NvdXJj
ZSBzaW5jZSBkYXRhIHdpbGwgYmUgZXZlbnR1YWxseSBmaWxsZWQgaW4gYSBzdHJlYW1pbmcgZmFz
aGlvbi4KKyAgICAgICAgT01HUGxhbiBjYW4gZ2V0IGRhdGEgb2YgdGhlIGZ1bmN0aW9uIGJ5IHVz
aW5nIE1vZHVsZUluZm9ybWF0aW9uOjpmdW5jdGlvbnMuCisKKyAgICAgICAgKiB3YXNtL1dhc21Q
YXJzZXIuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGFyc2VyOjpzb3VyY2UgY29uc3QpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpQYXJzZXI6Omxlbmd0aCBjb25zdCk6CisgICAgICAgIChKU0M6Oldh
c206OlBhcnNlcjo6b2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGFyc2VyOjpm
YWlsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6bWFrZUkzMkluaXRFeHByKToKKyAgICAg
ICAgKiB3YXNtL1dhc21QbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6UGxhbik6
CisgICAgICAgIFdhc206OlBsYW4gc2hvdWxkIG5vdCBoYXZlIGFsbCB0aGUgc291cmNlIGFwcmlv
cmkuIFN0cmVhbWVkIGRhdGEgd2lsbCBiZSBwdW1wZWQgZnJvbSB0aGUgcHJvdmlkZXIuCisKKyAg
ICAgICAgKiB3YXNtL1dhc21QbGFuLmg6CisgICAgICAgICogd2FzbS9XYXNtU2VjdGlvblBhcnNl
ci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQ
YXJzZXIuY3BwLgorICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZVR5cGUp
OgorICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZUltcG9ydCk6CisgICAg
ICAgIChKU0M6Oldhc206OlNlY3Rpb25QYXJzZXI6OnBhcnNlRnVuY3Rpb24pOgorICAgICAgICAo
SlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZVJlc2l6YWJsZUxpbWl0cyk6CisgICAgICAg
IChKU0M6Oldhc206OlNlY3Rpb25QYXJzZXI6OnBhcnNlVGFibGVIZWxwZXIpOgorICAgICAgICAo
SlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZVRhYmxlKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6U2VjdGlvblBhcnNlcjo6cGFyc2VNZW1vcnlIZWxwZXIpOgorICAgICAgICAoSlNDOjpXYXNt
OjpTZWN0aW9uUGFyc2VyOjpwYXJzZU1lbW9yeSk6CisgICAgICAgIChKU0M6Oldhc206OlNlY3Rp
b25QYXJzZXI6OnBhcnNlR2xvYmFsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNl
cjo6cGFyc2VFeHBvcnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJz
ZVN0YXJ0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VFbGVtZW50
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VDb2RlKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VJbml0RXhwcik6CisgICAgICAgIChK
U0M6Oldhc206OlNlY3Rpb25QYXJzZXI6OnBhcnNlR2xvYmFsVHlwZSk6CisgICAgICAgIChKU0M6
Oldhc206OlNlY3Rpb25QYXJzZXI6OnBhcnNlRGF0YSk6CisgICAgICAgIChKU0M6Oldhc206OlNl
Y3Rpb25QYXJzZXI6OnBhcnNlQ3VzdG9tKToKKyAgICAgICAgKiB3YXNtL1dhc21TZWN0aW9uUGFy
c2VyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQ
YXJzZXIuaC4KKyAgICAgICAgU2VjdGlvblBhcnNlciBpcyBleHRyYWN0ZWQgZnJvbSBNb2R1bGVQ
YXJzZXIuIEFuZCBpdCBpcyB1c2VkIGJvdGggdGhlIG9sZCAoY3VycmVudGx5IHdvcmtpbmcpIE1v
ZHVsZVBhcnNlcgorICAgICAgICBhbmQgdGhlIG5ldyBTdHJlYW1pbmdQYXJzZXIuCisKKyAgICAg
ICAgKiB3YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
V2FzbTo6cGFyc2VVSW50Nyk6CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6
ZmFpbCk6CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6U3RyZWFtaW5nUGFy
c2VyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U3RyZWFtaW5nUGFyc2VyOjpwYXJzZU1vZHVsZUhl
YWRlcik6CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6cGFyc2VTZWN0aW9u
SGVhZGVyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U3RyZWFtaW5nUGFyc2VyOjpwYXJzZVNlY3Rp
b25TaXplKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U3RyZWFtaW5nUGFyc2VyOjpwYXJzZUNvZGVT
ZWN0aW9uU2l6ZSk6CisgICAgICAgIENvZGUgc2VjdGlvbiBpbiBXYXNtIGJpbmFyeSBpcyBzcGVj
aWFsbHkgaGFuZGxlZCBjb21wYXJlZCB3aXRoIHRoZSBvdGhlciBzZWN0aW9ucyBzaW5jZSBpdCBp
bmNsdWRlcworICAgICAgICBidW5jaCBvZiBmdW5jdGlvbnMuIFN0cmVhbWluZ1BhcnNlciBleHRy
YWN0cyBlYWNoIGZ1bmN0aW9uIGluIGEgc3RyZWFtaW5nIGZhc2hpb24gYW5kIGVuYWJsZSBzdHJl
YW1pbmcKKyAgICAgICAgdmFsaWRhdGlvbiAvIGNvbXBpbGF0aW9uIG9mIFdhc20gZnVuY3Rpb25z
LgorCisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6cGFyc2VGdW5jdGlvbkhl
YWRlcik6CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6cGFyc2VGdW5jdGlv
bkJvZHkpOgorICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OnBhcnNlU2VjdGlv
bkJvZHkpOgorICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmNvbnN1bWUpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmNvbnN1bWVWYXJVSW50MzIpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6U3RyZWFtaW5nUGFyc2VyOjpmYWlsT25TdGF0ZSk6CisgICAgICAgIChKU0M6
Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6ZmluYWxpemUpOgorICAgICAgICAqIHdhc20vV2FzbVN0
cmVhbWluZ1BhcnNlci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6U3RyZWFtaW5nUGFy
c2VyOjphZGRCeXRlcyk6CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6ZXJy
b3JNZXNzYWdlIGNvbnN0KToKKyAgICAgICAgVGhpcyBpcyBvdXIgbmV3IFN0cmVhbWluZ1BhcnNl
ciBpbXBsZW1lbnRhdGlvbi4gU3RyZWFtaW5nUGFyc2VyOjpjb25zdW1lWFhYIGZ1bmN0aW9ucyBn
ZXQgZGF0YSwgYW5kCisgICAgICAgIFN0cmVhbWluZ1BhcnNlcjo6cGFyc2VYWFggZnVuY3Rpb25z
IHBhcnNlIGNvbnN1bWVkIGRhdGEuIFRoZSB1c2VyIG9mIFN0cmVhbWluZ1BhcnNlciBjYWxscwor
ICAgICAgICBTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKCkgdG8gcHVtcCB0aGUgYnl0ZXMgc3Ry
ZWFtIGludG8gdGhlIHBhcnNlci4gQW5kIG9uY2UgYWxsIHRoZSBkYXRhIGlzIHB1bXBlZCwKKyAg
ICAgICAgdGhlIHVzZXIgY2FsbHMgU3RyZWFtaW5nUGFyc2VyOjpmaW5hbGl6ZS4gU3RyZWFtaW5n
UGFyc2VyIGlzIGEgc3RhdGUgbWFjaGluZSB3aGljaCBmZWVkcyB0aGUgaW5jb21pbmcKKyAgICAg
ICAgYnl0ZSBzdHJlYW0uCisKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUu
Y3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpzb3VyY2UgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICBBbGwgdGhlIHNvdXJjZSBzaG91bGQgbm90IGJlIGhlbGQuCisKKyAg
ICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaDoKKyAgICAgICAgKiB3YXNtL2pz
L1dlYkFzc2VtYmx5UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlWYWxp
ZGF0ZUZ1bmMpOgorCiAyMDE4LTA4LTI0ICBZdXN1a2UgU3V6dWtpICA8eXVzdWtlc3V6dWtpQHNs
b3dzdGFydC5vcmc+CiAKICAgICAgICAgW0pTQ10gQXJyYXkucHJvdG90eXBlLnJldmVyc2UgbW9k
aWZpZXMgSlNJbW11dGFibGVCdXR0ZXJmbHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdl
TG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggYzJmMWVmYTE5ZmE1ODQ0NmI4MGQ2MjQ0
YmRiZDk1YWVkOTFiYWNhNS4uNWJhZjA1M2RiMGRkZjczNjgwYmM1YzZiMjk3NWU2ZDY1OTlkZGEx
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxOC0wOC0yNyAgWXVzdWtlIFN1enVraSAgPHl1c3Vr
ZXN1enVraUBzbG93c3RhcnQub3JnPgorCisgICAgICAgIFtXZWJBc3NlbWJseV0gUGFyc2Ugd2Fz
bSBtb2R1bGVzIGluIGEgc3RyZWFtaW5nIGZhc2hpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4ODk0MworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBtYXhCeXRlTGVuZ3RoIGZ1bmN0aW9uIHRvIGdl
dCB0aGUgbWF4aW11bSBzaXplIGZvciBULgorCisgICAgICAgICogd3RmL0xFQkRlY29kZXIuaDoK
KyAgICAgICAgKFdURjo6TEVCRGVjb2Rlcjo6bWF4Qnl0ZUxlbmd0aCk6CisgICAgICAgIChXVEY6
OkxFQkRlY29kZXI6OmRlY29kZVVJbnQpOgorICAgICAgICAoV1RGOjpMRUJEZWNvZGVyOjpkZWNv
ZGVJbnQpOgorCiAyMDE4LTA4LTI1ICBZdXN1a2UgU3V6dWtpICA8eXVzdWtlc3V6dWtpQHNsb3dz
dGFydC5vcmc+CiAKICAgICAgICAgU2hyaW5rIHNpemUgb2YgWE1MSHR0cFJlcXVlc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMTdhNDhiZGE2ZDRiZTM5N2IwOGU5NDZjYmQ0ODYx
MDY3NDc5OWRhZS4uNDI2ZDE5ZGNlOTU0ODJlODUxYmZlOWM5Mzg3ZDJjZjYzM2Y1NWQ0OCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE3MzQsNiArMTczNCw4IEBACiAJCUUzOTNB
REQ4MUZFNzAyRDAwMDIyRDY4MSAvKiBXZWFrTWFwSW1wbElubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzOTNBREQ3MUZFNzAyQ0MwMDIyRDY4
MSAvKiBXZWFrTWFwSW1wbElubGluZXMuaCAqLzsgfTsKIAkJRTM5RDQ1RjUxRDM5MDA1NjAwQjNC
Mzc3IC8qIEludGVycHJldGVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTM5RDlEODQxRDM5MDAwNjAwNjY3MjgyIC8qIEludGVycHJldGVy
SW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUUzOURBNEE3MUI3RThCN0MwMDg0RjMzQSAvKiBKU01vZHVsZVJlY29yZC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM5REE0QTUxQjdFOEI3QzAw
ODRGMzNBIC8qIEpTTW9kdWxlUmVjb3JkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJRTNBMDUzMUEyMTM0MkI2ODAwMjJFQzE0IC8qIFdhc21TdHJl
YW1pbmdQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUzQTA1MzE2MjEzNDJCNjYwMDIyRUMxNCAvKiBXYXNtU3RyZWFtaW5nUGFyc2VyLmggKi87
IH07CisJCUUzQTA1MzFDMjEzNDJCNjgwMDIyRUMxNCAvKiBXYXNtU2VjdGlvblBhcnNlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTNBMDUzMTgyMTM0
MkI2NzAwMjJFQzE0IC8qIFdhc21TZWN0aW9uUGFyc2VyLmggKi87IH07CiAJCUUzQTMyQkM3MUZD
ODMxNDcwMDdEN0U3NiAvKiBXZWFrTWFwSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTNBMzJCQzYxRkM4MzEyRTAwN0Q3RTc2IC8qIFdlYWtNYXBJ
bXBsLmggKi87IH07CiAJCUUzQTQyMTQzMUQ2RjU4OTMwMDA3QzYxNyAvKiBQcmVjaXNlSnVtcFRh
cmdldHNJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFM0E0MjE0MjFENkY1ODhGMDAwN0M2MTcgLyogUHJlY2lzZUp1bXBUYXJnZXRzSW5saW5l
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUz
QkZEMEJDMURBRjgwOEUwMDY1REVBMiAvKiBBY2Nlc3NDYXNlU25pcHBldFBhcmFtcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTNCRkQwQkExREFGODA3
QzAwNjVERUEyIC8qIEFjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmggKi87IH07CkBAIC00NjIyLDYg
KzQ2MjQsMTAgQEAKIAkJRTM5RDlEODQxRDM5MDAwNjAwNjY3MjgyIC8qIEludGVycHJldGVySW5s
aW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlcnByZXRlcklubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM5REE0QTQxQjdFOEI3QzAwODRG
MzNBIC8qIEpTTW9kdWxlUmVjb3JkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTTW9kdWxlUmVjb3JkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTM5REE0QTUxQjdFOEI3QzAwODRGMzNBIC8qIEpTTW9kdWxlUmVjb3JkLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTW9kdWxlUmVjb3JkLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUUzQTA1MzE2MjEzNDJCNjYwMDIyRUMxNCAvKiBXYXNtU3RyZWFtaW5nUGFy
c2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21TdHJlYW1pbmdQYXJz
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTNBMDUzMTcyMTM0MkI2NjAwMjJF
QzE0IC8qIFdhc21TZWN0aW9uUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdhc21TZWN0aW9uUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRTNBMDUzMTgyMTM0MkI2NzAwMjJFQzE0IC8qIFdhc21TZWN0aW9uUGFyc2VyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21TZWN0aW9uUGFyc2VyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzQTA1MzE5MjEzNDJCNjcwMDIyRUMxNCAvKiBXYXNt
U3RyZWFtaW5nUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdhc21TdHJlYW1pbmdQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
M0EzMkJDNTFGQzgzMTJEMDA3RDdFNzYgLyogV2Vha01hcEltcGwuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Vha01hcEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFM0EzMkJDNjFGQzgzMTJFMDA3RDdFNzYgLyogV2Vha01hcEltcGwuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vha01hcEltcGwuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTNBNDIxNDIxRDZGNTg4RjAwMDdDNjE3IC8qIFByZWNpc2VK
dW1wVGFyZ2V0c0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJl
Y2lzZUp1bXBUYXJnZXRzSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
NjM0OCw5ICs2MzU0LDEzIEBACiAJCQkJNTNGNDBFOEMxRDU5MDFGMjAwOTlBMUI2IC8qIFdhc21Q
YXJzZXIuaCAqLywKIAkJCQk1MzEzNzRCRTFENUNFOTUwMDBBRjdBMEIgLyogV2FzbVBsYW4uY3Bw
ICovLAogCQkJCTUzMTM3NEJDMUQ1Q0U2NzYwMEFGN0EwQiAvKiBXYXNtUGxhbi5oICovLAorCQkJ
CUUzQTA1MzE3MjEzNDJCNjYwMDIyRUMxNCAvKiBXYXNtU2VjdGlvblBhcnNlci5jcHAgKi8sCisJ
CQkJRTNBMDUzMTgyMTM0MkI2NzAwMjJFQzE0IC8qIFdhc21TZWN0aW9uUGFyc2VyLmggKi8sCiAJ
CQkJNTNGNDBFODQxRDU4Rjk3NzAwOTlBMUI2IC8qIFdhc21TZWN0aW9ucy5oICovLAogCQkJCUFE
NzQzOEJFMUUwNDU3OTIwMEZEMEMyQSAvKiBXYXNtU2lnbmF0dXJlLmNwcCAqLywKIAkJCQlBRDc0
MzhCRjFFMDQ1NzkyMDBGRDBDMkEgLyogV2FzbVNpZ25hdHVyZS5oICovLAorCQkJCUUzQTA1MzE5
MjEzNDJCNjcwMDIyRUMxNCAvKiBXYXNtU3RyZWFtaW5nUGFyc2VyLmNwcCAqLywKKwkJCQlFM0Ew
NTMxNjIxMzQyQjY2MDAyMkVDMTQgLyogV2FzbVN0cmVhbWluZ1BhcnNlci5oICovLAogCQkJCUFE
NUMzNkUzMUY2OUVDOEIwMDBCQ0FBRiAvKiBXYXNtVGFibGUuY3BwICovLAogCQkJCUFENUMzNkU0
MUY2OUVDOEIwMDBCQ0FBRiAvKiBXYXNtVGFibGUuaCAqLywKIAkJCQk1MjUwRDJDRjFFOERBMDVB
MDAyOUE5MzIgLyogV2FzbVRodW5rcy5jcHAgKi8sCkBAIC04NDQ4LDcgKzg0NTgsNiBAQAogCQkJ
CUMyRkNBRTEzMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNjY2RUMwMTgzNTY2RjkwMEQwMTdGMSAvKiBCeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzI4REFFQjFEMzhE
MDA1MDAxQTI1MjkgLyogQnl0ZWNvZGVSZXdyaXRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRkVB
M0JCQUMyMTJDOTdDQjAwRTkzQUQxIC8qIERGR0NGRy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjUx
NEYyMTkxOEIzRTE2NzAwOThGRjhCIC8qIEJ5dGVjb2Rlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY4ODVFMTExODQ5QTNCRTAwRjFFM0ZBIC8qIEJ5dGVjb2RlVXNlRGVmLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjgwMjNFQTE2MTM4MzJCMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggaW4gSGVhZGVy
cyAqLywKQEAgLTg1ODEsNiArODU5MCw3IEBACiAJCQkJMEZCREI5QUQxQUIwRkJDNjAwMEI1N0U1
IC8qIERGR0NhbGxDcmVhdGVEaXJlY3RBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY3QjI5NEIxNEMzQ0QyRjAwN0MzREIxIC8qIERGR0NhcGFiaWxpdGll
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5NTgxNEVGOTBBMjAwQzcyNTMyIC8qIERGR0NG
QVBoYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRUEzQkJBQzIxMkM5N0NCMDBFOTNBRDEgLyog
REZHQ0ZHLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjNCM0EyODE1NDRDOTk3MDAzRUQwRkYgLyog
REZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RDM2OTUx
QUU5Q0MzMzAwMEQ0REZCIC8qIERGR0NsZWFuVXBQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTc3QTQyNDAxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Nsb2JiZXJpemUuaCBpbiBIZWFkZXJzICov
LApAQCAtOTYwNyw4ICs5NjE3LDEwIEBACiAJCQkJNzlCNzU5NzYxREZBNEM2MDAwNTIxNzRDIC8q
IFdhc21QYWdlQ291bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzRjQwRThEMUQ1OTAxRjIwMDk5
QTFCNiAvKiBXYXNtUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzEzNzRCRDFENUNFNjc2
MDBBRjdBMEIgLyogV2FzbVBsYW4uaCBpbiBIZWFkZXJzICovLAorCQkJCUUzQTA1MzFDMjEzNDJC
NjgwMDIyRUMxNCAvKiBXYXNtU2VjdGlvblBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTNG
NDBFODUxRDU4Rjk3NzAwOTlBMUI2IC8qIFdhc21TZWN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQUQ3NDM4QzAxRTA0NTdBNDAwRkQwQzJBIC8qIFdhc21TaWduYXR1cmUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUUzQTA1MzFBMjEzNDJCNjgwMDIyRUMxNCAvKiBXYXNtU3RyZWFtaW5nUGFyc2Vy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDVDMzZFNjFGNjlFQzkxMDAwQkNBQUYgLyogV2FzbVRh
YmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MjUwRDJEMjFFOERBMDVBMDAyOUE5MzIgLyogV2Fz
bVRodW5rcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTNFOUUwQUYxRUFFQzQ1NzAwRkVFMjUxIC8q
IFdhc21UaWVyVXBDb3VudC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50
eHQKaW5kZXggODk3Njk4YzZlMDU5YWUxZDI2MjEzMWFjNTIwNDAwZTMxNzhlZGNjNS4uMDRkNDhl
ODViNTBmYjgzZmIxMjUwNWZlZTE0YTg1MzU5Y2MxZTMwOSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3Vy
Y2VzLnR4dApAQCAtOTkyLDcgKzk5Miw5IEBAIHdhc20vV2FzbU9NR1BsYW4uY3BwCiB3YXNtL1dh
c21PcGNvZGVPcmlnaW4uY3BwCiB3YXNtL1dhc21QYWdlQ291bnQuY3BwCiB3YXNtL1dhc21QbGFu
LmNwcAord2FzbS9XYXNtU2VjdGlvblBhcnNlci5jcHAKIHdhc20vV2FzbVNpZ25hdHVyZS5jcHAK
K3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAKIHdhc20vV2FzbVRhYmxlLmNwcAogd2FzbS9X
YXNtVGFibGUuaAogd2FzbS9XYXNtVGh1bmtzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rv
b2xzL0pTRG9sbGFyVk0uY3BwCmluZGV4IGViNTdjNzg0Yzk4MTgwNDYyZDRhOGU0M2M4NmI1MGJh
YWFlODQ5M2IuLmVmMjU1NzI0YmM2YTExMjAwMTZiN2YyMmY5NjlkYmZmZDljYWUyM2YgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAKQEAgLTUxLDYgKzUxLDEx
IEBACiAjaW5jbHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmlu
dFN0cmVhbS5oPgogCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorI2luY2x1ZGUgIkpTV2ViQXNz
ZW1ibHlIZWxwZXJzLmgiCisjaW5jbHVkZSAiV2FzbVN0cmVhbWluZ1BhcnNlci5oIgorI2VuZGlm
CisKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCkBAIC0xMDkz
LDYgKzEwOTgsODAgQEAgdm9pZCBFbGVtZW50OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFJvb3Qq
IHJvb3QpCiAgICAgbV9yb290LT5zZXRFbGVtZW50KHRoaXMpOwogfQogCisjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bldhc21TdHJlYW1pbmdQYXJzZXJBZGRCeXRlcyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uV2FzbVN0cmVhbWluZ1BhcnNlckZpbmFsaXpl
KEV4ZWNTdGF0ZSopOworCitjbGFzcyBXYXNtU3RyZWFtaW5nUGFyc2VyIDogcHVibGljIEpTRGVz
dHJ1Y3RpYmxlT2JqZWN0IHsKK3B1YmxpYzoKKyAgICBXYXNtU3RyZWFtaW5nUGFyc2VyKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQor
ICAgICAgICAsIG1faW5mbyhXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbjo6Y3JlYXRlKCkpCisgICAg
ICAgICwgbV9zdHJlYW1pbmdQYXJzZXIobV9pbmZvLmdldCgpKQorICAgIHsKKyAgICB9CisKKyAg
ICB1c2luZyBCYXNlID0gSlNEZXN0cnVjdGlibGVPYmplY3Q7CisKKyAgICBzdGF0aWMgV2FzbVN0
cmVhbWluZ1BhcnNlciogY3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKKyAgICB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY3JlYXRlU3RydWN0dXJl
KHZtLCBnbG9iYWxPYmplY3QsIGpzTnVsbCgpKTsKKyAgICAgICAgV2FzbVN0cmVhbWluZ1BhcnNl
ciogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2FzbVN0cmVhbWluZ1BhcnNl
cj4odm0uaGVhcCwgc2l6ZW9mKFdhc21TdHJlYW1pbmdQYXJzZXIpKSkgV2FzbVN0cmVhbWluZ1Bh
cnNlcih2bSwgc3RydWN0dXJlKTsKKyAgICAgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAgV2FzbTo6U3RyZWFtaW5nUGFyc2VyJiBz
dHJlYW1pbmdQYXJzZXIoKSB7IHJldHVybiBtX3N0cmVhbWluZ1BhcnNlcjsgfQorCisgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0pCisgICAgeworICAgICAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbih2bSk7CisKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRoaXMt
Pmdsb2JhbE9iamVjdCh2bSk7CisgICAgICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCBn
bG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiYWRkQnl0ZXMiKSwgMCwg
ZnVuY3Rpb25XYXNtU3RyZWFtaW5nUGFyc2VyQWRkQnl0ZXMsIE5vSW50cmluc2ljLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgICAgIHB1
dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnZtLCAiZmluYWxpemUiKSwgMCwgZnVuY3Rpb25XYXNtU3RyZWFtaW5nUGFyc2VyRmlu
YWxpemUsIE5vSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtKSk7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworCisgICAgUmVmPFdh
c206Ok1vZHVsZUluZm9ybWF0aW9uPiBtX2luZm87CisgICAgV2FzbTo6U3RyZWFtaW5nUGFyc2Vy
IG1fc3RyZWFtaW5nUGFyc2VyOworfTsKKworY29uc3QgQ2xhc3NJbmZvIFdhc21TdHJlYW1pbmdQ
YXJzZXI6OnNfaW5mbyA9IHsgIldhc21TdHJlYW1pbmdQYXJzZXIiLCAmQmFzZTo6c19pbmZvLCBu
dWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFdhc21TdHJlYW1pbmdQYXJzZXIp
IH07CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25XYXNtU3RyZWFtaW5n
UGFyc2VyQWRkQnl0ZXMoRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZXhlYy0+dm0oKSk7Cisg
ICAgYXV0byogdGhpc09iamVjdCA9IGpzRHluYW1pY0Nhc3Q8V2FzbVN0cmVhbWluZ1BhcnNlcio+
KHZtLCBleGVjLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCF0aGlzT2JqZWN0KSB7CisgICAgICAg
IHNjb3BlLnJlbGVhc2UoKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4oZmFsc2UpKTsKKyAgICB9CisgICAgYXV0byBkYXRhID0gZ2V0V2FzbUJ1ZmZlckZyb21WYWx1
ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgc2NvcGUucmVsZWFzZSgpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50MzJfdD4odGhpc09iamVjdC0+
c3RyZWFtaW5nUGFyc2VyKCkuYWRkQnl0ZXMoYml0d2lzZV9jYXN0PGNvbnN0IHVpbnQ4X3QqPihk
YXRhLmZpcnN0KSwgZGF0YS5zZWNvbmQpKSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uV2FzbVN0cmVhbWluZ1BhcnNlckZpbmFsaXplKEV4ZWNTdGF0ZSogZXhl
YykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBq
c0R5bmFtaWNDYXN0PFdhc21TdHJlYW1pbmdQYXJzZXIqPih2bSwgZXhlYy0+dGhpc1ZhbHVlKCkp
OworICAgIGlmICghdGhpc09iamVjdCkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c0Jvb2xlYW4oZmFsc2UpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHN0
YXRpY19jYXN0PGludDMyX3Q+KHRoaXNPYmplY3QtPnN0cmVhbWluZ1BhcnNlcigpLmZpbmFsaXpl
KCkpKSk7Cit9CisKKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZQogCiBuYW1lc3BhY2UgSlNDIHsK
QEAgLTE2NDAsNiArMTcxOSwxNSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvbkNyZWF0ZURPTUpJVEdldHRlckJhc2VKU09iamVjdChFeGVjUwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAorI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
K3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlV2FzbVN0
cmVhbWluZ1BhcnNlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShXYXNtU3RyZWFtaW5nUGFyc2VyOjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSkpOworfQorI2VuZGlmCisKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uU2V0SW1wdXJlR2V0dGVyRGVsZWdhdGUoRXhlY1N0YXRlKiBleGVjKQogewogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CkBAIC0yMDQwLDYgKzIxMjgsOSBAQCB2b2lkIEpTRG9sbGFy
Vk06OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICBhZGRGdW5jdGlvbih2bSwgImNyZWF0ZURP
TUpJVENoZWNrU3ViQ2xhc3NPYmplY3QiLCBmdW5jdGlvbkNyZWF0ZURPTUpJVENoZWNrU3ViQ2xh
c3NPYmplY3QsIDApOwogICAgIGFkZEZ1bmN0aW9uKHZtLCAiY3JlYXRlRE9NSklUR2V0dGVyQmFz
ZUpTT2JqZWN0IiwgZnVuY3Rpb25DcmVhdGVET01KSVRHZXR0ZXJCYXNlSlNPYmplY3QsIDApOwog
ICAgIGFkZEZ1bmN0aW9uKHZtLCAiY3JlYXRlQnVpbHRpbiIsIGZ1bmN0aW9uQ3JlYXRlQnVpbHRp
biwgMik7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIGFkZEZ1bmN0aW9uKHZtLCAiY3Jl
YXRlV2FzbVN0cmVhbWluZ1BhcnNlciIsIGZ1bmN0aW9uQ3JlYXRlV2FzbVN0cmVhbWluZ1BhcnNl
ciwgMCk7CisjZW5kaWYKICAgICBhZGRGdW5jdGlvbih2bSwgImdldFByaXZhdGVQcm9wZXJ0eSIs
IGZ1bmN0aW9uR2V0UHJpdmF0ZVByb3BlcnR5LCAyKTsKICAgICBhZGRGdW5jdGlvbih2bSwgInNl
dEltcHVyZUdldHRlckRlbGVnYXRlIiwgZnVuY3Rpb25TZXRJbXB1cmVHZXR0ZXJEZWxlZ2F0ZSwg
Mik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFu
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAppbmRleCBm
NjcyNjg2ZDNmOTlhMGQwZDJlOWMzMjFmMjdiYzBhMWNiZjViMmRkLi40M2M4ZjU2MmFmYTFjMzYz
M2E3ZTZjNjFmNDA5MjJlYzBiZTk3MjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUJCUVBsYW4uY3BwCkBAIC01OSwxMyArNTksMTUgQEAgQkJRUGxhbjo6QkJRUGxhbihDb250
ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGluZm8sIEFzeW5jV29yayB3b3Jr
LAogfQogCiBCQlFQbGFuOjpCQlFQbGFuKENvbnRleHQqIGNvbnRleHQsIFZlY3Rvcjx1aW50OF90
PiYmIHNvdXJjZSwgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFzaywgQ3JlYXRl
RW1iZWRkZXJXcmFwcGVyJiYgY3JlYXRlRW1iZWRkZXJXcmFwcGVyLCBUaHJvd1dhc21FeGNlcHRp
b24gdGhyb3dXYXNtRXhjZXB0aW9uKQotICAgIDogQkJRUGxhbihjb250ZXh0LCBhZG9wdFJlZigq
bmV3IE1vZHVsZUluZm9ybWF0aW9uKFdURk1vdmUoc291cmNlKSkpLCB3b3JrLCBXVEZNb3ZlKHRh
c2spLCBXVEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlvbikK
KyAgICA6IEJhc2UoY29udGV4dCwgTW9kdWxlSW5mb3JtYXRpb246OmNyZWF0ZSgpLCBXVEZNb3Zl
KHRhc2spLCBXVEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlv
bikKKyAgICAsIG1fc291cmNlKFdURk1vdmUoc291cmNlKSkKKyAgICAsIG1fc3RhdGUoU3RhdGU6
OkluaXRpYWwpCisgICAgLCBtX2FzeW5jV29yayh3b3JrKQogewotICAgIG1fc3RhdGUgPSBTdGF0
ZTo6SW5pdGlhbDsKIH0KIAotQkJRUGxhbjo6QkJRUGxhbihDb250ZXh0KiBjb250ZXh0LCBjb25z
dCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgsIEFzeW5jV29yayB3b3JrLCBD
b21wbGV0aW9uVGFzayYmIHRhc2spCi0gICAgOiBCYXNlKGNvbnRleHQsIHNvdXJjZSwgc291cmNl
TGVuZ3RoLCBXVEZNb3ZlKHRhc2spKQorQkJRUGxhbjo6QkJRUGxhbihDb250ZXh0KiBjb250ZXh0
LCBBc3luY1dvcmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0YXNrKQorICAgIDogQmFzZShjb250
ZXh0LCBXVEZNb3ZlKHRhc2spKQogICAgICwgbV9zdGF0ZShTdGF0ZTo6SW5pdGlhbCkKICAgICAs
IG1fYXN5bmNXb3JrKHdvcmspCiB7CkBAIC05MCw3ICs5Miw3IEBAIHZvaWQgQkJRUGxhbjo6bW92
ZVRvU3RhdGUoU3RhdGUgc3RhdGUpCiAgICAgbV9zdGF0ZSA9IHN0YXRlOwogfQogCi1ib29sIEJC
UVBsYW46OnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKQorYm9vbCBCQlFQbGFuOjpwYXJzZUFuZFZh
bGlkYXRlTW9kdWxlKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IHNvdXJjZUxlbmd0aCkK
IHsKICAgICBpZiAobV9zdGF0ZSAhPSBTdGF0ZTo6SW5pdGlhbCkKICAgICAgICAgcmV0dXJuIHRy
dWU7CkBAIC0xMDEsNyArMTAzLDcgQEAgYm9vbCBCQlFQbGFuOjpwYXJzZUFuZFZhbGlkYXRlTW9k
dWxlKCkKICAgICAgICAgc3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CiAKICAgICB7
Ci0gICAgICAgIE1vZHVsZVBhcnNlciBtb2R1bGVQYXJzZXIobV9zb3VyY2UsIG1fc291cmNlTGVu
Z3RoLCBtX21vZHVsZUluZm9ybWF0aW9uKTsKKyAgICAgICAgTW9kdWxlUGFyc2VyIG1vZHVsZVBh
cnNlcihzb3VyY2UsIHNvdXJjZUxlbmd0aCwgbV9tb2R1bGVJbmZvcm1hdGlvbik7CiAgICAgICAg
IGF1dG8gcGFyc2VSZXN1bHQgPSBtb2R1bGVQYXJzZXIucGFyc2UoKTsKICAgICAgICAgaWYgKCFw
YXJzZVJlc3VsdCkgewogICAgICAgICAgICAgQmFzZTo6ZmFpbChob2xkTG9jayhtX2xvY2spLCBX
VEZNb3ZlKHBhcnNlUmVzdWx0LmVycm9yKCkpKTsKQEAgLTEwOSwyMCArMTExLDIxIEBAIGJvb2wg
QkJRUGxhbjo6cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpCiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBjb25zdCBhdXRvJiBmdW5jdGlvbkxvY2F0aW9ucyA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1
bmN0aW9uTG9jYXRpb25JbkJpbmFyeTsKLSAgICBmb3IgKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgg
PSAwOyBmdW5jdGlvbkluZGV4IDwgZnVuY3Rpb25Mb2NhdGlvbnMuc2l6ZSgpOyArK2Z1bmN0aW9u
SW5kZXgpIHsKLSAgICAgICAgZGF0YUxvZ0xuSWYoV2FzbUJCUVBsYW5JbnRlcm5hbDo6dmVyYm9z
ZSwgIlByb2Nlc3NpbmcgZnVuY3Rpb24gc3RhcnRpbmcgYXQ6ICIsIGZ1bmN0aW9uTG9jYXRpb25z
W2Z1bmN0aW9uSW5kZXhdLnN0YXJ0LCAiIGFuZCBlbmRpbmcgYXQ6ICIsIGZ1bmN0aW9uTG9jYXRp
b25zW2Z1bmN0aW9uSW5kZXhdLmVuZCk7Ci0gICAgICAgIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9u
U3RhcnQgPSBtX3NvdXJjZSArIGZ1bmN0aW9uTG9jYXRpb25zW2Z1bmN0aW9uSW5kZXhdLnN0YXJ0
OwotICAgICAgICBzaXplX3QgZnVuY3Rpb25MZW5ndGggPSBmdW5jdGlvbkxvY2F0aW9uc1tmdW5j
dGlvbkluZGV4XS5lbmQgLSBmdW5jdGlvbkxvY2F0aW9uc1tmdW5jdGlvbkluZGV4XS5zdGFydDsK
LSAgICAgICAgQVNTRVJUKGZ1bmN0aW9uTGVuZ3RoIDw9IG1fc291cmNlTGVuZ3RoKTsKKyAgICBj
b25zdCBhdXRvJiBmdW5jdGlvbnMgPSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbnM7Cisg
ICAgZm9yICh1bnNpZ25lZCBmdW5jdGlvbkluZGV4ID0gMDsgZnVuY3Rpb25JbmRleCA8IGZ1bmN0
aW9ucy5zaXplKCk7ICsrZnVuY3Rpb25JbmRleCkgeworICAgICAgICBjb25zdCBhdXRvJiBmdW5j
dGlvbiA9IGZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XTsKKyAgICAgICAgZGF0YUxvZ0xuSWYoV2Fz
bUJCUVBsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIlByb2Nlc3NpbmcgZnVuY3Rpb24gc3RhcnRpbmcg
YXQ6ICIsIGZ1bmN0aW9uLnN0YXJ0LCAiIGFuZCBlbmRpbmcgYXQ6ICIsIGZ1bmN0aW9uLmVuZCk7
CisgICAgICAgIHNpemVfdCBmdW5jdGlvbkxlbmd0aCA9IGZ1bmN0aW9uLmVuZCAtIGZ1bmN0aW9u
LnN0YXJ0OworICAgICAgICBBU1NFUlQoZnVuY3Rpb25MZW5ndGggPD0gc291cmNlTGVuZ3RoKTsK
KyAgICAgICAgQVNTRVJUKGZ1bmN0aW9uTGVuZ3RoID09IGZ1bmN0aW9uLmRhdGEuc2l6ZSgpKTsK
ICAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0
aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tmdW5jdGlvbkluZGV4XTsKICAg
ICAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6
Z2V0KHNpZ25hdHVyZUluZGV4KTsKIAotICAgICAgICBhdXRvIHZhbGlkYXRpb25SZXN1bHQgPSB2
YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUs
IG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCkpOworICAgICAgICBhdXRvIHZhbGlkYXRpb25SZXN1
bHQgPSB2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRh
LnNpemUoKSwgc2lnbmF0dXJlLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpKTsKICAgICAgICAg
aWYgKCF2YWxpZGF0aW9uUmVzdWx0KSB7CiAgICAgICAgICAgICBpZiAoV2FzbUJCUVBsYW5JbnRl
cm5hbDo6dmVyYm9zZSkgewogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBmdW5jdGlvbkxlbmd0aDsgKytpKQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKFJhd1Bv
aW50ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZnVuY3Rpb25TdGFydFtpXSkpLCAiLCAiKTsK
KyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KGZ1bmN0aW9uLmRhdGFbaV0pKSwgIiwgIik7CiAgICAgICAgICAgICAgICAgZGF0YUxv
Z0xuKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBCYXNlOjpmYWlsKGhvbGRMb2NrKG1f
bG9jayksIG1ha2VTdHJpbmcodmFsaWRhdGlvblJlc3VsdC5lcnJvcigpLCAiLCBpbiBmdW5jdGlv
biBhdCBpbmRleCAiLCBTdHJpbmc6Om51bWJlcihmdW5jdGlvbkluZGV4KSkpOyAvLyBGSVhNRSBt
YWtlIHRoaXMgYW4gRXhwZWN0ZWQuCkBAIC0xNTYsMTggKzE1OSwxOCBAQCB2b2lkIEJCUVBsYW46
OnByZXBhcmUoKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9OwogCi0gICAgY29uc3QgYXV0
byYgZnVuY3Rpb25Mb2NhdGlvbnMgPSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbkxvY2F0
aW9uSW5CaW5hcnk7CisgICAgY29uc3QgYXV0byYgZnVuY3Rpb25zID0gbV9tb2R1bGVJbmZvcm1h
dGlvbi0+ZnVuY3Rpb25zOwogICAgIGlmICghdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fd2FzbVRvV2Fz
bUV4aXRTdHVicywgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJ
bmRpY2VzLnNpemUoKSwgIiBXZWJBc3NlbWJseSB0byBKYXZhU2NyaXB0IHN0dWJzIikKLSAgICAg
ICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5j
dGlvbkxvY2F0aW9ucy5zaXplKCksICIgdW5saW5rZWQgV2ViQXNzZW1ibHkgdG8gV2ViQXNzZW1i
bHkgY2FsbHMiKQotICAgICAgICB8fCAhdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fd2FzbUludGVybmFs
RnVuY3Rpb25zLCBmdW5jdGlvbkxvY2F0aW9ucy5zaXplKCksICIgV2ViQXNzZW1ibHkgZnVuY3Rp
b25zIikKLSAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX2NvbXBpbGF0aW9uQ29udGV4
dHMsIGZ1bmN0aW9uTG9jYXRpb25zLnNpemUoKSwgIiBjb21waWxhdGlvbiBjb250ZXh0cyIpCi0g
ICAgICAgIHx8ICF0cnlSZXNlcnZlQ2FwYWNpdHkobV90aWVyVXBDb3VudHMsIGZ1bmN0aW9uTG9j
YXRpb25zLnNpemUoKSwgIiB0aWVyLXVwIGNvdW50cyIpKQorICAgICAgICB8fCAhdHJ5UmVzZXJ2
ZUNhcGFjaXR5KG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9ucy5zaXplKCksICIg
dW5saW5rZWQgV2ViQXNzZW1ibHkgdG8gV2ViQXNzZW1ibHkgY2FsbHMiKQorICAgICAgICB8fCAh
dHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fd2FzbUludGVybmFsRnVuY3Rpb25zLCBmdW5jdGlvbnMuc2l6
ZSgpLCAiIFdlYkFzc2VtYmx5IGZ1bmN0aW9ucyIpCisgICAgICAgIHx8ICF0cnlSZXNlcnZlQ2Fw
YWNpdHkobV9jb21waWxhdGlvbkNvbnRleHRzLCBmdW5jdGlvbnMuc2l6ZSgpLCAiIGNvbXBpbGF0
aW9uIGNvbnRleHRzIikKKyAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX3RpZXJVcENv
dW50cywgZnVuY3Rpb25zLnNpemUoKSwgIiB0aWVyLXVwIGNvdW50cyIpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLnJlc2l6ZShmdW5jdGlvbkxvY2F0
aW9ucy5zaXplKCkpOwotICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zLnJlc2l6ZShmdW5jdGlv
bkxvY2F0aW9ucy5zaXplKCkpOwotICAgIG1fY29tcGlsYXRpb25Db250ZXh0cy5yZXNpemUoZnVu
Y3Rpb25Mb2NhdGlvbnMuc2l6ZSgpKTsKLSAgICBtX3RpZXJVcENvdW50cy5yZXNpemUoZnVuY3Rp
b25Mb2NhdGlvbnMuc2l6ZSgpKTsKKyAgICBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLnJlc2l6
ZShmdW5jdGlvbnMuc2l6ZSgpKTsKKyAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5yZXNpemUo
ZnVuY3Rpb25zLnNpemUoKSk7CisgICAgbV9jb21waWxhdGlvbkNvbnRleHRzLnJlc2l6ZShmdW5j
dGlvbnMuc2l6ZSgpKTsKKyAgICBtX3RpZXJVcENvdW50cy5yZXNpemUoZnVuY3Rpb25zLnNpemUo
KSk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGltcG9ydEluZGV4ID0gMDsgaW1wb3J0SW5kZXggPCBt
X21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRzLnNpemUoKTsgKytpbXBvcnRJbmRleCkgewogICAg
ICAgICBJbXBvcnQqIGltcG9ydCA9ICZtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRzW2ltcG9y
dEluZGV4XTsKQEAgLTI0MSw3ICsyNDQsNyBAQCB2b2lkIEJCUVBsYW46OmNvbXBpbGVGdW5jdGlv
bnMoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogICAgIFRocmVhZENvdW50SG9sZGVyIGhvbGRl
cigqdGhpcyk7CiAKICAgICBzaXplX3QgYnl0ZXNDb21waWxlZCA9IDA7Ci0gICAgY29uc3QgYXV0
byYgZnVuY3Rpb25Mb2NhdGlvbnMgPSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbkxvY2F0
aW9uSW5CaW5hcnk7CisgICAgY29uc3QgYXV0byYgZnVuY3Rpb25zID0gbV9tb2R1bGVJbmZvcm1h
dGlvbi0+ZnVuY3Rpb25zOwogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIGlmIChlZmZvcnQg
PT0gUGFydGlhbCAmJiBieXRlc0NvbXBpbGVkID49IE9wdGlvbnM6OndlYkFzc2VtYmx5UGFydGlh
bENvbXBpbGVMaW1pdCgpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjQ5LDcgKzI1Miw3IEBA
IHZvaWQgQkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQp
CiAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXg7CiAgICAgICAgIHsKICAgICAgICAgICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKLSAgICAgICAgICAgIGlmIChtX2N1cnJl
bnRJbmRleCA+PSBmdW5jdGlvbkxvY2F0aW9ucy5zaXplKCkpIHsKKyAgICAgICAgICAgIGlmICht
X2N1cnJlbnRJbmRleCA+PSBmdW5jdGlvbnMuc2l6ZSgpKSB7CiAgICAgICAgICAgICAgICAgaWYg
KGhhc1dvcmsoKSkKICAgICAgICAgICAgICAgICAgICAgbW92ZVRvU3RhdGUoU3RhdGU6OkNvbXBp
bGVkKTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0yNTgsMTggKzI2MSwxNiBAQCB2b2lk
IEJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbnMoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogICAg
ICAgICAgICAgKyttX2N1cnJlbnRJbmRleDsKICAgICAgICAgfQogCi0gICAgICAgIGNvbnN0IHVp
bnQ4X3QqIGZ1bmN0aW9uU3RhcnQgPSBtX3NvdXJjZSArIGZ1bmN0aW9uTG9jYXRpb25zW2Z1bmN0
aW9uSW5kZXhdLnN0YXJ0OwotICAgICAgICBzaXplX3QgZnVuY3Rpb25MZW5ndGggPSBmdW5jdGlv
bkxvY2F0aW9uc1tmdW5jdGlvbkluZGV4XS5lbmQgLSBmdW5jdGlvbkxvY2F0aW9uc1tmdW5jdGlv
bkluZGV4XS5zdGFydDsKLSAgICAgICAgQVNTRVJUKGZ1bmN0aW9uTGVuZ3RoIDw9IG1fc291cmNl
TGVuZ3RoKTsKKyAgICAgICAgY29uc3QgYXV0byYgZnVuY3Rpb24gPSBmdW5jdGlvbnNbZnVuY3Rp
b25JbmRleF07CiAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1
bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNbZnVuY3Rpb25J
bmRleF07CiAgICAgICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5m
b3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CiAgICAgICAgIHVuc2lnbmVkIGZ1bmN0aW9u
SW5kZXhTcGFjZSA9IG1fd2FzbVRvV2FzbUV4aXRTdHVicy5zaXplKCkgKyBmdW5jdGlvbkluZGV4
OwogICAgICAgICBBU1NFUlRfVU5VU0VEKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZv
cm1hdGlvbi0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5k
ZXhTcGFjZSkgPT0gc2lnbmF0dXJlSW5kZXgpOwotICAgICAgICBBU1NFUlQodmFsaWRhdGVGdW5j
dGlvbihmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBtX21vZHVsZUlu
Zm9ybWF0aW9uLmdldCgpKSk7CisgICAgICAgIEFTU0VSVCh2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0
aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRhLnNpemUoKSwgc2lnbmF0dXJlLCBtX21vZHVs
ZUluZm9ybWF0aW9uLmdldCgpKSk7CiAKICAgICAgICAgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxs
c1tmdW5jdGlvbkluZGV4XSA9IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPigpOwogICAg
ICAgICBUaWVyVXBDb3VudCogdGllclVwID0gT3B0aW9uczo6dXNlQkJRVGllclVwQ2hlY2tzKCkg
PyAmbV90aWVyVXBDb3VudHNbZnVuY3Rpb25JbmRleF0gOiBudWxscHRyOwotICAgICAgICBhdXRv
IHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZShtX2NvbXBpbGF0aW9uQ29u
dGV4dHNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWdu
YXR1cmUsIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG1fbW9kdWxl
SW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBmdW5j
dGlvbkluZGV4LCB0aWVyVXAsIG1fdGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICAgICAgYXV0byBw
YXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUobV9jb21waWxhdGlvbkNvbnRl
eHRzW2Z1bmN0aW9uSW5kZXhdLCBmdW5jdGlvbi5kYXRhLmRhdGEoKSwgZnVuY3Rpb24uZGF0YS5z
aXplKCksIHNpZ25hdHVyZSwgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4
XSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6OkJC
UU1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwgbV90aHJvd1dhc21FeGNlcHRpb24pOwogCiAg
ICAgICAgIGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxlUmVzdWx0KSkgewogICAgICAgICAg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwpAQCAtMjc3LDcgKzI3OCw3IEBAIHZv
aWQgQkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAg
ICAgICAgICAgICAgICAgLy8gTXVsdGlwbGUgY29tcGlsZXMgY291bGQgZmFpbCBzaW11bHRhbmVv
dXNseS4gV2UgYXJiaXRyYXJpbHkgY2hvb3NlIHRoZSBmaXJzdC4KICAgICAgICAgICAgICAgICBm
YWlsKGxvY2tlciwgbWFrZVN0cmluZyhwYXJzZUFuZENvbXBpbGVSZXN1bHQuZXJyb3IoKSwgIiwg
aW4gZnVuY3Rpb24gYXQgaW5kZXggIiwgU3RyaW5nOjpudW1iZXIoZnVuY3Rpb25JbmRleCkpKTsg
Ly8gRklYTUUgbWFrZSB0aGlzIGFuIEV4cGVjdGVkLgogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgbV9jdXJyZW50SW5kZXggPSBmdW5jdGlvbkxvY2F0aW9ucy5zaXplKCk7CisgICAgICAgICAg
ICBtX2N1cnJlbnRJbmRleCA9IGZ1bmN0aW9ucy5zaXplKCk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KIApAQCAtMjg5LDE3ICsyOTAsMTcgQEAgdm9pZCBCQlFQbGFuOjpjb21waWxl
RnVuY3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAgICAgICAgICAgIEFTU0VSVF9V
TlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CiAgICAgICAgIH0KIAotICAgICAgICBi
eXRlc0NvbXBpbGVkICs9IGZ1bmN0aW9uTGVuZ3RoOworICAgICAgICBieXRlc0NvbXBpbGVkICs9
IGZ1bmN0aW9uLmRhdGEuc2l6ZSgpOwogICAgIH0KIH0KIAogdm9pZCBCQlFQbGFuOjpjb21wbGV0
ZShjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyKQogewotICAgIEFTU0VSVChtX3N0YXRlICE9
IFN0YXRlOjpDb21waWxlZCB8fCBtX2N1cnJlbnRJbmRleCA+PSBtX21vZHVsZUluZm9ybWF0aW9u
LT5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpKTsKKyAgICBBU1NFUlQobV9zdGF0ZSAh
PSBTdGF0ZTo6Q29tcGlsZWQgfHwgbV9jdXJyZW50SW5kZXggPj0gbV9tb2R1bGVJbmZvcm1hdGlv
bi0+ZnVuY3Rpb25zLnNpemUoKSk7CiAgICAgZGF0YUxvZ0xuSWYoV2FzbUJCUVBsYW5JbnRlcm5h
bDo6dmVyYm9zZSwgIlN0YXJ0aW5nIENvbXBsZXRpb24iKTsKIAogICAgIGlmICghZmFpbGVkKCkg
JiYgbV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGlsZWQpIHsKLSAgICAgICAgZm9yICh1aW50MzJfdCBm
dW5jdGlvbkluZGV4ID0gMDsgZnVuY3Rpb25JbmRleCA8IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1
bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCk7IGZ1bmN0aW9uSW5kZXgrKykgeworICAgICAg
ICBmb3IgKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXggPSAwOyBmdW5jdGlvbkluZGV4IDwgbV9tb2R1
bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25zLnNpemUoKTsgZnVuY3Rpb25JbmRleCsrKSB7CiAgICAg
ICAgICAgICBDb21waWxhdGlvbkNvbnRleHQmIGNvbnRleHQgPSBtX2NvbXBpbGF0aW9uQ29udGV4
dHNbZnVuY3Rpb25JbmRleF07CiAgICAgICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJ
bmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRp
Y2VzW2Z1bmN0aW9uSW5kZXhdOwogICAgICAgICAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1
cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKQEAgLTM1MSw3
ICszNTIsNyBAQCB2b2lkIEJCUVBsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQog
ewogICAgIHN3aXRjaCAobV9zdGF0ZSkgewogICAgIGNhc2UgU3RhdGU6OkluaXRpYWw6Ci0gICAg
ICAgIHBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKTsKKyAgICAgICAgcGFyc2VBbmRWYWxpZGF0ZU1v
ZHVsZShtX3NvdXJjZS5kYXRhKCksIG1fc291cmNlLnNpemUoKSk7CiAgICAgICAgIGlmICghaGFz
V29yaygpKSB7CiAgICAgICAgICAgICBBU1NFUlQoaXNDb21wbGV0ZSgpKTsKICAgICAgICAgICAg
IHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQ
bGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oCmluZGV4IGQ4
ODE0NWQ3ZGRkYmQ2YjE5MTA1Nzc4MTdjZTdjYjhkYjQxMjFkMWUuLjk0MWFjNzVmNzBlNmY5MTFi
OWZiYjNkZGIxMzc4Y2NmOTY5OTQxYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CQlFQbGFuLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUJCUVBsYW4uaApAQCAtNTIsMTEgKzUyLDE0IEBAIGNsYXNzIEJCUVBsYW4gZmluYWwgOiBwdWJs
aWMgUGxhbiB7CiAgICAgLy8gTm90ZTogQ29tcGxldGlvblRhc2sgc2hvdWxkIG5vdCBob2xkIGEg
cmVmZXJlbmNlIHRvIHRoZSBQbGFuIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGEgcmVmZXJlbmNl
IGN5Y2xlLgogICAgIEJCUVBsYW4oQ29udGV4dCosIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4sIEFz
eW5jV29yaywgQ29tcGxldGlvblRhc2smJiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93
V2FzbUV4Y2VwdGlvbik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQkJRUGxhbihDb250ZXh0Kiwg
VmVjdG9yPHVpbnQ4X3Q+JiYsIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJiwgQ3JlYXRlRW1i
ZWRkZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4Y2VwdGlvbik7Ci0gICAgLy8gTm90ZTogVGhpcyBj
b25zdHJ1Y3RvciBzaG91bGQgb25seSBiZSB1c2VkIGlmIHlvdSBhcmUgbm90IGFjdHVhbGx5IGJ1
aWxkaW5nIGEgbW9kdWxlIGUuZy4gdmFsaWRhdGlvbi9mdW5jdGlvbiB0ZXN0cwotICAgIC8vIEZJ
WE1FOiBXaGVuIHdlIGdldCByaWQgb2YgZnVuY3Rpb24gdGVzdHMgd2Ugc2hvdWxkIHJlbW92ZSBB
c3luY1dvcmsgZnJvbSB0aGlzIGNvbnN0cnVjdG9yLgotICAgIEpTX0VYUE9SVF9QUklWQVRFIEJC
UVBsYW4oQ29udGV4dCosIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIEFzeW5jV29yaywgQ29tcGxl
dGlvblRhc2smJik7CisgICAgQkJRUGxhbihDb250ZXh0KiwgQXN5bmNXb3JrLCBDb21wbGV0aW9u
VGFzayYmKTsKIAotICAgIGJvb2wgcGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpOworCisgICAgYm9v
bCBwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBwYXJzZUFu
ZFZhbGlkYXRlTW9kdWxlKG1fc291cmNlLmRhdGEoKSwgbV9zb3VyY2Uuc2l6ZSgpKTsKKyAgICB9
CisgICAgYm9vbCBwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3Qp
OwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmVwYXJlKCk7CiAgICAgdm9pZCBjb21w
aWxlRnVuY3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0KTsKQEAgLTEzNiw2ICsxMzksNyBAQCBjbGFz
cyBCQlFQbGFuIGZpbmFsIDogcHVibGljIFBsYW4gewogCiAgICAgY29uc3QgY2hhciogc3RhdGVT
dHJpbmcoU3RhdGUpOwogICAgIAorICAgIFZlY3Rvcjx1aW50OF90PiBtX3NvdXJjZTsKICAgICBC
YWc8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7CiAgICAgVmVjdG9yPE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiBtX3dhc21Ub1dhc21FeGl0U3R1YnM7CiAgICAg
VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPj4gbV93YXNtSW50ZXJuYWxG
dW5jdGlvbnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9y
bWF0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKaW5kZXggMjc4
NGU5MGFmMzg0MWEwMmU1ODczMzMyY2ZmOGJiMDY0ODdlMzNkZS4uZTQzZjRlZDkzNjE2N2ZmMjkz
OGQ4MzdhMGNlMDg4ZDQzZDIwYTRlNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUZvcm1hdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21G
b3JtYXQuaApAQCAtMTQwLDkgKzE0MCwxMCBAQCBzdHJ1Y3QgR2xvYmFsIHsKICAgICB1aW50NjRf
dCBpbml0aWFsQml0c09ySW1wb3J0TnVtYmVyIHsgMCB9OwogfTsKIAotc3RydWN0IEZ1bmN0aW9u
TG9jYXRpb25JbkJpbmFyeSB7CitzdHJ1Y3QgRnVuY3Rpb25EYXRhIHsKICAgICBzaXplX3Qgc3Rh
cnQ7CiAgICAgc2l6ZV90IGVuZDsKKyAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKIH07CiAKIGNs
YXNzIEkzMkluaXRFeHByIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTW9kdWxlSW5mb3JtYXRpb24uY3BwCmluZGV4IGNiOGRiMGUwOTNmOTRjZGEzMTZkZDI0YmFm
MzllNTEyZWRhMjAzMTQuLjhhMjU0YzAwMmZiZTllZjkwY2VmMWFiZGZjNDE2OWMxZTQ2YzUzZGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1h
dGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9y
bWF0aW9uLmNwcApAQCAtMzEsMjEgKzMxLDEwIEBACiAjaW5jbHVkZSAiV2FzbU5hbWVTZWN0aW9u
LmgiCiAjaW5jbHVkZSA8d3RmL1NIQTEuaD4KIAotbmFtZXNwYWNlIHsKLUNTdHJpbmcgc2hhMShj
b25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0KQotewotICAgIFNIQTEgaGFzaDsKLSAgICBoYXNo
LmFkZEJ5dGVzKGlucHV0KTsKLSAgICByZXR1cm4gaGFzaC5jb21wdXRlSGV4RGlnZXN0KCk7Ci19
Ci19Ci0KIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKLU1vZHVsZUluZm9ybWF0
aW9uOjpNb2R1bGVJbmZvcm1hdGlvbihWZWN0b3I8dWludDhfdD4mJiBzb3VyY2VCeXRlcykKLSAg
ICA6IHNvdXJjZShXVEZNb3ZlKHNvdXJjZUJ5dGVzKSkKLSAgICAsIGhhc2goT3B0aW9uczo6dXNl
RWFnZXJXZWJBc3NlbWJseU1vZHVsZUhhc2hpbmcoKSA/IHN0ZDo6bWFrZV9vcHRpb25hbChzaGEx
KHNvdXJjZSkpIDogc3RkOjpudWxsb3B0KQotICAgICwgbmFtZVNlY3Rpb24obmV3IE5hbWVTZWN0
aW9uKGhhc2gpKQorTW9kdWxlSW5mb3JtYXRpb246Ok1vZHVsZUluZm9ybWF0aW9uKCkKKyAgICA6
IG5hbWVTZWN0aW9uKE5hbWVTZWN0aW9uOjpjcmVhdGUoKSkKIHsKIH0KIE1vZHVsZUluZm9ybWF0
aW9uOjp+TW9kdWxlSW5mb3JtYXRpb24oKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgKaW5kZXggMGJhYjU3ZTA3MGQyZWEzMzA2
MmYzNjM2NThhMjQxNWU5YmQ1MWUyZC4uZmI1ZTNhMGNkZWQ0ZTczODAyNDMwM2JlNWUwZjU2N2Fm
NTViYTAyNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVs
ZUluZm9ybWF0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVs
ZUluZm9ybWF0aW9uLmgKQEAgLTM0LDExICszNCwxNCBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBXYXNtIHsKIAogc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uIDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPE1vZHVsZUluZm9ybWF0aW9uPiB7Ci0gICAgTW9kdWxlSW5mb3JtYXRpb24o
KSA9IGRlbGV0ZTsKKyAgICBNb2R1bGVJbmZvcm1hdGlvbigpOwogICAgIE1vZHVsZUluZm9ybWF0
aW9uKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJikgPSBkZWxldGU7CiAgICAgTW9kdWxlSW5mb3Jt
YXRpb24oTW9kdWxlSW5mb3JtYXRpb24mJikgPSBkZWxldGU7CiAKLSAgICBNb2R1bGVJbmZvcm1h
dGlvbihWZWN0b3I8dWludDhfdD4mJiBzb3VyY2VCeXRlcyk7CisgICAgc3RhdGljIFJlZjxNb2R1
bGVJbmZvcm1hdGlvbj4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IE1vZHVsZUluZm9ybWF0aW9uKTsKKyAgICB9CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB+
TW9kdWxlSW5mb3JtYXRpb24oKTsKICAgICAKQEAgLTU4LDggKzYxLDggQEAgc3RydWN0IE1vZHVs
ZUluZm9ybWF0aW9uIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPE1vZHVsZUluZm9ybWF0
aW9uPiB7CiAgICAgdWludDMyX3QgaW1wb3J0RnVuY3Rpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJu
IGltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7IH0KICAgICB1aW50MzJfdCBp
bnRlcm5hbEZ1bmN0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBpbnRlcm5hbEZ1bmN0aW9uU2ln
bmF0dXJlSW5kaWNlcy5zaXplKCk7IH0KIAotICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiBzb3Vy
Y2U7Ci0gICAgY29uc3Qgc3RkOjpvcHRpb25hbDxDU3RyaW5nPiBoYXNoOworICAgIHVpbnQzMl90
IG1lbW9yeUNvdW50KCkgY29uc3QgeyByZXR1cm4gbWVtb3J5ID8gMSA6IDA7IH0KKyAgICB1aW50
MzJfdCB0YWJsZUNvdW50KCkgY29uc3QgeyByZXR1cm4gdGFibGVJbmZvcm1hdGlvbiA/IDEgOiAw
OyB9CiAKICAgICBWZWN0b3I8SW1wb3J0PiBpbXBvcnRzOwogICAgIFZlY3RvcjxTaWduYXR1cmVJ
bmRleD4gaW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzOwpAQCAtNjgsNyArNzEsNyBAQCBz
dHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TW9k
dWxlSW5mb3JtYXRpb24+IHsKIAogICAgIE1lbW9yeUluZm9ybWF0aW9uIG1lbW9yeTsKIAotICAg
IFZlY3RvcjxGdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnk+IGZ1bmN0aW9uTG9jYXRpb25JbkJpbmFy
eTsKKyAgICBWZWN0b3I8RnVuY3Rpb25EYXRhPiBmdW5jdGlvbnM7CiAKICAgICBWZWN0b3I8RXhw
b3J0PiBleHBvcnRzOwogICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IHN0YXJ0RnVuY3Rpb25J
bmRleFNwYWNlOwpAQCAtNzgsNyArODEsNyBAQCBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TW9kdWxlSW5mb3JtYXRpb24+IHsKICAgICBWZWN0
b3I8R2xvYmFsPiBnbG9iYWxzOwogICAgIHVuc2lnbmVkIGZpcnN0SW50ZXJuYWxHbG9iYWwgeyAw
IH07CiAgICAgVmVjdG9yPEN1c3RvbVNlY3Rpb24+IGN1c3RvbVNlY3Rpb25zOwotICAgIFJlZlB0
cjxOYW1lU2VjdGlvbj4gbmFtZVNlY3Rpb247CisgICAgUmVmPE5hbWVTZWN0aW9uPiBuYW1lU2Vj
dGlvbjsKIH07CiAKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Nb2R1bGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1v
ZHVsZVBhcnNlci5jcHAKaW5kZXggZjAzZTY5ODdmNGE1MDI1OTFkZjcxZGM4MTU3ODIwODA5OTYx
MzhiNC4uYThlZDhkMmU2YjE5Yzk1ZjY3MWZmY2JjNTQ3ODNkYTc0YzY1MDgwZiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKQEAgLTMyLDE4
ICszMiwxMSBAQAogI2luY2x1ZGUgIldhc21NZW1vcnlJbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUg
Ildhc21OYW1lU2VjdGlvblBhcnNlci5oIgogI2luY2x1ZGUgIldhc21PcHMuaCIKKyNpbmNsdWRl
ICJXYXNtU2VjdGlvblBhcnNlci5oIgogI2luY2x1ZGUgIldhc21TZWN0aW9ucy5oIgogCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi1BTFdBWVNfSU5MSU5FIEkzMkluaXRFeHBy
IG1ha2VJMzJJbml0RXhwcih1aW50OF90IG9wY29kZSwgdWludDMyX3QgYml0cykKLXsKLSAgICBS
RUxFQVNFX0FTU0VSVChvcGNvZGUgPT0gSTMyQ29uc3QgfHwgb3Bjb2RlID09IEdldEdsb2JhbCk7
Ci0gICAgaWYgKG9wY29kZSA9PSBJMzJDb25zdCkKLSAgICAgICAgcmV0dXJuIEkzMkluaXRFeHBy
Ojpjb25zdFZhbHVlKGJpdHMpOwotICAgIHJldHVybiBJMzJJbml0RXhwcjo6Z2xvYmFsSW1wb3J0
KGJpdHMpOwotfQotCiBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2UoKSAtPiBSZXN1bHQKIHsKICAg
ICBjb25zdCBzaXplX3QgbWluU2l6ZSA9IDg7CkBAIC03MSwxOSArNjQsMTkgQEAgYXV0byBNb2R1
bGVQYXJzZXI6OnBhcnNlKCkgLT4gUmVzdWx0CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlVmFyVUludDMyKHNlY3Rpb25MZW5ndGgpLCAiY2FuJ3QgZ2V0ICIsIHNlY3Rpb24sICIg
c2VjdGlvbidzIGxlbmd0aCIpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHNlY3Rpb25M
ZW5ndGggPiBsZW5ndGgoKSAtIG1fb2Zmc2V0LCBzZWN0aW9uLCAiIHNlY3Rpb24gb2Ygc2l6ZSAi
LCBzZWN0aW9uTGVuZ3RoLCAiIHdvdWxkIG92ZXJmbG93IE1vZHVsZSdzIHNpemUiKTsKIAotICAg
ICAgICBhdXRvIGVuZCA9IG1fb2Zmc2V0ICsgc2VjdGlvbkxlbmd0aDsKKyAgICAgICAgU2VjdGlv
blBhcnNlciBwYXJzZXIoc291cmNlKCkgKyBtX29mZnNldCwgc2VjdGlvbkxlbmd0aCwgbV9vZmZz
ZXQsIG1faW5mby5nZXQoKSk7CiAKICAgICAgICAgc3dpdGNoIChzZWN0aW9uKSB7CiAjZGVmaW5l
IFdBU01fU0VDVElPTl9QQVJTRShOQU1FLCBJRCwgREVTQ1JJUFRJT04pICAgICAgICAgICAgICAg
ICAgIFwKICAgICAgICAgY2FzZSBTZWN0aW9uOjpOQU1FOiB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlM
UyhwYXJzZSAjIyBOQU1FKCkpOyAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQVNNX0ZBSUxf
SUZfSEVMUEVSX0ZBSUxTKHBhcnNlci5wYXJzZSAjIyBOQU1FKCkpOyAgICAgICAgICAgICBcCiAg
ICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKICAgICAgICAgfQogICAgICAgICBGT1JfRUFDSF9LTk9XTl9XQVNNX1NFQ1RJ
T04oV0FTTV9TRUNUSU9OX1BBUlNFKQogI3VuZGVmIFdBU01fU0VDVElPTl9QQVJTRQogCiAgICAg
ICAgIGNhc2UgU2VjdGlvbjo6Q3VzdG9tOiB7Ci0gICAgICAgICAgICBXQVNNX0ZBSUxfSUZfSEVM
UEVSX0ZBSUxTKHBhcnNlQ3VzdG9tKHNlY3Rpb25MZW5ndGgpKTsKKyAgICAgICAgICAgIFdBU01f
RkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VyLnBhcnNlQ3VzdG9tKCkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KIApAQCAtOTMsNTM4ICs4NiwyNCBAQCBhdXRvIE1vZHVsZVBhcnNl
cjo6cGFyc2UoKSAtPiBSZXN1bHQKICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRihlbmQgIT0gbV9vZmZzZXQsICJwYXJzaW5nIGVuZGVkIGJlZm9yZSB0
aGUgZW5kIG9mICIsIHNlY3Rpb24sICIgc2VjdGlvbiIpOworICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKHBhcnNlci5sZW5ndGgoKSAhPSBwYXJzZXIub2Zmc2V0KCksICJwYXJzaW5nIGVuZGVk
IGJlZm9yZSB0aGUgZW5kIG9mICIsIHNlY3Rpb24sICIgc2VjdGlvbiIpOworCisgICAgICAgIG1f
b2Zmc2V0ICs9IHNlY3Rpb25MZW5ndGg7CiAKIAogICAgICAgICBpZiAoaXNLbm93blNlY3Rpb24o
c2VjdGlvbikpCiAgICAgICAgICAgICBwcmV2aW91c0tub3duU2VjdGlvbiA9IHNlY3Rpb247CiAg
ICAgfQogCi0gICAgcmV0dXJuIHsgfTsKLX0KLQotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlVHlw
ZSgpIC0+IFBhcnRpYWxSZXN1bHQKLXsKLSAgICB1aW50MzJfdCBjb3VudDsKLQotICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGNvdW50KSwgImNhbid0IGdldCBUeXBlIHNl
Y3Rpb24ncyBjb3VudCIpOwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoY291bnQgPiBtYXhUeXBl
cywgIlR5cGUgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgY291bnQsICIgbWF4aW11bSAi
LCBtYXhUeXBlcyk7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT51c2VkU2lnbmF0
dXJlcy50cnlSZXNlcnZlQ2FwYWNpdHkoY291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1l
bW9yeSBmb3IgVHlwZSBzZWN0aW9uJ3MgIiwgY291bnQsICIgZW50cmllcyIpOwotCi0gICAgZm9y
ICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgaW50OF90IHR5cGU7
Ci0gICAgICAgIHVpbnQzMl90IGFyZ3VtZW50Q291bnQ7Ci0gICAgICAgIFZlY3RvcjxUeXBlPiBh
cmd1bWVudFR5cGVzOwotCi0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlSW50Nyh0
eXBlKSwgImNhbid0IGdldCAiLCBpLCAidGggVHlwZSdzIHR5cGUiKTsKLSAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRih0eXBlICE9IEZ1bmMsIGksICJ0aCBUeXBlIGlzIG5vbi1GdW5jICIsIHR5
cGUpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihhcmd1bWVu
dENvdW50KSwgImNhbid0IGdldCAiLCBpLCAidGggVHlwZSdzIGFyZ3VtZW50IGNvdW50Iik7Ci0g
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoYXJndW1lbnRDb3VudCA+IG1heEZ1bmN0aW9uUGFy
YW1zLCBpLCAidGggYXJndW1lbnQgY291bnQgaXMgdG9vIGJpZyAiLCBhcmd1bWVudENvdW50LCAi
IG1heGltdW0gIiwgbWF4RnVuY3Rpb25QYXJhbXMpOwotICAgICAgICBSZWZQdHI8U2lnbmF0dXJl
PiBtYXliZVNpZ25hdHVyZSA9IFNpZ25hdHVyZTo6dHJ5Q3JlYXRlKGFyZ3VtZW50Q291bnQpOwot
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtYXliZVNpZ25hdHVyZSwgImNhbid0IGFsbG9j
YXRlIGVub3VnaCBtZW1vcnkgZm9yIFR5cGUgc2VjdGlvbidzICIsIGksICJ0aCBzaWduYXR1cmUi
KTsKLSAgICAgICAgUmVmPFNpZ25hdHVyZT4gc2lnbmF0dXJlID0gbWF5YmVTaWduYXR1cmUucmVs
ZWFzZU5vbk51bGwoKTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJndW1l
bnRDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBUeXBlIGFyZ3VtZW50VHlwZTsKLSAgICAgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFsdWVUeXBlKGFyZ3VtZW50VHlwZSksICJj
YW4ndCBnZXQgIiwgaSwgInRoIGFyZ3VtZW50IFR5cGUiKTsKLSAgICAgICAgICAgIHNpZ25hdHVy
ZS0+YXJndW1lbnQoaSkgPSBhcmd1bWVudFR5cGU7Ci0gICAgICAgIH0KLQotICAgICAgICB1aW50
OF90IHJldHVybkNvdW50OwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJ
bnQxKHJldHVybkNvdW50KSwgImNhbid0IGdldCAiLCBpLCAidGggVHlwZSdzIHJldHVybiBjb3Vu
dCIpOwotICAgICAgICBUeXBlIHJldHVyblR5cGU7Ci0gICAgICAgIGlmIChyZXR1cm5Db3VudCkg
ewotICAgICAgICAgICAgVHlwZSB2YWx1ZTsKLSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIXBhcnNlVmFsdWVUeXBlKHZhbHVlKSwgImNhbid0IGdldCAiLCBpLCAidGggVHlwZSdzIHJl
dHVybiB2YWx1ZSIpOwotICAgICAgICAgICAgcmV0dXJuVHlwZSA9IHN0YXRpY19jYXN0PFR5cGU+
KHZhbHVlKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICByZXR1cm5UeXBlID0gVHlwZTo6
Vm9pZDsKLSAgICAgICAgc2lnbmF0dXJlLT5yZXR1cm5UeXBlKCkgPSByZXR1cm5UeXBlOwotCi0g
ICAgICAgIHN0ZDo6cGFpcjxTaWduYXR1cmVJbmRleCwgUmVmPFNpZ25hdHVyZT4+IHJlc3VsdCA9
IFNpZ25hdHVyZUluZm9ybWF0aW9uOjphZG9wdChXVEZNb3ZlKHNpZ25hdHVyZSkpOwotICAgICAg
ICBtX2luZm8tPnVzZWRTaWduYXR1cmVzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKHJlc3VsdC5z
ZWNvbmQpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQotYXV0byBNb2R1bGVQYXJzZXI6
OnBhcnNlSW1wb3J0KCkgLT4gUGFydGlhbFJlc3VsdAotewotICAgIHVpbnQzMl90IGltcG9ydENv
dW50OwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGltcG9ydENvdW50
KSwgImNhbid0IGdldCBJbXBvcnQgc2VjdGlvbidzIGNvdW50Iik7Ci0gICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihpbXBvcnRDb3VudCA+IG1heEltcG9ydHMsICJJbXBvcnQgc2VjdGlvbidzIGNvdW50
IGlzIHRvbyBiaWcgIiwgaW1wb3J0Q291bnQsICIgbWF4aW11bSAiLCBtYXhJbXBvcnRzKTsKLSAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmdsb2JhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5
KGltcG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGltcG9y
dENvdW50LCAiIGdsb2JhbHMiKTsgLy8gRklYTUUgdGhpcyBvdmVyLWFsbG9jYXRlcyB3aGVuIHdl
IGZpeCB0aGUgRklYTUVzIGJlbG93LgotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+
aW1wb3J0cy50cnlSZXNlcnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUg
ZW5vdWdoIG1lbW9yeSBmb3IgIiwgaW1wb3J0Q291bnQsICIgaW1wb3J0cyIpOyAvLyBGSVhNRSB0
aGlzIG92ZXItYWxsb2NhdGVzIHdoZW4gd2UgZml4IHRoZSBGSVhNRXMgYmVsb3cuCi0gICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5pbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMu
dHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBt
ZW1vcnkgZm9yICIsIGltcG9ydENvdW50LCAiIGltcG9ydCBmdW5jdGlvbiBzaWduYXR1cmVzIik7
IC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxv
dy4KLQotICAgIGZvciAodWludDMyX3QgaW1wb3J0TnVtYmVyID0gMDsgaW1wb3J0TnVtYmVyIDwg
aW1wb3J0Q291bnQ7ICsraW1wb3J0TnVtYmVyKSB7Ci0gICAgICAgIHVpbnQzMl90IG1vZHVsZUxl
bjsKLSAgICAgICAgdWludDMyX3QgZmllbGRMZW47Ci0gICAgICAgIE5hbWUgbW9kdWxlU3RyaW5n
OwotICAgICAgICBOYW1lIGZpZWxkU3RyaW5nOwotICAgICAgICBFeHRlcm5hbEtpbmQga2luZDsK
LSAgICAgICAgdW5zaWduZWQga2luZEluZGV4IHsgMCB9OwotCi0gICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKG1vZHVsZUxlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0
TnVtYmVyLCAidGggSW1wb3J0J3MgbW9kdWxlIG5hbWUgbGVuZ3RoIik7Ci0gICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVVVEY4U3RyaW5nKG1vZHVsZVN0cmluZywgbW9kdWxlTGVu
KSwgImNhbid0IGdldCAiLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQncyBtb2R1bGUgbmFtZSBv
ZiBsZW5ndGggIiwgbW9kdWxlTGVuKTsKLQotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFw
YXJzZVZhclVJbnQzMihmaWVsZExlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGgg
SW1wb3J0J3MgZmllbGQgbmFtZSBsZW5ndGggaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICIn
Iik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVVVEY4U3RyaW5nKGZpZWxk
U3RyaW5nLCBmaWVsZExlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0
J3MgZmllbGQgbmFtZSBvZiBsZW5ndGggIiwgbW9kdWxlTGVuLCAiIGluIG1vZHVsZSAnIiwgbW9k
dWxlU3RyaW5nLCAiJyIpOwotCi0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlRXh0
ZXJuYWxLaW5kKGtpbmQpLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdz
IGtpbmQgaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0cmlu
ZywgIiciKTsKLSAgICAgICAgc3dpdGNoIChraW5kKSB7Ci0gICAgICAgIGNhc2UgRXh0ZXJuYWxL
aW5kOjpGdW5jdGlvbjogewotICAgICAgICAgICAgdWludDMyX3QgZnVuY3Rpb25TaWduYXR1cmVJ
bmRleDsKLSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGZ1
bmN0aW9uU2lnbmF0dXJlSW5kZXgpLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIElt
cG9ydCdzIGZ1bmN0aW9uIHNpZ25hdHVyZSBpbiBtb2R1bGUgJyIsIG1vZHVsZVN0cmluZywgIicg
ZmllbGQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOwotICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRihmdW5jdGlvblNpZ25hdHVyZUluZGV4ID49IG1faW5mby0+dXNlZFNpZ25hdHVyZXMuc2l6
ZSgpLCAiaW52YWxpZCBmdW5jdGlvbiBzaWduYXR1cmUgZm9yICIsIGltcG9ydE51bWJlciwgInRo
IEltcG9ydCwgIiwgZnVuY3Rpb25TaWduYXR1cmVJbmRleCwgIiBpcyBvdXQgb2YgcmFuZ2Ugb2Yg
IiwgbV9pbmZvLT51c2VkU2lnbmF0dXJlcy5zaXplKCksICIgaW4gbW9kdWxlICciLCBtb2R1bGVT
dHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0cmluZywgIiciKTsKLSAgICAgICAgICAgIGtpbmRJ
bmRleCA9IG1faW5mby0+aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsKLSAg
ICAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gU2lnbmF0dXJlSW5mb3Jt
YXRpb246OmdldChtX2luZm8tPnVzZWRTaWduYXR1cmVzW2Z1bmN0aW9uU2lnbmF0dXJlSW5kZXhd
KTsKLSAgICAgICAgICAgIG1faW5mby0+aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnVu
Y2hlY2tlZEFwcGVuZChzaWduYXR1cmVJbmRleCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIEV4dGVybmFsS2luZDo6VGFibGU6IHsKLSAgICAgICAgICAgIGJv
b2wgaXNJbXBvcnQgPSB0cnVlOwotICAgICAgICAgICAgUGFydGlhbFJlc3VsdCByZXN1bHQgPSBw
YXJzZVRhYmxlSGVscGVyKGlzSW1wb3J0KTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSghcmVz
dWx0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoV1RGTW92ZShyZXN1
bHQuZXJyb3IoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBFeHRlcm5hbEtpbmQ6Ok1lbW9yeTogewotICAgICAgICAgICAgYm9vbCBpc0ltcG9ydCA9IHRy
dWU7Ci0gICAgICAgICAgICBQYXJ0aWFsUmVzdWx0IHJlc3VsdCA9IHBhcnNlTWVtb3J5SGVscGVy
KGlzSW1wb3J0KTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoV1RGTW92ZShyZXN1bHQuZXJyb3IoKSkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6
Okdsb2JhbDogewotICAgICAgICAgICAgR2xvYmFsIGdsb2JhbDsKLSAgICAgICAgICAgIFdBU01f
RkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VHbG9iYWxUeXBlKGdsb2JhbCkpOwotICAgICAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihnbG9iYWwubXV0YWJpbGl0eSA9PSBHbG9iYWw6Ok11dGFi
bGUsICJNdXRhYmxlIEdsb2JhbHMgYXJlbid0IHN1cHBvcnRlZCIpOwotCi0gICAgICAgICAgICBr
aW5kSW5kZXggPSBtX2luZm8tPmdsb2JhbHMuc2l6ZSgpOwotICAgICAgICAgICAgbV9pbmZvLT5n
bG9iYWxzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGdsb2JhbCkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIG1faW5mby0+aW1wb3J0cy51bmNo
ZWNrZWRBcHBlbmQoeyBXVEZNb3ZlKG1vZHVsZVN0cmluZyksIFdURk1vdmUoZmllbGRTdHJpbmcp
LCBraW5kLCBraW5kSW5kZXggfSk7Ci0gICAgfQotCi0gICAgbV9pbmZvLT5maXJzdEludGVybmFs
R2xvYmFsID0gbV9pbmZvLT5nbG9iYWxzLnNpemUoKTsKLSAgICByZXR1cm4geyB9OwotfQotCi1h
dXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbigpIC0+IFBhcnRpYWxSZXN1bHQKLXsKLSAg
ICB1aW50MzJfdCBjb3VudDsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQz
Mihjb3VudCksICJjYW4ndCBnZXQgRnVuY3Rpb24gc2VjdGlvbidzIGNvdW50Iik7Ci0gICAgV0FT
TV9QQVJTRVJfRkFJTF9JRihjb3VudCA+IG1heEZ1bmN0aW9ucywgIkZ1bmN0aW9uIHNlY3Rpb24n
cyBjb3VudCBpcyB0b28gYmlnICIsIGNvdW50LCAiIG1heGltdW0gIiwgbWF4RnVuY3Rpb25zKTsK
LSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmludGVybmFsRnVuY3Rpb25TaWduYXR1
cmVJbmRpY2VzLnRyeVJlc2VydmVDYXBhY2l0eShjb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91
Z2ggbWVtb3J5IGZvciAiLCBjb3VudCwgIiBGdW5jdGlvbiBzaWduYXR1cmVzIik7Ci0gICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkudHJ5UmVz
ZXJ2ZUNhcGFjaXR5KGNvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIs
IGNvdW50LCAiRnVuY3Rpb24gbG9jYXRpb25zIik7Ci0KLSAgICBmb3IgKHVpbnQzMl90IGkgPSAw
OyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICB1aW50MzJfdCB0eXBlTnVtYmVyOwotICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMih0eXBlTnVtYmVyKSwgImNhbid0
IGdldCAiLCBpLCAidGggRnVuY3Rpb24ncyB0eXBlIG51bWJlciIpOwotICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKHR5cGVOdW1iZXIgPj0gbV9pbmZvLT51c2VkU2lnbmF0dXJlcy5zaXplKCks
IGksICJ0aCBGdW5jdGlvbiB0eXBlIG51bWJlciBpcyBpbnZhbGlkICIsIHR5cGVOdW1iZXIpOwot
Ci0gICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gU2lnbmF0dXJlSW5mb3Jt
YXRpb246OmdldChtX2luZm8tPnVzZWRTaWduYXR1cmVzW3R5cGVOdW1iZXJdKTsKLSAgICAgICAg
Ly8gVGhlIENvZGUgc2VjdGlvbiBmaXhlcyB1cCBzdGFydCBhbmQgZW5kLgotICAgICAgICBzaXpl
X3Qgc3RhcnQgPSAwOwotICAgICAgICBzaXplX3QgZW5kID0gMDsKLSAgICAgICAgbV9pbmZvLT5p
bnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy51bmNoZWNrZWRBcHBlbmQoc2lnbmF0dXJl
SW5kZXgpOwotICAgICAgICBtX2luZm8tPmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS51bmNoZWNr
ZWRBcHBlbmQoeyBzdGFydCwgZW5kIH0pOworICAgIGlmIChPcHRpb25zOjp1c2VFYWdlcldlYkFz
c2VtYmx5TW9kdWxlSGFzaGluZygpKSB7CisgICAgICAgIFNIQTEgaGFzaGVyOworICAgICAgICBo
YXNoZXIuYWRkQnl0ZXMoc291cmNlKCksIGxlbmd0aCgpKTsKKyAgICAgICAgbV9pbmZvLT5uYW1l
U2VjdGlvbi0+c2V0SGFzaChoYXNoZXIuY29tcHV0ZUhleERpZ2VzdCgpKTsKICAgICB9CiAKICAg
ICByZXR1cm4geyB9OwogfQogCi1hdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VSZXNpemFibGVMaW1p
dHModWludDMyX3QmIGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+JiBtYXhpbXVtKSAt
PiBQYXJ0aWFsUmVzdWx0Ci17Ci0gICAgQVNTRVJUKCFtYXhpbXVtKTsKLQotICAgIHVpbnQ4X3Qg
ZmxhZ3M7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MShmbGFncyksICJj
YW4ndCBwYXJzZSByZXNpemFibGUgbGltaXRzIGZsYWdzIik7Ci0gICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VWYXJVSW50MzIoaW5pdGlhbCksICJjYW4ndCBwYXJzZSByZXNpemFibGUgbGlt
aXRzIGluaXRpYWwgcGFnZSBjb3VudCIpOwotCi0gICAgaWYgKGZsYWdzKSB7Ci0gICAgICAgIHVp
bnQzMl90IG1heGltdW1JbnQ7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFy
VUludDMyKG1heGltdW1JbnQpLCAiY2FuJ3QgcGFyc2UgcmVzaXphYmxlIGxpbWl0cyBtYXhpbXVt
IHBhZ2UgY291bnQiKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbml0aWFsID4gbWF4
aW11bUludCwgInJlc2l6YWJsZSBsaW1pdHMgaGFzIGEgaW5pdGlhbCBwYWdlIGNvdW50IG9mICIs
IGluaXRpYWwsICIgd2hpY2ggaXMgZ3JlYXRlciB0aGFuIGl0cyBtYXhpbXVtICIsIG1heGltdW1J
bnQpOwotICAgICAgICBtYXhpbXVtID0gbWF4aW11bUludDsKLSAgICB9Ci0KLSAgICByZXR1cm4g
eyB9OwotfQotCi1hdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VUYWJsZUhlbHBlcihib29sIGlzSW1w
b3J0KSAtPiBQYXJ0aWFsUmVzdWx0Ci17Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX3RhYmxl
Q291bnQgPiAwLCAiQ2Fubm90IGhhdmUgbW9yZSB0aGFuIG9uZSBUYWJsZSBmb3Igbm93Iik7Ci0K
LSAgICArK21fdGFibGVDb3VudDsKLQotICAgIGludDhfdCB0eXBlOwotICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXBhcnNlSW50Nyh0eXBlKSwgImNhbid0IHBhcnNlIFRhYmxlIHR5cGUiKTsKLSAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKHR5cGUgIT0gV2FzbTo6QW55ZnVuYywgIlRhYmxlIHR5cGUg
c2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAiLCB0eXBlKTsKLQotICAgIHVpbnQzMl90IGluaXRpYWw7
Ci0gICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bTsKLSAgICBQYXJ0aWFsUmVzdWx0
IGxpbWl0cyA9IHBhcnNlUmVzaXphYmxlTGltaXRzKGluaXRpYWwsIG1heGltdW0pOwotICAgIGlm
IChVTkxJS0VMWSghbGltaXRzKSkKLSAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFdURk1v
dmUobGltaXRzLmVycm9yKCkpKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluaXRpYWwgPiBt
YXhUYWJsZUVudHJpZXMsICJUYWJsZSdzIGluaXRpYWwgcGFnZSBjb3VudCBvZiAiLCBpbml0aWFs
LCAiIGlzIHRvbyBiaWcsIG1heGltdW0gIiwgbWF4VGFibGVFbnRyaWVzKTsKLQotICAgIEFTU0VS
VCghbWF4aW11bSB8fCAqbWF4aW11bSA+PSBpbml0aWFsKTsKLQotICAgIG1faW5mby0+dGFibGVJ
bmZvcm1hdGlvbiA9IFRhYmxlSW5mb3JtYXRpb24oaW5pdGlhbCwgbWF4aW11bSwgaXNJbXBvcnQp
OwotCi0gICAgcmV0dXJuIHsgfTsKLX0KLQotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlVGFibGUo
KSAtPiBQYXJ0aWFsUmVzdWx0Ci17Ci0gICAgdWludDMyX3QgY291bnQ7Ci0gICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoY291bnQpLCAiY2FuJ3QgZ2V0IFRhYmxlJ3MgY291
bnQiKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGNvdW50ID4gMSwgIlRhYmxlIGNvdW50IG9m
ICIsIGNvdW50LCAiIGlzIGludmFsaWQsIGF0IG1vc3QgMSBpcyBhbGxvd2VkIGZvciBub3ciKTsK
LQotICAgIGlmICghY291bnQpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBib29sIGlzSW1w
b3J0ID0gZmFsc2U7Ci0gICAgUGFydGlhbFJlc3VsdCByZXN1bHQgPSBwYXJzZVRhYmxlSGVscGVy
KGlzSW1wb3J0KTsKLSAgICBpZiAoVU5MSUtFTFkoIXJlc3VsdCkpCi0gICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChXVEZNb3ZlKHJlc3VsdC5lcnJvcigpKSk7Ci0KLSAgICByZXR1cm4geyB9
OwotfQotCi1hdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VNZW1vcnlIZWxwZXIoYm9vbCBpc0ltcG9y
dCkgLT4gUGFydGlhbFJlc3VsdAotewotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9tZW1vcnlD
b3VudCwgInRoZXJlIGNhbiBhdCBtb3N0IGJlIG9uZSBNZW1vcnkgc2VjdGlvbiBmb3Igbm93Iik7
Ci0KLSAgICArK21fbWVtb3J5Q291bnQ7Ci0KLSAgICBQYWdlQ291bnQgaW5pdGlhbFBhZ2VDb3Vu
dDsKLSAgICBQYWdlQ291bnQgbWF4aW11bVBhZ2VDb3VudDsKLSAgICB7Ci0gICAgICAgIHVpbnQz
Ml90IGluaXRpYWw7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW07Ci0g
ICAgICAgIFBhcnRpYWxSZXN1bHQgbGltaXRzID0gcGFyc2VSZXNpemFibGVMaW1pdHMoaW5pdGlh
bCwgbWF4aW11bSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghbGltaXRzKSkKLSAgICAgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZChXVEZNb3ZlKGxpbWl0cy5lcnJvcigpKSk7Ci0gICAgICAg
IEFTU0VSVCghbWF4aW11bSB8fCAqbWF4aW11bSA+PSBpbml0aWFsKTsKLSAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighUGFnZUNvdW50Ojppc1ZhbGlkKGluaXRpYWwpLCAiTWVtb3J5J3MgaW5p
dGlhbCBwYWdlIGNvdW50IG9mICIsIGluaXRpYWwsICIgaXMgaW52YWxpZCIpOwotCi0gICAgICAg
IGluaXRpYWxQYWdlQ291bnQgPSBQYWdlQ291bnQoaW5pdGlhbCk7Ci0KLSAgICAgICAgaWYgKG1h
eGltdW0pIHsKLSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIVBhZ2VDb3VudDo6aXNW
YWxpZCgqbWF4aW11bSksICJNZW1vcnkncyBtYXhpbXVtIHBhZ2UgY291bnQgb2YgIiwgKm1heGlt
dW0sICIgaXMgaW52YWxpZCIpOwotICAgICAgICAgICAgbWF4aW11bVBhZ2VDb3VudCA9IFBhZ2VD
b3VudCgqbWF4aW11bSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgQVNTRVJUKGluaXRpYWxQYWdl
Q291bnQpOwotICAgIEFTU0VSVCghbWF4aW11bVBhZ2VDb3VudCB8fCBtYXhpbXVtUGFnZUNvdW50
ID49IGluaXRpYWxQYWdlQ291bnQpOwotCi0gICAgbV9pbmZvLT5tZW1vcnkgPSBNZW1vcnlJbmZv
cm1hdGlvbihpbml0aWFsUGFnZUNvdW50LCBtYXhpbXVtUGFnZUNvdW50LCBpc0ltcG9ydCk7Ci0g
ICAgcmV0dXJuIHsgfTsKLX0KLQotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlTWVtb3J5KCkgLT4g
UGFydGlhbFJlc3VsdAotewotICAgIHVpbnQ4X3QgY291bnQ7Ci0gICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VWYXJVSW50MShjb3VudCksICJjYW4ndCBwYXJzZSBNZW1vcnkgc2VjdGlvbidz
IGNvdW50Iik7Ci0KLSAgICBpZiAoIWNvdW50KQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAg
V0FTTV9QQVJTRVJfRkFJTF9JRihjb3VudCAhPSAxLCAiTWVtb3J5IHNlY3Rpb24gaGFzIG1vcmUg
dGhhbiBvbmUgbWVtb3J5LCBXZWJBc3NlbWJseSBjdXJyZW50bHkgb25seSBhbGxvd3MgemVybyBv
ciBvbmUiKTsKLQotICAgIGJvb2wgaXNJbXBvcnQgPSBmYWxzZTsKLSAgICByZXR1cm4gcGFyc2VN
ZW1vcnlIZWxwZXIoaXNJbXBvcnQpOwotfQotCi1hdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VHbG9i
YWwoKSAtPiBQYXJ0aWFsUmVzdWx0Ci17Ci0gICAgdWludDMyX3QgZ2xvYmFsQ291bnQ7Ci0gICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZ2xvYmFsQ291bnQpLCAiY2FuJ3Qg
Z2V0IEdsb2JhbCBzZWN0aW9uJ3MgY291bnQiKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGds
b2JhbENvdW50ID4gbWF4R2xvYmFscywgIkdsb2JhbCBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJp
ZyAiLCBnbG9iYWxDb3VudCwgIiBtYXhpbXVtICIsIG1heEdsb2JhbHMpOwotICAgIHNpemVfdCB0
b3RhbEJ5dGVzID0gZ2xvYmFsQ291bnQgKyBtX2luZm8tPmZpcnN0SW50ZXJuYWxHbG9iYWw7Ci0g
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRigoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHRvdGFsQnl0ZXMp
IDwgZ2xvYmFsQ291bnQpIHx8ICFtX2luZm8tPmdsb2JhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KHRv
dGFsQnl0ZXMpLCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiLCB0b3RhbEJ5dGVzLCAiIGds
b2JhbHMiKTsKLQotICAgIGZvciAodWludDMyX3QgZ2xvYmFsSW5kZXggPSAwOyBnbG9iYWxJbmRl
eCA8IGdsb2JhbENvdW50OyArK2dsb2JhbEluZGV4KSB7Ci0gICAgICAgIEdsb2JhbCBnbG9iYWw7
Ci0gICAgICAgIHVpbnQ4X3QgaW5pdE9wY29kZTsKLQotICAgICAgICBXQVNNX0ZBSUxfSUZfSEVM
UEVSX0ZBSUxTKHBhcnNlR2xvYmFsVHlwZShnbG9iYWwpKTsKLSAgICAgICAgVHlwZSB0eXBlRm9y
SW5pdE9wY29kZTsKLSAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUluaXRF
eHByKGluaXRPcGNvZGUsIGdsb2JhbC5pbml0aWFsQml0c09ySW1wb3J0TnVtYmVyLCB0eXBlRm9y
SW5pdE9wY29kZSkpOwotICAgICAgICBpZiAoaW5pdE9wY29kZSA9PSBHZXRHbG9iYWwpCi0gICAg
ICAgICAgICBnbG9iYWwuaW5pdGlhbGl6YXRpb25UeXBlID0gR2xvYmFsOjpGcm9tR2xvYmFsSW1w
b3J0OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBnbG9iYWwuaW5pdGlhbGl6YXRpb25UeXBl
ID0gR2xvYmFsOjpGcm9tRXhwcmVzc2lvbjsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0
eXBlRm9ySW5pdE9wY29kZSAhPSBnbG9iYWwudHlwZSwgIkdsb2JhbCBpbml0X2V4cHIgb3Bjb2Rl
IG9mIHR5cGUgIiwgdHlwZUZvckluaXRPcGNvZGUsICIgZG9lc24ndCBtYXRjaCBnbG9iYWwncyB0
eXBlICIsIGdsb2JhbC50eXBlKTsKLQotICAgICAgICBtX2luZm8tPmdsb2JhbHMudW5jaGVja2Vk
QXBwZW5kKFdURk1vdmUoZ2xvYmFsKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsgfTsKLX0KLQot
YXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlRXhwb3J0KCkgLT4gUGFydGlhbFJlc3VsdAotewotICAg
IHVpbnQzMl90IGV4cG9ydENvdW50OwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFy
VUludDMyKGV4cG9ydENvdW50KSwgImNhbid0IGdldCBFeHBvcnQgc2VjdGlvbidzIGNvdW50Iik7
Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRihleHBvcnRDb3VudCA+IG1heEV4cG9ydHMsICJFeHBv
cnQgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgZXhwb3J0Q291bnQsICIgbWF4aW11bSAi
LCBtYXhFeHBvcnRzKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmV4cG9ydHMu
dHJ5UmVzZXJ2ZUNhcGFjaXR5KGV4cG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBt
ZW1vcnkgZm9yICIsIGV4cG9ydENvdW50LCAiIGV4cG9ydHMiKTsKLQotICAgIEhhc2hTZXQ8U3Ry
aW5nPiBleHBvcnROYW1lczsKLSAgICBmb3IgKHVpbnQzMl90IGV4cG9ydE51bWJlciA9IDA7IGV4
cG9ydE51bWJlciA8IGV4cG9ydENvdW50OyArK2V4cG9ydE51bWJlcikgewotICAgICAgICB1aW50
MzJfdCBmaWVsZExlbjsKLSAgICAgICAgTmFtZSBmaWVsZFN0cmluZzsKLSAgICAgICAgRXh0ZXJu
YWxLaW5kIGtpbmQ7Ci0gICAgICAgIHVuc2lnbmVkIGtpbmRJbmRleDsKLQotICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihmaWVsZExlbiksICJjYW4ndCBnZXQgIiwg
ZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0J3MgZmllbGQgbmFtZSBsZW5ndGgiKTsKLSAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighY29uc3VtZVVURjhTdHJpbmcoZmllbGRTdHJpbmcsIGZpZWxk
TGVuKSwgImNhbid0IGdldCAiLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQncyBmaWVsZCBuYW1l
IG9mIGxlbmd0aCAiLCBmaWVsZExlbik7Ci0gICAgICAgIFN0cmluZyBmaWVsZE5hbWUgPSBTdHJp
bmc6OmZyb21VVEY4KGZpZWxkU3RyaW5nKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihl
eHBvcnROYW1lcy5jb250YWlucyhmaWVsZE5hbWUpLCAiZHVwbGljYXRlIGV4cG9ydDogJyIsIGZp
ZWxkU3RyaW5nLCAiJyIpOwotICAgICAgICBleHBvcnROYW1lcy5hZGQoZmllbGROYW1lKTsKLQot
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUV4dGVybmFsS2luZChraW5kKSwgImNh
bid0IGdldCAiLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQncyBraW5kLCBuYW1lZCAnIiwgZmll
bGRTdHJpbmcsICInIik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUlu
dDMyKGtpbmRJbmRleCksICJjYW4ndCBnZXQgIiwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0J3Mg
a2luZCBpbmRleCwgbmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOwotICAgICAgICBzd2l0Y2gg
KGtpbmQpIHsKLSAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6OkZ1bmN0aW9uOiB7Ci0gICAgICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGtpbmRJbmRleCA+PSBtX2luZm8tPmZ1bmN0aW9uSW5k
ZXhTcGFjZVNpemUoKSwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0IGhhcyBpbnZhbGlkIGZ1bmN0
aW9uIG51bWJlciAiLCBraW5kSW5kZXgsICIgaXQgZXhjZWVkcyB0aGUgZnVuY3Rpb24gaW5kZXgg
c3BhY2UgIiwgbV9pbmZvLT5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCksICIsIG5hbWVkICciLCBm
aWVsZFN0cmluZywgIiciKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgRXh0ZXJuYWxLaW5kOjpUYWJsZTogewotICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRihraW5kSW5kZXggPj0gbV90YWJsZUNvdW50LCAiY2FuJ3QgZXhwb3J0IFRhYmxlICIsIGtp
bmRJbmRleCwgIiB0aGVyZSBhcmUgIiwgbV90YWJsZUNvdW50LCAiIFRhYmxlcyIpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6Ok1lbW9y
eTogewotICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5tZW1vcnksICJj
YW4ndCBleHBvcnQgYSBub24tZXhpc3RlbnQgTWVtb3J5Iik7Ci0gICAgICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKGtpbmRJbmRleCwgImNhbid0IGV4cG9ydCBNZW1vcnkgIiwga2luZEluZGV4
LCAiIG9ubHkgb25lIFRhYmxlIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQiKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpHbG9iYWw6IHsK
LSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoa2luZEluZGV4ID49IG1faW5mby0+Z2xv
YmFscy5zaXplKCksIGV4cG9ydE51bWJlciwgInRoIEV4cG9ydCBoYXMgaW52YWxpZCBnbG9iYWwg
bnVtYmVyICIsIGtpbmRJbmRleCwgIiBpdCBleGNlZWRzIHRoZSBnbG9iYWxzIGNvdW50ICIsIG1f
aW5mby0+Z2xvYmFscy5zaXplKCksICIsIG5hbWVkICciLCBmaWVsZFN0cmluZywgIiciKTsKLSAg
ICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9pbmZvLT5nbG9iYWxzW2tpbmRJbmRleF0u
bXV0YWJpbGl0eSAhPSBHbG9iYWw6OkltbXV0YWJsZSwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0
IGlzbid0IGltbXV0YWJsZSwgbmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIG1faW5mby0+ZXhwb3J0
cy51bmNoZWNrZWRBcHBlbmQoeyBXVEZNb3ZlKGZpZWxkU3RyaW5nKSwga2luZCwga2luZEluZGV4
IH0pOwotICAgIH0KLQotICAgIHJldHVybiB7IH07Ci19Ci0KLWF1dG8gTW9kdWxlUGFyc2VyOjpw
YXJzZVN0YXJ0KCkgLT4gUGFydGlhbFJlc3VsdAotewotICAgIHVpbnQzMl90IHN0YXJ0RnVuY3Rp
b25JbmRleDsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihzdGFydEZ1
bmN0aW9uSW5kZXgpLCAiY2FuJ3QgZ2V0IFN0YXJ0IGluZGV4Iik7Ci0gICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihzdGFydEZ1bmN0aW9uSW5kZXggPj0gbV9pbmZvLT5mdW5jdGlvbkluZGV4U3BhY2VT
aXplKCksICJTdGFydCBpbmRleCAiLCBzdGFydEZ1bmN0aW9uSW5kZXgsICIgZXhjZWVkcyBmdW5j
dGlvbiBpbmRleCBzcGFjZSAiLCBtX2luZm8tPmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7Ci0g
ICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX2luZm8tPnNpZ25hdHVyZUluZGV4
RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXgpOwotICAgIGNvbnN0IFNp
Z25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJ
bmRleCk7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRihzaWduYXR1cmUuYXJndW1lbnRDb3VudCgp
LCAiU3RhcnQgZnVuY3Rpb24gY2FuJ3QgaGF2ZSBhcmd1bWVudHMiKTsKLSAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKHNpZ25hdHVyZS5yZXR1cm5UeXBlKCkgIT0gVm9pZCwgIlN0YXJ0IGZ1bmN0aW9u
IGNhbid0IHJldHVybiBhIHZhbHVlIik7Ci0gICAgbV9pbmZvLT5zdGFydEZ1bmN0aW9uSW5kZXhT
cGFjZSA9IHN0YXJ0RnVuY3Rpb25JbmRleDsKLSAgICByZXR1cm4geyB9OwotfQotCi1hdXRvIE1v
ZHVsZVBhcnNlcjo6cGFyc2VFbGVtZW50KCkgLT4gUGFydGlhbFJlc3VsdAotewotICAgIHVpbnQz
Ml90IGVsZW1lbnRDb3VudDsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQz
MihlbGVtZW50Q291bnQpLCAiY2FuJ3QgZ2V0IEVsZW1lbnQgc2VjdGlvbidzIGNvdW50Iik7Ci0g
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihlbGVtZW50Q291bnQgPiBtYXhUYWJsZUVudHJpZXMsICJF
bGVtZW50IHNlY3Rpb24ncyBjb3VudCBpcyB0b28gYmlnICIsIGVsZW1lbnRDb3VudCwgIiBtYXhp
bXVtICIsIG1heFRhYmxlRW50cmllcyk7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZv
LT5lbGVtZW50cy50cnlSZXNlcnZlQ2FwYWNpdHkoZWxlbWVudENvdW50KSwgImNhbid0IGFsbG9j
YXRlIG1lbW9yeSBmb3IgIiwgZWxlbWVudENvdW50LCAiIEVsZW1lbnRzIik7Ci0gICAgZm9yICh1
bnNpZ25lZCBlbGVtZW50TnVtID0gMDsgZWxlbWVudE51bSA8IGVsZW1lbnRDb3VudDsgKytlbGVt
ZW50TnVtKSB7Ci0gICAgICAgIHVpbnQzMl90IHRhYmxlSW5kZXg7Ci0gICAgICAgIHVpbnQ2NF90
IGluaXRFeHByQml0czsKLSAgICAgICAgdWludDhfdCBpbml0T3Bjb2RlOwotICAgICAgICB1aW50
MzJfdCBpbmRleENvdW50OwotCi0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFy
VUludDMyKHRhYmxlSW5kZXgpLCAiY2FuJ3QgZ2V0ICIsIGVsZW1lbnROdW0sICJ0aCBFbGVtZW50
IHRhYmxlIGluZGV4Iik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYodGFibGVJbmRleCA+
PSBtX3RhYmxlQ291bnQsICJFbGVtZW50IHNlY3Rpb24gZm9yIFRhYmxlICIsIHRhYmxlSW5kZXgs
ICIgZXhjZWVkcyBhdmFpbGFibGUgVGFibGUgIiwgbV90YWJsZUNvdW50KTsKLSAgICAgICAgVHlw
ZSBpbml0RXhwclR5cGU7Ci0gICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VJ
bml0RXhwcihpbml0T3Bjb2RlLCBpbml0RXhwckJpdHMsIGluaXRFeHByVHlwZSkpOwotICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluaXRFeHByVHlwZSAhPSBJMzIsICJFbGVtZW50IGluaXRf
ZXhwciBtdXN0IHByb2R1Y2UgYW4gaTMyIik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlVmFyVUludDMyKGluZGV4Q291bnQpLCAiY2FuJ3QgZ2V0ICIsIGVsZW1lbnROdW0sICJ0
aCBpbmRleCBjb3VudCBmb3IgRWxlbWVudCBzZWN0aW9uIik7Ci0gICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoaW5kZXhDb3VudCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4
KCksICJFbGVtZW50IHNlY3Rpb24ncyAiLCBlbGVtZW50TnVtLCAidGggaW5kZXggY291bnQgaXMg
dG9vIGJpZyAiLCBpbmRleENvdW50KTsKLQotICAgICAgICBBU1NFUlQoISFtX2luZm8tPnRhYmxl
SW5mb3JtYXRpb24pOwotCi0gICAgICAgIEVsZW1lbnQgZWxlbWVudChtYWtlSTMySW5pdEV4cHIo
aW5pdE9wY29kZSwgaW5pdEV4cHJCaXRzKSk7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IWVsZW1lbnQuZnVuY3Rpb25JbmRpY2VzLnRyeVJlc2VydmVDYXBhY2l0eShpbmRleENvdW50KSwg
ImNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgIiwgaW5kZXhDb3VudCwgIiBFbGVtZW50IGluZGlj
ZXMiKTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBpbmRleENv
dW50OyArK2luZGV4KSB7Ci0gICAgICAgICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4OwotICAg
ICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZnVuY3Rpb25JbmRl
eCksICJjYW4ndCBnZXQgRWxlbWVudCBzZWN0aW9uJ3MgIiwgZWxlbWVudE51bSwgInRoIGVsZW1l
bnQncyAiLCBpbmRleCwgInRoIGluZGV4Iik7Ci0gICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKGZ1bmN0aW9uSW5kZXggPj0gbV9pbmZvLT5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCksICJF
bGVtZW50IHNlY3Rpb24ncyAiLCBlbGVtZW50TnVtLCAidGggZWxlbWVudCdzICIsIGluZGV4LCAi
dGggaW5kZXggaXMgIiwgZnVuY3Rpb25JbmRleCwgIiB3aGljaCBleGNlZWRzIHRoZSBmdW5jdGlv
biBpbmRleCBzcGFjZSBzaXplIG9mICIsIG1faW5mby0+ZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgp
KTsKLQotICAgICAgICAgICAgZWxlbWVudC5mdW5jdGlvbkluZGljZXMudW5jaGVja2VkQXBwZW5k
KGZ1bmN0aW9uSW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9pbmZvLT5lbGVtZW50cy51
bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShlbGVtZW50KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsg
fTsKLX0KLQotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlQ29kZSgpIC0+IFBhcnRpYWxSZXN1bHQK
LXsKLSAgICB1aW50MzJfdCBjb3VudDsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZh
clVJbnQzMihjb3VudCksICJjYW4ndCBnZXQgQ29kZSBzZWN0aW9uJ3MgY291bnQiKTsKLSAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKGNvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+
OjptYXgoKSwgIkNvZGUgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgY291bnQpOwotICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoY291bnQgIT0gbV9pbmZvLT5mdW5jdGlvbkxvY2F0aW9uSW5C
aW5hcnkuc2l6ZSgpLCAiQ29kZSBzZWN0aW9uIGNvdW50ICIsIGNvdW50LCAiIGV4Y2VlZHMgdGhl
IGRlY2xhcmVkIG51bWJlciBvZiBmdW5jdGlvbnMgIiwgbV9pbmZvLT5mdW5jdGlvbkxvY2F0aW9u
SW5CaW5hcnkuc2l6ZSgpKTsKLQotICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsg
KytpKSB7Ci0gICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uU2l6ZTsKLSAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZnVuY3Rpb25TaXplKSwgImNhbid0IGdldCAiLCBp
LCAidGggQ29kZSBmdW5jdGlvbidzIHNpemUiKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RihmdW5jdGlvblNpemUgPiBsZW5ndGgoKSwgIkNvZGUgZnVuY3Rpb24ncyBzaXplICIsIGZ1bmN0
aW9uU2l6ZSwgIiBleGNlZWRzIHRoZSBtb2R1bGUncyBzaXplICIsIGxlbmd0aCgpKTsKLSAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvblNpemUgPiBsZW5ndGgoKSAtIG1fb2Zmc2V0
LCAiQ29kZSBmdW5jdGlvbidzIHNpemUgIiwgZnVuY3Rpb25TaXplLCAiIGV4Y2VlZHMgdGhlIG1v
ZHVsZSdzIHJlbWFpbmluZyBzaXplIiwgbGVuZ3RoKCkgLSBtX29mZnNldCk7Ci0gICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25TaXplID4gbWF4RnVuY3Rpb25TaXplLCAiQ29kZSBm
dW5jdGlvbidzIHNpemUgIiwgZnVuY3Rpb25TaXplLCAiIGlzIHRvbyBiaWciKTsKLQotICAgICAg
ICBtX2luZm8tPmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtpXS5zdGFydCA9IG1fb2Zmc2V0Owot
ICAgICAgICBtX2luZm8tPmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtpXS5lbmQgPSBtX29mZnNl
dCArIGZ1bmN0aW9uU2l6ZTsKLSAgICAgICAgbV9vZmZzZXQgPSBtX2luZm8tPmZ1bmN0aW9uTG9j
YXRpb25JbkJpbmFyeVtpXS5lbmQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsgfTsKLX0KLQotYXV0
byBNb2R1bGVQYXJzZXI6OnBhcnNlSW5pdEV4cHIodWludDhfdCYgb3Bjb2RlLCB1aW50NjRfdCYg
Yml0c09ySW1wb3J0TnVtYmVyLCBUeXBlJiByZXN1bHRUeXBlKSAtPiBQYXJ0aWFsUmVzdWx0Ci17
Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VVSW50OChvcGNvZGUpLCAiY2FuJ3QgZ2V0
IGluaXRfZXhwcidzIG9wY29kZSIpOwotCi0gICAgc3dpdGNoIChvcGNvZGUpIHsKLSAgICBjYXNl
IEkzMkNvbnN0OiB7Ci0gICAgICAgIGludDMyX3QgY29uc3RhbnQ7Ci0gICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIXBhcnNlVmFySW50MzIoY29uc3RhbnQpLCAiY2FuJ3QgZ2V0IGNvbnN0YW50
IHZhbHVlIGZvciBpbml0X2V4cHIncyBpMzIuY29uc3QiKTsKLSAgICAgICAgYml0c09ySW1wb3J0
TnVtYmVyID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGNvbnN0YW50KTsKLSAgICAgICAgcmVzdWx0
VHlwZSA9IEkzMjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBJNjRDb25zdDog
ewotICAgICAgICBpbnQ2NF90IGNvbnN0YW50OwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFwYXJzZVZhckludDY0KGNvbnN0YW50KSwgImNhbid0IGdldCBjb25zdGFudCB2YWx1ZSBmb3Ig
aW5pdF9leHByJ3MgaTY0LmNvbnN0Iik7Ci0gICAgICAgIGJpdHNPckltcG9ydE51bWJlciA9IGNv
bnN0YW50OwotICAgICAgICByZXN1bHRUeXBlID0gSTY0OwotICAgICAgICBicmVhazsKLSAgICB9
Ci0KLSAgICBjYXNlIEYzMkNvbnN0OiB7Ci0gICAgICAgIHVpbnQzMl90IGNvbnN0YW50OwotICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQzMihjb25zdGFudCksICJjYW4ndCBn
ZXQgY29uc3RhbnQgdmFsdWUgZm9yIGluaXRfZXhwcidzIGYzMi5jb25zdCIpOwotICAgICAgICBi
aXRzT3JJbXBvcnROdW1iZXIgPSBjb25zdGFudDsKLSAgICAgICAgcmVzdWx0VHlwZSA9IEYzMjsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBGNjRDb25zdDogewotICAgICAgICB1
aW50NjRfdCBjb25zdGFudDsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VVSW50
NjQoY29uc3RhbnQpLCAiY2FuJ3QgZ2V0IGNvbnN0YW50IHZhbHVlIGZvciBpbml0X2V4cHIncyBm
NjQuY29uc3QiKTsKLSAgICAgICAgYml0c09ySW1wb3J0TnVtYmVyID0gY29uc3RhbnQ7Ci0gICAg
ICAgIHJlc3VsdFR5cGUgPSBGNjQ7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2Ug
R2V0R2xvYmFsOiB7Ci0gICAgICAgIHVpbnQzMl90IGluZGV4OwotICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbmRleCksICJjYW4ndCBnZXQgZ2V0X2dsb2JhbCdz
IGluZGV4Iik7Ci0KLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbmRleCA+PSBtX2luZm8t
Pmdsb2JhbHMuc2l6ZSgpLCAiZ2V0X2dsb2JhbCdzIGluZGV4ICIsIGluZGV4LCAiIGV4Y2VlZHMg
dGhlIG51bWJlciBvZiBnbG9iYWxzICIsIG1faW5mby0+Z2xvYmFscy5zaXplKCkpOwotICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluZGV4ID49IG1faW5mby0+Zmlyc3RJbnRlcm5hbEdsb2Jh
bCwgImdldF9nbG9iYWwgaW1wb3J0IGtpbmQgaW5kZXggIiwgaW5kZXgsICIgZXhjZWVkcyB0aGUg
Zmlyc3QgaW50ZXJuYWwgZ2xvYmFsICIsIG1faW5mby0+Zmlyc3RJbnRlcm5hbEdsb2JhbCk7Ci0K
LSAgICAgICAgQVNTRVJUKG1faW5mby0+Z2xvYmFsc1tpbmRleF0ubXV0YWJpbGl0eSA9PSBHbG9i
YWw6OkltbXV0YWJsZSk7Ci0gICAgICAgIHJlc3VsdFR5cGUgPSBtX2luZm8tPmdsb2JhbHNbaW5k
ZXhdLnR5cGU7Ci0gICAgICAgIGJpdHNPckltcG9ydE51bWJlciA9IGluZGV4OwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KHRydWUsICJ1bmtub3duIGluaXRfZXhwciBvcGNvZGUgIiwgb3Bjb2RlKTsKLSAgICB9Ci0KLSAg
ICB1aW50OF90IGVuZE9wY29kZTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ4
KGVuZE9wY29kZSksICJjYW4ndCBnZXQgaW5pdF9leHByJ3MgZW5kIG9wY29kZSIpOwotICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoZW5kT3Bjb2RlICE9IE9wVHlwZTo6RW5kLCAiaW5pdF9leHByIHNo
b3VsZCBlbmQgd2l0aCBlbmQsIGVuZGVkIHdpdGggIiwgZW5kT3Bjb2RlKTsKLQotICAgIHJldHVy
biB7IH07Ci19Ci0KLWF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZUdsb2JhbFR5cGUoR2xvYmFsJiBn
bG9iYWwpIC0+IFBhcnRpYWxSZXN1bHQKLXsKLSAgICB1aW50OF90IG11dGFiaWxpdHk7Ci0gICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYWx1ZVR5cGUoZ2xvYmFsLnR5cGUpLCAiY2FuJ3Qg
Z2V0IEdsb2JhbCdzIHZhbHVlIHR5cGUiKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJz
ZVZhclVJbnQxKG11dGFiaWxpdHkpLCAiY2FuJ3QgZ2V0IEdsb2JhbCB0eXBlJ3MgbXV0YWJpbGl0
eSIpOwotICAgIGdsb2JhbC5tdXRhYmlsaXR5ID0gc3RhdGljX2Nhc3Q8R2xvYmFsOjpNdXRhYmls
aXR5PihtdXRhYmlsaXR5KTsKLSAgICByZXR1cm4geyB9OwotfQotCi1hdXRvIE1vZHVsZVBhcnNl
cjo6cGFyc2VEYXRhKCkgLT4gUGFydGlhbFJlc3VsdAotewotICAgIHVpbnQzMl90IHNlZ21lbnRD
b3VudDsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihzZWdtZW50Q291
bnQpLCAiY2FuJ3QgZ2V0IERhdGEgc2VjdGlvbidzIGNvdW50Iik7Ci0gICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihzZWdtZW50Q291bnQgPiBtYXhEYXRhU2VnbWVudHMsICJEYXRhIHNlY3Rpb24ncyBj
b3VudCBpcyB0b28gYmlnICIsIHNlZ21lbnRDb3VudCwgIiBtYXhpbXVtICIsIG1heERhdGFTZWdt
ZW50cyk7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5kYXRhLnRyeVJlc2VydmVD
YXBhY2l0eShzZWdtZW50Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3Ig
RGF0YSBzZWN0aW9uJ3MgIiwgc2VnbWVudENvdW50LCAiIHNlZ21lbnRzIik7Ci0KLSAgICBmb3Ig
KHVpbnQzMl90IHNlZ21lbnROdW1iZXIgPSAwOyBzZWdtZW50TnVtYmVyIDwgc2VnbWVudENvdW50
OyArK3NlZ21lbnROdW1iZXIpIHsKLSAgICAgICAgdWludDMyX3QgbWVtb3J5SW5kZXg7Ci0gICAg
ICAgIHVpbnQ2NF90IGluaXRFeHByQml0czsKLSAgICAgICAgdWludDhfdCBpbml0T3Bjb2RlOwot
ICAgICAgICB1aW50MzJfdCBkYXRhQnl0ZUxlbmd0aDsKLQotICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFwYXJzZVZhclVJbnQzMihtZW1vcnlJbmRleCksICJjYW4ndCBnZXQgIiwgc2VnbWVu
dE51bWJlciwgInRoIERhdGEgc2VnbWVudCdzIGluZGV4Iik7Ci0gICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYobWVtb3J5SW5kZXggPj0gbV9tZW1vcnlDb3VudCwgc2VnbWVudE51bWJlciwgInRo
IERhdGEgc2VnbWVudCBoYXMgaW5kZXggIiwgbWVtb3J5SW5kZXgsICIgd2hpY2ggZXhjZWVkcyB0
aGUgbnVtYmVyIG9mIE1lbW9yaWVzICIsIG1fbWVtb3J5Q291bnQpOwotICAgICAgICBUeXBlIGlu
aXRFeHByVHlwZTsKLSAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUluaXRF
eHByKGluaXRPcGNvZGUsIGluaXRFeHByQml0cywgaW5pdEV4cHJUeXBlKSk7Ci0gICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoaW5pdEV4cHJUeXBlICE9IEkzMiwgc2VnbWVudE51bWJlciwgInRo
IERhdGEgc2VnbWVudCdzIGluaXRfZXhwciBtdXN0IHByb2R1Y2UgYW4gaTMyIik7Ci0gICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGRhdGFCeXRlTGVuZ3RoKSwgImNh
bid0IGdldCAiLCBzZWdtZW50TnVtYmVyLCAidGggRGF0YSBzZWdtZW50J3MgZGF0YSBieXRlIGxl
bmd0aCIpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGRhdGFCeXRlTGVuZ3RoID4gbWF4
TW9kdWxlU2l6ZSwgc2VnbWVudE51bWJlciwgInRoIERhdGEgc2VnbWVudCdzIGRhdGEgYnl0ZSBs
ZW5ndGggaXMgdG9vIGJpZyAiLCBkYXRhQnl0ZUxlbmd0aCwgIiBtYXhpbXVtICIsIG1heE1vZHVs
ZVNpemUpOwotCi0gICAgICAgIFNlZ21lbnQqIHNlZ21lbnQgPSBTZWdtZW50OjpjcmVhdGUobWFr
ZUkzMkluaXRFeHByKGluaXRPcGNvZGUsIGluaXRFeHByQml0cyksIGRhdGFCeXRlTGVuZ3RoKTsK
LSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighc2VnbWVudCwgImNhbid0IGFsbG9jYXRlIGVu
b3VnaCBtZW1vcnkgZm9yICIsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQgb2Ygc2l6
ZSAiLCBkYXRhQnl0ZUxlbmd0aCk7Ci0gICAgICAgIG1faW5mby0+ZGF0YS51bmNoZWNrZWRBcHBl
bmQoU2VnbWVudDo6YWRvcHRQdHIoc2VnbWVudCkpOwotICAgICAgICBmb3IgKHVpbnQzMl90IGRh
dGFCeXRlID0gMDsgZGF0YUJ5dGUgPCBkYXRhQnl0ZUxlbmd0aDsgKytkYXRhQnl0ZSkgewotICAg
ICAgICAgICAgdWludDhfdCBieXRlOwotICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
cGFyc2VVSW50OChieXRlKSwgImNhbid0IGdldCAiLCBkYXRhQnl0ZSwgInRoIGRhdGEgYnl0ZSBm
cm9tICIsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQiKTsKLSAgICAgICAgICAgIHNl
Z21lbnQtPmJ5dGUoZGF0YUJ5dGUpID0gYnl0ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1
cm4geyB9OwotfQotICAgIAotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlQ3VzdG9tKHVpbnQzMl90
IHNlY3Rpb25MZW5ndGgpIC0+IFBhcnRpYWxSZXN1bHQKLXsKLSAgICBjb25zdCB1aW50MzJfdCBj
dXN0b21TZWN0aW9uU3RhcnRPZmZzZXQgPSBtX29mZnNldDsKLQotICAgIEN1c3RvbVNlY3Rpb24g
c2VjdGlvbjsKLSAgICB1aW50MzJfdCBjdXN0b21TZWN0aW9uTnVtYmVyID0gbV9pbmZvLT5jdXN0
b21TZWN0aW9ucy5zaXplKCkgKyAxOwotICAgIHVpbnQzMl90IG5hbWVMZW47Ci0gICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighbV9pbmZvLT5jdXN0b21TZWN0aW9ucy50cnlSZXNlcnZlQ2FwYWNpdHko
Y3VzdG9tU2VjdGlvbk51bWJlciksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAi
LCBjdXN0b21TZWN0aW9uTnVtYmVyLCAidGggY3VzdG9tIHNlY3Rpb24iKTsKLSAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihuYW1lTGVuKSwgImNhbid0IGdldCAiLCBjdXN0
b21TZWN0aW9uTnVtYmVyLCAidGggY3VzdG9tIHNlY3Rpb24ncyBuYW1lIGxlbmd0aCIpOwotICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVVVEY4U3RyaW5nKHNlY3Rpb24ubmFtZSwgbmFt
ZUxlbiksICJuYW1lTGVuIGdldCAiLCBjdXN0b21TZWN0aW9uTnVtYmVyLCAidGggY3VzdG9tIHNl
Y3Rpb24ncyBuYW1lIG9mIGxlbmd0aCAiLCBuYW1lTGVuKTsKLQotICAgIHVpbnQzMl90IHBheWxv
YWRCeXRlcyA9IHNlY3Rpb25MZW5ndGggLSAobV9vZmZzZXQgLSBjdXN0b21TZWN0aW9uU3RhcnRP
ZmZzZXQpOwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXNlY3Rpb24ucGF5bG9hZC50cnlSZXNl
cnZlQ2FwYWNpdHkocGF5bG9hZEJ5dGVzKSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkg
Zm9yICIsIGN1c3RvbVNlY3Rpb25OdW1iZXIsICJ0aCBjdXN0b20gc2VjdGlvbidzICIsIHBheWxv
YWRCeXRlcywgIiBieXRlcyIpOwotICAgIGZvciAodWludDMyX3QgYnl0ZU51bWJlciA9IDA7IGJ5
dGVOdW1iZXIgPCBwYXlsb2FkQnl0ZXM7ICsrYnl0ZU51bWJlcikgewotICAgICAgICB1aW50OF90
IGJ5dGU7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUludDgoYnl0ZSksICJj
YW4ndCBnZXQgIiwgYnl0ZU51bWJlciwgInRoIGRhdGEgYnl0ZSBmcm9tICIsIGN1c3RvbVNlY3Rp
b25OdW1iZXIsICJ0aCBjdXN0b20gc2VjdGlvbiIpOwotICAgICAgICBzZWN0aW9uLnBheWxvYWQu
dW5jaGVja2VkQXBwZW5kKGJ5dGUpOwotICAgIH0KLQotICAgIE5hbWUgbmFtZU5hbWUgPSB7ICdu
JywgJ2EnLCAnbScsICdlJyB9OwotICAgIGlmIChzZWN0aW9uLm5hbWUgPT0gbmFtZU5hbWUpIHsK
LSAgICAgICAgTmFtZVNlY3Rpb25QYXJzZXIgbmFtZVNlY3Rpb25QYXJzZXIoc2VjdGlvbi5wYXls
b2FkLmJlZ2luKCksIHNlY3Rpb24ucGF5bG9hZC5zaXplKCksIG1faW5mbyk7Ci0gICAgICAgIGlm
IChhdXRvIG5hbWVTZWN0aW9uID0gbmFtZVNlY3Rpb25QYXJzZXIucGFyc2UoKSkKLSAgICAgICAg
ICAgIG1faW5mby0+bmFtZVNlY3Rpb24gPSBXVEZNb3ZlKCpuYW1lU2VjdGlvbik7Ci0gICAgfQot
Ci0gICAgbV9pbmZvLT5jdXN0b21TZWN0aW9ucy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShzZWN0
aW9uKSk7Ci0KLSAgICByZXR1cm4geyB9OwotfQotCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2Fz
bQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oCmluZGV4IGE2NTFiZTE3Y2UyM2I4NWZiYjk3YmJi
Njg1NzAzYjM5YjY0YjcyYzQuLmQzM2I3Nzk1MzM3M2RiMjdmMTUxOTlkOTgwNDA4MGYwOTI5NmVk
YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJz
ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgK
QEAgLTQ2LDIxICs0Niw3IEBAIGNsYXNzIE1vZHVsZVBhcnNlciA6IHB1YmxpYyBQYXJzZXI8dm9p
ZD4gewogICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2UoKTsKIAogcHJpdmF0ZToK
LQotI2RlZmluZSBXQVNNX1NFQ1RJT05fREVDTEFSRV9QQVJTRVIoTkFNRSwgSUQsIERFU0NSSVBU
SU9OKSBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZSAjIyBOQU1FKCk7Ci0g
ICAgRk9SX0VBQ0hfS05PV05fV0FTTV9TRUNUSU9OKFdBU01fU0VDVElPTl9ERUNMQVJFX1BBUlNF
UikKLSN1bmRlZiBXQVNNX1NFQ1RJT05fREVDTEFSRV9QQVJTRVIKLQotICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlQ3VzdG9tKHVpbnQzMl90KTsKLSAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUdsb2JhbFR5cGUoR2xvYmFsJik7Ci0gICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VNZW1vcnlIZWxwZXIoYm9vbCBp
c0ltcG9ydCk7Ci0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VUYWJs
ZUhlbHBlcihib29sIGlzSW1wb3J0KTsKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBwYXJzZVJlc2l6YWJsZUxpbWl0cyh1aW50MzJfdCYgaW5pdGlhbCwgc3RkOjpvcHRpb25h
bDx1aW50MzJfdD4mIG1heGltdW0pOwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIHBhcnNlSW5pdEV4cHIodWludDhfdCYsIHVpbnQ2NF90JiwgVHlwZSYgaW5pdEV4cHJUeXBl
KTsKLQogICAgIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4gbV9pbmZvOwotICAgIHVpbnQzMl90IG1f
bWVtb3J5Q291bnQgeyAwIH07Ci0gICAgdWludDMyX3QgbV90YWJsZUNvdW50IHsgMCB9OwogfTsK
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21OYW1lU2VjdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU5hbWVTZWN0aW9uLmgKaW5kZXggN2MwMmYyZjQxOTc3MDVhYzhiZWVlZjQ0MTg5OTBk
MjhlZTM0ZjA4NC4uZmU2M2NmNTU0NzM2NmZjMTc0MGMxZjBjNzBiYTgxYmU3NTM2YTg4ZSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU5hbWVTZWN0aW9uLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU5hbWVTZWN0aW9uLmgKQEAgLTM2LDEx
ICszNiwyMCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCiBzdHJ1Y3QgTmFt
ZVNlY3Rpb24gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TmFtZVNlY3Rpb24+IHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShOYW1lU2VjdGlvbik7Ci0KIHB1YmxpYzoKLSAgICBOYW1l
U2VjdGlvbihjb25zdCBzdGQ6Om9wdGlvbmFsPENTdHJpbmc+ICZoYXNoKQotICAgICAgICA6IG1v
ZHVsZUhhc2goaGFzaCA/IGhhc2gtPmxlbmd0aCgpIDogMykKKyAgICBOYW1lU2VjdGlvbigpCisg
ICAgeworICAgICAgICBzZXRIYXNoKHN0ZDo6bnVsbG9wdCk7CisgICAgfQorCisgICAgc3RhdGlj
IFJlZjxOYW1lU2VjdGlvbj4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IE5hbWVTZWN0aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIHNldEhhc2goY29uc3Qgc3Rk
OjpvcHRpb25hbDxDU3RyaW5nPiAmaGFzaCkKICAgICB7CisgICAgICAgIG1vZHVsZUhhc2ggPSBO
YW1lKGhhc2ggPyBoYXNoLT5sZW5ndGgoKSA6IDMpOwogICAgICAgICBpZiAoaGFzaCkgewogICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBoYXNoLT5sZW5ndGgoKTsgKytpKQogICAg
ICAgICAgICAgICAgIG1vZHVsZUhhc2hbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90PigqKGhhc2gt
PmRhdGEoKSArIGkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21OYW1lU2VjdGlvblBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TmFtZVNlY3Rpb25QYXJzZXIuY3BwCmluZGV4IDczMzk2MjE1Y2Y1OGJjNTI2YjM0OGNjMGE4OGM3
MTNkNGRlYzU5NzcuLjVlYmRjMGNjYWU0MDdhMmI5YjlhM2I5MWY2ZWNhNTgyNWMxMmExZWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21OYW1lU2VjdGlvblBhcnNl
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU5hbWVTZWN0aW9uUGFy
c2VyLmNwcApAQCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20g
ewogCiBhdXRvIE5hbWVTZWN0aW9uUGFyc2VyOjpwYXJzZSgpIC0+IFJlc3VsdAogewotICAgIFJl
ZlB0cjxOYW1lU2VjdGlvbj4gbmFtZVNlY3Rpb24oYWRvcHRSZWYoKm5ldyBOYW1lU2VjdGlvbiht
X2luZm8uaGFzaCkpKTsKKyAgICBSZWY8TmFtZVNlY3Rpb24+IG5hbWVTZWN0aW9uID0gTmFtZVNl
Y3Rpb246OmNyZWF0ZSgpOwogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW5hbWVTZWN0aW9uLT5m
dW5jdGlvbk5hbWVzLnRyeVJlc2VydmVDYXBhY2l0eShtX2luZm8uZnVuY3Rpb25JbmRleFNwYWNl
U2l6ZSgpKSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIGZ1bmN0aW9uIG5hbWVz
Iik7CiAgICAgbmFtZVNlY3Rpb24tPmZ1bmN0aW9uTmFtZXMucmVzaXplKG1faW5mby5mdW5jdGlv
bkluZGV4U3BhY2VTaXplKCkpOwogCkBAIC05Niw3ICs5Niw3IEBAIGF1dG8gTmFtZVNlY3Rpb25Q
YXJzZXI6OnBhcnNlKCkgLT4gUmVzdWx0CiAgICAgICAgIH0KICAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihwYXlsb2FkU3RhcnQgKyBwYXlsb2FkTGVuZ3RoICE9IG1fb2Zmc2V0KTsKICAgICB9
Ci0gICAgcmV0dXJuIG5hbWVTZWN0aW9uOworICAgIHJldHVybiBXVEZNb3ZlKG5hbWVTZWN0aW9u
KTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21OYW1lU2VjdGlvblBhcnNlci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmgKaW5kZXggYjdhZjBkOWI5MGE2
ZDUyNmU5MmQ0ZDgyNGZlZWRiNDRkNTk4NzY4My4uZDhlNmFlNzFiMjZiNGJlY2M4Yjg4OGJiZmQ1
ZWIyNzk4NWM2ZDIxOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU5hbWVTZWN0aW9uUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU5hbWVTZWN0aW9uUGFyc2VyLmgKQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBXYXNtIHsKIAotY2xhc3MgTmFtZVNlY3Rpb25QYXJzZXIgOiBwdWJsaWMgUGFy
c2VyPFJlZlB0cjxOYW1lU2VjdGlvbj4+IHsKK2NsYXNzIE5hbWVTZWN0aW9uUGFyc2VyIDogcHVi
bGljIFBhcnNlcjxSZWY8TmFtZVNlY3Rpb24+PiB7CiBwdWJsaWM6CiAgICAgTmFtZVNlY3Rpb25Q
YXJzZXIoY29uc3QgdWludDhfdCogc291cmNlQnVmZmVyLCBzaXplX3Qgc291cmNlTGVuZ3RoLCBj
b25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbykKICAgICAgICAgOiBQYXJzZXIoc291cmNlQnVm
ZmVyLCBzb3VyY2VMZW5ndGgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtT01HUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxh
bi5jcHAKaW5kZXggNDdkZWFkNjRhZjhmZDVjMzY5OWQyZThmNjQwZWQ4YmViMDQyMGM5ZC4uOWUw
YzRhNTY2NmU0NGUwZWFjYzIzMTJhYmJiNzY1NDUzYjg3OWY0OCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcApAQCAtNjksMjEgKzY5LDE4IEBAIHZvaWQgT01H
UGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKIHsKICAgICBBU1NFUlQobV9jb2RlQmxvY2st
PnJ1bm5hYmxlKCkpOwogICAgIEFTU0VSVChtX2NvZGVCbG9jay5wdHIoKSA9PSBtX21vZHVsZS0+
Y29kZUJsb2NrRm9yKG1vZGUoKSkpOwotICAgIGNvbnN0IEZ1bmN0aW9uTG9jYXRpb25JbkJpbmFy
eSYgbG9jYXRpb24gPSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbkxvY2F0aW9uSW5CaW5h
cnlbbV9mdW5jdGlvbkluZGV4XTsKLSAgICBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0ID0g
bV9tb2R1bGVJbmZvcm1hdGlvbi0+c291cmNlLmRhdGEoKSArIGxvY2F0aW9uLnN0YXJ0OwotICAg
IGNvbnN0IHNpemVfdCBmdW5jdGlvbkxlbmd0aCA9IGxvY2F0aW9uLmVuZCAtIGxvY2F0aW9uLnN0
YXJ0OwotICAgIEFTU0VSVChmdW5jdGlvblN0YXJ0ICsgZnVuY3Rpb25MZW5ndGggPD0gbV9tb2R1
bGVJbmZvcm1hdGlvbi0+c291cmNlLmVuZCgpKTsKKyAgICBjb25zdCBGdW5jdGlvbkRhdGEmIGZ1
bmN0aW9uID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25zW21fZnVuY3Rpb25JbmRleF07
CiAKICAgICBjb25zdCB1aW50MzJfdCBmdW5jdGlvbkluZGV4U3BhY2UgPSBtX2Z1bmN0aW9uSW5k
ZXggKyBtX21vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5pbXBvcnRGdW5jdGlvbkNvdW50KCk7
CiAgICAgQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA8IG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1h
dGlvbigpLmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7CiAKICAgICBTaWduYXR1cmVJbmRleCBz
aWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWdu
YXR1cmVJbmRpY2VzW21fZnVuY3Rpb25JbmRleF07CiAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWdu
YXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKLSAgICBB
U1NFUlQodmFsaWRhdGVGdW5jdGlvbihmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2ln
bmF0dXJlLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpKSk7CisgICAgQVNTRVJUKHZhbGlkYXRl
RnVuY3Rpb24oZnVuY3Rpb24uZGF0YS5kYXRhKCksIGZ1bmN0aW9uLmRhdGEuc2l6ZSgpLCBzaWdu
YXR1cmUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCkpKTsKIAogICAgIFZlY3RvcjxVbmxpbmtl
ZFdhc21Ub1dhc21DYWxsPiB1bmxpbmtlZENhbGxzOwogICAgIENvbXBpbGF0aW9uQ29udGV4dCBj
b250ZXh0OwotICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxl
KGNvbnRleHQsIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIHVubGlu
a2VkQ2FsbHMsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25N
b2RlOjpPTUdNb2RlLCBtX2Z1bmN0aW9uSW5kZXgpOworICAgIGF1dG8gcGFyc2VBbmRDb21waWxl
UmVzdWx0ID0gcGFyc2VBbmRDb21waWxlKGNvbnRleHQsIGZ1bmN0aW9uLmRhdGEuZGF0YSgpLCBm
dW5jdGlvbi5kYXRhLnNpemUoKSwgc2lnbmF0dXJlLCB1bmxpbmtlZENhbGxzLCBtX21vZHVsZUlu
Zm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6T01HTW9kZSwgbV9mdW5j
dGlvbkluZGV4KTsKIAogICAgIGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxlUmVzdWx0KSkg
ewogICAgICAgICBmYWlsKGhvbGRMb2NrKG1fbG9jayksIG1ha2VTdHJpbmcocGFyc2VBbmRDb21w
aWxlUmVzdWx0LmVycm9yKCksICJ3aGVuIHRyeWluZyB0byB0aWVyIHVwICIsIFN0cmluZzo6bnVt
YmVyKG1fZnVuY3Rpb25JbmRleCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21QYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYXJz
ZXIuaAppbmRleCA2NTEwNzA1ZWFmNTc4Y2UzM2UzYmQ3NmIyYmM4MzhhZGRhNWY1YjAwLi45ZmM0
YTQ1NGM5YjcyNmZhMTNlODRhNGI0NzNmZWFkODEyYmI5OWYwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVBhcnNlci5oCkBAIC01OCw2ICs1OCwxMCBAQCBjbGFzcyBQYXJzZXIgewog
ICAgIHR5cGVkZWYgRXhwZWN0ZWQ8dm9pZCwgRXJyb3JUeXBlPiBQYXJ0aWFsUmVzdWx0OwogICAg
IHR5cGVkZWYgRXhwZWN0ZWQ8U3VjY2Vzc1R5cGUsIEVycm9yVHlwZT4gUmVzdWx0OwogCisgICAg
Y29uc3QgdWludDhfdCogc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KKyAgICBz
aXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VMZW5ndGg7IH0KKyAgICBzaXpl
X3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKwogcHJvdGVjdGVkOgogICAg
IFBhcnNlcihjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKIApAQCAtODEsMTYgKzg1LDEzIEBAIGNs
YXNzIFBhcnNlciB7CiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VWYWx1ZVR5cGUo
VHlwZSYpOwogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlRXh0ZXJuYWxLaW5kKEV4
dGVybmFsS2luZCYpOwogCi0gICAgY29uc3QgdWludDhfdCogc291cmNlKCkgY29uc3QgeyByZXR1
cm4gbV9zb3VyY2U7IH0KLSAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9zb3Vy
Y2VMZW5ndGg7IH0KLQogICAgIHNpemVfdCBtX29mZnNldCA9IDA7CiAKICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgLi4uQXJncz4KICAgICBORVZFUl9JTkxJTkUgVW5leHBlY3RlZFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gZmFpbChBcmdzLi4uIGFyZ3MpIGNvbnN0CiAgICAgewogICAgICAgICB1
c2luZyBuYW1lc3BhY2UgRmFpbHVyZUhlbHBlcjsgLy8gU2VlIEFETCBjb21tZW50IGluIG5hbWVz
cGFjZSBhYm92ZS4KLSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRSZXN1bHQobWFrZVN0cmluZygi
V2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAiX3MsIFN0cmluZzo6bnVt
YmVyKG1fb2Zmc2V0KSwgIiAvICJfcywgU3RyaW5nOjpudW1iZXIobV9zb3VyY2VMZW5ndGgpLCAi
OiAiX3MsIG1ha2VTdHJpbmcoYXJncykuLi4pKTsKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRS
ZXN1bHQobWFrZVN0cmluZygiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0
ZSAiX3MsIFN0cmluZzo6bnVtYmVyKG1fb2Zmc2V0KSwgIjogIl9zLCBtYWtlU3RyaW5nKGFyZ3Mp
Li4uKSk7CiAgICAgfQogI2RlZmluZSBXQVNNX1BBUlNFUl9GQUlMX0lGKGNvbmRpdGlvbiwgLi4u
KSBkbyB7IFwKICAgICBpZiAoVU5MSUtFTFkoY29uZGl0aW9uKSkgICAgICAgICAgICAgICAgICAg
ICBcCkBAIC0yODUsNiArMjg2LDE0IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI8U3VjY2Vz
c1R5cGU+OjpwYXJzZUV4dGVybmFsS2luZChFeHRlcm5hbEtpbmQmIHJlc3VsdCkKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAorQUxXQVlTX0lOTElORSBJMzJJbml0RXhwciBtYWtlSTMySW5pdEV4cHIo
dWludDhfdCBvcGNvZGUsIHVpbnQzMl90IGJpdHMpCit7CisgICAgUkVMRUFTRV9BU1NFUlQob3Bj
b2RlID09IEkzMkNvbnN0IHx8IG9wY29kZSA9PSBHZXRHbG9iYWwpOworICAgIGlmIChvcGNvZGUg
PT0gSTMyQ29uc3QpCisgICAgICAgIHJldHVybiBJMzJJbml0RXhwcjo6Y29uc3RWYWx1ZShiaXRz
KTsKKyAgICByZXR1cm4gSTMySW5pdEV4cHI6Omdsb2JhbEltcG9ydChiaXRzKTsKK30KKwogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAppbmRleCBhMzRkZWVjYjE2YjE0
MGJlYjUzYjg3YzZlMmE3MDM5ODM0OTMwYzJjLi45OTc0ZWNmZTU1YmFmMjg5ZWVjNTY1MDY2YTFj
ZDQ5YWUyM2E4MjBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
UGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCkBA
IC01Myw4ICs1Myw2IEBAIFBsYW46OlBsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVsZUlu
Zm9ybWF0aW9uPiBpbmZvLCBDb21wbGV0aW9uVGFzayYmIHRhc2ssCiAgICAgOiBtX21vZHVsZUlu
Zm9ybWF0aW9uKFdURk1vdmUoaW5mbykpCiAgICAgLCBtX2NyZWF0ZUVtYmVkZGVyV3JhcHBlcihX
VEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlcikpCiAgICAgLCBtX3Rocm93V2FzbUV4Y2VwdGlv
bih0aHJvd1dhc21FeGNlcHRpb24pCi0gICAgLCBtX3NvdXJjZShtX21vZHVsZUluZm9ybWF0aW9u
LT5zb3VyY2UuZGF0YSgpKQotICAgICwgbV9zb3VyY2VMZW5ndGgobV9tb2R1bGVJbmZvcm1hdGlv
bi0+c291cmNlLnNpemUoKSkKIHsKICAgICBtX2NvbXBsZXRpb25UYXNrcy5hcHBlbmQoc3RkOjpt
YWtlX3BhaXIoY29udGV4dCwgV1RGTW92ZSh0YXNrKSkpOwogfQpAQCAtNjQsMTAgKzYyLDggQEAg
UGxhbjo6UGxhbihDb250ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGluZm8s
IENvbXBsZXRpb25UYXNrJiYgdGFzaykKIHsKIH0KIAotUGxhbjo6UGxhbihDb250ZXh0KiBjb250
ZXh0LCBjb25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgsIENvbXBsZXRp
b25UYXNrJiYgdGFzaykKLSAgICA6IG1fbW9kdWxlSW5mb3JtYXRpb24oYWRvcHRSZWYoKm5ldyBN
b2R1bGVJbmZvcm1hdGlvbihWZWN0b3I8dWludDhfdD4oKSkpKQotICAgICwgbV9zb3VyY2Uoc291
cmNlKQotICAgICwgbV9zb3VyY2VMZW5ndGgoc291cmNlTGVuZ3RoKQorUGxhbjo6UGxhbihDb250
ZXh0KiBjb250ZXh0LCBDb21wbGV0aW9uVGFzayYmIHRhc2spCisgICAgOiBtX21vZHVsZUluZm9y
bWF0aW9uKE1vZHVsZUluZm9ybWF0aW9uOjpjcmVhdGUoKSkKIHsKICAgICBtX2NvbXBsZXRpb25U
YXNrcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoY29udGV4dCwgV1RGTW92ZSh0YXNrKSkpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgKaW5kZXggN2EwN2JmZDNhMGIwNmU5MzQ0
MDk1N2RiMzZkZTZkZGRhZTYzYzY0Yy4uOWVjNjg4NjU4MTMzMWJhY2M5ZjA4ZGQyNmY5YWFiYjRl
OWJkNTNiZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4u
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCkBAIC01NCw3ICs1
NCw3IEBAIGNsYXNzIFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UGxhbj4gewog
ICAgIFBsYW4oQ29udGV4dCosIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4sIENvbXBsZXRpb25UYXNr
JiYpOwogCiAgICAgLy8gTm90ZTogVGhpcyBjb25zdHJ1Y3RvciBzaG91bGQgb25seSBiZSB1c2Vk
IGlmIHlvdSBhcmUgbm90IGFjdHVhbGx5IGJ1aWxkaW5nIGEgbW9kdWxlIGUuZy4gdmFsaWRhdGlv
bi9mdW5jdGlvbiB0ZXN0cwotICAgIEpTX0VYUE9SVF9QUklWQVRFIFBsYW4oQ29udGV4dCosIGNv
bnN0IHVpbnQ4X3QqLCBzaXplX3QsIENvbXBsZXRpb25UYXNrJiYpOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIFBsYW4oQ29udGV4dCosIENvbXBsZXRpb25UYXNrJiYpOwogICAgIHZpcnR1YWwgSlNf
RVhQT1JUX1BSSVZBVEUgflBsYW4oKTsKIAogICAgIC8vIElmIHlvdSBndWFyYW50ZWUgdGhlIG9y
ZGVyaW5nIGhlcmUsIHlvdSBjYW4gcmVseSBvbiBGSUZPIG9mIHRoZQpAQCAtOTAsOCArOTAsNiBA
QCBjbGFzcyBQbGFuIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFBsYW4+IHsKICAgICBD
cmVhdGVFbWJlZGRlcldyYXBwZXIgbV9jcmVhdGVFbWJlZGRlcldyYXBwZXI7CiAgICAgVGhyb3dX
YXNtRXhjZXB0aW9uIG1fdGhyb3dXYXNtRXhjZXB0aW9uIHsgbnVsbHB0ciB9OwogCi0gICAgY29u
c3QgdWludDhfdCogbV9zb3VyY2U7Ci0gICAgY29uc3Qgc2l6ZV90IG1fc291cmNlTGVuZ3RoOwog
ICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsKICAgICBNZW1vcnlNb2RlIG1fbW9kZSB7IE1lbW9y
eU1vZGU6OkJvdW5kc0NoZWNraW5nIH07CiAgICAgTG9jayBtX2xvY2s7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWE5
YmFjYjY3ZGVkMjUwNDUzNWQ4YzJkZTVjNWVkODMzZGVmMTYwMgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9uUGFyc2VyLmNwcApAQCAtMCww
ICsxLDU2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2UgU3V6dWtpIDx5
dXN1a2VzdXp1a2lAc2xvd3N0YXJ0Lm9yZz4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXYXNtU2VjdGlv
blBhcnNlci5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiSWRlbnRp
ZmllcklubGluZXMuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5SW5mb3JtYXRpb24uaCIKKyNpbmNs
dWRlICJXYXNtTmFtZVNlY3Rpb25QYXJzZXIuaCIKKyNpbmNsdWRlICJXYXNtT3BzLmgiCisjaW5j
bHVkZSAiV2FzbVNlY3Rpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7
CisKK2F1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VUeXBlKCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHVpbnQzMl90IGNvdW50OworCisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJV
SW50MzIoY291bnQpLCAiY2FuJ3QgZ2V0IFR5cGUgc2VjdGlvbidzIGNvdW50Iik7CisgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRihjb3VudCA+IG1heFR5cGVzLCAiVHlwZSBzZWN0aW9uJ3MgY291bnQg
aXMgdG9vIGJpZyAiLCBjb3VudCwgIiBtYXhpbXVtICIsIG1heFR5cGVzKTsKKyAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFtX2luZm8tPnVzZWRTaWduYXR1cmVzLnRyeVJlc2VydmVDYXBhY2l0eShj
b3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBUeXBlIHNlY3Rpb24ncyAi
LCBjb3VudCwgIiBlbnRyaWVzIik7CisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgY291
bnQ7ICsraSkgeworICAgICAgICBpbnQ4X3QgdHlwZTsKKyAgICAgICAgdWludDMyX3QgYXJndW1l
bnRDb3VudDsKKyAgICAgICAgVmVjdG9yPFR5cGU+IGFyZ3VtZW50VHlwZXM7CisKKyAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VJbnQ3KHR5cGUpLCAiY2FuJ3QgZ2V0ICIsIGksICJ0
aCBUeXBlJ3MgdHlwZSIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHR5cGUgIT0gRnVu
YywgaSwgInRoIFR5cGUgaXMgbm9uLUZ1bmMgIiwgdHlwZSk7CisgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGFyZ3VtZW50Q291bnQpLCAiY2FuJ3QgZ2V0ICIsIGks
ICJ0aCBUeXBlJ3MgYXJndW1lbnQgY291bnQiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
Rihhcmd1bWVudENvdW50ID4gbWF4RnVuY3Rpb25QYXJhbXMsIGksICJ0aCBhcmd1bWVudCBjb3Vu
dCBpcyB0b28gYmlnICIsIGFyZ3VtZW50Q291bnQsICIgbWF4aW11bSAiLCBtYXhGdW5jdGlvblBh
cmFtcyk7CisgICAgICAgIFJlZlB0cjxTaWduYXR1cmU+IG1heWJlU2lnbmF0dXJlID0gU2lnbmF0
dXJlOjp0cnlDcmVhdGUoYXJndW1lbnRDb3VudCk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIW1heWJlU2lnbmF0dXJlLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgVHlw
ZSBzZWN0aW9uJ3MgIiwgaSwgInRoIHNpZ25hdHVyZSIpOworICAgICAgICBSZWY8U2lnbmF0dXJl
PiBzaWduYXR1cmUgPSBtYXliZVNpZ25hdHVyZS5yZWxlYXNlTm9uTnVsbCgpOworCisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmd1bWVudENvdW50OyArK2kpIHsKKyAgICAgICAg
ICAgIFR5cGUgYXJndW1lbnRUeXBlOworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
cGFyc2VWYWx1ZVR5cGUoYXJndW1lbnRUeXBlKSwgImNhbid0IGdldCAiLCBpLCAidGggYXJndW1l
bnQgVHlwZSIpOworICAgICAgICAgICAgc2lnbmF0dXJlLT5hcmd1bWVudChpKSA9IGFyZ3VtZW50
VHlwZTsKKyAgICAgICAgfQorCisgICAgICAgIHVpbnQ4X3QgcmV0dXJuQ291bnQ7CisgICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDEocmV0dXJuQ291bnQpLCAiY2FuJ3Qg
Z2V0ICIsIGksICJ0aCBUeXBlJ3MgcmV0dXJuIGNvdW50Iik7CisgICAgICAgIFR5cGUgcmV0dXJu
VHlwZTsKKyAgICAgICAgaWYgKHJldHVybkNvdW50KSB7CisgICAgICAgICAgICBUeXBlIHZhbHVl
OworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYWx1ZVR5cGUodmFsdWUp
LCAiY2FuJ3QgZ2V0ICIsIGksICJ0aCBUeXBlJ3MgcmV0dXJuIHZhbHVlIik7CisgICAgICAgICAg
ICByZXR1cm5UeXBlID0gc3RhdGljX2Nhc3Q8VHlwZT4odmFsdWUpOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIHJldHVyblR5cGUgPSBUeXBlOjpWb2lkOworICAgICAgICBzaWduYXR1cmUt
PnJldHVyblR5cGUoKSA9IHJldHVyblR5cGU7CisKKyAgICAgICAgc3RkOjpwYWlyPFNpZ25hdHVy
ZUluZGV4LCBSZWY8U2lnbmF0dXJlPj4gcmVzdWx0ID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmFk
b3B0KFdURk1vdmUoc2lnbmF0dXJlKSk7CisgICAgICAgIG1faW5mby0+dXNlZFNpZ25hdHVyZXMu
dW5jaGVja2VkQXBwZW5kKFdURk1vdmUocmVzdWx0LnNlY29uZCkpOworICAgIH0KKyAgICByZXR1
cm4geyB9OworfQorCithdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlSW1wb3J0KCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHVpbnQzMl90IGltcG9ydENvdW50OworICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIXBhcnNlVmFyVUludDMyKGltcG9ydENvdW50KSwgImNhbid0IGdldCBJbXBvcnQgc2Vj
dGlvbidzIGNvdW50Iik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbXBvcnRDb3VudCA+IG1h
eEltcG9ydHMsICJJbXBvcnQgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgaW1wb3J0Q291
bnQsICIgbWF4aW11bSAiLCBtYXhJbXBvcnRzKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFt
X2luZm8tPmdsb2JhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50KSwgImNhbid0IGFs
bG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGltcG9ydENvdW50LCAiIGdsb2JhbHMiKTsgLy8g
RklYTUUgdGhpcyBvdmVyLWFsbG9jYXRlcyB3aGVuIHdlIGZpeCB0aGUgRklYTUVzIGJlbG93Lgor
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+aW1wb3J0cy50cnlSZXNlcnZlQ2FwYWNp
dHkoaW1wb3J0Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgaW1w
b3J0Q291bnQsICIgaW1wb3J0cyIpOyAvLyBGSVhNRSB0aGlzIG92ZXItYWxsb2NhdGVzIHdoZW4g
d2UgZml4IHRoZSBGSVhNRXMgYmVsb3cuCisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZv
LT5pbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9y
dENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGltcG9ydENvdW50
LCAiIGltcG9ydCBmdW5jdGlvbiBzaWduYXR1cmVzIik7IC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxv
Y2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxvdy4KKworICAgIGZvciAodWludDMyX3Qg
aW1wb3J0TnVtYmVyID0gMDsgaW1wb3J0TnVtYmVyIDwgaW1wb3J0Q291bnQ7ICsraW1wb3J0TnVt
YmVyKSB7CisgICAgICAgIHVpbnQzMl90IG1vZHVsZUxlbjsKKyAgICAgICAgdWludDMyX3QgZmll
bGRMZW47CisgICAgICAgIE5hbWUgbW9kdWxlU3RyaW5nOworICAgICAgICBOYW1lIGZpZWxkU3Ry
aW5nOworICAgICAgICBFeHRlcm5hbEtpbmQga2luZDsKKyAgICAgICAgdW5zaWduZWQga2luZElu
ZGV4IHsgMCB9OworCisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMy
KG1vZHVsZUxlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0J3MgbW9k
dWxlIG5hbWUgbGVuZ3RoIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVV
VEY4U3RyaW5nKG1vZHVsZVN0cmluZywgbW9kdWxlTGVuKSwgImNhbid0IGdldCAiLCBpbXBvcnRO
dW1iZXIsICJ0aCBJbXBvcnQncyBtb2R1bGUgbmFtZSBvZiBsZW5ndGggIiwgbW9kdWxlTGVuKTsK
KworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihmaWVsZExlbiks
ICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0J3MgZmllbGQgbmFtZSBsZW5n
dGggaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIik7CisgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIWNvbnN1bWVVVEY4U3RyaW5nKGZpZWxkU3RyaW5nLCBmaWVsZExlbiksICJjYW4n
dCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0J3MgZmllbGQgbmFtZSBvZiBsZW5ndGgg
IiwgbW9kdWxlTGVuLCAiIGluIG1vZHVsZSAnIiwgbW9kdWxlU3RyaW5nLCAiJyIpOworCisgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlRXh0ZXJuYWxLaW5kKGtpbmQpLCAiY2FuJ3Qg
Z2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdzIGtpbmQgaW4gbW9kdWxlICciLCBtb2R1
bGVTdHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0cmluZywgIiciKTsKKyAgICAgICAgc3dpdGNo
IChraW5kKSB7CisgICAgICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpGdW5jdGlvbjogeworICAgICAg
ICAgICAgdWludDMyX3QgZnVuY3Rpb25TaWduYXR1cmVJbmRleDsKKyAgICAgICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGZ1bmN0aW9uU2lnbmF0dXJlSW5kZXgpLCAi
Y2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdzIGZ1bmN0aW9uIHNpZ25hdHVy
ZSBpbiBtb2R1bGUgJyIsIG1vZHVsZVN0cmluZywgIicgZmllbGQgJyIsIGZpZWxkU3RyaW5nLCAi
JyIpOworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvblNpZ25hdHVyZUlu
ZGV4ID49IG1faW5mby0+dXNlZFNpZ25hdHVyZXMuc2l6ZSgpLCAiaW52YWxpZCBmdW5jdGlvbiBz
aWduYXR1cmUgZm9yICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCwgIiwgZnVuY3Rpb25TaWdu
YXR1cmVJbmRleCwgIiBpcyBvdXQgb2YgcmFuZ2Ugb2YgIiwgbV9pbmZvLT51c2VkU2lnbmF0dXJl
cy5zaXplKCksICIgaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIGZpZWxkICciLCBmaWVs
ZFN0cmluZywgIiciKTsKKyAgICAgICAgICAgIGtpbmRJbmRleCA9IG1faW5mby0+aW1wb3J0RnVu
Y3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsKKyAgICAgICAgICAgIFNpZ25hdHVyZUluZGV4
IHNpZ25hdHVyZUluZGV4ID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChtX2luZm8tPnVzZWRT
aWduYXR1cmVzW2Z1bmN0aW9uU2lnbmF0dXJlSW5kZXhdKTsKKyAgICAgICAgICAgIG1faW5mby0+
aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnVuY2hlY2tlZEFwcGVuZChzaWduYXR1cmVJ
bmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEV4dGVy
bmFsS2luZDo6VGFibGU6IHsKKyAgICAgICAgICAgIGJvb2wgaXNJbXBvcnQgPSB0cnVlOworICAg
ICAgICAgICAgUGFydGlhbFJlc3VsdCByZXN1bHQgPSBwYXJzZVRhYmxlSGVscGVyKGlzSW1wb3J0
KTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoV1RGTW92ZShyZXN1bHQuZXJyb3IoKSkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6Ok1lbW9yeTog
eworICAgICAgICAgICAgYm9vbCBpc0ltcG9ydCA9IHRydWU7CisgICAgICAgICAgICBQYXJ0aWFs
UmVzdWx0IHJlc3VsdCA9IHBhcnNlTWVtb3J5SGVscGVyKGlzSW1wb3J0KTsKKyAgICAgICAgICAg
IGlmIChVTkxJS0VMWSghcmVzdWx0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoV1RGTW92ZShyZXN1bHQuZXJyb3IoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6Okdsb2JhbDogeworICAgICAgICAgICAg
R2xvYmFsIGdsb2JhbDsKKyAgICAgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFy
c2VHbG9iYWxUeXBlKGdsb2JhbCkpOworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihn
bG9iYWwubXV0YWJpbGl0eSA9PSBHbG9iYWw6Ok11dGFibGUsICJNdXRhYmxlIEdsb2JhbHMgYXJl
bid0IHN1cHBvcnRlZCIpOworCisgICAgICAgICAgICBraW5kSW5kZXggPSBtX2luZm8tPmdsb2Jh
bHMuc2l6ZSgpOworICAgICAgICAgICAgbV9pbmZvLT5nbG9iYWxzLnVuY2hlY2tlZEFwcGVuZChX
VEZNb3ZlKGdsb2JhbCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIG1faW5mby0+aW1wb3J0cy51bmNoZWNrZWRBcHBlbmQoeyBXVEZNb3ZlKG1v
ZHVsZVN0cmluZyksIFdURk1vdmUoZmllbGRTdHJpbmcpLCBraW5kLCBraW5kSW5kZXggfSk7Cisg
ICAgfQorCisgICAgbV9pbmZvLT5maXJzdEludGVybmFsR2xvYmFsID0gbV9pbmZvLT5nbG9iYWxz
LnNpemUoKTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNl
RnVuY3Rpb24oKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgdWludDMyX3QgY291bnQ7CisgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoY291bnQpLCAiY2FuJ3QgZ2V0IEZ1
bmN0aW9uIHNlY3Rpb24ncyBjb3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoY291bnQg
PiBtYXhGdW5jdGlvbnMsICJGdW5jdGlvbiBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBj
b3VudCwgIiBtYXhpbXVtICIsIG1heEZ1bmN0aW9ucyk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RighbV9pbmZvLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy50cnlSZXNlcnZlQ2Fw
YWNpdHkoY291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgY291bnQs
ICIgRnVuY3Rpb24gc2lnbmF0dXJlcyIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5m
by0+ZnVuY3Rpb25zLnRyeVJlc2VydmVDYXBhY2l0eShjb3VudCksICJjYW4ndCBhbGxvY2F0ZSBl
bm91Z2ggbWVtb3J5IGZvciAiLCBjb3VudCwgIkZ1bmN0aW9uIGxvY2F0aW9ucyIpOworCisgICAg
Zm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgdWludDMyX3Qg
dHlwZU51bWJlcjsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIo
dHlwZU51bWJlciksICJjYW4ndCBnZXQgIiwgaSwgInRoIEZ1bmN0aW9uJ3MgdHlwZSBudW1iZXIi
KTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0eXBlTnVtYmVyID49IG1faW5mby0+dXNl
ZFNpZ25hdHVyZXMuc2l6ZSgpLCBpLCAidGggRnVuY3Rpb24gdHlwZSBudW1iZXIgaXMgaW52YWxp
ZCAiLCB0eXBlTnVtYmVyKTsKKworICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRl
eCA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQobV9pbmZvLT51c2VkU2lnbmF0dXJlc1t0eXBl
TnVtYmVyXSk7CisgICAgICAgIC8vIFRoZSBDb2RlIHNlY3Rpb24gZml4ZXMgdXAgc3RhcnQgYW5k
IGVuZC4KKyAgICAgICAgc2l6ZV90IHN0YXJ0ID0gMDsKKyAgICAgICAgc2l6ZV90IGVuZCA9IDA7
CisgICAgICAgIG1faW5mby0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXMudW5jaGVj
a2VkQXBwZW5kKHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgbV9pbmZvLT5mdW5jdGlvbnMudW5j
aGVja2VkQXBwZW5kKHsgc3RhcnQsIGVuZCwgVmVjdG9yPHVpbnQ4X3Q+KCkgfSk7CisgICAgfQor
CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZVJlc2l6YWJs
ZUxpbWl0cyh1aW50MzJfdCYgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4mIG1heGlt
dW0pIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQoIW1heGltdW0pOworCisgICAgdWlu
dDhfdCBmbGFnczsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQxKGZsYWdz
KSwgImNhbid0IHBhcnNlIHJlc2l6YWJsZSBsaW1pdHMgZmxhZ3MiKTsKKyAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbml0aWFsKSwgImNhbid0IHBhcnNlIHJlc2l6YWJs
ZSBsaW1pdHMgaW5pdGlhbCBwYWdlIGNvdW50Iik7CisKKyAgICBpZiAoZmxhZ3MpIHsKKyAgICAg
ICAgdWludDMyX3QgbWF4aW11bUludDsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFy
c2VWYXJVSW50MzIobWF4aW11bUludCksICJjYW4ndCBwYXJzZSByZXNpemFibGUgbGltaXRzIG1h
eGltdW0gcGFnZSBjb3VudCIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluaXRpYWwg
PiBtYXhpbXVtSW50LCAicmVzaXphYmxlIGxpbWl0cyBoYXMgYSBpbml0aWFsIHBhZ2UgY291bnQg
b2YgIiwgaW5pdGlhbCwgIiB3aGljaCBpcyBncmVhdGVyIHRoYW4gaXRzIG1heGltdW0gIiwgbWF4
aW11bUludCk7CisgICAgICAgIG1heGltdW0gPSBtYXhpbXVtSW50OworICAgIH0KKworICAgIHJl
dHVybiB7IH07Cit9CisKK2F1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VUYWJsZUhlbHBlcihib29s
IGlzSW1wb3J0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRiht
X2luZm8tPnRhYmxlQ291bnQoKSA+IDAsICJDYW5ub3QgaGF2ZSBtb3JlIHRoYW4gb25lIFRhYmxl
IGZvciBub3ciKTsKKworICAgIGludDhfdCB0eXBlOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlSW50Nyh0eXBlKSwgImNhbid0IHBhcnNlIFRhYmxlIHR5cGUiKTsKKyAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKHR5cGUgIT0gV2FzbTo6QW55ZnVuYywgIlRhYmxlIHR5cGUgc2hvdWxkIGJl
IGFueWZ1bmMsIGdvdCAiLCB0eXBlKTsKKworICAgIHVpbnQzMl90IGluaXRpYWw7CisgICAgc3Rk
OjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bTsKKyAgICBQYXJ0aWFsUmVzdWx0IGxpbWl0cyA9
IHBhcnNlUmVzaXphYmxlTGltaXRzKGluaXRpYWwsIG1heGltdW0pOworICAgIGlmIChVTkxJS0VM
WSghbGltaXRzKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFdURk1vdmUobGltaXRz
LmVycm9yKCkpKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluaXRpYWwgPiBtYXhUYWJsZUVu
dHJpZXMsICJUYWJsZSdzIGluaXRpYWwgcGFnZSBjb3VudCBvZiAiLCBpbml0aWFsLCAiIGlzIHRv
byBiaWcsIG1heGltdW0gIiwgbWF4VGFibGVFbnRyaWVzKTsKKworICAgIEFTU0VSVCghbWF4aW11
bSB8fCAqbWF4aW11bSA+PSBpbml0aWFsKTsKKworICAgIG1faW5mby0+dGFibGVJbmZvcm1hdGlv
biA9IFRhYmxlSW5mb3JtYXRpb24oaW5pdGlhbCwgbWF4aW11bSwgaXNJbXBvcnQpOworCisgICAg
cmV0dXJuIHsgfTsKK30KKworYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZVRhYmxlKCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHVpbnQzMl90IGNvdW50OworICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIXBhcnNlVmFyVUludDMyKGNvdW50KSwgImNhbid0IGdldCBUYWJsZSdzIGNvdW50Iik7Cisg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihjb3VudCA+IDEsICJUYWJsZSBjb3VudCBvZiAiLCBjb3Vu
dCwgIiBpcyBpbnZhbGlkLCBhdCBtb3N0IDEgaXMgYWxsb3dlZCBmb3Igbm93Iik7CisKKyAgICBp
ZiAoIWNvdW50KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgYm9vbCBpc0ltcG9ydCA9IGZh
bHNlOworICAgIFBhcnRpYWxSZXN1bHQgcmVzdWx0ID0gcGFyc2VUYWJsZUhlbHBlcihpc0ltcG9y
dCk7CisgICAgaWYgKFVOTElLRUxZKCFyZXN1bHQpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoV1RGTW92ZShyZXN1bHQuZXJyb3IoKSkpOworCisgICAgcmV0dXJuIHsgfTsKK30KKwor
YXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZU1lbW9yeUhlbHBlcihib29sIGlzSW1wb3J0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX2luZm8tPm1lbW9yeUNv
dW50KCksICJ0aGVyZSBjYW4gYXQgbW9zdCBiZSBvbmUgTWVtb3J5IHNlY3Rpb24gZm9yIG5vdyIp
OworCisgICAgUGFnZUNvdW50IGluaXRpYWxQYWdlQ291bnQ7CisgICAgUGFnZUNvdW50IG1heGlt
dW1QYWdlQ291bnQ7CisgICAgeworICAgICAgICB1aW50MzJfdCBpbml0aWFsOworICAgICAgICBz
dGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtOworICAgICAgICBQYXJ0aWFsUmVzdWx0IGxp
bWl0cyA9IHBhcnNlUmVzaXphYmxlTGltaXRzKGluaXRpYWwsIG1heGltdW0pOworICAgICAgICBp
ZiAoVU5MSUtFTFkoIWxpbWl0cykpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
V1RGTW92ZShsaW1pdHMuZXJyb3IoKSkpOworICAgICAgICBBU1NFUlQoIW1heGltdW0gfHwgKm1h
eGltdW0gPj0gaW5pdGlhbCk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIVBhZ2VDb3Vu
dDo6aXNWYWxpZChpbml0aWFsKSwgIk1lbW9yeSdzIGluaXRpYWwgcGFnZSBjb3VudCBvZiAiLCBp
bml0aWFsLCAiIGlzIGludmFsaWQiKTsKKworICAgICAgICBpbml0aWFsUGFnZUNvdW50ID0gUGFn
ZUNvdW50KGluaXRpYWwpOworCisgICAgICAgIGlmIChtYXhpbXVtKSB7CisgICAgICAgICAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFQYWdlQ291bnQ6OmlzVmFsaWQoKm1heGltdW0pLCAiTWVtb3J5
J3MgbWF4aW11bSBwYWdlIGNvdW50IG9mICIsICptYXhpbXVtLCAiIGlzIGludmFsaWQiKTsKKyAg
ICAgICAgICAgIG1heGltdW1QYWdlQ291bnQgPSBQYWdlQ291bnQoKm1heGltdW0pOworICAgICAg
ICB9CisgICAgfQorICAgIEFTU0VSVChpbml0aWFsUGFnZUNvdW50KTsKKyAgICBBU1NFUlQoIW1h
eGltdW1QYWdlQ291bnQgfHwgbWF4aW11bVBhZ2VDb3VudCA+PSBpbml0aWFsUGFnZUNvdW50KTsK
KworICAgIG1faW5mby0+bWVtb3J5ID0gTWVtb3J5SW5mb3JtYXRpb24oaW5pdGlhbFBhZ2VDb3Vu
dCwgbWF4aW11bVBhZ2VDb3VudCwgaXNJbXBvcnQpOworICAgIHJldHVybiB7IH07Cit9CisKK2F1
dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VNZW1vcnkoKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
dWludDhfdCBjb3VudDsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQxKGNv
dW50KSwgImNhbid0IHBhcnNlIE1lbW9yeSBzZWN0aW9uJ3MgY291bnQiKTsKKworICAgIGlmICgh
Y291bnQpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGNv
dW50ICE9IDEsICJNZW1vcnkgc2VjdGlvbiBoYXMgbW9yZSB0aGFuIG9uZSBtZW1vcnksIFdlYkFz
c2VtYmx5IGN1cnJlbnRseSBvbmx5IGFsbG93cyB6ZXJvIG9yIG9uZSIpOworCisgICAgYm9vbCBp
c0ltcG9ydCA9IGZhbHNlOworICAgIHJldHVybiBwYXJzZU1lbW9yeUhlbHBlcihpc0ltcG9ydCk7
Cit9CisKK2F1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VHbG9iYWwoKSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgdWludDMyX3QgZ2xvYmFsQ291bnQ7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
cGFyc2VWYXJVSW50MzIoZ2xvYmFsQ291bnQpLCAiY2FuJ3QgZ2V0IEdsb2JhbCBzZWN0aW9uJ3Mg
Y291bnQiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGdsb2JhbENvdW50ID4gbWF4R2xvYmFs
cywgIkdsb2JhbCBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBnbG9iYWxDb3VudCwgIiBt
YXhpbXVtICIsIG1heEdsb2JhbHMpOworICAgIHNpemVfdCB0b3RhbEJ5dGVzID0gZ2xvYmFsQ291
bnQgKyBtX2luZm8tPmZpcnN0SW50ZXJuYWxHbG9iYWw7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9J
Rigoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHRvdGFsQnl0ZXMpIDwgZ2xvYmFsQ291bnQpIHx8ICFt
X2luZm8tPmdsb2JhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KHRvdGFsQnl0ZXMpLCAiY2FuJ3QgYWxs
b2NhdGUgbWVtb3J5IGZvciAiLCB0b3RhbEJ5dGVzLCAiIGdsb2JhbHMiKTsKKworICAgIGZvciAo
dWludDMyX3QgZ2xvYmFsSW5kZXggPSAwOyBnbG9iYWxJbmRleCA8IGdsb2JhbENvdW50OyArK2ds
b2JhbEluZGV4KSB7CisgICAgICAgIEdsb2JhbCBnbG9iYWw7CisgICAgICAgIHVpbnQ4X3QgaW5p
dE9wY29kZTsKKworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlR2xvYmFs
VHlwZShnbG9iYWwpKTsKKyAgICAgICAgVHlwZSB0eXBlRm9ySW5pdE9wY29kZTsKKyAgICAgICAg
V0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUluaXRFeHByKGluaXRPcGNvZGUsIGdsb2Jh
bC5pbml0aWFsQml0c09ySW1wb3J0TnVtYmVyLCB0eXBlRm9ySW5pdE9wY29kZSkpOworICAgICAg
ICBpZiAoaW5pdE9wY29kZSA9PSBHZXRHbG9iYWwpCisgICAgICAgICAgICBnbG9iYWwuaW5pdGlh
bGl6YXRpb25UeXBlID0gR2xvYmFsOjpGcm9tR2xvYmFsSW1wb3J0OworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBnbG9iYWwuaW5pdGlhbGl6YXRpb25UeXBlID0gR2xvYmFsOjpGcm9tRXhwcmVz
c2lvbjsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0eXBlRm9ySW5pdE9wY29kZSAhPSBn
bG9iYWwudHlwZSwgIkdsb2JhbCBpbml0X2V4cHIgb3Bjb2RlIG9mIHR5cGUgIiwgdHlwZUZvcklu
aXRPcGNvZGUsICIgZG9lc24ndCBtYXRjaCBnbG9iYWwncyB0eXBlICIsIGdsb2JhbC50eXBlKTsK
KworICAgICAgICBtX2luZm8tPmdsb2JhbHMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoZ2xvYmFs
KSk7CisgICAgfQorCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBTZWN0aW9uUGFyc2VyOjpw
YXJzZUV4cG9ydCgpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1aW50MzJfdCBleHBvcnRDb3Vu
dDsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihleHBvcnRDb3VudCks
ICJjYW4ndCBnZXQgRXhwb3J0IHNlY3Rpb24ncyBjb3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoZXhwb3J0Q291bnQgPiBtYXhFeHBvcnRzLCAiRXhwb3J0IHNlY3Rpb24ncyBjb3VudCBp
cyB0b28gYmlnICIsIGV4cG9ydENvdW50LCAiIG1heGltdW0gIiwgbWF4RXhwb3J0cyk7CisgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5leHBvcnRzLnRyeVJlc2VydmVDYXBhY2l0eShl
eHBvcnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBleHBvcnRD
b3VudCwgIiBleHBvcnRzIik7CisKKyAgICBIYXNoU2V0PFN0cmluZz4gZXhwb3J0TmFtZXM7Cisg
ICAgZm9yICh1aW50MzJfdCBleHBvcnROdW1iZXIgPSAwOyBleHBvcnROdW1iZXIgPCBleHBvcnRD
b3VudDsgKytleHBvcnROdW1iZXIpIHsKKyAgICAgICAgdWludDMyX3QgZmllbGRMZW47CisgICAg
ICAgIE5hbWUgZmllbGRTdHJpbmc7CisgICAgICAgIEV4dGVybmFsS2luZCBraW5kOworICAgICAg
ICB1bnNpZ25lZCBraW5kSW5kZXg7CisKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFy
c2VWYXJVSW50MzIoZmllbGRMZW4pLCAiY2FuJ3QgZ2V0ICIsIGV4cG9ydE51bWJlciwgInRoIEV4
cG9ydCdzIGZpZWxkIG5hbWUgbGVuZ3RoIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IWNvbnN1bWVVVEY4U3RyaW5nKGZpZWxkU3RyaW5nLCBmaWVsZExlbiksICJjYW4ndCBnZXQgIiwg
ZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0J3MgZmllbGQgbmFtZSBvZiBsZW5ndGggIiwgZmllbGRM
ZW4pOworICAgICAgICBTdHJpbmcgZmllbGROYW1lID0gU3RyaW5nOjpmcm9tVVRGOChmaWVsZFN0
cmluZyk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZXhwb3J0TmFtZXMuY29udGFpbnMo
ZmllbGROYW1lKSwgImR1cGxpY2F0ZSBleHBvcnQ6ICciLCBmaWVsZFN0cmluZywgIiciKTsKKyAg
ICAgICAgZXhwb3J0TmFtZXMuYWRkKGZpZWxkTmFtZSk7CisKKyAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighcGFyc2VFeHRlcm5hbEtpbmQoa2luZCksICJjYW4ndCBnZXQgIiwgZXhwb3J0TnVt
YmVyLCAidGggRXhwb3J0J3Mga2luZCwgbmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOworICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihraW5kSW5kZXgpLCAiY2Fu
J3QgZ2V0ICIsIGV4cG9ydE51bWJlciwgInRoIEV4cG9ydCdzIGtpbmQgaW5kZXgsIG5hbWVkICci
LCBmaWVsZFN0cmluZywgIiciKTsKKyAgICAgICAgc3dpdGNoIChraW5kKSB7CisgICAgICAgIGNh
c2UgRXh0ZXJuYWxLaW5kOjpGdW5jdGlvbjogeworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRihraW5kSW5kZXggPj0gbV9pbmZvLT5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCksIGV4cG9y
dE51bWJlciwgInRoIEV4cG9ydCBoYXMgaW52YWxpZCBmdW5jdGlvbiBudW1iZXIgIiwga2luZElu
ZGV4LCAiIGl0IGV4Y2VlZHMgdGhlIGZ1bmN0aW9uIGluZGV4IHNwYWNlICIsIG1faW5mby0+ZnVu
Y3Rpb25JbmRleFNwYWNlU2l6ZSgpLCAiLCBuYW1lZCAnIiwgZmllbGRTdHJpbmcsICInIik7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEV4dGVybmFsS2luZDo6
VGFibGU6IHsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoa2luZEluZGV4ID49IG1f
aW5mby0+dGFibGVDb3VudCgpLCAiY2FuJ3QgZXhwb3J0IFRhYmxlICIsIGtpbmRJbmRleCwgIiB0
aGVyZSBhcmUgIiwgbV9pbmZvLT50YWJsZUNvdW50KCksICIgVGFibGVzIik7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEV4dGVybmFsS2luZDo6TWVtb3J5OiB7
CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPm1lbW9yeSwgImNhbid0
IGV4cG9ydCBhIG5vbi1leGlzdGVudCBNZW1vcnkiKTsKKyAgICAgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoa2luZEluZGV4LCAiY2FuJ3QgZXhwb3J0IE1lbW9yeSAiLCBraW5kSW5kZXgsICIg
b25seSBvbmUgVGFibGUgaXMgY3VycmVudGx5IHN1cHBvcnRlZCIpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6Okdsb2JhbDogeworICAg
ICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihraW5kSW5kZXggPj0gbV9pbmZvLT5nbG9iYWxz
LnNpemUoKSwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0IGhhcyBpbnZhbGlkIGdsb2JhbCBudW1i
ZXIgIiwga2luZEluZGV4LCAiIGl0IGV4Y2VlZHMgdGhlIGdsb2JhbHMgY291bnQgIiwgbV9pbmZv
LT5nbG9iYWxzLnNpemUoKSwgIiwgbmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOworICAgICAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX2luZm8tPmdsb2JhbHNba2luZEluZGV4XS5tdXRh
YmlsaXR5ICE9IEdsb2JhbDo6SW1tdXRhYmxlLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQgaXNu
J3QgaW1tdXRhYmxlLCBuYW1lZCAnIiwgZmllbGRTdHJpbmcsICInIik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbV9pbmZvLT5leHBvcnRzLnVu
Y2hlY2tlZEFwcGVuZCh7IFdURk1vdmUoZmllbGRTdHJpbmcpLCBraW5kLCBraW5kSW5kZXggfSk7
CisgICAgfQorCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJz
ZVN0YXJ0KCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHVpbnQzMl90IHN0YXJ0RnVuY3Rpb25J
bmRleDsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihzdGFydEZ1bmN0
aW9uSW5kZXgpLCAiY2FuJ3QgZ2V0IFN0YXJ0IGluZGV4Iik7CisgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRihzdGFydEZ1bmN0aW9uSW5kZXggPj0gbV9pbmZvLT5mdW5jdGlvbkluZGV4U3BhY2VTaXpl
KCksICJTdGFydCBpbmRleCAiLCBzdGFydEZ1bmN0aW9uSW5kZXgsICIgZXhjZWVkcyBmdW5jdGlv
biBpbmRleCBzcGFjZSAiLCBtX2luZm8tPmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7CisgICAg
U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX2luZm8tPnNpZ25hdHVyZUluZGV4RnJv
bUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXgpOworICAgIGNvbnN0IFNpZ25h
dHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRl
eCk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCAi
U3RhcnQgZnVuY3Rpb24gY2FuJ3QgaGF2ZSBhcmd1bWVudHMiKTsKKyAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKHNpZ25hdHVyZS5yZXR1cm5UeXBlKCkgIT0gVm9pZCwgIlN0YXJ0IGZ1bmN0aW9uIGNh
bid0IHJldHVybiBhIHZhbHVlIik7CisgICAgbV9pbmZvLT5zdGFydEZ1bmN0aW9uSW5kZXhTcGFj
ZSA9IHN0YXJ0RnVuY3Rpb25JbmRleDsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIFNlY3Rp
b25QYXJzZXI6OnBhcnNlRWxlbWVudCgpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1aW50MzJf
dCBlbGVtZW50Q291bnQ7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIo
ZWxlbWVudENvdW50KSwgImNhbid0IGdldCBFbGVtZW50IHNlY3Rpb24ncyBjb3VudCIpOworICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoZWxlbWVudENvdW50ID4gbWF4VGFibGVFbnRyaWVzLCAiRWxl
bWVudCBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBlbGVtZW50Q291bnQsICIgbWF4aW11
bSAiLCBtYXhUYWJsZUVudHJpZXMpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+
ZWxlbWVudHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGVsZW1lbnRDb3VudCksICJjYW4ndCBhbGxvY2F0
ZSBtZW1vcnkgZm9yICIsIGVsZW1lbnRDb3VudCwgIiBFbGVtZW50cyIpOworICAgIGZvciAodW5z
aWduZWQgZWxlbWVudE51bSA9IDA7IGVsZW1lbnROdW0gPCBlbGVtZW50Q291bnQ7ICsrZWxlbWVu
dE51bSkgeworICAgICAgICB1aW50MzJfdCB0YWJsZUluZGV4OworICAgICAgICB1aW50NjRfdCBp
bml0RXhwckJpdHM7CisgICAgICAgIHVpbnQ4X3QgaW5pdE9wY29kZTsKKyAgICAgICAgdWludDMy
X3QgaW5kZXhDb3VudDsKKworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJ
bnQzMih0YWJsZUluZGV4KSwgImNhbid0IGdldCAiLCBlbGVtZW50TnVtLCAidGggRWxlbWVudCB0
YWJsZSBpbmRleCIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHRhYmxlSW5kZXggPj0g
bV9pbmZvLT50YWJsZUNvdW50KCksICJFbGVtZW50IHNlY3Rpb24gZm9yIFRhYmxlICIsIHRhYmxl
SW5kZXgsICIgZXhjZWVkcyBhdmFpbGFibGUgVGFibGUgIiwgbV9pbmZvLT50YWJsZUNvdW50KCkp
OworICAgICAgICBUeXBlIGluaXRFeHByVHlwZTsKKyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBF
Ul9GQUlMUyhwYXJzZUluaXRFeHByKGluaXRPcGNvZGUsIGluaXRFeHByQml0cywgaW5pdEV4cHJU
eXBlKSk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoaW5pdEV4cHJUeXBlICE9IEkzMiwg
IkVsZW1lbnQgaW5pdF9leHByIG11c3QgcHJvZHVjZSBhbiBpMzIiKTsKKyAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoaW5kZXhDb3VudCksICJjYW4ndCBnZXQgIiwg
ZWxlbWVudE51bSwgInRoIGluZGV4IGNvdW50IGZvciBFbGVtZW50IHNlY3Rpb24iKTsKKyAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbmRleENvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8
dWludDMyX3Q+OjptYXgoKSwgIkVsZW1lbnQgc2VjdGlvbidzICIsIGVsZW1lbnROdW0sICJ0aCBp
bmRleCBjb3VudCBpcyB0b28gYmlnICIsIGluZGV4Q291bnQpOworCisgICAgICAgIEFTU0VSVCgh
IW1faW5mby0+dGFibGVJbmZvcm1hdGlvbik7CisKKyAgICAgICAgRWxlbWVudCBlbGVtZW50KG1h
a2VJMzJJbml0RXhwcihpbml0T3Bjb2RlLCBpbml0RXhwckJpdHMpKTsKKyAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighZWxlbWVudC5mdW5jdGlvbkluZGljZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5
KGluZGV4Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiLCBpbmRleENvdW50LCAi
IEVsZW1lbnQgaW5kaWNlcyIpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBp
bmRleCA8IGluZGV4Q291bnQ7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIHVpbnQzMl90IGZ1bmN0
aW9uSW5kZXg7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQz
MihmdW5jdGlvbkluZGV4KSwgImNhbid0IGdldCBFbGVtZW50IHNlY3Rpb24ncyAiLCBlbGVtZW50
TnVtLCAidGggZWxlbWVudCdzICIsIGluZGV4LCAidGggaW5kZXgiKTsKKyAgICAgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25JbmRleCA+PSBtX2luZm8tPmZ1bmN0aW9uSW5kZXhT
cGFjZVNpemUoKSwgIkVsZW1lbnQgc2VjdGlvbidzICIsIGVsZW1lbnROdW0sICJ0aCBlbGVtZW50
J3MgIiwgaW5kZXgsICJ0aCBpbmRleCBpcyAiLCBmdW5jdGlvbkluZGV4LCAiIHdoaWNoIGV4Y2Vl
ZHMgdGhlIGZ1bmN0aW9uIGluZGV4IHNwYWNlIHNpemUgb2YgIiwgbV9pbmZvLT5mdW5jdGlvbklu
ZGV4U3BhY2VTaXplKCkpOworCisgICAgICAgICAgICBlbGVtZW50LmZ1bmN0aW9uSW5kaWNlcy51
bmNoZWNrZWRBcHBlbmQoZnVuY3Rpb25JbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBtX2lu
Zm8tPmVsZW1lbnRzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGVsZW1lbnQpKTsKKyAgICB9CisK
KyAgICByZXR1cm4geyB9OworfQorCisvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2hhbmdlZCB0
byBiZSBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCBvbmNlIHdlIHN3aXRjaCBvdXIgcGFyc2lu
ZyBpbmZyYXN0cnVjdHVyZSB0byB0aGUgc3RyZWFtaW5nIHBhcnNlci4KK2F1dG8gU2VjdGlvblBh
cnNlcjo6cGFyc2VDb2RlKCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHVpbnQzMl90IGNvdW50
OworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGNvdW50KSwgImNhbid0
IGdldCBDb2RlIHNlY3Rpb24ncyBjb3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoY291
bnQgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLCAiQ29kZSBzZWN0aW9u
J3MgY291bnQgaXMgdG9vIGJpZyAiLCBjb3VudCk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihj
b3VudCAhPSBtX2luZm8tPmZ1bmN0aW9ucy5zaXplKCksICJDb2RlIHNlY3Rpb24gY291bnQgIiwg
Y291bnQsICIgZXhjZWVkcyB0aGUgZGVjbGFyZWQgbnVtYmVyIG9mIGZ1bmN0aW9ucyAiLCBtX2lu
Zm8tPmZ1bmN0aW9ucy5zaXplKCkpOworCisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNv
dW50OyArK2kpIHsKKyAgICAgICAgdWludDMyX3QgZnVuY3Rpb25TaXplOworICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihmdW5jdGlvblNpemUpLCAiY2FuJ3QgZ2V0
ICIsIGksICJ0aCBDb2RlIGZ1bmN0aW9uJ3Mgc2l6ZSIpOworICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKGZ1bmN0aW9uU2l6ZSA+IGxlbmd0aCgpLCAiQ29kZSBmdW5jdGlvbidzIHNpemUgIiwg
ZnVuY3Rpb25TaXplLCAiIGV4Y2VlZHMgdGhlIG1vZHVsZSdzIHNpemUgIiwgbGVuZ3RoKCkpOwor
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGZ1bmN0aW9uU2l6ZSA+IGxlbmd0aCgpIC0gbV9v
ZmZzZXQsICJDb2RlIGZ1bmN0aW9uJ3Mgc2l6ZSAiLCBmdW5jdGlvblNpemUsICIgZXhjZWVkcyB0
aGUgbW9kdWxlJ3MgcmVtYWluaW5nIHNpemUiLCBsZW5ndGgoKSAtIG1fb2Zmc2V0KTsKKyAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvblNpemUgPiBtYXhGdW5jdGlvblNpemUsICJD
b2RlIGZ1bmN0aW9uJ3Mgc2l6ZSAiLCBmdW5jdGlvblNpemUsICIgaXMgdG9vIGJpZyIpOworCisg
ICAgICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhKGZ1bmN0aW9uU2l6ZSk7CisgICAgICAgIHN0ZDo6
bWVtY3B5KGRhdGEuZGF0YSgpLCBzb3VyY2UoKSArIG1fb2Zmc2V0LCBmdW5jdGlvblNpemUpOwor
ICAgICAgICBtX2luZm8tPmZ1bmN0aW9uc1tpXS5zdGFydCA9IG1fb2Zmc2V0SW5Tb3VyY2UgKyBt
X29mZnNldDsKKyAgICAgICAgbV9pbmZvLT5mdW5jdGlvbnNbaV0uZW5kID0gbV9vZmZzZXRJblNv
dXJjZSArIG1fb2Zmc2V0ICsgZnVuY3Rpb25TaXplOworICAgICAgICBtX2luZm8tPmZ1bmN0aW9u
c1tpXS5kYXRhID0gV1RGTW92ZShkYXRhKTsKKyAgICAgICAgbV9vZmZzZXQgKz0gZnVuY3Rpb25T
aXplOworICAgIH0KKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gU2VjdGlvblBhcnNlcjo6
cGFyc2VJbml0RXhwcih1aW50OF90JiBvcGNvZGUsIHVpbnQ2NF90JiBiaXRzT3JJbXBvcnROdW1i
ZXIsIFR5cGUmIHJlc3VsdFR5cGUpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVVJbnQ4KG9wY29kZSksICJjYW4ndCBnZXQgaW5pdF9leHByJ3Mgb3Bj
b2RlIik7CisKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgSTMyQ29uc3Q6IHsKKyAg
ICAgICAgaW50MzJfdCBjb25zdGFudDsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFy
c2VWYXJJbnQzMihjb25zdGFudCksICJjYW4ndCBnZXQgY29uc3RhbnQgdmFsdWUgZm9yIGluaXRf
ZXhwcidzIGkzMi5jb25zdCIpOworICAgICAgICBiaXRzT3JJbXBvcnROdW1iZXIgPSBzdGF0aWNf
Y2FzdDx1aW50NjRfdD4oY29uc3RhbnQpOworICAgICAgICByZXN1bHRUeXBlID0gSTMyOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEk2NENvbnN0OiB7CisgICAgICAgIGludDY0
X3QgY29uc3RhbnQ7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFySW50NjQo
Y29uc3RhbnQpLCAiY2FuJ3QgZ2V0IGNvbnN0YW50IHZhbHVlIGZvciBpbml0X2V4cHIncyBpNjQu
Y29uc3QiKTsKKyAgICAgICAgYml0c09ySW1wb3J0TnVtYmVyID0gY29uc3RhbnQ7CisgICAgICAg
IHJlc3VsdFR5cGUgPSBJNjQ7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRjMy
Q29uc3Q6IHsKKyAgICAgICAgdWludDMyX3QgY29uc3RhbnQ7CisgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXBhcnNlVUludDMyKGNvbnN0YW50KSwgImNhbid0IGdldCBjb25zdGFudCB2YWx1
ZSBmb3IgaW5pdF9leHByJ3MgZjMyLmNvbnN0Iik7CisgICAgICAgIGJpdHNPckltcG9ydE51bWJl
ciA9IGNvbnN0YW50OworICAgICAgICByZXN1bHRUeXBlID0gRjMyOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBjYXNlIEY2NENvbnN0OiB7CisgICAgICAgIHVpbnQ2NF90IGNvbnN0YW50
OworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ2NChjb25zdGFudCksICJj
YW4ndCBnZXQgY29uc3RhbnQgdmFsdWUgZm9yIGluaXRfZXhwcidzIGY2NC5jb25zdCIpOworICAg
ICAgICBiaXRzT3JJbXBvcnROdW1iZXIgPSBjb25zdGFudDsKKyAgICAgICAgcmVzdWx0VHlwZSA9
IEY2NDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBHZXRHbG9iYWw6IHsKKyAg
ICAgICAgdWludDMyX3QgaW5kZXg7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNl
VmFyVUludDMyKGluZGV4KSwgImNhbid0IGdldCBnZXRfZ2xvYmFsJ3MgaW5kZXgiKTsKKworICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluZGV4ID49IG1faW5mby0+Z2xvYmFscy5zaXplKCks
ICJnZXRfZ2xvYmFsJ3MgaW5kZXggIiwgaW5kZXgsICIgZXhjZWVkcyB0aGUgbnVtYmVyIG9mIGds
b2JhbHMgIiwgbV9pbmZvLT5nbG9iYWxzLnNpemUoKSk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoaW5kZXggPj0gbV9pbmZvLT5maXJzdEludGVybmFsR2xvYmFsLCAiZ2V0X2dsb2JhbCBp
bXBvcnQga2luZCBpbmRleCAiLCBpbmRleCwgIiBleGNlZWRzIHRoZSBmaXJzdCBpbnRlcm5hbCBn
bG9iYWwgIiwgbV9pbmZvLT5maXJzdEludGVybmFsR2xvYmFsKTsKKworICAgICAgICBBU1NFUlQo
bV9pbmZvLT5nbG9iYWxzW2luZGV4XS5tdXRhYmlsaXR5ID09IEdsb2JhbDo6SW1tdXRhYmxlKTsK
KyAgICAgICAgcmVzdWx0VHlwZSA9IG1faW5mby0+Z2xvYmFsc1tpbmRleF0udHlwZTsKKyAgICAg
ICAgYml0c09ySW1wb3J0TnVtYmVyID0gaW5kZXg7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYodHJ1ZSwgInVua25vd24g
aW5pdF9leHByIG9wY29kZSAiLCBvcGNvZGUpOworICAgIH0KKworICAgIHVpbnQ4X3QgZW5kT3Bj
b2RlOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUludDgoZW5kT3Bjb2RlKSwgImNh
bid0IGdldCBpbml0X2V4cHIncyBlbmQgb3Bjb2RlIik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RihlbmRPcGNvZGUgIT0gT3BUeXBlOjpFbmQsICJpbml0X2V4cHIgc2hvdWxkIGVuZCB3aXRoIGVu
ZCwgZW5kZWQgd2l0aCAiLCBlbmRPcGNvZGUpOworCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0
byBTZWN0aW9uUGFyc2VyOjpwYXJzZUdsb2JhbFR5cGUoR2xvYmFsJiBnbG9iYWwpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICB1aW50OF90IG11dGFiaWxpdHk7CisgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VWYWx1ZVR5cGUoZ2xvYmFsLnR5cGUpLCAiY2FuJ3QgZ2V0IEdsb2JhbCdzIHZh
bHVlIHR5cGUiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQxKG11dGFi
aWxpdHkpLCAiY2FuJ3QgZ2V0IEdsb2JhbCB0eXBlJ3MgbXV0YWJpbGl0eSIpOworICAgIGdsb2Jh
bC5tdXRhYmlsaXR5ID0gc3RhdGljX2Nhc3Q8R2xvYmFsOjpNdXRhYmlsaXR5PihtdXRhYmlsaXR5
KTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlRGF0YSgp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1aW50MzJfdCBzZWdtZW50Q291bnQ7CisgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoc2VnbWVudENvdW50KSwgImNhbid0IGdl
dCBEYXRhIHNlY3Rpb24ncyBjb3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoc2VnbWVu
dENvdW50ID4gbWF4RGF0YVNlZ21lbnRzLCAiRGF0YSBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJp
ZyAiLCBzZWdtZW50Q291bnQsICIgbWF4aW11bSAiLCBtYXhEYXRhU2VnbWVudHMpOworICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+ZGF0YS50cnlSZXNlcnZlQ2FwYWNpdHkoc2VnbWVu
dENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIERhdGEgc2VjdGlvbidz
ICIsIHNlZ21lbnRDb3VudCwgIiBzZWdtZW50cyIpOworCisgICAgZm9yICh1aW50MzJfdCBzZWdt
ZW50TnVtYmVyID0gMDsgc2VnbWVudE51bWJlciA8IHNlZ21lbnRDb3VudDsgKytzZWdtZW50TnVt
YmVyKSB7CisgICAgICAgIHVpbnQzMl90IG1lbW9yeUluZGV4OworICAgICAgICB1aW50NjRfdCBp
bml0RXhwckJpdHM7CisgICAgICAgIHVpbnQ4X3QgaW5pdE9wY29kZTsKKyAgICAgICAgdWludDMy
X3QgZGF0YUJ5dGVMZW5ndGg7CisKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VW
YXJVSW50MzIobWVtb3J5SW5kZXgpLCAiY2FuJ3QgZ2V0ICIsIHNlZ21lbnROdW1iZXIsICJ0aCBE
YXRhIHNlZ21lbnQncyBpbmRleCIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG1lbW9y
eUluZGV4ID49IG1faW5mby0+bWVtb3J5Q291bnQoKSwgc2VnbWVudE51bWJlciwgInRoIERhdGEg
c2VnbWVudCBoYXMgaW5kZXggIiwgbWVtb3J5SW5kZXgsICIgd2hpY2ggZXhjZWVkcyB0aGUgbnVt
YmVyIG9mIE1lbW9yaWVzICIsIG1faW5mby0+bWVtb3J5Q291bnQoKSk7CisgICAgICAgIFR5cGUg
aW5pdEV4cHJUeXBlOworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlSW5p
dEV4cHIoaW5pdE9wY29kZSwgaW5pdEV4cHJCaXRzLCBpbml0RXhwclR5cGUpKTsKKyAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRihpbml0RXhwclR5cGUgIT0gSTMyLCBzZWdtZW50TnVtYmVyLCAi
dGggRGF0YSBzZWdtZW50J3MgaW5pdF9leHByIG11c3QgcHJvZHVjZSBhbiBpMzIiKTsKKyAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZGF0YUJ5dGVMZW5ndGgpLCAi
Y2FuJ3QgZ2V0ICIsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQncyBkYXRhIGJ5dGUg
bGVuZ3RoIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZGF0YUJ5dGVMZW5ndGggPiBt
YXhNb2R1bGVTaXplLCBzZWdtZW50TnVtYmVyLCAidGggRGF0YSBzZWdtZW50J3MgZGF0YSBieXRl
IGxlbmd0aCBpcyB0b28gYmlnICIsIGRhdGFCeXRlTGVuZ3RoLCAiIG1heGltdW0gIiwgbWF4TW9k
dWxlU2l6ZSk7CisKKyAgICAgICAgU2VnbWVudCogc2VnbWVudCA9IFNlZ21lbnQ6OmNyZWF0ZSht
YWtlSTMySW5pdEV4cHIoaW5pdE9wY29kZSwgaW5pdEV4cHJCaXRzKSwgZGF0YUJ5dGVMZW5ndGgp
OworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFzZWdtZW50LCAiY2FuJ3QgYWxsb2NhdGUg
ZW5vdWdoIG1lbW9yeSBmb3IgIiwgc2VnbWVudE51bWJlciwgInRoIERhdGEgc2VnbWVudCBvZiBz
aXplICIsIGRhdGFCeXRlTGVuZ3RoKTsKKyAgICAgICAgbV9pbmZvLT5kYXRhLnVuY2hlY2tlZEFw
cGVuZChTZWdtZW50OjphZG9wdFB0cihzZWdtZW50KSk7CisgICAgICAgIGZvciAodWludDMyX3Qg
ZGF0YUJ5dGUgPSAwOyBkYXRhQnl0ZSA8IGRhdGFCeXRlTGVuZ3RoOyArK2RhdGFCeXRlKSB7Cisg
ICAgICAgICAgICB1aW50OF90IGJ5dGU7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFwYXJzZVVJbnQ4KGJ5dGUpLCAiY2FuJ3QgZ2V0ICIsIGRhdGFCeXRlLCAidGggZGF0YSBieXRl
IGZyb20gIiwgc2VnbWVudE51bWJlciwgInRoIERhdGEgc2VnbWVudCIpOworICAgICAgICAgICAg
c2VnbWVudC0+Ynl0ZShkYXRhQnl0ZSkgPSBieXRlOworICAgICAgICB9CisgICAgfQorICAgIHJl
dHVybiB7IH07Cit9CisKK2F1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VDdXN0b20oKSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgQ3VzdG9tU2VjdGlvbiBzZWN0aW9uOworICAgIHVpbnQzMl90IGN1
c3RvbVNlY3Rpb25OdW1iZXIgPSBtX2luZm8tPmN1c3RvbVNlY3Rpb25zLnNpemUoKSArIDE7Cisg
ICAgdWludDMyX3QgbmFtZUxlbjsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmN1
c3RvbVNlY3Rpb25zLnRyeVJlc2VydmVDYXBhY2l0eShjdXN0b21TZWN0aW9uTnVtYmVyKSwgImNh
bid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGN1c3RvbVNlY3Rpb25OdW1iZXIsICJ0
aCBjdXN0b20gc2VjdGlvbiIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUlu
dDMyKG5hbWVMZW4pLCAiY2FuJ3QgZ2V0ICIsIGN1c3RvbVNlY3Rpb25OdW1iZXIsICJ0aCBjdXN0
b20gc2VjdGlvbidzIG5hbWUgbGVuZ3RoIik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighY29u
c3VtZVVURjhTdHJpbmcoc2VjdGlvbi5uYW1lLCBuYW1lTGVuKSwgIm5hbWVMZW4gZ2V0ICIsIGN1
c3RvbVNlY3Rpb25OdW1iZXIsICJ0aCBjdXN0b20gc2VjdGlvbidzIG5hbWUgb2YgbGVuZ3RoICIs
IG5hbWVMZW4pOworCisgICAgdWludDMyX3QgcGF5bG9hZEJ5dGVzID0gbGVuZ3RoKCkgLSBtX29m
ZnNldDsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFzZWN0aW9uLnBheWxvYWQudHJ5UmVzZXJ2
ZUNhcGFjaXR5KHBheWxvYWRCeXRlcyksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZv
ciAiLCBjdXN0b21TZWN0aW9uTnVtYmVyLCAidGggY3VzdG9tIHNlY3Rpb24ncyAiLCBwYXlsb2Fk
Qnl0ZXMsICIgYnl0ZXMiKTsKKyAgICBmb3IgKHVpbnQzMl90IGJ5dGVOdW1iZXIgPSAwOyBieXRl
TnVtYmVyIDwgcGF5bG9hZEJ5dGVzOyArK2J5dGVOdW1iZXIpIHsKKyAgICAgICAgdWludDhfdCBi
eXRlOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ4KGJ5dGUpLCAiY2Fu
J3QgZ2V0ICIsIGJ5dGVOdW1iZXIsICJ0aCBkYXRhIGJ5dGUgZnJvbSAiLCBjdXN0b21TZWN0aW9u
TnVtYmVyLCAidGggY3VzdG9tIHNlY3Rpb24iKTsKKyAgICAgICAgc2VjdGlvbi5wYXlsb2FkLnVu
Y2hlY2tlZEFwcGVuZChieXRlKTsKKyAgICB9CisKKyAgICBOYW1lIG5hbWVOYW1lID0geyAnbics
ICdhJywgJ20nLCAnZScgfTsKKyAgICBpZiAoc2VjdGlvbi5uYW1lID09IG5hbWVOYW1lKSB7Cisg
ICAgICAgIE5hbWVTZWN0aW9uUGFyc2VyIG5hbWVTZWN0aW9uUGFyc2VyKHNlY3Rpb24ucGF5bG9h
ZC5iZWdpbigpLCBzZWN0aW9uLnBheWxvYWQuc2l6ZSgpLCBtX2luZm8pOworICAgICAgICBpZiAo
YXV0byBuYW1lU2VjdGlvbiA9IG5hbWVTZWN0aW9uUGFyc2VyLnBhcnNlKCkpCisgICAgICAgICAg
ICBtX2luZm8tPm5hbWVTZWN0aW9uID0gV1RGTW92ZSgqbmFtZVNlY3Rpb24pOworICAgIH0KKwor
ICAgIG1faW5mby0+Y3VzdG9tU2VjdGlvbnMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoc2VjdGlv
bikpOworCisgICAgcmV0dXJuIHsgfTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20K
KworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9uUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc4ZDAyODM2ZmM5ZjMyYmMy
Yjc4ZmJmOTBhZDJjNWRhOWY5MTI4M2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kgPHl1c3VrZXN1enVraUBzbG93c3RhcnQu
b3JnPi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJXYXNtRm9ybWF0
LmgiCisjaW5jbHVkZSAiV2FzbU9wcy5oIgorI2luY2x1ZGUgIldhc21QYXJzZXIuaCIKKyNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK2NsYXNzIFNlY3Rpb25QYXJzZXIgZmluYWwgOiBw
dWJsaWMgUGFyc2VyPHZvaWQ+IHsKK3B1YmxpYzoKKyAgICBTZWN0aW9uUGFyc2VyKGNvbnN0IHVp
bnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCBzaXplX3Qgb2Zmc2V0SW5Tb3VyY2UsIE1vZHVsZUlu
Zm9ybWF0aW9uJiBpbmZvKQorICAgICAgICA6IFBhcnNlcihkYXRhLCBzaXplKQorICAgICAgICAs
IG1fb2Zmc2V0SW5Tb3VyY2Uob2Zmc2V0SW5Tb3VyY2UpCisgICAgICAgICwgbV9pbmZvKGluZm8p
CisgICAgeworICAgIH0KKworI2RlZmluZSBXQVNNX1NFQ1RJT05fREVDTEFSRV9QQVJTRVIoTkFN
RSwgSUQsIERFU0NSSVBUSU9OKSBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJz
ZSAjIyBOQU1FKCk7CisgICAgRk9SX0VBQ0hfS05PV05fV0FTTV9TRUNUSU9OKFdBU01fU0VDVElP
Tl9ERUNMQVJFX1BBUlNFUikKKyN1bmRlZiBXQVNNX1NFQ1RJT05fREVDTEFSRV9QQVJTRVIKKwor
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlQ3VzdG9tKCk7CisKK3By
aXZhdGU6CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIC4uLkFyZ3M+CisgICAgTkVWRVJfSU5MSU5F
IFVuZXhwZWN0ZWRSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGZhaWwoQXJncy4uLiBhcmdzKSBj
b25zdAorICAgIHsKKyAgICAgICAgdXNpbmcgbmFtZXNwYWNlIEZhaWx1cmVIZWxwZXI7IC8vIFNl
ZSBBREwgY29tbWVudCBpbiBuYW1lc3BhY2UgYWJvdmUuCisgICAgICAgIHJldHVybiBVbmV4cGVj
dGVkUmVzdWx0KG1ha2VTdHJpbmcoIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0
IGJ5dGUgIl9zLCBTdHJpbmc6Om51bWJlcihtX29mZnNldCArIG1fb2Zmc2V0SW5Tb3VyY2UpLCAi
OiAiX3MsIG1ha2VTdHJpbmcoYXJncykuLi4pKTsKKyAgICB9CisKKyAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUdsb2JhbFR5cGUoR2xvYmFsJik7CisgICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VNZW1vcnlIZWxwZXIoYm9vbCBpc0ltcG9y
dCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VUYWJsZUhlbHBl
cihib29sIGlzSW1wb3J0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBw
YXJzZVJlc2l6YWJsZUxpbWl0cyh1aW50MzJfdCYgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50
MzJfdD4mIG1heGltdW0pOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBh
cnNlSW5pdEV4cHIodWludDhfdCYsIHVpbnQ2NF90JiwgVHlwZSYgaW5pdEV4cHJUeXBlKTsKKwor
ICAgIHNpemVfdCBtX29mZnNldEluU291cmNlOworICAgIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4g
bV9pbmZvOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVO
QUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVN0cmVhbWluZ1BhcnNlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWZjMTE2MTdlMmIxMDhiYTVjMzkzYTFj
MTI0M2I3YmM0MzRlZTVhNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwCkBAIC0wLDAgKzEsMzg5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kgPHl1c3VrZXN1enVraUBzbG93c3RhcnQu
b3JnPi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21TdHJlYW1pbmdQYXJzZXIuaCIKKworI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIldhc21Nb2R1bGVQYXJzZXIuaCIKKyNpbmNs
dWRlICJXYXNtU2VjdGlvblBhcnNlci5oIgorI2luY2x1ZGUgPHd0Zi9VbmFsaWduZWRBY2Nlc3Mu
aD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworbmFtZXNwYWNlIFdhc21T
dHJlYW1pbmdQYXJzZXJJbnRlcm5hbCB7CitzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9
IGZhbHNlOworfQorCisjZGVmaW5lIFdBU01fU1RSRUFNSU5HX1BBUlNFUl9GQUlMX0lGX0hFTFBF
Ul9GQUlMUyhoZWxwZXIpIFwKKyAgICBkbyB7IFwKKyAgICAgICAgYXV0byBoZWxwZXJSZXN1bHQg
PSBoZWxwZXI7IFwKKyAgICAgICAgaWYgKFVOTElLRUxZKCFoZWxwZXJSZXN1bHQpKSB7IFwKKyAg
ICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gaGVscGVyUmVzdWx0LmVycm9yKCk7IFwKKyAgICAg
ICAgICAgIHJldHVybiBTdGF0ZTo6RmF0YWxFcnJvcjsgXAorICAgICAgICB9IFwKKyAgICB9IHdo
aWxlICgwKQorCitBTFdBWVNfSU5MSU5FIHN0ZDo6b3B0aW9uYWw8dWludDhfdD4gcGFyc2VVSW50
Nyhjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QmIG9mZnNldCwgc2l6ZV90IHNpemUpCit7Cisg
ICAgaWYgKG9mZnNldCA+PSBzaXplKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgdWludDhf
dCByZXN1bHQgPSBkYXRhW29mZnNldCsrXTsKKyAgICBpZiAocmVzdWx0IDwgMHg4MCkKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgLi4uQXJncz4KK05FVkVSX0lOTElORSBhdXRvIFdBUk5fVU5VU0VEX1JFVFVS
TiBTdHJlYW1pbmdQYXJzZXI6OmZhaWwoQXJncy4uLiBhcmdzKSAtPiBTdGF0ZQoreworICAgIHVz
aW5nIG5hbWVzcGFjZSBGYWlsdXJlSGVscGVyOyAvLyBTZWUgQURMIGNvbW1lbnQgaW4gbmFtZXNw
YWNlIGFib3ZlLgorICAgIG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygiV2ViQXNzZW1ibHku
TW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAiX3MsIFN0cmluZzo6bnVtYmVyKG1fb2Zmc2V0
KSwgIjogIl9zLCBtYWtlU3RyaW5nKGFyZ3MpLi4uKTsKKyAgICBkYXRhTG9nTG5JZihXYXNtU3Ry
ZWFtaW5nUGFyc2VySW50ZXJuYWw6OnZlcmJvc2UsIG1fZXJyb3JNZXNzYWdlKTsKKyAgICByZXR1
cm4gU3RhdGU6OkZhdGFsRXJyb3I7Cit9CisKK1N0cmVhbWluZ1BhcnNlcjo6U3RyZWFtaW5nUGFy
c2VyKE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvKQorICAgIDogbV9pbmZvKGluZm8pCit7CisgICAg
ZGF0YUxvZ0xuSWYoV2FzbVN0cmVhbWluZ1BhcnNlckludGVybmFsOjp2ZXJib3NlLCAic3RhcnRp
bmcgdmFsaWRhdGlvbiIpOworfQorCithdXRvIFN0cmVhbWluZ1BhcnNlcjo6cGFyc2VNb2R1bGVI
ZWFkZXIoVmVjdG9yPHVpbnQ4X3Q+JiYgZGF0YSkgLT4gU3RhdGUKK3sKKyAgICBBU1NFUlQoZGF0
YS5zaXplKCkgPT0gbW9kdWxlSGVhZGVyU2l6ZSk7CisgICAgZGF0YUxvZ0xuSWYoV2FzbVN0cmVh
bWluZ1BhcnNlckludGVybmFsOjp2ZXJib3NlLCAiaGVhZGVyIHZhbGlkYXRpb24iKTsKKyAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKGRhdGFbMF0gIT0gJ1wwJyB8fCBkYXRhWzFdICE9ICdhJyB8fCBk
YXRhWzJdICE9ICdzJyB8fCBkYXRhWzNdICE9ICdtJywgIm1vZHVsZXMgZG9lc24ndCBzdGFydCB3
aXRoICdcXDBhc20nIik7CisgICAgdWludDMyX3QgdmVyc2lvbk51bWJlciA9IFdURjo6dW5hbGln
bmVkTG9hZDx1aW50MzJfdD4oZGF0YS5kYXRhKCkgKyA0KTsKKyAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKHZlcnNpb25OdW1iZXIgIT0gZXhwZWN0ZWRWZXJzaW9uTnVtYmVyLCAidW5leHBlY3RlZCB2
ZXJzaW9uIG51bWJlciAiLCB2ZXJzaW9uTnVtYmVyLCAiIGV4cGVjdGVkICIsIGV4cGVjdGVkVmVy
c2lvbk51bWJlcik7CisgICAgcmV0dXJuIFN0YXRlOjpTZWN0aW9uSGVhZGVyOworfQorCithdXRv
IFN0cmVhbWluZ1BhcnNlcjo6cGFyc2VTZWN0aW9uSGVhZGVyKFZlY3Rvcjx1aW50OF90PiYmIGRh
dGEpIC0+IFN0YXRlCit7CisgICAgQVNTRVJUKGRhdGEuc2l6ZSgpID09IHNlY3Rpb25IZWFkZXJT
aXplKTsKKyAgICBzaXplX3Qgb2Zmc2V0ID0gMDsKKyAgICBhdXRvIHJlc3VsdCA9IHBhcnNlVUlu
dDcoZGF0YS5kYXRhKCksIG9mZnNldCwgZGF0YS5zaXplKCkpOworICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIXJlc3VsdCwgImNhbid0IGdldCBzZWN0aW9uIGJ5dGUiKTsKKworICAgIFNlY3Rpb24g
c2VjdGlvbiA9IFNlY3Rpb246OkN1c3RvbTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFkZWNv
ZGVTZWN0aW9uKCpyZXN1bHQsIHNlY3Rpb24pLCAiaW52YWxpZCBzZWN0aW9uIik7CisgICAgQVNT
RVJUKHNlY3Rpb24gIT0gU2VjdGlvbjo6QmVnaW4pOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXZhbGlkYXRlT3JkZXIobV9wcmV2aW91c0tub3duU2VjdGlvbiwgc2VjdGlvbiksICJpbnZhbGlk
IHNlY3Rpb24gb3JkZXIsICIsIG1fcHJldmlvdXNLbm93blNlY3Rpb24sICIgZm9sbG93ZWQgYnkg
Iiwgc2VjdGlvbik7CisgICAgbV9zZWN0aW9uID0gc2VjdGlvbjsKKyAgICBpZiAoaXNLbm93blNl
Y3Rpb24oc2VjdGlvbikpCisgICAgICAgIG1fcHJldmlvdXNLbm93blNlY3Rpb24gPSBzZWN0aW9u
OworICAgIHJldHVybiBTdGF0ZTo6U2VjdGlvblNpemU7Cit9CisKK2F1dG8gU3RyZWFtaW5nUGFy
c2VyOjpwYXJzZVNlY3Rpb25TaXplKHVpbnQzMl90IHNlY3Rpb25MZW5ndGgpIC0+IFN0YXRlCit7
CisgICAgbV9zZWN0aW9uTGVuZ3RoID0gc2VjdGlvbkxlbmd0aDsKKyAgICBpZiAobV9zZWN0aW9u
ID09IFNlY3Rpb246OkNvZGUpCisgICAgICAgIHJldHVybiBTdGF0ZTo6Q29kZVNlY3Rpb25TaXpl
OworICAgIHJldHVybiBTdGF0ZTo6U2VjdGlvbkJvZHk7Cit9CisKK2F1dG8gU3RyZWFtaW5nUGFy
c2VyOjpwYXJzZUNvZGVTZWN0aW9uU2l6ZSh1aW50MzJfdCBmdW5jdGlvbkNvdW50KSAtPiBTdGF0
ZQoreworICAgIG1fZnVuY3Rpb25Db3VudCA9IGZ1bmN0aW9uQ291bnQ7CisgICAgbV9mdW5jdGlv
bkluZGV4ID0gMDsKKyAgICBtX2NvZGVPZmZzZXQgPSBtX29mZnNldDsKKworICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoZnVuY3Rpb25Db3VudCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90
Pjo6bWF4KCksICJDb2RlIHNlY3Rpb24ncyBjb3VudCBpcyB0b28gYmlnICIsIGZ1bmN0aW9uQ291
bnQpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25Db3VudCAhPSBtX2luZm8tPmZ1
bmN0aW9ucy5zaXplKCksICJDb2RlIHNlY3Rpb24gY291bnQgIiwgZnVuY3Rpb25Db3VudCwgIiBl
eGNlZWRzIHRoZSBkZWNsYXJlZCBudW1iZXIgb2YgZnVuY3Rpb25zICIsIG1faW5mby0+ZnVuY3Rp
b25zLnNpemUoKSk7CisKKyAgICBpZiAobV9mdW5jdGlvbkluZGV4ID09IG1fZnVuY3Rpb25Db3Vu
dCkgeworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKChtX2NvZGVPZmZzZXQgKyBtX3NlY3Rp
b25MZW5ndGgpICE9IG1fbmV4dE9mZnNldCwgInBhcnNpbmcgZW5kZWQgYmVmb3JlIHRoZSBlbmQg
b2YgIiwgbV9zZWN0aW9uLCAiIHNlY3Rpb24iKTsKKyAgICAgICAgcmV0dXJuIFN0YXRlOjpTZWN0
aW9uSGVhZGVyOworICAgIH0KKyAgICByZXR1cm4gU3RhdGU6OkZ1bmN0aW9uSGVhZGVyOworfQor
CithdXRvIFN0cmVhbWluZ1BhcnNlcjo6cGFyc2VGdW5jdGlvbkhlYWRlcih1aW50MzJfdCBmdW5j
dGlvblNpemUpIC0+IFN0YXRlCit7CisgICAgbV9mdW5jdGlvblNpemUgPSBmdW5jdGlvblNpemU7
CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvblNpemUgPiBtYXhGdW5jdGlvblNpemUs
ICJDb2RlIGZ1bmN0aW9uJ3Mgc2l6ZSAiLCBmdW5jdGlvblNpemUsICIgaXMgdG9vIGJpZyIpOwor
ICAgIHJldHVybiBTdGF0ZTo6RnVuY3Rpb25Cb2R5OworfQorCithdXRvIFN0cmVhbWluZ1BhcnNl
cjo6cGFyc2VGdW5jdGlvbkJvZHkoVmVjdG9yPHVpbnQ4X3Q+JiYgZGF0YSkgLT4gU3RhdGUKK3sK
KyAgICBhdXRvJiBmdW5jdGlvbiA9IG1faW5mby0+ZnVuY3Rpb25zW21fZnVuY3Rpb25JbmRleF07
CisgICAgZnVuY3Rpb24uc3RhcnQgPSBtX29mZnNldDsKKyAgICBmdW5jdGlvbi5lbmQgPSBtX29m
ZnNldCArIG1fZnVuY3Rpb25TaXplOworICAgIGZ1bmN0aW9uLmRhdGEgPSBXVEZNb3ZlKGRhdGEp
OworICAgIGRhdGFMb2dMbklmKFdhc21TdHJlYW1pbmdQYXJzZXJJbnRlcm5hbDo6dmVyYm9zZSwg
IlByb2Nlc3NpbmcgZnVuY3Rpb24gc3RhcnRpbmcgYXQ6ICIsIGZ1bmN0aW9uLnN0YXJ0LCAiIGFu
ZCBlbmRpbmcgYXQ6ICIsIGZ1bmN0aW9uLmVuZCk7CisgICAgKyttX2Z1bmN0aW9uSW5kZXg7Cisg
ICAgaWYgKG1fZnVuY3Rpb25JbmRleCA9PSBtX2Z1bmN0aW9uQ291bnQpIHsKKyAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRigobV9jb2RlT2Zmc2V0ICsgbV9zZWN0aW9uTGVuZ3RoKSAhPSAobV9v
ZmZzZXQgKyBtX2Z1bmN0aW9uU2l6ZSksICJwYXJzaW5nIGVuZGVkIGJlZm9yZSB0aGUgZW5kIG9m
ICIsIG1fc2VjdGlvbiwgIiBzZWN0aW9uIik7CisgICAgICAgIHJldHVybiBTdGF0ZTo6U2VjdGlv
bkhlYWRlcjsKKyAgICB9CisgICAgcmV0dXJuIFN0YXRlOjpGdW5jdGlvbkhlYWRlcjsKK30KKwor
YXV0byBTdHJlYW1pbmdQYXJzZXI6OnBhcnNlU2VjdGlvbkJvZHkoVmVjdG9yPHVpbnQ4X3Q+JiYg
ZGF0YSkgLT4gU3RhdGUKK3sKKyAgICBTZWN0aW9uUGFyc2VyIHBhcnNlcihkYXRhLmRhdGEoKSwg
ZGF0YS5zaXplKCksIG1fb2Zmc2V0LCBtX2luZm8uZ2V0KCkpOworICAgIHN3aXRjaCAobV9zZWN0
aW9uKSB7CisjZGVmaW5lIFdBU01fU0VDVElPTl9QQVJTRShOQU1FLCBJRCwgREVTQ1JJUFRJT04p
IFwKKyAgICBjYXNlIFNlY3Rpb246Ok5BTUU6IHsgXAorICAgICAgICBXQVNNX1NUUkVBTUlOR19Q
QVJTRVJfRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VyLnBhcnNlICMjIE5BTUUoKSk7IFwKKyAg
ICAgICAgYnJlYWs7IFwKKyAgICB9CisgICAgRk9SX0VBQ0hfS05PV05fV0FTTV9TRUNUSU9OKFdB
U01fU0VDVElPTl9QQVJTRSkKKyN1bmRlZiBXQVNNX1NFQ1RJT05fUEFSU0UKKworICAgIGNhc2Ug
U2VjdGlvbjo6Q3VzdG9tOiB7CisgICAgICAgIFdBU01fU1RSRUFNSU5HX1BBUlNFUl9GQUlMX0lG
X0hFTFBFUl9GQUlMUyhwYXJzZXIucGFyc2VDdXN0b20oKSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIGNhc2UgU2VjdGlvbjo6QmVnaW46IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KKworICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYocGFyc2VyLmxlbmd0aCgpICE9IHBhcnNlci5vZmZzZXQoKSwgInBhcnNp
bmcgZW5kZWQgYmVmb3JlIHRoZSBlbmQgb2YgIiwgbV9zZWN0aW9uLCAiIHNlY3Rpb24iKTsKKwor
ICAgIHJldHVybiBTdGF0ZTo6U2VjdGlvbkhlYWRlcjsKK30KKworYXV0byBTdHJlYW1pbmdQYXJz
ZXI6OmNvbnN1bWUoY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBieXRlc1NpemUsIHNpemVf
dCYgb2Zmc2V0SW5CeXRlcywgc2l6ZV90IHJlcXVpcmVkU2l6ZSkgLT4gc3RkOjpvcHRpb25hbDxW
ZWN0b3I8dWludDhfdD4+Cit7CisgICAgaWYgKG1fcmVtYWluaW5nLnNpemUoKSA9PSByZXF1aXJl
ZFNpemUpIHsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdCA9IFdURk1vdmUobV9yZW1h
aW5pbmcpOworICAgICAgICBtX25leHRPZmZzZXQgKz0gcmVxdWlyZWRTaXplOworICAgICAgICBy
ZXR1cm4gV1RGTW92ZShyZXN1bHQpOworICAgIH0KKworICAgIGlmIChtX3JlbWFpbmluZy5zaXpl
KCkgPiByZXF1aXJlZFNpemUpIHsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdChyZXF1
aXJlZFNpemUpOworICAgICAgICBtZW1jcHkocmVzdWx0LmRhdGEoKSwgbV9yZW1haW5pbmcuZGF0
YSgpLCByZXF1aXJlZFNpemUpOworICAgICAgICBtX3JlbWFpbmluZy5yZW1vdmUoMCwgcmVxdWly
ZWRTaXplKTsKKyAgICAgICAgbV9uZXh0T2Zmc2V0ICs9IHJlcXVpcmVkU2l6ZTsKKyAgICAgICAg
cmV0dXJuIFdURk1vdmUocmVzdWx0KTsKKyAgICB9CisKKyAgICBBU1NFUlQobV9yZW1haW5pbmcu
c2l6ZSgpIDwgcmVxdWlyZWRTaXplKTsKKyAgICBzaXplX3QgYnl0ZXNSZW1haW5pbmdTaXplID0g
Ynl0ZXNTaXplIC0gb2Zmc2V0SW5CeXRlczsKKyAgICBzaXplX3QgdG90YWxEYXRhU2l6ZSA9IG1f
cmVtYWluaW5nLnNpemUoKSArIGJ5dGVzUmVtYWluaW5nU2l6ZTsKKyAgICBpZiAodG90YWxEYXRh
U2l6ZSA8IHJlcXVpcmVkU2l6ZSkgeworICAgICAgICBtX3JlbWFpbmluZy5hcHBlbmQoYnl0ZXMg
KyBvZmZzZXRJbkJ5dGVzLCBieXRlc1JlbWFpbmluZ1NpemUpOworICAgICAgICBvZmZzZXRJbkJ5
dGVzID0gYnl0ZXNTaXplOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKwor
ICAgIHNpemVfdCB1c2VkU2l6ZSA9IHJlcXVpcmVkU2l6ZSAtIG1fcmVtYWluaW5nLnNpemUoKTsK
KyAgICBtX3JlbWFpbmluZy5hcHBlbmQoYnl0ZXMgKyBvZmZzZXRJbkJ5dGVzLCB1c2VkU2l6ZSk7
CisgICAgb2Zmc2V0SW5CeXRlcyArPSB1c2VkU2l6ZTsKKyAgICBWZWN0b3I8dWludDhfdD4gcmVz
dWx0ID0gV1RGTW92ZShtX3JlbWFpbmluZyk7CisgICAgbV9uZXh0T2Zmc2V0ICs9IHJlcXVpcmVk
U2l6ZTsKKyAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOworfQorCithdXRvIFN0cmVhbWluZ1Bh
cnNlcjo6Y29uc3VtZVZhclVJbnQzMihjb25zdCB1aW50OF90KiBieXRlcywgc2l6ZV90IGJ5dGVz
U2l6ZSwgc2l6ZV90JiBvZmZzZXRJbkJ5dGVzLCBJc0VuZE9mU3RyZWFtIGlzRW5kT2ZTdHJlYW0p
IC0+IEV4cGVjdGVkPHVpbnQzMl90LCBTdGF0ZT4KK3sKKyAgICBjb25zdGV4cHIgc2l6ZV90IG1h
eFNpemUgPSBXVEY6OkxFQkRlY29kZXI6Om1heEJ5dGVMZW5ndGg8dWludDMyX3Q+KCk7CisgICAg
c2l6ZV90IGJ5dGVzUmVtYWluaW5nU2l6ZSA9IGJ5dGVzU2l6ZSAtIG9mZnNldEluQnl0ZXM7Cisg
ICAgc2l6ZV90IHRvdGFsRGF0YVNpemUgPSBtX3JlbWFpbmluZy5zaXplKCkgKyBieXRlc1JlbWFp
bmluZ1NpemU7CisgICAgaWYgKG1fcmVtYWluaW5nLnNpemUoKSA+PSBtYXhTaXplKSB7CisgICAg
ICAgIC8vIERvIG5vdGhpbmcuCisgICAgfSBlbHNlIGlmICh0b3RhbERhdGFTaXplID49IG1heFNp
emUpIHsKKyAgICAgICAgc2l6ZV90IHVzZWRTaXplID0gbWF4U2l6ZSAtIG1fcmVtYWluaW5nLnNp
emUoKTsKKyAgICAgICAgbV9yZW1haW5pbmcuYXBwZW5kKGJ5dGVzICsgb2Zmc2V0SW5CeXRlcywg
dXNlZFNpemUpOworICAgICAgICBvZmZzZXRJbkJ5dGVzICs9IHVzZWRTaXplOworICAgIH0gZWxz
ZSB7CisgICAgICAgIG1fcmVtYWluaW5nLmFwcGVuZChieXRlcyArIG9mZnNldEluQnl0ZXMsIGJ5
dGVzUmVtYWluaW5nU2l6ZSk7CisgICAgICAgIG9mZnNldEluQnl0ZXMgKz0gYnl0ZXNSZW1haW5p
bmdTaXplOworICAgICAgICBpZiAoaXNFbmRPZlN0cmVhbSA9PSBJc0VuZE9mU3RyZWFtOjpObykK
KyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChtX3N0YXRlKTsKKyAgICB9CisKKyAg
ICBzaXplX3Qgb2Zmc2V0ID0gMDsKKyAgICB1aW50MzJfdCByZXN1bHQgPSAwOworICAgIGlmICgh
V1RGOjpMRUJEZWNvZGVyOjpkZWNvZGVVSW50MzIobV9yZW1haW5pbmcuZGF0YSgpLCBtX3JlbWFp
bmluZy5zaXplKCksIG9mZnNldCwgcmVzdWx0KSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKFN0YXRlOjpGYXRhbEVycm9yKTsKKyAgICBzaXplX3QgY29uc3VtZWRTaXplID0gb2Zmc2V0
OworICAgIG1fcmVtYWluaW5nLnJlbW92ZSgwLCBjb25zdW1lZFNpemUpOworICAgIG1fbmV4dE9m
ZnNldCArPSBjb25zdW1lZFNpemU7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYXV0byBTdHJl
YW1pbmdQYXJzZXI6OmFkZEJ5dGVzKGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3QgYnl0ZXNT
aXplLCBJc0VuZE9mU3RyZWFtIGlzRW5kT2ZTdHJlYW0pIC0+IFN0YXRlCit7CisgICAgaWYgKG1f
c3RhdGUgPT0gU3RhdGU6OkZhdGFsRXJyb3IpCisgICAgICAgIHJldHVybiBtX3N0YXRlOworCisg
ICAgbV90b3RhbFNpemUgKz0gYnl0ZXNTaXplOworICAgIGlmIChVTkxJS0VMWShtX3RvdGFsU2l6
ZS5oYXNPdmVyZmxvd2VkKCkgfHwgbV90b3RhbFNpemUudW5zYWZlR2V0KCkgPiBtYXhNb2R1bGVT
aXplKSkgeworICAgICAgICBtX3N0YXRlID0gZmFpbCgibW9kdWxlIHNpemUgaXMgdG9vIGxhcmdl
LCBtYXhpbXVtICIsIG1heE1vZHVsZVNpemUpOworICAgICAgICByZXR1cm4gbV9zdGF0ZTsKKyAg
ICB9CisKKyAgICBpZiAoT3B0aW9uczo6dXNlRWFnZXJXZWJBc3NlbWJseU1vZHVsZUhhc2hpbmco
KSkKKyAgICAgICAgbV9oYXNoZXIuYWRkQnl0ZXMoYnl0ZXMsIGJ5dGVzU2l6ZSk7CisKKyAgICBz
aXplX3Qgb2Zmc2V0SW5CeXRlcyA9IDA7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgc3dp
dGNoIChtX3N0YXRlKSB7CisgICAgICAgIGNhc2UgU3RhdGU6Ok1vZHVsZUhlYWRlcjogeworICAg
ICAgICAgICAgYXV0byByZXN1bHQgPSBjb25zdW1lKGJ5dGVzLCBieXRlc1NpemUsIG9mZnNldElu
Qnl0ZXMsIG1vZHVsZUhlYWRlclNpemUpOworICAgICAgICAgICAgaWYgKCFyZXN1bHQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIG1fc3RhdGU7CisgICAgICAgICAgICBtX3N0YXRlID0gcGFyc2VN
b2R1bGVIZWFkZXIoV1RGTW92ZSgqcmVzdWx0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIGNhc2UgU3RhdGU6OlNlY3Rpb25IZWFkZXI6IHsKKyAgICAgICAgICAg
IGF1dG8gcmVzdWx0ID0gY29uc3VtZShieXRlcywgYnl0ZXNTaXplLCBvZmZzZXRJbkJ5dGVzLCBz
ZWN0aW9uSGVhZGVyU2l6ZSk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbV9zdGF0ZTsKKyAgICAgICAgICAgIG1fc3RhdGUgPSBwYXJzZVNlY3Rpb25I
ZWFkZXIoV1RGTW92ZSgqcmVzdWx0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIGNhc2UgU3RhdGU6OlNlY3Rpb25TaXplOiB7CisgICAgICAgICAgICBhdXRvIHJl
c3VsdCA9IGNvbnN1bWVWYXJVSW50MzIoYnl0ZXMsIGJ5dGVzU2l6ZSwgb2Zmc2V0SW5CeXRlcywg
aXNFbmRPZlN0cmVhbSk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICAgICAg
ICAgIGlmIChyZXN1bHQuZXJyb3IoKSA9PSBTdGF0ZTo6RmF0YWxFcnJvcikKKyAgICAgICAgICAg
ICAgICAgICAgbV9zdGF0ZSA9IGZhaWxPblN0YXRlKG1fc3RhdGUpOworICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IHJlc3VsdC5lcnJvcigpOworICAg
ICAgICAgICAgICAgIHJldHVybiBtX3N0YXRlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
bV9zdGF0ZSA9IHBhcnNlU2VjdGlvblNpemUoKnJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorCisgICAgICAgIGNhc2UgU3RhdGU6OlNlY3Rpb25Cb2R5OiB7CisgICAgICAg
ICAgICBhdXRvIHJlc3VsdCA9IGNvbnN1bWUoYnl0ZXMsIGJ5dGVzU2l6ZSwgb2Zmc2V0SW5CeXRl
cywgbV9zZWN0aW9uTGVuZ3RoKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAg
ICAgICAgIHJldHVybiBtX3N0YXRlOworICAgICAgICAgICAgbV9zdGF0ZSA9IHBhcnNlU2VjdGlv
bkJvZHkoV1RGTW92ZSgqcmVzdWx0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIGNhc2UgU3RhdGU6OkNvZGVTZWN0aW9uU2l6ZTogeworICAgICAgICAgICAgYXV0
byByZXN1bHQgPSBjb25zdW1lVmFyVUludDMyKGJ5dGVzLCBieXRlc1NpemUsIG9mZnNldEluQnl0
ZXMsIGlzRW5kT2ZTdHJlYW0pOworICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAg
ICAgICAgICBpZiAocmVzdWx0LmVycm9yKCkgPT0gU3RhdGU6OkZhdGFsRXJyb3IpCisgICAgICAg
ICAgICAgICAgICAgIG1fc3RhdGUgPSBmYWlsT25TdGF0ZShtX3N0YXRlKTsKKyAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSByZXN1bHQuZXJyb3IoKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gbV9zdGF0ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIG1fc3RhdGUgPSBwYXJzZUNvZGVTZWN0aW9uU2l6ZSgqcmVzdWx0KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBTdGF0ZTo6RnVuY3Rpb25IZWFkZXI6
IHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gY29uc3VtZVZhclVJbnQzMihieXRlcywgYnl0
ZXNTaXplLCBvZmZzZXRJbkJ5dGVzLCBpc0VuZE9mU3RyZWFtKTsKKyAgICAgICAgICAgIGlmICgh
cmVzdWx0KSB7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5lcnJvcigpID09IFN0YXRlOjpG
YXRhbEVycm9yKQorICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gZmFpbE9uU3RhdGUobV9z
dGF0ZSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBtX3N0YXRl
ID0gcmVzdWx0LmVycm9yKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fc3RhdGU7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBtX3N0YXRlID0gcGFyc2VGdW5jdGlvbkhlYWRlcigqcmVz
dWx0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBTdGF0
ZTo6RnVuY3Rpb25Cb2R5OiB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGNvbnN1bWUoYnl0
ZXMsIGJ5dGVzU2l6ZSwgb2Zmc2V0SW5CeXRlcywgbV9mdW5jdGlvblNpemUpOworICAgICAgICAg
ICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fc3RhdGU7CisgICAgICAg
ICAgICBtX3N0YXRlID0gcGFyc2VGdW5jdGlvbkJvZHkoV1RGTW92ZSgqcmVzdWx0KSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgU3RhdGU6OkZpbmlzaGVk
OgorICAgICAgICBjYXNlIFN0YXRlOjpGYXRhbEVycm9yOgorICAgICAgICAgICAgcmV0dXJuIG1f
c3RhdGU7CisgICAgICAgIH0KKworICAgICAgICBtX29mZnNldCA9IG1fbmV4dE9mZnNldDsKKyAg
ICB9Cit9CisKK2F1dG8gU3RyZWFtaW5nUGFyc2VyOjpmYWlsT25TdGF0ZShTdGF0ZSkgLT4gU3Rh
dGUKK3sKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIFN0YXRlOjpNb2R1bGVIZWFk
ZXI6CisgICAgICAgIHJldHVybiBmYWlsKCJleHBlY3RlZCBhIG1vZHVsZSBvZiBhdCBsZWFzdCAi
LCBtb2R1bGVIZWFkZXJTaXplLCAiIGJ5dGVzIik7CisgICAgY2FzZSBTdGF0ZTo6U2VjdGlvbkhl
YWRlcjoKKyAgICAgICAgcmV0dXJuIGZhaWwoImNhbid0IGdldCBzZWN0aW9uIGJ5dGUiKTsKKyAg
ICBjYXNlIFN0YXRlOjpTZWN0aW9uU2l6ZToKKyAgICAgICAgcmV0dXJuIGZhaWwoImNhbid0IGdl
dCAiLCBtX3NlY3Rpb24sICIgc2VjdGlvbidzIGxlbmd0aCIpOworICAgIGNhc2UgU3RhdGU6OlNl
Y3Rpb25Cb2R5OgorICAgICAgICByZXR1cm4gZmFpbChtX3NlY3Rpb24sICIgc2VjdGlvbiBvZiBz
aXplICIsIG1fc2VjdGlvbkxlbmd0aCwgIiB3b3VsZCBvdmVyZmxvdyBNb2R1bGUncyBzaXplIik7
CisgICAgY2FzZSBTdGF0ZTo6Q29kZVNlY3Rpb25TaXplOgorICAgICAgICByZXR1cm4gZmFpbCgi
Y2FuJ3QgZ2V0IENvZGUgc2VjdGlvbidzIGNvdW50Iik7CisgICAgY2FzZSBTdGF0ZTo6RnVuY3Rp
b25IZWFkZXI6CisgICAgICAgIHJldHVybiBmYWlsKCJjYW4ndCBnZXQgIiwgbV9mdW5jdGlvbklu
ZGV4LCAidGggQ29kZSBmdW5jdGlvbidzIHNpemUiKTsKKyAgICBjYXNlIFN0YXRlOjpGdW5jdGlv
bkJvZHk6CisgICAgICAgIHJldHVybiBmYWlsKCJDb2RlIGZ1bmN0aW9uJ3Mgc2l6ZSAiLCBtX2Z1
bmN0aW9uU2l6ZSwgIiBleGNlZWRzIHRoZSBtb2R1bGUncyByZW1haW5pbmcgc2l6ZSIpOworICAg
IGNhc2UgU3RhdGU6OkZpbmlzaGVkOgorICAgIGNhc2UgU3RhdGU6OkZhdGFsRXJyb3I6CisgICAg
ICAgIHJldHVybiBtX3N0YXRlOworICAgIH0KKyAgICByZXR1cm4gbV9zdGF0ZTsKK30KKworYXV0
byBTdHJlYW1pbmdQYXJzZXI6OmZpbmFsaXplKCkgLT4gU3RhdGUKK3sKKyAgICBhZGRCeXRlcyhu
dWxscHRyLCAwLCBJc0VuZE9mU3RyZWFtOjpZZXMpOworICAgIHN3aXRjaCAobV9zdGF0ZSkgewor
ICAgIGNhc2UgU3RhdGU6Ok1vZHVsZUhlYWRlcjoKKyAgICBjYXNlIFN0YXRlOjpTZWN0aW9uU2l6
ZToKKyAgICBjYXNlIFN0YXRlOjpTZWN0aW9uQm9keToKKyAgICBjYXNlIFN0YXRlOjpDb2RlU2Vj
dGlvblNpemU6CisgICAgY2FzZSBTdGF0ZTo6RnVuY3Rpb25IZWFkZXI6CisgICAgY2FzZSBTdGF0
ZTo6RnVuY3Rpb25Cb2R5OgorICAgICAgICBtX3N0YXRlID0gZmFpbE9uU3RhdGUobV9zdGF0ZSk7
CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTdGF0ZTo6RmluaXNoZWQ6CisgICAgY2FzZSBT
dGF0ZTo6RmF0YWxFcnJvcjoKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFN0YXRlOjpTZWN0
aW9uSGVhZGVyOgorICAgICAgICBpZiAobV9yZW1haW5pbmcuc2l6ZSgpID09IDApIHsKKyAgICAg
ICAgICAgIGlmIChPcHRpb25zOjp1c2VFYWdlcldlYkFzc2VtYmx5TW9kdWxlSGFzaGluZygpKQor
ICAgICAgICAgICAgICAgIG1faW5mby0+bmFtZVNlY3Rpb24tPnNldEhhc2gobV9oYXNoZXIuY29t
cHV0ZUhleERpZ2VzdCgpKTsKKyAgICAgICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6RmluaXNoZWQ7
CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9zdGF0ZSA9IGZhaWxPblN0YXRlKFN0YXRl
OjpTZWN0aW9uSGVhZGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBtX3N0
YXRlOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxF
KFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVN0cmVhbWluZ1BhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVh
bWluZ1BhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM1ZTY4MDlmMjA0ZTE5Y2JiMTc4NWUxYWMzYTg4MzM0
NGM5OWRjYWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtU3RyZWFtaW5nUGFyc2VyLmgKQEAgLTAsMCArMSwxMTYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTggWXVzdWtlIFN1enVraSA8eXVzdWtlc3V6dWtpQHNsb3dzdGFydC5vcmc+LgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIldhc21Nb2R1bGVJbmZvcm1hdGlv
bi5oIgorI2luY2x1ZGUgIldhc21QYXJzZXIuaCIKKyNpbmNsdWRlICJXYXNtU2VjdGlvbnMuaCIK
KyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNp
bmNsdWRlIDx3dGYvU0hBMS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsK
KworY2xhc3MgU3RyZWFtaW5nUGFyc2VyQ2xpZW50IHsKK307CisKK2NsYXNzIFN0cmVhbWluZ1Bh
cnNlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZW51bSBj
bGFzcyBTdGF0ZSA6IHVpbnQ4X3QgeworICAgICAgICBNb2R1bGVIZWFkZXIsCisgICAgICAgIFNl
Y3Rpb25IZWFkZXIsCisgICAgICAgIFNlY3Rpb25TaXplLAorICAgICAgICBTZWN0aW9uQm9keSwK
KyAgICAgICAgQ29kZVNlY3Rpb25TaXplLAorICAgICAgICBGdW5jdGlvbkhlYWRlciwKKyAgICAg
ICAgRnVuY3Rpb25Cb2R5LAorICAgICAgICBGaW5pc2hlZCwKKyAgICAgICAgRmF0YWxFcnJvciwK
KyAgICB9OworCisgICAgZW51bSBjbGFzcyBJc0VuZE9mU3RyZWFtIHsgWWVzLCBObyB9OworCisg
ICAgU3RyZWFtaW5nUGFyc2VyKE1vZHVsZUluZm9ybWF0aW9uJik7CisKKyAgICBTdGF0ZSBhZGRC
eXRlcyhjb25zdCB1aW50OF90KiBieXRlcywgc2l6ZV90IGxlbmd0aCkgeyByZXR1cm4gYWRkQnl0
ZXMoYnl0ZXMsIGxlbmd0aCwgSXNFbmRPZlN0cmVhbTo6Tm8pOyB9CisgICAgU3RhdGUgZmluYWxp
emUoKTsKKworICAgIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKCkgY29uc3QgeyByZXR1cm4g
bV9lcnJvck1lc3NhZ2U7IH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIG1vZHVsZUhlYWRlclNpemUgPSA4OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
c2VjdGlvbkhlYWRlclNpemUgPSAxOworCisgICAgU3RhdGUgYWRkQnl0ZXMoY29uc3QgdWludDhf
dCogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIElzRW5kT2ZTdHJlYW0pOworCisgICAgU3RhdGUgcGFy
c2VNb2R1bGVIZWFkZXIoVmVjdG9yPHVpbnQ4X3Q+JiYpOworICAgIFN0YXRlIHBhcnNlU2VjdGlv
bkhlYWRlcihWZWN0b3I8dWludDhfdD4mJik7CisgICAgU3RhdGUgcGFyc2VTZWN0aW9uU2l6ZSh1
aW50MzJfdCk7CisgICAgU3RhdGUgcGFyc2VTZWN0aW9uQm9keShWZWN0b3I8dWludDhfdD4mJik7
CisKKyAgICBTdGF0ZSBwYXJzZUNvZGVTZWN0aW9uU2l6ZSh1aW50MzJfdCk7CisgICAgU3RhdGUg
cGFyc2VGdW5jdGlvbkhlYWRlcih1aW50MzJfdCk7CisgICAgU3RhdGUgcGFyc2VGdW5jdGlvbkJv
ZHkoVmVjdG9yPHVpbnQ4X3Q+JiYpOworCisgICAgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhf
dD4+IGNvbnN1bWUoY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCwgc2l6ZV90Jiwgc2l6ZV90
KTsKKyAgICBFeHBlY3RlZDx1aW50MzJfdCwgU3RhdGU+IGNvbnN1bWVWYXJVSW50MzIoY29uc3Qg
dWludDhfdCogYnl0ZXMsIHNpemVfdCwgc2l6ZV90JiwgSXNFbmRPZlN0cmVhbSk7CisKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uQXJncz4gTkVWRVJfSU5MSU5FIFN0YXRlIFdBUk5fVU5VU0VE
X1JFVFVSTiBmYWlsKEFyZ3MuLi4pOworCisgICAgU3RhdGUgZmFpbE9uU3RhdGUoU3RhdGUpOwor
CisgICAgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiBtX2luZm87CisgICAgVmVjdG9yPHVpbnQ4X3Q+
IG1fcmVtYWluaW5nOworICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsKKworICAgIENoZWNrZWRT
aXplIG1fdG90YWxTaXplIHsgMCB9OworICAgIHNpemVfdCBtX29mZnNldCB7IDAgfTsKKyAgICBz
aXplX3QgbV9uZXh0T2Zmc2V0IHsgMCB9OworICAgIHNpemVfdCBtX2NvZGVPZmZzZXQgeyAwIH07
CisKKyAgICBTSEExIG1faGFzaGVyOworCisgICAgdWludDMyX3QgbV9zZWN0aW9uTGVuZ3RoIHsg
MCB9OworCisgICAgdWludDMyX3QgbV9mdW5jdGlvbkNvdW50IHsgMCB9OworICAgIHVpbnQzMl90
IG1fZnVuY3Rpb25JbmRleCB7IDAgfTsKKworICAgIHVpbnQzMl90IG1fZnVuY3Rpb25TaXplIHsg
MCB9OworCisgICAgU3RhdGUgbV9zdGF0ZSB7IFN0YXRlOjpNb2R1bGVIZWFkZXIgfTsKKyAgICBT
ZWN0aW9uIG1fc2VjdGlvbiB7IFNlY3Rpb246OkJlZ2luIH07CisgICAgU2VjdGlvbiBtX3ByZXZp
b3VzS25vd25TZWN0aW9uIHsgU2VjdGlvbjo6QmVnaW4gfTsKK307CisKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAK
aW5kZXggMjNmZWYyMmU1OGJlZTFlZmNjMDI5YmI3NjhlMDUyMjZhOTIwMzZiZS4uYWViY2UwYzQx
MDgzOTFkNjFmMWE5MmNkZjI1OTA2ZDRlMWJhODI0YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAKQEAgLTE0MCwxMSAr
MTQwLDYgQEAgdm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNP
YmplY3QtPm1fY29kZUJsb2Nrc1tpXSk7CiB9CiAKLWNvbnN0IFZlY3Rvcjx1aW50OF90PiYgSlNX
ZWJBc3NlbWJseU1vZHVsZTo6c291cmNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbW9kdWxlSW5m
b3JtYXRpb24oKS5zb3VyY2U7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8g
RU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCmluZGV4IDE3YmVkNjEyNWY0ZTdmMzE5YThiN2FmMmUx
ZGRmODY0YWViMmZhNWEuLmQzOTMwMDY5MTlkMjdhZDE3NDY5ZmUyNjk1ZGI4NDM4NDIzZDA4MmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlN
b2R1bGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
TW9kdWxlLmgKQEAgLTY4LDggKzY4LDYgQEAgY2xhc3MgSlNXZWJBc3NlbWJseU1vZHVsZSBmaW5h
bCA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiAgICAgSlNXZWJBc3NlbWJseUNvZGVC
bG9jayogY29kZUJsb2NrKFdhc206Ok1lbW9yeU1vZGUgbW9kZSk7CiAgICAgdm9pZCBzZXRDb2Rl
QmxvY2soVk0mLCBXYXNtOjpNZW1vcnlNb2RlLCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKik7CiAK
LSAgICBjb25zdCBWZWN0b3I8dWludDhfdD4mIHNvdXJjZSgpIGNvbnN0OwotCiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgV2FzbTo6TW9kdWxlJiBtb2R1bGUoKTsKIAogcHJpdmF0ZToKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5UHJvdG90eXBlLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5UHJvdG90eXBlLmNw
cAppbmRleCA5NmQ0YzE0ZDc0YzdlZTFhZjhhZWU3NjEwYzQ5NGFhN2M5NGIwNmM1Li5kY2FkYzBk
MGRiY2U1YTlkMjU1M2E0ZGJkYzhjZTRiNGZjYzVkNDUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVByb3RvdHlwZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlQcm90b3R5cGUuY3BwCkBAIC0yOTQs
MTAgKzI5NCwxMCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3Nl
bWJseVZhbGlkYXRlRnVuYyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgc2l6ZV90IGJ5dGVTaXplOwog
ICAgIHN0ZDo6dGllKGJhc2UsIGJ5dGVTaXplKSA9IGdldFdhc21CdWZmZXJGcm9tVmFsdWUoZXhl
YywgZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOwotICAgIEJCUVBsYW4gcGxhbigmdm0ud2FzbUNvbnRleHQsIGJhc2Us
IGJ5dGVTaXplLCBCQlFQbGFuOjpWYWxpZGF0aW9uLCBQbGFuOjpkb250RmluYWxpemUoKSk7Cisg
ICAgQkJRUGxhbiBwbGFuKCZ2bS53YXNtQ29udGV4dCwgQkJRUGxhbjo6VmFsaWRhdGlvbiwgUGxh
bjo6ZG9udEZpbmFsaXplKCkpOwogICAgIC8vIEZJWE1FOiBXZSBtaWdodCB3YW50IHRvIHRocm93
IGFuIE9PTSBleGNlcHRpb24gaGVyZSBpZiB3ZSBkZXRlY3QgdGhhdCBzb21ldGhpbmcgd2lsbCBP
T00uCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjAx
NQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHBsYW4ucGFyc2VBbmRWYWxp
ZGF0ZU1vZHVsZSgpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ocGxh
bi5wYXJzZUFuZFZhbGlkYXRlTW9kdWxlKGJhc2UsIGJ5dGVTaXplKSkpOwogfQogCiBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5Q29tcGlsZVN0cmVhbWluZ0ludGVybmFs
KEV4ZWNTdGF0ZSogZXhlYykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0xFQkRlY29kZXIu
aCBiL1NvdXJjZS9XVEYvd3RmL0xFQkRlY29kZXIuaAppbmRleCA5NDYyNzcwYzY5OWNkMDVlYTY1
NzNlM2VkOWMxYzk3NWE4YjUxNTA3Li45OWE1YzA5YWQ0YTU0MThjODBkMDEzN2IxMGUwMGQwYjQy
NmMwODgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9MRUJEZWNvZGVyLmgKKysrIGIvU291
cmNlL1dURi93dGYvTEVCRGVjb2Rlci5oCkBAIC0zNiwxNSArMzYsMjAgQEAKIG5hbWVzcGFjZSBX
VEYgeyBuYW1lc3BhY2UgTEVCRGVjb2RlciB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxp
bmUgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gZGVjb2RlVUludChjb25zdCB1aW50OF90KiBieXRl
cywgc2l6ZV90IGxlbmd0aCwgc2l6ZV90JiBvZmZzZXQsIFQmIHJlc3VsdCkKK2lubGluZSBjb25z
dGV4cHIgc2l6ZV90IG1heEJ5dGVMZW5ndGgoKQogewogICAgIGNvbnN0IHNpemVfdCBudW1CaXRz
ID0gc2l6ZW9mKFQpICogQ0hBUl9CSVQ7Ci0gICAgY29uc3Qgc2l6ZV90IG1heEJ5dGVMZW5ndGgg
PSAobnVtQml0cyAtIDEpIC8gNyArIDE7IC8vIG51bUJpdHMgLyA3IHJvdW5kaW5nIHVwLgorICAg
IHJldHVybiAobnVtQml0cyAtIDEpIC8gNyArIDE7IC8vIG51bUJpdHMgLyA3IHJvdW5kaW5nIHVw
LgorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIGJvb2wgV0FSTl9VTlVTRURfUkVU
VVJOIGRlY29kZVVJbnQoY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIHNpemVf
dCYgb2Zmc2V0LCBUJiByZXN1bHQpCit7CiAgICAgaWYgKGxlbmd0aCA8PSBvZmZzZXQpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICByZXN1bHQgPSAwOwogICAgIHVuc2lnbmVkIHNoaWZ0ID0g
MDsKLSAgICBzaXplX3QgbGFzdCA9IHN0ZDo6bWluKG1heEJ5dGVMZW5ndGgsIGxlbmd0aCAtIG9m
ZnNldCkgLSAxOworICAgIHNpemVfdCBsYXN0ID0gc3RkOjptaW4obWF4Qnl0ZUxlbmd0aDxUPigp
LCBsZW5ndGggLSBvZmZzZXQpIC0gMTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyB0cnVlOyAr
K2kpIHsKICAgICAgICAgdWludDhfdCBieXRlID0gYnl0ZXNbb2Zmc2V0KytdOwogICAgICAgICBy
ZXN1bHQgfD0gc3RhdGljX2Nhc3Q8VD4oYnl0ZSAmIDB4N2YpIDw8IHNoaWZ0OwpAQCAtNjEsMTMg
KzY2LDExIEBAIGlubGluZSBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBkZWNvZGVVSW50KGNvbnN0
IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBzCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgog
aW5saW5lIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGRlY29kZUludChjb25zdCB1aW50OF90KiBi
eXRlcywgc2l6ZV90IGxlbmd0aCwgc2l6ZV90JiBvZmZzZXQsIFQmIHJlc3VsdCkKIHsKLSAgICBj
b25zdCBzaXplX3QgbnVtQml0cyA9IHNpemVvZihUKSAqIENIQVJfQklUOwotICAgIGNvbnN0IHNp
emVfdCBtYXhCeXRlTGVuZ3RoID0gKG51bUJpdHMgLSAxKSAvIDcgKyAxOyAvLyBudW1CaXRzIC8g
NyByb3VuZGluZyB1cC4KICAgICBpZiAobGVuZ3RoIDw9IG9mZnNldCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIHJlc3VsdCA9IDA7CiAgICAgdW5zaWduZWQgc2hpZnQgPSAwOwotICAgIHNp
emVfdCBsYXN0ID0gc3RkOjptaW4obWF4Qnl0ZUxlbmd0aCwgbGVuZ3RoIC0gb2Zmc2V0KSAtIDE7
CisgICAgc2l6ZV90IGxhc3QgPSBzdGQ6Om1pbihtYXhCeXRlTGVuZ3RoPFQ+KCksIGxlbmd0aCAt
IG9mZnNldCkgLSAxOwogICAgIHVpbnQ4X3QgYnl0ZTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyB0cnVlOyArK2kpIHsKICAgICAgICAgYnl0ZSA9IGJ5dGVzW29mZnNldCsrXTsKQEAgLTgwLDYg
KzgzLDcgQEAgaW5saW5lIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGRlY29kZUludChjb25zdCB1
aW50OF90KiBieXRlcywgc2l6ZV90IGxlbmd0aCwgc2kKICAgICB9CiAKICAgICB1c2luZyBVbnNp
Z25lZFQgPSB0eXBlbmFtZSBzdGQ6Om1ha2VfdW5zaWduZWQ8VD46OnR5cGU7CisgICAgY29uc3Qg
c2l6ZV90IG51bUJpdHMgPSBzaXplb2YoVCkgKiBDSEFSX0JJVDsKICAgICBpZiAoc2hpZnQgPCBu
dW1CaXRzICYmIChieXRlICYgMHg0MCkpCiAgICAgICAgIHJlc3VsdCA9IHN0YXRpY19jYXN0PFQ+
KHN0YXRpY19jYXN0PFVuc2lnbmVkVD4ocmVzdWx0KSB8IChzdGF0aWNfY2FzdDxVbnNpZ25lZFQ+
KC0xKSA8PCBzaGlmdCkpOwogICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9D
aGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCA0NzEwMGRiNzA3MDRmMGQ0NjY0Njhm
ODRhNjczMWY2NDI5YWJhMzRlLi45NDIwMzgxOGI0MDY0ZjEzNWZkNjQ1ZDI5NDk2YjI0ZTY3YmRh
YzI1IDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDQyIEBACisyMDE4LTA4LTI3ICBZdXN1a2UgU3V6dWtpICA8eXVzdWtlc3V6
dWtpQHNsb3dzdGFydC5vcmc+CisKKyAgICAgICAgW1dlYkFzc2VtYmx5XSBQYXJzZSB3YXNtIG1v
ZHVsZXMgaW4gYSBzdHJlYW1pbmcgZmFzaGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg4OTQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV2FzbSBwYXJzaW5nIGVycm9yIHNob3VsZCBub3QgcmVwb3J0
IHRoZSB0b3RhbCBieXRlIHNpemUgc2luY2Ugc3RyZWFtaW5nIHBhcnNpbmcgZG9lcyBub3QKKyAg
ICAgICAgd2FudCB0byBsb2FkIGFsbCB0aGUgYnl0ZXMuCisgICAgICAgIEFkZCBhIHNpbXBsZSB0
ZXN0IHdhc20vc3RyZXNzL3N0cmVhbWluZy1iYXNpYy5qcyBmb3IgaW5pdGlhbCBzdHJlYW1pbmcg
cGFyc2luZyBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICAqIHdhc20vZnVuY3Rpb24tdGVzdHMv
aW52YWxpZC1kdXBsaWNhdGUtZXhwb3J0LmpzOgorICAgICAgICAqIHdhc20vZnVuY3Rpb24tdGVz
dHMvbWVtb3J5LWFsaWdubWVudC5qczoKKyAgICAgICAgKGNvbnN0Lm9wLm9mLldBU00ub3Bjb2Rl
cyk6CisgICAgICAgICogd2FzbS9mdW5jdGlvbi10ZXN0cy9tZW1vcnktc2VjdGlvbi1hbmQtaW1w
b3J0LmpzOgorICAgICAgICAqIHdhc20vZnVuY3Rpb24tdGVzdHMvdm9pZC1hcmd1bWVudC10eXBl
LXNob3VsZC1iZS1hLXZhbGlkYXRpb24tZXJyb3IuanM6CisgICAgICAgICogd2FzbS9qcy1hcGkv
TW9kdWxlLWNvbXBpbGUuanM6CisgICAgICAgIChhc3luYy50ZXN0UHJvbWlzZUFQSSk6CisgICAg
ICAgICogd2FzbS9qcy1hcGkvZWxlbWVudC5qczoKKyAgICAgICAgKGFzc2VydC50aHJvd3MubmV3
LldlYkFzc2VtYmx5Lk1vZHVsZS5idWlsZGVyLldlYkFzc2VtYmx5KToKKyAgICAgICAgKGFzc2Vy
dC50aHJvd3MpOgorICAgICAgICAqIHdhc20vanMtYXBpL2dsb2JhbC1lcnJvci5qczoKKyAgICAg
ICAgKGFzc2VydC50aHJvd3MubmV3LldlYkFzc2VtYmx5Lk1vZHVsZS5iaW4pOgorICAgICAgICAo
YXNzZXJ0LnRocm93cyk6CisgICAgICAgICogd2FzbS9qcy1hcGkvdGFibGUuanM6CisgICAgICAg
IChuZXcuV2ViQXNzZW1ibHkuTW9kdWxlKToKKyAgICAgICAgKGFzc2VydC50aHJvd3MpOgorICAg
ICAgICAoYXNzZXJ0QmFkVGFibGVJbXBvcnQpOgorICAgICAgICAqIHdhc20vanMtYXBpL3Rlc3Rf
RGF0YS5qczoKKyAgICAgICAgKERhdGFTZWN0aW9uV2l0aG91dE1lbW9yeSk6CisgICAgICAgICog
d2FzbS9qcy1hcGkvdGVzdF9TdGFydC5qczoKKyAgICAgICAgKEludmFsaWRTdGFydEZ1bmN0aW9u
SW5kZXgpOgorICAgICAgICAqIHdhc20vanMtYXBpL3Rlc3RfYmFzaWNfYXBpLmpzOgorICAgICAg
ICAoY29uc3QuYy5pbi5jb25zdHJ1Y3RvclByb3BlcnRpZXMuc3dpdGNoKToKKyAgICAgICAgKiB3
YXNtL2pzLWFwaS92ZXJzaW9uLmpzOgorICAgICAgICAqIHdhc20vc3RyZXNzL25hbWVTZWN0aW9u
Lndhc206IEFkZGVkLgorICAgICAgICAqIHdhc20vc3RyZXNzL3N0cmVhbWluZy1iYXNpYy5qczog
QWRkZWQuCisgICAgICAgIChjaGVjayk6CisKIDIwMTgtMDgtMjQgIFl1c3VrZSBTdXp1a2kgIDx5
dXN1a2VzdXp1a2lAc2xvd3N0YXJ0Lm9yZz4KIAogICAgICAgICBbSlNDXSBBcnJheS5wcm90b3R5
cGUucmV2ZXJzZSBtb2RpZmllcyBKU0ltbXV0YWJsZUJ1dHRlcmZseQpkaWZmIC0tZ2l0IGEvSlNU
ZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL2ludmFsaWQtZHVwbGljYXRlLWV4cG9ydC5qcyBiL0pT
VGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9pbnZhbGlkLWR1cGxpY2F0ZS1leHBvcnQuanMKaW5k
ZXggYzQ3YjFlMTY2MmMyY2I2MGM5M2Q2YzliOTU3MzliZGFiYTc4MGU3My4uNDE4ZDUxYWE0OTkw
MTlhYTI0NjliYWE1ZjFmZDhlMWFiZDNiZjI5MSAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2Z1
bmN0aW9uLXRlc3RzL2ludmFsaWQtZHVwbGljYXRlLWV4cG9ydC5qcworKysgYi9KU1Rlc3RzL3dh
c20vZnVuY3Rpb24tdGVzdHMvaW52YWxpZC1kdXBsaWNhdGUtZXhwb3J0LmpzCkBAIC0xNSw1ICsx
NSw1IEBACiAgICAgICAgIC5FbmQoKTsKIAogICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNz
ZW1ibHkoKS5nZXQoKTsKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5N
b2R1bGUoYmluKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxl
IGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzMSAvIDM5OiBkdXBsaWNhdGUgZXhwb3J0OiAnZm9vJyIp
OworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pLCBX
ZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJz
ZSBhdCBieXRlIDMxOiBkdXBsaWNhdGUgZXhwb3J0OiAnZm9vJyIpOwogfQpkaWZmIC0tZ2l0IGEv
SlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL21lbW9yeS1hbGlnbm1lbnQuanMgYi9KU1Rlc3Rz
L3dhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LWFsaWdubWVudC5qcwppbmRleCBhYmM1NzQxMjE0
NmYyZTM5NzI2MWU3MzI2ZWNjOGE1YzgxOWEwNDljLi5lNjA1ODk4OTAwYWExYmVkNjdiOWQzMmFj
NmYyYWEwMTJlYjI5OWVlIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMv
bWVtb3J5LWFsaWdubWVudC5qcworKysgYi9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbWVt
b3J5LWFsaWdubWVudC5qcwpAQCAtNDIsNyArNDIsNyBAQAogICAgICAgICBpZiAoYWxpZ25Mb2cy
IDw9IG1heEFsaWduTG9nMikKICAgICAgICAgICAgIGluc3RhbmNlKCk7CiAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIGFzc2VydC50aHJvd3MoaW5zdGFuY2UsIFdlYkFzc2VtYmx5LkNvbXBpbGVF
cnJvciwgYFdlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgJHtzdGFydH0g
LyAke2VuZH06IGJ5dGUgYWxpZ25tZW50ICR7MSA8PCBhbGlnbkxvZzJ9IGV4Y2VlZHMgJHtpbmZv
LnR5cGV9J3MgbmF0dXJhbCBhbGlnbm1lbnQgJHsxIDw8IG1heEFsaWduTG9nMn0sIGluIGZ1bmN0
aW9uIGF0IGluZGV4IDBgKTsKKyAgICAgICAgICAgIGFzc2VydC50aHJvd3MoaW5zdGFuY2UsIFdl
YkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgYFdlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNl
IGF0IGJ5dGUgJHtzdGFydH06IGJ5dGUgYWxpZ25tZW50ICR7MSA8PCBhbGlnbkxvZzJ9IGV4Y2Vl
ZHMgJHtpbmZvLnR5cGV9J3MgbmF0dXJhbCBhbGlnbm1lbnQgJHsxIDw8IG1heEFsaWduTG9nMn0s
IGluIGZ1bmN0aW9uIGF0IGluZGV4IDBgKTsKIAogICAgIH0KIH0KZGlmZiAtLWdpdCBhL0pTVGVz
dHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9tZW1vcnktc2VjdGlvbi1hbmQtaW1wb3J0LmpzIGIvSlNU
ZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL21lbW9yeS1zZWN0aW9uLWFuZC1pbXBvcnQuanMKaW5k
ZXggYTFkYjljZTI1Nzc5MzUwYjViZDU1NzdmNzY3ZTY2Nzc3NGJkOGIwYi4uMTUyMDdlZjcxODhl
ZmEwZjY5MjM1NzNjMWRmZWE1YTNlYTViNzFmZiAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2Z1
bmN0aW9uLXRlc3RzL21lbW9yeS1zZWN0aW9uLWFuZC1pbXBvcnQuanMKKysrIGIvSlNUZXN0cy93
YXNtL2Z1bmN0aW9uLXRlc3RzL21lbW9yeS1zZWN0aW9uLWFuZC1pbXBvcnQuanMKQEAgLTI4LDQg
KzI4LDQgQEAKICAgICAgIC5Db2RlKCkuRW5kKCk7CiAKIGNvbnN0IGkwID0gaW5zdGFudGlhdGUo
YnVpbGRlcjApOwotYXNzZXJ0LnRocm93cygoKSA9PiBpbnN0YW50aWF0ZShidWlsZGVyMSwgeyBp
bXA6IHsgbWVtb3J5OiBpMC5leHBvcnRzLm1lbW9yeSB9IH0pLCBXZWJBc3NlbWJseS5Db21waWxl
RXJyb3IsIGBXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDM1IC8gNDE6
IHRoZXJlIGNhbiBhdCBtb3N0IGJlIG9uZSBNZW1vcnkgc2VjdGlvbiBmb3Igbm93YCk7Cithc3Nl
cnQudGhyb3dzKCgpID0+IGluc3RhbnRpYXRlKGJ1aWxkZXIxLCB7IGltcDogeyBtZW1vcnk6IGkw
LmV4cG9ydHMubWVtb3J5IH0gfSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgYFdlYkFzc2Vt
Ymx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzU6IHRoZXJlIGNhbiBhdCBtb3N0IGJl
IG9uZSBNZW1vcnkgc2VjdGlvbiBmb3Igbm93YCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20v
ZnVuY3Rpb24tdGVzdHMvdm9pZC1hcmd1bWVudC10eXBlLXNob3VsZC1iZS1hLXZhbGlkYXRpb24t
ZXJyb3IuanMgYi9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvdm9pZC1hcmd1bWVudC10eXBl
LXNob3VsZC1iZS1hLXZhbGlkYXRpb24tZXJyb3IuanMKaW5kZXggNDcxNDliMWQ3ZmI5MzIzMWMy
NWQwNzhhODYyOThiNzUwMmJmZjY4YS4uMjE3ODgxMGE3ODE3ZDk3MzM1ZTYyZjc4YjNmYzUxN2Uz
ZmU3N2U0MSAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL3ZvaWQtYXJn
dW1lbnQtdHlwZS1zaG91bGQtYmUtYS12YWxpZGF0aW9uLWVycm9yLmpzCisrKyBiL0pTVGVzdHMv
d2FzbS9mdW5jdGlvbi10ZXN0cy92b2lkLWFyZ3VtZW50LXR5cGUtc2hvdWxkLWJlLWEtdmFsaWRh
dGlvbi1lcnJvci5qcwpAQCAtMTcsNiArMTcsNiBAQCBmdW5jdGlvbiBnZXRCaW5hcnkocGFyYW1z
KSB7CiAgICAgcmV0dXJuIGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKIH0KIAotYXNzZXJ0
LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGdldEJpbmFyeShbImkzMiIsICJ2
b2lkIl0pKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRv
ZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxNSAvIDQ3OiBjYW4ndCBnZXQgMXRoIGFyZ3VtZW50IFR5cGUi
KTsKLWFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShnZXRCaW5hcnko
WyJ2b2lkIl0pKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxl
IGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxNCAvIDQ2OiBjYW4ndCBnZXQgMHRoIGFyZ3VtZW50IFR5
cGUiKTsKLWFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShnZXRCaW5h
cnkoWyJpMzIiLCAidm9pZCIsICJpMzIiXSkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJX
ZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE1IC8gNDg6IGNhbid0IGdl
dCAxdGggYXJndW1lbnQgVHlwZSIpOworYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1i
bHkuTW9kdWxlKGdldEJpbmFyeShbImkzMiIsICJ2b2lkIl0pKSwgV2ViQXNzZW1ibHkuQ29tcGls
ZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxNTogY2Fu
J3QgZ2V0IDF0aCBhcmd1bWVudCBUeXBlIik7Cithc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJB
c3NlbWJseS5Nb2R1bGUoZ2V0QmluYXJ5KFsidm9pZCJdKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVF
cnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTQ6IGNhbid0
IGdldCAwdGggYXJndW1lbnQgVHlwZSIpOworYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGdldEJpbmFyeShbImkzMiIsICJ2b2lkIiwgImkzMiJdKSksIFdlYkFzc2Vt
Ymx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5
dGUgMTU6IGNhbid0IGdldCAxdGggYXJndW1lbnQgVHlwZSIpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0
cy93YXNtL2pzLWFwaS9Nb2R1bGUtY29tcGlsZS5qcyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvTW9k
dWxlLWNvbXBpbGUuanMKaW5kZXggZDNiZWIzMzI1NzdhZWRiMDU4YzhlNDFkMjNhZGRhOWM5MWYx
ZGY3OC4uZDcyM2JmNGQ3MGI0OWM0OWExMzY1ZmRjNjdiNDUyNDJiMzgyNzJlNiAxMDA2NDQKLS0t
IGEvSlNUZXN0cy93YXNtL2pzLWFwaS9Nb2R1bGUtY29tcGlsZS5qcworKysgYi9KU1Rlc3RzL3dh
c20vanMtYXBpL01vZHVsZS1jb21waWxlLmpzCkBAIC0yMSw3ICsyMSw3IEBAIGFzeW5jIGZ1bmN0
aW9uIHRlc3RQcm9taXNlQVBJKCkgewogICAgICAgICAgICAgYXdhaXQgV2ViQXNzZW1ibHkuY29t
cGlsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpOwogICAgICAgICB9IGNhdGNoKGUpIHsK
ICAgICAgICAgICAgIGFzc2VydC50cnV0aHkoZSBpbnN0YW5jZW9mIFdlYkFzc2VtYmx5LkNvbXBp
bGVFcnJvcik7Ci0gICAgICAgICAgICBhc3NlcnQudHJ1dGh5KGUubWVzc2FnZSA9PT0gIldlYkFz
c2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzQgLyA0MzogdGhlcmUgY2FuIGF0
IG1vc3QgYmUgb25lIE1lbW9yeSBzZWN0aW9uIGZvciBub3ciKTsKKyAgICAgICAgICAgIGFzc2Vy
dC50cnV0aHkoZS5tZXNzYWdlID09PSAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2Ug
YXQgYnl0ZSAzNDogdGhlcmUgY2FuIGF0IG1vc3QgYmUgb25lIE1lbW9yeSBzZWN0aW9uIGZvciBu
b3ciKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFw
aS9lbGVtZW50LmpzIGIvSlNUZXN0cy93YXNtL2pzLWFwaS9lbGVtZW50LmpzCmluZGV4IDE4OGFj
NzQxNTExMjYwNDhiODI3MjQ4ZGM0NzM4MjA1YWE4NmExNDkuLmZjYmUyODI3ZjM3MTY2M2FhODRm
ZGY1YzEwMTAwYjgxNzgxNzczOTAgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvZWxl
bWVudC5qcworKysgYi9KU1Rlc3RzL3dhc20vanMtYXBpL2VsZW1lbnQuanMKQEAgLTE4LDcgKzE4
LDcgQEAKICAgICAgICAgICAgIC5FbmQoKQogICAgICAgICAuRW5kKCk7CiAKLSAgICBhc3NlcnQu
dGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgp
LmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRv
ZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNCAvIDQxOiBFbGVtZW50IHNlY3Rpb24gZm9yIFRhYmxlIDAg
ZXhjZWVkcyBhdmFpbGFibGUgVGFibGUgMCIpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3
IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3Nl
bWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBi
eXRlIDI0OiBFbGVtZW50IHNlY3Rpb24gZm9yIFRhYmxlIDAgZXhjZWVkcyBhdmFpbGFibGUgVGFi
bGUgMCIpOwogfQogCiB7CkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgICAgICAuRW5kKCkKICAg
ICAgICAgLkVuZCgpOwogCi0gICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHku
TW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVF
cnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzAgLyA0Nzog
RWxlbWVudCBzZWN0aW9uIGZvciBUYWJsZSAxIGV4Y2VlZHMgYXZhaWxhYmxlIFRhYmxlIDEiKTsK
KyAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5X
ZWJBc3NlbWJseSgpLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1i
bHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzMDogRWxlbWVudCBzZWN0aW9uIGZvciBU
YWJsZSAxIGV4Y2VlZHMgYXZhaWxhYmxlIFRhYmxlIDEiKTsKIH0KIAogewpAQCAtMTEyLDcgKzEx
Miw3IEBACiAgICAgICAgICAgICAuRW5kKCkKICAgICAgICAgLkVuZCgpOwogCi0gICAgYXNzZXJ0
LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHko
KS5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBk
b2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzggLyA1MDogRWxlbWVudCBzZWN0aW9uJ3MgMHRoIGVsZW1l
bnQncyAydGggaW5kZXggaXMgMSB3aGljaCBleGNlZWRzIHRoZSBmdW5jdGlvbiBpbmRleCBzcGFj
ZSBzaXplIG9mIDEgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5X
ZWJBc3NlbWJseSgpLmdldCgpKScpIik7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2Vi
QXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5
LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUg
Mzg6IEVsZW1lbnQgc2VjdGlvbidzIDB0aCBlbGVtZW50J3MgMnRoIGluZGV4IGlzIDEgd2hpY2gg
ZXhjZWVkcyB0aGUgZnVuY3Rpb24gaW5kZXggc3BhY2Ugc2l6ZSBvZiAxIChldmFsdWF0aW5nICdu
ZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIpOwog
fQogCiB7CkBAIC0yMTUsNSArMjE1LDUgQEAgZnVuY3Rpb24gYmFkTW9kdWxlKCkgewogICAgICAg
ICByZXR1cm4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOwogICAgIH0KIAotICAgIGFzc2Vy
dC50aHJvd3MoKCkgPT4gYmFkTW9kdWxlKCksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldl
YkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgNTggLyA3MjogRWxlbWVudCBp
bml0X2V4cHIgbXVzdCBwcm9kdWNlIGFuIGkzMiIpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4g
YmFkTW9kdWxlKCksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVs
ZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgNTg6IEVsZW1lbnQgaW5pdF9leHByIG11c3QgcHJvZHVj
ZSBhbiBpMzIiKTsKIH0KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvZ2xvYmFsLWVy
cm9yLmpzIGIvSlNUZXN0cy93YXNtL2pzLWFwaS9nbG9iYWwtZXJyb3IuanMKaW5kZXggMDlmOGQ3
OTlkYzRlMmYzOWQ5YTU0MzAyY2FhYmRlN2E3NmQ1MTA3Yi4uZDNlZGY4OThlN2Q5ZmEwN2U0NzBj
ZmMzMmM2YWIzNmYxNzMxYjUxMyAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2pzLWFwaS9nbG9i
YWwtZXJyb3IuanMKKysrIGIvSlNUZXN0cy93YXNtL2pzLWFwaS9nbG9iYWwtZXJyb3IuanMKQEAg
LTIzLDcgKzIzLDcgQEAKICAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCk7CiAg
ICAgYmluLnRyaW0oKTsKIAotICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5
Lk1vZHVsZShiaW4uZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJs
eS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2IC8gNTk6IGdldF9nbG9iYWwncyBpbmRl
eCAwIGV4Y2VlZHMgdGhlIG51bWJlciBvZiBnbG9iYWxzIDAgKGV2YWx1YXRpbmcgJ25ldyBXZWJB
c3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKScpIik7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBu
ZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbi5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJv
ciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjY6IGdldF9nbG9i
YWwncyBpbmRleCAwIGV4Y2VlZHMgdGhlIG51bWJlciBvZiBnbG9iYWxzIDAgKGV2YWx1YXRpbmcg
J25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKScpIik7CiB9CiAKIApAQCAtNTIsNyAr
NTIsNyBAQAogICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKTsKICAgICBiaW4u
dHJpbSgpOwogCi0gICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxl
KGJpbi5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVs
ZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzIgLyA3NjogTXV0YWJsZSBHbG9iYWxzIGFyZW4ndCBz
dXBwb3J0ZWQgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKScp
Iik7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbi5n
ZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vz
bid0IHBhcnNlIGF0IGJ5dGUgMzI6IE11dGFibGUgR2xvYmFscyBhcmVuJ3Qgc3VwcG9ydGVkIChl
dmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbi5nZXQoKSknKSIpOwogfQogCiB7
CkBAIC03Nyw3ICs3Nyw3IEBACiAgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgp
OwogICAgIGJpbi50cmltKCk7CiAKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3Nl
bWJseS5Nb2R1bGUoYmluLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNz
ZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSA1MSAvIDU5OiAxdGggRXhwb3J0IGlz
bid0IGltbXV0YWJsZSwgbmFtZWQgJ2dsb2JhbCcgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJs
eS5Nb2R1bGUoYmluLmdldCgpKScpIik7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2Vi
QXNzZW1ibHkuTW9kdWxlKGJpbi5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldl
YkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgNTE6IDF0aCBFeHBvcnQgaXNu
J3QgaW1tdXRhYmxlLCBuYW1lZCAnZ2xvYmFsJyAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5
Lk1vZHVsZShiaW4uZ2V0KCkpJykiKTsKIH0KIAogewpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNt
L2pzLWFwaS90YWJsZS5qcyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGFibGUuanMKaW5kZXggYjgz
MmUxMTc2NjQxMzAyMzBmYzgwYmZiMTMwYzEzNjZhMzEyZTMyNS4uY2Y2OGI0NDA0OTVmNmJlNmY4
YjI3OTQ3NzEyNDU2ZDdjYTdjOGM2ZiAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2pzLWFwaS90
YWJsZS5qcworKysgYi9KU1Rlc3RzL3dhc20vanMtYXBpL3RhYmxlLmpzCkBAIC0xMyw3ICsxMyw3
IEBACiAgICAgICAgIC5FbmQoKQogICAgICAgICAuQ29kZSgpCiAgICAgICAgIC5FbmQoKTsKLSAg
ICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJB
c3NlbWJseSgpLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHku
TW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzNCAvIDQxOiBDYW5ub3QgaGF2ZSBtb3JlIHRo
YW4gb25lIFRhYmxlIGZvciBub3ciKTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJB
c3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwgV2ViQXNzZW1ibHku
Q29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAz
NDogQ2Fubm90IGhhdmUgbW9yZSB0aGFuIG9uZSBUYWJsZSBmb3Igbm93Iik7CiB9CiAKIHsKQEAg
LTM4LDcgKzM4LDcgQEAKICAgICAgICAgLkVuZCgpCiAgICAgICAgIC5Db2RlKCkKICAgICAgICAg
LkVuZCgpOwotICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShi
dWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJX
ZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE3IC8gMjg6IFRhYmxlIGNv
dW50IG9mIDIgaXMgaW52YWxpZCwgYXQgbW9zdCAxIGlzIGFsbG93ZWQgZm9yIG5vdyAoZXZhbHVh
dGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkp
JykiKTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVp
bGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2Vi
QXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxNzogVGFibGUgY291bnQgb2Yg
MiBpcyBpbnZhbGlkLCBhdCBtb3N0IDEgaXMgYWxsb3dlZCBmb3Igbm93IChldmFsdWF0aW5nICdu
ZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIpOwog
fQogCiB7CkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgICAgICAgICAgLkNhbGxJbmRpcmVjdCgw
LCAwKQogICAgICAgICAgICAgLkVuZCgpCiAgICAgICAgIC5FbmQoKTsKLSAgICBhc3NlcnQudGhy
b3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdl
dCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNu
J3QgcGFyc2UgYXQgYnl0ZSA0IC8gNzogY2FsbF9pbmRpcmVjdCBpcyBvbmx5IHZhbGlkIHdoZW4g
YSB0YWJsZSBpcyBkZWZpbmVkIG9yIGltcG9ydGVkLCBpbiBmdW5jdGlvbiBhdCBpbmRleCAwIChl
dmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5n
ZXQoKSknKSIpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVs
ZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3Is
ICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDQ6IGNhbGxfaW5kaXJl
Y3QgaXMgb25seSB2YWxpZCB3aGVuIGEgdGFibGUgaXMgZGVmaW5lZCBvciBpbXBvcnRlZCwgaW4g
ZnVuY3Rpb24gYXQgaW5kZXggMCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShi
dWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiKTsKIH0KIAogewpAQCAtNzMsNyArNzMsNyBA
QAogICAgICAgICAgICAgICAgIC5DYWxsSW5kaXJlY3QoMCwgMSkKICAgICAgICAgICAgIC5FbmQo
KQogICAgICAgICAuRW5kKCk7Ci0gICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1i
bHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBp
bGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgNiAvIDc6
IGNhbGxfaW5kaXJlY3QncyAncmVzZXJ2ZWQnIHZhcnVpbnQxIG11c3QgYmUgMHgwLCBpbiBmdW5j
dGlvbiBhdCBpbmRleCAwIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxk
ZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3
IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3Nl
bWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBi
eXRlIDY6IGNhbGxfaW5kaXJlY3QncyAncmVzZXJ2ZWQnIHZhcnVpbnQxIG11c3QgYmUgMHgwLCBp
biBmdW5jdGlvbiBhdCBpbmRleCAwIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxl
KGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIpOwogfQogCiB7CkBAIC04Niw3ICs4Niw3
IEBACiAgICAgICAgIC5FbmQoKQogICAgICAgICAuQ29kZSgpCiAgICAgICAgIC5FbmQoKTsKLSAg
ICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJB
c3NlbWJseSgpLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHku
TW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyMyAvIDI2OiBjYW4ndCBleHBvcnQgVGFibGUg
MCB0aGVyZSBhcmUgMCBUYWJsZXMiKTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJB
c3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwgV2ViQXNzZW1ibHku
Q29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAy
MzogY2FuJ3QgZXhwb3J0IFRhYmxlIDAgdGhlcmUgYXJlIDAgVGFibGVzIik7CiB9CiAKIHsKQEAg
LTEwMiw3ICsxMDIsNyBAQAogICAgICAgICAuRW5kKCkKICAgICAgICAgLkNvZGUoKQogICAgICAg
ICAuRW5kKCk7Ci0gICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxl
KGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwg
IldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzAgLyAzMzogY2FuJ3Qg
ZXhwb3J0IFRhYmxlIDEgdGhlcmUgYXJlIDEgVGFibGVzIik7CisgICAgYXNzZXJ0LnRocm93cygo
KSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSks
IFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBh
cnNlIGF0IGJ5dGUgMzA6IGNhbid0IGV4cG9ydCBUYWJsZSAxIHRoZXJlIGFyZSAxIFRhYmxlcyIp
OwogfQogCiBmdW5jdGlvbiBhc3NlcnRCYWRUYWJsZSh0YWJsZURlc2NyaXB0aW9uLCBtZXNzYWdl
KSB7CkBAIC0xMzIsNDIgKzEzMiw0MiBAQCBmdW5jdGlvbiBhc3NlcnRCYWRUYWJsZUltcG9ydCh0
YWJsZURlc2NyaXB0aW9uLCBtZXNzYWdlKSB7CiB7CiAgICAgbGV0IGJhZERlc2NyaXB0aW9ucyA9
IFsKICAgICAgICAgW3tpbml0aWFsOiAxMCwgZWxlbWVudDogImkzMiJ9LAotICAgICAgICAgIldl
YkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTggLyAyMzogVGFibGUgdHlw
ZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC0xIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHku
TW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCi0gICAgICAgICAiV2ViQXNz
ZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNiAvIDM0OiBUYWJsZSB0eXBlIHNo
b3VsZCBiZSBhbnlmdW5jLCBnb3QgLTEgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1
bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCisgICAgICAgICAiV2ViQXNzZW1i
bHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxODogVGFibGUgdHlwZSBzaG91bGQgYmUg
YW55ZnVuYywgZ290IC0xIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxk
ZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxl
IGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNjogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywg
Z290IC0xIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNz
ZW1ibHkoKS5nZXQoKSknKSJdLAogICAgICAgICBbe2luaXRpYWw6IDEwLCBlbGVtZW50OiAiZjMy
In0sCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAx
OCAvIDIzOiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTMgKGV2YWx1YXRpbmcg
J25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwK
LSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2IC8g
MzQ6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtMyAoZXZhbHVhdGluZyAnbmV3
IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKKyAg
ICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE4OiBUYWJs
ZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTMgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3Nl
bWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKKyAgICAgICAgICJX
ZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2OiBUYWJsZSB0eXBlIHNo
b3VsZCBiZSBhbnlmdW5jLCBnb3QgLTMgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1
bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCiAgICAgICAgIFt7aW5pdGlhbDog
MTAsIGVsZW1lbnQ6ICJmNjQifSwKLSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24n
dCBwYXJzZSBhdCBieXRlIDE4IC8gMjM6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdv
dCAtNCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2Vt
Ymx5KCkuZ2V0KCkpJykiLAotICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBh
cnNlIGF0IGJ5dGUgMjYgLyAzNDogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC00
IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHko
KS5nZXQoKSknKSJdLAorICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNl
IGF0IGJ5dGUgMTg6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtNCAoZXZhbHVh
dGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkp
JykiLAorICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUg
MjY6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtNCAoZXZhbHVhdGluZyAnbmV3
IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKICAg
ICAgICAgW3tpbml0aWFsOiAxMCwgZWxlbWVudDogImk2NCJ9LAotICAgICAgICAgIldlYkFzc2Vt
Ymx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTggLyAyMzogVGFibGUgdHlwZSBzaG91
bGQgYmUgYW55ZnVuYywgZ290IC0yIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxl
KGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCi0gICAgICAgICAiV2ViQXNzZW1ibHku
TW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNiAvIDM0OiBUYWJsZSB0eXBlIHNob3VsZCBi
ZSBhbnlmdW5jLCBnb3QgLTIgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVp
bGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9k
dWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxODogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVu
YywgZ290IC0yIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2Vi
QXNzZW1ibHkoKS5nZXQoKSknKSIsCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNu
J3QgcGFyc2UgYXQgYnl0ZSAyNjogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC0y
IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHko
KS5nZXQoKSknKSJdLAogICAgICAgICBbe2luaXRpYWw6IDEwLCBtYXhpbXVtOiAyMCwgZWxlbWVu
dDogImkzMiJ9LAotICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0
IGJ5dGUgMTggLyAyNDogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC0xIChldmFs
dWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQo
KSknKSIsCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0
ZSAyNiAvIDM1OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTEgKGV2YWx1YXRp
bmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScp
Il0sCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAx
ODogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC0xIChldmFsdWF0aW5nICduZXcg
V2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCisgICAg
ICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNjogVGFibGUg
dHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC0xIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1i
bHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAogICAgICAgICBbe2lu
aXRpYWw6IDEwLCBtYXhpbXVtOiAyMCwgZWxlbWVudDogImYzMiJ9LAotICAgICAgICAgIldlYkFz
c2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTggLyAyNDogVGFibGUgdHlwZSBz
aG91bGQgYmUgYW55ZnVuYywgZ290IC0zIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9k
dWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCi0gICAgICAgICAiV2ViQXNzZW1i
bHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNiAvIDM1OiBUYWJsZSB0eXBlIHNob3Vs
ZCBiZSBhbnlmdW5jLCBnb3QgLTMgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUo
YnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCisgICAgICAgICAiV2ViQXNzZW1ibHku
TW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxODogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55
ZnVuYywgZ290IC0zIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIu
V2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRv
ZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNjogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290
IC0zIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1i
bHkoKS5nZXQoKSknKSJdLAogICAgICAgICBbe2luaXRpYWw6IDEwLCBtYXhpbXVtOiAyMCwgZWxl
bWVudDogImY2NCJ9LAotICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNl
IGF0IGJ5dGUgMTggLyAyNDogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC00IChl
dmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5n
ZXQoKSknKSIsCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQg
Ynl0ZSAyNiAvIDM1OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTQgKGV2YWx1
YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgp
KScpIl0sCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0
ZSAxODogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC00IChldmFsdWF0aW5nICdu
ZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCisg
ICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNjogVGFi
bGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC00IChldmFsdWF0aW5nICduZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAogICAgICAgICBb
e2luaXRpYWw6IDEwLCBtYXhpbXVtOiAyMCwgZWxlbWVudDogImk2NCJ9LAotICAgICAgICAgIldl
YkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTggLyAyNDogVGFibGUgdHlw
ZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC0yIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHku
TW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCi0gICAgICAgICAiV2ViQXNz
ZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNiAvIDM1OiBUYWJsZSB0eXBlIHNo
b3VsZCBiZSBhbnlmdW5jLCBnb3QgLTIgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1
bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCisgICAgICAgICAiV2ViQXNzZW1i
bHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxODogVGFibGUgdHlwZSBzaG91bGQgYmUg
YW55ZnVuYywgZ290IC0yIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxk
ZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxl
IGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNjogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywg
Z290IC0yIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNz
ZW1ibHkoKS5nZXQoKSknKSJdLAogCiAgICAgICAgIFt7aW5pdGlhbDogMTAsIG1heGltdW06IDks
IGVsZW1lbnQ6ICJhbnlmdW5jIn0sCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNu
J3QgcGFyc2UgYXQgYnl0ZSAyMSAvIDI0OiByZXNpemFibGUgbGltaXRzIGhhcyBhIGluaXRpYWwg
cGFnZSBjb3VudCBvZiAxMCB3aGljaCBpcyBncmVhdGVyIHRoYW4gaXRzIG1heGltdW0gOSAoZXZh
bHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0
KCkpJykiLAotICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5
dGUgMjkgLyAzNTogcmVzaXphYmxlIGxpbWl0cyBoYXMgYSBpbml0aWFsIHBhZ2UgY291bnQgb2Yg
MTAgd2hpY2ggaXMgZ3JlYXRlciB0aGFuIGl0cyBtYXhpbXVtIDkgKGV2YWx1YXRpbmcgJ25ldyBX
ZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCisgICAg
ICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyMTogcmVzaXph
YmxlIGxpbWl0cyBoYXMgYSBpbml0aWFsIHBhZ2UgY291bnQgb2YgMTAgd2hpY2ggaXMgZ3JlYXRl
ciB0aGFuIGl0cyBtYXhpbXVtIDkgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUo
YnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKKyAgICAgICAgICJXZWJBc3NlbWJseS5N
b2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI5OiByZXNpemFibGUgbGltaXRzIGhhcyBhIGlu
aXRpYWwgcGFnZSBjb3VudCBvZiAxMCB3aGljaCBpcyBncmVhdGVyIHRoYW4gaXRzIG1heGltdW0g
OSAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5
KCkuZ2V0KCkpJykiXSwKICAgICAgICAgW3tpbml0aWFsOiAxLCBtYXhpbXVtOiAwLCBlbGVtZW50
OiAiYW55ZnVuYyJ9LAotICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNl
IGF0IGJ5dGUgMjEgLyAyNDogcmVzaXphYmxlIGxpbWl0cyBoYXMgYSBpbml0aWFsIHBhZ2UgY291
bnQgb2YgMSB3aGljaCBpcyBncmVhdGVyIHRoYW4gaXRzIG1heGltdW0gMCAoZXZhbHVhdGluZyAn
bmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAot
ICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjkgLyAz
NTogcmVzaXphYmxlIGxpbWl0cyBoYXMgYSBpbml0aWFsIHBhZ2UgY291bnQgb2YgMSB3aGljaCBp
cyBncmVhdGVyIHRoYW4gaXRzIG1heGltdW0gMCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5
Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKKyAgICAgICAgICJXZWJB
c3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDIxOiByZXNpemFibGUgbGltaXRz
IGhhcyBhIGluaXRpYWwgcGFnZSBjb3VudCBvZiAxIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiBpdHMg
bWF4aW11bSAwIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2Vi
QXNzZW1ibHkoKS5nZXQoKSknKSIsCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNu
J3QgcGFyc2UgYXQgYnl0ZSAyOTogcmVzaXphYmxlIGxpbWl0cyBoYXMgYSBpbml0aWFsIHBhZ2Ug
Y291bnQgb2YgMSB3aGljaCBpcyBncmVhdGVyIHRoYW4gaXRzIG1heGltdW0gMCAoZXZhbHVhdGlu
ZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJyki
XSwKICAgICAgICAgW3tpbml0aWFsOiAyKiozMiAtIDEsIG1heGltdW06IDIqKjMyIC0gMiwgZWxl
bWVudDogImFueWZ1bmMifSwKLSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBw
YXJzZSBhdCBieXRlIDI5IC8gMzI6IHJlc2l6YWJsZSBsaW1pdHMgaGFzIGEgaW5pdGlhbCBwYWdl
IGNvdW50IG9mIDQyOTQ5NjcyOTUgd2hpY2ggaXMgZ3JlYXRlciB0aGFuIGl0cyBtYXhpbXVtIDQy
OTQ5NjcyOTQgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJB
c3NlbWJseSgpLmdldCgpKScpIiwKLSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24n
dCBwYXJzZSBhdCBieXRlIDM3IC8gNDM6IHJlc2l6YWJsZSBsaW1pdHMgaGFzIGEgaW5pdGlhbCBw
YWdlIGNvdW50IG9mIDQyOTQ5NjcyOTUgd2hpY2ggaXMgZ3JlYXRlciB0aGFuIGl0cyBtYXhpbXVt
IDQyOTQ5NjcyOTQgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5X
ZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRv
ZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyOTogcmVzaXphYmxlIGxpbWl0cyBoYXMgYSBpbml0aWFsIHBh
Z2UgY291bnQgb2YgNDI5NDk2NzI5NSB3aGljaCBpcyBncmVhdGVyIHRoYW4gaXRzIG1heGltdW0g
NDI5NDk2NzI5NCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldl
YkFzc2VtYmx5KCkuZ2V0KCkpJykiLAorICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vz
bid0IHBhcnNlIGF0IGJ5dGUgMzc6IHJlc2l6YWJsZSBsaW1pdHMgaGFzIGEgaW5pdGlhbCBwYWdl
IGNvdW50IG9mIDQyOTQ5NjcyOTUgd2hpY2ggaXMgZ3JlYXRlciB0aGFuIGl0cyBtYXhpbXVtIDQy
OTQ5NjcyOTQgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJB
c3NlbWJseSgpLmdldCgpKScpIl0sCiAgICAgICAgIFt7aW5pdGlhbDogMioqMzEsIGVsZW1lbnQ6
ICJhbnlmdW5jIn0sCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2Ug
YXQgYnl0ZSAyNCAvIDI3OiBUYWJsZSdzIGluaXRpYWwgcGFnZSBjb3VudCBvZiAyMTQ3NDgzNjQ4
IGlzIHRvbyBiaWcsIG1heGltdW0gMTAwMDAwMDAgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJs
eS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKLSAgICAgICAgICJXZWJB
c3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDMyIC8gMzg6IFRhYmxlJ3MgaW5p
dGlhbCBwYWdlIGNvdW50IG9mIDIxNDc0ODM2NDggaXMgdG9vIGJpZywgbWF4aW11bSAxMDAwMDAw
MCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5
KCkuZ2V0KCkpJykiXSwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJz
ZSBhdCBieXRlIDI0OiBUYWJsZSdzIGluaXRpYWwgcGFnZSBjb3VudCBvZiAyMTQ3NDgzNjQ4IGlz
IHRvbyBiaWcsIG1heGltdW0gMTAwMDAwMDAgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5N
b2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKKyAgICAgICAgICJXZWJBc3Nl
bWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDMyOiBUYWJsZSdzIGluaXRpYWwgcGFn
ZSBjb3VudCBvZiAyMTQ3NDgzNjQ4IGlzIHRvbyBiaWcsIG1heGltdW0gMTAwMDAwMDAgKGV2YWx1
YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgp
KScpIl0sCiAgICAgXTsKIAogICAgIGZvciAoY29uc3QgZCBvZiBiYWREZXNjcmlwdGlvbnMpIHsK
QEAgLTE4Niw3ICsxODYsNyBAQCBmdW5jdGlvbiBhc3NlcnRCYWRUYWJsZUltcG9ydCh0YWJsZURl
c2NyaXB0aW9uLCBtZXNzYWdlKSB7CiAgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCiAgICAgICAg
IC5Db2RlKCkKICAgICAgICAgLkVuZCgpOwotICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdl
YkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJs
eS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRl
IDM5IC8gNDg6IENhbm5vdCBoYXZlIG1vcmUgdGhhbiBvbmUgVGFibGUgZm9yIG5vdyIpOworICAg
IGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFz
c2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5N
b2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDM5OiBDYW5ub3QgaGF2ZSBtb3JlIHRoYW4gb25l
IFRhYmxlIGZvciBub3ciKTsKIH0KIAogCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vanMtYXBp
L3Rlc3RfRGF0YS5qcyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9EYXRhLmpzCmluZGV4IGNj
YTBjZjNiYzQ1ZDBmNGRkMzNiZDljYTU5Nzk4OTU0ZDJkNDViMTguLjQxNzE0MzUxMjhhMDg0ZDU5
NDlkOGZmMmI4YjEyNTcwYjdmMjMzNzUgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9qcy1hcGkv
dGVzdF9EYXRhLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9EYXRhLmpzCkBAIC01
Miw3ICs1Miw3IEBACiAgICAgICAgICAgLlNlZ21lbnQoWzB4ZmZdKS5PZmZzZXQoMCkuRW5kKCkK
ICAgICAgICAgLkVuZCgpOwogICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5n
ZXQoKTsKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmlu
KSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCBgV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3Qg
cGFyc2UgYXQgYnl0ZSAxNSAvIDIwOiAwdGggRGF0YSBzZWdtZW50IGhhcyBpbmRleCAwIHdoaWNo
IGV4Y2VlZHMgdGhlIG51bWJlciBvZiBNZW1vcmllcyAwYCk7CisgICAgYXNzZXJ0LnRocm93cygo
KSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbiksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJv
ciwgYFdlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTU6IDB0aCBEYXRh
IHNlZ21lbnQgaGFzIGluZGV4IDAgd2hpY2ggZXhjZWVkcyB0aGUgbnVtYmVyIG9mIE1lbW9yaWVz
IDBgKTsKIH0pKCk7CiAKIChmdW5jdGlvbiBFbXB0eURhdGFTZWN0aW9uV2l0aG91dE1lbW9yeSgp
IHsKQEAgLTYyLDcgKzYyLDcgQEAKICAgICAgICAgICAuU2VnbWVudChbXSkuT2Zmc2V0KDApLkVu
ZCgpCiAgICAgICAgIC5FbmQoKTsKICAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5
KCkuZ2V0KCk7Ci0gICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxl
KGJpbiksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgYFdlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vz
bid0IHBhcnNlIGF0IGJ5dGUgMTUgLyAxOTogMHRoIERhdGEgc2VnbWVudCBoYXMgaW5kZXggMCB3
aGljaCBleGNlZWRzIHRoZSBudW1iZXIgb2YgTWVtb3JpZXMgMGApOworICAgIGFzc2VydC50aHJv
d3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pLCBXZWJBc3NlbWJseS5Db21waWxl
RXJyb3IsIGBXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE1OiAwdGgg
RGF0YSBzZWdtZW50IGhhcyBpbmRleCAwIHdoaWNoIGV4Y2VlZHMgdGhlIG51bWJlciBvZiBNZW1v
cmllcyAwYCk7CiB9KSgpOwogCiAoZnVuY3Rpb24gRGF0YVNlY3Rpb25CaWdnZXJUaGFuTWVtb3J5
KCkgewpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X1N0YXJ0LmpzIGIvSlNU
ZXN0cy93YXNtL2pzLWFwaS90ZXN0X1N0YXJ0LmpzCmluZGV4IGI0NDQ1NjkzMmQ5MGI1YzgzMzE0
NWVjM2YzNDJmYzUwNDZmNzllMGIuLjVjMzE1MGUxY2FiZWJmYjg0MzMzZWY3MTQyM2E4ODg2Y2Rl
MGVhZTggMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9TdGFydC5qcworKysg
Yi9KU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfU3RhcnQuanMKQEAgLTMxLDUgKzMxLDUgQEAKICAg
ICAgICAgLlN0YXJ0KDApLkVuZCgpIC8vIEludmFsaWQgaW5kZXguCiAgICAgICAgIC5Db2RlKCku
RW5kKCk7CiAgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOwotICAgIGFzc2Vy
dC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pLCBFcnJvciwgYFdlYkFz
c2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTcgLyAyMDogU3RhcnQgaW5kZXgg
MCBleGNlZWRzIGZ1bmN0aW9uIGluZGV4IHNwYWNlIDAgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3Nl
bWJseS5Nb2R1bGUoYmluKScpYCk7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGJpbiksIEVycm9yLCBgV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFy
c2UgYXQgYnl0ZSAxNzogU3RhcnQgaW5kZXggMCBleGNlZWRzIGZ1bmN0aW9uIGluZGV4IHNwYWNl
IDAgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKScpYCk7CiB9KSgpOwpk
aWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X2Jhc2ljX2FwaS5qcyBiL0pTVGVz
dHMvd2FzbS9qcy1hcGkvdGVzdF9iYXNpY19hcGkuanMKaW5kZXggMDhlNzRhYTMyNGE3MTc4OGU1
ODE5YzRhOGJiZTc3NDc1ODViMWE4OS4uMWEyZDIyMjEwMzA0NTFkZjA2NDViMzBlYTMxYmIyNzQ4
ZjU1MzZkMCAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X2Jhc2ljX2FwaS5q
cworKysgYi9KU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfYmFzaWNfYXBpLmpzCkBAIC02Nyw3ICs2
Nyw3IEBACiAgICAgICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseVtj
XShpbnZhbGlkKSwgVHlwZUVycm9yLCBgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheUJ1
ZmZlclZpZXcgb3IgYW4gQXJyYXlCdWZmZXIgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseVtj
XShpbnZhbGlkKScpYCk7CiAgICAgICAgIGZvciAoY29uc3QgYnVmZmVyIG9mIFtuZXcgQXJyYXlC
dWZmZXIoKSwgbmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcigpKSwgbmV3IEludDhBcnJheSgp
LCBuZXcgVWludDhBcnJheSgpLCBuZXcgVWludDhDbGFtcGVkQXJyYXkoKSwgbmV3IEludDE2QXJy
YXkoKSwgbmV3IFVpbnQxNkFycmF5KCksIG5ldyBJbnQzMkFycmF5KCksIG5ldyBVaW50MzJBcnJh
eSgpLCBuZXcgRmxvYXQzMkFycmF5KCksIG5ldyBGbG9hdDY0QXJyYXkoKV0pCiAgICAgICAgICAg
ICAvLyBGSVhNRSB0aGUgZm9sbG93aW5nIHNob3VsZCBiZSBXZWJBc3NlbWJseS5Db21waWxlRXJy
b3IuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM3NjgKLSAgICAg
ICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5W2NdKGJ1ZmZlciksIEVy
cm9yLCBgV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAwIC8gMDogZXhw
ZWN0ZWQgYSBtb2R1bGUgb2YgYXQgbGVhc3QgOCBieXRlcyAoZXZhbHVhdGluZyAnbmV3IFdlYkFz
c2VtYmx5W2NdKGJ1ZmZlciknKWApOworICAgICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBu
ZXcgV2ViQXNzZW1ibHlbY10oYnVmZmVyKSwgRXJyb3IsIGBXZWJBc3NlbWJseS5Nb2R1bGUgZG9l
c24ndCBwYXJzZSBhdCBieXRlIDA6IGV4cGVjdGVkIGEgbW9kdWxlIG9mIGF0IGxlYXN0IDggYnl0
ZXMgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseVtjXShidWZmZXIpJylgKTsKICAgICAgICAg
YXNzZXJ0Lmluc3RhbmNlb2YobmV3IFdlYkFzc2VtYmx5W2NdKGVtcHR5TW9kdWxlQXJyYXkpLCBX
ZWJBc3NlbWJseS5Nb2R1bGUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlICJJbnN0YW5jZSI6
CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vanMtYXBpL3ZlcnNpb24uanMgYi9KU1Rlc3RzL3dh
c20vanMtYXBpL3ZlcnNpb24uanMKaW5kZXggODFjZDdmZjAxMjJmYjIxY2U5MWY4MGZiNTFlNGM2
OWUxNDU5OGM0Ny4uMDQ4NmZjZmRkZWZkMDgyMWQzOTI0NmNiNjQwODczNGJmZWJmMjJlMiAxMDA2
NDQKLS0tIGEvSlNUZXN0cy93YXNtL2pzLWFwaS92ZXJzaW9uLmpzCisrKyBiL0pTVGVzdHMvd2Fz
bS9qcy1hcGkvdmVyc2lvbi5qcwpAQCAtNSw1ICs1LDUgQEAKICAgICBpZiAodmVyc2lvbiA9PT0g
MSkKICAgICAgICAgY29udGludWU7CiAgICAgY29uc3QgZW1wdHlNb2R1bGVBcnJheSA9IFVpbnQ4
QXJyYXkub2YoMHgwLCAweDYxLCAweDczLCAweDZkLCB2ZXJzaW9uLCAweDAwLCAweDAwLCAweDAw
KTsKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoZW1wdHlN
b2R1bGVBcnJheSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgYFdlYkFzc2VtYmx5Lk1vZHVs
ZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgOCAvIDg6IHVuZXhwZWN0ZWQgdmVyc2lvbiBudW1iZXIg
JHt2ZXJzaW9ufSBleHBlY3RlZCAxYCk7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2Vi
QXNzZW1ibHkuTW9kdWxlKGVtcHR5TW9kdWxlQXJyYXkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJy
b3IsIGBXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDg6IHVuZXhwZWN0
ZWQgdmVyc2lvbiBudW1iZXIgJHt2ZXJzaW9ufSBleHBlY3RlZCAxYCk7CiB9CmRpZmYgLS1naXQg
YS9KU1Rlc3RzL3dhc20vc3RyZXNzL25hbWVTZWN0aW9uLndhc20gYi9KU1Rlc3RzL3dhc20vc3Ry
ZXNzL25hbWVTZWN0aW9uLndhc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjRiMjJiMWFlZWEzOGU0NjljMzI2MGJh
MzRkNWRhNGE2ZGIxMjE1MwpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMTM0MDkKemNtYlc4T04/
QXVkQkBMdlJhTXVtPk1vQ009JFl+MGQjPz1gRndnXm9LX2pJMmd4R15JVyhZRzJ2WmByJlk2ZSVn
CnotUnxsZCEkPklJQSZgc3xxQ35KayhkNGx9MWQlTFFCb1lmR3RVUlBkViE8TWpTZkdlU0IxT3VF
I1lEPTJXYipyZQp6PWlZakJfZT11Zz5BSjZUJi12Y3B8TkhLfVpnY05XPGVaRUM7XjUlR2IpSE4x
X3hHZHk9T1g+WWB9PllQX25oT3YKeklVVGM7R0o8WFZyUWhhOyk1Ky1Xe25jT2xqWmdVLSpGTl5f
KTFNeEdgcXxHVWAlWSYmJnBoaXRjQWF6ZUByb1N9CnpafWB2RkMkaTAoSkNtdFBHYEsmeXlTK0pp
YWRjeUpYSl8pVk9Lc1gwTjdIOV9ya21TfkMqTnV9SiQ/Nk1ufEpULQp6T3JNKFVlMTdyalRaV0BN
ZCQlVUg/QGRRe2hqJkpJWnJ5dSVjPVBzKSZJb0RgaHJ7aWlUVSVrcCktV3VlWHtucWAKemQheS08
JD5kV3o7aioyMWRHRlRkX1Z5KiRHNz5jPW9PJTMtamN+M3QrYEdOS3tqIVRScGY/fXpwKG4haTY7
OGMkCnpjZk0kVUtJSEt5PlVtcXgzRDBxSzVGZjt2QyEyMkcrI1dedXFMIWBPNGNDOGxiOHBtMChn
cmpxejlxJUlKeFlAfQp6UFNTfH5RdUc8NkRWciFzR2ZwSEtYSWt5WndmPENOVGw+KkRtLTc/cEMr
NWZOdT0jMCFgQVpCcyomZzEzX25sa3IKelVBZ295eF53Untxdj9oXylnSGReIXVDc2hwTDZmYkNv
a1JvXnY+UyZuYkNDNXkoZFMwdnIjOGNqYGw/ND9ZKy1FCnpHdV56a15+fUFeVE8pVTNnXzlnPy1Y
Rk8mPTB7aGZzZTVsVytgQnAxYXUqKzZSMzIqJVUpPGlneHckPnV6SjJxUwp6ZClVVUtQeHJwQSZF
ayE/KXNCfF4rK181NV9mVUl5Wip3eCluWSM2Q19gK2x+YV97Y2gkaj9CXyZTY35VQ3lAU1YKekdQ
JTFXR3VXS28tbnJ9RSlfd2tFWS14TFljPkFfe2V7WClrO2x8MldDOWNTd09ZXyNfazk/cHleSnc/
NGU8RVQzCnppSml2Pl9ScUQtPXY9RkM8TVhYXkV4JEpRX2piPj5pWVUqJnRSZTFQRUJfdGFEY3Qj
MXtgPEJZVSlEaHBvcDB5KQp6QUJJdCNFMiZPKUlKdUl+QDh+d09ibmAjWnooXnw9WnFPfHdFd09h
Jl5mQmsmYT9IODZoSTMhQmg1YypZe0pTPUQKekptYlg9O0g4TUZ4TnNOWmp9RlI5dkdjN1c5JmBx
ZWxAMD03SHFaWkNDVzg1eDA1VWs9JmBsWmxtZjk1S0RrKz5sCnpHcDwlSCNJOCEycXRKO3s8RXFQ
dkJIaHh0bHlsTGd4V2d2QzYhKGcoaVd1fEphbiltdFppJExTcWF4NGNQSjlgYAp6ckEwaWhRdldz
aEFNXiowUm5nVkheS3NjdUU7R3R+M01uI3R0N0s7MThKRWJqTkdgLV8peFRjbFQ8ZXJjVWdaQWwK
eilTckUrWHBoU19EfDF+Nzw+YExXJnYxZFFEakZOUEp7P3pgcUdPbDBiZiM0X2JoUUZxdCllYUpq
aHQzUFBUV0g/Cnp1bUo7dVZucktRYmk+OTtxUnRsK29vb0J9WVAjPVRSPlZmKlIkbDdYIVVrUUdC
cmUxb1B7SmU8NXxoe19GRVJ1agp6PWxRPWFzeDN0V2cqMT4jP3g7O1NCd0JTciM7TF41c2F9eHh6
PCg5IzN8MG5AZEd+UitjWWRGe3tDO0xzPUlBO04Kenk4YV9HNnxOc1ZjUmslN3l2OytSMVkkJDt7
MXYtQUlPYHZ7YWMhQElCQ3FaMXBpYGcxWCNUP31QSiskTURKfk52CnpofjJRUk44UlV4a1JHXlFg
TlNlT1U7ajM4NUktNEdfbWBrdUkpI2lVLUYxbF5FeWphSz1YM2BUTTVXfVoxQmJRTgp6P3ppdiVE
aiNKMmArMSlLdTNnYl9GYVBGbUYpRVREJFUheXBoNF88eHxDOERxVHFzPkhXe3R0UUQ8eko+Rl5l
SXoKejImeEM/YW1MYlJ7JTVqbmJaWG5kSjdyQyE4QCEjOVJnXyolRmoxVEY2U3tBMyZNd0N+Y1M9
OEp1Q3FgeXhLT3hCCno+MmZDNShmTTRMSzJrK31kfldhI2FoZDBAOGxrUDRQJGB1JDRuZzI8Rj8l
PXFJXmRyO0lQYTVQQUNGSHNfbFR4KQp6eFhacW9uYW8/WlUhQEgwakhedWh0IXZeSUE4S3VSdiVt
fVUrZ1VwcGJzVmYyZjBMRUwjPzA2bGtYSjdNKjdxZEkKeig/UVhGT3clR3R6Wl4pZ3t5IXNJI09H
dUdoMjFqdDR8MSpDPTFQN0k7U0gpN20ma29gempGN2hnIUxnUUB6SmkyCnpfNlcwODxkZG9ZX1oo
SjViKmcqaT5zNTxBYmRQZWJyazl4JTJPfiZLe3I9dUFecjBzSUJRMzwqZ08qdDcxKHU3MQp6O1JQ
Iy0yfUdmPjQ5R0R2dHlFIT94VH56cmpVX1N7JXJpMHs/JkJiPkhJKEs1IUkpVCs0aW8ocVp0NVhM
X2pBWUEKeldWaGJnXzR8bjNfd01fX0Y0UXRrSlpBVE9YSUZ9dGEzK091QUsmLXNaazA/Pmg2TGZH
YCN3SCY5TDxndTVvQDdqCno1YHwoR3YkN3xIV0VyPyQ1SzN4N3NUNVI+Nl5vKT01RE90JFYoRk16
aWdwPF9xS1JpeEFzbEQ7WiEjQG5WIURASAp6UXIxaHlnJDRhSmJuI0Q7NFBMVipvdVdgdkE1PXZz
Mm5tfmwlPj5PSHFYaik+TU47QWNXaD45NVFIR24/SEpJfmAKel45OH5laUcpTjJ3enowMUF8cldA
YTxwUHBLdFcoY2BzJUxie19qaiVpWE9SbE1aV2NCVEVQdlptRk80T2lqU3hNCnpYWl45MWYjOz1J
SjJFMkxNZmloIWFkM3FaY0EwM0NUJFcrZ2dETWl0d1c8U3NFb0NoMnhLZz02Y1FTMEBQSkJJKQp6
ZUMoSTAmQiZga1pSVTdANjZWVSYhUmxGYnoza3pJP0RRJSRBbHJgPUt9X15jNW0oZ0I1NHxoWFVY
dGVgUHZnd0EKengod14wSys8VWxDRVJoJDFeR31RMW5OU1JVXllsKV4kdk5lQXJmfjhfWlFKcWpk
I3x6OHpgKnB1ZEElPGtWSS1gCnpuOFFhOzFaJSFDQCk7QWkoSnNGNUJuP2t0M1djTC1HfShqJFNq
dmp0bEJNK3xUVEZpZDcxQiN7Y09VTENARjNUdQp6bVRPd3tGMihEbiNMN3x5YFYjM0Z6RCNkYCtw
X3BOY1M3NSNGbDE+cDgrS3xvakRiVytyaHBxdm5KYG0zNyZJUlYKekl8emA3NlQ7RjhfWFZHMFoh
R0l+I29YdThCUjsyfmMrfV9PQ0VBajV3VFIwc18jNjt2P3NLYU1LZyl+TkFSQ3lLCnomKkFRZGc2
MkxhRCYldTNaMVh9Kzd2WnNNMVgtLVBgRX52V2AtRHJzVW5ZdHwxYXpsLWtrLSFHTEtnVHJVUHJi
fQp6e3ArdjQtVWZYNXZrRXFsIUxAX2BgSVdJQlNtWSRtTSppVFpYWUg3e2lUX1V8QiElQ0QxMyk+
JDIlcGhwaSN5MikKell4bEtVZHdpZD8hYzVWMDA8JEZSNkNTOzdsfkhfSXxCNGR9OSptYSMhPD5v
a1o8UjQjQXgpcH5YQiFCWVBmSjJjCno4T3UqPEh3TlJiN01BTik7YnBhcTVNSW5PIVZoS0MlZ3tN
UFBnTV9IRElTNmR0UGYtZ29ncE53VVkpPnJtSzZeUAp6aTZRZVZSWW5HNm5JaHxKaEt3bSkmKms2
X1MyfDZyMzlsNkttMGZPWmskcH1xVypAbkJpb2RvTU1HIyt6ZEdSYjAKekczOSt5WVJFKD1XSV88
bDx9b2k7Q1dffm9Yejc/dFIzREckNS1YdkxkN3Z7RTJicFhlKS16WktHKTBeaiQ7NkxACnozdi1i
JXtGLTYpakh7cT4tR3ZieWpoUjNxUypndHU7OEdUe0ZkQ0YyKWl6ek4pLURedjVjI19hZyNlfVhR
WHp5TAp6ZytqbyU/eTEzNFd1WSl1RDE8Zz1obHNlZDd6JmtKRCtRbik+YHtAO0xnNnRObClDflV1
LT01aWooa0ModSg+OFMKejM1Qn05aCE7YmxXbmBuVUQ9JXxKRk8mcE9HeiowaTYrQUE1TGVYdl56
VWImS1JoYkhmZ3A0e0FSKkkrPTREK1FCCnprZWZMdzd7KHpPJmhBJTY+WkwmRXFFcDkyblliV1Ry
XnBvKHA8cXpRI0JlMUdfKDNzfFNyaWkpYSRIUWJGdDM9WAp6VlYzIV9nPHQ4NGBxRVR1MDBSI1dG
JVopfENQdCN8UyZZUFU0NDE0RioqR0E5M0BuMDJYOHNgN2oxOCM3a3BkaHwKejVLJS1fNSVfIyNZ
X2YpTnduTG1HdDxVNCs4ZGl5O3R5dSZ0K1M+RmU8RSZhLXV7Zno+MDwwRm9UZWNZOXZqMDIwCno4
Qm1PaF5jTV9vI0tAMiR1fih9cCZycUxZO2koS1ZNTzxjREhScXx5RkJ3WnhxPUIpKGpGRz8ye1dW
VylJI3dCQgp6WURuKjRNNXohLWs7WXlWOXV2WjI1YHJxOy1VUF8oRHVJbVVyWU9TVlVzQWB2eC1Q
bFdNK2Q0N0whNShAQl55b04KemdySFBgQmBEN1B4NHlHVnBUQGs+cj4mJDI5N040NWN0UXVaa084
V2FEQXQyKGcjO0ZkMVYja0tZM0lOQUtASSlrCnoxZHZyQFVFSEB3WGU0K1Exaj5ZZkd6dTFjT18w
PjhjPyFTVURBQHhKJTBDJHVPamVRMXc4NmJXRTZpQTFHa2EkMwp6cD50dCMpSmF4JDNiXzVEZm1f
bk4qOFpVKWs0VndsS2hGN0lRRU5zSGJUKHduN1BvfDUmLUlOcGhMZCp4T3h1aSYKektQV1dRdElm
X2cqRng5ZSt4N01AKjg8JT9VayE4KmlVQSFsfEtzb2NeTE1nNkg2TlYrMkh2NlZLfCFxdSRNMl9o
CnpxbG9iRXpnMVpvbC0kN1VmRFBXayZWUXtNI3FqYm8rcHtSJUY1KDtibUFnS2ZrQ2M2RSg5QEJm
YEpaYm5CXjA7MAp6R1JsSk9IUVptSjJ0SFUtdkw+YndqOWk2PXc1QlJLYSllfHdYN1dCWiNOfCNF
X2FrZl5rMWU5RDB1bSFSP0NXaWQKejlEfEUrcC1CcTZQMnJYamA+QjJfUShWPlJJcm47fWFla2w2
TWkzSXp5ME9ZWmF1X2ApXz5aQENTd0ttJEFuQCFMCnpMSk1GfCl4M2ZDWXxLU3o3T2UjZSM5KXcr
aVVqVnchQjBuRyhKfUB5QjMzM3VVaFJgQEBGYXNFdzVhNEQ/SU1+Xwp6V259TUsqSlZ5OSEtQDcj
MGZ5VE9XPjheJk1rfn1DNWx7REhQQyZUMmdjcHMrcUJYZXFoJXFWKTgkJF53OGxeT1AKelFBODF7
b3syRnZAa21KVkg2c0t+Pl80PiY5JUtVU0xWQERLXzxHZTZtIVRCZXpwNnlHSCg/cm4yXkx9cks/
UFp7CnpzeVE2PHllMzxhR3JSX18peHl8RUBCP051THkmblM9cShybk9VZXFZQTxgTE5CP3tGPjs3
bio3XmVFUV9zQXo+PQp6PDBrfFo8dkQ4fDFgaDx1UWtMUzlSbE1jZjYjSnx4WXxsUWIjaEd3SmJ1
cmAkY3F3ZzVfeW1ANkVTNmAlZiF1YjEKekBhJXQqYCl8dTt4RX1Jdi1PeFpfYVBjRTdTYSU5aiEz
UUVJd1hLekQmNihPSDFAVkBvQSR2fH5DclNTdEdefCliCnpMVG5XMDxOfVFrJXJLe3pLPklLdW88
ZlZrNHNFSHhQJTJ2bVVKPllNdDBJZVYrSGtjQGR9V0k7TF8/TVZBJnx3Uwp6XlAoa3hfK2NIaDNZ
TXxSZlNeY352YDhCPFdHcmYzMVB2IU5URE42M29jT3Z0VHNQdnNsOWJYYzsxYnVQNE13QEUKekhZ
WmdFZ2JNJjU5KERvKlV8M0h7TzUrOHxXLVMjNTU8QHU+dnRTUFNndGlFeFlgUjNFPXxMV0ZnSTg5
clRUWk9hCnpZOzxAUzBNb1FBUEVyVFk9Q1M/XnNaZUBoZkdiYU9nVXlNOUQrISZucXlYemVzO3hr
bmtnNSQ9cj00RGtWZ3BrYwp6LVhje3B6YTElY3lSeTU4UiY3fHlMUylsfHAmPnN1XzsmZSVsNzMp
IXA+WGUjXylJai1ITnspZHN3T1Y3TVlMK2MKeig1Uz91ckFNNE0qayg3UilTYHZBaVhseVNZfnxr
N18tO1B9ZlB7SnchN2RjPDd8cyREUD1+UmcwWFRwVjY7TVVFCnp8NFFHMFlQU1plUDRWN1VuWUBs
a0hRWVBOZV4kWUZNWVBaPWxoaFNGXzlITnwqaDArYyQxX2ZGSEg9ZXMka29MTAp6MzZIVj1vWTBq
P0t+OHxqYFFLQzw2M2M5UVdiOEZQMkFMdS1yIzhmU2hiKSQxTnVsS0VXMipNTCojcW4tbDlDPkIK
eiopdDB8K0E0I3t2UGIkbDc1dD45NEx8QihibVNgPiR5aWxxMlNuPTZ2YTFZNzNWZWohO3xsSSV2
RVc4RikrOVRHCnpORTBpI1k0e3kyeERfc1BFTz5AVVgqNjdsJmxHTGJpb2s9T2A+PTdyMDImI0A0
S0JxYVloMm5tem0oYztjO248VQp6RT0+JVY7LThwcGdHLX1oYWNUUEl4SE44WHNqP35jeEJPdDxU
OSU4eUYrcCNIT0pte0V4Vz1XWG92NHxgYUF7QnkKeiFhKlFReE9CeFpVdyNQQSg3elgpQSgwWExD
QDcyODQ5bk88Q2cyRnFxPCk/M3F0S3BPRUMoSCtYLWlJN2h+K2Q+CnpySG1lM2BKej5LPD9XJGI/
QU9Pd2NqUH15ODx3ZG9MQTFqeCU1citSSEpobClOREdwUHZLJnNiUmFzQSY5OHNxQAp6X0t2MndJ
dEJZajx1bzFHZHNwbH1ZYGQ/N1U3ZlMmOz1mRTRycz08MEwoZjslTGJYZXZPWW0hcGs9fDR5SSpZ
RU0KekhkTHBfYmctIUNaaEAkQVFGMWhvS2gkbCh6N1hPNnVWOVJFKFdRZFgwYDc4U0VoPGp+VVJG
WkUycmRmdHRJVGozCno0XyhRTikxaVMhRF5DdkVRZmJsPSRkSDU1Mm1ZbENNKTFUaCgrfFZ2WDZf
MDhsWTReNjc0JitHbz57WCNzfkVBUAp6K0IyO2tZNGxVaUgleEktZUg0cHwzbCpjRy1rRTJ7Y3hF
Szw1YGJDVkFGXyYoVV5vUV5UZzZDO1gmdGtXMXlnd0AKej11a04+YztAb00xYlZBN3IoKzRxMz1v
K21EfVRYeT09ZCZGakNPbmRqNnQmP2tWWlF9RjEyVDdee3ckMElyVE1SCnpAZngxVlBtZWQrZjZi
fGpTWFlNcCg+JkJ2VV54dCF4LVVITTArcT1zWXtNZkNGTSNXZHIreys3NlhWN2NnRmk+WAp6Nktq
YF9nZn1CUihOQDN7Rn4zazFMTChBMlF5MWhyMHllP3pwYHMqMSkpZ2d0emlkVUJeWjF5dzwzZjN0
PVlSOUgKemc5OF4wPzIjKnxnPWNCdEdjZ3ZWUHdjNTUqTF5XT0M7YFMqYm4tej0hZVgrNUZZSCM3
TWVTSXdadGE+X0gzUnZTCnpQTlZoTEBUPyphYjR4QGswQCswfnV7dUkjT2J4c3diVHkhZ003LS0w
I1JuY2FAQ1dkKkxQajtiVjAlR1F1RzJidAp6cDI7dkMrZmBVdVFETylCKWA9WSQwSyR+cmdUUWct
VENhTk9mbVIhZWd2a3FHJktoNSlod3g/QTtMQWYpayQzRUkKemp2LUFSTD9wOHI0UVUhbzMoZGY/
V2lVKmNGb1lSPFBPYHxPWTZ6anV6Tjg5MERwM3VqRGomMllBYllKTmdZWHEqCno2WkNSYjdFb3U/
QmhBIUh3UDg4S2E+PTE9MzNWRm9JXzgzXnFhWHlxSkp+NUpSRkJqSSk/OEVmNjRhXnQ4ITBJKwp6
aE4zLUNpQjVHaEJrTVY4KVkrRk5IUU8xMmQ7UEZUbCM4PWckUWdCcWJjUSpQN3EqXlpeQER8KWVk
LTdSKzd8JEkKemh4P19BYTs0YCNAMDtwYnlOdEx+Xm8zaiQmKm94OTFvaE0lYVJhYXdmcjZ1T28+
cjI0OWNDN1hvdk1jfG51WXs4CnpIe1V9PyUkRkFKYHN0dXF6NkMjZDY1MTRYanQzXyFDUWwwcDdC
ajAmOVJ2Xj5TOU5pUUFHSmVhRXQ4IzliO0t6UAp6SXNnTUoxTXEtKTB2cmxFcl5pIXd4dGd2UXUw
dy1JbGd3KHBXKWY7V3YpMV99Y3hJXmVMaFBWfXFGMGN0eXJiPkkKeiZWaEEhK2oyZlltOT14YCZT
JUJsVndUM1c8JCYkUjBaQXcjV1RDKkQqI3d4RzVEPEp5TnRfMjxpfV4talNyeDQ7Cnp3SmpUU2o0
LURyX1I4X3JFS1gjaVh9Izx+dDd4cTEhOEghWClxK04oMHxoakw2PyFeeHhXS2J2Vyl+JlZoKEx2
Xwp6bk4xeVlMOEw4MCo0Wk5vNj9yRDIjcEBjNCVXMGxRRjNiI1RSQnR1NG4xfWhBQXUkK2ozT3pO
WWZhRlY2bztaKj0KenFOWWxObXQpSTN4bW8+P3ApcW9+OEJkeEEmfmRvVjFKSCg/KEw5Z25uI1cr
MF98OzU/MW5xalIhKHw+ckREJE1JCnpDRDl6Tl42OzMxNUVLJDdJSjx1NG5rQER3RWJ3M3JFZ0Ry
NG87blJ8ZiswNDIxKSRIb3hUQlM/VVMkeGdza25hUAp6VG9XNlcxMz1BY0sjdCY+SWRVWjhhSzBE
Pi0memVKSnQ8YSZPPmgkSTQ4T24tITs9UFU4I1dKOHFoc3FqJUZzZygKelFjMChXPmJsaEdJeXhP
az5wRS1yQEpMfD45NFR4QzlGcVZYWk5xeSZieHt8NEhCNzNeYyppYWI0XmtvUEF1OSV3CnpGNSR1
UzJwOzZeS05UJT1KamV8SjUyfUdoTWx3N3x1NUl3KHZRI1lyMCVqenBidkJqYFpQVEh9NzkyP1Jr
PithZgp6OzZrTlZfaTFMYzcjPDhWNTl8ZyFuOEI7NmgjQ18mRzRSTmUwNDxRO1BnVUAlRHtLeWhK
KzVXYG05XjVAOHlKQlEKekxKZWpOP3JWQEBLNn1JTVUrZmgtZHpWd3JzbElQYEMkKH1rVkw1UTBL
Jjxoe2lJVGtaMlFuUWJrTkRvOD9mMkw2CnphfDlQVGFXc2ZPIUclYU1oRCk1Yjl3ajRTQmhVWlgt
dXo1P3hyPH5QaGRTYH1YcVZZenxGP1ByR20jbUdtd0psbQp6TiN7NXNCIV93e148TTw4YDNGd1Q7
eilLbXI3LWFXYCgyKy0lMHpiO0VxbSFNbV5BdVA4RDwtdjVDJGRMTW0tdj8KenNSaEdeNDY0blV1
cW5ka2VBcndGbn5Qenk1akliUiV9MnVLcW1jT2tBc0wtVU1EfXF4cX47VjBYPy1jVFlpWVE0Cnpn
Z3NqTGRIIz1qRkZ3K0hqKT4mb2Z4VlRBU1pSKUAlMjcoajV9Wjw0QjFJJi1ndX1WaVZnejU8JFJm
SnYrKzJiVAp6UlYkckleXm1+bypGXkcrT2BjZ0dJIUkwLSNPU3QxPnBefjsxNDJsST8xOH5TbmM1
cUtXKjIqPmYtS292NThgQysKek9wcXZoI2lkdzZXJChQYnFeVWdgKC1KTHY3Y2EkPEVfKWw3VmhO
Yk5Db2FYM0Y/JTFtNmlkd1BAblkmcygob2dSCnpEXm1yaiM8ZiUlOyFXc2BMaVJSRC1BRz1+aD5n
PWBhM2RsSzN3PWFkPWMwP0JibEFUM2t8JiljRSZWTV82JjZoRAp6MSlEantQLWApcGVDWiRCRTh5
Sjk5TVNISCRtTChSY1Nib3VUaG1rK1VhIW81Jig2b1oobVRNPF43KE5UamBQM1EKemZWVDdCVSYt
VEZHdntBaCRzO3hnLThfblRFWXs2ZUJqO1NxLX1sPTVxfFNkZ1Q+MWZOeHZOSmRqI28/Yl9fZnNp
CnpgQiNgS3l9Tm01NnVxazU1NCFMek1ZUX1HTVpDS0YxeDR+a0E1V3hqQFpDaCNkQHw5aHpte2so
ZWtqcGR7Nj1EQgp6PkM9WGRadkFDTXpWdU48Wn5pPyplYCktcylyRlYoKlhFeEk0M14mREtYS2V3
MXJOPT4wNjRrJDNCc3d4dU5GPmMKeiFfa1dgPyFCY295dCNSNj1rOG5pO141eHFvJVFCfWZyc0Ro
JVkjUSZfMDdpZ2BQKTBnVGlaSyhxZXRoKnBQJF5HCnpqP05lKGM3MU8mK0lxfGBodEVXWWxoTzJU
TT9YM15keSpPTlA1RWVIXkxmNUgqP3dYOF97SWx8ez9lKGtKQUQ0Nwp6SjlsMGxlKDF2Kyltb3Ju
PWNWYjttT0xsSD4hWHF2WmZ9cHlZeUkkemk0TmJjWWRiSVMpZGJoeXA9JndfKldjTkUKenlLJiht
JldGITk+UHdeTi1fP0JaQCRUXlQjQ3NNJEAzPEpnKFJncTMoWj42bHVRQUBnQGNxUWIoJnJQOCQy
VGBWCko1WmA/S2UqczgxVGpCciEKCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBh
L0pTVGVzdHMvd2FzbS9zdHJlc3Mvc3RyZWFtaW5nLWJhc2ljLmpzIGIvSlNUZXN0cy93YXNtL3N0
cmVzcy9zdHJlYW1pbmctYmFzaWMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjNmYmMyNDc5ZjcyMTYzZGZhZDMy
MTA0MDU2YmEyNzQzNTkyMzVkYQotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9zdHJl
c3Mvc3RyZWFtaW5nLWJhc2ljLmpzCkBAIC0wLDAgKzEsMTggQEAKK2ltcG9ydCAqIGFzIGFzc2Vy
dCBmcm9tICcuLi9hc3NlcnQuanMnOworCit2YXIgZGF0YSA9IHJlYWQoIi4vbmFtZVNlY3Rpb24u
d2FzbSIsICJiaW5hcnkiKTsKKworZnVuY3Rpb24gY2hlY2soc3RlcCkKK3sKKyAgICB2YXIgcGFy
c2VyID0gJHZtLmNyZWF0ZVdhc21TdHJlYW1pbmdQYXJzZXIoKTsKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGRhdGEuYnl0ZUxlbmd0aDsgaSArPSBzdGVwKSB7CisgICAgICAgIHBhcnNlci5hZGRC
eXRlcyhkYXRhLnN1YmFycmF5KGksIGkgKyBNYXRoLm1pbihzdGVwLCBkYXRhLmJ5dGVMZW5ndGgg
LSBpKSkpOworICAgIH0KKyAgICBhc3NlcnQuZXEocGFyc2VyLmZpbmFsaXplKCksIDcpOworfQor
Citmb3IgKHZhciBpID0gMDsgaSA8IDEwOyArK2kpCisgICAgY2hlY2soaSArIDEpOworY2hlY2so
MTAwKTsKK2NoZWNrKDEwMDApOworY2hlY2soMjAwMCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>348146</attachid>
            <date>2018-08-27 09:05:44 -0700</date>
            <delta_ts>2018-08-27 09:07:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-188943-20180828010542.patch</filename>
            <type>text/plain</type>
            <size>170458</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM1MzU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
ZDJhYzBiZmEwNjcxODA3MDdlMGE1YmI1YWFlNzRlZjJlYjNhZTYwLi4wYjUzMWFiZDhmZmM4Yjg2
MjQ0ZTYxODQzZDUxMmIxZmU1YWFhZDgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNjUgQEAKKzIwMTgtMDgtMjcgIFl1c3VrZSBTdXp1a2kgIDx5dXN1a2VzdXp1a2lAc2xv
d3N0YXJ0Lm9yZz4KKworICAgICAgICBbV2ViQXNzZW1ibHldIFBhcnNlIHdhc20gbW9kdWxlcyBp
biBhIHN0cmVhbWluZyBmYXNoaW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xODg5NDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgV2FzbTo6U3RyZWFtaW5nUGFyc2VyLCB3aGlj
aCBwYXJzZXMgd2FzbSBiaW5hcnkgaW4gYSBzdHJlYW1pbmcgZmFzaGlvbi4KKyAgICAgICAgQ3Vy
cmVudGx5LCB0aGlzIFN0cmVhbWluZ1BhcnNlciBpcyBub3QgZW5hYmxlZCBhbmQgaW50ZWdyYXRl
ZC4gSW4gc3Vic2VxdWVudCBwYXRjaGVzLAorICAgICAgICB3ZSBzdGFydCBpbnRlZ3JhdGluZyBp
dCBpbnRvIEJCUVBsYW4gYW5kIGRyb3BwaW5nIHRoZSBvbGQgTW9kdWxlUGFyc2VyLgorCisgICAg
ICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiB0b29scy9KU0RvbGxhclZNLmNwcDoKKyAgICAgICAg
KFdURjo6V2FzbVN0cmVhbWluZ1BhcnNlcjo6V2FzbVN0cmVhbWluZ1BhcnNlcik6CisgICAgICAg
IChXVEY6Oldhc21TdHJlYW1pbmdQYXJzZXI6OmNyZWF0ZSk6CisgICAgICAgIChXVEY6Oldhc21T
dHJlYW1pbmdQYXJzZXI6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXVEY6Oldhc21TdHJl
YW1pbmdQYXJzZXI6OnN0cmVhbWluZ1BhcnNlcik6CisgICAgICAgIChXVEY6Oldhc21TdHJlYW1p
bmdQYXJzZXI6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdURjo6ZnVuY3Rpb25XYXNtU3Ry
ZWFtaW5nUGFyc2VyQWRkQnl0ZXMpOgorICAgICAgICAoV1RGOjpmdW5jdGlvbldhc21TdHJlYW1p
bmdQYXJzZXJGaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uQ3JlYXRlV2FzbVN0cmVh
bWluZ1BhcnNlcik6CisgICAgICAgIChKU0M6OkpTRG9sbGFyVk06OmZpbmlzaENyZWF0aW9uKToK
KyAgICAgICAgVGhpcyBvYmplY3QgaXMgaW50cm9kdWNlZCBmb3IgdGVzdGluZyBwdXJwb3NlLiBB
ZGRlZCBuZXcgc3RyZXNzIHRlc3QgdXNlcyB0aGlzIGludGVyZmFjZQorICAgICAgICB0byB0ZXN0
IHN0cmVhbWluZyBwYXJzZXIgaW4gdGhlIEpTQyBzaGVsbC4KKworICAgICAgICAqIHdhc20vV2Fz
bUJCUVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpCQlFQbGFuKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSk6CisgICAg
ICAgIChKU0M6Oldhc206OkJCUVBsYW46OnByZXBhcmUpOgorICAgICAgICAoSlNDOjpXYXNtOjpC
QlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6
Y29tcGxldGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjp3b3JrKToKKyAgICAgICAg
KiB3YXNtL1dhc21CQlFQbGFuLmg6CisgICAgICAgIEJCUVBsYW4gaGFzIG1fc291cmNlLCBidXQg
b25jZSBNb2R1bGVJbmZvcm1hdGlvbiBpcyBwYXJzZWQsIGl0IGlzIG5vIGxvbmdlciBuZWNlc3Nh
cnkuCisgICAgICAgIEluIHN1YnNlcXVlbnQgcGF0Y2hlcywgd2Ugd2lsbCByZW1vdmUgdGhpcywg
YW5kIHN0cmVhbSB0aGUgZGF0YSBpbnRvIHRoZSBCQlFQbGFuLgorCisgICAgICAgICogd2FzbS9X
YXNtRm9ybWF0Lmg6CisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbjo6TW9kdWxlSW5mb3JtYXRpb24p
OgorICAgICAgICAqIHdhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmg6CisgICAgICAgIE9uZSBv
ZiB0aGUgbGFyZ2VzdCBjaGFuZ2UgaW4gdGhpcyBwYXRjaCBpcyB0aGF0IE1vZHVsZUluZm9ybWF0
aW9uIG5vIGxvbmdlciBob2xkcyBzb3VyY2UgYnl0ZXMsCisgICAgICAgIHNpbmNlIHNvdXJjZSBi
eXRlcyBjYW4gYmUgYWRkZWQgaW4gYSBzdHJlYW1pbmcgZmFzaGlvbi4gSW5zdGVhZCBvZiBob2xk
aW5nIGFsbCB0aGUgc291cmNlIGJ5dGVzCisgICAgICAgIGluIE1vZHVsZUluZm9ybWF0aW9uLCBl
YWNoIGZ1bmN0aW9uIChNb2R1bGVJbmZvcm1hdGlvbjo6ZnVuY3Rpb25zLCBGdW5jdGlvbkRhdGEp
IHNob3VsZCBoYXZlCisgICAgICAgIFZlY3Rvcjx1aW50OF90PiBmb3IgaXRzIGRhdGEuIFRoaXMg
ZGF0YSBpcyBldmVudHVhbGx5IGZpbGxlZCBieSBTdHJlYW1pbmdQYXJzZXIsIGFuZCBjb21waWxp
bmcKKyAgICAgICAgYSBmdW5jdGlvbiB3aXRoIHRoaXMgZGF0YSBjYW4gYmUgZG9uZSBjb25jdXJy
ZW50bHkgd2l0aCBTdHJlYW1pbmdQYXJzZXIuCisKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxl
SW5mb3JtYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZUluZm9ybWF0
aW9uOjptZW1vcnlDb3VudCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZUluZm9y
bWF0aW9uOjp0YWJsZUNvdW50IGNvbnN0KToKKyAgICAgICAgbWVtb3J5Q291bnQgYW5kIHRhYmxl
Q291bnQgc2hvdWxkIGJlIHJlY29yZWRlZCBpbiBNb2R1bGVJbmZvcm1hdGlvbi4KKworICAgICAg
ICAqIHdhc20vV2FzbU1vZHVsZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVs
ZVBhcnNlcjo6cGFyc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjptYWtlSTMySW5pdEV4cHIpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlVHlwZSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VJbXBvcnQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb24p
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlUmVzaXph
YmxlTGltaXRzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpw
YXJzZVRhYmxlSGVscGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFy
c2VyOjpwYXJzZVRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFy
c2VyOjpwYXJzZU1lbW9yeUhlbHBlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206Ok1v
ZHVsZVBhcnNlcjo6cGFyc2VNZW1vcnkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpN
b2R1bGVQYXJzZXI6OnBhcnNlR2xvYmFsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6
TW9kdWxlUGFyc2VyOjpwYXJzZUV4cG9ydCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206
Ok1vZHVsZVBhcnNlcjo6cGFyc2VTdGFydCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206
Ok1vZHVsZVBhcnNlcjo6cGFyc2VFbGVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2Fz
bTo6TW9kdWxlUGFyc2VyOjpwYXJzZUNvZGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNt
OjpNb2R1bGVQYXJzZXI6OnBhcnNlSW5pdEV4cHIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpX
YXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlR2xvYmFsVHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZUN1c3RvbSk6IERlbGV0ZWQuCisgICAgICAgIEV4
dHJhY3Qgc2VjdGlvbiBwYXJzaW5nIGNvZGUgb3V0IGZyb20gTW9kdWxlUGFyc2VyLiBXZSBjcmVh
dGUgU2VjdGlvblBhcnNlciBhbmQgTW9kdWxlUGFyc2VyIHVzZXMgaXQuCisgICAgICAgIFNlY3Rp
b25QYXJzZXIgaXMgYWxzbyB1c2VkIGJ5IFN0cmVhbWluZ1BhcnNlci4KKworICAgICAgICAqIHdh
c20vV2FzbU1vZHVsZVBhcnNlci5oOgorICAgICAgICAqIHdhc20vV2FzbU5hbWVTZWN0aW9uLmg6
CisgICAgICAgIChKU0M6Oldhc206Ok5hbWVTZWN0aW9uOjpOYW1lU2VjdGlvbik6CisgICAgICAg
IChKU0M6Oldhc206Ok5hbWVTZWN0aW9uOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpO
YW1lU2VjdGlvbjo6c2V0SGFzaCk6CisgICAgICAgIEhhc2ggY2FsY3VsYXRpb24gaXMgZGVmZXJy
ZWQgc2luY2UgYWxsIHRoZSBzb3VyY2UgaXMgbm90IGF2YWlsYWJsZSBpbiBzdHJlYW1pbmcgcGFy
c2luZy4KKworICAgICAgICAqIHdhc20vV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmNwcDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6TmFtZVNlY3Rpb25QYXJzZXI6OnBhcnNlKToKKyAgICAgICAgKiB3YXNt
L1dhc21OYW1lU2VjdGlvblBhcnNlci5oOgorICAgICAgICBVc2UgUmVmPE5hbWVTZWN0aW9uPi4K
KworICAgICAgICAqIHdhc20vV2FzbU9NR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpP
TUdQbGFuOjp3b3JrKToKKyAgICAgICAgV2FzbTo6UGxhbiBubyBsb25nZXIgaGF2ZSBtX3NvdXJj
ZSBzaW5jZSBkYXRhIHdpbGwgYmUgZXZlbnR1YWxseSBmaWxsZWQgaW4gYSBzdHJlYW1pbmcgZmFz
aGlvbi4KKyAgICAgICAgT01HUGxhbiBjYW4gZ2V0IGRhdGEgb2YgdGhlIGZ1bmN0aW9uIGJ5IHVz
aW5nIE1vZHVsZUluZm9ybWF0aW9uOjpmdW5jdGlvbnMuCisKKyAgICAgICAgKiB3YXNtL1dhc21Q
YXJzZXIuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGFyc2VyOjpzb3VyY2UgY29uc3QpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpQYXJzZXI6Omxlbmd0aCBjb25zdCk6CisgICAgICAgIChKU0M6Oldh
c206OlBhcnNlcjo6b2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGFyc2VyOjpm
YWlsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6bWFrZUkzMkluaXRFeHByKToKKyAgICAg
ICAgKiB3YXNtL1dhc21QbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6UGxhbik6
CisgICAgICAgIFdhc206OlBsYW4gc2hvdWxkIG5vdCBoYXZlIGFsbCB0aGUgc291cmNlIGFwcmlv
cmkuIFN0cmVhbWVkIGRhdGEgd2lsbCBiZSBwdW1wZWQgZnJvbSB0aGUgcHJvdmlkZXIuCisKKyAg
ICAgICAgKiB3YXNtL1dhc21QbGFuLmg6CisgICAgICAgICogd2FzbS9XYXNtU2VjdGlvblBhcnNl
ci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQ
YXJzZXIuY3BwLgorICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZVR5cGUp
OgorICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZUltcG9ydCk6CisgICAg
ICAgIChKU0M6Oldhc206OlNlY3Rpb25QYXJzZXI6OnBhcnNlRnVuY3Rpb24pOgorICAgICAgICAo
SlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZVJlc2l6YWJsZUxpbWl0cyk6CisgICAgICAg
IChKU0M6Oldhc206OlNlY3Rpb25QYXJzZXI6OnBhcnNlVGFibGVIZWxwZXIpOgorICAgICAgICAo
SlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZVRhYmxlKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6U2VjdGlvblBhcnNlcjo6cGFyc2VNZW1vcnlIZWxwZXIpOgorICAgICAgICAoSlNDOjpXYXNt
OjpTZWN0aW9uUGFyc2VyOjpwYXJzZU1lbW9yeSk6CisgICAgICAgIChKU0M6Oldhc206OlNlY3Rp
b25QYXJzZXI6OnBhcnNlR2xvYmFsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNl
cjo6cGFyc2VFeHBvcnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJz
ZVN0YXJ0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VFbGVtZW50
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VDb2RlKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VJbml0RXhwcik6CisgICAgICAgIChK
U0M6Oldhc206OlNlY3Rpb25QYXJzZXI6OnBhcnNlR2xvYmFsVHlwZSk6CisgICAgICAgIChKU0M6
Oldhc206OlNlY3Rpb25QYXJzZXI6OnBhcnNlRGF0YSk6CisgICAgICAgIChKU0M6Oldhc206OlNl
Y3Rpb25QYXJzZXI6OnBhcnNlQ3VzdG9tKToKKyAgICAgICAgKiB3YXNtL1dhc21TZWN0aW9uUGFy
c2VyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQ
YXJzZXIuaC4KKyAgICAgICAgU2VjdGlvblBhcnNlciBpcyBleHRyYWN0ZWQgZnJvbSBNb2R1bGVQ
YXJzZXIuIEFuZCBpdCBpcyB1c2VkIGJvdGggdGhlIG9sZCAoY3VycmVudGx5IHdvcmtpbmcpIE1v
ZHVsZVBhcnNlcgorICAgICAgICBhbmQgdGhlIG5ldyBTdHJlYW1pbmdQYXJzZXIuCisKKyAgICAg
ICAgKiB3YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
V2FzbTo6cGFyc2VVSW50Nyk6CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6
ZmFpbCk6CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6U3RyZWFtaW5nUGFy
c2VyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U3RyZWFtaW5nUGFyc2VyOjpwYXJzZU1vZHVsZUhl
YWRlcik6CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6cGFyc2VTZWN0aW9u
SGVhZGVyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U3RyZWFtaW5nUGFyc2VyOjpwYXJzZVNlY3Rp
b25TaXplKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U3RyZWFtaW5nUGFyc2VyOjpwYXJzZUNvZGVT
ZWN0aW9uU2l6ZSk6CisgICAgICAgIENvZGUgc2VjdGlvbiBpbiBXYXNtIGJpbmFyeSBpcyBzcGVj
aWFsbHkgaGFuZGxlZCBjb21wYXJlZCB3aXRoIHRoZSBvdGhlciBzZWN0aW9ucyBzaW5jZSBpdCBp
bmNsdWRlcworICAgICAgICBidW5jaCBvZiBmdW5jdGlvbnMuIFN0cmVhbWluZ1BhcnNlciBleHRy
YWN0cyBlYWNoIGZ1bmN0aW9uIGluIGEgc3RyZWFtaW5nIGZhc2hpb24gYW5kIGVuYWJsZSBzdHJl
YW1pbmcKKyAgICAgICAgdmFsaWRhdGlvbiAvIGNvbXBpbGF0aW9uIG9mIFdhc20gZnVuY3Rpb25z
LgorCisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6cGFyc2VGdW5jdGlvbkhl
YWRlcik6CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6cGFyc2VGdW5jdGlv
bkJvZHkpOgorICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OnBhcnNlU2VjdGlv
bkJvZHkpOgorICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmNvbnN1bWUpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmNvbnN1bWVWYXJVSW50MzIpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6U3RyZWFtaW5nUGFyc2VyOjpmYWlsT25TdGF0ZSk6CisgICAgICAgIChKU0M6
Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6ZmluYWxpemUpOgorICAgICAgICAqIHdhc20vV2FzbVN0
cmVhbWluZ1BhcnNlci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6U3RyZWFtaW5nUGFy
c2VyOjphZGRCeXRlcyk6CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6ZXJy
b3JNZXNzYWdlIGNvbnN0KToKKyAgICAgICAgVGhpcyBpcyBvdXIgbmV3IFN0cmVhbWluZ1BhcnNl
ciBpbXBsZW1lbnRhdGlvbi4gU3RyZWFtaW5nUGFyc2VyOjpjb25zdW1lWFhYIGZ1bmN0aW9ucyBn
ZXQgZGF0YSwgYW5kCisgICAgICAgIFN0cmVhbWluZ1BhcnNlcjo6cGFyc2VYWFggZnVuY3Rpb25z
IHBhcnNlIGNvbnN1bWVkIGRhdGEuIFRoZSB1c2VyIG9mIFN0cmVhbWluZ1BhcnNlciBjYWxscwor
ICAgICAgICBTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKCkgdG8gcHVtcCB0aGUgYnl0ZXMgc3Ry
ZWFtIGludG8gdGhlIHBhcnNlci4gQW5kIG9uY2UgYWxsIHRoZSBkYXRhIGlzIHB1bXBlZCwKKyAg
ICAgICAgdGhlIHVzZXIgY2FsbHMgU3RyZWFtaW5nUGFyc2VyOjpmaW5hbGl6ZS4gU3RyZWFtaW5n
UGFyc2VyIGlzIGEgc3RhdGUgbWFjaGluZSB3aGljaCBmZWVkcyB0aGUgaW5jb21pbmcKKyAgICAg
ICAgYnl0ZSBzdHJlYW0uCisKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUu
Y3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpzb3VyY2UgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICBBbGwgdGhlIHNvdXJjZSBzaG91bGQgbm90IGJlIGhlbGQuCisKKyAg
ICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaDoKKyAgICAgICAgKiB3YXNtL2pz
L1dlYkFzc2VtYmx5UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlWYWxp
ZGF0ZUZ1bmMpOgorCiAyMDE4LTA4LTI0ICBZdXN1a2UgU3V6dWtpICA8eXVzdWtlc3V6dWtpQHNs
b3dzdGFydC5vcmc+CiAKICAgICAgICAgW0pTQ10gQXJyYXkucHJvdG90eXBlLnJldmVyc2UgbW9k
aWZpZXMgSlNJbW11dGFibGVCdXR0ZXJmbHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdl
TG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggYzJmMWVmYTE5ZmE1ODQ0NmI4MGQ2MjQ0
YmRiZDk1YWVkOTFiYWNhNS4uNWJhZjA1M2RiMGRkZjczNjgwYmM1YzZiMjk3NWU2ZDY1OTlkZGEx
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxOC0wOC0yNyAgWXVzdWtlIFN1enVraSAgPHl1c3Vr
ZXN1enVraUBzbG93c3RhcnQub3JnPgorCisgICAgICAgIFtXZWJBc3NlbWJseV0gUGFyc2Ugd2Fz
bSBtb2R1bGVzIGluIGEgc3RyZWFtaW5nIGZhc2hpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4ODk0MworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBtYXhCeXRlTGVuZ3RoIGZ1bmN0aW9uIHRvIGdl
dCB0aGUgbWF4aW11bSBzaXplIGZvciBULgorCisgICAgICAgICogd3RmL0xFQkRlY29kZXIuaDoK
KyAgICAgICAgKFdURjo6TEVCRGVjb2Rlcjo6bWF4Qnl0ZUxlbmd0aCk6CisgICAgICAgIChXVEY6
OkxFQkRlY29kZXI6OmRlY29kZVVJbnQpOgorICAgICAgICAoV1RGOjpMRUJEZWNvZGVyOjpkZWNv
ZGVJbnQpOgorCiAyMDE4LTA4LTI1ICBZdXN1a2UgU3V6dWtpICA8eXVzdWtlc3V6dWtpQHNsb3dz
dGFydC5vcmc+CiAKICAgICAgICAgU2hyaW5rIHNpemUgb2YgWE1MSHR0cFJlcXVlc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMTdhNDhiZGE2ZDRiZTM5N2IwOGU5NDZjYmQ0ODYx
MDY3NDc5OWRhZS4uNDI2ZDE5ZGNlOTU0ODJlODUxYmZlOWM5Mzg3ZDJjZjYzM2Y1NWQ0OCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE3MzQsNiArMTczNCw4IEBACiAJCUUzOTNB
REQ4MUZFNzAyRDAwMDIyRDY4MSAvKiBXZWFrTWFwSW1wbElubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzOTNBREQ3MUZFNzAyQ0MwMDIyRDY4
MSAvKiBXZWFrTWFwSW1wbElubGluZXMuaCAqLzsgfTsKIAkJRTM5RDQ1RjUxRDM5MDA1NjAwQjNC
Mzc3IC8qIEludGVycHJldGVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTM5RDlEODQxRDM5MDAwNjAwNjY3MjgyIC8qIEludGVycHJldGVy
SW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUUzOURBNEE3MUI3RThCN0MwMDg0RjMzQSAvKiBKU01vZHVsZVJlY29yZC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM5REE0QTUxQjdFOEI3QzAw
ODRGMzNBIC8qIEpTTW9kdWxlUmVjb3JkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJRTNBMDUzMUEyMTM0MkI2ODAwMjJFQzE0IC8qIFdhc21TdHJl
YW1pbmdQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUzQTA1MzE2MjEzNDJCNjYwMDIyRUMxNCAvKiBXYXNtU3RyZWFtaW5nUGFyc2VyLmggKi87
IH07CisJCUUzQTA1MzFDMjEzNDJCNjgwMDIyRUMxNCAvKiBXYXNtU2VjdGlvblBhcnNlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTNBMDUzMTgyMTM0
MkI2NzAwMjJFQzE0IC8qIFdhc21TZWN0aW9uUGFyc2VyLmggKi87IH07CiAJCUUzQTMyQkM3MUZD
ODMxNDcwMDdEN0U3NiAvKiBXZWFrTWFwSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTNBMzJCQzYxRkM4MzEyRTAwN0Q3RTc2IC8qIFdlYWtNYXBJ
bXBsLmggKi87IH07CiAJCUUzQTQyMTQzMUQ2RjU4OTMwMDA3QzYxNyAvKiBQcmVjaXNlSnVtcFRh
cmdldHNJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFM0E0MjE0MjFENkY1ODhGMDAwN0M2MTcgLyogUHJlY2lzZUp1bXBUYXJnZXRzSW5saW5l
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUz
QkZEMEJDMURBRjgwOEUwMDY1REVBMiAvKiBBY2Nlc3NDYXNlU25pcHBldFBhcmFtcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTNCRkQwQkExREFGODA3
QzAwNjVERUEyIC8qIEFjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmggKi87IH07CkBAIC00NjIyLDYg
KzQ2MjQsMTAgQEAKIAkJRTM5RDlEODQxRDM5MDAwNjAwNjY3MjgyIC8qIEludGVycHJldGVySW5s
aW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlcnByZXRlcklubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM5REE0QTQxQjdFOEI3QzAwODRG
MzNBIC8qIEpTTW9kdWxlUmVjb3JkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTTW9kdWxlUmVjb3JkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTM5REE0QTUxQjdFOEI3QzAwODRGMzNBIC8qIEpTTW9kdWxlUmVjb3JkLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTW9kdWxlUmVjb3JkLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUUzQTA1MzE2MjEzNDJCNjYwMDIyRUMxNCAvKiBXYXNtU3RyZWFtaW5nUGFy
c2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21TdHJlYW1pbmdQYXJz
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTNBMDUzMTcyMTM0MkI2NjAwMjJF
QzE0IC8qIFdhc21TZWN0aW9uUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdhc21TZWN0aW9uUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRTNBMDUzMTgyMTM0MkI2NzAwMjJFQzE0IC8qIFdhc21TZWN0aW9uUGFyc2VyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21TZWN0aW9uUGFyc2VyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzQTA1MzE5MjEzNDJCNjcwMDIyRUMxNCAvKiBXYXNt
U3RyZWFtaW5nUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdhc21TdHJlYW1pbmdQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
M0EzMkJDNTFGQzgzMTJEMDA3RDdFNzYgLyogV2Vha01hcEltcGwuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Vha01hcEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFM0EzMkJDNjFGQzgzMTJFMDA3RDdFNzYgLyogV2Vha01hcEltcGwuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vha01hcEltcGwuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTNBNDIxNDIxRDZGNTg4RjAwMDdDNjE3IC8qIFByZWNpc2VK
dW1wVGFyZ2V0c0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJl
Y2lzZUp1bXBUYXJnZXRzSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
NjM0OCw5ICs2MzU0LDEzIEBACiAJCQkJNTNGNDBFOEMxRDU5MDFGMjAwOTlBMUI2IC8qIFdhc21Q
YXJzZXIuaCAqLywKIAkJCQk1MzEzNzRCRTFENUNFOTUwMDBBRjdBMEIgLyogV2FzbVBsYW4uY3Bw
ICovLAogCQkJCTUzMTM3NEJDMUQ1Q0U2NzYwMEFGN0EwQiAvKiBXYXNtUGxhbi5oICovLAorCQkJ
CUUzQTA1MzE3MjEzNDJCNjYwMDIyRUMxNCAvKiBXYXNtU2VjdGlvblBhcnNlci5jcHAgKi8sCisJ
CQkJRTNBMDUzMTgyMTM0MkI2NzAwMjJFQzE0IC8qIFdhc21TZWN0aW9uUGFyc2VyLmggKi8sCiAJ
CQkJNTNGNDBFODQxRDU4Rjk3NzAwOTlBMUI2IC8qIFdhc21TZWN0aW9ucy5oICovLAogCQkJCUFE
NzQzOEJFMUUwNDU3OTIwMEZEMEMyQSAvKiBXYXNtU2lnbmF0dXJlLmNwcCAqLywKIAkJCQlBRDc0
MzhCRjFFMDQ1NzkyMDBGRDBDMkEgLyogV2FzbVNpZ25hdHVyZS5oICovLAorCQkJCUUzQTA1MzE5
MjEzNDJCNjcwMDIyRUMxNCAvKiBXYXNtU3RyZWFtaW5nUGFyc2VyLmNwcCAqLywKKwkJCQlFM0Ew
NTMxNjIxMzQyQjY2MDAyMkVDMTQgLyogV2FzbVN0cmVhbWluZ1BhcnNlci5oICovLAogCQkJCUFE
NUMzNkUzMUY2OUVDOEIwMDBCQ0FBRiAvKiBXYXNtVGFibGUuY3BwICovLAogCQkJCUFENUMzNkU0
MUY2OUVDOEIwMDBCQ0FBRiAvKiBXYXNtVGFibGUuaCAqLywKIAkJCQk1MjUwRDJDRjFFOERBMDVB
MDAyOUE5MzIgLyogV2FzbVRodW5rcy5jcHAgKi8sCkBAIC04NDQ4LDcgKzg0NTgsNiBAQAogCQkJ
CUMyRkNBRTEzMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNjY2RUMwMTgzNTY2RjkwMEQwMTdGMSAvKiBCeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzI4REFFQjFEMzhE
MDA1MDAxQTI1MjkgLyogQnl0ZWNvZGVSZXdyaXRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRkVB
M0JCQUMyMTJDOTdDQjAwRTkzQUQxIC8qIERGR0NGRy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjUx
NEYyMTkxOEIzRTE2NzAwOThGRjhCIC8qIEJ5dGVjb2Rlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY4ODVFMTExODQ5QTNCRTAwRjFFM0ZBIC8qIEJ5dGVjb2RlVXNlRGVmLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjgwMjNFQTE2MTM4MzJCMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggaW4gSGVhZGVy
cyAqLywKQEAgLTg1ODEsNiArODU5MCw3IEBACiAJCQkJMEZCREI5QUQxQUIwRkJDNjAwMEI1N0U1
IC8qIERGR0NhbGxDcmVhdGVEaXJlY3RBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY3QjI5NEIxNEMzQ0QyRjAwN0MzREIxIC8qIERGR0NhcGFiaWxpdGll
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5NTgxNEVGOTBBMjAwQzcyNTMyIC8qIERGR0NG
QVBoYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRUEzQkJBQzIxMkM5N0NCMDBFOTNBRDEgLyog
REZHQ0ZHLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjNCM0EyODE1NDRDOTk3MDAzRUQwRkYgLyog
REZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RDM2OTUx
QUU5Q0MzMzAwMEQ0REZCIC8qIERGR0NsZWFuVXBQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTc3QTQyNDAxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Nsb2JiZXJpemUuaCBpbiBIZWFkZXJzICov
LApAQCAtOTYwNyw4ICs5NjE3LDEwIEBACiAJCQkJNzlCNzU5NzYxREZBNEM2MDAwNTIxNzRDIC8q
IFdhc21QYWdlQ291bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzRjQwRThEMUQ1OTAxRjIwMDk5
QTFCNiAvKiBXYXNtUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzEzNzRCRDFENUNFNjc2
MDBBRjdBMEIgLyogV2FzbVBsYW4uaCBpbiBIZWFkZXJzICovLAorCQkJCUUzQTA1MzFDMjEzNDJC
NjgwMDIyRUMxNCAvKiBXYXNtU2VjdGlvblBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTNG
NDBFODUxRDU4Rjk3NzAwOTlBMUI2IC8qIFdhc21TZWN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQUQ3NDM4QzAxRTA0NTdBNDAwRkQwQzJBIC8qIFdhc21TaWduYXR1cmUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUUzQTA1MzFBMjEzNDJCNjgwMDIyRUMxNCAvKiBXYXNtU3RyZWFtaW5nUGFyc2Vy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDVDMzZFNjFGNjlFQzkxMDAwQkNBQUYgLyogV2FzbVRh
YmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MjUwRDJEMjFFOERBMDVBMDAyOUE5MzIgLyogV2Fz
bVRodW5rcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTNFOUUwQUYxRUFFQzQ1NzAwRkVFMjUxIC8q
IFdhc21UaWVyVXBDb3VudC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50
eHQKaW5kZXggODk3Njk4YzZlMDU5YWUxZDI2MjEzMWFjNTIwNDAwZTMxNzhlZGNjNS4uMDRkNDhl
ODViNTBmYjgzZmIxMjUwNWZlZTE0YTg1MzU5Y2MxZTMwOSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3Vy
Y2VzLnR4dApAQCAtOTkyLDcgKzk5Miw5IEBAIHdhc20vV2FzbU9NR1BsYW4uY3BwCiB3YXNtL1dh
c21PcGNvZGVPcmlnaW4uY3BwCiB3YXNtL1dhc21QYWdlQ291bnQuY3BwCiB3YXNtL1dhc21QbGFu
LmNwcAord2FzbS9XYXNtU2VjdGlvblBhcnNlci5jcHAKIHdhc20vV2FzbVNpZ25hdHVyZS5jcHAK
K3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAKIHdhc20vV2FzbVRhYmxlLmNwcAogd2FzbS9X
YXNtVGFibGUuaAogd2FzbS9XYXNtVGh1bmtzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rv
b2xzL0pTRG9sbGFyVk0uY3BwCmluZGV4IGViNTdjNzg0Yzk4MTgwNDYyZDRhOGU0M2M4NmI1MGJh
YWFlODQ5M2IuLmVmMjU1NzI0YmM2YTExMjAwMTZiN2YyMmY5NjlkYmZmZDljYWUyM2YgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAKQEAgLTUxLDYgKzUxLDEx
IEBACiAjaW5jbHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmlu
dFN0cmVhbS5oPgogCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorI2luY2x1ZGUgIkpTV2ViQXNz
ZW1ibHlIZWxwZXJzLmgiCisjaW5jbHVkZSAiV2FzbVN0cmVhbWluZ1BhcnNlci5oIgorI2VuZGlm
CisKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCkBAIC0xMDkz
LDYgKzEwOTgsODAgQEAgdm9pZCBFbGVtZW50OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFJvb3Qq
IHJvb3QpCiAgICAgbV9yb290LT5zZXRFbGVtZW50KHRoaXMpOwogfQogCisjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bldhc21TdHJlYW1pbmdQYXJzZXJBZGRCeXRlcyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uV2FzbVN0cmVhbWluZ1BhcnNlckZpbmFsaXpl
KEV4ZWNTdGF0ZSopOworCitjbGFzcyBXYXNtU3RyZWFtaW5nUGFyc2VyIDogcHVibGljIEpTRGVz
dHJ1Y3RpYmxlT2JqZWN0IHsKK3B1YmxpYzoKKyAgICBXYXNtU3RyZWFtaW5nUGFyc2VyKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQor
ICAgICAgICAsIG1faW5mbyhXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbjo6Y3JlYXRlKCkpCisgICAg
ICAgICwgbV9zdHJlYW1pbmdQYXJzZXIobV9pbmZvLmdldCgpKQorICAgIHsKKyAgICB9CisKKyAg
ICB1c2luZyBCYXNlID0gSlNEZXN0cnVjdGlibGVPYmplY3Q7CisKKyAgICBzdGF0aWMgV2FzbVN0
cmVhbWluZ1BhcnNlciogY3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKKyAgICB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY3JlYXRlU3RydWN0dXJl
KHZtLCBnbG9iYWxPYmplY3QsIGpzTnVsbCgpKTsKKyAgICAgICAgV2FzbVN0cmVhbWluZ1BhcnNl
ciogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2FzbVN0cmVhbWluZ1BhcnNl
cj4odm0uaGVhcCwgc2l6ZW9mKFdhc21TdHJlYW1pbmdQYXJzZXIpKSkgV2FzbVN0cmVhbWluZ1Bh
cnNlcih2bSwgc3RydWN0dXJlKTsKKyAgICAgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAgV2FzbTo6U3RyZWFtaW5nUGFyc2VyJiBz
dHJlYW1pbmdQYXJzZXIoKSB7IHJldHVybiBtX3N0cmVhbWluZ1BhcnNlcjsgfQorCisgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0pCisgICAgeworICAgICAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbih2bSk7CisKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRoaXMt
Pmdsb2JhbE9iamVjdCh2bSk7CisgICAgICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCBn
bG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiYWRkQnl0ZXMiKSwgMCwg
ZnVuY3Rpb25XYXNtU3RyZWFtaW5nUGFyc2VyQWRkQnl0ZXMsIE5vSW50cmluc2ljLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgICAgIHB1
dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnZtLCAiZmluYWxpemUiKSwgMCwgZnVuY3Rpb25XYXNtU3RyZWFtaW5nUGFyc2VyRmlu
YWxpemUsIE5vSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtKSk7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworCisgICAgUmVmPFdh
c206Ok1vZHVsZUluZm9ybWF0aW9uPiBtX2luZm87CisgICAgV2FzbTo6U3RyZWFtaW5nUGFyc2Vy
IG1fc3RyZWFtaW5nUGFyc2VyOworfTsKKworY29uc3QgQ2xhc3NJbmZvIFdhc21TdHJlYW1pbmdQ
YXJzZXI6OnNfaW5mbyA9IHsgIldhc21TdHJlYW1pbmdQYXJzZXIiLCAmQmFzZTo6c19pbmZvLCBu
dWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFdhc21TdHJlYW1pbmdQYXJzZXIp
IH07CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25XYXNtU3RyZWFtaW5n
UGFyc2VyQWRkQnl0ZXMoRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZXhlYy0+dm0oKSk7Cisg
ICAgYXV0byogdGhpc09iamVjdCA9IGpzRHluYW1pY0Nhc3Q8V2FzbVN0cmVhbWluZ1BhcnNlcio+
KHZtLCBleGVjLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCF0aGlzT2JqZWN0KSB7CisgICAgICAg
IHNjb3BlLnJlbGVhc2UoKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4oZmFsc2UpKTsKKyAgICB9CisgICAgYXV0byBkYXRhID0gZ2V0V2FzbUJ1ZmZlckZyb21WYWx1
ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgc2NvcGUucmVsZWFzZSgpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50MzJfdD4odGhpc09iamVjdC0+
c3RyZWFtaW5nUGFyc2VyKCkuYWRkQnl0ZXMoYml0d2lzZV9jYXN0PGNvbnN0IHVpbnQ4X3QqPihk
YXRhLmZpcnN0KSwgZGF0YS5zZWNvbmQpKSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uV2FzbVN0cmVhbWluZ1BhcnNlckZpbmFsaXplKEV4ZWNTdGF0ZSogZXhl
YykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBq
c0R5bmFtaWNDYXN0PFdhc21TdHJlYW1pbmdQYXJzZXIqPih2bSwgZXhlYy0+dGhpc1ZhbHVlKCkp
OworICAgIGlmICghdGhpc09iamVjdCkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c0Jvb2xlYW4oZmFsc2UpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHN0
YXRpY19jYXN0PGludDMyX3Q+KHRoaXNPYmplY3QtPnN0cmVhbWluZ1BhcnNlcigpLmZpbmFsaXpl
KCkpKSk7Cit9CisKKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZQogCiBuYW1lc3BhY2UgSlNDIHsK
QEAgLTE2NDAsNiArMTcxOSwxNSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvbkNyZWF0ZURPTUpJVEdldHRlckJhc2VKU09iamVjdChFeGVjUwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAorI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
K3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlV2FzbVN0
cmVhbWluZ1BhcnNlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShXYXNtU3RyZWFtaW5nUGFyc2VyOjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSkpOworfQorI2VuZGlmCisKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uU2V0SW1wdXJlR2V0dGVyRGVsZWdhdGUoRXhlY1N0YXRlKiBleGVjKQogewogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CkBAIC0yMDQwLDYgKzIxMjgsOSBAQCB2b2lkIEpTRG9sbGFy
Vk06OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICBhZGRGdW5jdGlvbih2bSwgImNyZWF0ZURP
TUpJVENoZWNrU3ViQ2xhc3NPYmplY3QiLCBmdW5jdGlvbkNyZWF0ZURPTUpJVENoZWNrU3ViQ2xh
c3NPYmplY3QsIDApOwogICAgIGFkZEZ1bmN0aW9uKHZtLCAiY3JlYXRlRE9NSklUR2V0dGVyQmFz
ZUpTT2JqZWN0IiwgZnVuY3Rpb25DcmVhdGVET01KSVRHZXR0ZXJCYXNlSlNPYmplY3QsIDApOwog
ICAgIGFkZEZ1bmN0aW9uKHZtLCAiY3JlYXRlQnVpbHRpbiIsIGZ1bmN0aW9uQ3JlYXRlQnVpbHRp
biwgMik7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIGFkZEZ1bmN0aW9uKHZtLCAiY3Jl
YXRlV2FzbVN0cmVhbWluZ1BhcnNlciIsIGZ1bmN0aW9uQ3JlYXRlV2FzbVN0cmVhbWluZ1BhcnNl
ciwgMCk7CisjZW5kaWYKICAgICBhZGRGdW5jdGlvbih2bSwgImdldFByaXZhdGVQcm9wZXJ0eSIs
IGZ1bmN0aW9uR2V0UHJpdmF0ZVByb3BlcnR5LCAyKTsKICAgICBhZGRGdW5jdGlvbih2bSwgInNl
dEltcHVyZUdldHRlckRlbGVnYXRlIiwgZnVuY3Rpb25TZXRJbXB1cmVHZXR0ZXJEZWxlZ2F0ZSwg
Mik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFu
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAppbmRleCBm
NjcyNjg2ZDNmOTlhMGQwZDJlOWMzMjFmMjdiYzBhMWNiZjViMmRkLi40M2M4ZjU2MmFmYTFjMzYz
M2E3ZTZjNjFmNDA5MjJlYzBiZTk3MjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUJCUVBsYW4uY3BwCkBAIC01OSwxMyArNTksMTUgQEAgQkJRUGxhbjo6QkJRUGxhbihDb250
ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGluZm8sIEFzeW5jV29yayB3b3Jr
LAogfQogCiBCQlFQbGFuOjpCQlFQbGFuKENvbnRleHQqIGNvbnRleHQsIFZlY3Rvcjx1aW50OF90
PiYmIHNvdXJjZSwgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFzaywgQ3JlYXRl
RW1iZWRkZXJXcmFwcGVyJiYgY3JlYXRlRW1iZWRkZXJXcmFwcGVyLCBUaHJvd1dhc21FeGNlcHRp
b24gdGhyb3dXYXNtRXhjZXB0aW9uKQotICAgIDogQkJRUGxhbihjb250ZXh0LCBhZG9wdFJlZigq
bmV3IE1vZHVsZUluZm9ybWF0aW9uKFdURk1vdmUoc291cmNlKSkpLCB3b3JrLCBXVEZNb3ZlKHRh
c2spLCBXVEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlvbikK
KyAgICA6IEJhc2UoY29udGV4dCwgTW9kdWxlSW5mb3JtYXRpb246OmNyZWF0ZSgpLCBXVEZNb3Zl
KHRhc2spLCBXVEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlv
bikKKyAgICAsIG1fc291cmNlKFdURk1vdmUoc291cmNlKSkKKyAgICAsIG1fc3RhdGUoU3RhdGU6
OkluaXRpYWwpCisgICAgLCBtX2FzeW5jV29yayh3b3JrKQogewotICAgIG1fc3RhdGUgPSBTdGF0
ZTo6SW5pdGlhbDsKIH0KIAotQkJRUGxhbjo6QkJRUGxhbihDb250ZXh0KiBjb250ZXh0LCBjb25z
dCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgsIEFzeW5jV29yayB3b3JrLCBD
b21wbGV0aW9uVGFzayYmIHRhc2spCi0gICAgOiBCYXNlKGNvbnRleHQsIHNvdXJjZSwgc291cmNl
TGVuZ3RoLCBXVEZNb3ZlKHRhc2spKQorQkJRUGxhbjo6QkJRUGxhbihDb250ZXh0KiBjb250ZXh0
LCBBc3luY1dvcmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0YXNrKQorICAgIDogQmFzZShjb250
ZXh0LCBXVEZNb3ZlKHRhc2spKQogICAgICwgbV9zdGF0ZShTdGF0ZTo6SW5pdGlhbCkKICAgICAs
IG1fYXN5bmNXb3JrKHdvcmspCiB7CkBAIC05MCw3ICs5Miw3IEBAIHZvaWQgQkJRUGxhbjo6bW92
ZVRvU3RhdGUoU3RhdGUgc3RhdGUpCiAgICAgbV9zdGF0ZSA9IHN0YXRlOwogfQogCi1ib29sIEJC
UVBsYW46OnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKQorYm9vbCBCQlFQbGFuOjpwYXJzZUFuZFZh
bGlkYXRlTW9kdWxlKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IHNvdXJjZUxlbmd0aCkK
IHsKICAgICBpZiAobV9zdGF0ZSAhPSBTdGF0ZTo6SW5pdGlhbCkKICAgICAgICAgcmV0dXJuIHRy
dWU7CkBAIC0xMDEsNyArMTAzLDcgQEAgYm9vbCBCQlFQbGFuOjpwYXJzZUFuZFZhbGlkYXRlTW9k
dWxlKCkKICAgICAgICAgc3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CiAKICAgICB7
Ci0gICAgICAgIE1vZHVsZVBhcnNlciBtb2R1bGVQYXJzZXIobV9zb3VyY2UsIG1fc291cmNlTGVu
Z3RoLCBtX21vZHVsZUluZm9ybWF0aW9uKTsKKyAgICAgICAgTW9kdWxlUGFyc2VyIG1vZHVsZVBh
cnNlcihzb3VyY2UsIHNvdXJjZUxlbmd0aCwgbV9tb2R1bGVJbmZvcm1hdGlvbik7CiAgICAgICAg
IGF1dG8gcGFyc2VSZXN1bHQgPSBtb2R1bGVQYXJzZXIucGFyc2UoKTsKICAgICAgICAgaWYgKCFw
YXJzZVJlc3VsdCkgewogICAgICAgICAgICAgQmFzZTo6ZmFpbChob2xkTG9jayhtX2xvY2spLCBX
VEZNb3ZlKHBhcnNlUmVzdWx0LmVycm9yKCkpKTsKQEAgLTEwOSwyMCArMTExLDIxIEBAIGJvb2wg
QkJRUGxhbjo6cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpCiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBjb25zdCBhdXRvJiBmdW5jdGlvbkxvY2F0aW9ucyA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1
bmN0aW9uTG9jYXRpb25JbkJpbmFyeTsKLSAgICBmb3IgKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgg
PSAwOyBmdW5jdGlvbkluZGV4IDwgZnVuY3Rpb25Mb2NhdGlvbnMuc2l6ZSgpOyArK2Z1bmN0aW9u
SW5kZXgpIHsKLSAgICAgICAgZGF0YUxvZ0xuSWYoV2FzbUJCUVBsYW5JbnRlcm5hbDo6dmVyYm9z
ZSwgIlByb2Nlc3NpbmcgZnVuY3Rpb24gc3RhcnRpbmcgYXQ6ICIsIGZ1bmN0aW9uTG9jYXRpb25z
W2Z1bmN0aW9uSW5kZXhdLnN0YXJ0LCAiIGFuZCBlbmRpbmcgYXQ6ICIsIGZ1bmN0aW9uTG9jYXRp
b25zW2Z1bmN0aW9uSW5kZXhdLmVuZCk7Ci0gICAgICAgIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9u
U3RhcnQgPSBtX3NvdXJjZSArIGZ1bmN0aW9uTG9jYXRpb25zW2Z1bmN0aW9uSW5kZXhdLnN0YXJ0
OwotICAgICAgICBzaXplX3QgZnVuY3Rpb25MZW5ndGggPSBmdW5jdGlvbkxvY2F0aW9uc1tmdW5j
dGlvbkluZGV4XS5lbmQgLSBmdW5jdGlvbkxvY2F0aW9uc1tmdW5jdGlvbkluZGV4XS5zdGFydDsK
LSAgICAgICAgQVNTRVJUKGZ1bmN0aW9uTGVuZ3RoIDw9IG1fc291cmNlTGVuZ3RoKTsKKyAgICBj
b25zdCBhdXRvJiBmdW5jdGlvbnMgPSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbnM7Cisg
ICAgZm9yICh1bnNpZ25lZCBmdW5jdGlvbkluZGV4ID0gMDsgZnVuY3Rpb25JbmRleCA8IGZ1bmN0
aW9ucy5zaXplKCk7ICsrZnVuY3Rpb25JbmRleCkgeworICAgICAgICBjb25zdCBhdXRvJiBmdW5j
dGlvbiA9IGZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XTsKKyAgICAgICAgZGF0YUxvZ0xuSWYoV2Fz
bUJCUVBsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIlByb2Nlc3NpbmcgZnVuY3Rpb24gc3RhcnRpbmcg
YXQ6ICIsIGZ1bmN0aW9uLnN0YXJ0LCAiIGFuZCBlbmRpbmcgYXQ6ICIsIGZ1bmN0aW9uLmVuZCk7
CisgICAgICAgIHNpemVfdCBmdW5jdGlvbkxlbmd0aCA9IGZ1bmN0aW9uLmVuZCAtIGZ1bmN0aW9u
LnN0YXJ0OworICAgICAgICBBU1NFUlQoZnVuY3Rpb25MZW5ndGggPD0gc291cmNlTGVuZ3RoKTsK
KyAgICAgICAgQVNTRVJUKGZ1bmN0aW9uTGVuZ3RoID09IGZ1bmN0aW9uLmRhdGEuc2l6ZSgpKTsK
ICAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0
aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tmdW5jdGlvbkluZGV4XTsKICAg
ICAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6
Z2V0KHNpZ25hdHVyZUluZGV4KTsKIAotICAgICAgICBhdXRvIHZhbGlkYXRpb25SZXN1bHQgPSB2
YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUs
IG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCkpOworICAgICAgICBhdXRvIHZhbGlkYXRpb25SZXN1
bHQgPSB2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRh
LnNpemUoKSwgc2lnbmF0dXJlLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpKTsKICAgICAgICAg
aWYgKCF2YWxpZGF0aW9uUmVzdWx0KSB7CiAgICAgICAgICAgICBpZiAoV2FzbUJCUVBsYW5JbnRl
cm5hbDo6dmVyYm9zZSkgewogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBmdW5jdGlvbkxlbmd0aDsgKytpKQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKFJhd1Bv
aW50ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZnVuY3Rpb25TdGFydFtpXSkpLCAiLCAiKTsK
KyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KGZ1bmN0aW9uLmRhdGFbaV0pKSwgIiwgIik7CiAgICAgICAgICAgICAgICAgZGF0YUxv
Z0xuKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBCYXNlOjpmYWlsKGhvbGRMb2NrKG1f
bG9jayksIG1ha2VTdHJpbmcodmFsaWRhdGlvblJlc3VsdC5lcnJvcigpLCAiLCBpbiBmdW5jdGlv
biBhdCBpbmRleCAiLCBTdHJpbmc6Om51bWJlcihmdW5jdGlvbkluZGV4KSkpOyAvLyBGSVhNRSBt
YWtlIHRoaXMgYW4gRXhwZWN0ZWQuCkBAIC0xNTYsMTggKzE1OSwxOCBAQCB2b2lkIEJCUVBsYW46
OnByZXBhcmUoKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9OwogCi0gICAgY29uc3QgYXV0
byYgZnVuY3Rpb25Mb2NhdGlvbnMgPSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbkxvY2F0
aW9uSW5CaW5hcnk7CisgICAgY29uc3QgYXV0byYgZnVuY3Rpb25zID0gbV9tb2R1bGVJbmZvcm1h
dGlvbi0+ZnVuY3Rpb25zOwogICAgIGlmICghdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fd2FzbVRvV2Fz
bUV4aXRTdHVicywgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJ
bmRpY2VzLnNpemUoKSwgIiBXZWJBc3NlbWJseSB0byBKYXZhU2NyaXB0IHN0dWJzIikKLSAgICAg
ICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5j
dGlvbkxvY2F0aW9ucy5zaXplKCksICIgdW5saW5rZWQgV2ViQXNzZW1ibHkgdG8gV2ViQXNzZW1i
bHkgY2FsbHMiKQotICAgICAgICB8fCAhdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fd2FzbUludGVybmFs
RnVuY3Rpb25zLCBmdW5jdGlvbkxvY2F0aW9ucy5zaXplKCksICIgV2ViQXNzZW1ibHkgZnVuY3Rp
b25zIikKLSAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX2NvbXBpbGF0aW9uQ29udGV4
dHMsIGZ1bmN0aW9uTG9jYXRpb25zLnNpemUoKSwgIiBjb21waWxhdGlvbiBjb250ZXh0cyIpCi0g
ICAgICAgIHx8ICF0cnlSZXNlcnZlQ2FwYWNpdHkobV90aWVyVXBDb3VudHMsIGZ1bmN0aW9uTG9j
YXRpb25zLnNpemUoKSwgIiB0aWVyLXVwIGNvdW50cyIpKQorICAgICAgICB8fCAhdHJ5UmVzZXJ2
ZUNhcGFjaXR5KG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9ucy5zaXplKCksICIg
dW5saW5rZWQgV2ViQXNzZW1ibHkgdG8gV2ViQXNzZW1ibHkgY2FsbHMiKQorICAgICAgICB8fCAh
dHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fd2FzbUludGVybmFsRnVuY3Rpb25zLCBmdW5jdGlvbnMuc2l6
ZSgpLCAiIFdlYkFzc2VtYmx5IGZ1bmN0aW9ucyIpCisgICAgICAgIHx8ICF0cnlSZXNlcnZlQ2Fw
YWNpdHkobV9jb21waWxhdGlvbkNvbnRleHRzLCBmdW5jdGlvbnMuc2l6ZSgpLCAiIGNvbXBpbGF0
aW9uIGNvbnRleHRzIikKKyAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX3RpZXJVcENv
dW50cywgZnVuY3Rpb25zLnNpemUoKSwgIiB0aWVyLXVwIGNvdW50cyIpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLnJlc2l6ZShmdW5jdGlvbkxvY2F0
aW9ucy5zaXplKCkpOwotICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zLnJlc2l6ZShmdW5jdGlv
bkxvY2F0aW9ucy5zaXplKCkpOwotICAgIG1fY29tcGlsYXRpb25Db250ZXh0cy5yZXNpemUoZnVu
Y3Rpb25Mb2NhdGlvbnMuc2l6ZSgpKTsKLSAgICBtX3RpZXJVcENvdW50cy5yZXNpemUoZnVuY3Rp
b25Mb2NhdGlvbnMuc2l6ZSgpKTsKKyAgICBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLnJlc2l6
ZShmdW5jdGlvbnMuc2l6ZSgpKTsKKyAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5yZXNpemUo
ZnVuY3Rpb25zLnNpemUoKSk7CisgICAgbV9jb21waWxhdGlvbkNvbnRleHRzLnJlc2l6ZShmdW5j
dGlvbnMuc2l6ZSgpKTsKKyAgICBtX3RpZXJVcENvdW50cy5yZXNpemUoZnVuY3Rpb25zLnNpemUo
KSk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGltcG9ydEluZGV4ID0gMDsgaW1wb3J0SW5kZXggPCBt
X21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRzLnNpemUoKTsgKytpbXBvcnRJbmRleCkgewogICAg
ICAgICBJbXBvcnQqIGltcG9ydCA9ICZtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRzW2ltcG9y
dEluZGV4XTsKQEAgLTI0MSw3ICsyNDQsNyBAQCB2b2lkIEJCUVBsYW46OmNvbXBpbGVGdW5jdGlv
bnMoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogICAgIFRocmVhZENvdW50SG9sZGVyIGhvbGRl
cigqdGhpcyk7CiAKICAgICBzaXplX3QgYnl0ZXNDb21waWxlZCA9IDA7Ci0gICAgY29uc3QgYXV0
byYgZnVuY3Rpb25Mb2NhdGlvbnMgPSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbkxvY2F0
aW9uSW5CaW5hcnk7CisgICAgY29uc3QgYXV0byYgZnVuY3Rpb25zID0gbV9tb2R1bGVJbmZvcm1h
dGlvbi0+ZnVuY3Rpb25zOwogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIGlmIChlZmZvcnQg
PT0gUGFydGlhbCAmJiBieXRlc0NvbXBpbGVkID49IE9wdGlvbnM6OndlYkFzc2VtYmx5UGFydGlh
bENvbXBpbGVMaW1pdCgpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjQ5LDcgKzI1Miw3IEBA
IHZvaWQgQkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQp
CiAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXg7CiAgICAgICAgIHsKICAgICAgICAgICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKLSAgICAgICAgICAgIGlmIChtX2N1cnJl
bnRJbmRleCA+PSBmdW5jdGlvbkxvY2F0aW9ucy5zaXplKCkpIHsKKyAgICAgICAgICAgIGlmICht
X2N1cnJlbnRJbmRleCA+PSBmdW5jdGlvbnMuc2l6ZSgpKSB7CiAgICAgICAgICAgICAgICAgaWYg
KGhhc1dvcmsoKSkKICAgICAgICAgICAgICAgICAgICAgbW92ZVRvU3RhdGUoU3RhdGU6OkNvbXBp
bGVkKTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0yNTgsMTggKzI2MSwxNiBAQCB2b2lk
IEJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbnMoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogICAg
ICAgICAgICAgKyttX2N1cnJlbnRJbmRleDsKICAgICAgICAgfQogCi0gICAgICAgIGNvbnN0IHVp
bnQ4X3QqIGZ1bmN0aW9uU3RhcnQgPSBtX3NvdXJjZSArIGZ1bmN0aW9uTG9jYXRpb25zW2Z1bmN0
aW9uSW5kZXhdLnN0YXJ0OwotICAgICAgICBzaXplX3QgZnVuY3Rpb25MZW5ndGggPSBmdW5jdGlv
bkxvY2F0aW9uc1tmdW5jdGlvbkluZGV4XS5lbmQgLSBmdW5jdGlvbkxvY2F0aW9uc1tmdW5jdGlv
bkluZGV4XS5zdGFydDsKLSAgICAgICAgQVNTRVJUKGZ1bmN0aW9uTGVuZ3RoIDw9IG1fc291cmNl
TGVuZ3RoKTsKKyAgICAgICAgY29uc3QgYXV0byYgZnVuY3Rpb24gPSBmdW5jdGlvbnNbZnVuY3Rp
b25JbmRleF07CiAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1
bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNbZnVuY3Rpb25J
bmRleF07CiAgICAgICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5m
b3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CiAgICAgICAgIHVuc2lnbmVkIGZ1bmN0aW9u
SW5kZXhTcGFjZSA9IG1fd2FzbVRvV2FzbUV4aXRTdHVicy5zaXplKCkgKyBmdW5jdGlvbkluZGV4
OwogICAgICAgICBBU1NFUlRfVU5VU0VEKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZv
cm1hdGlvbi0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5k
ZXhTcGFjZSkgPT0gc2lnbmF0dXJlSW5kZXgpOwotICAgICAgICBBU1NFUlQodmFsaWRhdGVGdW5j
dGlvbihmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBtX21vZHVsZUlu
Zm9ybWF0aW9uLmdldCgpKSk7CisgICAgICAgIEFTU0VSVCh2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0
aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRhLnNpemUoKSwgc2lnbmF0dXJlLCBtX21vZHVs
ZUluZm9ybWF0aW9uLmdldCgpKSk7CiAKICAgICAgICAgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxs
c1tmdW5jdGlvbkluZGV4XSA9IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPigpOwogICAg
ICAgICBUaWVyVXBDb3VudCogdGllclVwID0gT3B0aW9uczo6dXNlQkJRVGllclVwQ2hlY2tzKCkg
PyAmbV90aWVyVXBDb3VudHNbZnVuY3Rpb25JbmRleF0gOiBudWxscHRyOwotICAgICAgICBhdXRv
IHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZShtX2NvbXBpbGF0aW9uQ29u
dGV4dHNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWdu
YXR1cmUsIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG1fbW9kdWxl
SW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBmdW5j
dGlvbkluZGV4LCB0aWVyVXAsIG1fdGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICAgICAgYXV0byBw
YXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUobV9jb21waWxhdGlvbkNvbnRl
eHRzW2Z1bmN0aW9uSW5kZXhdLCBmdW5jdGlvbi5kYXRhLmRhdGEoKSwgZnVuY3Rpb24uZGF0YS5z
aXplKCksIHNpZ25hdHVyZSwgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4
XSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6OkJC
UU1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwgbV90aHJvd1dhc21FeGNlcHRpb24pOwogCiAg
ICAgICAgIGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxlUmVzdWx0KSkgewogICAgICAgICAg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwpAQCAtMjc3LDcgKzI3OCw3IEBAIHZv
aWQgQkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAg
ICAgICAgICAgICAgICAgLy8gTXVsdGlwbGUgY29tcGlsZXMgY291bGQgZmFpbCBzaW11bHRhbmVv
dXNseS4gV2UgYXJiaXRyYXJpbHkgY2hvb3NlIHRoZSBmaXJzdC4KICAgICAgICAgICAgICAgICBm
YWlsKGxvY2tlciwgbWFrZVN0cmluZyhwYXJzZUFuZENvbXBpbGVSZXN1bHQuZXJyb3IoKSwgIiwg
aW4gZnVuY3Rpb24gYXQgaW5kZXggIiwgU3RyaW5nOjpudW1iZXIoZnVuY3Rpb25JbmRleCkpKTsg
Ly8gRklYTUUgbWFrZSB0aGlzIGFuIEV4cGVjdGVkLgogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgbV9jdXJyZW50SW5kZXggPSBmdW5jdGlvbkxvY2F0aW9ucy5zaXplKCk7CisgICAgICAgICAg
ICBtX2N1cnJlbnRJbmRleCA9IGZ1bmN0aW9ucy5zaXplKCk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KIApAQCAtMjg5LDE3ICsyOTAsMTcgQEAgdm9pZCBCQlFQbGFuOjpjb21waWxl
RnVuY3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAgICAgICAgICAgIEFTU0VSVF9V
TlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CiAgICAgICAgIH0KIAotICAgICAgICBi
eXRlc0NvbXBpbGVkICs9IGZ1bmN0aW9uTGVuZ3RoOworICAgICAgICBieXRlc0NvbXBpbGVkICs9
IGZ1bmN0aW9uLmRhdGEuc2l6ZSgpOwogICAgIH0KIH0KIAogdm9pZCBCQlFQbGFuOjpjb21wbGV0
ZShjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyKQogewotICAgIEFTU0VSVChtX3N0YXRlICE9
IFN0YXRlOjpDb21waWxlZCB8fCBtX2N1cnJlbnRJbmRleCA+PSBtX21vZHVsZUluZm9ybWF0aW9u
LT5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpKTsKKyAgICBBU1NFUlQobV9zdGF0ZSAh
PSBTdGF0ZTo6Q29tcGlsZWQgfHwgbV9jdXJyZW50SW5kZXggPj0gbV9tb2R1bGVJbmZvcm1hdGlv
bi0+ZnVuY3Rpb25zLnNpemUoKSk7CiAgICAgZGF0YUxvZ0xuSWYoV2FzbUJCUVBsYW5JbnRlcm5h
bDo6dmVyYm9zZSwgIlN0YXJ0aW5nIENvbXBsZXRpb24iKTsKIAogICAgIGlmICghZmFpbGVkKCkg
JiYgbV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGlsZWQpIHsKLSAgICAgICAgZm9yICh1aW50MzJfdCBm
dW5jdGlvbkluZGV4ID0gMDsgZnVuY3Rpb25JbmRleCA8IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1
bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCk7IGZ1bmN0aW9uSW5kZXgrKykgeworICAgICAg
ICBmb3IgKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXggPSAwOyBmdW5jdGlvbkluZGV4IDwgbV9tb2R1
bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25zLnNpemUoKTsgZnVuY3Rpb25JbmRleCsrKSB7CiAgICAg
ICAgICAgICBDb21waWxhdGlvbkNvbnRleHQmIGNvbnRleHQgPSBtX2NvbXBpbGF0aW9uQ29udGV4
dHNbZnVuY3Rpb25JbmRleF07CiAgICAgICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJ
bmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRp
Y2VzW2Z1bmN0aW9uSW5kZXhdOwogICAgICAgICAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1
cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKQEAgLTM1MSw3
ICszNTIsNyBAQCB2b2lkIEJCUVBsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQog
ewogICAgIHN3aXRjaCAobV9zdGF0ZSkgewogICAgIGNhc2UgU3RhdGU6OkluaXRpYWw6Ci0gICAg
ICAgIHBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKTsKKyAgICAgICAgcGFyc2VBbmRWYWxpZGF0ZU1v
ZHVsZShtX3NvdXJjZS5kYXRhKCksIG1fc291cmNlLnNpemUoKSk7CiAgICAgICAgIGlmICghaGFz
V29yaygpKSB7CiAgICAgICAgICAgICBBU1NFUlQoaXNDb21wbGV0ZSgpKTsKICAgICAgICAgICAg
IHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQ
bGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oCmluZGV4IGQ4
ODE0NWQ3ZGRkYmQ2YjE5MTA1Nzc4MTdjZTdjYjhkYjQxMjFkMWUuLjk0MWFjNzVmNzBlNmY5MTFi
OWZiYjNkZGIxMzc4Y2NmOTY5OTQxYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CQlFQbGFuLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUJCUVBsYW4uaApAQCAtNTIsMTEgKzUyLDE0IEBAIGNsYXNzIEJCUVBsYW4gZmluYWwgOiBwdWJs
aWMgUGxhbiB7CiAgICAgLy8gTm90ZTogQ29tcGxldGlvblRhc2sgc2hvdWxkIG5vdCBob2xkIGEg
cmVmZXJlbmNlIHRvIHRoZSBQbGFuIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGEgcmVmZXJlbmNl
IGN5Y2xlLgogICAgIEJCUVBsYW4oQ29udGV4dCosIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4sIEFz
eW5jV29yaywgQ29tcGxldGlvblRhc2smJiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93
V2FzbUV4Y2VwdGlvbik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQkJRUGxhbihDb250ZXh0Kiwg
VmVjdG9yPHVpbnQ4X3Q+JiYsIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJiwgQ3JlYXRlRW1i
ZWRkZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4Y2VwdGlvbik7Ci0gICAgLy8gTm90ZTogVGhpcyBj
b25zdHJ1Y3RvciBzaG91bGQgb25seSBiZSB1c2VkIGlmIHlvdSBhcmUgbm90IGFjdHVhbGx5IGJ1
aWxkaW5nIGEgbW9kdWxlIGUuZy4gdmFsaWRhdGlvbi9mdW5jdGlvbiB0ZXN0cwotICAgIC8vIEZJ
WE1FOiBXaGVuIHdlIGdldCByaWQgb2YgZnVuY3Rpb24gdGVzdHMgd2Ugc2hvdWxkIHJlbW92ZSBB
c3luY1dvcmsgZnJvbSB0aGlzIGNvbnN0cnVjdG9yLgotICAgIEpTX0VYUE9SVF9QUklWQVRFIEJC
UVBsYW4oQ29udGV4dCosIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIEFzeW5jV29yaywgQ29tcGxl
dGlvblRhc2smJik7CisgICAgQkJRUGxhbihDb250ZXh0KiwgQXN5bmNXb3JrLCBDb21wbGV0aW9u
VGFzayYmKTsKIAotICAgIGJvb2wgcGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpOworCisgICAgYm9v
bCBwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBwYXJzZUFu
ZFZhbGlkYXRlTW9kdWxlKG1fc291cmNlLmRhdGEoKSwgbV9zb3VyY2Uuc2l6ZSgpKTsKKyAgICB9
CisgICAgYm9vbCBwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3Qp
OwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmVwYXJlKCk7CiAgICAgdm9pZCBjb21w
aWxlRnVuY3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0KTsKQEAgLTEzNiw2ICsxMzksNyBAQCBjbGFz
cyBCQlFQbGFuIGZpbmFsIDogcHVibGljIFBsYW4gewogCiAgICAgY29uc3QgY2hhciogc3RhdGVT
dHJpbmcoU3RhdGUpOwogICAgIAorICAgIFZlY3Rvcjx1aW50OF90PiBtX3NvdXJjZTsKICAgICBC
YWc8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7CiAgICAgVmVjdG9yPE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiBtX3dhc21Ub1dhc21FeGl0U3R1YnM7CiAgICAg
VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPj4gbV93YXNtSW50ZXJuYWxG
dW5jdGlvbnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9y
bWF0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKaW5kZXggMjc4
NGU5MGFmMzg0MWEwMmU1ODczMzMyY2ZmOGJiMDY0ODdlMzNkZS4uZTQzZjRlZDkzNjE2N2ZmMjkz
OGQ4MzdhMGNlMDg4ZDQzZDIwYTRlNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUZvcm1hdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21G
b3JtYXQuaApAQCAtMTQwLDkgKzE0MCwxMCBAQCBzdHJ1Y3QgR2xvYmFsIHsKICAgICB1aW50NjRf
dCBpbml0aWFsQml0c09ySW1wb3J0TnVtYmVyIHsgMCB9OwogfTsKIAotc3RydWN0IEZ1bmN0aW9u
TG9jYXRpb25JbkJpbmFyeSB7CitzdHJ1Y3QgRnVuY3Rpb25EYXRhIHsKICAgICBzaXplX3Qgc3Rh
cnQ7CiAgICAgc2l6ZV90IGVuZDsKKyAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKIH07CiAKIGNs
YXNzIEkzMkluaXRFeHByIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTW9kdWxlSW5mb3JtYXRpb24uY3BwCmluZGV4IGNiOGRiMGUwOTNmOTRjZGEzMTZkZDI0YmFm
MzllNTEyZWRhMjAzMTQuLjhhMjU0YzAwMmZiZTllZjkwY2VmMWFiZGZjNDE2OWMxZTQ2YzUzZGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1h
dGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9y
bWF0aW9uLmNwcApAQCAtMzEsMjEgKzMxLDEwIEBACiAjaW5jbHVkZSAiV2FzbU5hbWVTZWN0aW9u
LmgiCiAjaW5jbHVkZSA8d3RmL1NIQTEuaD4KIAotbmFtZXNwYWNlIHsKLUNTdHJpbmcgc2hhMShj
b25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0KQotewotICAgIFNIQTEgaGFzaDsKLSAgICBoYXNo
LmFkZEJ5dGVzKGlucHV0KTsKLSAgICByZXR1cm4gaGFzaC5jb21wdXRlSGV4RGlnZXN0KCk7Ci19
Ci19Ci0KIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKLU1vZHVsZUluZm9ybWF0
aW9uOjpNb2R1bGVJbmZvcm1hdGlvbihWZWN0b3I8dWludDhfdD4mJiBzb3VyY2VCeXRlcykKLSAg
ICA6IHNvdXJjZShXVEZNb3ZlKHNvdXJjZUJ5dGVzKSkKLSAgICAsIGhhc2goT3B0aW9uczo6dXNl
RWFnZXJXZWJBc3NlbWJseU1vZHVsZUhhc2hpbmcoKSA/IHN0ZDo6bWFrZV9vcHRpb25hbChzaGEx
KHNvdXJjZSkpIDogc3RkOjpudWxsb3B0KQotICAgICwgbmFtZVNlY3Rpb24obmV3IE5hbWVTZWN0
aW9uKGhhc2gpKQorTW9kdWxlSW5mb3JtYXRpb246Ok1vZHVsZUluZm9ybWF0aW9uKCkKKyAgICA6
IG5hbWVTZWN0aW9uKE5hbWVTZWN0aW9uOjpjcmVhdGUoKSkKIHsKIH0KIE1vZHVsZUluZm9ybWF0
aW9uOjp+TW9kdWxlSW5mb3JtYXRpb24oKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgKaW5kZXggMGJhYjU3ZTA3MGQyZWEzMzA2
MmYzNjM2NThhMjQxNWU5YmQ1MWUyZC4uZmI1ZTNhMGNkZWQ0ZTczODAyNDMwM2JlNWUwZjU2N2Fm
NTViYTAyNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVs
ZUluZm9ybWF0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVs
ZUluZm9ybWF0aW9uLmgKQEAgLTM0LDExICszNCwxNCBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBXYXNtIHsKIAogc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uIDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPE1vZHVsZUluZm9ybWF0aW9uPiB7Ci0gICAgTW9kdWxlSW5mb3JtYXRpb24o
KSA9IGRlbGV0ZTsKKyAgICBNb2R1bGVJbmZvcm1hdGlvbigpOwogICAgIE1vZHVsZUluZm9ybWF0
aW9uKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJikgPSBkZWxldGU7CiAgICAgTW9kdWxlSW5mb3Jt
YXRpb24oTW9kdWxlSW5mb3JtYXRpb24mJikgPSBkZWxldGU7CiAKLSAgICBNb2R1bGVJbmZvcm1h
dGlvbihWZWN0b3I8dWludDhfdD4mJiBzb3VyY2VCeXRlcyk7CisgICAgc3RhdGljIFJlZjxNb2R1
bGVJbmZvcm1hdGlvbj4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IE1vZHVsZUluZm9ybWF0aW9uKTsKKyAgICB9CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB+
TW9kdWxlSW5mb3JtYXRpb24oKTsKICAgICAKQEAgLTU4LDggKzYxLDggQEAgc3RydWN0IE1vZHVs
ZUluZm9ybWF0aW9uIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPE1vZHVsZUluZm9ybWF0
aW9uPiB7CiAgICAgdWludDMyX3QgaW1wb3J0RnVuY3Rpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJu
IGltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7IH0KICAgICB1aW50MzJfdCBp
bnRlcm5hbEZ1bmN0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBpbnRlcm5hbEZ1bmN0aW9uU2ln
bmF0dXJlSW5kaWNlcy5zaXplKCk7IH0KIAotICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiBzb3Vy
Y2U7Ci0gICAgY29uc3Qgc3RkOjpvcHRpb25hbDxDU3RyaW5nPiBoYXNoOworICAgIHVpbnQzMl90
IG1lbW9yeUNvdW50KCkgY29uc3QgeyByZXR1cm4gbWVtb3J5ID8gMSA6IDA7IH0KKyAgICB1aW50
MzJfdCB0YWJsZUNvdW50KCkgY29uc3QgeyByZXR1cm4gdGFibGVJbmZvcm1hdGlvbiA/IDEgOiAw
OyB9CiAKICAgICBWZWN0b3I8SW1wb3J0PiBpbXBvcnRzOwogICAgIFZlY3RvcjxTaWduYXR1cmVJ
bmRleD4gaW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzOwpAQCAtNjgsNyArNzEsNyBAQCBz
dHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TW9k
dWxlSW5mb3JtYXRpb24+IHsKIAogICAgIE1lbW9yeUluZm9ybWF0aW9uIG1lbW9yeTsKIAotICAg
IFZlY3RvcjxGdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnk+IGZ1bmN0aW9uTG9jYXRpb25JbkJpbmFy
eTsKKyAgICBWZWN0b3I8RnVuY3Rpb25EYXRhPiBmdW5jdGlvbnM7CiAKICAgICBWZWN0b3I8RXhw
b3J0PiBleHBvcnRzOwogICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IHN0YXJ0RnVuY3Rpb25J
bmRleFNwYWNlOwpAQCAtNzgsNyArODEsNyBAQCBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TW9kdWxlSW5mb3JtYXRpb24+IHsKICAgICBWZWN0
b3I8R2xvYmFsPiBnbG9iYWxzOwogICAgIHVuc2lnbmVkIGZpcnN0SW50ZXJuYWxHbG9iYWwgeyAw
IH07CiAgICAgVmVjdG9yPEN1c3RvbVNlY3Rpb24+IGN1c3RvbVNlY3Rpb25zOwotICAgIFJlZlB0
cjxOYW1lU2VjdGlvbj4gbmFtZVNlY3Rpb247CisgICAgUmVmPE5hbWVTZWN0aW9uPiBuYW1lU2Vj
dGlvbjsKIH07CiAKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Nb2R1bGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1v
ZHVsZVBhcnNlci5jcHAKaW5kZXggZjAzZTY5ODdmNGE1MDI1OTFkZjcxZGM4MTU3ODIwODA5OTYx
MzhiNC4uYThlZDhkMmU2YjE5Yzk1ZjY3MWZmY2JjNTQ3ODNkYTc0YzY1MDgwZiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKQEAgLTMyLDE4
ICszMiwxMSBAQAogI2luY2x1ZGUgIldhc21NZW1vcnlJbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUg
Ildhc21OYW1lU2VjdGlvblBhcnNlci5oIgogI2luY2x1ZGUgIldhc21PcHMuaCIKKyNpbmNsdWRl
ICJXYXNtU2VjdGlvblBhcnNlci5oIgogI2luY2x1ZGUgIldhc21TZWN0aW9ucy5oIgogCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi1BTFdBWVNfSU5MSU5FIEkzMkluaXRFeHBy
IG1ha2VJMzJJbml0RXhwcih1aW50OF90IG9wY29kZSwgdWludDMyX3QgYml0cykKLXsKLSAgICBS
RUxFQVNFX0FTU0VSVChvcGNvZGUgPT0gSTMyQ29uc3QgfHwgb3Bjb2RlID09IEdldEdsb2JhbCk7
Ci0gICAgaWYgKG9wY29kZSA9PSBJMzJDb25zdCkKLSAgICAgICAgcmV0dXJuIEkzMkluaXRFeHBy
Ojpjb25zdFZhbHVlKGJpdHMpOwotICAgIHJldHVybiBJMzJJbml0RXhwcjo6Z2xvYmFsSW1wb3J0
KGJpdHMpOwotfQotCiBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2UoKSAtPiBSZXN1bHQKIHsKICAg
ICBjb25zdCBzaXplX3QgbWluU2l6ZSA9IDg7CkBAIC03MSwxOSArNjQsMTkgQEAgYXV0byBNb2R1
bGVQYXJzZXI6OnBhcnNlKCkgLT4gUmVzdWx0CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlVmFyVUludDMyKHNlY3Rpb25MZW5ndGgpLCAiY2FuJ3QgZ2V0ICIsIHNlY3Rpb24sICIg
c2VjdGlvbidzIGxlbmd0aCIpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHNlY3Rpb25M
ZW5ndGggPiBsZW5ndGgoKSAtIG1fb2Zmc2V0LCBzZWN0aW9uLCAiIHNlY3Rpb24gb2Ygc2l6ZSAi
LCBzZWN0aW9uTGVuZ3RoLCAiIHdvdWxkIG92ZXJmbG93IE1vZHVsZSdzIHNpemUiKTsKIAotICAg
ICAgICBhdXRvIGVuZCA9IG1fb2Zmc2V0ICsgc2VjdGlvbkxlbmd0aDsKKyAgICAgICAgU2VjdGlv
blBhcnNlciBwYXJzZXIoc291cmNlKCkgKyBtX29mZnNldCwgc2VjdGlvbkxlbmd0aCwgbV9vZmZz
ZXQsIG1faW5mby5nZXQoKSk7CiAKICAgICAgICAgc3dpdGNoIChzZWN0aW9uKSB7CiAjZGVmaW5l
IFdBU01fU0VDVElPTl9QQVJTRShOQU1FLCBJRCwgREVTQ1JJUFRJT04pICAgICAgICAgICAgICAg
ICAgIFwKICAgICAgICAgY2FzZSBTZWN0aW9uOjpOQU1FOiB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlM
UyhwYXJzZSAjIyBOQU1FKCkpOyAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQVNNX0ZBSUxf
SUZfSEVMUEVSX0ZBSUxTKHBhcnNlci5wYXJzZSAjIyBOQU1FKCkpOyAgICAgICAgICAgICBcCiAg
ICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKICAgICAgICAgfQogICAgICAgICBGT1JfRUFDSF9LTk9XTl9XQVNNX1NFQ1RJ
T04oV0FTTV9TRUNUSU9OX1BBUlNFKQogI3VuZGVmIFdBU01fU0VDVElPTl9QQVJTRQogCiAgICAg
ICAgIGNhc2UgU2VjdGlvbjo6Q3VzdG9tOiB7Ci0gICAgICAgICAgICBXQVNNX0ZBSUxfSUZfSEVM
UEVSX0ZBSUxTKHBhcnNlQ3VzdG9tKHNlY3Rpb25MZW5ndGgpKTsKKyAgICAgICAgICAgIFdBU01f
RkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VyLnBhcnNlQ3VzdG9tKCkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KIApAQCAtOTMsNTM4ICs4NiwyNCBAQCBhdXRvIE1vZHVsZVBhcnNl
cjo6cGFyc2UoKSAtPiBSZXN1bHQKICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRihlbmQgIT0gbV9vZmZzZXQsICJwYXJzaW5nIGVuZGVkIGJlZm9yZSB0
aGUgZW5kIG9mICIsIHNlY3Rpb24sICIgc2VjdGlvbiIpOworICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKHBhcnNlci5sZW5ndGgoKSAhPSBwYXJzZXIub2Zmc2V0KCksICJwYXJzaW5nIGVuZGVk
IGJlZm9yZSB0aGUgZW5kIG9mICIsIHNlY3Rpb24sICIgc2VjdGlvbiIpOworCisgICAgICAgIG1f
b2Zmc2V0ICs9IHNlY3Rpb25MZW5ndGg7CiAKIAogICAgICAgICBpZiAoaXNLbm93blNlY3Rpb24o
c2VjdGlvbikpCiAgICAgICAgICAgICBwcmV2aW91c0tub3duU2VjdGlvbiA9IHNlY3Rpb247CiAg
ICAgfQogCi0gICAgcmV0dXJuIHsgfTsKLX0KLQotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlVHlw
ZSgpIC0+IFBhcnRpYWxSZXN1bHQKLXsKLSAgICB1aW50MzJfdCBjb3VudDsKLQotICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGNvdW50KSwgImNhbid0IGdldCBUeXBlIHNl
Y3Rpb24ncyBjb3VudCIpOwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoY291bnQgPiBtYXhUeXBl
cywgIlR5cGUgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgY291bnQsICIgbWF4aW11bSAi
LCBtYXhUeXBlcyk7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT51c2VkU2lnbmF0
dXJlcy50cnlSZXNlcnZlQ2FwYWNpdHkoY291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1l
bW9yeSBmb3IgVHlwZSBzZWN0aW9uJ3MgIiwgY291bnQsICIgZW50cmllcyIpOwotCi0gICAgZm9y
ICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgaW50OF90IHR5cGU7
Ci0gICAgICAgIHVpbnQzMl90IGFyZ3VtZW50Q291bnQ7Ci0gICAgICAgIFZlY3RvcjxUeXBlPiBh
cmd1bWVudFR5cGVzOwotCi0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlSW50Nyh0
eXBlKSwgImNhbid0IGdldCAiLCBpLCAidGggVHlwZSdzIHR5cGUiKTsKLSAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRih0eXBlICE9IEZ1bmMsIGksICJ0aCBUeXBlIGlzIG5vbi1GdW5jICIsIHR5
cGUpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihhcmd1bWVu
dENvdW50KSwgImNhbid0IGdldCAiLCBpLCAidGggVHlwZSdzIGFyZ3VtZW50IGNvdW50Iik7Ci0g
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoYXJndW1lbnRDb3VudCA+IG1heEZ1bmN0aW9uUGFy
YW1zLCBpLCAidGggYXJndW1lbnQgY291bnQgaXMgdG9vIGJpZyAiLCBhcmd1bWVudENvdW50LCAi
IG1heGltdW0gIiwgbWF4RnVuY3Rpb25QYXJhbXMpOwotICAgICAgICBSZWZQdHI8U2lnbmF0dXJl
PiBtYXliZVNpZ25hdHVyZSA9IFNpZ25hdHVyZTo6dHJ5Q3JlYXRlKGFyZ3VtZW50Q291bnQpOwot
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtYXliZVNpZ25hdHVyZSwgImNhbid0IGFsbG9j
YXRlIGVub3VnaCBtZW1vcnkgZm9yIFR5cGUgc2VjdGlvbidzICIsIGksICJ0aCBzaWduYXR1cmUi
KTsKLSAgICAgICAgUmVmPFNpZ25hdHVyZT4gc2lnbmF0dXJlID0gbWF5YmVTaWduYXR1cmUucmVs
ZWFzZU5vbk51bGwoKTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJndW1l
bnRDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBUeXBlIGFyZ3VtZW50VHlwZTsKLSAgICAgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFsdWVUeXBlKGFyZ3VtZW50VHlwZSksICJj
YW4ndCBnZXQgIiwgaSwgInRoIGFyZ3VtZW50IFR5cGUiKTsKLSAgICAgICAgICAgIHNpZ25hdHVy
ZS0+YXJndW1lbnQoaSkgPSBhcmd1bWVudFR5cGU7Ci0gICAgICAgIH0KLQotICAgICAgICB1aW50
OF90IHJldHVybkNvdW50OwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJ
bnQxKHJldHVybkNvdW50KSwgImNhbid0IGdldCAiLCBpLCAidGggVHlwZSdzIHJldHVybiBjb3Vu
dCIpOwotICAgICAgICBUeXBlIHJldHVyblR5cGU7Ci0gICAgICAgIGlmIChyZXR1cm5Db3VudCkg
ewotICAgICAgICAgICAgVHlwZSB2YWx1ZTsKLSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIXBhcnNlVmFsdWVUeXBlKHZhbHVlKSwgImNhbid0IGdldCAiLCBpLCAidGggVHlwZSdzIHJl
dHVybiB2YWx1ZSIpOwotICAgICAgICAgICAgcmV0dXJuVHlwZSA9IHN0YXRpY19jYXN0PFR5cGU+
KHZhbHVlKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICByZXR1cm5UeXBlID0gVHlwZTo6
Vm9pZDsKLSAgICAgICAgc2lnbmF0dXJlLT5yZXR1cm5UeXBlKCkgPSByZXR1cm5UeXBlOwotCi0g
ICAgICAgIHN0ZDo6cGFpcjxTaWduYXR1cmVJbmRleCwgUmVmPFNpZ25hdHVyZT4+IHJlc3VsdCA9
IFNpZ25hdHVyZUluZm9ybWF0aW9uOjphZG9wdChXVEZNb3ZlKHNpZ25hdHVyZSkpOwotICAgICAg
ICBtX2luZm8tPnVzZWRTaWduYXR1cmVzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKHJlc3VsdC5z
ZWNvbmQpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQotYXV0byBNb2R1bGVQYXJzZXI6
OnBhcnNlSW1wb3J0KCkgLT4gUGFydGlhbFJlc3VsdAotewotICAgIHVpbnQzMl90IGltcG9ydENv
dW50OwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGltcG9ydENvdW50
KSwgImNhbid0IGdldCBJbXBvcnQgc2VjdGlvbidzIGNvdW50Iik7Ci0gICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihpbXBvcnRDb3VudCA+IG1heEltcG9ydHMsICJJbXBvcnQgc2VjdGlvbidzIGNvdW50
IGlzIHRvbyBiaWcgIiwgaW1wb3J0Q291bnQsICIgbWF4aW11bSAiLCBtYXhJbXBvcnRzKTsKLSAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmdsb2JhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5
KGltcG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGltcG9y
dENvdW50LCAiIGdsb2JhbHMiKTsgLy8gRklYTUUgdGhpcyBvdmVyLWFsbG9jYXRlcyB3aGVuIHdl
IGZpeCB0aGUgRklYTUVzIGJlbG93LgotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+
aW1wb3J0cy50cnlSZXNlcnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUg
ZW5vdWdoIG1lbW9yeSBmb3IgIiwgaW1wb3J0Q291bnQsICIgaW1wb3J0cyIpOyAvLyBGSVhNRSB0
aGlzIG92ZXItYWxsb2NhdGVzIHdoZW4gd2UgZml4IHRoZSBGSVhNRXMgYmVsb3cuCi0gICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5pbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMu
dHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBt
ZW1vcnkgZm9yICIsIGltcG9ydENvdW50LCAiIGltcG9ydCBmdW5jdGlvbiBzaWduYXR1cmVzIik7
IC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxv
dy4KLQotICAgIGZvciAodWludDMyX3QgaW1wb3J0TnVtYmVyID0gMDsgaW1wb3J0TnVtYmVyIDwg
aW1wb3J0Q291bnQ7ICsraW1wb3J0TnVtYmVyKSB7Ci0gICAgICAgIHVpbnQzMl90IG1vZHVsZUxl
bjsKLSAgICAgICAgdWludDMyX3QgZmllbGRMZW47Ci0gICAgICAgIE5hbWUgbW9kdWxlU3RyaW5n
OwotICAgICAgICBOYW1lIGZpZWxkU3RyaW5nOwotICAgICAgICBFeHRlcm5hbEtpbmQga2luZDsK
LSAgICAgICAgdW5zaWduZWQga2luZEluZGV4IHsgMCB9OwotCi0gICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKG1vZHVsZUxlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0
TnVtYmVyLCAidGggSW1wb3J0J3MgbW9kdWxlIG5hbWUgbGVuZ3RoIik7Ci0gICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVVVEY4U3RyaW5nKG1vZHVsZVN0cmluZywgbW9kdWxlTGVu
KSwgImNhbid0IGdldCAiLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQncyBtb2R1bGUgbmFtZSBv
ZiBsZW5ndGggIiwgbW9kdWxlTGVuKTsKLQotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFw
YXJzZVZhclVJbnQzMihmaWVsZExlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGgg
SW1wb3J0J3MgZmllbGQgbmFtZSBsZW5ndGggaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICIn
Iik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVVVEY4U3RyaW5nKGZpZWxk
U3RyaW5nLCBmaWVsZExlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0
J3MgZmllbGQgbmFtZSBvZiBsZW5ndGggIiwgbW9kdWxlTGVuLCAiIGluIG1vZHVsZSAnIiwgbW9k
dWxlU3RyaW5nLCAiJyIpOwotCi0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlRXh0
ZXJuYWxLaW5kKGtpbmQpLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdz
IGtpbmQgaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0cmlu
ZywgIiciKTsKLSAgICAgICAgc3dpdGNoIChraW5kKSB7Ci0gICAgICAgIGNhc2UgRXh0ZXJuYWxL
aW5kOjpGdW5jdGlvbjogewotICAgICAgICAgICAgdWludDMyX3QgZnVuY3Rpb25TaWduYXR1cmVJ
bmRleDsKLSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGZ1
bmN0aW9uU2lnbmF0dXJlSW5kZXgpLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIElt
cG9ydCdzIGZ1bmN0aW9uIHNpZ25hdHVyZSBpbiBtb2R1bGUgJyIsIG1vZHVsZVN0cmluZywgIicg
ZmllbGQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOwotICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRihmdW5jdGlvblNpZ25hdHVyZUluZGV4ID49IG1faW5mby0+dXNlZFNpZ25hdHVyZXMuc2l6
ZSgpLCAiaW52YWxpZCBmdW5jdGlvbiBzaWduYXR1cmUgZm9yICIsIGltcG9ydE51bWJlciwgInRo
IEltcG9ydCwgIiwgZnVuY3Rpb25TaWduYXR1cmVJbmRleCwgIiBpcyBvdXQgb2YgcmFuZ2Ugb2Yg
IiwgbV9pbmZvLT51c2VkU2lnbmF0dXJlcy5zaXplKCksICIgaW4gbW9kdWxlICciLCBtb2R1bGVT
dHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0cmluZywgIiciKTsKLSAgICAgICAgICAgIGtpbmRJ
bmRleCA9IG1faW5mby0+aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsKLSAg
ICAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gU2lnbmF0dXJlSW5mb3Jt
YXRpb246OmdldChtX2luZm8tPnVzZWRTaWduYXR1cmVzW2Z1bmN0aW9uU2lnbmF0dXJlSW5kZXhd
KTsKLSAgICAgICAgICAgIG1faW5mby0+aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnVu
Y2hlY2tlZEFwcGVuZChzaWduYXR1cmVJbmRleCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIEV4dGVybmFsS2luZDo6VGFibGU6IHsKLSAgICAgICAgICAgIGJv
b2wgaXNJbXBvcnQgPSB0cnVlOwotICAgICAgICAgICAgUGFydGlhbFJlc3VsdCByZXN1bHQgPSBw
YXJzZVRhYmxlSGVscGVyKGlzSW1wb3J0KTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSghcmVz
dWx0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoV1RGTW92ZShyZXN1
bHQuZXJyb3IoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBFeHRlcm5hbEtpbmQ6Ok1lbW9yeTogewotICAgICAgICAgICAgYm9vbCBpc0ltcG9ydCA9IHRy
dWU7Ci0gICAgICAgICAgICBQYXJ0aWFsUmVzdWx0IHJlc3VsdCA9IHBhcnNlTWVtb3J5SGVscGVy
KGlzSW1wb3J0KTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoV1RGTW92ZShyZXN1bHQuZXJyb3IoKSkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6
Okdsb2JhbDogewotICAgICAgICAgICAgR2xvYmFsIGdsb2JhbDsKLSAgICAgICAgICAgIFdBU01f
RkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VHbG9iYWxUeXBlKGdsb2JhbCkpOwotICAgICAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihnbG9iYWwubXV0YWJpbGl0eSA9PSBHbG9iYWw6Ok11dGFi
bGUsICJNdXRhYmxlIEdsb2JhbHMgYXJlbid0IHN1cHBvcnRlZCIpOwotCi0gICAgICAgICAgICBr
aW5kSW5kZXggPSBtX2luZm8tPmdsb2JhbHMuc2l6ZSgpOwotICAgICAgICAgICAgbV9pbmZvLT5n
bG9iYWxzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGdsb2JhbCkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIG1faW5mby0+aW1wb3J0cy51bmNo
ZWNrZWRBcHBlbmQoeyBXVEZNb3ZlKG1vZHVsZVN0cmluZyksIFdURk1vdmUoZmllbGRTdHJpbmcp
LCBraW5kLCBraW5kSW5kZXggfSk7Ci0gICAgfQotCi0gICAgbV9pbmZvLT5maXJzdEludGVybmFs
R2xvYmFsID0gbV9pbmZvLT5nbG9iYWxzLnNpemUoKTsKLSAgICByZXR1cm4geyB9OwotfQotCi1h
dXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbigpIC0+IFBhcnRpYWxSZXN1bHQKLXsKLSAg
ICB1aW50MzJfdCBjb3VudDsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQz
Mihjb3VudCksICJjYW4ndCBnZXQgRnVuY3Rpb24gc2VjdGlvbidzIGNvdW50Iik7Ci0gICAgV0FT
TV9QQVJTRVJfRkFJTF9JRihjb3VudCA+IG1heEZ1bmN0aW9ucywgIkZ1bmN0aW9uIHNlY3Rpb24n
cyBjb3VudCBpcyB0b28gYmlnICIsIGNvdW50LCAiIG1heGltdW0gIiwgbWF4RnVuY3Rpb25zKTsK
LSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmludGVybmFsRnVuY3Rpb25TaWduYXR1
cmVJbmRpY2VzLnRyeVJlc2VydmVDYXBhY2l0eShjb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91
Z2ggbWVtb3J5IGZvciAiLCBjb3VudCwgIiBGdW5jdGlvbiBzaWduYXR1cmVzIik7Ci0gICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkudHJ5UmVz
ZXJ2ZUNhcGFjaXR5KGNvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIs
IGNvdW50LCAiRnVuY3Rpb24gbG9jYXRpb25zIik7Ci0KLSAgICBmb3IgKHVpbnQzMl90IGkgPSAw
OyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICB1aW50MzJfdCB0eXBlTnVtYmVyOwotICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMih0eXBlTnVtYmVyKSwgImNhbid0
IGdldCAiLCBpLCAidGggRnVuY3Rpb24ncyB0eXBlIG51bWJlciIpOwotICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKHR5cGVOdW1iZXIgPj0gbV9pbmZvLT51c2VkU2lnbmF0dXJlcy5zaXplKCks
IGksICJ0aCBGdW5jdGlvbiB0eXBlIG51bWJlciBpcyBpbnZhbGlkICIsIHR5cGVOdW1iZXIpOwot
Ci0gICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gU2lnbmF0dXJlSW5mb3Jt
YXRpb246OmdldChtX2luZm8tPnVzZWRTaWduYXR1cmVzW3R5cGVOdW1iZXJdKTsKLSAgICAgICAg
Ly8gVGhlIENvZGUgc2VjdGlvbiBmaXhlcyB1cCBzdGFydCBhbmQgZW5kLgotICAgICAgICBzaXpl
X3Qgc3RhcnQgPSAwOwotICAgICAgICBzaXplX3QgZW5kID0gMDsKLSAgICAgICAgbV9pbmZvLT5p
bnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy51bmNoZWNrZWRBcHBlbmQoc2lnbmF0dXJl
SW5kZXgpOwotICAgICAgICBtX2luZm8tPmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS51bmNoZWNr
ZWRBcHBlbmQoeyBzdGFydCwgZW5kIH0pOworICAgIGlmIChPcHRpb25zOjp1c2VFYWdlcldlYkFz
c2VtYmx5TW9kdWxlSGFzaGluZygpKSB7CisgICAgICAgIFNIQTEgaGFzaGVyOworICAgICAgICBo
YXNoZXIuYWRkQnl0ZXMoc291cmNlKCksIGxlbmd0aCgpKTsKKyAgICAgICAgbV9pbmZvLT5uYW1l
U2VjdGlvbi0+c2V0SGFzaChoYXNoZXIuY29tcHV0ZUhleERpZ2VzdCgpKTsKICAgICB9CiAKICAg
ICByZXR1cm4geyB9OwogfQogCi1hdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VSZXNpemFibGVMaW1p
dHModWludDMyX3QmIGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+JiBtYXhpbXVtKSAt
PiBQYXJ0aWFsUmVzdWx0Ci17Ci0gICAgQVNTRVJUKCFtYXhpbXVtKTsKLQotICAgIHVpbnQ4X3Qg
ZmxhZ3M7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MShmbGFncyksICJj
YW4ndCBwYXJzZSByZXNpemFibGUgbGltaXRzIGZsYWdzIik7Ci0gICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VWYXJVSW50MzIoaW5pdGlhbCksICJjYW4ndCBwYXJzZSByZXNpemFibGUgbGlt
aXRzIGluaXRpYWwgcGFnZSBjb3VudCIpOwotCi0gICAgaWYgKGZsYWdzKSB7Ci0gICAgICAgIHVp
bnQzMl90IG1heGltdW1JbnQ7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFy
VUludDMyKG1heGltdW1JbnQpLCAiY2FuJ3QgcGFyc2UgcmVzaXphYmxlIGxpbWl0cyBtYXhpbXVt
IHBhZ2UgY291bnQiKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbml0aWFsID4gbWF4
aW11bUludCwgInJlc2l6YWJsZSBsaW1pdHMgaGFzIGEgaW5pdGlhbCBwYWdlIGNvdW50IG9mICIs
IGluaXRpYWwsICIgd2hpY2ggaXMgZ3JlYXRlciB0aGFuIGl0cyBtYXhpbXVtICIsIG1heGltdW1J
bnQpOwotICAgICAgICBtYXhpbXVtID0gbWF4aW11bUludDsKLSAgICB9Ci0KLSAgICByZXR1cm4g
eyB9OwotfQotCi1hdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VUYWJsZUhlbHBlcihib29sIGlzSW1w
b3J0KSAtPiBQYXJ0aWFsUmVzdWx0Ci17Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX3RhYmxl
Q291bnQgPiAwLCAiQ2Fubm90IGhhdmUgbW9yZSB0aGFuIG9uZSBUYWJsZSBmb3Igbm93Iik7Ci0K
LSAgICArK21fdGFibGVDb3VudDsKLQotICAgIGludDhfdCB0eXBlOwotICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXBhcnNlSW50Nyh0eXBlKSwgImNhbid0IHBhcnNlIFRhYmxlIHR5cGUiKTsKLSAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKHR5cGUgIT0gV2FzbTo6QW55ZnVuYywgIlRhYmxlIHR5cGUg
c2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAiLCB0eXBlKTsKLQotICAgIHVpbnQzMl90IGluaXRpYWw7
Ci0gICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bTsKLSAgICBQYXJ0aWFsUmVzdWx0
IGxpbWl0cyA9IHBhcnNlUmVzaXphYmxlTGltaXRzKGluaXRpYWwsIG1heGltdW0pOwotICAgIGlm
IChVTkxJS0VMWSghbGltaXRzKSkKLSAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFdURk1v
dmUobGltaXRzLmVycm9yKCkpKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluaXRpYWwgPiBt
YXhUYWJsZUVudHJpZXMsICJUYWJsZSdzIGluaXRpYWwgcGFnZSBjb3VudCBvZiAiLCBpbml0aWFs
LCAiIGlzIHRvbyBiaWcsIG1heGltdW0gIiwgbWF4VGFibGVFbnRyaWVzKTsKLQotICAgIEFTU0VS
VCghbWF4aW11bSB8fCAqbWF4aW11bSA+PSBpbml0aWFsKTsKLQotICAgIG1faW5mby0+dGFibGVJ
bmZvcm1hdGlvbiA9IFRhYmxlSW5mb3JtYXRpb24oaW5pdGlhbCwgbWF4aW11bSwgaXNJbXBvcnQp
OwotCi0gICAgcmV0dXJuIHsgfTsKLX0KLQotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlVGFibGUo
KSAtPiBQYXJ0aWFsUmVzdWx0Ci17Ci0gICAgdWludDMyX3QgY291bnQ7Ci0gICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoY291bnQpLCAiY2FuJ3QgZ2V0IFRhYmxlJ3MgY291
bnQiKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGNvdW50ID4gMSwgIlRhYmxlIGNvdW50IG9m
ICIsIGNvdW50LCAiIGlzIGludmFsaWQsIGF0IG1vc3QgMSBpcyBhbGxvd2VkIGZvciBub3ciKTsK
LQotICAgIGlmICghY291bnQpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBib29sIGlzSW1w
b3J0ID0gZmFsc2U7Ci0gICAgUGFydGlhbFJlc3VsdCByZXN1bHQgPSBwYXJzZVRhYmxlSGVscGVy
KGlzSW1wb3J0KTsKLSAgICBpZiAoVU5MSUtFTFkoIXJlc3VsdCkpCi0gICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChXVEZNb3ZlKHJlc3VsdC5lcnJvcigpKSk7Ci0KLSAgICByZXR1cm4geyB9
OwotfQotCi1hdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VNZW1vcnlIZWxwZXIoYm9vbCBpc0ltcG9y
dCkgLT4gUGFydGlhbFJlc3VsdAotewotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9tZW1vcnlD
b3VudCwgInRoZXJlIGNhbiBhdCBtb3N0IGJlIG9uZSBNZW1vcnkgc2VjdGlvbiBmb3Igbm93Iik7
Ci0KLSAgICArK21fbWVtb3J5Q291bnQ7Ci0KLSAgICBQYWdlQ291bnQgaW5pdGlhbFBhZ2VDb3Vu
dDsKLSAgICBQYWdlQ291bnQgbWF4aW11bVBhZ2VDb3VudDsKLSAgICB7Ci0gICAgICAgIHVpbnQz
Ml90IGluaXRpYWw7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW07Ci0g
ICAgICAgIFBhcnRpYWxSZXN1bHQgbGltaXRzID0gcGFyc2VSZXNpemFibGVMaW1pdHMoaW5pdGlh
bCwgbWF4aW11bSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghbGltaXRzKSkKLSAgICAgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZChXVEZNb3ZlKGxpbWl0cy5lcnJvcigpKSk7Ci0gICAgICAg
IEFTU0VSVCghbWF4aW11bSB8fCAqbWF4aW11bSA+PSBpbml0aWFsKTsKLSAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighUGFnZUNvdW50Ojppc1ZhbGlkKGluaXRpYWwpLCAiTWVtb3J5J3MgaW5p
dGlhbCBwYWdlIGNvdW50IG9mICIsIGluaXRpYWwsICIgaXMgaW52YWxpZCIpOwotCi0gICAgICAg
IGluaXRpYWxQYWdlQ291bnQgPSBQYWdlQ291bnQoaW5pdGlhbCk7Ci0KLSAgICAgICAgaWYgKG1h
eGltdW0pIHsKLSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIVBhZ2VDb3VudDo6aXNW
YWxpZCgqbWF4aW11bSksICJNZW1vcnkncyBtYXhpbXVtIHBhZ2UgY291bnQgb2YgIiwgKm1heGlt
dW0sICIgaXMgaW52YWxpZCIpOwotICAgICAgICAgICAgbWF4aW11bVBhZ2VDb3VudCA9IFBhZ2VD
b3VudCgqbWF4aW11bSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgQVNTRVJUKGluaXRpYWxQYWdl
Q291bnQpOwotICAgIEFTU0VSVCghbWF4aW11bVBhZ2VDb3VudCB8fCBtYXhpbXVtUGFnZUNvdW50
ID49IGluaXRpYWxQYWdlQ291bnQpOwotCi0gICAgbV9pbmZvLT5tZW1vcnkgPSBNZW1vcnlJbmZv
cm1hdGlvbihpbml0aWFsUGFnZUNvdW50LCBtYXhpbXVtUGFnZUNvdW50LCBpc0ltcG9ydCk7Ci0g
ICAgcmV0dXJuIHsgfTsKLX0KLQotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlTWVtb3J5KCkgLT4g
UGFydGlhbFJlc3VsdAotewotICAgIHVpbnQ4X3QgY291bnQ7Ci0gICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VWYXJVSW50MShjb3VudCksICJjYW4ndCBwYXJzZSBNZW1vcnkgc2VjdGlvbidz
IGNvdW50Iik7Ci0KLSAgICBpZiAoIWNvdW50KQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAg
V0FTTV9QQVJTRVJfRkFJTF9JRihjb3VudCAhPSAxLCAiTWVtb3J5IHNlY3Rpb24gaGFzIG1vcmUg
dGhhbiBvbmUgbWVtb3J5LCBXZWJBc3NlbWJseSBjdXJyZW50bHkgb25seSBhbGxvd3MgemVybyBv
ciBvbmUiKTsKLQotICAgIGJvb2wgaXNJbXBvcnQgPSBmYWxzZTsKLSAgICByZXR1cm4gcGFyc2VN
ZW1vcnlIZWxwZXIoaXNJbXBvcnQpOwotfQotCi1hdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VHbG9i
YWwoKSAtPiBQYXJ0aWFsUmVzdWx0Ci17Ci0gICAgdWludDMyX3QgZ2xvYmFsQ291bnQ7Ci0gICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZ2xvYmFsQ291bnQpLCAiY2FuJ3Qg
Z2V0IEdsb2JhbCBzZWN0aW9uJ3MgY291bnQiKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGds
b2JhbENvdW50ID4gbWF4R2xvYmFscywgIkdsb2JhbCBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJp
ZyAiLCBnbG9iYWxDb3VudCwgIiBtYXhpbXVtICIsIG1heEdsb2JhbHMpOwotICAgIHNpemVfdCB0
b3RhbEJ5dGVzID0gZ2xvYmFsQ291bnQgKyBtX2luZm8tPmZpcnN0SW50ZXJuYWxHbG9iYWw7Ci0g
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRigoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHRvdGFsQnl0ZXMp
IDwgZ2xvYmFsQ291bnQpIHx8ICFtX2luZm8tPmdsb2JhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KHRv
dGFsQnl0ZXMpLCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiLCB0b3RhbEJ5dGVzLCAiIGds
b2JhbHMiKTsKLQotICAgIGZvciAodWludDMyX3QgZ2xvYmFsSW5kZXggPSAwOyBnbG9iYWxJbmRl
eCA8IGdsb2JhbENvdW50OyArK2dsb2JhbEluZGV4KSB7Ci0gICAgICAgIEdsb2JhbCBnbG9iYWw7
Ci0gICAgICAgIHVpbnQ4X3QgaW5pdE9wY29kZTsKLQotICAgICAgICBXQVNNX0ZBSUxfSUZfSEVM
UEVSX0ZBSUxTKHBhcnNlR2xvYmFsVHlwZShnbG9iYWwpKTsKLSAgICAgICAgVHlwZSB0eXBlRm9y
SW5pdE9wY29kZTsKLSAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUluaXRF
eHByKGluaXRPcGNvZGUsIGdsb2JhbC5pbml0aWFsQml0c09ySW1wb3J0TnVtYmVyLCB0eXBlRm9y
SW5pdE9wY29kZSkpOwotICAgICAgICBpZiAoaW5pdE9wY29kZSA9PSBHZXRHbG9iYWwpCi0gICAg
ICAgICAgICBnbG9iYWwuaW5pdGlhbGl6YXRpb25UeXBlID0gR2xvYmFsOjpGcm9tR2xvYmFsSW1w
b3J0OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBnbG9iYWwuaW5pdGlhbGl6YXRpb25UeXBl
ID0gR2xvYmFsOjpGcm9tRXhwcmVzc2lvbjsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0
eXBlRm9ySW5pdE9wY29kZSAhPSBnbG9iYWwudHlwZSwgIkdsb2JhbCBpbml0X2V4cHIgb3Bjb2Rl
IG9mIHR5cGUgIiwgdHlwZUZvckluaXRPcGNvZGUsICIgZG9lc24ndCBtYXRjaCBnbG9iYWwncyB0
eXBlICIsIGdsb2JhbC50eXBlKTsKLQotICAgICAgICBtX2luZm8tPmdsb2JhbHMudW5jaGVja2Vk
QXBwZW5kKFdURk1vdmUoZ2xvYmFsKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsgfTsKLX0KLQot
YXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlRXhwb3J0KCkgLT4gUGFydGlhbFJlc3VsdAotewotICAg
IHVpbnQzMl90IGV4cG9ydENvdW50OwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFy
VUludDMyKGV4cG9ydENvdW50KSwgImNhbid0IGdldCBFeHBvcnQgc2VjdGlvbidzIGNvdW50Iik7
Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRihleHBvcnRDb3VudCA+IG1heEV4cG9ydHMsICJFeHBv
cnQgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgZXhwb3J0Q291bnQsICIgbWF4aW11bSAi
LCBtYXhFeHBvcnRzKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmV4cG9ydHMu
dHJ5UmVzZXJ2ZUNhcGFjaXR5KGV4cG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBt
ZW1vcnkgZm9yICIsIGV4cG9ydENvdW50LCAiIGV4cG9ydHMiKTsKLQotICAgIEhhc2hTZXQ8U3Ry
aW5nPiBleHBvcnROYW1lczsKLSAgICBmb3IgKHVpbnQzMl90IGV4cG9ydE51bWJlciA9IDA7IGV4
cG9ydE51bWJlciA8IGV4cG9ydENvdW50OyArK2V4cG9ydE51bWJlcikgewotICAgICAgICB1aW50
MzJfdCBmaWVsZExlbjsKLSAgICAgICAgTmFtZSBmaWVsZFN0cmluZzsKLSAgICAgICAgRXh0ZXJu
YWxLaW5kIGtpbmQ7Ci0gICAgICAgIHVuc2lnbmVkIGtpbmRJbmRleDsKLQotICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihmaWVsZExlbiksICJjYW4ndCBnZXQgIiwg
ZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0J3MgZmllbGQgbmFtZSBsZW5ndGgiKTsKLSAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighY29uc3VtZVVURjhTdHJpbmcoZmllbGRTdHJpbmcsIGZpZWxk
TGVuKSwgImNhbid0IGdldCAiLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQncyBmaWVsZCBuYW1l
IG9mIGxlbmd0aCAiLCBmaWVsZExlbik7Ci0gICAgICAgIFN0cmluZyBmaWVsZE5hbWUgPSBTdHJp
bmc6OmZyb21VVEY4KGZpZWxkU3RyaW5nKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihl
eHBvcnROYW1lcy5jb250YWlucyhmaWVsZE5hbWUpLCAiZHVwbGljYXRlIGV4cG9ydDogJyIsIGZp
ZWxkU3RyaW5nLCAiJyIpOwotICAgICAgICBleHBvcnROYW1lcy5hZGQoZmllbGROYW1lKTsKLQot
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUV4dGVybmFsS2luZChraW5kKSwgImNh
bid0IGdldCAiLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQncyBraW5kLCBuYW1lZCAnIiwgZmll
bGRTdHJpbmcsICInIik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUlu
dDMyKGtpbmRJbmRleCksICJjYW4ndCBnZXQgIiwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0J3Mg
a2luZCBpbmRleCwgbmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOwotICAgICAgICBzd2l0Y2gg
KGtpbmQpIHsKLSAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6OkZ1bmN0aW9uOiB7Ci0gICAgICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGtpbmRJbmRleCA+PSBtX2luZm8tPmZ1bmN0aW9uSW5k
ZXhTcGFjZVNpemUoKSwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0IGhhcyBpbnZhbGlkIGZ1bmN0
aW9uIG51bWJlciAiLCBraW5kSW5kZXgsICIgaXQgZXhjZWVkcyB0aGUgZnVuY3Rpb24gaW5kZXgg
c3BhY2UgIiwgbV9pbmZvLT5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCksICIsIG5hbWVkICciLCBm
aWVsZFN0cmluZywgIiciKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgRXh0ZXJuYWxLaW5kOjpUYWJsZTogewotICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRihraW5kSW5kZXggPj0gbV90YWJsZUNvdW50LCAiY2FuJ3QgZXhwb3J0IFRhYmxlICIsIGtp
bmRJbmRleCwgIiB0aGVyZSBhcmUgIiwgbV90YWJsZUNvdW50LCAiIFRhYmxlcyIpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6Ok1lbW9y
eTogewotICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5tZW1vcnksICJj
YW4ndCBleHBvcnQgYSBub24tZXhpc3RlbnQgTWVtb3J5Iik7Ci0gICAgICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKGtpbmRJbmRleCwgImNhbid0IGV4cG9ydCBNZW1vcnkgIiwga2luZEluZGV4
LCAiIG9ubHkgb25lIFRhYmxlIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQiKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpHbG9iYWw6IHsK
LSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoa2luZEluZGV4ID49IG1faW5mby0+Z2xv
YmFscy5zaXplKCksIGV4cG9ydE51bWJlciwgInRoIEV4cG9ydCBoYXMgaW52YWxpZCBnbG9iYWwg
bnVtYmVyICIsIGtpbmRJbmRleCwgIiBpdCBleGNlZWRzIHRoZSBnbG9iYWxzIGNvdW50ICIsIG1f
aW5mby0+Z2xvYmFscy5zaXplKCksICIsIG5hbWVkICciLCBmaWVsZFN0cmluZywgIiciKTsKLSAg
ICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9pbmZvLT5nbG9iYWxzW2tpbmRJbmRleF0u
bXV0YWJpbGl0eSAhPSBHbG9iYWw6OkltbXV0YWJsZSwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0
IGlzbid0IGltbXV0YWJsZSwgbmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIG1faW5mby0+ZXhwb3J0
cy51bmNoZWNrZWRBcHBlbmQoeyBXVEZNb3ZlKGZpZWxkU3RyaW5nKSwga2luZCwga2luZEluZGV4
IH0pOwotICAgIH0KLQotICAgIHJldHVybiB7IH07Ci19Ci0KLWF1dG8gTW9kdWxlUGFyc2VyOjpw
YXJzZVN0YXJ0KCkgLT4gUGFydGlhbFJlc3VsdAotewotICAgIHVpbnQzMl90IHN0YXJ0RnVuY3Rp
b25JbmRleDsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihzdGFydEZ1
bmN0aW9uSW5kZXgpLCAiY2FuJ3QgZ2V0IFN0YXJ0IGluZGV4Iik7Ci0gICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihzdGFydEZ1bmN0aW9uSW5kZXggPj0gbV9pbmZvLT5mdW5jdGlvbkluZGV4U3BhY2VT
aXplKCksICJTdGFydCBpbmRleCAiLCBzdGFydEZ1bmN0aW9uSW5kZXgsICIgZXhjZWVkcyBmdW5j
dGlvbiBpbmRleCBzcGFjZSAiLCBtX2luZm8tPmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7Ci0g
ICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX2luZm8tPnNpZ25hdHVyZUluZGV4
RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXgpOwotICAgIGNvbnN0IFNp
Z25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJ
bmRleCk7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRihzaWduYXR1cmUuYXJndW1lbnRDb3VudCgp
LCAiU3RhcnQgZnVuY3Rpb24gY2FuJ3QgaGF2ZSBhcmd1bWVudHMiKTsKLSAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKHNpZ25hdHVyZS5yZXR1cm5UeXBlKCkgIT0gVm9pZCwgIlN0YXJ0IGZ1bmN0aW9u
IGNhbid0IHJldHVybiBhIHZhbHVlIik7Ci0gICAgbV9pbmZvLT5zdGFydEZ1bmN0aW9uSW5kZXhT
cGFjZSA9IHN0YXJ0RnVuY3Rpb25JbmRleDsKLSAgICByZXR1cm4geyB9OwotfQotCi1hdXRvIE1v
ZHVsZVBhcnNlcjo6cGFyc2VFbGVtZW50KCkgLT4gUGFydGlhbFJlc3VsdAotewotICAgIHVpbnQz
Ml90IGVsZW1lbnRDb3VudDsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQz
MihlbGVtZW50Q291bnQpLCAiY2FuJ3QgZ2V0IEVsZW1lbnQgc2VjdGlvbidzIGNvdW50Iik7Ci0g
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihlbGVtZW50Q291bnQgPiBtYXhUYWJsZUVudHJpZXMsICJF
bGVtZW50IHNlY3Rpb24ncyBjb3VudCBpcyB0b28gYmlnICIsIGVsZW1lbnRDb3VudCwgIiBtYXhp
bXVtICIsIG1heFRhYmxlRW50cmllcyk7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZv
LT5lbGVtZW50cy50cnlSZXNlcnZlQ2FwYWNpdHkoZWxlbWVudENvdW50KSwgImNhbid0IGFsbG9j
YXRlIG1lbW9yeSBmb3IgIiwgZWxlbWVudENvdW50LCAiIEVsZW1lbnRzIik7Ci0gICAgZm9yICh1
bnNpZ25lZCBlbGVtZW50TnVtID0gMDsgZWxlbWVudE51bSA8IGVsZW1lbnRDb3VudDsgKytlbGVt
ZW50TnVtKSB7Ci0gICAgICAgIHVpbnQzMl90IHRhYmxlSW5kZXg7Ci0gICAgICAgIHVpbnQ2NF90
IGluaXRFeHByQml0czsKLSAgICAgICAgdWludDhfdCBpbml0T3Bjb2RlOwotICAgICAgICB1aW50
MzJfdCBpbmRleENvdW50OwotCi0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFy
VUludDMyKHRhYmxlSW5kZXgpLCAiY2FuJ3QgZ2V0ICIsIGVsZW1lbnROdW0sICJ0aCBFbGVtZW50
IHRhYmxlIGluZGV4Iik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYodGFibGVJbmRleCA+
PSBtX3RhYmxlQ291bnQsICJFbGVtZW50IHNlY3Rpb24gZm9yIFRhYmxlICIsIHRhYmxlSW5kZXgs
ICIgZXhjZWVkcyBhdmFpbGFibGUgVGFibGUgIiwgbV90YWJsZUNvdW50KTsKLSAgICAgICAgVHlw
ZSBpbml0RXhwclR5cGU7Ci0gICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VJ
bml0RXhwcihpbml0T3Bjb2RlLCBpbml0RXhwckJpdHMsIGluaXRFeHByVHlwZSkpOwotICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluaXRFeHByVHlwZSAhPSBJMzIsICJFbGVtZW50IGluaXRf
ZXhwciBtdXN0IHByb2R1Y2UgYW4gaTMyIik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlVmFyVUludDMyKGluZGV4Q291bnQpLCAiY2FuJ3QgZ2V0ICIsIGVsZW1lbnROdW0sICJ0
aCBpbmRleCBjb3VudCBmb3IgRWxlbWVudCBzZWN0aW9uIik7Ci0gICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoaW5kZXhDb3VudCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4
KCksICJFbGVtZW50IHNlY3Rpb24ncyAiLCBlbGVtZW50TnVtLCAidGggaW5kZXggY291bnQgaXMg
dG9vIGJpZyAiLCBpbmRleENvdW50KTsKLQotICAgICAgICBBU1NFUlQoISFtX2luZm8tPnRhYmxl
SW5mb3JtYXRpb24pOwotCi0gICAgICAgIEVsZW1lbnQgZWxlbWVudChtYWtlSTMySW5pdEV4cHIo
aW5pdE9wY29kZSwgaW5pdEV4cHJCaXRzKSk7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IWVsZW1lbnQuZnVuY3Rpb25JbmRpY2VzLnRyeVJlc2VydmVDYXBhY2l0eShpbmRleENvdW50KSwg
ImNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgIiwgaW5kZXhDb3VudCwgIiBFbGVtZW50IGluZGlj
ZXMiKTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBpbmRleENv
dW50OyArK2luZGV4KSB7Ci0gICAgICAgICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4OwotICAg
ICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZnVuY3Rpb25JbmRl
eCksICJjYW4ndCBnZXQgRWxlbWVudCBzZWN0aW9uJ3MgIiwgZWxlbWVudE51bSwgInRoIGVsZW1l
bnQncyAiLCBpbmRleCwgInRoIGluZGV4Iik7Ci0gICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKGZ1bmN0aW9uSW5kZXggPj0gbV9pbmZvLT5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCksICJF
bGVtZW50IHNlY3Rpb24ncyAiLCBlbGVtZW50TnVtLCAidGggZWxlbWVudCdzICIsIGluZGV4LCAi
dGggaW5kZXggaXMgIiwgZnVuY3Rpb25JbmRleCwgIiB3aGljaCBleGNlZWRzIHRoZSBmdW5jdGlv
biBpbmRleCBzcGFjZSBzaXplIG9mICIsIG1faW5mby0+ZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgp
KTsKLQotICAgICAgICAgICAgZWxlbWVudC5mdW5jdGlvbkluZGljZXMudW5jaGVja2VkQXBwZW5k
KGZ1bmN0aW9uSW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9pbmZvLT5lbGVtZW50cy51
bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShlbGVtZW50KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsg
fTsKLX0KLQotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlQ29kZSgpIC0+IFBhcnRpYWxSZXN1bHQK
LXsKLSAgICB1aW50MzJfdCBjb3VudDsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZh
clVJbnQzMihjb3VudCksICJjYW4ndCBnZXQgQ29kZSBzZWN0aW9uJ3MgY291bnQiKTsKLSAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKGNvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+
OjptYXgoKSwgIkNvZGUgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgY291bnQpOwotICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoY291bnQgIT0gbV9pbmZvLT5mdW5jdGlvbkxvY2F0aW9uSW5C
aW5hcnkuc2l6ZSgpLCAiQ29kZSBzZWN0aW9uIGNvdW50ICIsIGNvdW50LCAiIGV4Y2VlZHMgdGhl
IGRlY2xhcmVkIG51bWJlciBvZiBmdW5jdGlvbnMgIiwgbV9pbmZvLT5mdW5jdGlvbkxvY2F0aW9u
SW5CaW5hcnkuc2l6ZSgpKTsKLQotICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsg
KytpKSB7Ci0gICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uU2l6ZTsKLSAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZnVuY3Rpb25TaXplKSwgImNhbid0IGdldCAiLCBp
LCAidGggQ29kZSBmdW5jdGlvbidzIHNpemUiKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RihmdW5jdGlvblNpemUgPiBsZW5ndGgoKSwgIkNvZGUgZnVuY3Rpb24ncyBzaXplICIsIGZ1bmN0
aW9uU2l6ZSwgIiBleGNlZWRzIHRoZSBtb2R1bGUncyBzaXplICIsIGxlbmd0aCgpKTsKLSAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvblNpemUgPiBsZW5ndGgoKSAtIG1fb2Zmc2V0
LCAiQ29kZSBmdW5jdGlvbidzIHNpemUgIiwgZnVuY3Rpb25TaXplLCAiIGV4Y2VlZHMgdGhlIG1v
ZHVsZSdzIHJlbWFpbmluZyBzaXplIiwgbGVuZ3RoKCkgLSBtX29mZnNldCk7Ci0gICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25TaXplID4gbWF4RnVuY3Rpb25TaXplLCAiQ29kZSBm
dW5jdGlvbidzIHNpemUgIiwgZnVuY3Rpb25TaXplLCAiIGlzIHRvbyBiaWciKTsKLQotICAgICAg
ICBtX2luZm8tPmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtpXS5zdGFydCA9IG1fb2Zmc2V0Owot
ICAgICAgICBtX2luZm8tPmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtpXS5lbmQgPSBtX29mZnNl
dCArIGZ1bmN0aW9uU2l6ZTsKLSAgICAgICAgbV9vZmZzZXQgPSBtX2luZm8tPmZ1bmN0aW9uTG9j
YXRpb25JbkJpbmFyeVtpXS5lbmQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsgfTsKLX0KLQotYXV0
byBNb2R1bGVQYXJzZXI6OnBhcnNlSW5pdEV4cHIodWludDhfdCYgb3Bjb2RlLCB1aW50NjRfdCYg
Yml0c09ySW1wb3J0TnVtYmVyLCBUeXBlJiByZXN1bHRUeXBlKSAtPiBQYXJ0aWFsUmVzdWx0Ci17
Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VVSW50OChvcGNvZGUpLCAiY2FuJ3QgZ2V0
IGluaXRfZXhwcidzIG9wY29kZSIpOwotCi0gICAgc3dpdGNoIChvcGNvZGUpIHsKLSAgICBjYXNl
IEkzMkNvbnN0OiB7Ci0gICAgICAgIGludDMyX3QgY29uc3RhbnQ7Ci0gICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIXBhcnNlVmFySW50MzIoY29uc3RhbnQpLCAiY2FuJ3QgZ2V0IGNvbnN0YW50
IHZhbHVlIGZvciBpbml0X2V4cHIncyBpMzIuY29uc3QiKTsKLSAgICAgICAgYml0c09ySW1wb3J0
TnVtYmVyID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGNvbnN0YW50KTsKLSAgICAgICAgcmVzdWx0
VHlwZSA9IEkzMjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBJNjRDb25zdDog
ewotICAgICAgICBpbnQ2NF90IGNvbnN0YW50OwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFwYXJzZVZhckludDY0KGNvbnN0YW50KSwgImNhbid0IGdldCBjb25zdGFudCB2YWx1ZSBmb3Ig
aW5pdF9leHByJ3MgaTY0LmNvbnN0Iik7Ci0gICAgICAgIGJpdHNPckltcG9ydE51bWJlciA9IGNv
bnN0YW50OwotICAgICAgICByZXN1bHRUeXBlID0gSTY0OwotICAgICAgICBicmVhazsKLSAgICB9
Ci0KLSAgICBjYXNlIEYzMkNvbnN0OiB7Ci0gICAgICAgIHVpbnQzMl90IGNvbnN0YW50OwotICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQzMihjb25zdGFudCksICJjYW4ndCBn
ZXQgY29uc3RhbnQgdmFsdWUgZm9yIGluaXRfZXhwcidzIGYzMi5jb25zdCIpOwotICAgICAgICBi
aXRzT3JJbXBvcnROdW1iZXIgPSBjb25zdGFudDsKLSAgICAgICAgcmVzdWx0VHlwZSA9IEYzMjsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBGNjRDb25zdDogewotICAgICAgICB1
aW50NjRfdCBjb25zdGFudDsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VVSW50
NjQoY29uc3RhbnQpLCAiY2FuJ3QgZ2V0IGNvbnN0YW50IHZhbHVlIGZvciBpbml0X2V4cHIncyBm
NjQuY29uc3QiKTsKLSAgICAgICAgYml0c09ySW1wb3J0TnVtYmVyID0gY29uc3RhbnQ7Ci0gICAg
ICAgIHJlc3VsdFR5cGUgPSBGNjQ7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2Ug
R2V0R2xvYmFsOiB7Ci0gICAgICAgIHVpbnQzMl90IGluZGV4OwotICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbmRleCksICJjYW4ndCBnZXQgZ2V0X2dsb2JhbCdz
IGluZGV4Iik7Ci0KLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbmRleCA+PSBtX2luZm8t
Pmdsb2JhbHMuc2l6ZSgpLCAiZ2V0X2dsb2JhbCdzIGluZGV4ICIsIGluZGV4LCAiIGV4Y2VlZHMg
dGhlIG51bWJlciBvZiBnbG9iYWxzICIsIG1faW5mby0+Z2xvYmFscy5zaXplKCkpOwotICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluZGV4ID49IG1faW5mby0+Zmlyc3RJbnRlcm5hbEdsb2Jh
bCwgImdldF9nbG9iYWwgaW1wb3J0IGtpbmQgaW5kZXggIiwgaW5kZXgsICIgZXhjZWVkcyB0aGUg
Zmlyc3QgaW50ZXJuYWwgZ2xvYmFsICIsIG1faW5mby0+Zmlyc3RJbnRlcm5hbEdsb2JhbCk7Ci0K
LSAgICAgICAgQVNTRVJUKG1faW5mby0+Z2xvYmFsc1tpbmRleF0ubXV0YWJpbGl0eSA9PSBHbG9i
YWw6OkltbXV0YWJsZSk7Ci0gICAgICAgIHJlc3VsdFR5cGUgPSBtX2luZm8tPmdsb2JhbHNbaW5k
ZXhdLnR5cGU7Ci0gICAgICAgIGJpdHNPckltcG9ydE51bWJlciA9IGluZGV4OwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KHRydWUsICJ1bmtub3duIGluaXRfZXhwciBvcGNvZGUgIiwgb3Bjb2RlKTsKLSAgICB9Ci0KLSAg
ICB1aW50OF90IGVuZE9wY29kZTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ4
KGVuZE9wY29kZSksICJjYW4ndCBnZXQgaW5pdF9leHByJ3MgZW5kIG9wY29kZSIpOwotICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoZW5kT3Bjb2RlICE9IE9wVHlwZTo6RW5kLCAiaW5pdF9leHByIHNo
b3VsZCBlbmQgd2l0aCBlbmQsIGVuZGVkIHdpdGggIiwgZW5kT3Bjb2RlKTsKLQotICAgIHJldHVy
biB7IH07Ci19Ci0KLWF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZUdsb2JhbFR5cGUoR2xvYmFsJiBn
bG9iYWwpIC0+IFBhcnRpYWxSZXN1bHQKLXsKLSAgICB1aW50OF90IG11dGFiaWxpdHk7Ci0gICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYWx1ZVR5cGUoZ2xvYmFsLnR5cGUpLCAiY2FuJ3Qg
Z2V0IEdsb2JhbCdzIHZhbHVlIHR5cGUiKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJz
ZVZhclVJbnQxKG11dGFiaWxpdHkpLCAiY2FuJ3QgZ2V0IEdsb2JhbCB0eXBlJ3MgbXV0YWJpbGl0
eSIpOwotICAgIGdsb2JhbC5tdXRhYmlsaXR5ID0gc3RhdGljX2Nhc3Q8R2xvYmFsOjpNdXRhYmls
aXR5PihtdXRhYmlsaXR5KTsKLSAgICByZXR1cm4geyB9OwotfQotCi1hdXRvIE1vZHVsZVBhcnNl
cjo6cGFyc2VEYXRhKCkgLT4gUGFydGlhbFJlc3VsdAotewotICAgIHVpbnQzMl90IHNlZ21lbnRD
b3VudDsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihzZWdtZW50Q291
bnQpLCAiY2FuJ3QgZ2V0IERhdGEgc2VjdGlvbidzIGNvdW50Iik7Ci0gICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihzZWdtZW50Q291bnQgPiBtYXhEYXRhU2VnbWVudHMsICJEYXRhIHNlY3Rpb24ncyBj
b3VudCBpcyB0b28gYmlnICIsIHNlZ21lbnRDb3VudCwgIiBtYXhpbXVtICIsIG1heERhdGFTZWdt
ZW50cyk7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5kYXRhLnRyeVJlc2VydmVD
YXBhY2l0eShzZWdtZW50Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3Ig
RGF0YSBzZWN0aW9uJ3MgIiwgc2VnbWVudENvdW50LCAiIHNlZ21lbnRzIik7Ci0KLSAgICBmb3Ig
KHVpbnQzMl90IHNlZ21lbnROdW1iZXIgPSAwOyBzZWdtZW50TnVtYmVyIDwgc2VnbWVudENvdW50
OyArK3NlZ21lbnROdW1iZXIpIHsKLSAgICAgICAgdWludDMyX3QgbWVtb3J5SW5kZXg7Ci0gICAg
ICAgIHVpbnQ2NF90IGluaXRFeHByQml0czsKLSAgICAgICAgdWludDhfdCBpbml0T3Bjb2RlOwot
ICAgICAgICB1aW50MzJfdCBkYXRhQnl0ZUxlbmd0aDsKLQotICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFwYXJzZVZhclVJbnQzMihtZW1vcnlJbmRleCksICJjYW4ndCBnZXQgIiwgc2VnbWVu
dE51bWJlciwgInRoIERhdGEgc2VnbWVudCdzIGluZGV4Iik7Ci0gICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYobWVtb3J5SW5kZXggPj0gbV9tZW1vcnlDb3VudCwgc2VnbWVudE51bWJlciwgInRo
IERhdGEgc2VnbWVudCBoYXMgaW5kZXggIiwgbWVtb3J5SW5kZXgsICIgd2hpY2ggZXhjZWVkcyB0
aGUgbnVtYmVyIG9mIE1lbW9yaWVzICIsIG1fbWVtb3J5Q291bnQpOwotICAgICAgICBUeXBlIGlu
aXRFeHByVHlwZTsKLSAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUluaXRF
eHByKGluaXRPcGNvZGUsIGluaXRFeHByQml0cywgaW5pdEV4cHJUeXBlKSk7Ci0gICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoaW5pdEV4cHJUeXBlICE9IEkzMiwgc2VnbWVudE51bWJlciwgInRo
IERhdGEgc2VnbWVudCdzIGluaXRfZXhwciBtdXN0IHByb2R1Y2UgYW4gaTMyIik7Ci0gICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGRhdGFCeXRlTGVuZ3RoKSwgImNh
bid0IGdldCAiLCBzZWdtZW50TnVtYmVyLCAidGggRGF0YSBzZWdtZW50J3MgZGF0YSBieXRlIGxl
bmd0aCIpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGRhdGFCeXRlTGVuZ3RoID4gbWF4
TW9kdWxlU2l6ZSwgc2VnbWVudE51bWJlciwgInRoIERhdGEgc2VnbWVudCdzIGRhdGEgYnl0ZSBs
ZW5ndGggaXMgdG9vIGJpZyAiLCBkYXRhQnl0ZUxlbmd0aCwgIiBtYXhpbXVtICIsIG1heE1vZHVs
ZVNpemUpOwotCi0gICAgICAgIFNlZ21lbnQqIHNlZ21lbnQgPSBTZWdtZW50OjpjcmVhdGUobWFr
ZUkzMkluaXRFeHByKGluaXRPcGNvZGUsIGluaXRFeHByQml0cyksIGRhdGFCeXRlTGVuZ3RoKTsK
LSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighc2VnbWVudCwgImNhbid0IGFsbG9jYXRlIGVu
b3VnaCBtZW1vcnkgZm9yICIsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQgb2Ygc2l6
ZSAiLCBkYXRhQnl0ZUxlbmd0aCk7Ci0gICAgICAgIG1faW5mby0+ZGF0YS51bmNoZWNrZWRBcHBl
bmQoU2VnbWVudDo6YWRvcHRQdHIoc2VnbWVudCkpOwotICAgICAgICBmb3IgKHVpbnQzMl90IGRh
dGFCeXRlID0gMDsgZGF0YUJ5dGUgPCBkYXRhQnl0ZUxlbmd0aDsgKytkYXRhQnl0ZSkgewotICAg
ICAgICAgICAgdWludDhfdCBieXRlOwotICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
cGFyc2VVSW50OChieXRlKSwgImNhbid0IGdldCAiLCBkYXRhQnl0ZSwgInRoIGRhdGEgYnl0ZSBm
cm9tICIsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQiKTsKLSAgICAgICAgICAgIHNl
Z21lbnQtPmJ5dGUoZGF0YUJ5dGUpID0gYnl0ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1
cm4geyB9OwotfQotICAgIAotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlQ3VzdG9tKHVpbnQzMl90
IHNlY3Rpb25MZW5ndGgpIC0+IFBhcnRpYWxSZXN1bHQKLXsKLSAgICBjb25zdCB1aW50MzJfdCBj
dXN0b21TZWN0aW9uU3RhcnRPZmZzZXQgPSBtX29mZnNldDsKLQotICAgIEN1c3RvbVNlY3Rpb24g
c2VjdGlvbjsKLSAgICB1aW50MzJfdCBjdXN0b21TZWN0aW9uTnVtYmVyID0gbV9pbmZvLT5jdXN0
b21TZWN0aW9ucy5zaXplKCkgKyAxOwotICAgIHVpbnQzMl90IG5hbWVMZW47Ci0gICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighbV9pbmZvLT5jdXN0b21TZWN0aW9ucy50cnlSZXNlcnZlQ2FwYWNpdHko
Y3VzdG9tU2VjdGlvbk51bWJlciksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAi
LCBjdXN0b21TZWN0aW9uTnVtYmVyLCAidGggY3VzdG9tIHNlY3Rpb24iKTsKLSAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihuYW1lTGVuKSwgImNhbid0IGdldCAiLCBjdXN0
b21TZWN0aW9uTnVtYmVyLCAidGggY3VzdG9tIHNlY3Rpb24ncyBuYW1lIGxlbmd0aCIpOwotICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVVVEY4U3RyaW5nKHNlY3Rpb24ubmFtZSwgbmFt
ZUxlbiksICJuYW1lTGVuIGdldCAiLCBjdXN0b21TZWN0aW9uTnVtYmVyLCAidGggY3VzdG9tIHNl
Y3Rpb24ncyBuYW1lIG9mIGxlbmd0aCAiLCBuYW1lTGVuKTsKLQotICAgIHVpbnQzMl90IHBheWxv
YWRCeXRlcyA9IHNlY3Rpb25MZW5ndGggLSAobV9vZmZzZXQgLSBjdXN0b21TZWN0aW9uU3RhcnRP
ZmZzZXQpOwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXNlY3Rpb24ucGF5bG9hZC50cnlSZXNl
cnZlQ2FwYWNpdHkocGF5bG9hZEJ5dGVzKSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkg
Zm9yICIsIGN1c3RvbVNlY3Rpb25OdW1iZXIsICJ0aCBjdXN0b20gc2VjdGlvbidzICIsIHBheWxv
YWRCeXRlcywgIiBieXRlcyIpOwotICAgIGZvciAodWludDMyX3QgYnl0ZU51bWJlciA9IDA7IGJ5
dGVOdW1iZXIgPCBwYXlsb2FkQnl0ZXM7ICsrYnl0ZU51bWJlcikgewotICAgICAgICB1aW50OF90
IGJ5dGU7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUludDgoYnl0ZSksICJj
YW4ndCBnZXQgIiwgYnl0ZU51bWJlciwgInRoIGRhdGEgYnl0ZSBmcm9tICIsIGN1c3RvbVNlY3Rp
b25OdW1iZXIsICJ0aCBjdXN0b20gc2VjdGlvbiIpOwotICAgICAgICBzZWN0aW9uLnBheWxvYWQu
dW5jaGVja2VkQXBwZW5kKGJ5dGUpOwotICAgIH0KLQotICAgIE5hbWUgbmFtZU5hbWUgPSB7ICdu
JywgJ2EnLCAnbScsICdlJyB9OwotICAgIGlmIChzZWN0aW9uLm5hbWUgPT0gbmFtZU5hbWUpIHsK
LSAgICAgICAgTmFtZVNlY3Rpb25QYXJzZXIgbmFtZVNlY3Rpb25QYXJzZXIoc2VjdGlvbi5wYXls
b2FkLmJlZ2luKCksIHNlY3Rpb24ucGF5bG9hZC5zaXplKCksIG1faW5mbyk7Ci0gICAgICAgIGlm
IChhdXRvIG5hbWVTZWN0aW9uID0gbmFtZVNlY3Rpb25QYXJzZXIucGFyc2UoKSkKLSAgICAgICAg
ICAgIG1faW5mby0+bmFtZVNlY3Rpb24gPSBXVEZNb3ZlKCpuYW1lU2VjdGlvbik7Ci0gICAgfQot
Ci0gICAgbV9pbmZvLT5jdXN0b21TZWN0aW9ucy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShzZWN0
aW9uKSk7Ci0KLSAgICByZXR1cm4geyB9OwotfQotCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2Fz
bQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oCmluZGV4IGE2NTFiZTE3Y2UyM2I4NWZiYjk3YmJi
Njg1NzAzYjM5YjY0YjcyYzQuLmQzM2I3Nzk1MzM3M2RiMjdmMTUxOTlkOTgwNDA4MGYwOTI5NmVk
YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJz
ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgK
QEAgLTQ2LDIxICs0Niw3IEBAIGNsYXNzIE1vZHVsZVBhcnNlciA6IHB1YmxpYyBQYXJzZXI8dm9p
ZD4gewogICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2UoKTsKIAogcHJpdmF0ZToK
LQotI2RlZmluZSBXQVNNX1NFQ1RJT05fREVDTEFSRV9QQVJTRVIoTkFNRSwgSUQsIERFU0NSSVBU
SU9OKSBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZSAjIyBOQU1FKCk7Ci0g
ICAgRk9SX0VBQ0hfS05PV05fV0FTTV9TRUNUSU9OKFdBU01fU0VDVElPTl9ERUNMQVJFX1BBUlNF
UikKLSN1bmRlZiBXQVNNX1NFQ1RJT05fREVDTEFSRV9QQVJTRVIKLQotICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlQ3VzdG9tKHVpbnQzMl90KTsKLSAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUdsb2JhbFR5cGUoR2xvYmFsJik7Ci0gICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VNZW1vcnlIZWxwZXIoYm9vbCBp
c0ltcG9ydCk7Ci0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VUYWJs
ZUhlbHBlcihib29sIGlzSW1wb3J0KTsKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBwYXJzZVJlc2l6YWJsZUxpbWl0cyh1aW50MzJfdCYgaW5pdGlhbCwgc3RkOjpvcHRpb25h
bDx1aW50MzJfdD4mIG1heGltdW0pOwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIHBhcnNlSW5pdEV4cHIodWludDhfdCYsIHVpbnQ2NF90JiwgVHlwZSYgaW5pdEV4cHJUeXBl
KTsKLQogICAgIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4gbV9pbmZvOwotICAgIHVpbnQzMl90IG1f
bWVtb3J5Q291bnQgeyAwIH07Ci0gICAgdWludDMyX3QgbV90YWJsZUNvdW50IHsgMCB9OwogfTsK
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21OYW1lU2VjdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU5hbWVTZWN0aW9uLmgKaW5kZXggN2MwMmYyZjQxOTc3MDVhYzhiZWVlZjQ0MTg5OTBk
MjhlZTM0ZjA4NC4uZmU2M2NmNTU0NzM2NmZjMTc0MGMxZjBjNzBiYTgxYmU3NTM2YTg4ZSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU5hbWVTZWN0aW9uLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU5hbWVTZWN0aW9uLmgKQEAgLTM2LDEx
ICszNiwyMCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCiBzdHJ1Y3QgTmFt
ZVNlY3Rpb24gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TmFtZVNlY3Rpb24+IHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShOYW1lU2VjdGlvbik7Ci0KIHB1YmxpYzoKLSAgICBOYW1l
U2VjdGlvbihjb25zdCBzdGQ6Om9wdGlvbmFsPENTdHJpbmc+ICZoYXNoKQotICAgICAgICA6IG1v
ZHVsZUhhc2goaGFzaCA/IGhhc2gtPmxlbmd0aCgpIDogMykKKyAgICBOYW1lU2VjdGlvbigpCisg
ICAgeworICAgICAgICBzZXRIYXNoKHN0ZDo6bnVsbG9wdCk7CisgICAgfQorCisgICAgc3RhdGlj
IFJlZjxOYW1lU2VjdGlvbj4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IE5hbWVTZWN0aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIHNldEhhc2goY29uc3Qgc3Rk
OjpvcHRpb25hbDxDU3RyaW5nPiAmaGFzaCkKICAgICB7CisgICAgICAgIG1vZHVsZUhhc2ggPSBO
YW1lKGhhc2ggPyBoYXNoLT5sZW5ndGgoKSA6IDMpOwogICAgICAgICBpZiAoaGFzaCkgewogICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBoYXNoLT5sZW5ndGgoKTsgKytpKQogICAg
ICAgICAgICAgICAgIG1vZHVsZUhhc2hbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90PigqKGhhc2gt
PmRhdGEoKSArIGkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21OYW1lU2VjdGlvblBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TmFtZVNlY3Rpb25QYXJzZXIuY3BwCmluZGV4IDczMzk2MjE1Y2Y1OGJjNTI2YjM0OGNjMGE4OGM3
MTNkNGRlYzU5NzcuLjVlYmRjMGNjYWU0MDdhMmI5YjlhM2I5MWY2ZWNhNTgyNWMxMmExZWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21OYW1lU2VjdGlvblBhcnNl
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU5hbWVTZWN0aW9uUGFy
c2VyLmNwcApAQCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20g
ewogCiBhdXRvIE5hbWVTZWN0aW9uUGFyc2VyOjpwYXJzZSgpIC0+IFJlc3VsdAogewotICAgIFJl
ZlB0cjxOYW1lU2VjdGlvbj4gbmFtZVNlY3Rpb24oYWRvcHRSZWYoKm5ldyBOYW1lU2VjdGlvbiht
X2luZm8uaGFzaCkpKTsKKyAgICBSZWY8TmFtZVNlY3Rpb24+IG5hbWVTZWN0aW9uID0gTmFtZVNl
Y3Rpb246OmNyZWF0ZSgpOwogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW5hbWVTZWN0aW9uLT5m
dW5jdGlvbk5hbWVzLnRyeVJlc2VydmVDYXBhY2l0eShtX2luZm8uZnVuY3Rpb25JbmRleFNwYWNl
U2l6ZSgpKSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIGZ1bmN0aW9uIG5hbWVz
Iik7CiAgICAgbmFtZVNlY3Rpb24tPmZ1bmN0aW9uTmFtZXMucmVzaXplKG1faW5mby5mdW5jdGlv
bkluZGV4U3BhY2VTaXplKCkpOwogCkBAIC05Niw3ICs5Niw3IEBAIGF1dG8gTmFtZVNlY3Rpb25Q
YXJzZXI6OnBhcnNlKCkgLT4gUmVzdWx0CiAgICAgICAgIH0KICAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihwYXlsb2FkU3RhcnQgKyBwYXlsb2FkTGVuZ3RoICE9IG1fb2Zmc2V0KTsKICAgICB9
Ci0gICAgcmV0dXJuIG5hbWVTZWN0aW9uOworICAgIHJldHVybiBXVEZNb3ZlKG5hbWVTZWN0aW9u
KTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21OYW1lU2VjdGlvblBhcnNlci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmgKaW5kZXggYjdhZjBkOWI5MGE2
ZDUyNmU5MmQ0ZDgyNGZlZWRiNDRkNTk4NzY4My4uZDhlNmFlNzFiMjZiNGJlY2M4Yjg4OGJiZmQ1
ZWIyNzk4NWM2ZDIxOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU5hbWVTZWN0aW9uUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU5hbWVTZWN0aW9uUGFyc2VyLmgKQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBXYXNtIHsKIAotY2xhc3MgTmFtZVNlY3Rpb25QYXJzZXIgOiBwdWJsaWMgUGFy
c2VyPFJlZlB0cjxOYW1lU2VjdGlvbj4+IHsKK2NsYXNzIE5hbWVTZWN0aW9uUGFyc2VyIDogcHVi
bGljIFBhcnNlcjxSZWY8TmFtZVNlY3Rpb24+PiB7CiBwdWJsaWM6CiAgICAgTmFtZVNlY3Rpb25Q
YXJzZXIoY29uc3QgdWludDhfdCogc291cmNlQnVmZmVyLCBzaXplX3Qgc291cmNlTGVuZ3RoLCBj
b25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbykKICAgICAgICAgOiBQYXJzZXIoc291cmNlQnVm
ZmVyLCBzb3VyY2VMZW5ndGgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtT01HUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxh
bi5jcHAKaW5kZXggNDdkZWFkNjRhZjhmZDVjMzY5OWQyZThmNjQwZWQ4YmViMDQyMGM5ZC4uOWUw
YzRhNTY2NmU0NGUwZWFjYzIzMTJhYmJiNzY1NDUzYjg3OWY0OCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcApAQCAtNjksMjEgKzY5LDE4IEBAIHZvaWQgT01H
UGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKIHsKICAgICBBU1NFUlQobV9jb2RlQmxvY2st
PnJ1bm5hYmxlKCkpOwogICAgIEFTU0VSVChtX2NvZGVCbG9jay5wdHIoKSA9PSBtX21vZHVsZS0+
Y29kZUJsb2NrRm9yKG1vZGUoKSkpOwotICAgIGNvbnN0IEZ1bmN0aW9uTG9jYXRpb25JbkJpbmFy
eSYgbG9jYXRpb24gPSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbkxvY2F0aW9uSW5CaW5h
cnlbbV9mdW5jdGlvbkluZGV4XTsKLSAgICBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0ID0g
bV9tb2R1bGVJbmZvcm1hdGlvbi0+c291cmNlLmRhdGEoKSArIGxvY2F0aW9uLnN0YXJ0OwotICAg
IGNvbnN0IHNpemVfdCBmdW5jdGlvbkxlbmd0aCA9IGxvY2F0aW9uLmVuZCAtIGxvY2F0aW9uLnN0
YXJ0OwotICAgIEFTU0VSVChmdW5jdGlvblN0YXJ0ICsgZnVuY3Rpb25MZW5ndGggPD0gbV9tb2R1
bGVJbmZvcm1hdGlvbi0+c291cmNlLmVuZCgpKTsKKyAgICBjb25zdCBGdW5jdGlvbkRhdGEmIGZ1
bmN0aW9uID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25zW21fZnVuY3Rpb25JbmRleF07
CiAKICAgICBjb25zdCB1aW50MzJfdCBmdW5jdGlvbkluZGV4U3BhY2UgPSBtX2Z1bmN0aW9uSW5k
ZXggKyBtX21vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5pbXBvcnRGdW5jdGlvbkNvdW50KCk7
CiAgICAgQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA8IG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1h
dGlvbigpLmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7CiAKICAgICBTaWduYXR1cmVJbmRleCBz
aWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWdu
YXR1cmVJbmRpY2VzW21fZnVuY3Rpb25JbmRleF07CiAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWdu
YXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKLSAgICBB
U1NFUlQodmFsaWRhdGVGdW5jdGlvbihmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2ln
bmF0dXJlLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpKSk7CisgICAgQVNTRVJUKHZhbGlkYXRl
RnVuY3Rpb24oZnVuY3Rpb24uZGF0YS5kYXRhKCksIGZ1bmN0aW9uLmRhdGEuc2l6ZSgpLCBzaWdu
YXR1cmUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCkpKTsKIAogICAgIFZlY3RvcjxVbmxpbmtl
ZFdhc21Ub1dhc21DYWxsPiB1bmxpbmtlZENhbGxzOwogICAgIENvbXBpbGF0aW9uQ29udGV4dCBj
b250ZXh0OwotICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxl
KGNvbnRleHQsIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIHVubGlu
a2VkQ2FsbHMsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25N
b2RlOjpPTUdNb2RlLCBtX2Z1bmN0aW9uSW5kZXgpOworICAgIGF1dG8gcGFyc2VBbmRDb21waWxl
UmVzdWx0ID0gcGFyc2VBbmRDb21waWxlKGNvbnRleHQsIGZ1bmN0aW9uLmRhdGEuZGF0YSgpLCBm
dW5jdGlvbi5kYXRhLnNpemUoKSwgc2lnbmF0dXJlLCB1bmxpbmtlZENhbGxzLCBtX21vZHVsZUlu
Zm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6T01HTW9kZSwgbV9mdW5j
dGlvbkluZGV4KTsKIAogICAgIGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxlUmVzdWx0KSkg
ewogICAgICAgICBmYWlsKGhvbGRMb2NrKG1fbG9jayksIG1ha2VTdHJpbmcocGFyc2VBbmRDb21w
aWxlUmVzdWx0LmVycm9yKCksICJ3aGVuIHRyeWluZyB0byB0aWVyIHVwICIsIFN0cmluZzo6bnVt
YmVyKG1fZnVuY3Rpb25JbmRleCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21QYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYXJz
ZXIuaAppbmRleCA2NTEwNzA1ZWFmNTc4Y2UzM2UzYmQ3NmIyYmM4MzhhZGRhNWY1YjAwLi45ZmM0
YTQ1NGM5YjcyNmZhMTNlODRhNGI0NzNmZWFkODEyYmI5OWYwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVBhcnNlci5oCkBAIC01OCw2ICs1OCwxMCBAQCBjbGFzcyBQYXJzZXIgewog
ICAgIHR5cGVkZWYgRXhwZWN0ZWQ8dm9pZCwgRXJyb3JUeXBlPiBQYXJ0aWFsUmVzdWx0OwogICAg
IHR5cGVkZWYgRXhwZWN0ZWQ8U3VjY2Vzc1R5cGUsIEVycm9yVHlwZT4gUmVzdWx0OwogCisgICAg
Y29uc3QgdWludDhfdCogc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KKyAgICBz
aXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VMZW5ndGg7IH0KKyAgICBzaXpl
X3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKwogcHJvdGVjdGVkOgogICAg
IFBhcnNlcihjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKIApAQCAtODEsMTYgKzg1LDEzIEBAIGNs
YXNzIFBhcnNlciB7CiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VWYWx1ZVR5cGUo
VHlwZSYpOwogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlRXh0ZXJuYWxLaW5kKEV4
dGVybmFsS2luZCYpOwogCi0gICAgY29uc3QgdWludDhfdCogc291cmNlKCkgY29uc3QgeyByZXR1
cm4gbV9zb3VyY2U7IH0KLSAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9zb3Vy
Y2VMZW5ndGg7IH0KLQogICAgIHNpemVfdCBtX29mZnNldCA9IDA7CiAKICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgLi4uQXJncz4KICAgICBORVZFUl9JTkxJTkUgVW5leHBlY3RlZFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gZmFpbChBcmdzLi4uIGFyZ3MpIGNvbnN0CiAgICAgewogICAgICAgICB1
c2luZyBuYW1lc3BhY2UgRmFpbHVyZUhlbHBlcjsgLy8gU2VlIEFETCBjb21tZW50IGluIG5hbWVz
cGFjZSBhYm92ZS4KLSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRSZXN1bHQobWFrZVN0cmluZygi
V2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAiX3MsIFN0cmluZzo6bnVt
YmVyKG1fb2Zmc2V0KSwgIiAvICJfcywgU3RyaW5nOjpudW1iZXIobV9zb3VyY2VMZW5ndGgpLCAi
OiAiX3MsIG1ha2VTdHJpbmcoYXJncykuLi4pKTsKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRS
ZXN1bHQobWFrZVN0cmluZygiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0
ZSAiX3MsIFN0cmluZzo6bnVtYmVyKG1fb2Zmc2V0KSwgIjogIl9zLCBtYWtlU3RyaW5nKGFyZ3Mp
Li4uKSk7CiAgICAgfQogI2RlZmluZSBXQVNNX1BBUlNFUl9GQUlMX0lGKGNvbmRpdGlvbiwgLi4u
KSBkbyB7IFwKICAgICBpZiAoVU5MSUtFTFkoY29uZGl0aW9uKSkgICAgICAgICAgICAgICAgICAg
ICBcCkBAIC0yODUsNiArMjg2LDE0IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI8U3VjY2Vz
c1R5cGU+OjpwYXJzZUV4dGVybmFsS2luZChFeHRlcm5hbEtpbmQmIHJlc3VsdCkKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAorQUxXQVlTX0lOTElORSBJMzJJbml0RXhwciBtYWtlSTMySW5pdEV4cHIo
dWludDhfdCBvcGNvZGUsIHVpbnQzMl90IGJpdHMpCit7CisgICAgUkVMRUFTRV9BU1NFUlQob3Bj
b2RlID09IEkzMkNvbnN0IHx8IG9wY29kZSA9PSBHZXRHbG9iYWwpOworICAgIGlmIChvcGNvZGUg
PT0gSTMyQ29uc3QpCisgICAgICAgIHJldHVybiBJMzJJbml0RXhwcjo6Y29uc3RWYWx1ZShiaXRz
KTsKKyAgICByZXR1cm4gSTMySW5pdEV4cHI6Omdsb2JhbEltcG9ydChiaXRzKTsKK30KKwogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAppbmRleCBhMzRkZWVjYjE2YjE0
MGJlYjUzYjg3YzZlMmE3MDM5ODM0OTMwYzJjLi45OTc0ZWNmZTU1YmFmMjg5ZWVjNTY1MDY2YTFj
ZDQ5YWUyM2E4MjBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
UGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCkBA
IC01Myw4ICs1Myw2IEBAIFBsYW46OlBsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVsZUlu
Zm9ybWF0aW9uPiBpbmZvLCBDb21wbGV0aW9uVGFzayYmIHRhc2ssCiAgICAgOiBtX21vZHVsZUlu
Zm9ybWF0aW9uKFdURk1vdmUoaW5mbykpCiAgICAgLCBtX2NyZWF0ZUVtYmVkZGVyV3JhcHBlcihX
VEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlcikpCiAgICAgLCBtX3Rocm93V2FzbUV4Y2VwdGlv
bih0aHJvd1dhc21FeGNlcHRpb24pCi0gICAgLCBtX3NvdXJjZShtX21vZHVsZUluZm9ybWF0aW9u
LT5zb3VyY2UuZGF0YSgpKQotICAgICwgbV9zb3VyY2VMZW5ndGgobV9tb2R1bGVJbmZvcm1hdGlv
bi0+c291cmNlLnNpemUoKSkKIHsKICAgICBtX2NvbXBsZXRpb25UYXNrcy5hcHBlbmQoc3RkOjpt
YWtlX3BhaXIoY29udGV4dCwgV1RGTW92ZSh0YXNrKSkpOwogfQpAQCAtNjQsMTAgKzYyLDggQEAg
UGxhbjo6UGxhbihDb250ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGluZm8s
IENvbXBsZXRpb25UYXNrJiYgdGFzaykKIHsKIH0KIAotUGxhbjo6UGxhbihDb250ZXh0KiBjb250
ZXh0LCBjb25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgsIENvbXBsZXRp
b25UYXNrJiYgdGFzaykKLSAgICA6IG1fbW9kdWxlSW5mb3JtYXRpb24oYWRvcHRSZWYoKm5ldyBN
b2R1bGVJbmZvcm1hdGlvbihWZWN0b3I8dWludDhfdD4oKSkpKQotICAgICwgbV9zb3VyY2Uoc291
cmNlKQotICAgICwgbV9zb3VyY2VMZW5ndGgoc291cmNlTGVuZ3RoKQorUGxhbjo6UGxhbihDb250
ZXh0KiBjb250ZXh0LCBDb21wbGV0aW9uVGFzayYmIHRhc2spCisgICAgOiBtX21vZHVsZUluZm9y
bWF0aW9uKE1vZHVsZUluZm9ybWF0aW9uOjpjcmVhdGUoKSkKIHsKICAgICBtX2NvbXBsZXRpb25U
YXNrcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoY29udGV4dCwgV1RGTW92ZSh0YXNrKSkpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgKaW5kZXggN2EwN2JmZDNhMGIwNmU5MzQ0
MDk1N2RiMzZkZTZkZGRhZTYzYzY0Yy4uOWVjNjg4NjU4MTMzMWJhY2M5ZjA4ZGQyNmY5YWFiYjRl
OWJkNTNiZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4u
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCkBAIC01NCw3ICs1
NCw3IEBAIGNsYXNzIFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UGxhbj4gewog
ICAgIFBsYW4oQ29udGV4dCosIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4sIENvbXBsZXRpb25UYXNr
JiYpOwogCiAgICAgLy8gTm90ZTogVGhpcyBjb25zdHJ1Y3RvciBzaG91bGQgb25seSBiZSB1c2Vk
IGlmIHlvdSBhcmUgbm90IGFjdHVhbGx5IGJ1aWxkaW5nIGEgbW9kdWxlIGUuZy4gdmFsaWRhdGlv
bi9mdW5jdGlvbiB0ZXN0cwotICAgIEpTX0VYUE9SVF9QUklWQVRFIFBsYW4oQ29udGV4dCosIGNv
bnN0IHVpbnQ4X3QqLCBzaXplX3QsIENvbXBsZXRpb25UYXNrJiYpOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIFBsYW4oQ29udGV4dCosIENvbXBsZXRpb25UYXNrJiYpOwogICAgIHZpcnR1YWwgSlNf
RVhQT1JUX1BSSVZBVEUgflBsYW4oKTsKIAogICAgIC8vIElmIHlvdSBndWFyYW50ZWUgdGhlIG9y
ZGVyaW5nIGhlcmUsIHlvdSBjYW4gcmVseSBvbiBGSUZPIG9mIHRoZQpAQCAtOTAsOCArOTAsNiBA
QCBjbGFzcyBQbGFuIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFBsYW4+IHsKICAgICBD
cmVhdGVFbWJlZGRlcldyYXBwZXIgbV9jcmVhdGVFbWJlZGRlcldyYXBwZXI7CiAgICAgVGhyb3dX
YXNtRXhjZXB0aW9uIG1fdGhyb3dXYXNtRXhjZXB0aW9uIHsgbnVsbHB0ciB9OwogCi0gICAgY29u
c3QgdWludDhfdCogbV9zb3VyY2U7Ci0gICAgY29uc3Qgc2l6ZV90IG1fc291cmNlTGVuZ3RoOwog
ICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsKICAgICBNZW1vcnlNb2RlIG1fbW9kZSB7IE1lbW9y
eU1vZGU6OkJvdW5kc0NoZWNraW5nIH07CiAgICAgTG9jayBtX2xvY2s7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWE5
YmFjYjY3ZGVkMjUwNDUzNWQ4YzJkZTVjNWVkODMzZGVmMTYwMgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9uUGFyc2VyLmNwcApAQCAtMCww
ICsxLDU2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2UgU3V6dWtpIDx5
dXN1a2VzdXp1a2lAc2xvd3N0YXJ0Lm9yZz4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXYXNtU2VjdGlv
blBhcnNlci5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiSWRlbnRp
ZmllcklubGluZXMuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5SW5mb3JtYXRpb24uaCIKKyNpbmNs
dWRlICJXYXNtTmFtZVNlY3Rpb25QYXJzZXIuaCIKKyNpbmNsdWRlICJXYXNtT3BzLmgiCisjaW5j
bHVkZSAiV2FzbVNlY3Rpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7
CisKK2F1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VUeXBlKCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHVpbnQzMl90IGNvdW50OworCisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJV
SW50MzIoY291bnQpLCAiY2FuJ3QgZ2V0IFR5cGUgc2VjdGlvbidzIGNvdW50Iik7CisgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRihjb3VudCA+IG1heFR5cGVzLCAiVHlwZSBzZWN0aW9uJ3MgY291bnQg
aXMgdG9vIGJpZyAiLCBjb3VudCwgIiBtYXhpbXVtICIsIG1heFR5cGVzKTsKKyAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFtX2luZm8tPnVzZWRTaWduYXR1cmVzLnRyeVJlc2VydmVDYXBhY2l0eShj
b3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBUeXBlIHNlY3Rpb24ncyAi
LCBjb3VudCwgIiBlbnRyaWVzIik7CisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgY291
bnQ7ICsraSkgeworICAgICAgICBpbnQ4X3QgdHlwZTsKKyAgICAgICAgdWludDMyX3QgYXJndW1l
bnRDb3VudDsKKyAgICAgICAgVmVjdG9yPFR5cGU+IGFyZ3VtZW50VHlwZXM7CisKKyAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VJbnQ3KHR5cGUpLCAiY2FuJ3QgZ2V0ICIsIGksICJ0
aCBUeXBlJ3MgdHlwZSIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHR5cGUgIT0gRnVu
YywgaSwgInRoIFR5cGUgaXMgbm9uLUZ1bmMgIiwgdHlwZSk7CisgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGFyZ3VtZW50Q291bnQpLCAiY2FuJ3QgZ2V0ICIsIGks
ICJ0aCBUeXBlJ3MgYXJndW1lbnQgY291bnQiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
Rihhcmd1bWVudENvdW50ID4gbWF4RnVuY3Rpb25QYXJhbXMsIGksICJ0aCBhcmd1bWVudCBjb3Vu
dCBpcyB0b28gYmlnICIsIGFyZ3VtZW50Q291bnQsICIgbWF4aW11bSAiLCBtYXhGdW5jdGlvblBh
cmFtcyk7CisgICAgICAgIFJlZlB0cjxTaWduYXR1cmU+IG1heWJlU2lnbmF0dXJlID0gU2lnbmF0
dXJlOjp0cnlDcmVhdGUoYXJndW1lbnRDb3VudCk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIW1heWJlU2lnbmF0dXJlLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgVHlw
ZSBzZWN0aW9uJ3MgIiwgaSwgInRoIHNpZ25hdHVyZSIpOworICAgICAgICBSZWY8U2lnbmF0dXJl
PiBzaWduYXR1cmUgPSBtYXliZVNpZ25hdHVyZS5yZWxlYXNlTm9uTnVsbCgpOworCisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmd1bWVudENvdW50OyArK2kpIHsKKyAgICAgICAg
ICAgIFR5cGUgYXJndW1lbnRUeXBlOworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
cGFyc2VWYWx1ZVR5cGUoYXJndW1lbnRUeXBlKSwgImNhbid0IGdldCAiLCBpLCAidGggYXJndW1l
bnQgVHlwZSIpOworICAgICAgICAgICAgc2lnbmF0dXJlLT5hcmd1bWVudChpKSA9IGFyZ3VtZW50
VHlwZTsKKyAgICAgICAgfQorCisgICAgICAgIHVpbnQ4X3QgcmV0dXJuQ291bnQ7CisgICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDEocmV0dXJuQ291bnQpLCAiY2FuJ3Qg
Z2V0ICIsIGksICJ0aCBUeXBlJ3MgcmV0dXJuIGNvdW50Iik7CisgICAgICAgIFR5cGUgcmV0dXJu
VHlwZTsKKyAgICAgICAgaWYgKHJldHVybkNvdW50KSB7CisgICAgICAgICAgICBUeXBlIHZhbHVl
OworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYWx1ZVR5cGUodmFsdWUp
LCAiY2FuJ3QgZ2V0ICIsIGksICJ0aCBUeXBlJ3MgcmV0dXJuIHZhbHVlIik7CisgICAgICAgICAg
ICByZXR1cm5UeXBlID0gc3RhdGljX2Nhc3Q8VHlwZT4odmFsdWUpOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIHJldHVyblR5cGUgPSBUeXBlOjpWb2lkOworICAgICAgICBzaWduYXR1cmUt
PnJldHVyblR5cGUoKSA9IHJldHVyblR5cGU7CisKKyAgICAgICAgc3RkOjpwYWlyPFNpZ25hdHVy
ZUluZGV4LCBSZWY8U2lnbmF0dXJlPj4gcmVzdWx0ID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmFk
b3B0KFdURk1vdmUoc2lnbmF0dXJlKSk7CisgICAgICAgIG1faW5mby0+dXNlZFNpZ25hdHVyZXMu
dW5jaGVja2VkQXBwZW5kKFdURk1vdmUocmVzdWx0LnNlY29uZCkpOworICAgIH0KKyAgICByZXR1
cm4geyB9OworfQorCithdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlSW1wb3J0KCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHVpbnQzMl90IGltcG9ydENvdW50OworICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIXBhcnNlVmFyVUludDMyKGltcG9ydENvdW50KSwgImNhbid0IGdldCBJbXBvcnQgc2Vj
dGlvbidzIGNvdW50Iik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbXBvcnRDb3VudCA+IG1h
eEltcG9ydHMsICJJbXBvcnQgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgaW1wb3J0Q291
bnQsICIgbWF4aW11bSAiLCBtYXhJbXBvcnRzKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFt
X2luZm8tPmdsb2JhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50KSwgImNhbid0IGFs
bG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGltcG9ydENvdW50LCAiIGdsb2JhbHMiKTsgLy8g
RklYTUUgdGhpcyBvdmVyLWFsbG9jYXRlcyB3aGVuIHdlIGZpeCB0aGUgRklYTUVzIGJlbG93Lgor
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+aW1wb3J0cy50cnlSZXNlcnZlQ2FwYWNp
dHkoaW1wb3J0Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgaW1w
b3J0Q291bnQsICIgaW1wb3J0cyIpOyAvLyBGSVhNRSB0aGlzIG92ZXItYWxsb2NhdGVzIHdoZW4g
d2UgZml4IHRoZSBGSVhNRXMgYmVsb3cuCisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZv
LT5pbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9y
dENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGltcG9ydENvdW50
LCAiIGltcG9ydCBmdW5jdGlvbiBzaWduYXR1cmVzIik7IC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxv
Y2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxvdy4KKworICAgIGZvciAodWludDMyX3Qg
aW1wb3J0TnVtYmVyID0gMDsgaW1wb3J0TnVtYmVyIDwgaW1wb3J0Q291bnQ7ICsraW1wb3J0TnVt
YmVyKSB7CisgICAgICAgIHVpbnQzMl90IG1vZHVsZUxlbjsKKyAgICAgICAgdWludDMyX3QgZmll
bGRMZW47CisgICAgICAgIE5hbWUgbW9kdWxlU3RyaW5nOworICAgICAgICBOYW1lIGZpZWxkU3Ry
aW5nOworICAgICAgICBFeHRlcm5hbEtpbmQga2luZDsKKyAgICAgICAgdW5zaWduZWQga2luZElu
ZGV4IHsgMCB9OworCisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMy
KG1vZHVsZUxlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0J3MgbW9k
dWxlIG5hbWUgbGVuZ3RoIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVV
VEY4U3RyaW5nKG1vZHVsZVN0cmluZywgbW9kdWxlTGVuKSwgImNhbid0IGdldCAiLCBpbXBvcnRO
dW1iZXIsICJ0aCBJbXBvcnQncyBtb2R1bGUgbmFtZSBvZiBsZW5ndGggIiwgbW9kdWxlTGVuKTsK
KworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihmaWVsZExlbiks
ICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0J3MgZmllbGQgbmFtZSBsZW5n
dGggaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIik7CisgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIWNvbnN1bWVVVEY4U3RyaW5nKGZpZWxkU3RyaW5nLCBmaWVsZExlbiksICJjYW4n
dCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0J3MgZmllbGQgbmFtZSBvZiBsZW5ndGgg
IiwgbW9kdWxlTGVuLCAiIGluIG1vZHVsZSAnIiwgbW9kdWxlU3RyaW5nLCAiJyIpOworCisgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlRXh0ZXJuYWxLaW5kKGtpbmQpLCAiY2FuJ3Qg
Z2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdzIGtpbmQgaW4gbW9kdWxlICciLCBtb2R1
bGVTdHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0cmluZywgIiciKTsKKyAgICAgICAgc3dpdGNo
IChraW5kKSB7CisgICAgICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpGdW5jdGlvbjogeworICAgICAg
ICAgICAgdWludDMyX3QgZnVuY3Rpb25TaWduYXR1cmVJbmRleDsKKyAgICAgICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGZ1bmN0aW9uU2lnbmF0dXJlSW5kZXgpLCAi
Y2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdzIGZ1bmN0aW9uIHNpZ25hdHVy
ZSBpbiBtb2R1bGUgJyIsIG1vZHVsZVN0cmluZywgIicgZmllbGQgJyIsIGZpZWxkU3RyaW5nLCAi
JyIpOworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvblNpZ25hdHVyZUlu
ZGV4ID49IG1faW5mby0+dXNlZFNpZ25hdHVyZXMuc2l6ZSgpLCAiaW52YWxpZCBmdW5jdGlvbiBz
aWduYXR1cmUgZm9yICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCwgIiwgZnVuY3Rpb25TaWdu
YXR1cmVJbmRleCwgIiBpcyBvdXQgb2YgcmFuZ2Ugb2YgIiwgbV9pbmZvLT51c2VkU2lnbmF0dXJl
cy5zaXplKCksICIgaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIGZpZWxkICciLCBmaWVs
ZFN0cmluZywgIiciKTsKKyAgICAgICAgICAgIGtpbmRJbmRleCA9IG1faW5mby0+aW1wb3J0RnVu
Y3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsKKyAgICAgICAgICAgIFNpZ25hdHVyZUluZGV4
IHNpZ25hdHVyZUluZGV4ID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChtX2luZm8tPnVzZWRT
aWduYXR1cmVzW2Z1bmN0aW9uU2lnbmF0dXJlSW5kZXhdKTsKKyAgICAgICAgICAgIG1faW5mby0+
aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnVuY2hlY2tlZEFwcGVuZChzaWduYXR1cmVJ
bmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEV4dGVy
bmFsS2luZDo6VGFibGU6IHsKKyAgICAgICAgICAgIGJvb2wgaXNJbXBvcnQgPSB0cnVlOworICAg
ICAgICAgICAgUGFydGlhbFJlc3VsdCByZXN1bHQgPSBwYXJzZVRhYmxlSGVscGVyKGlzSW1wb3J0
KTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoV1RGTW92ZShyZXN1bHQuZXJyb3IoKSkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6Ok1lbW9yeTog
eworICAgICAgICAgICAgYm9vbCBpc0ltcG9ydCA9IHRydWU7CisgICAgICAgICAgICBQYXJ0aWFs
UmVzdWx0IHJlc3VsdCA9IHBhcnNlTWVtb3J5SGVscGVyKGlzSW1wb3J0KTsKKyAgICAgICAgICAg
IGlmIChVTkxJS0VMWSghcmVzdWx0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoV1RGTW92ZShyZXN1bHQuZXJyb3IoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6Okdsb2JhbDogeworICAgICAgICAgICAg
R2xvYmFsIGdsb2JhbDsKKyAgICAgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFy
c2VHbG9iYWxUeXBlKGdsb2JhbCkpOworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihn
bG9iYWwubXV0YWJpbGl0eSA9PSBHbG9iYWw6Ok11dGFibGUsICJNdXRhYmxlIEdsb2JhbHMgYXJl
bid0IHN1cHBvcnRlZCIpOworCisgICAgICAgICAgICBraW5kSW5kZXggPSBtX2luZm8tPmdsb2Jh
bHMuc2l6ZSgpOworICAgICAgICAgICAgbV9pbmZvLT5nbG9iYWxzLnVuY2hlY2tlZEFwcGVuZChX
VEZNb3ZlKGdsb2JhbCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIG1faW5mby0+aW1wb3J0cy51bmNoZWNrZWRBcHBlbmQoeyBXVEZNb3ZlKG1v
ZHVsZVN0cmluZyksIFdURk1vdmUoZmllbGRTdHJpbmcpLCBraW5kLCBraW5kSW5kZXggfSk7Cisg
ICAgfQorCisgICAgbV9pbmZvLT5maXJzdEludGVybmFsR2xvYmFsID0gbV9pbmZvLT5nbG9iYWxz
LnNpemUoKTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNl
RnVuY3Rpb24oKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgdWludDMyX3QgY291bnQ7CisgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoY291bnQpLCAiY2FuJ3QgZ2V0IEZ1
bmN0aW9uIHNlY3Rpb24ncyBjb3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoY291bnQg
PiBtYXhGdW5jdGlvbnMsICJGdW5jdGlvbiBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBj
b3VudCwgIiBtYXhpbXVtICIsIG1heEZ1bmN0aW9ucyk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RighbV9pbmZvLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy50cnlSZXNlcnZlQ2Fw
YWNpdHkoY291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgY291bnQs
ICIgRnVuY3Rpb24gc2lnbmF0dXJlcyIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5m
by0+ZnVuY3Rpb25zLnRyeVJlc2VydmVDYXBhY2l0eShjb3VudCksICJjYW4ndCBhbGxvY2F0ZSBl
bm91Z2ggbWVtb3J5IGZvciAiLCBjb3VudCwgIkZ1bmN0aW9uIGxvY2F0aW9ucyIpOworCisgICAg
Zm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgdWludDMyX3Qg
dHlwZU51bWJlcjsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIo
dHlwZU51bWJlciksICJjYW4ndCBnZXQgIiwgaSwgInRoIEZ1bmN0aW9uJ3MgdHlwZSBudW1iZXIi
KTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0eXBlTnVtYmVyID49IG1faW5mby0+dXNl
ZFNpZ25hdHVyZXMuc2l6ZSgpLCBpLCAidGggRnVuY3Rpb24gdHlwZSBudW1iZXIgaXMgaW52YWxp
ZCAiLCB0eXBlTnVtYmVyKTsKKworICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRl
eCA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQobV9pbmZvLT51c2VkU2lnbmF0dXJlc1t0eXBl
TnVtYmVyXSk7CisgICAgICAgIC8vIFRoZSBDb2RlIHNlY3Rpb24gZml4ZXMgdXAgc3RhcnQgYW5k
IGVuZC4KKyAgICAgICAgc2l6ZV90IHN0YXJ0ID0gMDsKKyAgICAgICAgc2l6ZV90IGVuZCA9IDA7
CisgICAgICAgIG1faW5mby0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXMudW5jaGVj
a2VkQXBwZW5kKHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgbV9pbmZvLT5mdW5jdGlvbnMudW5j
aGVja2VkQXBwZW5kKHsgc3RhcnQsIGVuZCwgVmVjdG9yPHVpbnQ4X3Q+KCkgfSk7CisgICAgfQor
CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZVJlc2l6YWJs
ZUxpbWl0cyh1aW50MzJfdCYgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4mIG1heGlt
dW0pIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQoIW1heGltdW0pOworCisgICAgdWlu
dDhfdCBmbGFnczsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQxKGZsYWdz
KSwgImNhbid0IHBhcnNlIHJlc2l6YWJsZSBsaW1pdHMgZmxhZ3MiKTsKKyAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbml0aWFsKSwgImNhbid0IHBhcnNlIHJlc2l6YWJs
ZSBsaW1pdHMgaW5pdGlhbCBwYWdlIGNvdW50Iik7CisKKyAgICBpZiAoZmxhZ3MpIHsKKyAgICAg
ICAgdWludDMyX3QgbWF4aW11bUludDsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFy
c2VWYXJVSW50MzIobWF4aW11bUludCksICJjYW4ndCBwYXJzZSByZXNpemFibGUgbGltaXRzIG1h
eGltdW0gcGFnZSBjb3VudCIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluaXRpYWwg
PiBtYXhpbXVtSW50LCAicmVzaXphYmxlIGxpbWl0cyBoYXMgYSBpbml0aWFsIHBhZ2UgY291bnQg
b2YgIiwgaW5pdGlhbCwgIiB3aGljaCBpcyBncmVhdGVyIHRoYW4gaXRzIG1heGltdW0gIiwgbWF4
aW11bUludCk7CisgICAgICAgIG1heGltdW0gPSBtYXhpbXVtSW50OworICAgIH0KKworICAgIHJl
dHVybiB7IH07Cit9CisKK2F1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VUYWJsZUhlbHBlcihib29s
IGlzSW1wb3J0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRiht
X2luZm8tPnRhYmxlQ291bnQoKSA+IDAsICJDYW5ub3QgaGF2ZSBtb3JlIHRoYW4gb25lIFRhYmxl
IGZvciBub3ciKTsKKworICAgIGludDhfdCB0eXBlOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlSW50Nyh0eXBlKSwgImNhbid0IHBhcnNlIFRhYmxlIHR5cGUiKTsKKyAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKHR5cGUgIT0gV2FzbTo6QW55ZnVuYywgIlRhYmxlIHR5cGUgc2hvdWxkIGJl
IGFueWZ1bmMsIGdvdCAiLCB0eXBlKTsKKworICAgIHVpbnQzMl90IGluaXRpYWw7CisgICAgc3Rk
OjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bTsKKyAgICBQYXJ0aWFsUmVzdWx0IGxpbWl0cyA9
IHBhcnNlUmVzaXphYmxlTGltaXRzKGluaXRpYWwsIG1heGltdW0pOworICAgIGlmIChVTkxJS0VM
WSghbGltaXRzKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFdURk1vdmUobGltaXRz
LmVycm9yKCkpKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluaXRpYWwgPiBtYXhUYWJsZUVu
dHJpZXMsICJUYWJsZSdzIGluaXRpYWwgcGFnZSBjb3VudCBvZiAiLCBpbml0aWFsLCAiIGlzIHRv
byBiaWcsIG1heGltdW0gIiwgbWF4VGFibGVFbnRyaWVzKTsKKworICAgIEFTU0VSVCghbWF4aW11
bSB8fCAqbWF4aW11bSA+PSBpbml0aWFsKTsKKworICAgIG1faW5mby0+dGFibGVJbmZvcm1hdGlv
biA9IFRhYmxlSW5mb3JtYXRpb24oaW5pdGlhbCwgbWF4aW11bSwgaXNJbXBvcnQpOworCisgICAg
cmV0dXJuIHsgfTsKK30KKworYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZVRhYmxlKCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHVpbnQzMl90IGNvdW50OworICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIXBhcnNlVmFyVUludDMyKGNvdW50KSwgImNhbid0IGdldCBUYWJsZSdzIGNvdW50Iik7Cisg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihjb3VudCA+IDEsICJUYWJsZSBjb3VudCBvZiAiLCBjb3Vu
dCwgIiBpcyBpbnZhbGlkLCBhdCBtb3N0IDEgaXMgYWxsb3dlZCBmb3Igbm93Iik7CisKKyAgICBp
ZiAoIWNvdW50KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgYm9vbCBpc0ltcG9ydCA9IGZh
bHNlOworICAgIFBhcnRpYWxSZXN1bHQgcmVzdWx0ID0gcGFyc2VUYWJsZUhlbHBlcihpc0ltcG9y
dCk7CisgICAgaWYgKFVOTElLRUxZKCFyZXN1bHQpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoV1RGTW92ZShyZXN1bHQuZXJyb3IoKSkpOworCisgICAgcmV0dXJuIHsgfTsKK30KKwor
YXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZU1lbW9yeUhlbHBlcihib29sIGlzSW1wb3J0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX2luZm8tPm1lbW9yeUNv
dW50KCksICJ0aGVyZSBjYW4gYXQgbW9zdCBiZSBvbmUgTWVtb3J5IHNlY3Rpb24gZm9yIG5vdyIp
OworCisgICAgUGFnZUNvdW50IGluaXRpYWxQYWdlQ291bnQ7CisgICAgUGFnZUNvdW50IG1heGlt
dW1QYWdlQ291bnQ7CisgICAgeworICAgICAgICB1aW50MzJfdCBpbml0aWFsOworICAgICAgICBz
dGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtOworICAgICAgICBQYXJ0aWFsUmVzdWx0IGxp
bWl0cyA9IHBhcnNlUmVzaXphYmxlTGltaXRzKGluaXRpYWwsIG1heGltdW0pOworICAgICAgICBp
ZiAoVU5MSUtFTFkoIWxpbWl0cykpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
V1RGTW92ZShsaW1pdHMuZXJyb3IoKSkpOworICAgICAgICBBU1NFUlQoIW1heGltdW0gfHwgKm1h
eGltdW0gPj0gaW5pdGlhbCk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIVBhZ2VDb3Vu
dDo6aXNWYWxpZChpbml0aWFsKSwgIk1lbW9yeSdzIGluaXRpYWwgcGFnZSBjb3VudCBvZiAiLCBp
bml0aWFsLCAiIGlzIGludmFsaWQiKTsKKworICAgICAgICBpbml0aWFsUGFnZUNvdW50ID0gUGFn
ZUNvdW50KGluaXRpYWwpOworCisgICAgICAgIGlmIChtYXhpbXVtKSB7CisgICAgICAgICAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFQYWdlQ291bnQ6OmlzVmFsaWQoKm1heGltdW0pLCAiTWVtb3J5
J3MgbWF4aW11bSBwYWdlIGNvdW50IG9mICIsICptYXhpbXVtLCAiIGlzIGludmFsaWQiKTsKKyAg
ICAgICAgICAgIG1heGltdW1QYWdlQ291bnQgPSBQYWdlQ291bnQoKm1heGltdW0pOworICAgICAg
ICB9CisgICAgfQorICAgIEFTU0VSVChpbml0aWFsUGFnZUNvdW50KTsKKyAgICBBU1NFUlQoIW1h
eGltdW1QYWdlQ291bnQgfHwgbWF4aW11bVBhZ2VDb3VudCA+PSBpbml0aWFsUGFnZUNvdW50KTsK
KworICAgIG1faW5mby0+bWVtb3J5ID0gTWVtb3J5SW5mb3JtYXRpb24oaW5pdGlhbFBhZ2VDb3Vu
dCwgbWF4aW11bVBhZ2VDb3VudCwgaXNJbXBvcnQpOworICAgIHJldHVybiB7IH07Cit9CisKK2F1
dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VNZW1vcnkoKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
dWludDhfdCBjb3VudDsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQxKGNv
dW50KSwgImNhbid0IHBhcnNlIE1lbW9yeSBzZWN0aW9uJ3MgY291bnQiKTsKKworICAgIGlmICgh
Y291bnQpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGNv
dW50ICE9IDEsICJNZW1vcnkgc2VjdGlvbiBoYXMgbW9yZSB0aGFuIG9uZSBtZW1vcnksIFdlYkFz
c2VtYmx5IGN1cnJlbnRseSBvbmx5IGFsbG93cyB6ZXJvIG9yIG9uZSIpOworCisgICAgYm9vbCBp
c0ltcG9ydCA9IGZhbHNlOworICAgIHJldHVybiBwYXJzZU1lbW9yeUhlbHBlcihpc0ltcG9ydCk7
Cit9CisKK2F1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VHbG9iYWwoKSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgdWludDMyX3QgZ2xvYmFsQ291bnQ7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
cGFyc2VWYXJVSW50MzIoZ2xvYmFsQ291bnQpLCAiY2FuJ3QgZ2V0IEdsb2JhbCBzZWN0aW9uJ3Mg
Y291bnQiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGdsb2JhbENvdW50ID4gbWF4R2xvYmFs
cywgIkdsb2JhbCBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBnbG9iYWxDb3VudCwgIiBt
YXhpbXVtICIsIG1heEdsb2JhbHMpOworICAgIHNpemVfdCB0b3RhbEJ5dGVzID0gZ2xvYmFsQ291
bnQgKyBtX2luZm8tPmZpcnN0SW50ZXJuYWxHbG9iYWw7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9J
Rigoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHRvdGFsQnl0ZXMpIDwgZ2xvYmFsQ291bnQpIHx8ICFt
X2luZm8tPmdsb2JhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KHRvdGFsQnl0ZXMpLCAiY2FuJ3QgYWxs
b2NhdGUgbWVtb3J5IGZvciAiLCB0b3RhbEJ5dGVzLCAiIGdsb2JhbHMiKTsKKworICAgIGZvciAo
dWludDMyX3QgZ2xvYmFsSW5kZXggPSAwOyBnbG9iYWxJbmRleCA8IGdsb2JhbENvdW50OyArK2ds
b2JhbEluZGV4KSB7CisgICAgICAgIEdsb2JhbCBnbG9iYWw7CisgICAgICAgIHVpbnQ4X3QgaW5p
dE9wY29kZTsKKworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlR2xvYmFs
VHlwZShnbG9iYWwpKTsKKyAgICAgICAgVHlwZSB0eXBlRm9ySW5pdE9wY29kZTsKKyAgICAgICAg
V0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUluaXRFeHByKGluaXRPcGNvZGUsIGdsb2Jh
bC5pbml0aWFsQml0c09ySW1wb3J0TnVtYmVyLCB0eXBlRm9ySW5pdE9wY29kZSkpOworICAgICAg
ICBpZiAoaW5pdE9wY29kZSA9PSBHZXRHbG9iYWwpCisgICAgICAgICAgICBnbG9iYWwuaW5pdGlh
bGl6YXRpb25UeXBlID0gR2xvYmFsOjpGcm9tR2xvYmFsSW1wb3J0OworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBnbG9iYWwuaW5pdGlhbGl6YXRpb25UeXBlID0gR2xvYmFsOjpGcm9tRXhwcmVz
c2lvbjsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0eXBlRm9ySW5pdE9wY29kZSAhPSBn
bG9iYWwudHlwZSwgIkdsb2JhbCBpbml0X2V4cHIgb3Bjb2RlIG9mIHR5cGUgIiwgdHlwZUZvcklu
aXRPcGNvZGUsICIgZG9lc24ndCBtYXRjaCBnbG9iYWwncyB0eXBlICIsIGdsb2JhbC50eXBlKTsK
KworICAgICAgICBtX2luZm8tPmdsb2JhbHMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoZ2xvYmFs
KSk7CisgICAgfQorCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBTZWN0aW9uUGFyc2VyOjpw
YXJzZUV4cG9ydCgpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1aW50MzJfdCBleHBvcnRDb3Vu
dDsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihleHBvcnRDb3VudCks
ICJjYW4ndCBnZXQgRXhwb3J0IHNlY3Rpb24ncyBjb3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoZXhwb3J0Q291bnQgPiBtYXhFeHBvcnRzLCAiRXhwb3J0IHNlY3Rpb24ncyBjb3VudCBp
cyB0b28gYmlnICIsIGV4cG9ydENvdW50LCAiIG1heGltdW0gIiwgbWF4RXhwb3J0cyk7CisgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5leHBvcnRzLnRyeVJlc2VydmVDYXBhY2l0eShl
eHBvcnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBleHBvcnRD
b3VudCwgIiBleHBvcnRzIik7CisKKyAgICBIYXNoU2V0PFN0cmluZz4gZXhwb3J0TmFtZXM7Cisg
ICAgZm9yICh1aW50MzJfdCBleHBvcnROdW1iZXIgPSAwOyBleHBvcnROdW1iZXIgPCBleHBvcnRD
b3VudDsgKytleHBvcnROdW1iZXIpIHsKKyAgICAgICAgdWludDMyX3QgZmllbGRMZW47CisgICAg
ICAgIE5hbWUgZmllbGRTdHJpbmc7CisgICAgICAgIEV4dGVybmFsS2luZCBraW5kOworICAgICAg
ICB1bnNpZ25lZCBraW5kSW5kZXg7CisKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFy
c2VWYXJVSW50MzIoZmllbGRMZW4pLCAiY2FuJ3QgZ2V0ICIsIGV4cG9ydE51bWJlciwgInRoIEV4
cG9ydCdzIGZpZWxkIG5hbWUgbGVuZ3RoIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IWNvbnN1bWVVVEY4U3RyaW5nKGZpZWxkU3RyaW5nLCBmaWVsZExlbiksICJjYW4ndCBnZXQgIiwg
ZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0J3MgZmllbGQgbmFtZSBvZiBsZW5ndGggIiwgZmllbGRM
ZW4pOworICAgICAgICBTdHJpbmcgZmllbGROYW1lID0gU3RyaW5nOjpmcm9tVVRGOChmaWVsZFN0
cmluZyk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZXhwb3J0TmFtZXMuY29udGFpbnMo
ZmllbGROYW1lKSwgImR1cGxpY2F0ZSBleHBvcnQ6ICciLCBmaWVsZFN0cmluZywgIiciKTsKKyAg
ICAgICAgZXhwb3J0TmFtZXMuYWRkKGZpZWxkTmFtZSk7CisKKyAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighcGFyc2VFeHRlcm5hbEtpbmQoa2luZCksICJjYW4ndCBnZXQgIiwgZXhwb3J0TnVt
YmVyLCAidGggRXhwb3J0J3Mga2luZCwgbmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOworICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihraW5kSW5kZXgpLCAiY2Fu
J3QgZ2V0ICIsIGV4cG9ydE51bWJlciwgInRoIEV4cG9ydCdzIGtpbmQgaW5kZXgsIG5hbWVkICci
LCBmaWVsZFN0cmluZywgIiciKTsKKyAgICAgICAgc3dpdGNoIChraW5kKSB7CisgICAgICAgIGNh
c2UgRXh0ZXJuYWxLaW5kOjpGdW5jdGlvbjogeworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRihraW5kSW5kZXggPj0gbV9pbmZvLT5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCksIGV4cG9y
dE51bWJlciwgInRoIEV4cG9ydCBoYXMgaW52YWxpZCBmdW5jdGlvbiBudW1iZXIgIiwga2luZElu
ZGV4LCAiIGl0IGV4Y2VlZHMgdGhlIGZ1bmN0aW9uIGluZGV4IHNwYWNlICIsIG1faW5mby0+ZnVu
Y3Rpb25JbmRleFNwYWNlU2l6ZSgpLCAiLCBuYW1lZCAnIiwgZmllbGRTdHJpbmcsICInIik7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEV4dGVybmFsS2luZDo6
VGFibGU6IHsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoa2luZEluZGV4ID49IG1f
aW5mby0+dGFibGVDb3VudCgpLCAiY2FuJ3QgZXhwb3J0IFRhYmxlICIsIGtpbmRJbmRleCwgIiB0
aGVyZSBhcmUgIiwgbV9pbmZvLT50YWJsZUNvdW50KCksICIgVGFibGVzIik7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEV4dGVybmFsS2luZDo6TWVtb3J5OiB7
CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPm1lbW9yeSwgImNhbid0
IGV4cG9ydCBhIG5vbi1leGlzdGVudCBNZW1vcnkiKTsKKyAgICAgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoa2luZEluZGV4LCAiY2FuJ3QgZXhwb3J0IE1lbW9yeSAiLCBraW5kSW5kZXgsICIg
b25seSBvbmUgVGFibGUgaXMgY3VycmVudGx5IHN1cHBvcnRlZCIpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6Okdsb2JhbDogeworICAg
ICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihraW5kSW5kZXggPj0gbV9pbmZvLT5nbG9iYWxz
LnNpemUoKSwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0IGhhcyBpbnZhbGlkIGdsb2JhbCBudW1i
ZXIgIiwga2luZEluZGV4LCAiIGl0IGV4Y2VlZHMgdGhlIGdsb2JhbHMgY291bnQgIiwgbV9pbmZv
LT5nbG9iYWxzLnNpemUoKSwgIiwgbmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOworICAgICAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX2luZm8tPmdsb2JhbHNba2luZEluZGV4XS5tdXRh
YmlsaXR5ICE9IEdsb2JhbDo6SW1tdXRhYmxlLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQgaXNu
J3QgaW1tdXRhYmxlLCBuYW1lZCAnIiwgZmllbGRTdHJpbmcsICInIik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbV9pbmZvLT5leHBvcnRzLnVu
Y2hlY2tlZEFwcGVuZCh7IFdURk1vdmUoZmllbGRTdHJpbmcpLCBraW5kLCBraW5kSW5kZXggfSk7
CisgICAgfQorCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJz
ZVN0YXJ0KCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHVpbnQzMl90IHN0YXJ0RnVuY3Rpb25J
bmRleDsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihzdGFydEZ1bmN0
aW9uSW5kZXgpLCAiY2FuJ3QgZ2V0IFN0YXJ0IGluZGV4Iik7CisgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRihzdGFydEZ1bmN0aW9uSW5kZXggPj0gbV9pbmZvLT5mdW5jdGlvbkluZGV4U3BhY2VTaXpl
KCksICJTdGFydCBpbmRleCAiLCBzdGFydEZ1bmN0aW9uSW5kZXgsICIgZXhjZWVkcyBmdW5jdGlv
biBpbmRleCBzcGFjZSAiLCBtX2luZm8tPmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7CisgICAg
U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX2luZm8tPnNpZ25hdHVyZUluZGV4RnJv
bUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXgpOworICAgIGNvbnN0IFNpZ25h
dHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRl
eCk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCAi
U3RhcnQgZnVuY3Rpb24gY2FuJ3QgaGF2ZSBhcmd1bWVudHMiKTsKKyAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKHNpZ25hdHVyZS5yZXR1cm5UeXBlKCkgIT0gVm9pZCwgIlN0YXJ0IGZ1bmN0aW9uIGNh
bid0IHJldHVybiBhIHZhbHVlIik7CisgICAgbV9pbmZvLT5zdGFydEZ1bmN0aW9uSW5kZXhTcGFj
ZSA9IHN0YXJ0RnVuY3Rpb25JbmRleDsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIFNlY3Rp
b25QYXJzZXI6OnBhcnNlRWxlbWVudCgpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1aW50MzJf
dCBlbGVtZW50Q291bnQ7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIo
ZWxlbWVudENvdW50KSwgImNhbid0IGdldCBFbGVtZW50IHNlY3Rpb24ncyBjb3VudCIpOworICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoZWxlbWVudENvdW50ID4gbWF4VGFibGVFbnRyaWVzLCAiRWxl
bWVudCBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBlbGVtZW50Q291bnQsICIgbWF4aW11
bSAiLCBtYXhUYWJsZUVudHJpZXMpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+
ZWxlbWVudHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGVsZW1lbnRDb3VudCksICJjYW4ndCBhbGxvY2F0
ZSBtZW1vcnkgZm9yICIsIGVsZW1lbnRDb3VudCwgIiBFbGVtZW50cyIpOworICAgIGZvciAodW5z
aWduZWQgZWxlbWVudE51bSA9IDA7IGVsZW1lbnROdW0gPCBlbGVtZW50Q291bnQ7ICsrZWxlbWVu
dE51bSkgeworICAgICAgICB1aW50MzJfdCB0YWJsZUluZGV4OworICAgICAgICB1aW50NjRfdCBp
bml0RXhwckJpdHM7CisgICAgICAgIHVpbnQ4X3QgaW5pdE9wY29kZTsKKyAgICAgICAgdWludDMy
X3QgaW5kZXhDb3VudDsKKworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJ
bnQzMih0YWJsZUluZGV4KSwgImNhbid0IGdldCAiLCBlbGVtZW50TnVtLCAidGggRWxlbWVudCB0
YWJsZSBpbmRleCIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHRhYmxlSW5kZXggPj0g
bV9pbmZvLT50YWJsZUNvdW50KCksICJFbGVtZW50IHNlY3Rpb24gZm9yIFRhYmxlICIsIHRhYmxl
SW5kZXgsICIgZXhjZWVkcyBhdmFpbGFibGUgVGFibGUgIiwgbV9pbmZvLT50YWJsZUNvdW50KCkp
OworICAgICAgICBUeXBlIGluaXRFeHByVHlwZTsKKyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBF
Ul9GQUlMUyhwYXJzZUluaXRFeHByKGluaXRPcGNvZGUsIGluaXRFeHByQml0cywgaW5pdEV4cHJU
eXBlKSk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoaW5pdEV4cHJUeXBlICE9IEkzMiwg
IkVsZW1lbnQgaW5pdF9leHByIG11c3QgcHJvZHVjZSBhbiBpMzIiKTsKKyAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoaW5kZXhDb3VudCksICJjYW4ndCBnZXQgIiwg
ZWxlbWVudE51bSwgInRoIGluZGV4IGNvdW50IGZvciBFbGVtZW50IHNlY3Rpb24iKTsKKyAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbmRleENvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8
dWludDMyX3Q+OjptYXgoKSwgIkVsZW1lbnQgc2VjdGlvbidzICIsIGVsZW1lbnROdW0sICJ0aCBp
bmRleCBjb3VudCBpcyB0b28gYmlnICIsIGluZGV4Q291bnQpOworCisgICAgICAgIEFTU0VSVCgh
IW1faW5mby0+dGFibGVJbmZvcm1hdGlvbik7CisKKyAgICAgICAgRWxlbWVudCBlbGVtZW50KG1h
a2VJMzJJbml0RXhwcihpbml0T3Bjb2RlLCBpbml0RXhwckJpdHMpKTsKKyAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighZWxlbWVudC5mdW5jdGlvbkluZGljZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5
KGluZGV4Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiLCBpbmRleENvdW50LCAi
IEVsZW1lbnQgaW5kaWNlcyIpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBp
bmRleCA8IGluZGV4Q291bnQ7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIHVpbnQzMl90IGZ1bmN0
aW9uSW5kZXg7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQz
MihmdW5jdGlvbkluZGV4KSwgImNhbid0IGdldCBFbGVtZW50IHNlY3Rpb24ncyAiLCBlbGVtZW50
TnVtLCAidGggZWxlbWVudCdzICIsIGluZGV4LCAidGggaW5kZXgiKTsKKyAgICAgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25JbmRleCA+PSBtX2luZm8tPmZ1bmN0aW9uSW5kZXhT
cGFjZVNpemUoKSwgIkVsZW1lbnQgc2VjdGlvbidzICIsIGVsZW1lbnROdW0sICJ0aCBlbGVtZW50
J3MgIiwgaW5kZXgsICJ0aCBpbmRleCBpcyAiLCBmdW5jdGlvbkluZGV4LCAiIHdoaWNoIGV4Y2Vl
ZHMgdGhlIGZ1bmN0aW9uIGluZGV4IHNwYWNlIHNpemUgb2YgIiwgbV9pbmZvLT5mdW5jdGlvbklu
ZGV4U3BhY2VTaXplKCkpOworCisgICAgICAgICAgICBlbGVtZW50LmZ1bmN0aW9uSW5kaWNlcy51
bmNoZWNrZWRBcHBlbmQoZnVuY3Rpb25JbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBtX2lu
Zm8tPmVsZW1lbnRzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGVsZW1lbnQpKTsKKyAgICB9CisK
KyAgICByZXR1cm4geyB9OworfQorCisvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2hhbmdlZCB0
byBiZSBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCBvbmNlIHdlIHN3aXRjaCBvdXIgcGFyc2lu
ZyBpbmZyYXN0cnVjdHVyZSB0byB0aGUgc3RyZWFtaW5nIHBhcnNlci4KK2F1dG8gU2VjdGlvblBh
cnNlcjo6cGFyc2VDb2RlKCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHVpbnQzMl90IGNvdW50
OworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGNvdW50KSwgImNhbid0
IGdldCBDb2RlIHNlY3Rpb24ncyBjb3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoY291
bnQgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLCAiQ29kZSBzZWN0aW9u
J3MgY291bnQgaXMgdG9vIGJpZyAiLCBjb3VudCk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihj
b3VudCAhPSBtX2luZm8tPmZ1bmN0aW9ucy5zaXplKCksICJDb2RlIHNlY3Rpb24gY291bnQgIiwg
Y291bnQsICIgZXhjZWVkcyB0aGUgZGVjbGFyZWQgbnVtYmVyIG9mIGZ1bmN0aW9ucyAiLCBtX2lu
Zm8tPmZ1bmN0aW9ucy5zaXplKCkpOworCisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNv
dW50OyArK2kpIHsKKyAgICAgICAgdWludDMyX3QgZnVuY3Rpb25TaXplOworICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihmdW5jdGlvblNpemUpLCAiY2FuJ3QgZ2V0
ICIsIGksICJ0aCBDb2RlIGZ1bmN0aW9uJ3Mgc2l6ZSIpOworICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKGZ1bmN0aW9uU2l6ZSA+IGxlbmd0aCgpLCAiQ29kZSBmdW5jdGlvbidzIHNpemUgIiwg
ZnVuY3Rpb25TaXplLCAiIGV4Y2VlZHMgdGhlIG1vZHVsZSdzIHNpemUgIiwgbGVuZ3RoKCkpOwor
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGZ1bmN0aW9uU2l6ZSA+IGxlbmd0aCgpIC0gbV9v
ZmZzZXQsICJDb2RlIGZ1bmN0aW9uJ3Mgc2l6ZSAiLCBmdW5jdGlvblNpemUsICIgZXhjZWVkcyB0
aGUgbW9kdWxlJ3MgcmVtYWluaW5nIHNpemUiLCBsZW5ndGgoKSAtIG1fb2Zmc2V0KTsKKyAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvblNpemUgPiBtYXhGdW5jdGlvblNpemUsICJD
b2RlIGZ1bmN0aW9uJ3Mgc2l6ZSAiLCBmdW5jdGlvblNpemUsICIgaXMgdG9vIGJpZyIpOworCisg
ICAgICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhKGZ1bmN0aW9uU2l6ZSk7CisgICAgICAgIHN0ZDo6
bWVtY3B5KGRhdGEuZGF0YSgpLCBzb3VyY2UoKSArIG1fb2Zmc2V0LCBmdW5jdGlvblNpemUpOwor
ICAgICAgICBtX2luZm8tPmZ1bmN0aW9uc1tpXS5zdGFydCA9IG1fb2Zmc2V0SW5Tb3VyY2UgKyBt
X29mZnNldDsKKyAgICAgICAgbV9pbmZvLT5mdW5jdGlvbnNbaV0uZW5kID0gbV9vZmZzZXRJblNv
dXJjZSArIG1fb2Zmc2V0ICsgZnVuY3Rpb25TaXplOworICAgICAgICBtX2luZm8tPmZ1bmN0aW9u
c1tpXS5kYXRhID0gV1RGTW92ZShkYXRhKTsKKyAgICAgICAgbV9vZmZzZXQgKz0gZnVuY3Rpb25T
aXplOworICAgIH0KKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gU2VjdGlvblBhcnNlcjo6
cGFyc2VJbml0RXhwcih1aW50OF90JiBvcGNvZGUsIHVpbnQ2NF90JiBiaXRzT3JJbXBvcnROdW1i
ZXIsIFR5cGUmIHJlc3VsdFR5cGUpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVVJbnQ4KG9wY29kZSksICJjYW4ndCBnZXQgaW5pdF9leHByJ3Mgb3Bj
b2RlIik7CisKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgSTMyQ29uc3Q6IHsKKyAg
ICAgICAgaW50MzJfdCBjb25zdGFudDsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFy
c2VWYXJJbnQzMihjb25zdGFudCksICJjYW4ndCBnZXQgY29uc3RhbnQgdmFsdWUgZm9yIGluaXRf
ZXhwcidzIGkzMi5jb25zdCIpOworICAgICAgICBiaXRzT3JJbXBvcnROdW1iZXIgPSBzdGF0aWNf
Y2FzdDx1aW50NjRfdD4oY29uc3RhbnQpOworICAgICAgICByZXN1bHRUeXBlID0gSTMyOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEk2NENvbnN0OiB7CisgICAgICAgIGludDY0
X3QgY29uc3RhbnQ7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFySW50NjQo
Y29uc3RhbnQpLCAiY2FuJ3QgZ2V0IGNvbnN0YW50IHZhbHVlIGZvciBpbml0X2V4cHIncyBpNjQu
Y29uc3QiKTsKKyAgICAgICAgYml0c09ySW1wb3J0TnVtYmVyID0gY29uc3RhbnQ7CisgICAgICAg
IHJlc3VsdFR5cGUgPSBJNjQ7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRjMy
Q29uc3Q6IHsKKyAgICAgICAgdWludDMyX3QgY29uc3RhbnQ7CisgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXBhcnNlVUludDMyKGNvbnN0YW50KSwgImNhbid0IGdldCBjb25zdGFudCB2YWx1
ZSBmb3IgaW5pdF9leHByJ3MgZjMyLmNvbnN0Iik7CisgICAgICAgIGJpdHNPckltcG9ydE51bWJl
ciA9IGNvbnN0YW50OworICAgICAgICByZXN1bHRUeXBlID0gRjMyOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBjYXNlIEY2NENvbnN0OiB7CisgICAgICAgIHVpbnQ2NF90IGNvbnN0YW50
OworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ2NChjb25zdGFudCksICJj
YW4ndCBnZXQgY29uc3RhbnQgdmFsdWUgZm9yIGluaXRfZXhwcidzIGY2NC5jb25zdCIpOworICAg
ICAgICBiaXRzT3JJbXBvcnROdW1iZXIgPSBjb25zdGFudDsKKyAgICAgICAgcmVzdWx0VHlwZSA9
IEY2NDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBHZXRHbG9iYWw6IHsKKyAg
ICAgICAgdWludDMyX3QgaW5kZXg7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNl
VmFyVUludDMyKGluZGV4KSwgImNhbid0IGdldCBnZXRfZ2xvYmFsJ3MgaW5kZXgiKTsKKworICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluZGV4ID49IG1faW5mby0+Z2xvYmFscy5zaXplKCks
ICJnZXRfZ2xvYmFsJ3MgaW5kZXggIiwgaW5kZXgsICIgZXhjZWVkcyB0aGUgbnVtYmVyIG9mIGds
b2JhbHMgIiwgbV9pbmZvLT5nbG9iYWxzLnNpemUoKSk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoaW5kZXggPj0gbV9pbmZvLT5maXJzdEludGVybmFsR2xvYmFsLCAiZ2V0X2dsb2JhbCBp
bXBvcnQga2luZCBpbmRleCAiLCBpbmRleCwgIiBleGNlZWRzIHRoZSBmaXJzdCBpbnRlcm5hbCBn
bG9iYWwgIiwgbV9pbmZvLT5maXJzdEludGVybmFsR2xvYmFsKTsKKworICAgICAgICBBU1NFUlQo
bV9pbmZvLT5nbG9iYWxzW2luZGV4XS5tdXRhYmlsaXR5ID09IEdsb2JhbDo6SW1tdXRhYmxlKTsK
KyAgICAgICAgcmVzdWx0VHlwZSA9IG1faW5mby0+Z2xvYmFsc1tpbmRleF0udHlwZTsKKyAgICAg
ICAgYml0c09ySW1wb3J0TnVtYmVyID0gaW5kZXg7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYodHJ1ZSwgInVua25vd24g
aW5pdF9leHByIG9wY29kZSAiLCBvcGNvZGUpOworICAgIH0KKworICAgIHVpbnQ4X3QgZW5kT3Bj
b2RlOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUludDgoZW5kT3Bjb2RlKSwgImNh
bid0IGdldCBpbml0X2V4cHIncyBlbmQgb3Bjb2RlIik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RihlbmRPcGNvZGUgIT0gT3BUeXBlOjpFbmQsICJpbml0X2V4cHIgc2hvdWxkIGVuZCB3aXRoIGVu
ZCwgZW5kZWQgd2l0aCAiLCBlbmRPcGNvZGUpOworCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0
byBTZWN0aW9uUGFyc2VyOjpwYXJzZUdsb2JhbFR5cGUoR2xvYmFsJiBnbG9iYWwpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICB1aW50OF90IG11dGFiaWxpdHk7CisgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VWYWx1ZVR5cGUoZ2xvYmFsLnR5cGUpLCAiY2FuJ3QgZ2V0IEdsb2JhbCdzIHZh
bHVlIHR5cGUiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQxKG11dGFi
aWxpdHkpLCAiY2FuJ3QgZ2V0IEdsb2JhbCB0eXBlJ3MgbXV0YWJpbGl0eSIpOworICAgIGdsb2Jh
bC5tdXRhYmlsaXR5ID0gc3RhdGljX2Nhc3Q8R2xvYmFsOjpNdXRhYmlsaXR5PihtdXRhYmlsaXR5
KTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlRGF0YSgp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1aW50MzJfdCBzZWdtZW50Q291bnQ7CisgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoc2VnbWVudENvdW50KSwgImNhbid0IGdl
dCBEYXRhIHNlY3Rpb24ncyBjb3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoc2VnbWVu
dENvdW50ID4gbWF4RGF0YVNlZ21lbnRzLCAiRGF0YSBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJp
ZyAiLCBzZWdtZW50Q291bnQsICIgbWF4aW11bSAiLCBtYXhEYXRhU2VnbWVudHMpOworICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+ZGF0YS50cnlSZXNlcnZlQ2FwYWNpdHkoc2VnbWVu
dENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIERhdGEgc2VjdGlvbidz
ICIsIHNlZ21lbnRDb3VudCwgIiBzZWdtZW50cyIpOworCisgICAgZm9yICh1aW50MzJfdCBzZWdt
ZW50TnVtYmVyID0gMDsgc2VnbWVudE51bWJlciA8IHNlZ21lbnRDb3VudDsgKytzZWdtZW50TnVt
YmVyKSB7CisgICAgICAgIHVpbnQzMl90IG1lbW9yeUluZGV4OworICAgICAgICB1aW50NjRfdCBp
bml0RXhwckJpdHM7CisgICAgICAgIHVpbnQ4X3QgaW5pdE9wY29kZTsKKyAgICAgICAgdWludDMy
X3QgZGF0YUJ5dGVMZW5ndGg7CisKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VW
YXJVSW50MzIobWVtb3J5SW5kZXgpLCAiY2FuJ3QgZ2V0ICIsIHNlZ21lbnROdW1iZXIsICJ0aCBE
YXRhIHNlZ21lbnQncyBpbmRleCIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG1lbW9y
eUluZGV4ID49IG1faW5mby0+bWVtb3J5Q291bnQoKSwgc2VnbWVudE51bWJlciwgInRoIERhdGEg
c2VnbWVudCBoYXMgaW5kZXggIiwgbWVtb3J5SW5kZXgsICIgd2hpY2ggZXhjZWVkcyB0aGUgbnVt
YmVyIG9mIE1lbW9yaWVzICIsIG1faW5mby0+bWVtb3J5Q291bnQoKSk7CisgICAgICAgIFR5cGUg
aW5pdEV4cHJUeXBlOworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlSW5p
dEV4cHIoaW5pdE9wY29kZSwgaW5pdEV4cHJCaXRzLCBpbml0RXhwclR5cGUpKTsKKyAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRihpbml0RXhwclR5cGUgIT0gSTMyLCBzZWdtZW50TnVtYmVyLCAi
dGggRGF0YSBzZWdtZW50J3MgaW5pdF9leHByIG11c3QgcHJvZHVjZSBhbiBpMzIiKTsKKyAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZGF0YUJ5dGVMZW5ndGgpLCAi
Y2FuJ3QgZ2V0ICIsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQncyBkYXRhIGJ5dGUg
bGVuZ3RoIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZGF0YUJ5dGVMZW5ndGggPiBt
YXhNb2R1bGVTaXplLCBzZWdtZW50TnVtYmVyLCAidGggRGF0YSBzZWdtZW50J3MgZGF0YSBieXRl
IGxlbmd0aCBpcyB0b28gYmlnICIsIGRhdGFCeXRlTGVuZ3RoLCAiIG1heGltdW0gIiwgbWF4TW9k
dWxlU2l6ZSk7CisKKyAgICAgICAgU2VnbWVudCogc2VnbWVudCA9IFNlZ21lbnQ6OmNyZWF0ZSht
YWtlSTMySW5pdEV4cHIoaW5pdE9wY29kZSwgaW5pdEV4cHJCaXRzKSwgZGF0YUJ5dGVMZW5ndGgp
OworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFzZWdtZW50LCAiY2FuJ3QgYWxsb2NhdGUg
ZW5vdWdoIG1lbW9yeSBmb3IgIiwgc2VnbWVudE51bWJlciwgInRoIERhdGEgc2VnbWVudCBvZiBz
aXplICIsIGRhdGFCeXRlTGVuZ3RoKTsKKyAgICAgICAgbV9pbmZvLT5kYXRhLnVuY2hlY2tlZEFw
cGVuZChTZWdtZW50OjphZG9wdFB0cihzZWdtZW50KSk7CisgICAgICAgIGZvciAodWludDMyX3Qg
ZGF0YUJ5dGUgPSAwOyBkYXRhQnl0ZSA8IGRhdGFCeXRlTGVuZ3RoOyArK2RhdGFCeXRlKSB7Cisg
ICAgICAgICAgICB1aW50OF90IGJ5dGU7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFwYXJzZVVJbnQ4KGJ5dGUpLCAiY2FuJ3QgZ2V0ICIsIGRhdGFCeXRlLCAidGggZGF0YSBieXRl
IGZyb20gIiwgc2VnbWVudE51bWJlciwgInRoIERhdGEgc2VnbWVudCIpOworICAgICAgICAgICAg
c2VnbWVudC0+Ynl0ZShkYXRhQnl0ZSkgPSBieXRlOworICAgICAgICB9CisgICAgfQorICAgIHJl
dHVybiB7IH07Cit9CisKK2F1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VDdXN0b20oKSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgQ3VzdG9tU2VjdGlvbiBzZWN0aW9uOworICAgIHVpbnQzMl90IGN1
c3RvbVNlY3Rpb25OdW1iZXIgPSBtX2luZm8tPmN1c3RvbVNlY3Rpb25zLnNpemUoKSArIDE7Cisg
ICAgdWludDMyX3QgbmFtZUxlbjsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmN1
c3RvbVNlY3Rpb25zLnRyeVJlc2VydmVDYXBhY2l0eShjdXN0b21TZWN0aW9uTnVtYmVyKSwgImNh
bid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGN1c3RvbVNlY3Rpb25OdW1iZXIsICJ0
aCBjdXN0b20gc2VjdGlvbiIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUlu
dDMyKG5hbWVMZW4pLCAiY2FuJ3QgZ2V0ICIsIGN1c3RvbVNlY3Rpb25OdW1iZXIsICJ0aCBjdXN0
b20gc2VjdGlvbidzIG5hbWUgbGVuZ3RoIik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighY29u
c3VtZVVURjhTdHJpbmcoc2VjdGlvbi5uYW1lLCBuYW1lTGVuKSwgIm5hbWVMZW4gZ2V0ICIsIGN1
c3RvbVNlY3Rpb25OdW1iZXIsICJ0aCBjdXN0b20gc2VjdGlvbidzIG5hbWUgb2YgbGVuZ3RoICIs
IG5hbWVMZW4pOworCisgICAgdWludDMyX3QgcGF5bG9hZEJ5dGVzID0gbGVuZ3RoKCkgLSBtX29m
ZnNldDsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFzZWN0aW9uLnBheWxvYWQudHJ5UmVzZXJ2
ZUNhcGFjaXR5KHBheWxvYWRCeXRlcyksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZv
ciAiLCBjdXN0b21TZWN0aW9uTnVtYmVyLCAidGggY3VzdG9tIHNlY3Rpb24ncyAiLCBwYXlsb2Fk
Qnl0ZXMsICIgYnl0ZXMiKTsKKyAgICBmb3IgKHVpbnQzMl90IGJ5dGVOdW1iZXIgPSAwOyBieXRl
TnVtYmVyIDwgcGF5bG9hZEJ5dGVzOyArK2J5dGVOdW1iZXIpIHsKKyAgICAgICAgdWludDhfdCBi
eXRlOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ4KGJ5dGUpLCAiY2Fu
J3QgZ2V0ICIsIGJ5dGVOdW1iZXIsICJ0aCBkYXRhIGJ5dGUgZnJvbSAiLCBjdXN0b21TZWN0aW9u
TnVtYmVyLCAidGggY3VzdG9tIHNlY3Rpb24iKTsKKyAgICAgICAgc2VjdGlvbi5wYXlsb2FkLnVu
Y2hlY2tlZEFwcGVuZChieXRlKTsKKyAgICB9CisKKyAgICBOYW1lIG5hbWVOYW1lID0geyAnbics
ICdhJywgJ20nLCAnZScgfTsKKyAgICBpZiAoc2VjdGlvbi5uYW1lID09IG5hbWVOYW1lKSB7Cisg
ICAgICAgIE5hbWVTZWN0aW9uUGFyc2VyIG5hbWVTZWN0aW9uUGFyc2VyKHNlY3Rpb24ucGF5bG9h
ZC5iZWdpbigpLCBzZWN0aW9uLnBheWxvYWQuc2l6ZSgpLCBtX2luZm8pOworICAgICAgICBpZiAo
YXV0byBuYW1lU2VjdGlvbiA9IG5hbWVTZWN0aW9uUGFyc2VyLnBhcnNlKCkpCisgICAgICAgICAg
ICBtX2luZm8tPm5hbWVTZWN0aW9uID0gV1RGTW92ZSgqbmFtZVNlY3Rpb24pOworICAgIH0KKwor
ICAgIG1faW5mby0+Y3VzdG9tU2VjdGlvbnMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoc2VjdGlv
bikpOworCisgICAgcmV0dXJuIHsgfTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20K
KworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9uUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc4ZDAyODM2ZmM5ZjMyYmMy
Yjc4ZmJmOTBhZDJjNWRhOWY5MTI4M2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kgPHl1c3VrZXN1enVraUBzbG93c3RhcnQu
b3JnPi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJXYXNtRm9ybWF0
LmgiCisjaW5jbHVkZSAiV2FzbU9wcy5oIgorI2luY2x1ZGUgIldhc21QYXJzZXIuaCIKKyNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK2NsYXNzIFNlY3Rpb25QYXJzZXIgZmluYWwgOiBw
dWJsaWMgUGFyc2VyPHZvaWQ+IHsKK3B1YmxpYzoKKyAgICBTZWN0aW9uUGFyc2VyKGNvbnN0IHVp
bnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCBzaXplX3Qgb2Zmc2V0SW5Tb3VyY2UsIE1vZHVsZUlu
Zm9ybWF0aW9uJiBpbmZvKQorICAgICAgICA6IFBhcnNlcihkYXRhLCBzaXplKQorICAgICAgICAs
IG1fb2Zmc2V0SW5Tb3VyY2Uob2Zmc2V0SW5Tb3VyY2UpCisgICAgICAgICwgbV9pbmZvKGluZm8p
CisgICAgeworICAgIH0KKworI2RlZmluZSBXQVNNX1NFQ1RJT05fREVDTEFSRV9QQVJTRVIoTkFN
RSwgSUQsIERFU0NSSVBUSU9OKSBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJz
ZSAjIyBOQU1FKCk7CisgICAgRk9SX0VBQ0hfS05PV05fV0FTTV9TRUNUSU9OKFdBU01fU0VDVElP
Tl9ERUNMQVJFX1BBUlNFUikKKyN1bmRlZiBXQVNNX1NFQ1RJT05fREVDTEFSRV9QQVJTRVIKKwor
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlQ3VzdG9tKCk7CisKK3By
aXZhdGU6CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIC4uLkFyZ3M+CisgICAgTkVWRVJfSU5MSU5F
IFVuZXhwZWN0ZWRSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGZhaWwoQXJncy4uLiBhcmdzKSBj
b25zdAorICAgIHsKKyAgICAgICAgdXNpbmcgbmFtZXNwYWNlIEZhaWx1cmVIZWxwZXI7IC8vIFNl
ZSBBREwgY29tbWVudCBpbiBuYW1lc3BhY2UgYWJvdmUuCisgICAgICAgIHJldHVybiBVbmV4cGVj
dGVkUmVzdWx0KG1ha2VTdHJpbmcoIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0
IGJ5dGUgIl9zLCBTdHJpbmc6Om51bWJlcihtX29mZnNldCArIG1fb2Zmc2V0SW5Tb3VyY2UpLCAi
OiAiX3MsIG1ha2VTdHJpbmcoYXJncykuLi4pKTsKKyAgICB9CisKKyAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUdsb2JhbFR5cGUoR2xvYmFsJik7CisgICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VNZW1vcnlIZWxwZXIoYm9vbCBpc0ltcG9y
dCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VUYWJsZUhlbHBl
cihib29sIGlzSW1wb3J0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBw
YXJzZVJlc2l6YWJsZUxpbWl0cyh1aW50MzJfdCYgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50
MzJfdD4mIG1heGltdW0pOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBh
cnNlSW5pdEV4cHIodWludDhfdCYsIHVpbnQ2NF90JiwgVHlwZSYgaW5pdEV4cHJUeXBlKTsKKwor
ICAgIHNpemVfdCBtX29mZnNldEluU291cmNlOworICAgIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4g
bV9pbmZvOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVO
QUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVN0cmVhbWluZ1BhcnNlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWE1NzA3MDlhNTZjODhjZWU5MTJhNDMy
ODU4ZTNmYWIzMDUyZGE2MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwCkBAIC0wLDAgKzEsMzkxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kgPHl1c3VrZXN1enVraUBzbG93c3RhcnQu
b3JnPi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21TdHJlYW1pbmdQYXJzZXIuaCIKKworI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIldhc21Nb2R1bGVQYXJzZXIuaCIKKyNpbmNs
dWRlICJXYXNtU2VjdGlvblBhcnNlci5oIgorI2luY2x1ZGUgPHd0Zi9VbmFsaWduZWRBY2Nlc3Mu
aD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworbmFtZXNwYWNlIFdhc21T
dHJlYW1pbmdQYXJzZXJJbnRlcm5hbCB7CitzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9
IGZhbHNlOworfQorCisjZGVmaW5lIFdBU01fU1RSRUFNSU5HX1BBUlNFUl9GQUlMX0lGX0hFTFBF
Ul9GQUlMUyhoZWxwZXIpIFwKKyAgICBkbyB7IFwKKyAgICAgICAgYXV0byBoZWxwZXJSZXN1bHQg
PSBoZWxwZXI7IFwKKyAgICAgICAgaWYgKFVOTElLRUxZKCFoZWxwZXJSZXN1bHQpKSB7IFwKKyAg
ICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gaGVscGVyUmVzdWx0LmVycm9yKCk7IFwKKyAgICAg
ICAgICAgIHJldHVybiBTdGF0ZTo6RmF0YWxFcnJvcjsgXAorICAgICAgICB9IFwKKyAgICB9IHdo
aWxlICgwKQorCitBTFdBWVNfSU5MSU5FIHN0ZDo6b3B0aW9uYWw8dWludDhfdD4gcGFyc2VVSW50
Nyhjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QmIG9mZnNldCwgc2l6ZV90IHNpemUpCit7Cisg
ICAgaWYgKG9mZnNldCA+PSBzaXplKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgdWludDhf
dCByZXN1bHQgPSBkYXRhW29mZnNldCsrXTsKKyAgICBpZiAocmVzdWx0IDwgMHg4MCkKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgLi4uQXJncz4KK05FVkVSX0lOTElORSBhdXRvIFdBUk5fVU5VU0VEX1JFVFVS
TiBTdHJlYW1pbmdQYXJzZXI6OmZhaWwoQXJncy4uLiBhcmdzKSAtPiBTdGF0ZQoreworICAgIHVz
aW5nIG5hbWVzcGFjZSBGYWlsdXJlSGVscGVyOyAvLyBTZWUgQURMIGNvbW1lbnQgaW4gbmFtZXNw
YWNlIGFib3ZlLgorICAgIG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygiV2ViQXNzZW1ibHku
TW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAiX3MsIFN0cmluZzo6bnVtYmVyKG1fb2Zmc2V0
KSwgIjogIl9zLCBtYWtlU3RyaW5nKGFyZ3MpLi4uKTsKKyAgICBkYXRhTG9nTG5JZihXYXNtU3Ry
ZWFtaW5nUGFyc2VySW50ZXJuYWw6OnZlcmJvc2UsIG1fZXJyb3JNZXNzYWdlKTsKKyAgICByZXR1
cm4gU3RhdGU6OkZhdGFsRXJyb3I7Cit9CisKK1N0cmVhbWluZ1BhcnNlcjo6U3RyZWFtaW5nUGFy
c2VyKE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvKQorICAgIDogbV9pbmZvKGluZm8pCit7CisgICAg
ZGF0YUxvZ0xuSWYoV2FzbVN0cmVhbWluZ1BhcnNlckludGVybmFsOjp2ZXJib3NlLCAic3RhcnRp
bmcgdmFsaWRhdGlvbiIpOworfQorCithdXRvIFN0cmVhbWluZ1BhcnNlcjo6cGFyc2VNb2R1bGVI
ZWFkZXIoVmVjdG9yPHVpbnQ4X3Q+JiYgZGF0YSkgLT4gU3RhdGUKK3sKKyAgICBBU1NFUlQoZGF0
YS5zaXplKCkgPT0gbW9kdWxlSGVhZGVyU2l6ZSk7CisgICAgZGF0YUxvZ0xuSWYoV2FzbVN0cmVh
bWluZ1BhcnNlckludGVybmFsOjp2ZXJib3NlLCAiaGVhZGVyIHZhbGlkYXRpb24iKTsKKyAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKGRhdGFbMF0gIT0gJ1wwJyB8fCBkYXRhWzFdICE9ICdhJyB8fCBk
YXRhWzJdICE9ICdzJyB8fCBkYXRhWzNdICE9ICdtJywgIm1vZHVsZXMgZG9lc24ndCBzdGFydCB3
aXRoICdcXDBhc20nIik7CisgICAgdWludDMyX3QgdmVyc2lvbk51bWJlciA9IFdURjo6dW5hbGln
bmVkTG9hZDx1aW50MzJfdD4oZGF0YS5kYXRhKCkgKyA0KTsKKyAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKHZlcnNpb25OdW1iZXIgIT0gZXhwZWN0ZWRWZXJzaW9uTnVtYmVyLCAidW5leHBlY3RlZCB2
ZXJzaW9uIG51bWJlciAiLCB2ZXJzaW9uTnVtYmVyLCAiIGV4cGVjdGVkICIsIGV4cGVjdGVkVmVy
c2lvbk51bWJlcik7CisgICAgcmV0dXJuIFN0YXRlOjpTZWN0aW9uSGVhZGVyOworfQorCithdXRv
IFN0cmVhbWluZ1BhcnNlcjo6cGFyc2VTZWN0aW9uSGVhZGVyKFZlY3Rvcjx1aW50OF90PiYmIGRh
dGEpIC0+IFN0YXRlCit7CisgICAgQVNTRVJUKGRhdGEuc2l6ZSgpID09IHNlY3Rpb25IZWFkZXJT
aXplKTsKKyAgICBzaXplX3Qgb2Zmc2V0ID0gMDsKKyAgICBhdXRvIHJlc3VsdCA9IHBhcnNlVUlu
dDcoZGF0YS5kYXRhKCksIG9mZnNldCwgZGF0YS5zaXplKCkpOworICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIXJlc3VsdCwgImNhbid0IGdldCBzZWN0aW9uIGJ5dGUiKTsKKworICAgIFNlY3Rpb24g
c2VjdGlvbiA9IFNlY3Rpb246OkN1c3RvbTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFkZWNv
ZGVTZWN0aW9uKCpyZXN1bHQsIHNlY3Rpb24pLCAiaW52YWxpZCBzZWN0aW9uIik7CisgICAgQVNT
RVJUKHNlY3Rpb24gIT0gU2VjdGlvbjo6QmVnaW4pOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXZhbGlkYXRlT3JkZXIobV9wcmV2aW91c0tub3duU2VjdGlvbiwgc2VjdGlvbiksICJpbnZhbGlk
IHNlY3Rpb24gb3JkZXIsICIsIG1fcHJldmlvdXNLbm93blNlY3Rpb24sICIgZm9sbG93ZWQgYnkg
Iiwgc2VjdGlvbik7CisgICAgbV9zZWN0aW9uID0gc2VjdGlvbjsKKyAgICBpZiAoaXNLbm93blNl
Y3Rpb24oc2VjdGlvbikpCisgICAgICAgIG1fcHJldmlvdXNLbm93blNlY3Rpb24gPSBzZWN0aW9u
OworICAgIHJldHVybiBTdGF0ZTo6U2VjdGlvblNpemU7Cit9CisKK2F1dG8gU3RyZWFtaW5nUGFy
c2VyOjpwYXJzZVNlY3Rpb25TaXplKHVpbnQzMl90IHNlY3Rpb25MZW5ndGgpIC0+IFN0YXRlCit7
CisgICAgbV9zZWN0aW9uTGVuZ3RoID0gc2VjdGlvbkxlbmd0aDsKKyAgICBpZiAobV9zZWN0aW9u
ID09IFNlY3Rpb246OkNvZGUpCisgICAgICAgIHJldHVybiBTdGF0ZTo6Q29kZVNlY3Rpb25TaXpl
OworICAgIHJldHVybiBTdGF0ZTo6U2VjdGlvbkJvZHk7Cit9CisKK2F1dG8gU3RyZWFtaW5nUGFy
c2VyOjpwYXJzZUNvZGVTZWN0aW9uU2l6ZSh1aW50MzJfdCBmdW5jdGlvbkNvdW50KSAtPiBTdGF0
ZQoreworICAgIG1fZnVuY3Rpb25Db3VudCA9IGZ1bmN0aW9uQ291bnQ7CisgICAgbV9mdW5jdGlv
bkluZGV4ID0gMDsKKyAgICBtX2NvZGVPZmZzZXQgPSBtX29mZnNldDsKKworICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoZnVuY3Rpb25Db3VudCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90
Pjo6bWF4KCksICJDb2RlIHNlY3Rpb24ncyBjb3VudCBpcyB0b28gYmlnICIsIGZ1bmN0aW9uQ291
bnQpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25Db3VudCAhPSBtX2luZm8tPmZ1
bmN0aW9ucy5zaXplKCksICJDb2RlIHNlY3Rpb24gY291bnQgIiwgZnVuY3Rpb25Db3VudCwgIiBl
eGNlZWRzIHRoZSBkZWNsYXJlZCBudW1iZXIgb2YgZnVuY3Rpb25zICIsIG1faW5mby0+ZnVuY3Rp
b25zLnNpemUoKSk7CisKKyAgICBpZiAobV9mdW5jdGlvbkluZGV4ID09IG1fZnVuY3Rpb25Db3Vu
dCkgeworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKChtX2NvZGVPZmZzZXQgKyBtX3NlY3Rp
b25MZW5ndGgpICE9IG1fbmV4dE9mZnNldCwgInBhcnNpbmcgZW5kZWQgYmVmb3JlIHRoZSBlbmQg
b2YgIiwgbV9zZWN0aW9uLCAiIHNlY3Rpb24iKTsKKyAgICAgICAgcmV0dXJuIFN0YXRlOjpTZWN0
aW9uSGVhZGVyOworICAgIH0KKyAgICByZXR1cm4gU3RhdGU6OkZ1bmN0aW9uSGVhZGVyOworfQor
CithdXRvIFN0cmVhbWluZ1BhcnNlcjo6cGFyc2VGdW5jdGlvbkhlYWRlcih1aW50MzJfdCBmdW5j
dGlvblNpemUpIC0+IFN0YXRlCit7CisgICAgbV9mdW5jdGlvblNpemUgPSBmdW5jdGlvblNpemU7
CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvblNpemUgPiBtYXhGdW5jdGlvblNpemUs
ICJDb2RlIGZ1bmN0aW9uJ3Mgc2l6ZSAiLCBmdW5jdGlvblNpemUsICIgaXMgdG9vIGJpZyIpOwor
ICAgIHJldHVybiBTdGF0ZTo6RnVuY3Rpb25Cb2R5OworfQorCithdXRvIFN0cmVhbWluZ1BhcnNl
cjo6cGFyc2VGdW5jdGlvbkJvZHkoVmVjdG9yPHVpbnQ4X3Q+JiYgZGF0YSkgLT4gU3RhdGUKK3sK
KyAgICBhdXRvJiBmdW5jdGlvbiA9IG1faW5mby0+ZnVuY3Rpb25zW21fZnVuY3Rpb25JbmRleF07
CisgICAgZnVuY3Rpb24uc3RhcnQgPSBtX29mZnNldDsKKyAgICBmdW5jdGlvbi5lbmQgPSBtX29m
ZnNldCArIG1fZnVuY3Rpb25TaXplOworICAgIGZ1bmN0aW9uLmRhdGEgPSBXVEZNb3ZlKGRhdGEp
OworICAgIGRhdGFMb2dMbklmKFdhc21TdHJlYW1pbmdQYXJzZXJJbnRlcm5hbDo6dmVyYm9zZSwg
IlByb2Nlc3NpbmcgZnVuY3Rpb24gc3RhcnRpbmcgYXQ6ICIsIGZ1bmN0aW9uLnN0YXJ0LCAiIGFu
ZCBlbmRpbmcgYXQ6ICIsIGZ1bmN0aW9uLmVuZCk7CisgICAgKyttX2Z1bmN0aW9uSW5kZXg7Cisg
ICAgaWYgKG1fZnVuY3Rpb25JbmRleCA9PSBtX2Z1bmN0aW9uQ291bnQpIHsKKyAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRigobV9jb2RlT2Zmc2V0ICsgbV9zZWN0aW9uTGVuZ3RoKSAhPSAobV9v
ZmZzZXQgKyBtX2Z1bmN0aW9uU2l6ZSksICJwYXJzaW5nIGVuZGVkIGJlZm9yZSB0aGUgZW5kIG9m
ICIsIG1fc2VjdGlvbiwgIiBzZWN0aW9uIik7CisgICAgICAgIHJldHVybiBTdGF0ZTo6U2VjdGlv
bkhlYWRlcjsKKyAgICB9CisgICAgcmV0dXJuIFN0YXRlOjpGdW5jdGlvbkhlYWRlcjsKK30KKwor
YXV0byBTdHJlYW1pbmdQYXJzZXI6OnBhcnNlU2VjdGlvbkJvZHkoVmVjdG9yPHVpbnQ4X3Q+JiYg
ZGF0YSkgLT4gU3RhdGUKK3sKKyAgICBTZWN0aW9uUGFyc2VyIHBhcnNlcihkYXRhLmRhdGEoKSwg
ZGF0YS5zaXplKCksIG1fb2Zmc2V0LCBtX2luZm8uZ2V0KCkpOworICAgIHN3aXRjaCAobV9zZWN0
aW9uKSB7CisjZGVmaW5lIFdBU01fU0VDVElPTl9QQVJTRShOQU1FLCBJRCwgREVTQ1JJUFRJT04p
IFwKKyAgICBjYXNlIFNlY3Rpb246Ok5BTUU6IHsgXAorICAgICAgICBXQVNNX1NUUkVBTUlOR19Q
QVJTRVJfRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VyLnBhcnNlICMjIE5BTUUoKSk7IFwKKyAg
ICAgICAgYnJlYWs7IFwKKyAgICB9CisgICAgRk9SX0VBQ0hfS05PV05fV0FTTV9TRUNUSU9OKFdB
U01fU0VDVElPTl9QQVJTRSkKKyN1bmRlZiBXQVNNX1NFQ1RJT05fUEFSU0UKKworICAgIGNhc2Ug
U2VjdGlvbjo6Q3VzdG9tOiB7CisgICAgICAgIFdBU01fU1RSRUFNSU5HX1BBUlNFUl9GQUlMX0lG
X0hFTFBFUl9GQUlMUyhwYXJzZXIucGFyc2VDdXN0b20oKSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIGNhc2UgU2VjdGlvbjo6QmVnaW46IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KKworICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYocGFyc2VyLmxlbmd0aCgpICE9IHBhcnNlci5vZmZzZXQoKSwgInBhcnNp
bmcgZW5kZWQgYmVmb3JlIHRoZSBlbmQgb2YgIiwgbV9zZWN0aW9uLCAiIHNlY3Rpb24iKTsKKwor
ICAgIHJldHVybiBTdGF0ZTo6U2VjdGlvbkhlYWRlcjsKK30KKworYXV0byBTdHJlYW1pbmdQYXJz
ZXI6OmNvbnN1bWUoY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBieXRlc1NpemUsIHNpemVf
dCYgb2Zmc2V0SW5CeXRlcywgc2l6ZV90IHJlcXVpcmVkU2l6ZSkgLT4gc3RkOjpvcHRpb25hbDxW
ZWN0b3I8dWludDhfdD4+Cit7CisgICAgaWYgKG1fcmVtYWluaW5nLnNpemUoKSA9PSByZXF1aXJl
ZFNpemUpIHsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdCA9IFdURk1vdmUobV9yZW1h
aW5pbmcpOworICAgICAgICBtX25leHRPZmZzZXQgKz0gcmVxdWlyZWRTaXplOworICAgICAgICBy
ZXR1cm4gV1RGTW92ZShyZXN1bHQpOworICAgIH0KKworICAgIGlmIChtX3JlbWFpbmluZy5zaXpl
KCkgPiByZXF1aXJlZFNpemUpIHsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdChyZXF1
aXJlZFNpemUpOworICAgICAgICBtZW1jcHkocmVzdWx0LmRhdGEoKSwgbV9yZW1haW5pbmcuZGF0
YSgpLCByZXF1aXJlZFNpemUpOworICAgICAgICBtX3JlbWFpbmluZy5yZW1vdmUoMCwgcmVxdWly
ZWRTaXplKTsKKyAgICAgICAgbV9uZXh0T2Zmc2V0ICs9IHJlcXVpcmVkU2l6ZTsKKyAgICAgICAg
cmV0dXJuIFdURk1vdmUocmVzdWx0KTsKKyAgICB9CisKKyAgICBBU1NFUlQobV9yZW1haW5pbmcu
c2l6ZSgpIDwgcmVxdWlyZWRTaXplKTsKKyAgICBzaXplX3QgYnl0ZXNSZW1haW5pbmdTaXplID0g
Ynl0ZXNTaXplIC0gb2Zmc2V0SW5CeXRlczsKKyAgICBzaXplX3QgdG90YWxEYXRhU2l6ZSA9IG1f
cmVtYWluaW5nLnNpemUoKSArIGJ5dGVzUmVtYWluaW5nU2l6ZTsKKyAgICBpZiAodG90YWxEYXRh
U2l6ZSA8IHJlcXVpcmVkU2l6ZSkgeworICAgICAgICBtX3JlbWFpbmluZy5hcHBlbmQoYnl0ZXMg
KyBvZmZzZXRJbkJ5dGVzLCBieXRlc1JlbWFpbmluZ1NpemUpOworICAgICAgICBvZmZzZXRJbkJ5
dGVzID0gYnl0ZXNTaXplOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKwor
ICAgIHNpemVfdCB1c2VkU2l6ZSA9IHJlcXVpcmVkU2l6ZSAtIG1fcmVtYWluaW5nLnNpemUoKTsK
KyAgICBtX3JlbWFpbmluZy5hcHBlbmQoYnl0ZXMgKyBvZmZzZXRJbkJ5dGVzLCB1c2VkU2l6ZSk7
CisgICAgb2Zmc2V0SW5CeXRlcyArPSB1c2VkU2l6ZTsKKyAgICBWZWN0b3I8dWludDhfdD4gcmVz
dWx0ID0gV1RGTW92ZShtX3JlbWFpbmluZyk7CisgICAgbV9uZXh0T2Zmc2V0ICs9IHJlcXVpcmVk
U2l6ZTsKKyAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOworfQorCithdXRvIFN0cmVhbWluZ1Bh
cnNlcjo6Y29uc3VtZVZhclVJbnQzMihjb25zdCB1aW50OF90KiBieXRlcywgc2l6ZV90IGJ5dGVz
U2l6ZSwgc2l6ZV90JiBvZmZzZXRJbkJ5dGVzLCBJc0VuZE9mU3RyZWFtIGlzRW5kT2ZTdHJlYW0p
IC0+IEV4cGVjdGVkPHVpbnQzMl90LCBTdGF0ZT4KK3sKKyAgICBjb25zdGV4cHIgc2l6ZV90IG1h
eFNpemUgPSBXVEY6OkxFQkRlY29kZXI6Om1heEJ5dGVMZW5ndGg8dWludDMyX3Q+KCk7CisgICAg
c2l6ZV90IGJ5dGVzUmVtYWluaW5nU2l6ZSA9IGJ5dGVzU2l6ZSAtIG9mZnNldEluQnl0ZXM7Cisg
ICAgc2l6ZV90IHRvdGFsRGF0YVNpemUgPSBtX3JlbWFpbmluZy5zaXplKCkgKyBieXRlc1JlbWFp
bmluZ1NpemU7CisgICAgaWYgKG1fcmVtYWluaW5nLnNpemUoKSA+PSBtYXhTaXplKQorICAgICAg
ICAvLyBEbyBub3RoaW5nLgorICAgIGVsc2UgaWYgKHRvdGFsRGF0YVNpemUgPj0gbWF4U2l6ZSkg
eworICAgICAgICBzaXplX3QgdXNlZFNpemUgPSBtYXhTaXplIC0gbV9yZW1haW5pbmcuc2l6ZSgp
OworICAgICAgICBtX3JlbWFpbmluZy5hcHBlbmQoYnl0ZXMgKyBvZmZzZXRJbkJ5dGVzLCB1c2Vk
U2l6ZSk7CisgICAgICAgIG9mZnNldEluQnl0ZXMgKz0gdXNlZFNpemU7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgbV9yZW1haW5pbmcuYXBwZW5kKGJ5dGVzICsgb2Zmc2V0SW5CeXRlcywgYnl0ZXNS
ZW1haW5pbmdTaXplKTsKKyAgICAgICAgb2Zmc2V0SW5CeXRlcyArPSBieXRlc1JlbWFpbmluZ1Np
emU7CisgICAgICAgIC8vIElmIHRoZSBnaXZlbiBieXRlcyBhcmUgdGhlIGVuZCBvZiB0aGUgc3Ry
ZWFtLCB3ZSB0cnkgdG8gcGFyc2UgVmFyVUludDMyCisgICAgICAgIC8vIHdpdGggdGhlIGN1cnJl
bnQgcmVtYWluaW5nIGRhdGEgc2luY2UgVmFyVUludDMyIG1heSBub3QgcmVxdWlyZSBgbWF4U2l6
ZWAuCisgICAgICAgIGlmIChpc0VuZE9mU3RyZWFtID09IElzRW5kT2ZTdHJlYW06Ok5vKQorICAg
ICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKG1fc3RhdGUpOworICAgIH0KKworICAgIHNp
emVfdCBvZmZzZXQgPSAwOworICAgIHVpbnQzMl90IHJlc3VsdCA9IDA7CisgICAgaWYgKCFXVEY6
OkxFQkRlY29kZXI6OmRlY29kZVVJbnQzMihtX3JlbWFpbmluZy5kYXRhKCksIG1fcmVtYWluaW5n
LnNpemUoKSwgb2Zmc2V0LCByZXN1bHQpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
U3RhdGU6OkZhdGFsRXJyb3IpOworICAgIHNpemVfdCBjb25zdW1lZFNpemUgPSBvZmZzZXQ7Cisg
ICAgbV9yZW1haW5pbmcucmVtb3ZlKDAsIGNvbnN1bWVkU2l6ZSk7CisgICAgbV9uZXh0T2Zmc2V0
ICs9IGNvbnN1bWVkU2l6ZTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCithdXRvIFN0cmVhbWlu
Z1BhcnNlcjo6YWRkQnl0ZXMoY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBieXRlc1NpemUs
IElzRW5kT2ZTdHJlYW0gaXNFbmRPZlN0cmVhbSkgLT4gU3RhdGUKK3sKKyAgICBpZiAobV9zdGF0
ZSA9PSBTdGF0ZTo6RmF0YWxFcnJvcikKKyAgICAgICAgcmV0dXJuIG1fc3RhdGU7CisKKyAgICBt
X3RvdGFsU2l6ZSArPSBieXRlc1NpemU7CisgICAgaWYgKFVOTElLRUxZKG1fdG90YWxTaXplLmhh
c092ZXJmbG93ZWQoKSB8fCBtX3RvdGFsU2l6ZS51bnNhZmVHZXQoKSA+IG1heE1vZHVsZVNpemUp
KSB7CisgICAgICAgIG1fc3RhdGUgPSBmYWlsKCJtb2R1bGUgc2l6ZSBpcyB0b28gbGFyZ2UsIG1h
eGltdW0gIiwgbWF4TW9kdWxlU2l6ZSk7CisgICAgICAgIHJldHVybiBtX3N0YXRlOworICAgIH0K
KworICAgIGlmIChPcHRpb25zOjp1c2VFYWdlcldlYkFzc2VtYmx5TW9kdWxlSGFzaGluZygpKQor
ICAgICAgICBtX2hhc2hlci5hZGRCeXRlcyhieXRlcywgYnl0ZXNTaXplKTsKKworICAgIHNpemVf
dCBvZmZzZXRJbkJ5dGVzID0gMDsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBzd2l0Y2gg
KG1fc3RhdGUpIHsKKyAgICAgICAgY2FzZSBTdGF0ZTo6TW9kdWxlSGVhZGVyOiB7CisgICAgICAg
ICAgICBhdXRvIHJlc3VsdCA9IGNvbnN1bWUoYnl0ZXMsIGJ5dGVzU2l6ZSwgb2Zmc2V0SW5CeXRl
cywgbW9kdWxlSGVhZGVyU2l6ZSk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbV9zdGF0ZTsKKyAgICAgICAgICAgIG1fc3RhdGUgPSBwYXJzZU1vZHVs
ZUhlYWRlcihXVEZNb3ZlKCpyZXN1bHQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisKKyAgICAgICAgY2FzZSBTdGF0ZTo6U2VjdGlvbkhlYWRlcjogeworICAgICAgICAgICAgYXV0
byByZXN1bHQgPSBjb25zdW1lKGJ5dGVzLCBieXRlc1NpemUsIG9mZnNldEluQnl0ZXMsIHNlY3Rp
b25IZWFkZXJTaXplKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgICAg
IHJldHVybiBtX3N0YXRlOworICAgICAgICAgICAgbV9zdGF0ZSA9IHBhcnNlU2VjdGlvbkhlYWRl
cihXVEZNb3ZlKCpyZXN1bHQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgY2FzZSBTdGF0ZTo6U2VjdGlvblNpemU6IHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0
ID0gY29uc3VtZVZhclVJbnQzMihieXRlcywgYnl0ZXNTaXplLCBvZmZzZXRJbkJ5dGVzLCBpc0Vu
ZE9mU3RyZWFtKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgICAgICAgICAg
aWYgKHJlc3VsdC5lcnJvcigpID09IFN0YXRlOjpGYXRhbEVycm9yKQorICAgICAgICAgICAgICAg
ICAgICBtX3N0YXRlID0gZmFpbE9uU3RhdGUobV9zdGF0ZSk7CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gcmVzdWx0LmVycm9yKCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG1fc3RhdGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX3N0
YXRlID0gcGFyc2VTZWN0aW9uU2l6ZSgqcmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgY2FzZSBTdGF0ZTo6U2VjdGlvbkJvZHk6IHsKKyAgICAgICAgICAg
IGF1dG8gcmVzdWx0ID0gY29uc3VtZShieXRlcywgYnl0ZXNTaXplLCBvZmZzZXRJbkJ5dGVzLCBt
X3NlY3Rpb25MZW5ndGgpOworICAgICAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIG1fc3RhdGU7CisgICAgICAgICAgICBtX3N0YXRlID0gcGFyc2VTZWN0aW9uQm9k
eShXVEZNb3ZlKCpyZXN1bHQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgY2FzZSBTdGF0ZTo6Q29kZVNlY3Rpb25TaXplOiB7CisgICAgICAgICAgICBhdXRvIHJl
c3VsdCA9IGNvbnN1bWVWYXJVSW50MzIoYnl0ZXMsIGJ5dGVzU2l6ZSwgb2Zmc2V0SW5CeXRlcywg
aXNFbmRPZlN0cmVhbSk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICAgICAg
ICAgIGlmIChyZXN1bHQuZXJyb3IoKSA9PSBTdGF0ZTo6RmF0YWxFcnJvcikKKyAgICAgICAgICAg
ICAgICAgICAgbV9zdGF0ZSA9IGZhaWxPblN0YXRlKG1fc3RhdGUpOworICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IHJlc3VsdC5lcnJvcigpOworICAg
ICAgICAgICAgICAgIHJldHVybiBtX3N0YXRlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
bV9zdGF0ZSA9IHBhcnNlQ29kZVNlY3Rpb25TaXplKCpyZXN1bHQpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFN0YXRlOjpGdW5jdGlvbkhlYWRlcjogewor
ICAgICAgICAgICAgYXV0byByZXN1bHQgPSBjb25zdW1lVmFyVUludDMyKGJ5dGVzLCBieXRlc1Np
emUsIG9mZnNldEluQnl0ZXMsIGlzRW5kT2ZTdHJlYW0pOworICAgICAgICAgICAgaWYgKCFyZXN1
bHQpIHsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmVycm9yKCkgPT0gU3RhdGU6OkZhdGFs
RXJyb3IpCisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBmYWlsT25TdGF0ZShtX3N0YXRl
KTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBy
ZXN1bHQuZXJyb3IoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9zdGF0ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG1fc3RhdGUgPSBwYXJzZUZ1bmN0aW9uSGVhZGVyKCpyZXN1bHQp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFN0YXRlOjpG
dW5jdGlvbkJvZHk6IHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gY29uc3VtZShieXRlcywg
Ynl0ZXNTaXplLCBvZmZzZXRJbkJ5dGVzLCBtX2Z1bmN0aW9uU2l6ZSk7CisgICAgICAgICAgICBp
ZiAoIXJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9zdGF0ZTsKKyAgICAgICAgICAg
IG1fc3RhdGUgPSBwYXJzZUZ1bmN0aW9uQm9keShXVEZNb3ZlKCpyZXN1bHQpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBTdGF0ZTo6RmluaXNoZWQ6Cisg
ICAgICAgIGNhc2UgU3RhdGU6OkZhdGFsRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gbV9zdGF0
ZTsKKyAgICAgICAgfQorCisgICAgICAgIG1fb2Zmc2V0ID0gbV9uZXh0T2Zmc2V0OworICAgIH0K
K30KKworYXV0byBTdHJlYW1pbmdQYXJzZXI6OmZhaWxPblN0YXRlKFN0YXRlKSAtPiBTdGF0ZQor
eworICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2UgU3RhdGU6Ok1vZHVsZUhlYWRlcjoK
KyAgICAgICAgcmV0dXJuIGZhaWwoImV4cGVjdGVkIGEgbW9kdWxlIG9mIGF0IGxlYXN0ICIsIG1v
ZHVsZUhlYWRlclNpemUsICIgYnl0ZXMiKTsKKyAgICBjYXNlIFN0YXRlOjpTZWN0aW9uSGVhZGVy
OgorICAgICAgICByZXR1cm4gZmFpbCgiY2FuJ3QgZ2V0IHNlY3Rpb24gYnl0ZSIpOworICAgIGNh
c2UgU3RhdGU6OlNlY3Rpb25TaXplOgorICAgICAgICByZXR1cm4gZmFpbCgiY2FuJ3QgZ2V0ICIs
IG1fc2VjdGlvbiwgIiBzZWN0aW9uJ3MgbGVuZ3RoIik7CisgICAgY2FzZSBTdGF0ZTo6U2VjdGlv
bkJvZHk6CisgICAgICAgIHJldHVybiBmYWlsKG1fc2VjdGlvbiwgIiBzZWN0aW9uIG9mIHNpemUg
IiwgbV9zZWN0aW9uTGVuZ3RoLCAiIHdvdWxkIG92ZXJmbG93IE1vZHVsZSdzIHNpemUiKTsKKyAg
ICBjYXNlIFN0YXRlOjpDb2RlU2VjdGlvblNpemU6CisgICAgICAgIHJldHVybiBmYWlsKCJjYW4n
dCBnZXQgQ29kZSBzZWN0aW9uJ3MgY291bnQiKTsKKyAgICBjYXNlIFN0YXRlOjpGdW5jdGlvbkhl
YWRlcjoKKyAgICAgICAgcmV0dXJuIGZhaWwoImNhbid0IGdldCAiLCBtX2Z1bmN0aW9uSW5kZXgs
ICJ0aCBDb2RlIGZ1bmN0aW9uJ3Mgc2l6ZSIpOworICAgIGNhc2UgU3RhdGU6OkZ1bmN0aW9uQm9k
eToKKyAgICAgICAgcmV0dXJuIGZhaWwoIkNvZGUgZnVuY3Rpb24ncyBzaXplICIsIG1fZnVuY3Rp
b25TaXplLCAiIGV4Y2VlZHMgdGhlIG1vZHVsZSdzIHJlbWFpbmluZyBzaXplIik7CisgICAgY2Fz
ZSBTdGF0ZTo6RmluaXNoZWQ6CisgICAgY2FzZSBTdGF0ZTo6RmF0YWxFcnJvcjoKKyAgICAgICAg
cmV0dXJuIG1fc3RhdGU7CisgICAgfQorICAgIHJldHVybiBtX3N0YXRlOworfQorCithdXRvIFN0
cmVhbWluZ1BhcnNlcjo6ZmluYWxpemUoKSAtPiBTdGF0ZQoreworICAgIGFkZEJ5dGVzKG51bGxw
dHIsIDAsIElzRW5kT2ZTdHJlYW06Olllcyk7CisgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAg
Y2FzZSBTdGF0ZTo6TW9kdWxlSGVhZGVyOgorICAgIGNhc2UgU3RhdGU6OlNlY3Rpb25TaXplOgor
ICAgIGNhc2UgU3RhdGU6OlNlY3Rpb25Cb2R5OgorICAgIGNhc2UgU3RhdGU6OkNvZGVTZWN0aW9u
U2l6ZToKKyAgICBjYXNlIFN0YXRlOjpGdW5jdGlvbkhlYWRlcjoKKyAgICBjYXNlIFN0YXRlOjpG
dW5jdGlvbkJvZHk6CisgICAgICAgIG1fc3RhdGUgPSBmYWlsT25TdGF0ZShtX3N0YXRlKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFN0YXRlOjpGaW5pc2hlZDoKKyAgICBjYXNlIFN0YXRl
OjpGYXRhbEVycm9yOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgU3RhdGU6OlNlY3Rpb25I
ZWFkZXI6CisgICAgICAgIGlmIChtX3JlbWFpbmluZy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
IGlmIChPcHRpb25zOjp1c2VFYWdlcldlYkFzc2VtYmx5TW9kdWxlSGFzaGluZygpKQorICAgICAg
ICAgICAgICAgIG1faW5mby0+bmFtZVNlY3Rpb24tPnNldEhhc2gobV9oYXNoZXIuY29tcHV0ZUhl
eERpZ2VzdCgpKTsKKyAgICAgICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6RmluaXNoZWQ7CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgbV9zdGF0ZSA9IGZhaWxPblN0YXRlKFN0YXRlOjpTZWN0
aW9uSGVhZGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBtX3N0YXRlOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFT
U0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVh
bWluZ1BhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1Bh
cnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjM1ZTY4MDlmMjA0ZTE5Y2JiMTc4NWUxYWMzYTg4MzM0NGM5OWRj
YWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU3Ry
ZWFtaW5nUGFyc2VyLmgKQEAgLTAsMCArMSwxMTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTggWXVzdWtlIFN1enVraSA8eXVzdWtlc3V6dWtpQHNsb3dzdGFydC5vcmc+LgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIldhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIgor
I2luY2x1ZGUgIldhc21QYXJzZXIuaCIKKyNpbmNsdWRlICJXYXNtU2VjdGlvbnMuaCIKKyNpbmNs
dWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRl
IDx3dGYvU0hBMS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworY2xh
c3MgU3RyZWFtaW5nUGFyc2VyQ2xpZW50IHsKK307CisKK2NsYXNzIFN0cmVhbWluZ1BhcnNlciB7
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZW51bSBjbGFzcyBT
dGF0ZSA6IHVpbnQ4X3QgeworICAgICAgICBNb2R1bGVIZWFkZXIsCisgICAgICAgIFNlY3Rpb25I
ZWFkZXIsCisgICAgICAgIFNlY3Rpb25TaXplLAorICAgICAgICBTZWN0aW9uQm9keSwKKyAgICAg
ICAgQ29kZVNlY3Rpb25TaXplLAorICAgICAgICBGdW5jdGlvbkhlYWRlciwKKyAgICAgICAgRnVu
Y3Rpb25Cb2R5LAorICAgICAgICBGaW5pc2hlZCwKKyAgICAgICAgRmF0YWxFcnJvciwKKyAgICB9
OworCisgICAgZW51bSBjbGFzcyBJc0VuZE9mU3RyZWFtIHsgWWVzLCBObyB9OworCisgICAgU3Ry
ZWFtaW5nUGFyc2VyKE1vZHVsZUluZm9ybWF0aW9uJik7CisKKyAgICBTdGF0ZSBhZGRCeXRlcyhj
b25zdCB1aW50OF90KiBieXRlcywgc2l6ZV90IGxlbmd0aCkgeyByZXR1cm4gYWRkQnl0ZXMoYnl0
ZXMsIGxlbmd0aCwgSXNFbmRPZlN0cmVhbTo6Tm8pOyB9CisgICAgU3RhdGUgZmluYWxpemUoKTsK
KworICAgIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKCkgY29uc3QgeyByZXR1cm4gbV9lcnJv
ck1lc3NhZ2U7IH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1v
ZHVsZUhlYWRlclNpemUgPSA4OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgc2VjdGlv
bkhlYWRlclNpemUgPSAxOworCisgICAgU3RhdGUgYWRkQnl0ZXMoY29uc3QgdWludDhfdCogYnl0
ZXMsIHNpemVfdCBsZW5ndGgsIElzRW5kT2ZTdHJlYW0pOworCisgICAgU3RhdGUgcGFyc2VNb2R1
bGVIZWFkZXIoVmVjdG9yPHVpbnQ4X3Q+JiYpOworICAgIFN0YXRlIHBhcnNlU2VjdGlvbkhlYWRl
cihWZWN0b3I8dWludDhfdD4mJik7CisgICAgU3RhdGUgcGFyc2VTZWN0aW9uU2l6ZSh1aW50MzJf
dCk7CisgICAgU3RhdGUgcGFyc2VTZWN0aW9uQm9keShWZWN0b3I8dWludDhfdD4mJik7CisKKyAg
ICBTdGF0ZSBwYXJzZUNvZGVTZWN0aW9uU2l6ZSh1aW50MzJfdCk7CisgICAgU3RhdGUgcGFyc2VG
dW5jdGlvbkhlYWRlcih1aW50MzJfdCk7CisgICAgU3RhdGUgcGFyc2VGdW5jdGlvbkJvZHkoVmVj
dG9yPHVpbnQ4X3Q+JiYpOworCisgICAgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGNv
bnN1bWUoY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCwgc2l6ZV90Jiwgc2l6ZV90KTsKKyAg
ICBFeHBlY3RlZDx1aW50MzJfdCwgU3RhdGU+IGNvbnN1bWVWYXJVSW50MzIoY29uc3QgdWludDhf
dCogYnl0ZXMsIHNpemVfdCwgc2l6ZV90JiwgSXNFbmRPZlN0cmVhbSk7CisKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgLi4uQXJncz4gTkVWRVJfSU5MSU5FIFN0YXRlIFdBUk5fVU5VU0VEX1JFVFVS
TiBmYWlsKEFyZ3MuLi4pOworCisgICAgU3RhdGUgZmFpbE9uU3RhdGUoU3RhdGUpOworCisgICAg
UmVmPE1vZHVsZUluZm9ybWF0aW9uPiBtX2luZm87CisgICAgVmVjdG9yPHVpbnQ4X3Q+IG1fcmVt
YWluaW5nOworICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsKKworICAgIENoZWNrZWRTaXplIG1f
dG90YWxTaXplIHsgMCB9OworICAgIHNpemVfdCBtX29mZnNldCB7IDAgfTsKKyAgICBzaXplX3Qg
bV9uZXh0T2Zmc2V0IHsgMCB9OworICAgIHNpemVfdCBtX2NvZGVPZmZzZXQgeyAwIH07CisKKyAg
ICBTSEExIG1faGFzaGVyOworCisgICAgdWludDMyX3QgbV9zZWN0aW9uTGVuZ3RoIHsgMCB9Owor
CisgICAgdWludDMyX3QgbV9mdW5jdGlvbkNvdW50IHsgMCB9OworICAgIHVpbnQzMl90IG1fZnVu
Y3Rpb25JbmRleCB7IDAgfTsKKworICAgIHVpbnQzMl90IG1fZnVuY3Rpb25TaXplIHsgMCB9Owor
CisgICAgU3RhdGUgbV9zdGF0ZSB7IFN0YXRlOjpNb2R1bGVIZWFkZXIgfTsKKyAgICBTZWN0aW9u
IG1fc2VjdGlvbiB7IFNlY3Rpb246OkJlZ2luIH07CisgICAgU2VjdGlvbiBtX3ByZXZpb3VzS25v
d25TZWN0aW9uIHsgU2VjdGlvbjo6QmVnaW4gfTsKK307CisKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAKaW5kZXgg
MjNmZWYyMmU1OGJlZTFlZmNjMDI5YmI3NjhlMDUyMjZhOTIwMzZiZS4uYWViY2UwYzQxMDgzOTFk
NjFmMWE5MmNkZjI1OTA2ZDRlMWJhODI0YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAKQEAgLTE0MCwxMSArMTQwLDYg
QEAgdm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3Qt
Pm1fY29kZUJsb2Nrc1tpXSk7CiB9CiAKLWNvbnN0IFZlY3Rvcjx1aW50OF90PiYgSlNXZWJBc3Nl
bWJseU1vZHVsZTo6c291cmNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbW9kdWxlSW5mb3JtYXRp
b24oKS5zb3VyY2U7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxF
KFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseU1vZHVsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseU1vZHVsZS5oCmluZGV4IDE3YmVkNjEyNWY0ZTdmMzE5YThiN2FmMmUxZGRmODY0
YWViMmZhNWEuLmQzOTMwMDY5MTlkMjdhZDE3NDY5ZmUyNjk1ZGI4NDM4NDIzZDA4MmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxl
LmgKQEAgLTY4LDggKzY4LDYgQEAgY2xhc3MgSlNXZWJBc3NlbWJseU1vZHVsZSBmaW5hbCA6IHB1
YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiAgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayog
Y29kZUJsb2NrKFdhc206Ok1lbW9yeU1vZGUgbW9kZSk7CiAgICAgdm9pZCBzZXRDb2RlQmxvY2so
Vk0mLCBXYXNtOjpNZW1vcnlNb2RlLCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKik7CiAKLSAgICBj
b25zdCBWZWN0b3I8dWludDhfdD4mIHNvdXJjZSgpIGNvbnN0OwotCiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgV2FzbTo6TW9kdWxlJiBtb2R1bGUoKTsKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5UHJvdG90eXBlLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5UHJvdG90eXBlLmNwcAppbmRl
eCA5NmQ0YzE0ZDc0YzdlZTFhZjhhZWU3NjEwYzQ5NGFhN2M5NGIwNmM1Li5kY2FkYzBkMGRiY2U1
YTlkMjU1M2E0ZGJkYzhjZTRiNGZjYzVkNDUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVByb3RvdHlwZS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlQcm90b3R5cGUuY3BwCkBAIC0yOTQsMTAgKzI5
NCwxMCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseVZh
bGlkYXRlRnVuYyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgc2l6ZV90IGJ5dGVTaXplOwogICAgIHN0
ZDo6dGllKGJhc2UsIGJ5dGVTaXplKSA9IGdldFdhc21CdWZmZXJGcm9tVmFsdWUoZXhlYywgZXhl
Yy0+YXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwotICAgIEJCUVBsYW4gcGxhbigmdm0ud2FzbUNvbnRleHQsIGJhc2UsIGJ5dGVT
aXplLCBCQlFQbGFuOjpWYWxpZGF0aW9uLCBQbGFuOjpkb250RmluYWxpemUoKSk7CisgICAgQkJR
UGxhbiBwbGFuKCZ2bS53YXNtQ29udGV4dCwgQkJRUGxhbjo6VmFsaWRhdGlvbiwgUGxhbjo6ZG9u
dEZpbmFsaXplKCkpOwogICAgIC8vIEZJWE1FOiBXZSBtaWdodCB3YW50IHRvIHRocm93IGFuIE9P
TSBleGNlcHRpb24gaGVyZSBpZiB3ZSBkZXRlY3QgdGhhdCBzb21ldGhpbmcgd2lsbCBPT00uCiAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjAxNQotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHBsYW4ucGFyc2VBbmRWYWxpZGF0ZU1v
ZHVsZSgpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ocGxhbi5wYXJz
ZUFuZFZhbGlkYXRlTW9kdWxlKGJhc2UsIGJ5dGVTaXplKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5Q29tcGlsZVN0cmVhbWluZ0ludGVybmFsKEV4ZWNT
dGF0ZSogZXhlYykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0xFQkRlY29kZXIuaCBiL1Nv
dXJjZS9XVEYvd3RmL0xFQkRlY29kZXIuaAppbmRleCA5NDYyNzcwYzY5OWNkMDVlYTY1NzNlM2Vk
OWMxYzk3NWE4YjUxNTA3Li45OWE1YzA5YWQ0YTU0MThjODBkMDEzN2IxMGUwMGQwYjQyNmMwODgy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9MRUJEZWNvZGVyLmgKKysrIGIvU291cmNlL1dU
Ri93dGYvTEVCRGVjb2Rlci5oCkBAIC0zNiwxNSArMzYsMjAgQEAKIG5hbWVzcGFjZSBXVEYgeyBu
YW1lc3BhY2UgTEVCRGVjb2RlciB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgYm9v
bCBXQVJOX1VOVVNFRF9SRVRVUk4gZGVjb2RlVUludChjb25zdCB1aW50OF90KiBieXRlcywgc2l6
ZV90IGxlbmd0aCwgc2l6ZV90JiBvZmZzZXQsIFQmIHJlc3VsdCkKK2lubGluZSBjb25zdGV4cHIg
c2l6ZV90IG1heEJ5dGVMZW5ndGgoKQogewogICAgIGNvbnN0IHNpemVfdCBudW1CaXRzID0gc2l6
ZW9mKFQpICogQ0hBUl9CSVQ7Ci0gICAgY29uc3Qgc2l6ZV90IG1heEJ5dGVMZW5ndGggPSAobnVt
Qml0cyAtIDEpIC8gNyArIDE7IC8vIG51bUJpdHMgLyA3IHJvdW5kaW5nIHVwLgorICAgIHJldHVy
biAobnVtQml0cyAtIDEpIC8gNyArIDE7IC8vIG51bUJpdHMgLyA3IHJvdW5kaW5nIHVwLgorfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGRl
Y29kZVVJbnQoY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIHNpemVfdCYgb2Zm
c2V0LCBUJiByZXN1bHQpCit7CiAgICAgaWYgKGxlbmd0aCA8PSBvZmZzZXQpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICByZXN1bHQgPSAwOwogICAgIHVuc2lnbmVkIHNoaWZ0ID0gMDsKLSAg
ICBzaXplX3QgbGFzdCA9IHN0ZDo6bWluKG1heEJ5dGVMZW5ndGgsIGxlbmd0aCAtIG9mZnNldCkg
LSAxOworICAgIHNpemVfdCBsYXN0ID0gc3RkOjptaW4obWF4Qnl0ZUxlbmd0aDxUPigpLCBsZW5n
dGggLSBvZmZzZXQpIC0gMTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyB0cnVlOyArK2kpIHsK
ICAgICAgICAgdWludDhfdCBieXRlID0gYnl0ZXNbb2Zmc2V0KytdOwogICAgICAgICByZXN1bHQg
fD0gc3RhdGljX2Nhc3Q8VD4oYnl0ZSAmIDB4N2YpIDw8IHNoaWZ0OwpAQCAtNjEsMTMgKzY2LDEx
IEBAIGlubGluZSBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBkZWNvZGVVSW50KGNvbnN0IHVpbnQ4
X3QqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBzCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogaW5saW5l
IGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGRlY29kZUludChjb25zdCB1aW50OF90KiBieXRlcywg
c2l6ZV90IGxlbmd0aCwgc2l6ZV90JiBvZmZzZXQsIFQmIHJlc3VsdCkKIHsKLSAgICBjb25zdCBz
aXplX3QgbnVtQml0cyA9IHNpemVvZihUKSAqIENIQVJfQklUOwotICAgIGNvbnN0IHNpemVfdCBt
YXhCeXRlTGVuZ3RoID0gKG51bUJpdHMgLSAxKSAvIDcgKyAxOyAvLyBudW1CaXRzIC8gNyByb3Vu
ZGluZyB1cC4KICAgICBpZiAobGVuZ3RoIDw9IG9mZnNldCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIHJlc3VsdCA9IDA7CiAgICAgdW5zaWduZWQgc2hpZnQgPSAwOwotICAgIHNpemVfdCBs
YXN0ID0gc3RkOjptaW4obWF4Qnl0ZUxlbmd0aCwgbGVuZ3RoIC0gb2Zmc2V0KSAtIDE7CisgICAg
c2l6ZV90IGxhc3QgPSBzdGQ6Om1pbihtYXhCeXRlTGVuZ3RoPFQ+KCksIGxlbmd0aCAtIG9mZnNl
dCkgLSAxOwogICAgIHVpbnQ4X3QgYnl0ZTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyB0cnVl
OyArK2kpIHsKICAgICAgICAgYnl0ZSA9IGJ5dGVzW29mZnNldCsrXTsKQEAgLTgwLDYgKzgzLDcg
QEAgaW5saW5lIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGRlY29kZUludChjb25zdCB1aW50OF90
KiBieXRlcywgc2l6ZV90IGxlbmd0aCwgc2kKICAgICB9CiAKICAgICB1c2luZyBVbnNpZ25lZFQg
PSB0eXBlbmFtZSBzdGQ6Om1ha2VfdW5zaWduZWQ8VD46OnR5cGU7CisgICAgY29uc3Qgc2l6ZV90
IG51bUJpdHMgPSBzaXplb2YoVCkgKiBDSEFSX0JJVDsKICAgICBpZiAoc2hpZnQgPCBudW1CaXRz
ICYmIChieXRlICYgMHg0MCkpCiAgICAgICAgIHJlc3VsdCA9IHN0YXRpY19jYXN0PFQ+KHN0YXRp
Y19jYXN0PFVuc2lnbmVkVD4ocmVzdWx0KSB8IChzdGF0aWNfY2FzdDxVbnNpZ25lZFQ+KC0xKSA8
PCBzaGlmdCkpOwogICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VM
b2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCA0NzEwMGRiNzA3MDRmMGQ0NjY0NjhmODRhNjcz
MWY2NDI5YWJhMzRlLi45NDIwMzgxOGI0MDY0ZjEzNWZkNjQ1ZDI5NDk2YjI0ZTY3YmRhYzI1IDEw
MDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDQyIEBACisyMDE4LTA4LTI3ICBZdXN1a2UgU3V6dWtpICA8eXVzdWtlc3V6dWtpQHNs
b3dzdGFydC5vcmc+CisKKyAgICAgICAgW1dlYkFzc2VtYmx5XSBQYXJzZSB3YXNtIG1vZHVsZXMg
aW4gYSBzdHJlYW1pbmcgZmFzaGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTg4OTQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgV2FzbSBwYXJzaW5nIGVycm9yIHNob3VsZCBub3QgcmVwb3J0IHRoZSB0
b3RhbCBieXRlIHNpemUgc2luY2Ugc3RyZWFtaW5nIHBhcnNpbmcgZG9lcyBub3QKKyAgICAgICAg
d2FudCB0byBsb2FkIGFsbCB0aGUgYnl0ZXMuCisgICAgICAgIEFkZCBhIHNpbXBsZSB0ZXN0IHdh
c20vc3RyZXNzL3N0cmVhbWluZy1iYXNpYy5qcyBmb3IgaW5pdGlhbCBzdHJlYW1pbmcgcGFyc2lu
ZyBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICAqIHdhc20vZnVuY3Rpb24tdGVzdHMvaW52YWxp
ZC1kdXBsaWNhdGUtZXhwb3J0LmpzOgorICAgICAgICAqIHdhc20vZnVuY3Rpb24tdGVzdHMvbWVt
b3J5LWFsaWdubWVudC5qczoKKyAgICAgICAgKGNvbnN0Lm9wLm9mLldBU00ub3Bjb2Rlcyk6Cisg
ICAgICAgICogd2FzbS9mdW5jdGlvbi10ZXN0cy9tZW1vcnktc2VjdGlvbi1hbmQtaW1wb3J0Lmpz
OgorICAgICAgICAqIHdhc20vZnVuY3Rpb24tdGVzdHMvdm9pZC1hcmd1bWVudC10eXBlLXNob3Vs
ZC1iZS1hLXZhbGlkYXRpb24tZXJyb3IuanM6CisgICAgICAgICogd2FzbS9qcy1hcGkvTW9kdWxl
LWNvbXBpbGUuanM6CisgICAgICAgIChhc3luYy50ZXN0UHJvbWlzZUFQSSk6CisgICAgICAgICog
d2FzbS9qcy1hcGkvZWxlbWVudC5qczoKKyAgICAgICAgKGFzc2VydC50aHJvd3MubmV3LldlYkFz
c2VtYmx5Lk1vZHVsZS5idWlsZGVyLldlYkFzc2VtYmx5KToKKyAgICAgICAgKGFzc2VydC50aHJv
d3MpOgorICAgICAgICAqIHdhc20vanMtYXBpL2dsb2JhbC1lcnJvci5qczoKKyAgICAgICAgKGFz
c2VydC50aHJvd3MubmV3LldlYkFzc2VtYmx5Lk1vZHVsZS5iaW4pOgorICAgICAgICAoYXNzZXJ0
LnRocm93cyk6CisgICAgICAgICogd2FzbS9qcy1hcGkvdGFibGUuanM6CisgICAgICAgIChuZXcu
V2ViQXNzZW1ibHkuTW9kdWxlKToKKyAgICAgICAgKGFzc2VydC50aHJvd3MpOgorICAgICAgICAo
YXNzZXJ0QmFkVGFibGVJbXBvcnQpOgorICAgICAgICAqIHdhc20vanMtYXBpL3Rlc3RfRGF0YS5q
czoKKyAgICAgICAgKERhdGFTZWN0aW9uV2l0aG91dE1lbW9yeSk6CisgICAgICAgICogd2FzbS9q
cy1hcGkvdGVzdF9TdGFydC5qczoKKyAgICAgICAgKEludmFsaWRTdGFydEZ1bmN0aW9uSW5kZXgp
OgorICAgICAgICAqIHdhc20vanMtYXBpL3Rlc3RfYmFzaWNfYXBpLmpzOgorICAgICAgICAoY29u
c3QuYy5pbi5jb25zdHJ1Y3RvclByb3BlcnRpZXMuc3dpdGNoKToKKyAgICAgICAgKiB3YXNtL2pz
LWFwaS92ZXJzaW9uLmpzOgorICAgICAgICAqIHdhc20vc3RyZXNzL25hbWVTZWN0aW9uLndhc206
IEFkZGVkLgorICAgICAgICAqIHdhc20vc3RyZXNzL3N0cmVhbWluZy1iYXNpYy5qczogQWRkZWQu
CisgICAgICAgIChjaGVjayk6CisKIDIwMTgtMDgtMjQgIFl1c3VrZSBTdXp1a2kgIDx5dXN1a2Vz
dXp1a2lAc2xvd3N0YXJ0Lm9yZz4KIAogICAgICAgICBbSlNDXSBBcnJheS5wcm90b3R5cGUucmV2
ZXJzZSBtb2RpZmllcyBKU0ltbXV0YWJsZUJ1dHRlcmZseQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93
YXNtL2Z1bmN0aW9uLXRlc3RzL2ludmFsaWQtZHVwbGljYXRlLWV4cG9ydC5qcyBiL0pTVGVzdHMv
d2FzbS9mdW5jdGlvbi10ZXN0cy9pbnZhbGlkLWR1cGxpY2F0ZS1leHBvcnQuanMKaW5kZXggYzQ3
YjFlMTY2MmMyY2I2MGM5M2Q2YzliOTU3MzliZGFiYTc4MGU3My4uNDE4ZDUxYWE0OTkwMTlhYTI0
NjliYWE1ZjFmZDhlMWFiZDNiZjI5MSAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2Z1bmN0aW9u
LXRlc3RzL2ludmFsaWQtZHVwbGljYXRlLWV4cG9ydC5qcworKysgYi9KU1Rlc3RzL3dhc20vZnVu
Y3Rpb24tdGVzdHMvaW52YWxpZC1kdXBsaWNhdGUtZXhwb3J0LmpzCkBAIC0xNSw1ICsxNSw1IEBA
CiAgICAgICAgIC5FbmQoKTsKIAogICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHko
KS5nZXQoKTsKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUo
YmluKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNu
J3QgcGFyc2UgYXQgYnl0ZSAzMSAvIDM5OiBkdXBsaWNhdGUgZXhwb3J0OiAnZm9vJyIpOworICAg
IGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pLCBXZWJBc3Nl
bWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBi
eXRlIDMxOiBkdXBsaWNhdGUgZXhwb3J0OiAnZm9vJyIpOwogfQpkaWZmIC0tZ2l0IGEvSlNUZXN0
cy93YXNtL2Z1bmN0aW9uLXRlc3RzL21lbW9yeS1hbGlnbm1lbnQuanMgYi9KU1Rlc3RzL3dhc20v
ZnVuY3Rpb24tdGVzdHMvbWVtb3J5LWFsaWdubWVudC5qcwppbmRleCBhYmM1NzQxMjE0NmYyZTM5
NzI2MWU3MzI2ZWNjOGE1YzgxOWEwNDljLi5lNjA1ODk4OTAwYWExYmVkNjdiOWQzMmFjNmYyYWEw
MTJlYjI5OWVlIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5
LWFsaWdubWVudC5qcworKysgYi9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LWFs
aWdubWVudC5qcwpAQCAtNDIsNyArNDIsNyBAQAogICAgICAgICBpZiAoYWxpZ25Mb2cyIDw9IG1h
eEFsaWduTG9nMikKICAgICAgICAgICAgIGluc3RhbmNlKCk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGFzc2VydC50aHJvd3MoaW5zdGFuY2UsIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwg
YFdlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgJHtzdGFydH0gLyAke2Vu
ZH06IGJ5dGUgYWxpZ25tZW50ICR7MSA8PCBhbGlnbkxvZzJ9IGV4Y2VlZHMgJHtpbmZvLnR5cGV9
J3MgbmF0dXJhbCBhbGlnbm1lbnQgJHsxIDw8IG1heEFsaWduTG9nMn0sIGluIGZ1bmN0aW9uIGF0
IGluZGV4IDBgKTsKKyAgICAgICAgICAgIGFzc2VydC50aHJvd3MoaW5zdGFuY2UsIFdlYkFzc2Vt
Ymx5LkNvbXBpbGVFcnJvciwgYFdlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5
dGUgJHtzdGFydH06IGJ5dGUgYWxpZ25tZW50ICR7MSA8PCBhbGlnbkxvZzJ9IGV4Y2VlZHMgJHtp
bmZvLnR5cGV9J3MgbmF0dXJhbCBhbGlnbm1lbnQgJHsxIDw8IG1heEFsaWduTG9nMn0sIGluIGZ1
bmN0aW9uIGF0IGluZGV4IDBgKTsKIAogICAgIH0KIH0KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2Fz
bS9mdW5jdGlvbi10ZXN0cy9tZW1vcnktc2VjdGlvbi1hbmQtaW1wb3J0LmpzIGIvSlNUZXN0cy93
YXNtL2Z1bmN0aW9uLXRlc3RzL21lbW9yeS1zZWN0aW9uLWFuZC1pbXBvcnQuanMKaW5kZXggYTFk
YjljZTI1Nzc5MzUwYjViZDU1NzdmNzY3ZTY2Nzc3NGJkOGIwYi4uMTUyMDdlZjcxODhlZmEwZjY5
MjM1NzNjMWRmZWE1YTNlYTViNzFmZiAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2Z1bmN0aW9u
LXRlc3RzL21lbW9yeS1zZWN0aW9uLWFuZC1pbXBvcnQuanMKKysrIGIvSlNUZXN0cy93YXNtL2Z1
bmN0aW9uLXRlc3RzL21lbW9yeS1zZWN0aW9uLWFuZC1pbXBvcnQuanMKQEAgLTI4LDQgKzI4LDQg
QEAKICAgICAgIC5Db2RlKCkuRW5kKCk7CiAKIGNvbnN0IGkwID0gaW5zdGFudGlhdGUoYnVpbGRl
cjApOwotYXNzZXJ0LnRocm93cygoKSA9PiBpbnN0YW50aWF0ZShidWlsZGVyMSwgeyBpbXA6IHsg
bWVtb3J5OiBpMC5leHBvcnRzLm1lbW9yeSB9IH0pLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3Is
IGBXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDM1IC8gNDE6IHRoZXJl
IGNhbiBhdCBtb3N0IGJlIG9uZSBNZW1vcnkgc2VjdGlvbiBmb3Igbm93YCk7Cithc3NlcnQudGhy
b3dzKCgpID0+IGluc3RhbnRpYXRlKGJ1aWxkZXIxLCB7IGltcDogeyBtZW1vcnk6IGkwLmV4cG9y
dHMubWVtb3J5IH0gfSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgYFdlYkFzc2VtYmx5Lk1v
ZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzU6IHRoZXJlIGNhbiBhdCBtb3N0IGJlIG9uZSBN
ZW1vcnkgc2VjdGlvbiBmb3Igbm93YCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vZnVuY3Rp
b24tdGVzdHMvdm9pZC1hcmd1bWVudC10eXBlLXNob3VsZC1iZS1hLXZhbGlkYXRpb24tZXJyb3Iu
anMgYi9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvdm9pZC1hcmd1bWVudC10eXBlLXNob3Vs
ZC1iZS1hLXZhbGlkYXRpb24tZXJyb3IuanMKaW5kZXggNDcxNDliMWQ3ZmI5MzIzMWMyNWQwNzhh
ODYyOThiNzUwMmJmZjY4YS4uMjE3ODgxMGE3ODE3ZDk3MzM1ZTYyZjc4YjNmYzUxN2UzZmU3N2U0
MSAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL3ZvaWQtYXJndW1lbnQt
dHlwZS1zaG91bGQtYmUtYS12YWxpZGF0aW9uLWVycm9yLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9m
dW5jdGlvbi10ZXN0cy92b2lkLWFyZ3VtZW50LXR5cGUtc2hvdWxkLWJlLWEtdmFsaWRhdGlvbi1l
cnJvci5qcwpAQCAtMTcsNiArMTcsNiBAQCBmdW5jdGlvbiBnZXRCaW5hcnkocGFyYW1zKSB7CiAg
ICAgcmV0dXJuIGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKIH0KIAotYXNzZXJ0LnRocm93
cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGdldEJpbmFyeShbImkzMiIsICJ2b2lkIl0p
KSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3Qg
cGFyc2UgYXQgYnl0ZSAxNSAvIDQ3OiBjYW4ndCBnZXQgMXRoIGFyZ3VtZW50IFR5cGUiKTsKLWFz
c2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShnZXRCaW5hcnkoWyJ2b2lk
Il0pKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNu
J3QgcGFyc2UgYXQgYnl0ZSAxNCAvIDQ2OiBjYW4ndCBnZXQgMHRoIGFyZ3VtZW50IFR5cGUiKTsK
LWFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShnZXRCaW5hcnkoWyJp
MzIiLCAidm9pZCIsICJpMzIiXSkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3Nl
bWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE1IC8gNDg6IGNhbid0IGdldCAxdGgg
YXJndW1lbnQgVHlwZSIpOworYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9k
dWxlKGdldEJpbmFyeShbImkzMiIsICJ2b2lkIl0pKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9y
LCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxNTogY2FuJ3QgZ2V0
IDF0aCBhcmd1bWVudCBUeXBlIik7Cithc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJs
eS5Nb2R1bGUoZ2V0QmluYXJ5KFsidm9pZCJdKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwg
IldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTQ6IGNhbid0IGdldCAw
dGggYXJndW1lbnQgVHlwZSIpOworYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHku
TW9kdWxlKGdldEJpbmFyeShbImkzMiIsICJ2b2lkIiwgImkzMiJdKSksIFdlYkFzc2VtYmx5LkNv
bXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTU6
IGNhbid0IGdldCAxdGggYXJndW1lbnQgVHlwZSIpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNt
L2pzLWFwaS9Nb2R1bGUtY29tcGlsZS5qcyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvTW9kdWxlLWNv
bXBpbGUuanMKaW5kZXggZDNiZWIzMzI1NzdhZWRiMDU4YzhlNDFkMjNhZGRhOWM5MWYxZGY3OC4u
ZDcyM2JmNGQ3MGI0OWM0OWExMzY1ZmRjNjdiNDUyNDJiMzgyNzJlNiAxMDA2NDQKLS0tIGEvSlNU
ZXN0cy93YXNtL2pzLWFwaS9Nb2R1bGUtY29tcGlsZS5qcworKysgYi9KU1Rlc3RzL3dhc20vanMt
YXBpL01vZHVsZS1jb21waWxlLmpzCkBAIC0yMSw3ICsyMSw3IEBAIGFzeW5jIGZ1bmN0aW9uIHRl
c3RQcm9taXNlQVBJKCkgewogICAgICAgICAgICAgYXdhaXQgV2ViQXNzZW1ibHkuY29tcGlsZShi
dWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpOwogICAgICAgICB9IGNhdGNoKGUpIHsKICAgICAg
ICAgICAgIGFzc2VydC50cnV0aHkoZSBpbnN0YW5jZW9mIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJv
cik7Ci0gICAgICAgICAgICBhc3NlcnQudHJ1dGh5KGUubWVzc2FnZSA9PT0gIldlYkFzc2VtYmx5
Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzQgLyA0MzogdGhlcmUgY2FuIGF0IG1vc3Qg
YmUgb25lIE1lbW9yeSBzZWN0aW9uIGZvciBub3ciKTsKKyAgICAgICAgICAgIGFzc2VydC50cnV0
aHkoZS5tZXNzYWdlID09PSAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0
ZSAzNDogdGhlcmUgY2FuIGF0IG1vc3QgYmUgb25lIE1lbW9yeSBzZWN0aW9uIGZvciBub3ciKTsK
ICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS9lbGVt
ZW50LmpzIGIvSlNUZXN0cy93YXNtL2pzLWFwaS9lbGVtZW50LmpzCmluZGV4IDE4OGFjNzQxNTEx
MjYwNDhiODI3MjQ4ZGM0NzM4MjA1YWE4NmExNDkuLmZjYmUyODI3ZjM3MTY2M2FhODRmZGY1YzEw
MTAwYjgxNzgxNzczOTAgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvZWxlbWVudC5q
cworKysgYi9KU1Rlc3RzL3dhc20vanMtYXBpL2VsZW1lbnQuanMKQEAgLTE4LDcgKzE4LDcgQEAK
ICAgICAgICAgICAgIC5FbmQoKQogICAgICAgICAuRW5kKCk7CiAKLSAgICBhc3NlcnQudGhyb3dz
KCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgp
KSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3Qg
cGFyc2UgYXQgYnl0ZSAyNCAvIDQxOiBFbGVtZW50IHNlY3Rpb24gZm9yIFRhYmxlIDAgZXhjZWVk
cyBhdmFpbGFibGUgVGFibGUgMCIpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFz
c2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5D
b21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI0
OiBFbGVtZW50IHNlY3Rpb24gZm9yIFRhYmxlIDAgZXhjZWVkcyBhdmFpbGFibGUgVGFibGUgMCIp
OwogfQogCiB7CkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgICAgICAuRW5kKCkKICAgICAgICAg
LkVuZCgpOwogCi0gICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxl
KGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwg
IldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzAgLyA0NzogRWxlbWVu
dCBzZWN0aW9uIGZvciBUYWJsZSAxIGV4Y2VlZHMgYXZhaWxhYmxlIFRhYmxlIDEiKTsKKyAgICBh
c3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3Nl
bWJseSgpLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9k
dWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzMDogRWxlbWVudCBzZWN0aW9uIGZvciBUYWJsZSAx
IGV4Y2VlZHMgYXZhaWxhYmxlIFRhYmxlIDEiKTsKIH0KIAogewpAQCAtMTEyLDcgKzExMiw3IEBA
CiAgICAgICAgICAgICAuRW5kKCkKICAgICAgICAgLkVuZCgpOwogCi0gICAgYXNzZXJ0LnRocm93
cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQo
KSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0
IHBhcnNlIGF0IGJ5dGUgMzggLyA1MDogRWxlbWVudCBzZWN0aW9uJ3MgMHRoIGVsZW1lbnQncyAy
dGggaW5kZXggaXMgMSB3aGljaCBleGNlZWRzIHRoZSBmdW5jdGlvbiBpbmRleCBzcGFjZSBzaXpl
IG9mIDEgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3Nl
bWJseSgpLmdldCgpKScpIik7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1i
bHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBp
bGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzg6IEVs
ZW1lbnQgc2VjdGlvbidzIDB0aCBlbGVtZW50J3MgMnRoIGluZGV4IGlzIDEgd2hpY2ggZXhjZWVk
cyB0aGUgZnVuY3Rpb24gaW5kZXggc3BhY2Ugc2l6ZSBvZiAxIChldmFsdWF0aW5nICduZXcgV2Vi
QXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIpOwogfQogCiB7
CkBAIC0yMTUsNSArMjE1LDUgQEAgZnVuY3Rpb24gYmFkTW9kdWxlKCkgewogICAgICAgICByZXR1
cm4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOwogICAgIH0KIAotICAgIGFzc2VydC50aHJv
d3MoKCkgPT4gYmFkTW9kdWxlKCksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2Vt
Ymx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgNTggLyA3MjogRWxlbWVudCBpbml0X2V4
cHIgbXVzdCBwcm9kdWNlIGFuIGkzMiIpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYmFkTW9k
dWxlKCksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vz
bid0IHBhcnNlIGF0IGJ5dGUgNTg6IEVsZW1lbnQgaW5pdF9leHByIG11c3QgcHJvZHVjZSBhbiBp
MzIiKTsKIH0KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvZ2xvYmFsLWVycm9yLmpz
IGIvSlNUZXN0cy93YXNtL2pzLWFwaS9nbG9iYWwtZXJyb3IuanMKaW5kZXggMDlmOGQ3OTlkYzRl
MmYzOWQ5YTU0MzAyY2FhYmRlN2E3NmQ1MTA3Yi4uZDNlZGY4OThlN2Q5ZmEwN2U0NzBjZmMzMmM2
YWIzNmYxNzMxYjUxMyAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2pzLWFwaS9nbG9iYWwtZXJy
b3IuanMKKysrIGIvSlNUZXN0cy93YXNtL2pzLWFwaS9nbG9iYWwtZXJyb3IuanMKQEAgLTIzLDcg
KzIzLDcgQEAKICAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCk7CiAgICAgYmlu
LnRyaW0oKTsKIAotICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVs
ZShiaW4uZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1
bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2IC8gNTk6IGdldF9nbG9iYWwncyBpbmRleCAwIGV4
Y2VlZHMgdGhlIG51bWJlciBvZiBnbG9iYWxzIDAgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJs
eS5Nb2R1bGUoYmluLmdldCgpKScpIik7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2Vi
QXNzZW1ibHkuTW9kdWxlKGJpbi5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldl
YkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjY6IGdldF9nbG9iYWwncyBp
bmRleCAwIGV4Y2VlZHMgdGhlIG51bWJlciBvZiBnbG9iYWxzIDAgKGV2YWx1YXRpbmcgJ25ldyBX
ZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKScpIik7CiB9CiAKIApAQCAtNTIsNyArNTIsNyBA
QAogICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKTsKICAgICBiaW4udHJpbSgp
OwogCi0gICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbi5n
ZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vz
bid0IHBhcnNlIGF0IGJ5dGUgMzIgLyA3NjogTXV0YWJsZSBHbG9iYWxzIGFyZW4ndCBzdXBwb3J0
ZWQgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKScpIik7Cisg
ICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbi5nZXQoKSks
IFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBh
cnNlIGF0IGJ5dGUgMzI6IE11dGFibGUgR2xvYmFscyBhcmVuJ3Qgc3VwcG9ydGVkIChldmFsdWF0
aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbi5nZXQoKSknKSIpOwogfQogCiB7CkBAIC03
Nyw3ICs3Nyw3IEBACiAgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpOwogICAg
IGJpbi50cmltKCk7CiAKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5N
b2R1bGUoYmluLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHku
TW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSA1MSAvIDU5OiAxdGggRXhwb3J0IGlzbid0IGlt
bXV0YWJsZSwgbmFtZWQgJ2dsb2JhbCcgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1
bGUoYmluLmdldCgpKScpIik7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1i
bHkuTW9kdWxlKGJpbi5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2Vt
Ymx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgNTE6IDF0aCBFeHBvcnQgaXNuJ3QgaW1t
dXRhYmxlLCBuYW1lZCAnZ2xvYmFsJyAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVs
ZShiaW4uZ2V0KCkpJykiKTsKIH0KIAogewpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFw
aS90YWJsZS5qcyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGFibGUuanMKaW5kZXggYjgzMmUxMTc2
NjQxMzAyMzBmYzgwYmZiMTMwYzEzNjZhMzEyZTMyNS4uY2Y2OGI0NDA0OTVmNmJlNmY4YjI3OTQ3
NzEyNDU2ZDdjYTdjOGM2ZiAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2pzLWFwaS90YWJsZS5q
cworKysgYi9KU1Rlc3RzL3dhc20vanMtYXBpL3RhYmxlLmpzCkBAIC0xMyw3ICsxMyw3IEBACiAg
ICAgICAgIC5FbmQoKQogICAgICAgICAuQ29kZSgpCiAgICAgICAgIC5FbmQoKTsKLSAgICBhc3Nl
cnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJs
eSgpLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxl
IGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzNCAvIDQxOiBDYW5ub3QgaGF2ZSBtb3JlIHRoYW4gb25l
IFRhYmxlIGZvciBub3ciKTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJs
eS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGls
ZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzNDogQ2Fu
bm90IGhhdmUgbW9yZSB0aGFuIG9uZSBUYWJsZSBmb3Igbm93Iik7CiB9CiAKIHsKQEAgLTM4LDcg
KzM4LDcgQEAKICAgICAgICAgLkVuZCgpCiAgICAgICAgIC5Db2RlKCkKICAgICAgICAgLkVuZCgp
OwotICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVy
LldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3Nl
bWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE3IC8gMjg6IFRhYmxlIGNvdW50IG9m
IDIgaXMgaW52YWxpZCwgYXQgbW9zdCAxIGlzIGFsbG93ZWQgZm9yIG5vdyAoZXZhbHVhdGluZyAn
bmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiKTsK
KyAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5X
ZWJBc3NlbWJseSgpLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1i
bHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxNzogVGFibGUgY291bnQgb2YgMiBpcyBp
bnZhbGlkLCBhdCBtb3N0IDEgaXMgYWxsb3dlZCBmb3Igbm93IChldmFsdWF0aW5nICduZXcgV2Vi
QXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIpOwogfQogCiB7
CkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgICAgICAgICAgLkNhbGxJbmRpcmVjdCgwLCAwKQog
ICAgICAgICAgICAgLkVuZCgpCiAgICAgICAgIC5FbmQoKTsKLSAgICBhc3NlcnQudGhyb3dzKCgp
ID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwg
V2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFy
c2UgYXQgYnl0ZSA0IC8gNzogY2FsbF9pbmRpcmVjdCBpcyBvbmx5IHZhbGlkIHdoZW4gYSB0YWJs
ZSBpcyBkZWZpbmVkIG9yIGltcG9ydGVkLCBpbiBmdW5jdGlvbiBhdCBpbmRleCAwIChldmFsdWF0
aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSkn
KSIpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWls
ZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJB
c3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDQ6IGNhbGxfaW5kaXJlY3QgaXMg
b25seSB2YWxpZCB3aGVuIGEgdGFibGUgaXMgZGVmaW5lZCBvciBpbXBvcnRlZCwgaW4gZnVuY3Rp
b24gYXQgaW5kZXggMCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVy
LldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiKTsKIH0KIAogewpAQCAtNzMsNyArNzMsNyBAQAogICAg
ICAgICAgICAgICAgIC5DYWxsSW5kaXJlY3QoMCwgMSkKICAgICAgICAgICAgIC5FbmQoKQogICAg
ICAgICAuRW5kKCk7Ci0gICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9k
dWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJv
ciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgNiAvIDc6IGNhbGxf
aW5kaXJlY3QncyAncmVzZXJ2ZWQnIHZhcnVpbnQxIG11c3QgYmUgMHgwLCBpbiBmdW5jdGlvbiBh
dCBpbmRleCAwIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2Vi
QXNzZW1ibHkoKS5nZXQoKSknKSIpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFz
c2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5D
b21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDY6
IGNhbGxfaW5kaXJlY3QncyAncmVzZXJ2ZWQnIHZhcnVpbnQxIG11c3QgYmUgMHgwLCBpbiBmdW5j
dGlvbiBhdCBpbmRleCAwIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxk
ZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIpOwogfQogCiB7CkBAIC04Niw3ICs4Niw3IEBACiAg
ICAgICAgIC5FbmQoKQogICAgICAgICAuQ29kZSgpCiAgICAgICAgIC5FbmQoKTsKLSAgICBhc3Nl
cnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJs
eSgpLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxl
IGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyMyAvIDI2OiBjYW4ndCBleHBvcnQgVGFibGUgMCB0aGVy
ZSBhcmUgMCBUYWJsZXMiKTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJs
eS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGls
ZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyMzogY2Fu
J3QgZXhwb3J0IFRhYmxlIDAgdGhlcmUgYXJlIDAgVGFibGVzIik7CiB9CiAKIHsKQEAgLTEwMiw3
ICsxMDIsNyBAQAogICAgICAgICAuRW5kKCkKICAgICAgICAgLkNvZGUoKQogICAgICAgICAuRW5k
KCk7Ci0gICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxk
ZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFz
c2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzAgLyAzMzogY2FuJ3QgZXhwb3J0
IFRhYmxlIDEgdGhlcmUgYXJlIDEgVGFibGVzIik7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBu
ZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIFdlYkFz
c2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0
IGJ5dGUgMzA6IGNhbid0IGV4cG9ydCBUYWJsZSAxIHRoZXJlIGFyZSAxIFRhYmxlcyIpOwogfQog
CiBmdW5jdGlvbiBhc3NlcnRCYWRUYWJsZSh0YWJsZURlc2NyaXB0aW9uLCBtZXNzYWdlKSB7CkBA
IC0xMzIsNDIgKzEzMiw0MiBAQCBmdW5jdGlvbiBhc3NlcnRCYWRUYWJsZUltcG9ydCh0YWJsZURl
c2NyaXB0aW9uLCBtZXNzYWdlKSB7CiB7CiAgICAgbGV0IGJhZERlc2NyaXB0aW9ucyA9IFsKICAg
ICAgICAgW3tpbml0aWFsOiAxMCwgZWxlbWVudDogImkzMiJ9LAotICAgICAgICAgIldlYkFzc2Vt
Ymx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTggLyAyMzogVGFibGUgdHlwZSBzaG91
bGQgYmUgYW55ZnVuYywgZ290IC0xIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxl
KGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCi0gICAgICAgICAiV2ViQXNzZW1ibHku
TW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNiAvIDM0OiBUYWJsZSB0eXBlIHNob3VsZCBi
ZSBhbnlmdW5jLCBnb3QgLTEgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVp
bGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9k
dWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxODogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVu
YywgZ290IC0xIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2Vi
QXNzZW1ibHkoKS5nZXQoKSknKSIsCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNu
J3QgcGFyc2UgYXQgYnl0ZSAyNjogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC0x
IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHko
KS5nZXQoKSknKSJdLAogICAgICAgICBbe2luaXRpYWw6IDEwLCBlbGVtZW50OiAiZjMyIn0sCi0g
ICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxOCAvIDIz
OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTMgKGV2YWx1YXRpbmcgJ25ldyBX
ZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKLSAgICAg
ICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2IC8gMzQ6IFRh
YmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtMyAoZXZhbHVhdGluZyAnbmV3IFdlYkFz
c2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKKyAgICAgICAg
ICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE4OiBUYWJsZSB0eXBl
IHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTMgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5N
b2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKKyAgICAgICAgICJXZWJBc3Nl
bWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2OiBUYWJsZSB0eXBlIHNob3VsZCBi
ZSBhbnlmdW5jLCBnb3QgLTMgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVp
bGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCiAgICAgICAgIFt7aW5pdGlhbDogMTAsIGVs
ZW1lbnQ6ICJmNjQifSwKLSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJz
ZSBhdCBieXRlIDE4IC8gMjM6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtNCAo
ZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCku
Z2V0KCkpJykiLAotICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0
IGJ5dGUgMjYgLyAzNDogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC00IChldmFs
dWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQo
KSknKSJdLAorICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5
dGUgMTg6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtNCAoZXZhbHVhdGluZyAn
bmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAor
ICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjY6IFRh
YmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtNCAoZXZhbHVhdGluZyAnbmV3IFdlYkFz
c2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKICAgICAgICAg
W3tpbml0aWFsOiAxMCwgZWxlbWVudDogImk2NCJ9LAotICAgICAgICAgIldlYkFzc2VtYmx5Lk1v
ZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTggLyAyMzogVGFibGUgdHlwZSBzaG91bGQgYmUg
YW55ZnVuYywgZ290IC0yIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxk
ZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxl
IGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNiAvIDM0OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlm
dW5jLCBnb3QgLTIgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5X
ZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRv
ZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxODogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290
IC0yIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1i
bHkoKS5nZXQoKSknKSIsCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFy
c2UgYXQgYnl0ZSAyNjogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC0yIChldmFs
dWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQo
KSknKSJdLAogICAgICAgICBbe2luaXRpYWw6IDEwLCBtYXhpbXVtOiAyMCwgZWxlbWVudDogImkz
MiJ9LAotICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUg
MTggLyAyNDogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC0xIChldmFsdWF0aW5n
ICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIs
Ci0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNiAv
IDM1OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTEgKGV2YWx1YXRpbmcgJ25l
dyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCisg
ICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxODogVGFi
bGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC0xIChldmFsdWF0aW5nICduZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCisgICAgICAgICAi
V2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNjogVGFibGUgdHlwZSBz
aG91bGQgYmUgYW55ZnVuYywgZ290IC0xIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9k
dWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAogICAgICAgICBbe2luaXRpYWw6
IDEwLCBtYXhpbXVtOiAyMCwgZWxlbWVudDogImYzMiJ9LAotICAgICAgICAgIldlYkFzc2VtYmx5
Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTggLyAyNDogVGFibGUgdHlwZSBzaG91bGQg
YmUgYW55ZnVuYywgZ290IC0zIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1
aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9k
dWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNiAvIDM1OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBh
bnlmdW5jLCBnb3QgLTMgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRl
ci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxl
IGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxODogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywg
Z290IC0zIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNz
ZW1ibHkoKS5nZXQoKSknKSIsCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3Qg
cGFyc2UgYXQgYnl0ZSAyNjogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC0zIChl
dmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5n
ZXQoKSknKSJdLAogICAgICAgICBbe2luaXRpYWw6IDEwLCBtYXhpbXVtOiAyMCwgZWxlbWVudDog
ImY2NCJ9LAotICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5
dGUgMTggLyAyNDogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC00IChldmFsdWF0
aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSkn
KSIsCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAy
NiAvIDM1OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTQgKGV2YWx1YXRpbmcg
J25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0s
CisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxODog
VGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC00IChldmFsdWF0aW5nICduZXcgV2Vi
QXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCisgICAgICAg
ICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNjogVGFibGUgdHlw
ZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC00IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHku
TW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAogICAgICAgICBbe2luaXRp
YWw6IDEwLCBtYXhpbXVtOiAyMCwgZWxlbWVudDogImk2NCJ9LAotICAgICAgICAgIldlYkFzc2Vt
Ymx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTggLyAyNDogVGFibGUgdHlwZSBzaG91
bGQgYmUgYW55ZnVuYywgZ290IC0yIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxl
KGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCi0gICAgICAgICAiV2ViQXNzZW1ibHku
TW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNiAvIDM1OiBUYWJsZSB0eXBlIHNob3VsZCBi
ZSBhbnlmdW5jLCBnb3QgLTIgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVp
bGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9k
dWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxODogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVu
YywgZ290IC0yIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2Vi
QXNzZW1ibHkoKS5nZXQoKSknKSIsCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNu
J3QgcGFyc2UgYXQgYnl0ZSAyNjogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC0y
IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHko
KS5nZXQoKSknKSJdLAogCiAgICAgICAgIFt7aW5pdGlhbDogMTAsIG1heGltdW06IDksIGVsZW1l
bnQ6ICJhbnlmdW5jIn0sCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFy
c2UgYXQgYnl0ZSAyMSAvIDI0OiByZXNpemFibGUgbGltaXRzIGhhcyBhIGluaXRpYWwgcGFnZSBj
b3VudCBvZiAxMCB3aGljaCBpcyBncmVhdGVyIHRoYW4gaXRzIG1heGltdW0gOSAoZXZhbHVhdGlu
ZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJyki
LAotICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjkg
LyAzNTogcmVzaXphYmxlIGxpbWl0cyBoYXMgYSBpbml0aWFsIHBhZ2UgY291bnQgb2YgMTAgd2hp
Y2ggaXMgZ3JlYXRlciB0aGFuIGl0cyBtYXhpbXVtIDkgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3Nl
bWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCisgICAgICAgICAi
V2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyMTogcmVzaXphYmxlIGxp
bWl0cyBoYXMgYSBpbml0aWFsIHBhZ2UgY291bnQgb2YgMTAgd2hpY2ggaXMgZ3JlYXRlciB0aGFu
IGl0cyBtYXhpbXVtIDkgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRl
ci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUg
ZG9lc24ndCBwYXJzZSBhdCBieXRlIDI5OiByZXNpemFibGUgbGltaXRzIGhhcyBhIGluaXRpYWwg
cGFnZSBjb3VudCBvZiAxMCB3aGljaCBpcyBncmVhdGVyIHRoYW4gaXRzIG1heGltdW0gOSAoZXZh
bHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0
KCkpJykiXSwKICAgICAgICAgW3tpbml0aWFsOiAxLCBtYXhpbXVtOiAwLCBlbGVtZW50OiAiYW55
ZnVuYyJ9LAotICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5
dGUgMjEgLyAyNDogcmVzaXphYmxlIGxpbWl0cyBoYXMgYSBpbml0aWFsIHBhZ2UgY291bnQgb2Yg
MSB3aGljaCBpcyBncmVhdGVyIHRoYW4gaXRzIG1heGltdW0gMCAoZXZhbHVhdGluZyAnbmV3IFdl
YkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAotICAgICAg
ICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjkgLyAzNTogcmVz
aXphYmxlIGxpbWl0cyBoYXMgYSBpbml0aWFsIHBhZ2UgY291bnQgb2YgMSB3aGljaCBpcyBncmVh
dGVyIHRoYW4gaXRzIG1heGltdW0gMCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVs
ZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKKyAgICAgICAgICJXZWJBc3NlbWJs
eS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDIxOiByZXNpemFibGUgbGltaXRzIGhhcyBh
IGluaXRpYWwgcGFnZSBjb3VudCBvZiAxIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiBpdHMgbWF4aW11
bSAwIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1i
bHkoKS5nZXQoKSknKSIsCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFy
c2UgYXQgYnl0ZSAyOTogcmVzaXphYmxlIGxpbWl0cyBoYXMgYSBpbml0aWFsIHBhZ2UgY291bnQg
b2YgMSB3aGljaCBpcyBncmVhdGVyIHRoYW4gaXRzIG1heGltdW0gMCAoZXZhbHVhdGluZyAnbmV3
IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKICAg
ICAgICAgW3tpbml0aWFsOiAyKiozMiAtIDEsIG1heGltdW06IDIqKjMyIC0gMiwgZWxlbWVudDog
ImFueWZ1bmMifSwKLSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBh
dCBieXRlIDI5IC8gMzI6IHJlc2l6YWJsZSBsaW1pdHMgaGFzIGEgaW5pdGlhbCBwYWdlIGNvdW50
IG9mIDQyOTQ5NjcyOTUgd2hpY2ggaXMgZ3JlYXRlciB0aGFuIGl0cyBtYXhpbXVtIDQyOTQ5Njcy
OTQgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJs
eSgpLmdldCgpKScpIiwKLSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJz
ZSBhdCBieXRlIDM3IC8gNDM6IHJlc2l6YWJsZSBsaW1pdHMgaGFzIGEgaW5pdGlhbCBwYWdlIGNv
dW50IG9mIDQyOTQ5NjcyOTUgd2hpY2ggaXMgZ3JlYXRlciB0aGFuIGl0cyBtYXhpbXVtIDQyOTQ5
NjcyOTQgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3Nl
bWJseSgpLmdldCgpKScpIl0sCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3Qg
cGFyc2UgYXQgYnl0ZSAyOTogcmVzaXphYmxlIGxpbWl0cyBoYXMgYSBpbml0aWFsIHBhZ2UgY291
bnQgb2YgNDI5NDk2NzI5NSB3aGljaCBpcyBncmVhdGVyIHRoYW4gaXRzIG1heGltdW0gNDI5NDk2
NzI5NCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2Vt
Ymx5KCkuZ2V0KCkpJykiLAorICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBh
cnNlIGF0IGJ5dGUgMzc6IHJlc2l6YWJsZSBsaW1pdHMgaGFzIGEgaW5pdGlhbCBwYWdlIGNvdW50
IG9mIDQyOTQ5NjcyOTUgd2hpY2ggaXMgZ3JlYXRlciB0aGFuIGl0cyBtYXhpbXVtIDQyOTQ5Njcy
OTQgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJs
eSgpLmdldCgpKScpIl0sCiAgICAgICAgIFt7aW5pdGlhbDogMioqMzEsIGVsZW1lbnQ6ICJhbnlm
dW5jIn0sCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0
ZSAyNCAvIDI3OiBUYWJsZSdzIGluaXRpYWwgcGFnZSBjb3VudCBvZiAyMTQ3NDgzNjQ4IGlzIHRv
byBiaWcsIG1heGltdW0gMTAwMDAwMDAgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1
bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKLSAgICAgICAgICJXZWJBc3NlbWJs
eS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDMyIC8gMzg6IFRhYmxlJ3MgaW5pdGlhbCBw
YWdlIGNvdW50IG9mIDIxNDc0ODM2NDggaXMgdG9vIGJpZywgbWF4aW11bSAxMDAwMDAwMCAoZXZh
bHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0
KCkpJykiXSwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBi
eXRlIDI0OiBUYWJsZSdzIGluaXRpYWwgcGFnZSBjb3VudCBvZiAyMTQ3NDgzNjQ4IGlzIHRvbyBi
aWcsIG1heGltdW0gMTAwMDAwMDAgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUo
YnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKKyAgICAgICAgICJXZWJBc3NlbWJseS5N
b2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDMyOiBUYWJsZSdzIGluaXRpYWwgcGFnZSBjb3Vu
dCBvZiAyMTQ3NDgzNjQ4IGlzIHRvbyBiaWcsIG1heGltdW0gMTAwMDAwMDAgKGV2YWx1YXRpbmcg
J25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0s
CiAgICAgXTsKIAogICAgIGZvciAoY29uc3QgZCBvZiBiYWREZXNjcmlwdGlvbnMpIHsKQEAgLTE4
Niw3ICsxODYsNyBAQCBmdW5jdGlvbiBhc3NlcnRCYWRUYWJsZUltcG9ydCh0YWJsZURlc2NyaXB0
aW9uLCBtZXNzYWdlKSB7CiAgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCiAgICAgICAgIC5Db2Rl
KCkKICAgICAgICAgLkVuZCgpOwotICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2Vt
Ymx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21w
aWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDM5IC8g
NDg6IENhbm5vdCBoYXZlIG1vcmUgdGhhbiBvbmUgVGFibGUgZm9yIG5vdyIpOworICAgIGFzc2Vy
dC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5
KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUg
ZG9lc24ndCBwYXJzZSBhdCBieXRlIDM5OiBDYW5ub3QgaGF2ZSBtb3JlIHRoYW4gb25lIFRhYmxl
IGZvciBub3ciKTsKIH0KIAogCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3Rf
RGF0YS5qcyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9EYXRhLmpzCmluZGV4IGNjYTBjZjNi
YzQ1ZDBmNGRkMzNiZDljYTU5Nzk4OTU0ZDJkNDViMTguLjQxNzE0MzUxMjhhMDg0ZDU5NDlkOGZm
MmI4YjEyNTcwYjdmMjMzNzUgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9E
YXRhLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9EYXRhLmpzCkBAIC01Miw3ICs1
Miw3IEBACiAgICAgICAgICAgLlNlZ21lbnQoWzB4ZmZdKS5PZmZzZXQoMCkuRW5kKCkKICAgICAg
ICAgLkVuZCgpOwogICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsK
LSAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKSwgV2Vi
QXNzZW1ibHkuQ29tcGlsZUVycm9yLCBgV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2Ug
YXQgYnl0ZSAxNSAvIDIwOiAwdGggRGF0YSBzZWdtZW50IGhhcyBpbmRleCAwIHdoaWNoIGV4Y2Vl
ZHMgdGhlIG51bWJlciBvZiBNZW1vcmllcyAwYCk7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBu
ZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbiksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgYFdl
YkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTU6IDB0aCBEYXRhIHNlZ21l
bnQgaGFzIGluZGV4IDAgd2hpY2ggZXhjZWVkcyB0aGUgbnVtYmVyIG9mIE1lbW9yaWVzIDBgKTsK
IH0pKCk7CiAKIChmdW5jdGlvbiBFbXB0eURhdGFTZWN0aW9uV2l0aG91dE1lbW9yeSgpIHsKQEAg
LTYyLDcgKzYyLDcgQEAKICAgICAgICAgICAuU2VnbWVudChbXSkuT2Zmc2V0KDApLkVuZCgpCiAg
ICAgICAgIC5FbmQoKTsKICAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0
KCk7Ci0gICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbiks
IFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgYFdlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBh
cnNlIGF0IGJ5dGUgMTUgLyAxOTogMHRoIERhdGEgc2VnbWVudCBoYXMgaW5kZXggMCB3aGljaCBl
eGNlZWRzIHRoZSBudW1iZXIgb2YgTWVtb3JpZXMgMGApOworICAgIGFzc2VydC50aHJvd3MoKCkg
PT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3Is
IGBXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE1OiAwdGggRGF0YSBz
ZWdtZW50IGhhcyBpbmRleCAwIHdoaWNoIGV4Y2VlZHMgdGhlIG51bWJlciBvZiBNZW1vcmllcyAw
YCk7CiB9KSgpOwogCiAoZnVuY3Rpb24gRGF0YVNlY3Rpb25CaWdnZXJUaGFuTWVtb3J5KCkgewpk
aWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X1N0YXJ0LmpzIGIvSlNUZXN0cy93
YXNtL2pzLWFwaS90ZXN0X1N0YXJ0LmpzCmluZGV4IGI0NDQ1NjkzMmQ5MGI1YzgzMzE0NWVjM2Yz
NDJmYzUwNDZmNzllMGIuLjVjMzE1MGUxY2FiZWJmYjg0MzMzZWY3MTQyM2E4ODg2Y2RlMGVhZTgg
MTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9TdGFydC5qcworKysgYi9KU1Rl
c3RzL3dhc20vanMtYXBpL3Rlc3RfU3RhcnQuanMKQEAgLTMxLDUgKzMxLDUgQEAKICAgICAgICAg
LlN0YXJ0KDApLkVuZCgpIC8vIEludmFsaWQgaW5kZXguCiAgICAgICAgIC5Db2RlKCkuRW5kKCk7
CiAgICAgY29uc3QgYmluID0gYi5XZWJBc3NlbWJseSgpLmdldCgpOwotICAgIGFzc2VydC50aHJv
d3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pLCBFcnJvciwgYFdlYkFzc2VtYmx5
Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTcgLyAyMDogU3RhcnQgaW5kZXggMCBleGNl
ZWRzIGZ1bmN0aW9uIGluZGV4IHNwYWNlIDAgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5N
b2R1bGUoYmluKScpYCk7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHku
TW9kdWxlKGJpbiksIEVycm9yLCBgV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQg
Ynl0ZSAxNzogU3RhcnQgaW5kZXggMCBleGNlZWRzIGZ1bmN0aW9uIGluZGV4IHNwYWNlIDAgKGV2
YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKScpYCk7CiB9KSgpOwpkaWZmIC0t
Z2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X2Jhc2ljX2FwaS5qcyBiL0pTVGVzdHMvd2Fz
bS9qcy1hcGkvdGVzdF9iYXNpY19hcGkuanMKaW5kZXggMDhlNzRhYTMyNGE3MTc4OGU1ODE5YzRh
OGJiZTc3NDc1ODViMWE4OS4uMWEyZDIyMjEwMzA0NTFkZjA2NDViMzBlYTMxYmIyNzQ4ZjU1MzZk
MCAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X2Jhc2ljX2FwaS5qcworKysg
Yi9KU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfYmFzaWNfYXBpLmpzCkBAIC02Nyw3ICs2Nyw3IEBA
CiAgICAgICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseVtjXShpbnZh
bGlkKSwgVHlwZUVycm9yLCBgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheUJ1ZmZlclZp
ZXcgb3IgYW4gQXJyYXlCdWZmZXIgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseVtjXShpbnZh
bGlkKScpYCk7CiAgICAgICAgIGZvciAoY29uc3QgYnVmZmVyIG9mIFtuZXcgQXJyYXlCdWZmZXIo
KSwgbmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcigpKSwgbmV3IEludDhBcnJheSgpLCBuZXcg
VWludDhBcnJheSgpLCBuZXcgVWludDhDbGFtcGVkQXJyYXkoKSwgbmV3IEludDE2QXJyYXkoKSwg
bmV3IFVpbnQxNkFycmF5KCksIG5ldyBJbnQzMkFycmF5KCksIG5ldyBVaW50MzJBcnJheSgpLCBu
ZXcgRmxvYXQzMkFycmF5KCksIG5ldyBGbG9hdDY0QXJyYXkoKV0pCiAgICAgICAgICAgICAvLyBG
SVhNRSB0aGUgZm9sbG93aW5nIHNob3VsZCBiZSBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IuIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM3NjgKLSAgICAgICAgICAg
IGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5W2NdKGJ1ZmZlciksIEVycm9yLCBg
V2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAwIC8gMDogZXhwZWN0ZWQg
YSBtb2R1bGUgb2YgYXQgbGVhc3QgOCBieXRlcyAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5
W2NdKGJ1ZmZlciknKWApOworICAgICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2Vi
QXNzZW1ibHlbY10oYnVmZmVyKSwgRXJyb3IsIGBXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBw
YXJzZSBhdCBieXRlIDA6IGV4cGVjdGVkIGEgbW9kdWxlIG9mIGF0IGxlYXN0IDggYnl0ZXMgKGV2
YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseVtjXShidWZmZXIpJylgKTsKICAgICAgICAgYXNzZXJ0
Lmluc3RhbmNlb2YobmV3IFdlYkFzc2VtYmx5W2NdKGVtcHR5TW9kdWxlQXJyYXkpLCBXZWJBc3Nl
bWJseS5Nb2R1bGUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlICJJbnN0YW5jZSI6CmRpZmYg
LS1naXQgYS9KU1Rlc3RzL3dhc20vanMtYXBpL3ZlcnNpb24uanMgYi9KU1Rlc3RzL3dhc20vanMt
YXBpL3ZlcnNpb24uanMKaW5kZXggODFjZDdmZjAxMjJmYjIxY2U5MWY4MGZiNTFlNGM2OWUxNDU5
OGM0Ny4uMDQ4NmZjZmRkZWZkMDgyMWQzOTI0NmNiNjQwODczNGJmZWJmMjJlMiAxMDA2NDQKLS0t
IGEvSlNUZXN0cy93YXNtL2pzLWFwaS92ZXJzaW9uLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9qcy1h
cGkvdmVyc2lvbi5qcwpAQCAtNSw1ICs1LDUgQEAKICAgICBpZiAodmVyc2lvbiA9PT0gMSkKICAg
ICAgICAgY29udGludWU7CiAgICAgY29uc3QgZW1wdHlNb2R1bGVBcnJheSA9IFVpbnQ4QXJyYXku
b2YoMHgwLCAweDYxLCAweDczLCAweDZkLCB2ZXJzaW9uLCAweDAwLCAweDAwLCAweDAwKTsKLSAg
ICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoZW1wdHlNb2R1bGVB
cnJheSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgYFdlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vz
bid0IHBhcnNlIGF0IGJ5dGUgOCAvIDg6IHVuZXhwZWN0ZWQgdmVyc2lvbiBudW1iZXIgJHt2ZXJz
aW9ufSBleHBlY3RlZCAxYCk7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1i
bHkuTW9kdWxlKGVtcHR5TW9kdWxlQXJyYXkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsIGBX
ZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDg6IHVuZXhwZWN0ZWQgdmVy
c2lvbiBudW1iZXIgJHt2ZXJzaW9ufSBleHBlY3RlZCAxYCk7CiB9CmRpZmYgLS1naXQgYS9KU1Rl
c3RzL3dhc20vc3RyZXNzL25hbWVTZWN0aW9uLndhc20gYi9KU1Rlc3RzL3dhc20vc3RyZXNzL25h
bWVTZWN0aW9uLndhc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjRiMjJiMWFlZWEzOGU0NjljMzI2MGJhMzRkNWRh
NGE2ZGIxMjE1MwpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMTM0MDkKemNtYlc4T04/QXVkQkBM
dlJhTXVtPk1vQ009JFl+MGQjPz1gRndnXm9LX2pJMmd4R15JVyhZRzJ2WmByJlk2ZSVnCnotUnxs
ZCEkPklJQSZgc3xxQ35KayhkNGx9MWQlTFFCb1lmR3RVUlBkViE8TWpTZkdlU0IxT3VFI1lEPTJX
YipyZQp6PWlZakJfZT11Zz5BSjZUJi12Y3B8TkhLfVpnY05XPGVaRUM7XjUlR2IpSE4xX3hHZHk9
T1g+WWB9PllQX25oT3YKeklVVGM7R0o8WFZyUWhhOyk1Ky1Xe25jT2xqWmdVLSpGTl5fKTFNeEdg
cXxHVWAlWSYmJnBoaXRjQWF6ZUByb1N9CnpafWB2RkMkaTAoSkNtdFBHYEsmeXlTK0ppYWRjeUpY
Sl8pVk9Lc1gwTjdIOV9ya21TfkMqTnV9SiQ/Nk1ufEpULQp6T3JNKFVlMTdyalRaV0BNZCQlVUg/
QGRRe2hqJkpJWnJ5dSVjPVBzKSZJb0RgaHJ7aWlUVSVrcCktV3VlWHtucWAKemQheS08JD5kV3o7
aioyMWRHRlRkX1Z5KiRHNz5jPW9PJTMtamN+M3QrYEdOS3tqIVRScGY/fXpwKG4haTY7OGMkCnpj
Zk0kVUtJSEt5PlVtcXgzRDBxSzVGZjt2QyEyMkcrI1dedXFMIWBPNGNDOGxiOHBtMChncmpxejlx
JUlKeFlAfQp6UFNTfH5RdUc8NkRWciFzR2ZwSEtYSWt5WndmPENOVGw+KkRtLTc/cEMrNWZOdT0j
MCFgQVpCcyomZzEzX25sa3IKelVBZ295eF53Untxdj9oXylnSGReIXVDc2hwTDZmYkNva1JvXnY+
UyZuYkNDNXkoZFMwdnIjOGNqYGw/ND9ZKy1FCnpHdV56a15+fUFeVE8pVTNnXzlnPy1YRk8mPTB7
aGZzZTVsVytgQnAxYXUqKzZSMzIqJVUpPGlneHckPnV6SjJxUwp6ZClVVUtQeHJwQSZFayE/KXNC
fF4rK181NV9mVUl5Wip3eCluWSM2Q19gK2x+YV97Y2gkaj9CXyZTY35VQ3lAU1YKekdQJTFXR3VX
S28tbnJ9RSlfd2tFWS14TFljPkFfe2V7WClrO2x8MldDOWNTd09ZXyNfazk/cHleSnc/NGU8RVQz
CnppSml2Pl9ScUQtPXY9RkM8TVhYXkV4JEpRX2piPj5pWVUqJnRSZTFQRUJfdGFEY3QjMXtgPEJZ
VSlEaHBvcDB5KQp6QUJJdCNFMiZPKUlKdUl+QDh+d09ibmAjWnooXnw9WnFPfHdFd09hJl5mQmsm
YT9IODZoSTMhQmg1YypZe0pTPUQKekptYlg9O0g4TUZ4TnNOWmp9RlI5dkdjN1c5JmBxZWxAMD03
SHFaWkNDVzg1eDA1VWs9JmBsWmxtZjk1S0RrKz5sCnpHcDwlSCNJOCEycXRKO3s8RXFQdkJIaHh0
bHlsTGd4V2d2QzYhKGcoaVd1fEphbiltdFppJExTcWF4NGNQSjlgYAp6ckEwaWhRdldzaEFNXiow
Um5nVkheS3NjdUU7R3R+M01uI3R0N0s7MThKRWJqTkdgLV8peFRjbFQ8ZXJjVWdaQWwKeilTckUr
WHBoU19EfDF+Nzw+YExXJnYxZFFEakZOUEp7P3pgcUdPbDBiZiM0X2JoUUZxdCllYUpqaHQzUFBU
V0g/Cnp1bUo7dVZucktRYmk+OTtxUnRsK29vb0J9WVAjPVRSPlZmKlIkbDdYIVVrUUdCcmUxb1B7
SmU8NXxoe19GRVJ1agp6PWxRPWFzeDN0V2cqMT4jP3g7O1NCd0JTciM7TF41c2F9eHh6PCg5IzN8
MG5AZEd+UitjWWRGe3tDO0xzPUlBO04Kenk4YV9HNnxOc1ZjUmslN3l2OytSMVkkJDt7MXYtQUlP
YHZ7YWMhQElCQ3FaMXBpYGcxWCNUP31QSiskTURKfk52CnpofjJRUk44UlV4a1JHXlFgTlNlT1U7
ajM4NUktNEdfbWBrdUkpI2lVLUYxbF5FeWphSz1YM2BUTTVXfVoxQmJRTgp6P3ppdiVEaiNKMmAr
MSlLdTNnYl9GYVBGbUYpRVREJFUheXBoNF88eHxDOERxVHFzPkhXe3R0UUQ8eko+Rl5lSXoKejIm
eEM/YW1MYlJ7JTVqbmJaWG5kSjdyQyE4QCEjOVJnXyolRmoxVEY2U3tBMyZNd0N+Y1M9OEp1Q3Fg
eXhLT3hCCno+MmZDNShmTTRMSzJrK31kfldhI2FoZDBAOGxrUDRQJGB1JDRuZzI8Rj8lPXFJXmRy
O0lQYTVQQUNGSHNfbFR4KQp6eFhacW9uYW8/WlUhQEgwakhedWh0IXZeSUE4S3VSdiVtfVUrZ1Vw
cGJzVmYyZjBMRUwjPzA2bGtYSjdNKjdxZEkKeig/UVhGT3clR3R6Wl4pZ3t5IXNJI09HdUdoMjFq
dDR8MSpDPTFQN0k7U0gpN20ma29gempGN2hnIUxnUUB6SmkyCnpfNlcwODxkZG9ZX1ooSjViKmcq
aT5zNTxBYmRQZWJyazl4JTJPfiZLe3I9dUFecjBzSUJRMzwqZ08qdDcxKHU3MQp6O1JQIy0yfUdm
PjQ5R0R2dHlFIT94VH56cmpVX1N7JXJpMHs/JkJiPkhJKEs1IUkpVCs0aW8ocVp0NVhMX2pBWUEK
eldWaGJnXzR8bjNfd01fX0Y0UXRrSlpBVE9YSUZ9dGEzK091QUsmLXNaazA/Pmg2TGZHYCN3SCY5
TDxndTVvQDdqCno1YHwoR3YkN3xIV0VyPyQ1SzN4N3NUNVI+Nl5vKT01RE90JFYoRk16aWdwPF9x
S1JpeEFzbEQ7WiEjQG5WIURASAp6UXIxaHlnJDRhSmJuI0Q7NFBMVipvdVdgdkE1PXZzMm5tfmwl
Pj5PSHFYaik+TU47QWNXaD45NVFIR24/SEpJfmAKel45OH5laUcpTjJ3enowMUF8cldAYTxwUHBL
dFcoY2BzJUxie19qaiVpWE9SbE1aV2NCVEVQdlptRk80T2lqU3hNCnpYWl45MWYjOz1JSjJFMkxN
ZmloIWFkM3FaY0EwM0NUJFcrZ2dETWl0d1c8U3NFb0NoMnhLZz02Y1FTMEBQSkJJKQp6ZUMoSTAm
QiZga1pSVTdANjZWVSYhUmxGYnoza3pJP0RRJSRBbHJgPUt9X15jNW0oZ0I1NHxoWFVYdGVgUHZn
d0EKengod14wSys8VWxDRVJoJDFeR31RMW5OU1JVXllsKV4kdk5lQXJmfjhfWlFKcWpkI3x6OHpg
KnB1ZEElPGtWSS1gCnpuOFFhOzFaJSFDQCk7QWkoSnNGNUJuP2t0M1djTC1HfShqJFNqdmp0bEJN
K3xUVEZpZDcxQiN7Y09VTENARjNUdQp6bVRPd3tGMihEbiNMN3x5YFYjM0Z6RCNkYCtwX3BOY1M3
NSNGbDE+cDgrS3xvakRiVytyaHBxdm5KYG0zNyZJUlYKekl8emA3NlQ7RjhfWFZHMFohR0l+I29Y
dThCUjsyfmMrfV9PQ0VBajV3VFIwc18jNjt2P3NLYU1LZyl+TkFSQ3lLCnomKkFRZGc2MkxhRCYl
dTNaMVh9Kzd2WnNNMVgtLVBgRX52V2AtRHJzVW5ZdHwxYXpsLWtrLSFHTEtnVHJVUHJifQp6e3Ar
djQtVWZYNXZrRXFsIUxAX2BgSVdJQlNtWSRtTSppVFpYWUg3e2lUX1V8QiElQ0QxMyk+JDIlcGhw
aSN5MikKell4bEtVZHdpZD8hYzVWMDA8JEZSNkNTOzdsfkhfSXxCNGR9OSptYSMhPD5va1o8UjQj
QXgpcH5YQiFCWVBmSjJjCno4T3UqPEh3TlJiN01BTik7YnBhcTVNSW5PIVZoS0MlZ3tNUFBnTV9I
RElTNmR0UGYtZ29ncE53VVkpPnJtSzZeUAp6aTZRZVZSWW5HNm5JaHxKaEt3bSkmKms2X1MyfDZy
MzlsNkttMGZPWmskcH1xVypAbkJpb2RvTU1HIyt6ZEdSYjAKekczOSt5WVJFKD1XSV88bDx9b2k7
Q1dffm9Yejc/dFIzREckNS1YdkxkN3Z7RTJicFhlKS16WktHKTBeaiQ7NkxACnozdi1iJXtGLTYp
akh7cT4tR3ZieWpoUjNxUypndHU7OEdUe0ZkQ0YyKWl6ek4pLURedjVjI19hZyNlfVhRWHp5TAp6
ZytqbyU/eTEzNFd1WSl1RDE8Zz1obHNlZDd6JmtKRCtRbik+YHtAO0xnNnRObClDflV1LT01aWoo
a0ModSg+OFMKejM1Qn05aCE7YmxXbmBuVUQ9JXxKRk8mcE9HeiowaTYrQUE1TGVYdl56VWImS1Jo
YkhmZ3A0e0FSKkkrPTREK1FCCnprZWZMdzd7KHpPJmhBJTY+WkwmRXFFcDkyblliV1RyXnBvKHA8
cXpRI0JlMUdfKDNzfFNyaWkpYSRIUWJGdDM9WAp6VlYzIV9nPHQ4NGBxRVR1MDBSI1dGJVopfENQ
dCN8UyZZUFU0NDE0RioqR0E5M0BuMDJYOHNgN2oxOCM3a3BkaHwKejVLJS1fNSVfIyNZX2YpTndu
TG1HdDxVNCs4ZGl5O3R5dSZ0K1M+RmU8RSZhLXV7Zno+MDwwRm9UZWNZOXZqMDIwCno4Qm1PaF5j
TV9vI0tAMiR1fih9cCZycUxZO2koS1ZNTzxjREhScXx5RkJ3WnhxPUIpKGpGRz8ye1dWVylJI3dC
Qgp6WURuKjRNNXohLWs7WXlWOXV2WjI1YHJxOy1VUF8oRHVJbVVyWU9TVlVzQWB2eC1QbFdNK2Q0
N0whNShAQl55b04KemdySFBgQmBEN1B4NHlHVnBUQGs+cj4mJDI5N040NWN0UXVaa084V2FEQXQy
KGcjO0ZkMVYja0tZM0lOQUtASSlrCnoxZHZyQFVFSEB3WGU0K1Exaj5ZZkd6dTFjT18wPjhjPyFT
VURBQHhKJTBDJHVPamVRMXc4NmJXRTZpQTFHa2EkMwp6cD50dCMpSmF4JDNiXzVEZm1fbk4qOFpV
KWs0VndsS2hGN0lRRU5zSGJUKHduN1BvfDUmLUlOcGhMZCp4T3h1aSYKektQV1dRdElmX2cqRng5
ZSt4N01AKjg8JT9VayE4KmlVQSFsfEtzb2NeTE1nNkg2TlYrMkh2NlZLfCFxdSRNMl9oCnpxbG9i
RXpnMVpvbC0kN1VmRFBXayZWUXtNI3FqYm8rcHtSJUY1KDtibUFnS2ZrQ2M2RSg5QEJmYEpaYm5C
XjA7MAp6R1JsSk9IUVptSjJ0SFUtdkw+YndqOWk2PXc1QlJLYSllfHdYN1dCWiNOfCNFX2FrZl5r
MWU5RDB1bSFSP0NXaWQKejlEfEUrcC1CcTZQMnJYamA+QjJfUShWPlJJcm47fWFla2w2TWkzSXp5
ME9ZWmF1X2ApXz5aQENTd0ttJEFuQCFMCnpMSk1GfCl4M2ZDWXxLU3o3T2UjZSM5KXcraVVqVnch
QjBuRyhKfUB5QjMzM3VVaFJgQEBGYXNFdzVhNEQ/SU1+Xwp6V259TUsqSlZ5OSEtQDcjMGZ5VE9X
PjheJk1rfn1DNWx7REhQQyZUMmdjcHMrcUJYZXFoJXFWKTgkJF53OGxeT1AKelFBODF7b3syRnZA
a21KVkg2c0t+Pl80PiY5JUtVU0xWQERLXzxHZTZtIVRCZXpwNnlHSCg/cm4yXkx9cks/UFp7Cnpz
eVE2PHllMzxhR3JSX18peHl8RUBCP051THkmblM9cShybk9VZXFZQTxgTE5CP3tGPjs3bio3XmVF
UV9zQXo+PQp6PDBrfFo8dkQ4fDFgaDx1UWtMUzlSbE1jZjYjSnx4WXxsUWIjaEd3SmJ1cmAkY3F3
ZzVfeW1ANkVTNmAlZiF1YjEKekBhJXQqYCl8dTt4RX1Jdi1PeFpfYVBjRTdTYSU5aiEzUUVJd1hL
ekQmNihPSDFAVkBvQSR2fH5DclNTdEdefCliCnpMVG5XMDxOfVFrJXJLe3pLPklLdW88ZlZrNHNF
SHhQJTJ2bVVKPllNdDBJZVYrSGtjQGR9V0k7TF8/TVZBJnx3Uwp6XlAoa3hfK2NIaDNZTXxSZlNe
Y352YDhCPFdHcmYzMVB2IU5URE42M29jT3Z0VHNQdnNsOWJYYzsxYnVQNE13QEUKekhZWmdFZ2JN
JjU5KERvKlV8M0h7TzUrOHxXLVMjNTU8QHU+dnRTUFNndGlFeFlgUjNFPXxMV0ZnSTg5clRUWk9h
CnpZOzxAUzBNb1FBUEVyVFk9Q1M/XnNaZUBoZkdiYU9nVXlNOUQrISZucXlYemVzO3hrbmtnNSQ9
cj00RGtWZ3BrYwp6LVhje3B6YTElY3lSeTU4UiY3fHlMUylsfHAmPnN1XzsmZSVsNzMpIXA+WGUj
XylJai1ITnspZHN3T1Y3TVlMK2MKeig1Uz91ckFNNE0qayg3UilTYHZBaVhseVNZfnxrN18tO1B9
ZlB7SnchN2RjPDd8cyREUD1+UmcwWFRwVjY7TVVFCnp8NFFHMFlQU1plUDRWN1VuWUBsa0hRWVBO
ZV4kWUZNWVBaPWxoaFNGXzlITnwqaDArYyQxX2ZGSEg9ZXMka29MTAp6MzZIVj1vWTBqP0t+OHxq
YFFLQzw2M2M5UVdiOEZQMkFMdS1yIzhmU2hiKSQxTnVsS0VXMipNTCojcW4tbDlDPkIKeiopdDB8
K0E0I3t2UGIkbDc1dD45NEx8QihibVNgPiR5aWxxMlNuPTZ2YTFZNzNWZWohO3xsSSV2RVc4Rikr
OVRHCnpORTBpI1k0e3kyeERfc1BFTz5AVVgqNjdsJmxHTGJpb2s9T2A+PTdyMDImI0A0S0JxYVlo
Mm5tem0oYztjO248VQp6RT0+JVY7LThwcGdHLX1oYWNUUEl4SE44WHNqP35jeEJPdDxUOSU4eUYr
cCNIT0pte0V4Vz1XWG92NHxgYUF7QnkKeiFhKlFReE9CeFpVdyNQQSg3elgpQSgwWExDQDcyODQ5
bk88Q2cyRnFxPCk/M3F0S3BPRUMoSCtYLWlJN2h+K2Q+CnpySG1lM2BKej5LPD9XJGI/QU9Pd2Nq
UH15ODx3ZG9MQTFqeCU1citSSEpobClOREdwUHZLJnNiUmFzQSY5OHNxQAp6X0t2MndJdEJZajx1
bzFHZHNwbH1ZYGQ/N1U3ZlMmOz1mRTRycz08MEwoZjslTGJYZXZPWW0hcGs9fDR5SSpZRU0Kekhk
THBfYmctIUNaaEAkQVFGMWhvS2gkbCh6N1hPNnVWOVJFKFdRZFgwYDc4U0VoPGp+VVJGWkUycmRm
dHRJVGozCno0XyhRTikxaVMhRF5DdkVRZmJsPSRkSDU1Mm1ZbENNKTFUaCgrfFZ2WDZfMDhsWTRe
Njc0JitHbz57WCNzfkVBUAp6K0IyO2tZNGxVaUgleEktZUg0cHwzbCpjRy1rRTJ7Y3hFSzw1YGJD
VkFGXyYoVV5vUV5UZzZDO1gmdGtXMXlnd0AKej11a04+YztAb00xYlZBN3IoKzRxMz1vK21EfVRY
eT09ZCZGakNPbmRqNnQmP2tWWlF9RjEyVDdee3ckMElyVE1SCnpAZngxVlBtZWQrZjZifGpTWFlN
cCg+JkJ2VV54dCF4LVVITTArcT1zWXtNZkNGTSNXZHIreys3NlhWN2NnRmk+WAp6NktqYF9nZn1C
UihOQDN7Rn4zazFMTChBMlF5MWhyMHllP3pwYHMqMSkpZ2d0emlkVUJeWjF5dzwzZjN0PVlSOUgK
emc5OF4wPzIjKnxnPWNCdEdjZ3ZWUHdjNTUqTF5XT0M7YFMqYm4tej0hZVgrNUZZSCM3TWVTSXda
dGE+X0gzUnZTCnpQTlZoTEBUPyphYjR4QGswQCswfnV7dUkjT2J4c3diVHkhZ003LS0wI1JuY2FA
Q1dkKkxQajtiVjAlR1F1RzJidAp6cDI7dkMrZmBVdVFETylCKWA9WSQwSyR+cmdUUWctVENhTk9m
bVIhZWd2a3FHJktoNSlod3g/QTtMQWYpayQzRUkKemp2LUFSTD9wOHI0UVUhbzMoZGY/V2lVKmNG
b1lSPFBPYHxPWTZ6anV6Tjg5MERwM3VqRGomMllBYllKTmdZWHEqCno2WkNSYjdFb3U/QmhBIUh3
UDg4S2E+PTE9MzNWRm9JXzgzXnFhWHlxSkp+NUpSRkJqSSk/OEVmNjRhXnQ4ITBJKwp6aE4zLUNp
QjVHaEJrTVY4KVkrRk5IUU8xMmQ7UEZUbCM4PWckUWdCcWJjUSpQN3EqXlpeQER8KWVkLTdSKzd8
JEkKemh4P19BYTs0YCNAMDtwYnlOdEx+Xm8zaiQmKm94OTFvaE0lYVJhYXdmcjZ1T28+cjI0OWND
N1hvdk1jfG51WXs4CnpIe1V9PyUkRkFKYHN0dXF6NkMjZDY1MTRYanQzXyFDUWwwcDdCajAmOVJ2
Xj5TOU5pUUFHSmVhRXQ4IzliO0t6UAp6SXNnTUoxTXEtKTB2cmxFcl5pIXd4dGd2UXUwdy1JbGd3
KHBXKWY7V3YpMV99Y3hJXmVMaFBWfXFGMGN0eXJiPkkKeiZWaEEhK2oyZlltOT14YCZTJUJsVndU
M1c8JCYkUjBaQXcjV1RDKkQqI3d4RzVEPEp5TnRfMjxpfV4talNyeDQ7Cnp3SmpUU2o0LURyX1I4
X3JFS1gjaVh9Izx+dDd4cTEhOEghWClxK04oMHxoakw2PyFeeHhXS2J2Vyl+JlZoKEx2Xwp6bk4x
eVlMOEw4MCo0Wk5vNj9yRDIjcEBjNCVXMGxRRjNiI1RSQnR1NG4xfWhBQXUkK2ozT3pOWWZhRlY2
bztaKj0KenFOWWxObXQpSTN4bW8+P3ApcW9+OEJkeEEmfmRvVjFKSCg/KEw5Z25uI1crMF98OzU/
MW5xalIhKHw+ckREJE1JCnpDRDl6Tl42OzMxNUVLJDdJSjx1NG5rQER3RWJ3M3JFZ0RyNG87blJ8
ZiswNDIxKSRIb3hUQlM/VVMkeGdza25hUAp6VG9XNlcxMz1BY0sjdCY+SWRVWjhhSzBEPi0memVK
SnQ8YSZPPmgkSTQ4T24tITs9UFU4I1dKOHFoc3FqJUZzZygKelFjMChXPmJsaEdJeXhPaz5wRS1y
QEpMfD45NFR4QzlGcVZYWk5xeSZieHt8NEhCNzNeYyppYWI0XmtvUEF1OSV3CnpGNSR1UzJwOzZe
S05UJT1KamV8SjUyfUdoTWx3N3x1NUl3KHZRI1lyMCVqenBidkJqYFpQVEh9NzkyP1JrPithZgp6
OzZrTlZfaTFMYzcjPDhWNTl8ZyFuOEI7NmgjQ18mRzRSTmUwNDxRO1BnVUAlRHtLeWhKKzVXYG05
XjVAOHlKQlEKekxKZWpOP3JWQEBLNn1JTVUrZmgtZHpWd3JzbElQYEMkKH1rVkw1UTBLJjxoe2lJ
VGtaMlFuUWJrTkRvOD9mMkw2CnphfDlQVGFXc2ZPIUclYU1oRCk1Yjl3ajRTQmhVWlgtdXo1P3hy
PH5QaGRTYH1YcVZZenxGP1ByR20jbUdtd0psbQp6TiN7NXNCIV93e148TTw4YDNGd1Q7eilLbXI3
LWFXYCgyKy0lMHpiO0VxbSFNbV5BdVA4RDwtdjVDJGRMTW0tdj8KenNSaEdeNDY0blV1cW5ka2VB
cndGbn5Qenk1akliUiV9MnVLcW1jT2tBc0wtVU1EfXF4cX47VjBYPy1jVFlpWVE0CnpnZ3NqTGRI
Iz1qRkZ3K0hqKT4mb2Z4VlRBU1pSKUAlMjcoajV9Wjw0QjFJJi1ndX1WaVZnejU8JFJmSnYrKzJi
VAp6UlYkckleXm1+bypGXkcrT2BjZ0dJIUkwLSNPU3QxPnBefjsxNDJsST8xOH5TbmM1cUtXKjIq
PmYtS292NThgQysKek9wcXZoI2lkdzZXJChQYnFeVWdgKC1KTHY3Y2EkPEVfKWw3VmhOYk5Db2FY
M0Y/JTFtNmlkd1BAblkmcygob2dSCnpEXm1yaiM8ZiUlOyFXc2BMaVJSRC1BRz1+aD5nPWBhM2Rs
SzN3PWFkPWMwP0JibEFUM2t8JiljRSZWTV82JjZoRAp6MSlEantQLWApcGVDWiRCRTh5Sjk5TVNI
SCRtTChSY1Nib3VUaG1rK1VhIW81Jig2b1oobVRNPF43KE5UamBQM1EKemZWVDdCVSYtVEZHdntB
aCRzO3hnLThfblRFWXs2ZUJqO1NxLX1sPTVxfFNkZ1Q+MWZOeHZOSmRqI28/Yl9fZnNpCnpgQiNg
S3l9Tm01NnVxazU1NCFMek1ZUX1HTVpDS0YxeDR+a0E1V3hqQFpDaCNkQHw5aHpte2soZWtqcGR7
Nj1EQgp6PkM9WGRadkFDTXpWdU48Wn5pPyplYCktcylyRlYoKlhFeEk0M14mREtYS2V3MXJOPT4w
NjRrJDNCc3d4dU5GPmMKeiFfa1dgPyFCY295dCNSNj1rOG5pO141eHFvJVFCfWZyc0RoJVkjUSZf
MDdpZ2BQKTBnVGlaSyhxZXRoKnBQJF5HCnpqP05lKGM3MU8mK0lxfGBodEVXWWxoTzJUTT9YM15k
eSpPTlA1RWVIXkxmNUgqP3dYOF97SWx8ez9lKGtKQUQ0Nwp6SjlsMGxlKDF2Kyltb3JuPWNWYjtt
T0xsSD4hWHF2WmZ9cHlZeUkkemk0TmJjWWRiSVMpZGJoeXA9JndfKldjTkUKenlLJihtJldGITk+
UHdeTi1fP0JaQCRUXlQjQ3NNJEAzPEpnKFJncTMoWj42bHVRQUBnQGNxUWIoJnJQOCQyVGBWCko1
WmA/S2UqczgxVGpCciEKCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL0pTVGVz
dHMvd2FzbS9zdHJlc3Mvc3RyZWFtaW5nLWJhc2ljLmpzIGIvSlNUZXN0cy93YXNtL3N0cmVzcy9z
dHJlYW1pbmctYmFzaWMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjNmYmMyNDc5ZjcyMTYzZGZhZDMyMTA0MDU2
YmEyNzQzNTkyMzVkYQotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9zdHJlc3Mvc3Ry
ZWFtaW5nLWJhc2ljLmpzCkBAIC0wLDAgKzEsMTggQEAKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9t
ICcuLi9hc3NlcnQuanMnOworCit2YXIgZGF0YSA9IHJlYWQoIi4vbmFtZVNlY3Rpb24ud2FzbSIs
ICJiaW5hcnkiKTsKKworZnVuY3Rpb24gY2hlY2soc3RlcCkKK3sKKyAgICB2YXIgcGFyc2VyID0g
JHZtLmNyZWF0ZVdhc21TdHJlYW1pbmdQYXJzZXIoKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGRhdGEuYnl0ZUxlbmd0aDsgaSArPSBzdGVwKSB7CisgICAgICAgIHBhcnNlci5hZGRCeXRlcyhk
YXRhLnN1YmFycmF5KGksIGkgKyBNYXRoLm1pbihzdGVwLCBkYXRhLmJ5dGVMZW5ndGggLSBpKSkp
OworICAgIH0KKyAgICBhc3NlcnQuZXEocGFyc2VyLmZpbmFsaXplKCksIDcpOworfQorCitmb3Ig
KHZhciBpID0gMDsgaSA8IDEwOyArK2kpCisgICAgY2hlY2soaSArIDEpOworY2hlY2soMTAwKTsK
K2NoZWNrKDEwMDApOworY2hlY2soMjAwMCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>348147</attachid>
            <date>2018-08-27 09:07:13 -0700</date>
            <delta_ts>2018-08-27 11:09:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-188943-20180828010712.patch</filename>
            <type>text/plain</type>
            <size>170462</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM1MzU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
ZDJhYzBiZmEwNjcxODA3MDdlMGE1YmI1YWFlNzRlZjJlYjNhZTYwLi4wYjUzMWFiZDhmZmM4Yjg2
MjQ0ZTYxODQzZDUxMmIxZmU1YWFhZDgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNjUgQEAKKzIwMTgtMDgtMjcgIFl1c3VrZSBTdXp1a2kgIDx5dXN1a2VzdXp1a2lAc2xv
d3N0YXJ0Lm9yZz4KKworICAgICAgICBbV2ViQXNzZW1ibHldIFBhcnNlIHdhc20gbW9kdWxlcyBp
biBhIHN0cmVhbWluZyBmYXNoaW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xODg5NDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgV2FzbTo6U3RyZWFtaW5nUGFyc2VyLCB3aGlj
aCBwYXJzZXMgd2FzbSBiaW5hcnkgaW4gYSBzdHJlYW1pbmcgZmFzaGlvbi4KKyAgICAgICAgQ3Vy
cmVudGx5LCB0aGlzIFN0cmVhbWluZ1BhcnNlciBpcyBub3QgZW5hYmxlZCBhbmQgaW50ZWdyYXRl
ZC4gSW4gc3Vic2VxdWVudCBwYXRjaGVzLAorICAgICAgICB3ZSBzdGFydCBpbnRlZ3JhdGluZyBp
dCBpbnRvIEJCUVBsYW4gYW5kIGRyb3BwaW5nIHRoZSBvbGQgTW9kdWxlUGFyc2VyLgorCisgICAg
ICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiB0b29scy9KU0RvbGxhclZNLmNwcDoKKyAgICAgICAg
KFdURjo6V2FzbVN0cmVhbWluZ1BhcnNlcjo6V2FzbVN0cmVhbWluZ1BhcnNlcik6CisgICAgICAg
IChXVEY6Oldhc21TdHJlYW1pbmdQYXJzZXI6OmNyZWF0ZSk6CisgICAgICAgIChXVEY6Oldhc21T
dHJlYW1pbmdQYXJzZXI6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXVEY6Oldhc21TdHJl
YW1pbmdQYXJzZXI6OnN0cmVhbWluZ1BhcnNlcik6CisgICAgICAgIChXVEY6Oldhc21TdHJlYW1p
bmdQYXJzZXI6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdURjo6ZnVuY3Rpb25XYXNtU3Ry
ZWFtaW5nUGFyc2VyQWRkQnl0ZXMpOgorICAgICAgICAoV1RGOjpmdW5jdGlvbldhc21TdHJlYW1p
bmdQYXJzZXJGaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uQ3JlYXRlV2FzbVN0cmVh
bWluZ1BhcnNlcik6CisgICAgICAgIChKU0M6OkpTRG9sbGFyVk06OmZpbmlzaENyZWF0aW9uKToK
KyAgICAgICAgVGhpcyBvYmplY3QgaXMgaW50cm9kdWNlZCBmb3IgdGVzdGluZyBwdXJwb3NlLiBB
ZGRlZCBuZXcgc3RyZXNzIHRlc3QgdXNlcyB0aGlzIGludGVyZmFjZQorICAgICAgICB0byB0ZXN0
IHN0cmVhbWluZyBwYXJzZXIgaW4gdGhlIEpTQyBzaGVsbC4KKworICAgICAgICAqIHdhc20vV2Fz
bUJCUVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpCQlFQbGFuKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSk6CisgICAg
ICAgIChKU0M6Oldhc206OkJCUVBsYW46OnByZXBhcmUpOgorICAgICAgICAoSlNDOjpXYXNtOjpC
QlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6
Y29tcGxldGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjp3b3JrKToKKyAgICAgICAg
KiB3YXNtL1dhc21CQlFQbGFuLmg6CisgICAgICAgIEJCUVBsYW4gaGFzIG1fc291cmNlLCBidXQg
b25jZSBNb2R1bGVJbmZvcm1hdGlvbiBpcyBwYXJzZWQsIGl0IGlzIG5vIGxvbmdlciBuZWNlc3Nh
cnkuCisgICAgICAgIEluIHN1YnNlcXVlbnQgcGF0Y2hlcywgd2Ugd2lsbCByZW1vdmUgdGhpcywg
YW5kIHN0cmVhbSB0aGUgZGF0YSBpbnRvIHRoZSBCQlFQbGFuLgorCisgICAgICAgICogd2FzbS9X
YXNtRm9ybWF0Lmg6CisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbjo6TW9kdWxlSW5mb3JtYXRpb24p
OgorICAgICAgICAqIHdhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmg6CisgICAgICAgIE9uZSBv
ZiB0aGUgbGFyZ2VzdCBjaGFuZ2UgaW4gdGhpcyBwYXRjaCBpcyB0aGF0IE1vZHVsZUluZm9ybWF0
aW9uIG5vIGxvbmdlciBob2xkcyBzb3VyY2UgYnl0ZXMsCisgICAgICAgIHNpbmNlIHNvdXJjZSBi
eXRlcyBjYW4gYmUgYWRkZWQgaW4gYSBzdHJlYW1pbmcgZmFzaGlvbi4gSW5zdGVhZCBvZiBob2xk
aW5nIGFsbCB0aGUgc291cmNlIGJ5dGVzCisgICAgICAgIGluIE1vZHVsZUluZm9ybWF0aW9uLCBl
YWNoIGZ1bmN0aW9uIChNb2R1bGVJbmZvcm1hdGlvbjo6ZnVuY3Rpb25zLCBGdW5jdGlvbkRhdGEp
IHNob3VsZCBoYXZlCisgICAgICAgIFZlY3Rvcjx1aW50OF90PiBmb3IgaXRzIGRhdGEuIFRoaXMg
ZGF0YSBpcyBldmVudHVhbGx5IGZpbGxlZCBieSBTdHJlYW1pbmdQYXJzZXIsIGFuZCBjb21waWxp
bmcKKyAgICAgICAgYSBmdW5jdGlvbiB3aXRoIHRoaXMgZGF0YSBjYW4gYmUgZG9uZSBjb25jdXJy
ZW50bHkgd2l0aCBTdHJlYW1pbmdQYXJzZXIuCisKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxl
SW5mb3JtYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZUluZm9ybWF0
aW9uOjptZW1vcnlDb3VudCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZUluZm9y
bWF0aW9uOjp0YWJsZUNvdW50IGNvbnN0KToKKyAgICAgICAgbWVtb3J5Q291bnQgYW5kIHRhYmxl
Q291bnQgc2hvdWxkIGJlIHJlY29yZWRlZCBpbiBNb2R1bGVJbmZvcm1hdGlvbi4KKworICAgICAg
ICAqIHdhc20vV2FzbU1vZHVsZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVs
ZVBhcnNlcjo6cGFyc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjptYWtlSTMySW5pdEV4cHIpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlVHlwZSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VJbXBvcnQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb24p
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlUmVzaXph
YmxlTGltaXRzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpw
YXJzZVRhYmxlSGVscGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFy
c2VyOjpwYXJzZVRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFy
c2VyOjpwYXJzZU1lbW9yeUhlbHBlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206Ok1v
ZHVsZVBhcnNlcjo6cGFyc2VNZW1vcnkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpN
b2R1bGVQYXJzZXI6OnBhcnNlR2xvYmFsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6
TW9kdWxlUGFyc2VyOjpwYXJzZUV4cG9ydCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206
Ok1vZHVsZVBhcnNlcjo6cGFyc2VTdGFydCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206
Ok1vZHVsZVBhcnNlcjo6cGFyc2VFbGVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2Fz
bTo6TW9kdWxlUGFyc2VyOjpwYXJzZUNvZGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNt
OjpNb2R1bGVQYXJzZXI6OnBhcnNlSW5pdEV4cHIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpX
YXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlR2xvYmFsVHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZUN1c3RvbSk6IERlbGV0ZWQuCisgICAgICAgIEV4
dHJhY3Qgc2VjdGlvbiBwYXJzaW5nIGNvZGUgb3V0IGZyb20gTW9kdWxlUGFyc2VyLiBXZSBjcmVh
dGUgU2VjdGlvblBhcnNlciBhbmQgTW9kdWxlUGFyc2VyIHVzZXMgaXQuCisgICAgICAgIFNlY3Rp
b25QYXJzZXIgaXMgYWxzbyB1c2VkIGJ5IFN0cmVhbWluZ1BhcnNlci4KKworICAgICAgICAqIHdh
c20vV2FzbU1vZHVsZVBhcnNlci5oOgorICAgICAgICAqIHdhc20vV2FzbU5hbWVTZWN0aW9uLmg6
CisgICAgICAgIChKU0M6Oldhc206Ok5hbWVTZWN0aW9uOjpOYW1lU2VjdGlvbik6CisgICAgICAg
IChKU0M6Oldhc206Ok5hbWVTZWN0aW9uOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpO
YW1lU2VjdGlvbjo6c2V0SGFzaCk6CisgICAgICAgIEhhc2ggY2FsY3VsYXRpb24gaXMgZGVmZXJy
ZWQgc2luY2UgYWxsIHRoZSBzb3VyY2UgaXMgbm90IGF2YWlsYWJsZSBpbiBzdHJlYW1pbmcgcGFy
c2luZy4KKworICAgICAgICAqIHdhc20vV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmNwcDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6TmFtZVNlY3Rpb25QYXJzZXI6OnBhcnNlKToKKyAgICAgICAgKiB3YXNt
L1dhc21OYW1lU2VjdGlvblBhcnNlci5oOgorICAgICAgICBVc2UgUmVmPE5hbWVTZWN0aW9uPi4K
KworICAgICAgICAqIHdhc20vV2FzbU9NR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpP
TUdQbGFuOjp3b3JrKToKKyAgICAgICAgV2FzbTo6UGxhbiBubyBsb25nZXIgaGF2ZSBtX3NvdXJj
ZSBzaW5jZSBkYXRhIHdpbGwgYmUgZXZlbnR1YWxseSBmaWxsZWQgaW4gYSBzdHJlYW1pbmcgZmFz
aGlvbi4KKyAgICAgICAgT01HUGxhbiBjYW4gZ2V0IGRhdGEgb2YgdGhlIGZ1bmN0aW9uIGJ5IHVz
aW5nIE1vZHVsZUluZm9ybWF0aW9uOjpmdW5jdGlvbnMuCisKKyAgICAgICAgKiB3YXNtL1dhc21Q
YXJzZXIuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGFyc2VyOjpzb3VyY2UgY29uc3QpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpQYXJzZXI6Omxlbmd0aCBjb25zdCk6CisgICAgICAgIChKU0M6Oldh
c206OlBhcnNlcjo6b2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGFyc2VyOjpm
YWlsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6bWFrZUkzMkluaXRFeHByKToKKyAgICAg
ICAgKiB3YXNtL1dhc21QbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6UGxhbik6
CisgICAgICAgIFdhc206OlBsYW4gc2hvdWxkIG5vdCBoYXZlIGFsbCB0aGUgc291cmNlIGFwcmlv
cmkuIFN0cmVhbWVkIGRhdGEgd2lsbCBiZSBwdW1wZWQgZnJvbSB0aGUgcHJvdmlkZXIuCisKKyAg
ICAgICAgKiB3YXNtL1dhc21QbGFuLmg6CisgICAgICAgICogd2FzbS9XYXNtU2VjdGlvblBhcnNl
ci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQ
YXJzZXIuY3BwLgorICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZVR5cGUp
OgorICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZUltcG9ydCk6CisgICAg
ICAgIChKU0M6Oldhc206OlNlY3Rpb25QYXJzZXI6OnBhcnNlRnVuY3Rpb24pOgorICAgICAgICAo
SlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZVJlc2l6YWJsZUxpbWl0cyk6CisgICAgICAg
IChKU0M6Oldhc206OlNlY3Rpb25QYXJzZXI6OnBhcnNlVGFibGVIZWxwZXIpOgorICAgICAgICAo
SlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZVRhYmxlKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6U2VjdGlvblBhcnNlcjo6cGFyc2VNZW1vcnlIZWxwZXIpOgorICAgICAgICAoSlNDOjpXYXNt
OjpTZWN0aW9uUGFyc2VyOjpwYXJzZU1lbW9yeSk6CisgICAgICAgIChKU0M6Oldhc206OlNlY3Rp
b25QYXJzZXI6OnBhcnNlR2xvYmFsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNl
cjo6cGFyc2VFeHBvcnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJz
ZVN0YXJ0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VFbGVtZW50
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VDb2RlKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VJbml0RXhwcik6CisgICAgICAgIChK
U0M6Oldhc206OlNlY3Rpb25QYXJzZXI6OnBhcnNlR2xvYmFsVHlwZSk6CisgICAgICAgIChKU0M6
Oldhc206OlNlY3Rpb25QYXJzZXI6OnBhcnNlRGF0YSk6CisgICAgICAgIChKU0M6Oldhc206OlNl
Y3Rpb25QYXJzZXI6OnBhcnNlQ3VzdG9tKToKKyAgICAgICAgKiB3YXNtL1dhc21TZWN0aW9uUGFy
c2VyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQ
YXJzZXIuaC4KKyAgICAgICAgU2VjdGlvblBhcnNlciBpcyBleHRyYWN0ZWQgZnJvbSBNb2R1bGVQ
YXJzZXIuIEFuZCBpdCBpcyB1c2VkIGJvdGggdGhlIG9sZCAoY3VycmVudGx5IHdvcmtpbmcpIE1v
ZHVsZVBhcnNlcgorICAgICAgICBhbmQgdGhlIG5ldyBTdHJlYW1pbmdQYXJzZXIuCisKKyAgICAg
ICAgKiB3YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
V2FzbTo6cGFyc2VVSW50Nyk6CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6
ZmFpbCk6CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6U3RyZWFtaW5nUGFy
c2VyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U3RyZWFtaW5nUGFyc2VyOjpwYXJzZU1vZHVsZUhl
YWRlcik6CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6cGFyc2VTZWN0aW9u
SGVhZGVyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U3RyZWFtaW5nUGFyc2VyOjpwYXJzZVNlY3Rp
b25TaXplKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U3RyZWFtaW5nUGFyc2VyOjpwYXJzZUNvZGVT
ZWN0aW9uU2l6ZSk6CisgICAgICAgIENvZGUgc2VjdGlvbiBpbiBXYXNtIGJpbmFyeSBpcyBzcGVj
aWFsbHkgaGFuZGxlZCBjb21wYXJlZCB3aXRoIHRoZSBvdGhlciBzZWN0aW9ucyBzaW5jZSBpdCBp
bmNsdWRlcworICAgICAgICBidW5jaCBvZiBmdW5jdGlvbnMuIFN0cmVhbWluZ1BhcnNlciBleHRy
YWN0cyBlYWNoIGZ1bmN0aW9uIGluIGEgc3RyZWFtaW5nIGZhc2hpb24gYW5kIGVuYWJsZSBzdHJl
YW1pbmcKKyAgICAgICAgdmFsaWRhdGlvbiAvIGNvbXBpbGF0aW9uIG9mIFdhc20gZnVuY3Rpb25z
LgorCisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6cGFyc2VGdW5jdGlvbkhl
YWRlcik6CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6cGFyc2VGdW5jdGlv
bkJvZHkpOgorICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OnBhcnNlU2VjdGlv
bkJvZHkpOgorICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmNvbnN1bWUpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmNvbnN1bWVWYXJVSW50MzIpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6U3RyZWFtaW5nUGFyc2VyOjpmYWlsT25TdGF0ZSk6CisgICAgICAgIChKU0M6
Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6ZmluYWxpemUpOgorICAgICAgICAqIHdhc20vV2FzbVN0
cmVhbWluZ1BhcnNlci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6U3RyZWFtaW5nUGFy
c2VyOjphZGRCeXRlcyk6CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6ZXJy
b3JNZXNzYWdlIGNvbnN0KToKKyAgICAgICAgVGhpcyBpcyBvdXIgbmV3IFN0cmVhbWluZ1BhcnNl
ciBpbXBsZW1lbnRhdGlvbi4gU3RyZWFtaW5nUGFyc2VyOjpjb25zdW1lWFhYIGZ1bmN0aW9ucyBn
ZXQgZGF0YSwgYW5kCisgICAgICAgIFN0cmVhbWluZ1BhcnNlcjo6cGFyc2VYWFggZnVuY3Rpb25z
IHBhcnNlIGNvbnN1bWVkIGRhdGEuIFRoZSB1c2VyIG9mIFN0cmVhbWluZ1BhcnNlciBjYWxscwor
ICAgICAgICBTdHJlYW1pbmdQYXJzZXI6OmFkZEJ5dGVzKCkgdG8gcHVtcCB0aGUgYnl0ZXMgc3Ry
ZWFtIGludG8gdGhlIHBhcnNlci4gQW5kIG9uY2UgYWxsIHRoZSBkYXRhIGlzIHB1bXBlZCwKKyAg
ICAgICAgdGhlIHVzZXIgY2FsbHMgU3RyZWFtaW5nUGFyc2VyOjpmaW5hbGl6ZS4gU3RyZWFtaW5n
UGFyc2VyIGlzIGEgc3RhdGUgbWFjaGluZSB3aGljaCBmZWVkcyB0aGUgaW5jb21pbmcKKyAgICAg
ICAgYnl0ZSBzdHJlYW0uCisKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUu
Y3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpzb3VyY2UgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICBBbGwgdGhlIHNvdXJjZSBzaG91bGQgbm90IGJlIGhlbGQuCisKKyAg
ICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaDoKKyAgICAgICAgKiB3YXNtL2pz
L1dlYkFzc2VtYmx5UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlWYWxp
ZGF0ZUZ1bmMpOgorCiAyMDE4LTA4LTI0ICBZdXN1a2UgU3V6dWtpICA8eXVzdWtlc3V6dWtpQHNs
b3dzdGFydC5vcmc+CiAKICAgICAgICAgW0pTQ10gQXJyYXkucHJvdG90eXBlLnJldmVyc2UgbW9k
aWZpZXMgSlNJbW11dGFibGVCdXR0ZXJmbHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdl
TG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggYzJmMWVmYTE5ZmE1ODQ0NmI4MGQ2MjQ0
YmRiZDk1YWVkOTFiYWNhNS4uNWJhZjA1M2RiMGRkZjczNjgwYmM1YzZiMjk3NWU2ZDY1OTlkZGEx
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxOC0wOC0yNyAgWXVzdWtlIFN1enVraSAgPHl1c3Vr
ZXN1enVraUBzbG93c3RhcnQub3JnPgorCisgICAgICAgIFtXZWJBc3NlbWJseV0gUGFyc2Ugd2Fz
bSBtb2R1bGVzIGluIGEgc3RyZWFtaW5nIGZhc2hpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4ODk0MworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBtYXhCeXRlTGVuZ3RoIGZ1bmN0aW9uIHRvIGdl
dCB0aGUgbWF4aW11bSBzaXplIGZvciBULgorCisgICAgICAgICogd3RmL0xFQkRlY29kZXIuaDoK
KyAgICAgICAgKFdURjo6TEVCRGVjb2Rlcjo6bWF4Qnl0ZUxlbmd0aCk6CisgICAgICAgIChXVEY6
OkxFQkRlY29kZXI6OmRlY29kZVVJbnQpOgorICAgICAgICAoV1RGOjpMRUJEZWNvZGVyOjpkZWNv
ZGVJbnQpOgorCiAyMDE4LTA4LTI1ICBZdXN1a2UgU3V6dWtpICA8eXVzdWtlc3V6dWtpQHNsb3dz
dGFydC5vcmc+CiAKICAgICAgICAgU2hyaW5rIHNpemUgb2YgWE1MSHR0cFJlcXVlc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMTdhNDhiZGE2ZDRiZTM5N2IwOGU5NDZjYmQ0ODYx
MDY3NDc5OWRhZS4uNDI2ZDE5ZGNlOTU0ODJlODUxYmZlOWM5Mzg3ZDJjZjYzM2Y1NWQ0OCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE3MzQsNiArMTczNCw4IEBACiAJCUUzOTNB
REQ4MUZFNzAyRDAwMDIyRDY4MSAvKiBXZWFrTWFwSW1wbElubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzOTNBREQ3MUZFNzAyQ0MwMDIyRDY4
MSAvKiBXZWFrTWFwSW1wbElubGluZXMuaCAqLzsgfTsKIAkJRTM5RDQ1RjUxRDM5MDA1NjAwQjNC
Mzc3IC8qIEludGVycHJldGVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTM5RDlEODQxRDM5MDAwNjAwNjY3MjgyIC8qIEludGVycHJldGVy
SW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUUzOURBNEE3MUI3RThCN0MwMDg0RjMzQSAvKiBKU01vZHVsZVJlY29yZC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM5REE0QTUxQjdFOEI3QzAw
ODRGMzNBIC8qIEpTTW9kdWxlUmVjb3JkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJRTNBMDUzMUEyMTM0MkI2ODAwMjJFQzE0IC8qIFdhc21TdHJl
YW1pbmdQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUzQTA1MzE2MjEzNDJCNjYwMDIyRUMxNCAvKiBXYXNtU3RyZWFtaW5nUGFyc2VyLmggKi87
IH07CisJCUUzQTA1MzFDMjEzNDJCNjgwMDIyRUMxNCAvKiBXYXNtU2VjdGlvblBhcnNlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTNBMDUzMTgyMTM0
MkI2NzAwMjJFQzE0IC8qIFdhc21TZWN0aW9uUGFyc2VyLmggKi87IH07CiAJCUUzQTMyQkM3MUZD
ODMxNDcwMDdEN0U3NiAvKiBXZWFrTWFwSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTNBMzJCQzYxRkM4MzEyRTAwN0Q3RTc2IC8qIFdlYWtNYXBJ
bXBsLmggKi87IH07CiAJCUUzQTQyMTQzMUQ2RjU4OTMwMDA3QzYxNyAvKiBQcmVjaXNlSnVtcFRh
cmdldHNJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFM0E0MjE0MjFENkY1ODhGMDAwN0M2MTcgLyogUHJlY2lzZUp1bXBUYXJnZXRzSW5saW5l
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUz
QkZEMEJDMURBRjgwOEUwMDY1REVBMiAvKiBBY2Nlc3NDYXNlU25pcHBldFBhcmFtcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTNCRkQwQkExREFGODA3
QzAwNjVERUEyIC8qIEFjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmggKi87IH07CkBAIC00NjIyLDYg
KzQ2MjQsMTAgQEAKIAkJRTM5RDlEODQxRDM5MDAwNjAwNjY3MjgyIC8qIEludGVycHJldGVySW5s
aW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlcnByZXRlcklubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM5REE0QTQxQjdFOEI3QzAwODRG
MzNBIC8qIEpTTW9kdWxlUmVjb3JkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTTW9kdWxlUmVjb3JkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTM5REE0QTUxQjdFOEI3QzAwODRGMzNBIC8qIEpTTW9kdWxlUmVjb3JkLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTW9kdWxlUmVjb3JkLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUUzQTA1MzE2MjEzNDJCNjYwMDIyRUMxNCAvKiBXYXNtU3RyZWFtaW5nUGFy
c2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21TdHJlYW1pbmdQYXJz
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTNBMDUzMTcyMTM0MkI2NjAwMjJF
QzE0IC8qIFdhc21TZWN0aW9uUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdhc21TZWN0aW9uUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRTNBMDUzMTgyMTM0MkI2NzAwMjJFQzE0IC8qIFdhc21TZWN0aW9uUGFyc2VyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21TZWN0aW9uUGFyc2VyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzQTA1MzE5MjEzNDJCNjcwMDIyRUMxNCAvKiBXYXNt
U3RyZWFtaW5nUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdhc21TdHJlYW1pbmdQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
M0EzMkJDNTFGQzgzMTJEMDA3RDdFNzYgLyogV2Vha01hcEltcGwuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Vha01hcEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFM0EzMkJDNjFGQzgzMTJFMDA3RDdFNzYgLyogV2Vha01hcEltcGwuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vha01hcEltcGwuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTNBNDIxNDIxRDZGNTg4RjAwMDdDNjE3IC8qIFByZWNpc2VK
dW1wVGFyZ2V0c0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJl
Y2lzZUp1bXBUYXJnZXRzSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
NjM0OCw5ICs2MzU0LDEzIEBACiAJCQkJNTNGNDBFOEMxRDU5MDFGMjAwOTlBMUI2IC8qIFdhc21Q
YXJzZXIuaCAqLywKIAkJCQk1MzEzNzRCRTFENUNFOTUwMDBBRjdBMEIgLyogV2FzbVBsYW4uY3Bw
ICovLAogCQkJCTUzMTM3NEJDMUQ1Q0U2NzYwMEFGN0EwQiAvKiBXYXNtUGxhbi5oICovLAorCQkJ
CUUzQTA1MzE3MjEzNDJCNjYwMDIyRUMxNCAvKiBXYXNtU2VjdGlvblBhcnNlci5jcHAgKi8sCisJ
CQkJRTNBMDUzMTgyMTM0MkI2NzAwMjJFQzE0IC8qIFdhc21TZWN0aW9uUGFyc2VyLmggKi8sCiAJ
CQkJNTNGNDBFODQxRDU4Rjk3NzAwOTlBMUI2IC8qIFdhc21TZWN0aW9ucy5oICovLAogCQkJCUFE
NzQzOEJFMUUwNDU3OTIwMEZEMEMyQSAvKiBXYXNtU2lnbmF0dXJlLmNwcCAqLywKIAkJCQlBRDc0
MzhCRjFFMDQ1NzkyMDBGRDBDMkEgLyogV2FzbVNpZ25hdHVyZS5oICovLAorCQkJCUUzQTA1MzE5
MjEzNDJCNjcwMDIyRUMxNCAvKiBXYXNtU3RyZWFtaW5nUGFyc2VyLmNwcCAqLywKKwkJCQlFM0Ew
NTMxNjIxMzQyQjY2MDAyMkVDMTQgLyogV2FzbVN0cmVhbWluZ1BhcnNlci5oICovLAogCQkJCUFE
NUMzNkUzMUY2OUVDOEIwMDBCQ0FBRiAvKiBXYXNtVGFibGUuY3BwICovLAogCQkJCUFENUMzNkU0
MUY2OUVDOEIwMDBCQ0FBRiAvKiBXYXNtVGFibGUuaCAqLywKIAkJCQk1MjUwRDJDRjFFOERBMDVB
MDAyOUE5MzIgLyogV2FzbVRodW5rcy5jcHAgKi8sCkBAIC04NDQ4LDcgKzg0NTgsNiBAQAogCQkJ
CUMyRkNBRTEzMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNjY2RUMwMTgzNTY2RjkwMEQwMTdGMSAvKiBCeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzI4REFFQjFEMzhE
MDA1MDAxQTI1MjkgLyogQnl0ZWNvZGVSZXdyaXRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRkVB
M0JCQUMyMTJDOTdDQjAwRTkzQUQxIC8qIERGR0NGRy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjUx
NEYyMTkxOEIzRTE2NzAwOThGRjhCIC8qIEJ5dGVjb2Rlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY4ODVFMTExODQ5QTNCRTAwRjFFM0ZBIC8qIEJ5dGVjb2RlVXNlRGVmLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjgwMjNFQTE2MTM4MzJCMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggaW4gSGVhZGVy
cyAqLywKQEAgLTg1ODEsNiArODU5MCw3IEBACiAJCQkJMEZCREI5QUQxQUIwRkJDNjAwMEI1N0U1
IC8qIERGR0NhbGxDcmVhdGVEaXJlY3RBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY3QjI5NEIxNEMzQ0QyRjAwN0MzREIxIC8qIERGR0NhcGFiaWxpdGll
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5NTgxNEVGOTBBMjAwQzcyNTMyIC8qIERGR0NG
QVBoYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRUEzQkJBQzIxMkM5N0NCMDBFOTNBRDEgLyog
REZHQ0ZHLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjNCM0EyODE1NDRDOTk3MDAzRUQwRkYgLyog
REZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RDM2OTUx
QUU5Q0MzMzAwMEQ0REZCIC8qIERGR0NsZWFuVXBQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTc3QTQyNDAxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Nsb2JiZXJpemUuaCBpbiBIZWFkZXJzICov
LApAQCAtOTYwNyw4ICs5NjE3LDEwIEBACiAJCQkJNzlCNzU5NzYxREZBNEM2MDAwNTIxNzRDIC8q
IFdhc21QYWdlQ291bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzRjQwRThEMUQ1OTAxRjIwMDk5
QTFCNiAvKiBXYXNtUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzEzNzRCRDFENUNFNjc2
MDBBRjdBMEIgLyogV2FzbVBsYW4uaCBpbiBIZWFkZXJzICovLAorCQkJCUUzQTA1MzFDMjEzNDJC
NjgwMDIyRUMxNCAvKiBXYXNtU2VjdGlvblBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTNG
NDBFODUxRDU4Rjk3NzAwOTlBMUI2IC8qIFdhc21TZWN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQUQ3NDM4QzAxRTA0NTdBNDAwRkQwQzJBIC8qIFdhc21TaWduYXR1cmUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUUzQTA1MzFBMjEzNDJCNjgwMDIyRUMxNCAvKiBXYXNtU3RyZWFtaW5nUGFyc2Vy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDVDMzZFNjFGNjlFQzkxMDAwQkNBQUYgLyogV2FzbVRh
YmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MjUwRDJEMjFFOERBMDVBMDAyOUE5MzIgLyogV2Fz
bVRodW5rcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTNFOUUwQUYxRUFFQzQ1NzAwRkVFMjUxIC8q
IFdhc21UaWVyVXBDb3VudC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50
eHQKaW5kZXggODk3Njk4YzZlMDU5YWUxZDI2MjEzMWFjNTIwNDAwZTMxNzhlZGNjNS4uMDRkNDhl
ODViNTBmYjgzZmIxMjUwNWZlZTE0YTg1MzU5Y2MxZTMwOSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3Vy
Y2VzLnR4dApAQCAtOTkyLDcgKzk5Miw5IEBAIHdhc20vV2FzbU9NR1BsYW4uY3BwCiB3YXNtL1dh
c21PcGNvZGVPcmlnaW4uY3BwCiB3YXNtL1dhc21QYWdlQ291bnQuY3BwCiB3YXNtL1dhc21QbGFu
LmNwcAord2FzbS9XYXNtU2VjdGlvblBhcnNlci5jcHAKIHdhc20vV2FzbVNpZ25hdHVyZS5jcHAK
K3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAKIHdhc20vV2FzbVRhYmxlLmNwcAogd2FzbS9X
YXNtVGFibGUuaAogd2FzbS9XYXNtVGh1bmtzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rv
b2xzL0pTRG9sbGFyVk0uY3BwCmluZGV4IGViNTdjNzg0Yzk4MTgwNDYyZDRhOGU0M2M4NmI1MGJh
YWFlODQ5M2IuLmVmMjU1NzI0YmM2YTExMjAwMTZiN2YyMmY5NjlkYmZmZDljYWUyM2YgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAKQEAgLTUxLDYgKzUxLDEx
IEBACiAjaW5jbHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmlu
dFN0cmVhbS5oPgogCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorI2luY2x1ZGUgIkpTV2ViQXNz
ZW1ibHlIZWxwZXJzLmgiCisjaW5jbHVkZSAiV2FzbVN0cmVhbWluZ1BhcnNlci5oIgorI2VuZGlm
CisKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCkBAIC0xMDkz
LDYgKzEwOTgsODAgQEAgdm9pZCBFbGVtZW50OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFJvb3Qq
IHJvb3QpCiAgICAgbV9yb290LT5zZXRFbGVtZW50KHRoaXMpOwogfQogCisjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bldhc21TdHJlYW1pbmdQYXJzZXJBZGRCeXRlcyhFeGVjU3RhdGUqKTsKK3N0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uV2FzbVN0cmVhbWluZ1BhcnNlckZpbmFsaXpl
KEV4ZWNTdGF0ZSopOworCitjbGFzcyBXYXNtU3RyZWFtaW5nUGFyc2VyIDogcHVibGljIEpTRGVz
dHJ1Y3RpYmxlT2JqZWN0IHsKK3B1YmxpYzoKKyAgICBXYXNtU3RyZWFtaW5nUGFyc2VyKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQor
ICAgICAgICAsIG1faW5mbyhXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbjo6Y3JlYXRlKCkpCisgICAg
ICAgICwgbV9zdHJlYW1pbmdQYXJzZXIobV9pbmZvLmdldCgpKQorICAgIHsKKyAgICB9CisKKyAg
ICB1c2luZyBCYXNlID0gSlNEZXN0cnVjdGlibGVPYmplY3Q7CisKKyAgICBzdGF0aWMgV2FzbVN0
cmVhbWluZ1BhcnNlciogY3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKKyAgICB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY3JlYXRlU3RydWN0dXJl
KHZtLCBnbG9iYWxPYmplY3QsIGpzTnVsbCgpKTsKKyAgICAgICAgV2FzbVN0cmVhbWluZ1BhcnNl
ciogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2FzbVN0cmVhbWluZ1BhcnNl
cj4odm0uaGVhcCwgc2l6ZW9mKFdhc21TdHJlYW1pbmdQYXJzZXIpKSkgV2FzbVN0cmVhbWluZ1Bh
cnNlcih2bSwgc3RydWN0dXJlKTsKKyAgICAgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAgV2FzbTo6U3RyZWFtaW5nUGFyc2VyJiBz
dHJlYW1pbmdQYXJzZXIoKSB7IHJldHVybiBtX3N0cmVhbWluZ1BhcnNlcjsgfQorCisgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0pCisgICAgeworICAgICAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbih2bSk7CisKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRoaXMt
Pmdsb2JhbE9iamVjdCh2bSk7CisgICAgICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCBn
bG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiYWRkQnl0ZXMiKSwgMCwg
ZnVuY3Rpb25XYXNtU3RyZWFtaW5nUGFyc2VyQWRkQnl0ZXMsIE5vSW50cmluc2ljLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CisgICAgICAgIHB1
dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnZtLCAiZmluYWxpemUiKSwgMCwgZnVuY3Rpb25XYXNtU3RyZWFtaW5nUGFyc2VyRmlu
YWxpemUsIE5vSW50cmluc2ljLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtKSk7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworCisgICAgUmVmPFdh
c206Ok1vZHVsZUluZm9ybWF0aW9uPiBtX2luZm87CisgICAgV2FzbTo6U3RyZWFtaW5nUGFyc2Vy
IG1fc3RyZWFtaW5nUGFyc2VyOworfTsKKworY29uc3QgQ2xhc3NJbmZvIFdhc21TdHJlYW1pbmdQ
YXJzZXI6OnNfaW5mbyA9IHsgIldhc21TdHJlYW1pbmdQYXJzZXIiLCAmQmFzZTo6c19pbmZvLCBu
dWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFdhc21TdHJlYW1pbmdQYXJzZXIp
IH07CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25XYXNtU3RyZWFtaW5n
UGFyc2VyQWRkQnl0ZXMoRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZXhlYy0+dm0oKSk7Cisg
ICAgYXV0byogdGhpc09iamVjdCA9IGpzRHluYW1pY0Nhc3Q8V2FzbVN0cmVhbWluZ1BhcnNlcio+
KHZtLCBleGVjLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCF0aGlzT2JqZWN0KSB7CisgICAgICAg
IHNjb3BlLnJlbGVhc2UoKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4oZmFsc2UpKTsKKyAgICB9CisgICAgYXV0byBkYXRhID0gZ2V0V2FzbUJ1ZmZlckZyb21WYWx1
ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgc2NvcGUucmVsZWFzZSgpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50MzJfdD4odGhpc09iamVjdC0+
c3RyZWFtaW5nUGFyc2VyKCkuYWRkQnl0ZXMoYml0d2lzZV9jYXN0PGNvbnN0IHVpbnQ4X3QqPihk
YXRhLmZpcnN0KSwgZGF0YS5zZWNvbmQpKSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uV2FzbVN0cmVhbWluZ1BhcnNlckZpbmFsaXplKEV4ZWNTdGF0ZSogZXhl
YykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBq
c0R5bmFtaWNDYXN0PFdhc21TdHJlYW1pbmdQYXJzZXIqPih2bSwgZXhlYy0+dGhpc1ZhbHVlKCkp
OworICAgIGlmICghdGhpc09iamVjdCkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c0Jvb2xlYW4oZmFsc2UpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHN0
YXRpY19jYXN0PGludDMyX3Q+KHRoaXNPYmplY3QtPnN0cmVhbWluZ1BhcnNlcigpLmZpbmFsaXpl
KCkpKSk7Cit9CisKKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZQogCiBuYW1lc3BhY2UgSlNDIHsK
QEAgLTE2NDAsNiArMTcxOSwxNSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvbkNyZWF0ZURPTUpJVEdldHRlckJhc2VKU09iamVjdChFeGVjUwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAorI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
K3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlV2FzbVN0
cmVhbWluZ1BhcnNlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShXYXNtU3RyZWFtaW5nUGFyc2VyOjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSkpOworfQorI2VuZGlmCisKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uU2V0SW1wdXJlR2V0dGVyRGVsZWdhdGUoRXhlY1N0YXRlKiBleGVjKQogewogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CkBAIC0yMDQwLDYgKzIxMjgsOSBAQCB2b2lkIEpTRG9sbGFy
Vk06OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICBhZGRGdW5jdGlvbih2bSwgImNyZWF0ZURP
TUpJVENoZWNrU3ViQ2xhc3NPYmplY3QiLCBmdW5jdGlvbkNyZWF0ZURPTUpJVENoZWNrU3ViQ2xh
c3NPYmplY3QsIDApOwogICAgIGFkZEZ1bmN0aW9uKHZtLCAiY3JlYXRlRE9NSklUR2V0dGVyQmFz
ZUpTT2JqZWN0IiwgZnVuY3Rpb25DcmVhdGVET01KSVRHZXR0ZXJCYXNlSlNPYmplY3QsIDApOwog
ICAgIGFkZEZ1bmN0aW9uKHZtLCAiY3JlYXRlQnVpbHRpbiIsIGZ1bmN0aW9uQ3JlYXRlQnVpbHRp
biwgMik7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIGFkZEZ1bmN0aW9uKHZtLCAiY3Jl
YXRlV2FzbVN0cmVhbWluZ1BhcnNlciIsIGZ1bmN0aW9uQ3JlYXRlV2FzbVN0cmVhbWluZ1BhcnNl
ciwgMCk7CisjZW5kaWYKICAgICBhZGRGdW5jdGlvbih2bSwgImdldFByaXZhdGVQcm9wZXJ0eSIs
IGZ1bmN0aW9uR2V0UHJpdmF0ZVByb3BlcnR5LCAyKTsKICAgICBhZGRGdW5jdGlvbih2bSwgInNl
dEltcHVyZUdldHRlckRlbGVnYXRlIiwgZnVuY3Rpb25TZXRJbXB1cmVHZXR0ZXJEZWxlZ2F0ZSwg
Mik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFu
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAppbmRleCBm
NjcyNjg2ZDNmOTlhMGQwZDJlOWMzMjFmMjdiYzBhMWNiZjViMmRkLi40M2M4ZjU2MmFmYTFjMzYz
M2E3ZTZjNjFmNDA5MjJlYzBiZTk3MjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUJCUVBsYW4uY3BwCkBAIC01OSwxMyArNTksMTUgQEAgQkJRUGxhbjo6QkJRUGxhbihDb250
ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGluZm8sIEFzeW5jV29yayB3b3Jr
LAogfQogCiBCQlFQbGFuOjpCQlFQbGFuKENvbnRleHQqIGNvbnRleHQsIFZlY3Rvcjx1aW50OF90
PiYmIHNvdXJjZSwgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFzaywgQ3JlYXRl
RW1iZWRkZXJXcmFwcGVyJiYgY3JlYXRlRW1iZWRkZXJXcmFwcGVyLCBUaHJvd1dhc21FeGNlcHRp
b24gdGhyb3dXYXNtRXhjZXB0aW9uKQotICAgIDogQkJRUGxhbihjb250ZXh0LCBhZG9wdFJlZigq
bmV3IE1vZHVsZUluZm9ybWF0aW9uKFdURk1vdmUoc291cmNlKSkpLCB3b3JrLCBXVEZNb3ZlKHRh
c2spLCBXVEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlvbikK
KyAgICA6IEJhc2UoY29udGV4dCwgTW9kdWxlSW5mb3JtYXRpb246OmNyZWF0ZSgpLCBXVEZNb3Zl
KHRhc2spLCBXVEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlv
bikKKyAgICAsIG1fc291cmNlKFdURk1vdmUoc291cmNlKSkKKyAgICAsIG1fc3RhdGUoU3RhdGU6
OkluaXRpYWwpCisgICAgLCBtX2FzeW5jV29yayh3b3JrKQogewotICAgIG1fc3RhdGUgPSBTdGF0
ZTo6SW5pdGlhbDsKIH0KIAotQkJRUGxhbjo6QkJRUGxhbihDb250ZXh0KiBjb250ZXh0LCBjb25z
dCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgsIEFzeW5jV29yayB3b3JrLCBD
b21wbGV0aW9uVGFzayYmIHRhc2spCi0gICAgOiBCYXNlKGNvbnRleHQsIHNvdXJjZSwgc291cmNl
TGVuZ3RoLCBXVEZNb3ZlKHRhc2spKQorQkJRUGxhbjo6QkJRUGxhbihDb250ZXh0KiBjb250ZXh0
LCBBc3luY1dvcmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0YXNrKQorICAgIDogQmFzZShjb250
ZXh0LCBXVEZNb3ZlKHRhc2spKQogICAgICwgbV9zdGF0ZShTdGF0ZTo6SW5pdGlhbCkKICAgICAs
IG1fYXN5bmNXb3JrKHdvcmspCiB7CkBAIC05MCw3ICs5Miw3IEBAIHZvaWQgQkJRUGxhbjo6bW92
ZVRvU3RhdGUoU3RhdGUgc3RhdGUpCiAgICAgbV9zdGF0ZSA9IHN0YXRlOwogfQogCi1ib29sIEJC
UVBsYW46OnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKQorYm9vbCBCQlFQbGFuOjpwYXJzZUFuZFZh
bGlkYXRlTW9kdWxlKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IHNvdXJjZUxlbmd0aCkK
IHsKICAgICBpZiAobV9zdGF0ZSAhPSBTdGF0ZTo6SW5pdGlhbCkKICAgICAgICAgcmV0dXJuIHRy
dWU7CkBAIC0xMDEsNyArMTAzLDcgQEAgYm9vbCBCQlFQbGFuOjpwYXJzZUFuZFZhbGlkYXRlTW9k
dWxlKCkKICAgICAgICAgc3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CiAKICAgICB7
Ci0gICAgICAgIE1vZHVsZVBhcnNlciBtb2R1bGVQYXJzZXIobV9zb3VyY2UsIG1fc291cmNlTGVu
Z3RoLCBtX21vZHVsZUluZm9ybWF0aW9uKTsKKyAgICAgICAgTW9kdWxlUGFyc2VyIG1vZHVsZVBh
cnNlcihzb3VyY2UsIHNvdXJjZUxlbmd0aCwgbV9tb2R1bGVJbmZvcm1hdGlvbik7CiAgICAgICAg
IGF1dG8gcGFyc2VSZXN1bHQgPSBtb2R1bGVQYXJzZXIucGFyc2UoKTsKICAgICAgICAgaWYgKCFw
YXJzZVJlc3VsdCkgewogICAgICAgICAgICAgQmFzZTo6ZmFpbChob2xkTG9jayhtX2xvY2spLCBX
VEZNb3ZlKHBhcnNlUmVzdWx0LmVycm9yKCkpKTsKQEAgLTEwOSwyMCArMTExLDIxIEBAIGJvb2wg
QkJRUGxhbjo6cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpCiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBjb25zdCBhdXRvJiBmdW5jdGlvbkxvY2F0aW9ucyA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1
bmN0aW9uTG9jYXRpb25JbkJpbmFyeTsKLSAgICBmb3IgKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgg
PSAwOyBmdW5jdGlvbkluZGV4IDwgZnVuY3Rpb25Mb2NhdGlvbnMuc2l6ZSgpOyArK2Z1bmN0aW9u
SW5kZXgpIHsKLSAgICAgICAgZGF0YUxvZ0xuSWYoV2FzbUJCUVBsYW5JbnRlcm5hbDo6dmVyYm9z
ZSwgIlByb2Nlc3NpbmcgZnVuY3Rpb24gc3RhcnRpbmcgYXQ6ICIsIGZ1bmN0aW9uTG9jYXRpb25z
W2Z1bmN0aW9uSW5kZXhdLnN0YXJ0LCAiIGFuZCBlbmRpbmcgYXQ6ICIsIGZ1bmN0aW9uTG9jYXRp
b25zW2Z1bmN0aW9uSW5kZXhdLmVuZCk7Ci0gICAgICAgIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9u
U3RhcnQgPSBtX3NvdXJjZSArIGZ1bmN0aW9uTG9jYXRpb25zW2Z1bmN0aW9uSW5kZXhdLnN0YXJ0
OwotICAgICAgICBzaXplX3QgZnVuY3Rpb25MZW5ndGggPSBmdW5jdGlvbkxvY2F0aW9uc1tmdW5j
dGlvbkluZGV4XS5lbmQgLSBmdW5jdGlvbkxvY2F0aW9uc1tmdW5jdGlvbkluZGV4XS5zdGFydDsK
LSAgICAgICAgQVNTRVJUKGZ1bmN0aW9uTGVuZ3RoIDw9IG1fc291cmNlTGVuZ3RoKTsKKyAgICBj
b25zdCBhdXRvJiBmdW5jdGlvbnMgPSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbnM7Cisg
ICAgZm9yICh1bnNpZ25lZCBmdW5jdGlvbkluZGV4ID0gMDsgZnVuY3Rpb25JbmRleCA8IGZ1bmN0
aW9ucy5zaXplKCk7ICsrZnVuY3Rpb25JbmRleCkgeworICAgICAgICBjb25zdCBhdXRvJiBmdW5j
dGlvbiA9IGZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XTsKKyAgICAgICAgZGF0YUxvZ0xuSWYoV2Fz
bUJCUVBsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIlByb2Nlc3NpbmcgZnVuY3Rpb24gc3RhcnRpbmcg
YXQ6ICIsIGZ1bmN0aW9uLnN0YXJ0LCAiIGFuZCBlbmRpbmcgYXQ6ICIsIGZ1bmN0aW9uLmVuZCk7
CisgICAgICAgIHNpemVfdCBmdW5jdGlvbkxlbmd0aCA9IGZ1bmN0aW9uLmVuZCAtIGZ1bmN0aW9u
LnN0YXJ0OworICAgICAgICBBU1NFUlQoZnVuY3Rpb25MZW5ndGggPD0gc291cmNlTGVuZ3RoKTsK
KyAgICAgICAgQVNTRVJUKGZ1bmN0aW9uTGVuZ3RoID09IGZ1bmN0aW9uLmRhdGEuc2l6ZSgpKTsK
ICAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0
aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tmdW5jdGlvbkluZGV4XTsKICAg
ICAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6
Z2V0KHNpZ25hdHVyZUluZGV4KTsKIAotICAgICAgICBhdXRvIHZhbGlkYXRpb25SZXN1bHQgPSB2
YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUs
IG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCkpOworICAgICAgICBhdXRvIHZhbGlkYXRpb25SZXN1
bHQgPSB2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRh
LnNpemUoKSwgc2lnbmF0dXJlLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpKTsKICAgICAgICAg
aWYgKCF2YWxpZGF0aW9uUmVzdWx0KSB7CiAgICAgICAgICAgICBpZiAoV2FzbUJCUVBsYW5JbnRl
cm5hbDo6dmVyYm9zZSkgewogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBmdW5jdGlvbkxlbmd0aDsgKytpKQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKFJhd1Bv
aW50ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZnVuY3Rpb25TdGFydFtpXSkpLCAiLCAiKTsK
KyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KGZ1bmN0aW9uLmRhdGFbaV0pKSwgIiwgIik7CiAgICAgICAgICAgICAgICAgZGF0YUxv
Z0xuKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBCYXNlOjpmYWlsKGhvbGRMb2NrKG1f
bG9jayksIG1ha2VTdHJpbmcodmFsaWRhdGlvblJlc3VsdC5lcnJvcigpLCAiLCBpbiBmdW5jdGlv
biBhdCBpbmRleCAiLCBTdHJpbmc6Om51bWJlcihmdW5jdGlvbkluZGV4KSkpOyAvLyBGSVhNRSBt
YWtlIHRoaXMgYW4gRXhwZWN0ZWQuCkBAIC0xNTYsMTggKzE1OSwxOCBAQCB2b2lkIEJCUVBsYW46
OnByZXBhcmUoKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9OwogCi0gICAgY29uc3QgYXV0
byYgZnVuY3Rpb25Mb2NhdGlvbnMgPSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbkxvY2F0
aW9uSW5CaW5hcnk7CisgICAgY29uc3QgYXV0byYgZnVuY3Rpb25zID0gbV9tb2R1bGVJbmZvcm1h
dGlvbi0+ZnVuY3Rpb25zOwogICAgIGlmICghdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fd2FzbVRvV2Fz
bUV4aXRTdHVicywgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJ
bmRpY2VzLnNpemUoKSwgIiBXZWJBc3NlbWJseSB0byBKYXZhU2NyaXB0IHN0dWJzIikKLSAgICAg
ICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5j
dGlvbkxvY2F0aW9ucy5zaXplKCksICIgdW5saW5rZWQgV2ViQXNzZW1ibHkgdG8gV2ViQXNzZW1i
bHkgY2FsbHMiKQotICAgICAgICB8fCAhdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fd2FzbUludGVybmFs
RnVuY3Rpb25zLCBmdW5jdGlvbkxvY2F0aW9ucy5zaXplKCksICIgV2ViQXNzZW1ibHkgZnVuY3Rp
b25zIikKLSAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX2NvbXBpbGF0aW9uQ29udGV4
dHMsIGZ1bmN0aW9uTG9jYXRpb25zLnNpemUoKSwgIiBjb21waWxhdGlvbiBjb250ZXh0cyIpCi0g
ICAgICAgIHx8ICF0cnlSZXNlcnZlQ2FwYWNpdHkobV90aWVyVXBDb3VudHMsIGZ1bmN0aW9uTG9j
YXRpb25zLnNpemUoKSwgIiB0aWVyLXVwIGNvdW50cyIpKQorICAgICAgICB8fCAhdHJ5UmVzZXJ2
ZUNhcGFjaXR5KG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9ucy5zaXplKCksICIg
dW5saW5rZWQgV2ViQXNzZW1ibHkgdG8gV2ViQXNzZW1ibHkgY2FsbHMiKQorICAgICAgICB8fCAh
dHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fd2FzbUludGVybmFsRnVuY3Rpb25zLCBmdW5jdGlvbnMuc2l6
ZSgpLCAiIFdlYkFzc2VtYmx5IGZ1bmN0aW9ucyIpCisgICAgICAgIHx8ICF0cnlSZXNlcnZlQ2Fw
YWNpdHkobV9jb21waWxhdGlvbkNvbnRleHRzLCBmdW5jdGlvbnMuc2l6ZSgpLCAiIGNvbXBpbGF0
aW9uIGNvbnRleHRzIikKKyAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX3RpZXJVcENv
dW50cywgZnVuY3Rpb25zLnNpemUoKSwgIiB0aWVyLXVwIGNvdW50cyIpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLnJlc2l6ZShmdW5jdGlvbkxvY2F0
aW9ucy5zaXplKCkpOwotICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zLnJlc2l6ZShmdW5jdGlv
bkxvY2F0aW9ucy5zaXplKCkpOwotICAgIG1fY29tcGlsYXRpb25Db250ZXh0cy5yZXNpemUoZnVu
Y3Rpb25Mb2NhdGlvbnMuc2l6ZSgpKTsKLSAgICBtX3RpZXJVcENvdW50cy5yZXNpemUoZnVuY3Rp
b25Mb2NhdGlvbnMuc2l6ZSgpKTsKKyAgICBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLnJlc2l6
ZShmdW5jdGlvbnMuc2l6ZSgpKTsKKyAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5yZXNpemUo
ZnVuY3Rpb25zLnNpemUoKSk7CisgICAgbV9jb21waWxhdGlvbkNvbnRleHRzLnJlc2l6ZShmdW5j
dGlvbnMuc2l6ZSgpKTsKKyAgICBtX3RpZXJVcENvdW50cy5yZXNpemUoZnVuY3Rpb25zLnNpemUo
KSk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGltcG9ydEluZGV4ID0gMDsgaW1wb3J0SW5kZXggPCBt
X21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRzLnNpemUoKTsgKytpbXBvcnRJbmRleCkgewogICAg
ICAgICBJbXBvcnQqIGltcG9ydCA9ICZtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRzW2ltcG9y
dEluZGV4XTsKQEAgLTI0MSw3ICsyNDQsNyBAQCB2b2lkIEJCUVBsYW46OmNvbXBpbGVGdW5jdGlv
bnMoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogICAgIFRocmVhZENvdW50SG9sZGVyIGhvbGRl
cigqdGhpcyk7CiAKICAgICBzaXplX3QgYnl0ZXNDb21waWxlZCA9IDA7Ci0gICAgY29uc3QgYXV0
byYgZnVuY3Rpb25Mb2NhdGlvbnMgPSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbkxvY2F0
aW9uSW5CaW5hcnk7CisgICAgY29uc3QgYXV0byYgZnVuY3Rpb25zID0gbV9tb2R1bGVJbmZvcm1h
dGlvbi0+ZnVuY3Rpb25zOwogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIGlmIChlZmZvcnQg
PT0gUGFydGlhbCAmJiBieXRlc0NvbXBpbGVkID49IE9wdGlvbnM6OndlYkFzc2VtYmx5UGFydGlh
bENvbXBpbGVMaW1pdCgpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjQ5LDcgKzI1Miw3IEBA
IHZvaWQgQkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQp
CiAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXg7CiAgICAgICAgIHsKICAgICAgICAgICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKLSAgICAgICAgICAgIGlmIChtX2N1cnJl
bnRJbmRleCA+PSBmdW5jdGlvbkxvY2F0aW9ucy5zaXplKCkpIHsKKyAgICAgICAgICAgIGlmICht
X2N1cnJlbnRJbmRleCA+PSBmdW5jdGlvbnMuc2l6ZSgpKSB7CiAgICAgICAgICAgICAgICAgaWYg
KGhhc1dvcmsoKSkKICAgICAgICAgICAgICAgICAgICAgbW92ZVRvU3RhdGUoU3RhdGU6OkNvbXBp
bGVkKTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0yNTgsMTggKzI2MSwxNiBAQCB2b2lk
IEJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbnMoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogICAg
ICAgICAgICAgKyttX2N1cnJlbnRJbmRleDsKICAgICAgICAgfQogCi0gICAgICAgIGNvbnN0IHVp
bnQ4X3QqIGZ1bmN0aW9uU3RhcnQgPSBtX3NvdXJjZSArIGZ1bmN0aW9uTG9jYXRpb25zW2Z1bmN0
aW9uSW5kZXhdLnN0YXJ0OwotICAgICAgICBzaXplX3QgZnVuY3Rpb25MZW5ndGggPSBmdW5jdGlv
bkxvY2F0aW9uc1tmdW5jdGlvbkluZGV4XS5lbmQgLSBmdW5jdGlvbkxvY2F0aW9uc1tmdW5jdGlv
bkluZGV4XS5zdGFydDsKLSAgICAgICAgQVNTRVJUKGZ1bmN0aW9uTGVuZ3RoIDw9IG1fc291cmNl
TGVuZ3RoKTsKKyAgICAgICAgY29uc3QgYXV0byYgZnVuY3Rpb24gPSBmdW5jdGlvbnNbZnVuY3Rp
b25JbmRleF07CiAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1
bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNbZnVuY3Rpb25J
bmRleF07CiAgICAgICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5m
b3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CiAgICAgICAgIHVuc2lnbmVkIGZ1bmN0aW9u
SW5kZXhTcGFjZSA9IG1fd2FzbVRvV2FzbUV4aXRTdHVicy5zaXplKCkgKyBmdW5jdGlvbkluZGV4
OwogICAgICAgICBBU1NFUlRfVU5VU0VEKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZv
cm1hdGlvbi0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5k
ZXhTcGFjZSkgPT0gc2lnbmF0dXJlSW5kZXgpOwotICAgICAgICBBU1NFUlQodmFsaWRhdGVGdW5j
dGlvbihmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBtX21vZHVsZUlu
Zm9ybWF0aW9uLmdldCgpKSk7CisgICAgICAgIEFTU0VSVCh2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0
aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRhLnNpemUoKSwgc2lnbmF0dXJlLCBtX21vZHVs
ZUluZm9ybWF0aW9uLmdldCgpKSk7CiAKICAgICAgICAgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxs
c1tmdW5jdGlvbkluZGV4XSA9IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPigpOwogICAg
ICAgICBUaWVyVXBDb3VudCogdGllclVwID0gT3B0aW9uczo6dXNlQkJRVGllclVwQ2hlY2tzKCkg
PyAmbV90aWVyVXBDb3VudHNbZnVuY3Rpb25JbmRleF0gOiBudWxscHRyOwotICAgICAgICBhdXRv
IHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZShtX2NvbXBpbGF0aW9uQ29u
dGV4dHNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWdu
YXR1cmUsIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG1fbW9kdWxl
SW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBmdW5j
dGlvbkluZGV4LCB0aWVyVXAsIG1fdGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICAgICAgYXV0byBw
YXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUobV9jb21waWxhdGlvbkNvbnRl
eHRzW2Z1bmN0aW9uSW5kZXhdLCBmdW5jdGlvbi5kYXRhLmRhdGEoKSwgZnVuY3Rpb24uZGF0YS5z
aXplKCksIHNpZ25hdHVyZSwgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4
XSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6OkJC
UU1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwgbV90aHJvd1dhc21FeGNlcHRpb24pOwogCiAg
ICAgICAgIGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxlUmVzdWx0KSkgewogICAgICAgICAg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwpAQCAtMjc3LDcgKzI3OCw3IEBAIHZv
aWQgQkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAg
ICAgICAgICAgICAgICAgLy8gTXVsdGlwbGUgY29tcGlsZXMgY291bGQgZmFpbCBzaW11bHRhbmVv
dXNseS4gV2UgYXJiaXRyYXJpbHkgY2hvb3NlIHRoZSBmaXJzdC4KICAgICAgICAgICAgICAgICBm
YWlsKGxvY2tlciwgbWFrZVN0cmluZyhwYXJzZUFuZENvbXBpbGVSZXN1bHQuZXJyb3IoKSwgIiwg
aW4gZnVuY3Rpb24gYXQgaW5kZXggIiwgU3RyaW5nOjpudW1iZXIoZnVuY3Rpb25JbmRleCkpKTsg
Ly8gRklYTUUgbWFrZSB0aGlzIGFuIEV4cGVjdGVkLgogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgbV9jdXJyZW50SW5kZXggPSBmdW5jdGlvbkxvY2F0aW9ucy5zaXplKCk7CisgICAgICAgICAg
ICBtX2N1cnJlbnRJbmRleCA9IGZ1bmN0aW9ucy5zaXplKCk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KIApAQCAtMjg5LDE3ICsyOTAsMTcgQEAgdm9pZCBCQlFQbGFuOjpjb21waWxl
RnVuY3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAgICAgICAgICAgIEFTU0VSVF9V
TlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CiAgICAgICAgIH0KIAotICAgICAgICBi
eXRlc0NvbXBpbGVkICs9IGZ1bmN0aW9uTGVuZ3RoOworICAgICAgICBieXRlc0NvbXBpbGVkICs9
IGZ1bmN0aW9uLmRhdGEuc2l6ZSgpOwogICAgIH0KIH0KIAogdm9pZCBCQlFQbGFuOjpjb21wbGV0
ZShjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyKQogewotICAgIEFTU0VSVChtX3N0YXRlICE9
IFN0YXRlOjpDb21waWxlZCB8fCBtX2N1cnJlbnRJbmRleCA+PSBtX21vZHVsZUluZm9ybWF0aW9u
LT5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpKTsKKyAgICBBU1NFUlQobV9zdGF0ZSAh
PSBTdGF0ZTo6Q29tcGlsZWQgfHwgbV9jdXJyZW50SW5kZXggPj0gbV9tb2R1bGVJbmZvcm1hdGlv
bi0+ZnVuY3Rpb25zLnNpemUoKSk7CiAgICAgZGF0YUxvZ0xuSWYoV2FzbUJCUVBsYW5JbnRlcm5h
bDo6dmVyYm9zZSwgIlN0YXJ0aW5nIENvbXBsZXRpb24iKTsKIAogICAgIGlmICghZmFpbGVkKCkg
JiYgbV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGlsZWQpIHsKLSAgICAgICAgZm9yICh1aW50MzJfdCBm
dW5jdGlvbkluZGV4ID0gMDsgZnVuY3Rpb25JbmRleCA8IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1
bmN0aW9uTG9jYXRpb25JbkJpbmFyeS5zaXplKCk7IGZ1bmN0aW9uSW5kZXgrKykgeworICAgICAg
ICBmb3IgKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXggPSAwOyBmdW5jdGlvbkluZGV4IDwgbV9tb2R1
bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25zLnNpemUoKTsgZnVuY3Rpb25JbmRleCsrKSB7CiAgICAg
ICAgICAgICBDb21waWxhdGlvbkNvbnRleHQmIGNvbnRleHQgPSBtX2NvbXBpbGF0aW9uQ29udGV4
dHNbZnVuY3Rpb25JbmRleF07CiAgICAgICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJ
bmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRp
Y2VzW2Z1bmN0aW9uSW5kZXhdOwogICAgICAgICAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1
cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKQEAgLTM1MSw3
ICszNTIsNyBAQCB2b2lkIEJCUVBsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQog
ewogICAgIHN3aXRjaCAobV9zdGF0ZSkgewogICAgIGNhc2UgU3RhdGU6OkluaXRpYWw6Ci0gICAg
ICAgIHBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKTsKKyAgICAgICAgcGFyc2VBbmRWYWxpZGF0ZU1v
ZHVsZShtX3NvdXJjZS5kYXRhKCksIG1fc291cmNlLnNpemUoKSk7CiAgICAgICAgIGlmICghaGFz
V29yaygpKSB7CiAgICAgICAgICAgICBBU1NFUlQoaXNDb21wbGV0ZSgpKTsKICAgICAgICAgICAg
IHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQ
bGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oCmluZGV4IGQ4
ODE0NWQ3ZGRkYmQ2YjE5MTA1Nzc4MTdjZTdjYjhkYjQxMjFkMWUuLjk0MWFjNzVmNzBlNmY5MTFi
OWZiYjNkZGIxMzc4Y2NmOTY5OTQxYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CQlFQbGFuLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUJCUVBsYW4uaApAQCAtNTIsMTEgKzUyLDE0IEBAIGNsYXNzIEJCUVBsYW4gZmluYWwgOiBwdWJs
aWMgUGxhbiB7CiAgICAgLy8gTm90ZTogQ29tcGxldGlvblRhc2sgc2hvdWxkIG5vdCBob2xkIGEg
cmVmZXJlbmNlIHRvIHRoZSBQbGFuIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGEgcmVmZXJlbmNl
IGN5Y2xlLgogICAgIEJCUVBsYW4oQ29udGV4dCosIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4sIEFz
eW5jV29yaywgQ29tcGxldGlvblRhc2smJiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93
V2FzbUV4Y2VwdGlvbik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQkJRUGxhbihDb250ZXh0Kiwg
VmVjdG9yPHVpbnQ4X3Q+JiYsIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJiwgQ3JlYXRlRW1i
ZWRkZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4Y2VwdGlvbik7Ci0gICAgLy8gTm90ZTogVGhpcyBj
b25zdHJ1Y3RvciBzaG91bGQgb25seSBiZSB1c2VkIGlmIHlvdSBhcmUgbm90IGFjdHVhbGx5IGJ1
aWxkaW5nIGEgbW9kdWxlIGUuZy4gdmFsaWRhdGlvbi9mdW5jdGlvbiB0ZXN0cwotICAgIC8vIEZJ
WE1FOiBXaGVuIHdlIGdldCByaWQgb2YgZnVuY3Rpb24gdGVzdHMgd2Ugc2hvdWxkIHJlbW92ZSBB
c3luY1dvcmsgZnJvbSB0aGlzIGNvbnN0cnVjdG9yLgotICAgIEpTX0VYUE9SVF9QUklWQVRFIEJC
UVBsYW4oQ29udGV4dCosIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIEFzeW5jV29yaywgQ29tcGxl
dGlvblRhc2smJik7CisgICAgQkJRUGxhbihDb250ZXh0KiwgQXN5bmNXb3JrLCBDb21wbGV0aW9u
VGFzayYmKTsKIAotICAgIGJvb2wgcGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpOworCisgICAgYm9v
bCBwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBwYXJzZUFu
ZFZhbGlkYXRlTW9kdWxlKG1fc291cmNlLmRhdGEoKSwgbV9zb3VyY2Uuc2l6ZSgpKTsKKyAgICB9
CisgICAgYm9vbCBwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3Qp
OwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmVwYXJlKCk7CiAgICAgdm9pZCBjb21w
aWxlRnVuY3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0KTsKQEAgLTEzNiw2ICsxMzksNyBAQCBjbGFz
cyBCQlFQbGFuIGZpbmFsIDogcHVibGljIFBsYW4gewogCiAgICAgY29uc3QgY2hhciogc3RhdGVT
dHJpbmcoU3RhdGUpOwogICAgIAorICAgIFZlY3Rvcjx1aW50OF90PiBtX3NvdXJjZTsKICAgICBC
YWc8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7CiAgICAgVmVjdG9yPE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiBtX3dhc21Ub1dhc21FeGl0U3R1YnM7CiAgICAg
VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPj4gbV93YXNtSW50ZXJuYWxG
dW5jdGlvbnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9y
bWF0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKaW5kZXggMjc4
NGU5MGFmMzg0MWEwMmU1ODczMzMyY2ZmOGJiMDY0ODdlMzNkZS4uZTQzZjRlZDkzNjE2N2ZmMjkz
OGQ4MzdhMGNlMDg4ZDQzZDIwYTRlNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUZvcm1hdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21G
b3JtYXQuaApAQCAtMTQwLDkgKzE0MCwxMCBAQCBzdHJ1Y3QgR2xvYmFsIHsKICAgICB1aW50NjRf
dCBpbml0aWFsQml0c09ySW1wb3J0TnVtYmVyIHsgMCB9OwogfTsKIAotc3RydWN0IEZ1bmN0aW9u
TG9jYXRpb25JbkJpbmFyeSB7CitzdHJ1Y3QgRnVuY3Rpb25EYXRhIHsKICAgICBzaXplX3Qgc3Rh
cnQ7CiAgICAgc2l6ZV90IGVuZDsKKyAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKIH07CiAKIGNs
YXNzIEkzMkluaXRFeHByIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTW9kdWxlSW5mb3JtYXRpb24uY3BwCmluZGV4IGNiOGRiMGUwOTNmOTRjZGEzMTZkZDI0YmFm
MzllNTEyZWRhMjAzMTQuLjhhMjU0YzAwMmZiZTllZjkwY2VmMWFiZGZjNDE2OWMxZTQ2YzUzZGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1h
dGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9y
bWF0aW9uLmNwcApAQCAtMzEsMjEgKzMxLDEwIEBACiAjaW5jbHVkZSAiV2FzbU5hbWVTZWN0aW9u
LmgiCiAjaW5jbHVkZSA8d3RmL1NIQTEuaD4KIAotbmFtZXNwYWNlIHsKLUNTdHJpbmcgc2hhMShj
b25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0KQotewotICAgIFNIQTEgaGFzaDsKLSAgICBoYXNo
LmFkZEJ5dGVzKGlucHV0KTsKLSAgICByZXR1cm4gaGFzaC5jb21wdXRlSGV4RGlnZXN0KCk7Ci19
Ci19Ci0KIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKLU1vZHVsZUluZm9ybWF0
aW9uOjpNb2R1bGVJbmZvcm1hdGlvbihWZWN0b3I8dWludDhfdD4mJiBzb3VyY2VCeXRlcykKLSAg
ICA6IHNvdXJjZShXVEZNb3ZlKHNvdXJjZUJ5dGVzKSkKLSAgICAsIGhhc2goT3B0aW9uczo6dXNl
RWFnZXJXZWJBc3NlbWJseU1vZHVsZUhhc2hpbmcoKSA/IHN0ZDo6bWFrZV9vcHRpb25hbChzaGEx
KHNvdXJjZSkpIDogc3RkOjpudWxsb3B0KQotICAgICwgbmFtZVNlY3Rpb24obmV3IE5hbWVTZWN0
aW9uKGhhc2gpKQorTW9kdWxlSW5mb3JtYXRpb246Ok1vZHVsZUluZm9ybWF0aW9uKCkKKyAgICA6
IG5hbWVTZWN0aW9uKE5hbWVTZWN0aW9uOjpjcmVhdGUoKSkKIHsKIH0KIE1vZHVsZUluZm9ybWF0
aW9uOjp+TW9kdWxlSW5mb3JtYXRpb24oKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgKaW5kZXggMGJhYjU3ZTA3MGQyZWEzMzA2
MmYzNjM2NThhMjQxNWU5YmQ1MWUyZC4uZmI1ZTNhMGNkZWQ0ZTczODAyNDMwM2JlNWUwZjU2N2Fm
NTViYTAyNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVs
ZUluZm9ybWF0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVs
ZUluZm9ybWF0aW9uLmgKQEAgLTM0LDExICszNCwxNCBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBXYXNtIHsKIAogc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uIDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPE1vZHVsZUluZm9ybWF0aW9uPiB7Ci0gICAgTW9kdWxlSW5mb3JtYXRpb24o
KSA9IGRlbGV0ZTsKKyAgICBNb2R1bGVJbmZvcm1hdGlvbigpOwogICAgIE1vZHVsZUluZm9ybWF0
aW9uKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJikgPSBkZWxldGU7CiAgICAgTW9kdWxlSW5mb3Jt
YXRpb24oTW9kdWxlSW5mb3JtYXRpb24mJikgPSBkZWxldGU7CiAKLSAgICBNb2R1bGVJbmZvcm1h
dGlvbihWZWN0b3I8dWludDhfdD4mJiBzb3VyY2VCeXRlcyk7CisgICAgc3RhdGljIFJlZjxNb2R1
bGVJbmZvcm1hdGlvbj4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IE1vZHVsZUluZm9ybWF0aW9uKTsKKyAgICB9CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB+
TW9kdWxlSW5mb3JtYXRpb24oKTsKICAgICAKQEAgLTU4LDggKzYxLDggQEAgc3RydWN0IE1vZHVs
ZUluZm9ybWF0aW9uIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPE1vZHVsZUluZm9ybWF0
aW9uPiB7CiAgICAgdWludDMyX3QgaW1wb3J0RnVuY3Rpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJu
IGltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7IH0KICAgICB1aW50MzJfdCBp
bnRlcm5hbEZ1bmN0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBpbnRlcm5hbEZ1bmN0aW9uU2ln
bmF0dXJlSW5kaWNlcy5zaXplKCk7IH0KIAotICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiBzb3Vy
Y2U7Ci0gICAgY29uc3Qgc3RkOjpvcHRpb25hbDxDU3RyaW5nPiBoYXNoOworICAgIHVpbnQzMl90
IG1lbW9yeUNvdW50KCkgY29uc3QgeyByZXR1cm4gbWVtb3J5ID8gMSA6IDA7IH0KKyAgICB1aW50
MzJfdCB0YWJsZUNvdW50KCkgY29uc3QgeyByZXR1cm4gdGFibGVJbmZvcm1hdGlvbiA/IDEgOiAw
OyB9CiAKICAgICBWZWN0b3I8SW1wb3J0PiBpbXBvcnRzOwogICAgIFZlY3RvcjxTaWduYXR1cmVJ
bmRleD4gaW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzOwpAQCAtNjgsNyArNzEsNyBAQCBz
dHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TW9k
dWxlSW5mb3JtYXRpb24+IHsKIAogICAgIE1lbW9yeUluZm9ybWF0aW9uIG1lbW9yeTsKIAotICAg
IFZlY3RvcjxGdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnk+IGZ1bmN0aW9uTG9jYXRpb25JbkJpbmFy
eTsKKyAgICBWZWN0b3I8RnVuY3Rpb25EYXRhPiBmdW5jdGlvbnM7CiAKICAgICBWZWN0b3I8RXhw
b3J0PiBleHBvcnRzOwogICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IHN0YXJ0RnVuY3Rpb25J
bmRleFNwYWNlOwpAQCAtNzgsNyArODEsNyBAQCBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TW9kdWxlSW5mb3JtYXRpb24+IHsKICAgICBWZWN0
b3I8R2xvYmFsPiBnbG9iYWxzOwogICAgIHVuc2lnbmVkIGZpcnN0SW50ZXJuYWxHbG9iYWwgeyAw
IH07CiAgICAgVmVjdG9yPEN1c3RvbVNlY3Rpb24+IGN1c3RvbVNlY3Rpb25zOwotICAgIFJlZlB0
cjxOYW1lU2VjdGlvbj4gbmFtZVNlY3Rpb247CisgICAgUmVmPE5hbWVTZWN0aW9uPiBuYW1lU2Vj
dGlvbjsKIH07CiAKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Nb2R1bGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1v
ZHVsZVBhcnNlci5jcHAKaW5kZXggZjAzZTY5ODdmNGE1MDI1OTFkZjcxZGM4MTU3ODIwODA5OTYx
MzhiNC4uYThlZDhkMmU2YjE5Yzk1ZjY3MWZmY2JjNTQ3ODNkYTc0YzY1MDgwZiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKQEAgLTMyLDE4
ICszMiwxMSBAQAogI2luY2x1ZGUgIldhc21NZW1vcnlJbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUg
Ildhc21OYW1lU2VjdGlvblBhcnNlci5oIgogI2luY2x1ZGUgIldhc21PcHMuaCIKKyNpbmNsdWRl
ICJXYXNtU2VjdGlvblBhcnNlci5oIgogI2luY2x1ZGUgIldhc21TZWN0aW9ucy5oIgogCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi1BTFdBWVNfSU5MSU5FIEkzMkluaXRFeHBy
IG1ha2VJMzJJbml0RXhwcih1aW50OF90IG9wY29kZSwgdWludDMyX3QgYml0cykKLXsKLSAgICBS
RUxFQVNFX0FTU0VSVChvcGNvZGUgPT0gSTMyQ29uc3QgfHwgb3Bjb2RlID09IEdldEdsb2JhbCk7
Ci0gICAgaWYgKG9wY29kZSA9PSBJMzJDb25zdCkKLSAgICAgICAgcmV0dXJuIEkzMkluaXRFeHBy
Ojpjb25zdFZhbHVlKGJpdHMpOwotICAgIHJldHVybiBJMzJJbml0RXhwcjo6Z2xvYmFsSW1wb3J0
KGJpdHMpOwotfQotCiBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2UoKSAtPiBSZXN1bHQKIHsKICAg
ICBjb25zdCBzaXplX3QgbWluU2l6ZSA9IDg7CkBAIC03MSwxOSArNjQsMTkgQEAgYXV0byBNb2R1
bGVQYXJzZXI6OnBhcnNlKCkgLT4gUmVzdWx0CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlVmFyVUludDMyKHNlY3Rpb25MZW5ndGgpLCAiY2FuJ3QgZ2V0ICIsIHNlY3Rpb24sICIg
c2VjdGlvbidzIGxlbmd0aCIpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHNlY3Rpb25M
ZW5ndGggPiBsZW5ndGgoKSAtIG1fb2Zmc2V0LCBzZWN0aW9uLCAiIHNlY3Rpb24gb2Ygc2l6ZSAi
LCBzZWN0aW9uTGVuZ3RoLCAiIHdvdWxkIG92ZXJmbG93IE1vZHVsZSdzIHNpemUiKTsKIAotICAg
ICAgICBhdXRvIGVuZCA9IG1fb2Zmc2V0ICsgc2VjdGlvbkxlbmd0aDsKKyAgICAgICAgU2VjdGlv
blBhcnNlciBwYXJzZXIoc291cmNlKCkgKyBtX29mZnNldCwgc2VjdGlvbkxlbmd0aCwgbV9vZmZz
ZXQsIG1faW5mby5nZXQoKSk7CiAKICAgICAgICAgc3dpdGNoIChzZWN0aW9uKSB7CiAjZGVmaW5l
IFdBU01fU0VDVElPTl9QQVJTRShOQU1FLCBJRCwgREVTQ1JJUFRJT04pICAgICAgICAgICAgICAg
ICAgIFwKICAgICAgICAgY2FzZSBTZWN0aW9uOjpOQU1FOiB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlM
UyhwYXJzZSAjIyBOQU1FKCkpOyAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQVNNX0ZBSUxf
SUZfSEVMUEVSX0ZBSUxTKHBhcnNlci5wYXJzZSAjIyBOQU1FKCkpOyAgICAgICAgICAgICBcCiAg
ICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKICAgICAgICAgfQogICAgICAgICBGT1JfRUFDSF9LTk9XTl9XQVNNX1NFQ1RJ
T04oV0FTTV9TRUNUSU9OX1BBUlNFKQogI3VuZGVmIFdBU01fU0VDVElPTl9QQVJTRQogCiAgICAg
ICAgIGNhc2UgU2VjdGlvbjo6Q3VzdG9tOiB7Ci0gICAgICAgICAgICBXQVNNX0ZBSUxfSUZfSEVM
UEVSX0ZBSUxTKHBhcnNlQ3VzdG9tKHNlY3Rpb25MZW5ndGgpKTsKKyAgICAgICAgICAgIFdBU01f
RkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VyLnBhcnNlQ3VzdG9tKCkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KIApAQCAtOTMsNTM4ICs4NiwyNCBAQCBhdXRvIE1vZHVsZVBhcnNl
cjo6cGFyc2UoKSAtPiBSZXN1bHQKICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRihlbmQgIT0gbV9vZmZzZXQsICJwYXJzaW5nIGVuZGVkIGJlZm9yZSB0
aGUgZW5kIG9mICIsIHNlY3Rpb24sICIgc2VjdGlvbiIpOworICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKHBhcnNlci5sZW5ndGgoKSAhPSBwYXJzZXIub2Zmc2V0KCksICJwYXJzaW5nIGVuZGVk
IGJlZm9yZSB0aGUgZW5kIG9mICIsIHNlY3Rpb24sICIgc2VjdGlvbiIpOworCisgICAgICAgIG1f
b2Zmc2V0ICs9IHNlY3Rpb25MZW5ndGg7CiAKIAogICAgICAgICBpZiAoaXNLbm93blNlY3Rpb24o
c2VjdGlvbikpCiAgICAgICAgICAgICBwcmV2aW91c0tub3duU2VjdGlvbiA9IHNlY3Rpb247CiAg
ICAgfQogCi0gICAgcmV0dXJuIHsgfTsKLX0KLQotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlVHlw
ZSgpIC0+IFBhcnRpYWxSZXN1bHQKLXsKLSAgICB1aW50MzJfdCBjb3VudDsKLQotICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGNvdW50KSwgImNhbid0IGdldCBUeXBlIHNl
Y3Rpb24ncyBjb3VudCIpOwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoY291bnQgPiBtYXhUeXBl
cywgIlR5cGUgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgY291bnQsICIgbWF4aW11bSAi
LCBtYXhUeXBlcyk7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT51c2VkU2lnbmF0
dXJlcy50cnlSZXNlcnZlQ2FwYWNpdHkoY291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1l
bW9yeSBmb3IgVHlwZSBzZWN0aW9uJ3MgIiwgY291bnQsICIgZW50cmllcyIpOwotCi0gICAgZm9y
ICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgaW50OF90IHR5cGU7
Ci0gICAgICAgIHVpbnQzMl90IGFyZ3VtZW50Q291bnQ7Ci0gICAgICAgIFZlY3RvcjxUeXBlPiBh
cmd1bWVudFR5cGVzOwotCi0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlSW50Nyh0
eXBlKSwgImNhbid0IGdldCAiLCBpLCAidGggVHlwZSdzIHR5cGUiKTsKLSAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRih0eXBlICE9IEZ1bmMsIGksICJ0aCBUeXBlIGlzIG5vbi1GdW5jICIsIHR5
cGUpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihhcmd1bWVu
dENvdW50KSwgImNhbid0IGdldCAiLCBpLCAidGggVHlwZSdzIGFyZ3VtZW50IGNvdW50Iik7Ci0g
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoYXJndW1lbnRDb3VudCA+IG1heEZ1bmN0aW9uUGFy
YW1zLCBpLCAidGggYXJndW1lbnQgY291bnQgaXMgdG9vIGJpZyAiLCBhcmd1bWVudENvdW50LCAi
IG1heGltdW0gIiwgbWF4RnVuY3Rpb25QYXJhbXMpOwotICAgICAgICBSZWZQdHI8U2lnbmF0dXJl
PiBtYXliZVNpZ25hdHVyZSA9IFNpZ25hdHVyZTo6dHJ5Q3JlYXRlKGFyZ3VtZW50Q291bnQpOwot
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtYXliZVNpZ25hdHVyZSwgImNhbid0IGFsbG9j
YXRlIGVub3VnaCBtZW1vcnkgZm9yIFR5cGUgc2VjdGlvbidzICIsIGksICJ0aCBzaWduYXR1cmUi
KTsKLSAgICAgICAgUmVmPFNpZ25hdHVyZT4gc2lnbmF0dXJlID0gbWF5YmVTaWduYXR1cmUucmVs
ZWFzZU5vbk51bGwoKTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJndW1l
bnRDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBUeXBlIGFyZ3VtZW50VHlwZTsKLSAgICAgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFsdWVUeXBlKGFyZ3VtZW50VHlwZSksICJj
YW4ndCBnZXQgIiwgaSwgInRoIGFyZ3VtZW50IFR5cGUiKTsKLSAgICAgICAgICAgIHNpZ25hdHVy
ZS0+YXJndW1lbnQoaSkgPSBhcmd1bWVudFR5cGU7Ci0gICAgICAgIH0KLQotICAgICAgICB1aW50
OF90IHJldHVybkNvdW50OwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJ
bnQxKHJldHVybkNvdW50KSwgImNhbid0IGdldCAiLCBpLCAidGggVHlwZSdzIHJldHVybiBjb3Vu
dCIpOwotICAgICAgICBUeXBlIHJldHVyblR5cGU7Ci0gICAgICAgIGlmIChyZXR1cm5Db3VudCkg
ewotICAgICAgICAgICAgVHlwZSB2YWx1ZTsKLSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIXBhcnNlVmFsdWVUeXBlKHZhbHVlKSwgImNhbid0IGdldCAiLCBpLCAidGggVHlwZSdzIHJl
dHVybiB2YWx1ZSIpOwotICAgICAgICAgICAgcmV0dXJuVHlwZSA9IHN0YXRpY19jYXN0PFR5cGU+
KHZhbHVlKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICByZXR1cm5UeXBlID0gVHlwZTo6
Vm9pZDsKLSAgICAgICAgc2lnbmF0dXJlLT5yZXR1cm5UeXBlKCkgPSByZXR1cm5UeXBlOwotCi0g
ICAgICAgIHN0ZDo6cGFpcjxTaWduYXR1cmVJbmRleCwgUmVmPFNpZ25hdHVyZT4+IHJlc3VsdCA9
IFNpZ25hdHVyZUluZm9ybWF0aW9uOjphZG9wdChXVEZNb3ZlKHNpZ25hdHVyZSkpOwotICAgICAg
ICBtX2luZm8tPnVzZWRTaWduYXR1cmVzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKHJlc3VsdC5z
ZWNvbmQpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQotYXV0byBNb2R1bGVQYXJzZXI6
OnBhcnNlSW1wb3J0KCkgLT4gUGFydGlhbFJlc3VsdAotewotICAgIHVpbnQzMl90IGltcG9ydENv
dW50OwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGltcG9ydENvdW50
KSwgImNhbid0IGdldCBJbXBvcnQgc2VjdGlvbidzIGNvdW50Iik7Ci0gICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihpbXBvcnRDb3VudCA+IG1heEltcG9ydHMsICJJbXBvcnQgc2VjdGlvbidzIGNvdW50
IGlzIHRvbyBiaWcgIiwgaW1wb3J0Q291bnQsICIgbWF4aW11bSAiLCBtYXhJbXBvcnRzKTsKLSAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmdsb2JhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5
KGltcG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGltcG9y
dENvdW50LCAiIGdsb2JhbHMiKTsgLy8gRklYTUUgdGhpcyBvdmVyLWFsbG9jYXRlcyB3aGVuIHdl
IGZpeCB0aGUgRklYTUVzIGJlbG93LgotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+
aW1wb3J0cy50cnlSZXNlcnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUg
ZW5vdWdoIG1lbW9yeSBmb3IgIiwgaW1wb3J0Q291bnQsICIgaW1wb3J0cyIpOyAvLyBGSVhNRSB0
aGlzIG92ZXItYWxsb2NhdGVzIHdoZW4gd2UgZml4IHRoZSBGSVhNRXMgYmVsb3cuCi0gICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5pbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMu
dHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBt
ZW1vcnkgZm9yICIsIGltcG9ydENvdW50LCAiIGltcG9ydCBmdW5jdGlvbiBzaWduYXR1cmVzIik7
IC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxv
dy4KLQotICAgIGZvciAodWludDMyX3QgaW1wb3J0TnVtYmVyID0gMDsgaW1wb3J0TnVtYmVyIDwg
aW1wb3J0Q291bnQ7ICsraW1wb3J0TnVtYmVyKSB7Ci0gICAgICAgIHVpbnQzMl90IG1vZHVsZUxl
bjsKLSAgICAgICAgdWludDMyX3QgZmllbGRMZW47Ci0gICAgICAgIE5hbWUgbW9kdWxlU3RyaW5n
OwotICAgICAgICBOYW1lIGZpZWxkU3RyaW5nOwotICAgICAgICBFeHRlcm5hbEtpbmQga2luZDsK
LSAgICAgICAgdW5zaWduZWQga2luZEluZGV4IHsgMCB9OwotCi0gICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKG1vZHVsZUxlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0
TnVtYmVyLCAidGggSW1wb3J0J3MgbW9kdWxlIG5hbWUgbGVuZ3RoIik7Ci0gICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVVVEY4U3RyaW5nKG1vZHVsZVN0cmluZywgbW9kdWxlTGVu
KSwgImNhbid0IGdldCAiLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQncyBtb2R1bGUgbmFtZSBv
ZiBsZW5ndGggIiwgbW9kdWxlTGVuKTsKLQotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFw
YXJzZVZhclVJbnQzMihmaWVsZExlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGgg
SW1wb3J0J3MgZmllbGQgbmFtZSBsZW5ndGggaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICIn
Iik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVVVEY4U3RyaW5nKGZpZWxk
U3RyaW5nLCBmaWVsZExlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0
J3MgZmllbGQgbmFtZSBvZiBsZW5ndGggIiwgbW9kdWxlTGVuLCAiIGluIG1vZHVsZSAnIiwgbW9k
dWxlU3RyaW5nLCAiJyIpOwotCi0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlRXh0
ZXJuYWxLaW5kKGtpbmQpLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdz
IGtpbmQgaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0cmlu
ZywgIiciKTsKLSAgICAgICAgc3dpdGNoIChraW5kKSB7Ci0gICAgICAgIGNhc2UgRXh0ZXJuYWxL
aW5kOjpGdW5jdGlvbjogewotICAgICAgICAgICAgdWludDMyX3QgZnVuY3Rpb25TaWduYXR1cmVJ
bmRleDsKLSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGZ1
bmN0aW9uU2lnbmF0dXJlSW5kZXgpLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIElt
cG9ydCdzIGZ1bmN0aW9uIHNpZ25hdHVyZSBpbiBtb2R1bGUgJyIsIG1vZHVsZVN0cmluZywgIicg
ZmllbGQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOwotICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRihmdW5jdGlvblNpZ25hdHVyZUluZGV4ID49IG1faW5mby0+dXNlZFNpZ25hdHVyZXMuc2l6
ZSgpLCAiaW52YWxpZCBmdW5jdGlvbiBzaWduYXR1cmUgZm9yICIsIGltcG9ydE51bWJlciwgInRo
IEltcG9ydCwgIiwgZnVuY3Rpb25TaWduYXR1cmVJbmRleCwgIiBpcyBvdXQgb2YgcmFuZ2Ugb2Yg
IiwgbV9pbmZvLT51c2VkU2lnbmF0dXJlcy5zaXplKCksICIgaW4gbW9kdWxlICciLCBtb2R1bGVT
dHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0cmluZywgIiciKTsKLSAgICAgICAgICAgIGtpbmRJ
bmRleCA9IG1faW5mby0+aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsKLSAg
ICAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gU2lnbmF0dXJlSW5mb3Jt
YXRpb246OmdldChtX2luZm8tPnVzZWRTaWduYXR1cmVzW2Z1bmN0aW9uU2lnbmF0dXJlSW5kZXhd
KTsKLSAgICAgICAgICAgIG1faW5mby0+aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnVu
Y2hlY2tlZEFwcGVuZChzaWduYXR1cmVJbmRleCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIEV4dGVybmFsS2luZDo6VGFibGU6IHsKLSAgICAgICAgICAgIGJv
b2wgaXNJbXBvcnQgPSB0cnVlOwotICAgICAgICAgICAgUGFydGlhbFJlc3VsdCByZXN1bHQgPSBw
YXJzZVRhYmxlSGVscGVyKGlzSW1wb3J0KTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSghcmVz
dWx0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoV1RGTW92ZShyZXN1
bHQuZXJyb3IoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBFeHRlcm5hbEtpbmQ6Ok1lbW9yeTogewotICAgICAgICAgICAgYm9vbCBpc0ltcG9ydCA9IHRy
dWU7Ci0gICAgICAgICAgICBQYXJ0aWFsUmVzdWx0IHJlc3VsdCA9IHBhcnNlTWVtb3J5SGVscGVy
KGlzSW1wb3J0KTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoV1RGTW92ZShyZXN1bHQuZXJyb3IoKSkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6
Okdsb2JhbDogewotICAgICAgICAgICAgR2xvYmFsIGdsb2JhbDsKLSAgICAgICAgICAgIFdBU01f
RkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VHbG9iYWxUeXBlKGdsb2JhbCkpOwotICAgICAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihnbG9iYWwubXV0YWJpbGl0eSA9PSBHbG9iYWw6Ok11dGFi
bGUsICJNdXRhYmxlIEdsb2JhbHMgYXJlbid0IHN1cHBvcnRlZCIpOwotCi0gICAgICAgICAgICBr
aW5kSW5kZXggPSBtX2luZm8tPmdsb2JhbHMuc2l6ZSgpOwotICAgICAgICAgICAgbV9pbmZvLT5n
bG9iYWxzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGdsb2JhbCkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIG1faW5mby0+aW1wb3J0cy51bmNo
ZWNrZWRBcHBlbmQoeyBXVEZNb3ZlKG1vZHVsZVN0cmluZyksIFdURk1vdmUoZmllbGRTdHJpbmcp
LCBraW5kLCBraW5kSW5kZXggfSk7Ci0gICAgfQotCi0gICAgbV9pbmZvLT5maXJzdEludGVybmFs
R2xvYmFsID0gbV9pbmZvLT5nbG9iYWxzLnNpemUoKTsKLSAgICByZXR1cm4geyB9OwotfQotCi1h
dXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbigpIC0+IFBhcnRpYWxSZXN1bHQKLXsKLSAg
ICB1aW50MzJfdCBjb3VudDsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQz
Mihjb3VudCksICJjYW4ndCBnZXQgRnVuY3Rpb24gc2VjdGlvbidzIGNvdW50Iik7Ci0gICAgV0FT
TV9QQVJTRVJfRkFJTF9JRihjb3VudCA+IG1heEZ1bmN0aW9ucywgIkZ1bmN0aW9uIHNlY3Rpb24n
cyBjb3VudCBpcyB0b28gYmlnICIsIGNvdW50LCAiIG1heGltdW0gIiwgbWF4RnVuY3Rpb25zKTsK
LSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmludGVybmFsRnVuY3Rpb25TaWduYXR1
cmVJbmRpY2VzLnRyeVJlc2VydmVDYXBhY2l0eShjb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91
Z2ggbWVtb3J5IGZvciAiLCBjb3VudCwgIiBGdW5jdGlvbiBzaWduYXR1cmVzIik7Ci0gICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkudHJ5UmVz
ZXJ2ZUNhcGFjaXR5KGNvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIs
IGNvdW50LCAiRnVuY3Rpb24gbG9jYXRpb25zIik7Ci0KLSAgICBmb3IgKHVpbnQzMl90IGkgPSAw
OyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICB1aW50MzJfdCB0eXBlTnVtYmVyOwotICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMih0eXBlTnVtYmVyKSwgImNhbid0
IGdldCAiLCBpLCAidGggRnVuY3Rpb24ncyB0eXBlIG51bWJlciIpOwotICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKHR5cGVOdW1iZXIgPj0gbV9pbmZvLT51c2VkU2lnbmF0dXJlcy5zaXplKCks
IGksICJ0aCBGdW5jdGlvbiB0eXBlIG51bWJlciBpcyBpbnZhbGlkICIsIHR5cGVOdW1iZXIpOwot
Ci0gICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gU2lnbmF0dXJlSW5mb3Jt
YXRpb246OmdldChtX2luZm8tPnVzZWRTaWduYXR1cmVzW3R5cGVOdW1iZXJdKTsKLSAgICAgICAg
Ly8gVGhlIENvZGUgc2VjdGlvbiBmaXhlcyB1cCBzdGFydCBhbmQgZW5kLgotICAgICAgICBzaXpl
X3Qgc3RhcnQgPSAwOwotICAgICAgICBzaXplX3QgZW5kID0gMDsKLSAgICAgICAgbV9pbmZvLT5p
bnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy51bmNoZWNrZWRBcHBlbmQoc2lnbmF0dXJl
SW5kZXgpOwotICAgICAgICBtX2luZm8tPmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeS51bmNoZWNr
ZWRBcHBlbmQoeyBzdGFydCwgZW5kIH0pOworICAgIGlmIChPcHRpb25zOjp1c2VFYWdlcldlYkFz
c2VtYmx5TW9kdWxlSGFzaGluZygpKSB7CisgICAgICAgIFNIQTEgaGFzaGVyOworICAgICAgICBo
YXNoZXIuYWRkQnl0ZXMoc291cmNlKCksIGxlbmd0aCgpKTsKKyAgICAgICAgbV9pbmZvLT5uYW1l
U2VjdGlvbi0+c2V0SGFzaChoYXNoZXIuY29tcHV0ZUhleERpZ2VzdCgpKTsKICAgICB9CiAKICAg
ICByZXR1cm4geyB9OwogfQogCi1hdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VSZXNpemFibGVMaW1p
dHModWludDMyX3QmIGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+JiBtYXhpbXVtKSAt
PiBQYXJ0aWFsUmVzdWx0Ci17Ci0gICAgQVNTRVJUKCFtYXhpbXVtKTsKLQotICAgIHVpbnQ4X3Qg
ZmxhZ3M7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MShmbGFncyksICJj
YW4ndCBwYXJzZSByZXNpemFibGUgbGltaXRzIGZsYWdzIik7Ci0gICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VWYXJVSW50MzIoaW5pdGlhbCksICJjYW4ndCBwYXJzZSByZXNpemFibGUgbGlt
aXRzIGluaXRpYWwgcGFnZSBjb3VudCIpOwotCi0gICAgaWYgKGZsYWdzKSB7Ci0gICAgICAgIHVp
bnQzMl90IG1heGltdW1JbnQ7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFy
VUludDMyKG1heGltdW1JbnQpLCAiY2FuJ3QgcGFyc2UgcmVzaXphYmxlIGxpbWl0cyBtYXhpbXVt
IHBhZ2UgY291bnQiKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbml0aWFsID4gbWF4
aW11bUludCwgInJlc2l6YWJsZSBsaW1pdHMgaGFzIGEgaW5pdGlhbCBwYWdlIGNvdW50IG9mICIs
IGluaXRpYWwsICIgd2hpY2ggaXMgZ3JlYXRlciB0aGFuIGl0cyBtYXhpbXVtICIsIG1heGltdW1J
bnQpOwotICAgICAgICBtYXhpbXVtID0gbWF4aW11bUludDsKLSAgICB9Ci0KLSAgICByZXR1cm4g
eyB9OwotfQotCi1hdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VUYWJsZUhlbHBlcihib29sIGlzSW1w
b3J0KSAtPiBQYXJ0aWFsUmVzdWx0Ci17Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX3RhYmxl
Q291bnQgPiAwLCAiQ2Fubm90IGhhdmUgbW9yZSB0aGFuIG9uZSBUYWJsZSBmb3Igbm93Iik7Ci0K
LSAgICArK21fdGFibGVDb3VudDsKLQotICAgIGludDhfdCB0eXBlOwotICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXBhcnNlSW50Nyh0eXBlKSwgImNhbid0IHBhcnNlIFRhYmxlIHR5cGUiKTsKLSAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKHR5cGUgIT0gV2FzbTo6QW55ZnVuYywgIlRhYmxlIHR5cGUg
c2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAiLCB0eXBlKTsKLQotICAgIHVpbnQzMl90IGluaXRpYWw7
Ci0gICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bTsKLSAgICBQYXJ0aWFsUmVzdWx0
IGxpbWl0cyA9IHBhcnNlUmVzaXphYmxlTGltaXRzKGluaXRpYWwsIG1heGltdW0pOwotICAgIGlm
IChVTkxJS0VMWSghbGltaXRzKSkKLSAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFdURk1v
dmUobGltaXRzLmVycm9yKCkpKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluaXRpYWwgPiBt
YXhUYWJsZUVudHJpZXMsICJUYWJsZSdzIGluaXRpYWwgcGFnZSBjb3VudCBvZiAiLCBpbml0aWFs
LCAiIGlzIHRvbyBiaWcsIG1heGltdW0gIiwgbWF4VGFibGVFbnRyaWVzKTsKLQotICAgIEFTU0VS
VCghbWF4aW11bSB8fCAqbWF4aW11bSA+PSBpbml0aWFsKTsKLQotICAgIG1faW5mby0+dGFibGVJ
bmZvcm1hdGlvbiA9IFRhYmxlSW5mb3JtYXRpb24oaW5pdGlhbCwgbWF4aW11bSwgaXNJbXBvcnQp
OwotCi0gICAgcmV0dXJuIHsgfTsKLX0KLQotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlVGFibGUo
KSAtPiBQYXJ0aWFsUmVzdWx0Ci17Ci0gICAgdWludDMyX3QgY291bnQ7Ci0gICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoY291bnQpLCAiY2FuJ3QgZ2V0IFRhYmxlJ3MgY291
bnQiKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGNvdW50ID4gMSwgIlRhYmxlIGNvdW50IG9m
ICIsIGNvdW50LCAiIGlzIGludmFsaWQsIGF0IG1vc3QgMSBpcyBhbGxvd2VkIGZvciBub3ciKTsK
LQotICAgIGlmICghY291bnQpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBib29sIGlzSW1w
b3J0ID0gZmFsc2U7Ci0gICAgUGFydGlhbFJlc3VsdCByZXN1bHQgPSBwYXJzZVRhYmxlSGVscGVy
KGlzSW1wb3J0KTsKLSAgICBpZiAoVU5MSUtFTFkoIXJlc3VsdCkpCi0gICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChXVEZNb3ZlKHJlc3VsdC5lcnJvcigpKSk7Ci0KLSAgICByZXR1cm4geyB9
OwotfQotCi1hdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VNZW1vcnlIZWxwZXIoYm9vbCBpc0ltcG9y
dCkgLT4gUGFydGlhbFJlc3VsdAotewotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9tZW1vcnlD
b3VudCwgInRoZXJlIGNhbiBhdCBtb3N0IGJlIG9uZSBNZW1vcnkgc2VjdGlvbiBmb3Igbm93Iik7
Ci0KLSAgICArK21fbWVtb3J5Q291bnQ7Ci0KLSAgICBQYWdlQ291bnQgaW5pdGlhbFBhZ2VDb3Vu
dDsKLSAgICBQYWdlQ291bnQgbWF4aW11bVBhZ2VDb3VudDsKLSAgICB7Ci0gICAgICAgIHVpbnQz
Ml90IGluaXRpYWw7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW07Ci0g
ICAgICAgIFBhcnRpYWxSZXN1bHQgbGltaXRzID0gcGFyc2VSZXNpemFibGVMaW1pdHMoaW5pdGlh
bCwgbWF4aW11bSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghbGltaXRzKSkKLSAgICAgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZChXVEZNb3ZlKGxpbWl0cy5lcnJvcigpKSk7Ci0gICAgICAg
IEFTU0VSVCghbWF4aW11bSB8fCAqbWF4aW11bSA+PSBpbml0aWFsKTsKLSAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighUGFnZUNvdW50Ojppc1ZhbGlkKGluaXRpYWwpLCAiTWVtb3J5J3MgaW5p
dGlhbCBwYWdlIGNvdW50IG9mICIsIGluaXRpYWwsICIgaXMgaW52YWxpZCIpOwotCi0gICAgICAg
IGluaXRpYWxQYWdlQ291bnQgPSBQYWdlQ291bnQoaW5pdGlhbCk7Ci0KLSAgICAgICAgaWYgKG1h
eGltdW0pIHsKLSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIVBhZ2VDb3VudDo6aXNW
YWxpZCgqbWF4aW11bSksICJNZW1vcnkncyBtYXhpbXVtIHBhZ2UgY291bnQgb2YgIiwgKm1heGlt
dW0sICIgaXMgaW52YWxpZCIpOwotICAgICAgICAgICAgbWF4aW11bVBhZ2VDb3VudCA9IFBhZ2VD
b3VudCgqbWF4aW11bSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgQVNTRVJUKGluaXRpYWxQYWdl
Q291bnQpOwotICAgIEFTU0VSVCghbWF4aW11bVBhZ2VDb3VudCB8fCBtYXhpbXVtUGFnZUNvdW50
ID49IGluaXRpYWxQYWdlQ291bnQpOwotCi0gICAgbV9pbmZvLT5tZW1vcnkgPSBNZW1vcnlJbmZv
cm1hdGlvbihpbml0aWFsUGFnZUNvdW50LCBtYXhpbXVtUGFnZUNvdW50LCBpc0ltcG9ydCk7Ci0g
ICAgcmV0dXJuIHsgfTsKLX0KLQotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlTWVtb3J5KCkgLT4g
UGFydGlhbFJlc3VsdAotewotICAgIHVpbnQ4X3QgY291bnQ7Ci0gICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VWYXJVSW50MShjb3VudCksICJjYW4ndCBwYXJzZSBNZW1vcnkgc2VjdGlvbidz
IGNvdW50Iik7Ci0KLSAgICBpZiAoIWNvdW50KQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAg
V0FTTV9QQVJTRVJfRkFJTF9JRihjb3VudCAhPSAxLCAiTWVtb3J5IHNlY3Rpb24gaGFzIG1vcmUg
dGhhbiBvbmUgbWVtb3J5LCBXZWJBc3NlbWJseSBjdXJyZW50bHkgb25seSBhbGxvd3MgemVybyBv
ciBvbmUiKTsKLQotICAgIGJvb2wgaXNJbXBvcnQgPSBmYWxzZTsKLSAgICByZXR1cm4gcGFyc2VN
ZW1vcnlIZWxwZXIoaXNJbXBvcnQpOwotfQotCi1hdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VHbG9i
YWwoKSAtPiBQYXJ0aWFsUmVzdWx0Ci17Ci0gICAgdWludDMyX3QgZ2xvYmFsQ291bnQ7Ci0gICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZ2xvYmFsQ291bnQpLCAiY2FuJ3Qg
Z2V0IEdsb2JhbCBzZWN0aW9uJ3MgY291bnQiKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGds
b2JhbENvdW50ID4gbWF4R2xvYmFscywgIkdsb2JhbCBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJp
ZyAiLCBnbG9iYWxDb3VudCwgIiBtYXhpbXVtICIsIG1heEdsb2JhbHMpOwotICAgIHNpemVfdCB0
b3RhbEJ5dGVzID0gZ2xvYmFsQ291bnQgKyBtX2luZm8tPmZpcnN0SW50ZXJuYWxHbG9iYWw7Ci0g
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRigoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHRvdGFsQnl0ZXMp
IDwgZ2xvYmFsQ291bnQpIHx8ICFtX2luZm8tPmdsb2JhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KHRv
dGFsQnl0ZXMpLCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiLCB0b3RhbEJ5dGVzLCAiIGds
b2JhbHMiKTsKLQotICAgIGZvciAodWludDMyX3QgZ2xvYmFsSW5kZXggPSAwOyBnbG9iYWxJbmRl
eCA8IGdsb2JhbENvdW50OyArK2dsb2JhbEluZGV4KSB7Ci0gICAgICAgIEdsb2JhbCBnbG9iYWw7
Ci0gICAgICAgIHVpbnQ4X3QgaW5pdE9wY29kZTsKLQotICAgICAgICBXQVNNX0ZBSUxfSUZfSEVM
UEVSX0ZBSUxTKHBhcnNlR2xvYmFsVHlwZShnbG9iYWwpKTsKLSAgICAgICAgVHlwZSB0eXBlRm9y
SW5pdE9wY29kZTsKLSAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUluaXRF
eHByKGluaXRPcGNvZGUsIGdsb2JhbC5pbml0aWFsQml0c09ySW1wb3J0TnVtYmVyLCB0eXBlRm9y
SW5pdE9wY29kZSkpOwotICAgICAgICBpZiAoaW5pdE9wY29kZSA9PSBHZXRHbG9iYWwpCi0gICAg
ICAgICAgICBnbG9iYWwuaW5pdGlhbGl6YXRpb25UeXBlID0gR2xvYmFsOjpGcm9tR2xvYmFsSW1w
b3J0OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBnbG9iYWwuaW5pdGlhbGl6YXRpb25UeXBl
ID0gR2xvYmFsOjpGcm9tRXhwcmVzc2lvbjsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0
eXBlRm9ySW5pdE9wY29kZSAhPSBnbG9iYWwudHlwZSwgIkdsb2JhbCBpbml0X2V4cHIgb3Bjb2Rl
IG9mIHR5cGUgIiwgdHlwZUZvckluaXRPcGNvZGUsICIgZG9lc24ndCBtYXRjaCBnbG9iYWwncyB0
eXBlICIsIGdsb2JhbC50eXBlKTsKLQotICAgICAgICBtX2luZm8tPmdsb2JhbHMudW5jaGVja2Vk
QXBwZW5kKFdURk1vdmUoZ2xvYmFsKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsgfTsKLX0KLQot
YXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlRXhwb3J0KCkgLT4gUGFydGlhbFJlc3VsdAotewotICAg
IHVpbnQzMl90IGV4cG9ydENvdW50OwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFy
VUludDMyKGV4cG9ydENvdW50KSwgImNhbid0IGdldCBFeHBvcnQgc2VjdGlvbidzIGNvdW50Iik7
Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRihleHBvcnRDb3VudCA+IG1heEV4cG9ydHMsICJFeHBv
cnQgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgZXhwb3J0Q291bnQsICIgbWF4aW11bSAi
LCBtYXhFeHBvcnRzKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmV4cG9ydHMu
dHJ5UmVzZXJ2ZUNhcGFjaXR5KGV4cG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBt
ZW1vcnkgZm9yICIsIGV4cG9ydENvdW50LCAiIGV4cG9ydHMiKTsKLQotICAgIEhhc2hTZXQ8U3Ry
aW5nPiBleHBvcnROYW1lczsKLSAgICBmb3IgKHVpbnQzMl90IGV4cG9ydE51bWJlciA9IDA7IGV4
cG9ydE51bWJlciA8IGV4cG9ydENvdW50OyArK2V4cG9ydE51bWJlcikgewotICAgICAgICB1aW50
MzJfdCBmaWVsZExlbjsKLSAgICAgICAgTmFtZSBmaWVsZFN0cmluZzsKLSAgICAgICAgRXh0ZXJu
YWxLaW5kIGtpbmQ7Ci0gICAgICAgIHVuc2lnbmVkIGtpbmRJbmRleDsKLQotICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihmaWVsZExlbiksICJjYW4ndCBnZXQgIiwg
ZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0J3MgZmllbGQgbmFtZSBsZW5ndGgiKTsKLSAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighY29uc3VtZVVURjhTdHJpbmcoZmllbGRTdHJpbmcsIGZpZWxk
TGVuKSwgImNhbid0IGdldCAiLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQncyBmaWVsZCBuYW1l
IG9mIGxlbmd0aCAiLCBmaWVsZExlbik7Ci0gICAgICAgIFN0cmluZyBmaWVsZE5hbWUgPSBTdHJp
bmc6OmZyb21VVEY4KGZpZWxkU3RyaW5nKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihl
eHBvcnROYW1lcy5jb250YWlucyhmaWVsZE5hbWUpLCAiZHVwbGljYXRlIGV4cG9ydDogJyIsIGZp
ZWxkU3RyaW5nLCAiJyIpOwotICAgICAgICBleHBvcnROYW1lcy5hZGQoZmllbGROYW1lKTsKLQot
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUV4dGVybmFsS2luZChraW5kKSwgImNh
bid0IGdldCAiLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQncyBraW5kLCBuYW1lZCAnIiwgZmll
bGRTdHJpbmcsICInIik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUlu
dDMyKGtpbmRJbmRleCksICJjYW4ndCBnZXQgIiwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0J3Mg
a2luZCBpbmRleCwgbmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOwotICAgICAgICBzd2l0Y2gg
KGtpbmQpIHsKLSAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6OkZ1bmN0aW9uOiB7Ci0gICAgICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGtpbmRJbmRleCA+PSBtX2luZm8tPmZ1bmN0aW9uSW5k
ZXhTcGFjZVNpemUoKSwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0IGhhcyBpbnZhbGlkIGZ1bmN0
aW9uIG51bWJlciAiLCBraW5kSW5kZXgsICIgaXQgZXhjZWVkcyB0aGUgZnVuY3Rpb24gaW5kZXgg
c3BhY2UgIiwgbV9pbmZvLT5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCksICIsIG5hbWVkICciLCBm
aWVsZFN0cmluZywgIiciKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgRXh0ZXJuYWxLaW5kOjpUYWJsZTogewotICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRihraW5kSW5kZXggPj0gbV90YWJsZUNvdW50LCAiY2FuJ3QgZXhwb3J0IFRhYmxlICIsIGtp
bmRJbmRleCwgIiB0aGVyZSBhcmUgIiwgbV90YWJsZUNvdW50LCAiIFRhYmxlcyIpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6Ok1lbW9y
eTogewotICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5tZW1vcnksICJj
YW4ndCBleHBvcnQgYSBub24tZXhpc3RlbnQgTWVtb3J5Iik7Ci0gICAgICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKGtpbmRJbmRleCwgImNhbid0IGV4cG9ydCBNZW1vcnkgIiwga2luZEluZGV4
LCAiIG9ubHkgb25lIFRhYmxlIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQiKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpHbG9iYWw6IHsK
LSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoa2luZEluZGV4ID49IG1faW5mby0+Z2xv
YmFscy5zaXplKCksIGV4cG9ydE51bWJlciwgInRoIEV4cG9ydCBoYXMgaW52YWxpZCBnbG9iYWwg
bnVtYmVyICIsIGtpbmRJbmRleCwgIiBpdCBleGNlZWRzIHRoZSBnbG9iYWxzIGNvdW50ICIsIG1f
aW5mby0+Z2xvYmFscy5zaXplKCksICIsIG5hbWVkICciLCBmaWVsZFN0cmluZywgIiciKTsKLSAg
ICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9pbmZvLT5nbG9iYWxzW2tpbmRJbmRleF0u
bXV0YWJpbGl0eSAhPSBHbG9iYWw6OkltbXV0YWJsZSwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0
IGlzbid0IGltbXV0YWJsZSwgbmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIG1faW5mby0+ZXhwb3J0
cy51bmNoZWNrZWRBcHBlbmQoeyBXVEZNb3ZlKGZpZWxkU3RyaW5nKSwga2luZCwga2luZEluZGV4
IH0pOwotICAgIH0KLQotICAgIHJldHVybiB7IH07Ci19Ci0KLWF1dG8gTW9kdWxlUGFyc2VyOjpw
YXJzZVN0YXJ0KCkgLT4gUGFydGlhbFJlc3VsdAotewotICAgIHVpbnQzMl90IHN0YXJ0RnVuY3Rp
b25JbmRleDsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihzdGFydEZ1
bmN0aW9uSW5kZXgpLCAiY2FuJ3QgZ2V0IFN0YXJ0IGluZGV4Iik7Ci0gICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihzdGFydEZ1bmN0aW9uSW5kZXggPj0gbV9pbmZvLT5mdW5jdGlvbkluZGV4U3BhY2VT
aXplKCksICJTdGFydCBpbmRleCAiLCBzdGFydEZ1bmN0aW9uSW5kZXgsICIgZXhjZWVkcyBmdW5j
dGlvbiBpbmRleCBzcGFjZSAiLCBtX2luZm8tPmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7Ci0g
ICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX2luZm8tPnNpZ25hdHVyZUluZGV4
RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXgpOwotICAgIGNvbnN0IFNp
Z25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJ
bmRleCk7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRihzaWduYXR1cmUuYXJndW1lbnRDb3VudCgp
LCAiU3RhcnQgZnVuY3Rpb24gY2FuJ3QgaGF2ZSBhcmd1bWVudHMiKTsKLSAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKHNpZ25hdHVyZS5yZXR1cm5UeXBlKCkgIT0gVm9pZCwgIlN0YXJ0IGZ1bmN0aW9u
IGNhbid0IHJldHVybiBhIHZhbHVlIik7Ci0gICAgbV9pbmZvLT5zdGFydEZ1bmN0aW9uSW5kZXhT
cGFjZSA9IHN0YXJ0RnVuY3Rpb25JbmRleDsKLSAgICByZXR1cm4geyB9OwotfQotCi1hdXRvIE1v
ZHVsZVBhcnNlcjo6cGFyc2VFbGVtZW50KCkgLT4gUGFydGlhbFJlc3VsdAotewotICAgIHVpbnQz
Ml90IGVsZW1lbnRDb3VudDsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQz
MihlbGVtZW50Q291bnQpLCAiY2FuJ3QgZ2V0IEVsZW1lbnQgc2VjdGlvbidzIGNvdW50Iik7Ci0g
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihlbGVtZW50Q291bnQgPiBtYXhUYWJsZUVudHJpZXMsICJF
bGVtZW50IHNlY3Rpb24ncyBjb3VudCBpcyB0b28gYmlnICIsIGVsZW1lbnRDb3VudCwgIiBtYXhp
bXVtICIsIG1heFRhYmxlRW50cmllcyk7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZv
LT5lbGVtZW50cy50cnlSZXNlcnZlQ2FwYWNpdHkoZWxlbWVudENvdW50KSwgImNhbid0IGFsbG9j
YXRlIG1lbW9yeSBmb3IgIiwgZWxlbWVudENvdW50LCAiIEVsZW1lbnRzIik7Ci0gICAgZm9yICh1
bnNpZ25lZCBlbGVtZW50TnVtID0gMDsgZWxlbWVudE51bSA8IGVsZW1lbnRDb3VudDsgKytlbGVt
ZW50TnVtKSB7Ci0gICAgICAgIHVpbnQzMl90IHRhYmxlSW5kZXg7Ci0gICAgICAgIHVpbnQ2NF90
IGluaXRFeHByQml0czsKLSAgICAgICAgdWludDhfdCBpbml0T3Bjb2RlOwotICAgICAgICB1aW50
MzJfdCBpbmRleENvdW50OwotCi0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFy
VUludDMyKHRhYmxlSW5kZXgpLCAiY2FuJ3QgZ2V0ICIsIGVsZW1lbnROdW0sICJ0aCBFbGVtZW50
IHRhYmxlIGluZGV4Iik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYodGFibGVJbmRleCA+
PSBtX3RhYmxlQ291bnQsICJFbGVtZW50IHNlY3Rpb24gZm9yIFRhYmxlICIsIHRhYmxlSW5kZXgs
ICIgZXhjZWVkcyBhdmFpbGFibGUgVGFibGUgIiwgbV90YWJsZUNvdW50KTsKLSAgICAgICAgVHlw
ZSBpbml0RXhwclR5cGU7Ci0gICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VJ
bml0RXhwcihpbml0T3Bjb2RlLCBpbml0RXhwckJpdHMsIGluaXRFeHByVHlwZSkpOwotICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluaXRFeHByVHlwZSAhPSBJMzIsICJFbGVtZW50IGluaXRf
ZXhwciBtdXN0IHByb2R1Y2UgYW4gaTMyIik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlVmFyVUludDMyKGluZGV4Q291bnQpLCAiY2FuJ3QgZ2V0ICIsIGVsZW1lbnROdW0sICJ0
aCBpbmRleCBjb3VudCBmb3IgRWxlbWVudCBzZWN0aW9uIik7Ci0gICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoaW5kZXhDb3VudCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4
KCksICJFbGVtZW50IHNlY3Rpb24ncyAiLCBlbGVtZW50TnVtLCAidGggaW5kZXggY291bnQgaXMg
dG9vIGJpZyAiLCBpbmRleENvdW50KTsKLQotICAgICAgICBBU1NFUlQoISFtX2luZm8tPnRhYmxl
SW5mb3JtYXRpb24pOwotCi0gICAgICAgIEVsZW1lbnQgZWxlbWVudChtYWtlSTMySW5pdEV4cHIo
aW5pdE9wY29kZSwgaW5pdEV4cHJCaXRzKSk7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IWVsZW1lbnQuZnVuY3Rpb25JbmRpY2VzLnRyeVJlc2VydmVDYXBhY2l0eShpbmRleENvdW50KSwg
ImNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgIiwgaW5kZXhDb3VudCwgIiBFbGVtZW50IGluZGlj
ZXMiKTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBpbmRleENv
dW50OyArK2luZGV4KSB7Ci0gICAgICAgICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4OwotICAg
ICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZnVuY3Rpb25JbmRl
eCksICJjYW4ndCBnZXQgRWxlbWVudCBzZWN0aW9uJ3MgIiwgZWxlbWVudE51bSwgInRoIGVsZW1l
bnQncyAiLCBpbmRleCwgInRoIGluZGV4Iik7Ci0gICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKGZ1bmN0aW9uSW5kZXggPj0gbV9pbmZvLT5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCksICJF
bGVtZW50IHNlY3Rpb24ncyAiLCBlbGVtZW50TnVtLCAidGggZWxlbWVudCdzICIsIGluZGV4LCAi
dGggaW5kZXggaXMgIiwgZnVuY3Rpb25JbmRleCwgIiB3aGljaCBleGNlZWRzIHRoZSBmdW5jdGlv
biBpbmRleCBzcGFjZSBzaXplIG9mICIsIG1faW5mby0+ZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgp
KTsKLQotICAgICAgICAgICAgZWxlbWVudC5mdW5jdGlvbkluZGljZXMudW5jaGVja2VkQXBwZW5k
KGZ1bmN0aW9uSW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9pbmZvLT5lbGVtZW50cy51
bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShlbGVtZW50KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsg
fTsKLX0KLQotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlQ29kZSgpIC0+IFBhcnRpYWxSZXN1bHQK
LXsKLSAgICB1aW50MzJfdCBjb3VudDsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZh
clVJbnQzMihjb3VudCksICJjYW4ndCBnZXQgQ29kZSBzZWN0aW9uJ3MgY291bnQiKTsKLSAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKGNvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+
OjptYXgoKSwgIkNvZGUgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgY291bnQpOwotICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoY291bnQgIT0gbV9pbmZvLT5mdW5jdGlvbkxvY2F0aW9uSW5C
aW5hcnkuc2l6ZSgpLCAiQ29kZSBzZWN0aW9uIGNvdW50ICIsIGNvdW50LCAiIGV4Y2VlZHMgdGhl
IGRlY2xhcmVkIG51bWJlciBvZiBmdW5jdGlvbnMgIiwgbV9pbmZvLT5mdW5jdGlvbkxvY2F0aW9u
SW5CaW5hcnkuc2l6ZSgpKTsKLQotICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsg
KytpKSB7Ci0gICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uU2l6ZTsKLSAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZnVuY3Rpb25TaXplKSwgImNhbid0IGdldCAiLCBp
LCAidGggQ29kZSBmdW5jdGlvbidzIHNpemUiKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RihmdW5jdGlvblNpemUgPiBsZW5ndGgoKSwgIkNvZGUgZnVuY3Rpb24ncyBzaXplICIsIGZ1bmN0
aW9uU2l6ZSwgIiBleGNlZWRzIHRoZSBtb2R1bGUncyBzaXplICIsIGxlbmd0aCgpKTsKLSAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvblNpemUgPiBsZW5ndGgoKSAtIG1fb2Zmc2V0
LCAiQ29kZSBmdW5jdGlvbidzIHNpemUgIiwgZnVuY3Rpb25TaXplLCAiIGV4Y2VlZHMgdGhlIG1v
ZHVsZSdzIHJlbWFpbmluZyBzaXplIiwgbGVuZ3RoKCkgLSBtX29mZnNldCk7Ci0gICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25TaXplID4gbWF4RnVuY3Rpb25TaXplLCAiQ29kZSBm
dW5jdGlvbidzIHNpemUgIiwgZnVuY3Rpb25TaXplLCAiIGlzIHRvbyBiaWciKTsKLQotICAgICAg
ICBtX2luZm8tPmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtpXS5zdGFydCA9IG1fb2Zmc2V0Owot
ICAgICAgICBtX2luZm8tPmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFyeVtpXS5lbmQgPSBtX29mZnNl
dCArIGZ1bmN0aW9uU2l6ZTsKLSAgICAgICAgbV9vZmZzZXQgPSBtX2luZm8tPmZ1bmN0aW9uTG9j
YXRpb25JbkJpbmFyeVtpXS5lbmQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsgfTsKLX0KLQotYXV0
byBNb2R1bGVQYXJzZXI6OnBhcnNlSW5pdEV4cHIodWludDhfdCYgb3Bjb2RlLCB1aW50NjRfdCYg
Yml0c09ySW1wb3J0TnVtYmVyLCBUeXBlJiByZXN1bHRUeXBlKSAtPiBQYXJ0aWFsUmVzdWx0Ci17
Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VVSW50OChvcGNvZGUpLCAiY2FuJ3QgZ2V0
IGluaXRfZXhwcidzIG9wY29kZSIpOwotCi0gICAgc3dpdGNoIChvcGNvZGUpIHsKLSAgICBjYXNl
IEkzMkNvbnN0OiB7Ci0gICAgICAgIGludDMyX3QgY29uc3RhbnQ7Ci0gICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIXBhcnNlVmFySW50MzIoY29uc3RhbnQpLCAiY2FuJ3QgZ2V0IGNvbnN0YW50
IHZhbHVlIGZvciBpbml0X2V4cHIncyBpMzIuY29uc3QiKTsKLSAgICAgICAgYml0c09ySW1wb3J0
TnVtYmVyID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGNvbnN0YW50KTsKLSAgICAgICAgcmVzdWx0
VHlwZSA9IEkzMjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBJNjRDb25zdDog
ewotICAgICAgICBpbnQ2NF90IGNvbnN0YW50OwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFwYXJzZVZhckludDY0KGNvbnN0YW50KSwgImNhbid0IGdldCBjb25zdGFudCB2YWx1ZSBmb3Ig
aW5pdF9leHByJ3MgaTY0LmNvbnN0Iik7Ci0gICAgICAgIGJpdHNPckltcG9ydE51bWJlciA9IGNv
bnN0YW50OwotICAgICAgICByZXN1bHRUeXBlID0gSTY0OwotICAgICAgICBicmVhazsKLSAgICB9
Ci0KLSAgICBjYXNlIEYzMkNvbnN0OiB7Ci0gICAgICAgIHVpbnQzMl90IGNvbnN0YW50OwotICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQzMihjb25zdGFudCksICJjYW4ndCBn
ZXQgY29uc3RhbnQgdmFsdWUgZm9yIGluaXRfZXhwcidzIGYzMi5jb25zdCIpOwotICAgICAgICBi
aXRzT3JJbXBvcnROdW1iZXIgPSBjb25zdGFudDsKLSAgICAgICAgcmVzdWx0VHlwZSA9IEYzMjsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBGNjRDb25zdDogewotICAgICAgICB1
aW50NjRfdCBjb25zdGFudDsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VVSW50
NjQoY29uc3RhbnQpLCAiY2FuJ3QgZ2V0IGNvbnN0YW50IHZhbHVlIGZvciBpbml0X2V4cHIncyBm
NjQuY29uc3QiKTsKLSAgICAgICAgYml0c09ySW1wb3J0TnVtYmVyID0gY29uc3RhbnQ7Ci0gICAg
ICAgIHJlc3VsdFR5cGUgPSBGNjQ7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2Ug
R2V0R2xvYmFsOiB7Ci0gICAgICAgIHVpbnQzMl90IGluZGV4OwotICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbmRleCksICJjYW4ndCBnZXQgZ2V0X2dsb2JhbCdz
IGluZGV4Iik7Ci0KLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbmRleCA+PSBtX2luZm8t
Pmdsb2JhbHMuc2l6ZSgpLCAiZ2V0X2dsb2JhbCdzIGluZGV4ICIsIGluZGV4LCAiIGV4Y2VlZHMg
dGhlIG51bWJlciBvZiBnbG9iYWxzICIsIG1faW5mby0+Z2xvYmFscy5zaXplKCkpOwotICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluZGV4ID49IG1faW5mby0+Zmlyc3RJbnRlcm5hbEdsb2Jh
bCwgImdldF9nbG9iYWwgaW1wb3J0IGtpbmQgaW5kZXggIiwgaW5kZXgsICIgZXhjZWVkcyB0aGUg
Zmlyc3QgaW50ZXJuYWwgZ2xvYmFsICIsIG1faW5mby0+Zmlyc3RJbnRlcm5hbEdsb2JhbCk7Ci0K
LSAgICAgICAgQVNTRVJUKG1faW5mby0+Z2xvYmFsc1tpbmRleF0ubXV0YWJpbGl0eSA9PSBHbG9i
YWw6OkltbXV0YWJsZSk7Ci0gICAgICAgIHJlc3VsdFR5cGUgPSBtX2luZm8tPmdsb2JhbHNbaW5k
ZXhdLnR5cGU7Ci0gICAgICAgIGJpdHNPckltcG9ydE51bWJlciA9IGluZGV4OwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KHRydWUsICJ1bmtub3duIGluaXRfZXhwciBvcGNvZGUgIiwgb3Bjb2RlKTsKLSAgICB9Ci0KLSAg
ICB1aW50OF90IGVuZE9wY29kZTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ4
KGVuZE9wY29kZSksICJjYW4ndCBnZXQgaW5pdF9leHByJ3MgZW5kIG9wY29kZSIpOwotICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoZW5kT3Bjb2RlICE9IE9wVHlwZTo6RW5kLCAiaW5pdF9leHByIHNo
b3VsZCBlbmQgd2l0aCBlbmQsIGVuZGVkIHdpdGggIiwgZW5kT3Bjb2RlKTsKLQotICAgIHJldHVy
biB7IH07Ci19Ci0KLWF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZUdsb2JhbFR5cGUoR2xvYmFsJiBn
bG9iYWwpIC0+IFBhcnRpYWxSZXN1bHQKLXsKLSAgICB1aW50OF90IG11dGFiaWxpdHk7Ci0gICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYWx1ZVR5cGUoZ2xvYmFsLnR5cGUpLCAiY2FuJ3Qg
Z2V0IEdsb2JhbCdzIHZhbHVlIHR5cGUiKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJz
ZVZhclVJbnQxKG11dGFiaWxpdHkpLCAiY2FuJ3QgZ2V0IEdsb2JhbCB0eXBlJ3MgbXV0YWJpbGl0
eSIpOwotICAgIGdsb2JhbC5tdXRhYmlsaXR5ID0gc3RhdGljX2Nhc3Q8R2xvYmFsOjpNdXRhYmls
aXR5PihtdXRhYmlsaXR5KTsKLSAgICByZXR1cm4geyB9OwotfQotCi1hdXRvIE1vZHVsZVBhcnNl
cjo6cGFyc2VEYXRhKCkgLT4gUGFydGlhbFJlc3VsdAotewotICAgIHVpbnQzMl90IHNlZ21lbnRD
b3VudDsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihzZWdtZW50Q291
bnQpLCAiY2FuJ3QgZ2V0IERhdGEgc2VjdGlvbidzIGNvdW50Iik7Ci0gICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihzZWdtZW50Q291bnQgPiBtYXhEYXRhU2VnbWVudHMsICJEYXRhIHNlY3Rpb24ncyBj
b3VudCBpcyB0b28gYmlnICIsIHNlZ21lbnRDb3VudCwgIiBtYXhpbXVtICIsIG1heERhdGFTZWdt
ZW50cyk7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5kYXRhLnRyeVJlc2VydmVD
YXBhY2l0eShzZWdtZW50Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3Ig
RGF0YSBzZWN0aW9uJ3MgIiwgc2VnbWVudENvdW50LCAiIHNlZ21lbnRzIik7Ci0KLSAgICBmb3Ig
KHVpbnQzMl90IHNlZ21lbnROdW1iZXIgPSAwOyBzZWdtZW50TnVtYmVyIDwgc2VnbWVudENvdW50
OyArK3NlZ21lbnROdW1iZXIpIHsKLSAgICAgICAgdWludDMyX3QgbWVtb3J5SW5kZXg7Ci0gICAg
ICAgIHVpbnQ2NF90IGluaXRFeHByQml0czsKLSAgICAgICAgdWludDhfdCBpbml0T3Bjb2RlOwot
ICAgICAgICB1aW50MzJfdCBkYXRhQnl0ZUxlbmd0aDsKLQotICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFwYXJzZVZhclVJbnQzMihtZW1vcnlJbmRleCksICJjYW4ndCBnZXQgIiwgc2VnbWVu
dE51bWJlciwgInRoIERhdGEgc2VnbWVudCdzIGluZGV4Iik7Ci0gICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYobWVtb3J5SW5kZXggPj0gbV9tZW1vcnlDb3VudCwgc2VnbWVudE51bWJlciwgInRo
IERhdGEgc2VnbWVudCBoYXMgaW5kZXggIiwgbWVtb3J5SW5kZXgsICIgd2hpY2ggZXhjZWVkcyB0
aGUgbnVtYmVyIG9mIE1lbW9yaWVzICIsIG1fbWVtb3J5Q291bnQpOwotICAgICAgICBUeXBlIGlu
aXRFeHByVHlwZTsKLSAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUluaXRF
eHByKGluaXRPcGNvZGUsIGluaXRFeHByQml0cywgaW5pdEV4cHJUeXBlKSk7Ci0gICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoaW5pdEV4cHJUeXBlICE9IEkzMiwgc2VnbWVudE51bWJlciwgInRo
IERhdGEgc2VnbWVudCdzIGluaXRfZXhwciBtdXN0IHByb2R1Y2UgYW4gaTMyIik7Ci0gICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGRhdGFCeXRlTGVuZ3RoKSwgImNh
bid0IGdldCAiLCBzZWdtZW50TnVtYmVyLCAidGggRGF0YSBzZWdtZW50J3MgZGF0YSBieXRlIGxl
bmd0aCIpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGRhdGFCeXRlTGVuZ3RoID4gbWF4
TW9kdWxlU2l6ZSwgc2VnbWVudE51bWJlciwgInRoIERhdGEgc2VnbWVudCdzIGRhdGEgYnl0ZSBs
ZW5ndGggaXMgdG9vIGJpZyAiLCBkYXRhQnl0ZUxlbmd0aCwgIiBtYXhpbXVtICIsIG1heE1vZHVs
ZVNpemUpOwotCi0gICAgICAgIFNlZ21lbnQqIHNlZ21lbnQgPSBTZWdtZW50OjpjcmVhdGUobWFr
ZUkzMkluaXRFeHByKGluaXRPcGNvZGUsIGluaXRFeHByQml0cyksIGRhdGFCeXRlTGVuZ3RoKTsK
LSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighc2VnbWVudCwgImNhbid0IGFsbG9jYXRlIGVu
b3VnaCBtZW1vcnkgZm9yICIsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQgb2Ygc2l6
ZSAiLCBkYXRhQnl0ZUxlbmd0aCk7Ci0gICAgICAgIG1faW5mby0+ZGF0YS51bmNoZWNrZWRBcHBl
bmQoU2VnbWVudDo6YWRvcHRQdHIoc2VnbWVudCkpOwotICAgICAgICBmb3IgKHVpbnQzMl90IGRh
dGFCeXRlID0gMDsgZGF0YUJ5dGUgPCBkYXRhQnl0ZUxlbmd0aDsgKytkYXRhQnl0ZSkgewotICAg
ICAgICAgICAgdWludDhfdCBieXRlOwotICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
cGFyc2VVSW50OChieXRlKSwgImNhbid0IGdldCAiLCBkYXRhQnl0ZSwgInRoIGRhdGEgYnl0ZSBm
cm9tICIsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQiKTsKLSAgICAgICAgICAgIHNl
Z21lbnQtPmJ5dGUoZGF0YUJ5dGUpID0gYnl0ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1
cm4geyB9OwotfQotICAgIAotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlQ3VzdG9tKHVpbnQzMl90
IHNlY3Rpb25MZW5ndGgpIC0+IFBhcnRpYWxSZXN1bHQKLXsKLSAgICBjb25zdCB1aW50MzJfdCBj
dXN0b21TZWN0aW9uU3RhcnRPZmZzZXQgPSBtX29mZnNldDsKLQotICAgIEN1c3RvbVNlY3Rpb24g
c2VjdGlvbjsKLSAgICB1aW50MzJfdCBjdXN0b21TZWN0aW9uTnVtYmVyID0gbV9pbmZvLT5jdXN0
b21TZWN0aW9ucy5zaXplKCkgKyAxOwotICAgIHVpbnQzMl90IG5hbWVMZW47Ci0gICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighbV9pbmZvLT5jdXN0b21TZWN0aW9ucy50cnlSZXNlcnZlQ2FwYWNpdHko
Y3VzdG9tU2VjdGlvbk51bWJlciksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAi
LCBjdXN0b21TZWN0aW9uTnVtYmVyLCAidGggY3VzdG9tIHNlY3Rpb24iKTsKLSAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihuYW1lTGVuKSwgImNhbid0IGdldCAiLCBjdXN0
b21TZWN0aW9uTnVtYmVyLCAidGggY3VzdG9tIHNlY3Rpb24ncyBuYW1lIGxlbmd0aCIpOwotICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVVVEY4U3RyaW5nKHNlY3Rpb24ubmFtZSwgbmFt
ZUxlbiksICJuYW1lTGVuIGdldCAiLCBjdXN0b21TZWN0aW9uTnVtYmVyLCAidGggY3VzdG9tIHNl
Y3Rpb24ncyBuYW1lIG9mIGxlbmd0aCAiLCBuYW1lTGVuKTsKLQotICAgIHVpbnQzMl90IHBheWxv
YWRCeXRlcyA9IHNlY3Rpb25MZW5ndGggLSAobV9vZmZzZXQgLSBjdXN0b21TZWN0aW9uU3RhcnRP
ZmZzZXQpOwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXNlY3Rpb24ucGF5bG9hZC50cnlSZXNl
cnZlQ2FwYWNpdHkocGF5bG9hZEJ5dGVzKSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkg
Zm9yICIsIGN1c3RvbVNlY3Rpb25OdW1iZXIsICJ0aCBjdXN0b20gc2VjdGlvbidzICIsIHBheWxv
YWRCeXRlcywgIiBieXRlcyIpOwotICAgIGZvciAodWludDMyX3QgYnl0ZU51bWJlciA9IDA7IGJ5
dGVOdW1iZXIgPCBwYXlsb2FkQnl0ZXM7ICsrYnl0ZU51bWJlcikgewotICAgICAgICB1aW50OF90
IGJ5dGU7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUludDgoYnl0ZSksICJj
YW4ndCBnZXQgIiwgYnl0ZU51bWJlciwgInRoIGRhdGEgYnl0ZSBmcm9tICIsIGN1c3RvbVNlY3Rp
b25OdW1iZXIsICJ0aCBjdXN0b20gc2VjdGlvbiIpOwotICAgICAgICBzZWN0aW9uLnBheWxvYWQu
dW5jaGVja2VkQXBwZW5kKGJ5dGUpOwotICAgIH0KLQotICAgIE5hbWUgbmFtZU5hbWUgPSB7ICdu
JywgJ2EnLCAnbScsICdlJyB9OwotICAgIGlmIChzZWN0aW9uLm5hbWUgPT0gbmFtZU5hbWUpIHsK
LSAgICAgICAgTmFtZVNlY3Rpb25QYXJzZXIgbmFtZVNlY3Rpb25QYXJzZXIoc2VjdGlvbi5wYXls
b2FkLmJlZ2luKCksIHNlY3Rpb24ucGF5bG9hZC5zaXplKCksIG1faW5mbyk7Ci0gICAgICAgIGlm
IChhdXRvIG5hbWVTZWN0aW9uID0gbmFtZVNlY3Rpb25QYXJzZXIucGFyc2UoKSkKLSAgICAgICAg
ICAgIG1faW5mby0+bmFtZVNlY3Rpb24gPSBXVEZNb3ZlKCpuYW1lU2VjdGlvbik7Ci0gICAgfQot
Ci0gICAgbV9pbmZvLT5jdXN0b21TZWN0aW9ucy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShzZWN0
aW9uKSk7Ci0KLSAgICByZXR1cm4geyB9OwotfQotCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2Fz
bQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oCmluZGV4IGE2NTFiZTE3Y2UyM2I4NWZiYjk3YmJi
Njg1NzAzYjM5YjY0YjcyYzQuLmQzM2I3Nzk1MzM3M2RiMjdmMTUxOTlkOTgwNDA4MGYwOTI5NmVk
YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJz
ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgK
QEAgLTQ2LDIxICs0Niw3IEBAIGNsYXNzIE1vZHVsZVBhcnNlciA6IHB1YmxpYyBQYXJzZXI8dm9p
ZD4gewogICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2UoKTsKIAogcHJpdmF0ZToK
LQotI2RlZmluZSBXQVNNX1NFQ1RJT05fREVDTEFSRV9QQVJTRVIoTkFNRSwgSUQsIERFU0NSSVBU
SU9OKSBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZSAjIyBOQU1FKCk7Ci0g
ICAgRk9SX0VBQ0hfS05PV05fV0FTTV9TRUNUSU9OKFdBU01fU0VDVElPTl9ERUNMQVJFX1BBUlNF
UikKLSN1bmRlZiBXQVNNX1NFQ1RJT05fREVDTEFSRV9QQVJTRVIKLQotICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlQ3VzdG9tKHVpbnQzMl90KTsKLSAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUdsb2JhbFR5cGUoR2xvYmFsJik7Ci0gICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VNZW1vcnlIZWxwZXIoYm9vbCBp
c0ltcG9ydCk7Ci0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VUYWJs
ZUhlbHBlcihib29sIGlzSW1wb3J0KTsKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBwYXJzZVJlc2l6YWJsZUxpbWl0cyh1aW50MzJfdCYgaW5pdGlhbCwgc3RkOjpvcHRpb25h
bDx1aW50MzJfdD4mIG1heGltdW0pOwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIHBhcnNlSW5pdEV4cHIodWludDhfdCYsIHVpbnQ2NF90JiwgVHlwZSYgaW5pdEV4cHJUeXBl
KTsKLQogICAgIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4gbV9pbmZvOwotICAgIHVpbnQzMl90IG1f
bWVtb3J5Q291bnQgeyAwIH07Ci0gICAgdWludDMyX3QgbV90YWJsZUNvdW50IHsgMCB9OwogfTsK
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21OYW1lU2VjdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU5hbWVTZWN0aW9uLmgKaW5kZXggN2MwMmYyZjQxOTc3MDVhYzhiZWVlZjQ0MTg5OTBk
MjhlZTM0ZjA4NC4uZmU2M2NmNTU0NzM2NmZjMTc0MGMxZjBjNzBiYTgxYmU3NTM2YTg4ZSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU5hbWVTZWN0aW9uLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU5hbWVTZWN0aW9uLmgKQEAgLTM2LDEx
ICszNiwyMCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCiBzdHJ1Y3QgTmFt
ZVNlY3Rpb24gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TmFtZVNlY3Rpb24+IHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShOYW1lU2VjdGlvbik7Ci0KIHB1YmxpYzoKLSAgICBOYW1l
U2VjdGlvbihjb25zdCBzdGQ6Om9wdGlvbmFsPENTdHJpbmc+ICZoYXNoKQotICAgICAgICA6IG1v
ZHVsZUhhc2goaGFzaCA/IGhhc2gtPmxlbmd0aCgpIDogMykKKyAgICBOYW1lU2VjdGlvbigpCisg
ICAgeworICAgICAgICBzZXRIYXNoKHN0ZDo6bnVsbG9wdCk7CisgICAgfQorCisgICAgc3RhdGlj
IFJlZjxOYW1lU2VjdGlvbj4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IE5hbWVTZWN0aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIHNldEhhc2goY29uc3Qgc3Rk
OjpvcHRpb25hbDxDU3RyaW5nPiAmaGFzaCkKICAgICB7CisgICAgICAgIG1vZHVsZUhhc2ggPSBO
YW1lKGhhc2ggPyBoYXNoLT5sZW5ndGgoKSA6IDMpOwogICAgICAgICBpZiAoaGFzaCkgewogICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBoYXNoLT5sZW5ndGgoKTsgKytpKQogICAg
ICAgICAgICAgICAgIG1vZHVsZUhhc2hbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90PigqKGhhc2gt
PmRhdGEoKSArIGkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21OYW1lU2VjdGlvblBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TmFtZVNlY3Rpb25QYXJzZXIuY3BwCmluZGV4IDczMzk2MjE1Y2Y1OGJjNTI2YjM0OGNjMGE4OGM3
MTNkNGRlYzU5NzcuLjVlYmRjMGNjYWU0MDdhMmI5YjlhM2I5MWY2ZWNhNTgyNWMxMmExZWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21OYW1lU2VjdGlvblBhcnNl
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU5hbWVTZWN0aW9uUGFy
c2VyLmNwcApAQCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20g
ewogCiBhdXRvIE5hbWVTZWN0aW9uUGFyc2VyOjpwYXJzZSgpIC0+IFJlc3VsdAogewotICAgIFJl
ZlB0cjxOYW1lU2VjdGlvbj4gbmFtZVNlY3Rpb24oYWRvcHRSZWYoKm5ldyBOYW1lU2VjdGlvbiht
X2luZm8uaGFzaCkpKTsKKyAgICBSZWY8TmFtZVNlY3Rpb24+IG5hbWVTZWN0aW9uID0gTmFtZVNl
Y3Rpb246OmNyZWF0ZSgpOwogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW5hbWVTZWN0aW9uLT5m
dW5jdGlvbk5hbWVzLnRyeVJlc2VydmVDYXBhY2l0eShtX2luZm8uZnVuY3Rpb25JbmRleFNwYWNl
U2l6ZSgpKSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIGZ1bmN0aW9uIG5hbWVz
Iik7CiAgICAgbmFtZVNlY3Rpb24tPmZ1bmN0aW9uTmFtZXMucmVzaXplKG1faW5mby5mdW5jdGlv
bkluZGV4U3BhY2VTaXplKCkpOwogCkBAIC05Niw3ICs5Niw3IEBAIGF1dG8gTmFtZVNlY3Rpb25Q
YXJzZXI6OnBhcnNlKCkgLT4gUmVzdWx0CiAgICAgICAgIH0KICAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihwYXlsb2FkU3RhcnQgKyBwYXlsb2FkTGVuZ3RoICE9IG1fb2Zmc2V0KTsKICAgICB9
Ci0gICAgcmV0dXJuIG5hbWVTZWN0aW9uOworICAgIHJldHVybiBXVEZNb3ZlKG5hbWVTZWN0aW9u
KTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21OYW1lU2VjdGlvblBhcnNlci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmgKaW5kZXggYjdhZjBkOWI5MGE2
ZDUyNmU5MmQ0ZDgyNGZlZWRiNDRkNTk4NzY4My4uZDhlNmFlNzFiMjZiNGJlY2M4Yjg4OGJiZmQ1
ZWIyNzk4NWM2ZDIxOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU5hbWVTZWN0aW9uUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU5hbWVTZWN0aW9uUGFyc2VyLmgKQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBXYXNtIHsKIAotY2xhc3MgTmFtZVNlY3Rpb25QYXJzZXIgOiBwdWJsaWMgUGFy
c2VyPFJlZlB0cjxOYW1lU2VjdGlvbj4+IHsKK2NsYXNzIE5hbWVTZWN0aW9uUGFyc2VyIDogcHVi
bGljIFBhcnNlcjxSZWY8TmFtZVNlY3Rpb24+PiB7CiBwdWJsaWM6CiAgICAgTmFtZVNlY3Rpb25Q
YXJzZXIoY29uc3QgdWludDhfdCogc291cmNlQnVmZmVyLCBzaXplX3Qgc291cmNlTGVuZ3RoLCBj
b25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbykKICAgICAgICAgOiBQYXJzZXIoc291cmNlQnVm
ZmVyLCBzb3VyY2VMZW5ndGgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtT01HUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxh
bi5jcHAKaW5kZXggNDdkZWFkNjRhZjhmZDVjMzY5OWQyZThmNjQwZWQ4YmViMDQyMGM5ZC4uOWUw
YzRhNTY2NmU0NGUwZWFjYzIzMTJhYmJiNzY1NDUzYjg3OWY0OCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcApAQCAtNjksMjEgKzY5LDE4IEBAIHZvaWQgT01H
UGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKIHsKICAgICBBU1NFUlQobV9jb2RlQmxvY2st
PnJ1bm5hYmxlKCkpOwogICAgIEFTU0VSVChtX2NvZGVCbG9jay5wdHIoKSA9PSBtX21vZHVsZS0+
Y29kZUJsb2NrRm9yKG1vZGUoKSkpOwotICAgIGNvbnN0IEZ1bmN0aW9uTG9jYXRpb25JbkJpbmFy
eSYgbG9jYXRpb24gPSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbkxvY2F0aW9uSW5CaW5h
cnlbbV9mdW5jdGlvbkluZGV4XTsKLSAgICBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0ID0g
bV9tb2R1bGVJbmZvcm1hdGlvbi0+c291cmNlLmRhdGEoKSArIGxvY2F0aW9uLnN0YXJ0OwotICAg
IGNvbnN0IHNpemVfdCBmdW5jdGlvbkxlbmd0aCA9IGxvY2F0aW9uLmVuZCAtIGxvY2F0aW9uLnN0
YXJ0OwotICAgIEFTU0VSVChmdW5jdGlvblN0YXJ0ICsgZnVuY3Rpb25MZW5ndGggPD0gbV9tb2R1
bGVJbmZvcm1hdGlvbi0+c291cmNlLmVuZCgpKTsKKyAgICBjb25zdCBGdW5jdGlvbkRhdGEmIGZ1
bmN0aW9uID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25zW21fZnVuY3Rpb25JbmRleF07
CiAKICAgICBjb25zdCB1aW50MzJfdCBmdW5jdGlvbkluZGV4U3BhY2UgPSBtX2Z1bmN0aW9uSW5k
ZXggKyBtX21vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5pbXBvcnRGdW5jdGlvbkNvdW50KCk7
CiAgICAgQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA8IG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1h
dGlvbigpLmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7CiAKICAgICBTaWduYXR1cmVJbmRleCBz
aWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWdu
YXR1cmVJbmRpY2VzW21fZnVuY3Rpb25JbmRleF07CiAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWdu
YXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKLSAgICBB
U1NFUlQodmFsaWRhdGVGdW5jdGlvbihmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2ln
bmF0dXJlLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpKSk7CisgICAgQVNTRVJUKHZhbGlkYXRl
RnVuY3Rpb24oZnVuY3Rpb24uZGF0YS5kYXRhKCksIGZ1bmN0aW9uLmRhdGEuc2l6ZSgpLCBzaWdu
YXR1cmUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCkpKTsKIAogICAgIFZlY3RvcjxVbmxpbmtl
ZFdhc21Ub1dhc21DYWxsPiB1bmxpbmtlZENhbGxzOwogICAgIENvbXBpbGF0aW9uQ29udGV4dCBj
b250ZXh0OwotICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxl
KGNvbnRleHQsIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIHVubGlu
a2VkQ2FsbHMsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25N
b2RlOjpPTUdNb2RlLCBtX2Z1bmN0aW9uSW5kZXgpOworICAgIGF1dG8gcGFyc2VBbmRDb21waWxl
UmVzdWx0ID0gcGFyc2VBbmRDb21waWxlKGNvbnRleHQsIGZ1bmN0aW9uLmRhdGEuZGF0YSgpLCBm
dW5jdGlvbi5kYXRhLnNpemUoKSwgc2lnbmF0dXJlLCB1bmxpbmtlZENhbGxzLCBtX21vZHVsZUlu
Zm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6T01HTW9kZSwgbV9mdW5j
dGlvbkluZGV4KTsKIAogICAgIGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxlUmVzdWx0KSkg
ewogICAgICAgICBmYWlsKGhvbGRMb2NrKG1fbG9jayksIG1ha2VTdHJpbmcocGFyc2VBbmRDb21w
aWxlUmVzdWx0LmVycm9yKCksICJ3aGVuIHRyeWluZyB0byB0aWVyIHVwICIsIFN0cmluZzo6bnVt
YmVyKG1fZnVuY3Rpb25JbmRleCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21QYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYXJz
ZXIuaAppbmRleCA2NTEwNzA1ZWFmNTc4Y2UzM2UzYmQ3NmIyYmM4MzhhZGRhNWY1YjAwLi45ZmM0
YTQ1NGM5YjcyNmZhMTNlODRhNGI0NzNmZWFkODEyYmI5OWYwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVBhcnNlci5oCkBAIC01OCw2ICs1OCwxMCBAQCBjbGFzcyBQYXJzZXIgewog
ICAgIHR5cGVkZWYgRXhwZWN0ZWQ8dm9pZCwgRXJyb3JUeXBlPiBQYXJ0aWFsUmVzdWx0OwogICAg
IHR5cGVkZWYgRXhwZWN0ZWQ8U3VjY2Vzc1R5cGUsIEVycm9yVHlwZT4gUmVzdWx0OwogCisgICAg
Y29uc3QgdWludDhfdCogc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KKyAgICBz
aXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VMZW5ndGg7IH0KKyAgICBzaXpl
X3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKwogcHJvdGVjdGVkOgogICAg
IFBhcnNlcihjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKIApAQCAtODEsMTYgKzg1LDEzIEBAIGNs
YXNzIFBhcnNlciB7CiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VWYWx1ZVR5cGUo
VHlwZSYpOwogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlRXh0ZXJuYWxLaW5kKEV4
dGVybmFsS2luZCYpOwogCi0gICAgY29uc3QgdWludDhfdCogc291cmNlKCkgY29uc3QgeyByZXR1
cm4gbV9zb3VyY2U7IH0KLSAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9zb3Vy
Y2VMZW5ndGg7IH0KLQogICAgIHNpemVfdCBtX29mZnNldCA9IDA7CiAKICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgLi4uQXJncz4KICAgICBORVZFUl9JTkxJTkUgVW5leHBlY3RlZFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gZmFpbChBcmdzLi4uIGFyZ3MpIGNvbnN0CiAgICAgewogICAgICAgICB1
c2luZyBuYW1lc3BhY2UgRmFpbHVyZUhlbHBlcjsgLy8gU2VlIEFETCBjb21tZW50IGluIG5hbWVz
cGFjZSBhYm92ZS4KLSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRSZXN1bHQobWFrZVN0cmluZygi
V2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAiX3MsIFN0cmluZzo6bnVt
YmVyKG1fb2Zmc2V0KSwgIiAvICJfcywgU3RyaW5nOjpudW1iZXIobV9zb3VyY2VMZW5ndGgpLCAi
OiAiX3MsIG1ha2VTdHJpbmcoYXJncykuLi4pKTsKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRS
ZXN1bHQobWFrZVN0cmluZygiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0
ZSAiX3MsIFN0cmluZzo6bnVtYmVyKG1fb2Zmc2V0KSwgIjogIl9zLCBtYWtlU3RyaW5nKGFyZ3Mp
Li4uKSk7CiAgICAgfQogI2RlZmluZSBXQVNNX1BBUlNFUl9GQUlMX0lGKGNvbmRpdGlvbiwgLi4u
KSBkbyB7IFwKICAgICBpZiAoVU5MSUtFTFkoY29uZGl0aW9uKSkgICAgICAgICAgICAgICAgICAg
ICBcCkBAIC0yODUsNiArMjg2LDE0IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI8U3VjY2Vz
c1R5cGU+OjpwYXJzZUV4dGVybmFsS2luZChFeHRlcm5hbEtpbmQmIHJlc3VsdCkKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAorQUxXQVlTX0lOTElORSBJMzJJbml0RXhwciBtYWtlSTMySW5pdEV4cHIo
dWludDhfdCBvcGNvZGUsIHVpbnQzMl90IGJpdHMpCit7CisgICAgUkVMRUFTRV9BU1NFUlQob3Bj
b2RlID09IEkzMkNvbnN0IHx8IG9wY29kZSA9PSBHZXRHbG9iYWwpOworICAgIGlmIChvcGNvZGUg
PT0gSTMyQ29uc3QpCisgICAgICAgIHJldHVybiBJMzJJbml0RXhwcjo6Y29uc3RWYWx1ZShiaXRz
KTsKKyAgICByZXR1cm4gSTMySW5pdEV4cHI6Omdsb2JhbEltcG9ydChiaXRzKTsKK30KKwogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAppbmRleCBhMzRkZWVjYjE2YjE0
MGJlYjUzYjg3YzZlMmE3MDM5ODM0OTMwYzJjLi45OTc0ZWNmZTU1YmFmMjg5ZWVjNTY1MDY2YTFj
ZDQ5YWUyM2E4MjBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
UGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCkBA
IC01Myw4ICs1Myw2IEBAIFBsYW46OlBsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVsZUlu
Zm9ybWF0aW9uPiBpbmZvLCBDb21wbGV0aW9uVGFzayYmIHRhc2ssCiAgICAgOiBtX21vZHVsZUlu
Zm9ybWF0aW9uKFdURk1vdmUoaW5mbykpCiAgICAgLCBtX2NyZWF0ZUVtYmVkZGVyV3JhcHBlcihX
VEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlcikpCiAgICAgLCBtX3Rocm93V2FzbUV4Y2VwdGlv
bih0aHJvd1dhc21FeGNlcHRpb24pCi0gICAgLCBtX3NvdXJjZShtX21vZHVsZUluZm9ybWF0aW9u
LT5zb3VyY2UuZGF0YSgpKQotICAgICwgbV9zb3VyY2VMZW5ndGgobV9tb2R1bGVJbmZvcm1hdGlv
bi0+c291cmNlLnNpemUoKSkKIHsKICAgICBtX2NvbXBsZXRpb25UYXNrcy5hcHBlbmQoc3RkOjpt
YWtlX3BhaXIoY29udGV4dCwgV1RGTW92ZSh0YXNrKSkpOwogfQpAQCAtNjQsMTAgKzYyLDggQEAg
UGxhbjo6UGxhbihDb250ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGluZm8s
IENvbXBsZXRpb25UYXNrJiYgdGFzaykKIHsKIH0KIAotUGxhbjo6UGxhbihDb250ZXh0KiBjb250
ZXh0LCBjb25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgsIENvbXBsZXRp
b25UYXNrJiYgdGFzaykKLSAgICA6IG1fbW9kdWxlSW5mb3JtYXRpb24oYWRvcHRSZWYoKm5ldyBN
b2R1bGVJbmZvcm1hdGlvbihWZWN0b3I8dWludDhfdD4oKSkpKQotICAgICwgbV9zb3VyY2Uoc291
cmNlKQotICAgICwgbV9zb3VyY2VMZW5ndGgoc291cmNlTGVuZ3RoKQorUGxhbjo6UGxhbihDb250
ZXh0KiBjb250ZXh0LCBDb21wbGV0aW9uVGFzayYmIHRhc2spCisgICAgOiBtX21vZHVsZUluZm9y
bWF0aW9uKE1vZHVsZUluZm9ybWF0aW9uOjpjcmVhdGUoKSkKIHsKICAgICBtX2NvbXBsZXRpb25U
YXNrcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoY29udGV4dCwgV1RGTW92ZSh0YXNrKSkpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgKaW5kZXggN2EwN2JmZDNhMGIwNmU5MzQ0
MDk1N2RiMzZkZTZkZGRhZTYzYzY0Yy4uOWVjNjg4NjU4MTMzMWJhY2M5ZjA4ZGQyNmY5YWFiYjRl
OWJkNTNiZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4u
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCkBAIC01NCw3ICs1
NCw3IEBAIGNsYXNzIFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UGxhbj4gewog
ICAgIFBsYW4oQ29udGV4dCosIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4sIENvbXBsZXRpb25UYXNr
JiYpOwogCiAgICAgLy8gTm90ZTogVGhpcyBjb25zdHJ1Y3RvciBzaG91bGQgb25seSBiZSB1c2Vk
IGlmIHlvdSBhcmUgbm90IGFjdHVhbGx5IGJ1aWxkaW5nIGEgbW9kdWxlIGUuZy4gdmFsaWRhdGlv
bi9mdW5jdGlvbiB0ZXN0cwotICAgIEpTX0VYUE9SVF9QUklWQVRFIFBsYW4oQ29udGV4dCosIGNv
bnN0IHVpbnQ4X3QqLCBzaXplX3QsIENvbXBsZXRpb25UYXNrJiYpOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIFBsYW4oQ29udGV4dCosIENvbXBsZXRpb25UYXNrJiYpOwogICAgIHZpcnR1YWwgSlNf
RVhQT1JUX1BSSVZBVEUgflBsYW4oKTsKIAogICAgIC8vIElmIHlvdSBndWFyYW50ZWUgdGhlIG9y
ZGVyaW5nIGhlcmUsIHlvdSBjYW4gcmVseSBvbiBGSUZPIG9mIHRoZQpAQCAtOTAsOCArOTAsNiBA
QCBjbGFzcyBQbGFuIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFBsYW4+IHsKICAgICBD
cmVhdGVFbWJlZGRlcldyYXBwZXIgbV9jcmVhdGVFbWJlZGRlcldyYXBwZXI7CiAgICAgVGhyb3dX
YXNtRXhjZXB0aW9uIG1fdGhyb3dXYXNtRXhjZXB0aW9uIHsgbnVsbHB0ciB9OwogCi0gICAgY29u
c3QgdWludDhfdCogbV9zb3VyY2U7Ci0gICAgY29uc3Qgc2l6ZV90IG1fc291cmNlTGVuZ3RoOwog
ICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsKICAgICBNZW1vcnlNb2RlIG1fbW9kZSB7IE1lbW9y
eU1vZGU6OkJvdW5kc0NoZWNraW5nIH07CiAgICAgTG9jayBtX2xvY2s7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWE5
YmFjYjY3ZGVkMjUwNDUzNWQ4YzJkZTVjNWVkODMzZGVmMTYwMgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9uUGFyc2VyLmNwcApAQCAtMCww
ICsxLDU2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2UgU3V6dWtpIDx5
dXN1a2VzdXp1a2lAc2xvd3N0YXJ0Lm9yZz4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXYXNtU2VjdGlv
blBhcnNlci5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiSWRlbnRp
ZmllcklubGluZXMuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5SW5mb3JtYXRpb24uaCIKKyNpbmNs
dWRlICJXYXNtTmFtZVNlY3Rpb25QYXJzZXIuaCIKKyNpbmNsdWRlICJXYXNtT3BzLmgiCisjaW5j
bHVkZSAiV2FzbVNlY3Rpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7
CisKK2F1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VUeXBlKCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIHVpbnQzMl90IGNvdW50OworCisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJV
SW50MzIoY291bnQpLCAiY2FuJ3QgZ2V0IFR5cGUgc2VjdGlvbidzIGNvdW50Iik7CisgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRihjb3VudCA+IG1heFR5cGVzLCAiVHlwZSBzZWN0aW9uJ3MgY291bnQg
aXMgdG9vIGJpZyAiLCBjb3VudCwgIiBtYXhpbXVtICIsIG1heFR5cGVzKTsKKyAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFtX2luZm8tPnVzZWRTaWduYXR1cmVzLnRyeVJlc2VydmVDYXBhY2l0eShj
b3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBUeXBlIHNlY3Rpb24ncyAi
LCBjb3VudCwgIiBlbnRyaWVzIik7CisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgY291
bnQ7ICsraSkgeworICAgICAgICBpbnQ4X3QgdHlwZTsKKyAgICAgICAgdWludDMyX3QgYXJndW1l
bnRDb3VudDsKKyAgICAgICAgVmVjdG9yPFR5cGU+IGFyZ3VtZW50VHlwZXM7CisKKyAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VJbnQ3KHR5cGUpLCAiY2FuJ3QgZ2V0ICIsIGksICJ0
aCBUeXBlJ3MgdHlwZSIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHR5cGUgIT0gRnVu
YywgaSwgInRoIFR5cGUgaXMgbm9uLUZ1bmMgIiwgdHlwZSk7CisgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGFyZ3VtZW50Q291bnQpLCAiY2FuJ3QgZ2V0ICIsIGks
ICJ0aCBUeXBlJ3MgYXJndW1lbnQgY291bnQiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
Rihhcmd1bWVudENvdW50ID4gbWF4RnVuY3Rpb25QYXJhbXMsIGksICJ0aCBhcmd1bWVudCBjb3Vu
dCBpcyB0b28gYmlnICIsIGFyZ3VtZW50Q291bnQsICIgbWF4aW11bSAiLCBtYXhGdW5jdGlvblBh
cmFtcyk7CisgICAgICAgIFJlZlB0cjxTaWduYXR1cmU+IG1heWJlU2lnbmF0dXJlID0gU2lnbmF0
dXJlOjp0cnlDcmVhdGUoYXJndW1lbnRDb3VudCk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIW1heWJlU2lnbmF0dXJlLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgVHlw
ZSBzZWN0aW9uJ3MgIiwgaSwgInRoIHNpZ25hdHVyZSIpOworICAgICAgICBSZWY8U2lnbmF0dXJl
PiBzaWduYXR1cmUgPSBtYXliZVNpZ25hdHVyZS5yZWxlYXNlTm9uTnVsbCgpOworCisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmd1bWVudENvdW50OyArK2kpIHsKKyAgICAgICAg
ICAgIFR5cGUgYXJndW1lbnRUeXBlOworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
cGFyc2VWYWx1ZVR5cGUoYXJndW1lbnRUeXBlKSwgImNhbid0IGdldCAiLCBpLCAidGggYXJndW1l
bnQgVHlwZSIpOworICAgICAgICAgICAgc2lnbmF0dXJlLT5hcmd1bWVudChpKSA9IGFyZ3VtZW50
VHlwZTsKKyAgICAgICAgfQorCisgICAgICAgIHVpbnQ4X3QgcmV0dXJuQ291bnQ7CisgICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDEocmV0dXJuQ291bnQpLCAiY2FuJ3Qg
Z2V0ICIsIGksICJ0aCBUeXBlJ3MgcmV0dXJuIGNvdW50Iik7CisgICAgICAgIFR5cGUgcmV0dXJu
VHlwZTsKKyAgICAgICAgaWYgKHJldHVybkNvdW50KSB7CisgICAgICAgICAgICBUeXBlIHZhbHVl
OworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYWx1ZVR5cGUodmFsdWUp
LCAiY2FuJ3QgZ2V0ICIsIGksICJ0aCBUeXBlJ3MgcmV0dXJuIHZhbHVlIik7CisgICAgICAgICAg
ICByZXR1cm5UeXBlID0gc3RhdGljX2Nhc3Q8VHlwZT4odmFsdWUpOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIHJldHVyblR5cGUgPSBUeXBlOjpWb2lkOworICAgICAgICBzaWduYXR1cmUt
PnJldHVyblR5cGUoKSA9IHJldHVyblR5cGU7CisKKyAgICAgICAgc3RkOjpwYWlyPFNpZ25hdHVy
ZUluZGV4LCBSZWY8U2lnbmF0dXJlPj4gcmVzdWx0ID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmFk
b3B0KFdURk1vdmUoc2lnbmF0dXJlKSk7CisgICAgICAgIG1faW5mby0+dXNlZFNpZ25hdHVyZXMu
dW5jaGVja2VkQXBwZW5kKFdURk1vdmUocmVzdWx0LnNlY29uZCkpOworICAgIH0KKyAgICByZXR1
cm4geyB9OworfQorCithdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlSW1wb3J0KCkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIHVpbnQzMl90IGltcG9ydENvdW50OworICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIXBhcnNlVmFyVUludDMyKGltcG9ydENvdW50KSwgImNhbid0IGdldCBJbXBvcnQgc2Vj
dGlvbidzIGNvdW50Iik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbXBvcnRDb3VudCA+IG1h
eEltcG9ydHMsICJJbXBvcnQgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgaW1wb3J0Q291
bnQsICIgbWF4aW11bSAiLCBtYXhJbXBvcnRzKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFt
X2luZm8tPmdsb2JhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50KSwgImNhbid0IGFs
bG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGltcG9ydENvdW50LCAiIGdsb2JhbHMiKTsgLy8g
RklYTUUgdGhpcyBvdmVyLWFsbG9jYXRlcyB3aGVuIHdlIGZpeCB0aGUgRklYTUVzIGJlbG93Lgor
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+aW1wb3J0cy50cnlSZXNlcnZlQ2FwYWNp
dHkoaW1wb3J0Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgaW1w
b3J0Q291bnQsICIgaW1wb3J0cyIpOyAvLyBGSVhNRSB0aGlzIG92ZXItYWxsb2NhdGVzIHdoZW4g
d2UgZml4IHRoZSBGSVhNRXMgYmVsb3cuCisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZv
LT5pbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9y
dENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGltcG9ydENvdW50
LCAiIGltcG9ydCBmdW5jdGlvbiBzaWduYXR1cmVzIik7IC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxv
Y2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxvdy4KKworICAgIGZvciAodWludDMyX3Qg
aW1wb3J0TnVtYmVyID0gMDsgaW1wb3J0TnVtYmVyIDwgaW1wb3J0Q291bnQ7ICsraW1wb3J0TnVt
YmVyKSB7CisgICAgICAgIHVpbnQzMl90IG1vZHVsZUxlbjsKKyAgICAgICAgdWludDMyX3QgZmll
bGRMZW47CisgICAgICAgIE5hbWUgbW9kdWxlU3RyaW5nOworICAgICAgICBOYW1lIGZpZWxkU3Ry
aW5nOworICAgICAgICBFeHRlcm5hbEtpbmQga2luZDsKKyAgICAgICAgdW5zaWduZWQga2luZElu
ZGV4IHsgMCB9OworCisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMy
KG1vZHVsZUxlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0J3MgbW9k
dWxlIG5hbWUgbGVuZ3RoIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVV
VEY4U3RyaW5nKG1vZHVsZVN0cmluZywgbW9kdWxlTGVuKSwgImNhbid0IGdldCAiLCBpbXBvcnRO
dW1iZXIsICJ0aCBJbXBvcnQncyBtb2R1bGUgbmFtZSBvZiBsZW5ndGggIiwgbW9kdWxlTGVuKTsK
KworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihmaWVsZExlbiks
ICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0J3MgZmllbGQgbmFtZSBsZW5n
dGggaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIik7CisgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIWNvbnN1bWVVVEY4U3RyaW5nKGZpZWxkU3RyaW5nLCBmaWVsZExlbiksICJjYW4n
dCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0J3MgZmllbGQgbmFtZSBvZiBsZW5ndGgg
IiwgbW9kdWxlTGVuLCAiIGluIG1vZHVsZSAnIiwgbW9kdWxlU3RyaW5nLCAiJyIpOworCisgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlRXh0ZXJuYWxLaW5kKGtpbmQpLCAiY2FuJ3Qg
Z2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdzIGtpbmQgaW4gbW9kdWxlICciLCBtb2R1
bGVTdHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0cmluZywgIiciKTsKKyAgICAgICAgc3dpdGNo
IChraW5kKSB7CisgICAgICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpGdW5jdGlvbjogeworICAgICAg
ICAgICAgdWludDMyX3QgZnVuY3Rpb25TaWduYXR1cmVJbmRleDsKKyAgICAgICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGZ1bmN0aW9uU2lnbmF0dXJlSW5kZXgpLCAi
Y2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdzIGZ1bmN0aW9uIHNpZ25hdHVy
ZSBpbiBtb2R1bGUgJyIsIG1vZHVsZVN0cmluZywgIicgZmllbGQgJyIsIGZpZWxkU3RyaW5nLCAi
JyIpOworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvblNpZ25hdHVyZUlu
ZGV4ID49IG1faW5mby0+dXNlZFNpZ25hdHVyZXMuc2l6ZSgpLCAiaW52YWxpZCBmdW5jdGlvbiBz
aWduYXR1cmUgZm9yICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCwgIiwgZnVuY3Rpb25TaWdu
YXR1cmVJbmRleCwgIiBpcyBvdXQgb2YgcmFuZ2Ugb2YgIiwgbV9pbmZvLT51c2VkU2lnbmF0dXJl
cy5zaXplKCksICIgaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIGZpZWxkICciLCBmaWVs
ZFN0cmluZywgIiciKTsKKyAgICAgICAgICAgIGtpbmRJbmRleCA9IG1faW5mby0+aW1wb3J0RnVu
Y3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsKKyAgICAgICAgICAgIFNpZ25hdHVyZUluZGV4
IHNpZ25hdHVyZUluZGV4ID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChtX2luZm8tPnVzZWRT
aWduYXR1cmVzW2Z1bmN0aW9uU2lnbmF0dXJlSW5kZXhdKTsKKyAgICAgICAgICAgIG1faW5mby0+
aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnVuY2hlY2tlZEFwcGVuZChzaWduYXR1cmVJ
bmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEV4dGVy
bmFsS2luZDo6VGFibGU6IHsKKyAgICAgICAgICAgIGJvb2wgaXNJbXBvcnQgPSB0cnVlOworICAg
ICAgICAgICAgUGFydGlhbFJlc3VsdCByZXN1bHQgPSBwYXJzZVRhYmxlSGVscGVyKGlzSW1wb3J0
KTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoV1RGTW92ZShyZXN1bHQuZXJyb3IoKSkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6Ok1lbW9yeTog
eworICAgICAgICAgICAgYm9vbCBpc0ltcG9ydCA9IHRydWU7CisgICAgICAgICAgICBQYXJ0aWFs
UmVzdWx0IHJlc3VsdCA9IHBhcnNlTWVtb3J5SGVscGVyKGlzSW1wb3J0KTsKKyAgICAgICAgICAg
IGlmIChVTkxJS0VMWSghcmVzdWx0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoV1RGTW92ZShyZXN1bHQuZXJyb3IoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6Okdsb2JhbDogeworICAgICAgICAgICAg
R2xvYmFsIGdsb2JhbDsKKyAgICAgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFy
c2VHbG9iYWxUeXBlKGdsb2JhbCkpOworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihn
bG9iYWwubXV0YWJpbGl0eSA9PSBHbG9iYWw6Ok11dGFibGUsICJNdXRhYmxlIEdsb2JhbHMgYXJl
bid0IHN1cHBvcnRlZCIpOworCisgICAgICAgICAgICBraW5kSW5kZXggPSBtX2luZm8tPmdsb2Jh
bHMuc2l6ZSgpOworICAgICAgICAgICAgbV9pbmZvLT5nbG9iYWxzLnVuY2hlY2tlZEFwcGVuZChX
VEZNb3ZlKGdsb2JhbCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIG1faW5mby0+aW1wb3J0cy51bmNoZWNrZWRBcHBlbmQoeyBXVEZNb3ZlKG1v
ZHVsZVN0cmluZyksIFdURk1vdmUoZmllbGRTdHJpbmcpLCBraW5kLCBraW5kSW5kZXggfSk7Cisg
ICAgfQorCisgICAgbV9pbmZvLT5maXJzdEludGVybmFsR2xvYmFsID0gbV9pbmZvLT5nbG9iYWxz
LnNpemUoKTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNl
RnVuY3Rpb24oKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgdWludDMyX3QgY291bnQ7CisgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoY291bnQpLCAiY2FuJ3QgZ2V0IEZ1
bmN0aW9uIHNlY3Rpb24ncyBjb3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoY291bnQg
PiBtYXhGdW5jdGlvbnMsICJGdW5jdGlvbiBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBj
b3VudCwgIiBtYXhpbXVtICIsIG1heEZ1bmN0aW9ucyk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RighbV9pbmZvLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy50cnlSZXNlcnZlQ2Fw
YWNpdHkoY291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgY291bnQs
ICIgRnVuY3Rpb24gc2lnbmF0dXJlcyIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5m
by0+ZnVuY3Rpb25zLnRyeVJlc2VydmVDYXBhY2l0eShjb3VudCksICJjYW4ndCBhbGxvY2F0ZSBl
bm91Z2ggbWVtb3J5IGZvciAiLCBjb3VudCwgIkZ1bmN0aW9uIGxvY2F0aW9ucyIpOworCisgICAg
Zm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgdWludDMyX3Qg
dHlwZU51bWJlcjsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIo
dHlwZU51bWJlciksICJjYW4ndCBnZXQgIiwgaSwgInRoIEZ1bmN0aW9uJ3MgdHlwZSBudW1iZXIi
KTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0eXBlTnVtYmVyID49IG1faW5mby0+dXNl
ZFNpZ25hdHVyZXMuc2l6ZSgpLCBpLCAidGggRnVuY3Rpb24gdHlwZSBudW1iZXIgaXMgaW52YWxp
ZCAiLCB0eXBlTnVtYmVyKTsKKworICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRl
eCA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQobV9pbmZvLT51c2VkU2lnbmF0dXJlc1t0eXBl
TnVtYmVyXSk7CisgICAgICAgIC8vIFRoZSBDb2RlIHNlY3Rpb24gZml4ZXMgdXAgc3RhcnQgYW5k
IGVuZC4KKyAgICAgICAgc2l6ZV90IHN0YXJ0ID0gMDsKKyAgICAgICAgc2l6ZV90IGVuZCA9IDA7
CisgICAgICAgIG1faW5mby0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXMudW5jaGVj
a2VkQXBwZW5kKHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgbV9pbmZvLT5mdW5jdGlvbnMudW5j
aGVja2VkQXBwZW5kKHsgc3RhcnQsIGVuZCwgVmVjdG9yPHVpbnQ4X3Q+KCkgfSk7CisgICAgfQor
CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZVJlc2l6YWJs
ZUxpbWl0cyh1aW50MzJfdCYgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4mIG1heGlt
dW0pIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBBU1NFUlQoIW1heGltdW0pOworCisgICAgdWlu
dDhfdCBmbGFnczsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQxKGZsYWdz
KSwgImNhbid0IHBhcnNlIHJlc2l6YWJsZSBsaW1pdHMgZmxhZ3MiKTsKKyAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbml0aWFsKSwgImNhbid0IHBhcnNlIHJlc2l6YWJs
ZSBsaW1pdHMgaW5pdGlhbCBwYWdlIGNvdW50Iik7CisKKyAgICBpZiAoZmxhZ3MpIHsKKyAgICAg
ICAgdWludDMyX3QgbWF4aW11bUludDsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFy
c2VWYXJVSW50MzIobWF4aW11bUludCksICJjYW4ndCBwYXJzZSByZXNpemFibGUgbGltaXRzIG1h
eGltdW0gcGFnZSBjb3VudCIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluaXRpYWwg
PiBtYXhpbXVtSW50LCAicmVzaXphYmxlIGxpbWl0cyBoYXMgYSBpbml0aWFsIHBhZ2UgY291bnQg
b2YgIiwgaW5pdGlhbCwgIiB3aGljaCBpcyBncmVhdGVyIHRoYW4gaXRzIG1heGltdW0gIiwgbWF4
aW11bUludCk7CisgICAgICAgIG1heGltdW0gPSBtYXhpbXVtSW50OworICAgIH0KKworICAgIHJl
dHVybiB7IH07Cit9CisKK2F1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VUYWJsZUhlbHBlcihib29s
IGlzSW1wb3J0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRiht
X2luZm8tPnRhYmxlQ291bnQoKSA+IDAsICJDYW5ub3QgaGF2ZSBtb3JlIHRoYW4gb25lIFRhYmxl
IGZvciBub3ciKTsKKworICAgIGludDhfdCB0eXBlOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlSW50Nyh0eXBlKSwgImNhbid0IHBhcnNlIFRhYmxlIHR5cGUiKTsKKyAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKHR5cGUgIT0gV2FzbTo6QW55ZnVuYywgIlRhYmxlIHR5cGUgc2hvdWxkIGJl
IGFueWZ1bmMsIGdvdCAiLCB0eXBlKTsKKworICAgIHVpbnQzMl90IGluaXRpYWw7CisgICAgc3Rk
OjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bTsKKyAgICBQYXJ0aWFsUmVzdWx0IGxpbWl0cyA9
IHBhcnNlUmVzaXphYmxlTGltaXRzKGluaXRpYWwsIG1heGltdW0pOworICAgIGlmIChVTkxJS0VM
WSghbGltaXRzKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFdURk1vdmUobGltaXRz
LmVycm9yKCkpKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluaXRpYWwgPiBtYXhUYWJsZUVu
dHJpZXMsICJUYWJsZSdzIGluaXRpYWwgcGFnZSBjb3VudCBvZiAiLCBpbml0aWFsLCAiIGlzIHRv
byBiaWcsIG1heGltdW0gIiwgbWF4VGFibGVFbnRyaWVzKTsKKworICAgIEFTU0VSVCghbWF4aW11
bSB8fCAqbWF4aW11bSA+PSBpbml0aWFsKTsKKworICAgIG1faW5mby0+dGFibGVJbmZvcm1hdGlv
biA9IFRhYmxlSW5mb3JtYXRpb24oaW5pdGlhbCwgbWF4aW11bSwgaXNJbXBvcnQpOworCisgICAg
cmV0dXJuIHsgfTsKK30KKworYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZVRhYmxlKCkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIHVpbnQzMl90IGNvdW50OworICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIXBhcnNlVmFyVUludDMyKGNvdW50KSwgImNhbid0IGdldCBUYWJsZSdzIGNvdW50Iik7Cisg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihjb3VudCA+IDEsICJUYWJsZSBjb3VudCBvZiAiLCBjb3Vu
dCwgIiBpcyBpbnZhbGlkLCBhdCBtb3N0IDEgaXMgYWxsb3dlZCBmb3Igbm93Iik7CisKKyAgICBp
ZiAoIWNvdW50KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgYm9vbCBpc0ltcG9ydCA9IGZh
bHNlOworICAgIFBhcnRpYWxSZXN1bHQgcmVzdWx0ID0gcGFyc2VUYWJsZUhlbHBlcihpc0ltcG9y
dCk7CisgICAgaWYgKFVOTElLRUxZKCFyZXN1bHQpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoV1RGTW92ZShyZXN1bHQuZXJyb3IoKSkpOworCisgICAgcmV0dXJuIHsgfTsKK30KKwor
YXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZU1lbW9yeUhlbHBlcihib29sIGlzSW1wb3J0KSAtPiBQ
YXJ0aWFsUmVzdWx0Cit7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX2luZm8tPm1lbW9yeUNv
dW50KCksICJ0aGVyZSBjYW4gYXQgbW9zdCBiZSBvbmUgTWVtb3J5IHNlY3Rpb24gZm9yIG5vdyIp
OworCisgICAgUGFnZUNvdW50IGluaXRpYWxQYWdlQ291bnQ7CisgICAgUGFnZUNvdW50IG1heGlt
dW1QYWdlQ291bnQ7CisgICAgeworICAgICAgICB1aW50MzJfdCBpbml0aWFsOworICAgICAgICBz
dGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtOworICAgICAgICBQYXJ0aWFsUmVzdWx0IGxp
bWl0cyA9IHBhcnNlUmVzaXphYmxlTGltaXRzKGluaXRpYWwsIG1heGltdW0pOworICAgICAgICBp
ZiAoVU5MSUtFTFkoIWxpbWl0cykpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
V1RGTW92ZShsaW1pdHMuZXJyb3IoKSkpOworICAgICAgICBBU1NFUlQoIW1heGltdW0gfHwgKm1h
eGltdW0gPj0gaW5pdGlhbCk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIVBhZ2VDb3Vu
dDo6aXNWYWxpZChpbml0aWFsKSwgIk1lbW9yeSdzIGluaXRpYWwgcGFnZSBjb3VudCBvZiAiLCBp
bml0aWFsLCAiIGlzIGludmFsaWQiKTsKKworICAgICAgICBpbml0aWFsUGFnZUNvdW50ID0gUGFn
ZUNvdW50KGluaXRpYWwpOworCisgICAgICAgIGlmIChtYXhpbXVtKSB7CisgICAgICAgICAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFQYWdlQ291bnQ6OmlzVmFsaWQoKm1heGltdW0pLCAiTWVtb3J5
J3MgbWF4aW11bSBwYWdlIGNvdW50IG9mICIsICptYXhpbXVtLCAiIGlzIGludmFsaWQiKTsKKyAg
ICAgICAgICAgIG1heGltdW1QYWdlQ291bnQgPSBQYWdlQ291bnQoKm1heGltdW0pOworICAgICAg
ICB9CisgICAgfQorICAgIEFTU0VSVChpbml0aWFsUGFnZUNvdW50KTsKKyAgICBBU1NFUlQoIW1h
eGltdW1QYWdlQ291bnQgfHwgbWF4aW11bVBhZ2VDb3VudCA+PSBpbml0aWFsUGFnZUNvdW50KTsK
KworICAgIG1faW5mby0+bWVtb3J5ID0gTWVtb3J5SW5mb3JtYXRpb24oaW5pdGlhbFBhZ2VDb3Vu
dCwgbWF4aW11bVBhZ2VDb3VudCwgaXNJbXBvcnQpOworICAgIHJldHVybiB7IH07Cit9CisKK2F1
dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VNZW1vcnkoKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
dWludDhfdCBjb3VudDsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQxKGNv
dW50KSwgImNhbid0IHBhcnNlIE1lbW9yeSBzZWN0aW9uJ3MgY291bnQiKTsKKworICAgIGlmICgh
Y291bnQpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGNv
dW50ICE9IDEsICJNZW1vcnkgc2VjdGlvbiBoYXMgbW9yZSB0aGFuIG9uZSBtZW1vcnksIFdlYkFz
c2VtYmx5IGN1cnJlbnRseSBvbmx5IGFsbG93cyB6ZXJvIG9yIG9uZSIpOworCisgICAgYm9vbCBp
c0ltcG9ydCA9IGZhbHNlOworICAgIHJldHVybiBwYXJzZU1lbW9yeUhlbHBlcihpc0ltcG9ydCk7
Cit9CisKK2F1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VHbG9iYWwoKSAtPiBQYXJ0aWFsUmVzdWx0
Cit7CisgICAgdWludDMyX3QgZ2xvYmFsQ291bnQ7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
cGFyc2VWYXJVSW50MzIoZ2xvYmFsQ291bnQpLCAiY2FuJ3QgZ2V0IEdsb2JhbCBzZWN0aW9uJ3Mg
Y291bnQiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGdsb2JhbENvdW50ID4gbWF4R2xvYmFs
cywgIkdsb2JhbCBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBnbG9iYWxDb3VudCwgIiBt
YXhpbXVtICIsIG1heEdsb2JhbHMpOworICAgIHNpemVfdCB0b3RhbEJ5dGVzID0gZ2xvYmFsQ291
bnQgKyBtX2luZm8tPmZpcnN0SW50ZXJuYWxHbG9iYWw7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9J
Rigoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHRvdGFsQnl0ZXMpIDwgZ2xvYmFsQ291bnQpIHx8ICFt
X2luZm8tPmdsb2JhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KHRvdGFsQnl0ZXMpLCAiY2FuJ3QgYWxs
b2NhdGUgbWVtb3J5IGZvciAiLCB0b3RhbEJ5dGVzLCAiIGdsb2JhbHMiKTsKKworICAgIGZvciAo
dWludDMyX3QgZ2xvYmFsSW5kZXggPSAwOyBnbG9iYWxJbmRleCA8IGdsb2JhbENvdW50OyArK2ds
b2JhbEluZGV4KSB7CisgICAgICAgIEdsb2JhbCBnbG9iYWw7CisgICAgICAgIHVpbnQ4X3QgaW5p
dE9wY29kZTsKKworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlR2xvYmFs
VHlwZShnbG9iYWwpKTsKKyAgICAgICAgVHlwZSB0eXBlRm9ySW5pdE9wY29kZTsKKyAgICAgICAg
V0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUluaXRFeHByKGluaXRPcGNvZGUsIGdsb2Jh
bC5pbml0aWFsQml0c09ySW1wb3J0TnVtYmVyLCB0eXBlRm9ySW5pdE9wY29kZSkpOworICAgICAg
ICBpZiAoaW5pdE9wY29kZSA9PSBHZXRHbG9iYWwpCisgICAgICAgICAgICBnbG9iYWwuaW5pdGlh
bGl6YXRpb25UeXBlID0gR2xvYmFsOjpGcm9tR2xvYmFsSW1wb3J0OworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBnbG9iYWwuaW5pdGlhbGl6YXRpb25UeXBlID0gR2xvYmFsOjpGcm9tRXhwcmVz
c2lvbjsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0eXBlRm9ySW5pdE9wY29kZSAhPSBn
bG9iYWwudHlwZSwgIkdsb2JhbCBpbml0X2V4cHIgb3Bjb2RlIG9mIHR5cGUgIiwgdHlwZUZvcklu
aXRPcGNvZGUsICIgZG9lc24ndCBtYXRjaCBnbG9iYWwncyB0eXBlICIsIGdsb2JhbC50eXBlKTsK
KworICAgICAgICBtX2luZm8tPmdsb2JhbHMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoZ2xvYmFs
KSk7CisgICAgfQorCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBTZWN0aW9uUGFyc2VyOjpw
YXJzZUV4cG9ydCgpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1aW50MzJfdCBleHBvcnRDb3Vu
dDsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihleHBvcnRDb3VudCks
ICJjYW4ndCBnZXQgRXhwb3J0IHNlY3Rpb24ncyBjb3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoZXhwb3J0Q291bnQgPiBtYXhFeHBvcnRzLCAiRXhwb3J0IHNlY3Rpb24ncyBjb3VudCBp
cyB0b28gYmlnICIsIGV4cG9ydENvdW50LCAiIG1heGltdW0gIiwgbWF4RXhwb3J0cyk7CisgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5leHBvcnRzLnRyeVJlc2VydmVDYXBhY2l0eShl
eHBvcnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBleHBvcnRD
b3VudCwgIiBleHBvcnRzIik7CisKKyAgICBIYXNoU2V0PFN0cmluZz4gZXhwb3J0TmFtZXM7Cisg
ICAgZm9yICh1aW50MzJfdCBleHBvcnROdW1iZXIgPSAwOyBleHBvcnROdW1iZXIgPCBleHBvcnRD
b3VudDsgKytleHBvcnROdW1iZXIpIHsKKyAgICAgICAgdWludDMyX3QgZmllbGRMZW47CisgICAg
ICAgIE5hbWUgZmllbGRTdHJpbmc7CisgICAgICAgIEV4dGVybmFsS2luZCBraW5kOworICAgICAg
ICB1bnNpZ25lZCBraW5kSW5kZXg7CisKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFy
c2VWYXJVSW50MzIoZmllbGRMZW4pLCAiY2FuJ3QgZ2V0ICIsIGV4cG9ydE51bWJlciwgInRoIEV4
cG9ydCdzIGZpZWxkIG5hbWUgbGVuZ3RoIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IWNvbnN1bWVVVEY4U3RyaW5nKGZpZWxkU3RyaW5nLCBmaWVsZExlbiksICJjYW4ndCBnZXQgIiwg
ZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0J3MgZmllbGQgbmFtZSBvZiBsZW5ndGggIiwgZmllbGRM
ZW4pOworICAgICAgICBTdHJpbmcgZmllbGROYW1lID0gU3RyaW5nOjpmcm9tVVRGOChmaWVsZFN0
cmluZyk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZXhwb3J0TmFtZXMuY29udGFpbnMo
ZmllbGROYW1lKSwgImR1cGxpY2F0ZSBleHBvcnQ6ICciLCBmaWVsZFN0cmluZywgIiciKTsKKyAg
ICAgICAgZXhwb3J0TmFtZXMuYWRkKGZpZWxkTmFtZSk7CisKKyAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighcGFyc2VFeHRlcm5hbEtpbmQoa2luZCksICJjYW4ndCBnZXQgIiwgZXhwb3J0TnVt
YmVyLCAidGggRXhwb3J0J3Mga2luZCwgbmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOworICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihraW5kSW5kZXgpLCAiY2Fu
J3QgZ2V0ICIsIGV4cG9ydE51bWJlciwgInRoIEV4cG9ydCdzIGtpbmQgaW5kZXgsIG5hbWVkICci
LCBmaWVsZFN0cmluZywgIiciKTsKKyAgICAgICAgc3dpdGNoIChraW5kKSB7CisgICAgICAgIGNh
c2UgRXh0ZXJuYWxLaW5kOjpGdW5jdGlvbjogeworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRihraW5kSW5kZXggPj0gbV9pbmZvLT5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCksIGV4cG9y
dE51bWJlciwgInRoIEV4cG9ydCBoYXMgaW52YWxpZCBmdW5jdGlvbiBudW1iZXIgIiwga2luZElu
ZGV4LCAiIGl0IGV4Y2VlZHMgdGhlIGZ1bmN0aW9uIGluZGV4IHNwYWNlICIsIG1faW5mby0+ZnVu
Y3Rpb25JbmRleFNwYWNlU2l6ZSgpLCAiLCBuYW1lZCAnIiwgZmllbGRTdHJpbmcsICInIik7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEV4dGVybmFsS2luZDo6
VGFibGU6IHsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoa2luZEluZGV4ID49IG1f
aW5mby0+dGFibGVDb3VudCgpLCAiY2FuJ3QgZXhwb3J0IFRhYmxlICIsIGtpbmRJbmRleCwgIiB0
aGVyZSBhcmUgIiwgbV9pbmZvLT50YWJsZUNvdW50KCksICIgVGFibGVzIik7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEV4dGVybmFsS2luZDo6TWVtb3J5OiB7
CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPm1lbW9yeSwgImNhbid0
IGV4cG9ydCBhIG5vbi1leGlzdGVudCBNZW1vcnkiKTsKKyAgICAgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoa2luZEluZGV4LCAiY2FuJ3QgZXhwb3J0IE1lbW9yeSAiLCBraW5kSW5kZXgsICIg
b25seSBvbmUgVGFibGUgaXMgY3VycmVudGx5IHN1cHBvcnRlZCIpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6Okdsb2JhbDogeworICAg
ICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihraW5kSW5kZXggPj0gbV9pbmZvLT5nbG9iYWxz
LnNpemUoKSwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0IGhhcyBpbnZhbGlkIGdsb2JhbCBudW1i
ZXIgIiwga2luZEluZGV4LCAiIGl0IGV4Y2VlZHMgdGhlIGdsb2JhbHMgY291bnQgIiwgbV9pbmZv
LT5nbG9iYWxzLnNpemUoKSwgIiwgbmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOworICAgICAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX2luZm8tPmdsb2JhbHNba2luZEluZGV4XS5tdXRh
YmlsaXR5ICE9IEdsb2JhbDo6SW1tdXRhYmxlLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQgaXNu
J3QgaW1tdXRhYmxlLCBuYW1lZCAnIiwgZmllbGRTdHJpbmcsICInIik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbV9pbmZvLT5leHBvcnRzLnVu
Y2hlY2tlZEFwcGVuZCh7IFdURk1vdmUoZmllbGRTdHJpbmcpLCBraW5kLCBraW5kSW5kZXggfSk7
CisgICAgfQorCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJz
ZVN0YXJ0KCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHVpbnQzMl90IHN0YXJ0RnVuY3Rpb25J
bmRleDsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihzdGFydEZ1bmN0
aW9uSW5kZXgpLCAiY2FuJ3QgZ2V0IFN0YXJ0IGluZGV4Iik7CisgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRihzdGFydEZ1bmN0aW9uSW5kZXggPj0gbV9pbmZvLT5mdW5jdGlvbkluZGV4U3BhY2VTaXpl
KCksICJTdGFydCBpbmRleCAiLCBzdGFydEZ1bmN0aW9uSW5kZXgsICIgZXhjZWVkcyBmdW5jdGlv
biBpbmRleCBzcGFjZSAiLCBtX2luZm8tPmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7CisgICAg
U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX2luZm8tPnNpZ25hdHVyZUluZGV4RnJv
bUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXgpOworICAgIGNvbnN0IFNpZ25h
dHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRl
eCk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCAi
U3RhcnQgZnVuY3Rpb24gY2FuJ3QgaGF2ZSBhcmd1bWVudHMiKTsKKyAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKHNpZ25hdHVyZS5yZXR1cm5UeXBlKCkgIT0gVm9pZCwgIlN0YXJ0IGZ1bmN0aW9uIGNh
bid0IHJldHVybiBhIHZhbHVlIik7CisgICAgbV9pbmZvLT5zdGFydEZ1bmN0aW9uSW5kZXhTcGFj
ZSA9IHN0YXJ0RnVuY3Rpb25JbmRleDsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIFNlY3Rp
b25QYXJzZXI6OnBhcnNlRWxlbWVudCgpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1aW50MzJf
dCBlbGVtZW50Q291bnQ7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIo
ZWxlbWVudENvdW50KSwgImNhbid0IGdldCBFbGVtZW50IHNlY3Rpb24ncyBjb3VudCIpOworICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoZWxlbWVudENvdW50ID4gbWF4VGFibGVFbnRyaWVzLCAiRWxl
bWVudCBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBlbGVtZW50Q291bnQsICIgbWF4aW11
bSAiLCBtYXhUYWJsZUVudHJpZXMpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+
ZWxlbWVudHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGVsZW1lbnRDb3VudCksICJjYW4ndCBhbGxvY2F0
ZSBtZW1vcnkgZm9yICIsIGVsZW1lbnRDb3VudCwgIiBFbGVtZW50cyIpOworICAgIGZvciAodW5z
aWduZWQgZWxlbWVudE51bSA9IDA7IGVsZW1lbnROdW0gPCBlbGVtZW50Q291bnQ7ICsrZWxlbWVu
dE51bSkgeworICAgICAgICB1aW50MzJfdCB0YWJsZUluZGV4OworICAgICAgICB1aW50NjRfdCBp
bml0RXhwckJpdHM7CisgICAgICAgIHVpbnQ4X3QgaW5pdE9wY29kZTsKKyAgICAgICAgdWludDMy
X3QgaW5kZXhDb3VudDsKKworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJ
bnQzMih0YWJsZUluZGV4KSwgImNhbid0IGdldCAiLCBlbGVtZW50TnVtLCAidGggRWxlbWVudCB0
YWJsZSBpbmRleCIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHRhYmxlSW5kZXggPj0g
bV9pbmZvLT50YWJsZUNvdW50KCksICJFbGVtZW50IHNlY3Rpb24gZm9yIFRhYmxlICIsIHRhYmxl
SW5kZXgsICIgZXhjZWVkcyBhdmFpbGFibGUgVGFibGUgIiwgbV9pbmZvLT50YWJsZUNvdW50KCkp
OworICAgICAgICBUeXBlIGluaXRFeHByVHlwZTsKKyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBF
Ul9GQUlMUyhwYXJzZUluaXRFeHByKGluaXRPcGNvZGUsIGluaXRFeHByQml0cywgaW5pdEV4cHJU
eXBlKSk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoaW5pdEV4cHJUeXBlICE9IEkzMiwg
IkVsZW1lbnQgaW5pdF9leHByIG11c3QgcHJvZHVjZSBhbiBpMzIiKTsKKyAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoaW5kZXhDb3VudCksICJjYW4ndCBnZXQgIiwg
ZWxlbWVudE51bSwgInRoIGluZGV4IGNvdW50IGZvciBFbGVtZW50IHNlY3Rpb24iKTsKKyAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbmRleENvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8
dWludDMyX3Q+OjptYXgoKSwgIkVsZW1lbnQgc2VjdGlvbidzICIsIGVsZW1lbnROdW0sICJ0aCBp
bmRleCBjb3VudCBpcyB0b28gYmlnICIsIGluZGV4Q291bnQpOworCisgICAgICAgIEFTU0VSVCgh
IW1faW5mby0+dGFibGVJbmZvcm1hdGlvbik7CisKKyAgICAgICAgRWxlbWVudCBlbGVtZW50KG1h
a2VJMzJJbml0RXhwcihpbml0T3Bjb2RlLCBpbml0RXhwckJpdHMpKTsKKyAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighZWxlbWVudC5mdW5jdGlvbkluZGljZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5
KGluZGV4Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiLCBpbmRleENvdW50LCAi
IEVsZW1lbnQgaW5kaWNlcyIpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBp
bmRleCA8IGluZGV4Q291bnQ7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIHVpbnQzMl90IGZ1bmN0
aW9uSW5kZXg7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQz
MihmdW5jdGlvbkluZGV4KSwgImNhbid0IGdldCBFbGVtZW50IHNlY3Rpb24ncyAiLCBlbGVtZW50
TnVtLCAidGggZWxlbWVudCdzICIsIGluZGV4LCAidGggaW5kZXgiKTsKKyAgICAgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25JbmRleCA+PSBtX2luZm8tPmZ1bmN0aW9uSW5kZXhT
cGFjZVNpemUoKSwgIkVsZW1lbnQgc2VjdGlvbidzICIsIGVsZW1lbnROdW0sICJ0aCBlbGVtZW50
J3MgIiwgaW5kZXgsICJ0aCBpbmRleCBpcyAiLCBmdW5jdGlvbkluZGV4LCAiIHdoaWNoIGV4Y2Vl
ZHMgdGhlIGZ1bmN0aW9uIGluZGV4IHNwYWNlIHNpemUgb2YgIiwgbV9pbmZvLT5mdW5jdGlvbklu
ZGV4U3BhY2VTaXplKCkpOworCisgICAgICAgICAgICBlbGVtZW50LmZ1bmN0aW9uSW5kaWNlcy51
bmNoZWNrZWRBcHBlbmQoZnVuY3Rpb25JbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBtX2lu
Zm8tPmVsZW1lbnRzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGVsZW1lbnQpKTsKKyAgICB9CisK
KyAgICByZXR1cm4geyB9OworfQorCisvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2hhbmdlZCB0
byBiZSBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCBvbmNlIHdlIHN3aXRjaCBvdXIgcGFyc2lu
ZyBpbmZyYXN0cnVjdHVyZSB0byB0aGUgc3RyZWFtaW5nIHBhcnNlci4KK2F1dG8gU2VjdGlvblBh
cnNlcjo6cGFyc2VDb2RlKCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHVpbnQzMl90IGNvdW50
OworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGNvdW50KSwgImNhbid0
IGdldCBDb2RlIHNlY3Rpb24ncyBjb3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoY291
bnQgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLCAiQ29kZSBzZWN0aW9u
J3MgY291bnQgaXMgdG9vIGJpZyAiLCBjb3VudCk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihj
b3VudCAhPSBtX2luZm8tPmZ1bmN0aW9ucy5zaXplKCksICJDb2RlIHNlY3Rpb24gY291bnQgIiwg
Y291bnQsICIgZXhjZWVkcyB0aGUgZGVjbGFyZWQgbnVtYmVyIG9mIGZ1bmN0aW9ucyAiLCBtX2lu
Zm8tPmZ1bmN0aW9ucy5zaXplKCkpOworCisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNv
dW50OyArK2kpIHsKKyAgICAgICAgdWludDMyX3QgZnVuY3Rpb25TaXplOworICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihmdW5jdGlvblNpemUpLCAiY2FuJ3QgZ2V0
ICIsIGksICJ0aCBDb2RlIGZ1bmN0aW9uJ3Mgc2l6ZSIpOworICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKGZ1bmN0aW9uU2l6ZSA+IGxlbmd0aCgpLCAiQ29kZSBmdW5jdGlvbidzIHNpemUgIiwg
ZnVuY3Rpb25TaXplLCAiIGV4Y2VlZHMgdGhlIG1vZHVsZSdzIHNpemUgIiwgbGVuZ3RoKCkpOwor
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGZ1bmN0aW9uU2l6ZSA+IGxlbmd0aCgpIC0gbV9v
ZmZzZXQsICJDb2RlIGZ1bmN0aW9uJ3Mgc2l6ZSAiLCBmdW5jdGlvblNpemUsICIgZXhjZWVkcyB0
aGUgbW9kdWxlJ3MgcmVtYWluaW5nIHNpemUiLCBsZW5ndGgoKSAtIG1fb2Zmc2V0KTsKKyAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvblNpemUgPiBtYXhGdW5jdGlvblNpemUsICJD
b2RlIGZ1bmN0aW9uJ3Mgc2l6ZSAiLCBmdW5jdGlvblNpemUsICIgaXMgdG9vIGJpZyIpOworCisg
ICAgICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhKGZ1bmN0aW9uU2l6ZSk7CisgICAgICAgIHN0ZDo6
bWVtY3B5KGRhdGEuZGF0YSgpLCBzb3VyY2UoKSArIG1fb2Zmc2V0LCBmdW5jdGlvblNpemUpOwor
ICAgICAgICBtX2luZm8tPmZ1bmN0aW9uc1tpXS5zdGFydCA9IG1fb2Zmc2V0SW5Tb3VyY2UgKyBt
X29mZnNldDsKKyAgICAgICAgbV9pbmZvLT5mdW5jdGlvbnNbaV0uZW5kID0gbV9vZmZzZXRJblNv
dXJjZSArIG1fb2Zmc2V0ICsgZnVuY3Rpb25TaXplOworICAgICAgICBtX2luZm8tPmZ1bmN0aW9u
c1tpXS5kYXRhID0gV1RGTW92ZShkYXRhKTsKKyAgICAgICAgbV9vZmZzZXQgKz0gZnVuY3Rpb25T
aXplOworICAgIH0KKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gU2VjdGlvblBhcnNlcjo6
cGFyc2VJbml0RXhwcih1aW50OF90JiBvcGNvZGUsIHVpbnQ2NF90JiBiaXRzT3JJbXBvcnROdW1i
ZXIsIFR5cGUmIHJlc3VsdFR5cGUpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVVJbnQ4KG9wY29kZSksICJjYW4ndCBnZXQgaW5pdF9leHByJ3Mgb3Bj
b2RlIik7CisKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgSTMyQ29uc3Q6IHsKKyAg
ICAgICAgaW50MzJfdCBjb25zdGFudDsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFy
c2VWYXJJbnQzMihjb25zdGFudCksICJjYW4ndCBnZXQgY29uc3RhbnQgdmFsdWUgZm9yIGluaXRf
ZXhwcidzIGkzMi5jb25zdCIpOworICAgICAgICBiaXRzT3JJbXBvcnROdW1iZXIgPSBzdGF0aWNf
Y2FzdDx1aW50NjRfdD4oY29uc3RhbnQpOworICAgICAgICByZXN1bHRUeXBlID0gSTMyOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEk2NENvbnN0OiB7CisgICAgICAgIGludDY0
X3QgY29uc3RhbnQ7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFySW50NjQo
Y29uc3RhbnQpLCAiY2FuJ3QgZ2V0IGNvbnN0YW50IHZhbHVlIGZvciBpbml0X2V4cHIncyBpNjQu
Y29uc3QiKTsKKyAgICAgICAgYml0c09ySW1wb3J0TnVtYmVyID0gY29uc3RhbnQ7CisgICAgICAg
IHJlc3VsdFR5cGUgPSBJNjQ7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRjMy
Q29uc3Q6IHsKKyAgICAgICAgdWludDMyX3QgY29uc3RhbnQ7CisgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXBhcnNlVUludDMyKGNvbnN0YW50KSwgImNhbid0IGdldCBjb25zdGFudCB2YWx1
ZSBmb3IgaW5pdF9leHByJ3MgZjMyLmNvbnN0Iik7CisgICAgICAgIGJpdHNPckltcG9ydE51bWJl
ciA9IGNvbnN0YW50OworICAgICAgICByZXN1bHRUeXBlID0gRjMyOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBjYXNlIEY2NENvbnN0OiB7CisgICAgICAgIHVpbnQ2NF90IGNvbnN0YW50
OworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ2NChjb25zdGFudCksICJj
YW4ndCBnZXQgY29uc3RhbnQgdmFsdWUgZm9yIGluaXRfZXhwcidzIGY2NC5jb25zdCIpOworICAg
ICAgICBiaXRzT3JJbXBvcnROdW1iZXIgPSBjb25zdGFudDsKKyAgICAgICAgcmVzdWx0VHlwZSA9
IEY2NDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBHZXRHbG9iYWw6IHsKKyAg
ICAgICAgdWludDMyX3QgaW5kZXg7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNl
VmFyVUludDMyKGluZGV4KSwgImNhbid0IGdldCBnZXRfZ2xvYmFsJ3MgaW5kZXgiKTsKKworICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluZGV4ID49IG1faW5mby0+Z2xvYmFscy5zaXplKCks
ICJnZXRfZ2xvYmFsJ3MgaW5kZXggIiwgaW5kZXgsICIgZXhjZWVkcyB0aGUgbnVtYmVyIG9mIGds
b2JhbHMgIiwgbV9pbmZvLT5nbG9iYWxzLnNpemUoKSk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoaW5kZXggPj0gbV9pbmZvLT5maXJzdEludGVybmFsR2xvYmFsLCAiZ2V0X2dsb2JhbCBp
bXBvcnQga2luZCBpbmRleCAiLCBpbmRleCwgIiBleGNlZWRzIHRoZSBmaXJzdCBpbnRlcm5hbCBn
bG9iYWwgIiwgbV9pbmZvLT5maXJzdEludGVybmFsR2xvYmFsKTsKKworICAgICAgICBBU1NFUlQo
bV9pbmZvLT5nbG9iYWxzW2luZGV4XS5tdXRhYmlsaXR5ID09IEdsb2JhbDo6SW1tdXRhYmxlKTsK
KyAgICAgICAgcmVzdWx0VHlwZSA9IG1faW5mby0+Z2xvYmFsc1tpbmRleF0udHlwZTsKKyAgICAg
ICAgYml0c09ySW1wb3J0TnVtYmVyID0gaW5kZXg7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYodHJ1ZSwgInVua25vd24g
aW5pdF9leHByIG9wY29kZSAiLCBvcGNvZGUpOworICAgIH0KKworICAgIHVpbnQ4X3QgZW5kT3Bj
b2RlOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUludDgoZW5kT3Bjb2RlKSwgImNh
bid0IGdldCBpbml0X2V4cHIncyBlbmQgb3Bjb2RlIik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RihlbmRPcGNvZGUgIT0gT3BUeXBlOjpFbmQsICJpbml0X2V4cHIgc2hvdWxkIGVuZCB3aXRoIGVu
ZCwgZW5kZWQgd2l0aCAiLCBlbmRPcGNvZGUpOworCisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0
byBTZWN0aW9uUGFyc2VyOjpwYXJzZUdsb2JhbFR5cGUoR2xvYmFsJiBnbG9iYWwpIC0+IFBhcnRp
YWxSZXN1bHQKK3sKKyAgICB1aW50OF90IG11dGFiaWxpdHk7CisgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VWYWx1ZVR5cGUoZ2xvYmFsLnR5cGUpLCAiY2FuJ3QgZ2V0IEdsb2JhbCdzIHZh
bHVlIHR5cGUiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQxKG11dGFi
aWxpdHkpLCAiY2FuJ3QgZ2V0IEdsb2JhbCB0eXBlJ3MgbXV0YWJpbGl0eSIpOworICAgIGdsb2Jh
bC5tdXRhYmlsaXR5ID0gc3RhdGljX2Nhc3Q8R2xvYmFsOjpNdXRhYmlsaXR5PihtdXRhYmlsaXR5
KTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlRGF0YSgp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1aW50MzJfdCBzZWdtZW50Q291bnQ7CisgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoc2VnbWVudENvdW50KSwgImNhbid0IGdl
dCBEYXRhIHNlY3Rpb24ncyBjb3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoc2VnbWVu
dENvdW50ID4gbWF4RGF0YVNlZ21lbnRzLCAiRGF0YSBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJp
ZyAiLCBzZWdtZW50Q291bnQsICIgbWF4aW11bSAiLCBtYXhEYXRhU2VnbWVudHMpOworICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+ZGF0YS50cnlSZXNlcnZlQ2FwYWNpdHkoc2VnbWVu
dENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIERhdGEgc2VjdGlvbidz
ICIsIHNlZ21lbnRDb3VudCwgIiBzZWdtZW50cyIpOworCisgICAgZm9yICh1aW50MzJfdCBzZWdt
ZW50TnVtYmVyID0gMDsgc2VnbWVudE51bWJlciA8IHNlZ21lbnRDb3VudDsgKytzZWdtZW50TnVt
YmVyKSB7CisgICAgICAgIHVpbnQzMl90IG1lbW9yeUluZGV4OworICAgICAgICB1aW50NjRfdCBp
bml0RXhwckJpdHM7CisgICAgICAgIHVpbnQ4X3QgaW5pdE9wY29kZTsKKyAgICAgICAgdWludDMy
X3QgZGF0YUJ5dGVMZW5ndGg7CisKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VW
YXJVSW50MzIobWVtb3J5SW5kZXgpLCAiY2FuJ3QgZ2V0ICIsIHNlZ21lbnROdW1iZXIsICJ0aCBE
YXRhIHNlZ21lbnQncyBpbmRleCIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG1lbW9y
eUluZGV4ID49IG1faW5mby0+bWVtb3J5Q291bnQoKSwgc2VnbWVudE51bWJlciwgInRoIERhdGEg
c2VnbWVudCBoYXMgaW5kZXggIiwgbWVtb3J5SW5kZXgsICIgd2hpY2ggZXhjZWVkcyB0aGUgbnVt
YmVyIG9mIE1lbW9yaWVzICIsIG1faW5mby0+bWVtb3J5Q291bnQoKSk7CisgICAgICAgIFR5cGUg
aW5pdEV4cHJUeXBlOworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlSW5p
dEV4cHIoaW5pdE9wY29kZSwgaW5pdEV4cHJCaXRzLCBpbml0RXhwclR5cGUpKTsKKyAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRihpbml0RXhwclR5cGUgIT0gSTMyLCBzZWdtZW50TnVtYmVyLCAi
dGggRGF0YSBzZWdtZW50J3MgaW5pdF9leHByIG11c3QgcHJvZHVjZSBhbiBpMzIiKTsKKyAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZGF0YUJ5dGVMZW5ndGgpLCAi
Y2FuJ3QgZ2V0ICIsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQncyBkYXRhIGJ5dGUg
bGVuZ3RoIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZGF0YUJ5dGVMZW5ndGggPiBt
YXhNb2R1bGVTaXplLCBzZWdtZW50TnVtYmVyLCAidGggRGF0YSBzZWdtZW50J3MgZGF0YSBieXRl
IGxlbmd0aCBpcyB0b28gYmlnICIsIGRhdGFCeXRlTGVuZ3RoLCAiIG1heGltdW0gIiwgbWF4TW9k
dWxlU2l6ZSk7CisKKyAgICAgICAgU2VnbWVudCogc2VnbWVudCA9IFNlZ21lbnQ6OmNyZWF0ZSht
YWtlSTMySW5pdEV4cHIoaW5pdE9wY29kZSwgaW5pdEV4cHJCaXRzKSwgZGF0YUJ5dGVMZW5ndGgp
OworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFzZWdtZW50LCAiY2FuJ3QgYWxsb2NhdGUg
ZW5vdWdoIG1lbW9yeSBmb3IgIiwgc2VnbWVudE51bWJlciwgInRoIERhdGEgc2VnbWVudCBvZiBz
aXplICIsIGRhdGFCeXRlTGVuZ3RoKTsKKyAgICAgICAgbV9pbmZvLT5kYXRhLnVuY2hlY2tlZEFw
cGVuZChTZWdtZW50OjphZG9wdFB0cihzZWdtZW50KSk7CisgICAgICAgIGZvciAodWludDMyX3Qg
ZGF0YUJ5dGUgPSAwOyBkYXRhQnl0ZSA8IGRhdGFCeXRlTGVuZ3RoOyArK2RhdGFCeXRlKSB7Cisg
ICAgICAgICAgICB1aW50OF90IGJ5dGU7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFwYXJzZVVJbnQ4KGJ5dGUpLCAiY2FuJ3QgZ2V0ICIsIGRhdGFCeXRlLCAidGggZGF0YSBieXRl
IGZyb20gIiwgc2VnbWVudE51bWJlciwgInRoIERhdGEgc2VnbWVudCIpOworICAgICAgICAgICAg
c2VnbWVudC0+Ynl0ZShkYXRhQnl0ZSkgPSBieXRlOworICAgICAgICB9CisgICAgfQorICAgIHJl
dHVybiB7IH07Cit9CisKK2F1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VDdXN0b20oKSAtPiBQYXJ0
aWFsUmVzdWx0Cit7CisgICAgQ3VzdG9tU2VjdGlvbiBzZWN0aW9uOworICAgIHVpbnQzMl90IGN1
c3RvbVNlY3Rpb25OdW1iZXIgPSBtX2luZm8tPmN1c3RvbVNlY3Rpb25zLnNpemUoKSArIDE7Cisg
ICAgdWludDMyX3QgbmFtZUxlbjsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmN1
c3RvbVNlY3Rpb25zLnRyeVJlc2VydmVDYXBhY2l0eShjdXN0b21TZWN0aW9uTnVtYmVyKSwgImNh
bid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGN1c3RvbVNlY3Rpb25OdW1iZXIsICJ0
aCBjdXN0b20gc2VjdGlvbiIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUlu
dDMyKG5hbWVMZW4pLCAiY2FuJ3QgZ2V0ICIsIGN1c3RvbVNlY3Rpb25OdW1iZXIsICJ0aCBjdXN0
b20gc2VjdGlvbidzIG5hbWUgbGVuZ3RoIik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighY29u
c3VtZVVURjhTdHJpbmcoc2VjdGlvbi5uYW1lLCBuYW1lTGVuKSwgIm5hbWVMZW4gZ2V0ICIsIGN1
c3RvbVNlY3Rpb25OdW1iZXIsICJ0aCBjdXN0b20gc2VjdGlvbidzIG5hbWUgb2YgbGVuZ3RoICIs
IG5hbWVMZW4pOworCisgICAgdWludDMyX3QgcGF5bG9hZEJ5dGVzID0gbGVuZ3RoKCkgLSBtX29m
ZnNldDsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFzZWN0aW9uLnBheWxvYWQudHJ5UmVzZXJ2
ZUNhcGFjaXR5KHBheWxvYWRCeXRlcyksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZv
ciAiLCBjdXN0b21TZWN0aW9uTnVtYmVyLCAidGggY3VzdG9tIHNlY3Rpb24ncyAiLCBwYXlsb2Fk
Qnl0ZXMsICIgYnl0ZXMiKTsKKyAgICBmb3IgKHVpbnQzMl90IGJ5dGVOdW1iZXIgPSAwOyBieXRl
TnVtYmVyIDwgcGF5bG9hZEJ5dGVzOyArK2J5dGVOdW1iZXIpIHsKKyAgICAgICAgdWludDhfdCBi
eXRlOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ4KGJ5dGUpLCAiY2Fu
J3QgZ2V0ICIsIGJ5dGVOdW1iZXIsICJ0aCBkYXRhIGJ5dGUgZnJvbSAiLCBjdXN0b21TZWN0aW9u
TnVtYmVyLCAidGggY3VzdG9tIHNlY3Rpb24iKTsKKyAgICAgICAgc2VjdGlvbi5wYXlsb2FkLnVu
Y2hlY2tlZEFwcGVuZChieXRlKTsKKyAgICB9CisKKyAgICBOYW1lIG5hbWVOYW1lID0geyAnbics
ICdhJywgJ20nLCAnZScgfTsKKyAgICBpZiAoc2VjdGlvbi5uYW1lID09IG5hbWVOYW1lKSB7Cisg
ICAgICAgIE5hbWVTZWN0aW9uUGFyc2VyIG5hbWVTZWN0aW9uUGFyc2VyKHNlY3Rpb24ucGF5bG9h
ZC5iZWdpbigpLCBzZWN0aW9uLnBheWxvYWQuc2l6ZSgpLCBtX2luZm8pOworICAgICAgICBpZiAo
YXV0byBuYW1lU2VjdGlvbiA9IG5hbWVTZWN0aW9uUGFyc2VyLnBhcnNlKCkpCisgICAgICAgICAg
ICBtX2luZm8tPm5hbWVTZWN0aW9uID0gV1RGTW92ZSgqbmFtZVNlY3Rpb24pOworICAgIH0KKwor
ICAgIG1faW5mby0+Y3VzdG9tU2VjdGlvbnMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoc2VjdGlv
bikpOworCisgICAgcmV0dXJuIHsgfTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20K
KworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9uUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc4ZDAyODM2ZmM5ZjMyYmMy
Yjc4ZmJmOTBhZDJjNWRhOWY5MTI4M2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kgPHl1c3VrZXN1enVraUBzbG93c3RhcnQu
b3JnPi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJXYXNtRm9ybWF0
LmgiCisjaW5jbHVkZSAiV2FzbU9wcy5oIgorI2luY2x1ZGUgIldhc21QYXJzZXIuaCIKKyNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK2NsYXNzIFNlY3Rpb25QYXJzZXIgZmluYWwgOiBw
dWJsaWMgUGFyc2VyPHZvaWQ+IHsKK3B1YmxpYzoKKyAgICBTZWN0aW9uUGFyc2VyKGNvbnN0IHVp
bnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCBzaXplX3Qgb2Zmc2V0SW5Tb3VyY2UsIE1vZHVsZUlu
Zm9ybWF0aW9uJiBpbmZvKQorICAgICAgICA6IFBhcnNlcihkYXRhLCBzaXplKQorICAgICAgICAs
IG1fb2Zmc2V0SW5Tb3VyY2Uob2Zmc2V0SW5Tb3VyY2UpCisgICAgICAgICwgbV9pbmZvKGluZm8p
CisgICAgeworICAgIH0KKworI2RlZmluZSBXQVNNX1NFQ1RJT05fREVDTEFSRV9QQVJTRVIoTkFN
RSwgSUQsIERFU0NSSVBUSU9OKSBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJz
ZSAjIyBOQU1FKCk7CisgICAgRk9SX0VBQ0hfS05PV05fV0FTTV9TRUNUSU9OKFdBU01fU0VDVElP
Tl9ERUNMQVJFX1BBUlNFUikKKyN1bmRlZiBXQVNNX1NFQ1RJT05fREVDTEFSRV9QQVJTRVIKKwor
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlQ3VzdG9tKCk7CisKK3By
aXZhdGU6CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIC4uLkFyZ3M+CisgICAgTkVWRVJfSU5MSU5F
IFVuZXhwZWN0ZWRSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGZhaWwoQXJncy4uLiBhcmdzKSBj
b25zdAorICAgIHsKKyAgICAgICAgdXNpbmcgbmFtZXNwYWNlIEZhaWx1cmVIZWxwZXI7IC8vIFNl
ZSBBREwgY29tbWVudCBpbiBuYW1lc3BhY2UgYWJvdmUuCisgICAgICAgIHJldHVybiBVbmV4cGVj
dGVkUmVzdWx0KG1ha2VTdHJpbmcoIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0
IGJ5dGUgIl9zLCBTdHJpbmc6Om51bWJlcihtX29mZnNldCArIG1fb2Zmc2V0SW5Tb3VyY2UpLCAi
OiAiX3MsIG1ha2VTdHJpbmcoYXJncykuLi4pKTsKKyAgICB9CisKKyAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUdsb2JhbFR5cGUoR2xvYmFsJik7CisgICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VNZW1vcnlIZWxwZXIoYm9vbCBpc0ltcG9y
dCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VUYWJsZUhlbHBl
cihib29sIGlzSW1wb3J0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBw
YXJzZVJlc2l6YWJsZUxpbWl0cyh1aW50MzJfdCYgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50
MzJfdD4mIG1heGltdW0pOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBh
cnNlSW5pdEV4cHIodWludDhfdCYsIHVpbnQ2NF90JiwgVHlwZSYgaW5pdEV4cHJUeXBlKTsKKwor
ICAgIHNpemVfdCBtX29mZnNldEluU291cmNlOworICAgIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4g
bV9pbmZvOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVO
QUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVN0cmVhbWluZ1BhcnNlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2U4M2ViZDViY2MwNDZlOTNmMjlkMmVj
MTk1ZGI3Y2MyNzdjMGFjMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwCkBAIC0wLDAgKzEsMzkxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kgPHl1c3VrZXN1enVraUBzbG93c3RhcnQu
b3JnPi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21TdHJlYW1pbmdQYXJzZXIuaCIKKworI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIldhc21Nb2R1bGVQYXJzZXIuaCIKKyNpbmNs
dWRlICJXYXNtU2VjdGlvblBhcnNlci5oIgorI2luY2x1ZGUgPHd0Zi9VbmFsaWduZWRBY2Nlc3Mu
aD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworbmFtZXNwYWNlIFdhc21T
dHJlYW1pbmdQYXJzZXJJbnRlcm5hbCB7CitzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9
IGZhbHNlOworfQorCisjZGVmaW5lIFdBU01fU1RSRUFNSU5HX1BBUlNFUl9GQUlMX0lGX0hFTFBF
Ul9GQUlMUyhoZWxwZXIpIFwKKyAgICBkbyB7IFwKKyAgICAgICAgYXV0byBoZWxwZXJSZXN1bHQg
PSBoZWxwZXI7IFwKKyAgICAgICAgaWYgKFVOTElLRUxZKCFoZWxwZXJSZXN1bHQpKSB7IFwKKyAg
ICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gaGVscGVyUmVzdWx0LmVycm9yKCk7IFwKKyAgICAg
ICAgICAgIHJldHVybiBTdGF0ZTo6RmF0YWxFcnJvcjsgXAorICAgICAgICB9IFwKKyAgICB9IHdo
aWxlICgwKQorCitBTFdBWVNfSU5MSU5FIHN0ZDo6b3B0aW9uYWw8dWludDhfdD4gcGFyc2VVSW50
Nyhjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QmIG9mZnNldCwgc2l6ZV90IHNpemUpCit7Cisg
ICAgaWYgKG9mZnNldCA+PSBzaXplKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgdWludDhf
dCByZXN1bHQgPSBkYXRhW29mZnNldCsrXTsKKyAgICBpZiAocmVzdWx0IDwgMHg4MCkKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgLi4uQXJncz4KK05FVkVSX0lOTElORSBhdXRvIFdBUk5fVU5VU0VEX1JFVFVS
TiBTdHJlYW1pbmdQYXJzZXI6OmZhaWwoQXJncy4uLiBhcmdzKSAtPiBTdGF0ZQoreworICAgIHVz
aW5nIG5hbWVzcGFjZSBGYWlsdXJlSGVscGVyOyAvLyBTZWUgQURMIGNvbW1lbnQgaW4gbmFtZXNw
YWNlIGFib3ZlLgorICAgIG1fZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygiV2ViQXNzZW1ibHku
TW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAiX3MsIFN0cmluZzo6bnVtYmVyKG1fb2Zmc2V0
KSwgIjogIl9zLCBtYWtlU3RyaW5nKGFyZ3MpLi4uKTsKKyAgICBkYXRhTG9nTG5JZihXYXNtU3Ry
ZWFtaW5nUGFyc2VySW50ZXJuYWw6OnZlcmJvc2UsIG1fZXJyb3JNZXNzYWdlKTsKKyAgICByZXR1
cm4gU3RhdGU6OkZhdGFsRXJyb3I7Cit9CisKK1N0cmVhbWluZ1BhcnNlcjo6U3RyZWFtaW5nUGFy
c2VyKE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvKQorICAgIDogbV9pbmZvKGluZm8pCit7CisgICAg
ZGF0YUxvZ0xuSWYoV2FzbVN0cmVhbWluZ1BhcnNlckludGVybmFsOjp2ZXJib3NlLCAic3RhcnRp
bmcgdmFsaWRhdGlvbiIpOworfQorCithdXRvIFN0cmVhbWluZ1BhcnNlcjo6cGFyc2VNb2R1bGVI
ZWFkZXIoVmVjdG9yPHVpbnQ4X3Q+JiYgZGF0YSkgLT4gU3RhdGUKK3sKKyAgICBBU1NFUlQoZGF0
YS5zaXplKCkgPT0gbW9kdWxlSGVhZGVyU2l6ZSk7CisgICAgZGF0YUxvZ0xuSWYoV2FzbVN0cmVh
bWluZ1BhcnNlckludGVybmFsOjp2ZXJib3NlLCAiaGVhZGVyIHZhbGlkYXRpb24iKTsKKyAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKGRhdGFbMF0gIT0gJ1wwJyB8fCBkYXRhWzFdICE9ICdhJyB8fCBk
YXRhWzJdICE9ICdzJyB8fCBkYXRhWzNdICE9ICdtJywgIm1vZHVsZXMgZG9lc24ndCBzdGFydCB3
aXRoICdcXDBhc20nIik7CisgICAgdWludDMyX3QgdmVyc2lvbk51bWJlciA9IFdURjo6dW5hbGln
bmVkTG9hZDx1aW50MzJfdD4oZGF0YS5kYXRhKCkgKyA0KTsKKyAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKHZlcnNpb25OdW1iZXIgIT0gZXhwZWN0ZWRWZXJzaW9uTnVtYmVyLCAidW5leHBlY3RlZCB2
ZXJzaW9uIG51bWJlciAiLCB2ZXJzaW9uTnVtYmVyLCAiIGV4cGVjdGVkICIsIGV4cGVjdGVkVmVy
c2lvbk51bWJlcik7CisgICAgcmV0dXJuIFN0YXRlOjpTZWN0aW9uSGVhZGVyOworfQorCithdXRv
IFN0cmVhbWluZ1BhcnNlcjo6cGFyc2VTZWN0aW9uSGVhZGVyKFZlY3Rvcjx1aW50OF90PiYmIGRh
dGEpIC0+IFN0YXRlCit7CisgICAgQVNTRVJUKGRhdGEuc2l6ZSgpID09IHNlY3Rpb25IZWFkZXJT
aXplKTsKKyAgICBzaXplX3Qgb2Zmc2V0ID0gMDsKKyAgICBhdXRvIHJlc3VsdCA9IHBhcnNlVUlu
dDcoZGF0YS5kYXRhKCksIG9mZnNldCwgZGF0YS5zaXplKCkpOworICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIXJlc3VsdCwgImNhbid0IGdldCBzZWN0aW9uIGJ5dGUiKTsKKworICAgIFNlY3Rpb24g
c2VjdGlvbiA9IFNlY3Rpb246OkN1c3RvbTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFkZWNv
ZGVTZWN0aW9uKCpyZXN1bHQsIHNlY3Rpb24pLCAiaW52YWxpZCBzZWN0aW9uIik7CisgICAgQVNT
RVJUKHNlY3Rpb24gIT0gU2VjdGlvbjo6QmVnaW4pOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXZhbGlkYXRlT3JkZXIobV9wcmV2aW91c0tub3duU2VjdGlvbiwgc2VjdGlvbiksICJpbnZhbGlk
IHNlY3Rpb24gb3JkZXIsICIsIG1fcHJldmlvdXNLbm93blNlY3Rpb24sICIgZm9sbG93ZWQgYnkg
Iiwgc2VjdGlvbik7CisgICAgbV9zZWN0aW9uID0gc2VjdGlvbjsKKyAgICBpZiAoaXNLbm93blNl
Y3Rpb24oc2VjdGlvbikpCisgICAgICAgIG1fcHJldmlvdXNLbm93blNlY3Rpb24gPSBzZWN0aW9u
OworICAgIHJldHVybiBTdGF0ZTo6U2VjdGlvblNpemU7Cit9CisKK2F1dG8gU3RyZWFtaW5nUGFy
c2VyOjpwYXJzZVNlY3Rpb25TaXplKHVpbnQzMl90IHNlY3Rpb25MZW5ndGgpIC0+IFN0YXRlCit7
CisgICAgbV9zZWN0aW9uTGVuZ3RoID0gc2VjdGlvbkxlbmd0aDsKKyAgICBpZiAobV9zZWN0aW9u
ID09IFNlY3Rpb246OkNvZGUpCisgICAgICAgIHJldHVybiBTdGF0ZTo6Q29kZVNlY3Rpb25TaXpl
OworICAgIHJldHVybiBTdGF0ZTo6U2VjdGlvbkJvZHk7Cit9CisKK2F1dG8gU3RyZWFtaW5nUGFy
c2VyOjpwYXJzZUNvZGVTZWN0aW9uU2l6ZSh1aW50MzJfdCBmdW5jdGlvbkNvdW50KSAtPiBTdGF0
ZQoreworICAgIG1fZnVuY3Rpb25Db3VudCA9IGZ1bmN0aW9uQ291bnQ7CisgICAgbV9mdW5jdGlv
bkluZGV4ID0gMDsKKyAgICBtX2NvZGVPZmZzZXQgPSBtX29mZnNldDsKKworICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoZnVuY3Rpb25Db3VudCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90
Pjo6bWF4KCksICJDb2RlIHNlY3Rpb24ncyBjb3VudCBpcyB0b28gYmlnICIsIGZ1bmN0aW9uQ291
bnQpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25Db3VudCAhPSBtX2luZm8tPmZ1
bmN0aW9ucy5zaXplKCksICJDb2RlIHNlY3Rpb24gY291bnQgIiwgZnVuY3Rpb25Db3VudCwgIiBl
eGNlZWRzIHRoZSBkZWNsYXJlZCBudW1iZXIgb2YgZnVuY3Rpb25zICIsIG1faW5mby0+ZnVuY3Rp
b25zLnNpemUoKSk7CisKKyAgICBpZiAobV9mdW5jdGlvbkluZGV4ID09IG1fZnVuY3Rpb25Db3Vu
dCkgeworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKChtX2NvZGVPZmZzZXQgKyBtX3NlY3Rp
b25MZW5ndGgpICE9IG1fbmV4dE9mZnNldCwgInBhcnNpbmcgZW5kZWQgYmVmb3JlIHRoZSBlbmQg
b2YgIiwgbV9zZWN0aW9uLCAiIHNlY3Rpb24iKTsKKyAgICAgICAgcmV0dXJuIFN0YXRlOjpTZWN0
aW9uSGVhZGVyOworICAgIH0KKyAgICByZXR1cm4gU3RhdGU6OkZ1bmN0aW9uSGVhZGVyOworfQor
CithdXRvIFN0cmVhbWluZ1BhcnNlcjo6cGFyc2VGdW5jdGlvbkhlYWRlcih1aW50MzJfdCBmdW5j
dGlvblNpemUpIC0+IFN0YXRlCit7CisgICAgbV9mdW5jdGlvblNpemUgPSBmdW5jdGlvblNpemU7
CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvblNpemUgPiBtYXhGdW5jdGlvblNpemUs
ICJDb2RlIGZ1bmN0aW9uJ3Mgc2l6ZSAiLCBmdW5jdGlvblNpemUsICIgaXMgdG9vIGJpZyIpOwor
ICAgIHJldHVybiBTdGF0ZTo6RnVuY3Rpb25Cb2R5OworfQorCithdXRvIFN0cmVhbWluZ1BhcnNl
cjo6cGFyc2VGdW5jdGlvbkJvZHkoVmVjdG9yPHVpbnQ4X3Q+JiYgZGF0YSkgLT4gU3RhdGUKK3sK
KyAgICBhdXRvJiBmdW5jdGlvbiA9IG1faW5mby0+ZnVuY3Rpb25zW21fZnVuY3Rpb25JbmRleF07
CisgICAgZnVuY3Rpb24uc3RhcnQgPSBtX29mZnNldDsKKyAgICBmdW5jdGlvbi5lbmQgPSBtX29m
ZnNldCArIG1fZnVuY3Rpb25TaXplOworICAgIGZ1bmN0aW9uLmRhdGEgPSBXVEZNb3ZlKGRhdGEp
OworICAgIGRhdGFMb2dMbklmKFdhc21TdHJlYW1pbmdQYXJzZXJJbnRlcm5hbDo6dmVyYm9zZSwg
IlByb2Nlc3NpbmcgZnVuY3Rpb24gc3RhcnRpbmcgYXQ6ICIsIGZ1bmN0aW9uLnN0YXJ0LCAiIGFu
ZCBlbmRpbmcgYXQ6ICIsIGZ1bmN0aW9uLmVuZCk7CisgICAgKyttX2Z1bmN0aW9uSW5kZXg7Cisg
ICAgaWYgKG1fZnVuY3Rpb25JbmRleCA9PSBtX2Z1bmN0aW9uQ291bnQpIHsKKyAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRigobV9jb2RlT2Zmc2V0ICsgbV9zZWN0aW9uTGVuZ3RoKSAhPSAobV9v
ZmZzZXQgKyBtX2Z1bmN0aW9uU2l6ZSksICJwYXJzaW5nIGVuZGVkIGJlZm9yZSB0aGUgZW5kIG9m
ICIsIG1fc2VjdGlvbiwgIiBzZWN0aW9uIik7CisgICAgICAgIHJldHVybiBTdGF0ZTo6U2VjdGlv
bkhlYWRlcjsKKyAgICB9CisgICAgcmV0dXJuIFN0YXRlOjpGdW5jdGlvbkhlYWRlcjsKK30KKwor
YXV0byBTdHJlYW1pbmdQYXJzZXI6OnBhcnNlU2VjdGlvbkJvZHkoVmVjdG9yPHVpbnQ4X3Q+JiYg
ZGF0YSkgLT4gU3RhdGUKK3sKKyAgICBTZWN0aW9uUGFyc2VyIHBhcnNlcihkYXRhLmRhdGEoKSwg
ZGF0YS5zaXplKCksIG1fb2Zmc2V0LCBtX2luZm8uZ2V0KCkpOworICAgIHN3aXRjaCAobV9zZWN0
aW9uKSB7CisjZGVmaW5lIFdBU01fU0VDVElPTl9QQVJTRShOQU1FLCBJRCwgREVTQ1JJUFRJT04p
IFwKKyAgICBjYXNlIFNlY3Rpb246Ok5BTUU6IHsgXAorICAgICAgICBXQVNNX1NUUkVBTUlOR19Q
QVJTRVJfRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VyLnBhcnNlICMjIE5BTUUoKSk7IFwKKyAg
ICAgICAgYnJlYWs7IFwKKyAgICB9CisgICAgRk9SX0VBQ0hfS05PV05fV0FTTV9TRUNUSU9OKFdB
U01fU0VDVElPTl9QQVJTRSkKKyN1bmRlZiBXQVNNX1NFQ1RJT05fUEFSU0UKKworICAgIGNhc2Ug
U2VjdGlvbjo6Q3VzdG9tOiB7CisgICAgICAgIFdBU01fU1RSRUFNSU5HX1BBUlNFUl9GQUlMX0lG
X0hFTFBFUl9GQUlMUyhwYXJzZXIucGFyc2VDdXN0b20oKSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIGNhc2UgU2VjdGlvbjo6QmVnaW46IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KKworICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYocGFyc2VyLmxlbmd0aCgpICE9IHBhcnNlci5vZmZzZXQoKSwgInBhcnNp
bmcgZW5kZWQgYmVmb3JlIHRoZSBlbmQgb2YgIiwgbV9zZWN0aW9uLCAiIHNlY3Rpb24iKTsKKwor
ICAgIHJldHVybiBTdGF0ZTo6U2VjdGlvbkhlYWRlcjsKK30KKworYXV0byBTdHJlYW1pbmdQYXJz
ZXI6OmNvbnN1bWUoY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBieXRlc1NpemUsIHNpemVf
dCYgb2Zmc2V0SW5CeXRlcywgc2l6ZV90IHJlcXVpcmVkU2l6ZSkgLT4gc3RkOjpvcHRpb25hbDxW
ZWN0b3I8dWludDhfdD4+Cit7CisgICAgaWYgKG1fcmVtYWluaW5nLnNpemUoKSA9PSByZXF1aXJl
ZFNpemUpIHsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdCA9IFdURk1vdmUobV9yZW1h
aW5pbmcpOworICAgICAgICBtX25leHRPZmZzZXQgKz0gcmVxdWlyZWRTaXplOworICAgICAgICBy
ZXR1cm4gV1RGTW92ZShyZXN1bHQpOworICAgIH0KKworICAgIGlmIChtX3JlbWFpbmluZy5zaXpl
KCkgPiByZXF1aXJlZFNpemUpIHsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdChyZXF1
aXJlZFNpemUpOworICAgICAgICBtZW1jcHkocmVzdWx0LmRhdGEoKSwgbV9yZW1haW5pbmcuZGF0
YSgpLCByZXF1aXJlZFNpemUpOworICAgICAgICBtX3JlbWFpbmluZy5yZW1vdmUoMCwgcmVxdWly
ZWRTaXplKTsKKyAgICAgICAgbV9uZXh0T2Zmc2V0ICs9IHJlcXVpcmVkU2l6ZTsKKyAgICAgICAg
cmV0dXJuIFdURk1vdmUocmVzdWx0KTsKKyAgICB9CisKKyAgICBBU1NFUlQobV9yZW1haW5pbmcu
c2l6ZSgpIDwgcmVxdWlyZWRTaXplKTsKKyAgICBzaXplX3QgYnl0ZXNSZW1haW5pbmdTaXplID0g
Ynl0ZXNTaXplIC0gb2Zmc2V0SW5CeXRlczsKKyAgICBzaXplX3QgdG90YWxEYXRhU2l6ZSA9IG1f
cmVtYWluaW5nLnNpemUoKSArIGJ5dGVzUmVtYWluaW5nU2l6ZTsKKyAgICBpZiAodG90YWxEYXRh
U2l6ZSA8IHJlcXVpcmVkU2l6ZSkgeworICAgICAgICBtX3JlbWFpbmluZy5hcHBlbmQoYnl0ZXMg
KyBvZmZzZXRJbkJ5dGVzLCBieXRlc1JlbWFpbmluZ1NpemUpOworICAgICAgICBvZmZzZXRJbkJ5
dGVzID0gYnl0ZXNTaXplOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKwor
ICAgIHNpemVfdCB1c2VkU2l6ZSA9IHJlcXVpcmVkU2l6ZSAtIG1fcmVtYWluaW5nLnNpemUoKTsK
KyAgICBtX3JlbWFpbmluZy5hcHBlbmQoYnl0ZXMgKyBvZmZzZXRJbkJ5dGVzLCB1c2VkU2l6ZSk7
CisgICAgb2Zmc2V0SW5CeXRlcyArPSB1c2VkU2l6ZTsKKyAgICBWZWN0b3I8dWludDhfdD4gcmVz
dWx0ID0gV1RGTW92ZShtX3JlbWFpbmluZyk7CisgICAgbV9uZXh0T2Zmc2V0ICs9IHJlcXVpcmVk
U2l6ZTsKKyAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOworfQorCithdXRvIFN0cmVhbWluZ1Bh
cnNlcjo6Y29uc3VtZVZhclVJbnQzMihjb25zdCB1aW50OF90KiBieXRlcywgc2l6ZV90IGJ5dGVz
U2l6ZSwgc2l6ZV90JiBvZmZzZXRJbkJ5dGVzLCBJc0VuZE9mU3RyZWFtIGlzRW5kT2ZTdHJlYW0p
IC0+IEV4cGVjdGVkPHVpbnQzMl90LCBTdGF0ZT4KK3sKKyAgICBjb25zdGV4cHIgc2l6ZV90IG1h
eFNpemUgPSBXVEY6OkxFQkRlY29kZXI6Om1heEJ5dGVMZW5ndGg8dWludDMyX3Q+KCk7CisgICAg
c2l6ZV90IGJ5dGVzUmVtYWluaW5nU2l6ZSA9IGJ5dGVzU2l6ZSAtIG9mZnNldEluQnl0ZXM7Cisg
ICAgc2l6ZV90IHRvdGFsRGF0YVNpemUgPSBtX3JlbWFpbmluZy5zaXplKCkgKyBieXRlc1JlbWFp
bmluZ1NpemU7CisgICAgaWYgKG1fcmVtYWluaW5nLnNpemUoKSA+PSBtYXhTaXplKSB7CisgICAg
ICAgIC8vIERvIG5vdGhpbmcuCisgICAgfSBlbHNlIGlmICh0b3RhbERhdGFTaXplID49IG1heFNp
emUpIHsKKyAgICAgICAgc2l6ZV90IHVzZWRTaXplID0gbWF4U2l6ZSAtIG1fcmVtYWluaW5nLnNp
emUoKTsKKyAgICAgICAgbV9yZW1haW5pbmcuYXBwZW5kKGJ5dGVzICsgb2Zmc2V0SW5CeXRlcywg
dXNlZFNpemUpOworICAgICAgICBvZmZzZXRJbkJ5dGVzICs9IHVzZWRTaXplOworICAgIH0gZWxz
ZSB7CisgICAgICAgIG1fcmVtYWluaW5nLmFwcGVuZChieXRlcyArIG9mZnNldEluQnl0ZXMsIGJ5
dGVzUmVtYWluaW5nU2l6ZSk7CisgICAgICAgIG9mZnNldEluQnl0ZXMgKz0gYnl0ZXNSZW1haW5p
bmdTaXplOworICAgICAgICAvLyBJZiB0aGUgZ2l2ZW4gYnl0ZXMgYXJlIHRoZSBlbmQgb2YgdGhl
IHN0cmVhbSwgd2UgdHJ5IHRvIHBhcnNlIFZhclVJbnQzMgorICAgICAgICAvLyB3aXRoIHRoZSBj
dXJyZW50IHJlbWFpbmluZyBkYXRhIHNpbmNlIFZhclVJbnQzMiBtYXkgbm90IHJlcXVpcmUgYG1h
eFNpemVgLgorICAgICAgICBpZiAoaXNFbmRPZlN0cmVhbSA9PSBJc0VuZE9mU3RyZWFtOjpObykK
KyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChtX3N0YXRlKTsKKyAgICB9CisKKyAg
ICBzaXplX3Qgb2Zmc2V0ID0gMDsKKyAgICB1aW50MzJfdCByZXN1bHQgPSAwOworICAgIGlmICgh
V1RGOjpMRUJEZWNvZGVyOjpkZWNvZGVVSW50MzIobV9yZW1haW5pbmcuZGF0YSgpLCBtX3JlbWFp
bmluZy5zaXplKCksIG9mZnNldCwgcmVzdWx0KSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKFN0YXRlOjpGYXRhbEVycm9yKTsKKyAgICBzaXplX3QgY29uc3VtZWRTaXplID0gb2Zmc2V0
OworICAgIG1fcmVtYWluaW5nLnJlbW92ZSgwLCBjb25zdW1lZFNpemUpOworICAgIG1fbmV4dE9m
ZnNldCArPSBjb25zdW1lZFNpemU7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYXV0byBTdHJl
YW1pbmdQYXJzZXI6OmFkZEJ5dGVzKGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3QgYnl0ZXNT
aXplLCBJc0VuZE9mU3RyZWFtIGlzRW5kT2ZTdHJlYW0pIC0+IFN0YXRlCit7CisgICAgaWYgKG1f
c3RhdGUgPT0gU3RhdGU6OkZhdGFsRXJyb3IpCisgICAgICAgIHJldHVybiBtX3N0YXRlOworCisg
ICAgbV90b3RhbFNpemUgKz0gYnl0ZXNTaXplOworICAgIGlmIChVTkxJS0VMWShtX3RvdGFsU2l6
ZS5oYXNPdmVyZmxvd2VkKCkgfHwgbV90b3RhbFNpemUudW5zYWZlR2V0KCkgPiBtYXhNb2R1bGVT
aXplKSkgeworICAgICAgICBtX3N0YXRlID0gZmFpbCgibW9kdWxlIHNpemUgaXMgdG9vIGxhcmdl
LCBtYXhpbXVtICIsIG1heE1vZHVsZVNpemUpOworICAgICAgICByZXR1cm4gbV9zdGF0ZTsKKyAg
ICB9CisKKyAgICBpZiAoT3B0aW9uczo6dXNlRWFnZXJXZWJBc3NlbWJseU1vZHVsZUhhc2hpbmco
KSkKKyAgICAgICAgbV9oYXNoZXIuYWRkQnl0ZXMoYnl0ZXMsIGJ5dGVzU2l6ZSk7CisKKyAgICBz
aXplX3Qgb2Zmc2V0SW5CeXRlcyA9IDA7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgc3dp
dGNoIChtX3N0YXRlKSB7CisgICAgICAgIGNhc2UgU3RhdGU6Ok1vZHVsZUhlYWRlcjogeworICAg
ICAgICAgICAgYXV0byByZXN1bHQgPSBjb25zdW1lKGJ5dGVzLCBieXRlc1NpemUsIG9mZnNldElu
Qnl0ZXMsIG1vZHVsZUhlYWRlclNpemUpOworICAgICAgICAgICAgaWYgKCFyZXN1bHQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIG1fc3RhdGU7CisgICAgICAgICAgICBtX3N0YXRlID0gcGFyc2VN
b2R1bGVIZWFkZXIoV1RGTW92ZSgqcmVzdWx0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIGNhc2UgU3RhdGU6OlNlY3Rpb25IZWFkZXI6IHsKKyAgICAgICAgICAg
IGF1dG8gcmVzdWx0ID0gY29uc3VtZShieXRlcywgYnl0ZXNTaXplLCBvZmZzZXRJbkJ5dGVzLCBz
ZWN0aW9uSGVhZGVyU2l6ZSk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbV9zdGF0ZTsKKyAgICAgICAgICAgIG1fc3RhdGUgPSBwYXJzZVNlY3Rpb25I
ZWFkZXIoV1RGTW92ZSgqcmVzdWx0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIGNhc2UgU3RhdGU6OlNlY3Rpb25TaXplOiB7CisgICAgICAgICAgICBhdXRvIHJl
c3VsdCA9IGNvbnN1bWVWYXJVSW50MzIoYnl0ZXMsIGJ5dGVzU2l6ZSwgb2Zmc2V0SW5CeXRlcywg
aXNFbmRPZlN0cmVhbSk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICAgICAg
ICAgIGlmIChyZXN1bHQuZXJyb3IoKSA9PSBTdGF0ZTo6RmF0YWxFcnJvcikKKyAgICAgICAgICAg
ICAgICAgICAgbV9zdGF0ZSA9IGZhaWxPblN0YXRlKG1fc3RhdGUpOworICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IHJlc3VsdC5lcnJvcigpOworICAg
ICAgICAgICAgICAgIHJldHVybiBtX3N0YXRlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
bV9zdGF0ZSA9IHBhcnNlU2VjdGlvblNpemUoKnJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorCisgICAgICAgIGNhc2UgU3RhdGU6OlNlY3Rpb25Cb2R5OiB7CisgICAgICAg
ICAgICBhdXRvIHJlc3VsdCA9IGNvbnN1bWUoYnl0ZXMsIGJ5dGVzU2l6ZSwgb2Zmc2V0SW5CeXRl
cywgbV9zZWN0aW9uTGVuZ3RoKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAg
ICAgICAgIHJldHVybiBtX3N0YXRlOworICAgICAgICAgICAgbV9zdGF0ZSA9IHBhcnNlU2VjdGlv
bkJvZHkoV1RGTW92ZSgqcmVzdWx0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIGNhc2UgU3RhdGU6OkNvZGVTZWN0aW9uU2l6ZTogeworICAgICAgICAgICAgYXV0
byByZXN1bHQgPSBjb25zdW1lVmFyVUludDMyKGJ5dGVzLCBieXRlc1NpemUsIG9mZnNldEluQnl0
ZXMsIGlzRW5kT2ZTdHJlYW0pOworICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAg
ICAgICAgICBpZiAocmVzdWx0LmVycm9yKCkgPT0gU3RhdGU6OkZhdGFsRXJyb3IpCisgICAgICAg
ICAgICAgICAgICAgIG1fc3RhdGUgPSBmYWlsT25TdGF0ZShtX3N0YXRlKTsKKyAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSByZXN1bHQuZXJyb3IoKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gbV9zdGF0ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIG1fc3RhdGUgPSBwYXJzZUNvZGVTZWN0aW9uU2l6ZSgqcmVzdWx0KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBTdGF0ZTo6RnVuY3Rpb25IZWFkZXI6
IHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gY29uc3VtZVZhclVJbnQzMihieXRlcywgYnl0
ZXNTaXplLCBvZmZzZXRJbkJ5dGVzLCBpc0VuZE9mU3RyZWFtKTsKKyAgICAgICAgICAgIGlmICgh
cmVzdWx0KSB7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5lcnJvcigpID09IFN0YXRlOjpG
YXRhbEVycm9yKQorICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gZmFpbE9uU3RhdGUobV9z
dGF0ZSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBtX3N0YXRl
ID0gcmVzdWx0LmVycm9yKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fc3RhdGU7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBtX3N0YXRlID0gcGFyc2VGdW5jdGlvbkhlYWRlcigqcmVz
dWx0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBTdGF0
ZTo6RnVuY3Rpb25Cb2R5OiB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGNvbnN1bWUoYnl0
ZXMsIGJ5dGVzU2l6ZSwgb2Zmc2V0SW5CeXRlcywgbV9mdW5jdGlvblNpemUpOworICAgICAgICAg
ICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fc3RhdGU7CisgICAgICAg
ICAgICBtX3N0YXRlID0gcGFyc2VGdW5jdGlvbkJvZHkoV1RGTW92ZSgqcmVzdWx0KSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgU3RhdGU6OkZpbmlzaGVk
OgorICAgICAgICBjYXNlIFN0YXRlOjpGYXRhbEVycm9yOgorICAgICAgICAgICAgcmV0dXJuIG1f
c3RhdGU7CisgICAgICAgIH0KKworICAgICAgICBtX29mZnNldCA9IG1fbmV4dE9mZnNldDsKKyAg
ICB9Cit9CisKK2F1dG8gU3RyZWFtaW5nUGFyc2VyOjpmYWlsT25TdGF0ZShTdGF0ZSkgLT4gU3Rh
dGUKK3sKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIFN0YXRlOjpNb2R1bGVIZWFk
ZXI6CisgICAgICAgIHJldHVybiBmYWlsKCJleHBlY3RlZCBhIG1vZHVsZSBvZiBhdCBsZWFzdCAi
LCBtb2R1bGVIZWFkZXJTaXplLCAiIGJ5dGVzIik7CisgICAgY2FzZSBTdGF0ZTo6U2VjdGlvbkhl
YWRlcjoKKyAgICAgICAgcmV0dXJuIGZhaWwoImNhbid0IGdldCBzZWN0aW9uIGJ5dGUiKTsKKyAg
ICBjYXNlIFN0YXRlOjpTZWN0aW9uU2l6ZToKKyAgICAgICAgcmV0dXJuIGZhaWwoImNhbid0IGdl
dCAiLCBtX3NlY3Rpb24sICIgc2VjdGlvbidzIGxlbmd0aCIpOworICAgIGNhc2UgU3RhdGU6OlNl
Y3Rpb25Cb2R5OgorICAgICAgICByZXR1cm4gZmFpbChtX3NlY3Rpb24sICIgc2VjdGlvbiBvZiBz
aXplICIsIG1fc2VjdGlvbkxlbmd0aCwgIiB3b3VsZCBvdmVyZmxvdyBNb2R1bGUncyBzaXplIik7
CisgICAgY2FzZSBTdGF0ZTo6Q29kZVNlY3Rpb25TaXplOgorICAgICAgICByZXR1cm4gZmFpbCgi
Y2FuJ3QgZ2V0IENvZGUgc2VjdGlvbidzIGNvdW50Iik7CisgICAgY2FzZSBTdGF0ZTo6RnVuY3Rp
b25IZWFkZXI6CisgICAgICAgIHJldHVybiBmYWlsKCJjYW4ndCBnZXQgIiwgbV9mdW5jdGlvbklu
ZGV4LCAidGggQ29kZSBmdW5jdGlvbidzIHNpemUiKTsKKyAgICBjYXNlIFN0YXRlOjpGdW5jdGlv
bkJvZHk6CisgICAgICAgIHJldHVybiBmYWlsKCJDb2RlIGZ1bmN0aW9uJ3Mgc2l6ZSAiLCBtX2Z1
bmN0aW9uU2l6ZSwgIiBleGNlZWRzIHRoZSBtb2R1bGUncyByZW1haW5pbmcgc2l6ZSIpOworICAg
IGNhc2UgU3RhdGU6OkZpbmlzaGVkOgorICAgIGNhc2UgU3RhdGU6OkZhdGFsRXJyb3I6CisgICAg
ICAgIHJldHVybiBtX3N0YXRlOworICAgIH0KKyAgICByZXR1cm4gbV9zdGF0ZTsKK30KKworYXV0
byBTdHJlYW1pbmdQYXJzZXI6OmZpbmFsaXplKCkgLT4gU3RhdGUKK3sKKyAgICBhZGRCeXRlcyhu
dWxscHRyLCAwLCBJc0VuZE9mU3RyZWFtOjpZZXMpOworICAgIHN3aXRjaCAobV9zdGF0ZSkgewor
ICAgIGNhc2UgU3RhdGU6Ok1vZHVsZUhlYWRlcjoKKyAgICBjYXNlIFN0YXRlOjpTZWN0aW9uU2l6
ZToKKyAgICBjYXNlIFN0YXRlOjpTZWN0aW9uQm9keToKKyAgICBjYXNlIFN0YXRlOjpDb2RlU2Vj
dGlvblNpemU6CisgICAgY2FzZSBTdGF0ZTo6RnVuY3Rpb25IZWFkZXI6CisgICAgY2FzZSBTdGF0
ZTo6RnVuY3Rpb25Cb2R5OgorICAgICAgICBtX3N0YXRlID0gZmFpbE9uU3RhdGUobV9zdGF0ZSk7
CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTdGF0ZTo6RmluaXNoZWQ6CisgICAgY2FzZSBT
dGF0ZTo6RmF0YWxFcnJvcjoKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFN0YXRlOjpTZWN0
aW9uSGVhZGVyOgorICAgICAgICBpZiAobV9yZW1haW5pbmcuaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICBpZiAoT3B0aW9uczo6dXNlRWFnZXJXZWJBc3NlbWJseU1vZHVsZUhhc2hpbmcoKSkKKyAg
ICAgICAgICAgICAgICBtX2luZm8tPm5hbWVTZWN0aW9uLT5zZXRIYXNoKG1faGFzaGVyLmNvbXB1
dGVIZXhEaWdlc3QoKSk7CisgICAgICAgICAgICBtX3N0YXRlID0gU3RhdGU6OkZpbmlzaGVkOwor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fc3RhdGUgPSBmYWlsT25TdGF0ZShTdGF0ZTo6
U2VjdGlvbkhlYWRlcik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gbV9zdGF0
ZTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShX
RUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21T
dHJlYW1pbmdQYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TdHJlYW1p
bmdQYXJzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNWU2ODA5ZjIwNGUxOWNiYjE3ODVlMWFjM2E4ODMzNDRj
OTlkY2FmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVN0cmVhbWluZ1BhcnNlci5oCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE4IFl1c3VrZSBTdXp1a2kgPHl1c3VrZXN1enVraUBzbG93c3RhcnQub3JnPi4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJXYXNtTW9kdWxlSW5mb3JtYXRpb24u
aCIKKyNpbmNsdWRlICJXYXNtUGFyc2VyLmgiCisjaW5jbHVkZSAiV2FzbVNlY3Rpb25zLmgiCisj
aW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5j
bHVkZSA8d3RmL1NIQTEuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisK
K2NsYXNzIFN0cmVhbWluZ1BhcnNlckNsaWVudCB7Cit9OworCitjbGFzcyBTdHJlYW1pbmdQYXJz
ZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGVudW0gY2xh
c3MgU3RhdGUgOiB1aW50OF90IHsKKyAgICAgICAgTW9kdWxlSGVhZGVyLAorICAgICAgICBTZWN0
aW9uSGVhZGVyLAorICAgICAgICBTZWN0aW9uU2l6ZSwKKyAgICAgICAgU2VjdGlvbkJvZHksCisg
ICAgICAgIENvZGVTZWN0aW9uU2l6ZSwKKyAgICAgICAgRnVuY3Rpb25IZWFkZXIsCisgICAgICAg
IEZ1bmN0aW9uQm9keSwKKyAgICAgICAgRmluaXNoZWQsCisgICAgICAgIEZhdGFsRXJyb3IsCisg
ICAgfTsKKworICAgIGVudW0gY2xhc3MgSXNFbmRPZlN0cmVhbSB7IFllcywgTm8gfTsKKworICAg
IFN0cmVhbWluZ1BhcnNlcihNb2R1bGVJbmZvcm1hdGlvbiYpOworCisgICAgU3RhdGUgYWRkQnl0
ZXMoY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBsZW5ndGgpIHsgcmV0dXJuIGFkZEJ5dGVz
KGJ5dGVzLCBsZW5ndGgsIElzRW5kT2ZTdHJlYW06Ok5vKTsgfQorICAgIFN0YXRlIGZpbmFsaXpl
KCk7CisKKyAgICBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZXJyb3JNZXNzYWdlOyB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBtb2R1bGVIZWFkZXJTaXplID0gODsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNl
Y3Rpb25IZWFkZXJTaXplID0gMTsKKworICAgIFN0YXRlIGFkZEJ5dGVzKGNvbnN0IHVpbnQ4X3Qq
IGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBJc0VuZE9mU3RyZWFtKTsKKworICAgIFN0YXRlIHBhcnNl
TW9kdWxlSGVhZGVyKFZlY3Rvcjx1aW50OF90PiYmKTsKKyAgICBTdGF0ZSBwYXJzZVNlY3Rpb25I
ZWFkZXIoVmVjdG9yPHVpbnQ4X3Q+JiYpOworICAgIFN0YXRlIHBhcnNlU2VjdGlvblNpemUodWlu
dDMyX3QpOworICAgIFN0YXRlIHBhcnNlU2VjdGlvbkJvZHkoVmVjdG9yPHVpbnQ4X3Q+JiYpOwor
CisgICAgU3RhdGUgcGFyc2VDb2RlU2VjdGlvblNpemUodWludDMyX3QpOworICAgIFN0YXRlIHBh
cnNlRnVuY3Rpb25IZWFkZXIodWludDMyX3QpOworICAgIFN0YXRlIHBhcnNlRnVuY3Rpb25Cb2R5
KFZlY3Rvcjx1aW50OF90PiYmKTsKKworICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+
PiBjb25zdW1lKGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3QsIHNpemVfdCYsIHNpemVfdCk7
CisgICAgRXhwZWN0ZWQ8dWludDMyX3QsIFN0YXRlPiBjb25zdW1lVmFyVUludDMyKGNvbnN0IHVp
bnQ4X3QqIGJ5dGVzLCBzaXplX3QsIHNpemVfdCYsIElzRW5kT2ZTdHJlYW0pOworCisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIC4uLkFyZ3M+IE5FVkVSX0lOTElORSBTdGF0ZSBXQVJOX1VOVVNFRF9S
RVRVUk4gZmFpbChBcmdzLi4uKTsKKworICAgIFN0YXRlIGZhaWxPblN0YXRlKFN0YXRlKTsKKwor
ICAgIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4gbV9pbmZvOworICAgIFZlY3Rvcjx1aW50OF90PiBt
X3JlbWFpbmluZzsKKyAgICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7CisKKyAgICBDaGVja2VkU2l6
ZSBtX3RvdGFsU2l6ZSB7IDAgfTsKKyAgICBzaXplX3QgbV9vZmZzZXQgeyAwIH07CisgICAgc2l6
ZV90IG1fbmV4dE9mZnNldCB7IDAgfTsKKyAgICBzaXplX3QgbV9jb2RlT2Zmc2V0IHsgMCB9Owor
CisgICAgU0hBMSBtX2hhc2hlcjsKKworICAgIHVpbnQzMl90IG1fc2VjdGlvbkxlbmd0aCB7IDAg
fTsKKworICAgIHVpbnQzMl90IG1fZnVuY3Rpb25Db3VudCB7IDAgfTsKKyAgICB1aW50MzJfdCBt
X2Z1bmN0aW9uSW5kZXggeyAwIH07CisKKyAgICB1aW50MzJfdCBtX2Z1bmN0aW9uU2l6ZSB7IDAg
fTsKKworICAgIFN0YXRlIG1fc3RhdGUgeyBTdGF0ZTo6TW9kdWxlSGVhZGVyIH07CisgICAgU2Vj
dGlvbiBtX3NlY3Rpb24geyBTZWN0aW9uOjpCZWdpbiB9OworICAgIFNlY3Rpb24gbV9wcmV2aW91
c0tub3duU2VjdGlvbiB7IFNlY3Rpb246OkJlZ2luIH07Cit9OworCisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCmlu
ZGV4IDIzZmVmMjJlNThiZWUxZWZjYzAyOWJiNzY4ZTA1MjI2YTkyMDM2YmUuLmFlYmNlMGM0MTA4
MzkxZDYxZjFhOTJjZGYyNTkwNmQ0ZTFiYTgyNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCkBAIC0xNDAsMTEgKzE0
MCw2IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5tX2NvZGVCbG9ja3NbaV0pOwogfQogCi1jb25zdCBWZWN0b3I8dWludDhfdD4mIEpTV2Vi
QXNzZW1ibHlNb2R1bGU6OnNvdXJjZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1vZHVsZUluZm9y
bWF0aW9uKCkuc291cmNlOwotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVO
QUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlNb2R1bGUuaAppbmRleCAxN2JlZDYxMjVmNGU3ZjMxOWE4YjdhZjJlMWRk
Zjg2NGFlYjJmYTVhLi5kMzkzMDA2OTE5ZDI3YWQxNzQ2OWZlMjY5NWRiODQzODQyM2QwODJlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9k
dWxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1v
ZHVsZS5oCkBAIC02OCw4ICs2OCw2IEBAIGNsYXNzIEpTV2ViQXNzZW1ibHlNb2R1bGUgZmluYWwg
OiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewogICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2sqIGNvZGVCbG9jayhXYXNtOjpNZW1vcnlNb2RlIG1vZGUpOwogICAgIHZvaWQgc2V0Q29kZUJs
b2NrKFZNJiwgV2FzbTo6TWVtb3J5TW9kZSwgSlNXZWJBc3NlbWJseUNvZGVCbG9jayopOwogCi0g
ICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBzb3VyY2UoKSBjb25zdDsKLQogICAgIEpTX0VYUE9S
VF9QUklWQVRFIFdhc206Ok1vZHVsZSYgbW9kdWxlKCk7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVByb3RvdHlwZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVByb3RvdHlwZS5jcHAK
aW5kZXggOTZkNGMxNGQ3NGM3ZWUxYWY4YWVlNzYxMGM0OTRhYTdjOTRiMDZjNS4uZGNhZGMwZDBk
YmNlNWE5ZDI1NTNhNGRiZGM4Y2U0YjRmY2M1ZDQ1MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlQcm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5UHJvdG90eXBlLmNwcApAQCAtMjk0LDEw
ICsyOTQsMTAgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1i
bHlWYWxpZGF0ZUZ1bmMoRXhlY1N0YXRlKiBleGVjKQogICAgIHNpemVfdCBieXRlU2l6ZTsKICAg
ICBzdGQ6OnRpZShiYXNlLCBieXRlU2l6ZSkgPSBnZXRXYXNtQnVmZmVyRnJvbVZhbHVlKGV4ZWMs
IGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKLSAgICBCQlFQbGFuIHBsYW4oJnZtLndhc21Db250ZXh0LCBiYXNlLCBi
eXRlU2l6ZSwgQkJRUGxhbjo6VmFsaWRhdGlvbiwgUGxhbjo6ZG9udEZpbmFsaXplKCkpOworICAg
IEJCUVBsYW4gcGxhbigmdm0ud2FzbUNvbnRleHQsIEJCUVBsYW46OlZhbGlkYXRpb24sIFBsYW46
OmRvbnRGaW5hbGl6ZSgpKTsKICAgICAvLyBGSVhNRTogV2UgbWlnaHQgd2FudCB0byB0aHJvdyBh
biBPT00gZXhjZXB0aW9uIGhlcmUgaWYgd2UgZGV0ZWN0IHRoYXQgc29tZXRoaW5nIHdpbGwgT09N
LgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjYwMTUK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihwbGFuLnBhcnNlQW5kVmFsaWRh
dGVNb2R1bGUoKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHBsYW4u
cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZShiYXNlLCBieXRlU2l6ZSkpKTsKIH0KIAogRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseUNvbXBpbGVTdHJlYW1pbmdJbnRlcm5hbChF
eGVjU3RhdGUqIGV4ZWMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9MRUJEZWNvZGVyLmgg
Yi9Tb3VyY2UvV1RGL3d0Zi9MRUJEZWNvZGVyLmgKaW5kZXggOTQ2Mjc3MGM2OTljZDA1ZWE2NTcz
ZTNlZDljMWM5NzVhOGI1MTUwNy4uOTlhNWMwOWFkNGE1NDE4YzgwZDAxMzdiMTBlMDBkMGI0MjZj
MDg4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvTEVCRGVjb2Rlci5oCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL0xFQkRlY29kZXIuaApAQCAtMzYsMTUgKzM2LDIwIEBACiBuYW1lc3BhY2UgV1RG
IHsgbmFtZXNwYWNlIExFQkRlY29kZXIgewogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5l
IGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGRlY29kZVVJbnQoY29uc3QgdWludDhfdCogYnl0ZXMs
IHNpemVfdCBsZW5ndGgsIHNpemVfdCYgb2Zmc2V0LCBUJiByZXN1bHQpCitpbmxpbmUgY29uc3Rl
eHByIHNpemVfdCBtYXhCeXRlTGVuZ3RoKCkKIHsKICAgICBjb25zdCBzaXplX3QgbnVtQml0cyA9
IHNpemVvZihUKSAqIENIQVJfQklUOwotICAgIGNvbnN0IHNpemVfdCBtYXhCeXRlTGVuZ3RoID0g
KG51bUJpdHMgLSAxKSAvIDcgKyAxOyAvLyBudW1CaXRzIC8gNyByb3VuZGluZyB1cC4KKyAgICBy
ZXR1cm4gKG51bUJpdHMgLSAxKSAvIDcgKyAxOyAvLyBudW1CaXRzIC8gNyByb3VuZGluZyB1cC4K
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2lubGluZSBib29sIFdBUk5fVU5VU0VEX1JFVFVS
TiBkZWNvZGVVSW50KGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBzaXplX3Qm
IG9mZnNldCwgVCYgcmVzdWx0KQorewogICAgIGlmIChsZW5ndGggPD0gb2Zmc2V0KQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgcmVzdWx0ID0gMDsKICAgICB1bnNpZ25lZCBzaGlmdCA9IDA7
Ci0gICAgc2l6ZV90IGxhc3QgPSBzdGQ6Om1pbihtYXhCeXRlTGVuZ3RoLCBsZW5ndGggLSBvZmZz
ZXQpIC0gMTsKKyAgICBzaXplX3QgbGFzdCA9IHN0ZDo6bWluKG1heEJ5dGVMZW5ndGg8VD4oKSwg
bGVuZ3RoIC0gb2Zmc2V0KSAtIDE7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgdHJ1ZTsgKytp
KSB7CiAgICAgICAgIHVpbnQ4X3QgYnl0ZSA9IGJ5dGVzW29mZnNldCsrXTsKICAgICAgICAgcmVz
dWx0IHw9IHN0YXRpY19jYXN0PFQ+KGJ5dGUgJiAweDdmKSA8PCBzaGlmdDsKQEAgLTYxLDEzICs2
NiwxMSBAQCBpbmxpbmUgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gZGVjb2RlVUludChjb25zdCB1
aW50OF90KiBieXRlcywgc2l6ZV90IGxlbmd0aCwgcwogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIGlu
bGluZSBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBkZWNvZGVJbnQoY29uc3QgdWludDhfdCogYnl0
ZXMsIHNpemVfdCBsZW5ndGgsIHNpemVfdCYgb2Zmc2V0LCBUJiByZXN1bHQpCiB7Ci0gICAgY29u
c3Qgc2l6ZV90IG51bUJpdHMgPSBzaXplb2YoVCkgKiBDSEFSX0JJVDsKLSAgICBjb25zdCBzaXpl
X3QgbWF4Qnl0ZUxlbmd0aCA9IChudW1CaXRzIC0gMSkgLyA3ICsgMTsgLy8gbnVtQml0cyAvIDcg
cm91bmRpbmcgdXAuCiAgICAgaWYgKGxlbmd0aCA8PSBvZmZzZXQpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICByZXN1bHQgPSAwOwogICAgIHVuc2lnbmVkIHNoaWZ0ID0gMDsKLSAgICBzaXpl
X3QgbGFzdCA9IHN0ZDo6bWluKG1heEJ5dGVMZW5ndGgsIGxlbmd0aCAtIG9mZnNldCkgLSAxOwor
ICAgIHNpemVfdCBsYXN0ID0gc3RkOjptaW4obWF4Qnl0ZUxlbmd0aDxUPigpLCBsZW5ndGggLSBv
ZmZzZXQpIC0gMTsKICAgICB1aW50OF90IGJ5dGU7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
dHJ1ZTsgKytpKSB7CiAgICAgICAgIGJ5dGUgPSBieXRlc1tvZmZzZXQrK107CkBAIC04MCw2ICs4
Myw3IEBAIGlubGluZSBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBkZWNvZGVJbnQoY29uc3QgdWlu
dDhfdCogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIHNpCiAgICAgfQogCiAgICAgdXNpbmcgVW5zaWdu
ZWRUID0gdHlwZW5hbWUgc3RkOjptYWtlX3Vuc2lnbmVkPFQ+Ojp0eXBlOworICAgIGNvbnN0IHNp
emVfdCBudW1CaXRzID0gc2l6ZW9mKFQpICogQ0hBUl9CSVQ7CiAgICAgaWYgKHNoaWZ0IDwgbnVt
Qml0cyAmJiAoYnl0ZSAmIDB4NDApKQogICAgICAgICByZXN1bHQgPSBzdGF0aWNfY2FzdDxUPihz
dGF0aWNfY2FzdDxVbnNpZ25lZFQ+KHJlc3VsdCkgfCAoc3RhdGljX2Nhc3Q8VW5zaWduZWRUPigt
MSkgPDwgc2hpZnQpKTsKICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hh
bmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNDcxMDBkYjcwNzA0ZjBkNDY2NDY4Zjg0
YTY3MzFmNjQyOWFiYTM0ZS4uOTQyMDM4MThiNDA2NGYxMzVmZDY0NWQyOTQ5NmIyNGU2N2JkYWMy
NSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSw0MiBAQAorMjAxOC0wOC0yNyAgWXVzdWtlIFN1enVraSAgPHl1c3VrZXN1enVr
aUBzbG93c3RhcnQub3JnPgorCisgICAgICAgIFtXZWJBc3NlbWJseV0gUGFyc2Ugd2FzbSBtb2R1
bGVzIGluIGEgc3RyZWFtaW5nIGZhc2hpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE4ODk0MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFdhc20gcGFyc2luZyBlcnJvciBzaG91bGQgbm90IHJlcG9ydCB0
aGUgdG90YWwgYnl0ZSBzaXplIHNpbmNlIHN0cmVhbWluZyBwYXJzaW5nIGRvZXMgbm90CisgICAg
ICAgIHdhbnQgdG8gbG9hZCBhbGwgdGhlIGJ5dGVzLgorICAgICAgICBBZGQgYSBzaW1wbGUgdGVz
dCB3YXNtL3N0cmVzcy9zdHJlYW1pbmctYmFzaWMuanMgZm9yIGluaXRpYWwgc3RyZWFtaW5nIHBh
cnNpbmcgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgKiB3YXNtL2Z1bmN0aW9uLXRlc3RzL2lu
dmFsaWQtZHVwbGljYXRlLWV4cG9ydC5qczoKKyAgICAgICAgKiB3YXNtL2Z1bmN0aW9uLXRlc3Rz
L21lbW9yeS1hbGlnbm1lbnQuanM6CisgICAgICAgIChjb25zdC5vcC5vZi5XQVNNLm9wY29kZXMp
OgorICAgICAgICAqIHdhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LXNlY3Rpb24tYW5kLWltcG9y
dC5qczoKKyAgICAgICAgKiB3YXNtL2Z1bmN0aW9uLXRlc3RzL3ZvaWQtYXJndW1lbnQtdHlwZS1z
aG91bGQtYmUtYS12YWxpZGF0aW9uLWVycm9yLmpzOgorICAgICAgICAqIHdhc20vanMtYXBpL01v
ZHVsZS1jb21waWxlLmpzOgorICAgICAgICAoYXN5bmMudGVzdFByb21pc2VBUEkpOgorICAgICAg
ICAqIHdhc20vanMtYXBpL2VsZW1lbnQuanM6CisgICAgICAgIChhc3NlcnQudGhyb3dzLm5ldy5X
ZWJBc3NlbWJseS5Nb2R1bGUuYnVpbGRlci5XZWJBc3NlbWJseSk6CisgICAgICAgIChhc3NlcnQu
dGhyb3dzKToKKyAgICAgICAgKiB3YXNtL2pzLWFwaS9nbG9iYWwtZXJyb3IuanM6CisgICAgICAg
IChhc3NlcnQudGhyb3dzLm5ldy5XZWJBc3NlbWJseS5Nb2R1bGUuYmluKToKKyAgICAgICAgKGFz
c2VydC50aHJvd3MpOgorICAgICAgICAqIHdhc20vanMtYXBpL3RhYmxlLmpzOgorICAgICAgICAo
bmV3LldlYkFzc2VtYmx5Lk1vZHVsZSk6CisgICAgICAgIChhc3NlcnQudGhyb3dzKToKKyAgICAg
ICAgKGFzc2VydEJhZFRhYmxlSW1wb3J0KToKKyAgICAgICAgKiB3YXNtL2pzLWFwaS90ZXN0X0Rh
dGEuanM6CisgICAgICAgIChEYXRhU2VjdGlvbldpdGhvdXRNZW1vcnkpOgorICAgICAgICAqIHdh
c20vanMtYXBpL3Rlc3RfU3RhcnQuanM6CisgICAgICAgIChJbnZhbGlkU3RhcnRGdW5jdGlvbklu
ZGV4KToKKyAgICAgICAgKiB3YXNtL2pzLWFwaS90ZXN0X2Jhc2ljX2FwaS5qczoKKyAgICAgICAg
KGNvbnN0LmMuaW4uY29uc3RydWN0b3JQcm9wZXJ0aWVzLnN3aXRjaCk6CisgICAgICAgICogd2Fz
bS9qcy1hcGkvdmVyc2lvbi5qczoKKyAgICAgICAgKiB3YXNtL3N0cmVzcy9uYW1lU2VjdGlvbi53
YXNtOiBBZGRlZC4KKyAgICAgICAgKiB3YXNtL3N0cmVzcy9zdHJlYW1pbmctYmFzaWMuanM6IEFk
ZGVkLgorICAgICAgICAoY2hlY2spOgorCiAyMDE4LTA4LTI0ICBZdXN1a2UgU3V6dWtpICA8eXVz
dWtlc3V6dWtpQHNsb3dzdGFydC5vcmc+CiAKICAgICAgICAgW0pTQ10gQXJyYXkucHJvdG90eXBl
LnJldmVyc2UgbW9kaWZpZXMgSlNJbW11dGFibGVCdXR0ZXJmbHkKZGlmZiAtLWdpdCBhL0pTVGVz
dHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9pbnZhbGlkLWR1cGxpY2F0ZS1leHBvcnQuanMgYi9KU1Rl
c3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvaW52YWxpZC1kdXBsaWNhdGUtZXhwb3J0LmpzCmluZGV4
IGM0N2IxZTE2NjJjMmNiNjBjOTNkNmM5Yjk1NzM5YmRhYmE3ODBlNzMuLjQxOGQ1MWFhNDk5MDE5
YWEyNDY5YmFhNWYxZmQ4ZTFhYmQzYmYyOTEgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9mdW5j
dGlvbi10ZXN0cy9pbnZhbGlkLWR1cGxpY2F0ZS1leHBvcnQuanMKKysrIGIvSlNUZXN0cy93YXNt
L2Z1bmN0aW9uLXRlc3RzL2ludmFsaWQtZHVwbGljYXRlLWV4cG9ydC5qcwpAQCAtMTUsNSArMTUs
NSBAQAogICAgICAgICAuRW5kKCk7CiAKICAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2Vt
Ymx5KCkuZ2V0KCk7Ci0gICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9k
dWxlKGJpbiksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBk
b2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzEgLyAzOTogZHVwbGljYXRlIGV4cG9ydDogJ2ZvbyciKTsK
KyAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKSwgV2Vi
QXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2Ug
YXQgYnl0ZSAzMTogZHVwbGljYXRlIGV4cG9ydDogJ2ZvbyciKTsKIH0KZGlmZiAtLWdpdCBhL0pT
VGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9tZW1vcnktYWxpZ25tZW50LmpzIGIvSlNUZXN0cy93
YXNtL2Z1bmN0aW9uLXRlc3RzL21lbW9yeS1hbGlnbm1lbnQuanMKaW5kZXggYWJjNTc0MTIxNDZm
MmUzOTcyNjFlNzMyNmVjYzhhNWM4MTlhMDQ5Yy4uZTYwNTg5ODkwMGFhMWJlZDY3YjlkMzJhYzZm
MmFhMDEyZWIyOTllZSAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL21l
bW9yeS1hbGlnbm1lbnQuanMKKysrIGIvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL21lbW9y
eS1hbGlnbm1lbnQuanMKQEAgLTQyLDcgKzQyLDcgQEAKICAgICAgICAgaWYgKGFsaWduTG9nMiA8
PSBtYXhBbGlnbkxvZzIpCiAgICAgICAgICAgICBpbnN0YW5jZSgpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBhc3NlcnQudGhyb3dzKGluc3RhbmNlLCBXZWJBc3NlbWJseS5Db21waWxlRXJy
b3IsIGBXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlICR7c3RhcnR9IC8g
JHtlbmR9OiBieXRlIGFsaWdubWVudCAkezEgPDwgYWxpZ25Mb2cyfSBleGNlZWRzICR7aW5mby50
eXBlfSdzIG5hdHVyYWwgYWxpZ25tZW50ICR7MSA8PCBtYXhBbGlnbkxvZzJ9LCBpbiBmdW5jdGlv
biBhdCBpbmRleCAwYCk7CisgICAgICAgICAgICBhc3NlcnQudGhyb3dzKGluc3RhbmNlLCBXZWJB
c3NlbWJseS5Db21waWxlRXJyb3IsIGBXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBh
dCBieXRlICR7c3RhcnR9OiBieXRlIGFsaWdubWVudCAkezEgPDwgYWxpZ25Mb2cyfSBleGNlZWRz
ICR7aW5mby50eXBlfSdzIG5hdHVyYWwgYWxpZ25tZW50ICR7MSA8PCBtYXhBbGlnbkxvZzJ9LCBp
biBmdW5jdGlvbiBhdCBpbmRleCAwYCk7CiAKICAgICB9CiB9CmRpZmYgLS1naXQgYS9KU1Rlc3Rz
L3dhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LXNlY3Rpb24tYW5kLWltcG9ydC5qcyBiL0pTVGVz
dHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9tZW1vcnktc2VjdGlvbi1hbmQtaW1wb3J0LmpzCmluZGV4
IGExZGI5Y2UyNTc3OTM1MGI1YmQ1NTc3Zjc2N2U2Njc3NzRiZDhiMGIuLjE1MjA3ZWY3MTg4ZWZh
MGY2OTIzNTczYzFkZmVhNWEzZWE1YjcxZmYgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9mdW5j
dGlvbi10ZXN0cy9tZW1vcnktc2VjdGlvbi1hbmQtaW1wb3J0LmpzCisrKyBiL0pTVGVzdHMvd2Fz
bS9mdW5jdGlvbi10ZXN0cy9tZW1vcnktc2VjdGlvbi1hbmQtaW1wb3J0LmpzCkBAIC0yOCw0ICsy
OCw0IEBACiAgICAgICAuQ29kZSgpLkVuZCgpOwogCiBjb25zdCBpMCA9IGluc3RhbnRpYXRlKGJ1
aWxkZXIwKTsKLWFzc2VydC50aHJvd3MoKCkgPT4gaW5zdGFudGlhdGUoYnVpbGRlcjEsIHsgaW1w
OiB7IG1lbW9yeTogaTAuZXhwb3J0cy5tZW1vcnkgfSB9KSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVy
cm9yLCBgV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzNSAvIDQxOiB0
aGVyZSBjYW4gYXQgbW9zdCBiZSBvbmUgTWVtb3J5IHNlY3Rpb24gZm9yIG5vd2ApOworYXNzZXJ0
LnRocm93cygoKSA9PiBpbnN0YW50aWF0ZShidWlsZGVyMSwgeyBpbXA6IHsgbWVtb3J5OiBpMC5l
eHBvcnRzLm1lbW9yeSB9IH0pLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsIGBXZWJBc3NlbWJs
eS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDM1OiB0aGVyZSBjYW4gYXQgbW9zdCBiZSBv
bmUgTWVtb3J5IHNlY3Rpb24gZm9yIG5vd2ApOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2Z1
bmN0aW9uLXRlc3RzL3ZvaWQtYXJndW1lbnQtdHlwZS1zaG91bGQtYmUtYS12YWxpZGF0aW9uLWVy
cm9yLmpzIGIvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL3ZvaWQtYXJndW1lbnQtdHlwZS1z
aG91bGQtYmUtYS12YWxpZGF0aW9uLWVycm9yLmpzCmluZGV4IDQ3MTQ5YjFkN2ZiOTMyMzFjMjVk
MDc4YTg2Mjk4Yjc1MDJiZmY2OGEuLjIxNzg4MTBhNzgxN2Q5NzMzNWU2MmY3OGIzZmM1MTdlM2Zl
NzdlNDEgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy92b2lkLWFyZ3Vt
ZW50LXR5cGUtc2hvdWxkLWJlLWEtdmFsaWRhdGlvbi1lcnJvci5qcworKysgYi9KU1Rlc3RzL3dh
c20vZnVuY3Rpb24tdGVzdHMvdm9pZC1hcmd1bWVudC10eXBlLXNob3VsZC1iZS1hLXZhbGlkYXRp
b24tZXJyb3IuanMKQEAgLTE3LDYgKzE3LDYgQEAgZnVuY3Rpb24gZ2V0QmluYXJ5KHBhcmFtcykg
ewogICAgIHJldHVybiBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7CiB9CiAKLWFzc2VydC50
aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShnZXRCaW5hcnkoWyJpMzIiLCAidm9p
ZCJdKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vz
bid0IHBhcnNlIGF0IGJ5dGUgMTUgLyA0NzogY2FuJ3QgZ2V0IDF0aCBhcmd1bWVudCBUeXBlIik7
Ci1hc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoZ2V0QmluYXJ5KFsi
dm9pZCJdKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBk
b2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTQgLyA0NjogY2FuJ3QgZ2V0IDB0aCBhcmd1bWVudCBUeXBl
Iik7Ci1hc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoZ2V0QmluYXJ5
KFsiaTMyIiwgInZvaWQiLCAiaTMyIl0pKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2Vi
QXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxNSAvIDQ4OiBjYW4ndCBnZXQg
MXRoIGFyZ3VtZW50IFR5cGUiKTsKK2Fzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5
Lk1vZHVsZShnZXRCaW5hcnkoWyJpMzIiLCAidm9pZCJdKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVF
cnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTU6IGNhbid0
IGdldCAxdGggYXJndW1lbnQgVHlwZSIpOworYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGdldEJpbmFyeShbInZvaWQiXSkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJy
b3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE0OiBjYW4ndCBn
ZXQgMHRoIGFyZ3VtZW50IFR5cGUiKTsKK2Fzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2Vt
Ymx5Lk1vZHVsZShnZXRCaW5hcnkoWyJpMzIiLCAidm9pZCIsICJpMzIiXSkpLCBXZWJBc3NlbWJs
eS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRl
IDE1OiBjYW4ndCBnZXQgMXRoIGFyZ3VtZW50IFR5cGUiKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMv
d2FzbS9qcy1hcGkvTW9kdWxlLWNvbXBpbGUuanMgYi9KU1Rlc3RzL3dhc20vanMtYXBpL01vZHVs
ZS1jb21waWxlLmpzCmluZGV4IGQzYmViMzMyNTc3YWVkYjA1OGM4ZTQxZDIzYWRkYTljOTFmMWRm
NzguLmQ3MjNiZjRkNzBiNDljNDlhMTM2NWZkYzY3YjQ1MjQyYjM4MjcyZTYgMTAwNjQ0Ci0tLSBh
L0pTVGVzdHMvd2FzbS9qcy1hcGkvTW9kdWxlLWNvbXBpbGUuanMKKysrIGIvSlNUZXN0cy93YXNt
L2pzLWFwaS9Nb2R1bGUtY29tcGlsZS5qcwpAQCAtMjEsNyArMjEsNyBAQCBhc3luYyBmdW5jdGlv
biB0ZXN0UHJvbWlzZUFQSSgpIHsKICAgICAgICAgICAgIGF3YWl0IFdlYkFzc2VtYmx5LmNvbXBp
bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKTsKICAgICAgICAgfSBjYXRjaChlKSB7CiAg
ICAgICAgICAgICBhc3NlcnQudHJ1dGh5KGUgaW5zdGFuY2VvZiBXZWJBc3NlbWJseS5Db21waWxl
RXJyb3IpOwotICAgICAgICAgICAgYXNzZXJ0LnRydXRoeShlLm1lc3NhZ2UgPT09ICJXZWJBc3Nl
bWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDM0IC8gNDM6IHRoZXJlIGNhbiBhdCBt
b3N0IGJlIG9uZSBNZW1vcnkgc2VjdGlvbiBmb3Igbm93Iik7CisgICAgICAgICAgICBhc3NlcnQu
dHJ1dGh5KGUubWVzc2FnZSA9PT0gIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0
IGJ5dGUgMzQ6IHRoZXJlIGNhbiBhdCBtb3N0IGJlIG9uZSBNZW1vcnkgc2VjdGlvbiBmb3Igbm93
Iik7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9qcy1hcGkv
ZWxlbWVudC5qcyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvZWxlbWVudC5qcwppbmRleCAxODhhYzc0
MTUxMTI2MDQ4YjgyNzI0OGRjNDczODIwNWFhODZhMTQ5Li5mY2JlMjgyN2YzNzE2NjNhYTg0ZmRm
NWMxMDEwMGI4MTc4MTc3MzkwIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vanMtYXBpL2VsZW1l
bnQuanMKKysrIGIvSlNUZXN0cy93YXNtL2pzLWFwaS9lbGVtZW50LmpzCkBAIC0xOCw3ICsxOCw3
IEBACiAgICAgICAgICAgICAuRW5kKCkKICAgICAgICAgLkVuZCgpOwogCi0gICAgYXNzZXJ0LnRo
cm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5n
ZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vz
bid0IHBhcnNlIGF0IGJ5dGUgMjQgLyA0MTogRWxlbWVudCBzZWN0aW9uIGZvciBUYWJsZSAwIGV4
Y2VlZHMgYXZhaWxhYmxlIFRhYmxlIDAiKTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBX
ZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwgV2ViQXNzZW1i
bHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0
ZSAyNDogRWxlbWVudCBzZWN0aW9uIGZvciBUYWJsZSAwIGV4Y2VlZHMgYXZhaWxhYmxlIFRhYmxl
IDAiKTsKIH0KIAogewpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICAgICAgLkVuZCgpCiAgICAg
ICAgIC5FbmQoKTsKIAotICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1v
ZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJy
b3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDMwIC8gNDc6IEVs
ZW1lbnQgc2VjdGlvbiBmb3IgVGFibGUgMSBleGNlZWRzIGF2YWlsYWJsZSBUYWJsZSAxIik7Cisg
ICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2Vi
QXNzZW1ibHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5
Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzA6IEVsZW1lbnQgc2VjdGlvbiBmb3IgVGFi
bGUgMSBleGNlZWRzIGF2YWlsYWJsZSBUYWJsZSAxIik7CiB9CiAKIHsKQEAgLTExMiw3ICsxMTIs
NyBAQAogICAgICAgICAgICAgLkVuZCgpCiAgICAgICAgIC5FbmQoKTsKIAotICAgIGFzc2VydC50
aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCku
Z2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9l
c24ndCBwYXJzZSBhdCBieXRlIDM4IC8gNTA6IEVsZW1lbnQgc2VjdGlvbidzIDB0aCBlbGVtZW50
J3MgMnRoIGluZGV4IGlzIDEgd2hpY2ggZXhjZWVkcyB0aGUgZnVuY3Rpb24gaW5kZXggc3BhY2Ug
c2l6ZSBvZiAxIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2Vi
QXNzZW1ibHkoKS5nZXQoKSknKSIpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFz
c2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5D
b21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDM4
OiBFbGVtZW50IHNlY3Rpb24ncyAwdGggZWxlbWVudCdzIDJ0aCBpbmRleCBpcyAxIHdoaWNoIGV4
Y2VlZHMgdGhlIGZ1bmN0aW9uIGluZGV4IHNwYWNlIHNpemUgb2YgMSAoZXZhbHVhdGluZyAnbmV3
IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiKTsKIH0K
IAogewpAQCAtMjE1LDUgKzIxNSw1IEBAIGZ1bmN0aW9uIGJhZE1vZHVsZSgpIHsKICAgICAgICAg
cmV0dXJuIG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKICAgICB9CiAKLSAgICBhc3NlcnQu
dGhyb3dzKCgpID0+IGJhZE1vZHVsZSgpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJB
c3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDU4IC8gNzI6IEVsZW1lbnQgaW5p
dF9leHByIG11c3QgcHJvZHVjZSBhbiBpMzIiKTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+IGJh
ZE1vZHVsZSgpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUg
ZG9lc24ndCBwYXJzZSBhdCBieXRlIDU4OiBFbGVtZW50IGluaXRfZXhwciBtdXN0IHByb2R1Y2Ug
YW4gaTMyIik7CiB9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vanMtYXBpL2dsb2JhbC1lcnJv
ci5qcyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvZ2xvYmFsLWVycm9yLmpzCmluZGV4IDA5ZjhkNzk5
ZGM0ZTJmMzlkOWE1NDMwMmNhYWJkZTdhNzZkNTEwN2IuLmQzZWRmODk4ZTdkOWZhMDdlNDcwY2Zj
MzJjNmFiMzZmMTczMWI1MTMgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvZ2xvYmFs
LWVycm9yLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvZ2xvYmFsLWVycm9yLmpzCkBAIC0y
Myw3ICsyMyw3IEBACiAgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpOwogICAg
IGJpbi50cmltKCk7CiAKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5N
b2R1bGUoYmluLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHku
TW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNiAvIDU5OiBnZXRfZ2xvYmFsJ3MgaW5kZXgg
MCBleGNlZWRzIHRoZSBudW1iZXIgb2YgZ2xvYmFscyAwIChldmFsdWF0aW5nICduZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGJpbi5nZXQoKSknKSIpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3
IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4uZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3Is
ICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2OiBnZXRfZ2xvYmFs
J3MgaW5kZXggMCBleGNlZWRzIHRoZSBudW1iZXIgb2YgZ2xvYmFscyAwIChldmFsdWF0aW5nICdu
ZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbi5nZXQoKSknKSIpOwogfQogCiAKQEAgLTUyLDcgKzUy
LDcgQEAKICAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCk7CiAgICAgYmluLnRy
aW0oKTsKIAotICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShi
aW4uZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUg
ZG9lc24ndCBwYXJzZSBhdCBieXRlIDMyIC8gNzY6IE11dGFibGUgR2xvYmFscyBhcmVuJ3Qgc3Vw
cG9ydGVkIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbi5nZXQoKSknKSIp
OworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4uZ2V0
KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24n
dCBwYXJzZSBhdCBieXRlIDMyOiBNdXRhYmxlIEdsb2JhbHMgYXJlbid0IHN1cHBvcnRlZCAoZXZh
bHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4uZ2V0KCkpJykiKTsKIH0KIAogewpA
QCAtNzcsNyArNzcsNyBAQAogICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKTsK
ICAgICBiaW4udHJpbSgpOwogCi0gICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1i
bHkuTW9kdWxlKGJpbi5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2Vt
Ymx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgNTEgLyA1OTogMXRoIEV4cG9ydCBpc24n
dCBpbW11dGFibGUsIG5hbWVkICdnbG9iYWwnIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHku
TW9kdWxlKGJpbi5nZXQoKSknKSIpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFz
c2VtYmx5Lk1vZHVsZShiaW4uZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJB
c3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDUxOiAxdGggRXhwb3J0IGlzbid0
IGltbXV0YWJsZSwgbmFtZWQgJ2dsb2JhbCcgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5N
b2R1bGUoYmluLmdldCgpKScpIik7CiB9CiAKIHsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9q
cy1hcGkvdGFibGUuanMgYi9KU1Rlc3RzL3dhc20vanMtYXBpL3RhYmxlLmpzCmluZGV4IGI4MzJl
MTE3NjY0MTMwMjMwZmM4MGJmYjEzMGMxMzY2YTMxMmUzMjUuLmNmNjhiNDQwNDk1ZjZiZTZmOGIy
Nzk0NzcxMjQ1NmQ3Y2E3YzhjNmYgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGFi
bGUuanMKKysrIGIvSlNUZXN0cy93YXNtL2pzLWFwaS90YWJsZS5qcwpAQCAtMTMsNyArMTMsNyBA
QAogICAgICAgICAuRW5kKCkKICAgICAgICAgLkNvZGUoKQogICAgICAgICAuRW5kKCk7Ci0gICAg
YXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNz
ZW1ibHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1v
ZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzQgLyA0MTogQ2Fubm90IGhhdmUgbW9yZSB0aGFu
IG9uZSBUYWJsZSBmb3Igbm93Iik7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5LkNv
bXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzQ6
IENhbm5vdCBoYXZlIG1vcmUgdGhhbiBvbmUgVGFibGUgZm9yIG5vdyIpOwogfQogCiB7CkBAIC0z
OCw3ICszOCw3IEBACiAgICAgICAgIC5FbmQoKQogICAgICAgICAuQ29kZSgpCiAgICAgICAgIC5F
bmQoKTsKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVp
bGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2Vi
QXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxNyAvIDI4OiBUYWJsZSBjb3Vu
dCBvZiAyIGlzIGludmFsaWQsIGF0IG1vc3QgMSBpcyBhbGxvd2VkIGZvciBub3cgKGV2YWx1YXRp
bmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScp
Iik7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxk
ZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFz
c2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTc6IFRhYmxlIGNvdW50IG9mIDIg
aXMgaW52YWxpZCwgYXQgbW9zdCAxIGlzIGFsbG93ZWQgZm9yIG5vdyAoZXZhbHVhdGluZyAnbmV3
IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiKTsKIH0K
IAogewpAQCAtNTQsNyArNTQsNyBAQAogICAgICAgICAgICAgICAgIC5DYWxsSW5kaXJlY3QoMCwg
MCkKICAgICAgICAgICAgIC5FbmQoKQogICAgICAgICAuRW5kKCk7Ci0gICAgYXNzZXJ0LnRocm93
cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQo
KSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0
IHBhcnNlIGF0IGJ5dGUgNCAvIDc6IGNhbGxfaW5kaXJlY3QgaXMgb25seSB2YWxpZCB3aGVuIGEg
dGFibGUgaXMgZGVmaW5lZCBvciBpbXBvcnRlZCwgaW4gZnVuY3Rpb24gYXQgaW5kZXggMCAoZXZh
bHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0
KCkpJykiKTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUo
YnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAi
V2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSA0OiBjYWxsX2luZGlyZWN0
IGlzIG9ubHkgdmFsaWQgd2hlbiBhIHRhYmxlIGlzIGRlZmluZWQgb3IgaW1wb3J0ZWQsIGluIGZ1
bmN0aW9uIGF0IGluZGV4IDAgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVp
bGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIik7CiB9CiAKIHsKQEAgLTczLDcgKzczLDcgQEAK
ICAgICAgICAgICAgICAgICAuQ2FsbEluZGlyZWN0KDAsIDEpCiAgICAgICAgICAgICAuRW5kKCkK
ICAgICAgICAgLkVuZCgpOwotICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5
Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxl
RXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDYgLyA3OiBj
YWxsX2luZGlyZWN0J3MgJ3Jlc2VydmVkJyB2YXJ1aW50MSBtdXN0IGJlIDB4MCwgaW4gZnVuY3Rp
b24gYXQgaW5kZXggMCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVy
LldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiKTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBX
ZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwgV2ViQXNzZW1i
bHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0
ZSA2OiBjYWxsX2luZGlyZWN0J3MgJ3Jlc2VydmVkJyB2YXJ1aW50MSBtdXN0IGJlIDB4MCwgaW4g
ZnVuY3Rpb24gYXQgaW5kZXggMCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShi
dWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiKTsKIH0KIAogewpAQCAtODYsNyArODYsNyBA
QAogICAgICAgICAuRW5kKCkKICAgICAgICAgLkNvZGUoKQogICAgICAgICAuRW5kKCk7Ci0gICAg
YXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNz
ZW1ibHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1v
ZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjMgLyAyNjogY2FuJ3QgZXhwb3J0IFRhYmxlIDAg
dGhlcmUgYXJlIDAgVGFibGVzIik7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5LkNv
bXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjM6
IGNhbid0IGV4cG9ydCBUYWJsZSAwIHRoZXJlIGFyZSAwIFRhYmxlcyIpOwogfQogCiB7CkBAIC0x
MDIsNyArMTAyLDcgQEAKICAgICAgICAgLkVuZCgpCiAgICAgICAgIC5Db2RlKCkKICAgICAgICAg
LkVuZCgpOwotICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShi
dWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJX
ZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDMwIC8gMzM6IGNhbid0IGV4
cG9ydCBUYWJsZSAxIHRoZXJlIGFyZSAxIFRhYmxlcyIpOworICAgIGFzc2VydC50aHJvd3MoKCkg
PT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBX
ZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJz
ZSBhdCBieXRlIDMwOiBjYW4ndCBleHBvcnQgVGFibGUgMSB0aGVyZSBhcmUgMSBUYWJsZXMiKTsK
IH0KIAogZnVuY3Rpb24gYXNzZXJ0QmFkVGFibGUodGFibGVEZXNjcmlwdGlvbiwgbWVzc2FnZSkg
ewpAQCAtMTMyLDQyICsxMzIsNDIgQEAgZnVuY3Rpb24gYXNzZXJ0QmFkVGFibGVJbXBvcnQodGFi
bGVEZXNjcmlwdGlvbiwgbWVzc2FnZSkgewogewogICAgIGxldCBiYWREZXNjcmlwdGlvbnMgPSBb
CiAgICAgICAgIFt7aW5pdGlhbDogMTAsIGVsZW1lbnQ6ICJpMzIifSwKLSAgICAgICAgICJXZWJB
c3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE4IC8gMjM6IFRhYmxlIHR5cGUg
c2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtMSAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1v
ZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAotICAgICAgICAgIldlYkFzc2Vt
Ymx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjYgLyAzNDogVGFibGUgdHlwZSBzaG91
bGQgYmUgYW55ZnVuYywgZ290IC0xIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxl
KGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAorICAgICAgICAgIldlYkFzc2VtYmx5
Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTg6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFu
eWZ1bmMsIGdvdCAtMSAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVy
LldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAorICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBk
b2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjY6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdv
dCAtMSAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2Vt
Ymx5KCkuZ2V0KCkpJykiXSwKICAgICAgICAgW3tpbml0aWFsOiAxMCwgZWxlbWVudDogImYzMiJ9
LAotICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTgg
LyAyMzogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC0zIChldmFsdWF0aW5nICdu
ZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCi0g
ICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNiAvIDM0
OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTMgKGV2YWx1YXRpbmcgJ25ldyBX
ZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCisgICAg
ICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxODogVGFibGUg
dHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC0zIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1i
bHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCisgICAgICAgICAiV2Vi
QXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNjogVGFibGUgdHlwZSBzaG91
bGQgYmUgYW55ZnVuYywgZ290IC0zIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxl
KGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAogICAgICAgICBbe2luaXRpYWw6IDEw
LCBlbGVtZW50OiAiZjY0In0sCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3Qg
cGFyc2UgYXQgYnl0ZSAxOCAvIDIzOiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3Qg
LTQgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJs
eSgpLmdldCgpKScpIiwKLSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJz
ZSBhdCBieXRlIDI2IC8gMzQ6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtNCAo
ZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCku
Z2V0KCkpJykiXSwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBh
dCBieXRlIDE4OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTQgKGV2YWx1YXRp
bmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScp
IiwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2
OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTQgKGV2YWx1YXRpbmcgJ25ldyBX
ZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCiAgICAg
ICAgIFt7aW5pdGlhbDogMTAsIGVsZW1lbnQ6ICJpNjQifSwKLSAgICAgICAgICJXZWJBc3NlbWJs
eS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE4IC8gMjM6IFRhYmxlIHR5cGUgc2hvdWxk
IGJlIGFueWZ1bmMsIGdvdCAtMiAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShi
dWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAotICAgICAgICAgIldlYkFzc2VtYmx5Lk1v
ZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjYgLyAzNDogVGFibGUgdHlwZSBzaG91bGQgYmUg
YW55ZnVuYywgZ290IC0yIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxk
ZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAorICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVs
ZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTg6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMs
IGdvdCAtMiAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFz
c2VtYmx5KCkuZ2V0KCkpJykiLAorICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0
IHBhcnNlIGF0IGJ5dGUgMjY6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtMiAo
ZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCku
Z2V0KCkpJykiXSwKICAgICAgICAgW3tpbml0aWFsOiAxMCwgbWF4aW11bTogMjAsIGVsZW1lbnQ6
ICJpMzIifSwKLSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBi
eXRlIDE4IC8gMjQ6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtMSAoZXZhbHVh
dGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkp
JykiLAotICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUg
MjYgLyAzNTogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC0xIChldmFsdWF0aW5n
ICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJd
LAorICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTg6
IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtMSAoZXZhbHVhdGluZyAnbmV3IFdl
YkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAorICAgICAg
ICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjY6IFRhYmxlIHR5
cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtMSAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5
Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKICAgICAgICAgW3tpbml0
aWFsOiAxMCwgbWF4aW11bTogMjAsIGVsZW1lbnQ6ICJmMzIifSwKLSAgICAgICAgICJXZWJBc3Nl
bWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE4IC8gMjQ6IFRhYmxlIHR5cGUgc2hv
dWxkIGJlIGFueWZ1bmMsIGdvdCAtMyAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVs
ZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAotICAgICAgICAgIldlYkFzc2VtYmx5
Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjYgLyAzNTogVGFibGUgdHlwZSBzaG91bGQg
YmUgYW55ZnVuYywgZ290IC0zIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1
aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAorICAgICAgICAgIldlYkFzc2VtYmx5Lk1v
ZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTg6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1
bmMsIGdvdCAtMyAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldl
YkFzc2VtYmx5KCkuZ2V0KCkpJykiLAorICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vz
bid0IHBhcnNlIGF0IGJ5dGUgMjY6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAt
MyAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5
KCkuZ2V0KCkpJykiXSwKICAgICAgICAgW3tpbml0aWFsOiAxMCwgbWF4aW11bTogMjAsIGVsZW1l
bnQ6ICJmNjQifSwKLSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBh
dCBieXRlIDE4IC8gMjQ6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtNCAoZXZh
bHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0
KCkpJykiLAotICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5
dGUgMjYgLyAzNTogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC00IChldmFsdWF0
aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSkn
KSJdLAorICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUg
MTg6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtNCAoZXZhbHVhdGluZyAnbmV3
IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAorICAg
ICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjY6IFRhYmxl
IHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtNCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2Vt
Ymx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKICAgICAgICAgW3tp
bml0aWFsOiAxMCwgbWF4aW11bTogMjAsIGVsZW1lbnQ6ICJpNjQifSwKLSAgICAgICAgICJXZWJB
c3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE4IC8gMjQ6IFRhYmxlIHR5cGUg
c2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtMiAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1v
ZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAotICAgICAgICAgIldlYkFzc2Vt
Ymx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjYgLyAzNTogVGFibGUgdHlwZSBzaG91
bGQgYmUgYW55ZnVuYywgZ290IC0yIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxl
KGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAorICAgICAgICAgIldlYkFzc2VtYmx5
Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTg6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFu
eWZ1bmMsIGdvdCAtMiAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVy
LldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAorICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBk
b2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjY6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdv
dCAtMiAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2Vt
Ymx5KCkuZ2V0KCkpJykiXSwKIAogICAgICAgICBbe2luaXRpYWw6IDEwLCBtYXhpbXVtOiA5LCBl
bGVtZW50OiAiYW55ZnVuYyJ9LAotICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0
IHBhcnNlIGF0IGJ5dGUgMjEgLyAyNDogcmVzaXphYmxlIGxpbWl0cyBoYXMgYSBpbml0aWFsIHBh
Z2UgY291bnQgb2YgMTAgd2hpY2ggaXMgZ3JlYXRlciB0aGFuIGl0cyBtYXhpbXVtIDkgKGV2YWx1
YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgp
KScpIiwKLSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRl
IDI5IC8gMzU6IHJlc2l6YWJsZSBsaW1pdHMgaGFzIGEgaW5pdGlhbCBwYWdlIGNvdW50IG9mIDEw
IHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiBpdHMgbWF4aW11bSA5IChldmFsdWF0aW5nICduZXcgV2Vi
QXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAorICAgICAg
ICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjE6IHJlc2l6YWJs
ZSBsaW1pdHMgaGFzIGEgaW5pdGlhbCBwYWdlIGNvdW50IG9mIDEwIHdoaWNoIGlzIGdyZWF0ZXIg
dGhhbiBpdHMgbWF4aW11bSA5IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1
aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9k
dWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyOTogcmVzaXphYmxlIGxpbWl0cyBoYXMgYSBpbml0
aWFsIHBhZ2UgY291bnQgb2YgMTAgd2hpY2ggaXMgZ3JlYXRlciB0aGFuIGl0cyBtYXhpbXVtIDkg
KGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgp
LmdldCgpKScpIl0sCiAgICAgICAgIFt7aW5pdGlhbDogMSwgbWF4aW11bTogMCwgZWxlbWVudDog
ImFueWZ1bmMifSwKLSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBh
dCBieXRlIDIxIC8gMjQ6IHJlc2l6YWJsZSBsaW1pdHMgaGFzIGEgaW5pdGlhbCBwYWdlIGNvdW50
IG9mIDEgd2hpY2ggaXMgZ3JlYXRlciB0aGFuIGl0cyBtYXhpbXVtIDAgKGV2YWx1YXRpbmcgJ25l
dyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKLSAg
ICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI5IC8gMzU6
IHJlc2l6YWJsZSBsaW1pdHMgaGFzIGEgaW5pdGlhbCBwYWdlIGNvdW50IG9mIDEgd2hpY2ggaXMg
Z3JlYXRlciB0aGFuIGl0cyBtYXhpbXVtIDAgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5N
b2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCisgICAgICAgICAiV2ViQXNz
ZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyMTogcmVzaXphYmxlIGxpbWl0cyBo
YXMgYSBpbml0aWFsIHBhZ2UgY291bnQgb2YgMSB3aGljaCBpcyBncmVhdGVyIHRoYW4gaXRzIG1h
eGltdW0gMCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFz
c2VtYmx5KCkuZ2V0KCkpJykiLAorICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0
IHBhcnNlIGF0IGJ5dGUgMjk6IHJlc2l6YWJsZSBsaW1pdHMgaGFzIGEgaW5pdGlhbCBwYWdlIGNv
dW50IG9mIDEgd2hpY2ggaXMgZ3JlYXRlciB0aGFuIGl0cyBtYXhpbXVtIDAgKGV2YWx1YXRpbmcg
J25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0s
CiAgICAgICAgIFt7aW5pdGlhbDogMioqMzIgLSAxLCBtYXhpbXVtOiAyKiozMiAtIDIsIGVsZW1l
bnQ6ICJhbnlmdW5jIn0sCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFy
c2UgYXQgYnl0ZSAyOSAvIDMyOiByZXNpemFibGUgbGltaXRzIGhhcyBhIGluaXRpYWwgcGFnZSBj
b3VudCBvZiA0Mjk0OTY3Mjk1IHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiBpdHMgbWF4aW11bSA0Mjk0
OTY3Mjk0IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNz
ZW1ibHkoKS5nZXQoKSknKSIsCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3Qg
cGFyc2UgYXQgYnl0ZSAzNyAvIDQzOiByZXNpemFibGUgbGltaXRzIGhhcyBhIGluaXRpYWwgcGFn
ZSBjb3VudCBvZiA0Mjk0OTY3Mjk1IHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiBpdHMgbWF4aW11bSA0
Mjk0OTY3Mjk0IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2Vi
QXNzZW1ibHkoKS5nZXQoKSknKSJdLAorICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vz
bid0IHBhcnNlIGF0IGJ5dGUgMjk6IHJlc2l6YWJsZSBsaW1pdHMgaGFzIGEgaW5pdGlhbCBwYWdl
IGNvdW50IG9mIDQyOTQ5NjcyOTUgd2hpY2ggaXMgZ3JlYXRlciB0aGFuIGl0cyBtYXhpbXVtIDQy
OTQ5NjcyOTQgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJB
c3NlbWJseSgpLmdldCgpKScpIiwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24n
dCBwYXJzZSBhdCBieXRlIDM3OiByZXNpemFibGUgbGltaXRzIGhhcyBhIGluaXRpYWwgcGFnZSBj
b3VudCBvZiA0Mjk0OTY3Mjk1IHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiBpdHMgbWF4aW11bSA0Mjk0
OTY3Mjk0IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNz
ZW1ibHkoKS5nZXQoKSknKSJdLAogICAgICAgICBbe2luaXRpYWw6IDIqKjMxLCBlbGVtZW50OiAi
YW55ZnVuYyJ9LAotICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0
IGJ5dGUgMjQgLyAyNzogVGFibGUncyBpbml0aWFsIHBhZ2UgY291bnQgb2YgMjE0NzQ4MzY0OCBp
cyB0b28gYmlnLCBtYXhpbXVtIDEwMDAwMDAwIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHku
TW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCi0gICAgICAgICAiV2ViQXNz
ZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzMiAvIDM4OiBUYWJsZSdzIGluaXRp
YWwgcGFnZSBjb3VudCBvZiAyMTQ3NDgzNjQ4IGlzIHRvbyBiaWcsIG1heGltdW0gMTAwMDAwMDAg
KGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgp
LmdldCgpKScpIl0sCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2Ug
YXQgYnl0ZSAyNDogVGFibGUncyBpbml0aWFsIHBhZ2UgY291bnQgb2YgMjE0NzQ4MzY0OCBpcyB0
b28gYmlnLCBtYXhpbXVtIDEwMDAwMDAwIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9k
dWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCisgICAgICAgICAiV2ViQXNzZW1i
bHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzMjogVGFibGUncyBpbml0aWFsIHBhZ2Ug
Y291bnQgb2YgMjE0NzQ4MzY0OCBpcyB0b28gYmlnLCBtYXhpbXVtIDEwMDAwMDAwIChldmFsdWF0
aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSkn
KSJdLAogICAgIF07CiAKICAgICBmb3IgKGNvbnN0IGQgb2YgYmFkRGVzY3JpcHRpb25zKSB7CkBA
IC0xODYsNyArMTg2LDcgQEAgZnVuY3Rpb24gYXNzZXJ0QmFkVGFibGVJbXBvcnQodGFibGVEZXNj
cmlwdGlvbiwgbWVzc2FnZSkgewogICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQogICAgICAgICAu
Q29kZSgpCiAgICAgICAgIC5FbmQoKTsKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJB
c3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwgV2ViQXNzZW1ibHku
Q29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAz
OSAvIDQ4OiBDYW5ub3QgaGF2ZSBtb3JlIHRoYW4gb25lIFRhYmxlIGZvciBub3ciKTsKKyAgICBh
c3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3Nl
bWJseSgpLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9k
dWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzOTogQ2Fubm90IGhhdmUgbW9yZSB0aGFuIG9uZSBU
YWJsZSBmb3Igbm93Iik7CiB9CiAKIApkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS90
ZXN0X0RhdGEuanMgYi9KU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfRGF0YS5qcwppbmRleCBjY2Ew
Y2YzYmM0NWQwZjRkZDMzYmQ5Y2E1OTc5ODk1NGQyZDQ1YjE4Li40MTcxNDM1MTI4YTA4NGQ1OTQ5
ZDhmZjJiOGIxMjU3MGI3ZjIzMzc1IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vanMtYXBpL3Rl
c3RfRGF0YS5qcworKysgYi9KU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfRGF0YS5qcwpAQCAtNTIs
NyArNTIsNyBAQAogICAgICAgICAgIC5TZWdtZW50KFsweGZmXSkuT2Zmc2V0KDApLkVuZCgpCiAg
ICAgICAgIC5FbmQoKTsKICAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0
KCk7Ci0gICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbiks
IFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgYFdlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBh
cnNlIGF0IGJ5dGUgMTUgLyAyMDogMHRoIERhdGEgc2VnbWVudCBoYXMgaW5kZXggMCB3aGljaCBl
eGNlZWRzIHRoZSBudW1iZXIgb2YgTWVtb3JpZXMgMGApOworICAgIGFzc2VydC50aHJvd3MoKCkg
PT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3Is
IGBXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE1OiAwdGggRGF0YSBz
ZWdtZW50IGhhcyBpbmRleCAwIHdoaWNoIGV4Y2VlZHMgdGhlIG51bWJlciBvZiBNZW1vcmllcyAw
YCk7CiB9KSgpOwogCiAoZnVuY3Rpb24gRW1wdHlEYXRhU2VjdGlvbldpdGhvdXRNZW1vcnkoKSB7
CkBAIC02Miw3ICs2Miw3IEBACiAgICAgICAgICAgLlNlZ21lbnQoW10pLk9mZnNldCgwKS5FbmQo
KQogICAgICAgICAuRW5kKCk7CiAgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgp
LmdldCgpOwotICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShi
aW4pLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsIGBXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24n
dCBwYXJzZSBhdCBieXRlIDE1IC8gMTk6IDB0aCBEYXRhIHNlZ21lbnQgaGFzIGluZGV4IDAgd2hp
Y2ggZXhjZWVkcyB0aGUgbnVtYmVyIG9mIE1lbW9yaWVzIDBgKTsKKyAgICBhc3NlcnQudGhyb3dz
KCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVy
cm9yLCBgV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxNTogMHRoIERh
dGEgc2VnbWVudCBoYXMgaW5kZXggMCB3aGljaCBleGNlZWRzIHRoZSBudW1iZXIgb2YgTWVtb3Jp
ZXMgMGApOwogfSkoKTsKIAogKGZ1bmN0aW9uIERhdGFTZWN0aW9uQmlnZ2VyVGhhbk1lbW9yeSgp
IHsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9TdGFydC5qcyBiL0pTVGVz
dHMvd2FzbS9qcy1hcGkvdGVzdF9TdGFydC5qcwppbmRleCBiNDQ0NTY5MzJkOTBiNWM4MzMxNDVl
YzNmMzQyZmM1MDQ2Zjc5ZTBiLi41YzMxNTBlMWNhYmViZmI4NDMzM2VmNzE0MjNhODg4NmNkZTBl
YWU4IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfU3RhcnQuanMKKysrIGIv
SlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X1N0YXJ0LmpzCkBAIC0zMSw1ICszMSw1IEBACiAgICAg
ICAgIC5TdGFydCgwKS5FbmQoKSAvLyBJbnZhbGlkIGluZGV4LgogICAgICAgICAuQ29kZSgpLkVu
ZCgpOwogICAgIGNvbnN0IGJpbiA9IGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKLSAgICBhc3NlcnQu
dGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKSwgRXJyb3IsIGBXZWJBc3Nl
bWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE3IC8gMjA6IFN0YXJ0IGluZGV4IDAg
ZXhjZWVkcyBmdW5jdGlvbiBpbmRleCBzcGFjZSAwIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1i
bHkuTW9kdWxlKGJpbiknKWApOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2Vt
Ymx5Lk1vZHVsZShiaW4pLCBFcnJvciwgYFdlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNl
IGF0IGJ5dGUgMTc6IFN0YXJ0IGluZGV4IDAgZXhjZWVkcyBmdW5jdGlvbiBpbmRleCBzcGFjZSAw
IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbiknKWApOwogfSkoKTsKZGlm
ZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9iYXNpY19hcGkuanMgYi9KU1Rlc3Rz
L3dhc20vanMtYXBpL3Rlc3RfYmFzaWNfYXBpLmpzCmluZGV4IDA4ZTc0YWEzMjRhNzE3ODhlNTgx
OWM0YThiYmU3NzQ3NTg1YjFhODkuLjFhMmQyMjIxMDMwNDUxZGYwNjQ1YjMwZWEzMWJiMjc0OGY1
NTM2ZDAgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9iYXNpY19hcGkuanMK
KysrIGIvSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X2Jhc2ljX2FwaS5qcwpAQCAtNjcsNyArNjcs
NyBAQAogICAgICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHlbY10o
aW52YWxpZCksIFR5cGVFcnJvciwgYGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXlCdWZm
ZXJWaWV3IG9yIGFuIEFycmF5QnVmZmVyIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHlbY10o
aW52YWxpZCknKWApOwogICAgICAgICBmb3IgKGNvbnN0IGJ1ZmZlciBvZiBbbmV3IEFycmF5QnVm
ZmVyKCksIG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoKSksIG5ldyBJbnQ4QXJyYXkoKSwg
bmV3IFVpbnQ4QXJyYXkoKSwgbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KCksIG5ldyBJbnQxNkFycmF5
KCksIG5ldyBVaW50MTZBcnJheSgpLCBuZXcgSW50MzJBcnJheSgpLCBuZXcgVWludDMyQXJyYXko
KSwgbmV3IEZsb2F0MzJBcnJheSgpLCBuZXcgRmxvYXQ2NEFycmF5KCldKQogICAgICAgICAgICAg
Ly8gRklYTUUgdGhlIGZvbGxvd2luZyBzaG91bGQgYmUgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9y
LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNzY4Ci0gICAgICAg
ICAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseVtjXShidWZmZXIpLCBFcnJv
ciwgYFdlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMCAvIDA6IGV4cGVj
dGVkIGEgbW9kdWxlIG9mIGF0IGxlYXN0IDggYnl0ZXMgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3Nl
bWJseVtjXShidWZmZXIpJylgKTsKKyAgICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3
IFdlYkFzc2VtYmx5W2NdKGJ1ZmZlciksIEVycm9yLCBgV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNu
J3QgcGFyc2UgYXQgYnl0ZSAwOiBleHBlY3RlZCBhIG1vZHVsZSBvZiBhdCBsZWFzdCA4IGJ5dGVz
IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHlbY10oYnVmZmVyKScpYCk7CiAgICAgICAgIGFz
c2VydC5pbnN0YW5jZW9mKG5ldyBXZWJBc3NlbWJseVtjXShlbXB0eU1vZHVsZUFycmF5KSwgV2Vi
QXNzZW1ibHkuTW9kdWxlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAiSW5zdGFuY2UiOgpk
aWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS92ZXJzaW9uLmpzIGIvSlNUZXN0cy93YXNt
L2pzLWFwaS92ZXJzaW9uLmpzCmluZGV4IDgxY2Q3ZmYwMTIyZmIyMWNlOTFmODBmYjUxZTRjNjll
MTQ1OThjNDcuLjA0ODZmY2ZkZGVmZDA4MjFkMzkyNDZjYjY0MDg3MzRiZmViZjIyZTIgMTAwNjQ0
Ci0tLSBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvdmVyc2lvbi5qcworKysgYi9KU1Rlc3RzL3dhc20v
anMtYXBpL3ZlcnNpb24uanMKQEAgLTUsNSArNSw1IEBACiAgICAgaWYgKHZlcnNpb24gPT09IDEp
CiAgICAgICAgIGNvbnRpbnVlOwogICAgIGNvbnN0IGVtcHR5TW9kdWxlQXJyYXkgPSBVaW50OEFy
cmF5Lm9mKDB4MCwgMHg2MSwgMHg3MywgMHg2ZCwgdmVyc2lvbiwgMHgwMCwgMHgwMCwgMHgwMCk7
Ci0gICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGVtcHR5TW9k
dWxlQXJyYXkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsIGBXZWJBc3NlbWJseS5Nb2R1bGUg
ZG9lc24ndCBwYXJzZSBhdCBieXRlIDggLyA4OiB1bmV4cGVjdGVkIHZlcnNpb24gbnVtYmVyICR7
dmVyc2lvbn0gZXhwZWN0ZWQgMWApOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFz
c2VtYmx5Lk1vZHVsZShlbXB0eU1vZHVsZUFycmF5KSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9y
LCBgV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSA4OiB1bmV4cGVjdGVk
IHZlcnNpb24gbnVtYmVyICR7dmVyc2lvbn0gZXhwZWN0ZWQgMWApOwogfQpkaWZmIC0tZ2l0IGEv
SlNUZXN0cy93YXNtL3N0cmVzcy9uYW1lU2VjdGlvbi53YXNtIGIvSlNUZXN0cy93YXNtL3N0cmVz
cy9uYW1lU2VjdGlvbi53YXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI0YjIyYjFhZWVhMzhlNDY5YzMyNjBiYTM0
ZDVkYTRhNmRiMTIxNTMKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDEzNDA5CnpjbWJXOE9OP0F1
ZEJATHZSYU11bT5Nb0NNPSRZfjBkIz89YEZ3Z15vS19qSTJneEdeSVcoWUcydlpgciZZNmUlZwp6
LVJ8bGQhJD5JSUEmYHN8cUN+SmsoZDRsfTFkJUxRQm9ZZkd0VVJQZFYhPE1qU2ZHZVNCMU91RSNZ
RD0yV2IqcmUKej1pWWpCX2U9dWc+QUo2VCYtdmNwfE5IS31aZ2NOVzxlWkVDO141JUdiKUhOMV94
R2R5PU9YPllgfT5ZUF9uaE92CnpJVVRjO0dKPFhWclFoYTspNSstV3tuY09salpnVS0qRk5eXykx
TXhHYHF8R1VgJVkmJiZwaGl0Y0FhemVAcm9TfQp6Wn1gdkZDJGkwKEpDbXRQR2BLJnl5UytKaWFk
Y3lKWEpfKVZPS3NYME43SDlfcmttU35DKk51fUokPzZNbnxKVC0Kek9yTShVZTE3cmpUWldATWQk
JVVIP0BkUXtoaiZKSVpyeXUlYz1QcykmSW9EYGhye2lpVFUla3ApLVd1ZVh7bnFgCnpkIXktPCQ+
ZFd6O2oqMjFkR0ZUZF9WeSokRzc+Yz1vTyUzLWpjfjN0K2BHTkt7aiFUUnBmP316cChuIWk2Ozhj
JAp6Y2ZNJFVLSUhLeT5VbXF4M0QwcUs1RmY7dkMhMjJHKyNXXnVxTCFgTzRjQzhsYjhwbTAoZ3Jq
cXo5cSVJSnhZQH0KelBTU3x+UXVHPDZEVnIhc0dmcEhLWElreVp3ZjxDTlRsPipEbS03P3BDKzVm
TnU9IzAhYEFaQnMqJmcxM19ubGtyCnpVQWdveXhed1J7cXY/aF8pZ0hkXiF1Q3NocEw2ZmJDb2tS
b152PlMmbmJDQzV5KGRTMHZyIzhjamBsPzQ/WSstRQp6R3Veemtefn1BXlRPKVUzZ185Zz8tWEZP
Jj0we2hmc2U1bFcrYEJwMWF1Kis2UjMyKiVVKTxpZ3h3JD51ekoycVMKemQpVVVLUHhycEEmRWsh
PylzQnxeKytfNTVfZlVJeVoqd3gpblkjNkNfYCtsfmFfe2NoJGo/Ql8mU2N+VUN5QFNWCnpHUCUx
V0d1V0tvLW5yfUUpX3drRVkteExZYz5BX3tle1gpaztsfDJXQzljU3dPWV8jX2s5P3B5Xkp3PzRl
PEVUMwp6aUppdj5fUnFELT12PUZDPE1YWF5FeCRKUV9qYj4+aVlVKiZ0UmUxUEVCX3RhRGN0IzF7
YDxCWVUpRGhwb3AweSkKekFCSXQjRTImTylJSnVJfkA4fndPYm5gI1p6KF58PVpxT3x3RXdPYSZe
ZkJrJmE/SDg2aEkzIUJoNWMqWXtKUz1ECnpKbWJYPTtIOE1GeE5zTlpqfUZSOXZHYzdXOSZgcWVs
QDA9N0hxWlpDQ1c4NXgwNVVrPSZgbFpsbWY5NUtEays+bAp6R3A8JUgjSTghMnF0Sjt7PEVxUHZC
SGh4dGx5bExneFdndkM2IShnKGlXdXxKYW4pbXRaaSRMU3FheDRjUEo5YGAKenJBMGloUXZXc2hB
TV4qMFJuZ1ZIXktzY3VFO0d0fjNNbiN0dDdLOzE4SkViak5HYC1fKXhUY2xUPGVyY1VnWkFsCnop
U3JFK1hwaFNfRHwxfjc8PmBMVyZ2MWRRRGpGTlBKez96YHFHT2wwYmYjNF9iaFFGcXQpZWFKamh0
M1BQVFdIPwp6dW1KO3VWbnJLUWJpPjk7cVJ0bCtvb29CfVlQIz1UUj5WZipSJGw3WCFVa1FHQnJl
MW9Qe0plPDV8aHtfRkVSdWoKej1sUT1hc3gzdFdnKjE+Iz94OztTQndCU3IjO0xeNXNhfXh4ejwo
OSMzfDBuQGRHflIrY1lkRnt7QztMcz1JQTtOCnp5OGFfRzZ8TnNWY1JrJTd5djsrUjFZJCQ7ezF2
LUFJT2B2e2FjIUBJQkNxWjFwaWBnMVgjVD99UEorJE1ESn5Odgp6aH4yUVJOOFJVeGtSR15RYE5T
ZU9VO2ozODVJLTRHX21ga3VJKSNpVS1GMWxeRXlqYUs9WDNgVE01V31aMUJiUU4Kej96aXYlRGoj
SjJgKzEpS3UzZ2JfRmFQRm1GKUVURCRVIXlwaDRfPHh8QzhEcVRxcz5IV3t0dFFEPHpKPkZeZUl6
CnoyJnhDP2FtTGJSeyU1am5iWlhuZEo3ckMhOEAhIzlSZ18qJUZqMVRGNlN7QTMmTXdDfmNTPThK
dUNxYHl4S094Qgp6PjJmQzUoZk00TEsyayt9ZH5XYSNhaGQwQDhsa1A0UCRgdSQ0bmcyPEY/JT1x
SV5kcjtJUGE1UEFDRkhzX2xUeCkKenhYWnFvbmFvP1pVIUBIMGpIXnVodCF2XklBOEt1UnYlbX1V
K2dVcHBic1ZmMmYwTEVMIz8wNmxrWEo3TSo3cWRJCnooP1FYRk93JUd0elpeKWd7eSFzSSNPR3VH
aDIxanQ0fDEqQz0xUDdJO1NIKTdtJmtvYHpqRjdoZyFMZ1FAekppMgp6XzZXMDg8ZGRvWV9aKEo1
YipnKmk+czU8QWJkUGVicms5eCUyT34mS3tyPXVBXnIwc0lCUTM8KmdPKnQ3MSh1NzEKejtSUCMt
Mn1HZj40OUdEdnR5RSE/eFR+enJqVV9TeyVyaTB7PyZCYj5ISShLNSFJKVQrNGlvKHFadDVYTF9q
QVlBCnpXVmhiZ180fG4zX3dNX19GNFF0a0paQVRPWElGfXRhMytPdUFLJi1zWmswPz5oNkxmR2Aj
d0gmOUw8Z3U1b0A3agp6NWB8KEd2JDd8SFdFcj8kNUszeDdzVDVSPjZebyk9NURPdCRWKEZNemln
cDxfcUtSaXhBc2xEO1ohI0BuViFEQEgKelFyMWh5ZyQ0YUpibiNEOzRQTFYqb3VXYHZBNT12czJu
bX5sJT4+T0hxWGopPk1OO0FjV2g+OTVRSEduP0hKSX5gCnpeOTh+ZWlHKU4yd3p6MDFBfHJXQGE8
cFBwS3RXKGNgcyVMYntfamolaVhPUmxNWldjQlRFUHZabUZPNE9palN4TQp6WFpeOTFmIzs9SUoy
RTJMTWZpaCFhZDNxWmNBMDNDVCRXK2dnRE1pdHdXPFNzRW9DaDJ4S2c9NmNRUzBAUEpCSSkKemVD
KEkwJkImYGtaUlU3QDY2VlUmIVJsRmJ6M2t6ST9EUSUkQWxyYD1LfV9eYzVtKGdCNTR8aFhVWHRl
YFB2Z3dBCnp4KHdeMEsrPFVsQ0VSaCQxXkd9UTFuTlNSVV5ZbCleJHZOZUFyZn44X1pRSnFqZCN8
ejh6YCpwdWRBJTxrVkktYAp6bjhRYTsxWiUhQ0ApO0FpKEpzRjVCbj9rdDNXY0wtR30oaiRTanZq
dGxCTSt8VFRGaWQ3MUIje2NPVUxDQEYzVHUKem1UT3d7RjIoRG4jTDd8eWBWIzNGekQjZGArcF9w
TmNTNzUjRmwxPnA4K0t8b2pEYlcrcmhwcXZuSmBtMzcmSVJWCnpJfHpgNzZUO0Y4X1hWRzBaIUdJ
fiNvWHU4QlI7Mn5jK31fT0NFQWo1d1RSMHNfIzY7dj9zS2FNS2cpfk5BUkN5Swp6JipBUWRnNjJM
YUQmJXUzWjFYfSs3dlpzTTFYLS1QYEV+dldgLURyc1VuWXR8MWF6bC1ray0hR0xLZ1RyVVByYn0K
entwK3Y0LVVmWDV2a0VxbCFMQF9gYElXSUJTbVkkbU0qaVRaWFlIN3tpVF9VfEIhJUNEMTMpPiQy
JXBocGkjeTIpCnpZeGxLVWR3aWQ/IWM1VjAwPCRGUjZDUzs3bH5IX0l8QjRkfTkqbWEjITw+b2ta
PFI0I0F4KXB+WEIhQllQZkoyYwp6OE91KjxId05SYjdNQU4pO2JwYXE1TUluTyFWaEtDJWd7TVBQ
Z01fSERJUzZkdFBmLWdvZ3BOd1VZKT5ybUs2XlAKemk2UWVWUlluRzZuSWh8SmhLd20pJiprNl9T
Mnw2cjM5bDZLbTBmT1prJHB9cVcqQG5CaW9kb01NRyMremRHUmIwCnpHMzkreVlSRSg9V0lfPGw8
fW9pO0NXX35vWHo3P3RSM0RHJDUtWHZMZDd2e0UyYnBYZSktelpLRykwXmokOzZMQAp6M3YtYiV7
Ri02KWpIe3E+LUd2YnlqaFIzcVMqZ3R1OzhHVHtGZENGMilpenpOKS1EXnY1YyNfYWcjZX1YUVh6
eUwKemcram8lP3kxMzRXdVkpdUQxPGc9aGxzZWQ3eiZrSkQrUW4pPmB7QDtMZzZ0TmwpQ35VdS09
NWlqKGtDKHUoPjhTCnozNUJ9OWghO2JsV25gblVEPSV8SkZPJnBPR3oqMGk2K0FBNUxlWHZeelVi
JktSaGJIZmdwNHtBUipJKz00RCtRQgp6a2VmTHc3eyh6TyZoQSU2PlpMJkVxRXA5Mm5ZYldUcl5w
byhwPHF6USNCZTFHXygzc3xTcmlpKWEkSFFiRnQzPVgKelZWMyFfZzx0ODRgcUVUdTAwUiNXRiVa
KXxDUHQjfFMmWVBVNDQxNEYqKkdBOTNAbjAyWDhzYDdqMTgjN2twZGh8Cno1SyUtXzUlXyMjWV9m
KU53bkxtR3Q8VTQrOGRpeTt0eXUmdCtTPkZlPEUmYS11e2Z6PjA8MEZvVGVjWTl2ajAyMAp6OEJt
T2heY01fbyNLQDIkdX4ofXAmcnFMWTtpKEtWTU88Y0RIUnF8eUZCd1p4cT1CKShqRkc/MntXVlcp
SSN3QkIKellEbio0TTV6IS1rO1l5Vjl1dloyNWBycTstVVBfKER1SW1VcllPU1ZVc0FgdngtUGxX
TStkNDdMITUoQEJeeW9OCnpnckhQYEJgRDdQeDR5R1ZwVEBrPnI+JiQyOTdONDVjdFF1WmtPOFdh
REF0MihnIztGZDFWI2tLWTNJTkFLQEkpawp6MWR2ckBVRUhAd1hlNCtRMWo+WWZHenUxY09fMD44
Yz8hU1VEQUB4SiUwQyR1T2plUTF3ODZiV0U2aUExR2thJDMKenA+dHQjKUpheCQzYl81RGZtX25O
KjhaVSlrNFZ3bEtoRjdJUUVOc0hiVCh3bjdQb3w1Ji1JTnBoTGQqeE94dWkmCnpLUFdXUXRJZl9n
KkZ4OWUreDdNQCo4PCU/VWshOCppVUEhbHxLc29jXkxNZzZINk5WKzJIdjZWS3whcXUkTTJfaAp6
cWxvYkV6ZzFab2wtJDdVZkRQV2smVlF7TSNxamJvK3B7UiVGNSg7Ym1BZ0tma0NjNkUoOUBCZmBK
WmJuQl4wOzAKekdSbEpPSFFabUoydEhVLXZMPmJ3ajlpNj13NUJSS2EpZXx3WDdXQlojTnwjRV9h
a2ZeazFlOUQwdW0hUj9DV2lkCno5RHxFK3AtQnE2UDJyWGpgPkIyX1EoVj5SSXJuO31hZWtsNk1p
M0l6eTBPWVphdV9gKV8+WkBDU3dLbSRBbkAhTAp6TEpNRnwpeDNmQ1l8S1N6N09lI2UjOSl3K2lV
alZ3IUIwbkcoSn1AeUIzMzN1VWhSYEBARmFzRXc1YTREP0lNfl8KeldufU1LKkpWeTkhLUA3IzBm
eVRPVz44XiZNa359QzVse0RIUEMmVDJnY3BzK3FCWGVxaCVxVik4JCRedzhsXk9QCnpRQTgxe297
MkZ2QGttSlZINnNLfj5fND4mOSVLVVNMVkBES188R2U2bSFUQmV6cDZ5R0goP3JuMl5MfXJLP1Ba
ewp6c3lRNjx5ZTM8YUdyUl9fKXh5fEVAQj9OdUx5Jm5TPXEocm5PVWVxWUE8YExOQj97Rj47N24q
N15lRVFfc0F6Pj0Kejwwa3xaPHZEOHwxYGg8dVFrTFM5UmxNY2Y2I0p8eFl8bFFiI2hHd0pidXJg
JGNxd2c1X3ltQDZFUzZgJWYhdWIxCnpAYSV0KmApfHU7eEV9SXYtT3haX2FQY0U3U2ElOWohM1FF
SXdYS3pEJjYoT0gxQFZAb0Ekdnx+Q3JTU3RHXnwpYgp6TFRuVzA8Tn1RayVyS3t6Sz5JS3VvPGZW
azRzRUh4UCUydm1VSj5ZTXQwSWVWK0hrY0BkfVdJO0xfP01WQSZ8d1MKel5QKGt4XytjSGgzWU18
UmZTXmN+dmA4QjxXR3JmMzFQdiFOVERONjNvY092dFRzUHZzbDliWGM7MWJ1UDRNd0BFCnpIWVpn
RWdiTSY1OShEbypVfDNIe081Kzh8Vy1TIzU1PEB1PnZ0U1BTZ3RpRXhZYFIzRT18TFdGZ0k4OXJU
VFpPYQp6WTs8QFMwTW9RQVBFclRZPUNTP15zWmVAaGZHYmFPZ1V5TTlEKyEmbnF5WHplczt4a25r
ZzUkPXI9NERrVmdwa2MKei1YY3twemExJWN5Unk1OFImN3x5TFMpbHxwJj5zdV87JmUlbDczKSFw
PlhlI18pSWotSE57KWRzd09WN01ZTCtjCnooNVM/dXJBTTRNKmsoN1IpU2B2QWlYbHlTWX58azdf
LTtQfWZQe0p3ITdkYzw3fHMkRFA9flJnMFhUcFY2O01VRQp6fDRRRzBZUFNaZVA0VjdVbllAbGtI
UVlQTmVeJFlGTVlQWj1saGhTRl85SE58KmgwK2MkMV9mRkhIPWVzJGtvTEwKejM2SFY9b1kwaj9L
fjh8amBRS0M8NjNjOVFXYjhGUDJBTHUtciM4ZlNoYikkMU51bEtFVzIqTUwqI3FuLWw5Qz5CCnoq
KXQwfCtBNCN7dlBiJGw3NXQ+OTRMfEIoYm1TYD4keWlscTJTbj02dmExWTczVmVqITt8bEkldkVX
OEYpKzlURwp6TkUwaSNZNHt5MnhEX3NQRU8+QFVYKjY3bCZsR0xiaW9rPU9gPj03cjAyJiNANEtC
cWFZaDJubXptKGM7YztuPFUKekU9PiVWOy04cHBnRy19aGFjVFBJeEhOOFhzaj9+Y3hCT3Q8VDkl
OHlGK3AjSE9KbXtFeFc9V1hvdjR8YGFBe0J5CnohYSpRUXhPQnhaVXcjUEEoN3pYKUEoMFhMQ0A3
Mjg0OW5PPENnMkZxcTwpPzNxdEtwT0VDKEgrWC1pSTdofitkPgp6ckhtZTNgSno+Szw/VyRiP0FP
T3djalB9eTg8d2RvTEExanglNXIrUkhKaGwpTkRHcFB2SyZzYlJhc0EmOThzcUAKel9LdjJ3SXRC
WWo8dW8xR2RzcGx9WWBkPzdVN2ZTJjs9ZkU0cnM9PDBMKGY7JUxiWGV2T1ltIXBrPXw0eUkqWUVN
CnpIZExwX2JnLSFDWmhAJEFRRjFob0toJGwoejdYTzZ1VjlSRShXUWRYMGA3OFNFaDxqflVSRlpF
MnJkZnR0SVRqMwp6NF8oUU4pMWlTIUReQ3ZFUWZibD0kZEg1NTJtWWxDTSkxVGgoK3xWdlg2XzA4
bFk0XjY3NCYrR28+e1gjc35FQVAKeitCMjtrWTRsVWlIJXhJLWVINHB8M2wqY0cta0Uye2N4RUs8
NWBiQ1ZBRl8mKFVeb1FeVGc2QztYJnRrVzF5Z3dACno9dWtOPmM7QG9NMWJWQTdyKCs0cTM9bytt
RH1UWHk9PWQmRmpDT25kajZ0Jj9rVlpRfUYxMlQ3Xnt3JDBJclRNUgp6QGZ4MVZQbWVkK2Y2Ynxq
U1hZTXAoPiZCdlVeeHQheC1VSE0wK3E9c1l7TWZDRk0jV2RyK3srNzZYVjdjZ0ZpPlgKejZLamBf
Z2Z9QlIoTkAze0Z+M2sxTEwoQTJReTFocjB5ZT96cGBzKjEpKWdndHppZFVCXloxeXc8M2YzdD1Z
UjlICnpnOTheMD8yIyp8Zz1jQnRHY2d2VlB3YzU1KkxeV09DO2BTKmJuLXo9IWVYKzVGWUgjN01l
U0l3WnRhPl9IM1J2Uwp6UE5WaExAVD8qYWI0eEBrMEArMH51e3VJI09ieHN3YlR5IWdNNy0tMCNS
bmNhQENXZCpMUGo7YlYwJUdRdUcyYnQKenAyO3ZDK2ZgVXVRRE8pQilgPVkkMEskfnJnVFFnLVRD
YU5PZm1SIWVndmtxRyZLaDUpaHd4P0E7TEFmKWskM0VJCnpqdi1BUkw/cDhyNFFVIW8zKGRmP1dp
VSpjRm9ZUjxQT2B8T1k2emp1ek44OTBEcDN1akRqJjJZQWJZSk5nWVhxKgp6NlpDUmI3RW91P0Jo
QSFId1A4OEthPj0xPTMzVkZvSV84M15xYVh5cUpKfjVKUkZCakkpPzhFZjY0YV50OCEwSSsKemhO
My1DaUI1R2hCa01WOClZK0ZOSFFPMTJkO1BGVGwjOD1nJFFnQnFiY1EqUDdxKl5aXkBEfCllZC03
Uis3fCRJCnpoeD9fQWE7NGAjQDA7cGJ5TnRMfl5vM2okJipveDkxb2hNJWFSYWF3ZnI2dU9vPnIy
NDljQzdYb3ZNY3xudVl7OAp6SHtVfT8lJEZBSmBzdHVxejZDI2Q2NTE0WGp0M18hQ1FsMHA3Qmow
JjlSdl4+UzlOaVFBR0plYUV0OCM5YjtLelAKeklzZ01KMU1xLSkwdnJsRXJeaSF3eHRndlF1MHct
SWxndyhwVylmO1d2KTFffWN4SV5lTGhQVn1xRjBjdHlyYj5JCnomVmhBIStqMmZZbTk9eGAmUyVC
bFZ3VDNXPCQmJFIwWkF3I1dUQypEKiN3eEc1RDxKeU50XzI8aX1eLWpTcng0Owp6d0pqVFNqNC1E
cl9SOF9yRUtYI2lYfSM8fnQ3eHExIThIIVgpcStOKDB8aGpMNj8hXnh4V0tidlcpfiZWaChMdl8K
em5OMXlZTDhMODAqNFpObzY/ckQyI3BAYzQlVzBsUUYzYiNUUkJ0dTRuMX1oQUF1JCtqM096Tllm
YUZWNm87Wio9CnpxTllsTm10KUkzeG1vPj9wKXFvfjhCZHhBJn5kb1YxSkgoPyhMOWdubiNXKzBf
fDs1PzFucWpSISh8PnJERCRNSQp6Q0Q5ek5eNjszMTVFSyQ3SUo8dTRua0BEd0VidzNyRWdEcjRv
O25SfGYrMDQyMSkkSG94VEJTP1VTJHhnc2tuYVAKelRvVzZXMTM9QWNLI3QmPklkVVo4YUswRD4t
JnplSkp0PGEmTz5oJEk0OE9uLSE7PVBVOCNXSjhxaHNxaiVGc2coCnpRYzAoVz5ibGhHSXl4T2s+
cEUtckBKTHw+OTRUeEM5RnFWWFpOcXkmYnh7fDRIQjczXmMqaWFiNF5rb1BBdTkldwp6RjUkdVMy
cDs2XktOVCU9SmplfEo1Mn1HaE1sdzd8dTVJdyh2USNZcjAlanpwYnZCamBaUFRIfTc5Mj9Saz4r
YWYKejs2a05WX2kxTGM3Izw4VjU5fGchbjhCOzZoI0NfJkc0Uk5lMDQ8UTtQZ1VAJUR7S3loSis1
V2BtOV41QDh5SkJRCnpMSmVqTj9yVkBASzZ9SU1VK2ZoLWR6Vndyc2xJUGBDJCh9a1ZMNVEwSyY8
aHtpSVRrWjJRblFia05Ebzg/ZjJMNgp6YXw5UFRhV3NmTyFHJWFNaEQpNWI5d2o0U0JoVVpYLXV6
NT94cjx+UGhkU2B9WHFWWXp8Rj9QckdtI21HbXdKbG0Kek4jezVzQiFfd3tePE08OGAzRndUO3op
S21yNy1hV2AoMistJTB6YjtFcW0hTW1eQXVQOEQ8LXY1QyRkTE1tLXY/CnpzUmhHXjQ2NG5VdXFu
ZGtlQXJ3Rm5+UHp5NWpJYlIlfTJ1S3FtY09rQXNMLVVNRH1xeHF+O1YwWD8tY1RZaVlRNAp6Z2dz
akxkSCM9akZGdytIaik+Jm9meFZUQVNaUilAJTI3KGo1fVo8NEIxSSYtZ3V9VmlWZ3o1PCRSZkp2
KysyYlQKelJWJHJJXl5tfm8qRl5HK09gY2dHSSFJMC0jT1N0MT5wXn47MTQybEk/MTh+U25jNXFL
VyoyKj5mLUtvdjU4YEMrCnpPcHF2aCNpZHc2VyQoUGJxXlVnYCgtSkx2N2NhJDxFXylsN1ZoTmJO
Q29hWDNGPyUxbTZpZHdQQG5ZJnMoKG9nUgp6RF5tcmojPGYlJTshV3NgTGlSUkQtQUc9fmg+Zz1g
YTNkbEszdz1hZD1jMD9CYmxBVDNrfCYpY0UmVk1fNiY2aEQKejEpRGp7UC1gKXBlQ1okQkU4eUo5
OU1TSEgkbUwoUmNTYm91VGhtaytVYSFvNSYoNm9aKG1UTTxeNyhOVGpgUDNRCnpmVlQ3QlUmLVRG
R3Z7QWgkczt4Zy04X25URVl7NmVCajtTcS19bD01cXxTZGdUPjFmTnh2TkpkaiNvP2JfX2ZzaQp6
YEIjYEt5fU5tNTZ1cWs1NTQhTHpNWVF9R01aQ0tGMXg0fmtBNVd4akBaQ2gjZEB8OWh6bXtrKGVr
anBkezY9REIKej5DPVhkWnZBQ016VnVOPFp+aT8qZWApLXMpckZWKCpYRXhJNDNeJkRLWEtldzFy
Tj0+MDY0ayQzQnN3eHVORj5jCnohX2tXYD8hQmNveXQjUjY9azhuaTteNXhxbyVRQn1mcnNEaCVZ
I1EmXzA3aWdgUCkwZ1RpWksocWV0aCpwUCReRwp6aj9OZShjNzFPJitJcXxgaHRFV1lsaE8yVE0/
WDNeZHkqT05QNUVlSF5MZjVIKj93WDhfe0lsfHs/ZShrSkFENDcKeko5bDBsZSgxdispbW9ybj1j
VmI7bU9MbEg+IVhxdlpmfXB5WXlJJHppNE5iY1lkYklTKWRiaHlwPSZ3XypXY05FCnp5SyYobSZX
RiE5PlB3Xk4tXz9CWkAkVF5UI0NzTSRAMzxKZyhSZ3EzKFo+Nmx1UUFAZ0BjcVFiKCZyUDgkMlRg
VgpKNVpgP0tlKnM4MVRqQnIhCgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS9K
U1Rlc3RzL3dhc20vc3RyZXNzL3N0cmVhbWluZy1iYXNpYy5qcyBiL0pTVGVzdHMvd2FzbS9zdHJl
c3Mvc3RyZWFtaW5nLWJhc2ljLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIzZmJjMjQ3OWY3MjE2M2RmYWQzMjEw
NDA1NmJhMjc0MzU5MjM1ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vc3RyZXNz
L3N0cmVhbWluZy1iYXNpYy5qcwpAQCAtMCwwICsxLDE4IEBACitpbXBvcnQgKiBhcyBhc3NlcnQg
ZnJvbSAnLi4vYXNzZXJ0LmpzJzsKKwordmFyIGRhdGEgPSByZWFkKCIuL25hbWVTZWN0aW9uLndh
c20iLCAiYmluYXJ5Iik7CisKK2Z1bmN0aW9uIGNoZWNrKHN0ZXApCit7CisgICAgdmFyIHBhcnNl
ciA9ICR2bS5jcmVhdGVXYXNtU3RyZWFtaW5nUGFyc2VyKCk7CisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBkYXRhLmJ5dGVMZW5ndGg7IGkgKz0gc3RlcCkgeworICAgICAgICBwYXJzZXIuYWRkQnl0
ZXMoZGF0YS5zdWJhcnJheShpLCBpICsgTWF0aC5taW4oc3RlcCwgZGF0YS5ieXRlTGVuZ3RoIC0g
aSkpKTsKKyAgICB9CisgICAgYXNzZXJ0LmVxKHBhcnNlci5maW5hbGl6ZSgpLCA3KTsKK30KKwor
Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgKytpKQorICAgIGNoZWNrKGkgKyAxKTsKK2NoZWNrKDEw
MCk7CitjaGVjaygxMDAwKTsKK2NoZWNrKDIwMDApOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>348167</attachid>
            <date>2018-08-27 11:09:08 -0700</date>
            <delta_ts>2018-08-27 15:31:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-188943-20180828030907.patch</filename>
            <type>text/plain</type>
            <size>171450</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM1MzU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
ZDJhYzBiZmEwNjcxODA3MDdlMGE1YmI1YWFlNzRlZjJlYjNhZTYwLi5iYWRlZmU4ZjIyN2VmYzM2
MTRiY2U3M2Y3YWZlNzEzNTQ1ZWVjYjNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNjYgQEAKKzIwMTgtMDgtMjcgIFl1c3VrZSBTdXp1a2kgIDx5dXN1a2VzdXp1a2lAc2xv
d3N0YXJ0Lm9yZz4KKworICAgICAgICBbV2ViQXNzZW1ibHldIFBhcnNlIHdhc20gbW9kdWxlcyBp
biBhIHN0cmVhbWluZyBmYXNoaW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xODg5NDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgV2FzbTo6U3RyZWFtaW5nUGFyc2VyLCB3aGlj
aCBwYXJzZXMgd2FzbSBiaW5hcnkgaW4gYSBzdHJlYW1pbmcgZmFzaGlvbi4KKyAgICAgICAgQ3Vy
cmVudGx5LCB0aGlzIFN0cmVhbWluZ1BhcnNlciBpcyBub3QgZW5hYmxlZCBhbmQgaW50ZWdyYXRl
ZC4gSW4gc3Vic2VxdWVudCBwYXRjaGVzLAorICAgICAgICB3ZSBzdGFydCBpbnRlZ3JhdGluZyBp
dCBpbnRvIEJCUVBsYW4gYW5kIGRyb3BwaW5nIHRoZSBvbGQgTW9kdWxlUGFyc2VyLgorCisgICAg
ICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiB0b29scy9KU0RvbGxhclZNLmNwcDoKKyAgICAgICAg
KFdURjo6V2FzbVN0cmVhbWluZ1BhcnNlcjo6V2FzbVN0cmVhbWluZ1BhcnNlcik6CisgICAgICAg
IChXVEY6Oldhc21TdHJlYW1pbmdQYXJzZXI6OmNyZWF0ZSk6CisgICAgICAgIChXVEY6Oldhc21T
dHJlYW1pbmdQYXJzZXI6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXVEY6Oldhc21TdHJl
YW1pbmdQYXJzZXI6OnN0cmVhbWluZ1BhcnNlcik6CisgICAgICAgIChXVEY6Oldhc21TdHJlYW1p
bmdQYXJzZXI6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdURjo6ZnVuY3Rpb25XYXNtU3Ry
ZWFtaW5nUGFyc2VyQWRkQnl0ZXMpOgorICAgICAgICAoV1RGOjpmdW5jdGlvbldhc21TdHJlYW1p
bmdQYXJzZXJGaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uQ3JlYXRlV2FzbVN0cmVh
bWluZ1BhcnNlcik6CisgICAgICAgIChKU0M6OkpTRG9sbGFyVk06OmZpbmlzaENyZWF0aW9uKToK
KyAgICAgICAgVGhpcyBvYmplY3QgaXMgaW50cm9kdWNlZCBmb3IgdGVzdGluZyBwdXJwb3NlLiBB
ZGRlZCBuZXcgc3RyZXNzIHRlc3QgdXNlcyB0aGlzIGludGVyZmFjZQorICAgICAgICB0byB0ZXN0
IHN0cmVhbWluZyBwYXJzZXIgaW4gdGhlIEpTQyBzaGVsbC4KKworICAgICAgICAqIHdhc20vV2Fz
bUJCUVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpCQlFQbGFuKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSk6CisgICAg
ICAgIChKU0M6Oldhc206OkJCUVBsYW46OnByZXBhcmUpOgorICAgICAgICAoSlNDOjpXYXNtOjpC
QlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6
Y29tcGxldGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjp3b3JrKToKKyAgICAgICAg
KiB3YXNtL1dhc21CQlFQbGFuLmg6CisgICAgICAgIEJCUVBsYW4gaGFzIG1fc291cmNlLCBidXQg
b25jZSBNb2R1bGVJbmZvcm1hdGlvbiBpcyBwYXJzZWQsIGl0IGlzIG5vIGxvbmdlciBuZWNlc3Nh
cnkuCisgICAgICAgIEluIHN1YnNlcXVlbnQgcGF0Y2hlcywgd2Ugd2lsbCByZW1vdmUgdGhpcywg
YW5kIHN0cmVhbSB0aGUgZGF0YSBpbnRvIHRoZSBCQlFQbGFuLgorCisgICAgICAgICogd2FzbS9X
YXNtRm9ybWF0Lmg6CisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbjo6TW9kdWxlSW5mb3JtYXRpb24p
OgorICAgICAgICAqIHdhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmg6CisgICAgICAgIE9uZSBv
ZiB0aGUgbGFyZ2VzdCBjaGFuZ2UgaW4gdGhpcyBwYXRjaCBpcyB0aGF0IE1vZHVsZUluZm9ybWF0
aW9uIG5vIGxvbmdlciBob2xkcyBzb3VyY2UgYnl0ZXMsCisgICAgICAgIHNpbmNlIHNvdXJjZSBi
eXRlcyBjYW4gYmUgYWRkZWQgaW4gYSBzdHJlYW1pbmcgZmFzaGlvbi4gSW5zdGVhZCBvZiBob2xk
aW5nIGFsbCB0aGUgc291cmNlIGJ5dGVzCisgICAgICAgIGluIE1vZHVsZUluZm9ybWF0aW9uLCBl
YWNoIGZ1bmN0aW9uIChNb2R1bGVJbmZvcm1hdGlvbjo6ZnVuY3Rpb25zLCBGdW5jdGlvbkRhdGEp
IHNob3VsZCBoYXZlCisgICAgICAgIFZlY3Rvcjx1aW50OF90PiBmb3IgaXRzIGRhdGEuIFRoaXMg
ZGF0YSBpcyBldmVudHVhbGx5IGZpbGxlZCBieSBTdHJlYW1pbmdQYXJzZXIsIGFuZCBjb21waWxp
bmcKKyAgICAgICAgYSBmdW5jdGlvbiB3aXRoIHRoaXMgZGF0YSBjYW4gYmUgZG9uZSBjb25jdXJy
ZW50bHkgd2l0aCBTdHJlYW1pbmdQYXJzZXIuCisKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxl
SW5mb3JtYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZUluZm9ybWF0
aW9uOjptZW1vcnlDb3VudCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZUluZm9y
bWF0aW9uOjp0YWJsZUNvdW50IGNvbnN0KToKKyAgICAgICAgbWVtb3J5Q291bnQgYW5kIHRhYmxl
Q291bnQgc2hvdWxkIGJlIHJlY29yZWRlZCBpbiBNb2R1bGVJbmZvcm1hdGlvbi4KKworICAgICAg
ICAqIHdhc20vV2FzbU1vZHVsZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVs
ZVBhcnNlcjo6cGFyc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjptYWtlSTMySW5pdEV4cHIpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlVHlwZSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VJbXBvcnQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb24p
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlUmVzaXph
YmxlTGltaXRzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpw
YXJzZVRhYmxlSGVscGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFy
c2VyOjpwYXJzZVRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFy
c2VyOjpwYXJzZU1lbW9yeUhlbHBlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206Ok1v
ZHVsZVBhcnNlcjo6cGFyc2VNZW1vcnkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpN
b2R1bGVQYXJzZXI6OnBhcnNlR2xvYmFsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6
TW9kdWxlUGFyc2VyOjpwYXJzZUV4cG9ydCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206
Ok1vZHVsZVBhcnNlcjo6cGFyc2VTdGFydCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206
Ok1vZHVsZVBhcnNlcjo6cGFyc2VFbGVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2Fz
bTo6TW9kdWxlUGFyc2VyOjpwYXJzZUNvZGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNt
OjpNb2R1bGVQYXJzZXI6OnBhcnNlSW5pdEV4cHIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpX
YXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlR2xvYmFsVHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZUN1c3RvbSk6IERlbGV0ZWQuCisgICAgICAgIEV4
dHJhY3Qgc2VjdGlvbiBwYXJzaW5nIGNvZGUgb3V0IGZyb20gTW9kdWxlUGFyc2VyLiBXZSBjcmVh
dGUgU2VjdGlvblBhcnNlciBhbmQgTW9kdWxlUGFyc2VyIHVzZXMgaXQuCisgICAgICAgIFNlY3Rp
b25QYXJzZXIgaXMgYWxzbyB1c2VkIGJ5IFN0cmVhbWluZ1BhcnNlci4KKworICAgICAgICAqIHdh
c20vV2FzbU1vZHVsZVBhcnNlci5oOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiB3
YXNtL1dhc21OYW1lU2VjdGlvbi5oOgorICAgICAgICAoSlNDOjpXYXNtOjpOYW1lU2VjdGlvbjo6
TmFtZVNlY3Rpb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpOYW1lU2VjdGlvbjo6Y3JlYXRlKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TmFtZVNlY3Rpb246OnNldEhhc2gpOgorICAgICAgICBIYXNo
IGNhbGN1bGF0aW9uIGlzIGRlZmVycmVkIHNpbmNlIGFsbCB0aGUgc291cmNlIGlzIG5vdCBhdmFp
bGFibGUgaW4gc3RyZWFtaW5nIHBhcnNpbmcuCisKKyAgICAgICAgKiB3YXNtL1dhc21OYW1lU2Vj
dGlvblBhcnNlci5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok5hbWVTZWN0aW9uUGFyc2VyOjpw
YXJzZSk6CisgICAgICAgICogd2FzbS9XYXNtTmFtZVNlY3Rpb25QYXJzZXIuaDoKKyAgICAgICAg
VXNlIFJlZjxOYW1lU2VjdGlvbj4uCisKKyAgICAgICAgKiB3YXNtL1dhc21PTUdQbGFuLmNwcDoK
KyAgICAgICAgKEpTQzo6V2FzbTo6T01HUGxhbjo6d29yayk6CisgICAgICAgIFdhc206OlBsYW4g
bm8gbG9uZ2VyIGhhdmUgbV9zb3VyY2Ugc2luY2UgZGF0YSB3aWxsIGJlIGV2ZW50dWFsbHkgZmls
bGVkIGluIGEgc3RyZWFtaW5nIGZhc2hpb24uCisgICAgICAgIE9NR1BsYW4gY2FuIGdldCBkYXRh
IG9mIHRoZSBmdW5jdGlvbiBieSB1c2luZyBNb2R1bGVJbmZvcm1hdGlvbjo6ZnVuY3Rpb25zLgor
CisgICAgICAgICogd2FzbS9XYXNtUGFyc2VyLmg6CisgICAgICAgIChKU0M6Oldhc206OlBhcnNl
cjo6c291cmNlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGFyc2VyOjpsZW5ndGggY29u
c3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpQYXJzZXI6Om9mZnNldCBjb25zdCk6CisgICAgICAg
IChKU0M6Oldhc206OlBhcnNlcjo6ZmFpbCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206Om1h
a2VJMzJJbml0RXhwcik6CisgICAgICAgICogd2FzbS9XYXNtUGxhbi5jcHA6CisgICAgICAgIChK
U0M6Oldhc206OlBsYW46OlBsYW4pOgorICAgICAgICBXYXNtOjpQbGFuIHNob3VsZCBub3QgaGF2
ZSBhbGwgdGhlIHNvdXJjZSBhcHJpb3JpLiBTdHJlYW1lZCBkYXRhIHdpbGwgYmUgcHVtcGVkIGZy
b20gdGhlIHByb3ZpZGVyLgorCisgICAgICAgICogd2FzbS9XYXNtUGxhbi5oOgorICAgICAgICAq
IHdhc20vV2FzbVNlY3Rpb25QYXJzZXIuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcC4KKyAgICAgICAgU2VjdGlvblBhcnNlciBp
cyBleHRyYWN0ZWQgZnJvbSBNb2R1bGVQYXJzZXIuIEFuZCBpdCBpcyB1c2VkIGJvdGggdGhlIG9s
ZCAoY3VycmVudGx5IHdvcmtpbmcpIE1vZHVsZVBhcnNlcgorICAgICAgICBhbmQgdGhlIG5ldyBT
dHJlYW1pbmdQYXJzZXIuCisKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFy
c2VUeXBlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VJbXBvcnQp
OgorICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZUZ1bmN0aW9uKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VSZXNpemFibGVMaW1pdHMpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZVRhYmxlSGVscGVyKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VUYWJsZSk6CisgICAgICAgIChK
U0M6Oldhc206OlNlY3Rpb25QYXJzZXI6OnBhcnNlTWVtb3J5SGVscGVyKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VNZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNt
OjpTZWN0aW9uUGFyc2VyOjpwYXJzZUdsb2JhbCk6CisgICAgICAgIChKU0M6Oldhc206OlNlY3Rp
b25QYXJzZXI6OnBhcnNlRXhwb3J0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNl
cjo6cGFyc2VTdGFydCk6CisgICAgICAgIChKU0M6Oldhc206OlNlY3Rpb25QYXJzZXI6OnBhcnNl
RWxlbWVudCk6CisgICAgICAgIChKU0M6Oldhc206OlNlY3Rpb25QYXJzZXI6OnBhcnNlQ29kZSk6
CisgICAgICAgIChKU0M6Oldhc206OlNlY3Rpb25QYXJzZXI6OnBhcnNlSW5pdEV4cHIpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZUdsb2JhbFR5cGUpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZURhdGEpOgorICAgICAgICAoSlNDOjpX
YXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZUN1c3RvbSk6CisgICAgICAgICogd2FzbS9XYXNtU2Vj
dGlvblBhcnNlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TW9kdWxlUGFyc2VyLmguCisgICAgICAgICogd2FzbS9XYXNtU3RyZWFtaW5nUGFyc2VyLmNwcDog
QWRkZWQuCisgICAgICAgIChKU0M6Oldhc206OnBhcnNlVUludDcpOgorICAgICAgICAoSlNDOjpX
YXNtOjpTdHJlYW1pbmdQYXJzZXI6OmZhaWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1p
bmdQYXJzZXI6OlN0cmVhbWluZ1BhcnNlcik6CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWlu
Z1BhcnNlcjo6cGFyc2VNb2R1bGVIZWFkZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1p
bmdQYXJzZXI6OnBhcnNlU2VjdGlvbklEKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U3RyZWFtaW5n
UGFyc2VyOjpwYXJzZVNlY3Rpb25TaXplKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U3RyZWFtaW5n
UGFyc2VyOjpwYXJzZUNvZGVTZWN0aW9uU2l6ZSk6CisgICAgICAgIENvZGUgc2VjdGlvbiBpbiBX
YXNtIGJpbmFyeSBpcyBzcGVjaWFsbHkgaGFuZGxlZCBjb21wYXJlZCB3aXRoIHRoZSBvdGhlciBz
ZWN0aW9ucyBzaW5jZSBpdCBpbmNsdWRlcworICAgICAgICBidW5jaCBvZiBmdW5jdGlvbnMuIFN0
cmVhbWluZ1BhcnNlciBleHRyYWN0cyBlYWNoIGZ1bmN0aW9uIGluIGEgc3RyZWFtaW5nIGZhc2hp
b24gYW5kIGVuYWJsZSBzdHJlYW1pbmcKKyAgICAgICAgdmFsaWRhdGlvbiAvIGNvbXBpbGF0aW9u
IG9mIFdhc20gZnVuY3Rpb25zLgorCisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNl
cjo6cGFyc2VGdW5jdGlvblNpemUpOgorICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJz
ZXI6OnBhcnNlRnVuY3Rpb25QYXlsb2FkKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U3RyZWFtaW5n
UGFyc2VyOjpwYXJzZVNlY3Rpb25QYXlsb2FkKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U3RyZWFt
aW5nUGFyc2VyOjpjb25zdW1lKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U3RyZWFtaW5nUGFyc2Vy
Ojpjb25zdW1lVmFyVUludDMyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U3RyZWFtaW5nUGFyc2Vy
OjphZGRCeXRlcyk6CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6ZmFpbE9u
U3RhdGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdQYXJzZXI6OmZpbmFsaXplKToK
KyAgICAgICAgKiB3YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuaDogQWRkZWQuCisgICAgICAgIChK
U0M6Oldhc206OlN0cmVhbWluZ1BhcnNlcjo6YWRkQnl0ZXMpOgorICAgICAgICAoSlNDOjpXYXNt
OjpTdHJlYW1pbmdQYXJzZXI6OmVycm9yTWVzc2FnZSBjb25zdCk6CisgICAgICAgIFRoaXMgaXMg
b3VyIG5ldyBTdHJlYW1pbmdQYXJzZXIgaW1wbGVtZW50YXRpb24uIFN0cmVhbWluZ1BhcnNlcjo6
Y29uc3VtZVhYWCBmdW5jdGlvbnMgZ2V0IGRhdGEsIGFuZAorICAgICAgICBTdHJlYW1pbmdQYXJz
ZXI6OnBhcnNlWFhYIGZ1bmN0aW9ucyBwYXJzZSBjb25zdW1lZCBkYXRhLiBUaGUgdXNlciBvZiBT
dHJlYW1pbmdQYXJzZXIgY2FsbHMKKyAgICAgICAgU3RyZWFtaW5nUGFyc2VyOjphZGRCeXRlcygp
IHRvIHB1bXAgdGhlIGJ5dGVzIHN0cmVhbSBpbnRvIHRoZSBwYXJzZXIuIEFuZCBvbmNlIGFsbCB0
aGUgZGF0YSBpcyBwdW1wZWQsCisgICAgICAgIHRoZSB1c2VyIGNhbGxzIFN0cmVhbWluZ1BhcnNl
cjo6ZmluYWxpemUuIFN0cmVhbWluZ1BhcnNlciBpcyBhIHN0YXRlIG1hY2hpbmUgd2hpY2ggZmVl
ZHMgdGhlIGluY29taW5nCisgICAgICAgIGJ5dGUgc3RyZWFtLgorCisgICAgICAgICogd2FzbS9q
cy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1v
ZHVsZTo6c291cmNlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgQWxsIHRoZSBzb3VyY2Ugc2hv
dWxkIG5vdCBiZSBoZWxkLgorCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxl
Lmg6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseVByb3RvdHlwZS5jcHA6CisgICAgICAg
IChKU0M6OndlYkFzc2VtYmx5VmFsaWRhdGVGdW5jKToKKwogMjAxOC0wOC0yNCAgWXVzdWtlIFN1
enVraSAgPHl1c3VrZXN1enVraUBzbG93c3RhcnQub3JnPgogCiAgICAgICAgIFtKU0NdIEFycmF5
LnByb3RvdHlwZS5yZXZlcnNlIG1vZGlmaWVzIEpTSW1tdXRhYmxlQnV0dGVyZmx5CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGMy
ZjFlZmExOWZhNTg0NDZiODBkNjI0NGJkYmQ5NWFlZDkxYmFjYTUuLjViYWYwNTNkYjBkZGY3MzY4
MGJjNWM2YjI5NzVlNmQ2NTk5ZGRhMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTgtMDgtMjcg
IFl1c3VrZSBTdXp1a2kgIDx5dXN1a2VzdXp1a2lAc2xvd3N0YXJ0Lm9yZz4KKworICAgICAgICBb
V2ViQXNzZW1ibHldIFBhcnNlIHdhc20gbW9kdWxlcyBpbiBhIHN0cmVhbWluZyBmYXNoaW9uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODg5NDMKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgbWF4Qnl0
ZUxlbmd0aCBmdW5jdGlvbiB0byBnZXQgdGhlIG1heGltdW0gc2l6ZSBmb3IgVC4KKworICAgICAg
ICAqIHd0Zi9MRUJEZWNvZGVyLmg6CisgICAgICAgIChXVEY6OkxFQkRlY29kZXI6Om1heEJ5dGVM
ZW5ndGgpOgorICAgICAgICAoV1RGOjpMRUJEZWNvZGVyOjpkZWNvZGVVSW50KToKKyAgICAgICAg
KFdURjo6TEVCRGVjb2Rlcjo6ZGVjb2RlSW50KToKKwogMjAxOC0wOC0yNSAgWXVzdWtlIFN1enVr
aSAgPHl1c3VrZXN1enVraUBzbG93c3RhcnQub3JnPgogCiAgICAgICAgIFNocmluayBzaXplIG9m
IFhNTEh0dHBSZXF1ZXN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDE3YTQ4YmRh
NmQ0YmUzOTdiMDhlOTQ2Y2JkNDg2MTA2NzQ3OTlkYWUuLjQyNmQxOWRjZTk1NDgyZTg1MWJmZTlj
OTM4N2QyY2Y2MzNmNTVkNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNzM0
LDYgKzE3MzQsOCBAQAogCQlFMzkzQUREODFGRTcwMkQwMDAyMkQ2ODEgLyogV2Vha01hcEltcGxJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
MzkzQURENzFGRTcwMkNDMDAyMkQ2ODEgLyogV2Vha01hcEltcGxJbmxpbmVzLmggKi87IH07CiAJ
CUUzOUQ0NUY1MUQzOTAwNTYwMEIzQjM3NyAvKiBJbnRlcnByZXRlcklubGluZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzOUQ5RDg0MUQzOTAwMDYw
MDY2NzI4MiAvKiBJbnRlcnByZXRlcklubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMzlEQTRBNzFCN0U4QjdDMDA4NEYzM0EgLyogSlNN
b2R1bGVSZWNvcmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUzOURBNEE1MUI3RThCN0MwMDg0RjMzQSAvKiBKU01vZHVsZVJlY29yZC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUUzQTA1MzFBMjEzNDJC
NjgwMDIyRUMxNCAvKiBXYXNtU3RyZWFtaW5nUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFM0EwNTMxNjIxMzQyQjY2MDAyMkVDMTQgLyogV2Fz
bVN0cmVhbWluZ1BhcnNlci5oICovOyB9OworCQlFM0EwNTMxQzIxMzQyQjY4MDAyMkVDMTQgLyog
V2FzbVNlY3Rpb25QYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUzQTA1MzE4MjEzNDJCNjcwMDIyRUMxNCAvKiBXYXNtU2VjdGlvblBhcnNlci5o
ICovOyB9OwogCQlFM0EzMkJDNzFGQzgzMTQ3MDA3RDdFNzYgLyogV2Vha01hcEltcGwuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzQTMyQkM2MUZDODMx
MkUwMDdEN0U3NiAvKiBXZWFrTWFwSW1wbC5oICovOyB9OwogCQlFM0E0MjE0MzFENkY1ODkzMDAw
N0M2MTcgLyogUHJlY2lzZUp1bXBUYXJnZXRzSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTNBNDIxNDIxRDZGNTg4RjAwMDdDNjE3IC8qIFBy
ZWNpc2VKdW1wVGFyZ2V0c0lubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlFM0JGRDBCQzFEQUY4MDhFMDA2NURFQTIgLyogQWNjZXNzQ2Fz
ZVNuaXBwZXRQYXJhbXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEUzQkZEMEJBMURBRjgwN0MwMDY1REVBMiAvKiBBY2Nlc3NDYXNlU25pcHBldFBhcmFt
cy5oICovOyB9OwpAQCAtNDYyMiw2ICs0NjI0LDEwIEBACiAJCUUzOUQ5RDg0MUQzOTAwMDYwMDY2
NzI4MiAvKiBJbnRlcnByZXRlcklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSW50ZXJwcmV0ZXJJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUUzOURBNEE0MUI3RThCN0MwMDg0RjMzQSAvKiBKU01vZHVsZVJlY29yZC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU01vZHVsZVJlY29yZC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzOURBNEE1MUI3RThCN0MwMDg0RjMzQSAvKiBKU01vZHVs
ZVJlY29yZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU01vZHVsZVJlY29y
ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFM0EwNTMxNjIxMzQyQjY2MDAyMkVD
MTQgLyogV2FzbVN0cmVhbWluZ1BhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXYXNtU3RyZWFtaW5nUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUUzQTA1MzE3MjEzNDJCNjYwMDIyRUMxNCAvKiBXYXNtU2VjdGlvblBhcnNlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtU2VjdGlvblBhcnNlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzQTA1MzE4MjEzNDJCNjcwMDIyRUMxNCAvKiBX
YXNtU2VjdGlvblBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNt
U2VjdGlvblBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFM0EwNTMxOTIx
MzQyQjY3MDAyMkVDMTQgLyogV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtU3RyZWFtaW5nUGFyc2VyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTNBMzJCQzUxRkM4MzEyRDAwN0Q3RTc2IC8qIFdlYWtNYXBJ
bXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYWtNYXBJbXBs
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTNBMzJCQzYxRkM4MzEyRTAwN0Q3
RTc2IC8qIFdlYWtNYXBJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdl
YWtNYXBJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzQTQyMTQyMUQ2RjU4
OEYwMDA3QzYxNyAvKiBQcmVjaXNlSnVtcFRhcmdldHNJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFByZWNpc2VKdW1wVGFyZ2V0c0lubGluZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYzNDgsOSArNjM1NCwxMyBAQAogCQkJCTUzRjQwRThDMUQ1
OTAxRjIwMDk5QTFCNiAvKiBXYXNtUGFyc2VyLmggKi8sCiAJCQkJNTMxMzc0QkUxRDVDRTk1MDAw
QUY3QTBCIC8qIFdhc21QbGFuLmNwcCAqLywKIAkJCQk1MzEzNzRCQzFENUNFNjc2MDBBRjdBMEIg
LyogV2FzbVBsYW4uaCAqLywKKwkJCQlFM0EwNTMxNzIxMzQyQjY2MDAyMkVDMTQgLyogV2FzbVNl
Y3Rpb25QYXJzZXIuY3BwICovLAorCQkJCUUzQTA1MzE4MjEzNDJCNjcwMDIyRUMxNCAvKiBXYXNt
U2VjdGlvblBhcnNlci5oICovLAogCQkJCTUzRjQwRTg0MUQ1OEY5NzcwMDk5QTFCNiAvKiBXYXNt
U2VjdGlvbnMuaCAqLywKIAkJCQlBRDc0MzhCRTFFMDQ1NzkyMDBGRDBDMkEgLyogV2FzbVNpZ25h
dHVyZS5jcHAgKi8sCiAJCQkJQUQ3NDM4QkYxRTA0NTc5MjAwRkQwQzJBIC8qIFdhc21TaWduYXR1
cmUuaCAqLywKKwkJCQlFM0EwNTMxOTIxMzQyQjY3MDAyMkVDMTQgLyogV2FzbVN0cmVhbWluZ1Bh
cnNlci5jcHAgKi8sCisJCQkJRTNBMDUzMTYyMTM0MkI2NjAwMjJFQzE0IC8qIFdhc21TdHJlYW1p
bmdQYXJzZXIuaCAqLywKIAkJCQlBRDVDMzZFMzFGNjlFQzhCMDAwQkNBQUYgLyogV2FzbVRhYmxl
LmNwcCAqLywKIAkJCQlBRDVDMzZFNDFGNjlFQzhCMDAwQkNBQUYgLyogV2FzbVRhYmxlLmggKi8s
CiAJCQkJNTI1MEQyQ0YxRThEQTA1QTAwMjlBOTMyIC8qIFdhc21UaHVua3MuY3BwICovLApAQCAt
ODQ0OCw3ICs4NDU4LDYgQEAKIAkJCQlDMkZDQUUxMzE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY2NkVDMDE4MzU2NkY5
MDBEMDE3RjEgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRTMyOERBRUIxRDM4RDAwNTAwMUEyNTI5IC8qIEJ5dGVjb2RlUmV3cml0ZXIuaCBp
biBIZWFkZXJzICovLAotCQkJCUZFQTNCQkFDMjEyQzk3Q0IwMEU5M0FEMSAvKiBERkdDRkcuaCBp
biBIZWFkZXJzICovLAogCQkJCTY1MTRGMjE5MThCM0UxNjcwMDk4RkY4QiAvKiBCeXRlY29kZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGODg1RTExMTg0OUEzQkUwMEYxRTNGQSAvKiBCeXRlY29k
ZVVzZURlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4MDIzRUExNjEzODMyQjAwQTBCQTQ1IC8q
IEJ5VmFsSW5mby5oIGluIEhlYWRlcnMgKi8sCkBAIC04NTgxLDYgKzg1OTAsNyBAQAogCQkJCTBG
QkRCOUFEMUFCMEZCQzYwMDBCNTdFNSAvKiBERkdDYWxsQ3JlYXRlRGlyZWN0QXJndW1lbnRzU2xv
d1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGN0IyOTRCMTRDM0NEMkYwMDdD
M0RCMSAvKiBERkdDYXBhYmlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZDOTU4MTRF
RjkwQTIwMEM3MjUzMiAvKiBERkdDRkFQaGFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkVBM0JC
QUMyMTJDOTdDQjAwRTkzQUQxIC8qIERGR0NGRy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzQjNB
MjgxNTQ0Qzk5NzAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGOUQzNjk1MUFFOUNDMzMwMDBENERGQiAvKiBERkdDbGVhblVwUGhhc2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3N0E0MjQwMTdBMEJCRkQwMEE4REI4MSAvKiBERkdDbG9i
YmVyaXplLmggaW4gSGVhZGVycyAqLywKQEAgLTk2MDcsOCArOTYxNywxMCBAQAogCQkJCTc5Qjc1
OTc2MURGQTRDNjAwMDUyMTc0QyAvKiBXYXNtUGFnZUNvdW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1M0Y0MEU4RDFENTkwMUYyMDA5OUExQjYgLyogV2FzbVBhcnNlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTMxMzc0QkQxRDVDRTY3NjAwQUY3QTBCIC8qIFdhc21QbGFuLmggaW4gSGVhZGVycyAq
LywKKwkJCQlFM0EwNTMxQzIxMzQyQjY4MDAyMkVDMTQgLyogV2FzbVNlY3Rpb25QYXJzZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTUzRjQwRTg1MUQ1OEY5NzcwMDk5QTFCNiAvKiBXYXNtU2VjdGlv
bnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUFENzQzOEMwMUUwNDU3QTQwMEZEMEMyQSAvKiBXYXNt
U2lnbmF0dXJlLmggaW4gSGVhZGVycyAqLywKKwkJCQlFM0EwNTMxQTIxMzQyQjY4MDAyMkVDMTQg
LyogV2FzbVN0cmVhbWluZ1BhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ1QzM2RTYxRjY5
RUM5MTAwMEJDQUFGIC8qIFdhc21UYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTI1MEQyRDIx
RThEQTA1QTAwMjlBOTMyIC8qIFdhc21UaHVua3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzRTlF
MEFGMUVBRUM0NTcwMEZFRTI1MSAvKiBXYXNtVGllclVwQ291bnQuaCBpbiBIZWFkZXJzICovLApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CmluZGV4IDg5NzY5OGM2ZTA1OWFlMWQyNjIxMzFhYzUy
MDQwMGUzMTc4ZWRjYzUuLjA0ZDQ4ZTg1YjUwZmI4M2ZiMTI1MDVmZWUxNGE4NTM1OWNjMWUzMDkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKQEAgLTk5Miw3ICs5OTIsOSBAQCB3YXNtL1dh
c21PTUdQbGFuLmNwcAogd2FzbS9XYXNtT3Bjb2RlT3JpZ2luLmNwcAogd2FzbS9XYXNtUGFnZUNv
dW50LmNwcAogd2FzbS9XYXNtUGxhbi5jcHAKK3dhc20vV2FzbVNlY3Rpb25QYXJzZXIuY3BwCiB3
YXNtL1dhc21TaWduYXR1cmUuY3BwCit3YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwCiB3YXNt
L1dhc21UYWJsZS5jcHAKIHdhc20vV2FzbVRhYmxlLmgKIHdhc20vV2FzbVRodW5rcy5jcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAppbmRleCBlYjU3Yzc4NGM5
ODE4MDQ2MmQ0YThlNDNjODZiNTBiYWFhZTg0OTNiLi5lZjI1NTcyNGJjNmExMTIwMDE2YjdmMjJm
OTY5ZGJmZmQ5Y2FlMjNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMv
SlNEb2xsYXJWTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFy
Vk0uY3BwCkBAIC01MSw2ICs1MSwxMSBAQAogI2luY2x1ZGUgPHd0Zi9Qcm9jZXNzSUQuaD4KICNp
bmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KIAorI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SGVscGVycy5oIgorI2luY2x1ZGUgIldhc21TdHJl
YW1pbmdQYXJzZXIuaCIKKyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogdXNpbmcgbmFt
ZXNwYWNlIFdURjsKIApAQCAtMTA5Myw2ICsxMDk4LDgwIEBAIHZvaWQgRWxlbWVudDo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtLCBSb290KiByb290KQogICAgIG1fcm9vdC0+c2V0RWxlbWVudCh0aGlz
KTsKIH0KIAorI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25XYXNtU3RyZWFtaW5nUGFyc2VyQWRkQnl0ZXMoRXhlY1N0
YXRlKik7CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbldhc21T
dHJlYW1pbmdQYXJzZXJGaW5hbGl6ZShFeGVjU3RhdGUqKTsKKworY2xhc3MgV2FzbVN0cmVhbWlu
Z1BhcnNlciA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CitwdWJsaWM6CisgICAgV2Fz
bVN0cmVhbWluZ1BhcnNlcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6
IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAgICAgICAgLCBtX2luZm8oV2FzbTo6TW9kdWxlSW5mb3Jt
YXRpb246OmNyZWF0ZSgpKQorICAgICAgICAsIG1fc3RyZWFtaW5nUGFyc2VyKG1faW5mby5nZXQo
KSkKKyAgICB7CisgICAgfQorCisgICAgdXNpbmcgQmFzZSA9IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0
OworCisgICAgc3RhdGljIFdhc21TdHJlYW1pbmdQYXJzZXIqIGNyZWF0ZShWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBqc051bGwoKSk7CisgICAg
ICAgIFdhc21TdHJlYW1pbmdQYXJzZXIqIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPFdhc21TdHJlYW1pbmdQYXJzZXI+KHZtLmhlYXAsIHNpemVvZihXYXNtU3RyZWFtaW5nUGFy
c2VyKSkpIFdhc21TdHJlYW1pbmdQYXJzZXIodm0sIHN0cnVjdHVyZSk7CisgICAgICAgIHJlc3Vs
dC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwor
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUlu
Zm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworICAgIFdh
c206OlN0cmVhbWluZ1BhcnNlciYgc3RyZWFtaW5nUGFyc2VyKCkgeyByZXR1cm4gbV9zdHJlYW1p
bmdQYXJzZXI7IH0KKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtKQorICAgIHsKKyAg
ICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworCisgICAgICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSB0aGlzLT5nbG9iYWxPYmplY3Qodm0pOworICAgICAgICBwdXREaXJl
Y3ROYXRpdmVGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZ2bSwgImFkZEJ5dGVzIiksIDAsIGZ1bmN0aW9uV2FzbVN0cmVhbWluZ1BhcnNlckFkZEJ5dGVz
LCBOb0ludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSkpOworICAgICAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbih2bSwgZ2xvYmFsT2Jq
ZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImZpbmFsaXplIiksIDAsIGZ1bmN0aW9u
V2FzbVN0cmVhbWluZ1BhcnNlckZpbmFsaXplLCBOb0ludHJpbnNpYywgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOworICAgIH0KKworICAgIERFQ0xB
UkVfSU5GTzsKKworICAgIFJlZjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4gbV9pbmZvOworICAg
IFdhc206OlN0cmVhbWluZ1BhcnNlciBtX3N0cmVhbWluZ1BhcnNlcjsKK307CisKK2NvbnN0IENs
YXNzSW5mbyBXYXNtU3RyZWFtaW5nUGFyc2VyOjpzX2luZm8gPSB7ICJXYXNtU3RyZWFtaW5nUGFy
c2VyIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJM
RShXYXNtU3RyZWFtaW5nUGFyc2VyKSB9OworCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uV2FzbVN0cmVhbWluZ1BhcnNlckFkZEJ5dGVzKEV4ZWNTdGF0ZSogZXhlYykKK3sK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKGV4ZWMtPnZtKCkpOworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0R5bmFtaWNDYXN0
PFdhc21TdHJlYW1pbmdQYXJzZXIqPih2bSwgZXhlYy0+dGhpc1ZhbHVlKCkpOworICAgIGlmICgh
dGhpc09iamVjdCkgeworICAgICAgICBzY29wZS5yZWxlYXNlKCk7CisgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSk7CisgICAgfQorICAgIGF1dG8gZGF0YSA9
IGdldFdhc21CdWZmZXJGcm9tVmFsdWUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIHNjb3BlLnJl
bGVhc2UoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHN0YXRpY19jYXN0
PGludDMyX3Q+KHRoaXNPYmplY3QtPnN0cmVhbWluZ1BhcnNlcigpLmFkZEJ5dGVzKGJpdHdpc2Vf
Y2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5maXJzdCksIGRhdGEuc2Vjb25kKSkpKTsKK30KKwor
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbldhc21TdHJlYW1pbmdQYXJzZXJG
aW5hbGl6ZShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBhdXRvKiB0aGlzT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxXYXNtU3RyZWFtaW5nUGFyc2VyKj4o
dm0sIGV4ZWMtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIXRoaXNPYmplY3QpCisgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc051bWJlcihzdGF0aWNfY2FzdDxpbnQzMl90Pih0aGlzT2JqZWN0LT5zdHJl
YW1pbmdQYXJzZXIoKS5maW5hbGl6ZSgpKSkpOworfQorCisjZW5kaWYKKwogfSAvLyBuYW1lc3Bh
Y2UKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0xNjQwLDYgKzE3MTksMTUgQEAgc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVET01KSVRHZXR0ZXJCYXNlSlNP
YmplY3QoRXhlY1MKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKKyNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvbkNyZWF0ZVdhc21TdHJlYW1pbmdQYXJzZXIoRXhlY1N0YXRlKiBleGVjKQorewor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoV2FzbVN0cmVhbWluZ1BhcnNlcjo6Y3JlYXRlKHZtLCBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpKTsKK30KKyNlbmRpZgorCiBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNldEltcHVyZUdldHRlckRlbGVnYXRlKEV4
ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwpAQCAtMjA0MCw2ICsy
MTI4LDkgQEAgdm9pZCBKU0RvbGxhclZNOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgYWRk
RnVuY3Rpb24odm0sICJjcmVhdGVET01KSVRDaGVja1N1YkNsYXNzT2JqZWN0IiwgZnVuY3Rpb25D
cmVhdGVET01KSVRDaGVja1N1YkNsYXNzT2JqZWN0LCAwKTsKICAgICBhZGRGdW5jdGlvbih2bSwg
ImNyZWF0ZURPTUpJVEdldHRlckJhc2VKU09iamVjdCIsIGZ1bmN0aW9uQ3JlYXRlRE9NSklUR2V0
dGVyQmFzZUpTT2JqZWN0LCAwKTsKICAgICBhZGRGdW5jdGlvbih2bSwgImNyZWF0ZUJ1aWx0aW4i
LCBmdW5jdGlvbkNyZWF0ZUJ1aWx0aW4sIDIpOworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAg
ICBhZGRGdW5jdGlvbih2bSwgImNyZWF0ZVdhc21TdHJlYW1pbmdQYXJzZXIiLCBmdW5jdGlvbkNy
ZWF0ZVdhc21TdHJlYW1pbmdQYXJzZXIsIDApOworI2VuZGlmCiAgICAgYWRkRnVuY3Rpb24odm0s
ICJnZXRQcml2YXRlUHJvcGVydHkiLCBmdW5jdGlvbkdldFByaXZhdGVQcm9wZXJ0eSwgMik7CiAg
ICAgYWRkRnVuY3Rpb24odm0sICJzZXRJbXB1cmVHZXR0ZXJEZWxlZ2F0ZSIsIGZ1bmN0aW9uU2V0
SW1wdXJlR2V0dGVyRGVsZWdhdGUsIDIpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQkJRUGxhbi5jcHAKaW5kZXggZjY3MjY4NmQzZjk5YTBkMGQyZTljMzIxZjI3YmMwYTFjYmY1
YjJkZC4uNDNjOGY1NjJhZmExYzM2MzNhN2U2YzYxZjQwOTIyZWMwYmU5NzIxMyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcApAQCAtNTksMTMgKzU5LDE1IEBA
IEJCUVBsYW46OkJCUVBsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVsZUluZm9ybWF0aW9u
PiBpbmZvLCBBc3luY1dvcmsgd29yaywKIH0KIAogQkJRUGxhbjo6QkJRUGxhbihDb250ZXh0KiBj
b250ZXh0LCBWZWN0b3I8dWludDhfdD4mJiBzb3VyY2UsIEFzeW5jV29yayB3b3JrLCBDb21wbGV0
aW9uVGFzayYmIHRhc2ssIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmIGNyZWF0ZUVtYmVkZGVyV3Jh
cHBlciwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKLSAgICA6IEJCUVBs
YW4oY29udGV4dCwgYWRvcHRSZWYoKm5ldyBNb2R1bGVJbmZvcm1hdGlvbihXVEZNb3ZlKHNvdXJj
ZSkpKSwgd29yaywgV1RGTW92ZSh0YXNrKSwgV1RGTW92ZShjcmVhdGVFbWJlZGRlcldyYXBwZXIp
LCB0aHJvd1dhc21FeGNlcHRpb24pCisgICAgOiBCYXNlKGNvbnRleHQsIE1vZHVsZUluZm9ybWF0
aW9uOjpjcmVhdGUoKSwgV1RGTW92ZSh0YXNrKSwgV1RGTW92ZShjcmVhdGVFbWJlZGRlcldyYXBw
ZXIpLCB0aHJvd1dhc21FeGNlcHRpb24pCisgICAgLCBtX3NvdXJjZShXVEZNb3ZlKHNvdXJjZSkp
CisgICAgLCBtX3N0YXRlKFN0YXRlOjpJbml0aWFsKQorICAgICwgbV9hc3luY1dvcmsod29yaykK
IHsKLSAgICBtX3N0YXRlID0gU3RhdGU6OkluaXRpYWw7CiB9CiAKLUJCUVBsYW46OkJCUVBsYW4o
Q29udGV4dCogY29udGV4dCwgY29uc3QgdWludDhfdCogc291cmNlLCBzaXplX3Qgc291cmNlTGVu
Z3RoLCBBc3luY1dvcmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0YXNrKQotICAgIDogQmFzZShj
b250ZXh0LCBzb3VyY2UsIHNvdXJjZUxlbmd0aCwgV1RGTW92ZSh0YXNrKSkKK0JCUVBsYW46OkJC
UVBsYW4oQ29udGV4dCogY29udGV4dCwgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25UYXNrJiYg
dGFzaykKKyAgICA6IEJhc2UoY29udGV4dCwgV1RGTW92ZSh0YXNrKSkKICAgICAsIG1fc3RhdGUo
U3RhdGU6OkluaXRpYWwpCiAgICAgLCBtX2FzeW5jV29yayh3b3JrKQogewpAQCAtOTAsNyArOTIs
NyBAQCB2b2lkIEJCUVBsYW46Om1vdmVUb1N0YXRlKFN0YXRlIHN0YXRlKQogICAgIG1fc3RhdGUg
PSBzdGF0ZTsKIH0KIAotYm9vbCBCQlFQbGFuOjpwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKCkKK2Jv
b2wgQkJRUGxhbjo6cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZShjb25zdCB1aW50OF90KiBzb3VyY2Us
IHNpemVfdCBzb3VyY2VMZW5ndGgpCiB7CiAgICAgaWYgKG1fc3RhdGUgIT0gU3RhdGU6OkluaXRp
YWwpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTAxLDcgKzEwMyw3IEBAIGJvb2wgQkJRUGxh
bjo6cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpCiAgICAgICAgIHN0YXJ0VGltZSA9IE1vbm90b25p
Y1RpbWU6Om5vdygpOwogCiAgICAgewotICAgICAgICBNb2R1bGVQYXJzZXIgbW9kdWxlUGFyc2Vy
KG1fc291cmNlLCBtX3NvdXJjZUxlbmd0aCwgbV9tb2R1bGVJbmZvcm1hdGlvbik7CisgICAgICAg
IE1vZHVsZVBhcnNlciBtb2R1bGVQYXJzZXIoc291cmNlLCBzb3VyY2VMZW5ndGgsIG1fbW9kdWxl
SW5mb3JtYXRpb24pOwogICAgICAgICBhdXRvIHBhcnNlUmVzdWx0ID0gbW9kdWxlUGFyc2VyLnBh
cnNlKCk7CiAgICAgICAgIGlmICghcGFyc2VSZXN1bHQpIHsKICAgICAgICAgICAgIEJhc2U6OmZh
aWwoaG9sZExvY2sobV9sb2NrKSwgV1RGTW92ZShwYXJzZVJlc3VsdC5lcnJvcigpKSk7CkBAIC0x
MDksMjAgKzExMSwyMSBAQCBib29sIEJCUVBsYW46OnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKQog
ICAgICAgICB9CiAgICAgfQogCi0gICAgY29uc3QgYXV0byYgZnVuY3Rpb25Mb2NhdGlvbnMgPSBt
X21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnk7Ci0gICAgZm9yICh1
bnNpZ25lZCBmdW5jdGlvbkluZGV4ID0gMDsgZnVuY3Rpb25JbmRleCA8IGZ1bmN0aW9uTG9jYXRp
b25zLnNpemUoKTsgKytmdW5jdGlvbkluZGV4KSB7Ci0gICAgICAgIGRhdGFMb2dMbklmKFdhc21C
QlFQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJQcm9jZXNzaW5nIGZ1bmN0aW9uIHN0YXJ0aW5nIGF0
OiAiLCBmdW5jdGlvbkxvY2F0aW9uc1tmdW5jdGlvbkluZGV4XS5zdGFydCwgIiBhbmQgZW5kaW5n
IGF0OiAiLCBmdW5jdGlvbkxvY2F0aW9uc1tmdW5jdGlvbkluZGV4XS5lbmQpOwotICAgICAgICBj
b25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0ID0gbV9zb3VyY2UgKyBmdW5jdGlvbkxvY2F0aW9u
c1tmdW5jdGlvbkluZGV4XS5zdGFydDsKLSAgICAgICAgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoID0g
ZnVuY3Rpb25Mb2NhdGlvbnNbZnVuY3Rpb25JbmRleF0uZW5kIC0gZnVuY3Rpb25Mb2NhdGlvbnNb
ZnVuY3Rpb25JbmRleF0uc3RhcnQ7Ci0gICAgICAgIEFTU0VSVChmdW5jdGlvbkxlbmd0aCA8PSBt
X3NvdXJjZUxlbmd0aCk7CisgICAgY29uc3QgYXV0byYgZnVuY3Rpb25zID0gbV9tb2R1bGVJbmZv
cm1hdGlvbi0+ZnVuY3Rpb25zOworICAgIGZvciAodW5zaWduZWQgZnVuY3Rpb25JbmRleCA9IDA7
IGZ1bmN0aW9uSW5kZXggPCBmdW5jdGlvbnMuc2l6ZSgpOyArK2Z1bmN0aW9uSW5kZXgpIHsKKyAg
ICAgICAgY29uc3QgYXV0byYgZnVuY3Rpb24gPSBmdW5jdGlvbnNbZnVuY3Rpb25JbmRleF07Cisg
ICAgICAgIGRhdGFMb2dMbklmKFdhc21CQlFQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJQcm9jZXNz
aW5nIGZ1bmN0aW9uIHN0YXJ0aW5nIGF0OiAiLCBmdW5jdGlvbi5zdGFydCwgIiBhbmQgZW5kaW5n
IGF0OiAiLCBmdW5jdGlvbi5lbmQpOworICAgICAgICBzaXplX3QgZnVuY3Rpb25MZW5ndGggPSBm
dW5jdGlvbi5lbmQgLSBmdW5jdGlvbi5zdGFydDsKKyAgICAgICAgQVNTRVJUKGZ1bmN0aW9uTGVu
Z3RoIDw9IHNvdXJjZUxlbmd0aCk7CisgICAgICAgIEFTU0VSVChmdW5jdGlvbkxlbmd0aCA9PSBm
dW5jdGlvbi5kYXRhLnNpemUoKSk7CiAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUlu
ZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGlj
ZXNbZnVuY3Rpb25JbmRleF07CiAgICAgICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0g
U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CiAKLSAgICAgICAgYXV0
byB2YWxpZGF0aW9uUmVzdWx0ID0gdmFsaWRhdGVGdW5jdGlvbihmdW5jdGlvblN0YXJ0LCBmdW5j
dGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpKTsKKyAgICAg
ICAgYXV0byB2YWxpZGF0aW9uUmVzdWx0ID0gdmFsaWRhdGVGdW5jdGlvbihmdW5jdGlvbi5kYXRh
LmRhdGEoKSwgZnVuY3Rpb24uZGF0YS5zaXplKCksIHNpZ25hdHVyZSwgbV9tb2R1bGVJbmZvcm1h
dGlvbi5nZXQoKSk7CiAgICAgICAgIGlmICghdmFsaWRhdGlvblJlc3VsdCkgewogICAgICAgICAg
ICAgaWYgKFdhc21CQlFQbGFuSW50ZXJuYWw6OnZlcmJvc2UpIHsKICAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZnVuY3Rpb25MZW5ndGg7ICsraSkKLSAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGZ1bmN0
aW9uU3RhcnRbaV0pKSwgIiwgIik7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coUmF3UG9p
bnRlcihyZWludGVycHJldF9jYXN0PHZvaWQqPihmdW5jdGlvbi5kYXRhW2ldKSksICIsICIpOwog
ICAgICAgICAgICAgICAgIGRhdGFMb2dMbigpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
QmFzZTo6ZmFpbChob2xkTG9jayhtX2xvY2spLCBtYWtlU3RyaW5nKHZhbGlkYXRpb25SZXN1bHQu
ZXJyb3IoKSwgIiwgaW4gZnVuY3Rpb24gYXQgaW5kZXggIiwgU3RyaW5nOjpudW1iZXIoZnVuY3Rp
b25JbmRleCkpKTsgLy8gRklYTUUgbWFrZSB0aGlzIGFuIEV4cGVjdGVkLgpAQCAtMTU2LDE4ICsx
NTksMTggQEAgdm9pZCBCQlFQbGFuOjpwcmVwYXJlKCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfTsKIAotICAgIGNvbnN0IGF1dG8mIGZ1bmN0aW9uTG9jYXRpb25zID0gbV9tb2R1bGVJbmZv
cm1hdGlvbi0+ZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5OworICAgIGNvbnN0IGF1dG8mIGZ1bmN0
aW9ucyA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9uczsKICAgICBpZiAoIXRyeVJlc2Vy
dmVDYXBhY2l0eShtX3dhc21Ub1dhc21FeGl0U3R1YnMsIG1fbW9kdWxlSW5mb3JtYXRpb24tPmlt
cG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCksICIgV2ViQXNzZW1ibHkgdG8gSmF2
YVNjcmlwdCBzdHVicyIpCi0gICAgICAgIHx8ICF0cnlSZXNlcnZlQ2FwYWNpdHkobV91bmxpbmtl
ZFdhc21Ub1dhc21DYWxscywgZnVuY3Rpb25Mb2NhdGlvbnMuc2l6ZSgpLCAiIHVubGlua2VkIFdl
YkFzc2VtYmx5IHRvIFdlYkFzc2VtYmx5IGNhbGxzIikKLSAgICAgICAgfHwgIXRyeVJlc2VydmVD
YXBhY2l0eShtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucywgZnVuY3Rpb25Mb2NhdGlvbnMuc2l6ZSgp
LCAiIFdlYkFzc2VtYmx5IGZ1bmN0aW9ucyIpCi0gICAgICAgIHx8ICF0cnlSZXNlcnZlQ2FwYWNp
dHkobV9jb21waWxhdGlvbkNvbnRleHRzLCBmdW5jdGlvbkxvY2F0aW9ucy5zaXplKCksICIgY29t
cGlsYXRpb24gY29udGV4dHMiKQotICAgICAgICB8fCAhdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fdGll
clVwQ291bnRzLCBmdW5jdGlvbkxvY2F0aW9ucy5zaXplKCksICIgdGllci11cCBjb3VudHMiKSkK
KyAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxz
LCBmdW5jdGlvbnMuc2l6ZSgpLCAiIHVubGlua2VkIFdlYkFzc2VtYmx5IHRvIFdlYkFzc2VtYmx5
IGNhbGxzIikKKyAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX3dhc21JbnRlcm5hbEZ1
bmN0aW9ucywgZnVuY3Rpb25zLnNpemUoKSwgIiBXZWJBc3NlbWJseSBmdW5jdGlvbnMiKQorICAg
ICAgICB8fCAhdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fY29tcGlsYXRpb25Db250ZXh0cywgZnVuY3Rp
b25zLnNpemUoKSwgIiBjb21waWxhdGlvbiBjb250ZXh0cyIpCisgICAgICAgIHx8ICF0cnlSZXNl
cnZlQ2FwYWNpdHkobV90aWVyVXBDb3VudHMsIGZ1bmN0aW9ucy5zaXplKCksICIgdGllci11cCBj
b3VudHMiKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxs
cy5yZXNpemUoZnVuY3Rpb25Mb2NhdGlvbnMuc2l6ZSgpKTsKLSAgICBtX3dhc21JbnRlcm5hbEZ1
bmN0aW9ucy5yZXNpemUoZnVuY3Rpb25Mb2NhdGlvbnMuc2l6ZSgpKTsKLSAgICBtX2NvbXBpbGF0
aW9uQ29udGV4dHMucmVzaXplKGZ1bmN0aW9uTG9jYXRpb25zLnNpemUoKSk7Ci0gICAgbV90aWVy
VXBDb3VudHMucmVzaXplKGZ1bmN0aW9uTG9jYXRpb25zLnNpemUoKSk7CisgICAgbV91bmxpbmtl
ZFdhc21Ub1dhc21DYWxscy5yZXNpemUoZnVuY3Rpb25zLnNpemUoKSk7CisgICAgbV93YXNtSW50
ZXJuYWxGdW5jdGlvbnMucmVzaXplKGZ1bmN0aW9ucy5zaXplKCkpOworICAgIG1fY29tcGlsYXRp
b25Db250ZXh0cy5yZXNpemUoZnVuY3Rpb25zLnNpemUoKSk7CisgICAgbV90aWVyVXBDb3VudHMu
cmVzaXplKGZ1bmN0aW9ucy5zaXplKCkpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpbXBvcnRJbmRl
eCA9IDA7IGltcG9ydEluZGV4IDwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0cy5zaXplKCk7
ICsraW1wb3J0SW5kZXgpIHsKICAgICAgICAgSW1wb3J0KiBpbXBvcnQgPSAmbV9tb2R1bGVJbmZv
cm1hdGlvbi0+aW1wb3J0c1tpbXBvcnRJbmRleF07CkBAIC0yNDEsNyArMjQ0LDcgQEAgdm9pZCBC
QlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAgICBU
aHJlYWRDb3VudEhvbGRlciBob2xkZXIoKnRoaXMpOwogCiAgICAgc2l6ZV90IGJ5dGVzQ29tcGls
ZWQgPSAwOwotICAgIGNvbnN0IGF1dG8mIGZ1bmN0aW9uTG9jYXRpb25zID0gbV9tb2R1bGVJbmZv
cm1hdGlvbi0+ZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5OworICAgIGNvbnN0IGF1dG8mIGZ1bmN0
aW9ucyA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9uczsKICAgICB3aGlsZSAodHJ1ZSkg
ewogICAgICAgICBpZiAoZWZmb3J0ID09IFBhcnRpYWwgJiYgYnl0ZXNDb21waWxlZCA+PSBPcHRp
b25zOjp3ZWJBc3NlbWJseVBhcnRpYWxDb21waWxlTGltaXQoKSkKICAgICAgICAgICAgIHJldHVy
bjsKQEAgLTI0OSw3ICsyNTIsNyBAQCB2b2lkIEJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbnMoQ29t
cGlsYXRpb25FZmZvcnQgZWZmb3J0KQogICAgICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4Owog
ICAgICAgICB7CiAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7Ci0g
ICAgICAgICAgICBpZiAobV9jdXJyZW50SW5kZXggPj0gZnVuY3Rpb25Mb2NhdGlvbnMuc2l6ZSgp
KSB7CisgICAgICAgICAgICBpZiAobV9jdXJyZW50SW5kZXggPj0gZnVuY3Rpb25zLnNpemUoKSkg
ewogICAgICAgICAgICAgICAgIGlmIChoYXNXb3JrKCkpCiAgICAgICAgICAgICAgICAgICAgIG1v
dmVUb1N0YXRlKFN0YXRlOjpDb21waWxlZCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAt
MjU4LDE4ICsyNjEsMTYgQEAgdm9pZCBCQlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKENvbXBpbGF0
aW9uRWZmb3J0IGVmZm9ydCkKICAgICAgICAgICAgICsrbV9jdXJyZW50SW5kZXg7CiAgICAgICAg
IH0KIAotICAgICAgICBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0ID0gbV9zb3VyY2UgKyBm
dW5jdGlvbkxvY2F0aW9uc1tmdW5jdGlvbkluZGV4XS5zdGFydDsKLSAgICAgICAgc2l6ZV90IGZ1
bmN0aW9uTGVuZ3RoID0gZnVuY3Rpb25Mb2NhdGlvbnNbZnVuY3Rpb25JbmRleF0uZW5kIC0gZnVu
Y3Rpb25Mb2NhdGlvbnNbZnVuY3Rpb25JbmRleF0uc3RhcnQ7Ci0gICAgICAgIEFTU0VSVChmdW5j
dGlvbkxlbmd0aCA8PSBtX3NvdXJjZUxlbmd0aCk7CisgICAgICAgIGNvbnN0IGF1dG8mIGZ1bmN0
aW9uID0gZnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdOwogICAgICAgICBTaWduYXR1cmVJbmRleCBz
aWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWdu
YXR1cmVJbmRpY2VzW2Z1bmN0aW9uSW5kZXhdOwogICAgICAgICBjb25zdCBTaWduYXR1cmUmIHNp
Z25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwogICAg
ICAgICB1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UgPSBtX3dhc21Ub1dhc21FeGl0U3R1YnMu
c2l6ZSgpICsgZnVuY3Rpb25JbmRleDsKICAgICAgICAgQVNTRVJUX1VOVVNFRChmdW5jdGlvbklu
ZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9u
SW5kZXhTcGFjZShmdW5jdGlvbkluZGV4U3BhY2UpID09IHNpZ25hdHVyZUluZGV4KTsKLSAgICAg
ICAgQVNTRVJUKHZhbGlkYXRlRnVuY3Rpb24oZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgs
IHNpZ25hdHVyZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSkpOworICAgICAgICBBU1NFUlQo
dmFsaWRhdGVGdW5jdGlvbihmdW5jdGlvbi5kYXRhLmRhdGEoKSwgZnVuY3Rpb24uZGF0YS5zaXpl
KCksIHNpZ25hdHVyZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSkpOwogCiAgICAgICAgIG1f
dW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0gPSBWZWN0b3I8VW5saW5rZWRX
YXNtVG9XYXNtQ2FsbD4oKTsKICAgICAgICAgVGllclVwQ291bnQqIHRpZXJVcCA9IE9wdGlvbnM6
OnVzZUJCUVRpZXJVcENoZWNrcygpID8gJm1fdGllclVwQ291bnRzW2Z1bmN0aW9uSW5kZXhdIDog
bnVsbHB0cjsKLSAgICAgICAgYXV0byBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENv
bXBpbGUobV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBmdW5jdGlvblN0YXJ0
LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1
bmN0aW9uSW5kZXhdLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIENvbXBpbGF0
aW9uTW9kZTo6QkJRTW9kZSwgZnVuY3Rpb25JbmRleCwgdGllclVwLCBtX3Rocm93V2FzbUV4Y2Vw
dGlvbik7CisgICAgICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21w
aWxlKG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4XSwgZnVuY3Rpb24uZGF0YS5k
YXRhKCksIGZ1bmN0aW9uLmRhdGEuc2l6ZSgpLCBzaWduYXR1cmUsIG1fdW5saW5rZWRXYXNtVG9X
YXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9k
ZSwgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBmdW5jdGlvbkluZGV4LCB0aWVyVXAsIG1fdGhy
b3dXYXNtRXhjZXB0aW9uKTsKIAogICAgICAgICBpZiAoVU5MSUtFTFkoIXBhcnNlQW5kQ29tcGls
ZVJlc3VsdCkpIHsKICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsK
QEAgLTI3Nyw3ICsyNzgsNyBAQCB2b2lkIEJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbnMoQ29tcGls
YXRpb25FZmZvcnQgZWZmb3J0KQogICAgICAgICAgICAgICAgIC8vIE11bHRpcGxlIGNvbXBpbGVz
IGNvdWxkIGZhaWwgc2ltdWx0YW5lb3VzbHkuIFdlIGFyYml0cmFyaWx5IGNob29zZSB0aGUgZmly
c3QuCiAgICAgICAgICAgICAgICAgZmFpbChsb2NrZXIsIG1ha2VTdHJpbmcocGFyc2VBbmRDb21w
aWxlUmVzdWx0LmVycm9yKCksICIsIGluIGZ1bmN0aW9uIGF0IGluZGV4ICIsIFN0cmluZzo6bnVt
YmVyKGZ1bmN0aW9uSW5kZXgpKSk7IC8vIEZJWE1FIG1ha2UgdGhpcyBhbiBFeHBlY3RlZC4KICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fY3VycmVudEluZGV4ID0gZnVuY3Rpb25Mb2NhdGlv
bnMuc2l6ZSgpOworICAgICAgICAgICAgbV9jdXJyZW50SW5kZXggPSBmdW5jdGlvbnMuc2l6ZSgp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTI4OSwxNyArMjkwLDE3IEBA
IHZvaWQgQkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQp
CiAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOwog
ICAgICAgICB9CiAKLSAgICAgICAgYnl0ZXNDb21waWxlZCArPSBmdW5jdGlvbkxlbmd0aDsKKyAg
ICAgICAgYnl0ZXNDb21waWxlZCArPSBmdW5jdGlvbi5kYXRhLnNpemUoKTsKICAgICB9CiB9CiAK
IHZvaWQgQkJRUGxhbjo6Y29tcGxldGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlcikKIHsK
LSAgICBBU1NFUlQobV9zdGF0ZSAhPSBTdGF0ZTo6Q29tcGlsZWQgfHwgbV9jdXJyZW50SW5kZXgg
Pj0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKSk7
CisgICAgQVNTRVJUKG1fc3RhdGUgIT0gU3RhdGU6OkNvbXBpbGVkIHx8IG1fY3VycmVudEluZGV4
ID49IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9ucy5zaXplKCkpOwogICAgIGRhdGFMb2dM
bklmKFdhc21CQlFQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJTdGFydGluZyBDb21wbGV0aW9uIik7
CiAKICAgICBpZiAoIWZhaWxlZCgpICYmIG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBpbGVkKSB7Ci0g
ICAgICAgIGZvciAodWludDMyX3QgZnVuY3Rpb25JbmRleCA9IDA7IGZ1bmN0aW9uSW5kZXggPCBt
X21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpOyBmdW5j
dGlvbkluZGV4KyspIHsKKyAgICAgICAgZm9yICh1aW50MzJfdCBmdW5jdGlvbkluZGV4ID0gMDsg
ZnVuY3Rpb25JbmRleCA8IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9ucy5zaXplKCk7IGZ1
bmN0aW9uSW5kZXgrKykgewogICAgICAgICAgICAgQ29tcGlsYXRpb25Db250ZXh0JiBjb250ZXh0
ID0gbV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdOwogICAgICAgICAgICAgU2ln
bmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5h
bEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tmdW5jdGlvbkluZGV4XTsKICAgICAgICAgICAgIGNv
bnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWdu
YXR1cmVJbmRleCk7CkBAIC0zNTEsNyArMzUyLDcgQEAgdm9pZCBCQlFQbGFuOjp3b3JrKENvbXBp
bGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKICAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKICAgICBjYXNl
IFN0YXRlOjpJbml0aWFsOgotICAgICAgICBwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKCk7CisgICAg
ICAgIHBhcnNlQW5kVmFsaWRhdGVNb2R1bGUobV9zb3VyY2UuZGF0YSgpLCBtX3NvdXJjZS5zaXpl
KCkpOwogICAgICAgICBpZiAoIWhhc1dvcmsoKSkgewogICAgICAgICAgICAgQVNTRVJUKGlzQ29t
cGxldGUoKSk7CiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUJCUVBsYW4uaAppbmRleCBkODgxNDVkN2RkZGJkNmIxOTEwNTc3ODE3Y2U3Y2I4ZGI0MTIx
ZDFlLi45NDFhYzc1ZjcwZTZmOTExYjlmYmIzZGRiMTM3OGNjZjk2OTk0MWFkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmgKQEAgLTUyLDExICs1MiwxNCBAQCBjbGFz
cyBCQlFQbGFuIGZpbmFsIDogcHVibGljIFBsYW4gewogICAgIC8vIE5vdGU6IENvbXBsZXRpb25U
YXNrIHNob3VsZCBub3QgaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgUGxhbiBvdGhlcndpc2UgdGhl
cmUgd2lsbCBiZSBhIHJlZmVyZW5jZSBjeWNsZS4KICAgICBCQlFQbGFuKENvbnRleHQqLCBSZWY8
TW9kdWxlSW5mb3JtYXRpb24+LCBBc3luY1dvcmssIENvbXBsZXRpb25UYXNrJiYsIENyZWF0ZUVt
YmVkZGVyV3JhcHBlciYmLCBUaHJvd1dhc21FeGNlcHRpb24pOwogICAgIEpTX0VYUE9SVF9QUklW
QVRFIEJCUVBsYW4oQ29udGV4dCosIFZlY3Rvcjx1aW50OF90PiYmLCBBc3luY1dvcmssIENvbXBs
ZXRpb25UYXNrJiYsIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmLCBUaHJvd1dhc21FeGNlcHRpb24p
OwotICAgIC8vIE5vdGU6IFRoaXMgY29uc3RydWN0b3Igc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB5
b3UgYXJlIG5vdCBhY3R1YWxseSBidWlsZGluZyBhIG1vZHVsZSBlLmcuIHZhbGlkYXRpb24vZnVu
Y3Rpb24gdGVzdHMKLSAgICAvLyBGSVhNRTogV2hlbiB3ZSBnZXQgcmlkIG9mIGZ1bmN0aW9uIHRl
c3RzIHdlIHNob3VsZCByZW1vdmUgQXN5bmNXb3JrIGZyb20gdGhpcyBjb25zdHJ1Y3Rvci4KLSAg
ICBKU19FWFBPUlRfUFJJVkFURSBCQlFQbGFuKENvbnRleHQqLCBjb25zdCB1aW50OF90Kiwgc2l6
ZV90LCBBc3luY1dvcmssIENvbXBsZXRpb25UYXNrJiYpOworICAgIEJCUVBsYW4oQ29udGV4dCos
IEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJik7CiAKLSAgICBib29sIHBhcnNlQW5kVmFsaWRh
dGVNb2R1bGUoKTsKKworICAgIGJvb2wgcGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpCisgICAgewor
ICAgICAgICByZXR1cm4gcGFyc2VBbmRWYWxpZGF0ZU1vZHVsZShtX3NvdXJjZS5kYXRhKCksIG1f
c291cmNlLnNpemUoKSk7CisgICAgfQorICAgIGJvb2wgcGFyc2VBbmRWYWxpZGF0ZU1vZHVsZShj
b25zdCB1aW50OF90Kiwgc2l6ZV90KTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJl
cGFyZSgpOwogICAgIHZvaWQgY29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVmZm9ydCk7CkBA
IC0xMzYsNiArMTM5LDcgQEAgY2xhc3MgQkJRUGxhbiBmaW5hbCA6IHB1YmxpYyBQbGFuIHsKIAog
ICAgIGNvbnN0IGNoYXIqIHN0YXRlU3RyaW5nKFN0YXRlKTsKICAgICAKKyAgICBWZWN0b3I8dWlu
dDhfdD4gbV9zb3VyY2U7CiAgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm9zOwog
ICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4gbV93YXNt
VG9XYXNtRXhpdFN0dWJzOwogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5j
dGlvbj4+IG1fd2FzbUludGVybmFsRnVuY3Rpb25zOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUZvcm1hdC5oCmluZGV4IDI3ODRlOTBhZjM4NDFhMDJlNTg3MzMzMmNmZjhiYjA2NDg3ZTMz
ZGUuLmU0M2Y0ZWQ5MzYxNjdmZjI5MzhkODM3YTBjZTA4OGQ0M2QyMGE0ZTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKQEAgLTE0MCw5ICsxNDAsMTAgQEAgc3RydWN0
IEdsb2JhbCB7CiAgICAgdWludDY0X3QgaW5pdGlhbEJpdHNPckltcG9ydE51bWJlciB7IDAgfTsK
IH07CiAKLXN0cnVjdCBGdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkgeworc3RydWN0IEZ1bmN0aW9u
RGF0YSB7CiAgICAgc2l6ZV90IHN0YXJ0OwogICAgIHNpemVfdCBlbmQ7CisgICAgVmVjdG9yPHVp
bnQ4X3Q+IGRhdGE7CiB9OwogCiBjbGFzcyBJMzJJbml0RXhwciB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmNwcAppbmRleCBjYjhk
YjBlMDkzZjk0Y2RhMzE2ZGQyNGJhZjM5ZTUxMmVkYTIwMzE0Li44YTI1NGMwMDJmYmU5ZWY5MGNl
ZjFhYmRmYzQxNjljMWU0NmM1M2RjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5jcHAKQEAgLTMxLDIxICszMSwxMCBAQAogI2lu
Y2x1ZGUgIldhc21OYW1lU2VjdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9TSEExLmg+CiAKLW5hbWVz
cGFjZSB7Ci1DU3RyaW5nIHNoYTEoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dCkKLXsKLSAg
ICBTSEExIGhhc2g7Ci0gICAgaGFzaC5hZGRCeXRlcyhpbnB1dCk7Ci0gICAgcmV0dXJuIGhhc2gu
Y29tcHV0ZUhleERpZ2VzdCgpOwotfQotfQotCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdh
c20gewogCi1Nb2R1bGVJbmZvcm1hdGlvbjo6TW9kdWxlSW5mb3JtYXRpb24oVmVjdG9yPHVpbnQ4
X3Q+JiYgc291cmNlQnl0ZXMpCi0gICAgOiBzb3VyY2UoV1RGTW92ZShzb3VyY2VCeXRlcykpCi0g
ICAgLCBoYXNoKE9wdGlvbnM6OnVzZUVhZ2VyV2ViQXNzZW1ibHlNb2R1bGVIYXNoaW5nKCkgPyBz
dGQ6Om1ha2Vfb3B0aW9uYWwoc2hhMShzb3VyY2UpKSA6IHN0ZDo6bnVsbG9wdCkKLSAgICAsIG5h
bWVTZWN0aW9uKG5ldyBOYW1lU2VjdGlvbihoYXNoKSkKK01vZHVsZUluZm9ybWF0aW9uOjpNb2R1
bGVJbmZvcm1hdGlvbigpCisgICAgOiBuYW1lU2VjdGlvbihOYW1lU2VjdGlvbjo6Y3JlYXRlKCkp
CiB7CiB9CiBNb2R1bGVJbmZvcm1hdGlvbjo6fk1vZHVsZUluZm9ybWF0aW9uKCkgeyB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRpb24u
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5oCmlu
ZGV4IDBiYWI1N2UwNzBkMmVhMzMwNjJmMzYzNjU4YTI0MTVlOWJkNTFlMmQuLmZiNWUzYTBjZGVk
NGU3MzgwMjQzMDNiZTVlMGY1NjdhZjU1YmEwMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5oCkBAIC0zNCwxMSArMzQsMTQgQEAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKIHN0cnVjdCBNb2R1bGVJbmZvcm1h
dGlvbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxNb2R1bGVJbmZvcm1hdGlvbj4gewot
ICAgIE1vZHVsZUluZm9ybWF0aW9uKCkgPSBkZWxldGU7CisgICAgTW9kdWxlSW5mb3JtYXRpb24o
KTsKICAgICBNb2R1bGVJbmZvcm1hdGlvbihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYpID0gZGVs
ZXRlOwogICAgIE1vZHVsZUluZm9ybWF0aW9uKE1vZHVsZUluZm9ybWF0aW9uJiYpID0gZGVsZXRl
OwogCi0gICAgTW9kdWxlSW5mb3JtYXRpb24oVmVjdG9yPHVpbnQ4X3Q+JiYgc291cmNlQnl0ZXMp
OworICAgIHN0YXRpYyBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGNyZWF0ZSgpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBNb2R1bGVJbmZvcm1hdGlvbik7CisgICAgfQogCiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgfk1vZHVsZUluZm9ybWF0aW9uKCk7CiAgICAgCkBAIC01OCw4
ICs2MSw4IEBAIHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVm
Q291bnRlZDxNb2R1bGVJbmZvcm1hdGlvbj4gewogICAgIHVpbnQzMl90IGltcG9ydEZ1bmN0aW9u
Q291bnQoKSBjb25zdCB7IHJldHVybiBpbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMuc2l6
ZSgpOyB9CiAgICAgdWludDMyX3QgaW50ZXJuYWxGdW5jdGlvbkNvdW50KCkgY29uc3QgeyByZXR1
cm4gaW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgpOyB9CiAKLSAgICBjb25z
dCBWZWN0b3I8dWludDhfdD4gc291cmNlOwotICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8Q1N0cmlu
Zz4gaGFzaDsKKyAgICB1aW50MzJfdCBtZW1vcnlDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1lbW9y
eSA/IDEgOiAwOyB9CisgICAgdWludDMyX3QgdGFibGVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIHRh
YmxlSW5mb3JtYXRpb24gPyAxIDogMDsgfQogCiAgICAgVmVjdG9yPEltcG9ydD4gaW1wb3J0czsK
ICAgICBWZWN0b3I8U2lnbmF0dXJlSW5kZXg+IGltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNl
czsKQEAgLTY4LDcgKzcxLDcgQEAgc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uIDogcHVibGljIFRo
cmVhZFNhZmVSZWZDb3VudGVkPE1vZHVsZUluZm9ybWF0aW9uPiB7CiAKICAgICBNZW1vcnlJbmZv
cm1hdGlvbiBtZW1vcnk7CiAKLSAgICBWZWN0b3I8RnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5PiBm
dW5jdGlvbkxvY2F0aW9uSW5CaW5hcnk7CisgICAgVmVjdG9yPEZ1bmN0aW9uRGF0YT4gZnVuY3Rp
b25zOwogCiAgICAgVmVjdG9yPEV4cG9ydD4gZXhwb3J0czsKICAgICBzdGQ6Om9wdGlvbmFsPHVp
bnQzMl90PiBzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZTsKQEAgLTc4LDcgKzgxLDcgQEAgc3RydWN0
IE1vZHVsZUluZm9ybWF0aW9uIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPE1vZHVsZUlu
Zm9ybWF0aW9uPiB7CiAgICAgVmVjdG9yPEdsb2JhbD4gZ2xvYmFsczsKICAgICB1bnNpZ25lZCBm
aXJzdEludGVybmFsR2xvYmFsIHsgMCB9OwogICAgIFZlY3RvcjxDdXN0b21TZWN0aW9uPiBjdXN0
b21TZWN0aW9uczsKLSAgICBSZWZQdHI8TmFtZVNlY3Rpb24+IG5hbWVTZWN0aW9uOworICAgIFJl
ZjxOYW1lU2VjdGlvbj4gbmFtZVNlY3Rpb247CiB9OwogCiAgICAgCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCmluZGV4IGYwM2U2OTg3ZjRhNTAy
NTkxZGY3MWRjODE1NzgyMDgwOTk2MTM4YjQuLmE4ZWQ4ZDJlNmIxOWM5NWY2NzFmZmNiYzU0Nzgz
ZGE3NGM2NTA4MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21N
b2R1bGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1
bGVQYXJzZXIuY3BwCkBAIC0zMiwxOCArMzIsMTEgQEAKICNpbmNsdWRlICJXYXNtTWVtb3J5SW5m
b3JtYXRpb24uaCIKICNpbmNsdWRlICJXYXNtTmFtZVNlY3Rpb25QYXJzZXIuaCIKICNpbmNsdWRl
ICJXYXNtT3BzLmgiCisjaW5jbHVkZSAiV2FzbVNlY3Rpb25QYXJzZXIuaCIKICNpbmNsdWRlICJX
YXNtU2VjdGlvbnMuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAotQUxX
QVlTX0lOTElORSBJMzJJbml0RXhwciBtYWtlSTMySW5pdEV4cHIodWludDhfdCBvcGNvZGUsIHVp
bnQzMl90IGJpdHMpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQob3Bjb2RlID09IEkzMkNvbnN0IHx8
IG9wY29kZSA9PSBHZXRHbG9iYWwpOwotICAgIGlmIChvcGNvZGUgPT0gSTMyQ29uc3QpCi0gICAg
ICAgIHJldHVybiBJMzJJbml0RXhwcjo6Y29uc3RWYWx1ZShiaXRzKTsKLSAgICByZXR1cm4gSTMy
SW5pdEV4cHI6Omdsb2JhbEltcG9ydChiaXRzKTsKLX0KLQogYXV0byBNb2R1bGVQYXJzZXI6OnBh
cnNlKCkgLT4gUmVzdWx0CiB7CiAgICAgY29uc3Qgc2l6ZV90IG1pblNpemUgPSA4OwpAQCAtNzEs
MTkgKzY0LDE5IEBAIGF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZSgpIC0+IFJlc3VsdAogICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihzZWN0aW9uTGVuZ3RoKSwgImNh
bid0IGdldCAiLCBzZWN0aW9uLCAiIHNlY3Rpb24ncyBsZW5ndGgiKTsKICAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRihzZWN0aW9uTGVuZ3RoID4gbGVuZ3RoKCkgLSBtX29mZnNldCwgc2VjdGlv
biwgIiBzZWN0aW9uIG9mIHNpemUgIiwgc2VjdGlvbkxlbmd0aCwgIiB3b3VsZCBvdmVyZmxvdyBN
b2R1bGUncyBzaXplIik7CiAKLSAgICAgICAgYXV0byBlbmQgPSBtX29mZnNldCArIHNlY3Rpb25M
ZW5ndGg7CisgICAgICAgIFNlY3Rpb25QYXJzZXIgcGFyc2VyKHNvdXJjZSgpICsgbV9vZmZzZXQs
IHNlY3Rpb25MZW5ndGgsIG1fb2Zmc2V0LCBtX2luZm8uZ2V0KCkpOwogCiAgICAgICAgIHN3aXRj
aCAoc2VjdGlvbikgewogI2RlZmluZSBXQVNNX1NFQ1RJT05fUEFSU0UoTkFNRSwgSUQsIERFU0NS
SVBUSU9OKSAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGNhc2UgU2VjdGlvbjo6TkFNRTog
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdB
U01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2UgIyMgTkFNRSgpKTsgICAgICAgICAgICAgXAor
ICAgICAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZXIucGFyc2UgIyMgTkFN
RSgpKTsgICAgICAgICAgICAgXAogICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIH0KICAgICAgICAgRk9S
X0VBQ0hfS05PV05fV0FTTV9TRUNUSU9OKFdBU01fU0VDVElPTl9QQVJTRSkKICN1bmRlZiBXQVNN
X1NFQ1RJT05fUEFSU0UKIAogICAgICAgICBjYXNlIFNlY3Rpb246OkN1c3RvbTogewotICAgICAg
ICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUN1c3RvbShzZWN0aW9uTGVuZ3Ro
KSk7CisgICAgICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlci5wYXJzZUN1
c3RvbSgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTkzLDUzOCArODYs
MjQgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlKCkgLT4gUmVzdWx0CiAgICAgICAgIH0KICAg
ICAgICAgfQogCi0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZW5kICE9IG1fb2Zmc2V0LCAi
cGFyc2luZyBlbmRlZCBiZWZvcmUgdGhlIGVuZCBvZiAiLCBzZWN0aW9uLCAiIHNlY3Rpb24iKTsK
KyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihwYXJzZXIubGVuZ3RoKCkgIT0gcGFyc2VyLm9m
ZnNldCgpLCAicGFyc2luZyBlbmRlZCBiZWZvcmUgdGhlIGVuZCBvZiAiLCBzZWN0aW9uLCAiIHNl
Y3Rpb24iKTsKKworICAgICAgICBtX29mZnNldCArPSBzZWN0aW9uTGVuZ3RoOwogCiAKICAgICAg
ICAgaWYgKGlzS25vd25TZWN0aW9uKHNlY3Rpb24pKQogICAgICAgICAgICAgcHJldmlvdXNLbm93
blNlY3Rpb24gPSBzZWN0aW9uOwogICAgIH0KIAotICAgIHJldHVybiB7IH07Ci19Ci0KLWF1dG8g
TW9kdWxlUGFyc2VyOjpwYXJzZVR5cGUoKSAtPiBQYXJ0aWFsUmVzdWx0Ci17Ci0gICAgdWludDMy
X3QgY291bnQ7Ci0KLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihjb3Vu
dCksICJjYW4ndCBnZXQgVHlwZSBzZWN0aW9uJ3MgY291bnQiKTsKLSAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKGNvdW50ID4gbWF4VHlwZXMsICJUeXBlIHNlY3Rpb24ncyBjb3VudCBpcyB0b28gYmln
ICIsIGNvdW50LCAiIG1heGltdW0gIiwgbWF4VHlwZXMpOwotICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIW1faW5mby0+dXNlZFNpZ25hdHVyZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGNvdW50KSwgImNh
bid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIFR5cGUgc2VjdGlvbidzICIsIGNvdW50LCAi
IGVudHJpZXMiKTsKLQotICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7
Ci0gICAgICAgIGludDhfdCB0eXBlOwotICAgICAgICB1aW50MzJfdCBhcmd1bWVudENvdW50Owot
ICAgICAgICBWZWN0b3I8VHlwZT4gYXJndW1lbnRUeXBlczsKLQotICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZUludDcodHlwZSksICJjYW4ndCBnZXQgIiwgaSwgInRoIFR5cGUncyB0
eXBlIik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYodHlwZSAhPSBGdW5jLCBpLCAidGgg
VHlwZSBpcyBub24tRnVuYyAiLCB0eXBlKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
cGFyc2VWYXJVSW50MzIoYXJndW1lbnRDb3VudCksICJjYW4ndCBnZXQgIiwgaSwgInRoIFR5cGUn
cyBhcmd1bWVudCBjb3VudCIpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGFyZ3VtZW50
Q291bnQgPiBtYXhGdW5jdGlvblBhcmFtcywgaSwgInRoIGFyZ3VtZW50IGNvdW50IGlzIHRvbyBi
aWcgIiwgYXJndW1lbnRDb3VudCwgIiBtYXhpbXVtICIsIG1heEZ1bmN0aW9uUGFyYW1zKTsKLSAg
ICAgICAgUmVmUHRyPFNpZ25hdHVyZT4gbWF5YmVTaWduYXR1cmUgPSBTaWduYXR1cmU6OnRyeUNy
ZWF0ZShhcmd1bWVudENvdW50KTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbWF5YmVT
aWduYXR1cmUsICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBUeXBlIHNlY3Rpb24n
cyAiLCBpLCAidGggc2lnbmF0dXJlIik7Ci0gICAgICAgIFJlZjxTaWduYXR1cmU+IHNpZ25hdHVy
ZSA9IG1heWJlU2lnbmF0dXJlLnJlbGVhc2VOb25OdWxsKCk7Ci0KLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7ICsraSkgewotICAgICAgICAgICAgVHlwZSBh
cmd1bWVudFR5cGU7Ci0gICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhbHVl
VHlwZShhcmd1bWVudFR5cGUpLCAiY2FuJ3QgZ2V0ICIsIGksICJ0aCBhcmd1bWVudCBUeXBlIik7
Ci0gICAgICAgICAgICBzaWduYXR1cmUtPmFyZ3VtZW50KGkpID0gYXJndW1lbnRUeXBlOwotICAg
ICAgICB9Ci0KLSAgICAgICAgdWludDhfdCByZXR1cm5Db3VudDsKLSAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighcGFyc2VWYXJVSW50MShyZXR1cm5Db3VudCksICJjYW4ndCBnZXQgIiwgaSwg
InRoIFR5cGUncyByZXR1cm4gY291bnQiKTsKLSAgICAgICAgVHlwZSByZXR1cm5UeXBlOwotICAg
ICAgICBpZiAocmV0dXJuQ291bnQpIHsKLSAgICAgICAgICAgIFR5cGUgdmFsdWU7Ci0gICAgICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhbHVlVHlwZSh2YWx1ZSksICJjYW4ndCBn
ZXQgIiwgaSwgInRoIFR5cGUncyByZXR1cm4gdmFsdWUiKTsKLSAgICAgICAgICAgIHJldHVyblR5
cGUgPSBzdGF0aWNfY2FzdDxUeXBlPih2YWx1ZSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgcmV0dXJuVHlwZSA9IFR5cGU6OlZvaWQ7Ci0gICAgICAgIHNpZ25hdHVyZS0+cmV0dXJuVHlw
ZSgpID0gcmV0dXJuVHlwZTsKLQotICAgICAgICBzdGQ6OnBhaXI8U2lnbmF0dXJlSW5kZXgsIFJl
ZjxTaWduYXR1cmU+PiByZXN1bHQgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6YWRvcHQoV1RGTW92
ZShzaWduYXR1cmUpKTsKLSAgICAgICAgbV9pbmZvLT51c2VkU2lnbmF0dXJlcy51bmNoZWNrZWRB
cHBlbmQoV1RGTW92ZShyZXN1bHQuc2Vjb25kKSk7Ci0gICAgfQotICAgIHJldHVybiB7IH07Ci19
Ci0KLWF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZUltcG9ydCgpIC0+IFBhcnRpYWxSZXN1bHQKLXsK
LSAgICB1aW50MzJfdCBpbXBvcnRDb3VudDsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJz
ZVZhclVJbnQzMihpbXBvcnRDb3VudCksICJjYW4ndCBnZXQgSW1wb3J0IHNlY3Rpb24ncyBjb3Vu
dCIpOwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoaW1wb3J0Q291bnQgPiBtYXhJbXBvcnRzLCAi
SW1wb3J0IHNlY3Rpb24ncyBjb3VudCBpcyB0b28gYmlnICIsIGltcG9ydENvdW50LCAiIG1heGlt
dW0gIiwgbWF4SW1wb3J0cyk7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5nbG9i
YWxzLnRyeVJlc2VydmVDYXBhY2l0eShpbXBvcnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91
Z2ggbWVtb3J5IGZvciAiLCBpbXBvcnRDb3VudCwgIiBnbG9iYWxzIik7IC8vIEZJWE1FIHRoaXMg
b3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxvdy4KLSAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFtX2luZm8tPmltcG9ydHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENv
dW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGltcG9ydENvdW50LCAi
IGltcG9ydHMiKTsgLy8gRklYTUUgdGhpcyBvdmVyLWFsbG9jYXRlcyB3aGVuIHdlIGZpeCB0aGUg
RklYTUVzIGJlbG93LgotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+aW1wb3J0RnVu
Y3Rpb25TaWduYXR1cmVJbmRpY2VzLnRyeVJlc2VydmVDYXBhY2l0eShpbXBvcnRDb3VudCksICJj
YW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBpbXBvcnRDb3VudCwgIiBpbXBvcnQg
ZnVuY3Rpb24gc2lnbmF0dXJlcyIpOyAvLyBGSVhNRSB0aGlzIG92ZXItYWxsb2NhdGVzIHdoZW4g
d2UgZml4IHRoZSBGSVhNRXMgYmVsb3cuCi0KLSAgICBmb3IgKHVpbnQzMl90IGltcG9ydE51bWJl
ciA9IDA7IGltcG9ydE51bWJlciA8IGltcG9ydENvdW50OyArK2ltcG9ydE51bWJlcikgewotICAg
ICAgICB1aW50MzJfdCBtb2R1bGVMZW47Ci0gICAgICAgIHVpbnQzMl90IGZpZWxkTGVuOwotICAg
ICAgICBOYW1lIG1vZHVsZVN0cmluZzsKLSAgICAgICAgTmFtZSBmaWVsZFN0cmluZzsKLSAgICAg
ICAgRXh0ZXJuYWxLaW5kIGtpbmQ7Ci0gICAgICAgIHVuc2lnbmVkIGtpbmRJbmRleCB7IDAgfTsK
LQotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihtb2R1bGVMZW4p
LCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdzIG1vZHVsZSBuYW1lIGxl
bmd0aCIpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFjb25zdW1lVVRGOFN0cmluZyht
b2R1bGVTdHJpbmcsIG1vZHVsZUxlbiksICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGgg
SW1wb3J0J3MgbW9kdWxlIG5hbWUgb2YgbGVuZ3RoICIsIG1vZHVsZUxlbik7Ci0KLSAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZmllbGRMZW4pLCAiY2FuJ3QgZ2V0
ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdzIGZpZWxkIG5hbWUgbGVuZ3RoIGluIG1vZHVs
ZSAnIiwgbW9kdWxlU3RyaW5nLCAiJyIpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFj
b25zdW1lVVRGOFN0cmluZyhmaWVsZFN0cmluZywgZmllbGRMZW4pLCAiY2FuJ3QgZ2V0ICIsIGlt
cG9ydE51bWJlciwgInRoIEltcG9ydCdzIGZpZWxkIG5hbWUgb2YgbGVuZ3RoICIsIG1vZHVsZUxl
biwgIiBpbiBtb2R1bGUgJyIsIG1vZHVsZVN0cmluZywgIiciKTsKLQotICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFwYXJzZUV4dGVybmFsS2luZChraW5kKSwgImNhbid0IGdldCAiLCBpbXBv
cnROdW1iZXIsICJ0aCBJbXBvcnQncyBraW5kIGluIG1vZHVsZSAnIiwgbW9kdWxlU3RyaW5nLCAi
JyBmaWVsZCAnIiwgZmllbGRTdHJpbmcsICInIik7Ci0gICAgICAgIHN3aXRjaCAoa2luZCkgewot
ICAgICAgICBjYXNlIEV4dGVybmFsS2luZDo6RnVuY3Rpb246IHsKLSAgICAgICAgICAgIHVpbnQz
Ml90IGZ1bmN0aW9uU2lnbmF0dXJlSW5kZXg7Ci0gICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKCFwYXJzZVZhclVJbnQzMihmdW5jdGlvblNpZ25hdHVyZUluZGV4KSwgImNhbid0IGdldCAi
LCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQncyBmdW5jdGlvbiBzaWduYXR1cmUgaW4gbW9kdWxl
ICciLCBtb2R1bGVTdHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0cmluZywgIiciKTsKLSAgICAg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25TaWduYXR1cmVJbmRleCA+PSBtX2lu
Zm8tPnVzZWRTaWduYXR1cmVzLnNpemUoKSwgImludmFsaWQgZnVuY3Rpb24gc2lnbmF0dXJlIGZv
ciAiLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQsICIsIGZ1bmN0aW9uU2lnbmF0dXJlSW5kZXgs
ICIgaXMgb3V0IG9mIHJhbmdlIG9mICIsIG1faW5mby0+dXNlZFNpZ25hdHVyZXMuc2l6ZSgpLCAi
IGluIG1vZHVsZSAnIiwgbW9kdWxlU3RyaW5nLCAiJyBmaWVsZCAnIiwgZmllbGRTdHJpbmcsICIn
Iik7Ci0gICAgICAgICAgICBraW5kSW5kZXggPSBtX2luZm8tPmltcG9ydEZ1bmN0aW9uU2lnbmF0
dXJlSW5kaWNlcy5zaXplKCk7Ci0gICAgICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJ
bmRleCA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQobV9pbmZvLT51c2VkU2lnbmF0dXJlc1tm
dW5jdGlvblNpZ25hdHVyZUluZGV4XSk7Ci0gICAgICAgICAgICBtX2luZm8tPmltcG9ydEZ1bmN0
aW9uU2lnbmF0dXJlSW5kaWNlcy51bmNoZWNrZWRBcHBlbmQoc2lnbmF0dXJlSW5kZXgpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6OlRh
YmxlOiB7Ci0gICAgICAgICAgICBib29sIGlzSW1wb3J0ID0gdHJ1ZTsKLSAgICAgICAgICAgIFBh
cnRpYWxSZXN1bHQgcmVzdWx0ID0gcGFyc2VUYWJsZUhlbHBlcihpc0ltcG9ydCk7Ci0gICAgICAg
ICAgICBpZiAoVU5MSUtFTFkoIXJlc3VsdCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKFdURk1vdmUocmVzdWx0LmVycm9yKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpNZW1vcnk6IHsKLSAgICAgICAg
ICAgIGJvb2wgaXNJbXBvcnQgPSB0cnVlOwotICAgICAgICAgICAgUGFydGlhbFJlc3VsdCByZXN1
bHQgPSBwYXJzZU1lbW9yeUhlbHBlcihpc0ltcG9ydCk7Ci0gICAgICAgICAgICBpZiAoVU5MSUtF
TFkoIXJlc3VsdCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFdURk1v
dmUocmVzdWx0LmVycm9yKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpHbG9iYWw6IHsKLSAgICAgICAgICAgIEdsb2JhbCBnbG9i
YWw7Ci0gICAgICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlR2xvYmFsVHlw
ZShnbG9iYWwpKTsKLSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZ2xvYmFsLm11dGFi
aWxpdHkgPT0gR2xvYmFsOjpNdXRhYmxlLCAiTXV0YWJsZSBHbG9iYWxzIGFyZW4ndCBzdXBwb3J0
ZWQiKTsKLQotICAgICAgICAgICAga2luZEluZGV4ID0gbV9pbmZvLT5nbG9iYWxzLnNpemUoKTsK
LSAgICAgICAgICAgIG1faW5mby0+Z2xvYmFscy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShnbG9i
YWwpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAg
ICBtX2luZm8tPmltcG9ydHMudW5jaGVja2VkQXBwZW5kKHsgV1RGTW92ZShtb2R1bGVTdHJpbmcp
LCBXVEZNb3ZlKGZpZWxkU3RyaW5nKSwga2luZCwga2luZEluZGV4IH0pOwotICAgIH0KLQotICAg
IG1faW5mby0+Zmlyc3RJbnRlcm5hbEdsb2JhbCA9IG1faW5mby0+Z2xvYmFscy5zaXplKCk7Ci0g
ICAgcmV0dXJuIHsgfTsKLX0KLQotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb24oKSAt
PiBQYXJ0aWFsUmVzdWx0Ci17Ci0gICAgdWludDMyX3QgY291bnQ7Ci0gICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighcGFyc2VWYXJVSW50MzIoY291bnQpLCAiY2FuJ3QgZ2V0IEZ1bmN0aW9uIHNlY3Rp
b24ncyBjb3VudCIpOwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoY291bnQgPiBtYXhGdW5jdGlv
bnMsICJGdW5jdGlvbiBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBjb3VudCwgIiBtYXhp
bXVtICIsIG1heEZ1bmN0aW9ucyk7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5p
bnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy50cnlSZXNlcnZlQ2FwYWNpdHkoY291bnQp
LCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgY291bnQsICIgRnVuY3Rpb24g
c2lnbmF0dXJlcyIpOwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+ZnVuY3Rpb25M
b2NhdGlvbkluQmluYXJ5LnRyeVJlc2VydmVDYXBhY2l0eShjb3VudCksICJjYW4ndCBhbGxvY2F0
ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBjb3VudCwgIkZ1bmN0aW9uIGxvY2F0aW9ucyIpOwotCi0g
ICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgdWludDMy
X3QgdHlwZU51bWJlcjsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50
MzIodHlwZU51bWJlciksICJjYW4ndCBnZXQgIiwgaSwgInRoIEZ1bmN0aW9uJ3MgdHlwZSBudW1i
ZXIiKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0eXBlTnVtYmVyID49IG1faW5mby0+
dXNlZFNpZ25hdHVyZXMuc2l6ZSgpLCBpLCAidGggRnVuY3Rpb24gdHlwZSBudW1iZXIgaXMgaW52
YWxpZCAiLCB0eXBlTnVtYmVyKTsKLQotICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJ
bmRleCA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQobV9pbmZvLT51c2VkU2lnbmF0dXJlc1t0
eXBlTnVtYmVyXSk7Ci0gICAgICAgIC8vIFRoZSBDb2RlIHNlY3Rpb24gZml4ZXMgdXAgc3RhcnQg
YW5kIGVuZC4KLSAgICAgICAgc2l6ZV90IHN0YXJ0ID0gMDsKLSAgICAgICAgc2l6ZV90IGVuZCA9
IDA7Ci0gICAgICAgIG1faW5mby0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXMudW5j
aGVja2VkQXBwZW5kKHNpZ25hdHVyZUluZGV4KTsKLSAgICAgICAgbV9pbmZvLT5mdW5jdGlvbkxv
Y2F0aW9uSW5CaW5hcnkudW5jaGVja2VkQXBwZW5kKHsgc3RhcnQsIGVuZCB9KTsKKyAgICBpZiAo
T3B0aW9uczo6dXNlRWFnZXJXZWJBc3NlbWJseU1vZHVsZUhhc2hpbmcoKSkgeworICAgICAgICBT
SEExIGhhc2hlcjsKKyAgICAgICAgaGFzaGVyLmFkZEJ5dGVzKHNvdXJjZSgpLCBsZW5ndGgoKSk7
CisgICAgICAgIG1faW5mby0+bmFtZVNlY3Rpb24tPnNldEhhc2goaGFzaGVyLmNvbXB1dGVIZXhE
aWdlc3QoKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBNb2R1bGVQYXJz
ZXI6OnBhcnNlUmVzaXphYmxlTGltaXRzKHVpbnQzMl90JiBpbml0aWFsLCBzdGQ6Om9wdGlvbmFs
PHVpbnQzMl90PiYgbWF4aW11bSkgLT4gUGFydGlhbFJlc3VsdAotewotICAgIEFTU0VSVCghbWF4
aW11bSk7Ci0KLSAgICB1aW50OF90IGZsYWdzOwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBh
cnNlVmFyVUludDEoZmxhZ3MpLCAiY2FuJ3QgcGFyc2UgcmVzaXphYmxlIGxpbWl0cyBmbGFncyIp
OwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGluaXRpYWwpLCAiY2Fu
J3QgcGFyc2UgcmVzaXphYmxlIGxpbWl0cyBpbml0aWFsIHBhZ2UgY291bnQiKTsKLQotICAgIGlm
IChmbGFncykgewotICAgICAgICB1aW50MzJfdCBtYXhpbXVtSW50OwotICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihtYXhpbXVtSW50KSwgImNhbid0IHBhcnNlIHJl
c2l6YWJsZSBsaW1pdHMgbWF4aW11bSBwYWdlIGNvdW50Iik7Ci0gICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoaW5pdGlhbCA+IG1heGltdW1JbnQsICJyZXNpemFibGUgbGltaXRzIGhhcyBhIGlu
aXRpYWwgcGFnZSBjb3VudCBvZiAiLCBpbml0aWFsLCAiIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiBp
dHMgbWF4aW11bSAiLCBtYXhpbXVtSW50KTsKLSAgICAgICAgbWF4aW11bSA9IG1heGltdW1JbnQ7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHsgfTsKLX0KLQotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNl
VGFibGVIZWxwZXIoYm9vbCBpc0ltcG9ydCkgLT4gUGFydGlhbFJlc3VsdAotewotICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYobV90YWJsZUNvdW50ID4gMCwgIkNhbm5vdCBoYXZlIG1vcmUgdGhhbiBv
bmUgVGFibGUgZm9yIG5vdyIpOwotCi0gICAgKyttX3RhYmxlQ291bnQ7Ci0KLSAgICBpbnQ4X3Qg
dHlwZTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUludDcodHlwZSksICJjYW4ndCBw
YXJzZSBUYWJsZSB0eXBlIik7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0eXBlICE9IFdhc206
OkFueWZ1bmMsICJUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgIiwgdHlwZSk7Ci0K
LSAgICB1aW50MzJfdCBpbml0aWFsOwotICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGlt
dW07Ci0gICAgUGFydGlhbFJlc3VsdCBsaW1pdHMgPSBwYXJzZVJlc2l6YWJsZUxpbWl0cyhpbml0
aWFsLCBtYXhpbXVtKTsKLSAgICBpZiAoVU5MSUtFTFkoIWxpbWl0cykpCi0gICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChXVEZNb3ZlKGxpbWl0cy5lcnJvcigpKSk7Ci0gICAgV0FTTV9QQVJT
RVJfRkFJTF9JRihpbml0aWFsID4gbWF4VGFibGVFbnRyaWVzLCAiVGFibGUncyBpbml0aWFsIHBh
Z2UgY291bnQgb2YgIiwgaW5pdGlhbCwgIiBpcyB0b28gYmlnLCBtYXhpbXVtICIsIG1heFRhYmxl
RW50cmllcyk7Ci0KLSAgICBBU1NFUlQoIW1heGltdW0gfHwgKm1heGltdW0gPj0gaW5pdGlhbCk7
Ci0KLSAgICBtX2luZm8tPnRhYmxlSW5mb3JtYXRpb24gPSBUYWJsZUluZm9ybWF0aW9uKGluaXRp
YWwsIG1heGltdW0sIGlzSW1wb3J0KTsKLQotICAgIHJldHVybiB7IH07Ci19Ci0KLWF1dG8gTW9k
dWxlUGFyc2VyOjpwYXJzZVRhYmxlKCkgLT4gUGFydGlhbFJlc3VsdAotewotICAgIHVpbnQzMl90
IGNvdW50OwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGNvdW50KSwg
ImNhbid0IGdldCBUYWJsZSdzIGNvdW50Iik7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRihjb3Vu
dCA+IDEsICJUYWJsZSBjb3VudCBvZiAiLCBjb3VudCwgIiBpcyBpbnZhbGlkLCBhdCBtb3N0IDEg
aXMgYWxsb3dlZCBmb3Igbm93Iik7Ci0KLSAgICBpZiAoIWNvdW50KQotICAgICAgICByZXR1cm4g
eyB9OwotCi0gICAgYm9vbCBpc0ltcG9ydCA9IGZhbHNlOwotICAgIFBhcnRpYWxSZXN1bHQgcmVz
dWx0ID0gcGFyc2VUYWJsZUhlbHBlcihpc0ltcG9ydCk7Ci0gICAgaWYgKFVOTElLRUxZKCFyZXN1
bHQpKQotICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoV1RGTW92ZShyZXN1bHQuZXJyb3Io
KSkpOwotCi0gICAgcmV0dXJuIHsgfTsKLX0KLQotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlTWVt
b3J5SGVscGVyKGJvb2wgaXNJbXBvcnQpIC0+IFBhcnRpYWxSZXN1bHQKLXsKLSAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKG1fbWVtb3J5Q291bnQsICJ0aGVyZSBjYW4gYXQgbW9zdCBiZSBvbmUgTWVt
b3J5IHNlY3Rpb24gZm9yIG5vdyIpOwotCi0gICAgKyttX21lbW9yeUNvdW50OwotCi0gICAgUGFn
ZUNvdW50IGluaXRpYWxQYWdlQ291bnQ7Ci0gICAgUGFnZUNvdW50IG1heGltdW1QYWdlQ291bnQ7
Ci0gICAgewotICAgICAgICB1aW50MzJfdCBpbml0aWFsOwotICAgICAgICBzdGQ6Om9wdGlvbmFs
PHVpbnQzMl90PiBtYXhpbXVtOwotICAgICAgICBQYXJ0aWFsUmVzdWx0IGxpbWl0cyA9IHBhcnNl
UmVzaXphYmxlTGltaXRzKGluaXRpYWwsIG1heGltdW0pOwotICAgICAgICBpZiAoVU5MSUtFTFko
IWxpbWl0cykpCi0gICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoV1RGTW92ZShsaW1p
dHMuZXJyb3IoKSkpOwotICAgICAgICBBU1NFUlQoIW1heGltdW0gfHwgKm1heGltdW0gPj0gaW5p
dGlhbCk7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIVBhZ2VDb3VudDo6aXNWYWxpZChp
bml0aWFsKSwgIk1lbW9yeSdzIGluaXRpYWwgcGFnZSBjb3VudCBvZiAiLCBpbml0aWFsLCAiIGlz
IGludmFsaWQiKTsKLQotICAgICAgICBpbml0aWFsUGFnZUNvdW50ID0gUGFnZUNvdW50KGluaXRp
YWwpOwotCi0gICAgICAgIGlmIChtYXhpbXVtKSB7Ci0gICAgICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFQYWdlQ291bnQ6OmlzVmFsaWQoKm1heGltdW0pLCAiTWVtb3J5J3MgbWF4aW11bSBw
YWdlIGNvdW50IG9mICIsICptYXhpbXVtLCAiIGlzIGludmFsaWQiKTsKLSAgICAgICAgICAgIG1h
eGltdW1QYWdlQ291bnQgPSBQYWdlQ291bnQoKm1heGltdW0pOwotICAgICAgICB9Ci0gICAgfQot
ICAgIEFTU0VSVChpbml0aWFsUGFnZUNvdW50KTsKLSAgICBBU1NFUlQoIW1heGltdW1QYWdlQ291
bnQgfHwgbWF4aW11bVBhZ2VDb3VudCA+PSBpbml0aWFsUGFnZUNvdW50KTsKLQotICAgIG1faW5m
by0+bWVtb3J5ID0gTWVtb3J5SW5mb3JtYXRpb24oaW5pdGlhbFBhZ2VDb3VudCwgbWF4aW11bVBh
Z2VDb3VudCwgaXNJbXBvcnQpOwotICAgIHJldHVybiB7IH07Ci19Ci0KLWF1dG8gTW9kdWxlUGFy
c2VyOjpwYXJzZU1lbW9yeSgpIC0+IFBhcnRpYWxSZXN1bHQKLXsKLSAgICB1aW50OF90IGNvdW50
OwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDEoY291bnQpLCAiY2FuJ3Qg
cGFyc2UgTWVtb3J5IHNlY3Rpb24ncyBjb3VudCIpOwotCi0gICAgaWYgKCFjb3VudCkKLSAgICAg
ICAgcmV0dXJuIHsgfTsKLQotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoY291bnQgIT0gMSwgIk1l
bW9yeSBzZWN0aW9uIGhhcyBtb3JlIHRoYW4gb25lIG1lbW9yeSwgV2ViQXNzZW1ibHkgY3VycmVu
dGx5IG9ubHkgYWxsb3dzIHplcm8gb3Igb25lIik7Ci0KLSAgICBib29sIGlzSW1wb3J0ID0gZmFs
c2U7Ci0gICAgcmV0dXJuIHBhcnNlTWVtb3J5SGVscGVyKGlzSW1wb3J0KTsKLX0KLQotYXV0byBN
b2R1bGVQYXJzZXI6OnBhcnNlR2xvYmFsKCkgLT4gUGFydGlhbFJlc3VsdAotewotICAgIHVpbnQz
Ml90IGdsb2JhbENvdW50OwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMy
KGdsb2JhbENvdW50KSwgImNhbid0IGdldCBHbG9iYWwgc2VjdGlvbidzIGNvdW50Iik7Ci0gICAg
V0FTTV9QQVJTRVJfRkFJTF9JRihnbG9iYWxDb3VudCA+IG1heEdsb2JhbHMsICJHbG9iYWwgc2Vj
dGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgZ2xvYmFsQ291bnQsICIgbWF4aW11bSAiLCBtYXhH
bG9iYWxzKTsKLSAgICBzaXplX3QgdG90YWxCeXRlcyA9IGdsb2JhbENvdW50ICsgbV9pbmZvLT5m
aXJzdEludGVybmFsR2xvYmFsOwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoKHN0YXRpY19jYXN0
PHVpbnQzMl90Pih0b3RhbEJ5dGVzKSA8IGdsb2JhbENvdW50KSB8fCAhbV9pbmZvLT5nbG9iYWxz
LnRyeVJlc2VydmVDYXBhY2l0eSh0b3RhbEJ5dGVzKSwgImNhbid0IGFsbG9jYXRlIG1lbW9yeSBm
b3IgIiwgdG90YWxCeXRlcywgIiBnbG9iYWxzIik7Ci0KLSAgICBmb3IgKHVpbnQzMl90IGdsb2Jh
bEluZGV4ID0gMDsgZ2xvYmFsSW5kZXggPCBnbG9iYWxDb3VudDsgKytnbG9iYWxJbmRleCkgewot
ICAgICAgICBHbG9iYWwgZ2xvYmFsOwotICAgICAgICB1aW50OF90IGluaXRPcGNvZGU7Ci0KLSAg
ICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUdsb2JhbFR5cGUoZ2xvYmFsKSk7
Ci0gICAgICAgIFR5cGUgdHlwZUZvckluaXRPcGNvZGU7Ci0gICAgICAgIFdBU01fRkFJTF9JRl9I
RUxQRVJfRkFJTFMocGFyc2VJbml0RXhwcihpbml0T3Bjb2RlLCBnbG9iYWwuaW5pdGlhbEJpdHNP
ckltcG9ydE51bWJlciwgdHlwZUZvckluaXRPcGNvZGUpKTsKLSAgICAgICAgaWYgKGluaXRPcGNv
ZGUgPT0gR2V0R2xvYmFsKQotICAgICAgICAgICAgZ2xvYmFsLmluaXRpYWxpemF0aW9uVHlwZSA9
IEdsb2JhbDo6RnJvbUdsb2JhbEltcG9ydDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZ2xv
YmFsLmluaXRpYWxpemF0aW9uVHlwZSA9IEdsb2JhbDo6RnJvbUV4cHJlc3Npb247Ci0gICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYodHlwZUZvckluaXRPcGNvZGUgIT0gZ2xvYmFsLnR5cGUsICJH
bG9iYWwgaW5pdF9leHByIG9wY29kZSBvZiB0eXBlICIsIHR5cGVGb3JJbml0T3Bjb2RlLCAiIGRv
ZXNuJ3QgbWF0Y2ggZ2xvYmFsJ3MgdHlwZSAiLCBnbG9iYWwudHlwZSk7Ci0KLSAgICAgICAgbV9p
bmZvLT5nbG9iYWxzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGdsb2JhbCkpOwotICAgIH0KLQot
ICAgIHJldHVybiB7IH07Ci19Ci0KLWF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZUV4cG9ydCgpIC0+
IFBhcnRpYWxSZXN1bHQKLXsKLSAgICB1aW50MzJfdCBleHBvcnRDb3VudDsKLSAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihleHBvcnRDb3VudCksICJjYW4ndCBnZXQgRXhw
b3J0IHNlY3Rpb24ncyBjb3VudCIpOwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZXhwb3J0Q291
bnQgPiBtYXhFeHBvcnRzLCAiRXhwb3J0IHNlY3Rpb24ncyBjb3VudCBpcyB0b28gYmlnICIsIGV4
cG9ydENvdW50LCAiIG1heGltdW0gIiwgbWF4RXhwb3J0cyk7Ci0gICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighbV9pbmZvLT5leHBvcnRzLnRyeVJlc2VydmVDYXBhY2l0eShleHBvcnRDb3VudCksICJj
YW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBleHBvcnRDb3VudCwgIiBleHBvcnRz
Iik7Ci0KLSAgICBIYXNoU2V0PFN0cmluZz4gZXhwb3J0TmFtZXM7Ci0gICAgZm9yICh1aW50MzJf
dCBleHBvcnROdW1iZXIgPSAwOyBleHBvcnROdW1iZXIgPCBleHBvcnRDb3VudDsgKytleHBvcnRO
dW1iZXIpIHsKLSAgICAgICAgdWludDMyX3QgZmllbGRMZW47Ci0gICAgICAgIE5hbWUgZmllbGRT
dHJpbmc7Ci0gICAgICAgIEV4dGVybmFsS2luZCBraW5kOwotICAgICAgICB1bnNpZ25lZCBraW5k
SW5kZXg7Ci0KLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZmll
bGRMZW4pLCAiY2FuJ3QgZ2V0ICIsIGV4cG9ydE51bWJlciwgInRoIEV4cG9ydCdzIGZpZWxkIG5h
bWUgbGVuZ3RoIik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVVVEY4U3Ry
aW5nKGZpZWxkU3RyaW5nLCBmaWVsZExlbiksICJjYW4ndCBnZXQgIiwgZXhwb3J0TnVtYmVyLCAi
dGggRXhwb3J0J3MgZmllbGQgbmFtZSBvZiBsZW5ndGggIiwgZmllbGRMZW4pOwotICAgICAgICBT
dHJpbmcgZmllbGROYW1lID0gU3RyaW5nOjpmcm9tVVRGOChmaWVsZFN0cmluZyk7Ci0gICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoZXhwb3J0TmFtZXMuY29udGFpbnMoZmllbGROYW1lKSwgImR1
cGxpY2F0ZSBleHBvcnQ6ICciLCBmaWVsZFN0cmluZywgIiciKTsKLSAgICAgICAgZXhwb3J0TmFt
ZXMuYWRkKGZpZWxkTmFtZSk7Ci0KLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VF
eHRlcm5hbEtpbmQoa2luZCksICJjYW4ndCBnZXQgIiwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0
J3Mga2luZCwgbmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOwotICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihraW5kSW5kZXgpLCAiY2FuJ3QgZ2V0ICIsIGV4cG9y
dE51bWJlciwgInRoIEV4cG9ydCdzIGtpbmQgaW5kZXgsIG5hbWVkICciLCBmaWVsZFN0cmluZywg
IiciKTsKLSAgICAgICAgc3dpdGNoIChraW5kKSB7Ci0gICAgICAgIGNhc2UgRXh0ZXJuYWxLaW5k
OjpGdW5jdGlvbjogewotICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihraW5kSW5kZXgg
Pj0gbV9pbmZvLT5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCksIGV4cG9ydE51bWJlciwgInRoIEV4
cG9ydCBoYXMgaW52YWxpZCBmdW5jdGlvbiBudW1iZXIgIiwga2luZEluZGV4LCAiIGl0IGV4Y2Vl
ZHMgdGhlIGZ1bmN0aW9uIGluZGV4IHNwYWNlICIsIG1faW5mby0+ZnVuY3Rpb25JbmRleFNwYWNl
U2l6ZSgpLCAiLCBuYW1lZCAnIiwgZmllbGRTdHJpbmcsICInIik7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEV4dGVybmFsS2luZDo6VGFibGU6IHsKLSAgICAg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoa2luZEluZGV4ID49IG1fdGFibGVDb3VudCwgImNh
bid0IGV4cG9ydCBUYWJsZSAiLCBraW5kSW5kZXgsICIgdGhlcmUgYXJlICIsIG1fdGFibGVDb3Vu
dCwgIiBUYWJsZXMiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2UgRXh0ZXJuYWxLaW5kOjpNZW1vcnk6IHsKLSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIW1faW5mby0+bWVtb3J5LCAiY2FuJ3QgZXhwb3J0IGEgbm9uLWV4aXN0ZW50IE1lbW9yeSIp
OwotICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihraW5kSW5kZXgsICJjYW4ndCBleHBv
cnQgTWVtb3J5ICIsIGtpbmRJbmRleCwgIiBvbmx5IG9uZSBUYWJsZSBpcyBjdXJyZW50bHkgc3Vw
cG9ydGVkIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEV4
dGVybmFsS2luZDo6R2xvYmFsOiB7Ci0gICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGtp
bmRJbmRleCA+PSBtX2luZm8tPmdsb2JhbHMuc2l6ZSgpLCBleHBvcnROdW1iZXIsICJ0aCBFeHBv
cnQgaGFzIGludmFsaWQgZ2xvYmFsIG51bWJlciAiLCBraW5kSW5kZXgsICIgaXQgZXhjZWVkcyB0
aGUgZ2xvYmFscyBjb3VudCAiLCBtX2luZm8tPmdsb2JhbHMuc2l6ZSgpLCAiLCBuYW1lZCAnIiwg
ZmllbGRTdHJpbmcsICInIik7Ci0gICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG1faW5m
by0+Z2xvYmFsc1traW5kSW5kZXhdLm11dGFiaWxpdHkgIT0gR2xvYmFsOjpJbW11dGFibGUsIGV4
cG9ydE51bWJlciwgInRoIEV4cG9ydCBpc24ndCBpbW11dGFibGUsIG5hbWVkICciLCBmaWVsZFN0
cmluZywgIiciKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIH0KLQot
ICAgICAgICBtX2luZm8tPmV4cG9ydHMudW5jaGVja2VkQXBwZW5kKHsgV1RGTW92ZShmaWVsZFN0
cmluZyksIGtpbmQsIGtpbmRJbmRleCB9KTsKLSAgICB9Ci0KLSAgICByZXR1cm4geyB9OwotfQot
Ci1hdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VTdGFydCgpIC0+IFBhcnRpYWxSZXN1bHQKLXsKLSAg
ICB1aW50MzJfdCBzdGFydEZ1bmN0aW9uSW5kZXg7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
cGFyc2VWYXJVSW50MzIoc3RhcnRGdW5jdGlvbkluZGV4KSwgImNhbid0IGdldCBTdGFydCBpbmRl
eCIpOwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoc3RhcnRGdW5jdGlvbkluZGV4ID49IG1faW5m
by0+ZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgpLCAiU3RhcnQgaW5kZXggIiwgc3RhcnRGdW5jdGlv
bkluZGV4LCAiIGV4Y2VlZHMgZnVuY3Rpb24gaW5kZXggc3BhY2UgIiwgbV9pbmZvLT5mdW5jdGlv
bkluZGV4U3BhY2VTaXplKCkpOwotICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0g
bV9pbmZvLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlv
bkluZGV4KTsKLSAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9y
bWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoc2ln
bmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgIlN0YXJ0IGZ1bmN0aW9uIGNhbid0IGhhdmUgYXJndW1l
bnRzIik7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRihzaWduYXR1cmUucmV0dXJuVHlwZSgpICE9
IFZvaWQsICJTdGFydCBmdW5jdGlvbiBjYW4ndCByZXR1cm4gYSB2YWx1ZSIpOwotICAgIG1faW5m
by0+c3RhcnRGdW5jdGlvbkluZGV4U3BhY2UgPSBzdGFydEZ1bmN0aW9uSW5kZXg7Ci0gICAgcmV0
dXJuIHsgfTsKLX0KLQotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlRWxlbWVudCgpIC0+IFBhcnRp
YWxSZXN1bHQKLXsKLSAgICB1aW50MzJfdCBlbGVtZW50Q291bnQ7Ci0gICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighcGFyc2VWYXJVSW50MzIoZWxlbWVudENvdW50KSwgImNhbid0IGdldCBFbGVtZW50
IHNlY3Rpb24ncyBjb3VudCIpOwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZWxlbWVudENvdW50
ID4gbWF4VGFibGVFbnRyaWVzLCAiRWxlbWVudCBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAi
LCBlbGVtZW50Q291bnQsICIgbWF4aW11bSAiLCBtYXhUYWJsZUVudHJpZXMpOwotICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+ZWxlbWVudHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGVsZW1l
bnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yICIsIGVsZW1lbnRDb3VudCwgIiBF
bGVtZW50cyIpOwotICAgIGZvciAodW5zaWduZWQgZWxlbWVudE51bSA9IDA7IGVsZW1lbnROdW0g
PCBlbGVtZW50Q291bnQ7ICsrZWxlbWVudE51bSkgewotICAgICAgICB1aW50MzJfdCB0YWJsZUlu
ZGV4OwotICAgICAgICB1aW50NjRfdCBpbml0RXhwckJpdHM7Ci0gICAgICAgIHVpbnQ4X3QgaW5p
dE9wY29kZTsKLSAgICAgICAgdWludDMyX3QgaW5kZXhDb3VudDsKLQotICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMih0YWJsZUluZGV4KSwgImNhbid0IGdldCAiLCBl
bGVtZW50TnVtLCAidGggRWxlbWVudCB0YWJsZSBpbmRleCIpOwotICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKHRhYmxlSW5kZXggPj0gbV90YWJsZUNvdW50LCAiRWxlbWVudCBzZWN0aW9uIGZv
ciBUYWJsZSAiLCB0YWJsZUluZGV4LCAiIGV4Y2VlZHMgYXZhaWxhYmxlIFRhYmxlICIsIG1fdGFi
bGVDb3VudCk7Ci0gICAgICAgIFR5cGUgaW5pdEV4cHJUeXBlOwotICAgICAgICBXQVNNX0ZBSUxf
SUZfSEVMUEVSX0ZBSUxTKHBhcnNlSW5pdEV4cHIoaW5pdE9wY29kZSwgaW5pdEV4cHJCaXRzLCBp
bml0RXhwclR5cGUpKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbml0RXhwclR5cGUg
IT0gSTMyLCAiRWxlbWVudCBpbml0X2V4cHIgbXVzdCBwcm9kdWNlIGFuIGkzMiIpOwotICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbmRleENvdW50KSwgImNhbid0
IGdldCAiLCBlbGVtZW50TnVtLCAidGggaW5kZXggY291bnQgZm9yIEVsZW1lbnQgc2VjdGlvbiIp
OwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluZGV4Q291bnQgPT0gc3RkOjpudW1lcmlj
X2xpbWl0czx1aW50MzJfdD46Om1heCgpLCAiRWxlbWVudCBzZWN0aW9uJ3MgIiwgZWxlbWVudE51
bSwgInRoIGluZGV4IGNvdW50IGlzIHRvbyBiaWcgIiwgaW5kZXhDb3VudCk7Ci0KLSAgICAgICAg
QVNTRVJUKCEhbV9pbmZvLT50YWJsZUluZm9ybWF0aW9uKTsKLQotICAgICAgICBFbGVtZW50IGVs
ZW1lbnQobWFrZUkzMkluaXRFeHByKGluaXRPcGNvZGUsIGluaXRFeHByQml0cykpOwotICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFlbGVtZW50LmZ1bmN0aW9uSW5kaWNlcy50cnlSZXNlcnZl
Q2FwYWNpdHkoaW5kZXhDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yICIsIGluZGV4
Q291bnQsICIgRWxlbWVudCBpbmRpY2VzIik7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRl
eCA9IDA7IGluZGV4IDwgaW5kZXhDb3VudDsgKytpbmRleCkgewotICAgICAgICAgICAgdWludDMy
X3QgZnVuY3Rpb25JbmRleDsKLSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNl
VmFyVUludDMyKGZ1bmN0aW9uSW5kZXgpLCAiY2FuJ3QgZ2V0IEVsZW1lbnQgc2VjdGlvbidzICIs
IGVsZW1lbnROdW0sICJ0aCBlbGVtZW50J3MgIiwgaW5kZXgsICJ0aCBpbmRleCIpOwotICAgICAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvbkluZGV4ID49IG1faW5mby0+ZnVuY3Rp
b25JbmRleFNwYWNlU2l6ZSgpLCAiRWxlbWVudCBzZWN0aW9uJ3MgIiwgZWxlbWVudE51bSwgInRo
IGVsZW1lbnQncyAiLCBpbmRleCwgInRoIGluZGV4IGlzICIsIGZ1bmN0aW9uSW5kZXgsICIgd2hp
Y2ggZXhjZWVkcyB0aGUgZnVuY3Rpb24gaW5kZXggc3BhY2Ugc2l6ZSBvZiAiLCBtX2luZm8tPmZ1
bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7Ci0KLSAgICAgICAgICAgIGVsZW1lbnQuZnVuY3Rpb25J
bmRpY2VzLnVuY2hlY2tlZEFwcGVuZChmdW5jdGlvbkluZGV4KTsKLSAgICAgICAgfQotCi0gICAg
ICAgIG1faW5mby0+ZWxlbWVudHMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoZWxlbWVudCkpOwot
ICAgIH0KLQotICAgIHJldHVybiB7IH07Ci19Ci0KLWF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZUNv
ZGUoKSAtPiBQYXJ0aWFsUmVzdWx0Ci17Ci0gICAgdWludDMyX3QgY291bnQ7Ci0gICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoY291bnQpLCAiY2FuJ3QgZ2V0IENvZGUgc2Vj
dGlvbidzIGNvdW50Iik7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRihjb3VudCA9PSBzdGQ6Om51
bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksICJDb2RlIHNlY3Rpb24ncyBjb3VudCBpcyB0
b28gYmlnICIsIGNvdW50KTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGNvdW50ICE9IG1faW5m
by0+ZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKSwgIkNvZGUgc2VjdGlvbiBjb3VudCAi
LCBjb3VudCwgIiBleGNlZWRzIHRoZSBkZWNsYXJlZCBudW1iZXIgb2YgZnVuY3Rpb25zICIsIG1f
aW5mby0+ZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKSk7Ci0KLSAgICBmb3IgKHVpbnQz
Ml90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICB1aW50MzJfdCBmdW5jdGlvblNp
emU7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGZ1bmN0aW9u
U2l6ZSksICJjYW4ndCBnZXQgIiwgaSwgInRoIENvZGUgZnVuY3Rpb24ncyBzaXplIik7Ci0gICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25TaXplID4gbGVuZ3RoKCksICJDb2RlIGZ1
bmN0aW9uJ3Mgc2l6ZSAiLCBmdW5jdGlvblNpemUsICIgZXhjZWVkcyB0aGUgbW9kdWxlJ3Mgc2l6
ZSAiLCBsZW5ndGgoKSk7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25TaXpl
ID4gbGVuZ3RoKCkgLSBtX29mZnNldCwgIkNvZGUgZnVuY3Rpb24ncyBzaXplICIsIGZ1bmN0aW9u
U2l6ZSwgIiBleGNlZWRzIHRoZSBtb2R1bGUncyByZW1haW5pbmcgc2l6ZSIsIGxlbmd0aCgpIC0g
bV9vZmZzZXQpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGZ1bmN0aW9uU2l6ZSA+IG1h
eEZ1bmN0aW9uU2l6ZSwgIkNvZGUgZnVuY3Rpb24ncyBzaXplICIsIGZ1bmN0aW9uU2l6ZSwgIiBp
cyB0b28gYmlnIik7Ci0KLSAgICAgICAgbV9pbmZvLT5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlb
aV0uc3RhcnQgPSBtX29mZnNldDsKLSAgICAgICAgbV9pbmZvLT5mdW5jdGlvbkxvY2F0aW9uSW5C
aW5hcnlbaV0uZW5kID0gbV9vZmZzZXQgKyBmdW5jdGlvblNpemU7Ci0gICAgICAgIG1fb2Zmc2V0
ID0gbV9pbmZvLT5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlbaV0uZW5kOwotICAgIH0KLQotICAg
IHJldHVybiB7IH07Ci19Ci0KLWF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZUluaXRFeHByKHVpbnQ4
X3QmIG9wY29kZSwgdWludDY0X3QmIGJpdHNPckltcG9ydE51bWJlciwgVHlwZSYgcmVzdWx0VHlw
ZSkgLT4gUGFydGlhbFJlc3VsdAotewotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUlu
dDgob3Bjb2RlKSwgImNhbid0IGdldCBpbml0X2V4cHIncyBvcGNvZGUiKTsKLQotICAgIHN3aXRj
aCAob3Bjb2RlKSB7Ci0gICAgY2FzZSBJMzJDb25zdDogewotICAgICAgICBpbnQzMl90IGNvbnN0
YW50OwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhckludDMyKGNvbnN0YW50
KSwgImNhbid0IGdldCBjb25zdGFudCB2YWx1ZSBmb3IgaW5pdF9leHByJ3MgaTMyLmNvbnN0Iik7
Ci0gICAgICAgIGJpdHNPckltcG9ydE51bWJlciA9IHN0YXRpY19jYXN0PHVpbnQ2NF90Pihjb25z
dGFudCk7Ci0gICAgICAgIHJlc3VsdFR5cGUgPSBJMzI7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LQotICAgIGNhc2UgSTY0Q29uc3Q6IHsKLSAgICAgICAgaW50NjRfdCBjb25zdGFudDsKLSAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJJbnQ2NChjb25zdGFudCksICJjYW4ndCBn
ZXQgY29uc3RhbnQgdmFsdWUgZm9yIGluaXRfZXhwcidzIGk2NC5jb25zdCIpOwotICAgICAgICBi
aXRzT3JJbXBvcnROdW1iZXIgPSBjb25zdGFudDsKLSAgICAgICAgcmVzdWx0VHlwZSA9IEk2NDsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBGMzJDb25zdDogewotICAgICAgICB1
aW50MzJfdCBjb25zdGFudDsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VVSW50
MzIoY29uc3RhbnQpLCAiY2FuJ3QgZ2V0IGNvbnN0YW50IHZhbHVlIGZvciBpbml0X2V4cHIncyBm
MzIuY29uc3QiKTsKLSAgICAgICAgYml0c09ySW1wb3J0TnVtYmVyID0gY29uc3RhbnQ7Ci0gICAg
ICAgIHJlc3VsdFR5cGUgPSBGMzI7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2Ug
RjY0Q29uc3Q6IHsKLSAgICAgICAgdWludDY0X3QgY29uc3RhbnQ7Ci0gICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIXBhcnNlVUludDY0KGNvbnN0YW50KSwgImNhbid0IGdldCBjb25zdGFudCB2
YWx1ZSBmb3IgaW5pdF9leHByJ3MgZjY0LmNvbnN0Iik7Ci0gICAgICAgIGJpdHNPckltcG9ydE51
bWJlciA9IGNvbnN0YW50OwotICAgICAgICByZXN1bHRUeXBlID0gRjY0OwotICAgICAgICBicmVh
azsKLSAgICB9Ci0KLSAgICBjYXNlIEdldEdsb2JhbDogewotICAgICAgICB1aW50MzJfdCBpbmRl
eDsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoaW5kZXgpLCAi
Y2FuJ3QgZ2V0IGdldF9nbG9iYWwncyBpbmRleCIpOwotCi0gICAgICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoaW5kZXggPj0gbV9pbmZvLT5nbG9iYWxzLnNpemUoKSwgImdldF9nbG9iYWwncyBpbmRl
eCAiLCBpbmRleCwgIiBleGNlZWRzIHRoZSBudW1iZXIgb2YgZ2xvYmFscyAiLCBtX2luZm8tPmds
b2JhbHMuc2l6ZSgpKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbmRleCA+PSBtX2lu
Zm8tPmZpcnN0SW50ZXJuYWxHbG9iYWwsICJnZXRfZ2xvYmFsIGltcG9ydCBraW5kIGluZGV4ICIs
IGluZGV4LCAiIGV4Y2VlZHMgdGhlIGZpcnN0IGludGVybmFsIGdsb2JhbCAiLCBtX2luZm8tPmZp
cnN0SW50ZXJuYWxHbG9iYWwpOwotCi0gICAgICAgIEFTU0VSVChtX2luZm8tPmdsb2JhbHNbaW5k
ZXhdLm11dGFiaWxpdHkgPT0gR2xvYmFsOjpJbW11dGFibGUpOwotICAgICAgICByZXN1bHRUeXBl
ID0gbV9pbmZvLT5nbG9iYWxzW2luZGV4XS50eXBlOwotICAgICAgICBiaXRzT3JJbXBvcnROdW1i
ZXIgPSBpbmRleDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZGVmYXVsdDoKLSAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0cnVlLCAidW5rbm93biBpbml0X2V4cHIgb3Bjb2RlICIs
IG9wY29kZSk7Ci0gICAgfQotCi0gICAgdWludDhfdCBlbmRPcGNvZGU7Ci0gICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighcGFyc2VVSW50OChlbmRPcGNvZGUpLCAiY2FuJ3QgZ2V0IGluaXRfZXhwcidz
IGVuZCBvcGNvZGUiKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGVuZE9wY29kZSAhPSBPcFR5
cGU6OkVuZCwgImluaXRfZXhwciBzaG91bGQgZW5kIHdpdGggZW5kLCBlbmRlZCB3aXRoICIsIGVu
ZE9wY29kZSk7Ci0KLSAgICByZXR1cm4geyB9OwotfQotCi1hdXRvIE1vZHVsZVBhcnNlcjo6cGFy
c2VHbG9iYWxUeXBlKEdsb2JhbCYgZ2xvYmFsKSAtPiBQYXJ0aWFsUmVzdWx0Ci17Ci0gICAgdWlu
dDhfdCBtdXRhYmlsaXR5OwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFsdWVUeXBl
KGdsb2JhbC50eXBlKSwgImNhbid0IGdldCBHbG9iYWwncyB2YWx1ZSB0eXBlIik7Ci0gICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MShtdXRhYmlsaXR5KSwgImNhbid0IGdldCBH
bG9iYWwgdHlwZSdzIG11dGFiaWxpdHkiKTsKLSAgICBnbG9iYWwubXV0YWJpbGl0eSA9IHN0YXRp
Y19jYXN0PEdsb2JhbDo6TXV0YWJpbGl0eT4obXV0YWJpbGl0eSk7Ci0gICAgcmV0dXJuIHsgfTsK
LX0KLQotYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlRGF0YSgpIC0+IFBhcnRpYWxSZXN1bHQKLXsK
LSAgICB1aW50MzJfdCBzZWdtZW50Q291bnQ7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFy
c2VWYXJVSW50MzIoc2VnbWVudENvdW50KSwgImNhbid0IGdldCBEYXRhIHNlY3Rpb24ncyBjb3Vu
dCIpOwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoc2VnbWVudENvdW50ID4gbWF4RGF0YVNlZ21l
bnRzLCAiRGF0YSBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBzZWdtZW50Q291bnQsICIg
bWF4aW11bSAiLCBtYXhEYXRhU2VnbWVudHMpOwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1f
aW5mby0+ZGF0YS50cnlSZXNlcnZlQ2FwYWNpdHkoc2VnbWVudENvdW50KSwgImNhbid0IGFsbG9j
YXRlIGVub3VnaCBtZW1vcnkgZm9yIERhdGEgc2VjdGlvbidzICIsIHNlZ21lbnRDb3VudCwgIiBz
ZWdtZW50cyIpOwotCi0gICAgZm9yICh1aW50MzJfdCBzZWdtZW50TnVtYmVyID0gMDsgc2VnbWVu
dE51bWJlciA8IHNlZ21lbnRDb3VudDsgKytzZWdtZW50TnVtYmVyKSB7Ci0gICAgICAgIHVpbnQz
Ml90IG1lbW9yeUluZGV4OwotICAgICAgICB1aW50NjRfdCBpbml0RXhwckJpdHM7Ci0gICAgICAg
IHVpbnQ4X3QgaW5pdE9wY29kZTsKLSAgICAgICAgdWludDMyX3QgZGF0YUJ5dGVMZW5ndGg7Ci0K
LSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIobWVtb3J5SW5kZXgp
LCAiY2FuJ3QgZ2V0ICIsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQncyBpbmRleCIp
OwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG1lbW9yeUluZGV4ID49IG1fbWVtb3J5Q291
bnQsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQgaGFzIGluZGV4ICIsIG1lbW9yeUlu
ZGV4LCAiIHdoaWNoIGV4Y2VlZHMgdGhlIG51bWJlciBvZiBNZW1vcmllcyAiLCBtX21lbW9yeUNv
dW50KTsKLSAgICAgICAgVHlwZSBpbml0RXhwclR5cGU7Ci0gICAgICAgIFdBU01fRkFJTF9JRl9I
RUxQRVJfRkFJTFMocGFyc2VJbml0RXhwcihpbml0T3Bjb2RlLCBpbml0RXhwckJpdHMsIGluaXRF
eHByVHlwZSkpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluaXRFeHByVHlwZSAhPSBJ
MzIsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQncyBpbml0X2V4cHIgbXVzdCBwcm9k
dWNlIGFuIGkzMiIpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQz
MihkYXRhQnl0ZUxlbmd0aCksICJjYW4ndCBnZXQgIiwgc2VnbWVudE51bWJlciwgInRoIERhdGEg
c2VnbWVudCdzIGRhdGEgYnl0ZSBsZW5ndGgiKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RihkYXRhQnl0ZUxlbmd0aCA+IG1heE1vZHVsZVNpemUsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRh
IHNlZ21lbnQncyBkYXRhIGJ5dGUgbGVuZ3RoIGlzIHRvbyBiaWcgIiwgZGF0YUJ5dGVMZW5ndGgs
ICIgbWF4aW11bSAiLCBtYXhNb2R1bGVTaXplKTsKLQotICAgICAgICBTZWdtZW50KiBzZWdtZW50
ID0gU2VnbWVudDo6Y3JlYXRlKG1ha2VJMzJJbml0RXhwcihpbml0T3Bjb2RlLCBpbml0RXhwckJp
dHMpLCBkYXRhQnl0ZUxlbmd0aCk7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXNlZ21l
bnQsICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBzZWdtZW50TnVtYmVyLCAi
dGggRGF0YSBzZWdtZW50IG9mIHNpemUgIiwgZGF0YUJ5dGVMZW5ndGgpOwotICAgICAgICBtX2lu
Zm8tPmRhdGEudW5jaGVja2VkQXBwZW5kKFNlZ21lbnQ6OmFkb3B0UHRyKHNlZ21lbnQpKTsKLSAg
ICAgICAgZm9yICh1aW50MzJfdCBkYXRhQnl0ZSA9IDA7IGRhdGFCeXRlIDwgZGF0YUJ5dGVMZW5n
dGg7ICsrZGF0YUJ5dGUpIHsKLSAgICAgICAgICAgIHVpbnQ4X3QgYnl0ZTsKLSAgICAgICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUludDgoYnl0ZSksICJjYW4ndCBnZXQgIiwgZGF0
YUJ5dGUsICJ0aCBkYXRhIGJ5dGUgZnJvbSAiLCBzZWdtZW50TnVtYmVyLCAidGggRGF0YSBzZWdt
ZW50Iik7Ci0gICAgICAgICAgICBzZWdtZW50LT5ieXRlKGRhdGFCeXRlKSA9IGJ5dGU7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHsgfTsKLX0KLSAgICAKLWF1dG8gTW9kdWxlUGFyc2Vy
OjpwYXJzZUN1c3RvbSh1aW50MzJfdCBzZWN0aW9uTGVuZ3RoKSAtPiBQYXJ0aWFsUmVzdWx0Ci17
Ci0gICAgY29uc3QgdWludDMyX3QgY3VzdG9tU2VjdGlvblN0YXJ0T2Zmc2V0ID0gbV9vZmZzZXQ7
Ci0KLSAgICBDdXN0b21TZWN0aW9uIHNlY3Rpb247Ci0gICAgdWludDMyX3QgY3VzdG9tU2VjdGlv
bk51bWJlciA9IG1faW5mby0+Y3VzdG9tU2VjdGlvbnMuc2l6ZSgpICsgMTsKLSAgICB1aW50MzJf
dCBuYW1lTGVuOwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+Y3VzdG9tU2VjdGlv
bnMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGN1c3RvbVNlY3Rpb25OdW1iZXIpLCAiY2FuJ3QgYWxsb2Nh
dGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgY3VzdG9tU2VjdGlvbk51bWJlciwgInRoIGN1c3RvbSBz
ZWN0aW9uIik7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIobmFtZUxl
biksICJjYW4ndCBnZXQgIiwgY3VzdG9tU2VjdGlvbk51bWJlciwgInRoIGN1c3RvbSBzZWN0aW9u
J3MgbmFtZSBsZW5ndGgiKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFjb25zdW1lVVRGOFN0
cmluZyhzZWN0aW9uLm5hbWUsIG5hbWVMZW4pLCAibmFtZUxlbiBnZXQgIiwgY3VzdG9tU2VjdGlv
bk51bWJlciwgInRoIGN1c3RvbSBzZWN0aW9uJ3MgbmFtZSBvZiBsZW5ndGggIiwgbmFtZUxlbik7
Ci0KLSAgICB1aW50MzJfdCBwYXlsb2FkQnl0ZXMgPSBzZWN0aW9uTGVuZ3RoIC0gKG1fb2Zmc2V0
IC0gY3VzdG9tU2VjdGlvblN0YXJ0T2Zmc2V0KTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFz
ZWN0aW9uLnBheWxvYWQudHJ5UmVzZXJ2ZUNhcGFjaXR5KHBheWxvYWRCeXRlcyksICJjYW4ndCBh
bGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBjdXN0b21TZWN0aW9uTnVtYmVyLCAidGggY3Vz
dG9tIHNlY3Rpb24ncyAiLCBwYXlsb2FkQnl0ZXMsICIgYnl0ZXMiKTsKLSAgICBmb3IgKHVpbnQz
Ml90IGJ5dGVOdW1iZXIgPSAwOyBieXRlTnVtYmVyIDwgcGF5bG9hZEJ5dGVzOyArK2J5dGVOdW1i
ZXIpIHsKLSAgICAgICAgdWludDhfdCBieXRlOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFwYXJzZVVJbnQ4KGJ5dGUpLCAiY2FuJ3QgZ2V0ICIsIGJ5dGVOdW1iZXIsICJ0aCBkYXRhIGJ5
dGUgZnJvbSAiLCBjdXN0b21TZWN0aW9uTnVtYmVyLCAidGggY3VzdG9tIHNlY3Rpb24iKTsKLSAg
ICAgICAgc2VjdGlvbi5wYXlsb2FkLnVuY2hlY2tlZEFwcGVuZChieXRlKTsKLSAgICB9Ci0KLSAg
ICBOYW1lIG5hbWVOYW1lID0geyAnbicsICdhJywgJ20nLCAnZScgfTsKLSAgICBpZiAoc2VjdGlv
bi5uYW1lID09IG5hbWVOYW1lKSB7Ci0gICAgICAgIE5hbWVTZWN0aW9uUGFyc2VyIG5hbWVTZWN0
aW9uUGFyc2VyKHNlY3Rpb24ucGF5bG9hZC5iZWdpbigpLCBzZWN0aW9uLnBheWxvYWQuc2l6ZSgp
LCBtX2luZm8pOwotICAgICAgICBpZiAoYXV0byBuYW1lU2VjdGlvbiA9IG5hbWVTZWN0aW9uUGFy
c2VyLnBhcnNlKCkpCi0gICAgICAgICAgICBtX2luZm8tPm5hbWVTZWN0aW9uID0gV1RGTW92ZSgq
bmFtZVNlY3Rpb24pOwotICAgIH0KLQotICAgIG1faW5mby0+Y3VzdG9tU2VjdGlvbnMudW5jaGVj
a2VkQXBwZW5kKFdURk1vdmUoc2VjdGlvbikpOwotCi0gICAgcmV0dXJuIHsgfTsKLX0KLQogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaAppbmRleCBh
NjUxYmUxN2NlMjNiODVmYmI5N2JiYjY4NTcwM2IzOWI2NGI3MmM0Li5kMzNiNzc5NTMzNzNkYjI3
ZjE1MTk5ZDk4MDQwODBmMDkyOTZlZGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU1vZHVsZVBhcnNlci5oCkBAIC00NiwyMSArNDYsNyBAQCBjbGFzcyBNb2R1bGVQYXJz
ZXIgOiBwdWJsaWMgUGFyc2VyPHZvaWQ+IHsKICAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IHBhcnNlKCk7CiAKIHByaXZhdGU6Ci0KLSNkZWZpbmUgV0FTTV9TRUNUSU9OX0RFQ0xBUkVfUEFS
U0VSKE5BTUUsIElELCBERVNDUklQVElPTikgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gcGFyc2UgIyMgTkFNRSgpOwotICAgIEZPUl9FQUNIX0tOT1dOX1dBU01fU0VDVElPTihXQVNN
X1NFQ1RJT05fREVDTEFSRV9QQVJTRVIpCi0jdW5kZWYgV0FTTV9TRUNUSU9OX0RFQ0xBUkVfUEFS
U0VSCi0KLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUN1c3RvbSh1
aW50MzJfdCk7Ci0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VHbG9i
YWxUeXBlKEdsb2JhbCYpOwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBh
cnNlTWVtb3J5SGVscGVyKGJvb2wgaXNJbXBvcnQpOwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIHBhcnNlVGFibGVIZWxwZXIoYm9vbCBpc0ltcG9ydCk7Ci0gICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VSZXNpemFibGVMaW1pdHModWludDMyX3Qm
IGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+JiBtYXhpbXVtKTsKLSAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUluaXRFeHByKHVpbnQ4X3QmLCB1aW50NjRf
dCYsIFR5cGUmIGluaXRFeHByVHlwZSk7Ci0KICAgICBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IG1f
aW5mbzsKLSAgICB1aW50MzJfdCBtX21lbW9yeUNvdW50IHsgMCB9OwotICAgIHVpbnQzMl90IG1f
dGFibGVDb3VudCB7IDAgfTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTmFtZVNlY3Rpb24uaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21OYW1lU2VjdGlvbi5oCmluZGV4IDdjMDJmMmY0
MTk3NzA1YWM4YmVlZWY0NDE4OTkwZDI4ZWUzNGYwODQuLmZlNjNjZjU1NDczNjZmYzE3NDBjMWYw
YzcwYmE4MWJlNzUzNmE4OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21OYW1lU2VjdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21O
YW1lU2VjdGlvbi5oCkBAIC0zNiwxMSArMzYsMjAgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBXYXNtIHsKIAogc3RydWN0IE5hbWVTZWN0aW9uIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3Vu
dGVkPE5hbWVTZWN0aW9uPiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTmFtZVNlY3Rpb24p
OwotCiBwdWJsaWM6Ci0gICAgTmFtZVNlY3Rpb24oY29uc3Qgc3RkOjpvcHRpb25hbDxDU3RyaW5n
PiAmaGFzaCkKLSAgICAgICAgOiBtb2R1bGVIYXNoKGhhc2ggPyBoYXNoLT5sZW5ndGgoKSA6IDMp
CisgICAgTmFtZVNlY3Rpb24oKQorICAgIHsKKyAgICAgICAgc2V0SGFzaChzdGQ6Om51bGxvcHQp
OworICAgIH0KKworICAgIHN0YXRpYyBSZWY8TmFtZVNlY3Rpb24+IGNyZWF0ZSgpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBOYW1lU2VjdGlvbik7CisgICAgfQorCisgICAg
dm9pZCBzZXRIYXNoKGNvbnN0IHN0ZDo6b3B0aW9uYWw8Q1N0cmluZz4gJmhhc2gpCiAgICAgewor
ICAgICAgICBtb2R1bGVIYXNoID0gTmFtZShoYXNoID8gaGFzaC0+bGVuZ3RoKCkgOiAzKTsKICAg
ICAgICAgaWYgKGhhc2gpIHsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaGFz
aC0+bGVuZ3RoKCk7ICsraSkKICAgICAgICAgICAgICAgICBtb2R1bGVIYXNoW2ldID0gc3RhdGlj
X2Nhc3Q8dWludDhfdD4oKihoYXNoLT5kYXRhKCkgKyBpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTmFtZVNlY3Rpb25QYXJzZXIuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmNwcAppbmRleCA3MzM5NjIx
NWNmNThiYzUyNmIzNDhjYzBhODhjNzEzZDRkZWM1OTc3Li41ZWJkYzBjY2FlNDA3YTJiOWI5YTNi
OTFmNmVjYTU4MjVjMTJhMWVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTmFtZVNlY3Rpb25QYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21OYW1lU2VjdGlvblBhcnNlci5jcHAKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAogYXV0byBOYW1lU2VjdGlvblBhcnNlcjo6cGFyc2Uo
KSAtPiBSZXN1bHQKIHsKLSAgICBSZWZQdHI8TmFtZVNlY3Rpb24+IG5hbWVTZWN0aW9uKGFkb3B0
UmVmKCpuZXcgTmFtZVNlY3Rpb24obV9pbmZvLmhhc2gpKSk7CisgICAgUmVmPE5hbWVTZWN0aW9u
PiBuYW1lU2VjdGlvbiA9IE5hbWVTZWN0aW9uOjpjcmVhdGUoKTsKICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFuYW1lU2VjdGlvbi0+ZnVuY3Rpb25OYW1lcy50cnlSZXNlcnZlQ2FwYWNpdHkobV9p
bmZvLmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVt
b3J5IGZvciBmdW5jdGlvbiBuYW1lcyIpOwogICAgIG5hbWVTZWN0aW9uLT5mdW5jdGlvbk5hbWVz
LnJlc2l6ZShtX2luZm8uZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgpKTsKIApAQCAtOTYsNyArOTYs
NyBAQCBhdXRvIE5hbWVTZWN0aW9uUGFyc2VyOjpwYXJzZSgpIC0+IFJlc3VsdAogICAgICAgICB9
CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYocGF5bG9hZFN0YXJ0ICsgcGF5bG9hZExlbmd0
aCAhPSBtX29mZnNldCk7CiAgICAgfQotICAgIHJldHVybiBuYW1lU2VjdGlvbjsKKyAgICByZXR1
cm4gV1RGTW92ZShuYW1lU2VjdGlvbik7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNt
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTmFtZVNlY3Rpb25Q
YXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21OYW1lU2VjdGlvblBhcnNl
ci5oCmluZGV4IGI3YWYwZDliOTBhNmQ1MjZlOTJkNGQ4MjRmZWVkYjQ0ZDU5ODc2ODMuLmQ4ZTZh
ZTcxYjI2YjRiZWNjOGI4ODhiYmZkNWViMjc5ODVjNmQyMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21OYW1lU2VjdGlvblBhcnNlci5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21OYW1lU2VjdGlvblBhcnNlci5oCkBAIC0zMyw3ICszMyw3
IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKLWNsYXNzIE5hbWVTZWN0
aW9uUGFyc2VyIDogcHVibGljIFBhcnNlcjxSZWZQdHI8TmFtZVNlY3Rpb24+PiB7CitjbGFzcyBO
YW1lU2VjdGlvblBhcnNlciA6IHB1YmxpYyBQYXJzZXI8UmVmPE5hbWVTZWN0aW9uPj4gewogcHVi
bGljOgogICAgIE5hbWVTZWN0aW9uUGFyc2VyKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUJ1ZmZlciwg
c2l6ZV90IHNvdXJjZUxlbmd0aCwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8pCiAgICAg
ICAgIDogUGFyc2VyKHNvdXJjZUJ1ZmZlciwgc291cmNlTGVuZ3RoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCmluZGV4IDQ3ZGVhZDY0YWY4ZmQ1YzM2OTlkMmU4
ZjY0MGVkOGJlYjA0MjBjOWQuLjllMGM0YTU2NjZlNDRlMGVhY2MyMzEyYWJiYjc2NTQ1M2I4Nzlm
NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAKQEAgLTY5
LDIxICs2OSwxOCBAQCB2b2lkIE9NR1BsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQpCiB7CiAg
ICAgQVNTRVJUKG1fY29kZUJsb2NrLT5ydW5uYWJsZSgpKTsKICAgICBBU1NFUlQobV9jb2RlQmxv
Y2sucHRyKCkgPT0gbV9tb2R1bGUtPmNvZGVCbG9ja0Zvcihtb2RlKCkpKTsKLSAgICBjb25zdCBG
dW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkmIGxvY2F0aW9uID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+
ZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W21fZnVuY3Rpb25JbmRleF07Ci0gICAgY29uc3QgdWlu
dDhfdCogZnVuY3Rpb25TdGFydCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPnNvdXJjZS5kYXRhKCkg
KyBsb2NhdGlvbi5zdGFydDsKLSAgICBjb25zdCBzaXplX3QgZnVuY3Rpb25MZW5ndGggPSBsb2Nh
dGlvbi5lbmQgLSBsb2NhdGlvbi5zdGFydDsKLSAgICBBU1NFUlQoZnVuY3Rpb25TdGFydCArIGZ1
bmN0aW9uTGVuZ3RoIDw9IG1fbW9kdWxlSW5mb3JtYXRpb24tPnNvdXJjZS5lbmQoKSk7CisgICAg
Y29uc3QgRnVuY3Rpb25EYXRhJiBmdW5jdGlvbiA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0
aW9uc1ttX2Z1bmN0aW9uSW5kZXhdOwogCiAgICAgY29uc3QgdWludDMyX3QgZnVuY3Rpb25JbmRl
eFNwYWNlID0gbV9mdW5jdGlvbkluZGV4ICsgbV9tb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCku
aW1wb3J0RnVuY3Rpb25Db3VudCgpOwogICAgIEFTU0VSVChmdW5jdGlvbkluZGV4U3BhY2UgPCBt
X21vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCkpOwog
CiAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9u
LT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1ttX2Z1bmN0aW9uSW5kZXhdOwogICAg
IGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChz
aWduYXR1cmVJbmRleCk7Ci0gICAgQVNTRVJUKHZhbGlkYXRlRnVuY3Rpb24oZnVuY3Rpb25TdGFy
dCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSkp
OworICAgIEFTU0VSVCh2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9uLmRhdGEuZGF0YSgpLCBmdW5j
dGlvbi5kYXRhLnNpemUoKSwgc2lnbmF0dXJlLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpKSk7
CiAKICAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4gdW5saW5rZWRDYWxsczsKICAg
ICBDb21waWxhdGlvbkNvbnRleHQgY29udGV4dDsKLSAgICBhdXRvIHBhcnNlQW5kQ29tcGlsZVJl
c3VsdCA9IHBhcnNlQW5kQ29tcGlsZShjb250ZXh0LCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxl
bmd0aCwgc2lnbmF0dXJlLCB1bmxpbmtlZENhbGxzLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgp
LCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6T01HTW9kZSwgbV9mdW5jdGlvbkluZGV4KTsKKyAg
ICBhdXRvIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZShjb250ZXh0LCBm
dW5jdGlvbi5kYXRhLmRhdGEoKSwgZnVuY3Rpb24uZGF0YS5zaXplKCksIHNpZ25hdHVyZSwgdW5s
aW5rZWRDYWxscywgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlv
bk1vZGU6Ok9NR01vZGUsIG1fZnVuY3Rpb25JbmRleCk7CiAKICAgICBpZiAoVU5MSUtFTFkoIXBh
cnNlQW5kQ29tcGlsZVJlc3VsdCkpIHsKICAgICAgICAgZmFpbChob2xkTG9jayhtX2xvY2spLCBt
YWtlU3RyaW5nKHBhcnNlQW5kQ29tcGlsZVJlc3VsdC5lcnJvcigpLCAid2hlbiB0cnlpbmcgdG8g
dGllciB1cCAiLCBTdHJpbmc6Om51bWJlcihtX2Z1bmN0aW9uSW5kZXgpKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtUGFyc2VyLmgKaW5kZXggNjUxMDcwNWVhZjU3OGNlMzNlM2JkNzZi
MmJjODM4YWRkYTVmNWIwMC4uOWZjNGE0NTRjOWI3MjZmYTEzZTg0YTRiNDczZmVhZDgxMmJiOTlm
MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhcnNlci5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYXJzZXIuaApAQCAtNTgsNiArNTgs
MTAgQEAgY2xhc3MgUGFyc2VyIHsKICAgICB0eXBlZGVmIEV4cGVjdGVkPHZvaWQsIEVycm9yVHlw
ZT4gUGFydGlhbFJlc3VsdDsKICAgICB0eXBlZGVmIEV4cGVjdGVkPFN1Y2Nlc3NUeXBlLCBFcnJv
clR5cGU+IFJlc3VsdDsKIAorICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc291cmNlOyB9CisgICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc291
cmNlTGVuZ3RoOyB9CisgICAgc2l6ZV90IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0
OyB9CisKIHByb3RlY3RlZDoKICAgICBQYXJzZXIoY29uc3QgdWludDhfdCosIHNpemVfdCk7CiAK
QEAgLTgxLDE2ICs4NSwxMyBAQCBjbGFzcyBQYXJzZXIgewogICAgIGJvb2wgV0FSTl9VTlVTRURf
UkVUVVJOIHBhcnNlVmFsdWVUeXBlKFR5cGUmKTsKICAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVS
TiBwYXJzZUV4dGVybmFsS2luZChFeHRlcm5hbEtpbmQmKTsKIAotICAgIGNvbnN0IHVpbnQ4X3Qq
IHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9Ci0gICAgc2l6ZV90IGxlbmd0aCgp
IGNvbnN0IHsgcmV0dXJuIG1fc291cmNlTGVuZ3RoOyB9Ci0KICAgICBzaXplX3QgbV9vZmZzZXQg
PSAwOwogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIC4uLkFyZ3M+CiAgICAgTkVWRVJfSU5MSU5F
IFVuZXhwZWN0ZWRSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGZhaWwoQXJncy4uLiBhcmdzKSBj
b25zdAogICAgIHsKICAgICAgICAgdXNpbmcgbmFtZXNwYWNlIEZhaWx1cmVIZWxwZXI7IC8vIFNl
ZSBBREwgY29tbWVudCBpbiBuYW1lc3BhY2UgYWJvdmUuCi0gICAgICAgIHJldHVybiBVbmV4cGVj
dGVkUmVzdWx0KG1ha2VTdHJpbmcoIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0
IGJ5dGUgIl9zLCBTdHJpbmc6Om51bWJlcihtX29mZnNldCksICIgLyAiX3MsIFN0cmluZzo6bnVt
YmVyKG1fc291cmNlTGVuZ3RoKSwgIjogIl9zLCBtYWtlU3RyaW5nKGFyZ3MpLi4uKSk7CisgICAg
ICAgIHJldHVybiBVbmV4cGVjdGVkUmVzdWx0KG1ha2VTdHJpbmcoIldlYkFzc2VtYmx5Lk1vZHVs
ZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgIl9zLCBTdHJpbmc6Om51bWJlcihtX29mZnNldCksICI6
ICJfcywgbWFrZVN0cmluZyhhcmdzKS4uLikpOwogICAgIH0KICNkZWZpbmUgV0FTTV9QQVJTRVJf
RkFJTF9JRihjb25kaXRpb24sIC4uLikgZG8geyBcCiAgICAgaWYgKFVOTElLRUxZKGNvbmRpdGlv
bikpICAgICAgICAgICAgICAgICAgICAgXApAQCAtMjg1LDYgKzI4NiwxNCBAQCBBTFdBWVNfSU5M
SU5FIGJvb2wgUGFyc2VyPFN1Y2Nlc3NUeXBlPjo6cGFyc2VFeHRlcm5hbEtpbmQoRXh0ZXJuYWxL
aW5kJiByZXN1bHQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK0FMV0FZU19JTkxJTkUgSTMySW5p
dEV4cHIgbWFrZUkzMkluaXRFeHByKHVpbnQ4X3Qgb3Bjb2RlLCB1aW50MzJfdCBiaXRzKQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKG9wY29kZSA9PSBJMzJDb25zdCB8fCBvcGNvZGUgPT0gR2V0R2xv
YmFsKTsKKyAgICBpZiAob3Bjb2RlID09IEkzMkNvbnN0KQorICAgICAgICByZXR1cm4gSTMySW5p
dEV4cHI6OmNvbnN0VmFsdWUoYml0cyk7CisgICAgcmV0dXJuIEkzMkluaXRFeHByOjpnbG9iYWxJ
bXBvcnQoYml0cyk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKICNlbmRpZiAv
LyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5j
cHAKaW5kZXggYTM0ZGVlY2IxNmIxNDBiZWI1M2I4N2M2ZTJhNzAzOTgzNDkzMGMyYy4uOTk3NGVj
ZmU1NWJhZjI4OWVlYzU2NTA2NmExY2Q0OWFlMjNhODIwYSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21QbGFuLmNwcApAQCAtNTMsOCArNTMsNiBAQCBQbGFuOjpQbGFuKENvbnRleHQq
IGNvbnRleHQsIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4gaW5mbywgQ29tcGxldGlvblRhc2smJiB0
YXNrLAogICAgIDogbV9tb2R1bGVJbmZvcm1hdGlvbihXVEZNb3ZlKGluZm8pKQogICAgICwgbV9j
cmVhdGVFbWJlZGRlcldyYXBwZXIoV1RGTW92ZShjcmVhdGVFbWJlZGRlcldyYXBwZXIpKQogICAg
ICwgbV90aHJvd1dhc21FeGNlcHRpb24odGhyb3dXYXNtRXhjZXB0aW9uKQotICAgICwgbV9zb3Vy
Y2UobV9tb2R1bGVJbmZvcm1hdGlvbi0+c291cmNlLmRhdGEoKSkKLSAgICAsIG1fc291cmNlTGVu
Z3RoKG1fbW9kdWxlSW5mb3JtYXRpb24tPnNvdXJjZS5zaXplKCkpCiB7CiAgICAgbV9jb21wbGV0
aW9uVGFza3MuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGNvbnRleHQsIFdURk1vdmUodGFzaykpKTsK
IH0KQEAgLTY0LDEwICs2Miw4IEBAIFBsYW46OlBsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1v
ZHVsZUluZm9ybWF0aW9uPiBpbmZvLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCiB7CiB9CiAKLVBs
YW46OlBsYW4oQ29udGV4dCogY29udGV4dCwgY29uc3QgdWludDhfdCogc291cmNlLCBzaXplX3Qg
c291cmNlTGVuZ3RoLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCi0gICAgOiBtX21vZHVsZUluZm9y
bWF0aW9uKGFkb3B0UmVmKCpuZXcgTW9kdWxlSW5mb3JtYXRpb24oVmVjdG9yPHVpbnQ4X3Q+KCkp
KSkKLSAgICAsIG1fc291cmNlKHNvdXJjZSkKLSAgICAsIG1fc291cmNlTGVuZ3RoKHNvdXJjZUxl
bmd0aCkKK1BsYW46OlBsYW4oQ29udGV4dCogY29udGV4dCwgQ29tcGxldGlvblRhc2smJiB0YXNr
KQorICAgIDogbV9tb2R1bGVJbmZvcm1hdGlvbihNb2R1bGVJbmZvcm1hdGlvbjo6Y3JlYXRlKCkp
CiB7CiAgICAgbV9jb21wbGV0aW9uVGFza3MuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGNvbnRleHQs
IFdURk1vdmUodGFzaykpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21QbGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCmlu
ZGV4IDdhMDdiZmQzYTBiMDZlOTM0NDA5NTdkYjM2ZGU2ZGRkYWU2M2M2NGMuLjllYzY4ODY1ODEz
MzFiYWNjOWYwOGRkMjZmOWFhYmI0ZTliZDUzYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21QbGFuLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVBsYW4uaApAQCAtNTQsNyArNTQsNyBAQCBjbGFzcyBQbGFuIDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPFBsYW4+IHsKICAgICBQbGFuKENvbnRleHQqLCBSZWY8TW9kdWxlSW5mb3Jt
YXRpb24+LCBDb21wbGV0aW9uVGFzayYmKTsKIAogICAgIC8vIE5vdGU6IFRoaXMgY29uc3RydWN0
b3Igc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB5b3UgYXJlIG5vdCBhY3R1YWxseSBidWlsZGluZyBh
IG1vZHVsZSBlLmcuIHZhbGlkYXRpb24vZnVuY3Rpb24gdGVzdHMKLSAgICBKU19FWFBPUlRfUFJJ
VkFURSBQbGFuKENvbnRleHQqLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBDb21wbGV0aW9uVGFz
ayYmKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBQbGFuKENvbnRleHQqLCBDb21wbGV0aW9uVGFz
ayYmKTsKICAgICB2aXJ0dWFsIEpTX0VYUE9SVF9QUklWQVRFIH5QbGFuKCk7CiAKICAgICAvLyBJ
ZiB5b3UgZ3VhcmFudGVlIHRoZSBvcmRlcmluZyBoZXJlLCB5b3UgY2FuIHJlbHkgb24gRklGTyBv
ZiB0aGUKQEAgLTkwLDggKzkwLDYgQEAgY2xhc3MgUGxhbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVm
Q291bnRlZDxQbGFuPiB7CiAgICAgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyIG1fY3JlYXRlRW1iZWRk
ZXJXcmFwcGVyOwogICAgIFRocm93V2FzbUV4Y2VwdGlvbiBtX3Rocm93V2FzbUV4Y2VwdGlvbiB7
IG51bGxwdHIgfTsKIAotICAgIGNvbnN0IHVpbnQ4X3QqIG1fc291cmNlOwotICAgIGNvbnN0IHNp
emVfdCBtX3NvdXJjZUxlbmd0aDsKICAgICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7CiAgICAgTWVt
b3J5TW9kZSBtX21vZGUgeyBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZyB9OwogICAgIExvY2sg
bV9sb2NrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rp
b25QYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25QYXJz
ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjlhOWJhY2I2N2RlZDI1MDQ1MzVkOGMyZGU1YzVlZDgzM2RlZjE2
MDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2Vj
dGlvblBhcnNlci5jcHAKQEAgLTAsMCArMSw1NjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTggWXVzdWtlIFN1enVraSA8eXVzdWtlc3V6dWtpQHNsb3dzdGFydC5vcmc+LgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2FzbVNlY3Rpb25QYXJzZXIuaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKKworI2luY2x1ZGUgIklkZW50aWZpZXJJbmxpbmVzLmgiCisjaW5jbHVkZSAiV2FzbU1lbW9y
eUluZm9ybWF0aW9uLmgiCisjaW5jbHVkZSAiV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmgiCisjaW5j
bHVkZSAiV2FzbU9wcy5oIgorI2luY2x1ZGUgIldhc21TZWN0aW9ucy5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIFdhc20geworCithdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlVHlwZSgp
IC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1aW50MzJfdCBjb3VudDsKKworICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGNvdW50KSwgImNhbid0IGdldCBUeXBlIHNlY3Rp
b24ncyBjb3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoY291bnQgPiBtYXhUeXBlcywg
IlR5cGUgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgY291bnQsICIgbWF4aW11bSAiLCBt
YXhUeXBlcyk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT51c2VkU2lnbmF0dXJl
cy50cnlSZXNlcnZlQ2FwYWNpdHkoY291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9y
eSBmb3IgVHlwZSBzZWN0aW9uJ3MgIiwgY291bnQsICIgZW50cmllcyIpOworCisgICAgZm9yICh1
aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgaW50OF90IHR5cGU7Cisg
ICAgICAgIHVpbnQzMl90IGFyZ3VtZW50Q291bnQ7CisgICAgICAgIFZlY3RvcjxUeXBlPiBhcmd1
bWVudFR5cGVzOworCisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlSW50Nyh0eXBl
KSwgImNhbid0IGdldCAiLCBpLCAidGggVHlwZSdzIHR5cGUiKTsKKyAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRih0eXBlICE9IEZ1bmMsIGksICJ0aCBUeXBlIGlzIG5vbi1GdW5jICIsIHR5cGUp
OworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihhcmd1bWVudENv
dW50KSwgImNhbid0IGdldCAiLCBpLCAidGggVHlwZSdzIGFyZ3VtZW50IGNvdW50Iik7CisgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoYXJndW1lbnRDb3VudCA+IG1heEZ1bmN0aW9uUGFyYW1z
LCBpLCAidGggYXJndW1lbnQgY291bnQgaXMgdG9vIGJpZyAiLCBhcmd1bWVudENvdW50LCAiIG1h
eGltdW0gIiwgbWF4RnVuY3Rpb25QYXJhbXMpOworICAgICAgICBSZWZQdHI8U2lnbmF0dXJlPiBt
YXliZVNpZ25hdHVyZSA9IFNpZ25hdHVyZTo6dHJ5Q3JlYXRlKGFyZ3VtZW50Q291bnQpOworICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtYXliZVNpZ25hdHVyZSwgImNhbid0IGFsbG9jYXRl
IGVub3VnaCBtZW1vcnkgZm9yIFR5cGUgc2VjdGlvbidzICIsIGksICJ0aCBzaWduYXR1cmUiKTsK
KyAgICAgICAgUmVmPFNpZ25hdHVyZT4gc2lnbmF0dXJlID0gbWF5YmVTaWduYXR1cmUucmVsZWFz
ZU5vbk51bGwoKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJndW1lbnRD
b3VudDsgKytpKSB7CisgICAgICAgICAgICBUeXBlIGFyZ3VtZW50VHlwZTsKKyAgICAgICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFsdWVUeXBlKGFyZ3VtZW50VHlwZSksICJjYW4n
dCBnZXQgIiwgaSwgInRoIGFyZ3VtZW50IFR5cGUiKTsKKyAgICAgICAgICAgIHNpZ25hdHVyZS0+
YXJndW1lbnQoaSkgPSBhcmd1bWVudFR5cGU7CisgICAgICAgIH0KKworICAgICAgICB1aW50OF90
IHJldHVybkNvdW50OworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQx
KHJldHVybkNvdW50KSwgImNhbid0IGdldCAiLCBpLCAidGggVHlwZSdzIHJldHVybiBjb3VudCIp
OworICAgICAgICBUeXBlIHJldHVyblR5cGU7CisgICAgICAgIGlmIChyZXR1cm5Db3VudCkgewor
ICAgICAgICAgICAgVHlwZSB2YWx1ZTsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlVmFsdWVUeXBlKHZhbHVlKSwgImNhbid0IGdldCAiLCBpLCAidGggVHlwZSdzIHJldHVy
biB2YWx1ZSIpOworICAgICAgICAgICAgcmV0dXJuVHlwZSA9IHN0YXRpY19jYXN0PFR5cGU+KHZh
bHVlKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICByZXR1cm5UeXBlID0gVHlwZTo6Vm9p
ZDsKKyAgICAgICAgc2lnbmF0dXJlLT5yZXR1cm5UeXBlKCkgPSByZXR1cm5UeXBlOworCisgICAg
ICAgIHN0ZDo6cGFpcjxTaWduYXR1cmVJbmRleCwgUmVmPFNpZ25hdHVyZT4+IHJlc3VsdCA9IFNp
Z25hdHVyZUluZm9ybWF0aW9uOjphZG9wdChXVEZNb3ZlKHNpZ25hdHVyZSkpOworICAgICAgICBt
X2luZm8tPnVzZWRTaWduYXR1cmVzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKHJlc3VsdC5zZWNv
bmQpKTsKKyAgICB9CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBTZWN0aW9uUGFyc2VyOjpw
YXJzZUltcG9ydCgpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1aW50MzJfdCBpbXBvcnRDb3Vu
dDsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbXBvcnRDb3VudCks
ICJjYW4ndCBnZXQgSW1wb3J0IHNlY3Rpb24ncyBjb3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoaW1wb3J0Q291bnQgPiBtYXhJbXBvcnRzLCAiSW1wb3J0IHNlY3Rpb24ncyBjb3VudCBp
cyB0b28gYmlnICIsIGltcG9ydENvdW50LCAiIG1heGltdW0gIiwgbWF4SW1wb3J0cyk7CisgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5nbG9iYWxzLnRyeVJlc2VydmVDYXBhY2l0eShp
bXBvcnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBpbXBvcnRD
b3VudCwgIiBnbG9iYWxzIik7IC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBm
aXggdGhlIEZJWE1FcyBiZWxvdy4KKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmlt
cG9ydHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVu
b3VnaCBtZW1vcnkgZm9yICIsIGltcG9ydENvdW50LCAiIGltcG9ydHMiKTsgLy8gRklYTUUgdGhp
cyBvdmVyLWFsbG9jYXRlcyB3aGVuIHdlIGZpeCB0aGUgRklYTUVzIGJlbG93LgorICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnRy
eVJlc2VydmVDYXBhY2l0eShpbXBvcnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVt
b3J5IGZvciAiLCBpbXBvcnRDb3VudCwgIiBpbXBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlcyIpOyAv
LyBGSVhNRSB0aGlzIG92ZXItYWxsb2NhdGVzIHdoZW4gd2UgZml4IHRoZSBGSVhNRXMgYmVsb3cu
CisKKyAgICBmb3IgKHVpbnQzMl90IGltcG9ydE51bWJlciA9IDA7IGltcG9ydE51bWJlciA8IGlt
cG9ydENvdW50OyArK2ltcG9ydE51bWJlcikgeworICAgICAgICB1aW50MzJfdCBtb2R1bGVMZW47
CisgICAgICAgIHVpbnQzMl90IGZpZWxkTGVuOworICAgICAgICBOYW1lIG1vZHVsZVN0cmluZzsK
KyAgICAgICAgTmFtZSBmaWVsZFN0cmluZzsKKyAgICAgICAgRXh0ZXJuYWxLaW5kIGtpbmQ7Cisg
ICAgICAgIHVuc2lnbmVkIGtpbmRJbmRleCB7IDAgfTsKKworICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFwYXJzZVZhclVJbnQzMihtb2R1bGVMZW4pLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51
bWJlciwgInRoIEltcG9ydCdzIG1vZHVsZSBuYW1lIGxlbmd0aCIpOworICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFjb25zdW1lVVRGOFN0cmluZyhtb2R1bGVTdHJpbmcsIG1vZHVsZUxlbiks
ICJjYW4ndCBnZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0J3MgbW9kdWxlIG5hbWUgb2Yg
bGVuZ3RoICIsIG1vZHVsZUxlbik7CisKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFy
c2VWYXJVSW50MzIoZmllbGRMZW4pLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIElt
cG9ydCdzIGZpZWxkIG5hbWUgbGVuZ3RoIGluIG1vZHVsZSAnIiwgbW9kdWxlU3RyaW5nLCAiJyIp
OworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFjb25zdW1lVVRGOFN0cmluZyhmaWVsZFN0
cmluZywgZmllbGRMZW4pLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdz
IGZpZWxkIG5hbWUgb2YgbGVuZ3RoICIsIG1vZHVsZUxlbiwgIiBpbiBtb2R1bGUgJyIsIG1vZHVs
ZVN0cmluZywgIiciKTsKKworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUV4dGVy
bmFsS2luZChraW5kKSwgImNhbid0IGdldCAiLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQncyBr
aW5kIGluIG1vZHVsZSAnIiwgbW9kdWxlU3RyaW5nLCAiJyBmaWVsZCAnIiwgZmllbGRTdHJpbmcs
ICInIik7CisgICAgICAgIHN3aXRjaCAoa2luZCkgeworICAgICAgICBjYXNlIEV4dGVybmFsS2lu
ZDo6RnVuY3Rpb246IHsKKyAgICAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uU2lnbmF0dXJlSW5k
ZXg7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihmdW5j
dGlvblNpZ25hdHVyZUluZGV4KSwgImNhbid0IGdldCAiLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBv
cnQncyBmdW5jdGlvbiBzaWduYXR1cmUgaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIGZp
ZWxkICciLCBmaWVsZFN0cmluZywgIiciKTsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoZnVuY3Rpb25TaWduYXR1cmVJbmRleCA+PSBtX2luZm8tPnVzZWRTaWduYXR1cmVzLnNpemUo
KSwgImludmFsaWQgZnVuY3Rpb24gc2lnbmF0dXJlIGZvciAiLCBpbXBvcnROdW1iZXIsICJ0aCBJ
bXBvcnQsICIsIGZ1bmN0aW9uU2lnbmF0dXJlSW5kZXgsICIgaXMgb3V0IG9mIHJhbmdlIG9mICIs
IG1faW5mby0+dXNlZFNpZ25hdHVyZXMuc2l6ZSgpLCAiIGluIG1vZHVsZSAnIiwgbW9kdWxlU3Ry
aW5nLCAiJyBmaWVsZCAnIiwgZmllbGRTdHJpbmcsICInIik7CisgICAgICAgICAgICBraW5kSW5k
ZXggPSBtX2luZm8tPmltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7CisgICAg
ICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IFNpZ25hdHVyZUluZm9ybWF0
aW9uOjpnZXQobV9pbmZvLT51c2VkU2lnbmF0dXJlc1tmdW5jdGlvblNpZ25hdHVyZUluZGV4XSk7
CisgICAgICAgICAgICBtX2luZm8tPmltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy51bmNo
ZWNrZWRBcHBlbmQoc2lnbmF0dXJlSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBFeHRlcm5hbEtpbmQ6OlRhYmxlOiB7CisgICAgICAgICAgICBib29s
IGlzSW1wb3J0ID0gdHJ1ZTsKKyAgICAgICAgICAgIFBhcnRpYWxSZXN1bHQgcmVzdWx0ID0gcGFy
c2VUYWJsZUhlbHBlcihpc0ltcG9ydCk7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIXJlc3Vs
dCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFdURk1vdmUocmVzdWx0
LmVycm9yKCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
RXh0ZXJuYWxLaW5kOjpNZW1vcnk6IHsKKyAgICAgICAgICAgIGJvb2wgaXNJbXBvcnQgPSB0cnVl
OworICAgICAgICAgICAgUGFydGlhbFJlc3VsdCByZXN1bHQgPSBwYXJzZU1lbW9yeUhlbHBlcihp
c0ltcG9ydCk7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIXJlc3VsdCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFdURk1vdmUocmVzdWx0LmVycm9yKCkpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpH
bG9iYWw6IHsKKyAgICAgICAgICAgIEdsb2JhbCBnbG9iYWw7CisgICAgICAgICAgICBXQVNNX0ZB
SUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlR2xvYmFsVHlwZShnbG9iYWwpKTsKKyAgICAgICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoZ2xvYmFsLm11dGFiaWxpdHkgPT0gR2xvYmFsOjpNdXRhYmxl
LCAiTXV0YWJsZSBHbG9iYWxzIGFyZW4ndCBzdXBwb3J0ZWQiKTsKKworICAgICAgICAgICAga2lu
ZEluZGV4ID0gbV9pbmZvLT5nbG9iYWxzLnNpemUoKTsKKyAgICAgICAgICAgIG1faW5mby0+Z2xv
YmFscy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShnbG9iYWwpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBtX2luZm8tPmltcG9ydHMudW5jaGVj
a2VkQXBwZW5kKHsgV1RGTW92ZShtb2R1bGVTdHJpbmcpLCBXVEZNb3ZlKGZpZWxkU3RyaW5nKSwg
a2luZCwga2luZEluZGV4IH0pOworICAgIH0KKworICAgIG1faW5mby0+Zmlyc3RJbnRlcm5hbEds
b2JhbCA9IG1faW5mby0+Z2xvYmFscy5zaXplKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0
byBTZWN0aW9uUGFyc2VyOjpwYXJzZUZ1bmN0aW9uKCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IHVpbnQzMl90IGNvdW50OworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMy
KGNvdW50KSwgImNhbid0IGdldCBGdW5jdGlvbiBzZWN0aW9uJ3MgY291bnQiKTsKKyAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKGNvdW50ID4gbWF4RnVuY3Rpb25zLCAiRnVuY3Rpb24gc2VjdGlvbidz
IGNvdW50IGlzIHRvbyBiaWcgIiwgY291bnQsICIgbWF4aW11bSAiLCBtYXhGdW5jdGlvbnMpOwor
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVy
ZUluZGljZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGNvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3Vn
aCBtZW1vcnkgZm9yICIsIGNvdW50LCAiIEZ1bmN0aW9uIHNpZ25hdHVyZXMiKTsKKyAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmZ1bmN0aW9ucy50cnlSZXNlcnZlQ2FwYWNpdHkoY291
bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgY291bnQsICJGdW5jdGlv
biBsb2NhdGlvbnMiKTsKKworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsgKytp
KSB7CisgICAgICAgIHVpbnQzMl90IHR5cGVOdW1iZXI7CisgICAgICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIXBhcnNlVmFyVUludDMyKHR5cGVOdW1iZXIpLCAiY2FuJ3QgZ2V0ICIsIGksICJ0aCBG
dW5jdGlvbidzIHR5cGUgbnVtYmVyIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYodHlw
ZU51bWJlciA+PSBtX2luZm8tPnVzZWRTaWduYXR1cmVzLnNpemUoKSwgaSwgInRoIEZ1bmN0aW9u
IHR5cGUgbnVtYmVyIGlzIGludmFsaWQgIiwgdHlwZU51bWJlcik7CisKKyAgICAgICAgU2lnbmF0
dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KG1faW5m
by0+dXNlZFNpZ25hdHVyZXNbdHlwZU51bWJlcl0pOworICAgICAgICAvLyBUaGUgQ29kZSBzZWN0
aW9uIGZpeGVzIHVwIHN0YXJ0IGFuZCBlbmQuCisgICAgICAgIHNpemVfdCBzdGFydCA9IDA7Cisg
ICAgICAgIHNpemVfdCBlbmQgPSAwOworICAgICAgICBtX2luZm8tPmludGVybmFsRnVuY3Rpb25T
aWduYXR1cmVJbmRpY2VzLnVuY2hlY2tlZEFwcGVuZChzaWduYXR1cmVJbmRleCk7CisgICAgICAg
IG1faW5mby0+ZnVuY3Rpb25zLnVuY2hlY2tlZEFwcGVuZCh7IHN0YXJ0LCBlbmQsIFZlY3Rvcjx1
aW50OF90PigpIH0pOworICAgIH0KKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gU2VjdGlv
blBhcnNlcjo6cGFyc2VSZXNpemFibGVMaW1pdHModWludDMyX3QmIGluaXRpYWwsIHN0ZDo6b3B0
aW9uYWw8dWludDMyX3Q+JiBtYXhpbXVtKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgQVNTRVJU
KCFtYXhpbXVtKTsKKworICAgIHVpbnQ4X3QgZmxhZ3M7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RighcGFyc2VWYXJVSW50MShmbGFncyksICJjYW4ndCBwYXJzZSByZXNpemFibGUgbGltaXRzIGZs
YWdzIik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoaW5pdGlhbCks
ICJjYW4ndCBwYXJzZSByZXNpemFibGUgbGltaXRzIGluaXRpYWwgcGFnZSBjb3VudCIpOworCisg
ICAgaWYgKGZsYWdzKSB7CisgICAgICAgIHVpbnQzMl90IG1heGltdW1JbnQ7CisgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKG1heGltdW1JbnQpLCAiY2FuJ3QgcGFy
c2UgcmVzaXphYmxlIGxpbWl0cyBtYXhpbXVtIHBhZ2UgY291bnQiKTsKKyAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRihpbml0aWFsID4gbWF4aW11bUludCwgInJlc2l6YWJsZSBsaW1pdHMgaGFz
IGEgaW5pdGlhbCBwYWdlIGNvdW50IG9mICIsIGluaXRpYWwsICIgd2hpY2ggaXMgZ3JlYXRlciB0
aGFuIGl0cyBtYXhpbXVtICIsIG1heGltdW1JbnQpOworICAgICAgICBtYXhpbXVtID0gbWF4aW11
bUludDsKKyAgICB9CisKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIFNlY3Rpb25QYXJzZXI6
OnBhcnNlVGFibGVIZWxwZXIoYm9vbCBpc0ltcG9ydCkgLT4gUGFydGlhbFJlc3VsdAoreworICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYobV9pbmZvLT50YWJsZUNvdW50KCkgPiAwLCAiQ2Fubm90IGhh
dmUgbW9yZSB0aGFuIG9uZSBUYWJsZSBmb3Igbm93Iik7CisKKyAgICBpbnQ4X3QgdHlwZTsKKyAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUludDcodHlwZSksICJjYW4ndCBwYXJzZSBUYWJs
ZSB0eXBlIik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0eXBlICE9IFdhc206OkFueWZ1bmMs
ICJUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgIiwgdHlwZSk7CisKKyAgICB1aW50
MzJfdCBpbml0aWFsOworICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW07CisgICAg
UGFydGlhbFJlc3VsdCBsaW1pdHMgPSBwYXJzZVJlc2l6YWJsZUxpbWl0cyhpbml0aWFsLCBtYXhp
bXVtKTsKKyAgICBpZiAoVU5MSUtFTFkoIWxpbWl0cykpCisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChXVEZNb3ZlKGxpbWl0cy5lcnJvcigpKSk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9J
Rihpbml0aWFsID4gbWF4VGFibGVFbnRyaWVzLCAiVGFibGUncyBpbml0aWFsIHBhZ2UgY291bnQg
b2YgIiwgaW5pdGlhbCwgIiBpcyB0b28gYmlnLCBtYXhpbXVtICIsIG1heFRhYmxlRW50cmllcyk7
CisKKyAgICBBU1NFUlQoIW1heGltdW0gfHwgKm1heGltdW0gPj0gaW5pdGlhbCk7CisKKyAgICBt
X2luZm8tPnRhYmxlSW5mb3JtYXRpb24gPSBUYWJsZUluZm9ybWF0aW9uKGluaXRpYWwsIG1heGlt
dW0sIGlzSW1wb3J0KTsKKworICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gU2VjdGlvblBhcnNl
cjo6cGFyc2VUYWJsZSgpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1aW50MzJfdCBjb3VudDsK
KyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihjb3VudCksICJjYW4ndCBn
ZXQgVGFibGUncyBjb3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoY291bnQgPiAxLCAi
VGFibGUgY291bnQgb2YgIiwgY291bnQsICIgaXMgaW52YWxpZCwgYXQgbW9zdCAxIGlzIGFsbG93
ZWQgZm9yIG5vdyIpOworCisgICAgaWYgKCFjb3VudCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKwor
ICAgIGJvb2wgaXNJbXBvcnQgPSBmYWxzZTsKKyAgICBQYXJ0aWFsUmVzdWx0IHJlc3VsdCA9IHBh
cnNlVGFibGVIZWxwZXIoaXNJbXBvcnQpOworICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFdURk1vdmUocmVzdWx0LmVycm9yKCkpKTsKKwor
ICAgIHJldHVybiB7IH07Cit9CisKK2F1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VNZW1vcnlIZWxw
ZXIoYm9vbCBpc0ltcG9ydCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYobV9pbmZvLT5tZW1vcnlDb3VudCgpLCAidGhlcmUgY2FuIGF0IG1vc3QgYmUgb25lIE1l
bW9yeSBzZWN0aW9uIGZvciBub3ciKTsKKworICAgIFBhZ2VDb3VudCBpbml0aWFsUGFnZUNvdW50
OworICAgIFBhZ2VDb3VudCBtYXhpbXVtUGFnZUNvdW50OworICAgIHsKKyAgICAgICAgdWludDMy
X3QgaW5pdGlhbDsKKyAgICAgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bTsKKyAg
ICAgICAgUGFydGlhbFJlc3VsdCBsaW1pdHMgPSBwYXJzZVJlc2l6YWJsZUxpbWl0cyhpbml0aWFs
LCBtYXhpbXVtKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFsaW1pdHMpKQorICAgICAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKFdURk1vdmUobGltaXRzLmVycm9yKCkpKTsKKyAgICAgICAg
QVNTRVJUKCFtYXhpbXVtIHx8ICptYXhpbXVtID49IGluaXRpYWwpOworICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFQYWdlQ291bnQ6OmlzVmFsaWQoaW5pdGlhbCksICJNZW1vcnkncyBpbml0
aWFsIHBhZ2UgY291bnQgb2YgIiwgaW5pdGlhbCwgIiBpcyBpbnZhbGlkIik7CisKKyAgICAgICAg
aW5pdGlhbFBhZ2VDb3VudCA9IFBhZ2VDb3VudChpbml0aWFsKTsKKworICAgICAgICBpZiAobWF4
aW11bSkgeworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighUGFnZUNvdW50Ojppc1Zh
bGlkKCptYXhpbXVtKSwgIk1lbW9yeSdzIG1heGltdW0gcGFnZSBjb3VudCBvZiAiLCAqbWF4aW11
bSwgIiBpcyBpbnZhbGlkIik7CisgICAgICAgICAgICBtYXhpbXVtUGFnZUNvdW50ID0gUGFnZUNv
dW50KCptYXhpbXVtKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBBU1NFUlQoaW5pdGlhbFBhZ2VD
b3VudCk7CisgICAgQVNTRVJUKCFtYXhpbXVtUGFnZUNvdW50IHx8IG1heGltdW1QYWdlQ291bnQg
Pj0gaW5pdGlhbFBhZ2VDb3VudCk7CisKKyAgICBtX2luZm8tPm1lbW9yeSA9IE1lbW9yeUluZm9y
bWF0aW9uKGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1QYWdlQ291bnQsIGlzSW1wb3J0KTsKKyAg
ICByZXR1cm4geyB9OworfQorCithdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlTWVtb3J5KCkgLT4g
UGFydGlhbFJlc3VsdAoreworICAgIHVpbnQ4X3QgY291bnQ7CisgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VWYXJVSW50MShjb3VudCksICJjYW4ndCBwYXJzZSBNZW1vcnkgc2VjdGlvbidz
IGNvdW50Iik7CisKKyAgICBpZiAoIWNvdW50KQorICAgICAgICByZXR1cm4geyB9OworCisgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRihjb3VudCAhPSAxLCAiTWVtb3J5IHNlY3Rpb24gaGFzIG1vcmUg
dGhhbiBvbmUgbWVtb3J5LCBXZWJBc3NlbWJseSBjdXJyZW50bHkgb25seSBhbGxvd3MgemVybyBv
ciBvbmUiKTsKKworICAgIGJvb2wgaXNJbXBvcnQgPSBmYWxzZTsKKyAgICByZXR1cm4gcGFyc2VN
ZW1vcnlIZWxwZXIoaXNJbXBvcnQpOworfQorCithdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlR2xv
YmFsKCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHVpbnQzMl90IGdsb2JhbENvdW50OworICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGdsb2JhbENvdW50KSwgImNhbid0
IGdldCBHbG9iYWwgc2VjdGlvbidzIGNvdW50Iik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihn
bG9iYWxDb3VudCA+IG1heEdsb2JhbHMsICJHbG9iYWwgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBi
aWcgIiwgZ2xvYmFsQ291bnQsICIgbWF4aW11bSAiLCBtYXhHbG9iYWxzKTsKKyAgICBzaXplX3Qg
dG90YWxCeXRlcyA9IGdsb2JhbENvdW50ICsgbV9pbmZvLT5maXJzdEludGVybmFsR2xvYmFsOwor
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoKHN0YXRpY19jYXN0PHVpbnQzMl90Pih0b3RhbEJ5dGVz
KSA8IGdsb2JhbENvdW50KSB8fCAhbV9pbmZvLT5nbG9iYWxzLnRyeVJlc2VydmVDYXBhY2l0eSh0
b3RhbEJ5dGVzKSwgImNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgIiwgdG90YWxCeXRlcywgIiBn
bG9iYWxzIik7CisKKyAgICBmb3IgKHVpbnQzMl90IGdsb2JhbEluZGV4ID0gMDsgZ2xvYmFsSW5k
ZXggPCBnbG9iYWxDb3VudDsgKytnbG9iYWxJbmRleCkgeworICAgICAgICBHbG9iYWwgZ2xvYmFs
OworICAgICAgICB1aW50OF90IGluaXRPcGNvZGU7CisKKyAgICAgICAgV0FTTV9GQUlMX0lGX0hF
TFBFUl9GQUlMUyhwYXJzZUdsb2JhbFR5cGUoZ2xvYmFsKSk7CisgICAgICAgIFR5cGUgdHlwZUZv
ckluaXRPcGNvZGU7CisgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VJbml0
RXhwcihpbml0T3Bjb2RlLCBnbG9iYWwuaW5pdGlhbEJpdHNPckltcG9ydE51bWJlciwgdHlwZUZv
ckluaXRPcGNvZGUpKTsKKyAgICAgICAgaWYgKGluaXRPcGNvZGUgPT0gR2V0R2xvYmFsKQorICAg
ICAgICAgICAgZ2xvYmFsLmluaXRpYWxpemF0aW9uVHlwZSA9IEdsb2JhbDo6RnJvbUdsb2JhbElt
cG9ydDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZ2xvYmFsLmluaXRpYWxpemF0aW9uVHlw
ZSA9IEdsb2JhbDo6RnJvbUV4cHJlc3Npb247CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
dHlwZUZvckluaXRPcGNvZGUgIT0gZ2xvYmFsLnR5cGUsICJHbG9iYWwgaW5pdF9leHByIG9wY29k
ZSBvZiB0eXBlICIsIHR5cGVGb3JJbml0T3Bjb2RlLCAiIGRvZXNuJ3QgbWF0Y2ggZ2xvYmFsJ3Mg
dHlwZSAiLCBnbG9iYWwudHlwZSk7CisKKyAgICAgICAgbV9pbmZvLT5nbG9iYWxzLnVuY2hlY2tl
ZEFwcGVuZChXVEZNb3ZlKGdsb2JhbCkpOworICAgIH0KKworICAgIHJldHVybiB7IH07Cit9CisK
K2F1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VFeHBvcnQoKSAtPiBQYXJ0aWFsUmVzdWx0Cit7Cisg
ICAgdWludDMyX3QgZXhwb3J0Q291bnQ7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VW
YXJVSW50MzIoZXhwb3J0Q291bnQpLCAiY2FuJ3QgZ2V0IEV4cG9ydCBzZWN0aW9uJ3MgY291bnQi
KTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGV4cG9ydENvdW50ID4gbWF4RXhwb3J0cywgIkV4
cG9ydCBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBleHBvcnRDb3VudCwgIiBtYXhpbXVt
ICIsIG1heEV4cG9ydHMpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+ZXhwb3J0
cy50cnlSZXNlcnZlQ2FwYWNpdHkoZXhwb3J0Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdo
IG1lbW9yeSBmb3IgIiwgZXhwb3J0Q291bnQsICIgZXhwb3J0cyIpOworCisgICAgSGFzaFNldDxT
dHJpbmc+IGV4cG9ydE5hbWVzOworICAgIGZvciAodWludDMyX3QgZXhwb3J0TnVtYmVyID0gMDsg
ZXhwb3J0TnVtYmVyIDwgZXhwb3J0Q291bnQ7ICsrZXhwb3J0TnVtYmVyKSB7CisgICAgICAgIHVp
bnQzMl90IGZpZWxkTGVuOworICAgICAgICBOYW1lIGZpZWxkU3RyaW5nOworICAgICAgICBFeHRl
cm5hbEtpbmQga2luZDsKKyAgICAgICAgdW5zaWduZWQga2luZEluZGV4OworCisgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGZpZWxkTGVuKSwgImNhbid0IGdldCAi
LCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQncyBmaWVsZCBuYW1lIGxlbmd0aCIpOworICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFjb25zdW1lVVRGOFN0cmluZyhmaWVsZFN0cmluZywgZmll
bGRMZW4pLCAiY2FuJ3QgZ2V0ICIsIGV4cG9ydE51bWJlciwgInRoIEV4cG9ydCdzIGZpZWxkIG5h
bWUgb2YgbGVuZ3RoICIsIGZpZWxkTGVuKTsKKyAgICAgICAgU3RyaW5nIGZpZWxkTmFtZSA9IFN0
cmluZzo6ZnJvbVVURjgoZmllbGRTdHJpbmcpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KGV4cG9ydE5hbWVzLmNvbnRhaW5zKGZpZWxkTmFtZSksICJkdXBsaWNhdGUgZXhwb3J0OiAnIiwg
ZmllbGRTdHJpbmcsICInIik7CisgICAgICAgIGV4cG9ydE5hbWVzLmFkZChmaWVsZE5hbWUpOwor
CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlRXh0ZXJuYWxLaW5kKGtpbmQpLCAi
Y2FuJ3QgZ2V0ICIsIGV4cG9ydE51bWJlciwgInRoIEV4cG9ydCdzIGtpbmQsIG5hbWVkICciLCBm
aWVsZFN0cmluZywgIiciKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJV
SW50MzIoa2luZEluZGV4KSwgImNhbid0IGdldCAiLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQn
cyBraW5kIGluZGV4LCBuYW1lZCAnIiwgZmllbGRTdHJpbmcsICInIik7CisgICAgICAgIHN3aXRj
aCAoa2luZCkgeworICAgICAgICBjYXNlIEV4dGVybmFsS2luZDo6RnVuY3Rpb246IHsKKyAgICAg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoa2luZEluZGV4ID49IG1faW5mby0+ZnVuY3Rpb25J
bmRleFNwYWNlU2l6ZSgpLCBleHBvcnROdW1iZXIsICJ0aCBFeHBvcnQgaGFzIGludmFsaWQgZnVu
Y3Rpb24gbnVtYmVyICIsIGtpbmRJbmRleCwgIiBpdCBleGNlZWRzIHRoZSBmdW5jdGlvbiBpbmRl
eCBzcGFjZSAiLCBtX2luZm8tPmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSwgIiwgbmFtZWQgJyIs
IGZpZWxkU3RyaW5nLCAiJyIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBFeHRlcm5hbEtpbmQ6OlRhYmxlOiB7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKGtpbmRJbmRleCA+PSBtX2luZm8tPnRhYmxlQ291bnQoKSwgImNhbid0IGV4cG9ydCBU
YWJsZSAiLCBraW5kSW5kZXgsICIgdGhlcmUgYXJlICIsIG1faW5mby0+dGFibGVDb3VudCgpLCAi
IFRhYmxlcyIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBF
eHRlcm5hbEtpbmQ6Ok1lbW9yeTogeworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
bV9pbmZvLT5tZW1vcnksICJjYW4ndCBleHBvcnQgYSBub24tZXhpc3RlbnQgTWVtb3J5Iik7Cisg
ICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGtpbmRJbmRleCwgImNhbid0IGV4cG9ydCBN
ZW1vcnkgIiwga2luZEluZGV4LCAiIG9ubHkgb25lIFRhYmxlIGlzIGN1cnJlbnRseSBzdXBwb3J0
ZWQiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRXh0ZXJu
YWxLaW5kOjpHbG9iYWw6IHsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoa2luZElu
ZGV4ID49IG1faW5mby0+Z2xvYmFscy5zaXplKCksIGV4cG9ydE51bWJlciwgInRoIEV4cG9ydCBo
YXMgaW52YWxpZCBnbG9iYWwgbnVtYmVyICIsIGtpbmRJbmRleCwgIiBpdCBleGNlZWRzIHRoZSBn
bG9iYWxzIGNvdW50ICIsIG1faW5mby0+Z2xvYmFscy5zaXplKCksICIsIG5hbWVkICciLCBmaWVs
ZFN0cmluZywgIiciKTsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9pbmZvLT5n
bG9iYWxzW2tpbmRJbmRleF0ubXV0YWJpbGl0eSAhPSBHbG9iYWw6OkltbXV0YWJsZSwgZXhwb3J0
TnVtYmVyLCAidGggRXhwb3J0IGlzbid0IGltbXV0YWJsZSwgbmFtZWQgJyIsIGZpZWxkU3RyaW5n
LCAiJyIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIG1faW5mby0+ZXhwb3J0cy51bmNoZWNrZWRBcHBlbmQoeyBXVEZNb3ZlKGZpZWxkU3RyaW5n
KSwga2luZCwga2luZEluZGV4IH0pOworICAgIH0KKworICAgIHJldHVybiB7IH07Cit9CisKK2F1
dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VTdGFydCgpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICB1
aW50MzJfdCBzdGFydEZ1bmN0aW9uSW5kZXg7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFy
c2VWYXJVSW50MzIoc3RhcnRGdW5jdGlvbkluZGV4KSwgImNhbid0IGdldCBTdGFydCBpbmRleCIp
OworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoc3RhcnRGdW5jdGlvbkluZGV4ID49IG1faW5mby0+
ZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgpLCAiU3RhcnQgaW5kZXggIiwgc3RhcnRGdW5jdGlvbklu
ZGV4LCAiIGV4Y2VlZHMgZnVuY3Rpb24gaW5kZXggc3BhY2UgIiwgbV9pbmZvLT5mdW5jdGlvbklu
ZGV4U3BhY2VTaXplKCkpOworICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9p
bmZvLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlvbklu
ZGV4KTsKKyAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0
aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoc2lnbmF0
dXJlLmFyZ3VtZW50Q291bnQoKSwgIlN0YXJ0IGZ1bmN0aW9uIGNhbid0IGhhdmUgYXJndW1lbnRz
Iik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihzaWduYXR1cmUucmV0dXJuVHlwZSgpICE9IFZv
aWQsICJTdGFydCBmdW5jdGlvbiBjYW4ndCByZXR1cm4gYSB2YWx1ZSIpOworICAgIG1faW5mby0+
c3RhcnRGdW5jdGlvbkluZGV4U3BhY2UgPSBzdGFydEZ1bmN0aW9uSW5kZXg7CisgICAgcmV0dXJu
IHsgfTsKK30KKworYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZUVsZW1lbnQoKSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgdWludDMyX3QgZWxlbWVudENvdW50OworICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIXBhcnNlVmFyVUludDMyKGVsZW1lbnRDb3VudCksICJjYW4ndCBnZXQgRWxlbWVudCBz
ZWN0aW9uJ3MgY291bnQiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGVsZW1lbnRDb3VudCA+
IG1heFRhYmxlRW50cmllcywgIkVsZW1lbnQgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwg
ZWxlbWVudENvdW50LCAiIG1heGltdW0gIiwgbWF4VGFibGVFbnRyaWVzKTsKKyAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFtX2luZm8tPmVsZW1lbnRzLnRyeVJlc2VydmVDYXBhY2l0eShlbGVtZW50
Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiLCBlbGVtZW50Q291bnQsICIgRWxl
bWVudHMiKTsKKyAgICBmb3IgKHVuc2lnbmVkIGVsZW1lbnROdW0gPSAwOyBlbGVtZW50TnVtIDwg
ZWxlbWVudENvdW50OyArK2VsZW1lbnROdW0pIHsKKyAgICAgICAgdWludDMyX3QgdGFibGVJbmRl
eDsKKyAgICAgICAgdWludDY0X3QgaW5pdEV4cHJCaXRzOworICAgICAgICB1aW50OF90IGluaXRP
cGNvZGU7CisgICAgICAgIHVpbnQzMl90IGluZGV4Q291bnQ7CisKKyAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIodGFibGVJbmRleCksICJjYW4ndCBnZXQgIiwgZWxl
bWVudE51bSwgInRoIEVsZW1lbnQgdGFibGUgaW5kZXgiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRih0YWJsZUluZGV4ID49IG1faW5mby0+dGFibGVDb3VudCgpLCAiRWxlbWVudCBzZWN0
aW9uIGZvciBUYWJsZSAiLCB0YWJsZUluZGV4LCAiIGV4Y2VlZHMgYXZhaWxhYmxlIFRhYmxlICIs
IG1faW5mby0+dGFibGVDb3VudCgpKTsKKyAgICAgICAgVHlwZSBpbml0RXhwclR5cGU7CisgICAg
ICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VJbml0RXhwcihpbml0T3Bjb2RlLCBp
bml0RXhwckJpdHMsIGluaXRFeHByVHlwZSkpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KGluaXRFeHByVHlwZSAhPSBJMzIsICJFbGVtZW50IGluaXRfZXhwciBtdXN0IHByb2R1Y2UgYW4g
aTMyIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGluZGV4
Q291bnQpLCAiY2FuJ3QgZ2V0ICIsIGVsZW1lbnROdW0sICJ0aCBpbmRleCBjb3VudCBmb3IgRWxl
bWVudCBzZWN0aW9uIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoaW5kZXhDb3VudCA9
PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksICJFbGVtZW50IHNlY3Rpb24n
cyAiLCBlbGVtZW50TnVtLCAidGggaW5kZXggY291bnQgaXMgdG9vIGJpZyAiLCBpbmRleENvdW50
KTsKKworICAgICAgICBBU1NFUlQoISFtX2luZm8tPnRhYmxlSW5mb3JtYXRpb24pOworCisgICAg
ICAgIEVsZW1lbnQgZWxlbWVudChtYWtlSTMySW5pdEV4cHIoaW5pdE9wY29kZSwgaW5pdEV4cHJC
aXRzKSk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWVsZW1lbnQuZnVuY3Rpb25JbmRp
Y2VzLnRyeVJlc2VydmVDYXBhY2l0eShpbmRleENvdW50KSwgImNhbid0IGFsbG9jYXRlIG1lbW9y
eSBmb3IgIiwgaW5kZXhDb3VudCwgIiBFbGVtZW50IGluZGljZXMiKTsKKworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBpbmRleENvdW50OyArK2luZGV4KSB7CisgICAg
ICAgICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4OworICAgICAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighcGFyc2VWYXJVSW50MzIoZnVuY3Rpb25JbmRleCksICJjYW4ndCBnZXQgRWxlbWVu
dCBzZWN0aW9uJ3MgIiwgZWxlbWVudE51bSwgInRoIGVsZW1lbnQncyAiLCBpbmRleCwgInRoIGlu
ZGV4Iik7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGZ1bmN0aW9uSW5kZXggPj0g
bV9pbmZvLT5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCksICJFbGVtZW50IHNlY3Rpb24ncyAiLCBl
bGVtZW50TnVtLCAidGggZWxlbWVudCdzICIsIGluZGV4LCAidGggaW5kZXggaXMgIiwgZnVuY3Rp
b25JbmRleCwgIiB3aGljaCBleGNlZWRzIHRoZSBmdW5jdGlvbiBpbmRleCBzcGFjZSBzaXplIG9m
ICIsIG1faW5mby0+ZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgpKTsKKworICAgICAgICAgICAgZWxl
bWVudC5mdW5jdGlvbkluZGljZXMudW5jaGVja2VkQXBwZW5kKGZ1bmN0aW9uSW5kZXgpOworICAg
ICAgICB9CisKKyAgICAgICAgbV9pbmZvLT5lbGVtZW50cy51bmNoZWNrZWRBcHBlbmQoV1RGTW92
ZShlbGVtZW50KSk7CisgICAgfQorCisgICAgcmV0dXJuIHsgfTsKK30KKworLy8gVGhpcyBmdW5j
dGlvbiB3aWxsIGJlIGNoYW5nZWQgdG8gYmUgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQgb25j
ZSB3ZSBzd2l0Y2ggb3VyIHBhcnNpbmcgaW5mcmFzdHJ1Y3R1cmUgdG8gdGhlIHN0cmVhbWluZyBw
YXJzZXIuCithdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlQ29kZSgpIC0+IFBhcnRpYWxSZXN1bHQK
K3sKKyAgICB1aW50MzJfdCBjb3VudDsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZh
clVJbnQzMihjb3VudCksICJjYW4ndCBnZXQgQ29kZSBzZWN0aW9uJ3MgY291bnQiKTsKKyAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKGNvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+
OjptYXgoKSwgIkNvZGUgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgY291bnQpOworICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoY291bnQgIT0gbV9pbmZvLT5mdW5jdGlvbnMuc2l6ZSgpLCAi
Q29kZSBzZWN0aW9uIGNvdW50ICIsIGNvdW50LCAiIGV4Y2VlZHMgdGhlIGRlY2xhcmVkIG51bWJl
ciBvZiBmdW5jdGlvbnMgIiwgbV9pbmZvLT5mdW5jdGlvbnMuc2l6ZSgpKTsKKworICAgIGZvciAo
dWludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIHVpbnQzMl90IGZ1bmN0
aW9uU2l6ZTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZnVu
Y3Rpb25TaXplKSwgImNhbid0IGdldCAiLCBpLCAidGggQ29kZSBmdW5jdGlvbidzIHNpemUiKTsK
KyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvblNpemUgPiBsZW5ndGgoKSwgIkNv
ZGUgZnVuY3Rpb24ncyBzaXplICIsIGZ1bmN0aW9uU2l6ZSwgIiBleGNlZWRzIHRoZSBtb2R1bGUn
cyBzaXplICIsIGxlbmd0aCgpKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlv
blNpemUgPiBsZW5ndGgoKSAtIG1fb2Zmc2V0LCAiQ29kZSBmdW5jdGlvbidzIHNpemUgIiwgZnVu
Y3Rpb25TaXplLCAiIGV4Y2VlZHMgdGhlIG1vZHVsZSdzIHJlbWFpbmluZyBzaXplIiwgbGVuZ3Ro
KCkgLSBtX29mZnNldCk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25TaXpl
ID4gbWF4RnVuY3Rpb25TaXplLCAiQ29kZSBmdW5jdGlvbidzIHNpemUgIiwgZnVuY3Rpb25TaXpl
LCAiIGlzIHRvbyBiaWciKTsKKworICAgICAgICBWZWN0b3I8dWludDhfdD4gZGF0YShmdW5jdGlv
blNpemUpOworICAgICAgICBzdGQ6Om1lbWNweShkYXRhLmRhdGEoKSwgc291cmNlKCkgKyBtX29m
ZnNldCwgZnVuY3Rpb25TaXplKTsKKyAgICAgICAgbV9pbmZvLT5mdW5jdGlvbnNbaV0uc3RhcnQg
PSBtX29mZnNldEluU291cmNlICsgbV9vZmZzZXQ7CisgICAgICAgIG1faW5mby0+ZnVuY3Rpb25z
W2ldLmVuZCA9IG1fb2Zmc2V0SW5Tb3VyY2UgKyBtX29mZnNldCArIGZ1bmN0aW9uU2l6ZTsKKyAg
ICAgICAgbV9pbmZvLT5mdW5jdGlvbnNbaV0uZGF0YSA9IFdURk1vdmUoZGF0YSk7CisgICAgICAg
IG1fb2Zmc2V0ICs9IGZ1bmN0aW9uU2l6ZTsKKyAgICB9CisKKyAgICByZXR1cm4geyB9OworfQor
CithdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlSW5pdEV4cHIodWludDhfdCYgb3Bjb2RlLCB1aW50
NjRfdCYgYml0c09ySW1wb3J0TnVtYmVyLCBUeXBlJiByZXN1bHRUeXBlKSAtPiBQYXJ0aWFsUmVz
dWx0Cit7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VVSW50OChvcGNvZGUpLCAiY2Fu
J3QgZ2V0IGluaXRfZXhwcidzIG9wY29kZSIpOworCisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAg
ICBjYXNlIEkzMkNvbnN0OiB7CisgICAgICAgIGludDMyX3QgY29uc3RhbnQ7CisgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFySW50MzIoY29uc3RhbnQpLCAiY2FuJ3QgZ2V0IGNv
bnN0YW50IHZhbHVlIGZvciBpbml0X2V4cHIncyBpMzIuY29uc3QiKTsKKyAgICAgICAgYml0c09y
SW1wb3J0TnVtYmVyID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGNvbnN0YW50KTsKKyAgICAgICAg
cmVzdWx0VHlwZSA9IEkzMjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBJNjRD
b25zdDogeworICAgICAgICBpbnQ2NF90IGNvbnN0YW50OworICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFwYXJzZVZhckludDY0KGNvbnN0YW50KSwgImNhbid0IGdldCBjb25zdGFudCB2YWx1
ZSBmb3IgaW5pdF9leHByJ3MgaTY0LmNvbnN0Iik7CisgICAgICAgIGJpdHNPckltcG9ydE51bWJl
ciA9IGNvbnN0YW50OworICAgICAgICByZXN1bHRUeXBlID0gSTY0OworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBjYXNlIEYzMkNvbnN0OiB7CisgICAgICAgIHVpbnQzMl90IGNvbnN0YW50
OworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQzMihjb25zdGFudCksICJj
YW4ndCBnZXQgY29uc3RhbnQgdmFsdWUgZm9yIGluaXRfZXhwcidzIGYzMi5jb25zdCIpOworICAg
ICAgICBiaXRzT3JJbXBvcnROdW1iZXIgPSBjb25zdGFudDsKKyAgICAgICAgcmVzdWx0VHlwZSA9
IEYzMjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBGNjRDb25zdDogeworICAg
ICAgICB1aW50NjRfdCBjb25zdGFudDsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFy
c2VVSW50NjQoY29uc3RhbnQpLCAiY2FuJ3QgZ2V0IGNvbnN0YW50IHZhbHVlIGZvciBpbml0X2V4
cHIncyBmNjQuY29uc3QiKTsKKyAgICAgICAgYml0c09ySW1wb3J0TnVtYmVyID0gY29uc3RhbnQ7
CisgICAgICAgIHJlc3VsdFR5cGUgPSBGNjQ7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IGNhc2UgR2V0R2xvYmFsOiB7CisgICAgICAgIHVpbnQzMl90IGluZGV4OworICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbmRleCksICJjYW4ndCBnZXQgZ2V0X2ds
b2JhbCdzIGluZGV4Iik7CisKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbmRleCA+PSBt
X2luZm8tPmdsb2JhbHMuc2l6ZSgpLCAiZ2V0X2dsb2JhbCdzIGluZGV4ICIsIGluZGV4LCAiIGV4
Y2VlZHMgdGhlIG51bWJlciBvZiBnbG9iYWxzICIsIG1faW5mby0+Z2xvYmFscy5zaXplKCkpOwor
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluZGV4ID49IG1faW5mby0+Zmlyc3RJbnRlcm5h
bEdsb2JhbCwgImdldF9nbG9iYWwgaW1wb3J0IGtpbmQgaW5kZXggIiwgaW5kZXgsICIgZXhjZWVk
cyB0aGUgZmlyc3QgaW50ZXJuYWwgZ2xvYmFsICIsIG1faW5mby0+Zmlyc3RJbnRlcm5hbEdsb2Jh
bCk7CisKKyAgICAgICAgQVNTRVJUKG1faW5mby0+Z2xvYmFsc1tpbmRleF0ubXV0YWJpbGl0eSA9
PSBHbG9iYWw6OkltbXV0YWJsZSk7CisgICAgICAgIHJlc3VsdFR5cGUgPSBtX2luZm8tPmdsb2Jh
bHNbaW5kZXhdLnR5cGU7CisgICAgICAgIGJpdHNPckltcG9ydE51bWJlciA9IGluZGV4OworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBkZWZhdWx0OgorICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKHRydWUsICJ1bmtub3duIGluaXRfZXhwciBvcGNvZGUgIiwgb3Bjb2RlKTsKKyAgICB9
CisKKyAgICB1aW50OF90IGVuZE9wY29kZTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJz
ZVVJbnQ4KGVuZE9wY29kZSksICJjYW4ndCBnZXQgaW5pdF9leHByJ3MgZW5kIG9wY29kZSIpOwor
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZW5kT3Bjb2RlICE9IE9wVHlwZTo6RW5kLCAiaW5pdF9l
eHByIHNob3VsZCBlbmQgd2l0aCBlbmQsIGVuZGVkIHdpdGggIiwgZW5kT3Bjb2RlKTsKKworICAg
IHJldHVybiB7IH07Cit9CisKK2F1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VHbG9iYWxUeXBlKEds
b2JhbCYgZ2xvYmFsKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgdWludDhfdCBtdXRhYmlsaXR5
OworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFsdWVUeXBlKGdsb2JhbC50eXBlKSwg
ImNhbid0IGdldCBHbG9iYWwncyB2YWx1ZSB0eXBlIik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RighcGFyc2VWYXJVSW50MShtdXRhYmlsaXR5KSwgImNhbid0IGdldCBHbG9iYWwgdHlwZSdzIG11
dGFiaWxpdHkiKTsKKyAgICBnbG9iYWwubXV0YWJpbGl0eSA9IHN0YXRpY19jYXN0PEdsb2JhbDo6
TXV0YWJpbGl0eT4obXV0YWJpbGl0eSk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYXV0byBTZWN0
aW9uUGFyc2VyOjpwYXJzZURhdGEoKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgdWludDMyX3Qg
c2VnbWVudENvdW50OworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKHNl
Z21lbnRDb3VudCksICJjYW4ndCBnZXQgRGF0YSBzZWN0aW9uJ3MgY291bnQiKTsKKyAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKHNlZ21lbnRDb3VudCA+IG1heERhdGFTZWdtZW50cywgIkRhdGEgc2Vj
dGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgc2VnbWVudENvdW50LCAiIG1heGltdW0gIiwgbWF4
RGF0YVNlZ21lbnRzKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmRhdGEudHJ5
UmVzZXJ2ZUNhcGFjaXR5KHNlZ21lbnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVt
b3J5IGZvciBEYXRhIHNlY3Rpb24ncyAiLCBzZWdtZW50Q291bnQsICIgc2VnbWVudHMiKTsKKwor
ICAgIGZvciAodWludDMyX3Qgc2VnbWVudE51bWJlciA9IDA7IHNlZ21lbnROdW1iZXIgPCBzZWdt
ZW50Q291bnQ7ICsrc2VnbWVudE51bWJlcikgeworICAgICAgICB1aW50MzJfdCBtZW1vcnlJbmRl
eDsKKyAgICAgICAgdWludDY0X3QgaW5pdEV4cHJCaXRzOworICAgICAgICB1aW50OF90IGluaXRP
cGNvZGU7CisgICAgICAgIHVpbnQzMl90IGRhdGFCeXRlTGVuZ3RoOworCisgICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKG1lbW9yeUluZGV4KSwgImNhbid0IGdldCAi
LCBzZWdtZW50TnVtYmVyLCAidGggRGF0YSBzZWdtZW50J3MgaW5kZXgiKTsKKyAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRihtZW1vcnlJbmRleCA+PSBtX2luZm8tPm1lbW9yeUNvdW50KCksIHNl
Z21lbnROdW1iZXIsICJ0aCBEYXRhIHNlZ21lbnQgaGFzIGluZGV4ICIsIG1lbW9yeUluZGV4LCAi
IHdoaWNoIGV4Y2VlZHMgdGhlIG51bWJlciBvZiBNZW1vcmllcyAiLCBtX2luZm8tPm1lbW9yeUNv
dW50KCkpOworICAgICAgICBUeXBlIGluaXRFeHByVHlwZTsKKyAgICAgICAgV0FTTV9GQUlMX0lG
X0hFTFBFUl9GQUlMUyhwYXJzZUluaXRFeHByKGluaXRPcGNvZGUsIGluaXRFeHByQml0cywgaW5p
dEV4cHJUeXBlKSk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoaW5pdEV4cHJUeXBlICE9
IEkzMiwgc2VnbWVudE51bWJlciwgInRoIERhdGEgc2VnbWVudCdzIGluaXRfZXhwciBtdXN0IHBy
b2R1Y2UgYW4gaTMyIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUlu
dDMyKGRhdGFCeXRlTGVuZ3RoKSwgImNhbid0IGdldCAiLCBzZWdtZW50TnVtYmVyLCAidGggRGF0
YSBzZWdtZW50J3MgZGF0YSBieXRlIGxlbmd0aCIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKGRhdGFCeXRlTGVuZ3RoID4gbWF4TW9kdWxlU2l6ZSwgc2VnbWVudE51bWJlciwgInRoIERh
dGEgc2VnbWVudCdzIGRhdGEgYnl0ZSBsZW5ndGggaXMgdG9vIGJpZyAiLCBkYXRhQnl0ZUxlbmd0
aCwgIiBtYXhpbXVtICIsIG1heE1vZHVsZVNpemUpOworCisgICAgICAgIFNlZ21lbnQqIHNlZ21l
bnQgPSBTZWdtZW50OjpjcmVhdGUobWFrZUkzMkluaXRFeHByKGluaXRPcGNvZGUsIGluaXRFeHBy
Qml0cyksIGRhdGFCeXRlTGVuZ3RoKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighc2Vn
bWVudCwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIHNlZ21lbnROdW1iZXIs
ICJ0aCBEYXRhIHNlZ21lbnQgb2Ygc2l6ZSAiLCBkYXRhQnl0ZUxlbmd0aCk7CisgICAgICAgIG1f
aW5mby0+ZGF0YS51bmNoZWNrZWRBcHBlbmQoU2VnbWVudDo6YWRvcHRQdHIoc2VnbWVudCkpOwor
ICAgICAgICBmb3IgKHVpbnQzMl90IGRhdGFCeXRlID0gMDsgZGF0YUJ5dGUgPCBkYXRhQnl0ZUxl
bmd0aDsgKytkYXRhQnl0ZSkgeworICAgICAgICAgICAgdWludDhfdCBieXRlOworICAgICAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VVSW50OChieXRlKSwgImNhbid0IGdldCAiLCBk
YXRhQnl0ZSwgInRoIGRhdGEgYnl0ZSBmcm9tICIsIHNlZ21lbnROdW1iZXIsICJ0aCBEYXRhIHNl
Z21lbnQiKTsKKyAgICAgICAgICAgIHNlZ21lbnQtPmJ5dGUoZGF0YUJ5dGUpID0gYnl0ZTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4geyB9OworfQorCithdXRvIFNlY3Rpb25QYXJzZXI6
OnBhcnNlQ3VzdG9tKCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIEN1c3RvbVNlY3Rpb24gc2Vj
dGlvbjsKKyAgICB1aW50MzJfdCBjdXN0b21TZWN0aW9uTnVtYmVyID0gbV9pbmZvLT5jdXN0b21T
ZWN0aW9ucy5zaXplKCkgKyAxOworICAgIHVpbnQzMl90IG5hbWVMZW47CisgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighbV9pbmZvLT5jdXN0b21TZWN0aW9ucy50cnlSZXNlcnZlQ2FwYWNpdHkoY3Vz
dG9tU2VjdGlvbk51bWJlciksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBj
dXN0b21TZWN0aW9uTnVtYmVyLCAidGggY3VzdG9tIHNlY3Rpb24iKTsKKyAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihuYW1lTGVuKSwgImNhbid0IGdldCAiLCBjdXN0b21T
ZWN0aW9uTnVtYmVyLCAidGggY3VzdG9tIHNlY3Rpb24ncyBuYW1lIGxlbmd0aCIpOworICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVVVEY4U3RyaW5nKHNlY3Rpb24ubmFtZSwgbmFtZUxl
biksICJuYW1lTGVuIGdldCAiLCBjdXN0b21TZWN0aW9uTnVtYmVyLCAidGggY3VzdG9tIHNlY3Rp
b24ncyBuYW1lIG9mIGxlbmd0aCAiLCBuYW1lTGVuKTsKKworICAgIHVpbnQzMl90IHBheWxvYWRC
eXRlcyA9IGxlbmd0aCgpIC0gbV9vZmZzZXQ7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighc2Vj
dGlvbi5wYXlsb2FkLnRyeVJlc2VydmVDYXBhY2l0eShwYXlsb2FkQnl0ZXMpLCAiY2FuJ3QgYWxs
b2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgY3VzdG9tU2VjdGlvbk51bWJlciwgInRoIGN1c3Rv
bSBzZWN0aW9uJ3MgIiwgcGF5bG9hZEJ5dGVzLCAiIGJ5dGVzIik7CisgICAgZm9yICh1aW50MzJf
dCBieXRlTnVtYmVyID0gMDsgYnl0ZU51bWJlciA8IHBheWxvYWRCeXRlczsgKytieXRlTnVtYmVy
KSB7CisgICAgICAgIHVpbnQ4X3QgYnl0ZTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
cGFyc2VVSW50OChieXRlKSwgImNhbid0IGdldCAiLCBieXRlTnVtYmVyLCAidGggZGF0YSBieXRl
IGZyb20gIiwgY3VzdG9tU2VjdGlvbk51bWJlciwgInRoIGN1c3RvbSBzZWN0aW9uIik7CisgICAg
ICAgIHNlY3Rpb24ucGF5bG9hZC51bmNoZWNrZWRBcHBlbmQoYnl0ZSk7CisgICAgfQorCisgICAg
TmFtZSBuYW1lTmFtZSA9IHsgJ24nLCAnYScsICdtJywgJ2UnIH07CisgICAgaWYgKHNlY3Rpb24u
bmFtZSA9PSBuYW1lTmFtZSkgeworICAgICAgICBOYW1lU2VjdGlvblBhcnNlciBuYW1lU2VjdGlv
blBhcnNlcihzZWN0aW9uLnBheWxvYWQuYmVnaW4oKSwgc2VjdGlvbi5wYXlsb2FkLnNpemUoKSwg
bV9pbmZvKTsKKyAgICAgICAgaWYgKGF1dG8gbmFtZVNlY3Rpb24gPSBuYW1lU2VjdGlvblBhcnNl
ci5wYXJzZSgpKQorICAgICAgICAgICAgbV9pbmZvLT5uYW1lU2VjdGlvbiA9IFdURk1vdmUoKm5h
bWVTZWN0aW9uKTsKKyAgICB9CisKKyAgICBtX2luZm8tPmN1c3RvbVNlY3Rpb25zLnVuY2hlY2tl
ZEFwcGVuZChXVEZNb3ZlKHNlY3Rpb24pKTsKKworICAgIHJldHVybiB7IH07Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25QYXJzZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi43OGQwMjgzNmZjOWYzMmJjMmI3OGZiZjkwYWQyYzVkYTlmOTEyODNkCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25QYXJzZXIuaApA
QCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2UgU3V6dWtpIDx5
dXN1a2VzdXp1a2lAc2xvd3N0YXJ0Lm9yZz4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQor
CisjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgorI2luY2x1ZGUgIldhc21PcHMuaCIKKyNpbmNsdWRl
ICJXYXNtUGFyc2VyLmgiCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCitjbGFzcyBT
ZWN0aW9uUGFyc2VyIGZpbmFsIDogcHVibGljIFBhcnNlcjx2b2lkPiB7CitwdWJsaWM6CisgICAg
U2VjdGlvblBhcnNlcihjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG9m
ZnNldEluU291cmNlLCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbykKKyAgICAgICAgOiBQYXJzZXIo
ZGF0YSwgc2l6ZSkKKyAgICAgICAgLCBtX29mZnNldEluU291cmNlKG9mZnNldEluU291cmNlKQor
ICAgICAgICAsIG1faW5mbyhpbmZvKQorICAgIHsKKyAgICB9CisKKyNkZWZpbmUgV0FTTV9TRUNU
SU9OX0RFQ0xBUkVfUEFSU0VSKE5BTUUsIElELCBERVNDUklQVElPTikgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gcGFyc2UgIyMgTkFNRSgpOworICAgIEZPUl9FQUNIX0tOT1dOX1dB
U01fU0VDVElPTihXQVNNX1NFQ1RJT05fREVDTEFSRV9QQVJTRVIpCisjdW5kZWYgV0FTTV9TRUNU
SU9OX0RFQ0xBUkVfUEFSU0VSCisKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBwYXJzZUN1c3RvbSgpOworCitwcml2YXRlOgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSAuLi5B
cmdzPgorICAgIE5FVkVSX0lOTElORSBVbmV4cGVjdGVkUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBmYWlsKEFyZ3MuLi4gYXJncykgY29uc3QKKyAgICB7CisgICAgICAgIHVzaW5nIG5hbWVzcGFj
ZSBGYWlsdXJlSGVscGVyOyAvLyBTZWUgQURMIGNvbW1lbnQgaW4gbmFtZXNwYWNlIGFib3ZlLgor
ICAgICAgICByZXR1cm4gVW5leHBlY3RlZFJlc3VsdChtYWtlU3RyaW5nKCJXZWJBc3NlbWJseS5N
b2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlICJfcywgU3RyaW5nOjpudW1iZXIobV9vZmZzZXQg
KyBtX29mZnNldEluU291cmNlKSwgIjogIl9zLCBtYWtlU3RyaW5nKGFyZ3MpLi4uKSk7CisgICAg
fQorCisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VHbG9iYWxUeXBl
KEdsb2JhbCYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlTWVt
b3J5SGVscGVyKGJvb2wgaXNJbXBvcnQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIHBhcnNlVGFibGVIZWxwZXIoYm9vbCBpc0ltcG9ydCk7CisgICAgUGFydGlhbFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VSZXNpemFibGVMaW1pdHModWludDMyX3QmIGluaXRp
YWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+JiBtYXhpbXVtKTsKKyAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUluaXRFeHByKHVpbnQ4X3QmLCB1aW50NjRfdCYsIFR5
cGUmIGluaXRFeHByVHlwZSk7CisKKyAgICBzaXplX3QgbV9vZmZzZXRJblNvdXJjZTsKKyAgICBS
ZWY8TW9kdWxlSW5mb3JtYXRpb24+IG1faW5mbzsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU3RyZWFtaW5nUGFyc2VyLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg1
Y2I5NjFiNTY2YmExNmJmMmQxZTE5YWExMDAyMTU0ZmE5NDQ0ODIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU3RyZWFtaW5nUGFyc2VyLmNwcApAQCAt
MCwwICsxLDM5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2UgU3V6dWtpIDx5
dXN1a2VzdXp1a2lAc2xvd3N0YXJ0Lm9yZz4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXYXNtU3RyZWFt
aW5nUGFyc2VyLmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJXYXNt
TW9kdWxlUGFyc2VyLmgiCisjaW5jbHVkZSAiV2FzbVNlY3Rpb25QYXJzZXIuaCIKKyNpbmNsdWRl
IDx3dGYvVW5hbGlnbmVkQWNjZXNzLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2Fz
bSB7CisKK25hbWVzcGFjZSBXYXNtU3RyZWFtaW5nUGFyc2VySW50ZXJuYWwgeworc3RhdGljIGNv
bnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKK30KKworI2RlZmluZSBXQVNNX1NUUkVBTUlO
R19QQVJTRVJfRkFJTF9JRl9IRUxQRVJfRkFJTFMoaGVscGVyKSBcCisgICAgZG8geyBcCisgICAg
ICAgIGF1dG8gaGVscGVyUmVzdWx0ID0gaGVscGVyOyBcCisgICAgICAgIGlmIChVTkxJS0VMWSgh
aGVscGVyUmVzdWx0KSkgeyBcCisgICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IGhlbHBlclJl
c3VsdC5lcnJvcigpOyBcCisgICAgICAgICAgICByZXR1cm4gU3RhdGU6OkZhdGFsRXJyb3I7IFwK
KyAgICAgICAgfSBcCisgICAgfSB3aGlsZSAoMCkKKworQUxXQVlTX0lOTElORSBzdGQ6Om9wdGlv
bmFsPHVpbnQ4X3Q+IHBhcnNlVUludDcoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90JiBvZmZz
ZXQsIHNpemVfdCBzaXplKQoreworICAgIGlmIChvZmZzZXQgPj0gc2l6ZSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHVpbnQ4X3QgcmVzdWx0ID0gZGF0YVtvZmZzZXQrK107CisgICAgaWYg
KHJlc3VsdCA8IDB4ODApCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIC4uLkFyZ3M+CitORVZFUl9JTkxJTkUg
YXV0byBXQVJOX1VOVVNFRF9SRVRVUk4gU3RyZWFtaW5nUGFyc2VyOjpmYWlsKEFyZ3MuLi4gYXJn
cykgLT4gU3RhdGUKK3sKKyAgICB1c2luZyBuYW1lc3BhY2UgRmFpbHVyZUhlbHBlcjsgLy8gU2Vl
IEFETCBjb21tZW50IGluIG5hbWVzcGFjZSBhYm92ZS4KKyAgICBtX2Vycm9yTWVzc2FnZSA9IG1h
a2VTdHJpbmcoIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgIl9zLCBT
dHJpbmc6Om51bWJlcihtX29mZnNldCksICI6ICJfcywgbWFrZVN0cmluZyhhcmdzKS4uLik7Cisg
ICAgZGF0YUxvZ0xuSWYoV2FzbVN0cmVhbWluZ1BhcnNlckludGVybmFsOjp2ZXJib3NlLCBtX2Vy
cm9yTWVzc2FnZSk7CisgICAgcmV0dXJuIFN0YXRlOjpGYXRhbEVycm9yOworfQorCitTdHJlYW1p
bmdQYXJzZXI6OlN0cmVhbWluZ1BhcnNlcihNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbykKKyAgICA6
IG1faW5mbyhpbmZvKQoreworICAgIGRhdGFMb2dMbklmKFdhc21TdHJlYW1pbmdQYXJzZXJJbnRl
cm5hbDo6dmVyYm9zZSwgInN0YXJ0aW5nIHZhbGlkYXRpb24iKTsKK30KKworYXV0byBTdHJlYW1p
bmdQYXJzZXI6OnBhcnNlTW9kdWxlSGVhZGVyKFZlY3Rvcjx1aW50OF90PiYmIGRhdGEpIC0+IFN0
YXRlCit7CisgICAgQVNTRVJUKGRhdGEuc2l6ZSgpID09IG1vZHVsZUhlYWRlclNpemUpOworICAg
IGRhdGFMb2dMbklmKFdhc21TdHJlYW1pbmdQYXJzZXJJbnRlcm5hbDo6dmVyYm9zZSwgImhlYWRl
ciB2YWxpZGF0aW9uIik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihkYXRhWzBdICE9ICdcMCcg
fHwgZGF0YVsxXSAhPSAnYScgfHwgZGF0YVsyXSAhPSAncycgfHwgZGF0YVszXSAhPSAnbScsICJt
b2R1bGVzIGRvZXNuJ3Qgc3RhcnQgd2l0aCAnXFwwYXNtJyIpOworICAgIHVpbnQzMl90IHZlcnNp
b25OdW1iZXIgPSBXVEY6OnVuYWxpZ25lZExvYWQ8dWludDMyX3Q+KGRhdGEuZGF0YSgpICsgNCk7
CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih2ZXJzaW9uTnVtYmVyICE9IGV4cGVjdGVkVmVyc2lv
bk51bWJlciwgInVuZXhwZWN0ZWQgdmVyc2lvbiBudW1iZXIgIiwgdmVyc2lvbk51bWJlciwgIiBl
eHBlY3RlZCAiLCBleHBlY3RlZFZlcnNpb25OdW1iZXIpOworICAgIHJldHVybiBTdGF0ZTo6U2Vj
dGlvbklEOworfQorCithdXRvIFN0cmVhbWluZ1BhcnNlcjo6cGFyc2VTZWN0aW9uSUQoVmVjdG9y
PHVpbnQ4X3Q+JiYgZGF0YSkgLT4gU3RhdGUKK3sKKyAgICBBU1NFUlQoZGF0YS5zaXplKCkgPT0g
c2VjdGlvbklEU2l6ZSk7CisgICAgc2l6ZV90IG9mZnNldCA9IDA7CisgICAgYXV0byByZXN1bHQg
PSBwYXJzZVVJbnQ3KGRhdGEuZGF0YSgpLCBvZmZzZXQsIGRhdGEuc2l6ZSgpKTsKKyAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFyZXN1bHQsICJjYW4ndCBnZXQgc2VjdGlvbiBieXRlIik7CisKKyAg
ICBTZWN0aW9uIHNlY3Rpb24gPSBTZWN0aW9uOjpDdXN0b207CisgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighZGVjb2RlU2VjdGlvbigqcmVzdWx0LCBzZWN0aW9uKSwgImludmFsaWQgc2VjdGlvbiIp
OworICAgIEFTU0VSVChzZWN0aW9uICE9IFNlY3Rpb246OkJlZ2luKTsKKyAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCF2YWxpZGF0ZU9yZGVyKG1fcHJldmlvdXNLbm93blNlY3Rpb24sIHNlY3Rpb24p
LCAiaW52YWxpZCBzZWN0aW9uIG9yZGVyLCAiLCBtX3ByZXZpb3VzS25vd25TZWN0aW9uLCAiIGZv
bGxvd2VkIGJ5ICIsIHNlY3Rpb24pOworICAgIG1fc2VjdGlvbiA9IHNlY3Rpb247CisgICAgaWYg
KGlzS25vd25TZWN0aW9uKHNlY3Rpb24pKQorICAgICAgICBtX3ByZXZpb3VzS25vd25TZWN0aW9u
ID0gc2VjdGlvbjsKKyAgICByZXR1cm4gU3RhdGU6OlNlY3Rpb25TaXplOworfQorCithdXRvIFN0
cmVhbWluZ1BhcnNlcjo6cGFyc2VTZWN0aW9uU2l6ZSh1aW50MzJfdCBzZWN0aW9uTGVuZ3RoKSAt
PiBTdGF0ZQoreworICAgIG1fc2VjdGlvbkxlbmd0aCA9IHNlY3Rpb25MZW5ndGg7CisgICAgaWYg
KG1fc2VjdGlvbiA9PSBTZWN0aW9uOjpDb2RlKQorICAgICAgICByZXR1cm4gU3RhdGU6OkNvZGVT
ZWN0aW9uU2l6ZTsKKyAgICByZXR1cm4gU3RhdGU6OlNlY3Rpb25QYXlsb2FkOworfQorCithdXRv
IFN0cmVhbWluZ1BhcnNlcjo6cGFyc2VDb2RlU2VjdGlvblNpemUodWludDMyX3QgZnVuY3Rpb25D
b3VudCkgLT4gU3RhdGUKK3sKKyAgICBtX2Z1bmN0aW9uQ291bnQgPSBmdW5jdGlvbkNvdW50Owor
ICAgIG1fZnVuY3Rpb25JbmRleCA9IDA7CisgICAgbV9jb2RlT2Zmc2V0ID0gbV9vZmZzZXQ7CisK
KyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGZ1bmN0aW9uQ291bnQgPT0gc3RkOjpudW1lcmljX2xp
bWl0czx1aW50MzJfdD46Om1heCgpLCAiQ29kZSBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAi
LCBmdW5jdGlvbkNvdW50KTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGZ1bmN0aW9uQ291bnQg
IT0gbV9pbmZvLT5mdW5jdGlvbnMuc2l6ZSgpLCAiQ29kZSBzZWN0aW9uIGNvdW50ICIsIGZ1bmN0
aW9uQ291bnQsICIgZXhjZWVkcyB0aGUgZGVjbGFyZWQgbnVtYmVyIG9mIGZ1bmN0aW9ucyAiLCBt
X2luZm8tPmZ1bmN0aW9ucy5zaXplKCkpOworCisgICAgaWYgKG1fZnVuY3Rpb25JbmRleCA9PSBt
X2Z1bmN0aW9uQ291bnQpIHsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigobV9jb2RlT2Zm
c2V0ICsgbV9zZWN0aW9uTGVuZ3RoKSAhPSBtX25leHRPZmZzZXQsICJwYXJzaW5nIGVuZGVkIGJl
Zm9yZSB0aGUgZW5kIG9mICIsIG1fc2VjdGlvbiwgIiBzZWN0aW9uIik7CisgICAgICAgIHJldHVy
biBTdGF0ZTo6U2VjdGlvbklEOworICAgIH0KKyAgICByZXR1cm4gU3RhdGU6OkZ1bmN0aW9uU2l6
ZTsKK30KKworYXV0byBTdHJlYW1pbmdQYXJzZXI6OnBhcnNlRnVuY3Rpb25TaXplKHVpbnQzMl90
IGZ1bmN0aW9uU2l6ZSkgLT4gU3RhdGUKK3sKKyAgICBtX2Z1bmN0aW9uU2l6ZSA9IGZ1bmN0aW9u
U2l6ZTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGZ1bmN0aW9uU2l6ZSA+IG1heEZ1bmN0aW9u
U2l6ZSwgIkNvZGUgZnVuY3Rpb24ncyBzaXplICIsIGZ1bmN0aW9uU2l6ZSwgIiBpcyB0b28gYmln
Iik7CisgICAgcmV0dXJuIFN0YXRlOjpGdW5jdGlvblBheWxvYWQ7Cit9CisKK2F1dG8gU3RyZWFt
aW5nUGFyc2VyOjpwYXJzZUZ1bmN0aW9uUGF5bG9hZChWZWN0b3I8dWludDhfdD4mJiBkYXRhKSAt
PiBTdGF0ZQoreworICAgIGF1dG8mIGZ1bmN0aW9uID0gbV9pbmZvLT5mdW5jdGlvbnNbbV9mdW5j
dGlvbkluZGV4XTsKKyAgICBmdW5jdGlvbi5zdGFydCA9IG1fb2Zmc2V0OworICAgIGZ1bmN0aW9u
LmVuZCA9IG1fb2Zmc2V0ICsgbV9mdW5jdGlvblNpemU7CisgICAgZnVuY3Rpb24uZGF0YSA9IFdU
Rk1vdmUoZGF0YSk7CisgICAgZGF0YUxvZ0xuSWYoV2FzbVN0cmVhbWluZ1BhcnNlckludGVybmFs
Ojp2ZXJib3NlLCAiUHJvY2Vzc2luZyBmdW5jdGlvbiBzdGFydGluZyBhdDogIiwgZnVuY3Rpb24u
c3RhcnQsICIgYW5kIGVuZGluZyBhdDogIiwgZnVuY3Rpb24uZW5kKTsKKyAgICArK21fZnVuY3Rp
b25JbmRleDsKKyAgICBpZiAobV9mdW5jdGlvbkluZGV4ID09IG1fZnVuY3Rpb25Db3VudCkgewor
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKChtX2NvZGVPZmZzZXQgKyBtX3NlY3Rpb25MZW5n
dGgpICE9IChtX29mZnNldCArIG1fZnVuY3Rpb25TaXplKSwgInBhcnNpbmcgZW5kZWQgYmVmb3Jl
IHRoZSBlbmQgb2YgIiwgbV9zZWN0aW9uLCAiIHNlY3Rpb24iKTsKKyAgICAgICAgcmV0dXJuIFN0
YXRlOjpTZWN0aW9uSUQ7CisgICAgfQorICAgIHJldHVybiBTdGF0ZTo6RnVuY3Rpb25TaXplOwor
fQorCithdXRvIFN0cmVhbWluZ1BhcnNlcjo6cGFyc2VTZWN0aW9uUGF5bG9hZChWZWN0b3I8dWlu
dDhfdD4mJiBkYXRhKSAtPiBTdGF0ZQoreworICAgIFNlY3Rpb25QYXJzZXIgcGFyc2VyKGRhdGEu
ZGF0YSgpLCBkYXRhLnNpemUoKSwgbV9vZmZzZXQsIG1faW5mby5nZXQoKSk7CisgICAgc3dpdGNo
IChtX3NlY3Rpb24pIHsKKyNkZWZpbmUgV0FTTV9TRUNUSU9OX1BBUlNFKE5BTUUsIElELCBERVND
UklQVElPTikgXAorICAgIGNhc2UgU2VjdGlvbjo6TkFNRTogeyBcCisgICAgICAgIFdBU01fU1RS
RUFNSU5HX1BBUlNFUl9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZXIucGFyc2UgIyMgTkFNRSgp
KTsgXAorICAgICAgICBicmVhazsgXAorICAgIH0KKyAgICBGT1JfRUFDSF9LTk9XTl9XQVNNX1NF
Q1RJT04oV0FTTV9TRUNUSU9OX1BBUlNFKQorI3VuZGVmIFdBU01fU0VDVElPTl9QQVJTRQorCisg
ICAgY2FzZSBTZWN0aW9uOjpDdXN0b206IHsKKyAgICAgICAgV0FTTV9TVFJFQU1JTkdfUEFSU0VS
X0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlci5wYXJzZUN1c3RvbSgpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgY2FzZSBTZWN0aW9uOjpCZWdpbjogeworICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgfQorCisg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihwYXJzZXIubGVuZ3RoKCkgIT0gcGFyc2VyLm9mZnNldCgp
LCAicGFyc2luZyBlbmRlZCBiZWZvcmUgdGhlIGVuZCBvZiAiLCBtX3NlY3Rpb24sICIgc2VjdGlv
biIpOworCisgICAgcmV0dXJuIFN0YXRlOjpTZWN0aW9uSUQ7Cit9CisKK2F1dG8gU3RyZWFtaW5n
UGFyc2VyOjpjb25zdW1lKGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3QgYnl0ZXNTaXplLCBz
aXplX3QmIG9mZnNldEluQnl0ZXMsIHNpemVfdCByZXF1aXJlZFNpemUpIC0+IHN0ZDo6b3B0aW9u
YWw8VmVjdG9yPHVpbnQ4X3Q+PgoreworICAgIGlmIChtX3JlbWFpbmluZy5zaXplKCkgPT0gcmVx
dWlyZWRTaXplKSB7CisgICAgICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQgPSBXVEZNb3ZlKG1f
cmVtYWluaW5nKTsKKyAgICAgICAgbV9uZXh0T2Zmc2V0ICs9IHJlcXVpcmVkU2l6ZTsKKyAgICAg
ICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKKyAgICB9CisKKyAgICBpZiAobV9yZW1haW5pbmcu
c2l6ZSgpID4gcmVxdWlyZWRTaXplKSB7CisgICAgICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQo
cmVxdWlyZWRTaXplKTsKKyAgICAgICAgbWVtY3B5KHJlc3VsdC5kYXRhKCksIG1fcmVtYWluaW5n
LmRhdGEoKSwgcmVxdWlyZWRTaXplKTsKKyAgICAgICAgbV9yZW1haW5pbmcucmVtb3ZlKDAsIHJl
cXVpcmVkU2l6ZSk7CisgICAgICAgIG1fbmV4dE9mZnNldCArPSByZXF1aXJlZFNpemU7CisgICAg
ICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7CisgICAgfQorCisgICAgQVNTRVJUKG1fcmVtYWlu
aW5nLnNpemUoKSA8IHJlcXVpcmVkU2l6ZSk7CisgICAgc2l6ZV90IGJ5dGVzUmVtYWluaW5nU2l6
ZSA9IGJ5dGVzU2l6ZSAtIG9mZnNldEluQnl0ZXM7CisgICAgc2l6ZV90IHRvdGFsRGF0YVNpemUg
PSBtX3JlbWFpbmluZy5zaXplKCkgKyBieXRlc1JlbWFpbmluZ1NpemU7CisgICAgaWYgKHRvdGFs
RGF0YVNpemUgPCByZXF1aXJlZFNpemUpIHsKKyAgICAgICAgbV9yZW1haW5pbmcuYXBwZW5kKGJ5
dGVzICsgb2Zmc2V0SW5CeXRlcywgYnl0ZXNSZW1haW5pbmdTaXplKTsKKyAgICAgICAgb2Zmc2V0
SW5CeXRlcyA9IGJ5dGVzU2l6ZTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9
CisKKyAgICBzaXplX3QgdXNlZFNpemUgPSByZXF1aXJlZFNpemUgLSBtX3JlbWFpbmluZy5zaXpl
KCk7CisgICAgbV9yZW1haW5pbmcuYXBwZW5kKGJ5dGVzICsgb2Zmc2V0SW5CeXRlcywgdXNlZFNp
emUpOworICAgIG9mZnNldEluQnl0ZXMgKz0gdXNlZFNpemU7CisgICAgVmVjdG9yPHVpbnQ4X3Q+
IHJlc3VsdCA9IFdURk1vdmUobV9yZW1haW5pbmcpOworICAgIG1fbmV4dE9mZnNldCArPSByZXF1
aXJlZFNpemU7CisgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKK30KKworYXV0byBTdHJlYW1p
bmdQYXJzZXI6OmNvbnN1bWVWYXJVSW50MzIoY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBi
eXRlc1NpemUsIHNpemVfdCYgb2Zmc2V0SW5CeXRlcywgSXNFbmRPZlN0cmVhbSBpc0VuZE9mU3Ry
ZWFtKSAtPiBFeHBlY3RlZDx1aW50MzJfdCwgU3RhdGU+Cit7CisgICAgY29uc3RleHByIHNpemVf
dCBtYXhTaXplID0gV1RGOjpMRUJEZWNvZGVyOjptYXhCeXRlTGVuZ3RoPHVpbnQzMl90PigpOwor
ICAgIHNpemVfdCBieXRlc1JlbWFpbmluZ1NpemUgPSBieXRlc1NpemUgLSBvZmZzZXRJbkJ5dGVz
OworICAgIHNpemVfdCB0b3RhbERhdGFTaXplID0gbV9yZW1haW5pbmcuc2l6ZSgpICsgYnl0ZXNS
ZW1haW5pbmdTaXplOworICAgIGlmIChtX3JlbWFpbmluZy5zaXplKCkgPj0gbWF4U2l6ZSkgewor
ICAgICAgICAvLyBEbyBub3RoaW5nLgorICAgIH0gZWxzZSBpZiAodG90YWxEYXRhU2l6ZSA+PSBt
YXhTaXplKSB7CisgICAgICAgIHNpemVfdCB1c2VkU2l6ZSA9IG1heFNpemUgLSBtX3JlbWFpbmlu
Zy5zaXplKCk7CisgICAgICAgIG1fcmVtYWluaW5nLmFwcGVuZChieXRlcyArIG9mZnNldEluQnl0
ZXMsIHVzZWRTaXplKTsKKyAgICAgICAgb2Zmc2V0SW5CeXRlcyArPSB1c2VkU2l6ZTsKKyAgICB9
IGVsc2UgeworICAgICAgICBtX3JlbWFpbmluZy5hcHBlbmQoYnl0ZXMgKyBvZmZzZXRJbkJ5dGVz
LCBieXRlc1JlbWFpbmluZ1NpemUpOworICAgICAgICBvZmZzZXRJbkJ5dGVzICs9IGJ5dGVzUmVt
YWluaW5nU2l6ZTsKKyAgICAgICAgLy8gSWYgdGhlIGdpdmVuIGJ5dGVzIGFyZSB0aGUgZW5kIG9m
IHRoZSBzdHJlYW0sIHdlIHRyeSB0byBwYXJzZSBWYXJVSW50MzIKKyAgICAgICAgLy8gd2l0aCB0
aGUgY3VycmVudCByZW1haW5pbmcgZGF0YSBzaW5jZSBWYXJVSW50MzIgbWF5IG5vdCByZXF1aXJl
IGBtYXhTaXplYC4KKyAgICAgICAgaWYgKGlzRW5kT2ZTdHJlYW0gPT0gSXNFbmRPZlN0cmVhbTo6
Tm8pCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQobV9zdGF0ZSk7CisgICAgfQor
CisgICAgc2l6ZV90IG9mZnNldCA9IDA7CisgICAgdWludDMyX3QgcmVzdWx0ID0gMDsKKyAgICBp
ZiAoIVdURjo6TEVCRGVjb2Rlcjo6ZGVjb2RlVUludDMyKG1fcmVtYWluaW5nLmRhdGEoKSwgbV9y
ZW1haW5pbmcuc2l6ZSgpLCBvZmZzZXQsIHJlc3VsdCkpCisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChTdGF0ZTo6RmF0YWxFcnJvcik7CisgICAgc2l6ZV90IGNvbnN1bWVkU2l6ZSA9IG9m
ZnNldDsKKyAgICBtX3JlbWFpbmluZy5yZW1vdmUoMCwgY29uc3VtZWRTaXplKTsKKyAgICBtX25l
eHRPZmZzZXQgKz0gY29uc3VtZWRTaXplOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2F1dG8g
U3RyZWFtaW5nUGFyc2VyOjphZGRCeXRlcyhjb25zdCB1aW50OF90KiBieXRlcywgc2l6ZV90IGJ5
dGVzU2l6ZSwgSXNFbmRPZlN0cmVhbSBpc0VuZE9mU3RyZWFtKSAtPiBTdGF0ZQoreworICAgIGlm
IChtX3N0YXRlID09IFN0YXRlOjpGYXRhbEVycm9yKQorICAgICAgICByZXR1cm4gbV9zdGF0ZTsK
KworICAgIG1fdG90YWxTaXplICs9IGJ5dGVzU2l6ZTsKKyAgICBpZiAoVU5MSUtFTFkobV90b3Rh
bFNpemUuaGFzT3ZlcmZsb3dlZCgpIHx8IG1fdG90YWxTaXplLnVuc2FmZUdldCgpID4gbWF4TW9k
dWxlU2l6ZSkpIHsKKyAgICAgICAgbV9zdGF0ZSA9IGZhaWwoIm1vZHVsZSBzaXplIGlzIHRvbyBs
YXJnZSwgbWF4aW11bSAiLCBtYXhNb2R1bGVTaXplKTsKKyAgICAgICAgcmV0dXJuIG1fc3RhdGU7
CisgICAgfQorCisgICAgaWYgKE9wdGlvbnM6OnVzZUVhZ2VyV2ViQXNzZW1ibHlNb2R1bGVIYXNo
aW5nKCkpCisgICAgICAgIG1faGFzaGVyLmFkZEJ5dGVzKGJ5dGVzLCBieXRlc1NpemUpOworCisg
ICAgc2l6ZV90IG9mZnNldEluQnl0ZXMgPSAwOworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAg
IHN3aXRjaCAobV9zdGF0ZSkgeworICAgICAgICBjYXNlIFN0YXRlOjpNb2R1bGVIZWFkZXI6IHsK
KyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gY29uc3VtZShieXRlcywgYnl0ZXNTaXplLCBvZmZz
ZXRJbkJ5dGVzLCBtb2R1bGVIZWFkZXJTaXplKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KQor
ICAgICAgICAgICAgICAgIHJldHVybiBtX3N0YXRlOworICAgICAgICAgICAgbV9zdGF0ZSA9IHBh
cnNlTW9kdWxlSGVhZGVyKFdURk1vdmUoKnJlc3VsdCkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKworICAgICAgICBjYXNlIFN0YXRlOjpTZWN0aW9uSUQ6IHsKKyAgICAgICAgICAg
IGF1dG8gcmVzdWx0ID0gY29uc3VtZShieXRlcywgYnl0ZXNTaXplLCBvZmZzZXRJbkJ5dGVzLCBz
ZWN0aW9uSURTaXplKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgICAg
IHJldHVybiBtX3N0YXRlOworICAgICAgICAgICAgbV9zdGF0ZSA9IHBhcnNlU2VjdGlvbklEKFdU
Rk1vdmUoKnJlc3VsdCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAg
ICBjYXNlIFN0YXRlOjpTZWN0aW9uU2l6ZTogeworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBj
b25zdW1lVmFyVUludDMyKGJ5dGVzLCBieXRlc1NpemUsIG9mZnNldEluQnl0ZXMsIGlzRW5kT2ZT
dHJlYW0pOworICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgICAgICAgICBpZiAo
cmVzdWx0LmVycm9yKCkgPT0gU3RhdGU6OkZhdGFsRXJyb3IpCisgICAgICAgICAgICAgICAgICAg
IG1fc3RhdGUgPSBmYWlsT25TdGF0ZShtX3N0YXRlKTsKKyAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSByZXN1bHQuZXJyb3IoKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbV9zdGF0ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fc3RhdGUg
PSBwYXJzZVNlY3Rpb25TaXplKCpyZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBjYXNlIFN0YXRlOjpTZWN0aW9uUGF5bG9hZDogeworICAgICAgICAgICAg
YXV0byByZXN1bHQgPSBjb25zdW1lKGJ5dGVzLCBieXRlc1NpemUsIG9mZnNldEluQnl0ZXMsIG1f
c2VjdGlvbkxlbmd0aCk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbV9zdGF0ZTsKKyAgICAgICAgICAgIG1fc3RhdGUgPSBwYXJzZVNlY3Rpb25QYXls
b2FkKFdURk1vdmUoKnJlc3VsdCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICBjYXNlIFN0YXRlOjpDb2RlU2VjdGlvblNpemU6IHsKKyAgICAgICAgICAgIGF1dG8g
cmVzdWx0ID0gY29uc3VtZVZhclVJbnQzMihieXRlcywgYnl0ZXNTaXplLCBvZmZzZXRJbkJ5dGVz
LCBpc0VuZE9mU3RyZWFtKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgICAg
ICAgICAgaWYgKHJlc3VsdC5lcnJvcigpID09IFN0YXRlOjpGYXRhbEVycm9yKQorICAgICAgICAg
ICAgICAgICAgICBtX3N0YXRlID0gZmFpbE9uU3RhdGUobV9zdGF0ZSk7CisgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gcmVzdWx0LmVycm9yKCk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIG1fc3RhdGU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBtX3N0YXRlID0gcGFyc2VDb2RlU2VjdGlvblNpemUoKnJlc3VsdCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgU3RhdGU6OkZ1bmN0aW9uU2l6ZTogewor
ICAgICAgICAgICAgYXV0byByZXN1bHQgPSBjb25zdW1lVmFyVUludDMyKGJ5dGVzLCBieXRlc1Np
emUsIG9mZnNldEluQnl0ZXMsIGlzRW5kT2ZTdHJlYW0pOworICAgICAgICAgICAgaWYgKCFyZXN1
bHQpIHsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmVycm9yKCkgPT0gU3RhdGU6OkZhdGFs
RXJyb3IpCisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBmYWlsT25TdGF0ZShtX3N0YXRl
KTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBy
ZXN1bHQuZXJyb3IoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9zdGF0ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG1fc3RhdGUgPSBwYXJzZUZ1bmN0aW9uU2l6ZSgqcmVzdWx0KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBTdGF0ZTo6RnVu
Y3Rpb25QYXlsb2FkOiB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGNvbnN1bWUoYnl0ZXMs
IGJ5dGVzU2l6ZSwgb2Zmc2V0SW5CeXRlcywgbV9mdW5jdGlvblNpemUpOworICAgICAgICAgICAg
aWYgKCFyZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fc3RhdGU7CisgICAgICAgICAg
ICBtX3N0YXRlID0gcGFyc2VGdW5jdGlvblBheWxvYWQoV1RGTW92ZSgqcmVzdWx0KSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgU3RhdGU6OkZpbmlzaGVk
OgorICAgICAgICBjYXNlIFN0YXRlOjpGYXRhbEVycm9yOgorICAgICAgICAgICAgcmV0dXJuIG1f
c3RhdGU7CisgICAgICAgIH0KKworICAgICAgICBtX29mZnNldCA9IG1fbmV4dE9mZnNldDsKKyAg
ICB9Cit9CisKK2F1dG8gU3RyZWFtaW5nUGFyc2VyOjpmYWlsT25TdGF0ZShTdGF0ZSkgLT4gU3Rh
dGUKK3sKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIFN0YXRlOjpNb2R1bGVIZWFk
ZXI6CisgICAgICAgIHJldHVybiBmYWlsKCJleHBlY3RlZCBhIG1vZHVsZSBvZiBhdCBsZWFzdCAi
LCBtb2R1bGVIZWFkZXJTaXplLCAiIGJ5dGVzIik7CisgICAgY2FzZSBTdGF0ZTo6U2VjdGlvbklE
OgorICAgICAgICByZXR1cm4gZmFpbCgiY2FuJ3QgZ2V0IHNlY3Rpb24gYnl0ZSIpOworICAgIGNh
c2UgU3RhdGU6OlNlY3Rpb25TaXplOgorICAgICAgICByZXR1cm4gZmFpbCgiY2FuJ3QgZ2V0ICIs
IG1fc2VjdGlvbiwgIiBzZWN0aW9uJ3MgbGVuZ3RoIik7CisgICAgY2FzZSBTdGF0ZTo6U2VjdGlv
blBheWxvYWQ6CisgICAgICAgIHJldHVybiBmYWlsKG1fc2VjdGlvbiwgIiBzZWN0aW9uIG9mIHNp
emUgIiwgbV9zZWN0aW9uTGVuZ3RoLCAiIHdvdWxkIG92ZXJmbG93IE1vZHVsZSdzIHNpemUiKTsK
KyAgICBjYXNlIFN0YXRlOjpDb2RlU2VjdGlvblNpemU6CisgICAgICAgIHJldHVybiBmYWlsKCJj
YW4ndCBnZXQgQ29kZSBzZWN0aW9uJ3MgY291bnQiKTsKKyAgICBjYXNlIFN0YXRlOjpGdW5jdGlv
blNpemU6CisgICAgICAgIHJldHVybiBmYWlsKCJjYW4ndCBnZXQgIiwgbV9mdW5jdGlvbkluZGV4
LCAidGggQ29kZSBmdW5jdGlvbidzIHNpemUiKTsKKyAgICBjYXNlIFN0YXRlOjpGdW5jdGlvblBh
eWxvYWQ6CisgICAgICAgIHJldHVybiBmYWlsKCJDb2RlIGZ1bmN0aW9uJ3Mgc2l6ZSAiLCBtX2Z1
bmN0aW9uU2l6ZSwgIiBleGNlZWRzIHRoZSBtb2R1bGUncyByZW1haW5pbmcgc2l6ZSIpOworICAg
IGNhc2UgU3RhdGU6OkZpbmlzaGVkOgorICAgIGNhc2UgU3RhdGU6OkZhdGFsRXJyb3I6CisgICAg
ICAgIHJldHVybiBtX3N0YXRlOworICAgIH0KKyAgICByZXR1cm4gbV9zdGF0ZTsKK30KKworYXV0
byBTdHJlYW1pbmdQYXJzZXI6OmZpbmFsaXplKCkgLT4gU3RhdGUKK3sKKyAgICBhZGRCeXRlcyhu
dWxscHRyLCAwLCBJc0VuZE9mU3RyZWFtOjpZZXMpOworICAgIHN3aXRjaCAobV9zdGF0ZSkgewor
ICAgIGNhc2UgU3RhdGU6Ok1vZHVsZUhlYWRlcjoKKyAgICBjYXNlIFN0YXRlOjpTZWN0aW9uU2l6
ZToKKyAgICBjYXNlIFN0YXRlOjpTZWN0aW9uUGF5bG9hZDoKKyAgICBjYXNlIFN0YXRlOjpDb2Rl
U2VjdGlvblNpemU6CisgICAgY2FzZSBTdGF0ZTo6RnVuY3Rpb25TaXplOgorICAgIGNhc2UgU3Rh
dGU6OkZ1bmN0aW9uUGF5bG9hZDoKKyAgICAgICAgbV9zdGF0ZSA9IGZhaWxPblN0YXRlKG1fc3Rh
dGUpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU3RhdGU6OkZpbmlzaGVkOgorICAgIGNh
c2UgU3RhdGU6OkZhdGFsRXJyb3I6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTdGF0ZTo6
U2VjdGlvbklEOgorICAgICAgICBpZiAobV9yZW1haW5pbmcuaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICBpZiAoT3B0aW9uczo6dXNlRWFnZXJXZWJBc3NlbWJseU1vZHVsZUhhc2hpbmcoKSkKKyAg
ICAgICAgICAgICAgICBtX2luZm8tPm5hbWVTZWN0aW9uLT5zZXRIYXNoKG1faGFzaGVyLmNvbXB1
dGVIZXhEaWdlc3QoKSk7CisgICAgICAgICAgICBtX3N0YXRlID0gU3RhdGU6OkZpbmlzaGVkOwor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fc3RhdGUgPSBmYWlsT25TdGF0ZShTdGF0ZTo6
U2VjdGlvbklEKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBtX3N0YXRlOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFT
U0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVh
bWluZ1BhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1Bh
cnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjRjNTEzMzhmODY1MTVlZTZmZWU1MDM2YmU4NTY5M2Q5ZjkxZjY1
NDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU3Ry
ZWFtaW5nUGFyc2VyLmgKQEAgLTAsMCArMSwxMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTggWXVzdWtlIFN1enVraSA8eXVzdWtlc3V6dWtpQHNsb3dzdGFydC5vcmc+LgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIldhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIgor
I2luY2x1ZGUgIldhc21QYXJzZXIuaCIKKyNpbmNsdWRlICJXYXNtU2VjdGlvbnMuaCIKKyNpbmNs
dWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRl
IDx3dGYvU0hBMS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworY2xh
c3MgU3RyZWFtaW5nUGFyc2VyQ2xpZW50IHsKK307CisKK2NsYXNzIFN0cmVhbWluZ1BhcnNlciB7
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgLy8gVGhlIGxheW91
dCBvZiB0aGUgV2FzbSBtb2R1bGUgaXMgdGhlIGZvbGxvd2luZy4KKyAgICAvLworICAgIC8vIE1v
ZHVsZTogICAgICAgWyBIZWFkZXIgXVsgU2VjdGlvbiBdKgorICAgIC8vIFNlY3Rpb246ICAgICAg
WyBJRCBdWyBTaXplT2ZQYXlsb2FkIF1bIFBheWxvYWQgXQorICAgIC8vIENvZGUgU2VjdGlvbjog
WyBJRCBdWyBTaXplT2ZQYXlsb2FkIF1bICAgICAgICAgICAgICAgICAgIFBheWxvYWQgb2YgQ29k
ZSBTZWN0aW9uICAgICAgICAgICAgICAgICAgIF0KKyAgICAvLyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgWyBOdW1iZXJPZkZ1bmN0aW9ucyBdKFsgU2l6ZU9mRnVuY3Rpb24g
XVsgUGF5bG9hZE9mRnVuY3Rpb24gXSkqCisgICAgLy8KKyAgICAvLyBCYXNpY2FsbHkgd2UgY2Fu
IHBhcnNlIFdhc20gc2VjdGlvbnMgYnkgcmVwZWF0ZWRseSAoMSkgcmVhZGluZyB0aGUgc2l6ZSBv
ZiB0aGUgcGF5bG9hZCwgYW5kICgyKSByZWFkaW5nIHRoZSBwYXlsb2FkIGJhc2VkIG9uIHRoZSBz
aXplIHJlYWQgaW4gKDEpLgorICAgIC8vIFNvIHRoaXMgc3RyZWFtaW5nIHBhcnNlciBoYW5kbGVz
IFNlY3Rpb24gYXMgYW4gdW5pdCBmb3IgaW5jcmVtZW50YWwgcGFyc2luZy4gVGhlIGV4Y2VwdGlv
biBpcyBDb2RlIHNlY3Rpb24uIFRoZSBjb2RlIHNlY3Rpb24gaXMgbGFyZ2Ugc2luY2UgaXQKKyAg
ICAvLyBpbmNsdWRlcyBhbGwgdGhlIGZ1bmN0aW9ucyBpbiB0aGUgd2FzbSBtb2R1bGUuIFNpbmNl
IHdlIHdvdWxkIGxpa2UgdG8gY29tcGlsZSBlYWNoIGZ1bmN0aW9uIGFuZCBwYXJzZSB0aGUgY29k
ZSBzZWN0aW9uIGNvbmN1cnJlbnRseSwgdGhlIHN0cmVhbWluZworICAgIC8vIHBhcnNlciBzcGVj
aWFsbHkgaGFuZGxlcyB0aGUgY29kZSBzZWN0aW9uLiBJbiB0aGUgY29kZSBzZWN0aW9uLCB0aGUg
c3RyZWFtaW5nIHBhcnNlciB1c2VzIEZ1bmN0aW9uIGFzIGFuIHVuaXQgZm9yIGluY3JlbWVudGFs
IHBhcnNpbmcuCisgICAgZW51bSBjbGFzcyBTdGF0ZSA6IHVpbnQ4X3QgeworICAgICAgICBNb2R1
bGVIZWFkZXIsCisgICAgICAgIFNlY3Rpb25JRCwKKyAgICAgICAgU2VjdGlvblNpemUsCisgICAg
ICAgIFNlY3Rpb25QYXlsb2FkLAorICAgICAgICBDb2RlU2VjdGlvblNpemUsCisgICAgICAgIEZ1
bmN0aW9uU2l6ZSwKKyAgICAgICAgRnVuY3Rpb25QYXlsb2FkLAorICAgICAgICBGaW5pc2hlZCwK
KyAgICAgICAgRmF0YWxFcnJvciwKKyAgICB9OworCisgICAgZW51bSBjbGFzcyBJc0VuZE9mU3Ry
ZWFtIHsgWWVzLCBObyB9OworCisgICAgU3RyZWFtaW5nUGFyc2VyKE1vZHVsZUluZm9ybWF0aW9u
Jik7CisKKyAgICBTdGF0ZSBhZGRCeXRlcyhjb25zdCB1aW50OF90KiBieXRlcywgc2l6ZV90IGxl
bmd0aCkgeyByZXR1cm4gYWRkQnl0ZXMoYnl0ZXMsIGxlbmd0aCwgSXNFbmRPZlN0cmVhbTo6Tm8p
OyB9CisgICAgU3RhdGUgZmluYWxpemUoKTsKKworICAgIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNz
YWdlKCkgY29uc3QgeyByZXR1cm4gbV9lcnJvck1lc3NhZ2U7IH0KKworcHJpdmF0ZToKKyAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1vZHVsZUhlYWRlclNpemUgPSA4OworICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgc2VjdGlvbklEU2l6ZSA9IDE7CisKKyAgICBTdGF0ZSBhZGRC
eXRlcyhjb25zdCB1aW50OF90KiBieXRlcywgc2l6ZV90IGxlbmd0aCwgSXNFbmRPZlN0cmVhbSk7
CisKKyAgICBTdGF0ZSBwYXJzZU1vZHVsZUhlYWRlcihWZWN0b3I8dWludDhfdD4mJik7CisgICAg
U3RhdGUgcGFyc2VTZWN0aW9uSUQoVmVjdG9yPHVpbnQ4X3Q+JiYpOworICAgIFN0YXRlIHBhcnNl
U2VjdGlvblNpemUodWludDMyX3QpOworICAgIFN0YXRlIHBhcnNlU2VjdGlvblBheWxvYWQoVmVj
dG9yPHVpbnQ4X3Q+JiYpOworCisgICAgU3RhdGUgcGFyc2VDb2RlU2VjdGlvblNpemUodWludDMy
X3QpOworICAgIFN0YXRlIHBhcnNlRnVuY3Rpb25TaXplKHVpbnQzMl90KTsKKyAgICBTdGF0ZSBw
YXJzZUZ1bmN0aW9uUGF5bG9hZChWZWN0b3I8dWludDhfdD4mJik7CisKKyAgICBzdGQ6Om9wdGlv
bmFsPFZlY3Rvcjx1aW50OF90Pj4gY29uc3VtZShjb25zdCB1aW50OF90KiBieXRlcywgc2l6ZV90
LCBzaXplX3QmLCBzaXplX3QpOworICAgIEV4cGVjdGVkPHVpbnQzMl90LCBTdGF0ZT4gY29uc3Vt
ZVZhclVJbnQzMihjb25zdCB1aW50OF90KiBieXRlcywgc2l6ZV90LCBzaXplX3QmLCBJc0VuZE9m
U3RyZWFtKTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSAuLi5BcmdzPiBORVZFUl9JTkxJTkUg
U3RhdGUgV0FSTl9VTlVTRURfUkVUVVJOIGZhaWwoQXJncy4uLik7CisKKyAgICBTdGF0ZSBmYWls
T25TdGF0ZShTdGF0ZSk7CisKKyAgICBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IG1faW5mbzsKKyAg
ICBWZWN0b3I8dWludDhfdD4gbV9yZW1haW5pbmc7CisgICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdl
OworCisgICAgQ2hlY2tlZFNpemUgbV90b3RhbFNpemUgeyAwIH07CisgICAgc2l6ZV90IG1fb2Zm
c2V0IHsgMCB9OworICAgIHNpemVfdCBtX25leHRPZmZzZXQgeyAwIH07CisgICAgc2l6ZV90IG1f
Y29kZU9mZnNldCB7IDAgfTsKKworICAgIFNIQTEgbV9oYXNoZXI7CisKKyAgICB1aW50MzJfdCBt
X3NlY3Rpb25MZW5ndGggeyAwIH07CisKKyAgICB1aW50MzJfdCBtX2Z1bmN0aW9uQ291bnQgeyAw
IH07CisgICAgdWludDMyX3QgbV9mdW5jdGlvbkluZGV4IHsgMCB9OworCisgICAgdWludDMyX3Qg
bV9mdW5jdGlvblNpemUgeyAwIH07CisKKyAgICBTdGF0ZSBtX3N0YXRlIHsgU3RhdGU6Ok1vZHVs
ZUhlYWRlciB9OworICAgIFNlY3Rpb24gbV9zZWN0aW9uIHsgU2VjdGlvbjo6QmVnaW4gfTsKKyAg
ICBTZWN0aW9uIG1fcHJldmlvdXNLbm93blNlY3Rpb24geyBTZWN0aW9uOjpCZWdpbiB9OworfTsK
KworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFT
U0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseU1vZHVsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5TW9kdWxlLmNwcAppbmRleCAyM2ZlZjIyZTU4YmVlMWVmY2MwMjliYjc2OGUwNTIyNmE5
MjAzNmJlLi5hZWJjZTBjNDEwODM5MWQ2MWYxYTkyY2RmMjU5MDZkNGUxYmE4MjRiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxl
LmNwcApAQCAtMTQwLDExICsxNDAsNiBAQCB2b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICAgICAgdmlz
aXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9jb2RlQmxvY2tzW2ldKTsKIH0KIAotY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpzb3VyY2UoKSBjb25zdAotewotICAg
IHJldHVybiBtb2R1bGVJbmZvcm1hdGlvbigpLnNvdXJjZTsKLX0KLQogfSAvLyBuYW1lc3BhY2Ug
SlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKaW5kZXggMTdiZWQ2MTI1
ZjRlN2YzMTlhOGI3YWYyZTFkZGY4NjRhZWIyZmE1YS4uZDM5MzAwNjkxOWQyN2FkMTc0NjlmZTI2
OTVkYjg0Mzg0MjNkMDgyZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaApAQCAtNjgsOCArNjgsNiBAQCBjbGFzcyBKU1dlYkFz
c2VtYmx5TW9kdWxlIGZpbmFsIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKICAgICBK
U1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2soV2FzbTo6TWVtb3J5TW9kZSBtb2RlKTsK
ICAgICB2b2lkIHNldENvZGVCbG9jayhWTSYsIFdhc206Ok1lbW9yeU1vZGUsIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2sqKTsKIAotICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgc291cmNlKCkgY29u
c3Q7Ci0KICAgICBKU19FWFBPUlRfUFJJVkFURSBXYXNtOjpNb2R1bGUmIG1vZHVsZSgpOwogCiBw
cml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlQcm90b3R5cGUuY3BwCmluZGV4IDk2ZDRjMTRkNzRjN2VlMWFmOGFlZTc2MTBjNDk0YWE3
Yzk0YjA2YzUuLmRjYWRjMGQwZGJjZTVhOWQyNTUzYTRkYmRjOGNlNGI0ZmNjNWQ0NTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5UHJvdG90eXBl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVByb3Rv
dHlwZS5jcHAKQEAgLTI5NCwxMCArMjk0LDEwIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHdlYkFzc2VtYmx5VmFsaWRhdGVGdW5jKEV4ZWNTdGF0ZSogZXhlYykKICAgICBz
aXplX3QgYnl0ZVNpemU7CiAgICAgc3RkOjp0aWUoYmFzZSwgYnl0ZVNpemUpID0gZ2V0V2FzbUJ1
ZmZlckZyb21WYWx1ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgQkJRUGxhbiBwbGFuKCZ2bS53
YXNtQ29udGV4dCwgYmFzZSwgYnl0ZVNpemUsIEJCUVBsYW46OlZhbGlkYXRpb24sIFBsYW46OmRv
bnRGaW5hbGl6ZSgpKTsKKyAgICBCQlFQbGFuIHBsYW4oJnZtLndhc21Db250ZXh0LCBCQlFQbGFu
OjpWYWxpZGF0aW9uLCBQbGFuOjpkb250RmluYWxpemUoKSk7CiAgICAgLy8gRklYTUU6IFdlIG1p
Z2h0IHdhbnQgdG8gdGhyb3cgYW4gT09NIGV4Y2VwdGlvbiBoZXJlIGlmIHdlIGRldGVjdCB0aGF0
IHNvbWV0aGluZyB3aWxsIE9PTS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY2MDE1Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
cGxhbi5wYXJzZUFuZFZhbGlkYXRlTW9kdWxlKCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbihwbGFuLnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoYmFzZSwgYnl0ZVNpemUp
KSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlDb21waWxl
U3RyZWFtaW5nSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvTEVCRGVjb2Rlci5oIGIvU291cmNlL1dURi93dGYvTEVCRGVjb2Rlci5oCmluZGV4IDk0
NjI3NzBjNjk5Y2QwNWVhNjU3M2UzZWQ5YzFjOTc1YThiNTE1MDcuLjk5YTVjMDlhZDRhNTQxOGM4
MGQwMTM3YjEwZTAwZDBiNDI2YzA4ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0xFQkRl
Y29kZXIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9MRUJEZWNvZGVyLmgKQEAgLTM2LDE1ICszNiwy
MCBAQAogbmFtZXNwYWNlIFdURiB7IG5hbWVzcGFjZSBMRUJEZWNvZGVyIHsKIAogdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLWlubGluZSBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBkZWNvZGVVSW50KGNv
bnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBzaXplX3QmIG9mZnNldCwgVCYgcmVz
dWx0KQoraW5saW5lIGNvbnN0ZXhwciBzaXplX3QgbWF4Qnl0ZUxlbmd0aCgpCiB7CiAgICAgY29u
c3Qgc2l6ZV90IG51bUJpdHMgPSBzaXplb2YoVCkgKiBDSEFSX0JJVDsKLSAgICBjb25zdCBzaXpl
X3QgbWF4Qnl0ZUxlbmd0aCA9IChudW1CaXRzIC0gMSkgLyA3ICsgMTsgLy8gbnVtQml0cyAvIDcg
cm91bmRpbmcgdXAuCisgICAgcmV0dXJuIChudW1CaXRzIC0gMSkgLyA3ICsgMTsgLy8gbnVtQml0
cyAvIDcgcm91bmRpbmcgdXAuCit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUgYm9v
bCBXQVJOX1VOVVNFRF9SRVRVUk4gZGVjb2RlVUludChjb25zdCB1aW50OF90KiBieXRlcywgc2l6
ZV90IGxlbmd0aCwgc2l6ZV90JiBvZmZzZXQsIFQmIHJlc3VsdCkKK3sKICAgICBpZiAobGVuZ3Ro
IDw9IG9mZnNldCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJlc3VsdCA9IDA7CiAgICAg
dW5zaWduZWQgc2hpZnQgPSAwOwotICAgIHNpemVfdCBsYXN0ID0gc3RkOjptaW4obWF4Qnl0ZUxl
bmd0aCwgbGVuZ3RoIC0gb2Zmc2V0KSAtIDE7CisgICAgc2l6ZV90IGxhc3QgPSBzdGQ6Om1pbiht
YXhCeXRlTGVuZ3RoPFQ+KCksIGxlbmd0aCAtIG9mZnNldCkgLSAxOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IHRydWU7ICsraSkgewogICAgICAgICB1aW50OF90IGJ5dGUgPSBieXRlc1tvZmZz
ZXQrK107CiAgICAgICAgIHJlc3VsdCB8PSBzdGF0aWNfY2FzdDxUPihieXRlICYgMHg3ZikgPDwg
c2hpZnQ7CkBAIC02MSwxMyArNjYsMTEgQEAgaW5saW5lIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJO
IGRlY29kZVVJbnQoY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIHMKIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CiBpbmxpbmUgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gZGVjb2RlSW50
KGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBzaXplX3QmIG9mZnNldCwgVCYg
cmVzdWx0KQogewotICAgIGNvbnN0IHNpemVfdCBudW1CaXRzID0gc2l6ZW9mKFQpICogQ0hBUl9C
SVQ7Ci0gICAgY29uc3Qgc2l6ZV90IG1heEJ5dGVMZW5ndGggPSAobnVtQml0cyAtIDEpIC8gNyAr
IDE7IC8vIG51bUJpdHMgLyA3IHJvdW5kaW5nIHVwLgogICAgIGlmIChsZW5ndGggPD0gb2Zmc2V0
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmVzdWx0ID0gMDsKICAgICB1bnNpZ25lZCBz
aGlmdCA9IDA7Ci0gICAgc2l6ZV90IGxhc3QgPSBzdGQ6Om1pbihtYXhCeXRlTGVuZ3RoLCBsZW5n
dGggLSBvZmZzZXQpIC0gMTsKKyAgICBzaXplX3QgbGFzdCA9IHN0ZDo6bWluKG1heEJ5dGVMZW5n
dGg8VD4oKSwgbGVuZ3RoIC0gb2Zmc2V0KSAtIDE7CiAgICAgdWludDhfdCBieXRlOwogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IHRydWU7ICsraSkgewogICAgICAgICBieXRlID0gYnl0ZXNbb2Zm
c2V0KytdOwpAQCAtODAsNiArODMsNyBAQCBpbmxpbmUgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4g
ZGVjb2RlSW50KGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBzaQogICAgIH0K
IAogICAgIHVzaW5nIFVuc2lnbmVkVCA9IHR5cGVuYW1lIHN0ZDo6bWFrZV91bnNpZ25lZDxUPjo6
dHlwZTsKKyAgICBjb25zdCBzaXplX3QgbnVtQml0cyA9IHNpemVvZihUKSAqIENIQVJfQklUOwog
ICAgIGlmIChzaGlmdCA8IG51bUJpdHMgJiYgKGJ5dGUgJiAweDQwKSkKICAgICAgICAgcmVzdWx0
ID0gc3RhdGljX2Nhc3Q8VD4oc3RhdGljX2Nhc3Q8VW5zaWduZWRUPihyZXN1bHQpIHwgKHN0YXRp
Y19jYXN0PFVuc2lnbmVkVD4oLTEpIDw8IHNoaWZ0KSk7CiAgICAgcmV0dXJuIHRydWU7CmRpZmYg
LS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDQ3MTAw
ZGI3MDcwNGYwZDQ2NjQ2OGY4NGE2NzMxZjY0MjlhYmEzNGUuLjk0MjAzODE4YjQwNjRmMTM1ZmQ2
NDVkMjk0OTZiMjRlNjdiZGFjMjUgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBi
L0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIgQEAKKzIwMTgtMDgtMjcgIFl1c3VrZSBT
dXp1a2kgIDx5dXN1a2VzdXp1a2lAc2xvd3N0YXJ0Lm9yZz4KKworICAgICAgICBbV2ViQXNzZW1i
bHldIFBhcnNlIHdhc20gbW9kdWxlcyBpbiBhIHN0cmVhbWluZyBmYXNoaW9uCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODg5NDMKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXYXNtIHBhcnNpbmcgZXJyb3Ig
c2hvdWxkIG5vdCByZXBvcnQgdGhlIHRvdGFsIGJ5dGUgc2l6ZSBzaW5jZSBzdHJlYW1pbmcgcGFy
c2luZyBkb2VzIG5vdAorICAgICAgICB3YW50IHRvIGxvYWQgYWxsIHRoZSBieXRlcy4KKyAgICAg
ICAgQWRkIGEgc2ltcGxlIHRlc3Qgd2FzbS9zdHJlc3Mvc3RyZWFtaW5nLWJhc2ljLmpzIGZvciBp
bml0aWFsIHN0cmVhbWluZyBwYXJzaW5nIGltcGxlbWVudGF0aW9uLgorCisgICAgICAgICogd2Fz
bS9mdW5jdGlvbi10ZXN0cy9pbnZhbGlkLWR1cGxpY2F0ZS1leHBvcnQuanM6CisgICAgICAgICog
d2FzbS9mdW5jdGlvbi10ZXN0cy9tZW1vcnktYWxpZ25tZW50LmpzOgorICAgICAgICAoY29uc3Qu
b3Aub2YuV0FTTS5vcGNvZGVzKToKKyAgICAgICAgKiB3YXNtL2Z1bmN0aW9uLXRlc3RzL21lbW9y
eS1zZWN0aW9uLWFuZC1pbXBvcnQuanM6CisgICAgICAgICogd2FzbS9mdW5jdGlvbi10ZXN0cy92
b2lkLWFyZ3VtZW50LXR5cGUtc2hvdWxkLWJlLWEtdmFsaWRhdGlvbi1lcnJvci5qczoKKyAgICAg
ICAgKiB3YXNtL2pzLWFwaS9Nb2R1bGUtY29tcGlsZS5qczoKKyAgICAgICAgKGFzeW5jLnRlc3RQ
cm9taXNlQVBJKToKKyAgICAgICAgKiB3YXNtL2pzLWFwaS9lbGVtZW50LmpzOgorICAgICAgICAo
YXNzZXJ0LnRocm93cy5uZXcuV2ViQXNzZW1ibHkuTW9kdWxlLmJ1aWxkZXIuV2ViQXNzZW1ibHkp
OgorICAgICAgICAoYXNzZXJ0LnRocm93cyk6CisgICAgICAgICogd2FzbS9qcy1hcGkvZ2xvYmFs
LWVycm9yLmpzOgorICAgICAgICAoYXNzZXJ0LnRocm93cy5uZXcuV2ViQXNzZW1ibHkuTW9kdWxl
LmJpbik6CisgICAgICAgIChhc3NlcnQudGhyb3dzKToKKyAgICAgICAgKiB3YXNtL2pzLWFwaS90
YWJsZS5qczoKKyAgICAgICAgKG5ldy5XZWJBc3NlbWJseS5Nb2R1bGUpOgorICAgICAgICAoYXNz
ZXJ0LnRocm93cyk6CisgICAgICAgIChhc3NlcnRCYWRUYWJsZUltcG9ydCk6CisgICAgICAgICog
d2FzbS9qcy1hcGkvdGVzdF9EYXRhLmpzOgorICAgICAgICAoRGF0YVNlY3Rpb25XaXRob3V0TWVt
b3J5KToKKyAgICAgICAgKiB3YXNtL2pzLWFwaS90ZXN0X1N0YXJ0LmpzOgorICAgICAgICAoSW52
YWxpZFN0YXJ0RnVuY3Rpb25JbmRleCk6CisgICAgICAgICogd2FzbS9qcy1hcGkvdGVzdF9iYXNp
Y19hcGkuanM6CisgICAgICAgIChjb25zdC5jLmluLmNvbnN0cnVjdG9yUHJvcGVydGllcy5zd2l0
Y2gpOgorICAgICAgICAqIHdhc20vanMtYXBpL3ZlcnNpb24uanM6CisgICAgICAgICogd2FzbS9z
dHJlc3MvbmFtZVNlY3Rpb24ud2FzbTogQWRkZWQuCisgICAgICAgICogd2FzbS9zdHJlc3Mvc3Ry
ZWFtaW5nLWJhc2ljLmpzOiBBZGRlZC4KKyAgICAgICAgKGNoZWNrKToKKwogMjAxOC0wOC0yNCAg
WXVzdWtlIFN1enVraSAgPHl1c3VrZXN1enVraUBzbG93c3RhcnQub3JnPgogCiAgICAgICAgIFtK
U0NdIEFycmF5LnByb3RvdHlwZS5yZXZlcnNlIG1vZGlmaWVzIEpTSW1tdXRhYmxlQnV0dGVyZmx5
CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvaW52YWxpZC1kdXBsaWNh
dGUtZXhwb3J0LmpzIGIvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL2ludmFsaWQtZHVwbGlj
YXRlLWV4cG9ydC5qcwppbmRleCBjNDdiMWUxNjYyYzJjYjYwYzkzZDZjOWI5NTczOWJkYWJhNzgw
ZTczLi40MThkNTFhYTQ5OTAxOWFhMjQ2OWJhYTVmMWZkOGUxYWJkM2JmMjkxIDEwMDY0NAotLS0g
YS9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvaW52YWxpZC1kdXBsaWNhdGUtZXhwb3J0Lmpz
CisrKyBiL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9pbnZhbGlkLWR1cGxpY2F0ZS1leHBv
cnQuanMKQEAgLTE1LDUgKzE1LDUgQEAKICAgICAgICAgLkVuZCgpOwogCiAgICAgY29uc3QgYmlu
ID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOwotICAgIGFzc2VydC50aHJvd3MoKCkgPT4g
bmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJX
ZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDMxIC8gMzk6IGR1cGxpY2F0
ZSBleHBvcnQ6ICdmb28nIik7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1i
bHkuTW9kdWxlKGJpbiksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1v
ZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzE6IGR1cGxpY2F0ZSBleHBvcnQ6ICdmb28nIik7
CiB9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LWFsaWdu
bWVudC5qcyBiL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9tZW1vcnktYWxpZ25tZW50Lmpz
CmluZGV4IGFiYzU3NDEyMTQ2ZjJlMzk3MjYxZTczMjZlY2M4YTVjODE5YTA0OWMuLmU2MDU4OTg5
MDBhYTFiZWQ2N2I5ZDMyYWM2ZjJhYTAxMmViMjk5ZWUgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2Fz
bS9mdW5jdGlvbi10ZXN0cy9tZW1vcnktYWxpZ25tZW50LmpzCisrKyBiL0pTVGVzdHMvd2FzbS9m
dW5jdGlvbi10ZXN0cy9tZW1vcnktYWxpZ25tZW50LmpzCkBAIC00Miw3ICs0Miw3IEBACiAgICAg
ICAgIGlmIChhbGlnbkxvZzIgPD0gbWF4QWxpZ25Mb2cyKQogICAgICAgICAgICAgaW5zdGFuY2Uo
KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgYXNzZXJ0LnRocm93cyhpbnN0YW5jZSwgV2Vi
QXNzZW1ibHkuQ29tcGlsZUVycm9yLCBgV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2Ug
YXQgYnl0ZSAke3N0YXJ0fSAvICR7ZW5kfTogYnl0ZSBhbGlnbm1lbnQgJHsxIDw8IGFsaWduTG9n
Mn0gZXhjZWVkcyAke2luZm8udHlwZX0ncyBuYXR1cmFsIGFsaWdubWVudCAkezEgPDwgbWF4QWxp
Z25Mb2cyfSwgaW4gZnVuY3Rpb24gYXQgaW5kZXggMGApOworICAgICAgICAgICAgYXNzZXJ0LnRo
cm93cyhpbnN0YW5jZSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCBgV2ViQXNzZW1ibHkuTW9k
dWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAke3N0YXJ0fTogYnl0ZSBhbGlnbm1lbnQgJHsxIDw8
IGFsaWduTG9nMn0gZXhjZWVkcyAke2luZm8udHlwZX0ncyBuYXR1cmFsIGFsaWdubWVudCAkezEg
PDwgbWF4QWxpZ25Mb2cyfSwgaW4gZnVuY3Rpb24gYXQgaW5kZXggMGApOwogCiAgICAgfQogfQpk
aWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL21lbW9yeS1zZWN0aW9uLWFu
ZC1pbXBvcnQuanMgYi9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LXNlY3Rpb24t
YW5kLWltcG9ydC5qcwppbmRleCBhMWRiOWNlMjU3NzkzNTBiNWJkNTU3N2Y3NjdlNjY3Nzc0YmQ4
YjBiLi4xNTIwN2VmNzE4OGVmYTBmNjkyMzU3M2MxZGZlYTVhM2VhNWI3MWZmIDEwMDY0NAotLS0g
YS9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LXNlY3Rpb24tYW5kLWltcG9ydC5q
cworKysgYi9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LXNlY3Rpb24tYW5kLWlt
cG9ydC5qcwpAQCAtMjgsNCArMjgsNCBAQAogICAgICAgLkNvZGUoKS5FbmQoKTsKIAogY29uc3Qg
aTAgPSBpbnN0YW50aWF0ZShidWlsZGVyMCk7Ci1hc3NlcnQudGhyb3dzKCgpID0+IGluc3RhbnRp
YXRlKGJ1aWxkZXIxLCB7IGltcDogeyBtZW1vcnk6IGkwLmV4cG9ydHMubWVtb3J5IH0gfSksIFdl
YkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgYFdlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNl
IGF0IGJ5dGUgMzUgLyA0MTogdGhlcmUgY2FuIGF0IG1vc3QgYmUgb25lIE1lbW9yeSBzZWN0aW9u
IGZvciBub3dgKTsKK2Fzc2VydC50aHJvd3MoKCkgPT4gaW5zdGFudGlhdGUoYnVpbGRlcjEsIHsg
aW1wOiB7IG1lbW9yeTogaTAuZXhwb3J0cy5tZW1vcnkgfSB9KSwgV2ViQXNzZW1ibHkuQ29tcGls
ZUVycm9yLCBgV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzNTogdGhl
cmUgY2FuIGF0IG1vc3QgYmUgb25lIE1lbW9yeSBzZWN0aW9uIGZvciBub3dgKTsKZGlmZiAtLWdp
dCBhL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy92b2lkLWFyZ3VtZW50LXR5cGUtc2hvdWxk
LWJlLWEtdmFsaWRhdGlvbi1lcnJvci5qcyBiL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy92
b2lkLWFyZ3VtZW50LXR5cGUtc2hvdWxkLWJlLWEtdmFsaWRhdGlvbi1lcnJvci5qcwppbmRleCA0
NzE0OWIxZDdmYjkzMjMxYzI1ZDA3OGE4NjI5OGI3NTAyYmZmNjhhLi4yMTc4ODEwYTc4MTdkOTcz
MzVlNjJmNzhiM2ZjNTE3ZTNmZTc3ZTQxIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vZnVuY3Rp
b24tdGVzdHMvdm9pZC1hcmd1bWVudC10eXBlLXNob3VsZC1iZS1hLXZhbGlkYXRpb24tZXJyb3Iu
anMKKysrIGIvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL3ZvaWQtYXJndW1lbnQtdHlwZS1z
aG91bGQtYmUtYS12YWxpZGF0aW9uLWVycm9yLmpzCkBAIC0xNyw2ICsxNyw2IEBAIGZ1bmN0aW9u
IGdldEJpbmFyeShwYXJhbXMpIHsKICAgICByZXR1cm4gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdl
dCgpOwogfQogCi1hc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoZ2V0
QmluYXJ5KFsiaTMyIiwgInZvaWQiXSkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJB
c3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE1IC8gNDc6IGNhbid0IGdldCAx
dGggYXJndW1lbnQgVHlwZSIpOwotYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHku
TW9kdWxlKGdldEJpbmFyeShbInZvaWQiXSkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJX
ZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE0IC8gNDY6IGNhbid0IGdl
dCAwdGggYXJndW1lbnQgVHlwZSIpOwotYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1i
bHkuTW9kdWxlKGdldEJpbmFyeShbImkzMiIsICJ2b2lkIiwgImkzMiJdKSksIFdlYkFzc2VtYmx5
LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUg
MTUgLyA0ODogY2FuJ3QgZ2V0IDF0aCBhcmd1bWVudCBUeXBlIik7Cithc3NlcnQudGhyb3dzKCgp
ID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoZ2V0QmluYXJ5KFsiaTMyIiwgInZvaWQiXSkpLCBX
ZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJz
ZSBhdCBieXRlIDE1OiBjYW4ndCBnZXQgMXRoIGFyZ3VtZW50IFR5cGUiKTsKK2Fzc2VydC50aHJv
d3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShnZXRCaW5hcnkoWyJ2b2lkIl0pKSwgV2Vi
QXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2Ug
YXQgYnl0ZSAxNDogY2FuJ3QgZ2V0IDB0aCBhcmd1bWVudCBUeXBlIik7Cithc3NlcnQudGhyb3dz
KCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoZ2V0QmluYXJ5KFsiaTMyIiwgInZvaWQiLCAi
aTMyIl0pKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRv
ZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxNTogY2FuJ3QgZ2V0IDF0aCBhcmd1bWVudCBUeXBlIik7CmRp
ZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vanMtYXBpL01vZHVsZS1jb21waWxlLmpzIGIvSlNUZXN0
cy93YXNtL2pzLWFwaS9Nb2R1bGUtY29tcGlsZS5qcwppbmRleCBkM2JlYjMzMjU3N2FlZGIwNThj
OGU0MWQyM2FkZGE5YzkxZjFkZjc4Li5kNzIzYmY0ZDcwYjQ5YzQ5YTEzNjVmZGM2N2I0NTI0MmIz
ODI3MmU2IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vanMtYXBpL01vZHVsZS1jb21waWxlLmpz
CisrKyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvTW9kdWxlLWNvbXBpbGUuanMKQEAgLTIxLDcgKzIx
LDcgQEAgYXN5bmMgZnVuY3Rpb24gdGVzdFByb21pc2VBUEkoKSB7CiAgICAgICAgICAgICBhd2Fp
dCBXZWJBc3NlbWJseS5jb21waWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSk7CiAgICAg
ICAgIH0gY2F0Y2goZSkgewogICAgICAgICAgICAgYXNzZXJ0LnRydXRoeShlIGluc3RhbmNlb2Yg
V2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yKTsKLSAgICAgICAgICAgIGFzc2VydC50cnV0aHkoZS5t
ZXNzYWdlID09PSAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzNCAv
IDQzOiB0aGVyZSBjYW4gYXQgbW9zdCBiZSBvbmUgTWVtb3J5IHNlY3Rpb24gZm9yIG5vdyIpOwor
ICAgICAgICAgICAgYXNzZXJ0LnRydXRoeShlLm1lc3NhZ2UgPT09ICJXZWJBc3NlbWJseS5Nb2R1
bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDM0OiB0aGVyZSBjYW4gYXQgbW9zdCBiZSBvbmUgTWVt
b3J5IHNlY3Rpb24gZm9yIG5vdyIpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9K
U1Rlc3RzL3dhc20vanMtYXBpL2VsZW1lbnQuanMgYi9KU1Rlc3RzL3dhc20vanMtYXBpL2VsZW1l
bnQuanMKaW5kZXggMTg4YWM3NDE1MTEyNjA0OGI4MjcyNDhkYzQ3MzgyMDVhYTg2YTE0OS4uZmNi
ZTI4MjdmMzcxNjYzYWE4NGZkZjVjMTAxMDBiODE3ODE3NzM5MCAxMDA2NDQKLS0tIGEvSlNUZXN0
cy93YXNtL2pzLWFwaS9lbGVtZW50LmpzCisrKyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvZWxlbWVu
dC5qcwpAQCAtMTgsNyArMTgsNyBAQAogICAgICAgICAgICAgLkVuZCgpCiAgICAgICAgIC5FbmQo
KTsKIAotICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWls
ZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJB
c3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI0IC8gNDE6IEVsZW1lbnQgc2Vj
dGlvbiBmb3IgVGFibGUgMCBleGNlZWRzIGF2YWlsYWJsZSBUYWJsZSAwIik7CisgICAgYXNzZXJ0
LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHko
KS5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBk
b2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjQ6IEVsZW1lbnQgc2VjdGlvbiBmb3IgVGFibGUgMCBleGNl
ZWRzIGF2YWlsYWJsZSBUYWJsZSAwIik7CiB9CiAKIHsKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAg
ICAgICAgIC5FbmQoKQogICAgICAgICAuRW5kKCk7CiAKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+
IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwgV2Vi
QXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2Ug
YXQgYnl0ZSAzMCAvIDQ3OiBFbGVtZW50IHNlY3Rpb24gZm9yIFRhYmxlIDEgZXhjZWVkcyBhdmFp
bGFibGUgVGFibGUgMSIpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5
Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxl
RXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDMwOiBFbGVt
ZW50IHNlY3Rpb24gZm9yIFRhYmxlIDEgZXhjZWVkcyBhdmFpbGFibGUgVGFibGUgMSIpOwogfQog
CiB7CkBAIC0xMTIsNyArMTEyLDcgQEAKICAgICAgICAgICAgIC5FbmQoKQogICAgICAgICAuRW5k
KCk7CiAKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVp
bGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2Vi
QXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzOCAvIDUwOiBFbGVtZW50IHNl
Y3Rpb24ncyAwdGggZWxlbWVudCdzIDJ0aCBpbmRleCBpcyAxIHdoaWNoIGV4Y2VlZHMgdGhlIGZ1
bmN0aW9uIGluZGV4IHNwYWNlIHNpemUgb2YgMSAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5
Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiKTsKKyAgICBhc3NlcnQudGhy
b3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdl
dCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNu
J3QgcGFyc2UgYXQgYnl0ZSAzODogRWxlbWVudCBzZWN0aW9uJ3MgMHRoIGVsZW1lbnQncyAydGgg
aW5kZXggaXMgMSB3aGljaCBleGNlZWRzIHRoZSBmdW5jdGlvbiBpbmRleCBzcGFjZSBzaXplIG9m
IDEgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJs
eSgpLmdldCgpKScpIik7CiB9CiAKIHsKQEAgLTIxNSw1ICsyMTUsNSBAQCBmdW5jdGlvbiBiYWRN
b2R1bGUoKSB7CiAgICAgICAgIHJldHVybiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CiAg
ICAgfQogCi0gICAgYXNzZXJ0LnRocm93cygoKSA9PiBiYWRNb2R1bGUoKSwgV2ViQXNzZW1ibHku
Q29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSA1
OCAvIDcyOiBFbGVtZW50IGluaXRfZXhwciBtdXN0IHByb2R1Y2UgYW4gaTMyIik7CisgICAgYXNz
ZXJ0LnRocm93cygoKSA9PiBiYWRNb2R1bGUoKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAi
V2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSA1ODogRWxlbWVudCBpbml0
X2V4cHIgbXVzdCBwcm9kdWNlIGFuIGkzMiIpOwogfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNt
L2pzLWFwaS9nbG9iYWwtZXJyb3IuanMgYi9KU1Rlc3RzL3dhc20vanMtYXBpL2dsb2JhbC1lcnJv
ci5qcwppbmRleCAwOWY4ZDc5OWRjNGUyZjM5ZDlhNTQzMDJjYWFiZGU3YTc2ZDUxMDdiLi5kM2Vk
Zjg5OGU3ZDlmYTA3ZTQ3MGNmYzMyYzZhYjM2ZjE3MzFiNTEzIDEwMDY0NAotLS0gYS9KU1Rlc3Rz
L3dhc20vanMtYXBpL2dsb2JhbC1lcnJvci5qcworKysgYi9KU1Rlc3RzL3dhc20vanMtYXBpL2ds
b2JhbC1lcnJvci5qcwpAQCAtMjMsNyArMjMsNyBAQAogICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIu
V2ViQXNzZW1ibHkoKTsKICAgICBiaW4udHJpbSgpOwogCi0gICAgYXNzZXJ0LnRocm93cygoKSA9
PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbi5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVF
cnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjYgLyA1OTog
Z2V0X2dsb2JhbCdzIGluZGV4IDAgZXhjZWVkcyB0aGUgbnVtYmVyIG9mIGdsb2JhbHMgMCAoZXZh
bHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4uZ2V0KCkpJykiKTsKKyAgICBhc3Nl
cnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKSwgV2ViQXNz
ZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQg
Ynl0ZSAyNjogZ2V0X2dsb2JhbCdzIGluZGV4IDAgZXhjZWVkcyB0aGUgbnVtYmVyIG9mIGdsb2Jh
bHMgMCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4uZ2V0KCkpJykiKTsK
IH0KIAogCkBAIC01Miw3ICs1Miw3IEBACiAgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3Nl
bWJseSgpOwogICAgIGJpbi50cmltKCk7CiAKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBX
ZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAi
V2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzMiAvIDc2OiBNdXRhYmxl
IEdsb2JhbHMgYXJlbid0IHN1cHBvcnRlZCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1v
ZHVsZShiaW4uZ2V0KCkpJykiKTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3Nl
bWJseS5Nb2R1bGUoYmluLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNz
ZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzMjogTXV0YWJsZSBHbG9iYWxzIGFy
ZW4ndCBzdXBwb3J0ZWQgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdl
dCgpKScpIik7CiB9CiAKIHsKQEAgLTc3LDcgKzc3LDcgQEAKICAgICBjb25zdCBiaW4gPSBidWls
ZGVyLldlYkFzc2VtYmx5KCk7CiAgICAgYmluLnRyaW0oKTsKIAotICAgIGFzc2VydC50aHJvd3Mo
KCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4uZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21w
aWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDUxIC8g
NTk6IDF0aCBFeHBvcnQgaXNuJ3QgaW1tdXRhYmxlLCBuYW1lZCAnZ2xvYmFsJyAoZXZhbHVhdGlu
ZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4uZ2V0KCkpJykiKTsKKyAgICBhc3NlcnQudGhy
b3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKSwgV2ViQXNzZW1ibHku
Q29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSA1
MTogMXRoIEV4cG9ydCBpc24ndCBpbW11dGFibGUsIG5hbWVkICdnbG9iYWwnIChldmFsdWF0aW5n
ICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbi5nZXQoKSknKSIpOwogfQogCiB7CmRpZmYgLS1n
aXQgYS9KU1Rlc3RzL3dhc20vanMtYXBpL3RhYmxlLmpzIGIvSlNUZXN0cy93YXNtL2pzLWFwaS90
YWJsZS5qcwppbmRleCBiODMyZTExNzY2NDEzMDIzMGZjODBiZmIxMzBjMTM2NmEzMTJlMzI1Li5j
ZjY4YjQ0MDQ5NWY2YmU2ZjhiMjc5NDc3MTI0NTZkN2NhN2M4YzZmIDEwMDY0NAotLS0gYS9KU1Rl
c3RzL3dhc20vanMtYXBpL3RhYmxlLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGFibGUu
anMKQEAgLTEzLDcgKzEzLDcgQEAKICAgICAgICAgLkVuZCgpCiAgICAgICAgIC5Db2RlKCkKICAg
ICAgICAgLkVuZCgpOwotICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1v
ZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJy
b3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDM0IC8gNDE6IENh
bm5vdCBoYXZlIG1vcmUgdGhhbiBvbmUgVGFibGUgZm9yIG5vdyIpOworICAgIGFzc2VydC50aHJv
d3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0
KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24n
dCBwYXJzZSBhdCBieXRlIDM0OiBDYW5ub3QgaGF2ZSBtb3JlIHRoYW4gb25lIFRhYmxlIGZvciBu
b3ciKTsKIH0KIAogewpAQCAtMzgsNyArMzgsNyBAQAogICAgICAgICAuRW5kKCkKICAgICAgICAg
LkNvZGUoKQogICAgICAgICAuRW5kKCk7Ci0gICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2Vi
QXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5
LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUg
MTcgLyAyODogVGFibGUgY291bnQgb2YgMiBpcyBpbnZhbGlkLCBhdCBtb3N0IDEgaXMgYWxsb3dl
ZCBmb3Igbm93IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2Vi
QXNzZW1ibHkoKS5nZXQoKSknKSIpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFz
c2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5D
b21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE3
OiBUYWJsZSBjb3VudCBvZiAyIGlzIGludmFsaWQsIGF0IG1vc3QgMSBpcyBhbGxvd2VkIGZvciBu
b3cgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJs
eSgpLmdldCgpKScpIik7CiB9CiAKIHsKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICAgICAgICAg
ICAuQ2FsbEluZGlyZWN0KDAsIDApCiAgICAgICAgICAgICAuRW5kKCkKICAgICAgICAgLkVuZCgp
OwotICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVy
LldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3Nl
bWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDQgLyA3OiBjYWxsX2luZGlyZWN0IGlz
IG9ubHkgdmFsaWQgd2hlbiBhIHRhYmxlIGlzIGRlZmluZWQgb3IgaW1wb3J0ZWQsIGluIGZ1bmN0
aW9uIGF0IGluZGV4IDAgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRl
ci5XZWJBc3NlbWJseSgpLmdldCgpKScpIik7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcg
V2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIFdlYkFzc2Vt
Ymx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5
dGUgNDogY2FsbF9pbmRpcmVjdCBpcyBvbmx5IHZhbGlkIHdoZW4gYSB0YWJsZSBpcyBkZWZpbmVk
IG9yIGltcG9ydGVkLCBpbiBmdW5jdGlvbiBhdCBpbmRleCAwIChldmFsdWF0aW5nICduZXcgV2Vi
QXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIpOwogfQogCiB7
CkBAIC03Myw3ICs3Myw3IEBACiAgICAgICAgICAgICAgICAgLkNhbGxJbmRpcmVjdCgwLCAxKQog
ICAgICAgICAgICAgLkVuZCgpCiAgICAgICAgIC5FbmQoKTsKLSAgICBhc3NlcnQudGhyb3dzKCgp
ID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwg
V2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFy
c2UgYXQgYnl0ZSA2IC8gNzogY2FsbF9pbmRpcmVjdCdzICdyZXNlcnZlZCcgdmFydWludDEgbXVz
dCBiZSAweDAsIGluIGZ1bmN0aW9uIGF0IGluZGV4IDAgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3Nl
bWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIik7CisgICAgYXNzZXJ0
LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHko
KS5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBk
b2Vzbid0IHBhcnNlIGF0IGJ5dGUgNjogY2FsbF9pbmRpcmVjdCdzICdyZXNlcnZlZCcgdmFydWlu
dDEgbXVzdCBiZSAweDAsIGluIGZ1bmN0aW9uIGF0IGluZGV4IDAgKGV2YWx1YXRpbmcgJ25ldyBX
ZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIik7CiB9CiAK
IHsKQEAgLTg2LDcgKzg2LDcgQEAKICAgICAgICAgLkVuZCgpCiAgICAgICAgIC5Db2RlKCkKICAg
ICAgICAgLkVuZCgpOwotICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1v
ZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJy
b3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDIzIC8gMjY6IGNh
bid0IGV4cG9ydCBUYWJsZSAwIHRoZXJlIGFyZSAwIFRhYmxlcyIpOworICAgIGFzc2VydC50aHJv
d3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0
KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24n
dCBwYXJzZSBhdCBieXRlIDIzOiBjYW4ndCBleHBvcnQgVGFibGUgMCB0aGVyZSBhcmUgMCBUYWJs
ZXMiKTsKIH0KIAogewpAQCAtMTAyLDcgKzEwMiw3IEBACiAgICAgICAgIC5FbmQoKQogICAgICAg
ICAuQ29kZSgpCiAgICAgICAgIC5FbmQoKTsKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBX
ZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwgV2ViQXNzZW1i
bHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0
ZSAzMCAvIDMzOiBjYW4ndCBleHBvcnQgVGFibGUgMSB0aGVyZSBhcmUgMSBUYWJsZXMiKTsKKyAg
ICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJB
c3NlbWJseSgpLmdldCgpKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHku
TW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzMDogY2FuJ3QgZXhwb3J0IFRhYmxlIDEgdGhl
cmUgYXJlIDEgVGFibGVzIik7CiB9CiAKIGZ1bmN0aW9uIGFzc2VydEJhZFRhYmxlKHRhYmxlRGVz
Y3JpcHRpb24sIG1lc3NhZ2UpIHsKQEAgLTEzMiw0MiArMTMyLDQyIEBAIGZ1bmN0aW9uIGFzc2Vy
dEJhZFRhYmxlSW1wb3J0KHRhYmxlRGVzY3JpcHRpb24sIG1lc3NhZ2UpIHsKIHsKICAgICBsZXQg
YmFkRGVzY3JpcHRpb25zID0gWwogICAgICAgICBbe2luaXRpYWw6IDEwLCBlbGVtZW50OiAiaTMy
In0sCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAx
OCAvIDIzOiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTEgKGV2YWx1YXRpbmcg
J25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwK
LSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2IC8g
MzQ6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtMSAoZXZhbHVhdGluZyAnbmV3
IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKKyAg
ICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE4OiBUYWJs
ZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTEgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3Nl
bWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKKyAgICAgICAgICJX
ZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2OiBUYWJsZSB0eXBlIHNo
b3VsZCBiZSBhbnlmdW5jLCBnb3QgLTEgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1
bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCiAgICAgICAgIFt7aW5pdGlhbDog
MTAsIGVsZW1lbnQ6ICJmMzIifSwKLSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24n
dCBwYXJzZSBhdCBieXRlIDE4IC8gMjM6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdv
dCAtMyAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2Vt
Ymx5KCkuZ2V0KCkpJykiLAotICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBh
cnNlIGF0IGJ5dGUgMjYgLyAzNDogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC0z
IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHko
KS5nZXQoKSknKSJdLAorICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNl
IGF0IGJ5dGUgMTg6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtMyAoZXZhbHVh
dGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkp
JykiLAorICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUg
MjY6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtMyAoZXZhbHVhdGluZyAnbmV3
IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKICAg
ICAgICAgW3tpbml0aWFsOiAxMCwgZWxlbWVudDogImY2NCJ9LAotICAgICAgICAgIldlYkFzc2Vt
Ymx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTggLyAyMzogVGFibGUgdHlwZSBzaG91
bGQgYmUgYW55ZnVuYywgZ290IC00IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxl
KGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCi0gICAgICAgICAiV2ViQXNzZW1ibHku
TW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyNiAvIDM0OiBUYWJsZSB0eXBlIHNob3VsZCBi
ZSBhbnlmdW5jLCBnb3QgLTQgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVp
bGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9k
dWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxODogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVu
YywgZ290IC00IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2Vi
QXNzZW1ibHkoKS5nZXQoKSknKSIsCisgICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNu
J3QgcGFyc2UgYXQgYnl0ZSAyNjogVGFibGUgdHlwZSBzaG91bGQgYmUgYW55ZnVuYywgZ290IC00
IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHko
KS5nZXQoKSknKSJdLAogICAgICAgICBbe2luaXRpYWw6IDEwLCBlbGVtZW50OiAiaTY0In0sCi0g
ICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxOCAvIDIz
OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTIgKGV2YWx1YXRpbmcgJ25ldyBX
ZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKLSAgICAg
ICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2IC8gMzQ6IFRh
YmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtMiAoZXZhbHVhdGluZyAnbmV3IFdlYkFz
c2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKKyAgICAgICAg
ICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE4OiBUYWJsZSB0eXBl
IHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTIgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5N
b2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKKyAgICAgICAgICJXZWJBc3Nl
bWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2OiBUYWJsZSB0eXBlIHNob3VsZCBi
ZSBhbnlmdW5jLCBnb3QgLTIgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVp
bGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCiAgICAgICAgIFt7aW5pdGlhbDogMTAsIG1h
eGltdW06IDIwLCBlbGVtZW50OiAiaTMyIn0sCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxl
IGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxOCAvIDI0OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlm
dW5jLCBnb3QgLTEgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5X
ZWJBc3NlbWJseSgpLmdldCgpKScpIiwKLSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9l
c24ndCBwYXJzZSBhdCBieXRlIDI2IC8gMzU6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMs
IGdvdCAtMSAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFz
c2VtYmx5KCkuZ2V0KCkpJykiXSwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24n
dCBwYXJzZSBhdCBieXRlIDE4OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTEg
KGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgp
LmdldCgpKScpIiwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBh
dCBieXRlIDI2OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTEgKGV2YWx1YXRp
bmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScp
Il0sCiAgICAgICAgIFt7aW5pdGlhbDogMTAsIG1heGltdW06IDIwLCBlbGVtZW50OiAiZjMyIn0s
Ci0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxOCAv
IDI0OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTMgKGV2YWx1YXRpbmcgJ25l
dyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKLSAg
ICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2IC8gMzU6
IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtMyAoZXZhbHVhdGluZyAnbmV3IFdl
YkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKKyAgICAg
ICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE4OiBUYWJsZSB0
eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTMgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJs
eS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKKyAgICAgICAgICJXZWJB
c3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2OiBUYWJsZSB0eXBlIHNob3Vs
ZCBiZSBhbnlmdW5jLCBnb3QgLTMgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUo
YnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCiAgICAgICAgIFt7aW5pdGlhbDogMTAs
IG1heGltdW06IDIwLCBlbGVtZW50OiAiZjY0In0sCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9k
dWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxOCAvIDI0OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBh
bnlmdW5jLCBnb3QgLTQgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRl
ci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKLSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUg
ZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2IC8gMzU6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1
bmMsIGdvdCAtNCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldl
YkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9l
c24ndCBwYXJzZSBhdCBieXRlIDE4OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3Qg
LTQgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJs
eSgpLmdldCgpKScpIiwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJz
ZSBhdCBieXRlIDI2OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTQgKGV2YWx1
YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgp
KScpIl0sCiAgICAgICAgIFt7aW5pdGlhbDogMTAsIG1heGltdW06IDIwLCBlbGVtZW50OiAiaTY0
In0sCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAx
OCAvIDI0OiBUYWJsZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTIgKGV2YWx1YXRpbmcg
J25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwK
LSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2IC8g
MzU6IFRhYmxlIHR5cGUgc2hvdWxkIGJlIGFueWZ1bmMsIGdvdCAtMiAoZXZhbHVhdGluZyAnbmV3
IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKKyAg
ICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE4OiBUYWJs
ZSB0eXBlIHNob3VsZCBiZSBhbnlmdW5jLCBnb3QgLTIgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3Nl
bWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKKyAgICAgICAgICJX
ZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2OiBUYWJsZSB0eXBlIHNo
b3VsZCBiZSBhbnlmdW5jLCBnb3QgLTIgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1
bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIl0sCiAKICAgICAgICAgW3tpbml0aWFs
OiAxMCwgbWF4aW11bTogOSwgZWxlbWVudDogImFueWZ1bmMifSwKLSAgICAgICAgICJXZWJBc3Nl
bWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDIxIC8gMjQ6IHJlc2l6YWJsZSBsaW1p
dHMgaGFzIGEgaW5pdGlhbCBwYWdlIGNvdW50IG9mIDEwIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiBp
dHMgbWF4aW11bSA5IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIu
V2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRv
ZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyOSAvIDM1OiByZXNpemFibGUgbGltaXRzIGhhcyBhIGluaXRp
YWwgcGFnZSBjb3VudCBvZiAxMCB3aGljaCBpcyBncmVhdGVyIHRoYW4gaXRzIG1heGltdW0gOSAo
ZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCku
Z2V0KCkpJykiXSwKKyAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBh
dCBieXRlIDIxOiByZXNpemFibGUgbGltaXRzIGhhcyBhIGluaXRpYWwgcGFnZSBjb3VudCBvZiAx
MCB3aGljaCBpcyBncmVhdGVyIHRoYW4gaXRzIG1heGltdW0gOSAoZXZhbHVhdGluZyAnbmV3IFdl
YkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAorICAgICAg
ICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjk6IHJlc2l6YWJs
ZSBsaW1pdHMgaGFzIGEgaW5pdGlhbCBwYWdlIGNvdW50IG9mIDEwIHdoaWNoIGlzIGdyZWF0ZXIg
dGhhbiBpdHMgbWF4aW11bSA5IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1
aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAogICAgICAgICBbe2luaXRpYWw6IDEsIG1h
eGltdW06IDAsIGVsZW1lbnQ6ICJhbnlmdW5jIn0sCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9k
dWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAyMSAvIDI0OiByZXNpemFibGUgbGltaXRzIGhhcyBh
IGluaXRpYWwgcGFnZSBjb3VudCBvZiAxIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiBpdHMgbWF4aW11
bSAwIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1i
bHkoKS5nZXQoKSknKSIsCi0gICAgICAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFy
c2UgYXQgYnl0ZSAyOSAvIDM1OiByZXNpemFibGUgbGltaXRzIGhhcyBhIGluaXRpYWwgcGFnZSBj
b3VudCBvZiAxIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiBpdHMgbWF4aW11bSAwIChldmFsdWF0aW5n
ICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJd
LAorICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjE6
IHJlc2l6YWJsZSBsaW1pdHMgaGFzIGEgaW5pdGlhbCBwYWdlIGNvdW50IG9mIDEgd2hpY2ggaXMg
Z3JlYXRlciB0aGFuIGl0cyBtYXhpbXVtIDAgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5N
b2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKScpIiwKKyAgICAgICAgICJXZWJBc3Nl
bWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI5OiByZXNpemFibGUgbGltaXRzIGhh
cyBhIGluaXRpYWwgcGFnZSBjb3VudCBvZiAxIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiBpdHMgbWF4
aW11bSAwIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNz
ZW1ibHkoKS5nZXQoKSknKSJdLAogICAgICAgICBbe2luaXRpYWw6IDIqKjMyIC0gMSwgbWF4aW11
bTogMioqMzIgLSAyLCBlbGVtZW50OiAiYW55ZnVuYyJ9LAotICAgICAgICAgIldlYkFzc2VtYmx5
Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjkgLyAzMjogcmVzaXphYmxlIGxpbWl0cyBo
YXMgYSBpbml0aWFsIHBhZ2UgY291bnQgb2YgNDI5NDk2NzI5NSB3aGljaCBpcyBncmVhdGVyIHRo
YW4gaXRzIG1heGltdW0gNDI5NDk2NzI5NCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1v
ZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAotICAgICAgICAgIldlYkFzc2Vt
Ymx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzcgLyA0MzogcmVzaXphYmxlIGxpbWl0
cyBoYXMgYSBpbml0aWFsIHBhZ2UgY291bnQgb2YgNDI5NDk2NzI5NSB3aGljaCBpcyBncmVhdGVy
IHRoYW4gaXRzIG1heGltdW0gNDI5NDk2NzI5NCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5
Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKKyAgICAgICAgICJXZWJB
c3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI5OiByZXNpemFibGUgbGltaXRz
IGhhcyBhIGluaXRpYWwgcGFnZSBjb3VudCBvZiA0Mjk0OTY3Mjk1IHdoaWNoIGlzIGdyZWF0ZXIg
dGhhbiBpdHMgbWF4aW11bSA0Mjk0OTY3Mjk0IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHku
TW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSIsCisgICAgICAgICAiV2ViQXNz
ZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAzNzogcmVzaXphYmxlIGxpbWl0cyBo
YXMgYSBpbml0aWFsIHBhZ2UgY291bnQgb2YgNDI5NDk2NzI5NSB3aGljaCBpcyBncmVhdGVyIHRo
YW4gaXRzIG1heGltdW0gNDI5NDk2NzI5NCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1v
ZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKICAgICAgICAgW3tpbml0aWFs
OiAyKiozMSwgZWxlbWVudDogImFueWZ1bmMifSwKLSAgICAgICAgICJXZWJBc3NlbWJseS5Nb2R1
bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI0IC8gMjc6IFRhYmxlJ3MgaW5pdGlhbCBwYWdlIGNv
dW50IG9mIDIxNDc0ODM2NDggaXMgdG9vIGJpZywgbWF4aW11bSAxMDAwMDAwMCAoZXZhbHVhdGlu
ZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJyki
LAotICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzIg
LyAzODogVGFibGUncyBpbml0aWFsIHBhZ2UgY291bnQgb2YgMjE0NzQ4MzY0OCBpcyB0b28gYmln
LCBtYXhpbXVtIDEwMDAwMDAwIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1
aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSknKSJdLAorICAgICAgICAgIldlYkFzc2VtYmx5Lk1v
ZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMjQ6IFRhYmxlJ3MgaW5pdGlhbCBwYWdlIGNvdW50
IG9mIDIxNDc0ODM2NDggaXMgdG9vIGJpZywgbWF4aW11bSAxMDAwMDAwMCAoZXZhbHVhdGluZyAn
bmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpJykiLAor
ICAgICAgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzI6IFRh
YmxlJ3MgaW5pdGlhbCBwYWdlIGNvdW50IG9mIDIxNDc0ODM2NDggaXMgdG9vIGJpZywgbWF4aW11
bSAxMDAwMDAwMCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldl
YkFzc2VtYmx5KCkuZ2V0KCkpJykiXSwKICAgICBdOwogCiAgICAgZm9yIChjb25zdCBkIG9mIGJh
ZERlc2NyaXB0aW9ucykgewpAQCAtMTg2LDcgKzE4Niw3IEBAIGZ1bmN0aW9uIGFzc2VydEJhZFRh
YmxlSW1wb3J0KHRhYmxlRGVzY3JpcHRpb24sIG1lc3NhZ2UpIHsKICAgICAgICAgLkZ1bmN0aW9u
KCkuRW5kKCkKICAgICAgICAgLkNvZGUoKQogICAgICAgICAuRW5kKCk7Ci0gICAgYXNzZXJ0LnRo
cm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5n
ZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vz
bid0IHBhcnNlIGF0IGJ5dGUgMzkgLyA0ODogQ2Fubm90IGhhdmUgbW9yZSB0aGFuIG9uZSBUYWJs
ZSBmb3Igbm93Iik7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9k
dWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJv
ciwgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzk6IENhbm5vdCBo
YXZlIG1vcmUgdGhhbiBvbmUgVGFibGUgZm9yIG5vdyIpOwogfQogCiAKZGlmZiAtLWdpdCBhL0pT
VGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9EYXRhLmpzIGIvSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0
X0RhdGEuanMKaW5kZXggY2NhMGNmM2JjNDVkMGY0ZGQzM2JkOWNhNTk3OTg5NTRkMmQ0NWIxOC4u
NDE3MTQzNTEyOGEwODRkNTk0OWQ4ZmYyYjhiMTI1NzBiN2YyMzM3NSAxMDA2NDQKLS0tIGEvSlNU
ZXN0cy93YXNtL2pzLWFwaS90ZXN0X0RhdGEuanMKKysrIGIvSlNUZXN0cy93YXNtL2pzLWFwaS90
ZXN0X0RhdGEuanMKQEAgLTUyLDcgKzUyLDcgQEAKICAgICAgICAgICAuU2VnbWVudChbMHhmZl0p
Lk9mZnNldCgwKS5FbmQoKQogICAgICAgICAuRW5kKCk7CiAgICAgY29uc3QgYmluID0gYnVpbGRl
ci5XZWJBc3NlbWJseSgpLmdldCgpOwotICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFz
c2VtYmx5Lk1vZHVsZShiaW4pLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsIGBXZWJBc3NlbWJs
eS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE1IC8gMjA6IDB0aCBEYXRhIHNlZ21lbnQg
aGFzIGluZGV4IDAgd2hpY2ggZXhjZWVkcyB0aGUgbnVtYmVyIG9mIE1lbW9yaWVzIDBgKTsKKyAg
ICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKSwgV2ViQXNz
ZW1ibHkuQ29tcGlsZUVycm9yLCBgV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQg
Ynl0ZSAxNTogMHRoIERhdGEgc2VnbWVudCBoYXMgaW5kZXggMCB3aGljaCBleGNlZWRzIHRoZSBu
dW1iZXIgb2YgTWVtb3JpZXMgMGApOwogfSkoKTsKIAogKGZ1bmN0aW9uIEVtcHR5RGF0YVNlY3Rp
b25XaXRob3V0TWVtb3J5KCkgewpAQCAtNjIsNyArNjIsNyBAQAogICAgICAgICAgIC5TZWdtZW50
KFtdKS5PZmZzZXQoMCkuRW5kKCkKICAgICAgICAgLkVuZCgpOwogICAgIGNvbnN0IGJpbiA9IGJ1
aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKLSAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBX
ZWJBc3NlbWJseS5Nb2R1bGUoYmluKSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCBgV2ViQXNz
ZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxNSAvIDE5OiAwdGggRGF0YSBzZWdt
ZW50IGhhcyBpbmRleCAwIHdoaWNoIGV4Y2VlZHMgdGhlIG51bWJlciBvZiBNZW1vcmllcyAwYCk7
CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbiksIFdl
YkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgYFdlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNl
IGF0IGJ5dGUgMTU6IDB0aCBEYXRhIHNlZ21lbnQgaGFzIGluZGV4IDAgd2hpY2ggZXhjZWVkcyB0
aGUgbnVtYmVyIG9mIE1lbW9yaWVzIDBgKTsKIH0pKCk7CiAKIChmdW5jdGlvbiBEYXRhU2VjdGlv
bkJpZ2dlclRoYW5NZW1vcnkoKSB7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vanMtYXBpL3Rl
c3RfU3RhcnQuanMgYi9KU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfU3RhcnQuanMKaW5kZXggYjQ0
NDU2OTMyZDkwYjVjODMzMTQ1ZWMzZjM0MmZjNTA0NmY3OWUwYi4uNWMzMTUwZTFjYWJlYmZiODQz
MzNlZjcxNDIzYTg4ODZjZGUwZWFlOCAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2pzLWFwaS90
ZXN0X1N0YXJ0LmpzCisrKyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9TdGFydC5qcwpAQCAt
MzEsNSArMzEsNSBAQAogICAgICAgICAuU3RhcnQoMCkuRW5kKCkgLy8gSW52YWxpZCBpbmRleC4K
ICAgICAgICAgLkNvZGUoKS5FbmQoKTsKICAgICBjb25zdCBiaW4gPSBiLldlYkFzc2VtYmx5KCku
Z2V0KCk7Ci0gICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJp
biksIEVycm9yLCBgV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxNyAv
IDIwOiBTdGFydCBpbmRleCAwIGV4Y2VlZHMgZnVuY3Rpb24gaW5kZXggc3BhY2UgMCAoZXZhbHVh
dGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pJylgKTsKKyAgICBhc3NlcnQudGhyb3dz
KCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKSwgRXJyb3IsIGBXZWJBc3NlbWJseS5N
b2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDE3OiBTdGFydCBpbmRleCAwIGV4Y2VlZHMgZnVu
Y3Rpb24gaW5kZXggc3BhY2UgMCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShi
aW4pJylgKTsKIH0pKCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfYmFz
aWNfYXBpLmpzIGIvSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X2Jhc2ljX2FwaS5qcwppbmRleCAw
OGU3NGFhMzI0YTcxNzg4ZTU4MTljNGE4YmJlNzc0NzU4NWIxYTg5Li4xYTJkMjIyMTAzMDQ1MWRm
MDY0NWIzMGVhMzFiYjI3NDhmNTUzNmQwIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vanMtYXBp
L3Rlc3RfYmFzaWNfYXBpLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9iYXNpY19h
cGkuanMKQEAgLTY3LDcgKzY3LDcgQEAKICAgICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4g
bmV3IFdlYkFzc2VtYmx5W2NdKGludmFsaWQpLCBUeXBlRXJyb3IsIGBmaXJzdCBhcmd1bWVudCBt
dXN0IGJlIGFuIEFycmF5QnVmZmVyVmlldyBvciBhbiBBcnJheUJ1ZmZlciAoZXZhbHVhdGluZyAn
bmV3IFdlYkFzc2VtYmx5W2NdKGludmFsaWQpJylgKTsKICAgICAgICAgZm9yIChjb25zdCBidWZm
ZXIgb2YgW25ldyBBcnJheUJ1ZmZlcigpLCBuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKCkp
LCBuZXcgSW50OEFycmF5KCksIG5ldyBVaW50OEFycmF5KCksIG5ldyBVaW50OENsYW1wZWRBcnJh
eSgpLCBuZXcgSW50MTZBcnJheSgpLCBuZXcgVWludDE2QXJyYXkoKSwgbmV3IEludDMyQXJyYXko
KSwgbmV3IFVpbnQzMkFycmF5KCksIG5ldyBGbG9hdDMyQXJyYXkoKSwgbmV3IEZsb2F0NjRBcnJh
eSgpXSkKICAgICAgICAgICAgIC8vIEZJWE1FIHRoZSBmb2xsb3dpbmcgc2hvdWxkIGJlIFdlYkFz
c2VtYmx5LkNvbXBpbGVFcnJvci4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2Mzc2OAotICAgICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1i
bHlbY10oYnVmZmVyKSwgRXJyb3IsIGBXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBh
dCBieXRlIDAgLyAwOiBleHBlY3RlZCBhIG1vZHVsZSBvZiBhdCBsZWFzdCA4IGJ5dGVzIChldmFs
dWF0aW5nICduZXcgV2ViQXNzZW1ibHlbY10oYnVmZmVyKScpYCk7CisgICAgICAgICAgICBhc3Nl
cnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseVtjXShidWZmZXIpLCBFcnJvciwgYFdlYkFz
c2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMDogZXhwZWN0ZWQgYSBtb2R1bGUg
b2YgYXQgbGVhc3QgOCBieXRlcyAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5W2NdKGJ1ZmZl
ciknKWApOwogICAgICAgICBhc3NlcnQuaW5zdGFuY2VvZihuZXcgV2ViQXNzZW1ibHlbY10oZW1w
dHlNb2R1bGVBcnJheSksIFdlYkFzc2VtYmx5Lk1vZHVsZSk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgIkluc3RhbmNlIjoKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvdmVyc2lv
bi5qcyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvdmVyc2lvbi5qcwppbmRleCA4MWNkN2ZmMDEyMmZi
MjFjZTkxZjgwZmI1MWU0YzY5ZTE0NTk4YzQ3Li4wNDg2ZmNmZGRlZmQwODIxZDM5MjQ2Y2I2NDA4
NzM0YmZlYmYyMmUyIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vanMtYXBpL3ZlcnNpb24uanMK
KysrIGIvSlNUZXN0cy93YXNtL2pzLWFwaS92ZXJzaW9uLmpzCkBAIC01LDUgKzUsNSBAQAogICAg
IGlmICh2ZXJzaW9uID09PSAxKQogICAgICAgICBjb250aW51ZTsKICAgICBjb25zdCBlbXB0eU1v
ZHVsZUFycmF5ID0gVWludDhBcnJheS5vZigweDAsIDB4NjEsIDB4NzMsIDB4NmQsIHZlcnNpb24s
IDB4MDAsIDB4MDAsIDB4MDApOwotICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2Vt
Ymx5Lk1vZHVsZShlbXB0eU1vZHVsZUFycmF5KSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCBg
V2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3QgcGFyc2UgYXQgYnl0ZSA4IC8gODogdW5leHBlY3Rl
ZCB2ZXJzaW9uIG51bWJlciAke3ZlcnNpb259IGV4cGVjdGVkIDFgKTsKKyAgICBhc3NlcnQudGhy
b3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoZW1wdHlNb2R1bGVBcnJheSksIFdlYkFz
c2VtYmx5LkNvbXBpbGVFcnJvciwgYFdlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0
IGJ5dGUgODogdW5leHBlY3RlZCB2ZXJzaW9uIG51bWJlciAke3ZlcnNpb259IGV4cGVjdGVkIDFg
KTsKIH0KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9zdHJlc3MvbmFtZVNlY3Rpb24ud2FzbSBi
L0pTVGVzdHMvd2FzbS9zdHJlc3MvbmFtZVNlY3Rpb24ud2FzbQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNGIyMmIx
YWVlYTM4ZTQ2OWMzMjYwYmEzNGQ1ZGE0YTZkYjEyMTUzCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJh
bCAxMzQwOQp6Y21iVzhPTj9BdWRCQEx2UmFNdW0+TW9DTT0kWX4wZCM/PWBGd2deb0tfakkyZ3hH
XklXKFlHMnZaYHImWTZlJWcKei1SfGxkISQ+SUlBJmBzfHFDfkprKGQ0bH0xZCVMUUJvWWZHdFVS
UGRWITxNalNmR2VTQjFPdUUjWUQ9MldiKnJlCno9aVlqQl9lPXVnPkFKNlQmLXZjcHxOSEt9Wmdj
Tlc8ZVpFQzteNSVHYilITjFfeEdkeT1PWD5ZYH0+WVBfbmhPdgp6SVVUYztHSjxYVnJRaGE7KTUr
LVd7bmNPbGpaZ1UtKkZOXl8pMU14R2BxfEdVYCVZJiYmcGhpdGNBYXplQHJvU30Kelp9YHZGQyRp
MChKQ210UEdgSyZ5eVMrSmlhZGN5SlhKXylWT0tzWDBON0g5X3JrbVN+QypOdX1KJD82TW58SlQt
CnpPck0oVWUxN3JqVFpXQE1kJCVVSD9AZFF7aGomSklacnl1JWM9UHMpJklvRGBocntpaVRVJWtw
KS1XdWVYe25xYAp6ZCF5LTwkPmRXejtqKjIxZEdGVGRfVnkqJEc3PmM9b08lMy1qY34zdCtgR05L
e2ohVFJwZj99enAobiFpNjs4YyQKemNmTSRVS0lIS3k+VW1xeDNEMHFLNUZmO3ZDITIyRysjV151
cUwhYE80Y0M4bGI4cG0wKGdyanF6OXElSUp4WUB9CnpQU1N8flF1Rzw2RFZyIXNHZnBIS1hJa3la
d2Y8Q05UbD4qRG0tNz9wQys1Zk51PSMwIWBBWkJzKiZnMTNfbmxrcgp6VUFnb3l4XndSe3F2P2hf
KWdIZF4hdUNzaHBMNmZiQ29rUm9edj5TJm5iQ0M1eShkUzB2ciM4Y2pgbD80P1krLUUKekd1Xnpr
Xn59QV5UTylVM2dfOWc/LVhGTyY9MHtoZnNlNWxXK2BCcDFhdSorNlIzMiolVSk8aWd4dyQ+dXpK
MnFTCnpkKVVVS1B4cnBBJkVrIT8pc0J8XisrXzU1X2ZVSXlaKnd4KW5ZIzZDX2ArbH5hX3tjaCRq
P0JfJlNjflVDeUBTVgp6R1AlMVdHdVdLby1ucn1FKV93a0VZLXhMWWM+QV97ZXtYKWs7bHwyV0M5
Y1N3T1lfI19rOT9weV5Kdz80ZTxFVDMKemlKaXY+X1JxRC09dj1GQzxNWFheRXgkSlFfamI+PmlZ
VSomdFJlMVBFQl90YURjdCMxe2A8QllVKURocG9wMHkpCnpBQkl0I0UyJk8pSUp1SX5AOH53T2Ju
YCNaeihefD1acU98d0V3T2EmXmZCayZhP0g4NmhJMyFCaDVjKll7SlM9RAp6Sm1iWD07SDhNRnhO
c05aan1GUjl2R2M3VzkmYHFlbEAwPTdIcVpaQ0NXODV4MDVVaz0mYGxabG1mOTVLRGsrPmwKekdw
PCVII0k4ITJxdEo7ezxFcVB2QkhoeHRseWxMZ3hXZ3ZDNiEoZyhpV3V8SmFuKW10WmkkTFNxYXg0
Y1BKOWBgCnpyQTBpaFF2V3NoQU1eKjBSbmdWSF5Lc2N1RTtHdH4zTW4jdHQ3SzsxOEpFYmpOR2At
Xyl4VGNsVDxlcmNVZ1pBbAp6KVNyRStYcGhTX0R8MX43PD5gTFcmdjFkUURqRk5QSns/emBxR09s
MGJmIzRfYmhRRnF0KWVhSmpodDNQUFRXSD8KenVtSjt1Vm5yS1FiaT45O3FSdGwrb29vQn1ZUCM9
VFI+VmYqUiRsN1ghVWtRR0JyZTFvUHtKZTw1fGh7X0ZFUnVqCno9bFE9YXN4M3RXZyoxPiM/eDs7
U0J3QlNyIztMXjVzYX14eHo8KDkjM3wwbkBkR35SK2NZZEZ7e0M7THM9SUE7Tgp6eThhX0c2fE5z
VmNSayU3eXY7K1IxWSQkO3sxdi1BSU9gdnthYyFASUJDcVoxcGlgZzFYI1Q/fVBKKyRNREp+TnYK
emh+MlFSTjhSVXhrUkdeUWBOU2VPVTtqMzg1SS00R19tYGt1SSkjaVUtRjFsXkV5amFLPVgzYFRN
NVd9WjFCYlFOCno/eml2JURqI0oyYCsxKUt1M2diX0ZhUEZtRilFVEQkVSF5cGg0Xzx4fEM4RHFU
cXM+SFd7dHRRRDx6Sj5GXmVJegp6MiZ4Qz9hbUxiUnslNWpuYlpYbmRKN3JDIThAISM5UmdfKiVG
ajFURjZTe0EzJk13Q35jUz04SnVDcWB5eEtPeEIKej4yZkM1KGZNNExLMmsrfWR+V2EjYWhkMEA4
bGtQNFAkYHUkNG5nMjxGPyU9cUleZHI7SVBhNVBBQ0ZIc19sVHgpCnp4WFpxb25hbz9aVSFASDBq
SF51aHQhdl5JQThLdVJ2JW19VStnVXBwYnNWZjJmMExFTCM/MDZsa1hKN00qN3FkSQp6KD9RWEZP
dyVHdHpaXilne3khc0kjT0d1R2gyMWp0NHwxKkM9MVA3STtTSCk3bSZrb2B6akY3aGchTGdRQHpK
aTIKel82VzA4PGRkb1lfWihKNWIqZyppPnM1PEFiZFBlYnJrOXglMk9+Jkt7cj11QV5yMHNJQlEz
PCpnTyp0NzEodTcxCno7UlAjLTJ9R2Y+NDlHRHZ0eUUhP3hUfnpyalVfU3slcmkwez8mQmI+SEko
SzUhSSlUKzRpbyhxWnQ1WExfakFZQQp6V1ZoYmdfNHxuM193TV9fRjRRdGtKWkFUT1hJRn10YTMr
T3VBSyYtc1prMD8+aDZMZkdgI3dIJjlMPGd1NW9AN2oKejVgfChHdiQ3fEhXRXI/JDVLM3g3c1Q1
Uj42Xm8pPTVET3QkVihGTXppZ3A8X3FLUml4QXNsRDtaISNAblYhREBICnpRcjFoeWckNGFKYm4j
RDs0UExWKm91V2B2QTU9dnMybm1+bCU+Pk9IcVhqKT5NTjtBY1doPjk1UUhHbj9ISkl+YAp6Xjk4
fmVpRylOMnd6ejAxQXxyV0BhPHBQcEt0VyhjYHMlTGJ7X2pqJWlYT1JsTVpXY0JURVB2Wm1GTzRP
aWpTeE0KelhaXjkxZiM7PUlKMkUyTE1maWghYWQzcVpjQTAzQ1QkVytnZ0RNaXR3VzxTc0VvQ2gy
eEtnPTZjUVMwQFBKQkkpCnplQyhJMCZCJmBrWlJVN0A2NlZVJiFSbEZiejNrekk/RFElJEFscmA9
S31fXmM1bShnQjU0fGhYVVh0ZWBQdmd3QQp6eCh3XjBLKzxVbENFUmgkMV5HfVExbk5TUlVeWWwp
XiR2TmVBcmZ+OF9aUUpxamQjfHo4emAqcHVkQSU8a1ZJLWAKem44UWE7MVolIUNAKTtBaShKc0Y1
Qm4/a3QzV2NMLUd9KGokU2p2anRsQk0rfFRURmlkNzFCI3tjT1VMQ0BGM1R1CnptVE93e0YyKERu
I0w3fHlgViMzRnpEI2RgK3BfcE5jUzc1I0ZsMT5wOCtLfG9qRGJXK3JocHF2bkpgbTM3JklSVgp6
SXx6YDc2VDtGOF9YVkcwWiFHSX4jb1h1OEJSOzJ+Yyt9X09DRUFqNXdUUjBzXyM2O3Y/c0thTUtn
KX5OQVJDeUsKeiYqQVFkZzYyTGFEJiV1M1oxWH0rN3Zac00xWC0tUGBFfnZXYC1EcnNVbll0fDFh
emwta2stIUdMS2dUclVQcmJ9Cnp7cCt2NC1VZlg1dmtFcWwhTEBfYGBJV0lCU21ZJG1NKmlUWlhZ
SDd7aVRfVXxCISVDRDEzKT4kMiVwaHBpI3kyKQp6WXhsS1Vkd2lkPyFjNVYwMDwkRlI2Q1M7N2x+
SF9JfEI0ZH05Km1hIyE8Pm9rWjxSNCNBeClwflhCIUJZUGZKMmMKejhPdSo8SHdOUmI3TUFOKTti
cGFxNU1Jbk8hVmhLQyVne01QUGdNX0hESVM2ZHRQZi1nb2dwTndVWSk+cm1LNl5QCnppNlFlVlJZ
bkc2bklofEpoS3dtKSYqazZfUzJ8NnIzOWw2S20wZk9aayRwfXFXKkBuQmlvZG9NTUcjK3pkR1Ji
MAp6RzM5K3lZUkUoPVdJXzxsPH1vaTtDV19+b1h6Nz90UjNERyQ1LVh2TGQ3dntFMmJwWGUpLXpa
S0cpMF5qJDs2TEAKejN2LWIle0YtNilqSHtxPi1HdmJ5amhSM3FTKmd0dTs4R1R7RmRDRjIpaXp6
TiktRF52NWMjX2FnI2V9WFFYenlMCnpnK2pvJT95MTM0V3VZKXVEMTxnPWhsc2VkN3oma0pEK1Fu
KT5ge0A7TGc2dE5sKUN+VXUtPTVpaihrQyh1KD44Uwp6MzVCfTloITtibFduYG5VRD0lfEpGTyZw
T0d6KjBpNitBQTVMZVh2XnpVYiZLUmhiSGZncDR7QVIqSSs9NEQrUUIKemtlZkx3N3soek8maEEl
Nj5aTCZFcUVwOTJuWWJXVHJecG8ocDxxelEjQmUxR18oM3N8U3JpaSlhJEhRYkZ0Mz1YCnpWVjMh
X2c8dDg0YHFFVHUwMFIjV0YlWil8Q1B0I3xTJllQVTQ0MTRGKipHQTkzQG4wMlg4c2A3ajE4Izdr
cGRofAp6NUslLV81JV8jI1lfZilOd25MbUd0PFU0KzhkaXk7dHl1JnQrUz5GZTxFJmEtdXtmej4w
PDBGb1RlY1k5dmowMjAKejhCbU9oXmNNX28jS0AyJHV+KH1wJnJxTFk7aShLVk1PPGNESFJxfHlG
QndaeHE9QikoakZHPzJ7V1ZXKUkjd0JCCnpZRG4qNE01eiEtaztZeVY5dXZaMjVgcnE7LVVQXyhE
dUltVXJZT1NWVXNBYHZ4LVBsV00rZDQ3TCE1KEBCXnlvTgp6Z3JIUGBCYEQ3UHg0eUdWcFRAaz5y
PiYkMjk3TjQ1Y3RRdVprTzhXYURBdDIoZyM7RmQxViNrS1kzSU5BS0BJKWsKejFkdnJAVUVIQHdY
ZTQrUTFqPllmR3p1MWNPXzA+OGM/IVNVREFAeEolMEMkdU9qZVExdzg2YldFNmlBMUdrYSQzCnpw
PnR0IylKYXgkM2JfNURmbV9uTio4WlUpazRWd2xLaEY3SVFFTnNIYlQod243UG98NSYtSU5waExk
KnhPeHVpJgp6S1BXV1F0SWZfZypGeDllK3g3TUAqODwlP1VrITgqaVVBIWx8S3NvY15MTWc2SDZO
VisySHY2Vkt8IXF1JE0yX2gKenFsb2JFemcxWm9sLSQ3VWZEUFdrJlZRe00jcWpibytwe1IlRjUo
O2JtQWdLZmtDYzZFKDlAQmZgSlpibkJeMDswCnpHUmxKT0hRWm1KMnRIVS12TD5id2o5aTY9dzVC
UkthKWV8d1g3V0JaI058I0VfYWtmXmsxZTlEMHVtIVI/Q1dpZAp6OUR8RStwLUJxNlAyclhqYD5C
Ml9RKFY+Uklybjt9YWVrbDZNaTNJenkwT1laYXVfYClfPlpAQ1N3S20kQW5AIUwKekxKTUZ8KXgz
ZkNZfEtTejdPZSNlIzkpdytpVWpWdyFCMG5HKEp9QHlCMzMzdVVoUmBAQEZhc0V3NWE0RD9JTX5f
CnpXbn1NSypKVnk5IS1ANyMwZnlUT1c+OF4mTWt+fUM1bHtESFBDJlQyZ2NwcytxQlhlcWglcVYp
OCQkXnc4bF5PUAp6UUE4MXtvezJGdkBrbUpWSDZzS34+XzQ+JjklS1VTTFZAREtfPEdlNm0hVEJl
enA2eUdIKD9ybjJeTH1ySz9QWnsKenN5UTY8eWUzPGFHclJfXyl4eXxFQEI/TnVMeSZuUz1xKHJu
T1VlcVlBPGBMTkI/e0Y+OzduKjdeZUVRX3NBej49Cno8MGt8Wjx2RDh8MWBoPHVRa0xTOVJsTWNm
NiNKfHhZfGxRYiNoR3dKYnVyYCRjcXdnNV95bUA2RVM2YCVmIXViMQp6QGEldCpgKXx1O3hFfUl2
LU94Wl9hUGNFN1NhJTlqITNRRUl3WEt6RCY2KE9IMUBWQG9BJHZ8fkNyU1N0R158KWIKekxUblcw
PE59UWslckt7eks+SUt1bzxmVms0c0VIeFAlMnZtVUo+WU10MEllVitIa2NAZH1XSTtMXz9NVkEm
fHdTCnpeUChreF8rY0hoM1lNfFJmU15jfnZgOEI8V0dyZjMxUHYhTlRETjYzb2NPdnRUc1B2c2w5
YlhjOzFidVA0TXdARQp6SFlaZ0VnYk0mNTkoRG8qVXwzSHtPNSs4fFctUyM1NTxAdT52dFNQU2d0
aUV4WWBSM0U9fExXRmdJODlyVFRaT2EKelk7PEBTME1vUUFQRXJUWT1DUz9ec1plQGhmR2JhT2dV
eU05RCshJm5xeVh6ZXM7eGtua2c1JD1yPTREa1ZncGtjCnotWGN7cHphMSVjeVJ5NThSJjd8eUxT
KWx8cCY+c3VfOyZlJWw3MykhcD5YZSNfKUlqLUhOeylkc3dPVjdNWUwrYwp6KDVTP3VyQU00TSpr
KDdSKVNgdkFpWGx5U1l+fGs3Xy07UH1mUHtKdyE3ZGM8N3xzJERQPX5SZzBYVHBWNjtNVUUKenw0
UUcwWVBTWmVQNFY3VW5ZQGxrSFFZUE5lXiRZRk1ZUFo9bGhoU0ZfOUhOfCpoMCtjJDFfZkZISD1l
cyRrb0xMCnozNkhWPW9ZMGo/S344fGpgUUtDPDYzYzlRV2I4RlAyQUx1LXIjOGZTaGIpJDFOdWxL
RVcyKk1MKiNxbi1sOUM+Qgp6Kil0MHwrQTQje3ZQYiRsNzV0Pjk0THxCKGJtU2A+JHlpbHEyU249
NnZhMVk3M1ZlaiE7fGxJJXZFVzhGKSs5VEcKek5FMGkjWTR7eTJ4RF9zUEVPPkBVWCo2N2wmbEdM
Ymlvaz1PYD49N3IwMiYjQDRLQnFhWWgybm16bShjO2M7bjxVCnpFPT4lVjstOHBwZ0ctfWhhY1RQ
SXhITjhYc2o/fmN4Qk90PFQ5JTh5RitwI0hPSm17RXhXPVdYb3Y0fGBhQXtCeQp6IWEqUVF4T0J4
WlV3I1BBKDd6WClBKDBYTENANzI4NDluTzxDZzJGcXE8KT8zcXRLcE9FQyhIK1gtaUk3aH4rZD4K
enJIbWUzYEp6Pks8P1ckYj9BT093Y2pQfXk4PHdkb0xBMWp4JTVyK1JISmhsKU5ER3BQdksmc2JS
YXNBJjk4c3FACnpfS3Yyd0l0QllqPHVvMUdkc3BsfVlgZD83VTdmUyY7PWZFNHJzPTwwTChmOyVM
Ylhldk9ZbSFwaz18NHlJKllFTQp6SGRMcF9iZy0hQ1poQCRBUUYxaG9LaCRsKHo3WE82dVY5UkUo
V1FkWDBgNzhTRWg8an5VUkZaRTJyZGZ0dElUajMKejRfKFFOKTFpUyFEXkN2RVFmYmw9JGRINTUy
bVlsQ00pMVRoKCt8VnZYNl8wOGxZNF42NzQmK0dvPntYI3N+RUFQCnorQjI7a1k0bFVpSCV4SS1l
SDRwfDNsKmNHLWtFMntjeEVLPDVgYkNWQUZfJihVXm9RXlRnNkM7WCZ0a1cxeWd3QAp6PXVrTj5j
O0BvTTFiVkE3cigrNHEzPW8rbUR9VFh5PT1kJkZqQ09uZGo2dCY/a1ZaUX1GMTJUN157dyQwSXJU
TVIKekBmeDFWUG1lZCtmNmJ8alNYWU1wKD4mQnZVXnh0IXgtVUhNMCtxPXNZe01mQ0ZNI1dkcit7
Kzc2WFY3Y2dGaT5YCno2S2pgX2dmfUJSKE5AM3tGfjNrMUxMKEEyUXkxaHIweWU/enBgcyoxKSln
Z3R6aWRVQl5aMXl3PDNmM3Q9WVI5SAp6Zzk4XjA/MiMqfGc9Y0J0R2NndlZQd2M1NSpMXldPQztg
Uypibi16PSFlWCs1RllIIzdNZVNJd1p0YT5fSDNSdlMKelBOVmhMQFQ/KmFiNHhAazBAKzB+dXt1
SSNPYnhzd2JUeSFnTTctLTAjUm5jYUBDV2QqTFBqO2JWMCVHUXVHMmJ0CnpwMjt2QytmYFV1UURP
KUIpYD1ZJDBLJH5yZ1RRZy1UQ2FOT2ZtUiFlZ3ZrcUcmS2g1KWh3eD9BO0xBZilrJDNFSQp6anYt
QVJMP3A4cjRRVSFvMyhkZj9XaVUqY0ZvWVI8UE9gfE9ZNnpqdXpOODkwRHAzdWpEaiYyWUFiWUpO
Z1lYcSoKejZaQ1JiN0VvdT9CaEEhSHdQODhLYT49MT0zM1ZGb0lfODNecWFYeXFKSn41SlJGQmpJ
KT84RWY2NGFedDghMEkrCnpoTjMtQ2lCNUdoQmtNVjgpWStGTkhRTzEyZDtQRlRsIzg9ZyRRZ0Jx
YmNRKlA3cSpeWl5ARHwpZWQtN1IrN3wkSQp6aHg/X0FhOzRgI0AwO3BieU50TH5ebzNqJCYqb3g5
MW9oTSVhUmFhd2ZyNnVPbz5yMjQ5Y0M3WG92TWN8bnVZezgKekh7VX0/JSRGQUpgc3R1cXo2QyNk
NjUxNFhqdDNfIUNRbDBwN0JqMCY5UnZePlM5TmlRQUdKZWFFdDgjOWI7S3pQCnpJc2dNSjFNcS0p
MHZybEVyXmkhd3h0Z3ZRdTB3LUlsZ3cocFcpZjtXdikxX31jeEleZUxoUFZ9cUYwY3R5cmI+SQp6
JlZoQSErajJmWW05PXhgJlMlQmxWd1QzVzwkJiRSMFpBdyNXVEMqRCojd3hHNUQ8SnlOdF8yPGl9
Xi1qU3J4NDsKendKalRTajQtRHJfUjhfckVLWCNpWH0jPH50N3hxMSE4SCFYKXErTigwfGhqTDY/
IV54eFdLYnZXKX4mVmgoTHZfCnpuTjF5WUw4TDgwKjRaTm82P3JEMiNwQGM0JVcwbFFGM2IjVFJC
dHU0bjF9aEFBdSQrajNPek5ZZmFGVjZvO1oqPQp6cU5ZbE5tdClJM3htbz4/cClxb344QmR4QSZ+
ZG9WMUpIKD8oTDlnbm4jVyswX3w7NT8xbnFqUiEofD5yREQkTUkKekNEOXpOXjY7MzE1RUskN0lK
PHU0bmtARHdFYnczckVnRHI0bztuUnxmKzA0MjEpJEhveFRCUz9VUyR4Z3NrbmFQCnpUb1c2VzEz
PUFjSyN0Jj5JZFVaOGFLMEQ+LSZ6ZUpKdDxhJk8+aCRJNDhPbi0hOz1QVTgjV0o4cWhzcWolRnNn
KAp6UWMwKFc+YmxoR0l5eE9rPnBFLXJASkx8Pjk0VHhDOUZxVlhaTnF5JmJ4e3w0SEI3M15jKmlh
YjRea29QQXU5JXcKekY1JHVTMnA7Nl5LTlQlPUpqZXxKNTJ9R2hNbHc3fHU1SXcodlEjWXIwJWp6
cGJ2QmpgWlBUSH03OTI/Ums+K2FmCno7NmtOVl9pMUxjNyM8OFY1OXxnIW44Qjs2aCNDXyZHNFJO
ZTA0PFE7UGdVQCVEe0t5aEorNVdgbTleNUA4eUpCUQp6TEplak4/clZAQEs2fUlNVStmaC1kelZ3
cnNsSVBgQyQofWtWTDVRMEsmPGh7aUlUa1oyUW5RYmtORG84P2YyTDYKemF8OVBUYVdzZk8hRyVh
TWhEKTViOXdqNFNCaFVaWC11ejU/eHI8flBoZFNgfVhxVll6fEY/UHJHbSNtR213SmxtCnpOI3s1
c0IhX3d7XjxNPDhgM0Z3VDt6KUttcjctYVdgKDIrLSUwemI7RXFtIU1tXkF1UDhEPC12NUMkZExN
bS12Pwp6c1JoR140NjRuVXVxbmRrZUFyd0ZuflB6eTVqSWJSJX0ydUtxbWNPa0FzTC1VTUR9cXhx
fjtWMFg/LWNUWWlZUTQKemdnc2pMZEgjPWpGRncrSGopPiZvZnhWVEFTWlIpQCUyNyhqNX1aPDRC
MUkmLWd1fVZpVmd6NTwkUmZKdisrMmJUCnpSViRySV5ebX5vKkZeRytPYGNnR0khSTAtI09TdDE+
cF5+OzE0MmxJPzE4flNuYzVxS1cqMio+Zi1Lb3Y1OGBDKwp6T3BxdmgjaWR3NlckKFBicV5VZ2Ao
LUpMdjdjYSQ8RV8pbDdWaE5iTkNvYVgzRj8lMW02aWR3UEBuWSZzKChvZ1IKekRebXJqIzxmJSU7
IVdzYExpUlJELUFHPX5oPmc9YGEzZGxLM3c9YWQ9YzA/QmJsQVQza3wmKWNFJlZNXzYmNmhECnox
KURqe1AtYClwZUNaJEJFOHlKOTlNU0hIJG1MKFJjU2JvdVRobWsrVWEhbzUmKDZvWihtVE08Xjco
TlRqYFAzUQp6ZlZUN0JVJi1URkd2e0FoJHM7eGctOF9uVEVZezZlQmo7U3EtfWw9NXF8U2RnVD4x
Zk54dk5KZGojbz9iX19mc2kKemBCI2BLeX1ObTU2dXFrNTU0IUx6TVlRfUdNWkNLRjF4NH5rQTVX
eGpAWkNoI2RAfDloem17ayhla2pwZHs2PURCCno+Qz1YZFp2QUNNelZ1Tjxafmk/KmVgKS1zKXJG
VigqWEV4STQzXiZES1hLZXcxck49PjA2NGskM0Jzd3h1TkY+Ywp6IV9rV2A/IUJjb3l0I1I2PWs4
bmk7XjV4cW8lUUJ9ZnJzRGglWSNRJl8wN2lnYFApMGdUaVpLKHFldGgqcFAkXkcKemo/TmUoYzcx
TyYrSXF8YGh0RVdZbGhPMlRNP1gzXmR5Kk9OUDVFZUheTGY1SCo/d1g4X3tJbHx7P2Uoa0pBRDQ3
CnpKOWwwbGUoMXYrKW1vcm49Y1ZiO21PTGxIPiFYcXZaZn1weVl5SSR6aTROYmNZZGJJUylkYmh5
cD0md18qV2NORQp6eUsmKG0mV0YhOT5Qd15OLV8/QlpAJFReVCNDc00kQDM8SmcoUmdxMyhaPjZs
dVFBQGdAY3FRYigmclA4JDJUYFYKSjVaYD9LZSpzODFUakJyIQoKbGl0ZXJhbCAwCkhjbVY/ZDAw
MDAxCgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3N0cmVzcy9zdHJlYW1pbmctYmFzaWMuanMg
Yi9KU1Rlc3RzL3dhc20vc3RyZXNzL3N0cmVhbWluZy1iYXNpYy5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iM2Zi
YzI0NzlmNzIxNjNkZmFkMzIxMDQwNTZiYTI3NDM1OTIzNWRhCi0tLSAvZGV2L251bGwKKysrIGIv
SlNUZXN0cy93YXNtL3N0cmVzcy9zdHJlYW1pbmctYmFzaWMuanMKQEAgLTAsMCArMSwxOCBAQAor
aW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcyc7CisKK3ZhciBkYXRhID0gcmVh
ZCgiLi9uYW1lU2VjdGlvbi53YXNtIiwgImJpbmFyeSIpOworCitmdW5jdGlvbiBjaGVjayhzdGVw
KQoreworICAgIHZhciBwYXJzZXIgPSAkdm0uY3JlYXRlV2FzbVN0cmVhbWluZ1BhcnNlcigpOwor
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5ieXRlTGVuZ3RoOyBpICs9IHN0ZXApIHsKKyAg
ICAgICAgcGFyc2VyLmFkZEJ5dGVzKGRhdGEuc3ViYXJyYXkoaSwgaSArIE1hdGgubWluKHN0ZXAs
IGRhdGEuYnl0ZUxlbmd0aCAtIGkpKSk7CisgICAgfQorICAgIGFzc2VydC5lcShwYXJzZXIuZmlu
YWxpemUoKSwgNyk7Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTA7ICsraSkKKyAgICBjaGVj
ayhpICsgMSk7CitjaGVjaygxMDApOworY2hlY2soMTAwMCk7CitjaGVjaygyMDAwKTsK
</data>
<flag name="review"
          id="365842"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>