<?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>180636</bug_id>
          
          <creation_ts>2017-12-10 09:38:14 -0800</creation_ts>
          <short_desc>It should be possible to flag a cell for unconditional finalization</short_desc>
          <delta_ts>2017-12-12 18:37:40 -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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>180248</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1380075</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-10 09:38:14 -0800</bug_when>
    <thetext>The GC shouldn&apos;t just unconditionally finalize all things in an IsoSubspace.  It should only do it to the candidates.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380076</commentid>
    <comment_count>1</comment_count>
      <attachid>328938</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-10 09:38:49 -0800</bug_when>
    <thetext>Created attachment 328938
it&apos;s a start</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380080</commentid>
    <comment_count>2</comment_count>
      <attachid>328939</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-10 11:32:45 -0800</bug_when>
    <thetext>Created attachment 328939
a little more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380081</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-10 11:52:21 -0800</bug_when>
    <thetext>Actually, I shouldn&apos;t apply this new API to InferredType/InferredStructure.  Before I started making changes here, if you had to have an unconditional finalizer, you would allocate a malloc object the moment you got a structure and then you&apos;d add the unconditional finalizer during GC.  In trunk right now, you just allocate an object the moment you get a structure (it&apos;s now a GC object instead of malloc).  With this patch, you allocate an object and you add yourself to the IsoCellSet.  That&apos;s more work than in trunk.

The nice thing about the UnconditionalFinalizer API (that this new API loses) is that it lets you do the additional bookkeeping during GC.  Most objects die young, so most objects that need the bookkeeping never end up doing it.  That means less bookkeeping overall.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380111</commentid>
    <comment_count>4</comment_count>
      <attachid>328943</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-10 18:59:05 -0800</bug_when>
    <thetext>Created attachment 328943
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380326</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-11 11:50:01 -0800</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #3)
&gt; Actually, I shouldn&apos;t apply this new API to InferredType/InferredStructure. 
&gt; Before I started making changes here, if you had to have an unconditional
&gt; finalizer, you would allocate a malloc object the moment you got a structure
&gt; and then you&apos;d add the unconditional finalizer during GC.  In trunk right
&gt; now, you just allocate an object the moment you get a structure (it&apos;s now a
&gt; GC object instead of malloc).  With this patch, you allocate an object and
&gt; you add yourself to the IsoCellSet.  That&apos;s more work than in trunk.
&gt; 
&gt; The nice thing about the UnconditionalFinalizer API (that this new API
&gt; loses) is that it lets you do the additional bookkeeping during GC.  Most
&gt; objects die young, so most objects that need the bookkeeping never end up
&gt; doing it.  That means less bookkeeping overall.

IsoCellSet fixes this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380327</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-11 11:50:34 -0800</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #5)
&gt; (In reply to Filip Pizlo from comment #3)
&gt; &gt; Actually, I shouldn&apos;t apply this new API to InferredType/InferredStructure. 
&gt; &gt; Before I started making changes here, if you had to have an unconditional
&gt; &gt; finalizer, you would allocate a malloc object the moment you got a structure
&gt; &gt; and then you&apos;d add the unconditional finalizer during GC.  In trunk right
&gt; &gt; now, you just allocate an object the moment you get a structure (it&apos;s now a
&gt; &gt; GC object instead of malloc).  With this patch, you allocate an object and
&gt; &gt; you add yourself to the IsoCellSet.  That&apos;s more work than in trunk.
&gt; &gt; 
&gt; &gt; The nice thing about the UnconditionalFinalizer API (that this new API
&gt; &gt; loses) is that it lets you do the additional bookkeeping during GC.  Most
&gt; &gt; objects die young, so most objects that need the bookkeeping never end up
&gt; &gt; doing it.  That means less bookkeeping overall.
&gt; 
&gt; IsoCellSet fixes this.

To elaborate: the *new* IsoCellSet fixes this by allowing add() to be called during visitChildren.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380339</commentid>
    <comment_count>7</comment_count>
      <attachid>329014</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-11 12:15:30 -0800</bug_when>
    <thetext>Created attachment 329014
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380422</commentid>
    <comment_count>8</comment_count>
      <attachid>329045</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-11 15:21:15 -0800</bug_when>
    <thetext>Created attachment 329045
starting to pass some tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380471</commentid>
    <comment_count>9</comment_count>
      <attachid>329058</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-11 16:54:04 -0800</bug_when>
    <thetext>Created attachment 329058
passing even more tests than before</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380543</commentid>
    <comment_count>10</comment_count>
      <attachid>329084</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-11 20:55:43 -0800</bug_when>
    <thetext>Created attachment 329084
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380544</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-11 21:04:17 -0800</bug_when>
    <thetext>@Yusuke: I think that this new API is going to be a neat alternative to UnconditionalFinalizer. If you put your objects in a IsoSubspace, you can then also create an IsoCellSet (preferably VM-wide) that tracks all of those objects in that subspace that need unconditional finalization.

Alternatively, you can just have the Heap call unconditional finalizers for all of the objects in the subspace. The way it works, you can do unconditional finalization on all objects in a Subspace or objects in a IsoCellSet.  The finalizeUnconditionally() function you put on JSCell does not need to be virtual or in the MethodTable, because template magic is used to call it. If the function is called via Subspace, then it should return void. If it&apos;s called via IsoCellSet, it should return IsoCellSet::ForEachResult.

You can add objects to the set at any time - either as soon as you detect the condition that requires unconditional finalization, or even better, in visitChildren if that condition holds. I think that the latter is a bit better.

The neat thing about IsoCellSet is that it just naturally forgets objects that don&apos;t survive GC. It does this by participating in sweeping via callbacks from the GC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380545</commentid>
    <comment_count>12</comment_count>
      <attachid>329085</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-11 21:08:55 -0800</bug_when>
    <thetext>Created attachment 329085
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380547</commentid>
    <comment_count>13</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2017-12-11 21:10:42 -0800</bug_when>
    <thetext>Attachment 329085 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/IsoCellSet.h:43:  The parameter name &quot;subspace&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/IsoCellSet.h:46:  The parameter name &quot;cell&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/IsoCellSet.h:48:  The parameter name &quot;cell&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/IsoCellSet.h:50:  The parameter name &quot;cell&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:29:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:108:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:129:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:134:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:139:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:144:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:150:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:233:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
Total errors found: 12 in 32 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>1380586</commentid>
    <comment_count>14</comment_count>
      <attachid>329094</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-11 23:17:53 -0800</bug_when>
    <thetext>Created attachment 329094
the patch

Maybe fix some builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380588</commentid>
    <comment_count>15</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2017-12-11 23:20:14 -0800</bug_when>
    <thetext>Attachment 329094 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/IsoCellSet.h:42:  The parameter name &quot;subspace&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/IsoCellSet.h:45:  The parameter name &quot;cell&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/IsoCellSet.h:47:  The parameter name &quot;cell&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/IsoCellSet.h:49:  The parameter name &quot;cell&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:29:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:108:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:129:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:134:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:139:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:144:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:150:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:233:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
Total errors found: 12 in 33 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>1380590</commentid>
    <comment_count>16</comment_count>
      <attachid>329095</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-11 23:27:52 -0800</bug_when>
    <thetext>Created attachment 329095
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380591</commentid>
    <comment_count>17</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2017-12-11 23:29:47 -0800</bug_when>
    <thetext>Attachment 329095 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/IsoCellSet.h:42:  The parameter name &quot;subspace&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/IsoCellSet.h:45:  The parameter name &quot;cell&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/IsoCellSet.h:47:  The parameter name &quot;cell&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/IsoCellSet.h:49:  The parameter name &quot;cell&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:29:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:108:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:129:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:134:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:139:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:144:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:150:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:233:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
Total errors found: 12 in 33 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>1380600</commentid>
    <comment_count>18</comment_count>
      <attachid>329095</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-12-12 00:39:27 -0800</bug_when>
    <thetext>Comment on attachment 329095
the patch

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

A few fly by comments and questions. I need to review this when I have more energy to look closely.

&gt; Source/JavaScriptCore/heap/IsoCellSet.h:40
&gt; +class IsoCellSet : public BasicRawSentinelNode&lt;IsoCellSet&gt; {

Can you elaborate a bit on which operations can race with each other safely so I can better review this? Maybe it&apos;s even worth a comment.

&gt; Source/WTF/wtf/ConcurrentBuffer.h:38
&gt; +// It supports storing data that is not copy-constructable but bit-copyable.

Is there some kind of static assert we can add that will help us with this?

&gt; Source/WTF/wtf/ConcurrentBuffer.h:87
&gt; +        T data[1];

Why 1 and not []?

&gt; Source/WTF/wtf/ConcurrentVector.h:87
&gt; +// ConcurrentVector is like SegmentedVector, but suitable for scenarios where one thread appends
&gt; +// elements and another thread continues to access elements at lower indices. Only one thread can
&gt; +// append at a time, so that activity still needs locking.

I think this needs some more explanation.
On the first sentence:

What if I have two threads T1 and T2 running at the same time, I don&apos;t think this would work because of how append works.
T1:
    while (true) { concurrentVector.append(T(....)); }
T2: 
  while (true) { print(concurrentVector().last()); }

Do you mean that users of this need to snapshot the size() in a non-racy manner before any augmentation to the vector happens?

Also, I think in the second sentence, you might want to emphasize that users of this API must do the locking. ConcurrentVector does not do the locking for you. Without reading any of the code, and just the class name, I could see myself expecting ConcurrentVector to do the locking for me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380602</commentid>
    <comment_count>19</comment_count>
      <attachid>329095</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-12-12 01:19:02 -0800</bug_when>
    <thetext>Comment on attachment 329095
the patch

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

&gt;&gt; Source/JavaScriptCore/heap/IsoCellSet.h:40
&gt;&gt; +class IsoCellSet : public BasicRawSentinelNode&lt;IsoCellSet&gt; {
&gt; 
&gt; Can you elaborate a bit on which operations can race with each other safely so I can better review this? Maybe it&apos;s even worth a comment.

Never mind. I see that this is all handled by a CAS. This should mean if many threads are observing the state of this Set, and many threads are mutating it, the state should be sequentially consistent between all threads</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380667</commentid>
    <comment_count>20</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-12 08:54:26 -0800</bug_when>
    <thetext>(In reply to Saam Barati from comment #18)
&gt; Comment on attachment 329095 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=329095&amp;action=review
&gt; 
&gt; A few fly by comments and questions. I need to review this when I have more
&gt; energy to look closely.
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/IsoCellSet.h:40
&gt; &gt; +class IsoCellSet : public BasicRawSentinelNode&lt;IsoCellSet&gt; {
&gt; 
&gt; Can you elaborate a bit on which operations can race with each other safely
&gt; so I can better review this? Maybe it&apos;s even worth a comment.

It already has a comment above forEachMarkedCell: &quot;It&apos;s illegal to call add() or remove() concurrently to this, but self-remove() will work&quot;.  That&apos;s the only comment we need because add/remove/contains can run concurrently to one another.

&gt; 
&gt; &gt; Source/WTF/wtf/ConcurrentBuffer.h:38
&gt; &gt; +// It supports storing data that is not copy-constructable but bit-copyable.
&gt; 
&gt; Is there some kind of static assert we can add that will help us with this?
&gt; 
&gt; &gt; Source/WTF/wtf/ConcurrentBuffer.h:87
&gt; &gt; +        T data[1];
&gt; 
&gt; Why 1 and not []?

I dunno.  This is the idiom we&apos;ve used in WebKit for a long time.  I didn&apos;t want to try anything else because:

- I have no idea what the exact memory management, sizing, and alignment semantics are of [].

- I have no idea if all compilers we use support [].  If they do support it, I don&apos;t know if they support it in a bug-free fashion.

- I know that [1] works for sure.

- I don&apos;t see any benefit to [] over [1].

I want to be conservative and do what I know works, since the alternative is crazy bugtail.

&gt; 
&gt; &gt; Source/WTF/wtf/ConcurrentVector.h:87
&gt; &gt; +// ConcurrentVector is like SegmentedVector, but suitable for scenarios where one thread appends
&gt; &gt; +// elements and another thread continues to access elements at lower indices. Only one thread can
&gt; &gt; +// append at a time, so that activity still needs locking.
&gt; 
&gt; I think this needs some more explanation.
&gt; On the first sentence:
&gt; 
&gt; What if I have two threads T1 and T2 running at the same time, I don&apos;t think
&gt; this would work because of how append works.
&gt; T1:
&gt;     while (true) { concurrentVector.append(T(....)); }
&gt; T2: 
&gt;   while (true) { print(concurrentVector().last()); }

T2 is not &quot;accessing at lower indices&quot;. It&apos;s accessing at the end.  My comment was not meant to imply that this would work.

This code won&apos;t work because last() may try to read at an index that doesn&apos;t have a segment yet and then it will crash.  I&apos;ll add a comment above last() and size() that they cannot run concurrently to append().

&gt; 
&gt; Do you mean that users of this need to snapshot the size() in a non-racy
&gt; manner before any augmentation to the vector happens?

No amount of locking inside size() and append() would change the fact that after you read size(), it could change.  So, I&apos;m not sad that size()/last() cannot run concurrently to append().

&gt; 
&gt; Also, I think in the second sentence, you might want to emphasize that users
&gt; of this API must do the locking. ConcurrentVector does not do the locking
&gt; for you. Without reading any of the code, and just the class name, I could
&gt; see myself expecting ConcurrentVector to do the locking for me.

It&apos;s not true that users of this API must do locking. You wouldn&apos;t need to do locking of the append only happened on the main thread, for example.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380668</commentid>
    <comment_count>21</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-12 08:56:40 -0800</bug_when>
    <thetext>(In reply to Saam Barati from comment #19)
&gt; Comment on attachment 329095 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=329095&amp;action=review
&gt; 
&gt; &gt;&gt; Source/JavaScriptCore/heap/IsoCellSet.h:40
&gt; &gt;&gt; +class IsoCellSet : public BasicRawSentinelNode&lt;IsoCellSet&gt; {
&gt; &gt; 
&gt; &gt; Can you elaborate a bit on which operations can race with each other safely so I can better review this? Maybe it&apos;s even worth a comment.
&gt; 
&gt; Never mind. I see that this is all handled by a CAS. This should mean if
&gt; many threads are observing the state of this Set, and many threads are
&gt; mutating it, the state should be sequentially consistent between all threads

And we rely on the GC&apos;s existing synchronization in sweeping and elsewhere.  By the time an object is allocated, we are sure that it either has all the bits it needs or we have a race-free way of allocating them because the ConcurrentVector has already been resized and all we need is to allocate the bitmap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380669</commentid>
    <comment_count>22</comment_count>
      <attachid>329114</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-12 08:57:23 -0800</bug_when>
    <thetext>Created attachment 329114
added comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380670</commentid>
    <comment_count>23</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2017-12-12 09:00:15 -0800</bug_when>
    <thetext>Attachment 329114 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/IsoCellSet.h:42:  The parameter name &quot;subspace&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/IsoCellSet.h:45:  The parameter name &quot;cell&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/IsoCellSet.h:47:  The parameter name &quot;cell&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/IsoCellSet.h:49:  The parameter name &quot;cell&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:29:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:114:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:135:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:140:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:148:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:153:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:159:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:242:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
Total errors found: 12 in 33 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>1380724</commentid>
    <comment_count>24</comment_count>
      <attachid>329126</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-12 11:02:01 -0800</bug_when>
    <thetext>Created attachment 329126
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380728</commentid>
    <comment_count>25</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2017-12-12 11:05:34 -0800</bug_when>
    <thetext>Attachment 329126 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/IsoCellSet.h:42:  The parameter name &quot;subspace&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/IsoCellSet.h:45:  The parameter name &quot;cell&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/IsoCellSet.h:47:  The parameter name &quot;cell&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/IsoCellSet.h:49:  The parameter name &quot;cell&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:29:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:114:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:135:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:140:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:148:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:153:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:159:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:242:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
Total errors found: 12 in 33 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>1380737</commentid>
    <comment_count>26</comment_count>
      <attachid>329129</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-12 11:18:34 -0800</bug_when>
    <thetext>Created attachment 329129
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380740</commentid>
    <comment_count>27</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2017-12-12 11:21:16 -0800</bug_when>
    <thetext>Attachment 329129 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/IsoCellSet.h:42:  The parameter name &quot;subspace&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/IsoCellSet.h:45:  The parameter name &quot;cell&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/IsoCellSet.h:47:  The parameter name &quot;cell&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/IsoCellSet.h:49:  The parameter name &quot;cell&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:29:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:123:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:144:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:149:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:157:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:162:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:168:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WTF/wtf/ConcurrentVector.h:251:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
Total errors found: 12 in 33 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>1380767</commentid>
    <comment_count>28</comment_count>
      <attachid>329129</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-12-12 12:20:57 -0800</bug_when>
    <thetext>Comment on attachment 329129
the patch

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

r=me
Patch LGTM. I have a couple comments w.r.t documenting some return types. And I have a question about when sweepToFreeList can run and potential races.

&gt; Source/JavaScriptCore/heap/IsoCellSet.cpp:75
&gt; +void IsoCellSet::sweepToFreeList(MarkedBlock::Handle* block)

Can this run concurrently to add()/remove()? I ask because the various filter() calls don&apos;t synchronize with the CAS, and also the block-&gt;isEmpty()/stale case seems like it could be racy in the same way that forEachCell can&apos;t run concurrently to add()/remove()

&gt; Source/JavaScriptCore/heap/IsoCellSet.h:47
&gt; +    bool add(HeapCell* cell);
&gt; +    
&gt; +    bool remove(HeapCell* cell);

Can you add a comment saying if what these return. For example:
add() -&gt; return true when item was added (which is what I think this code does, but I wasn&apos;t 100% sure because of the bitmap code)

&gt; Source/JavaScriptCore/heap/IsoCellSetInlines.h:51
&gt; +    return bits-&gt;concurrentTestAndClear(atomIndices.atomNumber);

Don&apos;t you want ! here so that it returns true if you removed the item? Honestly I might be misreading the code inside BitMap/Atomics. I really think it&apos;d be helpful to have a comment in concurrentTestAnd* saying what the return values mean.

&gt; Source/JavaScriptCore/heap/IsoCellSetInlines.h:64
&gt; +void IsoCellSet::forEachMarkedCell(const Func&amp; func)

I think it might be worth a comment in the header where you say at what points this is legal to run at (or at what points it&apos;s illegal to run at). For example, I see that when we start to do a full collection, we clear these bits inside MarkedAllocator.

&gt; Source/JavaScriptCore/heap/IsoCellSetInlines.h:67
&gt; +    (allocator.m_markingNotEmpty &amp; m_blocksWithBits).forEachSetBit(

Is it worth doing something like:
allocator.m_markingNotEmpty.forEachSetBit([&amp;] (size_t index) { if (!m_blocksWithBits[index]) return; ..... rest of function

that way we don&apos;t allocate an intermediate bit vector here?

&gt; Source/JavaScriptCore/runtime/InferredType.h:256
&gt; +    // FIXME: This should be Poisoned.

Please link to a bug #

&gt; Source/WTF/wtf/ConcurrentBuffer.h:65
&gt; +        Array* newArray = createArray(newSize);

This is implicitly casting to unsigned which scares me on 64-bit platforms. I think we should crash if we&apos;re shaving off bits here.

&gt; Source/WTF/wtf/ConcurrentBuffer.h:82
&gt; +        growExact(std::max(newSize, size * 2));

Maybe worth overflow check on size*2 (at least for 32-bit)?

&gt; Source/WTF/wtf/ConcurrentBuffer.h:98
&gt; +        Array* result = static_cast&lt;Array*&gt;(fastMalloc(OBJECT_OFFSETOF(Array, data) + sizeof(T) * size));

Maybe it&apos;s worth an overflow check here (at least for 32-bit this might make sense)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380771</commentid>
    <comment_count>29</comment_count>
      <attachid>329129</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-12-12 12:24:57 -0800</bug_when>
    <thetext>Comment on attachment 329129
the patch

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

&gt; Source/JavaScriptCore/heap/IsoCellSet.cpp:73
&gt; +void IsoCellSet::didResizeBits(size_t newSize)
&gt; +{
&gt; +    m_blocksWithBits.resize(newSize);
&gt; +    m_bits.grow(newSize);
&gt; +}
&gt; +
&gt; +void IsoCellSet::didRemoveBlock(size_t blockIndex)
&gt; +{
&gt; +    m_blocksWithBits[blockIndex] = false;
&gt; +    m_bits[blockIndex] = nullptr;
&gt; +}

Can this run concurrently to add()/remove()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380775</commentid>
    <comment_count>30</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-12 12:38:57 -0800</bug_when>
    <thetext>(In reply to Saam Barati from comment #29)
&gt; Comment on attachment 329129 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=329129&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/IsoCellSet.cpp:73
&gt; &gt; +void IsoCellSet::didResizeBits(size_t newSize)
&gt; &gt; +{
&gt; &gt; +    m_blocksWithBits.resize(newSize);
&gt; &gt; +    m_bits.grow(newSize);
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +void IsoCellSet::didRemoveBlock(size_t blockIndex)
&gt; &gt; +{
&gt; &gt; +    m_blocksWithBits[blockIndex] = false;
&gt; &gt; +    m_bits[blockIndex] = nullptr;
&gt; &gt; +}
&gt; 
&gt; Can this run concurrently to add()/remove()?

Yes.  We don&apos;t remove a block until we prove that none of the cells inside it are live.  Therefore, if you&apos;re doing add()/remove() on a live cell, you&apos;re not racing with didRemoveBlock().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380801</commentid>
    <comment_count>31</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-12 13:18:44 -0800</bug_when>
    <thetext>(In reply to Saam Barati from comment #28)
&gt; Comment on attachment 329129 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=329129&amp;action=review
&gt; 
&gt; r=me
&gt; Patch LGTM. I have a couple comments w.r.t documenting some return types.
&gt; And I have a question about when sweepToFreeList can run and potential races.
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/IsoCellSet.cpp:75
&gt; &gt; +void IsoCellSet::sweepToFreeList(MarkedBlock::Handle* block)
&gt; 
&gt; Can this run concurrently to add()/remove()? I ask because the various
&gt; filter() calls don&apos;t synchronize with the CAS, and also the
&gt; block-&gt;isEmpty()/stale case seems like it could be racy in the same way that
&gt; forEachCell can&apos;t run concurrently to add()/remove()

Oh man, this is so interesting.  I had to think through this multiple times to identify which aspect of this is a bug and which isn&apos;t.

For example, it seems like it&apos;s a bug that this is done without locks:

    if (block-&gt;isEmpty() || block-&gt;areMarksStale()) {
        m_blocksWithBits[block-&gt;index()] = false;
        m_bits[block-&gt;index()] = nullptr;
        return;
    }

But for the most part, it&apos;s totally safe, because if the block is empty during sweep, then there cannot be any concurrent add()/remove() calls to that block.  The only part that isn&apos;t safe is manipulating m_blocksWithBits. We need to grab the bitvector lock to do that.

However, the calls to filter() are buggy. I think that Bitmap needs a concurrentFilter(). It&apos;s not hard to do that. For example, we can avoid the atomic op if either of these things is true: the filtering would not have cleared any bits (then we do nothing), or the filtering would have cleared all of the bits (then we non-atomically store 0).  I&apos;ll implement that and redo perf tests.

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/IsoCellSet.h:47
&gt; &gt; +    bool add(HeapCell* cell);
&gt; &gt; +    
&gt; &gt; +    bool remove(HeapCell* cell);
&gt; 
&gt; Can you add a comment saying if what these return. For example:
&gt; add() -&gt; return true when item was added (which is what I think this code
&gt; does, but I wasn&apos;t 100% sure because of the bitmap code)

Yup, will do.

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/IsoCellSetInlines.h:51
&gt; &gt; +    return bits-&gt;concurrentTestAndClear(atomIndices.atomNumber);
&gt; 
&gt; Don&apos;t you want ! here so that it returns true if you removed the item?

Bitmap&apos;s semantics for this function are that it returns the previous value of the bit.  So if we removed the item it would already return true.

&gt; Honestly I might be misreading the code inside BitMap/Atomics. I really
&gt; think it&apos;d be helpful to have a comment in concurrentTestAnd* saying what
&gt; the return values mean.
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/IsoCellSetInlines.h:64
&gt; &gt; +void IsoCellSet::forEachMarkedCell(const Func&amp; func)
&gt; 
&gt; I think it might be worth a comment in the header where you say at what
&gt; points this is legal to run at (or at what points it&apos;s illegal to run at).
&gt; For example, I see that when we start to do a full collection, we clear
&gt; these bits inside MarkedAllocator.

What are &quot;these bits&quot;?  I think that the comment already says it:

    // NOTE: It&apos;s illegal to call add() or remove() concurrently to this, but self-remove() will work.
    // But it&apos;s better if you return Remove instead.

For the particular IsoCellSet we have right now, we guarantee that because add() is only called during visitChildren, remove() is never called, and forEachMarkedCell() is called during unconditional finalization (which cannot run concurrently to visitChildren()).

If we use IsoCellSet for marking constraints, then we&apos;ll have to fix this bug, probably by introducing another version of forEachMarkedCell(), which wouldn&apos;t do the bit deleting.

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/IsoCellSetInlines.h:67
&gt; &gt; +    (allocator.m_markingNotEmpty &amp; m_blocksWithBits).forEachSetBit(
&gt; 
&gt; Is it worth doing something like:
&gt; allocator.m_markingNotEmpty.forEachSetBit([&amp;] (size_t index) { if
&gt; (!m_blocksWithBits[index]) return; ..... rest of function
&gt; 
&gt; that way we don&apos;t allocate an intermediate bit vector here?

What you&apos;re suggesting would be way slower.  There is no allocation of bitvectors here.  Check out FastBitVector.h.  `allocator.m_markingNotEmpty &amp; m_blocksWithBits` produces a FastBitVectorOrAdaptor kind of thing, and its forEachSetBit does the &amp; on the fly.

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/InferredType.h:256
&gt; &gt; +    // FIXME: This should be Poisoned.
&gt; 
&gt; Please link to a bug #

DOne.

&gt; 
&gt; &gt; Source/WTF/wtf/ConcurrentBuffer.h:65
&gt; &gt; +        Array* newArray = createArray(newSize);
&gt; 
&gt; This is implicitly casting to unsigned which scares me on 64-bit platforms.
&gt; I think we should crash if we&apos;re shaving off bits here.

I&apos;ll just change the code to use size_t consistently.

&gt; 
&gt; &gt; Source/WTF/wtf/ConcurrentBuffer.h:82
&gt; &gt; +        growExact(std::max(newSize, size * 2));
&gt; 
&gt; Maybe worth overflow check on size*2 (at least for 32-bit)?

That&apos;ll &quot;just work&quot; thanks to the max() call. :-)

&gt; 
&gt; &gt; Source/WTF/wtf/ConcurrentBuffer.h:98
&gt; &gt; +        Array* result = static_cast&lt;Array*&gt;(fastMalloc(OBJECT_OFFSETOF(Array, data) + sizeof(T) * size));
&gt; 
&gt; Maybe it&apos;s worth an overflow check here (at least for 32-bit this might make
&gt; sense)

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380842</commentid>
    <comment_count>32</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-12-12 14:21:07 -0800</bug_when>
    <thetext>By &quot;these bits&quot; I meant m_markingNotEmpty</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380860</commentid>
    <comment_count>33</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-12 14:43:53 -0800</bug_when>
    <thetext>(In reply to Saam Barati from comment #32)
&gt; By &quot;these bits&quot; I meant m_markingNotEmpty

Right.  m_markingNotEmpty is cleared during stop-the-world points where nothing else is running.  Other than that, we set bits in it with the bitvector lock held.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1381004</commentid>
    <comment_count>34</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-12 18:36:24 -0800</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/225831/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1381006</commentid>
    <comment_count>35</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-12-12 18:37:40 -0800</bug_when>
    <thetext>&lt;rdar://problem/36011586&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328938</attachid>
            <date>2017-12-10 09:38:49 -0800</date>
            <delta_ts>2017-12-10 11:32:45 -0800</delta_ts>
            <desc>it&apos;s a start</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>27199</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjU3MjUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDc0LDYgKzQ3NCw5IEBACiAJCTBGQjE3NjYzMTk2QjhG
OUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjE3NjVGMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFs
dWUuaCAqLzsgfTsKIAkJMEZCMzg3OEUxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpckJsb2NrV29ya2xp
c3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjM4
NzhCMUJGQkM0NEQwMEUzQUIxRSAvKiBBaXJCbG9ja1dvcmtsaXN0LmggKi87IH07CiAJCTBGQjM4
NzkwMUJGQkM0NEQwMEUzQUIxRSAvKiBBaXJPcHRpbWl6ZUJsb2NrT3JkZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjM4NzhEMUJGQkM0NEQwMEUz
QUIxRSAvKiBBaXJPcHRpbWl6ZUJsb2NrT3JkZXIuaCAqLzsgfTsKKwkJMEZCNDY3N0YxRkREQTZF
OTAwM0ZDQjA5IC8qIEF0b21JbmRpY2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkI0Njc3RTFGRERBNkU1MDAzRkNCMDkgLyogQXRvbUluZGljZXMu
aCAqLzsgfTsKKwkJMEZCNDY3ODAxRkREQTZGMTAwM0ZDQjA5IC8qIElzb0NlbGxTZXQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjQ2NzdEMUZEREE2
RDkwMDNGQ0IwOSAvKiBJc29DZWxsU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCNDY3ODExRkREQTZGNzAwM0ZDQjA5IC8qIElzb0NlbGxT
ZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkI0Njc3QjFGRERBNkQ4MDAzRkNCMDkgLyogSXNvQ2VsbFNldElubGluZXMuaCAqLzsgfTsK
IAkJMEZCNDc2N0UxRDk5QUVBOTAwOEVBNkNCIC8qIEdDRGVmZXJyYWxDb250ZXh0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0NzY3QzFEOTlBRUE3
MDA4RUE2Q0IgLyogR0NEZWZlcnJhbENvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkI0NzY3RjFEOTlBRUFEMDA4RUE2Q0IgLyogR0NE
ZWZlcnJhbENvbnRleHRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkI0NzY3RDFEOTlBRUE3MDA4RUE2Q0IgLyogR0NEZWZlcnJhbENvbnRl
eHRJbmxpbmVzLmggKi87IH07CiAJCTBGQjRGQjc0MUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5
U2xvd1BhdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGQjRGQjcxMUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1BhdGguaCAqLzsgfTsKQEAg
LTI1NjIsNiArMjU2NSwxMCBAQAogCQkwRkIzODc5MTFCRkQzMUExMDBFM0FCMUUgLyogRlRMQ29t
cGlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExDb21waWxl
LmNwcDsgcGF0aCA9IGZ0bC9GVExDb21waWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZCNDE1ODMxRDc4Rjk4MjAwREY4RDA5IC8qIEFycmF5Q29udmVudGlvbnMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXJyYXlDb252ZW50aW9ucy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjQzOEEyMTkyNzBCMUQwMEUxRkJDOSAv
KiBTdHJ1Y3R1cmVTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U3RydWN0dXJlU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCNDY3N0Ix
RkREQTZEODAwM0ZDQjA5IC8qIElzb0NlbGxTZXRJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IElzb0NlbGxTZXRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGQjQ2NzdDMUZEREE2RDkwMDNGQ0IwOSAvKiBJc29DZWxsU2V0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElzb0NlbGxTZXQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkI0Njc3RDFGRERBNkQ5MDAzRkNCMDkgLyogSXNvQ2Vs
bFNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJc29DZWxsU2V0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjQ2NzdFMUZEREE2RTUwMDNGQ0IwOSAvKiBB
dG9tSW5kaWNlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdG9tSW5kaWNl
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0NzY3QzFEOTlBRUE3MDA4RUE2
Q0IgLyogR0NEZWZlcnJhbENvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gR0NEZWZlcnJhbENvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZC
NDc2N0QxRDk5QUVBNzAwOEVBNkNCIC8qIEdDRGVmZXJyYWxDb250ZXh0SW5saW5lcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ0RlZmVycmFsQ29udGV4dElubGluZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNEI1MTAxNkIzQTk2NDAwM0Y2OTZCIC8q
IERGR01pbmlmaWVkSUQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTWlu
aWZpZWRJRC5oOyBwYXRoID0gZGZnL0RGR01pbmlmaWVkSUQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTU1MjUsNiArNTUzMiw3IEBACiAJCQkJMEY5NjMwMzUxRDQxOTJDMzAwNTYw
OUQ5IC8qIEFsbG9jYXRvckF0dHJpYnV0ZXMuY3BwICovLAogCQkJCTBGOTYzMDM2MUQ0MTkyQzMw
MDU2MDlEOSAvKiBBbGxvY2F0b3JBdHRyaWJ1dGVzLmggKi8sCiAJCQkJMEYzMENCNUQxRkNFNDZC
NDAwNEI1MzIzIC8qIEFsbG9jYXRvckZvck1vZGUuaCAqLywKKwkJCQkwRkI0Njc3RTFGRERBNkU1
MDAzRkNCMDkgLyogQXRvbUluZGljZXMuaCAqLywKIAkJCQkwRkRFODdGODFERkQwQzZEMDA2NEMz
OTAgLyogQ2VsbENvbnRhaW5lci5jcHAgKi8sCiAJCQkJMEYwNzBBNDIxRDU0M0E4OTAwNkU3MjMy
IC8qIENlbGxDb250YWluZXIuaCAqLywKIAkJCQkwRjA3MEE0MzFENTQzQTg5MDA2RTcyMzIgLyog
Q2VsbENvbnRhaW5lcklubGluZXMuaCAqLywKQEAgLTU2MTEsNiArNTYxOSw5IEBACiAJCQkJQzI1
RjhCQ0MxNTc1NDRBOTAwMjQ1QjcxIC8qIEluY3JlbWVudGFsU3dlZXBlci5oICovLAogCQkJCTBG
RENFMTJGMUZCMTFEOUQwMDZGMzkwMSAvKiBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcCAq
LywKIAkJCQkwRkRDRTEzMDFGQjExRDlEMDA2RjM5MDEgLyogSXNvQWxpZ25lZE1lbW9yeUFsbG9j
YXRvci5oICovLAorCQkJCTBGQjQ2NzdDMUZEREE2RDkwMDNGQ0IwOSAvKiBJc29DZWxsU2V0LmNw
cCAqLywKKwkJCQkwRkI0Njc3RDFGRERBNkQ5MDAzRkNCMDkgLyogSXNvQ2VsbFNldC5oICovLAor
CQkJCTBGQjQ2NzdCMUZEREE2RDgwMDNGQ0IwOSAvKiBJc29DZWxsU2V0SW5saW5lcy5oICovLAog
CQkJCTBGRENFMTJDMUZBRkI0REUwMDZGMzkwMSAvKiBJc29TdWJzcGFjZS5jcHAgKi8sCiAJCQkJ
MEZEQ0UxMkIxRkFGQjRERTAwNkYzOTAxIC8qIElzb1N1YnNwYWNlLmggKi8sCiAJCQkJMEY3NjZE
MjkxNUE4Q0MzNDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmNwcCAqLywKQEAgLTc5OTcs
NiArODAwOCw3IEBACiAJCQkJMEZFQzg1NzIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxv
Y2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkM2M0JDMUU2MzQ0MEMwMEMxMzgzOSAvKiBBaXJC
bG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMzg3OEUxQkZCQzQ0RDAw
RTNBQjFFIC8qIEFpckJsb2NrV29ya2xpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjQ2Nzgx
MUZEREE2RjcwMDNGQ0IwOSAvKiBJc29DZWxsU2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY3OUM3Q0ExRTc0QzkzQjAwRUIzNEQxIC8qIEFpckJyZWFrQ3JpdGljYWxFZGdlcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY2MTgzMkExQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxsaW5n
Q29udmVudGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1NzQxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckNDYWxsU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCkBAIC04OTczLDYgKzg5ODUsNyBA
QAogCQkJCUFEMkZDQkU1MURCNThEQUQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCUFERTgwMjk5MUUwOEYxREUwMDU4REU3OCAvKiBKU1dlYkFz
c2VtYmx5TGlua0Vycm9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JFNzFEQjU4REFEMDBC
M0U3MzYgLyogSlNXZWJBc3NlbWJseU1lbW9yeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCNDY3
N0YxRkREQTZFOTAwM0ZDQjA5IC8qIEF0b21JbmRpY2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
RDJGQ0MwNTFEQjU4REFEMDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseU1vZHVsZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQUQyRkNCRTkxREI1OERBRDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlSdW50
aW1lRXJyb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQkVCMURCNThEQUQwMEIzRTczNiAv
KiBKU1dlYkFzc2VtYmx5VGFibGUuaCBpbiBIZWFkZXJzICovLApAQCAtOTI1OSw2ICs5MjcyLDcg
QEAKIAkJCQlDMjBCQTkyRDE2QkIxQzE1MDBCM0FFQTIgLyogU3RydWN0dXJlUmFyZURhdGFJbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkzMzJBNTE0Q0E3REREMDA4NUYzQzYgLyogU3Ry
dWN0dXJlU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc2NkQzOTE1QUU0QTFGMDA4RjM2M0Ug
LyogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZCNDY3ODAxRkREQTZGMTAwM0ZDQjA5IC8qIElzb0NlbGxTZXQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDQ0YwRDA4MEVGMEFBQjkwMDQxM0M4RiAvKiBTdHJ1Y3R1cmVTdHViSW5mby5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkM5MDQxNDgwRUI5MjUwOTAwRkUyNkZBIC8qIFN0cnVjdHVyZVRyYW5z
aXRpb25UYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3REYxMzcxRTI5NzBFMTAwOTU5NTFC
IC8qIFN1YnNwYWNlLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0F0b21JbmRpY2VzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQXRvbUluZGljZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9BdG9tSW5kaWNlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsKKworc3RydWN0
IEF0b21JbmRpY2VzIHsKKyAgICBBdG9tSW5kaWNlcygpIHsgfQorICAgIAorICAgIEF0b21JbmRp
Y2VzKEhlYXBDZWxsKiBjZWxsKQorICAgICAgICA6IGJsb2NrKE1hcmtlZEJsb2NrOjpibG9ja0Zv
cihjZWxsKSkKKyAgICAgICAgLCBibG9ja0luZGV4KGJsb2NrLT5oYW5kbGUoKS5pbmRleCgpKQor
ICAgICAgICAsIGF0b21OdW1iZXIoYmxvY2stPmF0b21OdW1iZXIoY2VsbCkpCisgICAgeworICAg
IH0KKyAgICAKKyAgICBNYXJrZWRCbG9jayogYmxvY2s7CisgICAgc2l6ZV90IGJsb2NrSW5kZXg7
CisgICAgc2l6ZV90IGF0b21OdW1iZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5jcHAJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSXNvQ2VsbFNldC5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworSXNvQ2VsbFNldDo6SXNvQ2VsbFNldChJc29TdWJzcGFj
ZSYgc3Vic3BhY2UpCisgICAgOiBtX3N1YnNwYWNlKHN1YnNwYWNlKQoreworICAgIHNpemVfdCBz
aXplID0gc3Vic3BhY2UubV9hbGxvY2F0ci5tX2Jsb2Nrcy5zaXplKCk7CisgICAgbV9ibG9ja3NX
aXRoQml0cy5ncm93KHNpemUpOworICAgIG1fYml0cy5ncm93KHNpemUpOworfQorCitJc29DZWxs
U2V0Ojp+SXNvQ2VsbFNldCgpCit7Cit9CisKK3ZvaWQgSXNvQ2VsbFNldDo6ZGlkUmVzaXplQml0
cyhzaXplX3QgbmV3U2l6ZSkKK3sKKyAgICBtX2Jsb2Nrc1dpdGhCaXRzLnJlc2l6ZShuZXdTaXpl
KTsKKyAgICBtX2JpdHMuZ3JvdyhuZXdTaXplKTsKK30KKwordm9pZCBJc29DZWxsU2V0OjpkaWRS
ZW1vdmVCbG9jayhzaXplX3QgYmxvY2tJbmRleCkKK3sKKyAgICBtX2Jsb2Nrc1dpdGhCaXRzW2Js
b2NrSW5kZXhdID0gZmFsc2U7CisgICAgbV9iaXRzW2Jsb2NrSW5kZXhdID0gbnVsbHB0cjsKK30K
Kwordm9pZCBJc29DZWxsU2V0Ojpzd2VlcFRvRnJlZUxpc3QoTWFya2VkQmxvY2s6OkhhbmRsZSog
YmxvY2spCit7CisgICAgUkVMRUFTRV9BU1NFUlQoIWJsb2NrLT5pc0FsbG9jYXRlZCgpKTsKKyAg
ICAKKyAgICBpZiAoIW1fYmxvY2tzV2l0aEJpdHNbYmxvY2stPmluZGV4KCldKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgaWYgKGJsb2NrLT5oYXNBbnlOZXdseUFsbG9jYXRlZCgpKSB7Cisg
ICAgICAgIG1fYml0c1tibG9jay0+aW5kZXgoKV0tPmZpbHRlcihibG9jay0+bmV3bHlBbGxvY2F0
ZWQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYmxvY2stPmlzRW1wdHko
KSkgeworICAgICAgICBtX2Jsb2Nrc1dpdGhCaXRzW2Jsb2NrLT5pbmRleCgpXSA9IGZhbHNlOwor
ICAgICAgICBtX2JpdHNbYmxvY2stPmluZGV4KCldID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKKyAgICBtX2JpdHNbYmxvY2stPmluZGV4KCldLT5maWx0ZXIoYmxvY2st
Pm1hcmtzKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0lzb0NlbGxTZXQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIkF0b21JbmRpY2VzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitj
bGFzcyBJc29TdWJzcGFjZTsKKworLy8gQ3JlYXRlIGEgc2V0IG9mIGNlbGxzIHRoYXQgYXJlIGlu
IGFuIElzb1N1YnNwYWNlLiBUaGlzIGFsbG93cyBjb25jdXJyZW50IE8oMSkgc2V0IGluc2VydGlv
biBhbmQKKy8vIHJlbW92YWwuIEVhY2ggc3VjaCBzZXQgc2hvdWxkIGJlIHRob3VnaHQgb2YgYXMg
YSAwLjglIGluY3JlYXNlIGluIG9iamVjdCBzaXplIGZvciBvYmplY3RzIGluIHRoYXQKKy8vIElz
b1N1YnNwYWNlIChpdCdzIGxpa2UgYWRkaW5nIDEgYml0IGV2ZXJ5IDE2IGJ5dGVzLCBvciAxIGJp
dCBldmVyeSAxMjggYml0cykuCitjbGFzcyBJc29DZWxsU2V0IDogcHVibGljIEJhc2ljUmF3U2Vu
dGluZWxOb2RlPElzb0NlbGxTZXQ+IHsKK3B1YmxpYzoKKyAgICBJc29DZWxsU2V0KElzb1N1YnNw
YWNlJiBzdWJzcGFjZSk7CisgICAgfklzb0NlbGxTZXQoKTsKKyAgICAKKyAgICAvLyBOT1RFOiBU
aGVzZSBhZGQvcmVtb3ZlIG1ldGhvZHMgYXJlIGN1cnJlbnRseSBtZWFudCB0byBiZSBjYWxsZWQg
ZnJvbSBzZXJpYWwgZXhlY3V0aW9uLiBZb3UKKyAgICAvLyBjYW5ub3QgY2FsbCB0aGVtIGZyb20g
Y29uc3RyYWludCBzb2x2aW5nLCB2aXNpdGluZywgb3IgSklUaW5nLiBJZiB3ZSB3YW50ZWQgdG8g
Zml4IHRoaXMsIHdlJ2QKKyAgICAvLyBuZWVkIHRvIHVzZSBzb21lIGtpbmQgb2YgbG9ja2luZyB0
byBwcmV2ZW50IGFnYWluc3QgdGhlIG1haW4gdGhyZWFkIGFkZGluZyBuZXcgYmxvY2tzLgorICAg
IC8vIC0+IFN1cmUgc2VlbXMgbGlrZSB0aGUgcmlnaHQgd2F5IHRvIGhhbmRsZSB0aGUgYml0dmVj
dG9yIHJlc2l6aW5nIHByb2JsZW0gaXMgdG8gaGF2ZSBibG9jaworICAgIC8vICAgIGRpcmVjdG9y
aWVzIHRoZSB3YXkgdGhhdCBJc29IZWFwcyBoYXZlIHBhZ2UgZGlyZWN0b3JpZXMuCisgICAgYm9v
bCBhZGQoSGVhcENlbGwqIGNlbGwpOworICAgIAorICAgIGJvb2wgcmVtb3ZlKEhlYXBDZWxsKiBj
ZWxsKTsKKyAgICAKKyAgICBib29sIGNvbnRhaW5zKEhlYXBDZWxsKiBjZWxsKSBjb25zdDsKKyAg
ICAKKyAgICAvLyBUaGlzIHdpbGwgaGF2ZSB0byBkbyBhIGNvbWJpbmVkIHNlYXJjaCBvdmVyIHdo
YXRldmVyIFN1YnNwYWNlOjpmb3JFYWNoTWFya2VkQ2VsbCB1c2VzIGFuZAorICAgIC8vIG91ciBt
X2Jsb2Nrc1dpdGhCaXRzLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9pZCBm
b3JFYWNoTWFya2VkQ2VsbChjb25zdCBGdW5jJik7CisgICAgCitwcml2YXRlOgorICAgIGZyaWVu
ZCBjbGFzcyBJc29TdWJzcGFjZTsKKyAgICAKKyAgICB2b2lkIGRpZFJlc2l6ZUJpdHMoc2l6ZV90
IG5ld1NpemUpOworICAgIHZvaWQgZGlkUmVtb3ZlQmxvY2soc2l6ZV90IGJsb2NrSW5kZXgpOwor
ICAgIHZvaWQgc3dlZXBUb0ZyZWVMaXN0KE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsKKyAgICAKKyAg
ICBTdWJzcGFjZSYgbV9zdWJzcGFjZTsKKyAgICAKKyAgICAvLyBJZGVhOiBzd2VlcGluZyB0byBm
cmVlLWxpc3QgY2xlYXJzIGJpdHMgZm9yIHRob3NlIGNlbGxzIHRoYXQgd2VyZSBmcmVlLWxpc3Rl
ZC4gVGhlIGZpcnN0IHRpbWUKKyAgICAvLyB3ZSBhZGQgYSBjZWxsIGluIGEgYmxvY2ssIHRoYXQg
YmxvY2sgZ2V0cyBhIGZyZWUtbGlzdC4gVW5sZXNzIHdlIGRvIHNvbWV0aGluZyB0aGF0IG9idmlv
dXNseQorICAgIC8vIGNsZWFycyBhbGwgYml0cyBmb3IgYSBibG9jaywgd2Uga2VlcCBpdCBzZXQg
aW4gYmxvY2tzV2l0aEJpdHMuCisgICAgCisgICAgRmFzdEJpdFZlY3RvciBtX2Jsb2Nrc1dpdGhC
aXRzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Qml0bWFwPE1hcmtlZEJsb2NrOjphdG9t
c1BlckJsb2NrPj4+IG1fYml0czsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0SW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXRJbmxpbmVzLmgJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldElubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSXNvQ2Vs
bFNldC5oIgorI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlND
IHsKKworaW5saW5lIGJvb2wgSXNvQ2VsbFNldDo6YWRkKEhlYXBDZWxsKiBjZWxsKQoreworICAg
IEF0b21JbmRpY2VzIGF0b21JbmRpY2VzKGNlbGwpOworICAgIGF1dG8mIGJpdHNQdHJSZWYgPSBt
X2JpdHNbYXRvbUluZGljZXMuYmxvY2tJbmRleF07CisgICAgYXV0byogYml0cyA9IGJpdHNQdHJS
ZWYuZ2V0KCk7CisgICAgaWYgKCFiaXRzKSB7CisgICAgICAgIG1fYmxvY2tzV2l0aEJpdHNbYXRv
bUluZGljZXMuYmxvY2tJbmRleF0gPSB0cnVlOworICAgICAgICBiaXRzUHRyUmVmID0gc3RkOjpt
YWtlX3VuaXF1ZTxCaXRtYXA8TWFya2VkQmxvY2s6OmF0b21zUGVyQmxvY2s+PigpOworICAgICAg
ICBiaXRzID0gYml0c1B0clJlZi5nZXQoKTsKKyAgICB9CisgICAgcmV0dXJuICFiaXRzLT50ZXN0
QW5kU2V0KGF0b21JbmRpY2VzLmF0b21OdW1iZXIpOworfQorCitpbmxpbmUgYm9vbCBJc29DZWxs
U2V0OjpyZW1vdmUoSGVhcENlbGwqIGNlbGwpCit7CisgICAgQXRvbUluZGljZXMgYXRvbUluZGlj
ZXMoY2VsbCk7CisgICAgYXV0byYgYml0c1B0clJlZiA9IG1fYml0c1thdG9tSW5kaWNlcy5ibG9j
a0luZGV4XTsKKyAgICBhdXRvKiBiaXRzID0gYml0c1B0clJlZi5nZXQoKTsKKyAgICBpZiAoIWJp
dHMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gYml0cy0+dGVzdEFuZENsZWFy
KGF0b21JbmRpY2VzLmF0b21OdW1iZXIpOworfQorCitpbmxpbmUgYm9vbCBJc29DZWxsU2V0Ojpj
b250YWlucyhIZWFwQ2VsbCogY2VsbCkKK3sKKyAgICBBdG9tSW5kaWNlcyBhdG9tSW5kaWNlcyhj
ZWxsKTsKKyAgICBhdXRvKiBiaXRzID0gbV9iaXRzW2F0b21JbmRpY2VzLmJsb2NrSW5kZXhdLmdl
dCgpOworICAgIGlmIChiaXRzKQorICAgICAgICByZXR1cm4gYml0cy0+Z2V0KGF0b21JbmRpY2Vz
LmF0b21OdW1iZXIpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
RnVuYz4KK3ZvaWQgSXNvQ2VsbFNldDo6Zm9yRWFjaE1hcmtlZENlbGwoY29uc3QgRnVuYyYgZnVu
YykKK3sKKyAgICBNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvciA9IG1fc3Vic3BhY2UubV9hbGxv
Y2F0b3I7CisgICAgKGFsbG9jYXRvci5tX21hcmtpbmdOb3RFbXB0eSAmIG1fYmxvY2tzV2l0aEJp
dHMpLmZvckVhY2hTZXRCaXQoCisgICAgICAgIFsmXSAoc2l6ZV90IGJsb2NrSW5kZXgpIHsKKyAg
ICAgICAgICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gYWxsb2NhdG9yLm1fYmxvY2tz
W2Jsb2NrSW5kZXhdOworCisgICAgICAgICAgICBhdXRvKiBiaXRzID0gbV9iaXRzW2Jsb2NrSW5k
ZXhdLmdldCgpOworICAgICAgICAgICAgYm9vbCBoYWRCaXRzID0gZmFsc2U7CisgICAgICAgICAg
ICBoYW5kbGUtPmZvckVhY2hNYXJrZWRDZWxsKAorICAgICAgICAgICAgICAgIFsmXSAoc2l6ZV90
IGF0b21OdW1iZXIsIEhlYXBDZWxsKiBjZWxsLCBIZWFwQ2VsbDo6S2luZCBraW5kKSAtPiBJdGVy
YXRpb25TdGF0dXMgeworICAgICAgICAgICAgICAgICAgICBpZiAoYml0cy0+Z2V0KGF0b21OdW1i
ZXIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jKGNlbGwsIGtpbmQpOworICAgICAg
ICAgICAgICAgICAgICAgICAgaGFkQml0cyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7Cisg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpZiAoIWhhZEJpdHMpIHsKKyAgICAgICAg
ICAgICAgICBtX2JpdHNbYmxvY2tJbmRleF0gPSBudWxscHRyOworICAgICAgICAgICAgICAgIG1f
YmxvY2tzV2l0aEJpdHNbYmxvY2tJbmRleF0gPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Jc29TdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmgJKHJldmlzaW9uIDIyNTcyNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEwICsy
NywxMiBAQAogCiAjaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiU3Vic3Bh
Y2UuaCIKKyNpbmNsdWRlIDx3dGYvU2luZ2x5TGlua2VkTGlzdFdpdGhUYWlsLmg+CiAKIG5hbWVz
cGFjZSBKU0MgewogCiBjbGFzcyBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOworY2xhc3MgSXNv
Q2VsbFNldDsKIAogY2xhc3MgSXNvU3Vic3BhY2UgOiBwdWJsaWMgU3Vic3BhY2UgewogcHVibGlj
OgpAQCAtNDksNiArNTEsNyBAQCBwcml2YXRlOgogICAgIHNpemVfdCBtX3NpemU7CiAgICAgTWFy
a2VkQWxsb2NhdG9yIG1fYWxsb2NhdG9yOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29BbGlnbmVk
TWVtb3J5QWxsb2NhdG9yPiBtX2lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I7CisgICAgU2VudGlu
ZWxMaW5rZWRMaXN0PElzb0NlbGxTZXQsIEJhc2ljUmF3U2VudGluZWxOb2RlPElzb0NlbGxTZXQ+
PiBtX2NlbGxTZXRzOwogfTsKIAogaW5saW5lIE1hcmtlZEFsbG9jYXRvciogSXNvU3Vic3BhY2U6
OmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEFsbG9jYXRvckZvck1vZGUpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkocmV2
aXNpb24gMjI1NzI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2Nh
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
IGNsYXNzIEdDRGVmZXJyYWxDb250ZXh0OwogY2xhc3MgSGVhcDsKK2NsYXNzIElzb0NlbGxTZXQ7
CiBjbGFzcyBNYXJrZWRTcGFjZTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIApAQCAt
MTYyLDYgKzE2Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXBCaXRzKFByaW50U3RyZWFtJiA9
IFdURjo6ZGF0YUZpbGUoKSk7CiAgICAgCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBJc29D
ZWxsU2V0OwogICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRCbG9jazsKICAgICAKICAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJyYWxDb250ZXh0KiwgQWxs
b2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHJldmlzaW9uIDIyNTcyNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAx
LDExICszMDEsNiBAQCBzaXplX3QgTWFya2VkQmxvY2s6Om1hcmtDb3VudCgpCiAgICAgcmV0dXJu
IGFyZU1hcmtzU3RhbGUoKSA/IDAgOiBtX21hcmtzLmNvdW50KCk7CiB9CiAKLWJvb2wgTWFya2Vk
QmxvY2s6OkhhbmRsZTo6aXNFbXB0eSgpCi17Ci0gICAgcmV0dXJuIG1fYWxsb2NhdG9yLT5pc0Vt
cHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcyk7Ci19Ci0KIHZvaWQgTWFya2VkQmxvY2s6OmNs
ZWFySGFzQW55TWFya2VkKCkKIHsKICAgICBtX2JpYXNlZE1hcmtDb3VudCA9IG1fbWFya0NvdW50
QmlhczsKQEAgLTQwMiwxNiArMzk3LDE0IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3dl
ZXAoRnJlZUxpc3QKICAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwT25seSAmJiAhbmVlZHNEZXN0
cnVjdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKFVOTElLRUxZKG1faXNGcmVlTGlz
dGVkKSkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChzd2VlcE1vZGUgPT0gU3dlZXBUb0ZyZWVM
aXN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBBU1NFUlQoIW1fYWxsb2Nh
dG9yLT5pc0FsbG9jYXRlZChOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMpKTsKKyAgICBSRUxFQVNF
X0FTU0VSVCghbV9pc0ZyZWVMaXN0ZWQpOworICAgIFJFTEVBU0VfQVNTRVJUKCFpc0FsbG9jYXRl
ZCgpKTsKICAgICAKICAgICBpZiAoc3BhY2UoKS0+aXNNYXJraW5nKCkpCiAgICAgICAgIGJsb2Nr
KCkubV9sb2NrLmxvY2soKTsKICAgICAKKyAgICBzdWJzcGFjZSgpLT5kaWRCZWdpblN3ZWVwaW5n
VG9GcmVlTGlzdCh0aGlzKTsKKyAgICAKICAgICBpZiAobmVlZHNEZXN0cnVjdGlvbikgewogICAg
ICAgICBzdWJzcGFjZSgpLT5maW5pc2hTd2VlcCgqdGhpcywgZnJlZUxpc3QpOwogICAgICAgICBy
ZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHJl
dmlzaW9uIDIyNTcyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2Miw2ICsxNjIsOCBAQCBwdWJsaWM6CiAgICAgICAgIHNp
emVfdCBtYXJrQ291bnQoKTsKICAgICAgICAgc2l6ZV90IHNpemUoKTsKICAgICAgICAgCisgICAg
ICAgIGJvb2wgaXNBbGxvY2F0ZWQoKTsKKyAgICAgICAgCiAgICAgICAgIGJvb2wgaXNMaXZlKEhl
YXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBIZWFwVmVyc2lvbiBuZXdseUFsbG9jYXRlZFZlcnNp
b24sIGJvb2wgaXNNYXJraW5nLCBjb25zdCBIZWFwQ2VsbCopOwogICAgICAgICBpbmxpbmUgYm9v
bCBpc0xpdmVDZWxsKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBIZWFwVmVyc2lvbiBuZXds
eUFsbG9jYXRlZFZlcnNpb24sIGJvb2wgaXNNYXJraW5nLCBjb25zdCB2b2lkKik7CiAKQEAgLTE3
Myw2ICsxNzUsNyBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wgaXNOZXdseUFsbG9jYXRlZChjb25z
dCB2b2lkKik7CiAgICAgICAgIHZvaWQgc2V0TmV3bHlBbGxvY2F0ZWQoY29uc3Qgdm9pZCopOwog
ICAgICAgICB2b2lkIGNsZWFyTmV3bHlBbGxvY2F0ZWQoY29uc3Qgdm9pZCopOworICAgICAgICBj
b25zdCBCaXRtYXA8YXRvbXNQZXJCbG9jaz4mIG5ld2x5QWxsb2NhdGVkKCkgY29uc3Q7CiAgICAg
ICAgIAogICAgICAgICBIZWFwVmVyc2lvbiBuZXdseUFsbG9jYXRlZFZlcnNpb24oKSBjb25zdCB7
IHJldHVybiBtX25ld2x5QWxsb2NhdGVkVmVyc2lvbjsgfQogICAgICAgICAKQEAgLTIyNyw3ICsy
MzAsNyBAQCBwdWJsaWM6CiAgICAgICAgIHNpemVfdCBtX2F0b21zUGVyQ2VsbCB7IHN0ZDo6bnVt
ZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkgfTsKICAgICAgICAgc2l6ZV90IG1fZW5kQXRvbSB7
IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkgfTsgLy8gVGhpcyBpcyBhIGZ1enp5
IGVuZC4gQWx3YXlzIHRlc3QgZm9yIDwgbV9lbmRBdG9tLgogICAgICAgICAgICAgCi0gICAgICAg
IFdURjo6Qml0bWFwPGF0b21zUGVyQmxvY2s+IG1fbmV3bHlBbGxvY2F0ZWQ7CisgICAgICAgIEJp
dG1hcDxhdG9tc1BlckJsb2NrPiBtX25ld2x5QWxsb2NhdGVkOwogICAgICAgICAgICAgCiAgICAg
ICAgIEFsbG9jYXRvckF0dHJpYnV0ZXMgbV9hdHRyaWJ1dGVzOwogICAgICAgICBib29sIG1faXNG
cmVlTGlzdGVkIHsgZmFsc2UgfTsKQEAgLTI5NCw2ICsyOTcsOCBAQCBwdWJsaWM6CiAgICAgYm9v
bCBpc01hcmtlZFJhdyhjb25zdCB2b2lkKiBwKTsKICAgICBIZWFwVmVyc2lvbiBtYXJraW5nVmVy
c2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFya2luZ1ZlcnNpb247IH0KICAgICAKKyAgICBjb25z
dCBCaXRtYXA8YXRvbXNQZXJCbG9jaz4mIG1hcmtzKCkgY29uc3Q7CisgICAgCiAgICAgQ291bnRp
bmdMb2NrJiBsb2NrKCkgeyByZXR1cm4gbV9sb2NrOyB9CiAKIHByaXZhdGU6CkBAIC0zNDYsNyAr
MzUxLDcgQEAgcHJpdmF0ZToKIAogICAgIEhlYXBWZXJzaW9uIG1fbWFya2luZ1ZlcnNpb247CiAK
LSAgICBXVEY6OkJpdG1hcDxhdG9tc1BlckJsb2NrPiBtX21hcmtzOworICAgIEJpdG1hcDxhdG9t
c1BlckJsb2NrPiBtX21hcmtzOwogfTsKIAogaW5saW5lIE1hcmtlZEJsb2NrOjpIYW5kbGUmIE1h
cmtlZEJsb2NrOjpoYW5kbGUoKQpAQCAtNTMyLDYgKzUzNywxMSBAQCBpbmxpbmUgYm9vbCBNYXJr
ZWRCbG9jazo6dGVzdEFuZFNldE1hcmtlCiAgICAgcmV0dXJuIG1fbWFya3MuY29uY3VycmVudFRl
c3RBbmRTZXQoYXRvbU51bWJlcihwKSwgZGVwZW5kZW5jeSk7CiB9CiAKK2lubGluZSBjb25zdCBC
aXRtYXA8TWFya2VkQmxvY2s6OmF0b21zUGVyQmxvY2s+IE1hcmtlZEJsb2NrOjptYXJrcygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fbWFya3M7Cit9CisKIGlubGluZSBib29sIE1hcmtlZEJsb2Nr
OjpIYW5kbGU6OmlzTmV3bHlBbGxvY2F0ZWQoY29uc3Qgdm9pZCogcCkKIHsKICAgICByZXR1cm4g
bV9uZXdseUFsbG9jYXRlZC5nZXQobV9ibG9jay0+YXRvbU51bWJlcihwKSk7CkBAIC01NDcsNiAr
NTU3LDExIEBAIGlubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmNsZWFyTmUKICAgICBt
X25ld2x5QWxsb2NhdGVkLmNsZWFyKG1fYmxvY2stPmF0b21OdW1iZXIocCkpOwogfQogCitpbmxp
bmUgY29uc3QgQml0bWFwPE1hcmtlZEJsb2NrOjphdG9tc1BlckJsb2NrPiYgTWFya2VkQmxvY2s6
OkhhbmRsZTo6bmV3bHlBbGxvY2F0ZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX25ld2x5QWxs
b2NhdGVkOworfQorCiBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNBdG9tKGNvbnN0IHZvaWQq
IHApCiB7CiAgICAgQVNTRVJUKE1hcmtlZEJsb2NrOjppc0F0b21BbGlnbmVkKHApKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oCShy
ZXZpc2lvbiAyMjU3MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9j
a0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtOTEsNiArOTEsMTEgQEAgaW5saW5lIGJvb2wg
TWFya2VkQmxvY2s6Om1hcmtzQ29udmV5TGl2ZQogICAgICAgICB8fCBNYXJrZWRTcGFjZTo6bmV4
dFZlcnNpb24obXlNYXJraW5nVmVyc2lvbikgPT0gbWFya2luZ1ZlcnNpb247CiB9CiAKK2lubGlu
ZSBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzQWxsb2NhdGVkKCkKK3sKKyAgICByZXR1cm4g
bV9hbGxvY2F0b3ItPmlzQWxsb2NhdGVkKE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcyk7Cit9CisK
IEFMV0FZU19JTkxJTkUgYm9vbCBNYXJrZWRCbG9jazo6SGFuZGxlOjppc0xpdmUoSGVhcFZlcnNp
b24gbWFya2luZ1ZlcnNpb24sIEhlYXBWZXJzaW9uIG5ld2x5QWxsb2NhdGVkVmVyc2lvbiwgYm9v
bCBpc01hcmtpbmcsIGNvbnN0IEhlYXBDZWxsKiBjZWxsKQogewogICAgIGlmIChhbGxvY2F0b3Io
KS0+aXNBbGxvY2F0ZWQoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzKSkKQEAgLTQzNCw2ICs0Mzks
MTEgQEAgaW5saW5lIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwRGVzdHJ1YwogICAgIHJldHVy
biBCbG9ja0hhc05vRGVzdHJ1Y3RvcnM7CiB9CiAKK2lubGluZSBib29sIE1hcmtlZEJsb2NrOjpI
YW5kbGU6OmlzRW1wdHkoKQoreworICAgIHJldHVybiBtX2FsbG9jYXRvci0+aXNFbXB0eShOb0xv
Y2tpbmdOZWNlc3NhcnksIHRoaXMpOworfQorCiBpbmxpbmUgTWFya2VkQmxvY2s6OkhhbmRsZTo6
RW1wdHlNb2RlIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmVtcHR5TW9kZSgpCiB7CiAgICAgLy8gSXQn
cyBub3Qgb2J2aW91cywgYnV0IHRoaXMgaXMgdGhlIG9ubHkgd2F5IHRvIGtub3cgaWYgdGhlIGJs
b2NrIGlzIGVtcHR5LiBJdCdzIHRoZSBvbmx5CkBAIC00NDEsNyArNDUxLDcgQEAgaW5saW5lIE1h
cmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBNYQogICAgIC8vIC0gSXQncyB0cnVlIHdoZW4g
dGhlIGJsb2NrIGlzIGZyZXNobHkgYWxsb2NhdGVkLgogICAgIC8vIC0gSXQncyB0cnVlIGlmIHRo
ZSBibG9jayBoYWQgYmVlbiBzd2VwdCBpbiB0aGUgcGFzdCwgYWxsIGRlc3RydWN0b3JzIHdlcmUg
Y2FsbGVkLCBhbmQgdGhhdAogICAgIC8vICAgc3dlZXAgcHJvdmVkIHRoYXQgdGhlIGJsb2NrIGlz
IGVtcHR5LgotICAgIHJldHVybiBtX2FsbG9jYXRvci0+aXNFbXB0eShOb0xvY2tpbmdOZWNlc3Nh
cnksIHRoaXMpID8gSXNFbXB0eSA6IE5vdEVtcHR5OworICAgIHJldHVybiBpc0VtcHR5KCkgPyBJ
c0VtcHR5IDogTm90RW1wdHk7CiB9CiAKIGlubGluZSBNYXJrZWRCbG9jazo6SGFuZGxlOjpTY3Jp
YmJsZU1vZGUgTWFya2VkQmxvY2s6OkhhbmRsZTo6c2NyaWJibGVNb2RlKCkKQEAgLTUxNiw3ICs1
MjYsNyBAQCBpbmxpbmUgSXRlcmF0aW9uU3RhdHVzIE1hcmtlZEJsb2NrOjpIYW5kCiAgICAgICAg
IGlmICghYmxvY2suaXNNYXJrZWRSYXcoY2VsbCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgICBpZiAoZnVuY3RvcihjZWxsLCBraW5kKSA9PSBJdGVyYXRpb25TdGF0dXM6OkRvbmUp
CisgICAgICAgIGlmIChmdW5jdG9yKGksIGNlbGwsIGtpbmQpID09IEl0ZXJhdGlvblN0YXR1czo6
RG9uZSkKICAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkRvbmU7CiAgICAgfQog
ICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1N1YnNwYWNlLmNwcAkocmV2aXNpb24gMjI1NzI1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNSAr
MTI2LDE3IEBAIFJlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCkKICAgICAg
ICAgfSk7CiB9CiAKK3ZvaWQgU3Vic3BhY2U6OmRpZFJlc2l6ZUJpdHMoc2l6ZV90KQoreworfQor
Cit2b2lkIFN1YnNwYWNlOjpkaWRSZW1vdmVCbG9jayhzaXplX3QpCit7Cit9CisKK3ZvaWQgU3Vi
c3BhY2U6OmRpZEJlZ2luU3dlZXBpbmdUb0ZyZWVMaXN0KE1hcmtlZEJsb2NrOjpIYW5kbGUqKQor
eworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TdWJzcGFjZS5oCShyZXZpc2lvbiAyMjU3MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Myw2ICs5MywxMCBAQCBwdWJsaWM6
CiAgICAgCiAgICAgU3Vic3BhY2UqIG5leHRTdWJzcGFjZUluQWxpZ25lZE1lbW9yeUFsbG9jYXRv
cigpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dFN1YnNwYWNlSW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9y
OyB9CiAgICAgdm9pZCBzZXROZXh0U3Vic3BhY2VJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IoU3Vi
c3BhY2UqIHN1YnNwYWNlKSB7IG1fbmV4dFN1YnNwYWNlSW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9y
ID0gc3Vic3BhY2U7IH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVzaXplQml0cyhzaXpl
X3QgbmV3U2l6ZSk7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlbW92ZUJsb2NrKHNpemVfdCBibG9j
a0luZGV4KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQmVnaW5Td2VlcGluZ1RvRnJlZUxpc3QoTWFy
a2VkQmxvY2s6OkhhbmRsZSopOwogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBpbml0aWFsaXplKEhl
YXBDZWxsVHlwZSosIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCShyZXZpc2lvbiAyMjU3MjUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZUlubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtNzEsNyArNzEsNyBAQCB2b2lkIFN1YnNwYWNlOjpmb3JFYWNoTWFya2VkQ2VsbChj
b25zdCBGCiAgICAgZm9yRWFjaE5vdEVtcHR5TWFya2VkQmxvY2soCiAgICAgICAgIFsmXSAoTWFy
a2VkQmxvY2s6OkhhbmRsZSogaGFuZGxlKSB7CiAgICAgICAgICAgICBoYW5kbGUtPmZvckVhY2hN
YXJrZWRDZWxsKAotICAgICAgICAgICAgICAgIFsmXSAoSGVhcENlbGwqIGNlbGwsIEhlYXBDZWxs
OjpLaW5kIGtpbmQpIC0+IEl0ZXJhdGlvblN0YXR1cyB7IAorICAgICAgICAgICAgICAgIFsmXSAo
c2l6ZV90LCBIZWFwQ2VsbCogY2VsbCwgSGVhcENlbGw6OktpbmQga2luZCkgLT4gSXRlcmF0aW9u
U3RhdHVzIHsKICAgICAgICAgICAgICAgICAgICAgZnVuYyhjZWxsLCBraW5kKTsKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CiAgICAgICAgICAg
ICAgICAgfSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328939</attachid>
            <date>2017-12-10 11:32:45 -0800</date>
            <delta_ts>2017-12-10 18:59:05 -0800</delta_ts>
            <desc>a little more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>40749</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjU3MjUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDc0LDYgKzQ3NCw5IEBACiAJCTBGQjE3NjYzMTk2QjhG
OUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjE3NjVGMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFs
dWUuaCAqLzsgfTsKIAkJMEZCMzg3OEUxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpckJsb2NrV29ya2xp
c3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjM4
NzhCMUJGQkM0NEQwMEUzQUIxRSAvKiBBaXJCbG9ja1dvcmtsaXN0LmggKi87IH07CiAJCTBGQjM4
NzkwMUJGQkM0NEQwMEUzQUIxRSAvKiBBaXJPcHRpbWl6ZUJsb2NrT3JkZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjM4NzhEMUJGQkM0NEQwMEUz
QUIxRSAvKiBBaXJPcHRpbWl6ZUJsb2NrT3JkZXIuaCAqLzsgfTsKKwkJMEZCNDY3N0YxRkREQTZF
OTAwM0ZDQjA5IC8qIEF0b21JbmRpY2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkI0Njc3RTFGRERBNkU1MDAzRkNCMDkgLyogQXRvbUluZGljZXMu
aCAqLzsgfTsKKwkJMEZCNDY3ODAxRkREQTZGMTAwM0ZDQjA5IC8qIElzb0NlbGxTZXQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjQ2NzdEMUZEREE2
RDkwMDNGQ0IwOSAvKiBJc29DZWxsU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCNDY3ODExRkREQTZGNzAwM0ZDQjA5IC8qIElzb0NlbGxT
ZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkI0Njc3QjFGRERBNkQ4MDAzRkNCMDkgLyogSXNvQ2VsbFNldElubGluZXMuaCAqLzsgfTsK
IAkJMEZCNDc2N0UxRDk5QUVBOTAwOEVBNkNCIC8qIEdDRGVmZXJyYWxDb250ZXh0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0NzY3QzFEOTlBRUE3
MDA4RUE2Q0IgLyogR0NEZWZlcnJhbENvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkI0NzY3RjFEOTlBRUFEMDA4RUE2Q0IgLyogR0NE
ZWZlcnJhbENvbnRleHRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkI0NzY3RDFEOTlBRUE3MDA4RUE2Q0IgLyogR0NEZWZlcnJhbENvbnRl
eHRJbmxpbmVzLmggKi87IH07CiAJCTBGQjRGQjc0MUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5
U2xvd1BhdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGQjRGQjcxMUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1BhdGguaCAqLzsgfTsKQEAg
LTI1NjIsNiArMjU2NSwxMCBAQAogCQkwRkIzODc5MTFCRkQzMUExMDBFM0FCMUUgLyogRlRMQ29t
cGlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExDb21waWxl
LmNwcDsgcGF0aCA9IGZ0bC9GVExDb21waWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZCNDE1ODMxRDc4Rjk4MjAwREY4RDA5IC8qIEFycmF5Q29udmVudGlvbnMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXJyYXlDb252ZW50aW9ucy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjQzOEEyMTkyNzBCMUQwMEUxRkJDOSAv
KiBTdHJ1Y3R1cmVTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U3RydWN0dXJlU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCNDY3N0Ix
RkREQTZEODAwM0ZDQjA5IC8qIElzb0NlbGxTZXRJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IElzb0NlbGxTZXRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGQjQ2NzdDMUZEREE2RDkwMDNGQ0IwOSAvKiBJc29DZWxsU2V0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElzb0NlbGxTZXQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkI0Njc3RDFGRERBNkQ5MDAzRkNCMDkgLyogSXNvQ2Vs
bFNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJc29DZWxsU2V0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjQ2NzdFMUZEREE2RTUwMDNGQ0IwOSAvKiBB
dG9tSW5kaWNlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdG9tSW5kaWNl
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0NzY3QzFEOTlBRUE3MDA4RUE2
Q0IgLyogR0NEZWZlcnJhbENvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gR0NEZWZlcnJhbENvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZC
NDc2N0QxRDk5QUVBNzAwOEVBNkNCIC8qIEdDRGVmZXJyYWxDb250ZXh0SW5saW5lcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ0RlZmVycmFsQ29udGV4dElubGluZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNEI1MTAxNkIzQTk2NDAwM0Y2OTZCIC8q
IERGR01pbmlmaWVkSUQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTWlu
aWZpZWRJRC5oOyBwYXRoID0gZGZnL0RGR01pbmlmaWVkSUQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTU1MjUsNiArNTUzMiw3IEBACiAJCQkJMEY5NjMwMzUxRDQxOTJDMzAwNTYw
OUQ5IC8qIEFsbG9jYXRvckF0dHJpYnV0ZXMuY3BwICovLAogCQkJCTBGOTYzMDM2MUQ0MTkyQzMw
MDU2MDlEOSAvKiBBbGxvY2F0b3JBdHRyaWJ1dGVzLmggKi8sCiAJCQkJMEYzMENCNUQxRkNFNDZC
NDAwNEI1MzIzIC8qIEFsbG9jYXRvckZvck1vZGUuaCAqLywKKwkJCQkwRkI0Njc3RTFGRERBNkU1
MDAzRkNCMDkgLyogQXRvbUluZGljZXMuaCAqLywKIAkJCQkwRkRFODdGODFERkQwQzZEMDA2NEMz
OTAgLyogQ2VsbENvbnRhaW5lci5jcHAgKi8sCiAJCQkJMEYwNzBBNDIxRDU0M0E4OTAwNkU3MjMy
IC8qIENlbGxDb250YWluZXIuaCAqLywKIAkJCQkwRjA3MEE0MzFENTQzQTg5MDA2RTcyMzIgLyog
Q2VsbENvbnRhaW5lcklubGluZXMuaCAqLywKQEAgLTU2MTEsNiArNTYxOSw5IEBACiAJCQkJQzI1
RjhCQ0MxNTc1NDRBOTAwMjQ1QjcxIC8qIEluY3JlbWVudGFsU3dlZXBlci5oICovLAogCQkJCTBG
RENFMTJGMUZCMTFEOUQwMDZGMzkwMSAvKiBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcCAq
LywKIAkJCQkwRkRDRTEzMDFGQjExRDlEMDA2RjM5MDEgLyogSXNvQWxpZ25lZE1lbW9yeUFsbG9j
YXRvci5oICovLAorCQkJCTBGQjQ2NzdDMUZEREE2RDkwMDNGQ0IwOSAvKiBJc29DZWxsU2V0LmNw
cCAqLywKKwkJCQkwRkI0Njc3RDFGRERBNkQ5MDAzRkNCMDkgLyogSXNvQ2VsbFNldC5oICovLAor
CQkJCTBGQjQ2NzdCMUZEREE2RDgwMDNGQ0IwOSAvKiBJc29DZWxsU2V0SW5saW5lcy5oICovLAog
CQkJCTBGRENFMTJDMUZBRkI0REUwMDZGMzkwMSAvKiBJc29TdWJzcGFjZS5jcHAgKi8sCiAJCQkJ
MEZEQ0UxMkIxRkFGQjRERTAwNkYzOTAxIC8qIElzb1N1YnNwYWNlLmggKi8sCiAJCQkJMEY3NjZE
MjkxNUE4Q0MzNDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmNwcCAqLywKQEAgLTc5OTcs
NiArODAwOCw3IEBACiAJCQkJMEZFQzg1NzIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxv
Y2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkM2M0JDMUU2MzQ0MEMwMEMxMzgzOSAvKiBBaXJC
bG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMzg3OEUxQkZCQzQ0RDAw
RTNBQjFFIC8qIEFpckJsb2NrV29ya2xpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjQ2Nzgx
MUZEREE2RjcwMDNGQ0IwOSAvKiBJc29DZWxsU2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY3OUM3Q0ExRTc0QzkzQjAwRUIzNEQxIC8qIEFpckJyZWFrQ3JpdGljYWxFZGdlcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY2MTgzMkExQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxsaW5n
Q29udmVudGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1NzQxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckNDYWxsU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCkBAIC04OTczLDYgKzg5ODUsNyBA
QAogCQkJCUFEMkZDQkU1MURCNThEQUQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCUFERTgwMjk5MUUwOEYxREUwMDU4REU3OCAvKiBKU1dlYkFz
c2VtYmx5TGlua0Vycm9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JFNzFEQjU4REFEMDBC
M0U3MzYgLyogSlNXZWJBc3NlbWJseU1lbW9yeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCNDY3
N0YxRkREQTZFOTAwM0ZDQjA5IC8qIEF0b21JbmRpY2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
RDJGQ0MwNTFEQjU4REFEMDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseU1vZHVsZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQUQyRkNCRTkxREI1OERBRDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlSdW50
aW1lRXJyb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQkVCMURCNThEQUQwMEIzRTczNiAv
KiBKU1dlYkFzc2VtYmx5VGFibGUuaCBpbiBIZWFkZXJzICovLApAQCAtOTI1OSw2ICs5MjcyLDcg
QEAKIAkJCQlDMjBCQTkyRDE2QkIxQzE1MDBCM0FFQTIgLyogU3RydWN0dXJlUmFyZURhdGFJbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkzMzJBNTE0Q0E3REREMDA4NUYzQzYgLyogU3Ry
dWN0dXJlU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc2NkQzOTE1QUU0QTFGMDA4RjM2M0Ug
LyogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZCNDY3ODAxRkREQTZGMTAwM0ZDQjA5IC8qIElzb0NlbGxTZXQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDQ0YwRDA4MEVGMEFBQjkwMDQxM0M4RiAvKiBTdHJ1Y3R1cmVTdHViSW5mby5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkM5MDQxNDgwRUI5MjUwOTAwRkUyNkZBIC8qIFN0cnVjdHVyZVRyYW5z
aXRpb25UYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3REYxMzcxRTI5NzBFMTAwOTU5NTFC
IC8qIFN1YnNwYWNlLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0F0b21JbmRpY2VzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQXRvbUluZGljZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9BdG9tSW5kaWNlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsKKworc3RydWN0
IEF0b21JbmRpY2VzIHsKKyAgICBBdG9tSW5kaWNlcygpIHsgfQorICAgIAorICAgIEF0b21JbmRp
Y2VzKEhlYXBDZWxsKiBjZWxsKQorICAgICAgICA6IGJsb2NrKE1hcmtlZEJsb2NrOjpibG9ja0Zv
cihjZWxsKSkKKyAgICAgICAgLCBibG9ja0luZGV4KGJsb2NrLT5oYW5kbGUoKS5pbmRleCgpKQor
ICAgICAgICAsIGF0b21OdW1iZXIoYmxvY2stPmF0b21OdW1iZXIoY2VsbCkpCisgICAgeworICAg
IH0KKyAgICAKKyAgICBNYXJrZWRCbG9jayogYmxvY2s7CisgICAgc2l6ZV90IGJsb2NrSW5kZXg7
CisgICAgc2l6ZV90IGF0b21OdW1iZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIyNTcyNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTIs
MTAgKzU1MiwxMCBAQCB2b2lkIEhlYXA6OmFkZFJlZmVyZW5jZShKU0NlbGwqIGNlbGwsIEFyCiAg
ICAgfQogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZT4KLXZvaWQgSGVhcDo6ZmluYWxp
emVVbmNvbmRpdGlvbmFsRmluYWxpemVycyhTdWJzcGFjZSYgc3Vic3BhY2UpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBDZWxsU2V0LCB0eXBlbmFtZSBDZWxsVHlwZT4KK3ZvaWQgSGVhcDo6ZmluYWxpemVV
bmNvbmRpdGlvbmFsRmluYWxpemVycyhDZWxsU2V0JiBjZWxsU2V0KQogewotICAgIHN1YnNwYWNl
LmZvckVhY2hNYXJrZWRDZWxsKAorICAgIGNlbGxTZXQuZm9yRWFjaE1hcmtlZENlbGwoCiAgICAg
ICAgIFsmXSAoSGVhcENlbGwqIGNlbGwsIEhlYXBDZWxsOjpLaW5kKSB7CiAgICAgICAgICAgICBz
dGF0aWNfY2FzdDxDZWxsVHlwZSo+KGNlbGwpLT5maW5hbGl6ZVVuY29uZGl0aW9uYWxseSgqdm0o
KSk7CiAgICAgICAgIH0pOwpAQCAtNTYzLDcgKzU2Myw3IEBAIHZvaWQgSGVhcDo6ZmluYWxpemVV
bmNvbmRpdGlvbmFsRmluYWxpemUKIAogdm9pZCBIZWFwOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxG
aW5hbGl6ZXJzKCkKIHsKLSAgICBmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzPEluZmVy
cmVkU3RydWN0dXJlPih2bSgpLT5pbmZlcnJlZFN0cnVjdHVyZVNwYWNlKTsKKyAgICBmaW5hbGl6
ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzPEluZmVycmVkVHlwZT4odm0oKS0+aW5mZXJyZWRUeXBl
c1dpdGhGaW5hbGl6ZXJzKTsKICAgICAKICAgICB3aGlsZSAobV91bmNvbmRpdGlvbmFsRmluYWxp
emVycy5oYXNOZXh0KCkpIHsKICAgICAgICAgVW5jb25kaXRpb25hbEZpbmFsaXplciogZmluYWxp
emVyID0gbV91bmNvbmRpdGlvbmFsRmluYWxpemVycy5yZW1vdmVOZXh0KCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyMjU3MjUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5Niw4ICs0OTYsOCBAQCBw
cml2YXRlOgogICAgIHZvaWQgbm90aWZ5SW5jcmVtZW50YWxTd2VlcGVyKCk7CiAgICAgdm9pZCBo
YXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBl
PgotICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycyhTdWJzcGFjZSYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxTZXQsIHR5cGVuYW1lIENlbGxUeXBlPgorICAgIHZv
aWQgZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycyhDZWxsU2V0Jik7CiAgICAgCiAgICAg
dm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKCk7CiAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmNwcAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJc29DZWxsU2V0LmgiCisKK25h
bWVzcGFjZSBKU0MgeworCitJc29DZWxsU2V0OjpJc29DZWxsU2V0KElzb1N1YnNwYWNlJiBzdWJz
cGFjZSkKKyAgICA6IG1fc3Vic3BhY2Uoc3Vic3BhY2UpCit7CisgICAgc2l6ZV90IHNpemUgPSBz
dWJzcGFjZS5tX2FsbG9jYXRyLm1fYmxvY2tzLnNpemUoKTsKKyAgICBtX2Jsb2Nrc1dpdGhCaXRz
Lmdyb3coc2l6ZSk7CisgICAgbV9iaXRzLmdyb3coc2l6ZSk7CisgICAgc3Vic3BhY2UubV9jZWxs
U2V0cy5hcHBlbmQodGhpcyk7Cit9CisKK0lzb0NlbGxTZXQ6On5Jc29DZWxsU2V0KCkKK3sKKyAg
ICBpZiAoaXNPbkxpc3QoKSkKKyAgICAgICAgcmVtb3ZlKCk7Cit9CisKK3ZvaWQgSXNvQ2VsbFNl
dDo6ZGlkUmVzaXplQml0cyhzaXplX3QgbmV3U2l6ZSkKK3sKKyAgICBtX2Jsb2Nrc1dpdGhCaXRz
LnJlc2l6ZShuZXdTaXplKTsKKyAgICBtX2JpdHMuZ3JvdyhuZXdTaXplKTsKK30KKwordm9pZCBJ
c29DZWxsU2V0OjpkaWRSZW1vdmVCbG9jayhzaXplX3QgYmxvY2tJbmRleCkKK3sKKyAgICBtX2Js
b2Nrc1dpdGhCaXRzW2Jsb2NrSW5kZXhdID0gZmFsc2U7CisgICAgbV9iaXRzW2Jsb2NrSW5kZXhd
ID0gbnVsbHB0cjsKK30KKwordm9pZCBJc29DZWxsU2V0Ojpzd2VlcFRvRnJlZUxpc3QoTWFya2Vk
QmxvY2s6OkhhbmRsZSogYmxvY2spCit7CisgICAgUkVMRUFTRV9BU1NFUlQoIWJsb2NrLT5pc0Fs
bG9jYXRlZCgpKTsKKyAgICAKKyAgICBpZiAoIW1fYmxvY2tzV2l0aEJpdHNbYmxvY2stPmluZGV4
KCldKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKGJsb2NrLT5oYXNBbnlOZXdseUFs
bG9jYXRlZCgpKSB7CisgICAgICAgIG1fYml0c1tibG9jay0+aW5kZXgoKV0tPmZpbHRlcihibG9j
ay0+bmV3bHlBbGxvY2F0ZWQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
YmxvY2stPmlzRW1wdHkoKSkgeworICAgICAgICBtX2Jsb2Nrc1dpdGhCaXRzW2Jsb2NrLT5pbmRl
eCgpXSA9IGZhbHNlOworICAgICAgICBtX2JpdHNbYmxvY2stPmluZGV4KCldID0gbnVsbHB0cjsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX2JpdHNbYmxvY2stPmluZGV4KCld
LT5maWx0ZXIoYmxvY2stPm1hcmtzKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXQuaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkF0b21JbmRpY2VzLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCitjbGFzcyBJc29TdWJzcGFjZTsKKworLy8gQ3JlYXRlIGEgc2V0IG9mIGNl
bGxzIHRoYXQgYXJlIGluIGFuIElzb1N1YnNwYWNlLiBUaGlzIGFsbG93cyBjb25jdXJyZW50IE8o
MSkgc2V0IGluc2VydGlvbiBhbmQKKy8vIHJlbW92YWwuIEVhY2ggc3VjaCBzZXQgc2hvdWxkIGJl
IHRob3VnaHQgb2YgYXMgYSAwLjglIGluY3JlYXNlIGluIG9iamVjdCBzaXplIGZvciBvYmplY3Rz
IGluIHRoYXQKKy8vIElzb1N1YnNwYWNlIChpdCdzIGxpa2UgYWRkaW5nIDEgYml0IGV2ZXJ5IDE2
IGJ5dGVzLCBvciAxIGJpdCBldmVyeSAxMjggYml0cykuCitjbGFzcyBJc29DZWxsU2V0IDogcHVi
bGljIEJhc2ljUmF3U2VudGluZWxOb2RlPElzb0NlbGxTZXQ+IHsKK3B1YmxpYzoKKyAgICBJc29D
ZWxsU2V0KElzb1N1YnNwYWNlJiBzdWJzcGFjZSk7CisgICAgfklzb0NlbGxTZXQoKTsKKyAgICAK
KyAgICAvLyBOT1RFOiBUaGVzZSBhZGQvcmVtb3ZlIG1ldGhvZHMgYXJlIGN1cnJlbnRseSBtZWFu
dCB0byBiZSBjYWxsZWQgZnJvbSBzZXJpYWwgZXhlY3V0aW9uLiBZb3UKKyAgICAvLyBjYW5ub3Qg
Y2FsbCB0aGVtIGZyb20gY29uc3RyYWludCBzb2x2aW5nLCB2aXNpdGluZywgb3IgSklUaW5nLiBJ
ZiB3ZSB3YW50ZWQgdG8gZml4IHRoaXMsIHdlJ2QKKyAgICAvLyBuZWVkIHRvIG1ha2UgdGhlIGJp
dCBtYW5pcHVsYXRpb24gdXNlIENBUyBhbmQgdXNlIHNvbWUga2luZCBvZiBsb2NraW5nIHRvIHBy
ZXZlbnQgYWdhaW5zdCB0aGUKKyAgICAvLyBtYWluIHRocmVhZCBhZGRpbmcgbmV3IGJsb2Nrcy4g
Tm90ZSB0aGF0IGlmIGFsbCB3ZSB3YW50ZWQgdG8gZG8gd2FzIGFkZC9yZW1vdmUgZHVyaW5nIHBh
cmFsbGVsCisgICAgLy8gU1RXIEdDIGFsZ29yaXRobXMgbGlrZSBjb25zdHJhaW50IHNvbHZpbmcs
IHRoZW4gYWxsIHdlJ2QgbmVlZCBpcyBhIENBUy1iYXNlZCBhZGQvcmVtb3ZlLgorICAgIC8vIC0+
IEEgYmV0dGVyIHdheSB0byBoYW5kbGUgdGhlIGJpdHZlY3RvciByZXNpemluZyBwcm9ibGVtIGlz
IHRvIGhhdmUgYmxvY2sgZGlyZWN0b3JpZXMgdGhlIHdheQorICAgIC8vICAgIHRoYXQgSXNvSGVh
cHMgaGF2ZSBwYWdlIGRpcmVjdG9yaWVzLgorICAgIGJvb2wgYWRkKEhlYXBDZWxsKiBjZWxsKTsK
KyAgICAKKyAgICBib29sIHJlbW92ZShIZWFwQ2VsbCogY2VsbCk7CisgICAgCisgICAgYm9vbCBj
b250YWlucyhIZWFwQ2VsbCogY2VsbCkgY29uc3Q7CisgICAgCisgICAgLy8gVGhpcyB3aWxsIGhh
dmUgdG8gZG8gYSBjb21iaW5lZCBzZWFyY2ggb3ZlciB3aGF0ZXZlciBTdWJzcGFjZTo6Zm9yRWFj
aE1hcmtlZENlbGwgdXNlcyBhbmQKKyAgICAvLyBvdXIgbV9ibG9ja3NXaXRoQml0cy4KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIHZvaWQgZm9yRWFjaE1hcmtlZENlbGwoY29uc3Qg
RnVuYyYpOworICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgSXNvU3Vic3BhY2U7Cisg
ICAgCisgICAgdm9pZCBkaWRSZXNpemVCaXRzKHNpemVfdCBuZXdTaXplKTsKKyAgICB2b2lkIGRp
ZFJlbW92ZUJsb2NrKHNpemVfdCBibG9ja0luZGV4KTsKKyAgICB2b2lkIHN3ZWVwVG9GcmVlTGlz
dChNYXJrZWRCbG9jazo6SGFuZGxlKik7CisgICAgCisgICAgU3Vic3BhY2UmIG1fc3Vic3BhY2U7
CisgICAgCisgICAgLy8gSWRlYTogc3dlZXBpbmcgdG8gZnJlZS1saXN0IGNsZWFycyBiaXRzIGZv
ciB0aG9zZSBjZWxscyB0aGF0IHdlcmUgZnJlZS1saXN0ZWQuIFRoZSBmaXJzdCB0aW1lCisgICAg
Ly8gd2UgYWRkIGEgY2VsbCBpbiBhIGJsb2NrLCB0aGF0IGJsb2NrIGdldHMgYSBmcmVlLWxpc3Qu
IFVubGVzcyB3ZSBkbyBzb21ldGhpbmcgdGhhdCBvYnZpb3VzbHkKKyAgICAvLyBjbGVhcnMgYWxs
IGJpdHMgZm9yIGEgYmxvY2ssIHdlIGtlZXAgaXQgc2V0IGluIGJsb2Nrc1dpdGhCaXRzLgorICAg
IAorICAgIEZhc3RCaXRWZWN0b3IgbV9ibG9ja3NXaXRoQml0czsKKyAgICBWZWN0b3I8c3RkOjp1
bmlxdWVfcHRyPEJpdG1hcDxNYXJrZWRCbG9jazo6YXRvbXNQZXJCbG9jaz4+PiBtX2JpdHM7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSXNvQ2VsbFNldElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Jc29DZWxsU2V0SW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIklzb0NlbGxTZXQuaCIKKyNpbmNsdWRlICJNYXJr
ZWRCbG9ja0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBib29sIElzb0Nl
bGxTZXQ6OmFkZChIZWFwQ2VsbCogY2VsbCkKK3sKKyAgICBBdG9tSW5kaWNlcyBhdG9tSW5kaWNl
cyhjZWxsKTsKKyAgICBhdXRvJiBiaXRzUHRyUmVmID0gbV9iaXRzW2F0b21JbmRpY2VzLmJsb2Nr
SW5kZXhdOworICAgIGF1dG8qIGJpdHMgPSBiaXRzUHRyUmVmLmdldCgpOworICAgIGlmICghYml0
cykgeworICAgICAgICBtX2Jsb2Nrc1dpdGhCaXRzW2F0b21JbmRpY2VzLmJsb2NrSW5kZXhdID0g
dHJ1ZTsKKyAgICAgICAgYml0c1B0clJlZiA9IHN0ZDo6bWFrZV91bmlxdWU8Qml0bWFwPE1hcmtl
ZEJsb2NrOjphdG9tc1BlckJsb2NrPj4oKTsKKyAgICAgICAgYml0cyA9IGJpdHNQdHJSZWYuZ2V0
KCk7CisgICAgfQorICAgIHJldHVybiAhYml0cy0+dGVzdEFuZFNldChhdG9tSW5kaWNlcy5hdG9t
TnVtYmVyKTsKK30KKworaW5saW5lIGJvb2wgSXNvQ2VsbFNldDo6cmVtb3ZlKEhlYXBDZWxsKiBj
ZWxsKQoreworICAgIEF0b21JbmRpY2VzIGF0b21JbmRpY2VzKGNlbGwpOworICAgIGF1dG8mIGJp
dHNQdHJSZWYgPSBtX2JpdHNbYXRvbUluZGljZXMuYmxvY2tJbmRleF07CisgICAgYXV0byogYml0
cyA9IGJpdHNQdHJSZWYuZ2V0KCk7CisgICAgaWYgKCFiaXRzKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgcmV0dXJuIGJpdHMtPnRlc3RBbmRDbGVhcihhdG9tSW5kaWNlcy5hdG9tTnVtYmVy
KTsKK30KKworaW5saW5lIGJvb2wgSXNvQ2VsbFNldDo6Y29udGFpbnMoSGVhcENlbGwqIGNlbGwp
Cit7CisgICAgQXRvbUluZGljZXMgYXRvbUluZGljZXMoY2VsbCk7CisgICAgYXV0byogYml0cyA9
IG1fYml0c1thdG9tSW5kaWNlcy5ibG9ja0luZGV4XS5nZXQoKTsKKyAgICBpZiAoYml0cykKKyAg
ICAgICAgcmV0dXJuIGJpdHMtPmdldChhdG9tSW5kaWNlcy5hdG9tTnVtYmVyKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIElzb0NlbGxTZXQ6
OmZvckVhY2hNYXJrZWRDZWxsKGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgTWFya2VkQWxsb2Nh
dG9yJiBhbGxvY2F0b3IgPSBtX3N1YnNwYWNlLm1fYWxsb2NhdG9yOworICAgIChhbGxvY2F0b3Iu
bV9tYXJraW5nTm90RW1wdHkgJiBtX2Jsb2Nrc1dpdGhCaXRzKS5mb3JFYWNoU2V0Qml0KAorICAg
ICAgICBbJl0gKHNpemVfdCBibG9ja0luZGV4KSB7CisgICAgICAgICAgICBNYXJrZWRCbG9jazo6
SGFuZGxlKiBibG9jayA9IGFsbG9jYXRvci5tX2Jsb2Nrc1tibG9ja0luZGV4XTsKKworICAgICAg
ICAgICAgYXV0byogYml0cyA9IG1fYml0c1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAg
IGJvb2wgaGFkQml0cyA9IGZhbHNlOworICAgICAgICAgICAgaGFuZGxlLT5mb3JFYWNoTWFya2Vk
Q2VsbCgKKyAgICAgICAgICAgICAgICBbJl0gKHNpemVfdCBhdG9tTnVtYmVyLCBIZWFwQ2VsbCog
Y2VsbCwgSGVhcENlbGw6OktpbmQga2luZCkgLT4gSXRlcmF0aW9uU3RhdHVzIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGJpdHMtPmdldChhdG9tTnVtYmVyKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgZnVuYyhjZWxsLCBraW5kKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhZEJp
dHMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgaWYgKCFoYWRCaXRzKSB7CisgICAgICAgICAgICAgICAgbV9iaXRzW2Jsb2NrSW5k
ZXhdID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBtX2Jsb2Nrc1dpdGhCaXRzW2Jsb2NrSW5k
ZXhdID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworfQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNl
LmNwcAkocmV2aXNpb24gMjI1NzI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNv
U3Vic3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw1ICs2NywyOSBAQCB2b2lkKiBJc29T
dWJzcGFjZTo6YWxsb2NhdGVOb25WaXJ0dWFsKHNpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAor
dm9pZCBJc29TdWJzcGFjZTo6ZGlkUmVzaXplQml0cyhzaXplX3QgYmxvY2tJbmRleCkKK3sKKyAg
ICBtX2NlbGxTZXRzLmZvckVhY2goCisgICAgICAgIFsmXSAoSXNvQ2VsbFNldCogc2V0KSB7Cisg
ICAgICAgICAgICBzZXQtPmRpZFJlc2l6ZUJpdHMoYmxvY2tJbmRleCk7CisgICAgICAgIH0pOwor
fQorCit2b2lkIElzb1N1YnNwYWNlOjpkaWRSZW1vdmVCbG9jayhzaXplX3QgYmxvY2tJbmRleCkK
K3sKKyAgICBtX2NlbGxTZXRzLmZvckVhY2goCisgICAgICAgIFsmXSAoSXNvQ2VsbFNldCogc2V0
KSB7CisgICAgICAgICAgICBzZXQtPmRpZFJlbW92ZUJsb2NrKGJsb2NrSW5kZXgpOworICAgICAg
ICB9KTsKK30KKwordm9pZCBJc29TdWJzcGFjZTo6ZGlkQmVnaW5Td2VlcGluZ1RvRnJlZUxpc3Qo
TWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2spCit7CisgICAgbV9jZWxsU2V0cy5mb3JFYWNoKAor
ICAgICAgICBbJl0gKElzb0NlbGxTZXQqIHNldCkgeworICAgICAgICAgICAgc2V0LT5zd2VlcFRv
RnJlZUxpc3QoYmxvY2spOworICAgICAgICB9KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuaAkocmV2aXNpb24g
MjI1NzI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMjcsMTAgKzI3LDEyIEBACiAKICNpbmNsdWRlICJNYXJrZWRBbGxvY2F0
b3IuaCIKICNpbmNsdWRlICJTdWJzcGFjZS5oIgorI2luY2x1ZGUgPHd0Zi9TaW5nbHlMaW5rZWRM
aXN0V2l0aFRhaWwuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIElzb0FsaWduZWRNZW1v
cnlBbGxvY2F0b3I7CitjbGFzcyBJc29DZWxsU2V0OwogCiBjbGFzcyBJc29TdWJzcGFjZSA6IHB1
YmxpYyBTdWJzcGFjZSB7CiBwdWJsaWM6CkBAIC00Niw5ICs0OCwxNCBAQCBwdWJsaWM6CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGVOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBH
Q0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUg
ZmFpbHVyZU1vZGUpOwogCiBwcml2YXRlOgorICAgIHZvaWQgZGlkUmVzaXplQml0cyhzaXplX3Qg
bmV3U2l6ZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRSZW1vdmVCbG9jayhzaXplX3QgYmxvY2tJ
bmRleCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRCZWdpblN3ZWVwaW5nVG9GcmVlTGlzdChNYXJr
ZWRCbG9jazo6SGFuZGxlKikgb3ZlcnJpZGU7CisgICAgCiAgICAgc2l6ZV90IG1fc2l6ZTsKICAg
ICBNYXJrZWRBbGxvY2F0b3IgbV9hbGxvY2F0b3I7CiAgICAgc3RkOjp1bmlxdWVfcHRyPElzb0Fs
aWduZWRNZW1vcnlBbGxvY2F0b3I+IG1faXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsKKyAgICBT
ZW50aW5lbExpbmtlZExpc3Q8SXNvQ2VsbFNldCwgQmFzaWNSYXdTZW50aW5lbE5vZGU8SXNvQ2Vs
bFNldD4+IG1fY2VsbFNldHM7CiB9OwogCiBpbmxpbmUgTWFya2VkQWxsb2NhdG9yKiBJc29TdWJz
cGFjZTo6YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplX3Qgc2l6ZSwgQWxsb2NhdG9yRm9yTW9k
ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9y
LmNwcAkocmV2aXNpb24gMjI1NzI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYxLDYgKzI2MSw3IEBAIHZvaWQg
TWFya2VkQWxsb2NhdG9yOjphZGRCbG9jayhNYXJrZWRCbG8KICAgICAgICAgICAgIEFTU0VSVCht
X2Jsb2Nrcy5jYXBhY2l0eSgpID4gb2xkQ2FwYWNpdHkpOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2JpdHZlY3RvckxvY2spOworICAgICAgICAgICAgc3Vi
c3BhY2UoKS0+ZGlkUmVzaXplQml0cyhtX2Jsb2Nrcy5jYXBhY2l0eSgpKTsKICAgICAgICAgICAg
IGZvckVhY2hCaXRWZWN0b3IoCiAgICAgICAgICAgICAgICAgbG9ja2VyLAogICAgICAgICAgICAg
ICAgIFsmXSAoRmFzdEJpdFZlY3RvciYgdmVjdG9yKSB7CkBAIC0yOTAsNyArMjkxLDkgQEAgdm9p
ZCBNYXJrZWRBbGxvY2F0b3I6OnJlbW92ZUJsb2NrKE1hcmtlZAogewogICAgIEFTU0VSVChibG9j
ay0+YWxsb2NhdG9yKCkgPT0gdGhpcyk7CiAgICAgQVNTRVJUKG1fYmxvY2tzW2Jsb2NrLT5pbmRl
eCgpXSA9PSBibG9jayk7Ci0KKyAgICAKKyAgICBzdWJzcGFjZSgpLT5kaWRSZW1vdmVCbG9jayhi
bG9jay0+aW5kZXgoKSk7CisgICAgCiAgICAgbV9ibG9ja3NbYmxvY2stPmluZGV4KCldID0gbnVs
bHB0cjsKICAgICBtX2ZyZWVCbG9ja0luZGljZXMuYXBwZW5kKGJsb2NrLT5pbmRleCgpKTsKICAg
ICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5o
CShyZXZpc2lvbiAyMjU3MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRB
bGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQCBuYW1lc3BhY2UgSlND
IHsKIAogY2xhc3MgR0NEZWZlcnJhbENvbnRleHQ7CiBjbGFzcyBIZWFwOworY2xhc3MgSXNvQ2Vs
bFNldDsKIGNsYXNzIE1hcmtlZFNwYWNlOwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwog
CkBAIC0xNjIsNiArMTYzLDcgQEAgcHVibGljOgogICAgIHZvaWQgZHVtcEJpdHMoUHJpbnRTdHJl
YW0mID0gV1RGOjpkYXRhRmlsZSgpKTsKICAgICAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNz
IElzb0NlbGxTZXQ7CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtlZEJsb2NrOwogICAgIAogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2UoR0NEZWZlcnJhbENvbnRleHQq
LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkocmV2aXNpb24gMjI1NzI1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMDEsMTEgKzMwMSw2IEBAIHNpemVfdCBNYXJrZWRCbG9jazo6bWFya0NvdW50KCkKICAgICBy
ZXR1cm4gYXJlTWFya3NTdGFsZSgpID8gMCA6IG1fbWFya3MuY291bnQoKTsKIH0KIAotYm9vbCBN
YXJrZWRCbG9jazo6SGFuZGxlOjppc0VtcHR5KCkKLXsKLSAgICByZXR1cm4gbV9hbGxvY2F0b3It
PmlzRW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzKTsKLX0KLQogdm9pZCBNYXJrZWRCbG9j
azo6Y2xlYXJIYXNBbnlNYXJrZWQoKQogewogICAgIG1fYmlhc2VkTWFya0NvdW50ID0gbV9tYXJr
Q291bnRCaWFzOwpAQCAtNDAyLDE2ICszOTcsMTQgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxl
Ojpzd2VlcChGcmVlTGlzdAogICAgIGlmIChzd2VlcE1vZGUgPT0gU3dlZXBPbmx5ICYmICFuZWVk
c0Rlc3RydWN0aW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoVU5MSUtFTFkobV9pc0Zy
ZWVMaXN0ZWQpKSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHN3ZWVwTW9kZSA9PSBTd2VlcFRv
RnJlZUxpc3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIEFTU0VSVCghbV9h
bGxvY2F0b3ItPmlzQWxsb2NhdGVkKE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcykpOworICAgIFJF
TEVBU0VfQVNTRVJUKCFtX2lzRnJlZUxpc3RlZCk7CisgICAgUkVMRUFTRV9BU1NFUlQoIWlzQWxs
b2NhdGVkKCkpOwogICAgIAogICAgIGlmIChzcGFjZSgpLT5pc01hcmtpbmcoKSkKICAgICAgICAg
YmxvY2soKS5tX2xvY2subG9jaygpOwogICAgIAorICAgIHN1YnNwYWNlKCktPmRpZEJlZ2luU3dl
ZXBpbmdUb0ZyZWVMaXN0KHRoaXMpOworICAgIAogICAgIGlmIChuZWVkc0Rlc3RydWN0aW9uKSB7
CiAgICAgICAgIHN1YnNwYWNlKCktPmZpbmlzaFN3ZWVwKCp0aGlzLCBmcmVlTGlzdCk7CiAgICAg
ICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2Nr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2su
aAkocmV2aXNpb24gMjI1NzI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
QmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTYyLDYgKzE2Miw4IEBAIHB1YmxpYzoKICAgICAg
ICAgc2l6ZV90IG1hcmtDb3VudCgpOwogICAgICAgICBzaXplX3Qgc2l6ZSgpOwogICAgICAgICAK
KyAgICAgICAgYm9vbCBpc0FsbG9jYXRlZCgpOworICAgICAgICAKICAgICAgICAgYm9vbCBpc0xp
dmUoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIEhlYXBWZXJzaW9uIG5ld2x5QWxsb2NhdGVk
VmVyc2lvbiwgYm9vbCBpc01hcmtpbmcsIGNvbnN0IEhlYXBDZWxsKik7CiAgICAgICAgIGlubGlu
ZSBib29sIGlzTGl2ZUNlbGwoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIEhlYXBWZXJzaW9u
IG5ld2x5QWxsb2NhdGVkVmVyc2lvbiwgYm9vbCBpc01hcmtpbmcsIGNvbnN0IHZvaWQqKTsKIApA
QCAtMTczLDYgKzE3NSw3IEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCBpc05ld2x5QWxsb2NhdGVk
KGNvbnN0IHZvaWQqKTsKICAgICAgICAgdm9pZCBzZXROZXdseUFsbG9jYXRlZChjb25zdCB2b2lk
Kik7CiAgICAgICAgIHZvaWQgY2xlYXJOZXdseUFsbG9jYXRlZChjb25zdCB2b2lkKik7CisgICAg
ICAgIGNvbnN0IEJpdG1hcDxhdG9tc1BlckJsb2NrPiYgbmV3bHlBbGxvY2F0ZWQoKSBjb25zdDsK
ICAgICAgICAgCiAgICAgICAgIEhlYXBWZXJzaW9uIG5ld2x5QWxsb2NhdGVkVmVyc2lvbigpIGNv
bnN0IHsgcmV0dXJuIG1fbmV3bHlBbGxvY2F0ZWRWZXJzaW9uOyB9CiAgICAgICAgIApAQCAtMjI3
LDcgKzIzMCw3IEBAIHB1YmxpYzoKICAgICAgICAgc2l6ZV90IG1fYXRvbXNQZXJDZWxsIHsgc3Rk
OjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSB9OwogICAgICAgICBzaXplX3QgbV9lbmRB
dG9tIHsgc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSB9OyAvLyBUaGlzIGlzIGEg
ZnV6enkgZW5kLiBBbHdheXMgdGVzdCBmb3IgPCBtX2VuZEF0b20uCiAgICAgICAgICAgICAKLSAg
ICAgICAgV1RGOjpCaXRtYXA8YXRvbXNQZXJCbG9jaz4gbV9uZXdseUFsbG9jYXRlZDsKKyAgICAg
ICAgQml0bWFwPGF0b21zUGVyQmxvY2s+IG1fbmV3bHlBbGxvY2F0ZWQ7CiAgICAgICAgICAgICAK
ICAgICAgICAgQWxsb2NhdG9yQXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7CiAgICAgICAgIGJvb2wg
bV9pc0ZyZWVMaXN0ZWQgeyBmYWxzZSB9OwpAQCAtMjk0LDYgKzI5Nyw4IEBAIHB1YmxpYzoKICAg
ICBib29sIGlzTWFya2VkUmF3KGNvbnN0IHZvaWQqIHApOwogICAgIEhlYXBWZXJzaW9uIG1hcmtp
bmdWZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXJraW5nVmVyc2lvbjsgfQogICAgIAorICAg
IGNvbnN0IEJpdG1hcDxhdG9tc1BlckJsb2NrPiYgbWFya3MoKSBjb25zdDsKKyAgICAKICAgICBD
b3VudGluZ0xvY2smIGxvY2soKSB7IHJldHVybiBtX2xvY2s7IH0KIAogcHJpdmF0ZToKQEAgLTM0
Niw3ICszNTEsNyBAQCBwcml2YXRlOgogCiAgICAgSGVhcFZlcnNpb24gbV9tYXJraW5nVmVyc2lv
bjsKIAotICAgIFdURjo6Qml0bWFwPGF0b21zUGVyQmxvY2s+IG1fbWFya3M7CisgICAgQml0bWFw
PGF0b21zUGVyQmxvY2s+IG1fbWFya3M7CiB9OwogCiBpbmxpbmUgTWFya2VkQmxvY2s6OkhhbmRs
ZSYgTWFya2VkQmxvY2s6OmhhbmRsZSgpCkBAIC01MzIsNiArNTM3LDExIEBAIGlubGluZSBib29s
IE1hcmtlZEJsb2NrOjp0ZXN0QW5kU2V0TWFya2UKICAgICByZXR1cm4gbV9tYXJrcy5jb25jdXJy
ZW50VGVzdEFuZFNldChhdG9tTnVtYmVyKHApLCBkZXBlbmRlbmN5KTsKIH0KIAoraW5saW5lIGNv
bnN0IEJpdG1hcDxNYXJrZWRCbG9jazo6YXRvbXNQZXJCbG9jaz4gTWFya2VkQmxvY2s6Om1hcmtz
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9tYXJrczsKK30KKwogaW5saW5lIGJvb2wgTWFya2Vk
QmxvY2s6OkhhbmRsZTo6aXNOZXdseUFsbG9jYXRlZChjb25zdCB2b2lkKiBwKQogewogICAgIHJl
dHVybiBtX25ld2x5QWxsb2NhdGVkLmdldChtX2Jsb2NrLT5hdG9tTnVtYmVyKHApKTsKQEAgLTU0
Nyw2ICs1NTcsMTEgQEAgaW5saW5lIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6Y2xlYXJOZQog
ICAgIG1fbmV3bHlBbGxvY2F0ZWQuY2xlYXIobV9ibG9jay0+YXRvbU51bWJlcihwKSk7CiB9CiAK
K2lubGluZSBjb25zdCBCaXRtYXA8TWFya2VkQmxvY2s6OmF0b21zUGVyQmxvY2s+JiBNYXJrZWRC
bG9jazo6SGFuZGxlOjpuZXdseUFsbG9jYXRlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbmV3
bHlBbGxvY2F0ZWQ7Cit9CisKIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjppc0F0b20oY29uc3Qg
dm9pZCogcCkKIHsKICAgICBBU1NFUlQoTWFya2VkQmxvY2s6OmlzQXRvbUFsaWduZWQocCkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2tJbmxpbmVz
LmgJKHJldmlzaW9uIDIyNTcyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZEJsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC05MSw2ICs5MSwxMSBAQCBpbmxpbmUg
Ym9vbCBNYXJrZWRCbG9jazo6bWFya3NDb252ZXlMaXZlCiAgICAgICAgIHx8IE1hcmtlZFNwYWNl
OjpuZXh0VmVyc2lvbihteU1hcmtpbmdWZXJzaW9uKSA9PSBtYXJraW5nVmVyc2lvbjsKIH0KIAor
aW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OkhhbmRsZTo6aXNBbGxvY2F0ZWQoKQoreworICAgIHJl
dHVybiBtX2FsbG9jYXRvci0+aXNBbGxvY2F0ZWQoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzKTsK
K30KKwogQUxXQVlTX0lOTElORSBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzTGl2ZShIZWFw
VmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgSGVhcFZlcnNpb24gbmV3bHlBbGxvY2F0ZWRWZXJzaW9u
LCBib29sIGlzTWFya2luZywgY29uc3QgSGVhcENlbGwqIGNlbGwpCiB7CiAgICAgaWYgKGFsbG9j
YXRvcigpLT5pc0FsbG9jYXRlZChOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMpKQpAQCAtNDM0LDYg
KzQzOSwxMSBAQCBpbmxpbmUgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBEZXN0cnVjCiAgICAg
cmV0dXJuIEJsb2NrSGFzTm9EZXN0cnVjdG9yczsKIH0KIAoraW5saW5lIGJvb2wgTWFya2VkQmxv
Y2s6OkhhbmRsZTo6aXNFbXB0eSgpCit7CisgICAgcmV0dXJuIG1fYWxsb2NhdG9yLT5pc0VtcHR5
KE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcyk7Cit9CisKIGlubGluZSBNYXJrZWRCbG9jazo6SGFu
ZGxlOjpFbXB0eU1vZGUgTWFya2VkQmxvY2s6OkhhbmRsZTo6ZW1wdHlNb2RlKCkKIHsKICAgICAv
LyBJdCdzIG5vdCBvYnZpb3VzLCBidXQgdGhpcyBpcyB0aGUgb25seSB3YXkgdG8ga25vdyBpZiB0
aGUgYmxvY2sgaXMgZW1wdHkuIEl0J3MgdGhlIG9ubHkKQEAgLTQ0MSw3ICs0NTEsNyBAQCBpbmxp
bmUgTWFya2VkQmxvY2s6OkhhbmRsZTo6RW1wdHlNb2RlIE1hCiAgICAgLy8gLSBJdCdzIHRydWUg
d2hlbiB0aGUgYmxvY2sgaXMgZnJlc2hseSBhbGxvY2F0ZWQuCiAgICAgLy8gLSBJdCdzIHRydWUg
aWYgdGhlIGJsb2NrIGhhZCBiZWVuIHN3ZXB0IGluIHRoZSBwYXN0LCBhbGwgZGVzdHJ1Y3RvcnMg
d2VyZSBjYWxsZWQsIGFuZCB0aGF0CiAgICAgLy8gICBzd2VlcCBwcm92ZWQgdGhhdCB0aGUgYmxv
Y2sgaXMgZW1wdHkuCi0gICAgcmV0dXJuIG1fYWxsb2NhdG9yLT5pc0VtcHR5KE5vTG9ja2luZ05l
Y2Vzc2FyeSwgdGhpcykgPyBJc0VtcHR5IDogTm90RW1wdHk7CisgICAgcmV0dXJuIGlzRW1wdHko
KSA/IElzRW1wdHkgOiBOb3RFbXB0eTsKIH0KIAogaW5saW5lIE1hcmtlZEJsb2NrOjpIYW5kbGU6
OlNjcmliYmxlTW9kZSBNYXJrZWRCbG9jazo6SGFuZGxlOjpzY3JpYmJsZU1vZGUoKQpAQCAtNTE2
LDcgKzUyNiw3IEBAIGlubGluZSBJdGVyYXRpb25TdGF0dXMgTWFya2VkQmxvY2s6OkhhbmQKICAg
ICAgICAgaWYgKCFibG9jay5pc01hcmtlZFJhdyhjZWxsKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCi0gICAgICAgIGlmIChmdW5jdG9yKGNlbGwsIGtpbmQpID09IEl0ZXJhdGlvblN0YXR1czo6
RG9uZSkKKyAgICAgICAgaWYgKGZ1bmN0b3IoaSwgY2VsbCwga2luZCkgPT0gSXRlcmF0aW9uU3Rh
dHVzOjpEb25lKQogICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6RG9uZTsKICAg
ICB9CiAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMjU3MjUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
Niw1ICsxMjYsMTcgQEAgUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKQog
ICAgICAgICB9KTsKIH0KIAordm9pZCBTdWJzcGFjZTo6ZGlkUmVzaXplQml0cyhzaXplX3QpCit7
Cit9CisKK3ZvaWQgU3Vic3BhY2U6OmRpZFJlbW92ZUJsb2NrKHNpemVfdCkKK3sKK30KKwordm9p
ZCBTdWJzcGFjZTo6ZGlkQmVnaW5Td2VlcGluZ1RvRnJlZUxpc3QoTWFya2VkQmxvY2s6OkhhbmRs
ZSopCit7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1N1YnNwYWNlLmgJKHJldmlzaW9uIDIyNTcyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTkzLDYgKzkzLDEwIEBAIHB1
YmxpYzoKICAgICAKICAgICBTdWJzcGFjZSogbmV4dFN1YnNwYWNlSW5BbGlnbmVkTWVtb3J5QWxs
b2NhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9uZXh0U3Vic3BhY2VJbkFsaWduZWRNZW1vcnlBbGxv
Y2F0b3I7IH0KICAgICB2b2lkIHNldE5leHRTdWJzcGFjZUluQWxpZ25lZE1lbW9yeUFsbG9jYXRv
cihTdWJzcGFjZSogc3Vic3BhY2UpIHsgbV9uZXh0U3Vic3BhY2VJbkFsaWduZWRNZW1vcnlBbGxv
Y2F0b3IgPSBzdWJzcGFjZTsgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBkaWRSZXNpemVCaXRz
KHNpemVfdCBuZXdTaXplKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVtb3ZlQmxvY2soc2l6ZV90
IGJsb2NrSW5kZXgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRCZWdpblN3ZWVwaW5nVG9GcmVlTGlz
dChNYXJrZWRCbG9jazo6SGFuZGxlKik7CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGluaXRpYWxp
emUoSGVhcENlbGxUeXBlKiwgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciopOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgJKHJldmlzaW9uIDIyNTcy
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3IEBAIHZvaWQgU3Vic3BhY2U6OmZvckVhY2hNYXJrZWRD
ZWxsKGNvbnN0IEYKICAgICBmb3JFYWNoTm90RW1wdHlNYXJrZWRCbG9jaygKICAgICAgICAgWyZd
IChNYXJrZWRCbG9jazo6SGFuZGxlKiBoYW5kbGUpIHsKICAgICAgICAgICAgIGhhbmRsZS0+Zm9y
RWFjaE1hcmtlZENlbGwoCi0gICAgICAgICAgICAgICAgWyZdIChIZWFwQ2VsbCogY2VsbCwgSGVh
cENlbGw6OktpbmQga2luZCkgLT4gSXRlcmF0aW9uU3RhdHVzIHsgCisgICAgICAgICAgICAgICAg
WyZdIChzaXplX3QsIEhlYXBDZWxsKiBjZWxsLCBIZWFwQ2VsbDo6S2luZCBraW5kKSAtPiBJdGVy
YXRpb25TdGF0dXMgewogICAgICAgICAgICAgICAgICAgICBmdW5jKGNlbGwsIGtpbmQpOwogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKICAgICAg
ICAgICAgICAgICB9KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVy
cmVkU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbmZlcnJlZFN0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDIyNTcyNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNjQgKzI3LDE3IEBACiAjaW5jbHVkZSAiSW5mZXJyZWRTdHJ1Y3R1cmUuaCIKIAog
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5o
PgogCiBuYW1lc3BhY2UgSlNDIHsKIAotY29uc3QgQ2xhc3NJbmZvIEluZmVycmVkU3RydWN0dXJl
OjpzX2luZm8gPSB7ICJJbmZlcnJlZFN0cnVjdHVyZSIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxw
dHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSW5mZXJyZWRTdHJ1Y3R1cmUpIH07CitXVEZfTUFLRV9J
U09fQUxMT0NBVEVEX0lNUEwoSW5mZXJyZWRTdHJ1Y3R1cmUpOwogCi1JbmZlcnJlZFN0cnVjdHVy
ZSogSW5mZXJyZWRTdHJ1Y3R1cmU6OmNyZWF0ZShWTSYgdm0sIEdDRGVmZXJyYWxDb250ZXh0JiBk
ZWZlcnJhbENvbnRleHQsIEluZmVycmVkVHlwZSogcGFyZW50LCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKK0luZmVycmVkU3RydWN0dXJlOjpJbmZlcnJlZFN0cnVjdHVyZShWTSYsIEluZmVycmVkVHlw
ZSogcGFyZW50LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IHBhcmVudCh2bSwgdGhpcywg
cGFyZW50KQorICAgICwgc3RydWN0dXJlKHZtLCB0aGlzLCBzdHJ1Y3R1cmUpCiB7Ci0gICAgSW5m
ZXJyZWRTdHJ1Y3R1cmUqIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEluZmVy
cmVkU3RydWN0dXJlPih2bS5oZWFwLCAmZGVmZXJyYWxDb250ZXh0KSkgSW5mZXJyZWRTdHJ1Y3R1
cmUodm0sIHBhcmVudCwgc3RydWN0dXJlKTsKLSAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZt
LCBzdHJ1Y3R1cmUpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgSW5mZXJyZWRTdHJ1
Y3R1cmU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQotewotICAgIEluZmVycmVkU3RydWN0dXJlKiBp
bmZlcnJlZFN0cnVjdHVyZSA9IHN0YXRpY19jYXN0PEluZmVycmVkU3RydWN0dXJlKj4oY2VsbCk7
Ci0gICAgaW5mZXJyZWRTdHJ1Y3R1cmUtPkluZmVycmVkU3RydWN0dXJlOjp+SW5mZXJyZWRTdHJ1
Y3R1cmUoKTsKLX0KLQotU3RydWN0dXJlKiBJbmZlcnJlZFN0cnVjdHVyZTo6Y3JlYXRlU3RydWN0
dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5
cGUpCi17Ci0gICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLX0K
LQotdm9pZCBJbmZlcnJlZFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIEluZmVycmVkU3RydWN0dXJlKiBpbmZlcnJlZFN0
cnVjdHVyZSA9IGpzQ2FzdDxJbmZlcnJlZFN0cnVjdHVyZSo+KGNlbGwpOwotICAgIAotICAgIHZp
c2l0b3IuYXBwZW5kKGluZmVycmVkU3RydWN0dXJlLT5tX3BhcmVudCk7Ci19Ci0KLXZvaWQgSW5m
ZXJyZWRTdHJ1Y3R1cmU6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJikKLXsKLSAgICBBU1NF
UlQoSGVhcDo6aXNNYXJrZWQobV9wYXJlbnQuZ2V0KCkpKTsKLSAgICAKLSAgICAvLyBNb25vdG9u
aWNpdHkgZW5zdXJlcyB0aGF0IHdlIHNob3VsZG4ndCBzZWUgYSBuZXcgc3RydWN0dXJlIHRoYXQg
aXMgZGlmZmVyZW50IGZyb20gdXMsIGJ1dCB3ZQotICAgIC8vIGNvdWxkIGhhdmUgYmVlbiBudWxs
ZWQuIFdlIG9ubHkgcmVseSBvbiBpdCBiZWluZyB0aGUgbnVsbCBjYXNlIG9ubHkgaW4gZGVidWcu
Ci0gICAgaWYgKHRoaXMgPT0gbV9wYXJlbnQtPm1fc3RydWN0dXJlLmdldCgpKSB7Ci0gICAgICAg
IGlmICghSGVhcDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpKQotICAgICAgICAgICAgbV9w
YXJlbnQtPnJlbW92ZVN0cnVjdHVyZSgpOwotICAgIH0gZWxzZQotICAgICAgICBBU1NFUlQoIW1f
cGFyZW50LT5tX3N0cnVjdHVyZSk7Ci0gICAgCi0gICAgLy8gV2UnbGwgZ2V0IGRlbGV0ZWQgb24g
dGhlIG5leHQgR0MuIFRoYXQncyBhIGxpdHRsZSB3ZWlyZCwgYnV0IG5vdCBoYXJtZnVsLCBzaW5j
ZSBpdCBvbmx5IGhhcHBlbnMKLSAgICAvLyB3aGVuIHRoZSBJbmZlcnJlZFR5cGUgdGhhdCB3ZSB3
ZXJlIHBhaXJlZCB0byB3b3VsZCBoYXZlIHN1cnZpdmVkLiBJdCBqdXN0IG1lYW5zIGEgdGlueSBt
aXNzZWQKLSAgICAvLyBvcHBvcnR1bml0eSBmb3IgaGVhcCBzaXplIHJlZHVjdGlvbi4KLX0KLQot
SW5mZXJyZWRTdHJ1Y3R1cmU6OkluZmVycmVkU3RydWN0dXJlKFZNJiB2bSwgSW5mZXJyZWRUeXBl
KiBwYXJlbnQsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIDogQmFzZSh2bSwgdm0uaW5mZXJy
ZWRTdHJ1Y3R1cmVTdHJ1Y3R1cmUuZ2V0KCkpCi0gICAgLCBtX3BhcmVudCh2bSwgdGhpcywgcGFy
ZW50KQotICAgICwgbV9zdHJ1Y3R1cmUodm0sIHRoaXMsIHN0cnVjdHVyZSkKLXsKLX0KLQotdm9p
ZCBJbmZlcnJlZFN0cnVjdHVyZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKLXsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgc3RydWN0dXJl
LT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludCgmbV93YXRjaHBvaW50KTsKKyAgICBzdHJ1Y3R1cmUt
PmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KCZ3YXRjaHBvaW50KTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFN0cnVj
dHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVy
cmVkU3RydWN0dXJlLmgJKHJldmlzaW9uIDIyNTcyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0luZmVycmVkU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDUxICsy
NiwyMSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJJbmZlcnJlZFN0cnVjdHVyZVdhdGNo
cG9pbnQuaCIKLSNpbmNsdWRlICJKU0NlbGwuaCIKLSNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUg
PHd0Zi9Jc29NYWxsb2MuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEluZmVycmVkVHlw
ZTsKIAotY2xhc3MgSW5mZXJyZWRTdHJ1Y3R1cmUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKK2Ns
YXNzIEluZmVycmVkU3RydWN0dXJlIGZpbmFsIHsKKyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVE
KEluZmVycmVkU3RydWN0dXJlKTsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwot
ICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlPgotICAgIHN0YXRpYyBJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQotICAgIHsKLSAgICAgICAgcmV0dXJuICZ2bS5pbmZl
cnJlZFN0cnVjdHVyZVNwYWNlOwotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgSW5mZXJyZWRTdHJ1
Y3R1cmUqIGNyZWF0ZShWTSYsIEdDRGVmZXJyYWxDb250ZXh0JiwgSW5mZXJyZWRUeXBlKiBwYXJl
bnQsIFN0cnVjdHVyZSopOwotICAgIAotICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1
Y3Rpb24gPSB0cnVlOwotICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0gICAgCi0g
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gU3RydWN0dXJlSXNJbW1v
cnRhbCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwotCi0gICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7Ci0g
ICAgCi0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OwotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIAotICAgIEluZmVycmVkVHlwZSogcGFyZW50KCkg
Y29uc3QgeyByZXR1cm4gbV9wYXJlbnQuZ2V0KCk7IH0KLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlLmdldCgpOyB9Ci0gICAgCi0gICAgdm9pZCBm
aW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYpOwotCi1wcml2YXRlOgogICAgIEluZmVycmVkU3Ry
dWN0dXJlKFZNJiwgSW5mZXJyZWRUeXBlKiBwYXJlbnQsIFN0cnVjdHVyZSopOworCisgICAgV3Jp
dGVCYXJyaWVyPEluZmVycmVkVHlwZT4gcGFyZW50OworICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1
cmU+IHN0cnVjdHVyZTsKICAgICAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgU3RydWN0
dXJlKik7Ci0gICAgCi0gICAgV3JpdGVCYXJyaWVyPEluZmVycmVkVHlwZT4gbV9wYXJlbnQ7Ci0g
ICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7Ci0gICAgCi0gICAgZnJpZW5k
IGNsYXNzIEluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludDsKLSAgICBJbmZlcnJlZFN0cnVjdHVy
ZVdhdGNocG9pbnQgbV93YXRjaHBvaW50OworICAgIEluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2lu
dCB3YXRjaHBvaW50OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkU3RydWN0dXJl
V2F0Y2hwb2ludC5jcHAJKHJldmlzaW9uIDIyNTcyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0luZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDEyICszNCwxNCBAQCB2b2lkIEluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludDo6Zmly
ZUluCiB7CiAgICAgSW5mZXJyZWRTdHJ1Y3R1cmUqIGluZmVycmVkU3RydWN0dXJlID0KICAgICAg
ICAgYml0d2lzZV9jYXN0PEluZmVycmVkU3RydWN0dXJlKj4oCi0gICAgICAgICAgICBiaXR3aXNl
X2Nhc3Q8Y2hhcio+KHRoaXMpIC0gT0JKRUNUX09GRlNFVE9GKEluZmVycmVkU3RydWN0dXJlLCBt
X3dhdGNocG9pbnQpKTsKKyAgICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgLSBP
QkpFQ1RfT0ZGU0VUT0YoSW5mZXJyZWRTdHJ1Y3R1cmUsIHdhdGNocG9pbnQpKTsKIAotICAgIGlm
ICghaW5mZXJyZWRTdHJ1Y3R1cmUtPmlzTGl2ZSgpKQorICAgIEluZmVycmVkVHlwZSBpbmZlcnJl
ZFR5cGUgPSBpbmZlcnJlZFN0cnVjdHVyZS0+cGFyZW50LmdldCgpOworICAgIAorICAgIGlmICgh
aW5mZXJyZWRUeXBlLT5pc0xpdmUoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGluZmVy
cmVkU3RydWN0dXJlLT5tX3BhcmVudC0+cmVtb3ZlU3RydWN0dXJlKCk7CisgICAgaW5mZXJyZWRU
eXBlLT5yZW1vdmVTdHJ1Y3R1cmUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZS5jcHAJKHJldmlz
aW9uIDIyNTcyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlw
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2OSwxOCArNDY5LDIwIEBAIGJvb2wgSW5mZXJyZWRU
eXBlOjpzZXQoR0NEZWZlcnJhbENvbnRleHQKICAgICAgICAgc2hvdWxkRmlyZVdhdGNocG9pbnRT
ZXQgPSB0cnVlOwogICAgIH0KIAotICAgIC8vIFJlbW92ZSB0aGUgb2xkIEluZmVycmVkU3RydWN0
dXJlIG9iamVjdCBpZiB3ZSBubyBsb25nZXIgbmVlZCBpdC4KLSAgICBpZiAoIW5ld0Rlc2NyaXB0
b3Iuc3RydWN0dXJlKCkpCi0gICAgICAgIG1fc3RydWN0dXJlLmNsZWFyKCk7Ci0KLSAgICAvLyBB
ZGQgYSBuZXcgSW5mZXJyZWRTdHJ1Y3R1cmUgb2JqZWN0IGlmIHdlIG5lZWQgb25lIG5vdy4KLSAg
ICBpZiAobmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSkgeworICAgIGlmICghbmV3RGVzY3JpcHRv
ci5zdHJ1Y3R1cmUoKSkgeworICAgICAgICAvLyBSZW1vdmUgdGhlIG9sZCBJbmZlcnJlZFN0cnVj
dHVyZSBvYmplY3QgaWYgd2Ugbm8gbG9uZ2VyIG5lZWQgaXQuCisgICAgICAgIGlmIChtX3N0cnVj
dHVyZSkgeworICAgICAgICAgICAgdm0uaW5mZXJyZWRUeXBlc1dpdGhGaW5hbGl6ZXJzLnJlbW92
ZSh0aGlzKTsKKyAgICAgICAgICAgIG1fc3RydWN0dXJlLmNsZWFyKCk7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgICAvLyBBZGQgYSBuZXcgSW5mZXJyZWRTdHJ1Y3R1cmUgb2JqZWN0
IGlmIHdlIG5lZWQgb25lIG5vdy4KICAgICAgICAgaWYgKG1fc3RydWN0dXJlKSB7CiAgICAgICAg
ICAgICAvLyBXZSBzaG91bGQgYWdyZWUgb24gdGhlIHN0cnVjdHVyZXMgaWYgd2UgZ2V0IGhlcmUu
Ci0gICAgICAgICAgICBBU1NFUlQobmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSA9PSBtX3N0cnVj
dHVyZS0+c3RydWN0dXJlKCkpOworICAgICAgICAgICAgQVNTRVJUKG5ld0Rlc2NyaXB0b3Iuc3Ry
dWN0dXJlKCkgPT0gbV9zdHJ1Y3R1cmUtPnN0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBhdXRvKiBzdHJ1Y3R1cmUgPSBJbmZlcnJlZFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBkZWZlcnJhbENvbnRleHQsIHRoaXMsIG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkp
OwotICAgICAgICAgICAgbV9zdHJ1Y3R1cmUuc2V0KHZtLCB0aGlzLCBzdHJ1Y3R1cmUpOworICAg
ICAgICAgICAgdm0uaW5mZXJyZWRUeXBlc1dpdGhGaW5hbGl6ZXJzLmFkZCh0aGlzKTsKKyAgICAg
ICAgICAgIG1fc3RydWN0dXJlID0gc3RkOjptYWtlX3VuaXF1ZTxJbmZlcnJlZFN0cnVjdHVyZT4o
dm0sIHRoaXMsIG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkpOwogICAgICAgICB9CiAgICAgfQog
CkBAIC01MTcsNiArNTE5LDE5IEBAIHZvaWQgSW5mZXJyZWRUeXBlOjpyZW1vdmVTdHJ1Y3R1cmUo
KQogICAgIG1fd2F0Y2hwb2ludFNldC5maXJlQWxsKHZtLCBkZXRhaWwpOwogfQogCit2b2lkIElu
ZmVycmVkVHlwZTo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKQoreworICAgIEFTU0VSVChIZWFw
Ojppc01hcmtlZCh0aGlzKSk7CisgICAgCisgICAgLy8gV2UgZWFnZXJseSBtYWludGFpbiB0aGUg
Yml0cyB0aGF0IGNvbnRyb2wgd2hldGhlciBvciBub3Qgd2UgbmVlZCBmaW5hbGl6YXRpb24uCisg
ICAgUkVMRUFTRV9BU1NFUlQobV9zdHJ1Y3R1cmUpOworICAgIAorICAgIGlmIChIZWFwOjppc01h
cmtlZChtX3N0cnVjdHVyZS0+c3RydWN0dXJlLmdldCgpKSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIHJlbW92ZVN0cnVjdHVyZSgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogbmFt
ZXNwYWNlIFdURiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJl
ZFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZl
cnJlZFR5cGUuaAkocmV2aXNpb24gMjI1NzI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW5mZXJyZWRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4NSw3ICsxODUsNyBAQCBw
dWJsaWM6CiAKICAgICBEZXNjcmlwdG9yIGRlc2NyaXB0b3JNYWluVGhyZWFkKCkgY29uc3QKICAg
ICB7Ci0gICAgICAgIHJldHVybiBEZXNjcmlwdG9yKG1fa2luZCwgbV9zdHJ1Y3R1cmUgPyBtX3N0
cnVjdHVyZS0+c3RydWN0dXJlKCkgOiBudWxscHRyKTsKKyAgICAgICAgcmV0dXJuIERlc2NyaXB0
b3IobV9raW5kLCBtX3N0cnVjdHVyZSA/IG1fc3RydWN0dXJlLT5zdHJ1Y3R1cmUuZ2V0KCkgOiBu
dWxscHRyKTsKICAgICB9CiAgICAgCiAgICAgRGVzY3JpcHRvciBkZXNjcmlwdG9yKGNvbnN0IENv
bmN1cnJlbnRKU0xvY2tlciYpIGNvbnN0CkBAIC0yNTIsNyArMjUyLDggQEAgcHJpdmF0ZToKICAg
ICAKICAgICBLaW5kIG1fa2luZCB7IEJvdHRvbSB9OwogCi0gICAgV3JpdGVCYXJyaWVyPEluZmVy
cmVkU3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUg
UG9pc29uZWQuCisgICAgc3RkOjp1bmlxdWVfcHRyPEluZmVycmVkU3RydWN0dXJlPiBtX3N0cnVj
dHVyZTsKIAogICAgIC8vIE5PVEU6IElmIHRoaXMgaXMgYmVpbmcgd2F0Y2hlZCwgd2UgdHJhbnNm
b3JtIHRvIFRvcCBiZWNhdXNlIHRoYXQgaW1wbGllcyB0aGF0IGl0IHdvdWxkbid0IGJlCiAgICAg
Ly8gcHJvZml0YWJsZSB0byB3YXRjaCBpdCBhZ2Fpbi4gQWxzbywgdGhpcyBzZXQgaXMgaW5pdGlh
bGl6ZWQgY2xlYXIsIGFuZCBpcyBuZXZlciBleHBvc2VkIHRvIHRoZSBERkcKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMjI1NzI1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMzQwLDExICszNDAsMTIg
QEAgcHVibGljOgogICAgIElzb1N1YnNwYWNlIGRpcmVjdEV2YWxFeGVjdXRhYmxlU3BhY2U7CiAg
ICAgSXNvU3Vic3BhY2UgZnVuY3Rpb25FeGVjdXRhYmxlU3BhY2U7CiAgICAgSXNvU3Vic3BhY2Ug
aW5kaXJlY3RFdmFsRXhlY3V0YWJsZVNwYWNlOwotICAgIElzb1N1YnNwYWNlIGluZmVycmVkU3Ry
dWN0dXJlU3BhY2U7CiAgICAgSXNvU3Vic3BhY2UgaW5mZXJyZWRUeXBlU3BhY2U7CiAgICAgSXNv
U3Vic3BhY2UgbW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGVTcGFjZTsKICAgICBJc29TdWJzcGFjZSBu
YXRpdmVFeGVjdXRhYmxlU3BhY2U7CiAgICAgSXNvU3Vic3BhY2UgcHJvZ3JhbUV4ZWN1dGFibGVT
cGFjZTsKKyAgICAKKyAgICBJc29DZWxsU2V0IGluZmVycmVkVHlwZXNXaXRoRmluYWxpemVyczsK
IAogICAgIFZNVHlwZSB2bVR5cGU7CiAgICAgQ2xpZW50RGF0YSogY2xpZW50RGF0YTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328943</attachid>
            <date>2017-12-10 18:59:05 -0800</date>
            <delta_ts>2017-12-11 12:15:30 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>54410</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjU3MjUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDc0LDYgKzQ3NCw5IEBACiAJCTBGQjE3NjYzMTk2QjhG
OUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjE3NjVGMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFs
dWUuaCAqLzsgfTsKIAkJMEZCMzg3OEUxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpckJsb2NrV29ya2xp
c3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjM4
NzhCMUJGQkM0NEQwMEUzQUIxRSAvKiBBaXJCbG9ja1dvcmtsaXN0LmggKi87IH07CiAJCTBGQjM4
NzkwMUJGQkM0NEQwMEUzQUIxRSAvKiBBaXJPcHRpbWl6ZUJsb2NrT3JkZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjM4NzhEMUJGQkM0NEQwMEUz
QUIxRSAvKiBBaXJPcHRpbWl6ZUJsb2NrT3JkZXIuaCAqLzsgfTsKKwkJMEZCNDY3N0YxRkREQTZF
OTAwM0ZDQjA5IC8qIEF0b21JbmRpY2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkI0Njc3RTFGRERBNkU1MDAzRkNCMDkgLyogQXRvbUluZGljZXMu
aCAqLzsgfTsKKwkJMEZCNDY3ODAxRkREQTZGMTAwM0ZDQjA5IC8qIElzb0NlbGxTZXQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjQ2NzdEMUZEREE2
RDkwMDNGQ0IwOSAvKiBJc29DZWxsU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCNDY3ODExRkREQTZGNzAwM0ZDQjA5IC8qIElzb0NlbGxT
ZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkI0Njc3QjFGRERBNkQ4MDAzRkNCMDkgLyogSXNvQ2VsbFNldElubGluZXMuaCAqLzsgfTsK
IAkJMEZCNDc2N0UxRDk5QUVBOTAwOEVBNkNCIC8qIEdDRGVmZXJyYWxDb250ZXh0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0NzY3QzFEOTlBRUE3
MDA4RUE2Q0IgLyogR0NEZWZlcnJhbENvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkI0NzY3RjFEOTlBRUFEMDA4RUE2Q0IgLyogR0NE
ZWZlcnJhbENvbnRleHRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkI0NzY3RDFEOTlBRUE3MDA4RUE2Q0IgLyogR0NEZWZlcnJhbENvbnRl
eHRJbmxpbmVzLmggKi87IH07CiAJCTBGQjRGQjc0MUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5
U2xvd1BhdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGQjRGQjcxMUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1BhdGguaCAqLzsgfTsKQEAg
LTI1NjIsNiArMjU2NSwxMCBAQAogCQkwRkIzODc5MTFCRkQzMUExMDBFM0FCMUUgLyogRlRMQ29t
cGlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExDb21waWxl
LmNwcDsgcGF0aCA9IGZ0bC9GVExDb21waWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZCNDE1ODMxRDc4Rjk4MjAwREY4RDA5IC8qIEFycmF5Q29udmVudGlvbnMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXJyYXlDb252ZW50aW9ucy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjQzOEEyMTkyNzBCMUQwMEUxRkJDOSAv
KiBTdHJ1Y3R1cmVTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U3RydWN0dXJlU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCNDY3N0Ix
RkREQTZEODAwM0ZDQjA5IC8qIElzb0NlbGxTZXRJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IElzb0NlbGxTZXRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGQjQ2NzdDMUZEREE2RDkwMDNGQ0IwOSAvKiBJc29DZWxsU2V0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElzb0NlbGxTZXQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkI0Njc3RDFGRERBNkQ5MDAzRkNCMDkgLyogSXNvQ2Vs
bFNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJc29DZWxsU2V0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjQ2NzdFMUZEREE2RTUwMDNGQ0IwOSAvKiBB
dG9tSW5kaWNlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdG9tSW5kaWNl
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0NzY3QzFEOTlBRUE3MDA4RUE2
Q0IgLyogR0NEZWZlcnJhbENvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gR0NEZWZlcnJhbENvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZC
NDc2N0QxRDk5QUVBNzAwOEVBNkNCIC8qIEdDRGVmZXJyYWxDb250ZXh0SW5saW5lcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ0RlZmVycmFsQ29udGV4dElubGluZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNEI1MTAxNkIzQTk2NDAwM0Y2OTZCIC8q
IERGR01pbmlmaWVkSUQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTWlu
aWZpZWRJRC5oOyBwYXRoID0gZGZnL0RGR01pbmlmaWVkSUQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTU1MjUsNiArNTUzMiw3IEBACiAJCQkJMEY5NjMwMzUxRDQxOTJDMzAwNTYw
OUQ5IC8qIEFsbG9jYXRvckF0dHJpYnV0ZXMuY3BwICovLAogCQkJCTBGOTYzMDM2MUQ0MTkyQzMw
MDU2MDlEOSAvKiBBbGxvY2F0b3JBdHRyaWJ1dGVzLmggKi8sCiAJCQkJMEYzMENCNUQxRkNFNDZC
NDAwNEI1MzIzIC8qIEFsbG9jYXRvckZvck1vZGUuaCAqLywKKwkJCQkwRkI0Njc3RTFGRERBNkU1
MDAzRkNCMDkgLyogQXRvbUluZGljZXMuaCAqLywKIAkJCQkwRkRFODdGODFERkQwQzZEMDA2NEMz
OTAgLyogQ2VsbENvbnRhaW5lci5jcHAgKi8sCiAJCQkJMEYwNzBBNDIxRDU0M0E4OTAwNkU3MjMy
IC8qIENlbGxDb250YWluZXIuaCAqLywKIAkJCQkwRjA3MEE0MzFENTQzQTg5MDA2RTcyMzIgLyog
Q2VsbENvbnRhaW5lcklubGluZXMuaCAqLywKQEAgLTU2MTEsNiArNTYxOSw5IEBACiAJCQkJQzI1
RjhCQ0MxNTc1NDRBOTAwMjQ1QjcxIC8qIEluY3JlbWVudGFsU3dlZXBlci5oICovLAogCQkJCTBG
RENFMTJGMUZCMTFEOUQwMDZGMzkwMSAvKiBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcCAq
LywKIAkJCQkwRkRDRTEzMDFGQjExRDlEMDA2RjM5MDEgLyogSXNvQWxpZ25lZE1lbW9yeUFsbG9j
YXRvci5oICovLAorCQkJCTBGQjQ2NzdDMUZEREE2RDkwMDNGQ0IwOSAvKiBJc29DZWxsU2V0LmNw
cCAqLywKKwkJCQkwRkI0Njc3RDFGRERBNkQ5MDAzRkNCMDkgLyogSXNvQ2VsbFNldC5oICovLAor
CQkJCTBGQjQ2NzdCMUZEREE2RDgwMDNGQ0IwOSAvKiBJc29DZWxsU2V0SW5saW5lcy5oICovLAog
CQkJCTBGRENFMTJDMUZBRkI0REUwMDZGMzkwMSAvKiBJc29TdWJzcGFjZS5jcHAgKi8sCiAJCQkJ
MEZEQ0UxMkIxRkFGQjRERTAwNkYzOTAxIC8qIElzb1N1YnNwYWNlLmggKi8sCiAJCQkJMEY3NjZE
MjkxNUE4Q0MzNDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmNwcCAqLywKQEAgLTc5OTcs
NiArODAwOCw3IEBACiAJCQkJMEZFQzg1NzIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxv
Y2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkM2M0JDMUU2MzQ0MEMwMEMxMzgzOSAvKiBBaXJC
bG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMzg3OEUxQkZCQzQ0RDAw
RTNBQjFFIC8qIEFpckJsb2NrV29ya2xpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjQ2Nzgx
MUZEREE2RjcwMDNGQ0IwOSAvKiBJc29DZWxsU2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY3OUM3Q0ExRTc0QzkzQjAwRUIzNEQxIC8qIEFpckJyZWFrQ3JpdGljYWxFZGdlcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY2MTgzMkExQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxsaW5n
Q29udmVudGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1NzQxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckNDYWxsU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCkBAIC04OTczLDYgKzg5ODUsNyBA
QAogCQkJCUFEMkZDQkU1MURCNThEQUQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCUFERTgwMjk5MUUwOEYxREUwMDU4REU3OCAvKiBKU1dlYkFz
c2VtYmx5TGlua0Vycm9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JFNzFEQjU4REFEMDBC
M0U3MzYgLyogSlNXZWJBc3NlbWJseU1lbW9yeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCNDY3
N0YxRkREQTZFOTAwM0ZDQjA5IC8qIEF0b21JbmRpY2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
RDJGQ0MwNTFEQjU4REFEMDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseU1vZHVsZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQUQyRkNCRTkxREI1OERBRDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlSdW50
aW1lRXJyb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQkVCMURCNThEQUQwMEIzRTczNiAv
KiBKU1dlYkFzc2VtYmx5VGFibGUuaCBpbiBIZWFkZXJzICovLApAQCAtOTI1OSw2ICs5MjcyLDcg
QEAKIAkJCQlDMjBCQTkyRDE2QkIxQzE1MDBCM0FFQTIgLyogU3RydWN0dXJlUmFyZURhdGFJbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkzMzJBNTE0Q0E3REREMDA4NUYzQzYgLyogU3Ry
dWN0dXJlU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc2NkQzOTE1QUU0QTFGMDA4RjM2M0Ug
LyogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZCNDY3ODAxRkREQTZGMTAwM0ZDQjA5IC8qIElzb0NlbGxTZXQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDQ0YwRDA4MEVGMEFBQjkwMDQxM0M4RiAvKiBTdHJ1Y3R1cmVTdHViSW5mby5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkM5MDQxNDgwRUI5MjUwOTAwRkUyNkZBIC8qIFN0cnVjdHVyZVRyYW5z
aXRpb25UYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3REYxMzcxRTI5NzBFMTAwOTU5NTFC
IC8qIFN1YnNwYWNlLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0F0b21JbmRpY2VzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQXRvbUluZGljZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9BdG9tSW5kaWNlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsKKworc3RydWN0
IEF0b21JbmRpY2VzIHsKKyAgICBBdG9tSW5kaWNlcygpIHsgfQorICAgIAorICAgIEF0b21JbmRp
Y2VzKEhlYXBDZWxsKiBjZWxsKQorICAgICAgICA6IGJsb2NrKE1hcmtlZEJsb2NrOjpibG9ja0Zv
cihjZWxsKSkKKyAgICAgICAgLCBibG9ja0luZGV4KGJsb2NrLT5oYW5kbGUoKS5pbmRleCgpKQor
ICAgICAgICAsIGF0b21OdW1iZXIoYmxvY2stPmF0b21OdW1iZXIoY2VsbCkpCisgICAgeworICAg
IH0KKyAgICAKKyAgICBNYXJrZWRCbG9jayogYmxvY2s7CisgICAgc2l6ZV90IGJsb2NrSW5kZXg7
CisgICAgc2l6ZV90IGF0b21OdW1iZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIyNTcyNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTIs
MTAgKzU1MiwxMCBAQCB2b2lkIEhlYXA6OmFkZFJlZmVyZW5jZShKU0NlbGwqIGNlbGwsIEFyCiAg
ICAgfQogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZT4KLXZvaWQgSGVhcDo6ZmluYWxp
emVVbmNvbmRpdGlvbmFsRmluYWxpemVycyhTdWJzcGFjZSYgc3Vic3BhY2UpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBDZWxsU2V0LCB0eXBlbmFtZSBDZWxsVHlwZT4KK3ZvaWQgSGVhcDo6ZmluYWxpemVV
bmNvbmRpdGlvbmFsRmluYWxpemVycyhDZWxsU2V0JiBjZWxsU2V0KQogewotICAgIHN1YnNwYWNl
LmZvckVhY2hNYXJrZWRDZWxsKAorICAgIGNlbGxTZXQuZm9yRWFjaE1hcmtlZENlbGwoCiAgICAg
ICAgIFsmXSAoSGVhcENlbGwqIGNlbGwsIEhlYXBDZWxsOjpLaW5kKSB7CiAgICAgICAgICAgICBz
dGF0aWNfY2FzdDxDZWxsVHlwZSo+KGNlbGwpLT5maW5hbGl6ZVVuY29uZGl0aW9uYWxseSgqdm0o
KSk7CiAgICAgICAgIH0pOwpAQCAtNTYzLDcgKzU2Myw3IEBAIHZvaWQgSGVhcDo6ZmluYWxpemVV
bmNvbmRpdGlvbmFsRmluYWxpemUKIAogdm9pZCBIZWFwOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxG
aW5hbGl6ZXJzKCkKIHsKLSAgICBmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzPEluZmVy
cmVkU3RydWN0dXJlPih2bSgpLT5pbmZlcnJlZFN0cnVjdHVyZVNwYWNlKTsKKyAgICBmaW5hbGl6
ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzPEluZmVycmVkVHlwZT4odm0oKS0+aW5mZXJyZWRUeXBl
c1dpdGhGaW5hbGl6ZXJzKTsKICAgICAKICAgICB3aGlsZSAobV91bmNvbmRpdGlvbmFsRmluYWxp
emVycy5oYXNOZXh0KCkpIHsKICAgICAgICAgVW5jb25kaXRpb25hbEZpbmFsaXplciogZmluYWxp
emVyID0gbV91bmNvbmRpdGlvbmFsRmluYWxpemVycy5yZW1vdmVOZXh0KCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyMjU3MjUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5Niw4ICs0OTYsOCBAQCBw
cml2YXRlOgogICAgIHZvaWQgbm90aWZ5SW5jcmVtZW50YWxTd2VlcGVyKCk7CiAgICAgdm9pZCBo
YXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBl
PgotICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycyhTdWJzcGFjZSYpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxTZXQsIHR5cGVuYW1lIENlbGxUeXBlPgorICAgIHZv
aWQgZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycyhDZWxsU2V0Jik7CiAgICAgCiAgICAg
dm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKCk7CiAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmNwcAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJc29DZWxsU2V0LmgiCisKKyNp
bmNsdWRlICJNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitJ
c29DZWxsU2V0OjpJc29DZWxsU2V0KElzb1N1YnNwYWNlJiBzdWJzcGFjZSkKKyAgICA6IG1fc3Vi
c3BhY2Uoc3Vic3BhY2UpCit7CisgICAgc2l6ZV90IHNpemUgPSBzdWJzcGFjZS5tX2FsbG9jYXRy
Lm1fYmxvY2tzLnNpemUoKTsKKyAgICBtX2Jsb2Nrc1dpdGhCaXRzLmdyb3coc2l6ZSk7CisgICAg
bV9iaXRzLmdyb3coc2l6ZSk7CisgICAgc3Vic3BhY2UubV9jZWxsU2V0cy5hcHBlbmQodGhpcyk7
Cit9CisKK0lzb0NlbGxTZXQ6On5Jc29DZWxsU2V0KCkKK3sKKyAgICBpZiAoaXNPbkxpc3QoKSkK
KyAgICAgICAgcmVtb3ZlKCk7Cit9CisKK05FVkVSX0lOTElORSBCaXRtYXA8TWFya2VkQmxjb2s6
OmF0b21zUGVyQmxvY2s+KiBJc29DZWxsU2V0OjphZGRTbG93KHNpemVfdCBibG9ja0luZGV4KQor
eworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9zdWJzcGFjZS5tX2FsbG9jYXRvci5tX2Jp
dHZlY3RvckxvY2spOworICAgIGF1dG8mIGJpdHNQdHJSZWYgPSBtX2JpdHNbYmxvY2tJbmRleF07
CisgICAgYXV0byogYml0cyA9IGJpdHNQdHJSZWYuZ2V0KCk7CisgICAgaWYgKCFiaXRzKSB7Cisg
ICAgICAgIG1fYmxvY2tzV2l0aEJpdHNbYmxvY2tJbmRleF0gPSB0cnVlOworICAgICAgICBiaXRz
UHRyUmVmID0gc3RkOjptYWtlX3VuaXF1ZTxCaXRtYXA8TWFya2VkQmxvY2s6OmF0b21zUGVyQmxv
Y2s+PigpOworICAgICAgICBiaXRzID0gYml0c1B0clJlZi5nZXQoKTsKKyAgICB9CisgICAgcmV0
dXJuIGJpdHM7Cit9CisKK3ZvaWQgSXNvQ2VsbFNldDo6ZGlkUmVzaXplQml0cyhzaXplX3QgbmV3
U2l6ZSkKK3sKKyAgICBtX2Jsb2Nrc1dpdGhCaXRzLnJlc2l6ZShuZXdTaXplKTsKKyAgICBtX2Jp
dHMuZ3JvdyhuZXdTaXplKTsKK30KKwordm9pZCBJc29DZWxsU2V0OjpkaWRSZW1vdmVCbG9jayhz
aXplX3QgYmxvY2tJbmRleCkKK3sKKyAgICBtX2Jsb2Nrc1dpdGhCaXRzW2Jsb2NrSW5kZXhdID0g
ZmFsc2U7CisgICAgbV9iaXRzW2Jsb2NrSW5kZXhdID0gbnVsbHB0cjsKK30KKwordm9pZCBJc29D
ZWxsU2V0Ojpzd2VlcFRvRnJlZUxpc3QoTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2spCit7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoIWJsb2NrLT5pc0FsbG9jYXRlZCgpKTsKKyAgICAKKyAgICBpZiAo
IW1fYmxvY2tzV2l0aEJpdHNbYmxvY2stPmluZGV4KCldKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgaWYgKGJsb2NrLT5oYXNBbnlOZXdseUFsbG9jYXRlZCgpKSB7CisgICAgICAgIG1fYml0
c1tibG9jay0+aW5kZXgoKV0tPmZpbHRlcihibG9jay0+bmV3bHlBbGxvY2F0ZWQoKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYmxvY2stPmlzRW1wdHkoKSkgeworICAgICAg
ICBtX2Jsb2Nrc1dpdGhCaXRzW2Jsb2NrLT5pbmRleCgpXSA9IGZhbHNlOworICAgICAgICBtX2Jp
dHNbYmxvY2stPmluZGV4KCldID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBtX2JpdHNbYmxvY2stPmluZGV4KCldLT5maWx0ZXIoYmxvY2stPm1hcmtzKCkpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSXNvQ2VsbFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0lzb0NlbGxTZXQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Jc29DZWxsU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIkF0b21JbmRpY2VzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBJc29TdWJz
cGFjZTsKKworLy8gQ3JlYXRlIGEgc2V0IG9mIGNlbGxzIHRoYXQgYXJlIGluIGFuIElzb1N1YnNw
YWNlLiBUaGlzIGFsbG93cyBjb25jdXJyZW50IE8oMSkgc2V0IGluc2VydGlvbiBhbmQKKy8vIHJl
bW92YWwuIEVhY2ggc3VjaCBzZXQgc2hvdWxkIGJlIHRob3VnaHQgb2YgYXMgYSAwLjglIGluY3Jl
YXNlIGluIG9iamVjdCBzaXplIGZvciBvYmplY3RzIGluIHRoYXQKKy8vIElzb1N1YnNwYWNlIChp
dCdzIGxpa2UgYWRkaW5nIDEgYml0IGV2ZXJ5IDE2IGJ5dGVzLCBvciAxIGJpdCBldmVyeSAxMjgg
Yml0cykuCitjbGFzcyBJc29DZWxsU2V0IDogcHVibGljIEJhc2ljUmF3U2VudGluZWxOb2RlPElz
b0NlbGxTZXQ+IHsKK3B1YmxpYzoKKyAgICBJc29DZWxsU2V0KElzb1N1YnNwYWNlJiBzdWJzcGFj
ZSk7CisgICAgfklzb0NlbGxTZXQoKTsKKyAgICAKKyAgICBib29sIGFkZChIZWFwQ2VsbCogY2Vs
bCk7CisgICAgCisgICAgYm9vbCByZW1vdmUoSGVhcENlbGwqIGNlbGwpOworICAgIAorICAgIGJv
b2wgY29udGFpbnMoSGVhcENlbGwqIGNlbGwpIGNvbnN0OworICAgIAorICAgIC8vIFRoaXMgd2ls
bCBoYXZlIHRvIGRvIGEgY29tYmluZWQgc2VhcmNoIG92ZXIgd2hhdGV2ZXIgU3Vic3BhY2U6OmZv
ckVhY2hNYXJrZWRDZWxsIHVzZXMgYW5kCisgICAgLy8gb3VyIG1fYmxvY2tzV2l0aEJpdHMuCisg
ICAgLy8gTk9URTogSXQncyBpbGxlZ2FsIHRvIGNhbGwgYWRkKCkgY29uY3VycmVudGx5IHRvIHRo
aXMuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICB2b2lkIGZvckVhY2hNYXJrZWRD
ZWxsKGNvbnN0IEZ1bmMmKTsKKyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIElzb1N1
YnNwYWNlOworICAgIAorICAgIEJpdG1hcDxNYXJrZWRCbG9jazo6YXRvbXNQZXJCbG9jaz4qIGFk
ZFNsb3coc2l6ZV90IGJsb2NrSW5kZXgpOworICAgIAorICAgIHZvaWQgZGlkUmVzaXplQml0cyhz
aXplX3QgbmV3U2l6ZSk7CisgICAgdm9pZCBkaWRSZW1vdmVCbG9jayhzaXplX3QgYmxvY2tJbmRl
eCk7CisgICAgdm9pZCBzd2VlcFRvRnJlZUxpc3QoTWFya2VkQmxvY2s6OkhhbmRsZSopOworICAg
IAorICAgIFN1YnNwYWNlJiBtX3N1YnNwYWNlOworICAgIAorICAgIC8vIElkZWE6IHN3ZWVwaW5n
IHRvIGZyZWUtbGlzdCBjbGVhcnMgYml0cyBmb3IgdGhvc2UgY2VsbHMgdGhhdCB3ZXJlIGZyZWUt
bGlzdGVkLiBUaGUgZmlyc3QgdGltZQorICAgIC8vIHdlIGFkZCBhIGNlbGwgaW4gYSBibG9jaywg
dGhhdCBibG9jayBnZXRzIGEgZnJlZS1saXN0LiBVbmxlc3Mgd2UgZG8gc29tZXRoaW5nIHRoYXQg
b2J2aW91c2x5CisgICAgLy8gY2xlYXJzIGFsbCBiaXRzIGZvciBhIGJsb2NrLCB3ZSBrZWVwIGl0
IHNldCBpbiBibG9ja3NXaXRoQml0cy4KKyAgICAKKyAgICBGYXN0Qml0VmVjdG9yIG1fYmxvY2tz
V2l0aEJpdHM7CisgICAgQ29uY3VycmVudFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Qml0bWFwPE1h
cmtlZEJsb2NrOjphdG9tc1BlckJsb2NrPj4+IG1fYml0czsKK307CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0SW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXRJ
bmxpbmVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNv
Q2VsbFNldElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiSXNvQ2VsbFNldC5oIgorI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIGJvb2wgSXNvQ2VsbFNldDo6YWRkKEhlYXBDZWxs
KiBjZWxsKQoreworICAgIEF0b21JbmRpY2VzIGF0b21JbmRpY2VzKGNlbGwpOworICAgIGF1dG8m
IGJpdHNQdHJSZWYgPSBtX2JpdHNbYXRvbUluZGljZXMuYmxvY2tJbmRleF07CisgICAgYXV0byog
Yml0cyA9IGJpdHNQdHJSZWYuZ2V0KCk7CisgICAgaWYgKFVOTElLRUxZKCFiaXRzKSkKKyAgICAg
ICAgYml0cyA9IGFkZFNsb3coYXRvbUluZGljZXMuYmxvY2tJbmRleCk7CisgICAgcmV0dXJuICFi
aXRzLT5jb25jdXJyZW50VGVzdEFuZFNldChhdG9tSW5kaWNlcy5hdG9tTnVtYmVyKTsKK30KKwor
aW5saW5lIGJvb2wgSXNvQ2VsbFNldDo6cmVtb3ZlKEhlYXBDZWxsKiBjZWxsKQoreworICAgIEF0
b21JbmRpY2VzIGF0b21JbmRpY2VzKGNlbGwpOworICAgIGF1dG8mIGJpdHNQdHJSZWYgPSBtX2Jp
dHNbYXRvbUluZGljZXMuYmxvY2tJbmRleF07CisgICAgYXV0byogYml0cyA9IGJpdHNQdHJSZWYu
Z2V0KCk7CisgICAgaWYgKCFiaXRzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJu
IGJpdHMtPmNvbmN1cnJlbnRUZXN0QW5kQ2xlYXIoYXRvbUluZGljZXMuYXRvbU51bWJlcik7Cit9
CisKK2lubGluZSBib29sIElzb0NlbGxTZXQ6OmNvbnRhaW5zKEhlYXBDZWxsKiBjZWxsKQorewor
ICAgIEF0b21JbmRpY2VzIGF0b21JbmRpY2VzKGNlbGwpOworICAgIGF1dG8qIGJpdHMgPSBtX2Jp
dHNbYXRvbUluZGljZXMuYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgaWYgKGJpdHMpCisgICAgICAg
IHJldHVybiBiaXRzLT5nZXQoYXRvbUluZGljZXMuYXRvbU51bWJlcik7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgordm9pZCBJc29DZWxsU2V0Ojpmb3JF
YWNoTWFya2VkQ2VsbChjb25zdCBGdW5jJiBmdW5jKQoreworICAgIE1hcmtlZEFsbG9jYXRvciYg
YWxsb2NhdG9yID0gbV9zdWJzcGFjZS5tX2FsbG9jYXRvcjsKKyAgICAoYWxsb2NhdG9yLm1fbWFy
a2luZ05vdEVtcHR5ICYgbV9ibG9ja3NXaXRoQml0cykuZm9yRWFjaFNldEJpdCgKKyAgICAgICAg
WyZdIChzaXplX3QgYmxvY2tJbmRleCkgeworICAgICAgICAgICAgTWFya2VkQmxvY2s6OkhhbmRs
ZSogYmxvY2sgPSBhbGxvY2F0b3IubV9ibG9ja3NbYmxvY2tJbmRleF07CisKKyAgICAgICAgICAg
IGF1dG8qIGJpdHMgPSBtX2JpdHNbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBib29s
IGhhZEJpdHMgPSBmYWxzZTsKKyAgICAgICAgICAgIGhhbmRsZS0+Zm9yRWFjaE1hcmtlZENlbGwo
CisgICAgICAgICAgICAgICAgWyZdIChzaXplX3QgYXRvbU51bWJlciwgSGVhcENlbGwqIGNlbGws
IEhlYXBDZWxsOjpLaW5kIGtpbmQpIC0+IEl0ZXJhdGlvblN0YXR1cyB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChiaXRzLT5nZXQoYXRvbU51bWJlcikpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGZ1bmMoY2VsbCwga2luZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBoYWRCaXRzID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
SXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgIGlmICghaGFkQml0cykgeworICAgICAgICAgICAgICAgIG1fYml0c1tibG9ja0luZGV4XSA9
IG51bGxwdHI7CisgICAgICAgICAgICAgICAgbV9ibG9ja3NXaXRoQml0c1tibG9ja0luZGV4XSA9
IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZS5jcHAJ
KHJldmlzaW9uIDIyNTcyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNw
YWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNSArNjcsMjkgQEAgdm9pZCogSXNvU3Vic3Bh
Y2U6OmFsbG9jYXRlTm9uVmlydHVhbChzaQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3ZvaWQg
SXNvU3Vic3BhY2U6OmRpZFJlc2l6ZUJpdHMoc2l6ZV90IGJsb2NrSW5kZXgpCit7CisgICAgbV9j
ZWxsU2V0cy5mb3JFYWNoKAorICAgICAgICBbJl0gKElzb0NlbGxTZXQqIHNldCkgeworICAgICAg
ICAgICAgc2V0LT5kaWRSZXNpemVCaXRzKGJsb2NrSW5kZXgpOworICAgICAgICB9KTsKK30KKwor
dm9pZCBJc29TdWJzcGFjZTo6ZGlkUmVtb3ZlQmxvY2soc2l6ZV90IGJsb2NrSW5kZXgpCit7Cisg
ICAgbV9jZWxsU2V0cy5mb3JFYWNoKAorICAgICAgICBbJl0gKElzb0NlbGxTZXQqIHNldCkgewor
ICAgICAgICAgICAgc2V0LT5kaWRSZW1vdmVCbG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgfSk7
Cit9CisKK3ZvaWQgSXNvU3Vic3BhY2U6OmRpZEJlZ2luU3dlZXBpbmdUb0ZyZWVMaXN0KE1hcmtl
ZEJsb2NrOjpIYW5kbGUqIGJsb2NrKQoreworICAgIG1fY2VsbFNldHMuZm9yRWFjaCgKKyAgICAg
ICAgWyZdIChJc29DZWxsU2V0KiBzZXQpIHsKKyAgICAgICAgICAgIHNldC0+c3dlZXBUb0ZyZWVM
aXN0KGJsb2NrKTsKKyAgICAgICAgfSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmgJKHJldmlzaW9uIDIyNTcy
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDEwICsyNywxMiBAQAogCiAjaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9yLmgi
CiAjaW5jbHVkZSAiU3Vic3BhY2UuaCIKKyNpbmNsdWRlIDx3dGYvU2luZ2x5TGlua2VkTGlzdFdp
dGhUYWlsLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBJc29BbGlnbmVkTWVtb3J5QWxs
b2NhdG9yOworY2xhc3MgSXNvQ2VsbFNldDsKIAogY2xhc3MgSXNvU3Vic3BhY2UgOiBwdWJsaWMg
U3Vic3BhY2UgewogcHVibGljOgpAQCAtNDYsOSArNDgsMTQgQEAgcHVibGljOgogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlTm9uVmlydHVhbChzaXplX3Qgc2l6ZSwgR0NEZWZl
cnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1
cmVNb2RlKTsKIAogcHJpdmF0ZToKKyAgICB2b2lkIGRpZFJlc2l6ZUJpdHMoc2l6ZV90IG5ld1Np
emUpIG92ZXJyaWRlOworICAgIHZvaWQgZGlkUmVtb3ZlQmxvY2soc2l6ZV90IGJsb2NrSW5kZXgp
IG92ZXJyaWRlOworICAgIHZvaWQgZGlkQmVnaW5Td2VlcGluZ1RvRnJlZUxpc3QoTWFya2VkQmxv
Y2s6OkhhbmRsZSopIG92ZXJyaWRlOworICAgIAogICAgIHNpemVfdCBtX3NpemU7CiAgICAgTWFy
a2VkQWxsb2NhdG9yIG1fYWxsb2NhdG9yOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29BbGlnbmVk
TWVtb3J5QWxsb2NhdG9yPiBtX2lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I7CisgICAgU2VudGlu
ZWxMaW5rZWRMaXN0PElzb0NlbGxTZXQsIEJhc2ljUmF3U2VudGluZWxOb2RlPElzb0NlbGxTZXQ+
PiBtX2NlbGxTZXRzOwogfTsKIAogaW5saW5lIE1hcmtlZEFsbG9jYXRvciogSXNvU3Vic3BhY2U6
OmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEFsbG9jYXRvckZvck1vZGUpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJ
KHJldmlzaW9uIDIyNTcyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFs
bG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2MSw2ICsyNjEsNyBAQCB2b2lkIE1hcmtl
ZEFsbG9jYXRvcjo6YWRkQmxvY2soTWFya2VkQmxvCiAgICAgICAgICAgICBBU1NFUlQobV9ibG9j
a3MuY2FwYWNpdHkoKSA+IG9sZENhcGFjaXR5KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
TG9ja0hvbGRlciBsb2NrZXIobV9iaXR2ZWN0b3JMb2NrKTsKKyAgICAgICAgICAgIHN1YnNwYWNl
KCktPmRpZFJlc2l6ZUJpdHMobV9ibG9ja3MuY2FwYWNpdHkoKSk7CiAgICAgICAgICAgICBmb3JF
YWNoQml0VmVjdG9yKAogICAgICAgICAgICAgICAgIGxvY2tlciwKICAgICAgICAgICAgICAgICBb
Jl0gKEZhc3RCaXRWZWN0b3ImIHZlY3RvcikgewpAQCAtMjkwLDcgKzI5MSw5IEBAIHZvaWQgTWFy
a2VkQWxsb2NhdG9yOjpyZW1vdmVCbG9jayhNYXJrZWQKIHsKICAgICBBU1NFUlQoYmxvY2stPmFs
bG9jYXRvcigpID09IHRoaXMpOwogICAgIEFTU0VSVChtX2Jsb2Nrc1tibG9jay0+aW5kZXgoKV0g
PT0gYmxvY2spOwotCisgICAgCisgICAgc3Vic3BhY2UoKS0+ZGlkUmVtb3ZlQmxvY2soYmxvY2st
PmluZGV4KCkpOworICAgIAogICAgIG1fYmxvY2tzW2Jsb2NrLT5pbmRleCgpXSA9IG51bGxwdHI7
CiAgICAgbV9mcmVlQmxvY2tJbmRpY2VzLmFwcGVuZChibG9jay0+aW5kZXgoKSk7CiAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkocmV2
aXNpb24gMjI1NzI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2Nh
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
IGNsYXNzIEdDRGVmZXJyYWxDb250ZXh0OwogY2xhc3MgSGVhcDsKK2NsYXNzIElzb0NlbGxTZXQ7
CiBjbGFzcyBNYXJrZWRTcGFjZTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIApAQCAt
MTYyLDYgKzE2Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXBCaXRzKFByaW50U3RyZWFtJiA9
IFdURjo6ZGF0YUZpbGUoKSk7CiAgICAgCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBJc29D
ZWxsU2V0OwogICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRCbG9jazsKICAgICAKICAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJyYWxDb250ZXh0KiwgQWxs
b2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHJldmlzaW9uIDIyNTcyNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAx
LDExICszMDEsNiBAQCBzaXplX3QgTWFya2VkQmxvY2s6Om1hcmtDb3VudCgpCiAgICAgcmV0dXJu
IGFyZU1hcmtzU3RhbGUoKSA/IDAgOiBtX21hcmtzLmNvdW50KCk7CiB9CiAKLWJvb2wgTWFya2Vk
QmxvY2s6OkhhbmRsZTo6aXNFbXB0eSgpCi17Ci0gICAgcmV0dXJuIG1fYWxsb2NhdG9yLT5pc0Vt
cHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcyk7Ci19Ci0KIHZvaWQgTWFya2VkQmxvY2s6OmNs
ZWFySGFzQW55TWFya2VkKCkKIHsKICAgICBtX2JpYXNlZE1hcmtDb3VudCA9IG1fbWFya0NvdW50
QmlhczsKQEAgLTQwMiwxNiArMzk3LDE0IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3dl
ZXAoRnJlZUxpc3QKICAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwT25seSAmJiAhbmVlZHNEZXN0
cnVjdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKFVOTElLRUxZKG1faXNGcmVlTGlz
dGVkKSkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChzd2VlcE1vZGUgPT0gU3dlZXBUb0ZyZWVM
aXN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBBU1NFUlQoIW1fYWxsb2Nh
dG9yLT5pc0FsbG9jYXRlZChOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMpKTsKKyAgICBSRUxFQVNF
X0FTU0VSVCghbV9pc0ZyZWVMaXN0ZWQpOworICAgIFJFTEVBU0VfQVNTRVJUKCFpc0FsbG9jYXRl
ZCgpKTsKICAgICAKICAgICBpZiAoc3BhY2UoKS0+aXNNYXJraW5nKCkpCiAgICAgICAgIGJsb2Nr
KCkubV9sb2NrLmxvY2soKTsKICAgICAKKyAgICBzdWJzcGFjZSgpLT5kaWRCZWdpblN3ZWVwaW5n
VG9GcmVlTGlzdCh0aGlzKTsKKyAgICAKICAgICBpZiAobmVlZHNEZXN0cnVjdGlvbikgewogICAg
ICAgICBzdWJzcGFjZSgpLT5maW5pc2hTd2VlcCgqdGhpcywgZnJlZUxpc3QpOwogICAgICAgICBy
ZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHJl
dmlzaW9uIDIyNTcyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2Miw2ICsxNjIsOCBAQCBwdWJsaWM6CiAgICAgICAgIHNp
emVfdCBtYXJrQ291bnQoKTsKICAgICAgICAgc2l6ZV90IHNpemUoKTsKICAgICAgICAgCisgICAg
ICAgIGJvb2wgaXNBbGxvY2F0ZWQoKTsKKyAgICAgICAgCiAgICAgICAgIGJvb2wgaXNMaXZlKEhl
YXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBIZWFwVmVyc2lvbiBuZXdseUFsbG9jYXRlZFZlcnNp
b24sIGJvb2wgaXNNYXJraW5nLCBjb25zdCBIZWFwQ2VsbCopOwogICAgICAgICBpbmxpbmUgYm9v
bCBpc0xpdmVDZWxsKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBIZWFwVmVyc2lvbiBuZXds
eUFsbG9jYXRlZFZlcnNpb24sIGJvb2wgaXNNYXJraW5nLCBjb25zdCB2b2lkKik7CiAKQEAgLTE3
Myw2ICsxNzUsNyBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wgaXNOZXdseUFsbG9jYXRlZChjb25z
dCB2b2lkKik7CiAgICAgICAgIHZvaWQgc2V0TmV3bHlBbGxvY2F0ZWQoY29uc3Qgdm9pZCopOwog
ICAgICAgICB2b2lkIGNsZWFyTmV3bHlBbGxvY2F0ZWQoY29uc3Qgdm9pZCopOworICAgICAgICBj
b25zdCBCaXRtYXA8YXRvbXNQZXJCbG9jaz4mIG5ld2x5QWxsb2NhdGVkKCkgY29uc3Q7CiAgICAg
ICAgIAogICAgICAgICBIZWFwVmVyc2lvbiBuZXdseUFsbG9jYXRlZFZlcnNpb24oKSBjb25zdCB7
IHJldHVybiBtX25ld2x5QWxsb2NhdGVkVmVyc2lvbjsgfQogICAgICAgICAKQEAgLTIyNyw3ICsy
MzAsNyBAQCBwdWJsaWM6CiAgICAgICAgIHNpemVfdCBtX2F0b21zUGVyQ2VsbCB7IHN0ZDo6bnVt
ZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkgfTsKICAgICAgICAgc2l6ZV90IG1fZW5kQXRvbSB7
IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkgfTsgLy8gVGhpcyBpcyBhIGZ1enp5
IGVuZC4gQWx3YXlzIHRlc3QgZm9yIDwgbV9lbmRBdG9tLgogICAgICAgICAgICAgCi0gICAgICAg
IFdURjo6Qml0bWFwPGF0b21zUGVyQmxvY2s+IG1fbmV3bHlBbGxvY2F0ZWQ7CisgICAgICAgIEJp
dG1hcDxhdG9tc1BlckJsb2NrPiBtX25ld2x5QWxsb2NhdGVkOwogICAgICAgICAgICAgCiAgICAg
ICAgIEFsbG9jYXRvckF0dHJpYnV0ZXMgbV9hdHRyaWJ1dGVzOwogICAgICAgICBib29sIG1faXNG
cmVlTGlzdGVkIHsgZmFsc2UgfTsKQEAgLTI5NCw2ICsyOTcsOCBAQCBwdWJsaWM6CiAgICAgYm9v
bCBpc01hcmtlZFJhdyhjb25zdCB2b2lkKiBwKTsKICAgICBIZWFwVmVyc2lvbiBtYXJraW5nVmVy
c2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFya2luZ1ZlcnNpb247IH0KICAgICAKKyAgICBjb25z
dCBCaXRtYXA8YXRvbXNQZXJCbG9jaz4mIG1hcmtzKCkgY29uc3Q7CisgICAgCiAgICAgQ291bnRp
bmdMb2NrJiBsb2NrKCkgeyByZXR1cm4gbV9sb2NrOyB9CiAKIHByaXZhdGU6CkBAIC0zNDYsNyAr
MzUxLDcgQEAgcHJpdmF0ZToKIAogICAgIEhlYXBWZXJzaW9uIG1fbWFya2luZ1ZlcnNpb247CiAK
LSAgICBXVEY6OkJpdG1hcDxhdG9tc1BlckJsb2NrPiBtX21hcmtzOworICAgIEJpdG1hcDxhdG9t
c1BlckJsb2NrPiBtX21hcmtzOwogfTsKIAogaW5saW5lIE1hcmtlZEJsb2NrOjpIYW5kbGUmIE1h
cmtlZEJsb2NrOjpoYW5kbGUoKQpAQCAtNTMyLDYgKzUzNywxMSBAQCBpbmxpbmUgYm9vbCBNYXJr
ZWRCbG9jazo6dGVzdEFuZFNldE1hcmtlCiAgICAgcmV0dXJuIG1fbWFya3MuY29uY3VycmVudFRl
c3RBbmRTZXQoYXRvbU51bWJlcihwKSwgZGVwZW5kZW5jeSk7CiB9CiAKK2lubGluZSBjb25zdCBC
aXRtYXA8TWFya2VkQmxvY2s6OmF0b21zUGVyQmxvY2s+IE1hcmtlZEJsb2NrOjptYXJrcygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fbWFya3M7Cit9CisKIGlubGluZSBib29sIE1hcmtlZEJsb2Nr
OjpIYW5kbGU6OmlzTmV3bHlBbGxvY2F0ZWQoY29uc3Qgdm9pZCogcCkKIHsKICAgICByZXR1cm4g
bV9uZXdseUFsbG9jYXRlZC5nZXQobV9ibG9jay0+YXRvbU51bWJlcihwKSk7CkBAIC01NDcsNiAr
NTU3LDExIEBAIGlubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmNsZWFyTmUKICAgICBt
X25ld2x5QWxsb2NhdGVkLmNsZWFyKG1fYmxvY2stPmF0b21OdW1iZXIocCkpOwogfQogCitpbmxp
bmUgY29uc3QgQml0bWFwPE1hcmtlZEJsb2NrOjphdG9tc1BlckJsb2NrPiYgTWFya2VkQmxvY2s6
OkhhbmRsZTo6bmV3bHlBbGxvY2F0ZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX25ld2x5QWxs
b2NhdGVkOworfQorCiBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNBdG9tKGNvbnN0IHZvaWQq
IHApCiB7CiAgICAgQVNTRVJUKE1hcmtlZEJsb2NrOjppc0F0b21BbGlnbmVkKHApKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oCShy
ZXZpc2lvbiAyMjU3MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9j
a0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtOTEsNiArOTEsMTEgQEAgaW5saW5lIGJvb2wg
TWFya2VkQmxvY2s6Om1hcmtzQ29udmV5TGl2ZQogICAgICAgICB8fCBNYXJrZWRTcGFjZTo6bmV4
dFZlcnNpb24obXlNYXJraW5nVmVyc2lvbikgPT0gbWFya2luZ1ZlcnNpb247CiB9CiAKK2lubGlu
ZSBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzQWxsb2NhdGVkKCkKK3sKKyAgICByZXR1cm4g
bV9hbGxvY2F0b3ItPmlzQWxsb2NhdGVkKE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcyk7Cit9CisK
IEFMV0FZU19JTkxJTkUgYm9vbCBNYXJrZWRCbG9jazo6SGFuZGxlOjppc0xpdmUoSGVhcFZlcnNp
b24gbWFya2luZ1ZlcnNpb24sIEhlYXBWZXJzaW9uIG5ld2x5QWxsb2NhdGVkVmVyc2lvbiwgYm9v
bCBpc01hcmtpbmcsIGNvbnN0IEhlYXBDZWxsKiBjZWxsKQogewogICAgIGlmIChhbGxvY2F0b3Io
KS0+aXNBbGxvY2F0ZWQoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzKSkKQEAgLTQzNCw2ICs0Mzks
MTEgQEAgaW5saW5lIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwRGVzdHJ1YwogICAgIHJldHVy
biBCbG9ja0hhc05vRGVzdHJ1Y3RvcnM7CiB9CiAKK2lubGluZSBib29sIE1hcmtlZEJsb2NrOjpI
YW5kbGU6OmlzRW1wdHkoKQoreworICAgIHJldHVybiBtX2FsbG9jYXRvci0+aXNFbXB0eShOb0xv
Y2tpbmdOZWNlc3NhcnksIHRoaXMpOworfQorCiBpbmxpbmUgTWFya2VkQmxvY2s6OkhhbmRsZTo6
RW1wdHlNb2RlIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmVtcHR5TW9kZSgpCiB7CiAgICAgLy8gSXQn
cyBub3Qgb2J2aW91cywgYnV0IHRoaXMgaXMgdGhlIG9ubHkgd2F5IHRvIGtub3cgaWYgdGhlIGJs
b2NrIGlzIGVtcHR5LiBJdCdzIHRoZSBvbmx5CkBAIC00NDEsNyArNDUxLDcgQEAgaW5saW5lIE1h
cmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBNYQogICAgIC8vIC0gSXQncyB0cnVlIHdoZW4g
dGhlIGJsb2NrIGlzIGZyZXNobHkgYWxsb2NhdGVkLgogICAgIC8vIC0gSXQncyB0cnVlIGlmIHRo
ZSBibG9jayBoYWQgYmVlbiBzd2VwdCBpbiB0aGUgcGFzdCwgYWxsIGRlc3RydWN0b3JzIHdlcmUg
Y2FsbGVkLCBhbmQgdGhhdAogICAgIC8vICAgc3dlZXAgcHJvdmVkIHRoYXQgdGhlIGJsb2NrIGlz
IGVtcHR5LgotICAgIHJldHVybiBtX2FsbG9jYXRvci0+aXNFbXB0eShOb0xvY2tpbmdOZWNlc3Nh
cnksIHRoaXMpID8gSXNFbXB0eSA6IE5vdEVtcHR5OworICAgIHJldHVybiBpc0VtcHR5KCkgPyBJ
c0VtcHR5IDogTm90RW1wdHk7CiB9CiAKIGlubGluZSBNYXJrZWRCbG9jazo6SGFuZGxlOjpTY3Jp
YmJsZU1vZGUgTWFya2VkQmxvY2s6OkhhbmRsZTo6c2NyaWJibGVNb2RlKCkKQEAgLTUxNiw3ICs1
MjYsNyBAQCBpbmxpbmUgSXRlcmF0aW9uU3RhdHVzIE1hcmtlZEJsb2NrOjpIYW5kCiAgICAgICAg
IGlmICghYmxvY2suaXNNYXJrZWRSYXcoY2VsbCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgICBpZiAoZnVuY3RvcihjZWxsLCBraW5kKSA9PSBJdGVyYXRpb25TdGF0dXM6OkRvbmUp
CisgICAgICAgIGlmIChmdW5jdG9yKGksIGNlbGwsIGtpbmQpID09IEl0ZXJhdGlvblN0YXR1czo6
RG9uZSkKICAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkRvbmU7CiAgICAgfQog
ICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1N1YnNwYWNlLmNwcAkocmV2aXNpb24gMjI1NzI1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNSAr
MTI2LDE3IEBAIFJlZlB0cjxTaGFyZWRUYXNrPE1hcmtlZEJsb2NrOjpIYW5kbGUqKCkKICAgICAg
ICAgfSk7CiB9CiAKK3ZvaWQgU3Vic3BhY2U6OmRpZFJlc2l6ZUJpdHMoc2l6ZV90KQoreworfQor
Cit2b2lkIFN1YnNwYWNlOjpkaWRSZW1vdmVCbG9jayhzaXplX3QpCit7Cit9CisKK3ZvaWQgU3Vi
c3BhY2U6OmRpZEJlZ2luU3dlZXBpbmdUb0ZyZWVMaXN0KE1hcmtlZEJsb2NrOjpIYW5kbGUqKQor
eworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TdWJzcGFjZS5oCShyZXZpc2lvbiAyMjU3MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Myw2ICs5MywxMCBAQCBwdWJsaWM6
CiAgICAgCiAgICAgU3Vic3BhY2UqIG5leHRTdWJzcGFjZUluQWxpZ25lZE1lbW9yeUFsbG9jYXRv
cigpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dFN1YnNwYWNlSW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9y
OyB9CiAgICAgdm9pZCBzZXROZXh0U3Vic3BhY2VJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IoU3Vi
c3BhY2UqIHN1YnNwYWNlKSB7IG1fbmV4dFN1YnNwYWNlSW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9y
ID0gc3Vic3BhY2U7IH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVzaXplQml0cyhzaXpl
X3QgbmV3U2l6ZSk7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlbW92ZUJsb2NrKHNpemVfdCBibG9j
a0luZGV4KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQmVnaW5Td2VlcGluZ1RvRnJlZUxpc3QoTWFy
a2VkQmxvY2s6OkhhbmRsZSopOwogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBpbml0aWFsaXplKEhl
YXBDZWxsVHlwZSosIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCShyZXZpc2lvbiAyMjU3MjUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZUlubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtNzEsNyArNzEsNyBAQCB2b2lkIFN1YnNwYWNlOjpmb3JFYWNoTWFya2VkQ2VsbChj
b25zdCBGCiAgICAgZm9yRWFjaE5vdEVtcHR5TWFya2VkQmxvY2soCiAgICAgICAgIFsmXSAoTWFy
a2VkQmxvY2s6OkhhbmRsZSogaGFuZGxlKSB7CiAgICAgICAgICAgICBoYW5kbGUtPmZvckVhY2hN
YXJrZWRDZWxsKAotICAgICAgICAgICAgICAgIFsmXSAoSGVhcENlbGwqIGNlbGwsIEhlYXBDZWxs
OjpLaW5kIGtpbmQpIC0+IEl0ZXJhdGlvblN0YXR1cyB7IAorICAgICAgICAgICAgICAgIFsmXSAo
c2l6ZV90LCBIZWFwQ2VsbCogY2VsbCwgSGVhcENlbGw6OktpbmQga2luZCkgLT4gSXRlcmF0aW9u
U3RhdHVzIHsKICAgICAgICAgICAgICAgICAgICAgZnVuYyhjZWxsLCBraW5kKTsKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CiAgICAgICAgICAg
ICAgICAgfSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFN0
cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW5mZXJyZWRTdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAyMjU3MjUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFN0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDY0ICsyNywxNyBAQAogI2luY2x1ZGUgIkluZmVycmVkU3RydWN0dXJlLmgiCiAKICNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIAog
bmFtZXNwYWNlIEpTQyB7CiAKLWNvbnN0IENsYXNzSW5mbyBJbmZlcnJlZFN0cnVjdHVyZTo6c19p
bmZvID0geyAiSW5mZXJyZWRTdHJ1Y3R1cmUiLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEluZmVycmVkU3RydWN0dXJlKSB9OworV1RGX01BS0VfSVNPX0FM
TE9DQVRFRF9JTVBMKEluZmVycmVkU3RydWN0dXJlKTsKIAotSW5mZXJyZWRTdHJ1Y3R1cmUqIElu
ZmVycmVkU3RydWN0dXJlOjpjcmVhdGUoVk0mIHZtLCBHQ0RlZmVycmFsQ29udGV4dCYgZGVmZXJy
YWxDb250ZXh0LCBJbmZlcnJlZFR5cGUqIHBhcmVudCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitJ
bmZlcnJlZFN0cnVjdHVyZTo6SW5mZXJyZWRTdHJ1Y3R1cmUoVk0mLCBJbmZlcnJlZFR5cGUqIHBh
cmVudCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBwYXJlbnQocGFyZW50KQorICAgICwg
c3RydWN0dXJlKHZtLCBwYXJlbnQsIHN0cnVjdHVyZSkKIHsKLSAgICBJbmZlcnJlZFN0cnVjdHVy
ZSogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SW5mZXJyZWRTdHJ1Y3R1cmU+
KHZtLmhlYXAsICZkZWZlcnJhbENvbnRleHQpKSBJbmZlcnJlZFN0cnVjdHVyZSh2bSwgcGFyZW50
LCBzdHJ1Y3R1cmUpOwotICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0sIHN0cnVjdHVyZSk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBJbmZlcnJlZFN0cnVjdHVyZTo6ZGVzdHJv
eShKU0NlbGwqIGNlbGwpCi17Ci0gICAgSW5mZXJyZWRTdHJ1Y3R1cmUqIGluZmVycmVkU3RydWN0
dXJlID0gc3RhdGljX2Nhc3Q8SW5mZXJyZWRTdHJ1Y3R1cmUqPihjZWxsKTsKLSAgICBpbmZlcnJl
ZFN0cnVjdHVyZS0+SW5mZXJyZWRTdHJ1Y3R1cmU6On5JbmZlcnJlZFN0cnVjdHVyZSgpOwotfQot
Ci1TdHJ1Y3R1cmUqIEluZmVycmVkU3RydWN0dXJlOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKLXsKLSAgICBy
ZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBl
SW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotfQotCi12b2lkIEluZmVy
cmVkU3RydWN0dXJlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCi17Ci0gICAgSW5mZXJyZWRTdHJ1Y3R1cmUqIGluZmVycmVkU3RydWN0dXJlID0ganND
YXN0PEluZmVycmVkU3RydWN0dXJlKj4oY2VsbCk7Ci0gICAgCi0gICAgdmlzaXRvci5hcHBlbmQo
aW5mZXJyZWRTdHJ1Y3R1cmUtPm1fcGFyZW50KTsKLX0KLQotdm9pZCBJbmZlcnJlZFN0cnVjdHVy
ZTo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mKQotewotICAgIEFTU0VSVChIZWFwOjppc01h
cmtlZChtX3BhcmVudC5nZXQoKSkpOwotICAgIAotICAgIC8vIE1vbm90b25pY2l0eSBlbnN1cmVz
IHRoYXQgd2Ugc2hvdWxkbid0IHNlZSBhIG5ldyBzdHJ1Y3R1cmUgdGhhdCBpcyBkaWZmZXJlbnQg
ZnJvbSB1cywgYnV0IHdlCi0gICAgLy8gY291bGQgaGF2ZSBiZWVuIG51bGxlZC4gV2Ugb25seSBy
ZWx5IG9uIGl0IGJlaW5nIHRoZSBudWxsIGNhc2Ugb25seSBpbiBkZWJ1Zy4KLSAgICBpZiAodGhp
cyA9PSBtX3BhcmVudC0+bV9zdHJ1Y3R1cmUuZ2V0KCkpIHsKLSAgICAgICAgaWYgKCFIZWFwOjpp
c01hcmtlZChtX3N0cnVjdHVyZS5nZXQoKSkpCi0gICAgICAgICAgICBtX3BhcmVudC0+cmVtb3Zl
U3RydWN0dXJlKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIEFTU0VSVCghbV9wYXJlbnQtPm1fc3Ry
dWN0dXJlKTsKLSAgICAKLSAgICAvLyBXZSdsbCBnZXQgZGVsZXRlZCBvbiB0aGUgbmV4dCBHQy4g
VGhhdCdzIGEgbGl0dGxlIHdlaXJkLCBidXQgbm90IGhhcm1mdWwsIHNpbmNlIGl0IG9ubHkgaGFw
cGVucwotICAgIC8vIHdoZW4gdGhlIEluZmVycmVkVHlwZSB0aGF0IHdlIHdlcmUgcGFpcmVkIHRv
IHdvdWxkIGhhdmUgc3Vydml2ZWQuIEl0IGp1c3QgbWVhbnMgYSB0aW55IG1pc3NlZAotICAgIC8v
IG9wcG9ydHVuaXR5IGZvciBoZWFwIHNpemUgcmVkdWN0aW9uLgotfQotCi1JbmZlcnJlZFN0cnVj
dHVyZTo6SW5mZXJyZWRTdHJ1Y3R1cmUoVk0mIHZtLCBJbmZlcnJlZFR5cGUqIHBhcmVudCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgOiBCYXNlKHZtLCB2bS5pbmZlcnJlZFN0cnVjdHVyZVN0
cnVjdHVyZS5nZXQoKSkKLSAgICAsIG1fcGFyZW50KHZtLCB0aGlzLCBwYXJlbnQpCi0gICAgLCBt
X3N0cnVjdHVyZSh2bSwgdGhpcywgc3RydWN0dXJlKQotewotfQotCi12b2lkIEluZmVycmVkU3Ry
dWN0dXJlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQotewot
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICBzdHJ1Y3R1cmUtPmFkZFRyYW5zaXRp
b25XYXRjaHBvaW50KCZtX3dhdGNocG9pbnQpOworICAgIHN0cnVjdHVyZS0+YWRkVHJhbnNpdGlv
bldhdGNocG9pbnQoJndhdGNocG9pbnQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkU3RydWN0dXJlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1cmUu
aAkocmV2aXNpb24gMjI1NzI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5m
ZXJyZWRTdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNTEgKzI2LDIxIEBACiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgIkluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludC5oIgotI2lu
Y2x1ZGUgIkpTQ2VsbC5oIgotI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxv
Yy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSW5mZXJyZWRUeXBlOwogCi1jbGFzcyBJ
bmZlcnJlZFN0cnVjdHVyZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgeworY2xhc3MgSW5mZXJyZWRT
dHJ1Y3R1cmUgZmluYWwgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW5mZXJyZWRTdHJ1
Y3R1cmUpOwogcHVibGljOgotICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7Ci0gICAgCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGU+Ci0gICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCi0gICAgewotICAgICAgICByZXR1cm4gJnZtLmluZmVycmVkU3RydWN0dXJl
U3BhY2U7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyBJbmZlcnJlZFN0cnVjdHVyZSogY3JlYXRl
KFZNJiwgR0NEZWZlcnJhbENvbnRleHQmLCBJbmZlcnJlZFR5cGUqIHBhcmVudCwgU3RydWN0dXJl
Kik7Ci0gICAgCi0gICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7
Ci0gICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLSAgICAKLSAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBTdHJ1Y3R1cmVJc0ltbW9ydGFsIHwgQmFzZTo6
U3RydWN0dXJlRmxhZ3M7Ci0KLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
Vk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKLSAgICAKLSAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0KLSAgICBERUNM
QVJFX0lORk87Ci0gICAgCi0gICAgSW5mZXJyZWRUeXBlKiBwYXJlbnQoKSBjb25zdCB7IHJldHVy
biBtX3BhcmVudC5nZXQoKTsgfQotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7IH0KLSAgICAKLSAgICB2b2lkIGZpbmFsaXplVW5jb25k
aXRpb25hbGx5KFZNJik7Ci0KLXByaXZhdGU6CiAgICAgSW5mZXJyZWRTdHJ1Y3R1cmUoVk0mLCBJ
bmZlcnJlZFR5cGUqIHBhcmVudCwgU3RydWN0dXJlKik7CisKKyAgICBJbmZlcnJlZFR5cGUqIHBh
cmVudDsKKyAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBzdHJ1Y3R1cmU7CiAgICAgCi0gICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFN0cnVjdHVyZSopOwotICAgIAotICAgIFdyaXRlQmFy
cmllcjxJbmZlcnJlZFR5cGU+IG1fcGFyZW50OwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+
IG1fc3RydWN0dXJlOwotICAgIAotICAgIGZyaWVuZCBjbGFzcyBJbmZlcnJlZFN0cnVjdHVyZVdh
dGNocG9pbnQ7Ci0gICAgSW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50IG1fd2F0Y2hwb2ludDsK
KyAgICBJbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQgd2F0Y2hwb2ludDsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJy
ZWRTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAy
MjU3MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFN0cnVjdHVy
ZVdhdGNocG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMiArMzQsMTQgQEAgdm9pZCBJ
bmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQ6OmZpcmVJbgogewogICAgIEluZmVycmVkU3RydWN0
dXJlKiBpbmZlcnJlZFN0cnVjdHVyZSA9CiAgICAgICAgIGJpdHdpc2VfY2FzdDxJbmZlcnJlZFN0
cnVjdHVyZSo+KAotICAgICAgICAgICAgYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSAtIE9CSkVD
VF9PRkZTRVRPRihJbmZlcnJlZFN0cnVjdHVyZSwgbV93YXRjaHBvaW50KSk7CisgICAgICAgICAg
ICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpIC0gT0JKRUNUX09GRlNFVE9GKEluZmVycmVkU3Ry
dWN0dXJlLCB3YXRjaHBvaW50KSk7CiAKLSAgICBpZiAoIWluZmVycmVkU3RydWN0dXJlLT5pc0xp
dmUoKSkKKyAgICBJbmZlcnJlZFR5cGUgaW5mZXJyZWRUeXBlID0gaW5mZXJyZWRTdHJ1Y3R1cmUt
PnBhcmVudDsKKyAgICAKKyAgICBpZiAoIWluZmVycmVkVHlwZS0+aXNMaXZlKCkpCiAgICAgICAg
IHJldHVybjsKICAgICAKLSAgICBpbmZlcnJlZFN0cnVjdHVyZS0+bV9wYXJlbnQtPnJlbW92ZVN0
cnVjdHVyZSgpOworICAgIGluZmVycmVkVHlwZS0+cmVtb3ZlU3RydWN0dXJlKCk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5m
ZXJyZWRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbmZlcnJlZFR5cGUuY3BwCShyZXZpc2lvbiAyMjU3MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4
Niw4IEBAIFN0cnVjdHVyZSogSW5mZXJyZWRUeXBlOjpjcmVhdGVTdHJ1Y3R1cmUKIHZvaWQgSW5m
ZXJyZWRUeXBlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgSW5mZXJyZWRUeXBlKiBpbmZlcnJlZFR5cGUgPSBqc0Nhc3Q8SW5mZXJyZWRU
eXBlKj4oY2VsbCk7Ci0gICAgdmlzaXRvci5hcHBlbmQoaW5mZXJyZWRUeXBlLT5tX3N0cnVjdHVy
ZSk7CisgICAgaWYgKG1fc3RydWN0dXJlKQorICAgICAgICB2aXNpdG9yLnZtKCkuaW5mZXJyZWRU
eXBlc1dpdGhGaW5hbGl6ZXJzLmFkZChpbmZlcnJlZFR5cGUpOwogfQogCiBJbmZlcnJlZFR5cGU6
OktpbmQgSW5mZXJyZWRUeXBlOjpraW5kRm9yRmxhZ3MoUHV0QnlJZEZsYWdzIGZsYWdzKQpAQCAt
NDY5LDE5ICs0NzAsMTMgQEAgYm9vbCBJbmZlcnJlZFR5cGU6OnNldChHQ0RlZmVycmFsQ29udGV4
dAogICAgICAgICBzaG91bGRGaXJlV2F0Y2hwb2ludFNldCA9IHRydWU7CiAgICAgfQogCi0gICAg
Ly8gUmVtb3ZlIHRoZSBvbGQgSW5mZXJyZWRTdHJ1Y3R1cmUgb2JqZWN0IGlmIHdlIG5vIGxvbmdl
ciBuZWVkIGl0LgogICAgIGlmICghbmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSkKLSAgICAgICAg
bV9zdHJ1Y3R1cmUuY2xlYXIoKTsKLQotICAgIC8vIEFkZCBhIG5ldyBJbmZlcnJlZFN0cnVjdHVy
ZSBvYmplY3QgaWYgd2UgbmVlZCBvbmUgbm93LgotICAgIGlmIChuZXdEZXNjcmlwdG9yLnN0cnVj
dHVyZSgpKSB7Ci0gICAgICAgIGlmIChtX3N0cnVjdHVyZSkgewotICAgICAgICAgICAgLy8gV2Ug
c2hvdWxkIGFncmVlIG9uIHRoZSBzdHJ1Y3R1cmVzIGlmIHdlIGdldCBoZXJlLgotICAgICAgICAg
ICAgQVNTRVJUKG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkgPT0gbV9zdHJ1Y3R1cmUtPnN0cnVj
dHVyZSgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGF1dG8qIHN0cnVjdHVyZSA9
IEluZmVycmVkU3RydWN0dXJlOjpjcmVhdGUodm0sIGRlZmVycmFsQ29udGV4dCwgdGhpcywgbmV3
RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAgICAgICBtX3N0cnVjdHVyZS5zZXQodm0s
IHRoaXMsIHN0cnVjdHVyZSk7Ci0gICAgICAgIH0KKyAgICAgICAgbV9zdHJ1Y3R1cmUgPSBudWxs
cHRyOworICAgIGVsc2UgeworICAgICAgICBpZiAobV9zdHJ1Y3R1cmUpCisgICAgICAgICAgICBB
U1NFUlQobmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSA9PSBtX3N0cnVjdHVyZS0+c3RydWN0dXJl
LmdldCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSBzdGQ6Om1h
a2VfdW5pcXVlPEluZmVycmVkU3RydWN0dXJlPih2bSwgdGhpcywgbmV3RGVzY3JpcHRvci5zdHJ1
Y3R1cmUoKSk7CiAgICAgfQogCiAgICAgLy8gRmluYWxseSwgc2V0IHRoZSBkZXNjcmlwdG9yIGtp
bmQuCkBAIC01MTcsNiArNTEyLDIwIEBAIHZvaWQgSW5mZXJyZWRUeXBlOjpyZW1vdmVTdHJ1Y3R1
cmUoKQogICAgIG1fd2F0Y2hwb2ludFNldC5maXJlQWxsKHZtLCBkZXRhaWwpOwogfQogCit2b2lk
IEluZmVycmVkVHlwZTo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mIHZtKQoreworICAgIEFT
U0VSVChIZWFwOjppc01hcmtlZCh0aGlzKSk7CisgICAgCisgICAgaWYgKG1fc3RydWN0dXJlKSB7
CisgICAgICAgIGlmIChIZWFwOjppc01hcmtlZChtX3N0cnVjdHVyZS0+c3RydWN0dXJlLmdldCgp
KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIHJlbW92ZVN0cnVjdHVy
ZSgpOworICAgIH0KKyAgICAKKyAgICB2bS5pbmZlcnJlZFR5cGVzV2l0aEZpbmFsaXplcnMucmVt
b3ZlKHRoaXMpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogbmFtZXNwYWNlIFdURiB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuaAkocmV2
aXNpb24gMjI1NzI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRU
eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4NSw3ICsxODUsNyBAQCBwdWJsaWM6CiAKICAgICBE
ZXNjcmlwdG9yIGRlc2NyaXB0b3JNYWluVGhyZWFkKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJl
dHVybiBEZXNjcmlwdG9yKG1fa2luZCwgbV9zdHJ1Y3R1cmUgPyBtX3N0cnVjdHVyZS0+c3RydWN0
dXJlKCkgOiBudWxscHRyKTsKKyAgICAgICAgcmV0dXJuIERlc2NyaXB0b3IobV9raW5kLCBtX3N0
cnVjdHVyZSA/IG1fc3RydWN0dXJlLT5zdHJ1Y3R1cmUuZ2V0KCkgOiBudWxscHRyKTsKICAgICB9
CiAgICAgCiAgICAgRGVzY3JpcHRvciBkZXNjcmlwdG9yKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYpIGNvbnN0CkBAIC0yMzAsNyArMjMwLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CiAgICAgCi0gICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxs
eSgpOworICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mKTsKIAogcHJpdmF0ZToK
ICAgICBJbmZlcnJlZFR5cGUoVk0mKTsKQEAgLTI1Miw3ICsyNTIsOCBAQCBwcml2YXRlOgogICAg
IAogICAgIEtpbmQgbV9raW5kIHsgQm90dG9tIH07CiAKLSAgICBXcml0ZUJhcnJpZXI8SW5mZXJy
ZWRTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBQ
b2lzb25lZC4KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5mZXJyZWRTdHJ1Y3R1cmU+IG1fc3RydWN0
dXJlOwogCiAgICAgLy8gTk9URTogSWYgdGhpcyBpcyBiZWluZyB3YXRjaGVkLCB3ZSB0cmFuc2Zv
cm0gdG8gVG9wIGJlY2F1c2UgdGhhdCBpbXBsaWVzIHRoYXQgaXQgd291bGRuJ3QgYmUKICAgICAv
LyBwcm9maXRhYmxlIHRvIHdhdGNoIGl0IGFnYWluLiBBbHNvLCB0aGlzIHNldCBpcyBpbml0aWFs
aXplZCBjbGVhciwgYW5kIGlzIG5ldmVyIGV4cG9zZWQgdG8gdGhlIERGRwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyMjU3MjUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDAsMTEgKzM0MCwxMiBA
QCBwdWJsaWM6CiAgICAgSXNvU3Vic3BhY2UgZGlyZWN0RXZhbEV4ZWN1dGFibGVTcGFjZTsKICAg
ICBJc29TdWJzcGFjZSBmdW5jdGlvbkV4ZWN1dGFibGVTcGFjZTsKICAgICBJc29TdWJzcGFjZSBp
bmRpcmVjdEV2YWxFeGVjdXRhYmxlU3BhY2U7Ci0gICAgSXNvU3Vic3BhY2UgaW5mZXJyZWRTdHJ1
Y3R1cmVTcGFjZTsKICAgICBJc29TdWJzcGFjZSBpbmZlcnJlZFR5cGVTcGFjZTsKICAgICBJc29T
dWJzcGFjZSBtb2R1bGVQcm9ncmFtRXhlY3V0YWJsZVNwYWNlOwogICAgIElzb1N1YnNwYWNlIG5h
dGl2ZUV4ZWN1dGFibGVTcGFjZTsKICAgICBJc29TdWJzcGFjZSBwcm9ncmFtRXhlY3V0YWJsZVNw
YWNlOworICAgIAorICAgIElzb0NlbGxTZXQgaW5mZXJyZWRUeXBlc1dpdGhGaW5hbGl6ZXJzOwog
CiAgICAgVk1UeXBlIHZtVHlwZTsKICAgICBDbGllbnREYXRhKiBjbGllbnREYXRhOwpJbmRleDog
U291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjU3MjUp
CisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0yMzksNiArMjM5LDggQEAKIAkJMEZCMTRFMTgxODBGQTIxODAwOUI2QjREIC8qIEJh
Zy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCYWcuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZCMTRFMUExODEwRTFEQTAwOUI2QjREIC8qIEJhZ1RvSGFzaE1h
cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBCYWdUb0hhc2hNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZCMzE3QzMxQzQ4ODAwMTAwN0UzOTVBIC8qIFN5c3RlbVRyYWNpbmcuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3lzdGVtVHJhY2luZy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkI0Njc4MjFGREUyODJCMDAzRkNCMDkgLyogQ29uY3VycmVu
dEJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25jdXJyZW50QnVm
ZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjQ2NzgzMUZERTI4MkMwMDNG
Q0IwOSAvKiBDb25jdXJyZW50VmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENvbmN1cnJlbnRWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZD
NDQ4ODIxNkZFOUZFMTAwODQ0QkU5IC8qIFByb2Nlc3NJRC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQcm9jZXNzSUQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZDNEVERTUxNjk2MTQ5NjAwRjY1MDQxIC8qIENvbW1hUHJpbnRlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDb21tYVByaW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZEODFBQzQxNTRGQjIyRTAwOTgzRTcyIC8qIEZhc3RCaXRWZWN0b3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmFzdEJpdFZlY3Rvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtODA4LDggKzgxMCwxMCBAQAogCQkJCTBGOEYyQjkwMTcyRTAw
RjAwMDdEQkRBNSAvKiBDb21waWxhdGlvblRocmVhZC5oICovLAogCQkJCUE4QTQ3MjcwMTUxQTgy
NUEwMDQxMjNGRiAvKiBDb21waWxlci5oICovLAogCQkJCTQ2QkE5RUFCMUY0Q0Q2MUUwMDlBMkJC
QyAvKiBDb21wbGV0aW9uSGFuZGxlci5oICovLAorCQkJCTBGQjQ2NzgyMUZERTI4MkIwMDNGQ0Iw
OSAvKiBDb25jdXJyZW50QnVmZmVyLmggKi8sCiAJCQkJMEYzMENCNTgxRkNERjEzMzAwNEI1MzIz
IC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCAqLywKIAkJCQkwRjMwQ0I1OTFGQ0RGMTMzMDA0
QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuaCAqLywKKwkJCQkwRkI0Njc4MzFGREUyODJD
MDAzRkNCMDkgLyogQ29uY3VycmVudFZlY3Rvci5oICovLAogCQkJCTBGREI2OThEMUI3QzY0M0Ew
MDBDMTA3OCAvKiBDb25kaXRpb24uaCAqLywKIAkJCQkwRkZCQ0JGQTFGRDM3RTBGMDA3MkFBRjAg
LyogQ291bnRpbmdMb2NrLmggKi8sCiAJCQkJMEY4RTg1REExRkQ0ODVCMDAwNjkxODg5IC8qIENv
dW50aW5nTG9jay5jcHAgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Db25jdXJyZW50QnVmZmVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ29uY3VycmVudEJ1ZmZlci5oCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRCdWZmZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+Cisj
aW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5o
PgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gQ29uY3VycmVu
dEJ1ZmZlciBpcyBzdWl0YWJsZSBmb3Igd2hlbiB5b3UgcGxhbiB0byBzdG9yZSBpbW11dGFibGUg
ZGF0YSBhbmQgc29tZXRpbWVzIGFwcGVuZCB0byBpdC4KKy8vIEl0IHN1cHBvcnRzIHN0b3Jpbmcg
ZGF0YSB0aGF0IGlzIG5vdCBjb3B5LWNvbnN0cnVjdGFibGUgYnV0IGJpdC1jb3B5YWJsZS4KK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBDb25jdXJyZW50QnVmZmVyIHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShDb25jdXJyZW50QnVmZmVyKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICAKKyAgICBDb25jdXJyZW50QnVmZmVyKCkKKyAgICB7CisgICAg
fQorICAgIAorICAgIH5Db25jdXJyZW50QnVmZmVyKCkKKyAgICB7CisgICAgICAgIEFycmF5KiBh
cnJheSA9IG1fYXJyYXk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyAr
K2kpCisgICAgICAgICAgICBhcnJheS0+ZGF0YVtpXS5+VCgpOworICAgICAgICBmb3IgKEFycmF5
KiBhcnJheSA6IG1fYWxsQXJyYXlzKQorICAgICAgICAgICAgZmFzdEZyZWUoYXJyYXkpOworICAg
IH0KKworICAgIC8vIEdyb3dpbmcgaXMgbm90IGNvbmN1cnJlbnQuIFRoaXMgYXNzdW1lcyB5b3Ug
YXJlIGhvbGRpbmcgc29tZSBvdGhlciBsb2NrIGJlZm9yZSB5b3UgZG8gdGhpcy4KKyAgICB2b2lk
IGdyb3dFeGFjdChzaXplX3QgbmV3U2l6ZSkKKyAgICB7CisgICAgICAgIEFycmF5KiBhcnJheSA9
IG1fYXJyYXk7CisgICAgICAgIGlmIChuZXdTaXplIDw9IGFycmF5LT5zaXplKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBBcnJheSogbmV3QXJyYXkgPSBjcmVhdGVBcnJheShuZXdTaXpl
KTsKKyAgICAgICAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gZG8gQ29uY3VycmVudEJ1ZmZlcjxzdGQ6
OnVuaXF1ZV9wdHI8Pj4uCisgICAgICAgIG1lbWNweShuZXdBcnJheS0+ZGF0YSwgYXJyYXktPmRh
dGEsIHNpemVvZihUKSAqIGFycmF5LT5zaXplKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
YXJyYXktPnNpemU7IGkgPCBuZXdTaXplOyArK2kpCisgICAgICAgICAgICBuZXcgKHJlc3VsdC0+
ZGF0YSArIGkpIFQoKTsKKyAgICAgICAgbV9hcnJheSA9IG5ld0FycmF5OworICAgICAgICBXVEY6
OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICBtX3NpemUgPSBuZXdTaXplOworICAgICAgICBt
X2FsbEFycmF5cy5hcHBlbmQobmV3QXJyYXkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGdyb3co
c2l6ZV90IG5ld1NpemUpCisgICAgeworICAgICAgICBzaXplX3Qgc2l6ZSA9IG1fYXJyYXktPnNp
emU7CisgICAgICAgIGlmIChuZXdTaXplIDw9IHNpemUpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIGdyb3dFeGFjdChzdGQ6Om1heChuZXdTaXplLCBzaXplICsgc2l6ZSAvIDQgKyAxKSk7
CisgICAgfQorICAgIAorICAgIHN0cnVjdCBBcnJheSB7CisgICAgICAgIHVuc2lnbmVkIHNpemU7
IC8vIFRoaXMgaXMgYW4gaW1tdXRhYmxlIHNpemUuCisgICAgICAgIFQgZGF0YVsxXTsKKyAgICB9
OworICAgIAorICAgIEFycmF5KiBhcnJheSgpIGNvbnN0IHsgcmV0dXJuIG1fYXJyYXk7IH0KKyAg
ICAKKyAgICBUJiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV9hcnJheS0+ZGF0
YVtpbmRleF07IH0KKyAgICBjb25zdCBUJiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gbV9hcnJheS0+ZGF0YVtpbmRleF07IH0KKyAgICAKK3ByaXZhdGU6CisgICAgQXJy
YXkqIGNyZWF0ZUFycmF5KHVuc2lnbmVkIHNpemUpCisgICAgeworICAgICAgICBBcnJheSogcmVz
dWx0ID0gc3RhdGljX2Nhc3Q8QXJyYXkqPihmYXN0TWFsbG9jKE9CSkVDVF9PRkZTRVRPRihBcnJh
eSwgZGF0YSkgKyBzaXplb2YoVCkgKiBzaXplKSk7CisgICAgICAgIHJlc3VsdC0+c2l6ZSA9IHNp
emU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIEFycmF5KiBtX2Fy
cmF5IHsgbnVsbHB0ciB9OworICAgIFZlY3RvcjxBcnJheSo+IG1fYWxsQXJyYXlzOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRWZWN0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Db25jdXJyZW50VmVjdG9yLmgJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvQ29uY3VycmVudFZlY3Rvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMjUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0
aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgQ29uY3VycmVudFZlY3Rvcl9oCisjZGVmaW5lIENvbmN1
cnJlbnRWZWN0b3JfaAorCisjaW5jbHVkZSA8d3RmL0NvbmN1cnJlbnRCdWZmZXIuaD4KKyNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8vIEFuIGl0ZXJh
dG9yIGZvciBDb25jdXJyZW50VmVjdG9yLiBJdCBzdXBwb3J0cyBvbmx5IHRoZSBwcmUgKysgb3Bl
cmF0b3IKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXplX3QgU2VnbWVudFNpemUgPSA4PiBjbGFz
cyBDb25jdXJyZW50VmVjdG9yOwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNpemVfdCBTZWdtZW50
U2l6ZSA9IDg+IGNsYXNzIENvbmN1cnJlbnRWZWN0b3JJdGVyYXRvciB7Citwcml2YXRlOgorICAg
IGZyaWVuZCBjbGFzcyBDb25jdXJyZW50VmVjdG9yPFQsIFNlZ21lbnRTaXplPjsKK3B1YmxpYzoK
KyAgICB0eXBlZGVmIENvbmN1cnJlbnRWZWN0b3JJdGVyYXRvcjxULCBTZWdtZW50U2l6ZT4gSXRl
cmF0b3I7CisKKyAgICB+Q29uY3VycmVudFZlY3Rvckl0ZXJhdG9yKCkgeyB9CisKKyAgICBUJiBv
cGVyYXRvciooKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5hdChtX2luZGV4KTsgfQorICAgIFQq
IG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmbV92ZWN0b3IuYXQobV9pbmRleCk7IH0KKwor
ICAgIC8vIE9ubHkgcHJlZml4ICsrIG9wZXJhdG9yIHN1cHBvcnRlZAorICAgIEl0ZXJhdG9yJiBv
cGVyYXRvcisrKCkKKyAgICB7CisgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgcmV0dXJuICp0
aGlzOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJdGVyYXRvciYgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4ICYm
ICZtX3ZlY3RvciA9PSAmb3RoZXIubV92ZWN0b3I7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IEl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X2luZGV4ICE9IG90aGVyLm1faW5kZXggfHwgJm1fdmVjdG9yICE9ICZvdGhlci5tX3ZlY3RvcjsK
KyAgICB9CisKKyAgICBDb25jdXJyZW50VmVjdG9ySXRlcmF0b3ImIG9wZXJhdG9yPShjb25zdCBD
b25jdXJyZW50VmVjdG9ySXRlcmF0b3I8VCwgU2VnbWVudFNpemU+JiBvdGhlcikKKyAgICB7Cisg
ICAgICAgIG1fdmVjdG9yID0gb3RoZXIubV92ZWN0b3I7CisgICAgICAgIG1faW5kZXggPSBvdGhl
ci5tX2luZGV4OworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCitwcml2YXRlOgorICAg
IENvbmN1cnJlbnRWZWN0b3JJdGVyYXRvcihDb25jdXJyZW50VmVjdG9yPFQsIFNlZ21lbnRTaXpl
PiYgdmVjdG9yLCBzaXplX3QgaW5kZXgpCisgICAgICAgIDogbV92ZWN0b3IodmVjdG9yKQorICAg
ICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgeworICAgIH0KKworICAgIENvbmN1cnJlbnRWZWN0
b3I8VCwgU2VnbWVudFNpemU+JiBtX3ZlY3RvcjsKKyAgICBzaXplX3QgbV9pbmRleDsKK307CisK
Ky8vIENvbmN1cnJlbnRWZWN0b3IgaXMgbGlrZSBTZWdtZW50ZWRWZWN0b3IsIGJ1dCBzdWl0YWJs
ZSBmb3Igc2NlbmFyaW9zIHdoZXJlIG9uZSB0aHJlYWQgYXBwZW5kcworLy8gZWxlbWVudHMgYW5k
IGFub3RoZXIgdGhyZWFkIGNvbnRpbnVlcyB0byBhY2Nlc3MgZWxlbWVudHMgYXQgbG93ZXIgaW5k
aWNlcy4gT25seSBvbmUgdGhyZWFkIGNhbgorLy8gYXBwZW5kIGF0IGEgdGltZSwgc28gdGhhdCBh
Y3Rpdml0eSBzdGlsbCBuZWVkcyBsb2NraW5nLgordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNpemVf
dCBTZWdtZW50U2l6ZT4KK2NsYXNzIENvbmN1cnJlbnRWZWN0b3IgeworICAgIGZyaWVuZCBjbGFz
cyBDb25jdXJyZW50VmVjdG9ySXRlcmF0b3I8VCwgU2VnbWVudFNpemU+OworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKENvbmN1cnJlbnRWZWN0b3IpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworCitwdWJsaWM6CisgICAgdHlwZWRlZiBDb25jdXJyZW50VmVjdG9ySXRlcmF0b3I8VCwg
U2VnbWVudFNpemU+IEl0ZXJhdG9yOworCisgICAgQ29uY3VycmVudFZlY3RvcigpID0gZGVmYXVs
dDsKKworICAgIH5Db25jdXJyZW50VmVjdG9yKCkKKyAgICB7CisgICAgfQorCisgICAgc2l6ZV90
IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBib29sIGlzRW1wdHkoKSBjb25z
dCB7IHJldHVybiAhc2l6ZSgpOyB9CisKKyAgICBUJiBhdChzaXplX3QgaW5kZXgpCisgICAgewor
ICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpbmRleCA8IG1fc2l6ZSk7
CisgICAgICAgIHJldHVybiBzZWdtZW50Rm9yKGluZGV4KS0+ZW50cmllc1tzdWJzY3JpcHRGb3Io
aW5kZXgpXTsKKyAgICB9CisKKyAgICBjb25zdCBUJiBhdChzaXplX3QgaW5kZXgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxDb25jdXJyZW50VmVjdG9yPFQsIFNlZ21l
bnRTaXplPio+KHRoaXMpLT5hdChpbmRleCk7CisgICAgfQorCisgICAgVCYgb3BlcmF0b3JbXShz
aXplX3QgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gYXQoaW5kZXgpOworICAgIH0KKwor
ICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGF0KGluZGV4KTsKKyAgICB9CisKKyAgICBUJiBmaXJzdCgpCisgICAgeworICAg
ICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighaXNFbXB0eSgpKTsKKyAgICAg
ICAgcmV0dXJuIGF0KDApOworICAgIH0KKyAgICBjb25zdCBUJiBmaXJzdCgpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighaXNFbXB0eSgpKTsK
KyAgICAgICAgcmV0dXJuIGF0KDApOworICAgIH0KKyAgICBUJiBsYXN0KCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFpc0VtcHR5KCkpOworICAgICAg
ICByZXR1cm4gYXQoc2l6ZSgpIC0gMSk7CisgICAgfQorICAgIGNvbnN0IFQmIGxhc3QoKSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIWlzRW1w
dHkoKSk7CisgICAgICAgIHJldHVybiBhdChzaXplKCkgLSAxKTsKKyAgICB9CisKKyAgICBUIHRh
a2VMYXN0KCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9O
KCFpc0VtcHR5KCkpOworICAgICAgICBUIHJlc3VsdCA9IFdURk1vdmUobGFzdCgpKTsKKyAgICAg
ICAgLS1tX3NpemU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUuLi4gQXJncz4KKyAgICB2b2lkIGFwcGVuZChBcmdzJiYuLi4gYXJncykKKyAg
ICB7CisgICAgICAgICsrbV9zaXplOworICAgICAgICBpZiAoIXNlZ21lbnRFeGlzdHNGb3IobV9z
aXplIC0gMSkpCisgICAgICAgICAgICBhbGxvY2F0ZVNlZ21lbnQoKTsKKyAgICAgICAgbmV3IChO
b3ROdWxsLCAmbGFzdCgpKSBUKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CisgICAgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KKyAgICBUJiBhbGxvYyhBcmdzJiYuLi4g
YXJncykKKyAgICB7CisgICAgICAgIGFwcGVuZChzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4p
OworICAgICAgICByZXR1cm4gbGFzdCgpOworICAgIH0KKworICAgIHZvaWQgcmVtb3ZlTGFzdCgp
CisgICAgeworICAgICAgICBsYXN0KCkuflQoKTsKKyAgICAgICAgLS1tX3NpemU7CisgICAgfQor
CisgICAgdm9pZCBncm93KHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHNpemUg
PiBtX3NpemUpOworICAgICAgICBlbnN1cmVTZWdtZW50c0ZvcihzaXplKTsKKyAgICAgICAgc2l6
ZV90IG9sZFNpemUgPSBtX3NpemU7CisgICAgICAgIG1fc2l6ZSA9IHNpemU7CisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSBvbGRTaXplOyBpIDwgbV9zaXplOyArK2kpCisgICAgICAgICAgICBuZXcg
KE5vdE51bGwsICZhdChpKSkgVCgpOworICAgIH0KKworICAgIEl0ZXJhdG9yIGJlZ2luKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBJdGVyYXRvcigqdGhpcywgMCk7CisgICAgfQorCisgICAgSXRl
cmF0b3IgZW5kKCkKKyAgICB7CisgICAgICAgIHJldHVybiBJdGVyYXRvcigqdGhpcywgbV9zaXpl
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RydWN0IFNlZ21lbnQgeworICAgICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICAgICAgICAgIAorICAgICAgICBUIGVudHJpZXNbU2Vn
bWVudFNpemVdOworICAgIH07CisKKyAgICBib29sIHNlZ21lbnRFeGlzdHNGb3Ioc2l6ZV90IGlu
ZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGluZGV4IC8gU2VnbWVudFNpemUgPCBtX251bVNl
Z21lbnRzOworICAgIH0KKworICAgIFNlZ21lbnQqIHNlZ21lbnRGb3Ioc2l6ZV90IGluZGV4KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc2VnbWVudHNbaW5kZXggLyBTZWdtZW50U2l6ZV07Cisg
ICAgfQorCisgICAgc2l6ZV90IHN1YnNjcmlwdEZvcihzaXplX3QgaW5kZXgpCisgICAgeworICAg
ICAgICByZXR1cm4gaW5kZXggJSBTZWdtZW50U2l6ZTsKKyAgICB9CisKKyAgICB2b2lkIGVuc3Vy
ZVNlZ21lbnRzRm9yKHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgICAgc2l6ZV90IHNlZ21lbnRD
b3VudCA9IChtX3NpemUgKyBTZWdtZW50U2l6ZSAtIDEpIC8gU2VnbWVudFNpemU7CisgICAgICAg
IHNpemVfdCBuZWVkZWRTZWdtZW50Q291bnQgPSAoc2l6ZSArIFNlZ21lbnRTaXplIC0gMSkgLyBT
ZWdtZW50U2l6ZTsKKworICAgICAgICBmb3IgKHNpemVfdCBpID0gc2VnbWVudENvdW50ID8gc2Vn
bWVudENvdW50IC0gMSA6IDA7IGkgPCBuZWVkZWRTZWdtZW50Q291bnQ7ICsraSkKKyAgICAgICAg
ICAgIGVuc3VyZVNlZ21lbnQoaSk7CisgICAgfQorCisgICAgdm9pZCBlbnN1cmVTZWdtZW50KHNp
emVfdCBzZWdtZW50SW5kZXgpCisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTihzZWdtZW50SW5kZXggPD0gbV9udW1TZWdtZW50cyk7CisgICAgICAgIGlmIChz
ZWdtZW50SW5kZXggPT0gbV9udW1TZWdtZW50cykKKyAgICAgICAgICAgIGFsbG9jYXRlU2VnbWVu
dCgpOworICAgIH0KKworICAgIHZvaWQgYWxsb2NhdGVTZWdtZW50KCkKKyAgICB7CisgICAgICAg
IG1fc2VnbWVudHMuZ3JvdyhtX251bVNlZ21lbnRzICsgMSk7CisgICAgICAgIG1fc2VnbWVudHNb
bV9udW1TZWdtZW50cysrXSA9IHN0ZDo6bWFrZV91bmlxdWU8U2VnbWVudD4oKTsKKyAgICB9CisK
KyAgICBzaXplX3QgbV9zaXplIHsgMCB9OworICAgIENvbmN1cnJlbnRCdWZmZXI8c3RkOjp1bmlx
dWVfcHRyPFNlZ21lbnQ+PiBtX3NlZ21lbnRzOworICAgIHNpemVfdCBtX251bVNlZ21lbnRzOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6Q29uY3VycmVudFZlY3RvcjsK
KworI2VuZGlmIC8vIENvbmN1cnJlbnRWZWN0b3JfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329014</attachid>
            <date>2017-12-11 12:15:30 -0800</date>
            <delta_ts>2017-12-11 15:21:15 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>62641</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDIyNTcyNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNDk1LDYg
KzQ5NSw3IEBAIGhlYXAvSGVhcFNuYXBzaG90LmNwcAogaGVhcC9IZWFwU25hcHNob3RCdWlsZGVy
LmNwcAogaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwCiBoZWFwL0lzb0FsaWduZWRNZW1vcnlB
bGxvY2F0b3IuY3BwCitoZWFwL0lzb0NlbGxTZXQuY3BwCiBoZWFwL0lzb1N1YnNwYWNlLmNwcAog
aGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAKIGhlYXAvTGFyZ2VBbGxvY2F0aW9uLmNwcApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyNTcyNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC00NzQsNiArNDc0LDkgQEAKIAkJMEZCMTc2NjMxOTZCOEY5RTAw
OTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZCMTc2NUYxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5o
ICovOyB9OwogCQkwRkIzODc4RTFCRkJDNDREMDBFM0FCMUUgLyogQWlyQmxvY2tXb3JrbGlzdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMzg3OEIx
QkZCQzQ0RDAwRTNBQjFFIC8qIEFpckJsb2NrV29ya2xpc3QuaCAqLzsgfTsKIAkJMEZCMzg3OTAx
QkZCQzQ0RDAwRTNBQjFFIC8qIEFpck9wdGltaXplQmxvY2tPcmRlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMzg3OEQxQkZCQzQ0RDAwRTNBQjFF
IC8qIEFpck9wdGltaXplQmxvY2tPcmRlci5oICovOyB9OworCQkwRkI0Njc3RjFGRERBNkU5MDAz
RkNCMDkgLyogQXRvbUluZGljZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQjQ2NzdFMUZEREE2RTUwMDNGQ0IwOSAvKiBBdG9tSW5kaWNlcy5oICov
OyB9OworCQkwRkI0Njc4MDFGRERBNkYxMDAzRkNCMDkgLyogSXNvQ2VsbFNldC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNDY3N0QxRkREQTZEOTAw
M0ZDQjA5IC8qIElzb0NlbGxTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkwRkI0Njc4MTFGRERBNkY3MDAzRkNCMDkgLyogSXNvQ2VsbFNldElu
bGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QjQ2NzdCMUZEREE2RDgwMDNGQ0IwOSAvKiBJc29DZWxsU2V0SW5saW5lcy5oICovOyB9OwogCQkw
RkI0NzY3RTFEOTlBRUE5MDA4RUE2Q0IgLyogR0NEZWZlcnJhbENvbnRleHQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjQ3NjdDMUQ5OUFFQTcwMDhF
QTZDQiAvKiBHQ0RlZmVycmFsQ29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGQjQ3NjdGMUQ5OUFFQUQwMDhFQTZDQiAvKiBHQ0RlZmVy
cmFsQ29udGV4dElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQjQ3NjdEMUQ5OUFFQTcwMDhFQTZDQiAvKiBHQ0RlZmVycmFsQ29udGV4dElu
bGluZXMuaCAqLzsgfTsKIAkJMEZCNEZCNzQxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlTbG93
UGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZC
NEZCNzExQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aC5oICovOyB9OwpAQCAtMjU2
Miw2ICsyNTY1LDEwIEBACiAJCTBGQjM4NzkxMUJGRDMxQTEwMEUzQUIxRSAvKiBGVExDb21waWxl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTENvbXBpbGUuY3Bw
OyBwYXRoID0gZnRsL0ZUTENvbXBpbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkI0MTU4MzFENzhGOTgyMDBERjhEMDkgLyogQXJyYXlDb252ZW50aW9ucy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcnJheUNvbnZlbnRpb25zLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNDM4QTIxOTI3MEIxRDAwRTFGQkM5IC8qIFN0
cnVjdHVyZVNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJ1
Y3R1cmVTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI0Njc3QjFGRERB
NkQ4MDAzRkNCMDkgLyogSXNvQ2VsbFNldElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSXNvQ2VsbFNldElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZCNDY3N0MxRkREQTZEOTAwM0ZDQjA5IC8qIElzb0NlbGxTZXQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSXNvQ2VsbFNldC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGQjQ2NzdEMUZEREE2RDkwMDNGQ0IwOSAvKiBJc29DZWxsU2V0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElzb0NlbGxTZXQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCNDY3N0UxRkREQTZFNTAwM0ZDQjA5IC8qIEF0b21J
bmRpY2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF0b21JbmRpY2VzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjQ3NjdDMUQ5OUFFQTcwMDhFQTZDQiAv
KiBHQ0RlZmVycmFsQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBH
Q0RlZmVycmFsQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0NzY3
RDFEOTlBRUE3MDA4RUE2Q0IgLyogR0NEZWZlcnJhbENvbnRleHRJbmxpbmVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDRGVmZXJyYWxDb250ZXh0SW5saW5lcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0QjUxMDE2QjNBOTY0MDAzRjY5NkIgLyogREZH
TWluaWZpZWRJRC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdNaW5pZmll
ZElELmg7IHBhdGggPSBkZmcvREZHTWluaWZpZWRJRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNTUyNSw2ICs1NTMyLDcgQEAKIAkJCQkwRjk2MzAzNTFENDE5MkMzMDA1NjA5RDkg
LyogQWxsb2NhdG9yQXR0cmlidXRlcy5jcHAgKi8sCiAJCQkJMEY5NjMwMzYxRDQxOTJDMzAwNTYw
OUQ5IC8qIEFsbG9jYXRvckF0dHJpYnV0ZXMuaCAqLywKIAkJCQkwRjMwQ0I1RDFGQ0U0NkI0MDA0
QjUzMjMgLyogQWxsb2NhdG9yRm9yTW9kZS5oICovLAorCQkJCTBGQjQ2NzdFMUZEREE2RTUwMDNG
Q0IwOSAvKiBBdG9tSW5kaWNlcy5oICovLAogCQkJCTBGREU4N0Y4MURGRDBDNkQwMDY0QzM5MCAv
KiBDZWxsQ29udGFpbmVyLmNwcCAqLywKIAkJCQkwRjA3MEE0MjFENTQzQTg5MDA2RTcyMzIgLyog
Q2VsbENvbnRhaW5lci5oICovLAogCQkJCTBGMDcwQTQzMUQ1NDNBODkwMDZFNzIzMiAvKiBDZWxs
Q29udGFpbmVySW5saW5lcy5oICovLApAQCAtNTYxMSw2ICs1NjE5LDkgQEAKIAkJCQlDMjVGOEJD
QzE1NzU0NEE5MDAyNDVCNzEgLyogSW5jcmVtZW50YWxTd2VlcGVyLmggKi8sCiAJCQkJMEZEQ0Ux
MkYxRkIxMUQ5RDAwNkYzOTAxIC8qIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwICovLAog
CQkJCTBGRENFMTMwMUZCMTFEOUQwMDZGMzkwMSAvKiBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9y
LmggKi8sCisJCQkJMEZCNDY3N0MxRkREQTZEOTAwM0ZDQjA5IC8qIElzb0NlbGxTZXQuY3BwICov
LAorCQkJCTBGQjQ2NzdEMUZEREE2RDkwMDNGQ0IwOSAvKiBJc29DZWxsU2V0LmggKi8sCisJCQkJ
MEZCNDY3N0IxRkREQTZEODAwM0ZDQjA5IC8qIElzb0NlbGxTZXRJbmxpbmVzLmggKi8sCiAJCQkJ
MEZEQ0UxMkMxRkFGQjRERTAwNkYzOTAxIC8qIElzb1N1YnNwYWNlLmNwcCAqLywKIAkJCQkwRkRD
RTEyQjFGQUZCNERFMDA2RjM5MDEgLyogSXNvU3Vic3BhY2UuaCAqLywKIAkJCQkwRjc2NkQyOTE1
QThDQzM0MDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuY3BwICovLApAQCAtNzk5Nyw2ICs4
MDA4LDcgQEAKIAkJCQkwRkVDODU3MjFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQzYzQkMxRTYzNDQwQzAwQzEzODM5IC8qIEFpckJsb2Nr
SW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkIzODc4RTFCRkJDNDREMDBFM0FC
MUUgLyogQWlyQmxvY2tXb3JrbGlzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCNDY3ODExRkRE
QTZGNzAwM0ZDQjA5IC8qIElzb0NlbGxTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
Rjc5QzdDQTFFNzRDOTNCMDBFQjM0RDEgLyogQWlyQnJlYWtDcml0aWNhbEVkZ2VzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjYxODMyQTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252
ZW50aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODU3NDFCREFDREM3MDA4MEZGNzQgLyog
QWlyQ0NhbGxTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKQEAgLTg5NzMsNiArODk4NSw3IEBACiAJ
CQkJQUQyRkNCRTUxREI1OERBRDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQURFODAyOTkxRTA4RjFERTAwNThERTc4IC8qIEpTV2ViQXNzZW1i
bHlMaW5rRXJyb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQkU3MURCNThEQUQwMEIzRTcz
NiAvKiBKU1dlYkFzc2VtYmx5TWVtb3J5LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkI0Njc3RjFG
RERBNkU5MDAzRkNCMDkgLyogQXRvbUluZGljZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZD
QzA1MURCNThEQUQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5TW9kdWxlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBRDJGQ0JFOTFEQjU4REFEMDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseVJ1bnRpbWVF
cnJvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNCRUIxREI1OERBRDAwQjNFNzM2IC8qIEpT
V2ViQXNzZW1ibHlUYWJsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05MjU5LDYgKzkyNzIsNyBAQAog
CQkJCUMyMEJBOTJEMTZCQjFDMTUwMEIzQUVBMiAvKiBTdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTMzMkE1MTRDQTdEREQwMDg1RjNDNiAvKiBTdHJ1Y3R1
cmVTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzY2RDM5MTVBRTRBMUYwMDhGMzYzRSAvKiBT
dHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkI0
Njc4MDFGRERBNkYxMDAzRkNCMDkgLyogSXNvQ2VsbFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkNDRjBEMDgwRUYwQUFCOTAwNDEzQzhGIC8qIFN0cnVjdHVyZVN0dWJJbmZvLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzkwNDE0ODBFQjkyNTA5MDBGRTI2RkEgLyogU3RydWN0dXJlVHJhbnNpdGlv
blRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjdERjEzNzFFMjk3MEUxMDA5NTk1MUIgLyog
U3Vic3BhY2UuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQXRvbUluZGljZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9BdG9tSW5kaWNlcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0F0b21JbmRpY2VzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitzdHJ1Y3QgQXRv
bUluZGljZXMgeworICAgIEF0b21JbmRpY2VzKCkgeyB9CisgICAgCisgICAgQXRvbUluZGljZXMo
SGVhcENlbGwqIGNlbGwpCisgICAgICAgIDogYmxvY2soTWFya2VkQmxvY2s6OmJsb2NrRm9yKGNl
bGwpKQorICAgICAgICAsIGJsb2NrSW5kZXgoYmxvY2stPmhhbmRsZSgpLmluZGV4KCkpCisgICAg
ICAgICwgYXRvbU51bWJlcihibG9jay0+YXRvbU51bWJlcihjZWxsKSkKKyAgICB7CisgICAgfQor
ICAgIAorICAgIE1hcmtlZEJsb2NrKiBibG9jazsKKyAgICBzaXplX3QgYmxvY2tJbmRleDsKKyAg
ICBzaXplX3QgYXRvbU51bWJlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjI1NzI1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQy
LDcgQEAKICNpbmNsdWRlICJJbmNyZW1lbnRhbFN3ZWVwZXIuaCIKICNpbmNsdWRlICJJbmZlcnJl
ZFN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCisjaW5jbHVkZSAiSXNvQ2Vs
bFNldElubGluZXMuaCIKICNpbmNsdWRlICJKSVRTdHViUm91dGluZVNldC5oIgogI2luY2x1ZGUg
IkpJVFdvcmtsaXN0LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgpAQCAtNTUyLDE4ICs1NTMs
MTggQEAgdm9pZCBIZWFwOjphZGRSZWZlcmVuY2UoSlNDZWxsKiBjZWxsLCBBcgogICAgIH0KIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGU+Ci12b2lkIEhlYXA6OmZpbmFsaXplVW5jb25k
aXRpb25hbEZpbmFsaXplcnMoU3Vic3BhY2UmIHN1YnNwYWNlKQordGVtcGxhdGU8dHlwZW5hbWUg
Q2VsbFR5cGUsIHR5cGVuYW1lIENlbGxTZXQ+Cit2b2lkIEhlYXA6OmZpbmFsaXplVW5jb25kaXRp
b25hbEZpbmFsaXplcnMoQ2VsbFNldCYgY2VsbFNldCkKIHsKLSAgICBzdWJzcGFjZS5mb3JFYWNo
TWFya2VkQ2VsbCgKKyAgICBjZWxsU2V0LmZvckVhY2hNYXJrZWRDZWxsKAogICAgICAgICBbJl0g
KEhlYXBDZWxsKiBjZWxsLCBIZWFwQ2VsbDo6S2luZCkgewotICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8Q2VsbFR5cGUqPihjZWxsKS0+ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKnZtKCkpOworICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENlbGxUeXBlKj4oY2VsbCktPmZpbmFsaXplVW5j
b25kaXRpb25hbGx5KCp2bSgpKTsKICAgICAgICAgfSk7CiB9CiAKIHZvaWQgSGVhcDo6ZmluYWxp
emVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpCiB7Ci0gICAgZmluYWxpemVVbmNvbmRpdGlvbmFs
RmluYWxpemVyczxJbmZlcnJlZFN0cnVjdHVyZT4odm0oKS0+aW5mZXJyZWRTdHJ1Y3R1cmVTcGFj
ZSk7CisgICAgZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVyczxJbmZlcnJlZFR5cGU+KHZt
KCktPmluZmVycmVkVHlwZXNXaXRoRmluYWxpemVycyk7CiAgICAgCiAgICAgd2hpbGUgKG1fdW5j
b25kaXRpb25hbEZpbmFsaXplcnMuaGFzTmV4dCgpKSB7CiAgICAgICAgIFVuY29uZGl0aW9uYWxG
aW5hbGl6ZXIqIGZpbmFsaXplciA9IG1fdW5jb25kaXRpb25hbEZpbmFsaXplcnMucmVtb3ZlTmV4
dCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjI1NzI1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
OTYsOCArNDk2LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIG5vdGlmeUluY3JlbWVudGFsU3dlZXBl
cigpOwogICAgIHZvaWQgaGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7CiAKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDZWxsVHlwZT4KLSAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXpl
cnMoU3Vic3BhY2UmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgdHlwZW5hbWUg
Q2VsbFNldD4KKyAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMoQ2VsbFNl
dCYpOwogICAgIAogICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpOwog
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5jcHAJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSXNv
Q2VsbFNldC5oIgorCisjaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworSXNvQ2VsbFNldDo6SXNvQ2VsbFNldChJc29TdWJzcGFjZSYgc3Vic3Bh
Y2UpCisgICAgOiBtX3N1YnNwYWNlKHN1YnNwYWNlKQoreworICAgIHNpemVfdCBzaXplID0gc3Vi
c3BhY2UubV9hbGxvY2F0b3IubV9ibG9ja3Muc2l6ZSgpOworICAgIG1fYmxvY2tzV2l0aEJpdHMu
cmVzaXplKHNpemUpOworICAgIG1fYml0cy5ncm93KHNpemUpOworICAgIHN1YnNwYWNlLm1fY2Vs
bFNldHMuYXBwZW5kKHRoaXMpOworfQorCitJc29DZWxsU2V0Ojp+SXNvQ2VsbFNldCgpCit7Cisg
ICAgaWYgKGlzT25MaXN0KCkpCisgICAgICAgIEJhc2ljUmF3U2VudGluZWxOb2RlPElzb0NlbGxT
ZXQ+OjpyZW1vdmUoKTsKK30KKworTkVWRVJfSU5MSU5FIEJpdG1hcDxNYXJrZWRCbG9jazo6YXRv
bXNQZXJCbG9jaz4qIElzb0NlbGxTZXQ6OmFkZFNsb3coc2l6ZV90IGJsb2NrSW5kZXgpCit7Cisg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3N1YnNwYWNlLm1fYWxsb2NhdG9yLm1fYml0dmVj
dG9yTG9jayk7CisgICAgYXV0byYgYml0c1B0clJlZiA9IG1fYml0c1tibG9ja0luZGV4XTsKKyAg
ICBhdXRvKiBiaXRzID0gYml0c1B0clJlZi5nZXQoKTsKKyAgICBpZiAoIWJpdHMpIHsKKyAgICAg
ICAgbV9ibG9ja3NXaXRoQml0c1tibG9ja0luZGV4XSA9IHRydWU7CisgICAgICAgIGJpdHNQdHJS
ZWYgPSBzdGQ6Om1ha2VfdW5pcXVlPEJpdG1hcDxNYXJrZWRCbG9jazo6YXRvbXNQZXJCbG9jaz4+
KCk7CisgICAgICAgIGJpdHMgPSBiaXRzUHRyUmVmLmdldCgpOworICAgIH0KKyAgICByZXR1cm4g
Yml0czsKK30KKwordm9pZCBJc29DZWxsU2V0OjpkaWRSZXNpemVCaXRzKHNpemVfdCBuZXdTaXpl
KQoreworICAgIG1fYmxvY2tzV2l0aEJpdHMucmVzaXplKG5ld1NpemUpOworICAgIG1fYml0cy5n
cm93KG5ld1NpemUpOworfQorCit2b2lkIElzb0NlbGxTZXQ6OmRpZFJlbW92ZUJsb2NrKHNpemVf
dCBibG9ja0luZGV4KQoreworICAgIG1fYmxvY2tzV2l0aEJpdHNbYmxvY2tJbmRleF0gPSBmYWxz
ZTsKKyAgICBtX2JpdHNbYmxvY2tJbmRleF0gPSBudWxscHRyOworfQorCit2b2lkIElzb0NlbGxT
ZXQ6OnN3ZWVwVG9GcmVlTGlzdChNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jaykKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVCghYmxvY2stPmlzQWxsb2NhdGVkKCkpOworICAgIAorICAgIGlmICghbV9i
bG9ja3NXaXRoQml0c1tibG9jay0+aW5kZXgoKV0pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBpZiAoYmxvY2stPmhhc0FueU5ld2x5QWxsb2NhdGVkKCkpIHsKKyAgICAgICAgbV9iaXRzW2Js
b2NrLT5pbmRleCgpXS0+ZmlsdGVyKGJsb2NrLT5uZXdseUFsbG9jYXRlZCgpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChibG9jay0+aXNFbXB0eSgpIHx8IGJsb2NrLT5hcmVN
YXJrc1N0YWxlKCkpIHsKKyAgICAgICAgbV9ibG9ja3NXaXRoQml0c1tibG9jay0+aW5kZXgoKV0g
PSBmYWxzZTsKKyAgICAgICAgbV9iaXRzW2Jsb2NrLT5pbmRleCgpXSA9IG51bGxwdHI7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9iaXRzW2Jsb2NrLT5pbmRleCgpXS0+Zmls
dGVyKGJsb2NrLT5ibG9jaygpLm1hcmtzKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXQuaAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkF0b21JbmRpY2VzLmgiCisjaW5j
bHVkZSA8d3RmL0JpdG1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Db25jdXJyZW50VmVjdG9yLmg+Cisj
aW5jbHVkZSA8d3RmL0Zhc3RCaXRWZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNz
IEhlYXBDZWxsOworY2xhc3MgSXNvU3Vic3BhY2U7CisKKy8vIENyZWF0ZSBhIHNldCBvZiBjZWxs
cyB0aGF0IGFyZSBpbiBhbiBJc29TdWJzcGFjZS4gVGhpcyBhbGxvd3MgY29uY3VycmVudCBPKDEp
IHNldCBpbnNlcnRpb24gYW5kCisvLyByZW1vdmFsLiBFYWNoIHN1Y2ggc2V0IHNob3VsZCBiZSB0
aG91Z2h0IG9mIGFzIGEgMC44JSBpbmNyZWFzZSBpbiBvYmplY3Qgc2l6ZSBmb3Igb2JqZWN0cyBp
biB0aGF0CisvLyBJc29TdWJzcGFjZSAoaXQncyBsaWtlIGFkZGluZyAxIGJpdCBldmVyeSAxNiBi
eXRlcywgb3IgMSBiaXQgZXZlcnkgMTI4IGJpdHMpLgorY2xhc3MgSXNvQ2VsbFNldCA6IHB1Ymxp
YyBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxJc29DZWxsU2V0PiB7CitwdWJsaWM6CisgICAgSXNvQ2Vs
bFNldChJc29TdWJzcGFjZSYgc3Vic3BhY2UpOworICAgIH5Jc29DZWxsU2V0KCk7CisgICAgCisg
ICAgYm9vbCBhZGQoSGVhcENlbGwqIGNlbGwpOworICAgIAorICAgIGJvb2wgcmVtb3ZlKEhlYXBD
ZWxsKiBjZWxsKTsKKyAgICAKKyAgICBib29sIGNvbnRhaW5zKEhlYXBDZWxsKiBjZWxsKSBjb25z
dDsKKyAgICAKKyAgICAvLyBUaGlzIHdpbGwgaGF2ZSB0byBkbyBhIGNvbWJpbmVkIHNlYXJjaCBv
dmVyIHdoYXRldmVyIFN1YnNwYWNlOjpmb3JFYWNoTWFya2VkQ2VsbCB1c2VzIGFuZAorICAgIC8v
IG91ciBtX2Jsb2Nrc1dpdGhCaXRzLgorICAgIC8vIE5PVEU6IEl0J3MgaWxsZWdhbCB0byBjYWxs
IGFkZCgpIG9yIHJlbW92ZSgpIGNvbmN1cnJlbnRseSB0byB0aGlzLCBidXQgc2VsZi1yZW1vdmUo
KSB3aWxsIHdvcmsuCisgICAgLy8gQnV0IGl0J3MgYmV0dGVyIGlmIHlvdSByZXR1cm4gUmVtb3Zl
IGluc3RlYWQuCisgICAgZW51bSBjbGFzcyBGb3JFYWNoUmVzdWx0IHsKKyAgICAgICAgQ29udGlu
dWUsCisgICAgICAgIEJyZWFrLAorICAgICAgICBSZW1vdmVBbmRDb250aW51ZSwKKyAgICAgICAg
UmVtb3ZlQW5kQnJlYWsKKyAgICB9OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAg
dm9pZCBmb3JFYWNoTWFya2VkQ2VsbChjb25zdCBGdW5jJik7CisgICAgCitwcml2YXRlOgorICAg
IGZyaWVuZCBjbGFzcyBJc29TdWJzcGFjZTsKKyAgICAKKyAgICBCaXRtYXA8TWFya2VkQmxvY2s6
OmF0b21zUGVyQmxvY2s+KiBhZGRTbG93KHNpemVfdCBibG9ja0luZGV4KTsKKyAgICAKKyAgICB2
b2lkIGRpZFJlc2l6ZUJpdHMoc2l6ZV90IG5ld1NpemUpOworICAgIHZvaWQgZGlkUmVtb3ZlQmxv
Y2soc2l6ZV90IGJsb2NrSW5kZXgpOworICAgIHZvaWQgc3dlZXBUb0ZyZWVMaXN0KE1hcmtlZEJs
b2NrOjpIYW5kbGUqKTsKKyAgICAKKyAgICBJc29TdWJzcGFjZSYgbV9zdWJzcGFjZTsKKyAgICAK
KyAgICAvLyBJZGVhOiBzd2VlcGluZyB0byBmcmVlLWxpc3QgY2xlYXJzIGJpdHMgZm9yIHRob3Nl
IGNlbGxzIHRoYXQgd2VyZSBmcmVlLWxpc3RlZC4gVGhlIGZpcnN0IHRpbWUKKyAgICAvLyB3ZSBh
ZGQgYSBjZWxsIGluIGEgYmxvY2ssIHRoYXQgYmxvY2sgZ2V0cyBhIGZyZWUtbGlzdC4gVW5sZXNz
IHdlIGRvIHNvbWV0aGluZyB0aGF0IG9idmlvdXNseQorICAgIC8vIGNsZWFycyBhbGwgYml0cyBm
b3IgYSBibG9jaywgd2Uga2VlcCBpdCBzZXQgaW4gYmxvY2tzV2l0aEJpdHMuCisgICAgCisgICAg
RmFzdEJpdFZlY3RvciBtX2Jsb2Nrc1dpdGhCaXRzOworICAgIENvbmN1cnJlbnRWZWN0b3I8c3Rk
Ojp1bmlxdWVfcHRyPEJpdG1hcDxNYXJrZWRCbG9jazo6YXRvbXNQZXJCbG9jaz4+PiBtX2JpdHM7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSXNvQ2VsbFNldElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Jc29DZWxsU2V0SW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJJc29DZWxsU2V0LmgiCisjaW5jbHVkZSAi
TWFya2VkQmxvY2tJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgYm9vbCBJ
c29DZWxsU2V0OjphZGQoSGVhcENlbGwqIGNlbGwpCit7CisgICAgQXRvbUluZGljZXMgYXRvbUlu
ZGljZXMoY2VsbCk7CisgICAgYXV0byYgYml0c1B0clJlZiA9IG1fYml0c1thdG9tSW5kaWNlcy5i
bG9ja0luZGV4XTsKKyAgICBhdXRvKiBiaXRzID0gYml0c1B0clJlZi5nZXQoKTsKKyAgICBpZiAo
VU5MSUtFTFkoIWJpdHMpKQorICAgICAgICBiaXRzID0gYWRkU2xvdyhhdG9tSW5kaWNlcy5ibG9j
a0luZGV4KTsKKyAgICByZXR1cm4gIWJpdHMtPmNvbmN1cnJlbnRUZXN0QW5kU2V0KGF0b21JbmRp
Y2VzLmF0b21OdW1iZXIpOworfQorCitpbmxpbmUgYm9vbCBJc29DZWxsU2V0OjpyZW1vdmUoSGVh
cENlbGwqIGNlbGwpCit7CisgICAgQXRvbUluZGljZXMgYXRvbUluZGljZXMoY2VsbCk7CisgICAg
YXV0byYgYml0c1B0clJlZiA9IG1fYml0c1thdG9tSW5kaWNlcy5ibG9ja0luZGV4XTsKKyAgICBh
dXRvKiBiaXRzID0gYml0c1B0clJlZi5nZXQoKTsKKyAgICBpZiAoIWJpdHMpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICByZXR1cm4gYml0cy0+Y29uY3VycmVudFRlc3RBbmRDbGVhcihhdG9t
SW5kaWNlcy5hdG9tTnVtYmVyKTsKK30KKworaW5saW5lIGJvb2wgSXNvQ2VsbFNldDo6Y29udGFp
bnMoSGVhcENlbGwqIGNlbGwpIGNvbnN0Cit7CisgICAgQXRvbUluZGljZXMgYXRvbUluZGljZXMo
Y2VsbCk7CisgICAgYXV0byogYml0cyA9IG1fYml0c1thdG9tSW5kaWNlcy5ibG9ja0luZGV4XS5n
ZXQoKTsKKyAgICBpZiAoYml0cykKKyAgICAgICAgcmV0dXJuIGJpdHMtPmdldChhdG9tSW5kaWNl
cy5hdG9tTnVtYmVyKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEZ1bmM+Cit2b2lkIElzb0NlbGxTZXQ6OmZvckVhY2hNYXJrZWRDZWxsKGNvbnN0IEZ1bmMmIGZ1
bmMpCit7CisgICAgTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3IgPSBtX3N1YnNwYWNlLm1fYWxs
b2NhdG9yOworICAgIChhbGxvY2F0b3IubV9tYXJraW5nTm90RW1wdHkgJiBtX2Jsb2Nrc1dpdGhC
aXRzKS5mb3JFYWNoU2V0Qml0KAorICAgICAgICBbJl0gKHNpemVfdCBibG9ja0luZGV4KSB7Cisg
ICAgICAgICAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jayA9IGFsbG9jYXRvci5tX2Jsb2Nr
c1tibG9ja0luZGV4XTsKKworICAgICAgICAgICAgYXV0byogYml0cyA9IG1fYml0c1tibG9ja0lu
ZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIGJvb2wgaGFkQml0cyA9IGZhbHNlOworICAgICAgICAg
ICAgYmxvY2stPmZvckVhY2hNYXJrZWRDZWxsKAorICAgICAgICAgICAgICAgIFsmXSAoc2l6ZV90
IGF0b21OdW1iZXIsIEhlYXBDZWxsKiBjZWxsLCBIZWFwQ2VsbDo6S2luZCBraW5kKSAtPiBJdGVy
YXRpb25TdGF0dXMgeworICAgICAgICAgICAgICAgICAgICBpZiAoYml0cy0+Z2V0KGF0b21OdW1i
ZXIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBGb3JFYWNoUmVzdWx0IHJlc3VsdCA9IGZ1
bmMoY2VsbCwga2luZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlc3VsdCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBGb3JFYWNoUmVzdWx0OjpDb250aW51ZToK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRm9yRWFjaFJlc3VsdDo6QnJlYWs6CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaGFkQml0cyA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEZvckVhY2hS
ZXN1bHQ6OlJlbW92ZUFuZENvbnRpbnVlOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBG
b3JFYWNoUmVzdWx0OjpSZW1vdmVBbmRCcmVhazoKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBiaXRzLT5jbGVhcihhdG9tTnVtYmVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IHN3aXRjaCAocmVzdWx0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEZvckVhY2hS
ZXN1bHQ6OkNvbnRpbnVlOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBGb3JFYWNoUmVz
dWx0OjpSZW1vdmVBbmRDb250aW51ZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRm9yRWFjaFJlc3VsdDo6QnJlYWs6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEZvckVhY2hSZXN1bHQ6OlJlbW92ZUFuZEJyZWFr
OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkRv
bmU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CisgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpZiAoIWhhZEJpdHMpIHsKKyAgICAgICAgICAg
ICAgICBtX2JpdHNbYmxvY2tJbmRleF0gPSBudWxscHRyOworICAgICAgICAgICAgICAgIG1fYmxv
Y2tzV2l0aEJpdHNbYmxvY2tJbmRleF0gPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Jc29TdWJzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSXNvU3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMjU3MjUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDUg
KzY3LDI5IEBAIHZvaWQqIElzb1N1YnNwYWNlOjphbGxvY2F0ZU5vblZpcnR1YWwoc2kKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCit2b2lkIElzb1N1YnNwYWNlOjpkaWRSZXNpemVCaXRzKHNpemVf
dCBibG9ja0luZGV4KQoreworICAgIG1fY2VsbFNldHMuZm9yRWFjaCgKKyAgICAgICAgWyZdIChJ
c29DZWxsU2V0KiBzZXQpIHsKKyAgICAgICAgICAgIHNldC0+ZGlkUmVzaXplQml0cyhibG9ja0lu
ZGV4KTsKKyAgICAgICAgfSk7Cit9CisKK3ZvaWQgSXNvU3Vic3BhY2U6OmRpZFJlbW92ZUJsb2Nr
KHNpemVfdCBibG9ja0luZGV4KQoreworICAgIG1fY2VsbFNldHMuZm9yRWFjaCgKKyAgICAgICAg
WyZdIChJc29DZWxsU2V0KiBzZXQpIHsKKyAgICAgICAgICAgIHNldC0+ZGlkUmVtb3ZlQmxvY2so
YmxvY2tJbmRleCk7CisgICAgICAgIH0pOworfQorCit2b2lkIElzb1N1YnNwYWNlOjpkaWRCZWdp
blN3ZWVwaW5nVG9GcmVlTGlzdChNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jaykKK3sKKyAgICBt
X2NlbGxTZXRzLmZvckVhY2goCisgICAgICAgIFsmXSAoSXNvQ2VsbFNldCogc2V0KSB7CisgICAg
ICAgICAgICBzZXQtPnN3ZWVwVG9GcmVlTGlzdChibG9jayk7CisgICAgICAgIH0pOworfQorCiB9
IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNv
U3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29T
dWJzcGFjZS5oCShyZXZpc2lvbiAyMjU3MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Jc29TdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMCArMjcsMTIgQEAKIAogI2lu
Y2x1ZGUgIk1hcmtlZEFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlN1YnNwYWNlLmgiCisjaW5jbHVk
ZSA8d3RmL1NpbmdseUxpbmtlZExpc3RXaXRoVGFpbC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAog
Y2xhc3MgSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsKK2NsYXNzIElzb0NlbGxTZXQ7CiAKIGNs
YXNzIElzb1N1YnNwYWNlIDogcHVibGljIFN1YnNwYWNlIHsKIHB1YmxpYzoKQEAgLTQ2LDkgKzQ4
LDE2IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZU5vblZp
cnR1YWwoc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFs
bG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSk7CiAKIHByaXZhdGU6CisgICAgZnJpZW5k
IGNsYXNzIElzb0NlbGxTZXQ7CisgICAgCisgICAgdm9pZCBkaWRSZXNpemVCaXRzKHNpemVfdCBu
ZXdTaXplKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZFJlbW92ZUJsb2NrKHNpemVfdCBibG9ja0lu
ZGV4KSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZEJlZ2luU3dlZXBpbmdUb0ZyZWVMaXN0KE1hcmtl
ZEJsb2NrOjpIYW5kbGUqKSBvdmVycmlkZTsKKyAgICAKICAgICBzaXplX3QgbV9zaXplOwogICAg
IE1hcmtlZEFsbG9jYXRvciBtX2FsbG9jYXRvcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SXNvQWxp
Z25lZE1lbW9yeUFsbG9jYXRvcj4gbV9pc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOworICAgIFNl
bnRpbmVsTGlua2VkTGlzdDxJc29DZWxsU2V0LCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxJc29DZWxs
U2V0Pj4gbV9jZWxsU2V0czsKIH07CiAKIGlubGluZSBNYXJrZWRBbGxvY2F0b3IqIElzb1N1YnNw
YWNlOjphbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBBbGxvY2F0b3JGb3JNb2Rl
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3Iu
Y3BwCShyZXZpc2lvbiAyMjU3MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsNiArMjYxLDcgQEAgdm9pZCBN
YXJrZWRBbGxvY2F0b3I6OmFkZEJsb2NrKE1hcmtlZEJsbwogICAgICAgICAgICAgQVNTRVJUKG1f
YmxvY2tzLmNhcGFjaXR5KCkgPiBvbGRDYXBhY2l0eSk7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fYml0dmVjdG9yTG9jayk7CisgICAgICAgICAgICBzdWJz
cGFjZSgpLT5kaWRSZXNpemVCaXRzKG1fYmxvY2tzLmNhcGFjaXR5KCkpOwogICAgICAgICAgICAg
Zm9yRWFjaEJpdFZlY3RvcigKICAgICAgICAgICAgICAgICBsb2NrZXIsCiAgICAgICAgICAgICAg
ICAgWyZdIChGYXN0Qml0VmVjdG9yJiB2ZWN0b3IpIHsKQEAgLTI5MCw3ICsyOTEsOSBAQCB2b2lk
IE1hcmtlZEFsbG9jYXRvcjo6cmVtb3ZlQmxvY2soTWFya2VkCiB7CiAgICAgQVNTRVJUKGJsb2Nr
LT5hbGxvY2F0b3IoKSA9PSB0aGlzKTsKICAgICBBU1NFUlQobV9ibG9ja3NbYmxvY2stPmluZGV4
KCldID09IGJsb2NrKTsKLQorICAgIAorICAgIHN1YnNwYWNlKCktPmRpZFJlbW92ZUJsb2NrKGJs
b2NrLT5pbmRleCgpKTsKKyAgICAKICAgICBtX2Jsb2Nrc1tibG9jay0+aW5kZXgoKV0gPSBudWxs
cHRyOwogICAgIG1fZnJlZUJsb2NrSW5kaWNlcy5hcHBlbmQoYmxvY2stPmluZGV4KCkpOwogICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJ
KHJldmlzaW9uIDIyNTcyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFs
bG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiBjbGFzcyBHQ0RlZmVycmFsQ29udGV4dDsKIGNsYXNzIEhlYXA7CitjbGFzcyBJc29DZWxs
U2V0OwogY2xhc3MgTWFya2VkU3BhY2U7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAK
QEAgLTE2Miw2ICsxNjMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wQml0cyhQcmludFN0cmVh
bSYgPSBXVEY6OmRhdGFGaWxlKCkpOwogICAgIAogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3Mg
SXNvQ2VsbFNldDsKICAgICBmcmllbmQgY2xhc3MgTWFya2VkQmxvY2s7CiAgICAgCiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGVTbG93Q2FzZShHQ0RlZmVycmFsQ29udGV4dCos
IEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oCShyZXZpc2lv
biAyMjU3MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3JJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkZy
ZWVMaXN0SW5saW5lcy5oIgogI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvci5oIgorI2luY2x1ZGUg
IlZNLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkQmxvY2suY3BwCShyZXZpc2lvbiAyMjU3MjUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwMSwxMSAr
MzAxLDYgQEAgc2l6ZV90IE1hcmtlZEJsb2NrOjptYXJrQ291bnQoKQogICAgIHJldHVybiBhcmVN
YXJrc1N0YWxlKCkgPyAwIDogbV9tYXJrcy5jb3VudCgpOwogfQogCi1ib29sIE1hcmtlZEJsb2Nr
OjpIYW5kbGU6OmlzRW1wdHkoKQotewotICAgIHJldHVybiBtX2FsbG9jYXRvci0+aXNFbXB0eShO
b0xvY2tpbmdOZWNlc3NhcnksIHRoaXMpOwotfQotCiB2b2lkIE1hcmtlZEJsb2NrOjpjbGVhckhh
c0FueU1hcmtlZCgpCiB7CiAgICAgbV9iaWFzZWRNYXJrQ291bnQgPSBtX21hcmtDb3VudEJpYXM7
CkBAIC00MDIsMTYgKzM5NywxNCBAQCB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVwKEZy
ZWVMaXN0CiAgICAgaWYgKHN3ZWVwTW9kZSA9PSBTd2VlcE9ubHkgJiYgIW5lZWRzRGVzdHJ1Y3Rp
b24pCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChVTkxJS0VMWShtX2lzRnJlZUxpc3RlZCkp
IHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgQVNTRVJUKCFtX2FsbG9jYXRvci0+
aXNBbGxvY2F0ZWQoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzKSk7CisgICAgUkVMRUFTRV9BU1NF
UlQoIW1faXNGcmVlTGlzdGVkKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghaXNBbGxvY2F0ZWQoKSk7
CiAgICAgCiAgICAgaWYgKHNwYWNlKCktPmlzTWFya2luZygpKQogICAgICAgICBibG9jaygpLm1f
bG9jay5sb2NrKCk7CiAgICAgCisgICAgc3Vic3BhY2UoKS0+ZGlkQmVnaW5Td2VlcGluZ1RvRnJl
ZUxpc3QodGhpcyk7CisgICAgCiAgICAgaWYgKG5lZWRzRGVzdHJ1Y3Rpb24pIHsKICAgICAgICAg
c3Vic3BhY2UoKS0+ZmluaXNoU3dlZXAoKnRoaXMsIGZyZWVMaXN0KTsKICAgICAgICAgcmV0dXJu
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCShyZXZpc2lv
biAyMjU3MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjIsNiArMTYyLDggQEAgcHVibGljOgogICAgICAgICBzaXplX3Qg
bWFya0NvdW50KCk7CiAgICAgICAgIHNpemVfdCBzaXplKCk7CiAgICAgICAgIAorICAgICAgICBi
b29sIGlzQWxsb2NhdGVkKCk7CisgICAgICAgIAogICAgICAgICBib29sIGlzTGl2ZShIZWFwVmVy
c2lvbiBtYXJraW5nVmVyc2lvbiwgSGVhcFZlcnNpb24gbmV3bHlBbGxvY2F0ZWRWZXJzaW9uLCBi
b29sIGlzTWFya2luZywgY29uc3QgSGVhcENlbGwqKTsKICAgICAgICAgaW5saW5lIGJvb2wgaXNM
aXZlQ2VsbChIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgSGVhcFZlcnNpb24gbmV3bHlBbGxv
Y2F0ZWRWZXJzaW9uLCBib29sIGlzTWFya2luZywgY29uc3Qgdm9pZCopOwogCkBAIC0xNzMsNiAr
MTc1LDcgQEAgcHVibGljOgogICAgICAgICBib29sIGlzTmV3bHlBbGxvY2F0ZWQoY29uc3Qgdm9p
ZCopOwogICAgICAgICB2b2lkIHNldE5ld2x5QWxsb2NhdGVkKGNvbnN0IHZvaWQqKTsKICAgICAg
ICAgdm9pZCBjbGVhck5ld2x5QWxsb2NhdGVkKGNvbnN0IHZvaWQqKTsKKyAgICAgICAgY29uc3Qg
Qml0bWFwPGF0b21zUGVyQmxvY2s+JiBuZXdseUFsbG9jYXRlZCgpIGNvbnN0OwogICAgICAgICAK
ICAgICAgICAgSGVhcFZlcnNpb24gbmV3bHlBbGxvY2F0ZWRWZXJzaW9uKCkgY29uc3QgeyByZXR1
cm4gbV9uZXdseUFsbG9jYXRlZFZlcnNpb247IH0KICAgICAgICAgCkBAIC0yMjcsNyArMjMwLDcg
QEAgcHVibGljOgogICAgICAgICBzaXplX3QgbV9hdG9tc1BlckNlbGwgeyBzdGQ6Om51bWVyaWNf
bGltaXRzPHNpemVfdD46Om1heCgpIH07CiAgICAgICAgIHNpemVfdCBtX2VuZEF0b20geyBzdGQ6
Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIH07IC8vIFRoaXMgaXMgYSBmdXp6eSBlbmQu
IEFsd2F5cyB0ZXN0IGZvciA8IG1fZW5kQXRvbS4KICAgICAgICAgICAgIAotICAgICAgICBXVEY6
OkJpdG1hcDxhdG9tc1BlckJsb2NrPiBtX25ld2x5QWxsb2NhdGVkOworICAgICAgICBCaXRtYXA8
YXRvbXNQZXJCbG9jaz4gbV9uZXdseUFsbG9jYXRlZDsKICAgICAgICAgICAgIAogICAgICAgICBB
bGxvY2F0b3JBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKICAgICAgICAgYm9vbCBtX2lzRnJlZUxp
c3RlZCB7IGZhbHNlIH07CkBAIC0yOTQsNiArMjk3LDggQEAgcHVibGljOgogICAgIGJvb2wgaXNN
YXJrZWRSYXcoY29uc3Qgdm9pZCogcCk7CiAgICAgSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24o
KSBjb25zdCB7IHJldHVybiBtX21hcmtpbmdWZXJzaW9uOyB9CiAgICAgCisgICAgY29uc3QgQml0
bWFwPGF0b21zUGVyQmxvY2s+JiBtYXJrcygpIGNvbnN0OworICAgIAogICAgIENvdW50aW5nTG9j
ayYgbG9jaygpIHsgcmV0dXJuIG1fbG9jazsgfQogCiBwcml2YXRlOgpAQCAtMzQ2LDcgKzM1MSw3
IEBAIHByaXZhdGU6CiAKICAgICBIZWFwVmVyc2lvbiBtX21hcmtpbmdWZXJzaW9uOwogCi0gICAg
V1RGOjpCaXRtYXA8YXRvbXNQZXJCbG9jaz4gbV9tYXJrczsKKyAgICBCaXRtYXA8YXRvbXNQZXJC
bG9jaz4gbV9tYXJrczsKIH07CiAKIGlubGluZSBNYXJrZWRCbG9jazo6SGFuZGxlJiBNYXJrZWRC
bG9jazo6aGFuZGxlKCkKQEAgLTUzMiw2ICs1MzcsMTEgQEAgaW5saW5lIGJvb2wgTWFya2VkQmxv
Y2s6OnRlc3RBbmRTZXRNYXJrZQogICAgIHJldHVybiBtX21hcmtzLmNvbmN1cnJlbnRUZXN0QW5k
U2V0KGF0b21OdW1iZXIocCksIGRlcGVuZGVuY3kpOwogfQogCitpbmxpbmUgY29uc3QgQml0bWFw
PE1hcmtlZEJsb2NrOjphdG9tc1BlckJsb2NrPiYgTWFya2VkQmxvY2s6Om1hcmtzKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9tYXJrczsKK30KKwogaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6Okhh
bmRsZTo6aXNOZXdseUFsbG9jYXRlZChjb25zdCB2b2lkKiBwKQogewogICAgIHJldHVybiBtX25l
d2x5QWxsb2NhdGVkLmdldChtX2Jsb2NrLT5hdG9tTnVtYmVyKHApKTsKQEAgLTU0Nyw2ICs1NTcs
MTEgQEAgaW5saW5lIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6Y2xlYXJOZQogICAgIG1fbmV3
bHlBbGxvY2F0ZWQuY2xlYXIobV9ibG9jay0+YXRvbU51bWJlcihwKSk7CiB9CiAKK2lubGluZSBj
b25zdCBCaXRtYXA8TWFya2VkQmxvY2s6OmF0b21zUGVyQmxvY2s+JiBNYXJrZWRCbG9jazo6SGFu
ZGxlOjpuZXdseUFsbG9jYXRlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbmV3bHlBbGxvY2F0
ZWQ7Cit9CisKIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjppc0F0b20oY29uc3Qgdm9pZCogcCkK
IHsKICAgICBBU1NFUlQoTWFya2VkQmxvY2s6OmlzQXRvbUFsaWduZWQocCkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmgJKHJldmlz
aW9uIDIyNTcyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC05MSw2ICs5MSwxMSBAQCBpbmxpbmUgYm9vbCBNYXJr
ZWRCbG9jazo6bWFya3NDb252ZXlMaXZlCiAgICAgICAgIHx8IE1hcmtlZFNwYWNlOjpuZXh0VmVy
c2lvbihteU1hcmtpbmdWZXJzaW9uKSA9PSBtYXJraW5nVmVyc2lvbjsKIH0KIAoraW5saW5lIGJv
b2wgTWFya2VkQmxvY2s6OkhhbmRsZTo6aXNBbGxvY2F0ZWQoKQoreworICAgIHJldHVybiBtX2Fs
bG9jYXRvci0+aXNBbGxvY2F0ZWQoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzKTsKK30KKwogQUxX
QVlTX0lOTElORSBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzTGl2ZShIZWFwVmVyc2lvbiBt
YXJraW5nVmVyc2lvbiwgSGVhcFZlcnNpb24gbmV3bHlBbGxvY2F0ZWRWZXJzaW9uLCBib29sIGlz
TWFya2luZywgY29uc3QgSGVhcENlbGwqIGNlbGwpCiB7CiAgICAgaWYgKGFsbG9jYXRvcigpLT5p
c0FsbG9jYXRlZChOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMpKQpAQCAtNDM0LDYgKzQzOSwxMSBA
QCBpbmxpbmUgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBEZXN0cnVjCiAgICAgcmV0dXJuIEJs
b2NrSGFzTm9EZXN0cnVjdG9yczsKIH0KIAoraW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OkhhbmRs
ZTo6aXNFbXB0eSgpCit7CisgICAgcmV0dXJuIG1fYWxsb2NhdG9yLT5pc0VtcHR5KE5vTG9ja2lu
Z05lY2Vzc2FyeSwgdGhpcyk7Cit9CisKIGlubGluZSBNYXJrZWRCbG9jazo6SGFuZGxlOjpFbXB0
eU1vZGUgTWFya2VkQmxvY2s6OkhhbmRsZTo6ZW1wdHlNb2RlKCkKIHsKICAgICAvLyBJdCdzIG5v
dCBvYnZpb3VzLCBidXQgdGhpcyBpcyB0aGUgb25seSB3YXkgdG8ga25vdyBpZiB0aGUgYmxvY2sg
aXMgZW1wdHkuIEl0J3MgdGhlIG9ubHkKQEAgLTQ0MSw3ICs0NTEsNyBAQCBpbmxpbmUgTWFya2Vk
QmxvY2s6OkhhbmRsZTo6RW1wdHlNb2RlIE1hCiAgICAgLy8gLSBJdCdzIHRydWUgd2hlbiB0aGUg
YmxvY2sgaXMgZnJlc2hseSBhbGxvY2F0ZWQuCiAgICAgLy8gLSBJdCdzIHRydWUgaWYgdGhlIGJs
b2NrIGhhZCBiZWVuIHN3ZXB0IGluIHRoZSBwYXN0LCBhbGwgZGVzdHJ1Y3RvcnMgd2VyZSBjYWxs
ZWQsIGFuZCB0aGF0CiAgICAgLy8gICBzd2VlcCBwcm92ZWQgdGhhdCB0aGUgYmxvY2sgaXMgZW1w
dHkuCi0gICAgcmV0dXJuIG1fYWxsb2NhdG9yLT5pc0VtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwg
dGhpcykgPyBJc0VtcHR5IDogTm90RW1wdHk7CisgICAgcmV0dXJuIGlzRW1wdHkoKSA/IElzRW1w
dHkgOiBOb3RFbXB0eTsKIH0KIAogaW5saW5lIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNjcmliYmxl
TW9kZSBNYXJrZWRCbG9jazo6SGFuZGxlOjpzY3JpYmJsZU1vZGUoKQpAQCAtNTE2LDcgKzUyNiw3
IEBAIGlubGluZSBJdGVyYXRpb25TdGF0dXMgTWFya2VkQmxvY2s6OkhhbmQKICAgICAgICAgaWYg
KCFibG9jay5pc01hcmtlZFJhdyhjZWxsKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAg
ICAgIGlmIChmdW5jdG9yKGNlbGwsIGtpbmQpID09IEl0ZXJhdGlvblN0YXR1czo6RG9uZSkKKyAg
ICAgICAgaWYgKGZ1bmN0b3IoaSwgY2VsbCwga2luZCkgPT0gSXRlcmF0aW9uU3RhdHVzOjpEb25l
KQogICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6RG9uZTsKICAgICB9CiAgICAg
cmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TdWJzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMjU3MjUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TdWJzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNiw1ICsxMjYs
MTcgQEAgUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSooKQogICAgICAgICB9
KTsKIH0KIAordm9pZCBTdWJzcGFjZTo6ZGlkUmVzaXplQml0cyhzaXplX3QpCit7Cit9CisKK3Zv
aWQgU3Vic3BhY2U6OmRpZFJlbW92ZUJsb2NrKHNpemVfdCkKK3sKK30KKwordm9pZCBTdWJzcGFj
ZTo6ZGlkQmVnaW5Td2VlcGluZ1RvRnJlZUxpc3QoTWFya2VkQmxvY2s6OkhhbmRsZSopCit7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1
YnNwYWNlLmgJKHJldmlzaW9uIDIyNTcyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1N1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTkzLDYgKzkzLDEwIEBAIHB1YmxpYzoKICAg
ICAKICAgICBTdWJzcGFjZSogbmV4dFN1YnNwYWNlSW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkg
Y29uc3QgeyByZXR1cm4gbV9uZXh0U3Vic3BhY2VJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3I7IH0K
ICAgICB2b2lkIHNldE5leHRTdWJzcGFjZUluQWxpZ25lZE1lbW9yeUFsbG9jYXRvcihTdWJzcGFj
ZSogc3Vic3BhY2UpIHsgbV9uZXh0U3Vic3BhY2VJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IgPSBz
dWJzcGFjZTsgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBkaWRSZXNpemVCaXRzKHNpemVfdCBu
ZXdTaXplKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVtb3ZlQmxvY2soc2l6ZV90IGJsb2NrSW5k
ZXgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRCZWdpblN3ZWVwaW5nVG9GcmVlTGlzdChNYXJrZWRC
bG9jazo6SGFuZGxlKik7CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGluaXRpYWxpemUoSGVhcENl
bGxUeXBlKiwgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciopOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgJKHJldmlzaW9uIDIyNTcyNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC03MSw3ICs3MSw3IEBAIHZvaWQgU3Vic3BhY2U6OmZvckVhY2hNYXJrZWRDZWxsKGNvbnN0
IEYKICAgICBmb3JFYWNoTm90RW1wdHlNYXJrZWRCbG9jaygKICAgICAgICAgWyZdIChNYXJrZWRC
bG9jazo6SGFuZGxlKiBoYW5kbGUpIHsKICAgICAgICAgICAgIGhhbmRsZS0+Zm9yRWFjaE1hcmtl
ZENlbGwoCi0gICAgICAgICAgICAgICAgWyZdIChIZWFwQ2VsbCogY2VsbCwgSGVhcENlbGw6Oktp
bmQga2luZCkgLT4gSXRlcmF0aW9uU3RhdHVzIHsgCisgICAgICAgICAgICAgICAgWyZdIChzaXpl
X3QsIEhlYXBDZWxsKiBjZWxsLCBIZWFwQ2VsbDo6S2luZCBraW5kKSAtPiBJdGVyYXRpb25TdGF0
dXMgewogICAgICAgICAgICAgICAgICAgICBmdW5jKGNlbGwsIGtpbmQpOwogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKICAgICAgICAgICAgICAg
ICB9KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkU3RydWN0
dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZl
cnJlZFN0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDIyNTcyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0luZmVycmVkU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcs
NjQgKzI3LDE3IEBACiAjaW5jbHVkZSAiSW5mZXJyZWRTdHJ1Y3R1cmUuaCIKIAogI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCiBuYW1l
c3BhY2UgSlNDIHsKIAotY29uc3QgQ2xhc3NJbmZvIEluZmVycmVkU3RydWN0dXJlOjpzX2luZm8g
PSB7ICJJbmZlcnJlZFN0cnVjdHVyZSIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIENSRUFU
RV9NRVRIT0RfVEFCTEUoSW5mZXJyZWRTdHJ1Y3R1cmUpIH07Ci0KLUluZmVycmVkU3RydWN0dXJl
KiBJbmZlcnJlZFN0cnVjdHVyZTo6Y3JlYXRlKFZNJiB2bSwgR0NEZWZlcnJhbENvbnRleHQmIGRl
ZmVycmFsQ29udGV4dCwgSW5mZXJyZWRUeXBlKiBwYXJlbnQsIFN0cnVjdHVyZSogc3RydWN0dXJl
KQotewotICAgIEluZmVycmVkU3RydWN0dXJlKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxJbmZlcnJlZFN0cnVjdHVyZT4odm0uaGVhcCwgJmRlZmVycmFsQ29udGV4dCkpIElu
ZmVycmVkU3RydWN0dXJlKHZtLCBwYXJlbnQsIHN0cnVjdHVyZSk7Ci0gICAgcmVzdWx0LT5maW5p
c2hDcmVhdGlvbih2bSwgc3RydWN0dXJlKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lk
IEluZmVycmVkU3RydWN0dXJlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKLXsKLSAgICBJbmZlcnJl
ZFN0cnVjdHVyZSogaW5mZXJyZWRTdHJ1Y3R1cmUgPSBzdGF0aWNfY2FzdDxJbmZlcnJlZFN0cnVj
dHVyZSo+KGNlbGwpOwotICAgIGluZmVycmVkU3RydWN0dXJlLT5JbmZlcnJlZFN0cnVjdHVyZTo6
fkluZmVycmVkU3RydWN0dXJlKCk7Ci19Ci0KLVN0cnVjdHVyZSogSW5mZXJyZWRTdHJ1Y3R1cmU6
OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgcHJvdG90eXBlKQotewotICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IGluZm8oKSk7Ci19Ci0KLXZvaWQgSW5mZXJyZWRTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBJbmZlcnJlZFN0cnVjdHVy
ZSogaW5mZXJyZWRTdHJ1Y3R1cmUgPSBqc0Nhc3Q8SW5mZXJyZWRTdHJ1Y3R1cmUqPihjZWxsKTsK
LSAgICAKLSAgICB2aXNpdG9yLmFwcGVuZChpbmZlcnJlZFN0cnVjdHVyZS0+bV9wYXJlbnQpOwot
fQotCi12b2lkIEluZmVycmVkU3RydWN0dXJlOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYp
Ci17Ci0gICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkKG1fcGFyZW50LmdldCgpKSk7Ci0gICAgCi0g
ICAgLy8gTW9ub3RvbmljaXR5IGVuc3VyZXMgdGhhdCB3ZSBzaG91bGRuJ3Qgc2VlIGEgbmV3IHN0
cnVjdHVyZSB0aGF0IGlzIGRpZmZlcmVudCBmcm9tIHVzLCBidXQgd2UKLSAgICAvLyBjb3VsZCBo
YXZlIGJlZW4gbnVsbGVkLiBXZSBvbmx5IHJlbHkgb24gaXQgYmVpbmcgdGhlIG51bGwgY2FzZSBv
bmx5IGluIGRlYnVnLgotICAgIGlmICh0aGlzID09IG1fcGFyZW50LT5tX3N0cnVjdHVyZS5nZXQo
KSkgewotICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fc3RydWN0dXJlLmdldCgpKSkKLSAg
ICAgICAgICAgIG1fcGFyZW50LT5yZW1vdmVTdHJ1Y3R1cmUoKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgQVNTRVJUKCFtX3BhcmVudC0+bV9zdHJ1Y3R1cmUpOwotICAgIAotICAgIC8vIFdlJ2xsIGdl
dCBkZWxldGVkIG9uIHRoZSBuZXh0IEdDLiBUaGF0J3MgYSBsaXR0bGUgd2VpcmQsIGJ1dCBub3Qg
aGFybWZ1bCwgc2luY2UgaXQgb25seSBoYXBwZW5zCi0gICAgLy8gd2hlbiB0aGUgSW5mZXJyZWRU
eXBlIHRoYXQgd2Ugd2VyZSBwYWlyZWQgdG8gd291bGQgaGF2ZSBzdXJ2aXZlZC4gSXQganVzdCBt
ZWFucyBhIHRpbnkgbWlzc2VkCi0gICAgLy8gb3Bwb3J0dW5pdHkgZm9yIGhlYXAgc2l6ZSByZWR1
Y3Rpb24uCi19CitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW5mZXJyZWRTdHJ1Y3R1cmUp
OwogCiBJbmZlcnJlZFN0cnVjdHVyZTo6SW5mZXJyZWRTdHJ1Y3R1cmUoVk0mIHZtLCBJbmZlcnJl
ZFR5cGUqIHBhcmVudCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgOiBCYXNlKHZtLCB2bS5p
bmZlcnJlZFN0cnVjdHVyZVN0cnVjdHVyZS5nZXQoKSkKLSAgICAsIG1fcGFyZW50KHZtLCB0aGlz
LCBwYXJlbnQpCi0gICAgLCBtX3N0cnVjdHVyZSh2bSwgdGhpcywgc3RydWN0dXJlKQotewotfQot
Ci12b2lkIEluZmVycmVkU3RydWN0dXJlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQorICAgIDogcGFyZW50KHBhcmVudCkKKyAgICAsIHN0cnVjdHVyZSh2bSwg
cGFyZW50LCBzdHJ1Y3R1cmUpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAg
IHN0cnVjdHVyZS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoJm1fd2F0Y2hwb2ludCk7CisgICAg
c3RydWN0dXJlLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludCgmd2F0Y2hwb2ludCk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5m
ZXJyZWRTdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbmZlcnJlZFN0cnVjdHVyZS5oCShyZXZpc2lvbiAyMjU3MjUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFN0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw1MSArMjYsMjMgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiSW5mZXJyZWRTdHJ1
Y3R1cmVXYXRjaHBvaW50LmgiCi0jaW5jbHVkZSAiSlNDZWxsLmgiCi0jaW5jbHVkZSAiVk0uaCIK
KyNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CiAK
IG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBJbmZlcnJlZFR5cGU7CitjbGFzcyBTdHJ1Y3R1cmU7
CiAKLWNsYXNzIEluZmVycmVkU3RydWN0dXJlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CitjbGFz
cyBJbmZlcnJlZFN0cnVjdHVyZSBmaW5hbCB7CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJ
bmZlcnJlZFN0cnVjdHVyZSk7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKLSAg
ICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZT4KLSAgICBzdGF0aWMgSXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAmdm0uaW5mZXJy
ZWRTdHJ1Y3R1cmVTcGFjZTsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIEluZmVycmVkU3RydWN0
dXJlKiBjcmVhdGUoVk0mLCBHQ0RlZmVycmFsQ29udGV4dCYsIEluZmVycmVkVHlwZSogcGFyZW50
LCBTdHJ1Y3R1cmUqKTsKLSAgICAKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0
aW9uID0gdHJ1ZTsKLSAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwotICAgIAotICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IFN0cnVjdHVyZUlzSW1tb3J0
YWwgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKLQotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwotICAg
IAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
LQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICAKLSAgICBJbmZlcnJlZFR5cGUqIHBhcmVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fcGFyZW50LmdldCgpOyB9Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUo
KSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZS5nZXQoKTsgfQotICAgIAotICAgIHZvaWQgZmlu
YWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mKTsKLQotcHJpdmF0ZToKICAgICBJbmZlcnJlZFN0cnVj
dHVyZShWTSYsIEluZmVycmVkVHlwZSogcGFyZW50LCBTdHJ1Y3R1cmUqKTsKKworICAgIEluZmVy
cmVkVHlwZSogcGFyZW50OworICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZTsK
ICAgICAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgU3RydWN0dXJlKik7Ci0gICAgCi0g
ICAgV3JpdGVCYXJyaWVyPEluZmVycmVkVHlwZT4gbV9wYXJlbnQ7Ci0gICAgV3JpdGVCYXJyaWVy
PFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7Ci0gICAgCi0gICAgZnJpZW5kIGNsYXNzIEluZmVycmVk
U3RydWN0dXJlV2F0Y2hwb2ludDsKLSAgICBJbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQgbV93
YXRjaHBvaW50OworICAgIEluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludCB3YXRjaHBvaW50Owog
fTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAJ
KHJldmlzaW9uIDIyNTcyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVy
cmVkU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEyICszNCwx
NCBAQCB2b2lkIEluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludDo6ZmlyZUluCiB7CiAgICAgSW5m
ZXJyZWRTdHJ1Y3R1cmUqIGluZmVycmVkU3RydWN0dXJlID0KICAgICAgICAgYml0d2lzZV9jYXN0
PEluZmVycmVkU3RydWN0dXJlKj4oCi0gICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRo
aXMpIC0gT0JKRUNUX09GRlNFVE9GKEluZmVycmVkU3RydWN0dXJlLCBtX3dhdGNocG9pbnQpKTsK
KyAgICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgLSBPQkpFQ1RfT0ZGU0VUT0Yo
SW5mZXJyZWRTdHJ1Y3R1cmUsIHdhdGNocG9pbnQpKTsKIAotICAgIGlmICghaW5mZXJyZWRTdHJ1
Y3R1cmUtPmlzTGl2ZSgpKQorICAgIEluZmVycmVkVHlwZSogaW5mZXJyZWRUeXBlID0gaW5mZXJy
ZWRTdHJ1Y3R1cmUtPnBhcmVudDsKKyAgICAKKyAgICBpZiAoIWluZmVycmVkVHlwZS0+aXNMaXZl
KCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBpbmZlcnJlZFN0cnVjdHVyZS0+bV9wYXJl
bnQtPnJlbW92ZVN0cnVjdHVyZSgpOworICAgIGluZmVycmVkVHlwZS0+cmVtb3ZlU3RydWN0dXJl
KCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW5mZXJyZWRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuY3BwCShyZXZpc2lvbiAyMjU3MjUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW5mZXJy
ZWRUeXBlLmgiCiAKLSNpbmNsdWRlICJHQ0RlZmVycmFsQ29udGV4dElubGluZXMuaCIKKyNpbmNs
dWRlICJJc29DZWxsU2V0SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7CkBAIC04Niw3ICs4Niw4IEBAIFN0cnVjdHVyZSogSW5mZXJyZWRUeXBlOjpj
cmVhdGVTdHJ1Y3R1cmUKIHZvaWQgSW5mZXJyZWRUeXBlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSW5mZXJyZWRUeXBlKiBpbmZlcnJl
ZFR5cGUgPSBqc0Nhc3Q8SW5mZXJyZWRUeXBlKj4oY2VsbCk7Ci0gICAgdmlzaXRvci5hcHBlbmQo
aW5mZXJyZWRUeXBlLT5tX3N0cnVjdHVyZSk7CisgICAgaWYgKGluZmVycmVkVHlwZS0+bV9zdHJ1
Y3R1cmUpCisgICAgICAgIHZpc2l0b3Iudm0oKS5pbmZlcnJlZFR5cGVzV2l0aEZpbmFsaXplcnMu
YWRkKGluZmVycmVkVHlwZSk7CiB9CiAKIEluZmVycmVkVHlwZTo6S2luZCBJbmZlcnJlZFR5cGU6
OmtpbmRGb3JGbGFncyhQdXRCeUlkRmxhZ3MgZmxhZ3MpCkBAIC0zOTksNyArNDAwLDYgQEAgYm9v
bCBJbmZlcnJlZFR5cGU6OndpbGxTdG9yZVZhbHVlU2xvdyhWTQogICAgIERlc2NyaXB0b3IgbXlU
eXBlOwogICAgIGJvb2wgcmVzdWx0OwogICAgIHsKLSAgICAgICAgR0NEZWZlcnJhbENvbnRleHQg
ZGVmZXJyYWxDb250ZXh0KHZtLmhlYXApOwogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKG1fbG9jayk7CiAgICAgICAgIG9sZFR5cGUgPSBkZXNjcmlwdG9yKGxvY2tlcik7CiAgICAg
ICAgIG15VHlwZSA9IERlc2NyaXB0b3I6OmZvclZhbHVlKHZhbHVlKTsKQEAgLTQwOCw3ICs0MDgs
NyBAQCBib29sIEluZmVycmVkVHlwZTo6d2lsbFN0b3JlVmFsdWVTbG93KFZNCiAgICAgICAgIAog
ICAgICAgICBBU1NFUlQob2xkVHlwZSAhPSBteVR5cGUpOyAvLyBUaGUgdHlwZSBtdXN0IGhhdmUg
Y2hhbmdlZCBpZiB3ZSdyZSBvbiB0aGUgc2xvdyBwYXRoLgogCi0gICAgICAgIGJvb2wgc2V0UmVz
dWx0ID0gc2V0KGRlZmVycmFsQ29udGV4dCwgbG9ja2VyLCB2bSwgbXlUeXBlKTsKKyAgICAgICAg
Ym9vbCBzZXRSZXN1bHQgPSBzZXQobG9ja2VyLCB2bSwgbXlUeXBlKTsKICAgICAgICAgcmVzdWx0
ID0ga2luZChsb2NrZXIpICE9IFRvcDsKICAgICAgICAgaWYgKCFzZXRSZXN1bHQpCiAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNDIzLDEwICs0MjMsOSBAQCB2b2lkIEluZmVycmVkVHlw
ZTo6bWFrZVRvcFNsb3coVk0mIHZtLCBQCiB7CiAgICAgRGVzY3JpcHRvciBvbGRUeXBlOwogICAg
IHsKLSAgICAgICAgR0NEZWZlcnJhbENvbnRleHQgZGVmZXJyYWxDb250ZXh0KHZtLmhlYXApOwog
ICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAgIG9sZFR5
cGUgPSBkZXNjcmlwdG9yKGxvY2tlcik7Ci0gICAgICAgIGlmICghc2V0KGRlZmVycmFsQ29udGV4
dCwgbG9ja2VyLCB2bSwgVG9wKSkKKyAgICAgICAgaWYgKCFzZXQobG9ja2VyLCB2bSwgVG9wKSkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQzNCwxNCArNDMzLDggQEAgdm9pZCBJ
bmZlcnJlZFR5cGU6Om1ha2VUb3BTbG93KFZNJiB2bSwgUAogICAgIG1fd2F0Y2hwb2ludFNldC5m
aXJlQWxsKHZtLCBkZXRhaWwpOwogfQogCi1ib29sIEluZmVycmVkVHlwZTo6c2V0KEdDRGVmZXJy
YWxDb250ZXh0JiBkZWZlcnJhbENvbnRleHQsIGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9j
a2VyLCBWTSYgdm0sIERlc2NyaXB0b3IgbmV3RGVzY3JpcHRvcikKK2Jvb2wgSW5mZXJyZWRUeXBl
OjpzZXQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgRGVzY3JpcHRv
ciBuZXdEZXNjcmlwdG9yKQogewotICAgIC8vIFdlIHdpbGwgdHJpZ2dlciB3cml0ZSBiYXJyaWVy
cyB3aGlsZSBob2xkaW5nIG91ciBsb2NrLiBDdXJyZW50bHksIHdyaXRlIGJhcnJpZXJzIGRvbid0
IEdDLCBidXQgdGhhdAotICAgIC8vIGNvdWxkIGNoYW5nZS4gSWYgaXQgZG9lcywgd2UgZG9uJ3Qg
d2FudCB0byBkZWFkbG9jay4gTm90ZSB0aGF0IHdlIGNvdWxkIGhhdmUgdXNlZAotICAgIC8vIEdD
U2FmZUNvbmN1cnJlbnRKU0xvY2tlciBpbiB0aGUgY2FsbGVyLCBidXQgdGhlIGNhbGxlciBpcyBv
biBhIGZhc3QgcGF0aCBzbyBtYXliZSB0aGF0IHdvdWxkbid0IGJlCi0gICAgLy8gYSBnb29kIGlk
ZWEuCi0gICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhlYXApOwotICAgIAogICAgIC8v
IEJlIGRlZmVuc2l2ZTogaWYgd2UncmUgbm90IHJlYWxseSBjaGFuZ2luZyB0aGUgdHlwZSwgdGhl
biB3ZSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nLgogICAgIGlmIChkZXNjcmlwdG9yKGxvY2tl
cikgPT0gbmV3RGVzY3JpcHRvcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDY5LDE5ICs0
NjIsMTMgQEAgYm9vbCBJbmZlcnJlZFR5cGU6OnNldChHQ0RlZmVycmFsQ29udGV4dAogICAgICAg
ICBzaG91bGRGaXJlV2F0Y2hwb2ludFNldCA9IHRydWU7CiAgICAgfQogCi0gICAgLy8gUmVtb3Zl
IHRoZSBvbGQgSW5mZXJyZWRTdHJ1Y3R1cmUgb2JqZWN0IGlmIHdlIG5vIGxvbmdlciBuZWVkIGl0
LgogICAgIGlmICghbmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSkKLSAgICAgICAgbV9zdHJ1Y3R1
cmUuY2xlYXIoKTsKLQotICAgIC8vIEFkZCBhIG5ldyBJbmZlcnJlZFN0cnVjdHVyZSBvYmplY3Qg
aWYgd2UgbmVlZCBvbmUgbm93LgotICAgIGlmIChuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpKSB7
Ci0gICAgICAgIGlmIChtX3N0cnVjdHVyZSkgewotICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGFn
cmVlIG9uIHRoZSBzdHJ1Y3R1cmVzIGlmIHdlIGdldCBoZXJlLgotICAgICAgICAgICAgQVNTRVJU
KG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkgPT0gbV9zdHJ1Y3R1cmUtPnN0cnVjdHVyZSgpKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGF1dG8qIHN0cnVjdHVyZSA9IEluZmVycmVk
U3RydWN0dXJlOjpjcmVhdGUodm0sIGRlZmVycmFsQ29udGV4dCwgdGhpcywgbmV3RGVzY3JpcHRv
ci5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAgICAgICBtX3N0cnVjdHVyZS5zZXQodm0sIHRoaXMsIHN0
cnVjdHVyZSk7Ci0gICAgICAgIH0KKyAgICAgICAgbV9zdHJ1Y3R1cmUgPSBudWxscHRyOworICAg
IGVsc2UgeworICAgICAgICBpZiAobV9zdHJ1Y3R1cmUpCisgICAgICAgICAgICBBU1NFUlQobmV3
RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSA9PSBtX3N0cnVjdHVyZS0+c3RydWN0dXJlLmdldCgpKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSBzdGQ6Om1ha2VfdW5pcXVl
PEluZmVycmVkU3RydWN0dXJlPih2bSwgdGhpcywgbmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSk7
CiAgICAgfQogCiAgICAgLy8gRmluYWxseSwgc2V0IHRoZSBkZXNjcmlwdG9yIGtpbmQuCkBAIC01
MDMsMTMgKzQ5MCwxMiBAQCB2b2lkIEluZmVycmVkVHlwZTo6cmVtb3ZlU3RydWN0dXJlKCkKICAg
ICBEZXNjcmlwdG9yIG9sZERlc2NyaXB0b3I7CiAgICAgRGVzY3JpcHRvciBuZXdEZXNjcmlwdG9y
OwogICAgIHsKLSAgICAgICAgR0NEZWZlcnJhbENvbnRleHQgZGVmZXJyYWxDb250ZXh0KHZtLmhl
YXApOwogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAg
IG9sZERlc2NyaXB0b3IgPSBkZXNjcmlwdG9yKGxvY2tlcik7CiAgICAgICAgIG5ld0Rlc2NyaXB0
b3IgPSBvbGREZXNjcmlwdG9yOwogICAgICAgICBuZXdEZXNjcmlwdG9yLnJlbW92ZVN0cnVjdHVy
ZSgpOwogICAgICAgICAKLSAgICAgICAgaWYgKCFzZXQoZGVmZXJyYWxDb250ZXh0LCBsb2NrZXIs
IHZtLCBuZXdEZXNjcmlwdG9yKSkKKyAgICAgICAgaWYgKCFzZXQobG9ja2VyLCB2bSwgbmV3RGVz
Y3JpcHRvcikpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC01MTcsNiArNTAzLDIw
IEBAIHZvaWQgSW5mZXJyZWRUeXBlOjpyZW1vdmVTdHJ1Y3R1cmUoKQogICAgIG1fd2F0Y2hwb2lu
dFNldC5maXJlQWxsKHZtLCBkZXRhaWwpOwogfQogCitJc29DZWxsU2V0OjpGb3JFYWNoUmVzdWx0
IEluZmVycmVkVHlwZTo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mKQoreworICAgIEFTU0VS
VChIZWFwOjppc01hcmtlZCh0aGlzKSk7CisgICAgCisgICAgaWYgKG1fc3RydWN0dXJlKSB7Cisg
ICAgICAgIGlmIChIZWFwOjppc01hcmtlZChtX3N0cnVjdHVyZS0+c3RydWN0dXJlLmdldCgpKSkK
KyAgICAgICAgICAgIHJldHVybiBJc29DZWxsU2V0OjpGb3JFYWNoUmVzdWx0OjpDb250aW51ZTsK
KyAgICAgICAgCisgICAgICAgIHJlbW92ZVN0cnVjdHVyZSgpOworICAgIH0KKyAgICAKKyAgICBy
ZXR1cm4gSXNvQ2VsbFNldDo6Rm9yRWFjaFJlc3VsdDo6UmVtb3ZlQW5kQ29udGludWU7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIEpTQwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZS5oCShyZXZpc2lvbiAyMjU3MjUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQ29uY3VycmVudEpTTG9jay5oIgog
I2luY2x1ZGUgIkluZmVycmVkU3RydWN0dXJlLmgiCisjaW5jbHVkZSAiSXNvQ2VsbFNldC5oIgog
I2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIlByb3BlcnR5TmFtZS5oIgogI2luY2x1ZGUg
IlB1dEJ5SWRGbGFncy5oIgpAQCAtMTg1LDcgKzE4Niw3IEBAIHB1YmxpYzoKIAogICAgIERlc2Ny
aXB0b3IgZGVzY3JpcHRvck1haW5UaHJlYWQoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJu
IERlc2NyaXB0b3IobV9raW5kLCBtX3N0cnVjdHVyZSA/IG1fc3RydWN0dXJlLT5zdHJ1Y3R1cmUo
KSA6IG51bGxwdHIpOworICAgICAgICByZXR1cm4gRGVzY3JpcHRvcihtX2tpbmQsIG1fc3RydWN0
dXJlID8gbV9zdHJ1Y3R1cmUtPnN0cnVjdHVyZS5nZXQoKSA6IG51bGxwdHIpOwogICAgIH0KICAg
ICAKICAgICBEZXNjcmlwdG9yIGRlc2NyaXB0b3IoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikg
Y29uc3QKQEAgLTIzMCw3ICsyMzEsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKICAgICAKLSAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KCk7
CisgICAgSXNvQ2VsbFNldDo6Rm9yRWFjaFJlc3VsdCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShW
TSYpOwogCiBwcml2YXRlOgogICAgIEluZmVycmVkVHlwZShWTSYpOwpAQCAtMjQxLDcgKzI0Miw3
IEBAIHByaXZhdGU6CiAKICAgICAvLyBIZWxwZXIgZm9yIHdpbGxTdG9yZVZhbHVlU2xvdygpIGFu
ZCBtYWtlVG9wU2xvdygpLiBUaGlzIHJldHVybnMgdHJ1ZSBpZiB3ZSBzaG91bGQgZmlyZSB0aGUK
ICAgICAvLyB3YXRjaHBvaW50IHNldC4KLSAgICBib29sIHNldChHQ0RlZmVycmFsQ29udGV4dCYs
IGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZNJiwgRGVzY3JpcHRvcik7CisgICAgYm9vbCBz
ZXQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVk0mLCBEZXNjcmlwdG9yKTsKICAgICAKICAg
ICB2b2lkIHJlbW92ZVN0cnVjdHVyZSgpOwogICAgIApAQCAtMjUyLDcgKzI1Myw4IEBAIHByaXZh
dGU6CiAgICAgCiAgICAgS2luZCBtX2tpbmQgeyBCb3R0b20gfTsKIAotICAgIFdyaXRlQmFycmll
cjxJbmZlcnJlZFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7CisgICAgLy8gRklYTUU6IFRoaXMgc2hv
dWxkIGJlIFBvaXNvbmVkLgorICAgIHN0ZDo6dW5pcXVlX3B0cjxJbmZlcnJlZFN0cnVjdHVyZT4g
bV9zdHJ1Y3R1cmU7CiAKICAgICAvLyBOT1RFOiBJZiB0aGlzIGlzIGJlaW5nIHdhdGNoZWQsIHdl
IHRyYW5zZm9ybSB0byBUb3AgYmVjYXVzZSB0aGF0IGltcGxpZXMgdGhhdCBpdCB3b3VsZG4ndCBi
ZQogICAgIC8vIHByb2ZpdGFibGUgdG8gd2F0Y2ggaXQgYWdhaW4uIEFsc28sIHRoaXMgc2V0IGlz
IGluaXRpYWxpemVkIGNsZWFyLCBhbmQgaXMgbmV2ZXIgZXhwb3NlZCB0byB0aGUgREZHCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAyMjU3MjUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIw
NSwxMSArMjA1LDExIEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkK
ICAgICAsIGRpcmVjdEV2YWxFeGVjdXRhYmxlU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwg
ZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgRGlyZWN0RXZhbEV4ZWN1dGFibGUp
CiAgICAgLCBmdW5jdGlvbkV4ZWN1dGFibGVTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBk
ZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLmdldCgpLCBGdW5jdGlvbkV4ZWN1dGFibGUpCiAg
ICAgLCBpbmRpcmVjdEV2YWxFeGVjdXRhYmxlU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwg
ZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgSW5kaXJlY3RFdmFsRXhlY3V0YWJs
ZSkKLSAgICAsIGluZmVycmVkU3RydWN0dXJlU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwg
ZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgSW5mZXJyZWRTdHJ1Y3R1cmUpCiAg
ICAgLCBpbmZlcnJlZFR5cGVTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBkZXN0cnVjdGli
bGVDZWxsSGVhcENlbGxUeXBlLmdldCgpLCBJbmZlcnJlZFR5cGUpCiAgICAgLCBtb2R1bGVQcm9n
cmFtRXhlY3V0YWJsZVNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGRlc3RydWN0aWJsZUNl
bGxIZWFwQ2VsbFR5cGUuZ2V0KCksIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKQogICAgICwgbmF0
aXZlRXhlY3V0YWJsZVNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGRlc3RydWN0aWJsZUNl
bGxIZWFwQ2VsbFR5cGUuZ2V0KCksIE5hdGl2ZUV4ZWN1dGFibGUpCiAgICAgLCBwcm9ncmFtRXhl
Y3V0YWJsZVNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGRlc3RydWN0aWJsZUNlbGxIZWFw
Q2VsbFR5cGUuZ2V0KCksIFByb2dyYW1FeGVjdXRhYmxlKQorICAgICwgaW5mZXJyZWRUeXBlc1dp
dGhGaW5hbGl6ZXJzKGluZmVycmVkVHlwZVNwYWNlKQogICAgICwgdm1UeXBlKHZtVHlwZSkKICAg
ICAsIGNsaWVudERhdGEoMCkKICAgICAsIHRvcEVudHJ5RnJhbWUobnVsbHB0cikKQEAgLTI5Miw3
ICsyOTIsNiBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAg
dW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZS5zZXQoKnRoaXMsIFVubGlua2VkRnVu
Y3Rpb25Db2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAg
ICB1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBVbmxp
bmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNO
dWxsKCkpKTsKICAgICBwcm9wZXJ0eVRhYmxlU3RydWN0dXJlLnNldCgqdGhpcywgUHJvcGVydHlU
YWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwotICAgIGluZmVycmVk
U3RydWN0dXJlU3RydWN0dXJlLnNldCgqdGhpcywgSW5mZXJyZWRTdHJ1Y3R1cmU6OmNyZWF0ZVN0
cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBpbmZlcnJlZFR5cGVTdHJ1Y3R1cmUu
c2V0KCp0aGlzLCBJbmZlcnJlZFR5cGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxs
KCkpKTsKICAgICBpbmZlcnJlZFR5cGVUYWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEluZmVycmVk
VHlwZVRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgaW5m
ZXJyZWRWYWx1ZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEluZmVycmVkVmFsdWU6OmNyZWF0ZVN0cnVj
dHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uaAkocmV2aXNpb24gMjI1NzI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkZ1bmN0aW9u
SGFzRXhlY3V0ZWRDYWNoZS5oIgogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJJbnRyaW5z
aWMuaCIKKyNpbmNsdWRlICJJc29DZWxsU2V0LmgiCiAjaW5jbHVkZSAiSXNvU3Vic3BhY2UuaCIK
ICNpbmNsdWRlICJKSVRUaHVua3MuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCkBAIC0zNDAs
MTEgKzM0MSwxMiBAQCBwdWJsaWM6CiAgICAgSXNvU3Vic3BhY2UgZGlyZWN0RXZhbEV4ZWN1dGFi
bGVTcGFjZTsKICAgICBJc29TdWJzcGFjZSBmdW5jdGlvbkV4ZWN1dGFibGVTcGFjZTsKICAgICBJ
c29TdWJzcGFjZSBpbmRpcmVjdEV2YWxFeGVjdXRhYmxlU3BhY2U7Ci0gICAgSXNvU3Vic3BhY2Ug
aW5mZXJyZWRTdHJ1Y3R1cmVTcGFjZTsKICAgICBJc29TdWJzcGFjZSBpbmZlcnJlZFR5cGVTcGFj
ZTsKICAgICBJc29TdWJzcGFjZSBtb2R1bGVQcm9ncmFtRXhlY3V0YWJsZVNwYWNlOwogICAgIElz
b1N1YnNwYWNlIG5hdGl2ZUV4ZWN1dGFibGVTcGFjZTsKICAgICBJc29TdWJzcGFjZSBwcm9ncmFt
RXhlY3V0YWJsZVNwYWNlOworICAgIAorICAgIElzb0NlbGxTZXQgaW5mZXJyZWRUeXBlc1dpdGhG
aW5hbGl6ZXJzOwogCiAgICAgVk1UeXBlIHZtVHlwZTsKICAgICBDbGllbnREYXRhKiBjbGllbnRE
YXRhOwpAQCAtMzkyLDcgKzM5NCw2IEBAIHB1YmxpYzoKICAgICBTdHJvbmc8U3RydWN0dXJlPiB1
bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+
IHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZTsKICAgICBTdHJvbmc8U3Ry
dWN0dXJlPiBwcm9wZXJ0eVRhYmxlU3RydWN0dXJlOwotICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGlu
ZmVycmVkU3RydWN0dXJlU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGluZmVycmVk
VHlwZVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBpbmZlcnJlZFR5cGVUYWJsZVN0
cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBpbmZlcnJlZFZhbHVlU3RydWN0dXJlOwpJ
bmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAy
MjU3MjUpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMzksNiArMjM5LDggQEAKIAkJMEZCMTRFMTgxODBGQTIxODAwOUI2QjRE
IC8qIEJhZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCYWcuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCMTRFMUExODEwRTFEQTAwOUI2QjREIC8qIEJhZ1Rv
SGFzaE1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCYWdUb0hhc2hNYXAuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZCMzE3QzMxQzQ4ODAwMTAwN0UzOTVBIC8qIFN5c3RlbVRyYWNpbmcu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3lzdGVtVHJhY2luZy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI0Njc4MjFGREUyODJCMDAzRkNCMDkgLyogQ29u
Y3VycmVudEJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25jdXJy
ZW50QnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjQ2NzgzMUZERTI4
MkMwMDNGQ0IwOSAvKiBDb25jdXJyZW50VmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENvbmN1cnJlbnRWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZDNDQ4ODIxNkZFOUZFMTAwODQ0QkU5IC8qIFByb2Nlc3NJRC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQcm9jZXNzSUQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZDNEVERTUxNjk2MTQ5NjAwRjY1MDQxIC8qIENvbW1hUHJpbnRlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21tYVByaW50ZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZEODFBQzQxNTRGQjIyRTAwOTgzRTcyIC8qIEZhc3RCaXRWZWN0b3Iu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmFzdEJpdFZlY3Rvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODA4LDggKzgxMCwxMCBAQAogCQkJCTBGOEYyQjkw
MTcyRTAwRjAwMDdEQkRBNSAvKiBDb21waWxhdGlvblRocmVhZC5oICovLAogCQkJCUE4QTQ3Mjcw
MTUxQTgyNUEwMDQxMjNGRiAvKiBDb21waWxlci5oICovLAogCQkJCTQ2QkE5RUFCMUY0Q0Q2MUUw
MDlBMkJCQyAvKiBDb21wbGV0aW9uSGFuZGxlci5oICovLAorCQkJCTBGQjQ2NzgyMUZERTI4MkIw
MDNGQ0IwOSAvKiBDb25jdXJyZW50QnVmZmVyLmggKi8sCiAJCQkJMEYzMENCNTgxRkNERjEzMzAw
NEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCAqLywKIAkJCQkwRjMwQ0I1OTFGQ0RG
MTMzMDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuaCAqLywKKwkJCQkwRkI0Njc4MzFG
REUyODJDMDAzRkNCMDkgLyogQ29uY3VycmVudFZlY3Rvci5oICovLAogCQkJCTBGREI2OThEMUI3
QzY0M0EwMDBDMTA3OCAvKiBDb25kaXRpb24uaCAqLywKIAkJCQkwRkZCQ0JGQTFGRDM3RTBGMDA3
MkFBRjAgLyogQ291bnRpbmdMb2NrLmggKi8sCiAJCQkJMEY4RTg1REExRkQ0ODVCMDAwNjkxODg5
IC8qIENvdW50aW5nTG9jay5jcHAgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Db25jdXJyZW50
QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ29uY3VycmVudEJ1ZmZlci5o
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRCdWZmZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9BdG9taWNz
Lmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0
aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gQ29u
Y3VycmVudEJ1ZmZlciBpcyBzdWl0YWJsZSBmb3Igd2hlbiB5b3UgcGxhbiB0byBzdG9yZSBpbW11
dGFibGUgZGF0YSBhbmQgc29tZXRpbWVzIGFwcGVuZCB0byBpdC4KKy8vIEl0IHN1cHBvcnRzIHN0
b3JpbmcgZGF0YSB0aGF0IGlzIG5vdCBjb3B5LWNvbnN0cnVjdGFibGUgYnV0IGJpdC1jb3B5YWJs
ZS4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBDb25jdXJyZW50QnVmZmVyIHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShDb25jdXJyZW50QnVmZmVyKTsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICAKKyAgICBDb25jdXJyZW50QnVmZmVyKCkKKyAgICB7
CisgICAgfQorICAgIAorICAgIH5Db25jdXJyZW50QnVmZmVyKCkKKyAgICB7CisgICAgICAgIEFy
cmF5KiBhcnJheSA9IG1fYXJyYXk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBh
cnJheS0+c2l6ZTsgKytpKQorICAgICAgICAgICAgYXJyYXktPmRhdGFbaV0uflQoKTsKKyAgICAg
ICAgZm9yIChBcnJheSogYXJyYXkgOiBtX2FsbEFycmF5cykKKyAgICAgICAgICAgIGZhc3RGcmVl
KGFycmF5KTsKKyAgICB9CisKKyAgICAvLyBHcm93aW5nIGlzIG5vdCBjb25jdXJyZW50LiBUaGlz
IGFzc3VtZXMgeW91IGFyZSBob2xkaW5nIHNvbWUgb3RoZXIgbG9jayBiZWZvcmUgeW91IGRvIHRo
aXMuCisgICAgdm9pZCBncm93RXhhY3Qoc2l6ZV90IG5ld1NpemUpCisgICAgeworICAgICAgICBB
cnJheSogYXJyYXkgPSBtX2FycmF5OworICAgICAgICBpZiAobmV3U2l6ZSA8PSBhcnJheS0+c2l6
ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgQXJyYXkqIG5ld0FycmF5ID0gY3JlYXRl
QXJyYXkobmV3U2l6ZSk7CisgICAgICAgIC8vIFRoaXMgYWxsb3dzIHVzIHRvIGRvIENvbmN1cnJl
bnRCdWZmZXI8c3RkOjp1bmlxdWVfcHRyPD4+LgorICAgICAgICBtZW1jcHkobmV3QXJyYXktPmRh
dGEsIGFycmF5LT5kYXRhLCBzaXplb2YoVCkgKiBhcnJheS0+c2l6ZSk7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGFycmF5LT5zaXplOyBpIDwgbmV3U2l6ZTsgKytpKQorICAgICAgICAgICAg
bmV3IChuZXdBcnJheS0+ZGF0YSArIGkpIFQoKTsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVu
Y2UoKTsKKyAgICAgICAgbV9hcnJheSA9IG5ld0FycmF5OworICAgICAgICBXVEY6OnN0b3JlU3Rv
cmVGZW5jZSgpOworICAgICAgICBtX2FsbEFycmF5cy5hcHBlbmQobmV3QXJyYXkpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGdyb3coc2l6ZV90IG5ld1NpemUpCisgICAgeworICAgICAgICBzaXpl
X3Qgc2l6ZSA9IG1fYXJyYXktPnNpemU7CisgICAgICAgIGlmIChuZXdTaXplIDw9IHNpemUpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIGdyb3dFeGFjdChzdGQ6Om1heChuZXdTaXplLCBz
aXplICogMikpOworICAgIH0KKyAgICAKKyAgICBzdHJ1Y3QgQXJyYXkgeworICAgICAgICB1bnNp
Z25lZCBzaXplOyAvLyBUaGlzIGlzIGFuIGltbXV0YWJsZSBzaXplLgorICAgICAgICBUIGRhdGFb
MV07CisgICAgfTsKKyAgICAKKyAgICBBcnJheSogYXJyYXkoKSBjb25zdCB7IHJldHVybiBtX2Fy
cmF5OyB9CisgICAgCisgICAgVCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1f
YXJyYXktPmRhdGFbaW5kZXhdOyB9CisgICAgY29uc3QgVCYgb3BlcmF0b3JbXShzaXplX3QgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIG1fYXJyYXktPmRhdGFbaW5kZXhdOyB9CisgICAgCitwcml2YXRl
OgorICAgIEFycmF5KiBjcmVhdGVBcnJheSh1bnNpZ25lZCBzaXplKQorICAgIHsKKyAgICAgICAg
QXJyYXkqIHJlc3VsdCA9IHN0YXRpY19jYXN0PEFycmF5Kj4oZmFzdE1hbGxvYyhPQkpFQ1RfT0ZG
U0VUT0YoQXJyYXksIGRhdGEpICsgc2l6ZW9mKFQpICogc2l6ZSkpOworICAgICAgICByZXN1bHQt
PnNpemUgPSBzaXplOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBB
cnJheSogbV9hcnJheSB7IG51bGxwdHIgfTsKKyAgICBWZWN0b3I8QXJyYXkqPiBtX2FsbEFycmF5
czsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Db25j
dXJyZW50VmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ29uY3VycmVudFZl
Y3Rvci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRWZWN0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5h
bWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENvbmN1cnJlbnRWZWN0b3JfaAorI2Rl
ZmluZSBDb25jdXJyZW50VmVjdG9yX2gKKworI2luY2x1ZGUgPHd0Zi9Db25jdXJyZW50QnVmZmVy
Lmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBXVEYgeworCisv
LyBBbiBpdGVyYXRvciBmb3IgQ29uY3VycmVudFZlY3Rvci4gSXQgc3VwcG9ydHMgb25seSB0aGUg
cHJlICsrIG9wZXJhdG9yCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc2l6ZV90IFNlZ21lbnRTaXpl
ID0gOD4gY2xhc3MgQ29uY3VycmVudFZlY3RvcjsKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXpl
X3QgU2VnbWVudFNpemUgPSA4PiBjbGFzcyBDb25jdXJyZW50VmVjdG9ySXRlcmF0b3IgeworcHJp
dmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ29uY3VycmVudFZlY3RvcjxULCBTZWdtZW50U2l6ZT47
CitwdWJsaWM6CisgICAgdHlwZWRlZiBDb25jdXJyZW50VmVjdG9ySXRlcmF0b3I8VCwgU2VnbWVu
dFNpemU+IEl0ZXJhdG9yOworCisgICAgfkNvbmN1cnJlbnRWZWN0b3JJdGVyYXRvcigpIHsgfQor
CisgICAgVCYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3IuYXQobV9pbmRleCk7
IH0KKyAgICBUKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJm1fdmVjdG9yLmF0KG1faW5k
ZXgpOyB9CisKKyAgICAvLyBPbmx5IHByZWZpeCArKyBvcGVyYXRvciBzdXBwb3J0ZWQKKyAgICBJ
dGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgeworICAgICAgICBtX2luZGV4Kys7CisgICAgICAg
IHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSXRlcmF0
b3ImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIu
bV9pbmRleCAmJiAmbV92ZWN0b3IgPT0gJm90aGVyLm1fdmVjdG9yOworICAgIH0KKworICAgIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBJdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9pbmRleCAhPSBvdGhlci5tX2luZGV4IHx8ICZtX3ZlY3RvciAhPSAmb3RoZXIu
bV92ZWN0b3I7CisgICAgfQorCisgICAgQ29uY3VycmVudFZlY3Rvckl0ZXJhdG9yJiBvcGVyYXRv
cj0oY29uc3QgQ29uY3VycmVudFZlY3Rvckl0ZXJhdG9yPFQsIFNlZ21lbnRTaXplPiYgb3RoZXIp
CisgICAgeworICAgICAgICBtX3ZlY3RvciA9IG90aGVyLm1fdmVjdG9yOworICAgICAgICBtX2lu
ZGV4ID0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBDb25jdXJyZW50VmVjdG9ySXRlcmF0b3IoQ29uY3VycmVudFZlY3RvcjxULCBT
ZWdtZW50U2l6ZT4mIHZlY3Rvciwgc2l6ZV90IGluZGV4KQorICAgICAgICA6IG1fdmVjdG9yKHZl
Y3RvcikKKyAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgIHsKKyAgICB9CisKKyAgICBDb25j
dXJyZW50VmVjdG9yPFQsIFNlZ21lbnRTaXplPiYgbV92ZWN0b3I7CisgICAgc2l6ZV90IG1faW5k
ZXg7Cit9OworCisvLyBDb25jdXJyZW50VmVjdG9yIGlzIGxpa2UgU2VnbWVudGVkVmVjdG9yLCBi
dXQgc3VpdGFibGUgZm9yIHNjZW5hcmlvcyB3aGVyZSBvbmUgdGhyZWFkIGFwcGVuZHMKKy8vIGVs
ZW1lbnRzIGFuZCBhbm90aGVyIHRocmVhZCBjb250aW51ZXMgdG8gYWNjZXNzIGVsZW1lbnRzIGF0
IGxvd2VyIGluZGljZXMuIE9ubHkgb25lIHRocmVhZCBjYW4KKy8vIGFwcGVuZCBhdCBhIHRpbWUs
IHNvIHRoYXQgYWN0aXZpdHkgc3RpbGwgbmVlZHMgbG9ja2luZy4KK3RlbXBsYXRlIDx0eXBlbmFt
ZSBULCBzaXplX3QgU2VnbWVudFNpemU+CitjbGFzcyBDb25jdXJyZW50VmVjdG9yIHsKKyAgICBm
cmllbmQgY2xhc3MgQ29uY3VycmVudFZlY3Rvckl0ZXJhdG9yPFQsIFNlZ21lbnRTaXplPjsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb25jdXJyZW50VmVjdG9yKTsKKyAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKKworcHVibGljOgorICAgIHR5cGVkZWYgQ29uY3VycmVudFZlY3Rvckl0
ZXJhdG9yPFQsIFNlZ21lbnRTaXplPiBJdGVyYXRvcjsKKworICAgIENvbmN1cnJlbnRWZWN0b3Io
KSA9IGRlZmF1bHQ7CisKKyAgICB+Q29uY3VycmVudFZlY3RvcigpCisgICAgeworICAgIH0KKwor
ICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgYm9vbCBpc0Vt
cHR5KCkgY29uc3QgeyByZXR1cm4gIXNpemUoKTsgfQorCisgICAgVCYgYXQoc2l6ZV90IGluZGV4
KQorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaW5kZXgg
PCBtX3NpemUpOworICAgICAgICByZXR1cm4gc2VnbWVudEZvcihpbmRleCktPmVudHJpZXNbc3Vi
c2NyaXB0Rm9yKGluZGV4KV07CisgICAgfQorCisgICAgY29uc3QgVCYgYXQoc2l6ZV90IGluZGV4
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8Q29uY3VycmVudFZlY3Rv
cjxULCBTZWdtZW50U2l6ZT4qPih0aGlzKS0+YXQoaW5kZXgpOworICAgIH0KKworICAgIFQmIG9w
ZXJhdG9yW10oc2l6ZV90IGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KGluZGV4KTsK
KyAgICB9CisKKyAgICBjb25zdCBUJiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBhdChpbmRleCk7CisgICAgfQorCisgICAgVCYgZmlyc3QoKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIWlzRW1wdHko
KSk7CisgICAgICAgIHJldHVybiBhdCgwKTsKKyAgICB9CisgICAgY29uc3QgVCYgZmlyc3QoKSBj
b25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIWlz
RW1wdHkoKSk7CisgICAgICAgIHJldHVybiBhdCgwKTsKKyAgICB9CisgICAgVCYgbGFzdCgpCisg
ICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighaXNFbXB0eSgp
KTsKKyAgICAgICAgcmV0dXJuIGF0KHNpemUoKSAtIDEpOworICAgIH0KKyAgICBjb25zdCBUJiBs
YXN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FU
SU9OKCFpc0VtcHR5KCkpOworICAgICAgICByZXR1cm4gYXQoc2l6ZSgpIC0gMSk7CisgICAgfQor
CisgICAgVCB0YWtlTGFzdCgpCisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTighaXNFbXB0eSgpKTsKKyAgICAgICAgVCByZXN1bHQgPSBXVEZNb3ZlKGxhc3Qo
KSk7CisgICAgICAgIC0tbV9zaXplOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgdm9pZCBhcHBlbmQoQXJncyYmLi4u
IGFyZ3MpCisgICAgeworICAgICAgICArK21fc2l6ZTsKKyAgICAgICAgaWYgKCFzZWdtZW50RXhp
c3RzRm9yKG1fc2l6ZSAtIDEpKQorICAgICAgICAgICAgYWxsb2NhdGVTZWdtZW50KCk7CisgICAg
ICAgIG5ldyAoTm90TnVsbCwgJmxhc3QoKSkgVChzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4p
OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgVCYgYWxsb2Mo
QXJncyYmLi4uIGFyZ3MpCisgICAgeworICAgICAgICBhcHBlbmQoc3RkOjpmb3J3YXJkPEFyZ3M+
KGFyZ3MpLi4uKTsKKyAgICAgICAgcmV0dXJuIGxhc3QoKTsKKyAgICB9CisKKyAgICB2b2lkIHJl
bW92ZUxhc3QoKQorICAgIHsKKyAgICAgICAgbGFzdCgpLn5UKCk7CisgICAgICAgIC0tbV9zaXpl
OworICAgIH0KKworICAgIHZvaWQgZ3JvdyhzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIEFT
U0VSVChzaXplID4gbV9zaXplKTsKKyAgICAgICAgZW5zdXJlU2VnbWVudHNGb3Ioc2l6ZSk7Cisg
ICAgICAgIHNpemVfdCBvbGRTaXplID0gbV9zaXplOworICAgICAgICBtX3NpemUgPSBzaXplOwor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gb2xkU2l6ZTsgaSA8IG1fc2l6ZTsgKytpKQorICAgICAg
ICAgICAgbmV3IChOb3ROdWxsLCAmYXQoaSkpIFQoKTsKKyAgICB9CisKKyAgICBJdGVyYXRvciBi
ZWdpbigpCisgICAgeworICAgICAgICByZXR1cm4gSXRlcmF0b3IoKnRoaXMsIDApOworICAgIH0K
KworICAgIEl0ZXJhdG9yIGVuZCgpCisgICAgeworICAgICAgICByZXR1cm4gSXRlcmF0b3IoKnRo
aXMsIG1fc2l6ZSk7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0cnVjdCBTZWdtZW50IHsKKyAg
ICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworICAgICAgICAgICAgCisgICAg
ICAgIFQgZW50cmllc1tTZWdtZW50U2l6ZV07CisgICAgfTsKKworICAgIGJvb2wgc2VnbWVudEV4
aXN0c0ZvcihzaXplX3QgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gaW5kZXggLyBTZWdt
ZW50U2l6ZSA8IG1fbnVtU2VnbWVudHM7CisgICAgfQorCisgICAgU2VnbWVudCogc2VnbWVudEZv
cihzaXplX3QgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gbV9zZWdtZW50c1tpbmRleCAv
IFNlZ21lbnRTaXplXS5nZXQoKTsKKyAgICB9CisKKyAgICBzaXplX3Qgc3Vic2NyaXB0Rm9yKHNp
emVfdCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBpbmRleCAlIFNlZ21lbnRTaXplOwor
ICAgIH0KKworICAgIHZvaWQgZW5zdXJlU2VnbWVudHNGb3Ioc2l6ZV90IHNpemUpCisgICAgewor
ICAgICAgICBzaXplX3Qgc2VnbWVudENvdW50ID0gKG1fc2l6ZSArIFNlZ21lbnRTaXplIC0gMSkg
LyBTZWdtZW50U2l6ZTsKKyAgICAgICAgc2l6ZV90IG5lZWRlZFNlZ21lbnRDb3VudCA9IChzaXpl
ICsgU2VnbWVudFNpemUgLSAxKSAvIFNlZ21lbnRTaXplOworCisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSBzZWdtZW50Q291bnQgPyBzZWdtZW50Q291bnQgLSAxIDogMDsgaSA8IG5lZWRlZFNlZ21l
bnRDb3VudDsgKytpKQorICAgICAgICAgICAgZW5zdXJlU2VnbWVudChpKTsKKyAgICB9CisKKyAg
ICB2b2lkIGVuc3VyZVNlZ21lbnQoc2l6ZV90IHNlZ21lbnRJbmRleCkKKyAgICB7CisgICAgICAg
IEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHNlZ21lbnRJbmRleCA8PSBtX251bVNl
Z21lbnRzKTsKKyAgICAgICAgaWYgKHNlZ21lbnRJbmRleCA9PSBtX251bVNlZ21lbnRzKQorICAg
ICAgICAgICAgYWxsb2NhdGVTZWdtZW50KCk7CisgICAgfQorCisgICAgdm9pZCBhbGxvY2F0ZVNl
Z21lbnQoKQorICAgIHsKKyAgICAgICAgbV9zZWdtZW50cy5ncm93KG1fbnVtU2VnbWVudHMgKyAx
KTsKKyAgICAgICAgbV9zZWdtZW50c1ttX251bVNlZ21lbnRzKytdID0gc3RkOjptYWtlX3VuaXF1
ZTxTZWdtZW50PigpOworICAgIH0KKworICAgIHNpemVfdCBtX3NpemUgeyAwIH07CisgICAgQ29u
Y3VycmVudEJ1ZmZlcjxzdGQ6OnVuaXF1ZV9wdHI8U2VnbWVudD4+IG1fc2VnbWVudHM7CisgICAg
c2l6ZV90IG1fbnVtU2VnbWVudHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcg
V1RGOjpDb25jdXJyZW50VmVjdG9yOworCisjZW5kaWYgLy8gQ29uY3VycmVudFZlY3Rvcl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329045</attachid>
            <date>2017-12-11 15:21:15 -0800</date>
            <delta_ts>2017-12-11 16:54:04 -0800</delta_ts>
            <desc>starting to pass some tests</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>63155</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDIyNTcyNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNDk1LDYg
KzQ5NSw3IEBAIGhlYXAvSGVhcFNuYXBzaG90LmNwcAogaGVhcC9IZWFwU25hcHNob3RCdWlsZGVy
LmNwcAogaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwCiBoZWFwL0lzb0FsaWduZWRNZW1vcnlB
bGxvY2F0b3IuY3BwCitoZWFwL0lzb0NlbGxTZXQuY3BwCiBoZWFwL0lzb1N1YnNwYWNlLmNwcAog
aGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAKIGhlYXAvTGFyZ2VBbGxvY2F0aW9uLmNwcApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyNTcyNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC00NzQsNiArNDc0LDkgQEAKIAkJMEZCMTc2NjMxOTZCOEY5RTAw
OTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZCMTc2NUYxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5o
ICovOyB9OwogCQkwRkIzODc4RTFCRkJDNDREMDBFM0FCMUUgLyogQWlyQmxvY2tXb3JrbGlzdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMzg3OEIx
QkZCQzQ0RDAwRTNBQjFFIC8qIEFpckJsb2NrV29ya2xpc3QuaCAqLzsgfTsKIAkJMEZCMzg3OTAx
QkZCQzQ0RDAwRTNBQjFFIC8qIEFpck9wdGltaXplQmxvY2tPcmRlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMzg3OEQxQkZCQzQ0RDAwRTNBQjFF
IC8qIEFpck9wdGltaXplQmxvY2tPcmRlci5oICovOyB9OworCQkwRkI0Njc3RjFGRERBNkU5MDAz
RkNCMDkgLyogQXRvbUluZGljZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQjQ2NzdFMUZEREE2RTUwMDNGQ0IwOSAvKiBBdG9tSW5kaWNlcy5oICov
OyB9OworCQkwRkI0Njc4MDFGRERBNkYxMDAzRkNCMDkgLyogSXNvQ2VsbFNldC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNDY3N0QxRkREQTZEOTAw
M0ZDQjA5IC8qIElzb0NlbGxTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkwRkI0Njc4MTFGRERBNkY3MDAzRkNCMDkgLyogSXNvQ2VsbFNldElu
bGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QjQ2NzdCMUZEREE2RDgwMDNGQ0IwOSAvKiBJc29DZWxsU2V0SW5saW5lcy5oICovOyB9OwogCQkw
RkI0NzY3RTFEOTlBRUE5MDA4RUE2Q0IgLyogR0NEZWZlcnJhbENvbnRleHQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjQ3NjdDMUQ5OUFFQTcwMDhF
QTZDQiAvKiBHQ0RlZmVycmFsQ29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGQjQ3NjdGMUQ5OUFFQUQwMDhFQTZDQiAvKiBHQ0RlZmVy
cmFsQ29udGV4dElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQjQ3NjdEMUQ5OUFFQTcwMDhFQTZDQiAvKiBHQ0RlZmVycmFsQ29udGV4dElu
bGluZXMuaCAqLzsgfTsKIAkJMEZCNEZCNzQxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlTbG93
UGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZC
NEZCNzExQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aC5oICovOyB9OwpAQCAtMjU2
Miw2ICsyNTY1LDEwIEBACiAJCTBGQjM4NzkxMUJGRDMxQTEwMEUzQUIxRSAvKiBGVExDb21waWxl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTENvbXBpbGUuY3Bw
OyBwYXRoID0gZnRsL0ZUTENvbXBpbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkI0MTU4MzFENzhGOTgyMDBERjhEMDkgLyogQXJyYXlDb252ZW50aW9ucy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcnJheUNvbnZlbnRpb25zLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNDM4QTIxOTI3MEIxRDAwRTFGQkM5IC8qIFN0
cnVjdHVyZVNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJ1
Y3R1cmVTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI0Njc3QjFGRERB
NkQ4MDAzRkNCMDkgLyogSXNvQ2VsbFNldElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSXNvQ2VsbFNldElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZCNDY3N0MxRkREQTZEOTAwM0ZDQjA5IC8qIElzb0NlbGxTZXQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSXNvQ2VsbFNldC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGQjQ2NzdEMUZEREE2RDkwMDNGQ0IwOSAvKiBJc29DZWxsU2V0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElzb0NlbGxTZXQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCNDY3N0UxRkREQTZFNTAwM0ZDQjA5IC8qIEF0b21J
bmRpY2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF0b21JbmRpY2VzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjQ3NjdDMUQ5OUFFQTcwMDhFQTZDQiAv
KiBHQ0RlZmVycmFsQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBH
Q0RlZmVycmFsQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0NzY3
RDFEOTlBRUE3MDA4RUE2Q0IgLyogR0NEZWZlcnJhbENvbnRleHRJbmxpbmVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDRGVmZXJyYWxDb250ZXh0SW5saW5lcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0QjUxMDE2QjNBOTY0MDAzRjY5NkIgLyogREZH
TWluaWZpZWRJRC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdNaW5pZmll
ZElELmg7IHBhdGggPSBkZmcvREZHTWluaWZpZWRJRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNTUyNSw2ICs1NTMyLDcgQEAKIAkJCQkwRjk2MzAzNTFENDE5MkMzMDA1NjA5RDkg
LyogQWxsb2NhdG9yQXR0cmlidXRlcy5jcHAgKi8sCiAJCQkJMEY5NjMwMzYxRDQxOTJDMzAwNTYw
OUQ5IC8qIEFsbG9jYXRvckF0dHJpYnV0ZXMuaCAqLywKIAkJCQkwRjMwQ0I1RDFGQ0U0NkI0MDA0
QjUzMjMgLyogQWxsb2NhdG9yRm9yTW9kZS5oICovLAorCQkJCTBGQjQ2NzdFMUZEREE2RTUwMDNG
Q0IwOSAvKiBBdG9tSW5kaWNlcy5oICovLAogCQkJCTBGREU4N0Y4MURGRDBDNkQwMDY0QzM5MCAv
KiBDZWxsQ29udGFpbmVyLmNwcCAqLywKIAkJCQkwRjA3MEE0MjFENTQzQTg5MDA2RTcyMzIgLyog
Q2VsbENvbnRhaW5lci5oICovLAogCQkJCTBGMDcwQTQzMUQ1NDNBODkwMDZFNzIzMiAvKiBDZWxs
Q29udGFpbmVySW5saW5lcy5oICovLApAQCAtNTYxMSw2ICs1NjE5LDkgQEAKIAkJCQlDMjVGOEJD
QzE1NzU0NEE5MDAyNDVCNzEgLyogSW5jcmVtZW50YWxTd2VlcGVyLmggKi8sCiAJCQkJMEZEQ0Ux
MkYxRkIxMUQ5RDAwNkYzOTAxIC8qIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwICovLAog
CQkJCTBGRENFMTMwMUZCMTFEOUQwMDZGMzkwMSAvKiBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9y
LmggKi8sCisJCQkJMEZCNDY3N0MxRkREQTZEOTAwM0ZDQjA5IC8qIElzb0NlbGxTZXQuY3BwICov
LAorCQkJCTBGQjQ2NzdEMUZEREE2RDkwMDNGQ0IwOSAvKiBJc29DZWxsU2V0LmggKi8sCisJCQkJ
MEZCNDY3N0IxRkREQTZEODAwM0ZDQjA5IC8qIElzb0NlbGxTZXRJbmxpbmVzLmggKi8sCiAJCQkJ
MEZEQ0UxMkMxRkFGQjRERTAwNkYzOTAxIC8qIElzb1N1YnNwYWNlLmNwcCAqLywKIAkJCQkwRkRD
RTEyQjFGQUZCNERFMDA2RjM5MDEgLyogSXNvU3Vic3BhY2UuaCAqLywKIAkJCQkwRjc2NkQyOTE1
QThDQzM0MDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuY3BwICovLApAQCAtNzk5Nyw2ICs4
MDA4LDcgQEAKIAkJCQkwRkVDODU3MjFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQzYzQkMxRTYzNDQwQzAwQzEzODM5IC8qIEFpckJsb2Nr
SW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkIzODc4RTFCRkJDNDREMDBFM0FC
MUUgLyogQWlyQmxvY2tXb3JrbGlzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCNDY3ODExRkRE
QTZGNzAwM0ZDQjA5IC8qIElzb0NlbGxTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
Rjc5QzdDQTFFNzRDOTNCMDBFQjM0RDEgLyogQWlyQnJlYWtDcml0aWNhbEVkZ2VzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjYxODMyQTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252
ZW50aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODU3NDFCREFDREM3MDA4MEZGNzQgLyog
QWlyQ0NhbGxTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKQEAgLTg5NzMsNiArODk4NSw3IEBACiAJ
CQkJQUQyRkNCRTUxREI1OERBRDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQURFODAyOTkxRTA4RjFERTAwNThERTc4IC8qIEpTV2ViQXNzZW1i
bHlMaW5rRXJyb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQkU3MURCNThEQUQwMEIzRTcz
NiAvKiBKU1dlYkFzc2VtYmx5TWVtb3J5LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkI0Njc3RjFG
RERBNkU5MDAzRkNCMDkgLyogQXRvbUluZGljZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZD
QzA1MURCNThEQUQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5TW9kdWxlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBRDJGQ0JFOTFEQjU4REFEMDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseVJ1bnRpbWVF
cnJvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNCRUIxREI1OERBRDAwQjNFNzM2IC8qIEpT
V2ViQXNzZW1ibHlUYWJsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05MjU5LDYgKzkyNzIsNyBAQAog
CQkJCUMyMEJBOTJEMTZCQjFDMTUwMEIzQUVBMiAvKiBTdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTMzMkE1MTRDQTdEREQwMDg1RjNDNiAvKiBTdHJ1Y3R1
cmVTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzY2RDM5MTVBRTRBMUYwMDhGMzYzRSAvKiBT
dHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkI0
Njc4MDFGRERBNkYxMDAzRkNCMDkgLyogSXNvQ2VsbFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkNDRjBEMDgwRUYwQUFCOTAwNDEzQzhGIC8qIFN0cnVjdHVyZVN0dWJJbmZvLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzkwNDE0ODBFQjkyNTA5MDBGRTI2RkEgLyogU3RydWN0dXJlVHJhbnNpdGlv
blRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjdERjEzNzFFMjk3MEUxMDA5NTk1MUIgLyog
U3Vic3BhY2UuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQXRvbUluZGljZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9BdG9tSW5kaWNlcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0F0b21JbmRpY2VzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitzdHJ1Y3QgQXRv
bUluZGljZXMgeworICAgIEF0b21JbmRpY2VzKCkgeyB9CisgICAgCisgICAgQXRvbUluZGljZXMo
SGVhcENlbGwqIGNlbGwpCisgICAgICAgIDogYmxvY2soTWFya2VkQmxvY2s6OmJsb2NrRm9yKGNl
bGwpKQorICAgICAgICAsIGJsb2NrSW5kZXgoYmxvY2stPmhhbmRsZSgpLmluZGV4KCkpCisgICAg
ICAgICwgYXRvbU51bWJlcihibG9jay0+YXRvbU51bWJlcihjZWxsKSkKKyAgICB7CisgICAgfQor
ICAgIAorICAgIE1hcmtlZEJsb2NrKiBibG9jazsKKyAgICBzaXplX3QgYmxvY2tJbmRleDsKKyAg
ICBzaXplX3QgYXRvbU51bWJlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjI1NzI1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQy
LDcgQEAKICNpbmNsdWRlICJJbmNyZW1lbnRhbFN3ZWVwZXIuaCIKICNpbmNsdWRlICJJbmZlcnJl
ZFN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCisjaW5jbHVkZSAiSXNvQ2Vs
bFNldElubGluZXMuaCIKICNpbmNsdWRlICJKSVRTdHViUm91dGluZVNldC5oIgogI2luY2x1ZGUg
IkpJVFdvcmtsaXN0LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgpAQCAtNTUyLDE4ICs1NTMs
MTggQEAgdm9pZCBIZWFwOjphZGRSZWZlcmVuY2UoSlNDZWxsKiBjZWxsLCBBcgogICAgIH0KIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGU+Ci12b2lkIEhlYXA6OmZpbmFsaXplVW5jb25k
aXRpb25hbEZpbmFsaXplcnMoU3Vic3BhY2UmIHN1YnNwYWNlKQordGVtcGxhdGU8dHlwZW5hbWUg
Q2VsbFR5cGUsIHR5cGVuYW1lIENlbGxTZXQ+Cit2b2lkIEhlYXA6OmZpbmFsaXplVW5jb25kaXRp
b25hbEZpbmFsaXplcnMoQ2VsbFNldCYgY2VsbFNldCkKIHsKLSAgICBzdWJzcGFjZS5mb3JFYWNo
TWFya2VkQ2VsbCgKKyAgICBjZWxsU2V0LmZvckVhY2hNYXJrZWRDZWxsKAogICAgICAgICBbJl0g
KEhlYXBDZWxsKiBjZWxsLCBIZWFwQ2VsbDo6S2luZCkgewotICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8Q2VsbFR5cGUqPihjZWxsKS0+ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKnZtKCkpOworICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENlbGxUeXBlKj4oY2VsbCktPmZpbmFsaXplVW5j
b25kaXRpb25hbGx5KCp2bSgpKTsKICAgICAgICAgfSk7CiB9CiAKIHZvaWQgSGVhcDo6ZmluYWxp
emVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpCiB7Ci0gICAgZmluYWxpemVVbmNvbmRpdGlvbmFs
RmluYWxpemVyczxJbmZlcnJlZFN0cnVjdHVyZT4odm0oKS0+aW5mZXJyZWRTdHJ1Y3R1cmVTcGFj
ZSk7CisgICAgZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVyczxJbmZlcnJlZFR5cGU+KHZt
KCktPmluZmVycmVkVHlwZXNXaXRoRmluYWxpemVycyk7CiAgICAgCiAgICAgd2hpbGUgKG1fdW5j
b25kaXRpb25hbEZpbmFsaXplcnMuaGFzTmV4dCgpKSB7CiAgICAgICAgIFVuY29uZGl0aW9uYWxG
aW5hbGl6ZXIqIGZpbmFsaXplciA9IG1fdW5jb25kaXRpb25hbEZpbmFsaXplcnMucmVtb3ZlTmV4
dCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjI1NzI1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
OTYsOCArNDk2LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIG5vdGlmeUluY3JlbWVudGFsU3dlZXBl
cigpOwogICAgIHZvaWQgaGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7CiAKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDZWxsVHlwZT4KLSAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXpl
cnMoU3Vic3BhY2UmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgdHlwZW5hbWUg
Q2VsbFNldD4KKyAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMoQ2VsbFNl
dCYpOwogICAgIAogICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpOwog
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5jcHAJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSXNv
Q2VsbFNldC5oIgorCisjaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oIgorI2luY2x1
ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworSXNvQ2VsbFNl
dDo6SXNvQ2VsbFNldChJc29TdWJzcGFjZSYgc3Vic3BhY2UpCisgICAgOiBtX3N1YnNwYWNlKHN1
YnNwYWNlKQoreworICAgIHNpemVfdCBzaXplID0gc3Vic3BhY2UubV9hbGxvY2F0b3IubV9ibG9j
a3Muc2l6ZSgpOworICAgIG1fYmxvY2tzV2l0aEJpdHMucmVzaXplKHNpemUpOworICAgIG1fYml0
cy5ncm93KHNpemUpOworICAgIHN1YnNwYWNlLm1fY2VsbFNldHMuYXBwZW5kKHRoaXMpOworfQor
CitJc29DZWxsU2V0Ojp+SXNvQ2VsbFNldCgpCit7CisgICAgaWYgKGlzT25MaXN0KCkpCisgICAg
ICAgIEJhc2ljUmF3U2VudGluZWxOb2RlPElzb0NlbGxTZXQ+OjpyZW1vdmUoKTsKK30KKworTkVW
RVJfSU5MSU5FIEJpdG1hcDxNYXJrZWRCbG9jazo6YXRvbXNQZXJCbG9jaz4qIElzb0NlbGxTZXQ6
OmFkZFNsb3coc2l6ZV90IGJsb2NrSW5kZXgpCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
ayhtX3N1YnNwYWNlLm1fYWxsb2NhdG9yLm1fYml0dmVjdG9yTG9jayk7CisgICAgYXV0byYgYml0
c1B0clJlZiA9IG1fYml0c1tibG9ja0luZGV4XTsKKyAgICBhdXRvKiBiaXRzID0gYml0c1B0clJl
Zi5nZXQoKTsKKyAgICBpZiAoIWJpdHMpIHsKKyAgICAgICAgbV9ibG9ja3NXaXRoQml0c1tibG9j
a0luZGV4XSA9IHRydWU7CisgICAgICAgIGJpdHNQdHJSZWYgPSBzdGQ6Om1ha2VfdW5pcXVlPEJp
dG1hcDxNYXJrZWRCbG9jazo6YXRvbXNQZXJCbG9jaz4+KCk7CisgICAgICAgIGJpdHMgPSBiaXRz
UHRyUmVmLmdldCgpOworICAgIH0KKyAgICByZXR1cm4gYml0czsKK30KKwordm9pZCBJc29DZWxs
U2V0OjpkaWRSZXNpemVCaXRzKHNpemVfdCBuZXdTaXplKQoreworICAgIG1fYmxvY2tzV2l0aEJp
dHMucmVzaXplKG5ld1NpemUpOworICAgIG1fYml0cy5ncm93KG5ld1NpemUpOworfQorCit2b2lk
IElzb0NlbGxTZXQ6OmRpZFJlbW92ZUJsb2NrKHNpemVfdCBibG9ja0luZGV4KQoreworICAgIG1f
YmxvY2tzV2l0aEJpdHNbYmxvY2tJbmRleF0gPSBmYWxzZTsKKyAgICBtX2JpdHNbYmxvY2tJbmRl
eF0gPSBudWxscHRyOworfQorCit2b2lkIElzb0NlbGxTZXQ6OnN3ZWVwVG9GcmVlTGlzdChNYXJr
ZWRCbG9jazo6SGFuZGxlKiBibG9jaykKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghYmxvY2stPmlz
QWxsb2NhdGVkKCkpOworICAgIAorICAgIGlmICghbV9ibG9ja3NXaXRoQml0c1tibG9jay0+aW5k
ZXgoKV0pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoYmxvY2stPmhhc0FueU5ld2x5
QWxsb2NhdGVkKCkpIHsKKyAgICAgICAgbV9iaXRzW2Jsb2NrLT5pbmRleCgpXS0+ZmlsdGVyKGJs
b2NrLT5uZXdseUFsbG9jYXRlZCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChibG9jay0+aXNFbXB0eSgpIHx8IGJsb2NrLT5hcmVNYXJrc1N0YWxlKCkpIHsKKyAgICAgICAg
bV9ibG9ja3NXaXRoQml0c1tibG9jay0+aW5kZXgoKV0gPSBmYWxzZTsKKyAgICAgICAgbV9iaXRz
W2Jsb2NrLT5pbmRleCgpXSA9IG51bGxwdHI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
CisgICAgbV9iaXRzW2Jsb2NrLT5pbmRleCgpXS0+ZmlsdGVyKGJsb2NrLT5ibG9jaygpLm1hcmtz
KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSXNvQ2VsbFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0lzb0NlbGxTZXQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Jc29DZWxsU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIkF0b21JbmRpY2VzLmgiCisjaW5jbHVkZSA8d3RmL0JpdG1hcC5oPgorI2lu
Y2x1ZGUgPHd0Zi9Db25jdXJyZW50VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RCaXRWZWN0
b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEhlYXBDZWxsOworY2xhc3MgSXNvU3Vi
c3BhY2U7CisKKy8vIENyZWF0ZSBhIHNldCBvZiBjZWxscyB0aGF0IGFyZSBpbiBhbiBJc29TdWJz
cGFjZS4gVGhpcyBhbGxvd3MgY29uY3VycmVudCBPKDEpIHNldCBpbnNlcnRpb24gYW5kCisvLyBy
ZW1vdmFsLiBFYWNoIHN1Y2ggc2V0IHNob3VsZCBiZSB0aG91Z2h0IG9mIGFzIGEgMC44JSBpbmNy
ZWFzZSBpbiBvYmplY3Qgc2l6ZSBmb3Igb2JqZWN0cyBpbiB0aGF0CisvLyBJc29TdWJzcGFjZSAo
aXQncyBsaWtlIGFkZGluZyAxIGJpdCBldmVyeSAxNiBieXRlcywgb3IgMSBiaXQgZXZlcnkgMTI4
IGJpdHMpLgorY2xhc3MgSXNvQ2VsbFNldCA6IHB1YmxpYyBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxJ
c29DZWxsU2V0PiB7CitwdWJsaWM6CisgICAgSXNvQ2VsbFNldChJc29TdWJzcGFjZSYgc3Vic3Bh
Y2UpOworICAgIH5Jc29DZWxsU2V0KCk7CisgICAgCisgICAgYm9vbCBhZGQoSGVhcENlbGwqIGNl
bGwpOworICAgIAorICAgIGJvb2wgcmVtb3ZlKEhlYXBDZWxsKiBjZWxsKTsKKyAgICAKKyAgICBi
b29sIGNvbnRhaW5zKEhlYXBDZWxsKiBjZWxsKSBjb25zdDsKKyAgICAKKyAgICAvLyBUaGlzIHdp
bGwgaGF2ZSB0byBkbyBhIGNvbWJpbmVkIHNlYXJjaCBvdmVyIHdoYXRldmVyIFN1YnNwYWNlOjpm
b3JFYWNoTWFya2VkQ2VsbCB1c2VzIGFuZAorICAgIC8vIG91ciBtX2Jsb2Nrc1dpdGhCaXRzLgor
ICAgIC8vIE5PVEU6IEl0J3MgaWxsZWdhbCB0byBjYWxsIGFkZCgpIG9yIHJlbW92ZSgpIGNvbmN1
cnJlbnRseSB0byB0aGlzLCBidXQgc2VsZi1yZW1vdmUoKSB3aWxsIHdvcmsuCisgICAgLy8gQnV0
IGl0J3MgYmV0dGVyIGlmIHlvdSByZXR1cm4gUmVtb3ZlIGluc3RlYWQuCisgICAgZW51bSBjbGFz
cyBGb3JFYWNoUmVzdWx0IHsKKyAgICAgICAgQ29udGludWUsCisgICAgICAgIEJyZWFrLAorICAg
ICAgICBSZW1vdmVBbmRDb250aW51ZSwKKyAgICAgICAgUmVtb3ZlQW5kQnJlYWsKKyAgICB9Owor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9pZCBmb3JFYWNoTWFya2VkQ2VsbChj
b25zdCBGdW5jJik7CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBJc29TdWJzcGFj
ZTsKKyAgICAKKyAgICBCaXRtYXA8TWFya2VkQmxvY2s6OmF0b21zUGVyQmxvY2s+KiBhZGRTbG93
KHNpemVfdCBibG9ja0luZGV4KTsKKyAgICAKKyAgICB2b2lkIGRpZFJlc2l6ZUJpdHMoc2l6ZV90
IG5ld1NpemUpOworICAgIHZvaWQgZGlkUmVtb3ZlQmxvY2soc2l6ZV90IGJsb2NrSW5kZXgpOwor
ICAgIHZvaWQgc3dlZXBUb0ZyZWVMaXN0KE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsKKyAgICAKKyAg
ICBJc29TdWJzcGFjZSYgbV9zdWJzcGFjZTsKKyAgICAKKyAgICAvLyBJZGVhOiBzd2VlcGluZyB0
byBmcmVlLWxpc3QgY2xlYXJzIGJpdHMgZm9yIHRob3NlIGNlbGxzIHRoYXQgd2VyZSBmcmVlLWxp
c3RlZC4gVGhlIGZpcnN0IHRpbWUKKyAgICAvLyB3ZSBhZGQgYSBjZWxsIGluIGEgYmxvY2ssIHRo
YXQgYmxvY2sgZ2V0cyBhIGZyZWUtbGlzdC4gVW5sZXNzIHdlIGRvIHNvbWV0aGluZyB0aGF0IG9i
dmlvdXNseQorICAgIC8vIGNsZWFycyBhbGwgYml0cyBmb3IgYSBibG9jaywgd2Uga2VlcCBpdCBz
ZXQgaW4gYmxvY2tzV2l0aEJpdHMuCisgICAgCisgICAgRmFzdEJpdFZlY3RvciBtX2Jsb2Nrc1dp
dGhCaXRzOworICAgIENvbmN1cnJlbnRWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJpdG1hcDxNYXJr
ZWRCbG9jazo6YXRvbXNQZXJCbG9jaz4+PiBtX2JpdHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBK
U0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldElubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0SW5s
aW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0Nl
bGxTZXRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJJc29DZWxsU2V0LmgiCisjaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCisK
K25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgYm9vbCBJc29DZWxsU2V0OjphZGQoSGVhcENlbGwq
IGNlbGwpCit7CisgICAgQXRvbUluZGljZXMgYXRvbUluZGljZXMoY2VsbCk7CisgICAgYXV0byYg
Yml0c1B0clJlZiA9IG1fYml0c1thdG9tSW5kaWNlcy5ibG9ja0luZGV4XTsKKyAgICBhdXRvKiBi
aXRzID0gYml0c1B0clJlZi5nZXQoKTsKKyAgICBpZiAoVU5MSUtFTFkoIWJpdHMpKQorICAgICAg
ICBiaXRzID0gYWRkU2xvdyhhdG9tSW5kaWNlcy5ibG9ja0luZGV4KTsKKyAgICByZXR1cm4gIWJp
dHMtPmNvbmN1cnJlbnRUZXN0QW5kU2V0KGF0b21JbmRpY2VzLmF0b21OdW1iZXIpOworfQorCitp
bmxpbmUgYm9vbCBJc29DZWxsU2V0OjpyZW1vdmUoSGVhcENlbGwqIGNlbGwpCit7CisgICAgQXRv
bUluZGljZXMgYXRvbUluZGljZXMoY2VsbCk7CisgICAgYXV0byYgYml0c1B0clJlZiA9IG1fYml0
c1thdG9tSW5kaWNlcy5ibG9ja0luZGV4XTsKKyAgICBhdXRvKiBiaXRzID0gYml0c1B0clJlZi5n
ZXQoKTsKKyAgICBpZiAoIWJpdHMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4g
Yml0cy0+Y29uY3VycmVudFRlc3RBbmRDbGVhcihhdG9tSW5kaWNlcy5hdG9tTnVtYmVyKTsKK30K
KworaW5saW5lIGJvb2wgSXNvQ2VsbFNldDo6Y29udGFpbnMoSGVhcENlbGwqIGNlbGwpIGNvbnN0
Cit7CisgICAgQXRvbUluZGljZXMgYXRvbUluZGljZXMoY2VsbCk7CisgICAgYXV0byogYml0cyA9
IG1fYml0c1thdG9tSW5kaWNlcy5ibG9ja0luZGV4XS5nZXQoKTsKKyAgICBpZiAoYml0cykKKyAg
ICAgICAgcmV0dXJuIGJpdHMtPmdldChhdG9tSW5kaWNlcy5hdG9tTnVtYmVyKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIElzb0NlbGxTZXQ6
OmZvckVhY2hNYXJrZWRDZWxsKGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgTWFya2VkQWxsb2Nh
dG9yJiBhbGxvY2F0b3IgPSBtX3N1YnNwYWNlLm1fYWxsb2NhdG9yOworICAgIChhbGxvY2F0b3Iu
bV9tYXJraW5nTm90RW1wdHkgJiBtX2Jsb2Nrc1dpdGhCaXRzKS5mb3JFYWNoU2V0Qml0KAorICAg
ICAgICBbJl0gKHNpemVfdCBibG9ja0luZGV4KSB7CisgICAgICAgICAgICBNYXJrZWRCbG9jazo6
SGFuZGxlKiBibG9jayA9IGFsbG9jYXRvci5tX2Jsb2Nrc1tibG9ja0luZGV4XTsKKworICAgICAg
ICAgICAgYXV0byogYml0cyA9IG1fYml0c1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAg
IGJvb2wgaGFkQml0cyA9IGZhbHNlOworICAgICAgICAgICAgYmxvY2stPmZvckVhY2hNYXJrZWRD
ZWxsKAorICAgICAgICAgICAgICAgIFsmXSAoc2l6ZV90IGF0b21OdW1iZXIsIEhlYXBDZWxsKiBj
ZWxsLCBIZWFwQ2VsbDo6S2luZCBraW5kKSAtPiBJdGVyYXRpb25TdGF0dXMgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoYml0cy0+Z2V0KGF0b21OdW1iZXIpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBGb3JFYWNoUmVzdWx0IHJlc3VsdCA9IGZ1bmMoY2VsbCwga2luZCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlc3VsdCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSBGb3JFYWNoUmVzdWx0OjpDb250aW51ZToKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgRm9yRWFjaFJlc3VsdDo6QnJlYWs6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aGFkQml0cyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlIEZvckVhY2hSZXN1bHQ6OlJlbW92ZUFuZENvbnRpbnVl
OgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBGb3JFYWNoUmVzdWx0OjpSZW1vdmVBbmRC
cmVhazoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzLT5jbGVhcihhdG9tTnVtYmVy
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocmVzdWx0KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlIEZvckVhY2hSZXN1bHQ6OkNvbnRpbnVlOgorICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSBGb3JFYWNoUmVzdWx0OjpSZW1vdmVBbmRDb250aW51ZToK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgRm9yRWFjaFJlc3VsdDo6QnJlYWs6CisgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIEZvckVhY2hSZXN1bHQ6OlJlbW92ZUFuZEJyZWFrOgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkRvbmU7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICBpZiAoIWhhZEJpdHMpIHsKKyAgICAgICAgICAgICAgICBtX2JpdHNbYmxvY2tJbmRleF0g
PSBudWxscHRyOworICAgICAgICAgICAgICAgIG1fYmxvY2tzV2l0aEJpdHNbYmxvY2tJbmRleF0g
PSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuY3Bw
CShyZXZpc2lvbiAyMjU3MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJz
cGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDUgKzY3LDI5IEBAIHZvaWQqIElzb1N1YnNw
YWNlOjphbGxvY2F0ZU5vblZpcnR1YWwoc2kKICAgICByZXR1cm4gcmVzdWx0OwogfQogCit2b2lk
IElzb1N1YnNwYWNlOjpkaWRSZXNpemVCaXRzKHNpemVfdCBibG9ja0luZGV4KQoreworICAgIG1f
Y2VsbFNldHMuZm9yRWFjaCgKKyAgICAgICAgWyZdIChJc29DZWxsU2V0KiBzZXQpIHsKKyAgICAg
ICAgICAgIHNldC0+ZGlkUmVzaXplQml0cyhibG9ja0luZGV4KTsKKyAgICAgICAgfSk7Cit9CisK
K3ZvaWQgSXNvU3Vic3BhY2U6OmRpZFJlbW92ZUJsb2NrKHNpemVfdCBibG9ja0luZGV4KQorewor
ICAgIG1fY2VsbFNldHMuZm9yRWFjaCgKKyAgICAgICAgWyZdIChJc29DZWxsU2V0KiBzZXQpIHsK
KyAgICAgICAgICAgIHNldC0+ZGlkUmVtb3ZlQmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgIH0p
OworfQorCit2b2lkIElzb1N1YnNwYWNlOjpkaWRCZWdpblN3ZWVwaW5nVG9GcmVlTGlzdChNYXJr
ZWRCbG9jazo6SGFuZGxlKiBibG9jaykKK3sKKyAgICBtX2NlbGxTZXRzLmZvckVhY2goCisgICAg
ICAgIFsmXSAoSXNvQ2VsbFNldCogc2V0KSB7CisgICAgICAgICAgICBzZXQtPnN3ZWVwVG9GcmVl
TGlzdChibG9jayk7CisgICAgICAgIH0pOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZS5oCShyZXZpc2lvbiAyMjU3
MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNywxMCArMjcsMTIgQEAKIAogI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvci5o
IgogI2luY2x1ZGUgIlN1YnNwYWNlLmgiCisjaW5jbHVkZSA8d3RmL1NpbmdseUxpbmtlZExpc3RX
aXRoVGFpbC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSXNvQWxpZ25lZE1lbW9yeUFs
bG9jYXRvcjsKK2NsYXNzIElzb0NlbGxTZXQ7CiAKIGNsYXNzIElzb1N1YnNwYWNlIDogcHVibGlj
IFN1YnNwYWNlIHsKIHB1YmxpYzoKQEAgLTQ2LDkgKzQ4LDE2IEBAIHB1YmxpYzoKICAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZU5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEdDRGVm
ZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWls
dXJlTW9kZSk7CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIElzb0NlbGxTZXQ7CisgICAg
CisgICAgdm9pZCBkaWRSZXNpemVCaXRzKHNpemVfdCBuZXdTaXplKSBvdmVycmlkZTsKKyAgICB2
b2lkIGRpZFJlbW92ZUJsb2NrKHNpemVfdCBibG9ja0luZGV4KSBvdmVycmlkZTsKKyAgICB2b2lk
IGRpZEJlZ2luU3dlZXBpbmdUb0ZyZWVMaXN0KE1hcmtlZEJsb2NrOjpIYW5kbGUqKSBvdmVycmlk
ZTsKKyAgICAKICAgICBzaXplX3QgbV9zaXplOwogICAgIE1hcmtlZEFsbG9jYXRvciBtX2FsbG9j
YXRvcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4gbV9p
c29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOworICAgIFNlbnRpbmVsTGlua2VkTGlzdDxJc29DZWxs
U2V0LCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxJc29DZWxsU2V0Pj4gbV9jZWxsU2V0czsKIH07CiAK
IGlubGluZSBNYXJrZWRBbGxvY2F0b3IqIElzb1N1YnNwYWNlOjphbGxvY2F0b3JGb3JOb25WaXJ0
dWFsKHNpemVfdCBzaXplLCBBbGxvY2F0b3JGb3JNb2RlKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMjU3MjUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNjEsNiArMjYxLDcgQEAgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmFkZEJsb2Nr
KE1hcmtlZEJsbwogICAgICAgICAgICAgQVNTRVJUKG1fYmxvY2tzLmNhcGFjaXR5KCkgPiBvbGRD
YXBhY2l0eSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1f
Yml0dmVjdG9yTG9jayk7CisgICAgICAgICAgICBzdWJzcGFjZSgpLT5kaWRSZXNpemVCaXRzKG1f
YmxvY2tzLmNhcGFjaXR5KCkpOwogICAgICAgICAgICAgZm9yRWFjaEJpdFZlY3RvcigKICAgICAg
ICAgICAgICAgICBsb2NrZXIsCiAgICAgICAgICAgICAgICAgWyZdIChGYXN0Qml0VmVjdG9yJiB2
ZWN0b3IpIHsKQEAgLTI5MCw3ICsyOTEsOSBAQCB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6cmVtb3Zl
QmxvY2soTWFya2VkCiB7CiAgICAgQVNTRVJUKGJsb2NrLT5hbGxvY2F0b3IoKSA9PSB0aGlzKTsK
ICAgICBBU1NFUlQobV9ibG9ja3NbYmxvY2stPmluZGV4KCldID09IGJsb2NrKTsKLQorICAgIAor
ICAgIHN1YnNwYWNlKCktPmRpZFJlbW92ZUJsb2NrKGJsb2NrLT5pbmRleCgpKTsKKyAgICAKICAg
ICBtX2Jsb2Nrc1tibG9jay0+aW5kZXgoKV0gPSBudWxscHRyOwogICAgIG1fZnJlZUJsb2NrSW5k
aWNlcy5hcHBlbmQoYmxvY2stPmluZGV4KCkpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJKHJldmlzaW9uIDIyNTcyNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOCw2ICszOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBHQ0RlZmVycmFsQ29u
dGV4dDsKIGNsYXNzIEhlYXA7CitjbGFzcyBJc29DZWxsU2V0OwogY2xhc3MgTWFya2VkU3BhY2U7
CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKQEAgLTE2Miw2ICsxNjMsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBkdW1wQml0cyhQcmludFN0cmVhbSYgPSBXVEY6OmRhdGFGaWxlKCkpOwog
ICAgIAogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgSXNvQ2VsbFNldDsKICAgICBmcmllbmQg
Y2xhc3MgTWFya2VkQmxvY2s7CiAgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxs
b2NhdGVTbG93Q2FzZShHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBm
YWlsdXJlTW9kZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxv
Y2F0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkQWxsb2NhdG9ySW5saW5lcy5oCShyZXZpc2lvbiAyMjU3MjUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkZyZWVMaXN0SW5saW5lcy5oIgogI2luY2x1
ZGUgIk1hcmtlZEFsbG9jYXRvci5oIgorI2luY2x1ZGUgIlZNLmgiCiAKIG5hbWVzcGFjZSBKU0Mg
ewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCShy
ZXZpc2lvbiAyMjU3MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9j
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwMSwxMSArMzAxLDYgQEAgc2l6ZV90IE1hcmtlZEJs
b2NrOjptYXJrQ291bnQoKQogICAgIHJldHVybiBhcmVNYXJrc1N0YWxlKCkgPyAwIDogbV9tYXJr
cy5jb3VudCgpOwogfQogCi1ib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzRW1wdHkoKQotewot
ICAgIHJldHVybiBtX2FsbG9jYXRvci0+aXNFbXB0eShOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMp
OwotfQotCiB2b2lkIE1hcmtlZEJsb2NrOjpjbGVhckhhc0FueU1hcmtlZCgpCiB7CiAgICAgbV9i
aWFzZWRNYXJrQ291bnQgPSBtX21hcmtDb3VudEJpYXM7CkBAIC00MDIsMTYgKzM5NywxNCBAQCB2
b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVwKEZyZWVMaXN0CiAgICAgaWYgKHN3ZWVwTW9k
ZSA9PSBTd2VlcE9ubHkgJiYgIW5lZWRzRGVzdHJ1Y3Rpb24pCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGlmIChVTkxJS0VMWShtX2lzRnJlZUxpc3RlZCkpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NF
UlQoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgCi0gICAgQVNTRVJUKCFtX2FsbG9jYXRvci0+aXNBbGxvY2F0ZWQoTm9Mb2NraW5nTmVj
ZXNzYXJ5LCB0aGlzKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1faXNGcmVlTGlzdGVkKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVCghaXNBbGxvY2F0ZWQoKSk7CiAgICAgCiAgICAgaWYgKHNwYWNlKCkt
PmlzTWFya2luZygpKQogICAgICAgICBibG9jaygpLm1fbG9jay5sb2NrKCk7CiAgICAgCisgICAg
c3Vic3BhY2UoKS0+ZGlkQmVnaW5Td2VlcGluZ1RvRnJlZUxpc3QodGhpcyk7CisgICAgCiAgICAg
aWYgKG5lZWRzRGVzdHJ1Y3Rpb24pIHsKICAgICAgICAgc3Vic3BhY2UoKS0+ZmluaXNoU3dlZXAo
KnRoaXMsIGZyZWVMaXN0KTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCShyZXZpc2lvbiAyMjU3MjUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjIsNiAr
MTYyLDggQEAgcHVibGljOgogICAgICAgICBzaXplX3QgbWFya0NvdW50KCk7CiAgICAgICAgIHNp
emVfdCBzaXplKCk7CiAgICAgICAgIAorICAgICAgICBib29sIGlzQWxsb2NhdGVkKCk7CisgICAg
ICAgIAogICAgICAgICBib29sIGlzTGl2ZShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgSGVh
cFZlcnNpb24gbmV3bHlBbGxvY2F0ZWRWZXJzaW9uLCBib29sIGlzTWFya2luZywgY29uc3QgSGVh
cENlbGwqKTsKICAgICAgICAgaW5saW5lIGJvb2wgaXNMaXZlQ2VsbChIZWFwVmVyc2lvbiBtYXJr
aW5nVmVyc2lvbiwgSGVhcFZlcnNpb24gbmV3bHlBbGxvY2F0ZWRWZXJzaW9uLCBib29sIGlzTWFy
a2luZywgY29uc3Qgdm9pZCopOwogCkBAIC0xNzMsNiArMTc1LDcgQEAgcHVibGljOgogICAgICAg
ICBib29sIGlzTmV3bHlBbGxvY2F0ZWQoY29uc3Qgdm9pZCopOwogICAgICAgICB2b2lkIHNldE5l
d2x5QWxsb2NhdGVkKGNvbnN0IHZvaWQqKTsKICAgICAgICAgdm9pZCBjbGVhck5ld2x5QWxsb2Nh
dGVkKGNvbnN0IHZvaWQqKTsKKyAgICAgICAgY29uc3QgQml0bWFwPGF0b21zUGVyQmxvY2s+JiBu
ZXdseUFsbG9jYXRlZCgpIGNvbnN0OwogICAgICAgICAKICAgICAgICAgSGVhcFZlcnNpb24gbmV3
bHlBbGxvY2F0ZWRWZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9uZXdseUFsbG9jYXRlZFZlcnNp
b247IH0KICAgICAgICAgCkBAIC0yMjcsNyArMjMwLDcgQEAgcHVibGljOgogICAgICAgICBzaXpl
X3QgbV9hdG9tc1BlckNlbGwgeyBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIH07
CiAgICAgICAgIHNpemVfdCBtX2VuZEF0b20geyBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46
Om1heCgpIH07IC8vIFRoaXMgaXMgYSBmdXp6eSBlbmQuIEFsd2F5cyB0ZXN0IGZvciA8IG1fZW5k
QXRvbS4KICAgICAgICAgICAgIAotICAgICAgICBXVEY6OkJpdG1hcDxhdG9tc1BlckJsb2NrPiBt
X25ld2x5QWxsb2NhdGVkOworICAgICAgICBCaXRtYXA8YXRvbXNQZXJCbG9jaz4gbV9uZXdseUFs
bG9jYXRlZDsKICAgICAgICAgICAgIAogICAgICAgICBBbGxvY2F0b3JBdHRyaWJ1dGVzIG1fYXR0
cmlidXRlczsKICAgICAgICAgYm9vbCBtX2lzRnJlZUxpc3RlZCB7IGZhbHNlIH07CkBAIC0yOTQs
NiArMjk3LDggQEAgcHVibGljOgogICAgIGJvb2wgaXNNYXJrZWRSYXcoY29uc3Qgdm9pZCogcCk7
CiAgICAgSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtX21hcmtp
bmdWZXJzaW9uOyB9CiAgICAgCisgICAgY29uc3QgQml0bWFwPGF0b21zUGVyQmxvY2s+JiBtYXJr
cygpIGNvbnN0OworICAgIAogICAgIENvdW50aW5nTG9jayYgbG9jaygpIHsgcmV0dXJuIG1fbG9j
azsgfQogCiBwcml2YXRlOgpAQCAtMzQ2LDcgKzM1MSw3IEBAIHByaXZhdGU6CiAKICAgICBIZWFw
VmVyc2lvbiBtX21hcmtpbmdWZXJzaW9uOwogCi0gICAgV1RGOjpCaXRtYXA8YXRvbXNQZXJCbG9j
az4gbV9tYXJrczsKKyAgICBCaXRtYXA8YXRvbXNQZXJCbG9jaz4gbV9tYXJrczsKIH07CiAKIGlu
bGluZSBNYXJrZWRCbG9jazo6SGFuZGxlJiBNYXJrZWRCbG9jazo6aGFuZGxlKCkKQEAgLTUzMiw2
ICs1MzcsMTEgQEAgaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OnRlc3RBbmRTZXRNYXJrZQogICAg
IHJldHVybiBtX21hcmtzLmNvbmN1cnJlbnRUZXN0QW5kU2V0KGF0b21OdW1iZXIocCksIGRlcGVu
ZGVuY3kpOwogfQogCitpbmxpbmUgY29uc3QgQml0bWFwPE1hcmtlZEJsb2NrOjphdG9tc1BlckJs
b2NrPiYgTWFya2VkQmxvY2s6Om1hcmtzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9tYXJrczsK
K30KKwogaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OkhhbmRsZTo6aXNOZXdseUFsbG9jYXRlZChj
b25zdCB2b2lkKiBwKQogewogICAgIHJldHVybiBtX25ld2x5QWxsb2NhdGVkLmdldChtX2Jsb2Nr
LT5hdG9tTnVtYmVyKHApKTsKQEAgLTU0Nyw2ICs1NTcsMTEgQEAgaW5saW5lIHZvaWQgTWFya2Vk
QmxvY2s6OkhhbmRsZTo6Y2xlYXJOZQogICAgIG1fbmV3bHlBbGxvY2F0ZWQuY2xlYXIobV9ibG9j
ay0+YXRvbU51bWJlcihwKSk7CiB9CiAKK2lubGluZSBjb25zdCBCaXRtYXA8TWFya2VkQmxvY2s6
OmF0b21zUGVyQmxvY2s+JiBNYXJrZWRCbG9jazo6SGFuZGxlOjpuZXdseUFsbG9jYXRlZCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fbmV3bHlBbGxvY2F0ZWQ7Cit9CisKIGlubGluZSBib29sIE1h
cmtlZEJsb2NrOjppc0F0b20oY29uc3Qgdm9pZCogcCkKIHsKICAgICBBU1NFUlQoTWFya2VkQmxv
Y2s6OmlzQXRvbUFsaWduZWQocCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDIyNTcyNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC05MSw2ICs5MSwxMSBAQCBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6bWFya3NDb252ZXlMaXZl
CiAgICAgICAgIHx8IE1hcmtlZFNwYWNlOjpuZXh0VmVyc2lvbihteU1hcmtpbmdWZXJzaW9uKSA9
PSBtYXJraW5nVmVyc2lvbjsKIH0KIAoraW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OkhhbmRsZTo6
aXNBbGxvY2F0ZWQoKQoreworICAgIHJldHVybiBtX2FsbG9jYXRvci0+aXNBbGxvY2F0ZWQoTm9M
b2NraW5nTmVjZXNzYXJ5LCB0aGlzKTsKK30KKwogQUxXQVlTX0lOTElORSBib29sIE1hcmtlZEJs
b2NrOjpIYW5kbGU6OmlzTGl2ZShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgSGVhcFZlcnNp
b24gbmV3bHlBbGxvY2F0ZWRWZXJzaW9uLCBib29sIGlzTWFya2luZywgY29uc3QgSGVhcENlbGwq
IGNlbGwpCiB7CiAgICAgaWYgKGFsbG9jYXRvcigpLT5pc0FsbG9jYXRlZChOb0xvY2tpbmdOZWNl
c3NhcnksIHRoaXMpKQpAQCAtNDM0LDYgKzQzOSwxMSBAQCBpbmxpbmUgTWFya2VkQmxvY2s6Okhh
bmRsZTo6U3dlZXBEZXN0cnVjCiAgICAgcmV0dXJuIEJsb2NrSGFzTm9EZXN0cnVjdG9yczsKIH0K
IAoraW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OkhhbmRsZTo6aXNFbXB0eSgpCit7CisgICAgcmV0
dXJuIG1fYWxsb2NhdG9yLT5pc0VtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcyk7Cit9CisK
IGlubGluZSBNYXJrZWRCbG9jazo6SGFuZGxlOjpFbXB0eU1vZGUgTWFya2VkQmxvY2s6OkhhbmRs
ZTo6ZW1wdHlNb2RlKCkKIHsKICAgICAvLyBJdCdzIG5vdCBvYnZpb3VzLCBidXQgdGhpcyBpcyB0
aGUgb25seSB3YXkgdG8ga25vdyBpZiB0aGUgYmxvY2sgaXMgZW1wdHkuIEl0J3MgdGhlIG9ubHkK
QEAgLTQ0MSw3ICs0NTEsNyBAQCBpbmxpbmUgTWFya2VkQmxvY2s6OkhhbmRsZTo6RW1wdHlNb2Rl
IE1hCiAgICAgLy8gLSBJdCdzIHRydWUgd2hlbiB0aGUgYmxvY2sgaXMgZnJlc2hseSBhbGxvY2F0
ZWQuCiAgICAgLy8gLSBJdCdzIHRydWUgaWYgdGhlIGJsb2NrIGhhZCBiZWVuIHN3ZXB0IGluIHRo
ZSBwYXN0LCBhbGwgZGVzdHJ1Y3RvcnMgd2VyZSBjYWxsZWQsIGFuZCB0aGF0CiAgICAgLy8gICBz
d2VlcCBwcm92ZWQgdGhhdCB0aGUgYmxvY2sgaXMgZW1wdHkuCi0gICAgcmV0dXJuIG1fYWxsb2Nh
dG9yLT5pc0VtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcykgPyBJc0VtcHR5IDogTm90RW1w
dHk7CisgICAgcmV0dXJuIGlzRW1wdHkoKSA/IElzRW1wdHkgOiBOb3RFbXB0eTsKIH0KIAogaW5s
aW5lIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNjcmliYmxlTW9kZSBNYXJrZWRCbG9jazo6SGFuZGxl
OjpzY3JpYmJsZU1vZGUoKQpAQCAtNTEyLDExICs1MjIsMTIgQEAgaW5saW5lIEl0ZXJhdGlvblN0
YXR1cyBNYXJrZWRCbG9jazo6SGFuZAogICAgIGlmIChhcmVNYXJrc1N0YWxlKQogICAgICAgICBy
ZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKICAgICBmb3IgKHNpemVfdCBpID0gZmly
c3RBdG9tKCk7IGkgPCBtX2VuZEF0b207IGkgKz0gbV9hdG9tc1BlckNlbGwpIHsKLSAgICAgICAg
SGVhcENlbGwqIGNlbGwgPSByZWludGVycHJldF9jYXN0X3B0cjxIZWFwQ2VsbCo+KCZtX2Jsb2Nr
LT5hdG9tcygpW2ldKTsKLSAgICAgICAgaWYgKCFibG9jay5pc01hcmtlZFJhdyhjZWxsKSkKKyAg
ICAgICAgaWYgKCFibG9jay5tX21hcmtzLmdldChpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
Ci0gICAgICAgIGlmIChmdW5jdG9yKGNlbGwsIGtpbmQpID09IEl0ZXJhdGlvblN0YXR1czo6RG9u
ZSkKKyAgICAgICAgSGVhcENlbGwqIGNlbGwgPSByZWludGVycHJldF9jYXN0X3B0cjxIZWFwQ2Vs
bCo+KCZtX2Jsb2NrLT5hdG9tcygpW2ldKTsKKworICAgICAgICBpZiAoZnVuY3RvcihpLCBjZWxs
LCBraW5kKSA9PSBJdGVyYXRpb25TdGF0dXM6OkRvbmUpCiAgICAgICAgICAgICByZXR1cm4gSXRl
cmF0aW9uU3RhdHVzOjpEb25lOwogICAgIH0KICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpD
b250aW51ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5jcHAJKHJl
dmlzaW9uIDIyNTcyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDUgKzEyNiwxNyBAQCBSZWZQdHI8U2hhcmVkVGFzazxN
YXJrZWRCbG9jazo6SGFuZGxlKigpCiAgICAgICAgIH0pOwogfQogCit2b2lkIFN1YnNwYWNlOjpk
aWRSZXNpemVCaXRzKHNpemVfdCkKK3sKK30KKwordm9pZCBTdWJzcGFjZTo6ZGlkUmVtb3ZlQmxv
Y2soc2l6ZV90KQoreworfQorCit2b2lkIFN1YnNwYWNlOjpkaWRCZWdpblN3ZWVwaW5nVG9GcmVl
TGlzdChNYXJrZWRCbG9jazo6SGFuZGxlKikKK3sKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAkocmV2aXNpb24gMjI1NzI1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAkod29ya2luZyBjb3B5
KQpAQCAtOTMsNiArOTMsMTAgQEAgcHVibGljOgogICAgIAogICAgIFN1YnNwYWNlKiBuZXh0U3Vi
c3BhY2VJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBtX25leHRTdWJz
cGFjZUluQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsgfQogICAgIHZvaWQgc2V0TmV4dFN1YnNwYWNl
SW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKFN1YnNwYWNlKiBzdWJzcGFjZSkgeyBtX25leHRTdWJz
cGFjZUluQWxpZ25lZE1lbW9yeUFsbG9jYXRvciA9IHN1YnNwYWNlOyB9CisgICAgCisgICAgdmly
dHVhbCB2b2lkIGRpZFJlc2l6ZUJpdHMoc2l6ZV90IG5ld1NpemUpOworICAgIHZpcnR1YWwgdm9p
ZCBkaWRSZW1vdmVCbG9jayhzaXplX3QgYmxvY2tJbmRleCk7CisgICAgdmlydHVhbCB2b2lkIGRp
ZEJlZ2luU3dlZXBpbmdUb0ZyZWVMaXN0KE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsKIAogcHJvdGVj
dGVkOgogICAgIHZvaWQgaW5pdGlhbGl6ZShIZWFwQ2VsbFR5cGUqLCBBbGlnbmVkTWVtb3J5QWxs
b2NhdG9yKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZUlubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZUlu
bGluZXMuaAkocmV2aXNpb24gMjI1NzI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U3Vic3BhY2VJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDcgQEAgdm9pZCBT
dWJzcGFjZTo6Zm9yRWFjaE1hcmtlZENlbGwoY29uc3QgRgogICAgIGZvckVhY2hOb3RFbXB0eU1h
cmtlZEJsb2NrKAogICAgICAgICBbJl0gKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGhhbmRsZSkgewog
ICAgICAgICAgICAgaGFuZGxlLT5mb3JFYWNoTWFya2VkQ2VsbCgKLSAgICAgICAgICAgICAgICBb
Jl0gKEhlYXBDZWxsKiBjZWxsLCBIZWFwQ2VsbDo6S2luZCBraW5kKSAtPiBJdGVyYXRpb25TdGF0
dXMgeyAKKyAgICAgICAgICAgICAgICBbJl0gKHNpemVfdCwgSGVhcENlbGwqIGNlbGwsIEhlYXBD
ZWxsOjpLaW5kIGtpbmQpIC0+IEl0ZXJhdGlvblN0YXR1cyB7CiAgICAgICAgICAgICAgICAgICAg
IGZ1bmMoY2VsbCwga2luZCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25T
dGF0dXM6OkNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0pOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkU3RydWN0dXJlLmNwcAkocmV2aXNp
b24gMjI1NzI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRTdHJ1
Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2NCArMjcsMTcgQEAKICNpbmNsdWRlICJJ
bmZlcnJlZFN0cnVjdHVyZS5oIgogCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUg
PHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCi1jb25zdCBDbGFz
c0luZm8gSW5mZXJyZWRTdHJ1Y3R1cmU6OnNfaW5mbyA9IHsgIkluZmVycmVkU3RydWN0dXJlIiwg
bnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShJbmZlcnJlZFN0
cnVjdHVyZSkgfTsKLQotSW5mZXJyZWRTdHJ1Y3R1cmUqIEluZmVycmVkU3RydWN0dXJlOjpjcmVh
dGUoVk0mIHZtLCBHQ0RlZmVycmFsQ29udGV4dCYgZGVmZXJyYWxDb250ZXh0LCBJbmZlcnJlZFR5
cGUqIHBhcmVudCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi17Ci0gICAgSW5mZXJyZWRTdHJ1Y3R1
cmUqIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEluZmVycmVkU3RydWN0dXJl
Pih2bS5oZWFwLCAmZGVmZXJyYWxDb250ZXh0KSkgSW5mZXJyZWRTdHJ1Y3R1cmUodm0sIHBhcmVu
dCwgc3RydWN0dXJlKTsKLSAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtLCBzdHJ1Y3R1cmUp
OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgSW5mZXJyZWRTdHJ1Y3R1cmU6OmRlc3Ry
b3koSlNDZWxsKiBjZWxsKQotewotICAgIEluZmVycmVkU3RydWN0dXJlKiBpbmZlcnJlZFN0cnVj
dHVyZSA9IHN0YXRpY19jYXN0PEluZmVycmVkU3RydWN0dXJlKj4oY2VsbCk7Ci0gICAgaW5mZXJy
ZWRTdHJ1Y3R1cmUtPkluZmVycmVkU3RydWN0dXJlOjp+SW5mZXJyZWRTdHJ1Y3R1cmUoKTsKLX0K
LQotU3RydWN0dXJlKiBJbmZlcnJlZFN0cnVjdHVyZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCi17Ci0gICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlw
ZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLX0KLQotdm9pZCBJbmZl
cnJlZFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQotewotICAgIEluZmVycmVkU3RydWN0dXJlKiBpbmZlcnJlZFN0cnVjdHVyZSA9IGpz
Q2FzdDxJbmZlcnJlZFN0cnVjdHVyZSo+KGNlbGwpOwotICAgIAotICAgIHZpc2l0b3IuYXBwZW5k
KGluZmVycmVkU3RydWN0dXJlLT5tX3BhcmVudCk7Ci19Ci0KLXZvaWQgSW5mZXJyZWRTdHJ1Y3R1
cmU6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJikKLXsKLSAgICBBU1NFUlQoSGVhcDo6aXNN
YXJrZWQobV9wYXJlbnQuZ2V0KCkpKTsKLSAgICAKLSAgICAvLyBNb25vdG9uaWNpdHkgZW5zdXJl
cyB0aGF0IHdlIHNob3VsZG4ndCBzZWUgYSBuZXcgc3RydWN0dXJlIHRoYXQgaXMgZGlmZmVyZW50
IGZyb20gdXMsIGJ1dCB3ZQotICAgIC8vIGNvdWxkIGhhdmUgYmVlbiBudWxsZWQuIFdlIG9ubHkg
cmVseSBvbiBpdCBiZWluZyB0aGUgbnVsbCBjYXNlIG9ubHkgaW4gZGVidWcuCi0gICAgaWYgKHRo
aXMgPT0gbV9wYXJlbnQtPm1fc3RydWN0dXJlLmdldCgpKSB7Ci0gICAgICAgIGlmICghSGVhcDo6
aXNNYXJrZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpKQotICAgICAgICAgICAgbV9wYXJlbnQtPnJlbW92
ZVN0cnVjdHVyZSgpOwotICAgIH0gZWxzZQotICAgICAgICBBU1NFUlQoIW1fcGFyZW50LT5tX3N0
cnVjdHVyZSk7Ci0gICAgCi0gICAgLy8gV2UnbGwgZ2V0IGRlbGV0ZWQgb24gdGhlIG5leHQgR0Mu
IFRoYXQncyBhIGxpdHRsZSB3ZWlyZCwgYnV0IG5vdCBoYXJtZnVsLCBzaW5jZSBpdCBvbmx5IGhh
cHBlbnMKLSAgICAvLyB3aGVuIHRoZSBJbmZlcnJlZFR5cGUgdGhhdCB3ZSB3ZXJlIHBhaXJlZCB0
byB3b3VsZCBoYXZlIHN1cnZpdmVkLiBJdCBqdXN0IG1lYW5zIGEgdGlueSBtaXNzZWQKLSAgICAv
LyBvcHBvcnR1bml0eSBmb3IgaGVhcCBzaXplIHJlZHVjdGlvbi4KLX0KK1dURl9NQUtFX0lTT19B
TExPQ0FURURfSU1QTChJbmZlcnJlZFN0cnVjdHVyZSk7CiAKIEluZmVycmVkU3RydWN0dXJlOjpJ
bmZlcnJlZFN0cnVjdHVyZShWTSYgdm0sIEluZmVycmVkVHlwZSogcGFyZW50LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKLSAgICA6IEJhc2Uodm0sIHZtLmluZmVycmVkU3RydWN0dXJlU3RydWN0dXJl
LmdldCgpKQotICAgICwgbV9wYXJlbnQodm0sIHRoaXMsIHBhcmVudCkKLSAgICAsIG1fc3RydWN0
dXJlKHZtLCB0aGlzLCBzdHJ1Y3R1cmUpCi17Ci19Ci0KLXZvaWQgSW5mZXJyZWRTdHJ1Y3R1cmU6
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBwYXJl
bnQocGFyZW50KQorICAgICwgc3RydWN0dXJlKHZtLCBwYXJlbnQsIHN0cnVjdHVyZSkKIHsKLSAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgc3RydWN0dXJlLT5hZGRUcmFuc2l0aW9u
V2F0Y2hwb2ludCgmbV93YXRjaHBvaW50KTsKKyAgICBzdHJ1Y3R1cmUtPmFkZFRyYW5zaXRpb25X
YXRjaHBvaW50KCZ3YXRjaHBvaW50KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFN0cnVjdHVyZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkU3RydWN0dXJlLmgJ
KHJldmlzaW9uIDIyNTcyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVy
cmVkU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDUxICsyNiwyMyBAQAogI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlICJJbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQuaCIKLSNpbmNs
dWRlICJKU0NlbGwuaCIKLSNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgIldyaXRlQmFycmllci5o
IgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNz
IEluZmVycmVkVHlwZTsKK2NsYXNzIFN0cnVjdHVyZTsKIAotY2xhc3MgSW5mZXJyZWRTdHJ1Y3R1
cmUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKK2NsYXNzIEluZmVycmVkU3RydWN0dXJlIGZpbmFs
IHsKKyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEluZmVycmVkU3RydWN0dXJlKTsKIHB1Ymxp
YzoKLSAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENlbGxUeXBlPgotICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuICZ2bS5pbmZlcnJlZFN0cnVjdHVyZVNwYWNlOwotICAgIH0K
LSAgICAKLSAgICBzdGF0aWMgSW5mZXJyZWRTdHJ1Y3R1cmUqIGNyZWF0ZShWTSYsIEdDRGVmZXJy
YWxDb250ZXh0JiwgSW5mZXJyZWRUeXBlKiBwYXJlbnQsIFN0cnVjdHVyZSopOwotICAgIAotICAg
IHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwotICAgIHN0YXRpYyB2
b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0gICAgCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gU3RydWN0dXJlSXNJbW1vcnRhbCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdz
OwotCi0gICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxP
YmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotCi0gICAgREVDTEFSRV9JTkZPOwotICAg
IAotICAgIEluZmVycmVkVHlwZSogcGFyZW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnQuZ2V0
KCk7IH0KLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0
dXJlLmdldCgpOyB9Ci0gICAgCi0gICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYp
OwotCi1wcml2YXRlOgogICAgIEluZmVycmVkU3RydWN0dXJlKFZNJiwgSW5mZXJyZWRUeXBlKiBw
YXJlbnQsIFN0cnVjdHVyZSopOworCisgICAgSW5mZXJyZWRUeXBlKiBwYXJlbnQ7CisgICAgV3Jp
dGVCYXJyaWVyPFN0cnVjdHVyZT4gc3RydWN0dXJlOwogICAgIAotICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oVk0mLCBTdHJ1Y3R1cmUqKTsKLSAgICAKLSAgICBXcml0ZUJhcnJpZXI8SW5mZXJyZWRU
eXBlPiBtX3BhcmVudDsKLSAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cnVjdHVyZTsK
LSAgICAKLSAgICBmcmllbmQgY2xhc3MgSW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50OwotICAg
IEluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludCBtX3dhdGNocG9pbnQ7CisgICAgSW5mZXJyZWRT
dHJ1Y3R1cmVXYXRjaHBvaW50IHdhdGNocG9pbnQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkU3RydWN0dXJlV2F0
Y2hwb2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAkocmV2aXNpb24gMjI1NzI1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTIgKzM0LDE0IEBAIHZvaWQgSW5mZXJyZWRTdHJ1Y3R1
cmVXYXRjaHBvaW50OjpmaXJlSW4KIHsKICAgICBJbmZlcnJlZFN0cnVjdHVyZSogaW5mZXJyZWRT
dHJ1Y3R1cmUgPQogICAgICAgICBiaXR3aXNlX2Nhc3Q8SW5mZXJyZWRTdHJ1Y3R1cmUqPigKLSAg
ICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgLSBPQkpFQ1RfT0ZGU0VUT0YoSW5m
ZXJyZWRTdHJ1Y3R1cmUsIG1fd2F0Y2hwb2ludCkpOworICAgICAgICAgICAgYml0d2lzZV9jYXN0
PGNoYXIqPih0aGlzKSAtIE9CSkVDVF9PRkZTRVRPRihJbmZlcnJlZFN0cnVjdHVyZSwgd2F0Y2hw
b2ludCkpOwogCi0gICAgaWYgKCFpbmZlcnJlZFN0cnVjdHVyZS0+aXNMaXZlKCkpCisgICAgSW5m
ZXJyZWRUeXBlKiBpbmZlcnJlZFR5cGUgPSBpbmZlcnJlZFN0cnVjdHVyZS0+cGFyZW50OworICAg
IAorICAgIGlmICghaW5mZXJyZWRUeXBlLT5pc0xpdmUoKSkKICAgICAgICAgcmV0dXJuOwogICAg
IAotICAgIGluZmVycmVkU3RydWN0dXJlLT5tX3BhcmVudC0+cmVtb3ZlU3RydWN0dXJlKCk7Cisg
ICAgaW5mZXJyZWRUeXBlLT5yZW1vdmVTdHJ1Y3R1cmUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlw
ZS5jcHAJKHJldmlzaW9uIDIyNTcyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0luZmVycmVkVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJbmZlcnJlZFR5cGUuaCIKIAotI2luY2x1ZGUgIkdD
RGVmZXJyYWxDb250ZXh0SW5saW5lcy5oIgorI2luY2x1ZGUgIklzb0NlbGxTZXRJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTg2LDcgKzg2
LDggQEAgU3RydWN0dXJlKiBJbmZlcnJlZFR5cGU6OmNyZWF0ZVN0cnVjdHVyZQogdm9pZCBJbmZl
cnJlZFR5cGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBJbmZlcnJlZFR5cGUqIGluZmVycmVkVHlwZSA9IGpzQ2FzdDxJbmZlcnJlZFR5
cGUqPihjZWxsKTsKLSAgICB2aXNpdG9yLmFwcGVuZChpbmZlcnJlZFR5cGUtPm1fc3RydWN0dXJl
KTsKKyAgICBpZiAoaW5mZXJyZWRUeXBlLT5tX3N0cnVjdHVyZSkKKyAgICAgICAgdmlzaXRvci52
bSgpLmluZmVycmVkVHlwZXNXaXRoRmluYWxpemVycy5hZGQoaW5mZXJyZWRUeXBlKTsKIH0KIAog
SW5mZXJyZWRUeXBlOjpLaW5kIEluZmVycmVkVHlwZTo6a2luZEZvckZsYWdzKFB1dEJ5SWRGbGFn
cyBmbGFncykKQEAgLTM5OSw3ICs0MDAsNiBAQCBib29sIEluZmVycmVkVHlwZTo6d2lsbFN0b3Jl
VmFsdWVTbG93KFZNCiAgICAgRGVzY3JpcHRvciBteVR5cGU7CiAgICAgYm9vbCByZXN1bHQ7CiAg
ICAgewotICAgICAgICBHQ0RlZmVycmFsQ29udGV4dCBkZWZlcnJhbENvbnRleHQodm0uaGVhcCk7
CiAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKICAgICAgICAgb2xk
VHlwZSA9IGRlc2NyaXB0b3IobG9ja2VyKTsKICAgICAgICAgbXlUeXBlID0gRGVzY3JpcHRvcjo6
Zm9yVmFsdWUodmFsdWUpOwpAQCAtNDA4LDcgKzQwOCw3IEBAIGJvb2wgSW5mZXJyZWRUeXBlOjp3
aWxsU3RvcmVWYWx1ZVNsb3coVk0KICAgICAgICAgCiAgICAgICAgIEFTU0VSVChvbGRUeXBlICE9
IG15VHlwZSk7IC8vIFRoZSB0eXBlIG11c3QgaGF2ZSBjaGFuZ2VkIGlmIHdlJ3JlIG9uIHRoZSBz
bG93IHBhdGguCiAKLSAgICAgICAgYm9vbCBzZXRSZXN1bHQgPSBzZXQoZGVmZXJyYWxDb250ZXh0
LCBsb2NrZXIsIHZtLCBteVR5cGUpOworICAgICAgICBib29sIHNldFJlc3VsdCA9IHNldChsb2Nr
ZXIsIHZtLCBteVR5cGUpOwogICAgICAgICByZXN1bHQgPSBraW5kKGxvY2tlcikgIT0gVG9wOwog
ICAgICAgICBpZiAoIXNldFJlc3VsdCkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC00
MjMsMTAgKzQyMyw5IEBAIHZvaWQgSW5mZXJyZWRUeXBlOjptYWtlVG9wU2xvdyhWTSYgdm0sIFAK
IHsKICAgICBEZXNjcmlwdG9yIG9sZFR5cGU7CiAgICAgewotICAgICAgICBHQ0RlZmVycmFsQ29u
dGV4dCBkZWZlcnJhbENvbnRleHQodm0uaGVhcCk7CiAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tl
ciBsb2NrZXIobV9sb2NrKTsKICAgICAgICAgb2xkVHlwZSA9IGRlc2NyaXB0b3IobG9ja2VyKTsK
LSAgICAgICAgaWYgKCFzZXQoZGVmZXJyYWxDb250ZXh0LCBsb2NrZXIsIHZtLCBUb3ApKQorICAg
ICAgICBpZiAoIXNldChsb2NrZXIsIHZtLCBUb3ApKQogICAgICAgICAgICAgcmV0dXJuOwogICAg
IH0KIApAQCAtNDM0LDE0ICs0MzMsOCBAQCB2b2lkIEluZmVycmVkVHlwZTo6bWFrZVRvcFNsb3co
Vk0mIHZtLCBQCiAgICAgbV93YXRjaHBvaW50U2V0LmZpcmVBbGwodm0sIGRldGFpbCk7CiB9CiAK
LWJvb2wgSW5mZXJyZWRUeXBlOjpzZXQoR0NEZWZlcnJhbENvbnRleHQmIGRlZmVycmFsQ29udGV4
dCwgY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgRGVzY3JpcHRvciBu
ZXdEZXNjcmlwdG9yKQorYm9vbCBJbmZlcnJlZFR5cGU6OnNldChjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImIGxvY2tlciwgVk0mIHZtLCBEZXNjcmlwdG9yIG5ld0Rlc2NyaXB0b3IpCiB7Ci0gICAg
Ly8gV2Ugd2lsbCB0cmlnZ2VyIHdyaXRlIGJhcnJpZXJzIHdoaWxlIGhvbGRpbmcgb3VyIGxvY2su
IEN1cnJlbnRseSwgd3JpdGUgYmFycmllcnMgZG9uJ3QgR0MsIGJ1dCB0aGF0Ci0gICAgLy8gY291
bGQgY2hhbmdlLiBJZiBpdCBkb2VzLCB3ZSBkb24ndCB3YW50IHRvIGRlYWRsb2NrLiBOb3RlIHRo
YXQgd2UgY291bGQgaGF2ZSB1c2VkCi0gICAgLy8gR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGlu
IHRoZSBjYWxsZXIsIGJ1dCB0aGUgY2FsbGVyIGlzIG9uIGEgZmFzdCBwYXRoIHNvIG1heWJlIHRo
YXQgd291bGRuJ3QgYmUKLSAgICAvLyBhIGdvb2QgaWRlYS4KLSAgICBEZWZlckdDRm9yQVdoaWxl
IGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgCiAgICAgLy8gQmUgZGVmZW5zaXZlOiBpZiB3ZSdyZSBu
b3QgcmVhbGx5IGNoYW5naW5nIHRoZSB0eXBlLCB0aGVuIHdlIGRvbid0IGhhdmUgdG8gZG8gYW55
dGhpbmcuCiAgICAgaWYgKGRlc2NyaXB0b3IobG9ja2VyKSA9PSBuZXdEZXNjcmlwdG9yKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC00NjksMTkgKzQ2MiwxMyBAQCBib29sIEluZmVycmVkVHlw
ZTo6c2V0KEdDRGVmZXJyYWxDb250ZXh0CiAgICAgICAgIHNob3VsZEZpcmVXYXRjaHBvaW50U2V0
ID0gdHJ1ZTsKICAgICB9CiAKLSAgICAvLyBSZW1vdmUgdGhlIG9sZCBJbmZlcnJlZFN0cnVjdHVy
ZSBvYmplY3QgaWYgd2Ugbm8gbG9uZ2VyIG5lZWQgaXQuCiAgICAgaWYgKCFuZXdEZXNjcmlwdG9y
LnN0cnVjdHVyZSgpKQotICAgICAgICBtX3N0cnVjdHVyZS5jbGVhcigpOwotCi0gICAgLy8gQWRk
IGEgbmV3IEluZmVycmVkU3RydWN0dXJlIG9iamVjdCBpZiB3ZSBuZWVkIG9uZSBub3cuCi0gICAg
aWYgKG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkpIHsKLSAgICAgICAgaWYgKG1fc3RydWN0dXJl
KSB7Ci0gICAgICAgICAgICAvLyBXZSBzaG91bGQgYWdyZWUgb24gdGhlIHN0cnVjdHVyZXMgaWYg
d2UgZ2V0IGhlcmUuCi0gICAgICAgICAgICBBU1NFUlQobmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUo
KSA9PSBtX3N0cnVjdHVyZS0+c3RydWN0dXJlKCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgYXV0byogc3RydWN0dXJlID0gSW5mZXJyZWRTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZGVm
ZXJyYWxDb250ZXh0LCB0aGlzLCBuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpKTsKLSAgICAgICAg
ICAgIG1fc3RydWN0dXJlLnNldCh2bSwgdGhpcywgc3RydWN0dXJlKTsKLSAgICAgICAgfQorICAg
ICAgICBtX3N0cnVjdHVyZSA9IG51bGxwdHI7CisgICAgZWxzZSB7CisgICAgICAgIGlmIChtX3N0
cnVjdHVyZSkKKyAgICAgICAgICAgIEFTU0VSVChuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpID09
IG1fc3RydWN0dXJlLT5zdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBtX3N0cnVjdHVyZSA9IHN0ZDo6bWFrZV91bmlxdWU8SW5mZXJyZWRTdHJ1Y3R1cmU+KHZtLCB0
aGlzLCBuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpKTsKICAgICB9CiAKICAgICAvLyBGaW5hbGx5
LCBzZXQgdGhlIGRlc2NyaXB0b3Iga2luZC4KQEAgLTUwMywxMyArNDkwLDEyIEBAIHZvaWQgSW5m
ZXJyZWRUeXBlOjpyZW1vdmVTdHJ1Y3R1cmUoKQogICAgIERlc2NyaXB0b3Igb2xkRGVzY3JpcHRv
cjsKICAgICBEZXNjcmlwdG9yIG5ld0Rlc2NyaXB0b3I7CiAgICAgewotICAgICAgICBHQ0RlZmVy
cmFsQ29udGV4dCBkZWZlcnJhbENvbnRleHQodm0uaGVhcCk7CiAgICAgICAgIENvbmN1cnJlbnRK
U0xvY2tlciBsb2NrZXIobV9sb2NrKTsKICAgICAgICAgb2xkRGVzY3JpcHRvciA9IGRlc2NyaXB0
b3IobG9ja2VyKTsKICAgICAgICAgbmV3RGVzY3JpcHRvciA9IG9sZERlc2NyaXB0b3I7CiAgICAg
ICAgIG5ld0Rlc2NyaXB0b3IucmVtb3ZlU3RydWN0dXJlKCk7CiAgICAgICAgIAotICAgICAgICBp
ZiAoIXNldChkZWZlcnJhbENvbnRleHQsIGxvY2tlciwgdm0sIG5ld0Rlc2NyaXB0b3IpKQorICAg
ICAgICBpZiAoIXNldChsb2NrZXIsIHZtLCBuZXdEZXNjcmlwdG9yKSkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKQEAgLTUxNyw2ICs1MDMsMjAgQEAgdm9pZCBJbmZlcnJlZFR5cGU6OnJl
bW92ZVN0cnVjdHVyZSgpCiAgICAgbV93YXRjaHBvaW50U2V0LmZpcmVBbGwodm0sIGRldGFpbCk7
CiB9CiAKK0lzb0NlbGxTZXQ6OkZvckVhY2hSZXN1bHQgSW5mZXJyZWRUeXBlOjpmaW5hbGl6ZVVu
Y29uZGl0aW9uYWxseShWTSYpCit7CisgICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkKHRoaXMpKTsK
KyAgICAKKyAgICBpZiAobV9zdHJ1Y3R1cmUpIHsKKyAgICAgICAgaWYgKEhlYXA6OmlzTWFya2Vk
KG1fc3RydWN0dXJlLT5zdHJ1Y3R1cmUuZ2V0KCkpKQorICAgICAgICAgICAgcmV0dXJuIElzb0Nl
bGxTZXQ6OkZvckVhY2hSZXN1bHQ6OkNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgcmVtb3Zl
U3RydWN0dXJlKCk7CisgICAgfQorICAgIAorICAgIHJldHVybiBJc29DZWxsU2V0OjpGb3JFYWNo
UmVzdWx0OjpSZW1vdmVBbmRDb250aW51ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKIG5h
bWVzcGFjZSBXVEYgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJy
ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5m
ZXJyZWRUeXBlLmgJKHJldmlzaW9uIDIyNTcyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0luZmVycmVkVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAK
ICNpbmNsdWRlICJDb25jdXJyZW50SlNMb2NrLmgiCiAjaW5jbHVkZSAiSW5mZXJyZWRTdHJ1Y3R1
cmUuaCIKKyNpbmNsdWRlICJJc29DZWxsU2V0LmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5j
bHVkZSAiUHJvcGVydHlOYW1lLmgiCiAjaW5jbHVkZSAiUHV0QnlJZEZsYWdzLmgiCkBAIC0xODUs
NyArMTg2LDcgQEAgcHVibGljOgogCiAgICAgRGVzY3JpcHRvciBkZXNjcmlwdG9yTWFpblRocmVh
ZCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gRGVzY3JpcHRvcihtX2tpbmQsIG1fc3Ry
dWN0dXJlID8gbV9zdHJ1Y3R1cmUtPnN0cnVjdHVyZSgpIDogbnVsbHB0cik7CisgICAgICAgIHJl
dHVybiBEZXNjcmlwdG9yKG1fa2luZCwgbV9zdHJ1Y3R1cmUgPyBtX3N0cnVjdHVyZS0+c3RydWN0
dXJlLmdldCgpIDogbnVsbHB0cik7CiAgICAgfQogICAgIAogICAgIERlc2NyaXB0b3IgZGVzY3Jp
cHRvcihjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKSBjb25zdApAQCAtMjMwLDcgKzIzMSw3IEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIAotICAg
IHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKTsKKyAgICBJc29DZWxsU2V0OjpGb3JFYWNo
UmVzdWx0IGZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJik7CiAKIHByaXZhdGU6CiAgICAgSW5m
ZXJyZWRUeXBlKFZNJik7CkBAIC0yNDEsNyArMjQyLDcgQEAgcHJpdmF0ZToKIAogICAgIC8vIEhl
bHBlciBmb3Igd2lsbFN0b3JlVmFsdWVTbG93KCkgYW5kIG1ha2VUb3BTbG93KCkuIFRoaXMgcmV0
dXJucyB0cnVlIGlmIHdlIHNob3VsZCBmaXJlIHRoZQogICAgIC8vIHdhdGNocG9pbnQgc2V0Lgot
ICAgIGJvb2wgc2V0KEdDRGVmZXJyYWxDb250ZXh0JiwgY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
JiwgVk0mLCBEZXNjcmlwdG9yKTsKKyAgICBib29sIHNldChjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImLCBWTSYsIERlc2NyaXB0b3IpOwogICAgIAogICAgIHZvaWQgcmVtb3ZlU3RydWN0dXJlKCk7
CiAgICAgCkBAIC0yNTIsNyArMjUzLDggQEAgcHJpdmF0ZToKICAgICAKICAgICBLaW5kIG1fa2lu
ZCB7IEJvdHRvbSB9OwogCi0gICAgV3JpdGVCYXJyaWVyPEluZmVycmVkU3RydWN0dXJlPiBtX3N0
cnVjdHVyZTsKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgUG9pc29uZWQuCisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEluZmVycmVkU3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKIAogICAgIC8vIE5P
VEU6IElmIHRoaXMgaXMgYmVpbmcgd2F0Y2hlZCwgd2UgdHJhbnNmb3JtIHRvIFRvcCBiZWNhdXNl
IHRoYXQgaW1wbGllcyB0aGF0IGl0IHdvdWxkbid0IGJlCiAgICAgLy8gcHJvZml0YWJsZSB0byB3
YXRjaCBpdCBhZ2Fpbi4gQWxzbywgdGhpcyBzZXQgaXMgaW5pdGlhbGl6ZWQgY2xlYXIsIGFuZCBp
cyBuZXZlciBleHBvc2VkIHRvIHRoZSBERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5jcHAJKHJldmlzaW9uIDIyNTcyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA1LDExICsyMDUsMTEgQEAgVk06OlZNKFZN
VHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgZGlyZWN0RXZhbEV4ZWN1dGFi
bGVTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxU
eXBlLmdldCgpLCBEaXJlY3RFdmFsRXhlY3V0YWJsZSkKICAgICAsIGZ1bmN0aW9uRXhlY3V0YWJs
ZVNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5
cGUuZ2V0KCksIEZ1bmN0aW9uRXhlY3V0YWJsZSkKICAgICAsIGluZGlyZWN0RXZhbEV4ZWN1dGFi
bGVTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxU
eXBlLmdldCgpLCBJbmRpcmVjdEV2YWxFeGVjdXRhYmxlKQotICAgICwgaW5mZXJyZWRTdHJ1Y3R1
cmVTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxU
eXBlLmdldCgpLCBJbmZlcnJlZFN0cnVjdHVyZSkKICAgICAsIGluZmVycmVkVHlwZVNwYWNlIElT
T19TVUJTUEFDRV9JTklUKGhlYXAsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCks
IEluZmVycmVkVHlwZSkKICAgICAsIG1vZHVsZVByb2dyYW1FeGVjdXRhYmxlU3BhY2UgSVNPX1NV
QlNQQUNFX0lOSVQoaGVhcCwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgTW9k
dWxlUHJvZ3JhbUV4ZWN1dGFibGUpCiAgICAgLCBuYXRpdmVFeGVjdXRhYmxlU3BhY2UgSVNPX1NV
QlNQQUNFX0lOSVQoaGVhcCwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgTmF0
aXZlRXhlY3V0YWJsZSkKICAgICAsIHByb2dyYW1FeGVjdXRhYmxlU3BhY2UgSVNPX1NVQlNQQUNF
X0lOSVQoaGVhcCwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgUHJvZ3JhbUV4
ZWN1dGFibGUpCisgICAgLCBpbmZlcnJlZFR5cGVzV2l0aEZpbmFsaXplcnMoaW5mZXJyZWRUeXBl
U3BhY2UpCiAgICAgLCB2bVR5cGUodm1UeXBlKQogICAgICwgY2xpZW50RGF0YSgwKQogICAgICwg
dG9wRW50cnlGcmFtZShudWxscHRyKQpAQCAtMjkyLDcgKzI5Miw2IEBAIFZNOjpWTShWTVR5cGUg
dm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICB1bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2Nr
U3RydWN0dXJlLnNldCgqdGhpcywgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6Y3JlYXRlU3Ry
dWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHVubGlua2VkTW9kdWxlUHJvZ3JhbUNv
ZGVCbG9ja1N0cnVjdHVyZS5zZXQoKnRoaXMsIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9j
azo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHByb3BlcnR5VGFi
bGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBQcm9wZXJ0eVRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRo
aXMsIDAsIGpzTnVsbCgpKSk7Ci0gICAgaW5mZXJyZWRTdHJ1Y3R1cmVTdHJ1Y3R1cmUuc2V0KCp0
aGlzLCBJbmZlcnJlZFN0cnVjdHVyZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwo
KSkpOwogICAgIGluZmVycmVkVHlwZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEluZmVycmVkVHlwZTo6
Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIGluZmVycmVkVHlwZVRh
YmxlU3RydWN0dXJlLnNldCgqdGhpcywgSW5mZXJyZWRUeXBlVGFibGU6OmNyZWF0ZVN0cnVjdHVy
ZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBpbmZlcnJlZFZhbHVlU3RydWN0dXJlLnNldCgq
dGhpcywgSW5mZXJyZWRWYWx1ZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyMjU3MjUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmgiCiAjaW5j
bHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIkludHJpbnNpYy5oIgorI2luY2x1ZGUgIklzb0NlbGxT
ZXQuaCIKICNpbmNsdWRlICJJc29TdWJzcGFjZS5oIgogI2luY2x1ZGUgIkpJVFRodW5rcy5oIgog
I2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKQEAgLTM0MCwxMSArMzQxLDEyIEBAIHB1YmxpYzoKICAg
ICBJc29TdWJzcGFjZSBkaXJlY3RFdmFsRXhlY3V0YWJsZVNwYWNlOwogICAgIElzb1N1YnNwYWNl
IGZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlOwogICAgIElzb1N1YnNwYWNlIGluZGlyZWN0RXZhbEV4
ZWN1dGFibGVTcGFjZTsKLSAgICBJc29TdWJzcGFjZSBpbmZlcnJlZFN0cnVjdHVyZVNwYWNlOwog
ICAgIElzb1N1YnNwYWNlIGluZmVycmVkVHlwZVNwYWNlOwogICAgIElzb1N1YnNwYWNlIG1vZHVs
ZVByb2dyYW1FeGVjdXRhYmxlU3BhY2U7CiAgICAgSXNvU3Vic3BhY2UgbmF0aXZlRXhlY3V0YWJs
ZVNwYWNlOwogICAgIElzb1N1YnNwYWNlIHByb2dyYW1FeGVjdXRhYmxlU3BhY2U7CisgICAgCisg
ICAgSXNvQ2VsbFNldCBpbmZlcnJlZFR5cGVzV2l0aEZpbmFsaXplcnM7CiAKICAgICBWTVR5cGUg
dm1UeXBlOwogICAgIENsaWVudERhdGEqIGNsaWVudERhdGE7CkBAIC0zOTIsNyArMzk0LDYgQEAg
cHVibGljOgogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2tT
dHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gdW5saW5rZWRNb2R1bGVQcm9ncmFtQ29k
ZUJsb2NrU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb3BlcnR5VGFibGVTdHJ1
Y3R1cmU7Ci0gICAgU3Ryb25nPFN0cnVjdHVyZT4gaW5mZXJyZWRTdHJ1Y3R1cmVTdHJ1Y3R1cmU7
CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gaW5mZXJyZWRUeXBlU3RydWN0dXJlOwogICAgIFN0cm9u
ZzxTdHJ1Y3R1cmU+IGluZmVycmVkVHlwZVRhYmxlU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1
Y3R1cmU+IGluZmVycmVkVmFsdWVTdHJ1Y3R1cmU7CkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyNTcyNSkKKysrIFNvdXJjZS9XVEYvV1RG
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIzOSw2ICsyMzks
OCBAQAogCQkwRkIxNEUxODE4MEZBMjE4MDA5QjZCNEQgLyogQmFnLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEJhZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkIxNEUxQTE4MTBFMURBMDA5QjZCNEQgLyogQmFnVG9IYXNoTWFwLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEJhZ1RvSGFzaE1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkIzMTdDMzFD
NDg4MDAxMDA3RTM5NUEgLyogU3lzdGVtVHJhY2luZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTeXN0ZW1UcmFjaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGQjQ2NzgyMUZERTI4MkIwMDNGQ0IwOSAvKiBDb25jdXJyZW50QnVmZmVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbmN1cnJlbnRCdWZmZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZCNDY3ODMxRkRFMjgyQzAwM0ZDQjA5IC8qIENvbmN1cnJlbnRW
ZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uY3VycmVudFZlY3Rv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkM0NDg4MjE2RkU5RkUxMDA4NDRC
RTkgLyogUHJvY2Vzc0lELmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb2Nl
c3NJRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkM0RURFNTE2OTYxNDk2MDBG
NjUwNDEgLyogQ29tbWFQcmludGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENvbW1hUHJpbnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MUFDNDE1
NEZCMjJFMDA5ODNFNzIgLyogRmFzdEJpdFZlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBGYXN0Qml0VmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC04MDgsOCArODEwLDEwIEBACiAJCQkJMEY4RjJCOTAxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBp
bGF0aW9uVGhyZWFkLmggKi8sCiAJCQkJQThBNDcyNzAxNTFBODI1QTAwNDEyM0ZGIC8qIENvbXBp
bGVyLmggKi8sCiAJCQkJNDZCQTlFQUIxRjRDRDYxRTAwOUEyQkJDIC8qIENvbXBsZXRpb25IYW5k
bGVyLmggKi8sCisJCQkJMEZCNDY3ODIxRkRFMjgyQjAwM0ZDQjA5IC8qIENvbmN1cnJlbnRCdWZm
ZXIuaCAqLywKIAkJCQkwRjMwQ0I1ODFGQ0RGMTMzMDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhh
c2hTZXQuY3BwICovLAogCQkJCTBGMzBDQjU5MUZDREYxMzMwMDRCNTMyMyAvKiBDb25jdXJyZW50
UHRySGFzaFNldC5oICovLAorCQkJCTBGQjQ2NzgzMUZERTI4MkMwMDNGQ0IwOSAvKiBDb25jdXJy
ZW50VmVjdG9yLmggKi8sCiAJCQkJMEZEQjY5OEQxQjdDNjQzQTAwMEMxMDc4IC8qIENvbmRpdGlv
bi5oICovLAogCQkJCTBGRkJDQkZBMUZEMzdFMEYwMDcyQUFGMCAvKiBDb3VudGluZ0xvY2suaCAq
LywKIAkJCQkwRjhFODVEQTFGRDQ4NUIwMDA2OTE4ODkgLyogQ291bnRpbmdMb2NrLmNwcCAqLywK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRCdWZmZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9Db25jdXJyZW50QnVmZmVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L1dURi93dGYvQ29uY3VycmVudEJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1h
bGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+CisjaW5jbHVkZSA8d3RmL0xv
Y2suaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBDb25jdXJyZW50QnVmZmVyIGlzIHN1aXRhYmxl
IGZvciB3aGVuIHlvdSBwbGFuIHRvIHN0b3JlIGltbXV0YWJsZSBkYXRhIGFuZCBzb21ldGltZXMg
YXBwZW5kIHRvIGl0LgorLy8gSXQgc3VwcG9ydHMgc3RvcmluZyBkYXRhIHRoYXQgaXMgbm90IGNv
cHktY29uc3RydWN0YWJsZSBidXQgYml0LWNvcHlhYmxlLgordGVtcGxhdGU8dHlwZW5hbWUgVD4K
K2NsYXNzIENvbmN1cnJlbnRCdWZmZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvbmN1
cnJlbnRCdWZmZXIpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAg
IAorICAgIENvbmN1cnJlbnRCdWZmZXIoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgfkNvbmN1
cnJlbnRCdWZmZXIoKQorICAgIHsKKyAgICAgICAgaWYgKEFycmF5KiBhcnJheSA9IG1fYXJyYXkp
IHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcnJheS0+c2l6ZTsgKytp
KQorICAgICAgICAgICAgICAgIGFycmF5LT5kYXRhW2ldLn5UKCk7CisgICAgICAgIH0KKyAgICAg
ICAgZm9yIChBcnJheSogYXJyYXkgOiBtX2FsbEFycmF5cykKKyAgICAgICAgICAgIGZhc3RGcmVl
KGFycmF5KTsKKyAgICB9CisKKyAgICAvLyBHcm93aW5nIGlzIG5vdCBjb25jdXJyZW50LiBUaGlz
IGFzc3VtZXMgeW91IGFyZSBob2xkaW5nIHNvbWUgb3RoZXIgbG9jayBiZWZvcmUgeW91IGRvIHRo
aXMuCisgICAgdm9pZCBncm93RXhhY3Qoc2l6ZV90IG5ld1NpemUpCisgICAgeworICAgICAgICBB
cnJheSogYXJyYXkgPSBtX2FycmF5OworICAgICAgICBpZiAoYXJyYXkgJiYgbmV3U2l6ZSA8PSBh
cnJheS0+c2l6ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgQXJyYXkqIG5ld0FycmF5
ID0gY3JlYXRlQXJyYXkobmV3U2l6ZSk7CisgICAgICAgIC8vIFRoaXMgYWxsb3dzIHVzIHRvIGRv
IENvbmN1cnJlbnRCdWZmZXI8c3RkOjp1bmlxdWVfcHRyPD4+LgorICAgICAgICBpZiAoYXJyYXkp
CisgICAgICAgICAgICBtZW1jcHkobmV3QXJyYXktPmRhdGEsIGFycmF5LT5kYXRhLCBzaXplb2Yo
VCkgKiBhcnJheS0+c2l6ZSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGFycmF5ID8gYXJy
YXktPnNpemUgOiAwOyBpIDwgbmV3U2l6ZTsgKytpKQorICAgICAgICAgICAgbmV3IChuZXdBcnJh
eS0+ZGF0YSArIGkpIFQoKTsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAg
ICAgbV9hcnJheSA9IG5ld0FycmF5OworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwor
ICAgICAgICBtX2FsbEFycmF5cy5hcHBlbmQobmV3QXJyYXkpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGdyb3coc2l6ZV90IG5ld1NpemUpCisgICAgeworICAgICAgICBzaXplX3Qgc2l6ZSA9IG1f
YXJyYXkgPyBtX2FycmF5LT5zaXplIDogMDsKKyAgICAgICAgaWYgKG5ld1NpemUgPD0gc2l6ZSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZ3Jvd0V4YWN0KHN0ZDo6bWF4KG5ld1NpemUs
IHNpemUgKiAyKSk7CisgICAgfQorICAgIAorICAgIHN0cnVjdCBBcnJheSB7CisgICAgICAgIHVu
c2lnbmVkIHNpemU7IC8vIFRoaXMgaXMgYW4gaW1tdXRhYmxlIHNpemUuCisgICAgICAgIFQgZGF0
YVsxXTsKKyAgICB9OworICAgIAorICAgIEFycmF5KiBhcnJheSgpIGNvbnN0IHsgcmV0dXJuIG1f
YXJyYXk7IH0KKyAgICAKKyAgICBUJiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgeyByZXR1cm4g
bV9hcnJheS0+ZGF0YVtpbmRleF07IH0KKyAgICBjb25zdCBUJiBvcGVyYXRvcltdKHNpemVfdCBp
bmRleCkgY29uc3QgeyByZXR1cm4gbV9hcnJheS0+ZGF0YVtpbmRleF07IH0KKyAgICAKK3ByaXZh
dGU6CisgICAgQXJyYXkqIGNyZWF0ZUFycmF5KHVuc2lnbmVkIHNpemUpCisgICAgeworICAgICAg
ICBBcnJheSogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8QXJyYXkqPihmYXN0TWFsbG9jKE9CSkVDVF9P
RkZTRVRPRihBcnJheSwgZGF0YSkgKyBzaXplb2YoVCkgKiBzaXplKSk7CisgICAgICAgIHJlc3Vs
dC0+c2l6ZSA9IHNpemU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAg
IEFycmF5KiBtX2FycmF5IHsgbnVsbHB0ciB9OworICAgIFZlY3RvcjxBcnJheSo+IG1fYWxsQXJy
YXlzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Nv
bmN1cnJlbnRWZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Db25jdXJyZW50
VmVjdG9yLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvQ29uY3VycmVudFZlY3Rv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjUzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUg
bmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ29uY3VycmVudFZlY3Rvcl9oCisj
ZGVmaW5lIENvbmN1cnJlbnRWZWN0b3JfaAorCisjaW5jbHVkZSA8d3RmL0NvbmN1cnJlbnRCdWZm
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdURiB7CisK
Ky8vIEFuIGl0ZXJhdG9yIGZvciBDb25jdXJyZW50VmVjdG9yLiBJdCBzdXBwb3J0cyBvbmx5IHRo
ZSBwcmUgKysgb3BlcmF0b3IKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXplX3QgU2VnbWVudFNp
emUgPSA4PiBjbGFzcyBDb25jdXJyZW50VmVjdG9yOwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNp
emVfdCBTZWdtZW50U2l6ZSA9IDg+IGNsYXNzIENvbmN1cnJlbnRWZWN0b3JJdGVyYXRvciB7Citw
cml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb25jdXJyZW50VmVjdG9yPFQsIFNlZ21lbnRTaXpl
PjsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIENvbmN1cnJlbnRWZWN0b3JJdGVyYXRvcjxULCBTZWdt
ZW50U2l6ZT4gSXRlcmF0b3I7CisKKyAgICB+Q29uY3VycmVudFZlY3Rvckl0ZXJhdG9yKCkgeyB9
CisKKyAgICBUJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5hdChtX2luZGV4
KTsgfQorICAgIFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmbV92ZWN0b3IuYXQobV9p
bmRleCk7IH0KKworICAgIC8vIE9ubHkgcHJlZml4ICsrIG9wZXJhdG9yIHN1cHBvcnRlZAorICAg
IEl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICB7CisgICAgICAgIG1faW5kZXgrKzsKKyAgICAg
ICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJdGVy
YXRvciYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhl
ci5tX2luZGV4ICYmICZtX3ZlY3RvciA9PSAmb3RoZXIubV92ZWN0b3I7CisgICAgfQorCisgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IEl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2luZGV4ICE9IG90aGVyLm1faW5kZXggfHwgJm1fdmVjdG9yICE9ICZvdGhl
ci5tX3ZlY3RvcjsKKyAgICB9CisKKyAgICBDb25jdXJyZW50VmVjdG9ySXRlcmF0b3ImIG9wZXJh
dG9yPShjb25zdCBDb25jdXJyZW50VmVjdG9ySXRlcmF0b3I8VCwgU2VnbWVudFNpemU+JiBvdGhl
cikKKyAgICB7CisgICAgICAgIG1fdmVjdG9yID0gb3RoZXIubV92ZWN0b3I7CisgICAgICAgIG1f
aW5kZXggPSBvdGhlci5tX2luZGV4OworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCitw
cml2YXRlOgorICAgIENvbmN1cnJlbnRWZWN0b3JJdGVyYXRvcihDb25jdXJyZW50VmVjdG9yPFQs
IFNlZ21lbnRTaXplPiYgdmVjdG9yLCBzaXplX3QgaW5kZXgpCisgICAgICAgIDogbV92ZWN0b3Io
dmVjdG9yKQorICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgeworICAgIH0KKworICAgIENv
bmN1cnJlbnRWZWN0b3I8VCwgU2VnbWVudFNpemU+JiBtX3ZlY3RvcjsKKyAgICBzaXplX3QgbV9p
bmRleDsKK307CisKKy8vIENvbmN1cnJlbnRWZWN0b3IgaXMgbGlrZSBTZWdtZW50ZWRWZWN0b3Is
IGJ1dCBzdWl0YWJsZSBmb3Igc2NlbmFyaW9zIHdoZXJlIG9uZSB0aHJlYWQgYXBwZW5kcworLy8g
ZWxlbWVudHMgYW5kIGFub3RoZXIgdGhyZWFkIGNvbnRpbnVlcyB0byBhY2Nlc3MgZWxlbWVudHMg
YXQgbG93ZXIgaW5kaWNlcy4gT25seSBvbmUgdGhyZWFkIGNhbgorLy8gYXBwZW5kIGF0IGEgdGlt
ZSwgc28gdGhhdCBhY3Rpdml0eSBzdGlsbCBuZWVkcyBsb2NraW5nLgordGVtcGxhdGUgPHR5cGVu
YW1lIFQsIHNpemVfdCBTZWdtZW50U2l6ZT4KK2NsYXNzIENvbmN1cnJlbnRWZWN0b3IgeworICAg
IGZyaWVuZCBjbGFzcyBDb25jdXJyZW50VmVjdG9ySXRlcmF0b3I8VCwgU2VnbWVudFNpemU+Owor
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvbmN1cnJlbnRWZWN0b3IpOworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworCitwdWJsaWM6CisgICAgdHlwZWRlZiBDb25jdXJyZW50VmVjdG9y
SXRlcmF0b3I8VCwgU2VnbWVudFNpemU+IEl0ZXJhdG9yOworCisgICAgQ29uY3VycmVudFZlY3Rv
cigpID0gZGVmYXVsdDsKKworICAgIH5Db25jdXJyZW50VmVjdG9yKCkKKyAgICB7CisgICAgfQor
CisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBib29sIGlz
RW1wdHkoKSBjb25zdCB7IHJldHVybiAhc2l6ZSgpOyB9CisKKyAgICBUJiBhdChzaXplX3QgaW5k
ZXgpCisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpbmRl
eCA8IG1fc2l6ZSk7CisgICAgICAgIHJldHVybiBzZWdtZW50Rm9yKGluZGV4KS0+ZW50cmllc1tz
dWJzY3JpcHRGb3IoaW5kZXgpXTsKKyAgICB9CisKKyAgICBjb25zdCBUJiBhdChzaXplX3QgaW5k
ZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxDb25jdXJyZW50VmVj
dG9yPFQsIFNlZ21lbnRTaXplPio+KHRoaXMpLT5hdChpbmRleCk7CisgICAgfQorCisgICAgVCYg
b3BlcmF0b3JbXShzaXplX3QgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gYXQoaW5kZXgp
OworICAgIH0KKworICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KGluZGV4KTsKKyAgICB9CisKKyAgICBUJiBmaXJzdCgp
CisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighaXNFbXB0
eSgpKTsKKyAgICAgICAgcmV0dXJuIGF0KDApOworICAgIH0KKyAgICBjb25zdCBUJiBmaXJzdCgp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTigh
aXNFbXB0eSgpKTsKKyAgICAgICAgcmV0dXJuIGF0KDApOworICAgIH0KKyAgICBUJiBsYXN0KCkK
KyAgICB7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFpc0VtcHR5
KCkpOworICAgICAgICByZXR1cm4gYXQoc2l6ZSgpIC0gMSk7CisgICAgfQorICAgIGNvbnN0IFQm
IGxhc3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT04oIWlzRW1wdHkoKSk7CisgICAgICAgIHJldHVybiBhdChzaXplKCkgLSAxKTsKKyAgICB9
CisKKyAgICBUIHRha2VMYXN0KCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZ
X0lNUExJQ0FUSU9OKCFpc0VtcHR5KCkpOworICAgICAgICBUIHJlc3VsdCA9IFdURk1vdmUobGFz
dCgpKTsKKyAgICAgICAgLS1tX3NpemU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KKyAgICB2b2lkIGFwcGVuZChBcmdzJiYu
Li4gYXJncykKKyAgICB7CisgICAgICAgICsrbV9zaXplOworICAgICAgICBpZiAoIXNlZ21lbnRF
eGlzdHNGb3IobV9zaXplIC0gMSkpCisgICAgICAgICAgICBhbGxvY2F0ZVNlZ21lbnQoKTsKKyAg
ICAgICAgbmV3IChOb3ROdWxsLCAmbGFzdCgpKSBUKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4u
Lik7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KKyAgICBUJiBhbGxv
YyhBcmdzJiYuLi4gYXJncykKKyAgICB7CisgICAgICAgIGFwcGVuZChzdGQ6OmZvcndhcmQ8QXJn
cz4oYXJncykuLi4pOworICAgICAgICByZXR1cm4gbGFzdCgpOworICAgIH0KKworICAgIHZvaWQg
cmVtb3ZlTGFzdCgpCisgICAgeworICAgICAgICBsYXN0KCkuflQoKTsKKyAgICAgICAgLS1tX3Np
emU7CisgICAgfQorCisgICAgdm9pZCBncm93KHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgICAg
aWYgKHNpemUgPT0gbV9zaXplKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBBU1NFUlQo
c2l6ZSA+IG1fc2l6ZSk7CisgICAgICAgIGVuc3VyZVNlZ21lbnRzRm9yKHNpemUpOworICAgICAg
ICBzaXplX3Qgb2xkU2l6ZSA9IG1fc2l6ZTsKKyAgICAgICAgbV9zaXplID0gc2l6ZTsKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IG9sZFNpemU7IGkgPCBtX3NpemU7ICsraSkKKyAgICAgICAgICAg
IG5ldyAoTm90TnVsbCwgJmF0KGkpKSBUKCk7CisgICAgfQorCisgICAgSXRlcmF0b3IgYmVnaW4o
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEl0ZXJhdG9yKCp0aGlzLCAwKTsKKyAgICB9CisKKyAg
ICBJdGVyYXRvciBlbmQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEl0ZXJhdG9yKCp0aGlzLCBt
X3NpemUpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgU2VnbWVudCB7CisgICAgICAg
IFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKKyAgICAgICAgICAgIAorICAgICAgICBU
IGVudHJpZXNbU2VnbWVudFNpemVdOworICAgIH07CisKKyAgICBib29sIHNlZ21lbnRFeGlzdHNG
b3Ioc2l6ZV90IGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGluZGV4IC8gU2VnbWVudFNp
emUgPCBtX251bVNlZ21lbnRzOworICAgIH0KKworICAgIFNlZ21lbnQqIHNlZ21lbnRGb3Ioc2l6
ZV90IGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc2VnbWVudHNbaW5kZXggLyBTZWdt
ZW50U2l6ZV0uZ2V0KCk7CisgICAgfQorCisgICAgc2l6ZV90IHN1YnNjcmlwdEZvcihzaXplX3Qg
aW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gaW5kZXggJSBTZWdtZW50U2l6ZTsKKyAgICB9
CisKKyAgICB2b2lkIGVuc3VyZVNlZ21lbnRzRm9yKHNpemVfdCBzaXplKQorICAgIHsKKyAgICAg
ICAgc2l6ZV90IHNlZ21lbnRDb3VudCA9IChtX3NpemUgKyBTZWdtZW50U2l6ZSAtIDEpIC8gU2Vn
bWVudFNpemU7CisgICAgICAgIHNpemVfdCBuZWVkZWRTZWdtZW50Q291bnQgPSAoc2l6ZSArIFNl
Z21lbnRTaXplIC0gMSkgLyBTZWdtZW50U2l6ZTsKKworICAgICAgICBmb3IgKHNpemVfdCBpID0g
c2VnbWVudENvdW50ID8gc2VnbWVudENvdW50IC0gMSA6IDA7IGkgPCBuZWVkZWRTZWdtZW50Q291
bnQ7ICsraSkKKyAgICAgICAgICAgIGVuc3VyZVNlZ21lbnQoaSk7CisgICAgfQorCisgICAgdm9p
ZCBlbnN1cmVTZWdtZW50KHNpemVfdCBzZWdtZW50SW5kZXgpCisgICAgeworICAgICAgICBBU1NF
UlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzZWdtZW50SW5kZXggPD0gbV9udW1TZWdtZW50
cyk7CisgICAgICAgIGlmIChzZWdtZW50SW5kZXggPT0gbV9udW1TZWdtZW50cykKKyAgICAgICAg
ICAgIGFsbG9jYXRlU2VnbWVudCgpOworICAgIH0KKworICAgIHZvaWQgYWxsb2NhdGVTZWdtZW50
KCkKKyAgICB7CisgICAgICAgIG1fc2VnbWVudHMuZ3JvdyhtX251bVNlZ21lbnRzICsgMSk7Cisg
ICAgICAgIG1fc2VnbWVudHNbbV9udW1TZWdtZW50cysrXSA9IHN0ZDo6bWFrZV91bmlxdWU8U2Vn
bWVudD4oKTsKKyAgICB9CisKKyAgICBzaXplX3QgbV9zaXplIHsgMCB9OworICAgIENvbmN1cnJl
bnRCdWZmZXI8c3RkOjp1bmlxdWVfcHRyPFNlZ21lbnQ+PiBtX3NlZ21lbnRzOworICAgIHNpemVf
dCBtX251bVNlZ21lbnRzIHsgMCB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5n
IFdURjo6Q29uY3VycmVudFZlY3RvcjsKKworI2VuZGlmIC8vIENvbmN1cnJlbnRWZWN0b3JfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329058</attachid>
            <date>2017-12-11 16:54:04 -0800</date>
            <delta_ts>2017-12-11 20:55:43 -0800</delta_ts>
            <desc>passing even more tests than before</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>63546</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDIyNTcyNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNDk1LDYg
KzQ5NSw3IEBAIGhlYXAvSGVhcFNuYXBzaG90LmNwcAogaGVhcC9IZWFwU25hcHNob3RCdWlsZGVy
LmNwcAogaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwCiBoZWFwL0lzb0FsaWduZWRNZW1vcnlB
bGxvY2F0b3IuY3BwCitoZWFwL0lzb0NlbGxTZXQuY3BwCiBoZWFwL0lzb1N1YnNwYWNlLmNwcAog
aGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAKIGhlYXAvTGFyZ2VBbGxvY2F0aW9uLmNwcApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyNTcyNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC00NzQsNiArNDc0LDkgQEAKIAkJMEZCMTc2NjMxOTZCOEY5RTAw
OTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZCMTc2NUYxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5o
ICovOyB9OwogCQkwRkIzODc4RTFCRkJDNDREMDBFM0FCMUUgLyogQWlyQmxvY2tXb3JrbGlzdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMzg3OEIx
QkZCQzQ0RDAwRTNBQjFFIC8qIEFpckJsb2NrV29ya2xpc3QuaCAqLzsgfTsKIAkJMEZCMzg3OTAx
QkZCQzQ0RDAwRTNBQjFFIC8qIEFpck9wdGltaXplQmxvY2tPcmRlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMzg3OEQxQkZCQzQ0RDAwRTNBQjFF
IC8qIEFpck9wdGltaXplQmxvY2tPcmRlci5oICovOyB9OworCQkwRkI0Njc3RjFGRERBNkU5MDAz
RkNCMDkgLyogQXRvbUluZGljZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQjQ2NzdFMUZEREE2RTUwMDNGQ0IwOSAvKiBBdG9tSW5kaWNlcy5oICov
OyB9OworCQkwRkI0Njc4MDFGRERBNkYxMDAzRkNCMDkgLyogSXNvQ2VsbFNldC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNDY3N0QxRkREQTZEOTAw
M0ZDQjA5IC8qIElzb0NlbGxTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkwRkI0Njc4MTFGRERBNkY3MDAzRkNCMDkgLyogSXNvQ2VsbFNldElu
bGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QjQ2NzdCMUZEREE2RDgwMDNGQ0IwOSAvKiBJc29DZWxsU2V0SW5saW5lcy5oICovOyB9OwogCQkw
RkI0NzY3RTFEOTlBRUE5MDA4RUE2Q0IgLyogR0NEZWZlcnJhbENvbnRleHQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjQ3NjdDMUQ5OUFFQTcwMDhF
QTZDQiAvKiBHQ0RlZmVycmFsQ29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGQjQ3NjdGMUQ5OUFFQUQwMDhFQTZDQiAvKiBHQ0RlZmVy
cmFsQ29udGV4dElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQjQ3NjdEMUQ5OUFFQTcwMDhFQTZDQiAvKiBHQ0RlZmVycmFsQ29udGV4dElu
bGluZXMuaCAqLzsgfTsKIAkJMEZCNEZCNzQxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlTbG93
UGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZC
NEZCNzExQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aC5oICovOyB9OwpAQCAtMjU2
Miw2ICsyNTY1LDEwIEBACiAJCTBGQjM4NzkxMUJGRDMxQTEwMEUzQUIxRSAvKiBGVExDb21waWxl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTENvbXBpbGUuY3Bw
OyBwYXRoID0gZnRsL0ZUTENvbXBpbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkI0MTU4MzFENzhGOTgyMDBERjhEMDkgLyogQXJyYXlDb252ZW50aW9ucy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcnJheUNvbnZlbnRpb25zLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNDM4QTIxOTI3MEIxRDAwRTFGQkM5IC8qIFN0
cnVjdHVyZVNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJ1
Y3R1cmVTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI0Njc3QjFGRERB
NkQ4MDAzRkNCMDkgLyogSXNvQ2VsbFNldElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSXNvQ2VsbFNldElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZCNDY3N0MxRkREQTZEOTAwM0ZDQjA5IC8qIElzb0NlbGxTZXQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSXNvQ2VsbFNldC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGQjQ2NzdEMUZEREE2RDkwMDNGQ0IwOSAvKiBJc29DZWxsU2V0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElzb0NlbGxTZXQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCNDY3N0UxRkREQTZFNTAwM0ZDQjA5IC8qIEF0b21J
bmRpY2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF0b21JbmRpY2VzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjQ3NjdDMUQ5OUFFQTcwMDhFQTZDQiAv
KiBHQ0RlZmVycmFsQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBH
Q0RlZmVycmFsQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0NzY3
RDFEOTlBRUE3MDA4RUE2Q0IgLyogR0NEZWZlcnJhbENvbnRleHRJbmxpbmVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDRGVmZXJyYWxDb250ZXh0SW5saW5lcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0QjUxMDE2QjNBOTY0MDAzRjY5NkIgLyogREZH
TWluaWZpZWRJRC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdNaW5pZmll
ZElELmg7IHBhdGggPSBkZmcvREZHTWluaWZpZWRJRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNTUyNSw2ICs1NTMyLDcgQEAKIAkJCQkwRjk2MzAzNTFENDE5MkMzMDA1NjA5RDkg
LyogQWxsb2NhdG9yQXR0cmlidXRlcy5jcHAgKi8sCiAJCQkJMEY5NjMwMzYxRDQxOTJDMzAwNTYw
OUQ5IC8qIEFsbG9jYXRvckF0dHJpYnV0ZXMuaCAqLywKIAkJCQkwRjMwQ0I1RDFGQ0U0NkI0MDA0
QjUzMjMgLyogQWxsb2NhdG9yRm9yTW9kZS5oICovLAorCQkJCTBGQjQ2NzdFMUZEREE2RTUwMDNG
Q0IwOSAvKiBBdG9tSW5kaWNlcy5oICovLAogCQkJCTBGREU4N0Y4MURGRDBDNkQwMDY0QzM5MCAv
KiBDZWxsQ29udGFpbmVyLmNwcCAqLywKIAkJCQkwRjA3MEE0MjFENTQzQTg5MDA2RTcyMzIgLyog
Q2VsbENvbnRhaW5lci5oICovLAogCQkJCTBGMDcwQTQzMUQ1NDNBODkwMDZFNzIzMiAvKiBDZWxs
Q29udGFpbmVySW5saW5lcy5oICovLApAQCAtNTYxMSw2ICs1NjE5LDkgQEAKIAkJCQlDMjVGOEJD
QzE1NzU0NEE5MDAyNDVCNzEgLyogSW5jcmVtZW50YWxTd2VlcGVyLmggKi8sCiAJCQkJMEZEQ0Ux
MkYxRkIxMUQ5RDAwNkYzOTAxIC8qIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwICovLAog
CQkJCTBGRENFMTMwMUZCMTFEOUQwMDZGMzkwMSAvKiBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9y
LmggKi8sCisJCQkJMEZCNDY3N0MxRkREQTZEOTAwM0ZDQjA5IC8qIElzb0NlbGxTZXQuY3BwICov
LAorCQkJCTBGQjQ2NzdEMUZEREE2RDkwMDNGQ0IwOSAvKiBJc29DZWxsU2V0LmggKi8sCisJCQkJ
MEZCNDY3N0IxRkREQTZEODAwM0ZDQjA5IC8qIElzb0NlbGxTZXRJbmxpbmVzLmggKi8sCiAJCQkJ
MEZEQ0UxMkMxRkFGQjRERTAwNkYzOTAxIC8qIElzb1N1YnNwYWNlLmNwcCAqLywKIAkJCQkwRkRD
RTEyQjFGQUZCNERFMDA2RjM5MDEgLyogSXNvU3Vic3BhY2UuaCAqLywKIAkJCQkwRjc2NkQyOTE1
QThDQzM0MDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuY3BwICovLApAQCAtNzk5Nyw2ICs4
MDA4LDcgQEAKIAkJCQkwRkVDODU3MjFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQzYzQkMxRTYzNDQwQzAwQzEzODM5IC8qIEFpckJsb2Nr
SW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkIzODc4RTFCRkJDNDREMDBFM0FC
MUUgLyogQWlyQmxvY2tXb3JrbGlzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCNDY3ODExRkRE
QTZGNzAwM0ZDQjA5IC8qIElzb0NlbGxTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
Rjc5QzdDQTFFNzRDOTNCMDBFQjM0RDEgLyogQWlyQnJlYWtDcml0aWNhbEVkZ2VzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjYxODMyQTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252
ZW50aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODU3NDFCREFDREM3MDA4MEZGNzQgLyog
QWlyQ0NhbGxTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKQEAgLTg5NzMsNiArODk4NSw3IEBACiAJ
CQkJQUQyRkNCRTUxREI1OERBRDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQURFODAyOTkxRTA4RjFERTAwNThERTc4IC8qIEpTV2ViQXNzZW1i
bHlMaW5rRXJyb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQkU3MURCNThEQUQwMEIzRTcz
NiAvKiBKU1dlYkFzc2VtYmx5TWVtb3J5LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkI0Njc3RjFG
RERBNkU5MDAzRkNCMDkgLyogQXRvbUluZGljZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZD
QzA1MURCNThEQUQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5TW9kdWxlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBRDJGQ0JFOTFEQjU4REFEMDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseVJ1bnRpbWVF
cnJvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNCRUIxREI1OERBRDAwQjNFNzM2IC8qIEpT
V2ViQXNzZW1ibHlUYWJsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05MjU5LDYgKzkyNzIsNyBAQAog
CQkJCUMyMEJBOTJEMTZCQjFDMTUwMEIzQUVBMiAvKiBTdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTMzMkE1MTRDQTdEREQwMDg1RjNDNiAvKiBTdHJ1Y3R1
cmVTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzY2RDM5MTVBRTRBMUYwMDhGMzYzRSAvKiBT
dHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkI0
Njc4MDFGRERBNkYxMDAzRkNCMDkgLyogSXNvQ2VsbFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkNDRjBEMDgwRUYwQUFCOTAwNDEzQzhGIC8qIFN0cnVjdHVyZVN0dWJJbmZvLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzkwNDE0ODBFQjkyNTA5MDBGRTI2RkEgLyogU3RydWN0dXJlVHJhbnNpdGlv
blRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjdERjEzNzFFMjk3MEUxMDA5NTk1MUIgLyog
U3Vic3BhY2UuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQXRvbUluZGljZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9BdG9tSW5kaWNlcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0F0b21JbmRpY2VzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitzdHJ1Y3QgQXRv
bUluZGljZXMgeworICAgIEF0b21JbmRpY2VzKCkgeyB9CisgICAgCisgICAgQXRvbUluZGljZXMo
SGVhcENlbGwqIGNlbGwpCisgICAgICAgIDogYmxvY2soTWFya2VkQmxvY2s6OmJsb2NrRm9yKGNl
bGwpKQorICAgICAgICAsIGJsb2NrSW5kZXgoYmxvY2stPmhhbmRsZSgpLmluZGV4KCkpCisgICAg
ICAgICwgYXRvbU51bWJlcihibG9jay0+YXRvbU51bWJlcihjZWxsKSkKKyAgICB7CisgICAgfQor
ICAgIAorICAgIE1hcmtlZEJsb2NrKiBibG9jazsKKyAgICBzaXplX3QgYmxvY2tJbmRleDsKKyAg
ICBzaXplX3QgYXRvbU51bWJlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjI1NzI1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQy
LDcgQEAKICNpbmNsdWRlICJJbmNyZW1lbnRhbFN3ZWVwZXIuaCIKICNpbmNsdWRlICJJbmZlcnJl
ZFN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCisjaW5jbHVkZSAiSXNvQ2Vs
bFNldElubGluZXMuaCIKICNpbmNsdWRlICJKSVRTdHViUm91dGluZVNldC5oIgogI2luY2x1ZGUg
IkpJVFdvcmtsaXN0LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgpAQCAtNTUyLDE4ICs1NTMs
MTggQEAgdm9pZCBIZWFwOjphZGRSZWZlcmVuY2UoSlNDZWxsKiBjZWxsLCBBcgogICAgIH0KIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGU+Ci12b2lkIEhlYXA6OmZpbmFsaXplVW5jb25k
aXRpb25hbEZpbmFsaXplcnMoU3Vic3BhY2UmIHN1YnNwYWNlKQordGVtcGxhdGU8dHlwZW5hbWUg
Q2VsbFR5cGUsIHR5cGVuYW1lIENlbGxTZXQ+Cit2b2lkIEhlYXA6OmZpbmFsaXplVW5jb25kaXRp
b25hbEZpbmFsaXplcnMoQ2VsbFNldCYgY2VsbFNldCkKIHsKLSAgICBzdWJzcGFjZS5mb3JFYWNo
TWFya2VkQ2VsbCgKKyAgICBjZWxsU2V0LmZvckVhY2hNYXJrZWRDZWxsKAogICAgICAgICBbJl0g
KEhlYXBDZWxsKiBjZWxsLCBIZWFwQ2VsbDo6S2luZCkgewotICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8Q2VsbFR5cGUqPihjZWxsKS0+ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKnZtKCkpOworICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENlbGxUeXBlKj4oY2VsbCktPmZpbmFsaXplVW5j
b25kaXRpb25hbGx5KCp2bSgpKTsKICAgICAgICAgfSk7CiB9CiAKIHZvaWQgSGVhcDo6ZmluYWxp
emVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpCiB7Ci0gICAgZmluYWxpemVVbmNvbmRpdGlvbmFs
RmluYWxpemVyczxJbmZlcnJlZFN0cnVjdHVyZT4odm0oKS0+aW5mZXJyZWRTdHJ1Y3R1cmVTcGFj
ZSk7CisgICAgZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVyczxJbmZlcnJlZFR5cGU+KHZt
KCktPmluZmVycmVkVHlwZXNXaXRoRmluYWxpemVycyk7CiAgICAgCiAgICAgd2hpbGUgKG1fdW5j
b25kaXRpb25hbEZpbmFsaXplcnMuaGFzTmV4dCgpKSB7CiAgICAgICAgIFVuY29uZGl0aW9uYWxG
aW5hbGl6ZXIqIGZpbmFsaXplciA9IG1fdW5jb25kaXRpb25hbEZpbmFsaXplcnMucmVtb3ZlTmV4
dCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjI1NzI1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
OTYsOCArNDk2LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIG5vdGlmeUluY3JlbWVudGFsU3dlZXBl
cigpOwogICAgIHZvaWQgaGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7CiAKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDZWxsVHlwZT4KLSAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXpl
cnMoU3Vic3BhY2UmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgdHlwZW5hbWUg
Q2VsbFNldD4KKyAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMoQ2VsbFNl
dCYpOwogICAgIAogICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpOwog
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5jcHAJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklz
b0NlbGxTZXQuaCIKKworI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvcklubGluZXMuaCIKKyNpbmNs
dWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0lzb0NlbGxT
ZXQ6Oklzb0NlbGxTZXQoSXNvU3Vic3BhY2UmIHN1YnNwYWNlKQorICAgIDogbV9zdWJzcGFjZShz
dWJzcGFjZSkKK3sKKyAgICBzaXplX3Qgc2l6ZSA9IHN1YnNwYWNlLm1fYWxsb2NhdG9yLm1fYmxv
Y2tzLnNpemUoKTsKKyAgICBtX2Jsb2Nrc1dpdGhCaXRzLnJlc2l6ZShzaXplKTsKKyAgICBtX2Jp
dHMuZ3JvdyhzaXplKTsKKyAgICBzdWJzcGFjZS5tX2NlbGxTZXRzLmFwcGVuZCh0aGlzKTsKK30K
KworSXNvQ2VsbFNldDo6fklzb0NlbGxTZXQoKQoreworICAgIGlmIChpc09uTGlzdCgpKQorICAg
ICAgICBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxJc29DZWxsU2V0Pjo6cmVtb3ZlKCk7Cit9CisKK05F
VkVSX0lOTElORSBCaXRtYXA8TWFya2VkQmxvY2s6OmF0b21zUGVyQmxvY2s+KiBJc29DZWxsU2V0
OjphZGRTbG93KHNpemVfdCBibG9ja0luZGV4KQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2sobV9zdWJzcGFjZS5tX2FsbG9jYXRvci5tX2JpdHZlY3RvckxvY2spOworICAgIGF1dG8mIGJp
dHNQdHJSZWYgPSBtX2JpdHNbYmxvY2tJbmRleF07CisgICAgYXV0byogYml0cyA9IGJpdHNQdHJS
ZWYuZ2V0KCk7CisgICAgaWYgKCFiaXRzKSB7CisgICAgICAgIGJpdHNQdHJSZWYgPSBzdGQ6Om1h
a2VfdW5pcXVlPEJpdG1hcDxNYXJrZWRCbG9jazo6YXRvbXNQZXJCbG9jaz4+KCk7CisgICAgICAg
IGJpdHMgPSBiaXRzUHRyUmVmLmdldCgpOworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgp
OworICAgICAgICBtX2Jsb2Nrc1dpdGhCaXRzW2Jsb2NrSW5kZXhdID0gdHJ1ZTsKKyAgICB9Cisg
ICAgcmV0dXJuIGJpdHM7Cit9CisKK3ZvaWQgSXNvQ2VsbFNldDo6ZGlkUmVzaXplQml0cyhzaXpl
X3QgbmV3U2l6ZSkKK3sKKyAgICBtX2Jsb2Nrc1dpdGhCaXRzLnJlc2l6ZShuZXdTaXplKTsKKyAg
ICBtX2JpdHMuZ3JvdyhuZXdTaXplKTsKK30KKwordm9pZCBJc29DZWxsU2V0OjpkaWRSZW1vdmVC
bG9jayhzaXplX3QgYmxvY2tJbmRleCkKK3sKKyAgICBtX2Jsb2Nrc1dpdGhCaXRzW2Jsb2NrSW5k
ZXhdID0gZmFsc2U7CisgICAgbV9iaXRzW2Jsb2NrSW5kZXhdID0gbnVsbHB0cjsKK30KKwordm9p
ZCBJc29DZWxsU2V0Ojpzd2VlcFRvRnJlZUxpc3QoTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2sp
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQoIWJsb2NrLT5pc0FsbG9jYXRlZCgpKTsKKyAgICAKKyAg
ICBpZiAoIW1fYmxvY2tzV2l0aEJpdHNbYmxvY2stPmluZGV4KCldKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7CisgICAgCisgICAgaWYgKCFtX2JpdHNb
YmxvY2stPmluZGV4KCldKSB7CisgICAgICAgIGRhdGFMb2coIkZBVEFMOiBmb3IgYmxvY2sgaW5k
ZXggIiwgYmxvY2stPmluZGV4KCksICI6XG4iKTsKKyAgICAgICAgZGF0YUxvZygiQmxvY2tzIHdp
dGggYml0cyBzYXlzOiAiLCAhIW1fYmxvY2tzV2l0aEJpdHNbYmxvY2stPmluZGV4KCldLCAiXG4i
KTsKKyAgICAgICAgZGF0YUxvZygiQml0cyBzYXlzOiAiLCBSYXdQb2ludGVyKG1fYml0c1tibG9j
ay0+aW5kZXgoKV0uZ2V0KCkpLCAiXG4iKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgaWYgKGJsb2NrLT5oYXNBbnlOZXdseUFsbG9jYXRl
ZCgpKSB7CisgICAgICAgIG1fYml0c1tibG9jay0+aW5kZXgoKV0tPmZpbHRlcihibG9jay0+bmV3
bHlBbGxvY2F0ZWQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYmxvY2st
PmlzRW1wdHkoKSB8fCBibG9jay0+YXJlTWFya3NTdGFsZSgpKSB7CisgICAgICAgIG1fYmxvY2tz
V2l0aEJpdHNbYmxvY2stPmluZGV4KCldID0gZmFsc2U7CisgICAgICAgIG1fYml0c1tibG9jay0+
aW5kZXgoKV0gPSBudWxscHRyOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG1f
Yml0c1tibG9jay0+aW5kZXgoKV0tPmZpbHRlcihibG9jay0+YmxvY2soKS5tYXJrcygpKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0lzb0NlbGxTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9J
c29DZWxsU2V0LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SXNvQ2VsbFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJBdG9tSW5kaWNlcy5oIgorI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4KKyNpbmNsdWRlIDx3
dGYvQ29uY3VycmVudFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+CisK
K25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBIZWFwQ2VsbDsKK2NsYXNzIElzb1N1YnNwYWNlOwor
CisvLyBDcmVhdGUgYSBzZXQgb2YgY2VsbHMgdGhhdCBhcmUgaW4gYW4gSXNvU3Vic3BhY2UuIFRo
aXMgYWxsb3dzIGNvbmN1cnJlbnQgTygxKSBzZXQgaW5zZXJ0aW9uIGFuZAorLy8gcmVtb3ZhbC4g
RWFjaCBzdWNoIHNldCBzaG91bGQgYmUgdGhvdWdodCBvZiBhcyBhIDAuOCUgaW5jcmVhc2UgaW4g
b2JqZWN0IHNpemUgZm9yIG9iamVjdHMgaW4gdGhhdAorLy8gSXNvU3Vic3BhY2UgKGl0J3MgbGlr
ZSBhZGRpbmcgMSBiaXQgZXZlcnkgMTYgYnl0ZXMsIG9yIDEgYml0IGV2ZXJ5IDEyOCBiaXRzKS4K
K2NsYXNzIElzb0NlbGxTZXQgOiBwdWJsaWMgQmFzaWNSYXdTZW50aW5lbE5vZGU8SXNvQ2VsbFNl
dD4geworcHVibGljOgorICAgIElzb0NlbGxTZXQoSXNvU3Vic3BhY2UmIHN1YnNwYWNlKTsKKyAg
ICB+SXNvQ2VsbFNldCgpOworICAgIAorICAgIGJvb2wgYWRkKEhlYXBDZWxsKiBjZWxsKTsKKyAg
ICAKKyAgICBib29sIHJlbW92ZShIZWFwQ2VsbCogY2VsbCk7CisgICAgCisgICAgYm9vbCBjb250
YWlucyhIZWFwQ2VsbCogY2VsbCkgY29uc3Q7CisgICAgCisgICAgLy8gVGhpcyB3aWxsIGhhdmUg
dG8gZG8gYSBjb21iaW5lZCBzZWFyY2ggb3ZlciB3aGF0ZXZlciBTdWJzcGFjZTo6Zm9yRWFjaE1h
cmtlZENlbGwgdXNlcyBhbmQKKyAgICAvLyBvdXIgbV9ibG9ja3NXaXRoQml0cy4KKyAgICAvLyBO
T1RFOiBJdCdzIGlsbGVnYWwgdG8gY2FsbCBhZGQoKSBvciByZW1vdmUoKSBjb25jdXJyZW50bHkg
dG8gdGhpcywgYnV0IHNlbGYtcmVtb3ZlKCkgd2lsbCB3b3JrLgorICAgIC8vIEJ1dCBpdCdzIGJl
dHRlciBpZiB5b3UgcmV0dXJuIFJlbW92ZSBpbnN0ZWFkLgorICAgIGVudW0gY2xhc3MgRm9yRWFj
aFJlc3VsdCB7CisgICAgICAgIENvbnRpbnVlLAorICAgICAgICBCcmVhaywKKyAgICAgICAgUmVt
b3ZlQW5kQ29udGludWUsCisgICAgICAgIFJlbW92ZUFuZEJyZWFrCisgICAgfTsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIHZvaWQgZm9yRWFjaE1hcmtlZENlbGwoY29uc3QgRnVu
YyYpOworICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgSXNvU3Vic3BhY2U7CisgICAg
CisgICAgQml0bWFwPE1hcmtlZEJsb2NrOjphdG9tc1BlckJsb2NrPiogYWRkU2xvdyhzaXplX3Qg
YmxvY2tJbmRleCk7CisgICAgCisgICAgdm9pZCBkaWRSZXNpemVCaXRzKHNpemVfdCBuZXdTaXpl
KTsKKyAgICB2b2lkIGRpZFJlbW92ZUJsb2NrKHNpemVfdCBibG9ja0luZGV4KTsKKyAgICB2b2lk
IHN3ZWVwVG9GcmVlTGlzdChNYXJrZWRCbG9jazo6SGFuZGxlKik7CisgICAgCisgICAgSXNvU3Vi
c3BhY2UmIG1fc3Vic3BhY2U7CisgICAgCisgICAgLy8gSWRlYTogc3dlZXBpbmcgdG8gZnJlZS1s
aXN0IGNsZWFycyBiaXRzIGZvciB0aG9zZSBjZWxscyB0aGF0IHdlcmUgZnJlZS1saXN0ZWQuIFRo
ZSBmaXJzdCB0aW1lCisgICAgLy8gd2UgYWRkIGEgY2VsbCBpbiBhIGJsb2NrLCB0aGF0IGJsb2Nr
IGdldHMgYSBmcmVlLWxpc3QuIFVubGVzcyB3ZSBkbyBzb21ldGhpbmcgdGhhdCBvYnZpb3VzbHkK
KyAgICAvLyBjbGVhcnMgYWxsIGJpdHMgZm9yIGEgYmxvY2ssIHdlIGtlZXAgaXQgc2V0IGluIGJs
b2Nrc1dpdGhCaXRzLgorICAgIAorICAgIEZhc3RCaXRWZWN0b3IgbV9ibG9ja3NXaXRoQml0czsK
KyAgICBDb25jdXJyZW50VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCaXRtYXA8TWFya2VkQmxvY2s6
OmF0b21zUGVyQmxvY2s+Pj4gbV9iaXRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXRJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldElubGluZXMuaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0SW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAi
SXNvQ2VsbFNldC5oIgorI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworaW5saW5lIGJvb2wgSXNvQ2VsbFNldDo6YWRkKEhlYXBDZWxsKiBjZWxsKQor
eworICAgIEF0b21JbmRpY2VzIGF0b21JbmRpY2VzKGNlbGwpOworICAgIGF1dG8mIGJpdHNQdHJS
ZWYgPSBtX2JpdHNbYXRvbUluZGljZXMuYmxvY2tJbmRleF07CisgICAgYXV0byogYml0cyA9IGJp
dHNQdHJSZWYuZ2V0KCk7CisgICAgaWYgKFVOTElLRUxZKCFiaXRzKSkKKyAgICAgICAgYml0cyA9
IGFkZFNsb3coYXRvbUluZGljZXMuYmxvY2tJbmRleCk7CisgICAgcmV0dXJuICFiaXRzLT5jb25j
dXJyZW50VGVzdEFuZFNldChhdG9tSW5kaWNlcy5hdG9tTnVtYmVyKTsKK30KKworaW5saW5lIGJv
b2wgSXNvQ2VsbFNldDo6cmVtb3ZlKEhlYXBDZWxsKiBjZWxsKQoreworICAgIEF0b21JbmRpY2Vz
IGF0b21JbmRpY2VzKGNlbGwpOworICAgIGF1dG8mIGJpdHNQdHJSZWYgPSBtX2JpdHNbYXRvbUlu
ZGljZXMuYmxvY2tJbmRleF07CisgICAgYXV0byogYml0cyA9IGJpdHNQdHJSZWYuZ2V0KCk7Cisg
ICAgaWYgKCFiaXRzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGJpdHMtPmNv
bmN1cnJlbnRUZXN0QW5kQ2xlYXIoYXRvbUluZGljZXMuYXRvbU51bWJlcik7Cit9CisKK2lubGlu
ZSBib29sIElzb0NlbGxTZXQ6OmNvbnRhaW5zKEhlYXBDZWxsKiBjZWxsKSBjb25zdAoreworICAg
IEF0b21JbmRpY2VzIGF0b21JbmRpY2VzKGNlbGwpOworICAgIGF1dG8qIGJpdHMgPSBtX2JpdHNb
YXRvbUluZGljZXMuYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgaWYgKGJpdHMpCisgICAgICAgIHJl
dHVybiBiaXRzLT5nZXQoYXRvbUluZGljZXMuYXRvbU51bWJlcik7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgordm9pZCBJc29DZWxsU2V0Ojpmb3JFYWNo
TWFya2VkQ2VsbChjb25zdCBGdW5jJiBmdW5jKQoreworICAgIE1hcmtlZEFsbG9jYXRvciYgYWxs
b2NhdG9yID0gbV9zdWJzcGFjZS5tX2FsbG9jYXRvcjsKKyAgICAoYWxsb2NhdG9yLm1fbWFya2lu
Z05vdEVtcHR5ICYgbV9ibG9ja3NXaXRoQml0cykuZm9yRWFjaFNldEJpdCgKKyAgICAgICAgWyZd
IChzaXplX3QgYmxvY2tJbmRleCkgeworICAgICAgICAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSog
YmxvY2sgPSBhbGxvY2F0b3IubV9ibG9ja3NbYmxvY2tJbmRleF07CisKKyAgICAgICAgICAgIGF1
dG8qIGJpdHMgPSBtX2JpdHNbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBib29sIGhh
ZEJpdHMgPSBmYWxzZTsKKyAgICAgICAgICAgIGJsb2NrLT5mb3JFYWNoTWFya2VkQ2VsbCgKKyAg
ICAgICAgICAgICAgICBbJl0gKHNpemVfdCBhdG9tTnVtYmVyLCBIZWFwQ2VsbCogY2VsbCwgSGVh
cENlbGw6OktpbmQga2luZCkgLT4gSXRlcmF0aW9uU3RhdHVzIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGJpdHMtPmdldChhdG9tTnVtYmVyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
Rm9yRWFjaFJlc3VsdCByZXN1bHQgPSBmdW5jKGNlbGwsIGtpbmQpOworICAgICAgICAgICAgICAg
ICAgICAgICAgc3dpdGNoIChyZXN1bHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
Rm9yRWFjaFJlc3VsdDo6Q29udGludWU6CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEZv
ckVhY2hSZXN1bHQ6OkJyZWFrOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhZEJpdHMg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSBGb3JFYWNoUmVzdWx0OjpSZW1vdmVBbmRDb250aW51ZToKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgRm9yRWFjaFJlc3VsdDo6UmVtb3ZlQW5kQnJlYWs6Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0cy0+Y2xlYXIoYXRvbU51bWJlcik7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlc3VsdCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSBGb3JFYWNoUmVzdWx0OjpDb250aW51ZToKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgRm9yRWFjaFJlc3VsdDo6UmVtb3ZlQW5kQ29udGludWU6CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNl
IEZvckVhY2hSZXN1bHQ6OkJyZWFrOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBGb3JF
YWNoUmVzdWx0OjpSZW1vdmVBbmRCcmVhazoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpEb25lOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJdGVyYXRp
b25TdGF0dXM6OkNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaWYg
KCFoYWRCaXRzKSB7CisgICAgICAgICAgICAgICAgbV9iaXRzW2Jsb2NrSW5kZXhdID0gbnVsbHB0
cjsKKyAgICAgICAgICAgICAgICBtX2Jsb2Nrc1dpdGhCaXRzW2Jsb2NrSW5kZXhdID0gZmFsc2U7
CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmNwcAkocmV2aXNp
b24gMjI1NzI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02Nyw1ICs2NywyOSBAQCB2b2lkKiBJc29TdWJzcGFjZTo6YWxs
b2NhdGVOb25WaXJ0dWFsKHNpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAordm9pZCBJc29TdWJz
cGFjZTo6ZGlkUmVzaXplQml0cyhzaXplX3QgYmxvY2tJbmRleCkKK3sKKyAgICBtX2NlbGxTZXRz
LmZvckVhY2goCisgICAgICAgIFsmXSAoSXNvQ2VsbFNldCogc2V0KSB7CisgICAgICAgICAgICBz
ZXQtPmRpZFJlc2l6ZUJpdHMoYmxvY2tJbmRleCk7CisgICAgICAgIH0pOworfQorCit2b2lkIElz
b1N1YnNwYWNlOjpkaWRSZW1vdmVCbG9jayhzaXplX3QgYmxvY2tJbmRleCkKK3sKKyAgICBtX2Nl
bGxTZXRzLmZvckVhY2goCisgICAgICAgIFsmXSAoSXNvQ2VsbFNldCogc2V0KSB7CisgICAgICAg
ICAgICBzZXQtPmRpZFJlbW92ZUJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICB9KTsKK30KKwor
dm9pZCBJc29TdWJzcGFjZTo6ZGlkQmVnaW5Td2VlcGluZ1RvRnJlZUxpc3QoTWFya2VkQmxvY2s6
OkhhbmRsZSogYmxvY2spCit7CisgICAgbV9jZWxsU2V0cy5mb3JFYWNoKAorICAgICAgICBbJl0g
KElzb0NlbGxTZXQqIHNldCkgeworICAgICAgICAgICAgc2V0LT5zd2VlcFRvRnJlZUxpc3QoYmxv
Y2spOworICAgICAgICB9KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuaAkocmV2aXNpb24gMjI1NzI1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMjcsMTAgKzI3LDEyIEBACiAKICNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3IuaCIKICNpbmNs
dWRlICJTdWJzcGFjZS5oIgorI2luY2x1ZGUgPHd0Zi9TaW5nbHlMaW5rZWRMaXN0V2l0aFRhaWwu
aD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I7
CitjbGFzcyBJc29DZWxsU2V0OwogCiBjbGFzcyBJc29TdWJzcGFjZSA6IHB1YmxpYyBTdWJzcGFj
ZSB7CiBwdWJsaWM6CkBAIC00Niw5ICs0OCwxNiBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCogYWxsb2NhdGVOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29u
dGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUp
OwogCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBJc29DZWxsU2V0OworICAgIAorICAgIHZv
aWQgZGlkUmVzaXplQml0cyhzaXplX3QgbmV3U2l6ZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRS
ZW1vdmVCbG9jayhzaXplX3QgYmxvY2tJbmRleCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRCZWdp
blN3ZWVwaW5nVG9GcmVlTGlzdChNYXJrZWRCbG9jazo6SGFuZGxlKikgb3ZlcnJpZGU7CisgICAg
CiAgICAgc2l6ZV90IG1fc2l6ZTsKICAgICBNYXJrZWRBbGxvY2F0b3IgbV9hbGxvY2F0b3I7CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I+IG1faXNvQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvcjsKKyAgICBTZW50aW5lbExpbmtlZExpc3Q8SXNvQ2VsbFNldCwgQmFz
aWNSYXdTZW50aW5lbE5vZGU8SXNvQ2VsbFNldD4+IG1fY2VsbFNldHM7CiB9OwogCiBpbmxpbmUg
TWFya2VkQWxsb2NhdG9yKiBJc29TdWJzcGFjZTo6YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXpl
X3Qgc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjI1NzI1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYxLDYgKzI2MSw3IEBAIHZvaWQgTWFya2VkQWxsb2NhdG9yOjphZGRCbG9jayhNYXJrZWRC
bG8KICAgICAgICAgICAgIEFTU0VSVChtX2Jsb2Nrcy5jYXBhY2l0eSgpID4gb2xkQ2FwYWNpdHkp
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2JpdHZlY3Rv
ckxvY2spOworICAgICAgICAgICAgc3Vic3BhY2UoKS0+ZGlkUmVzaXplQml0cyhtX2Jsb2Nrcy5j
YXBhY2l0eSgpKTsKICAgICAgICAgICAgIGZvckVhY2hCaXRWZWN0b3IoCiAgICAgICAgICAgICAg
ICAgbG9ja2VyLAogICAgICAgICAgICAgICAgIFsmXSAoRmFzdEJpdFZlY3RvciYgdmVjdG9yKSB7
CkBAIC0yOTAsNyArMjkxLDkgQEAgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OnJlbW92ZUJsb2NrKE1h
cmtlZAogewogICAgIEFTU0VSVChibG9jay0+YWxsb2NhdG9yKCkgPT0gdGhpcyk7CiAgICAgQVNT
RVJUKG1fYmxvY2tzW2Jsb2NrLT5pbmRleCgpXSA9PSBibG9jayk7Ci0KKyAgICAKKyAgICBzdWJz
cGFjZSgpLT5kaWRSZW1vdmVCbG9jayhibG9jay0+aW5kZXgoKSk7CisgICAgCiAgICAgbV9ibG9j
a3NbYmxvY2stPmluZGV4KCldID0gbnVsbHB0cjsKICAgICBtX2ZyZWVCbG9ja0luZGljZXMuYXBw
ZW5kKGJsb2NrLT5pbmRleCgpKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCShyZXZpc2lvbiAyMjU3MjUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzgs
NiArMzgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgR0NEZWZlcnJhbENvbnRleHQ7CiBj
bGFzcyBIZWFwOworY2xhc3MgSXNvQ2VsbFNldDsKIGNsYXNzIE1hcmtlZFNwYWNlOwogY2xhc3Mg
TExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCkBAIC0xNjIsNiArMTYzLDcgQEAgcHVibGljOgogICAg
IHZvaWQgZHVtcEJpdHMoUHJpbnRTdHJlYW0mID0gV1RGOjpkYXRhRmlsZSgpKTsKICAgICAKIHBy
aXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIElzb0NlbGxTZXQ7CiAgICAgZnJpZW5kIGNsYXNzIE1h
cmtlZEJsb2NrOwogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlU2xv
d0Nhc2UoR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1v
ZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9ySW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFs
bG9jYXRvcklubGluZXMuaAkocmV2aXNpb24gMjI1NzI1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2
ICsyNyw3IEBACiAKICNpbmNsdWRlICJGcmVlTGlzdElubGluZXMuaCIKICNpbmNsdWRlICJNYXJr
ZWRBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJWTS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkocmV2aXNpb24g
MjI1NzI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMDEsMTEgKzMwMSw2IEBAIHNpemVfdCBNYXJrZWRCbG9jazo6bWFy
a0NvdW50KCkKICAgICByZXR1cm4gYXJlTWFya3NTdGFsZSgpID8gMCA6IG1fbWFya3MuY291bnQo
KTsKIH0KIAotYm9vbCBNYXJrZWRCbG9jazo6SGFuZGxlOjppc0VtcHR5KCkKLXsKLSAgICByZXR1
cm4gbV9hbGxvY2F0b3ItPmlzRW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzKTsKLX0KLQog
dm9pZCBNYXJrZWRCbG9jazo6Y2xlYXJIYXNBbnlNYXJrZWQoKQogewogICAgIG1fYmlhc2VkTWFy
a0NvdW50ID0gbV9tYXJrQ291bnRCaWFzOwpAQCAtNDAyLDE2ICszOTcsMTQgQEAgdm9pZCBNYXJr
ZWRCbG9jazo6SGFuZGxlOjpzd2VlcChGcmVlTGlzdAogICAgIGlmIChzd2VlcE1vZGUgPT0gU3dl
ZXBPbmx5ICYmICFuZWVkc0Rlc3RydWN0aW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAo
VU5MSUtFTFkobV9pc0ZyZWVMaXN0ZWQpKSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHN3ZWVw
TW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAot
ICAgIEFTU0VSVCghbV9hbGxvY2F0b3ItPmlzQWxsb2NhdGVkKE5vTG9ja2luZ05lY2Vzc2FyeSwg
dGhpcykpOworICAgIFJFTEVBU0VfQVNTRVJUKCFtX2lzRnJlZUxpc3RlZCk7CisgICAgUkVMRUFT
RV9BU1NFUlQoIWlzQWxsb2NhdGVkKCkpOwogICAgIAogICAgIGlmIChzcGFjZSgpLT5pc01hcmtp
bmcoKSkKICAgICAgICAgYmxvY2soKS5tX2xvY2subG9jaygpOwogICAgIAorICAgIHN1YnNwYWNl
KCktPmRpZEJlZ2luU3dlZXBpbmdUb0ZyZWVMaXN0KHRoaXMpOworICAgIAogICAgIGlmIChuZWVk
c0Rlc3RydWN0aW9uKSB7CiAgICAgICAgIHN1YnNwYWNlKCktPmZpbmlzaFN3ZWVwKCp0aGlzLCBm
cmVlTGlzdCk7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gMjI1NzI1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTYyLDYgKzE2Miw4IEBA
IHB1YmxpYzoKICAgICAgICAgc2l6ZV90IG1hcmtDb3VudCgpOwogICAgICAgICBzaXplX3Qgc2l6
ZSgpOwogICAgICAgICAKKyAgICAgICAgYm9vbCBpc0FsbG9jYXRlZCgpOworICAgICAgICAKICAg
ICAgICAgYm9vbCBpc0xpdmUoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIEhlYXBWZXJzaW9u
IG5ld2x5QWxsb2NhdGVkVmVyc2lvbiwgYm9vbCBpc01hcmtpbmcsIGNvbnN0IEhlYXBDZWxsKik7
CiAgICAgICAgIGlubGluZSBib29sIGlzTGl2ZUNlbGwoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNp
b24sIEhlYXBWZXJzaW9uIG5ld2x5QWxsb2NhdGVkVmVyc2lvbiwgYm9vbCBpc01hcmtpbmcsIGNv
bnN0IHZvaWQqKTsKIApAQCAtMTczLDYgKzE3NSw3IEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCBp
c05ld2x5QWxsb2NhdGVkKGNvbnN0IHZvaWQqKTsKICAgICAgICAgdm9pZCBzZXROZXdseUFsbG9j
YXRlZChjb25zdCB2b2lkKik7CiAgICAgICAgIHZvaWQgY2xlYXJOZXdseUFsbG9jYXRlZChjb25z
dCB2b2lkKik7CisgICAgICAgIGNvbnN0IEJpdG1hcDxhdG9tc1BlckJsb2NrPiYgbmV3bHlBbGxv
Y2F0ZWQoKSBjb25zdDsKICAgICAgICAgCiAgICAgICAgIEhlYXBWZXJzaW9uIG5ld2x5QWxsb2Nh
dGVkVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fbmV3bHlBbGxvY2F0ZWRWZXJzaW9uOyB9CiAg
ICAgICAgIApAQCAtMjI3LDcgKzIzMCw3IEBAIHB1YmxpYzoKICAgICAgICAgc2l6ZV90IG1fYXRv
bXNQZXJDZWxsIHsgc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSB9OwogICAgICAg
ICBzaXplX3QgbV9lbmRBdG9tIHsgc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSB9
OyAvLyBUaGlzIGlzIGEgZnV6enkgZW5kLiBBbHdheXMgdGVzdCBmb3IgPCBtX2VuZEF0b20uCiAg
ICAgICAgICAgICAKLSAgICAgICAgV1RGOjpCaXRtYXA8YXRvbXNQZXJCbG9jaz4gbV9uZXdseUFs
bG9jYXRlZDsKKyAgICAgICAgQml0bWFwPGF0b21zUGVyQmxvY2s+IG1fbmV3bHlBbGxvY2F0ZWQ7
CiAgICAgICAgICAgICAKICAgICAgICAgQWxsb2NhdG9yQXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7
CiAgICAgICAgIGJvb2wgbV9pc0ZyZWVMaXN0ZWQgeyBmYWxzZSB9OwpAQCAtMjk0LDYgKzI5Nyw4
IEBAIHB1YmxpYzoKICAgICBib29sIGlzTWFya2VkUmF3KGNvbnN0IHZvaWQqIHApOwogICAgIEhl
YXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXJraW5nVmVyc2lv
bjsgfQogICAgIAorICAgIGNvbnN0IEJpdG1hcDxhdG9tc1BlckJsb2NrPiYgbWFya3MoKSBjb25z
dDsKKyAgICAKICAgICBDb3VudGluZ0xvY2smIGxvY2soKSB7IHJldHVybiBtX2xvY2s7IH0KIAog
cHJpdmF0ZToKQEAgLTM0Niw3ICszNTEsNyBAQCBwcml2YXRlOgogCiAgICAgSGVhcFZlcnNpb24g
bV9tYXJraW5nVmVyc2lvbjsKIAotICAgIFdURjo6Qml0bWFwPGF0b21zUGVyQmxvY2s+IG1fbWFy
a3M7CisgICAgQml0bWFwPGF0b21zUGVyQmxvY2s+IG1fbWFya3M7CiB9OwogCiBpbmxpbmUgTWFy
a2VkQmxvY2s6OkhhbmRsZSYgTWFya2VkQmxvY2s6OmhhbmRsZSgpCkBAIC01MzIsNiArNTM3LDEx
IEBAIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjp0ZXN0QW5kU2V0TWFya2UKICAgICByZXR1cm4g
bV9tYXJrcy5jb25jdXJyZW50VGVzdEFuZFNldChhdG9tTnVtYmVyKHApLCBkZXBlbmRlbmN5KTsK
IH0KIAoraW5saW5lIGNvbnN0IEJpdG1hcDxNYXJrZWRCbG9jazo6YXRvbXNQZXJCbG9jaz4mIE1h
cmtlZEJsb2NrOjptYXJrcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbWFya3M7Cit9CisKIGlu
bGluZSBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzTmV3bHlBbGxvY2F0ZWQoY29uc3Qgdm9p
ZCogcCkKIHsKICAgICByZXR1cm4gbV9uZXdseUFsbG9jYXRlZC5nZXQobV9ibG9jay0+YXRvbU51
bWJlcihwKSk7CkBAIC01NDcsNiArNTU3LDExIEBAIGlubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpI
YW5kbGU6OmNsZWFyTmUKICAgICBtX25ld2x5QWxsb2NhdGVkLmNsZWFyKG1fYmxvY2stPmF0b21O
dW1iZXIocCkpOwogfQogCitpbmxpbmUgY29uc3QgQml0bWFwPE1hcmtlZEJsb2NrOjphdG9tc1Bl
ckJsb2NrPiYgTWFya2VkQmxvY2s6OkhhbmRsZTo6bmV3bHlBbGxvY2F0ZWQoKSBjb25zdAorewor
ICAgIHJldHVybiBtX25ld2x5QWxsb2NhdGVkOworfQorCiBpbmxpbmUgYm9vbCBNYXJrZWRCbG9j
azo6aXNBdG9tKGNvbnN0IHZvaWQqIHApCiB7CiAgICAgQVNTRVJUKE1hcmtlZEJsb2NrOjppc0F0
b21BbGlnbmVkKHApKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJs
b2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZEJsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAyMjU3MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtOTEsNiAr
OTEsMTEgQEAgaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6Om1hcmtzQ29udmV5TGl2ZQogICAgICAg
ICB8fCBNYXJrZWRTcGFjZTo6bmV4dFZlcnNpb24obXlNYXJraW5nVmVyc2lvbikgPT0gbWFya2lu
Z1ZlcnNpb247CiB9CiAKK2lubGluZSBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzQWxsb2Nh
dGVkKCkKK3sKKyAgICByZXR1cm4gbV9hbGxvY2F0b3ItPmlzQWxsb2NhdGVkKE5vTG9ja2luZ05l
Y2Vzc2FyeSwgdGhpcyk7Cit9CisKIEFMV0FZU19JTkxJTkUgYm9vbCBNYXJrZWRCbG9jazo6SGFu
ZGxlOjppc0xpdmUoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIEhlYXBWZXJzaW9uIG5ld2x5
QWxsb2NhdGVkVmVyc2lvbiwgYm9vbCBpc01hcmtpbmcsIGNvbnN0IEhlYXBDZWxsKiBjZWxsKQog
ewogICAgIGlmIChhbGxvY2F0b3IoKS0+aXNBbGxvY2F0ZWQoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0
aGlzKSkKQEAgLTQzNCw2ICs0MzksMTEgQEAgaW5saW5lIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3
ZWVwRGVzdHJ1YwogICAgIHJldHVybiBCbG9ja0hhc05vRGVzdHJ1Y3RvcnM7CiB9CiAKK2lubGlu
ZSBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzRW1wdHkoKQoreworICAgIHJldHVybiBtX2Fs
bG9jYXRvci0+aXNFbXB0eShOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMpOworfQorCiBpbmxpbmUg
TWFya2VkQmxvY2s6OkhhbmRsZTo6RW1wdHlNb2RlIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmVtcHR5
TW9kZSgpCiB7CiAgICAgLy8gSXQncyBub3Qgb2J2aW91cywgYnV0IHRoaXMgaXMgdGhlIG9ubHkg
d2F5IHRvIGtub3cgaWYgdGhlIGJsb2NrIGlzIGVtcHR5LiBJdCdzIHRoZSBvbmx5CkBAIC00NDEs
NyArNDUxLDcgQEAgaW5saW5lIE1hcmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBNYQogICAg
IC8vIC0gSXQncyB0cnVlIHdoZW4gdGhlIGJsb2NrIGlzIGZyZXNobHkgYWxsb2NhdGVkLgogICAg
IC8vIC0gSXQncyB0cnVlIGlmIHRoZSBibG9jayBoYWQgYmVlbiBzd2VwdCBpbiB0aGUgcGFzdCwg
YWxsIGRlc3RydWN0b3JzIHdlcmUgY2FsbGVkLCBhbmQgdGhhdAogICAgIC8vICAgc3dlZXAgcHJv
dmVkIHRoYXQgdGhlIGJsb2NrIGlzIGVtcHR5LgotICAgIHJldHVybiBtX2FsbG9jYXRvci0+aXNF
bXB0eShOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMpID8gSXNFbXB0eSA6IE5vdEVtcHR5OworICAg
IHJldHVybiBpc0VtcHR5KCkgPyBJc0VtcHR5IDogTm90RW1wdHk7CiB9CiAKIGlubGluZSBNYXJr
ZWRCbG9jazo6SGFuZGxlOjpTY3JpYmJsZU1vZGUgTWFya2VkQmxvY2s6OkhhbmRsZTo6c2NyaWJi
bGVNb2RlKCkKQEAgLTUxMiwxMSArNTIyLDEyIEBAIGlubGluZSBJdGVyYXRpb25TdGF0dXMgTWFy
a2VkQmxvY2s6OkhhbmQKICAgICBpZiAoYXJlTWFya3NTdGFsZSkKICAgICAgICAgcmV0dXJuIEl0
ZXJhdGlvblN0YXR1czo6Q29udGludWU7CiAgICAgZm9yIChzaXplX3QgaSA9IGZpcnN0QXRvbSgp
OyBpIDwgbV9lbmRBdG9tOyBpICs9IG1fYXRvbXNQZXJDZWxsKSB7Ci0gICAgICAgIEhlYXBDZWxs
KiBjZWxsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8SGVhcENlbGwqPigmbV9ibG9jay0+YXRvbXMo
KVtpXSk7Ci0gICAgICAgIGlmICghYmxvY2suaXNNYXJrZWRSYXcoY2VsbCkpCisgICAgICAgIGlm
ICghYmxvY2subV9tYXJrcy5nZXQoaSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAg
ICBpZiAoZnVuY3RvcihjZWxsLCBraW5kKSA9PSBJdGVyYXRpb25TdGF0dXM6OkRvbmUpCisgICAg
ICAgIEhlYXBDZWxsKiBjZWxsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8SGVhcENlbGwqPigmbV9i
bG9jay0+YXRvbXMoKVtpXSk7CisKKyAgICAgICAgaWYgKGZ1bmN0b3IoaSwgY2VsbCwga2luZCkg
PT0gSXRlcmF0aW9uU3RhdHVzOjpEb25lKQogICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0
YXR1czo6RG9uZTsKICAgICB9CiAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuY3BwCShyZXZpc2lvbiAy
MjU3MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEyNiw1ICsxMjYsMTcgQEAgUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQmxv
Y2s6OkhhbmRsZSooKQogICAgICAgICB9KTsKIH0KIAordm9pZCBTdWJzcGFjZTo6ZGlkUmVzaXpl
Qml0cyhzaXplX3QpCit7Cit9CisKK3ZvaWQgU3Vic3BhY2U6OmRpZFJlbW92ZUJsb2NrKHNpemVf
dCkKK3sKK30KKwordm9pZCBTdWJzcGFjZTo6ZGlkQmVnaW5Td2VlcGluZ1RvRnJlZUxpc3QoTWFy
a2VkQmxvY2s6OkhhbmRsZSopCit7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHJldmlzaW9uIDIyNTcyNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTkz
LDYgKzkzLDEwIEBAIHB1YmxpYzoKICAgICAKICAgICBTdWJzcGFjZSogbmV4dFN1YnNwYWNlSW5B
bGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9uZXh0U3Vic3BhY2VJbkFs
aWduZWRNZW1vcnlBbGxvY2F0b3I7IH0KICAgICB2b2lkIHNldE5leHRTdWJzcGFjZUluQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvcihTdWJzcGFjZSogc3Vic3BhY2UpIHsgbV9uZXh0U3Vic3BhY2VJbkFs
aWduZWRNZW1vcnlBbGxvY2F0b3IgPSBzdWJzcGFjZTsgfQorICAgIAorICAgIHZpcnR1YWwgdm9p
ZCBkaWRSZXNpemVCaXRzKHNpemVfdCBuZXdTaXplKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVt
b3ZlQmxvY2soc2l6ZV90IGJsb2NrSW5kZXgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRCZWdpblN3
ZWVwaW5nVG9GcmVlTGlzdChNYXJrZWRCbG9jazo6SGFuZGxlKik7CiAKIHByb3RlY3RlZDoKICAg
ICB2b2lkIGluaXRpYWxpemUoSGVhcENlbGxUeXBlKiwgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciop
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgJ
KHJldmlzaW9uIDIyNTcyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNl
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3IEBAIHZvaWQgU3Vic3BhY2U6
OmZvckVhY2hNYXJrZWRDZWxsKGNvbnN0IEYKICAgICBmb3JFYWNoTm90RW1wdHlNYXJrZWRCbG9j
aygKICAgICAgICAgWyZdIChNYXJrZWRCbG9jazo6SGFuZGxlKiBoYW5kbGUpIHsKICAgICAgICAg
ICAgIGhhbmRsZS0+Zm9yRWFjaE1hcmtlZENlbGwoCi0gICAgICAgICAgICAgICAgWyZdIChIZWFw
Q2VsbCogY2VsbCwgSGVhcENlbGw6OktpbmQga2luZCkgLT4gSXRlcmF0aW9uU3RhdHVzIHsgCisg
ICAgICAgICAgICAgICAgWyZdIChzaXplX3QsIEhlYXBDZWxsKiBjZWxsLCBIZWFwQ2VsbDo6S2lu
ZCBraW5kKSAtPiBJdGVyYXRpb25TdGF0dXMgewogICAgICAgICAgICAgICAgICAgICBmdW5jKGNl
bGwsIGtpbmQpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpD
b250aW51ZTsKICAgICAgICAgICAgICAgICB9KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0luZmVycmVkU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFN0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDIyNTcy
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkU3RydWN0dXJlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjcsNjQgKzI3LDE3IEBACiAjaW5jbHVkZSAiSW5mZXJyZWRT
dHJ1Y3R1cmUuaCIKIAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvSXNv
TWFsbG9jSW5saW5lcy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotY29uc3QgQ2xhc3NJbmZvIElu
ZmVycmVkU3RydWN0dXJlOjpzX2luZm8gPSB7ICJJbmZlcnJlZFN0cnVjdHVyZSIsIG51bGxwdHIs
IG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSW5mZXJyZWRTdHJ1Y3R1cmUp
IH07Ci0KLUluZmVycmVkU3RydWN0dXJlKiBJbmZlcnJlZFN0cnVjdHVyZTo6Y3JlYXRlKFZNJiB2
bSwgR0NEZWZlcnJhbENvbnRleHQmIGRlZmVycmFsQ29udGV4dCwgSW5mZXJyZWRUeXBlKiBwYXJl
bnQsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotewotICAgIEluZmVycmVkU3RydWN0dXJlKiByZXN1
bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxJbmZlcnJlZFN0cnVjdHVyZT4odm0uaGVh
cCwgJmRlZmVycmFsQ29udGV4dCkpIEluZmVycmVkU3RydWN0dXJlKHZtLCBwYXJlbnQsIHN0cnVj
dHVyZSk7Ci0gICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSwgc3RydWN0dXJlKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIEluZmVycmVkU3RydWN0dXJlOjpkZXN0cm95KEpTQ2Vs
bCogY2VsbCkKLXsKLSAgICBJbmZlcnJlZFN0cnVjdHVyZSogaW5mZXJyZWRTdHJ1Y3R1cmUgPSBz
dGF0aWNfY2FzdDxJbmZlcnJlZFN0cnVjdHVyZSo+KGNlbGwpOwotICAgIGluZmVycmVkU3RydWN0
dXJlLT5JbmZlcnJlZFN0cnVjdHVyZTo6fkluZmVycmVkU3RydWN0dXJlKCk7Ci19Ci0KLVN0cnVj
dHVyZSogSW5mZXJyZWRTdHJ1Y3R1cmU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQotewotICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENl
bGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci19Ci0KLXZvaWQgSW5mZXJyZWRTdHJ1
Y3R1cmU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
LXsKLSAgICBJbmZlcnJlZFN0cnVjdHVyZSogaW5mZXJyZWRTdHJ1Y3R1cmUgPSBqc0Nhc3Q8SW5m
ZXJyZWRTdHJ1Y3R1cmUqPihjZWxsKTsKLSAgICAKLSAgICB2aXNpdG9yLmFwcGVuZChpbmZlcnJl
ZFN0cnVjdHVyZS0+bV9wYXJlbnQpOwotfQotCi12b2lkIEluZmVycmVkU3RydWN0dXJlOjpmaW5h
bGl6ZVVuY29uZGl0aW9uYWxseShWTSYpCi17Ci0gICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkKG1f
cGFyZW50LmdldCgpKSk7Ci0gICAgCi0gICAgLy8gTW9ub3RvbmljaXR5IGVuc3VyZXMgdGhhdCB3
ZSBzaG91bGRuJ3Qgc2VlIGEgbmV3IHN0cnVjdHVyZSB0aGF0IGlzIGRpZmZlcmVudCBmcm9tIHVz
LCBidXQgd2UKLSAgICAvLyBjb3VsZCBoYXZlIGJlZW4gbnVsbGVkLiBXZSBvbmx5IHJlbHkgb24g
aXQgYmVpbmcgdGhlIG51bGwgY2FzZSBvbmx5IGluIGRlYnVnLgotICAgIGlmICh0aGlzID09IG1f
cGFyZW50LT5tX3N0cnVjdHVyZS5nZXQoKSkgewotICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2Vk
KG1fc3RydWN0dXJlLmdldCgpKSkKLSAgICAgICAgICAgIG1fcGFyZW50LT5yZW1vdmVTdHJ1Y3R1
cmUoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgQVNTRVJUKCFtX3BhcmVudC0+bV9zdHJ1Y3R1cmUp
OwotICAgIAotICAgIC8vIFdlJ2xsIGdldCBkZWxldGVkIG9uIHRoZSBuZXh0IEdDLiBUaGF0J3Mg
YSBsaXR0bGUgd2VpcmQsIGJ1dCBub3QgaGFybWZ1bCwgc2luY2UgaXQgb25seSBoYXBwZW5zCi0g
ICAgLy8gd2hlbiB0aGUgSW5mZXJyZWRUeXBlIHRoYXQgd2Ugd2VyZSBwYWlyZWQgdG8gd291bGQg
aGF2ZSBzdXJ2aXZlZC4gSXQganVzdCBtZWFucyBhIHRpbnkgbWlzc2VkCi0gICAgLy8gb3Bwb3J0
dW5pdHkgZm9yIGhlYXAgc2l6ZSByZWR1Y3Rpb24uCi19CitXVEZfTUFLRV9JU09fQUxMT0NBVEVE
X0lNUEwoSW5mZXJyZWRTdHJ1Y3R1cmUpOwogCiBJbmZlcnJlZFN0cnVjdHVyZTo6SW5mZXJyZWRT
dHJ1Y3R1cmUoVk0mIHZtLCBJbmZlcnJlZFR5cGUqIHBhcmVudCwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCi0gICAgOiBCYXNlKHZtLCB2bS5pbmZlcnJlZFN0cnVjdHVyZVN0cnVjdHVyZS5nZXQoKSkK
LSAgICAsIG1fcGFyZW50KHZtLCB0aGlzLCBwYXJlbnQpCi0gICAgLCBtX3N0cnVjdHVyZSh2bSwg
dGhpcywgc3RydWN0dXJlKQotewotfQotCi12b2lkIEluZmVycmVkU3RydWN0dXJlOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogcGFyZW50KHBhcmVu
dCkKKyAgICAsIHN0cnVjdHVyZSh2bSwgcGFyZW50LCBzdHJ1Y3R1cmUpCiB7Ci0gICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIHN0cnVjdHVyZS0+YWRkVHJhbnNpdGlvbldhdGNocG9p
bnQoJm1fd2F0Y2hwb2ludCk7CisgICAgc3RydWN0dXJlLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2lu
dCgmd2F0Y2hwb2ludCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFN0cnVjdHVyZS5oCShyZXZpc2lv
biAyMjU3MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFN0cnVj
dHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw1MSArMjYsMjMgQEAKICNwcmFnbWEgb25jZQog
CiAjaW5jbHVkZSAiSW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50LmgiCi0jaW5jbHVkZSAiSlND
ZWxsLmgiCi0jaW5jbHVkZSAiVk0uaCIKKyNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKKyNpbmNs
dWRlIDx3dGYvSXNvTWFsbG9jLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBJbmZlcnJl
ZFR5cGU7CitjbGFzcyBTdHJ1Y3R1cmU7CiAKLWNsYXNzIEluZmVycmVkU3RydWN0dXJlIGZpbmFs
IDogcHVibGljIEpTQ2VsbCB7CitjbGFzcyBJbmZlcnJlZFN0cnVjdHVyZSBmaW5hbCB7CisgICAg
V1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbmZlcnJlZFN0cnVjdHVyZSk7CiBwdWJsaWM6Ci0gICAg
dHlwZWRlZiBKU0NlbGwgQmFzZTsKLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlw
ZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiAmdm0uaW5mZXJyZWRTdHJ1Y3R1cmVTcGFjZTsKLSAgICB9Ci0gICAgCi0g
ICAgc3RhdGljIEluZmVycmVkU3RydWN0dXJlKiBjcmVhdGUoVk0mLCBHQ0RlZmVycmFsQ29udGV4
dCYsIEluZmVycmVkVHlwZSogcGFyZW50LCBTdHJ1Y3R1cmUqKTsKLSAgICAKLSAgICBzdGF0aWMg
Y29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKLSAgICBzdGF0aWMgdm9pZCBkZXN0
cm95KEpTQ2VsbCopOwotICAgIAotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IFN0cnVjdHVyZUlzSW1tb3J0YWwgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKLQotICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0Kiwg
SlNWYWx1ZSBwcm90b3R5cGUpOwotICAgIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICAKLSAgICBJ
bmZlcnJlZFR5cGUqIHBhcmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50LmdldCgpOyB9Ci0g
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZS5nZXQo
KTsgfQotICAgIAotICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mKTsKLQotcHJp
dmF0ZToKICAgICBJbmZlcnJlZFN0cnVjdHVyZShWTSYsIEluZmVycmVkVHlwZSogcGFyZW50LCBT
dHJ1Y3R1cmUqKTsKKworICAgIEluZmVycmVkVHlwZSogcGFyZW50OworICAgIFdyaXRlQmFycmll
cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZTsKICAgICAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
JiwgU3RydWN0dXJlKik7Ci0gICAgCi0gICAgV3JpdGVCYXJyaWVyPEluZmVycmVkVHlwZT4gbV9w
YXJlbnQ7Ci0gICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7Ci0gICAgCi0g
ICAgZnJpZW5kIGNsYXNzIEluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludDsKLSAgICBJbmZlcnJl
ZFN0cnVjdHVyZVdhdGNocG9pbnQgbV93YXRjaHBvaW50OworICAgIEluZmVycmVkU3RydWN0dXJl
V2F0Y2hwb2ludCB3YXRjaHBvaW50OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVk
U3RydWN0dXJlV2F0Y2hwb2ludC5jcHAJKHJldmlzaW9uIDIyNTcyNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDEyICszNCwxNCBAQCB2b2lkIEluZmVycmVkU3RydWN0dXJlV2F0Y2hw
b2ludDo6ZmlyZUluCiB7CiAgICAgSW5mZXJyZWRTdHJ1Y3R1cmUqIGluZmVycmVkU3RydWN0dXJl
ID0KICAgICAgICAgYml0d2lzZV9jYXN0PEluZmVycmVkU3RydWN0dXJlKj4oCi0gICAgICAgICAg
ICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpIC0gT0JKRUNUX09GRlNFVE9GKEluZmVycmVkU3Ry
dWN0dXJlLCBtX3dhdGNocG9pbnQpKTsKKyAgICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4o
dGhpcykgLSBPQkpFQ1RfT0ZGU0VUT0YoSW5mZXJyZWRTdHJ1Y3R1cmUsIHdhdGNocG9pbnQpKTsK
IAotICAgIGlmICghaW5mZXJyZWRTdHJ1Y3R1cmUtPmlzTGl2ZSgpKQorICAgIEluZmVycmVkVHlw
ZSogaW5mZXJyZWRUeXBlID0gaW5mZXJyZWRTdHJ1Y3R1cmUtPnBhcmVudDsKKyAgICAKKyAgICBp
ZiAoIWluZmVycmVkVHlwZS0+aXNMaXZlKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBp
bmZlcnJlZFN0cnVjdHVyZS0+bV9wYXJlbnQtPnJlbW92ZVN0cnVjdHVyZSgpOworICAgIGluZmVy
cmVkVHlwZS0+cmVtb3ZlU3RydWN0dXJlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuY3BwCShy
ZXZpc2lvbiAyMjU3MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJl
ZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCiAKLSNpbmNsdWRlICJHQ0RlZmVycmFs
Q29udGV4dElubGluZXMuaCIKKyNpbmNsdWRlICJJc29DZWxsU2V0SW5saW5lcy5oIgogI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC04Niw3ICs4Niw4IEBAIFN0
cnVjdHVyZSogSW5mZXJyZWRUeXBlOjpjcmVhdGVTdHJ1Y3R1cmUKIHZvaWQgSW5mZXJyZWRUeXBl
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgSW5mZXJyZWRUeXBlKiBpbmZlcnJlZFR5cGUgPSBqc0Nhc3Q8SW5mZXJyZWRUeXBlKj4oY2Vs
bCk7Ci0gICAgdmlzaXRvci5hcHBlbmQoaW5mZXJyZWRUeXBlLT5tX3N0cnVjdHVyZSk7CisgICAg
aWYgKGluZmVycmVkVHlwZS0+bV9zdHJ1Y3R1cmUpCisgICAgICAgIHZpc2l0b3Iudm0oKS5pbmZl
cnJlZFR5cGVzV2l0aEZpbmFsaXplcnMuYWRkKGluZmVycmVkVHlwZSk7CiB9CiAKIEluZmVycmVk
VHlwZTo6S2luZCBJbmZlcnJlZFR5cGU6OmtpbmRGb3JGbGFncyhQdXRCeUlkRmxhZ3MgZmxhZ3Mp
CkBAIC0zOTksNyArNDAwLDYgQEAgYm9vbCBJbmZlcnJlZFR5cGU6OndpbGxTdG9yZVZhbHVlU2xv
dyhWTQogICAgIERlc2NyaXB0b3IgbXlUeXBlOwogICAgIGJvb2wgcmVzdWx0OwogICAgIHsKLSAg
ICAgICAgR0NEZWZlcnJhbENvbnRleHQgZGVmZXJyYWxDb250ZXh0KHZtLmhlYXApOwogICAgICAg
ICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAgIG9sZFR5cGUgPSBk
ZXNjcmlwdG9yKGxvY2tlcik7CiAgICAgICAgIG15VHlwZSA9IERlc2NyaXB0b3I6OmZvclZhbHVl
KHZhbHVlKTsKQEAgLTQwOCw3ICs0MDgsNyBAQCBib29sIEluZmVycmVkVHlwZTo6d2lsbFN0b3Jl
VmFsdWVTbG93KFZNCiAgICAgICAgIAogICAgICAgICBBU1NFUlQob2xkVHlwZSAhPSBteVR5cGUp
OyAvLyBUaGUgdHlwZSBtdXN0IGhhdmUgY2hhbmdlZCBpZiB3ZSdyZSBvbiB0aGUgc2xvdyBwYXRo
LgogCi0gICAgICAgIGJvb2wgc2V0UmVzdWx0ID0gc2V0KGRlZmVycmFsQ29udGV4dCwgbG9ja2Vy
LCB2bSwgbXlUeXBlKTsKKyAgICAgICAgYm9vbCBzZXRSZXN1bHQgPSBzZXQobG9ja2VyLCB2bSwg
bXlUeXBlKTsKICAgICAgICAgcmVzdWx0ID0ga2luZChsb2NrZXIpICE9IFRvcDsKICAgICAgICAg
aWYgKCFzZXRSZXN1bHQpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNDIzLDEwICs0
MjMsOSBAQCB2b2lkIEluZmVycmVkVHlwZTo6bWFrZVRvcFNsb3coVk0mIHZtLCBQCiB7CiAgICAg
RGVzY3JpcHRvciBvbGRUeXBlOwogICAgIHsKLSAgICAgICAgR0NEZWZlcnJhbENvbnRleHQgZGVm
ZXJyYWxDb250ZXh0KHZtLmhlYXApOwogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2Vy
KG1fbG9jayk7CiAgICAgICAgIG9sZFR5cGUgPSBkZXNjcmlwdG9yKGxvY2tlcik7Ci0gICAgICAg
IGlmICghc2V0KGRlZmVycmFsQ29udGV4dCwgbG9ja2VyLCB2bSwgVG9wKSkKKyAgICAgICAgaWYg
KCFzZXQobG9ja2VyLCB2bSwgVG9wKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAg
LTQzNCwxNCArNDMzLDggQEAgdm9pZCBJbmZlcnJlZFR5cGU6Om1ha2VUb3BTbG93KFZNJiB2bSwg
UAogICAgIG1fd2F0Y2hwb2ludFNldC5maXJlQWxsKHZtLCBkZXRhaWwpOwogfQogCi1ib29sIElu
ZmVycmVkVHlwZTo6c2V0KEdDRGVmZXJyYWxDb250ZXh0JiBkZWZlcnJhbENvbnRleHQsIGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIERlc2NyaXB0b3IgbmV3RGVzY3Jp
cHRvcikKK2Jvb2wgSW5mZXJyZWRUeXBlOjpzZXQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBs
b2NrZXIsIFZNJiB2bSwgRGVzY3JpcHRvciBuZXdEZXNjcmlwdG9yKQogewotICAgIC8vIFdlIHdp
bGwgdHJpZ2dlciB3cml0ZSBiYXJyaWVycyB3aGlsZSBob2xkaW5nIG91ciBsb2NrLiBDdXJyZW50
bHksIHdyaXRlIGJhcnJpZXJzIGRvbid0IEdDLCBidXQgdGhhdAotICAgIC8vIGNvdWxkIGNoYW5n
ZS4gSWYgaXQgZG9lcywgd2UgZG9uJ3Qgd2FudCB0byBkZWFkbG9jay4gTm90ZSB0aGF0IHdlIGNv
dWxkIGhhdmUgdXNlZAotICAgIC8vIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBpbiB0aGUgY2Fs
bGVyLCBidXQgdGhlIGNhbGxlciBpcyBvbiBhIGZhc3QgcGF0aCBzbyBtYXliZSB0aGF0IHdvdWxk
bid0IGJlCi0gICAgLy8gYSBnb29kIGlkZWEuCi0gICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdD
KHZtLmhlYXApOwotICAgIAogICAgIC8vIEJlIGRlZmVuc2l2ZTogaWYgd2UncmUgbm90IHJlYWxs
eSBjaGFuZ2luZyB0aGUgdHlwZSwgdGhlbiB3ZSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nLgog
ICAgIGlmIChkZXNjcmlwdG9yKGxvY2tlcikgPT0gbmV3RGVzY3JpcHRvcikKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtNDY5LDE5ICs0NjIsMTMgQEAgYm9vbCBJbmZlcnJlZFR5cGU6OnNldChH
Q0RlZmVycmFsQ29udGV4dAogICAgICAgICBzaG91bGRGaXJlV2F0Y2hwb2ludFNldCA9IHRydWU7
CiAgICAgfQogCi0gICAgLy8gUmVtb3ZlIHRoZSBvbGQgSW5mZXJyZWRTdHJ1Y3R1cmUgb2JqZWN0
IGlmIHdlIG5vIGxvbmdlciBuZWVkIGl0LgogICAgIGlmICghbmV3RGVzY3JpcHRvci5zdHJ1Y3R1
cmUoKSkKLSAgICAgICAgbV9zdHJ1Y3R1cmUuY2xlYXIoKTsKLQotICAgIC8vIEFkZCBhIG5ldyBJ
bmZlcnJlZFN0cnVjdHVyZSBvYmplY3QgaWYgd2UgbmVlZCBvbmUgbm93LgotICAgIGlmIChuZXdE
ZXNjcmlwdG9yLnN0cnVjdHVyZSgpKSB7Ci0gICAgICAgIGlmIChtX3N0cnVjdHVyZSkgewotICAg
ICAgICAgICAgLy8gV2Ugc2hvdWxkIGFncmVlIG9uIHRoZSBzdHJ1Y3R1cmVzIGlmIHdlIGdldCBo
ZXJlLgotICAgICAgICAgICAgQVNTRVJUKG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkgPT0gbV9z
dHJ1Y3R1cmUtPnN0cnVjdHVyZSgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGF1
dG8qIHN0cnVjdHVyZSA9IEluZmVycmVkU3RydWN0dXJlOjpjcmVhdGUodm0sIGRlZmVycmFsQ29u
dGV4dCwgdGhpcywgbmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAgICAgICBtX3N0
cnVjdHVyZS5zZXQodm0sIHRoaXMsIHN0cnVjdHVyZSk7Ci0gICAgICAgIH0KKyAgICAgICAgbV9z
dHJ1Y3R1cmUgPSBudWxscHRyOworICAgIGVsc2UgeworICAgICAgICBpZiAobV9zdHJ1Y3R1cmUp
CisgICAgICAgICAgICBBU1NFUlQobmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSA9PSBtX3N0cnVj
dHVyZS0+c3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9zdHJ1
Y3R1cmUgPSBzdGQ6Om1ha2VfdW5pcXVlPEluZmVycmVkU3RydWN0dXJlPih2bSwgdGhpcywgbmV3
RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSk7CiAgICAgfQogCiAgICAgLy8gRmluYWxseSwgc2V0IHRo
ZSBkZXNjcmlwdG9yIGtpbmQuCkBAIC01MDMsMTMgKzQ5MCwxMiBAQCB2b2lkIEluZmVycmVkVHlw
ZTo6cmVtb3ZlU3RydWN0dXJlKCkKICAgICBEZXNjcmlwdG9yIG9sZERlc2NyaXB0b3I7CiAgICAg
RGVzY3JpcHRvciBuZXdEZXNjcmlwdG9yOwogICAgIHsKLSAgICAgICAgR0NEZWZlcnJhbENvbnRl
eHQgZGVmZXJyYWxDb250ZXh0KHZtLmhlYXApOwogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIg
bG9ja2VyKG1fbG9jayk7CiAgICAgICAgIG9sZERlc2NyaXB0b3IgPSBkZXNjcmlwdG9yKGxvY2tl
cik7CiAgICAgICAgIG5ld0Rlc2NyaXB0b3IgPSBvbGREZXNjcmlwdG9yOwogICAgICAgICBuZXdE
ZXNjcmlwdG9yLnJlbW92ZVN0cnVjdHVyZSgpOwogICAgICAgICAKLSAgICAgICAgaWYgKCFzZXQo
ZGVmZXJyYWxDb250ZXh0LCBsb2NrZXIsIHZtLCBuZXdEZXNjcmlwdG9yKSkKKyAgICAgICAgaWYg
KCFzZXQobG9ja2VyLCB2bSwgbmV3RGVzY3JpcHRvcikpCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgfQogCkBAIC01MTcsNiArNTAzLDIwIEBAIHZvaWQgSW5mZXJyZWRUeXBlOjpyZW1vdmVTdHJ1
Y3R1cmUoKQogICAgIG1fd2F0Y2hwb2ludFNldC5maXJlQWxsKHZtLCBkZXRhaWwpOwogfQogCitJ
c29DZWxsU2V0OjpGb3JFYWNoUmVzdWx0IEluZmVycmVkVHlwZTo6ZmluYWxpemVVbmNvbmRpdGlv
bmFsbHkoVk0mKQoreworICAgIEFTU0VSVChIZWFwOjppc01hcmtlZCh0aGlzKSk7CisgICAgCisg
ICAgaWYgKG1fc3RydWN0dXJlKSB7CisgICAgICAgIGlmIChIZWFwOjppc01hcmtlZChtX3N0cnVj
dHVyZS0+c3RydWN0dXJlLmdldCgpKSkKKyAgICAgICAgICAgIHJldHVybiBJc29DZWxsU2V0OjpG
b3JFYWNoUmVzdWx0OjpDb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIHJlbW92ZVN0cnVjdHVy
ZSgpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gSXNvQ2VsbFNldDo6Rm9yRWFjaFJlc3VsdDo6
UmVtb3ZlQW5kQ29udGludWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiBuYW1lc3BhY2Ug
V1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlw
ZS5oCShyZXZpc2lvbiAyMjU3MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bmZlcnJlZFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVk
ZSAiQ29uY3VycmVudEpTTG9jay5oIgogI2luY2x1ZGUgIkluZmVycmVkU3RydWN0dXJlLmgiCisj
aW5jbHVkZSAiSXNvQ2VsbFNldC5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIlBy
b3BlcnR5TmFtZS5oIgogI2luY2x1ZGUgIlB1dEJ5SWRGbGFncy5oIgpAQCAtMTg1LDcgKzE4Niw3
IEBAIHB1YmxpYzoKIAogICAgIERlc2NyaXB0b3IgZGVzY3JpcHRvck1haW5UaHJlYWQoKSBjb25z
dAogICAgIHsKLSAgICAgICAgcmV0dXJuIERlc2NyaXB0b3IobV9raW5kLCBtX3N0cnVjdHVyZSA/
IG1fc3RydWN0dXJlLT5zdHJ1Y3R1cmUoKSA6IG51bGxwdHIpOworICAgICAgICByZXR1cm4gRGVz
Y3JpcHRvcihtX2tpbmQsIG1fc3RydWN0dXJlID8gbV9zdHJ1Y3R1cmUtPnN0cnVjdHVyZS5nZXQo
KSA6IG51bGxwdHIpOwogICAgIH0KICAgICAKICAgICBEZXNjcmlwdG9yIGRlc2NyaXB0b3IoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikgY29uc3QKQEAgLTIzMCw3ICsyMzEsNyBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKLSAgICB2b2lkIGZp
bmFsaXplVW5jb25kaXRpb25hbGx5KCk7CisgICAgSXNvQ2VsbFNldDo6Rm9yRWFjaFJlc3VsdCBm
aW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYpOwogCiBwcml2YXRlOgogICAgIEluZmVycmVkVHlw
ZShWTSYpOwpAQCAtMjQxLDcgKzI0Miw3IEBAIHByaXZhdGU6CiAKICAgICAvLyBIZWxwZXIgZm9y
IHdpbGxTdG9yZVZhbHVlU2xvdygpIGFuZCBtYWtlVG9wU2xvdygpLiBUaGlzIHJldHVybnMgdHJ1
ZSBpZiB3ZSBzaG91bGQgZmlyZSB0aGUKICAgICAvLyB3YXRjaHBvaW50IHNldC4KLSAgICBib29s
IHNldChHQ0RlZmVycmFsQ29udGV4dCYsIGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZNJiwg
RGVzY3JpcHRvcik7CisgICAgYm9vbCBzZXQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVk0m
LCBEZXNjcmlwdG9yKTsKICAgICAKICAgICB2b2lkIHJlbW92ZVN0cnVjdHVyZSgpOwogICAgIApA
QCAtMjUyLDcgKzI1Myw4IEBAIHByaXZhdGU6CiAgICAgCiAgICAgS2luZCBtX2tpbmQgeyBCb3R0
b20gfTsKIAotICAgIFdyaXRlQmFycmllcjxJbmZlcnJlZFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7
CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIFBvaXNvbmVkLgorICAgIHN0ZDo6dW5pcXVl
X3B0cjxJbmZlcnJlZFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7CiAKICAgICAvLyBOT1RFOiBJZiB0
aGlzIGlzIGJlaW5nIHdhdGNoZWQsIHdlIHRyYW5zZm9ybSB0byBUb3AgYmVjYXVzZSB0aGF0IGlt
cGxpZXMgdGhhdCBpdCB3b3VsZG4ndCBiZQogICAgIC8vIHByb2ZpdGFibGUgdG8gd2F0Y2ggaXQg
YWdhaW4uIEFsc28sIHRoaXMgc2V0IGlzIGluaXRpYWxpemVkIGNsZWFyLCBhbmQgaXMgbmV2ZXIg
ZXhwb3NlZCB0byB0aGUgREZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3Bw
CShyZXZpc2lvbiAyMjU3MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNSwxMSArMjA1LDExIEBAIFZNOjpWTShWTVR5cGUgdm1U
eXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIGRpcmVjdEV2YWxFeGVjdXRhYmxlU3BhY2Ug
SVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZS5nZXQo
KSwgRGlyZWN0RXZhbEV4ZWN1dGFibGUpCiAgICAgLCBmdW5jdGlvbkV4ZWN1dGFibGVTcGFjZSBJ
U09fU1VCU1BBQ0VfSU5JVChoZWFwLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLmdldCgp
LCBGdW5jdGlvbkV4ZWN1dGFibGUpCiAgICAgLCBpbmRpcmVjdEV2YWxFeGVjdXRhYmxlU3BhY2Ug
SVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZS5nZXQo
KSwgSW5kaXJlY3RFdmFsRXhlY3V0YWJsZSkKLSAgICAsIGluZmVycmVkU3RydWN0dXJlU3BhY2Ug
SVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZS5nZXQo
KSwgSW5mZXJyZWRTdHJ1Y3R1cmUpCiAgICAgLCBpbmZlcnJlZFR5cGVTcGFjZSBJU09fU1VCU1BB
Q0VfSU5JVChoZWFwLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLmdldCgpLCBJbmZlcnJl
ZFR5cGUpCiAgICAgLCBtb2R1bGVQcm9ncmFtRXhlY3V0YWJsZVNwYWNlIElTT19TVUJTUEFDRV9J
TklUKGhlYXAsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIE1vZHVsZVByb2dy
YW1FeGVjdXRhYmxlKQogICAgICwgbmF0aXZlRXhlY3V0YWJsZVNwYWNlIElTT19TVUJTUEFDRV9J
TklUKGhlYXAsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIE5hdGl2ZUV4ZWN1
dGFibGUpCiAgICAgLCBwcm9ncmFtRXhlY3V0YWJsZVNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhl
YXAsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIFByb2dyYW1FeGVjdXRhYmxl
KQorICAgICwgaW5mZXJyZWRUeXBlc1dpdGhGaW5hbGl6ZXJzKGluZmVycmVkVHlwZVNwYWNlKQog
ICAgICwgdm1UeXBlKHZtVHlwZSkKICAgICAsIGNsaWVudERhdGEoMCkKICAgICAsIHRvcEVudHJ5
RnJhbWUobnVsbHB0cikKQEAgLTI5Miw3ICsyOTIsNiBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwg
SGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgdW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVy
ZS5zZXQoKnRoaXMsIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgq
dGhpcywgMCwganNOdWxsKCkpKTsKICAgICB1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2tT
dHJ1Y3R1cmUuc2V0KCp0aGlzLCBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s6OmNyZWF0
ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBwcm9wZXJ0eVRhYmxlU3RydWN0
dXJlLnNldCgqdGhpcywgUHJvcGVydHlUYWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBq
c051bGwoKSkpOwotICAgIGluZmVycmVkU3RydWN0dXJlU3RydWN0dXJlLnNldCgqdGhpcywgSW5m
ZXJyZWRTdHJ1Y3R1cmU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAg
ICBpbmZlcnJlZFR5cGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBJbmZlcnJlZFR5cGU6OmNyZWF0ZVN0
cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBpbmZlcnJlZFR5cGVUYWJsZVN0cnVj
dHVyZS5zZXQoKnRoaXMsIEluZmVycmVkVHlwZVRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMs
IDAsIGpzTnVsbCgpKSk7CiAgICAgaW5mZXJyZWRWYWx1ZVN0cnVjdHVyZS5zZXQoKnRoaXMsIElu
ZmVycmVkVmFsdWU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMjI1NzI1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAs
NyBAQAogI2luY2x1ZGUgIkZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oIgogI2luY2x1ZGUgIkhl
YXAuaCIKICNpbmNsdWRlICJJbnRyaW5zaWMuaCIKKyNpbmNsdWRlICJJc29DZWxsU2V0LmgiCiAj
aW5jbHVkZSAiSXNvU3Vic3BhY2UuaCIKICNpbmNsdWRlICJKSVRUaHVua3MuaCIKICNpbmNsdWRl
ICJKU0NKU1ZhbHVlLmgiCkBAIC0zNDAsMTEgKzM0MSwxMiBAQCBwdWJsaWM6CiAgICAgSXNvU3Vi
c3BhY2UgZGlyZWN0RXZhbEV4ZWN1dGFibGVTcGFjZTsKICAgICBJc29TdWJzcGFjZSBmdW5jdGlv
bkV4ZWN1dGFibGVTcGFjZTsKICAgICBJc29TdWJzcGFjZSBpbmRpcmVjdEV2YWxFeGVjdXRhYmxl
U3BhY2U7Ci0gICAgSXNvU3Vic3BhY2UgaW5mZXJyZWRTdHJ1Y3R1cmVTcGFjZTsKICAgICBJc29T
dWJzcGFjZSBpbmZlcnJlZFR5cGVTcGFjZTsKICAgICBJc29TdWJzcGFjZSBtb2R1bGVQcm9ncmFt
RXhlY3V0YWJsZVNwYWNlOwogICAgIElzb1N1YnNwYWNlIG5hdGl2ZUV4ZWN1dGFibGVTcGFjZTsK
ICAgICBJc29TdWJzcGFjZSBwcm9ncmFtRXhlY3V0YWJsZVNwYWNlOworICAgIAorICAgIElzb0Nl
bGxTZXQgaW5mZXJyZWRUeXBlc1dpdGhGaW5hbGl6ZXJzOwogCiAgICAgVk1UeXBlIHZtVHlwZTsK
ICAgICBDbGllbnREYXRhKiBjbGllbnREYXRhOwpAQCAtMzkyLDcgKzM5NCw2IEBAIHB1YmxpYzoK
ICAgICBTdHJvbmc8U3RydWN0dXJlPiB1bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJl
OwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9ja1N0
cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9wZXJ0eVRhYmxlU3RydWN0dXJlOwot
ICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGluZmVycmVkU3RydWN0dXJlU3RydWN0dXJlOwogICAgIFN0
cm9uZzxTdHJ1Y3R1cmU+IGluZmVycmVkVHlwZVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0
dXJlPiBpbmZlcnJlZFR5cGVUYWJsZVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBp
bmZlcnJlZFZhbHVlU3RydWN0dXJlOwpJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjU3MjUpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMzksNiArMjM5LDggQEAKIAkJ
MEZCMTRFMTgxODBGQTIxODAwOUI2QjREIC8qIEJhZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBCYWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCMTRFMUEx
ODEwRTFEQTAwOUI2QjREIC8qIEJhZ1RvSGFzaE1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCYWdUb0hh
c2hNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCMzE3QzMxQzQ4ODAwMTAw
N0UzOTVBIC8qIFN5c3RlbVRyYWNpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU3lzdGVtVHJhY2luZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI0Njc4
MjFGREUyODJCMDAzRkNCMDkgLyogQ29uY3VycmVudEJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDb25jdXJyZW50QnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGQjQ2NzgzMUZERTI4MkMwMDNGQ0IwOSAvKiBDb25jdXJyZW50VmVjdG9yLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbmN1cnJlbnRWZWN0b3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDNDQ4ODIxNkZFOUZFMTAwODQ0QkU5IC8qIFBy
b2Nlc3NJRC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm9jZXNzSUQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDNEVERTUxNjk2MTQ5NjAwRjY1MDQxIC8q
IENvbW1hUHJpbnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21tYVBy
aW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEODFBQzQxNTRGQjIyRTAw
OTgzRTcyIC8qIEZhc3RCaXRWZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRmFzdEJpdFZlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODA4LDgg
KzgxMCwxMCBAQAogCQkJCTBGOEYyQjkwMTcyRTAwRjAwMDdEQkRBNSAvKiBDb21waWxhdGlvblRo
cmVhZC5oICovLAogCQkJCUE4QTQ3MjcwMTUxQTgyNUEwMDQxMjNGRiAvKiBDb21waWxlci5oICov
LAogCQkJCTQ2QkE5RUFCMUY0Q0Q2MUUwMDlBMkJCQyAvKiBDb21wbGV0aW9uSGFuZGxlci5oICov
LAorCQkJCTBGQjQ2NzgyMUZERTI4MkIwMDNGQ0IwOSAvKiBDb25jdXJyZW50QnVmZmVyLmggKi8s
CiAJCQkJMEYzMENCNTgxRkNERjEzMzAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNw
cCAqLywKIAkJCQkwRjMwQ0I1OTFGQ0RGMTMzMDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hT
ZXQuaCAqLywKKwkJCQkwRkI0Njc4MzFGREUyODJDMDAzRkNCMDkgLyogQ29uY3VycmVudFZlY3Rv
ci5oICovLAogCQkJCTBGREI2OThEMUI3QzY0M0EwMDBDMTA3OCAvKiBDb25kaXRpb24uaCAqLywK
IAkJCQkwRkZCQ0JGQTFGRDM3RTBGMDA3MkFBRjAgLyogQ291bnRpbmdMb2NrLmggKi8sCiAJCQkJ
MEY4RTg1REExRkQ0ODVCMDAwNjkxODg5IC8qIENvdW50aW5nTG9jay5jcHAgKi8sCkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9Db25jdXJyZW50QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvQ29uY3VycmVudEJ1ZmZlci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3Rm
L0NvbmN1cnJlbnRCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwOCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4K
KyNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+Cisj
aW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitu
YW1lc3BhY2UgV1RGIHsKKworLy8gQ29uY3VycmVudEJ1ZmZlciBpcyBzdWl0YWJsZSBmb3Igd2hl
biB5b3UgcGxhbiB0byBzdG9yZSBpbW11dGFibGUgZGF0YSBhbmQgc29tZXRpbWVzIGFwcGVuZCB0
byBpdC4KKy8vIEl0IHN1cHBvcnRzIHN0b3JpbmcgZGF0YSB0aGF0IGlzIG5vdCBjb3B5LWNvbnN0
cnVjdGFibGUgYnV0IGJpdC1jb3B5YWJsZS4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBD
b25jdXJyZW50QnVmZmVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb25jdXJyZW50QnVm
ZmVyKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICAKKyAgICBD
b25jdXJyZW50QnVmZmVyKCkKKyAgICB7CisgICAgfQorICAgIAorICAgIH5Db25jdXJyZW50QnVm
ZmVyKCkKKyAgICB7CisgICAgICAgIGlmIChBcnJheSogYXJyYXkgPSBtX2FycmF5KSB7CisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJyYXktPnNpemU7ICsraSkKKyAgICAg
ICAgICAgICAgICBhcnJheS0+ZGF0YVtpXS5+VCgpOworICAgICAgICB9CisgICAgICAgIGZvciAo
QXJyYXkqIGFycmF5IDogbV9hbGxBcnJheXMpCisgICAgICAgICAgICBmYXN0RnJlZShhcnJheSk7
CisgICAgfQorCisgICAgLy8gR3Jvd2luZyBpcyBub3QgY29uY3VycmVudC4gVGhpcyBhc3N1bWVz
IHlvdSBhcmUgaG9sZGluZyBzb21lIG90aGVyIGxvY2sgYmVmb3JlIHlvdSBkbyB0aGlzLgorICAg
IHZvaWQgZ3Jvd0V4YWN0KHNpemVfdCBuZXdTaXplKQorICAgIHsKKyAgICAgICAgQXJyYXkqIGFy
cmF5ID0gbV9hcnJheTsKKyAgICAgICAgaWYgKGFycmF5ICYmIG5ld1NpemUgPD0gYXJyYXktPnNp
emUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEFycmF5KiBuZXdBcnJheSA9IGNyZWF0
ZUFycmF5KG5ld1NpemUpOworICAgICAgICAvLyBUaGlzIGFsbG93cyB1cyB0byBkbyBDb25jdXJy
ZW50QnVmZmVyPHN0ZDo6dW5pcXVlX3B0cjw+Pi4KKyAgICAgICAgaWYgKGFycmF5KQorICAgICAg
ICAgICAgbWVtY3B5KG5ld0FycmF5LT5kYXRhLCBhcnJheS0+ZGF0YSwgc2l6ZW9mKFQpICogYXJy
YXktPnNpemUpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBhcnJheSA/IGFycmF5LT5zaXpl
IDogMDsgaSA8IG5ld1NpemU7ICsraSkKKyAgICAgICAgICAgIG5ldyAobmV3QXJyYXktPmRhdGEg
KyBpKSBUKCk7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgIG1fYXJy
YXkgPSBuZXdBcnJheTsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAg
bV9hbGxBcnJheXMuYXBwZW5kKG5ld0FycmF5KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBncm93
KHNpemVfdCBuZXdTaXplKQorICAgIHsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBtX2FycmF5ID8g
bV9hcnJheS0+c2l6ZSA6IDA7CisgICAgICAgIGlmIChuZXdTaXplIDw9IHNpemUpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGdyb3dFeGFjdChzdGQ6Om1heChuZXdTaXplLCBzaXplICog
MikpOworICAgIH0KKyAgICAKKyAgICBzdHJ1Y3QgQXJyYXkgeworICAgICAgICB1bnNpZ25lZCBz
aXplOyAvLyBUaGlzIGlzIGFuIGltbXV0YWJsZSBzaXplLgorICAgICAgICBUIGRhdGFbMV07Cisg
ICAgfTsKKyAgICAKKyAgICBBcnJheSogYXJyYXkoKSBjb25zdCB7IHJldHVybiBtX2FycmF5OyB9
CisgICAgCisgICAgVCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fYXJyYXkt
PmRhdGFbaW5kZXhdOyB9CisgICAgY29uc3QgVCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNv
bnN0IHsgcmV0dXJuIG1fYXJyYXktPmRhdGFbaW5kZXhdOyB9CisgICAgCitwcml2YXRlOgorICAg
IEFycmF5KiBjcmVhdGVBcnJheSh1bnNpZ25lZCBzaXplKQorICAgIHsKKyAgICAgICAgQXJyYXkq
IHJlc3VsdCA9IHN0YXRpY19jYXN0PEFycmF5Kj4oZmFzdE1hbGxvYyhPQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXksIGRhdGEpICsgc2l6ZW9mKFQpICogc2l6ZSkpOworICAgICAgICByZXN1bHQtPnNpemUg
PSBzaXplOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBBcnJheSog
bV9hcnJheSB7IG51bGxwdHIgfTsKKyAgICBWZWN0b3I8QXJyYXkqPiBtX2FsbEFycmF5czsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Db25jdXJyZW50
VmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ29uY3VycmVudFZlY3Rvci5o
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRWZWN0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDI1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9m
CisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENvbmN1cnJlbnRWZWN0b3JfaAorI2RlZmluZSBD
b25jdXJyZW50VmVjdG9yX2gKKworI2luY2x1ZGUgPHd0Zi9Db25jdXJyZW50QnVmZmVyLmg+Cisj
aW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBBbiBp
dGVyYXRvciBmb3IgQ29uY3VycmVudFZlY3Rvci4gSXQgc3VwcG9ydHMgb25seSB0aGUgcHJlICsr
IG9wZXJhdG9yCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc2l6ZV90IFNlZ21lbnRTaXplID0gOD4g
Y2xhc3MgQ29uY3VycmVudFZlY3RvcjsKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXplX3QgU2Vn
bWVudFNpemUgPSA4PiBjbGFzcyBDb25jdXJyZW50VmVjdG9ySXRlcmF0b3IgeworcHJpdmF0ZToK
KyAgICBmcmllbmQgY2xhc3MgQ29uY3VycmVudFZlY3RvcjxULCBTZWdtZW50U2l6ZT47CitwdWJs
aWM6CisgICAgdHlwZWRlZiBDb25jdXJyZW50VmVjdG9ySXRlcmF0b3I8VCwgU2VnbWVudFNpemU+
IEl0ZXJhdG9yOworCisgICAgfkNvbmN1cnJlbnRWZWN0b3JJdGVyYXRvcigpIHsgfQorCisgICAg
VCYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3IuYXQobV9pbmRleCk7IH0KKyAg
ICBUKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJm1fdmVjdG9yLmF0KG1faW5kZXgpOyB9
CisKKyAgICAvLyBPbmx5IHByZWZpeCArKyBvcGVyYXRvciBzdXBwb3J0ZWQKKyAgICBJdGVyYXRv
ciYgb3BlcmF0b3IrKygpCisgICAgeworICAgICAgICBtX2luZGV4Kys7CisgICAgICAgIHJldHVy
biAqdGhpczsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSXRlcmF0b3ImIG90
aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRl
eCAmJiAmbV92ZWN0b3IgPT0gJm90aGVyLm1fdmVjdG9yOworICAgIH0KKworICAgIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBJdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9pbmRleCAhPSBvdGhlci5tX2luZGV4IHx8ICZtX3ZlY3RvciAhPSAmb3RoZXIubV92ZWN0
b3I7CisgICAgfQorCisgICAgQ29uY3VycmVudFZlY3Rvckl0ZXJhdG9yJiBvcGVyYXRvcj0oY29u
c3QgQ29uY3VycmVudFZlY3Rvckl0ZXJhdG9yPFQsIFNlZ21lbnRTaXplPiYgb3RoZXIpCisgICAg
eworICAgICAgICBtX3ZlY3RvciA9IG90aGVyLm1fdmVjdG9yOworICAgICAgICBtX2luZGV4ID0g
b3RoZXIubV9pbmRleDsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBDb25jdXJyZW50VmVjdG9ySXRlcmF0b3IoQ29uY3VycmVudFZlY3RvcjxULCBTZWdtZW50
U2l6ZT4mIHZlY3Rvciwgc2l6ZV90IGluZGV4KQorICAgICAgICA6IG1fdmVjdG9yKHZlY3RvcikK
KyAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgIHsKKyAgICB9CisKKyAgICBDb25jdXJyZW50
VmVjdG9yPFQsIFNlZ21lbnRTaXplPiYgbV92ZWN0b3I7CisgICAgc2l6ZV90IG1faW5kZXg7Cit9
OworCisvLyBDb25jdXJyZW50VmVjdG9yIGlzIGxpa2UgU2VnbWVudGVkVmVjdG9yLCBidXQgc3Vp
dGFibGUgZm9yIHNjZW5hcmlvcyB3aGVyZSBvbmUgdGhyZWFkIGFwcGVuZHMKKy8vIGVsZW1lbnRz
IGFuZCBhbm90aGVyIHRocmVhZCBjb250aW51ZXMgdG8gYWNjZXNzIGVsZW1lbnRzIGF0IGxvd2Vy
IGluZGljZXMuIE9ubHkgb25lIHRocmVhZCBjYW4KKy8vIGFwcGVuZCBhdCBhIHRpbWUsIHNvIHRo
YXQgYWN0aXZpdHkgc3RpbGwgbmVlZHMgbG9ja2luZy4KK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBz
aXplX3QgU2VnbWVudFNpemU+CitjbGFzcyBDb25jdXJyZW50VmVjdG9yIHsKKyAgICBmcmllbmQg
Y2xhc3MgQ29uY3VycmVudFZlY3Rvckl0ZXJhdG9yPFQsIFNlZ21lbnRTaXplPjsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShDb25jdXJyZW50VmVjdG9yKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKKworcHVibGljOgorICAgIHR5cGVkZWYgQ29uY3VycmVudFZlY3Rvckl0ZXJhdG9y
PFQsIFNlZ21lbnRTaXplPiBJdGVyYXRvcjsKKworICAgIENvbmN1cnJlbnRWZWN0b3IoKSA9IGRl
ZmF1bHQ7CisKKyAgICB+Q29uY3VycmVudFZlY3RvcigpCisgICAgeworICAgIH0KKworICAgIHNp
emVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3QgeyByZXR1cm4gIXNpemUoKTsgfQorCisgICAgVCYgYXQoc2l6ZV90IGluZGV4KQorICAg
IHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaW5kZXggPCBtX3Np
emUpOworICAgICAgICByZXR1cm4gc2VnbWVudEZvcihpbmRleCktPmVudHJpZXNbc3Vic2NyaXB0
Rm9yKGluZGV4KV07CisgICAgfQorCisgICAgY29uc3QgVCYgYXQoc2l6ZV90IGluZGV4KSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8Q29uY3VycmVudFZlY3RvcjxULCBT
ZWdtZW50U2l6ZT4qPih0aGlzKS0+YXQoaW5kZXgpOworICAgIH0KKworICAgIFQmIG9wZXJhdG9y
W10oc2l6ZV90IGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KGluZGV4KTsKKyAgICB9
CisKKyAgICBjb25zdCBUJiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhdChpbmRleCk7CisgICAgfQorCisgICAgVCYgZmlyc3QoKQorICAgIHsK
KyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIWlzRW1wdHkoKSk7Cisg
ICAgICAgIHJldHVybiBhdCgwKTsKKyAgICB9CisgICAgY29uc3QgVCYgZmlyc3QoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIWlzRW1wdHko
KSk7CisgICAgICAgIHJldHVybiBhdCgwKTsKKyAgICB9CisgICAgVCYgbGFzdCgpCisgICAgewor
ICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighaXNFbXB0eSgpKTsKKyAg
ICAgICAgcmV0dXJuIGF0KHNpemUoKSAtIDEpOworICAgIH0KKyAgICBjb25zdCBUJiBsYXN0KCkg
Y29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFp
c0VtcHR5KCkpOworICAgICAgICByZXR1cm4gYXQoc2l6ZSgpIC0gMSk7CisgICAgfQorCisgICAg
VCB0YWtlTGFzdCgpCisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNB
VElPTighaXNFbXB0eSgpKTsKKyAgICAgICAgVCByZXN1bHQgPSBXVEZNb3ZlKGxhc3QoKSk7Cisg
ICAgICAgIC0tbV9zaXplOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgdm9pZCBhcHBlbmQoQXJncyYmLi4uIGFyZ3Mp
CisgICAgeworICAgICAgICArK21fc2l6ZTsKKyAgICAgICAgaWYgKCFzZWdtZW50RXhpc3RzRm9y
KG1fc2l6ZSAtIDEpKQorICAgICAgICAgICAgYWxsb2NhdGVTZWdtZW50KCk7CisgICAgICAgIG5l
dyAoTm90TnVsbCwgJmxhc3QoKSkgVChzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOworICAg
IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgVCYgYWxsb2MoQXJncyYm
Li4uIGFyZ3MpCisgICAgeworICAgICAgICBhcHBlbmQoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3Mp
Li4uKTsKKyAgICAgICAgcmV0dXJuIGxhc3QoKTsKKyAgICB9CisKKyAgICB2b2lkIHJlbW92ZUxh
c3QoKQorICAgIHsKKyAgICAgICAgbGFzdCgpLn5UKCk7CisgICAgICAgIC0tbV9zaXplOworICAg
IH0KKworICAgIHZvaWQgZ3JvdyhzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIGlmIChzaXpl
ID09IG1fc2l6ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgQVNTRVJUKHNpemUgPiBt
X3NpemUpOworICAgICAgICBlbnN1cmVTZWdtZW50c0ZvcihzaXplKTsKKyAgICAgICAgc2l6ZV90
IG9sZFNpemUgPSBtX3NpemU7CisgICAgICAgIG1fc2l6ZSA9IHNpemU7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSBvbGRTaXplOyBpIDwgbV9zaXplOyArK2kpCisgICAgICAgICAgICBuZXcgKE5v
dE51bGwsICZhdChpKSkgVCgpOworICAgIH0KKworICAgIEl0ZXJhdG9yIGJlZ2luKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBJdGVyYXRvcigqdGhpcywgMCk7CisgICAgfQorCisgICAgSXRlcmF0
b3IgZW5kKCkKKyAgICB7CisgICAgICAgIHJldHVybiBJdGVyYXRvcigqdGhpcywgbV9zaXplKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RydWN0IFNlZ21lbnQgeworICAgICAgICBXVEZfTUFL
RV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAgICAgICAgICAKKyAgICAgICAgVCBlbnRyaWVz
W1NlZ21lbnRTaXplXTsKKyAgICB9OworCisgICAgYm9vbCBzZWdtZW50RXhpc3RzRm9yKHNpemVf
dCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBpbmRleCAvIFNlZ21lbnRTaXplIDwgbV9u
dW1TZWdtZW50czsKKyAgICB9CisKKyAgICBTZWdtZW50KiBzZWdtZW50Rm9yKHNpemVfdCBpbmRl
eCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3NlZ21lbnRzW2luZGV4IC8gU2VnbWVudFNpemVd
LmdldCgpOworICAgIH0KKworICAgIHNpemVfdCBzdWJzY3JpcHRGb3Ioc2l6ZV90IGluZGV4KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGluZGV4ICUgU2VnbWVudFNpemU7CisgICAgfQorCisgICAg
dm9pZCBlbnN1cmVTZWdtZW50c0ZvcihzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIHNpemVf
dCBzZWdtZW50Q291bnQgPSAobV9zaXplICsgU2VnbWVudFNpemUgLSAxKSAvIFNlZ21lbnRTaXpl
OworICAgICAgICBzaXplX3QgbmVlZGVkU2VnbWVudENvdW50ID0gKHNpemUgKyBTZWdtZW50U2l6
ZSAtIDEpIC8gU2VnbWVudFNpemU7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IHNlZ21lbnRD
b3VudCA/IHNlZ21lbnRDb3VudCAtIDEgOiAwOyBpIDwgbmVlZGVkU2VnbWVudENvdW50OyArK2kp
CisgICAgICAgICAgICBlbnN1cmVTZWdtZW50KGkpOworICAgIH0KKworICAgIHZvaWQgZW5zdXJl
U2VnbWVudChzaXplX3Qgc2VnbWVudEluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhf
U0VDVVJJVFlfSU1QTElDQVRJT04oc2VnbWVudEluZGV4IDw9IG1fbnVtU2VnbWVudHMpOworICAg
ICAgICBpZiAoc2VnbWVudEluZGV4ID09IG1fbnVtU2VnbWVudHMpCisgICAgICAgICAgICBhbGxv
Y2F0ZVNlZ21lbnQoKTsKKyAgICB9CisKKyAgICB2b2lkIGFsbG9jYXRlU2VnbWVudCgpCisgICAg
eworICAgICAgICBtX3NlZ21lbnRzLmdyb3cobV9udW1TZWdtZW50cyArIDEpOworICAgICAgICBt
X3NlZ21lbnRzW21fbnVtU2VnbWVudHMrK10gPSBzdGQ6Om1ha2VfdW5pcXVlPFNlZ21lbnQ+KCk7
CisgICAgfQorCisgICAgc2l6ZV90IG1fc2l6ZSB7IDAgfTsKKyAgICBDb25jdXJyZW50QnVmZmVy
PHN0ZDo6dW5pcXVlX3B0cjxTZWdtZW50Pj4gbV9zZWdtZW50czsKKyAgICBzaXplX3QgbV9udW1T
ZWdtZW50cyB7IDAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OkNv
bmN1cnJlbnRWZWN0b3I7CisKKyNlbmRpZiAvLyBDb25jdXJyZW50VmVjdG9yX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329084</attachid>
            <date>2017-12-11 20:55:43 -0800</date>
            <delta_ts>2017-12-11 21:08:55 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>75257</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI1NzY5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzNCBA
QAorMjAxNy0xMi0xMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBmbGFnIGEgY2VsbCBmb3IgdW5jb25kaXRpb25hbCBm
aW5hbGl6YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE4MDYzNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAg
ICAKKyAgICAgICAgVW5jb25kaXRpb25hbEZpbmFsaXplcnMgd2VyZSBhbm5veWluZyAtIHlvdSBo
YWQgdG8gYWxsb2NhdGUgdGhlbSBhbmQgeW91IGhhZCB0byBtYW5hZ2UgYQorICAgICAgICBnbG9i
YWwgbGlua2VkIGxpc3QgLSBidXQgdGhleSBoYWQgc29tZSBuaWNlIHByb3BlcnRpZXM6CisgICAg
ICAgIAorICAgICAgICAtIFlvdSBvbmx5IGRpZCB0aGUgaGFyZGVzdCB3b3JrIChjcmVhdGluZyB0
aGUgVW5jb25kaXRpb25hbEZpbmFsaXplcikgb24gZmlyc3QgR0Mgd2hlcmUgeW91CisgICAgICAg
ICAgc3Vydml2ZWQgYW5kIG5lZWRlZCBpdC4KKyAgICAgICAgICAgIC0+IEp1c3QgbmVlZGluZyBp
dCB3YXNuJ3QgZW5vdWdoLgorICAgICAgICAgICAgLT4gSnVzdCBzdXJ2aXZpbmcgd2Fzbid0IGVu
b3VnaC4KKyAgICAgICAgCisgICAgICAgIFRoZSBuZXcgQVBJIGJhc2VkIG9uIElzb1N1YnNwYWNl
cyBtZWFudCB0aGF0IGp1c3Qgc3Vydml2aW5nIHdhcyBlbm91Z2ggdG8gY2F1c2UgdW5jb25kaXRp
b25hbAorICAgICAgICBmaW5hbGl6ZXIgbG9naWMgdG8gYmUgaW52b2tlZC4gSSB0aGluayB0aGF0
J3Mgbm90IGdyZWF0LiBJbmZlcnJlZFR5cGUgZ290IGFyb3VuZCB0aGlzIGJ5CisgICAgICAgIG1h
a2luZyBJbmZlcnJlZFN0cnVjdHVyZSBhIGNlbGwsIGJ1dCB0aGlzIHdhcyBhIGdyb3NzIGhhY2su
IEZvciBvbmUsIGl0IG1lYW50IHRoYXQKKyAgICAgICAgSW5mZXJyZWRTdHJ1Y3R1cmUgd291bGQg
c3Vydml2ZSBkdXJpbmcgdGhlIEdDIGluIHdoaWNoIGl0cyBmaW5hbGl6ZXIgb2J2aWF0ZWQgdGhl
IG5lZWQgZm9yIGl0cworICAgICAgICBleGlzdGVuY2UuIEl0J3Mgbm90IHJlYWxseSBhbiBpZGlv
bSBJIHdhbnQgdXMgdG8gcmVwZWF0IGJlY2F1c2UgaXQgc291bmRzIGxpa2UgdGhlIHNvcnQgb2YK
KyAgICAgICAgdGhpbmcgdGhhdCB0dXJucyBvdXQgdG8gYmUgc3VidGx5IGJyb2tlbi4KKyAgICAg
ICAgCisgICAgICAgIFdlIHJlYWxseSBuZWVkIHRvIGhhdmUgYSB3YXkgb2YgaW5kaWNhdGluZyB3
aGVuIHlvdSBoYXZlIGVudGVyZWQgaW50byB0aGUgc3RhdGUgdGhhdCByZXF1aXJlcworICAgICAg
ICB5b3VyIHVuY29uZGl0aW9uYWwgZmluYWxpemVyIHRvIGJlIGludm9rZWQuIEJhc2ljYWxseSwg
d2Ugd2FudCB0byBiZSBhYmxlIHRvIHRyYWNrIHRoZSBzZXQgb2YKKyAgICAgICAgb2JqZWN0cyB0
aGF0IG5lZWQgdW5jb25kaXRpb25hbCBmaW5hbGl6ZXJzLiBPbmx5IHRoZSBzdWJzZXQgb2YgdGhh
dCBzZXQgdGhhdCBvdmVybGFwcyB3aXRoIHRoZQorICAgICAgICBzZXQgb2YgbWFya2VkIG9iamVj
dHMgbmVlZHMgdG8gYmUgYWNjdXJhdGUuIFRoZSBlYXNpZXN0IHdheSB0byBkbyB0aGlzIGlzIGEg
aGllcmFyY2h5IG9mCisgICAgICAgIGJpdHZlY3RvcnM6IG9uZSB0byBzYXkgd2hpY2ggTWFya2Vk
QmxvY2tzIGhhdmUgb2JqZWN0cyB0aGF0IGhhdmUgdW5jb25kaXRpb25hbCBmaW5hbGl6ZXJzLCBh
bmQKKyAgICAgICAgYW5vdGhlciBsZXZlbCB0byBzYXkgd2hpY2ggYXRvbXMgd2l0aGluIGEgTWFy
a2VkQmxvY2sgaGF2ZSB1bmNvbmRpdGlvbmFsIGZpbmFsaXplcnMuCisgICAgICAgIAorICAgICAg
ICBUaGlzIGNoYW5nZSBpbnRyb2R1Y2VzIElzb0NlbGxTZXQsIHdoaWNoIGNvdXBsZXMgaXRzZWxm
IHRvIHRoZSBNYXJrZWRBbGxvY2F0b3Igb2Ygc29tZQorICAgICAgICBJc29TdWJzcGFjZSB0byBh
bGxvdyBtYWludGFpbmluZyBhIHNldCBvZiBvYmplY3RzICh3ZWxsLCBjZWxscyAtIHlvdSBjb3Vs
ZCBkbyB0aGlzIHdpdGgKKyAgICAgICAgYXV4aWxpYXJpZXMpIHRoYXQgYmVsb25nIHRvIHRoYXQg
SXNvU3Vic3BhY2UuIEl0J2xsIGhhdmUgdW5kZWZpbmVkIGJlaGF2aW9yIGlmIHlvdSB0cnkgdG8K
KyAgICAgICAgYWRkL3JlbW92ZS9jb250YWlucyBhbiBvYmplY3QgdGhhdCBpc24ndCBpbiB0aGF0
IElzb1N1YnNwYWNlLiBGb3Igb2JqZWN0cyBpbiB0aGF0IHN1YnNwYWNlLAorICAgICAgICB5b3Ug
Y2FuIGFkZC9yZW1vdmUvY29udGFpbnMgYW5kIGZvckVhY2hNYXJrZWRDZWxsLiBUaGUgY29zdCBv
ZiBlYWNoIElzb0NlbGxTZXQgaXMgYXQgd29yc3QKKyAgICAgICAgYWJvdXQgMC44JSBpbmNyZWFz
ZSBpbiBzaXplIHRvIGV2ZXJ5IG9iamVjdCBpbiB0aGUgc3Vic3BhY2UgdGhhdCB0aGUgc2V0IGlz
IGF0dGFjaGVkIHRvLiBTbywKKyAgICAgICAgaXQgbWFrZXMgc2Vuc2UgdG8gaGF2ZSBhIGhhbmRm
dWwgcGVyIHN1YnNwYWNlIG1heC4gVGhpcyBjaGFuZ2Ugb25seSBuZWVkcyBvbmUgcGVyIHN1YnNw
YWNlLAorICAgICAgICBidXQgeW91IGNvdWxkIGltYWdpbmUgbW9yZSBpZiB3ZSBkbyB0aGlzIGZv
ciBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLgorICAgICAgICAKKyAgICAgICAgVG8gYWJzb2x1dGVs
eSBtaW5pbWl6ZSB0aGUgcG9zc2liaWxpdHkgdGhhdCB0aGlzIGluY3VycyBjb3N0cywgdGhlIGFk
ZC9yZW1vdmUvY29udGFpbnMKKyAgICAgICAgZnVuY3Rpb25zIGNhbiBiZSB1c2VkIGZyb20gYW55
IHRocmVhZCBzbyBsb25nIGFzIGZvckVhY2hNYXJrZWRDZWxsIGlzbid0IHJ1bm5pbmcuIFRoaXMg
bWVhbnMKKyAgICAgICAgdGhhdCBJbmZlcnJlZFR5cGUgb25seSBuZWVkcyB0byBhZGQgaXRzZWxm
IHRvIHRoZSBzZXQgZHVyaW5nIHZpc2l0Q2hpbGRyZW4uIFRodXMsIGl0IG5lZWRzIHRvCisgICAg
ICAgIGJvdGggc3Vydml2ZSBhbmQgbmVlZCBpdCBmb3IgdGhlIGhhcmRlc3Qgd29yayB0byB0YWtl
IHBsYWNlLiBUaGUgd29yayBvZiBhZGRpbmcgZG9lcyBpbnZvbHZlCisgICAgICAgIGEgZ25hcmx5
IGxvYWQgY2hhaW4gdGhhdCBlbmRzIGluIGEgQ0FTOiBsb2FkIGJsb2NrIGhhbmRsZSBmcm9tIGJs
b2NrLCBsb2FkIGluZGV4LCBsb2FkCisgICAgICAgIHNlZ21lbnQsIGxvYWQgYml0dmVjdG9yLCBs
b2FkIGJpdCAtPiBpZiBub3Qgc2V0LCB0aGVuIENBUy4gVGhhdCdzIGZpdmUgZGVwZW5kZW50IGxv
YWRzIQorICAgICAgICBIb3dldmVyLCBpdCdzIHBlcmZlY3QgZm9yIHJ1bm5pbmcgaW4gcGFyYWxs
ZWwgc2luY2UgdGhlIG9ubHkgd3JpdGUgb3BlcmF0aW9ucyBhcmUgdG8gd2lkZWx5CisgICAgICAg
IGRpc3BlcnNlZCBjYWNoZSBsaW5lcyB0aGF0IGNvbnRhaW4gdGhlIGJpdHMgdW5kZXJseWluZyB0
aGUgc2V0LgorICAgICAgICAKKyAgICAgICAgVGhlIGJlc3QgcGFydCBpcyBob3cgZm9yRWFjaE1h
cmtlZENlbGwgd29ya3MuIFRoYXQgc2tpcHMgYmxvY2tzIHRoYXQgZG9uJ3QgaGF2ZSBhbnkgb2Jq
ZWN0cworICAgICAgICB0aGF0IG5lZWQgdW5jb25kaXRpb25hbCBmaW5hbGl6ZXJzLCBhbmQgb25s
eSB0b3VjaGVzIHRoZSBtZW1vcnkgb2YgbWFya2VkIG9iamVjdHMgdGhhdCBoYXZlCisgICAgICAg
IHRoZSB1bmNvbmRpdGlvbmFsIGZpbmFsaXplciBiaXQgc2V0LiBJdCB3aWxsIHdhbGsgdGhvc2Ug
b2JqZWN0cyBpbiByb3VnaGx5IGFkZHJlc3Mgb3JkZXIuIEkKKyAgICAgICAgcHJldmlvdXNseSBm
b3VuZCB0aGF0IHRoaXMgc3BlZWRzIHVwIHdhbGtpbmcgb3ZlciBhIGxvdCBvZiBvYmplY3RzIHdo
ZW4gSSBtYWRlIHNpbWlsYXIgY2hhbmdlcworICAgICAgICBmb3IgRE9NIEdDIChjYWxsaW5nIHZp
c2l0QWRkaXRpb25hbENoaWxkcmVuIHZpYSBmb3JFYWNoTWFya2VkQ2VsbCByYXRoZXIgdGhhbiBi
eSB3YWxraW5nIGEKKyAgICAgICAgSGFzaFNldCkuCisgICAgICAgIAorICAgICAgICBUaGlzIGNo
YW5nZSBtYWtlcyBJbmZlcnJlZFN0cnVjdHVyZSBiZSBhIG1hbGxvYyBvYmplY3QgYWdhaW4sIGJ1
dCBub3cgaXQncyBpbiBhbiBJc29IZWFwLgorICAgICAgICAKKyAgICAgICAgTXkgZXhwZWN0YXRp
b24gZm9yIHRoaXMgY2hhbmdlIGlzIHRoYXQgaXQncyBwZXJmLW5ldXRyYWwuIExvbmctdGVybSwg
aXQgZ2l2ZXMgdXMgYSBwYXRoCisgICAgICAgIGZvcndhcmQgZm9yIGVsaW1pbmF0aW5nIFVuY29u
ZGl0aW9uYWxGaW5hbGl6ZXIgYW5kIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIgd2hpbGUgdXNpbmcK
KyAgICAgICAgSXNvU3Vic3BhY2UgaW4gbW9yZSBwbGFjZXMuCisKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIGhlYXAvQXRvbUluZGljZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkF0
b21JbmRpY2VzOjpBdG9tSW5kaWNlcyk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAg
ICAgKEpTQzo6SGVhcDo6ZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycyk6CisgICAgICAg
ICogaGVhcC9IZWFwLmg6CisgICAgICAgICogaGVhcC9Jc29DZWxsU2V0LmNwcDogQWRkZWQuCisg
ICAgICAgIChKU0M6Oklzb0NlbGxTZXQ6Oklzb0NlbGxTZXQpOgorICAgICAgICAoSlNDOjpJc29D
ZWxsU2V0Ojp+SXNvQ2VsbFNldCk6CisgICAgICAgIChKU0M6Oklzb0NlbGxTZXQ6OmFkZFNsb3cp
OgorICAgICAgICAoSlNDOjpJc29DZWxsU2V0OjpkaWRSZXNpemVCaXRzKToKKyAgICAgICAgKEpT
Qzo6SXNvQ2VsbFNldDo6ZGlkUmVtb3ZlQmxvY2spOgorICAgICAgICAoSlNDOjpJc29DZWxsU2V0
Ojpzd2VlcFRvRnJlZUxpc3QpOgorICAgICAgICAqIGhlYXAvSXNvQ2VsbFNldC5oOiBBZGRlZC4K
KyAgICAgICAgKiBoZWFwL0lzb0NlbGxTZXRJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlND
OjpJc29DZWxsU2V0OjphZGQpOgorICAgICAgICAoSlNDOjpJc29DZWxsU2V0OjpyZW1vdmUpOgor
ICAgICAgICAoSlNDOjpJc29DZWxsU2V0Ojpjb250YWlucyBjb25zdCk6CisgICAgICAgIChKU0M6
Oklzb0NlbGxTZXQ6OmZvckVhY2hNYXJrZWRDZWxsKToKKyAgICAgICAgKiBoZWFwL0lzb1N1YnNw
YWNlLmNwcDoKKyAgICAgICAgKEpTQzo6SXNvU3Vic3BhY2U6OmRpZFJlc2l6ZUJpdHMpOgorICAg
ICAgICAoSlNDOjpJc29TdWJzcGFjZTo6ZGlkUmVtb3ZlQmxvY2spOgorICAgICAgICAoSlNDOjpJ
c29TdWJzcGFjZTo6ZGlkQmVnaW5Td2VlcGluZ1RvRnJlZUxpc3QpOgorICAgICAgICAqIGhlYXAv
SXNvU3Vic3BhY2UuaDoKKyAgICAgICAgKiBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHA6CisgICAg
ICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWRkQmxvY2spOgorICAgICAgICAoSlNDOjpNYXJr
ZWRBbGxvY2F0b3I6OnJlbW92ZUJsb2NrKToKKyAgICAgICAgKiBoZWFwL01hcmtlZEFsbG9jYXRv
ci5oOgorICAgICAgICAqIGhlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oOgorICAgICAgICAq
IGhlYXAvTWFya2VkQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxl
Ojpzd2VlcCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzRW1wdHkpOiBE
ZWxldGVkLgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suaDoKKyAgICAgICAgKEpTQzo6TWFy
a2VkQmxvY2s6Om1hcmtzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRs
ZTo6bmV3bHlBbGxvY2F0ZWQgY29uc3QpOgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2tJbmxp
bmVzLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzQWxsb2NhdGVkKToK
KyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6aXNFbXB0eSk6CisgICAgICAgIChK
U0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OmVtcHR5TW9kZSk6CisgICAgICAgIChKU0M6Ok1hcmtl
ZEJsb2NrOjpIYW5kbGU6OmZvckVhY2hNYXJrZWRDZWxsKToKKyAgICAgICAgKiBoZWFwL1N1YnNw
YWNlLmNwcDoKKyAgICAgICAgKEpTQzo6U3Vic3BhY2U6OmRpZFJlc2l6ZUJpdHMpOgorICAgICAg
ICAoSlNDOjpTdWJzcGFjZTo6ZGlkUmVtb3ZlQmxvY2spOgorICAgICAgICAoSlNDOjpTdWJzcGFj
ZTo6ZGlkQmVnaW5Td2VlcGluZ1RvRnJlZUxpc3QpOgorICAgICAgICAqIGhlYXAvU3Vic3BhY2Uu
aDoKKyAgICAgICAgKiBoZWFwL1N1YnNwYWNlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTdWJz
cGFjZTo6Zm9yRWFjaE1hcmtlZENlbGwpOgorICAgICAgICAqIHJ1bnRpbWUvSW5mZXJyZWRTdHJ1
Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFN0cnVjdHVyZTo6SW5mZXJyZWRTdHJ1
Y3R1cmUpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFN0cnVjdHVyZTo6Y3JlYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6SW5mZXJyZWRTdHJ1Y3R1cmU6OmRlc3Ryb3kpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpJbmZlcnJlZFN0cnVjdHVyZTo6Y3JlYXRlU3RydWN0dXJlKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6SW5mZXJyZWRTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4pOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpJbmZlcnJlZFN0cnVjdHVyZTo6ZmluYWxpemVVbmNvbmRpdGlv
bmFsbHkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmZlcnJlZFN0cnVjdHVyZTo6ZmluaXNo
Q3JlYXRpb24pOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1cmUu
aDoKKyAgICAgICAgKiBydW50aW1lL0luZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludC5jcHA6Cisg
ICAgICAgIChKU0M6OkluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKToK
KyAgICAgICAgKiBydW50aW1lL0luZmVycmVkVHlwZS5jcHA6CisgICAgICAgIChKU0M6OkluZmVy
cmVkVHlwZTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlwZTo6d2ls
bFN0b3JlVmFsdWVTbG93KToKKyAgICAgICAgKEpTQzo6SW5mZXJyZWRUeXBlOjptYWtlVG9wU2xv
dyk6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlwZTo6c2V0KToKKyAgICAgICAgKEpTQzo6SW5m
ZXJyZWRUeXBlOjpyZW1vdmVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6
OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KToKKyAgICAgICAgKiBydW50aW1lL0luZmVycmVkVHlw
ZS5oOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgor
ICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKwogMjAxNy0xMi0xMSAgU2FhbSBCYXJhdGkgIDxzYmFy
YXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBXZSBuZWVkIHRvIGRpc2FibGVDYWNoaW5nKCkgaW4g
RXJyb3JJbnN0YW5jZSB3aGVuIHdlIG1hdGVyaWFsaXplIHByb3BlcnRpZXMKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDIyNTcyNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNDk1LDYgKzQ5NSw3IEBAIGhl
YXAvSGVhcFNuYXBzaG90LmNwcAogaGVhcC9IZWFwU25hcHNob3RCdWlsZGVyLmNwcAogaGVhcC9J
bmNyZW1lbnRhbFN3ZWVwZXIuY3BwCiBoZWFwL0lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3Bw
CitoZWFwL0lzb0NlbGxTZXQuY3BwCiBoZWFwL0lzb1N1YnNwYWNlLmNwcAogaGVhcC9KSVRTdHVi
Um91dGluZVNldC5jcHAKIGhlYXAvTGFyZ2VBbGxvY2F0aW9uLmNwcApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyNTcyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC00NzQsNiArNDc0LDkgQEAKIAkJMEZCMTc2NjMxOTZCOEY5RTAwOTEwNTJBIC8qIERG
R1B1cmVWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZCMTc2NUYxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oICovOyB9OwogCQkw
RkIzODc4RTFCRkJDNDREMDBFM0FCMUUgLyogQWlyQmxvY2tXb3JrbGlzdC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMzg3OEIxQkZCQzQ0RDAwRTNB
QjFFIC8qIEFpckJsb2NrV29ya2xpc3QuaCAqLzsgfTsKIAkJMEZCMzg3OTAxQkZCQzQ0RDAwRTNB
QjFFIC8qIEFpck9wdGltaXplQmxvY2tPcmRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMzg3OEQxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpck9wdGlt
aXplQmxvY2tPcmRlci5oICovOyB9OworCQkwRkI0Njc3RjFGRERBNkU5MDAzRkNCMDkgLyogQXRv
bUluZGljZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGQjQ2NzdFMUZEREE2RTUwMDNGQ0IwOSAvKiBBdG9tSW5kaWNlcy5oICovOyB9OworCQkwRkI0
Njc4MDFGRERBNkYxMDAzRkNCMDkgLyogSXNvQ2VsbFNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNDY3N0QxRkREQTZEOTAwM0ZDQjA5IC8qIElz
b0NlbGxTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkwRkI0Njc4MTFGRERBNkY3MDAzRkNCMDkgLyogSXNvQ2VsbFNldElubGluZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjQ2NzdCMUZEREE2
RDgwMDNGQ0IwOSAvKiBJc29DZWxsU2V0SW5saW5lcy5oICovOyB9OwogCQkwRkI0NzY3RTFEOTlB
RUE5MDA4RUE2Q0IgLyogR0NEZWZlcnJhbENvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjQ3NjdDMUQ5OUFFQTcwMDhFQTZDQiAvKiBHQ0Rl
ZmVycmFsQ29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGQjQ3NjdGMUQ5OUFFQUQwMDhFQTZDQiAvKiBHQ0RlZmVycmFsQ29udGV4dElu
bGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QjQ3NjdEMUQ5OUFFQTcwMDhFQTZDQiAvKiBHQ0RlZmVycmFsQ29udGV4dElubGluZXMuaCAqLzsg
fTsKIAkJMEZCNEZCNzQxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNEZCNzExQkM4NDMx
NDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aC5oICovOyB9OwpAQCAtMjU2Miw2ICsyNTY1LDEw
IEBACiAJCTBGQjM4NzkxMUJGRDMxQTEwMEUzQUIxRSAvKiBGVExDb21waWxlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTENvbXBpbGUuY3BwOyBwYXRoID0gZnRs
L0ZUTENvbXBpbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0MTU4MzFE
NzhGOTgyMDBERjhEMDkgLyogQXJyYXlDb252ZW50aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBBcnJheUNvbnZlbnRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZCNDM4QTIxOTI3MEIxRDAwRTFGQkM5IC8qIFN0cnVjdHVyZVNldC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJ1Y3R1cmVTZXQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI0Njc3QjFGRERBNkQ4MDAzRkNCMDkg
LyogSXNvQ2VsbFNldElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SXNvQ2VsbFNldElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCNDY3
N0MxRkREQTZEOTAwM0ZDQjA5IC8qIElzb0NlbGxTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSXNvQ2VsbFNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGQjQ2NzdEMUZEREE2RDkwMDNGQ0IwOSAvKiBJc29DZWxsU2V0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElzb0NlbGxTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZCNDY3N0UxRkREQTZFNTAwM0ZDQjA5IC8qIEF0b21JbmRpY2VzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF0b21JbmRpY2VzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGQjQ3NjdDMUQ5OUFFQTcwMDhFQTZDQiAvKiBHQ0RlZmVycmFs
Q29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ0RlZmVycmFsQ29u
dGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0NzY3RDFEOTlBRUE3MDA4
RUE2Q0IgLyogR0NEZWZlcnJhbENvbnRleHRJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEdDRGVmZXJyYWxDb250ZXh0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkI0QjUxMDE2QjNBOTY0MDAzRjY5NkIgLyogREZHTWluaWZpZWRJRC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdNaW5pZmllZElELmg7IHBhdGgg
PSBkZmcvREZHTWluaWZpZWRJRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTUy
NSw2ICs1NTMyLDcgQEAKIAkJCQkwRjk2MzAzNTFENDE5MkMzMDA1NjA5RDkgLyogQWxsb2NhdG9y
QXR0cmlidXRlcy5jcHAgKi8sCiAJCQkJMEY5NjMwMzYxRDQxOTJDMzAwNTYwOUQ5IC8qIEFsbG9j
YXRvckF0dHJpYnV0ZXMuaCAqLywKIAkJCQkwRjMwQ0I1RDFGQ0U0NkI0MDA0QjUzMjMgLyogQWxs
b2NhdG9yRm9yTW9kZS5oICovLAorCQkJCTBGQjQ2NzdFMUZEREE2RTUwMDNGQ0IwOSAvKiBBdG9t
SW5kaWNlcy5oICovLAogCQkJCTBGREU4N0Y4MURGRDBDNkQwMDY0QzM5MCAvKiBDZWxsQ29udGFp
bmVyLmNwcCAqLywKIAkJCQkwRjA3MEE0MjFENTQzQTg5MDA2RTcyMzIgLyogQ2VsbENvbnRhaW5l
ci5oICovLAogCQkJCTBGMDcwQTQzMUQ1NDNBODkwMDZFNzIzMiAvKiBDZWxsQ29udGFpbmVySW5s
aW5lcy5oICovLApAQCAtNTYxMSw2ICs1NjE5LDkgQEAKIAkJCQlDMjVGOEJDQzE1NzU0NEE5MDAy
NDVCNzEgLyogSW5jcmVtZW50YWxTd2VlcGVyLmggKi8sCiAJCQkJMEZEQ0UxMkYxRkIxMUQ5RDAw
NkYzOTAxIC8qIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwICovLAogCQkJCTBGRENFMTMw
MUZCMTFEOUQwMDZGMzkwMSAvKiBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggKi8sCisJCQkJ
MEZCNDY3N0MxRkREQTZEOTAwM0ZDQjA5IC8qIElzb0NlbGxTZXQuY3BwICovLAorCQkJCTBGQjQ2
NzdEMUZEREE2RDkwMDNGQ0IwOSAvKiBJc29DZWxsU2V0LmggKi8sCisJCQkJMEZCNDY3N0IxRkRE
QTZEODAwM0ZDQjA5IC8qIElzb0NlbGxTZXRJbmxpbmVzLmggKi8sCiAJCQkJMEZEQ0UxMkMxRkFG
QjRERTAwNkYzOTAxIC8qIElzb1N1YnNwYWNlLmNwcCAqLywKIAkJCQkwRkRDRTEyQjFGQUZCNERF
MDA2RjM5MDEgLyogSXNvU3Vic3BhY2UuaCAqLywKIAkJCQkwRjc2NkQyOTE1QThDQzM0MDA4RjM2
M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuY3BwICovLApAQCAtNzk5Nyw2ICs4MDA4LDcgQEAKIAkJ
CQkwRkVDODU3MjFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYyQzYzQkMxRTYzNDQwQzAwQzEzODM5IC8qIEFpckJsb2NrSW5zZXJ0aW9uU2V0
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkIzODc4RTFCRkJDNDREMDBFM0FCMUUgLyogQWlyQmxv
Y2tXb3JrbGlzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCNDY3ODExRkREQTZGNzAwM0ZDQjA5
IC8qIElzb0NlbGxTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc5QzdDQTFFNzRD
OTNCMDBFQjM0RDEgLyogQWlyQnJlYWtDcml0aWNhbEVkZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjYxODMyQTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkVDODU3NDFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVj
aWFsLmggaW4gSGVhZGVycyAqLywKQEAgLTg5NzMsNiArODk4NSw3IEBACiAJCQkJQUQyRkNCRTUx
REI1OERBRDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQURFODAyOTkxRTA4RjFERTAwNThERTc4IC8qIEpTV2ViQXNzZW1ibHlMaW5rRXJyb3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQkU3MURCNThEQUQwMEIzRTczNiAvKiBKU1dlYkFz
c2VtYmx5TWVtb3J5LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkI0Njc3RjFGRERBNkU5MDAzRkNC
MDkgLyogQXRvbUluZGljZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQzA1MURCNThEQUQw
MEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5TW9kdWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJG
Q0JFOTFEQjU4REFEMDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQUQyRkNCRUIxREI1OERBRDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlU
YWJsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05MjU5LDYgKzkyNzIsNyBAQAogCQkJCUMyMEJBOTJE
MTZCQjFDMTUwMEIzQUVBMiAvKiBTdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGOTMzMkE1MTRDQTdEREQwMDg1RjNDNiAvKiBTdHJ1Y3R1cmVTZXQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGNzY2RDM5MTVBRTRBMUYwMDhGMzYzRSAvKiBTdHJ1Y3R1cmVTdHVi
Q2xlYXJpbmdXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkI0Njc4MDFGRERBNkYx
MDAzRkNCMDkgLyogSXNvQ2VsbFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNDRjBEMDgwRUYw
QUFCOTAwNDEzQzhGIC8qIFN0cnVjdHVyZVN0dWJJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzkwNDE0ODBFQjkyNTA5MDBGRTI2RkEgLyogU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjdERjEzNzFFMjk3MEUxMDA5NTk1MUIgLyogU3Vic3BhY2UuaCBp
biBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQXRvbUluZGlj
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BdG9tSW5kaWNl
cy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0F0b21JbmRp
Y2VzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIk1h
cmtlZEJsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitzdHJ1Y3QgQXRvbUluZGljZXMgewor
ICAgIEF0b21JbmRpY2VzKCkgeyB9CisgICAgCisgICAgQXRvbUluZGljZXMoSGVhcENlbGwqIGNl
bGwpCisgICAgICAgIDogYmxvY2soTWFya2VkQmxvY2s6OmJsb2NrRm9yKGNlbGwpKQorICAgICAg
ICAsIGJsb2NrSW5kZXgoYmxvY2stPmhhbmRsZSgpLmluZGV4KCkpCisgICAgICAgICwgYXRvbU51
bWJlcihibG9jay0+YXRvbU51bWJlcihjZWxsKSkKKyAgICB7CisgICAgfQorICAgIAorICAgIE1h
cmtlZEJsb2NrKiBibG9jazsKKyAgICBzaXplX3QgYmxvY2tJbmRleDsKKyAgICBzaXplX3QgYXRv
bU51bWJlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjI1NzI1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNs
dWRlICJJbmNyZW1lbnRhbFN3ZWVwZXIuaCIKICNpbmNsdWRlICJJbmZlcnJlZFN0cnVjdHVyZS5o
IgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCisjaW5jbHVkZSAiSXNvQ2VsbFNldElubGluZXMu
aCIKICNpbmNsdWRlICJKSVRTdHViUm91dGluZVNldC5oIgogI2luY2x1ZGUgIkpJVFdvcmtsaXN0
LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgpAQCAtNTUyLDE4ICs1NTMsMTggQEAgdm9pZCBI
ZWFwOjphZGRSZWZlcmVuY2UoSlNDZWxsKiBjZWxsLCBBcgogICAgIH0KIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgQ2VsbFR5cGU+Ci12b2lkIEhlYXA6OmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFs
aXplcnMoU3Vic3BhY2UmIHN1YnNwYWNlKQordGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIHR5
cGVuYW1lIENlbGxTZXQ+Cit2b2lkIEhlYXA6OmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXpl
cnMoQ2VsbFNldCYgY2VsbFNldCkKIHsKLSAgICBzdWJzcGFjZS5mb3JFYWNoTWFya2VkQ2VsbCgK
KyAgICBjZWxsU2V0LmZvckVhY2hNYXJrZWRDZWxsKAogICAgICAgICBbJl0gKEhlYXBDZWxsKiBj
ZWxsLCBIZWFwQ2VsbDo6S2luZCkgewotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q2VsbFR5cGUq
PihjZWxsKS0+ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKnZtKCkpOworICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PENlbGxUeXBlKj4oY2VsbCktPmZpbmFsaXplVW5jb25kaXRpb25hbGx5
KCp2bSgpKTsKICAgICAgICAgfSk7CiB9CiAKIHZvaWQgSGVhcDo6ZmluYWxpemVVbmNvbmRpdGlv
bmFsRmluYWxpemVycygpCiB7Ci0gICAgZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVyczxJ
bmZlcnJlZFN0cnVjdHVyZT4odm0oKS0+aW5mZXJyZWRTdHJ1Y3R1cmVTcGFjZSk7CisgICAgZmlu
YWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVyczxJbmZlcnJlZFR5cGU+KHZtKCktPmluZmVycmVk
VHlwZXNXaXRoRmluYWxpemVycyk7CiAgICAgCiAgICAgd2hpbGUgKG1fdW5jb25kaXRpb25hbEZp
bmFsaXplcnMuaGFzTmV4dCgpKSB7CiAgICAgICAgIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIqIGZp
bmFsaXplciA9IG1fdW5jb25kaXRpb25hbEZpbmFsaXplcnMucmVtb3ZlTmV4dCgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjI1NzI1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OTYsOCArNDk2LDgg
QEAgcHJpdmF0ZToKICAgICB2b2lkIG5vdGlmeUluY3JlbWVudGFsU3dlZXBlcigpOwogICAgIHZv
aWQgaGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZT4KLSAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMoU3Vic3BhY2Um
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgdHlwZW5hbWUgQ2VsbFNldD4KKyAg
ICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMoQ2VsbFNldCYpOwogICAgIAog
ICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpOwogICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5jcHAJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklzb0NlbGxTZXQuaCIK
KworI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvcklubGluZXMuaCIKKyNpbmNsdWRlICJNYXJrZWRC
bG9ja0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0lzb0NlbGxTZXQ6Oklzb0NlbGxT
ZXQoSXNvU3Vic3BhY2UmIHN1YnNwYWNlKQorICAgIDogbV9zdWJzcGFjZShzdWJzcGFjZSkKK3sK
KyAgICBzaXplX3Qgc2l6ZSA9IHN1YnNwYWNlLm1fYWxsb2NhdG9yLm1fYmxvY2tzLnNpemUoKTsK
KyAgICBtX2Jsb2Nrc1dpdGhCaXRzLnJlc2l6ZShzaXplKTsKKyAgICBtX2JpdHMuZ3JvdyhzaXpl
KTsKKyAgICBzdWJzcGFjZS5tX2NlbGxTZXRzLmFwcGVuZCh0aGlzKTsKK30KKworSXNvQ2VsbFNl
dDo6fklzb0NlbGxTZXQoKQoreworICAgIGlmIChpc09uTGlzdCgpKQorICAgICAgICBCYXNpY1Jh
d1NlbnRpbmVsTm9kZTxJc29DZWxsU2V0Pjo6cmVtb3ZlKCk7Cit9CisKK05FVkVSX0lOTElORSBC
aXRtYXA8TWFya2VkQmxvY2s6OmF0b21zUGVyQmxvY2s+KiBJc29DZWxsU2V0OjphZGRTbG93KHNp
emVfdCBibG9ja0luZGV4KQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9zdWJzcGFj
ZS5tX2FsbG9jYXRvci5tX2JpdHZlY3RvckxvY2spOworICAgIGF1dG8mIGJpdHNQdHJSZWYgPSBt
X2JpdHNbYmxvY2tJbmRleF07CisgICAgYXV0byogYml0cyA9IGJpdHNQdHJSZWYuZ2V0KCk7Cisg
ICAgaWYgKCFiaXRzKSB7CisgICAgICAgIGJpdHNQdHJSZWYgPSBzdGQ6Om1ha2VfdW5pcXVlPEJp
dG1hcDxNYXJrZWRCbG9jazo6YXRvbXNQZXJCbG9jaz4+KCk7CisgICAgICAgIGJpdHMgPSBiaXRz
UHRyUmVmLmdldCgpOworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICBt
X2Jsb2Nrc1dpdGhCaXRzW2Jsb2NrSW5kZXhdID0gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGJp
dHM7Cit9CisKK3ZvaWQgSXNvQ2VsbFNldDo6ZGlkUmVzaXplQml0cyhzaXplX3QgbmV3U2l6ZSkK
K3sKKyAgICBtX2Jsb2Nrc1dpdGhCaXRzLnJlc2l6ZShuZXdTaXplKTsKKyAgICBtX2JpdHMuZ3Jv
dyhuZXdTaXplKTsKK30KKwordm9pZCBJc29DZWxsU2V0OjpkaWRSZW1vdmVCbG9jayhzaXplX3Qg
YmxvY2tJbmRleCkKK3sKKyAgICBtX2Jsb2Nrc1dpdGhCaXRzW2Jsb2NrSW5kZXhdID0gZmFsc2U7
CisgICAgbV9iaXRzW2Jsb2NrSW5kZXhdID0gbnVsbHB0cjsKK30KKwordm9pZCBJc29DZWxsU2V0
Ojpzd2VlcFRvRnJlZUxpc3QoTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2spCit7CisgICAgUkVM
RUFTRV9BU1NFUlQoIWJsb2NrLT5pc0FsbG9jYXRlZCgpKTsKKyAgICAKKyAgICBpZiAoIW1fYmxv
Y2tzV2l0aEJpdHNbYmxvY2stPmluZGV4KCldKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
V1RGOjpsb2FkTG9hZEZlbmNlKCk7CisgICAgCisgICAgaWYgKCFtX2JpdHNbYmxvY2stPmluZGV4
KCldKSB7CisgICAgICAgIGRhdGFMb2coIkZBVEFMOiBmb3IgYmxvY2sgaW5kZXggIiwgYmxvY2st
PmluZGV4KCksICI6XG4iKTsKKyAgICAgICAgZGF0YUxvZygiQmxvY2tzIHdpdGggYml0cyBzYXlz
OiAiLCAhIW1fYmxvY2tzV2l0aEJpdHNbYmxvY2stPmluZGV4KCldLCAiXG4iKTsKKyAgICAgICAg
ZGF0YUxvZygiQml0cyBzYXlzOiAiLCBSYXdQb2ludGVyKG1fYml0c1tibG9jay0+aW5kZXgoKV0u
Z2V0KCkpLCAiXG4iKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICB9CisgICAgCisgICAgaWYgKGJsb2NrLT5oYXNBbnlOZXdseUFsbG9jYXRlZCgpKSB7CisgICAg
ICAgIG1fYml0c1tibG9jay0+aW5kZXgoKV0tPmZpbHRlcihibG9jay0+bmV3bHlBbGxvY2F0ZWQo
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYmxvY2stPmlzRW1wdHkoKSB8
fCBibG9jay0+YXJlTWFya3NTdGFsZSgpKSB7CisgICAgICAgIG1fYmxvY2tzV2l0aEJpdHNbYmxv
Y2stPmluZGV4KCldID0gZmFsc2U7CisgICAgICAgIG1fYml0c1tibG9jay0+aW5kZXgoKV0gPSBu
dWxscHRyOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG1fYml0c1tibG9jay0+
aW5kZXgoKV0tPmZpbHRlcihibG9jay0+YmxvY2soKS5tYXJrcygpKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmgJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBdG9tSW5k
aWNlcy5oIgorI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4KKyNpbmNsdWRlIDx3dGYvQ29uY3VycmVu
dFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+CisKK25hbWVzcGFjZSBK
U0MgeworCitjbGFzcyBIZWFwQ2VsbDsKK2NsYXNzIElzb1N1YnNwYWNlOworCisvLyBDcmVhdGUg
YSBzZXQgb2YgY2VsbHMgdGhhdCBhcmUgaW4gYW4gSXNvU3Vic3BhY2UuIFRoaXMgYWxsb3dzIGNv
bmN1cnJlbnQgTygxKSBzZXQgaW5zZXJ0aW9uIGFuZAorLy8gcmVtb3ZhbC4gRWFjaCBzdWNoIHNl
dCBzaG91bGQgYmUgdGhvdWdodCBvZiBhcyBhIDAuOCUgaW5jcmVhc2UgaW4gb2JqZWN0IHNpemUg
Zm9yIG9iamVjdHMgaW4gdGhhdAorLy8gSXNvU3Vic3BhY2UgKGl0J3MgbGlrZSBhZGRpbmcgMSBi
aXQgZXZlcnkgMTYgYnl0ZXMsIG9yIDEgYml0IGV2ZXJ5IDEyOCBiaXRzKS4KK2NsYXNzIElzb0Nl
bGxTZXQgOiBwdWJsaWMgQmFzaWNSYXdTZW50aW5lbE5vZGU8SXNvQ2VsbFNldD4geworcHVibGlj
OgorICAgIElzb0NlbGxTZXQoSXNvU3Vic3BhY2UmIHN1YnNwYWNlKTsKKyAgICB+SXNvQ2VsbFNl
dCgpOworICAgIAorICAgIGJvb2wgYWRkKEhlYXBDZWxsKiBjZWxsKTsKKyAgICAKKyAgICBib29s
IHJlbW92ZShIZWFwQ2VsbCogY2VsbCk7CisgICAgCisgICAgYm9vbCBjb250YWlucyhIZWFwQ2Vs
bCogY2VsbCkgY29uc3Q7CisgICAgCisgICAgLy8gVGhpcyB3aWxsIGhhdmUgdG8gZG8gYSBjb21i
aW5lZCBzZWFyY2ggb3ZlciB3aGF0ZXZlciBTdWJzcGFjZTo6Zm9yRWFjaE1hcmtlZENlbGwgdXNl
cyBhbmQKKyAgICAvLyBvdXIgbV9ibG9ja3NXaXRoQml0cy4KKyAgICAvLyBOT1RFOiBJdCdzIGls
bGVnYWwgdG8gY2FsbCBhZGQoKSBvciByZW1vdmUoKSBjb25jdXJyZW50bHkgdG8gdGhpcywgYnV0
IHNlbGYtcmVtb3ZlKCkgd2lsbCB3b3JrLgorICAgIC8vIEJ1dCBpdCdzIGJldHRlciBpZiB5b3Ug
cmV0dXJuIFJlbW92ZSBpbnN0ZWFkLgorICAgIGVudW0gY2xhc3MgRm9yRWFjaFJlc3VsdCB7Cisg
ICAgICAgIENvbnRpbnVlLAorICAgICAgICBCcmVhaywKKyAgICAgICAgUmVtb3ZlQW5kQ29udGlu
dWUsCisgICAgICAgIFJlbW92ZUFuZEJyZWFrCisgICAgfTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jPgorICAgIHZvaWQgZm9yRWFjaE1hcmtlZENlbGwoY29uc3QgRnVuYyYpOworICAgIAor
cHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgSXNvU3Vic3BhY2U7CisgICAgCisgICAgQml0bWFw
PE1hcmtlZEJsb2NrOjphdG9tc1BlckJsb2NrPiogYWRkU2xvdyhzaXplX3QgYmxvY2tJbmRleCk7
CisgICAgCisgICAgdm9pZCBkaWRSZXNpemVCaXRzKHNpemVfdCBuZXdTaXplKTsKKyAgICB2b2lk
IGRpZFJlbW92ZUJsb2NrKHNpemVfdCBibG9ja0luZGV4KTsKKyAgICB2b2lkIHN3ZWVwVG9GcmVl
TGlzdChNYXJrZWRCbG9jazo6SGFuZGxlKik7CisgICAgCisgICAgSXNvU3Vic3BhY2UmIG1fc3Vi
c3BhY2U7CisgICAgCisgICAgLy8gSWRlYTogc3dlZXBpbmcgdG8gZnJlZS1saXN0IGNsZWFycyBi
aXRzIGZvciB0aG9zZSBjZWxscyB0aGF0IHdlcmUgZnJlZS1saXN0ZWQuIFRoZSBmaXJzdCB0aW1l
CisgICAgLy8gd2UgYWRkIGEgY2VsbCBpbiBhIGJsb2NrLCB0aGF0IGJsb2NrIGdldHMgYSBmcmVl
LWxpc3QuIFVubGVzcyB3ZSBkbyBzb21ldGhpbmcgdGhhdCBvYnZpb3VzbHkKKyAgICAvLyBjbGVh
cnMgYWxsIGJpdHMgZm9yIGEgYmxvY2ssIHdlIGtlZXAgaXQgc2V0IGluIGJsb2Nrc1dpdGhCaXRz
LgorICAgIAorICAgIEZhc3RCaXRWZWN0b3IgbV9ibG9ja3NXaXRoQml0czsKKyAgICBDb25jdXJy
ZW50VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCaXRtYXA8TWFya2VkQmxvY2s6OmF0b21zUGVyQmxv
Y2s+Pj4gbV9iaXRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldElubGluZXMuaAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0SW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSXNvQ2VsbFNldC5o
IgorI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
aW5saW5lIGJvb2wgSXNvQ2VsbFNldDo6YWRkKEhlYXBDZWxsKiBjZWxsKQoreworICAgIEF0b21J
bmRpY2VzIGF0b21JbmRpY2VzKGNlbGwpOworICAgIGF1dG8mIGJpdHNQdHJSZWYgPSBtX2JpdHNb
YXRvbUluZGljZXMuYmxvY2tJbmRleF07CisgICAgYXV0byogYml0cyA9IGJpdHNQdHJSZWYuZ2V0
KCk7CisgICAgaWYgKFVOTElLRUxZKCFiaXRzKSkKKyAgICAgICAgYml0cyA9IGFkZFNsb3coYXRv
bUluZGljZXMuYmxvY2tJbmRleCk7CisgICAgcmV0dXJuICFiaXRzLT5jb25jdXJyZW50VGVzdEFu
ZFNldChhdG9tSW5kaWNlcy5hdG9tTnVtYmVyKTsKK30KKworaW5saW5lIGJvb2wgSXNvQ2VsbFNl
dDo6cmVtb3ZlKEhlYXBDZWxsKiBjZWxsKQoreworICAgIEF0b21JbmRpY2VzIGF0b21JbmRpY2Vz
KGNlbGwpOworICAgIGF1dG8mIGJpdHNQdHJSZWYgPSBtX2JpdHNbYXRvbUluZGljZXMuYmxvY2tJ
bmRleF07CisgICAgYXV0byogYml0cyA9IGJpdHNQdHJSZWYuZ2V0KCk7CisgICAgaWYgKCFiaXRz
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGJpdHMtPmNvbmN1cnJlbnRUZXN0
QW5kQ2xlYXIoYXRvbUluZGljZXMuYXRvbU51bWJlcik7Cit9CisKK2lubGluZSBib29sIElzb0Nl
bGxTZXQ6OmNvbnRhaW5zKEhlYXBDZWxsKiBjZWxsKSBjb25zdAoreworICAgIEF0b21JbmRpY2Vz
IGF0b21JbmRpY2VzKGNlbGwpOworICAgIGF1dG8qIGJpdHMgPSBtX2JpdHNbYXRvbUluZGljZXMu
YmxvY2tJbmRleF0uZ2V0KCk7CisgICAgaWYgKGJpdHMpCisgICAgICAgIHJldHVybiBiaXRzLT5n
ZXQoYXRvbUluZGljZXMuYXRvbU51bWJlcik7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jPgordm9pZCBJc29DZWxsU2V0Ojpmb3JFYWNoTWFya2VkQ2VsbChj
b25zdCBGdW5jJiBmdW5jKQoreworICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yID0gbV9z
dWJzcGFjZS5tX2FsbG9jYXRvcjsKKyAgICAoYWxsb2NhdG9yLm1fbWFya2luZ05vdEVtcHR5ICYg
bV9ibG9ja3NXaXRoQml0cykuZm9yRWFjaFNldEJpdCgKKyAgICAgICAgWyZdIChzaXplX3QgYmxv
Y2tJbmRleCkgeworICAgICAgICAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2sgPSBhbGxv
Y2F0b3IubV9ibG9ja3NbYmxvY2tJbmRleF07CisKKyAgICAgICAgICAgIGF1dG8qIGJpdHMgPSBt
X2JpdHNbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBib29sIGhhZEJpdHMgPSBmYWxz
ZTsKKyAgICAgICAgICAgIGJsb2NrLT5mb3JFYWNoTWFya2VkQ2VsbCgKKyAgICAgICAgICAgICAg
ICBbJl0gKHNpemVfdCBhdG9tTnVtYmVyLCBIZWFwQ2VsbCogY2VsbCwgSGVhcENlbGw6OktpbmQg
a2luZCkgLT4gSXRlcmF0aW9uU3RhdHVzIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJpdHMt
PmdldChhdG9tTnVtYmVyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgRm9yRWFjaFJlc3Vs
dCByZXN1bHQgPSBmdW5jKGNlbGwsIGtpbmQpOworICAgICAgICAgICAgICAgICAgICAgICAgc3dp
dGNoIChyZXN1bHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRm9yRWFjaFJlc3Vs
dDo6Q29udGludWU6CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEZvckVhY2hSZXN1bHQ6
OkJyZWFrOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhZEJpdHMgPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSBGb3JFYWNoUmVzdWx0OjpSZW1vdmVBbmRDb250aW51ZToKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgRm9yRWFjaFJlc3VsdDo6UmVtb3ZlQW5kQnJlYWs6CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYml0cy0+Y2xlYXIoYXRvbU51bWJlcik7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKHJlc3VsdCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSBGb3JFYWNoUmVzdWx0OjpDb250aW51ZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgRm9yRWFjaFJlc3VsdDo6UmVtb3ZlQW5kQ29udGludWU6CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEZvckVhY2hSZXN1
bHQ6OkJyZWFrOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBGb3JFYWNoUmVzdWx0OjpS
ZW1vdmVBbmRCcmVhazoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0
aW9uU3RhdHVzOjpEb25lOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNv
bnRpbnVlOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaWYgKCFoYWRCaXRzKSB7
CisgICAgICAgICAgICAgICAgbV9iaXRzW2Jsb2NrSW5kZXhdID0gbnVsbHB0cjsKKyAgICAgICAg
ICAgICAgICBtX2Jsb2Nrc1dpdGhCaXRzW2Jsb2NrSW5kZXhdID0gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmNwcAkocmV2aXNpb24gMjI1NzI1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02Nyw1ICs2NywyOSBAQCB2b2lkKiBJc29TdWJzcGFjZTo6YWxsb2NhdGVOb25WaXJ0
dWFsKHNpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAordm9pZCBJc29TdWJzcGFjZTo6ZGlkUmVz
aXplQml0cyhzaXplX3QgYmxvY2tJbmRleCkKK3sKKyAgICBtX2NlbGxTZXRzLmZvckVhY2goCisg
ICAgICAgIFsmXSAoSXNvQ2VsbFNldCogc2V0KSB7CisgICAgICAgICAgICBzZXQtPmRpZFJlc2l6
ZUJpdHMoYmxvY2tJbmRleCk7CisgICAgICAgIH0pOworfQorCit2b2lkIElzb1N1YnNwYWNlOjpk
aWRSZW1vdmVCbG9jayhzaXplX3QgYmxvY2tJbmRleCkKK3sKKyAgICBtX2NlbGxTZXRzLmZvckVh
Y2goCisgICAgICAgIFsmXSAoSXNvQ2VsbFNldCogc2V0KSB7CisgICAgICAgICAgICBzZXQtPmRp
ZFJlbW92ZUJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICB9KTsKK30KKwordm9pZCBJc29TdWJz
cGFjZTo6ZGlkQmVnaW5Td2VlcGluZ1RvRnJlZUxpc3QoTWFya2VkQmxvY2s6OkhhbmRsZSogYmxv
Y2spCit7CisgICAgbV9jZWxsU2V0cy5mb3JFYWNoKAorICAgICAgICBbJl0gKElzb0NlbGxTZXQq
IHNldCkgeworICAgICAgICAgICAgc2V0LT5zd2VlcFRvRnJlZUxpc3QoYmxvY2spOworICAgICAg
ICB9KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSXNvU3Vic3BhY2UuaAkocmV2aXNpb24gMjI1NzI1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTAgKzI3
LDEyIEBACiAKICNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJTdWJzcGFj
ZS5oIgorI2luY2x1ZGUgPHd0Zi9TaW5nbHlMaW5rZWRMaXN0V2l0aFRhaWwuaD4KIAogbmFtZXNw
YWNlIEpTQyB7CiAKIGNsYXNzIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I7CitjbGFzcyBJc29D
ZWxsU2V0OwogCiBjbGFzcyBJc29TdWJzcGFjZSA6IHB1YmxpYyBTdWJzcGFjZSB7CiBwdWJsaWM6
CkBAIC00Niw5ICs0OCwxNiBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCog
YWxsb2NhdGVOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJy
YWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpOwogCiBwcml2YXRl
OgorICAgIGZyaWVuZCBjbGFzcyBJc29DZWxsU2V0OworICAgIAorICAgIHZvaWQgZGlkUmVzaXpl
Qml0cyhzaXplX3QgbmV3U2l6ZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRSZW1vdmVCbG9jayhz
aXplX3QgYmxvY2tJbmRleCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRCZWdpblN3ZWVwaW5nVG9G
cmVlTGlzdChNYXJrZWRCbG9jazo6SGFuZGxlKikgb3ZlcnJpZGU7CisgICAgCiAgICAgc2l6ZV90
IG1fc2l6ZTsKICAgICBNYXJrZWRBbGxvY2F0b3IgbV9hbGxvY2F0b3I7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I+IG1faXNvQWxpZ25lZE1lbW9yeUFsbG9j
YXRvcjsKKyAgICBTZW50aW5lbExpbmtlZExpc3Q8SXNvQ2VsbFNldCwgQmFzaWNSYXdTZW50aW5l
bE5vZGU8SXNvQ2VsbFNldD4+IG1fY2VsbFNldHM7CiB9OwogCiBpbmxpbmUgTWFya2VkQWxsb2Nh
dG9yKiBJc29TdWJzcGFjZTo6YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplX3Qgc2l6ZSwgQWxs
b2NhdG9yRm9yTW9kZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFs
bG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjI1NzI1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYxLDYgKzI2
MSw3IEBAIHZvaWQgTWFya2VkQWxsb2NhdG9yOjphZGRCbG9jayhNYXJrZWRCbG8KICAgICAgICAg
ICAgIEFTU0VSVChtX2Jsb2Nrcy5jYXBhY2l0eSgpID4gb2xkQ2FwYWNpdHkpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2JpdHZlY3RvckxvY2spOworICAg
ICAgICAgICAgc3Vic3BhY2UoKS0+ZGlkUmVzaXplQml0cyhtX2Jsb2Nrcy5jYXBhY2l0eSgpKTsK
ICAgICAgICAgICAgIGZvckVhY2hCaXRWZWN0b3IoCiAgICAgICAgICAgICAgICAgbG9ja2VyLAog
ICAgICAgICAgICAgICAgIFsmXSAoRmFzdEJpdFZlY3RvciYgdmVjdG9yKSB7CkBAIC0yOTAsNyAr
MjkxLDkgQEAgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OnJlbW92ZUJsb2NrKE1hcmtlZAogewogICAg
IEFTU0VSVChibG9jay0+YWxsb2NhdG9yKCkgPT0gdGhpcyk7CiAgICAgQVNTRVJUKG1fYmxvY2tz
W2Jsb2NrLT5pbmRleCgpXSA9PSBibG9jayk7Ci0KKyAgICAKKyAgICBzdWJzcGFjZSgpLT5kaWRS
ZW1vdmVCbG9jayhibG9jay0+aW5kZXgoKSk7CisgICAgCiAgICAgbV9ibG9ja3NbYmxvY2stPmlu
ZGV4KCldID0gbnVsbHB0cjsKICAgICBtX2ZyZWVCbG9ja0luZGljZXMuYXBwZW5kKGJsb2NrLT5p
bmRleCgpKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFs
bG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZEFsbG9jYXRvci5oCShyZXZpc2lvbiAyMjU3MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgR0NEZWZlcnJhbENvbnRleHQ7CiBjbGFzcyBIZWFwOwor
Y2xhc3MgSXNvQ2VsbFNldDsKIGNsYXNzIE1hcmtlZFNwYWNlOwogY2xhc3MgTExJbnRPZmZzZXRz
RXh0cmFjdG9yOwogCkBAIC0xNjIsNiArMTYzLDcgQEAgcHVibGljOgogICAgIHZvaWQgZHVtcEJp
dHMoUHJpbnRTdHJlYW0mID0gV1RGOjpkYXRhRmlsZSgpKTsKICAgICAKIHByaXZhdGU6CisgICAg
ZnJpZW5kIGNsYXNzIElzb0NlbGxTZXQ7CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtlZEJsb2NrOwog
ICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2UoR0NEZWZl
cnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvcklubGlu
ZXMuaAkocmV2aXNpb24gMjI1NzI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkQWxsb2NhdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAK
ICNpbmNsdWRlICJGcmVlTGlzdElubGluZXMuaCIKICNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3Iu
aCIKKyNpbmNsdWRlICJWTS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkocmV2aXNpb24gMjI1NzI1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMDEsMTEgKzMwMSw2IEBAIHNpemVfdCBNYXJrZWRCbG9jazo6bWFya0NvdW50KCkKICAg
ICByZXR1cm4gYXJlTWFya3NTdGFsZSgpID8gMCA6IG1fbWFya3MuY291bnQoKTsKIH0KIAotYm9v
bCBNYXJrZWRCbG9jazo6SGFuZGxlOjppc0VtcHR5KCkKLXsKLSAgICByZXR1cm4gbV9hbGxvY2F0
b3ItPmlzRW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzKTsKLX0KLQogdm9pZCBNYXJrZWRC
bG9jazo6Y2xlYXJIYXNBbnlNYXJrZWQoKQogewogICAgIG1fYmlhc2VkTWFya0NvdW50ID0gbV9t
YXJrQ291bnRCaWFzOwpAQCAtNDAyLDE2ICszOTcsMTQgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFu
ZGxlOjpzd2VlcChGcmVlTGlzdAogICAgIGlmIChzd2VlcE1vZGUgPT0gU3dlZXBPbmx5ICYmICFu
ZWVkc0Rlc3RydWN0aW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoVU5MSUtFTFkobV9p
c0ZyZWVMaXN0ZWQpKSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHN3ZWVwTW9kZSA9PSBTd2Vl
cFRvRnJlZUxpc3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIEFTU0VSVCgh
bV9hbGxvY2F0b3ItPmlzQWxsb2NhdGVkKE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcykpOworICAg
IFJFTEVBU0VfQVNTRVJUKCFtX2lzRnJlZUxpc3RlZCk7CisgICAgUkVMRUFTRV9BU1NFUlQoIWlz
QWxsb2NhdGVkKCkpOwogICAgIAogICAgIGlmIChzcGFjZSgpLT5pc01hcmtpbmcoKSkKICAgICAg
ICAgYmxvY2soKS5tX2xvY2subG9jaygpOwogICAgIAorICAgIHN1YnNwYWNlKCktPmRpZEJlZ2lu
U3dlZXBpbmdUb0ZyZWVMaXN0KHRoaXMpOworICAgIAogICAgIGlmIChuZWVkc0Rlc3RydWN0aW9u
KSB7CiAgICAgICAgIHN1YnNwYWNlKCktPmZpbmlzaFN3ZWVwKCp0aGlzLCBmcmVlTGlzdCk7CiAg
ICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJs
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxv
Y2suaAkocmV2aXNpb24gMjI1NzI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTYyLDYgKzE2Miw4IEBAIHB1YmxpYzoKICAg
ICAgICAgc2l6ZV90IG1hcmtDb3VudCgpOwogICAgICAgICBzaXplX3Qgc2l6ZSgpOwogICAgICAg
ICAKKyAgICAgICAgYm9vbCBpc0FsbG9jYXRlZCgpOworICAgICAgICAKICAgICAgICAgYm9vbCBp
c0xpdmUoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIEhlYXBWZXJzaW9uIG5ld2x5QWxsb2Nh
dGVkVmVyc2lvbiwgYm9vbCBpc01hcmtpbmcsIGNvbnN0IEhlYXBDZWxsKik7CiAgICAgICAgIGlu
bGluZSBib29sIGlzTGl2ZUNlbGwoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIEhlYXBWZXJz
aW9uIG5ld2x5QWxsb2NhdGVkVmVyc2lvbiwgYm9vbCBpc01hcmtpbmcsIGNvbnN0IHZvaWQqKTsK
IApAQCAtMTczLDYgKzE3NSw3IEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCBpc05ld2x5QWxsb2Nh
dGVkKGNvbnN0IHZvaWQqKTsKICAgICAgICAgdm9pZCBzZXROZXdseUFsbG9jYXRlZChjb25zdCB2
b2lkKik7CiAgICAgICAgIHZvaWQgY2xlYXJOZXdseUFsbG9jYXRlZChjb25zdCB2b2lkKik7Cisg
ICAgICAgIGNvbnN0IEJpdG1hcDxhdG9tc1BlckJsb2NrPiYgbmV3bHlBbGxvY2F0ZWQoKSBjb25z
dDsKICAgICAgICAgCiAgICAgICAgIEhlYXBWZXJzaW9uIG5ld2x5QWxsb2NhdGVkVmVyc2lvbigp
IGNvbnN0IHsgcmV0dXJuIG1fbmV3bHlBbGxvY2F0ZWRWZXJzaW9uOyB9CiAgICAgICAgIApAQCAt
MjI3LDcgKzIzMCw3IEBAIHB1YmxpYzoKICAgICAgICAgc2l6ZV90IG1fYXRvbXNQZXJDZWxsIHsg
c3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSB9OwogICAgICAgICBzaXplX3QgbV9l
bmRBdG9tIHsgc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSB9OyAvLyBUaGlzIGlz
IGEgZnV6enkgZW5kLiBBbHdheXMgdGVzdCBmb3IgPCBtX2VuZEF0b20uCiAgICAgICAgICAgICAK
LSAgICAgICAgV1RGOjpCaXRtYXA8YXRvbXNQZXJCbG9jaz4gbV9uZXdseUFsbG9jYXRlZDsKKyAg
ICAgICAgQml0bWFwPGF0b21zUGVyQmxvY2s+IG1fbmV3bHlBbGxvY2F0ZWQ7CiAgICAgICAgICAg
ICAKICAgICAgICAgQWxsb2NhdG9yQXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7CiAgICAgICAgIGJv
b2wgbV9pc0ZyZWVMaXN0ZWQgeyBmYWxzZSB9OwpAQCAtMjk0LDYgKzI5Nyw4IEBAIHB1YmxpYzoK
ICAgICBib29sIGlzTWFya2VkUmF3KGNvbnN0IHZvaWQqIHApOwogICAgIEhlYXBWZXJzaW9uIG1h
cmtpbmdWZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXJraW5nVmVyc2lvbjsgfQogICAgIAor
ICAgIGNvbnN0IEJpdG1hcDxhdG9tc1BlckJsb2NrPiYgbWFya3MoKSBjb25zdDsKKyAgICAKICAg
ICBDb3VudGluZ0xvY2smIGxvY2soKSB7IHJldHVybiBtX2xvY2s7IH0KIAogcHJpdmF0ZToKQEAg
LTM0Niw3ICszNTEsNyBAQCBwcml2YXRlOgogCiAgICAgSGVhcFZlcnNpb24gbV9tYXJraW5nVmVy
c2lvbjsKIAotICAgIFdURjo6Qml0bWFwPGF0b21zUGVyQmxvY2s+IG1fbWFya3M7CisgICAgQml0
bWFwPGF0b21zUGVyQmxvY2s+IG1fbWFya3M7CiB9OwogCiBpbmxpbmUgTWFya2VkQmxvY2s6Okhh
bmRsZSYgTWFya2VkQmxvY2s6OmhhbmRsZSgpCkBAIC01MzIsNiArNTM3LDExIEBAIGlubGluZSBi
b29sIE1hcmtlZEJsb2NrOjp0ZXN0QW5kU2V0TWFya2UKICAgICByZXR1cm4gbV9tYXJrcy5jb25j
dXJyZW50VGVzdEFuZFNldChhdG9tTnVtYmVyKHApLCBkZXBlbmRlbmN5KTsKIH0KIAoraW5saW5l
IGNvbnN0IEJpdG1hcDxNYXJrZWRCbG9jazo6YXRvbXNQZXJCbG9jaz4mIE1hcmtlZEJsb2NrOjpt
YXJrcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbWFya3M7Cit9CisKIGlubGluZSBib29sIE1h
cmtlZEJsb2NrOjpIYW5kbGU6OmlzTmV3bHlBbGxvY2F0ZWQoY29uc3Qgdm9pZCogcCkKIHsKICAg
ICByZXR1cm4gbV9uZXdseUFsbG9jYXRlZC5nZXQobV9ibG9jay0+YXRvbU51bWJlcihwKSk7CkBA
IC01NDcsNiArNTU3LDExIEBAIGlubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmNsZWFy
TmUKICAgICBtX25ld2x5QWxsb2NhdGVkLmNsZWFyKG1fYmxvY2stPmF0b21OdW1iZXIocCkpOwog
fQogCitpbmxpbmUgY29uc3QgQml0bWFwPE1hcmtlZEJsb2NrOjphdG9tc1BlckJsb2NrPiYgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6bmV3bHlBbGxvY2F0ZWQoKSBjb25zdAoreworICAgIHJldHVybiBt
X25ld2x5QWxsb2NhdGVkOworfQorCiBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNBdG9tKGNv
bnN0IHZvaWQqIHApCiB7CiAgICAgQVNTRVJUKE1hcmtlZEJsb2NrOjppc0F0b21BbGlnbmVkKHAp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5s
aW5lcy5oCShyZXZpc2lvbiAyMjU3MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtOTEsNiArOTEsMTEgQEAgaW5s
aW5lIGJvb2wgTWFya2VkQmxvY2s6Om1hcmtzQ29udmV5TGl2ZQogICAgICAgICB8fCBNYXJrZWRT
cGFjZTo6bmV4dFZlcnNpb24obXlNYXJraW5nVmVyc2lvbikgPT0gbWFya2luZ1ZlcnNpb247CiB9
CiAKK2lubGluZSBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzQWxsb2NhdGVkKCkKK3sKKyAg
ICByZXR1cm4gbV9hbGxvY2F0b3ItPmlzQWxsb2NhdGVkKE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhp
cyk7Cit9CisKIEFMV0FZU19JTkxJTkUgYm9vbCBNYXJrZWRCbG9jazo6SGFuZGxlOjppc0xpdmUo
SGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIEhlYXBWZXJzaW9uIG5ld2x5QWxsb2NhdGVkVmVy
c2lvbiwgYm9vbCBpc01hcmtpbmcsIGNvbnN0IEhlYXBDZWxsKiBjZWxsKQogewogICAgIGlmIChh
bGxvY2F0b3IoKS0+aXNBbGxvY2F0ZWQoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzKSkKQEAgLTQz
NCw2ICs0MzksMTEgQEAgaW5saW5lIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwRGVzdHJ1Ywog
ICAgIHJldHVybiBCbG9ja0hhc05vRGVzdHJ1Y3RvcnM7CiB9CiAKK2lubGluZSBib29sIE1hcmtl
ZEJsb2NrOjpIYW5kbGU6OmlzRW1wdHkoKQoreworICAgIHJldHVybiBtX2FsbG9jYXRvci0+aXNF
bXB0eShOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMpOworfQorCiBpbmxpbmUgTWFya2VkQmxvY2s6
OkhhbmRsZTo6RW1wdHlNb2RlIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmVtcHR5TW9kZSgpCiB7CiAg
ICAgLy8gSXQncyBub3Qgb2J2aW91cywgYnV0IHRoaXMgaXMgdGhlIG9ubHkgd2F5IHRvIGtub3cg
aWYgdGhlIGJsb2NrIGlzIGVtcHR5LiBJdCdzIHRoZSBvbmx5CkBAIC00NDEsNyArNDUxLDcgQEAg
aW5saW5lIE1hcmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBNYQogICAgIC8vIC0gSXQncyB0
cnVlIHdoZW4gdGhlIGJsb2NrIGlzIGZyZXNobHkgYWxsb2NhdGVkLgogICAgIC8vIC0gSXQncyB0
cnVlIGlmIHRoZSBibG9jayBoYWQgYmVlbiBzd2VwdCBpbiB0aGUgcGFzdCwgYWxsIGRlc3RydWN0
b3JzIHdlcmUgY2FsbGVkLCBhbmQgdGhhdAogICAgIC8vICAgc3dlZXAgcHJvdmVkIHRoYXQgdGhl
IGJsb2NrIGlzIGVtcHR5LgotICAgIHJldHVybiBtX2FsbG9jYXRvci0+aXNFbXB0eShOb0xvY2tp
bmdOZWNlc3NhcnksIHRoaXMpID8gSXNFbXB0eSA6IE5vdEVtcHR5OworICAgIHJldHVybiBpc0Vt
cHR5KCkgPyBJc0VtcHR5IDogTm90RW1wdHk7CiB9CiAKIGlubGluZSBNYXJrZWRCbG9jazo6SGFu
ZGxlOjpTY3JpYmJsZU1vZGUgTWFya2VkQmxvY2s6OkhhbmRsZTo6c2NyaWJibGVNb2RlKCkKQEAg
LTUxMiwxMSArNTIyLDEyIEBAIGlubGluZSBJdGVyYXRpb25TdGF0dXMgTWFya2VkQmxvY2s6Okhh
bmQKICAgICBpZiAoYXJlTWFya3NTdGFsZSkKICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1
czo6Q29udGludWU7CiAgICAgZm9yIChzaXplX3QgaSA9IGZpcnN0QXRvbSgpOyBpIDwgbV9lbmRB
dG9tOyBpICs9IG1fYXRvbXNQZXJDZWxsKSB7Ci0gICAgICAgIEhlYXBDZWxsKiBjZWxsID0gcmVp
bnRlcnByZXRfY2FzdF9wdHI8SGVhcENlbGwqPigmbV9ibG9jay0+YXRvbXMoKVtpXSk7Ci0gICAg
ICAgIGlmICghYmxvY2suaXNNYXJrZWRSYXcoY2VsbCkpCisgICAgICAgIGlmICghYmxvY2subV9t
YXJrcy5nZXQoaSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAoZnVuY3Rv
cihjZWxsLCBraW5kKSA9PSBJdGVyYXRpb25TdGF0dXM6OkRvbmUpCisgICAgICAgIEhlYXBDZWxs
KiBjZWxsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8SGVhcENlbGwqPigmbV9ibG9jay0+YXRvbXMo
KVtpXSk7CisKKyAgICAgICAgaWYgKGZ1bmN0b3IoaSwgY2VsbCwga2luZCkgPT0gSXRlcmF0aW9u
U3RhdHVzOjpEb25lKQogICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6RG9uZTsK
ICAgICB9CiAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMjU3MjUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyNiw1ICsxMjYsMTcgQEAgUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRsZSoo
KQogICAgICAgICB9KTsKIH0KIAordm9pZCBTdWJzcGFjZTo6ZGlkUmVzaXplQml0cyhzaXplX3Qp
Cit7Cit9CisKK3ZvaWQgU3Vic3BhY2U6OmRpZFJlbW92ZUJsb2NrKHNpemVfdCkKK3sKK30KKwor
dm9pZCBTdWJzcGFjZTo6ZGlkQmVnaW5Td2VlcGluZ1RvRnJlZUxpc3QoTWFya2VkQmxvY2s6Okhh
bmRsZSopCit7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHJldmlzaW9uIDIyNTcyNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTkzLDYgKzkzLDEwIEBA
IHB1YmxpYzoKICAgICAKICAgICBTdWJzcGFjZSogbmV4dFN1YnNwYWNlSW5BbGlnbmVkTWVtb3J5
QWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9uZXh0U3Vic3BhY2VJbkFsaWduZWRNZW1vcnlB
bGxvY2F0b3I7IH0KICAgICB2b2lkIHNldE5leHRTdWJzcGFjZUluQWxpZ25lZE1lbW9yeUFsbG9j
YXRvcihTdWJzcGFjZSogc3Vic3BhY2UpIHsgbV9uZXh0U3Vic3BhY2VJbkFsaWduZWRNZW1vcnlB
bGxvY2F0b3IgPSBzdWJzcGFjZTsgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBkaWRSZXNpemVC
aXRzKHNpemVfdCBuZXdTaXplKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVtb3ZlQmxvY2soc2l6
ZV90IGJsb2NrSW5kZXgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRCZWdpblN3ZWVwaW5nVG9GcmVl
TGlzdChNYXJrZWRCbG9jazo6SGFuZGxlKik7CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGluaXRp
YWxpemUoSGVhcENlbGxUeXBlKiwgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciopOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgJKHJldmlzaW9uIDIy
NTcyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3IEBAIHZvaWQgU3Vic3BhY2U6OmZvckVhY2hNYXJr
ZWRDZWxsKGNvbnN0IEYKICAgICBmb3JFYWNoTm90RW1wdHlNYXJrZWRCbG9jaygKICAgICAgICAg
WyZdIChNYXJrZWRCbG9jazo6SGFuZGxlKiBoYW5kbGUpIHsKICAgICAgICAgICAgIGhhbmRsZS0+
Zm9yRWFjaE1hcmtlZENlbGwoCi0gICAgICAgICAgICAgICAgWyZdIChIZWFwQ2VsbCogY2VsbCwg
SGVhcENlbGw6OktpbmQga2luZCkgLT4gSXRlcmF0aW9uU3RhdHVzIHsgCisgICAgICAgICAgICAg
ICAgWyZdIChzaXplX3QsIEhlYXBDZWxsKiBjZWxsLCBIZWFwQ2VsbDo6S2luZCBraW5kKSAtPiBJ
dGVyYXRpb25TdGF0dXMgewogICAgICAgICAgICAgICAgICAgICBmdW5jKGNlbGwsIGtpbmQpOwog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKICAg
ICAgICAgICAgICAgICB9KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
ZmVycmVkU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbmZlcnJlZFN0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDIyNTcyNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkU3RydWN0dXJlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjcsNjQgKzI3LDE3IEBACiAjaW5jbHVkZSAiSW5mZXJyZWRTdHJ1Y3R1cmUuaCIK
IAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5l
cy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotY29uc3QgQ2xhc3NJbmZvIEluZmVycmVkU3RydWN0
dXJlOjpzX2luZm8gPSB7ICJJbmZlcnJlZFN0cnVjdHVyZSIsIG51bGxwdHIsIG51bGxwdHIsIG51
bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSW5mZXJyZWRTdHJ1Y3R1cmUpIH07Ci0KLUluZmVy
cmVkU3RydWN0dXJlKiBJbmZlcnJlZFN0cnVjdHVyZTo6Y3JlYXRlKFZNJiB2bSwgR0NEZWZlcnJh
bENvbnRleHQmIGRlZmVycmFsQ29udGV4dCwgSW5mZXJyZWRUeXBlKiBwYXJlbnQsIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQotewotICAgIEluZmVycmVkU3RydWN0dXJlKiByZXN1bHQgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxJbmZlcnJlZFN0cnVjdHVyZT4odm0uaGVhcCwgJmRlZmVycmFs
Q29udGV4dCkpIEluZmVycmVkU3RydWN0dXJlKHZtLCBwYXJlbnQsIHN0cnVjdHVyZSk7Ci0gICAg
cmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSwgc3RydWN0dXJlKTsKLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi12b2lkIEluZmVycmVkU3RydWN0dXJlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKLXsK
LSAgICBJbmZlcnJlZFN0cnVjdHVyZSogaW5mZXJyZWRTdHJ1Y3R1cmUgPSBzdGF0aWNfY2FzdDxJ
bmZlcnJlZFN0cnVjdHVyZSo+KGNlbGwpOwotICAgIGluZmVycmVkU3RydWN0dXJlLT5JbmZlcnJl
ZFN0cnVjdHVyZTo6fkluZmVycmVkU3RydWN0dXJlKCk7Ci19Ci0KLVN0cnVjdHVyZSogSW5mZXJy
ZWRTdHJ1Y3R1cmU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQotewotICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7Ci19Ci0KLXZvaWQgSW5mZXJyZWRTdHJ1Y3R1cmU6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBJbmZl
cnJlZFN0cnVjdHVyZSogaW5mZXJyZWRTdHJ1Y3R1cmUgPSBqc0Nhc3Q8SW5mZXJyZWRTdHJ1Y3R1
cmUqPihjZWxsKTsKLSAgICAKLSAgICB2aXNpdG9yLmFwcGVuZChpbmZlcnJlZFN0cnVjdHVyZS0+
bV9wYXJlbnQpOwotfQotCi12b2lkIEluZmVycmVkU3RydWN0dXJlOjpmaW5hbGl6ZVVuY29uZGl0
aW9uYWxseShWTSYpCi17Ci0gICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkKG1fcGFyZW50LmdldCgp
KSk7Ci0gICAgCi0gICAgLy8gTW9ub3RvbmljaXR5IGVuc3VyZXMgdGhhdCB3ZSBzaG91bGRuJ3Qg
c2VlIGEgbmV3IHN0cnVjdHVyZSB0aGF0IGlzIGRpZmZlcmVudCBmcm9tIHVzLCBidXQgd2UKLSAg
ICAvLyBjb3VsZCBoYXZlIGJlZW4gbnVsbGVkLiBXZSBvbmx5IHJlbHkgb24gaXQgYmVpbmcgdGhl
IG51bGwgY2FzZSBvbmx5IGluIGRlYnVnLgotICAgIGlmICh0aGlzID09IG1fcGFyZW50LT5tX3N0
cnVjdHVyZS5nZXQoKSkgewotICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fc3RydWN0dXJl
LmdldCgpKSkKLSAgICAgICAgICAgIG1fcGFyZW50LT5yZW1vdmVTdHJ1Y3R1cmUoKTsKLSAgICB9
IGVsc2UKLSAgICAgICAgQVNTRVJUKCFtX3BhcmVudC0+bV9zdHJ1Y3R1cmUpOwotICAgIAotICAg
IC8vIFdlJ2xsIGdldCBkZWxldGVkIG9uIHRoZSBuZXh0IEdDLiBUaGF0J3MgYSBsaXR0bGUgd2Vp
cmQsIGJ1dCBub3QgaGFybWZ1bCwgc2luY2UgaXQgb25seSBoYXBwZW5zCi0gICAgLy8gd2hlbiB0
aGUgSW5mZXJyZWRUeXBlIHRoYXQgd2Ugd2VyZSBwYWlyZWQgdG8gd291bGQgaGF2ZSBzdXJ2aXZl
ZC4gSXQganVzdCBtZWFucyBhIHRpbnkgbWlzc2VkCi0gICAgLy8gb3Bwb3J0dW5pdHkgZm9yIGhl
YXAgc2l6ZSByZWR1Y3Rpb24uCi19CitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW5mZXJy
ZWRTdHJ1Y3R1cmUpOwogCiBJbmZlcnJlZFN0cnVjdHVyZTo6SW5mZXJyZWRTdHJ1Y3R1cmUoVk0m
IHZtLCBJbmZlcnJlZFR5cGUqIHBhcmVudCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgOiBC
YXNlKHZtLCB2bS5pbmZlcnJlZFN0cnVjdHVyZVN0cnVjdHVyZS5nZXQoKSkKLSAgICAsIG1fcGFy
ZW50KHZtLCB0aGlzLCBwYXJlbnQpCi0gICAgLCBtX3N0cnVjdHVyZSh2bSwgdGhpcywgc3RydWN0
dXJlKQotewotfQotCi12b2lkIEluZmVycmVkU3RydWN0dXJlOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogcGFyZW50KHBhcmVudCkKKyAgICAsIHN0
cnVjdHVyZSh2bSwgcGFyZW50LCBzdHJ1Y3R1cmUpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24odm0pOwotICAgIHN0cnVjdHVyZS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoJm1fd2F0Y2hw
b2ludCk7CisgICAgc3RydWN0dXJlLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludCgmd2F0Y2hwb2lu
dCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFN0cnVjdHVyZS5oCShyZXZpc2lvbiAyMjU3MjUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFN0cnVjdHVyZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw1MSArMjYsMjMgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAi
SW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50LmgiCi0jaW5jbHVkZSAiSlNDZWxsLmgiCi0jaW5j
bHVkZSAiVk0uaCIKKyNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKKyNpbmNsdWRlIDx3dGYvSXNv
TWFsbG9jLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBJbmZlcnJlZFR5cGU7CitjbGFz
cyBTdHJ1Y3R1cmU7CiAKLWNsYXNzIEluZmVycmVkU3RydWN0dXJlIGZpbmFsIDogcHVibGljIEpT
Q2VsbCB7CitjbGFzcyBJbmZlcnJlZFN0cnVjdHVyZSBmaW5hbCB7CisgICAgV1RGX01BS0VfSVNP
X0FMTE9DQVRFRChJbmZlcnJlZFN0cnVjdHVyZSk7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0Nl
bGwgQmFzZTsKLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZT4KLSAgICBzdGF0
aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biAmdm0uaW5mZXJyZWRTdHJ1Y3R1cmVTcGFjZTsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIElu
ZmVycmVkU3RydWN0dXJlKiBjcmVhdGUoVk0mLCBHQ0RlZmVycmFsQ29udGV4dCYsIEluZmVycmVk
VHlwZSogcGFyZW50LCBTdHJ1Y3R1cmUqKTsKLSAgICAKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBu
ZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKLSAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCop
OwotICAgIAotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IFN0cnVj
dHVyZUlzSW1tb3J0YWwgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKLQotICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90
b3R5cGUpOwotICAgIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICAKLSAgICBJbmZlcnJlZFR5cGUq
IHBhcmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50LmdldCgpOyB9Ci0gICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZS5nZXQoKTsgfQotICAgIAot
ICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mKTsKLQotcHJpdmF0ZToKICAgICBJ
bmZlcnJlZFN0cnVjdHVyZShWTSYsIEluZmVycmVkVHlwZSogcGFyZW50LCBTdHJ1Y3R1cmUqKTsK
KworICAgIEluZmVycmVkVHlwZSogcGFyZW50OworICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+
IHN0cnVjdHVyZTsKICAgICAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgU3RydWN0dXJl
Kik7Ci0gICAgCi0gICAgV3JpdGVCYXJyaWVyPEluZmVycmVkVHlwZT4gbV9wYXJlbnQ7Ci0gICAg
V3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7Ci0gICAgCi0gICAgZnJpZW5kIGNs
YXNzIEluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludDsKLSAgICBJbmZlcnJlZFN0cnVjdHVyZVdh
dGNocG9pbnQgbV93YXRjaHBvaW50OworICAgIEluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludCB3
YXRjaHBvaW50OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkU3RydWN0dXJlV2F0
Y2hwb2ludC5jcHAJKHJldmlzaW9uIDIyNTcyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0luZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM0LDEyICszNCwxNCBAQCB2b2lkIEluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludDo6ZmlyZUlu
CiB7CiAgICAgSW5mZXJyZWRTdHJ1Y3R1cmUqIGluZmVycmVkU3RydWN0dXJlID0KICAgICAgICAg
Yml0d2lzZV9jYXN0PEluZmVycmVkU3RydWN0dXJlKj4oCi0gICAgICAgICAgICBiaXR3aXNlX2Nh
c3Q8Y2hhcio+KHRoaXMpIC0gT0JKRUNUX09GRlNFVE9GKEluZmVycmVkU3RydWN0dXJlLCBtX3dh
dGNocG9pbnQpKTsKKyAgICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgLSBPQkpF
Q1RfT0ZGU0VUT0YoSW5mZXJyZWRTdHJ1Y3R1cmUsIHdhdGNocG9pbnQpKTsKIAotICAgIGlmICgh
aW5mZXJyZWRTdHJ1Y3R1cmUtPmlzTGl2ZSgpKQorICAgIEluZmVycmVkVHlwZSogaW5mZXJyZWRU
eXBlID0gaW5mZXJyZWRTdHJ1Y3R1cmUtPnBhcmVudDsKKyAgICAKKyAgICBpZiAoIWluZmVycmVk
VHlwZS0+aXNMaXZlKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBpbmZlcnJlZFN0cnVj
dHVyZS0+bV9wYXJlbnQtPnJlbW92ZVN0cnVjdHVyZSgpOworICAgIGluZmVycmVkVHlwZS0+cmVt
b3ZlU3RydWN0dXJlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuY3BwCShyZXZpc2lvbiAyMjU3
MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiSW5mZXJyZWRUeXBlLmgiCiAKLSNpbmNsdWRlICJHQ0RlZmVycmFsQ29udGV4dElubGlu
ZXMuaCIKKyNpbmNsdWRlICJJc29DZWxsU2V0SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC04Niw3ICs4Niw4IEBAIFN0cnVjdHVyZSogSW5m
ZXJyZWRUeXBlOjpjcmVhdGVTdHJ1Y3R1cmUKIHZvaWQgSW5mZXJyZWRUeXBlOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSW5mZXJyZWRU
eXBlKiBpbmZlcnJlZFR5cGUgPSBqc0Nhc3Q8SW5mZXJyZWRUeXBlKj4oY2VsbCk7Ci0gICAgdmlz
aXRvci5hcHBlbmQoaW5mZXJyZWRUeXBlLT5tX3N0cnVjdHVyZSk7CisgICAgaWYgKGluZmVycmVk
VHlwZS0+bV9zdHJ1Y3R1cmUpCisgICAgICAgIHZpc2l0b3Iudm0oKS5pbmZlcnJlZFR5cGVzV2l0
aEZpbmFsaXplcnMuYWRkKGluZmVycmVkVHlwZSk7CiB9CiAKIEluZmVycmVkVHlwZTo6S2luZCBJ
bmZlcnJlZFR5cGU6OmtpbmRGb3JGbGFncyhQdXRCeUlkRmxhZ3MgZmxhZ3MpCkBAIC0zOTksNyAr
NDAwLDYgQEAgYm9vbCBJbmZlcnJlZFR5cGU6OndpbGxTdG9yZVZhbHVlU2xvdyhWTQogICAgIERl
c2NyaXB0b3IgbXlUeXBlOwogICAgIGJvb2wgcmVzdWx0OwogICAgIHsKLSAgICAgICAgR0NEZWZl
cnJhbENvbnRleHQgZGVmZXJyYWxDb250ZXh0KHZtLmhlYXApOwogICAgICAgICBDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAgIG9sZFR5cGUgPSBkZXNjcmlwdG9yKGxv
Y2tlcik7CiAgICAgICAgIG15VHlwZSA9IERlc2NyaXB0b3I6OmZvclZhbHVlKHZhbHVlKTsKQEAg
LTQwOCw3ICs0MDgsNyBAQCBib29sIEluZmVycmVkVHlwZTo6d2lsbFN0b3JlVmFsdWVTbG93KFZN
CiAgICAgICAgIAogICAgICAgICBBU1NFUlQob2xkVHlwZSAhPSBteVR5cGUpOyAvLyBUaGUgdHlw
ZSBtdXN0IGhhdmUgY2hhbmdlZCBpZiB3ZSdyZSBvbiB0aGUgc2xvdyBwYXRoLgogCi0gICAgICAg
IGJvb2wgc2V0UmVzdWx0ID0gc2V0KGRlZmVycmFsQ29udGV4dCwgbG9ja2VyLCB2bSwgbXlUeXBl
KTsKKyAgICAgICAgYm9vbCBzZXRSZXN1bHQgPSBzZXQobG9ja2VyLCB2bSwgbXlUeXBlKTsKICAg
ICAgICAgcmVzdWx0ID0ga2luZChsb2NrZXIpICE9IFRvcDsKICAgICAgICAgaWYgKCFzZXRSZXN1
bHQpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNDIzLDEwICs0MjMsOSBAQCB2b2lk
IEluZmVycmVkVHlwZTo6bWFrZVRvcFNsb3coVk0mIHZtLCBQCiB7CiAgICAgRGVzY3JpcHRvciBv
bGRUeXBlOwogICAgIHsKLSAgICAgICAgR0NEZWZlcnJhbENvbnRleHQgZGVmZXJyYWxDb250ZXh0
KHZtLmhlYXApOwogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAg
ICAgICAgIG9sZFR5cGUgPSBkZXNjcmlwdG9yKGxvY2tlcik7Ci0gICAgICAgIGlmICghc2V0KGRl
ZmVycmFsQ29udGV4dCwgbG9ja2VyLCB2bSwgVG9wKSkKKyAgICAgICAgaWYgKCFzZXQobG9ja2Vy
LCB2bSwgVG9wKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQzNCwxNCArNDMz
LDggQEAgdm9pZCBJbmZlcnJlZFR5cGU6Om1ha2VUb3BTbG93KFZNJiB2bSwgUAogICAgIG1fd2F0
Y2hwb2ludFNldC5maXJlQWxsKHZtLCBkZXRhaWwpOwogfQogCi1ib29sIEluZmVycmVkVHlwZTo6
c2V0KEdDRGVmZXJyYWxDb250ZXh0JiBkZWZlcnJhbENvbnRleHQsIGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIERlc2NyaXB0b3IgbmV3RGVzY3JpcHRvcikKK2Jvb2wg
SW5mZXJyZWRUeXBlOjpzZXQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2
bSwgRGVzY3JpcHRvciBuZXdEZXNjcmlwdG9yKQogewotICAgIC8vIFdlIHdpbGwgdHJpZ2dlciB3
cml0ZSBiYXJyaWVycyB3aGlsZSBob2xkaW5nIG91ciBsb2NrLiBDdXJyZW50bHksIHdyaXRlIGJh
cnJpZXJzIGRvbid0IEdDLCBidXQgdGhhdAotICAgIC8vIGNvdWxkIGNoYW5nZS4gSWYgaXQgZG9l
cywgd2UgZG9uJ3Qgd2FudCB0byBkZWFkbG9jay4gTm90ZSB0aGF0IHdlIGNvdWxkIGhhdmUgdXNl
ZAotICAgIC8vIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBpbiB0aGUgY2FsbGVyLCBidXQgdGhl
IGNhbGxlciBpcyBvbiBhIGZhc3QgcGF0aCBzbyBtYXliZSB0aGF0IHdvdWxkbid0IGJlCi0gICAg
Ly8gYSBnb29kIGlkZWEuCi0gICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhlYXApOwot
ICAgIAogICAgIC8vIEJlIGRlZmVuc2l2ZTogaWYgd2UncmUgbm90IHJlYWxseSBjaGFuZ2luZyB0
aGUgdHlwZSwgdGhlbiB3ZSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nLgogICAgIGlmIChkZXNj
cmlwdG9yKGxvY2tlcikgPT0gbmV3RGVzY3JpcHRvcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtNDY5LDE5ICs0NjIsMTMgQEAgYm9vbCBJbmZlcnJlZFR5cGU6OnNldChHQ0RlZmVycmFsQ29u
dGV4dAogICAgICAgICBzaG91bGRGaXJlV2F0Y2hwb2ludFNldCA9IHRydWU7CiAgICAgfQogCi0g
ICAgLy8gUmVtb3ZlIHRoZSBvbGQgSW5mZXJyZWRTdHJ1Y3R1cmUgb2JqZWN0IGlmIHdlIG5vIGxv
bmdlciBuZWVkIGl0LgogICAgIGlmICghbmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSkKLSAgICAg
ICAgbV9zdHJ1Y3R1cmUuY2xlYXIoKTsKLQotICAgIC8vIEFkZCBhIG5ldyBJbmZlcnJlZFN0cnVj
dHVyZSBvYmplY3QgaWYgd2UgbmVlZCBvbmUgbm93LgotICAgIGlmIChuZXdEZXNjcmlwdG9yLnN0
cnVjdHVyZSgpKSB7Ci0gICAgICAgIGlmIChtX3N0cnVjdHVyZSkgewotICAgICAgICAgICAgLy8g
V2Ugc2hvdWxkIGFncmVlIG9uIHRoZSBzdHJ1Y3R1cmVzIGlmIHdlIGdldCBoZXJlLgotICAgICAg
ICAgICAgQVNTRVJUKG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkgPT0gbV9zdHJ1Y3R1cmUtPnN0
cnVjdHVyZSgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGF1dG8qIHN0cnVjdHVy
ZSA9IEluZmVycmVkU3RydWN0dXJlOjpjcmVhdGUodm0sIGRlZmVycmFsQ29udGV4dCwgdGhpcywg
bmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAgICAgICBtX3N0cnVjdHVyZS5zZXQo
dm0sIHRoaXMsIHN0cnVjdHVyZSk7Ci0gICAgICAgIH0KKyAgICAgICAgbV9zdHJ1Y3R1cmUgPSBu
dWxscHRyOworICAgIGVsc2UgeworICAgICAgICBpZiAobV9zdHJ1Y3R1cmUpCisgICAgICAgICAg
ICBBU1NFUlQobmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSA9PSBtX3N0cnVjdHVyZS0+c3RydWN0
dXJlLmdldCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSBzdGQ6
Om1ha2VfdW5pcXVlPEluZmVycmVkU3RydWN0dXJlPih2bSwgdGhpcywgbmV3RGVzY3JpcHRvci5z
dHJ1Y3R1cmUoKSk7CiAgICAgfQogCiAgICAgLy8gRmluYWxseSwgc2V0IHRoZSBkZXNjcmlwdG9y
IGtpbmQuCkBAIC01MDMsMTMgKzQ5MCwxMiBAQCB2b2lkIEluZmVycmVkVHlwZTo6cmVtb3ZlU3Ry
dWN0dXJlKCkKICAgICBEZXNjcmlwdG9yIG9sZERlc2NyaXB0b3I7CiAgICAgRGVzY3JpcHRvciBu
ZXdEZXNjcmlwdG9yOwogICAgIHsKLSAgICAgICAgR0NEZWZlcnJhbENvbnRleHQgZGVmZXJyYWxD
b250ZXh0KHZtLmhlYXApOwogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9j
ayk7CiAgICAgICAgIG9sZERlc2NyaXB0b3IgPSBkZXNjcmlwdG9yKGxvY2tlcik7CiAgICAgICAg
IG5ld0Rlc2NyaXB0b3IgPSBvbGREZXNjcmlwdG9yOwogICAgICAgICBuZXdEZXNjcmlwdG9yLnJl
bW92ZVN0cnVjdHVyZSgpOwogICAgICAgICAKLSAgICAgICAgaWYgKCFzZXQoZGVmZXJyYWxDb250
ZXh0LCBsb2NrZXIsIHZtLCBuZXdEZXNjcmlwdG9yKSkKKyAgICAgICAgaWYgKCFzZXQobG9ja2Vy
LCB2bSwgbmV3RGVzY3JpcHRvcikpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC01
MTcsNiArNTAzLDIwIEBAIHZvaWQgSW5mZXJyZWRUeXBlOjpyZW1vdmVTdHJ1Y3R1cmUoKQogICAg
IG1fd2F0Y2hwb2ludFNldC5maXJlQWxsKHZtLCBkZXRhaWwpOwogfQogCitJc29DZWxsU2V0OjpG
b3JFYWNoUmVzdWx0IEluZmVycmVkVHlwZTo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mKQor
eworICAgIEFTU0VSVChIZWFwOjppc01hcmtlZCh0aGlzKSk7CisgICAgCisgICAgaWYgKG1fc3Ry
dWN0dXJlKSB7CisgICAgICAgIGlmIChIZWFwOjppc01hcmtlZChtX3N0cnVjdHVyZS0+c3RydWN0
dXJlLmdldCgpKSkKKyAgICAgICAgICAgIHJldHVybiBJc29DZWxsU2V0OjpGb3JFYWNoUmVzdWx0
OjpDb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIHJlbW92ZVN0cnVjdHVyZSgpOworICAgIH0K
KyAgICAKKyAgICByZXR1cm4gSXNvQ2VsbFNldDo6Rm9yRWFjaFJlc3VsdDo6UmVtb3ZlQW5kQ29u
dGludWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZS5oCShyZXZpc2lv
biAyMjU3MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQ29uY3VycmVu
dEpTTG9jay5oIgogI2luY2x1ZGUgIkluZmVycmVkU3RydWN0dXJlLmgiCisjaW5jbHVkZSAiSXNv
Q2VsbFNldC5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIlByb3BlcnR5TmFtZS5o
IgogI2luY2x1ZGUgIlB1dEJ5SWRGbGFncy5oIgpAQCAtMTg1LDcgKzE4Niw3IEBAIHB1YmxpYzoK
IAogICAgIERlc2NyaXB0b3IgZGVzY3JpcHRvck1haW5UaHJlYWQoKSBjb25zdAogICAgIHsKLSAg
ICAgICAgcmV0dXJuIERlc2NyaXB0b3IobV9raW5kLCBtX3N0cnVjdHVyZSA/IG1fc3RydWN0dXJl
LT5zdHJ1Y3R1cmUoKSA6IG51bGxwdHIpOworICAgICAgICByZXR1cm4gRGVzY3JpcHRvcihtX2tp
bmQsIG1fc3RydWN0dXJlID8gbV9zdHJ1Y3R1cmUtPnN0cnVjdHVyZS5nZXQoKSA6IG51bGxwdHIp
OwogICAgIH0KICAgICAKICAgICBEZXNjcmlwdG9yIGRlc2NyaXB0b3IoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJikgY29uc3QKQEAgLTIzMCw3ICsyMzEsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKLSAgICB2b2lkIGZpbmFsaXplVW5jb25k
aXRpb25hbGx5KCk7CisgICAgSXNvQ2VsbFNldDo6Rm9yRWFjaFJlc3VsdCBmaW5hbGl6ZVVuY29u
ZGl0aW9uYWxseShWTSYpOwogCiBwcml2YXRlOgogICAgIEluZmVycmVkVHlwZShWTSYpOwpAQCAt
MjQxLDcgKzI0Miw3IEBAIHByaXZhdGU6CiAKICAgICAvLyBIZWxwZXIgZm9yIHdpbGxTdG9yZVZh
bHVlU2xvdygpIGFuZCBtYWtlVG9wU2xvdygpLiBUaGlzIHJldHVybnMgdHJ1ZSBpZiB3ZSBzaG91
bGQgZmlyZSB0aGUKICAgICAvLyB3YXRjaHBvaW50IHNldC4KLSAgICBib29sIHNldChHQ0RlZmVy
cmFsQ29udGV4dCYsIGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZNJiwgRGVzY3JpcHRvcik7
CisgICAgYm9vbCBzZXQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVk0mLCBEZXNjcmlwdG9y
KTsKICAgICAKICAgICB2b2lkIHJlbW92ZVN0cnVjdHVyZSgpOwogICAgIApAQCAtMjUyLDcgKzI1
Myw4IEBAIHByaXZhdGU6CiAgICAgCiAgICAgS2luZCBtX2tpbmQgeyBCb3R0b20gfTsKIAotICAg
IFdyaXRlQmFycmllcjxJbmZlcnJlZFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7CisgICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIGJlIFBvaXNvbmVkLgorICAgIHN0ZDo6dW5pcXVlX3B0cjxJbmZlcnJl
ZFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7CiAKICAgICAvLyBOT1RFOiBJZiB0aGlzIGlzIGJlaW5n
IHdhdGNoZWQsIHdlIHRyYW5zZm9ybSB0byBUb3AgYmVjYXVzZSB0aGF0IGltcGxpZXMgdGhhdCBp
dCB3b3VsZG4ndCBiZQogICAgIC8vIHByb2ZpdGFibGUgdG8gd2F0Y2ggaXQgYWdhaW4uIEFsc28s
IHRoaXMgc2V0IGlzIGluaXRpYWxpemVkIGNsZWFyLCBhbmQgaXMgbmV2ZXIgZXhwb3NlZCB0byB0
aGUgREZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAy
MjU3MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIwNSwxMSArMjA1LDExIEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlw
ZSBoZWFwVHlwZSkKICAgICAsIGRpcmVjdEV2YWxFeGVjdXRhYmxlU3BhY2UgSVNPX1NVQlNQQUNF
X0lOSVQoaGVhcCwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgRGlyZWN0RXZh
bEV4ZWN1dGFibGUpCiAgICAgLCBmdW5jdGlvbkV4ZWN1dGFibGVTcGFjZSBJU09fU1VCU1BBQ0Vf
SU5JVChoZWFwLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLmdldCgpLCBGdW5jdGlvbkV4
ZWN1dGFibGUpCiAgICAgLCBpbmRpcmVjdEV2YWxFeGVjdXRhYmxlU3BhY2UgSVNPX1NVQlNQQUNF
X0lOSVQoaGVhcCwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgSW5kaXJlY3RF
dmFsRXhlY3V0YWJsZSkKLSAgICAsIGluZmVycmVkU3RydWN0dXJlU3BhY2UgSVNPX1NVQlNQQUNF
X0lOSVQoaGVhcCwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgSW5mZXJyZWRT
dHJ1Y3R1cmUpCiAgICAgLCBpbmZlcnJlZFR5cGVTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFw
LCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLmdldCgpLCBJbmZlcnJlZFR5cGUpCiAgICAg
LCBtb2R1bGVQcm9ncmFtRXhlY3V0YWJsZVNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGRl
c3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxl
KQogICAgICwgbmF0aXZlRXhlY3V0YWJsZVNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGRl
c3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIE5hdGl2ZUV4ZWN1dGFibGUpCiAgICAg
LCBwcm9ncmFtRXhlY3V0YWJsZVNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGRlc3RydWN0
aWJsZUNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIFByb2dyYW1FeGVjdXRhYmxlKQorICAgICwgaW5m
ZXJyZWRUeXBlc1dpdGhGaW5hbGl6ZXJzKGluZmVycmVkVHlwZVNwYWNlKQogICAgICwgdm1UeXBl
KHZtVHlwZSkKICAgICAsIGNsaWVudERhdGEoMCkKICAgICAsIHRvcEVudHJ5RnJhbWUobnVsbHB0
cikKQEAgLTI5Miw3ICsyOTIsNiBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVh
cFR5cGUpCiAgICAgdW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZS5zZXQoKnRoaXMs
IFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNO
dWxsKCkpKTsKICAgICB1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmUuc2V0
KCp0aGlzLCBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgq
dGhpcywgMCwganNOdWxsKCkpKTsKICAgICBwcm9wZXJ0eVRhYmxlU3RydWN0dXJlLnNldCgqdGhp
cywgUHJvcGVydHlUYWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwot
ICAgIGluZmVycmVkU3RydWN0dXJlU3RydWN0dXJlLnNldCgqdGhpcywgSW5mZXJyZWRTdHJ1Y3R1
cmU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBpbmZlcnJlZFR5
cGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBJbmZlcnJlZFR5cGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhp
cywgMCwganNOdWxsKCkpKTsKICAgICBpbmZlcnJlZFR5cGVUYWJsZVN0cnVjdHVyZS5zZXQoKnRo
aXMsIEluZmVycmVkVHlwZVRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgp
KSk7CiAgICAgaW5mZXJyZWRWYWx1ZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEluZmVycmVkVmFsdWU6
OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMjI1NzI1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1
ZGUgIkZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oIgogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNs
dWRlICJJbnRyaW5zaWMuaCIKKyNpbmNsdWRlICJJc29DZWxsU2V0LmgiCiAjaW5jbHVkZSAiSXNv
U3Vic3BhY2UuaCIKICNpbmNsdWRlICJKSVRUaHVua3MuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVl
LmgiCkBAIC0zNDAsMTEgKzM0MSwxMiBAQCBwdWJsaWM6CiAgICAgSXNvU3Vic3BhY2UgZGlyZWN0
RXZhbEV4ZWN1dGFibGVTcGFjZTsKICAgICBJc29TdWJzcGFjZSBmdW5jdGlvbkV4ZWN1dGFibGVT
cGFjZTsKICAgICBJc29TdWJzcGFjZSBpbmRpcmVjdEV2YWxFeGVjdXRhYmxlU3BhY2U7Ci0gICAg
SXNvU3Vic3BhY2UgaW5mZXJyZWRTdHJ1Y3R1cmVTcGFjZTsKICAgICBJc29TdWJzcGFjZSBpbmZl
cnJlZFR5cGVTcGFjZTsKICAgICBJc29TdWJzcGFjZSBtb2R1bGVQcm9ncmFtRXhlY3V0YWJsZVNw
YWNlOwogICAgIElzb1N1YnNwYWNlIG5hdGl2ZUV4ZWN1dGFibGVTcGFjZTsKICAgICBJc29TdWJz
cGFjZSBwcm9ncmFtRXhlY3V0YWJsZVNwYWNlOworICAgIAorICAgIElzb0NlbGxTZXQgaW5mZXJy
ZWRUeXBlc1dpdGhGaW5hbGl6ZXJzOwogCiAgICAgVk1UeXBlIHZtVHlwZTsKICAgICBDbGllbnRE
YXRhKiBjbGllbnREYXRhOwpAQCAtMzkyLDcgKzM5NCw2IEBAIHB1YmxpYzoKICAgICBTdHJvbmc8
U3RydWN0dXJlPiB1bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlOwogICAgIFN0cm9u
ZzxTdHJ1Y3R1cmU+IHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZTsKICAg
ICBTdHJvbmc8U3RydWN0dXJlPiBwcm9wZXJ0eVRhYmxlU3RydWN0dXJlOwotICAgIFN0cm9uZzxT
dHJ1Y3R1cmU+IGluZmVycmVkU3RydWN0dXJlU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1
cmU+IGluZmVycmVkVHlwZVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBpbmZlcnJl
ZFR5cGVUYWJsZVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBpbmZlcnJlZFZhbHVl
U3RydWN0dXJlOwpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNTcyNSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjcgQEAKKzIwMTctMTItMTEgIEZpbGlwIFBp
emxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBJdCBzaG91bGQgYmUgcG9zc2libGUg
dG8gZmxhZyBhIGNlbGwgZm9yIHVuY29uZGl0aW9uYWwgZmluYWxpemF0aW9uCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODA2MzYKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgYWRkcyBD
b25jdXJyZW50VmVjdG9yLCB3aGljaCBpcyBsaWtlIFNlZ21lbnRlZFZlY3RvciwgYnV0IHdhc3Rl
cyBzb21lIHNwYWNlIHRvIGFsbG93CisgICAgICAgIHJlc2l6aW5nIHRvIHByb2NlZWQgY29uY3Vy
cmVudGx5IHRvIGFjY2Vzcy4gSXQncyBub3QgcG9zc2libGUgdG8gcmVzaXplIGNvbmN1cnJlbnRs
eSB0bworICAgICAgICByZXNpemluZywgY29uY3VycmVudCByZWFkL3dyaXRlcyBhcmVuJ3QgcHJv
dGVjdGVkIGZyb20gcmFjaW5nIGlmIHRoZXkgYWNjZXNzIHRoZSBzYW1lIGVsZW1lbnQsCisgICAg
ICAgIGFuZCB3aG8ga25vd3Mgd2hhdCB5b3UnbGwgZ2V0IGlmIHlvdSBpdGVyYXRlIHVwIHRvIHNp
emUoKSB3aGlsZSBzb21lb25lIGVsc2UgYXBwZW5kKClzLiBUaGUKKyAgICAgICAga2V5IGluc2ln
aHQgaXMgdG8gc3Rhc2ggYWxsIHByaW9yIGNvcGllcyBvZiB0aGUgc3BpbmUsIHNvIHRoYXQgbm9i
b2R5IGNyYXNoZXMgdHJ5aW5nIHRvIGFjY2VzcworICAgICAgICBhIHN0YWxlIHNwaW5lLgorICAg
ICAgICAKKyAgICAgICAgSSdtIGdvaW5nIHRvIHdhbnQgdG8gZG8gdGhlIHNhbWUgdGhpbmcgZm9y
IEZhc3RCaXRWZWN0b3IsIGJ5IGNyZWF0aW5nIGEgc2VnbWVudGVkIFdvcmRPd25lcgorICAgICAg
ICBjbGFzcy4gVGhhdCB3b3VsZCByZXF1aXJlIHJlcGVhdGluZyB0aGUgZGFuY2Ugb2YgaGF2aW5n
IGEgc3BpbmUgdGhhdCBjYW4gcmVzaXplIHdoaWxlIHN0YXNoaW5nCisgICAgICAgIG9sZCB2ZXJz
aW9ucy4gU28sIHRoZSBzcGluZSByZXNpemluZyBsb2dpYyBpcyBhYnN0cmFjdGVkIGJlaGluZCBD
b25jdXJyZW50QnVmZmVyLiBZb3UgY291bGQKKyAgICAgICAgdXNlIHRoYXQgYXMgYSBraW5kIG9m
ICJjb25jdXJyZW50IHZlY3RvciIgZm9yIGltbXV0YWJsZSBkYXRhLiBUaGF0J3MgaG93IENvbmN1
cnJlbnRWZWN0b3IgdXNlcworICAgICAgICBpdDogaXQncyBhbiBpbW11dGFibGUgYXJyYXkgb2Yg
c2VnbWVudCBwb2ludGVycy4KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIHd0Zi9Db25jdXJyZW50QnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAo
V1RGOjpDb25jdXJyZW50QnVmZmVyOjpDb25jdXJyZW50QnVmZmVyKToKKyAgICAgICAgKFdURjo6
Q29uY3VycmVudEJ1ZmZlcjo6fkNvbmN1cnJlbnRCdWZmZXIpOgorICAgICAgICAoV1RGOjpDb25j
dXJyZW50QnVmZmVyOjpncm93RXhhY3QpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50QnVmZmVy
Ojpncm93KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudEJ1ZmZlcjo6YXJyYXkgY29uc3QpOgor
ICAgICAgICAoV1RGOjpDb25jdXJyZW50QnVmZmVyOjpvcGVyYXRvcltdKToKKyAgICAgICAgKFdU
Rjo6Q29uY3VycmVudEJ1ZmZlcjo6b3BlcmF0b3JbXSBjb25zdCk6CisgICAgICAgIChXVEY6OkNv
bmN1cnJlbnRCdWZmZXI6OmNyZWF0ZUFycmF5KToKKyAgICAgICAgKiB3dGYvQ29uY3VycmVudFZl
Y3Rvci5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6Q29uY3VycmVudFZlY3Rvckl0ZXJhdG9yOjp+
Q29uY3VycmVudFZlY3Rvckl0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFZlY3Rv
ckl0ZXJhdG9yOjpvcGVyYXRvciogY29uc3QpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50VmVj
dG9ySXRlcmF0b3I6Om9wZXJhdG9yLT4gY29uc3QpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50
VmVjdG9ySXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50VmVj
dG9ySXRlcmF0b3I6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50
VmVjdG9ySXRlcmF0b3I6Om9wZXJhdG9yIT0gY29uc3QpOgorICAgICAgICAoV1RGOjpDb25jdXJy
ZW50VmVjdG9ySXRlcmF0b3I6Om9wZXJhdG9yPSk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRW
ZWN0b3JJdGVyYXRvcjo6Q29uY3VycmVudFZlY3Rvckl0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6
Q29uY3VycmVudFZlY3Rvcjo6fkNvbmN1cnJlbnRWZWN0b3IpOgorICAgICAgICAoV1RGOjpDb25j
dXJyZW50VmVjdG9yOjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFZlY3Rv
cjo6aXNFbXB0eSBjb25zdCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRWZWN0b3I6OmF0KToK
KyAgICAgICAgKFdURjo6Q29uY3VycmVudFZlY3Rvcjo6YXQgY29uc3QpOgorICAgICAgICAoV1RG
OjpDb25jdXJyZW50VmVjdG9yOjpvcGVyYXRvcltdKToKKyAgICAgICAgKFdURjo6Q29uY3VycmVu
dFZlY3Rvcjo6b3BlcmF0b3JbXSBjb25zdCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRWZWN0
b3I6OmZpcnN0KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFZlY3Rvcjo6Zmlyc3QgY29uc3Qp
OgorICAgICAgICAoV1RGOjpDb25jdXJyZW50VmVjdG9yOjpsYXN0KToKKyAgICAgICAgKFdURjo6
Q29uY3VycmVudFZlY3Rvcjo6bGFzdCBjb25zdCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRW
ZWN0b3I6OnRha2VMYXN0KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFZlY3Rvcjo6YXBwZW5k
KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFZlY3Rvcjo6YWxsb2MpOgorICAgICAgICAoV1RG
OjpDb25jdXJyZW50VmVjdG9yOjpyZW1vdmVMYXN0KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVu
dFZlY3Rvcjo6Z3Jvdyk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRWZWN0b3I6OmJlZ2luKToK
KyAgICAgICAgKFdURjo6Q29uY3VycmVudFZlY3Rvcjo6ZW5kKToKKyAgICAgICAgKFdURjo6Q29u
Y3VycmVudFZlY3Rvcjo6c2VnbWVudEV4aXN0c0Zvcik6CisgICAgICAgIChXVEY6OkNvbmN1cnJl
bnRWZWN0b3I6OnNlZ21lbnRGb3IpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50VmVjdG9yOjpz
dWJzY3JpcHRGb3IpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50VmVjdG9yOjplbnN1cmVTZWdt
ZW50c0Zvcik6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRWZWN0b3I6OmVuc3VyZVNlZ21lbnQp
OgorICAgICAgICAoV1RGOjpDb25jdXJyZW50VmVjdG9yOjphbGxvY2F0ZVNlZ21lbnQpOgorCiAy
MDE3LTEyLTA4ICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgogCiAgICAg
ICAgIE1vdmUgTG9nZ2VyIGZyb20gUEFMIHRvIFdURiBzbyBpdCBjYW4gYmUgdXNlZCBvdXRzaWRl
IG9mIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMjI1NzI1KQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjM5LDYgKzIzOSw4IEBACiAJCTBGQjE0RTE4MTgw
RkEyMTgwMDlCNkI0RCAvKiBCYWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QmFnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0RTFBMTgxMEUxREEwMDlC
NkI0RCAvKiBCYWdUb0hhc2hNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFnVG9IYXNoTWFwLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjMxN0MzMUM0ODgwMDEwMDdFMzk1QSAvKiBT
eXN0ZW1UcmFjaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5c3RlbVRy
YWNpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCNDY3ODIxRkRFMjgyQjAw
M0ZDQjA5IC8qIENvbmN1cnJlbnRCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ29uY3VycmVudEJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkI0Njc4MzFGREUyODJDMDAzRkNCMDkgLyogQ29uY3VycmVudFZlY3Rvci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDb25jdXJyZW50VmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGQzQ0ODgyMTZGRTlGRTEwMDg0NEJFOSAvKiBQcm9jZXNzSUQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvY2Vzc0lELmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGQzRFREU1MTY5NjE0OTYwMEY2NTA0MSAvKiBDb21tYVByaW50
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tbWFQcmludGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgxQUM0MTU0RkIyMkUwMDk4M0U3MiAvKiBG
YXN0Qml0VmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZhc3RCaXRW
ZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTgwOCw4ICs4MTAsMTAgQEAK
IAkJCQkwRjhGMkI5MDE3MkUwMEYwMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuaCAqLywK
IAkJCQlBOEE0NzI3MDE1MUE4MjVBMDA0MTIzRkYgLyogQ29tcGlsZXIuaCAqLywKIAkJCQk0NkJB
OUVBQjFGNENENjFFMDA5QTJCQkMgLyogQ29tcGxldGlvbkhhbmRsZXIuaCAqLywKKwkJCQkwRkI0
Njc4MjFGREUyODJCMDAzRkNCMDkgLyogQ29uY3VycmVudEJ1ZmZlci5oICovLAogCQkJCTBGMzBD
QjU4MUZDREYxMzMwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAgKi8sCiAJCQkJ
MEYzMENCNTkxRkNERjEzMzAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmggKi8sCisJ
CQkJMEZCNDY3ODMxRkRFMjgyQzAwM0ZDQjA5IC8qIENvbmN1cnJlbnRWZWN0b3IuaCAqLywKIAkJ
CQkwRkRCNjk4RDFCN0M2NDNBMDAwQzEwNzggLyogQ29uZGl0aW9uLmggKi8sCiAJCQkJMEZGQkNC
RkExRkQzN0UwRjAwNzJBQUYwIC8qIENvdW50aW5nTG9jay5oICovLAogCQkJCTBGOEU4NURBMUZE
NDg1QjAwMDY5MTg4OSAvKiBDb3VudGluZ0xvY2suY3BwICovLApJbmRleDogU291cmNlL1dURi93
dGYvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ01ha2VMaXN0
cy50eHQJKHJldmlzaW9uIDIyNTcyNSkKKysrIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC0xOCw3ICsxOCw5IEBAIHNldChXVEZfSEVBREVSUwogICAgIENs
b2NrVHlwZS5oCiAgICAgQ29tcGlsYXRpb25UaHJlYWQuaAogICAgIENvbXBpbGVyLmgKKyAgICBD
b25jdXJyZW50QnVmZmVyLmgKICAgICBDb25jdXJyZW50UHRySGFzaFNldC5oCisgICAgQ29uY3Vy
cmVudFZlY3Rvci5oCiAgICAgQ29uZGl0aW9uLmgKICAgICBDb3VudGluZ0xvY2suaAogICAgIENy
b3NzVGhyZWFkQ29waWVyLmgKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRCdWZmZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Db25jdXJyZW50QnVmZmVyLmgJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvQ29uY3VycmVudEJ1ZmZlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KKyNp
bmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+
CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBDb25jdXJyZW50
QnVmZmVyIGlzIHN1aXRhYmxlIGZvciB3aGVuIHlvdSBwbGFuIHRvIHN0b3JlIGltbXV0YWJsZSBk
YXRhIGFuZCBzb21ldGltZXMgYXBwZW5kIHRvIGl0LgorLy8gSXQgc3VwcG9ydHMgc3RvcmluZyBk
YXRhIHRoYXQgaXMgbm90IGNvcHktY29uc3RydWN0YWJsZSBidXQgYml0LWNvcHlhYmxlLgordGVt
cGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIENvbmN1cnJlbnRCdWZmZXIgeworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKENvbmN1cnJlbnRCdWZmZXIpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIAorICAgIENvbmN1cnJlbnRCdWZmZXIoKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgfkNvbmN1cnJlbnRCdWZmZXIoKQorICAgIHsKKyAgICAgICAgaWYgKEFycmF5
KiBhcnJheSA9IG1fYXJyYXkpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBhcnJheS0+c2l6ZTsgKytpKQorICAgICAgICAgICAgICAgIGFycmF5LT5kYXRhW2ldLn5UKCk7
CisgICAgICAgIH0KKyAgICAgICAgZm9yIChBcnJheSogYXJyYXkgOiBtX2FsbEFycmF5cykKKyAg
ICAgICAgICAgIGZhc3RGcmVlKGFycmF5KTsKKyAgICB9CisKKyAgICAvLyBHcm93aW5nIGlzIG5v
dCBjb25jdXJyZW50LiBUaGlzIGFzc3VtZXMgeW91IGFyZSBob2xkaW5nIHNvbWUgb3RoZXIgbG9j
ayBiZWZvcmUgeW91IGRvIHRoaXMuCisgICAgdm9pZCBncm93RXhhY3Qoc2l6ZV90IG5ld1NpemUp
CisgICAgeworICAgICAgICBBcnJheSogYXJyYXkgPSBtX2FycmF5OworICAgICAgICBpZiAoYXJy
YXkgJiYgbmV3U2l6ZSA8PSBhcnJheS0+c2l6ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgQXJyYXkqIG5ld0FycmF5ID0gY3JlYXRlQXJyYXkobmV3U2l6ZSk7CisgICAgICAgIC8vIFRo
aXMgYWxsb3dzIHVzIHRvIGRvIENvbmN1cnJlbnRCdWZmZXI8c3RkOjp1bmlxdWVfcHRyPD4+Lgor
ICAgICAgICBpZiAoYXJyYXkpCisgICAgICAgICAgICBtZW1jcHkobmV3QXJyYXktPmRhdGEsIGFy
cmF5LT5kYXRhLCBzaXplb2YoVCkgKiBhcnJheS0+c2l6ZSk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGFycmF5ID8gYXJyYXktPnNpemUgOiAwOyBpIDwgbmV3U2l6ZTsgKytpKQorICAgICAg
ICAgICAgbmV3IChuZXdBcnJheS0+ZGF0YSArIGkpIFQoKTsKKyAgICAgICAgV1RGOjpzdG9yZVN0
b3JlRmVuY2UoKTsKKyAgICAgICAgbV9hcnJheSA9IG5ld0FycmF5OworICAgICAgICBXVEY6OnN0
b3JlU3RvcmVGZW5jZSgpOworICAgICAgICBtX2FsbEFycmF5cy5hcHBlbmQobmV3QXJyYXkpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGdyb3coc2l6ZV90IG5ld1NpemUpCisgICAgeworICAgICAg
ICBzaXplX3Qgc2l6ZSA9IG1fYXJyYXkgPyBtX2FycmF5LT5zaXplIDogMDsKKyAgICAgICAgaWYg
KG5ld1NpemUgPD0gc2l6ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZ3Jvd0V4YWN0
KHN0ZDo6bWF4KG5ld1NpemUsIHNpemUgKiAyKSk7CisgICAgfQorICAgIAorICAgIHN0cnVjdCBB
cnJheSB7CisgICAgICAgIHVuc2lnbmVkIHNpemU7IC8vIFRoaXMgaXMgYW4gaW1tdXRhYmxlIHNp
emUuCisgICAgICAgIFQgZGF0YVsxXTsKKyAgICB9OworICAgIAorICAgIEFycmF5KiBhcnJheSgp
IGNvbnN0IHsgcmV0dXJuIG1fYXJyYXk7IH0KKyAgICAKKyAgICBUJiBvcGVyYXRvcltdKHNpemVf
dCBpbmRleCkgeyByZXR1cm4gbV9hcnJheS0+ZGF0YVtpbmRleF07IH0KKyAgICBjb25zdCBUJiBv
cGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9hcnJheS0+ZGF0YVtpbmRl
eF07IH0KKyAgICAKK3ByaXZhdGU6CisgICAgQXJyYXkqIGNyZWF0ZUFycmF5KHVuc2lnbmVkIHNp
emUpCisgICAgeworICAgICAgICBBcnJheSogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8QXJyYXkqPihm
YXN0TWFsbG9jKE9CSkVDVF9PRkZTRVRPRihBcnJheSwgZGF0YSkgKyBzaXplb2YoVCkgKiBzaXpl
KSk7CisgICAgICAgIHJlc3VsdC0+c2l6ZSA9IHNpemU7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorICAgIAorICAgIEFycmF5KiBtX2FycmF5IHsgbnVsbHB0ciB9OworICAgIFZlY3Rv
cjxBcnJheSo+IG1fYWxsQXJyYXlzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRWZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9Db25jdXJyZW50VmVjdG9yLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93
dGYvQ29uY3VycmVudFZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjUzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4g
KCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ29u
Y3VycmVudFZlY3Rvcl9oCisjZGVmaW5lIENvbmN1cnJlbnRWZWN0b3JfaAorCisjaW5jbHVkZSA8
d3RmL0NvbmN1cnJlbnRCdWZmZXIuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKwor
bmFtZXNwYWNlIFdURiB7CisKKy8vIEFuIGl0ZXJhdG9yIGZvciBDb25jdXJyZW50VmVjdG9yLiBJ
dCBzdXBwb3J0cyBvbmx5IHRoZSBwcmUgKysgb3BlcmF0b3IKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
LCBzaXplX3QgU2VnbWVudFNpemUgPSA4PiBjbGFzcyBDb25jdXJyZW50VmVjdG9yOwordGVtcGxh
dGUgPHR5cGVuYW1lIFQsIHNpemVfdCBTZWdtZW50U2l6ZSA9IDg+IGNsYXNzIENvbmN1cnJlbnRW
ZWN0b3JJdGVyYXRvciB7Citwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb25jdXJyZW50VmVj
dG9yPFQsIFNlZ21lbnRTaXplPjsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIENvbmN1cnJlbnRWZWN0
b3JJdGVyYXRvcjxULCBTZWdtZW50U2l6ZT4gSXRlcmF0b3I7CisKKyAgICB+Q29uY3VycmVudFZl
Y3Rvckl0ZXJhdG9yKCkgeyB9CisKKyAgICBUJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBt
X3ZlY3Rvci5hdChtX2luZGV4KTsgfQorICAgIFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVy
biAmbV92ZWN0b3IuYXQobV9pbmRleCk7IH0KKworICAgIC8vIE9ubHkgcHJlZml4ICsrIG9wZXJh
dG9yIHN1cHBvcnRlZAorICAgIEl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICB7CisgICAgICAg
IG1faW5kZXgrKzsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBJdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4ICYmICZtX3ZlY3RvciA9PSAmb3RoZXIubV92ZWN0
b3I7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEl0ZXJhdG9yJiBvdGhlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2luZGV4ICE9IG90aGVyLm1faW5kZXggfHwg
Jm1fdmVjdG9yICE9ICZvdGhlci5tX3ZlY3RvcjsKKyAgICB9CisKKyAgICBDb25jdXJyZW50VmVj
dG9ySXRlcmF0b3ImIG9wZXJhdG9yPShjb25zdCBDb25jdXJyZW50VmVjdG9ySXRlcmF0b3I8VCwg
U2VnbWVudFNpemU+JiBvdGhlcikKKyAgICB7CisgICAgICAgIG1fdmVjdG9yID0gb3RoZXIubV92
ZWN0b3I7CisgICAgICAgIG1faW5kZXggPSBvdGhlci5tX2luZGV4OworICAgICAgICByZXR1cm4g
KnRoaXM7CisgICAgfQorCitwcml2YXRlOgorICAgIENvbmN1cnJlbnRWZWN0b3JJdGVyYXRvcihD
b25jdXJyZW50VmVjdG9yPFQsIFNlZ21lbnRTaXplPiYgdmVjdG9yLCBzaXplX3QgaW5kZXgpCisg
ICAgICAgIDogbV92ZWN0b3IodmVjdG9yKQorICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAg
eworICAgIH0KKworICAgIENvbmN1cnJlbnRWZWN0b3I8VCwgU2VnbWVudFNpemU+JiBtX3ZlY3Rv
cjsKKyAgICBzaXplX3QgbV9pbmRleDsKK307CisKKy8vIENvbmN1cnJlbnRWZWN0b3IgaXMgbGlr
ZSBTZWdtZW50ZWRWZWN0b3IsIGJ1dCBzdWl0YWJsZSBmb3Igc2NlbmFyaW9zIHdoZXJlIG9uZSB0
aHJlYWQgYXBwZW5kcworLy8gZWxlbWVudHMgYW5kIGFub3RoZXIgdGhyZWFkIGNvbnRpbnVlcyB0
byBhY2Nlc3MgZWxlbWVudHMgYXQgbG93ZXIgaW5kaWNlcy4gT25seSBvbmUgdGhyZWFkIGNhbgor
Ly8gYXBwZW5kIGF0IGEgdGltZSwgc28gdGhhdCBhY3Rpdml0eSBzdGlsbCBuZWVkcyBsb2NraW5n
LgordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNpemVfdCBTZWdtZW50U2l6ZT4KK2NsYXNzIENvbmN1
cnJlbnRWZWN0b3IgeworICAgIGZyaWVuZCBjbGFzcyBDb25jdXJyZW50VmVjdG9ySXRlcmF0b3I8
VCwgU2VnbWVudFNpemU+OworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvbmN1cnJlbnRWZWN0
b3IpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworCitwdWJsaWM6CisgICAgdHlwZWRl
ZiBDb25jdXJyZW50VmVjdG9ySXRlcmF0b3I8VCwgU2VnbWVudFNpemU+IEl0ZXJhdG9yOworCisg
ICAgQ29uY3VycmVudFZlY3RvcigpID0gZGVmYXVsdDsKKworICAgIH5Db25jdXJyZW50VmVjdG9y
KCkKKyAgICB7CisgICAgfQorCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3Np
emU7IH0KKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhc2l6ZSgpOyB9CisKKyAg
ICBUJiBhdChzaXplX3QgaW5kZXgpCisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklU
WV9JTVBMSUNBVElPTihpbmRleCA8IG1fc2l6ZSk7CisgICAgICAgIHJldHVybiBzZWdtZW50Rm9y
KGluZGV4KS0+ZW50cmllc1tzdWJzY3JpcHRGb3IoaW5kZXgpXTsKKyAgICB9CisKKyAgICBjb25z
dCBUJiBhdChzaXplX3QgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gY29uc3Rf
Y2FzdDxDb25jdXJyZW50VmVjdG9yPFQsIFNlZ21lbnRTaXplPio+KHRoaXMpLT5hdChpbmRleCk7
CisgICAgfQorCisgICAgVCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpCisgICAgeworICAgICAg
ICByZXR1cm4gYXQoaW5kZXgpOworICAgIH0KKworICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oc2l6
ZV90IGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KGluZGV4KTsKKyAgICB9
CisKKyAgICBUJiBmaXJzdCgpCisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTighaXNFbXB0eSgpKTsKKyAgICAgICAgcmV0dXJuIGF0KDApOworICAgIH0KKyAg
ICBjb25zdCBUJiBmaXJzdCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNV
UklUWV9JTVBMSUNBVElPTighaXNFbXB0eSgpKTsKKyAgICAgICAgcmV0dXJuIGF0KDApOworICAg
IH0KKyAgICBUJiBsYXN0KCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lN
UExJQ0FUSU9OKCFpc0VtcHR5KCkpOworICAgICAgICByZXR1cm4gYXQoc2l6ZSgpIC0gMSk7Cisg
ICAgfQorICAgIGNvbnN0IFQmIGxhc3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJ
VEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIWlzRW1wdHkoKSk7CisgICAgICAgIHJldHVybiBhdChz
aXplKCkgLSAxKTsKKyAgICB9CisKKyAgICBUIHRha2VMYXN0KCkKKyAgICB7CisgICAgICAgIEFT
U0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFpc0VtcHR5KCkpOworICAgICAgICBUIHJl
c3VsdCA9IFdURk1vdmUobGFzdCgpKTsKKyAgICAgICAgLS1tX3NpemU7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KKyAgICB2
b2lkIGFwcGVuZChBcmdzJiYuLi4gYXJncykKKyAgICB7CisgICAgICAgICsrbV9zaXplOworICAg
ICAgICBpZiAoIXNlZ21lbnRFeGlzdHNGb3IobV9zaXplIC0gMSkpCisgICAgICAgICAgICBhbGxv
Y2F0ZVNlZ21lbnQoKTsKKyAgICAgICAgbmV3IChOb3ROdWxsLCAmbGFzdCgpKSBUKHN0ZDo6Zm9y
d2FyZDxBcmdzPihhcmdzKS4uLik7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4g
QXJncz4KKyAgICBUJiBhbGxvYyhBcmdzJiYuLi4gYXJncykKKyAgICB7CisgICAgICAgIGFwcGVu
ZChzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOworICAgICAgICByZXR1cm4gbGFzdCgpOwor
ICAgIH0KKworICAgIHZvaWQgcmVtb3ZlTGFzdCgpCisgICAgeworICAgICAgICBsYXN0KCkuflQo
KTsKKyAgICAgICAgLS1tX3NpemU7CisgICAgfQorCisgICAgdm9pZCBncm93KHNpemVfdCBzaXpl
KQorICAgIHsKKyAgICAgICAgaWYgKHNpemUgPT0gbV9zaXplKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBBU1NFUlQoc2l6ZSA+IG1fc2l6ZSk7CisgICAgICAgIGVuc3VyZVNlZ21lbnRz
Rm9yKHNpemUpOworICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fc2l6ZTsKKyAgICAgICAgbV9z
aXplID0gc2l6ZTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IG9sZFNpemU7IGkgPCBtX3NpemU7
ICsraSkKKyAgICAgICAgICAgIG5ldyAoTm90TnVsbCwgJmF0KGkpKSBUKCk7CisgICAgfQorCisg
ICAgSXRlcmF0b3IgYmVnaW4oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEl0ZXJhdG9yKCp0aGlz
LCAwKTsKKyAgICB9CisKKyAgICBJdGVyYXRvciBlbmQoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEl0ZXJhdG9yKCp0aGlzLCBtX3NpemUpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdHJ1Y3Qg
U2VnbWVudCB7CisgICAgICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKKyAgICAg
ICAgICAgIAorICAgICAgICBUIGVudHJpZXNbU2VnbWVudFNpemVdOworICAgIH07CisKKyAgICBi
b29sIHNlZ21lbnRFeGlzdHNGb3Ioc2l6ZV90IGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGluZGV4IC8gU2VnbWVudFNpemUgPCBtX251bVNlZ21lbnRzOworICAgIH0KKworICAgIFNlZ21l
bnQqIHNlZ21lbnRGb3Ioc2l6ZV90IGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc2Vn
bWVudHNbaW5kZXggLyBTZWdtZW50U2l6ZV0uZ2V0KCk7CisgICAgfQorCisgICAgc2l6ZV90IHN1
YnNjcmlwdEZvcihzaXplX3QgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gaW5kZXggJSBT
ZWdtZW50U2l6ZTsKKyAgICB9CisKKyAgICB2b2lkIGVuc3VyZVNlZ21lbnRzRm9yKHNpemVfdCBz
aXplKQorICAgIHsKKyAgICAgICAgc2l6ZV90IHNlZ21lbnRDb3VudCA9IChtX3NpemUgKyBTZWdt
ZW50U2l6ZSAtIDEpIC8gU2VnbWVudFNpemU7CisgICAgICAgIHNpemVfdCBuZWVkZWRTZWdtZW50
Q291bnQgPSAoc2l6ZSArIFNlZ21lbnRTaXplIC0gMSkgLyBTZWdtZW50U2l6ZTsKKworICAgICAg
ICBmb3IgKHNpemVfdCBpID0gc2VnbWVudENvdW50ID8gc2VnbWVudENvdW50IC0gMSA6IDA7IGkg
PCBuZWVkZWRTZWdtZW50Q291bnQ7ICsraSkKKyAgICAgICAgICAgIGVuc3VyZVNlZ21lbnQoaSk7
CisgICAgfQorCisgICAgdm9pZCBlbnN1cmVTZWdtZW50KHNpemVfdCBzZWdtZW50SW5kZXgpCisg
ICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzZWdtZW50SW5k
ZXggPD0gbV9udW1TZWdtZW50cyk7CisgICAgICAgIGlmIChzZWdtZW50SW5kZXggPT0gbV9udW1T
ZWdtZW50cykKKyAgICAgICAgICAgIGFsbG9jYXRlU2VnbWVudCgpOworICAgIH0KKworICAgIHZv
aWQgYWxsb2NhdGVTZWdtZW50KCkKKyAgICB7CisgICAgICAgIG1fc2VnbWVudHMuZ3JvdyhtX251
bVNlZ21lbnRzICsgMSk7CisgICAgICAgIG1fc2VnbWVudHNbbV9udW1TZWdtZW50cysrXSA9IHN0
ZDo6bWFrZV91bmlxdWU8U2VnbWVudD4oKTsKKyAgICB9CisKKyAgICBzaXplX3QgbV9zaXplIHsg
MCB9OworICAgIENvbmN1cnJlbnRCdWZmZXI8c3RkOjp1bmlxdWVfcHRyPFNlZ21lbnQ+PiBtX3Nl
Z21lbnRzOworICAgIHNpemVfdCBtX251bVNlZ21lbnRzIHsgMCB9OworfTsKKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKK3VzaW5nIFdURjo6Q29uY3VycmVudFZlY3RvcjsKKworI2VuZGlmIC8vIENv
bmN1cnJlbnRWZWN0b3JfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329085</attachid>
            <date>2017-12-11 21:08:55 -0800</date>
            <delta_ts>2017-12-11 23:17:53 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>75084</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI1NzcwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzNCBA
QAorMjAxNy0xMi0xMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBmbGFnIGEgY2VsbCBmb3IgdW5jb25kaXRpb25hbCBm
aW5hbGl6YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE4MDYzNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAg
ICAKKyAgICAgICAgVW5jb25kaXRpb25hbEZpbmFsaXplcnMgd2VyZSBhbm5veWluZyAtIHlvdSBo
YWQgdG8gYWxsb2NhdGUgdGhlbSBhbmQgeW91IGhhZCB0byBtYW5hZ2UgYQorICAgICAgICBnbG9i
YWwgbGlua2VkIGxpc3QgLSBidXQgdGhleSBoYWQgc29tZSBuaWNlIHByb3BlcnRpZXM6CisgICAg
ICAgIAorICAgICAgICAtIFlvdSBvbmx5IGRpZCB0aGUgaGFyZGVzdCB3b3JrIChjcmVhdGluZyB0
aGUgVW5jb25kaXRpb25hbEZpbmFsaXplcikgb24gZmlyc3QgR0Mgd2hlcmUgeW91CisgICAgICAg
ICAgc3Vydml2ZWQgYW5kIG5lZWRlZCBpdC4KKyAgICAgICAgICAgIC0+IEp1c3QgbmVlZGluZyBp
dCB3YXNuJ3QgZW5vdWdoLgorICAgICAgICAgICAgLT4gSnVzdCBzdXJ2aXZpbmcgd2Fzbid0IGVu
b3VnaC4KKyAgICAgICAgCisgICAgICAgIFRoZSBuZXcgQVBJIGJhc2VkIG9uIElzb1N1YnNwYWNl
cyBtZWFudCB0aGF0IGp1c3Qgc3Vydml2aW5nIHdhcyBlbm91Z2ggdG8gY2F1c2UgdW5jb25kaXRp
b25hbAorICAgICAgICBmaW5hbGl6ZXIgbG9naWMgdG8gYmUgaW52b2tlZC4gSSB0aGluayB0aGF0
J3Mgbm90IGdyZWF0LiBJbmZlcnJlZFR5cGUgZ290IGFyb3VuZCB0aGlzIGJ5CisgICAgICAgIG1h
a2luZyBJbmZlcnJlZFN0cnVjdHVyZSBhIGNlbGwsIGJ1dCB0aGlzIHdhcyBhIGdyb3NzIGhhY2su
IEZvciBvbmUsIGl0IG1lYW50IHRoYXQKKyAgICAgICAgSW5mZXJyZWRTdHJ1Y3R1cmUgd291bGQg
c3Vydml2ZSBkdXJpbmcgdGhlIEdDIGluIHdoaWNoIGl0cyBmaW5hbGl6ZXIgb2J2aWF0ZWQgdGhl
IG5lZWQgZm9yIGl0cworICAgICAgICBleGlzdGVuY2UuIEl0J3Mgbm90IHJlYWxseSBhbiBpZGlv
bSBJIHdhbnQgdXMgdG8gcmVwZWF0IGJlY2F1c2UgaXQgc291bmRzIGxpa2UgdGhlIHNvcnQgb2YK
KyAgICAgICAgdGhpbmcgdGhhdCB0dXJucyBvdXQgdG8gYmUgc3VidGx5IGJyb2tlbi4KKyAgICAg
ICAgCisgICAgICAgIFdlIHJlYWxseSBuZWVkIHRvIGhhdmUgYSB3YXkgb2YgaW5kaWNhdGluZyB3
aGVuIHlvdSBoYXZlIGVudGVyZWQgaW50byB0aGUgc3RhdGUgdGhhdCByZXF1aXJlcworICAgICAg
ICB5b3VyIHVuY29uZGl0aW9uYWwgZmluYWxpemVyIHRvIGJlIGludm9rZWQuIEJhc2ljYWxseSwg
d2Ugd2FudCB0byBiZSBhYmxlIHRvIHRyYWNrIHRoZSBzZXQgb2YKKyAgICAgICAgb2JqZWN0cyB0
aGF0IG5lZWQgdW5jb25kaXRpb25hbCBmaW5hbGl6ZXJzLiBPbmx5IHRoZSBzdWJzZXQgb2YgdGhh
dCBzZXQgdGhhdCBvdmVybGFwcyB3aXRoIHRoZQorICAgICAgICBzZXQgb2YgbWFya2VkIG9iamVj
dHMgbmVlZHMgdG8gYmUgYWNjdXJhdGUuIFRoZSBlYXNpZXN0IHdheSB0byBkbyB0aGlzIGlzIGEg
aGllcmFyY2h5IG9mCisgICAgICAgIGJpdHZlY3RvcnM6IG9uZSB0byBzYXkgd2hpY2ggTWFya2Vk
QmxvY2tzIGhhdmUgb2JqZWN0cyB0aGF0IGhhdmUgdW5jb25kaXRpb25hbCBmaW5hbGl6ZXJzLCBh
bmQKKyAgICAgICAgYW5vdGhlciBsZXZlbCB0byBzYXkgd2hpY2ggYXRvbXMgd2l0aGluIGEgTWFy
a2VkQmxvY2sgaGF2ZSB1bmNvbmRpdGlvbmFsIGZpbmFsaXplcnMuCisgICAgICAgIAorICAgICAg
ICBUaGlzIGNoYW5nZSBpbnRyb2R1Y2VzIElzb0NlbGxTZXQsIHdoaWNoIGNvdXBsZXMgaXRzZWxm
IHRvIHRoZSBNYXJrZWRBbGxvY2F0b3Igb2Ygc29tZQorICAgICAgICBJc29TdWJzcGFjZSB0byBh
bGxvdyBtYWludGFpbmluZyBhIHNldCBvZiBvYmplY3RzICh3ZWxsLCBjZWxscyAtIHlvdSBjb3Vs
ZCBkbyB0aGlzIHdpdGgKKyAgICAgICAgYXV4aWxpYXJpZXMpIHRoYXQgYmVsb25nIHRvIHRoYXQg
SXNvU3Vic3BhY2UuIEl0J2xsIGhhdmUgdW5kZWZpbmVkIGJlaGF2aW9yIGlmIHlvdSB0cnkgdG8K
KyAgICAgICAgYWRkL3JlbW92ZS9jb250YWlucyBhbiBvYmplY3QgdGhhdCBpc24ndCBpbiB0aGF0
IElzb1N1YnNwYWNlLiBGb3Igb2JqZWN0cyBpbiB0aGF0IHN1YnNwYWNlLAorICAgICAgICB5b3Ug
Y2FuIGFkZC9yZW1vdmUvY29udGFpbnMgYW5kIGZvckVhY2hNYXJrZWRDZWxsLiBUaGUgY29zdCBv
ZiBlYWNoIElzb0NlbGxTZXQgaXMgYXQgd29yc3QKKyAgICAgICAgYWJvdXQgMC44JSBpbmNyZWFz
ZSBpbiBzaXplIHRvIGV2ZXJ5IG9iamVjdCBpbiB0aGUgc3Vic3BhY2UgdGhhdCB0aGUgc2V0IGlz
IGF0dGFjaGVkIHRvLiBTbywKKyAgICAgICAgaXQgbWFrZXMgc2Vuc2UgdG8gaGF2ZSBhIGhhbmRm
dWwgcGVyIHN1YnNwYWNlIG1heC4gVGhpcyBjaGFuZ2Ugb25seSBuZWVkcyBvbmUgcGVyIHN1YnNw
YWNlLAorICAgICAgICBidXQgeW91IGNvdWxkIGltYWdpbmUgbW9yZSBpZiB3ZSBkbyB0aGlzIGZv
ciBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLgorICAgICAgICAKKyAgICAgICAgVG8gYWJzb2x1dGVs
eSBtaW5pbWl6ZSB0aGUgcG9zc2liaWxpdHkgdGhhdCB0aGlzIGluY3VycyBjb3N0cywgdGhlIGFk
ZC9yZW1vdmUvY29udGFpbnMKKyAgICAgICAgZnVuY3Rpb25zIGNhbiBiZSB1c2VkIGZyb20gYW55
IHRocmVhZCBzbyBsb25nIGFzIGZvckVhY2hNYXJrZWRDZWxsIGlzbid0IHJ1bm5pbmcuIFRoaXMg
bWVhbnMKKyAgICAgICAgdGhhdCBJbmZlcnJlZFR5cGUgb25seSBuZWVkcyB0byBhZGQgaXRzZWxm
IHRvIHRoZSBzZXQgZHVyaW5nIHZpc2l0Q2hpbGRyZW4uIFRodXMsIGl0IG5lZWRzIHRvCisgICAg
ICAgIGJvdGggc3Vydml2ZSBhbmQgbmVlZCBpdCBmb3IgdGhlIGhhcmRlc3Qgd29yayB0byB0YWtl
IHBsYWNlLiBUaGUgd29yayBvZiBhZGRpbmcgZG9lcyBpbnZvbHZlCisgICAgICAgIGEgZ25hcmx5
IGxvYWQgY2hhaW4gdGhhdCBlbmRzIGluIGEgQ0FTOiBsb2FkIGJsb2NrIGhhbmRsZSBmcm9tIGJs
b2NrLCBsb2FkIGluZGV4LCBsb2FkCisgICAgICAgIHNlZ21lbnQsIGxvYWQgYml0dmVjdG9yLCBs
b2FkIGJpdCAtPiBpZiBub3Qgc2V0LCB0aGVuIENBUy4gVGhhdCdzIGZpdmUgZGVwZW5kZW50IGxv
YWRzIQorICAgICAgICBIb3dldmVyLCBpdCdzIHBlcmZlY3QgZm9yIHJ1bm5pbmcgaW4gcGFyYWxs
ZWwgc2luY2UgdGhlIG9ubHkgd3JpdGUgb3BlcmF0aW9ucyBhcmUgdG8gd2lkZWx5CisgICAgICAg
IGRpc3BlcnNlZCBjYWNoZSBsaW5lcyB0aGF0IGNvbnRhaW4gdGhlIGJpdHMgdW5kZXJseWluZyB0
aGUgc2V0LgorICAgICAgICAKKyAgICAgICAgVGhlIGJlc3QgcGFydCBpcyBob3cgZm9yRWFjaE1h
cmtlZENlbGwgd29ya3MuIFRoYXQgc2tpcHMgYmxvY2tzIHRoYXQgZG9uJ3QgaGF2ZSBhbnkgb2Jq
ZWN0cworICAgICAgICB0aGF0IG5lZWQgdW5jb25kaXRpb25hbCBmaW5hbGl6ZXJzLCBhbmQgb25s
eSB0b3VjaGVzIHRoZSBtZW1vcnkgb2YgbWFya2VkIG9iamVjdHMgdGhhdCBoYXZlCisgICAgICAg
IHRoZSB1bmNvbmRpdGlvbmFsIGZpbmFsaXplciBiaXQgc2V0LiBJdCB3aWxsIHdhbGsgdGhvc2Ug
b2JqZWN0cyBpbiByb3VnaGx5IGFkZHJlc3Mgb3JkZXIuIEkKKyAgICAgICAgcHJldmlvdXNseSBm
b3VuZCB0aGF0IHRoaXMgc3BlZWRzIHVwIHdhbGtpbmcgb3ZlciBhIGxvdCBvZiBvYmplY3RzIHdo
ZW4gSSBtYWRlIHNpbWlsYXIgY2hhbmdlcworICAgICAgICBmb3IgRE9NIEdDIChjYWxsaW5nIHZp
c2l0QWRkaXRpb25hbENoaWxkcmVuIHZpYSBmb3JFYWNoTWFya2VkQ2VsbCByYXRoZXIgdGhhbiBi
eSB3YWxraW5nIGEKKyAgICAgICAgSGFzaFNldCkuCisgICAgICAgIAorICAgICAgICBUaGlzIGNo
YW5nZSBtYWtlcyBJbmZlcnJlZFN0cnVjdHVyZSBiZSBhIG1hbGxvYyBvYmplY3QgYWdhaW4sIGJ1
dCBub3cgaXQncyBpbiBhbiBJc29IZWFwLgorICAgICAgICAKKyAgICAgICAgTXkgZXhwZWN0YXRp
b24gZm9yIHRoaXMgY2hhbmdlIGlzIHRoYXQgaXQncyBwZXJmLW5ldXRyYWwuIExvbmctdGVybSwg
aXQgZ2l2ZXMgdXMgYSBwYXRoCisgICAgICAgIGZvcndhcmQgZm9yIGVsaW1pbmF0aW5nIFVuY29u
ZGl0aW9uYWxGaW5hbGl6ZXIgYW5kIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIgd2hpbGUgdXNpbmcK
KyAgICAgICAgSXNvU3Vic3BhY2UgaW4gbW9yZSBwbGFjZXMuCisKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIGhlYXAvQXRvbUluZGljZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkF0
b21JbmRpY2VzOjpBdG9tSW5kaWNlcyk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAg
ICAgKEpTQzo6SGVhcDo6ZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycyk6CisgICAgICAg
ICogaGVhcC9IZWFwLmg6CisgICAgICAgICogaGVhcC9Jc29DZWxsU2V0LmNwcDogQWRkZWQuCisg
ICAgICAgIChKU0M6Oklzb0NlbGxTZXQ6Oklzb0NlbGxTZXQpOgorICAgICAgICAoSlNDOjpJc29D
ZWxsU2V0Ojp+SXNvQ2VsbFNldCk6CisgICAgICAgIChKU0M6Oklzb0NlbGxTZXQ6OmFkZFNsb3cp
OgorICAgICAgICAoSlNDOjpJc29DZWxsU2V0OjpkaWRSZXNpemVCaXRzKToKKyAgICAgICAgKEpT
Qzo6SXNvQ2VsbFNldDo6ZGlkUmVtb3ZlQmxvY2spOgorICAgICAgICAoSlNDOjpJc29DZWxsU2V0
Ojpzd2VlcFRvRnJlZUxpc3QpOgorICAgICAgICAqIGhlYXAvSXNvQ2VsbFNldC5oOiBBZGRlZC4K
KyAgICAgICAgKiBoZWFwL0lzb0NlbGxTZXRJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlND
OjpJc29DZWxsU2V0OjphZGQpOgorICAgICAgICAoSlNDOjpJc29DZWxsU2V0OjpyZW1vdmUpOgor
ICAgICAgICAoSlNDOjpJc29DZWxsU2V0Ojpjb250YWlucyBjb25zdCk6CisgICAgICAgIChKU0M6
Oklzb0NlbGxTZXQ6OmZvckVhY2hNYXJrZWRDZWxsKToKKyAgICAgICAgKiBoZWFwL0lzb1N1YnNw
YWNlLmNwcDoKKyAgICAgICAgKEpTQzo6SXNvU3Vic3BhY2U6OmRpZFJlc2l6ZUJpdHMpOgorICAg
ICAgICAoSlNDOjpJc29TdWJzcGFjZTo6ZGlkUmVtb3ZlQmxvY2spOgorICAgICAgICAoSlNDOjpJ
c29TdWJzcGFjZTo6ZGlkQmVnaW5Td2VlcGluZ1RvRnJlZUxpc3QpOgorICAgICAgICAqIGhlYXAv
SXNvU3Vic3BhY2UuaDoKKyAgICAgICAgKiBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHA6CisgICAg
ICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWRkQmxvY2spOgorICAgICAgICAoSlNDOjpNYXJr
ZWRBbGxvY2F0b3I6OnJlbW92ZUJsb2NrKToKKyAgICAgICAgKiBoZWFwL01hcmtlZEFsbG9jYXRv
ci5oOgorICAgICAgICAqIGhlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oOgorICAgICAgICAq
IGhlYXAvTWFya2VkQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxl
Ojpzd2VlcCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzRW1wdHkpOiBE
ZWxldGVkLgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suaDoKKyAgICAgICAgKEpTQzo6TWFy
a2VkQmxvY2s6Om1hcmtzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRs
ZTo6bmV3bHlBbGxvY2F0ZWQgY29uc3QpOgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2tJbmxp
bmVzLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzQWxsb2NhdGVkKToK
KyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6aXNFbXB0eSk6CisgICAgICAgIChK
U0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OmVtcHR5TW9kZSk6CisgICAgICAgIChKU0M6Ok1hcmtl
ZEJsb2NrOjpIYW5kbGU6OmZvckVhY2hNYXJrZWRDZWxsKToKKyAgICAgICAgKiBoZWFwL1N1YnNw
YWNlLmNwcDoKKyAgICAgICAgKEpTQzo6U3Vic3BhY2U6OmRpZFJlc2l6ZUJpdHMpOgorICAgICAg
ICAoSlNDOjpTdWJzcGFjZTo6ZGlkUmVtb3ZlQmxvY2spOgorICAgICAgICAoSlNDOjpTdWJzcGFj
ZTo6ZGlkQmVnaW5Td2VlcGluZ1RvRnJlZUxpc3QpOgorICAgICAgICAqIGhlYXAvU3Vic3BhY2Uu
aDoKKyAgICAgICAgKiBoZWFwL1N1YnNwYWNlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTdWJz
cGFjZTo6Zm9yRWFjaE1hcmtlZENlbGwpOgorICAgICAgICAqIHJ1bnRpbWUvSW5mZXJyZWRTdHJ1
Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFN0cnVjdHVyZTo6SW5mZXJyZWRTdHJ1
Y3R1cmUpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFN0cnVjdHVyZTo6Y3JlYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6SW5mZXJyZWRTdHJ1Y3R1cmU6OmRlc3Ryb3kpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpJbmZlcnJlZFN0cnVjdHVyZTo6Y3JlYXRlU3RydWN0dXJlKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6SW5mZXJyZWRTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4pOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpJbmZlcnJlZFN0cnVjdHVyZTo6ZmluYWxpemVVbmNvbmRpdGlv
bmFsbHkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmZlcnJlZFN0cnVjdHVyZTo6ZmluaXNo
Q3JlYXRpb24pOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1cmUu
aDoKKyAgICAgICAgKiBydW50aW1lL0luZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludC5jcHA6Cisg
ICAgICAgIChKU0M6OkluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKToK
KyAgICAgICAgKiBydW50aW1lL0luZmVycmVkVHlwZS5jcHA6CisgICAgICAgIChKU0M6OkluZmVy
cmVkVHlwZTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlwZTo6d2ls
bFN0b3JlVmFsdWVTbG93KToKKyAgICAgICAgKEpTQzo6SW5mZXJyZWRUeXBlOjptYWtlVG9wU2xv
dyk6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlwZTo6c2V0KToKKyAgICAgICAgKEpTQzo6SW5m
ZXJyZWRUeXBlOjpyZW1vdmVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6
OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KToKKyAgICAgICAgKiBydW50aW1lL0luZmVycmVkVHlw
ZS5oOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgor
ICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKwogMjAxNy0xMi0xMSAgU2FhbSBCYXJhdGkgIDxzYmFy
YXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBXZSBuZWVkIHRvIGRpc2FibGVDYWNoaW5nKCkgaW4g
RXJyb3JJbnN0YW5jZSB3aGVuIHdlIG1hdGVyaWFsaXplIHByb3BlcnRpZXMKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDIyNTc3MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNDk1LDYgKzQ5NSw3IEBAIGhl
YXAvSGVhcFNuYXBzaG90LmNwcAogaGVhcC9IZWFwU25hcHNob3RCdWlsZGVyLmNwcAogaGVhcC9J
bmNyZW1lbnRhbFN3ZWVwZXIuY3BwCiBoZWFwL0lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3Bw
CitoZWFwL0lzb0NlbGxTZXQuY3BwCiBoZWFwL0lzb1N1YnNwYWNlLmNwcAogaGVhcC9KSVRTdHVi
Um91dGluZVNldC5jcHAKIGhlYXAvTGFyZ2VBbGxvY2F0aW9uLmNwcApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyNTc3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC00NzQsNiArNDc0LDkgQEAKIAkJMEZCMTc2NjMxOTZCOEY5RTAwOTEwNTJBIC8qIERG
R1B1cmVWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZCMTc2NUYxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oICovOyB9OwogCQkw
RkIzODc4RTFCRkJDNDREMDBFM0FCMUUgLyogQWlyQmxvY2tXb3JrbGlzdC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMzg3OEIxQkZCQzQ0RDAwRTNB
QjFFIC8qIEFpckJsb2NrV29ya2xpc3QuaCAqLzsgfTsKIAkJMEZCMzg3OTAxQkZCQzQ0RDAwRTNB
QjFFIC8qIEFpck9wdGltaXplQmxvY2tPcmRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMzg3OEQxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpck9wdGlt
aXplQmxvY2tPcmRlci5oICovOyB9OworCQkwRkI0Njc3RjFGRERBNkU5MDAzRkNCMDkgLyogQXRv
bUluZGljZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGQjQ2NzdFMUZEREE2RTUwMDNGQ0IwOSAvKiBBdG9tSW5kaWNlcy5oICovOyB9OworCQkwRkI0
Njc4MDFGRERBNkYxMDAzRkNCMDkgLyogSXNvQ2VsbFNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNDY3N0QxRkREQTZEOTAwM0ZDQjA5IC8qIElz
b0NlbGxTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkwRkI0Njc4MTFGRERBNkY3MDAzRkNCMDkgLyogSXNvQ2VsbFNldElubGluZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjQ2NzdCMUZEREE2
RDgwMDNGQ0IwOSAvKiBJc29DZWxsU2V0SW5saW5lcy5oICovOyB9OwogCQkwRkI0NzY3RTFEOTlB
RUE5MDA4RUE2Q0IgLyogR0NEZWZlcnJhbENvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjQ3NjdDMUQ5OUFFQTcwMDhFQTZDQiAvKiBHQ0Rl
ZmVycmFsQ29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGQjQ3NjdGMUQ5OUFFQUQwMDhFQTZDQiAvKiBHQ0RlZmVycmFsQ29udGV4dElu
bGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QjQ3NjdEMUQ5OUFFQTcwMDhFQTZDQiAvKiBHQ0RlZmVycmFsQ29udGV4dElubGluZXMuaCAqLzsg
fTsKIAkJMEZCNEZCNzQxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNEZCNzExQkM4NDMx
NDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aC5oICovOyB9OwpAQCAtMjU2Miw2ICsyNTY1LDEw
IEBACiAJCTBGQjM4NzkxMUJGRDMxQTEwMEUzQUIxRSAvKiBGVExDb21waWxlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTENvbXBpbGUuY3BwOyBwYXRoID0gZnRs
L0ZUTENvbXBpbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0MTU4MzFE
NzhGOTgyMDBERjhEMDkgLyogQXJyYXlDb252ZW50aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBBcnJheUNvbnZlbnRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZCNDM4QTIxOTI3MEIxRDAwRTFGQkM5IC8qIFN0cnVjdHVyZVNldC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJ1Y3R1cmVTZXQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI0Njc3QjFGRERBNkQ4MDAzRkNCMDkg
LyogSXNvQ2VsbFNldElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SXNvQ2VsbFNldElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCNDY3
N0MxRkREQTZEOTAwM0ZDQjA5IC8qIElzb0NlbGxTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSXNvQ2VsbFNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGQjQ2NzdEMUZEREE2RDkwMDNGQ0IwOSAvKiBJc29DZWxsU2V0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElzb0NlbGxTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZCNDY3N0UxRkREQTZFNTAwM0ZDQjA5IC8qIEF0b21JbmRpY2VzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF0b21JbmRpY2VzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGQjQ3NjdDMUQ5OUFFQTcwMDhFQTZDQiAvKiBHQ0RlZmVycmFs
Q29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ0RlZmVycmFsQ29u
dGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0NzY3RDFEOTlBRUE3MDA4
RUE2Q0IgLyogR0NEZWZlcnJhbENvbnRleHRJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEdDRGVmZXJyYWxDb250ZXh0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkI0QjUxMDE2QjNBOTY0MDAzRjY5NkIgLyogREZHTWluaWZpZWRJRC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdNaW5pZmllZElELmg7IHBhdGgg
PSBkZmcvREZHTWluaWZpZWRJRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTUy
NSw2ICs1NTMyLDcgQEAKIAkJCQkwRjk2MzAzNTFENDE5MkMzMDA1NjA5RDkgLyogQWxsb2NhdG9y
QXR0cmlidXRlcy5jcHAgKi8sCiAJCQkJMEY5NjMwMzYxRDQxOTJDMzAwNTYwOUQ5IC8qIEFsbG9j
YXRvckF0dHJpYnV0ZXMuaCAqLywKIAkJCQkwRjMwQ0I1RDFGQ0U0NkI0MDA0QjUzMjMgLyogQWxs
b2NhdG9yRm9yTW9kZS5oICovLAorCQkJCTBGQjQ2NzdFMUZEREE2RTUwMDNGQ0IwOSAvKiBBdG9t
SW5kaWNlcy5oICovLAogCQkJCTBGREU4N0Y4MURGRDBDNkQwMDY0QzM5MCAvKiBDZWxsQ29udGFp
bmVyLmNwcCAqLywKIAkJCQkwRjA3MEE0MjFENTQzQTg5MDA2RTcyMzIgLyogQ2VsbENvbnRhaW5l
ci5oICovLAogCQkJCTBGMDcwQTQzMUQ1NDNBODkwMDZFNzIzMiAvKiBDZWxsQ29udGFpbmVySW5s
aW5lcy5oICovLApAQCAtNTYxMSw2ICs1NjE5LDkgQEAKIAkJCQlDMjVGOEJDQzE1NzU0NEE5MDAy
NDVCNzEgLyogSW5jcmVtZW50YWxTd2VlcGVyLmggKi8sCiAJCQkJMEZEQ0UxMkYxRkIxMUQ5RDAw
NkYzOTAxIC8qIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwICovLAogCQkJCTBGRENFMTMw
MUZCMTFEOUQwMDZGMzkwMSAvKiBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggKi8sCisJCQkJ
MEZCNDY3N0MxRkREQTZEOTAwM0ZDQjA5IC8qIElzb0NlbGxTZXQuY3BwICovLAorCQkJCTBGQjQ2
NzdEMUZEREE2RDkwMDNGQ0IwOSAvKiBJc29DZWxsU2V0LmggKi8sCisJCQkJMEZCNDY3N0IxRkRE
QTZEODAwM0ZDQjA5IC8qIElzb0NlbGxTZXRJbmxpbmVzLmggKi8sCiAJCQkJMEZEQ0UxMkMxRkFG
QjRERTAwNkYzOTAxIC8qIElzb1N1YnNwYWNlLmNwcCAqLywKIAkJCQkwRkRDRTEyQjFGQUZCNERF
MDA2RjM5MDEgLyogSXNvU3Vic3BhY2UuaCAqLywKIAkJCQkwRjc2NkQyOTE1QThDQzM0MDA4RjM2
M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuY3BwICovLApAQCAtNzk5Nyw2ICs4MDA4LDcgQEAKIAkJ
CQkwRkVDODU3MjFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYyQzYzQkMxRTYzNDQwQzAwQzEzODM5IC8qIEFpckJsb2NrSW5zZXJ0aW9uU2V0
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkIzODc4RTFCRkJDNDREMDBFM0FCMUUgLyogQWlyQmxv
Y2tXb3JrbGlzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCNDY3ODExRkREQTZGNzAwM0ZDQjA5
IC8qIElzb0NlbGxTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc5QzdDQTFFNzRD
OTNCMDBFQjM0RDEgLyogQWlyQnJlYWtDcml0aWNhbEVkZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjYxODMyQTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkVDODU3NDFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVj
aWFsLmggaW4gSGVhZGVycyAqLywKQEAgLTg5NzMsNiArODk4NSw3IEBACiAJCQkJQUQyRkNCRTUx
REI1OERBRDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQURFODAyOTkxRTA4RjFERTAwNThERTc4IC8qIEpTV2ViQXNzZW1ibHlMaW5rRXJyb3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQkU3MURCNThEQUQwMEIzRTczNiAvKiBKU1dlYkFz
c2VtYmx5TWVtb3J5LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkI0Njc3RjFGRERBNkU5MDAzRkNC
MDkgLyogQXRvbUluZGljZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQzA1MURCNThEQUQw
MEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5TW9kdWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJG
Q0JFOTFEQjU4REFEMDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQUQyRkNCRUIxREI1OERBRDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlU
YWJsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05MjU5LDYgKzkyNzIsNyBAQAogCQkJCUMyMEJBOTJE
MTZCQjFDMTUwMEIzQUVBMiAvKiBTdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGOTMzMkE1MTRDQTdEREQwMDg1RjNDNiAvKiBTdHJ1Y3R1cmVTZXQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGNzY2RDM5MTVBRTRBMUYwMDhGMzYzRSAvKiBTdHJ1Y3R1cmVTdHVi
Q2xlYXJpbmdXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkI0Njc4MDFGRERBNkYx
MDAzRkNCMDkgLyogSXNvQ2VsbFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNDRjBEMDgwRUYw
QUFCOTAwNDEzQzhGIC8qIFN0cnVjdHVyZVN0dWJJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzkwNDE0ODBFQjkyNTA5MDBGRTI2RkEgLyogU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjdERjEzNzFFMjk3MEUxMDA5NTk1MUIgLyogU3Vic3BhY2UuaCBp
biBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQXRvbUluZGlj
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BdG9tSW5kaWNl
cy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0F0b21JbmRp
Y2VzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIk1h
cmtlZEJsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitzdHJ1Y3QgQXRvbUluZGljZXMgewor
ICAgIEF0b21JbmRpY2VzKCkgeyB9CisgICAgCisgICAgQXRvbUluZGljZXMoSGVhcENlbGwqIGNl
bGwpCisgICAgICAgIDogYmxvY2soTWFya2VkQmxvY2s6OmJsb2NrRm9yKGNlbGwpKQorICAgICAg
ICAsIGJsb2NrSW5kZXgoYmxvY2stPmhhbmRsZSgpLmluZGV4KCkpCisgICAgICAgICwgYXRvbU51
bWJlcihibG9jay0+YXRvbU51bWJlcihjZWxsKSkKKyAgICB7CisgICAgfQorICAgIAorICAgIE1h
cmtlZEJsb2NrKiBibG9jazsKKyAgICBzaXplX3QgYmxvY2tJbmRleDsKKyAgICBzaXplX3QgYXRv
bU51bWJlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjI1NzcwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNs
dWRlICJJbmNyZW1lbnRhbFN3ZWVwZXIuaCIKICNpbmNsdWRlICJJbmZlcnJlZFN0cnVjdHVyZS5o
IgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCisjaW5jbHVkZSAiSXNvQ2VsbFNldElubGluZXMu
aCIKICNpbmNsdWRlICJKSVRTdHViUm91dGluZVNldC5oIgogI2luY2x1ZGUgIkpJVFdvcmtsaXN0
LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgpAQCAtNTUyLDE4ICs1NTMsMTggQEAgdm9pZCBI
ZWFwOjphZGRSZWZlcmVuY2UoSlNDZWxsKiBjZWxsLCBBcgogICAgIH0KIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgQ2VsbFR5cGU+Ci12b2lkIEhlYXA6OmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFs
aXplcnMoU3Vic3BhY2UmIHN1YnNwYWNlKQordGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIHR5
cGVuYW1lIENlbGxTZXQ+Cit2b2lkIEhlYXA6OmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXpl
cnMoQ2VsbFNldCYgY2VsbFNldCkKIHsKLSAgICBzdWJzcGFjZS5mb3JFYWNoTWFya2VkQ2VsbCgK
KyAgICBjZWxsU2V0LmZvckVhY2hNYXJrZWRDZWxsKAogICAgICAgICBbJl0gKEhlYXBDZWxsKiBj
ZWxsLCBIZWFwQ2VsbDo6S2luZCkgewotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q2VsbFR5cGUq
PihjZWxsKS0+ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKnZtKCkpOworICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PENlbGxUeXBlKj4oY2VsbCktPmZpbmFsaXplVW5jb25kaXRpb25hbGx5
KCp2bSgpKTsKICAgICAgICAgfSk7CiB9CiAKIHZvaWQgSGVhcDo6ZmluYWxpemVVbmNvbmRpdGlv
bmFsRmluYWxpemVycygpCiB7Ci0gICAgZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVyczxJ
bmZlcnJlZFN0cnVjdHVyZT4odm0oKS0+aW5mZXJyZWRTdHJ1Y3R1cmVTcGFjZSk7CisgICAgZmlu
YWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVyczxJbmZlcnJlZFR5cGU+KHZtKCktPmluZmVycmVk
VHlwZXNXaXRoRmluYWxpemVycyk7CiAgICAgCiAgICAgd2hpbGUgKG1fdW5jb25kaXRpb25hbEZp
bmFsaXplcnMuaGFzTmV4dCgpKSB7CiAgICAgICAgIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIqIGZp
bmFsaXplciA9IG1fdW5jb25kaXRpb25hbEZpbmFsaXplcnMucmVtb3ZlTmV4dCgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjI1NzcwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OTYsOCArNDk2LDgg
QEAgcHJpdmF0ZToKICAgICB2b2lkIG5vdGlmeUluY3JlbWVudGFsU3dlZXBlcigpOwogICAgIHZv
aWQgaGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZT4KLSAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMoU3Vic3BhY2Um
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgdHlwZW5hbWUgQ2VsbFNldD4KKyAg
ICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMoQ2VsbFNldCYpOwogICAgIAog
ICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpOwogICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5jcHAJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklzb0NlbGxTZXQuaCIK
KworI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvcklubGluZXMuaCIKKyNpbmNsdWRlICJNYXJrZWRC
bG9ja0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0lzb0NlbGxTZXQ6Oklzb0NlbGxT
ZXQoSXNvU3Vic3BhY2UmIHN1YnNwYWNlKQorICAgIDogbV9zdWJzcGFjZShzdWJzcGFjZSkKK3sK
KyAgICBzaXplX3Qgc2l6ZSA9IHN1YnNwYWNlLm1fYWxsb2NhdG9yLm1fYmxvY2tzLnNpemUoKTsK
KyAgICBtX2Jsb2Nrc1dpdGhCaXRzLnJlc2l6ZShzaXplKTsKKyAgICBtX2JpdHMuZ3JvdyhzaXpl
KTsKKyAgICBzdWJzcGFjZS5tX2NlbGxTZXRzLmFwcGVuZCh0aGlzKTsKK30KKworSXNvQ2VsbFNl
dDo6fklzb0NlbGxTZXQoKQoreworICAgIGlmIChpc09uTGlzdCgpKQorICAgICAgICBCYXNpY1Jh
d1NlbnRpbmVsTm9kZTxJc29DZWxsU2V0Pjo6cmVtb3ZlKCk7Cit9CisKK05FVkVSX0lOTElORSBC
aXRtYXA8TWFya2VkQmxvY2s6OmF0b21zUGVyQmxvY2s+KiBJc29DZWxsU2V0OjphZGRTbG93KHNp
emVfdCBibG9ja0luZGV4KQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9zdWJzcGFj
ZS5tX2FsbG9jYXRvci5tX2JpdHZlY3RvckxvY2spOworICAgIGF1dG8mIGJpdHNQdHJSZWYgPSBt
X2JpdHNbYmxvY2tJbmRleF07CisgICAgYXV0byogYml0cyA9IGJpdHNQdHJSZWYuZ2V0KCk7Cisg
ICAgaWYgKCFiaXRzKSB7CisgICAgICAgIGJpdHNQdHJSZWYgPSBzdGQ6Om1ha2VfdW5pcXVlPEJp
dG1hcDxNYXJrZWRCbG9jazo6YXRvbXNQZXJCbG9jaz4+KCk7CisgICAgICAgIGJpdHMgPSBiaXRz
UHRyUmVmLmdldCgpOworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICBt
X2Jsb2Nrc1dpdGhCaXRzW2Jsb2NrSW5kZXhdID0gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGJp
dHM7Cit9CisKK3ZvaWQgSXNvQ2VsbFNldDo6ZGlkUmVzaXplQml0cyhzaXplX3QgbmV3U2l6ZSkK
K3sKKyAgICBtX2Jsb2Nrc1dpdGhCaXRzLnJlc2l6ZShuZXdTaXplKTsKKyAgICBtX2JpdHMuZ3Jv
dyhuZXdTaXplKTsKK30KKwordm9pZCBJc29DZWxsU2V0OjpkaWRSZW1vdmVCbG9jayhzaXplX3Qg
YmxvY2tJbmRleCkKK3sKKyAgICBtX2Jsb2Nrc1dpdGhCaXRzW2Jsb2NrSW5kZXhdID0gZmFsc2U7
CisgICAgbV9iaXRzW2Jsb2NrSW5kZXhdID0gbnVsbHB0cjsKK30KKwordm9pZCBJc29DZWxsU2V0
Ojpzd2VlcFRvRnJlZUxpc3QoTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2spCit7CisgICAgUkVM
RUFTRV9BU1NFUlQoIWJsb2NrLT5pc0FsbG9jYXRlZCgpKTsKKyAgICAKKyAgICBpZiAoIW1fYmxv
Y2tzV2l0aEJpdHNbYmxvY2stPmluZGV4KCldKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
V1RGOjpsb2FkTG9hZEZlbmNlKCk7CisgICAgCisgICAgaWYgKCFtX2JpdHNbYmxvY2stPmluZGV4
KCldKSB7CisgICAgICAgIGRhdGFMb2coIkZBVEFMOiBmb3IgYmxvY2sgaW5kZXggIiwgYmxvY2st
PmluZGV4KCksICI6XG4iKTsKKyAgICAgICAgZGF0YUxvZygiQmxvY2tzIHdpdGggYml0cyBzYXlz
OiAiLCAhIW1fYmxvY2tzV2l0aEJpdHNbYmxvY2stPmluZGV4KCldLCAiXG4iKTsKKyAgICAgICAg
ZGF0YUxvZygiQml0cyBzYXlzOiAiLCBSYXdQb2ludGVyKG1fYml0c1tibG9jay0+aW5kZXgoKV0u
Z2V0KCkpLCAiXG4iKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICB9CisgICAgCisgICAgaWYgKGJsb2NrLT5oYXNBbnlOZXdseUFsbG9jYXRlZCgpKSB7CisgICAg
ICAgIG1fYml0c1tibG9jay0+aW5kZXgoKV0tPmZpbHRlcihibG9jay0+bmV3bHlBbGxvY2F0ZWQo
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYmxvY2stPmlzRW1wdHkoKSB8
fCBibG9jay0+YXJlTWFya3NTdGFsZSgpKSB7CisgICAgICAgIG1fYmxvY2tzV2l0aEJpdHNbYmxv
Y2stPmluZGV4KCldID0gZmFsc2U7CisgICAgICAgIG1fYml0c1tibG9jay0+aW5kZXgoKV0gPSBu
dWxscHRyOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG1fYml0c1tibG9jay0+
aW5kZXgoKV0tPmZpbHRlcihibG9jay0+YmxvY2soKS5tYXJrcygpKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmgJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBdG9tSW5k
aWNlcy5oIgorI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4KKyNpbmNsdWRlIDx3dGYvQ29uY3VycmVu
dFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+CisKK25hbWVzcGFjZSBK
U0MgeworCitjbGFzcyBIZWFwQ2VsbDsKK2NsYXNzIElzb1N1YnNwYWNlOworCisvLyBDcmVhdGUg
YSBzZXQgb2YgY2VsbHMgdGhhdCBhcmUgaW4gYW4gSXNvU3Vic3BhY2UuIFRoaXMgYWxsb3dzIGNv
bmN1cnJlbnQgTygxKSBzZXQgaW5zZXJ0aW9uIGFuZAorLy8gcmVtb3ZhbC4gRWFjaCBzdWNoIHNl
dCBzaG91bGQgYmUgdGhvdWdodCBvZiBhcyBhIDAuOCUgaW5jcmVhc2UgaW4gb2JqZWN0IHNpemUg
Zm9yIG9iamVjdHMgaW4gdGhhdAorLy8gSXNvU3Vic3BhY2UgKGl0J3MgbGlrZSBhZGRpbmcgMSBi
aXQgZXZlcnkgMTYgYnl0ZXMsIG9yIDEgYml0IGV2ZXJ5IDEyOCBiaXRzKS4KK2NsYXNzIElzb0Nl
bGxTZXQgOiBwdWJsaWMgQmFzaWNSYXdTZW50aW5lbE5vZGU8SXNvQ2VsbFNldD4geworcHVibGlj
OgorICAgIElzb0NlbGxTZXQoSXNvU3Vic3BhY2UmIHN1YnNwYWNlKTsKKyAgICB+SXNvQ2VsbFNl
dCgpOworICAgIAorICAgIGJvb2wgYWRkKEhlYXBDZWxsKiBjZWxsKTsKKyAgICAKKyAgICBib29s
IHJlbW92ZShIZWFwQ2VsbCogY2VsbCk7CisgICAgCisgICAgYm9vbCBjb250YWlucyhIZWFwQ2Vs
bCogY2VsbCkgY29uc3Q7CisgICAgCisgICAgLy8gVGhpcyB3aWxsIGhhdmUgdG8gZG8gYSBjb21i
aW5lZCBzZWFyY2ggb3ZlciB3aGF0ZXZlciBTdWJzcGFjZTo6Zm9yRWFjaE1hcmtlZENlbGwgdXNl
cyBhbmQKKyAgICAvLyBvdXIgbV9ibG9ja3NXaXRoQml0cy4KKyAgICAvLyBOT1RFOiBJdCdzIGls
bGVnYWwgdG8gY2FsbCBhZGQoKSBvciByZW1vdmUoKSBjb25jdXJyZW50bHkgdG8gdGhpcywgYnV0
IHNlbGYtcmVtb3ZlKCkgd2lsbCB3b3JrLgorICAgIC8vIEJ1dCBpdCdzIGJldHRlciBpZiB5b3Ug
cmV0dXJuIFJlbW92ZSBpbnN0ZWFkLgorICAgIGVudW0gY2xhc3MgRm9yRWFjaFJlc3VsdCB7Cisg
ICAgICAgIENvbnRpbnVlLAorICAgICAgICBCcmVhaywKKyAgICAgICAgUmVtb3ZlQW5kQ29udGlu
dWUsCisgICAgICAgIFJlbW92ZUFuZEJyZWFrCisgICAgfTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jPgorICAgIHZvaWQgZm9yRWFjaE1hcmtlZENlbGwoY29uc3QgRnVuYyYpOworICAgIAor
cHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgSXNvU3Vic3BhY2U7CisgICAgCisgICAgQml0bWFw
PE1hcmtlZEJsb2NrOjphdG9tc1BlckJsb2NrPiogYWRkU2xvdyhzaXplX3QgYmxvY2tJbmRleCk7
CisgICAgCisgICAgdm9pZCBkaWRSZXNpemVCaXRzKHNpemVfdCBuZXdTaXplKTsKKyAgICB2b2lk
IGRpZFJlbW92ZUJsb2NrKHNpemVfdCBibG9ja0luZGV4KTsKKyAgICB2b2lkIHN3ZWVwVG9GcmVl
TGlzdChNYXJrZWRCbG9jazo6SGFuZGxlKik7CisgICAgCisgICAgSXNvU3Vic3BhY2UmIG1fc3Vi
c3BhY2U7CisgICAgCisgICAgLy8gSWRlYTogc3dlZXBpbmcgdG8gZnJlZS1saXN0IGNsZWFycyBi
aXRzIGZvciB0aG9zZSBjZWxscyB0aGF0IHdlcmUgZnJlZS1saXN0ZWQuIFRoZSBmaXJzdCB0aW1l
CisgICAgLy8gd2UgYWRkIGEgY2VsbCBpbiBhIGJsb2NrLCB0aGF0IGJsb2NrIGdldHMgYSBmcmVl
LWxpc3QuIFVubGVzcyB3ZSBkbyBzb21ldGhpbmcgdGhhdCBvYnZpb3VzbHkKKyAgICAvLyBjbGVh
cnMgYWxsIGJpdHMgZm9yIGEgYmxvY2ssIHdlIGtlZXAgaXQgc2V0IGluIGJsb2Nrc1dpdGhCaXRz
LgorICAgIAorICAgIEZhc3RCaXRWZWN0b3IgbV9ibG9ja3NXaXRoQml0czsKKyAgICBDb25jdXJy
ZW50VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCaXRtYXA8TWFya2VkQmxvY2s6OmF0b21zUGVyQmxv
Y2s+Pj4gbV9iaXRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldElubGluZXMuaAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0SW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSXNvQ2VsbFNldC5o
IgorI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
aW5saW5lIGJvb2wgSXNvQ2VsbFNldDo6YWRkKEhlYXBDZWxsKiBjZWxsKQoreworICAgIEF0b21J
bmRpY2VzIGF0b21JbmRpY2VzKGNlbGwpOworICAgIGF1dG8mIGJpdHNQdHJSZWYgPSBtX2JpdHNb
YXRvbUluZGljZXMuYmxvY2tJbmRleF07CisgICAgYXV0byogYml0cyA9IGJpdHNQdHJSZWYuZ2V0
KCk7CisgICAgaWYgKFVOTElLRUxZKCFiaXRzKSkKKyAgICAgICAgYml0cyA9IGFkZFNsb3coYXRv
bUluZGljZXMuYmxvY2tJbmRleCk7CisgICAgcmV0dXJuICFiaXRzLT5jb25jdXJyZW50VGVzdEFu
ZFNldChhdG9tSW5kaWNlcy5hdG9tTnVtYmVyKTsKK30KKworaW5saW5lIGJvb2wgSXNvQ2VsbFNl
dDo6cmVtb3ZlKEhlYXBDZWxsKiBjZWxsKQoreworICAgIEF0b21JbmRpY2VzIGF0b21JbmRpY2Vz
KGNlbGwpOworICAgIGF1dG8mIGJpdHNQdHJSZWYgPSBtX2JpdHNbYXRvbUluZGljZXMuYmxvY2tJ
bmRleF07CisgICAgYXV0byogYml0cyA9IGJpdHNQdHJSZWYuZ2V0KCk7CisgICAgaWYgKCFiaXRz
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGJpdHMtPmNvbmN1cnJlbnRUZXN0
QW5kQ2xlYXIoYXRvbUluZGljZXMuYXRvbU51bWJlcik7Cit9CisKK2lubGluZSBib29sIElzb0Nl
bGxTZXQ6OmNvbnRhaW5zKEhlYXBDZWxsKiBjZWxsKSBjb25zdAoreworICAgIEF0b21JbmRpY2Vz
IGF0b21JbmRpY2VzKGNlbGwpOworICAgIGF1dG8qIGJpdHMgPSBtX2JpdHNbYXRvbUluZGljZXMu
YmxvY2tJbmRleF0uZ2V0KCk7CisgICAgaWYgKGJpdHMpCisgICAgICAgIHJldHVybiBiaXRzLT5n
ZXQoYXRvbUluZGljZXMuYXRvbU51bWJlcik7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jPgordm9pZCBJc29DZWxsU2V0Ojpmb3JFYWNoTWFya2VkQ2VsbChj
b25zdCBGdW5jJiBmdW5jKQoreworICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yID0gbV9z
dWJzcGFjZS5tX2FsbG9jYXRvcjsKKyAgICAoYWxsb2NhdG9yLm1fbWFya2luZ05vdEVtcHR5ICYg
bV9ibG9ja3NXaXRoQml0cykuZm9yRWFjaFNldEJpdCgKKyAgICAgICAgWyZdIChzaXplX3QgYmxv
Y2tJbmRleCkgeworICAgICAgICAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2sgPSBhbGxv
Y2F0b3IubV9ibG9ja3NbYmxvY2tJbmRleF07CisKKyAgICAgICAgICAgIGF1dG8qIGJpdHMgPSBt
X2JpdHNbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBib29sIGhhZEJpdHMgPSBmYWxz
ZTsKKyAgICAgICAgICAgIGJsb2NrLT5mb3JFYWNoTWFya2VkQ2VsbCgKKyAgICAgICAgICAgICAg
ICBbJl0gKHNpemVfdCBhdG9tTnVtYmVyLCBIZWFwQ2VsbCogY2VsbCwgSGVhcENlbGw6OktpbmQg
a2luZCkgLT4gSXRlcmF0aW9uU3RhdHVzIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJpdHMt
PmdldChhdG9tTnVtYmVyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgRm9yRWFjaFJlc3Vs
dCByZXN1bHQgPSBmdW5jKGNlbGwsIGtpbmQpOworICAgICAgICAgICAgICAgICAgICAgICAgc3dp
dGNoIChyZXN1bHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRm9yRWFjaFJlc3Vs
dDo6Q29udGludWU6CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEZvckVhY2hSZXN1bHQ6
OkJyZWFrOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhZEJpdHMgPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSBGb3JFYWNoUmVzdWx0OjpSZW1vdmVBbmRDb250aW51ZToKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgRm9yRWFjaFJlc3VsdDo6UmVtb3ZlQW5kQnJlYWs6CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYml0cy0+Y2xlYXIoYXRvbU51bWJlcik7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKHJlc3VsdCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSBGb3JFYWNoUmVzdWx0OjpDb250aW51ZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgRm9yRWFjaFJlc3VsdDo6UmVtb3ZlQW5kQ29udGludWU6CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEZvckVhY2hSZXN1
bHQ6OkJyZWFrOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBGb3JFYWNoUmVzdWx0OjpS
ZW1vdmVBbmRCcmVhazoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0
aW9uU3RhdHVzOjpEb25lOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNv
bnRpbnVlOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaWYgKCFoYWRCaXRzKSB7
CisgICAgICAgICAgICAgICAgbV9iaXRzW2Jsb2NrSW5kZXhdID0gbnVsbHB0cjsKKyAgICAgICAg
ICAgICAgICBtX2Jsb2Nrc1dpdGhCaXRzW2Jsb2NrSW5kZXhdID0gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmNwcAkocmV2aXNpb24gMjI1NzcwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02Nyw1ICs2NywyOSBAQCB2b2lkKiBJc29TdWJzcGFjZTo6YWxsb2NhdGVOb25WaXJ0
dWFsKHNpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAordm9pZCBJc29TdWJzcGFjZTo6ZGlkUmVz
aXplQml0cyhzaXplX3QgYmxvY2tJbmRleCkKK3sKKyAgICBtX2NlbGxTZXRzLmZvckVhY2goCisg
ICAgICAgIFsmXSAoSXNvQ2VsbFNldCogc2V0KSB7CisgICAgICAgICAgICBzZXQtPmRpZFJlc2l6
ZUJpdHMoYmxvY2tJbmRleCk7CisgICAgICAgIH0pOworfQorCit2b2lkIElzb1N1YnNwYWNlOjpk
aWRSZW1vdmVCbG9jayhzaXplX3QgYmxvY2tJbmRleCkKK3sKKyAgICBtX2NlbGxTZXRzLmZvckVh
Y2goCisgICAgICAgIFsmXSAoSXNvQ2VsbFNldCogc2V0KSB7CisgICAgICAgICAgICBzZXQtPmRp
ZFJlbW92ZUJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICB9KTsKK30KKwordm9pZCBJc29TdWJz
cGFjZTo6ZGlkQmVnaW5Td2VlcGluZ1RvRnJlZUxpc3QoTWFya2VkQmxvY2s6OkhhbmRsZSogYmxv
Y2spCit7CisgICAgbV9jZWxsU2V0cy5mb3JFYWNoKAorICAgICAgICBbJl0gKElzb0NlbGxTZXQq
IHNldCkgeworICAgICAgICAgICAgc2V0LT5zd2VlcFRvRnJlZUxpc3QoYmxvY2spOworICAgICAg
ICB9KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSXNvU3Vic3BhY2UuaAkocmV2aXNpb24gMjI1NzcwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTAgKzI3
LDEyIEBACiAKICNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJTdWJzcGFj
ZS5oIgorI2luY2x1ZGUgPHd0Zi9TaW5nbHlMaW5rZWRMaXN0V2l0aFRhaWwuaD4KIAogbmFtZXNw
YWNlIEpTQyB7CiAKIGNsYXNzIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I7CitjbGFzcyBJc29D
ZWxsU2V0OwogCiBjbGFzcyBJc29TdWJzcGFjZSA6IHB1YmxpYyBTdWJzcGFjZSB7CiBwdWJsaWM6
CkBAIC00Niw5ICs0OCwxNiBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCog
YWxsb2NhdGVOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJy
YWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpOwogCiBwcml2YXRl
OgorICAgIGZyaWVuZCBjbGFzcyBJc29DZWxsU2V0OworICAgIAorICAgIHZvaWQgZGlkUmVzaXpl
Qml0cyhzaXplX3QgbmV3U2l6ZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRSZW1vdmVCbG9jayhz
aXplX3QgYmxvY2tJbmRleCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRCZWdpblN3ZWVwaW5nVG9G
cmVlTGlzdChNYXJrZWRCbG9jazo6SGFuZGxlKikgb3ZlcnJpZGU7CisgICAgCiAgICAgc2l6ZV90
IG1fc2l6ZTsKICAgICBNYXJrZWRBbGxvY2F0b3IgbV9hbGxvY2F0b3I7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I+IG1faXNvQWxpZ25lZE1lbW9yeUFsbG9j
YXRvcjsKKyAgICBTZW50aW5lbExpbmtlZExpc3Q8SXNvQ2VsbFNldCwgQmFzaWNSYXdTZW50aW5l
bE5vZGU8SXNvQ2VsbFNldD4+IG1fY2VsbFNldHM7CiB9OwogCiBpbmxpbmUgTWFya2VkQWxsb2Nh
dG9yKiBJc29TdWJzcGFjZTo6YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplX3Qgc2l6ZSwgQWxs
b2NhdG9yRm9yTW9kZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFs
bG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjI1NzcwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYxLDYgKzI2
MSw3IEBAIHZvaWQgTWFya2VkQWxsb2NhdG9yOjphZGRCbG9jayhNYXJrZWRCbG8KICAgICAgICAg
ICAgIEFTU0VSVChtX2Jsb2Nrcy5jYXBhY2l0eSgpID4gb2xkQ2FwYWNpdHkpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2JpdHZlY3RvckxvY2spOworICAg
ICAgICAgICAgc3Vic3BhY2UoKS0+ZGlkUmVzaXplQml0cyhtX2Jsb2Nrcy5jYXBhY2l0eSgpKTsK
ICAgICAgICAgICAgIGZvckVhY2hCaXRWZWN0b3IoCiAgICAgICAgICAgICAgICAgbG9ja2VyLAog
ICAgICAgICAgICAgICAgIFsmXSAoRmFzdEJpdFZlY3RvciYgdmVjdG9yKSB7CkBAIC0yOTAsNyAr
MjkxLDkgQEAgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OnJlbW92ZUJsb2NrKE1hcmtlZAogewogICAg
IEFTU0VSVChibG9jay0+YWxsb2NhdG9yKCkgPT0gdGhpcyk7CiAgICAgQVNTRVJUKG1fYmxvY2tz
W2Jsb2NrLT5pbmRleCgpXSA9PSBibG9jayk7Ci0KKyAgICAKKyAgICBzdWJzcGFjZSgpLT5kaWRS
ZW1vdmVCbG9jayhibG9jay0+aW5kZXgoKSk7CisgICAgCiAgICAgbV9ibG9ja3NbYmxvY2stPmlu
ZGV4KCldID0gbnVsbHB0cjsKICAgICBtX2ZyZWVCbG9ja0luZGljZXMuYXBwZW5kKGJsb2NrLT5p
bmRleCgpKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFs
bG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZEFsbG9jYXRvci5oCShyZXZpc2lvbiAyMjU3NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgR0NEZWZlcnJhbENvbnRleHQ7CiBjbGFzcyBIZWFwOwor
Y2xhc3MgSXNvQ2VsbFNldDsKIGNsYXNzIE1hcmtlZFNwYWNlOwogY2xhc3MgTExJbnRPZmZzZXRz
RXh0cmFjdG9yOwogCkBAIC0xNjIsNiArMTYzLDcgQEAgcHVibGljOgogICAgIHZvaWQgZHVtcEJp
dHMoUHJpbnRTdHJlYW0mID0gV1RGOjpkYXRhRmlsZSgpKTsKICAgICAKIHByaXZhdGU6CisgICAg
ZnJpZW5kIGNsYXNzIElzb0NlbGxTZXQ7CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtlZEJsb2NrOwog
ICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2UoR0NEZWZl
cnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvcklubGlu
ZXMuaAkocmV2aXNpb24gMjI1NzcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkQWxsb2NhdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAK
ICNpbmNsdWRlICJGcmVlTGlzdElubGluZXMuaCIKICNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3Iu
aCIKKyNpbmNsdWRlICJWTS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkocmV2aXNpb24gMjI1NzcwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMDEsMTEgKzMwMSw2IEBAIHNpemVfdCBNYXJrZWRCbG9jazo6bWFya0NvdW50KCkKICAg
ICByZXR1cm4gYXJlTWFya3NTdGFsZSgpID8gMCA6IG1fbWFya3MuY291bnQoKTsKIH0KIAotYm9v
bCBNYXJrZWRCbG9jazo6SGFuZGxlOjppc0VtcHR5KCkKLXsKLSAgICByZXR1cm4gbV9hbGxvY2F0
b3ItPmlzRW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzKTsKLX0KLQogdm9pZCBNYXJrZWRC
bG9jazo6Y2xlYXJIYXNBbnlNYXJrZWQoKQogewogICAgIG1fYmlhc2VkTWFya0NvdW50ID0gbV9t
YXJrQ291bnRCaWFzOwpAQCAtNDAzLDExICszOTgsMTMgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFu
ZGxlOjpzd2VlcChGcmVlTGlzdAogICAgICAgICByZXR1cm47CiAKICAgICBSRUxFQVNFX0FTU0VS
VCghbV9pc0ZyZWVMaXN0ZWQpOwotICAgIFJFTEVBU0VfQVNTRVJUKCFtX2FsbG9jYXRvci0+aXNB
bGxvY2F0ZWQoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzKSk7CisgICAgUkVMRUFTRV9BU1NFUlQo
IWlzQWxsb2NhdGVkKCkpOwogICAgIAogICAgIGlmIChzcGFjZSgpLT5pc01hcmtpbmcoKSkKICAg
ICAgICAgYmxvY2soKS5tX2xvY2subG9jaygpOwogICAgIAorICAgIHN1YnNwYWNlKCktPmRpZEJl
Z2luU3dlZXBpbmdUb0ZyZWVMaXN0KHRoaXMpOworICAgIAogICAgIGlmIChuZWVkc0Rlc3RydWN0
aW9uKSB7CiAgICAgICAgIHN1YnNwYWNlKCktPmZpbmlzaFN3ZWVwKCp0aGlzLCBmcmVlTGlzdCk7
CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
QmxvY2suaAkocmV2aXNpb24gMjI1NzcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTYyLDYgKzE2Miw4IEBAIHB1YmxpYzoK
ICAgICAgICAgc2l6ZV90IG1hcmtDb3VudCgpOwogICAgICAgICBzaXplX3Qgc2l6ZSgpOwogICAg
ICAgICAKKyAgICAgICAgYm9vbCBpc0FsbG9jYXRlZCgpOworICAgICAgICAKICAgICAgICAgYm9v
bCBpc0xpdmUoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIEhlYXBWZXJzaW9uIG5ld2x5QWxs
b2NhdGVkVmVyc2lvbiwgYm9vbCBpc01hcmtpbmcsIGNvbnN0IEhlYXBDZWxsKik7CiAgICAgICAg
IGlubGluZSBib29sIGlzTGl2ZUNlbGwoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIEhlYXBW
ZXJzaW9uIG5ld2x5QWxsb2NhdGVkVmVyc2lvbiwgYm9vbCBpc01hcmtpbmcsIGNvbnN0IHZvaWQq
KTsKIApAQCAtMTczLDYgKzE3NSw3IEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCBpc05ld2x5QWxs
b2NhdGVkKGNvbnN0IHZvaWQqKTsKICAgICAgICAgdm9pZCBzZXROZXdseUFsbG9jYXRlZChjb25z
dCB2b2lkKik7CiAgICAgICAgIHZvaWQgY2xlYXJOZXdseUFsbG9jYXRlZChjb25zdCB2b2lkKik7
CisgICAgICAgIGNvbnN0IEJpdG1hcDxhdG9tc1BlckJsb2NrPiYgbmV3bHlBbGxvY2F0ZWQoKSBj
b25zdDsKICAgICAgICAgCiAgICAgICAgIEhlYXBWZXJzaW9uIG5ld2x5QWxsb2NhdGVkVmVyc2lv
bigpIGNvbnN0IHsgcmV0dXJuIG1fbmV3bHlBbGxvY2F0ZWRWZXJzaW9uOyB9CiAgICAgICAgIApA
QCAtMjI3LDcgKzIzMCw3IEBAIHB1YmxpYzoKICAgICAgICAgc2l6ZV90IG1fYXRvbXNQZXJDZWxs
IHsgc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSB9OwogICAgICAgICBzaXplX3Qg
bV9lbmRBdG9tIHsgc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSB9OyAvLyBUaGlz
IGlzIGEgZnV6enkgZW5kLiBBbHdheXMgdGVzdCBmb3IgPCBtX2VuZEF0b20uCiAgICAgICAgICAg
ICAKLSAgICAgICAgV1RGOjpCaXRtYXA8YXRvbXNQZXJCbG9jaz4gbV9uZXdseUFsbG9jYXRlZDsK
KyAgICAgICAgQml0bWFwPGF0b21zUGVyQmxvY2s+IG1fbmV3bHlBbGxvY2F0ZWQ7CiAgICAgICAg
ICAgICAKICAgICAgICAgQWxsb2NhdG9yQXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7CiAgICAgICAg
IGJvb2wgbV9pc0ZyZWVMaXN0ZWQgeyBmYWxzZSB9OwpAQCAtMjk0LDYgKzI5Nyw4IEBAIHB1Ymxp
YzoKICAgICBib29sIGlzTWFya2VkUmF3KGNvbnN0IHZvaWQqIHApOwogICAgIEhlYXBWZXJzaW9u
IG1hcmtpbmdWZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXJraW5nVmVyc2lvbjsgfQogICAg
IAorICAgIGNvbnN0IEJpdG1hcDxhdG9tc1BlckJsb2NrPiYgbWFya3MoKSBjb25zdDsKKyAgICAK
ICAgICBDb3VudGluZ0xvY2smIGxvY2soKSB7IHJldHVybiBtX2xvY2s7IH0KIAogcHJpdmF0ZToK
QEAgLTM0Niw3ICszNTEsNyBAQCBwcml2YXRlOgogCiAgICAgSGVhcFZlcnNpb24gbV9tYXJraW5n
VmVyc2lvbjsKIAotICAgIFdURjo6Qml0bWFwPGF0b21zUGVyQmxvY2s+IG1fbWFya3M7CisgICAg
Qml0bWFwPGF0b21zUGVyQmxvY2s+IG1fbWFya3M7CiB9OwogCiBpbmxpbmUgTWFya2VkQmxvY2s6
OkhhbmRsZSYgTWFya2VkQmxvY2s6OmhhbmRsZSgpCkBAIC01MzIsNiArNTM3LDExIEBAIGlubGlu
ZSBib29sIE1hcmtlZEJsb2NrOjp0ZXN0QW5kU2V0TWFya2UKICAgICByZXR1cm4gbV9tYXJrcy5j
b25jdXJyZW50VGVzdEFuZFNldChhdG9tTnVtYmVyKHApLCBkZXBlbmRlbmN5KTsKIH0KIAoraW5s
aW5lIGNvbnN0IEJpdG1hcDxNYXJrZWRCbG9jazo6YXRvbXNQZXJCbG9jaz4mIE1hcmtlZEJsb2Nr
OjptYXJrcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbWFya3M7Cit9CisKIGlubGluZSBib29s
IE1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzTmV3bHlBbGxvY2F0ZWQoY29uc3Qgdm9pZCogcCkKIHsK
ICAgICByZXR1cm4gbV9uZXdseUFsbG9jYXRlZC5nZXQobV9ibG9jay0+YXRvbU51bWJlcihwKSk7
CkBAIC01NDcsNiArNTU3LDExIEBAIGlubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmNs
ZWFyTmUKICAgICBtX25ld2x5QWxsb2NhdGVkLmNsZWFyKG1fYmxvY2stPmF0b21OdW1iZXIocCkp
OwogfQogCitpbmxpbmUgY29uc3QgQml0bWFwPE1hcmtlZEJsb2NrOjphdG9tc1BlckJsb2NrPiYg
TWFya2VkQmxvY2s6OkhhbmRsZTo6bmV3bHlBbGxvY2F0ZWQoKSBjb25zdAoreworICAgIHJldHVy
biBtX25ld2x5QWxsb2NhdGVkOworfQorCiBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNBdG9t
KGNvbnN0IHZvaWQqIHApCiB7CiAgICAgQVNTRVJUKE1hcmtlZEJsb2NrOjppc0F0b21BbGlnbmVk
KHApKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2Nr
SW5saW5lcy5oCShyZXZpc2lvbiAyMjU3NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtOTEsNiArOTEsMTEgQEAg
aW5saW5lIGJvb2wgTWFya2VkQmxvY2s6Om1hcmtzQ29udmV5TGl2ZQogICAgICAgICB8fCBNYXJr
ZWRTcGFjZTo6bmV4dFZlcnNpb24obXlNYXJraW5nVmVyc2lvbikgPT0gbWFya2luZ1ZlcnNpb247
CiB9CiAKK2lubGluZSBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzQWxsb2NhdGVkKCkKK3sK
KyAgICByZXR1cm4gbV9hbGxvY2F0b3ItPmlzQWxsb2NhdGVkKE5vTG9ja2luZ05lY2Vzc2FyeSwg
dGhpcyk7Cit9CisKIEFMV0FZU19JTkxJTkUgYm9vbCBNYXJrZWRCbG9jazo6SGFuZGxlOjppc0xp
dmUoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIEhlYXBWZXJzaW9uIG5ld2x5QWxsb2NhdGVk
VmVyc2lvbiwgYm9vbCBpc01hcmtpbmcsIGNvbnN0IEhlYXBDZWxsKiBjZWxsKQogewogICAgIGlm
IChhbGxvY2F0b3IoKS0+aXNBbGxvY2F0ZWQoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzKSkKQEAg
LTQzNCw2ICs0MzksMTEgQEAgaW5saW5lIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwRGVzdHJ1
YwogICAgIHJldHVybiBCbG9ja0hhc05vRGVzdHJ1Y3RvcnM7CiB9CiAKK2lubGluZSBib29sIE1h
cmtlZEJsb2NrOjpIYW5kbGU6OmlzRW1wdHkoKQoreworICAgIHJldHVybiBtX2FsbG9jYXRvci0+
aXNFbXB0eShOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMpOworfQorCiBpbmxpbmUgTWFya2VkQmxv
Y2s6OkhhbmRsZTo6RW1wdHlNb2RlIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmVtcHR5TW9kZSgpCiB7
CiAgICAgLy8gSXQncyBub3Qgb2J2aW91cywgYnV0IHRoaXMgaXMgdGhlIG9ubHkgd2F5IHRvIGtu
b3cgaWYgdGhlIGJsb2NrIGlzIGVtcHR5LiBJdCdzIHRoZSBvbmx5CkBAIC00NDEsNyArNDUxLDcg
QEAgaW5saW5lIE1hcmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBNYQogICAgIC8vIC0gSXQn
cyB0cnVlIHdoZW4gdGhlIGJsb2NrIGlzIGZyZXNobHkgYWxsb2NhdGVkLgogICAgIC8vIC0gSXQn
cyB0cnVlIGlmIHRoZSBibG9jayBoYWQgYmVlbiBzd2VwdCBpbiB0aGUgcGFzdCwgYWxsIGRlc3Ry
dWN0b3JzIHdlcmUgY2FsbGVkLCBhbmQgdGhhdAogICAgIC8vICAgc3dlZXAgcHJvdmVkIHRoYXQg
dGhlIGJsb2NrIGlzIGVtcHR5LgotICAgIHJldHVybiBtX2FsbG9jYXRvci0+aXNFbXB0eShOb0xv
Y2tpbmdOZWNlc3NhcnksIHRoaXMpID8gSXNFbXB0eSA6IE5vdEVtcHR5OworICAgIHJldHVybiBp
c0VtcHR5KCkgPyBJc0VtcHR5IDogTm90RW1wdHk7CiB9CiAKIGlubGluZSBNYXJrZWRCbG9jazo6
SGFuZGxlOjpTY3JpYmJsZU1vZGUgTWFya2VkQmxvY2s6OkhhbmRsZTo6c2NyaWJibGVNb2RlKCkK
QEAgLTUxMiwxMSArNTIyLDEyIEBAIGlubGluZSBJdGVyYXRpb25TdGF0dXMgTWFya2VkQmxvY2s6
OkhhbmQKICAgICBpZiAoYXJlTWFya3NTdGFsZSkKICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0
YXR1czo6Q29udGludWU7CiAgICAgZm9yIChzaXplX3QgaSA9IGZpcnN0QXRvbSgpOyBpIDwgbV9l
bmRBdG9tOyBpICs9IG1fYXRvbXNQZXJDZWxsKSB7Ci0gICAgICAgIEhlYXBDZWxsKiBjZWxsID0g
cmVpbnRlcnByZXRfY2FzdF9wdHI8SGVhcENlbGwqPigmbV9ibG9jay0+YXRvbXMoKVtpXSk7Ci0g
ICAgICAgIGlmICghYmxvY2suaXNNYXJrZWRSYXcoY2VsbCkpCisgICAgICAgIGlmICghYmxvY2su
bV9tYXJrcy5nZXQoaSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAoZnVu
Y3RvcihjZWxsLCBraW5kKSA9PSBJdGVyYXRpb25TdGF0dXM6OkRvbmUpCisgICAgICAgIEhlYXBD
ZWxsKiBjZWxsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8SGVhcENlbGwqPigmbV9ibG9jay0+YXRv
bXMoKVtpXSk7CisKKyAgICAgICAgaWYgKGZ1bmN0b3IoaSwgY2VsbCwga2luZCkgPT0gSXRlcmF0
aW9uU3RhdHVzOjpEb25lKQogICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6RG9u
ZTsKICAgICB9CiAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMjU3NzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEyNiw1ICsxMjYsMTcgQEAgUmVmUHRyPFNoYXJlZFRhc2s8TWFya2VkQmxvY2s6OkhhbmRs
ZSooKQogICAgICAgICB9KTsKIH0KIAordm9pZCBTdWJzcGFjZTo6ZGlkUmVzaXplQml0cyhzaXpl
X3QpCit7Cit9CisKK3ZvaWQgU3Vic3BhY2U6OmRpZFJlbW92ZUJsb2NrKHNpemVfdCkKK3sKK30K
Kwordm9pZCBTdWJzcGFjZTo6ZGlkQmVnaW5Td2VlcGluZ1RvRnJlZUxpc3QoTWFya2VkQmxvY2s6
OkhhbmRsZSopCit7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHJldmlzaW9uIDIyNTc3MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTkzLDYgKzkzLDEw
IEBAIHB1YmxpYzoKICAgICAKICAgICBTdWJzcGFjZSogbmV4dFN1YnNwYWNlSW5BbGlnbmVkTWVt
b3J5QWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9uZXh0U3Vic3BhY2VJbkFsaWduZWRNZW1v
cnlBbGxvY2F0b3I7IH0KICAgICB2b2lkIHNldE5leHRTdWJzcGFjZUluQWxpZ25lZE1lbW9yeUFs
bG9jYXRvcihTdWJzcGFjZSogc3Vic3BhY2UpIHsgbV9uZXh0U3Vic3BhY2VJbkFsaWduZWRNZW1v
cnlBbGxvY2F0b3IgPSBzdWJzcGFjZTsgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBkaWRSZXNp
emVCaXRzKHNpemVfdCBuZXdTaXplKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVtb3ZlQmxvY2so
c2l6ZV90IGJsb2NrSW5kZXgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRCZWdpblN3ZWVwaW5nVG9G
cmVlTGlzdChNYXJrZWRCbG9jazo6SGFuZGxlKik7CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGlu
aXRpYWxpemUoSGVhcENlbGxUeXBlKiwgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciopOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgJKHJldmlzaW9u
IDIyNTc3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3IEBAIHZvaWQgU3Vic3BhY2U6OmZvckVhY2hN
YXJrZWRDZWxsKGNvbnN0IEYKICAgICBmb3JFYWNoTm90RW1wdHlNYXJrZWRCbG9jaygKICAgICAg
ICAgWyZdIChNYXJrZWRCbG9jazo6SGFuZGxlKiBoYW5kbGUpIHsKICAgICAgICAgICAgIGhhbmRs
ZS0+Zm9yRWFjaE1hcmtlZENlbGwoCi0gICAgICAgICAgICAgICAgWyZdIChIZWFwQ2VsbCogY2Vs
bCwgSGVhcENlbGw6OktpbmQga2luZCkgLT4gSXRlcmF0aW9uU3RhdHVzIHsgCisgICAgICAgICAg
ICAgICAgWyZdIChzaXplX3QsIEhlYXBDZWxsKiBjZWxsLCBIZWFwQ2VsbDo6S2luZCBraW5kKSAt
PiBJdGVyYXRpb25TdGF0dXMgewogICAgICAgICAgICAgICAgICAgICBmdW5jKGNlbGwsIGtpbmQp
OwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsK
ICAgICAgICAgICAgICAgICB9KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0luZmVycmVkU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbmZlcnJlZFN0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDIyNTc3MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkU3RydWN0dXJlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjcsNjQgKzI3LDE3IEBACiAjaW5jbHVkZSAiSW5mZXJyZWRTdHJ1Y3R1cmUu
aCIKIAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5s
aW5lcy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotY29uc3QgQ2xhc3NJbmZvIEluZmVycmVkU3Ry
dWN0dXJlOjpzX2luZm8gPSB7ICJJbmZlcnJlZFN0cnVjdHVyZSIsIG51bGxwdHIsIG51bGxwdHIs
IG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSW5mZXJyZWRTdHJ1Y3R1cmUpIH07Ci0KLUlu
ZmVycmVkU3RydWN0dXJlKiBJbmZlcnJlZFN0cnVjdHVyZTo6Y3JlYXRlKFZNJiB2bSwgR0NEZWZl
cnJhbENvbnRleHQmIGRlZmVycmFsQ29udGV4dCwgSW5mZXJyZWRUeXBlKiBwYXJlbnQsIFN0cnVj
dHVyZSogc3RydWN0dXJlKQotewotICAgIEluZmVycmVkU3RydWN0dXJlKiByZXN1bHQgPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxJbmZlcnJlZFN0cnVjdHVyZT4odm0uaGVhcCwgJmRlZmVy
cmFsQ29udGV4dCkpIEluZmVycmVkU3RydWN0dXJlKHZtLCBwYXJlbnQsIHN0cnVjdHVyZSk7Ci0g
ICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSwgc3RydWN0dXJlKTsKLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi12b2lkIEluZmVycmVkU3RydWN0dXJlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkK
LXsKLSAgICBJbmZlcnJlZFN0cnVjdHVyZSogaW5mZXJyZWRTdHJ1Y3R1cmUgPSBzdGF0aWNfY2Fz
dDxJbmZlcnJlZFN0cnVjdHVyZSo+KGNlbGwpOwotICAgIGluZmVycmVkU3RydWN0dXJlLT5JbmZl
cnJlZFN0cnVjdHVyZTo6fkluZmVycmVkU3RydWN0dXJlKCk7Ci19Ci0KLVN0cnVjdHVyZSogSW5m
ZXJyZWRTdHJ1Y3R1cmU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQotewotICAgIHJldHVybiBTdHJ1Y3R1cmU6
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci19Ci0KLXZvaWQgSW5mZXJyZWRTdHJ1Y3R1cmU6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBJ
bmZlcnJlZFN0cnVjdHVyZSogaW5mZXJyZWRTdHJ1Y3R1cmUgPSBqc0Nhc3Q8SW5mZXJyZWRTdHJ1
Y3R1cmUqPihjZWxsKTsKLSAgICAKLSAgICB2aXNpdG9yLmFwcGVuZChpbmZlcnJlZFN0cnVjdHVy
ZS0+bV9wYXJlbnQpOwotfQotCi12b2lkIEluZmVycmVkU3RydWN0dXJlOjpmaW5hbGl6ZVVuY29u
ZGl0aW9uYWxseShWTSYpCi17Ci0gICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkKG1fcGFyZW50Lmdl
dCgpKSk7Ci0gICAgCi0gICAgLy8gTW9ub3RvbmljaXR5IGVuc3VyZXMgdGhhdCB3ZSBzaG91bGRu
J3Qgc2VlIGEgbmV3IHN0cnVjdHVyZSB0aGF0IGlzIGRpZmZlcmVudCBmcm9tIHVzLCBidXQgd2UK
LSAgICAvLyBjb3VsZCBoYXZlIGJlZW4gbnVsbGVkLiBXZSBvbmx5IHJlbHkgb24gaXQgYmVpbmcg
dGhlIG51bGwgY2FzZSBvbmx5IGluIGRlYnVnLgotICAgIGlmICh0aGlzID09IG1fcGFyZW50LT5t
X3N0cnVjdHVyZS5nZXQoKSkgewotICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fc3RydWN0
dXJlLmdldCgpKSkKLSAgICAgICAgICAgIG1fcGFyZW50LT5yZW1vdmVTdHJ1Y3R1cmUoKTsKLSAg
ICB9IGVsc2UKLSAgICAgICAgQVNTRVJUKCFtX3BhcmVudC0+bV9zdHJ1Y3R1cmUpOwotICAgIAot
ICAgIC8vIFdlJ2xsIGdldCBkZWxldGVkIG9uIHRoZSBuZXh0IEdDLiBUaGF0J3MgYSBsaXR0bGUg
d2VpcmQsIGJ1dCBub3QgaGFybWZ1bCwgc2luY2UgaXQgb25seSBoYXBwZW5zCi0gICAgLy8gd2hl
biB0aGUgSW5mZXJyZWRUeXBlIHRoYXQgd2Ugd2VyZSBwYWlyZWQgdG8gd291bGQgaGF2ZSBzdXJ2
aXZlZC4gSXQganVzdCBtZWFucyBhIHRpbnkgbWlzc2VkCi0gICAgLy8gb3Bwb3J0dW5pdHkgZm9y
IGhlYXAgc2l6ZSByZWR1Y3Rpb24uCi19CitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW5m
ZXJyZWRTdHJ1Y3R1cmUpOwogCiBJbmZlcnJlZFN0cnVjdHVyZTo6SW5mZXJyZWRTdHJ1Y3R1cmUo
Vk0mIHZtLCBJbmZlcnJlZFR5cGUqIHBhcmVudCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAg
OiBCYXNlKHZtLCB2bS5pbmZlcnJlZFN0cnVjdHVyZVN0cnVjdHVyZS5nZXQoKSkKLSAgICAsIG1f
cGFyZW50KHZtLCB0aGlzLCBwYXJlbnQpCi0gICAgLCBtX3N0cnVjdHVyZSh2bSwgdGhpcywgc3Ry
dWN0dXJlKQotewotfQotCi12b2lkIEluZmVycmVkU3RydWN0dXJlOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogcGFyZW50KHBhcmVudCkKKyAgICAs
IHN0cnVjdHVyZSh2bSwgcGFyZW50LCBzdHJ1Y3R1cmUpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24odm0pOwotICAgIHN0cnVjdHVyZS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoJm1fd2F0
Y2hwb2ludCk7CisgICAgc3RydWN0dXJlLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludCgmd2F0Y2hw
b2ludCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFN0cnVjdHVyZS5oCShyZXZpc2lvbiAyMjU3NzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFN0cnVjdHVyZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw1MSArMjYsMjMgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVk
ZSAiSW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50LmgiCi0jaW5jbHVkZSAiSlNDZWxsLmgiCi0j
aW5jbHVkZSAiVk0uaCIKKyNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKKyNpbmNsdWRlIDx3dGYv
SXNvTWFsbG9jLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBJbmZlcnJlZFR5cGU7Citj
bGFzcyBTdHJ1Y3R1cmU7CiAKLWNsYXNzIEluZmVycmVkU3RydWN0dXJlIGZpbmFsIDogcHVibGlj
IEpTQ2VsbCB7CitjbGFzcyBJbmZlcnJlZFN0cnVjdHVyZSBmaW5hbCB7CisgICAgV1RGX01BS0Vf
SVNPX0FMTE9DQVRFRChJbmZlcnJlZFN0cnVjdHVyZSk7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBK
U0NlbGwgQmFzZTsKLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZT4KLSAgICBz
dGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiAmdm0uaW5mZXJyZWRTdHJ1Y3R1cmVTcGFjZTsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGlj
IEluZmVycmVkU3RydWN0dXJlKiBjcmVhdGUoVk0mLCBHQ0RlZmVycmFsQ29udGV4dCYsIEluZmVy
cmVkVHlwZSogcGFyZW50LCBTdHJ1Y3R1cmUqKTsKLSAgICAKLSAgICBzdGF0aWMgY29uc3QgYm9v
bCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKLSAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2Vs
bCopOwotICAgIAotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IFN0
cnVjdHVyZUlzSW1tb3J0YWwgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKLQotICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBw
cm90b3R5cGUpOwotICAgIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICAKLSAgICBJbmZlcnJlZFR5
cGUqIHBhcmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50LmdldCgpOyB9Ci0gICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZS5nZXQoKTsgfQotICAg
IAotICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mKTsKLQotcHJpdmF0ZToKICAg
ICBJbmZlcnJlZFN0cnVjdHVyZShWTSYsIEluZmVycmVkVHlwZSogcGFyZW50LCBTdHJ1Y3R1cmUq
KTsKKworICAgIEluZmVycmVkVHlwZSogcGFyZW50OworICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1
cmU+IHN0cnVjdHVyZTsKICAgICAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgU3RydWN0
dXJlKik7Ci0gICAgCi0gICAgV3JpdGVCYXJyaWVyPEluZmVycmVkVHlwZT4gbV9wYXJlbnQ7Ci0g
ICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7Ci0gICAgCi0gICAgZnJpZW5k
IGNsYXNzIEluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludDsKLSAgICBJbmZlcnJlZFN0cnVjdHVy
ZVdhdGNocG9pbnQgbV93YXRjaHBvaW50OworICAgIEluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2lu
dCB3YXRjaHBvaW50OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkU3RydWN0dXJl
V2F0Y2hwb2ludC5jcHAJKHJldmlzaW9uIDIyNTc3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0luZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDEyICszNCwxNCBAQCB2b2lkIEluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludDo6Zmly
ZUluCiB7CiAgICAgSW5mZXJyZWRTdHJ1Y3R1cmUqIGluZmVycmVkU3RydWN0dXJlID0KICAgICAg
ICAgYml0d2lzZV9jYXN0PEluZmVycmVkU3RydWN0dXJlKj4oCi0gICAgICAgICAgICBiaXR3aXNl
X2Nhc3Q8Y2hhcio+KHRoaXMpIC0gT0JKRUNUX09GRlNFVE9GKEluZmVycmVkU3RydWN0dXJlLCBt
X3dhdGNocG9pbnQpKTsKKyAgICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgLSBP
QkpFQ1RfT0ZGU0VUT0YoSW5mZXJyZWRTdHJ1Y3R1cmUsIHdhdGNocG9pbnQpKTsKIAotICAgIGlm
ICghaW5mZXJyZWRTdHJ1Y3R1cmUtPmlzTGl2ZSgpKQorICAgIEluZmVycmVkVHlwZSogaW5mZXJy
ZWRUeXBlID0gaW5mZXJyZWRTdHJ1Y3R1cmUtPnBhcmVudDsKKyAgICAKKyAgICBpZiAoIWluZmVy
cmVkVHlwZS0+aXNMaXZlKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBpbmZlcnJlZFN0
cnVjdHVyZS0+bV9wYXJlbnQtPnJlbW92ZVN0cnVjdHVyZSgpOworICAgIGluZmVycmVkVHlwZS0+
cmVtb3ZlU3RydWN0dXJlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuY3BwCShyZXZpc2lvbiAy
MjU3NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCiAKLSNpbmNsdWRlICJHQ0RlZmVycmFsQ29udGV4dElu
bGluZXMuaCIKKyNpbmNsdWRlICJJc29DZWxsU2V0SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC04Niw3ICs4Niw4IEBAIFN0cnVjdHVyZSog
SW5mZXJyZWRUeXBlOjpjcmVhdGVTdHJ1Y3R1cmUKIHZvaWQgSW5mZXJyZWRUeXBlOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSW5mZXJy
ZWRUeXBlKiBpbmZlcnJlZFR5cGUgPSBqc0Nhc3Q8SW5mZXJyZWRUeXBlKj4oY2VsbCk7Ci0gICAg
dmlzaXRvci5hcHBlbmQoaW5mZXJyZWRUeXBlLT5tX3N0cnVjdHVyZSk7CisgICAgaWYgKGluZmVy
cmVkVHlwZS0+bV9zdHJ1Y3R1cmUpCisgICAgICAgIHZpc2l0b3Iudm0oKS5pbmZlcnJlZFR5cGVz
V2l0aEZpbmFsaXplcnMuYWRkKGluZmVycmVkVHlwZSk7CiB9CiAKIEluZmVycmVkVHlwZTo6S2lu
ZCBJbmZlcnJlZFR5cGU6OmtpbmRGb3JGbGFncyhQdXRCeUlkRmxhZ3MgZmxhZ3MpCkBAIC0zOTks
NyArNDAwLDYgQEAgYm9vbCBJbmZlcnJlZFR5cGU6OndpbGxTdG9yZVZhbHVlU2xvdyhWTQogICAg
IERlc2NyaXB0b3IgbXlUeXBlOwogICAgIGJvb2wgcmVzdWx0OwogICAgIHsKLSAgICAgICAgR0NE
ZWZlcnJhbENvbnRleHQgZGVmZXJyYWxDb250ZXh0KHZtLmhlYXApOwogICAgICAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAgIG9sZFR5cGUgPSBkZXNjcmlwdG9y
KGxvY2tlcik7CiAgICAgICAgIG15VHlwZSA9IERlc2NyaXB0b3I6OmZvclZhbHVlKHZhbHVlKTsK
QEAgLTQwOCw3ICs0MDgsNyBAQCBib29sIEluZmVycmVkVHlwZTo6d2lsbFN0b3JlVmFsdWVTbG93
KFZNCiAgICAgICAgIAogICAgICAgICBBU1NFUlQob2xkVHlwZSAhPSBteVR5cGUpOyAvLyBUaGUg
dHlwZSBtdXN0IGhhdmUgY2hhbmdlZCBpZiB3ZSdyZSBvbiB0aGUgc2xvdyBwYXRoLgogCi0gICAg
ICAgIGJvb2wgc2V0UmVzdWx0ID0gc2V0KGRlZmVycmFsQ29udGV4dCwgbG9ja2VyLCB2bSwgbXlU
eXBlKTsKKyAgICAgICAgYm9vbCBzZXRSZXN1bHQgPSBzZXQobG9ja2VyLCB2bSwgbXlUeXBlKTsK
ICAgICAgICAgcmVzdWx0ID0ga2luZChsb2NrZXIpICE9IFRvcDsKICAgICAgICAgaWYgKCFzZXRS
ZXN1bHQpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNDIzLDEwICs0MjMsOSBAQCB2
b2lkIEluZmVycmVkVHlwZTo6bWFrZVRvcFNsb3coVk0mIHZtLCBQCiB7CiAgICAgRGVzY3JpcHRv
ciBvbGRUeXBlOwogICAgIHsKLSAgICAgICAgR0NEZWZlcnJhbENvbnRleHQgZGVmZXJyYWxDb250
ZXh0KHZtLmhlYXApOwogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7
CiAgICAgICAgIG9sZFR5cGUgPSBkZXNjcmlwdG9yKGxvY2tlcik7Ci0gICAgICAgIGlmICghc2V0
KGRlZmVycmFsQ29udGV4dCwgbG9ja2VyLCB2bSwgVG9wKSkKKyAgICAgICAgaWYgKCFzZXQobG9j
a2VyLCB2bSwgVG9wKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQzNCwxNCAr
NDMzLDggQEAgdm9pZCBJbmZlcnJlZFR5cGU6Om1ha2VUb3BTbG93KFZNJiB2bSwgUAogICAgIG1f
d2F0Y2hwb2ludFNldC5maXJlQWxsKHZtLCBkZXRhaWwpOwogfQogCi1ib29sIEluZmVycmVkVHlw
ZTo6c2V0KEdDRGVmZXJyYWxDb250ZXh0JiBkZWZlcnJhbENvbnRleHQsIGNvbnN0IENvbmN1cnJl
bnRKU0xvY2tlciYgbG9ja2VyLCBWTSYgdm0sIERlc2NyaXB0b3IgbmV3RGVzY3JpcHRvcikKK2Jv
b2wgSW5mZXJyZWRUeXBlOjpzZXQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZN
JiB2bSwgRGVzY3JpcHRvciBuZXdEZXNjcmlwdG9yKQogewotICAgIC8vIFdlIHdpbGwgdHJpZ2dl
ciB3cml0ZSBiYXJyaWVycyB3aGlsZSBob2xkaW5nIG91ciBsb2NrLiBDdXJyZW50bHksIHdyaXRl
IGJhcnJpZXJzIGRvbid0IEdDLCBidXQgdGhhdAotICAgIC8vIGNvdWxkIGNoYW5nZS4gSWYgaXQg
ZG9lcywgd2UgZG9uJ3Qgd2FudCB0byBkZWFkbG9jay4gTm90ZSB0aGF0IHdlIGNvdWxkIGhhdmUg
dXNlZAotICAgIC8vIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBpbiB0aGUgY2FsbGVyLCBidXQg
dGhlIGNhbGxlciBpcyBvbiBhIGZhc3QgcGF0aCBzbyBtYXliZSB0aGF0IHdvdWxkbid0IGJlCi0g
ICAgLy8gYSBnb29kIGlkZWEuCi0gICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhlYXAp
OwotICAgIAogICAgIC8vIEJlIGRlZmVuc2l2ZTogaWYgd2UncmUgbm90IHJlYWxseSBjaGFuZ2lu
ZyB0aGUgdHlwZSwgdGhlbiB3ZSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nLgogICAgIGlmIChk
ZXNjcmlwdG9yKGxvY2tlcikgPT0gbmV3RGVzY3JpcHRvcikKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtNDY5LDE5ICs0NjIsMTMgQEAgYm9vbCBJbmZlcnJlZFR5cGU6OnNldChHQ0RlZmVycmFs
Q29udGV4dAogICAgICAgICBzaG91bGRGaXJlV2F0Y2hwb2ludFNldCA9IHRydWU7CiAgICAgfQog
Ci0gICAgLy8gUmVtb3ZlIHRoZSBvbGQgSW5mZXJyZWRTdHJ1Y3R1cmUgb2JqZWN0IGlmIHdlIG5v
IGxvbmdlciBuZWVkIGl0LgogICAgIGlmICghbmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSkKLSAg
ICAgICAgbV9zdHJ1Y3R1cmUuY2xlYXIoKTsKLQotICAgIC8vIEFkZCBhIG5ldyBJbmZlcnJlZFN0
cnVjdHVyZSBvYmplY3QgaWYgd2UgbmVlZCBvbmUgbm93LgotICAgIGlmIChuZXdEZXNjcmlwdG9y
LnN0cnVjdHVyZSgpKSB7Ci0gICAgICAgIGlmIChtX3N0cnVjdHVyZSkgewotICAgICAgICAgICAg
Ly8gV2Ugc2hvdWxkIGFncmVlIG9uIHRoZSBzdHJ1Y3R1cmVzIGlmIHdlIGdldCBoZXJlLgotICAg
ICAgICAgICAgQVNTRVJUKG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkgPT0gbV9zdHJ1Y3R1cmUt
PnN0cnVjdHVyZSgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGF1dG8qIHN0cnVj
dHVyZSA9IEluZmVycmVkU3RydWN0dXJlOjpjcmVhdGUodm0sIGRlZmVycmFsQ29udGV4dCwgdGhp
cywgbmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAgICAgICBtX3N0cnVjdHVyZS5z
ZXQodm0sIHRoaXMsIHN0cnVjdHVyZSk7Ci0gICAgICAgIH0KKyAgICAgICAgbV9zdHJ1Y3R1cmUg
PSBudWxscHRyOworICAgIGVsc2UgeworICAgICAgICBpZiAobV9zdHJ1Y3R1cmUpCisgICAgICAg
ICAgICBBU1NFUlQobmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSA9PSBtX3N0cnVjdHVyZS0+c3Ry
dWN0dXJlLmdldCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSBz
dGQ6Om1ha2VfdW5pcXVlPEluZmVycmVkU3RydWN0dXJlPih2bSwgdGhpcywgbmV3RGVzY3JpcHRv
ci5zdHJ1Y3R1cmUoKSk7CiAgICAgfQogCiAgICAgLy8gRmluYWxseSwgc2V0IHRoZSBkZXNjcmlw
dG9yIGtpbmQuCkBAIC01MDMsMTMgKzQ5MCwxMiBAQCB2b2lkIEluZmVycmVkVHlwZTo6cmVtb3Zl
U3RydWN0dXJlKCkKICAgICBEZXNjcmlwdG9yIG9sZERlc2NyaXB0b3I7CiAgICAgRGVzY3JpcHRv
ciBuZXdEZXNjcmlwdG9yOwogICAgIHsKLSAgICAgICAgR0NEZWZlcnJhbENvbnRleHQgZGVmZXJy
YWxDb250ZXh0KHZtLmhlYXApOwogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1f
bG9jayk7CiAgICAgICAgIG9sZERlc2NyaXB0b3IgPSBkZXNjcmlwdG9yKGxvY2tlcik7CiAgICAg
ICAgIG5ld0Rlc2NyaXB0b3IgPSBvbGREZXNjcmlwdG9yOwogICAgICAgICBuZXdEZXNjcmlwdG9y
LnJlbW92ZVN0cnVjdHVyZSgpOwogICAgICAgICAKLSAgICAgICAgaWYgKCFzZXQoZGVmZXJyYWxD
b250ZXh0LCBsb2NrZXIsIHZtLCBuZXdEZXNjcmlwdG9yKSkKKyAgICAgICAgaWYgKCFzZXQobG9j
a2VyLCB2bSwgbmV3RGVzY3JpcHRvcikpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCkBA
IC01MTcsNiArNTAzLDIwIEBAIHZvaWQgSW5mZXJyZWRUeXBlOjpyZW1vdmVTdHJ1Y3R1cmUoKQog
ICAgIG1fd2F0Y2hwb2ludFNldC5maXJlQWxsKHZtLCBkZXRhaWwpOwogfQogCitJc29DZWxsU2V0
OjpGb3JFYWNoUmVzdWx0IEluZmVycmVkVHlwZTo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0m
KQoreworICAgIEFTU0VSVChIZWFwOjppc01hcmtlZCh0aGlzKSk7CisgICAgCisgICAgaWYgKG1f
c3RydWN0dXJlKSB7CisgICAgICAgIGlmIChIZWFwOjppc01hcmtlZChtX3N0cnVjdHVyZS0+c3Ry
dWN0dXJlLmdldCgpKSkKKyAgICAgICAgICAgIHJldHVybiBJc29DZWxsU2V0OjpGb3JFYWNoUmVz
dWx0OjpDb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIHJlbW92ZVN0cnVjdHVyZSgpOworICAg
IH0KKyAgICAKKyAgICByZXR1cm4gSXNvQ2VsbFNldDo6Rm9yRWFjaFJlc3VsdDo6UmVtb3ZlQW5k
Q29udGludWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiBuYW1lc3BhY2UgV1RGIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZS5oCShyZXZp
c2lvbiAyMjU3NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQ29uY3Vy
cmVudEpTTG9jay5oIgogI2luY2x1ZGUgIkluZmVycmVkU3RydWN0dXJlLmgiCisjaW5jbHVkZSAi
SXNvQ2VsbFNldC5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIlByb3BlcnR5TmFt
ZS5oIgogI2luY2x1ZGUgIlB1dEJ5SWRGbGFncy5oIgpAQCAtMTg1LDcgKzE4Niw3IEBAIHB1Ymxp
YzoKIAogICAgIERlc2NyaXB0b3IgZGVzY3JpcHRvck1haW5UaHJlYWQoKSBjb25zdAogICAgIHsK
LSAgICAgICAgcmV0dXJuIERlc2NyaXB0b3IobV9raW5kLCBtX3N0cnVjdHVyZSA/IG1fc3RydWN0
dXJlLT5zdHJ1Y3R1cmUoKSA6IG51bGxwdHIpOworICAgICAgICByZXR1cm4gRGVzY3JpcHRvciht
X2tpbmQsIG1fc3RydWN0dXJlID8gbV9zdHJ1Y3R1cmUtPnN0cnVjdHVyZS5nZXQoKSA6IG51bGxw
dHIpOwogICAgIH0KICAgICAKICAgICBEZXNjcmlwdG9yIGRlc2NyaXB0b3IoY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJikgY29uc3QKQEAgLTIzMCw3ICsyMzEsNyBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKLSAgICB2b2lkIGZpbmFsaXplVW5j
b25kaXRpb25hbGx5KCk7CisgICAgSXNvQ2VsbFNldDo6Rm9yRWFjaFJlc3VsdCBmaW5hbGl6ZVVu
Y29uZGl0aW9uYWxseShWTSYpOwogCiBwcml2YXRlOgogICAgIEluZmVycmVkVHlwZShWTSYpOwpA
QCAtMjQxLDcgKzI0Miw3IEBAIHByaXZhdGU6CiAKICAgICAvLyBIZWxwZXIgZm9yIHdpbGxTdG9y
ZVZhbHVlU2xvdygpIGFuZCBtYWtlVG9wU2xvdygpLiBUaGlzIHJldHVybnMgdHJ1ZSBpZiB3ZSBz
aG91bGQgZmlyZSB0aGUKICAgICAvLyB3YXRjaHBvaW50IHNldC4KLSAgICBib29sIHNldChHQ0Rl
ZmVycmFsQ29udGV4dCYsIGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZNJiwgRGVzY3JpcHRv
cik7CisgICAgYm9vbCBzZXQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVk0mLCBEZXNjcmlw
dG9yKTsKICAgICAKICAgICB2b2lkIHJlbW92ZVN0cnVjdHVyZSgpOwogICAgIApAQCAtMjUyLDcg
KzI1Myw4IEBAIHByaXZhdGU6CiAgICAgCiAgICAgS2luZCBtX2tpbmQgeyBCb3R0b20gfTsKIAot
ICAgIFdyaXRlQmFycmllcjxJbmZlcnJlZFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7CisgICAgLy8g
RklYTUU6IFRoaXMgc2hvdWxkIGJlIFBvaXNvbmVkLgorICAgIHN0ZDo6dW5pcXVlX3B0cjxJbmZl
cnJlZFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7CiAKICAgICAvLyBOT1RFOiBJZiB0aGlzIGlzIGJl
aW5nIHdhdGNoZWQsIHdlIHRyYW5zZm9ybSB0byBUb3AgYmVjYXVzZSB0aGF0IGltcGxpZXMgdGhh
dCBpdCB3b3VsZG4ndCBiZQogICAgIC8vIHByb2ZpdGFibGUgdG8gd2F0Y2ggaXQgYWdhaW4uIEFs
c28sIHRoaXMgc2V0IGlzIGluaXRpYWxpemVkIGNsZWFyLCBhbmQgaXMgbmV2ZXIgZXhwb3NlZCB0
byB0aGUgREZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lv
biAyMjU3NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIwNSwxMSArMjA1LDExIEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFw
VHlwZSBoZWFwVHlwZSkKICAgICAsIGRpcmVjdEV2YWxFeGVjdXRhYmxlU3BhY2UgSVNPX1NVQlNQ
QUNFX0lOSVQoaGVhcCwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgRGlyZWN0
RXZhbEV4ZWN1dGFibGUpCiAgICAgLCBmdW5jdGlvbkV4ZWN1dGFibGVTcGFjZSBJU09fU1VCU1BB
Q0VfSU5JVChoZWFwLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLmdldCgpLCBGdW5jdGlv
bkV4ZWN1dGFibGUpCiAgICAgLCBpbmRpcmVjdEV2YWxFeGVjdXRhYmxlU3BhY2UgSVNPX1NVQlNQ
QUNFX0lOSVQoaGVhcCwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgSW5kaXJl
Y3RFdmFsRXhlY3V0YWJsZSkKLSAgICAsIGluZmVycmVkU3RydWN0dXJlU3BhY2UgSVNPX1NVQlNQ
QUNFX0lOSVQoaGVhcCwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgSW5mZXJy
ZWRTdHJ1Y3R1cmUpCiAgICAgLCBpbmZlcnJlZFR5cGVTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCho
ZWFwLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLmdldCgpLCBJbmZlcnJlZFR5cGUpCiAg
ICAgLCBtb2R1bGVQcm9ncmFtRXhlY3V0YWJsZVNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAs
IGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIE1vZHVsZVByb2dyYW1FeGVjdXRh
YmxlKQogICAgICwgbmF0aXZlRXhlY3V0YWJsZVNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAs
IGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIE5hdGl2ZUV4ZWN1dGFibGUpCiAg
ICAgLCBwcm9ncmFtRXhlY3V0YWJsZVNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGRlc3Ry
dWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIFByb2dyYW1FeGVjdXRhYmxlKQorICAgICwg
aW5mZXJyZWRUeXBlc1dpdGhGaW5hbGl6ZXJzKGluZmVycmVkVHlwZVNwYWNlKQogICAgICwgdm1U
eXBlKHZtVHlwZSkKICAgICAsIGNsaWVudERhdGEoMCkKICAgICAsIHRvcEVudHJ5RnJhbWUobnVs
bHB0cikKQEAgLTI5Miw3ICsyOTIsNiBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUg
aGVhcFR5cGUpCiAgICAgdW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZS5zZXQoKnRo
aXMsIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwg
anNOdWxsKCkpKTsKICAgICB1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmUu
c2V0KCp0aGlzLCBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVy
ZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBwcm9wZXJ0eVRhYmxlU3RydWN0dXJlLnNldCgq
dGhpcywgUHJvcGVydHlUYWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkp
OwotICAgIGluZmVycmVkU3RydWN0dXJlU3RydWN0dXJlLnNldCgqdGhpcywgSW5mZXJyZWRTdHJ1
Y3R1cmU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBpbmZlcnJl
ZFR5cGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBJbmZlcnJlZFR5cGU6OmNyZWF0ZVN0cnVjdHVyZSgq
dGhpcywgMCwganNOdWxsKCkpKTsKICAgICBpbmZlcnJlZFR5cGVUYWJsZVN0cnVjdHVyZS5zZXQo
KnRoaXMsIEluZmVycmVkVHlwZVRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVs
bCgpKSk7CiAgICAgaW5mZXJyZWRWYWx1ZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEluZmVycmVkVmFs
dWU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMjI1NzcwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2lu
Y2x1ZGUgIkZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oIgogI2luY2x1ZGUgIkhlYXAuaCIKICNp
bmNsdWRlICJJbnRyaW5zaWMuaCIKKyNpbmNsdWRlICJJc29DZWxsU2V0LmgiCiAjaW5jbHVkZSAi
SXNvU3Vic3BhY2UuaCIKICNpbmNsdWRlICJKSVRUaHVua3MuaCIKICNpbmNsdWRlICJKU0NKU1Zh
bHVlLmgiCkBAIC0zNDAsMTEgKzM0MSwxMiBAQCBwdWJsaWM6CiAgICAgSXNvU3Vic3BhY2UgZGly
ZWN0RXZhbEV4ZWN1dGFibGVTcGFjZTsKICAgICBJc29TdWJzcGFjZSBmdW5jdGlvbkV4ZWN1dGFi
bGVTcGFjZTsKICAgICBJc29TdWJzcGFjZSBpbmRpcmVjdEV2YWxFeGVjdXRhYmxlU3BhY2U7Ci0g
ICAgSXNvU3Vic3BhY2UgaW5mZXJyZWRTdHJ1Y3R1cmVTcGFjZTsKICAgICBJc29TdWJzcGFjZSBp
bmZlcnJlZFR5cGVTcGFjZTsKICAgICBJc29TdWJzcGFjZSBtb2R1bGVQcm9ncmFtRXhlY3V0YWJs
ZVNwYWNlOwogICAgIElzb1N1YnNwYWNlIG5hdGl2ZUV4ZWN1dGFibGVTcGFjZTsKICAgICBJc29T
dWJzcGFjZSBwcm9ncmFtRXhlY3V0YWJsZVNwYWNlOworICAgIAorICAgIElzb0NlbGxTZXQgaW5m
ZXJyZWRUeXBlc1dpdGhGaW5hbGl6ZXJzOwogCiAgICAgVk1UeXBlIHZtVHlwZTsKICAgICBDbGll
bnREYXRhKiBjbGllbnREYXRhOwpAQCAtMzkyLDcgKzM5NCw2IEBAIHB1YmxpYzoKICAgICBTdHJv
bmc8U3RydWN0dXJlPiB1bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlOwogICAgIFN0
cm9uZzxTdHJ1Y3R1cmU+IHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZTsK
ICAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9wZXJ0eVRhYmxlU3RydWN0dXJlOwotICAgIFN0cm9u
ZzxTdHJ1Y3R1cmU+IGluZmVycmVkU3RydWN0dXJlU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1
Y3R1cmU+IGluZmVycmVkVHlwZVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBpbmZl
cnJlZFR5cGVUYWJsZVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBpbmZlcnJlZFZh
bHVlU3RydWN0dXJlOwpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNTc3MCkKKysrIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjcgQEAKKzIwMTctMTItMTEgIEZpbGlw
IFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBJdCBzaG91bGQgYmUgcG9zc2li
bGUgdG8gZmxhZyBhIGNlbGwgZm9yIHVuY29uZGl0aW9uYWwgZmluYWxpemF0aW9uCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODA2MzYKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgYWRk
cyBDb25jdXJyZW50VmVjdG9yLCB3aGljaCBpcyBsaWtlIFNlZ21lbnRlZFZlY3RvciwgYnV0IHdh
c3RlcyBzb21lIHNwYWNlIHRvIGFsbG93CisgICAgICAgIHJlc2l6aW5nIHRvIHByb2NlZWQgY29u
Y3VycmVudGx5IHRvIGFjY2Vzcy4gSXQncyBub3QgcG9zc2libGUgdG8gcmVzaXplIGNvbmN1cnJl
bnRseSB0bworICAgICAgICByZXNpemluZywgY29uY3VycmVudCByZWFkL3dyaXRlcyBhcmVuJ3Qg
cHJvdGVjdGVkIGZyb20gcmFjaW5nIGlmIHRoZXkgYWNjZXNzIHRoZSBzYW1lIGVsZW1lbnQsCisg
ICAgICAgIGFuZCB3aG8ga25vd3Mgd2hhdCB5b3UnbGwgZ2V0IGlmIHlvdSBpdGVyYXRlIHVwIHRv
IHNpemUoKSB3aGlsZSBzb21lb25lIGVsc2UgYXBwZW5kKClzLiBUaGUKKyAgICAgICAga2V5IGlu
c2lnaHQgaXMgdG8gc3Rhc2ggYWxsIHByaW9yIGNvcGllcyBvZiB0aGUgc3BpbmUsIHNvIHRoYXQg
bm9ib2R5IGNyYXNoZXMgdHJ5aW5nIHRvIGFjY2VzcworICAgICAgICBhIHN0YWxlIHNwaW5lLgor
ICAgICAgICAKKyAgICAgICAgSSdtIGdvaW5nIHRvIHdhbnQgdG8gZG8gdGhlIHNhbWUgdGhpbmcg
Zm9yIEZhc3RCaXRWZWN0b3IsIGJ5IGNyZWF0aW5nIGEgc2VnbWVudGVkIFdvcmRPd25lcgorICAg
ICAgICBjbGFzcy4gVGhhdCB3b3VsZCByZXF1aXJlIHJlcGVhdGluZyB0aGUgZGFuY2Ugb2YgaGF2
aW5nIGEgc3BpbmUgdGhhdCBjYW4gcmVzaXplIHdoaWxlIHN0YXNoaW5nCisgICAgICAgIG9sZCB2
ZXJzaW9ucy4gU28sIHRoZSBzcGluZSByZXNpemluZyBsb2dpYyBpcyBhYnN0cmFjdGVkIGJlaGlu
ZCBDb25jdXJyZW50QnVmZmVyLiBZb3UgY291bGQKKyAgICAgICAgdXNlIHRoYXQgYXMgYSBraW5k
IG9mICJjb25jdXJyZW50IHZlY3RvciIgZm9yIGltbXV0YWJsZSBkYXRhLiBUaGF0J3MgaG93IENv
bmN1cnJlbnRWZWN0b3IgdXNlcworICAgICAgICBpdDogaXQncyBhbiBpbW11dGFibGUgYXJyYXkg
b2Ygc2VnbWVudCBwb2ludGVycy4KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIHd0Zi9Db25jdXJyZW50QnVmZmVyLmg6IEFkZGVkLgorICAgICAg
ICAoV1RGOjpDb25jdXJyZW50QnVmZmVyOjpDb25jdXJyZW50QnVmZmVyKToKKyAgICAgICAgKFdU
Rjo6Q29uY3VycmVudEJ1ZmZlcjo6fkNvbmN1cnJlbnRCdWZmZXIpOgorICAgICAgICAoV1RGOjpD
b25jdXJyZW50QnVmZmVyOjpncm93RXhhY3QpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50QnVm
ZmVyOjpncm93KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudEJ1ZmZlcjo6YXJyYXkgY29uc3Qp
OgorICAgICAgICAoV1RGOjpDb25jdXJyZW50QnVmZmVyOjpvcGVyYXRvcltdKToKKyAgICAgICAg
KFdURjo6Q29uY3VycmVudEJ1ZmZlcjo6b3BlcmF0b3JbXSBjb25zdCk6CisgICAgICAgIChXVEY6
OkNvbmN1cnJlbnRCdWZmZXI6OmNyZWF0ZUFycmF5KToKKyAgICAgICAgKiB3dGYvQ29uY3VycmVu
dFZlY3Rvci5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6Q29uY3VycmVudFZlY3Rvckl0ZXJhdG9y
Ojp+Q29uY3VycmVudFZlY3Rvckl0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFZl
Y3Rvckl0ZXJhdG9yOjpvcGVyYXRvciogY29uc3QpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50
VmVjdG9ySXRlcmF0b3I6Om9wZXJhdG9yLT4gY29uc3QpOgorICAgICAgICAoV1RGOjpDb25jdXJy
ZW50VmVjdG9ySXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50
VmVjdG9ySXRlcmF0b3I6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoV1RGOjpDb25jdXJy
ZW50VmVjdG9ySXRlcmF0b3I6Om9wZXJhdG9yIT0gY29uc3QpOgorICAgICAgICAoV1RGOjpDb25j
dXJyZW50VmVjdG9ySXRlcmF0b3I6Om9wZXJhdG9yPSk6CisgICAgICAgIChXVEY6OkNvbmN1cnJl
bnRWZWN0b3JJdGVyYXRvcjo6Q29uY3VycmVudFZlY3Rvckl0ZXJhdG9yKToKKyAgICAgICAgKFdU
Rjo6Q29uY3VycmVudFZlY3Rvcjo6fkNvbmN1cnJlbnRWZWN0b3IpOgorICAgICAgICAoV1RGOjpD
b25jdXJyZW50VmVjdG9yOjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFZl
Y3Rvcjo6aXNFbXB0eSBjb25zdCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRWZWN0b3I6OmF0
KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFZlY3Rvcjo6YXQgY29uc3QpOgorICAgICAgICAo
V1RGOjpDb25jdXJyZW50VmVjdG9yOjpvcGVyYXRvcltdKToKKyAgICAgICAgKFdURjo6Q29uY3Vy
cmVudFZlY3Rvcjo6b3BlcmF0b3JbXSBjb25zdCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRW
ZWN0b3I6OmZpcnN0KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFZlY3Rvcjo6Zmlyc3QgY29u
c3QpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50VmVjdG9yOjpsYXN0KToKKyAgICAgICAgKFdU
Rjo6Q29uY3VycmVudFZlY3Rvcjo6bGFzdCBjb25zdCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJl
bnRWZWN0b3I6OnRha2VMYXN0KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFZlY3Rvcjo6YXBw
ZW5kKToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFZlY3Rvcjo6YWxsb2MpOgorICAgICAgICAo
V1RGOjpDb25jdXJyZW50VmVjdG9yOjpyZW1vdmVMYXN0KToKKyAgICAgICAgKFdURjo6Q29uY3Vy
cmVudFZlY3Rvcjo6Z3Jvdyk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRWZWN0b3I6OmJlZ2lu
KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFZlY3Rvcjo6ZW5kKToKKyAgICAgICAgKFdURjo6
Q29uY3VycmVudFZlY3Rvcjo6c2VnbWVudEV4aXN0c0Zvcik6CisgICAgICAgIChXVEY6OkNvbmN1
cnJlbnRWZWN0b3I6OnNlZ21lbnRGb3IpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50VmVjdG9y
OjpzdWJzY3JpcHRGb3IpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50VmVjdG9yOjplbnN1cmVT
ZWdtZW50c0Zvcik6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRWZWN0b3I6OmVuc3VyZVNlZ21l
bnQpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50VmVjdG9yOjphbGxvY2F0ZVNlZ21lbnQpOgor
CiAyMDE3LTEyLTExICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgogCiAg
ICAgICAgIFdlYiBJbnNwZWN0b3I6IE9wdGlvbmFsbHkgbG9nIFdlYktpdCBsb2cgcGFyYW1ldGVy
cyBhcyBKU09OCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDIyNTc3MCkKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIzOSw2ICsyMzksOCBAQAogCQkwRkIxNEUxODE4MEZB
MjE4MDA5QjZCNEQgLyogQmFnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJh
Zy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkIxNEUxQTE4MTBFMURBMDA5QjZC
NEQgLyogQmFnVG9IYXNoTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhZ1RvSGFzaE1hcC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkIzMTdDMzFDNDg4MDAxMDA3RTM5NUEgLyogU3lz
dGVtVHJhY2luZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeXN0ZW1UcmFj
aW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjQ2NzgyMUZERTI4MkIwMDNG
Q0IwOSAvKiBDb25jdXJyZW50QnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENvbmN1cnJlbnRCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZC
NDY3ODMxRkRFMjgyQzAwM0ZDQjA5IC8qIENvbmN1cnJlbnRWZWN0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uY3VycmVudFZlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkM0NDg4MjE2RkU5RkUxMDA4NDRCRTkgLyogUHJvY2Vzc0lELmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb2Nlc3NJRC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkM0RURFNTE2OTYxNDk2MDBGNjUwNDEgLyogQ29tbWFQcmludGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbW1hUHJpbnRlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MUFDNDE1NEZCMjJFMDA5ODNFNzIgLyogRmFz
dEJpdFZlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGYXN0Qml0VmVj
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MDgsOCArODEwLDEwIEBACiAJ
CQkJMEY4RjJCOTAxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmggKi8sCiAJ
CQkJQThBNDcyNzAxNTFBODI1QTAwNDEyM0ZGIC8qIENvbXBpbGVyLmggKi8sCiAJCQkJNDZCQTlF
QUIxRjRDRDYxRTAwOUEyQkJDIC8qIENvbXBsZXRpb25IYW5kbGVyLmggKi8sCisJCQkJMEZCNDY3
ODIxRkRFMjgyQjAwM0ZDQjA5IC8qIENvbmN1cnJlbnRCdWZmZXIuaCAqLywKIAkJCQkwRjMwQ0I1
ODFGQ0RGMTMzMDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwICovLAogCQkJCTBG
MzBDQjU5MUZDREYxMzMwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5oICovLAorCQkJ
CTBGQjQ2NzgzMUZERTI4MkMwMDNGQ0IwOSAvKiBDb25jdXJyZW50VmVjdG9yLmggKi8sCiAJCQkJ
MEZEQjY5OEQxQjdDNjQzQTAwMEMxMDc4IC8qIENvbmRpdGlvbi5oICovLAogCQkJCTBGRkJDQkZB
MUZEMzdFMEYwMDcyQUFGMCAvKiBDb3VudGluZ0xvY2suaCAqLywKIAkJCQkwRjhFODVEQTFGRDQ4
NUIwMDA2OTE4ODkgLyogQ291bnRpbmdMb2NrLmNwcCAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMu
dHh0CShyZXZpc2lvbiAyMjU3NzApCisrKyBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMTgsNyArMTgsOSBAQCBzZXQoV1RGX0hFQURFUlMKICAgICBDbG9j
a1R5cGUuaAogICAgIENvbXBpbGF0aW9uVGhyZWFkLmgKICAgICBDb21waWxlci5oCisgICAgQ29u
Y3VycmVudEJ1ZmZlci5oCiAgICAgQ29uY3VycmVudFB0ckhhc2hTZXQuaAorICAgIENvbmN1cnJl
bnRWZWN0b3IuaAogICAgIENvbmRpdGlvbi5oCiAgICAgQ291bnRpbmdMb2NrLmgKICAgICBDcm9z
c1RocmVhZENvcGllci5oCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Db25jdXJyZW50QnVmZmVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ29uY3VycmVudEJ1ZmZlci5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRCdWZmZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CisjaW5j
bHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgor
I2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gQ29uY3VycmVudEJ1
ZmZlciBpcyBzdWl0YWJsZSBmb3Igd2hlbiB5b3UgcGxhbiB0byBzdG9yZSBpbW11dGFibGUgZGF0
YSBhbmQgc29tZXRpbWVzIGFwcGVuZCB0byBpdC4KKy8vIEl0IHN1cHBvcnRzIHN0b3JpbmcgZGF0
YSB0aGF0IGlzIG5vdCBjb3B5LWNvbnN0cnVjdGFibGUgYnV0IGJpdC1jb3B5YWJsZS4KK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBDb25jdXJyZW50QnVmZmVyIHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShDb25jdXJyZW50QnVmZmVyKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKK3B1YmxpYzoKKyAgICAKKyAgICBDb25jdXJyZW50QnVmZmVyKCkKKyAgICB7CisgICAgfQor
ICAgIAorICAgIH5Db25jdXJyZW50QnVmZmVyKCkKKyAgICB7CisgICAgICAgIGlmIChBcnJheSog
YXJyYXkgPSBtX2FycmF5KSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
YXJyYXktPnNpemU7ICsraSkKKyAgICAgICAgICAgICAgICBhcnJheS0+ZGF0YVtpXS5+VCgpOwor
ICAgICAgICB9CisgICAgICAgIGZvciAoQXJyYXkqIGFycmF5IDogbV9hbGxBcnJheXMpCisgICAg
ICAgICAgICBmYXN0RnJlZShhcnJheSk7CisgICAgfQorCisgICAgLy8gR3Jvd2luZyBpcyBub3Qg
Y29uY3VycmVudC4gVGhpcyBhc3N1bWVzIHlvdSBhcmUgaG9sZGluZyBzb21lIG90aGVyIGxvY2sg
YmVmb3JlIHlvdSBkbyB0aGlzLgorICAgIHZvaWQgZ3Jvd0V4YWN0KHNpemVfdCBuZXdTaXplKQor
ICAgIHsKKyAgICAgICAgQXJyYXkqIGFycmF5ID0gbV9hcnJheTsKKyAgICAgICAgaWYgKGFycmF5
ICYmIG5ld1NpemUgPD0gYXJyYXktPnNpemUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IEFycmF5KiBuZXdBcnJheSA9IGNyZWF0ZUFycmF5KG5ld1NpemUpOworICAgICAgICAvLyBUaGlz
IGFsbG93cyB1cyB0byBkbyBDb25jdXJyZW50QnVmZmVyPHN0ZDo6dW5pcXVlX3B0cjw+Pi4KKyAg
ICAgICAgaWYgKGFycmF5KQorICAgICAgICAgICAgbWVtY3B5KG5ld0FycmF5LT5kYXRhLCBhcnJh
eS0+ZGF0YSwgc2l6ZW9mKFQpICogYXJyYXktPnNpemUpOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBhcnJheSA/IGFycmF5LT5zaXplIDogMDsgaSA8IG5ld1NpemU7ICsraSkKKyAgICAgICAg
ICAgIG5ldyAobmV3QXJyYXktPmRhdGEgKyBpKSBUKCk7CisgICAgICAgIFdURjo6c3RvcmVTdG9y
ZUZlbmNlKCk7CisgICAgICAgIG1fYXJyYXkgPSBuZXdBcnJheTsKKyAgICAgICAgV1RGOjpzdG9y
ZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgbV9hbGxBcnJheXMuYXBwZW5kKG5ld0FycmF5KTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBncm93KHNpemVfdCBuZXdTaXplKQorICAgIHsKKyAgICAgICAg
c2l6ZV90IHNpemUgPSBtX2FycmF5ID8gbV9hcnJheS0+c2l6ZSA6IDA7CisgICAgICAgIGlmIChu
ZXdTaXplIDw9IHNpemUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGdyb3dFeGFjdChz
dGQ6Om1heChuZXdTaXplLCBzaXplICogMikpOworICAgIH0KKyAgICAKKyAgICBzdHJ1Y3QgQXJy
YXkgeworICAgICAgICB1bnNpZ25lZCBzaXplOyAvLyBUaGlzIGlzIGFuIGltbXV0YWJsZSBzaXpl
LgorICAgICAgICBUIGRhdGFbMV07CisgICAgfTsKKyAgICAKKyAgICBBcnJheSogYXJyYXkoKSBj
b25zdCB7IHJldHVybiBtX2FycmF5OyB9CisgICAgCisgICAgVCYgb3BlcmF0b3JbXShzaXplX3Qg
aW5kZXgpIHsgcmV0dXJuIG1fYXJyYXktPmRhdGFbaW5kZXhdOyB9CisgICAgY29uc3QgVCYgb3Bl
cmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fYXJyYXktPmRhdGFbaW5kZXhd
OyB9CisgICAgCitwcml2YXRlOgorICAgIEFycmF5KiBjcmVhdGVBcnJheSh1bnNpZ25lZCBzaXpl
KQorICAgIHsKKyAgICAgICAgQXJyYXkqIHJlc3VsdCA9IHN0YXRpY19jYXN0PEFycmF5Kj4oZmFz
dE1hbGxvYyhPQkpFQ1RfT0ZGU0VUT0YoQXJyYXksIGRhdGEpICsgc2l6ZW9mKFQpICogc2l6ZSkp
OworICAgICAgICByZXN1bHQtPnNpemUgPSBzaXplOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKyAgICAKKyAgICBBcnJheSogbV9hcnJheSB7IG51bGxwdHIgfTsKKyAgICBWZWN0b3I8
QXJyYXkqPiBtX2FsbEFycmF5czsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9Db25jdXJyZW50VmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvQ29uY3VycmVudFZlY3Rvci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3Rm
L0NvbmN1cnJlbnRWZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI1MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENvbmN1
cnJlbnRWZWN0b3JfaAorI2RlZmluZSBDb25jdXJyZW50VmVjdG9yX2gKKworI2luY2x1ZGUgPHd0
Zi9Db25jdXJyZW50QnVmZmVyLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25h
bWVzcGFjZSBXVEYgeworCisvLyBBbiBpdGVyYXRvciBmb3IgQ29uY3VycmVudFZlY3Rvci4gSXQg
c3VwcG9ydHMgb25seSB0aGUgcHJlICsrIG9wZXJhdG9yCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
c2l6ZV90IFNlZ21lbnRTaXplID0gOD4gY2xhc3MgQ29uY3VycmVudFZlY3RvcjsKK3RlbXBsYXRl
IDx0eXBlbmFtZSBULCBzaXplX3QgU2VnbWVudFNpemUgPSA4PiBjbGFzcyBDb25jdXJyZW50VmVj
dG9ySXRlcmF0b3IgeworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ29uY3VycmVudFZlY3Rv
cjxULCBTZWdtZW50U2l6ZT47CitwdWJsaWM6CisgICAgdHlwZWRlZiBDb25jdXJyZW50VmVjdG9y
SXRlcmF0b3I8VCwgU2VnbWVudFNpemU+IEl0ZXJhdG9yOworCisgICAgfkNvbmN1cnJlbnRWZWN0
b3JJdGVyYXRvcigpIHsgfQorCisgICAgVCYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gbV92
ZWN0b3IuYXQobV9pbmRleCk7IH0KKyAgICBUKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4g
Jm1fdmVjdG9yLmF0KG1faW5kZXgpOyB9CisKKyAgICAvLyBPbmx5IHByZWZpeCArKyBvcGVyYXRv
ciBzdXBwb3J0ZWQKKyAgICBJdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgeworICAgICAgICBt
X2luZGV4Kys7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgSXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1faW5kZXggPT0gb3RoZXIubV9pbmRleCAmJiAmbV92ZWN0b3IgPT0gJm90aGVyLm1fdmVjdG9y
OworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBJdGVyYXRvciYgb3RoZXIpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9pbmRleCAhPSBvdGhlci5tX2luZGV4IHx8ICZt
X3ZlY3RvciAhPSAmb3RoZXIubV92ZWN0b3I7CisgICAgfQorCisgICAgQ29uY3VycmVudFZlY3Rv
ckl0ZXJhdG9yJiBvcGVyYXRvcj0oY29uc3QgQ29uY3VycmVudFZlY3Rvckl0ZXJhdG9yPFQsIFNl
Z21lbnRTaXplPiYgb3RoZXIpCisgICAgeworICAgICAgICBtX3ZlY3RvciA9IG90aGVyLm1fdmVj
dG9yOworICAgICAgICBtX2luZGV4ID0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgcmV0dXJuICp0
aGlzOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDb25jdXJyZW50VmVjdG9ySXRlcmF0b3IoQ29u
Y3VycmVudFZlY3RvcjxULCBTZWdtZW50U2l6ZT4mIHZlY3Rvciwgc2l6ZV90IGluZGV4KQorICAg
ICAgICA6IG1fdmVjdG9yKHZlY3RvcikKKyAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgIHsK
KyAgICB9CisKKyAgICBDb25jdXJyZW50VmVjdG9yPFQsIFNlZ21lbnRTaXplPiYgbV92ZWN0b3I7
CisgICAgc2l6ZV90IG1faW5kZXg7Cit9OworCisvLyBDb25jdXJyZW50VmVjdG9yIGlzIGxpa2Ug
U2VnbWVudGVkVmVjdG9yLCBidXQgc3VpdGFibGUgZm9yIHNjZW5hcmlvcyB3aGVyZSBvbmUgdGhy
ZWFkIGFwcGVuZHMKKy8vIGVsZW1lbnRzIGFuZCBhbm90aGVyIHRocmVhZCBjb250aW51ZXMgdG8g
YWNjZXNzIGVsZW1lbnRzIGF0IGxvd2VyIGluZGljZXMuIE9ubHkgb25lIHRocmVhZCBjYW4KKy8v
IGFwcGVuZCBhdCBhIHRpbWUsIHNvIHRoYXQgYWN0aXZpdHkgc3RpbGwgbmVlZHMgbG9ja2luZy4K
K3RlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXplX3QgU2VnbWVudFNpemU+CitjbGFzcyBDb25jdXJy
ZW50VmVjdG9yIHsKKyAgICBmcmllbmQgY2xhc3MgQ29uY3VycmVudFZlY3Rvckl0ZXJhdG9yPFQs
IFNlZ21lbnRTaXplPjsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb25jdXJyZW50VmVjdG9y
KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworcHVibGljOgorICAgIHR5cGVkZWYg
Q29uY3VycmVudFZlY3Rvckl0ZXJhdG9yPFQsIFNlZ21lbnRTaXplPiBJdGVyYXRvcjsKKworICAg
IENvbmN1cnJlbnRWZWN0b3IoKSA9IGRlZmF1bHQ7CisKKyAgICB+Q29uY3VycmVudFZlY3Rvcigp
CisgICAgeworICAgIH0KKworICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXpl
OyB9CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIXNpemUoKTsgfQorCisgICAg
VCYgYXQoc2l6ZV90IGluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlf
SU1QTElDQVRJT04oaW5kZXggPCBtX3NpemUpOworICAgICAgICByZXR1cm4gc2VnbWVudEZvcihp
bmRleCktPmVudHJpZXNbc3Vic2NyaXB0Rm9yKGluZGV4KV07CisgICAgfQorCisgICAgY29uc3Qg
VCYgYXQoc2l6ZV90IGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnN0X2Nh
c3Q8Q29uY3VycmVudFZlY3RvcjxULCBTZWdtZW50U2l6ZT4qPih0aGlzKS0+YXQoaW5kZXgpOwor
ICAgIH0KKworICAgIFQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGF0KGluZGV4KTsKKyAgICB9CisKKyAgICBjb25zdCBUJiBvcGVyYXRvcltdKHNpemVf
dCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBhdChpbmRleCk7CisgICAgfQor
CisgICAgVCYgZmlyc3QoKQorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1Q
TElDQVRJT04oIWlzRW1wdHkoKSk7CisgICAgICAgIHJldHVybiBhdCgwKTsKKyAgICB9CisgICAg
Y29uc3QgVCYgZmlyc3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJ
VFlfSU1QTElDQVRJT04oIWlzRW1wdHkoKSk7CisgICAgICAgIHJldHVybiBhdCgwKTsKKyAgICB9
CisgICAgVCYgbGFzdCgpCisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBM
SUNBVElPTighaXNFbXB0eSgpKTsKKyAgICAgICAgcmV0dXJuIGF0KHNpemUoKSAtIDEpOworICAg
IH0KKyAgICBjb25zdCBUJiBsYXN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVF9XSVRI
X1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFpc0VtcHR5KCkpOworICAgICAgICByZXR1cm4gYXQoc2l6
ZSgpIC0gMSk7CisgICAgfQorCisgICAgVCB0YWtlTGFzdCgpCisgICAgeworICAgICAgICBBU1NF
UlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighaXNFbXB0eSgpKTsKKyAgICAgICAgVCByZXN1
bHQgPSBXVEZNb3ZlKGxhc3QoKSk7CisgICAgICAgIC0tbV9zaXplOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgdm9p
ZCBhcHBlbmQoQXJncyYmLi4uIGFyZ3MpCisgICAgeworICAgICAgICArK21fc2l6ZTsKKyAgICAg
ICAgaWYgKCFzZWdtZW50RXhpc3RzRm9yKG1fc2l6ZSAtIDEpKQorICAgICAgICAgICAgYWxsb2Nh
dGVTZWdtZW50KCk7CisgICAgICAgIG5ldyAoTm90TnVsbCwgJmxhc3QoKSkgVChzdGQ6OmZvcndh
cmQ8QXJncz4oYXJncykuLi4pOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFy
Z3M+CisgICAgVCYgYWxsb2MoQXJncyYmLi4uIGFyZ3MpCisgICAgeworICAgICAgICBhcHBlbmQo
c3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKKyAgICAgICAgcmV0dXJuIGxhc3QoKTsKKyAg
ICB9CisKKyAgICB2b2lkIHJlbW92ZUxhc3QoKQorICAgIHsKKyAgICAgICAgbGFzdCgpLn5UKCk7
CisgICAgICAgIC0tbV9zaXplOworICAgIH0KKworICAgIHZvaWQgZ3JvdyhzaXplX3Qgc2l6ZSkK
KyAgICB7CisgICAgICAgIGlmIChzaXplID09IG1fc2l6ZSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgQVNTRVJUKHNpemUgPiBtX3NpemUpOworICAgICAgICBlbnN1cmVTZWdtZW50c0Zv
cihzaXplKTsKKyAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3NpemU7CisgICAgICAgIG1fc2l6
ZSA9IHNpemU7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBvbGRTaXplOyBpIDwgbV9zaXplOyAr
K2kpCisgICAgICAgICAgICBuZXcgKE5vdE51bGwsICZhdChpKSkgVCgpOworICAgIH0KKworICAg
IEl0ZXJhdG9yIGJlZ2luKCkKKyAgICB7CisgICAgICAgIHJldHVybiBJdGVyYXRvcigqdGhpcywg
MCk7CisgICAgfQorCisgICAgSXRlcmF0b3IgZW5kKCkKKyAgICB7CisgICAgICAgIHJldHVybiBJ
dGVyYXRvcigqdGhpcywgbV9zaXplKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RydWN0IFNl
Z21lbnQgeworICAgICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAgICAg
ICAgICAKKyAgICAgICAgVCBlbnRyaWVzW1NlZ21lbnRTaXplXTsKKyAgICB9OworCisgICAgYm9v
bCBzZWdtZW50RXhpc3RzRm9yKHNpemVfdCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBp
bmRleCAvIFNlZ21lbnRTaXplIDwgbV9udW1TZWdtZW50czsKKyAgICB9CisKKyAgICBTZWdtZW50
KiBzZWdtZW50Rm9yKHNpemVfdCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3NlZ21l
bnRzW2luZGV4IC8gU2VnbWVudFNpemVdLmdldCgpOworICAgIH0KKworICAgIHNpemVfdCBzdWJz
Y3JpcHRGb3Ioc2l6ZV90IGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGluZGV4ICUgU2Vn
bWVudFNpemU7CisgICAgfQorCisgICAgdm9pZCBlbnN1cmVTZWdtZW50c0ZvcihzaXplX3Qgc2l6
ZSkKKyAgICB7CisgICAgICAgIHNpemVfdCBzZWdtZW50Q291bnQgPSAobV9zaXplICsgU2VnbWVu
dFNpemUgLSAxKSAvIFNlZ21lbnRTaXplOworICAgICAgICBzaXplX3QgbmVlZGVkU2VnbWVudENv
dW50ID0gKHNpemUgKyBTZWdtZW50U2l6ZSAtIDEpIC8gU2VnbWVudFNpemU7CisKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IHNlZ21lbnRDb3VudCA/IHNlZ21lbnRDb3VudCAtIDEgOiAwOyBpIDwg
bmVlZGVkU2VnbWVudENvdW50OyArK2kpCisgICAgICAgICAgICBlbnN1cmVTZWdtZW50KGkpOwor
ICAgIH0KKworICAgIHZvaWQgZW5zdXJlU2VnbWVudChzaXplX3Qgc2VnbWVudEluZGV4KQorICAg
IHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oc2VnbWVudEluZGV4
IDw9IG1fbnVtU2VnbWVudHMpOworICAgICAgICBpZiAoc2VnbWVudEluZGV4ID09IG1fbnVtU2Vn
bWVudHMpCisgICAgICAgICAgICBhbGxvY2F0ZVNlZ21lbnQoKTsKKyAgICB9CisKKyAgICB2b2lk
IGFsbG9jYXRlU2VnbWVudCgpCisgICAgeworICAgICAgICBtX3NlZ21lbnRzLmdyb3cobV9udW1T
ZWdtZW50cyArIDEpOworICAgICAgICBtX3NlZ21lbnRzW21fbnVtU2VnbWVudHMrK10gPSBzdGQ6
Om1ha2VfdW5pcXVlPFNlZ21lbnQ+KCk7CisgICAgfQorCisgICAgc2l6ZV90IG1fc2l6ZSB7IDAg
fTsKKyAgICBDb25jdXJyZW50QnVmZmVyPHN0ZDo6dW5pcXVlX3B0cjxTZWdtZW50Pj4gbV9zZWdt
ZW50czsKKyAgICBzaXplX3QgbV9udW1TZWdtZW50cyB7IDAgfTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdURgorCit1c2luZyBXVEY6OkNvbmN1cnJlbnRWZWN0b3I7CisKKyNlbmRpZiAvLyBDb25j
dXJyZW50VmVjdG9yX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329094</attachid>
            <date>2017-12-11 23:17:53 -0800</date>
            <delta_ts>2017-12-11 23:27:52 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>79056</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI1NzcwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzNCBA
QAorMjAxNy0xMi0xMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBmbGFnIGEgY2VsbCBmb3IgdW5jb25kaXRpb25hbCBm
aW5hbGl6YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE4MDYzNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAg
ICAKKyAgICAgICAgVW5jb25kaXRpb25hbEZpbmFsaXplcnMgd2VyZSBhbm5veWluZyAtIHlvdSBo
YWQgdG8gYWxsb2NhdGUgdGhlbSBhbmQgeW91IGhhZCB0byBtYW5hZ2UgYQorICAgICAgICBnbG9i
YWwgbGlua2VkIGxpc3QgLSBidXQgdGhleSBoYWQgc29tZSBuaWNlIHByb3BlcnRpZXM6CisgICAg
ICAgIAorICAgICAgICAtIFlvdSBvbmx5IGRpZCB0aGUgaGFyZGVzdCB3b3JrIChjcmVhdGluZyB0
aGUgVW5jb25kaXRpb25hbEZpbmFsaXplcikgb24gZmlyc3QgR0Mgd2hlcmUgeW91CisgICAgICAg
ICAgc3Vydml2ZWQgYW5kIG5lZWRlZCBpdC4KKyAgICAgICAgICAgIC0+IEp1c3QgbmVlZGluZyBp
dCB3YXNuJ3QgZW5vdWdoLgorICAgICAgICAgICAgLT4gSnVzdCBzdXJ2aXZpbmcgd2Fzbid0IGVu
b3VnaC4KKyAgICAgICAgCisgICAgICAgIFRoZSBuZXcgQVBJIGJhc2VkIG9uIElzb1N1YnNwYWNl
cyBtZWFudCB0aGF0IGp1c3Qgc3Vydml2aW5nIHdhcyBlbm91Z2ggdG8gY2F1c2UgdW5jb25kaXRp
b25hbAorICAgICAgICBmaW5hbGl6ZXIgbG9naWMgdG8gYmUgaW52b2tlZC4gSSB0aGluayB0aGF0
J3Mgbm90IGdyZWF0LiBJbmZlcnJlZFR5cGUgZ290IGFyb3VuZCB0aGlzIGJ5CisgICAgICAgIG1h
a2luZyBJbmZlcnJlZFN0cnVjdHVyZSBhIGNlbGwsIGJ1dCB0aGlzIHdhcyBhIGdyb3NzIGhhY2su
IEZvciBvbmUsIGl0IG1lYW50IHRoYXQKKyAgICAgICAgSW5mZXJyZWRTdHJ1Y3R1cmUgd291bGQg
c3Vydml2ZSBkdXJpbmcgdGhlIEdDIGluIHdoaWNoIGl0cyBmaW5hbGl6ZXIgb2J2aWF0ZWQgdGhl
IG5lZWQgZm9yIGl0cworICAgICAgICBleGlzdGVuY2UuIEl0J3Mgbm90IHJlYWxseSBhbiBpZGlv
bSBJIHdhbnQgdXMgdG8gcmVwZWF0IGJlY2F1c2UgaXQgc291bmRzIGxpa2UgdGhlIHNvcnQgb2YK
KyAgICAgICAgdGhpbmcgdGhhdCB0dXJucyBvdXQgdG8gYmUgc3VidGx5IGJyb2tlbi4KKyAgICAg
ICAgCisgICAgICAgIFdlIHJlYWxseSBuZWVkIHRvIGhhdmUgYSB3YXkgb2YgaW5kaWNhdGluZyB3
aGVuIHlvdSBoYXZlIGVudGVyZWQgaW50byB0aGUgc3RhdGUgdGhhdCByZXF1aXJlcworICAgICAg
ICB5b3VyIHVuY29uZGl0aW9uYWwgZmluYWxpemVyIHRvIGJlIGludm9rZWQuIEJhc2ljYWxseSwg
d2Ugd2FudCB0byBiZSBhYmxlIHRvIHRyYWNrIHRoZSBzZXQgb2YKKyAgICAgICAgb2JqZWN0cyB0
aGF0IG5lZWQgdW5jb25kaXRpb25hbCBmaW5hbGl6ZXJzLiBPbmx5IHRoZSBzdWJzZXQgb2YgdGhh
dCBzZXQgdGhhdCBvdmVybGFwcyB3aXRoIHRoZQorICAgICAgICBzZXQgb2YgbWFya2VkIG9iamVj
dHMgbmVlZHMgdG8gYmUgYWNjdXJhdGUuIFRoZSBlYXNpZXN0IHdheSB0byBkbyB0aGlzIGlzIGEg
aGllcmFyY2h5IG9mCisgICAgICAgIGJpdHZlY3RvcnM6IG9uZSB0byBzYXkgd2hpY2ggTWFya2Vk
QmxvY2tzIGhhdmUgb2JqZWN0cyB0aGF0IGhhdmUgdW5jb25kaXRpb25hbCBmaW5hbGl6ZXJzLCBh
bmQKKyAgICAgICAgYW5vdGhlciBsZXZlbCB0byBzYXkgd2hpY2ggYXRvbXMgd2l0aGluIGEgTWFy
a2VkQmxvY2sgaGF2ZSB1bmNvbmRpdGlvbmFsIGZpbmFsaXplcnMuCisgICAgICAgIAorICAgICAg
ICBUaGlzIGNoYW5nZSBpbnRyb2R1Y2VzIElzb0NlbGxTZXQsIHdoaWNoIGNvdXBsZXMgaXRzZWxm
IHRvIHRoZSBNYXJrZWRBbGxvY2F0b3Igb2Ygc29tZQorICAgICAgICBJc29TdWJzcGFjZSB0byBh
bGxvdyBtYWludGFpbmluZyBhIHNldCBvZiBvYmplY3RzICh3ZWxsLCBjZWxscyAtIHlvdSBjb3Vs
ZCBkbyB0aGlzIHdpdGgKKyAgICAgICAgYXV4aWxpYXJpZXMpIHRoYXQgYmVsb25nIHRvIHRoYXQg
SXNvU3Vic3BhY2UuIEl0J2xsIGhhdmUgdW5kZWZpbmVkIGJlaGF2aW9yIGlmIHlvdSB0cnkgdG8K
KyAgICAgICAgYWRkL3JlbW92ZS9jb250YWlucyBhbiBvYmplY3QgdGhhdCBpc24ndCBpbiB0aGF0
IElzb1N1YnNwYWNlLiBGb3Igb2JqZWN0cyBpbiB0aGF0IHN1YnNwYWNlLAorICAgICAgICB5b3Ug
Y2FuIGFkZC9yZW1vdmUvY29udGFpbnMgYW5kIGZvckVhY2hNYXJrZWRDZWxsLiBUaGUgY29zdCBv
ZiBlYWNoIElzb0NlbGxTZXQgaXMgYXQgd29yc3QKKyAgICAgICAgYWJvdXQgMC44JSBpbmNyZWFz
ZSBpbiBzaXplIHRvIGV2ZXJ5IG9iamVjdCBpbiB0aGUgc3Vic3BhY2UgdGhhdCB0aGUgc2V0IGlz
IGF0dGFjaGVkIHRvLiBTbywKKyAgICAgICAgaXQgbWFrZXMgc2Vuc2UgdG8gaGF2ZSBhIGhhbmRm
dWwgcGVyIHN1YnNwYWNlIG1heC4gVGhpcyBjaGFuZ2Ugb25seSBuZWVkcyBvbmUgcGVyIHN1YnNw
YWNlLAorICAgICAgICBidXQgeW91IGNvdWxkIGltYWdpbmUgbW9yZSBpZiB3ZSBkbyB0aGlzIGZv
ciBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLgorICAgICAgICAKKyAgICAgICAgVG8gYWJzb2x1dGVs
eSBtaW5pbWl6ZSB0aGUgcG9zc2liaWxpdHkgdGhhdCB0aGlzIGluY3VycyBjb3N0cywgdGhlIGFk
ZC9yZW1vdmUvY29udGFpbnMKKyAgICAgICAgZnVuY3Rpb25zIGNhbiBiZSB1c2VkIGZyb20gYW55
IHRocmVhZCBzbyBsb25nIGFzIGZvckVhY2hNYXJrZWRDZWxsIGlzbid0IHJ1bm5pbmcuIFRoaXMg
bWVhbnMKKyAgICAgICAgdGhhdCBJbmZlcnJlZFR5cGUgb25seSBuZWVkcyB0byBhZGQgaXRzZWxm
IHRvIHRoZSBzZXQgZHVyaW5nIHZpc2l0Q2hpbGRyZW4uIFRodXMsIGl0IG5lZWRzIHRvCisgICAg
ICAgIGJvdGggc3Vydml2ZSBhbmQgbmVlZCBpdCBmb3IgdGhlIGhhcmRlc3Qgd29yayB0byB0YWtl
IHBsYWNlLiBUaGUgd29yayBvZiBhZGRpbmcgZG9lcyBpbnZvbHZlCisgICAgICAgIGEgZ25hcmx5
IGxvYWQgY2hhaW4gdGhhdCBlbmRzIGluIGEgQ0FTOiBsb2FkIGJsb2NrIGhhbmRsZSBmcm9tIGJs
b2NrLCBsb2FkIGluZGV4LCBsb2FkCisgICAgICAgIHNlZ21lbnQsIGxvYWQgYml0dmVjdG9yLCBs
b2FkIGJpdCAtPiBpZiBub3Qgc2V0LCB0aGVuIENBUy4gVGhhdCdzIGZpdmUgZGVwZW5kZW50IGxv
YWRzIQorICAgICAgICBIb3dldmVyLCBpdCdzIHBlcmZlY3QgZm9yIHJ1bm5pbmcgaW4gcGFyYWxs
ZWwgc2luY2UgdGhlIG9ubHkgd3JpdGUgb3BlcmF0aW9ucyBhcmUgdG8gd2lkZWx5CisgICAgICAg
IGRpc3BlcnNlZCBjYWNoZSBsaW5lcyB0aGF0IGNvbnRhaW4gdGhlIGJpdHMgdW5kZXJseWluZyB0
aGUgc2V0LgorICAgICAgICAKKyAgICAgICAgVGhlIGJlc3QgcGFydCBpcyBob3cgZm9yRWFjaE1h
cmtlZENlbGwgd29ya3MuIFRoYXQgc2tpcHMgYmxvY2tzIHRoYXQgZG9uJ3QgaGF2ZSBhbnkgb2Jq
ZWN0cworICAgICAgICB0aGF0IG5lZWQgdW5jb25kaXRpb25hbCBmaW5hbGl6ZXJzLCBhbmQgb25s
eSB0b3VjaGVzIHRoZSBtZW1vcnkgb2YgbWFya2VkIG9iamVjdHMgdGhhdCBoYXZlCisgICAgICAg
IHRoZSB1bmNvbmRpdGlvbmFsIGZpbmFsaXplciBiaXQgc2V0LiBJdCB3aWxsIHdhbGsgdGhvc2Ug
b2JqZWN0cyBpbiByb3VnaGx5IGFkZHJlc3Mgb3JkZXIuIEkKKyAgICAgICAgcHJldmlvdXNseSBm
b3VuZCB0aGF0IHRoaXMgc3BlZWRzIHVwIHdhbGtpbmcgb3ZlciBhIGxvdCBvZiBvYmplY3RzIHdo
ZW4gSSBtYWRlIHNpbWlsYXIgY2hhbmdlcworICAgICAgICBmb3IgRE9NIEdDIChjYWxsaW5nIHZp
c2l0QWRkaXRpb25hbENoaWxkcmVuIHZpYSBmb3JFYWNoTWFya2VkQ2VsbCByYXRoZXIgdGhhbiBi
eSB3YWxraW5nIGEKKyAgICAgICAgSGFzaFNldCkuCisgICAgICAgIAorICAgICAgICBUaGlzIGNo
YW5nZSBtYWtlcyBJbmZlcnJlZFN0cnVjdHVyZSBiZSBhIG1hbGxvYyBvYmplY3QgYWdhaW4sIGJ1
dCBub3cgaXQncyBpbiBhbiBJc29IZWFwLgorICAgICAgICAKKyAgICAgICAgTXkgZXhwZWN0YXRp
b24gZm9yIHRoaXMgY2hhbmdlIGlzIHRoYXQgaXQncyBwZXJmLW5ldXRyYWwuIExvbmctdGVybSwg
aXQgZ2l2ZXMgdXMgYSBwYXRoCisgICAgICAgIGZvcndhcmQgZm9yIGVsaW1pbmF0aW5nIFVuY29u
ZGl0aW9uYWxGaW5hbGl6ZXIgYW5kIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIgd2hpbGUgdXNpbmcK
KyAgICAgICAgSXNvU3Vic3BhY2UgaW4gbW9yZSBwbGFjZXMuCisKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIGhlYXAvQXRvbUluZGljZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkF0
b21JbmRpY2VzOjpBdG9tSW5kaWNlcyk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAg
ICAgKEpTQzo6SGVhcDo6ZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycyk6CisgICAgICAg
ICogaGVhcC9IZWFwLmg6CisgICAgICAgICogaGVhcC9Jc29DZWxsU2V0LmNwcDogQWRkZWQuCisg
ICAgICAgIChKU0M6Oklzb0NlbGxTZXQ6Oklzb0NlbGxTZXQpOgorICAgICAgICAoSlNDOjpJc29D
ZWxsU2V0Ojp+SXNvQ2VsbFNldCk6CisgICAgICAgIChKU0M6Oklzb0NlbGxTZXQ6OmFkZFNsb3cp
OgorICAgICAgICAoSlNDOjpJc29DZWxsU2V0OjpkaWRSZXNpemVCaXRzKToKKyAgICAgICAgKEpT
Qzo6SXNvQ2VsbFNldDo6ZGlkUmVtb3ZlQmxvY2spOgorICAgICAgICAoSlNDOjpJc29DZWxsU2V0
Ojpzd2VlcFRvRnJlZUxpc3QpOgorICAgICAgICAqIGhlYXAvSXNvQ2VsbFNldC5oOiBBZGRlZC4K
KyAgICAgICAgKiBoZWFwL0lzb0NlbGxTZXRJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlND
OjpJc29DZWxsU2V0OjphZGQpOgorICAgICAgICAoSlNDOjpJc29DZWxsU2V0OjpyZW1vdmUpOgor
ICAgICAgICAoSlNDOjpJc29DZWxsU2V0Ojpjb250YWlucyBjb25zdCk6CisgICAgICAgIChKU0M6
Oklzb0NlbGxTZXQ6OmZvckVhY2hNYXJrZWRDZWxsKToKKyAgICAgICAgKiBoZWFwL0lzb1N1YnNw
YWNlLmNwcDoKKyAgICAgICAgKEpTQzo6SXNvU3Vic3BhY2U6OmRpZFJlc2l6ZUJpdHMpOgorICAg
ICAgICAoSlNDOjpJc29TdWJzcGFjZTo6ZGlkUmVtb3ZlQmxvY2spOgorICAgICAgICAoSlNDOjpJ
c29TdWJzcGFjZTo6ZGlkQmVnaW5Td2VlcGluZ1RvRnJlZUxpc3QpOgorICAgICAgICAqIGhlYXAv
SXNvU3Vic3BhY2UuaDoKKyAgICAgICAgKiBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHA6CisgICAg
ICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWRkQmxvY2spOgorICAgICAgICAoSlNDOjpNYXJr
ZWRBbGxvY2F0b3I6OnJlbW92ZUJsb2NrKToKKyAgICAgICAgKiBoZWFwL01hcmtlZEFsbG9jYXRv
ci5oOgorICAgICAgICAqIGhlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oOgorICAgICAgICAq
IGhlYXAvTWFya2VkQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxl
Ojpzd2VlcCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzRW1wdHkpOiBE
ZWxldGVkLgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suaDoKKyAgICAgICAgKEpTQzo6TWFy
a2VkQmxvY2s6Om1hcmtzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRs
ZTo6bmV3bHlBbGxvY2F0ZWQgY29uc3QpOgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2tJbmxp
bmVzLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzQWxsb2NhdGVkKToK
KyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6aXNFbXB0eSk6CisgICAgICAgIChK
U0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OmVtcHR5TW9kZSk6CisgICAgICAgIChKU0M6Ok1hcmtl
ZEJsb2NrOjpIYW5kbGU6OmZvckVhY2hNYXJrZWRDZWxsKToKKyAgICAgICAgKiBoZWFwL1N1YnNw
YWNlLmNwcDoKKyAgICAgICAgKEpTQzo6U3Vic3BhY2U6OmRpZFJlc2l6ZUJpdHMpOgorICAgICAg
ICAoSlNDOjpTdWJzcGFjZTo6ZGlkUmVtb3ZlQmxvY2spOgorICAgICAgICAoSlNDOjpTdWJzcGFj
ZTo6ZGlkQmVnaW5Td2VlcGluZ1RvRnJlZUxpc3QpOgorICAgICAgICAqIGhlYXAvU3Vic3BhY2Uu
aDoKKyAgICAgICAgKiBoZWFwL1N1YnNwYWNlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTdWJz
cGFjZTo6Zm9yRWFjaE1hcmtlZENlbGwpOgorICAgICAgICAqIHJ1bnRpbWUvSW5mZXJyZWRTdHJ1
Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFN0cnVjdHVyZTo6SW5mZXJyZWRTdHJ1
Y3R1cmUpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFN0cnVjdHVyZTo6Y3JlYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6SW5mZXJyZWRTdHJ1Y3R1cmU6OmRlc3Ryb3kpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpJbmZlcnJlZFN0cnVjdHVyZTo6Y3JlYXRlU3RydWN0dXJlKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6SW5mZXJyZWRTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4pOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpJbmZlcnJlZFN0cnVjdHVyZTo6ZmluYWxpemVVbmNvbmRpdGlv
bmFsbHkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmZlcnJlZFN0cnVjdHVyZTo6ZmluaXNo
Q3JlYXRpb24pOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1cmUu
aDoKKyAgICAgICAgKiBydW50aW1lL0luZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludC5jcHA6Cisg
ICAgICAgIChKU0M6OkluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKToK
KyAgICAgICAgKiBydW50aW1lL0luZmVycmVkVHlwZS5jcHA6CisgICAgICAgIChKU0M6OkluZmVy
cmVkVHlwZTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlwZTo6d2ls
bFN0b3JlVmFsdWVTbG93KToKKyAgICAgICAgKEpTQzo6SW5mZXJyZWRUeXBlOjptYWtlVG9wU2xv
dyk6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlwZTo6c2V0KToKKyAgICAgICAgKEpTQzo6SW5m
ZXJyZWRUeXBlOjpyZW1vdmVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6
OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KToKKyAgICAgICAgKiBydW50aW1lL0luZmVycmVkVHlw
ZS5oOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgor
ICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKwogMjAxNy0xMi0xMSAgU2FhbSBCYXJhdGkgIDxzYmFy
YXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBXZSBuZWVkIHRvIGRpc2FibGVDYWNoaW5nKCkgaW4g
RXJyb3JJbnN0YW5jZSB3aGVuIHdlIG1hdGVyaWFsaXplIHByb3BlcnRpZXMKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDIyNTc3MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNDk1LDYgKzQ5NSw3IEBAIGhl
YXAvSGVhcFNuYXBzaG90LmNwcAogaGVhcC9IZWFwU25hcHNob3RCdWlsZGVyLmNwcAogaGVhcC9J
bmNyZW1lbnRhbFN3ZWVwZXIuY3BwCiBoZWFwL0lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3Bw
CitoZWFwL0lzb0NlbGxTZXQuY3BwCiBoZWFwL0lzb1N1YnNwYWNlLmNwcAogaGVhcC9KSVRTdHVi
Um91dGluZVNldC5jcHAKIGhlYXAvTGFyZ2VBbGxvY2F0aW9uLmNwcApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyNTc3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC00NzQsNiArNDc0LDEwIEBACiAJCTBGQjE3NjYzMTk2QjhGOUUwMDkxMDUyQSAvKiBE
RkdQdXJlVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGQjE3NjVGMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuaCAqLzsgfTsKIAkJ
MEZCMzg3OEUxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpckJsb2NrV29ya2xpc3QuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjM4NzhCMUJGQkM0NEQwMEUz
QUIxRSAvKiBBaXJCbG9ja1dvcmtsaXN0LmggKi87IH07CiAJCTBGQjM4NzkwMUJGQkM0NEQwMEUz
QUIxRSAvKiBBaXJPcHRpbWl6ZUJsb2NrT3JkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjM4NzhEMUJGQkM0NEQwMEUzQUIxRSAvKiBBaXJPcHRp
bWl6ZUJsb2NrT3JkZXIuaCAqLzsgfTsKKwkJMEZCNDY3N0YxRkREQTZFOTAwM0ZDQjA5IC8qIEF0
b21JbmRpY2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkI0Njc3RTFGRERBNkU1MDAzRkNCMDkgLyogQXRvbUluZGljZXMuaCAqLzsgfTsKKwkJMEZC
NDY3ODAxRkREQTZGMTAwM0ZDQjA5IC8qIElzb0NlbGxTZXQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjQ2NzdEMUZEREE2RDkwMDNGQ0IwOSAvKiBJ
c29DZWxsU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEZCNDY3ODExRkREQTZGNzAwM0ZDQjA5IC8qIElzb0NlbGxTZXRJbmxpbmVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0Njc3QjFGRERB
NkQ4MDAzRkNCMDkgLyogSXNvQ2VsbFNldElubGluZXMuaCAqLzsgfTsKKwkJMEZCNDY3ODUxRkRG
QjQ1NDAwM0ZDQjA5IC8qIEluZmVycmVkVHlwZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjQ2Nzg0MUZERkI0NTIwMDNGQ0IwOSAvKiBJ
bmZlcnJlZFR5cGVJbmxpbmVzLmggKi87IH07CiAJCTBGQjQ3NjdFMUQ5OUFFQTkwMDhFQTZDQiAv
KiBHQ0RlZmVycmFsQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZCNDc2N0MxRDk5QUVBNzAwOEVBNkNCIC8qIEdDRGVmZXJyYWxDb250ZXh0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZC
NDc2N0YxRDk5QUVBRDAwOEVBNkNCIC8qIEdDRGVmZXJyYWxDb250ZXh0SW5saW5lcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNDc2N0QxRDk5QUVB
NzAwOEVBNkNCIC8qIEdDRGVmZXJyYWxDb250ZXh0SW5saW5lcy5oICovOyB9OwogCQkwRkI0RkI3
NDFCQzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0RkI3MTFCQzg0MzE0MDAyNUNBNUEgLyog
RlRMTGF6eVNsb3dQYXRoLmggKi87IH07CkBAIC0yNTYyLDYgKzI1NjYsMTEgQEAKIAkJMEZCMzg3
OTExQkZEMzFBMTAwRTNBQjFFIC8qIEZUTENvbXBpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gRlRMQ29tcGlsZS5jcHA7IHBhdGggPSBmdGwvRlRMQ29tcGlsZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjQxNTgzMUQ3OEY5ODIwMERGOEQw
OSAvKiBBcnJheUNvbnZlbnRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEFycmF5Q29udmVudGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkI0MzhBMjE5MjcwQjFEMDBFMUZCQzkgLyogU3RydWN0dXJlU2V0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cnVjdHVyZVNldC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGQjQ2NzdCMUZEREE2RDgwMDNGQ0IwOSAvKiBJc29DZWxsU2V0
SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJc29DZWxsU2V0SW5s
aW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI0Njc3QzFGRERBNkQ5MDAz
RkNCMDkgLyogSXNvQ2VsbFNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBJc29DZWxsU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCNDY3
N0QxRkREQTZEOTAwM0ZDQjA5IC8qIElzb0NlbGxTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSXNvQ2VsbFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkI0Njc3RTFGRERBNkU1MDAzRkNCMDkgLyogQXRvbUluZGljZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQXRvbUluZGljZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZCNDY3ODQxRkRGQjQ1MjAwM0ZDQjA5IC8qIEluZmVycmVkVHlwZUlubGluZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5mZXJyZWRUeXBlSW5saW5lcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0NzY3QzFEOTlBRUE3MDA4RUE2Q0IgLyog
R0NEZWZlcnJhbENvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR0NE
ZWZlcnJhbENvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNDc2N0Qx
RDk5QUVBNzAwOEVBNkNCIC8qIEdDRGVmZXJyYWxDb250ZXh0SW5saW5lcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBHQ0RlZmVycmFsQ29udGV4dElubGluZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNEI1MTAxNkIzQTk2NDAwM0Y2OTZCIC8qIERGR01p
bmlmaWVkSUQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTWluaWZpZWRJ
RC5oOyBwYXRoID0gZGZnL0RGR01pbmlmaWVkSUQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTU1MjUsNiArNTUzNCw3IEBACiAJCQkJMEY5NjMwMzUxRDQxOTJDMzAwNTYwOUQ5IC8q
IEFsbG9jYXRvckF0dHJpYnV0ZXMuY3BwICovLAogCQkJCTBGOTYzMDM2MUQ0MTkyQzMwMDU2MDlE
OSAvKiBBbGxvY2F0b3JBdHRyaWJ1dGVzLmggKi8sCiAJCQkJMEYzMENCNUQxRkNFNDZCNDAwNEI1
MzIzIC8qIEFsbG9jYXRvckZvck1vZGUuaCAqLywKKwkJCQkwRkI0Njc3RTFGRERBNkU1MDAzRkNC
MDkgLyogQXRvbUluZGljZXMuaCAqLywKIAkJCQkwRkRFODdGODFERkQwQzZEMDA2NEMzOTAgLyog
Q2VsbENvbnRhaW5lci5jcHAgKi8sCiAJCQkJMEYwNzBBNDIxRDU0M0E4OTAwNkU3MjMyIC8qIENl
bGxDb250YWluZXIuaCAqLywKIAkJCQkwRjA3MEE0MzFENTQzQTg5MDA2RTcyMzIgLyogQ2VsbENv
bnRhaW5lcklubGluZXMuaCAqLywKQEAgLTU2MTEsNiArNTYyMSw5IEBACiAJCQkJQzI1RjhCQ0Mx
NTc1NDRBOTAwMjQ1QjcxIC8qIEluY3JlbWVudGFsU3dlZXBlci5oICovLAogCQkJCTBGRENFMTJG
MUZCMTFEOUQwMDZGMzkwMSAvKiBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcCAqLywKIAkJ
CQkwRkRDRTEzMDFGQjExRDlEMDA2RjM5MDEgLyogSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5o
ICovLAorCQkJCTBGQjQ2NzdDMUZEREE2RDkwMDNGQ0IwOSAvKiBJc29DZWxsU2V0LmNwcCAqLywK
KwkJCQkwRkI0Njc3RDFGRERBNkQ5MDAzRkNCMDkgLyogSXNvQ2VsbFNldC5oICovLAorCQkJCTBG
QjQ2NzdCMUZEREE2RDgwMDNGQ0IwOSAvKiBJc29DZWxsU2V0SW5saW5lcy5oICovLAogCQkJCTBG
RENFMTJDMUZBRkI0REUwMDZGMzkwMSAvKiBJc29TdWJzcGFjZS5jcHAgKi8sCiAJCQkJMEZEQ0Ux
MkIxRkFGQjRERTAwNkYzOTAxIC8qIElzb1N1YnNwYWNlLmggKi8sCiAJCQkJMEY3NjZEMjkxNUE4
Q0MzNDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmNwcCAqLywKQEAgLTY0ODYsNiArNjQ5
OSw3IEBACiAJCQkJMEZCRjkyQjcxRkQ3NkZGQzAwQUMyOEE4IC8qIEluZmVycmVkU3RydWN0dXJl
V2F0Y2hwb2ludC5oICovLAogCQkJCTBGMEE3NTIwMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJl
ZFR5cGUuY3BwICovLAogCQkJCTBGMEE3NTIxMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5
cGUuaCAqLywKKwkJCQkwRkI0Njc4NDFGREZCNDUyMDAzRkNCMDkgLyogSW5mZXJyZWRUeXBlSW5s
aW5lcy5oICovLAogCQkJCTBGRkM5MjBGMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVU
YWJsZS5jcHAgKi8sCiAJCQkJMEZGQzkyMTAxQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlw
ZVRhYmxlLmggKi8sCiAJCQkJMEZGOEJERTgxQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVkVmFs
dWUuY3BwICovLApAQCAtNzk5Nyw2ICs4MDExLDcgQEAKIAkJCQkwRkVDODU3MjFCREFDREM3MDA4
MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQzYzQkMxRTYz
NDQwQzAwQzEzODM5IC8qIEFpckJsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkIzODc4RTFCRkJDNDREMDBFM0FCMUUgLyogQWlyQmxvY2tXb3JrbGlzdC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZCNDY3ODExRkREQTZGNzAwM0ZDQjA5IC8qIElzb0NlbGxTZXRJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc5QzdDQTFFNzRDOTNCMDBFQjM0RDEgLyogQWlyQnJl
YWtDcml0aWNhbEVkZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYxODMyQTFDNDVCRjA3MDA3
MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVD
ODU3NDFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggaW4gSGVhZGVycyAqLywK
QEAgLTg3NzgsNiArODc5Myw3IEBACiAJCQkJNzAxMTNENEMxQThEQjA5MzAwMzg0OEM0IC8qIEl0
ZXJhdG9yT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzBEQzNFMEExQjJERjJDNzAw
MDU0Mjk5IC8qIEl0ZXJhdG9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQx
MzBFMTZGNUNEMDBCMzQ0NjAgLyogSmF2YVNjcmlwdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZC
NDY3ODUxRkRGQjQ1NDAwM0ZDQjA5IC8qIEluZmVycmVkVHlwZUlubGluZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE1MDNGQTFBMTg4RTBGQjAwMDExMEYxNCAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1l
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNDBFMTZGNUNEMDBCMzQ0NjAgLyogSmF2YVNj
cmlwdENvcmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDE1MEUxNkY1Q0QwMEIzNDQ2MCAv
KiBKYXZhU2NyaXB0Q29yZVByZWZpeC5oIGluIEhlYWRlcnMgKi8sCkBAIC04OTczLDYgKzg5ODks
NyBAQAogCQkJCUFEMkZDQkU1MURCNThEQUQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUFERTgwMjk5MUUwOEYxREUwMDU4REU3OCAvKiBKU1dl
YkFzc2VtYmx5TGlua0Vycm9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JFNzFEQjU4REFE
MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseU1lbW9yeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZC
NDY3N0YxRkREQTZFOTAwM0ZDQjA5IC8qIEF0b21JbmRpY2VzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBRDJGQ0MwNTFEQjU4REFEMDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseU1vZHVsZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQUQyRkNCRTkxREI1OERBRDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlS
dW50aW1lRXJyb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQkVCMURCNThEQUQwMEIzRTcz
NiAvKiBKU1dlYkFzc2VtYmx5VGFibGUuaCBpbiBIZWFkZXJzICovLApAQCAtOTI1OSw2ICs5Mjc2
LDcgQEAKIAkJCQlDMjBCQTkyRDE2QkIxQzE1MDBCM0FFQTIgLyogU3RydWN0dXJlUmFyZURhdGFJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkzMzJBNTE0Q0E3REREMDA4NUYzQzYgLyog
U3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc2NkQzOTE1QUU0QTFGMDA4RjM2
M0UgLyogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEZCNDY3ODAxRkREQTZGMTAwM0ZDQjA5IC8qIElzb0NlbGxTZXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDQ0YwRDA4MEVGMEFBQjkwMDQxM0M4RiAvKiBTdHJ1Y3R1cmVTdHViSW5mby5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkM5MDQxNDgwRUI5MjUwOTAwRkUyNkZBIC8qIFN0cnVjdHVyZVRy
YW5zaXRpb25UYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3REYxMzcxRTI5NzBFMTAwOTU5
NTFCIC8qIFN1YnNwYWNlLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0F0b21JbmRpY2VzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQXRvbUluZGljZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9BdG9tSW5kaWNlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsKKworc3Ry
dWN0IEF0b21JbmRpY2VzIHsKKyAgICBBdG9tSW5kaWNlcygpIHsgfQorICAgIAorICAgIEF0b21J
bmRpY2VzKEhlYXBDZWxsKiBjZWxsKQorICAgICAgICA6IGJsb2NrKE1hcmtlZEJsb2NrOjpibG9j
a0ZvcihjZWxsKSkKKyAgICAgICAgLCBibG9ja0luZGV4KGJsb2NrLT5oYW5kbGUoKS5pbmRleCgp
KQorICAgICAgICAsIGF0b21OdW1iZXIoYmxvY2stPmF0b21OdW1iZXIoY2VsbCkpCisgICAgewor
ICAgIH0KKyAgICAKKyAgICBNYXJrZWRCbG9jayogYmxvY2s7CisgICAgc2l6ZV90IGJsb2NrSW5k
ZXg7CisgICAgc2l6ZV90IGF0b21OdW1iZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIyNTc3MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MCw4ICs0MCw5IEBACiAjaW5jbHVkZSAiSGVhcFNuYXBzaG90LmgiCiAjaW5jbHVkZSAiSGVhcFZl
cmlmaWVyLmgiCiAjaW5jbHVkZSAiSW5jcmVtZW50YWxTd2VlcGVyLmgiCi0jaW5jbHVkZSAiSW5m
ZXJyZWRTdHJ1Y3R1cmUuaCIKKyNpbmNsdWRlICJJbmZlcnJlZFR5cGVJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiSW50ZXJwcmV0ZXIuaCIKKyNpbmNsdWRlICJJc29DZWxsU2V0SW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkpJVFN0dWJSb3V0aW5lU2V0LmgiCiAjaW5jbHVkZSAiSklUV29ya2xpc3QuaCIKICNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCkBAIC01NTIsMTggKzU1MywxOCBAQCB2b2lkIEhlYXA6OmFk
ZFJlZmVyZW5jZShKU0NlbGwqIGNlbGwsIEFyCiAgICAgfQogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBDZWxsVHlwZT4KLXZvaWQgSGVhcDo6ZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycyhT
dWJzcGFjZSYgc3Vic3BhY2UpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgdHlwZW5hbWUg
Q2VsbFNldD4KK3ZvaWQgSGVhcDo6ZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycyhDZWxs
U2V0JiBjZWxsU2V0KQogewotICAgIHN1YnNwYWNlLmZvckVhY2hNYXJrZWRDZWxsKAorICAgIGNl
bGxTZXQuZm9yRWFjaE1hcmtlZENlbGwoCiAgICAgICAgIFsmXSAoSGVhcENlbGwqIGNlbGwsIEhl
YXBDZWxsOjpLaW5kKSB7Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxDZWxsVHlwZSo+KGNlbGwp
LT5maW5hbGl6ZVVuY29uZGl0aW9uYWxseSgqdm0oKSk7CisgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Q2VsbFR5cGUqPihjZWxsKS0+ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKnZtKCkp
OwogICAgICAgICB9KTsKIH0KIAogdm9pZCBIZWFwOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5h
bGl6ZXJzKCkKIHsKLSAgICBmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzPEluZmVycmVk
U3RydWN0dXJlPih2bSgpLT5pbmZlcnJlZFN0cnVjdHVyZVNwYWNlKTsKKyAgICBmaW5hbGl6ZVVu
Y29uZGl0aW9uYWxGaW5hbGl6ZXJzPEluZmVycmVkVHlwZT4odm0oKS0+aW5mZXJyZWRUeXBlc1dp
dGhGaW5hbGl6ZXJzKTsKICAgICAKICAgICB3aGlsZSAobV91bmNvbmRpdGlvbmFsRmluYWxpemVy
cy5oYXNOZXh0KCkpIHsKICAgICAgICAgVW5jb25kaXRpb25hbEZpbmFsaXplciogZmluYWxpemVy
ID0gbV91bmNvbmRpdGlvbmFsRmluYWxpemVycy5yZW1vdmVOZXh0KCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyMjU3NzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5Niw4ICs0OTYsOCBAQCBwcml2
YXRlOgogICAgIHZvaWQgbm90aWZ5SW5jcmVtZW50YWxTd2VlcGVyKCk7CiAgICAgdm9pZCBoYXJ2
ZXN0V2Vha1JlZmVyZW5jZXMoKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlPgot
ICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycyhTdWJzcGFjZSYpOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCB0eXBlbmFtZSBDZWxsU2V0PgorICAgIHZvaWQg
ZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycyhDZWxsU2V0Jik7CiAgICAgCiAgICAgdm9p
ZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKCk7CiAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSXNvQ2VsbFNldC5oIgorCisjaW5j
bHVkZSAiTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5s
aW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworSXNvQ2VsbFNldDo6SXNvQ2VsbFNldChJc29T
dWJzcGFjZSYgc3Vic3BhY2UpCisgICAgOiBtX3N1YnNwYWNlKHN1YnNwYWNlKQoreworICAgIHNp
emVfdCBzaXplID0gc3Vic3BhY2UubV9hbGxvY2F0b3IubV9ibG9ja3Muc2l6ZSgpOworICAgIG1f
YmxvY2tzV2l0aEJpdHMucmVzaXplKHNpemUpOworICAgIG1fYml0cy5ncm93KHNpemUpOworICAg
IHN1YnNwYWNlLm1fY2VsbFNldHMuYXBwZW5kKHRoaXMpOworfQorCitJc29DZWxsU2V0Ojp+SXNv
Q2VsbFNldCgpCit7CisgICAgaWYgKGlzT25MaXN0KCkpCisgICAgICAgIEJhc2ljUmF3U2VudGlu
ZWxOb2RlPElzb0NlbGxTZXQ+OjpyZW1vdmUoKTsKK30KKworTkVWRVJfSU5MSU5FIEJpdG1hcDxN
YXJrZWRCbG9jazo6YXRvbXNQZXJCbG9jaz4qIElzb0NlbGxTZXQ6OmFkZFNsb3coc2l6ZV90IGJs
b2NrSW5kZXgpCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3N1YnNwYWNlLm1fYWxs
b2NhdG9yLm1fYml0dmVjdG9yTG9jayk7CisgICAgYXV0byYgYml0c1B0clJlZiA9IG1fYml0c1ti
bG9ja0luZGV4XTsKKyAgICBhdXRvKiBiaXRzID0gYml0c1B0clJlZi5nZXQoKTsKKyAgICBpZiAo
IWJpdHMpIHsKKyAgICAgICAgYml0c1B0clJlZiA9IHN0ZDo6bWFrZV91bmlxdWU8Qml0bWFwPE1h
cmtlZEJsb2NrOjphdG9tc1BlckJsb2NrPj4oKTsKKyAgICAgICAgYml0cyA9IGJpdHNQdHJSZWYu
Z2V0KCk7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgIG1fYmxvY2tz
V2l0aEJpdHNbYmxvY2tJbmRleF0gPSB0cnVlOworICAgIH0KKyAgICByZXR1cm4gYml0czsKK30K
Kwordm9pZCBJc29DZWxsU2V0OjpkaWRSZXNpemVCaXRzKHNpemVfdCBuZXdTaXplKQoreworICAg
IG1fYmxvY2tzV2l0aEJpdHMucmVzaXplKG5ld1NpemUpOworICAgIG1fYml0cy5ncm93KG5ld1Np
emUpOworfQorCit2b2lkIElzb0NlbGxTZXQ6OmRpZFJlbW92ZUJsb2NrKHNpemVfdCBibG9ja0lu
ZGV4KQoreworICAgIG1fYmxvY2tzV2l0aEJpdHNbYmxvY2tJbmRleF0gPSBmYWxzZTsKKyAgICBt
X2JpdHNbYmxvY2tJbmRleF0gPSBudWxscHRyOworfQorCit2b2lkIElzb0NlbGxTZXQ6OnN3ZWVw
VG9GcmVlTGlzdChNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jaykKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVCghYmxvY2stPmlzQWxsb2NhdGVkKCkpOworICAgIAorICAgIGlmICghbV9ibG9ja3NXaXRo
Qml0c1tibG9jay0+aW5kZXgoKV0pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBXVEY6Omxv
YWRMb2FkRmVuY2UoKTsKKyAgICAKKyAgICBpZiAoIW1fYml0c1tibG9jay0+aW5kZXgoKV0pIHsK
KyAgICAgICAgZGF0YUxvZygiRkFUQUw6IGZvciBibG9jayBpbmRleCAiLCBibG9jay0+aW5kZXgo
KSwgIjpcbiIpOworICAgICAgICBkYXRhTG9nKCJCbG9ja3Mgd2l0aCBiaXRzIHNheXM6ICIsICEh
bV9ibG9ja3NXaXRoQml0c1tibG9jay0+aW5kZXgoKV0sICJcbiIpOworICAgICAgICBkYXRhTG9n
KCJCaXRzIHNheXM6ICIsIFJhd1BvaW50ZXIobV9iaXRzW2Jsb2NrLT5pbmRleCgpXS5nZXQoKSks
ICJcbiIpOworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAg
ICAKKyAgICBpZiAoYmxvY2stPmhhc0FueU5ld2x5QWxsb2NhdGVkKCkpIHsKKyAgICAgICAgbV9i
aXRzW2Jsb2NrLT5pbmRleCgpXS0+ZmlsdGVyKGJsb2NrLT5uZXdseUFsbG9jYXRlZCgpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChibG9jay0+aXNFbXB0eSgpIHx8IGJsb2Nr
LT5hcmVNYXJrc1N0YWxlKCkpIHsKKyAgICAgICAgbV9ibG9ja3NXaXRoQml0c1tibG9jay0+aW5k
ZXgoKV0gPSBmYWxzZTsKKyAgICAgICAgbV9iaXRzW2Jsb2NrLT5pbmRleCgpXSA9IG51bGxwdHI7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9iaXRzW2Jsb2NrLT5pbmRleCgp
XS0+ZmlsdGVyKGJsb2NrLT5ibG9jaygpLm1hcmtzKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXQuaAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4K
KyNpbmNsdWRlIDx3dGYvQ29uY3VycmVudFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0Qml0
VmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBIZWFwQ2VsbDsKK2NsYXNzIElz
b1N1YnNwYWNlOworCisvLyBDcmVhdGUgYSBzZXQgb2YgY2VsbHMgdGhhdCBhcmUgaW4gYW4gSXNv
U3Vic3BhY2UuIFRoaXMgYWxsb3dzIGNvbmN1cnJlbnQgTygxKSBzZXQgaW5zZXJ0aW9uIGFuZAor
Ly8gcmVtb3ZhbC4gRWFjaCBzdWNoIHNldCBzaG91bGQgYmUgdGhvdWdodCBvZiBhcyBhIDAuOCUg
aW5jcmVhc2UgaW4gb2JqZWN0IHNpemUgZm9yIG9iamVjdHMgaW4gdGhhdAorLy8gSXNvU3Vic3Bh
Y2UgKGl0J3MgbGlrZSBhZGRpbmcgMSBiaXQgZXZlcnkgMTYgYnl0ZXMsIG9yIDEgYml0IGV2ZXJ5
IDEyOCBiaXRzKS4KK2NsYXNzIElzb0NlbGxTZXQgOiBwdWJsaWMgQmFzaWNSYXdTZW50aW5lbE5v
ZGU8SXNvQ2VsbFNldD4geworcHVibGljOgorICAgIElzb0NlbGxTZXQoSXNvU3Vic3BhY2UmIHN1
YnNwYWNlKTsKKyAgICB+SXNvQ2VsbFNldCgpOworICAgIAorICAgIGJvb2wgYWRkKEhlYXBDZWxs
KiBjZWxsKTsKKyAgICAKKyAgICBib29sIHJlbW92ZShIZWFwQ2VsbCogY2VsbCk7CisgICAgCisg
ICAgYm9vbCBjb250YWlucyhIZWFwQ2VsbCogY2VsbCkgY29uc3Q7CisgICAgCisgICAgLy8gVGhp
cyB3aWxsIGhhdmUgdG8gZG8gYSBjb21iaW5lZCBzZWFyY2ggb3ZlciB3aGF0ZXZlciBTdWJzcGFj
ZTo6Zm9yRWFjaE1hcmtlZENlbGwgdXNlcyBhbmQKKyAgICAvLyBvdXIgbV9ibG9ja3NXaXRoQml0
cy4KKyAgICAvLyBOT1RFOiBJdCdzIGlsbGVnYWwgdG8gY2FsbCBhZGQoKSBvciByZW1vdmUoKSBj
b25jdXJyZW50bHkgdG8gdGhpcywgYnV0IHNlbGYtcmVtb3ZlKCkgd2lsbCB3b3JrLgorICAgIC8v
IEJ1dCBpdCdzIGJldHRlciBpZiB5b3UgcmV0dXJuIFJlbW92ZSBpbnN0ZWFkLgorICAgIGVudW0g
Y2xhc3MgRm9yRWFjaFJlc3VsdCB7CisgICAgICAgIENvbnRpbnVlLAorICAgICAgICBCcmVhaywK
KyAgICAgICAgUmVtb3ZlQW5kQ29udGludWUsCisgICAgICAgIFJlbW92ZUFuZEJyZWFrCisgICAg
fTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIHZvaWQgZm9yRWFjaE1hcmtlZENl
bGwoY29uc3QgRnVuYyYpOworICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgSXNvU3Vi
c3BhY2U7CisgICAgCisgICAgQml0bWFwPE1hcmtlZEJsb2NrOjphdG9tc1BlckJsb2NrPiogYWRk
U2xvdyhzaXplX3QgYmxvY2tJbmRleCk7CisgICAgCisgICAgdm9pZCBkaWRSZXNpemVCaXRzKHNp
emVfdCBuZXdTaXplKTsKKyAgICB2b2lkIGRpZFJlbW92ZUJsb2NrKHNpemVfdCBibG9ja0luZGV4
KTsKKyAgICB2b2lkIHN3ZWVwVG9GcmVlTGlzdChNYXJrZWRCbG9jazo6SGFuZGxlKik7CisgICAg
CisgICAgSXNvU3Vic3BhY2UmIG1fc3Vic3BhY2U7CisgICAgCisgICAgLy8gSWRlYTogc3dlZXBp
bmcgdG8gZnJlZS1saXN0IGNsZWFycyBiaXRzIGZvciB0aG9zZSBjZWxscyB0aGF0IHdlcmUgZnJl
ZS1saXN0ZWQuIFRoZSBmaXJzdCB0aW1lCisgICAgLy8gd2UgYWRkIGEgY2VsbCBpbiBhIGJsb2Nr
LCB0aGF0IGJsb2NrIGdldHMgYSBmcmVlLWxpc3QuIFVubGVzcyB3ZSBkbyBzb21ldGhpbmcgdGhh
dCBvYnZpb3VzbHkKKyAgICAvLyBjbGVhcnMgYWxsIGJpdHMgZm9yIGEgYmxvY2ssIHdlIGtlZXAg
aXQgc2V0IGluIGJsb2Nrc1dpdGhCaXRzLgorICAgIAorICAgIEZhc3RCaXRWZWN0b3IgbV9ibG9j
a3NXaXRoQml0czsKKyAgICBDb25jdXJyZW50VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCaXRtYXA8
TWFya2VkQmxvY2s6OmF0b21zUGVyQmxvY2s+Pj4gbV9iaXRzOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXRJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNl
dElubGluZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9J
c29DZWxsU2V0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiQXRvbUluZGljZXMuaCIKKyNpbmNsdWRlICJJc29DZWxsU2V0LmgiCisjaW5j
bHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUg
Ym9vbCBJc29DZWxsU2V0OjphZGQoSGVhcENlbGwqIGNlbGwpCit7CisgICAgQXRvbUluZGljZXMg
YXRvbUluZGljZXMoY2VsbCk7CisgICAgYXV0byYgYml0c1B0clJlZiA9IG1fYml0c1thdG9tSW5k
aWNlcy5ibG9ja0luZGV4XTsKKyAgICBhdXRvKiBiaXRzID0gYml0c1B0clJlZi5nZXQoKTsKKyAg
ICBpZiAoVU5MSUtFTFkoIWJpdHMpKQorICAgICAgICBiaXRzID0gYWRkU2xvdyhhdG9tSW5kaWNl
cy5ibG9ja0luZGV4KTsKKyAgICByZXR1cm4gIWJpdHMtPmNvbmN1cnJlbnRUZXN0QW5kU2V0KGF0
b21JbmRpY2VzLmF0b21OdW1iZXIpOworfQorCitpbmxpbmUgYm9vbCBJc29DZWxsU2V0OjpyZW1v
dmUoSGVhcENlbGwqIGNlbGwpCit7CisgICAgQXRvbUluZGljZXMgYXRvbUluZGljZXMoY2VsbCk7
CisgICAgYXV0byYgYml0c1B0clJlZiA9IG1fYml0c1thdG9tSW5kaWNlcy5ibG9ja0luZGV4XTsK
KyAgICBhdXRvKiBiaXRzID0gYml0c1B0clJlZi5nZXQoKTsKKyAgICBpZiAoIWJpdHMpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gYml0cy0+Y29uY3VycmVudFRlc3RBbmRDbGVh
cihhdG9tSW5kaWNlcy5hdG9tTnVtYmVyKTsKK30KKworaW5saW5lIGJvb2wgSXNvQ2VsbFNldDo6
Y29udGFpbnMoSGVhcENlbGwqIGNlbGwpIGNvbnN0Cit7CisgICAgQXRvbUluZGljZXMgYXRvbUlu
ZGljZXMoY2VsbCk7CisgICAgYXV0byogYml0cyA9IG1fYml0c1thdG9tSW5kaWNlcy5ibG9ja0lu
ZGV4XS5nZXQoKTsKKyAgICBpZiAoYml0cykKKyAgICAgICAgcmV0dXJuIGJpdHMtPmdldChhdG9t
SW5kaWNlcy5hdG9tTnVtYmVyKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEZ1bmM+Cit2b2lkIElzb0NlbGxTZXQ6OmZvckVhY2hNYXJrZWRDZWxsKGNvbnN0IEZ1
bmMmIGZ1bmMpCit7CisgICAgTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3IgPSBtX3N1YnNwYWNl
Lm1fYWxsb2NhdG9yOworICAgIChhbGxvY2F0b3IubV9tYXJraW5nTm90RW1wdHkgJiBtX2Jsb2Nr
c1dpdGhCaXRzKS5mb3JFYWNoU2V0Qml0KAorICAgICAgICBbJl0gKHNpemVfdCBibG9ja0luZGV4
KSB7CisgICAgICAgICAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jayA9IGFsbG9jYXRvci5t
X2Jsb2Nrc1tibG9ja0luZGV4XTsKKworICAgICAgICAgICAgYXV0byogYml0cyA9IG1fYml0c1ti
bG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIGJvb2wgaGFkQml0cyA9IGZhbHNlOworICAg
ICAgICAgICAgYmxvY2stPmZvckVhY2hNYXJrZWRDZWxsKAorICAgICAgICAgICAgICAgIFsmXSAo
c2l6ZV90IGF0b21OdW1iZXIsIEhlYXBDZWxsKiBjZWxsLCBIZWFwQ2VsbDo6S2luZCBraW5kKSAt
PiBJdGVyYXRpb25TdGF0dXMgeworICAgICAgICAgICAgICAgICAgICBpZiAoYml0cy0+Z2V0KGF0
b21OdW1iZXIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBGb3JFYWNoUmVzdWx0IHJlc3Vs
dCA9IGZ1bmMoY2VsbCwga2luZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJl
c3VsdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBGb3JFYWNoUmVzdWx0OjpDb250
aW51ZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRm9yRWFjaFJlc3VsdDo6QnJlYWs6
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFkQml0cyA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEZv
ckVhY2hSZXN1bHQ6OlJlbW92ZUFuZENvbnRpbnVlOgorICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSBGb3JFYWNoUmVzdWx0OjpSZW1vdmVBbmRCcmVhazoKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBiaXRzLT5jbGVhcihhdG9tTnVtYmVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIHN3aXRjaCAocmVzdWx0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEZv
ckVhY2hSZXN1bHQ6OkNvbnRpbnVlOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBGb3JF
YWNoUmVzdWx0OjpSZW1vdmVBbmRDb250aW51ZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRm9yRWFjaFJlc3VsdDo6QnJl
YWs6CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEZvckVhY2hSZXN1bHQ6OlJlbW92ZUFu
ZEJyZWFrOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0
dXM6OkRvbmU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7
CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpZiAoIWhhZEJpdHMpIHsKKyAgICAg
ICAgICAgICAgICBtX2JpdHNbYmxvY2tJbmRleF0gPSBudWxscHRyOworICAgICAgICAgICAgICAg
IG1fYmxvY2tzV2l0aEJpdHNbYmxvY2tJbmRleF0gPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMjU3NzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY3LDUgKzY3LDI5IEBAIHZvaWQqIElzb1N1YnNwYWNlOjphbGxvY2F0ZU5vblZpcnR1YWwoc2kK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCit2b2lkIElzb1N1YnNwYWNlOjpkaWRSZXNpemVCaXRz
KHNpemVfdCBibG9ja0luZGV4KQoreworICAgIG1fY2VsbFNldHMuZm9yRWFjaCgKKyAgICAgICAg
WyZdIChJc29DZWxsU2V0KiBzZXQpIHsKKyAgICAgICAgICAgIHNldC0+ZGlkUmVzaXplQml0cyhi
bG9ja0luZGV4KTsKKyAgICAgICAgfSk7Cit9CisKK3ZvaWQgSXNvU3Vic3BhY2U6OmRpZFJlbW92
ZUJsb2NrKHNpemVfdCBibG9ja0luZGV4KQoreworICAgIG1fY2VsbFNldHMuZm9yRWFjaCgKKyAg
ICAgICAgWyZdIChJc29DZWxsU2V0KiBzZXQpIHsKKyAgICAgICAgICAgIHNldC0+ZGlkUmVtb3Zl
QmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgIH0pOworfQorCit2b2lkIElzb1N1YnNwYWNlOjpk
aWRCZWdpblN3ZWVwaW5nVG9GcmVlTGlzdChNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jaykKK3sK
KyAgICBtX2NlbGxTZXRzLmZvckVhY2goCisgICAgICAgIFsmXSAoSXNvQ2VsbFNldCogc2V0KSB7
CisgICAgICAgICAgICBzZXQtPnN3ZWVwVG9GcmVlTGlzdChibG9jayk7CisgICAgICAgIH0pOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSXNvU3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Jc29TdWJzcGFjZS5oCShyZXZpc2lvbiAyMjU3NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Jc29TdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMCArMjcsMTIgQEAK
IAogI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlN1YnNwYWNlLmgiCisj
aW5jbHVkZSA8d3RmL1NpbmdseUxpbmtlZExpc3RXaXRoVGFpbC5oPgogCiBuYW1lc3BhY2UgSlND
IHsKIAogY2xhc3MgSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsKK2NsYXNzIElzb0NlbGxTZXQ7
CiAKIGNsYXNzIElzb1N1YnNwYWNlIDogcHVibGljIFN1YnNwYWNlIHsKIHB1YmxpYzoKQEAgLTQ2
LDkgKzQ4LDE2IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0
ZU5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRl
eHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSk7CiAKIHByaXZhdGU6CisgICAg
ZnJpZW5kIGNsYXNzIElzb0NlbGxTZXQ7CisgICAgCisgICAgdm9pZCBkaWRSZXNpemVCaXRzKHNp
emVfdCBuZXdTaXplKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZFJlbW92ZUJsb2NrKHNpemVfdCBi
bG9ja0luZGV4KSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZEJlZ2luU3dlZXBpbmdUb0ZyZWVMaXN0
KE1hcmtlZEJsb2NrOjpIYW5kbGUqKSBvdmVycmlkZTsKKyAgICAKICAgICBzaXplX3QgbV9zaXpl
OwogICAgIE1hcmtlZEFsbG9jYXRvciBtX2FsbG9jYXRvcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
SXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4gbV9pc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOwor
ICAgIFNlbnRpbmVsTGlua2VkTGlzdDxJc29DZWxsU2V0LCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxJ
c29DZWxsU2V0Pj4gbV9jZWxsU2V0czsKIH07CiAKIGlubGluZSBNYXJrZWRBbGxvY2F0b3IqIElz
b1N1YnNwYWNlOjphbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBBbGxvY2F0b3JG
b3JNb2RlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxv
Y2F0b3IuY3BwCShyZXZpc2lvbiAyMjU3NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsNiArMjYxLDcgQEAg
dm9pZCBNYXJrZWRBbGxvY2F0b3I6OmFkZEJsb2NrKE1hcmtlZEJsbwogICAgICAgICAgICAgQVNT
RVJUKG1fYmxvY2tzLmNhcGFjaXR5KCkgPiBvbGRDYXBhY2l0eSk7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fYml0dmVjdG9yTG9jayk7CisgICAgICAgICAg
ICBzdWJzcGFjZSgpLT5kaWRSZXNpemVCaXRzKG1fYmxvY2tzLmNhcGFjaXR5KCkpOwogICAgICAg
ICAgICAgZm9yRWFjaEJpdFZlY3RvcigKICAgICAgICAgICAgICAgICBsb2NrZXIsCiAgICAgICAg
ICAgICAgICAgWyZdIChGYXN0Qml0VmVjdG9yJiB2ZWN0b3IpIHsKQEAgLTI5MCw3ICsyOTEsOSBA
QCB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6cmVtb3ZlQmxvY2soTWFya2VkCiB7CiAgICAgQVNTRVJU
KGJsb2NrLT5hbGxvY2F0b3IoKSA9PSB0aGlzKTsKICAgICBBU1NFUlQobV9ibG9ja3NbYmxvY2st
PmluZGV4KCldID09IGJsb2NrKTsKLQorICAgIAorICAgIHN1YnNwYWNlKCktPmRpZFJlbW92ZUJs
b2NrKGJsb2NrLT5pbmRleCgpKTsKKyAgICAKICAgICBtX2Jsb2Nrc1tibG9jay0+aW5kZXgoKV0g
PSBudWxscHRyOwogICAgIG1fZnJlZUJsb2NrSW5kaWNlcy5hcHBlbmQoYmxvY2stPmluZGV4KCkp
OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2Nh
dG9yLmgJKHJldmlzaW9uIDIyNTc3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZEFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiBjbGFzcyBHQ0RlZmVycmFsQ29udGV4dDsKIGNsYXNzIEhlYXA7CitjbGFzcyBJ
c29DZWxsU2V0OwogY2xhc3MgTWFya2VkU3BhY2U7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0
b3I7CiAKQEAgLTE2Miw2ICsxNjMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wQml0cyhQcmlu
dFN0cmVhbSYgPSBXVEY6OmRhdGFGaWxlKCkpOwogICAgIAogcHJpdmF0ZToKKyAgICBmcmllbmQg
Y2xhc3MgSXNvQ2VsbFNldDsKICAgICBmcmllbmQgY2xhc3MgTWFya2VkQmxvY2s7CiAgICAgCiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGVTbG93Q2FzZShHQ0RlZmVycmFsQ29u
dGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oCShy
ZXZpc2lvbiAyMjU3NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxv
Y2F0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1
ZGUgIkZyZWVMaXN0SW5saW5lcy5oIgogI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvci5oIgorI2lu
Y2x1ZGUgIlZNLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCShyZXZpc2lvbiAyMjU3NzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMw
MSwxMSArMzAxLDYgQEAgc2l6ZV90IE1hcmtlZEJsb2NrOjptYXJrQ291bnQoKQogICAgIHJldHVy
biBhcmVNYXJrc1N0YWxlKCkgPyAwIDogbV9tYXJrcy5jb3VudCgpOwogfQogCi1ib29sIE1hcmtl
ZEJsb2NrOjpIYW5kbGU6OmlzRW1wdHkoKQotewotICAgIHJldHVybiBtX2FsbG9jYXRvci0+aXNF
bXB0eShOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMpOwotfQotCiB2b2lkIE1hcmtlZEJsb2NrOjpj
bGVhckhhc0FueU1hcmtlZCgpCiB7CiAgICAgbV9iaWFzZWRNYXJrQ291bnQgPSBtX21hcmtDb3Vu
dEJpYXM7CkBAIC00MDMsMTEgKzM5OCwxMyBAQCB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3
ZWVwKEZyZWVMaXN0CiAgICAgICAgIHJldHVybjsKIAogICAgIFJFTEVBU0VfQVNTRVJUKCFtX2lz
RnJlZUxpc3RlZCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIW1fYWxsb2NhdG9yLT5pc0FsbG9jYXRl
ZChOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghaXNBbGxv
Y2F0ZWQoKSk7CiAgICAgCiAgICAgaWYgKHNwYWNlKCktPmlzTWFya2luZygpKQogICAgICAgICBi
bG9jaygpLm1fbG9jay5sb2NrKCk7CiAgICAgCisgICAgc3Vic3BhY2UoKS0+ZGlkQmVnaW5Td2Vl
cGluZ1RvRnJlZUxpc3QodGhpcyk7CisgICAgCiAgICAgaWYgKG5lZWRzRGVzdHJ1Y3Rpb24pIHsK
ICAgICAgICAgc3Vic3BhY2UoKS0+ZmluaXNoU3dlZXAoKnRoaXMsIGZyZWVMaXN0KTsKICAgICAg
ICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5o
CShyZXZpc2lvbiAyMjU3NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRC
bG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjIsNiArMTYyLDggQEAgcHVibGljOgogICAgICAg
ICBzaXplX3QgbWFya0NvdW50KCk7CiAgICAgICAgIHNpemVfdCBzaXplKCk7CiAgICAgICAgIAor
ICAgICAgICBib29sIGlzQWxsb2NhdGVkKCk7CisgICAgICAgIAogICAgICAgICBib29sIGlzTGl2
ZShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgSGVhcFZlcnNpb24gbmV3bHlBbGxvY2F0ZWRW
ZXJzaW9uLCBib29sIGlzTWFya2luZywgY29uc3QgSGVhcENlbGwqKTsKICAgICAgICAgaW5saW5l
IGJvb2wgaXNMaXZlQ2VsbChIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgSGVhcFZlcnNpb24g
bmV3bHlBbGxvY2F0ZWRWZXJzaW9uLCBib29sIGlzTWFya2luZywgY29uc3Qgdm9pZCopOwogCkBA
IC0xNzMsNiArMTc1LDcgQEAgcHVibGljOgogICAgICAgICBib29sIGlzTmV3bHlBbGxvY2F0ZWQo
Y29uc3Qgdm9pZCopOwogICAgICAgICB2b2lkIHNldE5ld2x5QWxsb2NhdGVkKGNvbnN0IHZvaWQq
KTsKICAgICAgICAgdm9pZCBjbGVhck5ld2x5QWxsb2NhdGVkKGNvbnN0IHZvaWQqKTsKKyAgICAg
ICAgY29uc3QgQml0bWFwPGF0b21zUGVyQmxvY2s+JiBuZXdseUFsbG9jYXRlZCgpIGNvbnN0Owog
ICAgICAgICAKICAgICAgICAgSGVhcFZlcnNpb24gbmV3bHlBbGxvY2F0ZWRWZXJzaW9uKCkgY29u
c3QgeyByZXR1cm4gbV9uZXdseUFsbG9jYXRlZFZlcnNpb247IH0KICAgICAgICAgCkBAIC0yMjcs
NyArMjMwLDcgQEAgcHVibGljOgogICAgICAgICBzaXplX3QgbV9hdG9tc1BlckNlbGwgeyBzdGQ6
Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIH07CiAgICAgICAgIHNpemVfdCBtX2VuZEF0
b20geyBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIH07IC8vIFRoaXMgaXMgYSBm
dXp6eSBlbmQuIEFsd2F5cyB0ZXN0IGZvciA8IG1fZW5kQXRvbS4KICAgICAgICAgICAgIAotICAg
ICAgICBXVEY6OkJpdG1hcDxhdG9tc1BlckJsb2NrPiBtX25ld2x5QWxsb2NhdGVkOworICAgICAg
ICBCaXRtYXA8YXRvbXNQZXJCbG9jaz4gbV9uZXdseUFsbG9jYXRlZDsKICAgICAgICAgICAgIAog
ICAgICAgICBBbGxvY2F0b3JBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKICAgICAgICAgYm9vbCBt
X2lzRnJlZUxpc3RlZCB7IGZhbHNlIH07CkBAIC0yOTQsNiArMjk3LDggQEAgcHVibGljOgogICAg
IGJvb2wgaXNNYXJrZWRSYXcoY29uc3Qgdm9pZCogcCk7CiAgICAgSGVhcFZlcnNpb24gbWFya2lu
Z1ZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtX21hcmtpbmdWZXJzaW9uOyB9CiAgICAgCisgICAg
Y29uc3QgQml0bWFwPGF0b21zUGVyQmxvY2s+JiBtYXJrcygpIGNvbnN0OworICAgIAogICAgIENv
dW50aW5nTG9jayYgbG9jaygpIHsgcmV0dXJuIG1fbG9jazsgfQogCiBwcml2YXRlOgpAQCAtMzQ2
LDcgKzM1MSw3IEBAIHByaXZhdGU6CiAKICAgICBIZWFwVmVyc2lvbiBtX21hcmtpbmdWZXJzaW9u
OwogCi0gICAgV1RGOjpCaXRtYXA8YXRvbXNQZXJCbG9jaz4gbV9tYXJrczsKKyAgICBCaXRtYXA8
YXRvbXNQZXJCbG9jaz4gbV9tYXJrczsKIH07CiAKIGlubGluZSBNYXJrZWRCbG9jazo6SGFuZGxl
JiBNYXJrZWRCbG9jazo6aGFuZGxlKCkKQEAgLTUzMiw2ICs1MzcsMTEgQEAgaW5saW5lIGJvb2wg
TWFya2VkQmxvY2s6OnRlc3RBbmRTZXRNYXJrZQogICAgIHJldHVybiBtX21hcmtzLmNvbmN1cnJl
bnRUZXN0QW5kU2V0KGF0b21OdW1iZXIocCksIGRlcGVuZGVuY3kpOwogfQogCitpbmxpbmUgY29u
c3QgQml0bWFwPE1hcmtlZEJsb2NrOjphdG9tc1BlckJsb2NrPiYgTWFya2VkQmxvY2s6Om1hcmtz
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9tYXJrczsKK30KKwogaW5saW5lIGJvb2wgTWFya2Vk
QmxvY2s6OkhhbmRsZTo6aXNOZXdseUFsbG9jYXRlZChjb25zdCB2b2lkKiBwKQogewogICAgIHJl
dHVybiBtX25ld2x5QWxsb2NhdGVkLmdldChtX2Jsb2NrLT5hdG9tTnVtYmVyKHApKTsKQEAgLTU0
Nyw2ICs1NTcsMTEgQEAgaW5saW5lIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6Y2xlYXJOZQog
ICAgIG1fbmV3bHlBbGxvY2F0ZWQuY2xlYXIobV9ibG9jay0+YXRvbU51bWJlcihwKSk7CiB9CiAK
K2lubGluZSBjb25zdCBCaXRtYXA8TWFya2VkQmxvY2s6OmF0b21zUGVyQmxvY2s+JiBNYXJrZWRC
bG9jazo6SGFuZGxlOjpuZXdseUFsbG9jYXRlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbmV3
bHlBbGxvY2F0ZWQ7Cit9CisKIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjppc0F0b20oY29uc3Qg
dm9pZCogcCkKIHsKICAgICBBU1NFUlQoTWFya2VkQmxvY2s6OmlzQXRvbUFsaWduZWQocCkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2tJbmxpbmVz
LmgJKHJldmlzaW9uIDIyNTc3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZEJsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC05MSw2ICs5MSwxMSBAQCBpbmxpbmUg
Ym9vbCBNYXJrZWRCbG9jazo6bWFya3NDb252ZXlMaXZlCiAgICAgICAgIHx8IE1hcmtlZFNwYWNl
OjpuZXh0VmVyc2lvbihteU1hcmtpbmdWZXJzaW9uKSA9PSBtYXJraW5nVmVyc2lvbjsKIH0KIAor
aW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OkhhbmRsZTo6aXNBbGxvY2F0ZWQoKQoreworICAgIHJl
dHVybiBtX2FsbG9jYXRvci0+aXNBbGxvY2F0ZWQoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzKTsK
K30KKwogQUxXQVlTX0lOTElORSBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzTGl2ZShIZWFw
VmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgSGVhcFZlcnNpb24gbmV3bHlBbGxvY2F0ZWRWZXJzaW9u
LCBib29sIGlzTWFya2luZywgY29uc3QgSGVhcENlbGwqIGNlbGwpCiB7CiAgICAgaWYgKGFsbG9j
YXRvcigpLT5pc0FsbG9jYXRlZChOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMpKQpAQCAtNDM0LDYg
KzQzOSwxMSBAQCBpbmxpbmUgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBEZXN0cnVjCiAgICAg
cmV0dXJuIEJsb2NrSGFzTm9EZXN0cnVjdG9yczsKIH0KIAoraW5saW5lIGJvb2wgTWFya2VkQmxv
Y2s6OkhhbmRsZTo6aXNFbXB0eSgpCit7CisgICAgcmV0dXJuIG1fYWxsb2NhdG9yLT5pc0VtcHR5
KE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcyk7Cit9CisKIGlubGluZSBNYXJrZWRCbG9jazo6SGFu
ZGxlOjpFbXB0eU1vZGUgTWFya2VkQmxvY2s6OkhhbmRsZTo6ZW1wdHlNb2RlKCkKIHsKICAgICAv
LyBJdCdzIG5vdCBvYnZpb3VzLCBidXQgdGhpcyBpcyB0aGUgb25seSB3YXkgdG8ga25vdyBpZiB0
aGUgYmxvY2sgaXMgZW1wdHkuIEl0J3MgdGhlIG9ubHkKQEAgLTQ0MSw3ICs0NTEsNyBAQCBpbmxp
bmUgTWFya2VkQmxvY2s6OkhhbmRsZTo6RW1wdHlNb2RlIE1hCiAgICAgLy8gLSBJdCdzIHRydWUg
d2hlbiB0aGUgYmxvY2sgaXMgZnJlc2hseSBhbGxvY2F0ZWQuCiAgICAgLy8gLSBJdCdzIHRydWUg
aWYgdGhlIGJsb2NrIGhhZCBiZWVuIHN3ZXB0IGluIHRoZSBwYXN0LCBhbGwgZGVzdHJ1Y3RvcnMg
d2VyZSBjYWxsZWQsIGFuZCB0aGF0CiAgICAgLy8gICBzd2VlcCBwcm92ZWQgdGhhdCB0aGUgYmxv
Y2sgaXMgZW1wdHkuCi0gICAgcmV0dXJuIG1fYWxsb2NhdG9yLT5pc0VtcHR5KE5vTG9ja2luZ05l
Y2Vzc2FyeSwgdGhpcykgPyBJc0VtcHR5IDogTm90RW1wdHk7CisgICAgcmV0dXJuIGlzRW1wdHko
KSA/IElzRW1wdHkgOiBOb3RFbXB0eTsKIH0KIAogaW5saW5lIE1hcmtlZEJsb2NrOjpIYW5kbGU6
OlNjcmliYmxlTW9kZSBNYXJrZWRCbG9jazo6SGFuZGxlOjpzY3JpYmJsZU1vZGUoKQpAQCAtNTEy
LDExICs1MjIsMTIgQEAgaW5saW5lIEl0ZXJhdGlvblN0YXR1cyBNYXJrZWRCbG9jazo6SGFuZAog
ICAgIGlmIChhcmVNYXJrc1N0YWxlKQogICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpD
b250aW51ZTsKICAgICBmb3IgKHNpemVfdCBpID0gZmlyc3RBdG9tKCk7IGkgPCBtX2VuZEF0b207
IGkgKz0gbV9hdG9tc1BlckNlbGwpIHsKLSAgICAgICAgSGVhcENlbGwqIGNlbGwgPSByZWludGVy
cHJldF9jYXN0X3B0cjxIZWFwQ2VsbCo+KCZtX2Jsb2NrLT5hdG9tcygpW2ldKTsKLSAgICAgICAg
aWYgKCFibG9jay5pc01hcmtlZFJhdyhjZWxsKSkKKyAgICAgICAgaWYgKCFibG9jay5tX21hcmtz
LmdldChpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChmdW5jdG9yKGNl
bGwsIGtpbmQpID09IEl0ZXJhdGlvblN0YXR1czo6RG9uZSkKKyAgICAgICAgSGVhcENlbGwqIGNl
bGwgPSByZWludGVycHJldF9jYXN0X3B0cjxIZWFwQ2VsbCo+KCZtX2Jsb2NrLT5hdG9tcygpW2ld
KTsKKworICAgICAgICBpZiAoZnVuY3RvcihpLCBjZWxsLCBraW5kKSA9PSBJdGVyYXRpb25TdGF0
dXM6OkRvbmUpCiAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpEb25lOwogICAg
IH0KICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5jcHAJKHJldmlzaW9uIDIyNTc3MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI2
LDUgKzEyNiwxNyBAQCBSZWZQdHI8U2hhcmVkVGFzazxNYXJrZWRCbG9jazo6SGFuZGxlKigpCiAg
ICAgICAgIH0pOwogfQogCit2b2lkIFN1YnNwYWNlOjpkaWRSZXNpemVCaXRzKHNpemVfdCkKK3sK
K30KKwordm9pZCBTdWJzcGFjZTo6ZGlkUmVtb3ZlQmxvY2soc2l6ZV90KQoreworfQorCit2b2lk
IFN1YnNwYWNlOjpkaWRCZWdpblN3ZWVwaW5nVG9GcmVlTGlzdChNYXJrZWRCbG9jazo6SGFuZGxl
KikKK3sKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1N1YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU3Vic3BhY2UuaAkocmV2aXNpb24gMjI1NzcwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtOTMsNiArOTMsMTAgQEAgcHVi
bGljOgogICAgIAogICAgIFN1YnNwYWNlKiBuZXh0U3Vic3BhY2VJbkFsaWduZWRNZW1vcnlBbGxv
Y2F0b3IoKSBjb25zdCB7IHJldHVybiBtX25leHRTdWJzcGFjZUluQWxpZ25lZE1lbW9yeUFsbG9j
YXRvcjsgfQogICAgIHZvaWQgc2V0TmV4dFN1YnNwYWNlSW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9y
KFN1YnNwYWNlKiBzdWJzcGFjZSkgeyBtX25leHRTdWJzcGFjZUluQWxpZ25lZE1lbW9yeUFsbG9j
YXRvciA9IHN1YnNwYWNlOyB9CisgICAgCisgICAgdmlydHVhbCB2b2lkIGRpZFJlc2l6ZUJpdHMo
c2l6ZV90IG5ld1NpemUpOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZW1vdmVCbG9jayhzaXplX3Qg
YmxvY2tJbmRleCk7CisgICAgdmlydHVhbCB2b2lkIGRpZEJlZ2luU3dlZXBpbmdUb0ZyZWVMaXN0
KE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsKIAogcHJvdGVjdGVkOgogICAgIHZvaWQgaW5pdGlhbGl6
ZShIZWFwQ2VsbFR5cGUqLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZUlubGluZXMuaAkocmV2aXNpb24gMjI1Nzcw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTcxLDcgKzcxLDcgQEAgdm9pZCBTdWJzcGFjZTo6Zm9yRWFjaE1hcmtlZENl
bGwoY29uc3QgRgogICAgIGZvckVhY2hOb3RFbXB0eU1hcmtlZEJsb2NrKAogICAgICAgICBbJl0g
KE1hcmtlZEJsb2NrOjpIYW5kbGUqIGhhbmRsZSkgewogICAgICAgICAgICAgaGFuZGxlLT5mb3JF
YWNoTWFya2VkQ2VsbCgKLSAgICAgICAgICAgICAgICBbJl0gKEhlYXBDZWxsKiBjZWxsLCBIZWFw
Q2VsbDo6S2luZCBraW5kKSAtPiBJdGVyYXRpb25TdGF0dXMgeyAKKyAgICAgICAgICAgICAgICBb
Jl0gKHNpemVfdCwgSGVhcENlbGwqIGNlbGwsIEhlYXBDZWxsOjpLaW5kIGtpbmQpIC0+IEl0ZXJh
dGlvblN0YXR1cyB7CiAgICAgICAgICAgICAgICAgICAgIGZ1bmMoY2VsbCwga2luZCk7CiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOwogICAgICAg
ICAgICAgICAgIH0pOwpAQCAtOTksNyArOTksNyBAQCBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFNs
b3RWaXNpdG9yJik+PiBTCiAgICAgICAgIHsKICAgICAgICAgICAgIHdoaWxlIChNYXJrZWRCbG9j
azo6SGFuZGxlKiBoYW5kbGUgPSBtX2Jsb2NrU291cmNlLT5ydW4oKSkgewogICAgICAgICAgICAg
ICAgIGhhbmRsZS0+Zm9yRWFjaE1hcmtlZENlbGwoCi0gICAgICAgICAgICAgICAgICAgIFsmXSAo
SGVhcENlbGwqIGNlbGwsIEhlYXBDZWxsOjpLaW5kIGtpbmQpIC0+IEl0ZXJhdGlvblN0YXR1cyB7
CisgICAgICAgICAgICAgICAgICAgIFsmXSAoc2l6ZV90LCBIZWFwQ2VsbCogY2VsbCwgSGVhcENl
bGw6OktpbmQga2luZCkgLT4gSXRlcmF0aW9uU3RhdHVzIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZnVuYyh2aXNpdG9yLCBjZWxsLCBraW5kKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICB9
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkU3RydWN0dXJl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJl
ZFN0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDIyNTc3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0luZmVycmVkU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNjQg
KzI3LDE3IEBACiAjaW5jbHVkZSAiSW5mZXJyZWRTdHJ1Y3R1cmUuaCIKIAogI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotY29uc3QgQ2xhc3NJbmZvIEluZmVycmVkU3RydWN0dXJlOjpzX2luZm8gPSB7
ICJJbmZlcnJlZFN0cnVjdHVyZSIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9N
RVRIT0RfVEFCTEUoSW5mZXJyZWRTdHJ1Y3R1cmUpIH07Ci0KLUluZmVycmVkU3RydWN0dXJlKiBJ
bmZlcnJlZFN0cnVjdHVyZTo6Y3JlYXRlKFZNJiB2bSwgR0NEZWZlcnJhbENvbnRleHQmIGRlZmVy
cmFsQ29udGV4dCwgSW5mZXJyZWRUeXBlKiBwYXJlbnQsIFN0cnVjdHVyZSogc3RydWN0dXJlKQot
ewotICAgIEluZmVycmVkU3RydWN0dXJlKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxJbmZlcnJlZFN0cnVjdHVyZT4odm0uaGVhcCwgJmRlZmVycmFsQ29udGV4dCkpIEluZmVy
cmVkU3RydWN0dXJlKHZtLCBwYXJlbnQsIHN0cnVjdHVyZSk7Ci0gICAgcmVzdWx0LT5maW5pc2hD
cmVhdGlvbih2bSwgc3RydWN0dXJlKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIElu
ZmVycmVkU3RydWN0dXJlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKLXsKLSAgICBJbmZlcnJlZFN0
cnVjdHVyZSogaW5mZXJyZWRTdHJ1Y3R1cmUgPSBzdGF0aWNfY2FzdDxJbmZlcnJlZFN0cnVjdHVy
ZSo+KGNlbGwpOwotICAgIGluZmVycmVkU3RydWN0dXJlLT5JbmZlcnJlZFN0cnVjdHVyZTo6fklu
ZmVycmVkU3RydWN0dXJlKCk7Ci19Ci0KLVN0cnVjdHVyZSogSW5mZXJyZWRTdHJ1Y3R1cmU6OmNy
ZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgcHJvdG90eXBlKQotewotICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGlu
Zm8oKSk7Ci19Ci0KLXZvaWQgSW5mZXJyZWRTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBJbmZlcnJlZFN0cnVjdHVyZSog
aW5mZXJyZWRTdHJ1Y3R1cmUgPSBqc0Nhc3Q8SW5mZXJyZWRTdHJ1Y3R1cmUqPihjZWxsKTsKLSAg
ICAKLSAgICB2aXNpdG9yLmFwcGVuZChpbmZlcnJlZFN0cnVjdHVyZS0+bV9wYXJlbnQpOwotfQot
Ci12b2lkIEluZmVycmVkU3RydWN0dXJlOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYpCi17
Ci0gICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkKG1fcGFyZW50LmdldCgpKSk7Ci0gICAgCi0gICAg
Ly8gTW9ub3RvbmljaXR5IGVuc3VyZXMgdGhhdCB3ZSBzaG91bGRuJ3Qgc2VlIGEgbmV3IHN0cnVj
dHVyZSB0aGF0IGlzIGRpZmZlcmVudCBmcm9tIHVzLCBidXQgd2UKLSAgICAvLyBjb3VsZCBoYXZl
IGJlZW4gbnVsbGVkLiBXZSBvbmx5IHJlbHkgb24gaXQgYmVpbmcgdGhlIG51bGwgY2FzZSBvbmx5
IGluIGRlYnVnLgotICAgIGlmICh0aGlzID09IG1fcGFyZW50LT5tX3N0cnVjdHVyZS5nZXQoKSkg
ewotICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fc3RydWN0dXJlLmdldCgpKSkKLSAgICAg
ICAgICAgIG1fcGFyZW50LT5yZW1vdmVTdHJ1Y3R1cmUoKTsKLSAgICB9IGVsc2UKLSAgICAgICAg
QVNTRVJUKCFtX3BhcmVudC0+bV9zdHJ1Y3R1cmUpOwotICAgIAotICAgIC8vIFdlJ2xsIGdldCBk
ZWxldGVkIG9uIHRoZSBuZXh0IEdDLiBUaGF0J3MgYSBsaXR0bGUgd2VpcmQsIGJ1dCBub3QgaGFy
bWZ1bCwgc2luY2UgaXQgb25seSBoYXBwZW5zCi0gICAgLy8gd2hlbiB0aGUgSW5mZXJyZWRUeXBl
IHRoYXQgd2Ugd2VyZSBwYWlyZWQgdG8gd291bGQgaGF2ZSBzdXJ2aXZlZC4gSXQganVzdCBtZWFu
cyBhIHRpbnkgbWlzc2VkCi0gICAgLy8gb3Bwb3J0dW5pdHkgZm9yIGhlYXAgc2l6ZSByZWR1Y3Rp
b24uCi19CitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW5mZXJyZWRTdHJ1Y3R1cmUpOwog
CiBJbmZlcnJlZFN0cnVjdHVyZTo6SW5mZXJyZWRTdHJ1Y3R1cmUoVk0mIHZtLCBJbmZlcnJlZFR5
cGUqIHBhcmVudCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgOiBCYXNlKHZtLCB2bS5pbmZl
cnJlZFN0cnVjdHVyZVN0cnVjdHVyZS5nZXQoKSkKLSAgICAsIG1fcGFyZW50KHZtLCB0aGlzLCBw
YXJlbnQpCi0gICAgLCBtX3N0cnVjdHVyZSh2bSwgdGhpcywgc3RydWN0dXJlKQotewotfQotCi12
b2lkIEluZmVycmVkU3RydWN0dXJlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlKQorICAgIDogcGFyZW50KHBhcmVudCkKKyAgICAsIHN0cnVjdHVyZSh2bSwgcGFy
ZW50LCBzdHJ1Y3R1cmUpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIHN0
cnVjdHVyZS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoJm1fd2F0Y2hwb2ludCk7CisgICAgc3Ry
dWN0dXJlLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludCgmd2F0Y2hwb2ludCk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJy
ZWRTdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbmZlcnJlZFN0cnVjdHVyZS5oCShyZXZpc2lvbiAyMjU3NzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFN0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Niw1MSArMjYsMjMgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiSW5mZXJyZWRTdHJ1Y3R1
cmVXYXRjaHBvaW50LmgiCi0jaW5jbHVkZSAiSlNDZWxsLmgiCi0jaW5jbHVkZSAiVk0uaCIKKyNp
bmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CiAKIG5h
bWVzcGFjZSBKU0MgewogCiBjbGFzcyBJbmZlcnJlZFR5cGU7CitjbGFzcyBTdHJ1Y3R1cmU7CiAK
LWNsYXNzIEluZmVycmVkU3RydWN0dXJlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CitjbGFzcyBJ
bmZlcnJlZFN0cnVjdHVyZSBmaW5hbCB7CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbmZl
cnJlZFN0cnVjdHVyZSk7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKLSAgICAK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZT4KLSAgICBzdGF0aWMgSXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAmdm0uaW5mZXJyZWRT
dHJ1Y3R1cmVTcGFjZTsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIEluZmVycmVkU3RydWN0dXJl
KiBjcmVhdGUoVk0mLCBHQ0RlZmVycmFsQ29udGV4dCYsIEluZmVycmVkVHlwZSogcGFyZW50LCBT
dHJ1Y3R1cmUqKTsKLSAgICAKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9u
ID0gdHJ1ZTsKLSAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwotICAgIAotICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IFN0cnVjdHVyZUlzSW1tb3J0YWwg
fCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKLQotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwotICAgIAot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLQot
ICAgIERFQ0xBUkVfSU5GTzsKLSAgICAKLSAgICBJbmZlcnJlZFR5cGUqIHBhcmVudCgpIGNvbnN0
IHsgcmV0dXJuIG1fcGFyZW50LmdldCgpOyB9Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBj
b25zdCB7IHJldHVybiBtX3N0cnVjdHVyZS5nZXQoKTsgfQotICAgIAotICAgIHZvaWQgZmluYWxp
emVVbmNvbmRpdGlvbmFsbHkoVk0mKTsKLQotcHJpdmF0ZToKICAgICBJbmZlcnJlZFN0cnVjdHVy
ZShWTSYsIEluZmVycmVkVHlwZSogcGFyZW50LCBTdHJ1Y3R1cmUqKTsKKworICAgIEluZmVycmVk
VHlwZSogcGFyZW50OworICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZTsKICAg
ICAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgU3RydWN0dXJlKik7Ci0gICAgCi0gICAg
V3JpdGVCYXJyaWVyPEluZmVycmVkVHlwZT4gbV9wYXJlbnQ7Ci0gICAgV3JpdGVCYXJyaWVyPFN0
cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7Ci0gICAgCi0gICAgZnJpZW5kIGNsYXNzIEluZmVycmVkU3Ry
dWN0dXJlV2F0Y2hwb2ludDsKLSAgICBJbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQgbV93YXRj
aHBvaW50OworICAgIEluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludCB3YXRjaHBvaW50OwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAJKHJl
dmlzaW9uIDIyNTc3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVk
U3RydWN0dXJlV2F0Y2hwb2ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEyICszNCwxNCBA
QCB2b2lkIEluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludDo6ZmlyZUluCiB7CiAgICAgSW5mZXJy
ZWRTdHJ1Y3R1cmUqIGluZmVycmVkU3RydWN0dXJlID0KICAgICAgICAgYml0d2lzZV9jYXN0PElu
ZmVycmVkU3RydWN0dXJlKj4oCi0gICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMp
IC0gT0JKRUNUX09GRlNFVE9GKEluZmVycmVkU3RydWN0dXJlLCBtX3dhdGNocG9pbnQpKTsKKyAg
ICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgLSBPQkpFQ1RfT0ZGU0VUT0YoSW5m
ZXJyZWRTdHJ1Y3R1cmUsIHdhdGNocG9pbnQpKTsKIAotICAgIGlmICghaW5mZXJyZWRTdHJ1Y3R1
cmUtPmlzTGl2ZSgpKQorICAgIEluZmVycmVkVHlwZSogaW5mZXJyZWRUeXBlID0gaW5mZXJyZWRT
dHJ1Y3R1cmUtPnBhcmVudDsKKyAgICAKKyAgICBpZiAoIWluZmVycmVkVHlwZS0+aXNMaXZlKCkp
CiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBpbmZlcnJlZFN0cnVjdHVyZS0+bV9wYXJlbnQt
PnJlbW92ZVN0cnVjdHVyZSgpOworICAgIGluZmVycmVkVHlwZS0+cmVtb3ZlU3RydWN0dXJlKCk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW5mZXJyZWRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbmZlcnJlZFR5cGUuY3BwCShyZXZpc2lvbiAyMjU3NzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW5mZXJyZWRU
eXBlLmgiCiAKLSNpbmNsdWRlICJHQ0RlZmVycmFsQ29udGV4dElubGluZXMuaCIKKyNpbmNsdWRl
ICJJc29DZWxsU2V0SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKIAogbmFtZXNw
YWNlIEpTQyB7CkBAIC04Niw3ICs4Niw4IEBAIFN0cnVjdHVyZSogSW5mZXJyZWRUeXBlOjpjcmVh
dGVTdHJ1Y3R1cmUKIHZvaWQgSW5mZXJyZWRUeXBlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSW5mZXJyZWRUeXBlKiBpbmZlcnJlZFR5
cGUgPSBqc0Nhc3Q8SW5mZXJyZWRUeXBlKj4oY2VsbCk7Ci0gICAgdmlzaXRvci5hcHBlbmQoaW5m
ZXJyZWRUeXBlLT5tX3N0cnVjdHVyZSk7CisgICAgaWYgKGluZmVycmVkVHlwZS0+bV9zdHJ1Y3R1
cmUpCisgICAgICAgIHZpc2l0b3Iudm0oKS5pbmZlcnJlZFR5cGVzV2l0aEZpbmFsaXplcnMuYWRk
KGluZmVycmVkVHlwZSk7CiB9CiAKIEluZmVycmVkVHlwZTo6S2luZCBJbmZlcnJlZFR5cGU6Omtp
bmRGb3JGbGFncyhQdXRCeUlkRmxhZ3MgZmxhZ3MpCkBAIC0zOTksNyArNDAwLDYgQEAgYm9vbCBJ
bmZlcnJlZFR5cGU6OndpbGxTdG9yZVZhbHVlU2xvdyhWTQogICAgIERlc2NyaXB0b3IgbXlUeXBl
OwogICAgIGJvb2wgcmVzdWx0OwogICAgIHsKLSAgICAgICAgR0NEZWZlcnJhbENvbnRleHQgZGVm
ZXJyYWxDb250ZXh0KHZtLmhlYXApOwogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2Vy
KG1fbG9jayk7CiAgICAgICAgIG9sZFR5cGUgPSBkZXNjcmlwdG9yKGxvY2tlcik7CiAgICAgICAg
IG15VHlwZSA9IERlc2NyaXB0b3I6OmZvclZhbHVlKHZhbHVlKTsKQEAgLTQwOCw3ICs0MDgsNyBA
QCBib29sIEluZmVycmVkVHlwZTo6d2lsbFN0b3JlVmFsdWVTbG93KFZNCiAgICAgICAgIAogICAg
ICAgICBBU1NFUlQob2xkVHlwZSAhPSBteVR5cGUpOyAvLyBUaGUgdHlwZSBtdXN0IGhhdmUgY2hh
bmdlZCBpZiB3ZSdyZSBvbiB0aGUgc2xvdyBwYXRoLgogCi0gICAgICAgIGJvb2wgc2V0UmVzdWx0
ID0gc2V0KGRlZmVycmFsQ29udGV4dCwgbG9ja2VyLCB2bSwgbXlUeXBlKTsKKyAgICAgICAgYm9v
bCBzZXRSZXN1bHQgPSBzZXQobG9ja2VyLCB2bSwgbXlUeXBlKTsKICAgICAgICAgcmVzdWx0ID0g
a2luZChsb2NrZXIpICE9IFRvcDsKICAgICAgICAgaWYgKCFzZXRSZXN1bHQpCiAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwpAQCAtNDIzLDEwICs0MjMsOSBAQCB2b2lkIEluZmVycmVkVHlwZTo6
bWFrZVRvcFNsb3coVk0mIHZtLCBQCiB7CiAgICAgRGVzY3JpcHRvciBvbGRUeXBlOwogICAgIHsK
LSAgICAgICAgR0NEZWZlcnJhbENvbnRleHQgZGVmZXJyYWxDb250ZXh0KHZtLmhlYXApOwogICAg
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAgIG9sZFR5cGUg
PSBkZXNjcmlwdG9yKGxvY2tlcik7Ci0gICAgICAgIGlmICghc2V0KGRlZmVycmFsQ29udGV4dCwg
bG9ja2VyLCB2bSwgVG9wKSkKKyAgICAgICAgaWYgKCFzZXQobG9ja2VyLCB2bSwgVG9wKSkKICAg
ICAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQzNCwxNCArNDMzLDggQEAgdm9pZCBJbmZl
cnJlZFR5cGU6Om1ha2VUb3BTbG93KFZNJiB2bSwgUAogICAgIG1fd2F0Y2hwb2ludFNldC5maXJl
QWxsKHZtLCBkZXRhaWwpOwogfQogCi1ib29sIEluZmVycmVkVHlwZTo6c2V0KEdDRGVmZXJyYWxD
b250ZXh0JiBkZWZlcnJhbENvbnRleHQsIGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2Vy
LCBWTSYgdm0sIERlc2NyaXB0b3IgbmV3RGVzY3JpcHRvcikKK2Jvb2wgSW5mZXJyZWRUeXBlOjpz
ZXQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgRGVzY3JpcHRvciBu
ZXdEZXNjcmlwdG9yKQogewotICAgIC8vIFdlIHdpbGwgdHJpZ2dlciB3cml0ZSBiYXJyaWVycyB3
aGlsZSBob2xkaW5nIG91ciBsb2NrLiBDdXJyZW50bHksIHdyaXRlIGJhcnJpZXJzIGRvbid0IEdD
LCBidXQgdGhhdAotICAgIC8vIGNvdWxkIGNoYW5nZS4gSWYgaXQgZG9lcywgd2UgZG9uJ3Qgd2Fu
dCB0byBkZWFkbG9jay4gTm90ZSB0aGF0IHdlIGNvdWxkIGhhdmUgdXNlZAotICAgIC8vIEdDU2Fm
ZUNvbmN1cnJlbnRKU0xvY2tlciBpbiB0aGUgY2FsbGVyLCBidXQgdGhlIGNhbGxlciBpcyBvbiBh
IGZhc3QgcGF0aCBzbyBtYXliZSB0aGF0IHdvdWxkbid0IGJlCi0gICAgLy8gYSBnb29kIGlkZWEu
Ci0gICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhlYXApOwotICAgIAogICAgIC8vIEJl
IGRlZmVuc2l2ZTogaWYgd2UncmUgbm90IHJlYWxseSBjaGFuZ2luZyB0aGUgdHlwZSwgdGhlbiB3
ZSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nLgogICAgIGlmIChkZXNjcmlwdG9yKGxvY2tlcikg
PT0gbmV3RGVzY3JpcHRvcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDY5LDE5ICs0NjIs
MTMgQEAgYm9vbCBJbmZlcnJlZFR5cGU6OnNldChHQ0RlZmVycmFsQ29udGV4dAogICAgICAgICBz
aG91bGRGaXJlV2F0Y2hwb2ludFNldCA9IHRydWU7CiAgICAgfQogCi0gICAgLy8gUmVtb3ZlIHRo
ZSBvbGQgSW5mZXJyZWRTdHJ1Y3R1cmUgb2JqZWN0IGlmIHdlIG5vIGxvbmdlciBuZWVkIGl0Lgog
ICAgIGlmICghbmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSkKLSAgICAgICAgbV9zdHJ1Y3R1cmUu
Y2xlYXIoKTsKLQotICAgIC8vIEFkZCBhIG5ldyBJbmZlcnJlZFN0cnVjdHVyZSBvYmplY3QgaWYg
d2UgbmVlZCBvbmUgbm93LgotICAgIGlmIChuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpKSB7Ci0g
ICAgICAgIGlmIChtX3N0cnVjdHVyZSkgewotICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGFncmVl
IG9uIHRoZSBzdHJ1Y3R1cmVzIGlmIHdlIGdldCBoZXJlLgotICAgICAgICAgICAgQVNTRVJUKG5l
d0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkgPT0gbV9zdHJ1Y3R1cmUtPnN0cnVjdHVyZSgpKTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGF1dG8qIHN0cnVjdHVyZSA9IEluZmVycmVkU3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGRlZmVycmFsQ29udGV4dCwgdGhpcywgbmV3RGVzY3JpcHRvci5z
dHJ1Y3R1cmUoKSk7Ci0gICAgICAgICAgICBtX3N0cnVjdHVyZS5zZXQodm0sIHRoaXMsIHN0cnVj
dHVyZSk7Ci0gICAgICAgIH0KKyAgICAgICAgbV9zdHJ1Y3R1cmUgPSBudWxscHRyOworICAgIGVs
c2UgeworICAgICAgICBpZiAobV9zdHJ1Y3R1cmUpCisgICAgICAgICAgICBBU1NFUlQobmV3RGVz
Y3JpcHRvci5zdHJ1Y3R1cmUoKSA9PSBtX3N0cnVjdHVyZS0+c3RydWN0dXJlLmdldCgpKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSBzdGQ6Om1ha2VfdW5pcXVlPElu
ZmVycmVkU3RydWN0dXJlPih2bSwgdGhpcywgbmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSk7CiAg
ICAgfQogCiAgICAgLy8gRmluYWxseSwgc2V0IHRoZSBkZXNjcmlwdG9yIGtpbmQuCkBAIC01MDMs
MTMgKzQ5MCwxMiBAQCB2b2lkIEluZmVycmVkVHlwZTo6cmVtb3ZlU3RydWN0dXJlKCkKICAgICBE
ZXNjcmlwdG9yIG9sZERlc2NyaXB0b3I7CiAgICAgRGVzY3JpcHRvciBuZXdEZXNjcmlwdG9yOwog
ICAgIHsKLSAgICAgICAgR0NEZWZlcnJhbENvbnRleHQgZGVmZXJyYWxDb250ZXh0KHZtLmhlYXAp
OwogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAgIG9s
ZERlc2NyaXB0b3IgPSBkZXNjcmlwdG9yKGxvY2tlcik7CiAgICAgICAgIG5ld0Rlc2NyaXB0b3Ig
PSBvbGREZXNjcmlwdG9yOwogICAgICAgICBuZXdEZXNjcmlwdG9yLnJlbW92ZVN0cnVjdHVyZSgp
OwogICAgICAgICAKLSAgICAgICAgaWYgKCFzZXQoZGVmZXJyYWxDb250ZXh0LCBsb2NrZXIsIHZt
LCBuZXdEZXNjcmlwdG9yKSkKKyAgICAgICAgaWYgKCFzZXQobG9ja2VyLCB2bSwgbmV3RGVzY3Jp
cHRvcikpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC01MTcsNiArNTAzLDIwIEBA
IHZvaWQgSW5mZXJyZWRUeXBlOjpyZW1vdmVTdHJ1Y3R1cmUoKQogICAgIG1fd2F0Y2hwb2ludFNl
dC5maXJlQWxsKHZtLCBkZXRhaWwpOwogfQogCitJc29DZWxsU2V0OjpGb3JFYWNoUmVzdWx0IElu
ZmVycmVkVHlwZTo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mKQoreworICAgIEFTU0VSVChI
ZWFwOjppc01hcmtlZCh0aGlzKSk7CisgICAgCisgICAgaWYgKG1fc3RydWN0dXJlKSB7CisgICAg
ICAgIGlmIChIZWFwOjppc01hcmtlZChtX3N0cnVjdHVyZS0+c3RydWN0dXJlLmdldCgpKSkKKyAg
ICAgICAgICAgIHJldHVybiBJc29DZWxsU2V0OjpGb3JFYWNoUmVzdWx0OjpDb250aW51ZTsKKyAg
ICAgICAgCisgICAgICAgIHJlbW92ZVN0cnVjdHVyZSgpOworICAgIH0KKyAgICAKKyAgICByZXR1
cm4gSXNvQ2VsbFNldDo6Rm9yRWFjaFJlc3VsdDo6UmVtb3ZlQW5kQ29udGludWU7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZS5oCShyZXZpc2lvbiAyMjU3NzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQ29uY3VycmVudEpTTG9jay5oIgogI2lu
Y2x1ZGUgIkluZmVycmVkU3RydWN0dXJlLmgiCisjaW5jbHVkZSAiSXNvQ2VsbFNldC5oIgogI2lu
Y2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIlByb3BlcnR5TmFtZS5oIgogI2luY2x1ZGUgIlB1
dEJ5SWRGbGFncy5oIgpAQCAtMTg1LDcgKzE4Niw3IEBAIHB1YmxpYzoKIAogICAgIERlc2NyaXB0
b3IgZGVzY3JpcHRvck1haW5UaHJlYWQoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIERl
c2NyaXB0b3IobV9raW5kLCBtX3N0cnVjdHVyZSA/IG1fc3RydWN0dXJlLT5zdHJ1Y3R1cmUoKSA6
IG51bGxwdHIpOworICAgICAgICByZXR1cm4gRGVzY3JpcHRvcihtX2tpbmQsIG1fc3RydWN0dXJl
ID8gbV9zdHJ1Y3R1cmUtPnN0cnVjdHVyZS5nZXQoKSA6IG51bGxwdHIpOwogICAgIH0KICAgICAK
ICAgICBEZXNjcmlwdG9yIGRlc2NyaXB0b3IoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikgY29u
c3QKQEAgLTIzMCw3ICsyMzEsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKICAgICAKLSAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KCk7Cisg
ICAgSXNvQ2VsbFNldDo6Rm9yRWFjaFJlc3VsdCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYp
OwogCiBwcml2YXRlOgogICAgIEluZmVycmVkVHlwZShWTSYpOwpAQCAtMjQxLDcgKzI0Miw3IEBA
IHByaXZhdGU6CiAKICAgICAvLyBIZWxwZXIgZm9yIHdpbGxTdG9yZVZhbHVlU2xvdygpIGFuZCBt
YWtlVG9wU2xvdygpLiBUaGlzIHJldHVybnMgdHJ1ZSBpZiB3ZSBzaG91bGQgZmlyZSB0aGUKICAg
ICAvLyB3YXRjaHBvaW50IHNldC4KLSAgICBib29sIHNldChHQ0RlZmVycmFsQ29udGV4dCYsIGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZNJiwgRGVzY3JpcHRvcik7CisgICAgYm9vbCBzZXQo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVk0mLCBEZXNjcmlwdG9yKTsKICAgICAKICAgICB2
b2lkIHJlbW92ZVN0cnVjdHVyZSgpOwogICAgIApAQCAtMjUyLDcgKzI1Myw4IEBAIHByaXZhdGU6
CiAgICAgCiAgICAgS2luZCBtX2tpbmQgeyBCb3R0b20gfTsKIAotICAgIFdyaXRlQmFycmllcjxJ
bmZlcnJlZFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IGJlIFBvaXNvbmVkLgorICAgIHN0ZDo6dW5pcXVlX3B0cjxJbmZlcnJlZFN0cnVjdHVyZT4gbV9z
dHJ1Y3R1cmU7CiAKICAgICAvLyBOT1RFOiBJZiB0aGlzIGlzIGJlaW5nIHdhdGNoZWQsIHdlIHRy
YW5zZm9ybSB0byBUb3AgYmVjYXVzZSB0aGF0IGltcGxpZXMgdGhhdCBpdCB3b3VsZG4ndCBiZQog
ICAgIC8vIHByb2ZpdGFibGUgdG8gd2F0Y2ggaXQgYWdhaW4uIEFsc28sIHRoaXMgc2V0IGlzIGlu
aXRpYWxpemVkIGNsZWFyLCBhbmQgaXMgbmV2ZXIgZXhwb3NlZCB0byB0aGUgREZHCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGVJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlSW5saW5l
cy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVy
cmVkVHlwZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJJbmZlcnJlZFR5cGUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGlu
ZSBJc29DZWxsU2V0OjpGb3JFYWNoUmVzdWx0IEluZmVycmVkVHlwZTo6ZmluYWxpemVVbmNvbmRp
dGlvbmFsbHkoVk0mKQoreworICAgIEFTU0VSVChIZWFwOjppc01hcmtlZCh0aGlzKSk7CisgICAg
CisgICAgaWYgKG1fc3RydWN0dXJlKSB7CisgICAgICAgIGlmIChIZWFwOjppc01hcmtlZChtX3N0
cnVjdHVyZS0+c3RydWN0dXJlLmdldCgpKSkKKyAgICAgICAgICAgIHJldHVybiBJc29DZWxsU2V0
OjpGb3JFYWNoUmVzdWx0OjpDb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIHJlbW92ZVN0cnVj
dHVyZSgpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gSXNvQ2VsbFNldDo6Rm9yRWFjaFJlc3Vs
dDo6UmVtb3ZlQW5kQ29udGludWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAyMjU3NzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNSwx
MSArMjA1LDExIEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAg
ICAsIGRpcmVjdEV2YWxFeGVjdXRhYmxlU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgZGVz
dHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgRGlyZWN0RXZhbEV4ZWN1dGFibGUpCiAg
ICAgLCBmdW5jdGlvbkV4ZWN1dGFibGVTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBkZXN0
cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLmdldCgpLCBGdW5jdGlvbkV4ZWN1dGFibGUpCiAgICAg
LCBpbmRpcmVjdEV2YWxFeGVjdXRhYmxlU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgZGVz
dHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgSW5kaXJlY3RFdmFsRXhlY3V0YWJsZSkK
LSAgICAsIGluZmVycmVkU3RydWN0dXJlU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgZGVz
dHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgSW5mZXJyZWRTdHJ1Y3R1cmUpCiAgICAg
LCBpbmZlcnJlZFR5cGVTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBkZXN0cnVjdGlibGVD
ZWxsSGVhcENlbGxUeXBlLmdldCgpLCBJbmZlcnJlZFR5cGUpCiAgICAgLCBtb2R1bGVQcm9ncmFt
RXhlY3V0YWJsZVNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGRlc3RydWN0aWJsZUNlbGxI
ZWFwQ2VsbFR5cGUuZ2V0KCksIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKQogICAgICwgbmF0aXZl
RXhlY3V0YWJsZVNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGRlc3RydWN0aWJsZUNlbGxI
ZWFwQ2VsbFR5cGUuZ2V0KCksIE5hdGl2ZUV4ZWN1dGFibGUpCiAgICAgLCBwcm9ncmFtRXhlY3V0
YWJsZVNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2Vs
bFR5cGUuZ2V0KCksIFByb2dyYW1FeGVjdXRhYmxlKQorICAgICwgaW5mZXJyZWRUeXBlc1dpdGhG
aW5hbGl6ZXJzKGluZmVycmVkVHlwZVNwYWNlKQogICAgICwgdm1UeXBlKHZtVHlwZSkKICAgICAs
IGNsaWVudERhdGEoMCkKICAgICAsIHRvcEVudHJ5RnJhbWUobnVsbHB0cikKQEAgLTI5Miw3ICsy
OTIsNiBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgdW5s
aW5rZWRGdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZS5zZXQoKnRoaXMsIFVubGlua2VkRnVuY3Rp
b25Db2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICB1
bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBVbmxpbmtl
ZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxs
KCkpKTsKICAgICBwcm9wZXJ0eVRhYmxlU3RydWN0dXJlLnNldCgqdGhpcywgUHJvcGVydHlUYWJs
ZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwotICAgIGluZmVycmVkU3Ry
dWN0dXJlU3RydWN0dXJlLnNldCgqdGhpcywgSW5mZXJyZWRTdHJ1Y3R1cmU6OmNyZWF0ZVN0cnVj
dHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBpbmZlcnJlZFR5cGVTdHJ1Y3R1cmUuc2V0
KCp0aGlzLCBJbmZlcnJlZFR5cGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkp
KTsKICAgICBpbmZlcnJlZFR5cGVUYWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEluZmVycmVkVHlw
ZVRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgaW5mZXJy
ZWRWYWx1ZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEluZmVycmVkVmFsdWU6OmNyZWF0ZVN0cnVjdHVy
ZSgqdGhpcywgMCwganNOdWxsKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aAkocmV2aXNpb24gMjI1NzcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkZ1bmN0aW9uSGFz
RXhlY3V0ZWRDYWNoZS5oIgogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJJbnRyaW5zaWMu
aCIKKyNpbmNsdWRlICJJc29DZWxsU2V0LmgiCiAjaW5jbHVkZSAiSXNvU3Vic3BhY2UuaCIKICNp
bmNsdWRlICJKSVRUaHVua3MuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCkBAIC0zNDAsMTEg
KzM0MSwxMiBAQCBwdWJsaWM6CiAgICAgSXNvU3Vic3BhY2UgZGlyZWN0RXZhbEV4ZWN1dGFibGVT
cGFjZTsKICAgICBJc29TdWJzcGFjZSBmdW5jdGlvbkV4ZWN1dGFibGVTcGFjZTsKICAgICBJc29T
dWJzcGFjZSBpbmRpcmVjdEV2YWxFeGVjdXRhYmxlU3BhY2U7Ci0gICAgSXNvU3Vic3BhY2UgaW5m
ZXJyZWRTdHJ1Y3R1cmVTcGFjZTsKICAgICBJc29TdWJzcGFjZSBpbmZlcnJlZFR5cGVTcGFjZTsK
ICAgICBJc29TdWJzcGFjZSBtb2R1bGVQcm9ncmFtRXhlY3V0YWJsZVNwYWNlOwogICAgIElzb1N1
YnNwYWNlIG5hdGl2ZUV4ZWN1dGFibGVTcGFjZTsKICAgICBJc29TdWJzcGFjZSBwcm9ncmFtRXhl
Y3V0YWJsZVNwYWNlOworICAgIAorICAgIElzb0NlbGxTZXQgaW5mZXJyZWRUeXBlc1dpdGhGaW5h
bGl6ZXJzOwogCiAgICAgVk1UeXBlIHZtVHlwZTsKICAgICBDbGllbnREYXRhKiBjbGllbnREYXRh
OwpAQCAtMzkyLDcgKzM5NCw2IEBAIHB1YmxpYzoKICAgICBTdHJvbmc8U3RydWN0dXJlPiB1bmxp
bmtlZEZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHVu
bGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0
dXJlPiBwcm9wZXJ0eVRhYmxlU3RydWN0dXJlOwotICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGluZmVy
cmVkU3RydWN0dXJlU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGluZmVycmVkVHlw
ZVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBpbmZlcnJlZFR5cGVUYWJsZVN0cnVj
dHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBpbmZlcnJlZFZhbHVlU3RydWN0dXJlOwpJbmRl
eDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VM
b2cJKHJldmlzaW9uIDIyNTc3MCkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsNjcgQEAKKzIwMTctMTItMTEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFw
cGxlLmNvbT4KKworICAgICAgICBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8gZmxhZyBhIGNlbGwg
Zm9yIHVuY29uZGl0aW9uYWwgZmluYWxpemF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODA2MzYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgYWRkcyBDb25jdXJyZW50VmVjdG9y
LCB3aGljaCBpcyBsaWtlIFNlZ21lbnRlZFZlY3RvciwgYnV0IHdhc3RlcyBzb21lIHNwYWNlIHRv
IGFsbG93CisgICAgICAgIHJlc2l6aW5nIHRvIHByb2NlZWQgY29uY3VycmVudGx5IHRvIGFjY2Vz
cy4gSXQncyBub3QgcG9zc2libGUgdG8gcmVzaXplIGNvbmN1cnJlbnRseSB0bworICAgICAgICBy
ZXNpemluZywgY29uY3VycmVudCByZWFkL3dyaXRlcyBhcmVuJ3QgcHJvdGVjdGVkIGZyb20gcmFj
aW5nIGlmIHRoZXkgYWNjZXNzIHRoZSBzYW1lIGVsZW1lbnQsCisgICAgICAgIGFuZCB3aG8ga25v
d3Mgd2hhdCB5b3UnbGwgZ2V0IGlmIHlvdSBpdGVyYXRlIHVwIHRvIHNpemUoKSB3aGlsZSBzb21l
b25lIGVsc2UgYXBwZW5kKClzLiBUaGUKKyAgICAgICAga2V5IGluc2lnaHQgaXMgdG8gc3Rhc2gg
YWxsIHByaW9yIGNvcGllcyBvZiB0aGUgc3BpbmUsIHNvIHRoYXQgbm9ib2R5IGNyYXNoZXMgdHJ5
aW5nIHRvIGFjY2VzcworICAgICAgICBhIHN0YWxlIHNwaW5lLgorICAgICAgICAKKyAgICAgICAg
SSdtIGdvaW5nIHRvIHdhbnQgdG8gZG8gdGhlIHNhbWUgdGhpbmcgZm9yIEZhc3RCaXRWZWN0b3Is
IGJ5IGNyZWF0aW5nIGEgc2VnbWVudGVkIFdvcmRPd25lcgorICAgICAgICBjbGFzcy4gVGhhdCB3
b3VsZCByZXF1aXJlIHJlcGVhdGluZyB0aGUgZGFuY2Ugb2YgaGF2aW5nIGEgc3BpbmUgdGhhdCBj
YW4gcmVzaXplIHdoaWxlIHN0YXNoaW5nCisgICAgICAgIG9sZCB2ZXJzaW9ucy4gU28sIHRoZSBz
cGluZSByZXNpemluZyBsb2dpYyBpcyBhYnN0cmFjdGVkIGJlaGluZCBDb25jdXJyZW50QnVmZmVy
LiBZb3UgY291bGQKKyAgICAgICAgdXNlIHRoYXQgYXMgYSBraW5kIG9mICJjb25jdXJyZW50IHZl
Y3RvciIgZm9yIGltbXV0YWJsZSBkYXRhLiBUaGF0J3MgaG93IENvbmN1cnJlbnRWZWN0b3IgdXNl
cworICAgICAgICBpdDogaXQncyBhbiBpbW11dGFibGUgYXJyYXkgb2Ygc2VnbWVudCBwb2ludGVy
cy4KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IHd0Zi9Db25jdXJyZW50QnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpDb25jdXJyZW50
QnVmZmVyOjpDb25jdXJyZW50QnVmZmVyKToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudEJ1ZmZl
cjo6fkNvbmN1cnJlbnRCdWZmZXIpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50QnVmZmVyOjpn
cm93RXhhY3QpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50QnVmZmVyOjpncm93KToKKyAgICAg
ICAgKFdURjo6Q29uY3VycmVudEJ1ZmZlcjo6YXJyYXkgY29uc3QpOgorICAgICAgICAoV1RGOjpD
b25jdXJyZW50QnVmZmVyOjpvcGVyYXRvcltdKToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudEJ1
ZmZlcjo6b3BlcmF0b3JbXSBjb25zdCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRCdWZmZXI6
OmNyZWF0ZUFycmF5KToKKyAgICAgICAgKiB3dGYvQ29uY3VycmVudFZlY3Rvci5oOiBBZGRlZC4K
KyAgICAgICAgKFdURjo6Q29uY3VycmVudFZlY3Rvckl0ZXJhdG9yOjp+Q29uY3VycmVudFZlY3Rv
ckl0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFZlY3Rvckl0ZXJhdG9yOjpvcGVy
YXRvciogY29uc3QpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50VmVjdG9ySXRlcmF0b3I6Om9w
ZXJhdG9yLT4gY29uc3QpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50VmVjdG9ySXRlcmF0b3I6
Om9wZXJhdG9yKyspOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50VmVjdG9ySXRlcmF0b3I6Om9w
ZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50VmVjdG9ySXRlcmF0b3I6
Om9wZXJhdG9yIT0gY29uc3QpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50VmVjdG9ySXRlcmF0
b3I6Om9wZXJhdG9yPSk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRWZWN0b3JJdGVyYXRvcjo6
Q29uY3VycmVudFZlY3Rvckl0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFZlY3Rv
cjo6fkNvbmN1cnJlbnRWZWN0b3IpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50VmVjdG9yOjpz
aXplIGNvbnN0KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFZlY3Rvcjo6aXNFbXB0eSBjb25z
dCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRWZWN0b3I6OmF0KToKKyAgICAgICAgKFdURjo6
Q29uY3VycmVudFZlY3Rvcjo6YXQgY29uc3QpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50VmVj
dG9yOjpvcGVyYXRvcltdKToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFZlY3Rvcjo6b3BlcmF0
b3JbXSBjb25zdCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRWZWN0b3I6OmZpcnN0KToKKyAg
ICAgICAgKFdURjo6Q29uY3VycmVudFZlY3Rvcjo6Zmlyc3QgY29uc3QpOgorICAgICAgICAoV1RG
OjpDb25jdXJyZW50VmVjdG9yOjpsYXN0KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFZlY3Rv
cjo6bGFzdCBjb25zdCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRWZWN0b3I6OnRha2VMYXN0
KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFZlY3Rvcjo6YXBwZW5kKToKKyAgICAgICAgKFdU
Rjo6Q29uY3VycmVudFZlY3Rvcjo6YWxsb2MpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50VmVj
dG9yOjpyZW1vdmVMYXN0KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFZlY3Rvcjo6Z3Jvdyk6
CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRWZWN0b3I6OmJlZ2luKToKKyAgICAgICAgKFdURjo6
Q29uY3VycmVudFZlY3Rvcjo6ZW5kKToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFZlY3Rvcjo6
c2VnbWVudEV4aXN0c0Zvcik6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRWZWN0b3I6OnNlZ21l
bnRGb3IpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50VmVjdG9yOjpzdWJzY3JpcHRGb3IpOgor
ICAgICAgICAoV1RGOjpDb25jdXJyZW50VmVjdG9yOjplbnN1cmVTZWdtZW50c0Zvcik6CisgICAg
ICAgIChXVEY6OkNvbmN1cnJlbnRWZWN0b3I6OmVuc3VyZVNlZ21lbnQpOgorICAgICAgICAoV1RG
OjpDb25jdXJyZW50VmVjdG9yOjphbGxvY2F0ZVNlZ21lbnQpOgorCiAyMDE3LTEyLTExICBFcmlj
IENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0
b3I6IE9wdGlvbmFsbHkgbG9nIFdlYktpdCBsb2cgcGFyYW1ldGVycyBhcyBKU09OCkluZGV4OiBT
b3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyNTc3MCkK
KysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTIzOSw2ICsyMzksOCBAQAogCQkwRkIxNEUxODE4MEZBMjE4MDA5QjZCNEQgLyogQmFn
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhZy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkIxNEUxQTE4MTBFMURBMDA5QjZCNEQgLyogQmFnVG9IYXNoTWFw
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEJhZ1RvSGFzaE1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkIzMTdDMzFDNDg4MDAxMDA3RTM5NUEgLyogU3lzdGVtVHJhY2luZy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeXN0ZW1UcmFjaW5nLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGQjQ2NzgyMUZERTI4MkIwMDNGQ0IwOSAvKiBDb25jdXJyZW50
QnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbmN1cnJlbnRCdWZm
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCNDY3ODMxRkRFMjgyQzAwM0ZD
QjA5IC8qIENvbmN1cnJlbnRWZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ29uY3VycmVudFZlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkM0
NDg4MjE2RkU5RkUxMDA4NDRCRTkgLyogUHJvY2Vzc0lELmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFByb2Nlc3NJRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkM0RURFNTE2OTYxNDk2MDBGNjUwNDEgLyogQ29tbWFQcmludGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENvbW1hUHJpbnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkQ4MUFDNDE1NEZCMjJFMDA5ODNFNzIgLyogRmFzdEJpdFZlY3Rvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGYXN0Qml0VmVjdG9yLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC04MDgsOCArODEwLDEwIEBACiAJCQkJMEY4RjJCOTAxNzJFMDBG
MDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmggKi8sCiAJCQkJQThBNDcyNzAxNTFBODI1
QTAwNDEyM0ZGIC8qIENvbXBpbGVyLmggKi8sCiAJCQkJNDZCQTlFQUIxRjRDRDYxRTAwOUEyQkJD
IC8qIENvbXBsZXRpb25IYW5kbGVyLmggKi8sCisJCQkJMEZCNDY3ODIxRkRFMjgyQjAwM0ZDQjA5
IC8qIENvbmN1cnJlbnRCdWZmZXIuaCAqLywKIAkJCQkwRjMwQ0I1ODFGQ0RGMTMzMDA0QjUzMjMg
LyogQ29uY3VycmVudFB0ckhhc2hTZXQuY3BwICovLAogCQkJCTBGMzBDQjU5MUZDREYxMzMwMDRC
NTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5oICovLAorCQkJCTBGQjQ2NzgzMUZERTI4MkMw
MDNGQ0IwOSAvKiBDb25jdXJyZW50VmVjdG9yLmggKi8sCiAJCQkJMEZEQjY5OEQxQjdDNjQzQTAw
MEMxMDc4IC8qIENvbmRpdGlvbi5oICovLAogCQkJCTBGRkJDQkZBMUZEMzdFMEYwMDcyQUFGMCAv
KiBDb3VudGluZ0xvY2suaCAqLywKIAkJCQkwRjhFODVEQTFGRDQ4NUIwMDA2OTE4ODkgLyogQ291
bnRpbmdMb2NrLmNwcCAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMjU3
NzApCisrKyBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
MTgsNyArMTgsOSBAQCBzZXQoV1RGX0hFQURFUlMKICAgICBDbG9ja1R5cGUuaAogICAgIENvbXBp
bGF0aW9uVGhyZWFkLmgKICAgICBDb21waWxlci5oCisgICAgQ29uY3VycmVudEJ1ZmZlci5oCiAg
ICAgQ29uY3VycmVudFB0ckhhc2hTZXQuaAorICAgIENvbmN1cnJlbnRWZWN0b3IuaAogICAgIENv
bmRpdGlvbi5oCiAgICAgQ291bnRpbmdMb2NrLmgKICAgICBDcm9zc1RocmVhZENvcGllci5oCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9Db25jdXJyZW50QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvQ29uY3VycmVudEJ1ZmZlci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9X
VEYvd3RmL0NvbmN1cnJlbnRCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwOCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxs
b2MuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9Mb2Nr
Lmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gQ29uY3VycmVudEJ1ZmZlciBpcyBzdWl0YWJsZSBm
b3Igd2hlbiB5b3UgcGxhbiB0byBzdG9yZSBpbW11dGFibGUgZGF0YSBhbmQgc29tZXRpbWVzIGFw
cGVuZCB0byBpdC4KKy8vIEl0IHN1cHBvcnRzIHN0b3JpbmcgZGF0YSB0aGF0IGlzIG5vdCBjb3B5
LWNvbnN0cnVjdGFibGUgYnV0IGJpdC1jb3B5YWJsZS4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citj
bGFzcyBDb25jdXJyZW50QnVmZmVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb25jdXJy
ZW50QnVmZmVyKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICAK
KyAgICBDb25jdXJyZW50QnVmZmVyKCkKKyAgICB7CisgICAgfQorICAgIAorICAgIH5Db25jdXJy
ZW50QnVmZmVyKCkKKyAgICB7CisgICAgICAgIGlmIChBcnJheSogYXJyYXkgPSBtX2FycmF5KSB7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJyYXktPnNpemU7ICsraSkK
KyAgICAgICAgICAgICAgICBhcnJheS0+ZGF0YVtpXS5+VCgpOworICAgICAgICB9CisgICAgICAg
IGZvciAoQXJyYXkqIGFycmF5IDogbV9hbGxBcnJheXMpCisgICAgICAgICAgICBmYXN0RnJlZShh
cnJheSk7CisgICAgfQorCisgICAgLy8gR3Jvd2luZyBpcyBub3QgY29uY3VycmVudC4gVGhpcyBh
c3N1bWVzIHlvdSBhcmUgaG9sZGluZyBzb21lIG90aGVyIGxvY2sgYmVmb3JlIHlvdSBkbyB0aGlz
LgorICAgIHZvaWQgZ3Jvd0V4YWN0KHNpemVfdCBuZXdTaXplKQorICAgIHsKKyAgICAgICAgQXJy
YXkqIGFycmF5ID0gbV9hcnJheTsKKyAgICAgICAgaWYgKGFycmF5ICYmIG5ld1NpemUgPD0gYXJy
YXktPnNpemUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEFycmF5KiBuZXdBcnJheSA9
IGNyZWF0ZUFycmF5KG5ld1NpemUpOworICAgICAgICAvLyBUaGlzIGFsbG93cyB1cyB0byBkbyBD
b25jdXJyZW50QnVmZmVyPHN0ZDo6dW5pcXVlX3B0cjw+Pi4KKyAgICAgICAgaWYgKGFycmF5KQor
ICAgICAgICAgICAgbWVtY3B5KG5ld0FycmF5LT5kYXRhLCBhcnJheS0+ZGF0YSwgc2l6ZW9mKFQp
ICogYXJyYXktPnNpemUpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBhcnJheSA/IGFycmF5
LT5zaXplIDogMDsgaSA8IG5ld1NpemU7ICsraSkKKyAgICAgICAgICAgIG5ldyAobmV3QXJyYXkt
PmRhdGEgKyBpKSBUKCk7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAg
IG1fYXJyYXkgPSBuZXdBcnJheTsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAg
ICAgICAgbV9hbGxBcnJheXMuYXBwZW5kKG5ld0FycmF5KTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBncm93KHNpemVfdCBuZXdTaXplKQorICAgIHsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBtX2Fy
cmF5ID8gbV9hcnJheS0+c2l6ZSA6IDA7CisgICAgICAgIGlmIChuZXdTaXplIDw9IHNpemUpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIGdyb3dFeGFjdChzdGQ6Om1heChuZXdTaXplLCBz
aXplICogMikpOworICAgIH0KKyAgICAKKyAgICBzdHJ1Y3QgQXJyYXkgeworICAgICAgICB1bnNp
Z25lZCBzaXplOyAvLyBUaGlzIGlzIGFuIGltbXV0YWJsZSBzaXplLgorICAgICAgICBUIGRhdGFb
MV07CisgICAgfTsKKyAgICAKKyAgICBBcnJheSogYXJyYXkoKSBjb25zdCB7IHJldHVybiBtX2Fy
cmF5OyB9CisgICAgCisgICAgVCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1f
YXJyYXktPmRhdGFbaW5kZXhdOyB9CisgICAgY29uc3QgVCYgb3BlcmF0b3JbXShzaXplX3QgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIG1fYXJyYXktPmRhdGFbaW5kZXhdOyB9CisgICAgCitwcml2YXRl
OgorICAgIEFycmF5KiBjcmVhdGVBcnJheSh1bnNpZ25lZCBzaXplKQorICAgIHsKKyAgICAgICAg
QXJyYXkqIHJlc3VsdCA9IHN0YXRpY19jYXN0PEFycmF5Kj4oZmFzdE1hbGxvYyhPQkpFQ1RfT0ZG
U0VUT0YoQXJyYXksIGRhdGEpICsgc2l6ZW9mKFQpICogc2l6ZSkpOworICAgICAgICByZXN1bHQt
PnNpemUgPSBzaXplOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBB
cnJheSogbV9hcnJheSB7IG51bGxwdHIgfTsKKyAgICBWZWN0b3I8QXJyYXkqPiBtX2FsbEFycmF5
czsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Db25j
dXJyZW50VmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ29uY3VycmVudFZl
Y3Rvci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRWZWN0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5h
bWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENvbmN1cnJlbnRWZWN0b3JfaAorI2Rl
ZmluZSBDb25jdXJyZW50VmVjdG9yX2gKKworI2luY2x1ZGUgPHd0Zi9Db25jdXJyZW50QnVmZmVy
Lmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBXVEYgeworCisv
LyBBbiBpdGVyYXRvciBmb3IgQ29uY3VycmVudFZlY3Rvci4gSXQgc3VwcG9ydHMgb25seSB0aGUg
cHJlICsrIG9wZXJhdG9yCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc2l6ZV90IFNlZ21lbnRTaXpl
ID0gOD4gY2xhc3MgQ29uY3VycmVudFZlY3RvcjsKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXpl
X3QgU2VnbWVudFNpemUgPSA4PiBjbGFzcyBDb25jdXJyZW50VmVjdG9ySXRlcmF0b3IgeworcHJp
dmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ29uY3VycmVudFZlY3RvcjxULCBTZWdtZW50U2l6ZT47
CitwdWJsaWM6CisgICAgdHlwZWRlZiBDb25jdXJyZW50VmVjdG9ySXRlcmF0b3I8VCwgU2VnbWVu
dFNpemU+IEl0ZXJhdG9yOworCisgICAgfkNvbmN1cnJlbnRWZWN0b3JJdGVyYXRvcigpIHsgfQor
CisgICAgVCYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3IuYXQobV9pbmRleCk7
IH0KKyAgICBUKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJm1fdmVjdG9yLmF0KG1faW5k
ZXgpOyB9CisKKyAgICAvLyBPbmx5IHByZWZpeCArKyBvcGVyYXRvciBzdXBwb3J0ZWQKKyAgICBJ
dGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgeworICAgICAgICBtX2luZGV4Kys7CisgICAgICAg
IHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSXRlcmF0
b3ImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIu
bV9pbmRleCAmJiAmbV92ZWN0b3IgPT0gJm90aGVyLm1fdmVjdG9yOworICAgIH0KKworICAgIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBJdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9pbmRleCAhPSBvdGhlci5tX2luZGV4IHx8ICZtX3ZlY3RvciAhPSAmb3RoZXIu
bV92ZWN0b3I7CisgICAgfQorCisgICAgQ29uY3VycmVudFZlY3Rvckl0ZXJhdG9yJiBvcGVyYXRv
cj0oY29uc3QgQ29uY3VycmVudFZlY3Rvckl0ZXJhdG9yPFQsIFNlZ21lbnRTaXplPiYgb3RoZXIp
CisgICAgeworICAgICAgICBtX3ZlY3RvciA9IG90aGVyLm1fdmVjdG9yOworICAgICAgICBtX2lu
ZGV4ID0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBDb25jdXJyZW50VmVjdG9ySXRlcmF0b3IoQ29uY3VycmVudFZlY3RvcjxULCBT
ZWdtZW50U2l6ZT4mIHZlY3Rvciwgc2l6ZV90IGluZGV4KQorICAgICAgICA6IG1fdmVjdG9yKHZl
Y3RvcikKKyAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgIHsKKyAgICB9CisKKyAgICBDb25j
dXJyZW50VmVjdG9yPFQsIFNlZ21lbnRTaXplPiYgbV92ZWN0b3I7CisgICAgc2l6ZV90IG1faW5k
ZXg7Cit9OworCisvLyBDb25jdXJyZW50VmVjdG9yIGlzIGxpa2UgU2VnbWVudGVkVmVjdG9yLCBi
dXQgc3VpdGFibGUgZm9yIHNjZW5hcmlvcyB3aGVyZSBvbmUgdGhyZWFkIGFwcGVuZHMKKy8vIGVs
ZW1lbnRzIGFuZCBhbm90aGVyIHRocmVhZCBjb250aW51ZXMgdG8gYWNjZXNzIGVsZW1lbnRzIGF0
IGxvd2VyIGluZGljZXMuIE9ubHkgb25lIHRocmVhZCBjYW4KKy8vIGFwcGVuZCBhdCBhIHRpbWUs
IHNvIHRoYXQgYWN0aXZpdHkgc3RpbGwgbmVlZHMgbG9ja2luZy4KK3RlbXBsYXRlIDx0eXBlbmFt
ZSBULCBzaXplX3QgU2VnbWVudFNpemU+CitjbGFzcyBDb25jdXJyZW50VmVjdG9yIHsKKyAgICBm
cmllbmQgY2xhc3MgQ29uY3VycmVudFZlY3Rvckl0ZXJhdG9yPFQsIFNlZ21lbnRTaXplPjsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb25jdXJyZW50VmVjdG9yKTsKKyAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKKworcHVibGljOgorICAgIHR5cGVkZWYgQ29uY3VycmVudFZlY3Rvckl0
ZXJhdG9yPFQsIFNlZ21lbnRTaXplPiBJdGVyYXRvcjsKKworICAgIENvbmN1cnJlbnRWZWN0b3Io
KSA9IGRlZmF1bHQ7CisKKyAgICB+Q29uY3VycmVudFZlY3RvcigpCisgICAgeworICAgIH0KKwor
ICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgYm9vbCBpc0Vt
cHR5KCkgY29uc3QgeyByZXR1cm4gIXNpemUoKTsgfQorCisgICAgVCYgYXQoc2l6ZV90IGluZGV4
KQorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaW5kZXgg
PCBtX3NpemUpOworICAgICAgICByZXR1cm4gc2VnbWVudEZvcihpbmRleCktPmVudHJpZXNbc3Vi
c2NyaXB0Rm9yKGluZGV4KV07CisgICAgfQorCisgICAgY29uc3QgVCYgYXQoc2l6ZV90IGluZGV4
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8Q29uY3VycmVudFZlY3Rv
cjxULCBTZWdtZW50U2l6ZT4qPih0aGlzKS0+YXQoaW5kZXgpOworICAgIH0KKworICAgIFQmIG9w
ZXJhdG9yW10oc2l6ZV90IGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KGluZGV4KTsK
KyAgICB9CisKKyAgICBjb25zdCBUJiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBhdChpbmRleCk7CisgICAgfQorCisgICAgVCYgZmlyc3QoKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIWlzRW1wdHko
KSk7CisgICAgICAgIHJldHVybiBhdCgwKTsKKyAgICB9CisgICAgY29uc3QgVCYgZmlyc3QoKSBj
b25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIWlz
RW1wdHkoKSk7CisgICAgICAgIHJldHVybiBhdCgwKTsKKyAgICB9CisgICAgVCYgbGFzdCgpCisg
ICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighaXNFbXB0eSgp
KTsKKyAgICAgICAgcmV0dXJuIGF0KHNpemUoKSAtIDEpOworICAgIH0KKyAgICBjb25zdCBUJiBs
YXN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FU
SU9OKCFpc0VtcHR5KCkpOworICAgICAgICByZXR1cm4gYXQoc2l6ZSgpIC0gMSk7CisgICAgfQor
CisgICAgVCB0YWtlTGFzdCgpCisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTighaXNFbXB0eSgpKTsKKyAgICAgICAgVCByZXN1bHQgPSBXVEZNb3ZlKGxhc3Qo
KSk7CisgICAgICAgIC0tbV9zaXplOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgdm9pZCBhcHBlbmQoQXJncyYmLi4u
IGFyZ3MpCisgICAgeworICAgICAgICArK21fc2l6ZTsKKyAgICAgICAgaWYgKCFzZWdtZW50RXhp
c3RzRm9yKG1fc2l6ZSAtIDEpKQorICAgICAgICAgICAgYWxsb2NhdGVTZWdtZW50KCk7CisgICAg
ICAgIG5ldyAoTm90TnVsbCwgJmxhc3QoKSkgVChzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4p
OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgVCYgYWxsb2Mo
QXJncyYmLi4uIGFyZ3MpCisgICAgeworICAgICAgICBhcHBlbmQoc3RkOjpmb3J3YXJkPEFyZ3M+
KGFyZ3MpLi4uKTsKKyAgICAgICAgcmV0dXJuIGxhc3QoKTsKKyAgICB9CisKKyAgICB2b2lkIHJl
bW92ZUxhc3QoKQorICAgIHsKKyAgICAgICAgbGFzdCgpLn5UKCk7CisgICAgICAgIC0tbV9zaXpl
OworICAgIH0KKworICAgIHZvaWQgZ3JvdyhzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIGlm
IChzaXplID09IG1fc2l6ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgQVNTRVJUKHNp
emUgPiBtX3NpemUpOworICAgICAgICBlbnN1cmVTZWdtZW50c0ZvcihzaXplKTsKKyAgICAgICAg
c2l6ZV90IG9sZFNpemUgPSBtX3NpemU7CisgICAgICAgIG1fc2l6ZSA9IHNpemU7CisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSBvbGRTaXplOyBpIDwgbV9zaXplOyArK2kpCisgICAgICAgICAgICBu
ZXcgKE5vdE51bGwsICZhdChpKSkgVCgpOworICAgIH0KKworICAgIEl0ZXJhdG9yIGJlZ2luKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBJdGVyYXRvcigqdGhpcywgMCk7CisgICAgfQorCisgICAg
SXRlcmF0b3IgZW5kKCkKKyAgICB7CisgICAgICAgIHJldHVybiBJdGVyYXRvcigqdGhpcywgbV9z
aXplKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RydWN0IFNlZ21lbnQgeworICAgICAgICBX
VEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAgICAgICAgICAKKyAgICAgICAgVCBl
bnRyaWVzW1NlZ21lbnRTaXplXTsKKyAgICB9OworCisgICAgYm9vbCBzZWdtZW50RXhpc3RzRm9y
KHNpemVfdCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBpbmRleCAvIFNlZ21lbnRTaXpl
IDwgbV9udW1TZWdtZW50czsKKyAgICB9CisKKyAgICBTZWdtZW50KiBzZWdtZW50Rm9yKHNpemVf
dCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3NlZ21lbnRzW2luZGV4IC8gU2VnbWVu
dFNpemVdLmdldCgpOworICAgIH0KKworICAgIHNpemVfdCBzdWJzY3JpcHRGb3Ioc2l6ZV90IGlu
ZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGluZGV4ICUgU2VnbWVudFNpemU7CisgICAgfQor
CisgICAgdm9pZCBlbnN1cmVTZWdtZW50c0ZvcihzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAg
IHNpemVfdCBzZWdtZW50Q291bnQgPSAobV9zaXplICsgU2VnbWVudFNpemUgLSAxKSAvIFNlZ21l
bnRTaXplOworICAgICAgICBzaXplX3QgbmVlZGVkU2VnbWVudENvdW50ID0gKHNpemUgKyBTZWdt
ZW50U2l6ZSAtIDEpIC8gU2VnbWVudFNpemU7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IHNl
Z21lbnRDb3VudCA/IHNlZ21lbnRDb3VudCAtIDEgOiAwOyBpIDwgbmVlZGVkU2VnbWVudENvdW50
OyArK2kpCisgICAgICAgICAgICBlbnN1cmVTZWdtZW50KGkpOworICAgIH0KKworICAgIHZvaWQg
ZW5zdXJlU2VnbWVudChzaXplX3Qgc2VnbWVudEluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJU
X1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oc2VnbWVudEluZGV4IDw9IG1fbnVtU2VnbWVudHMp
OworICAgICAgICBpZiAoc2VnbWVudEluZGV4ID09IG1fbnVtU2VnbWVudHMpCisgICAgICAgICAg
ICBhbGxvY2F0ZVNlZ21lbnQoKTsKKyAgICB9CisKKyAgICB2b2lkIGFsbG9jYXRlU2VnbWVudCgp
CisgICAgeworICAgICAgICBtX3NlZ21lbnRzLmdyb3cobV9udW1TZWdtZW50cyArIDEpOworICAg
ICAgICBtX3NlZ21lbnRzW21fbnVtU2VnbWVudHMrK10gPSBzdGQ6Om1ha2VfdW5pcXVlPFNlZ21l
bnQ+KCk7CisgICAgfQorCisgICAgc2l6ZV90IG1fc2l6ZSB7IDAgfTsKKyAgICBDb25jdXJyZW50
QnVmZmVyPHN0ZDo6dW5pcXVlX3B0cjxTZWdtZW50Pj4gbV9zZWdtZW50czsKKyAgICBzaXplX3Qg
bV9udW1TZWdtZW50cyB7IDAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBX
VEY6OkNvbmN1cnJlbnRWZWN0b3I7CisKKyNlbmRpZiAvLyBDb25jdXJyZW50VmVjdG9yX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329095</attachid>
            <date>2017-12-11 23:27:52 -0800</date>
            <delta_ts>2017-12-12 08:57:23 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>78505</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI1NzcwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzNCBA
QAorMjAxNy0xMi0xMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBmbGFnIGEgY2VsbCBmb3IgdW5jb25kaXRpb25hbCBm
aW5hbGl6YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE4MDYzNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAg
ICAKKyAgICAgICAgVW5jb25kaXRpb25hbEZpbmFsaXplcnMgd2VyZSBhbm5veWluZyAtIHlvdSBo
YWQgdG8gYWxsb2NhdGUgdGhlbSBhbmQgeW91IGhhZCB0byBtYW5hZ2UgYQorICAgICAgICBnbG9i
YWwgbGlua2VkIGxpc3QgLSBidXQgdGhleSBoYWQgc29tZSBuaWNlIHByb3BlcnRpZXM6CisgICAg
ICAgIAorICAgICAgICAtIFlvdSBvbmx5IGRpZCB0aGUgaGFyZGVzdCB3b3JrIChjcmVhdGluZyB0
aGUgVW5jb25kaXRpb25hbEZpbmFsaXplcikgb24gZmlyc3QgR0Mgd2hlcmUgeW91CisgICAgICAg
ICAgc3Vydml2ZWQgYW5kIG5lZWRlZCBpdC4KKyAgICAgICAgICAgIC0+IEp1c3QgbmVlZGluZyBp
dCB3YXNuJ3QgZW5vdWdoLgorICAgICAgICAgICAgLT4gSnVzdCBzdXJ2aXZpbmcgd2Fzbid0IGVu
b3VnaC4KKyAgICAgICAgCisgICAgICAgIFRoZSBuZXcgQVBJIGJhc2VkIG9uIElzb1N1YnNwYWNl
cyBtZWFudCB0aGF0IGp1c3Qgc3Vydml2aW5nIHdhcyBlbm91Z2ggdG8gY2F1c2UgdW5jb25kaXRp
b25hbAorICAgICAgICBmaW5hbGl6ZXIgbG9naWMgdG8gYmUgaW52b2tlZC4gSSB0aGluayB0aGF0
J3Mgbm90IGdyZWF0LiBJbmZlcnJlZFR5cGUgZ290IGFyb3VuZCB0aGlzIGJ5CisgICAgICAgIG1h
a2luZyBJbmZlcnJlZFN0cnVjdHVyZSBhIGNlbGwsIGJ1dCB0aGlzIHdhcyBhIGdyb3NzIGhhY2su
IEZvciBvbmUsIGl0IG1lYW50IHRoYXQKKyAgICAgICAgSW5mZXJyZWRTdHJ1Y3R1cmUgd291bGQg
c3Vydml2ZSBkdXJpbmcgdGhlIEdDIGluIHdoaWNoIGl0cyBmaW5hbGl6ZXIgb2J2aWF0ZWQgdGhl
IG5lZWQgZm9yIGl0cworICAgICAgICBleGlzdGVuY2UuIEl0J3Mgbm90IHJlYWxseSBhbiBpZGlv
bSBJIHdhbnQgdXMgdG8gcmVwZWF0IGJlY2F1c2UgaXQgc291bmRzIGxpa2UgdGhlIHNvcnQgb2YK
KyAgICAgICAgdGhpbmcgdGhhdCB0dXJucyBvdXQgdG8gYmUgc3VidGx5IGJyb2tlbi4KKyAgICAg
ICAgCisgICAgICAgIFdlIHJlYWxseSBuZWVkIHRvIGhhdmUgYSB3YXkgb2YgaW5kaWNhdGluZyB3
aGVuIHlvdSBoYXZlIGVudGVyZWQgaW50byB0aGUgc3RhdGUgdGhhdCByZXF1aXJlcworICAgICAg
ICB5b3VyIHVuY29uZGl0aW9uYWwgZmluYWxpemVyIHRvIGJlIGludm9rZWQuIEJhc2ljYWxseSwg
d2Ugd2FudCB0byBiZSBhYmxlIHRvIHRyYWNrIHRoZSBzZXQgb2YKKyAgICAgICAgb2JqZWN0cyB0
aGF0IG5lZWQgdW5jb25kaXRpb25hbCBmaW5hbGl6ZXJzLiBPbmx5IHRoZSBzdWJzZXQgb2YgdGhh
dCBzZXQgdGhhdCBvdmVybGFwcyB3aXRoIHRoZQorICAgICAgICBzZXQgb2YgbWFya2VkIG9iamVj
dHMgbmVlZHMgdG8gYmUgYWNjdXJhdGUuIFRoZSBlYXNpZXN0IHdheSB0byBkbyB0aGlzIGlzIGEg
aGllcmFyY2h5IG9mCisgICAgICAgIGJpdHZlY3RvcnM6IG9uZSB0byBzYXkgd2hpY2ggTWFya2Vk
QmxvY2tzIGhhdmUgb2JqZWN0cyB0aGF0IGhhdmUgdW5jb25kaXRpb25hbCBmaW5hbGl6ZXJzLCBh
bmQKKyAgICAgICAgYW5vdGhlciBsZXZlbCB0byBzYXkgd2hpY2ggYXRvbXMgd2l0aGluIGEgTWFy
a2VkQmxvY2sgaGF2ZSB1bmNvbmRpdGlvbmFsIGZpbmFsaXplcnMuCisgICAgICAgIAorICAgICAg
ICBUaGlzIGNoYW5nZSBpbnRyb2R1Y2VzIElzb0NlbGxTZXQsIHdoaWNoIGNvdXBsZXMgaXRzZWxm
IHRvIHRoZSBNYXJrZWRBbGxvY2F0b3Igb2Ygc29tZQorICAgICAgICBJc29TdWJzcGFjZSB0byBh
bGxvdyBtYWludGFpbmluZyBhIHNldCBvZiBvYmplY3RzICh3ZWxsLCBjZWxscyAtIHlvdSBjb3Vs
ZCBkbyB0aGlzIHdpdGgKKyAgICAgICAgYXV4aWxpYXJpZXMpIHRoYXQgYmVsb25nIHRvIHRoYXQg
SXNvU3Vic3BhY2UuIEl0J2xsIGhhdmUgdW5kZWZpbmVkIGJlaGF2aW9yIGlmIHlvdSB0cnkgdG8K
KyAgICAgICAgYWRkL3JlbW92ZS9jb250YWlucyBhbiBvYmplY3QgdGhhdCBpc24ndCBpbiB0aGF0
IElzb1N1YnNwYWNlLiBGb3Igb2JqZWN0cyBpbiB0aGF0IHN1YnNwYWNlLAorICAgICAgICB5b3Ug
Y2FuIGFkZC9yZW1vdmUvY29udGFpbnMgYW5kIGZvckVhY2hNYXJrZWRDZWxsLiBUaGUgY29zdCBv
ZiBlYWNoIElzb0NlbGxTZXQgaXMgYXQgd29yc3QKKyAgICAgICAgYWJvdXQgMC44JSBpbmNyZWFz
ZSBpbiBzaXplIHRvIGV2ZXJ5IG9iamVjdCBpbiB0aGUgc3Vic3BhY2UgdGhhdCB0aGUgc2V0IGlz
IGF0dGFjaGVkIHRvLiBTbywKKyAgICAgICAgaXQgbWFrZXMgc2Vuc2UgdG8gaGF2ZSBhIGhhbmRm
dWwgcGVyIHN1YnNwYWNlIG1heC4gVGhpcyBjaGFuZ2Ugb25seSBuZWVkcyBvbmUgcGVyIHN1YnNw
YWNlLAorICAgICAgICBidXQgeW91IGNvdWxkIGltYWdpbmUgbW9yZSBpZiB3ZSBkbyB0aGlzIGZv
ciBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLgorICAgICAgICAKKyAgICAgICAgVG8gYWJzb2x1dGVs
eSBtaW5pbWl6ZSB0aGUgcG9zc2liaWxpdHkgdGhhdCB0aGlzIGluY3VycyBjb3N0cywgdGhlIGFk
ZC9yZW1vdmUvY29udGFpbnMKKyAgICAgICAgZnVuY3Rpb25zIGNhbiBiZSB1c2VkIGZyb20gYW55
IHRocmVhZCBzbyBsb25nIGFzIGZvckVhY2hNYXJrZWRDZWxsIGlzbid0IHJ1bm5pbmcuIFRoaXMg
bWVhbnMKKyAgICAgICAgdGhhdCBJbmZlcnJlZFR5cGUgb25seSBuZWVkcyB0byBhZGQgaXRzZWxm
IHRvIHRoZSBzZXQgZHVyaW5nIHZpc2l0Q2hpbGRyZW4uIFRodXMsIGl0IG5lZWRzIHRvCisgICAg
ICAgIGJvdGggc3Vydml2ZSBhbmQgbmVlZCBpdCBmb3IgdGhlIGhhcmRlc3Qgd29yayB0byB0YWtl
IHBsYWNlLiBUaGUgd29yayBvZiBhZGRpbmcgZG9lcyBpbnZvbHZlCisgICAgICAgIGEgZ25hcmx5
IGxvYWQgY2hhaW4gdGhhdCBlbmRzIGluIGEgQ0FTOiBsb2FkIGJsb2NrIGhhbmRsZSBmcm9tIGJs
b2NrLCBsb2FkIGluZGV4LCBsb2FkCisgICAgICAgIHNlZ21lbnQsIGxvYWQgYml0dmVjdG9yLCBs
b2FkIGJpdCAtPiBpZiBub3Qgc2V0LCB0aGVuIENBUy4gVGhhdCdzIGZpdmUgZGVwZW5kZW50IGxv
YWRzIQorICAgICAgICBIb3dldmVyLCBpdCdzIHBlcmZlY3QgZm9yIHJ1bm5pbmcgaW4gcGFyYWxs
ZWwgc2luY2UgdGhlIG9ubHkgd3JpdGUgb3BlcmF0aW9ucyBhcmUgdG8gd2lkZWx5CisgICAgICAg
IGRpc3BlcnNlZCBjYWNoZSBsaW5lcyB0aGF0IGNvbnRhaW4gdGhlIGJpdHMgdW5kZXJseWluZyB0
aGUgc2V0LgorICAgICAgICAKKyAgICAgICAgVGhlIGJlc3QgcGFydCBpcyBob3cgZm9yRWFjaE1h
cmtlZENlbGwgd29ya3MuIFRoYXQgc2tpcHMgYmxvY2tzIHRoYXQgZG9uJ3QgaGF2ZSBhbnkgb2Jq
ZWN0cworICAgICAgICB0aGF0IG5lZWQgdW5jb25kaXRpb25hbCBmaW5hbGl6ZXJzLCBhbmQgb25s
eSB0b3VjaGVzIHRoZSBtZW1vcnkgb2YgbWFya2VkIG9iamVjdHMgdGhhdCBoYXZlCisgICAgICAg
IHRoZSB1bmNvbmRpdGlvbmFsIGZpbmFsaXplciBiaXQgc2V0LiBJdCB3aWxsIHdhbGsgdGhvc2Ug
b2JqZWN0cyBpbiByb3VnaGx5IGFkZHJlc3Mgb3JkZXIuIEkKKyAgICAgICAgcHJldmlvdXNseSBm
b3VuZCB0aGF0IHRoaXMgc3BlZWRzIHVwIHdhbGtpbmcgb3ZlciBhIGxvdCBvZiBvYmplY3RzIHdo
ZW4gSSBtYWRlIHNpbWlsYXIgY2hhbmdlcworICAgICAgICBmb3IgRE9NIEdDIChjYWxsaW5nIHZp
c2l0QWRkaXRpb25hbENoaWxkcmVuIHZpYSBmb3JFYWNoTWFya2VkQ2VsbCByYXRoZXIgdGhhbiBi
eSB3YWxraW5nIGEKKyAgICAgICAgSGFzaFNldCkuCisgICAgICAgIAorICAgICAgICBUaGlzIGNo
YW5nZSBtYWtlcyBJbmZlcnJlZFN0cnVjdHVyZSBiZSBhIG1hbGxvYyBvYmplY3QgYWdhaW4sIGJ1
dCBub3cgaXQncyBpbiBhbiBJc29IZWFwLgorICAgICAgICAKKyAgICAgICAgTXkgZXhwZWN0YXRp
b24gZm9yIHRoaXMgY2hhbmdlIGlzIHRoYXQgaXQncyBwZXJmLW5ldXRyYWwuIExvbmctdGVybSwg
aXQgZ2l2ZXMgdXMgYSBwYXRoCisgICAgICAgIGZvcndhcmQgZm9yIGVsaW1pbmF0aW5nIFVuY29u
ZGl0aW9uYWxGaW5hbGl6ZXIgYW5kIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIgd2hpbGUgdXNpbmcK
KyAgICAgICAgSXNvU3Vic3BhY2UgaW4gbW9yZSBwbGFjZXMuCisKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIGhlYXAvQXRvbUluZGljZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkF0
b21JbmRpY2VzOjpBdG9tSW5kaWNlcyk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAg
ICAgKEpTQzo6SGVhcDo6ZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycyk6CisgICAgICAg
ICogaGVhcC9IZWFwLmg6CisgICAgICAgICogaGVhcC9Jc29DZWxsU2V0LmNwcDogQWRkZWQuCisg
ICAgICAgIChKU0M6Oklzb0NlbGxTZXQ6Oklzb0NlbGxTZXQpOgorICAgICAgICAoSlNDOjpJc29D
ZWxsU2V0Ojp+SXNvQ2VsbFNldCk6CisgICAgICAgIChKU0M6Oklzb0NlbGxTZXQ6OmFkZFNsb3cp
OgorICAgICAgICAoSlNDOjpJc29DZWxsU2V0OjpkaWRSZXNpemVCaXRzKToKKyAgICAgICAgKEpT
Qzo6SXNvQ2VsbFNldDo6ZGlkUmVtb3ZlQmxvY2spOgorICAgICAgICAoSlNDOjpJc29DZWxsU2V0
Ojpzd2VlcFRvRnJlZUxpc3QpOgorICAgICAgICAqIGhlYXAvSXNvQ2VsbFNldC5oOiBBZGRlZC4K
KyAgICAgICAgKiBoZWFwL0lzb0NlbGxTZXRJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlND
OjpJc29DZWxsU2V0OjphZGQpOgorICAgICAgICAoSlNDOjpJc29DZWxsU2V0OjpyZW1vdmUpOgor
ICAgICAgICAoSlNDOjpJc29DZWxsU2V0Ojpjb250YWlucyBjb25zdCk6CisgICAgICAgIChKU0M6
Oklzb0NlbGxTZXQ6OmZvckVhY2hNYXJrZWRDZWxsKToKKyAgICAgICAgKiBoZWFwL0lzb1N1YnNw
YWNlLmNwcDoKKyAgICAgICAgKEpTQzo6SXNvU3Vic3BhY2U6OmRpZFJlc2l6ZUJpdHMpOgorICAg
ICAgICAoSlNDOjpJc29TdWJzcGFjZTo6ZGlkUmVtb3ZlQmxvY2spOgorICAgICAgICAoSlNDOjpJ
c29TdWJzcGFjZTo6ZGlkQmVnaW5Td2VlcGluZ1RvRnJlZUxpc3QpOgorICAgICAgICAqIGhlYXAv
SXNvU3Vic3BhY2UuaDoKKyAgICAgICAgKiBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHA6CisgICAg
ICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWRkQmxvY2spOgorICAgICAgICAoSlNDOjpNYXJr
ZWRBbGxvY2F0b3I6OnJlbW92ZUJsb2NrKToKKyAgICAgICAgKiBoZWFwL01hcmtlZEFsbG9jYXRv
ci5oOgorICAgICAgICAqIGhlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oOgorICAgICAgICAq
IGhlYXAvTWFya2VkQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxl
Ojpzd2VlcCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzRW1wdHkpOiBE
ZWxldGVkLgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suaDoKKyAgICAgICAgKEpTQzo6TWFy
a2VkQmxvY2s6Om1hcmtzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRs
ZTo6bmV3bHlBbGxvY2F0ZWQgY29uc3QpOgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2tJbmxp
bmVzLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzQWxsb2NhdGVkKToK
KyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6aXNFbXB0eSk6CisgICAgICAgIChK
U0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OmVtcHR5TW9kZSk6CisgICAgICAgIChKU0M6Ok1hcmtl
ZEJsb2NrOjpIYW5kbGU6OmZvckVhY2hNYXJrZWRDZWxsKToKKyAgICAgICAgKiBoZWFwL1N1YnNw
YWNlLmNwcDoKKyAgICAgICAgKEpTQzo6U3Vic3BhY2U6OmRpZFJlc2l6ZUJpdHMpOgorICAgICAg
ICAoSlNDOjpTdWJzcGFjZTo6ZGlkUmVtb3ZlQmxvY2spOgorICAgICAgICAoSlNDOjpTdWJzcGFj
ZTo6ZGlkQmVnaW5Td2VlcGluZ1RvRnJlZUxpc3QpOgorICAgICAgICAqIGhlYXAvU3Vic3BhY2Uu
aDoKKyAgICAgICAgKiBoZWFwL1N1YnNwYWNlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTdWJz
cGFjZTo6Zm9yRWFjaE1hcmtlZENlbGwpOgorICAgICAgICAqIHJ1bnRpbWUvSW5mZXJyZWRTdHJ1
Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFN0cnVjdHVyZTo6SW5mZXJyZWRTdHJ1
Y3R1cmUpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFN0cnVjdHVyZTo6Y3JlYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6SW5mZXJyZWRTdHJ1Y3R1cmU6OmRlc3Ryb3kpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpJbmZlcnJlZFN0cnVjdHVyZTo6Y3JlYXRlU3RydWN0dXJlKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6SW5mZXJyZWRTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4pOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpJbmZlcnJlZFN0cnVjdHVyZTo6ZmluYWxpemVVbmNvbmRpdGlv
bmFsbHkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmZlcnJlZFN0cnVjdHVyZTo6ZmluaXNo
Q3JlYXRpb24pOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1cmUu
aDoKKyAgICAgICAgKiBydW50aW1lL0luZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludC5jcHA6Cisg
ICAgICAgIChKU0M6OkluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKToK
KyAgICAgICAgKiBydW50aW1lL0luZmVycmVkVHlwZS5jcHA6CisgICAgICAgIChKU0M6OkluZmVy
cmVkVHlwZTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlwZTo6d2ls
bFN0b3JlVmFsdWVTbG93KToKKyAgICAgICAgKEpTQzo6SW5mZXJyZWRUeXBlOjptYWtlVG9wU2xv
dyk6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlwZTo6c2V0KToKKyAgICAgICAgKEpTQzo6SW5m
ZXJyZWRUeXBlOjpyZW1vdmVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6
OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KToKKyAgICAgICAgKiBydW50aW1lL0luZmVycmVkVHlw
ZS5oOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgor
ICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKwogMjAxNy0xMi0xMSAgU2FhbSBCYXJhdGkgIDxzYmFy
YXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBXZSBuZWVkIHRvIGRpc2FibGVDYWNoaW5nKCkgaW4g
RXJyb3JJbnN0YW5jZSB3aGVuIHdlIG1hdGVyaWFsaXplIHByb3BlcnRpZXMKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDIyNTc3MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNDk1LDYgKzQ5NSw3IEBAIGhl
YXAvSGVhcFNuYXBzaG90LmNwcAogaGVhcC9IZWFwU25hcHNob3RCdWlsZGVyLmNwcAogaGVhcC9J
bmNyZW1lbnRhbFN3ZWVwZXIuY3BwCiBoZWFwL0lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3Bw
CitoZWFwL0lzb0NlbGxTZXQuY3BwCiBoZWFwL0lzb1N1YnNwYWNlLmNwcAogaGVhcC9KSVRTdHVi
Um91dGluZVNldC5jcHAKIGhlYXAvTGFyZ2VBbGxvY2F0aW9uLmNwcApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyNTc3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC00NzQsNiArNDc0LDEwIEBACiAJCTBGQjE3NjYzMTk2QjhGOUUwMDkxMDUyQSAvKiBE
RkdQdXJlVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGQjE3NjVGMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuaCAqLzsgfTsKIAkJ
MEZCMzg3OEUxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpckJsb2NrV29ya2xpc3QuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjM4NzhCMUJGQkM0NEQwMEUz
QUIxRSAvKiBBaXJCbG9ja1dvcmtsaXN0LmggKi87IH07CiAJCTBGQjM4NzkwMUJGQkM0NEQwMEUz
QUIxRSAvKiBBaXJPcHRpbWl6ZUJsb2NrT3JkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjM4NzhEMUJGQkM0NEQwMEUzQUIxRSAvKiBBaXJPcHRp
bWl6ZUJsb2NrT3JkZXIuaCAqLzsgfTsKKwkJMEZCNDY3N0YxRkREQTZFOTAwM0ZDQjA5IC8qIEF0
b21JbmRpY2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkI0Njc3RTFGRERBNkU1MDAzRkNCMDkgLyogQXRvbUluZGljZXMuaCAqLzsgfTsKKwkJMEZC
NDY3ODAxRkREQTZGMTAwM0ZDQjA5IC8qIElzb0NlbGxTZXQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjQ2NzdEMUZEREE2RDkwMDNGQ0IwOSAvKiBJ
c29DZWxsU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEZCNDY3ODExRkREQTZGNzAwM0ZDQjA5IC8qIElzb0NlbGxTZXRJbmxpbmVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0Njc3QjFGRERB
NkQ4MDAzRkNCMDkgLyogSXNvQ2VsbFNldElubGluZXMuaCAqLzsgfTsKKwkJMEZCNDY3ODUxRkRG
QjQ1NDAwM0ZDQjA5IC8qIEluZmVycmVkVHlwZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjQ2Nzg0MUZERkI0NTIwMDNGQ0IwOSAvKiBJ
bmZlcnJlZFR5cGVJbmxpbmVzLmggKi87IH07CiAJCTBGQjQ3NjdFMUQ5OUFFQTkwMDhFQTZDQiAv
KiBHQ0RlZmVycmFsQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZCNDc2N0MxRDk5QUVBNzAwOEVBNkNCIC8qIEdDRGVmZXJyYWxDb250ZXh0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZC
NDc2N0YxRDk5QUVBRDAwOEVBNkNCIC8qIEdDRGVmZXJyYWxDb250ZXh0SW5saW5lcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNDc2N0QxRDk5QUVB
NzAwOEVBNkNCIC8qIEdDRGVmZXJyYWxDb250ZXh0SW5saW5lcy5oICovOyB9OwogCQkwRkI0RkI3
NDFCQzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0RkI3MTFCQzg0MzE0MDAyNUNBNUEgLyog
RlRMTGF6eVNsb3dQYXRoLmggKi87IH07CkBAIC0yNTYyLDYgKzI1NjYsMTEgQEAKIAkJMEZCMzg3
OTExQkZEMzFBMTAwRTNBQjFFIC8qIEZUTENvbXBpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gRlRMQ29tcGlsZS5jcHA7IHBhdGggPSBmdGwvRlRMQ29tcGlsZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjQxNTgzMUQ3OEY5ODIwMERGOEQw
OSAvKiBBcnJheUNvbnZlbnRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEFycmF5Q29udmVudGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkI0MzhBMjE5MjcwQjFEMDBFMUZCQzkgLyogU3RydWN0dXJlU2V0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cnVjdHVyZVNldC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGQjQ2NzdCMUZEREE2RDgwMDNGQ0IwOSAvKiBJc29DZWxsU2V0
SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJc29DZWxsU2V0SW5s
aW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI0Njc3QzFGRERBNkQ5MDAz
RkNCMDkgLyogSXNvQ2VsbFNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBJc29DZWxsU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCNDY3
N0QxRkREQTZEOTAwM0ZDQjA5IC8qIElzb0NlbGxTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSXNvQ2VsbFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkI0Njc3RTFGRERBNkU1MDAzRkNCMDkgLyogQXRvbUluZGljZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQXRvbUluZGljZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZCNDY3ODQxRkRGQjQ1MjAwM0ZDQjA5IC8qIEluZmVycmVkVHlwZUlubGluZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5mZXJyZWRUeXBlSW5saW5lcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0NzY3QzFEOTlBRUE3MDA4RUE2Q0IgLyog
R0NEZWZlcnJhbENvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR0NE
ZWZlcnJhbENvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNDc2N0Qx
RDk5QUVBNzAwOEVBNkNCIC8qIEdDRGVmZXJyYWxDb250ZXh0SW5saW5lcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBHQ0RlZmVycmFsQ29udGV4dElubGluZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNEI1MTAxNkIzQTk2NDAwM0Y2OTZCIC8qIERGR01p
bmlmaWVkSUQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTWluaWZpZWRJ
RC5oOyBwYXRoID0gZGZnL0RGR01pbmlmaWVkSUQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTU1MjUsNiArNTUzNCw3IEBACiAJCQkJMEY5NjMwMzUxRDQxOTJDMzAwNTYwOUQ5IC8q
IEFsbG9jYXRvckF0dHJpYnV0ZXMuY3BwICovLAogCQkJCTBGOTYzMDM2MUQ0MTkyQzMwMDU2MDlE
OSAvKiBBbGxvY2F0b3JBdHRyaWJ1dGVzLmggKi8sCiAJCQkJMEYzMENCNUQxRkNFNDZCNDAwNEI1
MzIzIC8qIEFsbG9jYXRvckZvck1vZGUuaCAqLywKKwkJCQkwRkI0Njc3RTFGRERBNkU1MDAzRkNC
MDkgLyogQXRvbUluZGljZXMuaCAqLywKIAkJCQkwRkRFODdGODFERkQwQzZEMDA2NEMzOTAgLyog
Q2VsbENvbnRhaW5lci5jcHAgKi8sCiAJCQkJMEYwNzBBNDIxRDU0M0E4OTAwNkU3MjMyIC8qIENl
bGxDb250YWluZXIuaCAqLywKIAkJCQkwRjA3MEE0MzFENTQzQTg5MDA2RTcyMzIgLyogQ2VsbENv
bnRhaW5lcklubGluZXMuaCAqLywKQEAgLTU2MTEsNiArNTYyMSw5IEBACiAJCQkJQzI1RjhCQ0Mx
NTc1NDRBOTAwMjQ1QjcxIC8qIEluY3JlbWVudGFsU3dlZXBlci5oICovLAogCQkJCTBGRENFMTJG
MUZCMTFEOUQwMDZGMzkwMSAvKiBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcCAqLywKIAkJ
CQkwRkRDRTEzMDFGQjExRDlEMDA2RjM5MDEgLyogSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5o
ICovLAorCQkJCTBGQjQ2NzdDMUZEREE2RDkwMDNGQ0IwOSAvKiBJc29DZWxsU2V0LmNwcCAqLywK
KwkJCQkwRkI0Njc3RDFGRERBNkQ5MDAzRkNCMDkgLyogSXNvQ2VsbFNldC5oICovLAorCQkJCTBG
QjQ2NzdCMUZEREE2RDgwMDNGQ0IwOSAvKiBJc29DZWxsU2V0SW5saW5lcy5oICovLAogCQkJCTBG
RENFMTJDMUZBRkI0REUwMDZGMzkwMSAvKiBJc29TdWJzcGFjZS5jcHAgKi8sCiAJCQkJMEZEQ0Ux
MkIxRkFGQjRERTAwNkYzOTAxIC8qIElzb1N1YnNwYWNlLmggKi8sCiAJCQkJMEY3NjZEMjkxNUE4
Q0MzNDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmNwcCAqLywKQEAgLTY0ODYsNiArNjQ5
OSw3IEBACiAJCQkJMEZCRjkyQjcxRkQ3NkZGQzAwQUMyOEE4IC8qIEluZmVycmVkU3RydWN0dXJl
V2F0Y2hwb2ludC5oICovLAogCQkJCTBGMEE3NTIwMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJl
ZFR5cGUuY3BwICovLAogCQkJCTBGMEE3NTIxMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5
cGUuaCAqLywKKwkJCQkwRkI0Njc4NDFGREZCNDUyMDAzRkNCMDkgLyogSW5mZXJyZWRUeXBlSW5s
aW5lcy5oICovLAogCQkJCTBGRkM5MjBGMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVU
YWJsZS5jcHAgKi8sCiAJCQkJMEZGQzkyMTAxQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlw
ZVRhYmxlLmggKi8sCiAJCQkJMEZGOEJERTgxQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVkVmFs
dWUuY3BwICovLApAQCAtNzk5Nyw2ICs4MDExLDcgQEAKIAkJCQkwRkVDODU3MjFCREFDREM3MDA4
MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQzYzQkMxRTYz
NDQwQzAwQzEzODM5IC8qIEFpckJsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkIzODc4RTFCRkJDNDREMDBFM0FCMUUgLyogQWlyQmxvY2tXb3JrbGlzdC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZCNDY3ODExRkREQTZGNzAwM0ZDQjA5IC8qIElzb0NlbGxTZXRJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc5QzdDQTFFNzRDOTNCMDBFQjM0RDEgLyogQWlyQnJl
YWtDcml0aWNhbEVkZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYxODMyQTFDNDVCRjA3MDA3
MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVD
ODU3NDFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggaW4gSGVhZGVycyAqLywK
QEAgLTg3NzgsNiArODc5Myw3IEBACiAJCQkJNzAxMTNENEMxQThEQjA5MzAwMzg0OEM0IC8qIEl0
ZXJhdG9yT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzBEQzNFMEExQjJERjJDNzAw
MDU0Mjk5IC8qIEl0ZXJhdG9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQx
MzBFMTZGNUNEMDBCMzQ0NjAgLyogSmF2YVNjcmlwdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZC
NDY3ODUxRkRGQjQ1NDAwM0ZDQjA5IC8qIEluZmVycmVkVHlwZUlubGluZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE1MDNGQTFBMTg4RTBGQjAwMDExMEYxNCAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1l
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNDBFMTZGNUNEMDBCMzQ0NjAgLyogSmF2YVNj
cmlwdENvcmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDE1MEUxNkY1Q0QwMEIzNDQ2MCAv
KiBKYXZhU2NyaXB0Q29yZVByZWZpeC5oIGluIEhlYWRlcnMgKi8sCkBAIC04OTczLDYgKzg5ODks
NyBAQAogCQkJCUFEMkZDQkU1MURCNThEQUQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUFERTgwMjk5MUUwOEYxREUwMDU4REU3OCAvKiBKU1dl
YkFzc2VtYmx5TGlua0Vycm9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JFNzFEQjU4REFE
MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseU1lbW9yeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZC
NDY3N0YxRkREQTZFOTAwM0ZDQjA5IC8qIEF0b21JbmRpY2VzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBRDJGQ0MwNTFEQjU4REFEMDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseU1vZHVsZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQUQyRkNCRTkxREI1OERBRDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlS
dW50aW1lRXJyb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQkVCMURCNThEQUQwMEIzRTcz
NiAvKiBKU1dlYkFzc2VtYmx5VGFibGUuaCBpbiBIZWFkZXJzICovLApAQCAtOTI1OSw2ICs5Mjc2
LDcgQEAKIAkJCQlDMjBCQTkyRDE2QkIxQzE1MDBCM0FFQTIgLyogU3RydWN0dXJlUmFyZURhdGFJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkzMzJBNTE0Q0E3REREMDA4NUYzQzYgLyog
U3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc2NkQzOTE1QUU0QTFGMDA4RjM2
M0UgLyogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEZCNDY3ODAxRkREQTZGMTAwM0ZDQjA5IC8qIElzb0NlbGxTZXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDQ0YwRDA4MEVGMEFBQjkwMDQxM0M4RiAvKiBTdHJ1Y3R1cmVTdHViSW5mby5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkM5MDQxNDgwRUI5MjUwOTAwRkUyNkZBIC8qIFN0cnVjdHVyZVRy
YW5zaXRpb25UYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3REYxMzcxRTI5NzBFMTAwOTU5
NTFCIC8qIFN1YnNwYWNlLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0F0b21JbmRpY2VzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQXRvbUluZGljZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9BdG9tSW5kaWNlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsKKworc3Ry
dWN0IEF0b21JbmRpY2VzIHsKKyAgICBBdG9tSW5kaWNlcygpIHsgfQorICAgIAorICAgIEF0b21J
bmRpY2VzKEhlYXBDZWxsKiBjZWxsKQorICAgICAgICA6IGJsb2NrKE1hcmtlZEJsb2NrOjpibG9j
a0ZvcihjZWxsKSkKKyAgICAgICAgLCBibG9ja0luZGV4KGJsb2NrLT5oYW5kbGUoKS5pbmRleCgp
KQorICAgICAgICAsIGF0b21OdW1iZXIoYmxvY2stPmF0b21OdW1iZXIoY2VsbCkpCisgICAgewor
ICAgIH0KKyAgICAKKyAgICBNYXJrZWRCbG9jayogYmxvY2s7CisgICAgc2l6ZV90IGJsb2NrSW5k
ZXg7CisgICAgc2l6ZV90IGF0b21OdW1iZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIyNTc3MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MCw4ICs0MCw5IEBACiAjaW5jbHVkZSAiSGVhcFNuYXBzaG90LmgiCiAjaW5jbHVkZSAiSGVhcFZl
cmlmaWVyLmgiCiAjaW5jbHVkZSAiSW5jcmVtZW50YWxTd2VlcGVyLmgiCi0jaW5jbHVkZSAiSW5m
ZXJyZWRTdHJ1Y3R1cmUuaCIKKyNpbmNsdWRlICJJbmZlcnJlZFR5cGVJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiSW50ZXJwcmV0ZXIuaCIKKyNpbmNsdWRlICJJc29DZWxsU2V0SW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkpJVFN0dWJSb3V0aW5lU2V0LmgiCiAjaW5jbHVkZSAiSklUV29ya2xpc3QuaCIKICNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCkBAIC01NTIsMTggKzU1MywxOCBAQCB2b2lkIEhlYXA6OmFk
ZFJlZmVyZW5jZShKU0NlbGwqIGNlbGwsIEFyCiAgICAgfQogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBDZWxsVHlwZT4KLXZvaWQgSGVhcDo6ZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycyhT
dWJzcGFjZSYgc3Vic3BhY2UpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgdHlwZW5hbWUg
Q2VsbFNldD4KK3ZvaWQgSGVhcDo6ZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycyhDZWxs
U2V0JiBjZWxsU2V0KQogewotICAgIHN1YnNwYWNlLmZvckVhY2hNYXJrZWRDZWxsKAorICAgIGNl
bGxTZXQuZm9yRWFjaE1hcmtlZENlbGwoCiAgICAgICAgIFsmXSAoSGVhcENlbGwqIGNlbGwsIEhl
YXBDZWxsOjpLaW5kKSB7Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxDZWxsVHlwZSo+KGNlbGwp
LT5maW5hbGl6ZVVuY29uZGl0aW9uYWxseSgqdm0oKSk7CisgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Q2VsbFR5cGUqPihjZWxsKS0+ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKnZtKCkp
OwogICAgICAgICB9KTsKIH0KIAogdm9pZCBIZWFwOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5h
bGl6ZXJzKCkKIHsKLSAgICBmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzPEluZmVycmVk
U3RydWN0dXJlPih2bSgpLT5pbmZlcnJlZFN0cnVjdHVyZVNwYWNlKTsKKyAgICBmaW5hbGl6ZVVu
Y29uZGl0aW9uYWxGaW5hbGl6ZXJzPEluZmVycmVkVHlwZT4odm0oKS0+aW5mZXJyZWRUeXBlc1dp
dGhGaW5hbGl6ZXJzKTsKICAgICAKICAgICB3aGlsZSAobV91bmNvbmRpdGlvbmFsRmluYWxpemVy
cy5oYXNOZXh0KCkpIHsKICAgICAgICAgVW5jb25kaXRpb25hbEZpbmFsaXplciogZmluYWxpemVy
ID0gbV91bmNvbmRpdGlvbmFsRmluYWxpemVycy5yZW1vdmVOZXh0KCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyMjU3NzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5Niw4ICs0OTYsOCBAQCBwcml2
YXRlOgogICAgIHZvaWQgbm90aWZ5SW5jcmVtZW50YWxTd2VlcGVyKCk7CiAgICAgdm9pZCBoYXJ2
ZXN0V2Vha1JlZmVyZW5jZXMoKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlPgot
ICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycyhTdWJzcGFjZSYpOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCB0eXBlbmFtZSBDZWxsU2V0PgorICAgIHZvaWQg
ZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycyhDZWxsU2V0Jik7CiAgICAgCiAgICAgdm9p
ZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKCk7CiAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSXNvQ2VsbFNldC5oIgorCisjaW5j
bHVkZSAiTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5s
aW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworSXNvQ2VsbFNldDo6SXNvQ2VsbFNldChJc29T
dWJzcGFjZSYgc3Vic3BhY2UpCisgICAgOiBtX3N1YnNwYWNlKHN1YnNwYWNlKQoreworICAgIHNp
emVfdCBzaXplID0gc3Vic3BhY2UubV9hbGxvY2F0b3IubV9ibG9ja3Muc2l6ZSgpOworICAgIG1f
YmxvY2tzV2l0aEJpdHMucmVzaXplKHNpemUpOworICAgIG1fYml0cy5ncm93KHNpemUpOworICAg
IHN1YnNwYWNlLm1fY2VsbFNldHMuYXBwZW5kKHRoaXMpOworfQorCitJc29DZWxsU2V0Ojp+SXNv
Q2VsbFNldCgpCit7CisgICAgaWYgKGlzT25MaXN0KCkpCisgICAgICAgIEJhc2ljUmF3U2VudGlu
ZWxOb2RlPElzb0NlbGxTZXQ+OjpyZW1vdmUoKTsKK30KKworTkVWRVJfSU5MSU5FIEJpdG1hcDxN
YXJrZWRCbG9jazo6YXRvbXNQZXJCbG9jaz4qIElzb0NlbGxTZXQ6OmFkZFNsb3coc2l6ZV90IGJs
b2NrSW5kZXgpCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3N1YnNwYWNlLm1fYWxs
b2NhdG9yLm1fYml0dmVjdG9yTG9jayk7CisgICAgYXV0byYgYml0c1B0clJlZiA9IG1fYml0c1ti
bG9ja0luZGV4XTsKKyAgICBhdXRvKiBiaXRzID0gYml0c1B0clJlZi5nZXQoKTsKKyAgICBpZiAo
IWJpdHMpIHsKKyAgICAgICAgYml0c1B0clJlZiA9IHN0ZDo6bWFrZV91bmlxdWU8Qml0bWFwPE1h
cmtlZEJsb2NrOjphdG9tc1BlckJsb2NrPj4oKTsKKyAgICAgICAgYml0cyA9IGJpdHNQdHJSZWYu
Z2V0KCk7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgIG1fYmxvY2tz
V2l0aEJpdHNbYmxvY2tJbmRleF0gPSB0cnVlOworICAgIH0KKyAgICByZXR1cm4gYml0czsKK30K
Kwordm9pZCBJc29DZWxsU2V0OjpkaWRSZXNpemVCaXRzKHNpemVfdCBuZXdTaXplKQoreworICAg
IG1fYmxvY2tzV2l0aEJpdHMucmVzaXplKG5ld1NpemUpOworICAgIG1fYml0cy5ncm93KG5ld1Np
emUpOworfQorCit2b2lkIElzb0NlbGxTZXQ6OmRpZFJlbW92ZUJsb2NrKHNpemVfdCBibG9ja0lu
ZGV4KQoreworICAgIG1fYmxvY2tzV2l0aEJpdHNbYmxvY2tJbmRleF0gPSBmYWxzZTsKKyAgICBt
X2JpdHNbYmxvY2tJbmRleF0gPSBudWxscHRyOworfQorCit2b2lkIElzb0NlbGxTZXQ6OnN3ZWVw
VG9GcmVlTGlzdChNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jaykKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVCghYmxvY2stPmlzQWxsb2NhdGVkKCkpOworICAgIAorICAgIGlmICghbV9ibG9ja3NXaXRo
Qml0c1tibG9jay0+aW5kZXgoKV0pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBXVEY6Omxv
YWRMb2FkRmVuY2UoKTsKKyAgICAKKyAgICBpZiAoIW1fYml0c1tibG9jay0+aW5kZXgoKV0pIHsK
KyAgICAgICAgZGF0YUxvZygiRkFUQUw6IGZvciBibG9jayBpbmRleCAiLCBibG9jay0+aW5kZXgo
KSwgIjpcbiIpOworICAgICAgICBkYXRhTG9nKCJCbG9ja3Mgd2l0aCBiaXRzIHNheXM6ICIsICEh
bV9ibG9ja3NXaXRoQml0c1tibG9jay0+aW5kZXgoKV0sICJcbiIpOworICAgICAgICBkYXRhTG9n
KCJCaXRzIHNheXM6ICIsIFJhd1BvaW50ZXIobV9iaXRzW2Jsb2NrLT5pbmRleCgpXS5nZXQoKSks
ICJcbiIpOworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAg
ICAKKyAgICBpZiAoYmxvY2stPmhhc0FueU5ld2x5QWxsb2NhdGVkKCkpIHsKKyAgICAgICAgbV9i
aXRzW2Jsb2NrLT5pbmRleCgpXS0+ZmlsdGVyKGJsb2NrLT5uZXdseUFsbG9jYXRlZCgpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChibG9jay0+aXNFbXB0eSgpIHx8IGJsb2Nr
LT5hcmVNYXJrc1N0YWxlKCkpIHsKKyAgICAgICAgbV9ibG9ja3NXaXRoQml0c1tibG9jay0+aW5k
ZXgoKV0gPSBmYWxzZTsKKyAgICAgICAgbV9iaXRzW2Jsb2NrLT5pbmRleCgpXSA9IG51bGxwdHI7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9iaXRzW2Jsb2NrLT5pbmRleCgp
XS0+ZmlsdGVyKGJsb2NrLT5ibG9jaygpLm1hcmtzKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXQuaAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4K
KyNpbmNsdWRlIDx3dGYvQ29uY3VycmVudFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0Qml0
VmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBIZWFwQ2VsbDsKK2NsYXNzIElz
b1N1YnNwYWNlOworCisvLyBDcmVhdGUgYSBzZXQgb2YgY2VsbHMgdGhhdCBhcmUgaW4gYW4gSXNv
U3Vic3BhY2UuIFRoaXMgYWxsb3dzIGNvbmN1cnJlbnQgTygxKSBzZXQgaW5zZXJ0aW9uIGFuZAor
Ly8gcmVtb3ZhbC4gRWFjaCBzdWNoIHNldCBzaG91bGQgYmUgdGhvdWdodCBvZiBhcyBhIDAuOCUg
aW5jcmVhc2UgaW4gb2JqZWN0IHNpemUgZm9yIG9iamVjdHMgaW4gdGhhdAorLy8gSXNvU3Vic3Bh
Y2UgKGl0J3MgbGlrZSBhZGRpbmcgMSBiaXQgZXZlcnkgMTYgYnl0ZXMsIG9yIDEgYml0IGV2ZXJ5
IDEyOCBiaXRzKS4KK2NsYXNzIElzb0NlbGxTZXQgOiBwdWJsaWMgQmFzaWNSYXdTZW50aW5lbE5v
ZGU8SXNvQ2VsbFNldD4geworcHVibGljOgorICAgIElzb0NlbGxTZXQoSXNvU3Vic3BhY2UmIHN1
YnNwYWNlKTsKKyAgICB+SXNvQ2VsbFNldCgpOworICAgIAorICAgIGJvb2wgYWRkKEhlYXBDZWxs
KiBjZWxsKTsKKyAgICAKKyAgICBib29sIHJlbW92ZShIZWFwQ2VsbCogY2VsbCk7CisgICAgCisg
ICAgYm9vbCBjb250YWlucyhIZWFwQ2VsbCogY2VsbCkgY29uc3Q7CisgICAgCisgICAgLy8gVGhp
cyB3aWxsIGhhdmUgdG8gZG8gYSBjb21iaW5lZCBzZWFyY2ggb3ZlciB3aGF0ZXZlciBTdWJzcGFj
ZTo6Zm9yRWFjaE1hcmtlZENlbGwgdXNlcyBhbmQKKyAgICAvLyBvdXIgbV9ibG9ja3NXaXRoQml0
cy4KKyAgICAvLyBOT1RFOiBJdCdzIGlsbGVnYWwgdG8gY2FsbCBhZGQoKSBvciByZW1vdmUoKSBj
b25jdXJyZW50bHkgdG8gdGhpcywgYnV0IHNlbGYtcmVtb3ZlKCkgd2lsbCB3b3JrLgorICAgIC8v
IEJ1dCBpdCdzIGJldHRlciBpZiB5b3UgcmV0dXJuIFJlbW92ZSBpbnN0ZWFkLgorICAgIGVudW0g
Y2xhc3MgRm9yRWFjaFJlc3VsdCB7CisgICAgICAgIENvbnRpbnVlLAorICAgICAgICBSZW1vdmVB
bmRDb250aW51ZSwKKyAgICB9OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9p
ZCBmb3JFYWNoTWFya2VkQ2VsbChjb25zdCBGdW5jJik7CisgICAgCitwcml2YXRlOgorICAgIGZy
aWVuZCBjbGFzcyBJc29TdWJzcGFjZTsKKyAgICAKKyAgICBCaXRtYXA8TWFya2VkQmxvY2s6OmF0
b21zUGVyQmxvY2s+KiBhZGRTbG93KHNpemVfdCBibG9ja0luZGV4KTsKKyAgICAKKyAgICB2b2lk
IGRpZFJlc2l6ZUJpdHMoc2l6ZV90IG5ld1NpemUpOworICAgIHZvaWQgZGlkUmVtb3ZlQmxvY2so
c2l6ZV90IGJsb2NrSW5kZXgpOworICAgIHZvaWQgc3dlZXBUb0ZyZWVMaXN0KE1hcmtlZEJsb2Nr
OjpIYW5kbGUqKTsKKyAgICAKKyAgICBJc29TdWJzcGFjZSYgbV9zdWJzcGFjZTsKKyAgICAKKyAg
ICAvLyBJZGVhOiBzd2VlcGluZyB0byBmcmVlLWxpc3QgY2xlYXJzIGJpdHMgZm9yIHRob3NlIGNl
bGxzIHRoYXQgd2VyZSBmcmVlLWxpc3RlZC4gVGhlIGZpcnN0IHRpbWUKKyAgICAvLyB3ZSBhZGQg
YSBjZWxsIGluIGEgYmxvY2ssIHRoYXQgYmxvY2sgZ2V0cyBhIGZyZWUtbGlzdC4gVW5sZXNzIHdl
IGRvIHNvbWV0aGluZyB0aGF0IG9idmlvdXNseQorICAgIC8vIGNsZWFycyBhbGwgYml0cyBmb3Ig
YSBibG9jaywgd2Uga2VlcCBpdCBzZXQgaW4gYmxvY2tzV2l0aEJpdHMuCisgICAgCisgICAgRmFz
dEJpdFZlY3RvciBtX2Jsb2Nrc1dpdGhCaXRzOworICAgIENvbmN1cnJlbnRWZWN0b3I8c3RkOjp1
bmlxdWVfcHRyPEJpdG1hcDxNYXJrZWRCbG9jazo6YXRvbXNQZXJCbG9jaz4+PiBtX2JpdHM7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSXNvQ2VsbFNldElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Jc29DZWxsU2V0SW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkF0b21JbmRpY2VzLmgiCisjaW5jbHVkZSAiSXNv
Q2VsbFNldC5oIgorI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworaW5saW5lIGJvb2wgSXNvQ2VsbFNldDo6YWRkKEhlYXBDZWxsKiBjZWxsKQorewor
ICAgIEF0b21JbmRpY2VzIGF0b21JbmRpY2VzKGNlbGwpOworICAgIGF1dG8mIGJpdHNQdHJSZWYg
PSBtX2JpdHNbYXRvbUluZGljZXMuYmxvY2tJbmRleF07CisgICAgYXV0byogYml0cyA9IGJpdHNQ
dHJSZWYuZ2V0KCk7CisgICAgaWYgKFVOTElLRUxZKCFiaXRzKSkKKyAgICAgICAgYml0cyA9IGFk
ZFNsb3coYXRvbUluZGljZXMuYmxvY2tJbmRleCk7CisgICAgcmV0dXJuICFiaXRzLT5jb25jdXJy
ZW50VGVzdEFuZFNldChhdG9tSW5kaWNlcy5hdG9tTnVtYmVyKTsKK30KKworaW5saW5lIGJvb2wg
SXNvQ2VsbFNldDo6cmVtb3ZlKEhlYXBDZWxsKiBjZWxsKQoreworICAgIEF0b21JbmRpY2VzIGF0
b21JbmRpY2VzKGNlbGwpOworICAgIGF1dG8mIGJpdHNQdHJSZWYgPSBtX2JpdHNbYXRvbUluZGlj
ZXMuYmxvY2tJbmRleF07CisgICAgYXV0byogYml0cyA9IGJpdHNQdHJSZWYuZ2V0KCk7CisgICAg
aWYgKCFiaXRzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGJpdHMtPmNvbmN1
cnJlbnRUZXN0QW5kQ2xlYXIoYXRvbUluZGljZXMuYXRvbU51bWJlcik7Cit9CisKK2lubGluZSBi
b29sIElzb0NlbGxTZXQ6OmNvbnRhaW5zKEhlYXBDZWxsKiBjZWxsKSBjb25zdAoreworICAgIEF0
b21JbmRpY2VzIGF0b21JbmRpY2VzKGNlbGwpOworICAgIGF1dG8qIGJpdHMgPSBtX2JpdHNbYXRv
bUluZGljZXMuYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgaWYgKGJpdHMpCisgICAgICAgIHJldHVy
biBiaXRzLT5nZXQoYXRvbUluZGljZXMuYXRvbU51bWJlcik7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgordm9pZCBJc29DZWxsU2V0Ojpmb3JFYWNoTWFy
a2VkQ2VsbChjb25zdCBGdW5jJiBmdW5jKQoreworICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2Nh
dG9yID0gbV9zdWJzcGFjZS5tX2FsbG9jYXRvcjsKKyAgICAoYWxsb2NhdG9yLm1fbWFya2luZ05v
dEVtcHR5ICYgbV9ibG9ja3NXaXRoQml0cykuZm9yRWFjaFNldEJpdCgKKyAgICAgICAgWyZdIChz
aXplX3QgYmxvY2tJbmRleCkgeworICAgICAgICAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogYmxv
Y2sgPSBhbGxvY2F0b3IubV9ibG9ja3NbYmxvY2tJbmRleF07CisKKyAgICAgICAgICAgIGF1dG8q
IGJpdHMgPSBtX2JpdHNbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBib29sIGhhZEJp
dHMgPSBmYWxzZTsKKyAgICAgICAgICAgIGJsb2NrLT5mb3JFYWNoTWFya2VkQ2VsbCgKKyAgICAg
ICAgICAgICAgICBbJl0gKHNpemVfdCBhdG9tTnVtYmVyLCBIZWFwQ2VsbCogY2VsbCwgSGVhcENl
bGw6OktpbmQga2luZCkgLT4gSXRlcmF0aW9uU3RhdHVzIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGJpdHMtPmdldChhdG9tTnVtYmVyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgRm9y
RWFjaFJlc3VsdCByZXN1bHQgPSBmdW5jKGNlbGwsIGtpbmQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgc3dpdGNoIChyZXN1bHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRm9y
RWFjaFJlc3VsdDo6Q29udGludWU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFkQml0
cyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlIEZvckVhY2hSZXN1bHQ6OlJlbW92ZUFuZENvbnRpbnVlOgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHMtPmNsZWFyKGF0b21OdW1iZXIpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJdGVyYXRp
b25TdGF0dXM6OkNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaWYg
KCFoYWRCaXRzKSB7CisgICAgICAgICAgICAgICAgbV9iaXRzW2Jsb2NrSW5kZXhdID0gbnVsbHB0
cjsKKyAgICAgICAgICAgICAgICBtX2Jsb2Nrc1dpdGhCaXRzW2Jsb2NrSW5kZXhdID0gZmFsc2U7
CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmNwcAkocmV2aXNp
b24gMjI1NzcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02Nyw1ICs2NywyOSBAQCB2b2lkKiBJc29TdWJzcGFjZTo6YWxs
b2NhdGVOb25WaXJ0dWFsKHNpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAordm9pZCBJc29TdWJz
cGFjZTo6ZGlkUmVzaXplQml0cyhzaXplX3QgYmxvY2tJbmRleCkKK3sKKyAgICBtX2NlbGxTZXRz
LmZvckVhY2goCisgICAgICAgIFsmXSAoSXNvQ2VsbFNldCogc2V0KSB7CisgICAgICAgICAgICBz
ZXQtPmRpZFJlc2l6ZUJpdHMoYmxvY2tJbmRleCk7CisgICAgICAgIH0pOworfQorCit2b2lkIElz
b1N1YnNwYWNlOjpkaWRSZW1vdmVCbG9jayhzaXplX3QgYmxvY2tJbmRleCkKK3sKKyAgICBtX2Nl
bGxTZXRzLmZvckVhY2goCisgICAgICAgIFsmXSAoSXNvQ2VsbFNldCogc2V0KSB7CisgICAgICAg
ICAgICBzZXQtPmRpZFJlbW92ZUJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICB9KTsKK30KKwor
dm9pZCBJc29TdWJzcGFjZTo6ZGlkQmVnaW5Td2VlcGluZ1RvRnJlZUxpc3QoTWFya2VkQmxvY2s6
OkhhbmRsZSogYmxvY2spCit7CisgICAgbV9jZWxsU2V0cy5mb3JFYWNoKAorICAgICAgICBbJl0g
KElzb0NlbGxTZXQqIHNldCkgeworICAgICAgICAgICAgc2V0LT5zd2VlcFRvRnJlZUxpc3QoYmxv
Y2spOworICAgICAgICB9KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuaAkocmV2aXNpb24gMjI1NzcwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMjcsMTAgKzI3LDEyIEBACiAKICNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3IuaCIKICNpbmNs
dWRlICJTdWJzcGFjZS5oIgorI2luY2x1ZGUgPHd0Zi9TaW5nbHlMaW5rZWRMaXN0V2l0aFRhaWwu
aD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I7
CitjbGFzcyBJc29DZWxsU2V0OwogCiBjbGFzcyBJc29TdWJzcGFjZSA6IHB1YmxpYyBTdWJzcGFj
ZSB7CiBwdWJsaWM6CkBAIC00Niw5ICs0OCwxNiBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCogYWxsb2NhdGVOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29u
dGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUp
OwogCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBJc29DZWxsU2V0OworICAgIAorICAgIHZv
aWQgZGlkUmVzaXplQml0cyhzaXplX3QgbmV3U2l6ZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRS
ZW1vdmVCbG9jayhzaXplX3QgYmxvY2tJbmRleCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRCZWdp
blN3ZWVwaW5nVG9GcmVlTGlzdChNYXJrZWRCbG9jazo6SGFuZGxlKikgb3ZlcnJpZGU7CisgICAg
CiAgICAgc2l6ZV90IG1fc2l6ZTsKICAgICBNYXJrZWRBbGxvY2F0b3IgbV9hbGxvY2F0b3I7CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I+IG1faXNvQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvcjsKKyAgICBTZW50aW5lbExpbmtlZExpc3Q8SXNvQ2VsbFNldCwgQmFz
aWNSYXdTZW50aW5lbE5vZGU8SXNvQ2VsbFNldD4+IG1fY2VsbFNldHM7CiB9OwogCiBpbmxpbmUg
TWFya2VkQWxsb2NhdG9yKiBJc29TdWJzcGFjZTo6YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXpl
X3Qgc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjI1NzcwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYxLDYgKzI2MSw3IEBAIHZvaWQgTWFya2VkQWxsb2NhdG9yOjphZGRCbG9jayhNYXJrZWRC
bG8KICAgICAgICAgICAgIEFTU0VSVChtX2Jsb2Nrcy5jYXBhY2l0eSgpID4gb2xkQ2FwYWNpdHkp
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2JpdHZlY3Rv
ckxvY2spOworICAgICAgICAgICAgc3Vic3BhY2UoKS0+ZGlkUmVzaXplQml0cyhtX2Jsb2Nrcy5j
YXBhY2l0eSgpKTsKICAgICAgICAgICAgIGZvckVhY2hCaXRWZWN0b3IoCiAgICAgICAgICAgICAg
ICAgbG9ja2VyLAogICAgICAgICAgICAgICAgIFsmXSAoRmFzdEJpdFZlY3RvciYgdmVjdG9yKSB7
CkBAIC0yOTAsNyArMjkxLDkgQEAgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OnJlbW92ZUJsb2NrKE1h
cmtlZAogewogICAgIEFTU0VSVChibG9jay0+YWxsb2NhdG9yKCkgPT0gdGhpcyk7CiAgICAgQVNT
RVJUKG1fYmxvY2tzW2Jsb2NrLT5pbmRleCgpXSA9PSBibG9jayk7Ci0KKyAgICAKKyAgICBzdWJz
cGFjZSgpLT5kaWRSZW1vdmVCbG9jayhibG9jay0+aW5kZXgoKSk7CisgICAgCiAgICAgbV9ibG9j
a3NbYmxvY2stPmluZGV4KCldID0gbnVsbHB0cjsKICAgICBtX2ZyZWVCbG9ja0luZGljZXMuYXBw
ZW5kKGJsb2NrLT5pbmRleCgpKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCShyZXZpc2lvbiAyMjU3NzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzgs
NiArMzgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgR0NEZWZlcnJhbENvbnRleHQ7CiBj
bGFzcyBIZWFwOworY2xhc3MgSXNvQ2VsbFNldDsKIGNsYXNzIE1hcmtlZFNwYWNlOwogY2xhc3Mg
TExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCkBAIC0xNjIsNiArMTYzLDcgQEAgcHVibGljOgogICAg
IHZvaWQgZHVtcEJpdHMoUHJpbnRTdHJlYW0mID0gV1RGOjpkYXRhRmlsZSgpKTsKICAgICAKIHBy
aXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIElzb0NlbGxTZXQ7CiAgICAgZnJpZW5kIGNsYXNzIE1h
cmtlZEJsb2NrOwogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlU2xv
d0Nhc2UoR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1v
ZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9ySW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFs
bG9jYXRvcklubGluZXMuaAkocmV2aXNpb24gMjI1NzcwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2
ICsyNyw3IEBACiAKICNpbmNsdWRlICJGcmVlTGlzdElubGluZXMuaCIKICNpbmNsdWRlICJNYXJr
ZWRBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJWTS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkocmV2aXNpb24g
MjI1NzcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMDEsMTEgKzMwMSw2IEBAIHNpemVfdCBNYXJrZWRCbG9jazo6bWFy
a0NvdW50KCkKICAgICByZXR1cm4gYXJlTWFya3NTdGFsZSgpID8gMCA6IG1fbWFya3MuY291bnQo
KTsKIH0KIAotYm9vbCBNYXJrZWRCbG9jazo6SGFuZGxlOjppc0VtcHR5KCkKLXsKLSAgICByZXR1
cm4gbV9hbGxvY2F0b3ItPmlzRW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzKTsKLX0KLQog
dm9pZCBNYXJrZWRCbG9jazo6Y2xlYXJIYXNBbnlNYXJrZWQoKQogewogICAgIG1fYmlhc2VkTWFy
a0NvdW50ID0gbV9tYXJrQ291bnRCaWFzOwpAQCAtNDAzLDExICszOTgsMTMgQEAgdm9pZCBNYXJr
ZWRCbG9jazo6SGFuZGxlOjpzd2VlcChGcmVlTGlzdAogICAgICAgICByZXR1cm47CiAKICAgICBS
RUxFQVNFX0FTU0VSVCghbV9pc0ZyZWVMaXN0ZWQpOwotICAgIFJFTEVBU0VfQVNTRVJUKCFtX2Fs
bG9jYXRvci0+aXNBbGxvY2F0ZWQoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzKSk7CisgICAgUkVM
RUFTRV9BU1NFUlQoIWlzQWxsb2NhdGVkKCkpOwogICAgIAogICAgIGlmIChzcGFjZSgpLT5pc01h
cmtpbmcoKSkKICAgICAgICAgYmxvY2soKS5tX2xvY2subG9jaygpOwogICAgIAorICAgIHN1YnNw
YWNlKCktPmRpZEJlZ2luU3dlZXBpbmdUb0ZyZWVMaXN0KHRoaXMpOworICAgIAogICAgIGlmIChu
ZWVkc0Rlc3RydWN0aW9uKSB7CiAgICAgICAgIHN1YnNwYWNlKCktPmZpbmlzaFN3ZWVwKCp0aGlz
LCBmcmVlTGlzdCk7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gMjI1NzcwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTYyLDYgKzE2Miw4
IEBAIHB1YmxpYzoKICAgICAgICAgc2l6ZV90IG1hcmtDb3VudCgpOwogICAgICAgICBzaXplX3Qg
c2l6ZSgpOwogICAgICAgICAKKyAgICAgICAgYm9vbCBpc0FsbG9jYXRlZCgpOworICAgICAgICAK
ICAgICAgICAgYm9vbCBpc0xpdmUoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIEhlYXBWZXJz
aW9uIG5ld2x5QWxsb2NhdGVkVmVyc2lvbiwgYm9vbCBpc01hcmtpbmcsIGNvbnN0IEhlYXBDZWxs
Kik7CiAgICAgICAgIGlubGluZSBib29sIGlzTGl2ZUNlbGwoSGVhcFZlcnNpb24gbWFya2luZ1Zl
cnNpb24sIEhlYXBWZXJzaW9uIG5ld2x5QWxsb2NhdGVkVmVyc2lvbiwgYm9vbCBpc01hcmtpbmcs
IGNvbnN0IHZvaWQqKTsKIApAQCAtMTczLDYgKzE3NSw3IEBAIHB1YmxpYzoKICAgICAgICAgYm9v
bCBpc05ld2x5QWxsb2NhdGVkKGNvbnN0IHZvaWQqKTsKICAgICAgICAgdm9pZCBzZXROZXdseUFs
bG9jYXRlZChjb25zdCB2b2lkKik7CiAgICAgICAgIHZvaWQgY2xlYXJOZXdseUFsbG9jYXRlZChj
b25zdCB2b2lkKik7CisgICAgICAgIGNvbnN0IEJpdG1hcDxhdG9tc1BlckJsb2NrPiYgbmV3bHlB
bGxvY2F0ZWQoKSBjb25zdDsKICAgICAgICAgCiAgICAgICAgIEhlYXBWZXJzaW9uIG5ld2x5QWxs
b2NhdGVkVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fbmV3bHlBbGxvY2F0ZWRWZXJzaW9uOyB9
CiAgICAgICAgIApAQCAtMjI3LDcgKzIzMCw3IEBAIHB1YmxpYzoKICAgICAgICAgc2l6ZV90IG1f
YXRvbXNQZXJDZWxsIHsgc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSB9OwogICAg
ICAgICBzaXplX3QgbV9lbmRBdG9tIHsgc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgo
KSB9OyAvLyBUaGlzIGlzIGEgZnV6enkgZW5kLiBBbHdheXMgdGVzdCBmb3IgPCBtX2VuZEF0b20u
CiAgICAgICAgICAgICAKLSAgICAgICAgV1RGOjpCaXRtYXA8YXRvbXNQZXJCbG9jaz4gbV9uZXds
eUFsbG9jYXRlZDsKKyAgICAgICAgQml0bWFwPGF0b21zUGVyQmxvY2s+IG1fbmV3bHlBbGxvY2F0
ZWQ7CiAgICAgICAgICAgICAKICAgICAgICAgQWxsb2NhdG9yQXR0cmlidXRlcyBtX2F0dHJpYnV0
ZXM7CiAgICAgICAgIGJvb2wgbV9pc0ZyZWVMaXN0ZWQgeyBmYWxzZSB9OwpAQCAtMjk0LDYgKzI5
Nyw4IEBAIHB1YmxpYzoKICAgICBib29sIGlzTWFya2VkUmF3KGNvbnN0IHZvaWQqIHApOwogICAg
IEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXJraW5nVmVy
c2lvbjsgfQogICAgIAorICAgIGNvbnN0IEJpdG1hcDxhdG9tc1BlckJsb2NrPiYgbWFya3MoKSBj
b25zdDsKKyAgICAKICAgICBDb3VudGluZ0xvY2smIGxvY2soKSB7IHJldHVybiBtX2xvY2s7IH0K
IAogcHJpdmF0ZToKQEAgLTM0Niw3ICszNTEsNyBAQCBwcml2YXRlOgogCiAgICAgSGVhcFZlcnNp
b24gbV9tYXJraW5nVmVyc2lvbjsKIAotICAgIFdURjo6Qml0bWFwPGF0b21zUGVyQmxvY2s+IG1f
bWFya3M7CisgICAgQml0bWFwPGF0b21zUGVyQmxvY2s+IG1fbWFya3M7CiB9OwogCiBpbmxpbmUg
TWFya2VkQmxvY2s6OkhhbmRsZSYgTWFya2VkQmxvY2s6OmhhbmRsZSgpCkBAIC01MzIsNiArNTM3
LDExIEBAIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjp0ZXN0QW5kU2V0TWFya2UKICAgICByZXR1
cm4gbV9tYXJrcy5jb25jdXJyZW50VGVzdEFuZFNldChhdG9tTnVtYmVyKHApLCBkZXBlbmRlbmN5
KTsKIH0KIAoraW5saW5lIGNvbnN0IEJpdG1hcDxNYXJrZWRCbG9jazo6YXRvbXNQZXJCbG9jaz4m
IE1hcmtlZEJsb2NrOjptYXJrcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbWFya3M7Cit9CisK
IGlubGluZSBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzTmV3bHlBbGxvY2F0ZWQoY29uc3Qg
dm9pZCogcCkKIHsKICAgICByZXR1cm4gbV9uZXdseUFsbG9jYXRlZC5nZXQobV9ibG9jay0+YXRv
bU51bWJlcihwKSk7CkBAIC01NDcsNiArNTU3LDExIEBAIGlubGluZSB2b2lkIE1hcmtlZEJsb2Nr
OjpIYW5kbGU6OmNsZWFyTmUKICAgICBtX25ld2x5QWxsb2NhdGVkLmNsZWFyKG1fYmxvY2stPmF0
b21OdW1iZXIocCkpOwogfQogCitpbmxpbmUgY29uc3QgQml0bWFwPE1hcmtlZEJsb2NrOjphdG9t
c1BlckJsb2NrPiYgTWFya2VkQmxvY2s6OkhhbmRsZTo6bmV3bHlBbGxvY2F0ZWQoKSBjb25zdAor
eworICAgIHJldHVybiBtX25ld2x5QWxsb2NhdGVkOworfQorCiBpbmxpbmUgYm9vbCBNYXJrZWRC
bG9jazo6aXNBdG9tKGNvbnN0IHZvaWQqIHApCiB7CiAgICAgQVNTRVJUKE1hcmtlZEJsb2NrOjpp
c0F0b21BbGlnbmVkKHApKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZEJsb2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZEJsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAyMjU3NzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtOTEs
NiArOTEsMTEgQEAgaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6Om1hcmtzQ29udmV5TGl2ZQogICAg
ICAgICB8fCBNYXJrZWRTcGFjZTo6bmV4dFZlcnNpb24obXlNYXJraW5nVmVyc2lvbikgPT0gbWFy
a2luZ1ZlcnNpb247CiB9CiAKK2lubGluZSBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzQWxs
b2NhdGVkKCkKK3sKKyAgICByZXR1cm4gbV9hbGxvY2F0b3ItPmlzQWxsb2NhdGVkKE5vTG9ja2lu
Z05lY2Vzc2FyeSwgdGhpcyk7Cit9CisKIEFMV0FZU19JTkxJTkUgYm9vbCBNYXJrZWRCbG9jazo6
SGFuZGxlOjppc0xpdmUoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIEhlYXBWZXJzaW9uIG5l
d2x5QWxsb2NhdGVkVmVyc2lvbiwgYm9vbCBpc01hcmtpbmcsIGNvbnN0IEhlYXBDZWxsKiBjZWxs
KQogewogICAgIGlmIChhbGxvY2F0b3IoKS0+aXNBbGxvY2F0ZWQoTm9Mb2NraW5nTmVjZXNzYXJ5
LCB0aGlzKSkKQEAgLTQzNCw2ICs0MzksMTEgQEAgaW5saW5lIE1hcmtlZEJsb2NrOjpIYW5kbGU6
OlN3ZWVwRGVzdHJ1YwogICAgIHJldHVybiBCbG9ja0hhc05vRGVzdHJ1Y3RvcnM7CiB9CiAKK2lu
bGluZSBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzRW1wdHkoKQoreworICAgIHJldHVybiBt
X2FsbG9jYXRvci0+aXNFbXB0eShOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMpOworfQorCiBpbmxp
bmUgTWFya2VkQmxvY2s6OkhhbmRsZTo6RW1wdHlNb2RlIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmVt
cHR5TW9kZSgpCiB7CiAgICAgLy8gSXQncyBub3Qgb2J2aW91cywgYnV0IHRoaXMgaXMgdGhlIG9u
bHkgd2F5IHRvIGtub3cgaWYgdGhlIGJsb2NrIGlzIGVtcHR5LiBJdCdzIHRoZSBvbmx5CkBAIC00
NDEsNyArNDUxLDcgQEAgaW5saW5lIE1hcmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBNYQog
ICAgIC8vIC0gSXQncyB0cnVlIHdoZW4gdGhlIGJsb2NrIGlzIGZyZXNobHkgYWxsb2NhdGVkLgog
ICAgIC8vIC0gSXQncyB0cnVlIGlmIHRoZSBibG9jayBoYWQgYmVlbiBzd2VwdCBpbiB0aGUgcGFz
dCwgYWxsIGRlc3RydWN0b3JzIHdlcmUgY2FsbGVkLCBhbmQgdGhhdAogICAgIC8vICAgc3dlZXAg
cHJvdmVkIHRoYXQgdGhlIGJsb2NrIGlzIGVtcHR5LgotICAgIHJldHVybiBtX2FsbG9jYXRvci0+
aXNFbXB0eShOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMpID8gSXNFbXB0eSA6IE5vdEVtcHR5Owor
ICAgIHJldHVybiBpc0VtcHR5KCkgPyBJc0VtcHR5IDogTm90RW1wdHk7CiB9CiAKIGlubGluZSBN
YXJrZWRCbG9jazo6SGFuZGxlOjpTY3JpYmJsZU1vZGUgTWFya2VkQmxvY2s6OkhhbmRsZTo6c2Ny
aWJibGVNb2RlKCkKQEAgLTUxMiwxMSArNTIyLDEyIEBAIGlubGluZSBJdGVyYXRpb25TdGF0dXMg
TWFya2VkQmxvY2s6OkhhbmQKICAgICBpZiAoYXJlTWFya3NTdGFsZSkKICAgICAgICAgcmV0dXJu
IEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CiAgICAgZm9yIChzaXplX3QgaSA9IGZpcnN0QXRv
bSgpOyBpIDwgbV9lbmRBdG9tOyBpICs9IG1fYXRvbXNQZXJDZWxsKSB7Ci0gICAgICAgIEhlYXBD
ZWxsKiBjZWxsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8SGVhcENlbGwqPigmbV9ibG9jay0+YXRv
bXMoKVtpXSk7Ci0gICAgICAgIGlmICghYmxvY2suaXNNYXJrZWRSYXcoY2VsbCkpCisgICAgICAg
IGlmICghYmxvY2subV9tYXJrcy5nZXQoaSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAg
ICAgICBpZiAoZnVuY3RvcihjZWxsLCBraW5kKSA9PSBJdGVyYXRpb25TdGF0dXM6OkRvbmUpCisg
ICAgICAgIEhlYXBDZWxsKiBjZWxsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8SGVhcENlbGwqPigm
bV9ibG9jay0+YXRvbXMoKVtpXSk7CisKKyAgICAgICAgaWYgKGZ1bmN0b3IoaSwgY2VsbCwga2lu
ZCkgPT0gSXRlcmF0aW9uU3RhdHVzOjpEb25lKQogICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlv
blN0YXR1czo6RG9uZTsKICAgICB9CiAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGlu
dWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuY3BwCShyZXZpc2lv
biAyMjU3NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEyNiw1ICsxMjYsMTcgQEAgUmVmUHRyPFNoYXJlZFRhc2s8TWFya2Vk
QmxvY2s6OkhhbmRsZSooKQogICAgICAgICB9KTsKIH0KIAordm9pZCBTdWJzcGFjZTo6ZGlkUmVz
aXplQml0cyhzaXplX3QpCit7Cit9CisKK3ZvaWQgU3Vic3BhY2U6OmRpZFJlbW92ZUJsb2NrKHNp
emVfdCkKK3sKK30KKwordm9pZCBTdWJzcGFjZTo6ZGlkQmVnaW5Td2VlcGluZ1RvRnJlZUxpc3Qo
TWFya2VkQmxvY2s6OkhhbmRsZSopCit7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHJldmlzaW9uIDIyNTc3MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTkzLDYgKzkzLDEwIEBAIHB1YmxpYzoKICAgICAKICAgICBTdWJzcGFjZSogbmV4dFN1YnNwYWNl
SW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9uZXh0U3Vic3BhY2VJ
bkFsaWduZWRNZW1vcnlBbGxvY2F0b3I7IH0KICAgICB2b2lkIHNldE5leHRTdWJzcGFjZUluQWxp
Z25lZE1lbW9yeUFsbG9jYXRvcihTdWJzcGFjZSogc3Vic3BhY2UpIHsgbV9uZXh0U3Vic3BhY2VJ
bkFsaWduZWRNZW1vcnlBbGxvY2F0b3IgPSBzdWJzcGFjZTsgfQorICAgIAorICAgIHZpcnR1YWwg
dm9pZCBkaWRSZXNpemVCaXRzKHNpemVfdCBuZXdTaXplKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
UmVtb3ZlQmxvY2soc2l6ZV90IGJsb2NrSW5kZXgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRCZWdp
blN3ZWVwaW5nVG9GcmVlTGlzdChNYXJrZWRCbG9jazo6SGFuZGxlKik7CiAKIHByb3RlY3RlZDoK
ICAgICB2b2lkIGluaXRpYWxpemUoSGVhcENlbGxUeXBlKiwgQWxpZ25lZE1lbW9yeUFsbG9jYXRv
ciopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVz
LmgJKHJldmlzaW9uIDIyNTc3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNw
YWNlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3IEBAIHZvaWQgU3Vic3Bh
Y2U6OmZvckVhY2hNYXJrZWRDZWxsKGNvbnN0IEYKICAgICBmb3JFYWNoTm90RW1wdHlNYXJrZWRC
bG9jaygKICAgICAgICAgWyZdIChNYXJrZWRCbG9jazo6SGFuZGxlKiBoYW5kbGUpIHsKICAgICAg
ICAgICAgIGhhbmRsZS0+Zm9yRWFjaE1hcmtlZENlbGwoCi0gICAgICAgICAgICAgICAgWyZdIChI
ZWFwQ2VsbCogY2VsbCwgSGVhcENlbGw6OktpbmQga2luZCkgLT4gSXRlcmF0aW9uU3RhdHVzIHsg
CisgICAgICAgICAgICAgICAgWyZdIChzaXplX3QsIEhlYXBDZWxsKiBjZWxsLCBIZWFwQ2VsbDo6
S2luZCBraW5kKSAtPiBJdGVyYXRpb25TdGF0dXMgewogICAgICAgICAgICAgICAgICAgICBmdW5j
KGNlbGwsIGtpbmQpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVz
OjpDb250aW51ZTsKICAgICAgICAgICAgICAgICB9KTsKQEAgLTk5LDcgKzk5LDcgQEAgUmVmUHRy
PFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gUwogICAgICAgICB7CiAgICAgICAgICAg
ICB3aGlsZSAoTWFya2VkQmxvY2s6OkhhbmRsZSogaGFuZGxlID0gbV9ibG9ja1NvdXJjZS0+cnVu
KCkpIHsKICAgICAgICAgICAgICAgICBoYW5kbGUtPmZvckVhY2hNYXJrZWRDZWxsKAotICAgICAg
ICAgICAgICAgICAgICBbJl0gKEhlYXBDZWxsKiBjZWxsLCBIZWFwQ2VsbDo6S2luZCBraW5kKSAt
PiBJdGVyYXRpb25TdGF0dXMgeworICAgICAgICAgICAgICAgICAgICBbJl0gKHNpemVfdCwgSGVh
cENlbGwqIGNlbGwsIEhlYXBDZWxsOjpLaW5kIGtpbmQpIC0+IEl0ZXJhdGlvblN0YXR1cyB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2Z1bmModmlzaXRvciwgY2VsbCwga2luZCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKICAg
ICAgICAgICAgICAgICAgICAgfSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbmZlcnJlZFN0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAyMjU3NzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFN0cnVjdHVyZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDY0ICsyNywxNyBAQAogI2luY2x1ZGUgIkluZmVycmVkU3RydWN0dXJl
LmgiCiAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lu
bGluZXMuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNvbnN0IENsYXNzSW5mbyBJbmZlcnJlZFN0
cnVjdHVyZTo6c19pbmZvID0geyAiSW5mZXJyZWRTdHJ1Y3R1cmUiLCBudWxscHRyLCBudWxscHRy
LCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEluZmVycmVkU3RydWN0dXJlKSB9OwotCi1J
bmZlcnJlZFN0cnVjdHVyZSogSW5mZXJyZWRTdHJ1Y3R1cmU6OmNyZWF0ZShWTSYgdm0sIEdDRGVm
ZXJyYWxDb250ZXh0JiBkZWZlcnJhbENvbnRleHQsIEluZmVycmVkVHlwZSogcGFyZW50LCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKLXsKLSAgICBJbmZlcnJlZFN0cnVjdHVyZSogcmVzdWx0ID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SW5mZXJyZWRTdHJ1Y3R1cmU+KHZtLmhlYXAsICZkZWZl
cnJhbENvbnRleHQpKSBJbmZlcnJlZFN0cnVjdHVyZSh2bSwgcGFyZW50LCBzdHJ1Y3R1cmUpOwot
ICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0sIHN0cnVjdHVyZSk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotdm9pZCBJbmZlcnJlZFN0cnVjdHVyZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwp
Ci17Ci0gICAgSW5mZXJyZWRTdHJ1Y3R1cmUqIGluZmVycmVkU3RydWN0dXJlID0gc3RhdGljX2Nh
c3Q8SW5mZXJyZWRTdHJ1Y3R1cmUqPihjZWxsKTsKLSAgICBpbmZlcnJlZFN0cnVjdHVyZS0+SW5m
ZXJyZWRTdHJ1Y3R1cmU6On5JbmZlcnJlZFN0cnVjdHVyZSgpOwotfQotCi1TdHJ1Y3R1cmUqIElu
ZmVycmVkU3RydWN0dXJlOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKLXsKLSAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotfQotCi12b2lkIEluZmVycmVkU3RydWN0dXJlOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAg
SW5mZXJyZWRTdHJ1Y3R1cmUqIGluZmVycmVkU3RydWN0dXJlID0ganNDYXN0PEluZmVycmVkU3Ry
dWN0dXJlKj4oY2VsbCk7Ci0gICAgCi0gICAgdmlzaXRvci5hcHBlbmQoaW5mZXJyZWRTdHJ1Y3R1
cmUtPm1fcGFyZW50KTsKLX0KLQotdm9pZCBJbmZlcnJlZFN0cnVjdHVyZTo6ZmluYWxpemVVbmNv
bmRpdGlvbmFsbHkoVk0mKQotewotICAgIEFTU0VSVChIZWFwOjppc01hcmtlZChtX3BhcmVudC5n
ZXQoKSkpOwotICAgIAotICAgIC8vIE1vbm90b25pY2l0eSBlbnN1cmVzIHRoYXQgd2Ugc2hvdWxk
bid0IHNlZSBhIG5ldyBzdHJ1Y3R1cmUgdGhhdCBpcyBkaWZmZXJlbnQgZnJvbSB1cywgYnV0IHdl
Ci0gICAgLy8gY291bGQgaGF2ZSBiZWVuIG51bGxlZC4gV2Ugb25seSByZWx5IG9uIGl0IGJlaW5n
IHRoZSBudWxsIGNhc2Ugb25seSBpbiBkZWJ1Zy4KLSAgICBpZiAodGhpcyA9PSBtX3BhcmVudC0+
bV9zdHJ1Y3R1cmUuZ2V0KCkpIHsKLSAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX3N0cnVj
dHVyZS5nZXQoKSkpCi0gICAgICAgICAgICBtX3BhcmVudC0+cmVtb3ZlU3RydWN0dXJlKCk7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIEFTU0VSVCghbV9wYXJlbnQtPm1fc3RydWN0dXJlKTsKLSAgICAK
LSAgICAvLyBXZSdsbCBnZXQgZGVsZXRlZCBvbiB0aGUgbmV4dCBHQy4gVGhhdCdzIGEgbGl0dGxl
IHdlaXJkLCBidXQgbm90IGhhcm1mdWwsIHNpbmNlIGl0IG9ubHkgaGFwcGVucwotICAgIC8vIHdo
ZW4gdGhlIEluZmVycmVkVHlwZSB0aGF0IHdlIHdlcmUgcGFpcmVkIHRvIHdvdWxkIGhhdmUgc3Vy
dml2ZWQuIEl0IGp1c3QgbWVhbnMgYSB0aW55IG1pc3NlZAotICAgIC8vIG9wcG9ydHVuaXR5IGZv
ciBoZWFwIHNpemUgcmVkdWN0aW9uLgotfQorV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKElu
ZmVycmVkU3RydWN0dXJlKTsKIAogSW5mZXJyZWRTdHJ1Y3R1cmU6OkluZmVycmVkU3RydWN0dXJl
KFZNJiB2bSwgSW5mZXJyZWRUeXBlKiBwYXJlbnQsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAg
IDogQmFzZSh2bSwgdm0uaW5mZXJyZWRTdHJ1Y3R1cmVTdHJ1Y3R1cmUuZ2V0KCkpCi0gICAgLCBt
X3BhcmVudCh2bSwgdGhpcywgcGFyZW50KQotICAgICwgbV9zdHJ1Y3R1cmUodm0sIHRoaXMsIHN0
cnVjdHVyZSkKLXsKLX0KLQotdm9pZCBJbmZlcnJlZFN0cnVjdHVyZTo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IHBhcmVudChwYXJlbnQpCisgICAg
LCBzdHJ1Y3R1cmUodm0sIHBhcmVudCwgc3RydWN0dXJlKQogewotICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKHZtKTsKLSAgICBzdHJ1Y3R1cmUtPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KCZtX3dh
dGNocG9pbnQpOworICAgIHN0cnVjdHVyZS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoJndhdGNo
cG9pbnQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0luZmVycmVkU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1cmUuaAkocmV2aXNpb24gMjI1Nzcw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1cmUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNTEgKzI2LDIzIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1
ZGUgIkluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludC5oIgotI2luY2x1ZGUgIkpTQ2VsbC5oIgot
I2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisjaW5jbHVkZSA8d3Rm
L0lzb01hbGxvYy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSW5mZXJyZWRUeXBlOwor
Y2xhc3MgU3RydWN0dXJlOwogCi1jbGFzcyBJbmZlcnJlZFN0cnVjdHVyZSBmaW5hbCA6IHB1Ymxp
YyBKU0NlbGwgeworY2xhc3MgSW5mZXJyZWRTdHJ1Y3R1cmUgZmluYWwgeworICAgIFdURl9NQUtF
X0lTT19BTExPQ0FURUQoSW5mZXJyZWRTdHJ1Y3R1cmUpOwogcHVibGljOgotICAgIHR5cGVkZWYg
SlNDZWxsIEJhc2U7Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGU+Ci0gICAg
c3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCi0gICAgewotICAgICAgICBy
ZXR1cm4gJnZtLmluZmVycmVkU3RydWN0dXJlU3BhY2U7Ci0gICAgfQotICAgIAotICAgIHN0YXRp
YyBJbmZlcnJlZFN0cnVjdHVyZSogY3JlYXRlKFZNJiwgR0NEZWZlcnJhbENvbnRleHQmLCBJbmZl
cnJlZFR5cGUqIHBhcmVudCwgU3RydWN0dXJlKik7Ci0gICAgCi0gICAgc3RhdGljIGNvbnN0IGJv
b2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7Ci0gICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0Nl
bGwqKTsKLSAgICAKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBT
dHJ1Y3R1cmVJc0ltbW9ydGFsIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7Ci0KLSAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUg
cHJvdG90eXBlKTsKLSAgICAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgCi0gICAgSW5mZXJyZWRU
eXBlKiBwYXJlbnQoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudC5nZXQoKTsgfQotICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7IH0KLSAg
ICAKLSAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJik7Ci0KLXByaXZhdGU6CiAg
ICAgSW5mZXJyZWRTdHJ1Y3R1cmUoVk0mLCBJbmZlcnJlZFR5cGUqIHBhcmVudCwgU3RydWN0dXJl
Kik7CisKKyAgICBJbmZlcnJlZFR5cGUqIHBhcmVudDsKKyAgICBXcml0ZUJhcnJpZXI8U3RydWN0
dXJlPiBzdHJ1Y3R1cmU7CiAgICAgCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFN0cnVj
dHVyZSopOwotICAgIAotICAgIFdyaXRlQmFycmllcjxJbmZlcnJlZFR5cGU+IG1fcGFyZW50Owot
ICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOwotICAgIAotICAgIGZyaWVu
ZCBjbGFzcyBJbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQ7Ci0gICAgSW5mZXJyZWRTdHJ1Y3R1
cmVXYXRjaHBvaW50IG1fd2F0Y2hwb2ludDsKKyAgICBJbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9p
bnQgd2F0Y2hwb2ludDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFN0cnVjdHVy
ZVdhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAyMjU3NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNCwxMiArMzQsMTQgQEAgdm9pZCBJbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQ6OmZp
cmVJbgogewogICAgIEluZmVycmVkU3RydWN0dXJlKiBpbmZlcnJlZFN0cnVjdHVyZSA9CiAgICAg
ICAgIGJpdHdpc2VfY2FzdDxJbmZlcnJlZFN0cnVjdHVyZSo+KAotICAgICAgICAgICAgYml0d2lz
ZV9jYXN0PGNoYXIqPih0aGlzKSAtIE9CSkVDVF9PRkZTRVRPRihJbmZlcnJlZFN0cnVjdHVyZSwg
bV93YXRjaHBvaW50KSk7CisgICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpIC0g
T0JKRUNUX09GRlNFVE9GKEluZmVycmVkU3RydWN0dXJlLCB3YXRjaHBvaW50KSk7CiAKLSAgICBp
ZiAoIWluZmVycmVkU3RydWN0dXJlLT5pc0xpdmUoKSkKKyAgICBJbmZlcnJlZFR5cGUqIGluZmVy
cmVkVHlwZSA9IGluZmVycmVkU3RydWN0dXJlLT5wYXJlbnQ7CisgICAgCisgICAgaWYgKCFpbmZl
cnJlZFR5cGUtPmlzTGl2ZSgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgaW5mZXJyZWRT
dHJ1Y3R1cmUtPm1fcGFyZW50LT5yZW1vdmVTdHJ1Y3R1cmUoKTsKKyAgICBpbmZlcnJlZFR5cGUt
PnJlbW92ZVN0cnVjdHVyZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlLmNwcAkocmV2aXNpb24g
MjI1NzcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkluZmVycmVkVHlwZS5oIgogCi0jaW5jbHVkZSAiR0NEZWZlcnJhbENvbnRleHRJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiSXNvQ2VsbFNldElubGluZXMuaCIKICNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtODYsNyArODYsOCBAQCBTdHJ1Y3R1cmUq
IEluZmVycmVkVHlwZTo6Y3JlYXRlU3RydWN0dXJlCiB2b2lkIEluZmVycmVkVHlwZTo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEluZmVy
cmVkVHlwZSogaW5mZXJyZWRUeXBlID0ganNDYXN0PEluZmVycmVkVHlwZSo+KGNlbGwpOwotICAg
IHZpc2l0b3IuYXBwZW5kKGluZmVycmVkVHlwZS0+bV9zdHJ1Y3R1cmUpOworICAgIGlmIChpbmZl
cnJlZFR5cGUtPm1fc3RydWN0dXJlKQorICAgICAgICB2aXNpdG9yLnZtKCkuaW5mZXJyZWRUeXBl
c1dpdGhGaW5hbGl6ZXJzLmFkZChpbmZlcnJlZFR5cGUpOwogfQogCiBJbmZlcnJlZFR5cGU6Oktp
bmQgSW5mZXJyZWRUeXBlOjpraW5kRm9yRmxhZ3MoUHV0QnlJZEZsYWdzIGZsYWdzKQpAQCAtMzk5
LDcgKzQwMCw2IEBAIGJvb2wgSW5mZXJyZWRUeXBlOjp3aWxsU3RvcmVWYWx1ZVNsb3coVk0KICAg
ICBEZXNjcmlwdG9yIG15VHlwZTsKICAgICBib29sIHJlc3VsdDsKICAgICB7Ci0gICAgICAgIEdD
RGVmZXJyYWxDb250ZXh0IGRlZmVycmFsQ29udGV4dCh2bS5oZWFwKTsKICAgICAgICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAgICAgICBvbGRUeXBlID0gZGVzY3JpcHRv
cihsb2NrZXIpOwogICAgICAgICBteVR5cGUgPSBEZXNjcmlwdG9yOjpmb3JWYWx1ZSh2YWx1ZSk7
CkBAIC00MDgsNyArNDA4LDcgQEAgYm9vbCBJbmZlcnJlZFR5cGU6OndpbGxTdG9yZVZhbHVlU2xv
dyhWTQogICAgICAgICAKICAgICAgICAgQVNTRVJUKG9sZFR5cGUgIT0gbXlUeXBlKTsgLy8gVGhl
IHR5cGUgbXVzdCBoYXZlIGNoYW5nZWQgaWYgd2UncmUgb24gdGhlIHNsb3cgcGF0aC4KIAotICAg
ICAgICBib29sIHNldFJlc3VsdCA9IHNldChkZWZlcnJhbENvbnRleHQsIGxvY2tlciwgdm0sIG15
VHlwZSk7CisgICAgICAgIGJvb2wgc2V0UmVzdWx0ID0gc2V0KGxvY2tlciwgdm0sIG15VHlwZSk7
CiAgICAgICAgIHJlc3VsdCA9IGtpbmQobG9ja2VyKSAhPSBUb3A7CiAgICAgICAgIGlmICghc2V0
UmVzdWx0KQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTQyMywxMCArNDIzLDkgQEAg
dm9pZCBJbmZlcnJlZFR5cGU6Om1ha2VUb3BTbG93KFZNJiB2bSwgUAogewogICAgIERlc2NyaXB0
b3Igb2xkVHlwZTsKICAgICB7Ci0gICAgICAgIEdDRGVmZXJyYWxDb250ZXh0IGRlZmVycmFsQ29u
dGV4dCh2bS5oZWFwKTsKICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2sp
OwogICAgICAgICBvbGRUeXBlID0gZGVzY3JpcHRvcihsb2NrZXIpOwotICAgICAgICBpZiAoIXNl
dChkZWZlcnJhbENvbnRleHQsIGxvY2tlciwgdm0sIFRvcCkpCisgICAgICAgIGlmICghc2V0KGxv
Y2tlciwgdm0sIFRvcCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC00MzQsMTQg
KzQzMyw4IEBAIHZvaWQgSW5mZXJyZWRUeXBlOjptYWtlVG9wU2xvdyhWTSYgdm0sIFAKICAgICBt
X3dhdGNocG9pbnRTZXQuZmlyZUFsbCh2bSwgZGV0YWlsKTsKIH0KIAotYm9vbCBJbmZlcnJlZFR5
cGU6OnNldChHQ0RlZmVycmFsQ29udGV4dCYgZGVmZXJyYWxDb250ZXh0LCBjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBEZXNjcmlwdG9yIG5ld0Rlc2NyaXB0b3IpCiti
b29sIEluZmVycmVkVHlwZTo6c2V0KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBW
TSYgdm0sIERlc2NyaXB0b3IgbmV3RGVzY3JpcHRvcikKIHsKLSAgICAvLyBXZSB3aWxsIHRyaWdn
ZXIgd3JpdGUgYmFycmllcnMgd2hpbGUgaG9sZGluZyBvdXIgbG9jay4gQ3VycmVudGx5LCB3cml0
ZSBiYXJyaWVycyBkb24ndCBHQywgYnV0IHRoYXQKLSAgICAvLyBjb3VsZCBjaGFuZ2UuIElmIGl0
IGRvZXMsIHdlIGRvbid0IHdhbnQgdG8gZGVhZGxvY2suIE5vdGUgdGhhdCB3ZSBjb3VsZCBoYXZl
IHVzZWQKLSAgICAvLyBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgaW4gdGhlIGNhbGxlciwgYnV0
IHRoZSBjYWxsZXIgaXMgb24gYSBmYXN0IHBhdGggc28gbWF5YmUgdGhhdCB3b3VsZG4ndCBiZQot
ICAgIC8vIGEgZ29vZCBpZGVhLgotICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyh2bS5oZWFw
KTsKLSAgICAKICAgICAvLyBCZSBkZWZlbnNpdmU6IGlmIHdlJ3JlIG5vdCByZWFsbHkgY2hhbmdp
bmcgdGhlIHR5cGUsIHRoZW4gd2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnl0aGluZy4KICAgICBpZiAo
ZGVzY3JpcHRvcihsb2NrZXIpID09IG5ld0Rlc2NyaXB0b3IpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTQ2OSwxOSArNDYyLDEzIEBAIGJvb2wgSW5mZXJyZWRUeXBlOjpzZXQoR0NEZWZlcnJh
bENvbnRleHQKICAgICAgICAgc2hvdWxkRmlyZVdhdGNocG9pbnRTZXQgPSB0cnVlOwogICAgIH0K
IAotICAgIC8vIFJlbW92ZSB0aGUgb2xkIEluZmVycmVkU3RydWN0dXJlIG9iamVjdCBpZiB3ZSBu
byBsb25nZXIgbmVlZCBpdC4KICAgICBpZiAoIW5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkpCi0g
ICAgICAgIG1fc3RydWN0dXJlLmNsZWFyKCk7Ci0KLSAgICAvLyBBZGQgYSBuZXcgSW5mZXJyZWRT
dHJ1Y3R1cmUgb2JqZWN0IGlmIHdlIG5lZWQgb25lIG5vdy4KLSAgICBpZiAobmV3RGVzY3JpcHRv
ci5zdHJ1Y3R1cmUoKSkgewotICAgICAgICBpZiAobV9zdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAg
IC8vIFdlIHNob3VsZCBhZ3JlZSBvbiB0aGUgc3RydWN0dXJlcyBpZiB3ZSBnZXQgaGVyZS4KLSAg
ICAgICAgICAgIEFTU0VSVChuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpID09IG1fc3RydWN0dXJl
LT5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBhdXRvKiBzdHJ1
Y3R1cmUgPSBJbmZlcnJlZFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBkZWZlcnJhbENvbnRleHQsIHRo
aXMsIG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkpOwotICAgICAgICAgICAgbV9zdHJ1Y3R1cmUu
c2V0KHZtLCB0aGlzLCBzdHJ1Y3R1cmUpOwotICAgICAgICB9CisgICAgICAgIG1fc3RydWN0dXJl
ID0gbnVsbHB0cjsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKG1fc3RydWN0dXJlKQorICAgICAg
ICAgICAgQVNTRVJUKG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkgPT0gbV9zdHJ1Y3R1cmUtPnN0
cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fc3RydWN0dXJlID0g
c3RkOjptYWtlX3VuaXF1ZTxJbmZlcnJlZFN0cnVjdHVyZT4odm0sIHRoaXMsIG5ld0Rlc2NyaXB0
b3Iuc3RydWN0dXJlKCkpOwogICAgIH0KIAogICAgIC8vIEZpbmFsbHksIHNldCB0aGUgZGVzY3Jp
cHRvciBraW5kLgpAQCAtNTAzLDEzICs0OTAsMTIgQEAgdm9pZCBJbmZlcnJlZFR5cGU6OnJlbW92
ZVN0cnVjdHVyZSgpCiAgICAgRGVzY3JpcHRvciBvbGREZXNjcmlwdG9yOwogICAgIERlc2NyaXB0
b3IgbmV3RGVzY3JpcHRvcjsKICAgICB7Ci0gICAgICAgIEdDRGVmZXJyYWxDb250ZXh0IGRlZmVy
cmFsQ29udGV4dCh2bS5oZWFwKTsKICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlciht
X2xvY2spOwogICAgICAgICBvbGREZXNjcmlwdG9yID0gZGVzY3JpcHRvcihsb2NrZXIpOwogICAg
ICAgICBuZXdEZXNjcmlwdG9yID0gb2xkRGVzY3JpcHRvcjsKICAgICAgICAgbmV3RGVzY3JpcHRv
ci5yZW1vdmVTdHJ1Y3R1cmUoKTsKICAgICAgICAgCi0gICAgICAgIGlmICghc2V0KGRlZmVycmFs
Q29udGV4dCwgbG9ja2VyLCB2bSwgbmV3RGVzY3JpcHRvcikpCisgICAgICAgIGlmICghc2V0KGxv
Y2tlciwgdm0sIG5ld0Rlc2NyaXB0b3IpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIApA
QCAtNTE3LDYgKzUwMywyMCBAQCB2b2lkIEluZmVycmVkVHlwZTo6cmVtb3ZlU3RydWN0dXJlKCkK
ICAgICBtX3dhdGNocG9pbnRTZXQuZmlyZUFsbCh2bSwgZGV0YWlsKTsKIH0KIAorSXNvQ2VsbFNl
dDo6Rm9yRWFjaFJlc3VsdCBJbmZlcnJlZFR5cGU6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZN
JikKK3sKKyAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQodGhpcykpOworICAgIAorICAgIGlmICht
X3N0cnVjdHVyZSkgeworICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUtPnN0
cnVjdHVyZS5nZXQoKSkpCisgICAgICAgICAgICByZXR1cm4gSXNvQ2VsbFNldDo6Rm9yRWFjaFJl
c3VsdDo6Q29udGludWU7CisgICAgICAgIAorICAgICAgICByZW1vdmVTdHJ1Y3R1cmUoKTsKKyAg
ICB9CisgICAgCisgICAgcmV0dXJuIElzb0NlbGxTZXQ6OkZvckVhY2hSZXN1bHQ6OlJlbW92ZUFu
ZENvbnRpbnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogbmFtZXNwYWNlIFdURiB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuaAkocmV2
aXNpb24gMjI1NzcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRU
eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkNvbmN1
cnJlbnRKU0xvY2suaCIKICNpbmNsdWRlICJJbmZlcnJlZFN0cnVjdHVyZS5oIgorI2luY2x1ZGUg
Iklzb0NlbGxTZXQuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU5h
bWUuaCIKICNpbmNsdWRlICJQdXRCeUlkRmxhZ3MuaCIKQEAgLTE4NSw3ICsxODYsNyBAQCBwdWJs
aWM6CiAKICAgICBEZXNjcmlwdG9yIGRlc2NyaXB0b3JNYWluVGhyZWFkKCkgY29uc3QKICAgICB7
Ci0gICAgICAgIHJldHVybiBEZXNjcmlwdG9yKG1fa2luZCwgbV9zdHJ1Y3R1cmUgPyBtX3N0cnVj
dHVyZS0+c3RydWN0dXJlKCkgOiBudWxscHRyKTsKKyAgICAgICAgcmV0dXJuIERlc2NyaXB0b3Io
bV9raW5kLCBtX3N0cnVjdHVyZSA/IG1fc3RydWN0dXJlLT5zdHJ1Y3R1cmUuZ2V0KCkgOiBudWxs
cHRyKTsKICAgICB9CiAgICAgCiAgICAgRGVzY3JpcHRvciBkZXNjcmlwdG9yKGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYpIGNvbnN0CkBAIC0yMzAsNyArMjMxLDcgQEAgcHVibGljOgogCiAgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgCi0gICAgdm9pZCBmaW5hbGl6ZVVu
Y29uZGl0aW9uYWxseSgpOworICAgIElzb0NlbGxTZXQ6OkZvckVhY2hSZXN1bHQgZmluYWxpemVV
bmNvbmRpdGlvbmFsbHkoVk0mKTsKIAogcHJpdmF0ZToKICAgICBJbmZlcnJlZFR5cGUoVk0mKTsK
QEAgLTI0MSw3ICsyNDIsNyBAQCBwcml2YXRlOgogCiAgICAgLy8gSGVscGVyIGZvciB3aWxsU3Rv
cmVWYWx1ZVNsb3coKSBhbmQgbWFrZVRvcFNsb3coKS4gVGhpcyByZXR1cm5zIHRydWUgaWYgd2Ug
c2hvdWxkIGZpcmUgdGhlCiAgICAgLy8gd2F0Y2hwb2ludCBzZXQuCi0gICAgYm9vbCBzZXQoR0NE
ZWZlcnJhbENvbnRleHQmLCBjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWTSYsIERlc2NyaXB0
b3IpOworICAgIGJvb2wgc2V0KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZNJiwgRGVzY3Jp
cHRvcik7CiAgICAgCiAgICAgdm9pZCByZW1vdmVTdHJ1Y3R1cmUoKTsKICAgICAKQEAgLTI1Miw3
ICsyNTMsOCBAQCBwcml2YXRlOgogICAgIAogICAgIEtpbmQgbV9raW5kIHsgQm90dG9tIH07CiAK
LSAgICBXcml0ZUJhcnJpZXI8SW5mZXJyZWRTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOworICAgIC8v
IEZJWE1FOiBUaGlzIHNob3VsZCBiZSBQb2lzb25lZC4KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5m
ZXJyZWRTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOwogCiAgICAgLy8gTk9URTogSWYgdGhpcyBpcyBi
ZWluZyB3YXRjaGVkLCB3ZSB0cmFuc2Zvcm0gdG8gVG9wIGJlY2F1c2UgdGhhdCBpbXBsaWVzIHRo
YXQgaXQgd291bGRuJ3QgYmUKICAgICAvLyBwcm9maXRhYmxlIHRvIHdhdGNoIGl0IGFnYWluLiBB
bHNvLCB0aGlzIHNldCBpcyBpbml0aWFsaXplZCBjbGVhciwgYW5kIGlzIG5ldmVyIGV4cG9zZWQg
dG8gdGhlIERGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRU
eXBlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0luZmVycmVkVHlwZUlubGluZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCitpbmxpbmUgSXNvQ2VsbFNldDo6Rm9yRWFjaFJlc3VsdCBJbmZlcnJlZFR5
cGU6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJikKK3sKKyAgICBBU1NFUlQoSGVhcDo6aXNN
YXJrZWQodGhpcykpOworICAgIAorICAgIGlmIChtX3N0cnVjdHVyZSkgeworICAgICAgICBpZiAo
SGVhcDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUtPnN0cnVjdHVyZS5nZXQoKSkpCisgICAgICAgICAg
ICByZXR1cm4gSXNvQ2VsbFNldDo6Rm9yRWFjaFJlc3VsdDo6Q29udGludWU7CisgICAgICAgIAor
ICAgICAgICByZW1vdmVTdHJ1Y3R1cmUoKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIElzb0Nl
bGxTZXQ6OkZvckVhY2hSZXN1bHQ6OlJlbW92ZUFuZENvbnRpbnVlOworfQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNp
b24gMjI1NzcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMDUsMTEgKzIwNSwxMSBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVh
cFR5cGUgaGVhcFR5cGUpCiAgICAgLCBkaXJlY3RFdmFsRXhlY3V0YWJsZVNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIERpcmVj
dEV2YWxFeGVjdXRhYmxlKQogICAgICwgZnVuY3Rpb25FeGVjdXRhYmxlU3BhY2UgSVNPX1NVQlNQ
QUNFX0lOSVQoaGVhcCwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgRnVuY3Rp
b25FeGVjdXRhYmxlKQogICAgICwgaW5kaXJlY3RFdmFsRXhlY3V0YWJsZVNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIEluZGly
ZWN0RXZhbEV4ZWN1dGFibGUpCi0gICAgLCBpbmZlcnJlZFN0cnVjdHVyZVNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIEluZmVy
cmVkU3RydWN0dXJlKQogICAgICwgaW5mZXJyZWRUeXBlU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQo
aGVhcCwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgSW5mZXJyZWRUeXBlKQog
ICAgICwgbW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGVTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFw
LCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLmdldCgpLCBNb2R1bGVQcm9ncmFtRXhlY3V0
YWJsZSkKICAgICAsIG5hdGl2ZUV4ZWN1dGFibGVTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFw
LCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLmdldCgpLCBOYXRpdmVFeGVjdXRhYmxlKQog
ICAgICwgcHJvZ3JhbUV4ZWN1dGFibGVTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBkZXN0
cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLmdldCgpLCBQcm9ncmFtRXhlY3V0YWJsZSkKKyAgICAs
IGluZmVycmVkVHlwZXNXaXRoRmluYWxpemVycyhpbmZlcnJlZFR5cGVTcGFjZSkKICAgICAsIHZt
VHlwZSh2bVR5cGUpCiAgICAgLCBjbGllbnREYXRhKDApCiAgICAgLCB0b3BFbnRyeUZyYW1lKG51
bGxwdHIpCkBAIC0yOTIsNyArMjkyLDYgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBl
IGhlYXBUeXBlKQogICAgIHVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmUuc2V0KCp0
aGlzLCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAs
IGpzTnVsbCgpKSk7CiAgICAgdW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJl
LnNldCgqdGhpcywgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1
cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgcHJvcGVydHlUYWJsZVN0cnVjdHVyZS5zZXQo
KnRoaXMsIFByb3BlcnR5VGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkp
KTsKLSAgICBpbmZlcnJlZFN0cnVjdHVyZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEluZmVycmVkU3Ry
dWN0dXJlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgaW5mZXJy
ZWRUeXBlU3RydWN0dXJlLnNldCgqdGhpcywgSW5mZXJyZWRUeXBlOjpjcmVhdGVTdHJ1Y3R1cmUo
KnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgaW5mZXJyZWRUeXBlVGFibGVTdHJ1Y3R1cmUuc2V0
KCp0aGlzLCBJbmZlcnJlZFR5cGVUYWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051
bGwoKSkpOwogICAgIGluZmVycmVkVmFsdWVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBJbmZlcnJlZFZh
bHVlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDIyNTc3MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKICNp
bmNsdWRlICJGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuaCIKICNpbmNsdWRlICJIZWFwLmgiCiAj
aW5jbHVkZSAiSW50cmluc2ljLmgiCisjaW5jbHVkZSAiSXNvQ2VsbFNldC5oIgogI2luY2x1ZGUg
Iklzb1N1YnNwYWNlLmgiCiAjaW5jbHVkZSAiSklUVGh1bmtzLmgiCiAjaW5jbHVkZSAiSlNDSlNW
YWx1ZS5oIgpAQCAtMzQwLDExICszNDEsMTIgQEAgcHVibGljOgogICAgIElzb1N1YnNwYWNlIGRp
cmVjdEV2YWxFeGVjdXRhYmxlU3BhY2U7CiAgICAgSXNvU3Vic3BhY2UgZnVuY3Rpb25FeGVjdXRh
YmxlU3BhY2U7CiAgICAgSXNvU3Vic3BhY2UgaW5kaXJlY3RFdmFsRXhlY3V0YWJsZVNwYWNlOwot
ICAgIElzb1N1YnNwYWNlIGluZmVycmVkU3RydWN0dXJlU3BhY2U7CiAgICAgSXNvU3Vic3BhY2Ug
aW5mZXJyZWRUeXBlU3BhY2U7CiAgICAgSXNvU3Vic3BhY2UgbW9kdWxlUHJvZ3JhbUV4ZWN1dGFi
bGVTcGFjZTsKICAgICBJc29TdWJzcGFjZSBuYXRpdmVFeGVjdXRhYmxlU3BhY2U7CiAgICAgSXNv
U3Vic3BhY2UgcHJvZ3JhbUV4ZWN1dGFibGVTcGFjZTsKKyAgICAKKyAgICBJc29DZWxsU2V0IGlu
ZmVycmVkVHlwZXNXaXRoRmluYWxpemVyczsKIAogICAgIFZNVHlwZSB2bVR5cGU7CiAgICAgQ2xp
ZW50RGF0YSogY2xpZW50RGF0YTsKQEAgLTM5Miw3ICszOTQsNiBAQCBwdWJsaWM6CiAgICAgU3Ry
b25nPFN0cnVjdHVyZT4gdW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZTsKICAgICBT
dHJvbmc8U3RydWN0dXJlPiB1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmU7
CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvcGVydHlUYWJsZVN0cnVjdHVyZTsKLSAgICBTdHJv
bmc8U3RydWN0dXJlPiBpbmZlcnJlZFN0cnVjdHVyZVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3Ry
dWN0dXJlPiBpbmZlcnJlZFR5cGVTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gaW5m
ZXJyZWRUeXBlVGFibGVTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gaW5mZXJyZWRW
YWx1ZVN0cnVjdHVyZTsKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjU3NzApCisrKyBTb3VyY2UvV1RGL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBACisyMDE3LTEyLTExICBGaWxp
cCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgSXQgc2hvdWxkIGJlIHBvc3Np
YmxlIHRvIGZsYWcgYSBjZWxsIGZvciB1bmNvbmRpdGlvbmFsIGZpbmFsaXphdGlvbgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwNjM2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGFk
ZHMgQ29uY3VycmVudFZlY3Rvciwgd2hpY2ggaXMgbGlrZSBTZWdtZW50ZWRWZWN0b3IsIGJ1dCB3
YXN0ZXMgc29tZSBzcGFjZSB0byBhbGxvdworICAgICAgICByZXNpemluZyB0byBwcm9jZWVkIGNv
bmN1cnJlbnRseSB0byBhY2Nlc3MuIEl0J3Mgbm90IHBvc3NpYmxlIHRvIHJlc2l6ZSBjb25jdXJy
ZW50bHkgdG8KKyAgICAgICAgcmVzaXppbmcsIGNvbmN1cnJlbnQgcmVhZC93cml0ZXMgYXJlbid0
IHByb3RlY3RlZCBmcm9tIHJhY2luZyBpZiB0aGV5IGFjY2VzcyB0aGUgc2FtZSBlbGVtZW50LAor
ICAgICAgICBhbmQgd2hvIGtub3dzIHdoYXQgeW91J2xsIGdldCBpZiB5b3UgaXRlcmF0ZSB1cCB0
byBzaXplKCkgd2hpbGUgc29tZW9uZSBlbHNlIGFwcGVuZCgpcy4gVGhlCisgICAgICAgIGtleSBp
bnNpZ2h0IGlzIHRvIHN0YXNoIGFsbCBwcmlvciBjb3BpZXMgb2YgdGhlIHNwaW5lLCBzbyB0aGF0
IG5vYm9keSBjcmFzaGVzIHRyeWluZyB0byBhY2Nlc3MKKyAgICAgICAgYSBzdGFsZSBzcGluZS4K
KyAgICAgICAgCisgICAgICAgIEknbSBnb2luZyB0byB3YW50IHRvIGRvIHRoZSBzYW1lIHRoaW5n
IGZvciBGYXN0Qml0VmVjdG9yLCBieSBjcmVhdGluZyBhIHNlZ21lbnRlZCBXb3JkT3duZXIKKyAg
ICAgICAgY2xhc3MuIFRoYXQgd291bGQgcmVxdWlyZSByZXBlYXRpbmcgdGhlIGRhbmNlIG9mIGhh
dmluZyBhIHNwaW5lIHRoYXQgY2FuIHJlc2l6ZSB3aGlsZSBzdGFzaGluZworICAgICAgICBvbGQg
dmVyc2lvbnMuIFNvLCB0aGUgc3BpbmUgcmVzaXppbmcgbG9naWMgaXMgYWJzdHJhY3RlZCBiZWhp
bmQgQ29uY3VycmVudEJ1ZmZlci4gWW91IGNvdWxkCisgICAgICAgIHVzZSB0aGF0IGFzIGEga2lu
ZCBvZiAiY29uY3VycmVudCB2ZWN0b3IiIGZvciBpbW11dGFibGUgZGF0YS4gVGhhdCdzIGhvdyBD
b25jdXJyZW50VmVjdG9yIHVzZXMKKyAgICAgICAgaXQ6IGl0J3MgYW4gaW1tdXRhYmxlIGFycmF5
IG9mIHNlZ21lbnQgcG9pbnRlcnMuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQ29uY3VycmVudEJ1ZmZlci5oOiBBZGRlZC4KKyAgICAg
ICAgKFdURjo6Q29uY3VycmVudEJ1ZmZlcjo6Q29uY3VycmVudEJ1ZmZlcik6CisgICAgICAgIChX
VEY6OkNvbmN1cnJlbnRCdWZmZXI6On5Db25jdXJyZW50QnVmZmVyKToKKyAgICAgICAgKFdURjo6
Q29uY3VycmVudEJ1ZmZlcjo6Z3Jvd0V4YWN0KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudEJ1
ZmZlcjo6Z3Jvdyk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRCdWZmZXI6OmFycmF5IGNvbnN0
KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudEJ1ZmZlcjo6b3BlcmF0b3JbXSk6CisgICAgICAg
IChXVEY6OkNvbmN1cnJlbnRCdWZmZXI6Om9wZXJhdG9yW10gY29uc3QpOgorICAgICAgICAoV1RG
OjpDb25jdXJyZW50QnVmZmVyOjpjcmVhdGVBcnJheSk6CisgICAgICAgICogd3RmL0NvbmN1cnJl
bnRWZWN0b3IuaDogQWRkZWQuCisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRWZWN0b3JJdGVyYXRv
cjo6fkNvbmN1cnJlbnRWZWN0b3JJdGVyYXRvcik6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRW
ZWN0b3JJdGVyYXRvcjo6b3BlcmF0b3IqIGNvbnN0KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVu
dFZlY3Rvckl0ZXJhdG9yOjpvcGVyYXRvci0+IGNvbnN0KToKKyAgICAgICAgKFdURjo6Q29uY3Vy
cmVudFZlY3Rvckl0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKFdURjo6Q29uY3VycmVu
dFZlY3Rvckl0ZXJhdG9yOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKFdURjo6Q29uY3Vy
cmVudFZlY3Rvckl0ZXJhdG9yOjpvcGVyYXRvciE9IGNvbnN0KToKKyAgICAgICAgKFdURjo6Q29u
Y3VycmVudFZlY3Rvckl0ZXJhdG9yOjpvcGVyYXRvcj0pOgorICAgICAgICAoV1RGOjpDb25jdXJy
ZW50VmVjdG9ySXRlcmF0b3I6OkNvbmN1cnJlbnRWZWN0b3JJdGVyYXRvcik6CisgICAgICAgIChX
VEY6OkNvbmN1cnJlbnRWZWN0b3I6On5Db25jdXJyZW50VmVjdG9yKToKKyAgICAgICAgKFdURjo6
Q29uY3VycmVudFZlY3Rvcjo6c2l6ZSBjb25zdCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRW
ZWN0b3I6OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50VmVjdG9yOjph
dCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRWZWN0b3I6OmF0IGNvbnN0KToKKyAgICAgICAg
KFdURjo6Q29uY3VycmVudFZlY3Rvcjo6b3BlcmF0b3JbXSk6CisgICAgICAgIChXVEY6OkNvbmN1
cnJlbnRWZWN0b3I6Om9wZXJhdG9yW10gY29uc3QpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50
VmVjdG9yOjpmaXJzdCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRWZWN0b3I6OmZpcnN0IGNv
bnN0KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFZlY3Rvcjo6bGFzdCk6CisgICAgICAgIChX
VEY6OkNvbmN1cnJlbnRWZWN0b3I6Omxhc3QgY29uc3QpOgorICAgICAgICAoV1RGOjpDb25jdXJy
ZW50VmVjdG9yOjp0YWtlTGFzdCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRWZWN0b3I6OmFw
cGVuZCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRWZWN0b3I6OmFsbG9jKToKKyAgICAgICAg
KFdURjo6Q29uY3VycmVudFZlY3Rvcjo6cmVtb3ZlTGFzdCk6CisgICAgICAgIChXVEY6OkNvbmN1
cnJlbnRWZWN0b3I6Omdyb3cpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50VmVjdG9yOjpiZWdp
bik6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRWZWN0b3I6OmVuZCk6CisgICAgICAgIChXVEY6
OkNvbmN1cnJlbnRWZWN0b3I6OnNlZ21lbnRFeGlzdHNGb3IpOgorICAgICAgICAoV1RGOjpDb25j
dXJyZW50VmVjdG9yOjpzZWdtZW50Rm9yKToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFZlY3Rv
cjo6c3Vic2NyaXB0Rm9yKToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFZlY3Rvcjo6ZW5zdXJl
U2VnbWVudHNGb3IpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50VmVjdG9yOjplbnN1cmVTZWdt
ZW50KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFZlY3Rvcjo6YWxsb2NhdGVTZWdtZW50KToK
KwogMjAxNy0xMi0xMSAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAog
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBPcHRpb25hbGx5IGxvZyBXZWJLaXQgbG9nIHBhcmFtZXRl
cnMgYXMgSlNPTgpJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiAyMjU3NzApCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMzksNiArMjM5LDggQEAKIAkJMEZCMTRFMTgxODBG
QTIxODAwOUI2QjREIC8qIEJhZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBC
YWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCMTRFMUExODEwRTFEQTAwOUI2
QjREIC8qIEJhZ1RvSGFzaE1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCYWdUb0hhc2hNYXAuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCMzE3QzMxQzQ4ODAwMTAwN0UzOTVBIC8qIFN5
c3RlbVRyYWNpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3lzdGVtVHJh
Y2luZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI0Njc4MjFGREUyODJCMDAz
RkNCMDkgLyogQ29uY3VycmVudEJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDb25jdXJyZW50QnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
QjQ2NzgzMUZERTI4MkMwMDNGQ0IwOSAvKiBDb25jdXJyZW50VmVjdG9yLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbmN1cnJlbnRWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZDNDQ4ODIxNkZFOUZFMTAwODQ0QkU5IC8qIFByb2Nlc3NJRC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm9jZXNzSUQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZDNEVERTUxNjk2MTQ5NjAwRjY1MDQxIC8qIENvbW1hUHJpbnRl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21tYVByaW50ZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEODFBQzQxNTRGQjIyRTAwOTgzRTcyIC8qIEZh
c3RCaXRWZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmFzdEJpdFZl
Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODA4LDggKzgxMCwxMCBAQAog
CQkJCTBGOEYyQjkwMTcyRTAwRjAwMDdEQkRBNSAvKiBDb21waWxhdGlvblRocmVhZC5oICovLAog
CQkJCUE4QTQ3MjcwMTUxQTgyNUEwMDQxMjNGRiAvKiBDb21waWxlci5oICovLAogCQkJCTQ2QkE5
RUFCMUY0Q0Q2MUUwMDlBMkJCQyAvKiBDb21wbGV0aW9uSGFuZGxlci5oICovLAorCQkJCTBGQjQ2
NzgyMUZERTI4MkIwMDNGQ0IwOSAvKiBDb25jdXJyZW50QnVmZmVyLmggKi8sCiAJCQkJMEYzMENC
NTgxRkNERjEzMzAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCAqLywKIAkJCQkw
RjMwQ0I1OTFGQ0RGMTMzMDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuaCAqLywKKwkJ
CQkwRkI0Njc4MzFGREUyODJDMDAzRkNCMDkgLyogQ29uY3VycmVudFZlY3Rvci5oICovLAogCQkJ
CTBGREI2OThEMUI3QzY0M0EwMDBDMTA3OCAvKiBDb25kaXRpb24uaCAqLywKIAkJCQkwRkZCQ0JG
QTFGRDM3RTBGMDA3MkFBRjAgLyogQ291bnRpbmdMb2NrLmggKi8sCiAJCQkJMEY4RTg1REExRkQ0
ODVCMDAwNjkxODg5IC8qIENvdW50aW5nTG9jay5jcHAgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3Rz
LnR4dAkocmV2aXNpb24gMjI1NzcwKQorKysgU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTE4LDcgKzE4LDkgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgQ2xv
Y2tUeXBlLmgKICAgICBDb21waWxhdGlvblRocmVhZC5oCiAgICAgQ29tcGlsZXIuaAorICAgIENv
bmN1cnJlbnRCdWZmZXIuaAogICAgIENvbmN1cnJlbnRQdHJIYXNoU2V0LmgKKyAgICBDb25jdXJy
ZW50VmVjdG9yLmgKICAgICBDb25kaXRpb24uaAogICAgIENvdW50aW5nTG9jay5oCiAgICAgQ3Jv
c3NUaHJlYWRDb3BpZXIuaApJbmRleDogU291cmNlL1dURi93dGYvQ29uY3VycmVudEJ1ZmZlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRCdWZmZXIuaAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9Db25jdXJyZW50QnVmZmVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgorI2lu
Y2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4K
KyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8vIENvbmN1cnJlbnRC
dWZmZXIgaXMgc3VpdGFibGUgZm9yIHdoZW4geW91IHBsYW4gdG8gc3RvcmUgaW1tdXRhYmxlIGRh
dGEgYW5kIHNvbWV0aW1lcyBhcHBlbmQgdG8gaXQuCisvLyBJdCBzdXBwb3J0cyBzdG9yaW5nIGRh
dGEgdGhhdCBpcyBub3QgY29weS1jb25zdHJ1Y3RhYmxlIGJ1dCBiaXQtY29weWFibGUuCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgQ29uY3VycmVudEJ1ZmZlciB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoQ29uY3VycmVudEJ1ZmZlcik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgCisgICAgQ29uY3VycmVudEJ1ZmZlcigpCisgICAgeworICAgIH0K
KyAgICAKKyAgICB+Q29uY3VycmVudEJ1ZmZlcigpCisgICAgeworICAgICAgICBpZiAoQXJyYXkq
IGFycmF5ID0gbV9hcnJheSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGFycmF5LT5zaXplOyArK2kpCisgICAgICAgICAgICAgICAgYXJyYXktPmRhdGFbaV0uflQoKTsK
KyAgICAgICAgfQorICAgICAgICBmb3IgKEFycmF5KiBhcnJheSA6IG1fYWxsQXJyYXlzKQorICAg
ICAgICAgICAgZmFzdEZyZWUoYXJyYXkpOworICAgIH0KKworICAgIC8vIEdyb3dpbmcgaXMgbm90
IGNvbmN1cnJlbnQuIFRoaXMgYXNzdW1lcyB5b3UgYXJlIGhvbGRpbmcgc29tZSBvdGhlciBsb2Nr
IGJlZm9yZSB5b3UgZG8gdGhpcy4KKyAgICB2b2lkIGdyb3dFeGFjdChzaXplX3QgbmV3U2l6ZSkK
KyAgICB7CisgICAgICAgIEFycmF5KiBhcnJheSA9IG1fYXJyYXk7CisgICAgICAgIGlmIChhcnJh
eSAmJiBuZXdTaXplIDw9IGFycmF5LT5zaXplKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBBcnJheSogbmV3QXJyYXkgPSBjcmVhdGVBcnJheShuZXdTaXplKTsKKyAgICAgICAgLy8gVGhp
cyBhbGxvd3MgdXMgdG8gZG8gQ29uY3VycmVudEJ1ZmZlcjxzdGQ6OnVuaXF1ZV9wdHI8Pj4uCisg
ICAgICAgIGlmIChhcnJheSkKKyAgICAgICAgICAgIG1lbWNweShuZXdBcnJheS0+ZGF0YSwgYXJy
YXktPmRhdGEsIHNpemVvZihUKSAqIGFycmF5LT5zaXplKTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gYXJyYXkgPyBhcnJheS0+c2l6ZSA6IDA7IGkgPCBuZXdTaXplOyArK2kpCisgICAgICAg
ICAgICBuZXcgKG5ld0FycmF5LT5kYXRhICsgaSkgVCgpOworICAgICAgICBXVEY6OnN0b3JlU3Rv
cmVGZW5jZSgpOworICAgICAgICBtX2FycmF5ID0gbmV3QXJyYXk7CisgICAgICAgIFdURjo6c3Rv
cmVTdG9yZUZlbmNlKCk7CisgICAgICAgIG1fYWxsQXJyYXlzLmFwcGVuZChuZXdBcnJheSk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgZ3JvdyhzaXplX3QgbmV3U2l6ZSkKKyAgICB7CisgICAgICAg
IHNpemVfdCBzaXplID0gbV9hcnJheSA/IG1fYXJyYXktPnNpemUgOiAwOworICAgICAgICBpZiAo
bmV3U2l6ZSA8PSBzaXplKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBncm93RXhhY3Qo
c3RkOjptYXgobmV3U2l6ZSwgc2l6ZSAqIDIpKTsKKyAgICB9CisgICAgCisgICAgc3RydWN0IEFy
cmF5IHsKKyAgICAgICAgdW5zaWduZWQgc2l6ZTsgLy8gVGhpcyBpcyBhbiBpbW11dGFibGUgc2l6
ZS4KKyAgICAgICAgVCBkYXRhWzFdOworICAgIH07CisgICAgCisgICAgQXJyYXkqIGFycmF5KCkg
Y29uc3QgeyByZXR1cm4gbV9hcnJheTsgfQorICAgIAorICAgIFQmIG9wZXJhdG9yW10oc2l6ZV90
IGluZGV4KSB7IHJldHVybiBtX2FycmF5LT5kYXRhW2luZGV4XTsgfQorICAgIGNvbnN0IFQmIG9w
ZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2FycmF5LT5kYXRhW2luZGV4
XTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBBcnJheSogY3JlYXRlQXJyYXkodW5zaWduZWQgc2l6
ZSkKKyAgICB7CisgICAgICAgIEFycmF5KiByZXN1bHQgPSBzdGF0aWNfY2FzdDxBcnJheSo+KGZh
c3RNYWxsb2MoT0JKRUNUX09GRlNFVE9GKEFycmF5LCBkYXRhKSArIHNpemVvZihUKSAqIHNpemUp
KTsKKyAgICAgICAgcmVzdWx0LT5zaXplID0gc2l6ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisgICAgCisgICAgQXJyYXkqIG1fYXJyYXkgeyBudWxscHRyIH07CisgICAgVmVjdG9y
PEFycmF5Kj4gbV9hbGxBcnJheXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDog
U291cmNlL1dURi93dGYvQ29uY3VycmVudFZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0NvbmN1cnJlbnRWZWN0b3IuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0
Zi9Db25jdXJyZW50VmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNTMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDb25j
dXJyZW50VmVjdG9yX2gKKyNkZWZpbmUgQ29uY3VycmVudFZlY3Rvcl9oCisKKyNpbmNsdWRlIDx3
dGYvQ29uY3VycmVudEJ1ZmZlci5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCitu
YW1lc3BhY2UgV1RGIHsKKworLy8gQW4gaXRlcmF0b3IgZm9yIENvbmN1cnJlbnRWZWN0b3IuIEl0
IHN1cHBvcnRzIG9ubHkgdGhlIHByZSArKyBvcGVyYXRvcgordGVtcGxhdGUgPHR5cGVuYW1lIFQs
IHNpemVfdCBTZWdtZW50U2l6ZSA9IDg+IGNsYXNzIENvbmN1cnJlbnRWZWN0b3I7Cit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVCwgc2l6ZV90IFNlZ21lbnRTaXplID0gOD4gY2xhc3MgQ29uY3VycmVudFZl
Y3Rvckl0ZXJhdG9yIHsKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENvbmN1cnJlbnRWZWN0
b3I8VCwgU2VnbWVudFNpemU+OworcHVibGljOgorICAgIHR5cGVkZWYgQ29uY3VycmVudFZlY3Rv
ckl0ZXJhdG9yPFQsIFNlZ21lbnRTaXplPiBJdGVyYXRvcjsKKworICAgIH5Db25jdXJyZW50VmVj
dG9ySXRlcmF0b3IoKSB7IH0KKworICAgIFQmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIG1f
dmVjdG9yLmF0KG1faW5kZXgpOyB9CisgICAgVCogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJu
ICZtX3ZlY3Rvci5hdChtX2luZGV4KTsgfQorCisgICAgLy8gT25seSBwcmVmaXggKysgb3BlcmF0
b3Igc3VwcG9ydGVkCisgICAgSXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgIHsKKyAgICAgICAg
bV9pbmRleCsrOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IEl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX2luZGV4ID09IG90aGVyLm1faW5kZXggJiYgJm1fdmVjdG9yID09ICZvdGhlci5tX3ZlY3Rv
cjsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgSXRlcmF0b3ImIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faW5kZXggIT0gb3RoZXIubV9pbmRleCB8fCAm
bV92ZWN0b3IgIT0gJm90aGVyLm1fdmVjdG9yOworICAgIH0KKworICAgIENvbmN1cnJlbnRWZWN0
b3JJdGVyYXRvciYgb3BlcmF0b3I9KGNvbnN0IENvbmN1cnJlbnRWZWN0b3JJdGVyYXRvcjxULCBT
ZWdtZW50U2l6ZT4mIG90aGVyKQorICAgIHsKKyAgICAgICAgbV92ZWN0b3IgPSBvdGhlci5tX3Zl
Y3RvcjsKKyAgICAgICAgbV9pbmRleCA9IG90aGVyLm1faW5kZXg7CisgICAgICAgIHJldHVybiAq
dGhpczsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQ29uY3VycmVudFZlY3Rvckl0ZXJhdG9yKENv
bmN1cnJlbnRWZWN0b3I8VCwgU2VnbWVudFNpemU+JiB2ZWN0b3IsIHNpemVfdCBpbmRleCkKKyAg
ICAgICAgOiBtX3ZlY3Rvcih2ZWN0b3IpCisgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICB7
CisgICAgfQorCisgICAgQ29uY3VycmVudFZlY3RvcjxULCBTZWdtZW50U2l6ZT4mIG1fdmVjdG9y
OworICAgIHNpemVfdCBtX2luZGV4OworfTsKKworLy8gQ29uY3VycmVudFZlY3RvciBpcyBsaWtl
IFNlZ21lbnRlZFZlY3RvciwgYnV0IHN1aXRhYmxlIGZvciBzY2VuYXJpb3Mgd2hlcmUgb25lIHRo
cmVhZCBhcHBlbmRzCisvLyBlbGVtZW50cyBhbmQgYW5vdGhlciB0aHJlYWQgY29udGludWVzIHRv
IGFjY2VzcyBlbGVtZW50cyBhdCBsb3dlciBpbmRpY2VzLiBPbmx5IG9uZSB0aHJlYWQgY2FuCisv
LyBhcHBlbmQgYXQgYSB0aW1lLCBzbyB0aGF0IGFjdGl2aXR5IHN0aWxsIG5lZWRzIGxvY2tpbmcu
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc2l6ZV90IFNlZ21lbnRTaXplPgorY2xhc3MgQ29uY3Vy
cmVudFZlY3RvciB7CisgICAgZnJpZW5kIGNsYXNzIENvbmN1cnJlbnRWZWN0b3JJdGVyYXRvcjxU
LCBTZWdtZW50U2l6ZT47CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29uY3VycmVudFZlY3Rv
cik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKK3B1YmxpYzoKKyAgICB0eXBlZGVm
IENvbmN1cnJlbnRWZWN0b3JJdGVyYXRvcjxULCBTZWdtZW50U2l6ZT4gSXRlcmF0b3I7CisKKyAg
ICBDb25jdXJyZW50VmVjdG9yKCkgPSBkZWZhdWx0OworCisgICAgfkNvbmN1cnJlbnRWZWN0b3Io
KQorICAgIHsKKyAgICB9CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6
ZTsgfQorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFzaXplKCk7IH0KKworICAg
IFQmIGF0KHNpemVfdCBpbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZ
X0lNUExJQ0FUSU9OKGluZGV4IDwgbV9zaXplKTsKKyAgICAgICAgcmV0dXJuIHNlZ21lbnRGb3Io
aW5kZXgpLT5lbnRyaWVzW3N1YnNjcmlwdEZvcihpbmRleCldOworICAgIH0KKworICAgIGNvbnN0
IFQmIGF0KHNpemVfdCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBjb25zdF9j
YXN0PENvbmN1cnJlbnRWZWN0b3I8VCwgU2VnbWVudFNpemU+Kj4odGhpcyktPmF0KGluZGV4KTsK
KyAgICB9CisKKyAgICBUJiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkKKyAgICB7CisgICAgICAg
IHJldHVybiBhdChpbmRleCk7CisgICAgfQorCisgICAgY29uc3QgVCYgb3BlcmF0b3JbXShzaXpl
X3QgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYXQoaW5kZXgpOworICAgIH0K
KworICAgIFQmIGZpcnN0KCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lN
UExJQ0FUSU9OKCFpc0VtcHR5KCkpOworICAgICAgICByZXR1cm4gYXQoMCk7CisgICAgfQorICAg
IGNvbnN0IFQmIGZpcnN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VS
SVRZX0lNUExJQ0FUSU9OKCFpc0VtcHR5KCkpOworICAgICAgICByZXR1cm4gYXQoMCk7CisgICAg
fQorICAgIFQmIGxhc3QoKQorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1Q
TElDQVRJT04oIWlzRW1wdHkoKSk7CisgICAgICAgIHJldHVybiBhdChzaXplKCkgLSAxKTsKKyAg
ICB9CisgICAgY29uc3QgVCYgbGFzdCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlRfV0lU
SF9TRUNVUklUWV9JTVBMSUNBVElPTighaXNFbXB0eSgpKTsKKyAgICAgICAgcmV0dXJuIGF0KHNp
emUoKSAtIDEpOworICAgIH0KKworICAgIFQgdGFrZUxhc3QoKQorICAgIHsKKyAgICAgICAgQVNT
RVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIWlzRW1wdHkoKSk7CisgICAgICAgIFQgcmVz
dWx0ID0gV1RGTW92ZShsYXN0KCkpOworICAgICAgICAtLW1fc2l6ZTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgIHZv
aWQgYXBwZW5kKEFyZ3MmJi4uLiBhcmdzKQorICAgIHsKKyAgICAgICAgKyttX3NpemU7CisgICAg
ICAgIGlmICghc2VnbWVudEV4aXN0c0ZvcihtX3NpemUgLSAxKSkKKyAgICAgICAgICAgIGFsbG9j
YXRlU2VnbWVudCgpOworICAgICAgICBuZXcgKE5vdE51bGwsICZsYXN0KCkpIFQoc3RkOjpmb3J3
YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBB
cmdzPgorICAgIFQmIGFsbG9jKEFyZ3MmJi4uLiBhcmdzKQorICAgIHsKKyAgICAgICAgYXBwZW5k
KHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CisgICAgICAgIHJldHVybiBsYXN0KCk7Cisg
ICAgfQorCisgICAgdm9pZCByZW1vdmVMYXN0KCkKKyAgICB7CisgICAgICAgIGxhc3QoKS5+VCgp
OworICAgICAgICAtLW1fc2l6ZTsKKyAgICB9CisKKyAgICB2b2lkIGdyb3coc2l6ZV90IHNpemUp
CisgICAgeworICAgICAgICBpZiAoc2l6ZSA9PSBtX3NpemUpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIEFTU0VSVChzaXplID4gbV9zaXplKTsKKyAgICAgICAgZW5zdXJlU2VnbWVudHNG
b3Ioc2l6ZSk7CisgICAgICAgIHNpemVfdCBvbGRTaXplID0gbV9zaXplOworICAgICAgICBtX3Np
emUgPSBzaXplOworICAgICAgICBmb3IgKHNpemVfdCBpID0gb2xkU2l6ZTsgaSA8IG1fc2l6ZTsg
KytpKQorICAgICAgICAgICAgbmV3IChOb3ROdWxsLCAmYXQoaSkpIFQoKTsKKyAgICB9CisKKyAg
ICBJdGVyYXRvciBiZWdpbigpCisgICAgeworICAgICAgICByZXR1cm4gSXRlcmF0b3IoKnRoaXMs
IDApOworICAgIH0KKworICAgIEl0ZXJhdG9yIGVuZCgpCisgICAgeworICAgICAgICByZXR1cm4g
SXRlcmF0b3IoKnRoaXMsIG1fc2l6ZSk7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0cnVjdCBT
ZWdtZW50IHsKKyAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworICAgICAg
ICAgICAgCisgICAgICAgIFQgZW50cmllc1tTZWdtZW50U2l6ZV07CisgICAgfTsKKworICAgIGJv
b2wgc2VnbWVudEV4aXN0c0ZvcihzaXplX3QgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4g
aW5kZXggLyBTZWdtZW50U2l6ZSA8IG1fbnVtU2VnbWVudHM7CisgICAgfQorCisgICAgU2VnbWVu
dCogc2VnbWVudEZvcihzaXplX3QgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gbV9zZWdt
ZW50c1tpbmRleCAvIFNlZ21lbnRTaXplXS5nZXQoKTsKKyAgICB9CisKKyAgICBzaXplX3Qgc3Vi
c2NyaXB0Rm9yKHNpemVfdCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBpbmRleCAlIFNl
Z21lbnRTaXplOworICAgIH0KKworICAgIHZvaWQgZW5zdXJlU2VnbWVudHNGb3Ioc2l6ZV90IHNp
emUpCisgICAgeworICAgICAgICBzaXplX3Qgc2VnbWVudENvdW50ID0gKG1fc2l6ZSArIFNlZ21l
bnRTaXplIC0gMSkgLyBTZWdtZW50U2l6ZTsKKyAgICAgICAgc2l6ZV90IG5lZWRlZFNlZ21lbnRD
b3VudCA9IChzaXplICsgU2VnbWVudFNpemUgLSAxKSAvIFNlZ21lbnRTaXplOworCisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSBzZWdtZW50Q291bnQgPyBzZWdtZW50Q291bnQgLSAxIDogMDsgaSA8
IG5lZWRlZFNlZ21lbnRDb3VudDsgKytpKQorICAgICAgICAgICAgZW5zdXJlU2VnbWVudChpKTsK
KyAgICB9CisKKyAgICB2b2lkIGVuc3VyZVNlZ21lbnQoc2l6ZV90IHNlZ21lbnRJbmRleCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHNlZ21lbnRJbmRl
eCA8PSBtX251bVNlZ21lbnRzKTsKKyAgICAgICAgaWYgKHNlZ21lbnRJbmRleCA9PSBtX251bVNl
Z21lbnRzKQorICAgICAgICAgICAgYWxsb2NhdGVTZWdtZW50KCk7CisgICAgfQorCisgICAgdm9p
ZCBhbGxvY2F0ZVNlZ21lbnQoKQorICAgIHsKKyAgICAgICAgbV9zZWdtZW50cy5ncm93KG1fbnVt
U2VnbWVudHMgKyAxKTsKKyAgICAgICAgbV9zZWdtZW50c1ttX251bVNlZ21lbnRzKytdID0gc3Rk
OjptYWtlX3VuaXF1ZTxTZWdtZW50PigpOworICAgIH0KKworICAgIHNpemVfdCBtX3NpemUgeyAw
IH07CisgICAgQ29uY3VycmVudEJ1ZmZlcjxzdGQ6OnVuaXF1ZV9wdHI8U2VnbWVudD4+IG1fc2Vn
bWVudHM7CisgICAgc2l6ZV90IG1fbnVtU2VnbWVudHMgeyAwIH07Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXVEYKKwordXNpbmcgV1RGOjpDb25jdXJyZW50VmVjdG9yOworCisjZW5kaWYgLy8gQ29u
Y3VycmVudFZlY3Rvcl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329114</attachid>
            <date>2017-12-12 08:57:23 -0800</date>
            <delta_ts>2017-12-12 11:02:01 -0800</delta_ts>
            <desc>added comments</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>79107</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI1NzcwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzNCBA
QAorMjAxNy0xMi0xMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBmbGFnIGEgY2VsbCBmb3IgdW5jb25kaXRpb25hbCBm
aW5hbGl6YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE4MDYzNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAg
ICAKKyAgICAgICAgVW5jb25kaXRpb25hbEZpbmFsaXplcnMgd2VyZSBhbm5veWluZyAtIHlvdSBo
YWQgdG8gYWxsb2NhdGUgdGhlbSBhbmQgeW91IGhhZCB0byBtYW5hZ2UgYQorICAgICAgICBnbG9i
YWwgbGlua2VkIGxpc3QgLSBidXQgdGhleSBoYWQgc29tZSBuaWNlIHByb3BlcnRpZXM6CisgICAg
ICAgIAorICAgICAgICAtIFlvdSBvbmx5IGRpZCB0aGUgaGFyZGVzdCB3b3JrIChjcmVhdGluZyB0
aGUgVW5jb25kaXRpb25hbEZpbmFsaXplcikgb24gZmlyc3QgR0Mgd2hlcmUgeW91CisgICAgICAg
ICAgc3Vydml2ZWQgYW5kIG5lZWRlZCBpdC4KKyAgICAgICAgICAgIC0+IEp1c3QgbmVlZGluZyBp
dCB3YXNuJ3QgZW5vdWdoLgorICAgICAgICAgICAgLT4gSnVzdCBzdXJ2aXZpbmcgd2Fzbid0IGVu
b3VnaC4KKyAgICAgICAgCisgICAgICAgIFRoZSBuZXcgQVBJIGJhc2VkIG9uIElzb1N1YnNwYWNl
cyBtZWFudCB0aGF0IGp1c3Qgc3Vydml2aW5nIHdhcyBlbm91Z2ggdG8gY2F1c2UgdW5jb25kaXRp
b25hbAorICAgICAgICBmaW5hbGl6ZXIgbG9naWMgdG8gYmUgaW52b2tlZC4gSSB0aGluayB0aGF0
J3Mgbm90IGdyZWF0LiBJbmZlcnJlZFR5cGUgZ290IGFyb3VuZCB0aGlzIGJ5CisgICAgICAgIG1h
a2luZyBJbmZlcnJlZFN0cnVjdHVyZSBhIGNlbGwsIGJ1dCB0aGlzIHdhcyBhIGdyb3NzIGhhY2su
IEZvciBvbmUsIGl0IG1lYW50IHRoYXQKKyAgICAgICAgSW5mZXJyZWRTdHJ1Y3R1cmUgd291bGQg
c3Vydml2ZSBkdXJpbmcgdGhlIEdDIGluIHdoaWNoIGl0cyBmaW5hbGl6ZXIgb2J2aWF0ZWQgdGhl
IG5lZWQgZm9yIGl0cworICAgICAgICBleGlzdGVuY2UuIEl0J3Mgbm90IHJlYWxseSBhbiBpZGlv
bSBJIHdhbnQgdXMgdG8gcmVwZWF0IGJlY2F1c2UgaXQgc291bmRzIGxpa2UgdGhlIHNvcnQgb2YK
KyAgICAgICAgdGhpbmcgdGhhdCB0dXJucyBvdXQgdG8gYmUgc3VidGx5IGJyb2tlbi4KKyAgICAg
ICAgCisgICAgICAgIFdlIHJlYWxseSBuZWVkIHRvIGhhdmUgYSB3YXkgb2YgaW5kaWNhdGluZyB3
aGVuIHlvdSBoYXZlIGVudGVyZWQgaW50byB0aGUgc3RhdGUgdGhhdCByZXF1aXJlcworICAgICAg
ICB5b3VyIHVuY29uZGl0aW9uYWwgZmluYWxpemVyIHRvIGJlIGludm9rZWQuIEJhc2ljYWxseSwg
d2Ugd2FudCB0byBiZSBhYmxlIHRvIHRyYWNrIHRoZSBzZXQgb2YKKyAgICAgICAgb2JqZWN0cyB0
aGF0IG5lZWQgdW5jb25kaXRpb25hbCBmaW5hbGl6ZXJzLiBPbmx5IHRoZSBzdWJzZXQgb2YgdGhh
dCBzZXQgdGhhdCBvdmVybGFwcyB3aXRoIHRoZQorICAgICAgICBzZXQgb2YgbWFya2VkIG9iamVj
dHMgbmVlZHMgdG8gYmUgYWNjdXJhdGUuIFRoZSBlYXNpZXN0IHdheSB0byBkbyB0aGlzIGlzIGEg
aGllcmFyY2h5IG9mCisgICAgICAgIGJpdHZlY3RvcnM6IG9uZSB0byBzYXkgd2hpY2ggTWFya2Vk
QmxvY2tzIGhhdmUgb2JqZWN0cyB0aGF0IGhhdmUgdW5jb25kaXRpb25hbCBmaW5hbGl6ZXJzLCBh
bmQKKyAgICAgICAgYW5vdGhlciBsZXZlbCB0byBzYXkgd2hpY2ggYXRvbXMgd2l0aGluIGEgTWFy
a2VkQmxvY2sgaGF2ZSB1bmNvbmRpdGlvbmFsIGZpbmFsaXplcnMuCisgICAgICAgIAorICAgICAg
ICBUaGlzIGNoYW5nZSBpbnRyb2R1Y2VzIElzb0NlbGxTZXQsIHdoaWNoIGNvdXBsZXMgaXRzZWxm
IHRvIHRoZSBNYXJrZWRBbGxvY2F0b3Igb2Ygc29tZQorICAgICAgICBJc29TdWJzcGFjZSB0byBh
bGxvdyBtYWludGFpbmluZyBhIHNldCBvZiBvYmplY3RzICh3ZWxsLCBjZWxscyAtIHlvdSBjb3Vs
ZCBkbyB0aGlzIHdpdGgKKyAgICAgICAgYXV4aWxpYXJpZXMpIHRoYXQgYmVsb25nIHRvIHRoYXQg
SXNvU3Vic3BhY2UuIEl0J2xsIGhhdmUgdW5kZWZpbmVkIGJlaGF2aW9yIGlmIHlvdSB0cnkgdG8K
KyAgICAgICAgYWRkL3JlbW92ZS9jb250YWlucyBhbiBvYmplY3QgdGhhdCBpc24ndCBpbiB0aGF0
IElzb1N1YnNwYWNlLiBGb3Igb2JqZWN0cyBpbiB0aGF0IHN1YnNwYWNlLAorICAgICAgICB5b3Ug
Y2FuIGFkZC9yZW1vdmUvY29udGFpbnMgYW5kIGZvckVhY2hNYXJrZWRDZWxsLiBUaGUgY29zdCBv
ZiBlYWNoIElzb0NlbGxTZXQgaXMgYXQgd29yc3QKKyAgICAgICAgYWJvdXQgMC44JSBpbmNyZWFz
ZSBpbiBzaXplIHRvIGV2ZXJ5IG9iamVjdCBpbiB0aGUgc3Vic3BhY2UgdGhhdCB0aGUgc2V0IGlz
IGF0dGFjaGVkIHRvLiBTbywKKyAgICAgICAgaXQgbWFrZXMgc2Vuc2UgdG8gaGF2ZSBhIGhhbmRm
dWwgcGVyIHN1YnNwYWNlIG1heC4gVGhpcyBjaGFuZ2Ugb25seSBuZWVkcyBvbmUgcGVyIHN1YnNw
YWNlLAorICAgICAgICBidXQgeW91IGNvdWxkIGltYWdpbmUgbW9yZSBpZiB3ZSBkbyB0aGlzIGZv
ciBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLgorICAgICAgICAKKyAgICAgICAgVG8gYWJzb2x1dGVs
eSBtaW5pbWl6ZSB0aGUgcG9zc2liaWxpdHkgdGhhdCB0aGlzIGluY3VycyBjb3N0cywgdGhlIGFk
ZC9yZW1vdmUvY29udGFpbnMKKyAgICAgICAgZnVuY3Rpb25zIGNhbiBiZSB1c2VkIGZyb20gYW55
IHRocmVhZCBzbyBsb25nIGFzIGZvckVhY2hNYXJrZWRDZWxsIGlzbid0IHJ1bm5pbmcuIFRoaXMg
bWVhbnMKKyAgICAgICAgdGhhdCBJbmZlcnJlZFR5cGUgb25seSBuZWVkcyB0byBhZGQgaXRzZWxm
IHRvIHRoZSBzZXQgZHVyaW5nIHZpc2l0Q2hpbGRyZW4uIFRodXMsIGl0IG5lZWRzIHRvCisgICAg
ICAgIGJvdGggc3Vydml2ZSBhbmQgbmVlZCBpdCBmb3IgdGhlIGhhcmRlc3Qgd29yayB0byB0YWtl
IHBsYWNlLiBUaGUgd29yayBvZiBhZGRpbmcgZG9lcyBpbnZvbHZlCisgICAgICAgIGEgZ25hcmx5
IGxvYWQgY2hhaW4gdGhhdCBlbmRzIGluIGEgQ0FTOiBsb2FkIGJsb2NrIGhhbmRsZSBmcm9tIGJs
b2NrLCBsb2FkIGluZGV4LCBsb2FkCisgICAgICAgIHNlZ21lbnQsIGxvYWQgYml0dmVjdG9yLCBs
b2FkIGJpdCAtPiBpZiBub3Qgc2V0LCB0aGVuIENBUy4gVGhhdCdzIGZpdmUgZGVwZW5kZW50IGxv
YWRzIQorICAgICAgICBIb3dldmVyLCBpdCdzIHBlcmZlY3QgZm9yIHJ1bm5pbmcgaW4gcGFyYWxs
ZWwgc2luY2UgdGhlIG9ubHkgd3JpdGUgb3BlcmF0aW9ucyBhcmUgdG8gd2lkZWx5CisgICAgICAg
IGRpc3BlcnNlZCBjYWNoZSBsaW5lcyB0aGF0IGNvbnRhaW4gdGhlIGJpdHMgdW5kZXJseWluZyB0
aGUgc2V0LgorICAgICAgICAKKyAgICAgICAgVGhlIGJlc3QgcGFydCBpcyBob3cgZm9yRWFjaE1h
cmtlZENlbGwgd29ya3MuIFRoYXQgc2tpcHMgYmxvY2tzIHRoYXQgZG9uJ3QgaGF2ZSBhbnkgb2Jq
ZWN0cworICAgICAgICB0aGF0IG5lZWQgdW5jb25kaXRpb25hbCBmaW5hbGl6ZXJzLCBhbmQgb25s
eSB0b3VjaGVzIHRoZSBtZW1vcnkgb2YgbWFya2VkIG9iamVjdHMgdGhhdCBoYXZlCisgICAgICAg
IHRoZSB1bmNvbmRpdGlvbmFsIGZpbmFsaXplciBiaXQgc2V0LiBJdCB3aWxsIHdhbGsgdGhvc2Ug
b2JqZWN0cyBpbiByb3VnaGx5IGFkZHJlc3Mgb3JkZXIuIEkKKyAgICAgICAgcHJldmlvdXNseSBm
b3VuZCB0aGF0IHRoaXMgc3BlZWRzIHVwIHdhbGtpbmcgb3ZlciBhIGxvdCBvZiBvYmplY3RzIHdo
ZW4gSSBtYWRlIHNpbWlsYXIgY2hhbmdlcworICAgICAgICBmb3IgRE9NIEdDIChjYWxsaW5nIHZp
c2l0QWRkaXRpb25hbENoaWxkcmVuIHZpYSBmb3JFYWNoTWFya2VkQ2VsbCByYXRoZXIgdGhhbiBi
eSB3YWxraW5nIGEKKyAgICAgICAgSGFzaFNldCkuCisgICAgICAgIAorICAgICAgICBUaGlzIGNo
YW5nZSBtYWtlcyBJbmZlcnJlZFN0cnVjdHVyZSBiZSBhIG1hbGxvYyBvYmplY3QgYWdhaW4sIGJ1
dCBub3cgaXQncyBpbiBhbiBJc29IZWFwLgorICAgICAgICAKKyAgICAgICAgTXkgZXhwZWN0YXRp
b24gZm9yIHRoaXMgY2hhbmdlIGlzIHRoYXQgaXQncyBwZXJmLW5ldXRyYWwuIExvbmctdGVybSwg
aXQgZ2l2ZXMgdXMgYSBwYXRoCisgICAgICAgIGZvcndhcmQgZm9yIGVsaW1pbmF0aW5nIFVuY29u
ZGl0aW9uYWxGaW5hbGl6ZXIgYW5kIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIgd2hpbGUgdXNpbmcK
KyAgICAgICAgSXNvU3Vic3BhY2UgaW4gbW9yZSBwbGFjZXMuCisKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIGhlYXAvQXRvbUluZGljZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkF0
b21JbmRpY2VzOjpBdG9tSW5kaWNlcyk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAg
ICAgKEpTQzo6SGVhcDo6ZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycyk6CisgICAgICAg
ICogaGVhcC9IZWFwLmg6CisgICAgICAgICogaGVhcC9Jc29DZWxsU2V0LmNwcDogQWRkZWQuCisg
ICAgICAgIChKU0M6Oklzb0NlbGxTZXQ6Oklzb0NlbGxTZXQpOgorICAgICAgICAoSlNDOjpJc29D
ZWxsU2V0Ojp+SXNvQ2VsbFNldCk6CisgICAgICAgIChKU0M6Oklzb0NlbGxTZXQ6OmFkZFNsb3cp
OgorICAgICAgICAoSlNDOjpJc29DZWxsU2V0OjpkaWRSZXNpemVCaXRzKToKKyAgICAgICAgKEpT
Qzo6SXNvQ2VsbFNldDo6ZGlkUmVtb3ZlQmxvY2spOgorICAgICAgICAoSlNDOjpJc29DZWxsU2V0
Ojpzd2VlcFRvRnJlZUxpc3QpOgorICAgICAgICAqIGhlYXAvSXNvQ2VsbFNldC5oOiBBZGRlZC4K
KyAgICAgICAgKiBoZWFwL0lzb0NlbGxTZXRJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlND
OjpJc29DZWxsU2V0OjphZGQpOgorICAgICAgICAoSlNDOjpJc29DZWxsU2V0OjpyZW1vdmUpOgor
ICAgICAgICAoSlNDOjpJc29DZWxsU2V0Ojpjb250YWlucyBjb25zdCk6CisgICAgICAgIChKU0M6
Oklzb0NlbGxTZXQ6OmZvckVhY2hNYXJrZWRDZWxsKToKKyAgICAgICAgKiBoZWFwL0lzb1N1YnNw
YWNlLmNwcDoKKyAgICAgICAgKEpTQzo6SXNvU3Vic3BhY2U6OmRpZFJlc2l6ZUJpdHMpOgorICAg
ICAgICAoSlNDOjpJc29TdWJzcGFjZTo6ZGlkUmVtb3ZlQmxvY2spOgorICAgICAgICAoSlNDOjpJ
c29TdWJzcGFjZTo6ZGlkQmVnaW5Td2VlcGluZ1RvRnJlZUxpc3QpOgorICAgICAgICAqIGhlYXAv
SXNvU3Vic3BhY2UuaDoKKyAgICAgICAgKiBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHA6CisgICAg
ICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWRkQmxvY2spOgorICAgICAgICAoSlNDOjpNYXJr
ZWRBbGxvY2F0b3I6OnJlbW92ZUJsb2NrKToKKyAgICAgICAgKiBoZWFwL01hcmtlZEFsbG9jYXRv
ci5oOgorICAgICAgICAqIGhlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oOgorICAgICAgICAq
IGhlYXAvTWFya2VkQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxl
Ojpzd2VlcCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzRW1wdHkpOiBE
ZWxldGVkLgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suaDoKKyAgICAgICAgKEpTQzo6TWFy
a2VkQmxvY2s6Om1hcmtzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRs
ZTo6bmV3bHlBbGxvY2F0ZWQgY29uc3QpOgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2tJbmxp
bmVzLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzQWxsb2NhdGVkKToK
KyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6aXNFbXB0eSk6CisgICAgICAgIChK
U0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OmVtcHR5TW9kZSk6CisgICAgICAgIChKU0M6Ok1hcmtl
ZEJsb2NrOjpIYW5kbGU6OmZvckVhY2hNYXJrZWRDZWxsKToKKyAgICAgICAgKiBoZWFwL1N1YnNw
YWNlLmNwcDoKKyAgICAgICAgKEpTQzo6U3Vic3BhY2U6OmRpZFJlc2l6ZUJpdHMpOgorICAgICAg
ICAoSlNDOjpTdWJzcGFjZTo6ZGlkUmVtb3ZlQmxvY2spOgorICAgICAgICAoSlNDOjpTdWJzcGFj
ZTo6ZGlkQmVnaW5Td2VlcGluZ1RvRnJlZUxpc3QpOgorICAgICAgICAqIGhlYXAvU3Vic3BhY2Uu
aDoKKyAgICAgICAgKiBoZWFwL1N1YnNwYWNlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTdWJz
cGFjZTo6Zm9yRWFjaE1hcmtlZENlbGwpOgorICAgICAgICAqIHJ1bnRpbWUvSW5mZXJyZWRTdHJ1
Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFN0cnVjdHVyZTo6SW5mZXJyZWRTdHJ1
Y3R1cmUpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFN0cnVjdHVyZTo6Y3JlYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6SW5mZXJyZWRTdHJ1Y3R1cmU6OmRlc3Ryb3kpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpJbmZlcnJlZFN0cnVjdHVyZTo6Y3JlYXRlU3RydWN0dXJlKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6SW5mZXJyZWRTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4pOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpJbmZlcnJlZFN0cnVjdHVyZTo6ZmluYWxpemVVbmNvbmRpdGlv
bmFsbHkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmZlcnJlZFN0cnVjdHVyZTo6ZmluaXNo
Q3JlYXRpb24pOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1cmUu
aDoKKyAgICAgICAgKiBydW50aW1lL0luZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludC5jcHA6Cisg
ICAgICAgIChKU0M6OkluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKToK
KyAgICAgICAgKiBydW50aW1lL0luZmVycmVkVHlwZS5jcHA6CisgICAgICAgIChKU0M6OkluZmVy
cmVkVHlwZTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlwZTo6d2ls
bFN0b3JlVmFsdWVTbG93KToKKyAgICAgICAgKEpTQzo6SW5mZXJyZWRUeXBlOjptYWtlVG9wU2xv
dyk6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlwZTo6c2V0KToKKyAgICAgICAgKEpTQzo6SW5m
ZXJyZWRUeXBlOjpyZW1vdmVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6
OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KToKKyAgICAgICAgKiBydW50aW1lL0luZmVycmVkVHlw
ZS5oOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgor
ICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKwogMjAxNy0xMi0xMSAgU2FhbSBCYXJhdGkgIDxzYmFy
YXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBXZSBuZWVkIHRvIGRpc2FibGVDYWNoaW5nKCkgaW4g
RXJyb3JJbnN0YW5jZSB3aGVuIHdlIG1hdGVyaWFsaXplIHByb3BlcnRpZXMKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDIyNTc3MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNDk1LDYgKzQ5NSw3IEBAIGhl
YXAvSGVhcFNuYXBzaG90LmNwcAogaGVhcC9IZWFwU25hcHNob3RCdWlsZGVyLmNwcAogaGVhcC9J
bmNyZW1lbnRhbFN3ZWVwZXIuY3BwCiBoZWFwL0lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3Bw
CitoZWFwL0lzb0NlbGxTZXQuY3BwCiBoZWFwL0lzb1N1YnNwYWNlLmNwcAogaGVhcC9KSVRTdHVi
Um91dGluZVNldC5jcHAKIGhlYXAvTGFyZ2VBbGxvY2F0aW9uLmNwcApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyNTc3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC00NzQsNiArNDc0LDEwIEBACiAJCTBGQjE3NjYzMTk2QjhGOUUwMDkxMDUyQSAvKiBE
RkdQdXJlVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGQjE3NjVGMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuaCAqLzsgfTsKIAkJ
MEZCMzg3OEUxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpckJsb2NrV29ya2xpc3QuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjM4NzhCMUJGQkM0NEQwMEUz
QUIxRSAvKiBBaXJCbG9ja1dvcmtsaXN0LmggKi87IH07CiAJCTBGQjM4NzkwMUJGQkM0NEQwMEUz
QUIxRSAvKiBBaXJPcHRpbWl6ZUJsb2NrT3JkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjM4NzhEMUJGQkM0NEQwMEUzQUIxRSAvKiBBaXJPcHRp
bWl6ZUJsb2NrT3JkZXIuaCAqLzsgfTsKKwkJMEZCNDY3N0YxRkREQTZFOTAwM0ZDQjA5IC8qIEF0
b21JbmRpY2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkI0Njc3RTFGRERBNkU1MDAzRkNCMDkgLyogQXRvbUluZGljZXMuaCAqLzsgfTsKKwkJMEZC
NDY3ODAxRkREQTZGMTAwM0ZDQjA5IC8qIElzb0NlbGxTZXQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjQ2NzdEMUZEREE2RDkwMDNGQ0IwOSAvKiBJ
c29DZWxsU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEZCNDY3ODExRkREQTZGNzAwM0ZDQjA5IC8qIElzb0NlbGxTZXRJbmxpbmVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0Njc3QjFGRERB
NkQ4MDAzRkNCMDkgLyogSXNvQ2VsbFNldElubGluZXMuaCAqLzsgfTsKKwkJMEZCNDY3ODUxRkRG
QjQ1NDAwM0ZDQjA5IC8qIEluZmVycmVkVHlwZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjQ2Nzg0MUZERkI0NTIwMDNGQ0IwOSAvKiBJ
bmZlcnJlZFR5cGVJbmxpbmVzLmggKi87IH07CiAJCTBGQjQ3NjdFMUQ5OUFFQTkwMDhFQTZDQiAv
KiBHQ0RlZmVycmFsQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZCNDc2N0MxRDk5QUVBNzAwOEVBNkNCIC8qIEdDRGVmZXJyYWxDb250ZXh0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZC
NDc2N0YxRDk5QUVBRDAwOEVBNkNCIC8qIEdDRGVmZXJyYWxDb250ZXh0SW5saW5lcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNDc2N0QxRDk5QUVB
NzAwOEVBNkNCIC8qIEdDRGVmZXJyYWxDb250ZXh0SW5saW5lcy5oICovOyB9OwogCQkwRkI0RkI3
NDFCQzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0RkI3MTFCQzg0MzE0MDAyNUNBNUEgLyog
RlRMTGF6eVNsb3dQYXRoLmggKi87IH07CkBAIC0yNTYyLDYgKzI1NjYsMTEgQEAKIAkJMEZCMzg3
OTExQkZEMzFBMTAwRTNBQjFFIC8qIEZUTENvbXBpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gRlRMQ29tcGlsZS5jcHA7IHBhdGggPSBmdGwvRlRMQ29tcGlsZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjQxNTgzMUQ3OEY5ODIwMERGOEQw
OSAvKiBBcnJheUNvbnZlbnRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEFycmF5Q29udmVudGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkI0MzhBMjE5MjcwQjFEMDBFMUZCQzkgLyogU3RydWN0dXJlU2V0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cnVjdHVyZVNldC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGQjQ2NzdCMUZEREE2RDgwMDNGQ0IwOSAvKiBJc29DZWxsU2V0
SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJc29DZWxsU2V0SW5s
aW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI0Njc3QzFGRERBNkQ5MDAz
RkNCMDkgLyogSXNvQ2VsbFNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBJc29DZWxsU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCNDY3
N0QxRkREQTZEOTAwM0ZDQjA5IC8qIElzb0NlbGxTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSXNvQ2VsbFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkI0Njc3RTFGRERBNkU1MDAzRkNCMDkgLyogQXRvbUluZGljZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQXRvbUluZGljZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZCNDY3ODQxRkRGQjQ1MjAwM0ZDQjA5IC8qIEluZmVycmVkVHlwZUlubGluZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5mZXJyZWRUeXBlSW5saW5lcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0NzY3QzFEOTlBRUE3MDA4RUE2Q0IgLyog
R0NEZWZlcnJhbENvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR0NE
ZWZlcnJhbENvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNDc2N0Qx
RDk5QUVBNzAwOEVBNkNCIC8qIEdDRGVmZXJyYWxDb250ZXh0SW5saW5lcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBHQ0RlZmVycmFsQ29udGV4dElubGluZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNEI1MTAxNkIzQTk2NDAwM0Y2OTZCIC8qIERGR01p
bmlmaWVkSUQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTWluaWZpZWRJ
RC5oOyBwYXRoID0gZGZnL0RGR01pbmlmaWVkSUQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTU1MjUsNiArNTUzNCw3IEBACiAJCQkJMEY5NjMwMzUxRDQxOTJDMzAwNTYwOUQ5IC8q
IEFsbG9jYXRvckF0dHJpYnV0ZXMuY3BwICovLAogCQkJCTBGOTYzMDM2MUQ0MTkyQzMwMDU2MDlE
OSAvKiBBbGxvY2F0b3JBdHRyaWJ1dGVzLmggKi8sCiAJCQkJMEYzMENCNUQxRkNFNDZCNDAwNEI1
MzIzIC8qIEFsbG9jYXRvckZvck1vZGUuaCAqLywKKwkJCQkwRkI0Njc3RTFGRERBNkU1MDAzRkNC
MDkgLyogQXRvbUluZGljZXMuaCAqLywKIAkJCQkwRkRFODdGODFERkQwQzZEMDA2NEMzOTAgLyog
Q2VsbENvbnRhaW5lci5jcHAgKi8sCiAJCQkJMEYwNzBBNDIxRDU0M0E4OTAwNkU3MjMyIC8qIENl
bGxDb250YWluZXIuaCAqLywKIAkJCQkwRjA3MEE0MzFENTQzQTg5MDA2RTcyMzIgLyogQ2VsbENv
bnRhaW5lcklubGluZXMuaCAqLywKQEAgLTU2MTEsNiArNTYyMSw5IEBACiAJCQkJQzI1RjhCQ0Mx
NTc1NDRBOTAwMjQ1QjcxIC8qIEluY3JlbWVudGFsU3dlZXBlci5oICovLAogCQkJCTBGRENFMTJG
MUZCMTFEOUQwMDZGMzkwMSAvKiBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcCAqLywKIAkJ
CQkwRkRDRTEzMDFGQjExRDlEMDA2RjM5MDEgLyogSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5o
ICovLAorCQkJCTBGQjQ2NzdDMUZEREE2RDkwMDNGQ0IwOSAvKiBJc29DZWxsU2V0LmNwcCAqLywK
KwkJCQkwRkI0Njc3RDFGRERBNkQ5MDAzRkNCMDkgLyogSXNvQ2VsbFNldC5oICovLAorCQkJCTBG
QjQ2NzdCMUZEREE2RDgwMDNGQ0IwOSAvKiBJc29DZWxsU2V0SW5saW5lcy5oICovLAogCQkJCTBG
RENFMTJDMUZBRkI0REUwMDZGMzkwMSAvKiBJc29TdWJzcGFjZS5jcHAgKi8sCiAJCQkJMEZEQ0Ux
MkIxRkFGQjRERTAwNkYzOTAxIC8qIElzb1N1YnNwYWNlLmggKi8sCiAJCQkJMEY3NjZEMjkxNUE4
Q0MzNDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmNwcCAqLywKQEAgLTY0ODYsNiArNjQ5
OSw3IEBACiAJCQkJMEZCRjkyQjcxRkQ3NkZGQzAwQUMyOEE4IC8qIEluZmVycmVkU3RydWN0dXJl
V2F0Y2hwb2ludC5oICovLAogCQkJCTBGMEE3NTIwMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJl
ZFR5cGUuY3BwICovLAogCQkJCTBGMEE3NTIxMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5
cGUuaCAqLywKKwkJCQkwRkI0Njc4NDFGREZCNDUyMDAzRkNCMDkgLyogSW5mZXJyZWRUeXBlSW5s
aW5lcy5oICovLAogCQkJCTBGRkM5MjBGMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVU
YWJsZS5jcHAgKi8sCiAJCQkJMEZGQzkyMTAxQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlw
ZVRhYmxlLmggKi8sCiAJCQkJMEZGOEJERTgxQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVkVmFs
dWUuY3BwICovLApAQCAtNzk5Nyw2ICs4MDExLDcgQEAKIAkJCQkwRkVDODU3MjFCREFDREM3MDA4
MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQzYzQkMxRTYz
NDQwQzAwQzEzODM5IC8qIEFpckJsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkIzODc4RTFCRkJDNDREMDBFM0FCMUUgLyogQWlyQmxvY2tXb3JrbGlzdC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZCNDY3ODExRkREQTZGNzAwM0ZDQjA5IC8qIElzb0NlbGxTZXRJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc5QzdDQTFFNzRDOTNCMDBFQjM0RDEgLyogQWlyQnJl
YWtDcml0aWNhbEVkZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYxODMyQTFDNDVCRjA3MDA3
MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVD
ODU3NDFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggaW4gSGVhZGVycyAqLywK
QEAgLTg3NzgsNiArODc5Myw3IEBACiAJCQkJNzAxMTNENEMxQThEQjA5MzAwMzg0OEM0IC8qIEl0
ZXJhdG9yT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzBEQzNFMEExQjJERjJDNzAw
MDU0Mjk5IC8qIEl0ZXJhdG9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQx
MzBFMTZGNUNEMDBCMzQ0NjAgLyogSmF2YVNjcmlwdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZC
NDY3ODUxRkRGQjQ1NDAwM0ZDQjA5IC8qIEluZmVycmVkVHlwZUlubGluZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE1MDNGQTFBMTg4RTBGQjAwMDExMEYxNCAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1l
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNDBFMTZGNUNEMDBCMzQ0NjAgLyogSmF2YVNj
cmlwdENvcmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDE1MEUxNkY1Q0QwMEIzNDQ2MCAv
KiBKYXZhU2NyaXB0Q29yZVByZWZpeC5oIGluIEhlYWRlcnMgKi8sCkBAIC04OTczLDYgKzg5ODks
NyBAQAogCQkJCUFEMkZDQkU1MURCNThEQUQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUFERTgwMjk5MUUwOEYxREUwMDU4REU3OCAvKiBKU1dl
YkFzc2VtYmx5TGlua0Vycm9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JFNzFEQjU4REFE
MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseU1lbW9yeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZC
NDY3N0YxRkREQTZFOTAwM0ZDQjA5IC8qIEF0b21JbmRpY2VzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBRDJGQ0MwNTFEQjU4REFEMDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseU1vZHVsZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQUQyRkNCRTkxREI1OERBRDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlS
dW50aW1lRXJyb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQkVCMURCNThEQUQwMEIzRTcz
NiAvKiBKU1dlYkFzc2VtYmx5VGFibGUuaCBpbiBIZWFkZXJzICovLApAQCAtOTI1OSw2ICs5Mjc2
LDcgQEAKIAkJCQlDMjBCQTkyRDE2QkIxQzE1MDBCM0FFQTIgLyogU3RydWN0dXJlUmFyZURhdGFJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkzMzJBNTE0Q0E3REREMDA4NUYzQzYgLyog
U3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc2NkQzOTE1QUU0QTFGMDA4RjM2
M0UgLyogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEZCNDY3ODAxRkREQTZGMTAwM0ZDQjA5IC8qIElzb0NlbGxTZXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDQ0YwRDA4MEVGMEFBQjkwMDQxM0M4RiAvKiBTdHJ1Y3R1cmVTdHViSW5mby5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkM5MDQxNDgwRUI5MjUwOTAwRkUyNkZBIC8qIFN0cnVjdHVyZVRy
YW5zaXRpb25UYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3REYxMzcxRTI5NzBFMTAwOTU5
NTFCIC8qIFN1YnNwYWNlLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0F0b21JbmRpY2VzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQXRvbUluZGljZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9BdG9tSW5kaWNlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsKKworc3Ry
dWN0IEF0b21JbmRpY2VzIHsKKyAgICBBdG9tSW5kaWNlcygpIHsgfQorICAgIAorICAgIEF0b21J
bmRpY2VzKEhlYXBDZWxsKiBjZWxsKQorICAgICAgICA6IGJsb2NrKE1hcmtlZEJsb2NrOjpibG9j
a0ZvcihjZWxsKSkKKyAgICAgICAgLCBibG9ja0luZGV4KGJsb2NrLT5oYW5kbGUoKS5pbmRleCgp
KQorICAgICAgICAsIGF0b21OdW1iZXIoYmxvY2stPmF0b21OdW1iZXIoY2VsbCkpCisgICAgewor
ICAgIH0KKyAgICAKKyAgICBNYXJrZWRCbG9jayogYmxvY2s7CisgICAgc2l6ZV90IGJsb2NrSW5k
ZXg7CisgICAgc2l6ZV90IGF0b21OdW1iZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIyNTc3MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MCw4ICs0MCw5IEBACiAjaW5jbHVkZSAiSGVhcFNuYXBzaG90LmgiCiAjaW5jbHVkZSAiSGVhcFZl
cmlmaWVyLmgiCiAjaW5jbHVkZSAiSW5jcmVtZW50YWxTd2VlcGVyLmgiCi0jaW5jbHVkZSAiSW5m
ZXJyZWRTdHJ1Y3R1cmUuaCIKKyNpbmNsdWRlICJJbmZlcnJlZFR5cGVJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiSW50ZXJwcmV0ZXIuaCIKKyNpbmNsdWRlICJJc29DZWxsU2V0SW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkpJVFN0dWJSb3V0aW5lU2V0LmgiCiAjaW5jbHVkZSAiSklUV29ya2xpc3QuaCIKICNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCkBAIC01NTIsMTggKzU1MywxOCBAQCB2b2lkIEhlYXA6OmFk
ZFJlZmVyZW5jZShKU0NlbGwqIGNlbGwsIEFyCiAgICAgfQogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBDZWxsVHlwZT4KLXZvaWQgSGVhcDo6ZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycyhT
dWJzcGFjZSYgc3Vic3BhY2UpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgdHlwZW5hbWUg
Q2VsbFNldD4KK3ZvaWQgSGVhcDo6ZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycyhDZWxs
U2V0JiBjZWxsU2V0KQogewotICAgIHN1YnNwYWNlLmZvckVhY2hNYXJrZWRDZWxsKAorICAgIGNl
bGxTZXQuZm9yRWFjaE1hcmtlZENlbGwoCiAgICAgICAgIFsmXSAoSGVhcENlbGwqIGNlbGwsIEhl
YXBDZWxsOjpLaW5kKSB7Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxDZWxsVHlwZSo+KGNlbGwp
LT5maW5hbGl6ZVVuY29uZGl0aW9uYWxseSgqdm0oKSk7CisgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Q2VsbFR5cGUqPihjZWxsKS0+ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKnZtKCkp
OwogICAgICAgICB9KTsKIH0KIAogdm9pZCBIZWFwOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5h
bGl6ZXJzKCkKIHsKLSAgICBmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzPEluZmVycmVk
U3RydWN0dXJlPih2bSgpLT5pbmZlcnJlZFN0cnVjdHVyZVNwYWNlKTsKKyAgICBmaW5hbGl6ZVVu
Y29uZGl0aW9uYWxGaW5hbGl6ZXJzPEluZmVycmVkVHlwZT4odm0oKS0+aW5mZXJyZWRUeXBlc1dp
dGhGaW5hbGl6ZXJzKTsKICAgICAKICAgICB3aGlsZSAobV91bmNvbmRpdGlvbmFsRmluYWxpemVy
cy5oYXNOZXh0KCkpIHsKICAgICAgICAgVW5jb25kaXRpb25hbEZpbmFsaXplciogZmluYWxpemVy
ID0gbV91bmNvbmRpdGlvbmFsRmluYWxpemVycy5yZW1vdmVOZXh0KCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyMjU3NzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5Niw4ICs0OTYsOCBAQCBwcml2
YXRlOgogICAgIHZvaWQgbm90aWZ5SW5jcmVtZW50YWxTd2VlcGVyKCk7CiAgICAgdm9pZCBoYXJ2
ZXN0V2Vha1JlZmVyZW5jZXMoKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlPgot
ICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycyhTdWJzcGFjZSYpOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCB0eXBlbmFtZSBDZWxsU2V0PgorICAgIHZvaWQg
ZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycyhDZWxsU2V0Jik7CiAgICAgCiAgICAgdm9p
ZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKCk7CiAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSXNvQ2VsbFNldC5oIgorCisjaW5j
bHVkZSAiTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5s
aW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworSXNvQ2VsbFNldDo6SXNvQ2VsbFNldChJc29T
dWJzcGFjZSYgc3Vic3BhY2UpCisgICAgOiBtX3N1YnNwYWNlKHN1YnNwYWNlKQoreworICAgIHNp
emVfdCBzaXplID0gc3Vic3BhY2UubV9hbGxvY2F0b3IubV9ibG9ja3Muc2l6ZSgpOworICAgIG1f
YmxvY2tzV2l0aEJpdHMucmVzaXplKHNpemUpOworICAgIG1fYml0cy5ncm93KHNpemUpOworICAg
IHN1YnNwYWNlLm1fY2VsbFNldHMuYXBwZW5kKHRoaXMpOworfQorCitJc29DZWxsU2V0Ojp+SXNv
Q2VsbFNldCgpCit7CisgICAgaWYgKGlzT25MaXN0KCkpCisgICAgICAgIEJhc2ljUmF3U2VudGlu
ZWxOb2RlPElzb0NlbGxTZXQ+OjpyZW1vdmUoKTsKK30KKworTkVWRVJfSU5MSU5FIEJpdG1hcDxN
YXJrZWRCbG9jazo6YXRvbXNQZXJCbG9jaz4qIElzb0NlbGxTZXQ6OmFkZFNsb3coc2l6ZV90IGJs
b2NrSW5kZXgpCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3N1YnNwYWNlLm1fYWxs
b2NhdG9yLm1fYml0dmVjdG9yTG9jayk7CisgICAgYXV0byYgYml0c1B0clJlZiA9IG1fYml0c1ti
bG9ja0luZGV4XTsKKyAgICBhdXRvKiBiaXRzID0gYml0c1B0clJlZi5nZXQoKTsKKyAgICBpZiAo
IWJpdHMpIHsKKyAgICAgICAgYml0c1B0clJlZiA9IHN0ZDo6bWFrZV91bmlxdWU8Qml0bWFwPE1h
cmtlZEJsb2NrOjphdG9tc1BlckJsb2NrPj4oKTsKKyAgICAgICAgYml0cyA9IGJpdHNQdHJSZWYu
Z2V0KCk7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgIG1fYmxvY2tz
V2l0aEJpdHNbYmxvY2tJbmRleF0gPSB0cnVlOworICAgIH0KKyAgICByZXR1cm4gYml0czsKK30K
Kwordm9pZCBJc29DZWxsU2V0OjpkaWRSZXNpemVCaXRzKHNpemVfdCBuZXdTaXplKQoreworICAg
IG1fYmxvY2tzV2l0aEJpdHMucmVzaXplKG5ld1NpemUpOworICAgIG1fYml0cy5ncm93KG5ld1Np
emUpOworfQorCit2b2lkIElzb0NlbGxTZXQ6OmRpZFJlbW92ZUJsb2NrKHNpemVfdCBibG9ja0lu
ZGV4KQoreworICAgIG1fYmxvY2tzV2l0aEJpdHNbYmxvY2tJbmRleF0gPSBmYWxzZTsKKyAgICBt
X2JpdHNbYmxvY2tJbmRleF0gPSBudWxscHRyOworfQorCit2b2lkIElzb0NlbGxTZXQ6OnN3ZWVw
VG9GcmVlTGlzdChNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jaykKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVCghYmxvY2stPmlzQWxsb2NhdGVkKCkpOworICAgIAorICAgIGlmICghbV9ibG9ja3NXaXRo
Qml0c1tibG9jay0+aW5kZXgoKV0pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBXVEY6Omxv
YWRMb2FkRmVuY2UoKTsKKyAgICAKKyAgICBpZiAoIW1fYml0c1tibG9jay0+aW5kZXgoKV0pIHsK
KyAgICAgICAgZGF0YUxvZygiRkFUQUw6IGZvciBibG9jayBpbmRleCAiLCBibG9jay0+aW5kZXgo
KSwgIjpcbiIpOworICAgICAgICBkYXRhTG9nKCJCbG9ja3Mgd2l0aCBiaXRzIHNheXM6ICIsICEh
bV9ibG9ja3NXaXRoQml0c1tibG9jay0+aW5kZXgoKV0sICJcbiIpOworICAgICAgICBkYXRhTG9n
KCJCaXRzIHNheXM6ICIsIFJhd1BvaW50ZXIobV9iaXRzW2Jsb2NrLT5pbmRleCgpXS5nZXQoKSks
ICJcbiIpOworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAg
ICAKKyAgICBpZiAoYmxvY2stPmhhc0FueU5ld2x5QWxsb2NhdGVkKCkpIHsKKyAgICAgICAgbV9i
aXRzW2Jsb2NrLT5pbmRleCgpXS0+ZmlsdGVyKGJsb2NrLT5uZXdseUFsbG9jYXRlZCgpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChibG9jay0+aXNFbXB0eSgpIHx8IGJsb2Nr
LT5hcmVNYXJrc1N0YWxlKCkpIHsKKyAgICAgICAgbV9ibG9ja3NXaXRoQml0c1tibG9jay0+aW5k
ZXgoKV0gPSBmYWxzZTsKKyAgICAgICAgbV9iaXRzW2Jsb2NrLT5pbmRleCgpXSA9IG51bGxwdHI7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9iaXRzW2Jsb2NrLT5pbmRleCgp
XS0+ZmlsdGVyKGJsb2NrLT5ibG9jaygpLm1hcmtzKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXQuaAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4K
KyNpbmNsdWRlIDx3dGYvQ29uY3VycmVudFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0Qml0
VmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBIZWFwQ2VsbDsKK2NsYXNzIElz
b1N1YnNwYWNlOworCisvLyBDcmVhdGUgYSBzZXQgb2YgY2VsbHMgdGhhdCBhcmUgaW4gYW4gSXNv
U3Vic3BhY2UuIFRoaXMgYWxsb3dzIGNvbmN1cnJlbnQgTygxKSBzZXQgaW5zZXJ0aW9uIGFuZAor
Ly8gcmVtb3ZhbC4gRWFjaCBzdWNoIHNldCBzaG91bGQgYmUgdGhvdWdodCBvZiBhcyBhIDAuOCUg
aW5jcmVhc2UgaW4gb2JqZWN0IHNpemUgZm9yIG9iamVjdHMgaW4gdGhhdAorLy8gSXNvU3Vic3Bh
Y2UgKGl0J3MgbGlrZSBhZGRpbmcgMSBiaXQgZXZlcnkgMTYgYnl0ZXMsIG9yIDEgYml0IGV2ZXJ5
IDEyOCBiaXRzKS4KK2NsYXNzIElzb0NlbGxTZXQgOiBwdWJsaWMgQmFzaWNSYXdTZW50aW5lbE5v
ZGU8SXNvQ2VsbFNldD4geworcHVibGljOgorICAgIElzb0NlbGxTZXQoSXNvU3Vic3BhY2UmIHN1
YnNwYWNlKTsKKyAgICB+SXNvQ2VsbFNldCgpOworICAgIAorICAgIGJvb2wgYWRkKEhlYXBDZWxs
KiBjZWxsKTsKKyAgICAKKyAgICBib29sIHJlbW92ZShIZWFwQ2VsbCogY2VsbCk7CisgICAgCisg
ICAgYm9vbCBjb250YWlucyhIZWFwQ2VsbCogY2VsbCkgY29uc3Q7CisgICAgCisgICAgLy8gVGhp
cyB3aWxsIGhhdmUgdG8gZG8gYSBjb21iaW5lZCBzZWFyY2ggb3ZlciB3aGF0ZXZlciBTdWJzcGFj
ZTo6Zm9yRWFjaE1hcmtlZENlbGwgdXNlcyBhbmQKKyAgICAvLyBvdXIgbV9ibG9ja3NXaXRoQml0
cy4KKyAgICAvLyBOT1RFOiBJdCdzIGlsbGVnYWwgdG8gY2FsbCBhZGQoKSBvciByZW1vdmUoKSBj
b25jdXJyZW50bHkgdG8gdGhpcywgYnV0IHNlbGYtcmVtb3ZlKCkgd2lsbCB3b3JrLgorICAgIC8v
IEJ1dCBpdCdzIGJldHRlciBpZiB5b3UgcmV0dXJuIFJlbW92ZSBpbnN0ZWFkLgorICAgIGVudW0g
Y2xhc3MgRm9yRWFjaFJlc3VsdCB7CisgICAgICAgIENvbnRpbnVlLAorICAgICAgICBSZW1vdmVB
bmRDb250aW51ZSwKKyAgICB9OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9p
ZCBmb3JFYWNoTWFya2VkQ2VsbChjb25zdCBGdW5jJik7CisgICAgCitwcml2YXRlOgorICAgIGZy
aWVuZCBjbGFzcyBJc29TdWJzcGFjZTsKKyAgICAKKyAgICBCaXRtYXA8TWFya2VkQmxvY2s6OmF0
b21zUGVyQmxvY2s+KiBhZGRTbG93KHNpemVfdCBibG9ja0luZGV4KTsKKyAgICAKKyAgICB2b2lk
IGRpZFJlc2l6ZUJpdHMoc2l6ZV90IG5ld1NpemUpOworICAgIHZvaWQgZGlkUmVtb3ZlQmxvY2so
c2l6ZV90IGJsb2NrSW5kZXgpOworICAgIHZvaWQgc3dlZXBUb0ZyZWVMaXN0KE1hcmtlZEJsb2Nr
OjpIYW5kbGUqKTsKKyAgICAKKyAgICBJc29TdWJzcGFjZSYgbV9zdWJzcGFjZTsKKyAgICAKKyAg
ICAvLyBJZGVhOiBzd2VlcGluZyB0byBmcmVlLWxpc3QgY2xlYXJzIGJpdHMgZm9yIHRob3NlIGNl
bGxzIHRoYXQgd2VyZSBmcmVlLWxpc3RlZC4gVGhlIGZpcnN0IHRpbWUKKyAgICAvLyB3ZSBhZGQg
YSBjZWxsIGluIGEgYmxvY2ssIHRoYXQgYmxvY2sgZ2V0cyBhIGZyZWUtbGlzdC4gVW5sZXNzIHdl
IGRvIHNvbWV0aGluZyB0aGF0IG9idmlvdXNseQorICAgIC8vIGNsZWFycyBhbGwgYml0cyBmb3Ig
YSBibG9jaywgd2Uga2VlcCBpdCBzZXQgaW4gYmxvY2tzV2l0aEJpdHMuCisgICAgCisgICAgRmFz
dEJpdFZlY3RvciBtX2Jsb2Nrc1dpdGhCaXRzOworICAgIENvbmN1cnJlbnRWZWN0b3I8c3RkOjp1
bmlxdWVfcHRyPEJpdG1hcDxNYXJrZWRCbG9jazo6YXRvbXNQZXJCbG9jaz4+PiBtX2JpdHM7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSXNvQ2VsbFNldElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Jc29DZWxsU2V0SW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkF0b21JbmRpY2VzLmgiCisjaW5jbHVkZSAiSXNv
Q2VsbFNldC5oIgorI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworaW5saW5lIGJvb2wgSXNvQ2VsbFNldDo6YWRkKEhlYXBDZWxsKiBjZWxsKQorewor
ICAgIEF0b21JbmRpY2VzIGF0b21JbmRpY2VzKGNlbGwpOworICAgIGF1dG8mIGJpdHNQdHJSZWYg
PSBtX2JpdHNbYXRvbUluZGljZXMuYmxvY2tJbmRleF07CisgICAgYXV0byogYml0cyA9IGJpdHNQ
dHJSZWYuZ2V0KCk7CisgICAgaWYgKFVOTElLRUxZKCFiaXRzKSkKKyAgICAgICAgYml0cyA9IGFk
ZFNsb3coYXRvbUluZGljZXMuYmxvY2tJbmRleCk7CisgICAgcmV0dXJuICFiaXRzLT5jb25jdXJy
ZW50VGVzdEFuZFNldChhdG9tSW5kaWNlcy5hdG9tTnVtYmVyKTsKK30KKworaW5saW5lIGJvb2wg
SXNvQ2VsbFNldDo6cmVtb3ZlKEhlYXBDZWxsKiBjZWxsKQoreworICAgIEF0b21JbmRpY2VzIGF0
b21JbmRpY2VzKGNlbGwpOworICAgIGF1dG8mIGJpdHNQdHJSZWYgPSBtX2JpdHNbYXRvbUluZGlj
ZXMuYmxvY2tJbmRleF07CisgICAgYXV0byogYml0cyA9IGJpdHNQdHJSZWYuZ2V0KCk7CisgICAg
aWYgKCFiaXRzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGJpdHMtPmNvbmN1
cnJlbnRUZXN0QW5kQ2xlYXIoYXRvbUluZGljZXMuYXRvbU51bWJlcik7Cit9CisKK2lubGluZSBi
b29sIElzb0NlbGxTZXQ6OmNvbnRhaW5zKEhlYXBDZWxsKiBjZWxsKSBjb25zdAoreworICAgIEF0
b21JbmRpY2VzIGF0b21JbmRpY2VzKGNlbGwpOworICAgIGF1dG8qIGJpdHMgPSBtX2JpdHNbYXRv
bUluZGljZXMuYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgaWYgKGJpdHMpCisgICAgICAgIHJldHVy
biBiaXRzLT5nZXQoYXRvbUluZGljZXMuYXRvbU51bWJlcik7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgordm9pZCBJc29DZWxsU2V0Ojpmb3JFYWNoTWFy
a2VkQ2VsbChjb25zdCBGdW5jJiBmdW5jKQoreworICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2Nh
dG9yID0gbV9zdWJzcGFjZS5tX2FsbG9jYXRvcjsKKyAgICAoYWxsb2NhdG9yLm1fbWFya2luZ05v
dEVtcHR5ICYgbV9ibG9ja3NXaXRoQml0cykuZm9yRWFjaFNldEJpdCgKKyAgICAgICAgWyZdIChz
aXplX3QgYmxvY2tJbmRleCkgeworICAgICAgICAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogYmxv
Y2sgPSBhbGxvY2F0b3IubV9ibG9ja3NbYmxvY2tJbmRleF07CisKKyAgICAgICAgICAgIGF1dG8q
IGJpdHMgPSBtX2JpdHNbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBib29sIGhhZEJp
dHMgPSBmYWxzZTsKKyAgICAgICAgICAgIGJsb2NrLT5mb3JFYWNoTWFya2VkQ2VsbCgKKyAgICAg
ICAgICAgICAgICBbJl0gKHNpemVfdCBhdG9tTnVtYmVyLCBIZWFwQ2VsbCogY2VsbCwgSGVhcENl
bGw6OktpbmQga2luZCkgLT4gSXRlcmF0aW9uU3RhdHVzIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGJpdHMtPmdldChhdG9tTnVtYmVyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgRm9y
RWFjaFJlc3VsdCByZXN1bHQgPSBmdW5jKGNlbGwsIGtpbmQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgc3dpdGNoIChyZXN1bHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRm9y
RWFjaFJlc3VsdDo6Q29udGludWU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFkQml0
cyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlIEZvckVhY2hSZXN1bHQ6OlJlbW92ZUFuZENvbnRpbnVlOgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHMtPmNsZWFyKGF0b21OdW1iZXIpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJdGVyYXRp
b25TdGF0dXM6OkNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaWYg
KCFoYWRCaXRzKSB7CisgICAgICAgICAgICAgICAgbV9iaXRzW2Jsb2NrSW5kZXhdID0gbnVsbHB0
cjsKKyAgICAgICAgICAgICAgICBtX2Jsb2Nrc1dpdGhCaXRzW2Jsb2NrSW5kZXhdID0gZmFsc2U7
CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmNwcAkocmV2aXNp
b24gMjI1NzcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02Nyw1ICs2NywyOSBAQCB2b2lkKiBJc29TdWJzcGFjZTo6YWxs
b2NhdGVOb25WaXJ0dWFsKHNpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAordm9pZCBJc29TdWJz
cGFjZTo6ZGlkUmVzaXplQml0cyhzaXplX3QgYmxvY2tJbmRleCkKK3sKKyAgICBtX2NlbGxTZXRz
LmZvckVhY2goCisgICAgICAgIFsmXSAoSXNvQ2VsbFNldCogc2V0KSB7CisgICAgICAgICAgICBz
ZXQtPmRpZFJlc2l6ZUJpdHMoYmxvY2tJbmRleCk7CisgICAgICAgIH0pOworfQorCit2b2lkIElz
b1N1YnNwYWNlOjpkaWRSZW1vdmVCbG9jayhzaXplX3QgYmxvY2tJbmRleCkKK3sKKyAgICBtX2Nl
bGxTZXRzLmZvckVhY2goCisgICAgICAgIFsmXSAoSXNvQ2VsbFNldCogc2V0KSB7CisgICAgICAg
ICAgICBzZXQtPmRpZFJlbW92ZUJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICB9KTsKK30KKwor
dm9pZCBJc29TdWJzcGFjZTo6ZGlkQmVnaW5Td2VlcGluZ1RvRnJlZUxpc3QoTWFya2VkQmxvY2s6
OkhhbmRsZSogYmxvY2spCit7CisgICAgbV9jZWxsU2V0cy5mb3JFYWNoKAorICAgICAgICBbJl0g
KElzb0NlbGxTZXQqIHNldCkgeworICAgICAgICAgICAgc2V0LT5zd2VlcFRvRnJlZUxpc3QoYmxv
Y2spOworICAgICAgICB9KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuaAkocmV2aXNpb24gMjI1NzcwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMjcsMTAgKzI3LDEyIEBACiAKICNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3IuaCIKICNpbmNs
dWRlICJTdWJzcGFjZS5oIgorI2luY2x1ZGUgPHd0Zi9TaW5nbHlMaW5rZWRMaXN0V2l0aFRhaWwu
aD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I7
CitjbGFzcyBJc29DZWxsU2V0OwogCiBjbGFzcyBJc29TdWJzcGFjZSA6IHB1YmxpYyBTdWJzcGFj
ZSB7CiBwdWJsaWM6CkBAIC00Niw5ICs0OCwxNiBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCogYWxsb2NhdGVOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29u
dGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUp
OwogCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBJc29DZWxsU2V0OworICAgIAorICAgIHZv
aWQgZGlkUmVzaXplQml0cyhzaXplX3QgbmV3U2l6ZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRS
ZW1vdmVCbG9jayhzaXplX3QgYmxvY2tJbmRleCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRCZWdp
blN3ZWVwaW5nVG9GcmVlTGlzdChNYXJrZWRCbG9jazo6SGFuZGxlKikgb3ZlcnJpZGU7CisgICAg
CiAgICAgc2l6ZV90IG1fc2l6ZTsKICAgICBNYXJrZWRBbGxvY2F0b3IgbV9hbGxvY2F0b3I7CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I+IG1faXNvQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvcjsKKyAgICBTZW50aW5lbExpbmtlZExpc3Q8SXNvQ2VsbFNldCwgQmFz
aWNSYXdTZW50aW5lbE5vZGU8SXNvQ2VsbFNldD4+IG1fY2VsbFNldHM7CiB9OwogCiBpbmxpbmUg
TWFya2VkQWxsb2NhdG9yKiBJc29TdWJzcGFjZTo6YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXpl
X3Qgc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjI1NzcwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYxLDYgKzI2MSw3IEBAIHZvaWQgTWFya2VkQWxsb2NhdG9yOjphZGRCbG9jayhNYXJrZWRC
bG8KICAgICAgICAgICAgIEFTU0VSVChtX2Jsb2Nrcy5jYXBhY2l0eSgpID4gb2xkQ2FwYWNpdHkp
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2JpdHZlY3Rv
ckxvY2spOworICAgICAgICAgICAgc3Vic3BhY2UoKS0+ZGlkUmVzaXplQml0cyhtX2Jsb2Nrcy5j
YXBhY2l0eSgpKTsKICAgICAgICAgICAgIGZvckVhY2hCaXRWZWN0b3IoCiAgICAgICAgICAgICAg
ICAgbG9ja2VyLAogICAgICAgICAgICAgICAgIFsmXSAoRmFzdEJpdFZlY3RvciYgdmVjdG9yKSB7
CkBAIC0yOTAsNyArMjkxLDkgQEAgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OnJlbW92ZUJsb2NrKE1h
cmtlZAogewogICAgIEFTU0VSVChibG9jay0+YWxsb2NhdG9yKCkgPT0gdGhpcyk7CiAgICAgQVNT
RVJUKG1fYmxvY2tzW2Jsb2NrLT5pbmRleCgpXSA9PSBibG9jayk7Ci0KKyAgICAKKyAgICBzdWJz
cGFjZSgpLT5kaWRSZW1vdmVCbG9jayhibG9jay0+aW5kZXgoKSk7CisgICAgCiAgICAgbV9ibG9j
a3NbYmxvY2stPmluZGV4KCldID0gbnVsbHB0cjsKICAgICBtX2ZyZWVCbG9ja0luZGljZXMuYXBw
ZW5kKGJsb2NrLT5pbmRleCgpKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCShyZXZpc2lvbiAyMjU3NzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzgs
NiArMzgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgR0NEZWZlcnJhbENvbnRleHQ7CiBj
bGFzcyBIZWFwOworY2xhc3MgSXNvQ2VsbFNldDsKIGNsYXNzIE1hcmtlZFNwYWNlOwogY2xhc3Mg
TExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCkBAIC0xNjIsNiArMTYzLDcgQEAgcHVibGljOgogICAg
IHZvaWQgZHVtcEJpdHMoUHJpbnRTdHJlYW0mID0gV1RGOjpkYXRhRmlsZSgpKTsKICAgICAKIHBy
aXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIElzb0NlbGxTZXQ7CiAgICAgZnJpZW5kIGNsYXNzIE1h
cmtlZEJsb2NrOwogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlU2xv
d0Nhc2UoR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1v
ZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9ySW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFs
bG9jYXRvcklubGluZXMuaAkocmV2aXNpb24gMjI1NzcwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2
ICsyNyw3IEBACiAKICNpbmNsdWRlICJGcmVlTGlzdElubGluZXMuaCIKICNpbmNsdWRlICJNYXJr
ZWRBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJWTS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkocmV2aXNpb24g
MjI1NzcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMDEsMTEgKzMwMSw2IEBAIHNpemVfdCBNYXJrZWRCbG9jazo6bWFy
a0NvdW50KCkKICAgICByZXR1cm4gYXJlTWFya3NTdGFsZSgpID8gMCA6IG1fbWFya3MuY291bnQo
KTsKIH0KIAotYm9vbCBNYXJrZWRCbG9jazo6SGFuZGxlOjppc0VtcHR5KCkKLXsKLSAgICByZXR1
cm4gbV9hbGxvY2F0b3ItPmlzRW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzKTsKLX0KLQog
dm9pZCBNYXJrZWRCbG9jazo6Y2xlYXJIYXNBbnlNYXJrZWQoKQogewogICAgIG1fYmlhc2VkTWFy
a0NvdW50ID0gbV9tYXJrQ291bnRCaWFzOwpAQCAtNDAzLDExICszOTgsMTMgQEAgdm9pZCBNYXJr
ZWRCbG9jazo6SGFuZGxlOjpzd2VlcChGcmVlTGlzdAogICAgICAgICByZXR1cm47CiAKICAgICBS
RUxFQVNFX0FTU0VSVCghbV9pc0ZyZWVMaXN0ZWQpOwotICAgIFJFTEVBU0VfQVNTRVJUKCFtX2Fs
bG9jYXRvci0+aXNBbGxvY2F0ZWQoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzKSk7CisgICAgUkVM
RUFTRV9BU1NFUlQoIWlzQWxsb2NhdGVkKCkpOwogICAgIAogICAgIGlmIChzcGFjZSgpLT5pc01h
cmtpbmcoKSkKICAgICAgICAgYmxvY2soKS5tX2xvY2subG9jaygpOwogICAgIAorICAgIHN1YnNw
YWNlKCktPmRpZEJlZ2luU3dlZXBpbmdUb0ZyZWVMaXN0KHRoaXMpOworICAgIAogICAgIGlmIChu
ZWVkc0Rlc3RydWN0aW9uKSB7CiAgICAgICAgIHN1YnNwYWNlKCktPmZpbmlzaFN3ZWVwKCp0aGlz
LCBmcmVlTGlzdCk7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gMjI1NzcwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTYyLDYgKzE2Miw4
IEBAIHB1YmxpYzoKICAgICAgICAgc2l6ZV90IG1hcmtDb3VudCgpOwogICAgICAgICBzaXplX3Qg
c2l6ZSgpOwogICAgICAgICAKKyAgICAgICAgYm9vbCBpc0FsbG9jYXRlZCgpOworICAgICAgICAK
ICAgICAgICAgYm9vbCBpc0xpdmUoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIEhlYXBWZXJz
aW9uIG5ld2x5QWxsb2NhdGVkVmVyc2lvbiwgYm9vbCBpc01hcmtpbmcsIGNvbnN0IEhlYXBDZWxs
Kik7CiAgICAgICAgIGlubGluZSBib29sIGlzTGl2ZUNlbGwoSGVhcFZlcnNpb24gbWFya2luZ1Zl
cnNpb24sIEhlYXBWZXJzaW9uIG5ld2x5QWxsb2NhdGVkVmVyc2lvbiwgYm9vbCBpc01hcmtpbmcs
IGNvbnN0IHZvaWQqKTsKIApAQCAtMTczLDYgKzE3NSw3IEBAIHB1YmxpYzoKICAgICAgICAgYm9v
bCBpc05ld2x5QWxsb2NhdGVkKGNvbnN0IHZvaWQqKTsKICAgICAgICAgdm9pZCBzZXROZXdseUFs
bG9jYXRlZChjb25zdCB2b2lkKik7CiAgICAgICAgIHZvaWQgY2xlYXJOZXdseUFsbG9jYXRlZChj
b25zdCB2b2lkKik7CisgICAgICAgIGNvbnN0IEJpdG1hcDxhdG9tc1BlckJsb2NrPiYgbmV3bHlB
bGxvY2F0ZWQoKSBjb25zdDsKICAgICAgICAgCiAgICAgICAgIEhlYXBWZXJzaW9uIG5ld2x5QWxs
b2NhdGVkVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fbmV3bHlBbGxvY2F0ZWRWZXJzaW9uOyB9
CiAgICAgICAgIApAQCAtMjI3LDcgKzIzMCw3IEBAIHB1YmxpYzoKICAgICAgICAgc2l6ZV90IG1f
YXRvbXNQZXJDZWxsIHsgc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSB9OwogICAg
ICAgICBzaXplX3QgbV9lbmRBdG9tIHsgc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgo
KSB9OyAvLyBUaGlzIGlzIGEgZnV6enkgZW5kLiBBbHdheXMgdGVzdCBmb3IgPCBtX2VuZEF0b20u
CiAgICAgICAgICAgICAKLSAgICAgICAgV1RGOjpCaXRtYXA8YXRvbXNQZXJCbG9jaz4gbV9uZXds
eUFsbG9jYXRlZDsKKyAgICAgICAgQml0bWFwPGF0b21zUGVyQmxvY2s+IG1fbmV3bHlBbGxvY2F0
ZWQ7CiAgICAgICAgICAgICAKICAgICAgICAgQWxsb2NhdG9yQXR0cmlidXRlcyBtX2F0dHJpYnV0
ZXM7CiAgICAgICAgIGJvb2wgbV9pc0ZyZWVMaXN0ZWQgeyBmYWxzZSB9OwpAQCAtMjk0LDYgKzI5
Nyw4IEBAIHB1YmxpYzoKICAgICBib29sIGlzTWFya2VkUmF3KGNvbnN0IHZvaWQqIHApOwogICAg
IEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXJraW5nVmVy
c2lvbjsgfQogICAgIAorICAgIGNvbnN0IEJpdG1hcDxhdG9tc1BlckJsb2NrPiYgbWFya3MoKSBj
b25zdDsKKyAgICAKICAgICBDb3VudGluZ0xvY2smIGxvY2soKSB7IHJldHVybiBtX2xvY2s7IH0K
IAogcHJpdmF0ZToKQEAgLTM0Niw3ICszNTEsNyBAQCBwcml2YXRlOgogCiAgICAgSGVhcFZlcnNp
b24gbV9tYXJraW5nVmVyc2lvbjsKIAotICAgIFdURjo6Qml0bWFwPGF0b21zUGVyQmxvY2s+IG1f
bWFya3M7CisgICAgQml0bWFwPGF0b21zUGVyQmxvY2s+IG1fbWFya3M7CiB9OwogCiBpbmxpbmUg
TWFya2VkQmxvY2s6OkhhbmRsZSYgTWFya2VkQmxvY2s6OmhhbmRsZSgpCkBAIC01MzIsNiArNTM3
LDExIEBAIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjp0ZXN0QW5kU2V0TWFya2UKICAgICByZXR1
cm4gbV9tYXJrcy5jb25jdXJyZW50VGVzdEFuZFNldChhdG9tTnVtYmVyKHApLCBkZXBlbmRlbmN5
KTsKIH0KIAoraW5saW5lIGNvbnN0IEJpdG1hcDxNYXJrZWRCbG9jazo6YXRvbXNQZXJCbG9jaz4m
IE1hcmtlZEJsb2NrOjptYXJrcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbWFya3M7Cit9CisK
IGlubGluZSBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzTmV3bHlBbGxvY2F0ZWQoY29uc3Qg
dm9pZCogcCkKIHsKICAgICByZXR1cm4gbV9uZXdseUFsbG9jYXRlZC5nZXQobV9ibG9jay0+YXRv
bU51bWJlcihwKSk7CkBAIC01NDcsNiArNTU3LDExIEBAIGlubGluZSB2b2lkIE1hcmtlZEJsb2Nr
OjpIYW5kbGU6OmNsZWFyTmUKICAgICBtX25ld2x5QWxsb2NhdGVkLmNsZWFyKG1fYmxvY2stPmF0
b21OdW1iZXIocCkpOwogfQogCitpbmxpbmUgY29uc3QgQml0bWFwPE1hcmtlZEJsb2NrOjphdG9t
c1BlckJsb2NrPiYgTWFya2VkQmxvY2s6OkhhbmRsZTo6bmV3bHlBbGxvY2F0ZWQoKSBjb25zdAor
eworICAgIHJldHVybiBtX25ld2x5QWxsb2NhdGVkOworfQorCiBpbmxpbmUgYm9vbCBNYXJrZWRC
bG9jazo6aXNBdG9tKGNvbnN0IHZvaWQqIHApCiB7CiAgICAgQVNTRVJUKE1hcmtlZEJsb2NrOjpp
c0F0b21BbGlnbmVkKHApKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZEJsb2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZEJsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAyMjU3NzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtOTEs
NiArOTEsMTEgQEAgaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6Om1hcmtzQ29udmV5TGl2ZQogICAg
ICAgICB8fCBNYXJrZWRTcGFjZTo6bmV4dFZlcnNpb24obXlNYXJraW5nVmVyc2lvbikgPT0gbWFy
a2luZ1ZlcnNpb247CiB9CiAKK2lubGluZSBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzQWxs
b2NhdGVkKCkKK3sKKyAgICByZXR1cm4gbV9hbGxvY2F0b3ItPmlzQWxsb2NhdGVkKE5vTG9ja2lu
Z05lY2Vzc2FyeSwgdGhpcyk7Cit9CisKIEFMV0FZU19JTkxJTkUgYm9vbCBNYXJrZWRCbG9jazo6
SGFuZGxlOjppc0xpdmUoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIEhlYXBWZXJzaW9uIG5l
d2x5QWxsb2NhdGVkVmVyc2lvbiwgYm9vbCBpc01hcmtpbmcsIGNvbnN0IEhlYXBDZWxsKiBjZWxs
KQogewogICAgIGlmIChhbGxvY2F0b3IoKS0+aXNBbGxvY2F0ZWQoTm9Mb2NraW5nTmVjZXNzYXJ5
LCB0aGlzKSkKQEAgLTQzNCw2ICs0MzksMTEgQEAgaW5saW5lIE1hcmtlZEJsb2NrOjpIYW5kbGU6
OlN3ZWVwRGVzdHJ1YwogICAgIHJldHVybiBCbG9ja0hhc05vRGVzdHJ1Y3RvcnM7CiB9CiAKK2lu
bGluZSBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzRW1wdHkoKQoreworICAgIHJldHVybiBt
X2FsbG9jYXRvci0+aXNFbXB0eShOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMpOworfQorCiBpbmxp
bmUgTWFya2VkQmxvY2s6OkhhbmRsZTo6RW1wdHlNb2RlIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmVt
cHR5TW9kZSgpCiB7CiAgICAgLy8gSXQncyBub3Qgb2J2aW91cywgYnV0IHRoaXMgaXMgdGhlIG9u
bHkgd2F5IHRvIGtub3cgaWYgdGhlIGJsb2NrIGlzIGVtcHR5LiBJdCdzIHRoZSBvbmx5CkBAIC00
NDEsNyArNDUxLDcgQEAgaW5saW5lIE1hcmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBNYQog
ICAgIC8vIC0gSXQncyB0cnVlIHdoZW4gdGhlIGJsb2NrIGlzIGZyZXNobHkgYWxsb2NhdGVkLgog
ICAgIC8vIC0gSXQncyB0cnVlIGlmIHRoZSBibG9jayBoYWQgYmVlbiBzd2VwdCBpbiB0aGUgcGFz
dCwgYWxsIGRlc3RydWN0b3JzIHdlcmUgY2FsbGVkLCBhbmQgdGhhdAogICAgIC8vICAgc3dlZXAg
cHJvdmVkIHRoYXQgdGhlIGJsb2NrIGlzIGVtcHR5LgotICAgIHJldHVybiBtX2FsbG9jYXRvci0+
aXNFbXB0eShOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMpID8gSXNFbXB0eSA6IE5vdEVtcHR5Owor
ICAgIHJldHVybiBpc0VtcHR5KCkgPyBJc0VtcHR5IDogTm90RW1wdHk7CiB9CiAKIGlubGluZSBN
YXJrZWRCbG9jazo6SGFuZGxlOjpTY3JpYmJsZU1vZGUgTWFya2VkQmxvY2s6OkhhbmRsZTo6c2Ny
aWJibGVNb2RlKCkKQEAgLTUxMiwxMSArNTIyLDEyIEBAIGlubGluZSBJdGVyYXRpb25TdGF0dXMg
TWFya2VkQmxvY2s6OkhhbmQKICAgICBpZiAoYXJlTWFya3NTdGFsZSkKICAgICAgICAgcmV0dXJu
IEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CiAgICAgZm9yIChzaXplX3QgaSA9IGZpcnN0QXRv
bSgpOyBpIDwgbV9lbmRBdG9tOyBpICs9IG1fYXRvbXNQZXJDZWxsKSB7Ci0gICAgICAgIEhlYXBD
ZWxsKiBjZWxsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8SGVhcENlbGwqPigmbV9ibG9jay0+YXRv
bXMoKVtpXSk7Ci0gICAgICAgIGlmICghYmxvY2suaXNNYXJrZWRSYXcoY2VsbCkpCisgICAgICAg
IGlmICghYmxvY2subV9tYXJrcy5nZXQoaSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAg
ICAgICBpZiAoZnVuY3RvcihjZWxsLCBraW5kKSA9PSBJdGVyYXRpb25TdGF0dXM6OkRvbmUpCisg
ICAgICAgIEhlYXBDZWxsKiBjZWxsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8SGVhcENlbGwqPigm
bV9ibG9jay0+YXRvbXMoKVtpXSk7CisKKyAgICAgICAgaWYgKGZ1bmN0b3IoaSwgY2VsbCwga2lu
ZCkgPT0gSXRlcmF0aW9uU3RhdHVzOjpEb25lKQogICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlv
blN0YXR1czo6RG9uZTsKICAgICB9CiAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGlu
dWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuY3BwCShyZXZpc2lv
biAyMjU3NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEyNiw1ICsxMjYsMTcgQEAgUmVmUHRyPFNoYXJlZFRhc2s8TWFya2Vk
QmxvY2s6OkhhbmRsZSooKQogICAgICAgICB9KTsKIH0KIAordm9pZCBTdWJzcGFjZTo6ZGlkUmVz
aXplQml0cyhzaXplX3QpCit7Cit9CisKK3ZvaWQgU3Vic3BhY2U6OmRpZFJlbW92ZUJsb2NrKHNp
emVfdCkKK3sKK30KKwordm9pZCBTdWJzcGFjZTo6ZGlkQmVnaW5Td2VlcGluZ1RvRnJlZUxpc3Qo
TWFya2VkQmxvY2s6OkhhbmRsZSopCit7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHJldmlzaW9uIDIyNTc3MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTkzLDYgKzkzLDEwIEBAIHB1YmxpYzoKICAgICAKICAgICBTdWJzcGFjZSogbmV4dFN1YnNwYWNl
SW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9uZXh0U3Vic3BhY2VJ
bkFsaWduZWRNZW1vcnlBbGxvY2F0b3I7IH0KICAgICB2b2lkIHNldE5leHRTdWJzcGFjZUluQWxp
Z25lZE1lbW9yeUFsbG9jYXRvcihTdWJzcGFjZSogc3Vic3BhY2UpIHsgbV9uZXh0U3Vic3BhY2VJ
bkFsaWduZWRNZW1vcnlBbGxvY2F0b3IgPSBzdWJzcGFjZTsgfQorICAgIAorICAgIHZpcnR1YWwg
dm9pZCBkaWRSZXNpemVCaXRzKHNpemVfdCBuZXdTaXplKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
UmVtb3ZlQmxvY2soc2l6ZV90IGJsb2NrSW5kZXgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRCZWdp
blN3ZWVwaW5nVG9GcmVlTGlzdChNYXJrZWRCbG9jazo6SGFuZGxlKik7CiAKIHByb3RlY3RlZDoK
ICAgICB2b2lkIGluaXRpYWxpemUoSGVhcENlbGxUeXBlKiwgQWxpZ25lZE1lbW9yeUFsbG9jYXRv
ciopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVz
LmgJKHJldmlzaW9uIDIyNTc3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNw
YWNlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3IEBAIHZvaWQgU3Vic3Bh
Y2U6OmZvckVhY2hNYXJrZWRDZWxsKGNvbnN0IEYKICAgICBmb3JFYWNoTm90RW1wdHlNYXJrZWRC
bG9jaygKICAgICAgICAgWyZdIChNYXJrZWRCbG9jazo6SGFuZGxlKiBoYW5kbGUpIHsKICAgICAg
ICAgICAgIGhhbmRsZS0+Zm9yRWFjaE1hcmtlZENlbGwoCi0gICAgICAgICAgICAgICAgWyZdIChI
ZWFwQ2VsbCogY2VsbCwgSGVhcENlbGw6OktpbmQga2luZCkgLT4gSXRlcmF0aW9uU3RhdHVzIHsg
CisgICAgICAgICAgICAgICAgWyZdIChzaXplX3QsIEhlYXBDZWxsKiBjZWxsLCBIZWFwQ2VsbDo6
S2luZCBraW5kKSAtPiBJdGVyYXRpb25TdGF0dXMgewogICAgICAgICAgICAgICAgICAgICBmdW5j
KGNlbGwsIGtpbmQpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVz
OjpDb250aW51ZTsKICAgICAgICAgICAgICAgICB9KTsKQEAgLTk5LDcgKzk5LDcgQEAgUmVmUHRy
PFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gUwogICAgICAgICB7CiAgICAgICAgICAg
ICB3aGlsZSAoTWFya2VkQmxvY2s6OkhhbmRsZSogaGFuZGxlID0gbV9ibG9ja1NvdXJjZS0+cnVu
KCkpIHsKICAgICAgICAgICAgICAgICBoYW5kbGUtPmZvckVhY2hNYXJrZWRDZWxsKAotICAgICAg
ICAgICAgICAgICAgICBbJl0gKEhlYXBDZWxsKiBjZWxsLCBIZWFwQ2VsbDo6S2luZCBraW5kKSAt
PiBJdGVyYXRpb25TdGF0dXMgeworICAgICAgICAgICAgICAgICAgICBbJl0gKHNpemVfdCwgSGVh
cENlbGwqIGNlbGwsIEhlYXBDZWxsOjpLaW5kIGtpbmQpIC0+IEl0ZXJhdGlvblN0YXR1cyB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2Z1bmModmlzaXRvciwgY2VsbCwga2luZCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKICAg
ICAgICAgICAgICAgICAgICAgfSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbmZlcnJlZFN0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAyMjU3NzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFN0cnVjdHVyZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDY0ICsyNywxNyBAQAogI2luY2x1ZGUgIkluZmVycmVkU3RydWN0dXJl
LmgiCiAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lu
bGluZXMuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNvbnN0IENsYXNzSW5mbyBJbmZlcnJlZFN0
cnVjdHVyZTo6c19pbmZvID0geyAiSW5mZXJyZWRTdHJ1Y3R1cmUiLCBudWxscHRyLCBudWxscHRy
LCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEluZmVycmVkU3RydWN0dXJlKSB9OwotCi1J
bmZlcnJlZFN0cnVjdHVyZSogSW5mZXJyZWRTdHJ1Y3R1cmU6OmNyZWF0ZShWTSYgdm0sIEdDRGVm
ZXJyYWxDb250ZXh0JiBkZWZlcnJhbENvbnRleHQsIEluZmVycmVkVHlwZSogcGFyZW50LCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKLXsKLSAgICBJbmZlcnJlZFN0cnVjdHVyZSogcmVzdWx0ID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SW5mZXJyZWRTdHJ1Y3R1cmU+KHZtLmhlYXAsICZkZWZl
cnJhbENvbnRleHQpKSBJbmZlcnJlZFN0cnVjdHVyZSh2bSwgcGFyZW50LCBzdHJ1Y3R1cmUpOwot
ICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0sIHN0cnVjdHVyZSk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotdm9pZCBJbmZlcnJlZFN0cnVjdHVyZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwp
Ci17Ci0gICAgSW5mZXJyZWRTdHJ1Y3R1cmUqIGluZmVycmVkU3RydWN0dXJlID0gc3RhdGljX2Nh
c3Q8SW5mZXJyZWRTdHJ1Y3R1cmUqPihjZWxsKTsKLSAgICBpbmZlcnJlZFN0cnVjdHVyZS0+SW5m
ZXJyZWRTdHJ1Y3R1cmU6On5JbmZlcnJlZFN0cnVjdHVyZSgpOwotfQotCi1TdHJ1Y3R1cmUqIElu
ZmVycmVkU3RydWN0dXJlOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKLXsKLSAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotfQotCi12b2lkIEluZmVycmVkU3RydWN0dXJlOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAg
SW5mZXJyZWRTdHJ1Y3R1cmUqIGluZmVycmVkU3RydWN0dXJlID0ganNDYXN0PEluZmVycmVkU3Ry
dWN0dXJlKj4oY2VsbCk7Ci0gICAgCi0gICAgdmlzaXRvci5hcHBlbmQoaW5mZXJyZWRTdHJ1Y3R1
cmUtPm1fcGFyZW50KTsKLX0KLQotdm9pZCBJbmZlcnJlZFN0cnVjdHVyZTo6ZmluYWxpemVVbmNv
bmRpdGlvbmFsbHkoVk0mKQotewotICAgIEFTU0VSVChIZWFwOjppc01hcmtlZChtX3BhcmVudC5n
ZXQoKSkpOwotICAgIAotICAgIC8vIE1vbm90b25pY2l0eSBlbnN1cmVzIHRoYXQgd2Ugc2hvdWxk
bid0IHNlZSBhIG5ldyBzdHJ1Y3R1cmUgdGhhdCBpcyBkaWZmZXJlbnQgZnJvbSB1cywgYnV0IHdl
Ci0gICAgLy8gY291bGQgaGF2ZSBiZWVuIG51bGxlZC4gV2Ugb25seSByZWx5IG9uIGl0IGJlaW5n
IHRoZSBudWxsIGNhc2Ugb25seSBpbiBkZWJ1Zy4KLSAgICBpZiAodGhpcyA9PSBtX3BhcmVudC0+
bV9zdHJ1Y3R1cmUuZ2V0KCkpIHsKLSAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX3N0cnVj
dHVyZS5nZXQoKSkpCi0gICAgICAgICAgICBtX3BhcmVudC0+cmVtb3ZlU3RydWN0dXJlKCk7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIEFTU0VSVCghbV9wYXJlbnQtPm1fc3RydWN0dXJlKTsKLSAgICAK
LSAgICAvLyBXZSdsbCBnZXQgZGVsZXRlZCBvbiB0aGUgbmV4dCBHQy4gVGhhdCdzIGEgbGl0dGxl
IHdlaXJkLCBidXQgbm90IGhhcm1mdWwsIHNpbmNlIGl0IG9ubHkgaGFwcGVucwotICAgIC8vIHdo
ZW4gdGhlIEluZmVycmVkVHlwZSB0aGF0IHdlIHdlcmUgcGFpcmVkIHRvIHdvdWxkIGhhdmUgc3Vy
dml2ZWQuIEl0IGp1c3QgbWVhbnMgYSB0aW55IG1pc3NlZAotICAgIC8vIG9wcG9ydHVuaXR5IGZv
ciBoZWFwIHNpemUgcmVkdWN0aW9uLgotfQorV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKElu
ZmVycmVkU3RydWN0dXJlKTsKIAogSW5mZXJyZWRTdHJ1Y3R1cmU6OkluZmVycmVkU3RydWN0dXJl
KFZNJiB2bSwgSW5mZXJyZWRUeXBlKiBwYXJlbnQsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAg
IDogQmFzZSh2bSwgdm0uaW5mZXJyZWRTdHJ1Y3R1cmVTdHJ1Y3R1cmUuZ2V0KCkpCi0gICAgLCBt
X3BhcmVudCh2bSwgdGhpcywgcGFyZW50KQotICAgICwgbV9zdHJ1Y3R1cmUodm0sIHRoaXMsIHN0
cnVjdHVyZSkKLXsKLX0KLQotdm9pZCBJbmZlcnJlZFN0cnVjdHVyZTo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IHBhcmVudChwYXJlbnQpCisgICAg
LCBzdHJ1Y3R1cmUodm0sIHBhcmVudCwgc3RydWN0dXJlKQogewotICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKHZtKTsKLSAgICBzdHJ1Y3R1cmUtPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KCZtX3dh
dGNocG9pbnQpOworICAgIHN0cnVjdHVyZS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoJndhdGNo
cG9pbnQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0luZmVycmVkU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1cmUuaAkocmV2aXNpb24gMjI1Nzcw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1cmUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNTEgKzI2LDIzIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1
ZGUgIkluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludC5oIgotI2luY2x1ZGUgIkpTQ2VsbC5oIgot
I2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisjaW5jbHVkZSA8d3Rm
L0lzb01hbGxvYy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSW5mZXJyZWRUeXBlOwor
Y2xhc3MgU3RydWN0dXJlOwogCi1jbGFzcyBJbmZlcnJlZFN0cnVjdHVyZSBmaW5hbCA6IHB1Ymxp
YyBKU0NlbGwgeworY2xhc3MgSW5mZXJyZWRTdHJ1Y3R1cmUgZmluYWwgeworICAgIFdURl9NQUtF
X0lTT19BTExPQ0FURUQoSW5mZXJyZWRTdHJ1Y3R1cmUpOwogcHVibGljOgotICAgIHR5cGVkZWYg
SlNDZWxsIEJhc2U7Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGU+Ci0gICAg
c3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCi0gICAgewotICAgICAgICBy
ZXR1cm4gJnZtLmluZmVycmVkU3RydWN0dXJlU3BhY2U7Ci0gICAgfQotICAgIAotICAgIHN0YXRp
YyBJbmZlcnJlZFN0cnVjdHVyZSogY3JlYXRlKFZNJiwgR0NEZWZlcnJhbENvbnRleHQmLCBJbmZl
cnJlZFR5cGUqIHBhcmVudCwgU3RydWN0dXJlKik7Ci0gICAgCi0gICAgc3RhdGljIGNvbnN0IGJv
b2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7Ci0gICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0Nl
bGwqKTsKLSAgICAKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBT
dHJ1Y3R1cmVJc0ltbW9ydGFsIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7Ci0KLSAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUg
cHJvdG90eXBlKTsKLSAgICAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgCi0gICAgSW5mZXJyZWRU
eXBlKiBwYXJlbnQoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudC5nZXQoKTsgfQotICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7IH0KLSAg
ICAKLSAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJik7Ci0KLXByaXZhdGU6CiAg
ICAgSW5mZXJyZWRTdHJ1Y3R1cmUoVk0mLCBJbmZlcnJlZFR5cGUqIHBhcmVudCwgU3RydWN0dXJl
Kik7CisKKyAgICBJbmZlcnJlZFR5cGUqIHBhcmVudDsKKyAgICBXcml0ZUJhcnJpZXI8U3RydWN0
dXJlPiBzdHJ1Y3R1cmU7CiAgICAgCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFN0cnVj
dHVyZSopOwotICAgIAotICAgIFdyaXRlQmFycmllcjxJbmZlcnJlZFR5cGU+IG1fcGFyZW50Owot
ICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOwotICAgIAotICAgIGZyaWVu
ZCBjbGFzcyBJbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQ7Ci0gICAgSW5mZXJyZWRTdHJ1Y3R1
cmVXYXRjaHBvaW50IG1fd2F0Y2hwb2ludDsKKyAgICBJbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9p
bnQgd2F0Y2hwb2ludDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFN0cnVjdHVy
ZVdhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAyMjU3NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNCwxMiArMzQsMTQgQEAgdm9pZCBJbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQ6OmZp
cmVJbgogewogICAgIEluZmVycmVkU3RydWN0dXJlKiBpbmZlcnJlZFN0cnVjdHVyZSA9CiAgICAg
ICAgIGJpdHdpc2VfY2FzdDxJbmZlcnJlZFN0cnVjdHVyZSo+KAotICAgICAgICAgICAgYml0d2lz
ZV9jYXN0PGNoYXIqPih0aGlzKSAtIE9CSkVDVF9PRkZTRVRPRihJbmZlcnJlZFN0cnVjdHVyZSwg
bV93YXRjaHBvaW50KSk7CisgICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpIC0g
T0JKRUNUX09GRlNFVE9GKEluZmVycmVkU3RydWN0dXJlLCB3YXRjaHBvaW50KSk7CiAKLSAgICBp
ZiAoIWluZmVycmVkU3RydWN0dXJlLT5pc0xpdmUoKSkKKyAgICBJbmZlcnJlZFR5cGUqIGluZmVy
cmVkVHlwZSA9IGluZmVycmVkU3RydWN0dXJlLT5wYXJlbnQ7CisgICAgCisgICAgaWYgKCFpbmZl
cnJlZFR5cGUtPmlzTGl2ZSgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgaW5mZXJyZWRT
dHJ1Y3R1cmUtPm1fcGFyZW50LT5yZW1vdmVTdHJ1Y3R1cmUoKTsKKyAgICBpbmZlcnJlZFR5cGUt
PnJlbW92ZVN0cnVjdHVyZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlLmNwcAkocmV2aXNpb24g
MjI1NzcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkluZmVycmVkVHlwZS5oIgogCi0jaW5jbHVkZSAiR0NEZWZlcnJhbENvbnRleHRJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiSXNvQ2VsbFNldElubGluZXMuaCIKICNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtODYsNyArODYsOCBAQCBTdHJ1Y3R1cmUq
IEluZmVycmVkVHlwZTo6Y3JlYXRlU3RydWN0dXJlCiB2b2lkIEluZmVycmVkVHlwZTo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEluZmVy
cmVkVHlwZSogaW5mZXJyZWRUeXBlID0ganNDYXN0PEluZmVycmVkVHlwZSo+KGNlbGwpOwotICAg
IHZpc2l0b3IuYXBwZW5kKGluZmVycmVkVHlwZS0+bV9zdHJ1Y3R1cmUpOworICAgIGlmIChpbmZl
cnJlZFR5cGUtPm1fc3RydWN0dXJlKQorICAgICAgICB2aXNpdG9yLnZtKCkuaW5mZXJyZWRUeXBl
c1dpdGhGaW5hbGl6ZXJzLmFkZChpbmZlcnJlZFR5cGUpOwogfQogCiBJbmZlcnJlZFR5cGU6Oktp
bmQgSW5mZXJyZWRUeXBlOjpraW5kRm9yRmxhZ3MoUHV0QnlJZEZsYWdzIGZsYWdzKQpAQCAtMzk5
LDcgKzQwMCw2IEBAIGJvb2wgSW5mZXJyZWRUeXBlOjp3aWxsU3RvcmVWYWx1ZVNsb3coVk0KICAg
ICBEZXNjcmlwdG9yIG15VHlwZTsKICAgICBib29sIHJlc3VsdDsKICAgICB7Ci0gICAgICAgIEdD
RGVmZXJyYWxDb250ZXh0IGRlZmVycmFsQ29udGV4dCh2bS5oZWFwKTsKICAgICAgICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAgICAgICBvbGRUeXBlID0gZGVzY3JpcHRv
cihsb2NrZXIpOwogICAgICAgICBteVR5cGUgPSBEZXNjcmlwdG9yOjpmb3JWYWx1ZSh2YWx1ZSk7
CkBAIC00MDgsNyArNDA4LDcgQEAgYm9vbCBJbmZlcnJlZFR5cGU6OndpbGxTdG9yZVZhbHVlU2xv
dyhWTQogICAgICAgICAKICAgICAgICAgQVNTRVJUKG9sZFR5cGUgIT0gbXlUeXBlKTsgLy8gVGhl
IHR5cGUgbXVzdCBoYXZlIGNoYW5nZWQgaWYgd2UncmUgb24gdGhlIHNsb3cgcGF0aC4KIAotICAg
ICAgICBib29sIHNldFJlc3VsdCA9IHNldChkZWZlcnJhbENvbnRleHQsIGxvY2tlciwgdm0sIG15
VHlwZSk7CisgICAgICAgIGJvb2wgc2V0UmVzdWx0ID0gc2V0KGxvY2tlciwgdm0sIG15VHlwZSk7
CiAgICAgICAgIHJlc3VsdCA9IGtpbmQobG9ja2VyKSAhPSBUb3A7CiAgICAgICAgIGlmICghc2V0
UmVzdWx0KQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTQyMywxMCArNDIzLDkgQEAg
dm9pZCBJbmZlcnJlZFR5cGU6Om1ha2VUb3BTbG93KFZNJiB2bSwgUAogewogICAgIERlc2NyaXB0
b3Igb2xkVHlwZTsKICAgICB7Ci0gICAgICAgIEdDRGVmZXJyYWxDb250ZXh0IGRlZmVycmFsQ29u
dGV4dCh2bS5oZWFwKTsKICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2sp
OwogICAgICAgICBvbGRUeXBlID0gZGVzY3JpcHRvcihsb2NrZXIpOwotICAgICAgICBpZiAoIXNl
dChkZWZlcnJhbENvbnRleHQsIGxvY2tlciwgdm0sIFRvcCkpCisgICAgICAgIGlmICghc2V0KGxv
Y2tlciwgdm0sIFRvcCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC00MzQsMTQg
KzQzMyw4IEBAIHZvaWQgSW5mZXJyZWRUeXBlOjptYWtlVG9wU2xvdyhWTSYgdm0sIFAKICAgICBt
X3dhdGNocG9pbnRTZXQuZmlyZUFsbCh2bSwgZGV0YWlsKTsKIH0KIAotYm9vbCBJbmZlcnJlZFR5
cGU6OnNldChHQ0RlZmVycmFsQ29udGV4dCYgZGVmZXJyYWxDb250ZXh0LCBjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBEZXNjcmlwdG9yIG5ld0Rlc2NyaXB0b3IpCiti
b29sIEluZmVycmVkVHlwZTo6c2V0KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBW
TSYgdm0sIERlc2NyaXB0b3IgbmV3RGVzY3JpcHRvcikKIHsKLSAgICAvLyBXZSB3aWxsIHRyaWdn
ZXIgd3JpdGUgYmFycmllcnMgd2hpbGUgaG9sZGluZyBvdXIgbG9jay4gQ3VycmVudGx5LCB3cml0
ZSBiYXJyaWVycyBkb24ndCBHQywgYnV0IHRoYXQKLSAgICAvLyBjb3VsZCBjaGFuZ2UuIElmIGl0
IGRvZXMsIHdlIGRvbid0IHdhbnQgdG8gZGVhZGxvY2suIE5vdGUgdGhhdCB3ZSBjb3VsZCBoYXZl
IHVzZWQKLSAgICAvLyBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgaW4gdGhlIGNhbGxlciwgYnV0
IHRoZSBjYWxsZXIgaXMgb24gYSBmYXN0IHBhdGggc28gbWF5YmUgdGhhdCB3b3VsZG4ndCBiZQot
ICAgIC8vIGEgZ29vZCBpZGVhLgotICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyh2bS5oZWFw
KTsKLSAgICAKICAgICAvLyBCZSBkZWZlbnNpdmU6IGlmIHdlJ3JlIG5vdCByZWFsbHkgY2hhbmdp
bmcgdGhlIHR5cGUsIHRoZW4gd2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnl0aGluZy4KICAgICBpZiAo
ZGVzY3JpcHRvcihsb2NrZXIpID09IG5ld0Rlc2NyaXB0b3IpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTQ2OSwxOSArNDYyLDEzIEBAIGJvb2wgSW5mZXJyZWRUeXBlOjpzZXQoR0NEZWZlcnJh
bENvbnRleHQKICAgICAgICAgc2hvdWxkRmlyZVdhdGNocG9pbnRTZXQgPSB0cnVlOwogICAgIH0K
IAotICAgIC8vIFJlbW92ZSB0aGUgb2xkIEluZmVycmVkU3RydWN0dXJlIG9iamVjdCBpZiB3ZSBu
byBsb25nZXIgbmVlZCBpdC4KICAgICBpZiAoIW5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkpCi0g
ICAgICAgIG1fc3RydWN0dXJlLmNsZWFyKCk7Ci0KLSAgICAvLyBBZGQgYSBuZXcgSW5mZXJyZWRT
dHJ1Y3R1cmUgb2JqZWN0IGlmIHdlIG5lZWQgb25lIG5vdy4KLSAgICBpZiAobmV3RGVzY3JpcHRv
ci5zdHJ1Y3R1cmUoKSkgewotICAgICAgICBpZiAobV9zdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAg
IC8vIFdlIHNob3VsZCBhZ3JlZSBvbiB0aGUgc3RydWN0dXJlcyBpZiB3ZSBnZXQgaGVyZS4KLSAg
ICAgICAgICAgIEFTU0VSVChuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpID09IG1fc3RydWN0dXJl
LT5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBhdXRvKiBzdHJ1
Y3R1cmUgPSBJbmZlcnJlZFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBkZWZlcnJhbENvbnRleHQsIHRo
aXMsIG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkpOwotICAgICAgICAgICAgbV9zdHJ1Y3R1cmUu
c2V0KHZtLCB0aGlzLCBzdHJ1Y3R1cmUpOwotICAgICAgICB9CisgICAgICAgIG1fc3RydWN0dXJl
ID0gbnVsbHB0cjsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKG1fc3RydWN0dXJlKQorICAgICAg
ICAgICAgQVNTRVJUKG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkgPT0gbV9zdHJ1Y3R1cmUtPnN0
cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fc3RydWN0dXJlID0g
c3RkOjptYWtlX3VuaXF1ZTxJbmZlcnJlZFN0cnVjdHVyZT4odm0sIHRoaXMsIG5ld0Rlc2NyaXB0
b3Iuc3RydWN0dXJlKCkpOwogICAgIH0KIAogICAgIC8vIEZpbmFsbHksIHNldCB0aGUgZGVzY3Jp
cHRvciBraW5kLgpAQCAtNTAzLDEzICs0OTAsMTIgQEAgdm9pZCBJbmZlcnJlZFR5cGU6OnJlbW92
ZVN0cnVjdHVyZSgpCiAgICAgRGVzY3JpcHRvciBvbGREZXNjcmlwdG9yOwogICAgIERlc2NyaXB0
b3IgbmV3RGVzY3JpcHRvcjsKICAgICB7Ci0gICAgICAgIEdDRGVmZXJyYWxDb250ZXh0IGRlZmVy
cmFsQ29udGV4dCh2bS5oZWFwKTsKICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlciht
X2xvY2spOwogICAgICAgICBvbGREZXNjcmlwdG9yID0gZGVzY3JpcHRvcihsb2NrZXIpOwogICAg
ICAgICBuZXdEZXNjcmlwdG9yID0gb2xkRGVzY3JpcHRvcjsKICAgICAgICAgbmV3RGVzY3JpcHRv
ci5yZW1vdmVTdHJ1Y3R1cmUoKTsKICAgICAgICAgCi0gICAgICAgIGlmICghc2V0KGRlZmVycmFs
Q29udGV4dCwgbG9ja2VyLCB2bSwgbmV3RGVzY3JpcHRvcikpCisgICAgICAgIGlmICghc2V0KGxv
Y2tlciwgdm0sIG5ld0Rlc2NyaXB0b3IpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIApA
QCAtNTE3LDYgKzUwMywyMCBAQCB2b2lkIEluZmVycmVkVHlwZTo6cmVtb3ZlU3RydWN0dXJlKCkK
ICAgICBtX3dhdGNocG9pbnRTZXQuZmlyZUFsbCh2bSwgZGV0YWlsKTsKIH0KIAorSXNvQ2VsbFNl
dDo6Rm9yRWFjaFJlc3VsdCBJbmZlcnJlZFR5cGU6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZN
JikKK3sKKyAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQodGhpcykpOworICAgIAorICAgIGlmICht
X3N0cnVjdHVyZSkgeworICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUtPnN0
cnVjdHVyZS5nZXQoKSkpCisgICAgICAgICAgICByZXR1cm4gSXNvQ2VsbFNldDo6Rm9yRWFjaFJl
c3VsdDo6Q29udGludWU7CisgICAgICAgIAorICAgICAgICByZW1vdmVTdHJ1Y3R1cmUoKTsKKyAg
ICB9CisgICAgCisgICAgcmV0dXJuIElzb0NlbGxTZXQ6OkZvckVhY2hSZXN1bHQ6OlJlbW92ZUFu
ZENvbnRpbnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogbmFtZXNwYWNlIFdURiB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuaAkocmV2
aXNpb24gMjI1NzcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRU
eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkNvbmN1
cnJlbnRKU0xvY2suaCIKICNpbmNsdWRlICJJbmZlcnJlZFN0cnVjdHVyZS5oIgorI2luY2x1ZGUg
Iklzb0NlbGxTZXQuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU5h
bWUuaCIKICNpbmNsdWRlICJQdXRCeUlkRmxhZ3MuaCIKQEAgLTE4NSw3ICsxODYsNyBAQCBwdWJs
aWM6CiAKICAgICBEZXNjcmlwdG9yIGRlc2NyaXB0b3JNYWluVGhyZWFkKCkgY29uc3QKICAgICB7
Ci0gICAgICAgIHJldHVybiBEZXNjcmlwdG9yKG1fa2luZCwgbV9zdHJ1Y3R1cmUgPyBtX3N0cnVj
dHVyZS0+c3RydWN0dXJlKCkgOiBudWxscHRyKTsKKyAgICAgICAgcmV0dXJuIERlc2NyaXB0b3Io
bV9raW5kLCBtX3N0cnVjdHVyZSA/IG1fc3RydWN0dXJlLT5zdHJ1Y3R1cmUuZ2V0KCkgOiBudWxs
cHRyKTsKICAgICB9CiAgICAgCiAgICAgRGVzY3JpcHRvciBkZXNjcmlwdG9yKGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYpIGNvbnN0CkBAIC0yMzAsNyArMjMxLDcgQEAgcHVibGljOgogCiAgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgCi0gICAgdm9pZCBmaW5hbGl6ZVVu
Y29uZGl0aW9uYWxseSgpOworICAgIElzb0NlbGxTZXQ6OkZvckVhY2hSZXN1bHQgZmluYWxpemVV
bmNvbmRpdGlvbmFsbHkoVk0mKTsKIAogcHJpdmF0ZToKICAgICBJbmZlcnJlZFR5cGUoVk0mKTsK
QEAgLTI0MSw3ICsyNDIsNyBAQCBwcml2YXRlOgogCiAgICAgLy8gSGVscGVyIGZvciB3aWxsU3Rv
cmVWYWx1ZVNsb3coKSBhbmQgbWFrZVRvcFNsb3coKS4gVGhpcyByZXR1cm5zIHRydWUgaWYgd2Ug
c2hvdWxkIGZpcmUgdGhlCiAgICAgLy8gd2F0Y2hwb2ludCBzZXQuCi0gICAgYm9vbCBzZXQoR0NE
ZWZlcnJhbENvbnRleHQmLCBjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWTSYsIERlc2NyaXB0
b3IpOworICAgIGJvb2wgc2V0KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFZNJiwgRGVzY3Jp
cHRvcik7CiAgICAgCiAgICAgdm9pZCByZW1vdmVTdHJ1Y3R1cmUoKTsKICAgICAKQEAgLTI1Miw3
ICsyNTMsOCBAQCBwcml2YXRlOgogICAgIAogICAgIEtpbmQgbV9raW5kIHsgQm90dG9tIH07CiAK
LSAgICBXcml0ZUJhcnJpZXI8SW5mZXJyZWRTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOworICAgIC8v
IEZJWE1FOiBUaGlzIHNob3VsZCBiZSBQb2lzb25lZC4KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5m
ZXJyZWRTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOwogCiAgICAgLy8gTk9URTogSWYgdGhpcyBpcyBi
ZWluZyB3YXRjaGVkLCB3ZSB0cmFuc2Zvcm0gdG8gVG9wIGJlY2F1c2UgdGhhdCBpbXBsaWVzIHRo
YXQgaXQgd291bGRuJ3QgYmUKICAgICAvLyBwcm9maXRhYmxlIHRvIHdhdGNoIGl0IGFnYWluLiBB
bHNvLCB0aGlzIHNldCBpcyBpbml0aWFsaXplZCBjbGVhciwgYW5kIGlzIG5ldmVyIGV4cG9zZWQg
dG8gdGhlIERGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRU
eXBlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0luZmVycmVkVHlwZUlubGluZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCitpbmxpbmUgSXNvQ2VsbFNldDo6Rm9yRWFjaFJlc3VsdCBJbmZlcnJlZFR5
cGU6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJikKK3sKKyAgICBBU1NFUlQoSGVhcDo6aXNN
YXJrZWQodGhpcykpOworICAgIAorICAgIGlmIChtX3N0cnVjdHVyZSkgeworICAgICAgICBpZiAo
SGVhcDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUtPnN0cnVjdHVyZS5nZXQoKSkpCisgICAgICAgICAg
ICByZXR1cm4gSXNvQ2VsbFNldDo6Rm9yRWFjaFJlc3VsdDo6Q29udGludWU7CisgICAgICAgIAor
ICAgICAgICByZW1vdmVTdHJ1Y3R1cmUoKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIElzb0Nl
bGxTZXQ6OkZvckVhY2hSZXN1bHQ6OlJlbW92ZUFuZENvbnRpbnVlOworfQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNp
b24gMjI1NzcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMDUsMTEgKzIwNSwxMSBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVh
cFR5cGUgaGVhcFR5cGUpCiAgICAgLCBkaXJlY3RFdmFsRXhlY3V0YWJsZVNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIERpcmVj
dEV2YWxFeGVjdXRhYmxlKQogICAgICwgZnVuY3Rpb25FeGVjdXRhYmxlU3BhY2UgSVNPX1NVQlNQ
QUNFX0lOSVQoaGVhcCwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgRnVuY3Rp
b25FeGVjdXRhYmxlKQogICAgICwgaW5kaXJlY3RFdmFsRXhlY3V0YWJsZVNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIEluZGly
ZWN0RXZhbEV4ZWN1dGFibGUpCi0gICAgLCBpbmZlcnJlZFN0cnVjdHVyZVNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIEluZmVy
cmVkU3RydWN0dXJlKQogICAgICwgaW5mZXJyZWRUeXBlU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQo
aGVhcCwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgSW5mZXJyZWRUeXBlKQog
ICAgICwgbW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGVTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFw
LCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLmdldCgpLCBNb2R1bGVQcm9ncmFtRXhlY3V0
YWJsZSkKICAgICAsIG5hdGl2ZUV4ZWN1dGFibGVTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFw
LCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLmdldCgpLCBOYXRpdmVFeGVjdXRhYmxlKQog
ICAgICwgcHJvZ3JhbUV4ZWN1dGFibGVTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBkZXN0
cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLmdldCgpLCBQcm9ncmFtRXhlY3V0YWJsZSkKKyAgICAs
IGluZmVycmVkVHlwZXNXaXRoRmluYWxpemVycyhpbmZlcnJlZFR5cGVTcGFjZSkKICAgICAsIHZt
VHlwZSh2bVR5cGUpCiAgICAgLCBjbGllbnREYXRhKDApCiAgICAgLCB0b3BFbnRyeUZyYW1lKG51
bGxwdHIpCkBAIC0yOTIsNyArMjkyLDYgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBl
IGhlYXBUeXBlKQogICAgIHVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmUuc2V0KCp0
aGlzLCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAs
IGpzTnVsbCgpKSk7CiAgICAgdW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJl
LnNldCgqdGhpcywgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1
cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgcHJvcGVydHlUYWJsZVN0cnVjdHVyZS5zZXQo
KnRoaXMsIFByb3BlcnR5VGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkp
KTsKLSAgICBpbmZlcnJlZFN0cnVjdHVyZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEluZmVycmVkU3Ry
dWN0dXJlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgaW5mZXJy
ZWRUeXBlU3RydWN0dXJlLnNldCgqdGhpcywgSW5mZXJyZWRUeXBlOjpjcmVhdGVTdHJ1Y3R1cmUo
KnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgaW5mZXJyZWRUeXBlVGFibGVTdHJ1Y3R1cmUuc2V0
KCp0aGlzLCBJbmZlcnJlZFR5cGVUYWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051
bGwoKSkpOwogICAgIGluZmVycmVkVmFsdWVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBJbmZlcnJlZFZh
bHVlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDIyNTc3MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKICNp
bmNsdWRlICJGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuaCIKICNpbmNsdWRlICJIZWFwLmgiCiAj
aW5jbHVkZSAiSW50cmluc2ljLmgiCisjaW5jbHVkZSAiSXNvQ2VsbFNldC5oIgogI2luY2x1ZGUg
Iklzb1N1YnNwYWNlLmgiCiAjaW5jbHVkZSAiSklUVGh1bmtzLmgiCiAjaW5jbHVkZSAiSlNDSlNW
YWx1ZS5oIgpAQCAtMzQwLDExICszNDEsMTIgQEAgcHVibGljOgogICAgIElzb1N1YnNwYWNlIGRp
cmVjdEV2YWxFeGVjdXRhYmxlU3BhY2U7CiAgICAgSXNvU3Vic3BhY2UgZnVuY3Rpb25FeGVjdXRh
YmxlU3BhY2U7CiAgICAgSXNvU3Vic3BhY2UgaW5kaXJlY3RFdmFsRXhlY3V0YWJsZVNwYWNlOwot
ICAgIElzb1N1YnNwYWNlIGluZmVycmVkU3RydWN0dXJlU3BhY2U7CiAgICAgSXNvU3Vic3BhY2Ug
aW5mZXJyZWRUeXBlU3BhY2U7CiAgICAgSXNvU3Vic3BhY2UgbW9kdWxlUHJvZ3JhbUV4ZWN1dGFi
bGVTcGFjZTsKICAgICBJc29TdWJzcGFjZSBuYXRpdmVFeGVjdXRhYmxlU3BhY2U7CiAgICAgSXNv
U3Vic3BhY2UgcHJvZ3JhbUV4ZWN1dGFibGVTcGFjZTsKKyAgICAKKyAgICBJc29DZWxsU2V0IGlu
ZmVycmVkVHlwZXNXaXRoRmluYWxpemVyczsKIAogICAgIFZNVHlwZSB2bVR5cGU7CiAgICAgQ2xp
ZW50RGF0YSogY2xpZW50RGF0YTsKQEAgLTM5Miw3ICszOTQsNiBAQCBwdWJsaWM6CiAgICAgU3Ry
b25nPFN0cnVjdHVyZT4gdW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZTsKICAgICBT
dHJvbmc8U3RydWN0dXJlPiB1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmU7
CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvcGVydHlUYWJsZVN0cnVjdHVyZTsKLSAgICBTdHJv
bmc8U3RydWN0dXJlPiBpbmZlcnJlZFN0cnVjdHVyZVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3Ry
dWN0dXJlPiBpbmZlcnJlZFR5cGVTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gaW5m
ZXJyZWRUeXBlVGFibGVTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gaW5mZXJyZWRW
YWx1ZVN0cnVjdHVyZTsKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjU3NzApCisrKyBTb3VyY2UvV1RGL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBACisyMDE3LTEyLTExICBGaWxp
cCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgSXQgc2hvdWxkIGJlIHBvc3Np
YmxlIHRvIGZsYWcgYSBjZWxsIGZvciB1bmNvbmRpdGlvbmFsIGZpbmFsaXphdGlvbgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwNjM2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGFk
ZHMgQ29uY3VycmVudFZlY3Rvciwgd2hpY2ggaXMgbGlrZSBTZWdtZW50ZWRWZWN0b3IsIGJ1dCB3
YXN0ZXMgc29tZSBzcGFjZSB0byBhbGxvdworICAgICAgICByZXNpemluZyB0byBwcm9jZWVkIGNv
bmN1cnJlbnRseSB0byBhY2Nlc3MuIEl0J3Mgbm90IHBvc3NpYmxlIHRvIHJlc2l6ZSBjb25jdXJy
ZW50bHkgdG8KKyAgICAgICAgcmVzaXppbmcsIGNvbmN1cnJlbnQgcmVhZC93cml0ZXMgYXJlbid0
IHByb3RlY3RlZCBmcm9tIHJhY2luZyBpZiB0aGV5IGFjY2VzcyB0aGUgc2FtZSBlbGVtZW50LAor
ICAgICAgICBhbmQgd2hvIGtub3dzIHdoYXQgeW91J2xsIGdldCBpZiB5b3UgaXRlcmF0ZSB1cCB0
byBzaXplKCkgd2hpbGUgc29tZW9uZSBlbHNlIGFwcGVuZCgpcy4gVGhlCisgICAgICAgIGtleSBp
bnNpZ2h0IGlzIHRvIHN0YXNoIGFsbCBwcmlvciBjb3BpZXMgb2YgdGhlIHNwaW5lLCBzbyB0aGF0
IG5vYm9keSBjcmFzaGVzIHRyeWluZyB0byBhY2Nlc3MKKyAgICAgICAgYSBzdGFsZSBzcGluZS4K
KyAgICAgICAgCisgICAgICAgIEknbSBnb2luZyB0byB3YW50IHRvIGRvIHRoZSBzYW1lIHRoaW5n
IGZvciBGYXN0Qml0VmVjdG9yLCBieSBjcmVhdGluZyBhIHNlZ21lbnRlZCBXb3JkT3duZXIKKyAg
ICAgICAgY2xhc3MuIFRoYXQgd291bGQgcmVxdWlyZSByZXBlYXRpbmcgdGhlIGRhbmNlIG9mIGhh
dmluZyBhIHNwaW5lIHRoYXQgY2FuIHJlc2l6ZSB3aGlsZSBzdGFzaGluZworICAgICAgICBvbGQg
dmVyc2lvbnMuIFNvLCB0aGUgc3BpbmUgcmVzaXppbmcgbG9naWMgaXMgYWJzdHJhY3RlZCBiZWhp
bmQgQ29uY3VycmVudEJ1ZmZlci4gWW91IGNvdWxkCisgICAgICAgIHVzZSB0aGF0IGFzIGEga2lu
ZCBvZiAiY29uY3VycmVudCB2ZWN0b3IiIGZvciBpbW11dGFibGUgZGF0YS4gVGhhdCdzIGhvdyBD
b25jdXJyZW50VmVjdG9yIHVzZXMKKyAgICAgICAgaXQ6IGl0J3MgYW4gaW1tdXRhYmxlIGFycmF5
IG9mIHNlZ21lbnQgcG9pbnRlcnMuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQ29uY3VycmVudEJ1ZmZlci5oOiBBZGRlZC4KKyAgICAg
ICAgKFdURjo6Q29uY3VycmVudEJ1ZmZlcjo6Q29uY3VycmVudEJ1ZmZlcik6CisgICAgICAgIChX
VEY6OkNvbmN1cnJlbnRCdWZmZXI6On5Db25jdXJyZW50QnVmZmVyKToKKyAgICAgICAgKFdURjo6
Q29uY3VycmVudEJ1ZmZlcjo6Z3Jvd0V4YWN0KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudEJ1
ZmZlcjo6Z3Jvdyk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRCdWZmZXI6OmFycmF5IGNvbnN0
KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudEJ1ZmZlcjo6b3BlcmF0b3JbXSk6CisgICAgICAg
IChXVEY6OkNvbmN1cnJlbnRCdWZmZXI6Om9wZXJhdG9yW10gY29uc3QpOgorICAgICAgICAoV1RG
OjpDb25jdXJyZW50QnVmZmVyOjpjcmVhdGVBcnJheSk6CisgICAgICAgICogd3RmL0NvbmN1cnJl
bnRWZWN0b3IuaDogQWRkZWQuCisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRWZWN0b3JJdGVyYXRv
cjo6fkNvbmN1cnJlbnRWZWN0b3JJdGVyYXRvcik6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRW
ZWN0b3JJdGVyYXRvcjo6b3BlcmF0b3IqIGNvbnN0KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVu
dFZlY3Rvckl0ZXJhdG9yOjpvcGVyYXRvci0+IGNvbnN0KToKKyAgICAgICAgKFdURjo6Q29uY3Vy
cmVudFZlY3Rvckl0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKFdURjo6Q29uY3VycmVu
dFZlY3Rvckl0ZXJhdG9yOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKFdURjo6Q29uY3Vy
cmVudFZlY3Rvckl0ZXJhdG9yOjpvcGVyYXRvciE9IGNvbnN0KToKKyAgICAgICAgKFdURjo6Q29u
Y3VycmVudFZlY3Rvckl0ZXJhdG9yOjpvcGVyYXRvcj0pOgorICAgICAgICAoV1RGOjpDb25jdXJy
ZW50VmVjdG9ySXRlcmF0b3I6OkNvbmN1cnJlbnRWZWN0b3JJdGVyYXRvcik6CisgICAgICAgIChX
VEY6OkNvbmN1cnJlbnRWZWN0b3I6On5Db25jdXJyZW50VmVjdG9yKToKKyAgICAgICAgKFdURjo6
Q29uY3VycmVudFZlY3Rvcjo6c2l6ZSBjb25zdCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRW
ZWN0b3I6OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50VmVjdG9yOjph
dCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRWZWN0b3I6OmF0IGNvbnN0KToKKyAgICAgICAg
KFdURjo6Q29uY3VycmVudFZlY3Rvcjo6b3BlcmF0b3JbXSk6CisgICAgICAgIChXVEY6OkNvbmN1
cnJlbnRWZWN0b3I6Om9wZXJhdG9yW10gY29uc3QpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50
VmVjdG9yOjpmaXJzdCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRWZWN0b3I6OmZpcnN0IGNv
bnN0KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFZlY3Rvcjo6bGFzdCk6CisgICAgICAgIChX
VEY6OkNvbmN1cnJlbnRWZWN0b3I6Omxhc3QgY29uc3QpOgorICAgICAgICAoV1RGOjpDb25jdXJy
ZW50VmVjdG9yOjp0YWtlTGFzdCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRWZWN0b3I6OmFw
cGVuZCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRWZWN0b3I6OmFsbG9jKToKKyAgICAgICAg
KFdURjo6Q29uY3VycmVudFZlY3Rvcjo6cmVtb3ZlTGFzdCk6CisgICAgICAgIChXVEY6OkNvbmN1
cnJlbnRWZWN0b3I6Omdyb3cpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50VmVjdG9yOjpiZWdp
bik6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRWZWN0b3I6OmVuZCk6CisgICAgICAgIChXVEY6
OkNvbmN1cnJlbnRWZWN0b3I6OnNlZ21lbnRFeGlzdHNGb3IpOgorICAgICAgICAoV1RGOjpDb25j
dXJyZW50VmVjdG9yOjpzZWdtZW50Rm9yKToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFZlY3Rv
cjo6c3Vic2NyaXB0Rm9yKToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFZlY3Rvcjo6ZW5zdXJl
U2VnbWVudHNGb3IpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50VmVjdG9yOjplbnN1cmVTZWdt
ZW50KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFZlY3Rvcjo6YWxsb2NhdGVTZWdtZW50KToK
KwogMjAxNy0xMi0xMSAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAog
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBPcHRpb25hbGx5IGxvZyBXZWJLaXQgbG9nIHBhcmFtZXRl
cnMgYXMgSlNPTgpJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiAyMjU3NzApCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMzksNiArMjM5LDggQEAKIAkJMEZCMTRFMTgxODBG
QTIxODAwOUI2QjREIC8qIEJhZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBC
YWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCMTRFMUExODEwRTFEQTAwOUI2
QjREIC8qIEJhZ1RvSGFzaE1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCYWdUb0hhc2hNYXAuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCMzE3QzMxQzQ4ODAwMTAwN0UzOTVBIC8qIFN5
c3RlbVRyYWNpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3lzdGVtVHJh
Y2luZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI0Njc4MjFGREUyODJCMDAz
RkNCMDkgLyogQ29uY3VycmVudEJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDb25jdXJyZW50QnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
QjQ2NzgzMUZERTI4MkMwMDNGQ0IwOSAvKiBDb25jdXJyZW50VmVjdG9yLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbmN1cnJlbnRWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZDNDQ4ODIxNkZFOUZFMTAwODQ0QkU5IC8qIFByb2Nlc3NJRC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm9jZXNzSUQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZDNEVERTUxNjk2MTQ5NjAwRjY1MDQxIC8qIENvbW1hUHJpbnRl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21tYVByaW50ZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEODFBQzQxNTRGQjIyRTAwOTgzRTcyIC8qIEZh
c3RCaXRWZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmFzdEJpdFZl
Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODA4LDggKzgxMCwxMCBAQAog
CQkJCTBGOEYyQjkwMTcyRTAwRjAwMDdEQkRBNSAvKiBDb21waWxhdGlvblRocmVhZC5oICovLAog
CQkJCUE4QTQ3MjcwMTUxQTgyNUEwMDQxMjNGRiAvKiBDb21waWxlci5oICovLAogCQkJCTQ2QkE5
RUFCMUY0Q0Q2MUUwMDlBMkJCQyAvKiBDb21wbGV0aW9uSGFuZGxlci5oICovLAorCQkJCTBGQjQ2
NzgyMUZERTI4MkIwMDNGQ0IwOSAvKiBDb25jdXJyZW50QnVmZmVyLmggKi8sCiAJCQkJMEYzMENC
NTgxRkNERjEzMzAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmNwcCAqLywKIAkJCQkw
RjMwQ0I1OTFGQ0RGMTMzMDA0QjUzMjMgLyogQ29uY3VycmVudFB0ckhhc2hTZXQuaCAqLywKKwkJ
CQkwRkI0Njc4MzFGREUyODJDMDAzRkNCMDkgLyogQ29uY3VycmVudFZlY3Rvci5oICovLAogCQkJ
CTBGREI2OThEMUI3QzY0M0EwMDBDMTA3OCAvKiBDb25kaXRpb24uaCAqLywKIAkJCQkwRkZCQ0JG
QTFGRDM3RTBGMDA3MkFBRjAgLyogQ291bnRpbmdMb2NrLmggKi8sCiAJCQkJMEY4RTg1REExRkQ0
ODVCMDAwNjkxODg5IC8qIENvdW50aW5nTG9jay5jcHAgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3Rz
LnR4dAkocmV2aXNpb24gMjI1NzcwKQorKysgU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTE4LDcgKzE4LDkgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgQ2xv
Y2tUeXBlLmgKICAgICBDb21waWxhdGlvblRocmVhZC5oCiAgICAgQ29tcGlsZXIuaAorICAgIENv
bmN1cnJlbnRCdWZmZXIuaAogICAgIENvbmN1cnJlbnRQdHJIYXNoU2V0LmgKKyAgICBDb25jdXJy
ZW50VmVjdG9yLmgKICAgICBDb25kaXRpb24uaAogICAgIENvdW50aW5nTG9jay5oCiAgICAgQ3Jv
c3NUaHJlYWRDb3BpZXIuaApJbmRleDogU291cmNlL1dURi93dGYvQ29uY3VycmVudEJ1ZmZlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRCdWZmZXIuaAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9Db25jdXJyZW50QnVmZmVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgorI2lu
Y2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4K
KyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8vIENvbmN1cnJlbnRC
dWZmZXIgaXMgc3VpdGFibGUgZm9yIHdoZW4geW91IHBsYW4gdG8gc3RvcmUgaW1tdXRhYmxlIGRh
dGEgYW5kIHNvbWV0aW1lcyBhcHBlbmQgdG8gaXQuCisvLyBJdCBzdXBwb3J0cyBzdG9yaW5nIGRh
dGEgdGhhdCBpcyBub3QgY29weS1jb25zdHJ1Y3RhYmxlIGJ1dCBiaXQtY29weWFibGUuCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgQ29uY3VycmVudEJ1ZmZlciB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoQ29uY3VycmVudEJ1ZmZlcik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgCisgICAgQ29uY3VycmVudEJ1ZmZlcigpCisgICAgeworICAgIH0K
KyAgICAKKyAgICB+Q29uY3VycmVudEJ1ZmZlcigpCisgICAgeworICAgICAgICBpZiAoQXJyYXkq
IGFycmF5ID0gbV9hcnJheSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGFycmF5LT5zaXplOyArK2kpCisgICAgICAgICAgICAgICAgYXJyYXktPmRhdGFbaV0uflQoKTsK
KyAgICAgICAgfQorICAgICAgICBmb3IgKEFycmF5KiBhcnJheSA6IG1fYWxsQXJyYXlzKQorICAg
ICAgICAgICAgZmFzdEZyZWUoYXJyYXkpOworICAgIH0KKworICAgIC8vIEdyb3dpbmcgaXMgbm90
IGNvbmN1cnJlbnQuIFRoaXMgYXNzdW1lcyB5b3UgYXJlIGhvbGRpbmcgc29tZSBvdGhlciBsb2Nr
IGJlZm9yZSB5b3UgZG8gdGhpcy4KKyAgICB2b2lkIGdyb3dFeGFjdChzaXplX3QgbmV3U2l6ZSkK
KyAgICB7CisgICAgICAgIEFycmF5KiBhcnJheSA9IG1fYXJyYXk7CisgICAgICAgIGlmIChhcnJh
eSAmJiBuZXdTaXplIDw9IGFycmF5LT5zaXplKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBBcnJheSogbmV3QXJyYXkgPSBjcmVhdGVBcnJheShuZXdTaXplKTsKKyAgICAgICAgLy8gVGhp
cyBhbGxvd3MgdXMgdG8gZG8gQ29uY3VycmVudEJ1ZmZlcjxzdGQ6OnVuaXF1ZV9wdHI8Pj4uCisg
ICAgICAgIGlmIChhcnJheSkKKyAgICAgICAgICAgIG1lbWNweShuZXdBcnJheS0+ZGF0YSwgYXJy
YXktPmRhdGEsIHNpemVvZihUKSAqIGFycmF5LT5zaXplKTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gYXJyYXkgPyBhcnJheS0+c2l6ZSA6IDA7IGkgPCBuZXdTaXplOyArK2kpCisgICAgICAg
ICAgICBuZXcgKG5ld0FycmF5LT5kYXRhICsgaSkgVCgpOworICAgICAgICBXVEY6OnN0b3JlU3Rv
cmVGZW5jZSgpOworICAgICAgICBtX2FycmF5ID0gbmV3QXJyYXk7CisgICAgICAgIFdURjo6c3Rv
cmVTdG9yZUZlbmNlKCk7CisgICAgICAgIG1fYWxsQXJyYXlzLmFwcGVuZChuZXdBcnJheSk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgZ3JvdyhzaXplX3QgbmV3U2l6ZSkKKyAgICB7CisgICAgICAg
IHNpemVfdCBzaXplID0gbV9hcnJheSA/IG1fYXJyYXktPnNpemUgOiAwOworICAgICAgICBpZiAo
bmV3U2l6ZSA8PSBzaXplKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBncm93RXhhY3Qo
c3RkOjptYXgobmV3U2l6ZSwgc2l6ZSAqIDIpKTsKKyAgICB9CisgICAgCisgICAgc3RydWN0IEFy
cmF5IHsKKyAgICAgICAgdW5zaWduZWQgc2l6ZTsgLy8gVGhpcyBpcyBhbiBpbW11dGFibGUgc2l6
ZS4KKyAgICAgICAgVCBkYXRhWzFdOworICAgIH07CisgICAgCisgICAgQXJyYXkqIGFycmF5KCkg
Y29uc3QgeyByZXR1cm4gbV9hcnJheTsgfQorICAgIAorICAgIFQmIG9wZXJhdG9yW10oc2l6ZV90
IGluZGV4KSB7IHJldHVybiBtX2FycmF5LT5kYXRhW2luZGV4XTsgfQorICAgIGNvbnN0IFQmIG9w
ZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2FycmF5LT5kYXRhW2luZGV4
XTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBBcnJheSogY3JlYXRlQXJyYXkodW5zaWduZWQgc2l6
ZSkKKyAgICB7CisgICAgICAgIEFycmF5KiByZXN1bHQgPSBzdGF0aWNfY2FzdDxBcnJheSo+KGZh
c3RNYWxsb2MoT0JKRUNUX09GRlNFVE9GKEFycmF5LCBkYXRhKSArIHNpemVvZihUKSAqIHNpemUp
KTsKKyAgICAgICAgcmVzdWx0LT5zaXplID0gc2l6ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisgICAgCisgICAgQXJyYXkqIG1fYXJyYXkgeyBudWxscHRyIH07CisgICAgVmVjdG9y
PEFycmF5Kj4gbV9hbGxBcnJheXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDog
U291cmNlL1dURi93dGYvQ29uY3VycmVudFZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0NvbmN1cnJlbnRWZWN0b3IuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0
Zi9Db25jdXJyZW50VmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNjIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDb25j
dXJyZW50VmVjdG9yX2gKKyNkZWZpbmUgQ29uY3VycmVudFZlY3Rvcl9oCisKKyNpbmNsdWRlIDx3
dGYvQ29uY3VycmVudEJ1ZmZlci5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCitu
YW1lc3BhY2UgV1RGIHsKKworLy8gQW4gaXRlcmF0b3IgZm9yIENvbmN1cnJlbnRWZWN0b3IuIEl0
IHN1cHBvcnRzIG9ubHkgdGhlIHByZSArKyBvcGVyYXRvcgordGVtcGxhdGUgPHR5cGVuYW1lIFQs
IHNpemVfdCBTZWdtZW50U2l6ZSA9IDg+IGNsYXNzIENvbmN1cnJlbnRWZWN0b3I7Cit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVCwgc2l6ZV90IFNlZ21lbnRTaXplID0gOD4gY2xhc3MgQ29uY3VycmVudFZl
Y3Rvckl0ZXJhdG9yIHsKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENvbmN1cnJlbnRWZWN0
b3I8VCwgU2VnbWVudFNpemU+OworcHVibGljOgorICAgIHR5cGVkZWYgQ29uY3VycmVudFZlY3Rv
ckl0ZXJhdG9yPFQsIFNlZ21lbnRTaXplPiBJdGVyYXRvcjsKKworICAgIH5Db25jdXJyZW50VmVj
dG9ySXRlcmF0b3IoKSB7IH0KKworICAgIFQmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIG1f
dmVjdG9yLmF0KG1faW5kZXgpOyB9CisgICAgVCogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJu
ICZtX3ZlY3Rvci5hdChtX2luZGV4KTsgfQorCisgICAgLy8gT25seSBwcmVmaXggKysgb3BlcmF0
b3Igc3VwcG9ydGVkCisgICAgSXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgIHsKKyAgICAgICAg
bV9pbmRleCsrOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IEl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX2luZGV4ID09IG90aGVyLm1faW5kZXggJiYgJm1fdmVjdG9yID09ICZvdGhlci5tX3ZlY3Rv
cjsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgSXRlcmF0b3ImIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faW5kZXggIT0gb3RoZXIubV9pbmRleCB8fCAm
bV92ZWN0b3IgIT0gJm90aGVyLm1fdmVjdG9yOworICAgIH0KKworICAgIENvbmN1cnJlbnRWZWN0
b3JJdGVyYXRvciYgb3BlcmF0b3I9KGNvbnN0IENvbmN1cnJlbnRWZWN0b3JJdGVyYXRvcjxULCBT
ZWdtZW50U2l6ZT4mIG90aGVyKQorICAgIHsKKyAgICAgICAgbV92ZWN0b3IgPSBvdGhlci5tX3Zl
Y3RvcjsKKyAgICAgICAgbV9pbmRleCA9IG90aGVyLm1faW5kZXg7CisgICAgICAgIHJldHVybiAq
dGhpczsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQ29uY3VycmVudFZlY3Rvckl0ZXJhdG9yKENv
bmN1cnJlbnRWZWN0b3I8VCwgU2VnbWVudFNpemU+JiB2ZWN0b3IsIHNpemVfdCBpbmRleCkKKyAg
ICAgICAgOiBtX3ZlY3Rvcih2ZWN0b3IpCisgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICB7
CisgICAgfQorCisgICAgQ29uY3VycmVudFZlY3RvcjxULCBTZWdtZW50U2l6ZT4mIG1fdmVjdG9y
OworICAgIHNpemVfdCBtX2luZGV4OworfTsKKworLy8gQ29uY3VycmVudFZlY3RvciBpcyBsaWtl
IFNlZ21lbnRlZFZlY3RvciwgYnV0IHN1aXRhYmxlIGZvciBzY2VuYXJpb3Mgd2hlcmUgb25lIHRo
cmVhZCBhcHBlbmRzCisvLyBlbGVtZW50cyBhbmQgYW5vdGhlciB0aHJlYWQgY29udGludWVzIHRv
IGFjY2VzcyBlbGVtZW50cyBhdCBsb3dlciBpbmRpY2VzLiBPbmx5IG9uZSB0aHJlYWQgY2FuCisv
LyBhcHBlbmQgYXQgYSB0aW1lLCBzbyB0aGF0IGFjdGl2aXR5IHN0aWxsIG5lZWRzIGxvY2tpbmcu
IHNpemUoKSBhbmQgbGFzdCgpIGFyZSByYWN5IHdpdGggYXBwZW5kKCksCisvLyBzbyBhY2Nlc3Nl
cyB0aGF0IHJ1biBjb25jdXJyZW50bHkgdG8gYXBwZW5kKCkgbmVlZCB0byBoYXZlIHNvbWUgd2F5
IG9mIGtub3dpbmcgdGhhdCB0aGVpciBpbmRpY2VzCisvLyBoYXZlIGJlZW4gZnVsbHkgaW5pdGlh
bGl6ZWQuCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc2l6ZV90IFNlZ21lbnRTaXplPgorY2xhc3Mg
Q29uY3VycmVudFZlY3RvciB7CisgICAgZnJpZW5kIGNsYXNzIENvbmN1cnJlbnRWZWN0b3JJdGVy
YXRvcjxULCBTZWdtZW50U2l6ZT47CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29uY3VycmVu
dFZlY3Rvcik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKK3B1YmxpYzoKKyAgICB0
eXBlZGVmIENvbmN1cnJlbnRWZWN0b3JJdGVyYXRvcjxULCBTZWdtZW50U2l6ZT4gSXRlcmF0b3I7
CisKKyAgICBDb25jdXJyZW50VmVjdG9yKCkgPSBkZWZhdWx0OworCisgICAgfkNvbmN1cnJlbnRW
ZWN0b3IoKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBUaGlzIG1heSByZXR1cm4gYSBzaXplIHRo
YXQgaXMgYmlnZ2VyIHRoYW4gdGhlIHVuZGVybHlpbmcgc3RvcmFnZSwgc2luY2UgdGhpcyBkb2Vz
IG5vdCBmZW5jZQorICAgIC8vIG1hbmlwdWxhdGlvbnMgb2Ygc2l6ZS4gU28gaWYgeW91IGFjY2Vz
cyBhdCBzaXplKCktMSwgeW91IG1heSBjcmFzaCBiZWNhdXNlIHRoaXMgaGFzbid0CisgICAgLy8g
YWxsb2NhdGVkIHN0b3JhZ2UgZm9yIHRoYXQgaW5kZXggeWV0LgorICAgIHNpemVfdCBzaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJl
dHVybiAhc2l6ZSgpOyB9CisKKyAgICBUJiBhdChzaXplX3QgaW5kZXgpCisgICAgeworICAgICAg
ICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpbmRleCA8IG1fc2l6ZSk7CisgICAg
ICAgIHJldHVybiBzZWdtZW50Rm9yKGluZGV4KS0+ZW50cmllc1tzdWJzY3JpcHRGb3IoaW5kZXgp
XTsKKyAgICB9CisKKyAgICBjb25zdCBUJiBhdChzaXplX3QgaW5kZXgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxDb25jdXJyZW50VmVjdG9yPFQsIFNlZ21lbnRTaXpl
Pio+KHRoaXMpLT5hdChpbmRleCk7CisgICAgfQorCisgICAgVCYgb3BlcmF0b3JbXShzaXplX3Qg
aW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gYXQoaW5kZXgpOworICAgIH0KKworICAgIGNv
bnN0IFQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGF0KGluZGV4KTsKKyAgICB9CisKKyAgICBUJiBmaXJzdCgpCisgICAgeworICAgICAgICBB
U1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighaXNFbXB0eSgpKTsKKyAgICAgICAgcmV0
dXJuIGF0KDApOworICAgIH0KKyAgICBjb25zdCBUJiBmaXJzdCgpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighaXNFbXB0eSgpKTsKKyAgICAg
ICAgcmV0dXJuIGF0KDApOworICAgIH0KKyAgICAKKyAgICAvLyBUaGlzIG1heSBjcmFzaCBpZiBy
dW4gY29uY3VycmVudGx5IHRvIGFwcGVuZCgpLiBJZiB5b3Ugd2FudCB0byBhY2N1cmF0ZWx5IHRy
YWNrIHRoZSBzaXplIG9mCisgICAgLy8gdGhpcyB2ZWN0b3IsIHlvdSdsbCBoYXZlIHRvIGRvIGl0
IHlvdXJzZWxmLCB3aXRoIHlvdXIgb3duIGZlbmNpbmcuCisgICAgVCYgbGFzdCgpCisgICAgewor
ICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighaXNFbXB0eSgpKTsKKyAg
ICAgICAgcmV0dXJuIGF0KHNpemUoKSAtIDEpOworICAgIH0KKyAgICBjb25zdCBUJiBsYXN0KCkg
Y29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFp
c0VtcHR5KCkpOworICAgICAgICByZXR1cm4gYXQoc2l6ZSgpIC0gMSk7CisgICAgfQorCisgICAg
VCB0YWtlTGFzdCgpCisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNB
VElPTighaXNFbXB0eSgpKTsKKyAgICAgICAgVCByZXN1bHQgPSBXVEZNb3ZlKGxhc3QoKSk7Cisg
ICAgICAgIC0tbV9zaXplOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgdm9pZCBhcHBlbmQoQXJncyYmLi4uIGFyZ3Mp
CisgICAgeworICAgICAgICArK21fc2l6ZTsKKyAgICAgICAgaWYgKCFzZWdtZW50RXhpc3RzRm9y
KG1fc2l6ZSAtIDEpKQorICAgICAgICAgICAgYWxsb2NhdGVTZWdtZW50KCk7CisgICAgICAgIG5l
dyAoTm90TnVsbCwgJmxhc3QoKSkgVChzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOworICAg
IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgVCYgYWxsb2MoQXJncyYm
Li4uIGFyZ3MpCisgICAgeworICAgICAgICBhcHBlbmQoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3Mp
Li4uKTsKKyAgICAgICAgcmV0dXJuIGxhc3QoKTsKKyAgICB9CisKKyAgICB2b2lkIHJlbW92ZUxh
c3QoKQorICAgIHsKKyAgICAgICAgbGFzdCgpLn5UKCk7CisgICAgICAgIC0tbV9zaXplOworICAg
IH0KKworICAgIHZvaWQgZ3JvdyhzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIGlmIChzaXpl
ID09IG1fc2l6ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgQVNTRVJUKHNpemUgPiBt
X3NpemUpOworICAgICAgICBlbnN1cmVTZWdtZW50c0ZvcihzaXplKTsKKyAgICAgICAgc2l6ZV90
IG9sZFNpemUgPSBtX3NpemU7CisgICAgICAgIG1fc2l6ZSA9IHNpemU7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSBvbGRTaXplOyBpIDwgbV9zaXplOyArK2kpCisgICAgICAgICAgICBuZXcgKE5v
dE51bGwsICZhdChpKSkgVCgpOworICAgIH0KKworICAgIEl0ZXJhdG9yIGJlZ2luKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBJdGVyYXRvcigqdGhpcywgMCk7CisgICAgfQorCisgICAgSXRlcmF0
b3IgZW5kKCkKKyAgICB7CisgICAgICAgIHJldHVybiBJdGVyYXRvcigqdGhpcywgbV9zaXplKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RydWN0IFNlZ21lbnQgeworICAgICAgICBXVEZfTUFL
RV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAgICAgICAgICAKKyAgICAgICAgVCBlbnRyaWVz
W1NlZ21lbnRTaXplXTsKKyAgICB9OworCisgICAgYm9vbCBzZWdtZW50RXhpc3RzRm9yKHNpemVf
dCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBpbmRleCAvIFNlZ21lbnRTaXplIDwgbV9u
dW1TZWdtZW50czsKKyAgICB9CisKKyAgICBTZWdtZW50KiBzZWdtZW50Rm9yKHNpemVfdCBpbmRl
eCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3NlZ21lbnRzW2luZGV4IC8gU2VnbWVudFNpemVd
LmdldCgpOworICAgIH0KKworICAgIHNpemVfdCBzdWJzY3JpcHRGb3Ioc2l6ZV90IGluZGV4KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGluZGV4ICUgU2VnbWVudFNpemU7CisgICAgfQorCisgICAg
dm9pZCBlbnN1cmVTZWdtZW50c0ZvcihzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIHNpemVf
dCBzZWdtZW50Q291bnQgPSAobV9zaXplICsgU2VnbWVudFNpemUgLSAxKSAvIFNlZ21lbnRTaXpl
OworICAgICAgICBzaXplX3QgbmVlZGVkU2VnbWVudENvdW50ID0gKHNpemUgKyBTZWdtZW50U2l6
ZSAtIDEpIC8gU2VnbWVudFNpemU7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IHNlZ21lbnRD
b3VudCA/IHNlZ21lbnRDb3VudCAtIDEgOiAwOyBpIDwgbmVlZGVkU2VnbWVudENvdW50OyArK2kp
CisgICAgICAgICAgICBlbnN1cmVTZWdtZW50KGkpOworICAgIH0KKworICAgIHZvaWQgZW5zdXJl
U2VnbWVudChzaXplX3Qgc2VnbWVudEluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhf
U0VDVVJJVFlfSU1QTElDQVRJT04oc2VnbWVudEluZGV4IDw9IG1fbnVtU2VnbWVudHMpOworICAg
ICAgICBpZiAoc2VnbWVudEluZGV4ID09IG1fbnVtU2VnbWVudHMpCisgICAgICAgICAgICBhbGxv
Y2F0ZVNlZ21lbnQoKTsKKyAgICB9CisKKyAgICB2b2lkIGFsbG9jYXRlU2VnbWVudCgpCisgICAg
eworICAgICAgICBtX3NlZ21lbnRzLmdyb3cobV9udW1TZWdtZW50cyArIDEpOworICAgICAgICBt
X3NlZ21lbnRzW21fbnVtU2VnbWVudHMrK10gPSBzdGQ6Om1ha2VfdW5pcXVlPFNlZ21lbnQ+KCk7
CisgICAgfQorCisgICAgc2l6ZV90IG1fc2l6ZSB7IDAgfTsKKyAgICBDb25jdXJyZW50QnVmZmVy
PHN0ZDo6dW5pcXVlX3B0cjxTZWdtZW50Pj4gbV9zZWdtZW50czsKKyAgICBzaXplX3QgbV9udW1T
ZWdtZW50cyB7IDAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OkNv
bmN1cnJlbnRWZWN0b3I7CisKKyNlbmRpZiAvLyBDb25jdXJyZW50VmVjdG9yX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329126</attachid>
            <date>2017-12-12 11:02:01 -0800</date>
            <delta_ts>2017-12-12 11:18:34 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>78595</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI1NzcwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzNCBA
QAorMjAxNy0xMi0xMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBmbGFnIGEgY2VsbCBmb3IgdW5jb25kaXRpb25hbCBm
aW5hbGl6YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE4MDYzNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAg
ICAKKyAgICAgICAgVW5jb25kaXRpb25hbEZpbmFsaXplcnMgd2VyZSBhbm5veWluZyAtIHlvdSBo
YWQgdG8gYWxsb2NhdGUgdGhlbSBhbmQgeW91IGhhZCB0byBtYW5hZ2UgYQorICAgICAgICBnbG9i
YWwgbGlua2VkIGxpc3QgLSBidXQgdGhleSBoYWQgc29tZSBuaWNlIHByb3BlcnRpZXM6CisgICAg
ICAgIAorICAgICAgICAtIFlvdSBvbmx5IGRpZCB0aGUgaGFyZGVzdCB3b3JrIChjcmVhdGluZyB0
aGUgVW5jb25kaXRpb25hbEZpbmFsaXplcikgb24gZmlyc3QgR0Mgd2hlcmUgeW91CisgICAgICAg
ICAgc3Vydml2ZWQgYW5kIG5lZWRlZCBpdC4KKyAgICAgICAgICAgIC0+IEp1c3QgbmVlZGluZyBp
dCB3YXNuJ3QgZW5vdWdoLgorICAgICAgICAgICAgLT4gSnVzdCBzdXJ2aXZpbmcgd2Fzbid0IGVu
b3VnaC4KKyAgICAgICAgCisgICAgICAgIFRoZSBuZXcgQVBJIGJhc2VkIG9uIElzb1N1YnNwYWNl
cyBtZWFudCB0aGF0IGp1c3Qgc3Vydml2aW5nIHdhcyBlbm91Z2ggdG8gY2F1c2UgdW5jb25kaXRp
b25hbAorICAgICAgICBmaW5hbGl6ZXIgbG9naWMgdG8gYmUgaW52b2tlZC4gSSB0aGluayB0aGF0
J3Mgbm90IGdyZWF0LiBJbmZlcnJlZFR5cGUgZ290IGFyb3VuZCB0aGlzIGJ5CisgICAgICAgIG1h
a2luZyBJbmZlcnJlZFN0cnVjdHVyZSBhIGNlbGwsIGJ1dCB0aGlzIHdhcyBhIGdyb3NzIGhhY2su
IEZvciBvbmUsIGl0IG1lYW50IHRoYXQKKyAgICAgICAgSW5mZXJyZWRTdHJ1Y3R1cmUgd291bGQg
c3Vydml2ZSBkdXJpbmcgdGhlIEdDIGluIHdoaWNoIGl0cyBmaW5hbGl6ZXIgb2J2aWF0ZWQgdGhl
IG5lZWQgZm9yIGl0cworICAgICAgICBleGlzdGVuY2UuIEl0J3Mgbm90IHJlYWxseSBhbiBpZGlv
bSBJIHdhbnQgdXMgdG8gcmVwZWF0IGJlY2F1c2UgaXQgc291bmRzIGxpa2UgdGhlIHNvcnQgb2YK
KyAgICAgICAgdGhpbmcgdGhhdCB0dXJucyBvdXQgdG8gYmUgc3VidGx5IGJyb2tlbi4KKyAgICAg
ICAgCisgICAgICAgIFdlIHJlYWxseSBuZWVkIHRvIGhhdmUgYSB3YXkgb2YgaW5kaWNhdGluZyB3
aGVuIHlvdSBoYXZlIGVudGVyZWQgaW50byB0aGUgc3RhdGUgdGhhdCByZXF1aXJlcworICAgICAg
ICB5b3VyIHVuY29uZGl0aW9uYWwgZmluYWxpemVyIHRvIGJlIGludm9rZWQuIEJhc2ljYWxseSwg
d2Ugd2FudCB0byBiZSBhYmxlIHRvIHRyYWNrIHRoZSBzZXQgb2YKKyAgICAgICAgb2JqZWN0cyB0
aGF0IG5lZWQgdW5jb25kaXRpb25hbCBmaW5hbGl6ZXJzLiBPbmx5IHRoZSBzdWJzZXQgb2YgdGhh
dCBzZXQgdGhhdCBvdmVybGFwcyB3aXRoIHRoZQorICAgICAgICBzZXQgb2YgbWFya2VkIG9iamVj
dHMgbmVlZHMgdG8gYmUgYWNjdXJhdGUuIFRoZSBlYXNpZXN0IHdheSB0byBkbyB0aGlzIGlzIGEg
aGllcmFyY2h5IG9mCisgICAgICAgIGJpdHZlY3RvcnM6IG9uZSB0byBzYXkgd2hpY2ggTWFya2Vk
QmxvY2tzIGhhdmUgb2JqZWN0cyB0aGF0IGhhdmUgdW5jb25kaXRpb25hbCBmaW5hbGl6ZXJzLCBh
bmQKKyAgICAgICAgYW5vdGhlciBsZXZlbCB0byBzYXkgd2hpY2ggYXRvbXMgd2l0aGluIGEgTWFy
a2VkQmxvY2sgaGF2ZSB1bmNvbmRpdGlvbmFsIGZpbmFsaXplcnMuCisgICAgICAgIAorICAgICAg
ICBUaGlzIGNoYW5nZSBpbnRyb2R1Y2VzIElzb0NlbGxTZXQsIHdoaWNoIGNvdXBsZXMgaXRzZWxm
IHRvIHRoZSBNYXJrZWRBbGxvY2F0b3Igb2Ygc29tZQorICAgICAgICBJc29TdWJzcGFjZSB0byBh
bGxvdyBtYWludGFpbmluZyBhIHNldCBvZiBvYmplY3RzICh3ZWxsLCBjZWxscyAtIHlvdSBjb3Vs
ZCBkbyB0aGlzIHdpdGgKKyAgICAgICAgYXV4aWxpYXJpZXMpIHRoYXQgYmVsb25nIHRvIHRoYXQg
SXNvU3Vic3BhY2UuIEl0J2xsIGhhdmUgdW5kZWZpbmVkIGJlaGF2aW9yIGlmIHlvdSB0cnkgdG8K
KyAgICAgICAgYWRkL3JlbW92ZS9jb250YWlucyBhbiBvYmplY3QgdGhhdCBpc24ndCBpbiB0aGF0
IElzb1N1YnNwYWNlLiBGb3Igb2JqZWN0cyBpbiB0aGF0IHN1YnNwYWNlLAorICAgICAgICB5b3Ug
Y2FuIGFkZC9yZW1vdmUvY29udGFpbnMgYW5kIGZvckVhY2hNYXJrZWRDZWxsLiBUaGUgY29zdCBv
ZiBlYWNoIElzb0NlbGxTZXQgaXMgYXQgd29yc3QKKyAgICAgICAgYWJvdXQgMC44JSBpbmNyZWFz
ZSBpbiBzaXplIHRvIGV2ZXJ5IG9iamVjdCBpbiB0aGUgc3Vic3BhY2UgdGhhdCB0aGUgc2V0IGlz
IGF0dGFjaGVkIHRvLiBTbywKKyAgICAgICAgaXQgbWFrZXMgc2Vuc2UgdG8gaGF2ZSBhIGhhbmRm
dWwgcGVyIHN1YnNwYWNlIG1heC4gVGhpcyBjaGFuZ2Ugb25seSBuZWVkcyBvbmUgcGVyIHN1YnNw
YWNlLAorICAgICAgICBidXQgeW91IGNvdWxkIGltYWdpbmUgbW9yZSBpZiB3ZSBkbyB0aGlzIGZv
ciBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLgorICAgICAgICAKKyAgICAgICAgVG8gYWJzb2x1dGVs
eSBtaW5pbWl6ZSB0aGUgcG9zc2liaWxpdHkgdGhhdCB0aGlzIGluY3VycyBjb3N0cywgdGhlIGFk
ZC9yZW1vdmUvY29udGFpbnMKKyAgICAgICAgZnVuY3Rpb25zIGNhbiBiZSB1c2VkIGZyb20gYW55
IHRocmVhZCBzbyBsb25nIGFzIGZvckVhY2hNYXJrZWRDZWxsIGlzbid0IHJ1bm5pbmcuIFRoaXMg
bWVhbnMKKyAgICAgICAgdGhhdCBJbmZlcnJlZFR5cGUgb25seSBuZWVkcyB0byBhZGQgaXRzZWxm
IHRvIHRoZSBzZXQgZHVyaW5nIHZpc2l0Q2hpbGRyZW4uIFRodXMsIGl0IG5lZWRzIHRvCisgICAg
ICAgIGJvdGggc3Vydml2ZSBhbmQgbmVlZCBpdCBmb3IgdGhlIGhhcmRlc3Qgd29yayB0byB0YWtl
IHBsYWNlLiBUaGUgd29yayBvZiBhZGRpbmcgZG9lcyBpbnZvbHZlCisgICAgICAgIGEgZ25hcmx5
IGxvYWQgY2hhaW4gdGhhdCBlbmRzIGluIGEgQ0FTOiBsb2FkIGJsb2NrIGhhbmRsZSBmcm9tIGJs
b2NrLCBsb2FkIGluZGV4LCBsb2FkCisgICAgICAgIHNlZ21lbnQsIGxvYWQgYml0dmVjdG9yLCBs
b2FkIGJpdCAtPiBpZiBub3Qgc2V0LCB0aGVuIENBUy4gVGhhdCdzIGZpdmUgZGVwZW5kZW50IGxv
YWRzIQorICAgICAgICBIb3dldmVyLCBpdCdzIHBlcmZlY3QgZm9yIHJ1bm5pbmcgaW4gcGFyYWxs
ZWwgc2luY2UgdGhlIG9ubHkgd3JpdGUgb3BlcmF0aW9ucyBhcmUgdG8gd2lkZWx5CisgICAgICAg
IGRpc3BlcnNlZCBjYWNoZSBsaW5lcyB0aGF0IGNvbnRhaW4gdGhlIGJpdHMgdW5kZXJseWluZyB0
aGUgc2V0LgorICAgICAgICAKKyAgICAgICAgVGhlIGJlc3QgcGFydCBpcyBob3cgZm9yRWFjaE1h
cmtlZENlbGwgd29ya3MuIFRoYXQgc2tpcHMgYmxvY2tzIHRoYXQgZG9uJ3QgaGF2ZSBhbnkgb2Jq
ZWN0cworICAgICAgICB0aGF0IG5lZWQgdW5jb25kaXRpb25hbCBmaW5hbGl6ZXJzLCBhbmQgb25s
eSB0b3VjaGVzIHRoZSBtZW1vcnkgb2YgbWFya2VkIG9iamVjdHMgdGhhdCBoYXZlCisgICAgICAg
IHRoZSB1bmNvbmRpdGlvbmFsIGZpbmFsaXplciBiaXQgc2V0LiBJdCB3aWxsIHdhbGsgdGhvc2Ug
b2JqZWN0cyBpbiByb3VnaGx5IGFkZHJlc3Mgb3JkZXIuIEkKKyAgICAgICAgcHJldmlvdXNseSBm
b3VuZCB0aGF0IHRoaXMgc3BlZWRzIHVwIHdhbGtpbmcgb3ZlciBhIGxvdCBvZiBvYmplY3RzIHdo
ZW4gSSBtYWRlIHNpbWlsYXIgY2hhbmdlcworICAgICAgICBmb3IgRE9NIEdDIChjYWxsaW5nIHZp
c2l0QWRkaXRpb25hbENoaWxkcmVuIHZpYSBmb3JFYWNoTWFya2VkQ2VsbCByYXRoZXIgdGhhbiBi
eSB3YWxraW5nIGEKKyAgICAgICAgSGFzaFNldCkuCisgICAgICAgIAorICAgICAgICBUaGlzIGNo
YW5nZSBtYWtlcyBJbmZlcnJlZFN0cnVjdHVyZSBiZSBhIG1hbGxvYyBvYmplY3QgYWdhaW4sIGJ1
dCBub3cgaXQncyBpbiBhbiBJc29IZWFwLgorICAgICAgICAKKyAgICAgICAgTXkgZXhwZWN0YXRp
b24gZm9yIHRoaXMgY2hhbmdlIGlzIHRoYXQgaXQncyBwZXJmLW5ldXRyYWwuIExvbmctdGVybSwg
aXQgZ2l2ZXMgdXMgYSBwYXRoCisgICAgICAgIGZvcndhcmQgZm9yIGVsaW1pbmF0aW5nIFVuY29u
ZGl0aW9uYWxGaW5hbGl6ZXIgYW5kIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIgd2hpbGUgdXNpbmcK
KyAgICAgICAgSXNvU3Vic3BhY2UgaW4gbW9yZSBwbGFjZXMuCisKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIGhlYXAvQXRvbUluZGljZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkF0
b21JbmRpY2VzOjpBdG9tSW5kaWNlcyk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAg
ICAgKEpTQzo6SGVhcDo6ZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycyk6CisgICAgICAg
ICogaGVhcC9IZWFwLmg6CisgICAgICAgICogaGVhcC9Jc29DZWxsU2V0LmNwcDogQWRkZWQuCisg
ICAgICAgIChKU0M6Oklzb0NlbGxTZXQ6Oklzb0NlbGxTZXQpOgorICAgICAgICAoSlNDOjpJc29D
ZWxsU2V0Ojp+SXNvQ2VsbFNldCk6CisgICAgICAgIChKU0M6Oklzb0NlbGxTZXQ6OmFkZFNsb3cp
OgorICAgICAgICAoSlNDOjpJc29DZWxsU2V0OjpkaWRSZXNpemVCaXRzKToKKyAgICAgICAgKEpT
Qzo6SXNvQ2VsbFNldDo6ZGlkUmVtb3ZlQmxvY2spOgorICAgICAgICAoSlNDOjpJc29DZWxsU2V0
Ojpzd2VlcFRvRnJlZUxpc3QpOgorICAgICAgICAqIGhlYXAvSXNvQ2VsbFNldC5oOiBBZGRlZC4K
KyAgICAgICAgKiBoZWFwL0lzb0NlbGxTZXRJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlND
OjpJc29DZWxsU2V0OjphZGQpOgorICAgICAgICAoSlNDOjpJc29DZWxsU2V0OjpyZW1vdmUpOgor
ICAgICAgICAoSlNDOjpJc29DZWxsU2V0Ojpjb250YWlucyBjb25zdCk6CisgICAgICAgIChKU0M6
Oklzb0NlbGxTZXQ6OmZvckVhY2hNYXJrZWRDZWxsKToKKyAgICAgICAgKiBoZWFwL0lzb1N1YnNw
YWNlLmNwcDoKKyAgICAgICAgKEpTQzo6SXNvU3Vic3BhY2U6OmRpZFJlc2l6ZUJpdHMpOgorICAg
ICAgICAoSlNDOjpJc29TdWJzcGFjZTo6ZGlkUmVtb3ZlQmxvY2spOgorICAgICAgICAoSlNDOjpJ
c29TdWJzcGFjZTo6ZGlkQmVnaW5Td2VlcGluZ1RvRnJlZUxpc3QpOgorICAgICAgICAqIGhlYXAv
SXNvU3Vic3BhY2UuaDoKKyAgICAgICAgKiBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHA6CisgICAg
ICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWRkQmxvY2spOgorICAgICAgICAoSlNDOjpNYXJr
ZWRBbGxvY2F0b3I6OnJlbW92ZUJsb2NrKToKKyAgICAgICAgKiBoZWFwL01hcmtlZEFsbG9jYXRv
ci5oOgorICAgICAgICAqIGhlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oOgorICAgICAgICAq
IGhlYXAvTWFya2VkQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxl
Ojpzd2VlcCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzRW1wdHkpOiBE
ZWxldGVkLgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suaDoKKyAgICAgICAgKEpTQzo6TWFy
a2VkQmxvY2s6Om1hcmtzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRs
ZTo6bmV3bHlBbGxvY2F0ZWQgY29uc3QpOgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2tJbmxp
bmVzLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzQWxsb2NhdGVkKToK
KyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6aXNFbXB0eSk6CisgICAgICAgIChK
U0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OmVtcHR5TW9kZSk6CisgICAgICAgIChKU0M6Ok1hcmtl
ZEJsb2NrOjpIYW5kbGU6OmZvckVhY2hNYXJrZWRDZWxsKToKKyAgICAgICAgKiBoZWFwL1N1YnNw
YWNlLmNwcDoKKyAgICAgICAgKEpTQzo6U3Vic3BhY2U6OmRpZFJlc2l6ZUJpdHMpOgorICAgICAg
ICAoSlNDOjpTdWJzcGFjZTo6ZGlkUmVtb3ZlQmxvY2spOgorICAgICAgICAoSlNDOjpTdWJzcGFj
ZTo6ZGlkQmVnaW5Td2VlcGluZ1RvRnJlZUxpc3QpOgorICAgICAgICAqIGhlYXAvU3Vic3BhY2Uu
aDoKKyAgICAgICAgKiBoZWFwL1N1YnNwYWNlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTdWJz
cGFjZTo6Zm9yRWFjaE1hcmtlZENlbGwpOgorICAgICAgICAqIHJ1bnRpbWUvSW5mZXJyZWRTdHJ1
Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFN0cnVjdHVyZTo6SW5mZXJyZWRTdHJ1
Y3R1cmUpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFN0cnVjdHVyZTo6Y3JlYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6SW5mZXJyZWRTdHJ1Y3R1cmU6OmRlc3Ryb3kpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpJbmZlcnJlZFN0cnVjdHVyZTo6Y3JlYXRlU3RydWN0dXJlKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6SW5mZXJyZWRTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4pOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpJbmZlcnJlZFN0cnVjdHVyZTo6ZmluYWxpemVVbmNvbmRpdGlv
bmFsbHkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmZlcnJlZFN0cnVjdHVyZTo6ZmluaXNo
Q3JlYXRpb24pOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1cmUu
aDoKKyAgICAgICAgKiBydW50aW1lL0luZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludC5jcHA6Cisg
ICAgICAgIChKU0M6OkluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKToK
KyAgICAgICAgKiBydW50aW1lL0luZmVycmVkVHlwZS5jcHA6CisgICAgICAgIChKU0M6OkluZmVy
cmVkVHlwZTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlwZTo6d2ls
bFN0b3JlVmFsdWVTbG93KToKKyAgICAgICAgKEpTQzo6SW5mZXJyZWRUeXBlOjptYWtlVG9wU2xv
dyk6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlwZTo6c2V0KToKKyAgICAgICAgKEpTQzo6SW5m
ZXJyZWRUeXBlOjpyZW1vdmVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6
OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KToKKyAgICAgICAgKiBydW50aW1lL0luZmVycmVkVHlw
ZS5oOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgor
ICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKwogMjAxNy0xMi0xMSAgU2FhbSBCYXJhdGkgIDxzYmFy
YXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBXZSBuZWVkIHRvIGRpc2FibGVDYWNoaW5nKCkgaW4g
RXJyb3JJbnN0YW5jZSB3aGVuIHdlIG1hdGVyaWFsaXplIHByb3BlcnRpZXMKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDIyNTc3MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNDk1LDYgKzQ5NSw3IEBAIGhl
YXAvSGVhcFNuYXBzaG90LmNwcAogaGVhcC9IZWFwU25hcHNob3RCdWlsZGVyLmNwcAogaGVhcC9J
bmNyZW1lbnRhbFN3ZWVwZXIuY3BwCiBoZWFwL0lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3Bw
CitoZWFwL0lzb0NlbGxTZXQuY3BwCiBoZWFwL0lzb1N1YnNwYWNlLmNwcAogaGVhcC9KSVRTdHVi
Um91dGluZVNldC5jcHAKIGhlYXAvTGFyZ2VBbGxvY2F0aW9uLmNwcApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyNTc3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC00NzQsNiArNDc0LDEwIEBACiAJCTBGQjE3NjYzMTk2QjhGOUUwMDkxMDUyQSAvKiBE
RkdQdXJlVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGQjE3NjVGMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuaCAqLzsgfTsKIAkJ
MEZCMzg3OEUxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpckJsb2NrV29ya2xpc3QuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjM4NzhCMUJGQkM0NEQwMEUz
QUIxRSAvKiBBaXJCbG9ja1dvcmtsaXN0LmggKi87IH07CiAJCTBGQjM4NzkwMUJGQkM0NEQwMEUz
QUIxRSAvKiBBaXJPcHRpbWl6ZUJsb2NrT3JkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjM4NzhEMUJGQkM0NEQwMEUzQUIxRSAvKiBBaXJPcHRp
bWl6ZUJsb2NrT3JkZXIuaCAqLzsgfTsKKwkJMEZCNDY3N0YxRkREQTZFOTAwM0ZDQjA5IC8qIEF0
b21JbmRpY2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkI0Njc3RTFGRERBNkU1MDAzRkNCMDkgLyogQXRvbUluZGljZXMuaCAqLzsgfTsKKwkJMEZC
NDY3ODAxRkREQTZGMTAwM0ZDQjA5IC8qIElzb0NlbGxTZXQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjQ2NzdEMUZEREE2RDkwMDNGQ0IwOSAvKiBJ
c29DZWxsU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEZCNDY3ODExRkREQTZGNzAwM0ZDQjA5IC8qIElzb0NlbGxTZXRJbmxpbmVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0Njc3QjFGRERB
NkQ4MDAzRkNCMDkgLyogSXNvQ2VsbFNldElubGluZXMuaCAqLzsgfTsKKwkJMEZCNDY3ODUxRkRG
QjQ1NDAwM0ZDQjA5IC8qIEluZmVycmVkVHlwZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjQ2Nzg0MUZERkI0NTIwMDNGQ0IwOSAvKiBJ
bmZlcnJlZFR5cGVJbmxpbmVzLmggKi87IH07CiAJCTBGQjQ3NjdFMUQ5OUFFQTkwMDhFQTZDQiAv
KiBHQ0RlZmVycmFsQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZCNDc2N0MxRDk5QUVBNzAwOEVBNkNCIC8qIEdDRGVmZXJyYWxDb250ZXh0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZC
NDc2N0YxRDk5QUVBRDAwOEVBNkNCIC8qIEdDRGVmZXJyYWxDb250ZXh0SW5saW5lcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNDc2N0QxRDk5QUVB
NzAwOEVBNkNCIC8qIEdDRGVmZXJyYWxDb250ZXh0SW5saW5lcy5oICovOyB9OwogCQkwRkI0RkI3
NDFCQzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0RkI3MTFCQzg0MzE0MDAyNUNBNUEgLyog
RlRMTGF6eVNsb3dQYXRoLmggKi87IH07CkBAIC0yNTYyLDYgKzI1NjYsMTEgQEAKIAkJMEZCMzg3
OTExQkZEMzFBMTAwRTNBQjFFIC8qIEZUTENvbXBpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gRlRMQ29tcGlsZS5jcHA7IHBhdGggPSBmdGwvRlRMQ29tcGlsZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjQxNTgzMUQ3OEY5ODIwMERGOEQw
OSAvKiBBcnJheUNvbnZlbnRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEFycmF5Q29udmVudGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkI0MzhBMjE5MjcwQjFEMDBFMUZCQzkgLyogU3RydWN0dXJlU2V0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cnVjdHVyZVNldC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGQjQ2NzdCMUZEREE2RDgwMDNGQ0IwOSAvKiBJc29DZWxsU2V0
SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJc29DZWxsU2V0SW5s
aW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI0Njc3QzFGRERBNkQ5MDAz
RkNCMDkgLyogSXNvQ2VsbFNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBJc29DZWxsU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCNDY3
N0QxRkREQTZEOTAwM0ZDQjA5IC8qIElzb0NlbGxTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSXNvQ2VsbFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkI0Njc3RTFGRERBNkU1MDAzRkNCMDkgLyogQXRvbUluZGljZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQXRvbUluZGljZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZCNDY3ODQxRkRGQjQ1MjAwM0ZDQjA5IC8qIEluZmVycmVkVHlwZUlubGluZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5mZXJyZWRUeXBlSW5saW5lcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0NzY3QzFEOTlBRUE3MDA4RUE2Q0IgLyog
R0NEZWZlcnJhbENvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR0NE
ZWZlcnJhbENvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNDc2N0Qx
RDk5QUVBNzAwOEVBNkNCIC8qIEdDRGVmZXJyYWxDb250ZXh0SW5saW5lcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBHQ0RlZmVycmFsQ29udGV4dElubGluZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNEI1MTAxNkIzQTk2NDAwM0Y2OTZCIC8qIERGR01p
bmlmaWVkSUQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTWluaWZpZWRJ
RC5oOyBwYXRoID0gZGZnL0RGR01pbmlmaWVkSUQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTU1MjUsNiArNTUzNCw3IEBACiAJCQkJMEY5NjMwMzUxRDQxOTJDMzAwNTYwOUQ5IC8q
IEFsbG9jYXRvckF0dHJpYnV0ZXMuY3BwICovLAogCQkJCTBGOTYzMDM2MUQ0MTkyQzMwMDU2MDlE
OSAvKiBBbGxvY2F0b3JBdHRyaWJ1dGVzLmggKi8sCiAJCQkJMEYzMENCNUQxRkNFNDZCNDAwNEI1
MzIzIC8qIEFsbG9jYXRvckZvck1vZGUuaCAqLywKKwkJCQkwRkI0Njc3RTFGRERBNkU1MDAzRkNC
MDkgLyogQXRvbUluZGljZXMuaCAqLywKIAkJCQkwRkRFODdGODFERkQwQzZEMDA2NEMzOTAgLyog
Q2VsbENvbnRhaW5lci5jcHAgKi8sCiAJCQkJMEYwNzBBNDIxRDU0M0E4OTAwNkU3MjMyIC8qIENl
bGxDb250YWluZXIuaCAqLywKIAkJCQkwRjA3MEE0MzFENTQzQTg5MDA2RTcyMzIgLyogQ2VsbENv
bnRhaW5lcklubGluZXMuaCAqLywKQEAgLTU2MTEsNiArNTYyMSw5IEBACiAJCQkJQzI1RjhCQ0Mx
NTc1NDRBOTAwMjQ1QjcxIC8qIEluY3JlbWVudGFsU3dlZXBlci5oICovLAogCQkJCTBGRENFMTJG
MUZCMTFEOUQwMDZGMzkwMSAvKiBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcCAqLywKIAkJ
CQkwRkRDRTEzMDFGQjExRDlEMDA2RjM5MDEgLyogSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5o
ICovLAorCQkJCTBGQjQ2NzdDMUZEREE2RDkwMDNGQ0IwOSAvKiBJc29DZWxsU2V0LmNwcCAqLywK
KwkJCQkwRkI0Njc3RDFGRERBNkQ5MDAzRkNCMDkgLyogSXNvQ2VsbFNldC5oICovLAorCQkJCTBG
QjQ2NzdCMUZEREE2RDgwMDNGQ0IwOSAvKiBJc29DZWxsU2V0SW5saW5lcy5oICovLAogCQkJCTBG
RENFMTJDMUZBRkI0REUwMDZGMzkwMSAvKiBJc29TdWJzcGFjZS5jcHAgKi8sCiAJCQkJMEZEQ0Ux
MkIxRkFGQjRERTAwNkYzOTAxIC8qIElzb1N1YnNwYWNlLmggKi8sCiAJCQkJMEY3NjZEMjkxNUE4
Q0MzNDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmNwcCAqLywKQEAgLTY0ODYsNiArNjQ5
OSw3IEBACiAJCQkJMEZCRjkyQjcxRkQ3NkZGQzAwQUMyOEE4IC8qIEluZmVycmVkU3RydWN0dXJl
V2F0Y2hwb2ludC5oICovLAogCQkJCTBGMEE3NTIwMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJl
ZFR5cGUuY3BwICovLAogCQkJCTBGMEE3NTIxMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5
cGUuaCAqLywKKwkJCQkwRkI0Njc4NDFGREZCNDUyMDAzRkNCMDkgLyogSW5mZXJyZWRUeXBlSW5s
aW5lcy5oICovLAogCQkJCTBGRkM5MjBGMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVU
YWJsZS5jcHAgKi8sCiAJCQkJMEZGQzkyMTAxQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlw
ZVRhYmxlLmggKi8sCiAJCQkJMEZGOEJERTgxQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVkVmFs
dWUuY3BwICovLApAQCAtNzk5Nyw2ICs4MDExLDcgQEAKIAkJCQkwRkVDODU3MjFCREFDREM3MDA4
MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQzYzQkMxRTYz
NDQwQzAwQzEzODM5IC8qIEFpckJsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkIzODc4RTFCRkJDNDREMDBFM0FCMUUgLyogQWlyQmxvY2tXb3JrbGlzdC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZCNDY3ODExRkREQTZGNzAwM0ZDQjA5IC8qIElzb0NlbGxTZXRJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc5QzdDQTFFNzRDOTNCMDBFQjM0RDEgLyogQWlyQnJl
YWtDcml0aWNhbEVkZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYxODMyQTFDNDVCRjA3MDA3
MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVD
ODU3NDFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggaW4gSGVhZGVycyAqLywK
QEAgLTg3NzgsNiArODc5Myw3IEBACiAJCQkJNzAxMTNENEMxQThEQjA5MzAwMzg0OEM0IC8qIEl0
ZXJhdG9yT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzBEQzNFMEExQjJERjJDNzAw
MDU0Mjk5IC8qIEl0ZXJhdG9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQx
MzBFMTZGNUNEMDBCMzQ0NjAgLyogSmF2YVNjcmlwdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZC
NDY3ODUxRkRGQjQ1NDAwM0ZDQjA5IC8qIEluZmVycmVkVHlwZUlubGluZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE1MDNGQTFBMTg4RTBGQjAwMDExMEYxNCAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1l
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNDBFMTZGNUNEMDBCMzQ0NjAgLyogSmF2YVNj
cmlwdENvcmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDE1MEUxNkY1Q0QwMEIzNDQ2MCAv
KiBKYXZhU2NyaXB0Q29yZVByZWZpeC5oIGluIEhlYWRlcnMgKi8sCkBAIC04OTczLDYgKzg5ODks
NyBAQAogCQkJCUFEMkZDQkU1MURCNThEQUQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUFERTgwMjk5MUUwOEYxREUwMDU4REU3OCAvKiBKU1dl
YkFzc2VtYmx5TGlua0Vycm9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JFNzFEQjU4REFE
MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseU1lbW9yeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZC
NDY3N0YxRkREQTZFOTAwM0ZDQjA5IC8qIEF0b21JbmRpY2VzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBRDJGQ0MwNTFEQjU4REFEMDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseU1vZHVsZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQUQyRkNCRTkxREI1OERBRDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlS
dW50aW1lRXJyb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQkVCMURCNThEQUQwMEIzRTcz
NiAvKiBKU1dlYkFzc2VtYmx5VGFibGUuaCBpbiBIZWFkZXJzICovLApAQCAtOTI1OSw2ICs5Mjc2
LDcgQEAKIAkJCQlDMjBCQTkyRDE2QkIxQzE1MDBCM0FFQTIgLyogU3RydWN0dXJlUmFyZURhdGFJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkzMzJBNTE0Q0E3REREMDA4NUYzQzYgLyog
U3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc2NkQzOTE1QUU0QTFGMDA4RjM2
M0UgLyogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEZCNDY3ODAxRkREQTZGMTAwM0ZDQjA5IC8qIElzb0NlbGxTZXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDQ0YwRDA4MEVGMEFBQjkwMDQxM0M4RiAvKiBTdHJ1Y3R1cmVTdHViSW5mby5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkM5MDQxNDgwRUI5MjUwOTAwRkUyNkZBIC8qIFN0cnVjdHVyZVRy
YW5zaXRpb25UYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3REYxMzcxRTI5NzBFMTAwOTU5
NTFCIC8qIFN1YnNwYWNlLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0F0b21JbmRpY2VzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQXRvbUluZGljZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9BdG9tSW5kaWNlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsKKworc3Ry
dWN0IEF0b21JbmRpY2VzIHsKKyAgICBBdG9tSW5kaWNlcygpIHsgfQorICAgIAorICAgIEF0b21J
bmRpY2VzKEhlYXBDZWxsKiBjZWxsKQorICAgICAgICA6IGJsb2NrKE1hcmtlZEJsb2NrOjpibG9j
a0ZvcihjZWxsKSkKKyAgICAgICAgLCBibG9ja0luZGV4KGJsb2NrLT5oYW5kbGUoKS5pbmRleCgp
KQorICAgICAgICAsIGF0b21OdW1iZXIoYmxvY2stPmF0b21OdW1iZXIoY2VsbCkpCisgICAgewor
ICAgIH0KKyAgICAKKyAgICBNYXJrZWRCbG9jayogYmxvY2s7CisgICAgc2l6ZV90IGJsb2NrSW5k
ZXg7CisgICAgc2l6ZV90IGF0b21OdW1iZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIyNTc3MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MCw4ICs0MCw5IEBACiAjaW5jbHVkZSAiSGVhcFNuYXBzaG90LmgiCiAjaW5jbHVkZSAiSGVhcFZl
cmlmaWVyLmgiCiAjaW5jbHVkZSAiSW5jcmVtZW50YWxTd2VlcGVyLmgiCi0jaW5jbHVkZSAiSW5m
ZXJyZWRTdHJ1Y3R1cmUuaCIKKyNpbmNsdWRlICJJbmZlcnJlZFR5cGVJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiSW50ZXJwcmV0ZXIuaCIKKyNpbmNsdWRlICJJc29DZWxsU2V0SW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkpJVFN0dWJSb3V0aW5lU2V0LmgiCiAjaW5jbHVkZSAiSklUV29ya2xpc3QuaCIKICNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCkBAIC01NTIsMTggKzU1MywxOCBAQCB2b2lkIEhlYXA6OmFk
ZFJlZmVyZW5jZShKU0NlbGwqIGNlbGwsIEFyCiAgICAgfQogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBDZWxsVHlwZT4KLXZvaWQgSGVhcDo6ZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycyhT
dWJzcGFjZSYgc3Vic3BhY2UpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgdHlwZW5hbWUg
Q2VsbFNldD4KK3ZvaWQgSGVhcDo6ZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycyhDZWxs
U2V0JiBjZWxsU2V0KQogewotICAgIHN1YnNwYWNlLmZvckVhY2hNYXJrZWRDZWxsKAorICAgIGNl
bGxTZXQuZm9yRWFjaE1hcmtlZENlbGwoCiAgICAgICAgIFsmXSAoSGVhcENlbGwqIGNlbGwsIEhl
YXBDZWxsOjpLaW5kKSB7Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxDZWxsVHlwZSo+KGNlbGwp
LT5maW5hbGl6ZVVuY29uZGl0aW9uYWxseSgqdm0oKSk7CisgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Q2VsbFR5cGUqPihjZWxsKS0+ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKnZtKCkp
OwogICAgICAgICB9KTsKIH0KIAogdm9pZCBIZWFwOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5h
bGl6ZXJzKCkKIHsKLSAgICBmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzPEluZmVycmVk
U3RydWN0dXJlPih2bSgpLT5pbmZlcnJlZFN0cnVjdHVyZVNwYWNlKTsKKyAgICBmaW5hbGl6ZVVu
Y29uZGl0aW9uYWxGaW5hbGl6ZXJzPEluZmVycmVkVHlwZT4odm0oKS0+aW5mZXJyZWRUeXBlc1dp
dGhGaW5hbGl6ZXJzKTsKICAgICAKICAgICB3aGlsZSAobV91bmNvbmRpdGlvbmFsRmluYWxpemVy
cy5oYXNOZXh0KCkpIHsKICAgICAgICAgVW5jb25kaXRpb25hbEZpbmFsaXplciogZmluYWxpemVy
ID0gbV91bmNvbmRpdGlvbmFsRmluYWxpemVycy5yZW1vdmVOZXh0KCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyMjU3NzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5Niw4ICs0OTYsOCBAQCBwcml2
YXRlOgogICAgIHZvaWQgbm90aWZ5SW5jcmVtZW50YWxTd2VlcGVyKCk7CiAgICAgdm9pZCBoYXJ2
ZXN0V2Vha1JlZmVyZW5jZXMoKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlPgot
ICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycyhTdWJzcGFjZSYpOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCB0eXBlbmFtZSBDZWxsU2V0PgorICAgIHZvaWQg
ZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycyhDZWxsU2V0Jik7CiAgICAgCiAgICAgdm9p
ZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKCk7CiAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSXNvQ2VsbFNldC5oIgorCisjaW5j
bHVkZSAiTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5s
aW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworSXNvQ2VsbFNldDo6SXNvQ2VsbFNldChJc29T
dWJzcGFjZSYgc3Vic3BhY2UpCisgICAgOiBtX3N1YnNwYWNlKHN1YnNwYWNlKQoreworICAgIHNp
emVfdCBzaXplID0gc3Vic3BhY2UubV9hbGxvY2F0b3IubV9ibG9ja3Muc2l6ZSgpOworICAgIG1f
YmxvY2tzV2l0aEJpdHMucmVzaXplKHNpemUpOworICAgIG1fYml0cy5ncm93KHNpemUpOworICAg
IHN1YnNwYWNlLm1fY2VsbFNldHMuYXBwZW5kKHRoaXMpOworfQorCitJc29DZWxsU2V0Ojp+SXNv
Q2VsbFNldCgpCit7CisgICAgaWYgKGlzT25MaXN0KCkpCisgICAgICAgIEJhc2ljUmF3U2VudGlu
ZWxOb2RlPElzb0NlbGxTZXQ+OjpyZW1vdmUoKTsKK30KKworTkVWRVJfSU5MSU5FIEJpdG1hcDxN
YXJrZWRCbG9jazo6YXRvbXNQZXJCbG9jaz4qIElzb0NlbGxTZXQ6OmFkZFNsb3coc2l6ZV90IGJs
b2NrSW5kZXgpCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3N1YnNwYWNlLm1fYWxs
b2NhdG9yLm1fYml0dmVjdG9yTG9jayk7CisgICAgYXV0byYgYml0c1B0clJlZiA9IG1fYml0c1ti
bG9ja0luZGV4XTsKKyAgICBhdXRvKiBiaXRzID0gYml0c1B0clJlZi5nZXQoKTsKKyAgICBpZiAo
IWJpdHMpIHsKKyAgICAgICAgYml0c1B0clJlZiA9IHN0ZDo6bWFrZV91bmlxdWU8Qml0bWFwPE1h
cmtlZEJsb2NrOjphdG9tc1BlckJsb2NrPj4oKTsKKyAgICAgICAgYml0cyA9IGJpdHNQdHJSZWYu
Z2V0KCk7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgIG1fYmxvY2tz
V2l0aEJpdHNbYmxvY2tJbmRleF0gPSB0cnVlOworICAgIH0KKyAgICByZXR1cm4gYml0czsKK30K
Kwordm9pZCBJc29DZWxsU2V0OjpkaWRSZXNpemVCaXRzKHNpemVfdCBuZXdTaXplKQoreworICAg
IG1fYmxvY2tzV2l0aEJpdHMucmVzaXplKG5ld1NpemUpOworICAgIG1fYml0cy5ncm93KG5ld1Np
emUpOworfQorCit2b2lkIElzb0NlbGxTZXQ6OmRpZFJlbW92ZUJsb2NrKHNpemVfdCBibG9ja0lu
ZGV4KQoreworICAgIG1fYmxvY2tzV2l0aEJpdHNbYmxvY2tJbmRleF0gPSBmYWxzZTsKKyAgICBt
X2JpdHNbYmxvY2tJbmRleF0gPSBudWxscHRyOworfQorCit2b2lkIElzb0NlbGxTZXQ6OnN3ZWVw
VG9GcmVlTGlzdChNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jaykKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVCghYmxvY2stPmlzQWxsb2NhdGVkKCkpOworICAgIAorICAgIGlmICghbV9ibG9ja3NXaXRo
Qml0c1tibG9jay0+aW5kZXgoKV0pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBXVEY6Omxv
YWRMb2FkRmVuY2UoKTsKKyAgICAKKyAgICBpZiAoIW1fYml0c1tibG9jay0+aW5kZXgoKV0pIHsK
KyAgICAgICAgZGF0YUxvZygiRkFUQUw6IGZvciBibG9jayBpbmRleCAiLCBibG9jay0+aW5kZXgo
KSwgIjpcbiIpOworICAgICAgICBkYXRhTG9nKCJCbG9ja3Mgd2l0aCBiaXRzIHNheXM6ICIsICEh
bV9ibG9ja3NXaXRoQml0c1tibG9jay0+aW5kZXgoKV0sICJcbiIpOworICAgICAgICBkYXRhTG9n
KCJCaXRzIHNheXM6ICIsIFJhd1BvaW50ZXIobV9iaXRzW2Jsb2NrLT5pbmRleCgpXS5nZXQoKSks
ICJcbiIpOworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAg
ICAKKyAgICBpZiAoYmxvY2stPmhhc0FueU5ld2x5QWxsb2NhdGVkKCkpIHsKKyAgICAgICAgbV9i
aXRzW2Jsb2NrLT5pbmRleCgpXS0+ZmlsdGVyKGJsb2NrLT5uZXdseUFsbG9jYXRlZCgpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChibG9jay0+aXNFbXB0eSgpIHx8IGJsb2Nr
LT5hcmVNYXJrc1N0YWxlKCkpIHsKKyAgICAgICAgbV9ibG9ja3NXaXRoQml0c1tibG9jay0+aW5k
ZXgoKV0gPSBmYWxzZTsKKyAgICAgICAgbV9iaXRzW2Jsb2NrLT5pbmRleCgpXSA9IG51bGxwdHI7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9iaXRzW2Jsb2NrLT5pbmRleCgp
XS0+ZmlsdGVyKGJsb2NrLT5ibG9jaygpLm1hcmtzKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXQuaAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4K
KyNpbmNsdWRlIDx3dGYvQ29uY3VycmVudFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0Qml0
VmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBIZWFwQ2VsbDsKK2NsYXNzIElz
b1N1YnNwYWNlOworCisvLyBDcmVhdGUgYSBzZXQgb2YgY2VsbHMgdGhhdCBhcmUgaW4gYW4gSXNv
U3Vic3BhY2UuIFRoaXMgYWxsb3dzIGNvbmN1cnJlbnQgTygxKSBzZXQgaW5zZXJ0aW9uIGFuZAor
Ly8gcmVtb3ZhbC4gRWFjaCBzdWNoIHNldCBzaG91bGQgYmUgdGhvdWdodCBvZiBhcyBhIDAuOCUg
aW5jcmVhc2UgaW4gb2JqZWN0IHNpemUgZm9yIG9iamVjdHMgaW4gdGhhdAorLy8gSXNvU3Vic3Bh
Y2UgKGl0J3MgbGlrZSBhZGRpbmcgMSBiaXQgZXZlcnkgMTYgYnl0ZXMsIG9yIDEgYml0IGV2ZXJ5
IDEyOCBiaXRzKS4KK2NsYXNzIElzb0NlbGxTZXQgOiBwdWJsaWMgQmFzaWNSYXdTZW50aW5lbE5v
ZGU8SXNvQ2VsbFNldD4geworcHVibGljOgorICAgIElzb0NlbGxTZXQoSXNvU3Vic3BhY2UmIHN1
YnNwYWNlKTsKKyAgICB+SXNvQ2VsbFNldCgpOworICAgIAorICAgIGJvb2wgYWRkKEhlYXBDZWxs
KiBjZWxsKTsKKyAgICAKKyAgICBib29sIHJlbW92ZShIZWFwQ2VsbCogY2VsbCk7CisgICAgCisg
ICAgYm9vbCBjb250YWlucyhIZWFwQ2VsbCogY2VsbCkgY29uc3Q7CisgICAgCisgICAgLy8gVGhp
cyB3aWxsIGhhdmUgdG8gZG8gYSBjb21iaW5lZCBzZWFyY2ggb3ZlciB3aGF0ZXZlciBTdWJzcGFj
ZTo6Zm9yRWFjaE1hcmtlZENlbGwgdXNlcyBhbmQKKyAgICAvLyBvdXIgbV9ibG9ja3NXaXRoQml0
cy4KKyAgICAvLyBOT1RFOiBJdCdzIGlsbGVnYWwgdG8gY2FsbCBhZGQoKSBvciByZW1vdmUoKSBj
b25jdXJyZW50bHkgdG8gdGhpcywgYnV0IHNlbGYtcmVtb3ZlKCkgd2lsbCB3b3JrLgorICAgIC8v
IEJ1dCBpdCdzIGJldHRlciBpZiB5b3UgcmV0dXJuIFJlbW92ZSBpbnN0ZWFkLgorICAgIGVudW0g
Y2xhc3MgRm9yRWFjaFJlc3VsdCB7CisgICAgICAgIENvbnRpbnVlLAorICAgICAgICBSZW1vdmVB
bmRDb250aW51ZSwKKyAgICB9OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9p
ZCBmb3JFYWNoTWFya2VkQ2VsbChjb25zdCBGdW5jJik7CisgICAgCitwcml2YXRlOgorICAgIGZy
aWVuZCBjbGFzcyBJc29TdWJzcGFjZTsKKyAgICAKKyAgICBCaXRtYXA8TWFya2VkQmxvY2s6OmF0
b21zUGVyQmxvY2s+KiBhZGRTbG93KHNpemVfdCBibG9ja0luZGV4KTsKKyAgICAKKyAgICB2b2lk
IGRpZFJlc2l6ZUJpdHMoc2l6ZV90IG5ld1NpemUpOworICAgIHZvaWQgZGlkUmVtb3ZlQmxvY2so
c2l6ZV90IGJsb2NrSW5kZXgpOworICAgIHZvaWQgc3dlZXBUb0ZyZWVMaXN0KE1hcmtlZEJsb2Nr
OjpIYW5kbGUqKTsKKyAgICAKKyAgICBJc29TdWJzcGFjZSYgbV9zdWJzcGFjZTsKKyAgICAKKyAg
ICAvLyBJZGVhOiBzd2VlcGluZyB0byBmcmVlLWxpc3QgY2xlYXJzIGJpdHMgZm9yIHRob3NlIGNl
bGxzIHRoYXQgd2VyZSBmcmVlLWxpc3RlZC4gVGhlIGZpcnN0IHRpbWUKKyAgICAvLyB3ZSBhZGQg
YSBjZWxsIGluIGEgYmxvY2ssIHRoYXQgYmxvY2sgZ2V0cyBhIGZyZWUtbGlzdC4gVW5sZXNzIHdl
IGRvIHNvbWV0aGluZyB0aGF0IG9idmlvdXNseQorICAgIC8vIGNsZWFycyBhbGwgYml0cyBmb3Ig
YSBibG9jaywgd2Uga2VlcCBpdCBzZXQgaW4gYmxvY2tzV2l0aEJpdHMuCisgICAgCisgICAgRmFz
dEJpdFZlY3RvciBtX2Jsb2Nrc1dpdGhCaXRzOworICAgIENvbmN1cnJlbnRWZWN0b3I8c3RkOjp1
bmlxdWVfcHRyPEJpdG1hcDxNYXJrZWRCbG9jazo6YXRvbXNQZXJCbG9jaz4+PiBtX2JpdHM7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSXNvQ2VsbFNldElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Jc29DZWxsU2V0SW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkF0b21JbmRpY2VzLmgiCisjaW5jbHVkZSAiSXNv
Q2VsbFNldC5oIgorI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworaW5saW5lIGJvb2wgSXNvQ2VsbFNldDo6YWRkKEhlYXBDZWxsKiBjZWxsKQorewor
ICAgIEF0b21JbmRpY2VzIGF0b21JbmRpY2VzKGNlbGwpOworICAgIGF1dG8mIGJpdHNQdHJSZWYg
PSBtX2JpdHNbYXRvbUluZGljZXMuYmxvY2tJbmRleF07CisgICAgYXV0byogYml0cyA9IGJpdHNQ
dHJSZWYuZ2V0KCk7CisgICAgaWYgKFVOTElLRUxZKCFiaXRzKSkKKyAgICAgICAgYml0cyA9IGFk
ZFNsb3coYXRvbUluZGljZXMuYmxvY2tJbmRleCk7CisgICAgcmV0dXJuICFiaXRzLT5jb25jdXJy
ZW50VGVzdEFuZFNldChhdG9tSW5kaWNlcy5hdG9tTnVtYmVyKTsKK30KKworaW5saW5lIGJvb2wg
SXNvQ2VsbFNldDo6cmVtb3ZlKEhlYXBDZWxsKiBjZWxsKQoreworICAgIEF0b21JbmRpY2VzIGF0
b21JbmRpY2VzKGNlbGwpOworICAgIGF1dG8mIGJpdHNQdHJSZWYgPSBtX2JpdHNbYXRvbUluZGlj
ZXMuYmxvY2tJbmRleF07CisgICAgYXV0byogYml0cyA9IGJpdHNQdHJSZWYuZ2V0KCk7CisgICAg
aWYgKCFiaXRzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGJpdHMtPmNvbmN1
cnJlbnRUZXN0QW5kQ2xlYXIoYXRvbUluZGljZXMuYXRvbU51bWJlcik7Cit9CisKK2lubGluZSBi
b29sIElzb0NlbGxTZXQ6OmNvbnRhaW5zKEhlYXBDZWxsKiBjZWxsKSBjb25zdAoreworICAgIEF0
b21JbmRpY2VzIGF0b21JbmRpY2VzKGNlbGwpOworICAgIGF1dG8qIGJpdHMgPSBtX2JpdHNbYXRv
bUluZGljZXMuYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgaWYgKGJpdHMpCisgICAgICAgIHJldHVy
biBiaXRzLT5nZXQoYXRvbUluZGljZXMuYXRvbU51bWJlcik7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgordm9pZCBJc29DZWxsU2V0Ojpmb3JFYWNoTWFy
a2VkQ2VsbChjb25zdCBGdW5jJiBmdW5jKQoreworICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2Nh
dG9yID0gbV9zdWJzcGFjZS5tX2FsbG9jYXRvcjsKKyAgICAoYWxsb2NhdG9yLm1fbWFya2luZ05v
dEVtcHR5ICYgbV9ibG9ja3NXaXRoQml0cykuZm9yRWFjaFNldEJpdCgKKyAgICAgICAgWyZdIChz
aXplX3QgYmxvY2tJbmRleCkgeworICAgICAgICAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogYmxv
Y2sgPSBhbGxvY2F0b3IubV9ibG9ja3NbYmxvY2tJbmRleF07CisKKyAgICAgICAgICAgIGF1dG8q
IGJpdHMgPSBtX2JpdHNbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBib29sIGhhZEJp
dHMgPSBmYWxzZTsKKyAgICAgICAgICAgIGJsb2NrLT5mb3JFYWNoTWFya2VkQ2VsbCgKKyAgICAg
ICAgICAgICAgICBbJl0gKHNpemVfdCBhdG9tTnVtYmVyLCBIZWFwQ2VsbCogY2VsbCwgSGVhcENl
bGw6OktpbmQga2luZCkgLT4gSXRlcmF0aW9uU3RhdHVzIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGJpdHMtPmdldChhdG9tTnVtYmVyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgRm9y
RWFjaFJlc3VsdCByZXN1bHQgPSBmdW5jKGNlbGwsIGtpbmQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgc3dpdGNoIChyZXN1bHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRm9y
RWFjaFJlc3VsdDo6Q29udGludWU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFkQml0
cyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlIEZvckVhY2hSZXN1bHQ6OlJlbW92ZUFuZENvbnRpbnVlOgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHMtPmNsZWFyKGF0b21OdW1iZXIpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJdGVyYXRp
b25TdGF0dXM6OkNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaWYg
KCFoYWRCaXRzKSB7CisgICAgICAgICAgICAgICAgbV9iaXRzW2Jsb2NrSW5kZXhdID0gbnVsbHB0
cjsKKyAgICAgICAgICAgICAgICBtX2Jsb2Nrc1dpdGhCaXRzW2Jsb2NrSW5kZXhdID0gZmFsc2U7
CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmNwcAkocmV2aXNp
b24gMjI1NzcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02Nyw1ICs2NywyOSBAQCB2b2lkKiBJc29TdWJzcGFjZTo6YWxs
b2NhdGVOb25WaXJ0dWFsKHNpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAordm9pZCBJc29TdWJz
cGFjZTo6ZGlkUmVzaXplQml0cyhzaXplX3QgYmxvY2tJbmRleCkKK3sKKyAgICBtX2NlbGxTZXRz
LmZvckVhY2goCisgICAgICAgIFsmXSAoSXNvQ2VsbFNldCogc2V0KSB7CisgICAgICAgICAgICBz
ZXQtPmRpZFJlc2l6ZUJpdHMoYmxvY2tJbmRleCk7CisgICAgICAgIH0pOworfQorCit2b2lkIElz
b1N1YnNwYWNlOjpkaWRSZW1vdmVCbG9jayhzaXplX3QgYmxvY2tJbmRleCkKK3sKKyAgICBtX2Nl
bGxTZXRzLmZvckVhY2goCisgICAgICAgIFsmXSAoSXNvQ2VsbFNldCogc2V0KSB7CisgICAgICAg
ICAgICBzZXQtPmRpZFJlbW92ZUJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICB9KTsKK30KKwor
dm9pZCBJc29TdWJzcGFjZTo6ZGlkQmVnaW5Td2VlcGluZ1RvRnJlZUxpc3QoTWFya2VkQmxvY2s6
OkhhbmRsZSogYmxvY2spCit7CisgICAgbV9jZWxsU2V0cy5mb3JFYWNoKAorICAgICAgICBbJl0g
KElzb0NlbGxTZXQqIHNldCkgeworICAgICAgICAgICAgc2V0LT5zd2VlcFRvRnJlZUxpc3QoYmxv
Y2spOworICAgICAgICB9KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuaAkocmV2aXNpb24gMjI1NzcwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMjcsMTAgKzI3LDEyIEBACiAKICNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3IuaCIKICNpbmNs
dWRlICJTdWJzcGFjZS5oIgorI2luY2x1ZGUgPHd0Zi9TaW5nbHlMaW5rZWRMaXN0V2l0aFRhaWwu
aD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I7
CitjbGFzcyBJc29DZWxsU2V0OwogCiBjbGFzcyBJc29TdWJzcGFjZSA6IHB1YmxpYyBTdWJzcGFj
ZSB7CiBwdWJsaWM6CkBAIC00Niw5ICs0OCwxNiBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCogYWxsb2NhdGVOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29u
dGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUp
OwogCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBJc29DZWxsU2V0OworICAgIAorICAgIHZv
aWQgZGlkUmVzaXplQml0cyhzaXplX3QgbmV3U2l6ZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRS
ZW1vdmVCbG9jayhzaXplX3QgYmxvY2tJbmRleCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRCZWdp
blN3ZWVwaW5nVG9GcmVlTGlzdChNYXJrZWRCbG9jazo6SGFuZGxlKikgb3ZlcnJpZGU7CisgICAg
CiAgICAgc2l6ZV90IG1fc2l6ZTsKICAgICBNYXJrZWRBbGxvY2F0b3IgbV9hbGxvY2F0b3I7CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I+IG1faXNvQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvcjsKKyAgICBTZW50aW5lbExpbmtlZExpc3Q8SXNvQ2VsbFNldCwgQmFz
aWNSYXdTZW50aW5lbE5vZGU8SXNvQ2VsbFNldD4+IG1fY2VsbFNldHM7CiB9OwogCiBpbmxpbmUg
TWFya2VkQWxsb2NhdG9yKiBJc29TdWJzcGFjZTo6YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXpl
X3Qgc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjI1NzcwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYxLDYgKzI2MSw3IEBAIHZvaWQgTWFya2VkQWxsb2NhdG9yOjphZGRCbG9jayhNYXJrZWRC
bG8KICAgICAgICAgICAgIEFTU0VSVChtX2Jsb2Nrcy5jYXBhY2l0eSgpID4gb2xkQ2FwYWNpdHkp
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2JpdHZlY3Rv
ckxvY2spOworICAgICAgICAgICAgc3Vic3BhY2UoKS0+ZGlkUmVzaXplQml0cyhtX2Jsb2Nrcy5j
YXBhY2l0eSgpKTsKICAgICAgICAgICAgIGZvckVhY2hCaXRWZWN0b3IoCiAgICAgICAgICAgICAg
ICAgbG9ja2VyLAogICAgICAgICAgICAgICAgIFsmXSAoRmFzdEJpdFZlY3RvciYgdmVjdG9yKSB7
CkBAIC0yOTAsNyArMjkxLDkgQEAgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OnJlbW92ZUJsb2NrKE1h
cmtlZAogewogICAgIEFTU0VSVChibG9jay0+YWxsb2NhdG9yKCkgPT0gdGhpcyk7CiAgICAgQVNT
RVJUKG1fYmxvY2tzW2Jsb2NrLT5pbmRleCgpXSA9PSBibG9jayk7Ci0KKyAgICAKKyAgICBzdWJz
cGFjZSgpLT5kaWRSZW1vdmVCbG9jayhibG9jay0+aW5kZXgoKSk7CisgICAgCiAgICAgbV9ibG9j
a3NbYmxvY2stPmluZGV4KCldID0gbnVsbHB0cjsKICAgICBtX2ZyZWVCbG9ja0luZGljZXMuYXBw
ZW5kKGJsb2NrLT5pbmRleCgpKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCShyZXZpc2lvbiAyMjU3NzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzgs
NiArMzgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgR0NEZWZlcnJhbENvbnRleHQ7CiBj
bGFzcyBIZWFwOworY2xhc3MgSXNvQ2VsbFNldDsKIGNsYXNzIE1hcmtlZFNwYWNlOwogY2xhc3Mg
TExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCkBAIC0xNjIsNiArMTYzLDcgQEAgcHVibGljOgogICAg
IHZvaWQgZHVtcEJpdHMoUHJpbnRTdHJlYW0mID0gV1RGOjpkYXRhRmlsZSgpKTsKICAgICAKIHBy
aXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIElzb0NlbGxTZXQ7CiAgICAgZnJpZW5kIGNsYXNzIE1h
cmtlZEJsb2NrOwogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlU2xv
d0Nhc2UoR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1v
ZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9ySW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFs
bG9jYXRvcklubGluZXMuaAkocmV2aXNpb24gMjI1NzcwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2
ICsyNyw3IEBACiAKICNpbmNsdWRlICJGcmVlTGlzdElubGluZXMuaCIKICNpbmNsdWRlICJNYXJr
ZWRBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJWTS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkocmV2aXNpb24g
MjI1NzcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMDEsMTEgKzMwMSw2IEBAIHNpemVfdCBNYXJrZWRCbG9jazo6bWFy
a0NvdW50KCkKICAgICByZXR1cm4gYXJlTWFya3NTdGFsZSgpID8gMCA6IG1fbWFya3MuY291bnQo
KTsKIH0KIAotYm9vbCBNYXJrZWRCbG9jazo6SGFuZGxlOjppc0VtcHR5KCkKLXsKLSAgICByZXR1
cm4gbV9hbGxvY2F0b3ItPmlzRW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzKTsKLX0KLQog
dm9pZCBNYXJrZWRCbG9jazo6Y2xlYXJIYXNBbnlNYXJrZWQoKQogewogICAgIG1fYmlhc2VkTWFy
a0NvdW50ID0gbV9tYXJrQ291bnRCaWFzOwpAQCAtNDAzLDExICszOTgsMTMgQEAgdm9pZCBNYXJr
ZWRCbG9jazo6SGFuZGxlOjpzd2VlcChGcmVlTGlzdAogICAgICAgICByZXR1cm47CiAKICAgICBS
RUxFQVNFX0FTU0VSVCghbV9pc0ZyZWVMaXN0ZWQpOwotICAgIFJFTEVBU0VfQVNTRVJUKCFtX2Fs
bG9jYXRvci0+aXNBbGxvY2F0ZWQoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzKSk7CisgICAgUkVM
RUFTRV9BU1NFUlQoIWlzQWxsb2NhdGVkKCkpOwogICAgIAogICAgIGlmIChzcGFjZSgpLT5pc01h
cmtpbmcoKSkKICAgICAgICAgYmxvY2soKS5tX2xvY2subG9jaygpOwogICAgIAorICAgIHN1YnNw
YWNlKCktPmRpZEJlZ2luU3dlZXBpbmdUb0ZyZWVMaXN0KHRoaXMpOworICAgIAogICAgIGlmIChu
ZWVkc0Rlc3RydWN0aW9uKSB7CiAgICAgICAgIHN1YnNwYWNlKCktPmZpbmlzaFN3ZWVwKCp0aGlz
LCBmcmVlTGlzdCk7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gMjI1NzcwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTYyLDYgKzE2Miw4
IEBAIHB1YmxpYzoKICAgICAgICAgc2l6ZV90IG1hcmtDb3VudCgpOwogICAgICAgICBzaXplX3Qg
c2l6ZSgpOwogICAgICAgICAKKyAgICAgICAgYm9vbCBpc0FsbG9jYXRlZCgpOworICAgICAgICAK
ICAgICAgICAgYm9vbCBpc0xpdmUoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIEhlYXBWZXJz
aW9uIG5ld2x5QWxsb2NhdGVkVmVyc2lvbiwgYm9vbCBpc01hcmtpbmcsIGNvbnN0IEhlYXBDZWxs
Kik7CiAgICAgICAgIGlubGluZSBib29sIGlzTGl2ZUNlbGwoSGVhcFZlcnNpb24gbWFya2luZ1Zl
cnNpb24sIEhlYXBWZXJzaW9uIG5ld2x5QWxsb2NhdGVkVmVyc2lvbiwgYm9vbCBpc01hcmtpbmcs
IGNvbnN0IHZvaWQqKTsKIApAQCAtMTczLDYgKzE3NSw3IEBAIHB1YmxpYzoKICAgICAgICAgYm9v
bCBpc05ld2x5QWxsb2NhdGVkKGNvbnN0IHZvaWQqKTsKICAgICAgICAgdm9pZCBzZXROZXdseUFs
bG9jYXRlZChjb25zdCB2b2lkKik7CiAgICAgICAgIHZvaWQgY2xlYXJOZXdseUFsbG9jYXRlZChj
b25zdCB2b2lkKik7CisgICAgICAgIGNvbnN0IEJpdG1hcDxhdG9tc1BlckJsb2NrPiYgbmV3bHlB
bGxvY2F0ZWQoKSBjb25zdDsKICAgICAgICAgCiAgICAgICAgIEhlYXBWZXJzaW9uIG5ld2x5QWxs
b2NhdGVkVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fbmV3bHlBbGxvY2F0ZWRWZXJzaW9uOyB9
CiAgICAgICAgIApAQCAtMjI3LDcgKzIzMCw3IEBAIHB1YmxpYzoKICAgICAgICAgc2l6ZV90IG1f
YXRvbXNQZXJDZWxsIHsgc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSB9OwogICAg
ICAgICBzaXplX3QgbV9lbmRBdG9tIHsgc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgo
KSB9OyAvLyBUaGlzIGlzIGEgZnV6enkgZW5kLiBBbHdheXMgdGVzdCBmb3IgPCBtX2VuZEF0b20u
CiAgICAgICAgICAgICAKLSAgICAgICAgV1RGOjpCaXRtYXA8YXRvbXNQZXJCbG9jaz4gbV9uZXds
eUFsbG9jYXRlZDsKKyAgICAgICAgQml0bWFwPGF0b21zUGVyQmxvY2s+IG1fbmV3bHlBbGxvY2F0
ZWQ7CiAgICAgICAgICAgICAKICAgICAgICAgQWxsb2NhdG9yQXR0cmlidXRlcyBtX2F0dHJpYnV0
ZXM7CiAgICAgICAgIGJvb2wgbV9pc0ZyZWVMaXN0ZWQgeyBmYWxzZSB9OwpAQCAtMjk0LDYgKzI5
Nyw4IEBAIHB1YmxpYzoKICAgICBib29sIGlzTWFya2VkUmF3KGNvbnN0IHZvaWQqIHApOwogICAg
IEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXJraW5nVmVy
c2lvbjsgfQogICAgIAorICAgIGNvbnN0IEJpdG1hcDxhdG9tc1BlckJsb2NrPiYgbWFya3MoKSBj
b25zdDsKKyAgICAKICAgICBDb3VudGluZ0xvY2smIGxvY2soKSB7IHJldHVybiBtX2xvY2s7IH0K
IAogcHJpdmF0ZToKQEAgLTM0Niw3ICszNTEsNyBAQCBwcml2YXRlOgogCiAgICAgSGVhcFZlcnNp
b24gbV9tYXJraW5nVmVyc2lvbjsKIAotICAgIFdURjo6Qml0bWFwPGF0b21zUGVyQmxvY2s+IG1f
bWFya3M7CisgICAgQml0bWFwPGF0b21zUGVyQmxvY2s+IG1fbWFya3M7CiB9OwogCiBpbmxpbmUg
TWFya2VkQmxvY2s6OkhhbmRsZSYgTWFya2VkQmxvY2s6OmhhbmRsZSgpCkBAIC01MzIsNiArNTM3
LDExIEBAIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjp0ZXN0QW5kU2V0TWFya2UKICAgICByZXR1
cm4gbV9tYXJrcy5jb25jdXJyZW50VGVzdEFuZFNldChhdG9tTnVtYmVyKHApLCBkZXBlbmRlbmN5
KTsKIH0KIAoraW5saW5lIGNvbnN0IEJpdG1hcDxNYXJrZWRCbG9jazo6YXRvbXNQZXJCbG9jaz4m
IE1hcmtlZEJsb2NrOjptYXJrcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbWFya3M7Cit9CisK
IGlubGluZSBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzTmV3bHlBbGxvY2F0ZWQoY29uc3Qg
dm9pZCogcCkKIHsKICAgICByZXR1cm4gbV9uZXdseUFsbG9jYXRlZC5nZXQobV9ibG9jay0+YXRv
bU51bWJlcihwKSk7CkBAIC01NDcsNiArNTU3LDExIEBAIGlubGluZSB2b2lkIE1hcmtlZEJsb2Nr
OjpIYW5kbGU6OmNsZWFyTmUKICAgICBtX25ld2x5QWxsb2NhdGVkLmNsZWFyKG1fYmxvY2stPmF0
b21OdW1iZXIocCkpOwogfQogCitpbmxpbmUgY29uc3QgQml0bWFwPE1hcmtlZEJsb2NrOjphdG9t
c1BlckJsb2NrPiYgTWFya2VkQmxvY2s6OkhhbmRsZTo6bmV3bHlBbGxvY2F0ZWQoKSBjb25zdAor
eworICAgIHJldHVybiBtX25ld2x5QWxsb2NhdGVkOworfQorCiBpbmxpbmUgYm9vbCBNYXJrZWRC
bG9jazo6aXNBdG9tKGNvbnN0IHZvaWQqIHApCiB7CiAgICAgQVNTRVJUKE1hcmtlZEJsb2NrOjpp
c0F0b21BbGlnbmVkKHApKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZEJsb2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZEJsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAyMjU3NzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtOTEs
NiArOTEsMTEgQEAgaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6Om1hcmtzQ29udmV5TGl2ZQogICAg
ICAgICB8fCBNYXJrZWRTcGFjZTo6bmV4dFZlcnNpb24obXlNYXJraW5nVmVyc2lvbikgPT0gbWFy
a2luZ1ZlcnNpb247CiB9CiAKK2lubGluZSBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzQWxs
b2NhdGVkKCkKK3sKKyAgICByZXR1cm4gbV9hbGxvY2F0b3ItPmlzQWxsb2NhdGVkKE5vTG9ja2lu
Z05lY2Vzc2FyeSwgdGhpcyk7Cit9CisKIEFMV0FZU19JTkxJTkUgYm9vbCBNYXJrZWRCbG9jazo6
SGFuZGxlOjppc0xpdmUoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIEhlYXBWZXJzaW9uIG5l
d2x5QWxsb2NhdGVkVmVyc2lvbiwgYm9vbCBpc01hcmtpbmcsIGNvbnN0IEhlYXBDZWxsKiBjZWxs
KQogewogICAgIGlmIChhbGxvY2F0b3IoKS0+aXNBbGxvY2F0ZWQoTm9Mb2NraW5nTmVjZXNzYXJ5
LCB0aGlzKSkKQEAgLTQzNCw2ICs0MzksMTEgQEAgaW5saW5lIE1hcmtlZEJsb2NrOjpIYW5kbGU6
OlN3ZWVwRGVzdHJ1YwogICAgIHJldHVybiBCbG9ja0hhc05vRGVzdHJ1Y3RvcnM7CiB9CiAKK2lu
bGluZSBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzRW1wdHkoKQoreworICAgIHJldHVybiBt
X2FsbG9jYXRvci0+aXNFbXB0eShOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMpOworfQorCiBpbmxp
bmUgTWFya2VkQmxvY2s6OkhhbmRsZTo6RW1wdHlNb2RlIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmVt
cHR5TW9kZSgpCiB7CiAgICAgLy8gSXQncyBub3Qgb2J2aW91cywgYnV0IHRoaXMgaXMgdGhlIG9u
bHkgd2F5IHRvIGtub3cgaWYgdGhlIGJsb2NrIGlzIGVtcHR5LiBJdCdzIHRoZSBvbmx5CkBAIC00
NDEsNyArNDUxLDcgQEAgaW5saW5lIE1hcmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBNYQog
ICAgIC8vIC0gSXQncyB0cnVlIHdoZW4gdGhlIGJsb2NrIGlzIGZyZXNobHkgYWxsb2NhdGVkLgog
ICAgIC8vIC0gSXQncyB0cnVlIGlmIHRoZSBibG9jayBoYWQgYmVlbiBzd2VwdCBpbiB0aGUgcGFz
dCwgYWxsIGRlc3RydWN0b3JzIHdlcmUgY2FsbGVkLCBhbmQgdGhhdAogICAgIC8vICAgc3dlZXAg
cHJvdmVkIHRoYXQgdGhlIGJsb2NrIGlzIGVtcHR5LgotICAgIHJldHVybiBtX2FsbG9jYXRvci0+
aXNFbXB0eShOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMpID8gSXNFbXB0eSA6IE5vdEVtcHR5Owor
ICAgIHJldHVybiBpc0VtcHR5KCkgPyBJc0VtcHR5IDogTm90RW1wdHk7CiB9CiAKIGlubGluZSBN
YXJrZWRCbG9jazo6SGFuZGxlOjpTY3JpYmJsZU1vZGUgTWFya2VkQmxvY2s6OkhhbmRsZTo6c2Ny
aWJibGVNb2RlKCkKQEAgLTUxMiwxMSArNTIyLDEyIEBAIGlubGluZSBJdGVyYXRpb25TdGF0dXMg
TWFya2VkQmxvY2s6OkhhbmQKICAgICBpZiAoYXJlTWFya3NTdGFsZSkKICAgICAgICAgcmV0dXJu
IEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CiAgICAgZm9yIChzaXplX3QgaSA9IGZpcnN0QXRv
bSgpOyBpIDwgbV9lbmRBdG9tOyBpICs9IG1fYXRvbXNQZXJDZWxsKSB7Ci0gICAgICAgIEhlYXBD
ZWxsKiBjZWxsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8SGVhcENlbGwqPigmbV9ibG9jay0+YXRv
bXMoKVtpXSk7Ci0gICAgICAgIGlmICghYmxvY2suaXNNYXJrZWRSYXcoY2VsbCkpCisgICAgICAg
IGlmICghYmxvY2subV9tYXJrcy5nZXQoaSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAg
ICAgICBpZiAoZnVuY3RvcihjZWxsLCBraW5kKSA9PSBJdGVyYXRpb25TdGF0dXM6OkRvbmUpCisg
ICAgICAgIEhlYXBDZWxsKiBjZWxsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8SGVhcENlbGwqPigm
bV9ibG9jay0+YXRvbXMoKVtpXSk7CisKKyAgICAgICAgaWYgKGZ1bmN0b3IoaSwgY2VsbCwga2lu
ZCkgPT0gSXRlcmF0aW9uU3RhdHVzOjpEb25lKQogICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlv
blN0YXR1czo6RG9uZTsKICAgICB9CiAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGlu
dWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuY3BwCShyZXZpc2lv
biAyMjU3NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEyNiw1ICsxMjYsMTcgQEAgUmVmUHRyPFNoYXJlZFRhc2s8TWFya2Vk
QmxvY2s6OkhhbmRsZSooKQogICAgICAgICB9KTsKIH0KIAordm9pZCBTdWJzcGFjZTo6ZGlkUmVz
aXplQml0cyhzaXplX3QpCit7Cit9CisKK3ZvaWQgU3Vic3BhY2U6OmRpZFJlbW92ZUJsb2NrKHNp
emVfdCkKK3sKK30KKwordm9pZCBTdWJzcGFjZTo6ZGlkQmVnaW5Td2VlcGluZ1RvRnJlZUxpc3Qo
TWFya2VkQmxvY2s6OkhhbmRsZSopCit7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHJldmlzaW9uIDIyNTc3MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTkzLDYgKzkzLDEwIEBAIHB1YmxpYzoKICAgICAKICAgICBTdWJzcGFjZSogbmV4dFN1YnNwYWNl
SW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9uZXh0U3Vic3BhY2VJ
bkFsaWduZWRNZW1vcnlBbGxvY2F0b3I7IH0KICAgICB2b2lkIHNldE5leHRTdWJzcGFjZUluQWxp
Z25lZE1lbW9yeUFsbG9jYXRvcihTdWJzcGFjZSogc3Vic3BhY2UpIHsgbV9uZXh0U3Vic3BhY2VJ
bkFsaWduZWRNZW1vcnlBbGxvY2F0b3IgPSBzdWJzcGFjZTsgfQorICAgIAorICAgIHZpcnR1YWwg
dm9pZCBkaWRSZXNpemVCaXRzKHNpemVfdCBuZXdTaXplKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
UmVtb3ZlQmxvY2soc2l6ZV90IGJsb2NrSW5kZXgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRCZWdp
blN3ZWVwaW5nVG9GcmVlTGlzdChNYXJrZWRCbG9jazo6SGFuZGxlKik7CiAKIHByb3RlY3RlZDoK
ICAgICB2b2lkIGluaXRpYWxpemUoSGVhcENlbGxUeXBlKiwgQWxpZ25lZE1lbW9yeUFsbG9jYXRv
ciopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVz
LmgJKHJldmlzaW9uIDIyNTc3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNw
YWNlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3IEBAIHZvaWQgU3Vic3Bh
Y2U6OmZvckVhY2hNYXJrZWRDZWxsKGNvbnN0IEYKICAgICBmb3JFYWNoTm90RW1wdHlNYXJrZWRC
bG9jaygKICAgICAgICAgWyZdIChNYXJrZWRCbG9jazo6SGFuZGxlKiBoYW5kbGUpIHsKICAgICAg
ICAgICAgIGhhbmRsZS0+Zm9yRWFjaE1hcmtlZENlbGwoCi0gICAgICAgICAgICAgICAgWyZdIChI
ZWFwQ2VsbCogY2VsbCwgSGVhcENlbGw6OktpbmQga2luZCkgLT4gSXRlcmF0aW9uU3RhdHVzIHsg
CisgICAgICAgICAgICAgICAgWyZdIChzaXplX3QsIEhlYXBDZWxsKiBjZWxsLCBIZWFwQ2VsbDo6
S2luZCBraW5kKSAtPiBJdGVyYXRpb25TdGF0dXMgewogICAgICAgICAgICAgICAgICAgICBmdW5j
KGNlbGwsIGtpbmQpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVz
OjpDb250aW51ZTsKICAgICAgICAgICAgICAgICB9KTsKQEAgLTk5LDcgKzk5LDcgQEAgUmVmUHRy
PFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gUwogICAgICAgICB7CiAgICAgICAgICAg
ICB3aGlsZSAoTWFya2VkQmxvY2s6OkhhbmRsZSogaGFuZGxlID0gbV9ibG9ja1NvdXJjZS0+cnVu
KCkpIHsKICAgICAgICAgICAgICAgICBoYW5kbGUtPmZvckVhY2hNYXJrZWRDZWxsKAotICAgICAg
ICAgICAgICAgICAgICBbJl0gKEhlYXBDZWxsKiBjZWxsLCBIZWFwQ2VsbDo6S2luZCBraW5kKSAt
PiBJdGVyYXRpb25TdGF0dXMgeworICAgICAgICAgICAgICAgICAgICBbJl0gKHNpemVfdCwgSGVh
cENlbGwqIGNlbGwsIEhlYXBDZWxsOjpLaW5kIGtpbmQpIC0+IEl0ZXJhdGlvblN0YXR1cyB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2Z1bmModmlzaXRvciwgY2VsbCwga2luZCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKICAg
ICAgICAgICAgICAgICAgICAgfSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbmZlcnJlZFN0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAyMjU3NzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFN0cnVjdHVyZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDY0ICsyNywxNyBAQAogI2luY2x1ZGUgIkluZmVycmVkU3RydWN0dXJl
LmgiCiAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lu
bGluZXMuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNvbnN0IENsYXNzSW5mbyBJbmZlcnJlZFN0
cnVjdHVyZTo6c19pbmZvID0geyAiSW5mZXJyZWRTdHJ1Y3R1cmUiLCBudWxscHRyLCBudWxscHRy
LCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEluZmVycmVkU3RydWN0dXJlKSB9OwotCi1J
bmZlcnJlZFN0cnVjdHVyZSogSW5mZXJyZWRTdHJ1Y3R1cmU6OmNyZWF0ZShWTSYgdm0sIEdDRGVm
ZXJyYWxDb250ZXh0JiBkZWZlcnJhbENvbnRleHQsIEluZmVycmVkVHlwZSogcGFyZW50LCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKLXsKLSAgICBJbmZlcnJlZFN0cnVjdHVyZSogcmVzdWx0ID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SW5mZXJyZWRTdHJ1Y3R1cmU+KHZtLmhlYXAsICZkZWZl
cnJhbENvbnRleHQpKSBJbmZlcnJlZFN0cnVjdHVyZSh2bSwgcGFyZW50LCBzdHJ1Y3R1cmUpOwot
ICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0sIHN0cnVjdHVyZSk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotdm9pZCBJbmZlcnJlZFN0cnVjdHVyZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwp
Ci17Ci0gICAgSW5mZXJyZWRTdHJ1Y3R1cmUqIGluZmVycmVkU3RydWN0dXJlID0gc3RhdGljX2Nh
c3Q8SW5mZXJyZWRTdHJ1Y3R1cmUqPihjZWxsKTsKLSAgICBpbmZlcnJlZFN0cnVjdHVyZS0+SW5m
ZXJyZWRTdHJ1Y3R1cmU6On5JbmZlcnJlZFN0cnVjdHVyZSgpOwotfQotCi1TdHJ1Y3R1cmUqIElu
ZmVycmVkU3RydWN0dXJlOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKLXsKLSAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotfQotCi12b2lkIEluZmVycmVkU3RydWN0dXJlOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAg
SW5mZXJyZWRTdHJ1Y3R1cmUqIGluZmVycmVkU3RydWN0dXJlID0ganNDYXN0PEluZmVycmVkU3Ry
dWN0dXJlKj4oY2VsbCk7Ci0gICAgCi0gICAgdmlzaXRvci5hcHBlbmQoaW5mZXJyZWRTdHJ1Y3R1
cmUtPm1fcGFyZW50KTsKLX0KLQotdm9pZCBJbmZlcnJlZFN0cnVjdHVyZTo6ZmluYWxpemVVbmNv
bmRpdGlvbmFsbHkoVk0mKQotewotICAgIEFTU0VSVChIZWFwOjppc01hcmtlZChtX3BhcmVudC5n
ZXQoKSkpOwotICAgIAotICAgIC8vIE1vbm90b25pY2l0eSBlbnN1cmVzIHRoYXQgd2Ugc2hvdWxk
bid0IHNlZSBhIG5ldyBzdHJ1Y3R1cmUgdGhhdCBpcyBkaWZmZXJlbnQgZnJvbSB1cywgYnV0IHdl
Ci0gICAgLy8gY291bGQgaGF2ZSBiZWVuIG51bGxlZC4gV2Ugb25seSByZWx5IG9uIGl0IGJlaW5n
IHRoZSBudWxsIGNhc2Ugb25seSBpbiBkZWJ1Zy4KLSAgICBpZiAodGhpcyA9PSBtX3BhcmVudC0+
bV9zdHJ1Y3R1cmUuZ2V0KCkpIHsKLSAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX3N0cnVj
dHVyZS5nZXQoKSkpCi0gICAgICAgICAgICBtX3BhcmVudC0+cmVtb3ZlU3RydWN0dXJlKCk7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIEFTU0VSVCghbV9wYXJlbnQtPm1fc3RydWN0dXJlKTsKLSAgICAK
LSAgICAvLyBXZSdsbCBnZXQgZGVsZXRlZCBvbiB0aGUgbmV4dCBHQy4gVGhhdCdzIGEgbGl0dGxl
IHdlaXJkLCBidXQgbm90IGhhcm1mdWwsIHNpbmNlIGl0IG9ubHkgaGFwcGVucwotICAgIC8vIHdo
ZW4gdGhlIEluZmVycmVkVHlwZSB0aGF0IHdlIHdlcmUgcGFpcmVkIHRvIHdvdWxkIGhhdmUgc3Vy
dml2ZWQuIEl0IGp1c3QgbWVhbnMgYSB0aW55IG1pc3NlZAotICAgIC8vIG9wcG9ydHVuaXR5IGZv
ciBoZWFwIHNpemUgcmVkdWN0aW9uLgotfQorV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKElu
ZmVycmVkU3RydWN0dXJlKTsKIAogSW5mZXJyZWRTdHJ1Y3R1cmU6OkluZmVycmVkU3RydWN0dXJl
KFZNJiB2bSwgSW5mZXJyZWRUeXBlKiBwYXJlbnQsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAg
IDogQmFzZSh2bSwgdm0uaW5mZXJyZWRTdHJ1Y3R1cmVTdHJ1Y3R1cmUuZ2V0KCkpCi0gICAgLCBt
X3BhcmVudCh2bSwgdGhpcywgcGFyZW50KQotICAgICwgbV9zdHJ1Y3R1cmUodm0sIHRoaXMsIHN0
cnVjdHVyZSkKLXsKLX0KLQotdm9pZCBJbmZlcnJlZFN0cnVjdHVyZTo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IHBhcmVudChwYXJlbnQpCisgICAg
LCBzdHJ1Y3R1cmUodm0sIHBhcmVudCwgc3RydWN0dXJlKQogewotICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKHZtKTsKLSAgICBzdHJ1Y3R1cmUtPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KCZtX3dh
dGNocG9pbnQpOworICAgIHN0cnVjdHVyZS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoJndhdGNo
cG9pbnQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0luZmVycmVkU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1cmUuaAkocmV2aXNpb24gMjI1Nzcw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1cmUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNTEgKzI2LDIzIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1
ZGUgIkluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludC5oIgotI2luY2x1ZGUgIkpTQ2VsbC5oIgot
I2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisjaW5jbHVkZSA8d3Rm
L0lzb01hbGxvYy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSW5mZXJyZWRUeXBlOwor
Y2xhc3MgU3RydWN0dXJlOwogCi1jbGFzcyBJbmZlcnJlZFN0cnVjdHVyZSBmaW5hbCA6IHB1Ymxp
YyBKU0NlbGwgeworY2xhc3MgSW5mZXJyZWRTdHJ1Y3R1cmUgZmluYWwgeworICAgIFdURl9NQUtF
X0lTT19BTExPQ0FURUQoSW5mZXJyZWRTdHJ1Y3R1cmUpOwogcHVibGljOgotICAgIHR5cGVkZWYg
SlNDZWxsIEJhc2U7Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGU+Ci0gICAg
c3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCi0gICAgewotICAgICAgICBy
ZXR1cm4gJnZtLmluZmVycmVkU3RydWN0dXJlU3BhY2U7Ci0gICAgfQotICAgIAotICAgIHN0YXRp
YyBJbmZlcnJlZFN0cnVjdHVyZSogY3JlYXRlKFZNJiwgR0NEZWZlcnJhbENvbnRleHQmLCBJbmZl
cnJlZFR5cGUqIHBhcmVudCwgU3RydWN0dXJlKik7Ci0gICAgCi0gICAgc3RhdGljIGNvbnN0IGJv
b2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7Ci0gICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0Nl
bGwqKTsKLSAgICAKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBT
dHJ1Y3R1cmVJc0ltbW9ydGFsIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7Ci0KLSAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUg
cHJvdG90eXBlKTsKLSAgICAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgCi0gICAgSW5mZXJyZWRU
eXBlKiBwYXJlbnQoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudC5nZXQoKTsgfQotICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7IH0KLSAg
ICAKLSAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJik7Ci0KLXByaXZhdGU6CiAg
ICAgSW5mZXJyZWRTdHJ1Y3R1cmUoVk0mLCBJbmZlcnJlZFR5cGUqIHBhcmVudCwgU3RydWN0dXJl
Kik7CisKKyAgICBJbmZlcnJlZFR5cGUqIHBhcmVudDsKKyAgICBXcml0ZUJhcnJpZXI8U3RydWN0
dXJlPiBzdHJ1Y3R1cmU7CiAgICAgCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFN0cnVj
dHVyZSopOwotICAgIAotICAgIFdyaXRlQmFycmllcjxJbmZlcnJlZFR5cGU+IG1fcGFyZW50Owot
ICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOwotICAgIAotICAgIGZyaWVu
ZCBjbGFzcyBJbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQ7Ci0gICAgSW5mZXJyZWRTdHJ1Y3R1
cmVXYXRjaHBvaW50IG1fd2F0Y2hwb2ludDsKKyAgICBJbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9p
bnQgd2F0Y2hwb2ludDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFN0cnVjdHVy
ZVdhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAyMjU3NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNCwxMiArMzQsMTQgQEAgdm9pZCBJbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQ6OmZp
cmVJbgogewogICAgIEluZmVycmVkU3RydWN0dXJlKiBpbmZlcnJlZFN0cnVjdHVyZSA9CiAgICAg
ICAgIGJpdHdpc2VfY2FzdDxJbmZlcnJlZFN0cnVjdHVyZSo+KAotICAgICAgICAgICAgYml0d2lz
ZV9jYXN0PGNoYXIqPih0aGlzKSAtIE9CSkVDVF9PRkZTRVRPRihJbmZlcnJlZFN0cnVjdHVyZSwg
bV93YXRjaHBvaW50KSk7CisgICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpIC0g
T0JKRUNUX09GRlNFVE9GKEluZmVycmVkU3RydWN0dXJlLCB3YXRjaHBvaW50KSk7CiAKLSAgICBp
ZiAoIWluZmVycmVkU3RydWN0dXJlLT5pc0xpdmUoKSkKKyAgICBJbmZlcnJlZFR5cGUqIGluZmVy
cmVkVHlwZSA9IGluZmVycmVkU3RydWN0dXJlLT5wYXJlbnQ7CisgICAgCisgICAgaWYgKCFpbmZl
cnJlZFR5cGUtPmlzTGl2ZSgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgaW5mZXJyZWRT
dHJ1Y3R1cmUtPm1fcGFyZW50LT5yZW1vdmVTdHJ1Y3R1cmUoKTsKKyAgICBpbmZlcnJlZFR5cGUt
PnJlbW92ZVN0cnVjdHVyZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlLmNwcAkocmV2aXNpb24g
MjI1NzcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkluZmVycmVkVHlwZS5oIgogCi0jaW5jbHVkZSAiR0NEZWZlcnJhbENvbnRleHRJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiSXNvQ2VsbFNldElubGluZXMuaCIKICNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtODYsNyArODYsOCBAQCBTdHJ1Y3R1cmUq
IEluZmVycmVkVHlwZTo6Y3JlYXRlU3RydWN0dXJlCiB2b2lkIEluZmVycmVkVHlwZTo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEluZmVy
cmVkVHlwZSogaW5mZXJyZWRUeXBlID0ganNDYXN0PEluZmVycmVkVHlwZSo+KGNlbGwpOwotICAg
IHZpc2l0b3IuYXBwZW5kKGluZmVycmVkVHlwZS0+bV9zdHJ1Y3R1cmUpOworICAgIGlmIChpbmZl
cnJlZFR5cGUtPm1fc3RydWN0dXJlKQorICAgICAgICB2aXNpdG9yLnZtKCkuaW5mZXJyZWRUeXBl
c1dpdGhGaW5hbGl6ZXJzLmFkZChpbmZlcnJlZFR5cGUpOwogfQogCiBJbmZlcnJlZFR5cGU6Oktp
bmQgSW5mZXJyZWRUeXBlOjpraW5kRm9yRmxhZ3MoUHV0QnlJZEZsYWdzIGZsYWdzKQpAQCAtMzk5
LDcgKzQwMCw2IEBAIGJvb2wgSW5mZXJyZWRUeXBlOjp3aWxsU3RvcmVWYWx1ZVNsb3coVk0KICAg
ICBEZXNjcmlwdG9yIG15VHlwZTsKICAgICBib29sIHJlc3VsdDsKICAgICB7Ci0gICAgICAgIEdD
RGVmZXJyYWxDb250ZXh0IGRlZmVycmFsQ29udGV4dCh2bS5oZWFwKTsKICAgICAgICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAgICAgICBvbGRUeXBlID0gZGVzY3JpcHRv
cihsb2NrZXIpOwogICAgICAgICBteVR5cGUgPSBEZXNjcmlwdG9yOjpmb3JWYWx1ZSh2YWx1ZSk7
CkBAIC00MDgsNyArNDA4LDcgQEAgYm9vbCBJbmZlcnJlZFR5cGU6OndpbGxTdG9yZVZhbHVlU2xv
dyhWTQogICAgICAgICAKICAgICAgICAgQVNTRVJUKG9sZFR5cGUgIT0gbXlUeXBlKTsgLy8gVGhl
IHR5cGUgbXVzdCBoYXZlIGNoYW5nZWQgaWYgd2UncmUgb24gdGhlIHNsb3cgcGF0aC4KIAotICAg
ICAgICBib29sIHNldFJlc3VsdCA9IHNldChkZWZlcnJhbENvbnRleHQsIGxvY2tlciwgdm0sIG15
VHlwZSk7CisgICAgICAgIGJvb2wgc2V0UmVzdWx0ID0gc2V0KGxvY2tlciwgdm0sIG15VHlwZSk7
CiAgICAgICAgIHJlc3VsdCA9IGtpbmQobG9ja2VyKSAhPSBUb3A7CiAgICAgICAgIGlmICghc2V0
UmVzdWx0KQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTQyMywxMCArNDIzLDkgQEAg
dm9pZCBJbmZlcnJlZFR5cGU6Om1ha2VUb3BTbG93KFZNJiB2bSwgUAogewogICAgIERlc2NyaXB0
b3Igb2xkVHlwZTsKICAgICB7Ci0gICAgICAgIEdDRGVmZXJyYWxDb250ZXh0IGRlZmVycmFsQ29u
dGV4dCh2bS5oZWFwKTsKICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2sp
OwogICAgICAgICBvbGRUeXBlID0gZGVzY3JpcHRvcihsb2NrZXIpOwotICAgICAgICBpZiAoIXNl
dChkZWZlcnJhbENvbnRleHQsIGxvY2tlciwgdm0sIFRvcCkpCisgICAgICAgIGlmICghc2V0KGxv
Y2tlciwgdm0sIFRvcCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC00MzQsMTQg
KzQzMyw4IEBAIHZvaWQgSW5mZXJyZWRUeXBlOjptYWtlVG9wU2xvdyhWTSYgdm0sIFAKICAgICBt
X3dhdGNocG9pbnRTZXQuZmlyZUFsbCh2bSwgZGV0YWlsKTsKIH0KIAotYm9vbCBJbmZlcnJlZFR5
cGU6OnNldChHQ0RlZmVycmFsQ29udGV4dCYgZGVmZXJyYWxDb250ZXh0LCBjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBEZXNjcmlwdG9yIG5ld0Rlc2NyaXB0b3IpCiti
b29sIEluZmVycmVkVHlwZTo6c2V0KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBW
TSYgdm0sIERlc2NyaXB0b3IgbmV3RGVzY3JpcHRvcikKIHsKLSAgICAvLyBXZSB3aWxsIHRyaWdn
ZXIgd3JpdGUgYmFycmllcnMgd2hpbGUgaG9sZGluZyBvdXIgbG9jay4gQ3VycmVudGx5LCB3cml0
ZSBiYXJyaWVycyBkb24ndCBHQywgYnV0IHRoYXQKLSAgICAvLyBjb3VsZCBjaGFuZ2UuIElmIGl0
IGRvZXMsIHdlIGRvbid0IHdhbnQgdG8gZGVhZGxvY2suIE5vdGUgdGhhdCB3ZSBjb3VsZCBoYXZl
IHVzZWQKLSAgICAvLyBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgaW4gdGhlIGNhbGxlciwgYnV0
IHRoZSBjYWxsZXIgaXMgb24gYSBmYXN0IHBhdGggc28gbWF5YmUgdGhhdCB3b3VsZG4ndCBiZQot
ICAgIC8vIGEgZ29vZCBpZGVhLgotICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyh2bS5oZWFw
KTsKLSAgICAKICAgICAvLyBCZSBkZWZlbnNpdmU6IGlmIHdlJ3JlIG5vdCByZWFsbHkgY2hhbmdp
bmcgdGhlIHR5cGUsIHRoZW4gd2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnl0aGluZy4KICAgICBpZiAo
ZGVzY3JpcHRvcihsb2NrZXIpID09IG5ld0Rlc2NyaXB0b3IpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTQ2OSwxOSArNDYyLDEzIEBAIGJvb2wgSW5mZXJyZWRUeXBlOjpzZXQoR0NEZWZlcnJh
bENvbnRleHQKICAgICAgICAgc2hvdWxkRmlyZVdhdGNocG9pbnRTZXQgPSB0cnVlOwogICAgIH0K
IAotICAgIC8vIFJlbW92ZSB0aGUgb2xkIEluZmVycmVkU3RydWN0dXJlIG9iamVjdCBpZiB3ZSBu
byBsb25nZXIgbmVlZCBpdC4KICAgICBpZiAoIW5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkpCi0g
ICAgICAgIG1fc3RydWN0dXJlLmNsZWFyKCk7Ci0KLSAgICAvLyBBZGQgYSBuZXcgSW5mZXJyZWRT
dHJ1Y3R1cmUgb2JqZWN0IGlmIHdlIG5lZWQgb25lIG5vdy4KLSAgICBpZiAobmV3RGVzY3JpcHRv
ci5zdHJ1Y3R1cmUoKSkgewotICAgICAgICBpZiAobV9zdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAg
IC8vIFdlIHNob3VsZCBhZ3JlZSBvbiB0aGUgc3RydWN0dXJlcyBpZiB3ZSBnZXQgaGVyZS4KLSAg
ICAgICAgICAgIEFTU0VSVChuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpID09IG1fc3RydWN0dXJl
LT5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBhdXRvKiBzdHJ1
Y3R1cmUgPSBJbmZlcnJlZFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBkZWZlcnJhbENvbnRleHQsIHRo
aXMsIG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkpOwotICAgICAgICAgICAgbV9zdHJ1Y3R1cmUu
c2V0KHZtLCB0aGlzLCBzdHJ1Y3R1cmUpOwotICAgICAgICB9CisgICAgICAgIG1fc3RydWN0dXJl
ID0gbnVsbHB0cjsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKG1fc3RydWN0dXJlKQorICAgICAg
ICAgICAgQVNTRVJUKG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkgPT0gbV9zdHJ1Y3R1cmUtPnN0
cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fc3RydWN0dXJlID0g
c3RkOjptYWtlX3VuaXF1ZTxJbmZlcnJlZFN0cnVjdHVyZT4odm0sIHRoaXMsIG5ld0Rlc2NyaXB0
b3Iuc3RydWN0dXJlKCkpOwogICAgIH0KIAogICAgIC8vIEZpbmFsbHksIHNldCB0aGUgZGVzY3Jp
cHRvciBraW5kLgpAQCAtNTAzLDEzICs0OTAsMTIgQEAgdm9pZCBJbmZlcnJlZFR5cGU6OnJlbW92
ZVN0cnVjdHVyZSgpCiAgICAgRGVzY3JpcHRvciBvbGREZXNjcmlwdG9yOwogICAgIERlc2NyaXB0
b3IgbmV3RGVzY3JpcHRvcjsKICAgICB7Ci0gICAgICAgIEdDRGVmZXJyYWxDb250ZXh0IGRlZmVy
cmFsQ29udGV4dCh2bS5oZWFwKTsKICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlciht
X2xvY2spOwogICAgICAgICBvbGREZXNjcmlwdG9yID0gZGVzY3JpcHRvcihsb2NrZXIpOwogICAg
ICAgICBuZXdEZXNjcmlwdG9yID0gb2xkRGVzY3JpcHRvcjsKICAgICAgICAgbmV3RGVzY3JpcHRv
ci5yZW1vdmVTdHJ1Y3R1cmUoKTsKICAgICAgICAgCi0gICAgICAgIGlmICghc2V0KGRlZmVycmFs
Q29udGV4dCwgbG9ja2VyLCB2bSwgbmV3RGVzY3JpcHRvcikpCisgICAgICAgIGlmICghc2V0KGxv
Y2tlciwgdm0sIG5ld0Rlc2NyaXB0b3IpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlLmgJKHJl
dmlzaW9uIDIyNTc3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVk
VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJDb25j
dXJyZW50SlNMb2NrLmgiCiAjaW5jbHVkZSAiSW5mZXJyZWRTdHJ1Y3R1cmUuaCIKKyNpbmNsdWRl
ICJJc29DZWxsU2V0LmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlO
YW1lLmgiCiAjaW5jbHVkZSAiUHV0QnlJZEZsYWdzLmgiCkBAIC0xODUsNyArMTg2LDcgQEAgcHVi
bGljOgogCiAgICAgRGVzY3JpcHRvciBkZXNjcmlwdG9yTWFpblRocmVhZCgpIGNvbnN0CiAgICAg
ewotICAgICAgICByZXR1cm4gRGVzY3JpcHRvcihtX2tpbmQsIG1fc3RydWN0dXJlID8gbV9zdHJ1
Y3R1cmUtPnN0cnVjdHVyZSgpIDogbnVsbHB0cik7CisgICAgICAgIHJldHVybiBEZXNjcmlwdG9y
KG1fa2luZCwgbV9zdHJ1Y3R1cmUgPyBtX3N0cnVjdHVyZS0+c3RydWN0dXJlLmdldCgpIDogbnVs
bHB0cik7CiAgICAgfQogICAgIAogICAgIERlc2NyaXB0b3IgZGVzY3JpcHRvcihjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImKSBjb25zdApAQCAtMjMwLDcgKzIzMSw3IEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIAotICAgIHZvaWQgZmluYWxpemVV
bmNvbmRpdGlvbmFsbHkoKTsKKyAgICBJc29DZWxsU2V0OjpGb3JFYWNoUmVzdWx0IGZpbmFsaXpl
VW5jb25kaXRpb25hbGx5KFZNJik7CiAKIHByaXZhdGU6CiAgICAgSW5mZXJyZWRUeXBlKFZNJik7
CkBAIC0yNDEsNyArMjQyLDcgQEAgcHJpdmF0ZToKIAogICAgIC8vIEhlbHBlciBmb3Igd2lsbFN0
b3JlVmFsdWVTbG93KCkgYW5kIG1ha2VUb3BTbG93KCkuIFRoaXMgcmV0dXJucyB0cnVlIGlmIHdl
IHNob3VsZCBmaXJlIHRoZQogICAgIC8vIHdhdGNocG9pbnQgc2V0LgotICAgIGJvb2wgc2V0KEdD
RGVmZXJyYWxDb250ZXh0JiwgY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVk0mLCBEZXNjcmlw
dG9yKTsKKyAgICBib29sIHNldChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWTSYsIERlc2Ny
aXB0b3IpOwogICAgIAogICAgIHZvaWQgcmVtb3ZlU3RydWN0dXJlKCk7CiAgICAgCkBAIC0yNTIs
NyArMjUzLDggQEAgcHJpdmF0ZToKICAgICAKICAgICBLaW5kIG1fa2luZCB7IEJvdHRvbSB9Owog
Ci0gICAgV3JpdGVCYXJyaWVyPEluZmVycmVkU3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKKyAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgYmUgUG9pc29uZWQuCisgICAgc3RkOjp1bmlxdWVfcHRyPElu
ZmVycmVkU3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKIAogICAgIC8vIE5PVEU6IElmIHRoaXMgaXMg
YmVpbmcgd2F0Y2hlZCwgd2UgdHJhbnNmb3JtIHRvIFRvcCBiZWNhdXNlIHRoYXQgaW1wbGllcyB0
aGF0IGl0IHdvdWxkbid0IGJlCiAgICAgLy8gcHJvZml0YWJsZSB0byB3YXRjaCBpdCBhZ2Fpbi4g
QWxzbywgdGhpcyBzZXQgaXMgaW5pdGlhbGl6ZWQgY2xlYXIsIGFuZCBpcyBuZXZlciBleHBvc2Vk
IHRvIHRoZSBERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVk
VHlwZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbmZlcnJlZFR5cGVJbmxpbmVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkluZmVycmVkVHlwZS5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworaW5saW5lIElzb0NlbGxTZXQ6OkZvckVhY2hSZXN1bHQgSW5mZXJyZWRU
eXBlOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYpCit7CisgICAgQVNTRVJUKEhlYXA6Omlz
TWFya2VkKHRoaXMpKTsKKyAgICAKKyAgICBpZiAobV9zdHJ1Y3R1cmUpIHsKKyAgICAgICAgaWYg
KEhlYXA6OmlzTWFya2VkKG1fc3RydWN0dXJlLT5zdHJ1Y3R1cmUuZ2V0KCkpKQorICAgICAgICAg
ICAgcmV0dXJuIElzb0NlbGxTZXQ6OkZvckVhY2hSZXN1bHQ6OkNvbnRpbnVlOworICAgICAgICAK
KyAgICAgICAgcmVtb3ZlU3RydWN0dXJlKCk7CisgICAgfQorICAgIAorICAgIHJldHVybiBJc29D
ZWxsU2V0OjpGb3JFYWNoUmVzdWx0OjpSZW1vdmVBbmRDb250aW51ZTsKK30KKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlz
aW9uIDIyNTc3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjA1LDExICsyMDUsMTEgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhl
YXBUeXBlIGhlYXBUeXBlKQogICAgICwgZGlyZWN0RXZhbEV4ZWN1dGFibGVTcGFjZSBJU09fU1VC
U1BBQ0VfSU5JVChoZWFwLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLmdldCgpLCBEaXJl
Y3RFdmFsRXhlY3V0YWJsZSkKICAgICAsIGZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIEZ1bmN0
aW9uRXhlY3V0YWJsZSkKICAgICAsIGluZGlyZWN0RXZhbEV4ZWN1dGFibGVTcGFjZSBJU09fU1VC
U1BBQ0VfSU5JVChoZWFwLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLmdldCgpLCBJbmRp
cmVjdEV2YWxFeGVjdXRhYmxlKQotICAgICwgaW5mZXJyZWRTdHJ1Y3R1cmVTcGFjZSBJU09fU1VC
U1BBQ0VfSU5JVChoZWFwLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLmdldCgpLCBJbmZl
cnJlZFN0cnVjdHVyZSkKICAgICAsIGluZmVycmVkVHlwZVNwYWNlIElTT19TVUJTUEFDRV9JTklU
KGhlYXAsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIEluZmVycmVkVHlwZSkK
ICAgICAsIG1vZHVsZVByb2dyYW1FeGVjdXRhYmxlU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVh
cCwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgTW9kdWxlUHJvZ3JhbUV4ZWN1
dGFibGUpCiAgICAgLCBuYXRpdmVFeGVjdXRhYmxlU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVh
cCwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgTmF0aXZlRXhlY3V0YWJsZSkK
ICAgICAsIHByb2dyYW1FeGVjdXRhYmxlU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgZGVz
dHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgUHJvZ3JhbUV4ZWN1dGFibGUpCisgICAg
LCBpbmZlcnJlZFR5cGVzV2l0aEZpbmFsaXplcnMoaW5mZXJyZWRUeXBlU3BhY2UpCiAgICAgLCB2
bVR5cGUodm1UeXBlKQogICAgICwgY2xpZW50RGF0YSgwKQogICAgICwgdG9wRW50cnlGcmFtZShu
dWxscHRyKQpAQCAtMjkyLDcgKzI5Miw2IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlw
ZSBoZWFwVHlwZSkKICAgICB1bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlLnNldCgq
dGhpcywgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAw
LCBqc051bGwoKSkpOwogICAgIHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVy
ZS5zZXQoKnRoaXMsIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6Y3JlYXRlU3RydWN0
dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHByb3BlcnR5VGFibGVTdHJ1Y3R1cmUuc2V0
KCp0aGlzLCBQcm9wZXJ0eVRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgp
KSk7Ci0gICAgaW5mZXJyZWRTdHJ1Y3R1cmVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBJbmZlcnJlZFN0
cnVjdHVyZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIGluZmVy
cmVkVHlwZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEluZmVycmVkVHlwZTo6Y3JlYXRlU3RydWN0dXJl
KCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIGluZmVycmVkVHlwZVRhYmxlU3RydWN0dXJlLnNl
dCgqdGhpcywgSW5mZXJyZWRUeXBlVGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNO
dWxsKCkpKTsKICAgICBpbmZlcnJlZFZhbHVlU3RydWN0dXJlLnNldCgqdGhpcywgSW5mZXJyZWRW
YWx1ZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyMjU3NzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAj
aW5jbHVkZSAiRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgog
I2luY2x1ZGUgIkludHJpbnNpYy5oIgorI2luY2x1ZGUgIklzb0NlbGxTZXQuaCIKICNpbmNsdWRl
ICJJc29TdWJzcGFjZS5oIgogI2luY2x1ZGUgIkpJVFRodW5rcy5oIgogI2luY2x1ZGUgIkpTQ0pT
VmFsdWUuaCIKQEAgLTM0MCwxMSArMzQxLDEyIEBAIHB1YmxpYzoKICAgICBJc29TdWJzcGFjZSBk
aXJlY3RFdmFsRXhlY3V0YWJsZVNwYWNlOwogICAgIElzb1N1YnNwYWNlIGZ1bmN0aW9uRXhlY3V0
YWJsZVNwYWNlOwogICAgIElzb1N1YnNwYWNlIGluZGlyZWN0RXZhbEV4ZWN1dGFibGVTcGFjZTsK
LSAgICBJc29TdWJzcGFjZSBpbmZlcnJlZFN0cnVjdHVyZVNwYWNlOwogICAgIElzb1N1YnNwYWNl
IGluZmVycmVkVHlwZVNwYWNlOwogICAgIElzb1N1YnNwYWNlIG1vZHVsZVByb2dyYW1FeGVjdXRh
YmxlU3BhY2U7CiAgICAgSXNvU3Vic3BhY2UgbmF0aXZlRXhlY3V0YWJsZVNwYWNlOwogICAgIElz
b1N1YnNwYWNlIHByb2dyYW1FeGVjdXRhYmxlU3BhY2U7CisgICAgCisgICAgSXNvQ2VsbFNldCBp
bmZlcnJlZFR5cGVzV2l0aEZpbmFsaXplcnM7CiAKICAgICBWTVR5cGUgdm1UeXBlOwogICAgIENs
aWVudERhdGEqIGNsaWVudERhdGE7CkBAIC0zOTIsNyArMzk0LDYgQEAgcHVibGljOgogICAgIFN0
cm9uZzxTdHJ1Y3R1cmU+IHVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmU7CiAgICAg
U3Ryb25nPFN0cnVjdHVyZT4gdW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJl
OwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb3BlcnR5VGFibGVTdHJ1Y3R1cmU7Ci0gICAgU3Ry
b25nPFN0cnVjdHVyZT4gaW5mZXJyZWRTdHJ1Y3R1cmVTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0
cnVjdHVyZT4gaW5mZXJyZWRUeXBlU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGlu
ZmVycmVkVHlwZVRhYmxlU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGluZmVycmVk
VmFsdWVTdHJ1Y3R1cmU7CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjI1NzcwKQorKysgU291cmNlL1dURi9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2NyBAQAorMjAxNy0xMi0xMSAgRmls
aXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEl0IHNob3VsZCBiZSBwb3Nz
aWJsZSB0byBmbGFnIGEgY2VsbCBmb3IgdW5jb25kaXRpb25hbCBmaW5hbGl6YXRpb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MDYzNgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBh
ZGRzIENvbmN1cnJlbnRWZWN0b3IsIHdoaWNoIGlzIGxpa2UgU2VnbWVudGVkVmVjdG9yLCBidXQg
d2FzdGVzIHNvbWUgc3BhY2UgdG8gYWxsb3cKKyAgICAgICAgcmVzaXppbmcgdG8gcHJvY2VlZCBj
b25jdXJyZW50bHkgdG8gYWNjZXNzLiBJdCdzIG5vdCBwb3NzaWJsZSB0byByZXNpemUgY29uY3Vy
cmVudGx5IHRvCisgICAgICAgIHJlc2l6aW5nLCBjb25jdXJyZW50IHJlYWQvd3JpdGVzIGFyZW4n
dCBwcm90ZWN0ZWQgZnJvbSByYWNpbmcgaWYgdGhleSBhY2Nlc3MgdGhlIHNhbWUgZWxlbWVudCwK
KyAgICAgICAgYW5kIHdobyBrbm93cyB3aGF0IHlvdSdsbCBnZXQgaWYgeW91IGl0ZXJhdGUgdXAg
dG8gc2l6ZSgpIHdoaWxlIHNvbWVvbmUgZWxzZSBhcHBlbmQoKXMuIFRoZQorICAgICAgICBrZXkg
aW5zaWdodCBpcyB0byBzdGFzaCBhbGwgcHJpb3IgY29waWVzIG9mIHRoZSBzcGluZSwgc28gdGhh
dCBub2JvZHkgY3Jhc2hlcyB0cnlpbmcgdG8gYWNjZXNzCisgICAgICAgIGEgc3RhbGUgc3BpbmUu
CisgICAgICAgIAorICAgICAgICBJJ20gZ29pbmcgdG8gd2FudCB0byBkbyB0aGUgc2FtZSB0aGlu
ZyBmb3IgRmFzdEJpdFZlY3RvciwgYnkgY3JlYXRpbmcgYSBzZWdtZW50ZWQgV29yZE93bmVyCisg
ICAgICAgIGNsYXNzLiBUaGF0IHdvdWxkIHJlcXVpcmUgcmVwZWF0aW5nIHRoZSBkYW5jZSBvZiBo
YXZpbmcgYSBzcGluZSB0aGF0IGNhbiByZXNpemUgd2hpbGUgc3Rhc2hpbmcKKyAgICAgICAgb2xk
IHZlcnNpb25zLiBTbywgdGhlIHNwaW5lIHJlc2l6aW5nIGxvZ2ljIGlzIGFic3RyYWN0ZWQgYmVo
aW5kIENvbmN1cnJlbnRCdWZmZXIuIFlvdSBjb3VsZAorICAgICAgICB1c2UgdGhhdCBhcyBhIGtp
bmQgb2YgImNvbmN1cnJlbnQgdmVjdG9yIiBmb3IgaW1tdXRhYmxlIGRhdGEuIFRoYXQncyBob3cg
Q29uY3VycmVudFZlY3RvciB1c2VzCisgICAgICAgIGl0OiBpdCdzIGFuIGltbXV0YWJsZSBhcnJh
eSBvZiBzZWdtZW50IHBvaW50ZXJzLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogd3RmL0NvbmN1cnJlbnRCdWZmZXIuaDogQWRkZWQuCisgICAg
ICAgIChXVEY6OkNvbmN1cnJlbnRCdWZmZXI6OkNvbmN1cnJlbnRCdWZmZXIpOgorICAgICAgICAo
V1RGOjpDb25jdXJyZW50QnVmZmVyOjp+Q29uY3VycmVudEJ1ZmZlcik6CisgICAgICAgIChXVEY6
OkNvbmN1cnJlbnRCdWZmZXI6Omdyb3dFeGFjdCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRC
dWZmZXI6Omdyb3cpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50QnVmZmVyOjphcnJheSBjb25z
dCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRCdWZmZXI6Om9wZXJhdG9yW10pOgorICAgICAg
ICAoV1RGOjpDb25jdXJyZW50QnVmZmVyOjpvcGVyYXRvcltdIGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6Q29uY3VycmVudEJ1ZmZlcjo6Y3JlYXRlQXJyYXkpOgorICAgICAgICAqIHd0Zi9Db25jdXJy
ZW50VmVjdG9yLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpDb25jdXJyZW50VmVjdG9ySXRlcmF0
b3I6On5Db25jdXJyZW50VmVjdG9ySXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50
VmVjdG9ySXRlcmF0b3I6Om9wZXJhdG9yKiBjb25zdCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJl
bnRWZWN0b3JJdGVyYXRvcjo6b3BlcmF0b3ItPiBjb25zdCk6CisgICAgICAgIChXVEY6OkNvbmN1
cnJlbnRWZWN0b3JJdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChXVEY6OkNvbmN1cnJl
bnRWZWN0b3JJdGVyYXRvcjo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChXVEY6OkNvbmN1
cnJlbnRWZWN0b3JJdGVyYXRvcjo6b3BlcmF0b3IhPSBjb25zdCk6CisgICAgICAgIChXVEY6OkNv
bmN1cnJlbnRWZWN0b3JJdGVyYXRvcjo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdURjo6Q29uY3Vy
cmVudFZlY3Rvckl0ZXJhdG9yOjpDb25jdXJyZW50VmVjdG9ySXRlcmF0b3IpOgorICAgICAgICAo
V1RGOjpDb25jdXJyZW50VmVjdG9yOjp+Q29uY3VycmVudFZlY3Rvcik6CisgICAgICAgIChXVEY6
OkNvbmN1cnJlbnRWZWN0b3I6OnNpemUgY29uc3QpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50
VmVjdG9yOjppc0VtcHR5IGNvbnN0KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFZlY3Rvcjo6
YXQpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50VmVjdG9yOjphdCBjb25zdCk6CisgICAgICAg
IChXVEY6OkNvbmN1cnJlbnRWZWN0b3I6Om9wZXJhdG9yW10pOgorICAgICAgICAoV1RGOjpDb25j
dXJyZW50VmVjdG9yOjpvcGVyYXRvcltdIGNvbnN0KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVu
dFZlY3Rvcjo6Zmlyc3QpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50VmVjdG9yOjpmaXJzdCBj
b25zdCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRWZWN0b3I6Omxhc3QpOgorICAgICAgICAo
V1RGOjpDb25jdXJyZW50VmVjdG9yOjpsYXN0IGNvbnN0KToKKyAgICAgICAgKFdURjo6Q29uY3Vy
cmVudFZlY3Rvcjo6dGFrZUxhc3QpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50VmVjdG9yOjph
cHBlbmQpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50VmVjdG9yOjphbGxvYyk6CisgICAgICAg
IChXVEY6OkNvbmN1cnJlbnRWZWN0b3I6OnJlbW92ZUxhc3QpOgorICAgICAgICAoV1RGOjpDb25j
dXJyZW50VmVjdG9yOjpncm93KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFZlY3Rvcjo6YmVn
aW4pOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50VmVjdG9yOjplbmQpOgorICAgICAgICAoV1RG
OjpDb25jdXJyZW50VmVjdG9yOjpzZWdtZW50RXhpc3RzRm9yKToKKyAgICAgICAgKFdURjo6Q29u
Y3VycmVudFZlY3Rvcjo6c2VnbWVudEZvcik6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRWZWN0
b3I6OnN1YnNjcmlwdEZvcik6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRWZWN0b3I6OmVuc3Vy
ZVNlZ21lbnRzRm9yKToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFZlY3Rvcjo6ZW5zdXJlU2Vn
bWVudCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRWZWN0b3I6OmFsbG9jYXRlU2VnbWVudCk6
CisKIDIwMTctMTItMTEgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgV2ViIEluc3BlY3RvcjogT3B0aW9uYWxseSBsb2cgV2ViS2l0IGxvZyBwYXJhbWV0
ZXJzIGFzIEpTT04KSW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMjI1NzcwKQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjM5LDYgKzIzOSw4IEBACiAJCTBGQjE0RTE4MTgw
RkEyMTgwMDlCNkI0RCAvKiBCYWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QmFnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0RTFBMTgxMEUxREEwMDlC
NkI0RCAvKiBCYWdUb0hhc2hNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFnVG9IYXNoTWFwLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjMxN0MzMUM0ODgwMDEwMDdFMzk1QSAvKiBT
eXN0ZW1UcmFjaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5c3RlbVRy
YWNpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCNDY3ODIxRkRFMjgyQjAw
M0ZDQjA5IC8qIENvbmN1cnJlbnRCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ29uY3VycmVudEJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkI0Njc4MzFGREUyODJDMDAzRkNCMDkgLyogQ29uY3VycmVudFZlY3Rvci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDb25jdXJyZW50VmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGQzQ0ODgyMTZGRTlGRTEwMDg0NEJFOSAvKiBQcm9jZXNzSUQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvY2Vzc0lELmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGQzRFREU1MTY5NjE0OTYwMEY2NTA0MSAvKiBDb21tYVByaW50
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tbWFQcmludGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgxQUM0MTU0RkIyMkUwMDk4M0U3MiAvKiBG
YXN0Qml0VmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZhc3RCaXRW
ZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTgwOCw4ICs4MTAsMTAgQEAK
IAkJCQkwRjhGMkI5MDE3MkUwMEYwMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuaCAqLywK
IAkJCQlBOEE0NzI3MDE1MUE4MjVBMDA0MTIzRkYgLyogQ29tcGlsZXIuaCAqLywKIAkJCQk0NkJB
OUVBQjFGNENENjFFMDA5QTJCQkMgLyogQ29tcGxldGlvbkhhbmRsZXIuaCAqLywKKwkJCQkwRkI0
Njc4MjFGREUyODJCMDAzRkNCMDkgLyogQ29uY3VycmVudEJ1ZmZlci5oICovLAogCQkJCTBGMzBD
QjU4MUZDREYxMzMwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAgKi8sCiAJCQkJ
MEYzMENCNTkxRkNERjEzMzAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmggKi8sCisJ
CQkJMEZCNDY3ODMxRkRFMjgyQzAwM0ZDQjA5IC8qIENvbmN1cnJlbnRWZWN0b3IuaCAqLywKIAkJ
CQkwRkRCNjk4RDFCN0M2NDNBMDAwQzEwNzggLyogQ29uZGl0aW9uLmggKi8sCiAJCQkJMEZGQkNC
RkExRkQzN0UwRjAwNzJBQUYwIC8qIENvdW50aW5nTG9jay5oICovLAogCQkJCTBGOEU4NURBMUZE
NDg1QjAwMDY5MTg4OSAvKiBDb3VudGluZ0xvY2suY3BwICovLApJbmRleDogU291cmNlL1dURi93
dGYvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ01ha2VMaXN0
cy50eHQJKHJldmlzaW9uIDIyNTc3MCkKKysrIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC0xOCw3ICsxOCw5IEBAIHNldChXVEZfSEVBREVSUwogICAgIENs
b2NrVHlwZS5oCiAgICAgQ29tcGlsYXRpb25UaHJlYWQuaAogICAgIENvbXBpbGVyLmgKKyAgICBD
b25jdXJyZW50QnVmZmVyLmgKICAgICBDb25jdXJyZW50UHRySGFzaFNldC5oCisgICAgQ29uY3Vy
cmVudFZlY3Rvci5oCiAgICAgQ29uZGl0aW9uLmgKICAgICBDb3VudGluZ0xvY2suaAogICAgIENy
b3NzVGhyZWFkQ29waWVyLmgKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRCdWZmZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Db25jdXJyZW50QnVmZmVyLmgJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvQ29uY3VycmVudEJ1ZmZlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KKyNp
bmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+
CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBDb25jdXJyZW50
QnVmZmVyIGlzIHN1aXRhYmxlIGZvciB3aGVuIHlvdSBwbGFuIHRvIHN0b3JlIGltbXV0YWJsZSBk
YXRhIGFuZCBzb21ldGltZXMgYXBwZW5kIHRvIGl0LgorLy8gSXQgc3VwcG9ydHMgc3RvcmluZyBk
YXRhIHRoYXQgaXMgbm90IGNvcHktY29uc3RydWN0YWJsZSBidXQgYml0LWNvcHlhYmxlLgordGVt
cGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIENvbmN1cnJlbnRCdWZmZXIgeworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKENvbmN1cnJlbnRCdWZmZXIpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIAorICAgIENvbmN1cnJlbnRCdWZmZXIoKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgfkNvbmN1cnJlbnRCdWZmZXIoKQorICAgIHsKKyAgICAgICAgaWYgKEFycmF5
KiBhcnJheSA9IG1fYXJyYXkpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBhcnJheS0+c2l6ZTsgKytpKQorICAgICAgICAgICAgICAgIGFycmF5LT5kYXRhW2ldLn5UKCk7
CisgICAgICAgIH0KKyAgICAgICAgZm9yIChBcnJheSogYXJyYXkgOiBtX2FsbEFycmF5cykKKyAg
ICAgICAgICAgIGZhc3RGcmVlKGFycmF5KTsKKyAgICB9CisKKyAgICAvLyBHcm93aW5nIGlzIG5v
dCBjb25jdXJyZW50LiBUaGlzIGFzc3VtZXMgeW91IGFyZSBob2xkaW5nIHNvbWUgb3RoZXIgbG9j
ayBiZWZvcmUgeW91IGRvIHRoaXMuCisgICAgdm9pZCBncm93RXhhY3Qoc2l6ZV90IG5ld1NpemUp
CisgICAgeworICAgICAgICBBcnJheSogYXJyYXkgPSBtX2FycmF5OworICAgICAgICBpZiAoYXJy
YXkgJiYgbmV3U2l6ZSA8PSBhcnJheS0+c2l6ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgQXJyYXkqIG5ld0FycmF5ID0gY3JlYXRlQXJyYXkobmV3U2l6ZSk7CisgICAgICAgIC8vIFRo
aXMgYWxsb3dzIHVzIHRvIGRvIENvbmN1cnJlbnRCdWZmZXI8c3RkOjp1bmlxdWVfcHRyPD4+Lgor
ICAgICAgICBpZiAoYXJyYXkpCisgICAgICAgICAgICBtZW1jcHkobmV3QXJyYXktPmRhdGEsIGFy
cmF5LT5kYXRhLCBzaXplb2YoVCkgKiBhcnJheS0+c2l6ZSk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGFycmF5ID8gYXJyYXktPnNpemUgOiAwOyBpIDwgbmV3U2l6ZTsgKytpKQorICAgICAg
ICAgICAgbmV3IChuZXdBcnJheS0+ZGF0YSArIGkpIFQoKTsKKyAgICAgICAgV1RGOjpzdG9yZVN0
b3JlRmVuY2UoKTsKKyAgICAgICAgbV9hcnJheSA9IG5ld0FycmF5OworICAgICAgICBXVEY6OnN0
b3JlU3RvcmVGZW5jZSgpOworICAgICAgICBtX2FsbEFycmF5cy5hcHBlbmQobmV3QXJyYXkpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGdyb3coc2l6ZV90IG5ld1NpemUpCisgICAgeworICAgICAg
ICBzaXplX3Qgc2l6ZSA9IG1fYXJyYXkgPyBtX2FycmF5LT5zaXplIDogMDsKKyAgICAgICAgaWYg
KG5ld1NpemUgPD0gc2l6ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZ3Jvd0V4YWN0
KHN0ZDo6bWF4KG5ld1NpemUsIHNpemUgKiAyKSk7CisgICAgfQorICAgIAorICAgIHN0cnVjdCBB
cnJheSB7CisgICAgICAgIHVuc2lnbmVkIHNpemU7IC8vIFRoaXMgaXMgYW4gaW1tdXRhYmxlIHNp
emUuCisgICAgICAgIFQgZGF0YVsxXTsKKyAgICB9OworICAgIAorICAgIEFycmF5KiBhcnJheSgp
IGNvbnN0IHsgcmV0dXJuIG1fYXJyYXk7IH0KKyAgICAKKyAgICBUJiBvcGVyYXRvcltdKHNpemVf
dCBpbmRleCkgeyByZXR1cm4gbV9hcnJheS0+ZGF0YVtpbmRleF07IH0KKyAgICBjb25zdCBUJiBv
cGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9hcnJheS0+ZGF0YVtpbmRl
eF07IH0KKyAgICAKK3ByaXZhdGU6CisgICAgQXJyYXkqIGNyZWF0ZUFycmF5KHVuc2lnbmVkIHNp
emUpCisgICAgeworICAgICAgICBBcnJheSogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8QXJyYXkqPihm
YXN0TWFsbG9jKE9CSkVDVF9PRkZTRVRPRihBcnJheSwgZGF0YSkgKyBzaXplb2YoVCkgKiBzaXpl
KSk7CisgICAgICAgIHJlc3VsdC0+c2l6ZSA9IHNpemU7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorICAgIAorICAgIEFycmF5KiBtX2FycmF5IHsgbnVsbHB0ciB9OworICAgIFZlY3Rv
cjxBcnJheSo+IG1fYWxsQXJyYXlzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRWZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9Db25jdXJyZW50VmVjdG9yLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93
dGYvQ29uY3VycmVudFZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjYyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4g
KCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ29u
Y3VycmVudFZlY3Rvcl9oCisjZGVmaW5lIENvbmN1cnJlbnRWZWN0b3JfaAorCisjaW5jbHVkZSA8
d3RmL0NvbmN1cnJlbnRCdWZmZXIuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKwor
bmFtZXNwYWNlIFdURiB7CisKKy8vIEFuIGl0ZXJhdG9yIGZvciBDb25jdXJyZW50VmVjdG9yLiBJ
dCBzdXBwb3J0cyBvbmx5IHRoZSBwcmUgKysgb3BlcmF0b3IKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
LCBzaXplX3QgU2VnbWVudFNpemUgPSA4PiBjbGFzcyBDb25jdXJyZW50VmVjdG9yOwordGVtcGxh
dGUgPHR5cGVuYW1lIFQsIHNpemVfdCBTZWdtZW50U2l6ZSA9IDg+IGNsYXNzIENvbmN1cnJlbnRW
ZWN0b3JJdGVyYXRvciB7Citwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb25jdXJyZW50VmVj
dG9yPFQsIFNlZ21lbnRTaXplPjsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIENvbmN1cnJlbnRWZWN0
b3JJdGVyYXRvcjxULCBTZWdtZW50U2l6ZT4gSXRlcmF0b3I7CisKKyAgICB+Q29uY3VycmVudFZl
Y3Rvckl0ZXJhdG9yKCkgeyB9CisKKyAgICBUJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBt
X3ZlY3Rvci5hdChtX2luZGV4KTsgfQorICAgIFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVy
biAmbV92ZWN0b3IuYXQobV9pbmRleCk7IH0KKworICAgIC8vIE9ubHkgcHJlZml4ICsrIG9wZXJh
dG9yIHN1cHBvcnRlZAorICAgIEl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICB7CisgICAgICAg
IG1faW5kZXgrKzsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBJdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4ICYmICZtX3ZlY3RvciA9PSAmb3RoZXIubV92ZWN0
b3I7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEl0ZXJhdG9yJiBvdGhlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2luZGV4ICE9IG90aGVyLm1faW5kZXggfHwg
Jm1fdmVjdG9yICE9ICZvdGhlci5tX3ZlY3RvcjsKKyAgICB9CisKKyAgICBDb25jdXJyZW50VmVj
dG9ySXRlcmF0b3ImIG9wZXJhdG9yPShjb25zdCBDb25jdXJyZW50VmVjdG9ySXRlcmF0b3I8VCwg
U2VnbWVudFNpemU+JiBvdGhlcikKKyAgICB7CisgICAgICAgIG1fdmVjdG9yID0gb3RoZXIubV92
ZWN0b3I7CisgICAgICAgIG1faW5kZXggPSBvdGhlci5tX2luZGV4OworICAgICAgICByZXR1cm4g
KnRoaXM7CisgICAgfQorCitwcml2YXRlOgorICAgIENvbmN1cnJlbnRWZWN0b3JJdGVyYXRvcihD
b25jdXJyZW50VmVjdG9yPFQsIFNlZ21lbnRTaXplPiYgdmVjdG9yLCBzaXplX3QgaW5kZXgpCisg
ICAgICAgIDogbV92ZWN0b3IodmVjdG9yKQorICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAg
eworICAgIH0KKworICAgIENvbmN1cnJlbnRWZWN0b3I8VCwgU2VnbWVudFNpemU+JiBtX3ZlY3Rv
cjsKKyAgICBzaXplX3QgbV9pbmRleDsKK307CisKKy8vIENvbmN1cnJlbnRWZWN0b3IgaXMgbGlr
ZSBTZWdtZW50ZWRWZWN0b3IsIGJ1dCBzdWl0YWJsZSBmb3Igc2NlbmFyaW9zIHdoZXJlIG9uZSB0
aHJlYWQgYXBwZW5kcworLy8gZWxlbWVudHMgYW5kIGFub3RoZXIgdGhyZWFkIGNvbnRpbnVlcyB0
byBhY2Nlc3MgZWxlbWVudHMgYXQgbG93ZXIgaW5kaWNlcy4gT25seSBvbmUgdGhyZWFkIGNhbgor
Ly8gYXBwZW5kIGF0IGEgdGltZSwgc28gdGhhdCBhY3Rpdml0eSBzdGlsbCBuZWVkcyBsb2NraW5n
LiBzaXplKCkgYW5kIGxhc3QoKSBhcmUgcmFjeSB3aXRoIGFwcGVuZCgpLAorLy8gc28gYWNjZXNz
ZXMgdGhhdCBydW4gY29uY3VycmVudGx5IHRvIGFwcGVuZCgpIG5lZWQgdG8gaGF2ZSBzb21lIHdh
eSBvZiBrbm93aW5nIHRoYXQgdGhlaXIgaW5kaWNlcworLy8gaGF2ZSBiZWVuIGZ1bGx5IGluaXRp
YWxpemVkLgordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNpemVfdCBTZWdtZW50U2l6ZT4KK2NsYXNz
IENvbmN1cnJlbnRWZWN0b3IgeworICAgIGZyaWVuZCBjbGFzcyBDb25jdXJyZW50VmVjdG9ySXRl
cmF0b3I8VCwgU2VnbWVudFNpemU+OworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvbmN1cnJl
bnRWZWN0b3IpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworCitwdWJsaWM6CisgICAg
dHlwZWRlZiBDb25jdXJyZW50VmVjdG9ySXRlcmF0b3I8VCwgU2VnbWVudFNpemU+IEl0ZXJhdG9y
OworCisgICAgQ29uY3VycmVudFZlY3RvcigpID0gZGVmYXVsdDsKKworICAgIH5Db25jdXJyZW50
VmVjdG9yKCkKKyAgICB7CisgICAgfQorCisgICAgLy8gVGhpcyBtYXkgcmV0dXJuIGEgc2l6ZSB0
aGF0IGlzIGJpZ2dlciB0aGFuIHRoZSB1bmRlcmx5aW5nIHN0b3JhZ2UsIHNpbmNlIHRoaXMgZG9l
cyBub3QgZmVuY2UKKyAgICAvLyBtYW5pcHVsYXRpb25zIG9mIHNpemUuIFNvIGlmIHlvdSBhY2Nl
c3MgYXQgc2l6ZSgpLTEsIHlvdSBtYXkgY3Jhc2ggYmVjYXVzZSB0aGlzIGhhc24ndAorICAgIC8v
IGFsbG9jYXRlZCBzdG9yYWdlIGZvciB0aGF0IGluZGV4IHlldC4KKyAgICBzaXplX3Qgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyBy
ZXR1cm4gIXNpemUoKTsgfQorCisgICAgVCYgYXQoc2l6ZV90IGluZGV4KQorICAgIHsKKyAgICAg
ICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaW5kZXggPCBtX3NpemUpOworICAg
ICAgICByZXR1cm4gc2VnbWVudEZvcihpbmRleCktPmVudHJpZXNbc3Vic2NyaXB0Rm9yKGluZGV4
KV07CisgICAgfQorCisgICAgY29uc3QgVCYgYXQoc2l6ZV90IGluZGV4KSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8Q29uY3VycmVudFZlY3RvcjxULCBTZWdtZW50U2l6
ZT4qPih0aGlzKS0+YXQoaW5kZXgpOworICAgIH0KKworICAgIFQmIG9wZXJhdG9yW10oc2l6ZV90
IGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KGluZGV4KTsKKyAgICB9CisKKyAgICBj
b25zdCBUJiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBhdChpbmRleCk7CisgICAgfQorCisgICAgVCYgZmlyc3QoKQorICAgIHsKKyAgICAgICAg
QVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIWlzRW1wdHkoKSk7CisgICAgICAgIHJl
dHVybiBhdCgwKTsKKyAgICB9CisgICAgY29uc3QgVCYgZmlyc3QoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIWlzRW1wdHkoKSk7CisgICAg
ICAgIHJldHVybiBhdCgwKTsKKyAgICB9CisgICAgCisgICAgLy8gVGhpcyBtYXkgY3Jhc2ggaWYg
cnVuIGNvbmN1cnJlbnRseSB0byBhcHBlbmQoKS4gSWYgeW91IHdhbnQgdG8gYWNjdXJhdGVseSB0
cmFjayB0aGUgc2l6ZSBvZgorICAgIC8vIHRoaXMgdmVjdG9yLCB5b3UnbGwgaGF2ZSB0byBkbyBp
dCB5b3Vyc2VsZiwgd2l0aCB5b3VyIG93biBmZW5jaW5nLgorICAgIFQmIGxhc3QoKQorICAgIHsK
KyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIWlzRW1wdHkoKSk7Cisg
ICAgICAgIHJldHVybiBhdChzaXplKCkgLSAxKTsKKyAgICB9CisgICAgY29uc3QgVCYgbGFzdCgp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTigh
aXNFbXB0eSgpKTsKKyAgICAgICAgcmV0dXJuIGF0KHNpemUoKSAtIDEpOworICAgIH0KKworICAg
IFQgdGFrZUxhc3QoKQorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT04oIWlzRW1wdHkoKSk7CisgICAgICAgIFQgcmVzdWx0ID0gV1RGTW92ZShsYXN0KCkpOwor
ICAgICAgICAtLW1fc2l6ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgIHZvaWQgYXBwZW5kKEFyZ3MmJi4uLiBhcmdz
KQorICAgIHsKKyAgICAgICAgKyttX3NpemU7CisgICAgICAgIGlmICghc2VnbWVudEV4aXN0c0Zv
cihtX3NpemUgLSAxKSkKKyAgICAgICAgICAgIGFsbG9jYXRlU2VnbWVudCgpOworICAgICAgICBu
ZXcgKE5vdE51bGwsICZsYXN0KCkpIFQoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgIFQmIGFsbG9jKEFyZ3Mm
Ji4uLiBhcmdzKQorICAgIHsKKyAgICAgICAgYXBwZW5kKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdz
KS4uLik7CisgICAgICAgIHJldHVybiBsYXN0KCk7CisgICAgfQorCisgICAgdm9pZCByZW1vdmVM
YXN0KCkKKyAgICB7CisgICAgICAgIGxhc3QoKS5+VCgpOworICAgICAgICAtLW1fc2l6ZTsKKyAg
ICB9CisKKyAgICB2b2lkIGdyb3coc2l6ZV90IHNpemUpCisgICAgeworICAgICAgICBpZiAoc2l6
ZSA9PSBtX3NpemUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEFTU0VSVChzaXplID4g
bV9zaXplKTsKKyAgICAgICAgZW5zdXJlU2VnbWVudHNGb3Ioc2l6ZSk7CisgICAgICAgIHNpemVf
dCBvbGRTaXplID0gbV9zaXplOworICAgICAgICBtX3NpemUgPSBzaXplOworICAgICAgICBmb3Ig
KHNpemVfdCBpID0gb2xkU2l6ZTsgaSA8IG1fc2l6ZTsgKytpKQorICAgICAgICAgICAgbmV3IChO
b3ROdWxsLCAmYXQoaSkpIFQoKTsKKyAgICB9CisKKyAgICBJdGVyYXRvciBiZWdpbigpCisgICAg
eworICAgICAgICByZXR1cm4gSXRlcmF0b3IoKnRoaXMsIDApOworICAgIH0KKworICAgIEl0ZXJh
dG9yIGVuZCgpCisgICAgeworICAgICAgICByZXR1cm4gSXRlcmF0b3IoKnRoaXMsIG1fc2l6ZSk7
CisgICAgfQorCitwcml2YXRlOgorICAgIHN0cnVjdCBTZWdtZW50IHsKKyAgICAgICAgV1RGX01B
S0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworICAgICAgICAgICAgCisgICAgICAgIFQgZW50cmll
c1tTZWdtZW50U2l6ZV07CisgICAgfTsKKworICAgIGJvb2wgc2VnbWVudEV4aXN0c0ZvcihzaXpl
X3QgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gaW5kZXggLyBTZWdtZW50U2l6ZSA8IG1f
bnVtU2VnbWVudHM7CisgICAgfQorCisgICAgU2VnbWVudCogc2VnbWVudEZvcihzaXplX3QgaW5k
ZXgpCisgICAgeworICAgICAgICByZXR1cm4gbV9zZWdtZW50c1tpbmRleCAvIFNlZ21lbnRTaXpl
XS5nZXQoKTsKKyAgICB9CisKKyAgICBzaXplX3Qgc3Vic2NyaXB0Rm9yKHNpemVfdCBpbmRleCkK
KyAgICB7CisgICAgICAgIHJldHVybiBpbmRleCAlIFNlZ21lbnRTaXplOworICAgIH0KKworICAg
IHZvaWQgZW5zdXJlU2VnbWVudHNGb3Ioc2l6ZV90IHNpemUpCisgICAgeworICAgICAgICBzaXpl
X3Qgc2VnbWVudENvdW50ID0gKG1fc2l6ZSArIFNlZ21lbnRTaXplIC0gMSkgLyBTZWdtZW50U2l6
ZTsKKyAgICAgICAgc2l6ZV90IG5lZWRlZFNlZ21lbnRDb3VudCA9IChzaXplICsgU2VnbWVudFNp
emUgLSAxKSAvIFNlZ21lbnRTaXplOworCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBzZWdtZW50
Q291bnQgPyBzZWdtZW50Q291bnQgLSAxIDogMDsgaSA8IG5lZWRlZFNlZ21lbnRDb3VudDsgKytp
KQorICAgICAgICAgICAgZW5zdXJlU2VnbWVudChpKTsKKyAgICB9CisKKyAgICB2b2lkIGVuc3Vy
ZVNlZ21lbnQoc2l6ZV90IHNlZ21lbnRJbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9XSVRI
X1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHNlZ21lbnRJbmRleCA8PSBtX251bVNlZ21lbnRzKTsKKyAg
ICAgICAgaWYgKHNlZ21lbnRJbmRleCA9PSBtX251bVNlZ21lbnRzKQorICAgICAgICAgICAgYWxs
b2NhdGVTZWdtZW50KCk7CisgICAgfQorCisgICAgdm9pZCBhbGxvY2F0ZVNlZ21lbnQoKQorICAg
IHsKKyAgICAgICAgbV9zZWdtZW50cy5ncm93KG1fbnVtU2VnbWVudHMgKyAxKTsKKyAgICAgICAg
bV9zZWdtZW50c1ttX251bVNlZ21lbnRzKytdID0gc3RkOjptYWtlX3VuaXF1ZTxTZWdtZW50Pigp
OworICAgIH0KKworICAgIHNpemVfdCBtX3NpemUgeyAwIH07CisgICAgQ29uY3VycmVudEJ1ZmZl
cjxzdGQ6OnVuaXF1ZV9wdHI8U2VnbWVudD4+IG1fc2VnbWVudHM7CisgICAgc2l6ZV90IG1fbnVt
U2VnbWVudHMgeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpD
b25jdXJyZW50VmVjdG9yOworCisjZW5kaWYgLy8gQ29uY3VycmVudFZlY3Rvcl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329129</attachid>
            <date>2017-12-12 11:18:34 -0800</date>
            <delta_ts>2017-12-12 12:20:57 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>79377</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI1NzcwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzNCBA
QAorMjAxNy0xMi0xMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBmbGFnIGEgY2VsbCBmb3IgdW5jb25kaXRpb25hbCBm
aW5hbGl6YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE4MDYzNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAg
ICAKKyAgICAgICAgVW5jb25kaXRpb25hbEZpbmFsaXplcnMgd2VyZSBhbm5veWluZyAtIHlvdSBo
YWQgdG8gYWxsb2NhdGUgdGhlbSBhbmQgeW91IGhhZCB0byBtYW5hZ2UgYQorICAgICAgICBnbG9i
YWwgbGlua2VkIGxpc3QgLSBidXQgdGhleSBoYWQgc29tZSBuaWNlIHByb3BlcnRpZXM6CisgICAg
ICAgIAorICAgICAgICAtIFlvdSBvbmx5IGRpZCB0aGUgaGFyZGVzdCB3b3JrIChjcmVhdGluZyB0
aGUgVW5jb25kaXRpb25hbEZpbmFsaXplcikgb24gZmlyc3QgR0Mgd2hlcmUgeW91CisgICAgICAg
ICAgc3Vydml2ZWQgYW5kIG5lZWRlZCBpdC4KKyAgICAgICAgICAgIC0+IEp1c3QgbmVlZGluZyBp
dCB3YXNuJ3QgZW5vdWdoLgorICAgICAgICAgICAgLT4gSnVzdCBzdXJ2aXZpbmcgd2Fzbid0IGVu
b3VnaC4KKyAgICAgICAgCisgICAgICAgIFRoZSBuZXcgQVBJIGJhc2VkIG9uIElzb1N1YnNwYWNl
cyBtZWFudCB0aGF0IGp1c3Qgc3Vydml2aW5nIHdhcyBlbm91Z2ggdG8gY2F1c2UgdW5jb25kaXRp
b25hbAorICAgICAgICBmaW5hbGl6ZXIgbG9naWMgdG8gYmUgaW52b2tlZC4gSSB0aGluayB0aGF0
J3Mgbm90IGdyZWF0LiBJbmZlcnJlZFR5cGUgZ290IGFyb3VuZCB0aGlzIGJ5CisgICAgICAgIG1h
a2luZyBJbmZlcnJlZFN0cnVjdHVyZSBhIGNlbGwsIGJ1dCB0aGlzIHdhcyBhIGdyb3NzIGhhY2su
IEZvciBvbmUsIGl0IG1lYW50IHRoYXQKKyAgICAgICAgSW5mZXJyZWRTdHJ1Y3R1cmUgd291bGQg
c3Vydml2ZSBkdXJpbmcgdGhlIEdDIGluIHdoaWNoIGl0cyBmaW5hbGl6ZXIgb2J2aWF0ZWQgdGhl
IG5lZWQgZm9yIGl0cworICAgICAgICBleGlzdGVuY2UuIEl0J3Mgbm90IHJlYWxseSBhbiBpZGlv
bSBJIHdhbnQgdXMgdG8gcmVwZWF0IGJlY2F1c2UgaXQgc291bmRzIGxpa2UgdGhlIHNvcnQgb2YK
KyAgICAgICAgdGhpbmcgdGhhdCB0dXJucyBvdXQgdG8gYmUgc3VidGx5IGJyb2tlbi4KKyAgICAg
ICAgCisgICAgICAgIFdlIHJlYWxseSBuZWVkIHRvIGhhdmUgYSB3YXkgb2YgaW5kaWNhdGluZyB3
aGVuIHlvdSBoYXZlIGVudGVyZWQgaW50byB0aGUgc3RhdGUgdGhhdCByZXF1aXJlcworICAgICAg
ICB5b3VyIHVuY29uZGl0aW9uYWwgZmluYWxpemVyIHRvIGJlIGludm9rZWQuIEJhc2ljYWxseSwg
d2Ugd2FudCB0byBiZSBhYmxlIHRvIHRyYWNrIHRoZSBzZXQgb2YKKyAgICAgICAgb2JqZWN0cyB0
aGF0IG5lZWQgdW5jb25kaXRpb25hbCBmaW5hbGl6ZXJzLiBPbmx5IHRoZSBzdWJzZXQgb2YgdGhh
dCBzZXQgdGhhdCBvdmVybGFwcyB3aXRoIHRoZQorICAgICAgICBzZXQgb2YgbWFya2VkIG9iamVj
dHMgbmVlZHMgdG8gYmUgYWNjdXJhdGUuIFRoZSBlYXNpZXN0IHdheSB0byBkbyB0aGlzIGlzIGEg
aGllcmFyY2h5IG9mCisgICAgICAgIGJpdHZlY3RvcnM6IG9uZSB0byBzYXkgd2hpY2ggTWFya2Vk
QmxvY2tzIGhhdmUgb2JqZWN0cyB0aGF0IGhhdmUgdW5jb25kaXRpb25hbCBmaW5hbGl6ZXJzLCBh
bmQKKyAgICAgICAgYW5vdGhlciBsZXZlbCB0byBzYXkgd2hpY2ggYXRvbXMgd2l0aGluIGEgTWFy
a2VkQmxvY2sgaGF2ZSB1bmNvbmRpdGlvbmFsIGZpbmFsaXplcnMuCisgICAgICAgIAorICAgICAg
ICBUaGlzIGNoYW5nZSBpbnRyb2R1Y2VzIElzb0NlbGxTZXQsIHdoaWNoIGNvdXBsZXMgaXRzZWxm
IHRvIHRoZSBNYXJrZWRBbGxvY2F0b3Igb2Ygc29tZQorICAgICAgICBJc29TdWJzcGFjZSB0byBh
bGxvdyBtYWludGFpbmluZyBhIHNldCBvZiBvYmplY3RzICh3ZWxsLCBjZWxscyAtIHlvdSBjb3Vs
ZCBkbyB0aGlzIHdpdGgKKyAgICAgICAgYXV4aWxpYXJpZXMpIHRoYXQgYmVsb25nIHRvIHRoYXQg
SXNvU3Vic3BhY2UuIEl0J2xsIGhhdmUgdW5kZWZpbmVkIGJlaGF2aW9yIGlmIHlvdSB0cnkgdG8K
KyAgICAgICAgYWRkL3JlbW92ZS9jb250YWlucyBhbiBvYmplY3QgdGhhdCBpc24ndCBpbiB0aGF0
IElzb1N1YnNwYWNlLiBGb3Igb2JqZWN0cyBpbiB0aGF0IHN1YnNwYWNlLAorICAgICAgICB5b3Ug
Y2FuIGFkZC9yZW1vdmUvY29udGFpbnMgYW5kIGZvckVhY2hNYXJrZWRDZWxsLiBUaGUgY29zdCBv
ZiBlYWNoIElzb0NlbGxTZXQgaXMgYXQgd29yc3QKKyAgICAgICAgYWJvdXQgMC44JSBpbmNyZWFz
ZSBpbiBzaXplIHRvIGV2ZXJ5IG9iamVjdCBpbiB0aGUgc3Vic3BhY2UgdGhhdCB0aGUgc2V0IGlz
IGF0dGFjaGVkIHRvLiBTbywKKyAgICAgICAgaXQgbWFrZXMgc2Vuc2UgdG8gaGF2ZSBhIGhhbmRm
dWwgcGVyIHN1YnNwYWNlIG1heC4gVGhpcyBjaGFuZ2Ugb25seSBuZWVkcyBvbmUgcGVyIHN1YnNw
YWNlLAorICAgICAgICBidXQgeW91IGNvdWxkIGltYWdpbmUgbW9yZSBpZiB3ZSBkbyB0aGlzIGZv
ciBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLgorICAgICAgICAKKyAgICAgICAgVG8gYWJzb2x1dGVs
eSBtaW5pbWl6ZSB0aGUgcG9zc2liaWxpdHkgdGhhdCB0aGlzIGluY3VycyBjb3N0cywgdGhlIGFk
ZC9yZW1vdmUvY29udGFpbnMKKyAgICAgICAgZnVuY3Rpb25zIGNhbiBiZSB1c2VkIGZyb20gYW55
IHRocmVhZCBzbyBsb25nIGFzIGZvckVhY2hNYXJrZWRDZWxsIGlzbid0IHJ1bm5pbmcuIFRoaXMg
bWVhbnMKKyAgICAgICAgdGhhdCBJbmZlcnJlZFR5cGUgb25seSBuZWVkcyB0byBhZGQgaXRzZWxm
IHRvIHRoZSBzZXQgZHVyaW5nIHZpc2l0Q2hpbGRyZW4uIFRodXMsIGl0IG5lZWRzIHRvCisgICAg
ICAgIGJvdGggc3Vydml2ZSBhbmQgbmVlZCBpdCBmb3IgdGhlIGhhcmRlc3Qgd29yayB0byB0YWtl
IHBsYWNlLiBUaGUgd29yayBvZiBhZGRpbmcgZG9lcyBpbnZvbHZlCisgICAgICAgIGEgZ25hcmx5
IGxvYWQgY2hhaW4gdGhhdCBlbmRzIGluIGEgQ0FTOiBsb2FkIGJsb2NrIGhhbmRsZSBmcm9tIGJs
b2NrLCBsb2FkIGluZGV4LCBsb2FkCisgICAgICAgIHNlZ21lbnQsIGxvYWQgYml0dmVjdG9yLCBs
b2FkIGJpdCAtPiBpZiBub3Qgc2V0LCB0aGVuIENBUy4gVGhhdCdzIGZpdmUgZGVwZW5kZW50IGxv
YWRzIQorICAgICAgICBIb3dldmVyLCBpdCdzIHBlcmZlY3QgZm9yIHJ1bm5pbmcgaW4gcGFyYWxs
ZWwgc2luY2UgdGhlIG9ubHkgd3JpdGUgb3BlcmF0aW9ucyBhcmUgdG8gd2lkZWx5CisgICAgICAg
IGRpc3BlcnNlZCBjYWNoZSBsaW5lcyB0aGF0IGNvbnRhaW4gdGhlIGJpdHMgdW5kZXJseWluZyB0
aGUgc2V0LgorICAgICAgICAKKyAgICAgICAgVGhlIGJlc3QgcGFydCBpcyBob3cgZm9yRWFjaE1h
cmtlZENlbGwgd29ya3MuIFRoYXQgc2tpcHMgYmxvY2tzIHRoYXQgZG9uJ3QgaGF2ZSBhbnkgb2Jq
ZWN0cworICAgICAgICB0aGF0IG5lZWQgdW5jb25kaXRpb25hbCBmaW5hbGl6ZXJzLCBhbmQgb25s
eSB0b3VjaGVzIHRoZSBtZW1vcnkgb2YgbWFya2VkIG9iamVjdHMgdGhhdCBoYXZlCisgICAgICAg
IHRoZSB1bmNvbmRpdGlvbmFsIGZpbmFsaXplciBiaXQgc2V0LiBJdCB3aWxsIHdhbGsgdGhvc2Ug
b2JqZWN0cyBpbiByb3VnaGx5IGFkZHJlc3Mgb3JkZXIuIEkKKyAgICAgICAgcHJldmlvdXNseSBm
b3VuZCB0aGF0IHRoaXMgc3BlZWRzIHVwIHdhbGtpbmcgb3ZlciBhIGxvdCBvZiBvYmplY3RzIHdo
ZW4gSSBtYWRlIHNpbWlsYXIgY2hhbmdlcworICAgICAgICBmb3IgRE9NIEdDIChjYWxsaW5nIHZp
c2l0QWRkaXRpb25hbENoaWxkcmVuIHZpYSBmb3JFYWNoTWFya2VkQ2VsbCByYXRoZXIgdGhhbiBi
eSB3YWxraW5nIGEKKyAgICAgICAgSGFzaFNldCkuCisgICAgICAgIAorICAgICAgICBUaGlzIGNo
YW5nZSBtYWtlcyBJbmZlcnJlZFN0cnVjdHVyZSBiZSBhIG1hbGxvYyBvYmplY3QgYWdhaW4sIGJ1
dCBub3cgaXQncyBpbiBhbiBJc29IZWFwLgorICAgICAgICAKKyAgICAgICAgTXkgZXhwZWN0YXRp
b24gZm9yIHRoaXMgY2hhbmdlIGlzIHRoYXQgaXQncyBwZXJmLW5ldXRyYWwuIExvbmctdGVybSwg
aXQgZ2l2ZXMgdXMgYSBwYXRoCisgICAgICAgIGZvcndhcmQgZm9yIGVsaW1pbmF0aW5nIFVuY29u
ZGl0aW9uYWxGaW5hbGl6ZXIgYW5kIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIgd2hpbGUgdXNpbmcK
KyAgICAgICAgSXNvU3Vic3BhY2UgaW4gbW9yZSBwbGFjZXMuCisKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIGhlYXAvQXRvbUluZGljZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkF0
b21JbmRpY2VzOjpBdG9tSW5kaWNlcyk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAg
ICAgKEpTQzo6SGVhcDo6ZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycyk6CisgICAgICAg
ICogaGVhcC9IZWFwLmg6CisgICAgICAgICogaGVhcC9Jc29DZWxsU2V0LmNwcDogQWRkZWQuCisg
ICAgICAgIChKU0M6Oklzb0NlbGxTZXQ6Oklzb0NlbGxTZXQpOgorICAgICAgICAoSlNDOjpJc29D
ZWxsU2V0Ojp+SXNvQ2VsbFNldCk6CisgICAgICAgIChKU0M6Oklzb0NlbGxTZXQ6OmFkZFNsb3cp
OgorICAgICAgICAoSlNDOjpJc29DZWxsU2V0OjpkaWRSZXNpemVCaXRzKToKKyAgICAgICAgKEpT
Qzo6SXNvQ2VsbFNldDo6ZGlkUmVtb3ZlQmxvY2spOgorICAgICAgICAoSlNDOjpJc29DZWxsU2V0
Ojpzd2VlcFRvRnJlZUxpc3QpOgorICAgICAgICAqIGhlYXAvSXNvQ2VsbFNldC5oOiBBZGRlZC4K
KyAgICAgICAgKiBoZWFwL0lzb0NlbGxTZXRJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlND
OjpJc29DZWxsU2V0OjphZGQpOgorICAgICAgICAoSlNDOjpJc29DZWxsU2V0OjpyZW1vdmUpOgor
ICAgICAgICAoSlNDOjpJc29DZWxsU2V0Ojpjb250YWlucyBjb25zdCk6CisgICAgICAgIChKU0M6
Oklzb0NlbGxTZXQ6OmZvckVhY2hNYXJrZWRDZWxsKToKKyAgICAgICAgKiBoZWFwL0lzb1N1YnNw
YWNlLmNwcDoKKyAgICAgICAgKEpTQzo6SXNvU3Vic3BhY2U6OmRpZFJlc2l6ZUJpdHMpOgorICAg
ICAgICAoSlNDOjpJc29TdWJzcGFjZTo6ZGlkUmVtb3ZlQmxvY2spOgorICAgICAgICAoSlNDOjpJ
c29TdWJzcGFjZTo6ZGlkQmVnaW5Td2VlcGluZ1RvRnJlZUxpc3QpOgorICAgICAgICAqIGhlYXAv
SXNvU3Vic3BhY2UuaDoKKyAgICAgICAgKiBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHA6CisgICAg
ICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWRkQmxvY2spOgorICAgICAgICAoSlNDOjpNYXJr
ZWRBbGxvY2F0b3I6OnJlbW92ZUJsb2NrKToKKyAgICAgICAgKiBoZWFwL01hcmtlZEFsbG9jYXRv
ci5oOgorICAgICAgICAqIGhlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oOgorICAgICAgICAq
IGhlYXAvTWFya2VkQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxl
Ojpzd2VlcCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzRW1wdHkpOiBE
ZWxldGVkLgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suaDoKKyAgICAgICAgKEpTQzo6TWFy
a2VkQmxvY2s6Om1hcmtzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRs
ZTo6bmV3bHlBbGxvY2F0ZWQgY29uc3QpOgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2tJbmxp
bmVzLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzQWxsb2NhdGVkKToK
KyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6aXNFbXB0eSk6CisgICAgICAgIChK
U0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OmVtcHR5TW9kZSk6CisgICAgICAgIChKU0M6Ok1hcmtl
ZEJsb2NrOjpIYW5kbGU6OmZvckVhY2hNYXJrZWRDZWxsKToKKyAgICAgICAgKiBoZWFwL1N1YnNw
YWNlLmNwcDoKKyAgICAgICAgKEpTQzo6U3Vic3BhY2U6OmRpZFJlc2l6ZUJpdHMpOgorICAgICAg
ICAoSlNDOjpTdWJzcGFjZTo6ZGlkUmVtb3ZlQmxvY2spOgorICAgICAgICAoSlNDOjpTdWJzcGFj
ZTo6ZGlkQmVnaW5Td2VlcGluZ1RvRnJlZUxpc3QpOgorICAgICAgICAqIGhlYXAvU3Vic3BhY2Uu
aDoKKyAgICAgICAgKiBoZWFwL1N1YnNwYWNlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTdWJz
cGFjZTo6Zm9yRWFjaE1hcmtlZENlbGwpOgorICAgICAgICAqIHJ1bnRpbWUvSW5mZXJyZWRTdHJ1
Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFN0cnVjdHVyZTo6SW5mZXJyZWRTdHJ1
Y3R1cmUpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFN0cnVjdHVyZTo6Y3JlYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6SW5mZXJyZWRTdHJ1Y3R1cmU6OmRlc3Ryb3kpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpJbmZlcnJlZFN0cnVjdHVyZTo6Y3JlYXRlU3RydWN0dXJlKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6SW5mZXJyZWRTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4pOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpJbmZlcnJlZFN0cnVjdHVyZTo6ZmluYWxpemVVbmNvbmRpdGlv
bmFsbHkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmZlcnJlZFN0cnVjdHVyZTo6ZmluaXNo
Q3JlYXRpb24pOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1cmUu
aDoKKyAgICAgICAgKiBydW50aW1lL0luZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludC5jcHA6Cisg
ICAgICAgIChKU0M6OkluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKToK
KyAgICAgICAgKiBydW50aW1lL0luZmVycmVkVHlwZS5jcHA6CisgICAgICAgIChKU0M6OkluZmVy
cmVkVHlwZTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlwZTo6d2ls
bFN0b3JlVmFsdWVTbG93KToKKyAgICAgICAgKEpTQzo6SW5mZXJyZWRUeXBlOjptYWtlVG9wU2xv
dyk6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlwZTo6c2V0KToKKyAgICAgICAgKEpTQzo6SW5m
ZXJyZWRUeXBlOjpyZW1vdmVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6
OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KToKKyAgICAgICAgKiBydW50aW1lL0luZmVycmVkVHlw
ZS5oOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgor
ICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKwogMjAxNy0xMi0xMSAgU2FhbSBCYXJhdGkgIDxzYmFy
YXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBXZSBuZWVkIHRvIGRpc2FibGVDYWNoaW5nKCkgaW4g
RXJyb3JJbnN0YW5jZSB3aGVuIHdlIG1hdGVyaWFsaXplIHByb3BlcnRpZXMKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDIyNTc3MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNDk1LDYgKzQ5NSw3IEBAIGhl
YXAvSGVhcFNuYXBzaG90LmNwcAogaGVhcC9IZWFwU25hcHNob3RCdWlsZGVyLmNwcAogaGVhcC9J
bmNyZW1lbnRhbFN3ZWVwZXIuY3BwCiBoZWFwL0lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3Bw
CitoZWFwL0lzb0NlbGxTZXQuY3BwCiBoZWFwL0lzb1N1YnNwYWNlLmNwcAogaGVhcC9KSVRTdHVi
Um91dGluZVNldC5jcHAKIGhlYXAvTGFyZ2VBbGxvY2F0aW9uLmNwcApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyNTc3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC00NzQsNiArNDc0LDEwIEBACiAJCTBGQjE3NjYzMTk2QjhGOUUwMDkxMDUyQSAvKiBE
RkdQdXJlVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGQjE3NjVGMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuaCAqLzsgfTsKIAkJ
MEZCMzg3OEUxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpckJsb2NrV29ya2xpc3QuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjM4NzhCMUJGQkM0NEQwMEUz
QUIxRSAvKiBBaXJCbG9ja1dvcmtsaXN0LmggKi87IH07CiAJCTBGQjM4NzkwMUJGQkM0NEQwMEUz
QUIxRSAvKiBBaXJPcHRpbWl6ZUJsb2NrT3JkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjM4NzhEMUJGQkM0NEQwMEUzQUIxRSAvKiBBaXJPcHRp
bWl6ZUJsb2NrT3JkZXIuaCAqLzsgfTsKKwkJMEZCNDY3N0YxRkREQTZFOTAwM0ZDQjA5IC8qIEF0
b21JbmRpY2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkI0Njc3RTFGRERBNkU1MDAzRkNCMDkgLyogQXRvbUluZGljZXMuaCAqLzsgfTsKKwkJMEZC
NDY3ODAxRkREQTZGMTAwM0ZDQjA5IC8qIElzb0NlbGxTZXQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjQ2NzdEMUZEREE2RDkwMDNGQ0IwOSAvKiBJ
c29DZWxsU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEZCNDY3ODExRkREQTZGNzAwM0ZDQjA5IC8qIElzb0NlbGxTZXRJbmxpbmVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0Njc3QjFGRERB
NkQ4MDAzRkNCMDkgLyogSXNvQ2VsbFNldElubGluZXMuaCAqLzsgfTsKKwkJMEZCNDY3ODUxRkRG
QjQ1NDAwM0ZDQjA5IC8qIEluZmVycmVkVHlwZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjQ2Nzg0MUZERkI0NTIwMDNGQ0IwOSAvKiBJ
bmZlcnJlZFR5cGVJbmxpbmVzLmggKi87IH07CiAJCTBGQjQ3NjdFMUQ5OUFFQTkwMDhFQTZDQiAv
KiBHQ0RlZmVycmFsQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZCNDc2N0MxRDk5QUVBNzAwOEVBNkNCIC8qIEdDRGVmZXJyYWxDb250ZXh0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZC
NDc2N0YxRDk5QUVBRDAwOEVBNkNCIC8qIEdDRGVmZXJyYWxDb250ZXh0SW5saW5lcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNDc2N0QxRDk5QUVB
NzAwOEVBNkNCIC8qIEdDRGVmZXJyYWxDb250ZXh0SW5saW5lcy5oICovOyB9OwogCQkwRkI0RkI3
NDFCQzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0RkI3MTFCQzg0MzE0MDAyNUNBNUEgLyog
RlRMTGF6eVNsb3dQYXRoLmggKi87IH07CkBAIC0yNTYyLDYgKzI1NjYsMTEgQEAKIAkJMEZCMzg3
OTExQkZEMzFBMTAwRTNBQjFFIC8qIEZUTENvbXBpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gRlRMQ29tcGlsZS5jcHA7IHBhdGggPSBmdGwvRlRMQ29tcGlsZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjQxNTgzMUQ3OEY5ODIwMERGOEQw
OSAvKiBBcnJheUNvbnZlbnRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEFycmF5Q29udmVudGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkI0MzhBMjE5MjcwQjFEMDBFMUZCQzkgLyogU3RydWN0dXJlU2V0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cnVjdHVyZVNldC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGQjQ2NzdCMUZEREE2RDgwMDNGQ0IwOSAvKiBJc29DZWxsU2V0
SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJc29DZWxsU2V0SW5s
aW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI0Njc3QzFGRERBNkQ5MDAz
RkNCMDkgLyogSXNvQ2VsbFNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBJc29DZWxsU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCNDY3
N0QxRkREQTZEOTAwM0ZDQjA5IC8qIElzb0NlbGxTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSXNvQ2VsbFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkI0Njc3RTFGRERBNkU1MDAzRkNCMDkgLyogQXRvbUluZGljZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQXRvbUluZGljZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZCNDY3ODQxRkRGQjQ1MjAwM0ZDQjA5IC8qIEluZmVycmVkVHlwZUlubGluZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5mZXJyZWRUeXBlSW5saW5lcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0NzY3QzFEOTlBRUE3MDA4RUE2Q0IgLyog
R0NEZWZlcnJhbENvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR0NE
ZWZlcnJhbENvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNDc2N0Qx
RDk5QUVBNzAwOEVBNkNCIC8qIEdDRGVmZXJyYWxDb250ZXh0SW5saW5lcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBHQ0RlZmVycmFsQ29udGV4dElubGluZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNEI1MTAxNkIzQTk2NDAwM0Y2OTZCIC8qIERGR01p
bmlmaWVkSUQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTWluaWZpZWRJ
RC5oOyBwYXRoID0gZGZnL0RGR01pbmlmaWVkSUQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTU1MjUsNiArNTUzNCw3IEBACiAJCQkJMEY5NjMwMzUxRDQxOTJDMzAwNTYwOUQ5IC8q
IEFsbG9jYXRvckF0dHJpYnV0ZXMuY3BwICovLAogCQkJCTBGOTYzMDM2MUQ0MTkyQzMwMDU2MDlE
OSAvKiBBbGxvY2F0b3JBdHRyaWJ1dGVzLmggKi8sCiAJCQkJMEYzMENCNUQxRkNFNDZCNDAwNEI1
MzIzIC8qIEFsbG9jYXRvckZvck1vZGUuaCAqLywKKwkJCQkwRkI0Njc3RTFGRERBNkU1MDAzRkNC
MDkgLyogQXRvbUluZGljZXMuaCAqLywKIAkJCQkwRkRFODdGODFERkQwQzZEMDA2NEMzOTAgLyog
Q2VsbENvbnRhaW5lci5jcHAgKi8sCiAJCQkJMEYwNzBBNDIxRDU0M0E4OTAwNkU3MjMyIC8qIENl
bGxDb250YWluZXIuaCAqLywKIAkJCQkwRjA3MEE0MzFENTQzQTg5MDA2RTcyMzIgLyogQ2VsbENv
bnRhaW5lcklubGluZXMuaCAqLywKQEAgLTU2MTEsNiArNTYyMSw5IEBACiAJCQkJQzI1RjhCQ0Mx
NTc1NDRBOTAwMjQ1QjcxIC8qIEluY3JlbWVudGFsU3dlZXBlci5oICovLAogCQkJCTBGRENFMTJG
MUZCMTFEOUQwMDZGMzkwMSAvKiBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcCAqLywKIAkJ
CQkwRkRDRTEzMDFGQjExRDlEMDA2RjM5MDEgLyogSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5o
ICovLAorCQkJCTBGQjQ2NzdDMUZEREE2RDkwMDNGQ0IwOSAvKiBJc29DZWxsU2V0LmNwcCAqLywK
KwkJCQkwRkI0Njc3RDFGRERBNkQ5MDAzRkNCMDkgLyogSXNvQ2VsbFNldC5oICovLAorCQkJCTBG
QjQ2NzdCMUZEREE2RDgwMDNGQ0IwOSAvKiBJc29DZWxsU2V0SW5saW5lcy5oICovLAogCQkJCTBG
RENFMTJDMUZBRkI0REUwMDZGMzkwMSAvKiBJc29TdWJzcGFjZS5jcHAgKi8sCiAJCQkJMEZEQ0Ux
MkIxRkFGQjRERTAwNkYzOTAxIC8qIElzb1N1YnNwYWNlLmggKi8sCiAJCQkJMEY3NjZEMjkxNUE4
Q0MzNDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmNwcCAqLywKQEAgLTY0ODYsNiArNjQ5
OSw3IEBACiAJCQkJMEZCRjkyQjcxRkQ3NkZGQzAwQUMyOEE4IC8qIEluZmVycmVkU3RydWN0dXJl
V2F0Y2hwb2ludC5oICovLAogCQkJCTBGMEE3NTIwMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJl
ZFR5cGUuY3BwICovLAogCQkJCTBGMEE3NTIxMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5
cGUuaCAqLywKKwkJCQkwRkI0Njc4NDFGREZCNDUyMDAzRkNCMDkgLyogSW5mZXJyZWRUeXBlSW5s
aW5lcy5oICovLAogCQkJCTBGRkM5MjBGMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVU
YWJsZS5jcHAgKi8sCiAJCQkJMEZGQzkyMTAxQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlw
ZVRhYmxlLmggKi8sCiAJCQkJMEZGOEJERTgxQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVkVmFs
dWUuY3BwICovLApAQCAtNzk5Nyw2ICs4MDExLDcgQEAKIAkJCQkwRkVDODU3MjFCREFDREM3MDA4
MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQzYzQkMxRTYz
NDQwQzAwQzEzODM5IC8qIEFpckJsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkIzODc4RTFCRkJDNDREMDBFM0FCMUUgLyogQWlyQmxvY2tXb3JrbGlzdC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZCNDY3ODExRkREQTZGNzAwM0ZDQjA5IC8qIElzb0NlbGxTZXRJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc5QzdDQTFFNzRDOTNCMDBFQjM0RDEgLyogQWlyQnJl
YWtDcml0aWNhbEVkZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYxODMyQTFDNDVCRjA3MDA3
MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVD
ODU3NDFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggaW4gSGVhZGVycyAqLywK
QEAgLTg3NzgsNiArODc5Myw3IEBACiAJCQkJNzAxMTNENEMxQThEQjA5MzAwMzg0OEM0IC8qIEl0
ZXJhdG9yT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzBEQzNFMEExQjJERjJDNzAw
MDU0Mjk5IC8qIEl0ZXJhdG9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQx
MzBFMTZGNUNEMDBCMzQ0NjAgLyogSmF2YVNjcmlwdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZC
NDY3ODUxRkRGQjQ1NDAwM0ZDQjA5IC8qIEluZmVycmVkVHlwZUlubGluZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE1MDNGQTFBMTg4RTBGQjAwMDExMEYxNCAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1l
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNDBFMTZGNUNEMDBCMzQ0NjAgLyogSmF2YVNj
cmlwdENvcmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDE1MEUxNkY1Q0QwMEIzNDQ2MCAv
KiBKYXZhU2NyaXB0Q29yZVByZWZpeC5oIGluIEhlYWRlcnMgKi8sCkBAIC04OTczLDYgKzg5ODks
NyBAQAogCQkJCUFEMkZDQkU1MURCNThEQUQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUFERTgwMjk5MUUwOEYxREUwMDU4REU3OCAvKiBKU1dl
YkFzc2VtYmx5TGlua0Vycm9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JFNzFEQjU4REFE
MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseU1lbW9yeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZC
NDY3N0YxRkREQTZFOTAwM0ZDQjA5IC8qIEF0b21JbmRpY2VzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBRDJGQ0MwNTFEQjU4REFEMDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseU1vZHVsZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQUQyRkNCRTkxREI1OERBRDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlS
dW50aW1lRXJyb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQkVCMURCNThEQUQwMEIzRTcz
NiAvKiBKU1dlYkFzc2VtYmx5VGFibGUuaCBpbiBIZWFkZXJzICovLApAQCAtOTI1OSw2ICs5Mjc2
LDcgQEAKIAkJCQlDMjBCQTkyRDE2QkIxQzE1MDBCM0FFQTIgLyogU3RydWN0dXJlUmFyZURhdGFJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkzMzJBNTE0Q0E3REREMDA4NUYzQzYgLyog
U3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc2NkQzOTE1QUU0QTFGMDA4RjM2
M0UgLyogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEZCNDY3ODAxRkREQTZGMTAwM0ZDQjA5IC8qIElzb0NlbGxTZXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDQ0YwRDA4MEVGMEFBQjkwMDQxM0M4RiAvKiBTdHJ1Y3R1cmVTdHViSW5mby5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkM5MDQxNDgwRUI5MjUwOTAwRkUyNkZBIC8qIFN0cnVjdHVyZVRy
YW5zaXRpb25UYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3REYxMzcxRTI5NzBFMTAwOTU5
NTFCIC8qIFN1YnNwYWNlLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0F0b21JbmRpY2VzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQXRvbUluZGljZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9BdG9tSW5kaWNlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsKKworc3Ry
dWN0IEF0b21JbmRpY2VzIHsKKyAgICBBdG9tSW5kaWNlcygpIHsgfQorICAgIAorICAgIEF0b21J
bmRpY2VzKEhlYXBDZWxsKiBjZWxsKQorICAgICAgICA6IGJsb2NrKE1hcmtlZEJsb2NrOjpibG9j
a0ZvcihjZWxsKSkKKyAgICAgICAgLCBibG9ja0luZGV4KGJsb2NrLT5oYW5kbGUoKS5pbmRleCgp
KQorICAgICAgICAsIGF0b21OdW1iZXIoYmxvY2stPmF0b21OdW1iZXIoY2VsbCkpCisgICAgewor
ICAgIH0KKyAgICAKKyAgICBNYXJrZWRCbG9jayogYmxvY2s7CisgICAgc2l6ZV90IGJsb2NrSW5k
ZXg7CisgICAgc2l6ZV90IGF0b21OdW1iZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIyNTc3MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MCw4ICs0MCw5IEBACiAjaW5jbHVkZSAiSGVhcFNuYXBzaG90LmgiCiAjaW5jbHVkZSAiSGVhcFZl
cmlmaWVyLmgiCiAjaW5jbHVkZSAiSW5jcmVtZW50YWxTd2VlcGVyLmgiCi0jaW5jbHVkZSAiSW5m
ZXJyZWRTdHJ1Y3R1cmUuaCIKKyNpbmNsdWRlICJJbmZlcnJlZFR5cGVJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiSW50ZXJwcmV0ZXIuaCIKKyNpbmNsdWRlICJJc29DZWxsU2V0SW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkpJVFN0dWJSb3V0aW5lU2V0LmgiCiAjaW5jbHVkZSAiSklUV29ya2xpc3QuaCIKICNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCkBAIC01NTIsMTggKzU1MywxOCBAQCB2b2lkIEhlYXA6OmFk
ZFJlZmVyZW5jZShKU0NlbGwqIGNlbGwsIEFyCiAgICAgfQogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBDZWxsVHlwZT4KLXZvaWQgSGVhcDo6ZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycyhT
dWJzcGFjZSYgc3Vic3BhY2UpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgdHlwZW5hbWUg
Q2VsbFNldD4KK3ZvaWQgSGVhcDo6ZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycyhDZWxs
U2V0JiBjZWxsU2V0KQogewotICAgIHN1YnNwYWNlLmZvckVhY2hNYXJrZWRDZWxsKAorICAgIGNl
bGxTZXQuZm9yRWFjaE1hcmtlZENlbGwoCiAgICAgICAgIFsmXSAoSGVhcENlbGwqIGNlbGwsIEhl
YXBDZWxsOjpLaW5kKSB7Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxDZWxsVHlwZSo+KGNlbGwp
LT5maW5hbGl6ZVVuY29uZGl0aW9uYWxseSgqdm0oKSk7CisgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Q2VsbFR5cGUqPihjZWxsKS0+ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKnZtKCkp
OwogICAgICAgICB9KTsKIH0KIAogdm9pZCBIZWFwOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5h
bGl6ZXJzKCkKIHsKLSAgICBmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzPEluZmVycmVk
U3RydWN0dXJlPih2bSgpLT5pbmZlcnJlZFN0cnVjdHVyZVNwYWNlKTsKKyAgICBmaW5hbGl6ZVVu
Y29uZGl0aW9uYWxGaW5hbGl6ZXJzPEluZmVycmVkVHlwZT4odm0oKS0+aW5mZXJyZWRUeXBlc1dp
dGhGaW5hbGl6ZXJzKTsKICAgICAKICAgICB3aGlsZSAobV91bmNvbmRpdGlvbmFsRmluYWxpemVy
cy5oYXNOZXh0KCkpIHsKICAgICAgICAgVW5jb25kaXRpb25hbEZpbmFsaXplciogZmluYWxpemVy
ID0gbV91bmNvbmRpdGlvbmFsRmluYWxpemVycy5yZW1vdmVOZXh0KCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyMjU3NzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5Niw4ICs0OTYsOCBAQCBwcml2
YXRlOgogICAgIHZvaWQgbm90aWZ5SW5jcmVtZW50YWxTd2VlcGVyKCk7CiAgICAgdm9pZCBoYXJ2
ZXN0V2Vha1JlZmVyZW5jZXMoKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlPgot
ICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycyhTdWJzcGFjZSYpOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCB0eXBlbmFtZSBDZWxsU2V0PgorICAgIHZvaWQg
ZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycyhDZWxsU2V0Jik7CiAgICAgCiAgICAgdm9p
ZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKCk7CiAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSXNvQ2VsbFNldC5oIgorCisjaW5j
bHVkZSAiTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5s
aW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworSXNvQ2VsbFNldDo6SXNvQ2VsbFNldChJc29T
dWJzcGFjZSYgc3Vic3BhY2UpCisgICAgOiBtX3N1YnNwYWNlKHN1YnNwYWNlKQoreworICAgIHNp
emVfdCBzaXplID0gc3Vic3BhY2UubV9hbGxvY2F0b3IubV9ibG9ja3Muc2l6ZSgpOworICAgIG1f
YmxvY2tzV2l0aEJpdHMucmVzaXplKHNpemUpOworICAgIG1fYml0cy5ncm93KHNpemUpOworICAg
IHN1YnNwYWNlLm1fY2VsbFNldHMuYXBwZW5kKHRoaXMpOworfQorCitJc29DZWxsU2V0Ojp+SXNv
Q2VsbFNldCgpCit7CisgICAgaWYgKGlzT25MaXN0KCkpCisgICAgICAgIEJhc2ljUmF3U2VudGlu
ZWxOb2RlPElzb0NlbGxTZXQ+OjpyZW1vdmUoKTsKK30KKworTkVWRVJfSU5MSU5FIEJpdG1hcDxN
YXJrZWRCbG9jazo6YXRvbXNQZXJCbG9jaz4qIElzb0NlbGxTZXQ6OmFkZFNsb3coc2l6ZV90IGJs
b2NrSW5kZXgpCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3N1YnNwYWNlLm1fYWxs
b2NhdG9yLm1fYml0dmVjdG9yTG9jayk7CisgICAgYXV0byYgYml0c1B0clJlZiA9IG1fYml0c1ti
bG9ja0luZGV4XTsKKyAgICBhdXRvKiBiaXRzID0gYml0c1B0clJlZi5nZXQoKTsKKyAgICBpZiAo
IWJpdHMpIHsKKyAgICAgICAgYml0c1B0clJlZiA9IHN0ZDo6bWFrZV91bmlxdWU8Qml0bWFwPE1h
cmtlZEJsb2NrOjphdG9tc1BlckJsb2NrPj4oKTsKKyAgICAgICAgYml0cyA9IGJpdHNQdHJSZWYu
Z2V0KCk7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgIG1fYmxvY2tz
V2l0aEJpdHNbYmxvY2tJbmRleF0gPSB0cnVlOworICAgIH0KKyAgICByZXR1cm4gYml0czsKK30K
Kwordm9pZCBJc29DZWxsU2V0OjpkaWRSZXNpemVCaXRzKHNpemVfdCBuZXdTaXplKQoreworICAg
IG1fYmxvY2tzV2l0aEJpdHMucmVzaXplKG5ld1NpemUpOworICAgIG1fYml0cy5ncm93KG5ld1Np
emUpOworfQorCit2b2lkIElzb0NlbGxTZXQ6OmRpZFJlbW92ZUJsb2NrKHNpemVfdCBibG9ja0lu
ZGV4KQoreworICAgIG1fYmxvY2tzV2l0aEJpdHNbYmxvY2tJbmRleF0gPSBmYWxzZTsKKyAgICBt
X2JpdHNbYmxvY2tJbmRleF0gPSBudWxscHRyOworfQorCit2b2lkIElzb0NlbGxTZXQ6OnN3ZWVw
VG9GcmVlTGlzdChNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jaykKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVCghYmxvY2stPmlzQWxsb2NhdGVkKCkpOworICAgIAorICAgIGlmICghbV9ibG9ja3NXaXRo
Qml0c1tibG9jay0+aW5kZXgoKV0pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBXVEY6Omxv
YWRMb2FkRmVuY2UoKTsKKyAgICAKKyAgICBpZiAoIW1fYml0c1tibG9jay0+aW5kZXgoKV0pIHsK
KyAgICAgICAgZGF0YUxvZygiRkFUQUw6IGZvciBibG9jayBpbmRleCAiLCBibG9jay0+aW5kZXgo
KSwgIjpcbiIpOworICAgICAgICBkYXRhTG9nKCJCbG9ja3Mgd2l0aCBiaXRzIHNheXM6ICIsICEh
bV9ibG9ja3NXaXRoQml0c1tibG9jay0+aW5kZXgoKV0sICJcbiIpOworICAgICAgICBkYXRhTG9n
KCJCaXRzIHNheXM6ICIsIFJhd1BvaW50ZXIobV9iaXRzW2Jsb2NrLT5pbmRleCgpXS5nZXQoKSks
ICJcbiIpOworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAg
ICAKKyAgICBpZiAoYmxvY2stPmhhc0FueU5ld2x5QWxsb2NhdGVkKCkpIHsKKyAgICAgICAgbV9i
aXRzW2Jsb2NrLT5pbmRleCgpXS0+ZmlsdGVyKGJsb2NrLT5uZXdseUFsbG9jYXRlZCgpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChibG9jay0+aXNFbXB0eSgpIHx8IGJsb2Nr
LT5hcmVNYXJrc1N0YWxlKCkpIHsKKyAgICAgICAgbV9ibG9ja3NXaXRoQml0c1tibG9jay0+aW5k
ZXgoKV0gPSBmYWxzZTsKKyAgICAgICAgbV9iaXRzW2Jsb2NrLT5pbmRleCgpXSA9IG51bGxwdHI7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9iaXRzW2Jsb2NrLT5pbmRleCgp
XS0+ZmlsdGVyKGJsb2NrLT5ibG9jaygpLm1hcmtzKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXQuaAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4K
KyNpbmNsdWRlIDx3dGYvQ29uY3VycmVudFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0Qml0
VmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBIZWFwQ2VsbDsKK2NsYXNzIElz
b1N1YnNwYWNlOworCisvLyBDcmVhdGUgYSBzZXQgb2YgY2VsbHMgdGhhdCBhcmUgaW4gYW4gSXNv
U3Vic3BhY2UuIFRoaXMgYWxsb3dzIGNvbmN1cnJlbnQgTygxKSBzZXQgaW5zZXJ0aW9uIGFuZAor
Ly8gcmVtb3ZhbC4gRWFjaCBzdWNoIHNldCBzaG91bGQgYmUgdGhvdWdodCBvZiBhcyBhIDAuOCUg
aW5jcmVhc2UgaW4gb2JqZWN0IHNpemUgZm9yIG9iamVjdHMgaW4gdGhhdAorLy8gSXNvU3Vic3Bh
Y2UgKGl0J3MgbGlrZSBhZGRpbmcgMSBiaXQgZXZlcnkgMTYgYnl0ZXMsIG9yIDEgYml0IGV2ZXJ5
IDEyOCBiaXRzKS4KK2NsYXNzIElzb0NlbGxTZXQgOiBwdWJsaWMgQmFzaWNSYXdTZW50aW5lbE5v
ZGU8SXNvQ2VsbFNldD4geworcHVibGljOgorICAgIElzb0NlbGxTZXQoSXNvU3Vic3BhY2UmIHN1
YnNwYWNlKTsKKyAgICB+SXNvQ2VsbFNldCgpOworICAgIAorICAgIGJvb2wgYWRkKEhlYXBDZWxs
KiBjZWxsKTsKKyAgICAKKyAgICBib29sIHJlbW92ZShIZWFwQ2VsbCogY2VsbCk7CisgICAgCisg
ICAgYm9vbCBjb250YWlucyhIZWFwQ2VsbCogY2VsbCkgY29uc3Q7CisgICAgCisgICAgLy8gVGhp
cyB3aWxsIGhhdmUgdG8gZG8gYSBjb21iaW5lZCBzZWFyY2ggb3ZlciB3aGF0ZXZlciBTdWJzcGFj
ZTo6Zm9yRWFjaE1hcmtlZENlbGwgdXNlcyBhbmQKKyAgICAvLyBvdXIgbV9ibG9ja3NXaXRoQml0
cy4KKyAgICAvLyBOT1RFOiBJdCdzIGlsbGVnYWwgdG8gY2FsbCBhZGQoKSBvciByZW1vdmUoKSBj
b25jdXJyZW50bHkgdG8gdGhpcywgYnV0IHNlbGYtcmVtb3ZlKCkgd2lsbCB3b3JrLgorICAgIC8v
IEJ1dCBpdCdzIGJldHRlciBpZiB5b3UgcmV0dXJuIFJlbW92ZSBpbnN0ZWFkLgorICAgIGVudW0g
Y2xhc3MgRm9yRWFjaFJlc3VsdCB7CisgICAgICAgIENvbnRpbnVlLAorICAgICAgICBSZW1vdmVB
bmRDb250aW51ZSwKKyAgICB9OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9p
ZCBmb3JFYWNoTWFya2VkQ2VsbChjb25zdCBGdW5jJik7CisgICAgCitwcml2YXRlOgorICAgIGZy
aWVuZCBjbGFzcyBJc29TdWJzcGFjZTsKKyAgICAKKyAgICBCaXRtYXA8TWFya2VkQmxvY2s6OmF0
b21zUGVyQmxvY2s+KiBhZGRTbG93KHNpemVfdCBibG9ja0luZGV4KTsKKyAgICAKKyAgICB2b2lk
IGRpZFJlc2l6ZUJpdHMoc2l6ZV90IG5ld1NpemUpOworICAgIHZvaWQgZGlkUmVtb3ZlQmxvY2so
c2l6ZV90IGJsb2NrSW5kZXgpOworICAgIHZvaWQgc3dlZXBUb0ZyZWVMaXN0KE1hcmtlZEJsb2Nr
OjpIYW5kbGUqKTsKKyAgICAKKyAgICBJc29TdWJzcGFjZSYgbV9zdWJzcGFjZTsKKyAgICAKKyAg
ICAvLyBJZGVhOiBzd2VlcGluZyB0byBmcmVlLWxpc3QgY2xlYXJzIGJpdHMgZm9yIHRob3NlIGNl
bGxzIHRoYXQgd2VyZSBmcmVlLWxpc3RlZC4gVGhlIGZpcnN0IHRpbWUKKyAgICAvLyB3ZSBhZGQg
YSBjZWxsIGluIGEgYmxvY2ssIHRoYXQgYmxvY2sgZ2V0cyBhIGZyZWUtbGlzdC4gVW5sZXNzIHdl
IGRvIHNvbWV0aGluZyB0aGF0IG9idmlvdXNseQorICAgIC8vIGNsZWFycyBhbGwgYml0cyBmb3Ig
YSBibG9jaywgd2Uga2VlcCBpdCBzZXQgaW4gYmxvY2tzV2l0aEJpdHMuCisgICAgCisgICAgRmFz
dEJpdFZlY3RvciBtX2Jsb2Nrc1dpdGhCaXRzOworICAgIENvbmN1cnJlbnRWZWN0b3I8c3RkOjp1
bmlxdWVfcHRyPEJpdG1hcDxNYXJrZWRCbG9jazo6YXRvbXNQZXJCbG9jaz4+PiBtX2JpdHM7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSXNvQ2VsbFNldElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Jc29DZWxsU2V0SW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkF0b21JbmRpY2VzLmgiCisjaW5jbHVkZSAiSXNv
Q2VsbFNldC5oIgorI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworaW5saW5lIGJvb2wgSXNvQ2VsbFNldDo6YWRkKEhlYXBDZWxsKiBjZWxsKQorewor
ICAgIEF0b21JbmRpY2VzIGF0b21JbmRpY2VzKGNlbGwpOworICAgIGF1dG8mIGJpdHNQdHJSZWYg
PSBtX2JpdHNbYXRvbUluZGljZXMuYmxvY2tJbmRleF07CisgICAgYXV0byogYml0cyA9IGJpdHNQ
dHJSZWYuZ2V0KCk7CisgICAgaWYgKFVOTElLRUxZKCFiaXRzKSkKKyAgICAgICAgYml0cyA9IGFk
ZFNsb3coYXRvbUluZGljZXMuYmxvY2tJbmRleCk7CisgICAgcmV0dXJuICFiaXRzLT5jb25jdXJy
ZW50VGVzdEFuZFNldChhdG9tSW5kaWNlcy5hdG9tTnVtYmVyKTsKK30KKworaW5saW5lIGJvb2wg
SXNvQ2VsbFNldDo6cmVtb3ZlKEhlYXBDZWxsKiBjZWxsKQoreworICAgIEF0b21JbmRpY2VzIGF0
b21JbmRpY2VzKGNlbGwpOworICAgIGF1dG8mIGJpdHNQdHJSZWYgPSBtX2JpdHNbYXRvbUluZGlj
ZXMuYmxvY2tJbmRleF07CisgICAgYXV0byogYml0cyA9IGJpdHNQdHJSZWYuZ2V0KCk7CisgICAg
aWYgKCFiaXRzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGJpdHMtPmNvbmN1
cnJlbnRUZXN0QW5kQ2xlYXIoYXRvbUluZGljZXMuYXRvbU51bWJlcik7Cit9CisKK2lubGluZSBi
b29sIElzb0NlbGxTZXQ6OmNvbnRhaW5zKEhlYXBDZWxsKiBjZWxsKSBjb25zdAoreworICAgIEF0
b21JbmRpY2VzIGF0b21JbmRpY2VzKGNlbGwpOworICAgIGF1dG8qIGJpdHMgPSBtX2JpdHNbYXRv
bUluZGljZXMuYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgaWYgKGJpdHMpCisgICAgICAgIHJldHVy
biBiaXRzLT5nZXQoYXRvbUluZGljZXMuYXRvbU51bWJlcik7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgordm9pZCBJc29DZWxsU2V0Ojpmb3JFYWNoTWFy
a2VkQ2VsbChjb25zdCBGdW5jJiBmdW5jKQoreworICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2Nh
dG9yID0gbV9zdWJzcGFjZS5tX2FsbG9jYXRvcjsKKyAgICAoYWxsb2NhdG9yLm1fbWFya2luZ05v
dEVtcHR5ICYgbV9ibG9ja3NXaXRoQml0cykuZm9yRWFjaFNldEJpdCgKKyAgICAgICAgWyZdIChz
aXplX3QgYmxvY2tJbmRleCkgeworICAgICAgICAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogYmxv
Y2sgPSBhbGxvY2F0b3IubV9ibG9ja3NbYmxvY2tJbmRleF07CisKKyAgICAgICAgICAgIGF1dG8q
IGJpdHMgPSBtX2JpdHNbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBib29sIGhhZEJp
dHMgPSBmYWxzZTsKKyAgICAgICAgICAgIGJsb2NrLT5mb3JFYWNoTWFya2VkQ2VsbCgKKyAgICAg
ICAgICAgICAgICBbJl0gKHNpemVfdCBhdG9tTnVtYmVyLCBIZWFwQ2VsbCogY2VsbCwgSGVhcENl
bGw6OktpbmQga2luZCkgLT4gSXRlcmF0aW9uU3RhdHVzIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGJpdHMtPmdldChhdG9tTnVtYmVyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgRm9y
RWFjaFJlc3VsdCByZXN1bHQgPSBmdW5jKGNlbGwsIGtpbmQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgc3dpdGNoIChyZXN1bHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRm9y
RWFjaFJlc3VsdDo6Q29udGludWU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFkQml0
cyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlIEZvckVhY2hSZXN1bHQ6OlJlbW92ZUFuZENvbnRpbnVlOgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHMtPmNsZWFyKGF0b21OdW1iZXIpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJdGVyYXRp
b25TdGF0dXM6OkNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaWYg
KCFoYWRCaXRzKSB7CisgICAgICAgICAgICAgICAgbV9iaXRzW2Jsb2NrSW5kZXhdID0gbnVsbHB0
cjsKKyAgICAgICAgICAgICAgICBtX2Jsb2Nrc1dpdGhCaXRzW2Jsb2NrSW5kZXhdID0gZmFsc2U7
CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmNwcAkocmV2aXNp
b24gMjI1NzcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02Nyw1ICs2NywyOSBAQCB2b2lkKiBJc29TdWJzcGFjZTo6YWxs
b2NhdGVOb25WaXJ0dWFsKHNpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAordm9pZCBJc29TdWJz
cGFjZTo6ZGlkUmVzaXplQml0cyhzaXplX3QgYmxvY2tJbmRleCkKK3sKKyAgICBtX2NlbGxTZXRz
LmZvckVhY2goCisgICAgICAgIFsmXSAoSXNvQ2VsbFNldCogc2V0KSB7CisgICAgICAgICAgICBz
ZXQtPmRpZFJlc2l6ZUJpdHMoYmxvY2tJbmRleCk7CisgICAgICAgIH0pOworfQorCit2b2lkIElz
b1N1YnNwYWNlOjpkaWRSZW1vdmVCbG9jayhzaXplX3QgYmxvY2tJbmRleCkKK3sKKyAgICBtX2Nl
bGxTZXRzLmZvckVhY2goCisgICAgICAgIFsmXSAoSXNvQ2VsbFNldCogc2V0KSB7CisgICAgICAg
ICAgICBzZXQtPmRpZFJlbW92ZUJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICB9KTsKK30KKwor
dm9pZCBJc29TdWJzcGFjZTo6ZGlkQmVnaW5Td2VlcGluZ1RvRnJlZUxpc3QoTWFya2VkQmxvY2s6
OkhhbmRsZSogYmxvY2spCit7CisgICAgbV9jZWxsU2V0cy5mb3JFYWNoKAorICAgICAgICBbJl0g
KElzb0NlbGxTZXQqIHNldCkgeworICAgICAgICAgICAgc2V0LT5zd2VlcFRvRnJlZUxpc3QoYmxv
Y2spOworICAgICAgICB9KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuaAkocmV2aXNpb24gMjI1NzcwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMjcsMTAgKzI3LDEyIEBACiAKICNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3IuaCIKICNpbmNs
dWRlICJTdWJzcGFjZS5oIgorI2luY2x1ZGUgPHd0Zi9TaW5nbHlMaW5rZWRMaXN0V2l0aFRhaWwu
aD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I7
CitjbGFzcyBJc29DZWxsU2V0OwogCiBjbGFzcyBJc29TdWJzcGFjZSA6IHB1YmxpYyBTdWJzcGFj
ZSB7CiBwdWJsaWM6CkBAIC00Niw5ICs0OCwxNiBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCogYWxsb2NhdGVOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29u
dGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUp
OwogCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBJc29DZWxsU2V0OworICAgIAorICAgIHZv
aWQgZGlkUmVzaXplQml0cyhzaXplX3QgbmV3U2l6ZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRS
ZW1vdmVCbG9jayhzaXplX3QgYmxvY2tJbmRleCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRCZWdp
blN3ZWVwaW5nVG9GcmVlTGlzdChNYXJrZWRCbG9jazo6SGFuZGxlKikgb3ZlcnJpZGU7CisgICAg
CiAgICAgc2l6ZV90IG1fc2l6ZTsKICAgICBNYXJrZWRBbGxvY2F0b3IgbV9hbGxvY2F0b3I7CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I+IG1faXNvQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvcjsKKyAgICBTZW50aW5lbExpbmtlZExpc3Q8SXNvQ2VsbFNldCwgQmFz
aWNSYXdTZW50aW5lbE5vZGU8SXNvQ2VsbFNldD4+IG1fY2VsbFNldHM7CiB9OwogCiBpbmxpbmUg
TWFya2VkQWxsb2NhdG9yKiBJc29TdWJzcGFjZTo6YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXpl
X3Qgc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjI1NzcwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYxLDYgKzI2MSw3IEBAIHZvaWQgTWFya2VkQWxsb2NhdG9yOjphZGRCbG9jayhNYXJrZWRC
bG8KICAgICAgICAgICAgIEFTU0VSVChtX2Jsb2Nrcy5jYXBhY2l0eSgpID4gb2xkQ2FwYWNpdHkp
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2JpdHZlY3Rv
ckxvY2spOworICAgICAgICAgICAgc3Vic3BhY2UoKS0+ZGlkUmVzaXplQml0cyhtX2Jsb2Nrcy5j
YXBhY2l0eSgpKTsKICAgICAgICAgICAgIGZvckVhY2hCaXRWZWN0b3IoCiAgICAgICAgICAgICAg
ICAgbG9ja2VyLAogICAgICAgICAgICAgICAgIFsmXSAoRmFzdEJpdFZlY3RvciYgdmVjdG9yKSB7
CkBAIC0yOTAsNyArMjkxLDkgQEAgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OnJlbW92ZUJsb2NrKE1h
cmtlZAogewogICAgIEFTU0VSVChibG9jay0+YWxsb2NhdG9yKCkgPT0gdGhpcyk7CiAgICAgQVNT
RVJUKG1fYmxvY2tzW2Jsb2NrLT5pbmRleCgpXSA9PSBibG9jayk7Ci0KKyAgICAKKyAgICBzdWJz
cGFjZSgpLT5kaWRSZW1vdmVCbG9jayhibG9jay0+aW5kZXgoKSk7CisgICAgCiAgICAgbV9ibG9j
a3NbYmxvY2stPmluZGV4KCldID0gbnVsbHB0cjsKICAgICBtX2ZyZWVCbG9ja0luZGljZXMuYXBw
ZW5kKGJsb2NrLT5pbmRleCgpKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCShyZXZpc2lvbiAyMjU3NzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzgs
NiArMzgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgR0NEZWZlcnJhbENvbnRleHQ7CiBj
bGFzcyBIZWFwOworY2xhc3MgSXNvQ2VsbFNldDsKIGNsYXNzIE1hcmtlZFNwYWNlOwogY2xhc3Mg
TExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCkBAIC0xNjIsNiArMTYzLDcgQEAgcHVibGljOgogICAg
IHZvaWQgZHVtcEJpdHMoUHJpbnRTdHJlYW0mID0gV1RGOjpkYXRhRmlsZSgpKTsKICAgICAKIHBy
aXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIElzb0NlbGxTZXQ7CiAgICAgZnJpZW5kIGNsYXNzIE1h
cmtlZEJsb2NrOwogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlU2xv
d0Nhc2UoR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1v
ZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9ySW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFs
bG9jYXRvcklubGluZXMuaAkocmV2aXNpb24gMjI1NzcwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2
ICsyNyw3IEBACiAKICNpbmNsdWRlICJGcmVlTGlzdElubGluZXMuaCIKICNpbmNsdWRlICJNYXJr
ZWRBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJWTS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkocmV2aXNpb24g
MjI1NzcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMDEsMTEgKzMwMSw2IEBAIHNpemVfdCBNYXJrZWRCbG9jazo6bWFy
a0NvdW50KCkKICAgICByZXR1cm4gYXJlTWFya3NTdGFsZSgpID8gMCA6IG1fbWFya3MuY291bnQo
KTsKIH0KIAotYm9vbCBNYXJrZWRCbG9jazo6SGFuZGxlOjppc0VtcHR5KCkKLXsKLSAgICByZXR1
cm4gbV9hbGxvY2F0b3ItPmlzRW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzKTsKLX0KLQog
dm9pZCBNYXJrZWRCbG9jazo6Y2xlYXJIYXNBbnlNYXJrZWQoKQogewogICAgIG1fYmlhc2VkTWFy
a0NvdW50ID0gbV9tYXJrQ291bnRCaWFzOwpAQCAtNDAzLDExICszOTgsMTMgQEAgdm9pZCBNYXJr
ZWRCbG9jazo6SGFuZGxlOjpzd2VlcChGcmVlTGlzdAogICAgICAgICByZXR1cm47CiAKICAgICBS
RUxFQVNFX0FTU0VSVCghbV9pc0ZyZWVMaXN0ZWQpOwotICAgIFJFTEVBU0VfQVNTRVJUKCFtX2Fs
bG9jYXRvci0+aXNBbGxvY2F0ZWQoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzKSk7CisgICAgUkVM
RUFTRV9BU1NFUlQoIWlzQWxsb2NhdGVkKCkpOwogICAgIAogICAgIGlmIChzcGFjZSgpLT5pc01h
cmtpbmcoKSkKICAgICAgICAgYmxvY2soKS5tX2xvY2subG9jaygpOwogICAgIAorICAgIHN1YnNw
YWNlKCktPmRpZEJlZ2luU3dlZXBpbmdUb0ZyZWVMaXN0KHRoaXMpOworICAgIAogICAgIGlmIChu
ZWVkc0Rlc3RydWN0aW9uKSB7CiAgICAgICAgIHN1YnNwYWNlKCktPmZpbmlzaFN3ZWVwKCp0aGlz
LCBmcmVlTGlzdCk7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gMjI1NzcwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTYyLDYgKzE2Miw4
IEBAIHB1YmxpYzoKICAgICAgICAgc2l6ZV90IG1hcmtDb3VudCgpOwogICAgICAgICBzaXplX3Qg
c2l6ZSgpOwogICAgICAgICAKKyAgICAgICAgYm9vbCBpc0FsbG9jYXRlZCgpOworICAgICAgICAK
ICAgICAgICAgYm9vbCBpc0xpdmUoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIEhlYXBWZXJz
aW9uIG5ld2x5QWxsb2NhdGVkVmVyc2lvbiwgYm9vbCBpc01hcmtpbmcsIGNvbnN0IEhlYXBDZWxs
Kik7CiAgICAgICAgIGlubGluZSBib29sIGlzTGl2ZUNlbGwoSGVhcFZlcnNpb24gbWFya2luZ1Zl
cnNpb24sIEhlYXBWZXJzaW9uIG5ld2x5QWxsb2NhdGVkVmVyc2lvbiwgYm9vbCBpc01hcmtpbmcs
IGNvbnN0IHZvaWQqKTsKIApAQCAtMTczLDYgKzE3NSw3IEBAIHB1YmxpYzoKICAgICAgICAgYm9v
bCBpc05ld2x5QWxsb2NhdGVkKGNvbnN0IHZvaWQqKTsKICAgICAgICAgdm9pZCBzZXROZXdseUFs
bG9jYXRlZChjb25zdCB2b2lkKik7CiAgICAgICAgIHZvaWQgY2xlYXJOZXdseUFsbG9jYXRlZChj
b25zdCB2b2lkKik7CisgICAgICAgIGNvbnN0IEJpdG1hcDxhdG9tc1BlckJsb2NrPiYgbmV3bHlB
bGxvY2F0ZWQoKSBjb25zdDsKICAgICAgICAgCiAgICAgICAgIEhlYXBWZXJzaW9uIG5ld2x5QWxs
b2NhdGVkVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fbmV3bHlBbGxvY2F0ZWRWZXJzaW9uOyB9
CiAgICAgICAgIApAQCAtMjI3LDcgKzIzMCw3IEBAIHB1YmxpYzoKICAgICAgICAgc2l6ZV90IG1f
YXRvbXNQZXJDZWxsIHsgc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSB9OwogICAg
ICAgICBzaXplX3QgbV9lbmRBdG9tIHsgc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgo
KSB9OyAvLyBUaGlzIGlzIGEgZnV6enkgZW5kLiBBbHdheXMgdGVzdCBmb3IgPCBtX2VuZEF0b20u
CiAgICAgICAgICAgICAKLSAgICAgICAgV1RGOjpCaXRtYXA8YXRvbXNQZXJCbG9jaz4gbV9uZXds
eUFsbG9jYXRlZDsKKyAgICAgICAgQml0bWFwPGF0b21zUGVyQmxvY2s+IG1fbmV3bHlBbGxvY2F0
ZWQ7CiAgICAgICAgICAgICAKICAgICAgICAgQWxsb2NhdG9yQXR0cmlidXRlcyBtX2F0dHJpYnV0
ZXM7CiAgICAgICAgIGJvb2wgbV9pc0ZyZWVMaXN0ZWQgeyBmYWxzZSB9OwpAQCAtMjk0LDYgKzI5
Nyw4IEBAIHB1YmxpYzoKICAgICBib29sIGlzTWFya2VkUmF3KGNvbnN0IHZvaWQqIHApOwogICAg
IEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXJraW5nVmVy
c2lvbjsgfQogICAgIAorICAgIGNvbnN0IEJpdG1hcDxhdG9tc1BlckJsb2NrPiYgbWFya3MoKSBj
b25zdDsKKyAgICAKICAgICBDb3VudGluZ0xvY2smIGxvY2soKSB7IHJldHVybiBtX2xvY2s7IH0K
IAogcHJpdmF0ZToKQEAgLTM0Niw3ICszNTEsNyBAQCBwcml2YXRlOgogCiAgICAgSGVhcFZlcnNp
b24gbV9tYXJraW5nVmVyc2lvbjsKIAotICAgIFdURjo6Qml0bWFwPGF0b21zUGVyQmxvY2s+IG1f
bWFya3M7CisgICAgQml0bWFwPGF0b21zUGVyQmxvY2s+IG1fbWFya3M7CiB9OwogCiBpbmxpbmUg
TWFya2VkQmxvY2s6OkhhbmRsZSYgTWFya2VkQmxvY2s6OmhhbmRsZSgpCkBAIC01MzIsNiArNTM3
LDExIEBAIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjp0ZXN0QW5kU2V0TWFya2UKICAgICByZXR1
cm4gbV9tYXJrcy5jb25jdXJyZW50VGVzdEFuZFNldChhdG9tTnVtYmVyKHApLCBkZXBlbmRlbmN5
KTsKIH0KIAoraW5saW5lIGNvbnN0IEJpdG1hcDxNYXJrZWRCbG9jazo6YXRvbXNQZXJCbG9jaz4m
IE1hcmtlZEJsb2NrOjptYXJrcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbWFya3M7Cit9CisK
IGlubGluZSBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzTmV3bHlBbGxvY2F0ZWQoY29uc3Qg
dm9pZCogcCkKIHsKICAgICByZXR1cm4gbV9uZXdseUFsbG9jYXRlZC5nZXQobV9ibG9jay0+YXRv
bU51bWJlcihwKSk7CkBAIC01NDcsNiArNTU3LDExIEBAIGlubGluZSB2b2lkIE1hcmtlZEJsb2Nr
OjpIYW5kbGU6OmNsZWFyTmUKICAgICBtX25ld2x5QWxsb2NhdGVkLmNsZWFyKG1fYmxvY2stPmF0
b21OdW1iZXIocCkpOwogfQogCitpbmxpbmUgY29uc3QgQml0bWFwPE1hcmtlZEJsb2NrOjphdG9t
c1BlckJsb2NrPiYgTWFya2VkQmxvY2s6OkhhbmRsZTo6bmV3bHlBbGxvY2F0ZWQoKSBjb25zdAor
eworICAgIHJldHVybiBtX25ld2x5QWxsb2NhdGVkOworfQorCiBpbmxpbmUgYm9vbCBNYXJrZWRC
bG9jazo6aXNBdG9tKGNvbnN0IHZvaWQqIHApCiB7CiAgICAgQVNTRVJUKE1hcmtlZEJsb2NrOjpp
c0F0b21BbGlnbmVkKHApKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZEJsb2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZEJsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAyMjU3NzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtOTEs
NiArOTEsMTEgQEAgaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6Om1hcmtzQ29udmV5TGl2ZQogICAg
ICAgICB8fCBNYXJrZWRTcGFjZTo6bmV4dFZlcnNpb24obXlNYXJraW5nVmVyc2lvbikgPT0gbWFy
a2luZ1ZlcnNpb247CiB9CiAKK2lubGluZSBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzQWxs
b2NhdGVkKCkKK3sKKyAgICByZXR1cm4gbV9hbGxvY2F0b3ItPmlzQWxsb2NhdGVkKE5vTG9ja2lu
Z05lY2Vzc2FyeSwgdGhpcyk7Cit9CisKIEFMV0FZU19JTkxJTkUgYm9vbCBNYXJrZWRCbG9jazo6
SGFuZGxlOjppc0xpdmUoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIEhlYXBWZXJzaW9uIG5l
d2x5QWxsb2NhdGVkVmVyc2lvbiwgYm9vbCBpc01hcmtpbmcsIGNvbnN0IEhlYXBDZWxsKiBjZWxs
KQogewogICAgIGlmIChhbGxvY2F0b3IoKS0+aXNBbGxvY2F0ZWQoTm9Mb2NraW5nTmVjZXNzYXJ5
LCB0aGlzKSkKQEAgLTQzNCw2ICs0MzksMTEgQEAgaW5saW5lIE1hcmtlZEJsb2NrOjpIYW5kbGU6
OlN3ZWVwRGVzdHJ1YwogICAgIHJldHVybiBCbG9ja0hhc05vRGVzdHJ1Y3RvcnM7CiB9CiAKK2lu
bGluZSBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzRW1wdHkoKQoreworICAgIHJldHVybiBt
X2FsbG9jYXRvci0+aXNFbXB0eShOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMpOworfQorCiBpbmxp
bmUgTWFya2VkQmxvY2s6OkhhbmRsZTo6RW1wdHlNb2RlIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmVt
cHR5TW9kZSgpCiB7CiAgICAgLy8gSXQncyBub3Qgb2J2aW91cywgYnV0IHRoaXMgaXMgdGhlIG9u
bHkgd2F5IHRvIGtub3cgaWYgdGhlIGJsb2NrIGlzIGVtcHR5LiBJdCdzIHRoZSBvbmx5CkBAIC00
NDEsNyArNDUxLDcgQEAgaW5saW5lIE1hcmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBNYQog
ICAgIC8vIC0gSXQncyB0cnVlIHdoZW4gdGhlIGJsb2NrIGlzIGZyZXNobHkgYWxsb2NhdGVkLgog
ICAgIC8vIC0gSXQncyB0cnVlIGlmIHRoZSBibG9jayBoYWQgYmVlbiBzd2VwdCBpbiB0aGUgcGFz
dCwgYWxsIGRlc3RydWN0b3JzIHdlcmUgY2FsbGVkLCBhbmQgdGhhdAogICAgIC8vICAgc3dlZXAg
cHJvdmVkIHRoYXQgdGhlIGJsb2NrIGlzIGVtcHR5LgotICAgIHJldHVybiBtX2FsbG9jYXRvci0+
aXNFbXB0eShOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMpID8gSXNFbXB0eSA6IE5vdEVtcHR5Owor
ICAgIHJldHVybiBpc0VtcHR5KCkgPyBJc0VtcHR5IDogTm90RW1wdHk7CiB9CiAKIGlubGluZSBN
YXJrZWRCbG9jazo6SGFuZGxlOjpTY3JpYmJsZU1vZGUgTWFya2VkQmxvY2s6OkhhbmRsZTo6c2Ny
aWJibGVNb2RlKCkKQEAgLTUxMiwxMSArNTIyLDEyIEBAIGlubGluZSBJdGVyYXRpb25TdGF0dXMg
TWFya2VkQmxvY2s6OkhhbmQKICAgICBpZiAoYXJlTWFya3NTdGFsZSkKICAgICAgICAgcmV0dXJu
IEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CiAgICAgZm9yIChzaXplX3QgaSA9IGZpcnN0QXRv
bSgpOyBpIDwgbV9lbmRBdG9tOyBpICs9IG1fYXRvbXNQZXJDZWxsKSB7Ci0gICAgICAgIEhlYXBD
ZWxsKiBjZWxsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8SGVhcENlbGwqPigmbV9ibG9jay0+YXRv
bXMoKVtpXSk7Ci0gICAgICAgIGlmICghYmxvY2suaXNNYXJrZWRSYXcoY2VsbCkpCisgICAgICAg
IGlmICghYmxvY2subV9tYXJrcy5nZXQoaSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAg
ICAgICBpZiAoZnVuY3RvcihjZWxsLCBraW5kKSA9PSBJdGVyYXRpb25TdGF0dXM6OkRvbmUpCisg
ICAgICAgIEhlYXBDZWxsKiBjZWxsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8SGVhcENlbGwqPigm
bV9ibG9jay0+YXRvbXMoKVtpXSk7CisKKyAgICAgICAgaWYgKGZ1bmN0b3IoaSwgY2VsbCwga2lu
ZCkgPT0gSXRlcmF0aW9uU3RhdHVzOjpEb25lKQogICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlv
blN0YXR1czo6RG9uZTsKICAgICB9CiAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGlu
dWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuY3BwCShyZXZpc2lv
biAyMjU3NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEyNiw1ICsxMjYsMTcgQEAgUmVmUHRyPFNoYXJlZFRhc2s8TWFya2Vk
QmxvY2s6OkhhbmRsZSooKQogICAgICAgICB9KTsKIH0KIAordm9pZCBTdWJzcGFjZTo6ZGlkUmVz
aXplQml0cyhzaXplX3QpCit7Cit9CisKK3ZvaWQgU3Vic3BhY2U6OmRpZFJlbW92ZUJsb2NrKHNp
emVfdCkKK3sKK30KKwordm9pZCBTdWJzcGFjZTo6ZGlkQmVnaW5Td2VlcGluZ1RvRnJlZUxpc3Qo
TWFya2VkQmxvY2s6OkhhbmRsZSopCit7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHJldmlzaW9uIDIyNTc3MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTkzLDYgKzkzLDEwIEBAIHB1YmxpYzoKICAgICAKICAgICBTdWJzcGFjZSogbmV4dFN1YnNwYWNl
SW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9uZXh0U3Vic3BhY2VJ
bkFsaWduZWRNZW1vcnlBbGxvY2F0b3I7IH0KICAgICB2b2lkIHNldE5leHRTdWJzcGFjZUluQWxp
Z25lZE1lbW9yeUFsbG9jYXRvcihTdWJzcGFjZSogc3Vic3BhY2UpIHsgbV9uZXh0U3Vic3BhY2VJ
bkFsaWduZWRNZW1vcnlBbGxvY2F0b3IgPSBzdWJzcGFjZTsgfQorICAgIAorICAgIHZpcnR1YWwg
dm9pZCBkaWRSZXNpemVCaXRzKHNpemVfdCBuZXdTaXplKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
UmVtb3ZlQmxvY2soc2l6ZV90IGJsb2NrSW5kZXgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRCZWdp
blN3ZWVwaW5nVG9GcmVlTGlzdChNYXJrZWRCbG9jazo6SGFuZGxlKik7CiAKIHByb3RlY3RlZDoK
ICAgICB2b2lkIGluaXRpYWxpemUoSGVhcENlbGxUeXBlKiwgQWxpZ25lZE1lbW9yeUFsbG9jYXRv
ciopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVz
LmgJKHJldmlzaW9uIDIyNTc3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNw
YWNlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3IEBAIHZvaWQgU3Vic3Bh
Y2U6OmZvckVhY2hNYXJrZWRDZWxsKGNvbnN0IEYKICAgICBmb3JFYWNoTm90RW1wdHlNYXJrZWRC
bG9jaygKICAgICAgICAgWyZdIChNYXJrZWRCbG9jazo6SGFuZGxlKiBoYW5kbGUpIHsKICAgICAg
ICAgICAgIGhhbmRsZS0+Zm9yRWFjaE1hcmtlZENlbGwoCi0gICAgICAgICAgICAgICAgWyZdIChI
ZWFwQ2VsbCogY2VsbCwgSGVhcENlbGw6OktpbmQga2luZCkgLT4gSXRlcmF0aW9uU3RhdHVzIHsg
CisgICAgICAgICAgICAgICAgWyZdIChzaXplX3QsIEhlYXBDZWxsKiBjZWxsLCBIZWFwQ2VsbDo6
S2luZCBraW5kKSAtPiBJdGVyYXRpb25TdGF0dXMgewogICAgICAgICAgICAgICAgICAgICBmdW5j
KGNlbGwsIGtpbmQpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVz
OjpDb250aW51ZTsKICAgICAgICAgICAgICAgICB9KTsKQEAgLTk5LDcgKzk5LDcgQEAgUmVmUHRy
PFNoYXJlZFRhc2s8dm9pZChTbG90VmlzaXRvciYpPj4gUwogICAgICAgICB7CiAgICAgICAgICAg
ICB3aGlsZSAoTWFya2VkQmxvY2s6OkhhbmRsZSogaGFuZGxlID0gbV9ibG9ja1NvdXJjZS0+cnVu
KCkpIHsKICAgICAgICAgICAgICAgICBoYW5kbGUtPmZvckVhY2hNYXJrZWRDZWxsKAotICAgICAg
ICAgICAgICAgICAgICBbJl0gKEhlYXBDZWxsKiBjZWxsLCBIZWFwQ2VsbDo6S2luZCBraW5kKSAt
PiBJdGVyYXRpb25TdGF0dXMgeworICAgICAgICAgICAgICAgICAgICBbJl0gKHNpemVfdCwgSGVh
cENlbGwqIGNlbGwsIEhlYXBDZWxsOjpLaW5kIGtpbmQpIC0+IEl0ZXJhdGlvblN0YXR1cyB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2Z1bmModmlzaXRvciwgY2VsbCwga2luZCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKICAg
ICAgICAgICAgICAgICAgICAgfSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbmZlcnJlZFN0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAyMjU3NzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFN0cnVjdHVyZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDY0ICsyNywxNyBAQAogI2luY2x1ZGUgIkluZmVycmVkU3RydWN0dXJl
LmgiCiAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lu
bGluZXMuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNvbnN0IENsYXNzSW5mbyBJbmZlcnJlZFN0
cnVjdHVyZTo6c19pbmZvID0geyAiSW5mZXJyZWRTdHJ1Y3R1cmUiLCBudWxscHRyLCBudWxscHRy
LCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEluZmVycmVkU3RydWN0dXJlKSB9OwotCi1J
bmZlcnJlZFN0cnVjdHVyZSogSW5mZXJyZWRTdHJ1Y3R1cmU6OmNyZWF0ZShWTSYgdm0sIEdDRGVm
ZXJyYWxDb250ZXh0JiBkZWZlcnJhbENvbnRleHQsIEluZmVycmVkVHlwZSogcGFyZW50LCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKLXsKLSAgICBJbmZlcnJlZFN0cnVjdHVyZSogcmVzdWx0ID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SW5mZXJyZWRTdHJ1Y3R1cmU+KHZtLmhlYXAsICZkZWZl
cnJhbENvbnRleHQpKSBJbmZlcnJlZFN0cnVjdHVyZSh2bSwgcGFyZW50LCBzdHJ1Y3R1cmUpOwot
ICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0sIHN0cnVjdHVyZSk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotdm9pZCBJbmZlcnJlZFN0cnVjdHVyZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwp
Ci17Ci0gICAgSW5mZXJyZWRTdHJ1Y3R1cmUqIGluZmVycmVkU3RydWN0dXJlID0gc3RhdGljX2Nh
c3Q8SW5mZXJyZWRTdHJ1Y3R1cmUqPihjZWxsKTsKLSAgICBpbmZlcnJlZFN0cnVjdHVyZS0+SW5m
ZXJyZWRTdHJ1Y3R1cmU6On5JbmZlcnJlZFN0cnVjdHVyZSgpOwotfQotCi1TdHJ1Y3R1cmUqIElu
ZmVycmVkU3RydWN0dXJlOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKLXsKLSAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotfQotCi12b2lkIEluZmVycmVkU3RydWN0dXJlOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAg
SW5mZXJyZWRTdHJ1Y3R1cmUqIGluZmVycmVkU3RydWN0dXJlID0ganNDYXN0PEluZmVycmVkU3Ry
dWN0dXJlKj4oY2VsbCk7Ci0gICAgCi0gICAgdmlzaXRvci5hcHBlbmQoaW5mZXJyZWRTdHJ1Y3R1
cmUtPm1fcGFyZW50KTsKLX0KLQotdm9pZCBJbmZlcnJlZFN0cnVjdHVyZTo6ZmluYWxpemVVbmNv
bmRpdGlvbmFsbHkoVk0mKQotewotICAgIEFTU0VSVChIZWFwOjppc01hcmtlZChtX3BhcmVudC5n
ZXQoKSkpOwotICAgIAotICAgIC8vIE1vbm90b25pY2l0eSBlbnN1cmVzIHRoYXQgd2Ugc2hvdWxk
bid0IHNlZSBhIG5ldyBzdHJ1Y3R1cmUgdGhhdCBpcyBkaWZmZXJlbnQgZnJvbSB1cywgYnV0IHdl
Ci0gICAgLy8gY291bGQgaGF2ZSBiZWVuIG51bGxlZC4gV2Ugb25seSByZWx5IG9uIGl0IGJlaW5n
IHRoZSBudWxsIGNhc2Ugb25seSBpbiBkZWJ1Zy4KLSAgICBpZiAodGhpcyA9PSBtX3BhcmVudC0+
bV9zdHJ1Y3R1cmUuZ2V0KCkpIHsKLSAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX3N0cnVj
dHVyZS5nZXQoKSkpCi0gICAgICAgICAgICBtX3BhcmVudC0+cmVtb3ZlU3RydWN0dXJlKCk7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIEFTU0VSVCghbV9wYXJlbnQtPm1fc3RydWN0dXJlKTsKLSAgICAK
LSAgICAvLyBXZSdsbCBnZXQgZGVsZXRlZCBvbiB0aGUgbmV4dCBHQy4gVGhhdCdzIGEgbGl0dGxl
IHdlaXJkLCBidXQgbm90IGhhcm1mdWwsIHNpbmNlIGl0IG9ubHkgaGFwcGVucwotICAgIC8vIHdo
ZW4gdGhlIEluZmVycmVkVHlwZSB0aGF0IHdlIHdlcmUgcGFpcmVkIHRvIHdvdWxkIGhhdmUgc3Vy
dml2ZWQuIEl0IGp1c3QgbWVhbnMgYSB0aW55IG1pc3NlZAotICAgIC8vIG9wcG9ydHVuaXR5IGZv
ciBoZWFwIHNpemUgcmVkdWN0aW9uLgotfQorV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKElu
ZmVycmVkU3RydWN0dXJlKTsKIAogSW5mZXJyZWRTdHJ1Y3R1cmU6OkluZmVycmVkU3RydWN0dXJl
KFZNJiB2bSwgSW5mZXJyZWRUeXBlKiBwYXJlbnQsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAg
IDogQmFzZSh2bSwgdm0uaW5mZXJyZWRTdHJ1Y3R1cmVTdHJ1Y3R1cmUuZ2V0KCkpCi0gICAgLCBt
X3BhcmVudCh2bSwgdGhpcywgcGFyZW50KQotICAgICwgbV9zdHJ1Y3R1cmUodm0sIHRoaXMsIHN0
cnVjdHVyZSkKLXsKLX0KLQotdm9pZCBJbmZlcnJlZFN0cnVjdHVyZTo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IHBhcmVudChwYXJlbnQpCisgICAg
LCBzdHJ1Y3R1cmUodm0sIHBhcmVudCwgc3RydWN0dXJlKQogewotICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKHZtKTsKLSAgICBzdHJ1Y3R1cmUtPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KCZtX3dh
dGNocG9pbnQpOworICAgIHN0cnVjdHVyZS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoJndhdGNo
cG9pbnQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0luZmVycmVkU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1cmUuaAkocmV2aXNpb24gMjI1Nzcw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1cmUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNTEgKzI2LDIzIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1
ZGUgIkluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludC5oIgotI2luY2x1ZGUgIkpTQ2VsbC5oIgot
I2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisjaW5jbHVkZSA8d3Rm
L0lzb01hbGxvYy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSW5mZXJyZWRUeXBlOwor
Y2xhc3MgU3RydWN0dXJlOwogCi1jbGFzcyBJbmZlcnJlZFN0cnVjdHVyZSBmaW5hbCA6IHB1Ymxp
YyBKU0NlbGwgeworY2xhc3MgSW5mZXJyZWRTdHJ1Y3R1cmUgZmluYWwgeworICAgIFdURl9NQUtF
X0lTT19BTExPQ0FURUQoSW5mZXJyZWRTdHJ1Y3R1cmUpOwogcHVibGljOgotICAgIHR5cGVkZWYg
SlNDZWxsIEJhc2U7Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGU+Ci0gICAg
c3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCi0gICAgewotICAgICAgICBy
ZXR1cm4gJnZtLmluZmVycmVkU3RydWN0dXJlU3BhY2U7Ci0gICAgfQotICAgIAotICAgIHN0YXRp
YyBJbmZlcnJlZFN0cnVjdHVyZSogY3JlYXRlKFZNJiwgR0NEZWZlcnJhbENvbnRleHQmLCBJbmZl
cnJlZFR5cGUqIHBhcmVudCwgU3RydWN0dXJlKik7Ci0gICAgCi0gICAgc3RhdGljIGNvbnN0IGJv
b2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7Ci0gICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0Nl
bGwqKTsKLSAgICAKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBT
dHJ1Y3R1cmVJc0ltbW9ydGFsIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7Ci0KLSAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUg
cHJvdG90eXBlKTsKLSAgICAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgCi0gICAgSW5mZXJyZWRU
eXBlKiBwYXJlbnQoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudC5nZXQoKTsgfQotICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7IH0KLSAg
ICAKLSAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJik7Ci0KLXByaXZhdGU6CiAg
ICAgSW5mZXJyZWRTdHJ1Y3R1cmUoVk0mLCBJbmZlcnJlZFR5cGUqIHBhcmVudCwgU3RydWN0dXJl
Kik7CisKKyAgICBJbmZlcnJlZFR5cGUqIHBhcmVudDsKKyAgICBXcml0ZUJhcnJpZXI8U3RydWN0
dXJlPiBzdHJ1Y3R1cmU7CiAgICAgCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFN0cnVj
dHVyZSopOwotICAgIAotICAgIFdyaXRlQmFycmllcjxJbmZlcnJlZFR5cGU+IG1fcGFyZW50Owot
ICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOwotICAgIAotICAgIGZyaWVu
ZCBjbGFzcyBJbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQ7Ci0gICAgSW5mZXJyZWRTdHJ1Y3R1
cmVXYXRjaHBvaW50IG1fd2F0Y2hwb2ludDsKKyAgICBJbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9p
bnQgd2F0Y2hwb2ludDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFN0cnVjdHVy
ZVdhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAyMjU3NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNCwxMiArMzQsMTQgQEAgdm9pZCBJbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQ6OmZp
cmVJbgogewogICAgIEluZmVycmVkU3RydWN0dXJlKiBpbmZlcnJlZFN0cnVjdHVyZSA9CiAgICAg
ICAgIGJpdHdpc2VfY2FzdDxJbmZlcnJlZFN0cnVjdHVyZSo+KAotICAgICAgICAgICAgYml0d2lz
ZV9jYXN0PGNoYXIqPih0aGlzKSAtIE9CSkVDVF9PRkZTRVRPRihJbmZlcnJlZFN0cnVjdHVyZSwg
bV93YXRjaHBvaW50KSk7CisgICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpIC0g
T0JKRUNUX09GRlNFVE9GKEluZmVycmVkU3RydWN0dXJlLCB3YXRjaHBvaW50KSk7CiAKLSAgICBp
ZiAoIWluZmVycmVkU3RydWN0dXJlLT5pc0xpdmUoKSkKKyAgICBJbmZlcnJlZFR5cGUqIGluZmVy
cmVkVHlwZSA9IGluZmVycmVkU3RydWN0dXJlLT5wYXJlbnQ7CisgICAgCisgICAgaWYgKCFpbmZl
cnJlZFR5cGUtPmlzTGl2ZSgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgaW5mZXJyZWRT
dHJ1Y3R1cmUtPm1fcGFyZW50LT5yZW1vdmVTdHJ1Y3R1cmUoKTsKKyAgICBpbmZlcnJlZFR5cGUt
PnJlbW92ZVN0cnVjdHVyZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlLmNwcAkocmV2aXNpb24g
MjI1NzcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkluZmVycmVkVHlwZS5oIgogCi0jaW5jbHVkZSAiR0NEZWZlcnJhbENvbnRleHRJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiSXNvQ2VsbFNldElubGluZXMuaCIKICNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtODYsNyArODYsOCBAQCBTdHJ1Y3R1cmUq
IEluZmVycmVkVHlwZTo6Y3JlYXRlU3RydWN0dXJlCiB2b2lkIEluZmVycmVkVHlwZTo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEluZmVy
cmVkVHlwZSogaW5mZXJyZWRUeXBlID0ganNDYXN0PEluZmVycmVkVHlwZSo+KGNlbGwpOwotICAg
IHZpc2l0b3IuYXBwZW5kKGluZmVycmVkVHlwZS0+bV9zdHJ1Y3R1cmUpOworICAgIGlmIChpbmZl
cnJlZFR5cGUtPm1fc3RydWN0dXJlKQorICAgICAgICB2aXNpdG9yLnZtKCkuaW5mZXJyZWRUeXBl
c1dpdGhGaW5hbGl6ZXJzLmFkZChpbmZlcnJlZFR5cGUpOwogfQogCiBJbmZlcnJlZFR5cGU6Oktp
bmQgSW5mZXJyZWRUeXBlOjpraW5kRm9yRmxhZ3MoUHV0QnlJZEZsYWdzIGZsYWdzKQpAQCAtMzk5
LDcgKzQwMCw2IEBAIGJvb2wgSW5mZXJyZWRUeXBlOjp3aWxsU3RvcmVWYWx1ZVNsb3coVk0KICAg
ICBEZXNjcmlwdG9yIG15VHlwZTsKICAgICBib29sIHJlc3VsdDsKICAgICB7Ci0gICAgICAgIEdD
RGVmZXJyYWxDb250ZXh0IGRlZmVycmFsQ29udGV4dCh2bS5oZWFwKTsKICAgICAgICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAgICAgICBvbGRUeXBlID0gZGVzY3JpcHRv
cihsb2NrZXIpOwogICAgICAgICBteVR5cGUgPSBEZXNjcmlwdG9yOjpmb3JWYWx1ZSh2YWx1ZSk7
CkBAIC00MDgsNyArNDA4LDcgQEAgYm9vbCBJbmZlcnJlZFR5cGU6OndpbGxTdG9yZVZhbHVlU2xv
dyhWTQogICAgICAgICAKICAgICAgICAgQVNTRVJUKG9sZFR5cGUgIT0gbXlUeXBlKTsgLy8gVGhl
IHR5cGUgbXVzdCBoYXZlIGNoYW5nZWQgaWYgd2UncmUgb24gdGhlIHNsb3cgcGF0aC4KIAotICAg
ICAgICBib29sIHNldFJlc3VsdCA9IHNldChkZWZlcnJhbENvbnRleHQsIGxvY2tlciwgdm0sIG15
VHlwZSk7CisgICAgICAgIGJvb2wgc2V0UmVzdWx0ID0gc2V0KGxvY2tlciwgdm0sIG15VHlwZSk7
CiAgICAgICAgIHJlc3VsdCA9IGtpbmQobG9ja2VyKSAhPSBUb3A7CiAgICAgICAgIGlmICghc2V0
UmVzdWx0KQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTQyMywxMCArNDIzLDkgQEAg
dm9pZCBJbmZlcnJlZFR5cGU6Om1ha2VUb3BTbG93KFZNJiB2bSwgUAogewogICAgIERlc2NyaXB0
b3Igb2xkVHlwZTsKICAgICB7Ci0gICAgICAgIEdDRGVmZXJyYWxDb250ZXh0IGRlZmVycmFsQ29u
dGV4dCh2bS5oZWFwKTsKICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2sp
OwogICAgICAgICBvbGRUeXBlID0gZGVzY3JpcHRvcihsb2NrZXIpOwotICAgICAgICBpZiAoIXNl
dChkZWZlcnJhbENvbnRleHQsIGxvY2tlciwgdm0sIFRvcCkpCisgICAgICAgIGlmICghc2V0KGxv
Y2tlciwgdm0sIFRvcCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC00MzQsMTQg
KzQzMyw4IEBAIHZvaWQgSW5mZXJyZWRUeXBlOjptYWtlVG9wU2xvdyhWTSYgdm0sIFAKICAgICBt
X3dhdGNocG9pbnRTZXQuZmlyZUFsbCh2bSwgZGV0YWlsKTsKIH0KIAotYm9vbCBJbmZlcnJlZFR5
cGU6OnNldChHQ0RlZmVycmFsQ29udGV4dCYgZGVmZXJyYWxDb250ZXh0LCBjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBEZXNjcmlwdG9yIG5ld0Rlc2NyaXB0b3IpCiti
b29sIEluZmVycmVkVHlwZTo6c2V0KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBW
TSYgdm0sIERlc2NyaXB0b3IgbmV3RGVzY3JpcHRvcikKIHsKLSAgICAvLyBXZSB3aWxsIHRyaWdn
ZXIgd3JpdGUgYmFycmllcnMgd2hpbGUgaG9sZGluZyBvdXIgbG9jay4gQ3VycmVudGx5LCB3cml0
ZSBiYXJyaWVycyBkb24ndCBHQywgYnV0IHRoYXQKLSAgICAvLyBjb3VsZCBjaGFuZ2UuIElmIGl0
IGRvZXMsIHdlIGRvbid0IHdhbnQgdG8gZGVhZGxvY2suIE5vdGUgdGhhdCB3ZSBjb3VsZCBoYXZl
IHVzZWQKLSAgICAvLyBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgaW4gdGhlIGNhbGxlciwgYnV0
IHRoZSBjYWxsZXIgaXMgb24gYSBmYXN0IHBhdGggc28gbWF5YmUgdGhhdCB3b3VsZG4ndCBiZQot
ICAgIC8vIGEgZ29vZCBpZGVhLgotICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyh2bS5oZWFw
KTsKLSAgICAKICAgICAvLyBCZSBkZWZlbnNpdmU6IGlmIHdlJ3JlIG5vdCByZWFsbHkgY2hhbmdp
bmcgdGhlIHR5cGUsIHRoZW4gd2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnl0aGluZy4KICAgICBpZiAo
ZGVzY3JpcHRvcihsb2NrZXIpID09IG5ld0Rlc2NyaXB0b3IpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTQ2OSwxOSArNDYyLDEzIEBAIGJvb2wgSW5mZXJyZWRUeXBlOjpzZXQoR0NEZWZlcnJh
bENvbnRleHQKICAgICAgICAgc2hvdWxkRmlyZVdhdGNocG9pbnRTZXQgPSB0cnVlOwogICAgIH0K
IAotICAgIC8vIFJlbW92ZSB0aGUgb2xkIEluZmVycmVkU3RydWN0dXJlIG9iamVjdCBpZiB3ZSBu
byBsb25nZXIgbmVlZCBpdC4KICAgICBpZiAoIW5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkpCi0g
ICAgICAgIG1fc3RydWN0dXJlLmNsZWFyKCk7Ci0KLSAgICAvLyBBZGQgYSBuZXcgSW5mZXJyZWRT
dHJ1Y3R1cmUgb2JqZWN0IGlmIHdlIG5lZWQgb25lIG5vdy4KLSAgICBpZiAobmV3RGVzY3JpcHRv
ci5zdHJ1Y3R1cmUoKSkgewotICAgICAgICBpZiAobV9zdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAg
IC8vIFdlIHNob3VsZCBhZ3JlZSBvbiB0aGUgc3RydWN0dXJlcyBpZiB3ZSBnZXQgaGVyZS4KLSAg
ICAgICAgICAgIEFTU0VSVChuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpID09IG1fc3RydWN0dXJl
LT5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBhdXRvKiBzdHJ1
Y3R1cmUgPSBJbmZlcnJlZFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBkZWZlcnJhbENvbnRleHQsIHRo
aXMsIG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkpOwotICAgICAgICAgICAgbV9zdHJ1Y3R1cmUu
c2V0KHZtLCB0aGlzLCBzdHJ1Y3R1cmUpOwotICAgICAgICB9CisgICAgICAgIG1fc3RydWN0dXJl
ID0gbnVsbHB0cjsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKG1fc3RydWN0dXJlKQorICAgICAg
ICAgICAgQVNTRVJUKG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkgPT0gbV9zdHJ1Y3R1cmUtPnN0
cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fc3RydWN0dXJlID0g
c3RkOjptYWtlX3VuaXF1ZTxJbmZlcnJlZFN0cnVjdHVyZT4odm0sIHRoaXMsIG5ld0Rlc2NyaXB0
b3Iuc3RydWN0dXJlKCkpOwogICAgIH0KIAogICAgIC8vIEZpbmFsbHksIHNldCB0aGUgZGVzY3Jp
cHRvciBraW5kLgpAQCAtNTAzLDEzICs0OTAsMTIgQEAgdm9pZCBJbmZlcnJlZFR5cGU6OnJlbW92
ZVN0cnVjdHVyZSgpCiAgICAgRGVzY3JpcHRvciBvbGREZXNjcmlwdG9yOwogICAgIERlc2NyaXB0
b3IgbmV3RGVzY3JpcHRvcjsKICAgICB7Ci0gICAgICAgIEdDRGVmZXJyYWxDb250ZXh0IGRlZmVy
cmFsQ29udGV4dCh2bS5oZWFwKTsKICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlciht
X2xvY2spOwogICAgICAgICBvbGREZXNjcmlwdG9yID0gZGVzY3JpcHRvcihsb2NrZXIpOwogICAg
ICAgICBuZXdEZXNjcmlwdG9yID0gb2xkRGVzY3JpcHRvcjsKICAgICAgICAgbmV3RGVzY3JpcHRv
ci5yZW1vdmVTdHJ1Y3R1cmUoKTsKICAgICAgICAgCi0gICAgICAgIGlmICghc2V0KGRlZmVycmFs
Q29udGV4dCwgbG9ja2VyLCB2bSwgbmV3RGVzY3JpcHRvcikpCisgICAgICAgIGlmICghc2V0KGxv
Y2tlciwgdm0sIG5ld0Rlc2NyaXB0b3IpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlLmgJKHJl
dmlzaW9uIDIyNTc3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVk
VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJDb25j
dXJyZW50SlNMb2NrLmgiCiAjaW5jbHVkZSAiSW5mZXJyZWRTdHJ1Y3R1cmUuaCIKKyNpbmNsdWRl
ICJJc29DZWxsU2V0LmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlO
YW1lLmgiCiAjaW5jbHVkZSAiUHV0QnlJZEZsYWdzLmgiCkBAIC0xODUsNyArMTg2LDcgQEAgcHVi
bGljOgogCiAgICAgRGVzY3JpcHRvciBkZXNjcmlwdG9yTWFpblRocmVhZCgpIGNvbnN0CiAgICAg
ewotICAgICAgICByZXR1cm4gRGVzY3JpcHRvcihtX2tpbmQsIG1fc3RydWN0dXJlID8gbV9zdHJ1
Y3R1cmUtPnN0cnVjdHVyZSgpIDogbnVsbHB0cik7CisgICAgICAgIHJldHVybiBEZXNjcmlwdG9y
KG1fa2luZCwgbV9zdHJ1Y3R1cmUgPyBtX3N0cnVjdHVyZS0+c3RydWN0dXJlLmdldCgpIDogbnVs
bHB0cik7CiAgICAgfQogICAgIAogICAgIERlc2NyaXB0b3IgZGVzY3JpcHRvcihjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImKSBjb25zdApAQCAtMjMwLDcgKzIzMSw3IEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIAotICAgIHZvaWQgZmluYWxpemVV
bmNvbmRpdGlvbmFsbHkoKTsKKyAgICBJc29DZWxsU2V0OjpGb3JFYWNoUmVzdWx0IGZpbmFsaXpl
VW5jb25kaXRpb25hbGx5KFZNJik7CiAKIHByaXZhdGU6CiAgICAgSW5mZXJyZWRUeXBlKFZNJik7
CkBAIC0yNDEsNyArMjQyLDcgQEAgcHJpdmF0ZToKIAogICAgIC8vIEhlbHBlciBmb3Igd2lsbFN0
b3JlVmFsdWVTbG93KCkgYW5kIG1ha2VUb3BTbG93KCkuIFRoaXMgcmV0dXJucyB0cnVlIGlmIHdl
IHNob3VsZCBmaXJlIHRoZQogICAgIC8vIHdhdGNocG9pbnQgc2V0LgotICAgIGJvb2wgc2V0KEdD
RGVmZXJyYWxDb250ZXh0JiwgY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVk0mLCBEZXNjcmlw
dG9yKTsKKyAgICBib29sIHNldChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWTSYsIERlc2Ny
aXB0b3IpOwogICAgIAogICAgIHZvaWQgcmVtb3ZlU3RydWN0dXJlKCk7CiAgICAgCkBAIC0yNTIs
NyArMjUzLDggQEAgcHJpdmF0ZToKICAgICAKICAgICBLaW5kIG1fa2luZCB7IEJvdHRvbSB9Owog
Ci0gICAgV3JpdGVCYXJyaWVyPEluZmVycmVkU3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKKyAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgYmUgUG9pc29uZWQuCisgICAgc3RkOjp1bmlxdWVfcHRyPElu
ZmVycmVkU3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKIAogICAgIC8vIE5PVEU6IElmIHRoaXMgaXMg
YmVpbmcgd2F0Y2hlZCwgd2UgdHJhbnNmb3JtIHRvIFRvcCBiZWNhdXNlIHRoYXQgaW1wbGllcyB0
aGF0IGl0IHdvdWxkbid0IGJlCiAgICAgLy8gcHJvZml0YWJsZSB0byB3YXRjaCBpdCBhZ2Fpbi4g
QWxzbywgdGhpcyBzZXQgaXMgaW5pdGlhbGl6ZWQgY2xlYXIsIGFuZCBpcyBuZXZlciBleHBvc2Vk
IHRvIHRoZSBERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVk
VHlwZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbmZlcnJlZFR5cGVJbmxpbmVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkluZmVycmVkVHlwZS5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworaW5saW5lIElzb0NlbGxTZXQ6OkZvckVhY2hSZXN1bHQgSW5mZXJyZWRU
eXBlOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYpCit7CisgICAgQVNTRVJUKEhlYXA6Omlz
TWFya2VkKHRoaXMpKTsKKyAgICAKKyAgICBpZiAobV9zdHJ1Y3R1cmUpIHsKKyAgICAgICAgaWYg
KEhlYXA6OmlzTWFya2VkKG1fc3RydWN0dXJlLT5zdHJ1Y3R1cmUuZ2V0KCkpKQorICAgICAgICAg
ICAgcmV0dXJuIElzb0NlbGxTZXQ6OkZvckVhY2hSZXN1bHQ6OkNvbnRpbnVlOworICAgICAgICAK
KyAgICAgICAgcmVtb3ZlU3RydWN0dXJlKCk7CisgICAgfQorICAgIAorICAgIHJldHVybiBJc29D
ZWxsU2V0OjpGb3JFYWNoUmVzdWx0OjpSZW1vdmVBbmRDb250aW51ZTsKK30KKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlz
aW9uIDIyNTc3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjA1LDExICsyMDUsMTEgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhl
YXBUeXBlIGhlYXBUeXBlKQogICAgICwgZGlyZWN0RXZhbEV4ZWN1dGFibGVTcGFjZSBJU09fU1VC
U1BBQ0VfSU5JVChoZWFwLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLmdldCgpLCBEaXJl
Y3RFdmFsRXhlY3V0YWJsZSkKICAgICAsIGZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIEZ1bmN0
aW9uRXhlY3V0YWJsZSkKICAgICAsIGluZGlyZWN0RXZhbEV4ZWN1dGFibGVTcGFjZSBJU09fU1VC
U1BBQ0VfSU5JVChoZWFwLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLmdldCgpLCBJbmRp
cmVjdEV2YWxFeGVjdXRhYmxlKQotICAgICwgaW5mZXJyZWRTdHJ1Y3R1cmVTcGFjZSBJU09fU1VC
U1BBQ0VfSU5JVChoZWFwLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLmdldCgpLCBJbmZl
cnJlZFN0cnVjdHVyZSkKICAgICAsIGluZmVycmVkVHlwZVNwYWNlIElTT19TVUJTUEFDRV9JTklU
KGhlYXAsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIEluZmVycmVkVHlwZSkK
ICAgICAsIG1vZHVsZVByb2dyYW1FeGVjdXRhYmxlU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVh
cCwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgTW9kdWxlUHJvZ3JhbUV4ZWN1
dGFibGUpCiAgICAgLCBuYXRpdmVFeGVjdXRhYmxlU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVh
cCwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgTmF0aXZlRXhlY3V0YWJsZSkK
ICAgICAsIHByb2dyYW1FeGVjdXRhYmxlU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgZGVz
dHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgUHJvZ3JhbUV4ZWN1dGFibGUpCisgICAg
LCBpbmZlcnJlZFR5cGVzV2l0aEZpbmFsaXplcnMoaW5mZXJyZWRUeXBlU3BhY2UpCiAgICAgLCB2
bVR5cGUodm1UeXBlKQogICAgICwgY2xpZW50RGF0YSgwKQogICAgICwgdG9wRW50cnlGcmFtZShu
dWxscHRyKQpAQCAtMjkyLDcgKzI5Miw2IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlw
ZSBoZWFwVHlwZSkKICAgICB1bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlLnNldCgq
dGhpcywgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAw
LCBqc051bGwoKSkpOwogICAgIHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVy
ZS5zZXQoKnRoaXMsIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6Y3JlYXRlU3RydWN0
dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHByb3BlcnR5VGFibGVTdHJ1Y3R1cmUuc2V0
KCp0aGlzLCBQcm9wZXJ0eVRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgp
KSk7Ci0gICAgaW5mZXJyZWRTdHJ1Y3R1cmVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBJbmZlcnJlZFN0
cnVjdHVyZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIGluZmVy
cmVkVHlwZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEluZmVycmVkVHlwZTo6Y3JlYXRlU3RydWN0dXJl
KCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIGluZmVycmVkVHlwZVRhYmxlU3RydWN0dXJlLnNl
dCgqdGhpcywgSW5mZXJyZWRUeXBlVGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNO
dWxsKCkpKTsKICAgICBpbmZlcnJlZFZhbHVlU3RydWN0dXJlLnNldCgqdGhpcywgSW5mZXJyZWRW
YWx1ZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyMjU3NzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAj
aW5jbHVkZSAiRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgog
I2luY2x1ZGUgIkludHJpbnNpYy5oIgorI2luY2x1ZGUgIklzb0NlbGxTZXQuaCIKICNpbmNsdWRl
ICJJc29TdWJzcGFjZS5oIgogI2luY2x1ZGUgIkpJVFRodW5rcy5oIgogI2luY2x1ZGUgIkpTQ0pT
VmFsdWUuaCIKQEAgLTM0MCwxMSArMzQxLDEyIEBAIHB1YmxpYzoKICAgICBJc29TdWJzcGFjZSBk
aXJlY3RFdmFsRXhlY3V0YWJsZVNwYWNlOwogICAgIElzb1N1YnNwYWNlIGZ1bmN0aW9uRXhlY3V0
YWJsZVNwYWNlOwogICAgIElzb1N1YnNwYWNlIGluZGlyZWN0RXZhbEV4ZWN1dGFibGVTcGFjZTsK
LSAgICBJc29TdWJzcGFjZSBpbmZlcnJlZFN0cnVjdHVyZVNwYWNlOwogICAgIElzb1N1YnNwYWNl
IGluZmVycmVkVHlwZVNwYWNlOwogICAgIElzb1N1YnNwYWNlIG1vZHVsZVByb2dyYW1FeGVjdXRh
YmxlU3BhY2U7CiAgICAgSXNvU3Vic3BhY2UgbmF0aXZlRXhlY3V0YWJsZVNwYWNlOwogICAgIElz
b1N1YnNwYWNlIHByb2dyYW1FeGVjdXRhYmxlU3BhY2U7CisgICAgCisgICAgSXNvQ2VsbFNldCBp
bmZlcnJlZFR5cGVzV2l0aEZpbmFsaXplcnM7CiAKICAgICBWTVR5cGUgdm1UeXBlOwogICAgIENs
aWVudERhdGEqIGNsaWVudERhdGE7CkBAIC0zOTIsNyArMzk0LDYgQEAgcHVibGljOgogICAgIFN0
cm9uZzxTdHJ1Y3R1cmU+IHVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmU7CiAgICAg
U3Ryb25nPFN0cnVjdHVyZT4gdW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJl
OwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb3BlcnR5VGFibGVTdHJ1Y3R1cmU7Ci0gICAgU3Ry
b25nPFN0cnVjdHVyZT4gaW5mZXJyZWRTdHJ1Y3R1cmVTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0
cnVjdHVyZT4gaW5mZXJyZWRUeXBlU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGlu
ZmVycmVkVHlwZVRhYmxlU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGluZmVycmVk
VmFsdWVTdHJ1Y3R1cmU7CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjI1NzcwKQorKysgU291cmNlL1dURi9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2NyBAQAorMjAxNy0xMi0xMSAgRmls
aXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEl0IHNob3VsZCBiZSBwb3Nz
aWJsZSB0byBmbGFnIGEgY2VsbCBmb3IgdW5jb25kaXRpb25hbCBmaW5hbGl6YXRpb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MDYzNgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBh
ZGRzIENvbmN1cnJlbnRWZWN0b3IsIHdoaWNoIGlzIGxpa2UgU2VnbWVudGVkVmVjdG9yLCBidXQg
d2FzdGVzIHNvbWUgc3BhY2UgdG8gYWxsb3cKKyAgICAgICAgcmVzaXppbmcgdG8gcHJvY2VlZCBj
b25jdXJyZW50bHkgdG8gYWNjZXNzLiBJdCdzIG5vdCBwb3NzaWJsZSB0byByZXNpemUgY29uY3Vy
cmVudGx5IHRvCisgICAgICAgIHJlc2l6aW5nLCBjb25jdXJyZW50IHJlYWQvd3JpdGVzIGFyZW4n
dCBwcm90ZWN0ZWQgZnJvbSByYWNpbmcgaWYgdGhleSBhY2Nlc3MgdGhlIHNhbWUgZWxlbWVudCwK
KyAgICAgICAgYW5kIHdobyBrbm93cyB3aGF0IHlvdSdsbCBnZXQgaWYgeW91IGl0ZXJhdGUgdXAg
dG8gc2l6ZSgpIHdoaWxlIHNvbWVvbmUgZWxzZSBhcHBlbmQoKXMuIFRoZQorICAgICAgICBrZXkg
aW5zaWdodCBpcyB0byBzdGFzaCBhbGwgcHJpb3IgY29waWVzIG9mIHRoZSBzcGluZSwgc28gdGhh
dCBub2JvZHkgY3Jhc2hlcyB0cnlpbmcgdG8gYWNjZXNzCisgICAgICAgIGEgc3RhbGUgc3BpbmUu
CisgICAgICAgIAorICAgICAgICBJJ20gZ29pbmcgdG8gd2FudCB0byBkbyB0aGUgc2FtZSB0aGlu
ZyBmb3IgRmFzdEJpdFZlY3RvciwgYnkgY3JlYXRpbmcgYSBzZWdtZW50ZWQgV29yZE93bmVyCisg
ICAgICAgIGNsYXNzLiBUaGF0IHdvdWxkIHJlcXVpcmUgcmVwZWF0aW5nIHRoZSBkYW5jZSBvZiBo
YXZpbmcgYSBzcGluZSB0aGF0IGNhbiByZXNpemUgd2hpbGUgc3Rhc2hpbmcKKyAgICAgICAgb2xk
IHZlcnNpb25zLiBTbywgdGhlIHNwaW5lIHJlc2l6aW5nIGxvZ2ljIGlzIGFic3RyYWN0ZWQgYmVo
aW5kIENvbmN1cnJlbnRCdWZmZXIuIFlvdSBjb3VsZAorICAgICAgICB1c2UgdGhhdCBhcyBhIGtp
bmQgb2YgImNvbmN1cnJlbnQgdmVjdG9yIiBmb3IgaW1tdXRhYmxlIGRhdGEuIFRoYXQncyBob3cg
Q29uY3VycmVudFZlY3RvciB1c2VzCisgICAgICAgIGl0OiBpdCdzIGFuIGltbXV0YWJsZSBhcnJh
eSBvZiBzZWdtZW50IHBvaW50ZXJzLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogd3RmL0NvbmN1cnJlbnRCdWZmZXIuaDogQWRkZWQuCisgICAg
ICAgIChXVEY6OkNvbmN1cnJlbnRCdWZmZXI6OkNvbmN1cnJlbnRCdWZmZXIpOgorICAgICAgICAo
V1RGOjpDb25jdXJyZW50QnVmZmVyOjp+Q29uY3VycmVudEJ1ZmZlcik6CisgICAgICAgIChXVEY6
OkNvbmN1cnJlbnRCdWZmZXI6Omdyb3dFeGFjdCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRC
dWZmZXI6Omdyb3cpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50QnVmZmVyOjphcnJheSBjb25z
dCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRCdWZmZXI6Om9wZXJhdG9yW10pOgorICAgICAg
ICAoV1RGOjpDb25jdXJyZW50QnVmZmVyOjpvcGVyYXRvcltdIGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6Q29uY3VycmVudEJ1ZmZlcjo6Y3JlYXRlQXJyYXkpOgorICAgICAgICAqIHd0Zi9Db25jdXJy
ZW50VmVjdG9yLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpDb25jdXJyZW50VmVjdG9ySXRlcmF0
b3I6On5Db25jdXJyZW50VmVjdG9ySXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50
VmVjdG9ySXRlcmF0b3I6Om9wZXJhdG9yKiBjb25zdCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJl
bnRWZWN0b3JJdGVyYXRvcjo6b3BlcmF0b3ItPiBjb25zdCk6CisgICAgICAgIChXVEY6OkNvbmN1
cnJlbnRWZWN0b3JJdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChXVEY6OkNvbmN1cnJl
bnRWZWN0b3JJdGVyYXRvcjo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChXVEY6OkNvbmN1
cnJlbnRWZWN0b3JJdGVyYXRvcjo6b3BlcmF0b3IhPSBjb25zdCk6CisgICAgICAgIChXVEY6OkNv
bmN1cnJlbnRWZWN0b3JJdGVyYXRvcjo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdURjo6Q29uY3Vy
cmVudFZlY3Rvckl0ZXJhdG9yOjpDb25jdXJyZW50VmVjdG9ySXRlcmF0b3IpOgorICAgICAgICAo
V1RGOjpDb25jdXJyZW50VmVjdG9yOjp+Q29uY3VycmVudFZlY3Rvcik6CisgICAgICAgIChXVEY6
OkNvbmN1cnJlbnRWZWN0b3I6OnNpemUgY29uc3QpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50
VmVjdG9yOjppc0VtcHR5IGNvbnN0KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFZlY3Rvcjo6
YXQpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50VmVjdG9yOjphdCBjb25zdCk6CisgICAgICAg
IChXVEY6OkNvbmN1cnJlbnRWZWN0b3I6Om9wZXJhdG9yW10pOgorICAgICAgICAoV1RGOjpDb25j
dXJyZW50VmVjdG9yOjpvcGVyYXRvcltdIGNvbnN0KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVu
dFZlY3Rvcjo6Zmlyc3QpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50VmVjdG9yOjpmaXJzdCBj
b25zdCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRWZWN0b3I6Omxhc3QpOgorICAgICAgICAo
V1RGOjpDb25jdXJyZW50VmVjdG9yOjpsYXN0IGNvbnN0KToKKyAgICAgICAgKFdURjo6Q29uY3Vy
cmVudFZlY3Rvcjo6dGFrZUxhc3QpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50VmVjdG9yOjph
cHBlbmQpOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50VmVjdG9yOjphbGxvYyk6CisgICAgICAg
IChXVEY6OkNvbmN1cnJlbnRWZWN0b3I6OnJlbW92ZUxhc3QpOgorICAgICAgICAoV1RGOjpDb25j
dXJyZW50VmVjdG9yOjpncm93KToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFZlY3Rvcjo6YmVn
aW4pOgorICAgICAgICAoV1RGOjpDb25jdXJyZW50VmVjdG9yOjplbmQpOgorICAgICAgICAoV1RG
OjpDb25jdXJyZW50VmVjdG9yOjpzZWdtZW50RXhpc3RzRm9yKToKKyAgICAgICAgKFdURjo6Q29u
Y3VycmVudFZlY3Rvcjo6c2VnbWVudEZvcik6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRWZWN0
b3I6OnN1YnNjcmlwdEZvcik6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRWZWN0b3I6OmVuc3Vy
ZVNlZ21lbnRzRm9yKToKKyAgICAgICAgKFdURjo6Q29uY3VycmVudFZlY3Rvcjo6ZW5zdXJlU2Vn
bWVudCk6CisgICAgICAgIChXVEY6OkNvbmN1cnJlbnRWZWN0b3I6OmFsbG9jYXRlU2VnbWVudCk6
CisKIDIwMTctMTItMTEgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgV2ViIEluc3BlY3RvcjogT3B0aW9uYWxseSBsb2cgV2ViS2l0IGxvZyBwYXJhbWV0
ZXJzIGFzIEpTT04KSW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMjI1NzcwKQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjM5LDYgKzIzOSw4IEBACiAJCTBGQjE0RTE4MTgw
RkEyMTgwMDlCNkI0RCAvKiBCYWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QmFnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0RTFBMTgxMEUxREEwMDlC
NkI0RCAvKiBCYWdUb0hhc2hNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFnVG9IYXNoTWFwLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjMxN0MzMUM0ODgwMDEwMDdFMzk1QSAvKiBT
eXN0ZW1UcmFjaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5c3RlbVRy
YWNpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCNDY3ODIxRkRFMjgyQjAw
M0ZDQjA5IC8qIENvbmN1cnJlbnRCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ29uY3VycmVudEJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkI0Njc4MzFGREUyODJDMDAzRkNCMDkgLyogQ29uY3VycmVudFZlY3Rvci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDb25jdXJyZW50VmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGQzQ0ODgyMTZGRTlGRTEwMDg0NEJFOSAvKiBQcm9jZXNzSUQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvY2Vzc0lELmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGQzRFREU1MTY5NjE0OTYwMEY2NTA0MSAvKiBDb21tYVByaW50
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tbWFQcmludGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgxQUM0MTU0RkIyMkUwMDk4M0U3MiAvKiBG
YXN0Qml0VmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZhc3RCaXRW
ZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTgwOCw4ICs4MTAsMTAgQEAK
IAkJCQkwRjhGMkI5MDE3MkUwMEYwMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuaCAqLywK
IAkJCQlBOEE0NzI3MDE1MUE4MjVBMDA0MTIzRkYgLyogQ29tcGlsZXIuaCAqLywKIAkJCQk0NkJB
OUVBQjFGNENENjFFMDA5QTJCQkMgLyogQ29tcGxldGlvbkhhbmRsZXIuaCAqLywKKwkJCQkwRkI0
Njc4MjFGREUyODJCMDAzRkNCMDkgLyogQ29uY3VycmVudEJ1ZmZlci5oICovLAogCQkJCTBGMzBD
QjU4MUZDREYxMzMwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAgKi8sCiAJCQkJ
MEYzMENCNTkxRkNERjEzMzAwNEI1MzIzIC8qIENvbmN1cnJlbnRQdHJIYXNoU2V0LmggKi8sCisJ
CQkJMEZCNDY3ODMxRkRFMjgyQzAwM0ZDQjA5IC8qIENvbmN1cnJlbnRWZWN0b3IuaCAqLywKIAkJ
CQkwRkRCNjk4RDFCN0M2NDNBMDAwQzEwNzggLyogQ29uZGl0aW9uLmggKi8sCiAJCQkJMEZGQkNC
RkExRkQzN0UwRjAwNzJBQUYwIC8qIENvdW50aW5nTG9jay5oICovLAogCQkJCTBGOEU4NURBMUZE
NDg1QjAwMDY5MTg4OSAvKiBDb3VudGluZ0xvY2suY3BwICovLApJbmRleDogU291cmNlL1dURi93
dGYvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ01ha2VMaXN0
cy50eHQJKHJldmlzaW9uIDIyNTc3MCkKKysrIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC0xOCw3ICsxOCw5IEBAIHNldChXVEZfSEVBREVSUwogICAgIENs
b2NrVHlwZS5oCiAgICAgQ29tcGlsYXRpb25UaHJlYWQuaAogICAgIENvbXBpbGVyLmgKKyAgICBD
b25jdXJyZW50QnVmZmVyLmgKICAgICBDb25jdXJyZW50UHRySGFzaFNldC5oCisgICAgQ29uY3Vy
cmVudFZlY3Rvci5oCiAgICAgQ29uZGl0aW9uLmgKICAgICBDb3VudGluZ0xvY2suaAogICAgIENy
b3NzVGhyZWFkQ29waWVyLmgKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRCdWZmZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Db25jdXJyZW50QnVmZmVyLmgJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvQ29uY3VycmVudEJ1ZmZlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KKyNp
bmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+
CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBDb25jdXJyZW50
QnVmZmVyIGlzIHN1aXRhYmxlIGZvciB3aGVuIHlvdSBwbGFuIHRvIHN0b3JlIGltbXV0YWJsZSBk
YXRhIGFuZCBzb21ldGltZXMgYXBwZW5kIHRvIGl0LgorLy8gSXQgc3VwcG9ydHMgc3RvcmluZyBk
YXRhIHRoYXQgaXMgbm90IGNvcHktY29uc3RydWN0YWJsZSBidXQgYml0LWNvcHlhYmxlLgordGVt
cGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIENvbmN1cnJlbnRCdWZmZXIgeworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKENvbmN1cnJlbnRCdWZmZXIpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIAorICAgIENvbmN1cnJlbnRCdWZmZXIoKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgfkNvbmN1cnJlbnRCdWZmZXIoKQorICAgIHsKKyAgICAgICAgaWYgKEFycmF5
KiBhcnJheSA9IG1fYXJyYXkpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBhcnJheS0+c2l6ZTsgKytpKQorICAgICAgICAgICAgICAgIGFycmF5LT5kYXRhW2ldLn5UKCk7
CisgICAgICAgIH0KKyAgICAgICAgZm9yIChBcnJheSogYXJyYXkgOiBtX2FsbEFycmF5cykKKyAg
ICAgICAgICAgIGZhc3RGcmVlKGFycmF5KTsKKyAgICB9CisKKyAgICAvLyBHcm93aW5nIGlzIG5v
dCBjb25jdXJyZW50LiBUaGlzIGFzc3VtZXMgeW91IGFyZSBob2xkaW5nIHNvbWUgb3RoZXIgbG9j
ayBiZWZvcmUgeW91IGRvIHRoaXMuCisgICAgdm9pZCBncm93RXhhY3Qoc2l6ZV90IG5ld1NpemUp
CisgICAgeworICAgICAgICBBcnJheSogYXJyYXkgPSBtX2FycmF5OworICAgICAgICBpZiAoYXJy
YXkgJiYgbmV3U2l6ZSA8PSBhcnJheS0+c2l6ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgQXJyYXkqIG5ld0FycmF5ID0gY3JlYXRlQXJyYXkobmV3U2l6ZSk7CisgICAgICAgIC8vIFRo
aXMgYWxsb3dzIHVzIHRvIGRvIENvbmN1cnJlbnRCdWZmZXI8c3RkOjp1bmlxdWVfcHRyPD4+Lgor
ICAgICAgICBpZiAoYXJyYXkpCisgICAgICAgICAgICBtZW1jcHkobmV3QXJyYXktPmRhdGEsIGFy
cmF5LT5kYXRhLCBzaXplb2YoVCkgKiBhcnJheS0+c2l6ZSk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGFycmF5ID8gYXJyYXktPnNpemUgOiAwOyBpIDwgbmV3U2l6ZTsgKytpKQorICAgICAg
ICAgICAgbmV3IChuZXdBcnJheS0+ZGF0YSArIGkpIFQoKTsKKyAgICAgICAgV1RGOjpzdG9yZVN0
b3JlRmVuY2UoKTsKKyAgICAgICAgbV9hcnJheSA9IG5ld0FycmF5OworICAgICAgICBXVEY6OnN0
b3JlU3RvcmVGZW5jZSgpOworICAgICAgICBtX2FsbEFycmF5cy5hcHBlbmQobmV3QXJyYXkpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGdyb3coc2l6ZV90IG5ld1NpemUpCisgICAgeworICAgICAg
ICBzaXplX3Qgc2l6ZSA9IG1fYXJyYXkgPyBtX2FycmF5LT5zaXplIDogMDsKKyAgICAgICAgaWYg
KG5ld1NpemUgPD0gc2l6ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZ3Jvd0V4YWN0
KHN0ZDo6bWF4KG5ld1NpemUsIHNpemUgKiAyKSk7CisgICAgfQorICAgIAorICAgIHN0cnVjdCBB
cnJheSB7CisgICAgICAgIHVuc2lnbmVkIHNpemU7IC8vIFRoaXMgaXMgYW4gaW1tdXRhYmxlIHNp
emUuCisgICAgICAgIFQgZGF0YVsxXTsKKyAgICB9OworICAgIAorICAgIEFycmF5KiBhcnJheSgp
IGNvbnN0IHsgcmV0dXJuIG1fYXJyYXk7IH0KKyAgICAKKyAgICBUJiBvcGVyYXRvcltdKHNpemVf
dCBpbmRleCkgeyByZXR1cm4gbV9hcnJheS0+ZGF0YVtpbmRleF07IH0KKyAgICBjb25zdCBUJiBv
cGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9hcnJheS0+ZGF0YVtpbmRl
eF07IH0KKyAgICAKK3ByaXZhdGU6CisgICAgQXJyYXkqIGNyZWF0ZUFycmF5KHVuc2lnbmVkIHNp
emUpCisgICAgeworICAgICAgICBBcnJheSogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8QXJyYXkqPihm
YXN0TWFsbG9jKE9CSkVDVF9PRkZTRVRPRihBcnJheSwgZGF0YSkgKyBzaXplb2YoVCkgKiBzaXpl
KSk7CisgICAgICAgIHJlc3VsdC0+c2l6ZSA9IHNpemU7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorICAgIAorICAgIEFycmF5KiBtX2FycmF5IHsgbnVsbHB0ciB9OworICAgIFZlY3Rv
cjxBcnJheSo+IG1fYWxsQXJyYXlzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL0NvbmN1cnJlbnRWZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9Db25jdXJyZW50VmVjdG9yLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93
dGYvQ29uY3VycmVudFZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjcxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4g
KCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ29u
Y3VycmVudFZlY3Rvcl9oCisjZGVmaW5lIENvbmN1cnJlbnRWZWN0b3JfaAorCisjaW5jbHVkZSA8
d3RmL0NvbmN1cnJlbnRCdWZmZXIuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKwor
bmFtZXNwYWNlIFdURiB7CisKKy8vIEFuIGl0ZXJhdG9yIGZvciBDb25jdXJyZW50VmVjdG9yLiBJ
dCBzdXBwb3J0cyBvbmx5IHRoZSBwcmUgKysgb3BlcmF0b3IKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
LCBzaXplX3QgU2VnbWVudFNpemUgPSA4PiBjbGFzcyBDb25jdXJyZW50VmVjdG9yOwordGVtcGxh
dGUgPHR5cGVuYW1lIFQsIHNpemVfdCBTZWdtZW50U2l6ZSA9IDg+IGNsYXNzIENvbmN1cnJlbnRW
ZWN0b3JJdGVyYXRvciB7Citwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb25jdXJyZW50VmVj
dG9yPFQsIFNlZ21lbnRTaXplPjsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIENvbmN1cnJlbnRWZWN0
b3JJdGVyYXRvcjxULCBTZWdtZW50U2l6ZT4gSXRlcmF0b3I7CisKKyAgICB+Q29uY3VycmVudFZl
Y3Rvckl0ZXJhdG9yKCkgeyB9CisKKyAgICBUJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBt
X3ZlY3Rvci5hdChtX2luZGV4KTsgfQorICAgIFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVy
biAmbV92ZWN0b3IuYXQobV9pbmRleCk7IH0KKworICAgIC8vIE9ubHkgcHJlZml4ICsrIG9wZXJh
dG9yIHN1cHBvcnRlZAorICAgIEl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICB7CisgICAgICAg
IG1faW5kZXgrKzsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBJdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4ICYmICZtX3ZlY3RvciA9PSAmb3RoZXIubV92ZWN0
b3I7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEl0ZXJhdG9yJiBvdGhlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2luZGV4ICE9IG90aGVyLm1faW5kZXggfHwg
Jm1fdmVjdG9yICE9ICZvdGhlci5tX3ZlY3RvcjsKKyAgICB9CisKKyAgICBDb25jdXJyZW50VmVj
dG9ySXRlcmF0b3ImIG9wZXJhdG9yPShjb25zdCBDb25jdXJyZW50VmVjdG9ySXRlcmF0b3I8VCwg
U2VnbWVudFNpemU+JiBvdGhlcikKKyAgICB7CisgICAgICAgIG1fdmVjdG9yID0gb3RoZXIubV92
ZWN0b3I7CisgICAgICAgIG1faW5kZXggPSBvdGhlci5tX2luZGV4OworICAgICAgICByZXR1cm4g
KnRoaXM7CisgICAgfQorCitwcml2YXRlOgorICAgIENvbmN1cnJlbnRWZWN0b3JJdGVyYXRvcihD
b25jdXJyZW50VmVjdG9yPFQsIFNlZ21lbnRTaXplPiYgdmVjdG9yLCBzaXplX3QgaW5kZXgpCisg
ICAgICAgIDogbV92ZWN0b3IodmVjdG9yKQorICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAg
eworICAgIH0KKworICAgIENvbmN1cnJlbnRWZWN0b3I8VCwgU2VnbWVudFNpemU+JiBtX3ZlY3Rv
cjsKKyAgICBzaXplX3QgbV9pbmRleDsKK307CisKKy8vIENvbmN1cnJlbnRWZWN0b3IgaXMgbGlr
ZSBTZWdtZW50ZWRWZWN0b3IsIGJ1dCBzdWl0YWJsZSBmb3Igc2NlbmFyaW9zIHdoZXJlIG9uZSB0
aHJlYWQgYXBwZW5kcworLy8gZWxlbWVudHMgYW5kIGFub3RoZXIgdGhyZWFkIGNvbnRpbnVlcyB0
byBhY2Nlc3MgZWxlbWVudHMgYXQgbG93ZXIgaW5kaWNlcy4gT25seSBvbmUgdGhyZWFkIGNhbgor
Ly8gYXBwZW5kIGF0IGEgdGltZSwgc28gdGhhdCBhY3Rpdml0eSBzdGlsbCBuZWVkcyBsb2NraW5n
LiBzaXplKCkgYW5kIGxhc3QoKSBhcmUgcmFjeSB3aXRoIGFwcGVuZCgpLAorLy8gaW4gdGhlIHNl
bnNlIHRoYXQgbGFzdCgpIG1heSBjcmFzaCBpZiBhbiBhcHBlbmQoKSBpcyBydW5uaW5nIGNvbmN1
cnJlbnRseSBiZWNhdXNlIHNpemUoKS0xIGRvZXMgeWV0CisvLyBoYXZlIGEgc2VnbWVudC4gSG93
ZXZlciwgaWYgeW91J3JlIHRyeWluZyB0byB1c2UgbGFzdCgpIGNvbmN1cnJlbnRseSB3aXRoIGFw
cGVuZCgpLCB5b3UnbGwgbmVlZAorLy8gbG9ja2luZyBubyBtYXR0ZXIgd2hhdCAodG8ga25vdyB0
aGF0IHlvdSdyZSByZWFsbHkgZ2V0dGluZyB0aGUgbGFzdCBvbmUsIGFuZCBub3Qgc29tZXRoaW5n
IHRoYXQgd2FzCisvLyB0aGUgbGFzdCBvbmUgbG9uZyBhZ28pLCBzbyB5b3UgbWlnaHQgYXMgd2Vs
bCBkbyBpdCB5b3Vyc2VsZi4KKy8vCisvLyBUeXBpY2FsIHVzZXJzIG9mIENvbmN1cnJlbnRWZWN0
b3IgYWxyZWFkeSBoYXZlIHNvbWUgd2F5IG9mIGVuc3VyaW5nIHRoYXQgYnkgdGhlIHRpbWUgc29t
ZW9uZSBpcworLy8gdHJ5aW5nIHRvIHVzZSBhbiBpbmRleCwgc29tZSBzeW5jaHJvbml6YXRpb24g
aGFzIGhhcHBlbmVkIHRvIGVuc3VyZSB0aGF0IHRoaXMgaW5kZXggY29udGFpbnMgZnVsbHkKKy8v
IGluaXRpYWxpemVkIGRhdGEuIFRoZXJlYWZ0ZXIsIHRoZSBrZWVwZXIgb2YgdGhhdCBpbmRleCBp
cyBhbGxvd2VkIHRvIHVzZSBpdCBvbiB0aGlzIHZlY3RvciB3aXRob3V0CisvLyBhbnkgbG9ja2lu
ZyBvdGhlciB0aGFuIHdoYXQgaXMgbmVlZGVkIHRvIHByb3RlY3QgdGhlIGludGVncml0eSBvZiB0
aGUgZWxlbWVudCBhdCB0aGF0IGluZGV4LiBUaGlzCisvLyB3b3JrcyBiZWNhdXNlIHdlIGd1YXJh
bnRlZSBzaHJpbmtpbmcgdGhlIHZlY3RvciBpcyBpbXBvc3NpYmxlIGFuZCB0aGF0IGdyb3dpbmcg
dGhlIHZlY3RvciBkb2Vzbid0CisvLyBkZWxldGUgb2xkIHZlY3RvciBzcGluZXMuCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVCwgc2l6ZV90IFNlZ21lbnRTaXplPgorY2xhc3MgQ29uY3VycmVudFZlY3Rv
ciB7CisgICAgZnJpZW5kIGNsYXNzIENvbmN1cnJlbnRWZWN0b3JJdGVyYXRvcjxULCBTZWdtZW50
U2l6ZT47CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29uY3VycmVudFZlY3Rvcik7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIENvbmN1cnJl
bnRWZWN0b3JJdGVyYXRvcjxULCBTZWdtZW50U2l6ZT4gSXRlcmF0b3I7CisKKyAgICBDb25jdXJy
ZW50VmVjdG9yKCkgPSBkZWZhdWx0OworCisgICAgfkNvbmN1cnJlbnRWZWN0b3IoKQorICAgIHsK
KyAgICB9CisKKyAgICAvLyBUaGlzIG1heSByZXR1cm4gYSBzaXplIHRoYXQgaXMgYmlnZ2VyIHRo
YW4gdGhlIHVuZGVybHlpbmcgc3RvcmFnZSwgc2luY2UgdGhpcyBkb2VzIG5vdCBmZW5jZQorICAg
IC8vIG1hbmlwdWxhdGlvbnMgb2Ygc2l6ZS4gU28gaWYgeW91IGFjY2VzcyBhdCBzaXplKCktMSwg
eW91IG1heSBjcmFzaCBiZWNhdXNlIHRoaXMgaGFzbid0CisgICAgLy8gYWxsb2NhdGVkIHN0b3Jh
Z2UgZm9yIHRoYXQgaW5kZXggeWV0LgorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV9zaXplOyB9CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhc2l6ZSgpOyB9
CisKKyAgICBUJiBhdChzaXplX3QgaW5kZXgpCisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9T
RUNVUklUWV9JTVBMSUNBVElPTihpbmRleCA8IG1fc2l6ZSk7CisgICAgICAgIHJldHVybiBzZWdt
ZW50Rm9yKGluZGV4KS0+ZW50cmllc1tzdWJzY3JpcHRGb3IoaW5kZXgpXTsKKyAgICB9CisKKyAg
ICBjb25zdCBUJiBhdChzaXplX3QgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
Y29uc3RfY2FzdDxDb25jdXJyZW50VmVjdG9yPFQsIFNlZ21lbnRTaXplPio+KHRoaXMpLT5hdChp
bmRleCk7CisgICAgfQorCisgICAgVCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpCisgICAgewor
ICAgICAgICByZXR1cm4gYXQoaW5kZXgpOworICAgIH0KKworICAgIGNvbnN0IFQmIG9wZXJhdG9y
W10oc2l6ZV90IGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KGluZGV4KTsK
KyAgICB9CisKKyAgICBUJiBmaXJzdCgpCisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNV
UklUWV9JTVBMSUNBVElPTighaXNFbXB0eSgpKTsKKyAgICAgICAgcmV0dXJuIGF0KDApOworICAg
IH0KKyAgICBjb25zdCBUJiBmaXJzdCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlRfV0lU
SF9TRUNVUklUWV9JTVBMSUNBVElPTighaXNFbXB0eSgpKTsKKyAgICAgICAgcmV0dXJuIGF0KDAp
OworICAgIH0KKyAgICAKKyAgICAvLyBUaGlzIG1heSBjcmFzaCBpZiBydW4gY29uY3VycmVudGx5
IHRvIGFwcGVuZCgpLiBJZiB5b3Ugd2FudCB0byBhY2N1cmF0ZWx5IHRyYWNrIHRoZSBzaXplIG9m
CisgICAgLy8gdGhpcyB2ZWN0b3IsIHlvdSdsbCBoYXZlIHRvIGRvIGl0IHlvdXJzZWxmLCB3aXRo
IHlvdXIgb3duIGZlbmNpbmcuCisgICAgVCYgbGFzdCgpCisgICAgeworICAgICAgICBBU1NFUlRf
V0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighaXNFbXB0eSgpKTsKKyAgICAgICAgcmV0dXJuIGF0
KHNpemUoKSAtIDEpOworICAgIH0KKyAgICBjb25zdCBUJiBsYXN0KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFpc0VtcHR5KCkpOworICAg
ICAgICByZXR1cm4gYXQoc2l6ZSgpIC0gMSk7CisgICAgfQorCisgICAgVCB0YWtlTGFzdCgpCisg
ICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighaXNFbXB0eSgp
KTsKKyAgICAgICAgVCByZXN1bHQgPSBXVEZNb3ZlKGxhc3QoKSk7CisgICAgICAgIC0tbV9zaXpl
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
Li4uIEFyZ3M+CisgICAgdm9pZCBhcHBlbmQoQXJncyYmLi4uIGFyZ3MpCisgICAgeworICAgICAg
ICArK21fc2l6ZTsKKyAgICAgICAgaWYgKCFzZWdtZW50RXhpc3RzRm9yKG1fc2l6ZSAtIDEpKQor
ICAgICAgICAgICAgYWxsb2NhdGVTZWdtZW50KCk7CisgICAgICAgIG5ldyAoTm90TnVsbCwgJmxh
c3QoKSkgVChzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOworICAgIH0KKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgVCYgYWxsb2MoQXJncyYmLi4uIGFyZ3MpCisgICAg
eworICAgICAgICBhcHBlbmQoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKKyAgICAgICAg
cmV0dXJuIGxhc3QoKTsKKyAgICB9CisKKyAgICB2b2lkIHJlbW92ZUxhc3QoKQorICAgIHsKKyAg
ICAgICAgbGFzdCgpLn5UKCk7CisgICAgICAgIC0tbV9zaXplOworICAgIH0KKworICAgIHZvaWQg
Z3JvdyhzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIGlmIChzaXplID09IG1fc2l6ZSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgQVNTRVJUKHNpemUgPiBtX3NpemUpOworICAgICAg
ICBlbnN1cmVTZWdtZW50c0ZvcihzaXplKTsKKyAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3Np
emU7CisgICAgICAgIG1fc2l6ZSA9IHNpemU7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBvbGRT
aXplOyBpIDwgbV9zaXplOyArK2kpCisgICAgICAgICAgICBuZXcgKE5vdE51bGwsICZhdChpKSkg
VCgpOworICAgIH0KKworICAgIEl0ZXJhdG9yIGJlZ2luKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBJdGVyYXRvcigqdGhpcywgMCk7CisgICAgfQorCisgICAgSXRlcmF0b3IgZW5kKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBJdGVyYXRvcigqdGhpcywgbV9zaXplKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgc3RydWN0IFNlZ21lbnQgeworICAgICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9B
TExPQ0FURUQ7CisgICAgICAgICAgICAKKyAgICAgICAgVCBlbnRyaWVzW1NlZ21lbnRTaXplXTsK
KyAgICB9OworCisgICAgYm9vbCBzZWdtZW50RXhpc3RzRm9yKHNpemVfdCBpbmRleCkKKyAgICB7
CisgICAgICAgIHJldHVybiBpbmRleCAvIFNlZ21lbnRTaXplIDwgbV9udW1TZWdtZW50czsKKyAg
ICB9CisKKyAgICBTZWdtZW50KiBzZWdtZW50Rm9yKHNpemVfdCBpbmRleCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX3NlZ21lbnRzW2luZGV4IC8gU2VnbWVudFNpemVdLmdldCgpOworICAgIH0K
KworICAgIHNpemVfdCBzdWJzY3JpcHRGb3Ioc2l6ZV90IGluZGV4KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGluZGV4ICUgU2VnbWVudFNpemU7CisgICAgfQorCisgICAgdm9pZCBlbnN1cmVTZWdt
ZW50c0ZvcihzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIHNpemVfdCBzZWdtZW50Q291bnQg
PSAobV9zaXplICsgU2VnbWVudFNpemUgLSAxKSAvIFNlZ21lbnRTaXplOworICAgICAgICBzaXpl
X3QgbmVlZGVkU2VnbWVudENvdW50ID0gKHNpemUgKyBTZWdtZW50U2l6ZSAtIDEpIC8gU2VnbWVu
dFNpemU7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IHNlZ21lbnRDb3VudCA/IHNlZ21lbnRD
b3VudCAtIDEgOiAwOyBpIDwgbmVlZGVkU2VnbWVudENvdW50OyArK2kpCisgICAgICAgICAgICBl
bnN1cmVTZWdtZW50KGkpOworICAgIH0KKworICAgIHZvaWQgZW5zdXJlU2VnbWVudChzaXplX3Qg
c2VnbWVudEluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT04oc2VnbWVudEluZGV4IDw9IG1fbnVtU2VnbWVudHMpOworICAgICAgICBpZiAoc2VnbWVu
dEluZGV4ID09IG1fbnVtU2VnbWVudHMpCisgICAgICAgICAgICBhbGxvY2F0ZVNlZ21lbnQoKTsK
KyAgICB9CisKKyAgICB2b2lkIGFsbG9jYXRlU2VnbWVudCgpCisgICAgeworICAgICAgICBtX3Nl
Z21lbnRzLmdyb3cobV9udW1TZWdtZW50cyArIDEpOworICAgICAgICBtX3NlZ21lbnRzW21fbnVt
U2VnbWVudHMrK10gPSBzdGQ6Om1ha2VfdW5pcXVlPFNlZ21lbnQ+KCk7CisgICAgfQorCisgICAg
c2l6ZV90IG1fc2l6ZSB7IDAgfTsKKyAgICBDb25jdXJyZW50QnVmZmVyPHN0ZDo6dW5pcXVlX3B0
cjxTZWdtZW50Pj4gbV9zZWdtZW50czsKKyAgICBzaXplX3QgbV9udW1TZWdtZW50cyB7IDAgfTsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OkNvbmN1cnJlbnRWZWN0b3I7
CisKKyNlbmRpZiAvLyBDb25jdXJyZW50VmVjdG9yX2gK
</data>
<flag name="review"
          id="348232"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>