<?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>152669</bug_id>
          
          <creation_ts>2016-01-03 12:29:30 -0800</creation_ts>
          <short_desc>B3 patchpoints should allow requesting scratch registers</short_desc>
          <delta_ts>2016-01-04 11:35:19 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>152699</blocked>
    
    <blocked>152668</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1152155</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-03 12:29:30 -0800</bug_when>
    <thetext>You should be able to say &quot;I want N scratch registers&quot; and your wish should be granted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1152157</commentid>
    <comment_count>1</comment_count>
      <attachid>268150</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-03 12:58:52 -0800</bug_when>
    <thetext>Created attachment 268150
it&apos;s taking shape!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1152178</commentid>
    <comment_count>2</comment_count>
      <attachid>268154</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-03 16:11:49 -0800</bug_when>
    <thetext>Created attachment 268154
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1152234</commentid>
    <comment_count>3</comment_count>
      <attachid>268171</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-03 20:30:00 -0800</bug_when>
    <thetext>Created attachment 268171
even more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1152239</commentid>
    <comment_count>4</comment_count>
      <attachid>268173</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-03 21:20:11 -0800</bug_when>
    <thetext>Created attachment 268173
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1152242</commentid>
    <comment_count>5</comment_count>
      <attachid>268173</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-03 21:56:29 -0800</bug_when>
    <thetext>Comment on attachment 268173
the patch

This looks like it doesn&apos;t break anything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1152243</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-03 21:58:21 -0800</bug_when>
    <thetext>Attachment 268173 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/air/AirInstInlines.h:103:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirInstInlines.h:111:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3PatchpointSpecial.cpp:83:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:6171:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:6174:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:6193:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:6207:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:6210:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:6223:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:123:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:228:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:56:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:71:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:146:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:152:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirIteratedRegisterCoalescing.cpp:785:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirIteratedRegisterCoalescing.cpp:794:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirIteratedRegisterCoalescing.cpp:850:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 18 in 25 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1152244</commentid>
    <comment_count>7</comment_count>
      <attachid>268174</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-03 22:01:47 -0800</bug_when>
    <thetext>Created attachment 268174
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1152245</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-03 22:03:14 -0800</bug_when>
    <thetext>Attachment 268174 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/air/AirInstInlines.h:103:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirInstInlines.h:111:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3PatchpointSpecial.cpp:83:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:6171:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:6174:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:6193:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:6207:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:6210:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:6223:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:123:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:228:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:56:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:71:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:146:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:152:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirIteratedRegisterCoalescing.cpp:785:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirIteratedRegisterCoalescing.cpp:794:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirIteratedRegisterCoalescing.cpp:850:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 18 in 25 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1152246</commentid>
    <comment_count>9</comment_count>
      <attachid>268175</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-03 22:17:48 -0800</bug_when>
    <thetext>Created attachment 268175
the patch

More fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1152247</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-03 22:20:09 -0800</bug_when>
    <thetext>Attachment 268175 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/air/AirInstInlines.h:103:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirInstInlines.h:111:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3PatchpointSpecial.cpp:83:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:6171:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:6174:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:6193:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:6207:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:6210:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:6223:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:123:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:228:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:56:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:71:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:146:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:152:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirIteratedRegisterCoalescing.cpp:785:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirIteratedRegisterCoalescing.cpp:794:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirIteratedRegisterCoalescing.cpp:850:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 18 in 25 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1152340</commentid>
    <comment_count>11</comment_count>
      <attachid>268175</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-01-04 09:40:57 -0800</bug_when>
    <thetext>Comment on attachment 268175
the patch

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

I am surprised you don&apos;t make the Scratch unspillable in the allocator.

When a scratch Tmp is spilled, it is replaced by a new unspillable Tmp. The next allocation will then selector a better victim for spilling.
I think it would be better to initialize the unspillableTmp from IteratedRegisterCoalescing to avoid building the interference graph twice.

&gt; Source/JavaScriptCore/b3/B3CheckSpecial.cpp:128
&gt; +        &amp;&amp; inst.args.size() - m_numCheckArgs - 1 == inst.origin-&gt;numChildren() - numB3Args(inst);

Is there a case where both side are not zero?

&gt; Source/JavaScriptCore/b3/B3PatchpointValue.h:63
&gt; +    uint8_t numGPScratchRegisters;
&gt; +    uint8_t numFPScratchRegisters;

uint8_t numGPScratchRegisters { 0 }
instead of setting it up in the constructor? If you change this, you can remove the comment &quot;These are 0 by default.&quot; too.

&gt; Source/JavaScriptCore/b3/air/AirInstInlines.h:118
&gt; +template&lt;typename Thing, typename Functor&gt;

I don&apos;t think that template works.

If used with StackSlot, this code will try to report extra clobbered regs as StackSlots.

&gt; Source/JavaScriptCore/b3/air/AirIteratedRegisterCoalescing.cpp:777
&gt; +            build(nullptr, &amp;block-&gt;at(0), localCalc);

A bit odd but that makes sense.

&gt; Source/JavaScriptCore/b3/air/AirIteratedRegisterCoalescing.cpp:790
&gt;                  // We should not use forEachDefAndExtraClobberedTmp() here since colored Tmps

There is no forEachDefAndExtraClobberedTmp() anymore.
Can you please update that comment to remove forEachDefAndExtraClobberedTmp() and say something about not reporting extra clobbered tmps.

&gt; Source/JavaScriptCore/b3/air/AirLiveness.h:234
&gt;              // First handle def&apos;s.

No longer &quot;First&quot; :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1152393</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-04 11:06:01 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Comment on attachment 268175 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=268175&amp;action=review
&gt; 
&gt; I am surprised you don&apos;t make the Scratch unspillable in the allocator.

I don&apos;t think that&apos;s straightforward.  Thanks for bring this up, though - thinking about this revealed a bug.

&gt; 
&gt; When a scratch Tmp is spilled, it is replaced by a new unspillable Tmp. 

Exactly.

&gt; The
&gt; next allocation will then selector a better victim for spilling.
&gt; I think it would be better to initialize the unspillableTmp from
&gt; IteratedRegisterCoalescing to avoid building the interference graph twice.

There is no constraint that the Tmp that you use for the scratch argument is used *only* for that scratch argument.  It may be also used elsewhere.  That use may be meaningful.  For example:

Foo Scratch:%tmp42 // first write to %tmp42 and then read from it.
Bar Use:%tmp42 // now read from %tmp42 again.

Currently the code has a bug when this happens and %tmp42 is spilled: we don&apos;t emit a store to %tmp42&apos;s spill slot after Foo.  I&apos;ll fix that.  Note that if we emit such a store and %tmp42 is actually dead after Foo (i.e. there is no Bar) then we&apos;ll need some optimization to remove the store later.  I&apos;m OK with this, since anyway this is an existing bug for any dead def that gets spilled.  We just need something akin to eliminateDeadCode() to remove such dead stores.

On the other hand, I get what you&apos;re going for: one possible interpretation of the &quot;Scratch&quot; role is that the value stored into the temporary is not used after.  But I like how currently, the Scratch role is defined in terms of uses and defs.  That has the advantage that phases don&apos;t have to special-case Scratch if they don&apos;t want to.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3CheckSpecial.cpp:128
&gt; &gt; +        &amp;&amp; inst.args.size() - m_numCheckArgs - 1 == inst.origin-&gt;numChildren() - numB3Args(inst);
&gt; 
&gt; Is there a case where both side are not zero?

They are usually not zero.  &quot;inst.args.size() - m_numCheckArgs - 1&quot; is the number of stackmap arguments (i.e. OSR exit state) to the check.  Except for some tests in testb3, a Check will usually have a non-zero number of stackmap arguments.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3PatchpointValue.h:63
&gt; &gt; +    uint8_t numGPScratchRegisters;
&gt; &gt; +    uint8_t numFPScratchRegisters;
&gt; 
&gt; uint8_t numGPScratchRegisters { 0 }
&gt; instead of setting it up in the constructor? If you change this, you can
&gt; remove the comment &quot;These are 0 by default.&quot; too.

Yeah, I&apos;ll do that.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/air/AirInstInlines.h:118
&gt; &gt; +template&lt;typename Thing, typename Functor&gt;
&gt; 
&gt; I don&apos;t think that template works.

It works for Arg and Tmp, and we use it for both of those things. :-)

&gt; 
&gt; If used with StackSlot, this code will try to report extra clobbered regs as
&gt; StackSlots.

I&apos;ll add a comment that Thing cannot be StackSlot* for the extra clobbered variant.  That&apos;s probably OK - it would be odd for someone to ask for extra clobbered registers when they are asking for stack slots!

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/air/AirIteratedRegisterCoalescing.cpp:777
&gt; &gt; +            build(nullptr, &amp;block-&gt;at(0), localCalc);
&gt; 
&gt; A bit odd but that makes sense.
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/air/AirIteratedRegisterCoalescing.cpp:790
&gt; &gt;                  // We should not use forEachDefAndExtraClobberedTmp() here since colored Tmps
&gt; 
&gt; There is no forEachDefAndExtraClobberedTmp() anymore.
&gt; Can you please update that comment to remove
&gt; forEachDefAndExtraClobberedTmp() and say something about not reporting extra
&gt; clobbered tmps.

Done.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/air/AirLiveness.h:234
&gt; &gt;              // First handle def&apos;s.
&gt; 
&gt; No longer &quot;First&quot; :)

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1152396</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-04 11:10:46 -0800</bug_when>
    <thetext>&gt; &gt; The
&gt; &gt; next allocation will then selector a better victim for spilling.
&gt; &gt; I think it would be better to initialize the unspillableTmp from
&gt; &gt; IteratedRegisterCoalescing to avoid building the interference graph twice.
&gt; 
&gt; There is no constraint that the Tmp that you use for the scratch argument is
&gt; used *only* for that scratch argument.  It may be also used elsewhere.  That
&gt; use may be meaningful.  For example:
&gt; 
&gt; Foo Scratch:%tmp42 // first write to %tmp42 and then read from it.
&gt; Bar Use:%tmp42 // now read from %tmp42 again.
&gt; 
&gt; Currently the code has a bug when this happens and %tmp42 is spilled: we
&gt; don&apos;t emit a store to %tmp42&apos;s spill slot after Foo.  I&apos;ll fix that.  Note
&gt; that if we emit such a store and %tmp42 is actually dead after Foo (i.e.
&gt; there is no Bar) then we&apos;ll need some optimization to remove the store
&gt; later.  I&apos;m OK with this, since anyway this is an existing bug for any dead
&gt; def that gets spilled.  We just need something akin to eliminateDeadCode()
&gt; to remove such dead stores.
&gt; 
&gt; On the other hand, I get what you&apos;re going for: one possible interpretation
&gt; of the &quot;Scratch&quot; role is that the value stored into the temporary is not
&gt; used after.  But I like how currently, the Scratch role is defined in terms
&gt; of uses and defs.  That has the advantage that phases don&apos;t have to
&gt; special-case Scratch if they don&apos;t want to.

I&apos;ll file a bug about having IRC mark as unspillable any Tmp that is used only from a !admitsStack Scratch role.

Note that this will probably not matter at all for the foreseeable future.  Scratch registers are super necessary for binary snippets to work, and we need that to run JS code, but the code we generate for the snippets doesn&apos;t have to be great and we won&apos;t be under any compile time pressure when we do this.

https://bugs.webkit.org/show_bug.cgi?id=152699</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1152418</commentid>
    <comment_count>14</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-04 11:35:19 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/194542.

Build fix landed in http://trac.webkit.org/changeset/194543.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268150</attachid>
            <date>2016-01-03 12:58:52 -0800</date>
            <delta_ts>2016-01-03 16:11:49 -0800</delta_ts>
            <desc>it&apos;s taking shape!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>15039</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAkocmV2aXNpb24gMTk0NTE3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAkod29ya2luZyBjb3B5
KQpAQCAtOTIsMTAgKzkyLDEyIEBAIHB1YmxpYzoKICAgICAgICAgQ29sZFVzZSwKIAogICAgICAg
ICAvLyBMYXRlVXNlIG1lYW5zIHRoYXQgdGhlIEluc3Qgd2lsbCByZWFkIGZyb20gdGhpcyB2YWx1
ZSBhZnRlciBkb2luZyBpdHMgRGVmJ3MuIE5vdGUgdGhhdCBMYXRlVXNlCi0gICAgICAgIC8vIG9u
IGFuIEFkZHIgb3IgSW5kZXggc3RpbGwgbWVhbnMgVXNlIG9uIHRoZSBpbnRlcm5hbCB0ZW1wb3Jh
cmllcy4gTGF0ZVVzZSBhbHNvIGN1cnJlbnRseSBhbHNvCi0gICAgICAgIC8vIGltcGxpZXMgQ29s
ZFVzZS4KKyAgICAgICAgLy8gb24gYW4gQWRkciBvciBJbmRleCBzdGlsbCBtZWFucyBVc2Ugb24g
dGhlIGludGVybmFsIHRlbXBvcmFyaWVzLgogICAgICAgICBMYXRlVXNlLAogCisgICAgICAgIC8v
IENvbWJpbmF0aW9uIG9mIExhdGVVc2UgYW5kIENvbGRVc2UuCisgICAgICAgIExhdGVDb2xkVXNl
LAorCiAgICAgICAgIC8vIERlZiBtZWFucyB0aGF0IHRoZSBJbnN0IHdpbGwgd3JpdGUgdG8gdGhp
cyB2YWx1ZSBhZnRlciBkb2luZyBldmVyeXRoaW5nIGVsc2UuCiAgICAgICAgIC8vCiAgICAgICAg
IC8vIEZvciBUbXA6IFRoZSBJbnN0IHdpbGwgd3JpdGUgdG8gdGhpcyBUbXAuCkBAIC0xMjcsNiAr
MTI5LDE0IEBAIHB1YmxpYzoKICAgICAgICAgLy8gVGhpcyBpcyBhIGNvbWJpbmVkIFVzZSBhbmQg
WkRlZi4gSXQgbWVhbnMgdGhhdCBib3RoIHRoaW5ncyBoYXBwZW4uCiAgICAgICAgIFVzZVpEZWYs
CiAKKyAgICAgICAgLy8gVGhpcyBpcyBsaWtlIERlZiwgYnV0IGltcGxpZXMgdGhhdCB0aGUgYXNz
aWdubWVudCBvY2N1cnMgYmVmb3JlIHRoZSBzdGFydCBvZiB0aGUgSW5zdCdzCisgICAgICAgIC8v
IGV4ZWN1dGlvbiByYXRoZXIgdGhhbiBhZnRlci4KKyAgICAgICAgRWFybHlEZWYsCisKKyAgICAg
ICAgLy8gU29tZSBpbnN0cnVjdGlvbnMgbmVlZCBhIHNjcmF0Y2ggcmVnaXN0ZXIuIFdlIG1vZGVs
IHRoaXMgYnkgc2F5aW5nIHRoYXQgdGhlIHRlbXBvcmFyeSBpcworICAgICAgICAvLyBkZWZpbmVk
IGVhcmx5IGFuZCB1c2VkIGxhdGUuIFRoaXMgcm9sZSBpbXBsaWVzIHRoYXQuCisgICAgICAgIFNj
cmF0Y2gsCisKICAgICAgICAgLy8gVGhpcyBpcyBhIHNwZWNpYWwga2luZCBvZiB1c2UgdGhhdCBp
cyBvbmx5IHZhbGlkIGZvciBhZGRyZXNzZXMuIEl0IG1lYW5zIHRoYXQgdGhlCiAgICAgICAgIC8v
IGluc3RydWN0aW9uIHdpbGwgZXZhbHVhdGUgdGhlIGFkZHJlc3MgZXhwcmVzc2lvbiBhbmQgY29u
c3VtZSB0aGUgZWZmZWN0aXZlIGFkZHJlc3MsIGJ1dCBpdAogICAgICAgICAvLyB3aWxsIG5laXRo
ZXIgbG9hZCBub3Igc3RvcmUuIFRoaXMgaXMgYW4gZXNjYXBpbmcgdXNlLCBiZWNhdXNlIG5vdyB0
aGUgYWRkcmVzcyBtYXkgYmUKQEAgLTE3MSw2ICsxODEsOCBAQCBwdWJsaWM6CiAgICAgICAgIGNh
c2UgVXNlRGVmOgogICAgICAgICBjYXNlIFVzZVpEZWY6CiAgICAgICAgIGNhc2UgTGF0ZVVzZToK
KyAgICAgICAgY2FzZSBMYXRlQ29sZFVzZToKKyAgICAgICAgY2FzZSBTY3JhdGNoOgogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGNhc2UgRGVmOgogICAgICAgICBjYXNlIFpEZWY6
CkBAIC0xODMsMTQgKzE5NSwxNiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBzd2l0Y2ggKHJv
bGUpIHsKICAgICAgICAgY2FzZSBDb2xkVXNlOgotICAgICAgICBjYXNlIExhdGVVc2U6CisgICAg
ICAgIGNhc2UgTGF0ZUNvbGRVc2U6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
Y2FzZSBVc2U6CiAgICAgICAgIGNhc2UgVXNlRGVmOgogICAgICAgICBjYXNlIFVzZVpEZWY6Cisg
ICAgICAgIGNhc2UgTGF0ZVVzZToKICAgICAgICAgY2FzZSBEZWY6CiAgICAgICAgIGNhc2UgWkRl
ZjoKICAgICAgICAgY2FzZSBVc2VBZGRyOgorICAgICAgICBjYXNlIFNjcmF0Y2g6CiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CkBAIC0yMTMsNiArMjI3LDggQEAg
cHVibGljOgogICAgICAgICBjYXNlIFpEZWY6CiAgICAgICAgIGNhc2UgVXNlQWRkcjoKICAgICAg
ICAgY2FzZSBMYXRlVXNlOgorICAgICAgICBjYXNlIExhdGVDb2xkVXNlOgorICAgICAgICBjYXNl
IFNjcmF0Y2g6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CkBA
IC0yMjAsMTcgKzIzNiw3MCBAQCBwdWJsaWM6CiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBS
b2xlIGltcGxpZXMgdGhhdCB0aGUgSW5zdCB3aWxsIFVzZSB0aGUgQXJnIGFmdGVyIGRvaW5nIGV2
ZXJ5dGhpbmcgZWxzZS4KICAgICBzdGF0aWMgYm9vbCBpc0xhdGVVc2UoUm9sZSByb2xlKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIHJvbGUgPT0gTGF0ZVVzZTsKKyAgICAgICAgc3dpdGNoIChyb2xl
KSB7CisgICAgICAgIGNhc2UgTGF0ZVVzZToKKyAgICAgICAgY2FzZSBMYXRlQ29sZFVzZToKKyAg
ICAgICAgY2FzZSBTY3JhdGNoOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNh
c2UgQ29sZFVzZToKKyAgICAgICAgY2FzZSBVc2U6CisgICAgICAgIGNhc2UgVXNlRGVmOgorICAg
ICAgICBjYXNlIFVzZVpEZWY6CisgICAgICAgIGNhc2UgRGVmOgorICAgICAgICBjYXNlIFpEZWY6
CisgICAgICAgIGNhc2UgVXNlQWRkcjoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQogICAgIH0KIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgUm9sZSBpbXBsaWVzIHRo
YXQgdGhlIEluc3Qgd2lsbCBEZWYgdGhlIEFyZy4KLSAgICBzdGF0aWMgYm9vbCBpc0RlZihSb2xl
IHJvbGUpCisgICAgc3RhdGljIGJvb2wgaXNBbnlEZWYoUm9sZSByb2xlKQorICAgIHsKKyAgICAg
ICAgc3dpdGNoIChyb2xlKSB7CisgICAgICAgIGNhc2UgVXNlOgorICAgICAgICBjYXNlIENvbGRV
c2U6CisgICAgICAgIGNhc2UgVXNlQWRkcjoKKyAgICAgICAgY2FzZSBMYXRlVXNlOgorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIERlZjoKKyAgICAgICAgY2FzZSBVc2VE
ZWY6CisgICAgICAgIGNhc2UgWkRlZjoKKyAgICAgICAgY2FzZSBVc2VaRGVmOgorICAgICAgICBj
YXNlIEVhcmx5RGVmOgorICAgICAgICBjYXNlIFNjcmF0Y2g6CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgUm9s
ZSBpbXBsaWVzIHRoYXQgdGhlIEluc3Qgd2lsbCBEZWYgdGhlIEFyZyBiZWZvcmUgc3RhcnQgb2Yg
ZXhlY3V0aW9uLgorICAgIHN0YXRpYyBib29sIGlzRWFybHlEZWYoUm9sZSByb2xlKQorICAgIHsK
KyAgICAgICAgc3dpdGNoIChyb2xlKSB7CisgICAgICAgIGNhc2UgVXNlOgorICAgICAgICBjYXNl
IENvbGRVc2U6CisgICAgICAgIGNhc2UgVXNlQWRkcjoKKyAgICAgICAgY2FzZSBMYXRlVXNlOgor
ICAgICAgICBjYXNlIERlZjoKKyAgICAgICAgY2FzZSBVc2VEZWY6CisgICAgICAgIGNhc2UgWkRl
ZjoKKyAgICAgICAgY2FzZSBVc2VaRGVmOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBjYXNlIEVhcmx5RGVmOgorICAgICAgICBjYXNlIFNjcmF0Y2g6CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGUgUm9sZSBpbXBsaWVzIHRoYXQgdGhlIEluc3Qgd2lsbCBEZWYgdGhlIEFyZyBhZnRlciB0aGUg
ZW5kIG9mIGV4ZWN1dGlvbi4KKyAgICBzdGF0aWMgYm9vbCBpc0xhdGVEZWYoUm9sZSByb2xlKQog
ICAgIHsKICAgICAgICAgc3dpdGNoIChyb2xlKSB7CiAgICAgICAgIGNhc2UgVXNlOgogICAgICAg
ICBjYXNlIENvbGRVc2U6CiAgICAgICAgIGNhc2UgVXNlQWRkcjoKICAgICAgICAgY2FzZSBMYXRl
VXNlOgorICAgICAgICBjYXNlIEVhcmx5RGVmOgorICAgICAgICBjYXNlIFNjcmF0Y2g6CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNhc2UgRGVmOgogICAgICAgICBjYXNlIFVz
ZURlZjoKQEAgLTI1MCw2ICszMTksOCBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgTGF0ZVVzZToK
ICAgICAgICAgY2FzZSBEZWY6CiAgICAgICAgIGNhc2UgVXNlRGVmOgorICAgICAgICBjYXNlIEVh
cmx5RGVmOgorICAgICAgICBjYXNlIFNjcmF0Y2g6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIGNhc2UgWkRlZjoKICAgICAgICAgY2FzZSBVc2VaRGVmOgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgJKHJldmlzaW9uIDE5NDUxNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcs
MTAgKzEyNywxOCBAQCBwdWJsaWM6CiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJhQ2xvYmJl
cmVkUmVncygpOwogICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYUVhcmx5Q2xvYmJlcmVkUmVn
cygpOwogCi0gICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBEZWZzIGFuZCB0aGUgZXh0cmEgY2xvYmJl
cmVkIHJlZ2lzdGVycy4gWW91IG11c3Qgc3VwcGx5IHRoZSBuZXh0IGluc3RydWN0aW9uIGlmCi0g
ICAgLy8gdGhlcmUgaXMgb25lLgorICAgIC8vIEl0ZXJhdGUgb3ZlciBhbGwgRGVmJ3MgdGhhdCBo
YXBwZW4gYXQgdGhlIGVuZCBvZiBhbiBpbnN0cnVjdGlvbi4gWW91IHN1cHBseSBhIHBhaXIKKyAg
ICAvLyBpbnN0cnVjdGlvbnMuIFRoZSBpbnN0cnVjdGlvbnMgbXVzdCBhcHBlYXIgbmV4dCB0byBl
YWNoIG90aGVyLCBpbiB0aGF0IG9yZGVyLCBpbiBzb21lIGJhc2ljCisgICAgLy8gYmxvY2suIFlv
dSBjYW4gcGFzcyBudWxsIGZvciB0aGUgZmlyc3QgaW5zdHJ1Y3Rpb24gd2hlbiBhbmFseXppbmcg
d2hhdCBoYXBwZW5zIGF0IHRoZSB0b3Agb2YKKyAgICAvLyBhIGJhc2ljIGJsb2NrLiBZb3UgY2Fu
IHBhc3MgbnVsbCBmb3IgdGhlIHNlY29uZCBpbnN0cnVjdGlvbiB3aGVuIGFuYWx5emluZyB3aGF0
IGhhcHBlbnMgYXQgdGhlCisgICAgLy8gYm90dG9tIG9mIGEgYmFzaWMgYmxvY2suCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICB2b2lkIGZvckVhY2hUbXBXaXRoRXh0cmFDbG9i
YmVyZWRSZWdzKEluc3QqIG5leHRJbnN0LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKTsKKyAgICBz
dGF0aWMgdm9pZCBmb3JFYWNoRGVmKEluc3QqIHByZXZJbnN0LCBJbnN0KiBuZXh0SW5zdCwgY29u
c3QgRnVuY3RvciYpOworCisgICAgLy8gSXRlcmF0ZSBvdmVyIGFsbCBEZWYncyB0aGF0IGhhcHBl
biBhdCB0aGUgZW5kIG9mIHRoaXMgaW5zdHJ1Y3Rpb24sIGluY2x1ZGluZyBleHRyYSBjbG9iYmVy
ZWQKKyAgICAvLyByZWdpc3RlcnMuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAg
ICBzdGF0aWMgdm9pZCBmb3JFYWNoRGVmV2l0aEV4dHJhQ2xvYmJlcmVkUmVncyhJbnN0KiBwcmV2
SW5zdCwgSW5zdCogbmV4dEluc3QsIGNvbnN0IEZ1bmN0b3ImKTsKIAogICAgIC8vIFVzZSB0aGlz
IHRvIHJlcG9ydCB3aGljaCByZWdpc3RlcnMgYXJlIGxpdmUuIFRoaXMgc2hvdWxkIGJlIGRvbmUg
anVzdCBiZWZvcmUgY29kZWdlbi4gTm90ZQogICAgIC8vIHRoYXQgZm9yIGVmZmljaWVuY3ksIHJl
cG9ydFVzZWRSZWdpc3RlcnMoKSBvbmx5IHdvcmtzIGlmIGhhc1NwZWNpYWwoKSByZXR1cm5zIHRy
dWUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5l
cy5oCShyZXZpc2lvbiAxOTQ1MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckluc3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTk2LDIzICs5Niw0NyBAQCBpbmxpbmUg
Y29uc3QgUmVnaXN0ZXJTZXQmIEluc3Q6OmV4dHJhRWFyCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+Ci1pbmxpbmUgdm9pZCBJbnN0Ojpmb3JFYWNoVG1wV2l0aEV4dHJhQ2xvYmJlcmVk
UmVncyhJbnN0KiBuZXh0SW5zdCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKK2lubGluZSB2b2lk
IEluc3Q6OmZvckVhY2hEZWYoSW5zdCogcHJldkluc3QsIEluc3QqIG5leHRJbnN0LCBjb25zdCBG
dW5jdG9yJiBmdW5jdG9yKQogewotICAgIGZvckVhY2hUbXAoCi0gICAgICAgIFsmXSAoVG1wJiB0
bXBBcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgYXJnVHlwZSwgQXJnOjpXaWR0aCBhcmdX
aWR0aCkgewotICAgICAgICAgICAgZnVuY3Rvcih0bXBBcmcsIHJvbGUsIGFyZ1R5cGUsIGFyZ1dp
ZHRoKTsKLSAgICAgICAgfSk7CisgICAgaWYgKHByZXZJbnN0KSB7CisgICAgICAgIGZvckVhY2hU
bXAoCisgICAgICAgICAgICBbJl0gKFRtcCYgdG1wQXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpU
eXBlIGFyZ1R5cGUsIEFyZzo6V2lkdGggYXJnV2lkdGgpIHsKKyAgICAgICAgICAgICAgICBpZiAo
QXJnOjppc0xhdGVEZWYocm9sZSkpCisgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IodG1wQXJn
LCByb2xlLCBhcmdUeXBlLCBhcmdXaWR0aCk7CisgICAgICAgICAgICB9KTsKKyAgICB9CisKKyAg
ICBpZiAobmV4dEluc3QpIHsKKyAgICAgICAgZm9yRWFjaFRtcCgKKyAgICAgICAgICAgIFsmXSAo
VG1wJiB0bXBBcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgYXJnVHlwZSwgQXJnOjpXaWR0
aCBhcmdXaWR0aCkgeworICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzRWFybHlEZWYocm9sZSkp
CisgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IodG1wQXJnLCByb2xlLCBhcmdUeXBlLCBhcmdX
aWR0aCk7CisgICAgICAgICAgICB9KTsKKyAgICB9Cit9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3I+CitpbmxpbmUgdm9pZCBJbnN0Ojpmb3JFYWNoRGVmV2l0aEV4dHJhQ2xvYmJlcmVkUmVn
cygKKyAgICBJbnN0KiBwcmV2SW5zdCwgSW5zdCogbmV4dEluc3QsIGNvbnN0IEZ1bmN0b3ImIGZ1
bmN0b3IpCit7CisgICAgZm9yRWFjaERlZihwcmV2SW5zdCwgbmV4dEluc3QsIGZ1bmN0b3IpOwor
CisgICAgQXJnOjpSb2xlIHJlZ0RlZlJvbGU7CisgICAgCiAgICAgYXV0byByZXBvcnRSZWcgPSBb
Jl0gKFJlZyByZWcpIHsKICAgICAgICAgQXJnOjpUeXBlIHR5cGUgPSByZWcuaXNHUFIoKSA/IEFy
Zzo6R1AgOiBBcmc6OkZQOwotICAgICAgICBmdW5jdG9yKFRtcChyZWcpLCBBcmc6OkRlZiwgdHlw
ZSwgQXJnOjpjb25zZXJ2YXRpdmVXaWR0aCh0eXBlKSk7CisgICAgICAgIGZ1bmN0b3IoVG1wKHJl
ZyksIHJlZ0RlZlJvbGUsIHR5cGUsIEFyZzo6Y29uc2VydmF0aXZlV2lkdGgodHlwZSkpOwogICAg
IH07CiAKLSAgICBpZiAoaGFzU3BlY2lhbCgpKQotICAgICAgICBleHRyYUNsb2JiZXJlZFJlZ3Mo
KS5mb3JFYWNoKHJlcG9ydFJlZyk7Ci0KLSAgICBpZiAobmV4dEluc3QgJiYgbmV4dEluc3QtPmhh
c1NwZWNpYWwoKSkKLSAgICAgICAgbmV4dEluc3QtPmV4dHJhRWFybHlDbG9iYmVyZWRSZWdzKCku
Zm9yRWFjaChyZXBvcnRSZWcpOworICAgIGlmIChwcmV2SW5zdCAmJiBwcmV2SW5zdC0+aGFzU3Bl
Y2lhbCgpKSB7CisgICAgICAgIHJlZ0RlZlJvbGUgPSBBcmc6OkRlZjsKKyAgICAgICAgcHJldklu
c3QtPmV4dHJhQ2xvYmJlcmVkUmVncygpLmZvckVhY2gocmVwb3J0UmVnKTsKKyAgICB9CisKKyAg
ICBpZiAobmV4dEluc3QgJiYgbmV4dEluc3QtPmhhc1NwZWNpYWwoKSkgeworICAgICAgICByZWdE
ZWZSb2xlID0gQXJnOjpFYXJseURlZjsKKyAgICAgICAgbmV4dE5leHQtPmV4dHJhRWFybHlDbG9i
YmVyZWRSZWdzKCkuZm9yRWFjaChyZXBvcnRSZWcpOworICAgIH0KIH0KIAogaW5saW5lIHZvaWQg
SW5zdDo6cmVwb3J0VXNlZFJlZ2lzdGVycyhjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVy
cykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdpc3Rl
ckNvYWxlc2NpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuY3BwCShyZXZpc2lvbiAxOTQ1MTcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNj
aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcxLDM4ICs3NzEsNDEgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5zdElu
ZGV4LS07KSB7CiAgICAgICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5k
ZXgpOwogICAgICAgICAgICAgICAgIEluc3QqIG5leHRJbnN0ID0gaW5zdEluZGV4ICsgMSA8IGJs
b2NrLT5zaXplKCkgPyAmYmxvY2stPmF0KGluc3RJbmRleCArIDEpIDogbnVsbHB0cjsKLSAgICAg
ICAgICAgICAgICBidWlsZChpbnN0LCBuZXh0SW5zdCwgbG9jYWxDYWxjKTsKKyAgICAgICAgICAg
ICAgICBidWlsZCgmaW5zdCwgbmV4dEluc3QsIGxvY2FsQ2FsYyk7CiAgICAgICAgICAgICAgICAg
bG9jYWxDYWxjLmV4ZWN1dGUoaW5zdEluZGV4KTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGJ1aWxkKG51bGxwdHIsICZibG9jay0+YXQoMCksIGxvY2FsQ2FsYyk7CiAgICAgICAgIH0KICAg
ICB9CiAKLSAgICB2b2lkIGJ1aWxkKEluc3QmIGluc3QsIEluc3QqIG5leHRJbnN0LCBjb25zdCB0
eXBlbmFtZSBUbXBMaXZlbmVzczx0eXBlPjo6TG9jYWxDYWxjJiBsb2NhbENhbGMpCisgICAgdm9p
ZCBidWlsZChJbnN0KiBwcmV2SW5zdCwgSW5zdCogbmV4dEluc3QsIGNvbnN0IHR5cGVuYW1lIFRt
cExpdmVuZXNzPHR5cGU+OjpMb2NhbENhbGMmIGxvY2FsQ2FsYykKICAgICB7Ci0gICAgICAgIGlu
c3QuZm9yRWFjaFRtcFdpdGhFeHRyYUNsb2JiZXJlZFJlZ3MoCi0gICAgICAgICAgICBuZXh0SW5z
dCwKKyAgICAgICAgSW5zdDo6Zm9yRWFjaERlZldpdGhFeHRyYUNsb2JiZXJlZFJlZ3MoCisgICAg
ICAgICAgICBwcmV2SW5zdCwgbmV4dEluc3QsCiAgICAgICAgICAgICBbJl0gKGNvbnN0IFRtcCYg
YXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIGFyZ1R5cGUsIEFyZzo6V2lkdGgpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoIUFyZzo6aXNEZWYocm9sZSkgfHwgYXJnVHlwZSAhPSB0eXBlKQor
ICAgICAgICAgICAgICAgIGlmIChhcmdUeXBlICE9IHR5cGUpCiAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBBbGwgdGhlIERl
ZigpcyBpbnRlcmZlcmUgd2l0aCBlYWNoIG90aGVyIGFuZCB3aXRoIGFsbCB0aGUgZXh0cmEgY2xv
YmJlcmVkIFRtcHMuCiAgICAgICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG5vdCB1c2UgZm9yRWFj
aERlZkFuZEV4dHJhQ2xvYmJlcmVkVG1wKCkgaGVyZSBzaW5jZSBjb2xvcmVkIFRtcHMKICAgICAg
ICAgICAgICAgICAvLyBkbyBub3QgbmVlZCBpbnRlcmZlcmVuY2UgZWRnZXMgaW4gb3VyIGltcGxl
bWVudGF0aW9uLgotICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcChbJl0gKFRtcCYgb3Ro
ZXJBcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgYXJnVHlwZSwgQXJnOjpXaWR0aCkgewot
ICAgICAgICAgICAgICAgICAgICBpZiAoIUFyZzo6aXNEZWYocm9sZSkgfHwgYXJnVHlwZSAhPSB0
eXBlKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICAgICAg
ICAgIGFkZEVkZ2UoYXJnLCBvdGhlckFyZyk7Ci0gICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICAgICAgSW5zdDo6Zm9yRWFjaERlZigKKyAgICAgICAgICAgICAgICAgICAgcHJldkluc3Qs
IG5leHRJbnN0LAorICAgICAgICAgICAgICAgICAgICBbJl0gKFRtcCYgb3RoZXJBcmcsIEFyZzo6
Um9sZSByb2xlLCBBcmc6OlR5cGUgYXJnVHlwZSwgQXJnOjpXaWR0aCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGFyZ1R5cGUgIT0gdHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGFkZEVkZ2UoYXJnLCBvdGhlckFyZyk7CisgICAgICAgICAgICAgICAgICAgIH0pOwog
ICAgICAgICAgICAgfSk7CiAKLSAgICAgICAgaWYgKG1heUJlQ29hbGVzY2FibGUoaW5zdCkpIHsK
KyAgICAgICAgaWYgKHByZXZJbnN0ICYmIG1heUJlQ29hbGVzY2FibGUoKnByZXZJbnN0KSkgewog
ICAgICAgICAgICAgLy8gV2UgZG8gbm90IHdhbnQgdGhlIFVzZSgpIG9mIHRoaXMgbW92ZSB0byBp
bnRlcmZlcmUgd2l0aCB0aGUgRGVmKCksIGV2ZW4gaWYgaXQgaXMgbGl2ZQogICAgICAgICAgICAg
Ly8gYWZ0ZXIgdGhlIE1vdmUuIElmIHdlIHdlcmUgdG8gYWRkIHRoZSBpbnRlcmZlcmVuY2UgZWRn
ZSwgaXQgd291bGQgYmUgaW1wb3NzaWJsZSB0bwogICAgICAgICAgICAgLy8gY29hbGVzY2UgdGhl
IE1vdmUgZXZlbiBpZiB0aGUgdHdvIFRtcCBuZXZlciBpbnRlcmZlcmUgYW55d2hlcmUuCiAgICAg
ICAgICAgICBUbXAgZGVmVG1wOwogICAgICAgICAgICAgVG1wIHVzZVRtcDsKLSAgICAgICAgICAg
IGluc3QuZm9yRWFjaFRtcChbJmRlZlRtcCwgJnVzZVRtcF0gKFRtcCYgYXJnVG1wLCBBcmc6OlJv
bGUgcm9sZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRoKSB7CisgICAgICAgICAgICBwcmV2SW5zdC0+
Zm9yRWFjaFRtcChbJmRlZlRtcCwgJnVzZVRtcF0gKFRtcCYgYXJnVG1wLCBBcmc6OlJvbGUgcm9s
ZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRoKSB7CiAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNE
ZWYocm9sZSkpCiAgICAgICAgICAgICAgICAgICAgIGRlZlRtcCA9IGFyZ1RtcDsKICAgICAgICAg
ICAgICAgICBlbHNlIHsKQEAgLTgzMiwyNiArODM1LDIwIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgICAgIGFkZEVkZ2UoZGVmVG1wLCBsaXZlVG1wKTsKICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgLy8gVGhlIG5leHQgaW5zdHJ1Y3Rpb24gY291bGQgaGF2ZSBlYXJseSBjbG9iYmVy
cy4gV2UgbmVlZCB0byBjb25zaWRlciB0aG9zZSBub3cuCi0gICAgICAgICAgICBpZiAobmV4dElu
c3QgJiYgbmV4dEluc3QtPmhhc1NwZWNpYWwoKSkgewotICAgICAgICAgICAgICAgIG5leHRJbnN0
LT5leHRyYUVhcmx5Q2xvYmJlcmVkUmVncygpLmZvckVhY2goWyZdIChSZWcgcmVnKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChyZWcuaXNHUFIoKSA9PSAodHlwZSA9PSBBcmc6OkdQKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBUbXAmIGxpdmVUbXAgOiBsb2NhbENh
bGMubGl2ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVkZ2UoVG1wKHJlZyks
IGxpdmVUbXApOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBUaGUgbmV4dCBpbnN0cnVjdGlvbiBjb3VsZCBo
YXZlIGVhcmx5IGNsb2JiZXJzIG9yIGVhcmx5IGRlZidzLiBXZSBuZWVkIHRvIGNvbnNpZGVyCisg
ICAgICAgICAgICAvLyB0aG9zZSBub3cuCisgICAgICAgICAgICBhZGRFZGdlcyhudWxscHRyLCBu
ZXh0SW5zdCwgbG9jYWxDYWxjLmxpdmUoKSk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
YWRkRWRnZXMoaW5zdCwgbmV4dEluc3QsIGxvY2FsQ2FsYy5saXZlKCkpOworICAgICAgICAgICAg
YWRkRWRnZXMocHJldkluc3QsIG5leHRJbnN0LCBsb2NhbENhbGMubGl2ZSgpKTsKICAgICB9CiAK
LSAgICB2b2lkIGFkZEVkZ2VzKEluc3QmIGluc3QsIEluc3QqIG5leHRJbnN0LCB0eXBlbmFtZSBU
bXBMaXZlbmVzczx0eXBlPjo6TG9jYWxDYWxjOjpJdGVyYWJsZSBsaXZlVG1wcykKKyAgICB2b2lk
IGFkZEVkZ2VzKEluc3QqIHByZXZJbnN0LCBJbnN0KiBuZXh0SW5zdCwgdHlwZW5hbWUgVG1wTGl2
ZW5lc3M8dHlwZT46OkxvY2FsQ2FsYzo6SXRlcmFibGUgbGl2ZVRtcHMpCiAgICAgewogICAgICAg
ICAvLyBBbGwgdGhlIERlZigpcyBpbnRlcmZlcmUgd2l0aCBldmVydGhpbmcgbGl2ZS4KLSAgICAg
ICAgaW5zdC5mb3JFYWNoVG1wV2l0aEV4dHJhQ2xvYmJlcmVkUmVncygKLSAgICAgICAgICAgIG5l
eHRJbnN0LAorICAgICAgICBJbnN0Ojpmb3JFYWNoRGVmV2l0aEV4dHJhQ2xvYmJlcmVkUmVncygK
KyAgICAgICAgICAgIHByZXZJbnN0LCBuZXh0SW5zdCwKICAgICAgICAgICAgIFsmXSAoY29uc3Qg
VG1wJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgYXJnVHlwZSwgQXJnOjpXaWR0aCkg
ewotICAgICAgICAgICAgICAgIGlmICghQXJnOjppc0RlZihyb2xlKSB8fCBhcmdUeXBlICE9IHR5
cGUpCisgICAgICAgICAgICAgICAgaWYgKGFyZ1R5cGUgIT0gdHlwZSkKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGZvciAoY29u
c3QgVG1wJiBsaXZlVG1wIDogbGl2ZVRtcHMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckxpdmVuZXNzLmgJKHJldmlzaW9uIDE5NDUxNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDYg
KzExOCwxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaW5zdEluZGV4
ID0gYmxvY2stPnNpemUoKTsgaW5zdEluZGV4LS07KQogICAgICAgICAgICAgICAgICAgICBsb2Nh
bENhbGMuZXhlY3V0ZShpbnN0SW5kZXgpOwogCisgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRo
ZSBlYXJseSBkZWYncyBvZiB0aGUgZmlyc3QgaW5zdHJ1Y3Rpb24uCisgICAgICAgICAgICAgICAg
YmxvY2stPmF0KDApLmZvckVhY2g8dHlwZW5hbWUgQWRhcHRlcjo6VGhpbmc+KAorICAgICAgICAg
ICAgICAgICAgICBbJl0gKHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nJiB0aGluZywgQXJnOjpSb2xl
IHJvbGUsIEFyZzo6VHlwZSB0eXBlLCBBcmc6OldpZHRoKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoQXJnOjppc0Vhcmx5RGVmKHJvbGUpICYmIEFkYXB0ZXI6OmFjY2VwdHNUeXBlKHR5
cGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fd29ya3NldC5yZW1vdmUoQWRhcHRl
cjo6dmFsdWVUb0luZGV4KHRoaW5nKSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworCiAgICAg
ICAgICAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiYgbGl2ZUF0SGVhZCA9IG1fbGl2ZUF0SGVhZFti
bG9ja107CiAKICAgICAgICAgICAgICAgICAvLyBXZSBvbmx5IGNhcmUgYWJvdXQgVG1wcyB0aGF0
IHdlcmUgZGlzY292ZXJlZCBpbiB0aGlzIGl0ZXJhdGlvbi4gSXQgaXMgaW1wb3NzaWJsZQpAQCAt
MjEzLDEwICsyMjAsMjEgQEAgcHVibGljOgogICAgICAgICB7CiAgICAgICAgICAgICBJbnN0JiBp
bnN0ID0gbV9ibG9jay0+YXQoaW5zdEluZGV4KTsKICAgICAgICAgICAgIGF1dG8mIHdvcmtzZXQg
PSBtX2xpdmVuZXNzLm1fd29ya3NldDsKKworICAgICAgICAgICAgLy8gRmlyc3QgaGFuZGxlIHRo
ZSBlYXJseSBkZWYncyBvZiB0aGUgbmV4dCBpbnN0cnVjdGlvbi4KKyAgICAgICAgICAgIGlmIChp
bnN0SW5kZXggKyAxIDwgbV9ibG9jay0+c2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgSW5zdCYg
bmV4dEluc3QgPSBtX2Jsb2NrLT5hdChpbnN0SW5kZXggKyAxKTsKKyAgICAgICAgICAgICAgICBu
ZXh0SW5zdC5mb3JFYWNoPHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nPigKKyAgICAgICAgICAgICAg
ICAgICAgWyZdICh0eXBlbmFtZSBBZGFwdGVyOjpUaGluZyYgdGhpbmcsIEFyZzo6Um9sZSByb2xl
LCBBcmc6OlR5cGUgdHlwZSwgQXJnOjpXaWR0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKEFyZzo6aXNFYXJseURlZihyb2xlKSAmJiBBZGFwdGVyOjphY2NlcHRzVHlwZSh0eXBlKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3Jrc2V0LnJlbW92ZShBZGFwdGVyOjp2YWx1
ZVRvSW5kZXgodGhpbmcpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIEZpcnN0IGhhbmRsZSBkZWYncy4KICAgICAg
ICAgICAgIGluc3QuZm9yRWFjaDx0eXBlbmFtZSBBZGFwdGVyOjpUaGluZz4oCiAgICAgICAgICAg
ICAgICAgWyZdICh0eXBlbmFtZSBBZGFwdGVyOjpUaGluZyYgdGhpbmcsIEFyZzo6Um9sZSByb2xl
LCBBcmc6OlR5cGUgdHlwZSwgQXJnOjpXaWR0aCkgewotICAgICAgICAgICAgICAgICAgICBpZiAo
QXJnOjppc0RlZihyb2xlKSAmJiBBZGFwdGVyOjphY2NlcHRzVHlwZSh0eXBlKSkKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKEFyZzo6aXNMYXRlRGVmKHJvbGUpICYmIEFkYXB0ZXI6OmFjY2VwdHNU
eXBlKHR5cGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgd29ya3NldC5yZW1vdmUoQWRhcHRl
cjo6dmFsdWVUb0luZGV4KHRoaW5nKSk7CiAgICAgICAgICAgICAgICAgfSk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268154</attachid>
            <date>2016-01-03 16:11:49 -0800</date>
            <delta_ts>2016-01-03 20:30:00 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>33118</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmNwcAkocmV2
aXNpb24gMTk0NTE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDcgKzEyNCw4IEBAIHZvaWQgQ2hlY2tTcGVjaWFs
Ojpmb3JFYWNoQXJnKEluc3QmIGluc3QKIGJvb2wgQ2hlY2tTcGVjaWFsOjppc1ZhbGlkKEluc3Qm
IGluc3QpCiB7CiAgICAgcmV0dXJuIGhpZGRlbkJyYW5jaChpbnN0KS5pc1ZhbGlkRm9ybSgpCi0g
ICAgICAgICYmIGlzVmFsaWRJbXBsKG51bUIzQXJncyhpbnN0KSwgbV9udW1DaGVja0FyZ3MgKyAx
LCBpbnN0KTsKKyAgICAgICAgJiYgaXNWYWxpZEltcGwobnVtQjNBcmdzKGluc3QpLCBtX251bUNo
ZWNrQXJncyArIDEsIGluc3QpCisgICAgICAgICYmIGluc3QuYXJncy5zaXplKCkgLSBtX251bUNo
ZWNrQXJncyAtIDEgPT0gaW5zdC52YWx1ZS0+bnVtQ2hpbGRyZW4oKTsKIH0KIAogYm9vbCBDaGVj
a1NwZWNpYWw6OmFkbWl0c1N0YWNrKEluc3QmIGluc3QsIHVuc2lnbmVkIGFyZ0luZGV4KQpAQCAt
MTQyLDggKzE0Myw3IEBAIENDYWxsSGVscGVyczo6SnVtcCBDaGVja1NwZWNpYWw6OmdlbmVyYXQK
ICAgICBTdGFja21hcFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luLT5hczxTdGFja21hcFZhbHVl
PigpOwogICAgIEFTU0VSVCh2YWx1ZSk7CiAKLSAgICBWZWN0b3I8VmFsdWVSZXA+IHJlcHM7Ci0g
ICAgYXBwZW5kUmVwc0ltcGwoY29udGV4dCwgbV9udW1DaGVja0FyZ3MgKyAxLCBpbnN0LCByZXBz
KTsKKyAgICBWZWN0b3I8VmFsdWVSZXA+IHJlcHMgPSByZXBzSW1wbChjb250ZXh0LCBudW1CM0Fy
Z3MoaW5zdCksIG1fbnVtQ2hlY2tBcmdzICsgMSwgaW5zdCk7CiAKICAgICAvLyBTZXQgYXNpZGUg
dGhlIGFyZ3MgdGhhdCBhcmUgcmVsZXZhbnQgdG8gdW5kb2luZyB0aGUgb3BlcmF0aW9uLiBUaGlz
IGlzIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0bwogICAgIC8vIGNhcHR1cmUgYWxsIG9mIGluc3Qg
aW4gdGhlIGNsb3N1cmUgYmVsb3cuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQ
YXRjaHBvaW50U3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3BwCShyZXZpc2lvbiAxOTQ1MTcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDMyICs0Niw1NCBAQCBQYXRjaHBvaW50U3BlY2lhbDo6flBhdGNocG9pbnRTcGVjaWFs
KCkKIAogdm9pZCBQYXRjaHBvaW50U3BlY2lhbDo6Zm9yRWFjaEFyZyhJbnN0JiBpbnN0LCBjb25z
dCBTY29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYgY2FsbGJhY2spCiB7Ci0gICAg
Ly8gRklYTUU6IEFsbG93IEIzIFBhdGNocG9pbnRzIHRvIHNwZWNpZnkgTGF0ZVVzZS4KLSAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxMzM1Ci0gICAgCi0g
ICAgaWYgKGluc3Qub3JpZ2luLT50eXBlKCkgPT0gVm9pZCkgewotICAgICAgICBmb3JFYWNoQXJn
SW1wbCgwLCAxLCBpbnN0LCBTYW1lQXNSZXAsIGNhbGxiYWNrKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KKyAgICB1bnNpZ25lZCBhcmdJbmRleCA9IDE7CisKKyAgICBpZiAoaW5zdC5vcmlnaW4t
PnR5cGUoKSAhPSBWb2lkKQorICAgICAgICBjYWxsYmFjayhpbnN0LmFyZ3NbYXJnSW5kZXgrK10s
IEFyZzo6RGVmLCBpbnN0Lm9yaWdpbi0+YWlyVHlwZSgpLCBpbnN0Lm9yaWdpbi0+YWlyV2lkdGgo
KSk7CisKKyAgICBmb3JFYWNoQXJnSW1wbCgwLCBhcmdJbmRleCwgaW5zdCwgU2FtZUFzUmVwLCBj
YWxsYmFjayk7CisgICAgYXJnSW5kZXggKz0gaW5zdC52YWx1ZS0+bnVtQ2hpbGRyZW4oKTsKIAot
ICAgIGNhbGxiYWNrKGluc3QuYXJnc1sxXSwgQXJnOjpEZWYsIGluc3Qub3JpZ2luLT5haXJUeXBl
KCksIGluc3Qub3JpZ2luLT5haXJXaWR0aCgpKTsKLSAgICBmb3JFYWNoQXJnSW1wbCgwLCAyLCBp
bnN0LCBTYW1lQXNSZXAsIGNhbGxiYWNrKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBpbnN0LnZh
bHVlLT5hczxQYXRjaHBvaW50VmFsdWU+KCktPm51bUdQU2NyYXRjaFJlZ2lzdGVyczsgaS0tOykK
KyAgICAgICAgY2FsbGJhY2soaW5zdC5hcmdzW2FyZ0luZGV4KytdLCBBcmc6OlNjcmF0Y2gsIEFy
Zzo6R1AsIEFyZzo6Y29uc2VydmF0aXZlV2lkdGgoQXJnOjpHUCkpOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IGluc3QudmFsdWUtPmFzPFBhdGNocG9pbnRWYWx1ZT4oKS0+bnVtRlBTY3JhdGNoUmVn
aXN0ZXJzOyBpLS07KQorICAgICAgICBjYWxsYmFjayhpbnN0LmFyZ3NbYXJnSW5kZXgrK10sIEFy
Zzo6U2NyYXRjaCwgQXJnOjpGUCwgQXJnOjpjb25zZXJ2YXRpdmVXaWR0aChBcmc6OkZQKSk7CiB9
CiAKIGJvb2wgUGF0Y2hwb2ludFNwZWNpYWw6OmlzVmFsaWQoSW5zdCYgaW5zdCkKIHsKLSAgICBp
ZiAoaW5zdC5vcmlnaW4tPnR5cGUoKSA9PSBWb2lkKQotICAgICAgICByZXR1cm4gaXNWYWxpZElt
cGwoMCwgMSwgaW5zdCk7Ci0KLSAgICBpZiAoaW5zdC5hcmdzLnNpemUoKSA8IDIpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBpbnN0Lm9y
aWdpbi0+YXM8UGF0Y2hwb2ludFZhbHVlPigpOwotICAgIGlmICghaXNBcmdWYWxpZEZvclZhbHVl
KGluc3QuYXJnc1sxXSwgcGF0Y2hwb2ludCkpCisgICAgdW5zaWduZWQgYXJnSW5kZXggPSAxOwor
CisgICAgaWYgKGluc3Qub3JpZ2luLT50eXBlKCkgIT0gVm9pZCkgeworICAgICAgICBpZiAoYXJn
SW5kZXggPj0gaW5zdC5hcmdzLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgCisgICAgICAgIGlmICghaXNBcmdWYWxpZEZvclZhbHVlKGluc3QuYXJnc1thcmdJbmRl
eF0sIHBhdGNocG9pbnQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAo
IWlzQXJnVmFsaWRGb3JSZXAoY29kZSgpLCBpbnN0LmFyZ3NbYXJnSW5kZXhdLCBwYXRjaHBvaW50
LT5yZXN1bHRDb25zdHJhaW50KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
YXJnSW5kZXgrKzsKKyAgICB9CisKKyAgICBpZiAoIWlzVmFsaWRJbXBsKDAsIGFyZ0luZGV4LCBp
bnN0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghaXNBcmdWYWxpZEZvclJlcChj
b2RlKCksIGluc3QuYXJnc1sxXSwgcGF0Y2hwb2ludC0+cmVzdWx0Q29uc3RyYWludCkpCisgICAg
YXJnSW5kZXggKz0gcGF0Y2hwb2ludC0+bnVtQ2hpbGRyZW4oKTsKKworICAgIGlmIChhcmdJbmRl
eCArIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVycyArIHBhdGNocG9pbnQtPm51bUZQ
U2NyYXRjaFJlZ2lzdGVycworICAgICAgICAhPSBpbnN0LmFyZ3Muc2l6ZSgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gaXNWYWxpZEltcGwoMCwgMiwgaW5zdCk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzOyBpLS07
KSB7CisgICAgICAgIEFyZyBhcmcgPSBpbnN0LmFyZ3NbYXJnSW5kZXgrK107CisgICAgICAgIGlm
ICghYXJnLmlzR1BUbXAoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gcGF0Y2hwb2ludC0+bnVtRlBTY3JhdGNoUmVnaXN0ZXJzOyBpLS07
KSB7CisgICAgICAgIEFyZyBhcmcgPSBpbnN0LmFyZ3NbYXJnSW5kZXgrK107CisgICAgICAgIGlm
ICghYXJnLmlzRlBUbXAoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiB9CiAK
IGJvb2wgUGF0Y2hwb2ludFNwZWNpYWw6OmFkbWl0c1N0YWNrKEluc3QmIGluc3QsIHVuc2lnbmVk
IGFyZ0luZGV4KQpAQCAtOTksMTYgKzEyMSwyNCBAQCBib29sIFBhdGNocG9pbnRTcGVjaWFsOjph
ZG1pdHNTdGFjayhJbnN0CiBDQ2FsbEhlbHBlcnM6Okp1bXAgUGF0Y2hwb2ludFNwZWNpYWw6Omdl
bmVyYXRlKAogICAgIEluc3QmIGluc3QsIENDYWxsSGVscGVycyYgaml0LCBHZW5lcmF0aW9uQ29u
dGV4dCYgY29udGV4dCkKIHsKLSAgICBTdGFja21hcFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2lu
LT5hczxTdGFja21hcFZhbHVlPigpOworICAgIFBhdGNocG9pbnRWYWx1ZSogdmFsdWUgPSBpbnN0
Lm9yaWdpbi0+YXM8UGF0Y2hwb2ludFZhbHVlPigpOwogICAgIEFTU0VSVCh2YWx1ZSk7CiAKICAg
ICBWZWN0b3I8VmFsdWVSZXA+IHJlcHM7CiAgICAgdW5zaWduZWQgb2Zmc2V0ID0gMTsKICAgICBp
ZiAoaW5zdC5vcmlnaW4tPnR5cGUoKSAhPSBWb2lkKQogICAgICAgICByZXBzLmFwcGVuZChyZXBG
b3JBcmcoKmNvbnRleHQuY29kZSwgaW5zdC5hcmdzW29mZnNldCsrXSkpOwotICAgIGFwcGVuZFJl
cHNJbXBsKGNvbnRleHQsIG9mZnNldCwgaW5zdCwgcmVwcyk7CisgICAgcmVwcy5hcHBlbmRWZWN0
b3IocmVwc0ltcGwoY29udGV4dCwgMCwgb2Zmc2V0LCBpbnN0KSk7CisgICAgb2Zmc2V0ICs9IHZh
bHVlLT5udW1DaGlsZHJlbigpOworCisgICAgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zIHBhcmFt
cyh2YWx1ZSwgcmVwcywgY29udGV4dCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSB2YWx1ZS0+
bnVtR1BTY3JhdGNoUmVnaXN0ZXJzOyBpLS07KQorICAgICAgICBwYXJhbXMubV9ncFNjcmF0Y2gu
YXBwZW5kKGluc3QuYXJnc1tvZmZzZXQrK10pOworICAgIGZvciAodW5zaWduZWQgaSA9IHZhbHVl
LT5udW1GUFNjcmF0Y2hSZWdpc3RlcnM7IGktLTspCisgICAgICAgIHBhcmFtcy5tX2ZwU2NyYXRj
aC5hcHBlbmQoaW5zdC5hcmdzW29mZnNldCsrXSk7CiAgICAgCi0gICAgdmFsdWUtPm1fZ2VuZXJh
dG9yLT5ydW4oaml0LCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXModmFsdWUsIHJlcHMsIGNvbnRl
eHQpKTsKKyAgICB2YWx1ZS0+bV9nZW5lcmF0b3ItPnJ1bihqaXQsIHBhcmFtcyk7CiAKICAgICBy
ZXR1cm4gQ0NhbGxIZWxwZXJzOjpKdW1wKCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAJKHJldmlzaW9uIDE5NDUxNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ0LDYgKzQ0LDggQEAgUGF0Y2hwb2ludFZhbHVlOjpQYXRjaHBvaW50VmFsdWUodW5z
aWduZQogICAgIDogQmFzZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgUGF0Y2hwb2ludCwgdHlwZSwg
b3JpZ2luKQogICAgICwgZWZmZWN0cyhFZmZlY3RzOjpmb3JDYWxsKCkpCiAgICAgLCByZXN1bHRD
b25zdHJhaW50KHR5cGUgPT0gVm9pZCA/IFZhbHVlUmVwOjpXYXJtQW55IDogVmFsdWVSZXA6OlNv
bWVSZWdpc3RlcikKKyAgICAsIG51bUdQU2NyYXRjaFJlZ2lzdGVycygwKQorICAgICwgbnVtRlBT
Y3JhdGNoUmVnaXN0ZXJzKDApCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1BhdGNocG9pbnRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5oCShyZXZpc2lvbiAxOTQ1MTcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNTYs
NiArNTYsMTIgQEAgcHVibGljOgogICAgIC8vIGlzIFZvaWQuIE90aGVyd2lzZSB5b3UgY2FuIHNl
dCB0aGlzIHRvIGFueSBpbnB1dCBjb25zdHJhaW50LgogICAgIFZhbHVlUmVwIHJlc3VsdENvbnN0
cmFpbnQ7CiAKKyAgICAvLyBUaGUgbnVtYmVyIG9mIHNjcmF0Y2ggcmVnaXN0ZXJzIHRoYXQgdGhp
cyBwYXRjaHBvaW50IGdldHMuIFRoZSBzY3JhdGNoIHJlZ2lzdGVyIGlzIGd1YXJhbnRlZWQKKyAg
ICAvLyB0byBiZSBkaWZmZXJlbnQgZnJvbSBhbnkgaW5wdXQgcmVnaXN0ZXIgYW5kIHRoZSBkZXN0
aW5hdGlvbiByZWdpc3Rlci4gSXQncyBhbHNvIGd1YXJhbnRlZWQgbm90CisgICAgLy8gdG8gYmUg
Y2xvYmJlcmVkIGVpdGhlciBlYXJseSBvciBsYXRlLiBUaGlzIGlzIDAgYnkgZGVmYXVsdC4KKyAg
ICB1aW50OF90IG51bUdQU2NyYXRjaFJlZ2lzdGVyczsKKyAgICB1aW50OF90IG51bUZQU2NyYXRj
aFJlZ2lzdGVyczsKKwogcHJvdGVjdGVkOgogICAgIHZvaWQgZHVtcE1ldGEoQ29tbWFQcmludGVy
JiwgUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmgJKHJldmlz
aW9uIDE5NDUxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2Niw5IEBAIHB1YmxpYzoKICAg
ICAvLyAgICAgdXNlZFJlZ2lzdGVycygpIHwgKFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0
ZXJzKCkgLSBwcm9jLmNhbGxlZVNhdmVSZWdpc3RlcnMoKSkKICAgICBSZWdpc3RlclNldCB1bmF2
YWlsYWJsZVJlZ2lzdGVycygpIGNvbnN0OwogCisgICAgR1BSUmVnIGdwU2NyYXRjaCh1bnNpZ25l
ZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9ncFNjcmF0Y2hbaW5kZXhdOyB9CisgICAgRlBSUmVn
IGZwU2NyYXRjaCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9mcFNjcmF0Y2hbaW5k
ZXhdOyB9CisKICAgICAvLyBUaGlzIGlzIHByb3ZpZGVkIGZvciBjb252ZW5pZW5jZTsgaXQgbWVh
bnMgdGhhdCB5b3UgZG9uJ3QgaGF2ZSB0byBjYXB0dXJlIGl0IGlmIHlvdSBkb24ndCB3YW50IHRv
LgogICAgIFByb2NlZHVyZSYgcHJvYygpIGNvbnN0OwogICAgIApAQCAtOTAsNiArOTMsOCBAQCBw
cml2YXRlOgogCiAgICAgU3RhY2ttYXBWYWx1ZSogbV92YWx1ZTsKICAgICBWZWN0b3I8VmFsdWVS
ZXA+IG1fcmVwczsKKyAgICBWZWN0b3I8R1BSUmVnPiBtX2dwU2NyYXRjaDsKKyAgICBWZWN0b3I8
RlBSUmVnPiBtX2ZwU2NyYXRjaDsKICAgICBBaXI6OkdlbmVyYXRpb25Db250ZXh0JiBtX2NvbnRl
eHQ7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNp
YWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFw
U3BlY2lhbC5jcHAJKHJldmlzaW9uIDE5NDUxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N0YWNrbWFwU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDkgKzgxLDkgQEAg
dm9pZCBTdGFja21hcFNwZWNpYWw6OmZvckVhY2hBcmdJbXBsKAogICAgIC8vIENoZWNrIHRoYXQg
aW5zYW5lIHRoaW5ncyBoYXZlIG5vdCBoYXBwZW5lZC4KICAgICBBU1NFUlQoaW5zdC5hcmdzLnNp
emUoKSA+PSBudW1JZ25vcmVkQWlyQXJncyk7CiAgICAgQVNTRVJUKHZhbHVlLT5jaGlsZHJlbigp
LnNpemUoKSA+PSBudW1JZ25vcmVkQjNBcmdzKTsKLSAgICBBU1NFUlQoaW5zdC5hcmdzLnNpemUo
KSAtIG51bUlnbm9yZWRBaXJBcmdzID09IHZhbHVlLT5jaGlsZHJlbigpLnNpemUoKSAtIG51bUln
bm9yZWRCM0FyZ3MpOworICAgIEFTU0VSVChpbnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3JlZEFp
ckFyZ3MgPj0gdmFsdWUtPmNoaWxkcmVuKCkuc2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJncyk7CiAg
ICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluc3QuYXJncy5zaXplKCkgLSBudW1J
Z25vcmVkQWlyQXJnczsgKytpKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVl
LT5jaGlsZHJlbigpLnNpemUoKSAtIG51bUlnbm9yZWRCM0FyZ3M7ICsraSkgewogICAgICAgICBB
cmcmIGFyZyA9IGluc3QuYXJnc1tpICsgbnVtSWdub3JlZEFpckFyZ3NdOwogICAgICAgICBDb25z
dHJhaW5lZFZhbHVlIGNoaWxkID0gdmFsdWUtPmNvbnN0cmFpbmVkQ2hpbGQoaSArIG51bUlnbm9y
ZWRCM0FyZ3MpOwogCkBAIC0xMDMsMTIgKzEwMywxMiBAQCB2b2lkIFN0YWNrbWFwU3BlY2lhbDo6
Zm9yRWFjaEFyZ0ltcGwoCiAgICAgICAgICAgICAgICAgcm9sZSA9IEFyZzo6Q29sZFVzZTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgVmFsdWVSZXA6OkxhdGVDb2xk
QW55OgotICAgICAgICAgICAgICAgIHJvbGUgPSBBcmc6OkxhdGVVc2U7CisgICAgICAgICAgICAg
ICAgcm9sZSA9IEFyZzo6TGF0ZUNvbGRVc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBGb3JjZUxhdGVVc2U6
Ci0gICAgICAgICAgICByb2xlID0gQXJnOjpMYXRlVXNlOworICAgICAgICAgICAgcm9sZSA9IEFy
Zzo6TGF0ZUNvbGRVc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC0xMjks
MTMgKzEyOSwxMyBAQCBib29sIFN0YWNrbWFwU3BlY2lhbDo6aXNWYWxpZEltcGwoCiAgICAgQVNT
RVJUKHZhbHVlLT5jaGlsZHJlbigpLnNpemUoKSA+PSBudW1JZ25vcmVkQjNBcmdzKTsKIAogICAg
IC8vIEZvciB0aGUgSW5zdCB0byBiZSB2YWxpZCwgaXQgbmVlZHMgdG8gaGF2ZSB0aGUgcmlnaHQg
bnVtYmVyIG9mIGFyZ3VtZW50cy4KLSAgICBpZiAoaW5zdC5hcmdzLnNpemUoKSAtIG51bUlnbm9y
ZWRBaXJBcmdzICE9IHZhbHVlLT5jaGlsZHJlbigpLnNpemUoKSAtIG51bUlnbm9yZWRCM0FyZ3Mp
CisgICAgaWYgKGluc3QuYXJncy5zaXplKCkgLSBudW1JZ25vcmVkQWlyQXJncyA8IHZhbHVlLT5j
aGlsZHJlbigpLnNpemUoKSAtIG51bUlnbm9yZWRCM0FyZ3MpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIC8vIFJlZ2FyZGxlc3Mgb2YgY29uc3RyYWludHMsIHN0YWNrbWFwcyBoYXZlIHNv
bWUgYmFzaWMgcmVxdWlyZW1lbnRzIGZvciB0aGVpciBhcmd1bWVudHMuIEZvcgogICAgIC8vIGV4
YW1wbGUsIHlvdSBjYW4ndCBoYXZlIGEgbm9uLUZQLW9mZnNldCBhZGRyZXNzLiBUaGlzIHZlcmlm
aWVzIHRob3NlIGNvbmRpdGlvbnMgYXMgd2VsbCBhcyB0aGUKICAgICAvLyBhcmd1bWVudCB0eXBl
cy4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5zdC5hcmdzLnNpemUoKSAtIG51bUln
bm9yZWRBaXJBcmdzOyArK2kpIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWUt
PmNoaWxkcmVuKCkuc2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJnczsgKytpKSB7CiAgICAgICAgIFZh
bHVlKiBjaGlsZCA9IHZhbHVlLT5jaGlsZChpICsgbnVtSWdub3JlZEIzQXJncyk7CiAgICAgICAg
IEFyZyYgYXJnID0gaW5zdC5hcmdzW2kgKyBudW1JZ25vcmVkQWlyQXJnc107CiAKQEAgLTE2Nyw2
ICsxNjcsMTEgQEAgYm9vbCBTdGFja21hcFNwZWNpYWw6OmFkbWl0c1N0YWNrSW1wbCgKIAogICAg
IHVuc2lnbmVkIHN0YWNrbWFwQXJnSW5kZXggPSBhcmdJbmRleCAtIG51bUlnbm9yZWRBaXJBcmdz
ICsgbnVtSWdub3JlZEIzQXJnczsKIAorICAgIGlmIChzdGFja21hcEFyZ0luZGV4ID49IHZhbHVl
LT5udW1DaGlsZHJlbigpKSB7CisgICAgICAgIC8vIEl0J3Mgbm90IGEgc3RhY2ttYXAgYXJndW1l
bnQsIHNvIGFzIGZhciBhcyB3ZSBhcmUgY29uY2VybmVkLCBpdCBkb2Vzbid0IGFkbWl0IHN0YWNr
LgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCiAgICAgaWYgKHN0YWNrbWFwQXJnSW5k
ZXggPj0gdmFsdWUtPm1fcmVwcy5zaXplKCkpIHsKICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0
IHRoZXJlIHdhcyBubyBjb25zdHJhaW50LgogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE4MCwx
MSArMTg1LDExIEBAIGJvb2wgU3RhY2ttYXBTcGVjaWFsOjphZG1pdHNTdGFja0ltcGwoCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFN0YWNrbWFwU3BlY2lhbDo6YXBwZW5kUmVwc0ltcGwo
Ci0gICAgR2VuZXJhdGlvbkNvbnRleHQmIGNvbnRleHQsIHVuc2lnbmVkIG51bUlnbm9yZWRBcmdz
LCBJbnN0JiBpbnN0LCBWZWN0b3I8VmFsdWVSZXA+JiByZXN1bHQpCitWZWN0b3I8VmFsdWVSZXA+
IFN0YWNrbWFwU3BlY2lhbDo6cmVwc0ltcGwoCisgICAgR2VuZXJhdGlvbkNvbnRleHQmIGNvbnRl
eHQsIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVuc2lnbmVkIG51bUlnbm9yZWRBaXJBcmdz
LCBJbnN0JiBpbnN0KQogewotICAgIGZvciAodW5zaWduZWQgaSA9IG51bUlnbm9yZWRBcmdzOyBp
IDwgaW5zdC5hcmdzLnNpemUoKTsgKytpKQotICAgICAgICByZXN1bHQuYXBwZW5kKHJlcEZvckFy
ZygqY29udGV4dC5jb2RlLCBpbnN0LmFyZ3NbaV0pKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgdmFsdWUtPmNoaWxkcmVuKCkuc2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJnczsgKytpKQor
ICAgICAgICByZXN1bHQuYXBwZW5kKHJlcEZvckFyZygqY29udGV4dC5jb2RlLCBpbnN0LmFyZ3Nb
aSArIG51bUlnbm9yZWRBaXJBcmdzXSkpOwogfQogCiBib29sIFN0YWNrbWFwU3BlY2lhbDo6aXNB
cmdWYWxpZEZvclZhbHVlKGNvbnN0IEFpcjo6QXJnJiBhcmcsIFZhbHVlKiB2YWx1ZSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5oCShyZXZpc2lv
biAxOTQ1MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwu
aAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksOCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIEFp
cjo6SW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KTsKIAogICAgIC8vIEFwcGVuZHMgdGhlIHJlcHMg
Zm9yIHRoZSBJbnN0J3MgYXJncywgc3RhcnRpbmcgd2l0aCBudW1JZ25vcmVkQXJncywgdG8gdGhl
IGdpdmVuIHZlY3Rvci4KLSAgICB2b2lkIGFwcGVuZFJlcHNJbXBsKEFpcjo6R2VuZXJhdGlvbkNv
bnRleHQmLCB1bnNpZ25lZCBudW1JZ25vcmVkQXJncywgQWlyOjpJbnN0JiwgVmVjdG9yPFZhbHVl
UmVwPiYpOworICAgIFZlY3RvcjxWYWx1ZVJlcD4gcmVwc0ltcGwoCisgICAgICAgIEFpcjo6R2Vu
ZXJhdGlvbkNvbnRleHQmLCB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1J
Z25vcmVkQWlyQXJncywgQWlyOjpJbnN0Jik7CiAKICAgICBzdGF0aWMgYm9vbCBpc0FyZ1ZhbGlk
Rm9yVmFsdWUoY29uc3QgQWlyOjpBcmcmLCBWYWx1ZSopOwogICAgIHN0YXRpYyBib29sIGlzQXJn
VmFsaWRGb3JSZXAoQWlyOjpDb2RlJiwgY29uc3QgQWlyOjpBcmcmLCBjb25zdCBWYWx1ZVJlcCYp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRl
U3RhY2suY3BwCShyZXZpc2lvbiAxOTQ1MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMsMTQgKzE0Mywx
MyBAQCB2b2lkIGFsbG9jYXRlU3RhY2soQ29kZSYgY29kZSkKICAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrIDogY29kZSkgewogICAgICAgICBTdGFja1Nsb3RMaXZlbmVzczo6TG9jYWxDYWxjIGxv
Y2FsQ2FsYyhsaXZlbmVzcywgYmxvY2spOwogCi0gICAgICAgIGF1dG8gaW50ZXJmZXJlID0gWyZd
IChJbnN0JiBpbnN0KSB7CisgICAgICAgIGF1dG8gaW50ZXJmZXJlID0gWyZdICh1bnNpZ25lZCBp
bnN0SW5kZXgpIHsKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgIGRh
dGFMb2coIkludGVyZmVyaW5nOiAiLCBXVEY6OnBvaW50ZXJMaXN0RHVtcChsb2NhbENhbGMubGl2
ZSgpKSwgIlxuIik7CiAKLSAgICAgICAgICAgIGluc3QuZm9yRWFjaEFyZygKLSAgICAgICAgICAg
ICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRo
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghQXJnOjppc0RlZihyb2xlKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIEluc3Q6OmZvckVhY2hEZWYoCisg
ICAgICAgICAgICAgICAgYmxvY2stPmdldChpbnN0SW5kZXgpLCBibG9jay0+Z2V0KGluc3RJbmRl
eCArIDEpLAorICAgICAgICAgICAgICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSwgQXJnOjpU
eXBlLCBBcmc6OldpZHRoKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzU3RhY2so
KSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAg
U3RhY2tTbG90KiBzbG90ID0gYXJnLnN0YWNrU2xvdCgpOwpAQCAtMTY3LDEyICsxNjYsMTAgQEAg
dm9pZCBhbGxvY2F0ZVN0YWNrKENvZGUmIGNvZGUpCiAgICAgICAgIGZvciAodW5zaWduZWQgaW5z
dEluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5zdEluZGV4LS07KSB7CiAgICAgICAgICAgICBpZiAo
dmVyYm9zZSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJBbmFseXppbmc6ICIsIGJsb2NrLT5h
dChpbnN0SW5kZXgpLCAiXG4iKTsKLSAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQo
aW5zdEluZGV4KTsKLSAgICAgICAgICAgIGludGVyZmVyZShpbnN0KTsKKyAgICAgICAgICAgIGlu
dGVyZmVyZShpbnN0SW5kZXgpOwogICAgICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUoaW5zdElu
ZGV4KTsKICAgICAgICAgfQotICAgICAgICBJbnN0IG5vcDsKLSAgICAgICAgaW50ZXJmZXJlKG5v
cCk7CisgICAgICAgIGludGVyZmVyZSgtMSk7CiAgICAgfQogCiAgICAgaWYgKHZlcmJvc2UpIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAkocmV2aXNpb24gMTk0NTE3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAkod29ya2luZyBjb3B5
KQpAQCAtOTIsMTAgKzkyLDEyIEBAIHB1YmxpYzoKICAgICAgICAgQ29sZFVzZSwKIAogICAgICAg
ICAvLyBMYXRlVXNlIG1lYW5zIHRoYXQgdGhlIEluc3Qgd2lsbCByZWFkIGZyb20gdGhpcyB2YWx1
ZSBhZnRlciBkb2luZyBpdHMgRGVmJ3MuIE5vdGUgdGhhdCBMYXRlVXNlCi0gICAgICAgIC8vIG9u
IGFuIEFkZHIgb3IgSW5kZXggc3RpbGwgbWVhbnMgVXNlIG9uIHRoZSBpbnRlcm5hbCB0ZW1wb3Jh
cmllcy4gTGF0ZVVzZSBhbHNvIGN1cnJlbnRseSBhbHNvCi0gICAgICAgIC8vIGltcGxpZXMgQ29s
ZFVzZS4KKyAgICAgICAgLy8gb24gYW4gQWRkciBvciBJbmRleCBzdGlsbCBtZWFucyBVc2Ugb24g
dGhlIGludGVybmFsIHRlbXBvcmFyaWVzLgogICAgICAgICBMYXRlVXNlLAogCisgICAgICAgIC8v
IENvbWJpbmF0aW9uIG9mIExhdGVVc2UgYW5kIENvbGRVc2UuCisgICAgICAgIExhdGVDb2xkVXNl
LAorCiAgICAgICAgIC8vIERlZiBtZWFucyB0aGF0IHRoZSBJbnN0IHdpbGwgd3JpdGUgdG8gdGhp
cyB2YWx1ZSBhZnRlciBkb2luZyBldmVyeXRoaW5nIGVsc2UuCiAgICAgICAgIC8vCiAgICAgICAg
IC8vIEZvciBUbXA6IFRoZSBJbnN0IHdpbGwgd3JpdGUgdG8gdGhpcyBUbXAuCkBAIC0xMjcsNiAr
MTI5LDE0IEBAIHB1YmxpYzoKICAgICAgICAgLy8gVGhpcyBpcyBhIGNvbWJpbmVkIFVzZSBhbmQg
WkRlZi4gSXQgbWVhbnMgdGhhdCBib3RoIHRoaW5ncyBoYXBwZW4uCiAgICAgICAgIFVzZVpEZWYs
CiAKKyAgICAgICAgLy8gVGhpcyBpcyBsaWtlIERlZiwgYnV0IGltcGxpZXMgdGhhdCB0aGUgYXNz
aWdubWVudCBvY2N1cnMgYmVmb3JlIHRoZSBzdGFydCBvZiB0aGUgSW5zdCdzCisgICAgICAgIC8v
IGV4ZWN1dGlvbiByYXRoZXIgdGhhbiBhZnRlci4KKyAgICAgICAgRWFybHlEZWYsCisKKyAgICAg
ICAgLy8gU29tZSBpbnN0cnVjdGlvbnMgbmVlZCBhIHNjcmF0Y2ggcmVnaXN0ZXIuIFdlIG1vZGVs
IHRoaXMgYnkgc2F5aW5nIHRoYXQgdGhlIHRlbXBvcmFyeSBpcworICAgICAgICAvLyBkZWZpbmVk
IGVhcmx5IGFuZCB1c2VkIGxhdGUuIFRoaXMgcm9sZSBpbXBsaWVzIHRoYXQuCisgICAgICAgIFNj
cmF0Y2gsCisKICAgICAgICAgLy8gVGhpcyBpcyBhIHNwZWNpYWwga2luZCBvZiB1c2UgdGhhdCBp
cyBvbmx5IHZhbGlkIGZvciBhZGRyZXNzZXMuIEl0IG1lYW5zIHRoYXQgdGhlCiAgICAgICAgIC8v
IGluc3RydWN0aW9uIHdpbGwgZXZhbHVhdGUgdGhlIGFkZHJlc3MgZXhwcmVzc2lvbiBhbmQgY29u
c3VtZSB0aGUgZWZmZWN0aXZlIGFkZHJlc3MsIGJ1dCBpdAogICAgICAgICAvLyB3aWxsIG5laXRo
ZXIgbG9hZCBub3Igc3RvcmUuIFRoaXMgaXMgYW4gZXNjYXBpbmcgdXNlLCBiZWNhdXNlIG5vdyB0
aGUgYWRkcmVzcyBtYXkgYmUKQEAgLTE3MSw2ICsxODEsOCBAQCBwdWJsaWM6CiAgICAgICAgIGNh
c2UgVXNlRGVmOgogICAgICAgICBjYXNlIFVzZVpEZWY6CiAgICAgICAgIGNhc2UgTGF0ZVVzZToK
KyAgICAgICAgY2FzZSBMYXRlQ29sZFVzZToKKyAgICAgICAgY2FzZSBTY3JhdGNoOgogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGNhc2UgRGVmOgogICAgICAgICBjYXNlIFpEZWY6
CkBAIC0xODMsMTQgKzE5NSwxNiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBzd2l0Y2ggKHJv
bGUpIHsKICAgICAgICAgY2FzZSBDb2xkVXNlOgotICAgICAgICBjYXNlIExhdGVVc2U6CisgICAg
ICAgIGNhc2UgTGF0ZUNvbGRVc2U6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
Y2FzZSBVc2U6CiAgICAgICAgIGNhc2UgVXNlRGVmOgogICAgICAgICBjYXNlIFVzZVpEZWY6Cisg
ICAgICAgIGNhc2UgTGF0ZVVzZToKICAgICAgICAgY2FzZSBEZWY6CiAgICAgICAgIGNhc2UgWkRl
ZjoKICAgICAgICAgY2FzZSBVc2VBZGRyOgorICAgICAgICBjYXNlIFNjcmF0Y2g6CiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CkBAIC0yMTMsNiArMjI3LDggQEAg
cHVibGljOgogICAgICAgICBjYXNlIFpEZWY6CiAgICAgICAgIGNhc2UgVXNlQWRkcjoKICAgICAg
ICAgY2FzZSBMYXRlVXNlOgorICAgICAgICBjYXNlIExhdGVDb2xkVXNlOgorICAgICAgICBjYXNl
IFNjcmF0Y2g6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CkBA
IC0yMjAsMTcgKzIzNiw3MCBAQCBwdWJsaWM6CiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBS
b2xlIGltcGxpZXMgdGhhdCB0aGUgSW5zdCB3aWxsIFVzZSB0aGUgQXJnIGFmdGVyIGRvaW5nIGV2
ZXJ5dGhpbmcgZWxzZS4KICAgICBzdGF0aWMgYm9vbCBpc0xhdGVVc2UoUm9sZSByb2xlKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIHJvbGUgPT0gTGF0ZVVzZTsKKyAgICAgICAgc3dpdGNoIChyb2xl
KSB7CisgICAgICAgIGNhc2UgTGF0ZVVzZToKKyAgICAgICAgY2FzZSBMYXRlQ29sZFVzZToKKyAg
ICAgICAgY2FzZSBTY3JhdGNoOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNh
c2UgQ29sZFVzZToKKyAgICAgICAgY2FzZSBVc2U6CisgICAgICAgIGNhc2UgVXNlRGVmOgorICAg
ICAgICBjYXNlIFVzZVpEZWY6CisgICAgICAgIGNhc2UgRGVmOgorICAgICAgICBjYXNlIFpEZWY6
CisgICAgICAgIGNhc2UgVXNlQWRkcjoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQogICAgIH0KIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgUm9sZSBpbXBsaWVzIHRo
YXQgdGhlIEluc3Qgd2lsbCBEZWYgdGhlIEFyZy4KLSAgICBzdGF0aWMgYm9vbCBpc0RlZihSb2xl
IHJvbGUpCisgICAgc3RhdGljIGJvb2wgaXNBbnlEZWYoUm9sZSByb2xlKQorICAgIHsKKyAgICAg
ICAgc3dpdGNoIChyb2xlKSB7CisgICAgICAgIGNhc2UgVXNlOgorICAgICAgICBjYXNlIENvbGRV
c2U6CisgICAgICAgIGNhc2UgVXNlQWRkcjoKKyAgICAgICAgY2FzZSBMYXRlVXNlOgorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIERlZjoKKyAgICAgICAgY2FzZSBVc2VE
ZWY6CisgICAgICAgIGNhc2UgWkRlZjoKKyAgICAgICAgY2FzZSBVc2VaRGVmOgorICAgICAgICBj
YXNlIEVhcmx5RGVmOgorICAgICAgICBjYXNlIFNjcmF0Y2g6CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgUm9s
ZSBpbXBsaWVzIHRoYXQgdGhlIEluc3Qgd2lsbCBEZWYgdGhlIEFyZyBiZWZvcmUgc3RhcnQgb2Yg
ZXhlY3V0aW9uLgorICAgIHN0YXRpYyBib29sIGlzRWFybHlEZWYoUm9sZSByb2xlKQorICAgIHsK
KyAgICAgICAgc3dpdGNoIChyb2xlKSB7CisgICAgICAgIGNhc2UgVXNlOgorICAgICAgICBjYXNl
IENvbGRVc2U6CisgICAgICAgIGNhc2UgVXNlQWRkcjoKKyAgICAgICAgY2FzZSBMYXRlVXNlOgor
ICAgICAgICBjYXNlIERlZjoKKyAgICAgICAgY2FzZSBVc2VEZWY6CisgICAgICAgIGNhc2UgWkRl
ZjoKKyAgICAgICAgY2FzZSBVc2VaRGVmOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBjYXNlIEVhcmx5RGVmOgorICAgICAgICBjYXNlIFNjcmF0Y2g6CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGUgUm9sZSBpbXBsaWVzIHRoYXQgdGhlIEluc3Qgd2lsbCBEZWYgdGhlIEFyZyBhZnRlciB0aGUg
ZW5kIG9mIGV4ZWN1dGlvbi4KKyAgICBzdGF0aWMgYm9vbCBpc0xhdGVEZWYoUm9sZSByb2xlKQog
ICAgIHsKICAgICAgICAgc3dpdGNoIChyb2xlKSB7CiAgICAgICAgIGNhc2UgVXNlOgogICAgICAg
ICBjYXNlIENvbGRVc2U6CiAgICAgICAgIGNhc2UgVXNlQWRkcjoKICAgICAgICAgY2FzZSBMYXRl
VXNlOgorICAgICAgICBjYXNlIEVhcmx5RGVmOgorICAgICAgICBjYXNlIFNjcmF0Y2g6CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNhc2UgRGVmOgogICAgICAgICBjYXNlIFVz
ZURlZjoKQEAgLTI1MCw2ICszMTksOCBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgTGF0ZVVzZToK
ICAgICAgICAgY2FzZSBEZWY6CiAgICAgICAgIGNhc2UgVXNlRGVmOgorICAgICAgICBjYXNlIEVh
cmx5RGVmOgorICAgICAgICBjYXNlIFNjcmF0Y2g6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIGNhc2UgWkRlZjoKICAgICAgICAgY2FzZSBVc2VaRGVmOgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDE5NDUx
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NCw2ICs2NCwxMSBAQCBwdWJsaWM6CiAgICAgY29uc3QgSW5zdCYgYXQo
dW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHNbaW5kZXhdOyB9CiAgICAgSW5z
dCYgYXQodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1faW5zdHNbaW5kZXhdOyB9CiAKKyAgICBJ
bnN0KiBnZXQodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gaW5kZXggPCBz
aXplKCkgPyAmYXQoaW5kZXgpIDogbnVsbHB0cjsKKyAgICB9CisKICAgICBjb25zdCBJbnN0JiBs
YXN0KCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cy5sYXN0KCk7IH0KICAgICBJbnN0JiBsYXN0KCkg
eyByZXR1cm4gbV9pbnN0cy5sYXN0KCk7IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJJbnN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJJbnN0LmgJKHJldmlzaW9uIDE5NDUxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlySW5zdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsMTAgKzEyNywxOCBAQCBw
dWJsaWM6CiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJhQ2xvYmJlcmVkUmVncygpOwogICAg
IGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYUVhcmx5Q2xvYmJlcmVkUmVncygpOwogCi0gICAgLy8g
SXRlcmF0ZSBvdmVyIHRoZSBEZWZzIGFuZCB0aGUgZXh0cmEgY2xvYmJlcmVkIHJlZ2lzdGVycy4g
WW91IG11c3Qgc3VwcGx5IHRoZSBuZXh0IGluc3RydWN0aW9uIGlmCi0gICAgLy8gdGhlcmUgaXMg
b25lLgorICAgIC8vIEl0ZXJhdGUgb3ZlciBhbGwgRGVmJ3MgdGhhdCBoYXBwZW4gYXQgdGhlIGVu
ZCBvZiBhbiBpbnN0cnVjdGlvbi4gWW91IHN1cHBseSBhIHBhaXIKKyAgICAvLyBpbnN0cnVjdGlv
bnMuIFRoZSBpbnN0cnVjdGlvbnMgbXVzdCBhcHBlYXIgbmV4dCB0byBlYWNoIG90aGVyLCBpbiB0
aGF0IG9yZGVyLCBpbiBzb21lIGJhc2ljCisgICAgLy8gYmxvY2suIFlvdSBjYW4gcGFzcyBudWxs
IGZvciB0aGUgZmlyc3QgaW5zdHJ1Y3Rpb24gd2hlbiBhbmFseXppbmcgd2hhdCBoYXBwZW5zIGF0
IHRoZSB0b3Agb2YKKyAgICAvLyBhIGJhc2ljIGJsb2NrLiBZb3UgY2FuIHBhc3MgbnVsbCBmb3Ig
dGhlIHNlY29uZCBpbnN0cnVjdGlvbiB3aGVuIGFuYWx5emluZyB3aGF0IGhhcHBlbnMgYXQgdGhl
CisgICAgLy8gYm90dG9tIG9mIGEgYmFzaWMgYmxvY2suCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4KLSAgICB2b2lkIGZvckVhY2hUbXBXaXRoRXh0cmFDbG9iYmVyZWRSZWdzKEluc3Qq
IG5leHRJbnN0LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKTsKKyAgICBzdGF0aWMgdm9pZCBmb3JF
YWNoRGVmKEluc3QqIHByZXZJbnN0LCBJbnN0KiBuZXh0SW5zdCwgY29uc3QgRnVuY3RvciYpOwor
CisgICAgLy8gSXRlcmF0ZSBvdmVyIGFsbCBEZWYncyB0aGF0IGhhcHBlbiBhdCB0aGUgZW5kIG9m
IHRoaXMgaW5zdHJ1Y3Rpb24sIGluY2x1ZGluZyBleHRyYSBjbG9iYmVyZWQKKyAgICAvLyByZWdp
c3RlcnMuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBzdGF0aWMgdm9pZCBm
b3JFYWNoRGVmV2l0aEV4dHJhQ2xvYmJlcmVkUmVncyhJbnN0KiBwcmV2SW5zdCwgSW5zdCogbmV4
dEluc3QsIGNvbnN0IEZ1bmN0b3ImKTsKIAogICAgIC8vIFVzZSB0aGlzIHRvIHJlcG9ydCB3aGlj
aCByZWdpc3RlcnMgYXJlIGxpdmUuIFRoaXMgc2hvdWxkIGJlIGRvbmUganVzdCBiZWZvcmUgY29k
ZWdlbi4gTm90ZQogICAgIC8vIHRoYXQgZm9yIGVmZmljaWVuY3ksIHJlcG9ydFVzZWRSZWdpc3Rl
cnMoKSBvbmx5IHdvcmtzIGlmIGhhc1NwZWNpYWwoKSByZXR1cm5zIHRydWUuCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCShyZXZpc2lvbiAx
OTQ1MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTk2LDIzICs5Niw0NyBAQCBpbmxpbmUgY29uc3QgUmVnaXN0ZXJT
ZXQmIEluc3Q6OmV4dHJhRWFyCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci1pbmxp
bmUgdm9pZCBJbnN0Ojpmb3JFYWNoVG1wV2l0aEV4dHJhQ2xvYmJlcmVkUmVncyhJbnN0KiBuZXh0
SW5zdCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKK2lubGluZSB2b2lkIEluc3Q6OmZvckVhY2hE
ZWYoSW5zdCogcHJldkluc3QsIEluc3QqIG5leHRJbnN0LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9y
KQogewotICAgIGZvckVhY2hUbXAoCi0gICAgICAgIFsmXSAoVG1wJiB0bXBBcmcsIEFyZzo6Um9s
ZSByb2xlLCBBcmc6OlR5cGUgYXJnVHlwZSwgQXJnOjpXaWR0aCBhcmdXaWR0aCkgewotICAgICAg
ICAgICAgZnVuY3Rvcih0bXBBcmcsIHJvbGUsIGFyZ1R5cGUsIGFyZ1dpZHRoKTsKLSAgICAgICAg
fSk7CisgICAgaWYgKHByZXZJbnN0KSB7CisgICAgICAgIGZvckVhY2hUbXAoCisgICAgICAgICAg
ICBbJl0gKFRtcCYgdG1wQXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIGFyZ1R5cGUsIEFy
Zzo6V2lkdGggYXJnV2lkdGgpIHsKKyAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0xhdGVEZWYo
cm9sZSkpCisgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IodG1wQXJnLCByb2xlLCBhcmdUeXBl
LCBhcmdXaWR0aCk7CisgICAgICAgICAgICB9KTsKKyAgICB9CisKKyAgICBpZiAobmV4dEluc3Qp
IHsKKyAgICAgICAgZm9yRWFjaFRtcCgKKyAgICAgICAgICAgIFsmXSAoVG1wJiB0bXBBcmcsIEFy
Zzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgYXJnVHlwZSwgQXJnOjpXaWR0aCBhcmdXaWR0aCkgewor
ICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzRWFybHlEZWYocm9sZSkpCisgICAgICAgICAgICAg
ICAgICAgIGZ1bmN0b3IodG1wQXJnLCByb2xlLCBhcmdUeXBlLCBhcmdXaWR0aCk7CisgICAgICAg
ICAgICB9KTsKKyAgICB9Cit9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CitpbmxpbmUg
dm9pZCBJbnN0Ojpmb3JFYWNoRGVmV2l0aEV4dHJhQ2xvYmJlcmVkUmVncygKKyAgICBJbnN0KiBw
cmV2SW5zdCwgSW5zdCogbmV4dEluc3QsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCit7CisgICAg
Zm9yRWFjaERlZihwcmV2SW5zdCwgbmV4dEluc3QsIGZ1bmN0b3IpOworCisgICAgQXJnOjpSb2xl
IHJlZ0RlZlJvbGU7CisgICAgCiAgICAgYXV0byByZXBvcnRSZWcgPSBbJl0gKFJlZyByZWcpIHsK
ICAgICAgICAgQXJnOjpUeXBlIHR5cGUgPSByZWcuaXNHUFIoKSA/IEFyZzo6R1AgOiBBcmc6OkZQ
OwotICAgICAgICBmdW5jdG9yKFRtcChyZWcpLCBBcmc6OkRlZiwgdHlwZSwgQXJnOjpjb25zZXJ2
YXRpdmVXaWR0aCh0eXBlKSk7CisgICAgICAgIGZ1bmN0b3IoVG1wKHJlZyksIHJlZ0RlZlJvbGUs
IHR5cGUsIEFyZzo6Y29uc2VydmF0aXZlV2lkdGgodHlwZSkpOwogICAgIH07CiAKLSAgICBpZiAo
aGFzU3BlY2lhbCgpKQotICAgICAgICBleHRyYUNsb2JiZXJlZFJlZ3MoKS5mb3JFYWNoKHJlcG9y
dFJlZyk7Ci0KLSAgICBpZiAobmV4dEluc3QgJiYgbmV4dEluc3QtPmhhc1NwZWNpYWwoKSkKLSAg
ICAgICAgbmV4dEluc3QtPmV4dHJhRWFybHlDbG9iYmVyZWRSZWdzKCkuZm9yRWFjaChyZXBvcnRS
ZWcpOworICAgIGlmIChwcmV2SW5zdCAmJiBwcmV2SW5zdC0+aGFzU3BlY2lhbCgpKSB7CisgICAg
ICAgIHJlZ0RlZlJvbGUgPSBBcmc6OkRlZjsKKyAgICAgICAgcHJldkluc3QtPmV4dHJhQ2xvYmJl
cmVkUmVncygpLmZvckVhY2gocmVwb3J0UmVnKTsKKyAgICB9CisKKyAgICBpZiAobmV4dEluc3Qg
JiYgbmV4dEluc3QtPmhhc1NwZWNpYWwoKSkgeworICAgICAgICByZWdEZWZSb2xlID0gQXJnOjpF
YXJseURlZjsKKyAgICAgICAgbmV4dE5leHQtPmV4dHJhRWFybHlDbG9iYmVyZWRSZWdzKCkuZm9y
RWFjaChyZXBvcnRSZWcpOworICAgIH0KIH0KIAogaW5saW5lIHZvaWQgSW5zdDo6cmVwb3J0VXNl
ZFJlZ2lzdGVycyhjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycykKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRS
ZWdpc3RlckNvYWxlc2NpbmcuY3BwCShyZXZpc2lvbiAxOTQ1MTcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzcwLDM5ICs3NzAsNDIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHR5cGVu
YW1lIFRtcExpdmVuZXNzPHR5cGU+OjpMb2NhbENhbGMgbG9jYWxDYWxjKGxpdmVuZXNzLCBibG9j
ayk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7
IGluc3RJbmRleC0tOykgewogICAgICAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQo
aW5zdEluZGV4KTsKLSAgICAgICAgICAgICAgICBJbnN0KiBuZXh0SW5zdCA9IGluc3RJbmRleCAr
IDEgPCBibG9jay0+c2l6ZSgpID8gJmJsb2NrLT5hdChpbnN0SW5kZXggKyAxKSA6IG51bGxwdHI7
Ci0gICAgICAgICAgICAgICAgYnVpbGQoaW5zdCwgbmV4dEluc3QsIGxvY2FsQ2FsYyk7CisgICAg
ICAgICAgICAgICAgSW5zdCogbmV4dEluc3QgPSBibG9jay0+Z2V0KGluc3RJbmRleCArIDEpOwor
ICAgICAgICAgICAgICAgIGJ1aWxkKCZpbnN0LCBuZXh0SW5zdCwgbG9jYWxDYWxjKTsKICAgICAg
ICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZShpbnN0SW5kZXgpOwogICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnVpbGQobnVsbHB0ciwgJmJsb2NrLT5hdCgwKSwgbG9jYWxDYWxjKTsKICAg
ICAgICAgfQogICAgIH0KIAotICAgIHZvaWQgYnVpbGQoSW5zdCYgaW5zdCwgSW5zdCogbmV4dElu
c3QsIGNvbnN0IHR5cGVuYW1lIFRtcExpdmVuZXNzPHR5cGU+OjpMb2NhbENhbGMmIGxvY2FsQ2Fs
YykKKyAgICB2b2lkIGJ1aWxkKEluc3QqIHByZXZJbnN0LCBJbnN0KiBuZXh0SW5zdCwgY29uc3Qg
dHlwZW5hbWUgVG1wTGl2ZW5lc3M8dHlwZT46OkxvY2FsQ2FsYyYgbG9jYWxDYWxjKQogICAgIHsK
LSAgICAgICAgaW5zdC5mb3JFYWNoVG1wV2l0aEV4dHJhQ2xvYmJlcmVkUmVncygKLSAgICAgICAg
ICAgIG5leHRJbnN0LAorICAgICAgICBJbnN0Ojpmb3JFYWNoRGVmV2l0aEV4dHJhQ2xvYmJlcmVk
UmVncygKKyAgICAgICAgICAgIHByZXZJbnN0LCBuZXh0SW5zdCwKICAgICAgICAgICAgIFsmXSAo
Y29uc3QgVG1wJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgYXJnVHlwZSwgQXJnOjpX
aWR0aCkgewotICAgICAgICAgICAgICAgIGlmICghQXJnOjppc0RlZihyb2xlKSB8fCBhcmdUeXBl
ICE9IHR5cGUpCisgICAgICAgICAgICAgICAgaWYgKGFyZ1R5cGUgIT0gdHlwZSkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8v
IEFsbCB0aGUgRGVmKClzIGludGVyZmVyZSB3aXRoIGVhY2ggb3RoZXIgYW5kIHdpdGggYWxsIHRo
ZSBleHRyYSBjbG9iYmVyZWQgVG1wcy4KICAgICAgICAgICAgICAgICAvLyBXZSBzaG91bGQgbm90
IHVzZSBmb3JFYWNoRGVmQW5kRXh0cmFDbG9iYmVyZWRUbXAoKSBoZXJlIHNpbmNlIGNvbG9yZWQg
VG1wcwogICAgICAgICAgICAgICAgIC8vIGRvIG5vdCBuZWVkIGludGVyZmVyZW5jZSBlZGdlcyBp
biBvdXIgaW1wbGVtZW50YXRpb24uCi0gICAgICAgICAgICAgICAgaW5zdC5mb3JFYWNoVG1wKFsm
XSAoVG1wJiBvdGhlckFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSBhcmdUeXBlLCBBcmc6
OldpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghQXJnOjppc0RlZihyb2xlKSB8fCBh
cmdUeXBlICE9IHR5cGUpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgICAgICAgICAgICAgYWRkRWRnZShhcmcsIG90aGVyQXJnKTsKLSAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgICAgICBJbnN0Ojpmb3JFYWNoRGVmKAorICAgICAgICAgICAgICAgICAg
ICBwcmV2SW5zdCwgbmV4dEluc3QsCisgICAgICAgICAgICAgICAgICAgIFsmXSAoVG1wJiBvdGhl
ckFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSBhcmdUeXBlLCBBcmc6OldpZHRoKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJnVHlwZSAhPSB0eXBlKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICAgICAgYWRkRWRnZShhcmcsIG90aGVyQXJnKTsKKyAgICAgICAgICAgICAg
ICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKIAotICAgICAgICBpZiAobWF5QmVDb2FsZXNjYWJs
ZShpbnN0KSkgeworICAgICAgICBpZiAocHJldkluc3QgJiYgbWF5QmVDb2FsZXNjYWJsZSgqcHJl
dkluc3QpKSB7CiAgICAgICAgICAgICAvLyBXZSBkbyBub3Qgd2FudCB0aGUgVXNlKCkgb2YgdGhp
cyBtb3ZlIHRvIGludGVyZmVyZSB3aXRoIHRoZSBEZWYoKSwgZXZlbiBpZiBpdCBpcyBsaXZlCiAg
ICAgICAgICAgICAvLyBhZnRlciB0aGUgTW92ZS4gSWYgd2Ugd2VyZSB0byBhZGQgdGhlIGludGVy
ZmVyZW5jZSBlZGdlLCBpdCB3b3VsZCBiZSBpbXBvc3NpYmxlIHRvCiAgICAgICAgICAgICAvLyBj
b2FsZXNjZSB0aGUgTW92ZSBldmVuIGlmIHRoZSB0d28gVG1wIG5ldmVyIGludGVyZmVyZSBhbnl3
aGVyZS4KICAgICAgICAgICAgIFRtcCBkZWZUbXA7CiAgICAgICAgICAgICBUbXAgdXNlVG1wOwot
ICAgICAgICAgICAgaW5zdC5mb3JFYWNoVG1wKFsmZGVmVG1wLCAmdXNlVG1wXSAoVG1wJiBhcmdU
bXAsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUsIEFyZzo6V2lkdGgpIHsKKyAgICAgICAgICAg
IHByZXZJbnN0LT5mb3JFYWNoVG1wKFsmZGVmVG1wLCAmdXNlVG1wXSAoVG1wJiBhcmdUbXAsIEFy
Zzo6Um9sZSByb2xlLCBBcmc6OlR5cGUsIEFyZzo6V2lkdGgpIHsKICAgICAgICAgICAgICAgICBp
ZiAoQXJnOjppc0RlZihyb2xlKSkKICAgICAgICAgICAgICAgICAgICAgZGVmVG1wID0gYXJnVG1w
OwogICAgICAgICAgICAgICAgIGVsc2UgewpAQCAtODMyLDI2ICs4MzUsMjAgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAgICAgYWRkRWRnZShkZWZUbXAsIGxpdmVUbXApOwogICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICAvLyBUaGUgbmV4dCBpbnN0cnVjdGlvbiBjb3VsZCBoYXZlIGVh
cmx5IGNsb2JiZXJzLiBXZSBuZWVkIHRvIGNvbnNpZGVyIHRob3NlIG5vdy4KLSAgICAgICAgICAg
IGlmIChuZXh0SW5zdCAmJiBuZXh0SW5zdC0+aGFzU3BlY2lhbCgpKSB7Ci0gICAgICAgICAgICAg
ICAgbmV4dEluc3QtPmV4dHJhRWFybHlDbG9iYmVyZWRSZWdzKCkuZm9yRWFjaChbJl0gKFJlZyBy
ZWcpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlZy5pc0dQUigpID09ICh0eXBlID09IEFy
Zzo6R1ApKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFRtcCYgbGl2ZVRt
cCA6IGxvY2FsQ2FsYy5saXZlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWRn
ZShUbXAocmVnKSwgbGl2ZVRtcCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIFRoZSBuZXh0IGluc3RydWN0
aW9uIGNvdWxkIGhhdmUgZWFybHkgY2xvYmJlcnMgb3IgZWFybHkgZGVmJ3MuIFdlIG5lZWQgdG8g
Y29uc2lkZXIKKyAgICAgICAgICAgIC8vIHRob3NlIG5vdy4KKyAgICAgICAgICAgIGFkZEVkZ2Vz
KG51bGxwdHIsIG5leHRJbnN0LCBsb2NhbENhbGMubGl2ZSgpKTsKICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICBhZGRFZGdlcyhpbnN0LCBuZXh0SW5zdCwgbG9jYWxDYWxjLmxpdmUoKSk7Cisg
ICAgICAgICAgICBhZGRFZGdlcyhwcmV2SW5zdCwgbmV4dEluc3QsIGxvY2FsQ2FsYy5saXZlKCkp
OwogICAgIH0KIAotICAgIHZvaWQgYWRkRWRnZXMoSW5zdCYgaW5zdCwgSW5zdCogbmV4dEluc3Qs
IHR5cGVuYW1lIFRtcExpdmVuZXNzPHR5cGU+OjpMb2NhbENhbGM6Okl0ZXJhYmxlIGxpdmVUbXBz
KQorICAgIHZvaWQgYWRkRWRnZXMoSW5zdCogcHJldkluc3QsIEluc3QqIG5leHRJbnN0LCB0eXBl
bmFtZSBUbXBMaXZlbmVzczx0eXBlPjo6TG9jYWxDYWxjOjpJdGVyYWJsZSBsaXZlVG1wcykKICAg
ICB7CiAgICAgICAgIC8vIEFsbCB0aGUgRGVmKClzIGludGVyZmVyZSB3aXRoIGV2ZXJ0aGluZyBs
aXZlLgotICAgICAgICBpbnN0LmZvckVhY2hUbXBXaXRoRXh0cmFDbG9iYmVyZWRSZWdzKAotICAg
ICAgICAgICAgbmV4dEluc3QsCisgICAgICAgIEluc3Q6OmZvckVhY2hEZWZXaXRoRXh0cmFDbG9i
YmVyZWRSZWdzKAorICAgICAgICAgICAgcHJldkluc3QsIG5leHRJbnN0LAogICAgICAgICAgICAg
WyZdIChjb25zdCBUbXAmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSBhcmdUeXBlLCBB
cmc6OldpZHRoKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFBcmc6OmlzRGVmKHJvbGUpIHx8IGFy
Z1R5cGUgIT0gdHlwZSkKKyAgICAgICAgICAgICAgICBpZiAoYXJnVHlwZSAhPSB0eXBlKQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgZm9yIChjb25zdCBUbXAmIGxpdmVUbXAgOiBsaXZlVG1wcykgewpAQCAtMTI0MiwxNiArMTIz
OSwxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueVVzZShy
b2xlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgVG1wIG5ld1RtcCA9IG1fY29kZS5uZXdU
bXAodHlwZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KGlu
c3RJbmRleCwgbW92ZSwgaW5zdC5vcmlnaW4sIGFyZywgbmV3VG1wKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHRtcCA9IG5ld1RtcDsKKyAgICAgICAgICAgICAgICAgICAgdG1wID0gbV9jb2Rl
Lm5ld1RtcCh0eXBlKTsKKyAgICAgICAgICAgICAgICAgICAgdW5zcGlsbGFibGVUbXBzLmFkZChB
YnNvbHV0ZVRtcE1hcHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleCh0bXApKTsKIAotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gQW55IG5ldyBGaWxsKCkgc2hvdWxkIG5ldmVyIGJlIHNwaWxsZWQu
Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bnNwaWxsYWJsZVRtcHMuYWRkKEFic29sdXRlVG1w
TWFwcGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4KHRtcCkpOworICAgICAgICAgICAgICAgICAgICBp
ZiAocm9sZSAhPSBBcmc6OlNjcmF0Y2gpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChB
cmc6OmlzQW55VXNlKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlv
blNldC5pbnNlcnQoaW5zdEluZGV4LCBtb3ZlLCBpbnN0Lm9yaWdpbiwgYXJnLCB0bXApOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlEZWYocm9sZSkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydChpbnN0SW5kZXggKyAxLCBtb3Zl
LCBpbnN0Lm9yaWdpbiwgdG1wLCBhcmcpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChBcmc6OmlzRGVmKHJvbGUpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgaW5zZXJ0aW9uU2V0Lmluc2VydChpbnN0SW5kZXggKyAxLCBtb3ZlLCBpbnN0Lm9yaWdpbiwg
dG1wLCBhcmcpOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAkocmV2aXNpb24gMTk0NTE3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgs
NiArMTE4LDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpbnN0SW5k
ZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspCiAgICAgICAgICAgICAgICAgICAgIGxv
Y2FsQ2FsYy5leGVjdXRlKGluc3RJbmRleCk7CiAKKyAgICAgICAgICAgICAgICAvLyBIYW5kbGUg
dGhlIGVhcmx5IGRlZidzIG9mIHRoZSBmaXJzdCBpbnN0cnVjdGlvbi4KKyAgICAgICAgICAgICAg
ICBibG9jay0+YXQoMCkuZm9yRWFjaDx0eXBlbmFtZSBBZGFwdGVyOjpUaGluZz4oCisgICAgICAg
ICAgICAgICAgICAgIFsmXSAodHlwZW5hbWUgQWRhcHRlcjo6VGhpbmcmIHRoaW5nLCBBcmc6OlJv
bGUgcm9sZSwgQXJnOjpUeXBlIHR5cGUsIEFyZzo6V2lkdGgpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChBcmc6OmlzRWFybHlEZWYocm9sZSkgJiYgQWRhcHRlcjo6YWNjZXB0c1R5cGUo
dHlwZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV93b3Jrc2V0LnJlbW92ZShBZGFw
dGVyOjp2YWx1ZVRvSW5kZXgodGhpbmcpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisKICAg
ICAgICAgICAgICAgICBWZWN0b3I8dW5zaWduZWQ+JiBsaXZlQXRIZWFkID0gbV9saXZlQXRIZWFk
W2Jsb2NrXTsKIAogICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgY2FyZSBhYm91dCBUbXBzIHRo
YXQgd2VyZSBkaXNjb3ZlcmVkIGluIHRoaXMgaXRlcmF0aW9uLiBJdCBpcyBpbXBvc3NpYmxlCkBA
IC0yMTMsMTAgKzIyMCwyMSBAQCBwdWJsaWM6CiAgICAgICAgIHsKICAgICAgICAgICAgIEluc3Qm
IGluc3QgPSBtX2Jsb2NrLT5hdChpbnN0SW5kZXgpOwogICAgICAgICAgICAgYXV0byYgd29ya3Nl
dCA9IG1fbGl2ZW5lc3MubV93b3Jrc2V0OworCisgICAgICAgICAgICAvLyBGaXJzdCBoYW5kbGUg
dGhlIGVhcmx5IGRlZidzIG9mIHRoZSBuZXh0IGluc3RydWN0aW9uLgorICAgICAgICAgICAgaWYg
KGluc3RJbmRleCArIDEgPCBtX2Jsb2NrLT5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICBJbnN0
JiBuZXh0SW5zdCA9IG1fYmxvY2stPmF0KGluc3RJbmRleCArIDEpOworICAgICAgICAgICAgICAg
IG5leHRJbnN0LmZvckVhY2g8dHlwZW5hbWUgQWRhcHRlcjo6VGhpbmc+KAorICAgICAgICAgICAg
ICAgICAgICBbJl0gKHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nJiB0aGluZywgQXJnOjpSb2xlIHJv
bGUsIEFyZzo6VHlwZSB0eXBlLCBBcmc6OldpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoQXJnOjppc0Vhcmx5RGVmKHJvbGUpICYmIEFkYXB0ZXI6OmFjY2VwdHNUeXBlKHR5cGUp
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtzZXQucmVtb3ZlKEFkYXB0ZXI6OnZh
bHVlVG9JbmRleCh0aGluZykpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gRmlyc3QgaGFuZGxlIGRlZidzLgogICAg
ICAgICAgICAgaW5zdC5mb3JFYWNoPHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nPigKICAgICAgICAg
ICAgICAgICBbJl0gKHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nJiB0aGluZywgQXJnOjpSb2xlIHJv
bGUsIEFyZzo6VHlwZSB0eXBlLCBBcmc6OldpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChBcmc6OmlzRGVmKHJvbGUpICYmIEFkYXB0ZXI6OmFjY2VwdHNUeXBlKHR5cGUpKQorICAgICAg
ICAgICAgICAgICAgICBpZiAoQXJnOjppc0xhdGVEZWYocm9sZSkgJiYgQWRhcHRlcjo6YWNjZXB0
c1R5cGUodHlwZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICB3b3Jrc2V0LnJlbW92ZShBZGFw
dGVyOjp2YWx1ZVRvSW5kZXgodGhpbmcpKTsKICAgICAgICAgICAgICAgICB9KTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5n
LmNwcAkocmV2aXNpb24gMTk0NTE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIHZv
aWQgc3BpbGxFdmVyeXRoaW5nKENvZGUmIGNvZGUpCiAKICAgICAgICAgdXNlZFJlZ2lzdGVyc1ti
bG9ja10ucmVzaXplKGJsb2NrLT5zaXplKCkgKyAxKTsKIAotICAgICAgICBhdXRvIHNldFVzZWRS
ZWdpc3RlcnMgPSBbJl0gKHVuc2lnbmVkIGluZGV4LCBJbnN0JiBpbnN0KSB7CisgICAgICAgIGF1
dG8gc2V0VXNlZFJlZ2lzdGVycyA9IFsmXSAodW5zaWduZWQgaW5kZXgpIHsKICAgICAgICAgICAg
IFJlZ2lzdGVyU2V0JiByZWdpc3RlclNldCA9IHVzZWRSZWdpc3RlcnNbYmxvY2tdW2luZGV4XTsK
ICAgICAgICAgICAgIGZvciAoVG1wIHRtcCA6IGdwTG9jYWxDYWxjLmxpdmUoKSkgewogICAgICAg
ICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSkKQEAgLTY2LDIzICs2NiwyMCBAQCB2b2lkIHNwaWxs
RXZlcnl0aGluZyhDb2RlJiBjb2RlKQogCiAgICAgICAgICAgICAvLyBHb3R0YSBhY2NvdW50IGZv
ciBkZWFkIGFzc2lnbm1lbnRzIHRvIHJlZ2lzdGVycy4gVGhlc2UgbWF5IGhhcHBlbiBiZWNhdXNl
IHRoZSBpbnB1dAogICAgICAgICAgICAgLy8gY29kZSBpcyBzdWJvcHRpbWFsLgotICAgICAgICAg
ICAgaW5zdC5mb3JFYWNoVG1wV2l0aEV4dHJhQ2xvYmJlcmVkUmVncygKLSAgICAgICAgICAgICAg
ICBpbmRleCA8IGJsb2NrLT5zaXplKCkgPyAmYmxvY2stPmF0KGluZGV4KSA6IG51bGxwdHIsCi0g
ICAgICAgICAgICAgICAgWyZyZWdpc3RlclNldF0gKGNvbnN0IFRtcCYgdG1wLCBBcmc6OlJvbGUg
cm9sZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0
bXAuaXNSZWcoKSAmJiBBcmc6OmlzRGVmKHJvbGUpKQorICAgICAgICAgICAgSW5zdDo6Zm9yRWFj
aERlZldpdGhFeHRyYUNsb2JiZXJlZFJlZ3MoCisgICAgICAgICAgICAgICAgYmxvY2stPmdldChp
bmRleCAtIDEpLCBibG9jay0+Z2V0KGluZGV4KSwKKyAgICAgICAgICAgICAgICBbJl0gKGNvbnN0
IFRtcCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRoKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSkKICAgICAgICAgICAgICAgICAgICAgICAg
IHJlZ2lzdGVyU2V0LnNldCh0bXAucmVnKCkpOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAg
ICB9OwogCiAgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsg
aW5zdEluZGV4LS07KSB7Ci0gICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJ
bmRleCk7Ci0gICAgICAgICAgICBzZXRVc2VkUmVnaXN0ZXJzKGluc3RJbmRleCArIDEsIGluc3Qp
OworICAgICAgICAgICAgc2V0VXNlZFJlZ2lzdGVycyhpbnN0SW5kZXggKyAxKTsKICAgICAgICAg
ICAgIGdwTG9jYWxDYWxjLmV4ZWN1dGUoaW5zdEluZGV4KTsKICAgICAgICAgICAgIGZwTG9jYWxD
YWxjLmV4ZWN1dGUoaW5zdEluZGV4KTsKICAgICAgICAgfQotCi0gICAgICAgIEluc3Qgbm9wOwot
ICAgICAgICBzZXRVc2VkUmVnaXN0ZXJzKDAsIG5vcCk7CisgICAgICAgIHNldFVzZWRSZWdpc3Rl
cnMoMCk7CiAgICAgfQogCiAgICAgLy8gQWxsb2NhdGUgYSBzdGFjayBzbG90IGZvciBlYWNoIHRt
cC4KQEAgLTEzMyw2ICsxMzAsNyBAQCB2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJiBjb2RlKQog
ICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKICAgICAgICAgICAgICAgICAgICAg
Y2FzZSBBcmc6OlVzZToKICAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkNvbGRVc2U6Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpFYXJseURlZjoKICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAoUmVnIHJlZyA6IHJlZ3NJblByaW9yaXR5T3JkZXIodHlwZSkpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNldEJlZm9yZS5nZXQocmVnKSkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRCZWZvcmUuc2V0KHJlZyk7CkBAIC0xNTQsNiAr
MTUyLDcgQEAgdm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29kZSkKICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBBcmc6OlVzZURlZjoKICAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlVz
ZVpEZWY6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpMYXRlVXNlOgorICAgICAgICAg
ICAgICAgICAgICBjYXNlIEFyZzo6U2NyYXRjaDoKICAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAoUmVnIHJlZyA6IHJlZ3NJblByaW9yaXR5T3JkZXIodHlwZSkpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIXNldEJlZm9yZS5nZXQocmVnKSAmJiAhc2V0QWZ0ZXIuZ2V0KHJl
ZykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QWZ0ZXIuc2V0KHJlZyk7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268171</attachid>
            <date>2016-01-03 20:30:00 -0800</date>
            <delta_ts>2016-01-03 21:20:11 -0800</delta_ts>
            <desc>even more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>40717</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmNwcAkocmV2
aXNpb24gMTk0NTE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDcgKzEyNCw4IEBAIHZvaWQgQ2hlY2tTcGVjaWFs
Ojpmb3JFYWNoQXJnKEluc3QmIGluc3QKIGJvb2wgQ2hlY2tTcGVjaWFsOjppc1ZhbGlkKEluc3Qm
IGluc3QpCiB7CiAgICAgcmV0dXJuIGhpZGRlbkJyYW5jaChpbnN0KS5pc1ZhbGlkRm9ybSgpCi0g
ICAgICAgICYmIGlzVmFsaWRJbXBsKG51bUIzQXJncyhpbnN0KSwgbV9udW1DaGVja0FyZ3MgKyAx
LCBpbnN0KTsKKyAgICAgICAgJiYgaXNWYWxpZEltcGwobnVtQjNBcmdzKGluc3QpLCBtX251bUNo
ZWNrQXJncyArIDEsIGluc3QpCisgICAgICAgICYmIGluc3QuYXJncy5zaXplKCkgLSBtX251bUNo
ZWNrQXJncyAtIDEgPT0gaW5zdC5vcmlnaW4tPm51bUNoaWxkcmVuKCk7CiB9CiAKIGJvb2wgQ2hl
Y2tTcGVjaWFsOjphZG1pdHNTdGFjayhJbnN0JiBpbnN0LCB1bnNpZ25lZCBhcmdJbmRleCkKQEAg
LTE0Miw4ICsxNDMsNyBAQCBDQ2FsbEhlbHBlcnM6Okp1bXAgQ2hlY2tTcGVjaWFsOjpnZW5lcmF0
CiAgICAgU3RhY2ttYXBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbi0+YXM8U3RhY2ttYXBWYWx1
ZT4oKTsKICAgICBBU1NFUlQodmFsdWUpOwogCi0gICAgVmVjdG9yPFZhbHVlUmVwPiByZXBzOwot
ICAgIGFwcGVuZFJlcHNJbXBsKGNvbnRleHQsIG1fbnVtQ2hlY2tBcmdzICsgMSwgaW5zdCwgcmVw
cyk7CisgICAgVmVjdG9yPFZhbHVlUmVwPiByZXBzID0gcmVwc0ltcGwoY29udGV4dCwgbnVtQjNB
cmdzKGluc3QpLCBtX251bUNoZWNrQXJncyArIDEsIGluc3QpOwogCiAgICAgLy8gU2V0IGFzaWRl
IHRoZSBhcmdzIHRoYXQgYXJlIHJlbGV2YW50IHRvIHVuZG9pbmcgdGhlIG9wZXJhdGlvbi4gVGhp
cyBpcyBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8KICAgICAvLyBjYXB0dXJlIGFsbCBvZiBpbnN0
IGluIHRoZSBjbG9zdXJlIGJlbG93LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UGF0Y2hwb2ludFNwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1BhdGNocG9pbnRTcGVjaWFsLmNwcAkocmV2aXNpb24gMTk0NTE3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NiwzMiArNDYsNTYgQEAgUGF0Y2hwb2ludFNwZWNpYWw6On5QYXRjaHBvaW50U3BlY2lh
bCgpCiAKIHZvaWQgUGF0Y2hwb2ludFNwZWNpYWw6OmZvckVhY2hBcmcoSW5zdCYgaW5zdCwgY29u
c3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mIGNhbGxiYWNrKQogewotICAg
IC8vIEZJWE1FOiBBbGxvdyBCMyBQYXRjaHBvaW50cyB0byBzcGVjaWZ5IExhdGVVc2UuCi0gICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTMzNQotICAgIAot
ICAgIGlmIChpbnN0Lm9yaWdpbi0+dHlwZSgpID09IFZvaWQpIHsKLSAgICAgICAgZm9yRWFjaEFy
Z0ltcGwoMCwgMSwgaW5zdCwgU2FtZUFzUmVwLCBjYWxsYmFjayk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgdW5zaWduZWQgYXJnSW5kZXggPSAxOworCisgICAgaWYgKGluc3Qub3JpZ2lu
LT50eXBlKCkgIT0gVm9pZCkKKyAgICAgICAgY2FsbGJhY2soaW5zdC5hcmdzW2FyZ0luZGV4Kytd
LCBBcmc6OkRlZiwgaW5zdC5vcmlnaW4tPmFpclR5cGUoKSwgaW5zdC5vcmlnaW4tPmFpcldpZHRo
KCkpOworCisgICAgZm9yRWFjaEFyZ0ltcGwoMCwgYXJnSW5kZXgsIGluc3QsIFNhbWVBc1JlcCwg
Y2FsbGJhY2spOworICAgIGFyZ0luZGV4ICs9IGluc3Qub3JpZ2luLT5udW1DaGlsZHJlbigpOwog
Ci0gICAgY2FsbGJhY2soaW5zdC5hcmdzWzFdLCBBcmc6OkRlZiwgaW5zdC5vcmlnaW4tPmFpclR5
cGUoKSwgaW5zdC5vcmlnaW4tPmFpcldpZHRoKCkpOwotICAgIGZvckVhY2hBcmdJbXBsKDAsIDIs
IGluc3QsIFNhbWVBc1JlcCwgY2FsbGJhY2spOworICAgIGZvciAodW5zaWduZWQgaSA9IGluc3Qu
b3JpZ2luLT5hczxQYXRjaHBvaW50VmFsdWU+KCktPm51bUdQU2NyYXRjaFJlZ2lzdGVyczsgaS0t
OykKKyAgICAgICAgY2FsbGJhY2soaW5zdC5hcmdzW2FyZ0luZGV4KytdLCBBcmc6OlNjcmF0Y2gs
IEFyZzo6R1AsIEFyZzo6Y29uc2VydmF0aXZlV2lkdGgoQXJnOjpHUCkpOworICAgIGZvciAodW5z
aWduZWQgaSA9IGluc3Qub3JpZ2luLT5hczxQYXRjaHBvaW50VmFsdWU+KCktPm51bUZQU2NyYXRj
aFJlZ2lzdGVyczsgaS0tOykKKyAgICAgICAgY2FsbGJhY2soaW5zdC5hcmdzW2FyZ0luZGV4Kytd
LCBBcmc6OlNjcmF0Y2gsIEFyZzo6RlAsIEFyZzo6Y29uc2VydmF0aXZlV2lkdGgoQXJnOjpGUCkp
OwogfQogCiBib29sIFBhdGNocG9pbnRTcGVjaWFsOjppc1ZhbGlkKEluc3QmIGluc3QpCiB7Ci0g
ICAgaWYgKGluc3Qub3JpZ2luLT50eXBlKCkgPT0gVm9pZCkKLSAgICAgICAgcmV0dXJuIGlzVmFs
aWRJbXBsKDAsIDEsIGluc3QpOwotCi0gICAgaWYgKGluc3QuYXJncy5zaXplKCkgPCAyKQotICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gaW5z
dC5vcmlnaW4tPmFzPFBhdGNocG9pbnRWYWx1ZT4oKTsKLSAgICBpZiAoIWlzQXJnVmFsaWRGb3JW
YWx1ZShpbnN0LmFyZ3NbMV0sIHBhdGNocG9pbnQpKQorICAgIHVuc2lnbmVkIGFyZ0luZGV4ID0g
MTsKKworICAgIGlmIChpbnN0Lm9yaWdpbi0+dHlwZSgpICE9IFZvaWQpIHsKKyAgICAgICAgaWYg
KGFyZ0luZGV4ID49IGluc3QuYXJncy5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIAorICAgICAgICBpZiAoIWlzQXJnVmFsaWRGb3JWYWx1ZShpbnN0LmFyZ3NbYXJn
SW5kZXhdLCBwYXRjaHBvaW50KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
aWYgKCFpc0FyZ1ZhbGlkRm9yUmVwKGNvZGUoKSwgaW5zdC5hcmdzW2FyZ0luZGV4XSwgcGF0Y2hw
b2ludC0+cmVzdWx0Q29uc3RyYWludCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGFyZ0luZGV4Kys7CisgICAgfQorCisgICAgaWYgKCFpc1ZhbGlkSW1wbCgwLCBhcmdJbmRl
eCwgaW5zdCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWlzQXJnVmFsaWRGb3JS
ZXAoY29kZSgpLCBpbnN0LmFyZ3NbMV0sIHBhdGNocG9pbnQtPnJlc3VsdENvbnN0cmFpbnQpKQor
ICAgIGFyZ0luZGV4ICs9IHBhdGNocG9pbnQtPm51bUNoaWxkcmVuKCk7CisKKyAgICBpZiAoYXJn
SW5kZXggKyBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgKyBwYXRjaHBvaW50LT5u
dW1GUFNjcmF0Y2hSZWdpc3RlcnMKKyAgICAgICAgIT0gaW5zdC5hcmdzLnNpemUoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIGlzVmFsaWRJbXBsKDAsIDIsIGluc3QpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVyczsg
aS0tOykgeworICAgICAgICBBcmcgYXJnID0gaW5zdC5hcmdzW2FyZ0luZGV4KytdOworICAgICAg
ICBpZiAoIWFyZy5pc0dQVG1wKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIGZvciAodW5zaWduZWQgaSA9IHBhdGNocG9pbnQtPm51bUZQU2NyYXRjaFJlZ2lzdGVyczsg
aS0tOykgeworICAgICAgICBBcmcgYXJnID0gaW5zdC5hcmdzW2FyZ0luZGV4KytdOworICAgICAg
ICBpZiAoIWFyZy5pc0ZQVG1wKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgUGF0Y2hwb2ludFNwZWNpYWw6OmFkbWl0c1N0
YWNrKEluc3QmIGluc3QsIHVuc2lnbmVkIGFyZ0luZGV4KQpAQCAtOTksMTYgKzEyMywyNCBAQCBi
b29sIFBhdGNocG9pbnRTcGVjaWFsOjphZG1pdHNTdGFjayhJbnN0CiBDQ2FsbEhlbHBlcnM6Okp1
bXAgUGF0Y2hwb2ludFNwZWNpYWw6OmdlbmVyYXRlKAogICAgIEluc3QmIGluc3QsIENDYWxsSGVs
cGVycyYgaml0LCBHZW5lcmF0aW9uQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBTdGFja21hcFZh
bHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luLT5hczxTdGFja21hcFZhbHVlPigpOworICAgIFBhdGNo
cG9pbnRWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbi0+YXM8UGF0Y2hwb2ludFZhbHVlPigpOwog
ICAgIEFTU0VSVCh2YWx1ZSk7CiAKICAgICBWZWN0b3I8VmFsdWVSZXA+IHJlcHM7CiAgICAgdW5z
aWduZWQgb2Zmc2V0ID0gMTsKICAgICBpZiAoaW5zdC5vcmlnaW4tPnR5cGUoKSAhPSBWb2lkKQog
ICAgICAgICByZXBzLmFwcGVuZChyZXBGb3JBcmcoKmNvbnRleHQuY29kZSwgaW5zdC5hcmdzW29m
ZnNldCsrXSkpOwotICAgIGFwcGVuZFJlcHNJbXBsKGNvbnRleHQsIG9mZnNldCwgaW5zdCwgcmVw
cyk7CisgICAgcmVwcy5hcHBlbmRWZWN0b3IocmVwc0ltcGwoY29udGV4dCwgMCwgb2Zmc2V0LCBp
bnN0KSk7CisgICAgb2Zmc2V0ICs9IHZhbHVlLT5udW1DaGlsZHJlbigpOworCisgICAgU3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zIHBhcmFtcyh2YWx1ZSwgcmVwcywgY29udGV4dCk7CisKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSB2YWx1ZS0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzOyBpLS07KQorICAg
ICAgICBwYXJhbXMubV9ncFNjcmF0Y2guYXBwZW5kKGluc3QuYXJnc1tvZmZzZXQrK10uZ3ByKCkp
OworICAgIGZvciAodW5zaWduZWQgaSA9IHZhbHVlLT5udW1GUFNjcmF0Y2hSZWdpc3RlcnM7IGkt
LTspCisgICAgICAgIHBhcmFtcy5tX2ZwU2NyYXRjaC5hcHBlbmQoaW5zdC5hcmdzW29mZnNldCsr
XS5mcHIoKSk7CiAgICAgCi0gICAgdmFsdWUtPm1fZ2VuZXJhdG9yLT5ydW4oaml0LCBTdGFja21h
cEdlbmVyYXRpb25QYXJhbXModmFsdWUsIHJlcHMsIGNvbnRleHQpKTsKKyAgICB2YWx1ZS0+bV9n
ZW5lcmF0b3ItPnJ1bihqaXQsIHBhcmFtcyk7CiAKICAgICByZXR1cm4gQ0NhbGxIZWxwZXJzOjpK
dW1wKCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFs
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9p
bnRWYWx1ZS5jcHAJKHJldmlzaW9uIDE5NDUxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1BhdGNocG9pbnRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDggQEAg
UGF0Y2hwb2ludFZhbHVlOjpQYXRjaHBvaW50VmFsdWUodW5zaWduZQogICAgIDogQmFzZShpbmRl
eCwgQ2hlY2tlZE9wY29kZSwgUGF0Y2hwb2ludCwgdHlwZSwgb3JpZ2luKQogICAgICwgZWZmZWN0
cyhFZmZlY3RzOjpmb3JDYWxsKCkpCiAgICAgLCByZXN1bHRDb25zdHJhaW50KHR5cGUgPT0gVm9p
ZCA/IFZhbHVlUmVwOjpXYXJtQW55IDogVmFsdWVSZXA6OlNvbWVSZWdpc3RlcikKKyAgICAsIG51
bUdQU2NyYXRjaFJlZ2lzdGVycygwKQorICAgICwgbnVtRlBTY3JhdGNoUmVnaXN0ZXJzKDApCiB7
CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1
ZS5oCShyZXZpc2lvbiAxOTQ1MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRj
aHBvaW50VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsMTIgQEAgcHVibGljOgog
ICAgIC8vIGlzIFZvaWQuIE90aGVyd2lzZSB5b3UgY2FuIHNldCB0aGlzIHRvIGFueSBpbnB1dCBj
b25zdHJhaW50LgogICAgIFZhbHVlUmVwIHJlc3VsdENvbnN0cmFpbnQ7CiAKKyAgICAvLyBUaGUg
bnVtYmVyIG9mIHNjcmF0Y2ggcmVnaXN0ZXJzIHRoYXQgdGhpcyBwYXRjaHBvaW50IGdldHMuIFRo
ZSBzY3JhdGNoIHJlZ2lzdGVyIGlzIGd1YXJhbnRlZWQKKyAgICAvLyB0byBiZSBkaWZmZXJlbnQg
ZnJvbSBhbnkgaW5wdXQgcmVnaXN0ZXIgYW5kIHRoZSBkZXN0aW5hdGlvbiByZWdpc3Rlci4gSXQn
cyBhbHNvIGd1YXJhbnRlZWQgbm90CisgICAgLy8gdG8gYmUgY2xvYmJlcmVkIGVpdGhlciBlYXJs
eSBvciBsYXRlLiBUaGVzZSBhcmUgMCBieSBkZWZhdWx0LgorICAgIHVpbnQ4X3QgbnVtR1BTY3Jh
dGNoUmVnaXN0ZXJzOworICAgIHVpbnQ4X3QgbnVtRlBTY3JhdGNoUmVnaXN0ZXJzOworCiBwcm90
ZWN0ZWQ6CiAgICAgdm9pZCBkdW1wTWV0YShDb21tYVByaW50ZXImLCBQcmludFN0cmVhbSYpIGNv
bnN0IG92ZXJyaWRlOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuaAkocmV2aXNpb24gMTk0NTE3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmgJKHdvcmtp
bmcgY29weSkKQEAgLTY2LDYgKzY2LDkgQEAgcHVibGljOgogICAgIC8vICAgICB1c2VkUmVnaXN0
ZXJzKCkgfCAoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSAtIHByb2MuY2FsbGVl
U2F2ZVJlZ2lzdGVycygpKQogICAgIFJlZ2lzdGVyU2V0IHVuYXZhaWxhYmxlUmVnaXN0ZXJzKCkg
Y29uc3Q7CiAKKyAgICBHUFJSZWcgZ3BTY3JhdGNoKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJl
dHVybiBtX2dwU2NyYXRjaFtpbmRleF07IH0KKyAgICBGUFJSZWcgZnBTY3JhdGNoKHVuc2lnbmVk
IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2ZwU2NyYXRjaFtpbmRleF07IH0KKwogICAgIC8vIFRo
aXMgaXMgcHJvdmlkZWQgZm9yIGNvbnZlbmllbmNlOyBpdCBtZWFucyB0aGF0IHlvdSBkb24ndCBo
YXZlIHRvIGNhcHR1cmUgaXQgaWYgeW91IGRvbid0IHdhbnQgdG8uCiAgICAgUHJvY2VkdXJlJiBw
cm9jKCkgY29uc3Q7CiAgICAgCkBAIC05MCw2ICs5Myw4IEBAIHByaXZhdGU6CiAKICAgICBTdGFj
a21hcFZhbHVlKiBtX3ZhbHVlOwogICAgIFZlY3RvcjxWYWx1ZVJlcD4gbV9yZXBzOworICAgIFZl
Y3RvcjxHUFJSZWc+IG1fZ3BTY3JhdGNoOworICAgIFZlY3RvcjxGUFJSZWc+IG1fZnBTY3JhdGNo
OwogICAgIEFpcjo6R2VuZXJhdGlvbkNvbnRleHQmIG1fY29udGV4dDsKIH07CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAkocmV2aXNp
b24gMTk0NTE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsOSArODEsOSBAQCB2b2lkIFN0YWNrbWFwU3BlY2lh
bDo6Zm9yRWFjaEFyZ0ltcGwoCiAgICAgLy8gQ2hlY2sgdGhhdCBpbnNhbmUgdGhpbmdzIGhhdmUg
bm90IGhhcHBlbmVkLgogICAgIEFTU0VSVChpbnN0LmFyZ3Muc2l6ZSgpID49IG51bUlnbm9yZWRB
aXJBcmdzKTsKICAgICBBU1NFUlQodmFsdWUtPmNoaWxkcmVuKCkuc2l6ZSgpID49IG51bUlnbm9y
ZWRCM0FyZ3MpOwotICAgIEFTU0VSVChpbnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3JlZEFpckFy
Z3MgPT0gdmFsdWUtPmNoaWxkcmVuKCkuc2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJncyk7CisgICAg
QVNTRVJUKGluc3QuYXJncy5zaXplKCkgLSBudW1JZ25vcmVkQWlyQXJncyA+PSB2YWx1ZS0+Y2hp
bGRyZW4oKS5zaXplKCkgLSBudW1JZ25vcmVkQjNBcmdzKTsKICAgICAKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgaW5zdC5hcmdzLnNpemUoKSAtIG51bUlnbm9yZWRBaXJBcmdzOyArK2kp
IHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWUtPmNoaWxkcmVuKCkuc2l6ZSgp
IC0gbnVtSWdub3JlZEIzQXJnczsgKytpKSB7CiAgICAgICAgIEFyZyYgYXJnID0gaW5zdC5hcmdz
W2kgKyBudW1JZ25vcmVkQWlyQXJnc107CiAgICAgICAgIENvbnN0cmFpbmVkVmFsdWUgY2hpbGQg
PSB2YWx1ZS0+Y29uc3RyYWluZWRDaGlsZChpICsgbnVtSWdub3JlZEIzQXJncyk7CiAKQEAgLTEw
MywxMiArMTAzLDEyIEBAIHZvaWQgU3RhY2ttYXBTcGVjaWFsOjpmb3JFYWNoQXJnSW1wbCgKICAg
ICAgICAgICAgICAgICByb2xlID0gQXJnOjpDb2xkVXNlOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6TGF0ZUNvbGRBbnk6Ci0gICAgICAgICAgICAg
ICAgcm9sZSA9IEFyZzo6TGF0ZVVzZTsKKyAgICAgICAgICAgICAgICByb2xlID0gQXJnOjpMYXRl
Q29sZFVzZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIEZvcmNlTGF0ZVVzZToKLSAgICAgICAgICAgIHJvbGUg
PSBBcmc6OkxhdGVVc2U7CisgICAgICAgICAgICByb2xlID0gQXJnOjpMYXRlQ29sZFVzZTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTEyOSwxMyArMTI5LDEzIEBAIGJvb2wg
U3RhY2ttYXBTcGVjaWFsOjppc1ZhbGlkSW1wbCgKICAgICBBU1NFUlQodmFsdWUtPmNoaWxkcmVu
KCkuc2l6ZSgpID49IG51bUlnbm9yZWRCM0FyZ3MpOwogCiAgICAgLy8gRm9yIHRoZSBJbnN0IHRv
IGJlIHZhbGlkLCBpdCBuZWVkcyB0byBoYXZlIHRoZSByaWdodCBudW1iZXIgb2YgYXJndW1lbnRz
LgotICAgIGlmIChpbnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3JlZEFpckFyZ3MgIT0gdmFsdWUt
PmNoaWxkcmVuKCkuc2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJncykKKyAgICBpZiAoaW5zdC5hcmdz
LnNpemUoKSAtIG51bUlnbm9yZWRBaXJBcmdzIDwgdmFsdWUtPmNoaWxkcmVuKCkuc2l6ZSgpIC0g
bnVtSWdub3JlZEIzQXJncykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gUmVnYXJk
bGVzcyBvZiBjb25zdHJhaW50cywgc3RhY2ttYXBzIGhhdmUgc29tZSBiYXNpYyByZXF1aXJlbWVu
dHMgZm9yIHRoZWlyIGFyZ3VtZW50cy4gRm9yCiAgICAgLy8gZXhhbXBsZSwgeW91IGNhbid0IGhh
dmUgYSBub24tRlAtb2Zmc2V0IGFkZHJlc3MuIFRoaXMgdmVyaWZpZXMgdGhvc2UgY29uZGl0aW9u
cyBhcyB3ZWxsIGFzIHRoZQogICAgIC8vIGFyZ3VtZW50IHR5cGVzLgotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3JlZEFpckFyZ3M7ICsraSkg
eworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZS0+Y2hpbGRyZW4oKS5zaXplKCkg
LSBudW1JZ25vcmVkQjNBcmdzOyArK2kpIHsKICAgICAgICAgVmFsdWUqIGNoaWxkID0gdmFsdWUt
PmNoaWxkKGkgKyBudW1JZ25vcmVkQjNBcmdzKTsKICAgICAgICAgQXJnJiBhcmcgPSBpbnN0LmFy
Z3NbaSArIG51bUlnbm9yZWRBaXJBcmdzXTsKIApAQCAtMTY3LDYgKzE2NywxMSBAQCBib29sIFN0
YWNrbWFwU3BlY2lhbDo6YWRtaXRzU3RhY2tJbXBsKAogCiAgICAgdW5zaWduZWQgc3RhY2ttYXBB
cmdJbmRleCA9IGFyZ0luZGV4IC0gbnVtSWdub3JlZEFpckFyZ3MgKyBudW1JZ25vcmVkQjNBcmdz
OwogCisgICAgaWYgKHN0YWNrbWFwQXJnSW5kZXggPj0gdmFsdWUtPm51bUNoaWxkcmVuKCkpIHsK
KyAgICAgICAgLy8gSXQncyBub3QgYSBzdGFja21hcCBhcmd1bWVudCwgc28gYXMgZmFyIGFzIHdl
IGFyZSBjb25jZXJuZWQsIGl0IGRvZXNuJ3QgYWRtaXQgc3RhY2suCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKICAgICBpZiAoc3RhY2ttYXBBcmdJbmRleCA+PSB2YWx1ZS0+bV9yZXBz
LnNpemUoKSkgewogICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlcmUgd2FzIG5vIGNvbnN0
cmFpbnQuCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTgwLDExICsxODUsMTMgQEAgYm9vbCBT
dGFja21hcFNwZWNpYWw6OmFkbWl0c1N0YWNrSW1wbCgKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LXZvaWQgU3RhY2ttYXBTcGVjaWFsOjphcHBlbmRSZXBzSW1wbCgKLSAgICBHZW5lcmF0aW9uQ29u
dGV4dCYgY29udGV4dCwgdW5zaWduZWQgbnVtSWdub3JlZEFyZ3MsIEluc3QmIGluc3QsIFZlY3Rv
cjxWYWx1ZVJlcD4mIHJlc3VsdCkKK1ZlY3RvcjxWYWx1ZVJlcD4gU3RhY2ttYXBTcGVjaWFsOjpy
ZXBzSW1wbCgKKyAgICBHZW5lcmF0aW9uQ29udGV4dCYgY29udGV4dCwgdW5zaWduZWQgbnVtSWdu
b3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3MsIEluc3QmIGluc3QpCiB7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gbnVtSWdub3JlZEFyZ3M7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgp
OyArK2kpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQocmVwRm9yQXJnKCpjb250ZXh0LmNvZGUsIGlu
c3QuYXJnc1tpXSkpOworICAgIFZlY3RvcjxWYWx1ZVJlcD4gcmVzdWx0OworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBpbnN0Lm9yaWdpbi0+bnVtQ2hpbGRyZW4oKSAtIG51bUlnbm9yZWRC
M0FyZ3M7ICsraSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZChyZXBGb3JBcmcoKmNvbnRleHQuY29k
ZSwgaW5zdC5hcmdzW2kgKyBudW1JZ25vcmVkQWlyQXJnc10pKTsKKyAgICByZXR1cm4gcmVzdWx0
OwogfQogCiBib29sIFN0YWNrbWFwU3BlY2lhbDo6aXNBcmdWYWxpZEZvclZhbHVlKGNvbnN0IEFp
cjo6QXJnJiBhcmcsIFZhbHVlKiB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N0YWNrbWFwU3BlY2lhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5oCShyZXZpc2lvbiAxOTQ1MTcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAtNjks
NyArNjksOCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIEFpcjo6SW5zdCYsIHVuc2lnbmVkIGFyZ0lu
ZGV4KTsKIAogICAgIC8vIEFwcGVuZHMgdGhlIHJlcHMgZm9yIHRoZSBJbnN0J3MgYXJncywgc3Rh
cnRpbmcgd2l0aCBudW1JZ25vcmVkQXJncywgdG8gdGhlIGdpdmVuIHZlY3Rvci4KLSAgICB2b2lk
IGFwcGVuZFJlcHNJbXBsKEFpcjo6R2VuZXJhdGlvbkNvbnRleHQmLCB1bnNpZ25lZCBudW1JZ25v
cmVkQXJncywgQWlyOjpJbnN0JiwgVmVjdG9yPFZhbHVlUmVwPiYpOworICAgIFZlY3RvcjxWYWx1
ZVJlcD4gcmVwc0ltcGwoCisgICAgICAgIEFpcjo6R2VuZXJhdGlvbkNvbnRleHQmLCB1bnNpZ25l
ZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQWlyQXJncywgQWlyOjpJbnN0
Jik7CiAKICAgICBzdGF0aWMgYm9vbCBpc0FyZ1ZhbGlkRm9yVmFsdWUoY29uc3QgQWlyOjpBcmcm
LCBWYWx1ZSopOwogICAgIHN0YXRpYyBib29sIGlzQXJnVmFsaWRGb3JSZXAoQWlyOjpDb2RlJiwg
Y29uc3QgQWlyOjpBcmcmLCBjb25zdCBWYWx1ZVJlcCYpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL3Rlc3RiMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL3Rlc3RiMy5jcHAJKHJldmlzaW9uIDE5NDUxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy90ZXN0YjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MTU3LDYgKzYxNTcsNzIgQEAgdm9p
ZCB0ZXN0UGF0Y2hwb2ludEFueShWYWx1ZVJlcCByZXApCiAgICAgQ0hFQ0soY29tcGlsZUFuZFJ1
bjxpbnQ+KHByb2MsIDEsIDIpID09IDMpOwogfQogCit2b2lkIHRlc3RQYXRjaHBvaW50R1BTY3Jh
dGNoKCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJv
Yy5hZGRCbG9jaygpOworICAgIFZhbHVlKiBhcmcxID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50
UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIFZh
bHVlKiBhcmcyID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hw
b2ludCA9IHJvb3QtPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KHByb2MsIEludDMyLCBPcmln
aW4oKSk7CisgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFyZzEsIFZhbHVlUmVwOjpTb21lUmVnaXN0
ZXIpOworICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcyLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVy
KTsKKyAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAyOworICAgIHBhdGNo
cG9pbnQtPnNldEdlbmVyYXRvcigKKyAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIEFsbG93
TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAg
IC8vIFdlIHNob3VsZG4ndCBoYXZlIHNwaWxsZWQgdGhlIGlucHV0cywgc28gd2UgYXNzZXJ0IHRo
YXQgdGhleSdyZSBpbiByZWdpc3RlcnMuCisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgp
ID09IDMpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzBdLmlzR1BSKCkpOworICAgICAgICAg
ICAgQ0hFQ0socGFyYW1zWzFdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzJd
LmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLmdwU2NyYXRjaCgwKSAhPSBJbnZh
bGlkR1BSUmVnKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5ncFNjcmF0Y2goMCkgIT0gcGFy
YW1zWzBdLmdwcigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5ncFNjcmF0Y2goMCkgIT0g
cGFyYW1zWzFdLmdwcigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5ncFNjcmF0Y2goMCkg
IT0gcGFyYW1zWzJdLmdwcigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5ncFNjcmF0Y2go
MSkgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuZ3BTY3JhdGNo
KDEpICE9IHBhcmFtcy5ncFNjcmF0Y2goMCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLmdw
U2NyYXRjaCgxKSAhPSBwYXJhbXNbMF0uZ3ByKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1z
LmdwU2NyYXRjaCgxKSAhPSBwYXJhbXNbMV0uZ3ByKCkpOworICAgICAgICAgICAgQ0hFQ0socGFy
YW1zLmdwU2NyYXRjaCgxKSAhPSBwYXJhbXNbMl0uZ3ByKCkpOworICAgICAgICAgICAgQ0hFQ0so
IXBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLmdldChwYXJhbXMuZ3BTY3JhdGNoKDApKSk7
CisgICAgICAgICAgICBDSEVDSyghcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCkuZ2V0KHBh
cmFtcy5ncFNjcmF0Y2goMSkpKTsKKyAgICAgICAgICAgIGFkZDMyKGppdCwgcGFyYW1zWzFdLmdw
cigpLCBwYXJhbXNbMl0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7CisgICAgICAgIH0pOworICAg
IHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIHBh
dGNocG9pbnQpOworCisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MsIDEsIDIpID09
IDMpOworfQorCit2b2lkIHRlc3RQYXRjaHBvaW50RlBTY3JhdGNoKCkKK3sKKyAgICBQcm9jZWR1
cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZh
bHVlKiBhcmcxID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIFZhbHVlKiBhcmcyID0gcm9vdC0+YXBw
ZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjEpOworICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IHJvb3QtPmFwcGVuZE5l
dzxQYXRjaHBvaW50VmFsdWU+KHByb2MsIEludDMyLCBPcmlnaW4oKSk7CisgICAgcGF0Y2hwb2lu
dC0+YXBwZW5kKGFyZzEsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgIHBhdGNocG9pbnQt
PmFwcGVuZChhcmcyLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICBwYXRjaHBvaW50LT5u
dW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAyOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigK
KyAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJV
c2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgIC8vIFdlIHNob3VsZG4ndCBoYXZl
IHNwaWxsZWQgdGhlIGlucHV0cywgc28gd2UgYXNzZXJ0IHRoYXQgdGhleSdyZSBpbiByZWdpc3Rl
cnMuCisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09IDMpOworICAgICAgICAgICAg
Q0hFQ0socGFyYW1zWzBdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzFdLmlz
R1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzJdLmlzR1BSKCkpOworICAgICAgICAg
ICAgQ0hFQ0socGFyYW1zLmZwU2NyYXRjaCgwKSAhPSBJbnZhbGlkRlBSUmVnKTsKKyAgICAgICAg
ICAgIENIRUNLKHBhcmFtcy5mcFNjcmF0Y2goMSkgIT0gSW52YWxpZEZQUlJlZyk7CisgICAgICAg
ICAgICBDSEVDSyhwYXJhbXMuZnBTY3JhdGNoKDEpICE9IHBhcmFtcy5mcFNjcmF0Y2goMCkpOwor
ICAgICAgICAgICAgQ0hFQ0soIXBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLmdldChwYXJh
bXMuZnBTY3JhdGNoKDApKSk7CisgICAgICAgICAgICBDSEVDSyghcGFyYW1zLnVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCkuZ2V0KHBhcmFtcy5mcFNjcmF0Y2goMSkpKTsKKyAgICAgICAgICAgIGFkZDMy
KGppdCwgcGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMl0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7
CisgICAgICAgIH0pOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KHByb2MsIFJl
dHVybiwgT3JpZ2luKCksIHBhdGNocG9pbnQpOworCisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxp
bnQ+KHByb2MsIDEsIDIpID09IDMpOworfQorCiB2b2lkIHRlc3RQYXRjaHBvaW50TG90c09mTGF0
ZUFueXMoKQogewogICAgIFByb2NlZHVyZSBwcm9jOwpAQCAtOTU5OCw2ICs5NjY0LDggQEAgdm9p
ZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQogICAgIFJVTih0ZXN0UGF0Y2hwb2ludEZpeGVkUmVn
aXN0ZXIoKSk7CiAgICAgUlVOKHRlc3RQYXRjaHBvaW50QW55KFZhbHVlUmVwOjpXYXJtQW55KSk7
CiAgICAgUlVOKHRlc3RQYXRjaHBvaW50QW55KFZhbHVlUmVwOjpDb2xkQW55KSk7CisgICAgUlVO
KHRlc3RQYXRjaHBvaW50R1BTY3JhdGNoKCkpOworICAgIFJVTih0ZXN0UGF0Y2hwb2ludEZQU2Ny
YXRjaCgpKTsKICAgICBSVU4odGVzdFBhdGNocG9pbnRMb3RzT2ZMYXRlQW55cygpKTsKICAgICBS
VU4odGVzdFBhdGNocG9pbnRBbnlJbW0oVmFsdWVSZXA6Oldhcm1BbnkpKTsKICAgICBSVU4odGVz
dFBhdGNocG9pbnRBbnlJbW0oVmFsdWVSZXA6OkNvbGRBbnkpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAkocmV2aXNpb24g
MTk0NTE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQzLDE0ICsxNDMsMTMgQEAgdm9pZCBhbGxvY2F0ZVN0
YWNrKENvZGUmIGNvZGUpCiAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKICAg
ICAgICAgU3RhY2tTbG90TGl2ZW5lc3M6OkxvY2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5lc3MsIGJs
b2NrKTsKIAotICAgICAgICBhdXRvIGludGVyZmVyZSA9IFsmXSAoSW5zdCYgaW5zdCkgeworICAg
ICAgICBhdXRvIGludGVyZmVyZSA9IFsmXSAodW5zaWduZWQgaW5zdEluZGV4KSB7CiAgICAgICAg
ICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJJbnRlcmZlcmluZzog
IiwgV1RGOjpwb2ludGVyTGlzdER1bXAobG9jYWxDYWxjLmxpdmUoKSksICJcbiIpOwogCi0gICAg
ICAgICAgICBpbnN0LmZvckVhY2hBcmcoCi0gICAgICAgICAgICAgICAgWyZdIChBcmcmIGFyZywg
QXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSwgQXJnOjpXaWR0aCkgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoIUFyZzo6aXNEZWYocm9sZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICBJbnN0Ojpmb3JFYWNoRGVmPEFyZz4oCisgICAgICAgICAgICAgICAg
YmxvY2stPmdldChpbnN0SW5kZXgpLCBibG9jay0+Z2V0KGluc3RJbmRleCArIDEpLAorICAgICAg
ICAgICAgICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRo
KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzU3RhY2soKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzbG90
ID0gYXJnLnN0YWNrU2xvdCgpOwpAQCAtMTY3LDEyICsxNjYsMTAgQEAgdm9pZCBhbGxvY2F0ZVN0
YWNrKENvZGUmIGNvZGUpCiAgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gYmxvY2st
PnNpemUoKTsgaW5zdEluZGV4LS07KSB7CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAg
ICAgICAgICAgICBkYXRhTG9nKCJBbmFseXppbmc6ICIsIGJsb2NrLT5hdChpbnN0SW5kZXgpLCAi
XG4iKTsKLSAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKLSAg
ICAgICAgICAgIGludGVyZmVyZShpbnN0KTsKKyAgICAgICAgICAgIGludGVyZmVyZShpbnN0SW5k
ZXgpOwogICAgICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUoaW5zdEluZGV4KTsKICAgICAgICAg
fQotICAgICAgICBJbnN0IG5vcDsKLSAgICAgICAgaW50ZXJmZXJlKG5vcCk7CisgICAgICAgIGlu
dGVyZmVyZSgtMSk7CiAgICAgfQogCiAgICAgaWYgKHZlcmJvc2UpIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAJKHJldmlzaW9uIDE5NDUxNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkz
LDYgKzE5MywxNSBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQXJnCiAg
ICAgY2FzZSBBcmc6OkxhdGVVc2U6CiAgICAgICAgIG91dC5wcmludCgiTGF0ZVVzZSIpOwogICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBBcmc6OkxhdGVDb2xkVXNlOgorICAgICAgICBvdXQucHJp
bnQoIkxhdGVDb2xkVXNlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFyZzo6RWFybHlE
ZWY6CisgICAgICAgIG91dC5wcmludCgiRWFybHlEZWYiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQXJnOjpTY3JhdGNoOgorICAgICAgICBvdXQucHJpbnQoIlNjcmF0Y2giKTsKKyAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHJldmlzaW9uIDE5NDUxNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHdvcmtpbmcgY29weSkK
QEAgLTkyLDEwICs5MiwxMiBAQCBwdWJsaWM6CiAgICAgICAgIENvbGRVc2UsCiAKICAgICAgICAg
Ly8gTGF0ZVVzZSBtZWFucyB0aGF0IHRoZSBJbnN0IHdpbGwgcmVhZCBmcm9tIHRoaXMgdmFsdWUg
YWZ0ZXIgZG9pbmcgaXRzIERlZidzLiBOb3RlIHRoYXQgTGF0ZVVzZQotICAgICAgICAvLyBvbiBh
biBBZGRyIG9yIEluZGV4IHN0aWxsIG1lYW5zIFVzZSBvbiB0aGUgaW50ZXJuYWwgdGVtcG9yYXJp
ZXMuIExhdGVVc2UgYWxzbyBjdXJyZW50bHkgYWxzbwotICAgICAgICAvLyBpbXBsaWVzIENvbGRV
c2UuCisgICAgICAgIC8vIG9uIGFuIEFkZHIgb3IgSW5kZXggc3RpbGwgbWVhbnMgVXNlIG9uIHRo
ZSBpbnRlcm5hbCB0ZW1wb3Jhcmllcy4KICAgICAgICAgTGF0ZVVzZSwKIAorICAgICAgICAvLyBD
b21iaW5hdGlvbiBvZiBMYXRlVXNlIGFuZCBDb2xkVXNlLgorICAgICAgICBMYXRlQ29sZFVzZSwK
KwogICAgICAgICAvLyBEZWYgbWVhbnMgdGhhdCB0aGUgSW5zdCB3aWxsIHdyaXRlIHRvIHRoaXMg
dmFsdWUgYWZ0ZXIgZG9pbmcgZXZlcnl0aGluZyBlbHNlLgogICAgICAgICAvLwogICAgICAgICAv
LyBGb3IgVG1wOiBUaGUgSW5zdCB3aWxsIHdyaXRlIHRvIHRoaXMgVG1wLgpAQCAtMTI3LDYgKzEy
OSwxNCBAQCBwdWJsaWM6CiAgICAgICAgIC8vIFRoaXMgaXMgYSBjb21iaW5lZCBVc2UgYW5kIFpE
ZWYuIEl0IG1lYW5zIHRoYXQgYm90aCB0aGluZ3MgaGFwcGVuLgogICAgICAgICBVc2VaRGVmLAog
CisgICAgICAgIC8vIFRoaXMgaXMgbGlrZSBEZWYsIGJ1dCBpbXBsaWVzIHRoYXQgdGhlIGFzc2ln
bm1lbnQgb2NjdXJzIGJlZm9yZSB0aGUgc3RhcnQgb2YgdGhlIEluc3QncworICAgICAgICAvLyBl
eGVjdXRpb24gcmF0aGVyIHRoYW4gYWZ0ZXIuCisgICAgICAgIEVhcmx5RGVmLAorCisgICAgICAg
IC8vIFNvbWUgaW5zdHJ1Y3Rpb25zIG5lZWQgYSBzY3JhdGNoIHJlZ2lzdGVyLiBXZSBtb2RlbCB0
aGlzIGJ5IHNheWluZyB0aGF0IHRoZSB0ZW1wb3JhcnkgaXMKKyAgICAgICAgLy8gZGVmaW5lZCBl
YXJseSBhbmQgdXNlZCBsYXRlLiBUaGlzIHJvbGUgaW1wbGllcyB0aGF0LgorICAgICAgICBTY3Jh
dGNoLAorCiAgICAgICAgIC8vIFRoaXMgaXMgYSBzcGVjaWFsIGtpbmQgb2YgdXNlIHRoYXQgaXMg
b25seSB2YWxpZCBmb3IgYWRkcmVzc2VzLiBJdCBtZWFucyB0aGF0IHRoZQogICAgICAgICAvLyBp
bnN0cnVjdGlvbiB3aWxsIGV2YWx1YXRlIHRoZSBhZGRyZXNzIGV4cHJlc3Npb24gYW5kIGNvbnN1
bWUgdGhlIGVmZmVjdGl2ZSBhZGRyZXNzLCBidXQgaXQKICAgICAgICAgLy8gd2lsbCBuZWl0aGVy
IGxvYWQgbm9yIHN0b3JlLiBUaGlzIGlzIGFuIGVzY2FwaW5nIHVzZSwgYmVjYXVzZSBub3cgdGhl
IGFkZHJlc3MgbWF5IGJlCkBAIC0xNzEsMTAgKzE4MSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIGNh
c2UgVXNlRGVmOgogICAgICAgICBjYXNlIFVzZVpEZWY6CiAgICAgICAgIGNhc2UgTGF0ZVVzZToK
KyAgICAgICAgY2FzZSBMYXRlQ29sZFVzZToKKyAgICAgICAgY2FzZSBTY3JhdGNoOgogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGNhc2UgRGVmOgogICAgICAgICBjYXNlIFpEZWY6
CiAgICAgICAgIGNhc2UgVXNlQWRkcjoKKyAgICAgICAgY2FzZSBFYXJseURlZjoKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KQEAgLTE4MywxNCArMTk2LDE3IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIHN3aXRjaCAocm9sZSkgewogICAgICAgICBjYXNlIENv
bGRVc2U6Ci0gICAgICAgIGNhc2UgTGF0ZVVzZToKKyAgICAgICAgY2FzZSBMYXRlQ29sZFVzZToK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBjYXNlIFVzZToKICAgICAgICAgY2Fz
ZSBVc2VEZWY6CiAgICAgICAgIGNhc2UgVXNlWkRlZjoKKyAgICAgICAgY2FzZSBMYXRlVXNlOgog
ICAgICAgICBjYXNlIERlZjoKICAgICAgICAgY2FzZSBaRGVmOgogICAgICAgICBjYXNlIFVzZUFk
ZHI6CisgICAgICAgIGNhc2UgU2NyYXRjaDoKKyAgICAgICAgY2FzZSBFYXJseURlZjoKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KQEAgLTIxMyw2ICsyMjksOSBA
QCBwdWJsaWM6CiAgICAgICAgIGNhc2UgWkRlZjoKICAgICAgICAgY2FzZSBVc2VBZGRyOgogICAg
ICAgICBjYXNlIExhdGVVc2U6CisgICAgICAgIGNhc2UgTGF0ZUNvbGRVc2U6CisgICAgICAgIGNh
c2UgU2NyYXRjaDoKKyAgICAgICAgY2FzZSBFYXJseURlZjoKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgfQogICAgIH0KQEAgLTIyMCwxNyArMjM5LDc0IEBAIHB1YmxpYzoKICAg
ICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIFJvbGUgaW1wbGllcyB0aGF0IHRoZSBJbnN0IHdpbGwg
VXNlIHRoZSBBcmcgYWZ0ZXIgZG9pbmcgZXZlcnl0aGluZyBlbHNlLgogICAgIHN0YXRpYyBib29s
IGlzTGF0ZVVzZShSb2xlIHJvbGUpCiAgICAgewotICAgICAgICByZXR1cm4gcm9sZSA9PSBMYXRl
VXNlOworICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKKyAgICAgICAgY2FzZSBMYXRlVXNlOgorICAg
ICAgICBjYXNlIExhdGVDb2xkVXNlOgorICAgICAgICBjYXNlIFNjcmF0Y2g6CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBDb2xkVXNlOgorICAgICAgICBjYXNlIFVzZToK
KyAgICAgICAgY2FzZSBVc2VEZWY6CisgICAgICAgIGNhc2UgVXNlWkRlZjoKKyAgICAgICAgY2Fz
ZSBEZWY6CisgICAgICAgIGNhc2UgWkRlZjoKKyAgICAgICAgY2FzZSBVc2VBZGRyOgorICAgICAg
ICBjYXNlIEVhcmx5RGVmOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAg
ICAgfQogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBSb2xlIGltcGxpZXMgdGhhdCB0aGUg
SW5zdCB3aWxsIERlZiB0aGUgQXJnLgotICAgIHN0YXRpYyBib29sIGlzRGVmKFJvbGUgcm9sZSkK
KyAgICBzdGF0aWMgYm9vbCBpc0FueURlZihSb2xlIHJvbGUpCiAgICAgewogICAgICAgICBzd2l0
Y2ggKHJvbGUpIHsKICAgICAgICAgY2FzZSBVc2U6CiAgICAgICAgIGNhc2UgQ29sZFVzZToKICAg
ICAgICAgY2FzZSBVc2VBZGRyOgogICAgICAgICBjYXNlIExhdGVVc2U6CisgICAgICAgIGNhc2Ug
TGF0ZUNvbGRVc2U6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgRGVm
OgorICAgICAgICBjYXNlIFVzZURlZjoKKyAgICAgICAgY2FzZSBaRGVmOgorICAgICAgICBjYXNl
IFVzZVpEZWY6CisgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNhc2UgU2NyYXRjaDoK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gUmV0
dXJucyB0cnVlIGlmIHRoZSBSb2xlIGltcGxpZXMgdGhhdCB0aGUgSW5zdCB3aWxsIERlZiB0aGUg
QXJnIGJlZm9yZSBzdGFydCBvZiBleGVjdXRpb24uCisgICAgc3RhdGljIGJvb2wgaXNFYXJseURl
ZihSb2xlIHJvbGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKKyAgICAgICAgY2Fz
ZSBVc2U6CisgICAgICAgIGNhc2UgQ29sZFVzZToKKyAgICAgICAgY2FzZSBVc2VBZGRyOgorICAg
ICAgICBjYXNlIExhdGVVc2U6CisgICAgICAgIGNhc2UgRGVmOgorICAgICAgICBjYXNlIFVzZURl
ZjoKKyAgICAgICAgY2FzZSBaRGVmOgorICAgICAgICBjYXNlIFVzZVpEZWY6CisgICAgICAgIGNh
c2UgTGF0ZUNvbGRVc2U6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2Ug
RWFybHlEZWY6CisgICAgICAgIGNhc2UgU2NyYXRjaDoKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisgICAgfQorCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBSb2xlIGlt
cGxpZXMgdGhhdCB0aGUgSW5zdCB3aWxsIERlZiB0aGUgQXJnIGFmdGVyIHRoZSBlbmQgb2YgZXhl
Y3V0aW9uLgorICAgIHN0YXRpYyBib29sIGlzTGF0ZURlZihSb2xlIHJvbGUpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKHJvbGUpIHsKKyAgICAgICAgY2FzZSBVc2U6CisgICAgICAgIGNhc2UgQ29s
ZFVzZToKKyAgICAgICAgY2FzZSBVc2VBZGRyOgorICAgICAgICBjYXNlIExhdGVVc2U6CisgICAg
ICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNhc2UgU2NyYXRjaDoKKyAgICAgICAgY2FzZSBM
YXRlQ29sZFVzZToKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgY2FzZSBEZWY6
CiAgICAgICAgIGNhc2UgVXNlRGVmOgpAQCAtMjUwLDYgKzMyNiw5IEBAIHB1YmxpYzoKICAgICAg
ICAgY2FzZSBMYXRlVXNlOgogICAgICAgICBjYXNlIERlZjoKICAgICAgICAgY2FzZSBVc2VEZWY6
CisgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNhc2UgU2NyYXRjaDoKKyAgICAgICAg
Y2FzZSBMYXRlQ29sZFVzZToKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgY2Fz
ZSBaRGVmOgogICAgICAgICBjYXNlIFVzZVpEZWY6CkBAIC0zMzEsNiArNDEwLDExIEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgfQogCisgICAgQXJnKFJlZyByZWcpCisgICAgICAgIDogQXJnKEFpcjo6
VG1wKHJlZykpCisgICAgeworICAgIH0KKwogICAgIHN0YXRpYyBBcmcgaW1tKGludDY0X3QgdmFs
dWUpCiAgICAgewogICAgICAgICBBcmcgcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDE5NDUxNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBA
IC02NCw2ICs2NCwxMSBAQCBwdWJsaWM6CiAgICAgY29uc3QgSW5zdCYgYXQodW5zaWduZWQgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHNbaW5kZXhdOyB9CiAgICAgSW5zdCYgYXQodW5zaWdu
ZWQgaW5kZXgpIHsgcmV0dXJuIG1faW5zdHNbaW5kZXhdOyB9CiAKKyAgICBJbnN0KiBnZXQodW5z
aWduZWQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gaW5kZXggPCBzaXplKCkgPyAmYXQo
aW5kZXgpIDogbnVsbHB0cjsKKyAgICB9CisKICAgICBjb25zdCBJbnN0JiBsYXN0KCkgY29uc3Qg
eyByZXR1cm4gbV9pbnN0cy5sYXN0KCk7IH0KICAgICBJbnN0JiBsYXN0KCkgeyByZXR1cm4gbV9p
bnN0cy5sYXN0KCk7IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJF
bGltaW5hdGVEZWFkQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJFbGltaW5hdGVEZWFkQ29kZS5jcHAJKHJldmlzaW9uIDE5NDUxNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRWxpbWluYXRlRGVhZENvZGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIGJvb2wgZWxpbWluYXRlRGVhZENvZGUoQ29kZSYg
Y29kZSkKICAgICAgICAgYm9vbCBzdG9yZXNUb0xpdmUgPSBmYWxzZTsKICAgICAgICAgaW5zdC5m
b3JFYWNoQXJnKAogICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFy
Zzo6VHlwZSwgQXJnOjpXaWR0aCkgewotICAgICAgICAgICAgICAgIGlmICghQXJnOjppc0RlZihy
b2xlKSkKKyAgICAgICAgICAgICAgICBpZiAoIUFyZzo6aXNBbnlEZWYocm9sZSkpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICBzdG9yZXNUb0xpdmUgfD0gaXNB
cmdMaXZlKGFyZyk7CiAgICAgICAgICAgICB9KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlySW5zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJJbnN0LmNwcAkocmV2aXNpb24gMTk0NTE3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBA
QCBib29sIEluc3Q6Omhhc0FyZ0VmZmVjdHMoKQogICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CiAg
ICAgZm9yRWFjaEFyZygKICAgICAgICAgWyZdIChBcmcmLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpU
eXBlLCBBcmc6OldpZHRoKSB7Ci0gICAgICAgICAgICBpZiAoQXJnOjppc0RlZihyb2xlKSkKKyAg
ICAgICAgICAgIGlmIChBcmc6OmlzQW55RGVmKHJvbGUpKQogICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IHRydWU7CiAgICAgICAgIH0pOwogICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAkocmV2aXNpb24gMTk0NTE3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNywx
MCArMTI3LDE4IEBAIHB1YmxpYzoKICAgICBjb25zdCBSZWdpc3RlclNldCYgZXh0cmFDbG9iYmVy
ZWRSZWdzKCk7CiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJhRWFybHlDbG9iYmVyZWRSZWdz
KCk7CiAKLSAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIERlZnMgYW5kIHRoZSBleHRyYSBjbG9iYmVy
ZWQgcmVnaXN0ZXJzLiBZb3UgbXVzdCBzdXBwbHkgdGhlIG5leHQgaW5zdHJ1Y3Rpb24gaWYKLSAg
ICAvLyB0aGVyZSBpcyBvbmUuCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICB2
b2lkIGZvckVhY2hUbXBXaXRoRXh0cmFDbG9iYmVyZWRSZWdzKEluc3QqIG5leHRJbnN0LCBjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKTsKKyAgICAvLyBJdGVyYXRlIG92ZXIgYWxsIERlZidzIHRoYXQg
aGFwcGVuIGF0IHRoZSBlbmQgb2YgYW4gaW5zdHJ1Y3Rpb24uIFlvdSBzdXBwbHkgYSBwYWlyCisg
ICAgLy8gaW5zdHJ1Y3Rpb25zLiBUaGUgaW5zdHJ1Y3Rpb25zIG11c3QgYXBwZWFyIG5leHQgdG8g
ZWFjaCBvdGhlciwgaW4gdGhhdCBvcmRlciwgaW4gc29tZSBiYXNpYworICAgIC8vIGJsb2NrLiBZ
b3UgY2FuIHBhc3MgbnVsbCBmb3IgdGhlIGZpcnN0IGluc3RydWN0aW9uIHdoZW4gYW5hbHl6aW5n
IHdoYXQgaGFwcGVucyBhdCB0aGUgdG9wIG9mCisgICAgLy8gYSBiYXNpYyBibG9jay4gWW91IGNh
biBwYXNzIG51bGwgZm9yIHRoZSBzZWNvbmQgaW5zdHJ1Y3Rpb24gd2hlbiBhbmFseXppbmcgd2hh
dCBoYXBwZW5zIGF0IHRoZQorICAgIC8vIGJvdHRvbSBvZiBhIGJhc2ljIGJsb2NrLgorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFRoaW5nLCB0eXBlbmFtZSBGdW5jdG9yPgorICAgIHN0YXRpYyB2b2lk
IGZvckVhY2hEZWYoSW5zdCogcHJldkluc3QsIEluc3QqIG5leHRJbnN0LCBjb25zdCBGdW5jdG9y
Jik7CisKKyAgICAvLyBJdGVyYXRlIG92ZXIgYWxsIERlZidzIHRoYXQgaGFwcGVuIGF0IHRoZSBl
bmQgb2YgdGhpcyBpbnN0cnVjdGlvbiwgaW5jbHVkaW5nIGV4dHJhIGNsb2JiZXJlZAorICAgIC8v
IHJlZ2lzdGVycy4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUaGluZywgdHlwZW5hbWUgRnVuY3Rv
cj4KKyAgICBzdGF0aWMgdm9pZCBmb3JFYWNoRGVmV2l0aEV4dHJhQ2xvYmJlcmVkUmVncyhJbnN0
KiBwcmV2SW5zdCwgSW5zdCogbmV4dEluc3QsIGNvbnN0IEZ1bmN0b3ImKTsKIAogICAgIC8vIFVz
ZSB0aGlzIHRvIHJlcG9ydCB3aGljaCByZWdpc3RlcnMgYXJlIGxpdmUuIFRoaXMgc2hvdWxkIGJl
IGRvbmUganVzdCBiZWZvcmUgY29kZWdlbi4gTm90ZQogICAgIC8vIHRoYXQgZm9yIGVmZmljaWVu
Y3ksIHJlcG9ydFVzZWRSZWdpc3RlcnMoKSBvbmx5IHdvcmtzIGlmIGhhc1NwZWNpYWwoKSByZXR1
cm5zIHRydWUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0
SW5saW5lcy5oCShyZXZpc2lvbiAxOTQ1MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpckluc3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTk1LDI0ICs5NSw0OCBAQCBp
bmxpbmUgY29uc3QgUmVnaXN0ZXJTZXQmIEluc3Q6OmV4dHJhRWFyCiAgICAgcmV0dXJuIGFyZ3Nb
MF0uc3BlY2lhbCgpLT5leHRyYUVhcmx5Q2xvYmJlcmVkUmVncygqdGhpcyk7CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci1pbmxpbmUgdm9pZCBJbnN0Ojpmb3JFYWNoVG1wV2l0aEV4
dHJhQ2xvYmJlcmVkUmVncyhJbnN0KiBuZXh0SW5zdCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIFRoaW5nLCB0eXBlbmFtZSBGdW5jdG9yPgoraW5saW5lIHZvaWQg
SW5zdDo6Zm9yRWFjaERlZihJbnN0KiBwcmV2SW5zdCwgSW5zdCogbmV4dEluc3QsIGNvbnN0IEZ1
bmN0b3ImIGZ1bmN0b3IpCiB7Ci0gICAgZm9yRWFjaFRtcCgKLSAgICAgICAgWyZdIChUbXAmIHRt
cEFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSBhcmdUeXBlLCBBcmc6OldpZHRoIGFyZ1dp
ZHRoKSB7Ci0gICAgICAgICAgICBmdW5jdG9yKHRtcEFyZywgcm9sZSwgYXJnVHlwZSwgYXJnV2lk
dGgpOwotICAgICAgICB9KTsKKyAgICBpZiAocHJldkluc3QpIHsKKyAgICAgICAgcHJldkluc3Qt
PmZvckVhY2g8VGhpbmc+KAorICAgICAgICAgICAgWyZdIChUaGluZyYgdGhpbmcsIEFyZzo6Um9s
ZSByb2xlLCBBcmc6OlR5cGUgYXJnVHlwZSwgQXJnOjpXaWR0aCBhcmdXaWR0aCkgeworICAgICAg
ICAgICAgICAgIGlmIChBcmc6OmlzTGF0ZURlZihyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAg
ZnVuY3Rvcih0aGluZywgcm9sZSwgYXJnVHlwZSwgYXJnV2lkdGgpOworICAgICAgICAgICAgfSk7
CisgICAgfQorCisgICAgaWYgKG5leHRJbnN0KSB7CisgICAgICAgIG5leHRJbnN0LT5mb3JFYWNo
PFRoaW5nPigKKyAgICAgICAgICAgIFsmXSAoVGhpbmcmIHRoaW5nLCBBcmc6OlJvbGUgcm9sZSwg
QXJnOjpUeXBlIGFyZ1R5cGUsIEFyZzo6V2lkdGggYXJnV2lkdGgpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoQXJnOjppc0Vhcmx5RGVmKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICBmdW5jdG9y
KHRoaW5nLCByb2xlLCBhcmdUeXBlLCBhcmdXaWR0aCk7CisgICAgICAgICAgICB9KTsKKyAgICB9
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFRoaW5nLCB0eXBlbmFtZSBGdW5jdG9yPgoraW5saW5l
IHZvaWQgSW5zdDo6Zm9yRWFjaERlZldpdGhFeHRyYUNsb2JiZXJlZFJlZ3MoCisgICAgSW5zdCog
cHJldkluc3QsIEluc3QqIG5leHRJbnN0LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQoreworICAg
IGZvckVhY2hEZWY8VGhpbmc+KHByZXZJbnN0LCBuZXh0SW5zdCwgZnVuY3Rvcik7CiAKKyAgICBB
cmc6OlJvbGUgcmVnRGVmUm9sZTsKKyAgICAKICAgICBhdXRvIHJlcG9ydFJlZyA9IFsmXSAoUmVn
IHJlZykgewogICAgICAgICBBcmc6OlR5cGUgdHlwZSA9IHJlZy5pc0dQUigpID8gQXJnOjpHUCA6
IEFyZzo6RlA7Ci0gICAgICAgIGZ1bmN0b3IoVG1wKHJlZyksIEFyZzo6RGVmLCB0eXBlLCBBcmc6
OmNvbnNlcnZhdGl2ZVdpZHRoKHR5cGUpKTsKKyAgICAgICAgZnVuY3RvcihUaGluZyhyZWcpLCBy
ZWdEZWZSb2xlLCB0eXBlLCBBcmc6OmNvbnNlcnZhdGl2ZVdpZHRoKHR5cGUpKTsKICAgICB9Owog
Ci0gICAgaWYgKGhhc1NwZWNpYWwoKSkKLSAgICAgICAgZXh0cmFDbG9iYmVyZWRSZWdzKCkuZm9y
RWFjaChyZXBvcnRSZWcpOworICAgIGlmIChwcmV2SW5zdCAmJiBwcmV2SW5zdC0+aGFzU3BlY2lh
bCgpKSB7CisgICAgICAgIHJlZ0RlZlJvbGUgPSBBcmc6OkRlZjsKKyAgICAgICAgcHJldkluc3Qt
PmV4dHJhQ2xvYmJlcmVkUmVncygpLmZvckVhY2gocmVwb3J0UmVnKTsKKyAgICB9CiAKLSAgICBp
ZiAobmV4dEluc3QgJiYgbmV4dEluc3QtPmhhc1NwZWNpYWwoKSkKKyAgICBpZiAobmV4dEluc3Qg
JiYgbmV4dEluc3QtPmhhc1NwZWNpYWwoKSkgeworICAgICAgICByZWdEZWZSb2xlID0gQXJnOjpF
YXJseURlZjsKICAgICAgICAgbmV4dEluc3QtPmV4dHJhRWFybHlDbG9iYmVyZWRSZWdzKCkuZm9y
RWFjaChyZXBvcnRSZWcpOworICAgIH0KIH0KIAogaW5saW5lIHZvaWQgSW5zdDo6cmVwb3J0VXNl
ZFJlZ2lzdGVycyhjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycykKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRS
ZWdpc3RlckNvYWxlc2NpbmcuY3BwCShyZXZpc2lvbiAxOTQ1MTcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzcwLDM5ICs3NzAsNDIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHR5cGVu
YW1lIFRtcExpdmVuZXNzPHR5cGU+OjpMb2NhbENhbGMgbG9jYWxDYWxjKGxpdmVuZXNzLCBibG9j
ayk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7
IGluc3RJbmRleC0tOykgewogICAgICAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQo
aW5zdEluZGV4KTsKLSAgICAgICAgICAgICAgICBJbnN0KiBuZXh0SW5zdCA9IGluc3RJbmRleCAr
IDEgPCBibG9jay0+c2l6ZSgpID8gJmJsb2NrLT5hdChpbnN0SW5kZXggKyAxKSA6IG51bGxwdHI7
Ci0gICAgICAgICAgICAgICAgYnVpbGQoaW5zdCwgbmV4dEluc3QsIGxvY2FsQ2FsYyk7CisgICAg
ICAgICAgICAgICAgSW5zdCogbmV4dEluc3QgPSBibG9jay0+Z2V0KGluc3RJbmRleCArIDEpOwor
ICAgICAgICAgICAgICAgIGJ1aWxkKCZpbnN0LCBuZXh0SW5zdCwgbG9jYWxDYWxjKTsKICAgICAg
ICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZShpbnN0SW5kZXgpOwogICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnVpbGQobnVsbHB0ciwgJmJsb2NrLT5hdCgwKSwgbG9jYWxDYWxjKTsKICAg
ICAgICAgfQogICAgIH0KIAotICAgIHZvaWQgYnVpbGQoSW5zdCYgaW5zdCwgSW5zdCogbmV4dElu
c3QsIGNvbnN0IHR5cGVuYW1lIFRtcExpdmVuZXNzPHR5cGU+OjpMb2NhbENhbGMmIGxvY2FsQ2Fs
YykKKyAgICB2b2lkIGJ1aWxkKEluc3QqIHByZXZJbnN0LCBJbnN0KiBuZXh0SW5zdCwgY29uc3Qg
dHlwZW5hbWUgVG1wTGl2ZW5lc3M8dHlwZT46OkxvY2FsQ2FsYyYgbG9jYWxDYWxjKQogICAgIHsK
LSAgICAgICAgaW5zdC5mb3JFYWNoVG1wV2l0aEV4dHJhQ2xvYmJlcmVkUmVncygKLSAgICAgICAg
ICAgIG5leHRJbnN0LAorICAgICAgICBJbnN0Ojpmb3JFYWNoRGVmV2l0aEV4dHJhQ2xvYmJlcmVk
UmVnczxUbXA+KAorICAgICAgICAgICAgcHJldkluc3QsIG5leHRJbnN0LAogICAgICAgICAgICAg
WyZdIChjb25zdCBUbXAmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSBhcmdUeXBlLCBB
cmc6OldpZHRoKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFBcmc6OmlzRGVmKHJvbGUpIHx8IGFy
Z1R5cGUgIT0gdHlwZSkKKyAgICAgICAgICAgICAgICBpZiAoYXJnVHlwZSAhPSB0eXBlKQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgLy8gQWxsIHRoZSBEZWYoKXMgaW50ZXJmZXJlIHdpdGggZWFjaCBvdGhlciBhbmQgd2l0aCBh
bGwgdGhlIGV4dHJhIGNsb2JiZXJlZCBUbXBzLgogICAgICAgICAgICAgICAgIC8vIFdlIHNob3Vs
ZCBub3QgdXNlIGZvckVhY2hEZWZBbmRFeHRyYUNsb2JiZXJlZFRtcCgpIGhlcmUgc2luY2UgY29s
b3JlZCBUbXBzCiAgICAgICAgICAgICAgICAgLy8gZG8gbm90IG5lZWQgaW50ZXJmZXJlbmNlIGVk
Z2VzIGluIG91ciBpbXBsZW1lbnRhdGlvbi4KLSAgICAgICAgICAgICAgICBpbnN0LmZvckVhY2hU
bXAoWyZdIChUbXAmIG90aGVyQXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIGFyZ1R5cGUs
IEFyZzo6V2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFBcmc6OmlzRGVmKHJvbGUp
IHx8IGFyZ1R5cGUgIT0gdHlwZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICAgICAgICAgICAgICBhZGRFZGdlKGFyZywgb3RoZXJBcmcpOwotICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgICAgIEluc3Q6OmZvckVhY2hEZWY8VG1wPigKKyAgICAgICAg
ICAgICAgICAgICAgcHJldkluc3QsIG5leHRJbnN0LAorICAgICAgICAgICAgICAgICAgICBbJl0g
KFRtcCYgb3RoZXJBcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgYXJnVHlwZSwgQXJnOjpX
aWR0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ1R5cGUgIT0gdHlwZSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVkZ2UoYXJnLCBvdGhlckFyZyk7CisgICAg
ICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7CiAKLSAgICAgICAgaWYgKG1heUJl
Q29hbGVzY2FibGUoaW5zdCkpIHsKKyAgICAgICAgaWYgKHByZXZJbnN0ICYmIG1heUJlQ29hbGVz
Y2FibGUoKnByZXZJbnN0KSkgewogICAgICAgICAgICAgLy8gV2UgZG8gbm90IHdhbnQgdGhlIFVz
ZSgpIG9mIHRoaXMgbW92ZSB0byBpbnRlcmZlcmUgd2l0aCB0aGUgRGVmKCksIGV2ZW4gaWYgaXQg
aXMgbGl2ZQogICAgICAgICAgICAgLy8gYWZ0ZXIgdGhlIE1vdmUuIElmIHdlIHdlcmUgdG8gYWRk
IHRoZSBpbnRlcmZlcmVuY2UgZWRnZSwgaXQgd291bGQgYmUgaW1wb3NzaWJsZSB0bwogICAgICAg
ICAgICAgLy8gY29hbGVzY2UgdGhlIE1vdmUgZXZlbiBpZiB0aGUgdHdvIFRtcCBuZXZlciBpbnRl
cmZlcmUgYW55d2hlcmUuCiAgICAgICAgICAgICBUbXAgZGVmVG1wOwogICAgICAgICAgICAgVG1w
IHVzZVRtcDsKLSAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcChbJmRlZlRtcCwgJnVzZVRtcF0g
KFRtcCYgYXJnVG1wLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRoKSB7Cisg
ICAgICAgICAgICBwcmV2SW5zdC0+Zm9yRWFjaFRtcChbJmRlZlRtcCwgJnVzZVRtcF0gKFRtcCYg
YXJnVG1wLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRoKSB7CiAgICAgICAg
ICAgICAgICAgaWYgKEFyZzo6aXNEZWYocm9sZSkpCiAgICAgICAgICAgICAgICAgICAgIGRlZlRt
cCA9IGFyZ1RtcDsKICAgICAgICAgICAgICAgICBlbHNlIHsKQEAgLTgzMiwyNiArODM1LDIwIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGFkZEVkZ2UoZGVmVG1wLCBsaXZlVG1wKTsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgLy8gVGhlIG5leHQgaW5zdHJ1Y3Rpb24gY291
bGQgaGF2ZSBlYXJseSBjbG9iYmVycy4gV2UgbmVlZCB0byBjb25zaWRlciB0aG9zZSBub3cuCi0g
ICAgICAgICAgICBpZiAobmV4dEluc3QgJiYgbmV4dEluc3QtPmhhc1NwZWNpYWwoKSkgewotICAg
ICAgICAgICAgICAgIG5leHRJbnN0LT5leHRyYUVhcmx5Q2xvYmJlcmVkUmVncygpLmZvckVhY2go
WyZdIChSZWcgcmVnKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZWcuaXNHUFIoKSA9PSAo
dHlwZSA9PSBBcmc6OkdQKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBU
bXAmIGxpdmVUbXAgOiBsb2NhbENhbGMubGl2ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFkZEVkZ2UoVG1wKHJlZyksIGxpdmVUbXApOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBUaGUgbmV4
dCBpbnN0cnVjdGlvbiBjb3VsZCBoYXZlIGVhcmx5IGNsb2JiZXJzIG9yIGVhcmx5IGRlZidzLiBX
ZSBuZWVkIHRvIGNvbnNpZGVyCisgICAgICAgICAgICAvLyB0aG9zZSBub3cuCisgICAgICAgICAg
ICBhZGRFZGdlcyhudWxscHRyLCBuZXh0SW5zdCwgbG9jYWxDYWxjLmxpdmUoKSk7CiAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgYWRkRWRnZXMoaW5zdCwgbmV4dEluc3QsIGxvY2FsQ2FsYy5s
aXZlKCkpOworICAgICAgICAgICAgYWRkRWRnZXMocHJldkluc3QsIG5leHRJbnN0LCBsb2NhbENh
bGMubGl2ZSgpKTsKICAgICB9CiAKLSAgICB2b2lkIGFkZEVkZ2VzKEluc3QmIGluc3QsIEluc3Qq
IG5leHRJbnN0LCB0eXBlbmFtZSBUbXBMaXZlbmVzczx0eXBlPjo6TG9jYWxDYWxjOjpJdGVyYWJs
ZSBsaXZlVG1wcykKKyAgICB2b2lkIGFkZEVkZ2VzKEluc3QqIHByZXZJbnN0LCBJbnN0KiBuZXh0
SW5zdCwgdHlwZW5hbWUgVG1wTGl2ZW5lc3M8dHlwZT46OkxvY2FsQ2FsYzo6SXRlcmFibGUgbGl2
ZVRtcHMpCiAgICAgewogICAgICAgICAvLyBBbGwgdGhlIERlZigpcyBpbnRlcmZlcmUgd2l0aCBl
dmVydGhpbmcgbGl2ZS4KLSAgICAgICAgaW5zdC5mb3JFYWNoVG1wV2l0aEV4dHJhQ2xvYmJlcmVk
UmVncygKLSAgICAgICAgICAgIG5leHRJbnN0LAorICAgICAgICBJbnN0Ojpmb3JFYWNoRGVmV2l0
aEV4dHJhQ2xvYmJlcmVkUmVnczxUbXA+KAorICAgICAgICAgICAgcHJldkluc3QsIG5leHRJbnN0
LAogICAgICAgICAgICAgWyZdIChjb25zdCBUbXAmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6
VHlwZSBhcmdUeXBlLCBBcmc6OldpZHRoKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFBcmc6Omlz
RGVmKHJvbGUpIHx8IGFyZ1R5cGUgIT0gdHlwZSkKKyAgICAgICAgICAgICAgICBpZiAoYXJnVHlw
ZSAhPSB0eXBlKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBUbXAmIGxpdmVUbXAgOiBsaXZlVG1wcykgewpA
QCAtMTI0MiwxNiArMTIzOSwxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBpZiAo
QXJnOjppc0FueVVzZShyb2xlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgVG1wIG5ld1Rt
cCA9IG1fY29kZS5uZXdUbXAodHlwZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRp
b25TZXQuaW5zZXJ0KGluc3RJbmRleCwgbW92ZSwgaW5zdC5vcmlnaW4sIGFyZywgbmV3VG1wKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IG5ld1RtcDsKKyAgICAgICAgICAgICAgICAg
ICAgdG1wID0gbV9jb2RlLm5ld1RtcCh0eXBlKTsKKyAgICAgICAgICAgICAgICAgICAgdW5zcGls
bGFibGVUbXBzLmFkZChBYnNvbHV0ZVRtcE1hcHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleCh0bXAp
KTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQW55IG5ldyBGaWxsKCkgc2hvdWxkIG5l
dmVyIGJlIHNwaWxsZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnNwaWxsYWJsZVRtcHMu
YWRkKEFic29sdXRlVG1wTWFwcGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4KHRtcCkpOworICAgICAg
ICAgICAgICAgICAgICBpZiAocm9sZSAhPSBBcmc6OlNjcmF0Y2gpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChBcmc6OmlzQW55VXNlKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoaW5zdEluZGV4LCBtb3ZlLCBpbnN0Lm9yaWdpbiwg
YXJnLCB0bXApOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlEZWYocm9s
ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydChpbnN0
SW5kZXggKyAxLCBtb3ZlLCBpbnN0Lm9yaWdpbiwgdG1wLCBhcmcpOwogICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzRGVmKHJvbGUpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydChpbnN0SW5kZXggKyAxLCBtb3Zl
LCBpbnN0Lm9yaWdpbiwgdG1wLCBhcmcpOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAkocmV2aXNpb24gMTk0NTE3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTgsNiArMTE4LDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspCiAgICAgICAg
ICAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGluc3RJbmRleCk7CiAKKyAgICAgICAgICAg
ICAgICAvLyBIYW5kbGUgdGhlIGVhcmx5IGRlZidzIG9mIHRoZSBmaXJzdCBpbnN0cnVjdGlvbi4K
KyAgICAgICAgICAgICAgICBibG9jay0+YXQoMCkuZm9yRWFjaDx0eXBlbmFtZSBBZGFwdGVyOjpU
aGluZz4oCisgICAgICAgICAgICAgICAgICAgIFsmXSAodHlwZW5hbWUgQWRhcHRlcjo6VGhpbmcm
IHRoaW5nLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIHR5cGUsIEFyZzo6V2lkdGgpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzRWFybHlEZWYocm9sZSkgJiYgQWRhcHRl
cjo6YWNjZXB0c1R5cGUodHlwZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV93b3Jr
c2V0LnJlbW92ZShBZGFwdGVyOjp2YWx1ZVRvSW5kZXgodGhpbmcpKTsKKyAgICAgICAgICAgICAg
ICAgICAgfSk7CisKICAgICAgICAgICAgICAgICBWZWN0b3I8dW5zaWduZWQ+JiBsaXZlQXRIZWFk
ID0gbV9saXZlQXRIZWFkW2Jsb2NrXTsKIAogICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgY2Fy
ZSBhYm91dCBUbXBzIHRoYXQgd2VyZSBkaXNjb3ZlcmVkIGluIHRoaXMgaXRlcmF0aW9uLiBJdCBp
cyBpbXBvc3NpYmxlCkBAIC0yMTMsMTAgKzIyMCwyMSBAQCBwdWJsaWM6CiAgICAgICAgIHsKICAg
ICAgICAgICAgIEluc3QmIGluc3QgPSBtX2Jsb2NrLT5hdChpbnN0SW5kZXgpOwogICAgICAgICAg
ICAgYXV0byYgd29ya3NldCA9IG1fbGl2ZW5lc3MubV93b3Jrc2V0OworCisgICAgICAgICAgICAv
LyBGaXJzdCBoYW5kbGUgdGhlIGVhcmx5IGRlZidzIG9mIHRoZSBuZXh0IGluc3RydWN0aW9uLgor
ICAgICAgICAgICAgaWYgKGluc3RJbmRleCArIDEgPCBtX2Jsb2NrLT5zaXplKCkpIHsKKyAgICAg
ICAgICAgICAgICBJbnN0JiBuZXh0SW5zdCA9IG1fYmxvY2stPmF0KGluc3RJbmRleCArIDEpOwor
ICAgICAgICAgICAgICAgIG5leHRJbnN0LmZvckVhY2g8dHlwZW5hbWUgQWRhcHRlcjo6VGhpbmc+
KAorICAgICAgICAgICAgICAgICAgICBbJl0gKHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nJiB0aGlu
ZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSB0eXBlLCBBcmc6OldpZHRoKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0Vhcmx5RGVmKHJvbGUpICYmIEFkYXB0ZXI6OmFj
Y2VwdHNUeXBlKHR5cGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtzZXQucmVt
b3ZlKEFkYXB0ZXI6OnZhbHVlVG9JbmRleCh0aGluZykpOworICAgICAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gRmlyc3QgaGFu
ZGxlIGRlZidzLgogICAgICAgICAgICAgaW5zdC5mb3JFYWNoPHR5cGVuYW1lIEFkYXB0ZXI6OlRo
aW5nPigKICAgICAgICAgICAgICAgICBbJl0gKHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nJiB0aGlu
ZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSB0eXBlLCBBcmc6OldpZHRoKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChBcmc6OmlzRGVmKHJvbGUpICYmIEFkYXB0ZXI6OmFjY2VwdHNUeXBl
KHR5cGUpKQorICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0xhdGVEZWYocm9sZSkgJiYg
QWRhcHRlcjo6YWNjZXB0c1R5cGUodHlwZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICB3b3Jr
c2V0LnJlbW92ZShBZGFwdGVyOjp2YWx1ZVRvSW5kZXgodGhpbmcpKTsKICAgICAgICAgICAgICAg
ICB9KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5
dGhpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
U3BpbGxFdmVyeXRoaW5nLmNwcAkocmV2aXNpb24gMTk0NTE3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
Myw3ICs1Myw3IEBAIHZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUmIGNvZGUpCiAKICAgICAgICAg
dXNlZFJlZ2lzdGVyc1tibG9ja10ucmVzaXplKGJsb2NrLT5zaXplKCkgKyAxKTsKIAotICAgICAg
ICBhdXRvIHNldFVzZWRSZWdpc3RlcnMgPSBbJl0gKHVuc2lnbmVkIGluZGV4LCBJbnN0JiBpbnN0
KSB7CisgICAgICAgIGF1dG8gc2V0VXNlZFJlZ2lzdGVycyA9IFsmXSAodW5zaWduZWQgaW5kZXgp
IHsKICAgICAgICAgICAgIFJlZ2lzdGVyU2V0JiByZWdpc3RlclNldCA9IHVzZWRSZWdpc3RlcnNb
YmxvY2tdW2luZGV4XTsKICAgICAgICAgICAgIGZvciAoVG1wIHRtcCA6IGdwTG9jYWxDYWxjLmxp
dmUoKSkgewogICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSkKQEAgLTY2LDIzICs2Niwy
MCBAQCB2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJiBjb2RlKQogCiAgICAgICAgICAgICAvLyBH
b3R0YSBhY2NvdW50IGZvciBkZWFkIGFzc2lnbm1lbnRzIHRvIHJlZ2lzdGVycy4gVGhlc2UgbWF5
IGhhcHBlbiBiZWNhdXNlIHRoZSBpbnB1dAogICAgICAgICAgICAgLy8gY29kZSBpcyBzdWJvcHRp
bWFsLgotICAgICAgICAgICAgaW5zdC5mb3JFYWNoVG1wV2l0aEV4dHJhQ2xvYmJlcmVkUmVncygK
LSAgICAgICAgICAgICAgICBpbmRleCA8IGJsb2NrLT5zaXplKCkgPyAmYmxvY2stPmF0KGluZGV4
KSA6IG51bGxwdHIsCi0gICAgICAgICAgICAgICAgWyZyZWdpc3RlclNldF0gKGNvbnN0IFRtcCYg
dG1wLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRoKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSAmJiBBcmc6OmlzRGVmKHJvbGUpKQorICAgICAgICAg
ICAgSW5zdDo6Zm9yRWFjaERlZldpdGhFeHRyYUNsb2JiZXJlZFJlZ3M8VG1wPigKKyAgICAgICAg
ICAgICAgICBibG9jay0+Z2V0KGluZGV4IC0gMSksIGJsb2NrLT5nZXQoaW5kZXgpLAorICAgICAg
ICAgICAgICAgIFsmXSAoY29uc3QgVG1wJiB0bXAsIEFyZzo6Um9sZSwgQXJnOjpUeXBlLCBBcmc6
OldpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSkKICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlZ2lzdGVyU2V0LnNldCh0bXAucmVnKCkpOwogICAgICAgICAgICAg
ICAgIH0pOwogICAgICAgICB9OwogCiAgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0g
YmxvY2stPnNpemUoKTsgaW5zdEluZGV4LS07KSB7Ci0gICAgICAgICAgICBJbnN0JiBpbnN0ID0g
YmxvY2stPmF0KGluc3RJbmRleCk7Ci0gICAgICAgICAgICBzZXRVc2VkUmVnaXN0ZXJzKGluc3RJ
bmRleCArIDEsIGluc3QpOworICAgICAgICAgICAgc2V0VXNlZFJlZ2lzdGVycyhpbnN0SW5kZXgg
KyAxKTsKICAgICAgICAgICAgIGdwTG9jYWxDYWxjLmV4ZWN1dGUoaW5zdEluZGV4KTsKICAgICAg
ICAgICAgIGZwTG9jYWxDYWxjLmV4ZWN1dGUoaW5zdEluZGV4KTsKICAgICAgICAgfQotCi0gICAg
ICAgIEluc3Qgbm9wOwotICAgICAgICBzZXRVc2VkUmVnaXN0ZXJzKDAsIG5vcCk7CisgICAgICAg
IHNldFVzZWRSZWdpc3RlcnMoMCk7CiAgICAgfQogCiAgICAgLy8gQWxsb2NhdGUgYSBzdGFjayBz
bG90IGZvciBlYWNoIHRtcC4KQEAgLTEzMyw2ICsxMzAsNyBAQCB2b2lkIHNwaWxsRXZlcnl0aGlu
ZyhDb2RlJiBjb2RlKQogICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKICAgICAg
ICAgICAgICAgICAgICAgY2FzZSBBcmc6OlVzZToKICAgICAgICAgICAgICAgICAgICAgY2FzZSBB
cmc6OkNvbGRVc2U6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpFYXJseURlZjoKICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IHJlZ3NJblByaW9yaXR5T3JkZXIo
dHlwZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNldEJlZm9yZS5nZXQo
cmVnKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRCZWZvcmUuc2V0KHJl
Zyk7CkBAIC0xNTQsNiArMTUyLDggQEAgdm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29kZSkK
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlVzZURlZjoKICAgICAgICAgICAgICAgICAg
ICAgY2FzZSBBcmc6OlVzZVpEZWY6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpMYXRl
VXNlOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6TGF0ZUNvbGRVc2U6CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgQXJnOjpTY3JhdGNoOgogICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yIChSZWcgcmVnIDogcmVnc0luUHJpb3JpdHlPcmRlcih0eXBlKSkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghc2V0QmVmb3JlLmdldChyZWcpICYmICFzZXRBZnRlci5nZXQo
cmVnKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBZnRlci5zZXQocmVn
KTsKQEAgLTE3NCwxMyArMTc0LDExIEBAIHZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUmIGNvZGUp
CiAKICAgICAgICAgICAgICAgICAgICAgT3Bjb2RlIG1vdmUgPSB0eXBlID09IEFyZzo6R1AgPyBN
b3ZlIDogTW92ZURvdWJsZTsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueVVz
ZShyb2xlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0SW5kZXgsIG1vdmUsIGluc3Qub3JpZ2lu
LCBhcmcsIHRtcCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
aWYgKEFyZzo6aXNEZWYocm9sZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlv
blNldC5pbnNlcnQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdEluZGV4ICsgMSwg
bW92ZSwgaW5zdC5vcmlnaW4sIHRtcCwgYXJnKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJv
bGUgIT0gQXJnOjpTY3JhdGNoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjpp
c0FueVVzZShyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQu
aW5zZXJ0KGluc3RJbmRleCwgbW92ZSwgaW5zdC5vcmlnaW4sIGFyZywgdG1wKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55RGVmKHJvbGUpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoaW5zdEluZGV4ICsgMSwgbW92ZSwgaW5z
dC5vcmlnaW4sIHRtcCwgYXJnKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIH0pOwogICAgICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268173</attachid>
            <date>2016-01-03 21:20:11 -0800</date>
            <delta_ts>2016-01-03 22:01:47 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>58888</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk0NTI2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMiBA
QAorMjAxNi0wMS0wMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEIzIHBhdGhwb2ludHMgc2hvdWxkIGFsbG93IHJlcXVlc3Rpbmcgc2NyYXRjaCByZWdpc3RlcnMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjY2OQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNjcmF0Y2gg
cmVnaXN0ZXJzIGFyZSBzb21ldGhpbmcgdGhhdCB3ZSBvZnRlbiBuZWVkIGluIG1hbnkgcGF0Y2hw
b2ludCB1c2UgY2FzZXMuIEluIExMVk0ncworICAgICAgICBwYXRjaHBvaW50cywgd2UgZGlkbid0
IGhhdmUgYSBnb29kIHdheSB0byByZXF1ZXN0IHNjcmF0Y2ggcmVnaXN0ZXJzLiBTbywgb3VyIGN1
cnJlbnQgRlRMIGNvZGUKKyAgICAgICAgb2Z0ZW4gZG9lcyBjcmF6eSBzY3JhdGNoIHJlZ2lzdGVy
IGFsbG9jYXRpb24gbWFkbmVzcyBldmVuIHdoZW4gaXQgd291bGQgYmUgYmV0dGVyIHRvIGp1c3Qg
YXNrCisgICAgICAgIHRoZSBiYWNrZW5kIGZvciBzb21lIHJlZ2lzdGVycy4gVGhpcyBwYXRjaCBh
ZGRzIGEgbWVjaGFuaXNtIGZvciByZXF1ZXN0aW5nIHNjcmF0Y2ggcmVnaXN0ZXJzCisgICAgICAg
IGluIEIzLCBhbmQgd2lyZXMgaXQgYWxsIHRoZSB3YXkgdG8gYWxsIG9mIG91ciByZWdpc3RlciBh
bGxvY2F0aW9uIGFuZCBsaXZlbmVzcworICAgICAgICBpbmZyYXN0cnVjdHVyZS4KKworICAgICAg
ICBGcm9tIHRoZSBzdGFuZHBvaW50IG9mIGEgcGF0Y2hwb2ludCwgYSAic2NyYXRjaCByZWdpc3Rl
ciIgaXMgYW4gaW5zdHJ1Y3Rpb24gYXJndW1lbnQgdGhhdAorICAgICAgICBvbmx5IGFkbWl0cyBU
bXAgYW5kIGlzIGRlZmluZWQgZWFybHkgKGxpa2UgYW4gZWFybHkgY2xvYmJlciByZWdpc3Rlcikg
YW5kIGlzIHVzZWQgbGF0ZSAobGlrZQorICAgICAgICB3aGF0IHdlIHByZXZpb3VzbHkgY2FsbGVk
IExhdGVVc2UsIGV4Y2VwdCB0aGF0IHRoaXMgdGltZSBpdCdzIGFsc28gYSB3YXJtIHVzZSkuIFdl
IGFscmVhZHkKKyAgICAgICAgaGFkIHRoZSBiZWdpbm5pbmcgb2Ygc3VwcG9ydCBmb3IgZWFybHkg
ZGVmJ3MgYmVjYXVzZSBvZiBlYXJseSBjbG9iYmVycywgYW5kIHdlIGFscmVhZHkKKyAgICAgICAg
c3VwcG9ydGVkIGxhdGUgdXNlcyBhbGJlaXQgY29sZCBvbmVzLiBJIHJlYWxseSBvbmx5IG5lZWRl
ZCB0byBhZGQgb25lIG5ldyByb2xlOiAiU2NyYXRjaCIsCisgICAgICAgIHdoaWNoIG1lYW5zIGJv
dGggZWFybHkgZGVmIGFuZCBsYXRlIHVzZSBpbiBtdWNoIHRoZSBzYW1lIHdheSBhcyAiVXNlRGVm
IiBtZWFucyBib3RoIGVhcmx5CisgICAgICAgIHVzZSBhbmQgbGF0ZSBkZWYuIEJ1dCwgaXQgZmVl
bHMgYmV0dGVyIHRvIGNvbXBsZXRlIHRoZSBzZXQgb2Ygcm9sZXMsIHNvIEkgYWRkZWQgTGF0ZUNv
bGRVc2UKKyAgICAgICAgdG8gZGlmZmVyZW50aWF0ZSBmcm9tIExhdGVVc2UgKHdoaWNoIGlzIG5v
dyBhIHdhcm0gdXNlKSBhbmQgRWFybHlEZWYgdG8gZGlmZmVyZW50aWF0ZSBmcm9tCisgICAgICAg
IERlZiAod2hpY2ggaXMsIGFuZCBhbHdheXMgaGFzIGJlZW4sIGEgbGF0ZSBkZWYpLiBGb3JjaW5n
IHRoZSBjb2RlIHRvIGRlYWwgd2l0aCB0aGUgZnVsbAorICAgICAgICBtYXRyaXggb2YgcG9zc2li
aWxpdGllcyByZXN1bHRlZCBpbiB3aGF0IGlzIHByb2JhYmx5IGEgcHJvZ3Jlc3Npb24gaW4gaG93
IHdlIGhhbmRsZSBkZWZzIGluCisgICAgICAgIHRoZSByZWdpc3RlciBhbmQgc3RhY2sgYWxsb2Nh
dG9ycy4gVGhlIG5ldyBJbnN0Ojpmb3JFYWNoRGVmKEluc3QqLCBJbnN0KiwgY2FsbGJhY2spIGZ1
bGx5CisgICAgICAgIHJlY29nbml6ZXMgdGhhdCBhICJkZWYiIGlzIHNvbWV0aGluZyB0aGF0IGNh
biBjb21lIGZyb20gZWl0aGVyIHRoZSBwcmVjZWRpbmcgaW5zdHJ1Y3Rpb24gb3IKKyAgICAgICAg
dGhlIHN1Y2NlZWRpbmcgb25lLgorCisgICAgICAgIFRoaXMgZG9lc24ndCBhZGQgYW55IG5ldyBm
dW5jdGlvbmFsaXR5IHRvIEZUTCBCMyB5ZXQsIGJ1dCB0aGUgbmV3IHNjcmF0Y2ggcmVnaXN0ZXIg
bWVjaGFuaXNtCisgICAgICAgIGlzIGNvdmVyZWQgYnkgbmV3IHRlc3RiMyB0ZXN0cy4KKworICAg
ICAgICAqIGIzL0IzQ2hlY2tTcGVjaWFsLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3Bl
Y2lhbDo6aXNWYWxpZCk6CisgICAgICAgIChKU0M6OkIzOjpDaGVja1NwZWNpYWw6OmFkbWl0c1N0
YWNrKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6Z2VuZXJhdGUpOgorICAgICAg
ICAqIGIzL0IzTG93ZXJUb0Fpci5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9B
aXI6Omxvd2VyKToKKyAgICAgICAgKiBiMy9CM1BhdGNocG9pbnRTcGVjaWFsLmNwcDoKKyAgICAg
ICAgKEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjpmb3JFYWNoQXJnKToKKyAgICAgICAgKEpT
Qzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjppc1ZhbGlkKToKKyAgICAgICAgKEpTQzo6QjM6OlBh
dGNocG9pbnRTcGVjaWFsOjphZG1pdHNTdGFjayk6CisgICAgICAgIChKU0M6OkIzOjpQYXRjaHBv
aW50U3BlY2lhbDo6Z2VuZXJhdGUpOgorICAgICAgICAqIGIzL0IzUGF0Y2hwb2ludFZhbHVlLmNw
cDoKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRWYWx1ZTo6ZHVtcE1ldGEpOgorICAgICAg
ICAoSlNDOjpCMzo6UGF0Y2hwb2ludFZhbHVlOjpQYXRjaHBvaW50VmFsdWUpOgorICAgICAgICAq
IGIzL0IzUGF0Y2hwb2ludFZhbHVlLmg6CisgICAgICAgICogYjMvQjNTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMuY3BwOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1z
Ojp1bmF2YWlsYWJsZVJlZ2lzdGVycyk6CisgICAgICAgICogYjMvQjNTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMuaDoKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtczo6
Z3BTY3JhdGNoKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtczo6
ZnBTY3JhdGNoKToKKyAgICAgICAgKiBiMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHA6CisgICAgICAg
IChKU0M6OkIzOjpTdGFja21hcFNwZWNpYWw6OmZvckVhY2hBcmdJbXBsKToKKyAgICAgICAgKEpT
Qzo6QjM6OlN0YWNrbWFwU3BlY2lhbDo6aXNWYWxpZEltcGwpOgorICAgICAgICAoSlNDOjpCMzo6
U3RhY2ttYXBTcGVjaWFsOjphZG1pdHNTdGFja0ltcGwpOgorICAgICAgICAoSlNDOjpCMzo6U3Rh
Y2ttYXBTcGVjaWFsOjpyZXBzSW1wbCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcFNwZWNp
YWw6OmlzQXJnVmFsaWRGb3JWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcFNwZWNp
YWw6OmFwcGVuZFJlcHNJbXBsKTogRGVsZXRlZC4KKyAgICAgICAgKiBiMy9CM1N0YWNrbWFwU3Bl
Y2lhbC5oOgorICAgICAgICAqIGIzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcDoKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6YWxsb2NhdGVTdGFjayk6CisgICAgICAgICogYjMvYWlyL0FpckFyZy5j
cHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGIzL2Fpci9BaXJB
cmcuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0FueVVzZSk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFyZzo6aXNDb2xkVXNlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJn
Ojppc0Vhcmx5VXNlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0xhdGVVc2UpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzQW55RGVmKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QXJnOjppc0Vhcmx5RGVmKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0xh
dGVEZWYpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzWkRlZik6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFyZzo6QXJnKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppbW0p
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzRGVmKTogRGVsZXRlZC4KKyAgICAgICAg
KiBiMy9haXIvQWlyQmFzaWNCbG9jay5oOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Js
b2NrOjphdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OmdldCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6Omxhc3QpOgorICAgICAgICAqIGIzL2Fpci9B
aXJFbGltaW5hdGVEZWFkQ29kZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OmVsaW1pbmF0
ZURlYWRDb2RlKToKKyAgICAgICAgKiBiMy9haXIvQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxz
LmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Zml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzKToK
KyAgICAgICAgKiBiMy9haXIvQWlySW5zdC5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Oklu
c3Q6Omhhc0FyZ0VmZmVjdHMpOgorICAgICAgICAqIGIzL2Fpci9BaXJJbnN0Lmg6CisgICAgICAg
ICogYjMvYWlyL0Fpckluc3RJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6
OmV4dHJhRWFybHlDbG9iYmVyZWRSZWdzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6
Zm9yRWFjaERlZik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6OmZvckVhY2hEZWZXaXRo
RXh0cmFDbG9iYmVyZWRSZWdzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6cmVwb3J0
VXNlZFJlZ2lzdGVycyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6OmZvckVhY2hUbXBX
aXRoRXh0cmFDbG9iYmVyZWRSZWdzKTogRGVsZXRlZC4KKyAgICAgICAgKiBiMy9haXIvQWlySXRl
cmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuY3BwOgorICAgICAgICAqIGIzL2Fpci9BaXJMaXZlbmVz
cy5oOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBYnN0cmFjdExpdmVuZXNzOjpBYnN0cmFjdExp
dmVuZXNzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QWJzdHJhY3RMaXZlbmVzczo6TG9jYWxD
YWxjOjpleGVjdXRlKToKKyAgICAgICAgKiBiMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcDoK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6c3BpbGxFdmVyeXRoaW5nKToKKyAgICAgICAgKiBiMy9h
aXIvQWlyVG1wV2lkdGguY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXBXaWR0aDo6cmVj
b21wdXRlKToKKyAgICAgICAgKiBiMy9haXIvQWlyVXNlQ291bnRzLmg6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OlVzZUNvdW50czo6VXNlQ291bnRzKToKKyAgICAgICAgKiBiMy90ZXN0YjMuY3Bw
OgorICAgICAgICAoSlNDOjpCMzo6dGVzdFBhdGNocG9pbnRBbnkpOgorICAgICAgICAoSlNDOjpC
Mzo6dGVzdFBhdGNocG9pbnRHUFNjcmF0Y2gpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdFBhdGNo
cG9pbnRGUFNjcmF0Y2gpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdFBhdGNocG9pbnRMb3RzT2ZM
YXRlQW55cyk6CisgICAgICAgIChKU0M6OkIzOjpydW4pOgorCiAyMDE2LTAxLTAzICBLaGVtIFJh
aiAgPHJhai5raGVtQGdtYWlsLmNvbT4KIAogICAgICAgICBXZWJLaXQgZmFpbHMgdG8gYnVpbGQg
d2l0aCBtdXNsIGxpYmMgbGlicmFyeQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q2hlY2tTcGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDaGVja1NwZWNpYWwuY3BwCShyZXZpc2lvbiAxOTQ1MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDaGVja1NwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyNCw3ICsxMjQsOCBA
QCB2b2lkIENoZWNrU3BlY2lhbDo6Zm9yRWFjaEFyZyhJbnN0JiBpbnN0CiBib29sIENoZWNrU3Bl
Y2lhbDo6aXNWYWxpZChJbnN0JiBpbnN0KQogewogICAgIHJldHVybiBoaWRkZW5CcmFuY2goaW5z
dCkuaXNWYWxpZEZvcm0oKQotICAgICAgICAmJiBpc1ZhbGlkSW1wbChudW1CM0FyZ3MoaW5zdCks
IG1fbnVtQ2hlY2tBcmdzICsgMSwgaW5zdCk7CisgICAgICAgICYmIGlzVmFsaWRJbXBsKG51bUIz
QXJncyhpbnN0KSwgbV9udW1DaGVja0FyZ3MgKyAxLCBpbnN0KQorICAgICAgICAmJiBpbnN0LmFy
Z3Muc2l6ZSgpIC0gbV9udW1DaGVja0FyZ3MgLSAxID09IGluc3Qub3JpZ2luLT5udW1DaGlsZHJl
bigpIC0gbnVtQjNBcmdzKGluc3QpOwogfQogCiBib29sIENoZWNrU3BlY2lhbDo6YWRtaXRzU3Rh
Y2soSW5zdCYgaW5zdCwgdW5zaWduZWQgYXJnSW5kZXgpCkBAIC0xNDIsOCArMTQzLDcgQEAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIENoZWNrU3BlY2lhbDo6Z2VuZXJhdAogICAgIFN0YWNrbWFwVmFsdWUq
IHZhbHVlID0gaW5zdC5vcmlnaW4tPmFzPFN0YWNrbWFwVmFsdWU+KCk7CiAgICAgQVNTRVJUKHZh
bHVlKTsKIAotICAgIFZlY3RvcjxWYWx1ZVJlcD4gcmVwczsKLSAgICBhcHBlbmRSZXBzSW1wbChj
b250ZXh0LCBtX251bUNoZWNrQXJncyArIDEsIGluc3QsIHJlcHMpOworICAgIFZlY3RvcjxWYWx1
ZVJlcD4gcmVwcyA9IHJlcHNJbXBsKGNvbnRleHQsIG51bUIzQXJncyhpbnN0KSwgbV9udW1DaGVj
a0FyZ3MgKyAxLCBpbnN0KTsKIAogICAgIC8vIFNldCBhc2lkZSB0aGUgYXJncyB0aGF0IGFyZSBy
ZWxldmFudCB0byB1bmRvaW5nIHRoZSBvcGVyYXRpb24uIFRoaXMgaXMgYmVjYXVzZSB3ZSBkb24n
dCB3YW50IHRvCiAgICAgLy8gY2FwdHVyZSBhbGwgb2YgaW5zdCBpbiB0aGUgY2xvc3VyZSBiZWxv
dy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCShyZXZp
c2lvbiAxOTQ1MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yMDA3LDYgKzIwMDcsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgZmlsbFN0YWNrbWFwKGluc3QsIHBhdGNocG9p
bnRWYWx1ZSwgMCk7CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHBhdGNocG9pbnRW
YWx1ZS0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzOyBpLS07KQorICAgICAgICAgICAgICAgIGluc3Qu
YXJncy5hcHBlbmQobV9jb2RlLm5ld1RtcChBcmc6OkdQKSk7CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBwYXRjaHBvaW50VmFsdWUtPm51bUZQU2NyYXRjaFJlZ2lzdGVyczsgaS0tOykK
KyAgICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKG1fY29kZS5uZXdUbXAoQXJnOjpGUCkp
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2luc3RzLmxhc3QoKS5hcHBlbmQoV1RGTW92
ZShpbnN0KSk7CiAgICAgICAgICAgICBtX2luc3RzLmxhc3QoKS5hcHBlbmRWZWN0b3IoYWZ0ZXIp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRTcGVj
aWFsLmNwcAkocmV2aXNpb24gMTk0NTE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UGF0Y2hwb2ludFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ2LDMyICs0Niw1NiBAQCBQYXRj
aHBvaW50U3BlY2lhbDo6flBhdGNocG9pbnRTcGVjaWFsKCkKIAogdm9pZCBQYXRjaHBvaW50U3Bl
Y2lhbDo6Zm9yRWFjaEFyZyhJbnN0JiBpbnN0LCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6RWFj
aEFyZ0NhbGxiYWNrPiYgY2FsbGJhY2spCiB7Ci0gICAgLy8gRklYTUU6IEFsbG93IEIzIFBhdGNo
cG9pbnRzIHRvIHNwZWNpZnkgTGF0ZVVzZS4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTUxMzM1Ci0gICAgCi0gICAgaWYgKGluc3Qub3JpZ2luLT50eXBl
KCkgPT0gVm9pZCkgewotICAgICAgICBmb3JFYWNoQXJnSW1wbCgwLCAxLCBpbnN0LCBTYW1lQXNS
ZXAsIGNhbGxiYWNrKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICB1bnNpZ25lZCBhcmdJ
bmRleCA9IDE7CisKKyAgICBpZiAoaW5zdC5vcmlnaW4tPnR5cGUoKSAhPSBWb2lkKQorICAgICAg
ICBjYWxsYmFjayhpbnN0LmFyZ3NbYXJnSW5kZXgrK10sIEFyZzo6RGVmLCBpbnN0Lm9yaWdpbi0+
YWlyVHlwZSgpLCBpbnN0Lm9yaWdpbi0+YWlyV2lkdGgoKSk7CisKKyAgICBmb3JFYWNoQXJnSW1w
bCgwLCBhcmdJbmRleCwgaW5zdCwgU2FtZUFzUmVwLCBjYWxsYmFjayk7CisgICAgYXJnSW5kZXgg
Kz0gaW5zdC5vcmlnaW4tPm51bUNoaWxkcmVuKCk7CiAKLSAgICBjYWxsYmFjayhpbnN0LmFyZ3Nb
MV0sIEFyZzo6RGVmLCBpbnN0Lm9yaWdpbi0+YWlyVHlwZSgpLCBpbnN0Lm9yaWdpbi0+YWlyV2lk
dGgoKSk7Ci0gICAgZm9yRWFjaEFyZ0ltcGwoMCwgMiwgaW5zdCwgU2FtZUFzUmVwLCBjYWxsYmFj
ayk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gaW5zdC5vcmlnaW4tPmFzPFBhdGNocG9pbnRWYWx1
ZT4oKS0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzOyBpLS07KQorICAgICAgICBjYWxsYmFjayhpbnN0
LmFyZ3NbYXJnSW5kZXgrK10sIEFyZzo6U2NyYXRjaCwgQXJnOjpHUCwgQXJnOjpjb25zZXJ2YXRp
dmVXaWR0aChBcmc6OkdQKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gaW5zdC5vcmlnaW4tPmFz
PFBhdGNocG9pbnRWYWx1ZT4oKS0+bnVtRlBTY3JhdGNoUmVnaXN0ZXJzOyBpLS07KQorICAgICAg
ICBjYWxsYmFjayhpbnN0LmFyZ3NbYXJnSW5kZXgrK10sIEFyZzo6U2NyYXRjaCwgQXJnOjpGUCwg
QXJnOjpjb25zZXJ2YXRpdmVXaWR0aChBcmc6OkZQKSk7CiB9CiAKIGJvb2wgUGF0Y2hwb2ludFNw
ZWNpYWw6OmlzVmFsaWQoSW5zdCYgaW5zdCkKIHsKLSAgICBpZiAoaW5zdC5vcmlnaW4tPnR5cGUo
KSA9PSBWb2lkKQotICAgICAgICByZXR1cm4gaXNWYWxpZEltcGwoMCwgMSwgaW5zdCk7Ci0KLSAg
ICBpZiAoaW5zdC5hcmdzLnNpemUoKSA8IDIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKICAgICBQ
YXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBpbnN0Lm9yaWdpbi0+YXM8UGF0Y2hwb2ludFZh
bHVlPigpOwotICAgIGlmICghaXNBcmdWYWxpZEZvclZhbHVlKGluc3QuYXJnc1sxXSwgcGF0Y2hw
b2ludCkpCisgICAgdW5zaWduZWQgYXJnSW5kZXggPSAxOworCisgICAgaWYgKGluc3Qub3JpZ2lu
LT50eXBlKCkgIT0gVm9pZCkgeworICAgICAgICBpZiAoYXJnSW5kZXggPj0gaW5zdC5hcmdzLnNp
emUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGlmICgh
aXNBcmdWYWxpZEZvclZhbHVlKGluc3QuYXJnc1thcmdJbmRleF0sIHBhdGNocG9pbnQpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWlzQXJnVmFsaWRGb3JSZXAoY29k
ZSgpLCBpbnN0LmFyZ3NbYXJnSW5kZXhdLCBwYXRjaHBvaW50LT5yZXN1bHRDb25zdHJhaW50KSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYXJnSW5kZXgrKzsKKyAgICB9CisK
KyAgICBpZiAoIWlzVmFsaWRJbXBsKDAsIGFyZ0luZGV4LCBpbnN0KSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmICghaXNBcmdWYWxpZEZvclJlcChjb2RlKCksIGluc3QuYXJnc1sxXSwg
cGF0Y2hwb2ludC0+cmVzdWx0Q29uc3RyYWludCkpCisgICAgYXJnSW5kZXggKz0gcGF0Y2hwb2lu
dC0+bnVtQ2hpbGRyZW4oKTsKKworICAgIGlmIChhcmdJbmRleCArIHBhdGNocG9pbnQtPm51bUdQ
U2NyYXRjaFJlZ2lzdGVycyArIHBhdGNocG9pbnQtPm51bUZQU2NyYXRjaFJlZ2lzdGVycworICAg
ICAgICAhPSBpbnN0LmFyZ3Muc2l6ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBy
ZXR1cm4gaXNWYWxpZEltcGwoMCwgMiwgaW5zdCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gcGF0
Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzOyBpLS07KSB7CisgICAgICAgIEFyZyBhcmcg
PSBpbnN0LmFyZ3NbYXJnSW5kZXgrK107CisgICAgICAgIGlmICghYXJnLmlzR1BUbXAoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZm9yICh1bnNpZ25lZCBpID0gcGF0
Y2hwb2ludC0+bnVtRlBTY3JhdGNoUmVnaXN0ZXJzOyBpLS07KSB7CisgICAgICAgIEFyZyBhcmcg
PSBpbnN0LmFyZ3NbYXJnSW5kZXgrK107CisgICAgICAgIGlmICghYXJnLmlzRlBUbXAoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAog
Ym9vbCBQYXRjaHBvaW50U3BlY2lhbDo6YWRtaXRzU3RhY2soSW5zdCYgaW5zdCwgdW5zaWduZWQg
YXJnSW5kZXgpCkBAIC05OSwxNiArMTIzLDI0IEBAIGJvb2wgUGF0Y2hwb2ludFNwZWNpYWw6OmFk
bWl0c1N0YWNrKEluc3QKIENDYWxsSGVscGVyczo6SnVtcCBQYXRjaHBvaW50U3BlY2lhbDo6Z2Vu
ZXJhdGUoCiAgICAgSW5zdCYgaW5zdCwgQ0NhbGxIZWxwZXJzJiBqaXQsIEdlbmVyYXRpb25Db250
ZXh0JiBjb250ZXh0KQogewotICAgIFN0YWNrbWFwVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW4t
PmFzPFN0YWNrbWFwVmFsdWU+KCk7CisgICAgUGF0Y2hwb2ludFZhbHVlKiB2YWx1ZSA9IGluc3Qu
b3JpZ2luLT5hczxQYXRjaHBvaW50VmFsdWU+KCk7CiAgICAgQVNTRVJUKHZhbHVlKTsKIAogICAg
IFZlY3RvcjxWYWx1ZVJlcD4gcmVwczsKICAgICB1bnNpZ25lZCBvZmZzZXQgPSAxOwogICAgIGlm
IChpbnN0Lm9yaWdpbi0+dHlwZSgpICE9IFZvaWQpCiAgICAgICAgIHJlcHMuYXBwZW5kKHJlcEZv
ckFyZygqY29udGV4dC5jb2RlLCBpbnN0LmFyZ3Nbb2Zmc2V0KytdKSk7Ci0gICAgYXBwZW5kUmVw
c0ltcGwoY29udGV4dCwgb2Zmc2V0LCBpbnN0LCByZXBzKTsKKyAgICByZXBzLmFwcGVuZFZlY3Rv
cihyZXBzSW1wbChjb250ZXh0LCAwLCBvZmZzZXQsIGluc3QpKTsKKyAgICBvZmZzZXQgKz0gdmFs
dWUtPm51bUNoaWxkcmVuKCk7CisKKyAgICBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMgcGFyYW1z
KHZhbHVlLCByZXBzLCBjb250ZXh0KTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IHZhbHVlLT5u
dW1HUFNjcmF0Y2hSZWdpc3RlcnM7IGktLTspCisgICAgICAgIHBhcmFtcy5tX2dwU2NyYXRjaC5h
cHBlbmQoaW5zdC5hcmdzW29mZnNldCsrXS5ncHIoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
dmFsdWUtPm51bUZQU2NyYXRjaFJlZ2lzdGVyczsgaS0tOykKKyAgICAgICAgcGFyYW1zLm1fZnBT
Y3JhdGNoLmFwcGVuZChpbnN0LmFyZ3Nbb2Zmc2V0KytdLmZwcigpKTsKICAgICAKLSAgICB2YWx1
ZS0+bV9nZW5lcmF0b3ItPnJ1bihqaXQsIFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyh2YWx1ZSwg
cmVwcywgY29udGV4dCkpOworICAgIHZhbHVlLT5tX2dlbmVyYXRvci0+cnVuKGppdCwgcGFyYW1z
KTsKIAogICAgIHJldHVybiBDQ2FsbEhlbHBlcnM6Okp1bXAoKTsKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmNwcAkocmV2aXNpb24gMTk0
NTE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zOCwxMiArMzgsMTggQEAgdm9pZCBQYXRjaHBvaW50VmFsdWU6OmR1bXBN
ZXRhKENvbW1hUHJpbgogewogICAgIEJhc2U6OmR1bXBNZXRhKGNvbW1hLCBvdXQpOwogICAgIG91
dC5wcmludChjb21tYSwgInJlc3VsdENvbnN0cmFpbnQgPSAiLCByZXN1bHRDb25zdHJhaW50KTsK
KyAgICBpZiAobnVtR1BTY3JhdGNoUmVnaXN0ZXJzKQorICAgICAgICBvdXQucHJpbnQoY29tbWEs
ICJudW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAiLCBudW1HUFNjcmF0Y2hSZWdpc3RlcnMpOworICAg
IGlmIChudW1GUFNjcmF0Y2hSZWdpc3RlcnMpCisgICAgICAgIG91dC5wcmludChjb21tYSwgIm51
bUZQU2NyYXRjaFJlZ2lzdGVycyA9ICIsIG51bUZQU2NyYXRjaFJlZ2lzdGVycyk7CiB9CiAKIFBh
dGNocG9pbnRWYWx1ZTo6UGF0Y2hwb2ludFZhbHVlKHVuc2lnbmVkIGluZGV4LCBUeXBlIHR5cGUs
IE9yaWdpbiBvcmlnaW4pCiAgICAgOiBCYXNlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBQYXRjaHBv
aW50LCB0eXBlLCBvcmlnaW4pCiAgICAgLCBlZmZlY3RzKEVmZmVjdHM6OmZvckNhbGwoKSkKICAg
ICAsIHJlc3VsdENvbnN0cmFpbnQodHlwZSA9PSBWb2lkID8gVmFsdWVSZXA6Oldhcm1BbnkgOiBW
YWx1ZVJlcDo6U29tZVJlZ2lzdGVyKQorICAgICwgbnVtR1BTY3JhdGNoUmVnaXN0ZXJzKDApCisg
ICAgLCBudW1GUFNjcmF0Y2hSZWdpc3RlcnMoMCkKIHsKIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmgJKHJldmlzaW9uIDE5NDUxNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTU2LDYgKzU2LDEyIEBAIHB1YmxpYzoKICAgICAvLyBpcyBWb2lkLiBPdGhlcndpc2UgeW91
IGNhbiBzZXQgdGhpcyB0byBhbnkgaW5wdXQgY29uc3RyYWludC4KICAgICBWYWx1ZVJlcCByZXN1
bHRDb25zdHJhaW50OwogCisgICAgLy8gVGhlIG51bWJlciBvZiBzY3JhdGNoIHJlZ2lzdGVycyB0
aGF0IHRoaXMgcGF0Y2hwb2ludCBnZXRzLiBUaGUgc2NyYXRjaCByZWdpc3RlciBpcyBndWFyYW50
ZWVkCisgICAgLy8gdG8gYmUgZGlmZmVyZW50IGZyb20gYW55IGlucHV0IHJlZ2lzdGVyIGFuZCB0
aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIuIEl0J3MgYWxzbyBndWFyYW50ZWVkIG5vdAorICAgIC8v
IHRvIGJlIGNsb2JiZXJlZCBlaXRoZXIgZWFybHkgb3IgbGF0ZS4gVGhlc2UgYXJlIDAgYnkgZGVm
YXVsdC4KKyAgICB1aW50OF90IG51bUdQU2NyYXRjaFJlZ2lzdGVyczsKKyAgICB1aW50OF90IG51
bUZQU2NyYXRjaFJlZ2lzdGVyczsKKwogcHJvdGVjdGVkOgogICAgIHZvaWQgZHVtcE1ldGEoQ29t
bWFQcmludGVyJiwgUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMuY3BwCShyZXZpc2lvbiAxOTQ1MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
dGFja21hcEdlbmVyYXRpb25QYXJhbXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCwx
MiBAQCBSZWdpc3RlclNldCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXM6OnVuCiAgICAgICAgIHVu
c2F2ZWRDYWxsZWVTYXZlcy5jbGVhcihyZWdBdE9mZnNldC5yZWcoKSk7CiAKICAgICByZXN1bHQu
bWVyZ2UodW5zYXZlZENhbGxlZVNhdmVzKTsKKworICAgIGZvciAoR1BSUmVnIGdwciA6IG1fZ3BT
Y3JhdGNoKQorICAgICAgICByZXN1bHQuY2xlYXIoZ3ByKTsKKyAgICBmb3IgKEZQUlJlZyBmcHIg
OiBtX2ZwU2NyYXRjaCkKKyAgICAgICAgcmVzdWx0LmNsZWFyKGZwcik7CisgICAgCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmgJKHJldmlzaW9uIDE5NDUxNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTU5LDEyICs1OSwyNyBAQCBwdWJsaWM6CiAgICAgLy8gVGhpcyB0ZWxscyB5b3Ug
dGhlIHJlZ2lzdGVycyB0aGF0IHdlcmUgdXNlZC4KICAgICBjb25zdCBSZWdpc3RlclNldCYgdXNl
ZFJlZ2lzdGVycygpIGNvbnN0OwogCi0gICAgLy8gVGhpcyBpcyBhIHVzZWZ1bCBoZWxwZXIgaWYg
eW91IHdhbnQgdG8gZG8gcmVnaXN0ZXIgYWxsb2NhdGlvbiBpbnNpZGUgb2YgYSBwYXRjaHBvaW50
LiBZb3UKLSAgICAvLyBjYW4gb25seSB1c2UgY2FsbGVlLXNhdmUgcmVnaXN0ZXJzIGlmIHRoZXkg
d2VyZSBzYXZlZCBpbiB0aGUgcHJvbG9ndWUuIFRoaXMgZ2l2ZXMgeW91IHRoZQotICAgIC8vIHVz
ZWQgcmVnaXN0ZXIgc2V0IHRoYXQncyB1c2VmdWwgZm9yIHN1Y2ggc2V0dGluZ3MgYnkgcmV0dXJu
aW5nOgorICAgIC8vIFRoaXMgaXMgYSB1c2VmdWwgaGVscGVyIGlmIHlvdSB3YW50IHRvIGRvIHJl
Z2lzdGVyIGFsbG9jYXRpb24gaW5zaWRlIG9mIGEgcGF0Y2hwb2ludC4gVGhlCisgICAgLy8gdXNl
ZFJlZ2lzdGVycygpIHNldCBpcyBub3QgZGlyZWN0bHkgdXNlZnVsIGZvciB0aGlzIHB1cnBvc2Ug
YmVjYXVzZToKICAgICAvLwotICAgIC8vICAgICB1c2VkUmVnaXN0ZXJzKCkgfCAoUmVnaXN0ZXJT
ZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSAtIHByb2MuY2FsbGVlU2F2ZVJlZ2lzdGVycygpKQot
ICAgIFJlZ2lzdGVyU2V0IHVuYXZhaWxhYmxlUmVnaXN0ZXJzKCkgY29uc3Q7CisgICAgLy8gLSBZ
b3UgY2FuIG9ubHkgdXNlIGNhbGxlZS1zYXZlIHJlZ2lzdGVycyBmb3Igc2NyYXRjaCBpZiB0aGV5
IHdlcmUgc2F2ZWQgaW4gdGhlIHByb2xvZ3VlLiBTbywKKyAgICAvLyAgIGlmIGEgcmVnaXN0ZXIg
aXMgY2FsbGVlLXNhdmUsIGl0J3Mgbm90IGVub3VnaCB0aGF0IGl0J3Mgbm90IGluIHVzZWRSZWdp
c3RlcnMoKS4KKyAgICAvLworICAgIC8vIC0gU2NyYXRjaCByZWdpc3RlcnMgYXJlIGdvaW5nIHRv
IGJlIGluIHVzZWRSZWdpc3RlcnMoKSBhdCB0aGUgcGF0Y2hwb2ludC4gU28sIGlmIHlvdSB3YW50
IHRvCisgICAgLy8gICBmaW5kIG9uZSBvZiB5b3VyIHJlcXVlc3RlZCBzY3JhdGNoIHJlZ2lzdGVy
cyB1c2luZyB1c2VkUmVnaXN0ZXJzKCksIHlvdSdsbCBoYXZlIGEgYmFkIHRpbWUuCisgICAgLy8K
KyAgICAvLyBUaGlzIGdpdmVzIHlvdSB0aGUgdXNlZCByZWdpc3RlciBzZXQgdGhhdCdzIHVzZWZ1
bCBmb3IgYWxsb2NhdGluZyBzY3JhdGNoIHJlZ2lzdGVycy4gVGhpcyBzZXQKKyAgICAvLyBpcyBk
ZWZpbmVkIGFzOgorICAgIC8vCisgICAgLy8gICAgICh1c2VkUmVnaXN0ZXJzKCkgfCAoUmVnaXN0
ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSAtIHByb2MuY2FsbGVlU2F2ZVJlZ2lzdGVycygp
KSkKKyAgICAvLyAgICAgLSBncFNjcmF0Y2hSZWdpc3RlcnMgLSBmcFNjcmF0Y2hSZWdpc3RlcnMK
KyAgICAvLworICAgIC8vIEkuZS4gaXQgaXMgbGlrZSB1c2VkUmVnaXN0ZXJzKCkgYnV0IGFsc28g
aW5jbHVkZXMgdW5zYXZlZCBjYWxsZWUtc2F2ZXMgYW5kIGV4Y2x1ZGVzIHNjcmF0Y2gKKyAgICAv
LyByZWdpc3RlcnMuCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUmVnaXN0ZXJTZXQgdW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSBjb25zdDsKKworICAgIEdQUlJlZyBncFNjcmF0Y2godW5zaWduZWQgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIG1fZ3BTY3JhdGNoW2luZGV4XTsgfQorICAgIEZQUlJlZyBmcFNj
cmF0Y2godW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fZnBTY3JhdGNoW2luZGV4XTsg
fQogCiAgICAgLy8gVGhpcyBpcyBwcm92aWRlZCBmb3IgY29udmVuaWVuY2U7IGl0IG1lYW5zIHRo
YXQgeW91IGRvbid0IGhhdmUgdG8gY2FwdHVyZSBpdCBpZiB5b3UgZG9uJ3Qgd2FudCB0by4KICAg
ICBQcm9jZWR1cmUmIHByb2MoKSBjb25zdDsKQEAgLTkwLDYgKzEwNSw4IEBAIHByaXZhdGU6CiAK
ICAgICBTdGFja21hcFZhbHVlKiBtX3ZhbHVlOwogICAgIFZlY3RvcjxWYWx1ZVJlcD4gbV9yZXBz
OworICAgIFZlY3RvcjxHUFJSZWc+IG1fZ3BTY3JhdGNoOworICAgIFZlY3RvcjxGUFJSZWc+IG1f
ZnBTY3JhdGNoOwogICAgIEFpcjo6R2VuZXJhdGlvbkNvbnRleHQmIG1fY29udGV4dDsKIH07CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNw
cAkocmV2aXNpb24gMTk0NTE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tt
YXBTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MSw5ICs4MSw5IEBAIHZvaWQgU3RhY2ttYXBT
cGVjaWFsOjpmb3JFYWNoQXJnSW1wbCgKICAgICAvLyBDaGVjayB0aGF0IGluc2FuZSB0aGluZ3Mg
aGF2ZSBub3QgaGFwcGVuZWQuCiAgICAgQVNTRVJUKGluc3QuYXJncy5zaXplKCkgPj0gbnVtSWdu
b3JlZEFpckFyZ3MpOwogICAgIEFTU0VSVCh2YWx1ZS0+Y2hpbGRyZW4oKS5zaXplKCkgPj0gbnVt
SWdub3JlZEIzQXJncyk7Ci0gICAgQVNTRVJUKGluc3QuYXJncy5zaXplKCkgLSBudW1JZ25vcmVk
QWlyQXJncyA9PSB2YWx1ZS0+Y2hpbGRyZW4oKS5zaXplKCkgLSBudW1JZ25vcmVkQjNBcmdzKTsK
KyAgICBBU1NFUlQoaW5zdC5hcmdzLnNpemUoKSAtIG51bUlnbm9yZWRBaXJBcmdzID49IHZhbHVl
LT5jaGlsZHJlbigpLnNpemUoKSAtIG51bUlnbm9yZWRCM0FyZ3MpOwogICAgIAotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3JlZEFpckFyZ3M7
ICsraSkgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZS0+Y2hpbGRyZW4oKS5z
aXplKCkgLSBudW1JZ25vcmVkQjNBcmdzOyArK2kpIHsKICAgICAgICAgQXJnJiBhcmcgPSBpbnN0
LmFyZ3NbaSArIG51bUlnbm9yZWRBaXJBcmdzXTsKICAgICAgICAgQ29uc3RyYWluZWRWYWx1ZSBj
aGlsZCA9IHZhbHVlLT5jb25zdHJhaW5lZENoaWxkKGkgKyBudW1JZ25vcmVkQjNBcmdzKTsKIApA
QCAtMTAzLDEyICsxMDMsMTIgQEAgdm9pZCBTdGFja21hcFNwZWNpYWw6OmZvckVhY2hBcmdJbXBs
KAogICAgICAgICAgICAgICAgIHJvbGUgPSBBcmc6OkNvbGRVc2U7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpMYXRlQ29sZEFueToKLSAgICAgICAg
ICAgICAgICByb2xlID0gQXJnOjpMYXRlVXNlOworICAgICAgICAgICAgICAgIHJvbGUgPSBBcmc6
OkxhdGVDb2xkVXNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRm9yY2VMYXRlVXNlOgotICAgICAgICAgICAg
cm9sZSA9IEFyZzo6TGF0ZVVzZTsKKyAgICAgICAgICAgIHJvbGUgPSBBcmc6OkxhdGVDb2xkVXNl
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMTI5LDEzICsxMjksMTMgQEAg
Ym9vbCBTdGFja21hcFNwZWNpYWw6OmlzVmFsaWRJbXBsKAogICAgIEFTU0VSVCh2YWx1ZS0+Y2hp
bGRyZW4oKS5zaXplKCkgPj0gbnVtSWdub3JlZEIzQXJncyk7CiAKICAgICAvLyBGb3IgdGhlIElu
c3QgdG8gYmUgdmFsaWQsIGl0IG5lZWRzIHRvIGhhdmUgdGhlIHJpZ2h0IG51bWJlciBvZiBhcmd1
bWVudHMuCi0gICAgaWYgKGluc3QuYXJncy5zaXplKCkgLSBudW1JZ25vcmVkQWlyQXJncyAhPSB2
YWx1ZS0+Y2hpbGRyZW4oKS5zaXplKCkgLSBudW1JZ25vcmVkQjNBcmdzKQorICAgIGlmIChpbnN0
LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3JlZEFpckFyZ3MgPCB2YWx1ZS0+Y2hpbGRyZW4oKS5zaXpl
KCkgLSBudW1JZ25vcmVkQjNBcmdzKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBS
ZWdhcmRsZXNzIG9mIGNvbnN0cmFpbnRzLCBzdGFja21hcHMgaGF2ZSBzb21lIGJhc2ljIHJlcXVp
cmVtZW50cyBmb3IgdGhlaXIgYXJndW1lbnRzLiBGb3IKICAgICAvLyBleGFtcGxlLCB5b3UgY2Fu
J3QgaGF2ZSBhIG5vbi1GUC1vZmZzZXQgYWRkcmVzcy4gVGhpcyB2ZXJpZmllcyB0aG9zZSBjb25k
aXRpb25zIGFzIHdlbGwgYXMgdGhlCiAgICAgLy8gYXJndW1lbnQgdHlwZXMuCi0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGluc3QuYXJncy5zaXplKCkgLSBudW1JZ25vcmVkQWlyQXJnczsg
KytpKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlLT5jaGlsZHJlbigpLnNp
emUoKSAtIG51bUlnbm9yZWRCM0FyZ3M7ICsraSkgewogICAgICAgICBWYWx1ZSogY2hpbGQgPSB2
YWx1ZS0+Y2hpbGQoaSArIG51bUlnbm9yZWRCM0FyZ3MpOwogICAgICAgICBBcmcmIGFyZyA9IGlu
c3QuYXJnc1tpICsgbnVtSWdub3JlZEFpckFyZ3NdOwogCkBAIC0xNjcsNiArMTY3LDExIEBAIGJv
b2wgU3RhY2ttYXBTcGVjaWFsOjphZG1pdHNTdGFja0ltcGwoCiAKICAgICB1bnNpZ25lZCBzdGFj
a21hcEFyZ0luZGV4ID0gYXJnSW5kZXggLSBudW1JZ25vcmVkQWlyQXJncyArIG51bUlnbm9yZWRC
M0FyZ3M7CiAKKyAgICBpZiAoc3RhY2ttYXBBcmdJbmRleCA+PSB2YWx1ZS0+bnVtQ2hpbGRyZW4o
KSkgeworICAgICAgICAvLyBJdCdzIG5vdCBhIHN0YWNrbWFwIGFyZ3VtZW50LCBzbyBhcyBmYXIg
YXMgd2UgYXJlIGNvbmNlcm5lZCwgaXQgZG9lc24ndCBhZG1pdCBzdGFjay4KKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKwogICAgIGlmIChzdGFja21hcEFyZ0luZGV4ID49IHZhbHVlLT5t
X3JlcHMuc2l6ZSgpKSB7CiAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGVyZSB3YXMgbm8g
Y29uc3RyYWludC4KICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xODAsMTEgKzE4NSwxMyBAQCBi
b29sIFN0YWNrbWFwU3BlY2lhbDo6YWRtaXRzU3RhY2tJbXBsKAogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotdm9pZCBTdGFja21hcFNwZWNpYWw6OmFwcGVuZFJlcHNJbXBsKAotICAgIEdlbmVyYXRp
b25Db250ZXh0JiBjb250ZXh0LCB1bnNpZ25lZCBudW1JZ25vcmVkQXJncywgSW5zdCYgaW5zdCwg
VmVjdG9yPFZhbHVlUmVwPiYgcmVzdWx0KQorVmVjdG9yPFZhbHVlUmVwPiBTdGFja21hcFNwZWNp
YWw6OnJlcHNJbXBsKAorICAgIEdlbmVyYXRpb25Db250ZXh0JiBjb250ZXh0LCB1bnNpZ25lZCBu
dW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQWlyQXJncywgSW5zdCYgaW5zdCkK
IHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1JZ25vcmVkQXJnczsgaSA8IGluc3QuYXJncy5z
aXplKCk7ICsraSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZChyZXBGb3JBcmcoKmNvbnRleHQuY29k
ZSwgaW5zdC5hcmdzW2ldKSk7CisgICAgVmVjdG9yPFZhbHVlUmVwPiByZXN1bHQ7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGluc3Qub3JpZ2luLT5udW1DaGlsZHJlbigpIC0gbnVtSWdu
b3JlZEIzQXJnczsgKytpKQorICAgICAgICByZXN1bHQuYXBwZW5kKHJlcEZvckFyZygqY29udGV4
dC5jb2RlLCBpbnN0LmFyZ3NbaSArIG51bUlnbm9yZWRBaXJBcmdzXSkpOworICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKIGJvb2wgU3RhY2ttYXBTcGVjaWFsOjppc0FyZ1ZhbGlkRm9yVmFsdWUoY29u
c3QgQWlyOjpBcmcmIGFyZywgVmFsdWUqIHZhbHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgJKHJldmlzaW9uIDE5NDUxNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY5
LDcgKzY5LDggQEAgcHJvdGVjdGVkOgogICAgICAgICBBaXI6Okluc3QmLCB1bnNpZ25lZCBhcmdJ
bmRleCk7CiAKICAgICAvLyBBcHBlbmRzIHRoZSByZXBzIGZvciB0aGUgSW5zdCdzIGFyZ3MsIHN0
YXJ0aW5nIHdpdGggbnVtSWdub3JlZEFyZ3MsIHRvIHRoZSBnaXZlbiB2ZWN0b3IuCi0gICAgdm9p
ZCBhcHBlbmRSZXBzSW1wbChBaXI6OkdlbmVyYXRpb25Db250ZXh0JiwgdW5zaWduZWQgbnVtSWdu
b3JlZEFyZ3MsIEFpcjo6SW5zdCYsIFZlY3RvcjxWYWx1ZVJlcD4mKTsKKyAgICBWZWN0b3I8VmFs
dWVSZXA+IHJlcHNJbXBsKAorICAgICAgICBBaXI6OkdlbmVyYXRpb25Db250ZXh0JiwgdW5zaWdu
ZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3MsIEFpcjo6SW5z
dCYpOwogCiAgICAgc3RhdGljIGJvb2wgaXNBcmdWYWxpZEZvclZhbHVlKGNvbnN0IEFpcjo6QXJn
JiwgVmFsdWUqKTsKICAgICBzdGF0aWMgYm9vbCBpc0FyZ1ZhbGlkRm9yUmVwKEFpcjo6Q29kZSYs
IGNvbnN0IEFpcjo6QXJnJiwgY29uc3QgVmFsdWVSZXAmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy90ZXN0YjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy90ZXN0YjMuY3BwCShyZXZpc2lvbiAxOTQ1MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvdGVzdGIzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02MTU3LDYgKzYxNTcsNzIgQEAgdm9pZCB0
ZXN0UGF0Y2hwb2ludEFueShWYWx1ZVJlcCByZXApCiAgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxp
bnQ+KHByb2MsIDEsIDIpID09IDMpOwogfQogCit2b2lkIHRlc3RQYXRjaHBvaW50R1BTY3JhdGNo
KCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5h
ZGRCbG9jaygpOworICAgIFZhbHVlKiBhcmcxID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVn
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIFZhbHVl
KiBhcmcyID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2lu
dCA9IHJvb3QtPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KHByb2MsIEludDMyLCBPcmlnaW4o
KSk7CisgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFyZzEsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIp
OworICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcyLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsK
KyAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAyOworICAgIHBhdGNocG9p
bnQtPnNldEdlbmVyYXRvcigKKyAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3Qg
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIEFsbG93TWFj
cm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgIC8v
IFdlIHNob3VsZG4ndCBoYXZlIHNwaWxsZWQgdGhlIGlucHV0cywgc28gd2UgYXNzZXJ0IHRoYXQg
dGhleSdyZSBpbiByZWdpc3RlcnMuCisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09
IDMpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzBdLmlzR1BSKCkpOworICAgICAgICAgICAg
Q0hFQ0socGFyYW1zWzFdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzJdLmlz
R1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLmdwU2NyYXRjaCgwKSAhPSBJbnZhbGlk
R1BSUmVnKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5ncFNjcmF0Y2goMCkgIT0gcGFyYW1z
WzBdLmdwcigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5ncFNjcmF0Y2goMCkgIT0gcGFy
YW1zWzFdLmdwcigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5ncFNjcmF0Y2goMCkgIT0g
cGFyYW1zWzJdLmdwcigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5ncFNjcmF0Y2goMSkg
IT0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuZ3BTY3JhdGNoKDEp
ICE9IHBhcmFtcy5ncFNjcmF0Y2goMCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLmdwU2Ny
YXRjaCgxKSAhPSBwYXJhbXNbMF0uZ3ByKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLmdw
U2NyYXRjaCgxKSAhPSBwYXJhbXNbMV0uZ3ByKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1z
LmdwU2NyYXRjaCgxKSAhPSBwYXJhbXNbMl0uZ3ByKCkpOworICAgICAgICAgICAgQ0hFQ0soIXBh
cmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLmdldChwYXJhbXMuZ3BTY3JhdGNoKDApKSk7Cisg
ICAgICAgICAgICBDSEVDSyghcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCkuZ2V0KHBhcmFt
cy5ncFNjcmF0Y2goMSkpKTsKKyAgICAgICAgICAgIGFkZDMyKGppdCwgcGFyYW1zWzFdLmdwcigp
LCBwYXJhbXNbMl0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7CisgICAgICAgIH0pOworICAgIHJv
b3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIHBhdGNo
cG9pbnQpOworCisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MsIDEsIDIpID09IDMp
OworfQorCit2b2lkIHRlc3RQYXRjaHBvaW50RlBTY3JhdGNoKCkKK3sKKyAgICBQcm9jZWR1cmUg
cHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVl
KiBhcmcxID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIFZhbHVlKiBhcmcyID0gcm9vdC0+YXBwZW5k
TmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjEpOworICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IHJvb3QtPmFwcGVuZE5ldzxQ
YXRjaHBvaW50VmFsdWU+KHByb2MsIEludDMyLCBPcmlnaW4oKSk7CisgICAgcGF0Y2hwb2ludC0+
YXBwZW5kKGFyZzEsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgIHBhdGNocG9pbnQtPmFw
cGVuZChhcmcyLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICBwYXRjaHBvaW50LT5udW1G
UFNjcmF0Y2hSZWdpc3RlcnMgPSAyOworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKKyAg
ICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2Fn
ZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgIC8vIFdlIHNob3VsZG4ndCBoYXZlIHNw
aWxsZWQgdGhlIGlucHV0cywgc28gd2UgYXNzZXJ0IHRoYXQgdGhleSdyZSBpbiByZWdpc3RlcnMu
CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09IDMpOworICAgICAgICAgICAgQ0hF
Q0socGFyYW1zWzBdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzFdLmlzR1BS
KCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzJdLmlzR1BSKCkpOworICAgICAgICAgICAg
Q0hFQ0socGFyYW1zLmZwU2NyYXRjaCgwKSAhPSBJbnZhbGlkRlBSUmVnKTsKKyAgICAgICAgICAg
IENIRUNLKHBhcmFtcy5mcFNjcmF0Y2goMSkgIT0gSW52YWxpZEZQUlJlZyk7CisgICAgICAgICAg
ICBDSEVDSyhwYXJhbXMuZnBTY3JhdGNoKDEpICE9IHBhcmFtcy5mcFNjcmF0Y2goMCkpOworICAg
ICAgICAgICAgQ0hFQ0soIXBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLmdldChwYXJhbXMu
ZnBTY3JhdGNoKDApKSk7CisgICAgICAgICAgICBDSEVDSyghcGFyYW1zLnVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCkuZ2V0KHBhcmFtcy5mcFNjcmF0Y2goMSkpKTsKKyAgICAgICAgICAgIGFkZDMyKGpp
dCwgcGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMl0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7Cisg
ICAgICAgIH0pOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KHByb2MsIFJldHVy
biwgT3JpZ2luKCksIHBhdGNocG9pbnQpOworCisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ+
KHByb2MsIDEsIDIpID09IDMpOworfQorCiB2b2lkIHRlc3RQYXRjaHBvaW50TG90c09mTGF0ZUFu
eXMoKQogewogICAgIFByb2NlZHVyZSBwcm9jOwpAQCAtOTU5OCw2ICs5NjY0LDggQEAgdm9pZCBy
dW4oY29uc3QgY2hhciogZmlsdGVyKQogICAgIFJVTih0ZXN0UGF0Y2hwb2ludEZpeGVkUmVnaXN0
ZXIoKSk7CiAgICAgUlVOKHRlc3RQYXRjaHBvaW50QW55KFZhbHVlUmVwOjpXYXJtQW55KSk7CiAg
ICAgUlVOKHRlc3RQYXRjaHBvaW50QW55KFZhbHVlUmVwOjpDb2xkQW55KSk7CisgICAgUlVOKHRl
c3RQYXRjaHBvaW50R1BTY3JhdGNoKCkpOworICAgIFJVTih0ZXN0UGF0Y2hwb2ludEZQU2NyYXRj
aCgpKTsKICAgICBSVU4odGVzdFBhdGNocG9pbnRMb3RzT2ZMYXRlQW55cygpKTsKICAgICBSVU4o
dGVzdFBhdGNocG9pbnRBbnlJbW0oVmFsdWVSZXA6Oldhcm1BbnkpKTsKICAgICBSVU4odGVzdFBh
dGNocG9pbnRBbnlJbW0oVmFsdWVSZXA6OkNvbGRBbnkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAkocmV2aXNpb24gMTk0
NTE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xNDMsMTQgKzE0MywxMyBAQCB2b2lkIGFsbG9jYXRlU3RhY2soQ29k
ZSYgY29kZSkKICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewogICAgICAgICBT
dGFja1Nsb3RMaXZlbmVzczo6TG9jYWxDYWxjIGxvY2FsQ2FsYyhsaXZlbmVzcywgYmxvY2spOwog
Ci0gICAgICAgIGF1dG8gaW50ZXJmZXJlID0gWyZdIChJbnN0JiBpbnN0KSB7CisgICAgICAgIGF1
dG8gaW50ZXJmZXJlID0gWyZdICh1bnNpZ25lZCBpbnN0SW5kZXgpIHsKICAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIkludGVyZmVyaW5nOiAiLCBXVEY6
OnBvaW50ZXJMaXN0RHVtcChsb2NhbENhbGMubGl2ZSgpKSwgIlxuIik7CiAKLSAgICAgICAgICAg
IGluc3QuZm9yRWFjaEFyZygKLSAgICAgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJv
bGUgcm9sZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICghQXJnOjppc0RlZihyb2xlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIEluc3Q6OmZvckVhY2hEZWY8QXJnPigKKyAgICAgICAgICAgICAgICBibG9jay0+
Z2V0KGluc3RJbmRleCksIGJsb2NrLT5nZXQoaW5zdEluZGV4ICsgMSksCisgICAgICAgICAgICAg
ICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlLCBBcmc6OlR5cGUsIEFyZzo6V2lkdGgpIHsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFhcmcuaXNTdGFjaygpKQogICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHNsb3QgPSBhcmcu
c3RhY2tTbG90KCk7CkBAIC0xNjcsMTIgKzE2NiwxMCBAQCB2b2lkIGFsbG9jYXRlU3RhY2soQ29k
ZSYgY29kZSkKICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgp
OyBpbnN0SW5kZXgtLTspIHsKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAg
ICAgIGRhdGFMb2coIkFuYWx5emluZzogIiwgYmxvY2stPmF0KGluc3RJbmRleCksICJcbiIpOwot
ICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOwotICAgICAgICAg
ICAgaW50ZXJmZXJlKGluc3QpOworICAgICAgICAgICAgaW50ZXJmZXJlKGluc3RJbmRleCk7CiAg
ICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZShpbnN0SW5kZXgpOwogICAgICAgICB9Ci0gICAg
ICAgIEluc3Qgbm9wOwotICAgICAgICBpbnRlcmZlcmUobm9wKTsKKyAgICAgICAgaW50ZXJmZXJl
KC0xKTsKICAgICB9CiAKICAgICBpZiAodmVyYm9zZSkgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkocmV2aXNpb24gMTk0NTE3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE5Myw2ICsxOTMsMTUg
QEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEFyZwogICAgIGNhc2UgQXJn
OjpMYXRlVXNlOgogICAgICAgICBvdXQucHJpbnQoIkxhdGVVc2UiKTsKICAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgQXJnOjpMYXRlQ29sZFVzZToKKyAgICAgICAgb3V0LnByaW50KCJMYXRlQ29s
ZFVzZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcmc6OkVhcmx5RGVmOgorICAgICAg
ICBvdXQucHJpbnQoIkVhcmx5RGVmIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFyZzo6
U2NyYXRjaDoKKyAgICAgICAgb3V0LnByaW50KCJTY3JhdGNoIik7CisgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCShyZXZpc2lvbiAxOTQ1MTcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkyLDEwICs5Miwx
NCBAQCBwdWJsaWM6CiAgICAgICAgIENvbGRVc2UsCiAKICAgICAgICAgLy8gTGF0ZVVzZSBtZWFu
cyB0aGF0IHRoZSBJbnN0IHdpbGwgcmVhZCBmcm9tIHRoaXMgdmFsdWUgYWZ0ZXIgZG9pbmcgaXRz
IERlZidzLiBOb3RlIHRoYXQgTGF0ZVVzZQotICAgICAgICAvLyBvbiBhbiBBZGRyIG9yIEluZGV4
IHN0aWxsIG1lYW5zIFVzZSBvbiB0aGUgaW50ZXJuYWwgdGVtcG9yYXJpZXMuIExhdGVVc2UgYWxz
byBjdXJyZW50bHkgYWxzbwotICAgICAgICAvLyBpbXBsaWVzIENvbGRVc2UuCisgICAgICAgIC8v
IG9uIGFuIEFkZHIgb3IgSW5kZXggc3RpbGwgbWVhbnMgVXNlIG9uIHRoZSBpbnRlcm5hbCB0ZW1w
b3Jhcmllcy4gTm90ZSB0aGF0IHNwZWNpZnlpbmcgdGhlCisgICAgICAgIC8vIHNhbWUgVG1wIG9u
Y2UgYXMgRGVmIGFuZCBvbmNlIGFzIExhdGVVc2UgaGFzIHVuZGVmaW5lZCBiZWhhdmlvcjogdGhl
IHVzZSBtYXkgaGFwcGVuIGJlZm9yZQorICAgICAgICAvLyB0aGUgZGVmLCBvciBpdCBtYXkgaGFw
cGVuIGFmdGVyIGl0LgogICAgICAgICBMYXRlVXNlLAogCisgICAgICAgIC8vIENvbWJpbmF0aW9u
IG9mIExhdGVVc2UgYW5kIENvbGRVc2UuCisgICAgICAgIExhdGVDb2xkVXNlLAorCiAgICAgICAg
IC8vIERlZiBtZWFucyB0aGF0IHRoZSBJbnN0IHdpbGwgd3JpdGUgdG8gdGhpcyB2YWx1ZSBhZnRl
ciBkb2luZyBldmVyeXRoaW5nIGVsc2UuCiAgICAgICAgIC8vCiAgICAgICAgIC8vIEZvciBUbXA6
IFRoZSBJbnN0IHdpbGwgd3JpdGUgdG8gdGhpcyBUbXAuCkBAIC0xMjcsNiArMTMxLDE2IEBAIHB1
YmxpYzoKICAgICAgICAgLy8gVGhpcyBpcyBhIGNvbWJpbmVkIFVzZSBhbmQgWkRlZi4gSXQgbWVh
bnMgdGhhdCBib3RoIHRoaW5ncyBoYXBwZW4uCiAgICAgICAgIFVzZVpEZWYsCiAKKyAgICAgICAg
Ly8gVGhpcyBpcyBsaWtlIERlZiwgYnV0IGltcGxpZXMgdGhhdCB0aGUgYXNzaWdubWVudCBvY2N1
cnMgYmVmb3JlIHRoZSBzdGFydCBvZiB0aGUgSW5zdCdzCisgICAgICAgIC8vIGV4ZWN1dGlvbiBy
YXRoZXIgdGhhbiBhZnRlci4gTm90ZSB0aGF0IHNwZWNpZnlpbmcgdGhlIHNhbWUgVG1wIG9uY2Ug
YXMgRWFybHlEZWYgYW5kIG9uY2UKKyAgICAgICAgLy8gYXMgVXNlIGhhcyB1bmRlZmluZWQgYmVo
YXZpb3I6IHRoZSB1c2UgbWF5IGhhcHBlbiBiZWZvcmUgdGhlIGRlZiwgb3IgaXQgbWF5IGhhcHBl
biBhZnRlcgorICAgICAgICAvLyBpdC4KKyAgICAgICAgRWFybHlEZWYsCisKKyAgICAgICAgLy8g
U29tZSBpbnN0cnVjdGlvbnMgbmVlZCBhIHNjcmF0Y2ggcmVnaXN0ZXIuIFdlIG1vZGVsIHRoaXMg
Ynkgc2F5aW5nIHRoYXQgdGhlIHRlbXBvcmFyeSBpcworICAgICAgICAvLyBkZWZpbmVkIGVhcmx5
IGFuZCB1c2VkIGxhdGUuIFRoaXMgcm9sZSBpbXBsaWVzIHRoYXQuCisgICAgICAgIFNjcmF0Y2gs
CisKICAgICAgICAgLy8gVGhpcyBpcyBhIHNwZWNpYWwga2luZCBvZiB1c2UgdGhhdCBpcyBvbmx5
IHZhbGlkIGZvciBhZGRyZXNzZXMuIEl0IG1lYW5zIHRoYXQgdGhlCiAgICAgICAgIC8vIGluc3Ry
dWN0aW9uIHdpbGwgZXZhbHVhdGUgdGhlIGFkZHJlc3MgZXhwcmVzc2lvbiBhbmQgY29uc3VtZSB0
aGUgZWZmZWN0aXZlIGFkZHJlc3MsIGJ1dCBpdAogICAgICAgICAvLyB3aWxsIG5laXRoZXIgbG9h
ZCBub3Igc3RvcmUuIFRoaXMgaXMgYW4gZXNjYXBpbmcgdXNlLCBiZWNhdXNlIG5vdyB0aGUgYWRk
cmVzcyBtYXkgYmUKQEAgLTE3MSwxMCArMTg1LDEzIEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBV
c2VEZWY6CiAgICAgICAgIGNhc2UgVXNlWkRlZjoKICAgICAgICAgY2FzZSBMYXRlVXNlOgorICAg
ICAgICBjYXNlIExhdGVDb2xkVXNlOgorICAgICAgICBjYXNlIFNjcmF0Y2g6CiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgY2FzZSBEZWY6CiAgICAgICAgIGNhc2UgWkRlZjoKICAg
ICAgICAgY2FzZSBVc2VBZGRyOgorICAgICAgICBjYXNlIEVhcmx5RGVmOgogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQpAQCAtMTgzLDE0ICsyMDAsMTcgQEAgcHVi
bGljOgogICAgIHsKICAgICAgICAgc3dpdGNoIChyb2xlKSB7CiAgICAgICAgIGNhc2UgQ29sZFVz
ZToKLSAgICAgICAgY2FzZSBMYXRlVXNlOgorICAgICAgICBjYXNlIExhdGVDb2xkVXNlOgogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGNhc2UgVXNlOgogICAgICAgICBjYXNlIFVz
ZURlZjoKICAgICAgICAgY2FzZSBVc2VaRGVmOgorICAgICAgICBjYXNlIExhdGVVc2U6CiAgICAg
ICAgIGNhc2UgRGVmOgogICAgICAgICBjYXNlIFpEZWY6CiAgICAgICAgIGNhc2UgVXNlQWRkcjoK
KyAgICAgICAgY2FzZSBTY3JhdGNoOgorICAgICAgICBjYXNlIEVhcmx5RGVmOgogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQpAQCAtMjEzLDYgKzIzMyw5IEBAIHB1
YmxpYzoKICAgICAgICAgY2FzZSBaRGVmOgogICAgICAgICBjYXNlIFVzZUFkZHI6CiAgICAgICAg
IGNhc2UgTGF0ZVVzZToKKyAgICAgICAgY2FzZSBMYXRlQ29sZFVzZToKKyAgICAgICAgY2FzZSBT
Y3JhdGNoOgorICAgICAgICBjYXNlIEVhcmx5RGVmOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9CiAgICAgfQpAQCAtMjIwLDE3ICsyNDMsNzQgQEAgcHVibGljOgogICAgIC8v
IFJldHVybnMgdHJ1ZSBpZiB0aGUgUm9sZSBpbXBsaWVzIHRoYXQgdGhlIEluc3Qgd2lsbCBVc2Ug
dGhlIEFyZyBhZnRlciBkb2luZyBldmVyeXRoaW5nIGVsc2UuCiAgICAgc3RhdGljIGJvb2wgaXNM
YXRlVXNlKFJvbGUgcm9sZSkKICAgICB7Ci0gICAgICAgIHJldHVybiByb2xlID09IExhdGVVc2U7
CisgICAgICAgIHN3aXRjaCAocm9sZSkgeworICAgICAgICBjYXNlIExhdGVVc2U6CisgICAgICAg
IGNhc2UgTGF0ZUNvbGRVc2U6CisgICAgICAgIGNhc2UgU2NyYXRjaDoKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBjYXNlIENvbGRVc2U6CisgICAgICAgIGNhc2UgVXNlOgorICAg
ICAgICBjYXNlIFVzZURlZjoKKyAgICAgICAgY2FzZSBVc2VaRGVmOgorICAgICAgICBjYXNlIERl
ZjoKKyAgICAgICAgY2FzZSBaRGVmOgorICAgICAgICBjYXNlIFVzZUFkZHI6CisgICAgICAgIGNh
c2UgRWFybHlEZWY6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAgICB9
CiAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIFJvbGUgaW1wbGllcyB0aGF0IHRoZSBJbnN0
IHdpbGwgRGVmIHRoZSBBcmcuCi0gICAgc3RhdGljIGJvb2wgaXNEZWYoUm9sZSByb2xlKQorICAg
IHN0YXRpYyBib29sIGlzQW55RGVmKFJvbGUgcm9sZSkKICAgICB7CiAgICAgICAgIHN3aXRjaCAo
cm9sZSkgewogICAgICAgICBjYXNlIFVzZToKICAgICAgICAgY2FzZSBDb2xkVXNlOgogICAgICAg
ICBjYXNlIFVzZUFkZHI6CiAgICAgICAgIGNhc2UgTGF0ZVVzZToKKyAgICAgICAgY2FzZSBMYXRl
Q29sZFVzZToKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBEZWY6Cisg
ICAgICAgIGNhc2UgVXNlRGVmOgorICAgICAgICBjYXNlIFpEZWY6CisgICAgICAgIGNhc2UgVXNl
WkRlZjoKKyAgICAgICAgY2FzZSBFYXJseURlZjoKKyAgICAgICAgY2FzZSBTY3JhdGNoOgorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBSZXR1cm5z
IHRydWUgaWYgdGhlIFJvbGUgaW1wbGllcyB0aGF0IHRoZSBJbnN0IHdpbGwgRGVmIHRoZSBBcmcg
YmVmb3JlIHN0YXJ0IG9mIGV4ZWN1dGlvbi4KKyAgICBzdGF0aWMgYm9vbCBpc0Vhcmx5RGVmKFJv
bGUgcm9sZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAocm9sZSkgeworICAgICAgICBjYXNlIFVz
ZToKKyAgICAgICAgY2FzZSBDb2xkVXNlOgorICAgICAgICBjYXNlIFVzZUFkZHI6CisgICAgICAg
IGNhc2UgTGF0ZVVzZToKKyAgICAgICAgY2FzZSBEZWY6CisgICAgICAgIGNhc2UgVXNlRGVmOgor
ICAgICAgICBjYXNlIFpEZWY6CisgICAgICAgIGNhc2UgVXNlWkRlZjoKKyAgICAgICAgY2FzZSBM
YXRlQ29sZFVzZToKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBFYXJs
eURlZjoKKyAgICAgICAgY2FzZSBTY3JhdGNoOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIFJvbGUgaW1wbGll
cyB0aGF0IHRoZSBJbnN0IHdpbGwgRGVmIHRoZSBBcmcgYWZ0ZXIgdGhlIGVuZCBvZiBleGVjdXRp
b24uCisgICAgc3RhdGljIGJvb2wgaXNMYXRlRGVmKFJvbGUgcm9sZSkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAocm9sZSkgeworICAgICAgICBjYXNlIFVzZToKKyAgICAgICAgY2FzZSBDb2xkVXNl
OgorICAgICAgICBjYXNlIFVzZUFkZHI6CisgICAgICAgIGNhc2UgTGF0ZVVzZToKKyAgICAgICAg
Y2FzZSBFYXJseURlZjoKKyAgICAgICAgY2FzZSBTY3JhdGNoOgorICAgICAgICBjYXNlIExhdGVD
b2xkVXNlOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjYXNlIERlZjoKICAg
ICAgICAgY2FzZSBVc2VEZWY6CkBAIC0yNTAsNiArMzMwLDkgQEAgcHVibGljOgogICAgICAgICBj
YXNlIExhdGVVc2U6CiAgICAgICAgIGNhc2UgRGVmOgogICAgICAgICBjYXNlIFVzZURlZjoKKyAg
ICAgICAgY2FzZSBFYXJseURlZjoKKyAgICAgICAgY2FzZSBTY3JhdGNoOgorICAgICAgICBjYXNl
IExhdGVDb2xkVXNlOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjYXNlIFpE
ZWY6CiAgICAgICAgIGNhc2UgVXNlWkRlZjoKQEAgLTMzMSw2ICs0MTQsMTEgQEAgcHVibGljOgog
ICAgIHsKICAgICB9CiAKKyAgICBBcmcoUmVnIHJlZykKKyAgICAgICAgOiBBcmcoQWlyOjpUbXAo
cmVnKSkKKyAgICB7CisgICAgfQorCiAgICAgc3RhdGljIEFyZyBpbW0oaW50NjRfdCB2YWx1ZSkK
ICAgICB7CiAgICAgICAgIEFyZyByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckJhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAkocmV2aXNpb24gMTk0NTE3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsNiAr
NjQsMTEgQEAgcHVibGljOgogICAgIGNvbnN0IEluc3QmIGF0KHVuc2lnbmVkIGluZGV4KSBjb25z
dCB7IHJldHVybiBtX2luc3RzW2luZGV4XTsgfQogICAgIEluc3QmIGF0KHVuc2lnbmVkIGluZGV4
KSB7IHJldHVybiBtX2luc3RzW2luZGV4XTsgfQogCisgICAgSW5zdCogZ2V0KHVuc2lnbmVkIGlu
ZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGluZGV4IDwgc2l6ZSgpID8gJmF0KGluZGV4KSA6
IG51bGxwdHI7CisgICAgfQorCiAgICAgY29uc3QgSW5zdCYgbGFzdCgpIGNvbnN0IHsgcmV0dXJu
IG1faW5zdHMubGFzdCgpOyB9CiAgICAgSW5zdCYgbGFzdCgpIHsgcmV0dXJuIG1faW5zdHMubGFz
dCgpOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRWxpbWluYXRl
RGVhZENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyRWxpbWluYXRlRGVhZENvZGUuY3BwCShyZXZpc2lvbiAxOTQ1MTcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckVsaW1pbmF0ZURlYWRDb2RlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC04MSw3ICs4MSw5IEBAIGJvb2wgZWxpbWluYXRlRGVhZENvZGUoQ29kZSYgY29kZSkKICAgICAg
ICAgYm9vbCBzdG9yZXNUb0xpdmUgPSBmYWxzZTsKICAgICAgICAgaW5zdC5mb3JFYWNoQXJnKAog
ICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSwgQXJn
OjpXaWR0aCkgewotICAgICAgICAgICAgICAgIGlmICghQXJnOjppc0RlZihyb2xlKSkKKyAgICAg
ICAgICAgICAgICBpZiAoIUFyZzo6aXNBbnlEZWYocm9sZSkpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgICBpZiAocm9sZSA9PSBBcmc6OlNjcmF0Y2gpCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICBzdG9yZXNUb0xpdmUgfD0g
aXNBcmdMaXZlKGFyZyk7CiAgICAgICAgICAgICB9KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeFBhcnRpYWxSZWdpc3RlclN0YWxs
cy5jcHAJKHJldmlzaW9uIDE5NDUxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTYsNyArMTE2
LDcgQEAgdm9pZCB1cGRhdGVEaXN0YW5jZXMoSW5zdCYgaW5zdCwgRlBEZWZEaQogICAgIGluc3Qu
Zm9yRWFjaFRtcChbJl0gKFRtcCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlLCBBcmc6
OldpZHRoKSB7CiAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UodG1wLmlzUmVnKCksICJUaGlz
IHBoYXNlIG11c3QgYmUgcnVuIGFmdGVyIHJlZ2lzdGVyIGFsbG9jYXRpb24uIik7CiAKLSAgICAg
ICAgaWYgKHRtcC5pc0ZQUigpICYmIEFyZzo6aXNEZWYocm9sZSkpCisgICAgICAgIGlmICh0bXAu
aXNGUFIoKSAmJiBBcmc6OmlzQW55RGVmKHJvbGUpKQogICAgICAgICAgICAgbG9jYWxEaXN0YW5j
ZS5hZGQodG1wLmZwcigpLCBkaXN0YW5jZVRvQmxvY2tFbmQpOwogICAgIH0pOwogfQpAQCAtMjA1
LDcgKzIwNSw3IEBAIHZvaWQgZml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzKENvZGUmIGNvZGUKICAg
ICAgICAgICAgICAgICBSZWdpc3RlclNldCB1c2VzOwogICAgICAgICAgICAgICAgIGluc3QuZm9y
RWFjaFRtcChbJl0gKFRtcCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlLCBBcmc6Oldp
ZHRoKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAuaXNGUFIoKSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNEZWYocm9sZSkpCisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoQXJnOjppc0FueURlZihyb2xlKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWZzLnNldCh0bXAuZnByKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6
aXNBbnlVc2Uocm9sZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcy5zZXQodG1w
LmZwcigpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNwcAko
cmV2aXNpb24gMTk0NTE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zOSw3ICszOSw3IEBAIGJvb2wgSW5zdDo6aGFzQXJnRWZmZWN0
cygpCiAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKICAgICBmb3JFYWNoQXJnKAogICAgICAgICBb
Jl0gKEFyZyYsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUsIEFyZzo6V2lkdGgpIHsKLSAgICAg
ICAgICAgIGlmIChBcmc6OmlzRGVmKHJvbGUpKQorICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlE
ZWYocm9sZSkpCiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKICAgICAgICAgfSk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
SW5zdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5z
dC5oCShyZXZpc2lvbiAxOTQ1MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckluc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjcsMTAgKzEyNywxOCBAQCBwdWJsaWM6CiAgICAgY29u
c3QgUmVnaXN0ZXJTZXQmIGV4dHJhQ2xvYmJlcmVkUmVncygpOwogICAgIGNvbnN0IFJlZ2lzdGVy
U2V0JiBleHRyYUVhcmx5Q2xvYmJlcmVkUmVncygpOwogCi0gICAgLy8gSXRlcmF0ZSBvdmVyIHRo
ZSBEZWZzIGFuZCB0aGUgZXh0cmEgY2xvYmJlcmVkIHJlZ2lzdGVycy4gWW91IG11c3Qgc3VwcGx5
IHRoZSBuZXh0IGluc3RydWN0aW9uIGlmCi0gICAgLy8gdGhlcmUgaXMgb25lLgotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgdm9pZCBmb3JFYWNoVG1wV2l0aEV4dHJhQ2xvYmJl
cmVkUmVncyhJbnN0KiBuZXh0SW5zdCwgY29uc3QgRnVuY3RvciYgZnVuY3Rvcik7CisgICAgLy8g
SXRlcmF0ZSBvdmVyIGFsbCBEZWYncyB0aGF0IGhhcHBlbiBhdCB0aGUgZW5kIG9mIGFuIGluc3Ry
dWN0aW9uLiBZb3Ugc3VwcGx5IGEgcGFpcgorICAgIC8vIGluc3RydWN0aW9ucy4gVGhlIGluc3Ry
dWN0aW9ucyBtdXN0IGFwcGVhciBuZXh0IHRvIGVhY2ggb3RoZXIsIGluIHRoYXQgb3JkZXIsIGlu
IHNvbWUgYmFzaWMKKyAgICAvLyBibG9jay4gWW91IGNhbiBwYXNzIG51bGwgZm9yIHRoZSBmaXJz
dCBpbnN0cnVjdGlvbiB3aGVuIGFuYWx5emluZyB3aGF0IGhhcHBlbnMgYXQgdGhlIHRvcCBvZgor
ICAgIC8vIGEgYmFzaWMgYmxvY2suIFlvdSBjYW4gcGFzcyBudWxsIGZvciB0aGUgc2Vjb25kIGlu
c3RydWN0aW9uIHdoZW4gYW5hbHl6aW5nIHdoYXQgaGFwcGVucyBhdCB0aGUKKyAgICAvLyBib3R0
b20gb2YgYSBiYXNpYyBibG9jay4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUaGluZywgdHlwZW5h
bWUgRnVuY3Rvcj4KKyAgICBzdGF0aWMgdm9pZCBmb3JFYWNoRGVmKEluc3QqIHByZXZJbnN0LCBJ
bnN0KiBuZXh0SW5zdCwgY29uc3QgRnVuY3RvciYpOworCisgICAgLy8gSXRlcmF0ZSBvdmVyIGFs
bCBEZWYncyB0aGF0IGhhcHBlbiBhdCB0aGUgZW5kIG9mIHRoaXMgaW5zdHJ1Y3Rpb24sIGluY2x1
ZGluZyBleHRyYSBjbG9iYmVyZWQKKyAgICAvLyByZWdpc3RlcnMuCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVGhpbmcsIHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgc3RhdGljIHZvaWQgZm9yRWFjaERl
ZldpdGhFeHRyYUNsb2JiZXJlZFJlZ3MoSW5zdCogcHJldkluc3QsIEluc3QqIG5leHRJbnN0LCBj
b25zdCBGdW5jdG9yJik7CiAKICAgICAvLyBVc2UgdGhpcyB0byByZXBvcnQgd2hpY2ggcmVnaXN0
ZXJzIGFyZSBsaXZlLiBUaGlzIHNob3VsZCBiZSBkb25lIGp1c3QgYmVmb3JlIGNvZGVnZW4uIE5v
dGUKICAgICAvLyB0aGF0IGZvciBlZmZpY2llbmN5LCByZXBvcnRVc2VkUmVnaXN0ZXJzKCkgb25s
eSB3b3JrcyBpZiBoYXNTcGVjaWFsKCkgcmV0dXJucyB0cnVlLgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMuaAkocmV2aXNpb24gMTk0NTE3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTk1LDI0ICs5NSw0OCBAQCBpbmxpbmUgY29uc3QgUmVnaXN0ZXJTZXQmIEluc3Q6OmV4
dHJhRWFyCiAgICAgcmV0dXJuIGFyZ3NbMF0uc3BlY2lhbCgpLT5leHRyYUVhcmx5Q2xvYmJlcmVk
UmVncygqdGhpcyk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci1pbmxpbmUgdm9p
ZCBJbnN0Ojpmb3JFYWNoVG1wV2l0aEV4dHJhQ2xvYmJlcmVkUmVncyhJbnN0KiBuZXh0SW5zdCwg
Y29uc3QgRnVuY3RvciYgZnVuY3RvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFRoaW5nLCB0eXBlbmFt
ZSBGdW5jdG9yPgoraW5saW5lIHZvaWQgSW5zdDo6Zm9yRWFjaERlZihJbnN0KiBwcmV2SW5zdCwg
SW5zdCogbmV4dEluc3QsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCit7CisgICAgaWYgKHByZXZJ
bnN0KSB7CisgICAgICAgIHByZXZJbnN0LT5mb3JFYWNoPFRoaW5nPigKKyAgICAgICAgICAgIFsm
XSAoVGhpbmcmIHRoaW5nLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIGFyZ1R5cGUsIEFyZzo6
V2lkdGggYXJnV2lkdGgpIHsKKyAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0xhdGVEZWYocm9s
ZSkpCisgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IodGhpbmcsIHJvbGUsIGFyZ1R5cGUsIGFy
Z1dpZHRoKTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKworICAgIGlmIChuZXh0SW5zdCkgewor
ICAgICAgICBuZXh0SW5zdC0+Zm9yRWFjaDxUaGluZz4oCisgICAgICAgICAgICBbJl0gKFRoaW5n
JiB0aGluZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSBhcmdUeXBlLCBBcmc6OldpZHRoIGFy
Z1dpZHRoKSB7CisgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNFYXJseURlZihyb2xlKSkKKyAg
ICAgICAgICAgICAgICAgICAgZnVuY3Rvcih0aGluZywgcm9sZSwgYXJnVHlwZSwgYXJnV2lkdGgp
OworICAgICAgICAgICAgfSk7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUaGluZywg
dHlwZW5hbWUgRnVuY3Rvcj4KK2lubGluZSB2b2lkIEluc3Q6OmZvckVhY2hEZWZXaXRoRXh0cmFD
bG9iYmVyZWRSZWdzKAorICAgIEluc3QqIHByZXZJbnN0LCBJbnN0KiBuZXh0SW5zdCwgY29uc3Qg
RnVuY3RvciYgZnVuY3RvcikKIHsKLSAgICBmb3JFYWNoVG1wKAotICAgICAgICBbJl0gKFRtcCYg
dG1wQXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIGFyZ1R5cGUsIEFyZzo6V2lkdGggYXJn
V2lkdGgpIHsKLSAgICAgICAgICAgIGZ1bmN0b3IodG1wQXJnLCByb2xlLCBhcmdUeXBlLCBhcmdX
aWR0aCk7Ci0gICAgICAgIH0pOworICAgIGZvckVhY2hEZWY8VGhpbmc+KHByZXZJbnN0LCBuZXh0
SW5zdCwgZnVuY3Rvcik7CiAKKyAgICBBcmc6OlJvbGUgcmVnRGVmUm9sZTsKKyAgICAKICAgICBh
dXRvIHJlcG9ydFJlZyA9IFsmXSAoUmVnIHJlZykgewogICAgICAgICBBcmc6OlR5cGUgdHlwZSA9
IHJlZy5pc0dQUigpID8gQXJnOjpHUCA6IEFyZzo6RlA7Ci0gICAgICAgIGZ1bmN0b3IoVG1wKHJl
ZyksIEFyZzo6RGVmLCB0eXBlLCBBcmc6OmNvbnNlcnZhdGl2ZVdpZHRoKHR5cGUpKTsKKyAgICAg
ICAgZnVuY3RvcihUaGluZyhyZWcpLCByZWdEZWZSb2xlLCB0eXBlLCBBcmc6OmNvbnNlcnZhdGl2
ZVdpZHRoKHR5cGUpKTsKICAgICB9OwogCi0gICAgaWYgKGhhc1NwZWNpYWwoKSkKLSAgICAgICAg
ZXh0cmFDbG9iYmVyZWRSZWdzKCkuZm9yRWFjaChyZXBvcnRSZWcpOworICAgIGlmIChwcmV2SW5z
dCAmJiBwcmV2SW5zdC0+aGFzU3BlY2lhbCgpKSB7CisgICAgICAgIHJlZ0RlZlJvbGUgPSBBcmc6
OkRlZjsKKyAgICAgICAgcHJldkluc3QtPmV4dHJhQ2xvYmJlcmVkUmVncygpLmZvckVhY2gocmVw
b3J0UmVnKTsKKyAgICB9CiAKLSAgICBpZiAobmV4dEluc3QgJiYgbmV4dEluc3QtPmhhc1NwZWNp
YWwoKSkKKyAgICBpZiAobmV4dEluc3QgJiYgbmV4dEluc3QtPmhhc1NwZWNpYWwoKSkgeworICAg
ICAgICByZWdEZWZSb2xlID0gQXJnOjpFYXJseURlZjsKICAgICAgICAgbmV4dEluc3QtPmV4dHJh
RWFybHlDbG9iYmVyZWRSZWdzKCkuZm9yRWFjaChyZXBvcnRSZWcpOworICAgIH0KIH0KIAogaW5s
aW5lIHZvaWQgSW5zdDo6cmVwb3J0VXNlZFJlZ2lzdGVycyhjb25zdCBSZWdpc3RlclNldCYgdXNl
ZFJlZ2lzdGVycykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySXRlcmF0
ZWRSZWdpc3RlckNvYWxlc2NpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuY3BwCShyZXZpc2lvbiAx
OTQ1MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0
ZXJDb2FsZXNjaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcwLDQwICs3NzAsNDMgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIHR5cGVuYW1lIFRtcExpdmVuZXNzPHR5cGU+OjpMb2NhbENhbGMg
bG9jYWxDYWxjKGxpdmVuZXNzLCBibG9jayk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
c3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykgewogICAgICAgICAgICAgICAg
IEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKLSAgICAgICAgICAgICAgICBJbnN0
KiBuZXh0SW5zdCA9IGluc3RJbmRleCArIDEgPCBibG9jay0+c2l6ZSgpID8gJmJsb2NrLT5hdChp
bnN0SW5kZXggKyAxKSA6IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgYnVpbGQoaW5zdCwgbmV4
dEluc3QsIGxvY2FsQ2FsYyk7CisgICAgICAgICAgICAgICAgSW5zdCogbmV4dEluc3QgPSBibG9j
ay0+Z2V0KGluc3RJbmRleCArIDEpOworICAgICAgICAgICAgICAgIGJ1aWxkKCZpbnN0LCBuZXh0
SW5zdCwgbG9jYWxDYWxjKTsKICAgICAgICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZShpbnN0
SW5kZXgpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgYnVpbGQobnVsbHB0ciwgJmJsb2Nr
LT5hdCgwKSwgbG9jYWxDYWxjKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHZvaWQgYnVpbGQo
SW5zdCYgaW5zdCwgSW5zdCogbmV4dEluc3QsIGNvbnN0IHR5cGVuYW1lIFRtcExpdmVuZXNzPHR5
cGU+OjpMb2NhbENhbGMmIGxvY2FsQ2FsYykKKyAgICB2b2lkIGJ1aWxkKEluc3QqIHByZXZJbnN0
LCBJbnN0KiBuZXh0SW5zdCwgY29uc3QgdHlwZW5hbWUgVG1wTGl2ZW5lc3M8dHlwZT46OkxvY2Fs
Q2FsYyYgbG9jYWxDYWxjKQogICAgIHsKLSAgICAgICAgaW5zdC5mb3JFYWNoVG1wV2l0aEV4dHJh
Q2xvYmJlcmVkUmVncygKLSAgICAgICAgICAgIG5leHRJbnN0LAotICAgICAgICAgICAgWyZdIChj
b25zdCBUbXAmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSBhcmdUeXBlLCBBcmc6Oldp
ZHRoKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFBcmc6OmlzRGVmKHJvbGUpIHx8IGFyZ1R5cGUg
IT0gdHlwZSkKKyAgICAgICAgSW5zdDo6Zm9yRWFjaERlZldpdGhFeHRyYUNsb2JiZXJlZFJlZ3M8
VG1wPigKKyAgICAgICAgICAgIHByZXZJbnN0LCBuZXh0SW5zdCwKKyAgICAgICAgICAgIFsmXSAo
Y29uc3QgVG1wJiBhcmcsIEFyZzo6Um9sZSwgQXJnOjpUeXBlIGFyZ1R5cGUsIEFyZzo6V2lkdGgp
IHsKKyAgICAgICAgICAgICAgICBpZiAoYXJnVHlwZSAhPSB0eXBlKQogICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gQWxsIHRo
ZSBEZWYoKXMgaW50ZXJmZXJlIHdpdGggZWFjaCBvdGhlciBhbmQgd2l0aCBhbGwgdGhlIGV4dHJh
IGNsb2JiZXJlZCBUbXBzLgogICAgICAgICAgICAgICAgIC8vIFdlIHNob3VsZCBub3QgdXNlIGZv
ckVhY2hEZWZBbmRFeHRyYUNsb2JiZXJlZFRtcCgpIGhlcmUgc2luY2UgY29sb3JlZCBUbXBzCiAg
ICAgICAgICAgICAgICAgLy8gZG8gbm90IG5lZWQgaW50ZXJmZXJlbmNlIGVkZ2VzIGluIG91ciBp
bXBsZW1lbnRhdGlvbi4KLSAgICAgICAgICAgICAgICBpbnN0LmZvckVhY2hUbXAoWyZdIChUbXAm
IG90aGVyQXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIGFyZ1R5cGUsIEFyZzo6V2lkdGgp
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFBcmc6OmlzRGVmKHJvbGUpIHx8IGFyZ1R5cGUg
IT0gdHlwZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAg
ICAgICAgICBhZGRFZGdlKGFyZywgb3RoZXJBcmcpOwotICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgICAgIEluc3Q6OmZvckVhY2hEZWY8VG1wPigKKyAgICAgICAgICAgICAgICAgICAg
cHJldkluc3QsIG5leHRJbnN0LAorICAgICAgICAgICAgICAgICAgICBbJl0gKFRtcCYgb3RoZXJB
cmcsIEFyZzo6Um9sZSwgQXJnOjpUeXBlIGFyZ1R5cGUsIEFyZzo6V2lkdGgpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChhcmdUeXBlICE9IHR5cGUpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgICAgICBhZGRFZGdlKGFyZywgb3RoZXJBcmcpOworICAgICAgICAgICAgICAgICAgICB9
KTsKICAgICAgICAgICAgIH0pOwogCi0gICAgICAgIGlmIChtYXlCZUNvYWxlc2NhYmxlKGluc3Qp
KSB7CisgICAgICAgIGlmIChwcmV2SW5zdCAmJiBtYXlCZUNvYWxlc2NhYmxlKCpwcmV2SW5zdCkp
IHsKICAgICAgICAgICAgIC8vIFdlIGRvIG5vdCB3YW50IHRoZSBVc2UoKSBvZiB0aGlzIG1vdmUg
dG8gaW50ZXJmZXJlIHdpdGggdGhlIERlZigpLCBldmVuIGlmIGl0IGlzIGxpdmUKICAgICAgICAg
ICAgIC8vIGFmdGVyIHRoZSBNb3ZlLiBJZiB3ZSB3ZXJlIHRvIGFkZCB0aGUgaW50ZXJmZXJlbmNl
IGVkZ2UsIGl0IHdvdWxkIGJlIGltcG9zc2libGUgdG8KICAgICAgICAgICAgIC8vIGNvYWxlc2Nl
IHRoZSBNb3ZlIGV2ZW4gaWYgdGhlIHR3byBUbXAgbmV2ZXIgaW50ZXJmZXJlIGFueXdoZXJlLgog
ICAgICAgICAgICAgVG1wIGRlZlRtcDsKICAgICAgICAgICAgIFRtcCB1c2VUbXA7Ci0gICAgICAg
ICAgICBpbnN0LmZvckVhY2hUbXAoWyZkZWZUbXAsICZ1c2VUbXBdIChUbXAmIGFyZ1RtcCwgQXJn
OjpSb2xlIHJvbGUsIEFyZzo6VHlwZSwgQXJnOjpXaWR0aCkgewotICAgICAgICAgICAgICAgIGlm
IChBcmc6OmlzRGVmKHJvbGUpKQorICAgICAgICAgICAgcHJldkluc3QtPmZvckVhY2hUbXAoWyZk
ZWZUbXAsICZ1c2VUbXBdIChUbXAmIGFyZ1RtcCwgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSwg
QXJnOjpXaWR0aCkgeworICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzTGF0ZURlZihyb2xlKSkK
ICAgICAgICAgICAgICAgICAgICAgZGVmVG1wID0gYXJnVG1wOwogICAgICAgICAgICAgICAgIGVs
c2UgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoQXJnOjppc0Vhcmx5VXNlKHJvbGUpKTsK
QEAgLTgyMiw3ICs4MjUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgQVNTRVJUKG5leHRNb3Zl
SW5kZXggPD0gbV9hY3RpdmVNb3Zlcy5zaXplKCkpOwogICAgICAgICAgICAgbV9hY3RpdmVNb3Zl
cy5lbnN1cmVTaXplKG5leHRNb3ZlSW5kZXggKyAxKTsKIAotICAgICAgICAgICAgZm9yIChjb25z
dCBBcmcmIGFyZyA6IGluc3QuYXJncykgeworICAgICAgICAgICAgZm9yIChjb25zdCBBcmcmIGFy
ZyA6IHByZXZJbnN0LT5hcmdzKSB7CiAgICAgICAgICAgICAgICAgYXV0byYgbGlzdCA9IG1fbW92
ZUxpc3RbQWJzb2x1dGVUbXBNYXBwZXI8dHlwZT46OmFic29sdXRlSW5kZXgoYXJnLnRtcCgpKV07
CiAgICAgICAgICAgICAgICAgbGlzdC5hZGQobmV4dE1vdmVJbmRleCk7CiAgICAgICAgICAgICB9
CkBAIC04MzIsMjYgKzgzNSwyMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBhZGRF
ZGdlKGRlZlRtcCwgbGl2ZVRtcCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIFRo
ZSBuZXh0IGluc3RydWN0aW9uIGNvdWxkIGhhdmUgZWFybHkgY2xvYmJlcnMuIFdlIG5lZWQgdG8g
Y29uc2lkZXIgdGhvc2Ugbm93LgotICAgICAgICAgICAgaWYgKG5leHRJbnN0ICYmIG5leHRJbnN0
LT5oYXNTcGVjaWFsKCkpIHsKLSAgICAgICAgICAgICAgICBuZXh0SW5zdC0+ZXh0cmFFYXJseUNs
b2JiZXJlZFJlZ3MoKS5mb3JFYWNoKFsmXSAoUmVnIHJlZykgewotICAgICAgICAgICAgICAgICAg
ICBpZiAocmVnLmlzR1BSKCkgPT0gKHR5cGUgPT0gQXJnOjpHUCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAoY29uc3QgVG1wJiBsaXZlVG1wIDogbG9jYWxDYWxjLmxpdmUoKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFZGdlKFRtcChyZWcpLCBsaXZlVG1wKTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfQor
ICAgICAgICAgICAgLy8gVGhlIG5leHQgaW5zdHJ1Y3Rpb24gY291bGQgaGF2ZSBlYXJseSBjbG9i
YmVycyBvciBlYXJseSBkZWYncy4gV2UgbmVlZCB0byBjb25zaWRlcgorICAgICAgICAgICAgLy8g
dGhvc2Ugbm93LgorICAgICAgICAgICAgYWRkRWRnZXMobnVsbHB0ciwgbmV4dEluc3QsIGxvY2Fs
Q2FsYy5saXZlKCkpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGFkZEVkZ2VzKGluc3Qs
IG5leHRJbnN0LCBsb2NhbENhbGMubGl2ZSgpKTsKKyAgICAgICAgICAgIGFkZEVkZ2VzKHByZXZJ
bnN0LCBuZXh0SW5zdCwgbG9jYWxDYWxjLmxpdmUoKSk7CiAgICAgfQogCi0gICAgdm9pZCBhZGRF
ZGdlcyhJbnN0JiBpbnN0LCBJbnN0KiBuZXh0SW5zdCwgdHlwZW5hbWUgVG1wTGl2ZW5lc3M8dHlw
ZT46OkxvY2FsQ2FsYzo6SXRlcmFibGUgbGl2ZVRtcHMpCisgICAgdm9pZCBhZGRFZGdlcyhJbnN0
KiBwcmV2SW5zdCwgSW5zdCogbmV4dEluc3QsIHR5cGVuYW1lIFRtcExpdmVuZXNzPHR5cGU+OjpM
b2NhbENhbGM6Okl0ZXJhYmxlIGxpdmVUbXBzKQogICAgIHsKICAgICAgICAgLy8gQWxsIHRoZSBE
ZWYoKXMgaW50ZXJmZXJlIHdpdGggZXZlcnRoaW5nIGxpdmUuCi0gICAgICAgIGluc3QuZm9yRWFj
aFRtcFdpdGhFeHRyYUNsb2JiZXJlZFJlZ3MoCi0gICAgICAgICAgICBuZXh0SW5zdCwKLSAgICAg
ICAgICAgIFsmXSAoY29uc3QgVG1wJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgYXJn
VHlwZSwgQXJnOjpXaWR0aCkgewotICAgICAgICAgICAgICAgIGlmICghQXJnOjppc0RlZihyb2xl
KSB8fCBhcmdUeXBlICE9IHR5cGUpCisgICAgICAgIEluc3Q6OmZvckVhY2hEZWZXaXRoRXh0cmFD
bG9iYmVyZWRSZWdzPFRtcD4oCisgICAgICAgICAgICBwcmV2SW5zdCwgbmV4dEluc3QsCisgICAg
ICAgICAgICBbJl0gKGNvbnN0IFRtcCYgYXJnLCBBcmc6OlJvbGUsIEFyZzo6VHlwZSBhcmdUeXBl
LCBBcmc6OldpZHRoKSB7CisgICAgICAgICAgICAgICAgaWYgKGFyZ1R5cGUgIT0gdHlwZSkKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIGZvciAoY29uc3QgVG1wJiBsaXZlVG1wIDogbGl2ZVRtcHMpIHsKQEAgLTEyNDIsMTYgKzEy
MzksMTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlVc2Uo
cm9sZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFRtcCBuZXdUbXAgPSBtX2NvZGUubmV3
VG1wKHR5cGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydChp
bnN0SW5kZXgsIG1vdmUsIGluc3Qub3JpZ2luLCBhcmcsIG5ld1RtcCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB0bXAgPSBuZXdUbXA7CisgICAgICAgICAgICAgICAgICAgIHRtcCA9IG1fY29k
ZS5uZXdUbXAodHlwZSk7CisgICAgICAgICAgICAgICAgICAgIHVuc3BpbGxhYmxlVG1wcy5hZGQo
QWJzb2x1dGVUbXBNYXBwZXI8dHlwZT46OmFic29sdXRlSW5kZXgodG1wKSk7CiAKLSAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIEFueSBuZXcgRmlsbCgpIHNob3VsZCBuZXZlciBiZSBzcGlsbGVk
LgotICAgICAgICAgICAgICAgICAgICAgICAgdW5zcGlsbGFibGVUbXBzLmFkZChBYnNvbHV0ZVRt
cE1hcHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleCh0bXApKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHJvbGUgIT0gQXJnOjpTY3JhdGNoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
QXJnOjppc0FueVVzZShyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRp
b25TZXQuaW5zZXJ0KGluc3RJbmRleCwgbW92ZSwgaW5zdC5vcmlnaW4sIGFyZywgdG1wKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55RGVmKHJvbGUpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoaW5zdEluZGV4ICsgMSwgbW92
ZSwgaW5zdC5vcmlnaW4sIHRtcCwgYXJnKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBpZiAoQXJnOjppc0RlZihyb2xlKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGluc2VydGlvblNldC5pbnNlcnQoaW5zdEluZGV4ICsgMSwgbW92ZSwgaW5zdC5vcmlnaW4s
IHRtcCwgYXJnKTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGluc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgJKHJldmlzaW9uIDE5NDUxNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTgsNiAr
MTE4LDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpbnN0SW5kZXgg
PSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspCiAgICAgICAgICAgICAgICAgICAgIGxvY2Fs
Q2FsYy5leGVjdXRlKGluc3RJbmRleCk7CiAKKyAgICAgICAgICAgICAgICAvLyBIYW5kbGUgdGhl
IGVhcmx5IGRlZidzIG9mIHRoZSBmaXJzdCBpbnN0cnVjdGlvbi4KKyAgICAgICAgICAgICAgICBi
bG9jay0+YXQoMCkuZm9yRWFjaDx0eXBlbmFtZSBBZGFwdGVyOjpUaGluZz4oCisgICAgICAgICAg
ICAgICAgICAgIFsmXSAodHlwZW5hbWUgQWRhcHRlcjo6VGhpbmcmIHRoaW5nLCBBcmc6OlJvbGUg
cm9sZSwgQXJnOjpUeXBlIHR5cGUsIEFyZzo6V2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChBcmc6OmlzRWFybHlEZWYocm9sZSkgJiYgQWRhcHRlcjo6YWNjZXB0c1R5cGUodHlw
ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV93b3Jrc2V0LnJlbW92ZShBZGFwdGVy
Ojp2YWx1ZVRvSW5kZXgodGhpbmcpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisKICAgICAg
ICAgICAgICAgICBWZWN0b3I8dW5zaWduZWQ+JiBsaXZlQXRIZWFkID0gbV9saXZlQXRIZWFkW2Js
b2NrXTsKIAogICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgY2FyZSBhYm91dCBUbXBzIHRoYXQg
d2VyZSBkaXNjb3ZlcmVkIGluIHRoaXMgaXRlcmF0aW9uLiBJdCBpcyBpbXBvc3NpYmxlCkBAIC0y
MTMsMTAgKzIyMCwyMSBAQCBwdWJsaWM6CiAgICAgICAgIHsKICAgICAgICAgICAgIEluc3QmIGlu
c3QgPSBtX2Jsb2NrLT5hdChpbnN0SW5kZXgpOwogICAgICAgICAgICAgYXV0byYgd29ya3NldCA9
IG1fbGl2ZW5lc3MubV93b3Jrc2V0OworCisgICAgICAgICAgICAvLyBGaXJzdCBoYW5kbGUgdGhl
IGVhcmx5IGRlZidzIG9mIHRoZSBuZXh0IGluc3RydWN0aW9uLgorICAgICAgICAgICAgaWYgKGlu
c3RJbmRleCArIDEgPCBtX2Jsb2NrLT5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICBJbnN0JiBu
ZXh0SW5zdCA9IG1fYmxvY2stPmF0KGluc3RJbmRleCArIDEpOworICAgICAgICAgICAgICAgIG5l
eHRJbnN0LmZvckVhY2g8dHlwZW5hbWUgQWRhcHRlcjo6VGhpbmc+KAorICAgICAgICAgICAgICAg
ICAgICBbJl0gKHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nJiB0aGluZywgQXJnOjpSb2xlIHJvbGUs
IEFyZzo6VHlwZSB0eXBlLCBBcmc6OldpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoQXJnOjppc0Vhcmx5RGVmKHJvbGUpICYmIEFkYXB0ZXI6OmFjY2VwdHNUeXBlKHR5cGUpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtzZXQucmVtb3ZlKEFkYXB0ZXI6OnZhbHVl
VG9JbmRleCh0aGluZykpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gRmlyc3QgaGFuZGxlIGRlZidzLgogICAgICAg
ICAgICAgaW5zdC5mb3JFYWNoPHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nPigKICAgICAgICAgICAg
ICAgICBbJl0gKHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nJiB0aGluZywgQXJnOjpSb2xlIHJvbGUs
IEFyZzo6VHlwZSB0eXBlLCBBcmc6OldpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChB
cmc6OmlzRGVmKHJvbGUpICYmIEFkYXB0ZXI6OmFjY2VwdHNUeXBlKHR5cGUpKQorICAgICAgICAg
ICAgICAgICAgICBpZiAoQXJnOjppc0xhdGVEZWYocm9sZSkgJiYgQWRhcHRlcjo6YWNjZXB0c1R5
cGUodHlwZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICB3b3Jrc2V0LnJlbW92ZShBZGFwdGVy
Ojp2YWx1ZVRvSW5kZXgodGhpbmcpKTsKICAgICAgICAgICAgICAgICB9KTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNw
cAkocmV2aXNpb24gMTk0NTE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJT
cGlsbEV2ZXJ5dGhpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDcgKzUzLDcgQEAgdm9pZCBzcGls
bEV2ZXJ5dGhpbmcoQ29kZSYgY29kZSkKIAogICAgICAgICB1c2VkUmVnaXN0ZXJzW2Jsb2NrXS5y
ZXNpemUoYmxvY2stPnNpemUoKSArIDEpOwogCi0gICAgICAgIGF1dG8gc2V0VXNlZFJlZ2lzdGVy
cyA9IFsmXSAodW5zaWduZWQgaW5kZXgsIEluc3QmIGluc3QpIHsKKyAgICAgICAgYXV0byBzZXRV
c2VkUmVnaXN0ZXJzID0gWyZdICh1bnNpZ25lZCBpbmRleCkgewogICAgICAgICAgICAgUmVnaXN0
ZXJTZXQmIHJlZ2lzdGVyU2V0ID0gdXNlZFJlZ2lzdGVyc1tibG9ja11baW5kZXhdOwogICAgICAg
ICAgICAgZm9yIChUbXAgdG1wIDogZ3BMb2NhbENhbGMubGl2ZSgpKSB7CiAgICAgICAgICAgICAg
ICAgaWYgKHRtcC5pc1JlZygpKQpAQCAtNjYsMjMgKzY2LDIwIEBAIHZvaWQgc3BpbGxFdmVyeXRo
aW5nKENvZGUmIGNvZGUpCiAKICAgICAgICAgICAgIC8vIEdvdHRhIGFjY291bnQgZm9yIGRlYWQg
YXNzaWdubWVudHMgdG8gcmVnaXN0ZXJzLiBUaGVzZSBtYXkgaGFwcGVuIGJlY2F1c2UgdGhlIGlu
cHV0CiAgICAgICAgICAgICAvLyBjb2RlIGlzIHN1Ym9wdGltYWwuCi0gICAgICAgICAgICBpbnN0
LmZvckVhY2hUbXBXaXRoRXh0cmFDbG9iYmVyZWRSZWdzKAotICAgICAgICAgICAgICAgIGluZGV4
IDwgYmxvY2stPnNpemUoKSA/ICZibG9jay0+YXQoaW5kZXgpIDogbnVsbHB0ciwKLSAgICAgICAg
ICAgICAgICBbJnJlZ2lzdGVyU2V0XSAoY29uc3QgVG1wJiB0bXAsIEFyZzo6Um9sZSByb2xlLCBB
cmc6OlR5cGUsIEFyZzo6V2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRtcC5pc1Jl
ZygpICYmIEFyZzo6aXNEZWYocm9sZSkpCisgICAgICAgICAgICBJbnN0Ojpmb3JFYWNoRGVmV2l0
aEV4dHJhQ2xvYmJlcmVkUmVnczxUbXA+KAorICAgICAgICAgICAgICAgIGJsb2NrLT5nZXQoaW5k
ZXggLSAxKSwgYmxvY2stPmdldChpbmRleCksCisgICAgICAgICAgICAgICAgWyZdIChjb25zdCBU
bXAmIHRtcCwgQXJnOjpSb2xlLCBBcmc6OlR5cGUsIEFyZzo6V2lkdGgpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHRtcC5pc1JlZygpKQogICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0
ZXJTZXQuc2V0KHRtcC5yZWcoKSk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgIH07CiAK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5k
ZXgtLTspIHsKLSAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsK
LSAgICAgICAgICAgIHNldFVzZWRSZWdpc3RlcnMoaW5zdEluZGV4ICsgMSwgaW5zdCk7CisgICAg
ICAgICAgICBzZXRVc2VkUmVnaXN0ZXJzKGluc3RJbmRleCArIDEpOwogICAgICAgICAgICAgZ3BM
b2NhbENhbGMuZXhlY3V0ZShpbnN0SW5kZXgpOwogICAgICAgICAgICAgZnBMb2NhbENhbGMuZXhl
Y3V0ZShpbnN0SW5kZXgpOwogICAgICAgICB9Ci0KLSAgICAgICAgSW5zdCBub3A7Ci0gICAgICAg
IHNldFVzZWRSZWdpc3RlcnMoMCwgbm9wKTsKKyAgICAgICAgc2V0VXNlZFJlZ2lzdGVycygwKTsK
ICAgICB9CiAKICAgICAvLyBBbGxvY2F0ZSBhIHN0YWNrIHNsb3QgZm9yIGVhY2ggdG1wLgpAQCAt
MTMzLDYgKzEzMCw3IEBAIHZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUmIGNvZGUpCiAgICAgICAg
ICAgICAgICAgICAgIHN3aXRjaCAocm9sZSkgewogICAgICAgICAgICAgICAgICAgICBjYXNlIEFy
Zzo6VXNlOgogICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6Q29sZFVzZToKKyAgICAgICAg
ICAgICAgICAgICAgY2FzZSBBcmc6OkVhcmx5RGVmOgogICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yIChSZWcgcmVnIDogcmVnc0luUHJpb3JpdHlPcmRlcih0eXBlKSkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghc2V0QmVmb3JlLmdldChyZWcpKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNldEJlZm9yZS5zZXQocmVnKTsKQEAgLTE1NCw2ICsxNTIsOCBA
QCB2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJiBjb2RlKQogICAgICAgICAgICAgICAgICAgICBj
YXNlIEFyZzo6VXNlRGVmOgogICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6VXNlWkRlZjoK
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkxhdGVVc2U6CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgQXJnOjpMYXRlQ29sZFVzZToKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6
OlNjcmF0Y2g6CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiByZWdzSW5Q
cmlvcml0eU9yZGVyKHR5cGUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFz
ZXRCZWZvcmUuZ2V0KHJlZykgJiYgIXNldEFmdGVyLmdldChyZWcpKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNldEFmdGVyLnNldChyZWcpOwpAQCAtMTc0LDEzICsxNzQsMTEg
QEAgdm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29kZSkKIAogICAgICAgICAgICAgICAgICAg
ICBPcGNvZGUgbW92ZSA9IHR5cGUgPT0gQXJnOjpHUCA/IE1vdmUgOiBNb3ZlRG91YmxlOwogCi0g
ICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55VXNlKHJvbGUpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluc3RJbmRleCwgbW92ZSwgaW5zdC5vcmlnaW4sIGFyZywgdG1wKTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0RlZihyb2xlKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnN0SW5kZXggKyAxLCBtb3ZlLCBpbnN0Lm9yaWdpbiwgdG1w
LCBhcmcpOworICAgICAgICAgICAgICAgICAgICBpZiAocm9sZSAhPSBBcmc6OlNjcmF0Y2gpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55VXNlKHJvbGUpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoaW5zdEluZGV4LCBtb3Zl
LCBpbnN0Lm9yaWdpbiwgYXJnLCB0bXApOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFy
Zzo6aXNBbnlEZWYocm9sZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9u
U2V0Lmluc2VydChpbnN0SW5kZXggKyAxLCBtb3ZlLCBpbnN0Lm9yaWdpbiwgdG1wLCBhcmcpOwog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wV2lkdGguY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wV2lkdGguY3BwCShyZXZp
c2lvbiAxOTQ1MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcFdpZHRo
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDcgKzExOSw3IEBAIHZvaWQgVG1wV2lkdGg6OnJl
Y29tcHV0ZShDb2RlJiBjb2RlKQogCiAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzWkRl
Zihyb2xlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRocy5kZWYgPSBzdGQ6Om1heCh3
aWR0aHMuZGVmLCB3aWR0aCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEFyZzo6aXNE
ZWYocm9sZSkpCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEFyZzo6aXNBbnlEZWYocm9s
ZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aHMuZGVmID0gQXJnOjpjb25zZXJ2YXRp
dmVXaWR0aCh0eXBlKTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJVc2VDb3VudHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclVzZUNvdW50cy5oCShyZXZpc2lvbiAxOTQ1
MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclVzZUNvdW50cy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb3VudHMubnVtV2FybVVzZXMgKz0gZnJlcXVlbmN5OwogICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKEFyZzo6aXNDb2xkVXNlKHJvbGUpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvdW50cy5udW1Db2xkVXNlcyArPSBmcmVxdWVuY3k7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoQXJnOjppc0RlZihyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChBcmc6OmlzQW55RGVmKHJvbGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50
cy5udW1EZWZzICs9IGZyZXF1ZW5jeTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAg
ICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268174</attachid>
            <date>2016-01-03 22:01:47 -0800</date>
            <delta_ts>2016-01-03 22:17:48 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>59187</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk0NTI3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMiBA
QAorMjAxNi0wMS0wMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEIzIHBhdGNocG9pbnRzIHNob3VsZCBhbGxvdyByZXF1ZXN0aW5nIHNjcmF0Y2ggcmVnaXN0ZXJz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI2NjkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTY3JhdGNo
IHJlZ2lzdGVycyBhcmUgc29tZXRoaW5nIHRoYXQgd2Ugb2Z0ZW4gbmVlZCBpbiBtYW55IHBhdGNo
cG9pbnQgdXNlIGNhc2VzLiBJbiBMTFZNJ3MKKyAgICAgICAgcGF0Y2hwb2ludHMsIHdlIGRpZG4n
dCBoYXZlIGEgZ29vZCB3YXkgdG8gcmVxdWVzdCBzY3JhdGNoIHJlZ2lzdGVycy4gU28sIG91ciBj
dXJyZW50IEZUTCBjb2RlCisgICAgICAgIG9mdGVuIGRvZXMgY3Jhenkgc2NyYXRjaCByZWdpc3Rl
ciBhbGxvY2F0aW9uIG1hZG5lc3MgZXZlbiB3aGVuIGl0IHdvdWxkIGJlIGJldHRlciB0byBqdXN0
IGFzaworICAgICAgICB0aGUgYmFja2VuZCBmb3Igc29tZSByZWdpc3RlcnMuIFRoaXMgcGF0Y2gg
YWRkcyBhIG1lY2hhbmlzbSBmb3IgcmVxdWVzdGluZyBzY3JhdGNoIHJlZ2lzdGVycworICAgICAg
ICBpbiBCMywgYW5kIHdpcmVzIGl0IGFsbCB0aGUgd2F5IHRvIGFsbCBvZiBvdXIgcmVnaXN0ZXIg
YWxsb2NhdGlvbiBhbmQgbGl2ZW5lc3MKKyAgICAgICAgaW5mcmFzdHJ1Y3R1cmUuCisKKyAgICAg
ICAgRnJvbSB0aGUgc3RhbmRwb2ludCBvZiBhIHBhdGNocG9pbnQsIGEgInNjcmF0Y2ggcmVnaXN0
ZXIiIGlzIGFuIGluc3RydWN0aW9uIGFyZ3VtZW50IHRoYXQKKyAgICAgICAgb25seSBhZG1pdHMg
VG1wIGFuZCBpcyBkZWZpbmVkIGVhcmx5IChsaWtlIGFuIGVhcmx5IGNsb2JiZXIgcmVnaXN0ZXIp
IGFuZCBpcyB1c2VkIGxhdGUgKGxpa2UKKyAgICAgICAgd2hhdCB3ZSBwcmV2aW91c2x5IGNhbGxl
ZCBMYXRlVXNlLCBleGNlcHQgdGhhdCB0aGlzIHRpbWUgaXQncyBhbHNvIGEgd2FybSB1c2UpLiBX
ZSBhbHJlYWR5CisgICAgICAgIGhhZCB0aGUgYmVnaW5uaW5nIG9mIHN1cHBvcnQgZm9yIGVhcmx5
IGRlZidzIGJlY2F1c2Ugb2YgZWFybHkgY2xvYmJlcnMsIGFuZCB3ZSBhbHJlYWR5CisgICAgICAg
IHN1cHBvcnRlZCBsYXRlIHVzZXMgYWxiZWl0IGNvbGQgb25lcy4gSSByZWFsbHkgb25seSBuZWVk
ZWQgdG8gYWRkIG9uZSBuZXcgcm9sZTogIlNjcmF0Y2giLAorICAgICAgICB3aGljaCBtZWFucyBi
b3RoIGVhcmx5IGRlZiBhbmQgbGF0ZSB1c2UgaW4gbXVjaCB0aGUgc2FtZSB3YXkgYXMgIlVzZURl
ZiIgbWVhbnMgYm90aCBlYXJseQorICAgICAgICB1c2UgYW5kIGxhdGUgZGVmLiBCdXQsIGl0IGZl
ZWxzIGJldHRlciB0byBjb21wbGV0ZSB0aGUgc2V0IG9mIHJvbGVzLCBzbyBJIGFkZGVkIExhdGVD
b2xkVXNlCisgICAgICAgIHRvIGRpZmZlcmVudGlhdGUgZnJvbSBMYXRlVXNlICh3aGljaCBpcyBu
b3cgYSB3YXJtIHVzZSkgYW5kIEVhcmx5RGVmIHRvIGRpZmZlcmVudGlhdGUgZnJvbQorICAgICAg
ICBEZWYgKHdoaWNoIGlzLCBhbmQgYWx3YXlzIGhhcyBiZWVuLCBhIGxhdGUgZGVmKS4gRm9yY2lu
ZyB0aGUgY29kZSB0byBkZWFsIHdpdGggdGhlIGZ1bGwKKyAgICAgICAgbWF0cml4IG9mIHBvc3Np
YmlsaXRpZXMgcmVzdWx0ZWQgaW4gd2hhdCBpcyBwcm9iYWJseSBhIHByb2dyZXNzaW9uIGluIGhv
dyB3ZSBoYW5kbGUgZGVmcyBpbgorICAgICAgICB0aGUgcmVnaXN0ZXIgYW5kIHN0YWNrIGFsbG9j
YXRvcnMuIFRoZSBuZXcgSW5zdDo6Zm9yRWFjaERlZihJbnN0KiwgSW5zdCosIGNhbGxiYWNrKSBm
dWxseQorICAgICAgICByZWNvZ25pemVzIHRoYXQgYSAiZGVmIiBpcyBzb21ldGhpbmcgdGhhdCBj
YW4gY29tZSBmcm9tIGVpdGhlciB0aGUgcHJlY2VkaW5nIGluc3RydWN0aW9uIG9yCisgICAgICAg
IHRoZSBzdWNjZWVkaW5nIG9uZS4KKworICAgICAgICBUaGlzIGRvZXNuJ3QgYWRkIGFueSBuZXcg
ZnVuY3Rpb25hbGl0eSB0byBGVEwgQjMgeWV0LCBidXQgdGhlIG5ldyBzY3JhdGNoIHJlZ2lzdGVy
IG1lY2hhbmlzbQorICAgICAgICBpcyBjb3ZlcmVkIGJ5IG5ldyB0ZXN0YjMgdGVzdHMuCisKKyAg
ICAgICAgKiBiMy9CM0NoZWNrU3BlY2lhbC5jcHA6CisgICAgICAgIChKU0M6OkIzOjpDaGVja1Nw
ZWNpYWw6OmlzVmFsaWQpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjphZG1pdHNT
dGFjayk6CisgICAgICAgIChKU0M6OkIzOjpDaGVja1NwZWNpYWw6OmdlbmVyYXRlKToKKyAgICAg
ICAgKiBiMy9CM0xvd2VyVG9BaXIuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRv
QWlyOjpsb3dlcik6CisgICAgICAgICogYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHA6CisgICAg
ICAgIChKU0M6OkIzOjpQYXRjaHBvaW50U3BlY2lhbDo6Zm9yRWFjaEFyZyk6CisgICAgICAgIChK
U0M6OkIzOjpQYXRjaHBvaW50U3BlY2lhbDo6aXNWYWxpZCk6CisgICAgICAgIChKU0M6OkIzOjpQ
YXRjaHBvaW50U3BlY2lhbDo6YWRtaXRzU3RhY2spOgorICAgICAgICAoSlNDOjpCMzo6UGF0Y2hw
b2ludFNwZWNpYWw6OmdlbmVyYXRlKToKKyAgICAgICAgKiBiMy9CM1BhdGNocG9pbnRWYWx1ZS5j
cHA6CisgICAgICAgIChKU0M6OkIzOjpQYXRjaHBvaW50VmFsdWU6OmR1bXBNZXRhKToKKyAgICAg
ICAgKEpTQzo6QjM6OlBhdGNocG9pbnRWYWx1ZTo6UGF0Y2hwb2ludFZhbHVlKToKKyAgICAgICAg
KiBiMy9CM1BhdGNocG9pbnRWYWx1ZS5oOgorICAgICAgICAqIGIzL0IzU3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
czo6dW5hdmFpbGFibGVSZWdpc3RlcnMpOgorICAgICAgICAqIGIzL0IzU3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zLmg6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXM6
OmdwU2NyYXRjaCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXM6
OmZwU2NyYXRjaCk6CisgICAgICAgICogYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwOgorICAgICAg
ICAoSlNDOjpCMzo6U3RhY2ttYXBTcGVjaWFsOjpmb3JFYWNoQXJnSW1wbCk6CisgICAgICAgIChK
U0M6OkIzOjpTdGFja21hcFNwZWNpYWw6OmlzVmFsaWRJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6
OlN0YWNrbWFwU3BlY2lhbDo6YWRtaXRzU3RhY2tJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OlN0
YWNrbWFwU3BlY2lhbDo6cmVwc0ltcGwpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXBTcGVj
aWFsOjppc0FyZ1ZhbGlkRm9yVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXBTcGVj
aWFsOjphcHBlbmRSZXBzSW1wbCk6IERlbGV0ZWQuCisgICAgICAgICogYjMvQjNTdGFja21hcFNw
ZWNpYWwuaDoKKyAgICAgICAgKiBiMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHA6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OmFsbG9jYXRlU3RhY2spOgorICAgICAgICAqIGIzL2Fpci9BaXJBcmcu
Y3BwOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBiMy9haXIvQWly
QXJnLmg6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNBbnlVc2UpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpBcmc6OmlzQ29sZFVzZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFy
Zzo6aXNFYXJseVVzZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNMYXRlVXNlKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0FueURlZik6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFyZzo6aXNFYXJseURlZik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNM
YXRlRGVmKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1pEZWYpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpBcmc6OkFyZyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aW1t
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0RlZik6IERlbGV0ZWQuCisgICAgICAg
ICogYjMvYWlyL0FpckJhc2ljQmxvY2suaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNC
bG9jazo6YXQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpnZXQpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpsYXN0KToKKyAgICAgICAgKiBiMy9haXIv
QWlyRWxpbWluYXRlRGVhZENvZGUuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjplbGltaW5h
dGVEZWFkQ29kZSk6CisgICAgICAgICogYjMvYWlyL0FpckZpeFBhcnRpYWxSZWdpc3RlclN0YWxs
cy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OmZpeFBhcnRpYWxSZWdpc3RlclN0YWxscyk6
CisgICAgICAgICogYjMvYWlyL0Fpckluc3QuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJ
bnN0OjpoYXNBcmdFZmZlY3RzKToKKyAgICAgICAgKiBiMy9haXIvQWlySW5zdC5oOgorICAgICAg
ICAqIGIzL2Fpci9BaXJJbnN0SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0
OjpleHRyYUVhcmx5Q2xvYmJlcmVkUmVncyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6
OmZvckVhY2hEZWYpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0Ojpmb3JFYWNoRGVmV2l0
aEV4dHJhQ2xvYmJlcmVkUmVncyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6OnJlcG9y
dFVzZWRSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0Ojpmb3JFYWNoVG1w
V2l0aEV4dHJhQ2xvYmJlcmVkUmVncyk6IERlbGV0ZWQuCisgICAgICAgICogYjMvYWlyL0Fpckl0
ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcDoKKyAgICAgICAgKiBiMy9haXIvQWlyTGl2ZW5l
c3MuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QWJzdHJhY3RMaXZlbmVzczo6QWJzdHJhY3RM
aXZlbmVzcyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFic3RyYWN0TGl2ZW5lc3M6OkxvY2Fs
Q2FsYzo6ZXhlY3V0ZSk6CisgICAgICAgICogYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHA6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnNwaWxsRXZlcnl0aGluZyk6CisgICAgICAgICogYjMv
YWlyL0FpclRtcFdpZHRoLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wV2lkdGg6OnJl
Y29tcHV0ZSk6CisgICAgICAgICogYjMvYWlyL0FpclVzZUNvdW50cy5oOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpVc2VDb3VudHM6OlVzZUNvdW50cyk6CisgICAgICAgICogYjMvdGVzdGIzLmNw
cDoKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RQYXRjaHBvaW50QW55KToKKyAgICAgICAgKEpTQzo6
QjM6OnRlc3RQYXRjaHBvaW50R1BTY3JhdGNoKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RQYXRj
aHBvaW50RlBTY3JhdGNoKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RQYXRjaHBvaW50TG90c09m
TGF0ZUFueXMpOgorICAgICAgICAoSlNDOjpCMzo6cnVuKToKKwogMjAxNi0wMS0wMyAgS2hlbSBS
YWogIDxyYWoua2hlbUBnbWFpbC5jb20+CiAKICAgICAgICAgV2ViS2l0IGZhaWxzIHRvIGJ1aWxk
IHdpdGggbXVzbCBsaWJjIGxpYnJhcnkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NoZWNrU3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ2hlY2tTcGVjaWFsLmNwcAkocmV2aXNpb24gMTk0NTI3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjQsNyArMTI0LDgg
QEAgdm9pZCBDaGVja1NwZWNpYWw6OmZvckVhY2hBcmcoSW5zdCYgaW5zdAogYm9vbCBDaGVja1Nw
ZWNpYWw6OmlzVmFsaWQoSW5zdCYgaW5zdCkKIHsKICAgICByZXR1cm4gaGlkZGVuQnJhbmNoKGlu
c3QpLmlzVmFsaWRGb3JtKCkKLSAgICAgICAgJiYgaXNWYWxpZEltcGwobnVtQjNBcmdzKGluc3Qp
LCBtX251bUNoZWNrQXJncyArIDEsIGluc3QpOworICAgICAgICAmJiBpc1ZhbGlkSW1wbChudW1C
M0FyZ3MoaW5zdCksIG1fbnVtQ2hlY2tBcmdzICsgMSwgaW5zdCkKKyAgICAgICAgJiYgaW5zdC5h
cmdzLnNpemUoKSAtIG1fbnVtQ2hlY2tBcmdzIC0gMSA9PSBpbnN0Lm9yaWdpbi0+bnVtQ2hpbGRy
ZW4oKSAtIG51bUIzQXJncyhpbnN0KTsKIH0KIAogYm9vbCBDaGVja1NwZWNpYWw6OmFkbWl0c1N0
YWNrKEluc3QmIGluc3QsIHVuc2lnbmVkIGFyZ0luZGV4KQpAQCAtMTQyLDggKzE0Myw3IEBAIEND
YWxsSGVscGVyczo6SnVtcCBDaGVja1NwZWNpYWw6OmdlbmVyYXQKICAgICBTdGFja21hcFZhbHVl
KiB2YWx1ZSA9IGluc3Qub3JpZ2luLT5hczxTdGFja21hcFZhbHVlPigpOwogICAgIEFTU0VSVCh2
YWx1ZSk7CiAKLSAgICBWZWN0b3I8VmFsdWVSZXA+IHJlcHM7Ci0gICAgYXBwZW5kUmVwc0ltcGwo
Y29udGV4dCwgbV9udW1DaGVja0FyZ3MgKyAxLCBpbnN0LCByZXBzKTsKKyAgICBWZWN0b3I8VmFs
dWVSZXA+IHJlcHMgPSByZXBzSW1wbChjb250ZXh0LCBudW1CM0FyZ3MoaW5zdCksIG1fbnVtQ2hl
Y2tBcmdzICsgMSwgaW5zdCk7CiAKICAgICAvLyBTZXQgYXNpZGUgdGhlIGFyZ3MgdGhhdCBhcmUg
cmVsZXZhbnQgdG8gdW5kb2luZyB0aGUgb3BlcmF0aW9uLiBUaGlzIGlzIGJlY2F1c2Ugd2UgZG9u
J3Qgd2FudCB0bwogICAgIC8vIGNhcHR1cmUgYWxsIG9mIGluc3QgaW4gdGhlIGNsb3N1cmUgYmVs
b3cuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2
aXNpb24gMTk0NTI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjAwNyw2ICsyMDA3LDExIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZpbGxTdGFja21hcChpbnN0LCBwYXRjaHBv
aW50VmFsdWUsIDApOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBwYXRjaHBvaW50
VmFsdWUtPm51bUdQU2NyYXRjaFJlZ2lzdGVyczsgaS0tOykKKyAgICAgICAgICAgICAgICBpbnN0
LmFyZ3MuYXBwZW5kKG1fY29kZS5uZXdUbXAoQXJnOjpHUCkpOworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gcGF0Y2hwb2ludFZhbHVlLT5udW1GUFNjcmF0Y2hSZWdpc3RlcnM7IGktLTsp
CisgICAgICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChtX2NvZGUubmV3VG1wKEFyZzo6RlAp
KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9pbnN0cy5sYXN0KCkuYXBwZW5kKFdURk1v
dmUoaW5zdCkpOwogICAgICAgICAgICAgbV9pbnN0cy5sYXN0KCkuYXBwZW5kVmVjdG9yKGFmdGVy
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRTcGVjaWFsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3Bl
Y2lhbC5jcHAJKHJldmlzaW9uIDE5NDUyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1BhdGNocG9pbnRTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NiwzMiArNDYsNTYgQEAgUGF0
Y2hwb2ludFNwZWNpYWw6On5QYXRjaHBvaW50U3BlY2lhbCgpCiAKIHZvaWQgUGF0Y2hwb2ludFNw
ZWNpYWw6OmZvckVhY2hBcmcoSW5zdCYgaW5zdCwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVh
Y2hBcmdDYWxsYmFjaz4mIGNhbGxiYWNrKQogewotICAgIC8vIEZJWE1FOiBBbGxvdyBCMyBQYXRj
aHBvaW50cyB0byBzcGVjaWZ5IExhdGVVc2UuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1MTMzNQotICAgIAotICAgIGlmIChpbnN0Lm9yaWdpbi0+dHlw
ZSgpID09IFZvaWQpIHsKLSAgICAgICAgZm9yRWFjaEFyZ0ltcGwoMCwgMSwgaW5zdCwgU2FtZUFz
UmVwLCBjYWxsYmFjayk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgdW5zaWduZWQgYXJn
SW5kZXggPSAxOworCisgICAgaWYgKGluc3Qub3JpZ2luLT50eXBlKCkgIT0gVm9pZCkKKyAgICAg
ICAgY2FsbGJhY2soaW5zdC5hcmdzW2FyZ0luZGV4KytdLCBBcmc6OkRlZiwgaW5zdC5vcmlnaW4t
PmFpclR5cGUoKSwgaW5zdC5vcmlnaW4tPmFpcldpZHRoKCkpOworCisgICAgZm9yRWFjaEFyZ0lt
cGwoMCwgYXJnSW5kZXgsIGluc3QsIFNhbWVBc1JlcCwgY2FsbGJhY2spOworICAgIGFyZ0luZGV4
ICs9IGluc3Qub3JpZ2luLT5udW1DaGlsZHJlbigpOwogCi0gICAgY2FsbGJhY2soaW5zdC5hcmdz
WzFdLCBBcmc6OkRlZiwgaW5zdC5vcmlnaW4tPmFpclR5cGUoKSwgaW5zdC5vcmlnaW4tPmFpcldp
ZHRoKCkpOwotICAgIGZvckVhY2hBcmdJbXBsKDAsIDIsIGluc3QsIFNhbWVBc1JlcCwgY2FsbGJh
Y2spOworICAgIGZvciAodW5zaWduZWQgaSA9IGluc3Qub3JpZ2luLT5hczxQYXRjaHBvaW50VmFs
dWU+KCktPm51bUdQU2NyYXRjaFJlZ2lzdGVyczsgaS0tOykKKyAgICAgICAgY2FsbGJhY2soaW5z
dC5hcmdzW2FyZ0luZGV4KytdLCBBcmc6OlNjcmF0Y2gsIEFyZzo6R1AsIEFyZzo6Y29uc2VydmF0
aXZlV2lkdGgoQXJnOjpHUCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IGluc3Qub3JpZ2luLT5h
czxQYXRjaHBvaW50VmFsdWU+KCktPm51bUZQU2NyYXRjaFJlZ2lzdGVyczsgaS0tOykKKyAgICAg
ICAgY2FsbGJhY2soaW5zdC5hcmdzW2FyZ0luZGV4KytdLCBBcmc6OlNjcmF0Y2gsIEFyZzo6RlAs
IEFyZzo6Y29uc2VydmF0aXZlV2lkdGgoQXJnOjpGUCkpOwogfQogCiBib29sIFBhdGNocG9pbnRT
cGVjaWFsOjppc1ZhbGlkKEluc3QmIGluc3QpCiB7Ci0gICAgaWYgKGluc3Qub3JpZ2luLT50eXBl
KCkgPT0gVm9pZCkKLSAgICAgICAgcmV0dXJuIGlzVmFsaWRJbXBsKDAsIDEsIGluc3QpOwotCi0g
ICAgaWYgKGluc3QuYXJncy5zaXplKCkgPCAyKQotICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
UGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gaW5zdC5vcmlnaW4tPmFzPFBhdGNocG9pbnRW
YWx1ZT4oKTsKLSAgICBpZiAoIWlzQXJnVmFsaWRGb3JWYWx1ZShpbnN0LmFyZ3NbMV0sIHBhdGNo
cG9pbnQpKQorICAgIHVuc2lnbmVkIGFyZ0luZGV4ID0gMTsKKworICAgIGlmIChpbnN0Lm9yaWdp
bi0+dHlwZSgpICE9IFZvaWQpIHsKKyAgICAgICAgaWYgKGFyZ0luZGV4ID49IGluc3QuYXJncy5z
aXplKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAo
IWlzQXJnVmFsaWRGb3JWYWx1ZShpbnN0LmFyZ3NbYXJnSW5kZXhdLCBwYXRjaHBvaW50KSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFpc0FyZ1ZhbGlkRm9yUmVwKGNv
ZGUoKSwgaW5zdC5hcmdzW2FyZ0luZGV4XSwgcGF0Y2hwb2ludC0+cmVzdWx0Q29uc3RyYWludCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGFyZ0luZGV4Kys7CisgICAgfQor
CisgICAgaWYgKCFpc1ZhbGlkSW1wbCgwLCBhcmdJbmRleCwgaW5zdCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAoIWlzQXJnVmFsaWRGb3JSZXAoY29kZSgpLCBpbnN0LmFyZ3NbMV0s
IHBhdGNocG9pbnQtPnJlc3VsdENvbnN0cmFpbnQpKQorICAgIGFyZ0luZGV4ICs9IHBhdGNocG9p
bnQtPm51bUNoaWxkcmVuKCk7CisKKyAgICBpZiAoYXJnSW5kZXggKyBwYXRjaHBvaW50LT5udW1H
UFNjcmF0Y2hSZWdpc3RlcnMgKyBwYXRjaHBvaW50LT5udW1GUFNjcmF0Y2hSZWdpc3RlcnMKKyAg
ICAgICAgIT0gaW5zdC5hcmdzLnNpemUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
cmV0dXJuIGlzVmFsaWRJbXBsKDAsIDIsIGluc3QpOworICAgIGZvciAodW5zaWduZWQgaSA9IHBh
dGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVyczsgaS0tOykgeworICAgICAgICBBcmcgYXJn
ID0gaW5zdC5hcmdzW2FyZ0luZGV4KytdOworICAgICAgICBpZiAoIWFyZy5pc0dQVG1wKCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGZvciAodW5zaWduZWQgaSA9IHBh
dGNocG9pbnQtPm51bUZQU2NyYXRjaFJlZ2lzdGVyczsgaS0tOykgeworICAgICAgICBBcmcgYXJn
ID0gaW5zdC5hcmdzW2FyZ0luZGV4KytdOworICAgICAgICBpZiAoIWFyZy5pc0ZQVG1wKCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7CiB9CiAK
IGJvb2wgUGF0Y2hwb2ludFNwZWNpYWw6OmFkbWl0c1N0YWNrKEluc3QmIGluc3QsIHVuc2lnbmVk
IGFyZ0luZGV4KQpAQCAtOTksMTYgKzEyMywyNCBAQCBib29sIFBhdGNocG9pbnRTcGVjaWFsOjph
ZG1pdHNTdGFjayhJbnN0CiBDQ2FsbEhlbHBlcnM6Okp1bXAgUGF0Y2hwb2ludFNwZWNpYWw6Omdl
bmVyYXRlKAogICAgIEluc3QmIGluc3QsIENDYWxsSGVscGVycyYgaml0LCBHZW5lcmF0aW9uQ29u
dGV4dCYgY29udGV4dCkKIHsKLSAgICBTdGFja21hcFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2lu
LT5hczxTdGFja21hcFZhbHVlPigpOworICAgIFBhdGNocG9pbnRWYWx1ZSogdmFsdWUgPSBpbnN0
Lm9yaWdpbi0+YXM8UGF0Y2hwb2ludFZhbHVlPigpOwogICAgIEFTU0VSVCh2YWx1ZSk7CiAKICAg
ICBWZWN0b3I8VmFsdWVSZXA+IHJlcHM7CiAgICAgdW5zaWduZWQgb2Zmc2V0ID0gMTsKICAgICBp
ZiAoaW5zdC5vcmlnaW4tPnR5cGUoKSAhPSBWb2lkKQogICAgICAgICByZXBzLmFwcGVuZChyZXBG
b3JBcmcoKmNvbnRleHQuY29kZSwgaW5zdC5hcmdzW29mZnNldCsrXSkpOwotICAgIGFwcGVuZFJl
cHNJbXBsKGNvbnRleHQsIG9mZnNldCwgaW5zdCwgcmVwcyk7CisgICAgcmVwcy5hcHBlbmRWZWN0
b3IocmVwc0ltcGwoY29udGV4dCwgMCwgb2Zmc2V0LCBpbnN0KSk7CisgICAgb2Zmc2V0ICs9IHZh
bHVlLT5udW1DaGlsZHJlbigpOworCisgICAgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zIHBhcmFt
cyh2YWx1ZSwgcmVwcywgY29udGV4dCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSB2YWx1ZS0+
bnVtR1BTY3JhdGNoUmVnaXN0ZXJzOyBpLS07KQorICAgICAgICBwYXJhbXMubV9ncFNjcmF0Y2gu
YXBwZW5kKGluc3QuYXJnc1tvZmZzZXQrK10uZ3ByKCkpOworICAgIGZvciAodW5zaWduZWQgaSA9
IHZhbHVlLT5udW1GUFNjcmF0Y2hSZWdpc3RlcnM7IGktLTspCisgICAgICAgIHBhcmFtcy5tX2Zw
U2NyYXRjaC5hcHBlbmQoaW5zdC5hcmdzW29mZnNldCsrXS5mcHIoKSk7CiAgICAgCi0gICAgdmFs
dWUtPm1fZ2VuZXJhdG9yLT5ydW4oaml0LCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXModmFsdWUs
IHJlcHMsIGNvbnRleHQpKTsKKyAgICB2YWx1ZS0+bV9nZW5lcmF0b3ItPnJ1bihqaXQsIHBhcmFt
cyk7CiAKICAgICByZXR1cm4gQ0NhbGxIZWxwZXJzOjpKdW1wKCk7CiB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAJKHJldmlzaW9uIDE5
NDUyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzgsMTIgKzM4LDE4IEBAIHZvaWQgUGF0Y2hwb2ludFZhbHVlOjpkdW1w
TWV0YShDb21tYVByaW4KIHsKICAgICBCYXNlOjpkdW1wTWV0YShjb21tYSwgb3V0KTsKICAgICBv
dXQucHJpbnQoY29tbWEsICJyZXN1bHRDb25zdHJhaW50ID0gIiwgcmVzdWx0Q29uc3RyYWludCk7
CisgICAgaWYgKG51bUdQU2NyYXRjaFJlZ2lzdGVycykKKyAgICAgICAgb3V0LnByaW50KGNvbW1h
LCAibnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gIiwgbnVtR1BTY3JhdGNoUmVnaXN0ZXJzKTsKKyAg
ICBpZiAobnVtRlBTY3JhdGNoUmVnaXN0ZXJzKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJu
dW1GUFNjcmF0Y2hSZWdpc3RlcnMgPSAiLCBudW1GUFNjcmF0Y2hSZWdpc3RlcnMpOwogfQogCiBQ
YXRjaHBvaW50VmFsdWU6OlBhdGNocG9pbnRWYWx1ZSh1bnNpZ25lZCBpbmRleCwgVHlwZSB0eXBl
LCBPcmlnaW4gb3JpZ2luKQogICAgIDogQmFzZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgUGF0Y2hw
b2ludCwgdHlwZSwgb3JpZ2luKQogICAgICwgZWZmZWN0cyhFZmZlY3RzOjpmb3JDYWxsKCkpCiAg
ICAgLCByZXN1bHRDb25zdHJhaW50KHR5cGUgPT0gVm9pZCA/IFZhbHVlUmVwOjpXYXJtQW55IDog
VmFsdWVSZXA6OlNvbWVSZWdpc3RlcikKKyAgICAsIG51bUdQU2NyYXRjaFJlZ2lzdGVycygwKQor
ICAgICwgbnVtRlBTY3JhdGNoUmVnaXN0ZXJzKDApCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5oCShyZXZpc2lvbiAxOTQ1MjcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC01Niw2ICs1NiwxMiBAQCBwdWJsaWM6CiAgICAgLy8gaXMgVm9pZC4gT3RoZXJ3aXNlIHlv
dSBjYW4gc2V0IHRoaXMgdG8gYW55IGlucHV0IGNvbnN0cmFpbnQuCiAgICAgVmFsdWVSZXAgcmVz
dWx0Q29uc3RyYWludDsKIAorICAgIC8vIFRoZSBudW1iZXIgb2Ygc2NyYXRjaCByZWdpc3RlcnMg
dGhhdCB0aGlzIHBhdGNocG9pbnQgZ2V0cy4gVGhlIHNjcmF0Y2ggcmVnaXN0ZXIgaXMgZ3VhcmFu
dGVlZAorICAgIC8vIHRvIGJlIGRpZmZlcmVudCBmcm9tIGFueSBpbnB1dCByZWdpc3RlciBhbmQg
dGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyLiBJdCdzIGFsc28gZ3VhcmFudGVlZCBub3QKKyAgICAv
LyB0byBiZSBjbG9iYmVyZWQgZWl0aGVyIGVhcmx5IG9yIGxhdGUuIFRoZXNlIGFyZSAwIGJ5IGRl
ZmF1bHQuCisgICAgdWludDhfdCBudW1HUFNjcmF0Y2hSZWdpc3RlcnM7CisgICAgdWludDhfdCBu
dW1GUFNjcmF0Y2hSZWdpc3RlcnM7CisKIHByb3RlY3RlZDoKICAgICB2b2lkIGR1bXBNZXRhKENv
bW1hUHJpbnRlciYsIFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zLmNwcAkocmV2aXNpb24gMTk0NTI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAs
MTIgQEAgUmVnaXN0ZXJTZXQgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zOjp1bgogICAgICAgICB1
bnNhdmVkQ2FsbGVlU2F2ZXMuY2xlYXIocmVnQXRPZmZzZXQucmVnKCkpOwogCiAgICAgcmVzdWx0
Lm1lcmdlKHVuc2F2ZWRDYWxsZWVTYXZlcyk7CisKKyAgICBmb3IgKEdQUlJlZyBncHIgOiBtX2dw
U2NyYXRjaCkKKyAgICAgICAgcmVzdWx0LmNsZWFyKGdwcik7CisgICAgZm9yIChGUFJSZWcgZnBy
IDogbV9mcFNjcmF0Y2gpCisgICAgICAgIHJlc3VsdC5jbGVhcihmcHIpOworICAgIAogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oCShyZXZpc2lvbiAxOTQ1MjcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC01OSwxMiArNTksMjcgQEAgcHVibGljOgogICAgIC8vIFRoaXMgdGVsbHMgeW91
IHRoZSByZWdpc3RlcnMgdGhhdCB3ZXJlIHVzZWQuCiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVz
ZWRSZWdpc3RlcnMoKSBjb25zdDsKIAotICAgIC8vIFRoaXMgaXMgYSB1c2VmdWwgaGVscGVyIGlm
IHlvdSB3YW50IHRvIGRvIHJlZ2lzdGVyIGFsbG9jYXRpb24gaW5zaWRlIG9mIGEgcGF0Y2hwb2lu
dC4gWW91Ci0gICAgLy8gY2FuIG9ubHkgdXNlIGNhbGxlZS1zYXZlIHJlZ2lzdGVycyBpZiB0aGV5
IHdlcmUgc2F2ZWQgaW4gdGhlIHByb2xvZ3VlLiBUaGlzIGdpdmVzIHlvdSB0aGUKLSAgICAvLyB1
c2VkIHJlZ2lzdGVyIHNldCB0aGF0J3MgdXNlZnVsIGZvciBzdWNoIHNldHRpbmdzIGJ5IHJldHVy
bmluZzoKKyAgICAvLyBUaGlzIGlzIGEgdXNlZnVsIGhlbHBlciBpZiB5b3Ugd2FudCB0byBkbyBy
ZWdpc3RlciBhbGxvY2F0aW9uIGluc2lkZSBvZiBhIHBhdGNocG9pbnQuIFRoZQorICAgIC8vIHVz
ZWRSZWdpc3RlcnMoKSBzZXQgaXMgbm90IGRpcmVjdGx5IHVzZWZ1bCBmb3IgdGhpcyBwdXJwb3Nl
IGJlY2F1c2U6CiAgICAgLy8KLSAgICAvLyAgICAgdXNlZFJlZ2lzdGVycygpIHwgKFJlZ2lzdGVy
U2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkgLSBwcm9jLmNhbGxlZVNhdmVSZWdpc3RlcnMoKSkK
LSAgICBSZWdpc3RlclNldCB1bmF2YWlsYWJsZVJlZ2lzdGVycygpIGNvbnN0OworICAgIC8vIC0g
WW91IGNhbiBvbmx5IHVzZSBjYWxsZWUtc2F2ZSByZWdpc3RlcnMgZm9yIHNjcmF0Y2ggaWYgdGhl
eSB3ZXJlIHNhdmVkIGluIHRoZSBwcm9sb2d1ZS4gU28sCisgICAgLy8gICBpZiBhIHJlZ2lzdGVy
IGlzIGNhbGxlZS1zYXZlLCBpdCdzIG5vdCBlbm91Z2ggdGhhdCBpdCdzIG5vdCBpbiB1c2VkUmVn
aXN0ZXJzKCkuCisgICAgLy8KKyAgICAvLyAtIFNjcmF0Y2ggcmVnaXN0ZXJzIGFyZSBnb2luZyB0
byBiZSBpbiB1c2VkUmVnaXN0ZXJzKCkgYXQgdGhlIHBhdGNocG9pbnQuIFNvLCBpZiB5b3Ugd2Fu
dCB0bworICAgIC8vICAgZmluZCBvbmUgb2YgeW91ciByZXF1ZXN0ZWQgc2NyYXRjaCByZWdpc3Rl
cnMgdXNpbmcgdXNlZFJlZ2lzdGVycygpLCB5b3UnbGwgaGF2ZSBhIGJhZCB0aW1lLgorICAgIC8v
CisgICAgLy8gVGhpcyBnaXZlcyB5b3UgdGhlIHVzZWQgcmVnaXN0ZXIgc2V0IHRoYXQncyB1c2Vm
dWwgZm9yIGFsbG9jYXRpbmcgc2NyYXRjaCByZWdpc3RlcnMuIFRoaXMgc2V0CisgICAgLy8gaXMg
ZGVmaW5lZCBhczoKKyAgICAvLworICAgIC8vICAgICAodXNlZFJlZ2lzdGVycygpIHwgKFJlZ2lz
dGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkgLSBwcm9jLmNhbGxlZVNhdmVSZWdpc3RlcnMo
KSkpCisgICAgLy8gICAgIC0gZ3BTY3JhdGNoUmVnaXN0ZXJzIC0gZnBTY3JhdGNoUmVnaXN0ZXJz
CisgICAgLy8KKyAgICAvLyBJLmUuIGl0IGlzIGxpa2UgdXNlZFJlZ2lzdGVycygpIGJ1dCBhbHNv
IGluY2x1ZGVzIHVuc2F2ZWQgY2FsbGVlLXNhdmVzIGFuZCBleGNsdWRlcyBzY3JhdGNoCisgICAg
Ly8gcmVnaXN0ZXJzLgorICAgIEpTX0VYUE9SVF9QUklWQVRFIFJlZ2lzdGVyU2V0IHVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCkgY29uc3Q7CisKKyAgICBHUFJSZWcgZ3BTY3JhdGNoKHVuc2lnbmVkIGlu
ZGV4KSBjb25zdCB7IHJldHVybiBtX2dwU2NyYXRjaFtpbmRleF07IH0KKyAgICBGUFJSZWcgZnBT
Y3JhdGNoKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2ZwU2NyYXRjaFtpbmRleF07
IH0KIAogICAgIC8vIFRoaXMgaXMgcHJvdmlkZWQgZm9yIGNvbnZlbmllbmNlOyBpdCBtZWFucyB0
aGF0IHlvdSBkb24ndCBoYXZlIHRvIGNhcHR1cmUgaXQgaWYgeW91IGRvbid0IHdhbnQgdG8uCiAg
ICAgUHJvY2VkdXJlJiBwcm9jKCkgY29uc3Q7CkBAIC05MCw2ICsxMDUsOCBAQCBwcml2YXRlOgog
CiAgICAgU3RhY2ttYXBWYWx1ZSogbV92YWx1ZTsKICAgICBWZWN0b3I8VmFsdWVSZXA+IG1fcmVw
czsKKyAgICBWZWN0b3I8R1BSUmVnPiBtX2dwU2NyYXRjaDsKKyAgICBWZWN0b3I8RlBSUmVnPiBt
X2ZwU2NyYXRjaDsKICAgICBBaXI6OkdlbmVyYXRpb25Db250ZXh0JiBtX2NvbnRleHQ7CiB9Owog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5j
cHAJKHJldmlzaW9uIDE5NDUyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNr
bWFwU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODEsOSArODEsOSBAQCB2b2lkIFN0YWNrbWFw
U3BlY2lhbDo6Zm9yRWFjaEFyZ0ltcGwoCiAgICAgLy8gQ2hlY2sgdGhhdCBpbnNhbmUgdGhpbmdz
IGhhdmUgbm90IGhhcHBlbmVkLgogICAgIEFTU0VSVChpbnN0LmFyZ3Muc2l6ZSgpID49IG51bUln
bm9yZWRBaXJBcmdzKTsKICAgICBBU1NFUlQodmFsdWUtPmNoaWxkcmVuKCkuc2l6ZSgpID49IG51
bUlnbm9yZWRCM0FyZ3MpOwotICAgIEFTU0VSVChpbnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3Jl
ZEFpckFyZ3MgPT0gdmFsdWUtPmNoaWxkcmVuKCkuc2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJncyk7
CisgICAgQVNTRVJUKGluc3QuYXJncy5zaXplKCkgLSBudW1JZ25vcmVkQWlyQXJncyA+PSB2YWx1
ZS0+Y2hpbGRyZW4oKS5zaXplKCkgLSBudW1JZ25vcmVkQjNBcmdzKTsKICAgICAKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5zdC5hcmdzLnNpemUoKSAtIG51bUlnbm9yZWRBaXJBcmdz
OyArK2kpIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWUtPmNoaWxkcmVuKCku
c2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJnczsgKytpKSB7CiAgICAgICAgIEFyZyYgYXJnID0gaW5z
dC5hcmdzW2kgKyBudW1JZ25vcmVkQWlyQXJnc107CiAgICAgICAgIENvbnN0cmFpbmVkVmFsdWUg
Y2hpbGQgPSB2YWx1ZS0+Y29uc3RyYWluZWRDaGlsZChpICsgbnVtSWdub3JlZEIzQXJncyk7CiAK
QEAgLTEwMywxMiArMTAzLDEyIEBAIHZvaWQgU3RhY2ttYXBTcGVjaWFsOjpmb3JFYWNoQXJnSW1w
bCgKICAgICAgICAgICAgICAgICByb2xlID0gQXJnOjpDb2xkVXNlOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6TGF0ZUNvbGRBbnk6Ci0gICAgICAg
ICAgICAgICAgcm9sZSA9IEFyZzo6TGF0ZVVzZTsKKyAgICAgICAgICAgICAgICByb2xlID0gQXJn
OjpMYXRlQ29sZFVzZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEZvcmNlTGF0ZVVzZToKLSAgICAgICAgICAg
IHJvbGUgPSBBcmc6OkxhdGVVc2U7CisgICAgICAgICAgICByb2xlID0gQXJnOjpMYXRlQ29sZFVz
ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTEyOSwxMyArMTI5LDEzIEBA
IGJvb2wgU3RhY2ttYXBTcGVjaWFsOjppc1ZhbGlkSW1wbCgKICAgICBBU1NFUlQodmFsdWUtPmNo
aWxkcmVuKCkuc2l6ZSgpID49IG51bUlnbm9yZWRCM0FyZ3MpOwogCiAgICAgLy8gRm9yIHRoZSBJ
bnN0IHRvIGJlIHZhbGlkLCBpdCBuZWVkcyB0byBoYXZlIHRoZSByaWdodCBudW1iZXIgb2YgYXJn
dW1lbnRzLgotICAgIGlmIChpbnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3JlZEFpckFyZ3MgIT0g
dmFsdWUtPmNoaWxkcmVuKCkuc2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJncykKKyAgICBpZiAoaW5z
dC5hcmdzLnNpemUoKSAtIG51bUlnbm9yZWRBaXJBcmdzIDwgdmFsdWUtPmNoaWxkcmVuKCkuc2l6
ZSgpIC0gbnVtSWdub3JlZEIzQXJncykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8g
UmVnYXJkbGVzcyBvZiBjb25zdHJhaW50cywgc3RhY2ttYXBzIGhhdmUgc29tZSBiYXNpYyByZXF1
aXJlbWVudHMgZm9yIHRoZWlyIGFyZ3VtZW50cy4gRm9yCiAgICAgLy8gZXhhbXBsZSwgeW91IGNh
bid0IGhhdmUgYSBub24tRlAtb2Zmc2V0IGFkZHJlc3MuIFRoaXMgdmVyaWZpZXMgdGhvc2UgY29u
ZGl0aW9ucyBhcyB3ZWxsIGFzIHRoZQogICAgIC8vIGFyZ3VtZW50IHR5cGVzLgotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3JlZEFpckFyZ3M7
ICsraSkgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZS0+Y2hpbGRyZW4oKS5z
aXplKCkgLSBudW1JZ25vcmVkQjNBcmdzOyArK2kpIHsKICAgICAgICAgVmFsdWUqIGNoaWxkID0g
dmFsdWUtPmNoaWxkKGkgKyBudW1JZ25vcmVkQjNBcmdzKTsKICAgICAgICAgQXJnJiBhcmcgPSBp
bnN0LmFyZ3NbaSArIG51bUlnbm9yZWRBaXJBcmdzXTsKIApAQCAtMTY3LDYgKzE2NywxMSBAQCBi
b29sIFN0YWNrbWFwU3BlY2lhbDo6YWRtaXRzU3RhY2tJbXBsKAogCiAgICAgdW5zaWduZWQgc3Rh
Y2ttYXBBcmdJbmRleCA9IGFyZ0luZGV4IC0gbnVtSWdub3JlZEFpckFyZ3MgKyBudW1JZ25vcmVk
QjNBcmdzOwogCisgICAgaWYgKHN0YWNrbWFwQXJnSW5kZXggPj0gdmFsdWUtPm51bUNoaWxkcmVu
KCkpIHsKKyAgICAgICAgLy8gSXQncyBub3QgYSBzdGFja21hcCBhcmd1bWVudCwgc28gYXMgZmFy
IGFzIHdlIGFyZSBjb25jZXJuZWQsIGl0IGRvZXNuJ3QgYWRtaXQgc3RhY2suCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKICAgICBpZiAoc3RhY2ttYXBBcmdJbmRleCA+PSB2YWx1ZS0+
bV9yZXBzLnNpemUoKSkgewogICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlcmUgd2FzIG5v
IGNvbnN0cmFpbnQuCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTgwLDExICsxODUsMTMgQEAg
Ym9vbCBTdGFja21hcFNwZWNpYWw6OmFkbWl0c1N0YWNrSW1wbCgKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLXZvaWQgU3RhY2ttYXBTcGVjaWFsOjphcHBlbmRSZXBzSW1wbCgKLSAgICBHZW5lcmF0
aW9uQ29udGV4dCYgY29udGV4dCwgdW5zaWduZWQgbnVtSWdub3JlZEFyZ3MsIEluc3QmIGluc3Qs
IFZlY3RvcjxWYWx1ZVJlcD4mIHJlc3VsdCkKK1ZlY3RvcjxWYWx1ZVJlcD4gU3RhY2ttYXBTcGVj
aWFsOjpyZXBzSW1wbCgKKyAgICBHZW5lcmF0aW9uQ29udGV4dCYgY29udGV4dCwgdW5zaWduZWQg
bnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3MsIEluc3QmIGluc3Qp
CiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbnVtSWdub3JlZEFyZ3M7IGkgPCBpbnN0LmFyZ3Mu
c2l6ZSgpOyArK2kpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQocmVwRm9yQXJnKCpjb250ZXh0LmNv
ZGUsIGluc3QuYXJnc1tpXSkpOworICAgIFZlY3RvcjxWYWx1ZVJlcD4gcmVzdWx0OworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnN0Lm9yaWdpbi0+bnVtQ2hpbGRyZW4oKSAtIG51bUln
bm9yZWRCM0FyZ3M7ICsraSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZChyZXBGb3JBcmcoKmNvbnRl
eHQuY29kZSwgaW5zdC5hcmdzW2kgKyBudW1JZ25vcmVkQWlyQXJnc10pKTsKKyAgICByZXR1cm4g
cmVzdWx0OwogfQogCiBib29sIFN0YWNrbWFwU3BlY2lhbDo6aXNBcmdWYWxpZEZvclZhbHVlKGNv
bnN0IEFpcjo6QXJnJiBhcmcsIFZhbHVlKiB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5oCShyZXZpc2lvbiAxOTQ1MjcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02
OSw3ICs2OSw4IEBAIHByb3RlY3RlZDoKICAgICAgICAgQWlyOjpJbnN0JiwgdW5zaWduZWQgYXJn
SW5kZXgpOwogCiAgICAgLy8gQXBwZW5kcyB0aGUgcmVwcyBmb3IgdGhlIEluc3QncyBhcmdzLCBz
dGFydGluZyB3aXRoIG51bUlnbm9yZWRBcmdzLCB0byB0aGUgZ2l2ZW4gdmVjdG9yLgotICAgIHZv
aWQgYXBwZW5kUmVwc0ltcGwoQWlyOjpHZW5lcmF0aW9uQ29udGV4dCYsIHVuc2lnbmVkIG51bUln
bm9yZWRBcmdzLCBBaXI6Okluc3QmLCBWZWN0b3I8VmFsdWVSZXA+Jik7CisgICAgVmVjdG9yPFZh
bHVlUmVwPiByZXBzSW1wbCgKKyAgICAgICAgQWlyOjpHZW5lcmF0aW9uQ29udGV4dCYsIHVuc2ln
bmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVuc2lnbmVkIG51bUlnbm9yZWRBaXJBcmdzLCBBaXI6Oklu
c3QmKTsKIAogICAgIHN0YXRpYyBib29sIGlzQXJnVmFsaWRGb3JWYWx1ZShjb25zdCBBaXI6OkFy
ZyYsIFZhbHVlKik7CiAgICAgc3RhdGljIGJvb2wgaXNBcmdWYWxpZEZvclJlcChBaXI6OkNvZGUm
LCBjb25zdCBBaXI6OkFyZyYsIGNvbnN0IFZhbHVlUmVwJik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvdGVzdGIzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvdGVzdGIzLmNwcAkocmV2aXNpb24gMTk0NTI3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL3Rlc3RiMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjE1Nyw2ICs2MTU3LDcyIEBAIHZvaWQg
dGVzdFBhdGNocG9pbnRBbnkoVmFsdWVSZXAgcmVwKQogICAgIENIRUNLKGNvbXBpbGVBbmRSdW48
aW50Pihwcm9jLCAxLCAyKSA9PSAzKTsKIH0KIAordm9pZCB0ZXN0UGF0Y2hwb2ludEdQU2NyYXRj
aCgpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2Mu
YWRkQmxvY2soKTsKKyAgICBWYWx1ZSogYXJnMSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJl
Z1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBWYWx1
ZSogYXJnMiA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9p
bnQgPSByb290LT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihwcm9jLCBJbnQzMiwgT3JpZ2lu
KCkpOworICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcxLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVy
KTsKKyAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnMiwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7
CisgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gMjsKKyAgICBwYXRjaHBv
aW50LT5zZXRHZW5lcmF0b3IoCisgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICBBbGxvd01h
Y3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAv
LyBXZSBzaG91bGRuJ3QgaGF2ZSBzcGlsbGVkIHRoZSBpbnB1dHMsIHNvIHdlIGFzc2VydCB0aGF0
IHRoZXkncmUgaW4gcmVnaXN0ZXJzLgorICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9
PSAzKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1swXS5pc0dQUigpKTsKKyAgICAgICAgICAg
IENIRUNLKHBhcmFtc1sxXS5pc0dQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1syXS5p
c0dQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5ncFNjcmF0Y2goMCkgIT0gSW52YWxp
ZEdQUlJlZyk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuZ3BTY3JhdGNoKDApICE9IHBhcmFt
c1swXS5ncHIoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuZ3BTY3JhdGNoKDApICE9IHBh
cmFtc1sxXS5ncHIoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuZ3BTY3JhdGNoKDApICE9
IHBhcmFtc1syXS5ncHIoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuZ3BTY3JhdGNoKDEp
ICE9IEludmFsaWRHUFJSZWcpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLmdwU2NyYXRjaCgx
KSAhPSBwYXJhbXMuZ3BTY3JhdGNoKDApKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5ncFNj
cmF0Y2goMSkgIT0gcGFyYW1zWzBdLmdwcigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5n
cFNjcmF0Y2goMSkgIT0gcGFyYW1zWzFdLmdwcigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFt
cy5ncFNjcmF0Y2goMSkgIT0gcGFyYW1zWzJdLmdwcigpKTsKKyAgICAgICAgICAgIENIRUNLKCFw
YXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKS5nZXQocGFyYW1zLmdwU2NyYXRjaCgwKSkpOwor
ICAgICAgICAgICAgQ0hFQ0soIXBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLmdldChwYXJh
bXMuZ3BTY3JhdGNoKDEpKSk7CisgICAgICAgICAgICBhZGQzMihqaXQsIHBhcmFtc1sxXS5ncHIo
KSwgcGFyYW1zWzJdLmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgICAgICB9KTsKKyAgICBy
b290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBwYXRj
aHBvaW50KTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jLCAxLCAyKSA9PSAz
KTsKK30KKwordm9pZCB0ZXN0UGF0Y2hwb2ludEZQU2NyYXRjaCgpCit7CisgICAgUHJvY2VkdXJl
IHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBWYWx1
ZSogYXJnMSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBWYWx1ZSogYXJnMiA9IHJvb3QtPmFwcGVu
ZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIxKTsKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSByb290LT5hcHBlbmROZXc8
UGF0Y2hwb2ludFZhbHVlPihwcm9jLCBJbnQzMiwgT3JpZ2luKCkpOworICAgIHBhdGNocG9pbnQt
PmFwcGVuZChhcmcxLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICBwYXRjaHBvaW50LT5h
cHBlbmQoYXJnMiwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgcGF0Y2hwb2ludC0+bnVt
RlBTY3JhdGNoUmVnaXN0ZXJzID0gMjsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCisg
ICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNh
Z2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAvLyBXZSBzaG91bGRuJ3QgaGF2ZSBz
cGlsbGVkIHRoZSBpbnB1dHMsIHNvIHdlIGFzc2VydCB0aGF0IHRoZXkncmUgaW4gcmVnaXN0ZXJz
LgorICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9PSAzKTsKKyAgICAgICAgICAgIENI
RUNLKHBhcmFtc1swXS5pc0dQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1sxXS5pc0dQ
UigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1syXS5pc0dQUigpKTsKKyAgICAgICAgICAg
IENIRUNLKHBhcmFtcy5mcFNjcmF0Y2goMCkgIT0gSW52YWxpZEZQUlJlZyk7CisgICAgICAgICAg
ICBDSEVDSyhwYXJhbXMuZnBTY3JhdGNoKDEpICE9IEludmFsaWRGUFJSZWcpOworICAgICAgICAg
ICAgQ0hFQ0socGFyYW1zLmZwU2NyYXRjaCgxKSAhPSBwYXJhbXMuZnBTY3JhdGNoKDApKTsKKyAg
ICAgICAgICAgIENIRUNLKCFwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKS5nZXQocGFyYW1z
LmZwU2NyYXRjaCgwKSkpOworICAgICAgICAgICAgQ0hFQ0soIXBhcmFtcy51bmF2YWlsYWJsZVJl
Z2lzdGVycygpLmdldChwYXJhbXMuZnBTY3JhdGNoKDEpKSk7CisgICAgICAgICAgICBhZGQzMihq
aXQsIHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzJdLmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOwor
ICAgICAgICB9KTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPihwcm9jLCBSZXR1
cm4sIE9yaWdpbigpLCBwYXRjaHBvaW50KTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50
Pihwcm9jLCAxLCAyKSA9PSAzKTsKK30KKwogdm9pZCB0ZXN0UGF0Y2hwb2ludExvdHNPZkxhdGVB
bnlzKCkKIHsKICAgICBQcm9jZWR1cmUgcHJvYzsKQEAgLTk1OTgsNiArOTY2NCw4IEBAIHZvaWQg
cnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKICAgICBSVU4odGVzdFBhdGNocG9pbnRGaXhlZFJlZ2lz
dGVyKCkpOwogICAgIFJVTih0ZXN0UGF0Y2hwb2ludEFueShWYWx1ZVJlcDo6V2FybUFueSkpOwog
ICAgIFJVTih0ZXN0UGF0Y2hwb2ludEFueShWYWx1ZVJlcDo6Q29sZEFueSkpOworICAgIFJVTih0
ZXN0UGF0Y2hwb2ludEdQU2NyYXRjaCgpKTsKKyAgICBSVU4odGVzdFBhdGNocG9pbnRGUFNjcmF0
Y2goKSk7CiAgICAgUlVOKHRlc3RQYXRjaHBvaW50TG90c09mTGF0ZUFueXMoKSk7CiAgICAgUlVO
KHRlc3RQYXRjaHBvaW50QW55SW1tKFZhbHVlUmVwOjpXYXJtQW55KSk7CiAgICAgUlVOKHRlc3RQ
YXRjaHBvaW50QW55SW1tKFZhbHVlUmVwOjpDb2xkQW55KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAJKHJldmlzaW9uIDE5
NDUyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMTQzLDE0ICsxNDMsMTMgQEAgdm9pZCBhbGxvY2F0ZVN0YWNrKENv
ZGUmIGNvZGUpCiAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKICAgICAgICAg
U3RhY2tTbG90TGl2ZW5lc3M6OkxvY2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5lc3MsIGJsb2NrKTsK
IAotICAgICAgICBhdXRvIGludGVyZmVyZSA9IFsmXSAoSW5zdCYgaW5zdCkgeworICAgICAgICBh
dXRvIGludGVyZmVyZSA9IFsmXSAodW5zaWduZWQgaW5zdEluZGV4KSB7CiAgICAgICAgICAgICBp
ZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJJbnRlcmZlcmluZzogIiwgV1RG
Ojpwb2ludGVyTGlzdER1bXAobG9jYWxDYWxjLmxpdmUoKSksICJcbiIpOwogCi0gICAgICAgICAg
ICBpbnN0LmZvckVhY2hBcmcoCi0gICAgICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpS
b2xlIHJvbGUsIEFyZzo6VHlwZSwgQXJnOjpXaWR0aCkgewotICAgICAgICAgICAgICAgICAgICBp
ZiAoIUFyZzo6aXNEZWYocm9sZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICBJbnN0Ojpmb3JFYWNoRGVmPEFyZz4oCisgICAgICAgICAgICAgICAgYmxvY2st
PmdldChpbnN0SW5kZXgpLCBibG9jay0+Z2V0KGluc3RJbmRleCArIDEpLAorICAgICAgICAgICAg
ICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRoKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzU3RhY2soKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzbG90ID0gYXJn
LnN0YWNrU2xvdCgpOwpAQCAtMTY3LDEyICsxNjYsMTAgQEAgdm9pZCBhbGxvY2F0ZVN0YWNrKENv
ZGUmIGNvZGUpCiAgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gYmxvY2stPnNpemUo
KTsgaW5zdEluZGV4LS07KSB7CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAg
ICAgICBkYXRhTG9nKCJBbmFseXppbmc6ICIsIGJsb2NrLT5hdChpbnN0SW5kZXgpLCAiXG4iKTsK
LSAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKLSAgICAgICAg
ICAgIGludGVyZmVyZShpbnN0KTsKKyAgICAgICAgICAgIGludGVyZmVyZShpbnN0SW5kZXgpOwog
ICAgICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUoaW5zdEluZGV4KTsKICAgICAgICAgfQotICAg
ICAgICBJbnN0IG5vcDsKLSAgICAgICAgaW50ZXJmZXJlKG5vcCk7CisgICAgICAgIGludGVyZmVy
ZSgtMSk7CiAgICAgfQogCiAgICAgaWYgKHZlcmJvc2UpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckFyZy5jcHAJKHJldmlzaW9uIDE5NDUyNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xOTMsNiArMTkzLDE1
IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBcmcKICAgICBjYXNlIEFy
Zzo6TGF0ZVVzZToKICAgICAgICAgb3V0LnByaW50KCJMYXRlVXNlIik7CiAgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEFyZzo6TGF0ZUNvbGRVc2U6CisgICAgICAgIG91dC5wcmludCgiTGF0ZUNv
bGRVc2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJnOjpFYXJseURlZjoKKyAgICAg
ICAgb3V0LnByaW50KCJFYXJseURlZiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcmc6
OlNjcmF0Y2g6CisgICAgICAgIG91dC5wcmludCgiU2NyYXRjaCIpOworICAgICAgICByZXR1cm47
CiAgICAgfQogCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAkocmV2aXNpb24gMTk0NTI3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05MiwxMCArOTIs
MTQgQEAgcHVibGljOgogICAgICAgICBDb2xkVXNlLAogCiAgICAgICAgIC8vIExhdGVVc2UgbWVh
bnMgdGhhdCB0aGUgSW5zdCB3aWxsIHJlYWQgZnJvbSB0aGlzIHZhbHVlIGFmdGVyIGRvaW5nIGl0
cyBEZWYncy4gTm90ZSB0aGF0IExhdGVVc2UKLSAgICAgICAgLy8gb24gYW4gQWRkciBvciBJbmRl
eCBzdGlsbCBtZWFucyBVc2Ugb24gdGhlIGludGVybmFsIHRlbXBvcmFyaWVzLiBMYXRlVXNlIGFs
c28gY3VycmVudGx5IGFsc28KLSAgICAgICAgLy8gaW1wbGllcyBDb2xkVXNlLgorICAgICAgICAv
LyBvbiBhbiBBZGRyIG9yIEluZGV4IHN0aWxsIG1lYW5zIFVzZSBvbiB0aGUgaW50ZXJuYWwgdGVt
cG9yYXJpZXMuIE5vdGUgdGhhdCBzcGVjaWZ5aW5nIHRoZQorICAgICAgICAvLyBzYW1lIFRtcCBv
bmNlIGFzIERlZiBhbmQgb25jZSBhcyBMYXRlVXNlIGhhcyB1bmRlZmluZWQgYmVoYXZpb3I6IHRo
ZSB1c2UgbWF5IGhhcHBlbiBiZWZvcmUKKyAgICAgICAgLy8gdGhlIGRlZiwgb3IgaXQgbWF5IGhh
cHBlbiBhZnRlciBpdC4KICAgICAgICAgTGF0ZVVzZSwKIAorICAgICAgICAvLyBDb21iaW5hdGlv
biBvZiBMYXRlVXNlIGFuZCBDb2xkVXNlLgorICAgICAgICBMYXRlQ29sZFVzZSwKKwogICAgICAg
ICAvLyBEZWYgbWVhbnMgdGhhdCB0aGUgSW5zdCB3aWxsIHdyaXRlIHRvIHRoaXMgdmFsdWUgYWZ0
ZXIgZG9pbmcgZXZlcnl0aGluZyBlbHNlLgogICAgICAgICAvLwogICAgICAgICAvLyBGb3IgVG1w
OiBUaGUgSW5zdCB3aWxsIHdyaXRlIHRvIHRoaXMgVG1wLgpAQCAtMTI3LDYgKzEzMSwxNiBAQCBw
dWJsaWM6CiAgICAgICAgIC8vIFRoaXMgaXMgYSBjb21iaW5lZCBVc2UgYW5kIFpEZWYuIEl0IG1l
YW5zIHRoYXQgYm90aCB0aGluZ3MgaGFwcGVuLgogICAgICAgICBVc2VaRGVmLAogCisgICAgICAg
IC8vIFRoaXMgaXMgbGlrZSBEZWYsIGJ1dCBpbXBsaWVzIHRoYXQgdGhlIGFzc2lnbm1lbnQgb2Nj
dXJzIGJlZm9yZSB0aGUgc3RhcnQgb2YgdGhlIEluc3QncworICAgICAgICAvLyBleGVjdXRpb24g
cmF0aGVyIHRoYW4gYWZ0ZXIuIE5vdGUgdGhhdCBzcGVjaWZ5aW5nIHRoZSBzYW1lIFRtcCBvbmNl
IGFzIEVhcmx5RGVmIGFuZCBvbmNlCisgICAgICAgIC8vIGFzIFVzZSBoYXMgdW5kZWZpbmVkIGJl
aGF2aW9yOiB0aGUgdXNlIG1heSBoYXBwZW4gYmVmb3JlIHRoZSBkZWYsIG9yIGl0IG1heSBoYXBw
ZW4gYWZ0ZXIKKyAgICAgICAgLy8gaXQuCisgICAgICAgIEVhcmx5RGVmLAorCisgICAgICAgIC8v
IFNvbWUgaW5zdHJ1Y3Rpb25zIG5lZWQgYSBzY3JhdGNoIHJlZ2lzdGVyLiBXZSBtb2RlbCB0aGlz
IGJ5IHNheWluZyB0aGF0IHRoZSB0ZW1wb3JhcnkgaXMKKyAgICAgICAgLy8gZGVmaW5lZCBlYXJs
eSBhbmQgdXNlZCBsYXRlLiBUaGlzIHJvbGUgaW1wbGllcyB0aGF0LgorICAgICAgICBTY3JhdGNo
LAorCiAgICAgICAgIC8vIFRoaXMgaXMgYSBzcGVjaWFsIGtpbmQgb2YgdXNlIHRoYXQgaXMgb25s
eSB2YWxpZCBmb3IgYWRkcmVzc2VzLiBJdCBtZWFucyB0aGF0IHRoZQogICAgICAgICAvLyBpbnN0
cnVjdGlvbiB3aWxsIGV2YWx1YXRlIHRoZSBhZGRyZXNzIGV4cHJlc3Npb24gYW5kIGNvbnN1bWUg
dGhlIGVmZmVjdGl2ZSBhZGRyZXNzLCBidXQgaXQKICAgICAgICAgLy8gd2lsbCBuZWl0aGVyIGxv
YWQgbm9yIHN0b3JlLiBUaGlzIGlzIGFuIGVzY2FwaW5nIHVzZSwgYmVjYXVzZSBub3cgdGhlIGFk
ZHJlc3MgbWF5IGJlCkBAIC0xNzEsMTAgKzE4NSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2Ug
VXNlRGVmOgogICAgICAgICBjYXNlIFVzZVpEZWY6CiAgICAgICAgIGNhc2UgTGF0ZVVzZToKKyAg
ICAgICAgY2FzZSBMYXRlQ29sZFVzZToKKyAgICAgICAgY2FzZSBTY3JhdGNoOgogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGNhc2UgRGVmOgogICAgICAgICBjYXNlIFpEZWY6CiAg
ICAgICAgIGNhc2UgVXNlQWRkcjoKKyAgICAgICAgY2FzZSBFYXJseURlZjoKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KQEAgLTE4MywxNCArMjAwLDE3IEBAIHB1
YmxpYzoKICAgICB7CiAgICAgICAgIHN3aXRjaCAocm9sZSkgewogICAgICAgICBjYXNlIENvbGRV
c2U6Ci0gICAgICAgIGNhc2UgTGF0ZVVzZToKKyAgICAgICAgY2FzZSBMYXRlQ29sZFVzZToKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBjYXNlIFVzZToKICAgICAgICAgY2FzZSBV
c2VEZWY6CiAgICAgICAgIGNhc2UgVXNlWkRlZjoKKyAgICAgICAgY2FzZSBMYXRlVXNlOgogICAg
ICAgICBjYXNlIERlZjoKICAgICAgICAgY2FzZSBaRGVmOgogICAgICAgICBjYXNlIFVzZUFkZHI6
CisgICAgICAgIGNhc2UgU2NyYXRjaDoKKyAgICAgICAgY2FzZSBFYXJseURlZjoKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KQEAgLTIxMyw2ICsyMzMsOSBAQCBw
dWJsaWM6CiAgICAgICAgIGNhc2UgWkRlZjoKICAgICAgICAgY2FzZSBVc2VBZGRyOgogICAgICAg
ICBjYXNlIExhdGVVc2U6CisgICAgICAgIGNhc2UgTGF0ZUNvbGRVc2U6CisgICAgICAgIGNhc2Ug
U2NyYXRjaDoKKyAgICAgICAgY2FzZSBFYXJseURlZjoKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTIyMCwxNyArMjQzLDc0IEBAIHB1YmxpYzoKICAgICAv
LyBSZXR1cm5zIHRydWUgaWYgdGhlIFJvbGUgaW1wbGllcyB0aGF0IHRoZSBJbnN0IHdpbGwgVXNl
IHRoZSBBcmcgYWZ0ZXIgZG9pbmcgZXZlcnl0aGluZyBlbHNlLgogICAgIHN0YXRpYyBib29sIGlz
TGF0ZVVzZShSb2xlIHJvbGUpCiAgICAgewotICAgICAgICByZXR1cm4gcm9sZSA9PSBMYXRlVXNl
OworICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKKyAgICAgICAgY2FzZSBMYXRlVXNlOgorICAgICAg
ICBjYXNlIExhdGVDb2xkVXNlOgorICAgICAgICBjYXNlIFNjcmF0Y2g6CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBDb2xkVXNlOgorICAgICAgICBjYXNlIFVzZToKKyAg
ICAgICAgY2FzZSBVc2VEZWY6CisgICAgICAgIGNhc2UgVXNlWkRlZjoKKyAgICAgICAgY2FzZSBE
ZWY6CisgICAgICAgIGNhc2UgWkRlZjoKKyAgICAgICAgY2FzZSBVc2VBZGRyOgorICAgICAgICBj
YXNlIEVhcmx5RGVmOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAgICAg
fQogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBSb2xlIGltcGxpZXMgdGhhdCB0aGUgSW5z
dCB3aWxsIERlZiB0aGUgQXJnLgotICAgIHN0YXRpYyBib29sIGlzRGVmKFJvbGUgcm9sZSkKKyAg
ICBzdGF0aWMgYm9vbCBpc0FueURlZihSb2xlIHJvbGUpCiAgICAgewogICAgICAgICBzd2l0Y2gg
KHJvbGUpIHsKICAgICAgICAgY2FzZSBVc2U6CiAgICAgICAgIGNhc2UgQ29sZFVzZToKICAgICAg
ICAgY2FzZSBVc2VBZGRyOgogICAgICAgICBjYXNlIExhdGVVc2U6CisgICAgICAgIGNhc2UgTGF0
ZUNvbGRVc2U6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgRGVmOgor
ICAgICAgICBjYXNlIFVzZURlZjoKKyAgICAgICAgY2FzZSBaRGVmOgorICAgICAgICBjYXNlIFVz
ZVpEZWY6CisgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNhc2UgU2NyYXRjaDoKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gUmV0dXJu
cyB0cnVlIGlmIHRoZSBSb2xlIGltcGxpZXMgdGhhdCB0aGUgSW5zdCB3aWxsIERlZiB0aGUgQXJn
IGJlZm9yZSBzdGFydCBvZiBleGVjdXRpb24uCisgICAgc3RhdGljIGJvb2wgaXNFYXJseURlZihS
b2xlIHJvbGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKKyAgICAgICAgY2FzZSBV
c2U6CisgICAgICAgIGNhc2UgQ29sZFVzZToKKyAgICAgICAgY2FzZSBVc2VBZGRyOgorICAgICAg
ICBjYXNlIExhdGVVc2U6CisgICAgICAgIGNhc2UgRGVmOgorICAgICAgICBjYXNlIFVzZURlZjoK
KyAgICAgICAgY2FzZSBaRGVmOgorICAgICAgICBjYXNlIFVzZVpEZWY6CisgICAgICAgIGNhc2Ug
TGF0ZUNvbGRVc2U6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgRWFy
bHlEZWY6CisgICAgICAgIGNhc2UgU2NyYXRjaDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgfQorCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBSb2xlIGltcGxp
ZXMgdGhhdCB0aGUgSW5zdCB3aWxsIERlZiB0aGUgQXJnIGFmdGVyIHRoZSBlbmQgb2YgZXhlY3V0
aW9uLgorICAgIHN0YXRpYyBib29sIGlzTGF0ZURlZihSb2xlIHJvbGUpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKHJvbGUpIHsKKyAgICAgICAgY2FzZSBVc2U6CisgICAgICAgIGNhc2UgQ29sZFVz
ZToKKyAgICAgICAgY2FzZSBVc2VBZGRyOgorICAgICAgICBjYXNlIExhdGVVc2U6CisgICAgICAg
IGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNhc2UgU2NyYXRjaDoKKyAgICAgICAgY2FzZSBMYXRl
Q29sZFVzZToKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgY2FzZSBEZWY6CiAg
ICAgICAgIGNhc2UgVXNlRGVmOgpAQCAtMjUwLDYgKzMzMCw5IEBAIHB1YmxpYzoKICAgICAgICAg
Y2FzZSBMYXRlVXNlOgogICAgICAgICBjYXNlIERlZjoKICAgICAgICAgY2FzZSBVc2VEZWY6Cisg
ICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNhc2UgU2NyYXRjaDoKKyAgICAgICAgY2Fz
ZSBMYXRlQ29sZFVzZToKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgY2FzZSBa
RGVmOgogICAgICAgICBjYXNlIFVzZVpEZWY6CkBAIC0zMzEsNiArNDE0LDExIEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgfQogCisgICAgQXJnKFJlZyByZWcpCisgICAgICAgIDogQXJnKEFpcjo6VG1w
KHJlZykpCisgICAgeworICAgIH0KKwogICAgIHN0YXRpYyBBcmcgaW1tKGludDY0X3QgdmFsdWUp
CiAgICAgewogICAgICAgICBBcmcgcmVzdWx0OwpAQCAtODgyLDcgKzk3MCw3IEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgICAgIHN3aXRjaCAobV9raW5kKSB7CiAgICAgICAgIGNhc2UgVG1wOgotICAg
ICAgICAgICAgQVNTRVJUKGlzQW55VXNlKGFyZ1JvbGUpIHx8IGlzRGVmKGFyZ1JvbGUpKTsKKyAg
ICAgICAgICAgIEFTU0VSVChpc0FueVVzZShhcmdSb2xlKSB8fCBpc0FueURlZihhcmdSb2xlKSk7
CiAgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSwgYXJnUm9sZSwgYXJnVHlwZSwgYXJnV2lkdGgp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQWRkcjoKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCShyZXZpc2lvbiAxOTQ1Mjcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC02NCw2ICs2NCwxMSBAQCBwdWJsaWM6CiAgICAgY29uc3QgSW5zdCYgYXQodW5zaWdu
ZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHNbaW5kZXhdOyB9CiAgICAgSW5zdCYgYXQo
dW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1faW5zdHNbaW5kZXhdOyB9CiAKKyAgICBJbnN0KiBn
ZXQodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gaW5kZXggPCBzaXplKCkg
PyAmYXQoaW5kZXgpIDogbnVsbHB0cjsKKyAgICB9CisKICAgICBjb25zdCBJbnN0JiBsYXN0KCkg
Y29uc3QgeyByZXR1cm4gbV9pbnN0cy5sYXN0KCk7IH0KICAgICBJbnN0JiBsYXN0KCkgeyByZXR1
cm4gbV9pbnN0cy5sYXN0KCk7IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJFbGltaW5hdGVEZWFkQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJFbGltaW5hdGVEZWFkQ29kZS5jcHAJKHJldmlzaW9uIDE5NDUyNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRWxpbWluYXRlRGVhZENvZGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTgxLDcgKzgxLDkgQEAgYm9vbCBlbGltaW5hdGVEZWFkQ29kZShDb2Rl
JiBjb2RlKQogICAgICAgICBib29sIHN0b3Jlc1RvTGl2ZSA9IGZhbHNlOwogICAgICAgICBpbnN0
LmZvckVhY2hBcmcoCiAgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwg
QXJnOjpUeXBlLCBBcmc6OldpZHRoKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFBcmc6OmlzRGVm
KHJvbGUpKQorICAgICAgICAgICAgICAgIGlmICghQXJnOjppc0FueURlZihyb2xlKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGlmIChyb2xlID09IEFyZzo6
U2NyYXRjaCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIHN0
b3Jlc1RvTGl2ZSB8PSBpc0FyZ0xpdmUoYXJnKTsKICAgICAgICAgICAgIH0pOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4UGFydGlh
bFJlZ2lzdGVyU3RhbGxzLmNwcAkocmV2aXNpb24gMTk0NTI3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJGaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTExNiw3ICsxMTYsNyBAQCB2b2lkIHVwZGF0ZURpc3RhbmNlcyhJbnN0JiBpbnN0LCBGUERl
ZkRpCiAgICAgaW5zdC5mb3JFYWNoVG1wKFsmXSAoVG1wJiB0bXAsIEFyZzo6Um9sZSByb2xlLCBB
cmc6OlR5cGUsIEFyZzo6V2lkdGgpIHsKICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSh0bXAu
aXNSZWcoKSwgIlRoaXMgcGhhc2UgbXVzdCBiZSBydW4gYWZ0ZXIgcmVnaXN0ZXIgYWxsb2NhdGlv
bi4iKTsKIAotICAgICAgICBpZiAodG1wLmlzRlBSKCkgJiYgQXJnOjppc0RlZihyb2xlKSkKKyAg
ICAgICAgaWYgKHRtcC5pc0ZQUigpICYmIEFyZzo6aXNBbnlEZWYocm9sZSkpCiAgICAgICAgICAg
ICBsb2NhbERpc3RhbmNlLmFkZCh0bXAuZnByKCksIGRpc3RhbmNlVG9CbG9ja0VuZCk7CiAgICAg
fSk7CiB9CkBAIC0yMDUsNyArMjA1LDcgQEAgdm9pZCBmaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMo
Q29kZSYgY29kZQogICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHVzZXM7CiAgICAgICAgICAg
ICAgICAgaW5zdC5mb3JFYWNoVG1wKFsmXSAoVG1wJiB0bXAsIEFyZzo6Um9sZSByb2xlLCBBcmc6
OlR5cGUsIEFyZzo6V2lkdGgpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcC5pc0ZQUigp
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0RlZihyb2xlKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55RGVmKHJvbGUpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZnMuc2V0KHRtcC5mcHIoKSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoQXJnOjppc0FueVVzZShyb2xlKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1c2VzLnNldCh0bXAuZnByKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJJbnN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0Fpckluc3QuY3BwCShyZXZpc2lvbiAxOTQ1MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpckluc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM5LDcgKzM5LDcgQEAgYm9vbCBJbnN0
OjpoYXNBcmdFZmZlY3RzKCkKICAgICBib29sIHJlc3VsdCA9IGZhbHNlOwogICAgIGZvckVhY2hB
cmcoCiAgICAgICAgIFsmXSAoQXJnJiwgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSwgQXJnOjpX
aWR0aCkgewotICAgICAgICAgICAgaWYgKEFyZzo6aXNEZWYocm9sZSkpCisgICAgICAgICAgICBp
ZiAoQXJnOjppc0FueURlZihyb2xlKSkKICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOwog
ICAgICAgICB9KTsKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJJbnN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJJbnN0LmgJKHJldmlzaW9uIDE5NDUyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlySW5zdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyNywxMCArMTI3LDE4IEBAIHB1
YmxpYzoKICAgICBjb25zdCBSZWdpc3RlclNldCYgZXh0cmFDbG9iYmVyZWRSZWdzKCk7CiAgICAg
Y29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJhRWFybHlDbG9iYmVyZWRSZWdzKCk7CiAKLSAgICAvLyBJ
dGVyYXRlIG92ZXIgdGhlIERlZnMgYW5kIHRoZSBleHRyYSBjbG9iYmVyZWQgcmVnaXN0ZXJzLiBZ
b3UgbXVzdCBzdXBwbHkgdGhlIG5leHQgaW5zdHJ1Y3Rpb24gaWYKLSAgICAvLyB0aGVyZSBpcyBv
bmUuCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICB2b2lkIGZvckVhY2hUbXBX
aXRoRXh0cmFDbG9iYmVyZWRSZWdzKEluc3QqIG5leHRJbnN0LCBjb25zdCBGdW5jdG9yJiBmdW5j
dG9yKTsKKyAgICAvLyBJdGVyYXRlIG92ZXIgYWxsIERlZidzIHRoYXQgaGFwcGVuIGF0IHRoZSBl
bmQgb2YgYW4gaW5zdHJ1Y3Rpb24uIFlvdSBzdXBwbHkgYSBwYWlyCisgICAgLy8gaW5zdHJ1Y3Rp
b25zLiBUaGUgaW5zdHJ1Y3Rpb25zIG11c3QgYXBwZWFyIG5leHQgdG8gZWFjaCBvdGhlciwgaW4g
dGhhdCBvcmRlciwgaW4gc29tZSBiYXNpYworICAgIC8vIGJsb2NrLiBZb3UgY2FuIHBhc3MgbnVs
bCBmb3IgdGhlIGZpcnN0IGluc3RydWN0aW9uIHdoZW4gYW5hbHl6aW5nIHdoYXQgaGFwcGVucyBh
dCB0aGUgdG9wIG9mCisgICAgLy8gYSBiYXNpYyBibG9jay4gWW91IGNhbiBwYXNzIG51bGwgZm9y
IHRoZSBzZWNvbmQgaW5zdHJ1Y3Rpb24gd2hlbiBhbmFseXppbmcgd2hhdCBoYXBwZW5zIGF0IHRo
ZQorICAgIC8vIGJvdHRvbSBvZiBhIGJhc2ljIGJsb2NrLgorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFRoaW5nLCB0eXBlbmFtZSBGdW5jdG9yPgorICAgIHN0YXRpYyB2b2lkIGZvckVhY2hEZWYoSW5z
dCogcHJldkluc3QsIEluc3QqIG5leHRJbnN0LCBjb25zdCBGdW5jdG9yJik7CisKKyAgICAvLyBJ
dGVyYXRlIG92ZXIgYWxsIERlZidzIHRoYXQgaGFwcGVuIGF0IHRoZSBlbmQgb2YgdGhpcyBpbnN0
cnVjdGlvbiwgaW5jbHVkaW5nIGV4dHJhIGNsb2JiZXJlZAorICAgIC8vIHJlZ2lzdGVycy4KKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUaGluZywgdHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBzdGF0aWMg
dm9pZCBmb3JFYWNoRGVmV2l0aEV4dHJhQ2xvYmJlcmVkUmVncyhJbnN0KiBwcmV2SW5zdCwgSW5z
dCogbmV4dEluc3QsIGNvbnN0IEZ1bmN0b3ImKTsKIAogICAgIC8vIFVzZSB0aGlzIHRvIHJlcG9y
dCB3aGljaCByZWdpc3RlcnMgYXJlIGxpdmUuIFRoaXMgc2hvdWxkIGJlIGRvbmUganVzdCBiZWZv
cmUgY29kZWdlbi4gTm90ZQogICAgIC8vIHRoYXQgZm9yIGVmZmljaWVuY3ksIHJlcG9ydFVzZWRS
ZWdpc3RlcnMoKSBvbmx5IHdvcmtzIGlmIGhhc1NwZWNpYWwoKSByZXR1cm5zIHRydWUuCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCShyZXZp
c2lvbiAxOTQ1MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtOTUsMjQgKzk1LDQ4IEBAIGlubGluZSBjb25zdCBSZWdpc3Rl
clNldCYgSW5zdDo6ZXh0cmFFYXIKICAgICByZXR1cm4gYXJnc1swXS5zcGVjaWFsKCktPmV4dHJh
RWFybHlDbG9iYmVyZWRSZWdzKCp0aGlzKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4KLWlubGluZSB2b2lkIEluc3Q6OmZvckVhY2hUbXBXaXRoRXh0cmFDbG9iYmVyZWRSZWdzKElu
c3QqIG5leHRJbnN0LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQordGVtcGxhdGU8dHlwZW5hbWUg
VGhpbmcsIHR5cGVuYW1lIEZ1bmN0b3I+CitpbmxpbmUgdm9pZCBJbnN0Ojpmb3JFYWNoRGVmKElu
c3QqIHByZXZJbnN0LCBJbnN0KiBuZXh0SW5zdCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKK3sK
KyAgICBpZiAocHJldkluc3QpIHsKKyAgICAgICAgcHJldkluc3QtPmZvckVhY2g8VGhpbmc+KAor
ICAgICAgICAgICAgWyZdIChUaGluZyYgdGhpbmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUg
YXJnVHlwZSwgQXJnOjpXaWR0aCBhcmdXaWR0aCkgeworICAgICAgICAgICAgICAgIGlmIChBcmc6
OmlzTGF0ZURlZihyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgZnVuY3Rvcih0aGluZywgcm9s
ZSwgYXJnVHlwZSwgYXJnV2lkdGgpOworICAgICAgICAgICAgfSk7CisgICAgfQorCisgICAgaWYg
KG5leHRJbnN0KSB7CisgICAgICAgIG5leHRJbnN0LT5mb3JFYWNoPFRoaW5nPigKKyAgICAgICAg
ICAgIFsmXSAoVGhpbmcmIHRoaW5nLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIGFyZ1R5cGUs
IEFyZzo6V2lkdGggYXJnV2lkdGgpIHsKKyAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0Vhcmx5
RGVmKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICBmdW5jdG9yKHRoaW5nLCByb2xlLCBhcmdU
eXBlLCBhcmdXaWR0aCk7CisgICAgICAgICAgICB9KTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFRoaW5nLCB0eXBlbmFtZSBGdW5jdG9yPgoraW5saW5lIHZvaWQgSW5zdDo6Zm9yRWFj
aERlZldpdGhFeHRyYUNsb2JiZXJlZFJlZ3MoCisgICAgSW5zdCogcHJldkluc3QsIEluc3QqIG5l
eHRJbnN0LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogewotICAgIGZvckVhY2hUbXAoCi0gICAg
ICAgIFsmXSAoVG1wJiB0bXBBcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgYXJnVHlwZSwg
QXJnOjpXaWR0aCBhcmdXaWR0aCkgewotICAgICAgICAgICAgZnVuY3Rvcih0bXBBcmcsIHJvbGUs
IGFyZ1R5cGUsIGFyZ1dpZHRoKTsKLSAgICAgICAgfSk7CisgICAgZm9yRWFjaERlZjxUaGluZz4o
cHJldkluc3QsIG5leHRJbnN0LCBmdW5jdG9yKTsKIAorICAgIEFyZzo6Um9sZSByZWdEZWZSb2xl
OworICAgIAogICAgIGF1dG8gcmVwb3J0UmVnID0gWyZdIChSZWcgcmVnKSB7CiAgICAgICAgIEFy
Zzo6VHlwZSB0eXBlID0gcmVnLmlzR1BSKCkgPyBBcmc6OkdQIDogQXJnOjpGUDsKLSAgICAgICAg
ZnVuY3RvcihUbXAocmVnKSwgQXJnOjpEZWYsIHR5cGUsIEFyZzo6Y29uc2VydmF0aXZlV2lkdGgo
dHlwZSkpOworICAgICAgICBmdW5jdG9yKFRoaW5nKHJlZyksIHJlZ0RlZlJvbGUsIHR5cGUsIEFy
Zzo6Y29uc2VydmF0aXZlV2lkdGgodHlwZSkpOwogICAgIH07CiAKLSAgICBpZiAoaGFzU3BlY2lh
bCgpKQotICAgICAgICBleHRyYUNsb2JiZXJlZFJlZ3MoKS5mb3JFYWNoKHJlcG9ydFJlZyk7Cisg
ICAgaWYgKHByZXZJbnN0ICYmIHByZXZJbnN0LT5oYXNTcGVjaWFsKCkpIHsKKyAgICAgICAgcmVn
RGVmUm9sZSA9IEFyZzo6RGVmOworICAgICAgICBwcmV2SW5zdC0+ZXh0cmFDbG9iYmVyZWRSZWdz
KCkuZm9yRWFjaChyZXBvcnRSZWcpOworICAgIH0KIAotICAgIGlmIChuZXh0SW5zdCAmJiBuZXh0
SW5zdC0+aGFzU3BlY2lhbCgpKQorICAgIGlmIChuZXh0SW5zdCAmJiBuZXh0SW5zdC0+aGFzU3Bl
Y2lhbCgpKSB7CisgICAgICAgIHJlZ0RlZlJvbGUgPSBBcmc6OkVhcmx5RGVmOwogICAgICAgICBu
ZXh0SW5zdC0+ZXh0cmFFYXJseUNsb2JiZXJlZFJlZ3MoKS5mb3JFYWNoKHJlcG9ydFJlZyk7Cisg
ICAgfQogfQogCiBpbmxpbmUgdm9pZCBJbnN0OjpyZXBvcnRVc2VkUmVnaXN0ZXJzKGNvbnN0IFJl
Z2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5j
cHAJKHJldmlzaW9uIDE5NDUyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
SXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NzAsNDAg
Kzc3MCw0MyBAQCBwcml2YXRlOgogICAgICAgICAgICAgdHlwZW5hbWUgVG1wTGl2ZW5lc3M8dHlw
ZT46OkxvY2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5lc3MsIGJsb2NrKTsKICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5zdEluZGV4LS07KSB7CiAg
ICAgICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOwotICAgICAg
ICAgICAgICAgIEluc3QqIG5leHRJbnN0ID0gaW5zdEluZGV4ICsgMSA8IGJsb2NrLT5zaXplKCkg
PyAmYmxvY2stPmF0KGluc3RJbmRleCArIDEpIDogbnVsbHB0cjsKLSAgICAgICAgICAgICAgICBi
dWlsZChpbnN0LCBuZXh0SW5zdCwgbG9jYWxDYWxjKTsKKyAgICAgICAgICAgICAgICBJbnN0KiBu
ZXh0SW5zdCA9IGJsb2NrLT5nZXQoaW5zdEluZGV4ICsgMSk7CisgICAgICAgICAgICAgICAgYnVp
bGQoJmluc3QsIG5leHRJbnN0LCBsb2NhbENhbGMpOwogICAgICAgICAgICAgICAgIGxvY2FsQ2Fs
Yy5leGVjdXRlKGluc3RJbmRleCk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBidWlsZChu
dWxscHRyLCAmYmxvY2stPmF0KDApLCBsb2NhbENhbGMpOwogICAgICAgICB9CiAgICAgfQogCi0g
ICAgdm9pZCBidWlsZChJbnN0JiBpbnN0LCBJbnN0KiBuZXh0SW5zdCwgY29uc3QgdHlwZW5hbWUg
VG1wTGl2ZW5lc3M8dHlwZT46OkxvY2FsQ2FsYyYgbG9jYWxDYWxjKQorICAgIHZvaWQgYnVpbGQo
SW5zdCogcHJldkluc3QsIEluc3QqIG5leHRJbnN0LCBjb25zdCB0eXBlbmFtZSBUbXBMaXZlbmVz
czx0eXBlPjo6TG9jYWxDYWxjJiBsb2NhbENhbGMpCiAgICAgewotICAgICAgICBpbnN0LmZvckVh
Y2hUbXBXaXRoRXh0cmFDbG9iYmVyZWRSZWdzKAotICAgICAgICAgICAgbmV4dEluc3QsCi0gICAg
ICAgICAgICBbJl0gKGNvbnN0IFRtcCYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIGFy
Z1R5cGUsIEFyZzo6V2lkdGgpIHsKLSAgICAgICAgICAgICAgICBpZiAoIUFyZzo6aXNEZWYocm9s
ZSkgfHwgYXJnVHlwZSAhPSB0eXBlKQorICAgICAgICBJbnN0Ojpmb3JFYWNoRGVmV2l0aEV4dHJh
Q2xvYmJlcmVkUmVnczxUbXA+KAorICAgICAgICAgICAgcHJldkluc3QsIG5leHRJbnN0LAorICAg
ICAgICAgICAgWyZdIChjb25zdCBUbXAmIGFyZywgQXJnOjpSb2xlLCBBcmc6OlR5cGUgYXJnVHlw
ZSwgQXJnOjpXaWR0aCkgeworICAgICAgICAgICAgICAgIGlmIChhcmdUeXBlICE9IHR5cGUpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAvLyBBbGwgdGhlIERlZigpcyBpbnRlcmZlcmUgd2l0aCBlYWNoIG90aGVyIGFuZCB3aXRo
IGFsbCB0aGUgZXh0cmEgY2xvYmJlcmVkIFRtcHMuCiAgICAgICAgICAgICAgICAgLy8gV2Ugc2hv
dWxkIG5vdCB1c2UgZm9yRWFjaERlZkFuZEV4dHJhQ2xvYmJlcmVkVG1wKCkgaGVyZSBzaW5jZSBj
b2xvcmVkIFRtcHMKICAgICAgICAgICAgICAgICAvLyBkbyBub3QgbmVlZCBpbnRlcmZlcmVuY2Ug
ZWRnZXMgaW4gb3VyIGltcGxlbWVudGF0aW9uLgotICAgICAgICAgICAgICAgIGluc3QuZm9yRWFj
aFRtcChbJl0gKFRtcCYgb3RoZXJBcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgYXJnVHlw
ZSwgQXJnOjpXaWR0aCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIUFyZzo6aXNEZWYocm9s
ZSkgfHwgYXJnVHlwZSAhPSB0eXBlKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgICAgICAgICAgICAgIGFkZEVkZ2UoYXJnLCBvdGhlckFyZyk7Ci0gICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICAgICAgSW5zdDo6Zm9yRWFjaERlZjxUbXA+KAorICAgICAg
ICAgICAgICAgICAgICBwcmV2SW5zdCwgbmV4dEluc3QsCisgICAgICAgICAgICAgICAgICAgIFsm
XSAoVG1wJiBvdGhlckFyZywgQXJnOjpSb2xlLCBBcmc6OlR5cGUgYXJnVHlwZSwgQXJnOjpXaWR0
aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ1R5cGUgIT0gdHlwZSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVkZ2UoYXJnLCBvdGhlckFyZyk7CisgICAgICAg
ICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7CiAKLSAgICAgICAgaWYgKG1heUJlQ29h
bGVzY2FibGUoaW5zdCkpIHsKKyAgICAgICAgaWYgKHByZXZJbnN0ICYmIG1heUJlQ29hbGVzY2Fi
bGUoKnByZXZJbnN0KSkgewogICAgICAgICAgICAgLy8gV2UgZG8gbm90IHdhbnQgdGhlIFVzZSgp
IG9mIHRoaXMgbW92ZSB0byBpbnRlcmZlcmUgd2l0aCB0aGUgRGVmKCksIGV2ZW4gaWYgaXQgaXMg
bGl2ZQogICAgICAgICAgICAgLy8gYWZ0ZXIgdGhlIE1vdmUuIElmIHdlIHdlcmUgdG8gYWRkIHRo
ZSBpbnRlcmZlcmVuY2UgZWRnZSwgaXQgd291bGQgYmUgaW1wb3NzaWJsZSB0bwogICAgICAgICAg
ICAgLy8gY29hbGVzY2UgdGhlIE1vdmUgZXZlbiBpZiB0aGUgdHdvIFRtcCBuZXZlciBpbnRlcmZl
cmUgYW55d2hlcmUuCiAgICAgICAgICAgICBUbXAgZGVmVG1wOwogICAgICAgICAgICAgVG1wIHVz
ZVRtcDsKLSAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcChbJmRlZlRtcCwgJnVzZVRtcF0gKFRt
cCYgYXJnVG1wLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRoKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKEFyZzo6aXNEZWYocm9sZSkpCisgICAgICAgICAgICBwcmV2SW5zdC0+
Zm9yRWFjaFRtcChbJmRlZlRtcCwgJnVzZVRtcF0gKFRtcCYgYXJnVG1wLCBBcmc6OlJvbGUgcm9s
ZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRoKSB7CisgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNM
YXRlRGVmKHJvbGUpKQogICAgICAgICAgICAgICAgICAgICBkZWZUbXAgPSBhcmdUbXA7CiAgICAg
ICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChBcmc6OmlzRWFy
bHlVc2Uocm9sZSkpOwpAQCAtODIyLDcgKzgyNSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBB
U1NFUlQobmV4dE1vdmVJbmRleCA8PSBtX2FjdGl2ZU1vdmVzLnNpemUoKSk7CiAgICAgICAgICAg
ICBtX2FjdGl2ZU1vdmVzLmVuc3VyZVNpemUobmV4dE1vdmVJbmRleCArIDEpOwogCi0gICAgICAg
ICAgICBmb3IgKGNvbnN0IEFyZyYgYXJnIDogaW5zdC5hcmdzKSB7CisgICAgICAgICAgICBmb3Ig
KGNvbnN0IEFyZyYgYXJnIDogcHJldkluc3QtPmFyZ3MpIHsKICAgICAgICAgICAgICAgICBhdXRv
JiBsaXN0ID0gbV9tb3ZlTGlzdFtBYnNvbHV0ZVRtcE1hcHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRl
eChhcmcudG1wKCkpXTsKICAgICAgICAgICAgICAgICBsaXN0LmFkZChuZXh0TW92ZUluZGV4KTsK
ICAgICAgICAgICAgIH0KQEAgLTgzMiwyNiArODM1LDIwIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgICAgIGFkZEVkZ2UoZGVmVG1wLCBsaXZlVG1wKTsKICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgLy8gVGhlIG5leHQgaW5zdHJ1Y3Rpb24gY291bGQgaGF2ZSBlYXJseSBjbG9iYmVy
cy4gV2UgbmVlZCB0byBjb25zaWRlciB0aG9zZSBub3cuCi0gICAgICAgICAgICBpZiAobmV4dElu
c3QgJiYgbmV4dEluc3QtPmhhc1NwZWNpYWwoKSkgewotICAgICAgICAgICAgICAgIG5leHRJbnN0
LT5leHRyYUVhcmx5Q2xvYmJlcmVkUmVncygpLmZvckVhY2goWyZdIChSZWcgcmVnKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChyZWcuaXNHUFIoKSA9PSAodHlwZSA9PSBBcmc6OkdQKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBUbXAmIGxpdmVUbXAgOiBsb2NhbENh
bGMubGl2ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVkZ2UoVG1wKHJlZyks
IGxpdmVUbXApOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBUaGUgbmV4dCBpbnN0cnVjdGlvbiBjb3VsZCBo
YXZlIGVhcmx5IGNsb2JiZXJzIG9yIGVhcmx5IGRlZidzLiBXZSBuZWVkIHRvIGNvbnNpZGVyCisg
ICAgICAgICAgICAvLyB0aG9zZSBub3cuCisgICAgICAgICAgICBhZGRFZGdlcyhudWxscHRyLCBu
ZXh0SW5zdCwgbG9jYWxDYWxjLmxpdmUoKSk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
YWRkRWRnZXMoaW5zdCwgbmV4dEluc3QsIGxvY2FsQ2FsYy5saXZlKCkpOworICAgICAgICAgICAg
YWRkRWRnZXMocHJldkluc3QsIG5leHRJbnN0LCBsb2NhbENhbGMubGl2ZSgpKTsKICAgICB9CiAK
LSAgICB2b2lkIGFkZEVkZ2VzKEluc3QmIGluc3QsIEluc3QqIG5leHRJbnN0LCB0eXBlbmFtZSBU
bXBMaXZlbmVzczx0eXBlPjo6TG9jYWxDYWxjOjpJdGVyYWJsZSBsaXZlVG1wcykKKyAgICB2b2lk
IGFkZEVkZ2VzKEluc3QqIHByZXZJbnN0LCBJbnN0KiBuZXh0SW5zdCwgdHlwZW5hbWUgVG1wTGl2
ZW5lc3M8dHlwZT46OkxvY2FsQ2FsYzo6SXRlcmFibGUgbGl2ZVRtcHMpCiAgICAgewogICAgICAg
ICAvLyBBbGwgdGhlIERlZigpcyBpbnRlcmZlcmUgd2l0aCBldmVydGhpbmcgbGl2ZS4KLSAgICAg
ICAgaW5zdC5mb3JFYWNoVG1wV2l0aEV4dHJhQ2xvYmJlcmVkUmVncygKLSAgICAgICAgICAgIG5l
eHRJbnN0LAotICAgICAgICAgICAgWyZdIChjb25zdCBUbXAmIGFyZywgQXJnOjpSb2xlIHJvbGUs
IEFyZzo6VHlwZSBhcmdUeXBlLCBBcmc6OldpZHRoKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFB
cmc6OmlzRGVmKHJvbGUpIHx8IGFyZ1R5cGUgIT0gdHlwZSkKKyAgICAgICAgSW5zdDo6Zm9yRWFj
aERlZldpdGhFeHRyYUNsb2JiZXJlZFJlZ3M8VG1wPigKKyAgICAgICAgICAgIHByZXZJbnN0LCBu
ZXh0SW5zdCwKKyAgICAgICAgICAgIFsmXSAoY29uc3QgVG1wJiBhcmcsIEFyZzo6Um9sZSwgQXJn
OjpUeXBlIGFyZ1R5cGUsIEFyZzo6V2lkdGgpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXJnVHlw
ZSAhPSB0eXBlKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBUbXAmIGxpdmVUbXAgOiBsaXZlVG1wcykgewpA
QCAtMTI0MiwxNiArMTIzOSwxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBpZiAo
QXJnOjppc0FueVVzZShyb2xlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgVG1wIG5ld1Rt
cCA9IG1fY29kZS5uZXdUbXAodHlwZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRp
b25TZXQuaW5zZXJ0KGluc3RJbmRleCwgbW92ZSwgaW5zdC5vcmlnaW4sIGFyZywgbmV3VG1wKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IG5ld1RtcDsKKyAgICAgICAgICAgICAgICAg
ICAgdG1wID0gbV9jb2RlLm5ld1RtcCh0eXBlKTsKKyAgICAgICAgICAgICAgICAgICAgdW5zcGls
bGFibGVUbXBzLmFkZChBYnNvbHV0ZVRtcE1hcHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleCh0bXAp
KTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQW55IG5ldyBGaWxsKCkgc2hvdWxkIG5l
dmVyIGJlIHNwaWxsZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnNwaWxsYWJsZVRtcHMu
YWRkKEFic29sdXRlVG1wTWFwcGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4KHRtcCkpOworICAgICAg
ICAgICAgICAgICAgICBpZiAocm9sZSAhPSBBcmc6OlNjcmF0Y2gpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChBcmc6OmlzQW55VXNlKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoaW5zdEluZGV4LCBtb3ZlLCBpbnN0Lm9yaWdpbiwg
YXJnLCB0bXApOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlEZWYocm9s
ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydChpbnN0
SW5kZXggKyAxLCBtb3ZlLCBpbnN0Lm9yaWdpbiwgdG1wLCBhcmcpOwogICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzRGVmKHJvbGUpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydChpbnN0SW5kZXggKyAxLCBtb3Zl
LCBpbnN0Lm9yaWdpbiwgdG1wLCBhcmcpOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAkocmV2aXNpb24gMTk0NTI3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTExOCw2ICsxMTgsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGZvciAoc2l6
ZV90IGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykKICAgICAgICAgICAg
ICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUoaW5zdEluZGV4KTsKIAorICAgICAgICAgICAgICAg
IC8vIEhhbmRsZSB0aGUgZWFybHkgZGVmJ3Mgb2YgdGhlIGZpcnN0IGluc3RydWN0aW9uLgorICAg
ICAgICAgICAgICAgIGJsb2NrLT5hdCgwKS5mb3JFYWNoPHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5n
PigKKyAgICAgICAgICAgICAgICAgICAgWyZdICh0eXBlbmFtZSBBZGFwdGVyOjpUaGluZyYgdGhp
bmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgdHlwZSwgQXJnOjpXaWR0aCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNFYXJseURlZihyb2xlKSAmJiBBZGFwdGVyOjph
Y2NlcHRzVHlwZSh0eXBlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3dvcmtzZXQu
cmVtb3ZlKEFkYXB0ZXI6OnZhbHVlVG9JbmRleCh0aGluZykpOworICAgICAgICAgICAgICAgICAg
ICB9KTsKKwogICAgICAgICAgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4mIGxpdmVBdEhlYWQgPSBt
X2xpdmVBdEhlYWRbYmxvY2tdOwogCiAgICAgICAgICAgICAgICAgLy8gV2Ugb25seSBjYXJlIGFi
b3V0IFRtcHMgdGhhdCB3ZXJlIGRpc2NvdmVyZWQgaW4gdGhpcyBpdGVyYXRpb24uIEl0IGlzIGlt
cG9zc2libGUKQEAgLTIxMywxMCArMjIwLDIxIEBAIHB1YmxpYzoKICAgICAgICAgewogICAgICAg
ICAgICAgSW5zdCYgaW5zdCA9IG1fYmxvY2stPmF0KGluc3RJbmRleCk7CiAgICAgICAgICAgICBh
dXRvJiB3b3Jrc2V0ID0gbV9saXZlbmVzcy5tX3dvcmtzZXQ7CisKKyAgICAgICAgICAgIC8vIEZp
cnN0IGhhbmRsZSB0aGUgZWFybHkgZGVmJ3Mgb2YgdGhlIG5leHQgaW5zdHJ1Y3Rpb24uCisgICAg
ICAgICAgICBpZiAoaW5zdEluZGV4ICsgMSA8IG1fYmxvY2stPnNpemUoKSkgeworICAgICAgICAg
ICAgICAgIEluc3QmIG5leHRJbnN0ID0gbV9ibG9jay0+YXQoaW5zdEluZGV4ICsgMSk7CisgICAg
ICAgICAgICAgICAgbmV4dEluc3QuZm9yRWFjaDx0eXBlbmFtZSBBZGFwdGVyOjpUaGluZz4oCisg
ICAgICAgICAgICAgICAgICAgIFsmXSAodHlwZW5hbWUgQWRhcHRlcjo6VGhpbmcmIHRoaW5nLCBB
cmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIHR5cGUsIEFyZzo6V2lkdGgpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChBcmc6OmlzRWFybHlEZWYocm9sZSkgJiYgQWRhcHRlcjo6YWNjZXB0
c1R5cGUodHlwZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya3NldC5yZW1vdmUo
QWRhcHRlcjo6dmFsdWVUb0luZGV4KHRoaW5nKSk7CisgICAgICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBGaXJzdCBoYW5kbGUg
ZGVmJ3MuCiAgICAgICAgICAgICBpbnN0LmZvckVhY2g8dHlwZW5hbWUgQWRhcHRlcjo6VGhpbmc+
KAogICAgICAgICAgICAgICAgIFsmXSAodHlwZW5hbWUgQWRhcHRlcjo6VGhpbmcmIHRoaW5nLCBB
cmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIHR5cGUsIEFyZzo6V2lkdGgpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKEFyZzo6aXNEZWYocm9sZSkgJiYgQWRhcHRlcjo6YWNjZXB0c1R5cGUodHlw
ZSkpCisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzTGF0ZURlZihyb2xlKSAmJiBBZGFw
dGVyOjphY2NlcHRzVHlwZSh0eXBlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtzZXQu
cmVtb3ZlKEFkYXB0ZXI6OnZhbHVlVG9JbmRleCh0aGluZykpOwogICAgICAgICAgICAgICAgIH0p
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGlu
Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGls
bEV2ZXJ5dGhpbmcuY3BwCShyZXZpc2lvbiAxOTQ1MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTMsNyArNTMs
NyBAQCB2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJiBjb2RlKQogCiAgICAgICAgIHVzZWRSZWdp
c3RlcnNbYmxvY2tdLnJlc2l6ZShibG9jay0+c2l6ZSgpICsgMSk7CiAKLSAgICAgICAgYXV0byBz
ZXRVc2VkUmVnaXN0ZXJzID0gWyZdICh1bnNpZ25lZCBpbmRleCwgSW5zdCYgaW5zdCkgeworICAg
ICAgICBhdXRvIHNldFVzZWRSZWdpc3RlcnMgPSBbJl0gKHVuc2lnbmVkIGluZGV4KSB7CiAgICAg
ICAgICAgICBSZWdpc3RlclNldCYgcmVnaXN0ZXJTZXQgPSB1c2VkUmVnaXN0ZXJzW2Jsb2NrXVtp
bmRleF07CiAgICAgICAgICAgICBmb3IgKFRtcCB0bXAgOiBncExvY2FsQ2FsYy5saXZlKCkpIHsK
ICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpCkBAIC02NiwyMyArNjYsMjAgQEAgdm9p
ZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29kZSkKIAogICAgICAgICAgICAgLy8gR290dGEgYWNj
b3VudCBmb3IgZGVhZCBhc3NpZ25tZW50cyB0byByZWdpc3RlcnMuIFRoZXNlIG1heSBoYXBwZW4g
YmVjYXVzZSB0aGUgaW5wdXQKICAgICAgICAgICAgIC8vIGNvZGUgaXMgc3Vib3B0aW1hbC4KLSAg
ICAgICAgICAgIGluc3QuZm9yRWFjaFRtcFdpdGhFeHRyYUNsb2JiZXJlZFJlZ3MoCi0gICAgICAg
ICAgICAgICAgaW5kZXggPCBibG9jay0+c2l6ZSgpID8gJmJsb2NrLT5hdChpbmRleCkgOiBudWxs
cHRyLAotICAgICAgICAgICAgICAgIFsmcmVnaXN0ZXJTZXRdIChjb25zdCBUbXAmIHRtcCwgQXJn
OjpSb2xlIHJvbGUsIEFyZzo6VHlwZSwgQXJnOjpXaWR0aCkgewotICAgICAgICAgICAgICAgICAg
ICBpZiAodG1wLmlzUmVnKCkgJiYgQXJnOjppc0RlZihyb2xlKSkKKyAgICAgICAgICAgIEluc3Q6
OmZvckVhY2hEZWZXaXRoRXh0cmFDbG9iYmVyZWRSZWdzPFRtcD4oCisgICAgICAgICAgICAgICAg
YmxvY2stPmdldChpbmRleCAtIDEpLCBibG9jay0+Z2V0KGluZGV4KSwKKyAgICAgICAgICAgICAg
ICBbJl0gKGNvbnN0IFRtcCYgdG1wLCBBcmc6OlJvbGUsIEFyZzo6VHlwZSwgQXJnOjpXaWR0aCkg
eworICAgICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICByZWdpc3RlclNldC5zZXQodG1wLnJlZygpKTsKICAgICAgICAgICAgICAgICB9KTsK
ICAgICAgICAgfTsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IGJsb2NrLT5z
aXplKCk7IGluc3RJbmRleC0tOykgewotICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5h
dChpbnN0SW5kZXgpOwotICAgICAgICAgICAgc2V0VXNlZFJlZ2lzdGVycyhpbnN0SW5kZXggKyAx
LCBpbnN0KTsKKyAgICAgICAgICAgIHNldFVzZWRSZWdpc3RlcnMoaW5zdEluZGV4ICsgMSk7CiAg
ICAgICAgICAgICBncExvY2FsQ2FsYy5leGVjdXRlKGluc3RJbmRleCk7CiAgICAgICAgICAgICBm
cExvY2FsQ2FsYy5leGVjdXRlKGluc3RJbmRleCk7CiAgICAgICAgIH0KLQotICAgICAgICBJbnN0
IG5vcDsKLSAgICAgICAgc2V0VXNlZFJlZ2lzdGVycygwLCBub3ApOworICAgICAgICBzZXRVc2Vk
UmVnaXN0ZXJzKDApOwogICAgIH0KIAogICAgIC8vIEFsbG9jYXRlIGEgc3RhY2sgc2xvdCBmb3Ig
ZWFjaCB0bXAuCkBAIC0xMzMsNiArMTMwLDcgQEAgdm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYg
Y29kZSkKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChyb2xlKSB7CiAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgQXJnOjpVc2U6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpDb2xk
VXNlOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6RWFybHlEZWY6CiAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiByZWdzSW5Qcmlvcml0eU9yZGVyKHR5cGUpKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXRCZWZvcmUuZ2V0KHJlZykpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QmVmb3JlLnNldChyZWcpOwpAQCAt
MTU0LDYgKzE1Miw4IEBAIHZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUmIGNvZGUpCiAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgQXJnOjpVc2VEZWY6CiAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
QXJnOjpVc2VaRGVmOgogICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6TGF0ZVVzZToKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkxhdGVDb2xkVXNlOgorICAgICAgICAgICAgICAg
ICAgICBjYXNlIEFyZzo6U2NyYXRjaDoKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoUmVn
IHJlZyA6IHJlZ3NJblByaW9yaXR5T3JkZXIodHlwZSkpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIXNldEJlZm9yZS5nZXQocmVnKSAmJiAhc2V0QWZ0ZXIuZ2V0KHJlZykpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QWZ0ZXIuc2V0KHJlZyk7CkBAIC0x
NzQsMTMgKzE3NCwxMSBAQCB2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJiBjb2RlKQogCiAgICAg
ICAgICAgICAgICAgICAgIE9wY29kZSBtb3ZlID0gdHlwZSA9PSBBcmc6OkdQID8gTW92ZSA6IE1v
dmVEb3VibGU7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlVc2Uocm9sZSkp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW5zdEluZGV4LCBtb3ZlLCBpbnN0Lm9yaWdpbiwgYXJnLCB0
bXApOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChBcmc6
OmlzRGVmKHJvbGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5z
ZXJ0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RJbmRleCArIDEsIG1vdmUsIGlu
c3Qub3JpZ2luLCB0bXAsIGFyZyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChyb2xlICE9IEFy
Zzo6U2NyYXRjaCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlVc2Uo
cm9sZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydChp
bnN0SW5kZXgsIG1vdmUsIGluc3Qub3JpZ2luLCBhcmcsIHRtcCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoQXJnOjppc0FueURlZihyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KGluc3RJbmRleCArIDEsIG1vdmUsIGluc3Qub3JpZ2lu
LCB0bXAsIGFyZyk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9KTsK
ICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXBXaWR0
aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXBX
aWR0aC5jcHAJKHJldmlzaW9uIDE5NDUyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyVG1wV2lkdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksNyArMTE5LDcgQEAgdm9p
ZCBUbXBXaWR0aDo6cmVjb21wdXRlKENvZGUmIGNvZGUpCiAKICAgICAgICAgICAgICAgICAgICAg
aWYgKEFyZzo6aXNaRGVmKHJvbGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGhzLmRl
ZiA9IHN0ZDo6bWF4KHdpZHRocy5kZWYsIHdpZHRoKTsKLSAgICAgICAgICAgICAgICAgICAgZWxz
ZSBpZiAoQXJnOjppc0RlZihyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoQXJn
Ojppc0FueURlZihyb2xlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRocy5kZWYgPSBB
cmc6OmNvbnNlcnZhdGl2ZVdpZHRoKHR5cGUpOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclVzZUNvdW50cy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVXNlQ291bnRzLmgJ
KHJldmlzaW9uIDE5NDUyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVXNl
Q291bnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDcgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvdW50cy5udW1XYXJtVXNlcyArPSBmcmVxdWVuY3k7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0NvbGRVc2Uocm9sZSkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY291bnRzLm51bUNvbGRVc2VzICs9IGZyZXF1ZW5jeTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzRGVmKHJvbGUpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlEZWYocm9sZSkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY291bnRzLm51bURlZnMgKz0gZnJlcXVlbmN5OwogICAgICAgICAgICAgICAgICAg
ICB9KTsKICAgICAgICAgICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268175</attachid>
            <date>2016-01-03 22:17:48 -0800</date>
            <delta_ts>2016-01-04 09:40:57 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>59506</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk0NTI3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMiBA
QAorMjAxNi0wMS0wMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEIzIHBhdGNocG9pbnRzIHNob3VsZCBhbGxvdyByZXF1ZXN0aW5nIHNjcmF0Y2ggcmVnaXN0ZXJz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI2NjkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTY3JhdGNo
IHJlZ2lzdGVycyBhcmUgc29tZXRoaW5nIHRoYXQgd2Ugb2Z0ZW4gbmVlZCBpbiBtYW55IHBhdGNo
cG9pbnQgdXNlIGNhc2VzLiBJbiBMTFZNJ3MKKyAgICAgICAgcGF0Y2hwb2ludHMsIHdlIGRpZG4n
dCBoYXZlIGEgZ29vZCB3YXkgdG8gcmVxdWVzdCBzY3JhdGNoIHJlZ2lzdGVycy4gU28sIG91ciBj
dXJyZW50IEZUTCBjb2RlCisgICAgICAgIG9mdGVuIGRvZXMgY3Jhenkgc2NyYXRjaCByZWdpc3Rl
ciBhbGxvY2F0aW9uIG1hZG5lc3MgZXZlbiB3aGVuIGl0IHdvdWxkIGJlIGJldHRlciB0byBqdXN0
IGFzaworICAgICAgICB0aGUgYmFja2VuZCBmb3Igc29tZSByZWdpc3RlcnMuIFRoaXMgcGF0Y2gg
YWRkcyBhIG1lY2hhbmlzbSBmb3IgcmVxdWVzdGluZyBzY3JhdGNoIHJlZ2lzdGVycworICAgICAg
ICBpbiBCMywgYW5kIHdpcmVzIGl0IGFsbCB0aGUgd2F5IHRvIGFsbCBvZiBvdXIgcmVnaXN0ZXIg
YWxsb2NhdGlvbiBhbmQgbGl2ZW5lc3MKKyAgICAgICAgaW5mcmFzdHJ1Y3R1cmUuCisKKyAgICAg
ICAgRnJvbSB0aGUgc3RhbmRwb2ludCBvZiBhIHBhdGNocG9pbnQsIGEgInNjcmF0Y2ggcmVnaXN0
ZXIiIGlzIGFuIGluc3RydWN0aW9uIGFyZ3VtZW50IHRoYXQKKyAgICAgICAgb25seSBhZG1pdHMg
VG1wIGFuZCBpcyBkZWZpbmVkIGVhcmx5IChsaWtlIGFuIGVhcmx5IGNsb2JiZXIgcmVnaXN0ZXIp
IGFuZCBpcyB1c2VkIGxhdGUgKGxpa2UKKyAgICAgICAgd2hhdCB3ZSBwcmV2aW91c2x5IGNhbGxl
ZCBMYXRlVXNlLCBleGNlcHQgdGhhdCB0aGlzIHRpbWUgaXQncyBhbHNvIGEgd2FybSB1c2UpLiBX
ZSBhbHJlYWR5CisgICAgICAgIGhhZCB0aGUgYmVnaW5uaW5nIG9mIHN1cHBvcnQgZm9yIGVhcmx5
IGRlZidzIGJlY2F1c2Ugb2YgZWFybHkgY2xvYmJlcnMsIGFuZCB3ZSBhbHJlYWR5CisgICAgICAg
IHN1cHBvcnRlZCBsYXRlIHVzZXMgYWxiZWl0IGNvbGQgb25lcy4gSSByZWFsbHkgb25seSBuZWVk
ZWQgdG8gYWRkIG9uZSBuZXcgcm9sZTogIlNjcmF0Y2giLAorICAgICAgICB3aGljaCBtZWFucyBi
b3RoIGVhcmx5IGRlZiBhbmQgbGF0ZSB1c2UgaW4gbXVjaCB0aGUgc2FtZSB3YXkgYXMgIlVzZURl
ZiIgbWVhbnMgYm90aCBlYXJseQorICAgICAgICB1c2UgYW5kIGxhdGUgZGVmLiBCdXQsIGl0IGZl
ZWxzIGJldHRlciB0byBjb21wbGV0ZSB0aGUgc2V0IG9mIHJvbGVzLCBzbyBJIGFkZGVkIExhdGVD
b2xkVXNlCisgICAgICAgIHRvIGRpZmZlcmVudGlhdGUgZnJvbSBMYXRlVXNlICh3aGljaCBpcyBu
b3cgYSB3YXJtIHVzZSkgYW5kIEVhcmx5RGVmIHRvIGRpZmZlcmVudGlhdGUgZnJvbQorICAgICAg
ICBEZWYgKHdoaWNoIGlzLCBhbmQgYWx3YXlzIGhhcyBiZWVuLCBhIGxhdGUgZGVmKS4gRm9yY2lu
ZyB0aGUgY29kZSB0byBkZWFsIHdpdGggdGhlIGZ1bGwKKyAgICAgICAgbWF0cml4IG9mIHBvc3Np
YmlsaXRpZXMgcmVzdWx0ZWQgaW4gd2hhdCBpcyBwcm9iYWJseSBhIHByb2dyZXNzaW9uIGluIGhv
dyB3ZSBoYW5kbGUgZGVmcyBpbgorICAgICAgICB0aGUgcmVnaXN0ZXIgYW5kIHN0YWNrIGFsbG9j
YXRvcnMuIFRoZSBuZXcgSW5zdDo6Zm9yRWFjaERlZihJbnN0KiwgSW5zdCosIGNhbGxiYWNrKSBm
dWxseQorICAgICAgICByZWNvZ25pemVzIHRoYXQgYSAiZGVmIiBpcyBzb21ldGhpbmcgdGhhdCBj
YW4gY29tZSBmcm9tIGVpdGhlciB0aGUgcHJlY2VkaW5nIGluc3RydWN0aW9uIG9yCisgICAgICAg
IHRoZSBzdWNjZWVkaW5nIG9uZS4KKworICAgICAgICBUaGlzIGRvZXNuJ3QgYWRkIGFueSBuZXcg
ZnVuY3Rpb25hbGl0eSB0byBGVEwgQjMgeWV0LCBidXQgdGhlIG5ldyBzY3JhdGNoIHJlZ2lzdGVy
IG1lY2hhbmlzbQorICAgICAgICBpcyBjb3ZlcmVkIGJ5IG5ldyB0ZXN0YjMgdGVzdHMuCisKKyAg
ICAgICAgKiBiMy9CM0NoZWNrU3BlY2lhbC5jcHA6CisgICAgICAgIChKU0M6OkIzOjpDaGVja1Nw
ZWNpYWw6OmlzVmFsaWQpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjphZG1pdHNT
dGFjayk6CisgICAgICAgIChKU0M6OkIzOjpDaGVja1NwZWNpYWw6OmdlbmVyYXRlKToKKyAgICAg
ICAgKiBiMy9CM0xvd2VyVG9BaXIuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRv
QWlyOjpsb3dlcik6CisgICAgICAgICogYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHA6CisgICAg
ICAgIChKU0M6OkIzOjpQYXRjaHBvaW50U3BlY2lhbDo6Zm9yRWFjaEFyZyk6CisgICAgICAgIChK
U0M6OkIzOjpQYXRjaHBvaW50U3BlY2lhbDo6aXNWYWxpZCk6CisgICAgICAgIChKU0M6OkIzOjpQ
YXRjaHBvaW50U3BlY2lhbDo6YWRtaXRzU3RhY2spOgorICAgICAgICAoSlNDOjpCMzo6UGF0Y2hw
b2ludFNwZWNpYWw6OmdlbmVyYXRlKToKKyAgICAgICAgKiBiMy9CM1BhdGNocG9pbnRWYWx1ZS5j
cHA6CisgICAgICAgIChKU0M6OkIzOjpQYXRjaHBvaW50VmFsdWU6OmR1bXBNZXRhKToKKyAgICAg
ICAgKEpTQzo6QjM6OlBhdGNocG9pbnRWYWx1ZTo6UGF0Y2hwb2ludFZhbHVlKToKKyAgICAgICAg
KiBiMy9CM1BhdGNocG9pbnRWYWx1ZS5oOgorICAgICAgICAqIGIzL0IzU3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
czo6dW5hdmFpbGFibGVSZWdpc3RlcnMpOgorICAgICAgICAqIGIzL0IzU3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zLmg6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXM6
OmdwU2NyYXRjaCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXM6
OmZwU2NyYXRjaCk6CisgICAgICAgICogYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwOgorICAgICAg
ICAoSlNDOjpCMzo6U3RhY2ttYXBTcGVjaWFsOjpmb3JFYWNoQXJnSW1wbCk6CisgICAgICAgIChK
U0M6OkIzOjpTdGFja21hcFNwZWNpYWw6OmlzVmFsaWRJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6
OlN0YWNrbWFwU3BlY2lhbDo6YWRtaXRzU3RhY2tJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OlN0
YWNrbWFwU3BlY2lhbDo6cmVwc0ltcGwpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXBTcGVj
aWFsOjppc0FyZ1ZhbGlkRm9yVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXBTcGVj
aWFsOjphcHBlbmRSZXBzSW1wbCk6IERlbGV0ZWQuCisgICAgICAgICogYjMvQjNTdGFja21hcFNw
ZWNpYWwuaDoKKyAgICAgICAgKiBiMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHA6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OmFsbG9jYXRlU3RhY2spOgorICAgICAgICAqIGIzL2Fpci9BaXJBcmcu
Y3BwOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBiMy9haXIvQWly
QXJnLmg6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNBbnlVc2UpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpBcmc6OmlzQ29sZFVzZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFy
Zzo6aXNFYXJseVVzZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNMYXRlVXNlKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0FueURlZik6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFyZzo6aXNFYXJseURlZik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNM
YXRlRGVmKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1pEZWYpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpBcmc6OkFyZyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aW1t
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0RlZik6IERlbGV0ZWQuCisgICAgICAg
ICogYjMvYWlyL0FpckJhc2ljQmxvY2suaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNC
bG9jazo6YXQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpnZXQpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpsYXN0KToKKyAgICAgICAgKiBiMy9haXIv
QWlyRWxpbWluYXRlRGVhZENvZGUuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjplbGltaW5h
dGVEZWFkQ29kZSk6CisgICAgICAgICogYjMvYWlyL0FpckZpeFBhcnRpYWxSZWdpc3RlclN0YWxs
cy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OmZpeFBhcnRpYWxSZWdpc3RlclN0YWxscyk6
CisgICAgICAgICogYjMvYWlyL0Fpckluc3QuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJ
bnN0OjpoYXNBcmdFZmZlY3RzKToKKyAgICAgICAgKiBiMy9haXIvQWlySW5zdC5oOgorICAgICAg
ICAqIGIzL2Fpci9BaXJJbnN0SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0
OjpleHRyYUVhcmx5Q2xvYmJlcmVkUmVncyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6
OmZvckVhY2hEZWYpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0Ojpmb3JFYWNoRGVmV2l0
aEV4dHJhQ2xvYmJlcmVkUmVncyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6OnJlcG9y
dFVzZWRSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0Ojpmb3JFYWNoVG1w
V2l0aEV4dHJhQ2xvYmJlcmVkUmVncyk6IERlbGV0ZWQuCisgICAgICAgICogYjMvYWlyL0Fpckl0
ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcDoKKyAgICAgICAgKiBiMy9haXIvQWlyTGl2ZW5l
c3MuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QWJzdHJhY3RMaXZlbmVzczo6QWJzdHJhY3RM
aXZlbmVzcyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFic3RyYWN0TGl2ZW5lc3M6OkxvY2Fs
Q2FsYzo6ZXhlY3V0ZSk6CisgICAgICAgICogYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHA6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnNwaWxsRXZlcnl0aGluZyk6CisgICAgICAgICogYjMv
YWlyL0FpclRtcFdpZHRoLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wV2lkdGg6OnJl
Y29tcHV0ZSk6CisgICAgICAgICogYjMvYWlyL0FpclVzZUNvdW50cy5oOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpVc2VDb3VudHM6OlVzZUNvdW50cyk6CisgICAgICAgICogYjMvdGVzdGIzLmNw
cDoKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RQYXRjaHBvaW50QW55KToKKyAgICAgICAgKEpTQzo6
QjM6OnRlc3RQYXRjaHBvaW50R1BTY3JhdGNoKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RQYXRj
aHBvaW50RlBTY3JhdGNoKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RQYXRjaHBvaW50TG90c09m
TGF0ZUFueXMpOgorICAgICAgICAoSlNDOjpCMzo6cnVuKToKKwogMjAxNi0wMS0wMyAgS2hlbSBS
YWogIDxyYWoua2hlbUBnbWFpbC5jb20+CiAKICAgICAgICAgV2ViS2l0IGZhaWxzIHRvIGJ1aWxk
IHdpdGggbXVzbCBsaWJjIGxpYnJhcnkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NoZWNrU3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ2hlY2tTcGVjaWFsLmNwcAkocmV2aXNpb24gMTk0NTI3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjQsNyArMTI0LDgg
QEAgdm9pZCBDaGVja1NwZWNpYWw6OmZvckVhY2hBcmcoSW5zdCYgaW5zdAogYm9vbCBDaGVja1Nw
ZWNpYWw6OmlzVmFsaWQoSW5zdCYgaW5zdCkKIHsKICAgICByZXR1cm4gaGlkZGVuQnJhbmNoKGlu
c3QpLmlzVmFsaWRGb3JtKCkKLSAgICAgICAgJiYgaXNWYWxpZEltcGwobnVtQjNBcmdzKGluc3Qp
LCBtX251bUNoZWNrQXJncyArIDEsIGluc3QpOworICAgICAgICAmJiBpc1ZhbGlkSW1wbChudW1C
M0FyZ3MoaW5zdCksIG1fbnVtQ2hlY2tBcmdzICsgMSwgaW5zdCkKKyAgICAgICAgJiYgaW5zdC5h
cmdzLnNpemUoKSAtIG1fbnVtQ2hlY2tBcmdzIC0gMSA9PSBpbnN0Lm9yaWdpbi0+bnVtQ2hpbGRy
ZW4oKSAtIG51bUIzQXJncyhpbnN0KTsKIH0KIAogYm9vbCBDaGVja1NwZWNpYWw6OmFkbWl0c1N0
YWNrKEluc3QmIGluc3QsIHVuc2lnbmVkIGFyZ0luZGV4KQpAQCAtMTQyLDggKzE0Myw3IEBAIEND
YWxsSGVscGVyczo6SnVtcCBDaGVja1NwZWNpYWw6OmdlbmVyYXQKICAgICBTdGFja21hcFZhbHVl
KiB2YWx1ZSA9IGluc3Qub3JpZ2luLT5hczxTdGFja21hcFZhbHVlPigpOwogICAgIEFTU0VSVCh2
YWx1ZSk7CiAKLSAgICBWZWN0b3I8VmFsdWVSZXA+IHJlcHM7Ci0gICAgYXBwZW5kUmVwc0ltcGwo
Y29udGV4dCwgbV9udW1DaGVja0FyZ3MgKyAxLCBpbnN0LCByZXBzKTsKKyAgICBWZWN0b3I8VmFs
dWVSZXA+IHJlcHMgPSByZXBzSW1wbChjb250ZXh0LCBudW1CM0FyZ3MoaW5zdCksIG1fbnVtQ2hl
Y2tBcmdzICsgMSwgaW5zdCk7CiAKICAgICAvLyBTZXQgYXNpZGUgdGhlIGFyZ3MgdGhhdCBhcmUg
cmVsZXZhbnQgdG8gdW5kb2luZyB0aGUgb3BlcmF0aW9uLiBUaGlzIGlzIGJlY2F1c2Ugd2UgZG9u
J3Qgd2FudCB0bwogICAgIC8vIGNhcHR1cmUgYWxsIG9mIGluc3QgaW4gdGhlIGNsb3N1cmUgYmVs
b3cuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2
aXNpb24gMTk0NTI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjAwNyw2ICsyMDA3LDExIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZpbGxTdGFja21hcChpbnN0LCBwYXRjaHBv
aW50VmFsdWUsIDApOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBwYXRjaHBvaW50
VmFsdWUtPm51bUdQU2NyYXRjaFJlZ2lzdGVyczsgaS0tOykKKyAgICAgICAgICAgICAgICBpbnN0
LmFyZ3MuYXBwZW5kKG1fY29kZS5uZXdUbXAoQXJnOjpHUCkpOworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gcGF0Y2hwb2ludFZhbHVlLT5udW1GUFNjcmF0Y2hSZWdpc3RlcnM7IGktLTsp
CisgICAgICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChtX2NvZGUubmV3VG1wKEFyZzo6RlAp
KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9pbnN0cy5sYXN0KCkuYXBwZW5kKFdURk1v
dmUoaW5zdCkpOwogICAgICAgICAgICAgbV9pbnN0cy5sYXN0KCkuYXBwZW5kVmVjdG9yKGFmdGVy
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRTcGVjaWFsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3Bl
Y2lhbC5jcHAJKHJldmlzaW9uIDE5NDUyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1BhdGNocG9pbnRTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NiwzMiArNDYsNTYgQEAgUGF0
Y2hwb2ludFNwZWNpYWw6On5QYXRjaHBvaW50U3BlY2lhbCgpCiAKIHZvaWQgUGF0Y2hwb2ludFNw
ZWNpYWw6OmZvckVhY2hBcmcoSW5zdCYgaW5zdCwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVh
Y2hBcmdDYWxsYmFjaz4mIGNhbGxiYWNrKQogewotICAgIC8vIEZJWE1FOiBBbGxvdyBCMyBQYXRj
aHBvaW50cyB0byBzcGVjaWZ5IExhdGVVc2UuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1MTMzNQotICAgIAotICAgIGlmIChpbnN0Lm9yaWdpbi0+dHlw
ZSgpID09IFZvaWQpIHsKLSAgICAgICAgZm9yRWFjaEFyZ0ltcGwoMCwgMSwgaW5zdCwgU2FtZUFz
UmVwLCBjYWxsYmFjayk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgdW5zaWduZWQgYXJn
SW5kZXggPSAxOworCisgICAgaWYgKGluc3Qub3JpZ2luLT50eXBlKCkgIT0gVm9pZCkKKyAgICAg
ICAgY2FsbGJhY2soaW5zdC5hcmdzW2FyZ0luZGV4KytdLCBBcmc6OkRlZiwgaW5zdC5vcmlnaW4t
PmFpclR5cGUoKSwgaW5zdC5vcmlnaW4tPmFpcldpZHRoKCkpOworCisgICAgZm9yRWFjaEFyZ0lt
cGwoMCwgYXJnSW5kZXgsIGluc3QsIFNhbWVBc1JlcCwgY2FsbGJhY2spOworICAgIGFyZ0luZGV4
ICs9IGluc3Qub3JpZ2luLT5udW1DaGlsZHJlbigpOwogCi0gICAgY2FsbGJhY2soaW5zdC5hcmdz
WzFdLCBBcmc6OkRlZiwgaW5zdC5vcmlnaW4tPmFpclR5cGUoKSwgaW5zdC5vcmlnaW4tPmFpcldp
ZHRoKCkpOwotICAgIGZvckVhY2hBcmdJbXBsKDAsIDIsIGluc3QsIFNhbWVBc1JlcCwgY2FsbGJh
Y2spOworICAgIGZvciAodW5zaWduZWQgaSA9IGluc3Qub3JpZ2luLT5hczxQYXRjaHBvaW50VmFs
dWU+KCktPm51bUdQU2NyYXRjaFJlZ2lzdGVyczsgaS0tOykKKyAgICAgICAgY2FsbGJhY2soaW5z
dC5hcmdzW2FyZ0luZGV4KytdLCBBcmc6OlNjcmF0Y2gsIEFyZzo6R1AsIEFyZzo6Y29uc2VydmF0
aXZlV2lkdGgoQXJnOjpHUCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IGluc3Qub3JpZ2luLT5h
czxQYXRjaHBvaW50VmFsdWU+KCktPm51bUZQU2NyYXRjaFJlZ2lzdGVyczsgaS0tOykKKyAgICAg
ICAgY2FsbGJhY2soaW5zdC5hcmdzW2FyZ0luZGV4KytdLCBBcmc6OlNjcmF0Y2gsIEFyZzo6RlAs
IEFyZzo6Y29uc2VydmF0aXZlV2lkdGgoQXJnOjpGUCkpOwogfQogCiBib29sIFBhdGNocG9pbnRT
cGVjaWFsOjppc1ZhbGlkKEluc3QmIGluc3QpCiB7Ci0gICAgaWYgKGluc3Qub3JpZ2luLT50eXBl
KCkgPT0gVm9pZCkKLSAgICAgICAgcmV0dXJuIGlzVmFsaWRJbXBsKDAsIDEsIGluc3QpOwotCi0g
ICAgaWYgKGluc3QuYXJncy5zaXplKCkgPCAyKQotICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
UGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gaW5zdC5vcmlnaW4tPmFzPFBhdGNocG9pbnRW
YWx1ZT4oKTsKLSAgICBpZiAoIWlzQXJnVmFsaWRGb3JWYWx1ZShpbnN0LmFyZ3NbMV0sIHBhdGNo
cG9pbnQpKQorICAgIHVuc2lnbmVkIGFyZ0luZGV4ID0gMTsKKworICAgIGlmIChpbnN0Lm9yaWdp
bi0+dHlwZSgpICE9IFZvaWQpIHsKKyAgICAgICAgaWYgKGFyZ0luZGV4ID49IGluc3QuYXJncy5z
aXplKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAo
IWlzQXJnVmFsaWRGb3JWYWx1ZShpbnN0LmFyZ3NbYXJnSW5kZXhdLCBwYXRjaHBvaW50KSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFpc0FyZ1ZhbGlkRm9yUmVwKGNv
ZGUoKSwgaW5zdC5hcmdzW2FyZ0luZGV4XSwgcGF0Y2hwb2ludC0+cmVzdWx0Q29uc3RyYWludCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGFyZ0luZGV4Kys7CisgICAgfQor
CisgICAgaWYgKCFpc1ZhbGlkSW1wbCgwLCBhcmdJbmRleCwgaW5zdCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAoIWlzQXJnVmFsaWRGb3JSZXAoY29kZSgpLCBpbnN0LmFyZ3NbMV0s
IHBhdGNocG9pbnQtPnJlc3VsdENvbnN0cmFpbnQpKQorICAgIGFyZ0luZGV4ICs9IHBhdGNocG9p
bnQtPm51bUNoaWxkcmVuKCk7CisKKyAgICBpZiAoYXJnSW5kZXggKyBwYXRjaHBvaW50LT5udW1H
UFNjcmF0Y2hSZWdpc3RlcnMgKyBwYXRjaHBvaW50LT5udW1GUFNjcmF0Y2hSZWdpc3RlcnMKKyAg
ICAgICAgIT0gaW5zdC5hcmdzLnNpemUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
cmV0dXJuIGlzVmFsaWRJbXBsKDAsIDIsIGluc3QpOworICAgIGZvciAodW5zaWduZWQgaSA9IHBh
dGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVyczsgaS0tOykgeworICAgICAgICBBcmcgYXJn
ID0gaW5zdC5hcmdzW2FyZ0luZGV4KytdOworICAgICAgICBpZiAoIWFyZy5pc0dQVG1wKCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGZvciAodW5zaWduZWQgaSA9IHBh
dGNocG9pbnQtPm51bUZQU2NyYXRjaFJlZ2lzdGVyczsgaS0tOykgeworICAgICAgICBBcmcgYXJn
ID0gaW5zdC5hcmdzW2FyZ0luZGV4KytdOworICAgICAgICBpZiAoIWFyZy5pc0ZQVG1wKCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7CiB9CiAK
IGJvb2wgUGF0Y2hwb2ludFNwZWNpYWw6OmFkbWl0c1N0YWNrKEluc3QmIGluc3QsIHVuc2lnbmVk
IGFyZ0luZGV4KQpAQCAtOTksMTYgKzEyMywyNCBAQCBib29sIFBhdGNocG9pbnRTcGVjaWFsOjph
ZG1pdHNTdGFjayhJbnN0CiBDQ2FsbEhlbHBlcnM6Okp1bXAgUGF0Y2hwb2ludFNwZWNpYWw6Omdl
bmVyYXRlKAogICAgIEluc3QmIGluc3QsIENDYWxsSGVscGVycyYgaml0LCBHZW5lcmF0aW9uQ29u
dGV4dCYgY29udGV4dCkKIHsKLSAgICBTdGFja21hcFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2lu
LT5hczxTdGFja21hcFZhbHVlPigpOworICAgIFBhdGNocG9pbnRWYWx1ZSogdmFsdWUgPSBpbnN0
Lm9yaWdpbi0+YXM8UGF0Y2hwb2ludFZhbHVlPigpOwogICAgIEFTU0VSVCh2YWx1ZSk7CiAKICAg
ICBWZWN0b3I8VmFsdWVSZXA+IHJlcHM7CiAgICAgdW5zaWduZWQgb2Zmc2V0ID0gMTsKICAgICBp
ZiAoaW5zdC5vcmlnaW4tPnR5cGUoKSAhPSBWb2lkKQogICAgICAgICByZXBzLmFwcGVuZChyZXBG
b3JBcmcoKmNvbnRleHQuY29kZSwgaW5zdC5hcmdzW29mZnNldCsrXSkpOwotICAgIGFwcGVuZFJl
cHNJbXBsKGNvbnRleHQsIG9mZnNldCwgaW5zdCwgcmVwcyk7CisgICAgcmVwcy5hcHBlbmRWZWN0
b3IocmVwc0ltcGwoY29udGV4dCwgMCwgb2Zmc2V0LCBpbnN0KSk7CisgICAgb2Zmc2V0ICs9IHZh
bHVlLT5udW1DaGlsZHJlbigpOworCisgICAgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zIHBhcmFt
cyh2YWx1ZSwgcmVwcywgY29udGV4dCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSB2YWx1ZS0+
bnVtR1BTY3JhdGNoUmVnaXN0ZXJzOyBpLS07KQorICAgICAgICBwYXJhbXMubV9ncFNjcmF0Y2gu
YXBwZW5kKGluc3QuYXJnc1tvZmZzZXQrK10uZ3ByKCkpOworICAgIGZvciAodW5zaWduZWQgaSA9
IHZhbHVlLT5udW1GUFNjcmF0Y2hSZWdpc3RlcnM7IGktLTspCisgICAgICAgIHBhcmFtcy5tX2Zw
U2NyYXRjaC5hcHBlbmQoaW5zdC5hcmdzW29mZnNldCsrXS5mcHIoKSk7CiAgICAgCi0gICAgdmFs
dWUtPm1fZ2VuZXJhdG9yLT5ydW4oaml0LCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXModmFsdWUs
IHJlcHMsIGNvbnRleHQpKTsKKyAgICB2YWx1ZS0+bV9nZW5lcmF0b3ItPnJ1bihqaXQsIHBhcmFt
cyk7CiAKICAgICByZXR1cm4gQ0NhbGxIZWxwZXJzOjpKdW1wKCk7CiB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAJKHJldmlzaW9uIDE5
NDUyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzgsMTIgKzM4LDE4IEBAIHZvaWQgUGF0Y2hwb2ludFZhbHVlOjpkdW1w
TWV0YShDb21tYVByaW4KIHsKICAgICBCYXNlOjpkdW1wTWV0YShjb21tYSwgb3V0KTsKICAgICBv
dXQucHJpbnQoY29tbWEsICJyZXN1bHRDb25zdHJhaW50ID0gIiwgcmVzdWx0Q29uc3RyYWludCk7
CisgICAgaWYgKG51bUdQU2NyYXRjaFJlZ2lzdGVycykKKyAgICAgICAgb3V0LnByaW50KGNvbW1h
LCAibnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gIiwgbnVtR1BTY3JhdGNoUmVnaXN0ZXJzKTsKKyAg
ICBpZiAobnVtRlBTY3JhdGNoUmVnaXN0ZXJzKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJu
dW1GUFNjcmF0Y2hSZWdpc3RlcnMgPSAiLCBudW1GUFNjcmF0Y2hSZWdpc3RlcnMpOwogfQogCiBQ
YXRjaHBvaW50VmFsdWU6OlBhdGNocG9pbnRWYWx1ZSh1bnNpZ25lZCBpbmRleCwgVHlwZSB0eXBl
LCBPcmlnaW4gb3JpZ2luKQogICAgIDogQmFzZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgUGF0Y2hw
b2ludCwgdHlwZSwgb3JpZ2luKQogICAgICwgZWZmZWN0cyhFZmZlY3RzOjpmb3JDYWxsKCkpCiAg
ICAgLCByZXN1bHRDb25zdHJhaW50KHR5cGUgPT0gVm9pZCA/IFZhbHVlUmVwOjpXYXJtQW55IDog
VmFsdWVSZXA6OlNvbWVSZWdpc3RlcikKKyAgICAsIG51bUdQU2NyYXRjaFJlZ2lzdGVycygwKQor
ICAgICwgbnVtRlBTY3JhdGNoUmVnaXN0ZXJzKDApCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5oCShyZXZpc2lvbiAxOTQ1MjcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC01Niw2ICs1NiwxMiBAQCBwdWJsaWM6CiAgICAgLy8gaXMgVm9pZC4gT3RoZXJ3aXNlIHlv
dSBjYW4gc2V0IHRoaXMgdG8gYW55IGlucHV0IGNvbnN0cmFpbnQuCiAgICAgVmFsdWVSZXAgcmVz
dWx0Q29uc3RyYWludDsKIAorICAgIC8vIFRoZSBudW1iZXIgb2Ygc2NyYXRjaCByZWdpc3RlcnMg
dGhhdCB0aGlzIHBhdGNocG9pbnQgZ2V0cy4gVGhlIHNjcmF0Y2ggcmVnaXN0ZXIgaXMgZ3VhcmFu
dGVlZAorICAgIC8vIHRvIGJlIGRpZmZlcmVudCBmcm9tIGFueSBpbnB1dCByZWdpc3RlciBhbmQg
dGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyLiBJdCdzIGFsc28gZ3VhcmFudGVlZCBub3QKKyAgICAv
LyB0byBiZSBjbG9iYmVyZWQgZWl0aGVyIGVhcmx5IG9yIGxhdGUuIFRoZXNlIGFyZSAwIGJ5IGRl
ZmF1bHQuCisgICAgdWludDhfdCBudW1HUFNjcmF0Y2hSZWdpc3RlcnM7CisgICAgdWludDhfdCBu
dW1GUFNjcmF0Y2hSZWdpc3RlcnM7CisKIHByb3RlY3RlZDoKICAgICB2b2lkIGR1bXBNZXRhKENv
bW1hUHJpbnRlciYsIFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zLmNwcAkocmV2aXNpb24gMTk0NTI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAs
MTIgQEAgUmVnaXN0ZXJTZXQgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zOjp1bgogICAgICAgICB1
bnNhdmVkQ2FsbGVlU2F2ZXMuY2xlYXIocmVnQXRPZmZzZXQucmVnKCkpOwogCiAgICAgcmVzdWx0
Lm1lcmdlKHVuc2F2ZWRDYWxsZWVTYXZlcyk7CisKKyAgICBmb3IgKEdQUlJlZyBncHIgOiBtX2dw
U2NyYXRjaCkKKyAgICAgICAgcmVzdWx0LmNsZWFyKGdwcik7CisgICAgZm9yIChGUFJSZWcgZnBy
IDogbV9mcFNjcmF0Y2gpCisgICAgICAgIHJlc3VsdC5jbGVhcihmcHIpOworICAgIAogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oCShyZXZpc2lvbiAxOTQ1MjcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC01OSwxMiArNTksMjcgQEAgcHVibGljOgogICAgIC8vIFRoaXMgdGVsbHMgeW91
IHRoZSByZWdpc3RlcnMgdGhhdCB3ZXJlIHVzZWQuCiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVz
ZWRSZWdpc3RlcnMoKSBjb25zdDsKIAotICAgIC8vIFRoaXMgaXMgYSB1c2VmdWwgaGVscGVyIGlm
IHlvdSB3YW50IHRvIGRvIHJlZ2lzdGVyIGFsbG9jYXRpb24gaW5zaWRlIG9mIGEgcGF0Y2hwb2lu
dC4gWW91Ci0gICAgLy8gY2FuIG9ubHkgdXNlIGNhbGxlZS1zYXZlIHJlZ2lzdGVycyBpZiB0aGV5
IHdlcmUgc2F2ZWQgaW4gdGhlIHByb2xvZ3VlLiBUaGlzIGdpdmVzIHlvdSB0aGUKLSAgICAvLyB1
c2VkIHJlZ2lzdGVyIHNldCB0aGF0J3MgdXNlZnVsIGZvciBzdWNoIHNldHRpbmdzIGJ5IHJldHVy
bmluZzoKKyAgICAvLyBUaGlzIGlzIGEgdXNlZnVsIGhlbHBlciBpZiB5b3Ugd2FudCB0byBkbyBy
ZWdpc3RlciBhbGxvY2F0aW9uIGluc2lkZSBvZiBhIHBhdGNocG9pbnQuIFRoZQorICAgIC8vIHVz
ZWRSZWdpc3RlcnMoKSBzZXQgaXMgbm90IGRpcmVjdGx5IHVzZWZ1bCBmb3IgdGhpcyBwdXJwb3Nl
IGJlY2F1c2U6CiAgICAgLy8KLSAgICAvLyAgICAgdXNlZFJlZ2lzdGVycygpIHwgKFJlZ2lzdGVy
U2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkgLSBwcm9jLmNhbGxlZVNhdmVSZWdpc3RlcnMoKSkK
LSAgICBSZWdpc3RlclNldCB1bmF2YWlsYWJsZVJlZ2lzdGVycygpIGNvbnN0OworICAgIC8vIC0g
WW91IGNhbiBvbmx5IHVzZSBjYWxsZWUtc2F2ZSByZWdpc3RlcnMgZm9yIHNjcmF0Y2ggaWYgdGhl
eSB3ZXJlIHNhdmVkIGluIHRoZSBwcm9sb2d1ZS4gU28sCisgICAgLy8gICBpZiBhIHJlZ2lzdGVy
IGlzIGNhbGxlZS1zYXZlLCBpdCdzIG5vdCBlbm91Z2ggdGhhdCBpdCdzIG5vdCBpbiB1c2VkUmVn
aXN0ZXJzKCkuCisgICAgLy8KKyAgICAvLyAtIFNjcmF0Y2ggcmVnaXN0ZXJzIGFyZSBnb2luZyB0
byBiZSBpbiB1c2VkUmVnaXN0ZXJzKCkgYXQgdGhlIHBhdGNocG9pbnQuIFNvLCBpZiB5b3Ugd2Fu
dCB0bworICAgIC8vICAgZmluZCBvbmUgb2YgeW91ciByZXF1ZXN0ZWQgc2NyYXRjaCByZWdpc3Rl
cnMgdXNpbmcgdXNlZFJlZ2lzdGVycygpLCB5b3UnbGwgaGF2ZSBhIGJhZCB0aW1lLgorICAgIC8v
CisgICAgLy8gVGhpcyBnaXZlcyB5b3UgdGhlIHVzZWQgcmVnaXN0ZXIgc2V0IHRoYXQncyB1c2Vm
dWwgZm9yIGFsbG9jYXRpbmcgc2NyYXRjaCByZWdpc3RlcnMuIFRoaXMgc2V0CisgICAgLy8gaXMg
ZGVmaW5lZCBhczoKKyAgICAvLworICAgIC8vICAgICAodXNlZFJlZ2lzdGVycygpIHwgKFJlZ2lz
dGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkgLSBwcm9jLmNhbGxlZVNhdmVSZWdpc3RlcnMo
KSkpCisgICAgLy8gICAgIC0gZ3BTY3JhdGNoUmVnaXN0ZXJzIC0gZnBTY3JhdGNoUmVnaXN0ZXJz
CisgICAgLy8KKyAgICAvLyBJLmUuIGl0IGlzIGxpa2UgdXNlZFJlZ2lzdGVycygpIGJ1dCBhbHNv
IGluY2x1ZGVzIHVuc2F2ZWQgY2FsbGVlLXNhdmVzIGFuZCBleGNsdWRlcyBzY3JhdGNoCisgICAg
Ly8gcmVnaXN0ZXJzLgorICAgIEpTX0VYUE9SVF9QUklWQVRFIFJlZ2lzdGVyU2V0IHVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCkgY29uc3Q7CisKKyAgICBHUFJSZWcgZ3BTY3JhdGNoKHVuc2lnbmVkIGlu
ZGV4KSBjb25zdCB7IHJldHVybiBtX2dwU2NyYXRjaFtpbmRleF07IH0KKyAgICBGUFJSZWcgZnBT
Y3JhdGNoKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2ZwU2NyYXRjaFtpbmRleF07
IH0KIAogICAgIC8vIFRoaXMgaXMgcHJvdmlkZWQgZm9yIGNvbnZlbmllbmNlOyBpdCBtZWFucyB0
aGF0IHlvdSBkb24ndCBoYXZlIHRvIGNhcHR1cmUgaXQgaWYgeW91IGRvbid0IHdhbnQgdG8uCiAg
ICAgUHJvY2VkdXJlJiBwcm9jKCkgY29uc3Q7CkBAIC05MCw2ICsxMDUsOCBAQCBwcml2YXRlOgog
CiAgICAgU3RhY2ttYXBWYWx1ZSogbV92YWx1ZTsKICAgICBWZWN0b3I8VmFsdWVSZXA+IG1fcmVw
czsKKyAgICBWZWN0b3I8R1BSUmVnPiBtX2dwU2NyYXRjaDsKKyAgICBWZWN0b3I8RlBSUmVnPiBt
X2ZwU2NyYXRjaDsKICAgICBBaXI6OkdlbmVyYXRpb25Db250ZXh0JiBtX2NvbnRleHQ7CiB9Owog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5j
cHAJKHJldmlzaW9uIDE5NDUyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNr
bWFwU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODEsOSArODEsOSBAQCB2b2lkIFN0YWNrbWFw
U3BlY2lhbDo6Zm9yRWFjaEFyZ0ltcGwoCiAgICAgLy8gQ2hlY2sgdGhhdCBpbnNhbmUgdGhpbmdz
IGhhdmUgbm90IGhhcHBlbmVkLgogICAgIEFTU0VSVChpbnN0LmFyZ3Muc2l6ZSgpID49IG51bUln
bm9yZWRBaXJBcmdzKTsKICAgICBBU1NFUlQodmFsdWUtPmNoaWxkcmVuKCkuc2l6ZSgpID49IG51
bUlnbm9yZWRCM0FyZ3MpOwotICAgIEFTU0VSVChpbnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3Jl
ZEFpckFyZ3MgPT0gdmFsdWUtPmNoaWxkcmVuKCkuc2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJncyk7
CisgICAgQVNTRVJUKGluc3QuYXJncy5zaXplKCkgLSBudW1JZ25vcmVkQWlyQXJncyA+PSB2YWx1
ZS0+Y2hpbGRyZW4oKS5zaXplKCkgLSBudW1JZ25vcmVkQjNBcmdzKTsKICAgICAKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5zdC5hcmdzLnNpemUoKSAtIG51bUlnbm9yZWRBaXJBcmdz
OyArK2kpIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWUtPmNoaWxkcmVuKCku
c2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJnczsgKytpKSB7CiAgICAgICAgIEFyZyYgYXJnID0gaW5z
dC5hcmdzW2kgKyBudW1JZ25vcmVkQWlyQXJnc107CiAgICAgICAgIENvbnN0cmFpbmVkVmFsdWUg
Y2hpbGQgPSB2YWx1ZS0+Y29uc3RyYWluZWRDaGlsZChpICsgbnVtSWdub3JlZEIzQXJncyk7CiAK
QEAgLTEwMywxMiArMTAzLDEyIEBAIHZvaWQgU3RhY2ttYXBTcGVjaWFsOjpmb3JFYWNoQXJnSW1w
bCgKICAgICAgICAgICAgICAgICByb2xlID0gQXJnOjpDb2xkVXNlOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6TGF0ZUNvbGRBbnk6Ci0gICAgICAg
ICAgICAgICAgcm9sZSA9IEFyZzo6TGF0ZVVzZTsKKyAgICAgICAgICAgICAgICByb2xlID0gQXJn
OjpMYXRlQ29sZFVzZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEZvcmNlTGF0ZVVzZToKLSAgICAgICAgICAg
IHJvbGUgPSBBcmc6OkxhdGVVc2U7CisgICAgICAgICAgICByb2xlID0gQXJnOjpMYXRlQ29sZFVz
ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTEyOSwxMyArMTI5LDEzIEBA
IGJvb2wgU3RhY2ttYXBTcGVjaWFsOjppc1ZhbGlkSW1wbCgKICAgICBBU1NFUlQodmFsdWUtPmNo
aWxkcmVuKCkuc2l6ZSgpID49IG51bUlnbm9yZWRCM0FyZ3MpOwogCiAgICAgLy8gRm9yIHRoZSBJ
bnN0IHRvIGJlIHZhbGlkLCBpdCBuZWVkcyB0byBoYXZlIHRoZSByaWdodCBudW1iZXIgb2YgYXJn
dW1lbnRzLgotICAgIGlmIChpbnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3JlZEFpckFyZ3MgIT0g
dmFsdWUtPmNoaWxkcmVuKCkuc2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJncykKKyAgICBpZiAoaW5z
dC5hcmdzLnNpemUoKSAtIG51bUlnbm9yZWRBaXJBcmdzIDwgdmFsdWUtPmNoaWxkcmVuKCkuc2l6
ZSgpIC0gbnVtSWdub3JlZEIzQXJncykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8g
UmVnYXJkbGVzcyBvZiBjb25zdHJhaW50cywgc3RhY2ttYXBzIGhhdmUgc29tZSBiYXNpYyByZXF1
aXJlbWVudHMgZm9yIHRoZWlyIGFyZ3VtZW50cy4gRm9yCiAgICAgLy8gZXhhbXBsZSwgeW91IGNh
bid0IGhhdmUgYSBub24tRlAtb2Zmc2V0IGFkZHJlc3MuIFRoaXMgdmVyaWZpZXMgdGhvc2UgY29u
ZGl0aW9ucyBhcyB3ZWxsIGFzIHRoZQogICAgIC8vIGFyZ3VtZW50IHR5cGVzLgotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3JlZEFpckFyZ3M7
ICsraSkgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZS0+Y2hpbGRyZW4oKS5z
aXplKCkgLSBudW1JZ25vcmVkQjNBcmdzOyArK2kpIHsKICAgICAgICAgVmFsdWUqIGNoaWxkID0g
dmFsdWUtPmNoaWxkKGkgKyBudW1JZ25vcmVkQjNBcmdzKTsKICAgICAgICAgQXJnJiBhcmcgPSBp
bnN0LmFyZ3NbaSArIG51bUlnbm9yZWRBaXJBcmdzXTsKIApAQCAtMTY3LDYgKzE2NywxMSBAQCBi
b29sIFN0YWNrbWFwU3BlY2lhbDo6YWRtaXRzU3RhY2tJbXBsKAogCiAgICAgdW5zaWduZWQgc3Rh
Y2ttYXBBcmdJbmRleCA9IGFyZ0luZGV4IC0gbnVtSWdub3JlZEFpckFyZ3MgKyBudW1JZ25vcmVk
QjNBcmdzOwogCisgICAgaWYgKHN0YWNrbWFwQXJnSW5kZXggPj0gdmFsdWUtPm51bUNoaWxkcmVu
KCkpIHsKKyAgICAgICAgLy8gSXQncyBub3QgYSBzdGFja21hcCBhcmd1bWVudCwgc28gYXMgZmFy
IGFzIHdlIGFyZSBjb25jZXJuZWQsIGl0IGRvZXNuJ3QgYWRtaXQgc3RhY2suCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKICAgICBpZiAoc3RhY2ttYXBBcmdJbmRleCA+PSB2YWx1ZS0+
bV9yZXBzLnNpemUoKSkgewogICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlcmUgd2FzIG5v
IGNvbnN0cmFpbnQuCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTgwLDExICsxODUsMTMgQEAg
Ym9vbCBTdGFja21hcFNwZWNpYWw6OmFkbWl0c1N0YWNrSW1wbCgKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLXZvaWQgU3RhY2ttYXBTcGVjaWFsOjphcHBlbmRSZXBzSW1wbCgKLSAgICBHZW5lcmF0
aW9uQ29udGV4dCYgY29udGV4dCwgdW5zaWduZWQgbnVtSWdub3JlZEFyZ3MsIEluc3QmIGluc3Qs
IFZlY3RvcjxWYWx1ZVJlcD4mIHJlc3VsdCkKK1ZlY3RvcjxWYWx1ZVJlcD4gU3RhY2ttYXBTcGVj
aWFsOjpyZXBzSW1wbCgKKyAgICBHZW5lcmF0aW9uQ29udGV4dCYgY29udGV4dCwgdW5zaWduZWQg
bnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3MsIEluc3QmIGluc3Qp
CiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbnVtSWdub3JlZEFyZ3M7IGkgPCBpbnN0LmFyZ3Mu
c2l6ZSgpOyArK2kpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQocmVwRm9yQXJnKCpjb250ZXh0LmNv
ZGUsIGluc3QuYXJnc1tpXSkpOworICAgIFZlY3RvcjxWYWx1ZVJlcD4gcmVzdWx0OworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnN0Lm9yaWdpbi0+bnVtQ2hpbGRyZW4oKSAtIG51bUln
bm9yZWRCM0FyZ3M7ICsraSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZChyZXBGb3JBcmcoKmNvbnRl
eHQuY29kZSwgaW5zdC5hcmdzW2kgKyBudW1JZ25vcmVkQWlyQXJnc10pKTsKKyAgICByZXR1cm4g
cmVzdWx0OwogfQogCiBib29sIFN0YWNrbWFwU3BlY2lhbDo6aXNBcmdWYWxpZEZvclZhbHVlKGNv
bnN0IEFpcjo6QXJnJiBhcmcsIFZhbHVlKiB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5oCShyZXZpc2lvbiAxOTQ1MjcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02
OSw3ICs2OSw4IEBAIHByb3RlY3RlZDoKICAgICAgICAgQWlyOjpJbnN0JiwgdW5zaWduZWQgYXJn
SW5kZXgpOwogCiAgICAgLy8gQXBwZW5kcyB0aGUgcmVwcyBmb3IgdGhlIEluc3QncyBhcmdzLCBz
dGFydGluZyB3aXRoIG51bUlnbm9yZWRBcmdzLCB0byB0aGUgZ2l2ZW4gdmVjdG9yLgotICAgIHZv
aWQgYXBwZW5kUmVwc0ltcGwoQWlyOjpHZW5lcmF0aW9uQ29udGV4dCYsIHVuc2lnbmVkIG51bUln
bm9yZWRBcmdzLCBBaXI6Okluc3QmLCBWZWN0b3I8VmFsdWVSZXA+Jik7CisgICAgVmVjdG9yPFZh
bHVlUmVwPiByZXBzSW1wbCgKKyAgICAgICAgQWlyOjpHZW5lcmF0aW9uQ29udGV4dCYsIHVuc2ln
bmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVuc2lnbmVkIG51bUlnbm9yZWRBaXJBcmdzLCBBaXI6Oklu
c3QmKTsKIAogICAgIHN0YXRpYyBib29sIGlzQXJnVmFsaWRGb3JWYWx1ZShjb25zdCBBaXI6OkFy
ZyYsIFZhbHVlKik7CiAgICAgc3RhdGljIGJvb2wgaXNBcmdWYWxpZEZvclJlcChBaXI6OkNvZGUm
LCBjb25zdCBBaXI6OkFyZyYsIGNvbnN0IFZhbHVlUmVwJik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvdGVzdGIzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvdGVzdGIzLmNwcAkocmV2aXNpb24gMTk0NTI3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL3Rlc3RiMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjE1Nyw2ICs2MTU3LDcyIEBAIHZvaWQg
dGVzdFBhdGNocG9pbnRBbnkoVmFsdWVSZXAgcmVwKQogICAgIENIRUNLKGNvbXBpbGVBbmRSdW48
aW50Pihwcm9jLCAxLCAyKSA9PSAzKTsKIH0KIAordm9pZCB0ZXN0UGF0Y2hwb2ludEdQU2NyYXRj
aCgpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2Mu
YWRkQmxvY2soKTsKKyAgICBWYWx1ZSogYXJnMSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJl
Z1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBWYWx1
ZSogYXJnMiA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9p
bnQgPSByb290LT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihwcm9jLCBJbnQzMiwgT3JpZ2lu
KCkpOworICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcxLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVy
KTsKKyAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnMiwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7
CisgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gMjsKKyAgICBwYXRjaHBv
aW50LT5zZXRHZW5lcmF0b3IoCisgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICBBbGxvd01h
Y3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAv
LyBXZSBzaG91bGRuJ3QgaGF2ZSBzcGlsbGVkIHRoZSBpbnB1dHMsIHNvIHdlIGFzc2VydCB0aGF0
IHRoZXkncmUgaW4gcmVnaXN0ZXJzLgorICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9
PSAzKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1swXS5pc0dQUigpKTsKKyAgICAgICAgICAg
IENIRUNLKHBhcmFtc1sxXS5pc0dQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1syXS5p
c0dQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5ncFNjcmF0Y2goMCkgIT0gSW52YWxp
ZEdQUlJlZyk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuZ3BTY3JhdGNoKDApICE9IHBhcmFt
c1swXS5ncHIoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuZ3BTY3JhdGNoKDApICE9IHBh
cmFtc1sxXS5ncHIoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuZ3BTY3JhdGNoKDApICE9
IHBhcmFtc1syXS5ncHIoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuZ3BTY3JhdGNoKDEp
ICE9IEludmFsaWRHUFJSZWcpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLmdwU2NyYXRjaCgx
KSAhPSBwYXJhbXMuZ3BTY3JhdGNoKDApKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5ncFNj
cmF0Y2goMSkgIT0gcGFyYW1zWzBdLmdwcigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5n
cFNjcmF0Y2goMSkgIT0gcGFyYW1zWzFdLmdwcigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFt
cy5ncFNjcmF0Y2goMSkgIT0gcGFyYW1zWzJdLmdwcigpKTsKKyAgICAgICAgICAgIENIRUNLKCFw
YXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKS5nZXQocGFyYW1zLmdwU2NyYXRjaCgwKSkpOwor
ICAgICAgICAgICAgQ0hFQ0soIXBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLmdldChwYXJh
bXMuZ3BTY3JhdGNoKDEpKSk7CisgICAgICAgICAgICBhZGQzMihqaXQsIHBhcmFtc1sxXS5ncHIo
KSwgcGFyYW1zWzJdLmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgICAgICB9KTsKKyAgICBy
b290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBwYXRj
aHBvaW50KTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jLCAxLCAyKSA9PSAz
KTsKK30KKwordm9pZCB0ZXN0UGF0Y2hwb2ludEZQU2NyYXRjaCgpCit7CisgICAgUHJvY2VkdXJl
IHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBWYWx1
ZSogYXJnMSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBWYWx1ZSogYXJnMiA9IHJvb3QtPmFwcGVu
ZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIxKTsKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSByb290LT5hcHBlbmROZXc8
UGF0Y2hwb2ludFZhbHVlPihwcm9jLCBJbnQzMiwgT3JpZ2luKCkpOworICAgIHBhdGNocG9pbnQt
PmFwcGVuZChhcmcxLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICBwYXRjaHBvaW50LT5h
cHBlbmQoYXJnMiwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgcGF0Y2hwb2ludC0+bnVt
RlBTY3JhdGNoUmVnaXN0ZXJzID0gMjsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCisg
ICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNh
Z2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAvLyBXZSBzaG91bGRuJ3QgaGF2ZSBz
cGlsbGVkIHRoZSBpbnB1dHMsIHNvIHdlIGFzc2VydCB0aGF0IHRoZXkncmUgaW4gcmVnaXN0ZXJz
LgorICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9PSAzKTsKKyAgICAgICAgICAgIENI
RUNLKHBhcmFtc1swXS5pc0dQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1sxXS5pc0dQ
UigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1syXS5pc0dQUigpKTsKKyAgICAgICAgICAg
IENIRUNLKHBhcmFtcy5mcFNjcmF0Y2goMCkgIT0gSW52YWxpZEZQUlJlZyk7CisgICAgICAgICAg
ICBDSEVDSyhwYXJhbXMuZnBTY3JhdGNoKDEpICE9IEludmFsaWRGUFJSZWcpOworICAgICAgICAg
ICAgQ0hFQ0socGFyYW1zLmZwU2NyYXRjaCgxKSAhPSBwYXJhbXMuZnBTY3JhdGNoKDApKTsKKyAg
ICAgICAgICAgIENIRUNLKCFwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKS5nZXQocGFyYW1z
LmZwU2NyYXRjaCgwKSkpOworICAgICAgICAgICAgQ0hFQ0soIXBhcmFtcy51bmF2YWlsYWJsZVJl
Z2lzdGVycygpLmdldChwYXJhbXMuZnBTY3JhdGNoKDEpKSk7CisgICAgICAgICAgICBhZGQzMihq
aXQsIHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzJdLmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOwor
ICAgICAgICB9KTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPihwcm9jLCBSZXR1
cm4sIE9yaWdpbigpLCBwYXRjaHBvaW50KTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50
Pihwcm9jLCAxLCAyKSA9PSAzKTsKK30KKwogdm9pZCB0ZXN0UGF0Y2hwb2ludExvdHNPZkxhdGVB
bnlzKCkKIHsKICAgICBQcm9jZWR1cmUgcHJvYzsKQEAgLTk1OTgsNiArOTY2NCw4IEBAIHZvaWQg
cnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKICAgICBSVU4odGVzdFBhdGNocG9pbnRGaXhlZFJlZ2lz
dGVyKCkpOwogICAgIFJVTih0ZXN0UGF0Y2hwb2ludEFueShWYWx1ZVJlcDo6V2FybUFueSkpOwog
ICAgIFJVTih0ZXN0UGF0Y2hwb2ludEFueShWYWx1ZVJlcDo6Q29sZEFueSkpOworICAgIFJVTih0
ZXN0UGF0Y2hwb2ludEdQU2NyYXRjaCgpKTsKKyAgICBSVU4odGVzdFBhdGNocG9pbnRGUFNjcmF0
Y2goKSk7CiAgICAgUlVOKHRlc3RQYXRjaHBvaW50TG90c09mTGF0ZUFueXMoKSk7CiAgICAgUlVO
KHRlc3RQYXRjaHBvaW50QW55SW1tKFZhbHVlUmVwOjpXYXJtQW55KSk7CiAgICAgUlVOKHRlc3RQ
YXRjaHBvaW50QW55SW1tKFZhbHVlUmVwOjpDb2xkQW55KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAJKHJldmlzaW9uIDE5
NDUyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMTQzLDE0ICsxNDMsMTMgQEAgdm9pZCBhbGxvY2F0ZVN0YWNrKENv
ZGUmIGNvZGUpCiAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKICAgICAgICAg
U3RhY2tTbG90TGl2ZW5lc3M6OkxvY2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5lc3MsIGJsb2NrKTsK
IAotICAgICAgICBhdXRvIGludGVyZmVyZSA9IFsmXSAoSW5zdCYgaW5zdCkgeworICAgICAgICBh
dXRvIGludGVyZmVyZSA9IFsmXSAodW5zaWduZWQgaW5zdEluZGV4KSB7CiAgICAgICAgICAgICBp
ZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJJbnRlcmZlcmluZzogIiwgV1RG
Ojpwb2ludGVyTGlzdER1bXAobG9jYWxDYWxjLmxpdmUoKSksICJcbiIpOwogCi0gICAgICAgICAg
ICBpbnN0LmZvckVhY2hBcmcoCi0gICAgICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpS
b2xlIHJvbGUsIEFyZzo6VHlwZSwgQXJnOjpXaWR0aCkgewotICAgICAgICAgICAgICAgICAgICBp
ZiAoIUFyZzo6aXNEZWYocm9sZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICBJbnN0Ojpmb3JFYWNoRGVmPEFyZz4oCisgICAgICAgICAgICAgICAgYmxvY2st
PmdldChpbnN0SW5kZXgpLCBibG9jay0+Z2V0KGluc3RJbmRleCArIDEpLAorICAgICAgICAgICAg
ICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRoKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzU3RhY2soKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzbG90ID0gYXJn
LnN0YWNrU2xvdCgpOwpAQCAtMTY3LDEyICsxNjYsMTAgQEAgdm9pZCBhbGxvY2F0ZVN0YWNrKENv
ZGUmIGNvZGUpCiAgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gYmxvY2stPnNpemUo
KTsgaW5zdEluZGV4LS07KSB7CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAg
ICAgICBkYXRhTG9nKCJBbmFseXppbmc6ICIsIGJsb2NrLT5hdChpbnN0SW5kZXgpLCAiXG4iKTsK
LSAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKLSAgICAgICAg
ICAgIGludGVyZmVyZShpbnN0KTsKKyAgICAgICAgICAgIGludGVyZmVyZShpbnN0SW5kZXgpOwog
ICAgICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUoaW5zdEluZGV4KTsKICAgICAgICAgfQotICAg
ICAgICBJbnN0IG5vcDsKLSAgICAgICAgaW50ZXJmZXJlKG5vcCk7CisgICAgICAgIGludGVyZmVy
ZSgtMSk7CiAgICAgfQogCiAgICAgaWYgKHZlcmJvc2UpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckFyZy5jcHAJKHJldmlzaW9uIDE5NDUyNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xOTMsNiArMTkzLDE1
IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBcmcKICAgICBjYXNlIEFy
Zzo6TGF0ZVVzZToKICAgICAgICAgb3V0LnByaW50KCJMYXRlVXNlIik7CiAgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEFyZzo6TGF0ZUNvbGRVc2U6CisgICAgICAgIG91dC5wcmludCgiTGF0ZUNv
bGRVc2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJnOjpFYXJseURlZjoKKyAgICAg
ICAgb3V0LnByaW50KCJFYXJseURlZiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcmc6
OlNjcmF0Y2g6CisgICAgICAgIG91dC5wcmludCgiU2NyYXRjaCIpOworICAgICAgICByZXR1cm47
CiAgICAgfQogCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAkocmV2aXNpb24gMTk0NTI3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05MiwxMCArOTIs
MTQgQEAgcHVibGljOgogICAgICAgICBDb2xkVXNlLAogCiAgICAgICAgIC8vIExhdGVVc2UgbWVh
bnMgdGhhdCB0aGUgSW5zdCB3aWxsIHJlYWQgZnJvbSB0aGlzIHZhbHVlIGFmdGVyIGRvaW5nIGl0
cyBEZWYncy4gTm90ZSB0aGF0IExhdGVVc2UKLSAgICAgICAgLy8gb24gYW4gQWRkciBvciBJbmRl
eCBzdGlsbCBtZWFucyBVc2Ugb24gdGhlIGludGVybmFsIHRlbXBvcmFyaWVzLiBMYXRlVXNlIGFs
c28gY3VycmVudGx5IGFsc28KLSAgICAgICAgLy8gaW1wbGllcyBDb2xkVXNlLgorICAgICAgICAv
LyBvbiBhbiBBZGRyIG9yIEluZGV4IHN0aWxsIG1lYW5zIFVzZSBvbiB0aGUgaW50ZXJuYWwgdGVt
cG9yYXJpZXMuIE5vdGUgdGhhdCBzcGVjaWZ5aW5nIHRoZQorICAgICAgICAvLyBzYW1lIFRtcCBv
bmNlIGFzIERlZiBhbmQgb25jZSBhcyBMYXRlVXNlIGhhcyB1bmRlZmluZWQgYmVoYXZpb3I6IHRo
ZSB1c2UgbWF5IGhhcHBlbiBiZWZvcmUKKyAgICAgICAgLy8gdGhlIGRlZiwgb3IgaXQgbWF5IGhh
cHBlbiBhZnRlciBpdC4KICAgICAgICAgTGF0ZVVzZSwKIAorICAgICAgICAvLyBDb21iaW5hdGlv
biBvZiBMYXRlVXNlIGFuZCBDb2xkVXNlLgorICAgICAgICBMYXRlQ29sZFVzZSwKKwogICAgICAg
ICAvLyBEZWYgbWVhbnMgdGhhdCB0aGUgSW5zdCB3aWxsIHdyaXRlIHRvIHRoaXMgdmFsdWUgYWZ0
ZXIgZG9pbmcgZXZlcnl0aGluZyBlbHNlLgogICAgICAgICAvLwogICAgICAgICAvLyBGb3IgVG1w
OiBUaGUgSW5zdCB3aWxsIHdyaXRlIHRvIHRoaXMgVG1wLgpAQCAtMTI3LDYgKzEzMSwxNiBAQCBw
dWJsaWM6CiAgICAgICAgIC8vIFRoaXMgaXMgYSBjb21iaW5lZCBVc2UgYW5kIFpEZWYuIEl0IG1l
YW5zIHRoYXQgYm90aCB0aGluZ3MgaGFwcGVuLgogICAgICAgICBVc2VaRGVmLAogCisgICAgICAg
IC8vIFRoaXMgaXMgbGlrZSBEZWYsIGJ1dCBpbXBsaWVzIHRoYXQgdGhlIGFzc2lnbm1lbnQgb2Nj
dXJzIGJlZm9yZSB0aGUgc3RhcnQgb2YgdGhlIEluc3QncworICAgICAgICAvLyBleGVjdXRpb24g
cmF0aGVyIHRoYW4gYWZ0ZXIuIE5vdGUgdGhhdCBzcGVjaWZ5aW5nIHRoZSBzYW1lIFRtcCBvbmNl
IGFzIEVhcmx5RGVmIGFuZCBvbmNlCisgICAgICAgIC8vIGFzIFVzZSBoYXMgdW5kZWZpbmVkIGJl
aGF2aW9yOiB0aGUgdXNlIG1heSBoYXBwZW4gYmVmb3JlIHRoZSBkZWYsIG9yIGl0IG1heSBoYXBw
ZW4gYWZ0ZXIKKyAgICAgICAgLy8gaXQuCisgICAgICAgIEVhcmx5RGVmLAorCisgICAgICAgIC8v
IFNvbWUgaW5zdHJ1Y3Rpb25zIG5lZWQgYSBzY3JhdGNoIHJlZ2lzdGVyLiBXZSBtb2RlbCB0aGlz
IGJ5IHNheWluZyB0aGF0IHRoZSB0ZW1wb3JhcnkgaXMKKyAgICAgICAgLy8gZGVmaW5lZCBlYXJs
eSBhbmQgdXNlZCBsYXRlLiBUaGlzIHJvbGUgaW1wbGllcyB0aGF0LgorICAgICAgICBTY3JhdGNo
LAorCiAgICAgICAgIC8vIFRoaXMgaXMgYSBzcGVjaWFsIGtpbmQgb2YgdXNlIHRoYXQgaXMgb25s
eSB2YWxpZCBmb3IgYWRkcmVzc2VzLiBJdCBtZWFucyB0aGF0IHRoZQogICAgICAgICAvLyBpbnN0
cnVjdGlvbiB3aWxsIGV2YWx1YXRlIHRoZSBhZGRyZXNzIGV4cHJlc3Npb24gYW5kIGNvbnN1bWUg
dGhlIGVmZmVjdGl2ZSBhZGRyZXNzLCBidXQgaXQKICAgICAgICAgLy8gd2lsbCBuZWl0aGVyIGxv
YWQgbm9yIHN0b3JlLiBUaGlzIGlzIGFuIGVzY2FwaW5nIHVzZSwgYmVjYXVzZSBub3cgdGhlIGFk
ZHJlc3MgbWF5IGJlCkBAIC0xNzEsMTAgKzE4NSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2Ug
VXNlRGVmOgogICAgICAgICBjYXNlIFVzZVpEZWY6CiAgICAgICAgIGNhc2UgTGF0ZVVzZToKKyAg
ICAgICAgY2FzZSBMYXRlQ29sZFVzZToKKyAgICAgICAgY2FzZSBTY3JhdGNoOgogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGNhc2UgRGVmOgogICAgICAgICBjYXNlIFpEZWY6CiAg
ICAgICAgIGNhc2UgVXNlQWRkcjoKKyAgICAgICAgY2FzZSBFYXJseURlZjoKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KQEAgLTE4MywxNCArMjAwLDE3IEBAIHB1
YmxpYzoKICAgICB7CiAgICAgICAgIHN3aXRjaCAocm9sZSkgewogICAgICAgICBjYXNlIENvbGRV
c2U6Ci0gICAgICAgIGNhc2UgTGF0ZVVzZToKKyAgICAgICAgY2FzZSBMYXRlQ29sZFVzZToKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBjYXNlIFVzZToKICAgICAgICAgY2FzZSBV
c2VEZWY6CiAgICAgICAgIGNhc2UgVXNlWkRlZjoKKyAgICAgICAgY2FzZSBMYXRlVXNlOgogICAg
ICAgICBjYXNlIERlZjoKICAgICAgICAgY2FzZSBaRGVmOgogICAgICAgICBjYXNlIFVzZUFkZHI6
CisgICAgICAgIGNhc2UgU2NyYXRjaDoKKyAgICAgICAgY2FzZSBFYXJseURlZjoKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KQEAgLTIxMyw2ICsyMzMsOSBAQCBw
dWJsaWM6CiAgICAgICAgIGNhc2UgWkRlZjoKICAgICAgICAgY2FzZSBVc2VBZGRyOgogICAgICAg
ICBjYXNlIExhdGVVc2U6CisgICAgICAgIGNhc2UgTGF0ZUNvbGRVc2U6CisgICAgICAgIGNhc2Ug
U2NyYXRjaDoKKyAgICAgICAgY2FzZSBFYXJseURlZjoKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTIyMCwxNyArMjQzLDc0IEBAIHB1YmxpYzoKICAgICAv
LyBSZXR1cm5zIHRydWUgaWYgdGhlIFJvbGUgaW1wbGllcyB0aGF0IHRoZSBJbnN0IHdpbGwgVXNl
IHRoZSBBcmcgYWZ0ZXIgZG9pbmcgZXZlcnl0aGluZyBlbHNlLgogICAgIHN0YXRpYyBib29sIGlz
TGF0ZVVzZShSb2xlIHJvbGUpCiAgICAgewotICAgICAgICByZXR1cm4gcm9sZSA9PSBMYXRlVXNl
OworICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKKyAgICAgICAgY2FzZSBMYXRlVXNlOgorICAgICAg
ICBjYXNlIExhdGVDb2xkVXNlOgorICAgICAgICBjYXNlIFNjcmF0Y2g6CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBDb2xkVXNlOgorICAgICAgICBjYXNlIFVzZToKKyAg
ICAgICAgY2FzZSBVc2VEZWY6CisgICAgICAgIGNhc2UgVXNlWkRlZjoKKyAgICAgICAgY2FzZSBE
ZWY6CisgICAgICAgIGNhc2UgWkRlZjoKKyAgICAgICAgY2FzZSBVc2VBZGRyOgorICAgICAgICBj
YXNlIEVhcmx5RGVmOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAgICAg
fQogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBSb2xlIGltcGxpZXMgdGhhdCB0aGUgSW5z
dCB3aWxsIERlZiB0aGUgQXJnLgotICAgIHN0YXRpYyBib29sIGlzRGVmKFJvbGUgcm9sZSkKKyAg
ICBzdGF0aWMgYm9vbCBpc0FueURlZihSb2xlIHJvbGUpCiAgICAgewogICAgICAgICBzd2l0Y2gg
KHJvbGUpIHsKICAgICAgICAgY2FzZSBVc2U6CiAgICAgICAgIGNhc2UgQ29sZFVzZToKICAgICAg
ICAgY2FzZSBVc2VBZGRyOgogICAgICAgICBjYXNlIExhdGVVc2U6CisgICAgICAgIGNhc2UgTGF0
ZUNvbGRVc2U6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgRGVmOgor
ICAgICAgICBjYXNlIFVzZURlZjoKKyAgICAgICAgY2FzZSBaRGVmOgorICAgICAgICBjYXNlIFVz
ZVpEZWY6CisgICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNhc2UgU2NyYXRjaDoKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gUmV0dXJu
cyB0cnVlIGlmIHRoZSBSb2xlIGltcGxpZXMgdGhhdCB0aGUgSW5zdCB3aWxsIERlZiB0aGUgQXJn
IGJlZm9yZSBzdGFydCBvZiBleGVjdXRpb24uCisgICAgc3RhdGljIGJvb2wgaXNFYXJseURlZihS
b2xlIHJvbGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKKyAgICAgICAgY2FzZSBV
c2U6CisgICAgICAgIGNhc2UgQ29sZFVzZToKKyAgICAgICAgY2FzZSBVc2VBZGRyOgorICAgICAg
ICBjYXNlIExhdGVVc2U6CisgICAgICAgIGNhc2UgRGVmOgorICAgICAgICBjYXNlIFVzZURlZjoK
KyAgICAgICAgY2FzZSBaRGVmOgorICAgICAgICBjYXNlIFVzZVpEZWY6CisgICAgICAgIGNhc2Ug
TGF0ZUNvbGRVc2U6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgRWFy
bHlEZWY6CisgICAgICAgIGNhc2UgU2NyYXRjaDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgfQorCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBSb2xlIGltcGxp
ZXMgdGhhdCB0aGUgSW5zdCB3aWxsIERlZiB0aGUgQXJnIGFmdGVyIHRoZSBlbmQgb2YgZXhlY3V0
aW9uLgorICAgIHN0YXRpYyBib29sIGlzTGF0ZURlZihSb2xlIHJvbGUpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKHJvbGUpIHsKKyAgICAgICAgY2FzZSBVc2U6CisgICAgICAgIGNhc2UgQ29sZFVz
ZToKKyAgICAgICAgY2FzZSBVc2VBZGRyOgorICAgICAgICBjYXNlIExhdGVVc2U6CisgICAgICAg
IGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNhc2UgU2NyYXRjaDoKKyAgICAgICAgY2FzZSBMYXRl
Q29sZFVzZToKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgY2FzZSBEZWY6CiAg
ICAgICAgIGNhc2UgVXNlRGVmOgpAQCAtMjUwLDYgKzMzMCw5IEBAIHB1YmxpYzoKICAgICAgICAg
Y2FzZSBMYXRlVXNlOgogICAgICAgICBjYXNlIERlZjoKICAgICAgICAgY2FzZSBVc2VEZWY6Cisg
ICAgICAgIGNhc2UgRWFybHlEZWY6CisgICAgICAgIGNhc2UgU2NyYXRjaDoKKyAgICAgICAgY2Fz
ZSBMYXRlQ29sZFVzZToKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgY2FzZSBa
RGVmOgogICAgICAgICBjYXNlIFVzZVpEZWY6CkBAIC0zMzEsNiArNDE0LDExIEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgfQogCisgICAgQXJnKFJlZyByZWcpCisgICAgICAgIDogQXJnKEFpcjo6VG1w
KHJlZykpCisgICAgeworICAgIH0KKwogICAgIHN0YXRpYyBBcmcgaW1tKGludDY0X3QgdmFsdWUp
CiAgICAgewogICAgICAgICBBcmcgcmVzdWx0OwpAQCAtODQ1LDcgKzkzMyw3IEBAIHB1YmxpYzoK
ICAgICAgICAgY2FzZSBDYWxsQXJnOgogICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRBZGRyRm9y
bShvZmZzZXQoKSk7CiAgICAgICAgIGNhc2UgSW5kZXg6Ci0gICAgICAgICAgICByZXR1cm4gaXNW
YWxpZEluZGV4Rm9ybShvZmZzZXQoKSwgc2NhbGUoKSwgd2lkdGgpOworICAgICAgICAgICAgcmV0
dXJuIGlzVmFsaWRJbmRleEZvcm0oc2NhbGUoKSwgb2Zmc2V0KCksIHdpZHRoKTsKICAgICAgICAg
Y2FzZSBSZWxDb25kOgogICAgICAgICBjYXNlIFJlc0NvbmQ6CiAgICAgICAgIGNhc2UgRG91Ymxl
Q29uZDoKQEAgLTg4Miw3ICs5NzAsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBzd2l0Y2gg
KG1fa2luZCkgewogICAgICAgICBjYXNlIFRtcDoKLSAgICAgICAgICAgIEFTU0VSVChpc0FueVVz
ZShhcmdSb2xlKSB8fCBpc0RlZihhcmdSb2xlKSk7CisgICAgICAgICAgICBBU1NFUlQoaXNBbnlV
c2UoYXJnUm9sZSkgfHwgaXNBbnlEZWYoYXJnUm9sZSkpOwogICAgICAgICAgICAgZnVuY3Rvciht
X2Jhc2UsIGFyZ1JvbGUsIGFyZ1R5cGUsIGFyZ1dpZHRoKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIEFkZHI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckJhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckJhc2ljQmxvY2suaAkocmV2aXNpb24gMTk0NTI3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsNiArNjQsMTEgQEAg
cHVibGljOgogICAgIGNvbnN0IEluc3QmIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVy
biBtX2luc3RzW2luZGV4XTsgfQogICAgIEluc3QmIGF0KHVuc2lnbmVkIGluZGV4KSB7IHJldHVy
biBtX2luc3RzW2luZGV4XTsgfQogCisgICAgSW5zdCogZ2V0KHVuc2lnbmVkIGluZGV4KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGluZGV4IDwgc2l6ZSgpID8gJmF0KGluZGV4KSA6IG51bGxwdHI7
CisgICAgfQorCiAgICAgY29uc3QgSW5zdCYgbGFzdCgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHMu
bGFzdCgpOyB9CiAgICAgSW5zdCYgbGFzdCgpIHsgcmV0dXJuIG1faW5zdHMubGFzdCgpOyB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRWxpbWluYXRlRGVhZENvZGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRWxpbWlu
YXRlRGVhZENvZGUuY3BwCShyZXZpc2lvbiAxOTQ1MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckVsaW1pbmF0ZURlYWRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MSw3ICs4
MSw5IEBAIGJvb2wgZWxpbWluYXRlRGVhZENvZGUoQ29kZSYgY29kZSkKICAgICAgICAgYm9vbCBz
dG9yZXNUb0xpdmUgPSBmYWxzZTsKICAgICAgICAgaW5zdC5mb3JFYWNoQXJnKAogICAgICAgICAg
ICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSwgQXJnOjpXaWR0aCkg
ewotICAgICAgICAgICAgICAgIGlmICghQXJnOjppc0RlZihyb2xlKSkKKyAgICAgICAgICAgICAg
ICBpZiAoIUFyZzo6aXNBbnlEZWYocm9sZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICBpZiAocm9sZSA9PSBBcmc6OlNjcmF0Y2gpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICBzdG9yZXNUb0xpdmUgfD0gaXNBcmdMaXZl
KGFyZyk7CiAgICAgICAgICAgICB9KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeFBhcnRpYWxSZWdpc3RlclN0YWxscy5jcHAJKHJl
dmlzaW9uIDE5NDUyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4UGFy
dGlhbFJlZ2lzdGVyU3RhbGxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTYsNyArMTE2LDcgQEAgdm9p
ZCB1cGRhdGVEaXN0YW5jZXMoSW5zdCYgaW5zdCwgRlBEZWZEaQogICAgIGluc3QuZm9yRWFjaFRt
cChbJl0gKFRtcCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRoKSB7
CiAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UodG1wLmlzUmVnKCksICJUaGlzIHBoYXNlIG11
c3QgYmUgcnVuIGFmdGVyIHJlZ2lzdGVyIGFsbG9jYXRpb24uIik7CiAKLSAgICAgICAgaWYgKHRt
cC5pc0ZQUigpICYmIEFyZzo6aXNEZWYocm9sZSkpCisgICAgICAgIGlmICh0bXAuaXNGUFIoKSAm
JiBBcmc6OmlzQW55RGVmKHJvbGUpKQogICAgICAgICAgICAgbG9jYWxEaXN0YW5jZS5hZGQodG1w
LmZwcigpLCBkaXN0YW5jZVRvQmxvY2tFbmQpOwogICAgIH0pOwogfQpAQCAtMjA1LDcgKzIwNSw3
IEBAIHZvaWQgZml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzKENvZGUmIGNvZGUKICAgICAgICAgICAg
ICAgICBSZWdpc3RlclNldCB1c2VzOwogICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcChb
Jl0gKFRtcCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRoKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGlmICh0bXAuaXNGUFIoKSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKEFyZzo6aXNEZWYocm9sZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
QXJnOjppc0FueURlZihyb2xlKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZzLnNl
dCh0bXAuZnByKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlVc2Uo
cm9sZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcy5zZXQodG1wLmZwcigpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNwcAkocmV2aXNpb24g
MTk0NTI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zOSw3ICszOSw3IEBAIGJvb2wgSW5zdDo6aGFzQXJnRWZmZWN0cygpCiAgICAg
Ym9vbCByZXN1bHQgPSBmYWxzZTsKICAgICBmb3JFYWNoQXJnKAogICAgICAgICBbJl0gKEFyZyYs
IEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUsIEFyZzo6V2lkdGgpIHsKLSAgICAgICAgICAgIGlm
IChBcmc6OmlzRGVmKHJvbGUpKQorICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlEZWYocm9sZSkp
CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKICAgICAgICAgfSk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCShyZXZp
c2lvbiAxOTQ1MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xMjcsMTAgKzEyNywxOCBAQCBwdWJsaWM6CiAgICAgY29uc3QgUmVnaXN0
ZXJTZXQmIGV4dHJhQ2xvYmJlcmVkUmVncygpOwogICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRy
YUVhcmx5Q2xvYmJlcmVkUmVncygpOwogCi0gICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBEZWZzIGFu
ZCB0aGUgZXh0cmEgY2xvYmJlcmVkIHJlZ2lzdGVycy4gWW91IG11c3Qgc3VwcGx5IHRoZSBuZXh0
IGluc3RydWN0aW9uIGlmCi0gICAgLy8gdGhlcmUgaXMgb25lLgotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+Ci0gICAgdm9pZCBmb3JFYWNoVG1wV2l0aEV4dHJhQ2xvYmJlcmVkUmVncyhJ
bnN0KiBuZXh0SW5zdCwgY29uc3QgRnVuY3RvciYgZnVuY3Rvcik7CisgICAgLy8gSXRlcmF0ZSBv
dmVyIGFsbCBEZWYncyB0aGF0IGhhcHBlbiBhdCB0aGUgZW5kIG9mIGFuIGluc3RydWN0aW9uLiBZ
b3Ugc3VwcGx5IGEgcGFpcgorICAgIC8vIGluc3RydWN0aW9ucy4gVGhlIGluc3RydWN0aW9ucyBt
dXN0IGFwcGVhciBuZXh0IHRvIGVhY2ggb3RoZXIsIGluIHRoYXQgb3JkZXIsIGluIHNvbWUgYmFz
aWMKKyAgICAvLyBibG9jay4gWW91IGNhbiBwYXNzIG51bGwgZm9yIHRoZSBmaXJzdCBpbnN0cnVj
dGlvbiB3aGVuIGFuYWx5emluZyB3aGF0IGhhcHBlbnMgYXQgdGhlIHRvcCBvZgorICAgIC8vIGEg
YmFzaWMgYmxvY2suIFlvdSBjYW4gcGFzcyBudWxsIGZvciB0aGUgc2Vjb25kIGluc3RydWN0aW9u
IHdoZW4gYW5hbHl6aW5nIHdoYXQgaGFwcGVucyBhdCB0aGUKKyAgICAvLyBib3R0b20gb2YgYSBi
YXNpYyBibG9jay4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUaGluZywgdHlwZW5hbWUgRnVuY3Rv
cj4KKyAgICBzdGF0aWMgdm9pZCBmb3JFYWNoRGVmKEluc3QqIHByZXZJbnN0LCBJbnN0KiBuZXh0
SW5zdCwgY29uc3QgRnVuY3RvciYpOworCisgICAgLy8gSXRlcmF0ZSBvdmVyIGFsbCBEZWYncyB0
aGF0IGhhcHBlbiBhdCB0aGUgZW5kIG9mIHRoaXMgaW5zdHJ1Y3Rpb24sIGluY2x1ZGluZyBleHRy
YSBjbG9iYmVyZWQKKyAgICAvLyByZWdpc3RlcnMuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVGhp
bmcsIHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgc3RhdGljIHZvaWQgZm9yRWFjaERlZldpdGhFeHRy
YUNsb2JiZXJlZFJlZ3MoSW5zdCogcHJldkluc3QsIEluc3QqIG5leHRJbnN0LCBjb25zdCBGdW5j
dG9yJik7CiAKICAgICAvLyBVc2UgdGhpcyB0byByZXBvcnQgd2hpY2ggcmVnaXN0ZXJzIGFyZSBs
aXZlLiBUaGlzIHNob3VsZCBiZSBkb25lIGp1c3QgYmVmb3JlIGNvZGVnZW4uIE5vdGUKICAgICAv
LyB0aGF0IGZvciBlZmZpY2llbmN5LCByZXBvcnRVc2VkUmVnaXN0ZXJzKCkgb25seSB3b3JrcyBp
ZiBoYXNTcGVjaWFsKCkgcmV0dXJucyB0cnVlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMuaAkocmV2aXNpb24gMTk0NTI3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk1
LDI0ICs5NSw0OCBAQCBpbmxpbmUgY29uc3QgUmVnaXN0ZXJTZXQmIEluc3Q6OmV4dHJhRWFyCiAg
ICAgcmV0dXJuIGFyZ3NbMF0uc3BlY2lhbCgpLT5leHRyYUVhcmx5Q2xvYmJlcmVkUmVncygqdGhp
cyk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci1pbmxpbmUgdm9pZCBJbnN0Ojpm
b3JFYWNoVG1wV2l0aEV4dHJhQ2xvYmJlcmVkUmVncyhJbnN0KiBuZXh0SW5zdCwgY29uc3QgRnVu
Y3RvciYgZnVuY3RvcikKK3RlbXBsYXRlPHR5cGVuYW1lIFRoaW5nLCB0eXBlbmFtZSBGdW5jdG9y
PgoraW5saW5lIHZvaWQgSW5zdDo6Zm9yRWFjaERlZihJbnN0KiBwcmV2SW5zdCwgSW5zdCogbmV4
dEluc3QsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCit7CisgICAgaWYgKHByZXZJbnN0KSB7Cisg
ICAgICAgIHByZXZJbnN0LT5mb3JFYWNoPFRoaW5nPigKKyAgICAgICAgICAgIFsmXSAoVGhpbmcm
IHRoaW5nLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIGFyZ1R5cGUsIEFyZzo6V2lkdGggYXJn
V2lkdGgpIHsKKyAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0xhdGVEZWYocm9sZSkpCisgICAg
ICAgICAgICAgICAgICAgIGZ1bmN0b3IodGhpbmcsIHJvbGUsIGFyZ1R5cGUsIGFyZ1dpZHRoKTsK
KyAgICAgICAgICAgIH0pOworICAgIH0KKworICAgIGlmIChuZXh0SW5zdCkgeworICAgICAgICBu
ZXh0SW5zdC0+Zm9yRWFjaDxUaGluZz4oCisgICAgICAgICAgICBbJl0gKFRoaW5nJiB0aGluZywg
QXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSBhcmdUeXBlLCBBcmc6OldpZHRoIGFyZ1dpZHRoKSB7
CisgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNFYXJseURlZihyb2xlKSkKKyAgICAgICAgICAg
ICAgICAgICAgZnVuY3Rvcih0aGluZywgcm9sZSwgYXJnVHlwZSwgYXJnV2lkdGgpOworICAgICAg
ICAgICAgfSk7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUaGluZywgdHlwZW5hbWUg
RnVuY3Rvcj4KK2lubGluZSB2b2lkIEluc3Q6OmZvckVhY2hEZWZXaXRoRXh0cmFDbG9iYmVyZWRS
ZWdzKAorICAgIEluc3QqIHByZXZJbnN0LCBJbnN0KiBuZXh0SW5zdCwgY29uc3QgRnVuY3RvciYg
ZnVuY3RvcikKIHsKLSAgICBmb3JFYWNoVG1wKAotICAgICAgICBbJl0gKFRtcCYgdG1wQXJnLCBB
cmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIGFyZ1R5cGUsIEFyZzo6V2lkdGggYXJnV2lkdGgpIHsK
LSAgICAgICAgICAgIGZ1bmN0b3IodG1wQXJnLCByb2xlLCBhcmdUeXBlLCBhcmdXaWR0aCk7Ci0g
ICAgICAgIH0pOworICAgIGZvckVhY2hEZWY8VGhpbmc+KHByZXZJbnN0LCBuZXh0SW5zdCwgZnVu
Y3Rvcik7CiAKKyAgICBBcmc6OlJvbGUgcmVnRGVmUm9sZTsKKyAgICAKICAgICBhdXRvIHJlcG9y
dFJlZyA9IFsmXSAoUmVnIHJlZykgewogICAgICAgICBBcmc6OlR5cGUgdHlwZSA9IHJlZy5pc0dQ
UigpID8gQXJnOjpHUCA6IEFyZzo6RlA7Ci0gICAgICAgIGZ1bmN0b3IoVG1wKHJlZyksIEFyZzo6
RGVmLCB0eXBlLCBBcmc6OmNvbnNlcnZhdGl2ZVdpZHRoKHR5cGUpKTsKKyAgICAgICAgZnVuY3Rv
cihUaGluZyhyZWcpLCByZWdEZWZSb2xlLCB0eXBlLCBBcmc6OmNvbnNlcnZhdGl2ZVdpZHRoKHR5
cGUpKTsKICAgICB9OwogCi0gICAgaWYgKGhhc1NwZWNpYWwoKSkKLSAgICAgICAgZXh0cmFDbG9i
YmVyZWRSZWdzKCkuZm9yRWFjaChyZXBvcnRSZWcpOworICAgIGlmIChwcmV2SW5zdCAmJiBwcmV2
SW5zdC0+aGFzU3BlY2lhbCgpKSB7CisgICAgICAgIHJlZ0RlZlJvbGUgPSBBcmc6OkRlZjsKKyAg
ICAgICAgcHJldkluc3QtPmV4dHJhQ2xvYmJlcmVkUmVncygpLmZvckVhY2gocmVwb3J0UmVnKTsK
KyAgICB9CiAKLSAgICBpZiAobmV4dEluc3QgJiYgbmV4dEluc3QtPmhhc1NwZWNpYWwoKSkKKyAg
ICBpZiAobmV4dEluc3QgJiYgbmV4dEluc3QtPmhhc1NwZWNpYWwoKSkgeworICAgICAgICByZWdE
ZWZSb2xlID0gQXJnOjpFYXJseURlZjsKICAgICAgICAgbmV4dEluc3QtPmV4dHJhRWFybHlDbG9i
YmVyZWRSZWdzKCkuZm9yRWFjaChyZXBvcnRSZWcpOworICAgIH0KIH0KIAogaW5saW5lIHZvaWQg
SW5zdDo6cmVwb3J0VXNlZFJlZ2lzdGVycyhjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVy
cykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdpc3Rl
ckNvYWxlc2NpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuY3BwCShyZXZpc2lvbiAxOTQ1MjcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNj
aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcwLDQwICs3NzAsNDMgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIHR5cGVuYW1lIFRtcExpdmVuZXNzPHR5cGU+OjpMb2NhbENhbGMgbG9jYWxDYWxj
KGxpdmVuZXNzLCBibG9jayk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9
IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykgewogICAgICAgICAgICAgICAgIEluc3QmIGlu
c3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKLSAgICAgICAgICAgICAgICBJbnN0KiBuZXh0SW5z
dCA9IGluc3RJbmRleCArIDEgPCBibG9jay0+c2l6ZSgpID8gJmJsb2NrLT5hdChpbnN0SW5kZXgg
KyAxKSA6IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgYnVpbGQoaW5zdCwgbmV4dEluc3QsIGxv
Y2FsQ2FsYyk7CisgICAgICAgICAgICAgICAgSW5zdCogbmV4dEluc3QgPSBibG9jay0+Z2V0KGlu
c3RJbmRleCArIDEpOworICAgICAgICAgICAgICAgIGJ1aWxkKCZpbnN0LCBuZXh0SW5zdCwgbG9j
YWxDYWxjKTsKICAgICAgICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZShpbnN0SW5kZXgpOwog
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnVpbGQobnVsbHB0ciwgJmJsb2NrLT5hdCgwKSwg
bG9jYWxDYWxjKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHZvaWQgYnVpbGQoSW5zdCYgaW5z
dCwgSW5zdCogbmV4dEluc3QsIGNvbnN0IHR5cGVuYW1lIFRtcExpdmVuZXNzPHR5cGU+OjpMb2Nh
bENhbGMmIGxvY2FsQ2FsYykKKyAgICB2b2lkIGJ1aWxkKEluc3QqIHByZXZJbnN0LCBJbnN0KiBu
ZXh0SW5zdCwgY29uc3QgdHlwZW5hbWUgVG1wTGl2ZW5lc3M8dHlwZT46OkxvY2FsQ2FsYyYgbG9j
YWxDYWxjKQogICAgIHsKLSAgICAgICAgaW5zdC5mb3JFYWNoVG1wV2l0aEV4dHJhQ2xvYmJlcmVk
UmVncygKLSAgICAgICAgICAgIG5leHRJbnN0LAotICAgICAgICAgICAgWyZdIChjb25zdCBUbXAm
IGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSBhcmdUeXBlLCBBcmc6OldpZHRoKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFBcmc6OmlzRGVmKHJvbGUpIHx8IGFyZ1R5cGUgIT0gdHlwZSkK
KyAgICAgICAgSW5zdDo6Zm9yRWFjaERlZldpdGhFeHRyYUNsb2JiZXJlZFJlZ3M8VG1wPigKKyAg
ICAgICAgICAgIHByZXZJbnN0LCBuZXh0SW5zdCwKKyAgICAgICAgICAgIFsmXSAoY29uc3QgVG1w
JiBhcmcsIEFyZzo6Um9sZSwgQXJnOjpUeXBlIGFyZ1R5cGUsIEFyZzo6V2lkdGgpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoYXJnVHlwZSAhPSB0eXBlKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gQWxsIHRoZSBEZWYoKXMg
aW50ZXJmZXJlIHdpdGggZWFjaCBvdGhlciBhbmQgd2l0aCBhbGwgdGhlIGV4dHJhIGNsb2JiZXJl
ZCBUbXBzLgogICAgICAgICAgICAgICAgIC8vIFdlIHNob3VsZCBub3QgdXNlIGZvckVhY2hEZWZB
bmRFeHRyYUNsb2JiZXJlZFRtcCgpIGhlcmUgc2luY2UgY29sb3JlZCBUbXBzCiAgICAgICAgICAg
ICAgICAgLy8gZG8gbm90IG5lZWQgaW50ZXJmZXJlbmNlIGVkZ2VzIGluIG91ciBpbXBsZW1lbnRh
dGlvbi4KLSAgICAgICAgICAgICAgICBpbnN0LmZvckVhY2hUbXAoWyZdIChUbXAmIG90aGVyQXJn
LCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIGFyZ1R5cGUsIEFyZzo6V2lkdGgpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKCFBcmc6OmlzRGVmKHJvbGUpIHx8IGFyZ1R5cGUgIT0gdHlwZSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgICAgICBh
ZGRFZGdlKGFyZywgb3RoZXJBcmcpOwotICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
ICAgIEluc3Q6OmZvckVhY2hEZWY8VG1wPigKKyAgICAgICAgICAgICAgICAgICAgcHJldkluc3Qs
IG5leHRJbnN0LAorICAgICAgICAgICAgICAgICAgICBbJl0gKFRtcCYgb3RoZXJBcmcsIEFyZzo6
Um9sZSwgQXJnOjpUeXBlIGFyZ1R5cGUsIEFyZzo6V2lkdGgpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChhcmdUeXBlICE9IHR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAg
ICBhZGRFZGdlKGFyZywgb3RoZXJBcmcpOworICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAg
ICAgICAgIH0pOwogCi0gICAgICAgIGlmIChtYXlCZUNvYWxlc2NhYmxlKGluc3QpKSB7CisgICAg
ICAgIGlmIChwcmV2SW5zdCAmJiBtYXlCZUNvYWxlc2NhYmxlKCpwcmV2SW5zdCkpIHsKICAgICAg
ICAgICAgIC8vIFdlIGRvIG5vdCB3YW50IHRoZSBVc2UoKSBvZiB0aGlzIG1vdmUgdG8gaW50ZXJm
ZXJlIHdpdGggdGhlIERlZigpLCBldmVuIGlmIGl0IGlzIGxpdmUKICAgICAgICAgICAgIC8vIGFm
dGVyIHRoZSBNb3ZlLiBJZiB3ZSB3ZXJlIHRvIGFkZCB0aGUgaW50ZXJmZXJlbmNlIGVkZ2UsIGl0
IHdvdWxkIGJlIGltcG9zc2libGUgdG8KICAgICAgICAgICAgIC8vIGNvYWxlc2NlIHRoZSBNb3Zl
IGV2ZW4gaWYgdGhlIHR3byBUbXAgbmV2ZXIgaW50ZXJmZXJlIGFueXdoZXJlLgogICAgICAgICAg
ICAgVG1wIGRlZlRtcDsKICAgICAgICAgICAgIFRtcCB1c2VUbXA7Ci0gICAgICAgICAgICBpbnN0
LmZvckVhY2hUbXAoWyZkZWZUbXAsICZ1c2VUbXBdIChUbXAmIGFyZ1RtcCwgQXJnOjpSb2xlIHJv
bGUsIEFyZzo6VHlwZSwgQXJnOjpXaWR0aCkgewotICAgICAgICAgICAgICAgIGlmIChBcmc6Omlz
RGVmKHJvbGUpKQorICAgICAgICAgICAgcHJldkluc3QtPmZvckVhY2hUbXAoWyZkZWZUbXAsICZ1
c2VUbXBdIChUbXAmIGFyZ1RtcCwgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSwgQXJnOjpXaWR0
aCkgeworICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzTGF0ZURlZihyb2xlKSkKICAgICAgICAg
ICAgICAgICAgICAgZGVmVG1wID0gYXJnVG1wOwogICAgICAgICAgICAgICAgIGVsc2UgewogICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoQXJnOjppc0Vhcmx5VXNlKHJvbGUpKTsKQEAgLTgyMiw3
ICs4MjUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgQVNTRVJUKG5leHRNb3ZlSW5kZXggPD0g
bV9hY3RpdmVNb3Zlcy5zaXplKCkpOwogICAgICAgICAgICAgbV9hY3RpdmVNb3Zlcy5lbnN1cmVT
aXplKG5leHRNb3ZlSW5kZXggKyAxKTsKIAotICAgICAgICAgICAgZm9yIChjb25zdCBBcmcmIGFy
ZyA6IGluc3QuYXJncykgeworICAgICAgICAgICAgZm9yIChjb25zdCBBcmcmIGFyZyA6IHByZXZJ
bnN0LT5hcmdzKSB7CiAgICAgICAgICAgICAgICAgYXV0byYgbGlzdCA9IG1fbW92ZUxpc3RbQWJz
b2x1dGVUbXBNYXBwZXI8dHlwZT46OmFic29sdXRlSW5kZXgoYXJnLnRtcCgpKV07CiAgICAgICAg
ICAgICAgICAgbGlzdC5hZGQobmV4dE1vdmVJbmRleCk7CiAgICAgICAgICAgICB9CkBAIC04MzIs
MjYgKzgzNSwyMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBhZGRFZGdlKGRlZlRt
cCwgbGl2ZVRtcCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIFRoZSBuZXh0IGlu
c3RydWN0aW9uIGNvdWxkIGhhdmUgZWFybHkgY2xvYmJlcnMuIFdlIG5lZWQgdG8gY29uc2lkZXIg
dGhvc2Ugbm93LgotICAgICAgICAgICAgaWYgKG5leHRJbnN0ICYmIG5leHRJbnN0LT5oYXNTcGVj
aWFsKCkpIHsKLSAgICAgICAgICAgICAgICBuZXh0SW5zdC0+ZXh0cmFFYXJseUNsb2JiZXJlZFJl
Z3MoKS5mb3JFYWNoKFsmXSAoUmVnIHJlZykgewotICAgICAgICAgICAgICAgICAgICBpZiAocmVn
LmlzR1BSKCkgPT0gKHR5cGUgPT0gQXJnOjpHUCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoY29uc3QgVG1wJiBsaXZlVG1wIDogbG9jYWxDYWxjLmxpdmUoKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhZGRFZGdlKFRtcChyZWcpLCBsaXZlVG1wKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfQorICAgICAgICAg
ICAgLy8gVGhlIG5leHQgaW5zdHJ1Y3Rpb24gY291bGQgaGF2ZSBlYXJseSBjbG9iYmVycyBvciBl
YXJseSBkZWYncy4gV2UgbmVlZCB0byBjb25zaWRlcgorICAgICAgICAgICAgLy8gdGhvc2Ugbm93
LgorICAgICAgICAgICAgYWRkRWRnZXMobnVsbHB0ciwgbmV4dEluc3QsIGxvY2FsQ2FsYy5saXZl
KCkpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGFkZEVkZ2VzKGluc3QsIG5leHRJbnN0
LCBsb2NhbENhbGMubGl2ZSgpKTsKKyAgICAgICAgICAgIGFkZEVkZ2VzKHByZXZJbnN0LCBuZXh0
SW5zdCwgbG9jYWxDYWxjLmxpdmUoKSk7CiAgICAgfQogCi0gICAgdm9pZCBhZGRFZGdlcyhJbnN0
JiBpbnN0LCBJbnN0KiBuZXh0SW5zdCwgdHlwZW5hbWUgVG1wTGl2ZW5lc3M8dHlwZT46OkxvY2Fs
Q2FsYzo6SXRlcmFibGUgbGl2ZVRtcHMpCisgICAgdm9pZCBhZGRFZGdlcyhJbnN0KiBwcmV2SW5z
dCwgSW5zdCogbmV4dEluc3QsIHR5cGVuYW1lIFRtcExpdmVuZXNzPHR5cGU+OjpMb2NhbENhbGM6
Okl0ZXJhYmxlIGxpdmVUbXBzKQogICAgIHsKICAgICAgICAgLy8gQWxsIHRoZSBEZWYoKXMgaW50
ZXJmZXJlIHdpdGggZXZlcnRoaW5nIGxpdmUuCi0gICAgICAgIGluc3QuZm9yRWFjaFRtcFdpdGhF
eHRyYUNsb2JiZXJlZFJlZ3MoCi0gICAgICAgICAgICBuZXh0SW5zdCwKLSAgICAgICAgICAgIFsm
XSAoY29uc3QgVG1wJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgYXJnVHlwZSwgQXJn
OjpXaWR0aCkgewotICAgICAgICAgICAgICAgIGlmICghQXJnOjppc0RlZihyb2xlKSB8fCBhcmdU
eXBlICE9IHR5cGUpCisgICAgICAgIEluc3Q6OmZvckVhY2hEZWZXaXRoRXh0cmFDbG9iYmVyZWRS
ZWdzPFRtcD4oCisgICAgICAgICAgICBwcmV2SW5zdCwgbmV4dEluc3QsCisgICAgICAgICAgICBb
Jl0gKGNvbnN0IFRtcCYgYXJnLCBBcmc6OlJvbGUsIEFyZzo6VHlwZSBhcmdUeXBlLCBBcmc6Oldp
ZHRoKSB7CisgICAgICAgICAgICAgICAgaWYgKGFyZ1R5cGUgIT0gdHlwZSkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGZvciAo
Y29uc3QgVG1wJiBsaXZlVG1wIDogbGl2ZVRtcHMpIHsKQEAgLTEyNDIsMTYgKzEyMzksMTUgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlVc2Uocm9sZSkpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIFRtcCBuZXdUbXAgPSBtX2NvZGUubmV3VG1wKHR5cGUp
OwotICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydChpbnN0SW5kZXgs
IG1vdmUsIGluc3Qub3JpZ2luLCBhcmcsIG5ld1RtcCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB0bXAgPSBuZXdUbXA7CisgICAgICAgICAgICAgICAgICAgIHRtcCA9IG1fY29kZS5uZXdUbXAo
dHlwZSk7CisgICAgICAgICAgICAgICAgICAgIHVuc3BpbGxhYmxlVG1wcy5hZGQoQWJzb2x1dGVU
bXBNYXBwZXI8dHlwZT46OmFic29sdXRlSW5kZXgodG1wKSk7CiAKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEFueSBuZXcgRmlsbCgpIHNob3VsZCBuZXZlciBiZSBzcGlsbGVkLgotICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zcGlsbGFibGVUbXBzLmFkZChBYnNvbHV0ZVRtcE1hcHBlcjx0
eXBlPjo6YWJzb2x1dGVJbmRleCh0bXApKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUg
IT0gQXJnOjpTY3JhdGNoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0Fu
eVVzZShyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5z
ZXJ0KGluc3RJbmRleCwgbW92ZSwgaW5zdC5vcmlnaW4sIGFyZywgdG1wKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55RGVmKHJvbGUpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoaW5zdEluZGV4ICsgMSwgbW92ZSwgaW5zdC5v
cmlnaW4sIHRtcCwgYXJnKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICBpZiAoQXJnOjppc0RlZihyb2xlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGluc2Vy
dGlvblNldC5pbnNlcnQoaW5zdEluZGV4ICsgMSwgbW92ZSwgaW5zdC5vcmlnaW4sIHRtcCwgYXJn
KTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGluc2Vy
dGlvblNldC5leGVjdXRlKGJsb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyTGl2ZW5lc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckxpdmVuZXNzLmgJKHJldmlzaW9uIDE5NDUyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTgsNiArMTE4LDEzIEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpbnN0SW5kZXggPSBibG9jay0+
c2l6ZSgpOyBpbnN0SW5kZXgtLTspCiAgICAgICAgICAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVj
dXRlKGluc3RJbmRleCk7CiAKKyAgICAgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIGVhcmx5IGRl
ZidzIG9mIHRoZSBmaXJzdCBpbnN0cnVjdGlvbi4KKyAgICAgICAgICAgICAgICBibG9jay0+YXQo
MCkuZm9yRWFjaDx0eXBlbmFtZSBBZGFwdGVyOjpUaGluZz4oCisgICAgICAgICAgICAgICAgICAg
IFsmXSAodHlwZW5hbWUgQWRhcHRlcjo6VGhpbmcmIHRoaW5nLCBBcmc6OlJvbGUgcm9sZSwgQXJn
OjpUeXBlIHR5cGUsIEFyZzo6V2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChB
cmc6OmlzRWFybHlEZWYocm9sZSkgJiYgQWRhcHRlcjo6YWNjZXB0c1R5cGUodHlwZSkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV93b3Jrc2V0LnJlbW92ZShBZGFwdGVyOjp2YWx1ZVRv
SW5kZXgodGhpbmcpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisKICAgICAgICAgICAgICAg
ICBWZWN0b3I8dW5zaWduZWQ+JiBsaXZlQXRIZWFkID0gbV9saXZlQXRIZWFkW2Jsb2NrXTsKIAog
ICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgY2FyZSBhYm91dCBUbXBzIHRoYXQgd2VyZSBkaXNj
b3ZlcmVkIGluIHRoaXMgaXRlcmF0aW9uLiBJdCBpcyBpbXBvc3NpYmxlCkBAIC0yMTMsMTAgKzIy
MCwyMSBAQCBwdWJsaWM6CiAgICAgICAgIHsKICAgICAgICAgICAgIEluc3QmIGluc3QgPSBtX2Js
b2NrLT5hdChpbnN0SW5kZXgpOwogICAgICAgICAgICAgYXV0byYgd29ya3NldCA9IG1fbGl2ZW5l
c3MubV93b3Jrc2V0OworCisgICAgICAgICAgICAvLyBGaXJzdCBoYW5kbGUgdGhlIGVhcmx5IGRl
ZidzIG9mIHRoZSBuZXh0IGluc3RydWN0aW9uLgorICAgICAgICAgICAgaWYgKGluc3RJbmRleCAr
IDEgPCBtX2Jsb2NrLT5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICBJbnN0JiBuZXh0SW5zdCA9
IG1fYmxvY2stPmF0KGluc3RJbmRleCArIDEpOworICAgICAgICAgICAgICAgIG5leHRJbnN0LmZv
ckVhY2g8dHlwZW5hbWUgQWRhcHRlcjo6VGhpbmc+KAorICAgICAgICAgICAgICAgICAgICBbJl0g
KHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nJiB0aGluZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlw
ZSB0eXBlLCBBcmc6OldpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjpp
c0Vhcmx5RGVmKHJvbGUpICYmIEFkYXB0ZXI6OmFjY2VwdHNUeXBlKHR5cGUpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdvcmtzZXQucmVtb3ZlKEFkYXB0ZXI6OnZhbHVlVG9JbmRleCh0
aGluZykpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAogICAgICAgICAgICAgLy8gRmlyc3QgaGFuZGxlIGRlZidzLgogICAgICAgICAgICAgaW5z
dC5mb3JFYWNoPHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nPigKICAgICAgICAgICAgICAgICBbJl0g
KHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nJiB0aGluZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlw
ZSB0eXBlLCBBcmc6OldpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzRGVm
KHJvbGUpICYmIEFkYXB0ZXI6OmFjY2VwdHNUeXBlKHR5cGUpKQorICAgICAgICAgICAgICAgICAg
ICBpZiAoQXJnOjppc0xhdGVEZWYocm9sZSkgJiYgQWRhcHRlcjo6YWNjZXB0c1R5cGUodHlwZSkp
CiAgICAgICAgICAgICAgICAgICAgICAgICB3b3Jrc2V0LnJlbW92ZShBZGFwdGVyOjp2YWx1ZVRv
SW5kZXgodGhpbmcpKTsKICAgICAgICAgICAgICAgICB9KTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAkocmV2aXNp
b24gMTk0NTI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5
dGhpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDcgKzUzLDcgQEAgdm9pZCBzcGlsbEV2ZXJ5dGhp
bmcoQ29kZSYgY29kZSkKIAogICAgICAgICB1c2VkUmVnaXN0ZXJzW2Jsb2NrXS5yZXNpemUoYmxv
Y2stPnNpemUoKSArIDEpOwogCi0gICAgICAgIGF1dG8gc2V0VXNlZFJlZ2lzdGVycyA9IFsmXSAo
dW5zaWduZWQgaW5kZXgsIEluc3QmIGluc3QpIHsKKyAgICAgICAgYXV0byBzZXRVc2VkUmVnaXN0
ZXJzID0gWyZdICh1bnNpZ25lZCBpbmRleCkgewogICAgICAgICAgICAgUmVnaXN0ZXJTZXQmIHJl
Z2lzdGVyU2V0ID0gdXNlZFJlZ2lzdGVyc1tibG9ja11baW5kZXhdOwogICAgICAgICAgICAgZm9y
IChUbXAgdG1wIDogZ3BMb2NhbENhbGMubGl2ZSgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHRt
cC5pc1JlZygpKQpAQCAtNjYsMjMgKzY2LDIwIEBAIHZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUm
IGNvZGUpCiAKICAgICAgICAgICAgIC8vIEdvdHRhIGFjY291bnQgZm9yIGRlYWQgYXNzaWdubWVu
dHMgdG8gcmVnaXN0ZXJzLiBUaGVzZSBtYXkgaGFwcGVuIGJlY2F1c2UgdGhlIGlucHV0CiAgICAg
ICAgICAgICAvLyBjb2RlIGlzIHN1Ym9wdGltYWwuCi0gICAgICAgICAgICBpbnN0LmZvckVhY2hU
bXBXaXRoRXh0cmFDbG9iYmVyZWRSZWdzKAotICAgICAgICAgICAgICAgIGluZGV4IDwgYmxvY2st
PnNpemUoKSA/ICZibG9jay0+YXQoaW5kZXgpIDogbnVsbHB0ciwKLSAgICAgICAgICAgICAgICBb
JnJlZ2lzdGVyU2V0XSAoY29uc3QgVG1wJiB0bXAsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUs
IEFyZzo6V2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpICYmIEFy
Zzo6aXNEZWYocm9sZSkpCisgICAgICAgICAgICBJbnN0Ojpmb3JFYWNoRGVmV2l0aEV4dHJhQ2xv
YmJlcmVkUmVnczxUbXA+KAorICAgICAgICAgICAgICAgIGJsb2NrLT5nZXQoaW5kZXggLSAxKSwg
YmxvY2stPmdldChpbmRleCksCisgICAgICAgICAgICAgICAgWyZdIChjb25zdCBUbXAmIHRtcCwg
QXJnOjpSb2xlLCBBcmc6OlR5cGUsIEFyZzo6V2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHRtcC5pc1JlZygpKQogICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJTZXQuc2V0
KHRtcC5yZWcoKSk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgIH07CiAKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspIHsK
LSAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKLSAgICAgICAg
ICAgIHNldFVzZWRSZWdpc3RlcnMoaW5zdEluZGV4ICsgMSwgaW5zdCk7CisgICAgICAgICAgICBz
ZXRVc2VkUmVnaXN0ZXJzKGluc3RJbmRleCArIDEpOwogICAgICAgICAgICAgZ3BMb2NhbENhbGMu
ZXhlY3V0ZShpbnN0SW5kZXgpOwogICAgICAgICAgICAgZnBMb2NhbENhbGMuZXhlY3V0ZShpbnN0
SW5kZXgpOwogICAgICAgICB9Ci0KLSAgICAgICAgSW5zdCBub3A7Ci0gICAgICAgIHNldFVzZWRS
ZWdpc3RlcnMoMCwgbm9wKTsKKyAgICAgICAgc2V0VXNlZFJlZ2lzdGVycygwKTsKICAgICB9CiAK
ICAgICAvLyBBbGxvY2F0ZSBhIHN0YWNrIHNsb3QgZm9yIGVhY2ggdG1wLgpAQCAtMTMzLDYgKzEz
MCw3IEBAIHZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUmIGNvZGUpCiAgICAgICAgICAgICAgICAg
ICAgIHN3aXRjaCAocm9sZSkgewogICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6VXNlOgog
ICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6Q29sZFVzZToKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBBcmc6OkVhcmx5RGVmOgogICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChSZWcg
cmVnIDogcmVnc0luUHJpb3JpdHlPcmRlcih0eXBlKSkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghc2V0QmVmb3JlLmdldChyZWcpKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNldEJlZm9yZS5zZXQocmVnKTsKQEAgLTE1NCw2ICsxNTIsOCBAQCB2b2lkIHNw
aWxsRXZlcnl0aGluZyhDb2RlJiBjb2RlKQogICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6
VXNlRGVmOgogICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6VXNlWkRlZjoKICAgICAgICAg
ICAgICAgICAgICAgY2FzZSBBcmc6OkxhdGVVc2U6CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
QXJnOjpMYXRlQ29sZFVzZToKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlNjcmF0Y2g6
CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiByZWdzSW5Qcmlvcml0eU9y
ZGVyKHR5cGUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXRCZWZvcmUu
Z2V0KHJlZykgJiYgIXNldEFmdGVyLmdldChyZWcpKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNldEFmdGVyLnNldChyZWcpOwpAQCAtMTc0LDEzICsxNzQsMTEgQEAgdm9pZCBz
cGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29kZSkKIAogICAgICAgICAgICAgICAgICAgICBPcGNvZGUg
bW92ZSA9IHR5cGUgPT0gQXJnOjpHUCA/IE1vdmUgOiBNb3ZlRG91YmxlOwogCi0gICAgICAgICAg
ICAgICAgICAgIGlmIChBcmc6OmlzQW55VXNlKHJvbGUpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
c3RJbmRleCwgbW92ZSwgaW5zdC5vcmlnaW4sIGFyZywgdG1wKTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0RlZihyb2xlKSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnN0SW5kZXggKyAxLCBtb3ZlLCBpbnN0Lm9yaWdpbiwgdG1wLCBhcmcpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAocm9sZSAhPSBBcmc6OlNjcmF0Y2gpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55VXNlKHJvbGUpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoaW5zdEluZGV4LCBtb3ZlLCBpbnN0Lm9y
aWdpbiwgYXJnLCB0bXApOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlE
ZWYocm9sZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2Vy
dChpbnN0SW5kZXggKyAxLCBtb3ZlLCBpbnN0Lm9yaWdpbiwgdG1wLCBhcmcpOwogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wV2lkdGguY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wV2lkdGguY3BwCShyZXZpc2lvbiAxOTQ1
MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcFdpZHRoLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTE5LDcgKzExOSw3IEBAIHZvaWQgVG1wV2lkdGg6OnJlY29tcHV0ZShD
b2RlJiBjb2RlKQogCiAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzWkRlZihyb2xlKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRocy5kZWYgPSBzdGQ6Om1heCh3aWR0aHMuZGVm
LCB3aWR0aCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEFyZzo6aXNEZWYocm9sZSkp
CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEFyZzo6aXNBbnlEZWYocm9sZSkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICB3aWR0aHMuZGVmID0gQXJnOjpjb25zZXJ2YXRpdmVXaWR0aCh0
eXBlKTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJVc2VDb3VudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpclVzZUNvdW50cy5oCShyZXZpc2lvbiAxOTQ1MjcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclVzZUNvdW50cy5oCSh3b3JraW5nIGNvcHkp
CkBAIC04NCw3ICs4NCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b3VudHMubnVtV2FybVVzZXMgKz0gZnJlcXVlbmN5OwogICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKEFyZzo6aXNDb2xkVXNlKHJvbGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
dW50cy5udW1Db2xkVXNlcyArPSBmcmVxdWVuY3k7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoQXJnOjppc0RlZihyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6Omlz
QW55RGVmKHJvbGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50cy5udW1EZWZz
ICs9IGZyZXF1ZW5jeTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9Cg==
</data>
<flag name="review"
          id="293130"
          type_id="1"
          status="+"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>