<?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>165712</bug_id>
          
          <creation_ts>2016-12-09 18:50:04 -0800</creation_ts>
          <short_desc>The DOM should have an advancing wavefront opaque root barrier</short_desc>
          <delta_ts>2016-12-12 14:47:47 -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>WebCore JavaScript</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=165760</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>149432</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1258526</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-12-09 18:50:04 -0800</bug_when>
    <thetext>I thought that I wouldn&apos;t need a barrier because of how the weak fixpoint works, but we still do need a barrier when root relationships change.

Fortunately, this isn&apos;t so difficult.

We could do a retreating wavefront barrier eventually, which would improve performance in programs that churn a lot of DOM things during an eden collection.  But I think that&apos;s a rare enough case - since eden collections are short - that I&apos;m OK with not caring initially.

Thanks @rniwa for coming up with the algorithm on IRC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1258537</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-12-09 19:03:54 -0800</bug_when>
    <thetext>For reference:

[18:17:49]  &lt;rniwa_&gt;	ConatinerNode::notifyChildInserted might be a good place
[18:19:04]  &lt;rniwa_&gt;	hm.... maybe ContainerNode::appendChildCommon and ContainerNode::insertBeforeCommon
[18:19:35]  &lt;rniwa_&gt;	and probably ContainerNode::notifyChildRemoved
[18:19:59]  &lt;rniwa_&gt;	and there&apos;s a special code path for removing the entire document from GC
[18:20:21]  &lt;rniwa_&gt;	in ContainerNode::removeDetachedChildren()
[18:20:40]  &lt;rniwa_&gt;	but that doesn&apos;t call the functions I mentioned above so we should be fine</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1258554</commentid>
    <comment_count>2</comment_count>
      <attachid>296772</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-12-09 20:14:31 -0800</bug_when>
    <thetext>Created attachment 296772
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1258603</commentid>
    <comment_count>3</comment_count>
      <attachid>296781</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-12-09 22:32:50 -0800</bug_when>
    <thetext>Created attachment 296781
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1258704</commentid>
    <comment_count>4</comment_count>
      <attachid>296805</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-12-10 10:15:10 -0800</bug_when>
    <thetext>Created attachment 296805
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1258805</commentid>
    <comment_count>5</comment_count>
      <attachid>296838</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-12-10 18:55:58 -0800</bug_when>
    <thetext>Created attachment 296838
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1258806</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-10 18:58:28 -0800</bug_when>
    <thetext>Attachment 296838 did not pass style-queue:


ERROR: Source/WebCore/dom/ContainerNodeAlgorithms.cpp:106:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/dom/ContainerNodeAlgorithms.cpp:158:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/bindings/js/CommonVM.cpp:40:  g_commonVMOrNull is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/bindings/js/CommonVM.cpp:41:  g_opaqueRootWriteBarrierEnabled is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebKit2/Shared/mac/WebMemorySampler.mac.mm:39:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/page/cocoa/ResourceUsageOverlayCocoa.mm:33:  Bad include order. Mixing system and custom headers.  [build/include_order] [4]
Total errors found: 6 in 58 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>1258816</commentid>
    <comment_count>7</comment_count>
      <attachid>296843</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-12-10 19:49:11 -0800</bug_when>
    <thetext>Created attachment 296843
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1258817</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-10 19:51:05 -0800</bug_when>
    <thetext>Attachment 296843 did not pass style-queue:


ERROR: Source/WebCore/dom/ContainerNodeAlgorithms.cpp:106:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/dom/ContainerNodeAlgorithms.cpp:158:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/bindings/js/CommonVM.cpp:40:  g_commonVMOrNull is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/bindings/js/CommonVM.cpp:41:  g_opaqueRootWriteBarrierEnabled is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebKit2/Shared/mac/WebMemorySampler.mac.mm:39:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/page/cocoa/ResourceUsageOverlayCocoa.mm:33:  Bad include order. Mixing system and custom headers.  [build/include_order] [4]
Total errors found: 6 in 57 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>1258820</commentid>
    <comment_count>9</comment_count>
      <attachid>296845</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-12-10 20:29:19 -0800</bug_when>
    <thetext>Created attachment 296845
better patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1258821</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-10 20:31:41 -0800</bug_when>
    <thetext>Attachment 296845 did not pass style-queue:


ERROR: Source/WebCore/dom/ContainerNodeAlgorithms.cpp:106:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/dom/ContainerNodeAlgorithms.cpp:158:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/bindings/js/CommonVM.cpp:40:  g_commonVMOrNull is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/bindings/js/CommonVM.cpp:41:  g_opaqueRootWriteBarrierEnabled is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebKit2/Shared/mac/WebMemorySampler.mac.mm:39:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/page/cocoa/ResourceUsageOverlayCocoa.mm:33:  Bad include order. Mixing system and custom headers.  [build/include_order] [4]
Total errors found: 6 in 59 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>1258871</commentid>
    <comment_count>11</comment_count>
      <attachid>296845</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-12-11 09:48:18 -0800</bug_when>
    <thetext>Comment on attachment 296845
better patch

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

r=me

&gt; Source/WebCore/ChangeLog:13
&gt; +           1) DOM at start: D-&gt;X-&gt;Y

OK, this is just C++ pointers. So these references are not observed by GC.
We just track liveness of these things by using the opaque root.

&gt; Source/WebCore/ChangeLog:14
&gt; +           2) Mark X, X-&gt;visitChildren, addOpaqueRoot(D)

The problem is, when removing X now, Y&apos;s opaque root becomes X. But it is not in the remember set.
But this should be live since X is marked.

&gt; Source/WebCore/ChangeLog:19
&gt; +           1) DOM at start: D, X-&gt;Y

Now, Y&apos;s opaque root is X.

&gt; Source/WebCore/ChangeLog:22
&gt; +           4) Y thinks it&apos;s not reachable (its opaque root, D, is not in the set).

Now, Y&apos;s opaque root becomes D. But D is not in the set.
But since Y is reachable from X, this should be live.

&gt; Source/WebCore/ChangeLog:27
&gt; +           Removal: add X (the removed child) to the opaque root set.
&gt; +           Insertion: add D (the insertion point) to the opaque root set.

To keep the liveness of the descendants of the X.

&gt; Source/WebCore/dom/ContainerNodeAlgorithms.cpp:106
&gt; +    writeBarrierOpaqueRoot([&amp;insertionPoint] () -&gt; void* { return insertionPoint.opaqueRoot(); });

OK, when the node is inserted, we should perform write barrier for the insertion point&apos;s opaque root.

&gt; Source/WebCore/dom/ContainerNodeAlgorithms.cpp:158
&gt; +    writeBarrierOpaqueRoot([&amp;child] () -&gt; void* { return &amp;child; });

And when removing, we should perform writeBarrierOpaqueRoot for the removed child node itself.
Without it, the descendants of the child&apos;s opaque root, `child` is not in the set.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1258876</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-12-11 10:20:17 -0800</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/209683</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1258967</commentid>
    <comment_count>13</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-12-11 21:26:29 -0800</bug_when>
    <thetext>I don&apos;t think this strategy can be correct. The opaque roots algorithm covers lots of relationships in the DOM, not just ConatinerNode relationships.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1258968</commentid>
    <comment_count>14</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-12-11 21:45:13 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; I don&apos;t think this strategy can be correct. The opaque roots algorithm
&gt; covers lots of relationships in the DOM, not just ConatinerNode
&gt; relationships.

I&apos;m not sure I follow.

We only need a barrier when an object&apos;s visitChildren method would change its mind about what it adds as an opaque root.  So long as a wrapper&apos;s visitChildren continues to report the same opaque root over the course of its lifetime, the GC needs no barrier.  The GC still evaluates weak references with the world stop, and still re-evaluates all of them every time it does an iteration.

It all comes down to what our JSBlahCustom.cpp code calls &quot;root()&quot;.  I spot-checked one, maybe two, other places at the time of landing the patch and found that their &quot;root()&quot; was OK.  I don&apos;t doubt that I will find more ways in which root() and other things are either racy or need a barrier, and I&apos;ll fix them as I find them!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259047</commentid>
    <comment_count>15</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-12-12 08:50:01 -0800</bug_when>
    <thetext>&gt; It all comes down to what our JSBlahCustom.cpp code calls &quot;root()&quot;.  I
&gt; spot-checked one, maybe two, other places at the time of landing the patch
&gt; and found that their &quot;root()&quot; was OK.  I don&apos;t doubt that I will find more
&gt; ways in which root() and other things are either racy or need a barrier, and
&gt; I&apos;ll fix them as I find them!

Yes, it&apos;s the other places I&apos;m talking about -- namely, any visitChildren function that is not in the JSNode hierarchy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259050</commentid>
    <comment_count>16</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-12-12 09:02:13 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; &gt; It all comes down to what our JSBlahCustom.cpp code calls &quot;root()&quot;.  I
&gt; &gt; spot-checked one, maybe two, other places at the time of landing the patch
&gt; &gt; and found that their &quot;root()&quot; was OK.  I don&apos;t doubt that I will find more
&gt; &gt; ways in which root() and other things are either racy or need a barrier, and
&gt; &gt; I&apos;ll fix them as I find them!
&gt; 
&gt; Yes, it&apos;s the other places I&apos;m talking about -- namely, any visitChildren
&gt; function that is not in the JSNode hierarchy.

When you said that you didn&apos;t think that the strategy can be correct, were you merely saying that this patch does not insert all of the barriers that we will eventually insert?  I agree that it most likely does not.

Or do you believe that this strategy will never ever work for some of the other visitChildren() methods because of a fundamental issue?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259059</commentid>
    <comment_count>17</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-12-12 09:20:15 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #15)
&gt; &gt; &gt; It all comes down to what our JSBlahCustom.cpp code calls &quot;root()&quot;.  I
&gt; &gt; &gt; spot-checked one, maybe two, other places at the time of landing the patch
&gt; &gt; &gt; and found that their &quot;root()&quot; was OK.  I don&apos;t doubt that I will find more
&gt; &gt; &gt; ways in which root() and other things are either racy or need a barrier, and
&gt; &gt; &gt; I&apos;ll fix them as I find them!
&gt; &gt; 
&gt; &gt; Yes, it&apos;s the other places I&apos;m talking about -- namely, any visitChildren
&gt; &gt; function that is not in the JSNode hierarchy.
&gt; 
&gt; When you said that you didn&apos;t think that the strategy can be correct, were
&gt; you merely saying that this patch does not insert all of the barriers that
&gt; we will eventually insert?  I agree that it most likely does not.
&gt; 
&gt; Or do you believe that this strategy will never ever work for some of the
&gt; other visitChildren() methods because of a fundamental issue?

BTW - if such a thing did exist, then I&apos;d just give those visitChildren methods this API:

SlotVisitor::revisitOnEachFixpoint()

I just don&apos;t think I&apos;ll need it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259105</commentid>
    <comment_count>18</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-12-12 10:27:43 -0800</bug_when>
    <thetext>&gt; Or do you believe that this strategy will never ever work for some of the
&gt; other visitChildren() methods because of a fundamental issue?

Sorry, I should have been clearer: I think this strategy could work in most cases; and that we&apos;ve missed some cases; and that some cases like JSManagedValue may never work with this strategy because the thing that would do the barrier is outside of our code base.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259109</commentid>
    <comment_count>19</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-12-12 10:35:36 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; &gt; Or do you believe that this strategy will never ever work for some of the
&gt; &gt; other visitChildren() methods because of a fundamental issue?
&gt; 
&gt; Sorry, I should have been clearer: I think this strategy could work in most
&gt; cases; and that we&apos;ve missed some cases; and that some cases like
&gt; JSManagedValue may never work with this strategy because the thing that
&gt; would do the barrier is outside of our code base.

OK - that&apos;s not for off from what I expected.

I&apos;ve got a patch coming for AudioTrack, which needs a very simple barrier.

JSManagedValue can use rescanOnEachIteration or whatever.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259139</commentid>
    <comment_count>20</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-12-12 11:38:48 -0800</bug_when>
    <thetext>Here&apos;s an alternative design, which might simplify and save us from having to dig up the remaining missing barriers:

Change the API from

    virtual bool isReachableFromOpaqueRoots(Handle&lt;Unknown&gt;, void* context, SlotVisitor&amp;);

to

    virtual void* opaqueRoot(Handle&lt;Unknown&gt;, void* context, SlotVisitor&amp;);
    virtual bool isReachableForWeirdReasons(Handle&lt;Unknown&gt;, void* context, SlotVisitor&amp;);

Then the weak pointer scan says:

(1) Observe weird reasons.

if (isReachableForWeirdReasons())
    mark object // for efficiency, real implementation just puts object on the grey list

This covers things that have nothing to do with object graph relationships and instead are &quot;I am loading&quot; or &quot;I am playing audio&quot; and things like that.

(2) Mark things if necessary:

o = opaqueRoot();
if (object is marked)
    add o to set
else if (o is in set and object is not marked)
    mark object // for efficiency, real implementation just puts object on the grey list

This algorithm is immune to mutations because it observes all opaque pointer relationships during the weak pointer scan, which runs with the world stopped.

I think I prefer this because it solves an immediate problem and it frees future DOM programmers from having to invent new kinds of barriers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259143</commentid>
    <comment_count>21</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-12-12 11:54:03 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; Here&apos;s an alternative design, which might simplify and save us from having
&gt; to dig up the remaining missing barriers:
&gt; 
&gt; Change the API from
&gt; 
&gt;     virtual bool isReachableFromOpaqueRoots(Handle&lt;Unknown&gt;, void* context,
&gt; SlotVisitor&amp;);
&gt; 
&gt; to
&gt; 
&gt;     virtual void* opaqueRoot(Handle&lt;Unknown&gt;, void* context, SlotVisitor&amp;);

What does this do?

&gt;     virtual bool isReachableForWeirdReasons(Handle&lt;Unknown&gt;, void* context,
&gt; SlotVisitor&amp;);
&gt; 
&gt; Then the weak pointer scan says:
&gt; 
&gt; (1) Observe weird reasons.
&gt; 
&gt; if (isReachableForWeirdReasons())
&gt;     mark object // for efficiency, real implementation just puts object on
&gt; the grey list
&gt; 
&gt; This covers things that have nothing to do with object graph relationships
&gt; and instead are &quot;I am loading&quot; or &quot;I am playing audio&quot; and things like that.

So, this is the weak scan?

&gt; 
&gt; (2) Mark things if necessary:
&gt; 
&gt; o = opaqueRoot();
&gt; if (object is marked)
&gt;     add o to set
&gt; else if (o is in set and object is not marked)
&gt;     mark object // for efficiency, real implementation just puts object on
&gt; the grey list

When does this algorithm run?  Is this a barrier?

&gt; 
&gt; This algorithm is immune to mutations because it observes all opaque pointer
&gt; relationships during the weak pointer scan, which runs with the world
&gt; stopped.

That&apos;s what rescanOnEachIteration would give to any class that wanted to opt into it.

Another form of this API might be:
- addOpaqueRoot puts the caller into the rescan: his visitChildren will get called on each weak fixpoint iteration.
- addOpaqueRootWithoutRescan behaves like addOpaqueRoot does now, and requires you to use a barrier.

Using rescan means that the weak scan to has to both evaluate what to put into the opaque set (execute what now happens in visitChildren) and evaluate what to mark based on what is in the opaque set (execute what now happens in weak visiting).  In my simple approach, the cost would probably be 50/50 between the stuff you have to do to all visitChildren and the hashtable lookup itself.

&gt; 
&gt; I think I prefer this because it solves an immediate problem and it frees
&gt; future DOM programmers from having to invent new kinds of barriers.

I think that I&apos;m implementing a superset of what you are proposing, in the sense that one of the modes does not require any changes to how DOM code gets written.  I want both modes because I want to measure the difference between them by changing which visitChildren methods opt into the rescan.  I have a hunch that we&apos;ll end up with something like this:

- Most code uses the default addOpaqueRoot, which puts you into the rescan so you&apos;re safe.
- Node hierarchy uses addOpaqueRootWithoutRescan to get the barrier-based algorithm.
- Some other DOM things get the barrier-based algorithm because they either have no barriers or the barrier is trivial.

I don&apos;t really know how your proposed algorithm stacks up, because I don&apos;t quite grok what it does.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259179</commentid>
    <comment_count>22</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-12-12 13:24:49 -0800</bug_when>
    <thetext>&gt; &gt;     virtual void* opaqueRoot(Handle&lt;Unknown&gt;, void* context, SlotVisitor&amp;);
&gt; 
&gt; What does this do?

It returns the object&apos;s opaque root. Usually like so:

return root(impl())

&gt; So, this is the weak scan?

This algorithm runs, with the world stopped, when we scan WeakBlocks.

&gt; &gt; (2) Mark things if necessary:
&gt; &gt; 
&gt; &gt; o = opaqueRoot();
&gt; &gt; if (object is marked)
&gt; &gt;     add o to set
&gt; &gt; else if (o is in set and object is not marked)
&gt; &gt;     mark object // for efficiency, real implementation just puts object on
&gt; &gt; the grey list
&gt; 
&gt; When does this algorithm run?  Is this a barrier?

This algorithm runs, with the world stopped, when we scan WeakBlocks.

This is not a barrier.

&gt; That&apos;s what rescanOnEachIteration would give to any class that wanted to opt
&gt; into it.

I agree that it is also possible to apply this algorithm to a fraction of objects, and apply barriers to the other fraction. I also agree that it&apos;s possible to implement a similar algorithm by just calling visitChildren again -- although that has the additional cost of visiting a bunch of stuff we don&apos;t need to visit.

&gt; Another form of this API might be:
&gt; - addOpaqueRoot puts the caller into the rescan: his visitChildren will get
&gt; called on each weak fixpoint iteration.
&gt; - addOpaqueRootWithoutRescan behaves like addOpaqueRoot does now, and
&gt; requires you to use a barrier.

Seems reasonable. I think it&apos;s a clear improvement to make the no-barrier behavior the default.

&gt; &gt; I think I prefer this because it solves an immediate problem and it frees
&gt; &gt; future DOM programmers from having to invent new kinds of barriers.
&gt; 
&gt; I think that I&apos;m implementing a superset of what you are proposing, in the
&gt; sense that one of the modes does not require any changes to how DOM code
&gt; gets written.  I want both modes because I want to measure the difference
&gt; between them by changing which visitChildren methods opt into the rescan.

Seems reasonable to benchmark the alternatives.

&gt; I don&apos;t really know how your proposed algorithm stacks up, because I don&apos;t
&gt; quite grok what it does.

It&apos;s the equivalent of rescanOnEachIteration for all objects, with the cost savings of not doing other visitChildren things and the clarity advantage of providing an API where DOM programmers just need to write a function to identify a root, rather than a full visitChildren function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259215</commentid>
    <comment_count>23</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-12-12 14:45:39 -0800</bug_when>
    <thetext>OK - I&apos;ve investigating what the DOM does some more.

I think that I&apos;m going to just make addOpaqueRoot do rescanning.  And I&apos;ll remove the opaque root barrier.  Then I&apos;ll measure everything.

I don&apos;t want to devote effort to optimizing this if it costs nothing anyway!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259216</commentid>
    <comment_count>24</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-12-12 14:47:37 -0800</bug_when>
    <thetext>Tracked here:</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259217</commentid>
    <comment_count>25</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-12-12 14:47:47 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; Tracked here:

https://bugs.webkit.org/show_bug.cgi?id=165760</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>296772</attachid>
            <date>2016-12-09 20:14:31 -0800</date>
            <delta_ts>2016-12-09 22:32:50 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>49784</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA5NjQ2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBA
CisyMDE2LTEyLTA5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
VGhlIERPTSBzaG91bGQgaGF2ZSBhbiBhZHZhbmNpbmcgd2F2ZWZyb250IG9wYXF1ZSByb290IGJh
cnJpZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
NTcxMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAg
ICAgICAgVGhpcyBleHBvc2VzIHRoZSBhYmlsaXR5IHRvIGZpcmUgYW4gYWR2YW5jaW5nIHdhdmVm
cm9udCBiYXJyaWVyIG9uIG9wYXF1ZSByb290cy4gSXQgYWxzbworICAgICAgICBnaXZlcyBjbGll
bnRzIHRoZSBhYmlsaXR5IHRvIG1haW50YWluIHRoZWlyIG93biBjYWNoZSBvZiB3aGV0aGVyIHRo
YXQgYmFycmllciBuZWVkcyB0bworICAgICAgICBiZSBlbmFibGVkLgorICAgICAgICAKKyAgICAg
ICAgVGhlIERPTSB1c2VzIHRoaXMgdG8gZW5hYmxlIGEgdmVyeSBjaGVhcCBiYXJyaWVyIG9uIHRo
ZSBET00uCisKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjpi
ZWdpbk1hcmtpbmcpOgorICAgICAgICAoSlNDOjpIZWFwOjplbmRNYXJraW5nKToKKyAgICAgICAg
KEpTQzo6SGVhcDo6d3JpdGVCYXJyaWVyT3BhcXVlUm9vdFNsb3cpOgorICAgICAgICAoSlNDOjpI
ZWFwOjphZGRNdXRhdG9yU2hvdWxkQmVGZW5jZWRDYWNoZSk6CisgICAgICAgIChKU0M6OkhlYXA6
OnNldE11dGF0b3JTaG91bGRCZUZlbmNlZCk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAg
ICAgICogaGVhcC9IZWFwSW5saW5lcy5oOgorICAgICAgICAoSlNDOjp3cml0ZUJhcnJpZXJPcGFx
dWVSb290KToKKwogMjAxNi0xMi0wOSAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxl
LmNvbT4KIAogICAgICAgICBBbm5vdGF0ZSBNZWRpYVN0cmVhbSBhbmQgV2ViUlRDIGlkbCB3aXRo
IEVuYWJsZWRBdFJ1bnRpbWUgZmxhZwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5j
cHAJKHJldmlzaW9uIDIwOTYzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MTUsOCArODE1LDcgQEAgdm9pZCBIZWFwOjpiZWdpbk1h
cmtpbmcoKQogICAgICAgICBtX2NvZGVCbG9ja3MtPmNsZWFyTWFya3NGb3JGdWxsQ29sbGVjdGlv
bigpOwogICAgIG1faml0U3R1YlJvdXRpbmVzLT5jbGVhck1hcmtzKCk7CiAgICAgbV9vYmplY3RT
cGFjZS5iZWdpbk1hcmtpbmcoKTsKLSAgICBtX211dGF0b3JTaG91bGRCZUZlbmNlZCA9IHRydWU7
Ci0gICAgbV9iYXJyaWVyVGhyZXNob2xkID0gdGF1dG9sb2dpY2FsVGhyZXNob2xkOworICAgIHNl
dE11dGF0b3JTaG91bGRCZUZlbmNlZCh0cnVlKTsKICAgICBtX2JhcnJpZXJzRXhlY3V0ZWQgPSAw
OwogfQogCkBAIC05NDMsOCArOTQyLDcgQEAgdm9pZCBIZWFwOjplbmRNYXJraW5nKCkKICAgICBt
X3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzLnJlbW92ZUFsbCgpOwogICAgIAogICAgIG1fb2JqZWN0
U3BhY2UuZW5kTWFya2luZygpOwotICAgIG1fbXV0YXRvclNob3VsZEJlRmVuY2VkID0gT3B0aW9u
czo6Zm9yY2VGZW5jZWRCYXJyaWVyKCk7Ci0gICAgbV9iYXJyaWVyVGhyZXNob2xkID0gT3B0aW9u
czo6Zm9yY2VGZW5jZWRCYXJyaWVyKCkgPyB0YXV0b2xvZ2ljYWxUaHJlc2hvbGQgOiBibGFja1Ro
cmVzaG9sZDsKKyAgICBzZXRNdXRhdG9yU2hvdWxkQmVGZW5jZWQoT3B0aW9uczo6Zm9yY2VGZW5j
ZWRCYXJyaWVyKCkpOwogfQogCiBzaXplX3QgSGVhcDo6b2JqZWN0Q291bnQoKQpAQCAtMjMxMyw0
ICsyMzExLDI3IEBAIHZvaWQgSGVhcDo6Zm9yRWFjaFNsb3RWaXNpdG9yKGNvbnN0IEZ1bmMKICAg
ICAgICAgZnVuYygqc2xvdFZpc2l0b3IpOwogfQogCit2b2lkIEhlYXA6OndyaXRlQmFycmllck9w
YXF1ZVJvb3RTbG93KHZvaWQqIHJvb3QpCit7CisgICAgQVNTRVJUKG11dGF0b3JTaG91bGRCZUZl
bmNlZCgpKTsKKyAgICAKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fb3BhcXVlUm9vdHNN
dXRleCk7CisgICAgbV9vcGFxdWVSb290cy5hZGQocm9vdCk7Cit9CisKK3ZvaWQgSGVhcDo6YWRk
TXV0YXRvclNob3VsZEJlRmVuY2VkQ2FjaGUoYm9vbCYgY2FjaGUpCit7CisgICAgQVNTRVJUKGhh
c0hlYXBBY2Nlc3MoKSk7CisgICAgY2FjaGUgPSBtX211dGF0b3JTaG91bGRCZUZlbmNlZDsKKyAg
ICBtX211dGF0b3JTaG91bGRCZUZlbmNlZENhY2hlcy5hcHBlbmQoJmNhY2hlKTsKK30KKwordm9p
ZCBIZWFwOjpzZXRNdXRhdG9yU2hvdWxkQmVGZW5jZWQoYm9vbCB2YWx1ZSkKK3sKKyAgICBtX211
dGF0b3JTaG91bGRCZUZlbmNlZCA9IHZhbHVlOworICAgIG1fYmFycmllclRocmVzaG9sZCA9IHZh
bHVlID8gdGF1dG9sb2dpY2FsVGhyZXNob2xkIDogYmxhY2tUaHJlc2hvbGQ7CisgICAgZm9yIChi
b29sKiBjYWNoZSA6IG1fbXV0YXRvclNob3VsZEJlRmVuY2VkQ2FjaGVzKQorICAgICAgICAqY2Fj
aGUgPSB2YWx1ZTsKK30KKyAgICAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjA5NjM3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNiArMTI1LDggQEAgcHVibGlj
OgogCiAgICAgV3JpdGVCYXJyaWVyQnVmZmVyJiB3cml0ZUJhcnJpZXJCdWZmZXIoKSB7IHJldHVy
biBtX3dyaXRlQmFycmllckJ1ZmZlcjsgfQogICAgIHZvaWQgZmx1c2hXcml0ZUJhcnJpZXJCdWZm
ZXIoSlNDZWxsKik7CisgICAgCisgICAgdm9pZCB3cml0ZUJhcnJpZXJPcGFxdWVSb290KHZvaWQq
KTsKIAogICAgIEhlYXAoVk0qLCBIZWFwVHlwZSk7CiAgICAgfkhlYXAoKTsKQEAgLTM0OSw2ICsz
NTEsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBwcmV2ZW50Q29sbGVjdGlvbigpOwogICAgIHZvaWQg
YWxsb3dDb2xsZWN0aW9uKCk7CiAgICAgCisgICAgdm9pZCBhZGRNdXRhdG9yU2hvdWxkQmVGZW5j
ZWRDYWNoZShib29sJik7CisgICAgCiAjaWYgVVNFKENGKQogICAgIENGUnVuTG9vcFJlZiBydW5M
b29wKCkgY29uc3QgeyByZXR1cm4gbV9ydW5Mb29wLmdldCgpOyB9CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBzZXRSdW5Mb29wKENGUnVuTG9vcFJlZik7CkBAIC00OTAsNiArNDk0LDEwIEBA
IHByaXZhdGU6CiAgICAgc2l6ZV90IHRocmVhZEJ5dGVzVmlzaXRlZCgpOwogICAgIAogICAgIHZv
aWQgZm9yRWFjaENvZGVCbG9ja0ltcGwoY29uc3QgU2NvcGVkTGFtYmRhPGJvb2woQ29kZUJsb2Nr
Kik+Jik7CisgICAgCisgICAgdm9pZCB3cml0ZUJhcnJpZXJPcGFxdWVSb290U2xvdyh2b2lkKik7
CisgICAgCisgICAgdm9pZCBzZXRNdXRhdG9yU2hvdWxkQmVGZW5jZWQoYm9vbCB2YWx1ZSk7CiAK
ICAgICBjb25zdCBIZWFwVHlwZSBtX2hlYXBUeXBlOwogICAgIGNvbnN0IHNpemVfdCBtX3JhbVNp
emU7CkBAIC01NDksNiArNTU3LDcgQEAgcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXJCdWZmZXIg
bV93cml0ZUJhcnJpZXJCdWZmZXI7CiAgICAgYm9vbCBtX211dGF0b3JTaG91bGRCZUZlbmNlZCB7
IE9wdGlvbnM6OmZvcmNlRmVuY2VkQmFycmllcigpIH07CiAgICAgdW5zaWduZWQgbV9iYXJyaWVy
VGhyZXNob2xkIHsgT3B0aW9uczo6Zm9yY2VGZW5jZWRCYXJyaWVyKCkgPyB0YXV0b2xvZ2ljYWxU
aHJlc2hvbGQgOiBibGFja1RocmVzaG9sZCB9OworICAgIFZlY3Rvcjxib29sKj4gbV9tdXRhdG9y
U2hvdWxkQmVGZW5jZWRDYWNoZXM7CiAKICAgICBWTSogbV92bTsKICAgICBkb3VibGUgbV9sYXN0
RnVsbEdDTGVuZ3RoOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5l
cy5oCShyZXZpc2lvbiAyMDk2MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNzAsNCArMzcwLDEwIEBAIGlubGluZSB2b2lk
IEhlYXA6OnN0b3BJZk5lY2Vzc2FyeSgpCiAgICAgc3RvcElmTmVjZXNzYXJ5U2xvdygpOwogfQog
CitpbmxpbmUgdm9pZCB3cml0ZUJhcnJpZXJPcGFxdWVSb290KHZvaWQqIHJvb3QpCit7CisgICAg
aWYgKG11dGF0b3JTaG91bGRCZUZlbmNlZCgpKQorICAgICAgICB3cml0ZUJhcnJpZXJPcGFxdWVS
b290U2xvdyhyb290KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAyMDk2MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxMTkgQEAKKzIwMTYtMTItMDkgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFw
cGxlLmNvbT4KKworICAgICAgICBUaGUgRE9NIHNob3VsZCBoYXZlIGFuIGFkdmFuY2luZyB3YXZl
ZnJvbnQgb3BhcXVlIHJvb3QgYmFycmllcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NzEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2UgdGhpcyB3YXMgY292ZXJlZCBi
eSBjcmFzaGluZyB0ZXN0cy4KKyAgICAgICAgCisgICAgICAgIENvbnNpZGVyIHRoZXNlIHR3byBj
YXNlczoKKyAgICAgICAgCisgICAgICAgICAgIFJlbW92YWw6CisgICAgICAgICAgIDEpIERPTSBh
dCBzdGFydDogRC0+WC0+WQorICAgICAgICAgICAyKSBNYXJrIFgsIFgtPnZpc2l0Q2hpbGRyZW4s
IGFkZE9wYXF1ZVJvb3QoRCkKKyAgICAgICAgICAgMykgcmVtb3ZlIFgKKyAgICAgICAgICAgNCkg
WSB0aGlua3MgaXQncyBub3QgcmVhY2hhYmxlIChpdHMgb3BhcXVlIHJvb3QsIFgsIGlzIG5vdCBp
biB0aGUgc2V0KS4KKyAgICAgICAgICAgCisgICAgICAgICAgIEluc2VydGlvbjoKKyAgICAgICAg
ICAgMSkgRE9NIGF0IHN0YXJ0OiBELCBYLT5ZCisgICAgICAgICAgIDIpIE1hcmsgWCwgWC0+dmlz
aXRDaGlsZHJlbiwgYWRkT3BhcXVlUm9vdChYKQorICAgICAgICAgICAzKSBpbnNlcnQgWCBpbnRv
IEQKKyAgICAgICAgICAgNCkgWSB0aGlua3MgaXQncyBub3QgcmVhY2hhYmxlIChpdHMgb3BhcXVl
IHJvb3QsIEQsIGlzIG5vdCBpbiB0aGUgc2V0KS4KKyAgICAgICAgCisgICAgICAgIFdlIGNhbiBm
aXggdGhpcyB3aXRoIHR3byBiYXJyaWVyczoKKyAgICAgICAgCisgICAgICAgICAgIFJlbW92YWw6
IGFkZCBYICh0aGUgcmVtb3ZlZCBjaGlsZCkgdG8gdGhlIG9wYXF1ZSByb290IHNldC4KKyAgICAg
ICAgICAgSW5zZXJ0aW9uOiBhZGQgRCAodGhlIGluc2VydGlvbiBwb2ludCkgdG8gdGhlIG9wYXF1
ZSByb290IHNldC4KKyAgICAgICAgCisgICAgICAgIFRoYW5rcyBSeXNvc3VrZSBmb3IgY29taW5n
IHVwIHdpdGggdGhpcyBpZGVhIQorICAgICAgICAKKyAgICAgICAgVG8gbWFrZSB0aGlzIGJhcnJp
ZXIgdmVyeSBmYXN0LCB0aGUgV2ViQ29yZSBjYWNoZXMgdGhlIEpTQyBWTSdzIGJhcnJpZXIgc3Rh
dGUgaW4KKyAgICAgICAgaXRzIG93biBnbG9iYWwgdmFyaWFibGUgZm9yIHZlcnkgZmFzdCBhY2Nl
c3MuIFRoaXMgdmFyaWFibGUgd2lsbCBiZSBmYWxzZSB3aGVuIHRoZQorICAgICAgICBWTSBpcyBp
ZGxlLCBmb3IgZXhhbXBsZS4gV2Ugc2tpcCB0aGUgYmFycmllciB3aGVuIGl0J3MgZmFsc2UsIHdo
aWNoIGlzIHRoZSBjb21tb24gY2FzZS4KKyAgICAgICAgCisgICAgICAgIFRvIG1ha2UgdGhhdCBj
YWNoaW5nIG1vcmUgc2Vuc2libGUsIEkgZmluYWxseSBnYXZlIFdlYkNvcmUgYSBjZW50cmFsIGhl
YWRlciBmb3IKKyAgICAgICAgdGhlIGNvbW1vbiBWTSAoQ29tbW9uVk0uaCkuCisKKyAgICAgICAg
KiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nl
c3Nvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTRFBQcm9jZXNzb3I6OmNhbGxTY3JpcHQpOgor
ICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9Db21tb25WTS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29tbW9u
Vk1TbG93KToKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlQmFycmllck9wYXF1ZVJvb3RTbG93KToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9Db21tb25WTS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OmNvbW1vblZNKToKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlQmFycmllck9wYXF1ZVJvb3Qp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjptYWluVGhyZWFkTm9ybWFsV29ybGQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0dD
Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb2xsZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdDQ29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3RTb29uKToKKyAgICAgICAgKFdlYkNv
cmU6OkdDQ29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3ROb3cpOgorICAgICAgICAoV2ViQ29yZTo6
R0NDb250cm9sbGVyOjpnYXJiYWdlQ29sbGVjdE5vd0lmTm90RG9uZVJlY2VudGx5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdDQ29udHJvbGxlcjo6c2V0SmF2YVNjcmlwdEdhcmJhZ2VDb2xsZWN0b3JU
aW1lckVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6R0NDb250cm9sbGVyOjpkZWxldGVBbGxD
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkdDQ29udHJvbGxlcjo6ZGVsZXRlQWxsTGlua2VkQ29k
ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI6Omxvb2t1cE5hbWVzcGFj
ZVVSSSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmFkZEltcHVyZVByb3BlcnR5KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RP
TVdpbmRvd0Jhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpmaXJl
RnJhbWVDbGVhcmVkV2F0Y2hwb2ludHNGb3JXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6SlNE
T01XaW5kb3dCYXNlOjpjb21tb25WTSk6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3MvanMv
SlNET01XaW5kb3dCYXNlLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVs
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd1NoZWxsOjpzZXRXaW5kb3cpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5oOgorICAgICAgICAoV2ViQ29yZTo6
cm9vdCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhY2hlZEZyYW1lRGF0YTo6U2NyaXB0Q2FjaGVkRnJh
bWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhY2hlZEZyYW1lRGF0YTo6cmVzdG9y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWNoZWRGcmFtZURhdGE6OmNsZWFyKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdENvbnRyb2xsZXI6On5TY3JpcHRDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdENvbnRyb2xsZXI6OmNyZWF0ZVdvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdENvbnRyb2xsZXI6OmdldEFsbFdvcmxkcyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRD
b250cm9sbGVyOjpjbGVhcldpbmRvd1NoZWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENv
bnRyb2xsZXI6OmNhY2hlYWJsZUJpbmRpbmdSb290T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcmlwdENvbnRyb2xsZXI6OmJpbmRpbmdSb290T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcmlwdENvbnRyb2xsZXI6OndpbmRvd1NjcmlwdE5QT2JqZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdENvbnRyb2xsZXI6OmpzT2JqZWN0Rm9yUGx1Z2luRWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpjbGVhclNjcmlwdE9iamVjdHMpOgorICAgICAg
ICAqIGRvbS9Db2xsZWN0aW9uSW5kZXhDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZXBv
cnRFeHRyYU1lbW9yeUFsbG9jYXRlZEZvckNvbGxlY3Rpb25JbmRleENhY2hlKToKKyAgICAgICAg
KiBkb20vQ29udGFpbmVyTm9kZS5jcHA6CisgICAgICAgICogZG9tL0NvbnRhaW5lck5vZGVBbGdv
cml0aG1zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om5vdGlmeUNoaWxkTm9kZUluc2VydGVkKToK
KyAgICAgICAgKFdlYkNvcmU6Om5vdGlmeUNoaWxkTm9kZVJlbW92ZWQpOgorICAgICAgICAqIGRv
bS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2hvdWxkQnlwYXNz
TWFpbldvcmxkQ29udGVudFNlY3VyaXR5UG9saWN5KToKKyAgICAgICAgKiBkb20vTm9kZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6b3BhcXVlUm9vdCk6CisgICAgICAgICogZG9tL1Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6dm0pOgorICAgICAgICAqIGh0bWwvSFRNTEltYWdlTG9hZGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxJbWFnZUxvYWRlcjo6bm90aWZ5RmluaXNoZWQpOgorICAgICAgICAq
IGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50OjpwYXVzZUFmdGVyRGV0YWNoZWRUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnQ6OmVuc3VyZUlzb2xhdGVkV29ybGQpOgorICAgICAgICAqIGh0bWwvSFRNTFBs
dWdJbkltYWdlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwbHVnSW5JbWFnZUVsZW1l
bnRJc29sYXRlZFdvcmxkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjp2bSk6CisgICAg
ICAgICogaW5zcGVjdG9yL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpQYWdlU2NyaXB0RGVidWdTZXJ2ZXI6OlBhZ2VTY3JpcHREZWJ1Z1NlcnZlcik6CisgICAg
ICAgICogcGFnZS9QZXJmb3JtYW5jZUxvZ2dpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGVy
Zm9ybWFuY2VMb2dnaW5nOjptZW1vcnlVc2FnZVN0YXRpc3RpY3MpOgorICAgICAgICAoV2ViQ29y
ZTo6UGVyZm9ybWFuY2VMb2dnaW5nOjpqYXZhU2NyaXB0T2JqZWN0Q291bnRzKToKKyAgICAgICAg
KiBwYWdlL1Jlc291cmNlVXNhZ2VUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VVc2FnZVRocmVhZDo6Y3JlYXRlVGhyZWFkSWZOZWVkZWQpOgorICAgICAgICAqIHN2Zy9ncmFw
aGljcy9TVkdJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6cmVwb3J0QXBw
cm94aW1hdGVNZW1vcnlDb3N0KToKKyAgICAgICAgKiB0ZXN0aW5nL01lbW9yeUluZm8uaDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lbW9yeUluZm86Ok1lbW9yeUluZm8pOgorCiAyMDE2LTEyLTA2ICBK
aWV3ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW1BhcnQgMiBvZiAy
XSBBZGQgc3VwcG9ydCBmb3IgUEtDUzggZm9ybWF0IHdoaWxlIGRvaW5nIFN1YnRsZUNyeXB0by5p
bXBvcnRLZXkvZXhwb3J0S2V5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjA5
NjM3KQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTEwNzYsNiArMTA3Niw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBiaW5kaW5ncy9qcy9D
YWNoZWRNb2R1bGVTY3JpcHQuY3BwCiAgICAgYmluZGluZ3MvanMvQ2FjaGVkTW9kdWxlU2NyaXB0
TG9hZGVyLmNwcAogICAgIGJpbmRpbmdzL2pzL0NhbGxiYWNrRnVuY3Rpb24uY3BwCisgICAgYmlu
ZGluZ3MvanMvQ29tbW9uVk0uY3BwCiAgICAgYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmNw
cAogICAgIGJpbmRpbmdzL2pzL0RpY3Rpb25hcnkuY3BwCiAgICAgYmluZGluZ3MvanMvR0NDb250
cm9sbGVyLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9TRFBQ
cm9jZXNzb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vU0RQUHJvY2Vzc29yLmNwcAkocmV2aXNpb24gMjA5NjM3KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNCw2ICszNCw3IEBACiAjaWYgRU5BQkxFKFdFQl9SVEMpCiAjaW5jbHVkZSAiU0RQUHJvY2Vz
c29yLmgiCiAKKyNpbmNsdWRlICJDb21tb25WTS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5o
IgpAQCAtNDk1LDcgKzQ5Niw3IEBAIGJvb2wgU0RQUHJvY2Vzc29yOjpjYWxsU2NyaXB0KGNvbnN0
IFN0cmkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFtX2lzb2xhdGVkV29ybGQp
Ci0gICAgICAgIG1faXNvbGF0ZWRXb3JsZCA9IERPTVdyYXBwZXJXb3JsZDo6Y3JlYXRlKEpTRE9N
V2luZG93Ojpjb21tb25WTSgpKTsKKyAgICAgICAgbV9pc29sYXRlZFdvcmxkID0gRE9NV3JhcHBl
cldvcmxkOjpjcmVhdGUoY29tbW9uVk0oKSk7CiAKICAgICBTY3JpcHRDb250cm9sbGVyJiBzY3Jp
cHRDb250cm9sbGVyID0gZG9jdW1lbnQtPmZyYW1lKCktPnNjcmlwdCgpOwogICAgIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KHNjcmlwdENvbnRyb2xsZXIuZ2xvYmFsT2JqZWN0KCptX2lzb2xhdGVkV29ybGQpKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDIwOTYzNykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDk2LDYgKzQ5Niw4IEBACiAJCTBGNUUy
MDA2MThFNzcxRkMwMDNFQzNFNSAvKiBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2EuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUUyMDA1MThFNzcxRkMw
MDNFQzNFNSAvKiBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2EuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjYwNUFFQzE1Rjk0ODQ4MDA0REYwQzAg
LyogU2Nyb2xsaW5nQ29uc3RyYWludHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY2MDVBRUExNUY5NDg0ODAwNERGMEMwIC8qIFNjcm9sbGluZ0Nv
bnN0cmFpbnRzLmNwcCAqLzsgfTsKIAkJMEY2MDVBRUQxNUY5NDg0ODAwNERGMEMwIC8qIFNjcm9s
bGluZ0NvbnN0cmFpbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjYwNUFFQjE1Rjk0ODQ4MDA0REYwQzAgLyogU2Nyb2xsaW5nQ29uc3RyYWludHMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjYw
RjMyQjFERkJCMTA3MDA0MTZENkMgLyogQ29tbW9uVk0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjBGMzJBMURGQkIxMDQwMDQxNkQ2QyAvKiBDb21t
b25WTS5oICovOyB9OworCQkwRjYwRjMyQzFERkJCMTBCMDA0MTZENkMgLyogQ29tbW9uVk0uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MEYzMjkx
REZCQjEwNDAwNDE2RDZDIC8qIENvbW1vblZNLmNwcCAqLzsgfTsKIAkJMEY2MzgzREQxODYxNUIy
OTAwM0U1REI1IC8qIFRocmVhZGVkU2Nyb2xsaW5nVHJlZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYzODNEQjE4NjE1QjI5MDAzRTVEQjUgLyog
VGhyZWFkZWRTY3JvbGxpbmdUcmVlLmNwcCAqLzsgfTsKIAkJMEY2MzgzREUxODYxNUIyOTAwM0U1
REI1IC8qIFRocmVhZGVkU2Nyb2xsaW5nVHJlZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MzgzREMxODYxNUIyOTAwM0U1REI1IC8qIFRocmVhZGVk
U2Nyb2xsaW5nVHJlZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGNkExMkJEMUEwMDkyMzcwMEM2REU3MiAvKiBEZWJ1Z1BhZ2VPdmVybGF5cy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZBMTJC
QjFBMDA5MjM3MDBDNkRFNzIgLyogRGVidWdQYWdlT3ZlcmxheXMuY3BwICovOyB9OwpAQCAtNzQ5
NCw2ICs3NDk2LDggQEAKIAkJMEY1RTIwMDUxOEU3NzFGQzAwM0VDM0U1IC8qIFBsYXRmb3JtQ0FB
bmltYXRpb25Db2NvYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9y
bUNBQW5pbWF0aW9uQ29jb2EuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MDVB
RUExNUY5NDg0ODAwNERGMEMwIC8qIFNjcm9sbGluZ0NvbnN0cmFpbnRzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbGluZ0NvbnN0cmFpbnRzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MDVBRUIxNUY5NDg0ODAwNERGMEMwIC8qIFNj
cm9sbGluZ0NvbnN0cmFpbnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNj
cm9sbGluZ0NvbnN0cmFpbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjBG
MzI5MURGQkIxMDQwMDQxNkQ2QyAvKiBDb21tb25WTS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDb21tb25WTS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGNjBGMzJBMURGQkIxMDQwMDQxNkQ2QyAvKiBDb21tb25WTS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDb21tb25WTS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjYzODNEQjE4NjE1QjI5MDAzRTVEQjUgLyogVGhyZWFkZWRTY3JvbGxpbmdUcmVlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRocmVhZGVkU2Nyb2xsaW5n
VHJlZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjM4M0RDMTg2MTVCMjkw
MDNFNURCNSAvKiBUaHJlYWRlZFNjcm9sbGluZ1RyZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVGhyZWFkZWRTY3JvbGxpbmdUcmVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNkExMkJCMUEwMDkyMzcwMEM2REU3MiAvKiBEZWJ1Z1BhZ2VPdmVybGF5cy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZWJ1Z1BhZ2VPdmVybGF5
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTkxMiw2ICsyMTkxNiw4IEBA
CiAJCQkJRTMwN0RFQzgxRDgxRTQ0ODAwMTQxQ0FGIC8qIENhY2hlZE1vZHVsZVNjcmlwdExvYWRl
ckNsaWVudC5oICovLAogCQkJCUJDRDUzMzYzMEVENjg0ODkwMDg4NzQ2OCAvKiBDYWNoZWRTY3Jp
cHRTb3VyY2VQcm92aWRlci5oICovLAogCQkJCTkzRjhCMzA2MEEzMDBGRUEwMEY2MUFCOCAvKiBD
b2RlR2VuZXJhdG9ySlMucG0gKi8sCisJCQkJMEY2MEYzMjkxREZCQjEwNDAwNDE2RDZDIC8qIENv
bW1vblZNLmNwcCAqLywKKwkJCQkwRjYwRjMyQTFERkJCMTA0MDA0MTZENkMgLyogQ29tbW9uVk0u
aCAqLywKIAkJCQkzMTJENjdCMDE1MzU2OTFGMDA1NjNEMEQgLyogRGljdGlvbmFyeS5jcHAgKi8s
CiAJCQkJMzE2MDIzRUYxNTMyQzQwQzAwRDUwRkY0IC8qIERpY3Rpb25hcnkuaCAqLywKIAkJCQlC
NTY1NzZFNzE3REE5NEUyMDBBNTZCREMgLyogRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQuaCAq
LywKQEAgLTI3NTI2LDYgKzI3NTMyLDcgQEAKIAkJCQlGRDQ1QTk1QjE3NUQ0MUVFMDBDMjFFQzgg
LyogU2hhcGVJbnRlcnZhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQ0NUE5NTIxNzVEM0YzRTAw
QzIxRUM4IC8qIFNoYXBlT3V0c2lkZUluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMUFGMTUw
MTY1NkYxNTEwMEM2RDRGNyAvKiBTaGFwZVZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjYw
RjMyQjFERkJCMTA3MDA0MTZENkMgLyogQ29tbW9uVk0uaCBpbiBIZWFkZXJzICovLAogCQkJCTFB
NEE5NTRFMEI0RURDQ0IwMDJEOEMzQyAvKiBTaGFyZWRCdWZmZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTk3QjFGMDJGMTNCMDI1RDIwMEY1MTAzRiAvKiBTaGFyZWRCdWZmZXJDaHVua1JlYWRlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFQTMwOTlFQjc4QzAwNTZFNTgxIC8qIFNoYXJlZFRp
bWVyLmggaW4gSGVhZGVycyAqLywKQEAgLTMxNjMzLDYgKzMxNjQwLDcgQEAKIAkJCQlBMTQ4MzJC
MzE4N0Y2MjkxMDBEQTYzQTYgLyogV0FLQ2xpcFZpZXcubSBpbiBTb3VyY2VzICovLAogCQkJCUEx
NDgzMkI1MTg3RjYyRkMwMERBNjNBNiAvKiBXQUtSZXNwb25kZXIubSBpbiBTb3VyY2VzICovLAog
CQkJCUExNDgzMkI3MTg3RjYzNkMwMERBNjNBNiAvKiBXQUtTY3JvbGxWaWV3Lm1tIGluIFNvdXJj
ZXMgKi8sCisJCQkJMEY2MEYzMkMxREZCQjEwQjAwNDE2RDZDIC8qIENvbW1vblZNLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUExNDgzMkI5MTg3RjYzRDUwMERBNjNBNiAvKiBXQUtWaWV3Lm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTE0ODMyQkMxODdGNjQ4RTAwREE2M0E2IC8qIFdBS1dpbmRvdy5t
bSBpbiBTb3VyY2VzICovLAogCQkJCUZEN0YyOTkxMTNENEMwQ0IwMEFEOTUzNSAvKiBXYXZlU2hh
cGVyRFNQS2VybmVsLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvQ29tbW9uVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0NvbW1vblZNLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9Db21tb25WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKKworI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVu
dERhdGEuaCIKKyNpbmNsdWRlIDxydW50aW1lL1ZNLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJl
YWQuaD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitW
TSogZ19jb21tb25WTU9yTnVsbDsKK2Jvb2wgZ193cml0ZUJhcnJpZXJFbmFibGVkOworCitWTSYg
Y29tbW9uVk1TbG93KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VS
VCghZ19jb21tb25WTU9yTnVsbCk7CisgICAgCisgICAgU2NyaXB0Q29udHJvbGxlcjo6aW5pdGlh
bGl6ZVRocmVhZGluZygpOworICAgIGdfY29tbW9uVk1Pck51bGwgPSAmVk06OmNyZWF0ZUxlYWtl
ZChMYXJnZUhlYXApLmxlYWtSZWYoKTsKKyAgICBnX2NvbW1vblZNT3JOdWxsLT5oZWFwLmFjcXVp
cmVBY2Nlc3MoKTsgLy8gQXQgYW55IHRpbWUsIHdlIG1heSBkbyB0aGluZ3MgdGhhdCBhZmZlY3Qg
dGhlIEdDLgorI2lmICFQTEFURk9STShJT1MpCisgICAgZ19jb21tb25WTU9yTnVsbC0+c2V0RXhj
bHVzaXZlVGhyZWFkKHN0ZDo6dGhpc190aHJlYWQ6OmdldF9pZCgpKTsKKyNlbHNlCisgICAgZ19j
b21tb25WTU9yTnVsbC0+aGVhcC5zZXRSdW5Mb29wKFdlYlRocmVhZFJ1bkxvb3AoKSk7CisgICAg
Z19jb21tb25WTU9yTnVsbC0+aGVhcC5tYWNoaW5lVGhyZWFkcygpLmFkZEN1cnJlbnRUaHJlYWQo
KTsKKyNlbmRpZgorICAgIAorICAgIGdfY29tbW9uVk1Pck51bGwtPnNldEdsb2JhbENvbnN0UmVk
ZWNsYXJhdGlvblNob3VsZFRocm93KFNldHRpbmdzOjpnbG9iYWxDb25zdFJlZGVjbGFyYXRpb25T
aG91bGRUaHJvdygpKTsKKyAgICBnX2NvbW1vblZNT3JOdWxsLT5oZWFwLmFkZE11dGF0b3JTaG91
bGRCZUZlbmNlZENhY2hlKGdfd3JpdGVCYXJyaWVyRW5hYmxlZCk7CisgICAgCisgICAgaW5pdE5v
cm1hbFdvcmxkQ2xpZW50RGF0YShnX2NvbW1vblZNT3JOdWxsKTsKKyAgICAKKyAgICByZXR1cm4g
KmdfY29tbW9uVk1Pck51bGw7Cit9CisKK3ZvaWQgd3JpdGVCYXJyaWVyT3BhcXVlUm9vdFNsb3co
dm9pZCogcm9vdCkKK3sKKyAgICBpZiAoVk0qIHZtID0gZ19jb21tb25WTU9yTnVsbCkKKyAgICAg
ICAgdm0tPmhlYXAud3JpdGVCYXJyaWVyT3BhcXVlUm9vdChyb290KTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Db21tb25W
TS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0NvbW1vblZNLmgJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQ29tbW9uVk0uaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgSlNDIHsKK2Ns
YXNzIFZNOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2V4dGVybiBWTSogZ19jb21tb25W
TU9yTnVsbDsKK2V4dGVybiBib29sIGdfb3BhcXVlUm9vdFdyaXRlQmFycmllckVuYWJsZWQ7CisK
K1ZNJiBjb21tb25WTVNsb3coKTsKK3ZvaWQgd3JpdGVCYXJyaWVyT3BhcXVlUm9vdFNsb3codm9p
ZCopOworCitpbmxpbmUgVk0mIGNvbW1vblZNKCkKK3sKKyAgICBpZiAoVk0qIHJlc3VsdCA9IGdf
Y29tbW9uVk1Pck51bGwpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIGNvbW1v
blZNU2xvdygpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgordm9pZCB3cml0ZUJhcnJp
ZXJPcGFxdWVSb290KGNvbnN0IEZ1bmMmIHJvb3RUaHVuaykKK3sKKyAgICBpZiAoZ19vcGFxdWVS
b290V3JpdGVCYXJyaWVyRW5hYmxlZCkKKyAgICAgICAgd3JpdGVCYXJyaWVyT3BhcXVlUm9vdFNs
b3cocm9vdFRodW5rKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmNwcAkocmV2aXNp
b24gMjA5NjM3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxk
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5oIgogCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIK
ICNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIK
ICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCkBAIC02OSw3ICs3MCw3IEBAIERPTVdy
YXBwZXJXb3JsZCYgbm9ybWFsV29ybGQoSlNDOjpWTSYgdm0KIERPTVdyYXBwZXJXb3JsZCYgbWFp
blRocmVhZE5vcm1hbFdvcmxkKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAg
IHN0YXRpYyBET01XcmFwcGVyV29ybGQmIGNhY2hlZE5vcm1hbFdvcmxkID0gbm9ybWFsV29ybGQo
SlNET01XaW5kb3c6OmNvbW1vblZNKCkpOworICAgIHN0YXRpYyBET01XcmFwcGVyV29ybGQmIGNh
Y2hlZE5vcm1hbFdvcmxkID0gbm9ybWFsV29ybGQoY29tbW9uVk0oKSk7CiAgICAgcmV0dXJuIGNh
Y2hlZE5vcm1hbFdvcmxkOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9H
Q0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0dDQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDIwOTYzNykKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJHQ0NvbnRyb2xsZXIuaCIKIAotI2lu
Y2x1ZGUgIkpTRE9NV2luZG93LmgiCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlIDxy
dW50aW1lL1ZNLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KICNpbmNsdWRlIDxoZWFw
L0hlYXAuaD4KQEAgLTQwLDggKzQwLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMg
dm9pZCBjb2xsZWN0KHZvaWQqKQogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93
Ojpjb21tb25WTSgpKTsKLSAgICBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS5oZWFwLmNvbGxlY3RB
bGxHYXJiYWdlKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7CisgICAgY29t
bW9uVk0oKS5oZWFwLmNvbGxlY3RBbGxHYXJiYWdlKCk7CiB9CiAKIEdDQ29udHJvbGxlciYgR0ND
b250cm9sbGVyOjpzaW5nbGV0b24oKQpAQCAtNjEsOCArNjEsOCBAQCB2b2lkIEdDQ29udHJvbGxl
cjo6Z2FyYmFnZUNvbGxlY3RTb29uKCkKICAgICAvLyBvZiB0aGUgZ2FyYmFnZSBjb2xsZWN0b3Ig
dGltZXJzIGluIEphdmFTY3JpcHRDb3JlLiBXZSB3b3VsZG4ndCBuZWVkIHRoaXMgaWYgSmF2YVNj
cmlwdENvcmUKICAgICAvLyB1c2VkIGEgdGltZXIgaW1wbGVtZW50YXRpb24gZnJvbSBXVEYgbGlr
ZSBSdW5Mb29wOjpUaW1lci4KICNpZiBVU0UoQ0YpIHx8IFVTRShHTElCKQotICAgIEpTTG9ja0hv
bGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsKLSAgICBKU0RPTVdpbmRvdzo6Y29t
bW9uVk0oKS5oZWFwLnJlcG9ydEFiYW5kb25lZE9iamVjdEdyYXBoKCk7CisgICAgSlNMb2NrSG9s
ZGVyIGxvY2soY29tbW9uVk0oKSk7CisgICAgY29tbW9uVk0oKS5oZWFwLnJlcG9ydEFiYW5kb25l
ZE9iamVjdEdyYXBoKCk7CiAjZWxzZQogICAgIGdhcmJhZ2VDb2xsZWN0T25OZXh0UnVuTG9vcCgp
OwogI2VuZGlmCkBAIC04MSw5ICs4MSw5IEBAIHZvaWQgR0NDb250cm9sbGVyOjpnY1RpbWVyRmly
ZWQoKQogCiB2b2lkIEdDQ29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3ROb3coKQogewotICAgIEpT
TG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsKLSAgICBpZiAoIUpTRE9N
V2luZG93Ojpjb21tb25WTSgpLmhlYXAuaXNDdXJyZW50VGhyZWFkQnVzeSgpKSB7Ci0gICAgICAg
IEpTRE9NV2luZG93Ojpjb21tb25WTSgpLmhlYXAuY29sbGVjdEFsbEdhcmJhZ2UoKTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayhjb21tb25WTSgpKTsKKyAgICBpZiAoIWNvbW1vblZNKCkuaGVhcC5p
c0N1cnJlbnRUaHJlYWRCdXN5KCkpIHsKKyAgICAgICAgY29tbW9uVk0oKS5oZWFwLmNvbGxlY3RB
bGxHYXJiYWdlKCk7CiAgICAgICAgIFdURjo6cmVsZWFzZUZhc3RNYWxsb2NGcmVlTWVtb3J5KCk7
CiAgICAgfQogfQpAQCAtOTEsOSArOTEsOSBAQCB2b2lkIEdDQ29udHJvbGxlcjo6Z2FyYmFnZUNv
bGxlY3ROb3coKQogdm9pZCBHQ0NvbnRyb2xsZXI6OmdhcmJhZ2VDb2xsZWN0Tm93SWZOb3REb25l
UmVjZW50bHkoKQogewogI2lmIFVTRShDRikgfHwgVVNFKEdMSUIpCi0gICAgSlNMb2NrSG9sZGVy
IGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOwotICAgIGlmICghSlNET01XaW5kb3c6OmNv
bW1vblZNKCkuaGVhcC5pc0N1cnJlbnRUaHJlYWRCdXN5KCkpCi0gICAgICAgIEpTRE9NV2luZG93
Ojpjb21tb25WTSgpLmhlYXAuY29sbGVjdEFsbEdhcmJhZ2VJZk5vdERvbmVSZWNlbnRseSgpOwor
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGNvbW1vblZNKCkpOworICAgIGlmICghY29tbW9uVk0oKS5o
ZWFwLmlzQ3VycmVudFRocmVhZEJ1c3koKSkKKyAgICAgICAgY29tbW9uVk0oKS5oZWFwLmNvbGxl
Y3RBbGxHYXJiYWdlSWZOb3REb25lUmVjZW50bHkoKTsKICNlbHNlCiAgICAgZ2FyYmFnZUNvbGxl
Y3RTb29uKCk7CiAjZW5kaWYKQEAgLTExMywxOSArMTEzLDE5IEBAIHZvaWQgR0NDb250cm9sbGVy
OjpnYXJiYWdlQ29sbGVjdE9uQWx0ZXIKIAogdm9pZCBHQ0NvbnRyb2xsZXI6OnNldEphdmFTY3Jp
cHRHYXJiYWdlQ29sbGVjdG9yVGltZXJFbmFibGVkKGJvb2wgZW5hYmxlKQogewotICAgIEpTRE9N
V2luZG93Ojpjb21tb25WTSgpLmhlYXAuc2V0R2FyYmFnZUNvbGxlY3Rpb25UaW1lckVuYWJsZWQo
ZW5hYmxlKTsKKyAgICBjb21tb25WTSgpLmhlYXAuc2V0R2FyYmFnZUNvbGxlY3Rpb25UaW1lckVu
YWJsZWQoZW5hYmxlKTsKIH0KIAogdm9pZCBHQ0NvbnRyb2xsZXI6OmRlbGV0ZUFsbENvZGUoRGVs
ZXRlQWxsQ29kZUVmZm9ydCBlZmZvcnQpCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01X
aW5kb3c6OmNvbW1vblZNKCkpOwotICAgIEpTRE9NV2luZG93Ojpjb21tb25WTSgpLmRlbGV0ZUFs
bENvZGUoZWZmb3J0KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhjb21tb25WTSgpKTsKKyAgICBj
b21tb25WTSgpLmRlbGV0ZUFsbENvZGUoZWZmb3J0KTsKIH0KIAogdm9pZCBHQ0NvbnRyb2xsZXI6
OmRlbGV0ZUFsbExpbmtlZENvZGUoRGVsZXRlQWxsQ29kZUVmZm9ydCBlZmZvcnQpCiB7Ci0gICAg
SlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOwotICAgIEpTRE9NV2lu
ZG93Ojpjb21tb25WTSgpLmRlbGV0ZUFsbExpbmtlZENvZGUoZWZmb3J0KTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9jayhjb21tb25WTSgpKTsKKyAgICBjb21tb25WTSgpLmRlbGV0ZUFsbExpbmtlZENv
ZGUoZWZmb3J0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNw
cAkocmV2aXNpb24gMjA5NjM3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0
b21YUGF0aE5TUmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuaCIK
IAorI2luY2x1ZGUgIkNvbW1vblZNLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRl
ICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKQEAgLTY5LDcgKzcwLDcgQEAg
U3RyaW5nIEpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyOjpsb29rdXBOYQogewogICAgIEFTU0VSVCht
X2N1c3RvbVJlc29sdmVyKTsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFz
ZTo6Y29tbW9uVk0oKSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7CiAKICAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogICAgICAg
ICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAko
cmV2aXNpb24gMjA5NjM3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5k
aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgIkpTRE9N
QmluZGluZy5oIgogCiAjaW5jbHVkZSAiQ2FjaGVkU2NyaXB0LmgiCisjaW5jbHVkZSAiQ29tbW9u
Vk0uaCIKICNpbmNsdWRlICJET01Db25zdHJ1Y3RvcldpdGhEb2N1bWVudC5oIgogI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaCIK
QEAgLTYxLDcgKzYyLDcgQEAgU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxF
KAogCiB2b2lkIGFkZEltcHVyZVByb3BlcnR5KGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlO
YW1lKQogewotICAgIEpTRE9NV2luZG93Ojpjb21tb25WTSgpLmFkZEltcHVyZVByb3BlcnR5KHBy
b3BlcnR5TmFtZSk7CisgICAgY29tbW9uVk0oKS5hZGRJbXB1cmVQcm9wZXJ0eShwcm9wZXJ0eU5h
bWUpOwogfQogCiBKU1ZhbHVlIGpzT3duZWRTdHJpbmdPck51bGwoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBTdHJpbmcmIHMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdp
bmRvd0Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NV2luZG93QmFzZS5jcHAJKHJldmlzaW9uIDIwOTYzNykKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2
LDcgQEAKIAogI2luY2x1ZGUgIkFjdGl2ZURPTUNhbGxiYWNrTWljcm90YXNrLmgiCiAjaW5jbHVk
ZSAiQ2hyb21lLmgiCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJET01XaW5kb3cu
aCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIK
QEAgLTI0NSwzMCArMjQ2LDYgQEAgSlNET01XaW5kb3dTaGVsbCogSlNET01XaW5kb3dCYXNlOjpz
aGVsbAogICAgIHJldHVybiBtX3NoZWxsOwogfQogCi1WTSYgSlNET01XaW5kb3dCYXNlOjpjb21t
b25WTSgpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIHN0YXRpYyBWTSog
dm0gPSBudWxscHRyOwotICAgIGlmICghdm0pIHsKLSAgICAgICAgU2NyaXB0Q29udHJvbGxlcjo6
aW5pdGlhbGl6ZVRocmVhZGluZygpOwotICAgICAgICB2bSA9ICZWTTo6Y3JlYXRlTGVha2VkKExh
cmdlSGVhcCkubGVha1JlZigpOwotICAgICAgICB2bS0+aGVhcC5hY3F1aXJlQWNjZXNzKCk7IC8v
IEF0IGFueSB0aW1lLCB3ZSBtYXkgZG8gdGhpbmdzIHRoYXQgYWZmZWN0IHRoZSBHQy4KLSNpZiAh
UExBVEZPUk0oSU9TKQotICAgICAgICB2bS0+c2V0RXhjbHVzaXZlVGhyZWFkKHN0ZDo6dGhpc190
aHJlYWQ6OmdldF9pZCgpKTsKLSNlbHNlCi0gICAgICAgIHZtLT5oZWFwLnNldFJ1bkxvb3AoV2Vi
VGhyZWFkUnVuTG9vcCgpKTsKLSAgICAgICAgdm0tPmhlYXAubWFjaGluZVRocmVhZHMoKS5hZGRD
dXJyZW50VGhyZWFkKCk7Ci0jZW5kaWYKLQotICAgICAgICB2bS0+c2V0R2xvYmFsQ29uc3RSZWRl
Y2xhcmF0aW9uU2hvdWxkVGhyb3coU2V0dGluZ3M6Omdsb2JhbENvbnN0UmVkZWNsYXJhdGlvblNo
b3VsZFRocm93KCkpOwotCi0gICAgICAgIGluaXROb3JtYWxXb3JsZENsaWVudERhdGEodm0pOwot
ICAgIH0KLQotICAgIHJldHVybiAqdm07Ci19Ci0KIC8vIEpTRE9NR2xvYmFsT2JqZWN0KiBpcyBp
Z25vcmVkLCBhY2Nlc3NpbmcgYSB3aW5kb3cgaW4gYW55IGNvbnRleHQgd2lsbAogLy8gdXNlIHRo
YXQgRE9NV2luZG93J3MgcHJvdG90eXBlIGNoYWluLgogSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSog
ZXhlYywgSlNET01HbG9iYWxPYmplY3QqLCBET01XaW5kb3cmIGRvbVdpbmRvdykKQEAgLTMwOSw3
ICsyODYsNyBAQCBKU0RPTVdpbmRvdyogdG9KU0RPTVdpbmRvdyhKU1ZhbHVlIHZhbHVlCiAKIHZv
aWQgSlNET01XaW5kb3dCYXNlOjpmaXJlRnJhbWVDbGVhcmVkV2F0Y2hwb2ludHNGb3JXaW5kb3co
RE9NV2luZG93KiB3aW5kb3cpCiB7Ci0gICAgSlNDOjpWTSYgdm0gPSBKU0RPTVdpbmRvd0Jhc2U6
OmNvbW1vblZNKCk7CisgICAgSlNDOjpWTSYgdm0gPSBjb21tb25WTSgpOwogICAgIEpTVk1DbGll
bnREYXRhKiBjbGllbnREYXRhID0gc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGll
bnREYXRhKTsKICAgICBWZWN0b3I8UmVmPERPTVdyYXBwZXJXb3JsZD4+IHdyYXBwZXJXb3JsZHM7
CiAgICAgY2xpZW50RGF0YS0+Z2V0QWxsV29ybGRzKHdyYXBwZXJXb3JsZHMpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmgJKHJldmlzaW9uIDIw
OTYzNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAg
ICAgICBKU0RPTVdpbmRvd1NoZWxsKiBzaGVsbCgpIGNvbnN0OwogCi0gICAgICAgIHN0YXRpYyBK
U0M6OlZNJiBjb21tb25WTSgpOwogICAgICAgICBzdGF0aWMgdm9pZCBmaXJlRnJhbWVDbGVhcmVk
V2F0Y2hwb2ludHNGb3JXaW5kb3coRE9NV2luZG93Kik7CiAgICAgICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuY3BwCShyZXZp
c2lvbiAyMDk2MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1No
ZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93U2hlbGwuaCIKIAorI2luY2x1ZGUgIkNvbW1vblZN
LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJHQ0NvbnRyb2xsZXIuaCIKICNpbmNs
dWRlICJKU0RPTVdpbmRvdy5oIgpAQCAtNzksNyArODAsNyBAQCB2b2lkIEpTRE9NV2luZG93U2hl
bGw6OnNldFdpbmRvdyhSZWZQdHI8CiAgICAgLy8gd2hlbiB3ZSBhbGxvY2F0ZSB0aGUgZ2xvYmFs
IG9iamVjdC4gKE9uY2UgdGhlIGdsb2JhbCBvYmplY3QgaXMgZnVsbHkKICAgICAvLyBjb25zdHJ1
Y3RlZCwgaXQgY2FuIG1hcmsgaXRzIG93biBwcm90b3R5cGUuKQogICAgIAotICAgIFZNJiB2bSA9
IEpTRE9NV2luZG93Ojpjb21tb25WTSgpOworICAgIFZNJiB2bSA9IGNvbW1vblZNKCk7CiAgICAg
U3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUgPSBKU0RPTVdpbmRvd1Byb3RvdHlwZTo6Y3Jl
YXRlU3RydWN0dXJlKHZtLCAwLCBqc051bGwoKSk7CiAgICAgU3Ryb25nPEpTRE9NV2luZG93UHJv
dG90eXBlPiBwcm90b3R5cGUodm0sIEpTRE9NV2luZG93UHJvdG90eXBlOjpjcmVhdGUodm0sIDAs
IHByb3RvdHlwZVN0cnVjdHVyZSkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU05vZGVDdXN0b20uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU05vZGVDdXN0b20uaAkocmV2aXNpb24gMjA5NjM3KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDEyICs2NSw3IEBA
IGlubGluZSB2b2lkIHdpbGxDcmVhdGVQb3NzaWJseU9ycGhhbmVkVHIKIAogaW5saW5lIHZvaWQq
IHJvb3QoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAobm9kZS0+aW5Eb2N1bWVudCgpKQotICAgICAg
ICByZXR1cm4gJm5vZGUtPmRvY3VtZW50KCk7Ci0KLSAgICB3aGlsZSAobm9kZS0+cGFyZW50T3JT
aGFkb3dIb3N0Tm9kZSgpKQotICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50T3JTaGFkb3dIb3N0
Tm9kZSgpOwotICAgIHJldHVybiBub2RlOworICAgIHJldHVybiBub2RlLT5vcGFxdWVSb290KCk7
CiB9CiAKIGlubGluZSB2b2lkKiByb290KE5vZGUmIG5vZGUpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWNoZWRGcmFtZURhdGEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhY2hlZEZyYW1lRGF0YS5jcHAJKHJldmlz
aW9uIDIwOTYzNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhY2hlZEZy
YW1lRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJTY3JpcHRDYWNoZWRGcmFtZURhdGEuaCIKIAorI2luY2x1ZGUg
IkNvbW1vblZNLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgog
I2luY2x1ZGUgIkdDQ29udHJvbGxlci5oIgpAQCAtNDksNyArNTAsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIFNjcmlwdENhY2hlZEZyYW1lRGF0YTo6U2NyaXB0Q2FjaGVkRnJhbWVEYXRhKEZy
YW1lJiBmcmFtZSkKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNv
bW1vblZNKCkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGNvbW1vblZNKCkpOwogCiAgICAgU2Ny
aXB0Q29udHJvbGxlciYgc2NyaXB0Q29udHJvbGxlciA9IGZyYW1lLnNjcmlwdCgpOwogICAgIFZl
Y3RvcjxKU0M6OlN0cm9uZzxKU0RPTVdpbmRvd1NoZWxsPj4gd2luZG93U2hlbGxzID0gc2NyaXB0
Q29udHJvbGxlci53aW5kb3dTaGVsbHMoKTsKQEAgLTcxLDcgKzcyLDcgQEAgU2NyaXB0Q2FjaGVk
RnJhbWVEYXRhOjp+U2NyaXB0Q2FjaGVkRnJhbQogCiB2b2lkIFNjcmlwdENhY2hlZEZyYW1lRGF0
YTo6cmVzdG9yZShGcmFtZSYgZnJhbWUpCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01X
aW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhjb21tb25WTSgp
KTsKIAogICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS5wYWdlKCk7CiAgICAgU2NyaXB0Q29udHJvbGxl
ciYgc2NyaXB0Q29udHJvbGxlciA9IGZyYW1lLnNjcmlwdCgpOwpAQCAtMTA2LDcgKzEwNyw3IEBA
IHZvaWQgU2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjpjbGVhcigpCiAgICAgaWYgKG1fd2luZG93cy5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9N
V2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0o
KSk7CiAgICAgbV93aW5kb3dzLmNsZWFyKCk7CiAgICAgR0NDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5nYXJiYWdlQ29sbGVjdFNvb24oKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyMDk2MzcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVkZSAiQnJpZGdlSlNDLmgiCiAjaW5jbHVkZSAi
Q2FjaGVkTW9kdWxlU2NyaXB0LmgiCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJD
b250ZW50U2VjdXJpdHlQb2xpY3kuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2lu
Y2x1ZGUgIkV2ZW50LmgiCkBAIC0xMDUsNyArMTA2LDcgQEAgU2NyaXB0Q29udHJvbGxlcjo6flNj
cmlwdENvbnRyb2xsZXIoKQogICAgIGRpc2Nvbm5lY3RQbGF0Zm9ybVNjcmlwdE9iamVjdHMoKTsK
IAogICAgIGlmIChtX2NhY2hlYWJsZUJpbmRpbmdSb290T2JqZWN0KSB7Ci0gICAgICAgIEpTTG9j
a0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgICAgIEpTTG9j
a0hvbGRlciBsb2NrKGNvbW1vblZNKCkpOwogICAgICAgICBtX2NhY2hlYWJsZUJpbmRpbmdSb290
T2JqZWN0LT5pbnZhbGlkYXRlKCk7CiAgICAgICAgIG1fY2FjaGVhYmxlQmluZGluZ1Jvb3RPYmpl
Y3QgPSBudWxscHRyOwogICAgIH0KQEAgLTI3MSw3ICsyNzIsNyBAQCBKU0M6OkpTVmFsdWUgU2Ny
aXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVNCiAKIFJlZjxET01XcmFwcGVyV29ybGQ+IFNjcmlwdENv
bnRyb2xsZXI6OmNyZWF0ZVdvcmxkKCkKIHsKLSAgICByZXR1cm4gRE9NV3JhcHBlcldvcmxkOjpj
cmVhdGUoSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOworICAgIHJldHVybiBET01XcmFwcGVyV29y
bGQ6OmNyZWF0ZShjb21tb25WTSgpKTsKIH0KIAogVmVjdG9yPEpTQzo6U3Ryb25nPEpTRE9NV2lu
ZG93U2hlbGw+PiBTY3JpcHRDb250cm9sbGVyOjp3aW5kb3dTaGVsbHMoKQpAQCAtMjgzLDcgKzI4
NCw3IEBAIFZlY3RvcjxKU0M6OlN0cm9uZzxKU0RPTVdpbmRvd1NoZWxsPj4gU2MKIAogdm9pZCBT
Y3JpcHRDb250cm9sbGVyOjpnZXRBbGxXb3JsZHMoVmVjdG9yPFJlZjxET01XcmFwcGVyV29ybGQ+
PiYgd29ybGRzKQogewotICAgIHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4oSlNET01XaW5k
b3c6OmNvbW1vblZNKCkuY2xpZW50RGF0YSktPmdldEFsbFdvcmxkcyh3b3JsZHMpOworICAgIHN0
YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4oY29tbW9uVk0oKS5jbGllbnREYXRhKS0+Z2V0QWxs
V29ybGRzKHdvcmxkcyk7CiB9CiAKIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJXaW5kb3dT
aGVsbChET01XaW5kb3cqIG5ld0RPTVdpbmRvdywgYm9vbCBnb2luZ0ludG9QYWdlQ2FjaGUpCkBA
IC0yOTEsNyArMjkyLDcgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhcldpbmRvd1NoZWxs
KAogICAgIGlmIChtX3dpbmRvd1NoZWxscy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7CiAKICAgICBWZWN0b3I8SlNDOjpTdHJvbmc8
SlNET01XaW5kb3dTaGVsbD4+IHdpbmRvd1NoZWxscyA9IHRoaXMtPndpbmRvd1NoZWxscygpOwog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2luZG93U2hlbGxzLnNpemUoKTsgKytpKSB7CkBA
IC00OTYsNyArNDk3LDcgQEAgQmluZGluZ3M6OlJvb3RPYmplY3QqIFNjcmlwdENvbnRyb2xsZXI6
OgogICAgICAgICByZXR1cm4gMDsKIAogICAgIGlmICghbV9jYWNoZWFibGVCaW5kaW5nUm9vdE9i
amVjdCkgewotICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1v
blZNKCkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhjb21tb25WTSgpKTsKICAgICAgICAg
bV9jYWNoZWFibGVCaW5kaW5nUm9vdE9iamVjdCA9IEJpbmRpbmdzOjpSb290T2JqZWN0OjpjcmVh
dGUoMCwgZ2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpKTsKICAgICB9CiAgICAgcmV0dXJuIG1f
Y2FjaGVhYmxlQmluZGluZ1Jvb3RPYmplY3QuZ2V0KCk7CkBAIC01MDgsNyArNTA5LDcgQEAgQmlu
ZGluZ3M6OlJvb3RPYmplY3QqIFNjcmlwdENvbnRyb2xsZXI6OgogICAgICAgICByZXR1cm4gMDsK
IAogICAgIGlmICghbV9iaW5kaW5nUm9vdE9iamVjdCkgewotICAgICAgICBKU0xvY2tIb2xkZXIg
bG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgICAgICBKU0xvY2tIb2xkZXIg
bG9jayhjb21tb25WTSgpKTsKICAgICAgICAgbV9iaW5kaW5nUm9vdE9iamVjdCA9IEJpbmRpbmdz
OjpSb290T2JqZWN0OjpjcmVhdGUoMCwgZ2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpKTsKICAg
ICB9CiAgICAgcmV0dXJuIG1fYmluZGluZ1Jvb3RPYmplY3QuZ2V0KCk7CkBAIC01MzksNyArNTQw
LDcgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjb2xsZWN0SXNvbGF0ZWRDbwogTlBPYmplY3Qq
IFNjcmlwdENvbnRyb2xsZXI6OndpbmRvd1NjcmlwdE5QT2JqZWN0KCkKIHsKICAgICBpZiAoIW1f
d2luZG93U2NyaXB0TlBPYmplY3QpIHsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01X
aW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9u
Vk0oKSk7CiAgICAgICAgIGlmIChjYW5FeGVjdXRlU2NyaXB0cyhOb3RBYm91dFRvRXhlY3V0ZVNj
cmlwdCkpIHsKICAgICAgICAgICAgIC8vIEphdmFTY3JpcHQgaXMgZW5hYmxlZCwgc28gdGhlcmUg
aXMgYSBKYXZhU2NyaXB0IHdpbmRvdyBvYmplY3QuCiAgICAgICAgICAgICAvLyBSZXR1cm4gYW4g
TlBPYmplY3QgYm91bmQgdG8gdGhlIHdpbmRvdyBvYmplY3QuCkBAIC01NzQsNyArNTc1LDcgQEAg
SlNPYmplY3QqIFNjcmlwdENvbnRyb2xsZXI6OmpzT2JqZWN0Rm9yUAogICAgIGlmICghY2FuRXhl
Y3V0ZVNjcmlwdHMoTm90QWJvdXRUb0V4ZWN1dGVTY3JpcHQpKQogICAgICAgICByZXR1cm4gMDsK
IAotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7CiAKICAgICAvLyBDcmVhdGUgYSBKU09i
amVjdCBib3VuZCB0byB0aGlzIGVsZW1lbnQKICAgICBKU0RPTVdpbmRvdyogZ2xvYmFsT2JqID0g
Z2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpOwpAQCAtNjExLDcgKzYxMiw3IEBAIHZvaWQgU2Ny
aXB0Q29udHJvbGxlcjo6Y2xlYW51cFNjcmlwdE9iamUKIAogdm9pZCBTY3JpcHRDb250cm9sbGVy
OjpjbGVhclNjcmlwdE9iamVjdHMoKQogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2lu
ZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7
CiAKICAgICBSb290T2JqZWN0TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Jvb3RPYmplY3Rz
LmVuZCgpOwogICAgIGZvciAoUm9vdE9iamVjdE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jv
b3RPYmplY3RzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9Db2xsZWN0aW9uSW5kZXhDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL0NvbGxlY3Rpb25JbmRleENhY2hlLmNwcAkocmV2aXNpb24gMjA5NjM3KQorKysgU291
cmNlL1dlYkNvcmUvZG9tL0NvbGxlY3Rpb25JbmRleENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYsMTQgKzI2LDE0IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ29sbGVj
dGlvbkluZGV4Q2FjaGUuaCIKIAorI2luY2x1ZGUgIkNvbW1vblZNLmgiCiAjaW5jbHVkZSAiRE9N
V2luZG93LmgiCi0jaW5jbHVkZSAiSlNET01XaW5kb3dCYXNlLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogdm9pZCByZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZEZvckNvbGxlY3Rpb25JbmRl
eENhY2hlKHNpemVfdCBjb3N0KQogewotICAgIEpTQzo6Vk0mIHZtID0gSlNET01XaW5kb3dCYXNl
Ojpjb21tb25WTSgpOworICAgIEpTQzo6Vk0mIHZtID0gY29tbW9uVk0oKTsKICAgICBKU0M6OkpT
TG9ja0hvbGRlciBsb2NrKHZtKTsKICAgICAvLyBGSVhNRTogQWRvcHQgcmVwb3J0RXh0cmFNZW1v
cnlWaXNpdGVkLCBhbmQgc3dpdGNoIHRvIHJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkLgogICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI1OTUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAJKHJldmlzaW9uIDIwOTYzNykKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMiw3
ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3Jn
KQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3Jn
KQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQot
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEw
LCAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAx
MSwgMjAxMiwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJDaHJvbWUuaCIKICNp
bmNsdWRlICJDaHJvbWVDbGllbnQuaCIKICNpbmNsdWRlICJDbGFzc0NvbGxlY3Rpb24uaCIKKyNp
bmNsdWRlICJDb21tb25WTS5oIgogI2luY2x1ZGUgIkNvbnRhaW5lck5vZGVBbGdvcml0aG1zLmgi
CiAjaW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwCShyZXZpc2lv
biAyMDk2MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuaCIKIAorI2luY2x1ZGUgIkNvbW1v
blZNLmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiTm9FdmVudERpc3BhdGNoQXNzZXJ0
aW9uLmgiCkBAIC0zMywxMCArMzQsMTAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lk
IG5vdGlmeU5vZGVJbnNlcnRlZEludG9UcmVlKENvbnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50
LCBDb250YWluZXJOb2RlJiwgTm9kZVZlY3RvciYgcG9zdEluc2VydGlvbk5vdGlmaWNhdGlvblRh
cmdldHMpOwotdm9pZCBub3RpZnlOb2RlSW5zZXJ0ZWRJbnRvRG9jdW1lbnQoQ29udGFpbmVyTm9k
ZSYgaW5zZXJ0aW9uUG9pbnQsIE5vZGUmLCBOb2RlVmVjdG9yJiBwb3N0SW5zZXJ0aW9uTm90aWZp
Y2F0aW9uVGFyZ2V0cyk7Ci12b2lkIG5vdGlmeU5vZGVSZW1vdmVkRnJvbVRyZWUoQ29udGFpbmVy
Tm9kZSYgaW5zZXJ0aW9uUG9pbnQsIENvbnRhaW5lck5vZGUmKTsKLXZvaWQgbm90aWZ5Tm9kZVJl
bW92ZWRGcm9tRG9jdW1lbnQoQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQsIE5vZGUmKTsK
K3N0YXRpYyB2b2lkIG5vdGlmeU5vZGVJbnNlcnRlZEludG9UcmVlKENvbnRhaW5lck5vZGUmIGlu
c2VydGlvblBvaW50LCBDb250YWluZXJOb2RlJiwgTm9kZVZlY3RvciYgcG9zdEluc2VydGlvbk5v
dGlmaWNhdGlvblRhcmdldHMpOworc3RhdGljIHZvaWQgbm90aWZ5Tm9kZUluc2VydGVkSW50b0Rv
Y3VtZW50KENvbnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50LCBOb2RlJiwgTm9kZVZlY3RvciYg
cG9zdEluc2VydGlvbk5vdGlmaWNhdGlvblRhcmdldHMpOworc3RhdGljIHZvaWQgbm90aWZ5Tm9k
ZVJlbW92ZWRGcm9tVHJlZShDb250YWluZXJOb2RlJiBpbnNlcnRpb25Qb2ludCwgQ29udGFpbmVy
Tm9kZSYpOworc3RhdGljIHZvaWQgbm90aWZ5Tm9kZVJlbW92ZWRGcm9tRG9jdW1lbnQoQ29udGFp
bmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQsIE5vZGUmKTsKIAogc3RhdGljIHZvaWQgbm90aWZ5RGVz
Y2VuZGFudEluc2VydGVkSW50b0RvY3VtZW50KENvbnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50
LCBDb250YWluZXJOb2RlJiBub2RlLCBOb2RlVmVjdG9yJiBwb3N0SW5zZXJ0aW9uTm90aWZpY2F0
aW9uVGFyZ2V0cykKIHsKQEAgLTEwMSw2ICsxMDIsOCBAQCB2b2lkIG5vdGlmeUNoaWxkTm9kZUlu
c2VydGVkKENvbnRhaW5lck5vCiAgICAgICAgIG5vdGlmeU5vZGVJbnNlcnRlZEludG9Eb2N1bWVu
dChpbnNlcnRpb25Qb2ludCwgbm9kZSwgcG9zdEluc2VydGlvbk5vdGlmaWNhdGlvblRhcmdldHMp
OwogICAgIGVsc2UgaWYgKGlzPENvbnRhaW5lck5vZGU+KG5vZGUpKQogICAgICAgICBub3RpZnlO
b2RlSW5zZXJ0ZWRJbnRvVHJlZShpbnNlcnRpb25Qb2ludCwgZG93bmNhc3Q8Q29udGFpbmVyTm9k
ZT4obm9kZSksIHBvc3RJbnNlcnRpb25Ob3RpZmljYXRpb25UYXJnZXRzKTsKKworICAgIHdyaXRl
QmFycmllck9wYXF1ZVJvb3QoW3RoaXNdICgpIC0+IHZvaWQqIHsgaW5zZXJ0aW9uUG9pbnQub3Bh
cXVlUm9vdCgpIH0pOwogfQogCiB2b2lkIG5vdGlmeU5vZGVSZW1vdmVkRnJvbURvY3VtZW50KENv
bnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50LCBOb2RlJiBub2RlKQpAQCAtMTUyLDYgKzE1NSw4
IEBAIHZvaWQgbm90aWZ5Tm9kZVJlbW92ZWRGcm9tVHJlZShDb250YWluZXIKIAogdm9pZCBub3Rp
ZnlDaGlsZE5vZGVSZW1vdmVkKENvbnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50LCBOb2RlJiBj
aGlsZCkKIHsKKyAgICB3cml0ZUJhcnJpZXJPcGFxdWVSb290KFt0aGlzXSAoKSAtPiB2b2lkKiB7
IHJldHVybiAmY2hpbGQ7IH0pOworCiAgICAgaWYgKCFjaGlsZC5pbkRvY3VtZW50KCkpIHsKICAg
ICAgICAgaWYgKGlzPENvbnRhaW5lck5vZGU+KGNoaWxkKSkKICAgICAgICAgICAgIG5vdGlmeU5v
ZGVSZW1vdmVkRnJvbVRyZWUoaW5zZXJ0aW9uUG9pbnQsIGRvd25jYXN0PENvbnRhaW5lck5vZGU+
KGNoaWxkKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDIwOTYzNykK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQw
LDYgKzQwLDcgQEAKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnQu
aCIKICNpbmNsdWRlICJDb21tZW50LmgiCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRl
ICJDb21wb3NpdGlvbkV2ZW50LmgiCiAjaW5jbHVkZSAiQ29udGVudFNlY3VyaXR5UG9saWN5Lmgi
CiAjaW5jbHVkZSAiQ29va2llSmFyLmgiCkBAIC0yMzY1LDcgKzIzNjYsNyBAQCB2b2lkIERvY3Vt
ZW50OjpyZXN1bWVEZXZpY2VNb3Rpb25BbmRPcmllCiAKIGJvb2wgRG9jdW1lbnQ6OnNob3VsZEJ5
cGFzc01haW5Xb3JsZENvbnRlbnRTZWN1cml0eVBvbGljeSgpIGNvbnN0CiB7Ci0gICAgSlNDOjpD
YWxsRnJhbWUqIGNhbGxGcmFtZSA9IEpTRE9NV2luZG93Ojpjb21tb25WTSgpLnRvcENhbGxGcmFt
ZTsKKyAgICBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lID0gY29tbW9uVk0oKS50b3BDYWxsRnJh
bWU7CiAgICAgaWYgKGNhbGxGcmFtZSA9PSBKU0M6OkNhbGxGcmFtZTo6bm9DYWxsZXIoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIERPTVdyYXBwZXJXb3JsZCYgZG9tV3JhcHBlcldvcmxk
ID0gY3VycmVudFdvcmxkKGNhbGxGcmFtZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9uIDIw
OTYzNykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2
Niw2ICsyNjYsOCBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wgY29tcG9zZWQ7CiAgICAgfTsKICAg
ICBOb2RlJiBnZXRSb290Tm9kZShjb25zdCBHZXRSb290Tm9kZU9wdGlvbnMmKSBjb25zdDsKKyAg
ICAKKyAgICB2b2lkKiBvcGFxdWVSb290KCkgY29uc3Q7CiAKICAgICAvLyBVc2Ugd2hlbiBpdCdz
IGd1YXJhbnRlZWQgdG8gdGhhdCBzaGFkb3dIb3N0IGlzIG51bGwuCiAgICAgQ29udGFpbmVyTm9k
ZSogcGFyZW50Tm9kZUd1YXJhbnRlZWRIb3N0RnJlZSgpIGNvbnN0OwpAQCAtNzU3LDYgKzc1OSwy
MyBAQCBpbmxpbmUgQ29udGFpbmVyTm9kZSogTm9kZTo6cGFyZW50Tm9kZSgpCiAgICAgcmV0dXJu
IG1fcGFyZW50Tm9kZTsKIH0KIAoraW5saW5lIHZvaWQqIE5vZGU6Om9wYXF1ZVJvb3QoKSBjb25z
dAoreworICAgIC8vIEZJWE1FOiBQb3NzaWJsZSByYWNlPworICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU3MTMKKyAgICBpZiAoaW5Eb2N1bWVudCgpKQor
ICAgICAgICByZXR1cm4gJmRvY3VtZW50KCk7CisgICAgCisgICAgTm9kZSogbm9kZSA9IHRoaXM7
CisgICAgZm9yICg7OykgeworICAgICAgICBOb2RlKiBuZXh0Tm9kZSA9IG5vZGUtPnBhcmVudE9y
U2hhZG93SG9zdE5vZGUoKTsKKyAgICAgICAgaWYgKCFuZXh0Tm9kZSkKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBub2RlID0gbmV4dE5vZGU7CisgICAgfQorICAgIHJldHVybiBub2RlOwor
fQorCiBpbmxpbmUgQ29udGFpbmVyTm9kZSogTm9kZTo6cGFyZW50Tm9kZUd1YXJhbnRlZWRIb3N0
RnJlZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFpc1NoYWRvd1Jvb3QoKSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCShyZXZpc2lvbiAy
MDk2MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRp
b25Db250ZXh0LmgiCiAKICNpbmNsdWRlICJDYWNoZWRTY3JpcHQuaCIKKyNpbmNsdWRlICJDb21t
b25WTS5oIgogI2luY2x1ZGUgIkRPTVRpbWVyLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VDb250ZXh0
LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKQEAgLTQ3Nyw3ICs0NzgsNyBAQCBzdGQ6OmNocm9u
bzo6bWlsbGlzZWNvbmRzIFNjcmlwdEV4ZWN1dGlvCiBKU0M6OlZNJiBTY3JpcHRFeGVjdXRpb25D
b250ZXh0Ojp2bSgpCiB7CiAgICAgaWYgKGlzPERvY3VtZW50PigqdGhpcykpCi0gICAgICAgIHJl
dHVybiBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKTsKKyAgICAgICAgcmV0dXJuIGNvbW1vblZNKCk7
CiAKICAgICByZXR1cm4gZG93bmNhc3Q8V29ya2VyR2xvYmFsU2NvcGU+KCp0aGlzKS5zY3JpcHQo
KS0+dm0oKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlTG9hZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUxvYWRlci5jcHAJ
KHJldmlzaW9uIDIwOTYzNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlTG9hZGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgIkhUTUxJbWFn
ZUxvYWRlci5oIgogCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKKyNpbmNsdWRlICJDb21tb25W
TS5oIgogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNs
dWRlICJFdmVudC5oIgpAQCAtODQsNyArODUsNyBAQCB2b2lkIEhUTUxJbWFnZUxvYWRlcjo6bm90
aWZ5RmluaXNoZWQoQ2FjCiAgICAgYm9vbCBsb2FkRXJyb3IgPSBjYWNoZWRJbWFnZS5lcnJvck9j
Y3VycmVkKCkgfHwgY2FjaGVkSW1hZ2UucmVzcG9uc2UoKS5odHRwU3RhdHVzQ29kZSgpID49IDQw
MDsKICAgICBpZiAoIWxvYWRFcnJvcikgewogICAgICAgICBpZiAoIWVsZW1lbnQoKS5pbkRvY3Vt
ZW50KCkpIHsKLSAgICAgICAgICAgIEpTQzo6Vk0mIHZtID0gSlNET01XaW5kb3dCYXNlOjpjb21t
b25WTSgpOworICAgICAgICAgICAgSlNDOjpWTSYgdm0gPSBjb21tb25WTSgpOwogICAgICAgICAg
ICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAgICAgICAgICAgICAvLyBGSVhNRTogQWRv
cHQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkLCBhbmQgc3dpdGNoIHRvIHJlcG9ydEV4dHJhTWVt
b3J5QWxsb2NhdGVkLgogICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0MjU5NQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAyMDk2MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
ZWRpYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVk
ZSAiQ2hyb21lQ2xpZW50LmgiCiAjaW5jbHVkZSAiQ2xpZW50UmVjdC5oIgogI2luY2x1ZGUgIkNs
aWVudFJlY3RMaXN0LmgiCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJDb250ZW50
U2VjdXJpdHlQb2xpY3kuaCIKICNpbmNsdWRlICJDb250ZW50VHlwZS5oIgogI2luY2x1ZGUgIkNv
b2tpZUphci5oIgpAQCAtODQ5LDcgKzg1MCw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cGF1
c2VBZnRlckRldGFjaGUKIAogICAgIHNpemVfdCBleHRyYU1lbW9yeUNvc3QgPSBtX3BsYXllci0+
ZXh0cmFNZW1vcnlDb3N0KCk7CiAgICAgaWYgKGV4dHJhTWVtb3J5Q29zdCA+IG1fcmVwb3J0ZWRF
eHRyYU1lbW9yeUNvc3QpIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBKU0RPTVdpbmRvd0Jhc2U6
OmNvbW1vblZNKCk7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gY29tbW9uVk0oKTsKICAgICAgICAg
SlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAKICAgICAgICAgc2l6ZV90IGV4dHJhTWVtb3J5
Q29zdERlbHRhID0gZXh0cmFNZW1vcnlDb3N0IC0gbV9yZXBvcnRlZEV4dHJhTWVtb3J5Q29zdDsK
QEAgLTY0OTYsNyArNjQ5Nyw3IEBAIFJlZlB0cjxWaWRlb1BsYXliYWNrUXVhbGl0eT4gSFRNTE1l
ZGlhRWwKIERPTVdyYXBwZXJXb3JsZCYgSFRNTE1lZGlhRWxlbWVudDo6ZW5zdXJlSXNvbGF0ZWRX
b3JsZCgpCiB7CiAgICAgaWYgKCFtX2lzb2xhdGVkV29ybGQpCi0gICAgICAgIG1faXNvbGF0ZWRX
b3JsZCA9IERPTVdyYXBwZXJXb3JsZDo6Y3JlYXRlKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsK
KyAgICAgICAgbV9pc29sYXRlZFdvcmxkID0gRE9NV3JhcHBlcldvcmxkOjpjcmVhdGUoY29tbW9u
Vk0oKSk7CiAgICAgcmV0dXJuICptX2lzb2xhdGVkV29ybGQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAkocmV2aXNpb24gMjA5
NjM3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAj
aW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRl
ICJDb250ZW50U2VjdXJpdHlQb2xpY3kuaCIKICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUg
IkV2ZW50SGFuZGxlci5oIgpAQCAtMzY1LDcgKzM2Niw3IEBAIHZvaWQgSFRNTFBsdWdJbkltYWdl
RWxlbWVudDo6dXBkYXRlU25hcHMKIAogc3RhdGljIERPTVdyYXBwZXJXb3JsZCYgcGx1Z0luSW1h
Z2VFbGVtZW50SXNvbGF0ZWRXb3JsZCgpCiB7Ci0gICAgc3RhdGljIERPTVdyYXBwZXJXb3JsZCYg
aXNvbGF0ZWRXb3JsZCA9IERPTVdyYXBwZXJXb3JsZDo6Y3JlYXRlKEpTRE9NV2luZG93Ojpjb21t
b25WTSgpKS5sZWFrUmVmKCk7CisgICAgc3RhdGljIERPTVdyYXBwZXJXb3JsZCYgaXNvbGF0ZWRX
b3JsZCA9IERPTVdyYXBwZXJXb3JsZDo6Y3JlYXRlKGNvbW1vblZNKCkpLmxlYWtSZWYoKTsKICAg
ICByZXR1cm4gaXNvbGF0ZWRXb3JsZDsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjA5NjM3KQorKysg
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5o
IgogCiAjaW5jbHVkZSAiQ29tbWFuZExpbmVBUElIb3N0LmgiCisjaW5jbHVkZSAiQ29tbW9uVk0u
aCIKICNpbmNsdWRlICJET01XcmFwcGVyV29ybGQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCIKQEAgLTQ3
MCw3ICs0NzEsNyBAQCBQYWdlU2NyaXB0RGVidWdTZXJ2ZXImIEluc3BlY3RvckNvbnRyb2xsCiAK
IEpTQzo6Vk0mIEluc3BlY3RvckNvbnRyb2xsZXI6OnZtKCkKIHsKLSAgICByZXR1cm4gSlNET01X
aW5kb3dCYXNlOjpjb21tb25WTSgpOworICAgIHJldHVybiBjb21tb25WTSgpOwogfQogCiB2b2lk
IEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENvbXBvc2l0ZShGcmFtZSYgZnJhbWUpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNw
cAkocmV2aXNpb24gMjA5NjM3KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VTY3Jp
cHREZWJ1Z1NlcnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQYWdlU2NyaXB0RGVidWdTZXJ2ZXIuaCIKIAorI2lu
Y2x1ZGUgIkNvbW1vblZNLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFdmVu
dExvb3AuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKQEAgLTU0LDcgKzU1LDcgQEAgdXNpbmcg
bmFtZXNwYWNlIEluc3BlY3RvcjsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUGFnZVNjcmlwdERl
YnVnU2VydmVyOjpQYWdlU2NyaXB0RGVidWdTZXJ2ZXIoUGFnZSYgcGFnZSkKLSAgICA6IFNjcmlw
dERlYnVnU2VydmVyKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSkKKyAgICA6
IFNjcmlwdERlYnVnU2VydmVyKFdlYkNvcmU6OmNvbW1vblZNKCkpCiAgICAgLCBtX3BhZ2UocGFn
ZSkKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VMb2dnaW5nLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlTG9nZ2luZy5j
cHAJKHJldmlzaW9uIDIwOTYzNykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VM
b2dnaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlBlcmZvcm1hbmNlTG9nZ2luZy5oIgogCisjaW5jbHVkZSAiQ29t
bW9uVk0uaCIKICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgog
I2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCkBAIC01Miw3ICs1Myw3IEBAIEhhc2hNYXA8
Y29uc3QgY2hhciosIHNpemVfdD4gUGVyZm9ybWFuY2UKIHsKICAgICBIYXNoTWFwPGNvbnN0IGNo
YXIqLCBzaXplX3Q+IHN0YXRzOwogCi0gICAgYXV0byYgdm0gPSBKU0RPTVdpbmRvdzo6Y29tbW9u
Vk0oKTsKKyAgICBhdXRvJiB2bSA9IGNvbW1vblZNKCk7CiAgICAgc3RhdHMuYWRkKCJqYXZhc2Ny
aXB0X2djX2hlYXBfY2FwYWNpdHkiLCB2bS5oZWFwLmNhcGFjaXR5KCkpOwogICAgIHN0YXRzLmFk
ZCgiamF2YXNjcmlwdF9nY19oZWFwX2V4dHJhX21lbW9yeV9zaXplIiwgdm0uaGVhcC5leHRyYU1l
bW9yeVNpemUoKSk7CiAKQEAgLTc0LDcgKzc1LDcgQEAgSGFzaE1hcDxjb25zdCBjaGFyKiwgc2l6
ZV90PiBQZXJmb3JtYW5jZQogCiBIYXNoQ291bnRlZFNldDxjb25zdCBjaGFyKj4gUGVyZm9ybWFu
Y2VMb2dnaW5nOjpqYXZhU2NyaXB0T2JqZWN0Q291bnRzKCkKIHsKLSAgICByZXR1cm4gV1RGTW92
ZSgqSlNET01XaW5kb3c6OmNvbW1vblZNKCkuaGVhcC5vYmplY3RUeXBlQ291bnRzKCkpOworICAg
IHJldHVybiBXVEZNb3ZlKCpjb21tb25WTSgpLmhlYXAub2JqZWN0VHlwZUNvdW50cygpKTsKIH0K
IAogUGVyZm9ybWFuY2VMb2dnaW5nOjpQZXJmb3JtYW5jZUxvZ2dpbmcoTWFpbkZyYW1lJiBtYWlu
RnJhbWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VUaHJlYWQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZVRocmVhZC5j
cHAJKHJldmlzaW9uIDIwOTYzNykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2Fn
ZVRocmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJM
RShSRVNPVVJDRV9VU0FHRSkKIAorI2luY2x1ZGUgIkNvbW1vblZNLmgiCiAjaW5jbHVkZSAiSlNE
T01XaW5kb3cuaCIKICNpbmNsdWRlIDx0aHJlYWQ+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQu
aD4KQEAgLTk4LDcgKzk5LDcgQEAgdm9pZCBSZXNvdXJjZVVzYWdlVGhyZWFkOjpjcmVhdGVUaHJl
YWRJZgogICAgIGlmIChtX3RocmVhZElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybjsKIAotICAg
IG1fdm0gPSAmSlNET01XaW5kb3c6OmNvbW1vblZNKCk7CisgICAgbV92bSA9ICZjb21tb25WTSgp
OwogICAgIG1fdGhyZWFkSWRlbnRpZmllciA9IGNyZWF0ZVRocmVhZCh0aHJlYWRDYWxsYmFjaywg
dGhpcywgIldlYkNvcmU6IFJlc291cmNlVXNhZ2UiKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCShyZXZpc2lvbiAyMDk2MzcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2
ICsyOSw3IEBACiAjaW5jbHVkZSAiU1ZHSW1hZ2UuaCIKIAogI2luY2x1ZGUgIkNocm9tZS5oIgor
I2luY2x1ZGUgIkNvbW1vblZNLmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJFbGVtZW50SXRlcmF0b3IuaCIKQEAgLTM5Nyw3
ICszOTgsNyBAQCB2b2lkIFNWR0ltYWdlOjpyZXBvcnRBcHByb3hpbWF0ZU1lbW9yeUNvCiAgICAg
Zm9yIChOb2RlKiBub2RlID0gZG9jdW1lbnQ7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpu
ZXh0KCpub2RlKSkKICAgICAgICAgZGVjb2RlZEltYWdlTWVtb3J5Q29zdCArPSBub2RlLT5hcHBy
b3hpbWF0ZU1lbW9yeUNvc3QoKTsKIAotICAgIEpTQzo6Vk0mIHZtID0gSlNET01XaW5kb3dCYXNl
Ojpjb21tb25WTSgpOworICAgIEpTQzo6Vk0mIHZtID0gY29tbW9uVk0oKTsKICAgICBKU0M6OkpT
TG9ja0hvbGRlciBsb2NrKHZtKTsKICAgICAvLyBGSVhNRTogQWRvcHQgcmVwb3J0RXh0cmFNZW1v
cnlWaXNpdGVkLCBhbmQgc3dpdGNoIHRvIHJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkLgogICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI1OTUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTWVtb3J5SW5mby5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvTWVtb3J5SW5mby5oCShyZXZpc2lvbiAyMDk2MzcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL01lbW9yeUluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiAr
MzAsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkNvbW1vblZNLmgiCiAjaW5jbHVk
ZSAiSlNET01XaW5kb3cuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCkBAIC00NCw4
ICs0NSw4IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBNZW1vcnlJbmZvKCkKLSAgICAgICAg
OiBtX3VzZWRKU0hlYXBTaXplKEpTRE9NV2luZG93Ojpjb21tb25WTSgpLmhlYXAuc2l6ZSgpKQot
ICAgICAgICAsIG1fdG90YWxKU0hlYXBTaXplKEpTRE9NV2luZG93Ojpjb21tb25WTSgpLmhlYXAu
Y2FwYWNpdHkoKSkKKyAgICAgICAgOiBtX3VzZWRKU0hlYXBTaXplKGNvbW1vblZNKCkuaGVhcC5z
aXplKCkpCisgICAgICAgICwgbV90b3RhbEpTSGVhcFNpemUoY29tbW9uVk0oKS5oZWFwLmNhcGFj
aXR5KCkpCiAgICAgewogICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>296781</attachid>
            <date>2016-12-09 22:32:50 -0800</date>
            <delta_ts>2016-12-10 10:15:10 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>54152</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA5NjQ3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBA
CisyMDE2LTEyLTA5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
VGhlIERPTSBzaG91bGQgaGF2ZSBhbiBhZHZhbmNpbmcgd2F2ZWZyb250IG9wYXF1ZSByb290IGJh
cnJpZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
NTcxMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAg
ICAgICAgVGhpcyBleHBvc2VzIHRoZSBhYmlsaXR5IHRvIGZpcmUgYW4gYWR2YW5jaW5nIHdhdmVm
cm9udCBiYXJyaWVyIG9uIG9wYXF1ZSByb290cy4gSXQgYWxzbworICAgICAgICBnaXZlcyBjbGll
bnRzIHRoZSBhYmlsaXR5IHRvIG1haW50YWluIHRoZWlyIG93biBjYWNoZSBvZiB3aGV0aGVyIHRo
YXQgYmFycmllciBuZWVkcyB0bworICAgICAgICBiZSBlbmFibGVkLgorICAgICAgICAKKyAgICAg
ICAgVGhlIERPTSB1c2VzIHRoaXMgdG8gZW5hYmxlIGEgdmVyeSBjaGVhcCBiYXJyaWVyIG9uIHRo
ZSBET00uCisKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjpi
ZWdpbk1hcmtpbmcpOgorICAgICAgICAoSlNDOjpIZWFwOjplbmRNYXJraW5nKToKKyAgICAgICAg
KEpTQzo6SGVhcDo6d3JpdGVCYXJyaWVyT3BhcXVlUm9vdFNsb3cpOgorICAgICAgICAoSlNDOjpI
ZWFwOjphZGRNdXRhdG9yU2hvdWxkQmVGZW5jZWRDYWNoZSk6CisgICAgICAgIChKU0M6OkhlYXA6
OnNldE11dGF0b3JTaG91bGRCZUZlbmNlZCk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAg
ICAgICogaGVhcC9IZWFwSW5saW5lcy5oOgorICAgICAgICAoSlNDOjp3cml0ZUJhcnJpZXJPcGFx
dWVSb290KToKKwogMjAxNi0xMi0wOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgog
CiAgICAgICAgIFJFR1JFU1NJT04gKHIyMDk1NTQtMjA5NTcxKTogc3RyZXNzL3BvbHktc2V0dGVy
LWNvbWJvIGNyYXNoaW5nCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2
aXNpb24gMjA5NjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgxNSw4ICs4MTUsNyBAQCB2b2lkIEhlYXA6OmJlZ2luTWFya2luZygp
CiAgICAgICAgIG1fY29kZUJsb2Nrcy0+Y2xlYXJNYXJrc0ZvckZ1bGxDb2xsZWN0aW9uKCk7CiAg
ICAgbV9qaXRTdHViUm91dGluZXMtPmNsZWFyTWFya3MoKTsKICAgICBtX29iamVjdFNwYWNlLmJl
Z2luTWFya2luZygpOwotICAgIG1fbXV0YXRvclNob3VsZEJlRmVuY2VkID0gdHJ1ZTsKLSAgICBt
X2JhcnJpZXJUaHJlc2hvbGQgPSB0YXV0b2xvZ2ljYWxUaHJlc2hvbGQ7CisgICAgc2V0TXV0YXRv
clNob3VsZEJlRmVuY2VkKHRydWUpOwogICAgIG1fYmFycmllcnNFeGVjdXRlZCA9IDA7CiB9CiAK
QEAgLTk0Myw4ICs5NDIsNyBAQCB2b2lkIEhlYXA6OmVuZE1hcmtpbmcoKQogICAgIG1fd2Vha1Jl
ZmVyZW5jZUhhcnZlc3RlcnMucmVtb3ZlQWxsKCk7CiAgICAgCiAgICAgbV9vYmplY3RTcGFjZS5l
bmRNYXJraW5nKCk7Ci0gICAgbV9tdXRhdG9yU2hvdWxkQmVGZW5jZWQgPSBPcHRpb25zOjpmb3Jj
ZUZlbmNlZEJhcnJpZXIoKTsKLSAgICBtX2JhcnJpZXJUaHJlc2hvbGQgPSBPcHRpb25zOjpmb3Jj
ZUZlbmNlZEJhcnJpZXIoKSA/IHRhdXRvbG9naWNhbFRocmVzaG9sZCA6IGJsYWNrVGhyZXNob2xk
OworICAgIHNldE11dGF0b3JTaG91bGRCZUZlbmNlZChPcHRpb25zOjpmb3JjZUZlbmNlZEJhcnJp
ZXIoKSk7CiB9CiAKIHNpemVfdCBIZWFwOjpvYmplY3RDb3VudCgpCkBAIC0yMzEzLDQgKzIzMTEs
MjcgQEAgdm9pZCBIZWFwOjpmb3JFYWNoU2xvdFZpc2l0b3IoY29uc3QgRnVuYwogICAgICAgICBm
dW5jKCpzbG90VmlzaXRvcik7CiB9CiAKK3ZvaWQgSGVhcDo6d3JpdGVCYXJyaWVyT3BhcXVlUm9v
dFNsb3codm9pZCogcm9vdCkKK3sKKyAgICBBU1NFUlQobXV0YXRvclNob3VsZEJlRmVuY2VkKCkp
OworICAgIAorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9vcGFxdWVSb290c011dGV4KTsK
KyAgICBtX29wYXF1ZVJvb3RzLmFkZChyb290KTsKK30KKwordm9pZCBIZWFwOjphZGRNdXRhdG9y
U2hvdWxkQmVGZW5jZWRDYWNoZShib29sJiBjYWNoZSkKK3sKKyAgICBBU1NFUlQoaGFzSGVhcEFj
Y2VzcygpKTsKKyAgICBjYWNoZSA9IG1fbXV0YXRvclNob3VsZEJlRmVuY2VkOworICAgIG1fbXV0
YXRvclNob3VsZEJlRmVuY2VkQ2FjaGVzLmFwcGVuZCgmY2FjaGUpOworfQorCit2b2lkIEhlYXA6
OnNldE11dGF0b3JTaG91bGRCZUZlbmNlZChib29sIHZhbHVlKQoreworICAgIG1fbXV0YXRvclNo
b3VsZEJlRmVuY2VkID0gdmFsdWU7CisgICAgbV9iYXJyaWVyVGhyZXNob2xkID0gdmFsdWUgPyB0
YXV0b2xvZ2ljYWxUaHJlc2hvbGQgOiBibGFja1RocmVzaG9sZDsKKyAgICBmb3IgKGJvb2wqIGNh
Y2hlIDogbV9tdXRhdG9yU2hvdWxkQmVGZW5jZWRDYWNoZXMpCisgICAgICAgICpjYWNoZSA9IHZh
bHVlOworfQorICAgIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5oCShyZXZpc2lvbiAyMDk2NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNSw2ICsxMjUsOCBAQCBwdWJsaWM6CiAKICAg
ICBXcml0ZUJhcnJpZXJCdWZmZXImIHdyaXRlQmFycmllckJ1ZmZlcigpIHsgcmV0dXJuIG1fd3Jp
dGVCYXJyaWVyQnVmZmVyOyB9CiAgICAgdm9pZCBmbHVzaFdyaXRlQmFycmllckJ1ZmZlcihKU0Nl
bGwqKTsKKyAgICAKKyAgICB2b2lkIHdyaXRlQmFycmllck9wYXF1ZVJvb3Qodm9pZCopOwogCiAg
ICAgSGVhcChWTSosIEhlYXBUeXBlKTsKICAgICB+SGVhcCgpOwpAQCAtMzQ5LDYgKzM1MSw4IEBA
IHB1YmxpYzoKICAgICB2b2lkIHByZXZlbnRDb2xsZWN0aW9uKCk7CiAgICAgdm9pZCBhbGxvd0Nv
bGxlY3Rpb24oKTsKICAgICAKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZE11dGF0b3JT
aG91bGRCZUZlbmNlZENhY2hlKGJvb2wmKTsKKyAgICAKICNpZiBVU0UoQ0YpCiAgICAgQ0ZSdW5M
b29wUmVmIHJ1bkxvb3AoKSBjb25zdCB7IHJldHVybiBtX3J1bkxvb3AuZ2V0KCk7IH0KICAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIHNldFJ1bkxvb3AoQ0ZSdW5Mb29wUmVmKTsKQEAgLTQ5MCw2
ICs0OTQsMTAgQEAgcHJpdmF0ZToKICAgICBzaXplX3QgdGhyZWFkQnl0ZXNWaXNpdGVkKCk7CiAg
ICAgCiAgICAgdm9pZCBmb3JFYWNoQ29kZUJsb2NrSW1wbChjb25zdCBTY29wZWRMYW1iZGE8Ym9v
bChDb2RlQmxvY2sqKT4mKTsKKyAgICAKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHdyaXRl
QmFycmllck9wYXF1ZVJvb3RTbG93KHZvaWQqKTsKKyAgICAKKyAgICB2b2lkIHNldE11dGF0b3JT
aG91bGRCZUZlbmNlZChib29sIHZhbHVlKTsKIAogICAgIGNvbnN0IEhlYXBUeXBlIG1faGVhcFR5
cGU7CiAgICAgY29uc3Qgc2l6ZV90IG1fcmFtU2l6ZTsKQEAgLTU0OSw2ICs1NTcsNyBAQCBwcml2
YXRlOgogICAgIFdyaXRlQmFycmllckJ1ZmZlciBtX3dyaXRlQmFycmllckJ1ZmZlcjsKICAgICBi
b29sIG1fbXV0YXRvclNob3VsZEJlRmVuY2VkIHsgT3B0aW9uczo6Zm9yY2VGZW5jZWRCYXJyaWVy
KCkgfTsKICAgICB1bnNpZ25lZCBtX2JhcnJpZXJUaHJlc2hvbGQgeyBPcHRpb25zOjpmb3JjZUZl
bmNlZEJhcnJpZXIoKSA/IHRhdXRvbG9naWNhbFRocmVzaG9sZCA6IGJsYWNrVGhyZXNob2xkIH07
CisgICAgVmVjdG9yPGJvb2wqPiBtX211dGF0b3JTaG91bGRCZUZlbmNlZENhY2hlczsKIAogICAg
IFZNKiBtX3ZtOwogICAgIGRvdWJsZSBtX2xhc3RGdWxsR0NMZW5ndGg7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHJldmlzaW9uIDIwOTY0NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM3MCw0ICszNzAsMTAgQEAgaW5saW5lIHZvaWQgSGVhcDo6c3RvcElmTmVjZXNzYXJ5KCkKICAg
ICBzdG9wSWZOZWNlc3NhcnlTbG93KCk7CiB9CiAKK2lubGluZSB2b2lkIEhlYXA6OndyaXRlQmFy
cmllck9wYXF1ZVJvb3Qodm9pZCogcm9vdCkKK3sKKyAgICBpZiAobXV0YXRvclNob3VsZEJlRmVu
Y2VkKCkpCisgICAgICAgIHdyaXRlQmFycmllck9wYXF1ZVJvb3RTbG93KHJvb3QpOworfQorCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnMuY3BwCShyZXZpc2lvbiAyMDk2NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM2LDYgKzMzNiw4IEBAIHN0YXRp
YyB2b2lkIHJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoKQogICAgIE9wdGlvbnM6OnVzZUNvbmN1
cnJlbnRHQygpID0gZmFsc2U7CiAjZW5kaWYKICAgICAKKyAgICBPcHRpb25zOjp1c2VDb25jdXJy
ZW50R0MoKSA9IHRydWU7CisgICAgCiAjaWYgT1MoV0lORE9XUykgJiYgQ1BVKFg4NikgCiAgICAg
Ly8gRGlzYWJsZSBKSVQgb24gV2luZG93cyBpZiBTU0UyIGlzIG5vdCBwcmVzZW50IAogICAgIGlm
ICghTWFjcm9Bc3NlbWJsZXJYODY6OnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQpJbmRleDogU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkocmV2aXNpb24gMjA5NjQ3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTI0IEBACisyMDE2LTEyLTA5ICBGaWxpcCBQaXpsbyAgPGZw
aXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgVGhlIERPTSBzaG91bGQgaGF2ZSBhbiBhZHZhbmNp
bmcgd2F2ZWZyb250IG9wYXF1ZSByb290IGJhcnJpZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTcxMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIHRoaXMgd2FzIGNv
dmVyZWQgYnkgY3Jhc2hpbmcgdGVzdHMuCisgICAgICAgIAorICAgICAgICBDb25zaWRlciB0aGVz
ZSB0d28gY2FzZXM6CisgICAgICAgIAorICAgICAgICAgICBSZW1vdmFsOgorICAgICAgICAgICAx
KSBET00gYXQgc3RhcnQ6IEQtPlgtPlkKKyAgICAgICAgICAgMikgTWFyayBYLCBYLT52aXNpdENo
aWxkcmVuLCBhZGRPcGFxdWVSb290KEQpCisgICAgICAgICAgIDMpIHJlbW92ZSBYCisgICAgICAg
ICAgIDQpIFkgdGhpbmtzIGl0J3Mgbm90IHJlYWNoYWJsZSAoaXRzIG9wYXF1ZSByb290LCBYLCBp
cyBub3QgaW4gdGhlIHNldCkuCisgICAgICAgICAgIAorICAgICAgICAgICBJbnNlcnRpb246Cisg
ICAgICAgICAgIDEpIERPTSBhdCBzdGFydDogRCwgWC0+WQorICAgICAgICAgICAyKSBNYXJrIFgs
IFgtPnZpc2l0Q2hpbGRyZW4sIGFkZE9wYXF1ZVJvb3QoWCkKKyAgICAgICAgICAgMykgaW5zZXJ0
IFggaW50byBECisgICAgICAgICAgIDQpIFkgdGhpbmtzIGl0J3Mgbm90IHJlYWNoYWJsZSAoaXRz
IG9wYXF1ZSByb290LCBELCBpcyBub3QgaW4gdGhlIHNldCkuCisgICAgICAgIAorICAgICAgICBX
ZSBjYW4gZml4IHRoaXMgd2l0aCB0d28gYmFycmllcnM6CisgICAgICAgIAorICAgICAgICAgICBS
ZW1vdmFsOiBhZGQgWCAodGhlIHJlbW92ZWQgY2hpbGQpIHRvIHRoZSBvcGFxdWUgcm9vdCBzZXQu
CisgICAgICAgICAgIEluc2VydGlvbjogYWRkIEQgKHRoZSBpbnNlcnRpb24gcG9pbnQpIHRvIHRo
ZSBvcGFxdWUgcm9vdCBzZXQuCisgICAgICAgIAorICAgICAgICBUaGFua3MgUnlzb3N1a2UgZm9y
IGNvbWluZyB1cCB3aXRoIHRoaXMgaWRlYSEKKyAgICAgICAgCisgICAgICAgIEJvdGggYmFycmll
cnMgYWR2YW5jZSB0aGUgd2F2ZWZyb250LiBXZSBjb3VsZCBjb25zaWRlciByZXRyZWF0aW5nIHdh
dmVmcm9udCBiYXJyaWVycyBpbgorICAgICAgICB0aGUgZnV0dXJlICh3aGVyZSB3ZSBjYXVzZSB2
aXNpdENoaWxkcmVuIHRvIGJlIGNhbGxlZCBhZ2FpbiBvbiB3cmFwcGVycyB0aGF0IGJlbG9uZ2Vk
IHRvCisgICAgICAgIHJvb3RzIHRoYXQgZ290IGFmZmVjdGVkIGJ5IGluc2VydGlvbi9yZW1vdmFs
KSBidXQgdGhvc2Ugd291bGQgcHJvYmFibHkgcmVxdWlyZSBtb3JlCisgICAgICAgIGJvb2trZWVw
aW5nLgorICAgICAgICAKKyAgICAgICAgVG8gbWFrZSB0aGlzIGJhcnJpZXIgdmVyeSBmYXN0LCB0
aGUgV2ViQ29yZSBjYWNoZXMgdGhlIEpTQyBWTSdzIGJhcnJpZXIgc3RhdGUgaW4KKyAgICAgICAg
aXRzIG93biBnbG9iYWwgdmFyaWFibGUgZm9yIHZlcnkgZmFzdCBhY2Nlc3MuIFRoaXMgdmFyaWFi
bGUgd2lsbCBiZSBmYWxzZSB3aGVuIHRoZQorICAgICAgICBWTSBpcyBpZGxlLCBmb3IgZXhhbXBs
ZS4gV2Ugc2tpcCB0aGUgYmFycmllciB3aGVuIGl0J3MgZmFsc2UsIHdoaWNoIGlzIHRoZSBjb21t
b24gY2FzZS4KKyAgICAgICAgCisgICAgICAgIFRvIG1ha2UgdGhhdCBjYWNoaW5nIG1vcmUgc2Vu
c2libGUsIEkgZmluYWxseSBnYXZlIFdlYkNvcmUgYSBjZW50cmFsIGhlYWRlciBmb3IKKyAgICAg
ICAgdGhlIGNvbW1vbiBWTSAoQ29tbW9uVk0uaCkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTRFBQcm9jZXNzb3I6OmNhbGxTY3JpcHQpOgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9Db21t
b25WTS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29tbW9uVk1TbG93KToKKyAgICAg
ICAgKFdlYkNvcmU6OndyaXRlQmFycmllck9wYXF1ZVJvb3RTbG93KToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9Db21tb25WTS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbW1vblZNKToK
KyAgICAgICAgKFdlYkNvcmU6OndyaXRlQmFycmllck9wYXF1ZVJvb3QpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjptYWluVGhy
ZWFkTm9ybWFsV29ybGQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpjb2xsZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdDQ29udHJv
bGxlcjo6Z2FyYmFnZUNvbGxlY3RTb29uKToKKyAgICAgICAgKFdlYkNvcmU6OkdDQ29udHJvbGxl
cjo6Z2FyYmFnZUNvbGxlY3ROb3cpOgorICAgICAgICAoV2ViQ29yZTo6R0NDb250cm9sbGVyOjpn
YXJiYWdlQ29sbGVjdE5vd0lmTm90RG9uZVJlY2VudGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkdD
Q29udHJvbGxlcjo6c2V0SmF2YVNjcmlwdEdhcmJhZ2VDb2xsZWN0b3JUaW1lckVuYWJsZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6R0NDb250cm9sbGVyOjpkZWxldGVBbGxDb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdDQ29udHJvbGxlcjo6ZGVsZXRlQWxsTGlua2VkQ29kZSk6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI6Omxvb2t1cE5hbWVzcGFjZVVSSSk6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZElt
cHVyZVByb3BlcnR5KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpmaXJlRnJhbWVDbGVhcmVkV2F0
Y2hwb2ludHNGb3JXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpj
b21tb25WTSk6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNl
Lmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU0RPTVdpbmRvd1NoZWxsOjpzZXRXaW5kb3cpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTTm9kZUN1c3RvbS5oOgorICAgICAgICAoV2ViQ29yZTo6cm9vdCk6CisgICAgICAg
ICogYmluZGluZ3MvanMvU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdENhY2hlZEZyYW1lRGF0YTo6U2NyaXB0Q2FjaGVkRnJhbWVEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdENhY2hlZEZyYW1lRGF0YTo6cmVzdG9yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHRDYWNoZWRGcmFtZURhdGE6OmNsZWFyKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRy
b2xsZXI6On5TY3JpcHRDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRy
b2xsZXI6OmNyZWF0ZVdvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6
OmdldEFsbFdvcmxkcyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpjbGVh
cldpbmRvd1NoZWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNhY2hl
YWJsZUJpbmRpbmdSb290T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xs
ZXI6OmJpbmRpbmdSb290T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xs
ZXI6OndpbmRvd1NjcmlwdE5QT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRy
b2xsZXI6OmpzT2JqZWN0Rm9yUGx1Z2luRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHRDb250cm9sbGVyOjpjbGVhclNjcmlwdE9iamVjdHMpOgorICAgICAgICAqIGRvbS9Db2xsZWN0
aW9uSW5kZXhDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZXBvcnRFeHRyYU1lbW9yeUFs
bG9jYXRlZEZvckNvbGxlY3Rpb25JbmRleENhY2hlKToKKyAgICAgICAgKiBkb20vQ29udGFpbmVy
Tm9kZS5jcHA6CisgICAgICAgICogZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Om5vdGlmeUNoaWxkTm9kZUluc2VydGVkKToKKyAgICAgICAgKFdlYkNv
cmU6Om5vdGlmeUNoaWxkTm9kZVJlbW92ZWQpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2hvdWxkQnlwYXNzTWFpbldvcmxkQ29udGVu
dFNlY3VyaXR5UG9saWN5KToKKyAgICAgICAgKiBkb20vTm9kZS5oOgorICAgICAgICAoV2ViQ29y
ZTo6Tm9kZTo6b3BhcXVlUm9vdCk6CisgICAgICAgICogZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6dm0pOgor
ICAgICAgICAqIGh0bWwvSFRNTEltYWdlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxJbWFnZUxvYWRlcjo6bm90aWZ5RmluaXNoZWQpOgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlh
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpwYXVzZUFm
dGVyRGV0YWNoZWRUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmVu
c3VyZUlzb2xhdGVkV29ybGQpOgorICAgICAgICAqIGh0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwbHVnSW5JbWFnZUVsZW1lbnRJc29sYXRlZFdvcmxk
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjp2bSk6CisgICAgICAgICogaW5zcGVjdG9y
L1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlU2NyaXB0
RGVidWdTZXJ2ZXI6OlBhZ2VTY3JpcHREZWJ1Z1NlcnZlcik6CisgICAgICAgICogcGFnZS9QZXJm
b3JtYW5jZUxvZ2dpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGVyZm9ybWFuY2VMb2dnaW5n
OjptZW1vcnlVc2FnZVN0YXRpc3RpY3MpOgorICAgICAgICAoV2ViQ29yZTo6UGVyZm9ybWFuY2VM
b2dnaW5nOjpqYXZhU2NyaXB0T2JqZWN0Q291bnRzKToKKyAgICAgICAgKiBwYWdlL1Jlc291cmNl
VXNhZ2VUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VVc2FnZVRocmVhZDo6
Y3JlYXRlVGhyZWFkSWZOZWVkZWQpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6cmVwb3J0QXBwcm94aW1hdGVNZW1vcnlD
b3N0KToKKyAgICAgICAgKiB0ZXN0aW5nL01lbW9yeUluZm8uaDoKKyAgICAgICAgKFdlYkNvcmU6
Ok1lbW9yeUluZm86Ok1lbW9yeUluZm8pOgorCiAyMDE2LTEyLTA5ICBEYW5pZWwgQmF0ZXMgIDxk
YWJhdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgcmVmbGVjdGVkIG5vbmNlIGF0dHJpYnV0
ZSB0byBIVE1MIExpbmsgZWxlbWVudCBJREwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZp
c2lvbiAyMDk2NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtMTA3Niw2ICsxMDc2LDcgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIGJpbmRp
bmdzL2pzL0NhY2hlZE1vZHVsZVNjcmlwdC5jcHAKICAgICBiaW5kaW5ncy9qcy9DYWNoZWRNb2R1
bGVTY3JpcHRMb2FkZXIuY3BwCiAgICAgYmluZGluZ3MvanMvQ2FsbGJhY2tGdW5jdGlvbi5jcHAK
KyAgICBiaW5kaW5ncy9qcy9Db21tb25WTS5jcHAKICAgICBiaW5kaW5ncy9qcy9ET01XcmFwcGVy
V29ybGQuY3BwCiAgICAgYmluZGluZ3MvanMvRGljdGlvbmFyeS5jcHAKICAgICBiaW5kaW5ncy9q
cy9HQ0NvbnRyb2xsZXIuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL1NEUFByb2Nlc3Nvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3IuY3BwCShyZXZpc2lvbiAyMDk2NDcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpZiBFTkFCTEUoV0VCX1JUQykKICNpbmNsdWRlICJT
RFBQcm9jZXNzb3IuaCIKIAorI2luY2x1ZGUgIkNvbW1vblZNLmgiCiAjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlNEUFByb2Nlc3NvclNjcmlwdFJl
c291cmNlLmgiCkBAIC00OTUsNyArNDk2LDcgQEAgYm9vbCBTRFBQcm9jZXNzb3I6OmNhbGxTY3Jp
cHQoY29uc3QgU3RyaQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIW1faXNvbGF0
ZWRXb3JsZCkKLSAgICAgICAgbV9pc29sYXRlZFdvcmxkID0gRE9NV3JhcHBlcldvcmxkOjpjcmVh
dGUoSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOworICAgICAgICBtX2lzb2xhdGVkV29ybGQgPSBE
T01XcmFwcGVyV29ybGQ6OmNyZWF0ZShjb21tb25WTSgpKTsKIAogICAgIFNjcmlwdENvbnRyb2xs
ZXImIHNjcmlwdENvbnRyb2xsZXIgPSBkb2N1bWVudC0+ZnJhbWUoKS0+c2NyaXB0KCk7CiAgICAg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEpTQzo6anNDYXN0PEpTRE9NR2xvYmFs
T2JqZWN0Kj4oc2NyaXB0Q29udHJvbGxlci5nbG9iYWxPYmplY3QoKm1faXNvbGF0ZWRXb3JsZCkp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJl
cGxhY2VtZW50Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lu
cy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbQkocmV2aXNpb24gMjA5NjQ3KQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbXBvcnQgIlF1aWNrVGltZVBs
dWdpblJlcGxhY2VtZW50LmgiCiAKKyNpbXBvcnQgIkNvbW1vblZNLmgiCiAjaW1wb3J0ICJFdmVu
dC5oIgogI2ltcG9ydCAiSFRNTFBsdWdJbkVsZW1lbnQuaCIKICNpbXBvcnQgIkhUTUxWaWRlb0Vs
ZW1lbnQuaCIKQEAgLTE0OCw3ICsxNDksNyBAQCBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gUXVp
Y2tUaW1lUGx1Z2luCiAKIERPTVdyYXBwZXJXb3JsZCYgUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1l
bnQ6Omlzb2xhdGVkV29ybGQoKQogewotICAgIHN0YXRpYyBET01XcmFwcGVyV29ybGQmIGlzb2xh
dGVkV29ybGQgPSBET01XcmFwcGVyV29ybGQ6OmNyZWF0ZShKU0RPTVdpbmRvdzo6Y29tbW9uVk0o
KSkubGVha1JlZigpOworICAgIHN0YXRpYyBET01XcmFwcGVyV29ybGQmIGlzb2xhdGVkV29ybGQg
PSBET01XcmFwcGVyV29ybGQ6OmNyZWF0ZShjb21tb25WTSgpKS5sZWFrUmVmKCk7CiAgICAgcmV0
dXJuIGlzb2xhdGVkV29ybGQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwOTY0NykKKysrIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtNDk2LDYgKzQ5Niw4IEBACiAJCTBGNUUyMDA2MThFNzcxRkMwMDNFQzNFNSAvKiBQbGF0
Zm9ybUNBQW5pbWF0aW9uQ29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNUUyMDA1MThFNzcxRkMwMDNFQzNFNSAvKiBQbGF0Zm9ybUNBQW5pbWF0
aW9uQ29jb2EuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjYwNUFFQzE1Rjk0ODQ4MDA0REYwQzAgLyogU2Nyb2xsaW5nQ29uc3RyYWludHMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MDVBRUEx
NUY5NDg0ODAwNERGMEMwIC8qIFNjcm9sbGluZ0NvbnN0cmFpbnRzLmNwcCAqLzsgfTsKIAkJMEY2
MDVBRUQxNUY5NDg0ODAwNERGMEMwIC8qIFNjcm9sbGluZ0NvbnN0cmFpbnRzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYwNUFFQjE1Rjk0ODQ4MDA0
REYwQzAgLyogU2Nyb2xsaW5nQ29uc3RyYWludHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjYwRjMyQjFERkJCMTA3MDA0MTZENkMgLyogQ29t
bW9uVk0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NjBGMzJBMURGQkIxMDQwMDQxNkQ2QyAvKiBDb21tb25WTS5oICovOyB9OworCQkwRjYwRjMyQzFE
RkJCMTBCMDA0MTZENkMgLyogQ29tbW9uVk0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MEYzMjkxREZCQjEwNDAwNDE2RDZDIC8qIENvbW1vblZN
LmNwcCAqLzsgfTsKIAkJMEY2MzgzREQxODYxNUIyOTAwM0U1REI1IC8qIFRocmVhZGVkU2Nyb2xs
aW5nVHJlZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjYzODNEQjE4NjE1QjI5MDAzRTVEQjUgLyogVGhyZWFkZWRTY3JvbGxpbmdUcmVlLmNwcCAq
LzsgfTsKIAkJMEY2MzgzREUxODYxNUIyOTAwM0U1REI1IC8qIFRocmVhZGVkU2Nyb2xsaW5nVHJl
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2Mzgz
REMxODYxNUIyOTAwM0U1REI1IC8qIFRocmVhZGVkU2Nyb2xsaW5nVHJlZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNkExMkJEMUEwMDkyMzcw
MEM2REU3MiAvKiBEZWJ1Z1BhZ2VPdmVybGF5cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZBMTJCQjFBMDA5MjM3MDBDNkRFNzIgLyogRGVidWdQ
YWdlT3ZlcmxheXMuY3BwICovOyB9OwpAQCAtNzQ5NCw2ICs3NDk2LDggQEAKIAkJMEY1RTIwMDUx
OEU3NzFGQzAwM0VDM0U1IC8qIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2EuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MDVBRUExNUY5NDg0ODAwNERGMEMwIC8qIFNjcm9s
bGluZ0NvbnN0cmFpbnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNjcm9sbGluZ0NvbnN0cmFpbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY2MDVBRUIxNUY5NDg0ODAwNERGMEMwIC8qIFNjcm9sbGluZ0NvbnN0cmFpbnRzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbGluZ0NvbnN0cmFpbnRzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjBGMzI5MURGQkIxMDQwMDQxNkQ2QyAvKiBDb21t
b25WTS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb21tb25WTS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjBGMzJBMURGQkIxMDQwMDQxNkQ2
QyAvKiBDb21tb25WTS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21tb25W
TS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjYzODNEQjE4NjE1QjI5MDAzRTVE
QjUgLyogVGhyZWFkZWRTY3JvbGxpbmdUcmVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFRocmVhZGVkU2Nyb2xsaW5nVHJlZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGNjM4M0RDMTg2MTVCMjkwMDNFNURCNSAvKiBUaHJlYWRlZFNjcm9sbGlu
Z1RyZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyZWFkZWRTY3JvbGxp
bmdUcmVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNkExMkJCMUEwMDkyMzcw
MEM2REU3MiAvKiBEZWJ1Z1BhZ2VPdmVybGF5cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBEZWJ1Z1BhZ2VPdmVybGF5cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0yMTkxMiw2ICsyMTkxNiw4IEBACiAJCQkJRTMwN0RFQzgxRDgxRTQ0ODAwMTQx
Q0FGIC8qIENhY2hlZE1vZHVsZVNjcmlwdExvYWRlckNsaWVudC5oICovLAogCQkJCUJDRDUzMzYz
MEVENjg0ODkwMDg4NzQ2OCAvKiBDYWNoZWRTY3JpcHRTb3VyY2VQcm92aWRlci5oICovLAogCQkJ
CTkzRjhCMzA2MEEzMDBGRUEwMEY2MUFCOCAvKiBDb2RlR2VuZXJhdG9ySlMucG0gKi8sCisJCQkJ
MEY2MEYzMjkxREZCQjEwNDAwNDE2RDZDIC8qIENvbW1vblZNLmNwcCAqLywKKwkJCQkwRjYwRjMy
QTFERkJCMTA0MDA0MTZENkMgLyogQ29tbW9uVk0uaCAqLywKIAkJCQkzMTJENjdCMDE1MzU2OTFG
MDA1NjNEMEQgLyogRGljdGlvbmFyeS5jcHAgKi8sCiAJCQkJMzE2MDIzRUYxNTMyQzQwQzAwRDUw
RkY0IC8qIERpY3Rpb25hcnkuaCAqLywKIAkJCQlCNTY1NzZFNzE3REE5NEUyMDBBNTZCREMgLyog
RE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQuaCAqLywKQEAgLTI3NTI2LDYgKzI3NTMyLDcgQEAK
IAkJCQlGRDQ1QTk1QjE3NUQ0MUVFMDBDMjFFQzggLyogU2hhcGVJbnRlcnZhbC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRkQ0NUE5NTIxNzVEM0YzRTAwQzIxRUM4IC8qIFNoYXBlT3V0c2lkZUluZm8u
aCBpbiBIZWFkZXJzICovLAogCQkJCUZEMUFGMTUwMTY1NkYxNTEwMEM2RDRGNyAvKiBTaGFwZVZh
bHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjYwRjMyQjFERkJCMTA3MDA0MTZENkMgLyogQ29t
bW9uVk0uaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNEE5NTRFMEI0RURDQ0IwMDJEOEMzQyAvKiBT
aGFyZWRCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QjFGMDJGMTNCMDI1RDIwMEY1MTAz
RiAvKiBTaGFyZWRCdWZmZXJDaHVua1JlYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlF
QTMwOTlFQjc4QzAwNTZFNTgxIC8qIFNoYXJlZFRpbWVyLmggaW4gSGVhZGVycyAqLywKQEAgLTMx
NjMzLDYgKzMxNjQwLDcgQEAKIAkJCQlBMTQ4MzJCMzE4N0Y2MjkxMDBEQTYzQTYgLyogV0FLQ2xp
cFZpZXcubSBpbiBTb3VyY2VzICovLAogCQkJCUExNDgzMkI1MTg3RjYyRkMwMERBNjNBNiAvKiBX
QUtSZXNwb25kZXIubSBpbiBTb3VyY2VzICovLAogCQkJCUExNDgzMkI3MTg3RjYzNkMwMERBNjNB
NiAvKiBXQUtTY3JvbGxWaWV3Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2MEYzMkMxREZCQjEw
QjAwNDE2RDZDIC8qIENvbW1vblZNLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExNDgzMkI5MTg3
RjYzRDUwMERBNjNBNiAvKiBXQUtWaWV3Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTE0ODMyQkMx
ODdGNjQ4RTAwREE2M0E2IC8qIFdBS1dpbmRvdy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUZEN0Yy
OTkxMTNENEMwQ0IwMEFEOTUzNSAvKiBXYXZlU2hhcGVyRFNQS2VybmVsLmNwcCBpbiBTb3VyY2Vz
ICovLApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQ29tbW9uVk0uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0NvbW1vblZNLmNwcAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Db21tb25WTS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29tbW9uVk0u
aCIKKworI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5o
IgorI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKKyNpbmNsdWRlIDxoZWFwL0hlYXBJ
bmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9WTS5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhy
ZWFkLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Vk0qIGdfY29tbW9uVk1Pck51bGw7Citib29sIGdfb3BhcXVlUm9vdFdyaXRlQmFycmllckVuYWJs
ZWQ7CisKK1ZNJiBjb21tb25WTVNsb3coKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisgICAgQVNTRVJUKCFnX2NvbW1vblZNT3JOdWxsKTsKKyAgICAKKyAgICBTY3JpcHRDb250cm9s
bGVyOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CisgICAgZ19jb21tb25WTU9yTnVsbCA9ICZWTTo6
Y3JlYXRlTGVha2VkKExhcmdlSGVhcCkubGVha1JlZigpOworICAgIGdfY29tbW9uVk1Pck51bGwt
PmhlYXAuYWNxdWlyZUFjY2VzcygpOyAvLyBBdCBhbnkgdGltZSwgd2UgbWF5IGRvIHRoaW5ncyB0
aGF0IGFmZmVjdCB0aGUgR0MuCisjaWYgIVBMQVRGT1JNKElPUykKKyAgICBnX2NvbW1vblZNT3JO
dWxsLT5zZXRFeGNsdXNpdmVUaHJlYWQoc3RkOjp0aGlzX3RocmVhZDo6Z2V0X2lkKCkpOworI2Vs
c2UKKyAgICBnX2NvbW1vblZNT3JOdWxsLT5oZWFwLnNldFJ1bkxvb3AoV2ViVGhyZWFkUnVuTG9v
cCgpKTsKKyAgICBnX2NvbW1vblZNT3JOdWxsLT5oZWFwLm1hY2hpbmVUaHJlYWRzKCkuYWRkQ3Vy
cmVudFRocmVhZCgpOworI2VuZGlmCisgICAgCisgICAgZ19jb21tb25WTU9yTnVsbC0+c2V0R2xv
YmFsQ29uc3RSZWRlY2xhcmF0aW9uU2hvdWxkVGhyb3coU2V0dGluZ3M6Omdsb2JhbENvbnN0UmVk
ZWNsYXJhdGlvblNob3VsZFRocm93KCkpOworICAgIGdfY29tbW9uVk1Pck51bGwtPmhlYXAuYWRk
TXV0YXRvclNob3VsZEJlRmVuY2VkQ2FjaGUoZ19vcGFxdWVSb290V3JpdGVCYXJyaWVyRW5hYmxl
ZCk7CisgICAgCisgICAgaW5pdE5vcm1hbFdvcmxkQ2xpZW50RGF0YShnX2NvbW1vblZNT3JOdWxs
KTsKKyAgICAKKyAgICByZXR1cm4gKmdfY29tbW9uVk1Pck51bGw7Cit9CisKK3ZvaWQgd3JpdGVC
YXJyaWVyT3BhcXVlUm9vdFNsb3codm9pZCogcm9vdCkKK3sKKyAgICBpZiAoVk0qIHZtID0gZ19j
b21tb25WTU9yTnVsbCkKKyAgICAgICAgdm0tPmhlYXAud3JpdGVCYXJyaWVyT3BhcXVlUm9vdChy
b290KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9Db21tb25WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0NvbW1vblZNLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvQ29tbW9uVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQor
CituYW1lc3BhY2UgSlNDIHsKK2NsYXNzIFZNOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2V4dGVybiBKU0M6OlZNKiBnX2NvbW1vblZNT3JOdWxsOworZXh0ZXJuIGJvb2wgZ19vcGFxdWVS
b290V3JpdGVCYXJyaWVyRW5hYmxlZDsKKworSlNDOjpWTSYgY29tbW9uVk1TbG93KCk7Cit2b2lk
IHdyaXRlQmFycmllck9wYXF1ZVJvb3RTbG93KHZvaWQqKTsKKworaW5saW5lIEpTQzo6Vk0mIGNv
bW1vblZNKCkKK3sKKyAgICBpZiAoSlNDOjpWTSogcmVzdWx0ID0gZ19jb21tb25WTU9yTnVsbCkK
KyAgICAgICAgcmV0dXJuICpyZXN1bHQ7CisgICAgcmV0dXJuIGNvbW1vblZNU2xvdygpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgordm9pZCB3cml0ZUJhcnJpZXJPcGFxdWVSb290KGNv
bnN0IEZ1bmMmIHJvb3RUaHVuaykKK3sKKyAgICBpZiAoZ19vcGFxdWVSb290V3JpdGVCYXJyaWVy
RW5hYmxlZCkKKyAgICAgICAgd3JpdGVCYXJyaWVyT3BhcXVlUm9vdFNsb3cocm9vdFRodW5rKCkp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmNwcAkocmV2aXNpb24gMjA5NjQ3KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRP
TVdyYXBwZXJXb3JsZC5oIgogCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJKU0RP
TVdpbmRvdy5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJXZWJD
b3JlSlNDbGllbnREYXRhLmgiCkBAIC02OSw3ICs3MCw3IEBAIERPTVdyYXBwZXJXb3JsZCYgbm9y
bWFsV29ybGQoSlNDOjpWTSYgdm0KIERPTVdyYXBwZXJXb3JsZCYgbWFpblRocmVhZE5vcm1hbFdv
cmxkKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIHN0YXRpYyBET01XcmFw
cGVyV29ybGQmIGNhY2hlZE5vcm1hbFdvcmxkID0gbm9ybWFsV29ybGQoSlNET01XaW5kb3c6OmNv
bW1vblZNKCkpOworICAgIHN0YXRpYyBET01XcmFwcGVyV29ybGQmIGNhY2hlZE5vcm1hbFdvcmxk
ID0gbm9ybWFsV29ybGQoY29tbW9uVk0oKSk7CiAgICAgcmV0dXJuIGNhY2hlZE5vcm1hbFdvcmxk
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5j
cHAJKHJldmlzaW9uIDIwOTY0NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29u
dHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJHQ0NvbnRyb2xsZXIuaCIKIAotI2luY2x1ZGUgIkpTRE9NV2lu
ZG93LmgiCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlIDxydW50aW1lL1ZNLmg+CiAj
aW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KICNpbmNsdWRlIDxoZWFwL0hlYXAuaD4KQEAgLTQw
LDggKzQwLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgdm9pZCBjb2xsZWN0KHZv
aWQqKQogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsK
LSAgICBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS5oZWFwLmNvbGxlY3RBbGxHYXJiYWdlKCk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7CisgICAgY29tbW9uVk0oKS5oZWFwLmNv
bGxlY3RBbGxHYXJiYWdlKCk7CiB9CiAKIEdDQ29udHJvbGxlciYgR0NDb250cm9sbGVyOjpzaW5n
bGV0b24oKQpAQCAtNjEsOCArNjEsOCBAQCB2b2lkIEdDQ29udHJvbGxlcjo6Z2FyYmFnZUNvbGxl
Y3RTb29uKCkKICAgICAvLyBvZiB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgdGltZXJzIGluIEphdmFT
Y3JpcHRDb3JlLiBXZSB3b3VsZG4ndCBuZWVkIHRoaXMgaWYgSmF2YVNjcmlwdENvcmUKICAgICAv
LyB1c2VkIGEgdGltZXIgaW1wbGVtZW50YXRpb24gZnJvbSBXVEYgbGlrZSBSdW5Mb29wOjpUaW1l
ci4KICNpZiBVU0UoQ0YpIHx8IFVTRShHTElCKQotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9N
V2luZG93Ojpjb21tb25WTSgpKTsKLSAgICBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS5oZWFwLnJl
cG9ydEFiYW5kb25lZE9iamVjdEdyYXBoKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9u
Vk0oKSk7CisgICAgY29tbW9uVk0oKS5oZWFwLnJlcG9ydEFiYW5kb25lZE9iamVjdEdyYXBoKCk7
CiAjZWxzZQogICAgIGdhcmJhZ2VDb2xsZWN0T25OZXh0UnVuTG9vcCgpOwogI2VuZGlmCkBAIC04
MSw5ICs4MSw5IEBAIHZvaWQgR0NDb250cm9sbGVyOjpnY1RpbWVyRmlyZWQoKQogCiB2b2lkIEdD
Q29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3ROb3coKQogewotICAgIEpTTG9ja0hvbGRlciBsb2Nr
KEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsKLSAgICBpZiAoIUpTRE9NV2luZG93Ojpjb21tb25W
TSgpLmhlYXAuaXNDdXJyZW50VGhyZWFkQnVzeSgpKSB7Ci0gICAgICAgIEpTRE9NV2luZG93Ojpj
b21tb25WTSgpLmhlYXAuY29sbGVjdEFsbEdhcmJhZ2UoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhjb21tb25WTSgpKTsKKyAgICBpZiAoIWNvbW1vblZNKCkuaGVhcC5pc0N1cnJlbnRUaHJlYWRC
dXN5KCkpIHsKKyAgICAgICAgY29tbW9uVk0oKS5oZWFwLmNvbGxlY3RBbGxHYXJiYWdlKCk7CiAg
ICAgICAgIFdURjo6cmVsZWFzZUZhc3RNYWxsb2NGcmVlTWVtb3J5KCk7CiAgICAgfQogfQpAQCAt
OTEsOSArOTEsOSBAQCB2b2lkIEdDQ29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3ROb3coKQogdm9p
ZCBHQ0NvbnRyb2xsZXI6OmdhcmJhZ2VDb2xsZWN0Tm93SWZOb3REb25lUmVjZW50bHkoKQogewog
I2lmIFVTRShDRikgfHwgVVNFKEdMSUIpCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5k
b3c6OmNvbW1vblZNKCkpOwotICAgIGlmICghSlNET01XaW5kb3c6OmNvbW1vblZNKCkuaGVhcC5p
c0N1cnJlbnRUaHJlYWRCdXN5KCkpCi0gICAgICAgIEpTRE9NV2luZG93Ojpjb21tb25WTSgpLmhl
YXAuY29sbGVjdEFsbEdhcmJhZ2VJZk5vdERvbmVSZWNlbnRseSgpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrKGNvbW1vblZNKCkpOworICAgIGlmICghY29tbW9uVk0oKS5oZWFwLmlzQ3VycmVudFRo
cmVhZEJ1c3koKSkKKyAgICAgICAgY29tbW9uVk0oKS5oZWFwLmNvbGxlY3RBbGxHYXJiYWdlSWZO
b3REb25lUmVjZW50bHkoKTsKICNlbHNlCiAgICAgZ2FyYmFnZUNvbGxlY3RTb29uKCk7CiAjZW5k
aWYKQEAgLTExMywxOSArMTEzLDE5IEBAIHZvaWQgR0NDb250cm9sbGVyOjpnYXJiYWdlQ29sbGVj
dE9uQWx0ZXIKIAogdm9pZCBHQ0NvbnRyb2xsZXI6OnNldEphdmFTY3JpcHRHYXJiYWdlQ29sbGVj
dG9yVGltZXJFbmFibGVkKGJvb2wgZW5hYmxlKQogewotICAgIEpTRE9NV2luZG93Ojpjb21tb25W
TSgpLmhlYXAuc2V0R2FyYmFnZUNvbGxlY3Rpb25UaW1lckVuYWJsZWQoZW5hYmxlKTsKKyAgICBj
b21tb25WTSgpLmhlYXAuc2V0R2FyYmFnZUNvbGxlY3Rpb25UaW1lckVuYWJsZWQoZW5hYmxlKTsK
IH0KIAogdm9pZCBHQ0NvbnRyb2xsZXI6OmRlbGV0ZUFsbENvZGUoRGVsZXRlQWxsQ29kZUVmZm9y
dCBlZmZvcnQpCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZN
KCkpOwotICAgIEpTRE9NV2luZG93Ojpjb21tb25WTSgpLmRlbGV0ZUFsbENvZGUoZWZmb3J0KTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9jayhjb21tb25WTSgpKTsKKyAgICBjb21tb25WTSgpLmRlbGV0
ZUFsbENvZGUoZWZmb3J0KTsKIH0KIAogdm9pZCBHQ0NvbnRyb2xsZXI6OmRlbGV0ZUFsbExpbmtl
ZENvZGUoRGVsZXRlQWxsQ29kZUVmZm9ydCBlZmZvcnQpCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxv
Y2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOwotICAgIEpTRE9NV2luZG93Ojpjb21tb25WTSgp
LmRlbGV0ZUFsbExpbmtlZENvZGUoZWZmb3J0KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhjb21t
b25WTSgpKTsKKyAgICBjb21tb25WTSgpLmRlbGV0ZUFsbExpbmtlZENvZGUoZWZmb3J0KTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAkocmV2aXNpb24gMjA5
NjQ3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuaCIKIAorI2luY2x1ZGUgIkNv
bW1vblZNLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2Rl
LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKQEAgLTY5LDcgKzcwLDcgQEAgU3RyaW5nIEpTQ3VzdG9t
WFBhdGhOU1Jlc29sdmVyOjpsb29rdXBOYQogewogICAgIEFTU0VSVChtX2N1c3RvbVJlc29sdmVy
KTsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7
CisgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7CiAKICAgICBFeGVjU3RhdGUqIGV4
ZWMgPSBtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogICAgICAgICAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkocmV2aXNpb24gMjA5NjQ3
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogCiAj
aW5jbHVkZSAiQ2FjaGVkU2NyaXB0LmgiCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRl
ICJET01Db25zdHJ1Y3RvcldpdGhEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUu
aCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaCIKQEAgLTYxLDcgKzYyLDcg
QEAgU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKAogCiB2b2lkIGFkZElt
cHVyZVByb3BlcnR5KGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKQogewotICAgIEpT
RE9NV2luZG93Ojpjb21tb25WTSgpLmFkZEltcHVyZVByb3BlcnR5KHByb3BlcnR5TmFtZSk7Cisg
ICAgY29tbW9uVk0oKS5hZGRJbXB1cmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpOwogfQogCiBKU1Zh
bHVlIGpzT3duZWRTdHJpbmdPck51bGwoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5j
cHAJKHJldmlzaW9uIDIwOTY0NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
V2luZG93QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1
ZGUgIkFjdGl2ZURPTUNhbGxiYWNrTWljcm90YXNrLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCisj
aW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJG
cmFtZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKQEAgLTI0NSwzMCArMjQ2
LDYgQEAgSlNET01XaW5kb3dTaGVsbCogSlNET01XaW5kb3dCYXNlOjpzaGVsbAogICAgIHJldHVy
biBtX3NoZWxsOwogfQogCi1WTSYgSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpCi17Ci0gICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIHN0YXRpYyBWTSogdm0gPSBudWxscHRyOwot
ICAgIGlmICghdm0pIHsKLSAgICAgICAgU2NyaXB0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZVRocmVh
ZGluZygpOwotICAgICAgICB2bSA9ICZWTTo6Y3JlYXRlTGVha2VkKExhcmdlSGVhcCkubGVha1Jl
ZigpOwotICAgICAgICB2bS0+aGVhcC5hY3F1aXJlQWNjZXNzKCk7IC8vIEF0IGFueSB0aW1lLCB3
ZSBtYXkgZG8gdGhpbmdzIHRoYXQgYWZmZWN0IHRoZSBHQy4KLSNpZiAhUExBVEZPUk0oSU9TKQot
ICAgICAgICB2bS0+c2V0RXhjbHVzaXZlVGhyZWFkKHN0ZDo6dGhpc190aHJlYWQ6OmdldF9pZCgp
KTsKLSNlbHNlCi0gICAgICAgIHZtLT5oZWFwLnNldFJ1bkxvb3AoV2ViVGhyZWFkUnVuTG9vcCgp
KTsKLSAgICAgICAgdm0tPmhlYXAubWFjaGluZVRocmVhZHMoKS5hZGRDdXJyZW50VGhyZWFkKCk7
Ci0jZW5kaWYKLQotICAgICAgICB2bS0+c2V0R2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9uU2hvdWxk
VGhyb3coU2V0dGluZ3M6Omdsb2JhbENvbnN0UmVkZWNsYXJhdGlvblNob3VsZFRocm93KCkpOwot
Ci0gICAgICAgIGluaXROb3JtYWxXb3JsZENsaWVudERhdGEodm0pOwotICAgIH0KLQotICAgIHJl
dHVybiAqdm07Ci19Ci0KIC8vIEpTRE9NR2xvYmFsT2JqZWN0KiBpcyBpZ25vcmVkLCBhY2Nlc3Np
bmcgYSB3aW5kb3cgaW4gYW55IGNvbnRleHQgd2lsbAogLy8gdXNlIHRoYXQgRE9NV2luZG93J3Mg
cHJvdG90eXBlIGNoYWluLgogSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9i
YWxPYmplY3QqLCBET01XaW5kb3cmIGRvbVdpbmRvdykKQEAgLTMwOSw3ICsyODYsNyBAQCBKU0RP
TVdpbmRvdyogdG9KU0RPTVdpbmRvdyhKU1ZhbHVlIHZhbHVlCiAKIHZvaWQgSlNET01XaW5kb3dC
YXNlOjpmaXJlRnJhbWVDbGVhcmVkV2F0Y2hwb2ludHNGb3JXaW5kb3coRE9NV2luZG93KiB3aW5k
b3cpCiB7Ci0gICAgSlNDOjpWTSYgdm0gPSBKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCk7Cisg
ICAgSlNDOjpWTSYgdm0gPSBjb21tb25WTSgpOwogICAgIEpTVk1DbGllbnREYXRhKiBjbGllbnRE
YXRhID0gc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKICAgICBW
ZWN0b3I8UmVmPERPTVdyYXBwZXJXb3JsZD4+IHdyYXBwZXJXb3JsZHM7CiAgICAgY2xpZW50RGF0
YS0+Z2V0QWxsV29ybGRzKHdyYXBwZXJXb3JsZHMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmgJKHJldmlzaW9uIDIwOTY0NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC02OSw3ICs2OSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBKU0RPTVdpbmRv
d1NoZWxsKiBzaGVsbCgpIGNvbnN0OwogCi0gICAgICAgIHN0YXRpYyBKU0M6OlZNJiBjb21tb25W
TSgpOwogICAgICAgICBzdGF0aWMgdm9pZCBmaXJlRnJhbWVDbGVhcmVkV2F0Y2hwb2ludHNGb3JX
aW5kb3coRE9NV2luZG93Kik7CiAgICAgICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
OjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuY3BwCShyZXZpc2lvbiAyMDk2NDcpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkpTRE9NV2luZG93U2hlbGwuaCIKIAorI2luY2x1ZGUgIkNvbW1vblZNLmgiCiAjaW5jbHVkZSAi
RnJhbWUuaCIKICNpbmNsdWRlICJHQ0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJKU0RPTVdpbmRv
dy5oIgpAQCAtNzksNyArODAsNyBAQCB2b2lkIEpTRE9NV2luZG93U2hlbGw6OnNldFdpbmRvdyhS
ZWZQdHI8CiAgICAgLy8gd2hlbiB3ZSBhbGxvY2F0ZSB0aGUgZ2xvYmFsIG9iamVjdC4gKE9uY2Ug
dGhlIGdsb2JhbCBvYmplY3QgaXMgZnVsbHkKICAgICAvLyBjb25zdHJ1Y3RlZCwgaXQgY2FuIG1h
cmsgaXRzIG93biBwcm90b3R5cGUuKQogICAgIAotICAgIFZNJiB2bSA9IEpTRE9NV2luZG93Ojpj
b21tb25WTSgpOworICAgIFZNJiB2bSA9IGNvbW1vblZNKCk7CiAgICAgU3RydWN0dXJlKiBwcm90
b3R5cGVTdHJ1Y3R1cmUgPSBKU0RPTVdpbmRvd1Byb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZt
LCAwLCBqc051bGwoKSk7CiAgICAgU3Ryb25nPEpTRE9NV2luZG93UHJvdG90eXBlPiBwcm90b3R5
cGUodm0sIEpTRE9NV2luZG93UHJvdG90eXBlOjpjcmVhdGUodm0sIDAsIHByb3RvdHlwZVN0cnVj
dHVyZSkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20u
aAkocmV2aXNpb24gMjA5NjQ3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2Rl
Q3VzdG9tLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDEyICs2NSw3IEBAIGlubGluZSB2b2lkIHdp
bGxDcmVhdGVQb3NzaWJseU9ycGhhbmVkVHIKIAogaW5saW5lIHZvaWQqIHJvb3QoTm9kZSogbm9k
ZSkKIHsKLSAgICBpZiAobm9kZS0+aW5Eb2N1bWVudCgpKQotICAgICAgICByZXR1cm4gJm5vZGUt
PmRvY3VtZW50KCk7Ci0KLSAgICB3aGlsZSAobm9kZS0+cGFyZW50T3JTaGFkb3dIb3N0Tm9kZSgp
KQotICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50T3JTaGFkb3dIb3N0Tm9kZSgpOwotICAgIHJl
dHVybiBub2RlOworICAgIHJldHVybiBub2RlLT5vcGFxdWVSb290KCk7CiB9CiAKIGlubGluZSB2
b2lkKiByb290KE5vZGUmIG5vZGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHRDYWNoZWRGcmFtZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdENhY2hlZEZyYW1lRGF0YS5jcHAJKHJldmlzaW9uIDIwOTY0NykKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhY2hlZEZyYW1lRGF0YS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJTY3JpcHRDYWNoZWRGcmFtZURhdGEuaCIKIAorI2luY2x1ZGUgIkNvbW1vblZNLmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkdDQ29u
dHJvbGxlci5oIgpAQCAtNDksNyArNTAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNjcmlw
dENhY2hlZEZyYW1lRGF0YTo6U2NyaXB0Q2FjaGVkRnJhbWVEYXRhKEZyYW1lJiBmcmFtZSkKIHsK
LSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAg
IEpTTG9ja0hvbGRlciBsb2NrKGNvbW1vblZNKCkpOwogCiAgICAgU2NyaXB0Q29udHJvbGxlciYg
c2NyaXB0Q29udHJvbGxlciA9IGZyYW1lLnNjcmlwdCgpOwogICAgIFZlY3RvcjxKU0M6OlN0cm9u
ZzxKU0RPTVdpbmRvd1NoZWxsPj4gd2luZG93U2hlbGxzID0gc2NyaXB0Q29udHJvbGxlci53aW5k
b3dTaGVsbHMoKTsKQEAgLTcxLDcgKzcyLDcgQEAgU2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjp+U2Ny
aXB0Q2FjaGVkRnJhbQogCiB2b2lkIFNjcmlwdENhY2hlZEZyYW1lRGF0YTo6cmVzdG9yZShGcmFt
ZSYgZnJhbWUpCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21t
b25WTSgpKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhjb21tb25WTSgpKTsKIAogICAgIFBhZ2Uq
IHBhZ2UgPSBmcmFtZS5wYWdlKCk7CiAgICAgU2NyaXB0Q29udHJvbGxlciYgc2NyaXB0Q29udHJv
bGxlciA9IGZyYW1lLnNjcmlwdCgpOwpAQCAtMTA2LDcgKzEwNyw3IEBAIHZvaWQgU2NyaXB0Q2Fj
aGVkRnJhbWVEYXRhOjpjbGVhcigpCiAgICAgaWYgKG1fd2luZG93cy5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29t
bW9uVk0oKSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7CiAgICAgbV93aW5k
b3dzLmNsZWFyKCk7CiAgICAgR0NDb250cm9sbGVyOjpzaW5nbGV0b24oKS5nYXJiYWdlQ29sbGVj
dFNvb24oKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRy
b2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyMDk2NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMs
NyBAQAogCiAjaW5jbHVkZSAiQnJpZGdlSlNDLmgiCiAjaW5jbHVkZSAiQ2FjaGVkTW9kdWxlU2Ny
aXB0LmgiCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJDb250ZW50U2VjdXJpdHlQ
b2xpY3kuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkV2ZW50Lmgi
CkBAIC0xMDUsNyArMTA2LDcgQEAgU2NyaXB0Q29udHJvbGxlcjo6flNjcmlwdENvbnRyb2xsZXIo
KQogICAgIGRpc2Nvbm5lY3RQbGF0Zm9ybVNjcmlwdE9iamVjdHMoKTsKIAogICAgIGlmIChtX2Nh
Y2hlYWJsZUJpbmRpbmdSb290T2JqZWN0KSB7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKEpT
RE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGNv
bW1vblZNKCkpOwogICAgICAgICBtX2NhY2hlYWJsZUJpbmRpbmdSb290T2JqZWN0LT5pbnZhbGlk
YXRlKCk7CiAgICAgICAgIG1fY2FjaGVhYmxlQmluZGluZ1Jvb3RPYmplY3QgPSBudWxscHRyOwog
ICAgIH0KQEAgLTI3MSw3ICsyNzIsNyBAQCBKU0M6OkpTVmFsdWUgU2NyaXB0Q29udHJvbGxlcjo6
ZXZhbHVhdGVNCiAKIFJlZjxET01XcmFwcGVyV29ybGQ+IFNjcmlwdENvbnRyb2xsZXI6OmNyZWF0
ZVdvcmxkKCkKIHsKLSAgICByZXR1cm4gRE9NV3JhcHBlcldvcmxkOjpjcmVhdGUoSlNET01XaW5k
b3c6OmNvbW1vblZNKCkpOworICAgIHJldHVybiBET01XcmFwcGVyV29ybGQ6OmNyZWF0ZShjb21t
b25WTSgpKTsKIH0KIAogVmVjdG9yPEpTQzo6U3Ryb25nPEpTRE9NV2luZG93U2hlbGw+PiBTY3Jp
cHRDb250cm9sbGVyOjp3aW5kb3dTaGVsbHMoKQpAQCAtMjgzLDcgKzI4NCw3IEBAIFZlY3RvcjxK
U0M6OlN0cm9uZzxKU0RPTVdpbmRvd1NoZWxsPj4gU2MKIAogdm9pZCBTY3JpcHRDb250cm9sbGVy
OjpnZXRBbGxXb3JsZHMoVmVjdG9yPFJlZjxET01XcmFwcGVyV29ybGQ+PiYgd29ybGRzKQogewot
ICAgIHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4oSlNET01XaW5kb3c6OmNvbW1vblZNKCku
Y2xpZW50RGF0YSktPmdldEFsbFdvcmxkcyh3b3JsZHMpOworICAgIHN0YXRpY19jYXN0PEpTVk1D
bGllbnREYXRhKj4oY29tbW9uVk0oKS5jbGllbnREYXRhKS0+Z2V0QWxsV29ybGRzKHdvcmxkcyk7
CiB9CiAKIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJXaW5kb3dTaGVsbChET01XaW5kb3cq
IG5ld0RPTVdpbmRvdywgYm9vbCBnb2luZ0ludG9QYWdlQ2FjaGUpCkBAIC0yOTEsNyArMjkyLDcg
QEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhcldpbmRvd1NoZWxsKAogICAgIGlmIChtX3dp
bmRvd1NoZWxscy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTTG9ja0hvbGRl
ciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgSlNMb2NrSG9sZGVyIGxv
Y2soY29tbW9uVk0oKSk7CiAKICAgICBWZWN0b3I8SlNDOjpTdHJvbmc8SlNET01XaW5kb3dTaGVs
bD4+IHdpbmRvd1NoZWxscyA9IHRoaXMtPndpbmRvd1NoZWxscygpOwogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgd2luZG93U2hlbGxzLnNpemUoKTsgKytpKSB7CkBAIC00OTYsNyArNDk3LDcg
QEAgQmluZGluZ3M6OlJvb3RPYmplY3QqIFNjcmlwdENvbnRyb2xsZXI6OgogICAgICAgICByZXR1
cm4gMDsKIAogICAgIGlmICghbV9jYWNoZWFibGVCaW5kaW5nUm9vdE9iamVjdCkgewotICAgICAg
ICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgICAg
ICBKU0xvY2tIb2xkZXIgbG9jayhjb21tb25WTSgpKTsKICAgICAgICAgbV9jYWNoZWFibGVCaW5k
aW5nUm9vdE9iamVjdCA9IEJpbmRpbmdzOjpSb290T2JqZWN0OjpjcmVhdGUoMCwgZ2xvYmFsT2Jq
ZWN0KHBsdWdpbldvcmxkKCkpKTsKICAgICB9CiAgICAgcmV0dXJuIG1fY2FjaGVhYmxlQmluZGlu
Z1Jvb3RPYmplY3QuZ2V0KCk7CkBAIC01MDgsNyArNTA5LDcgQEAgQmluZGluZ3M6OlJvb3RPYmpl
Y3QqIFNjcmlwdENvbnRyb2xsZXI6OgogICAgICAgICByZXR1cm4gMDsKIAogICAgIGlmICghbV9i
aW5kaW5nUm9vdE9iamVjdCkgewotICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRv
d0Jhc2U6OmNvbW1vblZNKCkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhjb21tb25WTSgp
KTsKICAgICAgICAgbV9iaW5kaW5nUm9vdE9iamVjdCA9IEJpbmRpbmdzOjpSb290T2JqZWN0Ojpj
cmVhdGUoMCwgZ2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpKTsKICAgICB9CiAgICAgcmV0dXJu
IG1fYmluZGluZ1Jvb3RPYmplY3QuZ2V0KCk7CkBAIC01MzksNyArNTQwLDcgQEAgdm9pZCBTY3Jp
cHRDb250cm9sbGVyOjpjb2xsZWN0SXNvbGF0ZWRDbwogTlBPYmplY3QqIFNjcmlwdENvbnRyb2xs
ZXI6OndpbmRvd1NjcmlwdE5QT2JqZWN0KCkKIHsKICAgICBpZiAoIW1fd2luZG93U2NyaXB0TlBP
YmplY3QpIHsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21t
b25WTSgpKTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7CiAgICAgICAg
IGlmIChjYW5FeGVjdXRlU2NyaXB0cyhOb3RBYm91dFRvRXhlY3V0ZVNjcmlwdCkpIHsKICAgICAg
ICAgICAgIC8vIEphdmFTY3JpcHQgaXMgZW5hYmxlZCwgc28gdGhlcmUgaXMgYSBKYXZhU2NyaXB0
IHdpbmRvdyBvYmplY3QuCiAgICAgICAgICAgICAvLyBSZXR1cm4gYW4gTlBPYmplY3QgYm91bmQg
dG8gdGhlIHdpbmRvdyBvYmplY3QuCkBAIC01NzQsNyArNTc1LDcgQEAgSlNPYmplY3QqIFNjcmlw
dENvbnRyb2xsZXI6OmpzT2JqZWN0Rm9yUAogICAgIGlmICghY2FuRXhlY3V0ZVNjcmlwdHMoTm90
QWJvdXRUb0V4ZWN1dGVTY3JpcHQpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIEpTTG9ja0hv
bGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2soY29tbW9uVk0oKSk7CiAKICAgICAvLyBDcmVhdGUgYSBKU09iamVjdCBib3VuZCB0byB0
aGlzIGVsZW1lbnQKICAgICBKU0RPTVdpbmRvdyogZ2xvYmFsT2JqID0gZ2xvYmFsT2JqZWN0KHBs
dWdpbldvcmxkKCkpOwpAQCAtNjExLDcgKzYxMiw3IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6
Y2xlYW51cFNjcmlwdE9iamUKIAogdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhclNjcmlwdE9i
amVjdHMoKQogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9u
Vk0oKSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7CiAKICAgICBSb290T2Jq
ZWN0TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Jvb3RPYmplY3RzLmVuZCgpOwogICAgIGZv
ciAoUm9vdE9iamVjdE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jvb3RPYmplY3RzLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nj
cmlwdENvbnRyb2xsZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0Q29udHJvbGxlck1hYy5tbQkocmV2aXNpb24gMjA5NjQ3KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlck1hYy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMzAsNiArMzAsNyBAQAogI2ltcG9ydCAiU2NyaXB0Q29udHJvbGxlci5oIgogCiAjaW1w
b3J0ICJCcmlkZ2VKU0MuaCIKKyNpbXBvcnQgIkNvbW1vblZNLmgiCiAjaW1wb3J0ICJET01XaW5k
b3cuaCIKICNpbXBvcnQgIkZyYW1lLmgiCiAjaW1wb3J0ICJGcmFtZUxvYWRlci5oIgpAQCAtMTAw
LDcgKzEwMSw3IEBAIFdlYlNjcmlwdE9iamVjdCAqU2NyaXB0Q29udHJvbGxlcjo6d2luZG8KICAg
ICAgICAgcmV0dXJuIG5pbDsKIAogICAgIGlmICghbV93aW5kb3dTY3JpcHRPYmplY3QpIHsKLSAg
ICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkp
OworICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGNvbW1vblZNKCkpOwogICAgICAgICBK
U0M6OkJpbmRpbmdzOjpSb290T2JqZWN0KiByb290ID0gYmluZGluZ1Jvb3RPYmplY3QoKTsKICAg
ICAgICAgbV93aW5kb3dTY3JpcHRPYmplY3QgPSBbV2ViU2NyaXB0T2JqZWN0IHNjcmlwdE9iamVj
dEZvckpTT2JqZWN0OnRvUmVmKHdpbmRvd1NoZWxsKHBsdWdpbldvcmxkKCkpKSBvcmlnaW5Sb290
T2JqZWN0OnJvb3Qgcm9vdE9iamVjdDpyb290XTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vQ29sbGVjdGlvbkluZGV4Q2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9Db2xsZWN0aW9uSW5kZXhDYWNoZS5jcHAJKHJldmlzaW9uIDIwOTY0NykKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9Db2xsZWN0aW9uSW5kZXhDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDE0ICsyNiwxNSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNvbGxl
Y3Rpb25JbmRleENhY2hlLmgiCiAKKyNpbmNsdWRlICJDb21tb25WTS5oIgogI2luY2x1ZGUgIkRP
TVdpbmRvdy5oIgotI2luY2x1ZGUgIkpTRE9NV2luZG93QmFzZS5oIgorI2luY2x1ZGUgIkpTRE9N
QmluZGluZy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgcmVwb3J0RXh0cmFNZW1v
cnlBbGxvY2F0ZWRGb3JDb2xsZWN0aW9uSW5kZXhDYWNoZShzaXplX3QgY29zdCkKIHsKLSAgICBK
U0M6OlZNJiB2bSA9IEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKTsKKyAgICBKU0M6OlZNJiB2
bSA9IGNvbW1vblZNKCk7CiAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAgICAgLy8g
RklYTUU6IEFkb3B0IHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCwgYW5kIHN3aXRjaCB0byByZXBv
cnRFeHRyYU1lbW9yeUFsbG9jYXRlZC4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQyNTk1CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVy
Tm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUu
Y3BwCShyZXZpc2lvbiAyMDk2NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9k
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5
OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0
aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJr
IE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMsIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOSw2ICsyOSw3
IEBACiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAjaW5j
bHVkZSAiQ2xhc3NDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRl
ICJDb250YWluZXJOb2RlQWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgIkVkaXRvci5oIgogI2luY2x1
ZGUgIkV2ZW50TmFtZXMuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2Rl
QWxnb3JpdGhtcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5l
ck5vZGVBbGdvcml0aG1zLmNwcAkocmV2aXNpb24gMjA5NjQ3KQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiAr
MjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNvbnRhaW5lck5vZGVBbGdv
cml0aG1zLmgiCiAKKyNpbmNsdWRlICJDb21tb25WTS5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZU93
bmVyRWxlbWVudC5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgogI2lu
Y2x1ZGUgIk5vRXZlbnREaXNwYXRjaEFzc2VydGlvbi5oIgpAQCAtMzMsMTAgKzM0LDEwIEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBub3RpZnlOb2RlSW5zZXJ0ZWRJbnRvVHJlZShD
b250YWluZXJOb2RlJiBpbnNlcnRpb25Qb2ludCwgQ29udGFpbmVyTm9kZSYsIE5vZGVWZWN0b3Im
IHBvc3RJbnNlcnRpb25Ob3RpZmljYXRpb25UYXJnZXRzKTsKLXZvaWQgbm90aWZ5Tm9kZUluc2Vy
dGVkSW50b0RvY3VtZW50KENvbnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50LCBOb2RlJiwgTm9k
ZVZlY3RvciYgcG9zdEluc2VydGlvbk5vdGlmaWNhdGlvblRhcmdldHMpOwotdm9pZCBub3RpZnlO
b2RlUmVtb3ZlZEZyb21UcmVlKENvbnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50LCBDb250YWlu
ZXJOb2RlJik7Ci12b2lkIG5vdGlmeU5vZGVSZW1vdmVkRnJvbURvY3VtZW50KENvbnRhaW5lck5v
ZGUmIGluc2VydGlvblBvaW50LCBOb2RlJik7CitzdGF0aWMgdm9pZCBub3RpZnlOb2RlSW5zZXJ0
ZWRJbnRvVHJlZShDb250YWluZXJOb2RlJiBpbnNlcnRpb25Qb2ludCwgQ29udGFpbmVyTm9kZSYs
IE5vZGVWZWN0b3ImIHBvc3RJbnNlcnRpb25Ob3RpZmljYXRpb25UYXJnZXRzKTsKK3N0YXRpYyB2
b2lkIG5vdGlmeU5vZGVJbnNlcnRlZEludG9Eb2N1bWVudChDb250YWluZXJOb2RlJiBpbnNlcnRp
b25Qb2ludCwgTm9kZSYsIE5vZGVWZWN0b3ImIHBvc3RJbnNlcnRpb25Ob3RpZmljYXRpb25UYXJn
ZXRzKTsKK3N0YXRpYyB2b2lkIG5vdGlmeU5vZGVSZW1vdmVkRnJvbVRyZWUoQ29udGFpbmVyTm9k
ZSYgaW5zZXJ0aW9uUG9pbnQsIENvbnRhaW5lck5vZGUmKTsKK3N0YXRpYyB2b2lkIG5vdGlmeU5v
ZGVSZW1vdmVkRnJvbURvY3VtZW50KENvbnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50LCBOb2Rl
Jik7CiAKIHN0YXRpYyB2b2lkIG5vdGlmeURlc2NlbmRhbnRJbnNlcnRlZEludG9Eb2N1bWVudChD
b250YWluZXJOb2RlJiBpbnNlcnRpb25Qb2ludCwgQ29udGFpbmVyTm9kZSYgbm9kZSwgTm9kZVZl
Y3RvciYgcG9zdEluc2VydGlvbk5vdGlmaWNhdGlvblRhcmdldHMpCiB7CkBAIC0xMDEsNiArMTAy
LDggQEAgdm9pZCBub3RpZnlDaGlsZE5vZGVJbnNlcnRlZChDb250YWluZXJObwogICAgICAgICBu
b3RpZnlOb2RlSW5zZXJ0ZWRJbnRvRG9jdW1lbnQoaW5zZXJ0aW9uUG9pbnQsIG5vZGUsIHBvc3RJ
bnNlcnRpb25Ob3RpZmljYXRpb25UYXJnZXRzKTsKICAgICBlbHNlIGlmIChpczxDb250YWluZXJO
b2RlPihub2RlKSkKICAgICAgICAgbm90aWZ5Tm9kZUluc2VydGVkSW50b1RyZWUoaW5zZXJ0aW9u
UG9pbnQsIGRvd25jYXN0PENvbnRhaW5lck5vZGU+KG5vZGUpLCBwb3N0SW5zZXJ0aW9uTm90aWZp
Y2F0aW9uVGFyZ2V0cyk7CisKKyAgICB3cml0ZUJhcnJpZXJPcGFxdWVSb290KFsmaW5zZXJ0aW9u
UG9pbnRdICgpIC0+IHZvaWQqIHsgcmV0dXJuIGluc2VydGlvblBvaW50Lm9wYXF1ZVJvb3QoKTsg
fSk7CiB9CiAKIHZvaWQgbm90aWZ5Tm9kZVJlbW92ZWRGcm9tRG9jdW1lbnQoQ29udGFpbmVyTm9k
ZSYgaW5zZXJ0aW9uUG9pbnQsIE5vZGUmIG5vZGUpCkBAIC0xNTIsNiArMTU1LDggQEAgdm9pZCBu
b3RpZnlOb2RlUmVtb3ZlZEZyb21UcmVlKENvbnRhaW5lcgogCiB2b2lkIG5vdGlmeUNoaWxkTm9k
ZVJlbW92ZWQoQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQsIE5vZGUmIGNoaWxkKQogewor
ICAgIHdyaXRlQmFycmllck9wYXF1ZVJvb3QoWyZjaGlsZF0gKCkgLT4gdm9pZCogeyByZXR1cm4g
JmNoaWxkOyB9KTsKKwogICAgIGlmICghY2hpbGQuaW5Eb2N1bWVudCgpKSB7CiAgICAgICAgIGlm
IChpczxDb250YWluZXJOb2RlPihjaGlsZCkpCiAgICAgICAgICAgICBub3RpZnlOb2RlUmVtb3Zl
ZEZyb21UcmVlKGluc2VydGlvblBvaW50LCBkb3duY2FzdDxDb250YWluZXJOb2RlPihjaGlsZCkp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAyMDk2NDcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3
IEBACiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAjaW5j
bHVkZSAiQ29tbWVudC5oIgorI2luY2x1ZGUgIkNvbW1vblZNLmgiCiAjaW5jbHVkZSAiQ29tcG9z
aXRpb25FdmVudC5oIgogI2luY2x1ZGUgIkNvbnRlbnRTZWN1cml0eVBvbGljeS5oIgogI2luY2x1
ZGUgIkNvb2tpZUphci5oIgpAQCAtMjM2NSw3ICsyMzY2LDcgQEAgdm9pZCBEb2N1bWVudDo6cmVz
dW1lRGV2aWNlTW90aW9uQW5kT3JpZQogCiBib29sIERvY3VtZW50OjpzaG91bGRCeXBhc3NNYWlu
V29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3koKSBjb25zdAogewotICAgIEpTQzo6Q2FsbEZyYW1l
KiBjYWxsRnJhbWUgPSBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS50b3BDYWxsRnJhbWU7CisgICAg
SlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNvbW1vblZNKCkudG9wQ2FsbEZyYW1lOwogICAg
IGlmIChjYWxsRnJhbWUgPT0gSlNDOjpDYWxsRnJhbWU6Om5vQ2FsbGVyKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBET01XcmFwcGVyV29ybGQmIGRvbVdyYXBwZXJXb3JsZCA9IGN1cnJl
bnRXb3JsZChjYWxsRnJhbWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMjA5NjQ3
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzg2
LDYgKzIzODYsMTggQEAgYm9vbCBOb2RlOjppblJlbmRlcmVkRG9jdW1lbnQoKSBjb25zdAogICAg
IHJldHVybiBpbkRvY3VtZW50KCkgJiYgZG9jdW1lbnQoKS5oYXNMaXZpbmdSZW5kZXJUcmVlKCk7
CiB9CiAKK3ZvaWQqIE5vZGU6Om9wYXF1ZVJvb3RTbG93KCkgY29uc3QKK3sKKyAgICBjb25zdCBO
b2RlKiBub2RlID0gdGhpczsKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGNvbnN0IE5vZGUqIG5l
eHROb2RlID0gbm9kZS0+cGFyZW50T3JTaGFkb3dIb3N0Tm9kZSgpOworICAgICAgICBpZiAoIW5l
eHROb2RlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIG5vZGUgPSBuZXh0Tm9kZTsKKyAg
ICB9CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PGNvbnN0IHZvaWQq
Pihub2RlKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2lmIEVOQUJMRShUUkVF
X0RFQlVHR0lORykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAkocmV2aXNpb24gMjA5NjQ3KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjY2LDYgKzI2Niw4IEBAIHB1
YmxpYzoKICAgICAgICAgYm9vbCBjb21wb3NlZDsKICAgICB9OwogICAgIE5vZGUmIGdldFJvb3RO
b2RlKGNvbnN0IEdldFJvb3ROb2RlT3B0aW9ucyYpIGNvbnN0OworICAgIAorICAgIHZvaWQqIG9w
YXF1ZVJvb3QoKSBjb25zdDsKIAogICAgIC8vIFVzZSB3aGVuIGl0J3MgZ3VhcmFudGVlZCB0byB0
aGF0IHNoYWRvd0hvc3QgaXMgbnVsbC4KICAgICBDb250YWluZXJOb2RlKiBwYXJlbnROb2RlR3Vh
cmFudGVlZEhvc3RGcmVlKCkgY29uc3Q7CkBAIC02NzEsNiArNjczLDggQEAgcHJpdmF0ZToKICAg
ICBIYXNoU2V0PE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24qPiogdHJhbnNpZW50TXV0YXRp
b25PYnNlcnZlclJlZ2lzdHJ5KCk7CiAKICAgICB2b2lkIGFkanVzdFN0eWxlVmFsaWRpdHkoU3R5
bGU6OlZhbGlkaXR5LCBTdHlsZTo6SW52YWxpZGF0aW9uTW9kZSk7CisgICAgCisgICAgdm9pZCog
b3BhcXVlUm9vdFNsb3coKSBjb25zdDsKIAogICAgIGludCBtX3JlZkNvdW50OwogICAgIG11dGFi
bGUgdWludDMyX3QgbV9ub2RlRmxhZ3M7CkBAIC03NTcsNiArNzYxLDE1IEBAIGlubGluZSBDb250
YWluZXJOb2RlKiBOb2RlOjpwYXJlbnROb2RlKCkKICAgICByZXR1cm4gbV9wYXJlbnROb2RlOwog
fQogCitpbmxpbmUgdm9pZCogTm9kZTo6b3BhcXVlUm9vdCgpIGNvbnN0Cit7CisgICAgLy8gRklY
TUU6IFBvc3NpYmxlIHJhY2U/CisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2NTcxMworICAgIGlmIChpbkRvY3VtZW50KCkpCisgICAgICAgIHJldHVybiAm
ZG9jdW1lbnQoKTsKKyAgICByZXR1cm4gb3BhcXVlUm9vdFNsb3coKTsKK30KKwogaW5saW5lIENv
bnRhaW5lck5vZGUqIE5vZGU6OnBhcmVudE5vZGVHdWFyYW50ZWVkSG9zdEZyZWUoKSBjb25zdAog
ewogICAgIEFTU0VSVCghaXNTaGFkb3dSb290KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAkocmV2aXNpb24gMjA5NjQ3KQorKysgU291
cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgog
CiAjaW5jbHVkZSAiQ2FjaGVkU2NyaXB0LmgiCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNs
dWRlICJET01UaW1lci5oIgogI2luY2x1ZGUgIkRhdGFiYXNlQ29udGV4dC5oIgogI2luY2x1ZGUg
IkRvY3VtZW50LmgiCkBAIC00NzcsNyArNDc4LDcgQEAgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25k
cyBTY3JpcHRFeGVjdXRpbwogSlNDOjpWTSYgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6dm0oKQog
ewogICAgIGlmIChpczxEb2N1bWVudD4oKnRoaXMpKQotICAgICAgICByZXR1cm4gSlNET01XaW5k
b3c6OmNvbW1vblZNKCk7CisgICAgICAgIHJldHVybiBjb21tb25WTSgpOwogCiAgICAgcmV0dXJu
IGRvd25jYXN0PFdvcmtlckdsb2JhbFNjb3BlPigqdGhpcykuc2NyaXB0KCktPnZtKCk7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUxvYWRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VMb2FkZXIuY3BwCShyZXZpc2lvbiAyMDk2
NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUxvYWRlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlICJIVE1MSW1hZ2VMb2FkZXIuaCIKIAog
I2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRl
ICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIK
QEAgLTg0LDcgKzg1LDcgQEAgdm9pZCBIVE1MSW1hZ2VMb2FkZXI6Om5vdGlmeUZpbmlzaGVkKENh
YwogICAgIGJvb2wgbG9hZEVycm9yID0gY2FjaGVkSW1hZ2UuZXJyb3JPY2N1cnJlZCgpIHx8IGNh
Y2hlZEltYWdlLnJlc3BvbnNlKCkuaHR0cFN0YXR1c0NvZGUoKSA+PSA0MDA7CiAgICAgaWYgKCFs
b2FkRXJyb3IpIHsKICAgICAgICAgaWYgKCFlbGVtZW50KCkuaW5Eb2N1bWVudCgpKSB7Ci0gICAg
ICAgICAgICBKU0M6OlZNJiB2bSA9IEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKTsKKyAgICAg
ICAgICAgIEpTQzo6Vk0mIHZtID0gY29tbW9uVk0oKTsKICAgICAgICAgICAgIEpTQzo6SlNMb2Nr
SG9sZGVyIGxvY2sodm0pOwogICAgICAgICAgICAgLy8gRklYTUU6IEFkb3B0IHJlcG9ydEV4dHJh
TWVtb3J5VmlzaXRlZCwgYW5kIHN3aXRjaCB0byByZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZC4K
ICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDI1OTUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkocmV2
aXNpb24gMjA5NjQ3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkNocm9tZUNsaWVu
dC5oIgogI2luY2x1ZGUgIkNsaWVudFJlY3QuaCIKICNpbmNsdWRlICJDbGllbnRSZWN0TGlzdC5o
IgorI2luY2x1ZGUgIkNvbW1vblZNLmgiCiAjaW5jbHVkZSAiQ29udGVudFNlY3VyaXR5UG9saWN5
LmgiCiAjaW5jbHVkZSAiQ29udGVudFR5cGUuaCIKICNpbmNsdWRlICJDb29raWVKYXIuaCIKQEAg
LTg0OSw3ICs4NTAsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnBhdXNlQWZ0ZXJEZXRhY2hl
CiAKICAgICBzaXplX3QgZXh0cmFNZW1vcnlDb3N0ID0gbV9wbGF5ZXItPmV4dHJhTWVtb3J5Q29z
dCgpOwogICAgIGlmIChleHRyYU1lbW9yeUNvc3QgPiBtX3JlcG9ydGVkRXh0cmFNZW1vcnlDb3N0
KSB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpOwor
ICAgICAgICBKU0M6OlZNJiB2bSA9IGNvbW1vblZNKCk7CiAgICAgICAgIEpTQzo6SlNMb2NrSG9s
ZGVyIGxvY2sodm0pOwogCiAgICAgICAgIHNpemVfdCBleHRyYU1lbW9yeUNvc3REZWx0YSA9IGV4
dHJhTWVtb3J5Q29zdCAtIG1fcmVwb3J0ZWRFeHRyYU1lbW9yeUNvc3Q7CkBAIC02NDk2LDcgKzY0
OTcsNyBAQCBSZWZQdHI8VmlkZW9QbGF5YmFja1F1YWxpdHk+IEhUTUxNZWRpYUVsCiBET01XcmFw
cGVyV29ybGQmIEhUTUxNZWRpYUVsZW1lbnQ6OmVuc3VyZUlzb2xhdGVkV29ybGQoKQogewogICAg
IGlmICghbV9pc29sYXRlZFdvcmxkKQotICAgICAgICBtX2lzb2xhdGVkV29ybGQgPSBET01XcmFw
cGVyV29ybGQ6OmNyZWF0ZShKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7CisgICAgICAgIG1faXNv
bGF0ZWRXb3JsZCA9IERPTVdyYXBwZXJXb3JsZDo6Y3JlYXRlKGNvbW1vblZNKCkpOwogICAgIHJl
dHVybiAqbV9pc29sYXRlZFdvcmxkOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwOTY0NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNocm9t
ZUNsaWVudC5oIgorI2luY2x1ZGUgIkNvbW1vblZNLmgiCiAjaW5jbHVkZSAiQ29udGVudFNlY3Vy
aXR5UG9saWN5LmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFdmVudEhhbmRsZXIu
aCIKQEAgLTM2NSw3ICszNjYsNyBAQCB2b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnVwZGF0
ZVNuYXBzCiAKIHN0YXRpYyBET01XcmFwcGVyV29ybGQmIHBsdWdJbkltYWdlRWxlbWVudElzb2xh
dGVkV29ybGQoKQogewotICAgIHN0YXRpYyBET01XcmFwcGVyV29ybGQmIGlzb2xhdGVkV29ybGQg
PSBET01XcmFwcGVyV29ybGQ6OmNyZWF0ZShKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSkubGVha1Jl
ZigpOworICAgIHN0YXRpYyBET01XcmFwcGVyV29ybGQmIGlzb2xhdGVkV29ybGQgPSBET01XcmFw
cGVyV29ybGQ6OmNyZWF0ZShjb21tb25WTSgpKS5sZWFrUmVmKCk7CiAgICAgcmV0dXJuIGlzb2xh
dGVkV29ybGQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
b250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDIwOTY0NykKKysrIFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMs
NiArMzMsNyBAQAogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKIAogI2luY2x1ZGUg
IkNvbW1hbmRMaW5lQVBJSG9zdC5oIgorI2luY2x1ZGUgIkNvbW1vblZNLmgiCiAjaW5jbHVkZSAi
RE9NV3JhcHBlcldvcmxkLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVk
ZSAiSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmgiCkBAIC00NzAsNyArNDcxLDcgQEAg
UGFnZVNjcmlwdERlYnVnU2VydmVyJiBJbnNwZWN0b3JDb250cm9sbAogCiBKU0M6OlZNJiBJbnNw
ZWN0b3JDb250cm9sbGVyOjp2bSgpCiB7Ci0gICAgcmV0dXJuIEpTRE9NV2luZG93QmFzZTo6Y29t
bW9uVk0oKTsKKyAgICByZXR1cm4gY29tbW9uVk0oKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250
cm9sbGVyOjpkaWRDb21wb3NpdGUoRnJhbWUmIGZyYW1lKQpJbmRleDogU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHJldmlzaW9uIDIw
OTY0NykKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiUGFnZVNjcmlwdERlYnVnU2VydmVyLmgiCiAKKyNpbmNsdWRlICJDb21tb25W
TS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnRMb29wLmgiCiAjaW5j
bHVkZSAiRnJhbWVWaWV3LmgiCkBAIC01NCw3ICs1NSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNw
ZWN0b3I7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBhZ2VTY3JpcHREZWJ1Z1NlcnZlcjo6UGFn
ZVNjcmlwdERlYnVnU2VydmVyKFBhZ2UmIHBhZ2UpCi0gICAgOiBTY3JpcHREZWJ1Z1NlcnZlcihX
ZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpCisgICAgOiBTY3JpcHREZWJ1Z1Nl
cnZlcihXZWJDb3JlOjpjb21tb25WTSgpKQogICAgICwgbV9wYWdlKHBhZ2UpCiB7CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlTG9nZ2luZy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZUxvZ2dpbmcuY3BwCShyZXZpc2lvbiAy
MDk2NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlTG9nZ2luZy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJQZXJmb3JtYW5jZUxvZ2dpbmcuaCIKIAorI2luY2x1ZGUgIkNvbW1vblZNLmgiCiAjaW5j
bHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFt
ZUxvYWRlckNsaWVudC5oIgpAQCAtNTIsNyArNTMsNyBAQCBIYXNoTWFwPGNvbnN0IGNoYXIqLCBz
aXplX3Q+IFBlcmZvcm1hbmNlCiB7CiAgICAgSGFzaE1hcDxjb25zdCBjaGFyKiwgc2l6ZV90PiBz
dGF0czsKIAotICAgIGF1dG8mIHZtID0gSlNET01XaW5kb3c6OmNvbW1vblZNKCk7CisgICAgYXV0
byYgdm0gPSBjb21tb25WTSgpOwogICAgIHN0YXRzLmFkZCgiamF2YXNjcmlwdF9nY19oZWFwX2Nh
cGFjaXR5Iiwgdm0uaGVhcC5jYXBhY2l0eSgpKTsKICAgICBzdGF0cy5hZGQoImphdmFzY3JpcHRf
Z2NfaGVhcF9leHRyYV9tZW1vcnlfc2l6ZSIsIHZtLmhlYXAuZXh0cmFNZW1vcnlTaXplKCkpOwog
CkBAIC03NCw3ICs3NSw3IEBAIEhhc2hNYXA8Y29uc3QgY2hhciosIHNpemVfdD4gUGVyZm9ybWFu
Y2UKIAogSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+IFBlcmZvcm1hbmNlTG9nZ2luZzo6amF2
YVNjcmlwdE9iamVjdENvdW50cygpCiB7Ci0gICAgcmV0dXJuIFdURk1vdmUoKkpTRE9NV2luZG93
Ojpjb21tb25WTSgpLmhlYXAub2JqZWN0VHlwZUNvdW50cygpKTsKKyAgICByZXR1cm4gV1RGTW92
ZSgqY29tbW9uVk0oKS5oZWFwLm9iamVjdFR5cGVDb3VudHMoKSk7CiB9CiAKIFBlcmZvcm1hbmNl
TG9nZ2luZzo6UGVyZm9ybWFuY2VMb2dnaW5nKE1haW5GcmFtZSYgbWFpbkZyYW1lKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlVGhyZWFkLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VUaHJlYWQuY3BwCShyZXZpc2lvbiAy
MDk2NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VUaHJlYWQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNB
R0UpCiAKKyNpbmNsdWRlICJDb21tb25WTS5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCiAj
aW5jbHVkZSA8dGhyZWFkPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CkBAIC05OCw3ICs5
OSw3IEBAIHZvaWQgUmVzb3VyY2VVc2FnZVRocmVhZDo6Y3JlYXRlVGhyZWFkSWYKICAgICBpZiAo
bV90aHJlYWRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3ZtID0gJkpTRE9N
V2luZG93Ojpjb21tb25WTSgpOworICAgIG1fdm0gPSAmY29tbW9uVk0oKTsKICAgICBtX3RocmVh
ZElkZW50aWZpZXIgPSBjcmVhdGVUaHJlYWQodGhyZWFkQ2FsbGJhY2ssIHRoaXMsICJXZWJDb3Jl
OiBSZXNvdXJjZVVzYWdlIik7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2Ev
UmVzb3VyY2VVc2FnZU92ZXJsYXlDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VPdmVybGF5Q29jb2EubW0JKHJldmlzaW9uIDIwOTY0
NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvUmVzb3VyY2VVc2FnZU92ZXJsYXlDb2Nv
YS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSA8Q29yZVRl
eHQvQ29yZVRleHQuaD4KIAorI2luY2x1ZGUgIkNvbW1vblZNLmgiCiAjaW5jbHVkZSAiSlNET01X
aW5kb3cuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNBTGF5ZXIuaCIKICNpbmNsdWRlICJSZXNvdXJj
ZVVzYWdlVGhyZWFkLmgiCkBAIC0yMDQsNyArMjA1LDcgQEAgc3RhdGljIHZvaWQgYXBwZW5kRGF0
YVRvSGlzdG9yeShjb25zdCBSZQogCiAgICAgLy8gRklYTUU6IEZpbmQgYSB3YXkgdG8gYWRkIHRo
aXMgdG8gUmVzb3VyY2VVc2FnZURhdGEgYW5kIGNhbGN1bGF0ZSBpdCBvbiB0aGUgcmVzb3VyY2Ug
dXNhZ2Ugc2FtcGxlciB0aHJlYWQuCiAgICAgewotICAgICAgICBKU0M6OlZNKiB2bSA9ICZKU0RP
TVdpbmRvdzo6Y29tbW9uVk0oKTsKKyAgICAgICAgSlNDOjpWTSogdm0gPSAmY29tbW9uVk0oKTsK
ICAgICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAgICAgICAgIGhpc3RvcmljRGF0
YS5nY0hlYXBTaXplLmFwcGVuZCh2bS0+aGVhcC5zaXplKCkgLSB2bS0+aGVhcC5leHRyYU1lbW9y
eVNpemUoKSk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0lt
YWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1h
Z2UuY3BwCShyZXZpc2lvbiAyMDk2NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
U1ZHSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAi
U1ZHSW1hZ2UuaCIKIAogI2luY2x1ZGUgIkNocm9tZS5oIgorI2luY2x1ZGUgIkNvbW1vblZNLmgi
CiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNp
bmNsdWRlICJFbGVtZW50SXRlcmF0b3IuaCIKQEAgLTM5Nyw3ICszOTgsNyBAQCB2b2lkIFNWR0lt
YWdlOjpyZXBvcnRBcHByb3hpbWF0ZU1lbW9yeUNvCiAgICAgZm9yIChOb2RlKiBub2RlID0gZG9j
dW1lbnQ7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkKICAgICAgICAg
ZGVjb2RlZEltYWdlTWVtb3J5Q29zdCArPSBub2RlLT5hcHByb3hpbWF0ZU1lbW9yeUNvc3QoKTsK
IAotICAgIEpTQzo6Vk0mIHZtID0gSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpOworICAgIEpT
Qzo6Vk0mIHZtID0gY29tbW9uVk0oKTsKICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsK
ICAgICAvLyBGSVhNRTogQWRvcHQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkLCBhbmQgc3dpdGNo
IHRvIHJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI1OTUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvTWVtb3J5SW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTWVt
b3J5SW5mby5oCShyZXZpc2lvbiAyMDk2NDcpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01l
bW9yeUluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjcHJhZ21hIG9u
Y2UKIAorI2luY2x1ZGUgIkNvbW1vblZNLmgiCiAjaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKICNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCkBAIC00NCw4ICs0NSw4IEBAIHB1YmxpYzoKIAog
cHJpdmF0ZToKICAgICBNZW1vcnlJbmZvKCkKLSAgICAgICAgOiBtX3VzZWRKU0hlYXBTaXplKEpT
RE9NV2luZG93Ojpjb21tb25WTSgpLmhlYXAuc2l6ZSgpKQotICAgICAgICAsIG1fdG90YWxKU0hl
YXBTaXplKEpTRE9NV2luZG93Ojpjb21tb25WTSgpLmhlYXAuY2FwYWNpdHkoKSkKKyAgICAgICAg
OiBtX3VzZWRKU0hlYXBTaXplKGNvbW1vblZNKCkuaGVhcC5zaXplKCkpCisgICAgICAgICwgbV90
b3RhbEpTSGVhcFNpemUoY29tbW9uVk0oKS5oZWFwLmNhcGFjaXR5KCkpCiAgICAgewogICAgIH0K
IAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>296805</attachid>
            <date>2016-12-10 10:15:10 -0800</date>
            <delta_ts>2016-12-10 18:55:58 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>92898</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA5NjQ3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBA
CisyMDE2LTEyLTA5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
VGhlIERPTSBzaG91bGQgaGF2ZSBhbiBhZHZhbmNpbmcgd2F2ZWZyb250IG9wYXF1ZSByb290IGJh
cnJpZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
NTcxMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAg
ICAgICAgVGhpcyBleHBvc2VzIHRoZSBhYmlsaXR5IHRvIGZpcmUgYW4gYWR2YW5jaW5nIHdhdmVm
cm9udCBiYXJyaWVyIG9uIG9wYXF1ZSByb290cy4gSXQgYWxzbworICAgICAgICBnaXZlcyBjbGll
bnRzIHRoZSBhYmlsaXR5IHRvIG1haW50YWluIHRoZWlyIG93biBjYWNoZSBvZiB3aGV0aGVyIHRo
YXQgYmFycmllciBuZWVkcyB0bworICAgICAgICBiZSBlbmFibGVkLgorICAgICAgICAKKyAgICAg
ICAgVGhlIERPTSB1c2VzIHRoaXMgdG8gZW5hYmxlIGEgdmVyeSBjaGVhcCBiYXJyaWVyIG9uIHRo
ZSBET00uCisKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjpi
ZWdpbk1hcmtpbmcpOgorICAgICAgICAoSlNDOjpIZWFwOjplbmRNYXJraW5nKToKKyAgICAgICAg
KEpTQzo6SGVhcDo6d3JpdGVCYXJyaWVyT3BhcXVlUm9vdFNsb3cpOgorICAgICAgICAoSlNDOjpI
ZWFwOjphZGRNdXRhdG9yU2hvdWxkQmVGZW5jZWRDYWNoZSk6CisgICAgICAgIChKU0M6OkhlYXA6
OnNldE11dGF0b3JTaG91bGRCZUZlbmNlZCk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAg
ICAgICogaGVhcC9IZWFwSW5saW5lcy5oOgorICAgICAgICAoSlNDOjp3cml0ZUJhcnJpZXJPcGFx
dWVSb290KToKKwogMjAxNi0xMi0wOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgog
CiAgICAgICAgIFJFR1JFU1NJT04gKHIyMDk1NTQtMjA5NTcxKTogc3RyZXNzL3BvbHktc2V0dGVy
LWNvbWJvIGNyYXNoaW5nCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2
aXNpb24gMjA5NjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgxNSw4ICs4MTUsNyBAQCB2b2lkIEhlYXA6OmJlZ2luTWFya2luZygp
CiAgICAgICAgIG1fY29kZUJsb2Nrcy0+Y2xlYXJNYXJrc0ZvckZ1bGxDb2xsZWN0aW9uKCk7CiAg
ICAgbV9qaXRTdHViUm91dGluZXMtPmNsZWFyTWFya3MoKTsKICAgICBtX29iamVjdFNwYWNlLmJl
Z2luTWFya2luZygpOwotICAgIG1fbXV0YXRvclNob3VsZEJlRmVuY2VkID0gdHJ1ZTsKLSAgICBt
X2JhcnJpZXJUaHJlc2hvbGQgPSB0YXV0b2xvZ2ljYWxUaHJlc2hvbGQ7CisgICAgc2V0TXV0YXRv
clNob3VsZEJlRmVuY2VkKHRydWUpOwogICAgIG1fYmFycmllcnNFeGVjdXRlZCA9IDA7CiB9CiAK
QEAgLTk0Myw4ICs5NDIsNyBAQCB2b2lkIEhlYXA6OmVuZE1hcmtpbmcoKQogICAgIG1fd2Vha1Jl
ZmVyZW5jZUhhcnZlc3RlcnMucmVtb3ZlQWxsKCk7CiAgICAgCiAgICAgbV9vYmplY3RTcGFjZS5l
bmRNYXJraW5nKCk7Ci0gICAgbV9tdXRhdG9yU2hvdWxkQmVGZW5jZWQgPSBPcHRpb25zOjpmb3Jj
ZUZlbmNlZEJhcnJpZXIoKTsKLSAgICBtX2JhcnJpZXJUaHJlc2hvbGQgPSBPcHRpb25zOjpmb3Jj
ZUZlbmNlZEJhcnJpZXIoKSA/IHRhdXRvbG9naWNhbFRocmVzaG9sZCA6IGJsYWNrVGhyZXNob2xk
OworICAgIHNldE11dGF0b3JTaG91bGRCZUZlbmNlZChPcHRpb25zOjpmb3JjZUZlbmNlZEJhcnJp
ZXIoKSk7CiB9CiAKIHNpemVfdCBIZWFwOjpvYmplY3RDb3VudCgpCkBAIC0yMzEzLDQgKzIzMTEs
MjcgQEAgdm9pZCBIZWFwOjpmb3JFYWNoU2xvdFZpc2l0b3IoY29uc3QgRnVuYwogICAgICAgICBm
dW5jKCpzbG90VmlzaXRvcik7CiB9CiAKK3ZvaWQgSGVhcDo6d3JpdGVCYXJyaWVyT3BhcXVlUm9v
dFNsb3codm9pZCogcm9vdCkKK3sKKyAgICBBU1NFUlQobXV0YXRvclNob3VsZEJlRmVuY2VkKCkp
OworICAgIAorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9vcGFxdWVSb290c011dGV4KTsK
KyAgICBtX29wYXF1ZVJvb3RzLmFkZChyb290KTsKK30KKwordm9pZCBIZWFwOjphZGRNdXRhdG9y
U2hvdWxkQmVGZW5jZWRDYWNoZShib29sJiBjYWNoZSkKK3sKKyAgICBBU1NFUlQoaGFzSGVhcEFj
Y2VzcygpKTsKKyAgICBjYWNoZSA9IG1fbXV0YXRvclNob3VsZEJlRmVuY2VkOworICAgIG1fbXV0
YXRvclNob3VsZEJlRmVuY2VkQ2FjaGVzLmFwcGVuZCgmY2FjaGUpOworfQorCit2b2lkIEhlYXA6
OnNldE11dGF0b3JTaG91bGRCZUZlbmNlZChib29sIHZhbHVlKQoreworICAgIG1fbXV0YXRvclNo
b3VsZEJlRmVuY2VkID0gdmFsdWU7CisgICAgbV9iYXJyaWVyVGhyZXNob2xkID0gdmFsdWUgPyB0
YXV0b2xvZ2ljYWxUaHJlc2hvbGQgOiBibGFja1RocmVzaG9sZDsKKyAgICBmb3IgKGJvb2wqIGNh
Y2hlIDogbV9tdXRhdG9yU2hvdWxkQmVGZW5jZWRDYWNoZXMpCisgICAgICAgICpjYWNoZSA9IHZh
bHVlOworfQorICAgIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5oCShyZXZpc2lvbiAyMDk2NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNSw2ICsxMjUsOCBAQCBwdWJsaWM6CiAKICAg
ICBXcml0ZUJhcnJpZXJCdWZmZXImIHdyaXRlQmFycmllckJ1ZmZlcigpIHsgcmV0dXJuIG1fd3Jp
dGVCYXJyaWVyQnVmZmVyOyB9CiAgICAgdm9pZCBmbHVzaFdyaXRlQmFycmllckJ1ZmZlcihKU0Nl
bGwqKTsKKyAgICAKKyAgICB2b2lkIHdyaXRlQmFycmllck9wYXF1ZVJvb3Qodm9pZCopOwogCiAg
ICAgSGVhcChWTSosIEhlYXBUeXBlKTsKICAgICB+SGVhcCgpOwpAQCAtMzQ5LDYgKzM1MSw4IEBA
IHB1YmxpYzoKICAgICB2b2lkIHByZXZlbnRDb2xsZWN0aW9uKCk7CiAgICAgdm9pZCBhbGxvd0Nv
bGxlY3Rpb24oKTsKICAgICAKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZE11dGF0b3JT
aG91bGRCZUZlbmNlZENhY2hlKGJvb2wmKTsKKyAgICAKICNpZiBVU0UoQ0YpCiAgICAgQ0ZSdW5M
b29wUmVmIHJ1bkxvb3AoKSBjb25zdCB7IHJldHVybiBtX3J1bkxvb3AuZ2V0KCk7IH0KICAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIHNldFJ1bkxvb3AoQ0ZSdW5Mb29wUmVmKTsKQEAgLTQ5MCw2
ICs0OTQsMTAgQEAgcHJpdmF0ZToKICAgICBzaXplX3QgdGhyZWFkQnl0ZXNWaXNpdGVkKCk7CiAg
ICAgCiAgICAgdm9pZCBmb3JFYWNoQ29kZUJsb2NrSW1wbChjb25zdCBTY29wZWRMYW1iZGE8Ym9v
bChDb2RlQmxvY2sqKT4mKTsKKyAgICAKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHdyaXRl
QmFycmllck9wYXF1ZVJvb3RTbG93KHZvaWQqKTsKKyAgICAKKyAgICB2b2lkIHNldE11dGF0b3JT
aG91bGRCZUZlbmNlZChib29sIHZhbHVlKTsKIAogICAgIGNvbnN0IEhlYXBUeXBlIG1faGVhcFR5
cGU7CiAgICAgY29uc3Qgc2l6ZV90IG1fcmFtU2l6ZTsKQEAgLTU0OSw2ICs1NTcsNyBAQCBwcml2
YXRlOgogICAgIFdyaXRlQmFycmllckJ1ZmZlciBtX3dyaXRlQmFycmllckJ1ZmZlcjsKICAgICBi
b29sIG1fbXV0YXRvclNob3VsZEJlRmVuY2VkIHsgT3B0aW9uczo6Zm9yY2VGZW5jZWRCYXJyaWVy
KCkgfTsKICAgICB1bnNpZ25lZCBtX2JhcnJpZXJUaHJlc2hvbGQgeyBPcHRpb25zOjpmb3JjZUZl
bmNlZEJhcnJpZXIoKSA/IHRhdXRvbG9naWNhbFRocmVzaG9sZCA6IGJsYWNrVGhyZXNob2xkIH07
CisgICAgVmVjdG9yPGJvb2wqPiBtX211dGF0b3JTaG91bGRCZUZlbmNlZENhY2hlczsKIAogICAg
IFZNKiBtX3ZtOwogICAgIGRvdWJsZSBtX2xhc3RGdWxsR0NMZW5ndGg7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHJldmlzaW9uIDIwOTY0NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM3MCw0ICszNzAsMTAgQEAgaW5saW5lIHZvaWQgSGVhcDo6c3RvcElmTmVjZXNzYXJ5KCkKICAg
ICBzdG9wSWZOZWNlc3NhcnlTbG93KCk7CiB9CiAKK2lubGluZSB2b2lkIEhlYXA6OndyaXRlQmFy
cmllck9wYXF1ZVJvb3Qodm9pZCogcm9vdCkKK3sKKyAgICBpZiAobXV0YXRvclNob3VsZEJlRmVu
Y2VkKCkpCisgICAgICAgIHdyaXRlQmFycmllck9wYXF1ZVJvb3RTbG93KHJvb3QpOworfQorCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnMuY3BwCShyZXZpc2lvbiAyMDk2NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM2LDYgKzMzNiw4IEBAIHN0YXRp
YyB2b2lkIHJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoKQogICAgIE9wdGlvbnM6OnVzZUNvbmN1
cnJlbnRHQygpID0gZmFsc2U7CiAjZW5kaWYKICAgICAKKyAgICBPcHRpb25zOjp1c2VDb25jdXJy
ZW50R0MoKSA9IHRydWU7CisgICAgCiAjaWYgT1MoV0lORE9XUykgJiYgQ1BVKFg4NikgCiAgICAg
Ly8gRGlzYWJsZSBKSVQgb24gV2luZG93cyBpZiBTU0UyIGlzIG5vdCBwcmVzZW50IAogICAgIGlm
ICghTWFjcm9Bc3NlbWJsZXJYODY6OnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQpJbmRleDogU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkocmV2aXNpb24gMjA5NjQ3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTI0IEBACisyMDE2LTEyLTA5ICBGaWxpcCBQaXpsbyAgPGZw
aXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgVGhlIERPTSBzaG91bGQgaGF2ZSBhbiBhZHZhbmNp
bmcgd2F2ZWZyb250IG9wYXF1ZSByb290IGJhcnJpZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTcxMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIHRoaXMgd2FzIGNv
dmVyZWQgYnkgY3Jhc2hpbmcgdGVzdHMuCisgICAgICAgIAorICAgICAgICBDb25zaWRlciB0aGVz
ZSB0d28gY2FzZXM6CisgICAgICAgIAorICAgICAgICAgICBSZW1vdmFsOgorICAgICAgICAgICAx
KSBET00gYXQgc3RhcnQ6IEQtPlgtPlkKKyAgICAgICAgICAgMikgTWFyayBYLCBYLT52aXNpdENo
aWxkcmVuLCBhZGRPcGFxdWVSb290KEQpCisgICAgICAgICAgIDMpIHJlbW92ZSBYCisgICAgICAg
ICAgIDQpIFkgdGhpbmtzIGl0J3Mgbm90IHJlYWNoYWJsZSAoaXRzIG9wYXF1ZSByb290LCBYLCBp
cyBub3QgaW4gdGhlIHNldCkuCisgICAgICAgICAgIAorICAgICAgICAgICBJbnNlcnRpb246Cisg
ICAgICAgICAgIDEpIERPTSBhdCBzdGFydDogRCwgWC0+WQorICAgICAgICAgICAyKSBNYXJrIFgs
IFgtPnZpc2l0Q2hpbGRyZW4sIGFkZE9wYXF1ZVJvb3QoWCkKKyAgICAgICAgICAgMykgaW5zZXJ0
IFggaW50byBECisgICAgICAgICAgIDQpIFkgdGhpbmtzIGl0J3Mgbm90IHJlYWNoYWJsZSAoaXRz
IG9wYXF1ZSByb290LCBELCBpcyBub3QgaW4gdGhlIHNldCkuCisgICAgICAgIAorICAgICAgICBX
ZSBjYW4gZml4IHRoaXMgd2l0aCB0d28gYmFycmllcnM6CisgICAgICAgIAorICAgICAgICAgICBS
ZW1vdmFsOiBhZGQgWCAodGhlIHJlbW92ZWQgY2hpbGQpIHRvIHRoZSBvcGFxdWUgcm9vdCBzZXQu
CisgICAgICAgICAgIEluc2VydGlvbjogYWRkIEQgKHRoZSBpbnNlcnRpb24gcG9pbnQpIHRvIHRo
ZSBvcGFxdWUgcm9vdCBzZXQuCisgICAgICAgIAorICAgICAgICBUaGFua3MgUnlzb3N1a2UgZm9y
IGNvbWluZyB1cCB3aXRoIHRoaXMgaWRlYSEKKyAgICAgICAgCisgICAgICAgIEJvdGggYmFycmll
cnMgYWR2YW5jZSB0aGUgd2F2ZWZyb250LiBXZSBjb3VsZCBjb25zaWRlciByZXRyZWF0aW5nIHdh
dmVmcm9udCBiYXJyaWVycyBpbgorICAgICAgICB0aGUgZnV0dXJlICh3aGVyZSB3ZSBjYXVzZSB2
aXNpdENoaWxkcmVuIHRvIGJlIGNhbGxlZCBhZ2FpbiBvbiB3cmFwcGVycyB0aGF0IGJlbG9uZ2Vk
IHRvCisgICAgICAgIHJvb3RzIHRoYXQgZ290IGFmZmVjdGVkIGJ5IGluc2VydGlvbi9yZW1vdmFs
KSBidXQgdGhvc2Ugd291bGQgcHJvYmFibHkgcmVxdWlyZSBtb3JlCisgICAgICAgIGJvb2trZWVw
aW5nLgorICAgICAgICAKKyAgICAgICAgVG8gbWFrZSB0aGlzIGJhcnJpZXIgdmVyeSBmYXN0LCB0
aGUgV2ViQ29yZSBjYWNoZXMgdGhlIEpTQyBWTSdzIGJhcnJpZXIgc3RhdGUgaW4KKyAgICAgICAg
aXRzIG93biBnbG9iYWwgdmFyaWFibGUgZm9yIHZlcnkgZmFzdCBhY2Nlc3MuIFRoaXMgdmFyaWFi
bGUgd2lsbCBiZSBmYWxzZSB3aGVuIHRoZQorICAgICAgICBWTSBpcyBpZGxlLCBmb3IgZXhhbXBs
ZS4gV2Ugc2tpcCB0aGUgYmFycmllciB3aGVuIGl0J3MgZmFsc2UsIHdoaWNoIGlzIHRoZSBjb21t
b24gY2FzZS4KKyAgICAgICAgCisgICAgICAgIFRvIG1ha2UgdGhhdCBjYWNoaW5nIG1vcmUgc2Vu
c2libGUsIEkgZmluYWxseSBnYXZlIFdlYkNvcmUgYSBjZW50cmFsIGhlYWRlciBmb3IKKyAgICAg
ICAgdGhlIGNvbW1vbiBWTSAoQ29tbW9uVk0uaCkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTRFBQcm9jZXNzb3I6OmNhbGxTY3JpcHQpOgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9Db21t
b25WTS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29tbW9uVk1TbG93KToKKyAgICAg
ICAgKFdlYkNvcmU6OndyaXRlQmFycmllck9wYXF1ZVJvb3RTbG93KToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9Db21tb25WTS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbW1vblZNKToK
KyAgICAgICAgKFdlYkNvcmU6OndyaXRlQmFycmllck9wYXF1ZVJvb3QpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjptYWluVGhy
ZWFkTm9ybWFsV29ybGQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpjb2xsZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdDQ29udHJv
bGxlcjo6Z2FyYmFnZUNvbGxlY3RTb29uKToKKyAgICAgICAgKFdlYkNvcmU6OkdDQ29udHJvbGxl
cjo6Z2FyYmFnZUNvbGxlY3ROb3cpOgorICAgICAgICAoV2ViQ29yZTo6R0NDb250cm9sbGVyOjpn
YXJiYWdlQ29sbGVjdE5vd0lmTm90RG9uZVJlY2VudGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkdD
Q29udHJvbGxlcjo6c2V0SmF2YVNjcmlwdEdhcmJhZ2VDb2xsZWN0b3JUaW1lckVuYWJsZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6R0NDb250cm9sbGVyOjpkZWxldGVBbGxDb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdDQ29udHJvbGxlcjo6ZGVsZXRlQWxsTGlua2VkQ29kZSk6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI6Omxvb2t1cE5hbWVzcGFjZVVSSSk6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZElt
cHVyZVByb3BlcnR5KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpmaXJlRnJhbWVDbGVhcmVkV2F0
Y2hwb2ludHNGb3JXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpj
b21tb25WTSk6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNl
Lmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU0RPTVdpbmRvd1NoZWxsOjpzZXRXaW5kb3cpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTTm9kZUN1c3RvbS5oOgorICAgICAgICAoV2ViQ29yZTo6cm9vdCk6CisgICAgICAg
ICogYmluZGluZ3MvanMvU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdENhY2hlZEZyYW1lRGF0YTo6U2NyaXB0Q2FjaGVkRnJhbWVEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdENhY2hlZEZyYW1lRGF0YTo6cmVzdG9yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHRDYWNoZWRGcmFtZURhdGE6OmNsZWFyKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRy
b2xsZXI6On5TY3JpcHRDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRy
b2xsZXI6OmNyZWF0ZVdvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6
OmdldEFsbFdvcmxkcyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpjbGVh
cldpbmRvd1NoZWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNhY2hl
YWJsZUJpbmRpbmdSb290T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xs
ZXI6OmJpbmRpbmdSb290T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xs
ZXI6OndpbmRvd1NjcmlwdE5QT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRy
b2xsZXI6OmpzT2JqZWN0Rm9yUGx1Z2luRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHRDb250cm9sbGVyOjpjbGVhclNjcmlwdE9iamVjdHMpOgorICAgICAgICAqIGRvbS9Db2xsZWN0
aW9uSW5kZXhDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZXBvcnRFeHRyYU1lbW9yeUFs
bG9jYXRlZEZvckNvbGxlY3Rpb25JbmRleENhY2hlKToKKyAgICAgICAgKiBkb20vQ29udGFpbmVy
Tm9kZS5jcHA6CisgICAgICAgICogZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Om5vdGlmeUNoaWxkTm9kZUluc2VydGVkKToKKyAgICAgICAgKFdlYkNv
cmU6Om5vdGlmeUNoaWxkTm9kZVJlbW92ZWQpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2hvdWxkQnlwYXNzTWFpbldvcmxkQ29udGVu
dFNlY3VyaXR5UG9saWN5KToKKyAgICAgICAgKiBkb20vTm9kZS5oOgorICAgICAgICAoV2ViQ29y
ZTo6Tm9kZTo6b3BhcXVlUm9vdCk6CisgICAgICAgICogZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6dm0pOgor
ICAgICAgICAqIGh0bWwvSFRNTEltYWdlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxJbWFnZUxvYWRlcjo6bm90aWZ5RmluaXNoZWQpOgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlh
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpwYXVzZUFm
dGVyRGV0YWNoZWRUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmVu
c3VyZUlzb2xhdGVkV29ybGQpOgorICAgICAgICAqIGh0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwbHVnSW5JbWFnZUVsZW1lbnRJc29sYXRlZFdvcmxk
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjp2bSk6CisgICAgICAgICogaW5zcGVjdG9y
L1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlU2NyaXB0
RGVidWdTZXJ2ZXI6OlBhZ2VTY3JpcHREZWJ1Z1NlcnZlcik6CisgICAgICAgICogcGFnZS9QZXJm
b3JtYW5jZUxvZ2dpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGVyZm9ybWFuY2VMb2dnaW5n
OjptZW1vcnlVc2FnZVN0YXRpc3RpY3MpOgorICAgICAgICAoV2ViQ29yZTo6UGVyZm9ybWFuY2VM
b2dnaW5nOjpqYXZhU2NyaXB0T2JqZWN0Q291bnRzKToKKyAgICAgICAgKiBwYWdlL1Jlc291cmNl
VXNhZ2VUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VVc2FnZVRocmVhZDo6
Y3JlYXRlVGhyZWFkSWZOZWVkZWQpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6cmVwb3J0QXBwcm94aW1hdGVNZW1vcnlD
b3N0KToKKyAgICAgICAgKiB0ZXN0aW5nL01lbW9yeUluZm8uaDoKKyAgICAgICAgKFdlYkNvcmU6
Ok1lbW9yeUluZm86Ok1lbW9yeUluZm8pOgorCiAyMDE2LTEyLTA5ICBEYW5pZWwgQmF0ZXMgIDxk
YWJhdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgcmVmbGVjdGVkIG5vbmNlIGF0dHJpYnV0
ZSB0byBIVE1MIExpbmsgZWxlbWVudCBJREwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZp
c2lvbiAyMDk2NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtMTA3Niw2ICsxMDc2LDcgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIGJpbmRp
bmdzL2pzL0NhY2hlZE1vZHVsZVNjcmlwdC5jcHAKICAgICBiaW5kaW5ncy9qcy9DYWNoZWRNb2R1
bGVTY3JpcHRMb2FkZXIuY3BwCiAgICAgYmluZGluZ3MvanMvQ2FsbGJhY2tGdW5jdGlvbi5jcHAK
KyAgICBiaW5kaW5ncy9qcy9Db21tb25WTS5jcHAKICAgICBiaW5kaW5ncy9qcy9ET01XcmFwcGVy
V29ybGQuY3BwCiAgICAgYmluZGluZ3MvanMvRGljdGlvbmFyeS5jcHAKICAgICBiaW5kaW5ncy9q
cy9HQ0NvbnRyb2xsZXIuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL1NEUFByb2Nlc3Nvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3IuY3BwCShyZXZpc2lvbiAyMDk2NDcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpZiBFTkFCTEUoV0VCX1JUQykKICNpbmNsdWRlICJT
RFBQcm9jZXNzb3IuaCIKIAorI2luY2x1ZGUgIkNvbW1vblZNLmgiCiAjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlNEUFByb2Nlc3NvclNjcmlwdFJl
c291cmNlLmgiCkBAIC00OTUsNyArNDk2LDcgQEAgYm9vbCBTRFBQcm9jZXNzb3I6OmNhbGxTY3Jp
cHQoY29uc3QgU3RyaQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIW1faXNvbGF0
ZWRXb3JsZCkKLSAgICAgICAgbV9pc29sYXRlZFdvcmxkID0gRE9NV3JhcHBlcldvcmxkOjpjcmVh
dGUoSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOworICAgICAgICBtX2lzb2xhdGVkV29ybGQgPSBE
T01XcmFwcGVyV29ybGQ6OmNyZWF0ZShjb21tb25WTSgpKTsKIAogICAgIFNjcmlwdENvbnRyb2xs
ZXImIHNjcmlwdENvbnRyb2xsZXIgPSBkb2N1bWVudC0+ZnJhbWUoKS0+c2NyaXB0KCk7CiAgICAg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEpTQzo6anNDYXN0PEpTRE9NR2xvYmFs
T2JqZWN0Kj4oc2NyaXB0Q29udHJvbGxlci5nbG9iYWxPYmplY3QoKm1faXNvbGF0ZWRXb3JsZCkp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJl
cGxhY2VtZW50Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lu
cy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbQkocmV2aXNpb24gMjA5NjQ3KQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbXBvcnQgIlF1aWNrVGltZVBs
dWdpblJlcGxhY2VtZW50LmgiCiAKKyNpbXBvcnQgIkNvbW1vblZNLmgiCiAjaW1wb3J0ICJFdmVu
dC5oIgogI2ltcG9ydCAiSFRNTFBsdWdJbkVsZW1lbnQuaCIKICNpbXBvcnQgIkhUTUxWaWRlb0Vs
ZW1lbnQuaCIKQEAgLTE0OCw3ICsxNDksNyBAQCBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gUXVp
Y2tUaW1lUGx1Z2luCiAKIERPTVdyYXBwZXJXb3JsZCYgUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1l
bnQ6Omlzb2xhdGVkV29ybGQoKQogewotICAgIHN0YXRpYyBET01XcmFwcGVyV29ybGQmIGlzb2xh
dGVkV29ybGQgPSBET01XcmFwcGVyV29ybGQ6OmNyZWF0ZShKU0RPTVdpbmRvdzo6Y29tbW9uVk0o
KSkubGVha1JlZigpOworICAgIHN0YXRpYyBET01XcmFwcGVyV29ybGQmIGlzb2xhdGVkV29ybGQg
PSBET01XcmFwcGVyV29ybGQ6OmNyZWF0ZShjb21tb25WTSgpKS5sZWFrUmVmKCk7CiAgICAgcmV0
dXJuIGlzb2xhdGVkV29ybGQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwOTY0NykKKysrIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtNDk2LDYgKzQ5Niw4IEBACiAJCTBGNUUyMDA2MThFNzcxRkMwMDNFQzNFNSAvKiBQbGF0
Zm9ybUNBQW5pbWF0aW9uQ29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNUUyMDA1MThFNzcxRkMwMDNFQzNFNSAvKiBQbGF0Zm9ybUNBQW5pbWF0
aW9uQ29jb2EuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjYwNUFFQzE1Rjk0ODQ4MDA0REYwQzAgLyogU2Nyb2xsaW5nQ29uc3RyYWludHMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MDVBRUEx
NUY5NDg0ODAwNERGMEMwIC8qIFNjcm9sbGluZ0NvbnN0cmFpbnRzLmNwcCAqLzsgfTsKIAkJMEY2
MDVBRUQxNUY5NDg0ODAwNERGMEMwIC8qIFNjcm9sbGluZ0NvbnN0cmFpbnRzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYwNUFFQjE1Rjk0ODQ4MDA0
REYwQzAgLyogU2Nyb2xsaW5nQ29uc3RyYWludHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjYwRjMyQjFERkJCMTA3MDA0MTZENkMgLyogQ29t
bW9uVk0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NjBGMzJBMURGQkIxMDQwMDQxNkQ2QyAvKiBDb21tb25WTS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNjBGMzJDMURGQkIxMEIwMDQxNkQ2QyAv
KiBDb21tb25WTS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjYwRjMyOTFERkJCMTA0MDA0MTZENkMgLyogQ29tbW9uVk0uY3BwICovOyB9OwogCQkw
RjYzODNERDE4NjE1QjI5MDAzRTVEQjUgLyogVGhyZWFkZWRTY3JvbGxpbmdUcmVlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjM4M0RCMTg2MTVC
MjkwMDNFNURCNSAvKiBUaHJlYWRlZFNjcm9sbGluZ1RyZWUuY3BwICovOyB9OwogCQkwRjYzODNE
RTE4NjE1QjI5MDAzRTVEQjUgLyogVGhyZWFkZWRTY3JvbGxpbmdUcmVlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYzODNEQzE4NjE1QjI5MDAzRTVE
QjUgLyogVGhyZWFkZWRTY3JvbGxpbmdUcmVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2QTEyQkQxQTAwOTIzNzAwQzZERTcyIC8qIERlYnVn
UGFnZU92ZXJsYXlzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNkExMkJCMUEwMDkyMzcwMEM2REU3MiAvKiBEZWJ1Z1BhZ2VPdmVybGF5cy5jcHAg
Ki87IH07CkBAIC03NDk0LDYgKzc0OTYsOCBAQAogCQkwRjVFMjAwNTE4RTc3MUZDMDAzRUMzRTUg
LyogUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjYwNUFFQTE1Rjk0ODQ4MDA0REYwQzAgLyogU2Nyb2xsaW5nQ29uc3RyYWludHMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsaW5nQ29uc3Ry
YWludHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjYwNUFFQjE1Rjk0ODQ4
MDA0REYwQzAgLyogU2Nyb2xsaW5nQ29uc3RyYWludHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU2Nyb2xsaW5nQ29uc3RyYWludHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEY2MEYzMjkxREZCQjEwNDAwNDE2RDZDIC8qIENvbW1vblZNLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbW1vblZNLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MEYzMkExREZCQjEwNDAwNDE2RDZDIC8qIENvbW1vblZNLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbW1vblZNLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGNjM4M0RCMTg2MTVCMjkwMDNFNURCNSAvKiBUaHJlYWRlZFNj
cm9sbGluZ1RyZWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhy
ZWFkZWRTY3JvbGxpbmdUcmVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2
MzgzREMxODYxNUIyOTAwM0U1REI1IC8qIFRocmVhZGVkU2Nyb2xsaW5nVHJlZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRlZFNjcm9sbGluZ1RyZWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2QTEyQkIxQTAwOTIzNzAwQzZERTcyIC8qIERlYnVn
UGFnZU92ZXJsYXlzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERl
YnVnUGFnZU92ZXJsYXlzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxOTEy
LDYgKzIxOTE2LDggQEAKIAkJCQlFMzA3REVDODFEODFFNDQ4MDAxNDFDQUYgLyogQ2FjaGVkTW9k
dWxlU2NyaXB0TG9hZGVyQ2xpZW50LmggKi8sCiAJCQkJQkNENTMzNjMwRUQ2ODQ4OTAwODg3NDY4
IC8qIENhY2hlZFNjcmlwdFNvdXJjZVByb3ZpZGVyLmggKi8sCiAJCQkJOTNGOEIzMDYwQTMwMEZF
QTAwRjYxQUI4IC8qIENvZGVHZW5lcmF0b3JKUy5wbSAqLywKKwkJCQkwRjYwRjMyOTFERkJCMTA0
MDA0MTZENkMgLyogQ29tbW9uVk0uY3BwICovLAorCQkJCTBGNjBGMzJBMURGQkIxMDQwMDQxNkQ2
QyAvKiBDb21tb25WTS5oICovLAogCQkJCTMxMkQ2N0IwMTUzNTY5MUYwMDU2M0QwRCAvKiBEaWN0
aW9uYXJ5LmNwcCAqLywKIAkJCQkzMTYwMjNFRjE1MzJDNDBDMDBENTBGRjQgLyogRGljdGlvbmFy
eS5oICovLAogCQkJCUI1NjU3NkU3MTdEQTk0RTIwMEE1NkJEQyAvKiBET01Db25zdHJ1Y3Rvcldp
dGhEb2N1bWVudC5oICovLApAQCAtMjc1MjYsNiArMjc1MzIsNyBAQAogCQkJCUZENDVBOTVCMTc1
RDQxRUUwMEMyMUVDOCAvKiBTaGFwZUludGVydmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDQ1
QTk1MjE3NUQzRjNFMDBDMjFFQzggLyogU2hhcGVPdXRzaWRlSW5mby5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRkQxQUYxNTAxNjU2RjE1MTAwQzZENEY3IC8qIFNoYXBlVmFsdWUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGNjBGMzJCMURGQkIxMDcwMDQxNkQ2QyAvKiBDb21tb25WTS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMUE0QTk1NEUwQjRFRENDQjAwMkQ4QzNDIC8qIFNoYXJlZEJ1ZmZlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTdCMUYwMkYxM0IwMjVEMjAwRjUxMDNGIC8qIFNoYXJlZEJ1ZmZl
ckNodW5rUmVhZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOUVBMzA5OUVCNzhDMDA1NkU1
ODEgLyogU2hhcmVkVGltZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzE2MzMsNiArMzE2NDAsNyBA
QAogCQkJCUExNDgzMkIzMTg3RjYyOTEwMERBNjNBNiAvKiBXQUtDbGlwVmlldy5tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTE0ODMyQjUxODdGNjJGQzAwREE2M0E2IC8qIFdBS1Jlc3BvbmRlci5tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTE0ODMyQjcxODdGNjM2QzAwREE2M0E2IC8qIFdBS1Njcm9sbFZp
ZXcubW0gaW4gU291cmNlcyAqLywKKwkJCQkwRjYwRjMyQzFERkJCMTBCMDA0MTZENkMgLyogQ29t
bW9uVk0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTE0ODMyQjkxODdGNjNENTAwREE2M0E2IC8q
IFdBS1ZpZXcubW0gaW4gU291cmNlcyAqLywKIAkJCQlBMTQ4MzJCQzE4N0Y2NDhFMDBEQTYzQTYg
LyogV0FLV2luZG93Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQ3RjI5OTExM0Q0QzBDQjAwQUQ5
NTM1IC8qIFdhdmVTaGFwZXJEU1BLZXJuZWwuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Db21tb25WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvQ29tbW9uVk0uY3BwCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0NvbW1vblZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb21tb25WTS5oIgorCisjaW5jbHVkZSAi
U2NyaXB0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiV2Vi
Q29yZUpTQ2xpZW50RGF0YS5oIgorI2luY2x1ZGUgPGhlYXAvSGVhcElubGluZXMuaD4KKyNpbmNs
dWRlIDxydW50aW1lL1ZNLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKwordXNpbmcg
bmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitWTSogZ19jb21tb25WTU9y
TnVsbDsKK2Jvb2wgZ19vcGFxdWVSb290V3JpdGVCYXJyaWVyRW5hYmxlZDsKKworVk0mIGNvbW1v
blZNU2xvdygpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoIWdf
Y29tbW9uVk1Pck51bGwpOworICAgIAorICAgIFNjcmlwdENvbnRyb2xsZXI6OmluaXRpYWxpemVU
aHJlYWRpbmcoKTsKKyAgICBnX2NvbW1vblZNT3JOdWxsID0gJlZNOjpjcmVhdGVMZWFrZWQoTGFy
Z2VIZWFwKS5sZWFrUmVmKCk7CisgICAgZ19jb21tb25WTU9yTnVsbC0+aGVhcC5hY3F1aXJlQWNj
ZXNzKCk7IC8vIEF0IGFueSB0aW1lLCB3ZSBtYXkgZG8gdGhpbmdzIHRoYXQgYWZmZWN0IHRoZSBH
Qy4KKyNpZiAhUExBVEZPUk0oSU9TKQorICAgIGdfY29tbW9uVk1Pck51bGwtPnNldEV4Y2x1c2l2
ZVRocmVhZChzdGQ6OnRoaXNfdGhyZWFkOjpnZXRfaWQoKSk7CisjZWxzZQorICAgIGdfY29tbW9u
Vk1Pck51bGwtPmhlYXAuc2V0UnVuTG9vcChXZWJUaHJlYWRSdW5Mb29wKCkpOworICAgIGdfY29t
bW9uVk1Pck51bGwtPmhlYXAubWFjaGluZVRocmVhZHMoKS5hZGRDdXJyZW50VGhyZWFkKCk7Cisj
ZW5kaWYKKyAgICAKKyAgICBnX2NvbW1vblZNT3JOdWxsLT5zZXRHbG9iYWxDb25zdFJlZGVjbGFy
YXRpb25TaG91bGRUaHJvdyhTZXR0aW5nczo6Z2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9uU2hvdWxk
VGhyb3coKSk7CisgICAgZ19jb21tb25WTU9yTnVsbC0+aGVhcC5hZGRNdXRhdG9yU2hvdWxkQmVG
ZW5jZWRDYWNoZShnX29wYXF1ZVJvb3RXcml0ZUJhcnJpZXJFbmFibGVkKTsKKyAgICAKKyAgICBp
bml0Tm9ybWFsV29ybGRDbGllbnREYXRhKGdfY29tbW9uVk1Pck51bGwpOworICAgIAorICAgIHJl
dHVybiAqZ19jb21tb25WTU9yTnVsbDsKK30KKwordm9pZCB3cml0ZUJhcnJpZXJPcGFxdWVSb290
U2xvdyh2b2lkKiByb290KQoreworICAgIGlmIChWTSogdm0gPSBnX2NvbW1vblZNT3JOdWxsKQor
ICAgICAgICB2bS0+aGVhcC53cml0ZUJhcnJpZXJPcGFxdWVSb290KHJvb3QpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0Nv
bW1vblZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQ29tbW9u
Vk0uaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Db21tb25W
TS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBKU0Mg
eworY2xhc3MgVk07Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV0VCQ09SRV9FWFBPUlQg
ZXh0ZXJuIEpTQzo6Vk0qIGdfY29tbW9uVk1Pck51bGw7CitXRUJDT1JFX0VYUE9SVCBleHRlcm4g
Ym9vbCBnX29wYXF1ZVJvb3RXcml0ZUJhcnJpZXJFbmFibGVkOworCitXRUJDT1JFX0VYUE9SVCBK
U0M6OlZNJiBjb21tb25WTVNsb3coKTsKK1dFQkNPUkVfRVhQT1JUIHZvaWQgd3JpdGVCYXJyaWVy
T3BhcXVlUm9vdFNsb3codm9pZCopOworCitpbmxpbmUgSlNDOjpWTSYgY29tbW9uVk0oKQorewor
ICAgIGlmIChKU0M6OlZNKiByZXN1bHQgPSBnX2NvbW1vblZNT3JOdWxsKQorICAgICAgICByZXR1
cm4gKnJlc3VsdDsKKyAgICByZXR1cm4gY29tbW9uVk1TbG93KCk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEZ1bmM+Cit2b2lkIHdyaXRlQmFycmllck9wYXF1ZVJvb3QoY29uc3QgRnVuYyYgcm9v
dFRodW5rKQoreworICAgIGlmIChnX29wYXF1ZVJvb3RXcml0ZUJhcnJpZXJFbmFibGVkKQorICAg
ICAgICB3cml0ZUJhcnJpZXJPcGFxdWVSb290U2xvdyhyb290VGh1bmsoKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9N
V3JhcHBlcldvcmxkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9ET01XcmFwcGVyV29ybGQuY3BwCShyZXZpc2lvbiAyMDk2NDcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2
ICsyMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRE9NV3JhcHBlcldvcmxk
LmgiCiAKKyNpbmNsdWRlICJDb21tb25WTS5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCiAj
aW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERh
dGEuaCIKQEAgLTY5LDcgKzcwLDcgQEAgRE9NV3JhcHBlcldvcmxkJiBub3JtYWxXb3JsZChKU0M6
OlZNJiB2bQogRE9NV3JhcHBlcldvcmxkJiBtYWluVGhyZWFkTm9ybWFsV29ybGQoKQogewogICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgc3RhdGljIERPTVdyYXBwZXJXb3JsZCYgY2Fj
aGVkTm9ybWFsV29ybGQgPSBub3JtYWxXb3JsZChKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7Cisg
ICAgc3RhdGljIERPTVdyYXBwZXJXb3JsZCYgY2FjaGVkTm9ybWFsV29ybGQgPSBub3JtYWxXb3Js
ZChjb21tb25WTSgpKTsKICAgICByZXR1cm4gY2FjaGVkTm9ybWFsV29ybGQ7CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcAkocmV2aXNpb24g
MjA5NjQ3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkdDQ29udHJvbGxlci5oIgogCi0jaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKKyNpbmNs
dWRlICJDb21tb25WTS5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvVk0uaD4KICNpbmNsdWRlIDxydW50
aW1lL0pTTG9jay5oPgogI2luY2x1ZGUgPGhlYXAvSGVhcC5oPgpAQCAtNDAsOCArNDAsOCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyB2b2lkIGNvbGxlY3Qodm9pZCopCiB7Ci0gICAg
SlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOwotICAgIEpTRE9NV2lu
ZG93Ojpjb21tb25WTSgpLmhlYXAuY29sbGVjdEFsbEdhcmJhZ2UoKTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhjb21tb25WTSgpKTsKKyAgICBjb21tb25WTSgpLmhlYXAuY29sbGVjdEFsbEdhcmJh
Z2UoKTsKIH0KIAogR0NDb250cm9sbGVyJiBHQ0NvbnRyb2xsZXI6OnNpbmdsZXRvbigpCkBAIC02
MSw4ICs2MSw4IEBAIHZvaWQgR0NDb250cm9sbGVyOjpnYXJiYWdlQ29sbGVjdFNvb24oKQogICAg
IC8vIG9mIHRoZSBnYXJiYWdlIGNvbGxlY3RvciB0aW1lcnMgaW4gSmF2YVNjcmlwdENvcmUuIFdl
IHdvdWxkbid0IG5lZWQgdGhpcyBpZiBKYXZhU2NyaXB0Q29yZQogICAgIC8vIHVzZWQgYSB0aW1l
ciBpbXBsZW1lbnRhdGlvbiBmcm9tIFdURiBsaWtlIFJ1bkxvb3A6OlRpbWVyLgogI2lmIFVTRShD
RikgfHwgVVNFKEdMSUIpCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1v
blZNKCkpOwotICAgIEpTRE9NV2luZG93Ojpjb21tb25WTSgpLmhlYXAucmVwb3J0QWJhbmRvbmVk
T2JqZWN0R3JhcGgoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhjb21tb25WTSgpKTsKKyAgICBj
b21tb25WTSgpLmhlYXAucmVwb3J0QWJhbmRvbmVkT2JqZWN0R3JhcGgoKTsKICNlbHNlCiAgICAg
Z2FyYmFnZUNvbGxlY3RPbk5leHRSdW5Mb29wKCk7CiAjZW5kaWYKQEAgLTgxLDkgKzgxLDkgQEAg
dm9pZCBHQ0NvbnRyb2xsZXI6OmdjVGltZXJGaXJlZCgpCiAKIHZvaWQgR0NDb250cm9sbGVyOjpn
YXJiYWdlQ29sbGVjdE5vdygpCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6
OmNvbW1vblZNKCkpOwotICAgIGlmICghSlNET01XaW5kb3c6OmNvbW1vblZNKCkuaGVhcC5pc0N1
cnJlbnRUaHJlYWRCdXN5KCkpIHsKLSAgICAgICAgSlNET01XaW5kb3c6OmNvbW1vblZNKCkuaGVh
cC5jb2xsZWN0QWxsR2FyYmFnZSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGNvbW1vblZNKCkp
OworICAgIGlmICghY29tbW9uVk0oKS5oZWFwLmlzQ3VycmVudFRocmVhZEJ1c3koKSkgeworICAg
ICAgICBjb21tb25WTSgpLmhlYXAuY29sbGVjdEFsbEdhcmJhZ2UoKTsKICAgICAgICAgV1RGOjpy
ZWxlYXNlRmFzdE1hbGxvY0ZyZWVNZW1vcnkoKTsKICAgICB9CiB9CkBAIC05MSw5ICs5MSw5IEBA
IHZvaWQgR0NDb250cm9sbGVyOjpnYXJiYWdlQ29sbGVjdE5vdygpCiB2b2lkIEdDQ29udHJvbGxl
cjo6Z2FyYmFnZUNvbGxlY3ROb3dJZk5vdERvbmVSZWNlbnRseSgpCiB7CiAjaWYgVVNFKENGKSB8
fCBVU0UoR0xJQikKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0o
KSk7Ci0gICAgaWYgKCFKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS5oZWFwLmlzQ3VycmVudFRocmVh
ZEJ1c3koKSkKLSAgICAgICAgSlNET01XaW5kb3c6OmNvbW1vblZNKCkuaGVhcC5jb2xsZWN0QWxs
R2FyYmFnZUlmTm90RG9uZVJlY2VudGx5KCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9u
Vk0oKSk7CisgICAgaWYgKCFjb21tb25WTSgpLmhlYXAuaXNDdXJyZW50VGhyZWFkQnVzeSgpKQor
ICAgICAgICBjb21tb25WTSgpLmhlYXAuY29sbGVjdEFsbEdhcmJhZ2VJZk5vdERvbmVSZWNlbnRs
eSgpOwogI2Vsc2UKICAgICBnYXJiYWdlQ29sbGVjdFNvb24oKTsKICNlbmRpZgpAQCAtMTEzLDE5
ICsxMTMsMTkgQEAgdm9pZCBHQ0NvbnRyb2xsZXI6OmdhcmJhZ2VDb2xsZWN0T25BbHRlcgogCiB2
b2lkIEdDQ29udHJvbGxlcjo6c2V0SmF2YVNjcmlwdEdhcmJhZ2VDb2xsZWN0b3JUaW1lckVuYWJs
ZWQoYm9vbCBlbmFibGUpCiB7Ci0gICAgSlNET01XaW5kb3c6OmNvbW1vblZNKCkuaGVhcC5zZXRH
YXJiYWdlQ29sbGVjdGlvblRpbWVyRW5hYmxlZChlbmFibGUpOworICAgIGNvbW1vblZNKCkuaGVh
cC5zZXRHYXJiYWdlQ29sbGVjdGlvblRpbWVyRW5hYmxlZChlbmFibGUpOwogfQogCiB2b2lkIEdD
Q29udHJvbGxlcjo6ZGVsZXRlQWxsQ29kZShEZWxldGVBbGxDb2RlRWZmb3J0IGVmZm9ydCkKIHsK
LSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7Ci0gICAgSlNE
T01XaW5kb3c6OmNvbW1vblZNKCkuZGVsZXRlQWxsQ29kZShlZmZvcnQpOworICAgIEpTTG9ja0hv
bGRlciBsb2NrKGNvbW1vblZNKCkpOworICAgIGNvbW1vblZNKCkuZGVsZXRlQWxsQ29kZShlZmZv
cnQpOwogfQogCiB2b2lkIEdDQ29udHJvbGxlcjo6ZGVsZXRlQWxsTGlua2VkQ29kZShEZWxldGVB
bGxDb2RlRWZmb3J0IGVmZm9ydCkKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRv
dzo6Y29tbW9uVk0oKSk7Ci0gICAgSlNET01XaW5kb3c6OmNvbW1vblZNKCkuZGVsZXRlQWxsTGlu
a2VkQ29kZShlZmZvcnQpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGNvbW1vblZNKCkpOworICAg
IGNvbW1vblZNKCkuZGVsZXRlQWxsTGlua2VkQ29kZShlZmZvcnQpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQ
YXRoTlNSZXNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwCShyZXZpc2lvbiAyMDk2NDcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJKU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5oIgogCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNp
bmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRl
ICJGcmFtZS5oIgpAQCAtNjksNyArNzAsNyBAQCBTdHJpbmcgSlNDdXN0b21YUGF0aE5TUmVzb2x2
ZXI6Omxvb2t1cE5hCiB7CiAgICAgQVNTRVJUKG1fY3VzdG9tUmVzb2x2ZXIpOwogCi0gICAgSlNM
b2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9jayhjb21tb25WTSgpKTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZ2xvYmFs
T2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAgICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCShyZXZpc2lvbiAyMDk2NDcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Myw2ICsyMyw3IEBACiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAKICNpbmNsdWRlICJDYWNo
ZWRTY3JpcHQuaCIKKyNpbmNsdWRlICJDb21tb25WTS5oIgogI2luY2x1ZGUgIkRPTUNvbnN0cnVj
dG9yV2l0aERvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oIgpAQCAtNjEsNyArNjIsNyBAQCBTVEFUSUNfQVNT
RVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoCiAKIHZvaWQgYWRkSW1wdXJlUHJvcGVydHko
Y29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgSlNET01XaW5kb3c6OmNv
bW1vblZNKCkuYWRkSW1wdXJlUHJvcGVydHkocHJvcGVydHlOYW1lKTsKKyAgICBjb21tb25WTSgp
LmFkZEltcHVyZVByb3BlcnR5KHByb3BlcnR5TmFtZSk7CiB9CiAKIEpTVmFsdWUganNPd25lZFN0
cmluZ09yTnVsbChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcykKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAkocmV2aXNpb24g
MjA5NjQ3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVkZSAiQWN0aXZlRE9N
Q2FsbGJhY2tNaWNyb3Rhc2suaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRlICJDb21t
b25WTS5oIgogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5j
bHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgpAQCAtMjQ1LDMwICsyNDYsNiBAQCBKU0RPTVdp
bmRvd1NoZWxsKiBKU0RPTVdpbmRvd0Jhc2U6OnNoZWxsCiAgICAgcmV0dXJuIG1fc2hlbGw7CiB9
CiAKLVZNJiBKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkKLXsKLSAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwotCi0gICAgc3RhdGljIFZNKiB2bSA9IG51bGxwdHI7Ci0gICAgaWYgKCF2bSkg
ewotICAgICAgICBTY3JpcHRDb250cm9sbGVyOjppbml0aWFsaXplVGhyZWFkaW5nKCk7Ci0gICAg
ICAgIHZtID0gJlZNOjpjcmVhdGVMZWFrZWQoTGFyZ2VIZWFwKS5sZWFrUmVmKCk7Ci0gICAgICAg
IHZtLT5oZWFwLmFjcXVpcmVBY2Nlc3MoKTsgLy8gQXQgYW55IHRpbWUsIHdlIG1heSBkbyB0aGlu
Z3MgdGhhdCBhZmZlY3QgdGhlIEdDLgotI2lmICFQTEFURk9STShJT1MpCi0gICAgICAgIHZtLT5z
ZXRFeGNsdXNpdmVUaHJlYWQoc3RkOjp0aGlzX3RocmVhZDo6Z2V0X2lkKCkpOwotI2Vsc2UKLSAg
ICAgICAgdm0tPmhlYXAuc2V0UnVuTG9vcChXZWJUaHJlYWRSdW5Mb29wKCkpOwotICAgICAgICB2
bS0+aGVhcC5tYWNoaW5lVGhyZWFkcygpLmFkZEN1cnJlbnRUaHJlYWQoKTsKLSNlbmRpZgotCi0g
ICAgICAgIHZtLT5zZXRHbG9iYWxDb25zdFJlZGVjbGFyYXRpb25TaG91bGRUaHJvdyhTZXR0aW5n
czo6Z2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9uU2hvdWxkVGhyb3coKSk7Ci0KLSAgICAgICAgaW5p
dE5vcm1hbFdvcmxkQ2xpZW50RGF0YSh2bSk7Ci0gICAgfQotCi0gICAgcmV0dXJuICp2bTsKLX0K
LQogLy8gSlNET01HbG9iYWxPYmplY3QqIGlzIGlnbm9yZWQsIGFjY2Vzc2luZyBhIHdpbmRvdyBp
biBhbnkgY29udGV4dCB3aWxsCiAvLyB1c2UgdGhhdCBET01XaW5kb3cncyBwcm90b3R5cGUgY2hh
aW4uCiBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCosIERP
TVdpbmRvdyYgZG9tV2luZG93KQpAQCAtMzA5LDcgKzI4Niw3IEBAIEpTRE9NV2luZG93KiB0b0pT
RE9NV2luZG93KEpTVmFsdWUgdmFsdWUKIAogdm9pZCBKU0RPTVdpbmRvd0Jhc2U6OmZpcmVGcmFt
ZUNsZWFyZWRXYXRjaHBvaW50c0ZvcldpbmRvdyhET01XaW5kb3cqIHdpbmRvdykKIHsKLSAgICBK
U0M6OlZNJiB2bSA9IEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKTsKKyAgICBKU0M6OlZNJiB2
bSA9IGNvbW1vblZNKCk7CiAgICAgSlNWTUNsaWVudERhdGEqIGNsaWVudERhdGEgPSBzdGF0aWNf
Y2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwogICAgIFZlY3RvcjxSZWY8RE9N
V3JhcHBlcldvcmxkPj4gd3JhcHBlcldvcmxkczsKICAgICBjbGllbnREYXRhLT5nZXRBbGxXb3Js
ZHMod3JhcHBlcldvcmxkcyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TVdpbmRvd0Jhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTVdpbmRvd0Jhc2UuaAkocmV2aXNpb24gMjA5NjQ3KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDYg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIEpTRE9NV2luZG93U2hlbGwqIHNoZWxs
KCkgY29uc3Q7CiAKLSAgICAgICAgc3RhdGljIEpTQzo6Vk0mIGNvbW1vblZNKCk7CiAgICAgICAg
IHN0YXRpYyB2b2lkIGZpcmVGcmFtZUNsZWFyZWRXYXRjaHBvaW50c0ZvcldpbmRvdyhET01XaW5k
b3cqKTsKICAgICAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01XaW5kb3dTaGVsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01XaW5kb3dTaGVsbC5jcHAJKHJldmlzaW9uIDIwOTY0NykKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNET01XaW5kb3dT
aGVsbC5oIgogCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2lu
Y2x1ZGUgIkdDQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCkBAIC03OSw3
ICs4MCw3IEBAIHZvaWQgSlNET01XaW5kb3dTaGVsbDo6c2V0V2luZG93KFJlZlB0cjwKICAgICAv
LyB3aGVuIHdlIGFsbG9jYXRlIHRoZSBnbG9iYWwgb2JqZWN0LiAoT25jZSB0aGUgZ2xvYmFsIG9i
amVjdCBpcyBmdWxseQogICAgIC8vIGNvbnN0cnVjdGVkLCBpdCBjYW4gbWFyayBpdHMgb3duIHBy
b3RvdHlwZS4pCiAgICAgCi0gICAgVk0mIHZtID0gSlNET01XaW5kb3c6OmNvbW1vblZNKCk7Cisg
ICAgVk0mIHZtID0gY29tbW9uVk0oKTsKICAgICBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVy
ZSA9IEpTRE9NV2luZG93UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIDAsIGpzTnVsbCgp
KTsKICAgICBTdHJvbmc8SlNET01XaW5kb3dQcm90b3R5cGU+IHByb3RvdHlwZSh2bSwgSlNET01X
aW5kb3dQcm90b3R5cGU6OmNyZWF0ZSh2bSwgMCwgcHJvdG90eXBlU3RydWN0dXJlKSk7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5oCShyZXZpc2lvbiAy
MDk2NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uaAkod29y
a2luZyBjb3B5KQpAQCAtNjUsMTIgKzY1LDcgQEAgaW5saW5lIHZvaWQgd2lsbENyZWF0ZVBvc3Np
Ymx5T3JwaGFuZWRUcgogCiBpbmxpbmUgdm9pZCogcm9vdChOb2RlKiBub2RlKQogewotICAgIGlm
IChub2RlLT5pbkRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiAmbm9kZS0+ZG9jdW1lbnQoKTsK
LQotICAgIHdoaWxlIChub2RlLT5wYXJlbnRPclNoYWRvd0hvc3ROb2RlKCkpCi0gICAgICAgIG5v
ZGUgPSBub2RlLT5wYXJlbnRPclNoYWRvd0hvc3ROb2RlKCk7Ci0gICAgcmV0dXJuIG5vZGU7Cisg
ICAgcmV0dXJuIG5vZGUtPm9wYXF1ZVJvb3QoKTsKIH0KIAogaW5saW5lIHZvaWQqIHJvb3QoTm9k
ZSYgbm9kZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhY2hlZEZy
YW1lRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2Ny
aXB0Q2FjaGVkRnJhbWVEYXRhLmNwcAkocmV2aXNpb24gMjA5NjQ3KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNjcmlwdENh
Y2hlZEZyYW1lRGF0YS5oIgogCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJEb2N1
bWVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiR0NDb250cm9sbGVyLmgiCkBA
IC00OSw3ICs1MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU2NyaXB0Q2FjaGVkRnJhbWVE
YXRhOjpTY3JpcHRDYWNoZWRGcmFtZURhdGEoRnJhbWUmIGZyYW1lKQogewotICAgIEpTTG9ja0hv
bGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2soY29tbW9uVk0oKSk7CiAKICAgICBTY3JpcHRDb250cm9sbGVyJiBzY3JpcHRDb250cm9s
bGVyID0gZnJhbWUuc2NyaXB0KCk7CiAgICAgVmVjdG9yPEpTQzo6U3Ryb25nPEpTRE9NV2luZG93
U2hlbGw+PiB3aW5kb3dTaGVsbHMgPSBzY3JpcHRDb250cm9sbGVyLndpbmRvd1NoZWxscygpOwpA
QCAtNzEsNyArNzIsNyBAQCBTY3JpcHRDYWNoZWRGcmFtZURhdGE6On5TY3JpcHRDYWNoZWRGcmFt
CiAKIHZvaWQgU2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjpyZXN0b3JlKEZyYW1lJiBmcmFtZSkKIHsK
LSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAg
IEpTTG9ja0hvbGRlciBsb2NrKGNvbW1vblZNKCkpOwogCiAgICAgUGFnZSogcGFnZSA9IGZyYW1l
LnBhZ2UoKTsKICAgICBTY3JpcHRDb250cm9sbGVyJiBzY3JpcHRDb250cm9sbGVyID0gZnJhbWUu
c2NyaXB0KCk7CkBAIC0xMDYsNyArMTA3LDcgQEAgdm9pZCBTY3JpcHRDYWNoZWRGcmFtZURhdGE6
OmNsZWFyKCkKICAgICBpZiAobV93aW5kb3dzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhjb21tb25WTSgpKTsKICAgICBtX3dpbmRvd3MuY2xlYXIoKTsK
ICAgICBHQ0NvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmdhcmJhZ2VDb2xsZWN0U29vbigpOwogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5j
cHAJKHJldmlzaW9uIDIwOTY0NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNs
dWRlICJCcmlkZ2VKU0MuaCIKICNpbmNsdWRlICJDYWNoZWRNb2R1bGVTY3JpcHQuaCIKKyNpbmNs
dWRlICJDb21tb25WTS5oIgogI2luY2x1ZGUgIkNvbnRlbnRTZWN1cml0eVBvbGljeS5oIgogI2lu
Y2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKQEAgLTEwNSw3ICsx
MDYsNyBAQCBTY3JpcHRDb250cm9sbGVyOjp+U2NyaXB0Q29udHJvbGxlcigpCiAgICAgZGlzY29u
bmVjdFBsYXRmb3JtU2NyaXB0T2JqZWN0cygpOwogCiAgICAgaWYgKG1fY2FjaGVhYmxlQmluZGlu
Z1Jvb3RPYmplY3QpIHsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNl
Ojpjb21tb25WTSgpKTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7CiAg
ICAgICAgIG1fY2FjaGVhYmxlQmluZGluZ1Jvb3RPYmplY3QtPmludmFsaWRhdGUoKTsKICAgICAg
ICAgbV9jYWNoZWFibGVCaW5kaW5nUm9vdE9iamVjdCA9IG51bGxwdHI7CiAgICAgfQpAQCAtMjcx
LDcgKzI3Miw3IEBAIEpTQzo6SlNWYWx1ZSBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZU0KIAog
UmVmPERPTVdyYXBwZXJXb3JsZD4gU2NyaXB0Q29udHJvbGxlcjo6Y3JlYXRlV29ybGQoKQogewot
ICAgIHJldHVybiBET01XcmFwcGVyV29ybGQ6OmNyZWF0ZShKU0RPTVdpbmRvdzo6Y29tbW9uVk0o
KSk7CisgICAgcmV0dXJuIERPTVdyYXBwZXJXb3JsZDo6Y3JlYXRlKGNvbW1vblZNKCkpOwogfQog
CiBWZWN0b3I8SlNDOjpTdHJvbmc8SlNET01XaW5kb3dTaGVsbD4+IFNjcmlwdENvbnRyb2xsZXI6
OndpbmRvd1NoZWxscygpCkBAIC0yODMsNyArMjg0LDcgQEAgVmVjdG9yPEpTQzo6U3Ryb25nPEpT
RE9NV2luZG93U2hlbGw+PiBTYwogCiB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmdldEFsbFdvcmxk
cyhWZWN0b3I8UmVmPERPTVdyYXBwZXJXb3JsZD4+JiB3b3JsZHMpCiB7Ci0gICAgc3RhdGljX2Nh
c3Q8SlNWTUNsaWVudERhdGEqPihKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS5jbGllbnREYXRhKS0+
Z2V0QWxsV29ybGRzKHdvcmxkcyk7CisgICAgc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPihj
b21tb25WTSgpLmNsaWVudERhdGEpLT5nZXRBbGxXb3JsZHMod29ybGRzKTsKIH0KIAogdm9pZCBT
Y3JpcHRDb250cm9sbGVyOjpjbGVhcldpbmRvd1NoZWxsKERPTVdpbmRvdyogbmV3RE9NV2luZG93
LCBib29sIGdvaW5nSW50b1BhZ2VDYWNoZSkKQEAgLTI5MSw3ICsyOTIsNyBAQCB2b2lkIFNjcmlw
dENvbnRyb2xsZXI6OmNsZWFyV2luZG93U2hlbGwoCiAgICAgaWYgKG1fd2luZG93U2hlbGxzLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01X
aW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhjb21tb25WTSgp
KTsKIAogICAgIFZlY3RvcjxKU0M6OlN0cm9uZzxKU0RPTVdpbmRvd1NoZWxsPj4gd2luZG93U2hl
bGxzID0gdGhpcy0+d2luZG93U2hlbGxzKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3
aW5kb3dTaGVsbHMuc2l6ZSgpOyArK2kpIHsKQEAgLTQ5Niw3ICs0OTcsNyBAQCBCaW5kaW5nczo6
Um9vdE9iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6CiAgICAgICAgIHJldHVybiAwOwogCiAgICAg
aWYgKCFtX2NhY2hlYWJsZUJpbmRpbmdSb290T2JqZWN0KSB7Ci0gICAgICAgIEpTTG9ja0hvbGRl
ciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgICAgIEpTTG9ja0hvbGRl
ciBsb2NrKGNvbW1vblZNKCkpOwogICAgICAgICBtX2NhY2hlYWJsZUJpbmRpbmdSb290T2JqZWN0
ID0gQmluZGluZ3M6OlJvb3RPYmplY3Q6OmNyZWF0ZSgwLCBnbG9iYWxPYmplY3QocGx1Z2luV29y
bGQoKSkpOwogICAgIH0KICAgICByZXR1cm4gbV9jYWNoZWFibGVCaW5kaW5nUm9vdE9iamVjdC5n
ZXQoKTsKQEAgLTUwOCw3ICs1MDksNyBAQCBCaW5kaW5nczo6Um9vdE9iamVjdCogU2NyaXB0Q29u
dHJvbGxlcjo6CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaWYgKCFtX2JpbmRpbmdSb290T2Jq
ZWN0KSB7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9u
Vk0oKSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGNvbW1vblZNKCkpOwogICAgICAgICBt
X2JpbmRpbmdSb290T2JqZWN0ID0gQmluZGluZ3M6OlJvb3RPYmplY3Q6OmNyZWF0ZSgwLCBnbG9i
YWxPYmplY3QocGx1Z2luV29ybGQoKSkpOwogICAgIH0KICAgICByZXR1cm4gbV9iaW5kaW5nUm9v
dE9iamVjdC5nZXQoKTsKQEAgLTUzOSw3ICs1NDAsNyBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6
OmNvbGxlY3RJc29sYXRlZENvCiBOUE9iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6d2luZG93U2Ny
aXB0TlBPYmplY3QoKQogewogICAgIGlmICghbV93aW5kb3dTY3JpcHROUE9iamVjdCkgewotICAg
ICAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAg
ICAgICBKU0xvY2tIb2xkZXIgbG9jayhjb21tb25WTSgpKTsKICAgICAgICAgaWYgKGNhbkV4ZWN1
dGVTY3JpcHRzKE5vdEFib3V0VG9FeGVjdXRlU2NyaXB0KSkgewogICAgICAgICAgICAgLy8gSmF2
YVNjcmlwdCBpcyBlbmFibGVkLCBzbyB0aGVyZSBpcyBhIEphdmFTY3JpcHQgd2luZG93IG9iamVj
dC4KICAgICAgICAgICAgIC8vIFJldHVybiBhbiBOUE9iamVjdCBib3VuZCB0byB0aGUgd2luZG93
IG9iamVjdC4KQEAgLTU3NCw3ICs1NzUsNyBAQCBKU09iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6
anNPYmplY3RGb3JQCiAgICAgaWYgKCFjYW5FeGVjdXRlU2NyaXB0cyhOb3RBYm91dFRvRXhlY3V0
ZVNjcmlwdCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNE
T01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhjb21tb25W
TSgpKTsKIAogICAgIC8vIENyZWF0ZSBhIEpTT2JqZWN0IGJvdW5kIHRvIHRoaXMgZWxlbWVudAog
ICAgIEpTRE9NV2luZG93KiBnbG9iYWxPYmogPSBnbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSk7
CkBAIC02MTEsNyArNjEyLDcgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhbnVwU2NyaXB0
T2JqZQogCiB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNsZWFyU2NyaXB0T2JqZWN0cygpCiB7Ci0g
ICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayhjb21tb25WTSgpKTsKIAogICAgIFJvb3RPYmplY3RNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fcm9vdE9iamVjdHMuZW5kKCk7CiAgICAgZm9yIChSb290T2JqZWN0
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fcm9vdE9iamVjdHMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxl
ck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRD
b250cm9sbGVyTWFjLm1tCShyZXZpc2lvbiAyMDk2NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRDb250cm9sbGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICsz
MCw3IEBACiAjaW1wb3J0ICJTY3JpcHRDb250cm9sbGVyLmgiCiAKICNpbXBvcnQgIkJyaWRnZUpT
Qy5oIgorI2ltcG9ydCAiQ29tbW9uVk0uaCIKICNpbXBvcnQgIkRPTVdpbmRvdy5oIgogI2ltcG9y
dCAiRnJhbWUuaCIKICNpbXBvcnQgIkZyYW1lTG9hZGVyLmgiCkBAIC0xMDAsNyArMTAxLDcgQEAg
V2ViU2NyaXB0T2JqZWN0ICpTY3JpcHRDb250cm9sbGVyOjp3aW5kbwogICAgICAgICByZXR1cm4g
bmlsOwogCiAgICAgaWYgKCFtX3dpbmRvd1NjcmlwdE9iamVjdCkgewotICAgICAgICBKU0M6OkpT
TG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgICAgIEpT
Qzo6SlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7CiAgICAgICAgIEpTQzo6QmluZGluZ3M6
OlJvb3RPYmplY3QqIHJvb3QgPSBiaW5kaW5nUm9vdE9iamVjdCgpOwogICAgICAgICBtX3dpbmRv
d1NjcmlwdE9iamVjdCA9IFtXZWJTY3JpcHRPYmplY3Qgc2NyaXB0T2JqZWN0Rm9ySlNPYmplY3Q6
dG9SZWYod2luZG93U2hlbGwocGx1Z2luV29ybGQoKSkpIG9yaWdpblJvb3RPYmplY3Q6cm9vdCBy
b290T2JqZWN0OnJvb3RdOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Db2xsZWN0
aW9uSW5kZXhDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NvbGxl
Y3Rpb25JbmRleENhY2hlLmNwcAkocmV2aXNpb24gMjA5NjQ3KQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL0NvbGxlY3Rpb25JbmRleENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTQgKzI2
LDE1IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ29sbGVjdGlvbkluZGV4Q2Fj
aGUuaCIKIAorI2luY2x1ZGUgIkNvbW1vblZNLmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCi0j
aW5jbHVkZSAiSlNET01XaW5kb3dCYXNlLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9pZCByZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZEZv
ckNvbGxlY3Rpb25JbmRleENhY2hlKHNpemVfdCBjb3N0KQogewotICAgIEpTQzo6Vk0mIHZtID0g
SlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpOworICAgIEpTQzo6Vk0mIHZtID0gY29tbW9uVk0o
KTsKICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKICAgICAvLyBGSVhNRTogQWRvcHQg
cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkLCBhbmQgc3dpdGNoIHRvIHJlcG9ydEV4dHJhTWVtb3J5
QWxsb2NhdGVkLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNDI1OTUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAJKHJldmlzaW9u
IDIwOTY0NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xs
IChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChr
b2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVl
bGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAy
MDA4LCAyMDA5LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwg
MjAwOSwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRl
ICJDaHJvbWUuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKICNpbmNsdWRlICJDbGFzc0Nv
bGxlY3Rpb24uaCIKKyNpbmNsdWRlICJDb21tb25WTS5oIgogI2luY2x1ZGUgIkNvbnRhaW5lck5v
ZGVBbGdvcml0aG1zLmgiCiAjaW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1l
cy5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRo
bXMuY3BwCShyZXZpc2lvbiAyMDk2NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVy
Tm9kZUFsZ29yaXRobXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuaCIKIAor
I2luY2x1ZGUgIkNvbW1vblZNLmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiTm9FdmVu
dERpc3BhdGNoQXNzZXJ0aW9uLmgiCkBAIC0zMywxMCArMzQsMTAgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi12b2lkIG5vdGlmeU5vZGVJbnNlcnRlZEludG9UcmVlKENvbnRhaW5lck5vZGUm
IGluc2VydGlvblBvaW50LCBDb250YWluZXJOb2RlJiwgTm9kZVZlY3RvciYgcG9zdEluc2VydGlv
bk5vdGlmaWNhdGlvblRhcmdldHMpOwotdm9pZCBub3RpZnlOb2RlSW5zZXJ0ZWRJbnRvRG9jdW1l
bnQoQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQsIE5vZGUmLCBOb2RlVmVjdG9yJiBwb3N0
SW5zZXJ0aW9uTm90aWZpY2F0aW9uVGFyZ2V0cyk7Ci12b2lkIG5vdGlmeU5vZGVSZW1vdmVkRnJv
bVRyZWUoQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQsIENvbnRhaW5lck5vZGUmKTsKLXZv
aWQgbm90aWZ5Tm9kZVJlbW92ZWRGcm9tRG9jdW1lbnQoQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9u
UG9pbnQsIE5vZGUmKTsKK3N0YXRpYyB2b2lkIG5vdGlmeU5vZGVJbnNlcnRlZEludG9UcmVlKENv
bnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50LCBDb250YWluZXJOb2RlJiwgTm9kZVZlY3RvciYg
cG9zdEluc2VydGlvbk5vdGlmaWNhdGlvblRhcmdldHMpOworc3RhdGljIHZvaWQgbm90aWZ5Tm9k
ZUluc2VydGVkSW50b0RvY3VtZW50KENvbnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50LCBOb2Rl
JiwgTm9kZVZlY3RvciYgcG9zdEluc2VydGlvbk5vdGlmaWNhdGlvblRhcmdldHMpOworc3RhdGlj
IHZvaWQgbm90aWZ5Tm9kZVJlbW92ZWRGcm9tVHJlZShDb250YWluZXJOb2RlJiBpbnNlcnRpb25Q
b2ludCwgQ29udGFpbmVyTm9kZSYpOworc3RhdGljIHZvaWQgbm90aWZ5Tm9kZVJlbW92ZWRGcm9t
RG9jdW1lbnQoQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQsIE5vZGUmKTsKIAogc3RhdGlj
IHZvaWQgbm90aWZ5RGVzY2VuZGFudEluc2VydGVkSW50b0RvY3VtZW50KENvbnRhaW5lck5vZGUm
IGluc2VydGlvblBvaW50LCBDb250YWluZXJOb2RlJiBub2RlLCBOb2RlVmVjdG9yJiBwb3N0SW5z
ZXJ0aW9uTm90aWZpY2F0aW9uVGFyZ2V0cykKIHsKQEAgLTEwMSw2ICsxMDIsOCBAQCB2b2lkIG5v
dGlmeUNoaWxkTm9kZUluc2VydGVkKENvbnRhaW5lck5vCiAgICAgICAgIG5vdGlmeU5vZGVJbnNl
cnRlZEludG9Eb2N1bWVudChpbnNlcnRpb25Qb2ludCwgbm9kZSwgcG9zdEluc2VydGlvbk5vdGlm
aWNhdGlvblRhcmdldHMpOwogICAgIGVsc2UgaWYgKGlzPENvbnRhaW5lck5vZGU+KG5vZGUpKQog
ICAgICAgICBub3RpZnlOb2RlSW5zZXJ0ZWRJbnRvVHJlZShpbnNlcnRpb25Qb2ludCwgZG93bmNh
c3Q8Q29udGFpbmVyTm9kZT4obm9kZSksIHBvc3RJbnNlcnRpb25Ob3RpZmljYXRpb25UYXJnZXRz
KTsKKworICAgIHdyaXRlQmFycmllck9wYXF1ZVJvb3QoWyZpbnNlcnRpb25Qb2ludF0gKCkgLT4g
dm9pZCogeyByZXR1cm4gaW5zZXJ0aW9uUG9pbnQub3BhcXVlUm9vdCgpOyB9KTsKIH0KIAogdm9p
ZCBub3RpZnlOb2RlUmVtb3ZlZEZyb21Eb2N1bWVudChDb250YWluZXJOb2RlJiBpbnNlcnRpb25Q
b2ludCwgTm9kZSYgbm9kZSkKQEAgLTE1Miw2ICsxNTUsOCBAQCB2b2lkIG5vdGlmeU5vZGVSZW1v
dmVkRnJvbVRyZWUoQ29udGFpbmVyCiAKIHZvaWQgbm90aWZ5Q2hpbGROb2RlUmVtb3ZlZChDb250
YWluZXJOb2RlJiBpbnNlcnRpb25Qb2ludCwgTm9kZSYgY2hpbGQpCiB7CisgICAgd3JpdGVCYXJy
aWVyT3BhcXVlUm9vdChbJmNoaWxkXSAoKSAtPiB2b2lkKiB7IHJldHVybiAmY2hpbGQ7IH0pOwor
CiAgICAgaWYgKCFjaGlsZC5pbkRvY3VtZW50KCkpIHsKICAgICAgICAgaWYgKGlzPENvbnRhaW5l
ck5vZGU+KGNoaWxkKSkKICAgICAgICAgICAgIG5vdGlmeU5vZGVSZW1vdmVkRnJvbVRyZWUoaW5z
ZXJ0aW9uUG9pbnQsIGRvd25jYXN0PENvbnRhaW5lck5vZGU+KGNoaWxkKSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDIwOTY0NykKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRl
ICJDaHJvbWUuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKICNpbmNsdWRlICJDb21tZW50
LmgiCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJDb21wb3NpdGlvbkV2ZW50Lmgi
CiAjaW5jbHVkZSAiQ29udGVudFNlY3VyaXR5UG9saWN5LmgiCiAjaW5jbHVkZSAiQ29va2llSmFy
LmgiCkBAIC0yMzY1LDcgKzIzNjYsNyBAQCB2b2lkIERvY3VtZW50OjpyZXN1bWVEZXZpY2VNb3Rp
b25BbmRPcmllCiAKIGJvb2wgRG9jdW1lbnQ6OnNob3VsZEJ5cGFzc01haW5Xb3JsZENvbnRlbnRT
ZWN1cml0eVBvbGljeSgpIGNvbnN0CiB7Ci0gICAgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IEpTRE9NV2luZG93Ojpjb21tb25WTSgpLnRvcENhbGxGcmFtZTsKKyAgICBKU0M6OkNhbGxGcmFt
ZSogY2FsbEZyYW1lID0gY29tbW9uVk0oKS50b3BDYWxsRnJhbWU7CiAgICAgaWYgKGNhbGxGcmFt
ZSA9PSBKU0M6OkNhbGxGcmFtZTo6bm9DYWxsZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIERPTVdyYXBwZXJXb3JsZCYgZG9tV3JhcHBlcldvcmxkID0gY3VycmVudFdvcmxkKGNhbGxG
cmFtZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAyMDk2NDcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzODYsNiArMjM4NiwxOCBA
QCBib29sIE5vZGU6OmluUmVuZGVyZWREb2N1bWVudCgpIGNvbnN0CiAgICAgcmV0dXJuIGluRG9j
dW1lbnQoKSAmJiBkb2N1bWVudCgpLmhhc0xpdmluZ1JlbmRlclRyZWUoKTsKIH0KIAordm9pZCog
Tm9kZTo6b3BhcXVlUm9vdFNsb3coKSBjb25zdAoreworICAgIGNvbnN0IE5vZGUqIG5vZGUgPSB0
aGlzOworICAgIGZvciAoOzspIHsKKyAgICAgICAgY29uc3QgTm9kZSogbmV4dE5vZGUgPSBub2Rl
LT5wYXJlbnRPclNoYWRvd0hvc3ROb2RlKCk7CisgICAgICAgIGlmICghbmV4dE5vZGUpCisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgbm9kZSA9IG5leHROb2RlOworICAgIH0KKyAgICByZXR1
cm4gY29uc3RfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KG5vZGUpKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZS5oCShyZXZpc2lvbiAyMDk2NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjYsNiArMjY2LDggQEAgcHVibGljOgogICAgICAg
ICBib29sIGNvbXBvc2VkOwogICAgIH07CiAgICAgTm9kZSYgZ2V0Um9vdE5vZGUoY29uc3QgR2V0
Um9vdE5vZGVPcHRpb25zJikgY29uc3Q7CisgICAgCisgICAgdm9pZCogb3BhcXVlUm9vdCgpIGNv
bnN0OwogCiAgICAgLy8gVXNlIHdoZW4gaXQncyBndWFyYW50ZWVkIHRvIHRoYXQgc2hhZG93SG9z
dCBpcyBudWxsLgogICAgIENvbnRhaW5lck5vZGUqIHBhcmVudE5vZGVHdWFyYW50ZWVkSG9zdEZy
ZWUoKSBjb25zdDsKQEAgLTY3MSw2ICs2NzMsOCBAQCBwcml2YXRlOgogICAgIEhhc2hTZXQ8TXV0
YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbio+KiB0cmFuc2llbnRNdXRhdGlvbk9ic2VydmVyUmVn
aXN0cnkoKTsKIAogICAgIHZvaWQgYWRqdXN0U3R5bGVWYWxpZGl0eShTdHlsZTo6VmFsaWRpdHks
IFN0eWxlOjpJbnZhbGlkYXRpb25Nb2RlKTsKKyAgICAKKyAgICB2b2lkKiBvcGFxdWVSb290U2xv
dygpIGNvbnN0OwogCiAgICAgaW50IG1fcmVmQ291bnQ7CiAgICAgbXV0YWJsZSB1aW50MzJfdCBt
X25vZGVGbGFnczsKQEAgLTc1Nyw2ICs3NjEsMTUgQEAgaW5saW5lIENvbnRhaW5lck5vZGUqIE5v
ZGU6OnBhcmVudE5vZGUoKQogICAgIHJldHVybiBtX3BhcmVudE5vZGU7CiB9CiAKK2lubGluZSB2
b2lkKiBOb2RlOjpvcGFxdWVSb290KCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogUG9zc2libGUg
cmFjZT8KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1
NzEzCisgICAgaWYgKGluRG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuICZkb2N1bWVudCgpOwor
ICAgIHJldHVybiBvcGFxdWVSb290U2xvdygpOworfQorCiBpbmxpbmUgQ29udGFpbmVyTm9kZSog
Tm9kZTo6cGFyZW50Tm9kZUd1YXJhbnRlZWRIb3N0RnJlZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJU
KCFpc1NoYWRvd1Jvb3QoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0
aW9uQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuY3BwCShyZXZpc2lvbiAyMDk2NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5
LDcgQEAKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAKICNpbmNsdWRlICJD
YWNoZWRTY3JpcHQuaCIKKyNpbmNsdWRlICJDb21tb25WTS5oIgogI2luY2x1ZGUgIkRPTVRpbWVy
LmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VDb250ZXh0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
QEAgLTQ3Nyw3ICs0NzgsNyBAQCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIFNjcmlwdEV4ZWN1
dGlvCiBKU0M6OlZNJiBTY3JpcHRFeGVjdXRpb25Db250ZXh0Ojp2bSgpCiB7CiAgICAgaWYgKGlz
PERvY3VtZW50PigqdGhpcykpCi0gICAgICAgIHJldHVybiBKU0RPTVdpbmRvdzo6Y29tbW9uVk0o
KTsKKyAgICAgICAgcmV0dXJuIGNvbW1vblZNKCk7CiAKICAgICByZXR1cm4gZG93bmNhc3Q8V29y
a2VyR2xvYmFsU2NvcGU+KCp0aGlzKS5zY3JpcHQoKS0+dm0oKTsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEltYWdlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxJbWFnZUxvYWRlci5jcHAJKHJldmlzaW9uIDIwOTY0NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMs
NiArMjMsNyBAQAogI2luY2x1ZGUgIkhUTUxJbWFnZUxvYWRlci5oIgogCiAjaW5jbHVkZSAiQ2Fj
aGVkSW1hZ2UuaCIKKyNpbmNsdWRlICJDb21tb25WTS5oIgogI2luY2x1ZGUgIkRPTVdpbmRvdy5o
IgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJFdmVudC5oIgpAQCAtODQsNyArODUs
NyBAQCB2b2lkIEhUTUxJbWFnZUxvYWRlcjo6bm90aWZ5RmluaXNoZWQoQ2FjCiAgICAgYm9vbCBs
b2FkRXJyb3IgPSBjYWNoZWRJbWFnZS5lcnJvck9jY3VycmVkKCkgfHwgY2FjaGVkSW1hZ2UucmVz
cG9uc2UoKS5odHRwU3RhdHVzQ29kZSgpID49IDQwMDsKICAgICBpZiAoIWxvYWRFcnJvcikgewog
ICAgICAgICBpZiAoIWVsZW1lbnQoKS5pbkRvY3VtZW50KCkpIHsKLSAgICAgICAgICAgIEpTQzo6
Vk0mIHZtID0gSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpOworICAgICAgICAgICAgSlNDOjpW
TSYgdm0gPSBjb21tb25WTSgpOwogICAgICAgICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2
bSk7CiAgICAgICAgICAgICAvLyBGSVhNRTogQWRvcHQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVk
LCBhbmQgc3dpdGNoIHRvIHJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkLgogICAgICAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjU5NQpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDk2NDcp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAjaW5jbHVk
ZSAiQ2xpZW50UmVjdC5oIgogI2luY2x1ZGUgIkNsaWVudFJlY3RMaXN0LmgiCisjaW5jbHVkZSAi
Q29tbW9uVk0uaCIKICNpbmNsdWRlICJDb250ZW50U2VjdXJpdHlQb2xpY3kuaCIKICNpbmNsdWRl
ICJDb250ZW50VHlwZS5oIgogI2luY2x1ZGUgIkNvb2tpZUphci5oIgpAQCAtODQ5LDcgKzg1MCw3
IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cGF1c2VBZnRlckRldGFjaGUKIAogICAgIHNpemVf
dCBleHRyYU1lbW9yeUNvc3QgPSBtX3BsYXllci0+ZXh0cmFNZW1vcnlDb3N0KCk7CiAgICAgaWYg
KGV4dHJhTWVtb3J5Q29zdCA+IG1fcmVwb3J0ZWRFeHRyYU1lbW9yeUNvc3QpIHsKLSAgICAgICAg
SlNDOjpWTSYgdm0gPSBKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCk7CisgICAgICAgIEpTQzo6
Vk0mIHZtID0gY29tbW9uVk0oKTsKICAgICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7
CiAKICAgICAgICAgc2l6ZV90IGV4dHJhTWVtb3J5Q29zdERlbHRhID0gZXh0cmFNZW1vcnlDb3N0
IC0gbV9yZXBvcnRlZEV4dHJhTWVtb3J5Q29zdDsKQEAgLTY0OTYsNyArNjQ5Nyw3IEBAIFJlZlB0
cjxWaWRlb1BsYXliYWNrUXVhbGl0eT4gSFRNTE1lZGlhRWwKIERPTVdyYXBwZXJXb3JsZCYgSFRN
TE1lZGlhRWxlbWVudDo6ZW5zdXJlSXNvbGF0ZWRXb3JsZCgpCiB7CiAgICAgaWYgKCFtX2lzb2xh
dGVkV29ybGQpCi0gICAgICAgIG1faXNvbGF0ZWRXb3JsZCA9IERPTVdyYXBwZXJXb3JsZDo6Y3Jl
YXRlKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsKKyAgICAgICAgbV9pc29sYXRlZFdvcmxkID0g
RE9NV3JhcHBlcldvcmxkOjpjcmVhdGUoY29tbW9uVk0oKSk7CiAgICAgcmV0dXJuICptX2lzb2xh
dGVkV29ybGQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdl
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0lu
SW1hZ2VFbGVtZW50LmNwcAkocmV2aXNpb24gMjA5NjQ3KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMs
NyBAQAogCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCisj
aW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJDb250ZW50U2VjdXJpdHlQb2xpY3kuaCIK
ICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgpAQCAtMzY1LDcg
KzM2Niw3IEBAIHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6dXBkYXRlU25hcHMKIAogc3Rh
dGljIERPTVdyYXBwZXJXb3JsZCYgcGx1Z0luSW1hZ2VFbGVtZW50SXNvbGF0ZWRXb3JsZCgpCiB7
Ci0gICAgc3RhdGljIERPTVdyYXBwZXJXb3JsZCYgaXNvbGF0ZWRXb3JsZCA9IERPTVdyYXBwZXJX
b3JsZDo6Y3JlYXRlKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKS5sZWFrUmVmKCk7CisgICAgc3Rh
dGljIERPTVdyYXBwZXJXb3JsZCYgaXNvbGF0ZWRXb3JsZCA9IERPTVdyYXBwZXJXb3JsZDo6Y3Jl
YXRlKGNvbW1vblZNKCkpLmxlYWtSZWYoKTsKICAgICByZXR1cm4gaXNvbGF0ZWRXb3JsZDsKIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9s
bGVyLmNwcAkocmV2aXNpb24gMjA5NjQ3KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAj
aW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogCiAjaW5jbHVkZSAiQ29tbWFuZExpbmVB
UElIb3N0LmgiCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJET01XcmFwcGVyV29y
bGQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JB
cHBsaWNhdGlvbkNhY2hlQWdlbnQuaCIKQEAgLTQ3MCw3ICs0NzEsNyBAQCBQYWdlU2NyaXB0RGVi
dWdTZXJ2ZXImIEluc3BlY3RvckNvbnRyb2xsCiAKIEpTQzo6Vk0mIEluc3BlY3RvckNvbnRyb2xs
ZXI6OnZtKCkKIHsKLSAgICByZXR1cm4gSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpOworICAg
IHJldHVybiBjb21tb25WTSgpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENv
bXBvc2l0ZShGcmFtZSYgZnJhbWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFn
ZVNjcmlwdERlYnVnU2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcAkocmV2aXNpb24gMjA5NjQ3KQorKysgU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQ
YWdlU2NyaXB0RGVidWdTZXJ2ZXIuaCIKIAorI2luY2x1ZGUgIkNvbW1vblZNLmgiCiAjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFdmVudExvb3AuaCIKICNpbmNsdWRlICJGcmFtZVZp
ZXcuaCIKQEAgLTU0LDcgKzU1LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogUGFnZVNjcmlwdERlYnVnU2VydmVyOjpQYWdlU2NyaXB0RGVidWdT
ZXJ2ZXIoUGFnZSYgcGFnZSkKLSAgICA6IFNjcmlwdERlYnVnU2VydmVyKFdlYkNvcmU6OkpTRE9N
V2luZG93QmFzZTo6Y29tbW9uVk0oKSkKKyAgICA6IFNjcmlwdERlYnVnU2VydmVyKFdlYkNvcmU6
OmNvbW1vblZNKCkpCiAgICAgLCBtX3BhZ2UocGFnZSkKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvUGVyZm9ybWFuY2VMb2dnaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1BlcmZvcm1hbmNlTG9nZ2luZy5jcHAJKHJldmlzaW9uIDIwOTY0NykKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VMb2dnaW5nLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBlcmZvcm1h
bmNlTG9nZ2luZy5oIgogCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJET01XaW5k
b3cuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50
LmgiCkBAIC01Miw3ICs1Myw3IEBAIEhhc2hNYXA8Y29uc3QgY2hhciosIHNpemVfdD4gUGVyZm9y
bWFuY2UKIHsKICAgICBIYXNoTWFwPGNvbnN0IGNoYXIqLCBzaXplX3Q+IHN0YXRzOwogCi0gICAg
YXV0byYgdm0gPSBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKTsKKyAgICBhdXRvJiB2bSA9IGNvbW1v
blZNKCk7CiAgICAgc3RhdHMuYWRkKCJqYXZhc2NyaXB0X2djX2hlYXBfY2FwYWNpdHkiLCB2bS5o
ZWFwLmNhcGFjaXR5KCkpOwogICAgIHN0YXRzLmFkZCgiamF2YXNjcmlwdF9nY19oZWFwX2V4dHJh
X21lbW9yeV9zaXplIiwgdm0uaGVhcC5leHRyYU1lbW9yeVNpemUoKSk7CiAKQEAgLTc0LDcgKzc1
LDcgQEAgSGFzaE1hcDxjb25zdCBjaGFyKiwgc2l6ZV90PiBQZXJmb3JtYW5jZQogCiBIYXNoQ291
bnRlZFNldDxjb25zdCBjaGFyKj4gUGVyZm9ybWFuY2VMb2dnaW5nOjpqYXZhU2NyaXB0T2JqZWN0
Q291bnRzKCkKIHsKLSAgICByZXR1cm4gV1RGTW92ZSgqSlNET01XaW5kb3c6OmNvbW1vblZNKCku
aGVhcC5vYmplY3RUeXBlQ291bnRzKCkpOworICAgIHJldHVybiBXVEZNb3ZlKCpjb21tb25WTSgp
LmhlYXAub2JqZWN0VHlwZUNvdW50cygpKTsKIH0KIAogUGVyZm9ybWFuY2VMb2dnaW5nOjpQZXJm
b3JtYW5jZUxvZ2dpbmcoTWFpbkZyYW1lJiBtYWluRnJhbWUpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1Jlc291cmNlVXNhZ2VUaHJlYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvUmVzb3VyY2VVc2FnZVRocmVhZC5jcHAJKHJldmlzaW9uIDIwOTY0NykKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZVRocmVhZC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKIAorI2luY2x1
ZGUgIkNvbW1vblZNLmgiCiAjaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKICNpbmNsdWRlIDx0aHJl
YWQ+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KQEAgLTk4LDcgKzk5LDcgQEAgdm9pZCBS
ZXNvdXJjZVVzYWdlVGhyZWFkOjpjcmVhdGVUaHJlYWRJZgogICAgIGlmIChtX3RocmVhZElkZW50
aWZpZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fdm0gPSAmSlNET01XaW5kb3c6OmNvbW1v
blZNKCk7CisgICAgbV92bSA9ICZjb21tb25WTSgpOwogICAgIG1fdGhyZWFkSWRlbnRpZmllciA9
IGNyZWF0ZVRocmVhZCh0aHJlYWRDYWxsYmFjaywgdGhpcywgIldlYkNvcmU6IFJlc291cmNlVXNh
Z2UiKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdl
T3ZlcmxheUNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2Ev
UmVzb3VyY2VVc2FnZU92ZXJsYXlDb2NvYS5tbQkocmV2aXNpb24gMjA5NjQ3KQorKysgU291cmNl
L1dlYkNvcmUvcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlT3ZlcmxheUNvY29hLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlIDxDb3JlVGV4dC9Db3JlVGV4dC5o
PgogCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtQ0FMYXllci5oIgogI2luY2x1ZGUgIlJlc291cmNlVXNhZ2VUaHJlYWQu
aCIKQEAgLTIwNCw3ICsyMDUsNyBAQCBzdGF0aWMgdm9pZCBhcHBlbmREYXRhVG9IaXN0b3J5KGNv
bnN0IFJlCiAKICAgICAvLyBGSVhNRTogRmluZCBhIHdheSB0byBhZGQgdGhpcyB0byBSZXNvdXJj
ZVVzYWdlRGF0YSBhbmQgY2FsY3VsYXRlIGl0IG9uIHRoZSByZXNvdXJjZSB1c2FnZSBzYW1wbGVy
IHRocmVhZC4KICAgICB7Ci0gICAgICAgIEpTQzo6Vk0qIHZtID0gJkpTRE9NV2luZG93Ojpjb21t
b25WTSgpOworICAgICAgICBKU0M6OlZNKiB2bSA9ICZjb21tb25WTSgpOwogICAgICAgICBKU0M6
OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKICAgICAgICAgaGlzdG9yaWNEYXRhLmdjSGVhcFNpemUu
YXBwZW5kKHZtLT5oZWFwLnNpemUoKSAtIHZtLT5oZWFwLmV4dHJhTWVtb3J5U2l6ZSgpKTsKICAg
ICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAJKHJldmlz
aW9uIDIwOTY0NykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJTVkdJbWFnZS5oIgog
CiAjaW5jbHVkZSAiQ2hyb21lLmgiCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJE
T01XaW5kb3cuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkVsZW1l
bnRJdGVyYXRvci5oIgpAQCAtMzk3LDcgKzM5OCw3IEBAIHZvaWQgU1ZHSW1hZ2U6OnJlcG9ydEFw
cHJveGltYXRlTWVtb3J5Q28KICAgICBmb3IgKE5vZGUqIG5vZGUgPSBkb2N1bWVudDsgbm9kZTsg
bm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpKQogICAgICAgICBkZWNvZGVkSW1hZ2VN
ZW1vcnlDb3N0ICs9IG5vZGUtPmFwcHJveGltYXRlTWVtb3J5Q29zdCgpOwogCi0gICAgSlNDOjpW
TSYgdm0gPSBKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCk7CisgICAgSlNDOjpWTSYgdm0gPSBj
b21tb25WTSgpOwogICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOwogICAgIC8vIEZJWE1F
OiBBZG9wdCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQsIGFuZCBzd2l0Y2ggdG8gcmVwb3J0RXh0
cmFNZW1vcnlBbGxvY2F0ZWQuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0MjU5NQpJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9NZW1vcnlJbmZv
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9NZW1vcnlJbmZvLmgJKHJl
dmlzaW9uIDIwOTY0NykKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTWVtb3J5SW5mby5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVk
ZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgogI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CiAKQEAgLTQ0LDggKzQ1LDggQEAgcHVibGljOgogCiBwcml2YXRlOgogICAg
IE1lbW9yeUluZm8oKQotICAgICAgICA6IG1fdXNlZEpTSGVhcFNpemUoSlNET01XaW5kb3c6OmNv
bW1vblZNKCkuaGVhcC5zaXplKCkpCi0gICAgICAgICwgbV90b3RhbEpTSGVhcFNpemUoSlNET01X
aW5kb3c6OmNvbW1vblZNKCkuaGVhcC5jYXBhY2l0eSgpKQorICAgICAgICA6IG1fdXNlZEpTSGVh
cFNpemUoY29tbW9uVk0oKS5oZWFwLnNpemUoKSkKKyAgICAgICAgLCBtX3RvdGFsSlNIZWFwU2l6
ZShjb21tb25WTSgpLmhlYXAuY2FwYWNpdHkoKSkKICAgICB7CiAgICAgfQogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvV2ViTWVtb3J5U2FtcGxlckxpbnV4LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvV2ViTWVtb3J5U2FtcGxlckxpbnV4
LmNwcAkocmV2aXNpb24gMjA5NjQ3KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1dl
Yk1lbW9yeVNhbXBsZXJMaW51eC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAK
ICNpZiBFTkFCTEUoTUVNT1JZX1NBTVBMRVIpCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9N
ZW1vcnlTdGF0aXN0aWNzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Db21tb25WTS5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvQ3VycmVudFByb2Nlc3NNZW1vcnlTdGF0dXMuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0pTRE9NV2luZG93Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgpA
QCAtMTIyLDggKzEyMyw4IEBAIFdlYk1lbW9yeVN0YXRpc3RpY3MgV2ViTWVtb3J5U2FtcGxlcjo6
c2EKICAgICBhcHBlbmRLZXlWYWx1ZVBhaXIod2ViS2l0TWVtb3J5U3RhdHMsIEFTQ0lJTGl0ZXJh
bCgiRmFzdCBNYWxsb2MgSW4gVXNlIiksIGZhc3RNYWxsb2NCeXRlc0luVXNlKTsKICAgICBhcHBl
bmRLZXlWYWx1ZVBhaXIod2ViS2l0TWVtb3J5U3RhdHMsIEFTQ0lJTGl0ZXJhbCgiRmFzdCBNYWxs
b2MgQ29tbWl0dGVkIE1lbW9yeSIpLCBmYXN0TWFsbG9jQnl0ZXNDb21taXR0ZWQpOwogCi0gICAg
c2l6ZV90IGpzY0hlYXBCeXRlc0luVXNlID0gSlNET01XaW5kb3c6OmNvbW1vblZNKCkuaGVhcC5z
aXplKCk7Ci0gICAgc2l6ZV90IGpzY0hlYXBCeXRlc0NvbW1pdHRlZCA9IEpTRE9NV2luZG93Ojpj
b21tb25WTSgpLmhlYXAuY2FwYWNpdHkoKTsKKyAgICBzaXplX3QganNjSGVhcEJ5dGVzSW5Vc2Ug
PSBjb21tb25WTSgpLmhlYXAuc2l6ZSgpOworICAgIHNpemVfdCBqc2NIZWFwQnl0ZXNDb21taXR0
ZWQgPSBjb21tb25WTSgpLmhlYXAuY2FwYWNpdHkoKTsKICAgICB0b3RhbEJ5dGVzSW5Vc2UgKz0g
anNjSGVhcEJ5dGVzSW5Vc2U7CiAgICAgdG90YWxCeXRlc0NvbW1pdHRlZCArPSBqc2NIZWFwQnl0
ZXNDb21taXR0ZWQ7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViTWVtb3J5
U2FtcGxlci5tYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9X
ZWJNZW1vcnlTYW1wbGVyLm1hYy5tbQkocmV2aXNpb24gMjA5NjQ3KQorKysgU291cmNlL1dlYktp
dDIvU2hhcmVkL21hYy9XZWJNZW1vcnlTYW1wbGVyLm1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAt
MzUsNyArMzUsNyBAQAogI2ltcG9ydCA8bWFsbG9jL21hbGxvYy5oPgogI2ltcG9ydCA8bm90aWZ5
Lmg+CiAjaW1wb3J0IDxydW50aW1lL0pTTG9jay5oPgotI2ltcG9ydCA8V2ViQ29yZS9KU0RPTVdp
bmRvdy5oPgorI2ltcG9ydCA8V2ViQ29yZS9Db21tb25WTS5oPgogI2ltcG9ydCA8d3RmL0N1cnJl
bnRUaW1lLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtMTE2LDkgKzExNiw5IEBA
IFdlYk1lbW9yeVN0YXRpc3RpY3MgV2ViTWVtb3J5U2FtcGxlcjo6c2EKICAgICB0b3RhbEJ5dGVz
SW5Vc2UgKz0gZmFzdE1hbGxvY0J5dGVzSW5Vc2U7CiAgICAgdG90YWxCeXRlc0NvbW1pdHRlZCAr
PSBmYXN0TWFsbG9jQnl0ZXNDb21taXR0ZWQ7CiAgICAgCi0gICAgSlNMb2NrSG9sZGVyIGxvY2so
SlNET01XaW5kb3c6OmNvbW1vblZNKCkpOwotICAgIHNpemVfdCBqc2NIZWFwQnl0ZXNJblVzZSA9
IEpTRE9NV2luZG93Ojpjb21tb25WTSgpLmhlYXAuc2l6ZSgpOwotICAgIHNpemVfdCBqc2NIZWFw
Qnl0ZXNDb21taXR0ZWQgPSBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS5oZWFwLmNhcGFjaXR5KCk7
CisgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7CisgICAgc2l6ZV90IGpzY0hlYXBC
eXRlc0luVXNlID0gY29tbW9uVk0oKS5oZWFwLnNpemUoKTsKKyAgICBzaXplX3QganNjSGVhcEJ5
dGVzQ29tbWl0dGVkID0gY29tbW9uVk0oKS5oZWFwLmNhcGFjaXR5KCk7CiAgICAgdG90YWxCeXRl
c0luVXNlICs9IGpzY0hlYXBCeXRlc0luVXNlOwogICAgIHRvdGFsQnl0ZXNDb21taXR0ZWQgKz0g
anNjSGVhcEJ5dGVzQ29tbWl0dGVkOwogICAgIApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQcm9jZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlByb2Nlc3MuY3BwCShyZXZpc2lvbiAyMDk2NDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCw3IEBA
CiAjaW5jbHVkZSA8V2ViQ29yZS9BWE9iamVjdENhY2hlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9B
cHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0NvbW1vblZNLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9ETlMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RhdGFiYXNlTWFuYWdlci5oPgpAQCAtOTcy
LDIxICs5NzMsMjEgQEAgdm9pZCBXZWJQcm9jZXNzOjpnZXRXZWJDb3JlU3RhdGlzdGljcyh1aQog
ICAgIAogICAgIC8vIEdhdGhlciBKYXZhU2NyaXB0IHN0YXRpc3RpY3MuCiAgICAgewotICAgICAg
ICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7Ci0gICAgICAgIGRh
dGEuc3RhdGlzdGljc051bWJlcnMuc2V0KEFTQ0lJTGl0ZXJhbCgiSmF2YVNjcmlwdE9iamVjdHND
b3VudCIpLCBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS5oZWFwLm9iamVjdENvdW50KCkpOwotICAg
ICAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJzLnNldChBU0NJSUxpdGVyYWwoIkphdmFTY3JpcHRH
bG9iYWxPYmplY3RzQ291bnQiKSwgSlNET01XaW5kb3c6OmNvbW1vblZNKCkuaGVhcC5nbG9iYWxP
YmplY3RDb3VudCgpKTsKLSAgICAgICAgZGF0YS5zdGF0aXN0aWNzTnVtYmVycy5zZXQoQVNDSUlM
aXRlcmFsKCJKYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0c0NvdW50IiksIEpTRE9NV2luZG93Ojpj
b21tb25WTSgpLmhlYXAucHJvdGVjdGVkT2JqZWN0Q291bnQoKSk7Ci0gICAgICAgIGRhdGEuc3Rh
dGlzdGljc051bWJlcnMuc2V0KEFTQ0lJTGl0ZXJhbCgiSmF2YVNjcmlwdFByb3RlY3RlZEdsb2Jh
bE9iamVjdHNDb3VudCIpLCBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS5oZWFwLnByb3RlY3RlZEds
b2JhbE9iamVjdENvdW50KCkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhjb21tb25WTSgp
KTsKKyAgICAgICAgZGF0YS5zdGF0aXN0aWNzTnVtYmVycy5zZXQoQVNDSUlMaXRlcmFsKCJKYXZh
U2NyaXB0T2JqZWN0c0NvdW50IiksIGNvbW1vblZNKCkuaGVhcC5vYmplY3RDb3VudCgpKTsKKyAg
ICAgICAgZGF0YS5zdGF0aXN0aWNzTnVtYmVycy5zZXQoQVNDSUlMaXRlcmFsKCJKYXZhU2NyaXB0
R2xvYmFsT2JqZWN0c0NvdW50IiksIGNvbW1vblZNKCkuaGVhcC5nbG9iYWxPYmplY3RDb3VudCgp
KTsKKyAgICAgICAgZGF0YS5zdGF0aXN0aWNzTnVtYmVycy5zZXQoQVNDSUlMaXRlcmFsKCJKYXZh
U2NyaXB0UHJvdGVjdGVkT2JqZWN0c0NvdW50IiksIGNvbW1vblZNKCkuaGVhcC5wcm90ZWN0ZWRP
YmplY3RDb3VudCgpKTsKKyAgICAgICAgZGF0YS5zdGF0aXN0aWNzTnVtYmVycy5zZXQoQVNDSUlM
aXRlcmFsKCJKYXZhU2NyaXB0UHJvdGVjdGVkR2xvYmFsT2JqZWN0c0NvdW50IiksIGNvbW1vblZN
KCkuaGVhcC5wcm90ZWN0ZWRHbG9iYWxPYmplY3RDb3VudCgpKTsKICAgICAgICAgCi0gICAgICAg
IHN0ZDo6dW5pcXVlX3B0cjxUeXBlQ291bnRTZXQ+IHByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMo
SlNET01XaW5kb3c6OmNvbW1vblZNKCkuaGVhcC5wcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKCkp
OworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZUNvdW50U2V0PiBwcm90ZWN0ZWRPYmplY3RU
eXBlQ291bnRzKGNvbW1vblZNKCkuaGVhcC5wcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKCkpOwog
ICAgICAgICBmcm9tQ291bnRlZFNldFRvSGFzaE1hcChwcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRz
LmdldCgpLCBkYXRhLmphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKTsKICAgICAg
ICAgCi0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlQ291bnRTZXQ+IG9iamVjdFR5cGVDb3Vu
dHMoSlNET01XaW5kb3c6OmNvbW1vblZNKCkuaGVhcC5vYmplY3RUeXBlQ291bnRzKCkpOworICAg
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZUNvdW50U2V0PiBvYmplY3RUeXBlQ291bnRzKGNvbW1v
blZNKCkuaGVhcC5vYmplY3RUeXBlQ291bnRzKCkpOwogICAgICAgICBmcm9tQ291bnRlZFNldFRv
SGFzaE1hcChvYmplY3RUeXBlQ291bnRzLmdldCgpLCBkYXRhLmphdmFTY3JpcHRPYmplY3RUeXBl
Q291bnRzKTsKICAgICAgICAgCi0gICAgICAgIHVpbnQ2NF90IGphdmFTY3JpcHRIZWFwU2l6ZSA9
IEpTRE9NV2luZG93Ojpjb21tb25WTSgpLmhlYXAuc2l6ZSgpOworICAgICAgICB1aW50NjRfdCBq
YXZhU2NyaXB0SGVhcFNpemUgPSBjb21tb25WTSgpLmhlYXAuc2l6ZSgpOwogICAgICAgICBkYXRh
LnN0YXRpc3RpY3NOdW1iZXJzLnNldChBU0NJSUxpdGVyYWwoIkphdmFTY3JpcHRIZWFwU2l6ZSIp
LCBqYXZhU2NyaXB0SGVhcFNpemUpOwotICAgICAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJzLnNl
dChBU0NJSUxpdGVyYWwoIkphdmFTY3JpcHRGcmVlU2l6ZSIpLCBKU0RPTVdpbmRvdzo6Y29tbW9u
Vk0oKS5oZWFwLmNhcGFjaXR5KCkgLSBqYXZhU2NyaXB0SGVhcFNpemUpOworICAgICAgICBkYXRh
LnN0YXRpc3RpY3NOdW1iZXJzLnNldChBU0NJSUxpdGVyYWwoIkphdmFTY3JpcHRGcmVlU2l6ZSIp
LCBjb21tb25WTSgpLmhlYXAuY2FwYWNpdHkoKSAtIGphdmFTY3JpcHRIZWFwU2l6ZSk7CiAgICAg
fQogCiAgICAgV1RGOjpGYXN0TWFsbG9jU3RhdGlzdGljcyBmYXN0TWFsbG9jU3RhdGlzdGljcyA9
IFdURjo6ZmFzdE1hbGxvY1N0YXRpc3RpY3MoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3Bw
CShyZXZpc2lvbiAyMDk2NDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsNyBA
QAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTTG9jay5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
QXBwbGljYXRpb25DYWNoZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQXBwbGljYXRpb25DYWNoZVN0
b3JhZ2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0NvbW1vblZNLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9GcmFtZUxvYWRlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9HQ0NvbnRyb2xsZXIuaD4KQEAgLTQ5Myw4ICs0OTQsOCBAQCB2b2lkIEluamVj
dGVkQnVuZGxlOjpnYXJiYWdlQ29sbGVjdEphdmFTCiAKIHNpemVfdCBJbmplY3RlZEJ1bmRsZTo6
amF2YVNjcmlwdE9iamVjdHNDb3VudCgpCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01X
aW5kb3c6OmNvbW1vblZNKCkpOwotICAgIHJldHVybiBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS5o
ZWFwLm9iamVjdENvdW50KCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7Cisg
ICAgcmV0dXJuIGNvbW1vblZNKCkuaGVhcC5vYmplY3RDb3VudCgpOwogfQogCiB2b2lkIEluamVj
dGVkQnVuZGxlOjpyZXBvcnRFeGNlcHRpb24oSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVS
ZWYgZXhjZXB0aW9uKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05l
dHNjYXBlL0pTTlBPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNwcAkocmV2aXNpb24gMjA5NjQ3KQor
KysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNHbG9iYWxPYmplY3QuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0xvY2su
aD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9PYmplY3RQcm90b3R5cGUuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0NvbW1vblZNLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JZGVudGlmaWVyUmVwLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9KU0RPTVdpbmRvd0Jhc2UuaD4KICNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgpAQCAtMTM2LDcgKzEzNyw3IEBAIEpTVmFsdWUgSlNOUE9iamVjdDo6Y2FsbE1l
dGhvZChFeGVjU3RhdGUKICAgICBWT0lEX1RPX05QVkFSSUFOVChyZXN1bHQpOwogICAgIAogICAg
IHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93
QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2Nrcyhjb21tb25WTSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX25wT2JqZWN0LT5fY2xh
c3MtPmludm9rZShtX25wT2JqZWN0LCBtZXRob2ROYW1lLCBhcmd1bWVudHMuZGF0YSgpLCBhcmd1
bWVudENvdW50LCAmcmVzdWx0KTsKICAgICAgICAgTlBSdW50aW1lT2JqZWN0TWFwOjptb3ZlR2xv
YmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7CiAgICAgfQpAQCAtMTc5LDcgKzE4MCw3IEBA
IEpTQzo6SlNWYWx1ZSBKU05QT2JqZWN0OjpjYWxsT2JqZWN0KEpTQzoKICAgICBWT0lEX1RPX05Q
VkFSSUFOVChyZXN1bHQpOwogCiAgICAgewotICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICAgICAgSlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwogICAgICAgICByZXR1cm5W
YWx1ZSA9IG1fbnBPYmplY3QtPl9jbGFzcy0+aW52b2tlRGVmYXVsdChtX25wT2JqZWN0LCBhcmd1
bWVudHMuZGF0YSgpLCBhcmd1bWVudENvdW50LCAmcmVzdWx0KTsKICAgICAgICAgTlBSdW50aW1l
T2JqZWN0TWFwOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7CiAgICAgfQpA
QCAtMjIyLDcgKzIyMyw3IEBAIEpTVmFsdWUgSlNOUE9iamVjdDo6Y2FsbENvbnN0cnVjdG9yKEV4
ZWMKICAgICBWT0lEX1RPX05QVkFSSUFOVChyZXN1bHQpOwogICAgIAogICAgIHsKLSAgICAgICAg
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9u
Vk0oKSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25W
TSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX25wT2JqZWN0LT5fY2xhc3MtPmNvbnN0cnVj
dChtX25wT2JqZWN0LCBhcmd1bWVudHMuZGF0YSgpLCBhcmd1bWVudENvdW50LCAmcmVzdWx0KTsK
ICAgICAgICAgTlBSdW50aW1lT2JqZWN0TWFwOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3Rh
dGUoZXhlYyk7CiAgICAgfQpAQCAtMzQ1LDcgKzM0Niw3IEBAIGJvb2wgSlNOUE9iamVjdDo6cHV0
KEpTQ2VsbCogY2VsbCwgRXhlY1MKIAogICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CiAgICAgewot
ICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNl
Ojpjb21tb25WTSgpKTsKKyAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KGNvbW1vblZNKCkpOwogICAgICAgICByZXN1bHQgPSB0aGlzT2JqZWN0LT5tX25wT2JqZWN0LT5f
Y2xhc3MtPnNldFByb3BlcnR5KHRoaXNPYmplY3QtPm1fbnBPYmplY3QsIG5wSWRlbnRpZmllciwg
JnZhcmlhbnQpOwogCiAgICAgICAgIE5QUnVudGltZU9iamVjdE1hcDo6bW92ZUdsb2JhbEV4Y2Vw
dGlvblRvRXhlY1N0YXRlKGV4ZWMpOwpAQCAtMzk0LDcgKzM5NSw3IEBAIGJvb2wgSlNOUE9iamVj
dDo6ZGVsZXRlUHJvcGVydHkoRXhlY1N0YXQKICAgICBOUFJ1bnRpbWVPYmplY3RNYXA6OlBsdWdp
blByb3RlY3RvciBwcm90ZWN0b3IobV9vYmplY3RNYXApOwogCiAgICAgewotICAgICAgICBKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgp
KTsKKyAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkp
OwogCiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIHJl
bW92ZVByb3BlcnR5IHJldHVybnMgZmFsc2U/CiAgICAgICAgIGlmICghbV9ucE9iamVjdC0+X2Ns
YXNzLT5yZW1vdmVQcm9wZXJ0eShtX25wT2JqZWN0LCBwcm9wZXJ0eU5hbWUpKQpAQCAtNDMwLDcg
KzQzMSw3IEBAIHZvaWQgSlNOUE9iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU08KICAgICBO
UFJ1bnRpbWVPYmplY3RNYXA6OlBsdWdpblByb3RlY3RvciBwcm90ZWN0b3IodGhpc09iamVjdC0+
bV9vYmplY3RNYXApOwogICAgIAogICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgICAgIEpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKIAogICAgICAgICAvLyBG
SVhNRTogU2hvdWxkIHdlIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBlbnVtZXJhdGUgcmV0dXJucyBm
YWxzZT8KICAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5tX25wT2JqZWN0LT5fY2xhc3MtPmVudW1l
cmF0ZSh0aGlzT2JqZWN0LT5tX25wT2JqZWN0LCAmaWRlbnRpZmllcnMsICZpZGVudGlmaWVyQ291
bnQpKQpAQCAtNDgxLDcgKzQ4Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTTlBPYmplY3Q6OnByb3Bl
cnR5R2V0dGUKICAgICAKICAgICBib29sIHJldHVyblZhbHVlOwogICAgIHsKLSAgICAgICAgSlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0o
KSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgp
KTsKICAgICAgICAgTlBJZGVudGlmaWVyIG5wSWRlbnRpZmllciA9IG5wSWRlbnRpZmllckZyb21J
ZGVudGlmaWVyKHByb3BlcnR5TmFtZSk7CiAgICAgICAgIC8vIElmIHRoZSBwcm9wZXJ0eU5hbWUg
aXMgc3ltYm9sLgogICAgICAgICBpZiAoIW5wSWRlbnRpZmllcikKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHJldmlzaW9uIDIwOTY0NykK
KysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE2LDYgKzExNiw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9BcHBsaWNhdGlv
bkNhY2hlU3RvcmFnZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQXJjaGl2ZVJlc291cmNlLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9DaHJvbWUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0NvbW1vblZNLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0RhdGFUcmFuc2Zlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGF0YWJhc2VNYW5hZ2Vy
Lmg+CkBAIC0yNzExLDcgKzI3MTIsNyBAQCB2b2lkIFdlYlBhZ2U6OnJ1bkphdmFTY3JpcHRJbk1h
aW5GcmFtZShjCiAgICAgLy8gZGlzYXBwZWFyIGR1cmluZyBzY3JpcHQgZXhlY3V0aW9uLgogCiAg
ICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFJlc3VsdFZhbHVlOwot
ICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayhjb21tb25WTSgpKTsKICAgICBib29sIGhhZEV4Y2VwdGlvbiA9IHRydWU7
CiAgICAgRXhjZXB0aW9uRGV0YWlscyBkZXRhaWxzOwogICAgIGlmIChKU1ZhbHVlIHJlc3VsdFZh
bHVlID0gbV9tYWluRnJhbWUtPmNvcmVGcmFtZSgpLT5zY3JpcHQoKS5leGVjdXRlU2NyaXB0KHNj
cmlwdCwgdHJ1ZSwgJmRldGFpbHMpKSB7CkBAIC01NDYyLDEyICs1NDYzLDEyIEBAIHZvaWQgV2Vi
UGFnZTo6dXBkYXRlQ2FjaGVkRG9jdW1lbnRMb2FkZXIKIAogdm9pZCBXZWJQYWdlOjpnZXRCeXRl
Y29kZVByb2ZpbGUodWludDY0X3QgY2FsbGJhY2tJRCkKIHsKLSAgICBpZiAoIUpTRE9NV2luZG93
Ojpjb21tb25WTSgpLm1fcGVyQnl0ZWNvZGVQcm9maWxlcikgeworICAgIGlmICghY29tbW9uVk0o
KS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpIHsKICAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpTdHJpbmdDYWxsYmFjayhTdHJpbmcoKSwgY2FsbGJhY2tJRCkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgU3RyaW5nIHJlc3VsdCA9IEpTRE9NV2luZG93Ojpjb21tb25W
TSgpLm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+dG9KU09OKCk7CisgICAgU3RyaW5nIHJlc3VsdCA9
IGNvbW1vblZNKCkubV9wZXJCeXRlY29kZVByb2ZpbGVyLT50b0pTT04oKTsKICAgICBBU1NFUlQo
cmVzdWx0Lmxlbmd0aCgpKTsKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlN0cmlu
Z0NhbGxiYWNrKHJlc3VsdCwgY2FsbGJhY2tJRCkpOwogfQpAQCAtNTQ3NSw3ICs1NDc2LDcgQEAg
dm9pZCBXZWJQYWdlOjpnZXRCeXRlY29kZVByb2ZpbGUodWludDY0Xwogdm9pZCBXZWJQYWdlOjpn
ZXRTYW1wbGluZ1Byb2ZpbGVyT3V0cHV0KHVpbnQ2NF90IGNhbGxiYWNrSUQpCiB7CiAjaWYgRU5B
QkxFKFNBTVBMSU5HX1BST0ZJTEVSKQotICAgIFNhbXBsaW5nUHJvZmlsZXIqIHNhbXBsaW5nUHJv
ZmlsZXIgPSBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS5zYW1wbGluZ1Byb2ZpbGVyKCk7CisgICAg
U2FtcGxpbmdQcm9maWxlciogc2FtcGxpbmdQcm9maWxlciA9IGNvbW1vblZNKCkuc2FtcGxpbmdQ
cm9maWxlcigpOwogICAgIGlmICghc2FtcGxpbmdQcm9maWxlcikgewogICAgICAgICBzZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlUHJveHk6OkludmFsaWRhdGVTdHJpbmdDYWxsYmFjayhjYWxsYmFja0lE
KSk7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ29y
ZVN0YXRpc3RpY3MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJD
b3JlU3RhdGlzdGljcy5tbQkocmV2aXNpb24gMjA5NjQ3KQorKysgU291cmNlL1dlYktpdC9tYWMv
TWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBA
QAogI2ltcG9ydCAiV2ViRnJhbWVJbnRlcm5hbC5oIgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SlNMb2NrLmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9NZW1vcnlTdGF0aXN0aWNzLmg+Cisj
aW1wb3J0IDxXZWJDb3JlL0NvbW1vblZNLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZvbnRDYWNoZS5o
PgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9HQ0NvbnRyb2xs
ZXIuaD4KQEAgLTU4LDM1ICs1OSwzNSBAQCArIChOU0FycmF5ICopc3RhdGlzdGljcwogCiArIChz
aXplX3QpamF2YVNjcmlwdE9iamVjdHNDb3VudAogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpT
RE9NV2luZG93Ojpjb21tb25WTSgpKTsKLSAgICByZXR1cm4gSlNET01XaW5kb3c6OmNvbW1vblZN
KCkuaGVhcC5vYmplY3RDb3VudCgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGNvbW1vblZNKCkp
OworICAgIHJldHVybiBjb21tb25WTSgpLmhlYXAub2JqZWN0Q291bnQoKTsKIH0KIAogKyAoc2l6
ZV90KWphdmFTY3JpcHRHbG9iYWxPYmplY3RzQ291bnQKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9j
ayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7Ci0gICAgcmV0dXJuIEpTRE9NV2luZG93Ojpjb21t
b25WTSgpLmhlYXAuZ2xvYmFsT2JqZWN0Q291bnQoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhj
b21tb25WTSgpKTsKKyAgICByZXR1cm4gY29tbW9uVk0oKS5oZWFwLmdsb2JhbE9iamVjdENvdW50
KCk7CiB9CiAKICsgKHNpemVfdClqYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0c0NvdW50CiB7Ci0g
ICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOwotICAgIHJldHVy
biBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS5oZWFwLnByb3RlY3RlZE9iamVjdENvdW50KCk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7CisgICAgcmV0dXJuIGNvbW1vblZNKCku
aGVhcC5wcm90ZWN0ZWRPYmplY3RDb3VudCgpOwogfQogCiArIChzaXplX3QpamF2YVNjcmlwdFBy
b3RlY3RlZEdsb2JhbE9iamVjdHNDb3VudAogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9N
V2luZG93Ojpjb21tb25WTSgpKTsKLSAgICByZXR1cm4gSlNET01XaW5kb3c6OmNvbW1vblZNKCku
aGVhcC5wcm90ZWN0ZWRHbG9iYWxPYmplY3RDb3VudCgpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
KGNvbW1vblZNKCkpOworICAgIHJldHVybiBjb21tb25WTSgpLmhlYXAucHJvdGVjdGVkR2xvYmFs
T2JqZWN0Q291bnQoKTsKIH0KIAogKyAoTlNDb3VudGVkU2V0ICopamF2YVNjcmlwdFByb3RlY3Rl
ZE9iamVjdFR5cGVDb3VudHMKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6
Y29tbW9uVk0oKSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7CiAgICAgCiAg
ICAgTlNDb3VudGVkU2V0ICpyZXN1bHQgPSBbTlNDb3VudGVkU2V0IHNldF07CiAKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8VHlwZUNvdW50U2V0PiBjb3VudHMoSlNET01XaW5kb3c6OmNvbW1vblZNKCku
aGVhcC5wcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKCkpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxU
eXBlQ291bnRTZXQ+IGNvdW50cyhjb21tb25WTSgpLmhlYXAucHJvdGVjdGVkT2JqZWN0VHlwZUNv
dW50cygpKTsKICAgICBIYXNoQ291bnRlZFNldDxjb25zdCBjaGFyKj46Oml0ZXJhdG9yIGVuZCA9
IGNvdW50cy0+ZW5kKCk7CiAgICAgZm9yIChIYXNoQ291bnRlZFNldDxjb25zdCBjaGFyKj46Oml0
ZXJhdG9yIGl0ID0gY291bnRzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdC0+dmFsdWU7ICsraSkKQEAgLTk3LDExICs5OCwxMSBA
QCArIChOU0NvdW50ZWRTZXQgKilqYXZhU2NyaXB0UHJvdGVjdGVkT2JqCiAKICsgKE5TQ291bnRl
ZFNldCAqKWphdmFTY3JpcHRPYmplY3RUeXBlQ291bnRzCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxv
Y2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGNvbW1v
blZNKCkpOwogICAgIAogICAgIE5TQ291bnRlZFNldCAqcmVzdWx0ID0gW05TQ291bnRlZFNldCBz
ZXRdOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPFR5cGVDb3VudFNldD4gY291bnRzKEpTRE9NV2lu
ZG93Ojpjb21tb25WTSgpLmhlYXAub2JqZWN0VHlwZUNvdW50cygpKTsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8VHlwZUNvdW50U2V0PiBjb3VudHMoY29tbW9uVk0oKS5oZWFwLm9iamVjdFR5cGVDb3Vu
dHMoKSk7CiAgICAgSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+OjppdGVyYXRvciBlbmQgPSBj
b3VudHMtPmVuZCgpOwogICAgIGZvciAoSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+OjppdGVy
YXRvciBpdCA9IGNvdW50cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgaXQtPnZhbHVlOyArK2kpCkBAIC0xNjcsMTMgKzE2OCwxMyBA
QCArIChzaXplX3QpZ2x5cGhQYWdlQ291bnQKIAogKyAoQk9PTClzaG91bGRQcmludEV4Y2VwdGlv
bnMKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7CiAgICAgcmV0dXJuIFBhZ2VDb25zb2xl
Q2xpZW50OjpzaG91bGRQcmludEV4Y2VwdGlvbnMoKTsKIH0KIAogKyAodm9pZClzZXRTaG91bGRQ
cmludEV4Y2VwdGlvbnM6KEJPT0wpcHJpbnQKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RP
TVdpbmRvdzo6Y29tbW9uVk0oKSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7
CiAgICAgUGFnZUNvbnNvbGVDbGllbnQ6OnNldFNob3VsZFByaW50RXhjZXB0aW9ucyhwcmludCk7
CiB9CiAKQEAgLTIwMSw5ICsyMDIsOSBAQCArIChOU0RpY3Rpb25hcnkgKiltZW1vcnlTdGF0aXN0
aWNzCiB7CiAgICAgV1RGOjpGYXN0TWFsbG9jU3RhdGlzdGljcyBmYXN0TWFsbG9jU3RhdGlzdGlj
cyA9IFdURjo6ZmFzdE1hbGxvY1N0YXRpc3RpY3MoKTsKICAgICAKLSAgICBKU0xvY2tIb2xkZXIg
bG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7Ci0gICAgc2l6ZV90IGhlYXBTaXplID0gSlNE
T01XaW5kb3c6OmNvbW1vblZNKCkuaGVhcC5zaXplKCk7Ci0gICAgc2l6ZV90IGhlYXBGcmVlID0g
SlNET01XaW5kb3c6OmNvbW1vblZNKCkuaGVhcC5jYXBhY2l0eSgpIC0gaGVhcFNpemU7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7CisgICAgc2l6ZV90IGhlYXBTaXplID0gY29t
bW9uVk0oKS5oZWFwLnNpemUoKTsKKyAgICBzaXplX3QgaGVhcEZyZWUgPSBjb21tb25WTSgpLmhl
YXAuY2FwYWNpdHkoKSAtIGhlYXBTaXplOwogICAgIEdsb2JhbE1lbW9yeVN0YXRpc3RpY3MgZ2xv
YmFsTWVtb3J5U3RhdHMgPSBnbG9iYWxNZW1vcnlTdGF0aXN0aWNzKCk7CiAgICAgCiAgICAgcmV0
dXJuIFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKQEAgLTI0Niw4
ICsyNDcsOCBAQCArIChzaXplX3QpamF2YVNjcmlwdE5vR0NBbGxvd2VkT2JqZWN0c0NvCiAKICsg
KHNpemVfdClqYXZhU2NyaXB0UmVmZXJlbmNlZE9iamVjdHNDb3VudAogewotICAgIEpTTG9ja0hv
bGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsKLSAgICByZXR1cm4gSlNET01XaW5k
b3c6OmNvbW1vblZNKCkuaGVhcC5wcm90ZWN0ZWRPYmplY3RDb3VudCgpOworICAgIEpTTG9ja0hv
bGRlciBsb2NrKGNvbW1vblZNKCkpOworICAgIHJldHVybiBjb21tb25WTSgpLmhlYXAucHJvdGVj
dGVkT2JqZWN0Q291bnQoKTsKIH0KIAogKyAoTlNTZXQgKilqYXZhU2NyaXB0Um9vdE9iamVjdENs
YXNzZXMKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5T
dHJlYW0ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRz
Y2FwZVBsdWdpblN0cmVhbS5tbQkocmV2aXNpb24gMjA5NjQ3KQorKysgU291cmNlL1dlYktpdC9t
YWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblN0cmVhbS5tbQkod29ya2luZyBjb3B5KQpAQCAt
NDAsNiArNDAsNyBAQAogI2ltcG9ydCAiV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgiCiAjaW1w
b3J0IDxGb3VuZGF0aW9uL05TVVJMUmVzcG9uc2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ0ZOZXR3
b3JrU1BJLmg+CisjaW1wb3J0IDxXZWJDb3JlL0NvbW1vblZNLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0RvY3VtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0RvY3VtZW50TG9hZGVyLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL0ZyYW1lLmg+CkBAIC0zNzcsNyArMzc4LDcgQEAgYm9vbCBXZWJOZXRzY2FwZVBs
dWdpblN0cmVhbTo6d2FudHNBbGxTdAogICAgIE5QRXJyb3IgZXJyb3I7CiAgICAgewogICAgICAg
ICBQbHVnaW5TdG9wRGVmZXJyZXIgZGVmZXJyZXIobV9wbHVnaW5WaWV3LmdldCgpKTsKLSAgICAg
ICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNl
Ojpjb21tb25WTSgpKTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoY29tbW9uVk0oKSk7CiAgICAgICAgIGVycm9yID0gbV9wbHVnaW5GdW5jcy0+Z2V0dmFs
dWUobV9wbHVnaW4sIE5QUFZwbHVnaW5XYW50c0FsbE5ldHdvcmtTdHJlYW1zLCAmdmFsdWUpOwog
ICAgIH0KICAgICBpZiAoZXJyb3IgIT0gTlBFUlJfTk9fRVJST1IpCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbQkocmV2aXNp
b24gMjA5NjQ3KQorKysgU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdp
blZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDcgQEAKICNpbXBvcnQgIldlYlVJ
RGVsZWdhdGVQcml2YXRlLmgiCiAjaW1wb3J0ICJXZWJWaWV3SW50ZXJuYWwuaCIKICNpbXBvcnQg
PENhcmJvbi9DYXJib24uaD4KKyNpbXBvcnQgPFdlYkNvcmUvQ29tbW9uVk0uaD4KICNpbXBvcnQg
PFdlYkNvcmUvQ29va2llSmFyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0RvY3VtZW50TG9hZGVyLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL0VsZW1lbnQuaD4KQEAgLTY2NSw3ICs2NjYsNyBAQCAtIChCT09M
KXNlbmRFdmVudDoodm9pZCopZXZlbnQgaXNEcmF3UmVjCiAgICAgLy8gU2V0IHRoZSBwbHVnaW5B
bGxvd1BvcHVwIGZsYWcuCiAgICAgQVNTRVJUKF9ldmVudEhhbmRsZXIpOwogICAgIHsKLSAgICAg
ICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNl
Ojpjb21tb25WTSgpKTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoY29tbW9uVk0oKSk7CiAgICAgICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJ
bmRpY2F0b3IoX2V2ZW50SGFuZGxlci0+Y3VycmVudEV2ZW50SXNVc2VyR2VzdHVyZSgpID8gc3Rk
OjpvcHRpb25hbDxQcm9jZXNzaW5nVXNlckdlc3R1cmVTdGF0ZT4oUHJvY2Vzc2luZ1VzZXJHZXN0
dXJlKSA6IHN0ZDo6bnVsbG9wdCk7CiAgICAgICAgIGFjY2VwdGVkRXZlbnQgPSBbX3BsdWdpblBh
Y2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT5ldmVudChwbHVnaW4sIGV2ZW50KTsKICAgICB9CkBA
IC04NDEsNyArODQyLDcgQEAgLSAodm9pZClwcml2YXRlQnJvd3NpbmdNb2RlRGlkQ2hhbmdlCiAK
ICAgICBbc2VsZiB3aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKICAgICB7Ci0gICAgICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9u
Vk0oKSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGNv
bW1vblZNKCkpOwogICAgICAgICBpZiAoW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNz
XS0+c2V0dmFsdWUpCiAgICAgICAgICAgICBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVu
Y3NdLT5zZXR2YWx1ZShwbHVnaW4sIE5QTlZwcml2YXRlTW9kZUJvb2wsICZ2YWx1ZSk7CiAgICAg
fQpAQCAtOTgyLDcgKzk4Myw3IEBAIC0gKHZvaWQpc2V0V2luZG93SWZOZWNlc3NhcnkKICAgICAg
ICAgaW5TZXRXaW5kb3cgPSBZRVM7ICAgICAgICAKICAgICAgICAgW3NlbGYgd2lsbENhbGxQbHVn
SW5GdW5jdGlvbl07CiAgICAgICAgIHsKLSAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgICAg
ICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsK
ICAgICAgICAgICAgIG5wRXJyID0gW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+
c2V0d2luZG93KHBsdWdpbiwgJndpbmRvdyk7CiAgICAgICAgIH0KICAgICAgICAgW3NlbGYgZGlk
Q2FsbFBsdWdJbkZ1bmN0aW9uXTsKQEAgLTEzNTIsNyArMTM1Myw3IEBAIC0gKE5QT2JqZWN0ICop
Y3JlYXRlUGx1Z2luU2NyaXB0YWJsZU9iamUKICAgICBOUEVycm9yIGVycm9yOwogICAgIFtzZWxm
IHdpbGxDYWxsUGx1Z0luRnVuY3Rpb25dOwogICAgIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAg
ICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoY29tbW9uVk0oKSk7
CiAgICAgICAgIGVycm9yID0gW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+Z2V0
dmFsdWUocGx1Z2luLCBOUFBWcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0LCAmdmFsdWUpOwogICAg
IH0KICAgICBbc2VsZiBkaWRDYWxsUGx1Z0luRnVuY3Rpb25dOwpAQCAtMTM3MSw3ICsxMzcyLDcg
QEAgLSAoQk9PTClnZXRGb3JtVmFsdWU6KE5TU3RyaW5nICoqKXZhbHVlCiAgICAgTlBFcnJvciBl
cnJvcjsKICAgICBbc2VsZiB3aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKICAgICB7Ci0gICAgICAg
IEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6
Y29tbW9uVk0oKSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKGNvbW1vblZNKCkpOwogICAgICAgICBlcnJvciA9IFtfcGx1Z2luUGFja2FnZS5nZXQoKSBw
bHVnaW5GdW5jc10tPmdldHZhbHVlKHBsdWdpbiwgTlBQVmZvcm1WYWx1ZSwgJmJ1ZmZlcik7CiAg
ICAgfQogICAgIFtzZWxmIGRpZENhbGxQbHVnSW5GdW5jdGlvbl07CkBAIC0xNTAzLDcgKzE1MDQs
NyBAQCAtICh2b2lkKWV2YWx1YXRlSmF2YVNjcmlwdFBsdWdpblJlcXVlc3Q6CiAgICAgICAgIGlm
IChbSlNQbHVnaW5SZXF1ZXN0IHNlbmROb3RpZmljYXRpb25dKSB7CiAgICAgICAgICAgICBbc2Vs
ZiB3aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6
OmNvbW1vblZNKCkpOworICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwogICAgICAgICAgICAgICAgIFtfcGx1Z2luUGFja2Fn
ZS5nZXQoKSBwbHVnaW5GdW5jc10tPnVybG5vdGlmeShwbHVnaW4sIFtVUkwgX3dlYl9VUkxDU3Ry
aW5nXSwgTlBSRVNfRE9ORSwgW0pTUGx1Z2luUmVxdWVzdCBub3RpZnlEYXRhXSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBbc2VsZiBkaWRDYWxsUGx1Z0luRnVuY3Rpb25dOwpAQCAtMTUz
NSw3ICsxNTM2LDcgQEAgLSAodm9pZCl3ZWJGcmFtZTooV2ViRnJhbWUgKil3ZWJGcmFtZSBkaQog
ICAgICAgICAKICAgICBbc2VsZiB3aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKICAgICB7Ci0gICAg
ICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFz
ZTo6Y29tbW9uVk0oKSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFs
bExvY2tzKGNvbW1vblZNKCkpOwogICAgICAgICBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2lu
RnVuY3NdLT51cmxub3RpZnkocGx1Z2luLCBbW1twbHVnaW5SZXF1ZXN0IHJlcXVlc3RdIFVSTF0g
X3dlYl9VUkxDU3RyaW5nXSwgcmVhc29uLCBbcGx1Z2luUmVxdWVzdCBub3RpZnlEYXRhXSk7CiAg
ICAgfQogICAgIFtzZWxmIGRpZENhbGxQbHVnSW5GdW5jdGlvbl07CkBAIC0xNTc5LDcgKzE1ODAs
NyBAQCAtICh2b2lkKWxvYWRQbHVnaW5SZXF1ZXN0OihXZWJQbHVnaW5SZXF1CiAgICAgICAgICAg
ICAgICAgaWYgKFtwbHVnaW5SZXF1ZXN0IHNlbmROb3RpZmljYXRpb25dKSB7CiAgICAgICAgICAg
ICAgICAgICAgIFtzZWxmIHdpbGxDYWxsUGx1Z0luRnVuY3Rpb25dOwogICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoY29tbW9u
Vk0oKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1
Z2luRnVuY3NdLT51cmxub3RpZnkocGx1Z2luLCBbW1twbHVnaW5SZXF1ZXN0IHJlcXVlc3RdIFVS
TF0gX3dlYl9VUkxDU3RyaW5nXSwgTlBFUlJfR0VORVJJQ19FUlJPUiwgW3BsdWdpblJlcXVlc3Qg
bm90aWZ5RGF0YV0pOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
IFtzZWxmIGRpZENhbGxQbHVnSW5GdW5jdGlvbl07CkBAIC0yMzY5LDcgKzIzNzAsNyBAQCAtIChO
U0JpdG1hcEltYWdlUmVwICopX3ByaW50ZWRQbHVnaW5CaXRtCiAgICAgLy8gVGVsbCB0aGUgcGx1
Z2luIHRvIHByaW50IGludG8gdGhlIEdXb3JsZAogICAgIFtzZWxmIHdpbGxDYWxsUGx1Z0luRnVu
Y3Rpb25dOwogICAgIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICAgICAgSlNDOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoY29tbW9uVk0oKSk7CiAgICAgICAgIFtfcGx1Z2lu
UGFja2FnZS5nZXQoKSBwbHVnaW5GdW5jc10tPnByaW50KHBsdWdpbiwgJm5wUHJpbnQpOwogICAg
IH0KICAgICBbc2VsZiBkaWRDYWxsUGx1Z0luRnVuY3Rpb25dOwpJbmRleDogU291cmNlL1dlYktp
dC9tYWMvUGx1Z2lucy9XZWJQbHVnaW5Db250cm9sbGVyLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViUGx1Z2luQ29udHJvbGxlci5tbQkocmV2aXNpb24gMjA5
NjQ3KQorKysgU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJQbHVnaW5Db250cm9sbGVyLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBACiAjaW1wb3J0ICJXZWJVSURlbGVnYXRl
LmgiCiAjaW1wb3J0ICJXZWJWaWV3SW50ZXJuYWwuaCIKICNpbXBvcnQgPEZvdW5kYXRpb24vTlNV
UkxSZXF1ZXN0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0NvbW1vblZNLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL0RvY3VtZW50TG9hZGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL0ZyYW1lTG9hZFJlcXVlc3QuaD4KQEAgLTEzMiwxNiArMTMzLDE2IEBAIC0gKE5T
VmlldyAqKXBsdWdJblZpZXdXaXRoQXJndW1lbnRzOihOU0QKICNpZiBQTEFURk9STShJT1MpCiAg
ICAgewogICAgICAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW19kb2N1bWVudFZpZXcgX3dlYlZpZXdd
OwotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdp
bmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKICAgICAgICAgdmlldyA9IFtbd2ViVmlldyBfVUlL
aXREZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3IHBsdWdJblZpZXdXaXRoQXJndW1l
bnRzOmFyZ3VtZW50cyBmcm9tUGx1Z0luUGFja2FnZTpwbHVnaW5QYWNrYWdlXTsKICAgICB9CiAj
ZWxzZQogICAgIENsYXNzIHZpZXdGYWN0b3J5ID0gW3BsdWdpblBhY2thZ2Ugdmlld0ZhY3Rvcnld
OwogICAgIGlmIChbdmlld0ZhY3RvcnkgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihwbHVn
SW5WaWV3V2l0aEFyZ3VtZW50czopXSkgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgICAgICBK
U0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKICAgICAg
ICAgdmlldyA9IFt2aWV3RmFjdG9yeSBwbHVnSW5WaWV3V2l0aEFyZ3VtZW50czphcmd1bWVudHNd
OwogICAgIH0gZWxzZSBpZiAoW3ZpZXdGYWN0b3J5IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0
b3IocGx1Z2luVmlld1dpdGhBcmd1bWVudHM6KV0pIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAg
ICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoY29tbW9uVk0oKSk7
CiAgICAgICAgIHZpZXcgPSBbdmlld0ZhY3RvcnkgcGx1Z2luVmlld1dpdGhBcmd1bWVudHM6YXJn
dW1lbnRzXTsKICAgICB9CiAjZW5kaWYKQEAgLTIyNCwxMCArMjI1LDEwIEBAIC0gKENBTGF5ZXIg
KilzdXBlcmxheWVyRm9yUGx1Z2luVmlldzooTlMKIC0gKHZvaWQpc3RvcE9uZVBsdWdpbjooTlNW
aWV3ICopdmlldwogewogICAgIGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9y
KHdlYlBsdWdJblN0b3ApXSkgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgICAgICBKU0M6OkpT
TG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKICAgICAgICAgW3Zp
ZXcgd2ViUGx1Z0luU3RvcF07CiAgICAgfSBlbHNlIGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0
b3I6QHNlbGVjdG9yKHBsdWdpblN0b3ApXSkgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgICAg
ICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKICAg
ICAgICAgW3ZpZXcgcGx1Z2luU3RvcF07CiAgICAgfQogfQpAQCAtMjM2LDcgKzIzNyw3IEBAIC0g
KHZvaWQpc3RvcE9uZVBsdWdpbjooTlNWaWV3ICopdmlldwogLSAodm9pZClzdG9wT25lUGx1Z2lu
Rm9yUGFnZUNhY2hlOihOU1ZpZXcgKil2aWV3CiB7CiAgICAgaWYgKFt2aWV3IHJlc3BvbmRzVG9T
ZWxlY3RvcjpAc2VsZWN0b3Iod2ViUGx1Z0luU3RvcEZvclBhZ2VDYWNoZSldKSB7Ci0gICAgICAg
IEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6
Y29tbW9uVk0oKSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKGNvbW1vblZNKCkpOwogICAgICAgICBbdmlldyB3ZWJQbHVnSW5TdG9wRm9yUGFnZUNhY2hl
XTsKICAgICB9IGVsc2UKICAgICAgICAgW3NlbGYgc3RvcE9uZVBsdWdpbjp2aWV3XTsKQEAgLTI0
NiwxMCArMjQ3LDEwIEBAIC0gKHZvaWQpc3RvcE9uZVBsdWdpbkZvclBhZ2VDYWNoZTooTlNWaWUK
IC0gKHZvaWQpZGVzdHJveU9uZVBsdWdpbjooTlNWaWV3ICopdmlldwogewogICAgIGlmIChbdmll
dyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlBsdWdJbkRlc3Ryb3kpXSkgewotICAg
ICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jh
c2U6OmNvbW1vblZNKCkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2Nrcyhjb21tb25WTSgpKTsKICAgICAgICAgW3ZpZXcgd2ViUGx1Z0luRGVzdHJveV07CiAg
ICAgfSBlbHNlIGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHBsdWdpbkRl
c3Ryb3kpXSkgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKICAgICAgICAgW3ZpZXcgcGx1Z2lu
RGVzdHJveV07CiAgICAgfQogfQpAQCAtMjY2LDEwICsyNjcsMTAgQEAgLSAodm9pZClzdGFydEFs
bFBsdWdpbnMKICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgICAg
aWQgYVZpZXcgPSBbX3ZpZXdzIG9iamVjdEF0SW5kZXg6aV07CiAgICAgICAgIGlmIChbYVZpZXcg
cmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJQbHVnSW5TdGFydCldKSB7Ci0gICAgICAg
ICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jh
c2U6OmNvbW1vblZNKCkpOworICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoY29tbW9uVk0oKSk7CiAgICAgICAgICAgICBbYVZpZXcgd2ViUGx1Z0luU3Rh
cnRdOwogICAgICAgICB9IGVsc2UgaWYgKFthVmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVj
dG9yKHBsdWdpblN0YXJ0KV0pIHsKLSAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgICAgICAg
ICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKICAg
ICAgICAgICAgIFthVmlldyBwbHVnaW5TdGFydF07CiAgICAgICAgIH0KICAgICB9CkBAIC0zNDUs
MTAgKzM0NiwxMCBAQCAtICh2b2lkKWFkZFBsdWdpbjooTlNWaWV3ICopdmlldwogCiAgICAgICAg
IExPRyhQbHVnaW5zLCAiaW5pdGlhbGl6aW5nIHBsdWctaW4gJUAiLCB2aWV3KTsKICAgICAgICAg
aWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViUGx1Z0luSW5pdGlhbGl6
ZSldKSB7Ci0gICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgICAgICAgICAgSlNDOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoY29tbW9uVk0oKSk7CiAgICAgICAgICAgICBbdmll
dyB3ZWJQbHVnSW5Jbml0aWFsaXplXTsKICAgICAgICAgfSBlbHNlIGlmIChbdmlldyByZXNwb25k
c1RvU2VsZWN0b3I6QHNlbGVjdG9yKHBsdWdpbkluaXRpYWxpemUpXSkgewotICAgICAgICAgICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpj
b21tb25WTSgpKTsKKyAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFs
bExvY2tzKGNvbW1vblZNKCkpOwogICAgICAgICAgICAgW3ZpZXcgcGx1Z2luSW5pdGlhbGl6ZV07
CiAgICAgICAgIH0KIApAQCAtMzYwLDE1ICszNjEsMTUgQEAgLSAodm9pZClhZGRQbHVnaW46KE5T
VmlldyAqKXZpZXcKICAgICAgICAgaWYgKF9zdGFydGVkKSB7CiAgICAgICAgICAgICBMT0coUGx1
Z2lucywgInN0YXJ0aW5nIHBsdWctaW4gJUAiLCB2aWV3KTsKICAgICAgICAgICAgIGlmIChbdmll
dyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlBsdWdJblN0YXJ0KV0pIHsKLSAgICAg
ICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdp
bmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwogICAgICAgICAgICAgICAgIFt2aWV3
IHdlYlBsdWdJblN0YXJ0XTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoW3ZpZXcgcmVzcG9uZHNU
b1NlbGVjdG9yOkBzZWxlY3RvcihwbHVnaW5TdGFydCldKSB7Ci0gICAgICAgICAgICAgICAgSlND
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21t
b25WTSgpKTsKKyAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2Nrcyhjb21tb25WTSgpKTsKICAgICAgICAgICAgICAgICBbdmlldyBwbHVnaW5TdGFydF07
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChbdmlldyByZXNw
b25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHNldENvbnRhaW5pbmdXaW5kb3c6KV0pIHsKLSAgICAg
ICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdp
bmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwogICAgICAgICAgICAgICAgIFt2aWV3
IHNldENvbnRhaW5pbmdXaW5kb3c6W19kb2N1bWVudFZpZXcgd2luZG93XV07CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05l
dHNjYXBlUGx1Z2luSG9zdFByb3h5Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFj
L1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdFByb3h5Lm1tCShyZXZpc2lvbiAyMDk2
NDcpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhv
c3RQcm94eS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2ltcG9ydCAiV2Vi
SG9zdGVkTmV0c2NhcGVQbHVnaW5WaWV3LmgiCiAjaW1wb3J0ICJXZWJLaXRTeXN0ZW1JbnRlcmZh
Y2UuaCIKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0lkZW50aWZpZXJJbmxpbmVzLmg+CisjaW1w
b3J0IDxXZWJDb3JlL0NvbW1vblZNLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0lkZW50aWZpZXJSZXAuaD4KICNpbXBvcnQgPFdlYkNvcmUvU2NyaXB0Q29u
dHJvbGxlci5oPgpAQCAtNjI3LDcgKzYyOCw3IEBAIHN0YXRpYyBJZGVudGlmaWVyIGlkZW50aWZp
ZXJGcm9tSWRlbnRpZmkKICAgICBBU1NFUlQoaWRlbnRpZmllci0+aXNTdHJpbmcoKSk7CiAgIAog
ICAgIGNvbnN0IGNoYXIqIHN0ciA9IGlkZW50aWZpZXItPnN0cmluZygpOyAgICAKLSAgICByZXR1
cm4gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmSlNET01XaW5kb3c6OmNvbW1vblZNKCksIFN0cmlu
Zzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soc3RyLCBzdHJsZW4oc3RyKSkpOworICAgIHJl
dHVybiBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZjb21tb25WTSgpLCBTdHJpbmc6OmZyb21VVEY4
V2l0aExhdGluMUZhbGxiYWNrKHN0ciwgc3RybGVuKHN0cikpKTsKIH0KIAoga2Vybl9yZXR1cm5f
dCBXS1BDSW52b2tlKG1hY2hfcG9ydF90IGNsaWVudFBvcnQsIHVpbnQzMl90IHBsdWdpbklELCB1
aW50MzJfdCByZXF1ZXN0SUQsIHVpbnQzMl90IG9iamVjdElELCB1aW50NjRfdCBzZXJ2ZXJJZGVu
dGlmaWVyLApJbmRleDogU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0
YW5jZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9Q
cm94eUluc3RhbmNlLm1tCShyZXZpc2lvbiAyMDk2NDcpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9Q
bHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsy
OSw3IEBACiAKICNpbXBvcnQgIk5ldHNjYXBlUGx1Z2luSG9zdFByb3h5LmgiCiAjaW1wb3J0ICJQ
cm94eVJ1bnRpbWVPYmplY3QuaCIKKyNpbXBvcnQgPFdlYkNvcmUvQ29tbW9uVk0uaD4KICNpbXBv
cnQgPFdlYkNvcmUvSWRlbnRpZmllclJlcC5oPgogI2ltcG9ydCA8V2ViQ29yZS9KU0RPTVdpbmRv
dy5oPgogI2ltcG9ydCA8V2ViQ29yZS9ucHJ1bnRpbWVfaW1wbC5oPgpAQCAtMzI1LDcgKzMyNiw3
IEBAIHZvaWQgUHJveHlJbnN0YW5jZTo6Z2V0UHJvcGVydHlOYW1lcyhFeGUKIAogICAgICAgICBp
ZiAoaWRlbnRpZmllci0+aXNTdHJpbmcoKSkgewogICAgICAgICAgICAgY29uc3QgY2hhciogc3Ry
ID0gaWRlbnRpZmllci0+c3RyaW5nKCk7Ci0gICAgICAgICAgICBuYW1lQXJyYXkuYWRkKElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJkpTRE9NV2luZG93Ojpjb21tb25WTSgpLCBTdHJpbmc6OmZyb21V
VEY4V2l0aExhdGluMUZhbGxiYWNrKHN0ciwgc3RybGVuKHN0cikpKSk7CisgICAgICAgICAgICBu
YW1lQXJyYXkuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcoJmNvbW1vblZNKCksIFN0cmluZzo6
ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soc3RyLCBzdHJsZW4oc3RyKSkpKTsKICAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICBuYW1lQXJyYXkuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywg
aWRlbnRpZmllci0+bnVtYmVyKCkpKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9X
ZWJDb3JlU3RhdGlzdGljcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2Vi
Q29yZVN0YXRpc3RpY3MuY3BwCShyZXZpc2lvbiAyMDk2NDcpCisrKyBTb3VyY2UvV2ViS2l0L3dp
bi9XZWJDb3JlU3RhdGlzdGljcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAK
ICNpbmNsdWRlICJDT01Qcm9wZXJ0eUJhZy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
TG9jay5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL01lbW9yeVN0YXRpc3RpY3MuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0NvbW1vblZNLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9ET01XaW5kb3cu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZvbnRDYWNoZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR0ND
b250cm9sbGVyLmg+CkBAIC0xMDMsOCArMTA0LDggQEAgSFJFU1VMVCBXZWJDb3JlU3RhdGlzdGlj
czo6amF2YVNjcmlwdE9iagogICAgIGlmICghY291bnQpCiAgICAgICAgIHJldHVybiBFX1BPSU5U
RVI7CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7Ci0g
ICAgKmNvdW50ID0gKFVJTlQpSlNET01XaW5kb3c6OmNvbW1vblZNKCkuaGVhcC5vYmplY3RDb3Vu
dCgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGNvbW1vblZNKCkpOworICAgICpjb3VudCA9IChV
SU5UKWNvbW1vblZNKCkuaGVhcC5vYmplY3RDb3VudCgpOwogICAgIHJldHVybiBTX09LOwogfQog
CkBAIC0xMTMsOCArMTE0LDggQEAgSFJFU1VMVCBXZWJDb3JlU3RhdGlzdGljczo6amF2YVNjcmlw
dEdsbwogICAgIGlmICghY291bnQpCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CiAKLSAgICBK
U0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7Ci0gICAgKmNvdW50ID0g
KFVJTlQpSlNET01XaW5kb3c6OmNvbW1vblZNKCkuaGVhcC5nbG9iYWxPYmplY3RDb3VudCgpOwor
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGNvbW1vblZNKCkpOworICAgICpjb3VudCA9IChVSU5UKWNv
bW1vblZNKCkuaGVhcC5nbG9iYWxPYmplY3RDb3VudCgpOwogICAgIHJldHVybiBTX09LOwogfQog
CkBAIC0xMjMsOCArMTI0LDggQEAgSFJFU1VMVCBXZWJDb3JlU3RhdGlzdGljczo6amF2YVNjcmlw
dFBybwogICAgIGlmICghY291bnQpCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CiAKLSAgICBK
U0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7Ci0gICAgKmNvdW50ID0g
KFVJTlQpSlNET01XaW5kb3c6OmNvbW1vblZNKCkuaGVhcC5wcm90ZWN0ZWRPYmplY3RDb3VudCgp
OworICAgIEpTTG9ja0hvbGRlciBsb2NrKGNvbW1vblZNKCkpOworICAgICpjb3VudCA9IChVSU5U
KWNvbW1vblZNKCkuaGVhcC5wcm90ZWN0ZWRPYmplY3RDb3VudCgpOwogICAgIHJldHVybiBTX09L
OwogfQogCkBAIC0xMzMsOCArMTM0LDggQEAgSFJFU1VMVCBXZWJDb3JlU3RhdGlzdGljczo6amF2
YVNjcmlwdFBybwogICAgIGlmICghY291bnQpCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CiAK
LSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7Ci0gICAgKmNv
dW50ID0gKFVJTlQpSlNET01XaW5kb3c6OmNvbW1vblZNKCkuaGVhcC5wcm90ZWN0ZWRHbG9iYWxP
YmplY3RDb3VudCgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGNvbW1vblZNKCkpOworICAgICpj
b3VudCA9IChVSU5UKWNvbW1vblZNKCkuaGVhcC5wcm90ZWN0ZWRHbG9iYWxPYmplY3RDb3VudCgp
OwogICAgIHJldHVybiBTX09LOwogfQogCkBAIC0xNDMsOCArMTQ0LDggQEAgSFJFU1VMVCBXZWJD
b3JlU3RhdGlzdGljczo6amF2YVNjcmlwdFBybwogICAgIGlmICghdHlwZU5hbWVzQW5kQ291bnRz
KQogICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNE
T01XaW5kb3c6OmNvbW1vblZNKCkpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlQ291bnRTZXQ+
IGpzT2JqZWN0VHlwZU5hbWVzKEpTRE9NV2luZG93Ojpjb21tb25WTSgpLmhlYXAucHJvdGVjdGVk
T2JqZWN0VHlwZUNvdW50cygpKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhjb21tb25WTSgpKTsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZUNvdW50U2V0PiBqc09iamVjdFR5cGVOYW1lcyhjb21t
b25WTSgpLmhlYXAucHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cygpKTsKICAgICB0eXBlZGVmIFR5
cGVDb3VudFNldDo6Y29uc3RfaXRlcmF0b3IgSXRlcmF0b3I7CiAgICAgSXRlcmF0b3IgZW5kID0g
anNPYmplY3RUeXBlTmFtZXMtPmVuZCgpOwogICAgIEhhc2hNYXA8U3RyaW5nLCBpbnQ+IHR5cGVD
b3VudE1hcDsKQEAgLTE2MSw4ICsxNjIsOCBAQCBIUkVTVUxUIFdlYkNvcmVTdGF0aXN0aWNzOjpq
YXZhU2NyaXB0T2JqCiAgICAgaWYgKCF0eXBlTmFtZXNBbmRDb3VudHMpCiAgICAgICAgIHJldHVy
biBFX1BPSU5URVI7CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9u
Vk0oKSk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFR5cGVDb3VudFNldD4ganNPYmplY3RUeXBlTmFt
ZXMoSlNET01XaW5kb3c6OmNvbW1vblZNKCkuaGVhcC5vYmplY3RUeXBlQ291bnRzKCkpOworICAg
IEpTTG9ja0hvbGRlciBsb2NrKGNvbW1vblZNKCkpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBl
Q291bnRTZXQ+IGpzT2JqZWN0VHlwZU5hbWVzKGNvbW1vblZNKCkuaGVhcC5vYmplY3RUeXBlQ291
bnRzKCkpOwogICAgIHR5cGVkZWYgVHlwZUNvdW50U2V0Ojpjb25zdF9pdGVyYXRvciBJdGVyYXRv
cjsKICAgICBJdGVyYXRvciBlbmQgPSBqc09iamVjdFR5cGVOYW1lcy0+ZW5kKCk7CiAgICAgSGFz
aE1hcDxTdHJpbmcsIGludD4gdHlwZUNvdW50TWFwOwpAQCAtMjU5LDE0ICsyNjAsMTQgQEAgSFJF
U1VMVCBXZWJDb3JlU3RhdGlzdGljczo6c2hvdWxkUHJpbnRFeAogICAgIGlmICghc2hvdWxkUHJp
bnQpCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhK
U0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0o
KSk7CiAgICAgKnNob3VsZFByaW50ID0gUGFnZUNvbnNvbGVDbGllbnQ6OnNob3VsZFByaW50RXhj
ZXB0aW9ucygpOwogICAgIHJldHVybiBTX09LOwogfQogCiBIUkVTVUxUIFdlYkNvcmVTdGF0aXN0
aWNzOjpzZXRTaG91bGRQcmludEV4Y2VwdGlvbnMoQk9PTCBwcmludCkKIHsKLSAgICBKU0xvY2tI
b2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7CisgICAgSlNMb2NrSG9sZGVyIGxv
Y2soY29tbW9uVk0oKSk7CiAgICAgUGFnZUNvbnNvbGVDbGllbnQ6OnNldFNob3VsZFByaW50RXhj
ZXB0aW9ucyhwcmludCk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CkBAIC0yOTAsOSArMjkxLDkgQEAg
SFJFU1VMVCBXZWJDb3JlU3RhdGlzdGljczo6bWVtb3J5U3RhdGlzdAogCiAgICAgV1RGOjpGYXN0
TWFsbG9jU3RhdGlzdGljcyBmYXN0TWFsbG9jU3RhdGlzdGljcyA9IFdURjo6ZmFzdE1hbGxvY1N0
YXRpc3RpY3MoKTsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25W
TSgpKTsKLSAgICB1bnNpZ25lZCBsb25nIGxvbmcgaGVhcFNpemUgPSBKU0RPTVdpbmRvdzo6Y29t
bW9uVk0oKS5oZWFwLnNpemUoKTsKLSAgICB1bnNpZ25lZCBsb25nIGxvbmcgaGVhcEZyZWUgPSBK
U0RPTVdpbmRvdzo6Y29tbW9uVk0oKS5oZWFwLmNhcGFjaXR5KCkgLSBoZWFwU2l6ZTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayhjb21tb25WTSgpKTsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgaGVh
cFNpemUgPSBjb21tb25WTSgpLmhlYXAuc2l6ZSgpOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBo
ZWFwRnJlZSA9IGNvbW1vblZNKCkuaGVhcC5jYXBhY2l0eSgpIC0gaGVhcFNpemU7CiAgICAgR2xv
YmFsTWVtb3J5U3RhdGlzdGljcyBnbG9iYWxNZW1vcnlTdGF0cyA9IGdsb2JhbE1lbW9yeVN0YXRp
c3RpY3MoKTsKIAogICAgIEhhc2hNYXA8U3RyaW5nLCB1bnNpZ25lZCBsb25nIGxvbmcsIEFTQ0lJ
Q2FzZUluc2Vuc2l0aXZlSGFzaD4gZmllbGRzOwpJbmRleDogU291cmNlL1dlYktpdC93aW4vV2Vi
SmF2YVNjcmlwdENvbGxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4v
V2ViSmF2YVNjcmlwdENvbGxlY3Rvci5jcHAJKHJldmlzaW9uIDIwOTY0NykKKysrIFNvdXJjZS9X
ZWJLaXQvd2luL1dlYkphdmFTY3JpcHRDb2xsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw2ICsyOCw3IEBACiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFwLmg+CiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvVk0uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0NvbW1vblZNLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9ET01XaW5kb3cuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dDQ29udHJv
bGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSlNET01XaW5kb3cuaD4KQEAgLTExMCw3ICsxMTEs
NyBAQCBIUkVTVUxUIFdlYkphdmFTY3JpcHRDb2xsZWN0b3I6Om9iamVjdENvCiAgICAgICAgIHJl
dHVybiBFX1BPSU5URVI7CiAgICAgfQogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5k
b3c6OmNvbW1vblZNKCkpOwotICAgICpjb3VudCA9IChVSU5UKUpTRE9NV2luZG93Ojpjb21tb25W
TSgpLmhlYXAub2JqZWN0Q291bnQoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhjb21tb25WTSgp
KTsKKyAgICAqY291bnQgPSAoVUlOVCljb21tb25WTSgpLmhlYXAub2JqZWN0Q291bnQoKTsKICAg
ICByZXR1cm4gU19PSzsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2lu
Vmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5W
aWV3LmNwcAkocmV2aXNpb24gMjA5NjQ3KQorKysgU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9Q
bHVnaW5WaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUg
IlBsdWdpblBhY2thZ2UuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0JyaWRnZUpTQy5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvQ2hyb21lLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Db21tb25WTS5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvQ29va2llSmFyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnRMb2FkZXIuaD4KQEAgLTIzNiw3ICsyMzcsNyBA
QCBib29sIFBsdWdpblZpZXc6OnN0YXJ0KCkKICAgICBOUEVycm9yIG5wRXJyOwogICAgIHsKICAg
ICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAgICAgIEpT
Qzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29t
bW9uVk0oKSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KGNvbW1vblZNKCkpOwogICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAgICAgICBu
cEVyciA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5uZXdwKChOUE1JTUVUeXBlKW1fbWltZVR5
cGUudXRmOCgpLmRhdGEoKSwgbV9pbnN0YW5jZSwgbV9tb2RlLCBtX3BhcmFtQ291bnQsIG1fcGFy
YW1OYW1lcywgbV9wYXJhbVZhbHVlcywgTlVMTCk7CiAgICAgICAgIHNldENhbGxpbmdQbHVnaW4o
ZmFsc2UpOwpAQCAtMzI1LDcgKzMyNiw3IEBAIHZvaWQgUGx1Z2luVmlldzo6c3RvcCgpCiAKICAg
ICBtX2lzU3RhcnRlZCA9IGZhbHNlOwogCi0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICBKU0M6OkpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKIAogI2lmIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgIC8vIFVuc3ViY2xhc3MgdGhlIHdpbmRvdwpAQCAtNDI4
LDcgKzQyOSw3IEBAIHZvaWQgUGx1Z2luVmlldzo6cGVyZm9ybVJlcXVlc3QoUGx1Z2luUmUKICAg
ICAgICAgICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNDgwNzQ2OT4gVGhpcyBzaG91bGQg
YmUgc2VudCB3aGVuIHRoZSBkb2N1bWVudCBoYXMgZmluaXNoZWQgbG9hZGluZwogICAgICAgICAg
ICAgaWYgKHJlcXVlc3QtPnNlbmROb3RpZmljYXRpb24oKSkgewogICAgICAgICAgICAgICAgIFBs
dWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgICAgICAgICAgICAgIEpT
Qzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29t
bW9uVk0oKSk7CisgICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoY29tbW9uVk0oKSk7CiAgICAgICAgICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0
cnVlKTsKICAgICAgICAgICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+dXJsbm90aWZ5
KG1faW5zdGFuY2UsIHJlcXVlc3RVUkwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgTlBSRVNfRE9O
RSwgcmVxdWVzdC0+bm90aWZ5RGF0YSgpKTsKICAgICAgICAgICAgICAgICBzZXRDYWxsaW5nUGx1
Z2luKGZhbHNlKTsKQEAgLTY2NSw3ICs2NjYsNyBAQCBOUE9iamVjdCogUGx1Z2luVmlldzo6bnBP
YmplY3QoKQogICAgIE5QRXJyb3IgbnBFcnI7CiAgICAgewogICAgICAgICBQbHVnaW5WaWV3Ojpz
ZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICAgICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoY29tbW9uVk0oKSk7CiAgICAg
ICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAgICAgICAgIG5wRXJyID0gbV9wbHVnaW4tPnBs
dWdpbkZ1bmNzKCktPmdldHZhbHVlKG1faW5zdGFuY2UsIE5QUFZwbHVnaW5TY3JpcHRhYmxlTlBP
YmplY3QsICZvYmplY3QpOwogICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKQEAgLTEz
ODIsNyArMTM4Myw3IEBAIHZvaWQgUGx1Z2luVmlldzo6cHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGEK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXco
dGhpcyk7Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01X
aW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAg
IE5QQm9vbCB2YWx1ZSA9IHByaXZhdGVCcm93c2luZ0VuYWJsZWQ7CiAgICAgc2V0VmFsdWUobV9p
bnN0YW5jZSwgTlBOVnByaXZhdGVNb2RlQm9vbCwgJnZhbHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvd2luL1BsdWdpbnMvUGx1Z2luVmlld1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC93aW4vUGx1Z2lucy9QbHVnaW5WaWV3V2luLmNwcAkocmV2aXNpb24gMjA5NjQ3KQorKysg
U291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5WaWV3V2luLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvQnJpZGdlSlNDLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9DaHJvbWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Nocm9tZUNsaWVudC5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvQ29tbW9uVk0uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RvY3Vt
ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudExvYWRlci5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvRWxlbWVudC5oPgpAQCAtNDUyLDcgKzQ1Myw3IEBAIGJvb2wgUGx1Z2luVmlldzo6ZGlz
cGF0Y2hOUEV2ZW50KE5QRXZlbnQKICAgICAgICAgc2hvdWxkUG9wID0gdHJ1ZTsKICAgICB9CiAK
LSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jh
c2U6OmNvbW1vblZNKCkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKGNvbW1vblZNKCkpOwogICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAgICAgYm9vbCBh
Y2NlcHRlZCA9ICFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJm5w
RXZlbnQpOwogICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwpAQCAtNTk1LDcgKzU5Niw3IEBA
IHZvaWQgUGx1Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXkKICAgICB9IGVsc2UKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKICAgICBpZiAoZGlzcGF0Y2hOUEV2ZW50
KG5wRXZlbnQpKQogICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKIH0KQEAgLTY2
Miw3ICs2NjMsNyBAQCB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VFCiAg
ICAgfSBlbHNlCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgSlNDOjpK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoY29tbW9uVk0oKSk7CiAgICAgLy8gRklY
TUU6IENvbnNpZGVyIGJhY2sgcG9ydGluZyB0aGUgaHR0cDovL3dlYmtpdC5vcmcvYi81ODEwOCBm
aXggaGVyZS4KICAgICBpZiAoZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpKQogICAgICAgICBldmVu
dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKQEAgLTczMyw3ICs3MzQsNyBAQCB2b2lkIFBsdWdpblZp
ZXc6OnNldE5QV2luZG93UmVjdChjb25zdCBJCiAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC50b3Ag
PSAwOwogCiAgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cpIHsKLSAg
ICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dC
YXNlOjpjb21tb25WTSgpKTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoY29tbW9uVk0oKSk7CiAgICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAg
ICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cobV9pbnN0YW5jZSwgJm1f
bnBXaW5kb3cpOwogICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>296838</attachid>
            <date>2016-12-10 18:55:58 -0800</date>
            <delta_ts>2016-12-10 19:49:11 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>99160</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA5Njc4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBA
CisyMDE2LTEyLTEwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
VGhlIERPTSBzaG91bGQgaGF2ZSBhbiBhZHZhbmNpbmcgd2F2ZWZyb250IG9wYXF1ZSByb290IGJh
cnJpZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
NTcxMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAg
ICAgICAgVGhpcyBleHBvc2VzIHRoZSBhYmlsaXR5IHRvIGZpcmUgYW4gYWR2YW5jaW5nIHdhdmVm
cm9udCBiYXJyaWVyIG9uIG9wYXF1ZSByb290cy4gSXQgYWxzbworICAgICAgICBnaXZlcyBjbGll
bnRzIHRoZSBhYmlsaXR5IHRvIG1haW50YWluIHRoZWlyIG93biBjYWNoZSBvZiB3aGV0aGVyIHRo
YXQgYmFycmllciBuZWVkcyB0bworICAgICAgICBiZSBlbmFibGVkLgorICAgICAgICAKKyAgICAg
ICAgVGhlIERPTSB1c2VzIHRoaXMgdG8gZW5hYmxlIGEgdmVyeSBjaGVhcCBiYXJyaWVyIG9uIHRo
ZSBET00uCisKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjpi
ZWdpbk1hcmtpbmcpOgorICAgICAgICAoSlNDOjpIZWFwOjplbmRNYXJraW5nKToKKyAgICAgICAg
KEpTQzo6SGVhcDo6d3JpdGVCYXJyaWVyT3BhcXVlUm9vdFNsb3cpOgorICAgICAgICAoSlNDOjpI
ZWFwOjphZGRNdXRhdG9yU2hvdWxkQmVGZW5jZWRDYWNoZSk6CisgICAgICAgIChKU0M6OkhlYXA6
OnNldE11dGF0b3JTaG91bGRCZUZlbmNlZCk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAg
ICAgICogaGVhcC9IZWFwSW5saW5lcy5oOgorICAgICAgICAoSlNDOjp3cml0ZUJhcnJpZXJPcGFx
dWVSb290KToKKwogMjAxNi0xMi0xMCAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIwOTY1MywgcjIwOTY1
NCwgcjIwOTY2MywgYW5kCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2
aXNpb24gMjA5Njc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgxNSw4ICs4MTUsNyBAQCB2b2lkIEhlYXA6OmJlZ2luTWFya2luZygp
CiAgICAgICAgIG1fY29kZUJsb2Nrcy0+Y2xlYXJNYXJrc0ZvckZ1bGxDb2xsZWN0aW9uKCk7CiAg
ICAgbV9qaXRTdHViUm91dGluZXMtPmNsZWFyTWFya3MoKTsKICAgICBtX29iamVjdFNwYWNlLmJl
Z2luTWFya2luZygpOwotICAgIG1fbXV0YXRvclNob3VsZEJlRmVuY2VkID0gdHJ1ZTsKLSAgICBt
X2JhcnJpZXJUaHJlc2hvbGQgPSB0YXV0b2xvZ2ljYWxUaHJlc2hvbGQ7CisgICAgc2V0TXV0YXRv
clNob3VsZEJlRmVuY2VkKHRydWUpOwogICAgIG1fYmFycmllcnNFeGVjdXRlZCA9IDA7CiB9CiAK
QEAgLTk0Myw4ICs5NDIsNyBAQCB2b2lkIEhlYXA6OmVuZE1hcmtpbmcoKQogICAgIG1fd2Vha1Jl
ZmVyZW5jZUhhcnZlc3RlcnMucmVtb3ZlQWxsKCk7CiAgICAgCiAgICAgbV9vYmplY3RTcGFjZS5l
bmRNYXJraW5nKCk7Ci0gICAgbV9tdXRhdG9yU2hvdWxkQmVGZW5jZWQgPSBPcHRpb25zOjpmb3Jj
ZUZlbmNlZEJhcnJpZXIoKTsKLSAgICBtX2JhcnJpZXJUaHJlc2hvbGQgPSBPcHRpb25zOjpmb3Jj
ZUZlbmNlZEJhcnJpZXIoKSA/IHRhdXRvbG9naWNhbFRocmVzaG9sZCA6IGJsYWNrVGhyZXNob2xk
OworICAgIHNldE11dGF0b3JTaG91bGRCZUZlbmNlZChPcHRpb25zOjpmb3JjZUZlbmNlZEJhcnJp
ZXIoKSk7CiB9CiAKIHNpemVfdCBIZWFwOjpvYmplY3RDb3VudCgpCkBAIC0yMzEzLDQgKzIzMTEs
MjcgQEAgdm9pZCBIZWFwOjpmb3JFYWNoU2xvdFZpc2l0b3IoY29uc3QgRnVuYwogICAgICAgICBm
dW5jKCpzbG90VmlzaXRvcik7CiB9CiAKK3ZvaWQgSGVhcDo6d3JpdGVCYXJyaWVyT3BhcXVlUm9v
dFNsb3codm9pZCogcm9vdCkKK3sKKyAgICBBU1NFUlQobXV0YXRvclNob3VsZEJlRmVuY2VkKCkp
OworICAgIAorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9vcGFxdWVSb290c011dGV4KTsK
KyAgICBtX29wYXF1ZVJvb3RzLmFkZChyb290KTsKK30KKwordm9pZCBIZWFwOjphZGRNdXRhdG9y
U2hvdWxkQmVGZW5jZWRDYWNoZShib29sJiBjYWNoZSkKK3sKKyAgICBBU1NFUlQoaGFzSGVhcEFj
Y2VzcygpKTsKKyAgICBjYWNoZSA9IG1fbXV0YXRvclNob3VsZEJlRmVuY2VkOworICAgIG1fbXV0
YXRvclNob3VsZEJlRmVuY2VkQ2FjaGVzLmFwcGVuZCgmY2FjaGUpOworfQorCit2b2lkIEhlYXA6
OnNldE11dGF0b3JTaG91bGRCZUZlbmNlZChib29sIHZhbHVlKQoreworICAgIG1fbXV0YXRvclNo
b3VsZEJlRmVuY2VkID0gdmFsdWU7CisgICAgbV9iYXJyaWVyVGhyZXNob2xkID0gdmFsdWUgPyB0
YXV0b2xvZ2ljYWxUaHJlc2hvbGQgOiBibGFja1RocmVzaG9sZDsKKyAgICBmb3IgKGJvb2wqIGNh
Y2hlIDogbV9tdXRhdG9yU2hvdWxkQmVGZW5jZWRDYWNoZXMpCisgICAgICAgICpjYWNoZSA9IHZh
bHVlOworfQorICAgIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5oCShyZXZpc2lvbiAyMDk2NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNSw2ICsxMjUsOCBAQCBwdWJsaWM6CiAKICAg
ICBXcml0ZUJhcnJpZXJCdWZmZXImIHdyaXRlQmFycmllckJ1ZmZlcigpIHsgcmV0dXJuIG1fd3Jp
dGVCYXJyaWVyQnVmZmVyOyB9CiAgICAgdm9pZCBmbHVzaFdyaXRlQmFycmllckJ1ZmZlcihKU0Nl
bGwqKTsKKyAgICAKKyAgICB2b2lkIHdyaXRlQmFycmllck9wYXF1ZVJvb3Qodm9pZCopOwogCiAg
ICAgSGVhcChWTSosIEhlYXBUeXBlKTsKICAgICB+SGVhcCgpOwpAQCAtMzQ5LDYgKzM1MSw4IEBA
IHB1YmxpYzoKICAgICB2b2lkIHByZXZlbnRDb2xsZWN0aW9uKCk7CiAgICAgdm9pZCBhbGxvd0Nv
bGxlY3Rpb24oKTsKICAgICAKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZE11dGF0b3JT
aG91bGRCZUZlbmNlZENhY2hlKGJvb2wmKTsKKyAgICAKICNpZiBVU0UoQ0YpCiAgICAgQ0ZSdW5M
b29wUmVmIHJ1bkxvb3AoKSBjb25zdCB7IHJldHVybiBtX3J1bkxvb3AuZ2V0KCk7IH0KICAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIHNldFJ1bkxvb3AoQ0ZSdW5Mb29wUmVmKTsKQEAgLTQ5MCw2
ICs0OTQsMTAgQEAgcHJpdmF0ZToKICAgICBzaXplX3QgdGhyZWFkQnl0ZXNWaXNpdGVkKCk7CiAg
ICAgCiAgICAgdm9pZCBmb3JFYWNoQ29kZUJsb2NrSW1wbChjb25zdCBTY29wZWRMYW1iZGE8Ym9v
bChDb2RlQmxvY2sqKT4mKTsKKyAgICAKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHdyaXRl
QmFycmllck9wYXF1ZVJvb3RTbG93KHZvaWQqKTsKKyAgICAKKyAgICB2b2lkIHNldE11dGF0b3JT
aG91bGRCZUZlbmNlZChib29sIHZhbHVlKTsKIAogICAgIGNvbnN0IEhlYXBUeXBlIG1faGVhcFR5
cGU7CiAgICAgY29uc3Qgc2l6ZV90IG1fcmFtU2l6ZTsKQEAgLTU0OSw2ICs1NTcsNyBAQCBwcml2
YXRlOgogICAgIFdyaXRlQmFycmllckJ1ZmZlciBtX3dyaXRlQmFycmllckJ1ZmZlcjsKICAgICBi
b29sIG1fbXV0YXRvclNob3VsZEJlRmVuY2VkIHsgT3B0aW9uczo6Zm9yY2VGZW5jZWRCYXJyaWVy
KCkgfTsKICAgICB1bnNpZ25lZCBtX2JhcnJpZXJUaHJlc2hvbGQgeyBPcHRpb25zOjpmb3JjZUZl
bmNlZEJhcnJpZXIoKSA/IHRhdXRvbG9naWNhbFRocmVzaG9sZCA6IGJsYWNrVGhyZXNob2xkIH07
CisgICAgVmVjdG9yPGJvb2wqPiBtX211dGF0b3JTaG91bGRCZUZlbmNlZENhY2hlczsKIAogICAg
IFZNKiBtX3ZtOwogICAgIGRvdWJsZSBtX2xhc3RGdWxsR0NMZW5ndGg7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHJldmlzaW9uIDIwOTY3OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM3MCw0ICszNzAsMTAgQEAgaW5saW5lIHZvaWQgSGVhcDo6c3RvcElmTmVjZXNzYXJ5KCkKICAg
ICBzdG9wSWZOZWNlc3NhcnlTbG93KCk7CiB9CiAKK2lubGluZSB2b2lkIEhlYXA6OndyaXRlQmFy
cmllck9wYXF1ZVJvb3Qodm9pZCogcm9vdCkKK3sKKyAgICBpZiAobXV0YXRvclNob3VsZEJlRmVu
Y2VkKCkpCisgICAgICAgIHdyaXRlQmFycmllck9wYXF1ZVJvb3RTbG93KHJvb3QpOworfQorCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnMuY3BwCShyZXZpc2lvbiAyMDk2NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM2LDYgKzMzNiw4IEBAIHN0YXRp
YyB2b2lkIHJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoKQogICAgIE9wdGlvbnM6OnVzZUNvbmN1
cnJlbnRHQygpID0gZmFsc2U7CiAjZW5kaWYKICAgICAKKyAgICBPcHRpb25zOjp1c2VDb25jdXJy
ZW50R0MoKSA9IHRydWU7CisgICAgCiAjaWYgT1MoV0lORE9XUykgJiYgQ1BVKFg4NikgCiAgICAg
Ly8gRGlzYWJsZSBKSVQgb24gV2luZG93cyBpZiBTU0UyIGlzIG5vdCBwcmVzZW50IAogICAgIGlm
ICghTWFjcm9Bc3NlbWJsZXJYODY6OnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQpJbmRleDogU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkocmV2aXNpb24gMjA5Njc4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTI1IEBACisyMDE2LTEyLTA5ICBGaWxpcCBQaXpsbyAgPGZw
aXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgVGhlIERPTSBzaG91bGQgaGF2ZSBhbiBhZHZhbmNp
bmcgd2F2ZWZyb250IG9wYXF1ZSByb290IGJhcnJpZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTcxMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIHRoaXMgd2FzIGNv
dmVyZWQgYnkgY3Jhc2hpbmcgdGVzdHMuCisgICAgICAgIAorICAgICAgICBDb25zaWRlciB0aGVz
ZSB0d28gY2FzZXM6CisgICAgICAgIAorICAgICAgICAgICBSZW1vdmFsOgorICAgICAgICAgICAx
KSBET00gYXQgc3RhcnQ6IEQtPlgtPlkKKyAgICAgICAgICAgMikgTWFyayBYLCBYLT52aXNpdENo
aWxkcmVuLCBhZGRPcGFxdWVSb290KEQpCisgICAgICAgICAgIDMpIHJlbW92ZSBYCisgICAgICAg
ICAgIDQpIFkgdGhpbmtzIGl0J3Mgbm90IHJlYWNoYWJsZSAoaXRzIG9wYXF1ZSByb290LCBYLCBp
cyBub3QgaW4gdGhlIHNldCkuCisgICAgICAgICAgIAorICAgICAgICAgICBJbnNlcnRpb246Cisg
ICAgICAgICAgIDEpIERPTSBhdCBzdGFydDogRCwgWC0+WQorICAgICAgICAgICAyKSBNYXJrIFgs
IFgtPnZpc2l0Q2hpbGRyZW4sIGFkZE9wYXF1ZVJvb3QoWCkKKyAgICAgICAgICAgMykgaW5zZXJ0
IFggaW50byBECisgICAgICAgICAgIDQpIFkgdGhpbmtzIGl0J3Mgbm90IHJlYWNoYWJsZSAoaXRz
IG9wYXF1ZSByb290LCBELCBpcyBub3QgaW4gdGhlIHNldCkuCisgICAgICAgIAorICAgICAgICBX
ZSBjYW4gZml4IHRoaXMgd2l0aCB0d28gYmFycmllcnM6CisgICAgICAgIAorICAgICAgICAgICBS
ZW1vdmFsOiBhZGQgWCAodGhlIHJlbW92ZWQgY2hpbGQpIHRvIHRoZSBvcGFxdWUgcm9vdCBzZXQu
CisgICAgICAgICAgIEluc2VydGlvbjogYWRkIEQgKHRoZSBpbnNlcnRpb24gcG9pbnQpIHRvIHRo
ZSBvcGFxdWUgcm9vdCBzZXQuCisgICAgICAgIAorICAgICAgICBUaGFua3MgUnlzb3N1a2UgZm9y
IGNvbWluZyB1cCB3aXRoIHRoaXMgaWRlYSEKKyAgICAgICAgCisgICAgICAgIEJvdGggYmFycmll
cnMgYWR2YW5jZSB0aGUgd2F2ZWZyb250LiBXZSBjb3VsZCBjb25zaWRlciByZXRyZWF0aW5nIHdh
dmVmcm9udCBiYXJyaWVycyBpbgorICAgICAgICB0aGUgZnV0dXJlICh3aGVyZSB3ZSBjYXVzZSB2
aXNpdENoaWxkcmVuIHRvIGJlIGNhbGxlZCBhZ2FpbiBvbiB3cmFwcGVycyB0aGF0IGJlbG9uZ2Vk
IHRvCisgICAgICAgIHJvb3RzIHRoYXQgZ290IGFmZmVjdGVkIGJ5IGluc2VydGlvbi9yZW1vdmFs
KSBidXQgdGhvc2Ugd291bGQgcHJvYmFibHkgcmVxdWlyZSBtb3JlCisgICAgICAgIGJvb2trZWVw
aW5nLgorICAgICAgICAKKyAgICAgICAgVG8gbWFrZSB0aGlzIGJhcnJpZXIgdmVyeSBmYXN0LCB0
aGUgV2ViQ29yZSBjYWNoZXMgdGhlIEpTQyBWTSdzIGJhcnJpZXIgc3RhdGUgaW4KKyAgICAgICAg
aXRzIG93biBnbG9iYWwgdmFyaWFibGUgZm9yIHZlcnkgZmFzdCBhY2Nlc3MuIFRoaXMgdmFyaWFi
bGUgd2lsbCBiZSBmYWxzZSBtb3N0IG9mIHRoZQorICAgICAgICB0aW1lLiBJdCdzIGZhbHNlIHdo
ZW4gdGhlcmUgaXMgbm8gVk0sIHNvIHRyaWdnZXJpbmcgdGhlIGJhcnJpZXIgd29uJ3QgY2F1c2Ug
dGhlIFZNIHRvIGJlCisgICAgICAgIGNyZWF0ZWQuIEl0J3Mgb25seSB0cnVlIHdoZW4gR0MgaXMg
cnVubmluZywgd2hpY2ggaXMgcmFyZSBieSBkZXNpZ24uCisgICAgICAgIAorICAgICAgICBUbyBt
YWtlIHRoYXQgY2FjaGluZyBtb3JlIHNlbnNpYmxlLCBJIGZpbmFsbHkgZ2F2ZSBXZWJDb3JlIGEg
Y2VudHJhbCBoZWFkZXIgZm9yCisgICAgICAgIHRoZSBjb21tb24gVk0gKENvbW1vblZNLmgpLgor
CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVh
bS9TRFBQcm9jZXNzb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U0RQUHJvY2Vzc29yOjpjYWxs
U2NyaXB0KToKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogYmluZGluZ3MvanMvQ29tbW9uVk0uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OmNvbW1vblZNU2xvdyk6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZUJhcnJpZXJPcGFxdWVS
b290U2xvdyk6CisgICAgICAgICogYmluZGluZ3MvanMvQ29tbW9uVk0uaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpjb21tb25WTSk6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZUJhcnJpZXJP
cGFxdWVSb290KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6bWFpblRocmVhZE5vcm1hbFdvcmxkKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29sbGVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHQ0NvbnRyb2xsZXI6OmdhcmJhZ2VDb2xsZWN0U29vbik6CisgICAg
ICAgIChXZWJDb3JlOjpHQ0NvbnRyb2xsZXI6OmdhcmJhZ2VDb2xsZWN0Tm93KToKKyAgICAgICAg
KFdlYkNvcmU6OkdDQ29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3ROb3dJZk5vdERvbmVSZWNlbnRs
eSk6CisgICAgICAgIChXZWJDb3JlOjpHQ0NvbnRyb2xsZXI6OnNldEphdmFTY3JpcHRHYXJiYWdl
Q29sbGVjdG9yVGltZXJFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdDQ29udHJvbGxlcjo6
ZGVsZXRlQWxsQ29kZSk6CisgICAgICAgIChXZWJDb3JlOjpHQ0NvbnRyb2xsZXI6OmRlbGV0ZUFs
bExpbmtlZENvZGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29s
dmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyOjpsb29r
dXBOYW1lc3BhY2VVUkkpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjphZGRJbXB1cmVQcm9wZXJ0eSk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNET01XaW5kb3dCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93
QmFzZTo6ZmlyZUZyYW1lQ2xlYXJlZFdhdGNocG9pbnRzRm9yV2luZG93KToKKyAgICAgICAgKFdl
YkNvcmU6OkpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0pOiBEZWxldGVkLgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9N
V2luZG93U2hlbGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dTaGVsbDo6c2V0
V2luZG93KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uaDoKKyAgICAgICAg
KFdlYkNvcmU6OnJvb3QpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENhY2hlZEZyYW1l
RGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWNoZWRGcmFtZURhdGE6OlNjcmlw
dENhY2hlZEZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWNoZWRGcmFtZURh
dGE6OnJlc3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjpj
bGVhcik6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjp+U2NyaXB0Q29udHJvbGxlcik6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpjcmVhdGVXb3JsZCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpnZXRBbGxXb3JsZHMpOgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJXaW5kb3dTaGVsbCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRDb250cm9sbGVyOjpjYWNoZWFibGVCaW5kaW5nUm9vdE9iamVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpiaW5kaW5nUm9vdE9iamVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjp3aW5kb3dTY3JpcHROUE9iamVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpqc09iamVjdEZvclBsdWdpbkVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJTY3JpcHRPYmplY3Rz
KToKKyAgICAgICAgKiBkb20vQ29sbGVjdGlvbkluZGV4Q2FjaGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWRGb3JDb2xsZWN0aW9uSW5kZXhDYWNoZSk6
CisgICAgICAgICogZG9tL0NvbnRhaW5lck5vZGUuY3BwOgorICAgICAgICAqIGRvbS9Db250YWlu
ZXJOb2RlQWxnb3JpdGhtcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpub3RpZnlDaGlsZE5vZGVJ
bnNlcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpub3RpZnlDaGlsZE5vZGVSZW1vdmVkKToKKyAg
ICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNo
b3VsZEJ5cGFzc01haW5Xb3JsZENvbnRlbnRTZWN1cml0eVBvbGljeSk6CisgICAgICAgICogZG9t
L05vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Om9wYXF1ZVJvb3QpOgorICAgICAgICAq
IGRvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ6OnZtKToKKyAgICAgICAgKiBodG1sL0hUTUxJbWFnZUxvYWRlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VMb2FkZXI6Om5vdGlmeUZpbmlzaGVkKToK
KyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTE1lZGlhRWxlbWVudDo6cGF1c2VBZnRlckRldGFjaGVkVGFzayk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MTWVkaWFFbGVtZW50OjplbnN1cmVJc29sYXRlZFdvcmxkKToKKyAgICAgICAgKiBo
dG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGx1Z0lu
SW1hZ2VFbGVtZW50SXNvbGF0ZWRXb3JsZCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6
dm0pOgorICAgICAgICAqIGluc3BlY3Rvci9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UGFnZVNjcmlwdERlYnVnU2VydmVyOjpQYWdlU2NyaXB0RGVidWdTZXJ2
ZXIpOgorICAgICAgICAqIHBhZ2UvUGVyZm9ybWFuY2VMb2dnaW5nLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlBlcmZvcm1hbmNlTG9nZ2luZzo6bWVtb3J5VXNhZ2VTdGF0aXN0aWNzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBlcmZvcm1hbmNlTG9nZ2luZzo6amF2YVNjcmlwdE9iamVjdENvdW50cyk6
CisgICAgICAgICogcGFnZS9SZXNvdXJjZVVzYWdlVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlVXNhZ2VUaHJlYWQ6OmNyZWF0ZVRocmVhZElmTmVlZGVkKToKKyAgICAgICAg
KiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6
OnJlcG9ydEFwcHJveGltYXRlTWVtb3J5Q29zdCk6CisgICAgICAgICogdGVzdGluZy9NZW1vcnlJ
bmZvLmg6CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlJbmZvOjpNZW1vcnlJbmZvKToKKwogMjAx
Ni0xMi0xMCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAg
ICBTdXBwb3J0IHRoZSBkZXByZWNhdGVkIGRpY3Rpb25hcnkgY29uc3RydWN0b3IgZm9yIERPTVBv
aW50UmVhZE9ubHkgYW5kIERPTVBvaW50CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNp
b24gMjA5Njc4KQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTEwNzUsNiArMTA3NSw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBiaW5kaW5n
cy9qcy9DYWNoZWRNb2R1bGVTY3JpcHQuY3BwCiAgICAgYmluZGluZ3MvanMvQ2FjaGVkTW9kdWxl
U2NyaXB0TG9hZGVyLmNwcAogICAgIGJpbmRpbmdzL2pzL0NhbGxiYWNrRnVuY3Rpb24uY3BwCisg
ICAgYmluZGluZ3MvanMvQ29tbW9uVk0uY3BwCiAgICAgYmluZGluZ3MvanMvRE9NV3JhcHBlcldv
cmxkLmNwcAogICAgIGJpbmRpbmdzL2pzL0RpY3Rpb25hcnkuY3BwCiAgICAgYmluZGluZ3MvanMv
R0NDb250cm9sbGVyLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9TRFBQcm9jZXNzb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29yLmNwcAkocmV2aXNpb24gMjA5Njc4KQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaWYgRU5BQkxFKFdFQl9SVEMpCiAjaW5jbHVkZSAiU0RQ
UHJvY2Vzc29yLmgiCiAKKyNpbmNsdWRlICJDb21tb25WTS5oIgogI2luY2x1ZGUgIkRvY3VtZW50
LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJTRFBQcm9jZXNzb3JTY3JpcHRSZXNv
dXJjZS5oIgpAQCAtNDk1LDcgKzQ5Niw3IEBAIGJvb2wgU0RQUHJvY2Vzc29yOjpjYWxsU2NyaXB0
KGNvbnN0IFN0cmkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFtX2lzb2xhdGVk
V29ybGQpCi0gICAgICAgIG1faXNvbGF0ZWRXb3JsZCA9IERPTVdyYXBwZXJXb3JsZDo6Y3JlYXRl
KEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsKKyAgICAgICAgbV9pc29sYXRlZFdvcmxkID0gRE9N
V3JhcHBlcldvcmxkOjpjcmVhdGUoY29tbW9uVk0oKSk7CiAKICAgICBTY3JpcHRDb250cm9sbGVy
JiBzY3JpcHRDb250cm9sbGVyID0gZG9jdW1lbnQtPmZyYW1lKCktPnNjcmlwdCgpOwogICAgIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KHNjcmlwdENvbnRyb2xsZXIuZ2xvYmFsT2JqZWN0KCptX2lzb2xhdGVkV29ybGQpKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBs
YWNlbWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMv
UXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0JKHJldmlzaW9uIDIwOTY3OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbQko
d29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW1wb3J0ICJRdWlja1RpbWVQbHVn
aW5SZXBsYWNlbWVudC5oIgogCisjaW1wb3J0ICJDb21tb25WTS5oIgogI2ltcG9ydCAiRXZlbnQu
aCIKICNpbXBvcnQgIkhUTUxQbHVnSW5FbGVtZW50LmgiCiAjaW1wb3J0ICJIVE1MVmlkZW9FbGVt
ZW50LmgiCkBAIC0xNDgsNyArMTQ5LDcgQEAgUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IFF1aWNr
VGltZVBsdWdpbgogCiBET01XcmFwcGVyV29ybGQmIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50
Ojppc29sYXRlZFdvcmxkKCkKIHsKLSAgICBzdGF0aWMgRE9NV3JhcHBlcldvcmxkJiBpc29sYXRl
ZFdvcmxkID0gRE9NV3JhcHBlcldvcmxkOjpjcmVhdGUoSlNET01XaW5kb3c6OmNvbW1vblZNKCkp
LmxlYWtSZWYoKTsKKyAgICBzdGF0aWMgRE9NV3JhcHBlcldvcmxkJiBpc29sYXRlZFdvcmxkID0g
RE9NV3JhcHBlcldvcmxkOjpjcmVhdGUoY29tbW9uVk0oKSkubGVha1JlZigpOwogICAgIHJldHVy
biBpc29sYXRlZFdvcmxkOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDk2NzgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTQ5Niw2ICs0OTYsOCBAQAogCQkwRjVFMjAwNjE4RTc3MUZDMDAzRUMzRTUgLyogUGxhdGZv
cm1DQUFuaW1hdGlvbkNvY29hLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjVFMjAwNTE4RTc3MUZDMDAzRUMzRTUgLyogUGxhdGZvcm1DQUFuaW1hdGlv
bkNvY29hLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY2MDVBRUMxNUY5NDg0ODAwNERGMEMwIC8qIFNjcm9sbGluZ0NvbnN0cmFpbnRzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjA1QUVBMTVG
OTQ4NDgwMDRERjBDMCAvKiBTY3JvbGxpbmdDb25zdHJhaW50cy5jcHAgKi87IH07CiAJCTBGNjA1
QUVEMTVGOTQ4NDgwMDRERjBDMCAvKiBTY3JvbGxpbmdDb25zdHJhaW50cy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MDVBRUIxNUY5NDg0ODAwNERG
MEMwIC8qIFNjcm9sbGluZ0NvbnN0cmFpbnRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2MEYzMkIxREZCQjEwNzAwNDE2RDZDIC8qIENvbW1v
blZNLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYw
RjMyQTFERkJCMTA0MDA0MTZENkMgLyogQ29tbW9uVk0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjYwRjMyQzFERkJCMTBCMDA0MTZENkMgLyog
Q29tbW9uVk0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY2MEYzMjkxREZCQjEwNDAwNDE2RDZDIC8qIENvbW1vblZNLmNwcCAqLzsgfTsKIAkJMEY2
MzgzREQxODYxNUIyOTAwM0U1REI1IC8qIFRocmVhZGVkU2Nyb2xsaW5nVHJlZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYzODNEQjE4NjE1QjI5
MDAzRTVEQjUgLyogVGhyZWFkZWRTY3JvbGxpbmdUcmVlLmNwcCAqLzsgfTsKIAkJMEY2MzgzREUx
ODYxNUIyOTAwM0U1REI1IC8qIFRocmVhZGVkU2Nyb2xsaW5nVHJlZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MzgzREMxODYxNUIyOTAwM0U1REI1
IC8qIFRocmVhZGVkU2Nyb2xsaW5nVHJlZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGNkExMkJEMUEwMDkyMzcwMEM2REU3MiAvKiBEZWJ1Z1Bh
Z2VPdmVybGF5cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjZBMTJCQjFBMDA5MjM3MDBDNkRFNzIgLyogRGVidWdQYWdlT3ZlcmxheXMuY3BwICov
OyB9OwpAQCAtNzQ5MCw2ICs3NDkyLDggQEAKIAkJMEY1RTIwMDUxOEU3NzFGQzAwM0VDM0U1IC8q
IFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2EuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY2MDVBRUExNUY5NDg0ODAwNERGMEMwIC8qIFNjcm9sbGluZ0NvbnN0cmFpbnRzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbGluZ0NvbnN0cmFp
bnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MDVBRUIxNUY5NDg0ODAw
NERGMEMwIC8qIFNjcm9sbGluZ0NvbnN0cmFpbnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNjcm9sbGluZ0NvbnN0cmFpbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGNjBGMzI5MURGQkIxMDQwMDQxNkQ2QyAvKiBDb21tb25WTS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb21tb25WTS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGNjBGMzJBMURGQkIxMDQwMDQxNkQ2QyAvKiBDb21tb25WTS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21tb25WTS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjYzODNEQjE4NjE1QjI5MDAzRTVEQjUgLyogVGhyZWFkZWRTY3Jv
bGxpbmdUcmVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRocmVh
ZGVkU2Nyb2xsaW5nVHJlZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjM4
M0RDMTg2MTVCMjkwMDNFNURCNSAvKiBUaHJlYWRlZFNjcm9sbGluZ1RyZWUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyZWFkZWRTY3JvbGxpbmdUcmVlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNkExMkJCMUEwMDkyMzcwMEM2REU3MiAvKiBEZWJ1Z1Bh
Z2VPdmVybGF5cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZWJ1
Z1BhZ2VPdmVybGF5cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTkxNCw2
ICsyMTkxOCw4IEBACiAJCQkJRTMwN0RFQzgxRDgxRTQ0ODAwMTQxQ0FGIC8qIENhY2hlZE1vZHVs
ZVNjcmlwdExvYWRlckNsaWVudC5oICovLAogCQkJCUJDRDUzMzYzMEVENjg0ODkwMDg4NzQ2OCAv
KiBDYWNoZWRTY3JpcHRTb3VyY2VQcm92aWRlci5oICovLAogCQkJCTkzRjhCMzA2MEEzMDBGRUEw
MEY2MUFCOCAvKiBDb2RlR2VuZXJhdG9ySlMucG0gKi8sCisJCQkJMEY2MEYzMjkxREZCQjEwNDAw
NDE2RDZDIC8qIENvbW1vblZNLmNwcCAqLywKKwkJCQkwRjYwRjMyQTFERkJCMTA0MDA0MTZENkMg
LyogQ29tbW9uVk0uaCAqLywKIAkJCQkzMTJENjdCMDE1MzU2OTFGMDA1NjNEMEQgLyogRGljdGlv
bmFyeS5jcHAgKi8sCiAJCQkJMzE2MDIzRUYxNTMyQzQwQzAwRDUwRkY0IC8qIERpY3Rpb25hcnku
aCAqLywKIAkJCQlCNTY1NzZFNzE3REE5NEUyMDBBNTZCREMgLyogRE9NQ29uc3RydWN0b3JXaXRo
RG9jdW1lbnQuaCAqLywKQEAgLTI3NTIxLDYgKzI3NTI3LDcgQEAKIAkJCQlGRDQ1QTk1QjE3NUQ0
MUVFMDBDMjFFQzggLyogU2hhcGVJbnRlcnZhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQ0NUE5
NTIxNzVEM0YzRTAwQzIxRUM4IC8qIFNoYXBlT3V0c2lkZUluZm8uaCBpbiBIZWFkZXJzICovLAog
CQkJCUZEMUFGMTUwMTY1NkYxNTEwMEM2RDRGNyAvKiBTaGFwZVZhbHVlLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjYwRjMyQjFERkJCMTA3MDA0MTZENkMgLyogQ29tbW9uVk0uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTFBNEE5NTRFMEI0RURDQ0IwMDJEOEMzQyAvKiBTaGFyZWRCdWZmZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTk3QjFGMDJGMTNCMDI1RDIwMEY1MTAzRiAvKiBTaGFyZWRCdWZmZXJD
aHVua1JlYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFQTMwOTlFQjc4QzAwNTZFNTgx
IC8qIFNoYXJlZFRpbWVyLmggaW4gSGVhZGVycyAqLywKQEAgLTMxNjI1LDYgKzMxNjMyLDcgQEAK
IAkJCQlBMTQ4MzJCMzE4N0Y2MjkxMDBEQTYzQTYgLyogV0FLQ2xpcFZpZXcubSBpbiBTb3VyY2Vz
ICovLAogCQkJCUExNDgzMkI1MTg3RjYyRkMwMERBNjNBNiAvKiBXQUtSZXNwb25kZXIubSBpbiBT
b3VyY2VzICovLAogCQkJCUExNDgzMkI3MTg3RjYzNkMwMERBNjNBNiAvKiBXQUtTY3JvbGxWaWV3
Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2MEYzMkMxREZCQjEwQjAwNDE2RDZDIC8qIENvbW1v
blZNLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExNDgzMkI5MTg3RjYzRDUwMERBNjNBNiAvKiBX
QUtWaWV3Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTE0ODMyQkMxODdGNjQ4RTAwREE2M0E2IC8q
IFdBS1dpbmRvdy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUZEN0YyOTkxMTNENEMwQ0IwMEFEOTUz
NSAvKiBXYXZlU2hhcGVyRFNQS2VybmVsLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvQ29tbW9uVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0NvbW1vblZNLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9Db21tb25WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKKworI2luY2x1ZGUgIlNj
cmlwdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIldlYkNv
cmVKU0NsaWVudERhdGEuaCIKKyNpbmNsdWRlIDxoZWFwL0hlYXBJbmxpbmVzLmg+CisjaW5jbHVk
ZSA8cnVudGltZS9WTS5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworVk0qIGdfY29tbW9uVk1Pck51
bGw7Citib29sIGdfb3BhcXVlUm9vdFdyaXRlQmFycmllckVuYWJsZWQ7CisKK1ZNJiBjb21tb25W
TVNsb3coKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKCFnX2Nv
bW1vblZNT3JOdWxsKTsKKyAgICAKKyAgICBTY3JpcHRDb250cm9sbGVyOjppbml0aWFsaXplVGhy
ZWFkaW5nKCk7CisgICAgZ19jb21tb25WTU9yTnVsbCA9ICZWTTo6Y3JlYXRlTGVha2VkKExhcmdl
SGVhcCkubGVha1JlZigpOworICAgIGdfY29tbW9uVk1Pck51bGwtPmhlYXAuYWNxdWlyZUFjY2Vz
cygpOyAvLyBBdCBhbnkgdGltZSwgd2UgbWF5IGRvIHRoaW5ncyB0aGF0IGFmZmVjdCB0aGUgR0Mu
CisjaWYgIVBMQVRGT1JNKElPUykKKyAgICBnX2NvbW1vblZNT3JOdWxsLT5zZXRFeGNsdXNpdmVU
aHJlYWQoc3RkOjp0aGlzX3RocmVhZDo6Z2V0X2lkKCkpOworI2Vsc2UKKyAgICBnX2NvbW1vblZN
T3JOdWxsLT5oZWFwLnNldFJ1bkxvb3AoV2ViVGhyZWFkUnVuTG9vcCgpKTsKKyAgICBnX2NvbW1v
blZNT3JOdWxsLT5oZWFwLm1hY2hpbmVUaHJlYWRzKCkuYWRkQ3VycmVudFRocmVhZCgpOworI2Vu
ZGlmCisgICAgCisgICAgZ19jb21tb25WTU9yTnVsbC0+c2V0R2xvYmFsQ29uc3RSZWRlY2xhcmF0
aW9uU2hvdWxkVGhyb3coU2V0dGluZ3M6Omdsb2JhbENvbnN0UmVkZWNsYXJhdGlvblNob3VsZFRo
cm93KCkpOworICAgIGdfY29tbW9uVk1Pck51bGwtPmhlYXAuYWRkTXV0YXRvclNob3VsZEJlRmVu
Y2VkQ2FjaGUoZ19vcGFxdWVSb290V3JpdGVCYXJyaWVyRW5hYmxlZCk7CisgICAgCisgICAgaW5p
dE5vcm1hbFdvcmxkQ2xpZW50RGF0YShnX2NvbW1vblZNT3JOdWxsKTsKKyAgICAKKyAgICByZXR1
cm4gKmdfY29tbW9uVk1Pck51bGw7Cit9CisKK3ZvaWQgd3JpdGVCYXJyaWVyT3BhcXVlUm9vdFNs
b3codm9pZCogcm9vdCkKK3sKKyAgICBpZiAoVk0qIHZtID0gZ19jb21tb25WTU9yTnVsbCkKKyAg
ICAgICAgdm0tPmhlYXAud3JpdGVCYXJyaWVyT3BhcXVlUm9vdChyb290KTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Db21t
b25WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0NvbW1vblZN
LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQ29tbW9uVk0u
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgSlNDIHsK
K2NsYXNzIFZNOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dFQkNPUkVfRVhQT1JUIGV4
dGVybiBKU0M6OlZNKiBnX2NvbW1vblZNT3JOdWxsOworV0VCQ09SRV9FWFBPUlQgZXh0ZXJuIGJv
b2wgZ19vcGFxdWVSb290V3JpdGVCYXJyaWVyRW5hYmxlZDsKKworV0VCQ09SRV9FWFBPUlQgSlND
OjpWTSYgY29tbW9uVk1TbG93KCk7CitXRUJDT1JFX0VYUE9SVCB2b2lkIHdyaXRlQmFycmllck9w
YXF1ZVJvb3RTbG93KHZvaWQqKTsKKworaW5saW5lIEpTQzo6Vk0mIGNvbW1vblZNKCkKK3sKKyAg
ICBpZiAoSlNDOjpWTSogcmVzdWx0ID0gZ19jb21tb25WTU9yTnVsbCkKKyAgICAgICAgcmV0dXJu
ICpyZXN1bHQ7CisgICAgcmV0dXJuIGNvbW1vblZNU2xvdygpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jPgordm9pZCB3cml0ZUJhcnJpZXJPcGFxdWVSb290KGNvbnN0IEZ1bmMmIHJvb3RU
aHVuaykKK3sKKyAgICBpZiAoZ19vcGFxdWVSb290V3JpdGVCYXJyaWVyRW5hYmxlZCkKKyAgICAg
ICAgd3JpdGVCYXJyaWVyT3BhcXVlUm9vdFNsb3cocm9vdFRodW5rKCkpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVdy
YXBwZXJXb3JsZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
RE9NV3JhcHBlcldvcmxkLmNwcAkocmV2aXNpb24gMjA5Njc4KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiAr
MjEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5o
IgogCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgogI2lu
Y2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRh
LmgiCkBAIC02OSw3ICs3MCw3IEBAIERPTVdyYXBwZXJXb3JsZCYgbm9ybWFsV29ybGQoSlNDOjpW
TSYgdm0KIERPTVdyYXBwZXJXb3JsZCYgbWFpblRocmVhZE5vcm1hbFdvcmxkKCkKIHsKICAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIHN0YXRpYyBET01XcmFwcGVyV29ybGQmIGNhY2hl
ZE5vcm1hbFdvcmxkID0gbm9ybWFsV29ybGQoSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOworICAg
IHN0YXRpYyBET01XcmFwcGVyV29ybGQmIGNhY2hlZE5vcm1hbFdvcmxkID0gbm9ybWFsV29ybGQo
Y29tbW9uVk0oKSk7CiAgICAgcmV0dXJuIGNhY2hlZE5vcm1hbFdvcmxkOwogfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDIw
OTY3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJHQ0NvbnRyb2xsZXIuaCIKIAotI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCisjaW5jbHVk
ZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlIDxydW50aW1lL1ZNLmg+CiAjaW5jbHVkZSA8cnVudGlt
ZS9KU0xvY2suaD4KICNpbmNsdWRlIDxoZWFwL0hlYXAuaD4KQEAgLTQwLDggKzQwLDggQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgdm9pZCBjb2xsZWN0KHZvaWQqKQogewotICAgIEpT
TG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsKLSAgICBKU0RPTVdpbmRv
dzo6Y29tbW9uVk0oKS5oZWFwLmNvbGxlY3RBbGxHYXJiYWdlKCk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2soY29tbW9uVk0oKSk7CisgICAgY29tbW9uVk0oKS5oZWFwLmNvbGxlY3RBbGxHYXJiYWdl
KCk7CiB9CiAKIEdDQ29udHJvbGxlciYgR0NDb250cm9sbGVyOjpzaW5nbGV0b24oKQpAQCAtNjEs
OCArNjEsOCBAQCB2b2lkIEdDQ29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3RTb29uKCkKICAgICAv
LyBvZiB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgdGltZXJzIGluIEphdmFTY3JpcHRDb3JlLiBXZSB3
b3VsZG4ndCBuZWVkIHRoaXMgaWYgSmF2YVNjcmlwdENvcmUKICAgICAvLyB1c2VkIGEgdGltZXIg
aW1wbGVtZW50YXRpb24gZnJvbSBXVEYgbGlrZSBSdW5Mb29wOjpUaW1lci4KICNpZiBVU0UoQ0Yp
IHx8IFVTRShHTElCKQotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25W
TSgpKTsKLSAgICBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS5oZWFwLnJlcG9ydEFiYW5kb25lZE9i
amVjdEdyYXBoKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7CisgICAgY29t
bW9uVk0oKS5oZWFwLnJlcG9ydEFiYW5kb25lZE9iamVjdEdyYXBoKCk7CiAjZWxzZQogICAgIGdh
cmJhZ2VDb2xsZWN0T25OZXh0UnVuTG9vcCgpOwogI2VuZGlmCkBAIC04MSw5ICs4MSw5IEBAIHZv
aWQgR0NDb250cm9sbGVyOjpnY1RpbWVyRmlyZWQoKQogCiB2b2lkIEdDQ29udHJvbGxlcjo6Z2Fy
YmFnZUNvbGxlY3ROb3coKQogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpj
b21tb25WTSgpKTsKLSAgICBpZiAoIUpTRE9NV2luZG93Ojpjb21tb25WTSgpLmhlYXAuaXNDdXJy
ZW50VGhyZWFkQnVzeSgpKSB7Ci0gICAgICAgIEpTRE9NV2luZG93Ojpjb21tb25WTSgpLmhlYXAu
Y29sbGVjdEFsbEdhcmJhZ2UoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhjb21tb25WTSgpKTsK
KyAgICBpZiAoIWNvbW1vblZNKCkuaGVhcC5pc0N1cnJlbnRUaHJlYWRCdXN5KCkpIHsKKyAgICAg
ICAgY29tbW9uVk0oKS5oZWFwLmNvbGxlY3RBbGxHYXJiYWdlKCk7CiAgICAgICAgIFdURjo6cmVs
ZWFzZUZhc3RNYWxsb2NGcmVlTWVtb3J5KCk7CiAgICAgfQogfQpAQCAtOTEsOSArOTEsOSBAQCB2
b2lkIEdDQ29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3ROb3coKQogdm9pZCBHQ0NvbnRyb2xsZXI6
OmdhcmJhZ2VDb2xsZWN0Tm93SWZOb3REb25lUmVjZW50bHkoKQogewogI2lmIFVTRShDRikgfHwg
VVNFKEdMSUIpCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkp
OwotICAgIGlmICghSlNET01XaW5kb3c6OmNvbW1vblZNKCkuaGVhcC5pc0N1cnJlbnRUaHJlYWRC
dXN5KCkpCi0gICAgICAgIEpTRE9NV2luZG93Ojpjb21tb25WTSgpLmhlYXAuY29sbGVjdEFsbEdh
cmJhZ2VJZk5vdERvbmVSZWNlbnRseSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGNvbW1vblZN
KCkpOworICAgIGlmICghY29tbW9uVk0oKS5oZWFwLmlzQ3VycmVudFRocmVhZEJ1c3koKSkKKyAg
ICAgICAgY29tbW9uVk0oKS5oZWFwLmNvbGxlY3RBbGxHYXJiYWdlSWZOb3REb25lUmVjZW50bHko
KTsKICNlbHNlCiAgICAgZ2FyYmFnZUNvbGxlY3RTb29uKCk7CiAjZW5kaWYKQEAgLTExMywxOSAr
MTEzLDE5IEBAIHZvaWQgR0NDb250cm9sbGVyOjpnYXJiYWdlQ29sbGVjdE9uQWx0ZXIKIAogdm9p
ZCBHQ0NvbnRyb2xsZXI6OnNldEphdmFTY3JpcHRHYXJiYWdlQ29sbGVjdG9yVGltZXJFbmFibGVk
KGJvb2wgZW5hYmxlKQogewotICAgIEpTRE9NV2luZG93Ojpjb21tb25WTSgpLmhlYXAuc2V0R2Fy
YmFnZUNvbGxlY3Rpb25UaW1lckVuYWJsZWQoZW5hYmxlKTsKKyAgICBjb21tb25WTSgpLmhlYXAu
c2V0R2FyYmFnZUNvbGxlY3Rpb25UaW1lckVuYWJsZWQoZW5hYmxlKTsKIH0KIAogdm9pZCBHQ0Nv
bnRyb2xsZXI6OmRlbGV0ZUFsbENvZGUoRGVsZXRlQWxsQ29kZUVmZm9ydCBlZmZvcnQpCiB7Ci0g
ICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOwotICAgIEpTRE9N
V2luZG93Ojpjb21tb25WTSgpLmRlbGV0ZUFsbENvZGUoZWZmb3J0KTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhjb21tb25WTSgpKTsKKyAgICBjb21tb25WTSgpLmRlbGV0ZUFsbENvZGUoZWZmb3J0
KTsKIH0KIAogdm9pZCBHQ0NvbnRyb2xsZXI6OmRlbGV0ZUFsbExpbmtlZENvZGUoRGVsZXRlQWxs
Q29kZUVmZm9ydCBlZmZvcnQpCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6
OmNvbW1vblZNKCkpOwotICAgIEpTRE9NV2luZG93Ojpjb21tb25WTSgpLmRlbGV0ZUFsbExpbmtl
ZENvZGUoZWZmb3J0KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhjb21tb25WTSgpKTsKKyAgICBj
b21tb25WTSgpLmRlbGV0ZUFsbExpbmtlZENvZGUoZWZmb3J0KTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21YUGF0
aE5TUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAkocmV2aXNpb24gMjA5Njc4KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
SlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuaCIKIAorI2luY2x1ZGUgIkNvbW1vblZNLmgiCiAjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAi
RnJhbWUuaCIKQEAgLTY5LDcgKzcwLDcgQEAgU3RyaW5nIEpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVy
Ojpsb29rdXBOYQogewogICAgIEFTU0VSVChtX2N1c3RvbVJlc29sdmVyKTsKIAotICAgIEpTTG9j
a0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgSlNMb2NrSG9s
ZGVyIGxvY2soY29tbW9uVk0oKSk7CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2dsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQmluZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkocmV2aXNpb24gMjA5Njc4KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMs
NiArMjMsNyBAQAogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogCiAjaW5jbHVkZSAiQ2FjaGVk
U2NyaXB0LmgiCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJET01Db25zdHJ1Y3Rv
cldpdGhEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJF
eGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaCIKQEAgLTYxLDcgKzYyLDcgQEAgU1RBVElDX0FTU0VS
VF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKAogCiB2b2lkIGFkZEltcHVyZVByb3BlcnR5KGNv
bnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKQogewotICAgIEpTRE9NV2luZG93Ojpjb21t
b25WTSgpLmFkZEltcHVyZVByb3BlcnR5KHByb3BlcnR5TmFtZSk7CisgICAgY29tbW9uVk0oKS5h
ZGRJbXB1cmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpOwogfQogCiBKU1ZhbHVlIGpzT3duZWRTdHJp
bmdPck51bGwoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAJKHJldmlzaW9uIDIw
OTY3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1ZGUgIkFjdGl2ZURPTUNh
bGxiYWNrTWljcm90YXNrLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCisjaW5jbHVkZSAiQ29tbW9u
Vk0uaCIKICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1
ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKQEAgLTI0NSwzMCArMjQ2LDYgQEAgSlNET01XaW5k
b3dTaGVsbCogSlNET01XaW5kb3dCYXNlOjpzaGVsbAogICAgIHJldHVybiBtX3NoZWxsOwogfQog
Ci1WTSYgSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKLQotICAgIHN0YXRpYyBWTSogdm0gPSBudWxscHRyOwotICAgIGlmICghdm0pIHsK
LSAgICAgICAgU2NyaXB0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwotICAgICAg
ICB2bSA9ICZWTTo6Y3JlYXRlTGVha2VkKExhcmdlSGVhcCkubGVha1JlZigpOwotICAgICAgICB2
bS0+aGVhcC5hY3F1aXJlQWNjZXNzKCk7IC8vIEF0IGFueSB0aW1lLCB3ZSBtYXkgZG8gdGhpbmdz
IHRoYXQgYWZmZWN0IHRoZSBHQy4KLSNpZiAhUExBVEZPUk0oSU9TKQotICAgICAgICB2bS0+c2V0
RXhjbHVzaXZlVGhyZWFkKHN0ZDo6dGhpc190aHJlYWQ6OmdldF9pZCgpKTsKLSNlbHNlCi0gICAg
ICAgIHZtLT5oZWFwLnNldFJ1bkxvb3AoV2ViVGhyZWFkUnVuTG9vcCgpKTsKLSAgICAgICAgdm0t
PmhlYXAubWFjaGluZVRocmVhZHMoKS5hZGRDdXJyZW50VGhyZWFkKCk7Ci0jZW5kaWYKLQotICAg
ICAgICB2bS0+c2V0R2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9uU2hvdWxkVGhyb3coU2V0dGluZ3M6
Omdsb2JhbENvbnN0UmVkZWNsYXJhdGlvblNob3VsZFRocm93KCkpOwotCi0gICAgICAgIGluaXRO
b3JtYWxXb3JsZENsaWVudERhdGEodm0pOwotICAgIH0KLQotICAgIHJldHVybiAqdm07Ci19Ci0K
IC8vIEpTRE9NR2xvYmFsT2JqZWN0KiBpcyBpZ25vcmVkLCBhY2Nlc3NpbmcgYSB3aW5kb3cgaW4g
YW55IGNvbnRleHQgd2lsbAogLy8gdXNlIHRoYXQgRE9NV2luZG93J3MgcHJvdG90eXBlIGNoYWlu
LgogSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqLCBET01X
aW5kb3cmIGRvbVdpbmRvdykKQEAgLTMwOSw3ICsyODYsNyBAQCBKU0RPTVdpbmRvdyogdG9KU0RP
TVdpbmRvdyhKU1ZhbHVlIHZhbHVlCiAKIHZvaWQgSlNET01XaW5kb3dCYXNlOjpmaXJlRnJhbWVD
bGVhcmVkV2F0Y2hwb2ludHNGb3JXaW5kb3coRE9NV2luZG93KiB3aW5kb3cpCiB7Ci0gICAgSlND
OjpWTSYgdm0gPSBKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCk7CisgICAgSlNDOjpWTSYgdm0g
PSBjb21tb25WTSgpOwogICAgIEpTVk1DbGllbnREYXRhKiBjbGllbnREYXRhID0gc3RhdGljX2Nh
c3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKICAgICBWZWN0b3I8UmVmPERPTVdy
YXBwZXJXb3JsZD4+IHdyYXBwZXJXb3JsZHM7CiAgICAgY2xpZW50RGF0YS0+Z2V0QWxsV29ybGRz
KHdyYXBwZXJXb3JsZHMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01X
aW5kb3dCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01XaW5kb3dCYXNlLmgJKHJldmlzaW9uIDIwOTY3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NV2luZG93QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw2IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBKU0RPTVdpbmRvd1NoZWxsKiBzaGVsbCgp
IGNvbnN0OwogCi0gICAgICAgIHN0YXRpYyBKU0M6OlZNJiBjb21tb25WTSgpOwogICAgICAgICBz
dGF0aWMgdm9pZCBmaXJlRnJhbWVDbGVhcmVkV2F0Y2hwb2ludHNGb3JXaW5kb3coRE9NV2luZG93
Kik7CiAgICAgICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqLCBKU0M6
OlNsb3RWaXNpdG9yJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
V2luZG93U2hlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NV2luZG93U2hlbGwuY3BwCShyZXZpc2lvbiAyMDk2NzgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjks
NiArMjksNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93U2hl
bGwuaCIKIAorI2luY2x1ZGUgIkNvbW1vblZNLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNs
dWRlICJHQ0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgpAQCAtNzksNyAr
ODAsNyBAQCB2b2lkIEpTRE9NV2luZG93U2hlbGw6OnNldFdpbmRvdyhSZWZQdHI8CiAgICAgLy8g
d2hlbiB3ZSBhbGxvY2F0ZSB0aGUgZ2xvYmFsIG9iamVjdC4gKE9uY2UgdGhlIGdsb2JhbCBvYmpl
Y3QgaXMgZnVsbHkKICAgICAvLyBjb25zdHJ1Y3RlZCwgaXQgY2FuIG1hcmsgaXRzIG93biBwcm90
b3R5cGUuKQogICAgIAotICAgIFZNJiB2bSA9IEpTRE9NV2luZG93Ojpjb21tb25WTSgpOworICAg
IFZNJiB2bSA9IGNvbW1vblZNKCk7CiAgICAgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUg
PSBKU0RPTVdpbmRvd1Byb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCAwLCBqc051bGwoKSk7
CiAgICAgU3Ryb25nPEpTRE9NV2luZG93UHJvdG90eXBlPiBwcm90b3R5cGUodm0sIEpTRE9NV2lu
ZG93UHJvdG90eXBlOjpjcmVhdGUodm0sIDAsIHByb3RvdHlwZVN0cnVjdHVyZSkpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uaAkocmV2aXNpb24gMjA5
Njc4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmgJKHdvcmtp
bmcgY29weSkKQEAgLTY1LDEyICs2NSw3IEBAIGlubGluZSB2b2lkIHdpbGxDcmVhdGVQb3NzaWJs
eU9ycGhhbmVkVHIKIAogaW5saW5lIHZvaWQqIHJvb3QoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAo
bm9kZS0+aW5Eb2N1bWVudCgpKQotICAgICAgICByZXR1cm4gJm5vZGUtPmRvY3VtZW50KCk7Ci0K
LSAgICB3aGlsZSAobm9kZS0+cGFyZW50T3JTaGFkb3dIb3N0Tm9kZSgpKQotICAgICAgICBub2Rl
ID0gbm9kZS0+cGFyZW50T3JTaGFkb3dIb3N0Tm9kZSgpOwotICAgIHJldHVybiBub2RlOworICAg
IHJldHVybiBub2RlLT5vcGFxdWVSb290KCk7CiB9CiAKIGlubGluZSB2b2lkKiByb290KE5vZGUm
IG5vZGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWNoZWRGcmFt
ZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dENhY2hlZEZyYW1lRGF0YS5jcHAJKHJldmlzaW9uIDIwOTY3OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjcmlwdENhY2hlZEZyYW1lRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTY3JpcHRDYWNo
ZWRGcmFtZURhdGEuaCIKIAorI2luY2x1ZGUgIkNvbW1vblZNLmgiCiAjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkdDQ29udHJvbGxlci5oIgpAQCAt
NDksNyArNTAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNjcmlwdENhY2hlZEZyYW1lRGF0
YTo6U2NyaXB0Q2FjaGVkRnJhbWVEYXRhKEZyYW1lJiBmcmFtZSkKIHsKLSAgICBKU0xvY2tIb2xk
ZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgIEpTTG9ja0hvbGRlciBs
b2NrKGNvbW1vblZNKCkpOwogCiAgICAgU2NyaXB0Q29udHJvbGxlciYgc2NyaXB0Q29udHJvbGxl
ciA9IGZyYW1lLnNjcmlwdCgpOwogICAgIFZlY3RvcjxKU0M6OlN0cm9uZzxKU0RPTVdpbmRvd1No
ZWxsPj4gd2luZG93U2hlbGxzID0gc2NyaXB0Q29udHJvbGxlci53aW5kb3dTaGVsbHMoKTsKQEAg
LTcxLDcgKzcyLDcgQEAgU2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjp+U2NyaXB0Q2FjaGVkRnJhbQog
CiB2b2lkIFNjcmlwdENhY2hlZEZyYW1lRGF0YTo6cmVzdG9yZShGcmFtZSYgZnJhbWUpCiB7Ci0g
ICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayhjb21tb25WTSgpKTsKIAogICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS5w
YWdlKCk7CiAgICAgU2NyaXB0Q29udHJvbGxlciYgc2NyaXB0Q29udHJvbGxlciA9IGZyYW1lLnNj
cmlwdCgpOwpAQCAtMTA2LDcgKzEwNyw3IEBAIHZvaWQgU2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjpj
bGVhcigpCiAgICAgaWYgKG1fd2luZG93cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7CiAgICAgbV93aW5kb3dzLmNsZWFyKCk7CiAg
ICAgR0NDb250cm9sbGVyOjpzaW5nbGV0b24oKS5nYXJiYWdlQ29sbGVjdFNvb24oKTsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3Bw
CShyZXZpc2lvbiAyMDk2NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRD
b250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVk
ZSAiQnJpZGdlSlNDLmgiCiAjaW5jbHVkZSAiQ2FjaGVkTW9kdWxlU2NyaXB0LmgiCisjaW5jbHVk
ZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJDb250ZW50U2VjdXJpdHlQb2xpY3kuaCIKICNpbmNs
dWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCkBAIC0xMDUsNyArMTA2
LDcgQEAgU2NyaXB0Q29udHJvbGxlcjo6flNjcmlwdENvbnRyb2xsZXIoKQogICAgIGRpc2Nvbm5l
Y3RQbGF0Zm9ybVNjcmlwdE9iamVjdHMoKTsKIAogICAgIGlmIChtX2NhY2hlYWJsZUJpbmRpbmdS
b290T2JqZWN0KSB7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6
Y29tbW9uVk0oKSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGNvbW1vblZNKCkpOwogICAg
ICAgICBtX2NhY2hlYWJsZUJpbmRpbmdSb290T2JqZWN0LT5pbnZhbGlkYXRlKCk7CiAgICAgICAg
IG1fY2FjaGVhYmxlQmluZGluZ1Jvb3RPYmplY3QgPSBudWxscHRyOwogICAgIH0KQEAgLTI3MSw3
ICsyNzIsNyBAQCBKU0M6OkpTVmFsdWUgU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVNCiAKIFJl
ZjxET01XcmFwcGVyV29ybGQ+IFNjcmlwdENvbnRyb2xsZXI6OmNyZWF0ZVdvcmxkKCkKIHsKLSAg
ICByZXR1cm4gRE9NV3JhcHBlcldvcmxkOjpjcmVhdGUoSlNET01XaW5kb3c6OmNvbW1vblZNKCkp
OworICAgIHJldHVybiBET01XcmFwcGVyV29ybGQ6OmNyZWF0ZShjb21tb25WTSgpKTsKIH0KIAog
VmVjdG9yPEpTQzo6U3Ryb25nPEpTRE9NV2luZG93U2hlbGw+PiBTY3JpcHRDb250cm9sbGVyOjp3
aW5kb3dTaGVsbHMoKQpAQCAtMjgzLDcgKzI4NCw3IEBAIFZlY3RvcjxKU0M6OlN0cm9uZzxKU0RP
TVdpbmRvd1NoZWxsPj4gU2MKIAogdm9pZCBTY3JpcHRDb250cm9sbGVyOjpnZXRBbGxXb3JsZHMo
VmVjdG9yPFJlZjxET01XcmFwcGVyV29ybGQ+PiYgd29ybGRzKQogewotICAgIHN0YXRpY19jYXN0
PEpTVk1DbGllbnREYXRhKj4oSlNET01XaW5kb3c6OmNvbW1vblZNKCkuY2xpZW50RGF0YSktPmdl
dEFsbFdvcmxkcyh3b3JsZHMpOworICAgIHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4oY29t
bW9uVk0oKS5jbGllbnREYXRhKS0+Z2V0QWxsV29ybGRzKHdvcmxkcyk7CiB9CiAKIHZvaWQgU2Ny
aXB0Q29udHJvbGxlcjo6Y2xlYXJXaW5kb3dTaGVsbChET01XaW5kb3cqIG5ld0RPTVdpbmRvdywg
Ym9vbCBnb2luZ0ludG9QYWdlQ2FjaGUpCkBAIC0yOTEsNyArMjkyLDcgQEAgdm9pZCBTY3JpcHRD
b250cm9sbGVyOjpjbGVhcldpbmRvd1NoZWxsKAogICAgIGlmIChtX3dpbmRvd1NoZWxscy5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2lu
ZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7
CiAKICAgICBWZWN0b3I8SlNDOjpTdHJvbmc8SlNET01XaW5kb3dTaGVsbD4+IHdpbmRvd1NoZWxs
cyA9IHRoaXMtPndpbmRvd1NoZWxscygpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2lu
ZG93U2hlbGxzLnNpemUoKTsgKytpKSB7CkBAIC00OTYsNyArNDk3LDcgQEAgQmluZGluZ3M6OlJv
b3RPYmplY3QqIFNjcmlwdENvbnRyb2xsZXI6OgogICAgICAgICByZXR1cm4gMDsKIAogICAgIGlm
ICghbV9jYWNoZWFibGVCaW5kaW5nUm9vdE9iamVjdCkgewotICAgICAgICBKU0xvY2tIb2xkZXIg
bG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgICAgICBKU0xvY2tIb2xkZXIg
bG9jayhjb21tb25WTSgpKTsKICAgICAgICAgbV9jYWNoZWFibGVCaW5kaW5nUm9vdE9iamVjdCA9
IEJpbmRpbmdzOjpSb290T2JqZWN0OjpjcmVhdGUoMCwgZ2xvYmFsT2JqZWN0KHBsdWdpbldvcmxk
KCkpKTsKICAgICB9CiAgICAgcmV0dXJuIG1fY2FjaGVhYmxlQmluZGluZ1Jvb3RPYmplY3QuZ2V0
KCk7CkBAIC01MDgsNyArNTA5LDcgQEAgQmluZGluZ3M6OlJvb3RPYmplY3QqIFNjcmlwdENvbnRy
b2xsZXI6OgogICAgICAgICByZXR1cm4gMDsKIAogICAgIGlmICghbV9iaW5kaW5nUm9vdE9iamVj
dCkgewotICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZN
KCkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhjb21tb25WTSgpKTsKICAgICAgICAgbV9i
aW5kaW5nUm9vdE9iamVjdCA9IEJpbmRpbmdzOjpSb290T2JqZWN0OjpjcmVhdGUoMCwgZ2xvYmFs
T2JqZWN0KHBsdWdpbldvcmxkKCkpKTsKICAgICB9CiAgICAgcmV0dXJuIG1fYmluZGluZ1Jvb3RP
YmplY3QuZ2V0KCk7CkBAIC01MzksNyArNTQwLDcgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpj
b2xsZWN0SXNvbGF0ZWRDbwogTlBPYmplY3QqIFNjcmlwdENvbnRyb2xsZXI6OndpbmRvd1Njcmlw
dE5QT2JqZWN0KCkKIHsKICAgICBpZiAoIW1fd2luZG93U2NyaXB0TlBPYmplY3QpIHsKLSAgICAg
ICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICAg
ICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7CiAgICAgICAgIGlmIChjYW5FeGVjdXRl
U2NyaXB0cyhOb3RBYm91dFRvRXhlY3V0ZVNjcmlwdCkpIHsKICAgICAgICAgICAgIC8vIEphdmFT
Y3JpcHQgaXMgZW5hYmxlZCwgc28gdGhlcmUgaXMgYSBKYXZhU2NyaXB0IHdpbmRvdyBvYmplY3Qu
CiAgICAgICAgICAgICAvLyBSZXR1cm4gYW4gTlBPYmplY3QgYm91bmQgdG8gdGhlIHdpbmRvdyBv
YmplY3QuCkBAIC01NzQsNyArNTc1LDcgQEAgSlNPYmplY3QqIFNjcmlwdENvbnRyb2xsZXI6Ompz
T2JqZWN0Rm9yUAogICAgIGlmICghY2FuRXhlY3V0ZVNjcmlwdHMoTm90QWJvdXRUb0V4ZWN1dGVT
Y3JpcHQpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9N
V2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0o
KSk7CiAKICAgICAvLyBDcmVhdGUgYSBKU09iamVjdCBib3VuZCB0byB0aGlzIGVsZW1lbnQKICAg
ICBKU0RPTVdpbmRvdyogZ2xvYmFsT2JqID0gZ2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpOwpA
QCAtNjExLDcgKzYxMiw3IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Y2xlYW51cFNjcmlwdE9i
amUKIAogdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhclNjcmlwdE9iamVjdHMoKQogewotICAg
IEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgSlNM
b2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7CiAKICAgICBSb290T2JqZWN0TWFwOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBtX3Jvb3RPYmplY3RzLmVuZCgpOwogICAgIGZvciAoUm9vdE9iamVjdE1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jvb3RPYmplY3RzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXJN
YWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29u
dHJvbGxlck1hYy5tbQkocmV2aXNpb24gMjA5Njc4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0Q29udHJvbGxlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAs
NyBAQAogI2ltcG9ydCAiU2NyaXB0Q29udHJvbGxlci5oIgogCiAjaW1wb3J0ICJCcmlkZ2VKU0Mu
aCIKKyNpbXBvcnQgIkNvbW1vblZNLmgiCiAjaW1wb3J0ICJET01XaW5kb3cuaCIKICNpbXBvcnQg
IkZyYW1lLmgiCiAjaW1wb3J0ICJGcmFtZUxvYWRlci5oIgpAQCAtMTAwLDcgKzEwMSw3IEBAIFdl
YlNjcmlwdE9iamVjdCAqU2NyaXB0Q29udHJvbGxlcjo6d2luZG8KICAgICAgICAgcmV0dXJuIG5p
bDsKIAogICAgIGlmICghbV93aW5kb3dTY3JpcHRPYmplY3QpIHsKLSAgICAgICAgSlNDOjpKU0xv
Y2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgICAgICBKU0M6
OkpTTG9ja0hvbGRlciBsb2NrKGNvbW1vblZNKCkpOwogICAgICAgICBKU0M6OkJpbmRpbmdzOjpS
b290T2JqZWN0KiByb290ID0gYmluZGluZ1Jvb3RPYmplY3QoKTsKICAgICAgICAgbV93aW5kb3dT
Y3JpcHRPYmplY3QgPSBbV2ViU2NyaXB0T2JqZWN0IHNjcmlwdE9iamVjdEZvckpTT2JqZWN0OnRv
UmVmKHdpbmRvd1NoZWxsKHBsdWdpbldvcmxkKCkpKSBvcmlnaW5Sb290T2JqZWN0OnJvb3Qgcm9v
dE9iamVjdDpyb290XTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ29sbGVjdGlv
bkluZGV4Q2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Db2xsZWN0
aW9uSW5kZXhDYWNoZS5jcHAJKHJldmlzaW9uIDIwOTY3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9Db2xsZWN0aW9uSW5kZXhDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDE0ICsyNiwx
NSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNvbGxlY3Rpb25JbmRleENhY2hl
LmgiCiAKKyNpbmNsdWRlICJDb21tb25WTS5oIgogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgotI2lu
Y2x1ZGUgIkpTRE9NV2luZG93QmFzZS5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWRGb3JD
b2xsZWN0aW9uSW5kZXhDYWNoZShzaXplX3QgY29zdCkKIHsKLSAgICBKU0M6OlZNJiB2bSA9IEpT
RE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKTsKKyAgICBKU0M6OlZNJiB2bSA9IGNvbW1vblZNKCk7
CiAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAgICAgLy8gRklYTUU6IEFkb3B0IHJl
cG9ydEV4dHJhTWVtb3J5VmlzaXRlZCwgYW5kIHN3aXRjaCB0byByZXBvcnRFeHRyYU1lbW9yeUFs
bG9jYXRlZC4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQyNTk1CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCShyZXZpc2lvbiAy
MDk2NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAo
a25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29p
dmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxs
ZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAw
OCwgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIw
MDksIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAi
Q2hyb21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAjaW5jbHVkZSAiQ2xhc3NDb2xs
ZWN0aW9uLmgiCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJDb250YWluZXJOb2Rl
QWxnb3JpdGhtcy5oIgogI2luY2x1ZGUgIkVkaXRvci5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMu
aCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlQWxnb3JpdGhtcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1z
LmNwcAkocmV2aXNpb24gMjA5Njc4KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5v
ZGVBbGdvcml0aG1zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNvbnRhaW5lck5vZGVBbGdvcml0aG1zLmgiCiAKKyNp
bmNsdWRlICJDb21tb25WTS5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgog
I2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIk5vRXZlbnRE
aXNwYXRjaEFzc2VydGlvbi5oIgpAQCAtMzMsMTAgKzM0LDEwIEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotdm9pZCBub3RpZnlOb2RlSW5zZXJ0ZWRJbnRvVHJlZShDb250YWluZXJOb2RlJiBp
bnNlcnRpb25Qb2ludCwgQ29udGFpbmVyTm9kZSYsIE5vZGVWZWN0b3ImIHBvc3RJbnNlcnRpb25O
b3RpZmljYXRpb25UYXJnZXRzKTsKLXZvaWQgbm90aWZ5Tm9kZUluc2VydGVkSW50b0RvY3VtZW50
KENvbnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50LCBOb2RlJiwgTm9kZVZlY3RvciYgcG9zdElu
c2VydGlvbk5vdGlmaWNhdGlvblRhcmdldHMpOwotdm9pZCBub3RpZnlOb2RlUmVtb3ZlZEZyb21U
cmVlKENvbnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50LCBDb250YWluZXJOb2RlJik7Ci12b2lk
IG5vdGlmeU5vZGVSZW1vdmVkRnJvbURvY3VtZW50KENvbnRhaW5lck5vZGUmIGluc2VydGlvblBv
aW50LCBOb2RlJik7CitzdGF0aWMgdm9pZCBub3RpZnlOb2RlSW5zZXJ0ZWRJbnRvVHJlZShDb250
YWluZXJOb2RlJiBpbnNlcnRpb25Qb2ludCwgQ29udGFpbmVyTm9kZSYsIE5vZGVWZWN0b3ImIHBv
c3RJbnNlcnRpb25Ob3RpZmljYXRpb25UYXJnZXRzKTsKK3N0YXRpYyB2b2lkIG5vdGlmeU5vZGVJ
bnNlcnRlZEludG9Eb2N1bWVudChDb250YWluZXJOb2RlJiBpbnNlcnRpb25Qb2ludCwgTm9kZSYs
IE5vZGVWZWN0b3ImIHBvc3RJbnNlcnRpb25Ob3RpZmljYXRpb25UYXJnZXRzKTsKK3N0YXRpYyB2
b2lkIG5vdGlmeU5vZGVSZW1vdmVkRnJvbVRyZWUoQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9p
bnQsIENvbnRhaW5lck5vZGUmKTsKK3N0YXRpYyB2b2lkIG5vdGlmeU5vZGVSZW1vdmVkRnJvbURv
Y3VtZW50KENvbnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50LCBOb2RlJik7CiAKIHN0YXRpYyB2
b2lkIG5vdGlmeURlc2NlbmRhbnRJbnNlcnRlZEludG9Eb2N1bWVudChDb250YWluZXJOb2RlJiBp
bnNlcnRpb25Qb2ludCwgQ29udGFpbmVyTm9kZSYgbm9kZSwgTm9kZVZlY3RvciYgcG9zdEluc2Vy
dGlvbk5vdGlmaWNhdGlvblRhcmdldHMpCiB7CkBAIC0xMDEsNiArMTAyLDggQEAgdm9pZCBub3Rp
ZnlDaGlsZE5vZGVJbnNlcnRlZChDb250YWluZXJObwogICAgICAgICBub3RpZnlOb2RlSW5zZXJ0
ZWRJbnRvRG9jdW1lbnQoaW5zZXJ0aW9uUG9pbnQsIG5vZGUsIHBvc3RJbnNlcnRpb25Ob3RpZmlj
YXRpb25UYXJnZXRzKTsKICAgICBlbHNlIGlmIChpczxDb250YWluZXJOb2RlPihub2RlKSkKICAg
ICAgICAgbm90aWZ5Tm9kZUluc2VydGVkSW50b1RyZWUoaW5zZXJ0aW9uUG9pbnQsIGRvd25jYXN0
PENvbnRhaW5lck5vZGU+KG5vZGUpLCBwb3N0SW5zZXJ0aW9uTm90aWZpY2F0aW9uVGFyZ2V0cyk7
CisKKyAgICB3cml0ZUJhcnJpZXJPcGFxdWVSb290KFsmaW5zZXJ0aW9uUG9pbnRdICgpIC0+IHZv
aWQqIHsgcmV0dXJuIGluc2VydGlvblBvaW50Lm9wYXF1ZVJvb3QoKTsgfSk7CiB9CiAKIHZvaWQg
bm90aWZ5Tm9kZVJlbW92ZWRGcm9tRG9jdW1lbnQoQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9p
bnQsIE5vZGUmIG5vZGUpCkBAIC0xNTIsNiArMTU1LDggQEAgdm9pZCBub3RpZnlOb2RlUmVtb3Zl
ZEZyb21UcmVlKENvbnRhaW5lcgogCiB2b2lkIG5vdGlmeUNoaWxkTm9kZVJlbW92ZWQoQ29udGFp
bmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQsIE5vZGUmIGNoaWxkKQogeworICAgIHdyaXRlQmFycmll
ck9wYXF1ZVJvb3QoWyZjaGlsZF0gKCkgLT4gdm9pZCogeyByZXR1cm4gJmNoaWxkOyB9KTsKKwog
ICAgIGlmICghY2hpbGQuaW5Eb2N1bWVudCgpKSB7CiAgICAgICAgIGlmIChpczxDb250YWluZXJO
b2RlPihjaGlsZCkpCiAgICAgICAgICAgICBub3RpZnlOb2RlUmVtb3ZlZEZyb21UcmVlKGluc2Vy
dGlvblBvaW50LCBkb3duY2FzdDxDb250YWluZXJOb2RlPihjaGlsZCkpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAyMDk2NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAi
Q2hyb21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAjaW5jbHVkZSAiQ29tbWVudC5o
IgorI2luY2x1ZGUgIkNvbW1vblZNLmgiCiAjaW5jbHVkZSAiQ29tcG9zaXRpb25FdmVudC5oIgog
I2luY2x1ZGUgIkNvbnRlbnRTZWN1cml0eVBvbGljeS5oIgogI2luY2x1ZGUgIkNvb2tpZUphci5o
IgpAQCAtMjM2NSw3ICsyMzY2LDcgQEAgdm9pZCBEb2N1bWVudDo6cmVzdW1lRGV2aWNlTW90aW9u
QW5kT3JpZQogCiBib29sIERvY3VtZW50OjpzaG91bGRCeXBhc3NNYWluV29ybGRDb250ZW50U2Vj
dXJpdHlQb2xpY3koKSBjb25zdAogewotICAgIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBK
U0RPTVdpbmRvdzo6Y29tbW9uVk0oKS50b3BDYWxsRnJhbWU7CisgICAgSlNDOjpDYWxsRnJhbWUq
IGNhbGxGcmFtZSA9IGNvbW1vblZNKCkudG9wQ2FsbEZyYW1lOwogICAgIGlmIChjYWxsRnJhbWUg
PT0gSlNDOjpDYWxsRnJhbWU6Om5vQ2FsbGVyKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBET01XcmFwcGVyV29ybGQmIGRvbVdyYXBwZXJXb3JsZCA9IGN1cnJlbnRXb3JsZChjYWxsRnJh
bWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMjA5Njc4KQorKysgU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzk5LDYgKzIzOTksMTggQEAg
Ym9vbCBOb2RlOjppblJlbmRlcmVkRG9jdW1lbnQoKSBjb25zdAogICAgIHJldHVybiBpbkRvY3Vt
ZW50KCkgJiYgZG9jdW1lbnQoKS5oYXNMaXZpbmdSZW5kZXJUcmVlKCk7CiB9CiAKK3ZvaWQqIE5v
ZGU6Om9wYXF1ZVJvb3RTbG93KCkgY29uc3QKK3sKKyAgICBjb25zdCBOb2RlKiBub2RlID0gdGhp
czsKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGNvbnN0IE5vZGUqIG5leHROb2RlID0gbm9kZS0+
cGFyZW50T3JTaGFkb3dIb3N0Tm9kZSgpOworICAgICAgICBpZiAoIW5leHROb2RlKQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIG5vZGUgPSBuZXh0Tm9kZTsKKyAgICB9CisgICAgcmV0dXJu
IGNvbnN0X2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PGNvbnN0IHZvaWQqPihub2RlKSk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2lmIEVOQUJMRShUUkVFX0RFQlVHR0lORykKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuaAkocmV2aXNpb24gMjA5Njc4KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05v
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjY2LDYgKzI2Niw4IEBAIHB1YmxpYzoKICAgICAgICAg
Ym9vbCBjb21wb3NlZDsKICAgICB9OwogICAgIE5vZGUmIGdldFJvb3ROb2RlKGNvbnN0IEdldFJv
b3ROb2RlT3B0aW9ucyYpIGNvbnN0OworICAgIAorICAgIHZvaWQqIG9wYXF1ZVJvb3QoKSBjb25z
dDsKIAogICAgIC8vIFVzZSB3aGVuIGl0J3MgZ3VhcmFudGVlZCB0byB0aGF0IHNoYWRvd0hvc3Qg
aXMgbnVsbC4KICAgICBDb250YWluZXJOb2RlKiBwYXJlbnROb2RlR3VhcmFudGVlZEhvc3RGcmVl
KCkgY29uc3Q7CkBAIC02NzEsNiArNjczLDggQEAgcHJpdmF0ZToKICAgICBIYXNoU2V0PE11dGF0
aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24qPiogdHJhbnNpZW50TXV0YXRpb25PYnNlcnZlclJlZ2lz
dHJ5KCk7CiAKICAgICB2b2lkIGFkanVzdFN0eWxlVmFsaWRpdHkoU3R5bGU6OlZhbGlkaXR5LCBT
dHlsZTo6SW52YWxpZGF0aW9uTW9kZSk7CisgICAgCisgICAgdm9pZCogb3BhcXVlUm9vdFNsb3co
KSBjb25zdDsKIAogICAgIGludCBtX3JlZkNvdW50OwogICAgIG11dGFibGUgdWludDMyX3QgbV9u
b2RlRmxhZ3M7CkBAIC03NTcsNiArNzYxLDE1IEBAIGlubGluZSBDb250YWluZXJOb2RlKiBOb2Rl
OjpwYXJlbnROb2RlKCkKICAgICByZXR1cm4gbV9wYXJlbnROb2RlOwogfQogCitpbmxpbmUgdm9p
ZCogTm9kZTo6b3BhcXVlUm9vdCgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFBvc3NpYmxlIHJh
Y2U/CisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTcx
MworICAgIGlmIChpbkRvY3VtZW50KCkpCisgICAgICAgIHJldHVybiAmZG9jdW1lbnQoKTsKKyAg
ICByZXR1cm4gb3BhcXVlUm9vdFNsb3coKTsKK30KKwogaW5saW5lIENvbnRhaW5lck5vZGUqIE5v
ZGU6OnBhcmVudE5vZGVHdWFyYW50ZWVkSG9zdEZyZWUoKSBjb25zdAogewogICAgIEFTU0VSVCgh
aXNTaGFkb3dSb290KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVj
dXRpb25Db250ZXh0LmNwcAkocmV2aXNpb24gMjA5Njc4KQorKysgU291cmNlL1dlYkNvcmUvZG9t
L1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3
IEBACiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogCiAjaW5jbHVkZSAiQ2Fj
aGVkU2NyaXB0LmgiCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJET01UaW1lci5o
IgogI2luY2x1ZGUgIkRhdGFiYXNlQ29udGV4dC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCkBA
IC00NzcsNyArNDc4LDcgQEAgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBTY3JpcHRFeGVjdXRp
bwogSlNDOjpWTSYgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6dm0oKQogewogICAgIGlmIChpczxE
b2N1bWVudD4oKnRoaXMpKQotICAgICAgICByZXR1cm4gSlNET01XaW5kb3c6OmNvbW1vblZNKCk7
CisgICAgICAgIHJldHVybiBjb21tb25WTSgpOwogCiAgICAgcmV0dXJuIGRvd25jYXN0PFdvcmtl
ckdsb2JhbFNjb3BlPigqdGhpcykuc2NyaXB0KCktPnZtKCk7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxJbWFnZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MSW1hZ2VMb2FkZXIuY3BwCShyZXZpc2lvbiAyMDk2NzgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxJbWFnZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYg
KzIzLDcgQEAKICNpbmNsdWRlICJIVE1MSW1hZ2VMb2FkZXIuaCIKIAogI2luY2x1ZGUgIkNhY2hl
ZEltYWdlLmgiCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJET01XaW5kb3cuaCIK
ICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKQEAgLTg0LDcgKzg1LDcg
QEAgdm9pZCBIVE1MSW1hZ2VMb2FkZXI6Om5vdGlmeUZpbmlzaGVkKENhYwogICAgIGJvb2wgbG9h
ZEVycm9yID0gY2FjaGVkSW1hZ2UuZXJyb3JPY2N1cnJlZCgpIHx8IGNhY2hlZEltYWdlLnJlc3Bv
bnNlKCkuaHR0cFN0YXR1c0NvZGUoKSA+PSA0MDA7CiAgICAgaWYgKCFsb2FkRXJyb3IpIHsKICAg
ICAgICAgaWYgKCFlbGVtZW50KCkuaW5Eb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICBKU0M6OlZN
JiB2bSA9IEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKTsKKyAgICAgICAgICAgIEpTQzo6Vk0m
IHZtID0gY29tbW9uVk0oKTsKICAgICAgICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0p
OwogICAgICAgICAgICAgLy8gRklYTUU6IEFkb3B0IHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCwg
YW5kIHN3aXRjaCB0byByZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZC4KICAgICAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI1OTUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkocmV2aXNpb24gMjA5Njc4KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUg
IkNsaWVudFJlY3QuaCIKICNpbmNsdWRlICJDbGllbnRSZWN0TGlzdC5oIgorI2luY2x1ZGUgIkNv
bW1vblZNLmgiCiAjaW5jbHVkZSAiQ29udGVudFNlY3VyaXR5UG9saWN5LmgiCiAjaW5jbHVkZSAi
Q29udGVudFR5cGUuaCIKICNpbmNsdWRlICJDb29raWVKYXIuaCIKQEAgLTg0OSw3ICs4NTAsNyBA
QCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnBhdXNlQWZ0ZXJEZXRhY2hlCiAKICAgICBzaXplX3Qg
ZXh0cmFNZW1vcnlDb3N0ID0gbV9wbGF5ZXItPmV4dHJhTWVtb3J5Q29zdCgpOwogICAgIGlmIChl
eHRyYU1lbW9yeUNvc3QgPiBtX3JlcG9ydGVkRXh0cmFNZW1vcnlDb3N0KSB7Ci0gICAgICAgIEpT
Qzo6Vk0mIHZtID0gSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpOworICAgICAgICBKU0M6OlZN
JiB2bSA9IGNvbW1vblZNKCk7CiAgICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOwog
CiAgICAgICAgIHNpemVfdCBleHRyYU1lbW9yeUNvc3REZWx0YSA9IGV4dHJhTWVtb3J5Q29zdCAt
IG1fcmVwb3J0ZWRFeHRyYU1lbW9yeUNvc3Q7CkBAIC02NDk2LDcgKzY0OTcsNyBAQCBSZWZQdHI8
VmlkZW9QbGF5YmFja1F1YWxpdHk+IEhUTUxNZWRpYUVsCiBET01XcmFwcGVyV29ybGQmIEhUTUxN
ZWRpYUVsZW1lbnQ6OmVuc3VyZUlzb2xhdGVkV29ybGQoKQogewogICAgIGlmICghbV9pc29sYXRl
ZFdvcmxkKQotICAgICAgICBtX2lzb2xhdGVkV29ybGQgPSBET01XcmFwcGVyV29ybGQ6OmNyZWF0
ZShKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7CisgICAgICAgIG1faXNvbGF0ZWRXb3JsZCA9IERP
TVdyYXBwZXJXb3JsZDo6Y3JlYXRlKGNvbW1vblZNKCkpOwogICAgIHJldHVybiAqbV9pc29sYXRl
ZFdvcmxkOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbklt
YWdlRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwOTY3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcg
QEAKIAogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgorI2lu
Y2x1ZGUgIkNvbW1vblZNLmgiCiAjaW5jbHVkZSAiQ29udGVudFNlY3VyaXR5UG9saWN5LmgiCiAj
aW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKQEAgLTM2NSw3ICsz
NjYsNyBAQCB2b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnVwZGF0ZVNuYXBzCiAKIHN0YXRp
YyBET01XcmFwcGVyV29ybGQmIHBsdWdJbkltYWdlRWxlbWVudElzb2xhdGVkV29ybGQoKQogewot
ICAgIHN0YXRpYyBET01XcmFwcGVyV29ybGQmIGlzb2xhdGVkV29ybGQgPSBET01XcmFwcGVyV29y
bGQ6OmNyZWF0ZShKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSkubGVha1JlZigpOworICAgIHN0YXRp
YyBET01XcmFwcGVyV29ybGQmIGlzb2xhdGVkV29ybGQgPSBET01XcmFwcGVyV29ybGQ6OmNyZWF0
ZShjb21tb25WTSgpKS5sZWFrUmVmKCk7CiAgICAgcmV0dXJuIGlzb2xhdGVkV29ybGQ7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxl
ci5jcHAJKHJldmlzaW9uIDIwOTY3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2lu
Y2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKIAogI2luY2x1ZGUgIkNvbW1hbmRMaW5lQVBJ
SG9zdC5oIgorI2luY2x1ZGUgIkNvbW1vblZNLmgiCiAjaW5jbHVkZSAiRE9NV3JhcHBlcldvcmxk
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQXBw
bGljYXRpb25DYWNoZUFnZW50LmgiCkBAIC00NzAsNyArNDcxLDcgQEAgUGFnZVNjcmlwdERlYnVn
U2VydmVyJiBJbnNwZWN0b3JDb250cm9sbAogCiBKU0M6OlZNJiBJbnNwZWN0b3JDb250cm9sbGVy
Ojp2bSgpCiB7Ci0gICAgcmV0dXJuIEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKTsKKyAgICBy
ZXR1cm4gY29tbW9uVk0oKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRDb21w
b3NpdGUoRnJhbWUmIGZyYW1lKQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VT
Y3JpcHREZWJ1Z1NlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHJldmlzaW9uIDIwOTY3OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUGFn
ZVNjcmlwdERlYnVnU2VydmVyLmgiCiAKKyNpbmNsdWRlICJDb21tb25WTS5oIgogI2luY2x1ZGUg
IkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnRMb29wLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3
LmgiCkBAIC01NCw3ICs1NSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIFBhZ2VTY3JpcHREZWJ1Z1NlcnZlcjo6UGFnZVNjcmlwdERlYnVnU2Vy
dmVyKFBhZ2UmIHBhZ2UpCi0gICAgOiBTY3JpcHREZWJ1Z1NlcnZlcihXZWJDb3JlOjpKU0RPTVdp
bmRvd0Jhc2U6OmNvbW1vblZNKCkpCisgICAgOiBTY3JpcHREZWJ1Z1NlcnZlcihXZWJDb3JlOjpj
b21tb25WTSgpKQogICAgICwgbV9wYWdlKHBhZ2UpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1BlcmZvcm1hbmNlTG9nZ2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9QZXJmb3JtYW5jZUxvZ2dpbmcuY3BwCShyZXZpc2lvbiAyMDk2NzgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlTG9nZ2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQZXJmb3JtYW5j
ZUxvZ2dpbmcuaCIKIAorI2luY2x1ZGUgIkNvbW1vblZNLmgiCiAjaW5jbHVkZSAiRE9NV2luZG93
LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5o
IgpAQCAtNTIsNyArNTMsNyBAQCBIYXNoTWFwPGNvbnN0IGNoYXIqLCBzaXplX3Q+IFBlcmZvcm1h
bmNlCiB7CiAgICAgSGFzaE1hcDxjb25zdCBjaGFyKiwgc2l6ZV90PiBzdGF0czsKIAotICAgIGF1
dG8mIHZtID0gSlNET01XaW5kb3c6OmNvbW1vblZNKCk7CisgICAgYXV0byYgdm0gPSBjb21tb25W
TSgpOwogICAgIHN0YXRzLmFkZCgiamF2YXNjcmlwdF9nY19oZWFwX2NhcGFjaXR5Iiwgdm0uaGVh
cC5jYXBhY2l0eSgpKTsKICAgICBzdGF0cy5hZGQoImphdmFzY3JpcHRfZ2NfaGVhcF9leHRyYV9t
ZW1vcnlfc2l6ZSIsIHZtLmhlYXAuZXh0cmFNZW1vcnlTaXplKCkpOwogCkBAIC03NCw3ICs3NSw3
IEBAIEhhc2hNYXA8Y29uc3QgY2hhciosIHNpemVfdD4gUGVyZm9ybWFuY2UKIAogSGFzaENvdW50
ZWRTZXQ8Y29uc3QgY2hhcio+IFBlcmZvcm1hbmNlTG9nZ2luZzo6amF2YVNjcmlwdE9iamVjdENv
dW50cygpCiB7Ci0gICAgcmV0dXJuIFdURk1vdmUoKkpTRE9NV2luZG93Ojpjb21tb25WTSgpLmhl
YXAub2JqZWN0VHlwZUNvdW50cygpKTsKKyAgICByZXR1cm4gV1RGTW92ZSgqY29tbW9uVk0oKS5o
ZWFwLm9iamVjdFR5cGVDb3VudHMoKSk7CiB9CiAKIFBlcmZvcm1hbmNlTG9nZ2luZzo6UGVyZm9y
bWFuY2VMb2dnaW5nKE1haW5GcmFtZSYgbWFpbkZyYW1lKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9SZXNvdXJjZVVzYWdlVGhyZWFkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1Jlc291cmNlVXNhZ2VUaHJlYWQuY3BwCShyZXZpc2lvbiAyMDk2NzgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VUaHJlYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCiAKKyNpbmNsdWRl
ICJDb21tb25WTS5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCiAjaW5jbHVkZSA8dGhyZWFk
PgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CkBAIC05OCw3ICs5OSw3IEBAIHZvaWQgUmVz
b3VyY2VVc2FnZVRocmVhZDo6Y3JlYXRlVGhyZWFkSWYKICAgICBpZiAobV90aHJlYWRJZGVudGlm
aWVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3ZtID0gJkpTRE9NV2luZG93Ojpjb21tb25W
TSgpOworICAgIG1fdm0gPSAmY29tbW9uVk0oKTsKICAgICBtX3RocmVhZElkZW50aWZpZXIgPSBj
cmVhdGVUaHJlYWQodGhyZWFkQ2FsbGJhY2ssIHRoaXMsICJXZWJDb3JlOiBSZXNvdXJjZVVzYWdl
Iik7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvUmVzb3VyY2VVc2FnZU92
ZXJsYXlDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1Jl
c291cmNlVXNhZ2VPdmVybGF5Q29jb2EubW0JKHJldmlzaW9uIDIwOTY3OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvY29jb2EvUmVzb3VyY2VVc2FnZU92ZXJsYXlDb2NvYS5tbQkod29ya2luZyBj
b3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSA8Q29yZVRleHQvQ29yZVRleHQuaD4K
IAorI2luY2x1ZGUgIkNvbW1vblZNLmgiCiAjaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKICNpbmNs
dWRlICJQbGF0Zm9ybUNBTGF5ZXIuaCIKICNpbmNsdWRlICJSZXNvdXJjZVVzYWdlVGhyZWFkLmgi
CkBAIC0yMDQsNyArMjA1LDcgQEAgc3RhdGljIHZvaWQgYXBwZW5kRGF0YVRvSGlzdG9yeShjb25z
dCBSZQogCiAgICAgLy8gRklYTUU6IEZpbmQgYSB3YXkgdG8gYWRkIHRoaXMgdG8gUmVzb3VyY2VV
c2FnZURhdGEgYW5kIGNhbGN1bGF0ZSBpdCBvbiB0aGUgcmVzb3VyY2UgdXNhZ2Ugc2FtcGxlciB0
aHJlYWQuCiAgICAgewotICAgICAgICBKU0M6OlZNKiB2bSA9ICZKU0RPTVdpbmRvdzo6Y29tbW9u
Vk0oKTsKKyAgICAgICAgSlNDOjpWTSogdm0gPSAmY29tbW9uVk0oKTsKICAgICAgICAgSlNDOjpK
U0xvY2tIb2xkZXIgbG9jayh2bSk7CiAgICAgICAgIGhpc3RvcmljRGF0YS5nY0hlYXBTaXplLmFw
cGVuZCh2bS0+aGVhcC5zaXplKCkgLSB2bS0+aGVhcC5leHRyYU1lbW9yeVNpemUoKSk7CiAgICAg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCShyZXZpc2lv
biAyMDk2NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiU1ZHSW1hZ2UuaCIKIAog
I2luY2x1ZGUgIkNocm9tZS5oIgorI2luY2x1ZGUgIkNvbW1vblZNLmgiCiAjaW5jbHVkZSAiRE9N
V2luZG93LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJFbGVtZW50
SXRlcmF0b3IuaCIKQEAgLTM5Nyw3ICszOTgsNyBAQCB2b2lkIFNWR0ltYWdlOjpyZXBvcnRBcHBy
b3hpbWF0ZU1lbW9yeUNvCiAgICAgZm9yIChOb2RlKiBub2RlID0gZG9jdW1lbnQ7IG5vZGU7IG5v
ZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkKICAgICAgICAgZGVjb2RlZEltYWdlTWVt
b3J5Q29zdCArPSBub2RlLT5hcHByb3hpbWF0ZU1lbW9yeUNvc3QoKTsKIAotICAgIEpTQzo6Vk0m
IHZtID0gSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpOworICAgIEpTQzo6Vk0mIHZtID0gY29t
bW9uVk0oKTsKICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKICAgICAvLyBGSVhNRTog
QWRvcHQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkLCBhbmQgc3dpdGNoIHRvIHJlcG9ydEV4dHJh
TWVtb3J5QWxsb2NhdGVkLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNDI1OTUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTWVtb3J5SW5mby5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTWVtb3J5SW5mby5oCShyZXZp
c2lvbiAyMDk2NzgpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01lbW9yeUluZm8uaAkod29y
a2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUg
IkNvbW1vblZNLmgiCiAjaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKICNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgogCkBAIC00NCw4ICs0NSw4IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBN
ZW1vcnlJbmZvKCkKLSAgICAgICAgOiBtX3VzZWRKU0hlYXBTaXplKEpTRE9NV2luZG93Ojpjb21t
b25WTSgpLmhlYXAuc2l6ZSgpKQotICAgICAgICAsIG1fdG90YWxKU0hlYXBTaXplKEpTRE9NV2lu
ZG93Ojpjb21tb25WTSgpLmhlYXAuY2FwYWNpdHkoKSkKKyAgICAgICAgOiBtX3VzZWRKU0hlYXBT
aXplKGNvbW1vblZNKCkuaGVhcC5zaXplKCkpCisgICAgICAgICwgbV90b3RhbEpTSGVhcFNpemUo
Y29tbW9uVk0oKS5oZWFwLmNhcGFjaXR5KCkpCiAgICAgewogICAgIH0KIApJbmRleDogU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZwkocmV2aXNpb24gMjA5Njc4KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTYtMTItMTAgIEZpbGlwIFBpemxvICA8ZnBpemxv
QGFwcGxlLmNvbT4KKworICAgICAgICBUaGUgRE9NIHNob3VsZCBoYXZlIGFuIGFkdmFuY2luZyB3
YXZlZnJvbnQgb3BhcXVlIHJvb3QgYmFycmllcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NzEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisgICAgICAgIAorICAgICAgICBQcm9wYWdhdGUgdGhlIEpTRE9NV2luZG93QmFz
ZTo6Y29tbW9uVk0oKSAtPiBjb21tb25WTSgpIGNoYW5nZS4KKworICAgICAgICAqIFNoYXJlZC9s
aW51eC9XZWJNZW1vcnlTYW1wbGVyTGludXguY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJNZW1v
cnlTYW1wbGVyOjpzYW1wbGVXZWJLaXQpOgorICAgICAgICAqIFNoYXJlZC9tYWMvV2ViTWVtb3J5
U2FtcGxlci5tYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYk1lbW9yeVNhbXBsZXI6OnNhbXBs
ZVdlYktpdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlOjpqYXZhU2NyaXB0T2Jq
ZWN0c0NvdW50KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9i
amVjdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkpTTlBPYmplY3Q6OmNhbGxNZXRob2QpOgorICAg
ICAgICAoV2ViS2l0OjpKU05QT2JqZWN0OjpjYWxsT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6
SlNOUE9iamVjdDo6Y2FsbENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVj
dDo6cHV0KToKKyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6ZGVsZXRlUHJvcGVydHkpOgor
ICAgICAgICAoV2ViS2l0OjpKU05QT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAg
ICAgKFdlYktpdDo6SlNOUE9iamVjdDo6cHJvcGVydHlHZXR0ZXIpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cnVu
SmF2YVNjcmlwdEluTWFpbkZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0Qnl0
ZWNvZGVQcm9maWxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0U2FtcGxpbmdQcm9m
aWxlck91dHB1dCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6Z2V0V2ViQ29yZVN0YXRpc3RpY3MpOgorCiAyMDE2LTEy
LTEwICBLb25zdGFudGluIFRva2FyZXYgIDxhbm51bGVuQHlhbmRleC5ydT4KIAogICAgICAgICBb
Y21ha2VdIEluY2x1ZGUgV1RGLCBKU0MsIGFuZCBXZWJDb3JlIGhlYWRlcnMgYXV0b21hdGljYWxs
eSB0byB0YXJnZXJzIHVzaW5nIHRoZW0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51
eC9XZWJNZW1vcnlTYW1wbGVyTGludXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9saW51eC9XZWJNZW1vcnlTYW1wbGVyTGludXguY3BwCShyZXZpc2lvbiAyMDk2Nzgp
CisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvV2ViTWVtb3J5U2FtcGxlckxpbnV4LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShNRU1PUllfU0FN
UExFUikKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL01lbW9yeVN0YXRpc3RpY3MuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0NvbW1vblZNLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9DdXJyZW50UHJv
Y2Vzc01lbW9yeVN0YXR1cy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSlNET01XaW5kb3cuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CkBAIC0xMjIsOCArMTIzLDggQEAgV2Vi
TWVtb3J5U3RhdGlzdGljcyBXZWJNZW1vcnlTYW1wbGVyOjpzYQogICAgIGFwcGVuZEtleVZhbHVl
UGFpcih3ZWJLaXRNZW1vcnlTdGF0cywgQVNDSUlMaXRlcmFsKCJGYXN0IE1hbGxvYyBJbiBVc2Ui
KSwgZmFzdE1hbGxvY0J5dGVzSW5Vc2UpOwogICAgIGFwcGVuZEtleVZhbHVlUGFpcih3ZWJLaXRN
ZW1vcnlTdGF0cywgQVNDSUlMaXRlcmFsKCJGYXN0IE1hbGxvYyBDb21taXR0ZWQgTWVtb3J5Iiks
IGZhc3RNYWxsb2NCeXRlc0NvbW1pdHRlZCk7CiAKLSAgICBzaXplX3QganNjSGVhcEJ5dGVzSW5V
c2UgPSBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS5oZWFwLnNpemUoKTsKLSAgICBzaXplX3QganNj
SGVhcEJ5dGVzQ29tbWl0dGVkID0gSlNET01XaW5kb3c6OmNvbW1vblZNKCkuaGVhcC5jYXBhY2l0
eSgpOworICAgIHNpemVfdCBqc2NIZWFwQnl0ZXNJblVzZSA9IGNvbW1vblZNKCkuaGVhcC5zaXpl
KCk7CisgICAgc2l6ZV90IGpzY0hlYXBCeXRlc0NvbW1pdHRlZCA9IGNvbW1vblZNKCkuaGVhcC5j
YXBhY2l0eSgpOwogICAgIHRvdGFsQnl0ZXNJblVzZSArPSBqc2NIZWFwQnl0ZXNJblVzZTsKICAg
ICB0b3RhbEJ5dGVzQ29tbWl0dGVkICs9IGpzY0hlYXBCeXRlc0NvbW1pdHRlZDsKIApJbmRleDog
U291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJNZW1vcnlTYW1wbGVyLm1hYy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYk1lbW9yeVNhbXBsZXIubWFjLm1t
CShyZXZpc2lvbiAyMDk2NzgpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYk1lbW9y
eVNhbXBsZXIubWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMyArMjksMTQgQEAKICNpZiBF
TkFCTEUoTUVNT1JZX1NBTVBMRVIpICAKIAogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvTWVtb3J5
U3RhdGlzdGljcy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvVk0uaD4KICNpbXBvcnQgPG1h
Y2gvbWFjaC5oPgogI2ltcG9ydCA8bWFjaC90YXNrLmg+CiAjaW1wb3J0IDxtYWNoL21hY2hfdHlw
ZXMuaD4KICNpbXBvcnQgPG1hbGxvYy9tYWxsb2MuaD4KICNpbXBvcnQgPG5vdGlmeS5oPgogI2lt
cG9ydCA8cnVudGltZS9KU0xvY2suaD4KLSNpbXBvcnQgPFdlYkNvcmUvSlNET01XaW5kb3cuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvQ29tbW9uVk0uaD4KICNpbXBvcnQgPHd0Zi9DdXJyZW50VGltZS5o
PgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTExNiw5ICsxMTcsOSBAQCBXZWJNZW1v
cnlTdGF0aXN0aWNzIFdlYk1lbW9yeVNhbXBsZXI6OnNhCiAgICAgdG90YWxCeXRlc0luVXNlICs9
IGZhc3RNYWxsb2NCeXRlc0luVXNlOwogICAgIHRvdGFsQnl0ZXNDb21taXR0ZWQgKz0gZmFzdE1h
bGxvY0J5dGVzQ29tbWl0dGVkOwogICAgIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2lu
ZG93Ojpjb21tb25WTSgpKTsKLSAgICBzaXplX3QganNjSGVhcEJ5dGVzSW5Vc2UgPSBKU0RPTVdp
bmRvdzo6Y29tbW9uVk0oKS5oZWFwLnNpemUoKTsKLSAgICBzaXplX3QganNjSGVhcEJ5dGVzQ29t
bWl0dGVkID0gSlNET01XaW5kb3c6OmNvbW1vblZNKCkuaGVhcC5jYXBhY2l0eSgpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKGNvbW1vblZNKCkpOworICAgIHNpemVfdCBqc2NIZWFwQnl0ZXNJblVz
ZSA9IGNvbW1vblZNKCkuaGVhcC5zaXplKCk7CisgICAgc2l6ZV90IGpzY0hlYXBCeXRlc0NvbW1p
dHRlZCA9IGNvbW1vblZNKCkuaGVhcC5jYXBhY2l0eSgpOwogICAgIHRvdGFsQnl0ZXNJblVzZSAr
PSBqc2NIZWFwQnl0ZXNJblVzZTsKICAgICB0b3RhbEJ5dGVzQ29tbWl0dGVkICs9IGpzY0hlYXBC
eXRlc0NvbW1pdHRlZDsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UHJvY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
cm9jZXNzLmNwcAkocmV2aXNpb24gMjA5Njc4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNiArNzAsNyBAQAogI2luY2x1
ZGUgPFdlYkNvcmUvQVhPYmplY3RDYWNoZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQXBwbGljYXRp
b25DYWNoZVN0b3JhZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0F1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Db21tb25WTS5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
Q3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRE5T
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EYXRhYmFzZU1hbmFnZXIuaD4KQEAgLTk3MiwyMSArOTcz
LDIxIEBAIHZvaWQgV2ViUHJvY2Vzczo6Z2V0V2ViQ29yZVN0YXRpc3RpY3ModWkKICAgICAKICAg
ICAvLyBHYXRoZXIgSmF2YVNjcmlwdCBzdGF0aXN0aWNzLgogICAgIHsKLSAgICAgICAgSlNMb2Nr
SG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOwotICAgICAgICBkYXRhLnN0YXRp
c3RpY3NOdW1iZXJzLnNldChBU0NJSUxpdGVyYWwoIkphdmFTY3JpcHRPYmplY3RzQ291bnQiKSwg
SlNET01XaW5kb3c6OmNvbW1vblZNKCkuaGVhcC5vYmplY3RDb3VudCgpKTsKLSAgICAgICAgZGF0
YS5zdGF0aXN0aWNzTnVtYmVycy5zZXQoQVNDSUlMaXRlcmFsKCJKYXZhU2NyaXB0R2xvYmFsT2Jq
ZWN0c0NvdW50IiksIEpTRE9NV2luZG93Ojpjb21tb25WTSgpLmhlYXAuZ2xvYmFsT2JqZWN0Q291
bnQoKSk7Ci0gICAgICAgIGRhdGEuc3RhdGlzdGljc051bWJlcnMuc2V0KEFTQ0lJTGl0ZXJhbCgi
SmF2YVNjcmlwdFByb3RlY3RlZE9iamVjdHNDb3VudCIpLCBKU0RPTVdpbmRvdzo6Y29tbW9uVk0o
KS5oZWFwLnByb3RlY3RlZE9iamVjdENvdW50KCkpOwotICAgICAgICBkYXRhLnN0YXRpc3RpY3NO
dW1iZXJzLnNldChBU0NJSUxpdGVyYWwoIkphdmFTY3JpcHRQcm90ZWN0ZWRHbG9iYWxPYmplY3Rz
Q291bnQiKSwgSlNET01XaW5kb3c6OmNvbW1vblZNKCkuaGVhcC5wcm90ZWN0ZWRHbG9iYWxPYmpl
Y3RDb3VudCgpKTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7CisgICAg
ICAgIGRhdGEuc3RhdGlzdGljc051bWJlcnMuc2V0KEFTQ0lJTGl0ZXJhbCgiSmF2YVNjcmlwdE9i
amVjdHNDb3VudCIpLCBjb21tb25WTSgpLmhlYXAub2JqZWN0Q291bnQoKSk7CisgICAgICAgIGRh
dGEuc3RhdGlzdGljc051bWJlcnMuc2V0KEFTQ0lJTGl0ZXJhbCgiSmF2YVNjcmlwdEdsb2JhbE9i
amVjdHNDb3VudCIpLCBjb21tb25WTSgpLmhlYXAuZ2xvYmFsT2JqZWN0Q291bnQoKSk7CisgICAg
ICAgIGRhdGEuc3RhdGlzdGljc051bWJlcnMuc2V0KEFTQ0lJTGl0ZXJhbCgiSmF2YVNjcmlwdFBy
b3RlY3RlZE9iamVjdHNDb3VudCIpLCBjb21tb25WTSgpLmhlYXAucHJvdGVjdGVkT2JqZWN0Q291
bnQoKSk7CisgICAgICAgIGRhdGEuc3RhdGlzdGljc051bWJlcnMuc2V0KEFTQ0lJTGl0ZXJhbCgi
SmF2YVNjcmlwdFByb3RlY3RlZEdsb2JhbE9iamVjdHNDb3VudCIpLCBjb21tb25WTSgpLmhlYXAu
cHJvdGVjdGVkR2xvYmFsT2JqZWN0Q291bnQoKSk7CiAgICAgICAgIAotICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8VHlwZUNvdW50U2V0PiBwcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKEpTRE9NV2lu
ZG93Ojpjb21tb25WTSgpLmhlYXAucHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cygpKTsKKyAgICAg
ICAgc3RkOjp1bmlxdWVfcHRyPFR5cGVDb3VudFNldD4gcHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50
cyhjb21tb25WTSgpLmhlYXAucHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cygpKTsKICAgICAgICAg
ZnJvbUNvdW50ZWRTZXRUb0hhc2hNYXAocHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cy5nZXQoKSwg
ZGF0YS5qYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cyk7CiAgICAgICAgIAotICAg
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZUNvdW50U2V0PiBvYmplY3RUeXBlQ291bnRzKEpTRE9N
V2luZG93Ojpjb21tb25WTSgpLmhlYXAub2JqZWN0VHlwZUNvdW50cygpKTsKKyAgICAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFR5cGVDb3VudFNldD4gb2JqZWN0VHlwZUNvdW50cyhjb21tb25WTSgpLmhl
YXAub2JqZWN0VHlwZUNvdW50cygpKTsKICAgICAgICAgZnJvbUNvdW50ZWRTZXRUb0hhc2hNYXAo
b2JqZWN0VHlwZUNvdW50cy5nZXQoKSwgZGF0YS5qYXZhU2NyaXB0T2JqZWN0VHlwZUNvdW50cyk7
CiAgICAgICAgIAotICAgICAgICB1aW50NjRfdCBqYXZhU2NyaXB0SGVhcFNpemUgPSBKU0RPTVdp
bmRvdzo6Y29tbW9uVk0oKS5oZWFwLnNpemUoKTsKKyAgICAgICAgdWludDY0X3QgamF2YVNjcmlw
dEhlYXBTaXplID0gY29tbW9uVk0oKS5oZWFwLnNpemUoKTsKICAgICAgICAgZGF0YS5zdGF0aXN0
aWNzTnVtYmVycy5zZXQoQVNDSUlMaXRlcmFsKCJKYXZhU2NyaXB0SGVhcFNpemUiKSwgamF2YVNj
cmlwdEhlYXBTaXplKTsKLSAgICAgICAgZGF0YS5zdGF0aXN0aWNzTnVtYmVycy5zZXQoQVNDSUlM
aXRlcmFsKCJKYXZhU2NyaXB0RnJlZVNpemUiKSwgSlNET01XaW5kb3c6OmNvbW1vblZNKCkuaGVh
cC5jYXBhY2l0eSgpIC0gamF2YVNjcmlwdEhlYXBTaXplKTsKKyAgICAgICAgZGF0YS5zdGF0aXN0
aWNzTnVtYmVycy5zZXQoQVNDSUlMaXRlcmFsKCJKYXZhU2NyaXB0RnJlZVNpemUiKSwgY29tbW9u
Vk0oKS5oZWFwLmNhcGFjaXR5KCkgLSBqYXZhU2NyaXB0SGVhcFNpemUpOwogICAgIH0KIAogICAg
IFdURjo6RmFzdE1hbGxvY1N0YXRpc3RpY3MgZmFzdE1hbGxvY1N0YXRpc3RpY3MgPSBXVEY6OmZh
c3RNYWxsb2NTdGF0aXN0aWNzKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAkocmV2aXNp
b24gMjA5Njc4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9J
bmplY3RlZEJ1bmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDcgQEAKICNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9KU0xvY2suaD4KICNpbmNsdWRlIDxXZWJDb3JlL0FwcGxpY2F0
aW9uQ2FjaGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9Db21tb25WTS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVM
b2FkZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvR0NDb250cm9sbGVyLmg+CkBAIC00OTMsOCArNDk0LDggQEAgdm9pZCBJbmplY3RlZEJ1bmRs
ZTo6Z2FyYmFnZUNvbGxlY3RKYXZhUwogCiBzaXplX3QgSW5qZWN0ZWRCdW5kbGU6OmphdmFTY3Jp
cHRPYmplY3RzQ291bnQoKQogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpj
b21tb25WTSgpKTsKLSAgICByZXR1cm4gSlNET01XaW5kb3c6OmNvbW1vblZNKCkuaGVhcC5vYmpl
Y3RDb3VudCgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGNvbW1vblZNKCkpOworICAgIHJldHVy
biBjb21tb25WTSgpLmhlYXAub2JqZWN0Q291bnQoKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRs
ZTo6cmVwb3J0RXhjZXB0aW9uKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIGV4Y2Vw
dGlvbikKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9K
U05QT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Bs
dWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHAJKHJldmlzaW9uIDIwOTY3OCkKKysrIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
R2xvYmFsT2JqZWN0Lmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNMb2NrLmg+CiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvT2JqZWN0UHJvdG90eXBlLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9Db21tb25WTS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSWRlbnRpZmllclJlcC5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvSlNET01XaW5kb3dCYXNlLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KQEAgLTEzNiw3ICsxMzcsNyBAQCBKU1ZhbHVlIEpTTlBPYmplY3Q6OmNhbGxNZXRob2QoRXhl
Y1N0YXRlCiAgICAgVk9JRF9UT19OUFZBUklBTlQocmVzdWx0KTsKICAgICAKICAgICB7Ci0gICAg
ICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNv
bW1vblZNKCkpOworICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoY29t
bW9uVk0oKSk7CiAgICAgICAgIHJldHVyblZhbHVlID0gbV9ucE9iamVjdC0+X2NsYXNzLT5pbnZv
a2UobV9ucE9iamVjdCwgbWV0aG9kTmFtZSwgYXJndW1lbnRzLmRhdGEoKSwgYXJndW1lbnRDb3Vu
dCwgJnJlc3VsdCk7CiAgICAgICAgIE5QUnVudGltZU9iamVjdE1hcDo6bW92ZUdsb2JhbEV4Y2Vw
dGlvblRvRXhlY1N0YXRlKGV4ZWMpOwogICAgIH0KQEAgLTE3OSw3ICsxODAsNyBAQCBKU0M6OkpT
VmFsdWUgSlNOUE9iamVjdDo6Y2FsbE9iamVjdChKU0M6CiAgICAgVk9JRF9UT19OUFZBUklBTlQo
cmVzdWx0KTsKIAogICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBt
X25wT2JqZWN0LT5fY2xhc3MtPmludm9rZURlZmF1bHQobV9ucE9iamVjdCwgYXJndW1lbnRzLmRh
dGEoKSwgYXJndW1lbnRDb3VudCwgJnJlc3VsdCk7CiAgICAgICAgIE5QUnVudGltZU9iamVjdE1h
cDo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGV4ZWMpOwogICAgIH0KQEAgLTIyMiw3
ICsyMjMsNyBAQCBKU1ZhbHVlIEpTTlBPYmplY3Q6OmNhbGxDb25zdHJ1Y3RvcihFeGVjCiAgICAg
Vk9JRF9UT19OUFZBUklBTlQocmVzdWx0KTsKICAgICAKICAgICB7Ci0gICAgICAgIEpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwor
ICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoY29tbW9uVk0oKSk7CiAg
ICAgICAgIHJldHVyblZhbHVlID0gbV9ucE9iamVjdC0+X2NsYXNzLT5jb25zdHJ1Y3QobV9ucE9i
amVjdCwgYXJndW1lbnRzLmRhdGEoKSwgYXJndW1lbnRDb3VudCwgJnJlc3VsdCk7CiAgICAgICAg
IE5QUnVudGltZU9iamVjdE1hcDo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGV4ZWMp
OwogICAgIH0KQEAgLTM0NSw3ICszNDYsNyBAQCBib29sIEpTTlBPYmplY3Q6OnB1dChKU0NlbGwq
IGNlbGwsIEV4ZWNTCiAKICAgICBib29sIHJlc3VsdCA9IGZhbHNlOwogICAgIHsKLSAgICAgICAg
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9u
Vk0oKSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25W
TSgpKTsKICAgICAgICAgcmVzdWx0ID0gdGhpc09iamVjdC0+bV9ucE9iamVjdC0+X2NsYXNzLT5z
ZXRQcm9wZXJ0eSh0aGlzT2JqZWN0LT5tX25wT2JqZWN0LCBucElkZW50aWZpZXIsICZ2YXJpYW50
KTsKIAogICAgICAgICBOUFJ1bnRpbWVPYmplY3RNYXA6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4
ZWNTdGF0ZShleGVjKTsKQEAgLTM5NCw3ICszOTUsNyBAQCBib29sIEpTTlBPYmplY3Q6OmRlbGV0
ZVByb3BlcnR5KEV4ZWNTdGF0CiAgICAgTlBSdW50aW1lT2JqZWN0TWFwOjpQbHVnaW5Qcm90ZWN0
b3IgcHJvdGVjdG9yKG1fb2JqZWN0TWFwKTsKIAogICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAg
ICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKIAogICAg
ICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIHRocm93IGFuIGV4Y2VwdGlvbiBpZiByZW1vdmVQcm9w
ZXJ0eSByZXR1cm5zIGZhbHNlPwogICAgICAgICBpZiAoIW1fbnBPYmplY3QtPl9jbGFzcy0+cmVt
b3ZlUHJvcGVydHkobV9ucE9iamVjdCwgcHJvcGVydHlOYW1lKSkKQEAgLTQzMCw3ICs0MzEsNyBA
QCB2b2lkIEpTTlBPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPCiAgICAgTlBSdW50aW1l
T2JqZWN0TWFwOjpQbHVnaW5Qcm90ZWN0b3IgcHJvdGVjdG9yKHRoaXNPYmplY3QtPm1fb2JqZWN0
TWFwKTsKICAgICAKICAgICB7Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgICAgICBKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoY29tbW9uVk0oKSk7CiAKICAgICAgICAgLy8gRklYTUU6IFNo
b3VsZCB3ZSB0aHJvdyBhbiBleGNlcHRpb24gaWYgZW51bWVyYXRlIHJldHVybnMgZmFsc2U/CiAg
ICAgICAgIGlmICghdGhpc09iamVjdC0+bV9ucE9iamVjdC0+X2NsYXNzLT5lbnVtZXJhdGUodGhp
c09iamVjdC0+bV9ucE9iamVjdCwgJmlkZW50aWZpZXJzLCAmaWRlbnRpZmllckNvdW50KSkKQEAg
LTQ4MSw3ICs0ODIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU05QT2JqZWN0Ojpwcm9wZXJ0eUdldHRl
CiAgICAgCiAgICAgYm9vbCByZXR1cm5WYWx1ZTsKICAgICB7Ci0gICAgICAgIEpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAg
ICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoY29tbW9uVk0oKSk7CiAgICAg
ICAgIE5QSWRlbnRpZmllciBucElkZW50aWZpZXIgPSBucElkZW50aWZpZXJGcm9tSWRlbnRpZmll
cihwcm9wZXJ0eU5hbWUpOwogICAgICAgICAvLyBJZiB0aGUgcHJvcGVydHlOYW1lIGlzIHN5bWJv
bC4KICAgICAgICAgaWYgKCFucElkZW50aWZpZXIpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiAyMDk2NzgpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTExNiw2ICsxMTYsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvQXBwbGljYXRpb25DYWNoZVN0
b3JhZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0FyY2hpdmVSZXNvdXJjZS5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvQ2hyb21lLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Db21tb25WTS5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvQ29udGV4dE1lbnVDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9E
YXRhVHJhbnNmZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RhdGFiYXNlTWFuYWdlci5oPgpAQCAt
MjcxMSw3ICsyNzEyLDcgQEAgdm9pZCBXZWJQYWdlOjpydW5KYXZhU2NyaXB0SW5NYWluRnJhbWUo
YwogICAgIC8vIGRpc2FwcGVhciBkdXJpbmcgc2NyaXB0IGV4ZWN1dGlvbi4KIAogICAgIFJlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRSZXN1bHRWYWx1ZTsKLSAgICBKU0xv
Y2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2soY29tbW9uVk0oKSk7CiAgICAgYm9vbCBoYWRFeGNlcHRpb24gPSB0cnVlOwogICAgIEV4
Y2VwdGlvbkRldGFpbHMgZGV0YWlsczsKICAgICBpZiAoSlNWYWx1ZSByZXN1bHRWYWx1ZSA9IG1f
bWFpbkZyYW1lLT5jb3JlRnJhbWUoKS0+c2NyaXB0KCkuZXhlY3V0ZVNjcmlwdChzY3JpcHQsIHRy
dWUsICZkZXRhaWxzKSkgewpAQCAtNTQ2MiwxMiArNTQ2MywxMiBAQCB2b2lkIFdlYlBhZ2U6OnVw
ZGF0ZUNhY2hlZERvY3VtZW50TG9hZGVyCiAKIHZvaWQgV2ViUGFnZTo6Z2V0Qnl0ZWNvZGVQcm9m
aWxlKHVpbnQ2NF90IGNhbGxiYWNrSUQpCiB7Ci0gICAgaWYgKCFKU0RPTVdpbmRvdzo6Y29tbW9u
Vk0oKS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpIHsKKyAgICBpZiAoIWNvbW1vblZNKCkubV9wZXJC
eXRlY29kZVByb2ZpbGVyKSB7CiAgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
U3RyaW5nQ2FsbGJhY2soU3RyaW5nKCksIGNhbGxiYWNrSUQpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIFN0cmluZyByZXN1bHQgPSBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS5tX3Bl
ckJ5dGVjb2RlUHJvZmlsZXItPnRvSlNPTigpOworICAgIFN0cmluZyByZXN1bHQgPSBjb21tb25W
TSgpLm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+dG9KU09OKCk7CiAgICAgQVNTRVJUKHJlc3VsdC5s
ZW5ndGgoKSk7CiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTdHJpbmdDYWxsYmFj
ayhyZXN1bHQsIGNhbGxiYWNrSUQpKTsKIH0KQEAgLTU0NzUsNyArNTQ3Niw3IEBAIHZvaWQgV2Vi
UGFnZTo6Z2V0Qnl0ZWNvZGVQcm9maWxlKHVpbnQ2NF8KIHZvaWQgV2ViUGFnZTo6Z2V0U2FtcGxp
bmdQcm9maWxlck91dHB1dCh1aW50NjRfdCBjYWxsYmFja0lEKQogewogI2lmIEVOQUJMRShTQU1Q
TElOR19QUk9GSUxFUikKLSAgICBTYW1wbGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVyID0g
SlNET01XaW5kb3c6OmNvbW1vblZNKCkuc2FtcGxpbmdQcm9maWxlcigpOworICAgIFNhbXBsaW5n
UHJvZmlsZXIqIHNhbXBsaW5nUHJvZmlsZXIgPSBjb21tb25WTSgpLnNhbXBsaW5nUHJvZmlsZXIo
KTsKICAgICBpZiAoIXNhbXBsaW5nUHJvZmlsZXIpIHsKICAgICAgICAgc2VuZChNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpJbnZhbGlkYXRlU3RyaW5nQ2FsbGJhY2soY2FsbGJhY2tJRCkpOwogICAg
ICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDk2NzgpCisrKyBT
b3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0NyBA
QAorMjAxNi0xMi0xMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFRoZSBET00gc2hvdWxkIGhhdmUgYW4gYWR2YW5jaW5nIHdhdmVmcm9udCBvcGFxdWUgcm9vdCBi
YXJyaWVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjU3MTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisg
ICAgICAgIFByb3BhZ2F0ZSB0aGUgSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpIC0+IGNvbW1v
blZNKCkgY2hhbmdlLgorCisgICAgICAgICogTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbToKKyAg
ICAgICAgKCtbV2ViQ29yZVN0YXRpc3RpY3MgamF2YVNjcmlwdE9iamVjdHNDb3VudF0pOgorICAg
ICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0R2xvYmFsT2JqZWN0c0NvdW50XSk6
CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNzIGphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3Rz
Q291bnRdKToKKyAgICAgICAgKCtbV2ViQ29yZVN0YXRpc3RpY3MgamF2YVNjcmlwdFByb3RlY3Rl
ZEdsb2JhbE9iamVjdHNDb3VudF0pOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZh
U2NyaXB0UHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50c10pOgorICAgICAgICAoK1tXZWJDb3JlU3Rh
dGlzdGljcyBqYXZhU2NyaXB0T2JqZWN0VHlwZUNvdW50c10pOgorICAgICAgICAoK1tXZWJDb3Jl
U3RhdGlzdGljcyBzaG91bGRQcmludEV4Y2VwdGlvbnNdKToKKyAgICAgICAgKCtbV2ViQ29yZVN0
YXRpc3RpY3Mgc2V0U2hvdWxkUHJpbnRFeGNlcHRpb25zOl0pOgorICAgICAgICAoK1tXZWJDb3Jl
U3RhdGlzdGljcyBtZW1vcnlTdGF0aXN0aWNzXSk6CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0
aWNzIGphdmFTY3JpcHRSZWZlcmVuY2VkT2JqZWN0c0NvdW50XSk6CisgICAgICAgICogUGx1Z2lu
cy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkubW06CisgICAgICAgIChpZGVudGlmaWVy
RnJvbUlkZW50aWZpZXJSZXApOgorICAgICAgICAqIFBsdWdpbnMvSG9zdGVkL1Byb3h5SW5zdGFu
Y2UubW06CisgICAgICAgIChXZWJLaXQ6OlByb3h5SW5zdGFuY2U6OmdldFByb3BlcnR5TmFtZXMp
OgorICAgICAgICAqIFBsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW06CisgICAgICAg
IChXZWJOZXRzY2FwZVBsdWdpblN0cmVhbTo6d2FudHNBbGxTdHJlYW1zKToKKyAgICAgICAgKiBQ
bHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQ
bHVnaW5WaWV3IHNlbmRFdmVudDppc0RyYXdSZWN0Ol0pOgorICAgICAgICAoLVtXZWJOZXRzY2Fw
ZVBsdWdpblZpZXcgcHJpdmF0ZUJyb3dzaW5nTW9kZURpZENoYW5nZV0pOgorICAgICAgICAoLVtX
ZWJOZXRzY2FwZVBsdWdpblZpZXcgc2V0V2luZG93SWZOZWNlc3NhcnldKToKKyAgICAgICAgKC1b
V2ViTmV0c2NhcGVQbHVnaW5WaWV3IGNyZWF0ZVBsdWdpblNjcmlwdGFibGVPYmplY3RdKToKKyAg
ICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3IGdldEZvcm1WYWx1ZTpdKToKKyAgICAgICAg
KC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3IGV2YWx1YXRlSmF2YVNjcmlwdFBsdWdpblJlcXVlc3Q6
XSk6CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyB3ZWJGcmFtZTpkaWRGaW5pc2hM
b2FkV2l0aFJlYXNvbjpdKToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3IGxvYWRQ
bHVnaW5SZXF1ZXN0Ol0pOgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZpZXcgX3ByaW50
ZWRQbHVnaW5CaXRtYXBdKToKKyAgICAgICAgKiBQbHVnaW5zL1dlYlBsdWdpbkNvbnRyb2xsZXIu
bW06CisgICAgICAgICgtW1dlYlBsdWdpbkNvbnRyb2xsZXIgcGx1Z0luVmlld1dpdGhBcmd1bWVu
dHM6ZnJvbVBsdWdpblBhY2thZ2U6XSk6CisgICAgICAgICgtW1dlYlBsdWdpbkNvbnRyb2xsZXIg
c3RvcE9uZVBsdWdpbjpdKToKKyAgICAgICAgKC1bV2ViUGx1Z2luQ29udHJvbGxlciBzdG9wT25l
UGx1Z2luRm9yUGFnZUNhY2hlOl0pOgorICAgICAgICAoLVtXZWJQbHVnaW5Db250cm9sbGVyIGRl
c3Ryb3lPbmVQbHVnaW46XSk6CisgICAgICAgICgtW1dlYlBsdWdpbkNvbnRyb2xsZXIgc3RhcnRB
bGxQbHVnaW5zXSk6CisgICAgICAgICgtW1dlYlBsdWdpbkNvbnRyb2xsZXIgYWRkUGx1Z2luOl0p
OgorCiAyMDE2LTEyLTA5ICBEYXZlIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAg
IFtDU1MgUGFyc2VyXSBSZW1vdmUgdGhlIG9sZCBDU1MgUGFyc2VyCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0JKHJldmlzaW9uIDIwOTY3OCkKKysr
IFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbXBvcnQgIldlYkZyYW1lSW50ZXJuYWwuaCIKICNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0pTTG9jay5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvTWVt
b3J5U3RhdGlzdGljcy5oPgorI2ltcG9ydCA8V2ViQ29yZS9Db21tb25WTS5oPgogI2ltcG9ydCA8
V2ViQ29yZS9Gb250Q2FjaGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KICNpbXBvcnQg
PFdlYkNvcmUvR0NDb250cm9sbGVyLmg+CkBAIC01OCwzNSArNTksMzUgQEAgKyAoTlNBcnJheSAq
KXN0YXRpc3RpY3MKIAogKyAoc2l6ZV90KWphdmFTY3JpcHRPYmplY3RzQ291bnQKIHsKLSAgICBK
U0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7Ci0gICAgcmV0dXJuIEpT
RE9NV2luZG93Ojpjb21tb25WTSgpLmhlYXAub2JqZWN0Q291bnQoKTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhjb21tb25WTSgpKTsKKyAgICByZXR1cm4gY29tbW9uVk0oKS5oZWFwLm9iamVjdENv
dW50KCk7CiB9CiAKICsgKHNpemVfdClqYXZhU2NyaXB0R2xvYmFsT2JqZWN0c0NvdW50CiB7Ci0g
ICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOwotICAgIHJldHVy
biBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS5oZWFwLmdsb2JhbE9iamVjdENvdW50KCk7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7CisgICAgcmV0dXJuIGNvbW1vblZNKCkuaGVh
cC5nbG9iYWxPYmplY3RDb3VudCgpOwogfQogCiArIChzaXplX3QpamF2YVNjcmlwdFByb3RlY3Rl
ZE9iamVjdHNDb3VudAogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21t
b25WTSgpKTsKLSAgICByZXR1cm4gSlNET01XaW5kb3c6OmNvbW1vblZNKCkuaGVhcC5wcm90ZWN0
ZWRPYmplY3RDb3VudCgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGNvbW1vblZNKCkpOworICAg
IHJldHVybiBjb21tb25WTSgpLmhlYXAucHJvdGVjdGVkT2JqZWN0Q291bnQoKTsKIH0KIAogKyAo
c2l6ZV90KWphdmFTY3JpcHRQcm90ZWN0ZWRHbG9iYWxPYmplY3RzQ291bnQKIHsKLSAgICBKU0xv
Y2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7Ci0gICAgcmV0dXJuIEpTRE9N
V2luZG93Ojpjb21tb25WTSgpLmhlYXAucHJvdGVjdGVkR2xvYmFsT2JqZWN0Q291bnQoKTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhjb21tb25WTSgpKTsKKyAgICByZXR1cm4gY29tbW9uVk0oKS5o
ZWFwLnByb3RlY3RlZEdsb2JhbE9iamVjdENvdW50KCk7CiB9CiAKICsgKE5TQ291bnRlZFNldCAq
KWphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzCiB7Ci0gICAgSlNMb2NrSG9sZGVy
IGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGNv
bW1vblZNKCkpOwogICAgIAogICAgIE5TQ291bnRlZFNldCAqcmVzdWx0ID0gW05TQ291bnRlZFNl
dCBzZXRdOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPFR5cGVDb3VudFNldD4gY291bnRzKEpTRE9N
V2luZG93Ojpjb21tb25WTSgpLmhlYXAucHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cygpKTsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZUNvdW50U2V0PiBjb3VudHMoY29tbW9uVk0oKS5oZWFwLnBy
b3RlY3RlZE9iamVjdFR5cGVDb3VudHMoKSk7CiAgICAgSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hh
cio+OjppdGVyYXRvciBlbmQgPSBjb3VudHMtPmVuZCgpOwogICAgIGZvciAoSGFzaENvdW50ZWRT
ZXQ8Y29uc3QgY2hhcio+OjppdGVyYXRvciBpdCA9IGNvdW50cy0+YmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXQtPnZhbHVlOyArK2kp
CkBAIC05NywxMSArOTgsMTEgQEAgKyAoTlNDb3VudGVkU2V0ICopamF2YVNjcmlwdFByb3RlY3Rl
ZE9iagogCiArIChOU0NvdW50ZWRTZXQgKilqYXZhU2NyaXB0T2JqZWN0VHlwZUNvdW50cwogewot
ICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayhjb21tb25WTSgpKTsKICAgICAKICAgICBOU0NvdW50ZWRTZXQgKnJlc3Vs
dCA9IFtOU0NvdW50ZWRTZXQgc2V0XTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlQ291bnRT
ZXQ+IGNvdW50cyhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS5oZWFwLm9iamVjdFR5cGVDb3VudHMo
KSk7CisgICAgc3RkOjp1bmlxdWVfcHRyPFR5cGVDb3VudFNldD4gY291bnRzKGNvbW1vblZNKCku
aGVhcC5vYmplY3RUeXBlQ291bnRzKCkpOwogICAgIEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIq
Pjo6aXRlcmF0b3IgZW5kID0gY291bnRzLT5lbmQoKTsKICAgICBmb3IgKEhhc2hDb3VudGVkU2V0
PGNvbnN0IGNoYXIqPjo6aXRlcmF0b3IgaXQgPSBjb3VudHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0LT52YWx1ZTsgKytpKQpA
QCAtMTY3LDEzICsxNjgsMTMgQEAgKyAoc2l6ZV90KWdseXBoUGFnZUNvdW50CiAKICsgKEJPT0wp
c2hvdWxkUHJpbnRFeGNlcHRpb25zCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5k
b3c6OmNvbW1vblZNKCkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGNvbW1vblZNKCkpOwogICAg
IHJldHVybiBQYWdlQ29uc29sZUNsaWVudDo6c2hvdWxkUHJpbnRFeGNlcHRpb25zKCk7CiB9CiAK
ICsgKHZvaWQpc2V0U2hvdWxkUHJpbnRFeGNlcHRpb25zOihCT09MKXByaW50CiB7Ci0gICAgSlNM
b2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrKGNvbW1vblZNKCkpOwogICAgIFBhZ2VDb25zb2xlQ2xpZW50OjpzZXRTaG91bGRQcmlu
dEV4Y2VwdGlvbnMocHJpbnQpOwogfQogCkBAIC0yMDEsOSArMjAyLDkgQEAgKyAoTlNEaWN0aW9u
YXJ5ICopbWVtb3J5U3RhdGlzdGljcwogewogICAgIFdURjo6RmFzdE1hbGxvY1N0YXRpc3RpY3Mg
ZmFzdE1hbGxvY1N0YXRpc3RpY3MgPSBXVEY6OmZhc3RNYWxsb2NTdGF0aXN0aWNzKCk7CiAgICAg
Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOwotICAgIHNp
emVfdCBoZWFwU2l6ZSA9IEpTRE9NV2luZG93Ojpjb21tb25WTSgpLmhlYXAuc2l6ZSgpOwotICAg
IHNpemVfdCBoZWFwRnJlZSA9IEpTRE9NV2luZG93Ojpjb21tb25WTSgpLmhlYXAuY2FwYWNpdHko
KSAtIGhlYXBTaXplOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGNvbW1vblZNKCkpOworICAgIHNp
emVfdCBoZWFwU2l6ZSA9IGNvbW1vblZNKCkuaGVhcC5zaXplKCk7CisgICAgc2l6ZV90IGhlYXBG
cmVlID0gY29tbW9uVk0oKS5oZWFwLmNhcGFjaXR5KCkgLSBoZWFwU2l6ZTsKICAgICBHbG9iYWxN
ZW1vcnlTdGF0aXN0aWNzIGdsb2JhbE1lbW9yeVN0YXRzID0gZ2xvYmFsTWVtb3J5U3RhdGlzdGlj
cygpOwogICAgIAogICAgIHJldHVybiBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0
c0FuZEtleXM6CkBAIC0yNDYsOCArMjQ3LDggQEAgKyAoc2l6ZV90KWphdmFTY3JpcHROb0dDQWxs
b3dlZE9iamVjdHNDbwogCiArIChzaXplX3QpamF2YVNjcmlwdFJlZmVyZW5jZWRPYmplY3RzQ291
bnQKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7Ci0g
ICAgcmV0dXJuIEpTRE9NV2luZG93Ojpjb21tb25WTSgpLmhlYXAucHJvdGVjdGVkT2JqZWN0Q291
bnQoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhjb21tb25WTSgpKTsKKyAgICByZXR1cm4gY29t
bW9uVk0oKS5oZWFwLnByb3RlY3RlZE9iamVjdENvdW50KCk7CiB9CiAKICsgKE5TU2V0ICopamF2
YVNjcmlwdFJvb3RPYmplY3RDbGFzc2VzCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5z
L1dlYk5ldHNjYXBlUGx1Z2luU3RyZWFtLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
bWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW0JKHJldmlzaW9uIDIwOTY3OCkK
KysrIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW0J
KHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKICNpbXBvcnQgIldlYlJlc291cmNlTG9h
ZFNjaGVkdWxlci5oIgogI2ltcG9ydCA8Rm91bmRhdGlvbi9OU1VSTFJlc3BvbnNlLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0NGTmV0d29ya1NQSS5oPgorI2ltcG9ydCA8V2ViQ29yZS9Db21tb25WTS5o
PgogI2ltcG9ydCA8V2ViQ29yZS9Eb2N1bWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9Eb2N1bWVu
dExvYWRlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgpAQCAtMzc3LDcgKzM3OCw3IEBA
IGJvb2wgV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW06OndhbnRzQWxsU3QKICAgICBOUEVycm9yIGVy
cm9yOwogICAgIHsKICAgICAgICAgUGx1Z2luU3RvcERlZmVycmVyIGRlZmVycmVyKG1fcGx1Z2lu
Vmlldy5nZXQoKSk7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwogICAgICAgICBlcnJvciA9IG1f
cGx1Z2luRnVuY3MtPmdldHZhbHVlKG1fcGx1Z2luLCBOUFBWcGx1Z2luV2FudHNBbGxOZXR3b3Jr
U3RyZWFtcywgJnZhbHVlKTsKICAgICB9CiAgICAgaWYgKGVycm9yICE9IE5QRVJSX05PX0VSUk9S
KQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBs
dWdpblZpZXcubW0JKHJldmlzaW9uIDIwOTY3OCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdp
bnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw3
IEBACiAjaW1wb3J0ICJXZWJVSURlbGVnYXRlUHJpdmF0ZS5oIgogI2ltcG9ydCAiV2ViVmlld0lu
dGVybmFsLmgiCiAjaW1wb3J0IDxDYXJib24vQ2FyYm9uLmg+CisjaW1wb3J0IDxXZWJDb3JlL0Nv
bW1vblZNLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0Nvb2tpZUphci5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9Eb2N1bWVudExvYWRlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9FbGVtZW50Lmg+CkBAIC02NjUs
NyArNjY2LDcgQEAgLSAoQk9PTClzZW5kRXZlbnQ6KHZvaWQqKWV2ZW50IGlzRHJhd1JlYwogICAg
IC8vIFNldCB0aGUgcGx1Z2luQWxsb3dQb3B1cCBmbGFnLgogICAgIEFTU0VSVChfZXZlbnRIYW5k
bGVyKTsKICAgICB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwogICAgICAgICBVc2VyR2VzdHVy
ZUluZGljYXRvciBnZXN0dXJlSW5kaWNhdG9yKF9ldmVudEhhbmRsZXItPmN1cnJlbnRFdmVudElz
VXNlckdlc3R1cmUoKSA/IHN0ZDo6b3B0aW9uYWw8UHJvY2Vzc2luZ1VzZXJHZXN0dXJlU3RhdGU+
KFByb2Nlc3NpbmdVc2VyR2VzdHVyZSkgOiBzdGQ6Om51bGxvcHQpOwogICAgICAgICBhY2NlcHRl
ZEV2ZW50ID0gW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+ZXZlbnQocGx1Z2lu
LCBldmVudCk7CiAgICAgfQpAQCAtODQxLDcgKzg0Miw3IEBAIC0gKHZvaWQpcHJpdmF0ZUJyb3dz
aW5nTW9kZURpZENoYW5nZQogCiAgICAgW3NlbGYgd2lsbENhbGxQbHVnSW5GdW5jdGlvbl07CiAg
ICAgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RP
TVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKICAgICAgICAgaWYgKFtfcGx1Z2luUGFja2Fn
ZS5nZXQoKSBwbHVnaW5GdW5jc10tPnNldHZhbHVlKQogICAgICAgICAgICAgW19wbHVnaW5QYWNr
YWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+c2V0dmFsdWUocGx1Z2luLCBOUE5WcHJpdmF0ZU1vZGVC
b29sLCAmdmFsdWUpOwogICAgIH0KQEAgLTk4Miw3ICs5ODMsNyBAQCAtICh2b2lkKXNldFdpbmRv
d0lmTmVjZXNzYXJ5CiAgICAgICAgIGluU2V0V2luZG93ID0gWUVTOyAgICAgICAgCiAgICAgICAg
IFtzZWxmIHdpbGxDYWxsUGx1Z0luRnVuY3Rpb25dOwogICAgICAgICB7Ci0gICAgICAgICAgICBK
U0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNv
bW1vblZNKCkpOworICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoY29tbW9uVk0oKSk7CiAgICAgICAgICAgICBucEVyciA9IFtfcGx1Z2luUGFja2FnZS5n
ZXQoKSBwbHVnaW5GdW5jc10tPnNldHdpbmRvdyhwbHVnaW4sICZ3aW5kb3cpOwogICAgICAgICB9
CiAgICAgICAgIFtzZWxmIGRpZENhbGxQbHVnSW5GdW5jdGlvbl07CkBAIC0xMzUyLDcgKzEzNTMs
NyBAQCAtIChOUE9iamVjdCAqKWNyZWF0ZVBsdWdpblNjcmlwdGFibGVPYmplCiAgICAgTlBFcnJv
ciBlcnJvcjsKICAgICBbc2VsZiB3aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKICAgICB7Ci0gICAg
ICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFz
ZTo6Y29tbW9uVk0oKSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFs
bExvY2tzKGNvbW1vblZNKCkpOwogICAgICAgICBlcnJvciA9IFtfcGx1Z2luUGFja2FnZS5nZXQo
KSBwbHVnaW5GdW5jc10tPmdldHZhbHVlKHBsdWdpbiwgTlBQVnBsdWdpblNjcmlwdGFibGVOUE9i
amVjdCwgJnZhbHVlKTsKICAgICB9CiAgICAgW3NlbGYgZGlkQ2FsbFBsdWdJbkZ1bmN0aW9uXTsK
QEAgLTEzNzEsNyArMTM3Miw3IEBAIC0gKEJPT0wpZ2V0Rm9ybVZhbHVlOihOU1N0cmluZyAqKil2
YWx1ZQogICAgIE5QRXJyb3IgZXJyb3I7CiAgICAgW3NlbGYgd2lsbENhbGxQbHVnSW5GdW5jdGlv
bl07CiAgICAgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKICAgICAgICAgZXJyb3IgPSBbX3Bs
dWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT5nZXR2YWx1ZShwbHVnaW4sIE5QUFZmb3Jt
VmFsdWUsICZidWZmZXIpOwogICAgIH0KICAgICBbc2VsZiBkaWRDYWxsUGx1Z0luRnVuY3Rpb25d
OwpAQCAtMTUwMyw3ICsxNTA0LDcgQEAgLSAodm9pZClldmFsdWF0ZUphdmFTY3JpcHRQbHVnaW5S
ZXF1ZXN0OgogICAgICAgICBpZiAoW0pTUGx1Z2luUmVxdWVzdCBzZW5kTm90aWZpY2F0aW9uXSkg
ewogICAgICAgICAgICAgW3NlbGYgd2lsbENhbGxQbHVnSW5GdW5jdGlvbl07CiAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICAgICAgICAgICAgICBKU0M6OkpT
TG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKICAgICAgICAgICAg
ICAgICBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT51cmxub3RpZnkocGx1Z2lu
LCBbVVJMIF93ZWJfVVJMQ1N0cmluZ10sIE5QUkVTX0RPTkUsIFtKU1BsdWdpblJlcXVlc3Qgbm90
aWZ5RGF0YV0pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgW3NlbGYgZGlkQ2FsbFBsdWdJ
bkZ1bmN0aW9uXTsKQEAgLTE1MzUsNyArMTUzNiw3IEBAIC0gKHZvaWQpd2ViRnJhbWU6KFdlYkZy
YW1lICopd2ViRnJhbWUgZGkKICAgICAgICAgCiAgICAgW3NlbGYgd2lsbENhbGxQbHVnSW5GdW5j
dGlvbl07CiAgICAgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgICAgICBKU0M6OkpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKICAgICAgICAgW19wbHVnaW5Q
YWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+dXJsbm90aWZ5KHBsdWdpbiwgW1tbcGx1Z2luUmVx
dWVzdCByZXF1ZXN0XSBVUkxdIF93ZWJfVVJMQ1N0cmluZ10sIHJlYXNvbiwgW3BsdWdpblJlcXVl
c3Qgbm90aWZ5RGF0YV0pOwogICAgIH0KICAgICBbc2VsZiBkaWRDYWxsUGx1Z0luRnVuY3Rpb25d
OwpAQCAtMTU3OSw3ICsxNTgwLDcgQEAgLSAodm9pZClsb2FkUGx1Z2luUmVxdWVzdDooV2ViUGx1
Z2luUmVxdQogICAgICAgICAgICAgICAgIGlmIChbcGx1Z2luUmVxdWVzdCBzZW5kTm90aWZpY2F0
aW9uXSkgewogICAgICAgICAgICAgICAgICAgICBbc2VsZiB3aWxsQ2FsbFBsdWdJbkZ1bmN0aW9u
XTsKICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgSlNDOjpK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25W
TSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgW19wbHVn
aW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+dXJsbm90aWZ5KHBsdWdpbiwgW1tbcGx1Z2lu
UmVxdWVzdCByZXF1ZXN0XSBVUkxdIF93ZWJfVVJMQ1N0cmluZ10sIE5QRVJSX0dFTkVSSUNfRVJS
T1IsIFtwbHVnaW5SZXF1ZXN0IG5vdGlmeURhdGFdKTsKICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICBbc2VsZiBkaWRDYWxsUGx1Z0luRnVuY3Rpb25dOwpAQCAtMjM2
OSw3ICsyMzcwLDcgQEAgLSAoTlNCaXRtYXBJbWFnZVJlcCAqKV9wcmludGVkUGx1Z2luQml0bQog
ICAgIC8vIFRlbGwgdGhlIHBsdWdpbiB0byBwcmludCBpbnRvIHRoZSBHV29ybGQKICAgICBbc2Vs
ZiB3aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKICAgICB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7Cisg
ICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkp
OwogICAgICAgICBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT5wcmludChwbHVn
aW4sICZucFByaW50KTsKICAgICB9CiAgICAgW3NlbGYgZGlkQ2FsbFBsdWdJbkZ1bmN0aW9uXTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViUGx1Z2luQ29udHJvbGxlci5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYlBsdWdpbkNvbnRyb2xs
ZXIubW0JKHJldmlzaW9uIDIwOTY3OCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2Vi
UGx1Z2luQ29udHJvbGxlci5tbQkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQAogI2lt
cG9ydCAiV2ViVUlEZWxlZ2F0ZS5oIgogI2ltcG9ydCAiV2ViVmlld0ludGVybmFsLmgiCiAjaW1w
b3J0IDxGb3VuZGF0aW9uL05TVVJMUmVxdWVzdC5oPgorI2ltcG9ydCA8V2ViQ29yZS9Db21tb25W
TS5oPgogI2ltcG9ydCA8V2ViQ29yZS9Eb2N1bWVudExvYWRlci5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxvYWRSZXF1ZXN0Lmg+CkBAIC0xMzIs
MTYgKzEzMywxNiBAQCAtIChOU1ZpZXcgKilwbHVnSW5WaWV3V2l0aEFyZ3VtZW50czooTlNECiAj
aWYgUExBVEZPUk0oSU9TKQogICAgIHsKICAgICAgICAgV2ViVmlldyAqd2ViVmlldyA9IFtfZG9j
dW1lbnRWaWV3IF93ZWJWaWV3XTsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICAgICAgSlNDOjpK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoY29tbW9uVk0oKSk7CiAgICAgICAgIHZp
ZXcgPSBbW3dlYlZpZXcgX1VJS2l0RGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2ViVmlldyBw
bHVnSW5WaWV3V2l0aEFyZ3VtZW50czphcmd1bWVudHMgZnJvbVBsdWdJblBhY2thZ2U6cGx1Z2lu
UGFja2FnZV07CiAgICAgfQogI2Vsc2UKICAgICBDbGFzcyB2aWV3RmFjdG9yeSA9IFtwbHVnaW5Q
YWNrYWdlIHZpZXdGYWN0b3J5XTsKICAgICBpZiAoW3ZpZXdGYWN0b3J5IHJlc3BvbmRzVG9TZWxl
Y3RvcjpAc2VsZWN0b3IocGx1Z0luVmlld1dpdGhBcmd1bWVudHM6KV0pIHsKLSAgICAgICAgSlND
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21t
b25WTSgpKTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3Mo
Y29tbW9uVk0oKSk7CiAgICAgICAgIHZpZXcgPSBbdmlld0ZhY3RvcnkgcGx1Z0luVmlld1dpdGhB
cmd1bWVudHM6YXJndW1lbnRzXTsKICAgICB9IGVsc2UgaWYgKFt2aWV3RmFjdG9yeSByZXNwb25k
c1RvU2VsZWN0b3I6QHNlbGVjdG9yKHBsdWdpblZpZXdXaXRoQXJndW1lbnRzOildKSB7Ci0gICAg
ICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFz
ZTo6Y29tbW9uVk0oKSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFs
bExvY2tzKGNvbW1vblZNKCkpOwogICAgICAgICB2aWV3ID0gW3ZpZXdGYWN0b3J5IHBsdWdpblZp
ZXdXaXRoQXJndW1lbnRzOmFyZ3VtZW50c107CiAgICAgfQogI2VuZGlmCkBAIC0yMjQsMTAgKzIy
NSwxMCBAQCAtIChDQUxheWVyICopc3VwZXJsYXllckZvclBsdWdpblZpZXc6KE5TCiAtICh2b2lk
KXN0b3BPbmVQbHVnaW46KE5TVmlldyAqKXZpZXcKIHsKICAgICBpZiAoW3ZpZXcgcmVzcG9uZHNU
b1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJQbHVnSW5TdG9wKV0pIHsKLSAgICAgICAgSlNDOjpKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgp
KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoY29tbW9u
Vk0oKSk7CiAgICAgICAgIFt2aWV3IHdlYlBsdWdJblN0b3BdOwogICAgIH0gZWxzZSBpZiAoW3Zp
ZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihwbHVnaW5TdG9wKV0pIHsKLSAgICAgICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpj
b21tb25WTSgpKTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3MoY29tbW9uVk0oKSk7CiAgICAgICAgIFt2aWV3IHBsdWdpblN0b3BdOwogICAgIH0KIH0KQEAg
LTIzNiw3ICsyMzcsNyBAQCAtICh2b2lkKXN0b3BPbmVQbHVnaW46KE5TVmlldyAqKXZpZXcKIC0g
KHZvaWQpc3RvcE9uZVBsdWdpbkZvclBhZ2VDYWNoZTooTlNWaWV3ICopdmlldwogewogICAgIGlm
IChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlBsdWdJblN0b3BGb3JQYWdl
Q2FjaGUpXSkgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKICAgICAgICAgW3ZpZXcgd2ViUGx1
Z0luU3RvcEZvclBhZ2VDYWNoZV07CiAgICAgfSBlbHNlCiAgICAgICAgIFtzZWxmIHN0b3BPbmVQ
bHVnaW46dmlld107CkBAIC0yNDYsMTAgKzI0NywxMCBAQCAtICh2b2lkKXN0b3BPbmVQbHVnaW5G
b3JQYWdlQ2FjaGU6KE5TVmllCiAtICh2b2lkKWRlc3Ryb3lPbmVQbHVnaW46KE5TVmlldyAqKXZp
ZXcKIHsKICAgICBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJQbHVn
SW5EZXN0cm95KV0pIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICAgICAgSlNDOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoY29tbW9uVk0oKSk7CiAgICAgICAgIFt2aWV3IHdl
YlBsdWdJbkRlc3Ryb3ldOwogICAgIH0gZWxzZSBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3RvcihwbHVnaW5EZXN0cm95KV0pIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICAg
ICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoY29tbW9uVk0oKSk7CiAg
ICAgICAgIFt2aWV3IHBsdWdpbkRlc3Ryb3ldOwogICAgIH0KIH0KQEAgLTI2NiwxMCArMjY3LDEw
IEBAIC0gKHZvaWQpc3RhcnRBbGxQbHVnaW5zCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKSB7CiAgICAgICAgIGlkIGFWaWV3ID0gW192aWV3cyBvYmplY3RBdEluZGV4OmldOwog
ICAgICAgICBpZiAoW2FWaWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViUGx1Z0lu
U3RhcnQpXSkgewotICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICAgICAgICAgIEpTQzo6SlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwogICAgICAgICAgICAg
W2FWaWV3IHdlYlBsdWdJblN0YXJ0XTsKICAgICAgICAgfSBlbHNlIGlmIChbYVZpZXcgcmVzcG9u
ZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihwbHVnaW5TdGFydCldKSB7Ci0gICAgICAgICAgICBKU0M6
OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1v
blZNKCkpOworICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3MoY29tbW9uVk0oKSk7CiAgICAgICAgICAgICBbYVZpZXcgcGx1Z2luU3RhcnRdOwogICAgICAg
ICB9CiAgICAgfQpAQCAtMzQ1LDEwICszNDYsMTAgQEAgLSAodm9pZClhZGRQbHVnaW46KE5TVmll
dyAqKXZpZXcKIAogICAgICAgICBMT0coUGx1Z2lucywgImluaXRpYWxpemluZyBwbHVnLWluICVA
Iiwgdmlldyk7CiAgICAgICAgIGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9y
KHdlYlBsdWdJbkluaXRpYWxpemUpXSkgewotICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICAg
ICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkp
OwogICAgICAgICAgICAgW3ZpZXcgd2ViUGx1Z0luSW5pdGlhbGl6ZV07CiAgICAgICAgIH0gZWxz
ZSBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihwbHVnaW5Jbml0aWFsaXpl
KV0pIHsKLSAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgICAgICAgICBKU0M6OkpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKICAgICAgICAgICAgIFt2aWV3
IHBsdWdpbkluaXRpYWxpemVdOwogICAgICAgICB9CiAKQEAgLTM2MCwxNSArMzYxLDE1IEBAIC0g
KHZvaWQpYWRkUGx1Z2luOihOU1ZpZXcgKil2aWV3CiAgICAgICAgIGlmIChfc3RhcnRlZCkgewog
ICAgICAgICAgICAgTE9HKFBsdWdpbnMsICJzdGFydGluZyBwbHVnLWluICVAIiwgdmlldyk7CiAg
ICAgICAgICAgICBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJQbHVn
SW5TdGFydCldKSB7Ci0gICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICAgICAgICAgICAg
ICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKICAg
ICAgICAgICAgICAgICBbdmlldyB3ZWJQbHVnSW5TdGFydF07CiAgICAgICAgICAgICB9IGVsc2Ug
aWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocGx1Z2luU3RhcnQpXSkgewot
ICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpT
RE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoY29tbW9uVk0oKSk7CiAgICAgICAgICAgICAgICAg
W3ZpZXcgcGx1Z2luU3RhcnRdOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihzZXRDb250YWluaW5n
V2luZG93OildKSB7Ci0gICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICAgICAgICAgICAg
ICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKICAg
ICAgICAgICAgICAgICBbdmlldyBzZXRDb250YWluaW5nV2luZG93OltfZG9jdW1lbnRWaWV3IHdp
bmRvd11dOwogICAgICAgICAgICAgfQogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L21h
Yy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RQcm94
eS5tbQkocmV2aXNpb24gMjA5Njc4KQorKysgU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0
ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkubW0JKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3
LDcgQEAKICNpbXBvcnQgIldlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldy5oIgogI2ltcG9ydCAi
V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmgiCiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JZGVudGlm
aWVySW5saW5lcy5oPgorI2ltcG9ydCA8V2ViQ29yZS9Db21tb25WTS5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9JZGVudGlmaWVyUmVwLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL1NjcmlwdENvbnRyb2xsZXIuaD4KQEAgLTYyNyw3ICs2MjgsNyBAQCBzdGF0aWMg
SWRlbnRpZmllciBpZGVudGlmaWVyRnJvbUlkZW50aWZpCiAgICAgQVNTRVJUKGlkZW50aWZpZXIt
PmlzU3RyaW5nKCkpOwogICAKICAgICBjb25zdCBjaGFyKiBzdHIgPSBpZGVudGlmaWVyLT5zdHJp
bmcoKTsgICAgCi0gICAgcmV0dXJuIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJkpTRE9NV2luZG93
Ojpjb21tb25WTSgpLCBTdHJpbmc6OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKHN0ciwgc3Ry
bGVuKHN0cikpKTsKKyAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmY29tbW9uVk0o
KSwgU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhzdHIsIHN0cmxlbihzdHIpKSk7
CiB9CiAKIGtlcm5fcmV0dXJuX3QgV0tQQ0ludm9rZShtYWNoX3BvcnRfdCBjbGllbnRQb3J0LCB1
aW50MzJfdCBwbHVnaW5JRCwgdWludDMyX3QgcmVxdWVzdElELCB1aW50MzJfdCBvYmplY3RJRCwg
dWludDY0X3Qgc2VydmVySWRlbnRpZmllciwKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdp
bnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9t
YWMvUGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0YW5jZS5tbQkocmV2aXNpb24gMjA5Njc4KQorKysg
U291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0YW5jZS5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW1wb3J0ICJOZXRzY2FwZVBsdWdpbkhvc3RQ
cm94eS5oIgogI2ltcG9ydCAiUHJveHlSdW50aW1lT2JqZWN0LmgiCisjaW1wb3J0IDxXZWJDb3Jl
L0NvbW1vblZNLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0lkZW50aWZpZXJSZXAuaD4KICNpbXBvcnQg
PFdlYkNvcmUvSlNET01XaW5kb3cuaD4KICNpbXBvcnQgPFdlYkNvcmUvbnBydW50aW1lX2ltcGwu
aD4KQEAgLTMyNSw3ICszMjYsNyBAQCB2b2lkIFByb3h5SW5zdGFuY2U6OmdldFByb3BlcnR5TmFt
ZXMoRXhlCiAKICAgICAgICAgaWYgKGlkZW50aWZpZXItPmlzU3RyaW5nKCkpIHsKICAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIHN0ciA9IGlkZW50aWZpZXItPnN0cmluZygpOwotICAgICAgICAgICAg
bmFtZUFycmF5LmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZKU0RPTVdpbmRvdzo6Y29tbW9u
Vk0oKSwgU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhzdHIsIHN0cmxlbihzdHIp
KSkpOworICAgICAgICAgICAgbmFtZUFycmF5LmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZj
b21tb25WTSgpLCBTdHJpbmc6OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKHN0ciwgc3RybGVu
KHN0cikpKSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbmFtZUFycmF5LmFkZChJZGVu
dGlmaWVyOjpmcm9tKGV4ZWMsIGlkZW50aWZpZXItPm51bWJlcigpKSk7CiAgICAgfQpJbmRleDog
U291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
d2luL0NoYW5nZUxvZwkocmV2aXNpb24gMjA5Njc4KQorKysgU291cmNlL1dlYktpdC93aW4vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTYtMTItMTAgIEZpbGlw
IFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBUaGUgRE9NIHNob3VsZCBoYXZl
IGFuIGFkdmFuY2luZyB3YXZlZnJvbnQgb3BhcXVlIHJvb3QgYmFycmllcgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NzEyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBQcm9wYWdhdGUgdGhl
IEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSAtPiBjb21tb25WTSgpIGNoYW5nZS4KKworICAg
ICAgICAqIFBsdWdpbnMvUGx1Z2luVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5W
aWV3OjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzdG9wKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBlcmZvcm1SZXF1ZXN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblZpZXc6Om5wT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OnByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZCk6CisgICAgICAgICogUGx1Z2lucy9QbHVnaW5W
aWV3V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KToKKyAgICAgICAgKiBXZWJD
b3JlU3RhdGlzdGljcy5jcHA6CisgICAgICAgIChXZWJDb3JlU3RhdGlzdGljczo6amF2YVNjcmlw
dE9iamVjdHNDb3VudCk6CisgICAgICAgIChXZWJDb3JlU3RhdGlzdGljczo6amF2YVNjcmlwdEds
b2JhbE9iamVjdHNDb3VudCk6CisgICAgICAgIChXZWJDb3JlU3RhdGlzdGljczo6amF2YVNjcmlw
dFByb3RlY3RlZE9iamVjdHNDb3VudCk6CisgICAgICAgIChXZWJDb3JlU3RhdGlzdGljczo6amF2
YVNjcmlwdFByb3RlY3RlZEdsb2JhbE9iamVjdHNDb3VudCk6CisgICAgICAgIChXZWJDb3JlU3Rh
dGlzdGljczo6amF2YVNjcmlwdFByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMpOgorICAgICAgICAo
V2ViQ29yZVN0YXRpc3RpY3M6OmphdmFTY3JpcHRPYmplY3RUeXBlQ291bnRzKToKKyAgICAgICAg
KFdlYkNvcmVTdGF0aXN0aWNzOjpzaG91bGRQcmludEV4Y2VwdGlvbnMpOgorICAgICAgICAoV2Vi
Q29yZVN0YXRpc3RpY3M6OnNldFNob3VsZFByaW50RXhjZXB0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlU3RhdGlzdGljczo6bWVtb3J5U3RhdGlzdGljcyk6CisgICAgICAgICogV2ViSmF2YVNjcmlw
dENvbGxlY3Rvci5jcHA6CisgICAgICAgIChXZWJKYXZhU2NyaXB0Q29sbGVjdG9yOjpvYmplY3RD
b3VudCk6CisKIDIwMTYtMTItMDkgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4K
IAogICAgICAgICBUZXh0UG9zaXRpb24gYW5kIE9yZGluYWxOdW1iZXIgc2hvdWxkIGJlIG1vcmUg
bGlrZSBpZGlvbWF0aWMgbnVtYmVycwpJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN0
YXRpc3RpY3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdGF0
aXN0aWNzLmNwcAkocmV2aXNpb24gMjA5Njc4KQorKysgU291cmNlL1dlYktpdC93aW4vV2ViQ29y
ZVN0YXRpc3RpY3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVk
ZSAiQ09NUHJvcGVydHlCYWcuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0xvY2suaD4K
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9NZW1vcnlTdGF0aXN0aWNzLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9Db21tb25WTS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRE9NV2luZG93Lmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9Gb250Q2FjaGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dDQ29udHJvbGxl
ci5oPgpAQCAtMTAzLDggKzEwNCw4IEBAIEhSRVNVTFQgV2ViQ29yZVN0YXRpc3RpY3M6OmphdmFT
Y3JpcHRPYmoKICAgICBpZiAoIWNvdW50KQogICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwogCi0g
ICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOwotICAgICpjb3Vu
dCA9IChVSU5UKUpTRE9NV2luZG93Ojpjb21tb25WTSgpLmhlYXAub2JqZWN0Q291bnQoKTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhjb21tb25WTSgpKTsKKyAgICAqY291bnQgPSAoVUlOVCljb21t
b25WTSgpLmhlYXAub2JqZWN0Q291bnQoKTsKICAgICByZXR1cm4gU19PSzsKIH0KIApAQCAtMTEz
LDggKzExNCw4IEBAIEhSRVNVTFQgV2ViQ29yZVN0YXRpc3RpY3M6OmphdmFTY3JpcHRHbG8KICAg
ICBpZiAoIWNvdW50KQogICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwogCi0gICAgSlNMb2NrSG9s
ZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOwotICAgICpjb3VudCA9IChVSU5UKUpT
RE9NV2luZG93Ojpjb21tb25WTSgpLmhlYXAuZ2xvYmFsT2JqZWN0Q291bnQoKTsKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayhjb21tb25WTSgpKTsKKyAgICAqY291bnQgPSAoVUlOVCljb21tb25WTSgp
LmhlYXAuZ2xvYmFsT2JqZWN0Q291bnQoKTsKICAgICByZXR1cm4gU19PSzsKIH0KIApAQCAtMTIz
LDggKzEyNCw4IEBAIEhSRVNVTFQgV2ViQ29yZVN0YXRpc3RpY3M6OmphdmFTY3JpcHRQcm8KICAg
ICBpZiAoIWNvdW50KQogICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwogCi0gICAgSlNMb2NrSG9s
ZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOwotICAgICpjb3VudCA9IChVSU5UKUpT
RE9NV2luZG93Ojpjb21tb25WTSgpLmhlYXAucHJvdGVjdGVkT2JqZWN0Q291bnQoKTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayhjb21tb25WTSgpKTsKKyAgICAqY291bnQgPSAoVUlOVCljb21tb25W
TSgpLmhlYXAucHJvdGVjdGVkT2JqZWN0Q291bnQoKTsKICAgICByZXR1cm4gU19PSzsKIH0KIApA
QCAtMTMzLDggKzEzNCw4IEBAIEhSRVNVTFQgV2ViQ29yZVN0YXRpc3RpY3M6OmphdmFTY3JpcHRQ
cm8KICAgICBpZiAoIWNvdW50KQogICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwogCi0gICAgSlNM
b2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOwotICAgICpjb3VudCA9IChV
SU5UKUpTRE9NV2luZG93Ojpjb21tb25WTSgpLmhlYXAucHJvdGVjdGVkR2xvYmFsT2JqZWN0Q291
bnQoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhjb21tb25WTSgpKTsKKyAgICAqY291bnQgPSAo
VUlOVCljb21tb25WTSgpLmhlYXAucHJvdGVjdGVkR2xvYmFsT2JqZWN0Q291bnQoKTsKICAgICBy
ZXR1cm4gU19PSzsKIH0KIApAQCAtMTQzLDggKzE0NCw4IEBAIEhSRVNVTFQgV2ViQ29yZVN0YXRp
c3RpY3M6OmphdmFTY3JpcHRQcm8KICAgICBpZiAoIXR5cGVOYW1lc0FuZENvdW50cykKICAgICAg
ICAgcmV0dXJuIEVfUE9JTlRFUjsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93
Ojpjb21tb25WTSgpKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZUNvdW50U2V0PiBqc09iamVj
dFR5cGVOYW1lcyhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS5oZWFwLnByb3RlY3RlZE9iamVjdFR5
cGVDb3VudHMoKSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPFR5cGVDb3VudFNldD4ganNPYmplY3RUeXBlTmFtZXMoY29tbW9uVk0oKS5o
ZWFwLnByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMoKSk7CiAgICAgdHlwZWRlZiBUeXBlQ291bnRT
ZXQ6OmNvbnN0X2l0ZXJhdG9yIEl0ZXJhdG9yOwogICAgIEl0ZXJhdG9yIGVuZCA9IGpzT2JqZWN0
VHlwZU5hbWVzLT5lbmQoKTsKICAgICBIYXNoTWFwPFN0cmluZywgaW50PiB0eXBlQ291bnRNYXA7
CkBAIC0xNjEsOCArMTYyLDggQEAgSFJFU1VMVCBXZWJDb3JlU3RhdGlzdGljczo6amF2YVNjcmlw
dE9iagogICAgIGlmICghdHlwZU5hbWVzQW5kQ291bnRzKQogICAgICAgICByZXR1cm4gRV9QT0lO
VEVSOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOwot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlQ291bnRTZXQ+IGpzT2JqZWN0VHlwZU5hbWVzKEpTRE9N
V2luZG93Ojpjb21tb25WTSgpLmhlYXAub2JqZWN0VHlwZUNvdW50cygpKTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9jayhjb21tb25WTSgpKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZUNvdW50U2V0
PiBqc09iamVjdFR5cGVOYW1lcyhjb21tb25WTSgpLmhlYXAub2JqZWN0VHlwZUNvdW50cygpKTsK
ICAgICB0eXBlZGVmIFR5cGVDb3VudFNldDo6Y29uc3RfaXRlcmF0b3IgSXRlcmF0b3I7CiAgICAg
SXRlcmF0b3IgZW5kID0ganNPYmplY3RUeXBlTmFtZXMtPmVuZCgpOwogICAgIEhhc2hNYXA8U3Ry
aW5nLCBpbnQ+IHR5cGVDb3VudE1hcDsKQEAgLTI1OSwxNCArMjYwLDE0IEBAIEhSRVNVTFQgV2Vi
Q29yZVN0YXRpc3RpY3M6OnNob3VsZFByaW50RXgKICAgICBpZiAoIXNob3VsZFByaW50KQogICAg
ICAgICByZXR1cm4gRV9QT0lOVEVSOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5k
b3c6OmNvbW1vblZNKCkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGNvbW1vblZNKCkpOwogICAg
ICpzaG91bGRQcmludCA9IFBhZ2VDb25zb2xlQ2xpZW50OjpzaG91bGRQcmludEV4Y2VwdGlvbnMo
KTsKICAgICByZXR1cm4gU19PSzsKIH0KIAogSFJFU1VMVCBXZWJDb3JlU3RhdGlzdGljczo6c2V0
U2hvdWxkUHJpbnRFeGNlcHRpb25zKEJPT0wgcHJpbnQpCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxv
Y2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGNvbW1v
blZNKCkpOwogICAgIFBhZ2VDb25zb2xlQ2xpZW50OjpzZXRTaG91bGRQcmludEV4Y2VwdGlvbnMo
cHJpbnQpOwogICAgIHJldHVybiBTX09LOwogfQpAQCAtMjkwLDkgKzI5MSw5IEBAIEhSRVNVTFQg
V2ViQ29yZVN0YXRpc3RpY3M6Om1lbW9yeVN0YXRpc3QKIAogICAgIFdURjo6RmFzdE1hbGxvY1N0
YXRpc3RpY3MgZmFzdE1hbGxvY1N0YXRpc3RpY3MgPSBXVEY6OmZhc3RNYWxsb2NTdGF0aXN0aWNz
KCk7CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7Ci0g
ICAgdW5zaWduZWQgbG9uZyBsb25nIGhlYXBTaXplID0gSlNET01XaW5kb3c6OmNvbW1vblZNKCku
aGVhcC5zaXplKCk7Ci0gICAgdW5zaWduZWQgbG9uZyBsb25nIGhlYXBGcmVlID0gSlNET01XaW5k
b3c6OmNvbW1vblZNKCkuaGVhcC5jYXBhY2l0eSgpIC0gaGVhcFNpemU7CisgICAgSlNMb2NrSG9s
ZGVyIGxvY2soY29tbW9uVk0oKSk7CisgICAgdW5zaWduZWQgbG9uZyBsb25nIGhlYXBTaXplID0g
Y29tbW9uVk0oKS5oZWFwLnNpemUoKTsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgaGVhcEZyZWUg
PSBjb21tb25WTSgpLmhlYXAuY2FwYWNpdHkoKSAtIGhlYXBTaXplOwogICAgIEdsb2JhbE1lbW9y
eVN0YXRpc3RpY3MgZ2xvYmFsTWVtb3J5U3RhdHMgPSBnbG9iYWxNZW1vcnlTdGF0aXN0aWNzKCk7
CiAKICAgICBIYXNoTWFwPFN0cmluZywgdW5zaWduZWQgbG9uZyBsb25nLCBBU0NJSUNhc2VJbnNl
bnNpdGl2ZUhhc2g+IGZpZWxkczsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYkphdmFTY3Jp
cHRDb2xsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkphdmFT
Y3JpcHRDb2xsZWN0b3IuY3BwCShyZXZpc2lvbiAyMDk2NzgpCisrKyBTb3VyY2UvV2ViS2l0L3dp
bi9XZWJKYXZhU2NyaXB0Q29sbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgs
NyBAQAogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcC5oPgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL1ZNLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Db21tb25WTS5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvRE9NV2luZG93Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HQ0NvbnRyb2xsZXIuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0pTRE9NV2luZG93Lmg+CkBAIC0xMTAsNyArMTExLDcgQEAgSFJF
U1VMVCBXZWJKYXZhU2NyaXB0Q29sbGVjdG9yOjpvYmplY3RDbwogICAgICAgICByZXR1cm4gRV9Q
T0lOVEVSOwogICAgIH0KIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21t
b25WTSgpKTsKLSAgICAqY291bnQgPSAoVUlOVClKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS5oZWFw
Lm9iamVjdENvdW50KCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7CisgICAg
KmNvdW50ID0gKFVJTlQpY29tbW9uVk0oKS5oZWFwLm9iamVjdENvdW50KCk7CiAgICAgcmV0dXJu
IFNfT0s7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblZpZXcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAJ
KHJldmlzaW9uIDIwOTY3OCkKKysrIFNvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luVmll
dy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJQbHVnaW5Q
YWNrYWdlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9CcmlkZ2VKU0MuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0Nocm9tZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQ29tbW9uVk0uaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0Nvb2tpZUphci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0RvY3VtZW50TG9hZGVyLmg+CkBAIC0yMzYsNyArMjM3LDcgQEAgYm9vbCBQ
bHVnaW5WaWV3OjpzdGFydCgpCiAgICAgTlBFcnJvciBucEVycjsKICAgICB7CiAgICAgICAgIFBs
dWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgICAgICBKU0M6OkpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkp
OworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25W
TSgpKTsKICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICAgICAgbnBFcnIgPSBt
X3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+bmV3cCgoTlBNSU1FVHlwZSltX21pbWVUeXBlLnV0Zjgo
KS5kYXRhKCksIG1faW5zdGFuY2UsIG1fbW9kZSwgbV9wYXJhbUNvdW50LCBtX3BhcmFtTmFtZXMs
IG1fcGFyYW1WYWx1ZXMsIE5VTEwpOwogICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsK
QEAgLTMyNSw3ICszMjYsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnN0b3AoKQogCiAgICAgbV9pc1N0
YXJ0ZWQgPSBmYWxzZTsKIAotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoY29tbW9uVk0oKSk7CiAKICNpZiBFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX0FQSSkKICAgICAvLyBVbnN1YmNsYXNzIHRoZSB3aW5kb3cKQEAgLTQyOCw3ICs0Mjks
NyBAQCB2b2lkIFBsdWdpblZpZXc6OnBlcmZvcm1SZXF1ZXN0KFBsdWdpblJlCiAgICAgICAgICAg
ICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzQ4MDc0Njk+IFRoaXMgc2hvdWxkIGJlIHNlbnQg
d2hlbiB0aGUgZG9jdW1lbnQgaGFzIGZpbmlzaGVkIGxvYWRpbmcKICAgICAgICAgICAgIGlmIChy
ZXF1ZXN0LT5zZW5kTm90aWZpY2F0aW9uKCkpIHsKICAgICAgICAgICAgICAgICBQbHVnaW5WaWV3
OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICAgICAgICAgICAgICBKU0M6OkpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkp
OworICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KGNvbW1vblZNKCkpOwogICAgICAgICAgICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAg
ICAgICAgICAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnVybG5vdGlmeShtX2luc3Rh
bmNlLCByZXF1ZXN0VVJMLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIE5QUkVTX0RPTkUsIHJlcXVl
c3QtPm5vdGlmeURhdGEoKSk7CiAgICAgICAgICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxz
ZSk7CkBAIC02NjUsNyArNjY2LDcgQEAgTlBPYmplY3QqIFBsdWdpblZpZXc6Om5wT2JqZWN0KCkK
ICAgICBOUEVycm9yIG5wRXJyOwogICAgIHsKICAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVu
dFBsdWdpblZpZXcodGhpcyk7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgICAgIEpTQzo6SlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwogICAgICAgICBzZXRD
YWxsaW5nUGx1Z2luKHRydWUpOwogICAgICAgICBucEVyciA9IG1fcGx1Z2luLT5wbHVnaW5GdW5j
cygpLT5nZXR2YWx1ZShtX2luc3RhbmNlLCBOUFBWcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0LCAm
b2JqZWN0KTsKICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CkBAIC0xMzgyLDcgKzEz
ODMsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnByaXZhdGVCcm93c2luZ1N0YXRlQ2hhCiAgICAgICAg
IHJldHVybjsKIAogICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwot
ICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFz
ZTo6Y29tbW9uVk0oKSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3MoY29tbW9uVk0oKSk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICBOUEJvb2wg
dmFsdWUgPSBwcml2YXRlQnJvd3NpbmdFbmFibGVkOwogICAgIHNldFZhbHVlKG1faW5zdGFuY2Us
IE5QTlZwcml2YXRlTW9kZUJvb2wsICZ2YWx1ZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9Q
bHVnaW5zL1BsdWdpblZpZXdXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2lu
L1BsdWdpbnMvUGx1Z2luVmlld1dpbi5jcHAJKHJldmlzaW9uIDIwOTY3OCkKKysrIFNvdXJjZS9X
ZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luVmlld1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDYgKzMzLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0JyaWRnZUpTQy5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvQ2hyb21lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9DaHJvbWVDbGllbnQuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0NvbW1vblZNLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnRMb2FkZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Vs
ZW1lbnQuaD4KQEAgLTQ1Miw3ICs0NTMsNyBAQCBib29sIFBsdWdpblZpZXc6OmRpc3BhdGNoTlBF
dmVudChOUEV2ZW50CiAgICAgICAgIHNob3VsZFBvcCA9IHRydWU7CiAgICAgfQogCi0gICAgSlND
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21t
b25WTSgpKTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21t
b25WTSgpKTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAgIGJvb2wgYWNjZXB0ZWQg
PSAhbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZucEV2ZW50KTsK
ICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKQEAgLTU5NSw3ICs1OTYsNyBAQCB2b2lkIFBs
dWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5CiAgICAgfSBlbHNlCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9N
V2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoY29tbW9uVk0oKSk7CiAgICAgaWYgKGRpc3BhdGNoTlBFdmVudChucEV2ZW50
KSkKICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiB9CkBAIC02NjIsNyArNjYz
LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRQogICAgIH0gZWxz
ZQogICAgICAgICByZXR1cm47CiAKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgIEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwogICAgIC8vIEZJWE1FOiBDb25z
aWRlciBiYWNrIHBvcnRpbmcgdGhlIGh0dHA6Ly93ZWJraXQub3JnL2IvNTgxMDggZml4IGhlcmUu
CiAgICAgaWYgKGRpc3BhdGNoTlBFdmVudChucEV2ZW50KSkKICAgICAgICAgZXZlbnQtPnNldERl
ZmF1bHRIYW5kbGVkKCk7CkBAIC03MzMsNyArNzM0LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpzZXRO
UFdpbmRvd1JlY3QoY29uc3QgSQogICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0gMDsKIAog
ICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KSB7Ci0gICAgICAgIEpT
Qzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29t
bW9uVk0oKSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KGNvbW1vblZNKCkpOwogICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAgICAgICBt
X3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KG1faW5zdGFuY2UsICZtX25wV2luZG93
KTsKICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>296843</attachid>
            <date>2016-12-10 19:49:11 -0800</date>
            <delta_ts>2016-12-10 20:29:19 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>98697</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA5Njc4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBA
CisyMDE2LTEyLTEwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
VGhlIERPTSBzaG91bGQgaGF2ZSBhbiBhZHZhbmNpbmcgd2F2ZWZyb250IG9wYXF1ZSByb290IGJh
cnJpZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
NTcxMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAg
ICAgICAgVGhpcyBleHBvc2VzIHRoZSBhYmlsaXR5IHRvIGZpcmUgYW4gYWR2YW5jaW5nIHdhdmVm
cm9udCBiYXJyaWVyIG9uIG9wYXF1ZSByb290cy4gSXQgYWxzbworICAgICAgICBnaXZlcyBjbGll
bnRzIHRoZSBhYmlsaXR5IHRvIG1haW50YWluIHRoZWlyIG93biBjYWNoZSBvZiB3aGV0aGVyIHRo
YXQgYmFycmllciBuZWVkcyB0bworICAgICAgICBiZSBlbmFibGVkLgorICAgICAgICAKKyAgICAg
ICAgVGhlIERPTSB1c2VzIHRoaXMgdG8gZW5hYmxlIGEgdmVyeSBjaGVhcCBiYXJyaWVyIG9uIHRo
ZSBET00uIFRoaXMgaXMgbmV1dHJhbCBvbgorICAgICAgICBTcGVlZG9tZXRlciBhbmQgZml4ZXMg
YW5vdGhlciBjb25jdXJyZW50IEdDIGNyYXNoLgorCisgICAgICAgICogaGVhcC9IZWFwLmNwcDoK
KyAgICAgICAgKEpTQzo6SGVhcDo6YmVnaW5NYXJraW5nKToKKyAgICAgICAgKEpTQzo6SGVhcDo6
ZW5kTWFya2luZyk6CisgICAgICAgIChKU0M6OkhlYXA6OndyaXRlQmFycmllck9wYXF1ZVJvb3RT
bG93KToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWRkTXV0YXRvclNob3VsZEJlRmVuY2VkQ2FjaGUp
OgorICAgICAgICAoSlNDOjpIZWFwOjpzZXRNdXRhdG9yU2hvdWxkQmVGZW5jZWQpOgorICAgICAg
ICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAqIGhlYXAvSGVhcElubGluZXMuaDoKKyAgICAgICAg
KEpTQzo6d3JpdGVCYXJyaWVyT3BhcXVlUm9vdCk6CisKIDIwMTYtMTItMTAgIENvbW1pdCBRdWV1
ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxp
bmcgb3V0IHIyMDk2NTMsIHIyMDk2NTQsIHIyMDk2NjMsIGFuZApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIwOTY3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MTUsOCArODE1LDcgQEAgdm9p
ZCBIZWFwOjpiZWdpbk1hcmtpbmcoKQogICAgICAgICBtX2NvZGVCbG9ja3MtPmNsZWFyTWFya3NG
b3JGdWxsQ29sbGVjdGlvbigpOwogICAgIG1faml0U3R1YlJvdXRpbmVzLT5jbGVhck1hcmtzKCk7
CiAgICAgbV9vYmplY3RTcGFjZS5iZWdpbk1hcmtpbmcoKTsKLSAgICBtX211dGF0b3JTaG91bGRC
ZUZlbmNlZCA9IHRydWU7Ci0gICAgbV9iYXJyaWVyVGhyZXNob2xkID0gdGF1dG9sb2dpY2FsVGhy
ZXNob2xkOworICAgIHNldE11dGF0b3JTaG91bGRCZUZlbmNlZCh0cnVlKTsKICAgICBtX2JhcnJp
ZXJzRXhlY3V0ZWQgPSAwOwogfQogCkBAIC05NDMsOCArOTQyLDcgQEAgdm9pZCBIZWFwOjplbmRN
YXJraW5nKCkKICAgICBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzLnJlbW92ZUFsbCgpOwogICAg
IAogICAgIG1fb2JqZWN0U3BhY2UuZW5kTWFya2luZygpOwotICAgIG1fbXV0YXRvclNob3VsZEJl
RmVuY2VkID0gT3B0aW9uczo6Zm9yY2VGZW5jZWRCYXJyaWVyKCk7Ci0gICAgbV9iYXJyaWVyVGhy
ZXNob2xkID0gT3B0aW9uczo6Zm9yY2VGZW5jZWRCYXJyaWVyKCkgPyB0YXV0b2xvZ2ljYWxUaHJl
c2hvbGQgOiBibGFja1RocmVzaG9sZDsKKyAgICBzZXRNdXRhdG9yU2hvdWxkQmVGZW5jZWQoT3B0
aW9uczo6Zm9yY2VGZW5jZWRCYXJyaWVyKCkpOwogfQogCiBzaXplX3QgSGVhcDo6b2JqZWN0Q291
bnQoKQpAQCAtMjMxMyw0ICsyMzExLDI3IEBAIHZvaWQgSGVhcDo6Zm9yRWFjaFNsb3RWaXNpdG9y
KGNvbnN0IEZ1bmMKICAgICAgICAgZnVuYygqc2xvdFZpc2l0b3IpOwogfQogCit2b2lkIEhlYXA6
OndyaXRlQmFycmllck9wYXF1ZVJvb3RTbG93KHZvaWQqIHJvb3QpCit7CisgICAgQVNTRVJUKG11
dGF0b3JTaG91bGRCZUZlbmNlZCgpKTsKKyAgICAKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KG1fb3BhcXVlUm9vdHNNdXRleCk7CisgICAgbV9vcGFxdWVSb290cy5hZGQocm9vdCk7Cit9CisK
K3ZvaWQgSGVhcDo6YWRkTXV0YXRvclNob3VsZEJlRmVuY2VkQ2FjaGUoYm9vbCYgY2FjaGUpCit7
CisgICAgQVNTRVJUKGhhc0hlYXBBY2Nlc3MoKSk7CisgICAgY2FjaGUgPSBtX211dGF0b3JTaG91
bGRCZUZlbmNlZDsKKyAgICBtX211dGF0b3JTaG91bGRCZUZlbmNlZENhY2hlcy5hcHBlbmQoJmNh
Y2hlKTsKK30KKwordm9pZCBIZWFwOjpzZXRNdXRhdG9yU2hvdWxkQmVGZW5jZWQoYm9vbCB2YWx1
ZSkKK3sKKyAgICBtX211dGF0b3JTaG91bGRCZUZlbmNlZCA9IHZhbHVlOworICAgIG1fYmFycmll
clRocmVzaG9sZCA9IHZhbHVlID8gdGF1dG9sb2dpY2FsVGhyZXNob2xkIDogYmxhY2tUaHJlc2hv
bGQ7CisgICAgZm9yIChib29sKiBjYWNoZSA6IG1fbXV0YXRvclNob3VsZEJlRmVuY2VkQ2FjaGVz
KQorICAgICAgICAqY2FjaGUgPSB2YWx1ZTsKK30KKyAgICAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjA5Njc4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNiAr
MTI1LDggQEAgcHVibGljOgogCiAgICAgV3JpdGVCYXJyaWVyQnVmZmVyJiB3cml0ZUJhcnJpZXJC
dWZmZXIoKSB7IHJldHVybiBtX3dyaXRlQmFycmllckJ1ZmZlcjsgfQogICAgIHZvaWQgZmx1c2hX
cml0ZUJhcnJpZXJCdWZmZXIoSlNDZWxsKik7CisgICAgCisgICAgdm9pZCB3cml0ZUJhcnJpZXJP
cGFxdWVSb290KHZvaWQqKTsKIAogICAgIEhlYXAoVk0qLCBIZWFwVHlwZSk7CiAgICAgfkhlYXAo
KTsKQEAgLTM0OSw2ICszNTEsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBwcmV2ZW50Q29sbGVjdGlv
bigpOwogICAgIHZvaWQgYWxsb3dDb2xsZWN0aW9uKCk7CiAgICAgCisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBhZGRNdXRhdG9yU2hvdWxkQmVGZW5jZWRDYWNoZShib29sJik7CisgICAgCiAj
aWYgVVNFKENGKQogICAgIENGUnVuTG9vcFJlZiBydW5Mb29wKCkgY29uc3QgeyByZXR1cm4gbV9y
dW5Mb29wLmdldCgpOyB9CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRSdW5Mb29wKENG
UnVuTG9vcFJlZik7CkBAIC00OTAsNiArNDk0LDEwIEBAIHByaXZhdGU6CiAgICAgc2l6ZV90IHRo
cmVhZEJ5dGVzVmlzaXRlZCgpOwogICAgIAogICAgIHZvaWQgZm9yRWFjaENvZGVCbG9ja0ltcGwo
Y29uc3QgU2NvcGVkTGFtYmRhPGJvb2woQ29kZUJsb2NrKik+Jik7CisgICAgCisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCB3cml0ZUJhcnJpZXJPcGFxdWVSb290U2xvdyh2b2lkKik7CisgICAg
CisgICAgdm9pZCBzZXRNdXRhdG9yU2hvdWxkQmVGZW5jZWQoYm9vbCB2YWx1ZSk7CiAKICAgICBj
b25zdCBIZWFwVHlwZSBtX2hlYXBUeXBlOwogICAgIGNvbnN0IHNpemVfdCBtX3JhbVNpemU7CkBA
IC01NDksNiArNTU3LDcgQEAgcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXJCdWZmZXIgbV93cml0
ZUJhcnJpZXJCdWZmZXI7CiAgICAgYm9vbCBtX211dGF0b3JTaG91bGRCZUZlbmNlZCB7IE9wdGlv
bnM6OmZvcmNlRmVuY2VkQmFycmllcigpIH07CiAgICAgdW5zaWduZWQgbV9iYXJyaWVyVGhyZXNo
b2xkIHsgT3B0aW9uczo6Zm9yY2VGZW5jZWRCYXJyaWVyKCkgPyB0YXV0b2xvZ2ljYWxUaHJlc2hv
bGQgOiBibGFja1RocmVzaG9sZCB9OworICAgIFZlY3Rvcjxib29sKj4gbV9tdXRhdG9yU2hvdWxk
QmVGZW5jZWRDYWNoZXM7CiAKICAgICBWTSogbV92bTsKICAgICBkb3VibGUgbV9sYXN0RnVsbEdD
TGVuZ3RoOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCShy
ZXZpc2lvbiAyMDk2NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNzAsNCArMzcwLDEwIEBAIGlubGluZSB2b2lkIEhlYXA6
OnN0b3BJZk5lY2Vzc2FyeSgpCiAgICAgc3RvcElmTmVjZXNzYXJ5U2xvdygpOwogfQogCitpbmxp
bmUgdm9pZCBIZWFwOjp3cml0ZUJhcnJpZXJPcGFxdWVSb290KHZvaWQqIHJvb3QpCit7CisgICAg
aWYgKG11dGF0b3JTaG91bGRCZUZlbmNlZCgpKQorICAgICAgICB3cml0ZUJhcnJpZXJPcGFxdWVS
b290U2xvdyhyb290KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAyMDk2NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxMjUgQEAKKzIwMTYtMTItMDkgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFw
cGxlLmNvbT4KKworICAgICAgICBUaGUgRE9NIHNob3VsZCBoYXZlIGFuIGFkdmFuY2luZyB3YXZl
ZnJvbnQgb3BhcXVlIHJvb3QgYmFycmllcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NzEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2UgdGhpcyB3YXMgY292ZXJlZCBi
eSBjcmFzaGluZyB0ZXN0cy4KKyAgICAgICAgCisgICAgICAgIENvbnNpZGVyIHRoZXNlIHR3byBj
YXNlczoKKyAgICAgICAgCisgICAgICAgICAgIFJlbW92YWw6CisgICAgICAgICAgIDEpIERPTSBh
dCBzdGFydDogRC0+WC0+WQorICAgICAgICAgICAyKSBNYXJrIFgsIFgtPnZpc2l0Q2hpbGRyZW4s
IGFkZE9wYXF1ZVJvb3QoRCkKKyAgICAgICAgICAgMykgcmVtb3ZlIFgKKyAgICAgICAgICAgNCkg
WSB0aGlua3MgaXQncyBub3QgcmVhY2hhYmxlIChpdHMgb3BhcXVlIHJvb3QsIFgsIGlzIG5vdCBp
biB0aGUgc2V0KS4KKyAgICAgICAgICAgCisgICAgICAgICAgIEluc2VydGlvbjoKKyAgICAgICAg
ICAgMSkgRE9NIGF0IHN0YXJ0OiBELCBYLT5ZCisgICAgICAgICAgIDIpIE1hcmsgWCwgWC0+dmlz
aXRDaGlsZHJlbiwgYWRkT3BhcXVlUm9vdChYKQorICAgICAgICAgICAzKSBpbnNlcnQgWCBpbnRv
IEQKKyAgICAgICAgICAgNCkgWSB0aGlua3MgaXQncyBub3QgcmVhY2hhYmxlIChpdHMgb3BhcXVl
IHJvb3QsIEQsIGlzIG5vdCBpbiB0aGUgc2V0KS4KKyAgICAgICAgCisgICAgICAgIFdlIGNhbiBm
aXggdGhpcyB3aXRoIHR3byBiYXJyaWVyczoKKyAgICAgICAgCisgICAgICAgICAgIFJlbW92YWw6
IGFkZCBYICh0aGUgcmVtb3ZlZCBjaGlsZCkgdG8gdGhlIG9wYXF1ZSByb290IHNldC4KKyAgICAg
ICAgICAgSW5zZXJ0aW9uOiBhZGQgRCAodGhlIGluc2VydGlvbiBwb2ludCkgdG8gdGhlIG9wYXF1
ZSByb290IHNldC4KKyAgICAgICAgCisgICAgICAgIFRoYW5rcyBSeXNvc3VrZSBmb3IgY29taW5n
IHVwIHdpdGggdGhpcyBpZGVhIQorICAgICAgICAKKyAgICAgICAgQm90aCBiYXJyaWVycyBhZHZh
bmNlIHRoZSB3YXZlZnJvbnQuIFdlIGNvdWxkIGNvbnNpZGVyIHJldHJlYXRpbmcgd2F2ZWZyb250
IGJhcnJpZXJzIGluCisgICAgICAgIHRoZSBmdXR1cmUgKHdoZXJlIHdlIGNhdXNlIHZpc2l0Q2hp
bGRyZW4gdG8gYmUgY2FsbGVkIGFnYWluIG9uIHdyYXBwZXJzIHRoYXQgYmVsb25nZWQgdG8KKyAg
ICAgICAgcm9vdHMgdGhhdCBnb3QgYWZmZWN0ZWQgYnkgaW5zZXJ0aW9uL3JlbW92YWwpIGJ1dCB0
aG9zZSB3b3VsZCBwcm9iYWJseSByZXF1aXJlIG1vcmUKKyAgICAgICAgYm9va2tlZXBpbmcuCisg
ICAgICAgIAorICAgICAgICBUbyBtYWtlIHRoaXMgYmFycmllciB2ZXJ5IGZhc3QsIHRoZSBXZWJD
b3JlIGNhY2hlcyB0aGUgSlNDIFZNJ3MgYmFycmllciBzdGF0ZSBpbgorICAgICAgICBpdHMgb3du
IGdsb2JhbCB2YXJpYWJsZSBmb3IgdmVyeSBmYXN0IGFjY2Vzcy4gVGhpcyB2YXJpYWJsZSB3aWxs
IGJlIGZhbHNlIG1vc3Qgb2YgdGhlCisgICAgICAgIHRpbWUuIEl0J3MgZmFsc2Ugd2hlbiB0aGVy
ZSBpcyBubyBWTSwgc28gdHJpZ2dlcmluZyB0aGUgYmFycmllciB3b24ndCBjYXVzZSB0aGUgVk0g
dG8gYmUKKyAgICAgICAgY3JlYXRlZC4gSXQncyBvbmx5IHRydWUgd2hlbiBHQyBpcyBydW5uaW5n
LCB3aGljaCBpcyByYXJlIGJ5IGRlc2lnbi4KKyAgICAgICAgCisgICAgICAgIFRvIG1ha2UgdGhh
dCBjYWNoaW5nIG1vcmUgc2Vuc2libGUsIEkgZmluYWxseSBnYXZlIFdlYkNvcmUgYSBjZW50cmFs
IGhlYWRlciBmb3IKKyAgICAgICAgdGhlIGNvbW1vbiBWTSAoQ29tbW9uVk0uaCkuCisKKyAgICAg
ICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1NEUFBy
b2Nlc3Nvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTRFBQcm9jZXNzb3I6OmNhbGxTY3JpcHQp
OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9Db21tb25WTS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29t
bW9uVk1TbG93KToKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlQmFycmllck9wYXF1ZVJvb3RTbG93
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9Db21tb25WTS5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OmNvbW1vblZNKToKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlQmFycmllck9wYXF1ZVJv
b3QpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjptYWluVGhyZWFkTm9ybWFsV29ybGQpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0dDQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb2xsZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdDQ29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3RTb29uKToKKyAgICAgICAgKFdl
YkNvcmU6OkdDQ29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3ROb3cpOgorICAgICAgICAoV2ViQ29y
ZTo6R0NDb250cm9sbGVyOjpnYXJiYWdlQ29sbGVjdE5vd0lmTm90RG9uZVJlY2VudGx5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdDQ29udHJvbGxlcjo6c2V0SmF2YVNjcmlwdEdhcmJhZ2VDb2xsZWN0
b3JUaW1lckVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6R0NDb250cm9sbGVyOjpkZWxldGVB
bGxDb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkdDQ29udHJvbGxlcjo6ZGVsZXRlQWxsTGlua2Vk
Q29kZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI6Omxvb2t1cE5hbWVz
cGFjZVVSSSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmFkZEltcHVyZVByb3BlcnR5KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0RPTVdpbmRvd0Jhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpm
aXJlRnJhbWVDbGVhcmVkV2F0Y2hwb2ludHNGb3JXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6
SlNET01XaW5kb3dCYXNlOjpjb21tb25WTSk6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3Mv
anMvSlNET01XaW5kb3dCYXNlLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dT
aGVsbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd1NoZWxsOjpzZXRXaW5kb3cp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5oOgorICAgICAgICAoV2ViQ29y
ZTo6cm9vdCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhY2hlZEZyYW1lRGF0YTo6U2NyaXB0Q2FjaGVk
RnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhY2hlZEZyYW1lRGF0YTo6cmVz
dG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWNoZWRGcmFtZURhdGE6OmNsZWFyKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6On5TY3JpcHRDb250cm9sbGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNyZWF0ZVdvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcmlwdENvbnRyb2xsZXI6OmdldEFsbFdvcmxkcyk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHRDb250cm9sbGVyOjpjbGVhcldpbmRvd1NoZWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlw
dENvbnRyb2xsZXI6OmNhY2hlYWJsZUJpbmRpbmdSb290T2JqZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdENvbnRyb2xsZXI6OmJpbmRpbmdSb290T2JqZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdENvbnRyb2xsZXI6OndpbmRvd1NjcmlwdE5QT2JqZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmpzT2JqZWN0Rm9yUGx1Z2luRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpjbGVhclNjcmlwdE9iamVjdHMpOgorICAg
ICAgICAqIGRvbS9Db2xsZWN0aW9uSW5kZXhDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpy
ZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZEZvckNvbGxlY3Rpb25JbmRleENhY2hlKToKKyAgICAg
ICAgKiBkb20vQ29udGFpbmVyTm9kZS5jcHA6CisgICAgICAgICogZG9tL0NvbnRhaW5lck5vZGVB
bGdvcml0aG1zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om5vdGlmeUNoaWxkTm9kZUluc2VydGVk
KToKKyAgICAgICAgKFdlYkNvcmU6Om5vdGlmeUNoaWxkTm9kZVJlbW92ZWQpOgorICAgICAgICAq
IGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2hvdWxkQnlw
YXNzTWFpbldvcmxkQ29udGVudFNlY3VyaXR5UG9saWN5KToKKyAgICAgICAgKiBkb20vTm9kZS5o
OgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6b3BhcXVlUm9vdCk6CisgICAgICAgICogZG9tL1Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6dm0pOgorICAgICAgICAqIGh0bWwvSFRNTEltYWdlTG9hZGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUxvYWRlcjo6bm90aWZ5RmluaXNoZWQpOgorICAgICAg
ICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVk
aWFFbGVtZW50OjpwYXVzZUFmdGVyRGV0YWNoZWRUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxNZWRpYUVsZW1lbnQ6OmVuc3VyZUlzb2xhdGVkV29ybGQpOgorICAgICAgICAqIGh0bWwvSFRN
TFBsdWdJbkltYWdlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwbHVnSW5JbWFnZUVs
ZW1lbnRJc29sYXRlZFdvcmxkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjp2bSk6Cisg
ICAgICAgICogaW5zcGVjdG9yL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpQYWdlU2NyaXB0RGVidWdTZXJ2ZXI6OlBhZ2VTY3JpcHREZWJ1Z1NlcnZlcik6Cisg
ICAgICAgICogcGFnZS9QZXJmb3JtYW5jZUxvZ2dpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UGVyZm9ybWFuY2VMb2dnaW5nOjptZW1vcnlVc2FnZVN0YXRpc3RpY3MpOgorICAgICAgICAoV2Vi
Q29yZTo6UGVyZm9ybWFuY2VMb2dnaW5nOjpqYXZhU2NyaXB0T2JqZWN0Q291bnRzKToKKyAgICAg
ICAgKiBwYWdlL1Jlc291cmNlVXNhZ2VUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VVc2FnZVRocmVhZDo6Y3JlYXRlVGhyZWFkSWZOZWVkZWQpOgorICAgICAgICAqIHN2Zy9n
cmFwaGljcy9TVkdJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6cmVwb3J0
QXBwcm94aW1hdGVNZW1vcnlDb3N0KToKKyAgICAgICAgKiB0ZXN0aW5nL01lbW9yeUluZm8uaDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUluZm86Ok1lbW9yeUluZm8pOgorCiAyMDE2LTEyLTEw
ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFN1cHBv
cnQgdGhlIGRlcHJlY2F0ZWQgZGljdGlvbmFyeSBjb25zdHJ1Y3RvciBmb3IgRE9NUG9pbnRSZWFk
T25seSBhbmQgRE9NUG9pbnQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMDk2
NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
MTA3NSw2ICsxMDc1LDcgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIGJpbmRpbmdzL2pzL0Nh
Y2hlZE1vZHVsZVNjcmlwdC5jcHAKICAgICBiaW5kaW5ncy9qcy9DYWNoZWRNb2R1bGVTY3JpcHRM
b2FkZXIuY3BwCiAgICAgYmluZGluZ3MvanMvQ2FsbGJhY2tGdW5jdGlvbi5jcHAKKyAgICBiaW5k
aW5ncy9qcy9Db21tb25WTS5jcHAKICAgICBiaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQuY3Bw
CiAgICAgYmluZGluZ3MvanMvRGljdGlvbmFyeS5jcHAKICAgICBiaW5kaW5ncy9qcy9HQ0NvbnRy
b2xsZXIuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1NEUFBy
b2Nlc3Nvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9TRFBQcm9jZXNzb3IuY3BwCShyZXZpc2lvbiAyMDk2NzgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM0LDYgKzM0LDcgQEAKICNpZiBFTkFCTEUoV0VCX1JUQykKICNpbmNsdWRlICJTRFBQcm9jZXNz
b3IuaCIKIAorI2luY2x1ZGUgIkNvbW1vblZNLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmgi
CkBAIC00OTUsNyArNDk2LDcgQEAgYm9vbCBTRFBQcm9jZXNzb3I6OmNhbGxTY3JpcHQoY29uc3Qg
U3RyaQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIW1faXNvbGF0ZWRXb3JsZCkK
LSAgICAgICAgbV9pc29sYXRlZFdvcmxkID0gRE9NV3JhcHBlcldvcmxkOjpjcmVhdGUoSlNET01X
aW5kb3c6OmNvbW1vblZNKCkpOworICAgICAgICBtX2lzb2xhdGVkV29ybGQgPSBET01XcmFwcGVy
V29ybGQ6OmNyZWF0ZShjb21tb25WTSgpKTsKIAogICAgIFNjcmlwdENvbnRyb2xsZXImIHNjcmlw
dENvbnRyb2xsZXIgPSBkb2N1bWVudC0+ZnJhbWUoKS0+c2NyaXB0KCk7CiAgICAgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
c2NyaXB0Q29udHJvbGxlci5nbG9iYWxPYmplY3QoKm1faXNvbGF0ZWRXb3JsZCkpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1Rp
bWVQbHVnaW5SZXBsYWNlbWVudC5tbQkocmV2aXNpb24gMjA5Njc4KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbXBvcnQgIlF1aWNrVGltZVBsdWdpblJlcGxh
Y2VtZW50LmgiCiAKKyNpbXBvcnQgIkNvbW1vblZNLmgiCiAjaW1wb3J0ICJFdmVudC5oIgogI2lt
cG9ydCAiSFRNTFBsdWdJbkVsZW1lbnQuaCIKICNpbXBvcnQgIkhUTUxWaWRlb0VsZW1lbnQuaCIK
QEAgLTE0OCw3ICsxNDksNyBAQCBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gUXVpY2tUaW1lUGx1
Z2luCiAKIERPTVdyYXBwZXJXb3JsZCYgUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6Omlzb2xh
dGVkV29ybGQoKQogewotICAgIHN0YXRpYyBET01XcmFwcGVyV29ybGQmIGlzb2xhdGVkV29ybGQg
PSBET01XcmFwcGVyV29ybGQ6OmNyZWF0ZShKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSkubGVha1Jl
ZigpOworICAgIHN0YXRpYyBET01XcmFwcGVyV29ybGQmIGlzb2xhdGVkV29ybGQgPSBET01XcmFw
cGVyV29ybGQ6OmNyZWF0ZShjb21tb25WTSgpKS5sZWFrUmVmKCk7CiAgICAgcmV0dXJuIGlzb2xh
dGVkV29ybGQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwOTY3OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDk2
LDYgKzQ5Niw4IEBACiAJCTBGNUUyMDA2MThFNzcxRkMwMDNFQzNFNSAvKiBQbGF0Zm9ybUNBQW5p
bWF0aW9uQ29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNUUyMDA1MThFNzcxRkMwMDNFQzNFNSAvKiBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2Eu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjYw
NUFFQzE1Rjk0ODQ4MDA0REYwQzAgLyogU2Nyb2xsaW5nQ29uc3RyYWludHMuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MDVBRUExNUY5NDg0ODAw
NERGMEMwIC8qIFNjcm9sbGluZ0NvbnN0cmFpbnRzLmNwcCAqLzsgfTsKIAkJMEY2MDVBRUQxNUY5
NDg0ODAwNERGMEMwIC8qIFNjcm9sbGluZ0NvbnN0cmFpbnRzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYwNUFFQjE1Rjk0ODQ4MDA0REYwQzAgLyog
U2Nyb2xsaW5nQ29uc3RyYWludHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkwRjYwRjMyQjFERkJCMTA3MDA0MTZENkMgLyogQ29tbW9uVk0uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjBGMzJBMURG
QkIxMDQwMDQxNkQ2QyAvKiBDb21tb25WTS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTBGNjBGMzJDMURGQkIxMEIwMDQxNkQ2QyAvKiBDb21tb25W
TS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYw
RjMyOTFERkJCMTA0MDA0MTZENkMgLyogQ29tbW9uVk0uY3BwICovOyB9OwogCQkwRjYzODNERDE4
NjE1QjI5MDAzRTVEQjUgLyogVGhyZWFkZWRTY3JvbGxpbmdUcmVlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjM4M0RCMTg2MTVCMjkwMDNFNURC
NSAvKiBUaHJlYWRlZFNjcm9sbGluZ1RyZWUuY3BwICovOyB9OwogCQkwRjYzODNERTE4NjE1QjI5
MDAzRTVEQjUgLyogVGhyZWFkZWRTY3JvbGxpbmdUcmVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYzODNEQzE4NjE1QjI5MDAzRTVEQjUgLyogVGhy
ZWFkZWRTY3JvbGxpbmdUcmVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEY2QTEyQkQxQTAwOTIzNzAwQzZERTcyIC8qIERlYnVnUGFnZU92ZXJs
YXlzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NkExMkJCMUEwMDkyMzcwMEM2REU3MiAvKiBEZWJ1Z1BhZ2VPdmVybGF5cy5jcHAgKi87IH07CkBA
IC03NDkwLDYgKzc0OTIsOCBAQAogCQkwRjVFMjAwNTE4RTc3MUZDMDAzRUMzRTUgLyogUGxhdGZv
cm1DQUFuaW1hdGlvbkNvY29hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBs
YXRmb3JtQ0FBbmltYXRpb25Db2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjYwNUFFQTE1Rjk0ODQ4MDA0REYwQzAgLyogU2Nyb2xsaW5nQ29uc3RyYWludHMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsaW5nQ29uc3RyYWludHMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjYwNUFFQjE1Rjk0ODQ4MDA0REYwQzAg
LyogU2Nyb2xsaW5nQ29uc3RyYWludHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU2Nyb2xsaW5nQ29uc3RyYWludHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEY2MEYzMjkxREZCQjEwNDAwNDE2RDZDIC8qIENvbW1vblZNLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbW1vblZNLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEY2MEYzMkExREZCQjEwNDAwNDE2RDZDIC8qIENvbW1vblZNLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbW1vblZNLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNjM4M0RCMTg2MTVCMjkwMDNFNURCNSAvKiBUaHJlYWRlZFNjcm9sbGluZ1Ry
ZWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkZWRTY3Jv
bGxpbmdUcmVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MzgzREMxODYx
NUIyOTAwM0U1REI1IC8qIFRocmVhZGVkU2Nyb2xsaW5nVHJlZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBUaHJlYWRlZFNjcm9sbGluZ1RyZWUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY2QTEyQkIxQTAwOTIzNzAwQzZERTcyIC8qIERlYnVnUGFnZU92ZXJs
YXlzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlYnVnUGFnZU92
ZXJsYXlzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxOTE0LDYgKzIxOTE4
LDggQEAKIAkJCQlFMzA3REVDODFEODFFNDQ4MDAxNDFDQUYgLyogQ2FjaGVkTW9kdWxlU2NyaXB0
TG9hZGVyQ2xpZW50LmggKi8sCiAJCQkJQkNENTMzNjMwRUQ2ODQ4OTAwODg3NDY4IC8qIENhY2hl
ZFNjcmlwdFNvdXJjZVByb3ZpZGVyLmggKi8sCiAJCQkJOTNGOEIzMDYwQTMwMEZFQTAwRjYxQUI4
IC8qIENvZGVHZW5lcmF0b3JKUy5wbSAqLywKKwkJCQkwRjYwRjMyOTFERkJCMTA0MDA0MTZENkMg
LyogQ29tbW9uVk0uY3BwICovLAorCQkJCTBGNjBGMzJBMURGQkIxMDQwMDQxNkQ2QyAvKiBDb21t
b25WTS5oICovLAogCQkJCTMxMkQ2N0IwMTUzNTY5MUYwMDU2M0QwRCAvKiBEaWN0aW9uYXJ5LmNw
cCAqLywKIAkJCQkzMTYwMjNFRjE1MzJDNDBDMDBENTBGRjQgLyogRGljdGlvbmFyeS5oICovLAog
CQkJCUI1NjU3NkU3MTdEQTk0RTIwMEE1NkJEQyAvKiBET01Db25zdHJ1Y3RvcldpdGhEb2N1bWVu
dC5oICovLApAQCAtMjc1MjEsNiArMjc1MjcsNyBAQAogCQkJCUZENDVBOTVCMTc1RDQxRUUwMEMy
MUVDOCAvKiBTaGFwZUludGVydmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDQ1QTk1MjE3NUQz
RjNFMDBDMjFFQzggLyogU2hhcGVPdXRzaWRlSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQx
QUYxNTAxNjU2RjE1MTAwQzZENEY3IC8qIFNoYXBlVmFsdWUuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGNjBGMzJCMURGQkIxMDcwMDQxNkQ2QyAvKiBDb21tb25WTS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMUE0QTk1NEUwQjRFRENDQjAwMkQ4QzNDIC8qIFNoYXJlZEJ1ZmZlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTdCMUYwMkYxM0IwMjVEMjAwRjUxMDNGIC8qIFNoYXJlZEJ1ZmZlckNodW5rUmVh
ZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOUVBMzA5OUVCNzhDMDA1NkU1ODEgLyogU2hh
cmVkVGltZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzE2MjUsNiArMzE2MzIsNyBAQAogCQkJCUEx
NDgzMkIzMTg3RjYyOTEwMERBNjNBNiAvKiBXQUtDbGlwVmlldy5tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTE0ODMyQjUxODdGNjJGQzAwREE2M0E2IC8qIFdBS1Jlc3BvbmRlci5tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTE0ODMyQjcxODdGNjM2QzAwREE2M0E2IC8qIFdBS1Njcm9sbFZpZXcubW0gaW4g
U291cmNlcyAqLywKKwkJCQkwRjYwRjMyQzFERkJCMTBCMDA0MTZENkMgLyogQ29tbW9uVk0uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTE0ODMyQjkxODdGNjNENTAwREE2M0E2IC8qIFdBS1ZpZXcu
bW0gaW4gU291cmNlcyAqLywKIAkJCQlBMTQ4MzJCQzE4N0Y2NDhFMDBEQTYzQTYgLyogV0FLV2lu
ZG93Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQ3RjI5OTExM0Q0QzBDQjAwQUQ5NTM1IC8qIFdh
dmVTaGFwZXJEU1BLZXJuZWwuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9Db21tb25WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvQ29tbW9uVk0uY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0NvbW1vblZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDczIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJDb21tb25WTS5oIgorCisjaW5jbHVkZSAiU2NyaXB0Q29u
dHJvbGxlci5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiV2ViQ29yZUpTQ2xp
ZW50RGF0YS5oIgorI2luY2x1ZGUgPGhlYXAvSGVhcElubGluZXMuaD4KKyNpbmNsdWRlIDxydW50
aW1lL1ZNLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKwordXNpbmcgbmFtZXNwYWNl
IEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitWTSogZ19jb21tb25WTU9yTnVsbDsKK2Jv
b2wgZ19vcGFxdWVSb290V3JpdGVCYXJyaWVyRW5hYmxlZDsKKworVk0mIGNvbW1vblZNU2xvdygp
Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoIWdfY29tbW9uVk1P
ck51bGwpOworICAgIAorICAgIFNjcmlwdENvbnRyb2xsZXI6OmluaXRpYWxpemVUaHJlYWRpbmco
KTsKKyAgICBnX2NvbW1vblZNT3JOdWxsID0gJlZNOjpjcmVhdGVMZWFrZWQoTGFyZ2VIZWFwKS5s
ZWFrUmVmKCk7CisgICAgZ19jb21tb25WTU9yTnVsbC0+aGVhcC5hY3F1aXJlQWNjZXNzKCk7IC8v
IEF0IGFueSB0aW1lLCB3ZSBtYXkgZG8gdGhpbmdzIHRoYXQgYWZmZWN0IHRoZSBHQy4KKyNpZiAh
UExBVEZPUk0oSU9TKQorICAgIGdfY29tbW9uVk1Pck51bGwtPnNldEV4Y2x1c2l2ZVRocmVhZChz
dGQ6OnRoaXNfdGhyZWFkOjpnZXRfaWQoKSk7CisjZWxzZQorICAgIGdfY29tbW9uVk1Pck51bGwt
PmhlYXAuc2V0UnVuTG9vcChXZWJUaHJlYWRSdW5Mb29wKCkpOworICAgIGdfY29tbW9uVk1Pck51
bGwtPmhlYXAubWFjaGluZVRocmVhZHMoKS5hZGRDdXJyZW50VGhyZWFkKCk7CisjZW5kaWYKKyAg
ICAKKyAgICBnX2NvbW1vblZNT3JOdWxsLT5zZXRHbG9iYWxDb25zdFJlZGVjbGFyYXRpb25TaG91
bGRUaHJvdyhTZXR0aW5nczo6Z2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9uU2hvdWxkVGhyb3coKSk7
CisgICAgZ19jb21tb25WTU9yTnVsbC0+aGVhcC5hZGRNdXRhdG9yU2hvdWxkQmVGZW5jZWRDYWNo
ZShnX29wYXF1ZVJvb3RXcml0ZUJhcnJpZXJFbmFibGVkKTsKKyAgICAKKyAgICBpbml0Tm9ybWFs
V29ybGRDbGllbnREYXRhKGdfY29tbW9uVk1Pck51bGwpOworICAgIAorICAgIHJldHVybiAqZ19j
b21tb25WTU9yTnVsbDsKK30KKwordm9pZCB3cml0ZUJhcnJpZXJPcGFxdWVSb290U2xvdyh2b2lk
KiByb290KQoreworICAgIGlmIChWTSogdm0gPSBnX2NvbW1vblZNT3JOdWxsKQorICAgICAgICB2
bS0+aGVhcC53cml0ZUJhcnJpZXJPcGFxdWVSb290KHJvb3QpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0NvbW1vblZNLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQ29tbW9uVk0uaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Db21tb25WTS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBKU0MgeworY2xhc3Mg
Vk07Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV0VCQ09SRV9FWFBPUlQgZXh0ZXJuIEpT
Qzo6Vk0qIGdfY29tbW9uVk1Pck51bGw7CitXRUJDT1JFX0VYUE9SVCBleHRlcm4gYm9vbCBnX29w
YXF1ZVJvb3RXcml0ZUJhcnJpZXJFbmFibGVkOworCitXRUJDT1JFX0VYUE9SVCBKU0M6OlZNJiBj
b21tb25WTVNsb3coKTsKK1dFQkNPUkVfRVhQT1JUIHZvaWQgd3JpdGVCYXJyaWVyT3BhcXVlUm9v
dFNsb3codm9pZCopOworCitpbmxpbmUgSlNDOjpWTSYgY29tbW9uVk0oKQoreworICAgIGlmIChK
U0M6OlZNKiByZXN1bHQgPSBnX2NvbW1vblZNT3JOdWxsKQorICAgICAgICByZXR1cm4gKnJlc3Vs
dDsKKyAgICByZXR1cm4gY29tbW9uVk1TbG93KCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1
bmM+Cit2b2lkIHdyaXRlQmFycmllck9wYXF1ZVJvb3QoY29uc3QgRnVuYyYgcm9vdFRodW5rKQor
eworICAgIGlmIChnX29wYXF1ZVJvb3RXcml0ZUJhcnJpZXJFbmFibGVkKQorICAgICAgICB3cml0
ZUJhcnJpZXJPcGFxdWVSb290U2xvdyhyb290VGh1bmsoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NV3JhcHBlcldv
cmxkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01XcmFw
cGVyV29ybGQuY3BwCShyZXZpc2lvbiAyMDk2NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9ET01XcmFwcGVyV29ybGQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRE9NV3JhcHBlcldvcmxkLmgiCiAKKyNp
bmNsdWRlICJDb21tb25WTS5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCiAjaW5jbHVkZSAi
U2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKQEAg
LTY5LDcgKzcwLDcgQEAgRE9NV3JhcHBlcldvcmxkJiBub3JtYWxXb3JsZChKU0M6OlZNJiB2bQog
RE9NV3JhcHBlcldvcmxkJiBtYWluVGhyZWFkTm9ybWFsV29ybGQoKQogewogICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7Ci0gICAgc3RhdGljIERPTVdyYXBwZXJXb3JsZCYgY2FjaGVkTm9ybWFs
V29ybGQgPSBub3JtYWxXb3JsZChKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7CisgICAgc3RhdGlj
IERPTVdyYXBwZXJXb3JsZCYgY2FjaGVkTm9ybWFsV29ybGQgPSBub3JtYWxXb3JsZChjb21tb25W
TSgpKTsKICAgICByZXR1cm4gY2FjaGVkTm9ybWFsV29ybGQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjA5Njc4KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdD
Q29udHJvbGxlci5oIgogCi0jaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKKyNpbmNsdWRlICJDb21t
b25WTS5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvVk0uaD4KICNpbmNsdWRlIDxydW50aW1lL0pTTG9j
ay5oPgogI2luY2x1ZGUgPGhlYXAvSGVhcC5oPgpAQCAtNDAsOCArNDAsOCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHN0YXRpYyB2b2lkIGNvbGxlY3Qodm9pZCopCiB7Ci0gICAgSlNMb2NrSG9s
ZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOwotICAgIEpTRE9NV2luZG93Ojpjb21t
b25WTSgpLmhlYXAuY29sbGVjdEFsbEdhcmJhZ2UoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhj
b21tb25WTSgpKTsKKyAgICBjb21tb25WTSgpLmhlYXAuY29sbGVjdEFsbEdhcmJhZ2UoKTsKIH0K
IAogR0NDb250cm9sbGVyJiBHQ0NvbnRyb2xsZXI6OnNpbmdsZXRvbigpCkBAIC02MSw4ICs2MSw4
IEBAIHZvaWQgR0NDb250cm9sbGVyOjpnYXJiYWdlQ29sbGVjdFNvb24oKQogICAgIC8vIG9mIHRo
ZSBnYXJiYWdlIGNvbGxlY3RvciB0aW1lcnMgaW4gSmF2YVNjcmlwdENvcmUuIFdlIHdvdWxkbid0
IG5lZWQgdGhpcyBpZiBKYXZhU2NyaXB0Q29yZQogICAgIC8vIHVzZWQgYSB0aW1lciBpbXBsZW1l
bnRhdGlvbiBmcm9tIFdURiBsaWtlIFJ1bkxvb3A6OlRpbWVyLgogI2lmIFVTRShDRikgfHwgVVNF
KEdMSUIpCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOwot
ICAgIEpTRE9NV2luZG93Ojpjb21tb25WTSgpLmhlYXAucmVwb3J0QWJhbmRvbmVkT2JqZWN0R3Jh
cGgoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhjb21tb25WTSgpKTsKKyAgICBjb21tb25WTSgp
LmhlYXAucmVwb3J0QWJhbmRvbmVkT2JqZWN0R3JhcGgoKTsKICNlbHNlCiAgICAgZ2FyYmFnZUNv
bGxlY3RPbk5leHRSdW5Mb29wKCk7CiAjZW5kaWYKQEAgLTgxLDkgKzgxLDkgQEAgdm9pZCBHQ0Nv
bnRyb2xsZXI6OmdjVGltZXJGaXJlZCgpCiAKIHZvaWQgR0NDb250cm9sbGVyOjpnYXJiYWdlQ29s
bGVjdE5vdygpCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZN
KCkpOwotICAgIGlmICghSlNET01XaW5kb3c6OmNvbW1vblZNKCkuaGVhcC5pc0N1cnJlbnRUaHJl
YWRCdXN5KCkpIHsKLSAgICAgICAgSlNET01XaW5kb3c6OmNvbW1vblZNKCkuaGVhcC5jb2xsZWN0
QWxsR2FyYmFnZSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGNvbW1vblZNKCkpOworICAgIGlm
ICghY29tbW9uVk0oKS5oZWFwLmlzQ3VycmVudFRocmVhZEJ1c3koKSkgeworICAgICAgICBjb21t
b25WTSgpLmhlYXAuY29sbGVjdEFsbEdhcmJhZ2UoKTsKICAgICAgICAgV1RGOjpyZWxlYXNlRmFz
dE1hbGxvY0ZyZWVNZW1vcnkoKTsKICAgICB9CiB9CkBAIC05MSw5ICs5MSw5IEBAIHZvaWQgR0ND
b250cm9sbGVyOjpnYXJiYWdlQ29sbGVjdE5vdygpCiB2b2lkIEdDQ29udHJvbGxlcjo6Z2FyYmFn
ZUNvbGxlY3ROb3dJZk5vdERvbmVSZWNlbnRseSgpCiB7CiAjaWYgVVNFKENGKSB8fCBVU0UoR0xJ
QikKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7Ci0gICAg
aWYgKCFKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS5oZWFwLmlzQ3VycmVudFRocmVhZEJ1c3koKSkK
LSAgICAgICAgSlNET01XaW5kb3c6OmNvbW1vblZNKCkuaGVhcC5jb2xsZWN0QWxsR2FyYmFnZUlm
Tm90RG9uZVJlY2VudGx5KCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7Cisg
ICAgaWYgKCFjb21tb25WTSgpLmhlYXAuaXNDdXJyZW50VGhyZWFkQnVzeSgpKQorICAgICAgICBj
b21tb25WTSgpLmhlYXAuY29sbGVjdEFsbEdhcmJhZ2VJZk5vdERvbmVSZWNlbnRseSgpOwogI2Vs
c2UKICAgICBnYXJiYWdlQ29sbGVjdFNvb24oKTsKICNlbmRpZgpAQCAtMTEzLDE5ICsxMTMsMTkg
QEAgdm9pZCBHQ0NvbnRyb2xsZXI6OmdhcmJhZ2VDb2xsZWN0T25BbHRlcgogCiB2b2lkIEdDQ29u
dHJvbGxlcjo6c2V0SmF2YVNjcmlwdEdhcmJhZ2VDb2xsZWN0b3JUaW1lckVuYWJsZWQoYm9vbCBl
bmFibGUpCiB7Ci0gICAgSlNET01XaW5kb3c6OmNvbW1vblZNKCkuaGVhcC5zZXRHYXJiYWdlQ29s
bGVjdGlvblRpbWVyRW5hYmxlZChlbmFibGUpOworICAgIGNvbW1vblZNKCkuaGVhcC5zZXRHYXJi
YWdlQ29sbGVjdGlvblRpbWVyRW5hYmxlZChlbmFibGUpOwogfQogCiB2b2lkIEdDQ29udHJvbGxl
cjo6ZGVsZXRlQWxsQ29kZShEZWxldGVBbGxDb2RlRWZmb3J0IGVmZm9ydCkKIHsKLSAgICBKU0xv
Y2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7Ci0gICAgSlNET01XaW5kb3c6
OmNvbW1vblZNKCkuZGVsZXRlQWxsQ29kZShlZmZvcnQpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
KGNvbW1vblZNKCkpOworICAgIGNvbW1vblZNKCkuZGVsZXRlQWxsQ29kZShlZmZvcnQpOwogfQog
CiB2b2lkIEdDQ29udHJvbGxlcjo6ZGVsZXRlQWxsTGlua2VkQ29kZShEZWxldGVBbGxDb2RlRWZm
b3J0IGVmZm9ydCkKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9u
Vk0oKSk7Ci0gICAgSlNET01XaW5kb3c6OmNvbW1vblZNKCkuZGVsZXRlQWxsTGlua2VkQ29kZShl
ZmZvcnQpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGNvbW1vblZNKCkpOworICAgIGNvbW1vblZN
KCkuZGVsZXRlQWxsTGlua2VkQ29kZShlZmZvcnQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNv
bHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0
b21YUGF0aE5TUmVzb2x2ZXIuY3BwCShyZXZpc2lvbiAyMDk2NzgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU0N1c3Rv
bVhQYXRoTlNSZXNvbHZlci5oIgogCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJE
b2N1bWVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJGcmFtZS5o
IgpAQCAtNjksNyArNzAsNyBAQCBTdHJpbmcgSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI6Omxvb2t1
cE5hCiB7CiAgICAgQVNTRVJUKG1fY3VzdG9tUmVzb2x2ZXIpOwogCi0gICAgSlNMb2NrSG9sZGVy
IGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhjb21tb25WTSgpKTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZ2xvYmFsT2JqZWN0LT5n
bG9iYWxFeGVjKCk7CiAgICAgICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01CaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUJpbmRpbmcuY3BwCShyZXZpc2lvbiAyMDk2NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3
IEBACiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAKICNpbmNsdWRlICJDYWNoZWRTY3JpcHQu
aCIKKyNpbmNsdWRlICJDb21tb25WTS5oIgogI2luY2x1ZGUgIkRPTUNvbnN0cnVjdG9yV2l0aERv
Y3VtZW50LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkV4Y2VwdGlv
bkNvZGVEZXNjcmlwdGlvbi5oIgpAQCAtNjEsNyArNjIsNyBAQCBTVEFUSUNfQVNTRVJUX0lTX1RS
SVZJQUxMWV9ERVNUUlVDVElCTEUoCiAKIHZvaWQgYWRkSW1wdXJlUHJvcGVydHkoY29uc3QgQXRv
bWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgSlNET01XaW5kb3c6OmNvbW1vblZNKCku
YWRkSW1wdXJlUHJvcGVydHkocHJvcGVydHlOYW1lKTsKKyAgICBjb21tb25WTSgpLmFkZEltcHVy
ZVByb3BlcnR5KHByb3BlcnR5TmFtZSk7CiB9CiAKIEpTVmFsdWUganNPd25lZFN0cmluZ09yTnVs
bChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcykKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAkocmV2aXNpb24gMjA5Njc4KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVkZSAiQWN0aXZlRE9NQ2FsbGJhY2tN
aWNyb3Rhc2suaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRlICJDb21tb25WTS5oIgog
I2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSW5z
cGVjdG9yQ29udHJvbGxlci5oIgpAQCAtMjQ1LDMwICsyNDYsNiBAQCBKU0RPTVdpbmRvd1NoZWxs
KiBKU0RPTVdpbmRvd0Jhc2U6OnNoZWxsCiAgICAgcmV0dXJuIG1fc2hlbGw7CiB9CiAKLVZNJiBK
U0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwotCi0gICAgc3RhdGljIFZNKiB2bSA9IG51bGxwdHI7Ci0gICAgaWYgKCF2bSkgewotICAgICAg
ICBTY3JpcHRDb250cm9sbGVyOjppbml0aWFsaXplVGhyZWFkaW5nKCk7Ci0gICAgICAgIHZtID0g
JlZNOjpjcmVhdGVMZWFrZWQoTGFyZ2VIZWFwKS5sZWFrUmVmKCk7Ci0gICAgICAgIHZtLT5oZWFw
LmFjcXVpcmVBY2Nlc3MoKTsgLy8gQXQgYW55IHRpbWUsIHdlIG1heSBkbyB0aGluZ3MgdGhhdCBh
ZmZlY3QgdGhlIEdDLgotI2lmICFQTEFURk9STShJT1MpCi0gICAgICAgIHZtLT5zZXRFeGNsdXNp
dmVUaHJlYWQoc3RkOjp0aGlzX3RocmVhZDo6Z2V0X2lkKCkpOwotI2Vsc2UKLSAgICAgICAgdm0t
PmhlYXAuc2V0UnVuTG9vcChXZWJUaHJlYWRSdW5Mb29wKCkpOwotICAgICAgICB2bS0+aGVhcC5t
YWNoaW5lVGhyZWFkcygpLmFkZEN1cnJlbnRUaHJlYWQoKTsKLSNlbmRpZgotCi0gICAgICAgIHZt
LT5zZXRHbG9iYWxDb25zdFJlZGVjbGFyYXRpb25TaG91bGRUaHJvdyhTZXR0aW5nczo6Z2xvYmFs
Q29uc3RSZWRlY2xhcmF0aW9uU2hvdWxkVGhyb3coKSk7Ci0KLSAgICAgICAgaW5pdE5vcm1hbFdv
cmxkQ2xpZW50RGF0YSh2bSk7Ci0gICAgfQotCi0gICAgcmV0dXJuICp2bTsKLX0KLQogLy8gSlNE
T01HbG9iYWxPYmplY3QqIGlzIGlnbm9yZWQsIGFjY2Vzc2luZyBhIHdpbmRvdyBpbiBhbnkgY29u
dGV4dCB3aWxsCiAvLyB1c2UgdGhhdCBET01XaW5kb3cncyBwcm90b3R5cGUgY2hhaW4uCiBKU1Zh
bHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCosIERPTVdpbmRvdyYg
ZG9tV2luZG93KQpAQCAtMzA5LDcgKzI4Niw3IEBAIEpTRE9NV2luZG93KiB0b0pTRE9NV2luZG93
KEpTVmFsdWUgdmFsdWUKIAogdm9pZCBKU0RPTVdpbmRvd0Jhc2U6OmZpcmVGcmFtZUNsZWFyZWRX
YXRjaHBvaW50c0ZvcldpbmRvdyhET01XaW5kb3cqIHdpbmRvdykKIHsKLSAgICBKU0M6OlZNJiB2
bSA9IEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKTsKKyAgICBKU0M6OlZNJiB2bSA9IGNvbW1v
blZNKCk7CiAgICAgSlNWTUNsaWVudERhdGEqIGNsaWVudERhdGEgPSBzdGF0aWNfY2FzdDxKU1ZN
Q2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwogICAgIFZlY3RvcjxSZWY8RE9NV3JhcHBlcldv
cmxkPj4gd3JhcHBlcldvcmxkczsKICAgICBjbGllbnREYXRhLT5nZXRBbGxXb3JsZHMod3JhcHBl
cldvcmxkcyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jh
c2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRv
d0Jhc2UuaAkocmV2aXNpb24gMjA5Njc4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01XaW5kb3dCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDYgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAgICAgICAgIEpTRE9NV2luZG93U2hlbGwqIHNoZWxsKCkgY29uc3Q7
CiAKLSAgICAgICAgc3RhdGljIEpTQzo6Vk0mIGNvbW1vblZNKCk7CiAgICAgICAgIHN0YXRpYyB2
b2lkIGZpcmVGcmFtZUNsZWFyZWRXYXRjaHBvaW50c0ZvcldpbmRvdyhET01XaW5kb3cqKTsKICAg
ICAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dT
aGVsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01X
aW5kb3dTaGVsbC5jcHAJKHJldmlzaW9uIDIwOTY3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NV2luZG93U2hlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNET01XaW5kb3dTaGVsbC5oIgog
CisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkdD
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCkBAIC03OSw3ICs4MCw3IEBA
IHZvaWQgSlNET01XaW5kb3dTaGVsbDo6c2V0V2luZG93KFJlZlB0cjwKICAgICAvLyB3aGVuIHdl
IGFsbG9jYXRlIHRoZSBnbG9iYWwgb2JqZWN0LiAoT25jZSB0aGUgZ2xvYmFsIG9iamVjdCBpcyBm
dWxseQogICAgIC8vIGNvbnN0cnVjdGVkLCBpdCBjYW4gbWFyayBpdHMgb3duIHByb3RvdHlwZS4p
CiAgICAgCi0gICAgVk0mIHZtID0gSlNET01XaW5kb3c6OmNvbW1vblZNKCk7CisgICAgVk0mIHZt
ID0gY29tbW9uVk0oKTsKICAgICBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSA9IEpTRE9N
V2luZG93UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIDAsIGpzTnVsbCgpKTsKICAgICBT
dHJvbmc8SlNET01XaW5kb3dQcm90b3R5cGU+IHByb3RvdHlwZSh2bSwgSlNET01XaW5kb3dQcm90
b3R5cGU6OmNyZWF0ZSh2bSwgMCwgcHJvdG90eXBlU3RydWN0dXJlKSk7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5oCShyZXZpc2lvbiAyMDk2NzgpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uaAkod29ya2luZyBjb3B5
KQpAQCAtNjUsMTIgKzY1LDcgQEAgaW5saW5lIHZvaWQgd2lsbENyZWF0ZVBvc3NpYmx5T3JwaGFu
ZWRUcgogCiBpbmxpbmUgdm9pZCogcm9vdChOb2RlKiBub2RlKQogewotICAgIGlmIChub2RlLT5p
bkRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiAmbm9kZS0+ZG9jdW1lbnQoKTsKLQotICAgIHdo
aWxlIChub2RlLT5wYXJlbnRPclNoYWRvd0hvc3ROb2RlKCkpCi0gICAgICAgIG5vZGUgPSBub2Rl
LT5wYXJlbnRPclNoYWRvd0hvc3ROb2RlKCk7Ci0gICAgcmV0dXJuIG5vZGU7CisgICAgcmV0dXJu
IG5vZGUtPm9wYXF1ZVJvb3QoKTsKIH0KIAogaW5saW5lIHZvaWQqIHJvb3QoTm9kZSYgbm9kZSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhY2hlZEZyYW1lRGF0YS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FjaGVk
RnJhbWVEYXRhLmNwcAkocmV2aXNpb24gMjA5Njc4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiAr
MzIsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNjcmlwdENhY2hlZEZyYW1l
RGF0YS5oIgogCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgog
I2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiR0NDb250cm9sbGVyLmgiCkBAIC00OSw3ICs1
MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjpTY3Jp
cHRDYWNoZWRGcmFtZURhdGEoRnJhbWUmIGZyYW1lKQogewotICAgIEpTTG9ja0hvbGRlciBsb2Nr
KEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soY29t
bW9uVk0oKSk7CiAKICAgICBTY3JpcHRDb250cm9sbGVyJiBzY3JpcHRDb250cm9sbGVyID0gZnJh
bWUuc2NyaXB0KCk7CiAgICAgVmVjdG9yPEpTQzo6U3Ryb25nPEpTRE9NV2luZG93U2hlbGw+PiB3
aW5kb3dTaGVsbHMgPSBzY3JpcHRDb250cm9sbGVyLndpbmRvd1NoZWxscygpOwpAQCAtNzEsNyAr
NzIsNyBAQCBTY3JpcHRDYWNoZWRGcmFtZURhdGE6On5TY3JpcHRDYWNoZWRGcmFtCiAKIHZvaWQg
U2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjpyZXN0b3JlKEZyYW1lJiBmcmFtZSkKIHsKLSAgICBKU0xv
Y2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgIEpTTG9ja0hv
bGRlciBsb2NrKGNvbW1vblZNKCkpOwogCiAgICAgUGFnZSogcGFnZSA9IGZyYW1lLnBhZ2UoKTsK
ICAgICBTY3JpcHRDb250cm9sbGVyJiBzY3JpcHRDb250cm9sbGVyID0gZnJhbWUuc2NyaXB0KCk7
CkBAIC0xMDYsNyArMTA3LDcgQEAgdm9pZCBTY3JpcHRDYWNoZWRGcmFtZURhdGE6OmNsZWFyKCkK
ICAgICBpZiAobV93aW5kb3dzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSlNM
b2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9jayhjb21tb25WTSgpKTsKICAgICBtX3dpbmRvd3MuY2xlYXIoKTsKICAgICBHQ0Nv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLmdhcmJhZ2VDb2xsZWN0U29vbigpOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAJKHJldmlz
aW9uIDIwOTY3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xs
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlICJCcmlk
Z2VKU0MuaCIKICNpbmNsdWRlICJDYWNoZWRNb2R1bGVTY3JpcHQuaCIKKyNpbmNsdWRlICJDb21t
b25WTS5oIgogI2luY2x1ZGUgIkNvbnRlbnRTZWN1cml0eVBvbGljeS5oIgogI2luY2x1ZGUgIkRv
Y3VtZW50TG9hZGVyLmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKQEAgLTEwNSw3ICsxMDYsNyBAQCBT
Y3JpcHRDb250cm9sbGVyOjp+U2NyaXB0Q29udHJvbGxlcigpCiAgICAgZGlzY29ubmVjdFBsYXRm
b3JtU2NyaXB0T2JqZWN0cygpOwogCiAgICAgaWYgKG1fY2FjaGVhYmxlQmluZGluZ1Jvb3RPYmpl
Y3QpIHsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21tb25W
TSgpKTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7CiAgICAgICAgIG1f
Y2FjaGVhYmxlQmluZGluZ1Jvb3RPYmplY3QtPmludmFsaWRhdGUoKTsKICAgICAgICAgbV9jYWNo
ZWFibGVCaW5kaW5nUm9vdE9iamVjdCA9IG51bGxwdHI7CiAgICAgfQpAQCAtMjcxLDcgKzI3Miw3
IEBAIEpTQzo6SlNWYWx1ZSBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZU0KIAogUmVmPERPTVdy
YXBwZXJXb3JsZD4gU2NyaXB0Q29udHJvbGxlcjo6Y3JlYXRlV29ybGQoKQogewotICAgIHJldHVy
biBET01XcmFwcGVyV29ybGQ6OmNyZWF0ZShKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7CisgICAg
cmV0dXJuIERPTVdyYXBwZXJXb3JsZDo6Y3JlYXRlKGNvbW1vblZNKCkpOwogfQogCiBWZWN0b3I8
SlNDOjpTdHJvbmc8SlNET01XaW5kb3dTaGVsbD4+IFNjcmlwdENvbnRyb2xsZXI6OndpbmRvd1No
ZWxscygpCkBAIC0yODMsNyArMjg0LDcgQEAgVmVjdG9yPEpTQzo6U3Ryb25nPEpTRE9NV2luZG93
U2hlbGw+PiBTYwogCiB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmdldEFsbFdvcmxkcyhWZWN0b3I8
UmVmPERPTVdyYXBwZXJXb3JsZD4+JiB3b3JsZHMpCiB7Ci0gICAgc3RhdGljX2Nhc3Q8SlNWTUNs
aWVudERhdGEqPihKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS5jbGllbnREYXRhKS0+Z2V0QWxsV29y
bGRzKHdvcmxkcyk7CisgICAgc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPihjb21tb25WTSgp
LmNsaWVudERhdGEpLT5nZXRBbGxXb3JsZHMod29ybGRzKTsKIH0KIAogdm9pZCBTY3JpcHRDb250
cm9sbGVyOjpjbGVhcldpbmRvd1NoZWxsKERPTVdpbmRvdyogbmV3RE9NV2luZG93LCBib29sIGdv
aW5nSW50b1BhZ2VDYWNoZSkKQEAgLTI5MSw3ICsyOTIsNyBAQCB2b2lkIFNjcmlwdENvbnRyb2xs
ZXI6OmNsZWFyV2luZG93U2hlbGwoCiAgICAgaWYgKG1fd2luZG93U2hlbGxzLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNl
Ojpjb21tb25WTSgpKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhjb21tb25WTSgpKTsKIAogICAg
IFZlY3RvcjxKU0M6OlN0cm9uZzxKU0RPTVdpbmRvd1NoZWxsPj4gd2luZG93U2hlbGxzID0gdGhp
cy0+d2luZG93U2hlbGxzKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3aW5kb3dTaGVs
bHMuc2l6ZSgpOyArK2kpIHsKQEAgLTQ5Niw3ICs0OTcsNyBAQCBCaW5kaW5nczo6Um9vdE9iamVj
dCogU2NyaXB0Q29udHJvbGxlcjo6CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaWYgKCFtX2Nh
Y2hlYWJsZUJpbmRpbmdSb290T2JqZWN0KSB7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKEpT
RE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGNv
bW1vblZNKCkpOwogICAgICAgICBtX2NhY2hlYWJsZUJpbmRpbmdSb290T2JqZWN0ID0gQmluZGlu
Z3M6OlJvb3RPYmplY3Q6OmNyZWF0ZSgwLCBnbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSkpOwog
ICAgIH0KICAgICByZXR1cm4gbV9jYWNoZWFibGVCaW5kaW5nUm9vdE9iamVjdC5nZXQoKTsKQEAg
LTUwOCw3ICs1MDksNyBAQCBCaW5kaW5nczo6Um9vdE9iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6
CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaWYgKCFtX2JpbmRpbmdSb290T2JqZWN0KSB7Ci0g
ICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7Cisg
ICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGNvbW1vblZNKCkpOwogICAgICAgICBtX2JpbmRpbmdS
b290T2JqZWN0ID0gQmluZGluZ3M6OlJvb3RPYmplY3Q6OmNyZWF0ZSgwLCBnbG9iYWxPYmplY3Qo
cGx1Z2luV29ybGQoKSkpOwogICAgIH0KICAgICByZXR1cm4gbV9iaW5kaW5nUm9vdE9iamVjdC5n
ZXQoKTsKQEAgLTUzOSw3ICs1NDAsNyBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNvbGxlY3RJ
c29sYXRlZENvCiBOUE9iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6d2luZG93U2NyaXB0TlBPYmpl
Y3QoKQogewogICAgIGlmICghbV93aW5kb3dTY3JpcHROUE9iamVjdCkgewotICAgICAgICBKU0xv
Y2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgICAgICBKU0xv
Y2tIb2xkZXIgbG9jayhjb21tb25WTSgpKTsKICAgICAgICAgaWYgKGNhbkV4ZWN1dGVTY3JpcHRz
KE5vdEFib3V0VG9FeGVjdXRlU2NyaXB0KSkgewogICAgICAgICAgICAgLy8gSmF2YVNjcmlwdCBp
cyBlbmFibGVkLCBzbyB0aGVyZSBpcyBhIEphdmFTY3JpcHQgd2luZG93IG9iamVjdC4KICAgICAg
ICAgICAgIC8vIFJldHVybiBhbiBOUE9iamVjdCBib3VuZCB0byB0aGUgd2luZG93IG9iamVjdC4K
QEAgLTU3NCw3ICs1NzUsNyBAQCBKU09iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6anNPYmplY3RG
b3JQCiAgICAgaWYgKCFjYW5FeGVjdXRlU2NyaXB0cyhOb3RBYm91dFRvRXhlY3V0ZVNjcmlwdCkp
CiAgICAgICAgIHJldHVybiAwOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dC
YXNlOjpjb21tb25WTSgpKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhjb21tb25WTSgpKTsKIAog
ICAgIC8vIENyZWF0ZSBhIEpTT2JqZWN0IGJvdW5kIHRvIHRoaXMgZWxlbWVudAogICAgIEpTRE9N
V2luZG93KiBnbG9iYWxPYmogPSBnbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSk7CkBAIC02MTEs
NyArNjEyLDcgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhbnVwU2NyaXB0T2JqZQogCiB2
b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNsZWFyU2NyaXB0T2JqZWN0cygpCiB7Ci0gICAgSlNMb2Nr
SG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhjb21tb25WTSgpKTsKIAogICAgIFJvb3RPYmplY3RNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IG1fcm9vdE9iamVjdHMuZW5kKCk7CiAgICAgZm9yIChSb290T2JqZWN0TWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1fcm9vdE9iamVjdHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlck1hYy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVy
TWFjLm1tCShyZXZpc2lvbiAyMDk2NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHRDb250cm9sbGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAj
aW1wb3J0ICJTY3JpcHRDb250cm9sbGVyLmgiCiAKICNpbXBvcnQgIkJyaWRnZUpTQy5oIgorI2lt
cG9ydCAiQ29tbW9uVk0uaCIKICNpbXBvcnQgIkRPTVdpbmRvdy5oIgogI2ltcG9ydCAiRnJhbWUu
aCIKICNpbXBvcnQgIkZyYW1lTG9hZGVyLmgiCkBAIC0xMDAsNyArMTAxLDcgQEAgV2ViU2NyaXB0
T2JqZWN0ICpTY3JpcHRDb250cm9sbGVyOjp3aW5kbwogICAgICAgICByZXR1cm4gbmlsOwogCiAg
ICAgaWYgKCFtX3dpbmRvd1NjcmlwdE9iamVjdCkgewotICAgICAgICBKU0M6OkpTTG9ja0hvbGRl
ciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgICAgIEpTQzo6SlNMb2Nr
SG9sZGVyIGxvY2soY29tbW9uVk0oKSk7CiAgICAgICAgIEpTQzo6QmluZGluZ3M6OlJvb3RPYmpl
Y3QqIHJvb3QgPSBiaW5kaW5nUm9vdE9iamVjdCgpOwogICAgICAgICBtX3dpbmRvd1NjcmlwdE9i
amVjdCA9IFtXZWJTY3JpcHRPYmplY3Qgc2NyaXB0T2JqZWN0Rm9ySlNPYmplY3Q6dG9SZWYod2lu
ZG93U2hlbGwocGx1Z2luV29ybGQoKSkpIG9yaWdpblJvb3RPYmplY3Q6cm9vdCByb290T2JqZWN0
OnJvb3RdOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Db2xsZWN0aW9uSW5kZXhD
YWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NvbGxlY3Rpb25JbmRl
eENhY2hlLmNwcAkocmV2aXNpb24gMjA5Njc4KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NvbGxl
Y3Rpb25JbmRleENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTQgKzI2LDE1IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ29sbGVjdGlvbkluZGV4Q2FjaGUuaCIKIAor
I2luY2x1ZGUgIkNvbW1vblZNLmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCi0jaW5jbHVkZSAi
SlNET01XaW5kb3dCYXNlLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogdm9pZCByZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZEZvckNvbGxlY3Rp
b25JbmRleENhY2hlKHNpemVfdCBjb3N0KQogewotICAgIEpTQzo6Vk0mIHZtID0gSlNET01XaW5k
b3dCYXNlOjpjb21tb25WTSgpOworICAgIEpTQzo6Vk0mIHZtID0gY29tbW9uVk0oKTsKICAgICBK
U0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKICAgICAvLyBGSVhNRTogQWRvcHQgcmVwb3J0RXh0
cmFNZW1vcnlWaXNpdGVkLCBhbmQgc3dpdGNoIHRvIHJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVk
LgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI1OTUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAJKHJldmlzaW9uIDIwOTY3OCkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBr
ZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0Br
ZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUu
b3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5
LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAx
MCwgMjAxMSwgMjAxMiwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJDaHJvbWUu
aCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKICNpbmNsdWRlICJDbGFzc0NvbGxlY3Rpb24u
aCIKKyNpbmNsdWRlICJDb21tb25WTS5oIgogI2luY2x1ZGUgIkNvbnRhaW5lck5vZGVBbGdvcml0
aG1zLmgiCiAjaW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgpJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwCShy
ZXZpc2lvbiAyMDk2NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29y
aXRobXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuaCIKIAorI2luY2x1ZGUg
IkNvbW1vblZNLmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiTm9FdmVudERpc3BhdGNo
QXNzZXJ0aW9uLmgiCkBAIC0zMywxMCArMzQsMTAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci12b2lkIG5vdGlmeU5vZGVJbnNlcnRlZEludG9UcmVlKENvbnRhaW5lck5vZGUmIGluc2VydGlv
blBvaW50LCBDb250YWluZXJOb2RlJiwgTm9kZVZlY3RvciYgcG9zdEluc2VydGlvbk5vdGlmaWNh
dGlvblRhcmdldHMpOwotdm9pZCBub3RpZnlOb2RlSW5zZXJ0ZWRJbnRvRG9jdW1lbnQoQ29udGFp
bmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQsIE5vZGUmLCBOb2RlVmVjdG9yJiBwb3N0SW5zZXJ0aW9u
Tm90aWZpY2F0aW9uVGFyZ2V0cyk7Ci12b2lkIG5vdGlmeU5vZGVSZW1vdmVkRnJvbVRyZWUoQ29u
dGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQsIENvbnRhaW5lck5vZGUmKTsKLXZvaWQgbm90aWZ5
Tm9kZVJlbW92ZWRGcm9tRG9jdW1lbnQoQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQsIE5v
ZGUmKTsKK3N0YXRpYyB2b2lkIG5vdGlmeU5vZGVJbnNlcnRlZEludG9UcmVlKENvbnRhaW5lck5v
ZGUmIGluc2VydGlvblBvaW50LCBDb250YWluZXJOb2RlJiwgTm9kZVZlY3RvciYgcG9zdEluc2Vy
dGlvbk5vdGlmaWNhdGlvblRhcmdldHMpOworc3RhdGljIHZvaWQgbm90aWZ5Tm9kZUluc2VydGVk
SW50b0RvY3VtZW50KENvbnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50LCBOb2RlJiwgTm9kZVZl
Y3RvciYgcG9zdEluc2VydGlvbk5vdGlmaWNhdGlvblRhcmdldHMpOworc3RhdGljIHZvaWQgbm90
aWZ5Tm9kZVJlbW92ZWRGcm9tVHJlZShDb250YWluZXJOb2RlJiBpbnNlcnRpb25Qb2ludCwgQ29u
dGFpbmVyTm9kZSYpOworc3RhdGljIHZvaWQgbm90aWZ5Tm9kZVJlbW92ZWRGcm9tRG9jdW1lbnQo
Q29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQsIE5vZGUmKTsKIAogc3RhdGljIHZvaWQgbm90
aWZ5RGVzY2VuZGFudEluc2VydGVkSW50b0RvY3VtZW50KENvbnRhaW5lck5vZGUmIGluc2VydGlv
blBvaW50LCBDb250YWluZXJOb2RlJiBub2RlLCBOb2RlVmVjdG9yJiBwb3N0SW5zZXJ0aW9uTm90
aWZpY2F0aW9uVGFyZ2V0cykKIHsKQEAgLTEwMSw2ICsxMDIsOCBAQCB2b2lkIG5vdGlmeUNoaWxk
Tm9kZUluc2VydGVkKENvbnRhaW5lck5vCiAgICAgICAgIG5vdGlmeU5vZGVJbnNlcnRlZEludG9E
b2N1bWVudChpbnNlcnRpb25Qb2ludCwgbm9kZSwgcG9zdEluc2VydGlvbk5vdGlmaWNhdGlvblRh
cmdldHMpOwogICAgIGVsc2UgaWYgKGlzPENvbnRhaW5lck5vZGU+KG5vZGUpKQogICAgICAgICBu
b3RpZnlOb2RlSW5zZXJ0ZWRJbnRvVHJlZShpbnNlcnRpb25Qb2ludCwgZG93bmNhc3Q8Q29udGFp
bmVyTm9kZT4obm9kZSksIHBvc3RJbnNlcnRpb25Ob3RpZmljYXRpb25UYXJnZXRzKTsKKworICAg
IHdyaXRlQmFycmllck9wYXF1ZVJvb3QoWyZpbnNlcnRpb25Qb2ludF0gKCkgLT4gdm9pZCogeyBy
ZXR1cm4gaW5zZXJ0aW9uUG9pbnQub3BhcXVlUm9vdCgpOyB9KTsKIH0KIAogdm9pZCBub3RpZnlO
b2RlUmVtb3ZlZEZyb21Eb2N1bWVudChDb250YWluZXJOb2RlJiBpbnNlcnRpb25Qb2ludCwgTm9k
ZSYgbm9kZSkKQEAgLTE1Miw2ICsxNTUsOCBAQCB2b2lkIG5vdGlmeU5vZGVSZW1vdmVkRnJvbVRy
ZWUoQ29udGFpbmVyCiAKIHZvaWQgbm90aWZ5Q2hpbGROb2RlUmVtb3ZlZChDb250YWluZXJOb2Rl
JiBpbnNlcnRpb25Qb2ludCwgTm9kZSYgY2hpbGQpCiB7CisgICAgd3JpdGVCYXJyaWVyT3BhcXVl
Um9vdChbJmNoaWxkXSAoKSAtPiB2b2lkKiB7IHJldHVybiAmY2hpbGQ7IH0pOworCiAgICAgaWYg
KCFjaGlsZC5pbkRvY3VtZW50KCkpIHsKICAgICAgICAgaWYgKGlzPENvbnRhaW5lck5vZGU+KGNo
aWxkKSkKICAgICAgICAgICAgIG5vdGlmeU5vZGVSZW1vdmVkRnJvbVRyZWUoaW5zZXJ0aW9uUG9p
bnQsIGRvd25jYXN0PENvbnRhaW5lck5vZGU+KGNoaWxkKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAJKHJldmlzaW9uIDIwOTY3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJDaHJvbWUu
aCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKICNpbmNsdWRlICJDb21tZW50LmgiCisjaW5j
bHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJDb21wb3NpdGlvbkV2ZW50LmgiCiAjaW5jbHVk
ZSAiQ29udGVudFNlY3VyaXR5UG9saWN5LmgiCiAjaW5jbHVkZSAiQ29va2llSmFyLmgiCkBAIC0y
MzY1LDcgKzIzNjYsNyBAQCB2b2lkIERvY3VtZW50OjpyZXN1bWVEZXZpY2VNb3Rpb25BbmRPcmll
CiAKIGJvb2wgRG9jdW1lbnQ6OnNob3VsZEJ5cGFzc01haW5Xb3JsZENvbnRlbnRTZWN1cml0eVBv
bGljeSgpIGNvbnN0CiB7Ci0gICAgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEpTRE9NV2lu
ZG93Ojpjb21tb25WTSgpLnRvcENhbGxGcmFtZTsKKyAgICBKU0M6OkNhbGxGcmFtZSogY2FsbEZy
YW1lID0gY29tbW9uVk0oKS50b3BDYWxsRnJhbWU7CiAgICAgaWYgKGNhbGxGcmFtZSA9PSBKU0M6
OkNhbGxGcmFtZTo6bm9DYWxsZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIERPTVdy
YXBwZXJXb3JsZCYgZG9tV3JhcHBlcldvcmxkID0gY3VycmVudFdvcmxkKGNhbGxGcmFtZSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAyMDk2NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzOTksNiArMjM5OSwxOCBAQCBib29sIE5v
ZGU6OmluUmVuZGVyZWREb2N1bWVudCgpIGNvbnN0CiAgICAgcmV0dXJuIGluRG9jdW1lbnQoKSAm
JiBkb2N1bWVudCgpLmhhc0xpdmluZ1JlbmRlclRyZWUoKTsKIH0KIAordm9pZCogTm9kZTo6b3Bh
cXVlUm9vdFNsb3coKSBjb25zdAoreworICAgIGNvbnN0IE5vZGUqIG5vZGUgPSB0aGlzOworICAg
IGZvciAoOzspIHsKKyAgICAgICAgY29uc3QgTm9kZSogbmV4dE5vZGUgPSBub2RlLT5wYXJlbnRP
clNoYWRvd0hvc3ROb2RlKCk7CisgICAgICAgIGlmICghbmV4dE5vZGUpCisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgbm9kZSA9IG5leHROb2RlOworICAgIH0KKyAgICByZXR1cm4gY29uc3Rf
Y2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KG5vZGUpKTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiAjaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5oCShyZXZpc2lvbiAyMDk2NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNjYsNiArMjY2LDggQEAgcHVibGljOgogICAgICAgICBib29sIGNv
bXBvc2VkOwogICAgIH07CiAgICAgTm9kZSYgZ2V0Um9vdE5vZGUoY29uc3QgR2V0Um9vdE5vZGVP
cHRpb25zJikgY29uc3Q7CisgICAgCisgICAgdm9pZCogb3BhcXVlUm9vdCgpIGNvbnN0OwogCiAg
ICAgLy8gVXNlIHdoZW4gaXQncyBndWFyYW50ZWVkIHRvIHRoYXQgc2hhZG93SG9zdCBpcyBudWxs
LgogICAgIENvbnRhaW5lck5vZGUqIHBhcmVudE5vZGVHdWFyYW50ZWVkSG9zdEZyZWUoKSBjb25z
dDsKQEAgLTY3MSw2ICs2NzMsOCBAQCBwcml2YXRlOgogICAgIEhhc2hTZXQ8TXV0YXRpb25PYnNl
cnZlclJlZ2lzdHJhdGlvbio+KiB0cmFuc2llbnRNdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKTsK
IAogICAgIHZvaWQgYWRqdXN0U3R5bGVWYWxpZGl0eShTdHlsZTo6VmFsaWRpdHksIFN0eWxlOjpJ
bnZhbGlkYXRpb25Nb2RlKTsKKyAgICAKKyAgICB2b2lkKiBvcGFxdWVSb290U2xvdygpIGNvbnN0
OwogCiAgICAgaW50IG1fcmVmQ291bnQ7CiAgICAgbXV0YWJsZSB1aW50MzJfdCBtX25vZGVGbGFn
czsKQEAgLTc1Nyw2ICs3NjEsMTUgQEAgaW5saW5lIENvbnRhaW5lck5vZGUqIE5vZGU6OnBhcmVu
dE5vZGUoKQogICAgIHJldHVybiBtX3BhcmVudE5vZGU7CiB9CiAKK2lubGluZSB2b2lkKiBOb2Rl
OjpvcGFxdWVSb290KCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogUG9zc2libGUgcmFjZT8KKyAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NzEzCisgICAg
aWYgKGluRG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuICZkb2N1bWVudCgpOworICAgIHJldHVy
biBvcGFxdWVSb290U2xvdygpOworfQorCiBpbmxpbmUgQ29udGFpbmVyTm9kZSogTm9kZTo6cGFy
ZW50Tm9kZUd1YXJhbnRlZWRIb3N0RnJlZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFpc1NoYWRv
d1Jvb3QoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQuY3BwCShyZXZpc2lvbiAyMDk2NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0
RXhlY3V0aW9uQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNp
bmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAKICNpbmNsdWRlICJDYWNoZWRTY3Jp
cHQuaCIKKyNpbmNsdWRlICJDb21tb25WTS5oIgogI2luY2x1ZGUgIkRPTVRpbWVyLmgiCiAjaW5j
bHVkZSAiRGF0YWJhc2VDb250ZXh0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKQEAgLTQ3Nyw3
ICs0NzgsNyBAQCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIFNjcmlwdEV4ZWN1dGlvCiBKU0M6
OlZNJiBTY3JpcHRFeGVjdXRpb25Db250ZXh0Ojp2bSgpCiB7CiAgICAgaWYgKGlzPERvY3VtZW50
PigqdGhpcykpCi0gICAgICAgIHJldHVybiBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKTsKKyAgICAg
ICAgcmV0dXJuIGNvbW1vblZNKCk7CiAKICAgICByZXR1cm4gZG93bmNhc3Q8V29ya2VyR2xvYmFs
U2NvcGU+KCp0aGlzKS5zY3JpcHQoKS0+dm0oKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEltYWdlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxJbWFnZUxvYWRlci5jcHAJKHJldmlzaW9uIDIwOTY3OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEltYWdlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBA
QAogI2luY2x1ZGUgIkhUTUxJbWFnZUxvYWRlci5oIgogCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2Uu
aCIKKyNpbmNsdWRlICJDb21tb25WTS5oIgogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1
ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJFdmVudC5oIgpAQCAtODQsNyArODUsNyBAQCB2b2lk
IEhUTUxJbWFnZUxvYWRlcjo6bm90aWZ5RmluaXNoZWQoQ2FjCiAgICAgYm9vbCBsb2FkRXJyb3Ig
PSBjYWNoZWRJbWFnZS5lcnJvck9jY3VycmVkKCkgfHwgY2FjaGVkSW1hZ2UucmVzcG9uc2UoKS5o
dHRwU3RhdHVzQ29kZSgpID49IDQwMDsKICAgICBpZiAoIWxvYWRFcnJvcikgewogICAgICAgICBp
ZiAoIWVsZW1lbnQoKS5pbkRvY3VtZW50KCkpIHsKLSAgICAgICAgICAgIEpTQzo6Vk0mIHZtID0g
SlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpOworICAgICAgICAgICAgSlNDOjpWTSYgdm0gPSBj
b21tb25WTSgpOwogICAgICAgICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAgICAg
ICAgICAgICAvLyBGSVhNRTogQWRvcHQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkLCBhbmQgc3dp
dGNoIHRvIHJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkLgogICAgICAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjU5NQpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDk2NzgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Nyw2ICszNyw3IEBACiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAjaW5jbHVkZSAiQ2xpZW50
UmVjdC5oIgogI2luY2x1ZGUgIkNsaWVudFJlY3RMaXN0LmgiCisjaW5jbHVkZSAiQ29tbW9uVk0u
aCIKICNpbmNsdWRlICJDb250ZW50U2VjdXJpdHlQb2xpY3kuaCIKICNpbmNsdWRlICJDb250ZW50
VHlwZS5oIgogI2luY2x1ZGUgIkNvb2tpZUphci5oIgpAQCAtODQ5LDcgKzg1MCw3IEBAIHZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6cGF1c2VBZnRlckRldGFjaGUKIAogICAgIHNpemVfdCBleHRyYU1l
bW9yeUNvc3QgPSBtX3BsYXllci0+ZXh0cmFNZW1vcnlDb3N0KCk7CiAgICAgaWYgKGV4dHJhTWVt
b3J5Q29zdCA+IG1fcmVwb3J0ZWRFeHRyYU1lbW9yeUNvc3QpIHsKLSAgICAgICAgSlNDOjpWTSYg
dm0gPSBKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCk7CisgICAgICAgIEpTQzo6Vk0mIHZtID0g
Y29tbW9uVk0oKTsKICAgICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAKICAgICAg
ICAgc2l6ZV90IGV4dHJhTWVtb3J5Q29zdERlbHRhID0gZXh0cmFNZW1vcnlDb3N0IC0gbV9yZXBv
cnRlZEV4dHJhTWVtb3J5Q29zdDsKQEAgLTY0OTYsNyArNjQ5Nyw3IEBAIFJlZlB0cjxWaWRlb1Bs
YXliYWNrUXVhbGl0eT4gSFRNTE1lZGlhRWwKIERPTVdyYXBwZXJXb3JsZCYgSFRNTE1lZGlhRWxl
bWVudDo6ZW5zdXJlSXNvbGF0ZWRXb3JsZCgpCiB7CiAgICAgaWYgKCFtX2lzb2xhdGVkV29ybGQp
Ci0gICAgICAgIG1faXNvbGF0ZWRXb3JsZCA9IERPTVdyYXBwZXJXb3JsZDo6Y3JlYXRlKEpTRE9N
V2luZG93Ojpjb21tb25WTSgpKTsKKyAgICAgICAgbV9pc29sYXRlZFdvcmxkID0gRE9NV3JhcHBl
cldvcmxkOjpjcmVhdGUoY29tbW9uVk0oKSk7CiAgICAgcmV0dXJuICptX2lzb2xhdGVkV29ybGQ7
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVt
ZW50LmNwcAkocmV2aXNpb24gMjA5Njc4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1
Z0luSW1hZ2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogCiAj
aW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCisjaW5jbHVkZSAi
Q29tbW9uVk0uaCIKICNpbmNsdWRlICJDb250ZW50U2VjdXJpdHlQb2xpY3kuaCIKICNpbmNsdWRl
ICJFdmVudC5oIgogI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgpAQCAtMzY1LDcgKzM2Niw3IEBA
IHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6dXBkYXRlU25hcHMKIAogc3RhdGljIERPTVdy
YXBwZXJXb3JsZCYgcGx1Z0luSW1hZ2VFbGVtZW50SXNvbGF0ZWRXb3JsZCgpCiB7Ci0gICAgc3Rh
dGljIERPTVdyYXBwZXJXb3JsZCYgaXNvbGF0ZWRXb3JsZCA9IERPTVdyYXBwZXJXb3JsZDo6Y3Jl
YXRlKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKS5sZWFrUmVmKCk7CisgICAgc3RhdGljIERPTVdy
YXBwZXJXb3JsZCYgaXNvbGF0ZWRXb3JsZCA9IERPTVdyYXBwZXJXb3JsZDo6Y3JlYXRlKGNvbW1v
blZNKCkpLmxlYWtSZWYoKTsKICAgICByZXR1cm4gaXNvbGF0ZWRXb3JsZDsKIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAko
cmV2aXNpb24gMjA5Njc4KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAi
SW5zcGVjdG9yQ29udHJvbGxlci5oIgogCiAjaW5jbHVkZSAiQ29tbWFuZExpbmVBUElIb3N0Lmgi
CisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJET01XcmFwcGVyV29ybGQuaCIKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JBcHBsaWNhdGlv
bkNhY2hlQWdlbnQuaCIKQEAgLTQ3MCw3ICs0NzEsNyBAQCBQYWdlU2NyaXB0RGVidWdTZXJ2ZXIm
IEluc3BlY3RvckNvbnRyb2xsCiAKIEpTQzo6Vk0mIEluc3BlY3RvckNvbnRyb2xsZXI6OnZtKCkK
IHsKLSAgICByZXR1cm4gSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpOworICAgIHJldHVybiBj
b21tb25WTSgpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENvbXBvc2l0ZShG
cmFtZSYgZnJhbWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZVNjcmlwdERl
YnVnU2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFn
ZVNjcmlwdERlYnVnU2VydmVyLmNwcAkocmV2aXNpb24gMjA5Njc4KQorKysgU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQYWdlU2NyaXB0
RGVidWdTZXJ2ZXIuaCIKIAorI2luY2x1ZGUgIkNvbW1vblZNLmgiCiAjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKICNpbmNsdWRlICJFdmVudExvb3AuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKQEAg
LTU0LDcgKzU1LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogUGFnZVNjcmlwdERlYnVnU2VydmVyOjpQYWdlU2NyaXB0RGVidWdTZXJ2ZXIoUGFn
ZSYgcGFnZSkKLSAgICA6IFNjcmlwdERlYnVnU2VydmVyKFdlYkNvcmU6OkpTRE9NV2luZG93QmFz
ZTo6Y29tbW9uVk0oKSkKKyAgICA6IFNjcmlwdERlYnVnU2VydmVyKFdlYkNvcmU6OmNvbW1vblZN
KCkpCiAgICAgLCBtX3BhZ2UocGFnZSkKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGVyZm9ybWFuY2VMb2dnaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L1BlcmZvcm1hbmNlTG9nZ2luZy5jcHAJKHJldmlzaW9uIDIwOTY3OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvUGVyZm9ybWFuY2VMb2dnaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiAr
MjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBlcmZvcm1hbmNlTG9nZ2lu
Zy5oIgogCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNp
bmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCkBAIC01
Miw3ICs1Myw3IEBAIEhhc2hNYXA8Y29uc3QgY2hhciosIHNpemVfdD4gUGVyZm9ybWFuY2UKIHsK
ICAgICBIYXNoTWFwPGNvbnN0IGNoYXIqLCBzaXplX3Q+IHN0YXRzOwogCi0gICAgYXV0byYgdm0g
PSBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKTsKKyAgICBhdXRvJiB2bSA9IGNvbW1vblZNKCk7CiAg
ICAgc3RhdHMuYWRkKCJqYXZhc2NyaXB0X2djX2hlYXBfY2FwYWNpdHkiLCB2bS5oZWFwLmNhcGFj
aXR5KCkpOwogICAgIHN0YXRzLmFkZCgiamF2YXNjcmlwdF9nY19oZWFwX2V4dHJhX21lbW9yeV9z
aXplIiwgdm0uaGVhcC5leHRyYU1lbW9yeVNpemUoKSk7CiAKQEAgLTc0LDcgKzc1LDcgQEAgSGFz
aE1hcDxjb25zdCBjaGFyKiwgc2l6ZV90PiBQZXJmb3JtYW5jZQogCiBIYXNoQ291bnRlZFNldDxj
b25zdCBjaGFyKj4gUGVyZm9ybWFuY2VMb2dnaW5nOjpqYXZhU2NyaXB0T2JqZWN0Q291bnRzKCkK
IHsKLSAgICByZXR1cm4gV1RGTW92ZSgqSlNET01XaW5kb3c6OmNvbW1vblZNKCkuaGVhcC5vYmpl
Y3RUeXBlQ291bnRzKCkpOworICAgIHJldHVybiBXVEZNb3ZlKCpjb21tb25WTSgpLmhlYXAub2Jq
ZWN0VHlwZUNvdW50cygpKTsKIH0KIAogUGVyZm9ybWFuY2VMb2dnaW5nOjpQZXJmb3JtYW5jZUxv
Z2dpbmcoTWFpbkZyYW1lJiBtYWluRnJhbWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1Jl
c291cmNlVXNhZ2VUaHJlYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
UmVzb3VyY2VVc2FnZVRocmVhZC5jcHAJKHJldmlzaW9uIDIwOTY3OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvUmVzb3VyY2VVc2FnZVRocmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYg
KzI4LDcgQEAKIAogI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKIAorI2luY2x1ZGUgIkNvbW1v
blZNLmgiCiAjaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKICNpbmNsdWRlIDx0aHJlYWQ+CiAjaW5j
bHVkZSA8d3RmL01haW5UaHJlYWQuaD4KQEAgLTk4LDcgKzk5LDcgQEAgdm9pZCBSZXNvdXJjZVVz
YWdlVGhyZWFkOjpjcmVhdGVUaHJlYWRJZgogICAgIGlmIChtX3RocmVhZElkZW50aWZpZXIpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIG1fdm0gPSAmSlNET01XaW5kb3c6OmNvbW1vblZNKCk7Cisg
ICAgbV92bSA9ICZjb21tb25WTSgpOwogICAgIG1fdGhyZWFkSWRlbnRpZmllciA9IGNyZWF0ZVRo
cmVhZCh0aHJlYWRDYWxsYmFjaywgdGhpcywgIldlYkNvcmU6IFJlc291cmNlVXNhZ2UiKTsKIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlT3ZlcmxheUNv
Y29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvUmVzb3VyY2VV
c2FnZU92ZXJsYXlDb2NvYS5tbQkocmV2aXNpb24gMjA5Njc4KQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlT3ZlcmxheUNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlIDxDb3JlVGV4dC9Db3JlVGV4dC5oPgogCisjaW5j
bHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgogI2luY2x1ZGUgIlBs
YXRmb3JtQ0FMYXllci5oIgogI2luY2x1ZGUgIlJlc291cmNlVXNhZ2VUaHJlYWQuaCIKQEAgLTIw
NCw3ICsyMDUsNyBAQCBzdGF0aWMgdm9pZCBhcHBlbmREYXRhVG9IaXN0b3J5KGNvbnN0IFJlCiAK
ICAgICAvLyBGSVhNRTogRmluZCBhIHdheSB0byBhZGQgdGhpcyB0byBSZXNvdXJjZVVzYWdlRGF0
YSBhbmQgY2FsY3VsYXRlIGl0IG9uIHRoZSByZXNvdXJjZSB1c2FnZSBzYW1wbGVyIHRocmVhZC4K
ICAgICB7Ci0gICAgICAgIEpTQzo6Vk0qIHZtID0gJkpTRE9NV2luZG93Ojpjb21tb25WTSgpOwor
ICAgICAgICBKU0M6OlZNKiB2bSA9ICZjb21tb25WTSgpOwogICAgICAgICBKU0M6OkpTTG9ja0hv
bGRlciBsb2NrKHZtKTsKICAgICAgICAgaGlzdG9yaWNEYXRhLmdjSGVhcFNpemUuYXBwZW5kKHZt
LT5oZWFwLnNpemUoKSAtIHZtLT5oZWFwLmV4dHJhTWVtb3J5U2l6ZSgpKTsKICAgICB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAJKHJldmlzaW9uIDIwOTY3
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJTVkdJbWFnZS5oIgogCiAjaW5jbHVk
ZSAiQ2hyb21lLmgiCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJET01XaW5kb3cu
aCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkVsZW1lbnRJdGVyYXRv
ci5oIgpAQCAtMzk3LDcgKzM5OCw3IEBAIHZvaWQgU1ZHSW1hZ2U6OnJlcG9ydEFwcHJveGltYXRl
TWVtb3J5Q28KICAgICBmb3IgKE5vZGUqIG5vZGUgPSBkb2N1bWVudDsgbm9kZTsgbm9kZSA9IE5v
ZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpKQogICAgICAgICBkZWNvZGVkSW1hZ2VNZW1vcnlDb3N0
ICs9IG5vZGUtPmFwcHJveGltYXRlTWVtb3J5Q29zdCgpOwogCi0gICAgSlNDOjpWTSYgdm0gPSBK
U0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCk7CisgICAgSlNDOjpWTSYgdm0gPSBjb21tb25WTSgp
OwogICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOwogICAgIC8vIEZJWE1FOiBBZG9wdCBy
ZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQsIGFuZCBzd2l0Y2ggdG8gcmVwb3J0RXh0cmFNZW1vcnlB
bGxvY2F0ZWQuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0MjU5NQpJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9NZW1vcnlJbmZvLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9NZW1vcnlJbmZvLmgJKHJldmlzaW9uIDIw
OTY3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTWVtb3J5SW5mby5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQ29tbW9u
Vk0uaCIKICNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CiAKQEAgLTQ0LDggKzQ1LDggQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIE1lbW9yeUlu
Zm8oKQotICAgICAgICA6IG1fdXNlZEpTSGVhcFNpemUoSlNET01XaW5kb3c6OmNvbW1vblZNKCku
aGVhcC5zaXplKCkpCi0gICAgICAgICwgbV90b3RhbEpTSGVhcFNpemUoSlNET01XaW5kb3c6OmNv
bW1vblZNKCkuaGVhcC5jYXBhY2l0eSgpKQorICAgICAgICA6IG1fdXNlZEpTSGVhcFNpemUoY29t
bW9uVk0oKS5oZWFwLnNpemUoKSkKKyAgICAgICAgLCBtX3RvdGFsSlNIZWFwU2l6ZShjb21tb25W
TSgpLmhlYXAuY2FwYWNpdHkoKSkKICAgICB7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZp
c2lvbiAyMDk2NzgpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwzMyBAQAorMjAxNi0xMi0xMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUu
Y29tPgorCisgICAgICAgIFRoZSBET00gc2hvdWxkIGhhdmUgYW4gYWR2YW5jaW5nIHdhdmVmcm9u
dCBvcGFxdWUgcm9vdCBiYXJyaWVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjU3MTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKyAgICAgICAgCisgICAgICAgIFByb3BhZ2F0ZSB0aGUgSlNET01XaW5kb3dCYXNlOjpjb21t
b25WTSgpIC0+IGNvbW1vblZNKCkgY2hhbmdlLgorCisgICAgICAgICogU2hhcmVkL2xpbnV4L1dl
Yk1lbW9yeVNhbXBsZXJMaW51eC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYk1lbW9yeVNhbXBs
ZXI6OnNhbXBsZVdlYktpdCk6CisgICAgICAgICogU2hhcmVkL21hYy9XZWJNZW1vcnlTYW1wbGVy
Lm1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVtb3J5U2FtcGxlcjo6c2FtcGxlV2ViS2l0
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGU6OmphdmFTY3JpcHRPYmplY3RzQ291
bnQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6Y2FsbE1ldGhvZCk6CisgICAgICAgIChX
ZWJLaXQ6OkpTTlBPYmplY3Q6OmNhbGxPYmplY3QpOgorICAgICAgICAoV2ViS2l0OjpKU05QT2Jq
ZWN0OjpjYWxsQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpKU05QT2JqZWN0OjpwdXQp
OgorICAgICAgICAoV2ViS2l0OjpKU05QT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSk6CisgICAgICAg
IChXZWJLaXQ6OkpTTlBPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoV2Vi
S2l0OjpKU05QT2JqZWN0Ojpwcm9wZXJ0eUdldHRlcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpydW5KYXZhU2Ny
aXB0SW5NYWluRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpnZXRCeXRlY29kZVBy
b2ZpbGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpnZXRTYW1wbGluZ1Byb2ZpbGVyT3V0
cHV0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzOjpnZXRXZWJDb3JlU3RhdGlzdGljcyk6CisKIDIwMTYtMTItMTAgIEtv
bnN0YW50aW4gVG9rYXJldiAgPGFubnVsZW5AeWFuZGV4LnJ1PgogCiAgICAgICAgIFtjbWFrZV0g
SW5jbHVkZSBXVEYsIEpTQywgYW5kIFdlYkNvcmUgaGVhZGVycyBhdXRvbWF0aWNhbGx5IHRvIHRh
cmdlcnMgdXNpbmcgdGhlbQpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1dlYk1l
bW9yeVNhbXBsZXJMaW51eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVk
L2xpbnV4L1dlYk1lbW9yeVNhbXBsZXJMaW51eC5jcHAJKHJldmlzaW9uIDIwOTY3OCkKKysrIFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9XZWJNZW1vcnlTYW1wbGVyTGludXguY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKE1FTU9SWV9TQU1QTEVSKQog
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvTWVtb3J5U3RhdGlzdGljcy5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvQ29tbW9uVk0uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0N1cnJlbnRQcm9jZXNzTWVt
b3J5U3RhdHVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9KU0RPTVdpbmRvdy5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KQEAgLTEyMiw4ICsxMjMsOCBAQCBXZWJNZW1vcnlT
dGF0aXN0aWNzIFdlYk1lbW9yeVNhbXBsZXI6OnNhCiAgICAgYXBwZW5kS2V5VmFsdWVQYWlyKHdl
YktpdE1lbW9yeVN0YXRzLCBBU0NJSUxpdGVyYWwoIkZhc3QgTWFsbG9jIEluIFVzZSIpLCBmYXN0
TWFsbG9jQnl0ZXNJblVzZSk7CiAgICAgYXBwZW5kS2V5VmFsdWVQYWlyKHdlYktpdE1lbW9yeVN0
YXRzLCBBU0NJSUxpdGVyYWwoIkZhc3QgTWFsbG9jIENvbW1pdHRlZCBNZW1vcnkiKSwgZmFzdE1h
bGxvY0J5dGVzQ29tbWl0dGVkKTsKIAotICAgIHNpemVfdCBqc2NIZWFwQnl0ZXNJblVzZSA9IEpT
RE9NV2luZG93Ojpjb21tb25WTSgpLmhlYXAuc2l6ZSgpOwotICAgIHNpemVfdCBqc2NIZWFwQnl0
ZXNDb21taXR0ZWQgPSBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS5oZWFwLmNhcGFjaXR5KCk7Cisg
ICAgc2l6ZV90IGpzY0hlYXBCeXRlc0luVXNlID0gY29tbW9uVk0oKS5oZWFwLnNpemUoKTsKKyAg
ICBzaXplX3QganNjSGVhcEJ5dGVzQ29tbWl0dGVkID0gY29tbW9uVk0oKS5oZWFwLmNhcGFjaXR5
KCk7CiAgICAgdG90YWxCeXRlc0luVXNlICs9IGpzY0hlYXBCeXRlc0luVXNlOwogICAgIHRvdGFs
Qnl0ZXNDb21taXR0ZWQgKz0ganNjSGVhcEJ5dGVzQ29tbWl0dGVkOwogCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvbWFjL1dlYk1lbW9yeVNhbXBsZXIubWFjLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViTWVtb3J5U2FtcGxlci5tYWMubW0JKHJldmlz
aW9uIDIwOTY3OCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViTWVtb3J5U2FtcGxl
ci5tYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5LDEzICsyOSwxNCBAQAogI2lmIEVOQUJMRShN
RU1PUllfU0FNUExFUikgIAogCiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9NZW1vcnlTdGF0aXN0
aWNzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9WTS5oPgogI2ltcG9ydCA8bWFjaC9tYWNo
Lmg+CiAjaW1wb3J0IDxtYWNoL3Rhc2suaD4KICNpbXBvcnQgPG1hY2gvbWFjaF90eXBlcy5oPgog
I2ltcG9ydCA8bWFsbG9jL21hbGxvYy5oPgogI2ltcG9ydCA8bm90aWZ5Lmg+CiAjaW1wb3J0IDxy
dW50aW1lL0pTTG9jay5oPgotI2ltcG9ydCA8V2ViQ29yZS9KU0RPTVdpbmRvdy5oPgorI2ltcG9y
dCA8V2ViQ29yZS9Db21tb25WTS5oPgogI2ltcG9ydCA8d3RmL0N1cnJlbnRUaW1lLmg+CiAKIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtMTE2LDkgKzExNyw5IEBAIFdlYk1lbW9yeVN0YXRp
c3RpY3MgV2ViTWVtb3J5U2FtcGxlcjo6c2EKICAgICB0b3RhbEJ5dGVzSW5Vc2UgKz0gZmFzdE1h
bGxvY0J5dGVzSW5Vc2U7CiAgICAgdG90YWxCeXRlc0NvbW1pdHRlZCArPSBmYXN0TWFsbG9jQnl0
ZXNDb21taXR0ZWQ7CiAgICAgCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNv
bW1vblZNKCkpOwotICAgIHNpemVfdCBqc2NIZWFwQnl0ZXNJblVzZSA9IEpTRE9NV2luZG93Ojpj
b21tb25WTSgpLmhlYXAuc2l6ZSgpOwotICAgIHNpemVfdCBqc2NIZWFwQnl0ZXNDb21taXR0ZWQg
PSBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS5oZWFwLmNhcGFjaXR5KCk7CisgICAgSlNMb2NrSG9s
ZGVyIGxvY2soY29tbW9uVk0oKSk7CisgICAgc2l6ZV90IGpzY0hlYXBCeXRlc0luVXNlID0gY29t
bW9uVk0oKS5oZWFwLnNpemUoKTsKKyAgICBzaXplX3QganNjSGVhcEJ5dGVzQ29tbWl0dGVkID0g
Y29tbW9uVk0oKS5oZWFwLmNhcGFjaXR5KCk7CiAgICAgdG90YWxCeXRlc0luVXNlICs9IGpzY0hl
YXBCeXRlc0luVXNlOwogICAgIHRvdGFsQnl0ZXNDb21taXR0ZWQgKz0ganNjSGVhcEJ5dGVzQ29t
bWl0dGVkOwogICAgIApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3Mu
Y3BwCShyZXZpc2lvbiAyMDk2NzgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBy
b2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCw3IEBACiAjaW5jbHVkZSA8V2Vi
Q29yZS9BWE9iamVjdENhY2hlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9BcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0NvbW1vblZNLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Dcm9zc09y
aWdpblByZWZsaWdodFJlc3VsdENhY2hlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9ETlMuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0RhdGFiYXNlTWFuYWdlci5oPgpAQCAtOTcyLDIxICs5NzMsMjEgQEAg
dm9pZCBXZWJQcm9jZXNzOjpnZXRXZWJDb3JlU3RhdGlzdGljcyh1aQogICAgIAogICAgIC8vIEdh
dGhlciBKYXZhU2NyaXB0IHN0YXRpc3RpY3MuCiAgICAgewotICAgICAgICBKU0xvY2tIb2xkZXIg
bG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7Ci0gICAgICAgIGRhdGEuc3RhdGlzdGljc051
bWJlcnMuc2V0KEFTQ0lJTGl0ZXJhbCgiSmF2YVNjcmlwdE9iamVjdHNDb3VudCIpLCBKU0RPTVdp
bmRvdzo6Y29tbW9uVk0oKS5oZWFwLm9iamVjdENvdW50KCkpOwotICAgICAgICBkYXRhLnN0YXRp
c3RpY3NOdW1iZXJzLnNldChBU0NJSUxpdGVyYWwoIkphdmFTY3JpcHRHbG9iYWxPYmplY3RzQ291
bnQiKSwgSlNET01XaW5kb3c6OmNvbW1vblZNKCkuaGVhcC5nbG9iYWxPYmplY3RDb3VudCgpKTsK
LSAgICAgICAgZGF0YS5zdGF0aXN0aWNzTnVtYmVycy5zZXQoQVNDSUlMaXRlcmFsKCJKYXZhU2Ny
aXB0UHJvdGVjdGVkT2JqZWN0c0NvdW50IiksIEpTRE9NV2luZG93Ojpjb21tb25WTSgpLmhlYXAu
cHJvdGVjdGVkT2JqZWN0Q291bnQoKSk7Ci0gICAgICAgIGRhdGEuc3RhdGlzdGljc051bWJlcnMu
c2V0KEFTQ0lJTGl0ZXJhbCgiSmF2YVNjcmlwdFByb3RlY3RlZEdsb2JhbE9iamVjdHNDb3VudCIp
LCBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS5oZWFwLnByb3RlY3RlZEdsb2JhbE9iamVjdENvdW50
KCkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhjb21tb25WTSgpKTsKKyAgICAgICAgZGF0
YS5zdGF0aXN0aWNzTnVtYmVycy5zZXQoQVNDSUlMaXRlcmFsKCJKYXZhU2NyaXB0T2JqZWN0c0Nv
dW50IiksIGNvbW1vblZNKCkuaGVhcC5vYmplY3RDb3VudCgpKTsKKyAgICAgICAgZGF0YS5zdGF0
aXN0aWNzTnVtYmVycy5zZXQoQVNDSUlMaXRlcmFsKCJKYXZhU2NyaXB0R2xvYmFsT2JqZWN0c0Nv
dW50IiksIGNvbW1vblZNKCkuaGVhcC5nbG9iYWxPYmplY3RDb3VudCgpKTsKKyAgICAgICAgZGF0
YS5zdGF0aXN0aWNzTnVtYmVycy5zZXQoQVNDSUlMaXRlcmFsKCJKYXZhU2NyaXB0UHJvdGVjdGVk
T2JqZWN0c0NvdW50IiksIGNvbW1vblZNKCkuaGVhcC5wcm90ZWN0ZWRPYmplY3RDb3VudCgpKTsK
KyAgICAgICAgZGF0YS5zdGF0aXN0aWNzTnVtYmVycy5zZXQoQVNDSUlMaXRlcmFsKCJKYXZhU2Ny
aXB0UHJvdGVjdGVkR2xvYmFsT2JqZWN0c0NvdW50IiksIGNvbW1vblZNKCkuaGVhcC5wcm90ZWN0
ZWRHbG9iYWxPYmplY3RDb3VudCgpKTsKICAgICAgICAgCi0gICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxUeXBlQ291bnRTZXQ+IHByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMoSlNET01XaW5kb3c6OmNv
bW1vblZNKCkuaGVhcC5wcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKCkpOworICAgICAgICBzdGQ6
OnVuaXF1ZV9wdHI8VHlwZUNvdW50U2V0PiBwcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKGNvbW1v
blZNKCkuaGVhcC5wcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKCkpOwogICAgICAgICBmcm9tQ291
bnRlZFNldFRvSGFzaE1hcChwcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzLmdldCgpLCBkYXRhLmph
dmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKTsKICAgICAgICAgCi0gICAgICAgIHN0
ZDo6dW5pcXVlX3B0cjxUeXBlQ291bnRTZXQ+IG9iamVjdFR5cGVDb3VudHMoSlNET01XaW5kb3c6
OmNvbW1vblZNKCkuaGVhcC5vYmplY3RUeXBlQ291bnRzKCkpOworICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8VHlwZUNvdW50U2V0PiBvYmplY3RUeXBlQ291bnRzKGNvbW1vblZNKCkuaGVhcC5vYmpl
Y3RUeXBlQ291bnRzKCkpOwogICAgICAgICBmcm9tQ291bnRlZFNldFRvSGFzaE1hcChvYmplY3RU
eXBlQ291bnRzLmdldCgpLCBkYXRhLmphdmFTY3JpcHRPYmplY3RUeXBlQ291bnRzKTsKICAgICAg
ICAgCi0gICAgICAgIHVpbnQ2NF90IGphdmFTY3JpcHRIZWFwU2l6ZSA9IEpTRE9NV2luZG93Ojpj
b21tb25WTSgpLmhlYXAuc2l6ZSgpOworICAgICAgICB1aW50NjRfdCBqYXZhU2NyaXB0SGVhcFNp
emUgPSBjb21tb25WTSgpLmhlYXAuc2l6ZSgpOwogICAgICAgICBkYXRhLnN0YXRpc3RpY3NOdW1i
ZXJzLnNldChBU0NJSUxpdGVyYWwoIkphdmFTY3JpcHRIZWFwU2l6ZSIpLCBqYXZhU2NyaXB0SGVh
cFNpemUpOwotICAgICAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJzLnNldChBU0NJSUxpdGVyYWwo
IkphdmFTY3JpcHRGcmVlU2l6ZSIpLCBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS5oZWFwLmNhcGFj
aXR5KCkgLSBqYXZhU2NyaXB0SGVhcFNpemUpOworICAgICAgICBkYXRhLnN0YXRpc3RpY3NOdW1i
ZXJzLnNldChBU0NJSUxpdGVyYWwoIkphdmFTY3JpcHRGcmVlU2l6ZSIpLCBjb21tb25WTSgpLmhl
YXAuY2FwYWNpdHkoKSAtIGphdmFTY3JpcHRIZWFwU2l6ZSk7CiAgICAgfQogCiAgICAgV1RGOjpG
YXN0TWFsbG9jU3RhdGlzdGljcyBmYXN0TWFsbG9jU3RhdGlzdGljcyA9IFdURjo6ZmFzdE1hbGxv
Y1N0YXRpc3RpY3MoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCShyZXZpc2lvbiAyMDk2
NzgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVk
QnVuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsNyBAQAogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0pTTG9jay5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQXBwbGljYXRpb25DYWNo
ZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0NvbW1vblZNLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRlci5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HQ0Nv
bnRyb2xsZXIuaD4KQEAgLTQ5Myw4ICs0OTQsOCBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpnYXJi
YWdlQ29sbGVjdEphdmFTCiAKIHNpemVfdCBJbmplY3RlZEJ1bmRsZTo6amF2YVNjcmlwdE9iamVj
dHNDb3VudCgpCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZN
KCkpOwotICAgIHJldHVybiBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS5oZWFwLm9iamVjdENvdW50
KCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7CisgICAgcmV0dXJuIGNvbW1v
blZNKCkuaGVhcC5vYmplY3RDb3VudCgpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpyZXBv
cnRFeGNlcHRpb24oSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgZXhjZXB0aW9uKQpJ
bmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9O
ZXRzY2FwZS9KU05QT2JqZWN0LmNwcAkocmV2aXNpb24gMjA5Njc4KQorKysgU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNHbG9iYWxP
YmplY3QuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0xvY2suaD4KICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9PYmplY3RQcm90b3R5cGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0NvbW1v
blZNLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JZGVudGlmaWVyUmVwLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9KU0RPTVdpbmRvd0Jhc2UuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgpAQCAt
MTM2LDcgKzEzNyw3IEBAIEpTVmFsdWUgSlNOUE9iamVjdDo6Y2FsbE1ldGhvZChFeGVjU3RhdGUK
ICAgICBWT0lEX1RPX05QVkFSSUFOVChyZXN1bHQpOwogICAgIAogICAgIHsKLSAgICAgICAgSlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0o
KSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgp
KTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX25wT2JqZWN0LT5fY2xhc3MtPmludm9rZShtX25w
T2JqZWN0LCBtZXRob2ROYW1lLCBhcmd1bWVudHMuZGF0YSgpLCBhcmd1bWVudENvdW50LCAmcmVz
dWx0KTsKICAgICAgICAgTlBSdW50aW1lT2JqZWN0TWFwOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9F
eGVjU3RhdGUoZXhlYyk7CiAgICAgfQpAQCAtMTc5LDcgKzE4MCw3IEBAIEpTQzo6SlNWYWx1ZSBK
U05QT2JqZWN0OjpjYWxsT2JqZWN0KEpTQzoKICAgICBWT0lEX1RPX05QVkFSSUFOVChyZXN1bHQp
OwogCiAgICAgewotICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNE
T01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fbnBPYmpl
Y3QtPl9jbGFzcy0+aW52b2tlRGVmYXVsdChtX25wT2JqZWN0LCBhcmd1bWVudHMuZGF0YSgpLCBh
cmd1bWVudENvdW50LCAmcmVzdWx0KTsKICAgICAgICAgTlBSdW50aW1lT2JqZWN0TWFwOjptb3Zl
R2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7CiAgICAgfQpAQCAtMjIyLDcgKzIyMyw3
IEBAIEpTVmFsdWUgSlNOUE9iamVjdDo6Y2FsbENvbnN0cnVjdG9yKEV4ZWMKICAgICBWT0lEX1RP
X05QVkFSSUFOVChyZXN1bHQpOwogICAgIAogICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgICAg
IEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKICAgICAgICAg
cmV0dXJuVmFsdWUgPSBtX25wT2JqZWN0LT5fY2xhc3MtPmNvbnN0cnVjdChtX25wT2JqZWN0LCBh
cmd1bWVudHMuZGF0YSgpLCBhcmd1bWVudENvdW50LCAmcmVzdWx0KTsKICAgICAgICAgTlBSdW50
aW1lT2JqZWN0TWFwOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7CiAgICAg
fQpAQCAtMzQ1LDcgKzM0Niw3IEBAIGJvb2wgSlNOUE9iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwg
RXhlY1MKIAogICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CiAgICAgewotICAgICAgICBKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsK
KyAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwog
ICAgICAgICByZXN1bHQgPSB0aGlzT2JqZWN0LT5tX25wT2JqZWN0LT5fY2xhc3MtPnNldFByb3Bl
cnR5KHRoaXNPYmplY3QtPm1fbnBPYmplY3QsIG5wSWRlbnRpZmllciwgJnZhcmlhbnQpOwogCiAg
ICAgICAgIE5QUnVudGltZU9iamVjdE1hcDo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRl
KGV4ZWMpOwpAQCAtMzk0LDcgKzM5NSw3IEBAIGJvb2wgSlNOUE9iamVjdDo6ZGVsZXRlUHJvcGVy
dHkoRXhlY1N0YXQKICAgICBOUFJ1bnRpbWVPYmplY3RNYXA6OlBsdWdpblByb3RlY3RvciBwcm90
ZWN0b3IobV9vYmplY3RNYXApOwogCiAgICAgewotICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICAgICAgSlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwogCiAgICAgICAgIC8v
IEZJWE1FOiBTaG91bGQgd2UgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIHJlbW92ZVByb3BlcnR5IHJl
dHVybnMgZmFsc2U/CiAgICAgICAgIGlmICghbV9ucE9iamVjdC0+X2NsYXNzLT5yZW1vdmVQcm9w
ZXJ0eShtX25wT2JqZWN0LCBwcm9wZXJ0eU5hbWUpKQpAQCAtNDMwLDcgKzQzMSw3IEBAIHZvaWQg
SlNOUE9iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU08KICAgICBOUFJ1bnRpbWVPYmplY3RN
YXA6OlBsdWdpblByb3RlY3RvciBwcm90ZWN0b3IodGhpc09iamVjdC0+bV9vYmplY3RNYXApOwog
ICAgIAogICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpT
RE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKIAogICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdl
IHRocm93IGFuIGV4Y2VwdGlvbiBpZiBlbnVtZXJhdGUgcmV0dXJucyBmYWxzZT8KICAgICAgICAg
aWYgKCF0aGlzT2JqZWN0LT5tX25wT2JqZWN0LT5fY2xhc3MtPmVudW1lcmF0ZSh0aGlzT2JqZWN0
LT5tX25wT2JqZWN0LCAmaWRlbnRpZmllcnMsICZpZGVudGlmaWVyQ291bnQpKQpAQCAtNDgxLDcg
KzQ4Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTTlBPYmplY3Q6OnByb3BlcnR5R2V0dGUKICAgICAK
ICAgICBib29sIHJldHVyblZhbHVlOwogICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgICAgIEpT
TG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKICAgICAgICAgTlBJ
ZGVudGlmaWVyIG5wSWRlbnRpZmllciA9IG5wSWRlbnRpZmllckZyb21JZGVudGlmaWVyKHByb3Bl
cnR5TmFtZSk7CiAgICAgICAgIC8vIElmIHRoZSBwcm9wZXJ0eU5hbWUgaXMgc3ltYm9sLgogICAg
ICAgICBpZiAoIW5wSWRlbnRpZmllcikKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHJldmlzaW9uIDIwOTY3OCkKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2
LDYgKzExNiw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvQXJjaGl2ZVJlc291cmNlLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9DaHJvbWUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0NvbW1vblZNLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RhdGFUcmFu
c2Zlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGF0YWJhc2VNYW5hZ2VyLmg+CkBAIC0yNzExLDcg
KzI3MTIsNyBAQCB2b2lkIFdlYlBhZ2U6OnJ1bkphdmFTY3JpcHRJbk1haW5GcmFtZShjCiAgICAg
Ly8gZGlzYXBwZWFyIGR1cmluZyBzY3JpcHQgZXhlY3V0aW9uLgogCiAgICAgUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFJlc3VsdFZhbHVlOwotICAgIEpTTG9ja0hvbGRl
ciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhj
b21tb25WTSgpKTsKICAgICBib29sIGhhZEV4Y2VwdGlvbiA9IHRydWU7CiAgICAgRXhjZXB0aW9u
RGV0YWlscyBkZXRhaWxzOwogICAgIGlmIChKU1ZhbHVlIHJlc3VsdFZhbHVlID0gbV9tYWluRnJh
bWUtPmNvcmVGcmFtZSgpLT5zY3JpcHQoKS5leGVjdXRlU2NyaXB0KHNjcmlwdCwgdHJ1ZSwgJmRl
dGFpbHMpKSB7CkBAIC01NDYyLDEyICs1NDYzLDEyIEBAIHZvaWQgV2ViUGFnZTo6dXBkYXRlQ2Fj
aGVkRG9jdW1lbnRMb2FkZXIKIAogdm9pZCBXZWJQYWdlOjpnZXRCeXRlY29kZVByb2ZpbGUodWlu
dDY0X3QgY2FsbGJhY2tJRCkKIHsKLSAgICBpZiAoIUpTRE9NV2luZG93Ojpjb21tb25WTSgpLm1f
cGVyQnl0ZWNvZGVQcm9maWxlcikgeworICAgIGlmICghY29tbW9uVk0oKS5tX3BlckJ5dGVjb2Rl
UHJvZmlsZXIpIHsKICAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTdHJpbmdD
YWxsYmFjayhTdHJpbmcoKSwgY2FsbGJhY2tJRCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgU3RyaW5nIHJlc3VsdCA9IEpTRE9NV2luZG93Ojpjb21tb25WTSgpLm1fcGVyQnl0ZWNv
ZGVQcm9maWxlci0+dG9KU09OKCk7CisgICAgU3RyaW5nIHJlc3VsdCA9IGNvbW1vblZNKCkubV9w
ZXJCeXRlY29kZVByb2ZpbGVyLT50b0pTT04oKTsKICAgICBBU1NFUlQocmVzdWx0Lmxlbmd0aCgp
KTsKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlN0cmluZ0NhbGxiYWNrKHJlc3Vs
dCwgY2FsbGJhY2tJRCkpOwogfQpAQCAtNTQ3NSw3ICs1NDc2LDcgQEAgdm9pZCBXZWJQYWdlOjpn
ZXRCeXRlY29kZVByb2ZpbGUodWludDY0Xwogdm9pZCBXZWJQYWdlOjpnZXRTYW1wbGluZ1Byb2Zp
bGVyT3V0cHV0KHVpbnQ2NF90IGNhbGxiYWNrSUQpCiB7CiAjaWYgRU5BQkxFKFNBTVBMSU5HX1BS
T0ZJTEVSKQotICAgIFNhbXBsaW5nUHJvZmlsZXIqIHNhbXBsaW5nUHJvZmlsZXIgPSBKU0RPTVdp
bmRvdzo6Y29tbW9uVk0oKS5zYW1wbGluZ1Byb2ZpbGVyKCk7CisgICAgU2FtcGxpbmdQcm9maWxl
ciogc2FtcGxpbmdQcm9maWxlciA9IGNvbW1vblZNKCkuc2FtcGxpbmdQcm9maWxlcigpOwogICAg
IGlmICghc2FtcGxpbmdQcm9maWxlcikgewogICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OkludmFsaWRhdGVTdHJpbmdDYWxsYmFjayhjYWxsYmFja0lEKSk7CiAgICAgICAgIHJl
dHVybjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwOTY3OCkKKysrIFNvdXJjZS9X
ZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ3IEBACisyMDE2
LTEyLTEwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgVGhlIERP
TSBzaG91bGQgaGF2ZSBhbiBhZHZhbmNpbmcgd2F2ZWZyb250IG9wYXF1ZSByb290IGJhcnJpZXIK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTcxMgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAg
UHJvcGFnYXRlIHRoZSBKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkgLT4gY29tbW9uVk0oKSBj
aGFuZ2UuCisKKyAgICAgICAgKiBNaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tOgorICAgICAgICAo
K1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0T2JqZWN0c0NvdW50XSk6CisgICAgICAgICgr
W1dlYkNvcmVTdGF0aXN0aWNzIGphdmFTY3JpcHRHbG9iYWxPYmplY3RzQ291bnRdKToKKyAgICAg
ICAgKCtbV2ViQ29yZVN0YXRpc3RpY3MgamF2YVNjcmlwdFByb3RlY3RlZE9iamVjdHNDb3VudF0p
OgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0UHJvdGVjdGVkR2xvYmFs
T2JqZWN0c0NvdW50XSk6CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNzIGphdmFTY3JpcHRQ
cm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzXSk6CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNz
IGphdmFTY3JpcHRPYmplY3RUeXBlQ291bnRzXSk6CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0
aWNzIHNob3VsZFByaW50RXhjZXB0aW9uc10pOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGlj
cyBzZXRTaG91bGRQcmludEV4Y2VwdGlvbnM6XSk6CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0
aWNzIG1lbW9yeVN0YXRpc3RpY3NdKToKKyAgICAgICAgKCtbV2ViQ29yZVN0YXRpc3RpY3MgamF2
YVNjcmlwdFJlZmVyZW5jZWRPYmplY3RzQ291bnRdKToKKyAgICAgICAgKiBQbHVnaW5zL0hvc3Rl
ZC9OZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5tbToKKyAgICAgICAgKGlkZW50aWZpZXJGcm9tSWRl
bnRpZmllclJlcCk6CisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0YW5jZS5tbToK
KyAgICAgICAgKFdlYktpdDo6UHJveHlJbnN0YW5jZTo6Z2V0UHJvcGVydHlOYW1lcyk6CisgICAg
ICAgICogUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblN0cmVhbS5tbToKKyAgICAgICAgKFdlYk5l
dHNjYXBlUGx1Z2luU3RyZWFtOjp3YW50c0FsbFN0cmVhbXMpOgorICAgICAgICAqIFBsdWdpbnMv
V2ViTmV0c2NhcGVQbHVnaW5WaWV3Lm1tOgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZp
ZXcgc2VuZEV2ZW50OmlzRHJhd1JlY3Q6XSk6CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2lu
VmlldyBwcml2YXRlQnJvd3NpbmdNb2RlRGlkQ2hhbmdlXSk6CisgICAgICAgICgtW1dlYk5ldHNj
YXBlUGx1Z2luVmlldyBzZXRXaW5kb3dJZk5lY2Vzc2FyeV0pOgorICAgICAgICAoLVtXZWJOZXRz
Y2FwZVBsdWdpblZpZXcgY3JlYXRlUGx1Z2luU2NyaXB0YWJsZU9iamVjdF0pOgorICAgICAgICAo
LVtXZWJOZXRzY2FwZVBsdWdpblZpZXcgZ2V0Rm9ybVZhbHVlOl0pOgorICAgICAgICAoLVtXZWJO
ZXRzY2FwZVBsdWdpblZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0UGx1Z2luUmVxdWVzdDpdKToKKyAg
ICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3IHdlYkZyYW1lOmRpZEZpbmlzaExvYWRXaXRo
UmVhc29uOl0pOgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZpZXcgbG9hZFBsdWdpblJl
cXVlc3Q6XSk6CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBfcHJpbnRlZFBsdWdp
bkJpdG1hcF0pOgorICAgICAgICAqIFBsdWdpbnMvV2ViUGx1Z2luQ29udHJvbGxlci5tbToKKyAg
ICAgICAgKC1bV2ViUGx1Z2luQ29udHJvbGxlciBwbHVnSW5WaWV3V2l0aEFyZ3VtZW50czpmcm9t
UGx1Z2luUGFja2FnZTpdKToKKyAgICAgICAgKC1bV2ViUGx1Z2luQ29udHJvbGxlciBzdG9wT25l
UGx1Z2luOl0pOgorICAgICAgICAoLVtXZWJQbHVnaW5Db250cm9sbGVyIHN0b3BPbmVQbHVnaW5G
b3JQYWdlQ2FjaGU6XSk6CisgICAgICAgICgtW1dlYlBsdWdpbkNvbnRyb2xsZXIgZGVzdHJveU9u
ZVBsdWdpbjpdKToKKyAgICAgICAgKC1bV2ViUGx1Z2luQ29udHJvbGxlciBzdGFydEFsbFBsdWdp
bnNdKToKKyAgICAgICAgKC1bV2ViUGx1Z2luQ29udHJvbGxlciBhZGRQbHVnaW46XSk6CisKIDIw
MTYtMTItMDkgIERhdmUgSHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CiAKICAgICAgICAgW0NTUyBQ
YXJzZXJdIFJlbW92ZSB0aGUgb2xkIENTUyBQYXJzZXIKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFj
L01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9t
YWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQkocmV2aXNpb24gMjA5Njc4KQorKysgU291cmNl
L1dlYktpdC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQkod29ya2luZyBjb3B5KQpAQCAt
MzMsNiArMzMsNyBAQAogI2ltcG9ydCAiV2ViRnJhbWVJbnRlcm5hbC5oIgogI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvSlNMb2NrLmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9NZW1vcnlTdGF0
aXN0aWNzLmg+CisjaW1wb3J0IDxXZWJDb3JlL0NvbW1vblZNLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0ZvbnRDYWNoZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9HQ0NvbnRyb2xsZXIuaD4KQEAgLTU4LDM1ICs1OSwzNSBAQCArIChOU0FycmF5ICopc3RhdGlz
dGljcwogCiArIChzaXplX3QpamF2YVNjcmlwdE9iamVjdHNDb3VudAogewotICAgIEpTTG9ja0hv
bGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsKLSAgICByZXR1cm4gSlNET01XaW5k
b3c6OmNvbW1vblZNKCkuaGVhcC5vYmplY3RDb3VudCgpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
KGNvbW1vblZNKCkpOworICAgIHJldHVybiBjb21tb25WTSgpLmhlYXAub2JqZWN0Q291bnQoKTsK
IH0KIAogKyAoc2l6ZV90KWphdmFTY3JpcHRHbG9iYWxPYmplY3RzQ291bnQKIHsKLSAgICBKU0xv
Y2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7Ci0gICAgcmV0dXJuIEpTRE9N
V2luZG93Ojpjb21tb25WTSgpLmhlYXAuZ2xvYmFsT2JqZWN0Q291bnQoKTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9jayhjb21tb25WTSgpKTsKKyAgICByZXR1cm4gY29tbW9uVk0oKS5oZWFwLmdsb2Jh
bE9iamVjdENvdW50KCk7CiB9CiAKICsgKHNpemVfdClqYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0
c0NvdW50CiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkp
OwotICAgIHJldHVybiBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS5oZWFwLnByb3RlY3RlZE9iamVj
dENvdW50KCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7CisgICAgcmV0dXJu
IGNvbW1vblZNKCkuaGVhcC5wcm90ZWN0ZWRPYmplY3RDb3VudCgpOwogfQogCiArIChzaXplX3Qp
amF2YVNjcmlwdFByb3RlY3RlZEdsb2JhbE9iamVjdHNDb3VudAogewotICAgIEpTTG9ja0hvbGRl
ciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsKLSAgICByZXR1cm4gSlNET01XaW5kb3c6
OmNvbW1vblZNKCkuaGVhcC5wcm90ZWN0ZWRHbG9iYWxPYmplY3RDb3VudCgpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrKGNvbW1vblZNKCkpOworICAgIHJldHVybiBjb21tb25WTSgpLmhlYXAucHJv
dGVjdGVkR2xvYmFsT2JqZWN0Q291bnQoKTsKIH0KIAogKyAoTlNDb3VudGVkU2V0ICopamF2YVNj
cmlwdFByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhK
U0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0o
KSk7CiAgICAgCiAgICAgTlNDb3VudGVkU2V0ICpyZXN1bHQgPSBbTlNDb3VudGVkU2V0IHNldF07
CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZUNvdW50U2V0PiBjb3VudHMoSlNET01XaW5kb3c6
OmNvbW1vblZNKCkuaGVhcC5wcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKCkpOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxUeXBlQ291bnRTZXQ+IGNvdW50cyhjb21tb25WTSgpLmhlYXAucHJvdGVjdGVk
T2JqZWN0VHlwZUNvdW50cygpKTsKICAgICBIYXNoQ291bnRlZFNldDxjb25zdCBjaGFyKj46Oml0
ZXJhdG9yIGVuZCA9IGNvdW50cy0+ZW5kKCk7CiAgICAgZm9yIChIYXNoQ291bnRlZFNldDxjb25z
dCBjaGFyKj46Oml0ZXJhdG9yIGl0ID0gY291bnRzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdC0+dmFsdWU7ICsraSkKQEAgLTk3
LDExICs5OCwxMSBAQCArIChOU0NvdW50ZWRTZXQgKilqYXZhU2NyaXB0UHJvdGVjdGVkT2JqCiAK
ICsgKE5TQ291bnRlZFNldCAqKWphdmFTY3JpcHRPYmplY3RUeXBlQ291bnRzCiB7Ci0gICAgSlNM
b2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrKGNvbW1vblZNKCkpOwogICAgIAogICAgIE5TQ291bnRlZFNldCAqcmVzdWx0ID0gW05T
Q291bnRlZFNldCBzZXRdOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPFR5cGVDb3VudFNldD4gY291
bnRzKEpTRE9NV2luZG93Ojpjb21tb25WTSgpLmhlYXAub2JqZWN0VHlwZUNvdW50cygpKTsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZUNvdW50U2V0PiBjb3VudHMoY29tbW9uVk0oKS5oZWFwLm9i
amVjdFR5cGVDb3VudHMoKSk7CiAgICAgSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+OjppdGVy
YXRvciBlbmQgPSBjb3VudHMtPmVuZCgpOwogICAgIGZvciAoSGFzaENvdW50ZWRTZXQ8Y29uc3Qg
Y2hhcio+OjppdGVyYXRvciBpdCA9IGNvdW50cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXQtPnZhbHVlOyArK2kpCkBAIC0xNjcs
MTMgKzE2OCwxMyBAQCArIChzaXplX3QpZ2x5cGhQYWdlQ291bnQKIAogKyAoQk9PTClzaG91bGRQ
cmludEV4Y2VwdGlvbnMKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29t
bW9uVk0oKSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7CiAgICAgcmV0dXJu
IFBhZ2VDb25zb2xlQ2xpZW50OjpzaG91bGRQcmludEV4Y2VwdGlvbnMoKTsKIH0KIAogKyAodm9p
ZClzZXRTaG91bGRQcmludEV4Y2VwdGlvbnM6KEJPT0wpcHJpbnQKIHsKLSAgICBKU0xvY2tIb2xk
ZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
Y29tbW9uVk0oKSk7CiAgICAgUGFnZUNvbnNvbGVDbGllbnQ6OnNldFNob3VsZFByaW50RXhjZXB0
aW9ucyhwcmludCk7CiB9CiAKQEAgLTIwMSw5ICsyMDIsOSBAQCArIChOU0RpY3Rpb25hcnkgKilt
ZW1vcnlTdGF0aXN0aWNzCiB7CiAgICAgV1RGOjpGYXN0TWFsbG9jU3RhdGlzdGljcyBmYXN0TWFs
bG9jU3RhdGlzdGljcyA9IFdURjo6ZmFzdE1hbGxvY1N0YXRpc3RpY3MoKTsKICAgICAKLSAgICBK
U0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7Ci0gICAgc2l6ZV90IGhl
YXBTaXplID0gSlNET01XaW5kb3c6OmNvbW1vblZNKCkuaGVhcC5zaXplKCk7Ci0gICAgc2l6ZV90
IGhlYXBGcmVlID0gSlNET01XaW5kb3c6OmNvbW1vblZNKCkuaGVhcC5jYXBhY2l0eSgpIC0gaGVh
cFNpemU7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7CisgICAgc2l6ZV90IGhl
YXBTaXplID0gY29tbW9uVk0oKS5oZWFwLnNpemUoKTsKKyAgICBzaXplX3QgaGVhcEZyZWUgPSBj
b21tb25WTSgpLmhlYXAuY2FwYWNpdHkoKSAtIGhlYXBTaXplOwogICAgIEdsb2JhbE1lbW9yeVN0
YXRpc3RpY3MgZ2xvYmFsTWVtb3J5U3RhdHMgPSBnbG9iYWxNZW1vcnlTdGF0aXN0aWNzKCk7CiAg
ICAgCiAgICAgcmV0dXJuIFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5
czoKQEAgLTI0Niw4ICsyNDcsOCBAQCArIChzaXplX3QpamF2YVNjcmlwdE5vR0NBbGxvd2VkT2Jq
ZWN0c0NvCiAKICsgKHNpemVfdClqYXZhU2NyaXB0UmVmZXJlbmNlZE9iamVjdHNDb3VudAogewot
ICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsKLSAgICByZXR1
cm4gSlNET01XaW5kb3c6OmNvbW1vblZNKCkuaGVhcC5wcm90ZWN0ZWRPYmplY3RDb3VudCgpOwor
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGNvbW1vblZNKCkpOworICAgIHJldHVybiBjb21tb25WTSgp
LmhlYXAucHJvdGVjdGVkT2JqZWN0Q291bnQoKTsKIH0KIAogKyAoTlNTZXQgKilqYXZhU2NyaXB0
Um9vdE9iamVjdENsYXNzZXMKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0
c2NhcGVQbHVnaW5TdHJlYW0ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvUGx1
Z2lucy9XZWJOZXRzY2FwZVBsdWdpblN0cmVhbS5tbQkocmV2aXNpb24gMjA5Njc4KQorKysgU291
cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblN0cmVhbS5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2ltcG9ydCAiV2ViUmVzb3VyY2VMb2FkU2NoZWR1
bGVyLmgiCiAjaW1wb3J0IDxGb3VuZGF0aW9uL05TVVJMUmVzcG9uc2UuaD4KICNpbXBvcnQgPFdl
YkNvcmUvQ0ZOZXR3b3JrU1BJLmg+CisjaW1wb3J0IDxXZWJDb3JlL0NvbW1vblZNLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0RvY3VtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0RvY3VtZW50TG9hZGVy
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+CkBAIC0zNzcsNyArMzc4LDcgQEAgYm9vbCBX
ZWJOZXRzY2FwZVBsdWdpblN0cmVhbTo6d2FudHNBbGxTdAogICAgIE5QRXJyb3IgZXJyb3I7CiAg
ICAgewogICAgICAgICBQbHVnaW5TdG9wRGVmZXJyZXIgZGVmZXJyZXIobV9wbHVnaW5WaWV3Lmdl
dCgpKTsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNE
T01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoY29tbW9uVk0oKSk7CiAgICAgICAgIGVycm9yID0gbV9wbHVnaW5G
dW5jcy0+Z2V0dmFsdWUobV9wbHVnaW4sIE5QUFZwbHVnaW5XYW50c0FsbE5ldHdvcmtTdHJlYW1z
LCAmdmFsdWUpOwogICAgIH0KICAgICBpZiAoZXJyb3IgIT0gTlBFUlJfTk9fRVJST1IpCkluZGV4
OiBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmll
dy5tbQkocmV2aXNpb24gMjA5Njc4KQorKysgU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJO
ZXRzY2FwZVBsdWdpblZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDcgQEAKICNp
bXBvcnQgIldlYlVJRGVsZWdhdGVQcml2YXRlLmgiCiAjaW1wb3J0ICJXZWJWaWV3SW50ZXJuYWwu
aCIKICNpbXBvcnQgPENhcmJvbi9DYXJib24uaD4KKyNpbXBvcnQgPFdlYkNvcmUvQ29tbW9uVk0u
aD4KICNpbXBvcnQgPFdlYkNvcmUvQ29va2llSmFyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0RvY3Vt
ZW50TG9hZGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0VsZW1lbnQuaD4KQEAgLTY2NSw3ICs2NjYs
NyBAQCAtIChCT09MKXNlbmRFdmVudDoodm9pZCopZXZlbnQgaXNEcmF3UmVjCiAgICAgLy8gU2V0
IHRoZSBwbHVnaW5BbGxvd1BvcHVwIGZsYWcuCiAgICAgQVNTRVJUKF9ldmVudEhhbmRsZXIpOwog
ICAgIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNE
T01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoY29tbW9uVk0oKSk7CiAgICAgICAgIFVzZXJHZXN0dXJlSW5kaWNh
dG9yIGdlc3R1cmVJbmRpY2F0b3IoX2V2ZW50SGFuZGxlci0+Y3VycmVudEV2ZW50SXNVc2VyR2Vz
dHVyZSgpID8gc3RkOjpvcHRpb25hbDxQcm9jZXNzaW5nVXNlckdlc3R1cmVTdGF0ZT4oUHJvY2Vz
c2luZ1VzZXJHZXN0dXJlKSA6IHN0ZDo6bnVsbG9wdCk7CiAgICAgICAgIGFjY2VwdGVkRXZlbnQg
PSBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT5ldmVudChwbHVnaW4sIGV2ZW50
KTsKICAgICB9CkBAIC04NDEsNyArODQyLDcgQEAgLSAodm9pZClwcml2YXRlQnJvd3NpbmdNb2Rl
RGlkQ2hhbmdlCiAKICAgICBbc2VsZiB3aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKICAgICB7Ci0g
ICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93
QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKGNvbW1vblZNKCkpOwogICAgICAgICBpZiAoW19wbHVnaW5QYWNrYWdlLmdldCgp
IHBsdWdpbkZ1bmNzXS0+c2V0dmFsdWUpCiAgICAgICAgICAgICBbX3BsdWdpblBhY2thZ2UuZ2V0
KCkgcGx1Z2luRnVuY3NdLT5zZXR2YWx1ZShwbHVnaW4sIE5QTlZwcml2YXRlTW9kZUJvb2wsICZ2
YWx1ZSk7CiAgICAgfQpAQCAtOTgyLDcgKzk4Myw3IEBAIC0gKHZvaWQpc2V0V2luZG93SWZOZWNl
c3NhcnkKICAgICAgICAgaW5TZXRXaW5kb3cgPSBZRVM7ICAgICAgICAKICAgICAgICAgW3NlbGYg
d2lsbENhbGxQbHVnSW5GdW5jdGlvbl07CiAgICAgICAgIHsKLSAgICAgICAgICAgIEpTQzo6SlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0o
KSk7CisgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhj
b21tb25WTSgpKTsKICAgICAgICAgICAgIG5wRXJyID0gW19wbHVnaW5QYWNrYWdlLmdldCgpIHBs
dWdpbkZ1bmNzXS0+c2V0d2luZG93KHBsdWdpbiwgJndpbmRvdyk7CiAgICAgICAgIH0KICAgICAg
ICAgW3NlbGYgZGlkQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKQEAgLTEzNTIsNyArMTM1Myw3IEBAIC0g
KE5QT2JqZWN0ICopY3JlYXRlUGx1Z2luU2NyaXB0YWJsZU9iamUKICAgICBOUEVycm9yIGVycm9y
OwogICAgIFtzZWxmIHdpbGxDYWxsUGx1Z0luRnVuY3Rpb25dOwogICAgIHsKLSAgICAgICAgSlND
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21t
b25WTSgpKTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3Mo
Y29tbW9uVk0oKSk7CiAgICAgICAgIGVycm9yID0gW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdp
bkZ1bmNzXS0+Z2V0dmFsdWUocGx1Z2luLCBOUFBWcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0LCAm
dmFsdWUpOwogICAgIH0KICAgICBbc2VsZiBkaWRDYWxsUGx1Z0luRnVuY3Rpb25dOwpAQCAtMTM3
MSw3ICsxMzcyLDcgQEAgLSAoQk9PTClnZXRGb3JtVmFsdWU6KE5TU3RyaW5nICoqKXZhbHVlCiAg
ICAgTlBFcnJvciBlcnJvcjsKICAgICBbc2VsZiB3aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKICAg
ICB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9N
V2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwogICAgICAgICBlcnJvciA9IFtfcGx1Z2luUGFj
a2FnZS5nZXQoKSBwbHVnaW5GdW5jc10tPmdldHZhbHVlKHBsdWdpbiwgTlBQVmZvcm1WYWx1ZSwg
JmJ1ZmZlcik7CiAgICAgfQogICAgIFtzZWxmIGRpZENhbGxQbHVnSW5GdW5jdGlvbl07CkBAIC0x
NTAzLDcgKzE1MDQsNyBAQCAtICh2b2lkKWV2YWx1YXRlSmF2YVNjcmlwdFBsdWdpblJlcXVlc3Q6
CiAgICAgICAgIGlmIChbSlNQbHVnaW5SZXF1ZXN0IHNlbmROb3RpZmljYXRpb25dKSB7CiAgICAg
ICAgICAgICBbc2VsZiB3aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RP
TVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwogICAgICAgICAgICAgICAgIFtf
cGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5GdW5jc10tPnVybG5vdGlmeShwbHVnaW4sIFtVUkwg
X3dlYl9VUkxDU3RyaW5nXSwgTlBSRVNfRE9ORSwgW0pTUGx1Z2luUmVxdWVzdCBub3RpZnlEYXRh
XSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBbc2VsZiBkaWRDYWxsUGx1Z0luRnVuY3Rp
b25dOwpAQCAtMTUzNSw3ICsxNTM2LDcgQEAgLSAodm9pZCl3ZWJGcmFtZTooV2ViRnJhbWUgKil3
ZWJGcmFtZSBkaQogICAgICAgICAKICAgICBbc2VsZiB3aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uXTsK
ICAgICB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpT
RE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwogICAgICAgICBbX3BsdWdpblBhY2thZ2Uu
Z2V0KCkgcGx1Z2luRnVuY3NdLT51cmxub3RpZnkocGx1Z2luLCBbW1twbHVnaW5SZXF1ZXN0IHJl
cXVlc3RdIFVSTF0gX3dlYl9VUkxDU3RyaW5nXSwgcmVhc29uLCBbcGx1Z2luUmVxdWVzdCBub3Rp
ZnlEYXRhXSk7CiAgICAgfQogICAgIFtzZWxmIGRpZENhbGxQbHVnSW5GdW5jdGlvbl07CkBAIC0x
NTc5LDcgKzE1ODAsNyBAQCAtICh2b2lkKWxvYWRQbHVnaW5SZXF1ZXN0OihXZWJQbHVnaW5SZXF1
CiAgICAgICAgICAgICAgICAgaWYgKFtwbHVnaW5SZXF1ZXN0IHNlbmROb3RpZmljYXRpb25dKSB7
CiAgICAgICAgICAgICAgICAgICAgIFtzZWxmIHdpbGxDYWxsUGx1Z0luRnVuY3Rpb25dOwogICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoY29tbW9uVk0oKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBbX3BsdWdpblBhY2th
Z2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT51cmxub3RpZnkocGx1Z2luLCBbW1twbHVnaW5SZXF1ZXN0
IHJlcXVlc3RdIFVSTF0gX3dlYl9VUkxDU3RyaW5nXSwgTlBFUlJfR0VORVJJQ19FUlJPUiwgW3Bs
dWdpblJlcXVlc3Qgbm90aWZ5RGF0YV0pOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgIFtzZWxmIGRpZENhbGxQbHVnSW5GdW5jdGlvbl07CkBAIC0yMzY5LDcgKzIz
NzAsNyBAQCAtIChOU0JpdG1hcEltYWdlUmVwICopX3ByaW50ZWRQbHVnaW5CaXRtCiAgICAgLy8g
VGVsbCB0aGUgcGx1Z2luIHRvIHByaW50IGludG8gdGhlIEdXb3JsZAogICAgIFtzZWxmIHdpbGxD
YWxsUGx1Z0luRnVuY3Rpb25dOwogICAgIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICAgICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoY29tbW9uVk0oKSk7CiAgICAg
ICAgIFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5GdW5jc10tPnByaW50KHBsdWdpbiwgJm5w
UHJpbnQpOwogICAgIH0KICAgICBbc2VsZiBkaWRDYWxsUGx1Z0luRnVuY3Rpb25dOwpJbmRleDog
U291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJQbHVnaW5Db250cm9sbGVyLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViUGx1Z2luQ29udHJvbGxlci5tbQko
cmV2aXNpb24gMjA5Njc4KQorKysgU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJQbHVnaW5D
b250cm9sbGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBACiAjaW1wb3J0ICJX
ZWJVSURlbGVnYXRlLmgiCiAjaW1wb3J0ICJXZWJWaWV3SW50ZXJuYWwuaCIKICNpbXBvcnQgPEZv
dW5kYXRpb24vTlNVUkxSZXF1ZXN0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0NvbW1vblZNLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL0RvY3VtZW50TG9hZGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1l
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZFJlcXVlc3QuaD4KQEAgLTEzMiwxNiArMTMz
LDE2IEBAIC0gKE5TVmlldyAqKXBsdWdJblZpZXdXaXRoQXJndW1lbnRzOihOU0QKICNpZiBQTEFU
Rk9STShJT1MpCiAgICAgewogICAgICAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW19kb2N1bWVudFZp
ZXcgX3dlYlZpZXddOwotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgICAgICBKU0M6OkpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKICAgICAgICAgdmlldyA9IFtb
d2ViVmlldyBfVUlLaXREZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3IHBsdWdJblZp
ZXdXaXRoQXJndW1lbnRzOmFyZ3VtZW50cyBmcm9tUGx1Z0luUGFja2FnZTpwbHVnaW5QYWNrYWdl
XTsKICAgICB9CiAjZWxzZQogICAgIENsYXNzIHZpZXdGYWN0b3J5ID0gW3BsdWdpblBhY2thZ2Ug
dmlld0ZhY3RvcnldOwogICAgIGlmIChbdmlld0ZhY3RvcnkgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3RvcihwbHVnSW5WaWV3V2l0aEFyZ3VtZW50czopXSkgewotICAgICAgICBKU0M6OkpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkp
OworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25W
TSgpKTsKICAgICAgICAgdmlldyA9IFt2aWV3RmFjdG9yeSBwbHVnSW5WaWV3V2l0aEFyZ3VtZW50
czphcmd1bWVudHNdOwogICAgIH0gZWxzZSBpZiAoW3ZpZXdGYWN0b3J5IHJlc3BvbmRzVG9TZWxl
Y3RvcjpAc2VsZWN0b3IocGx1Z2luVmlld1dpdGhBcmd1bWVudHM6KV0pIHsKLSAgICAgICAgSlND
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21t
b25WTSgpKTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3Mo
Y29tbW9uVk0oKSk7CiAgICAgICAgIHZpZXcgPSBbdmlld0ZhY3RvcnkgcGx1Z2luVmlld1dpdGhB
cmd1bWVudHM6YXJndW1lbnRzXTsKICAgICB9CiAjZW5kaWYKQEAgLTIyNCwxMCArMjI1LDEwIEBA
IC0gKENBTGF5ZXIgKilzdXBlcmxheWVyRm9yUGx1Z2luVmlldzooTlMKIC0gKHZvaWQpc3RvcE9u
ZVBsdWdpbjooTlNWaWV3ICopdmlldwogewogICAgIGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0
b3I6QHNlbGVjdG9yKHdlYlBsdWdJblN0b3ApXSkgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAg
ICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsK
ICAgICAgICAgW3ZpZXcgd2ViUGx1Z0luU3RvcF07CiAgICAgfSBlbHNlIGlmIChbdmlldyByZXNw
b25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHBsdWdpblN0b3ApXSkgewotICAgICAgICBKU0M6OkpT
TG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZN
KCkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21t
b25WTSgpKTsKICAgICAgICAgW3ZpZXcgcGx1Z2luU3RvcF07CiAgICAgfQogfQpAQCAtMjM2LDcg
KzIzNyw3IEBAIC0gKHZvaWQpc3RvcE9uZVBsdWdpbjooTlNWaWV3ICopdmlldwogLSAodm9pZClz
dG9wT25lUGx1Z2luRm9yUGFnZUNhY2hlOihOU1ZpZXcgKil2aWV3CiB7CiAgICAgaWYgKFt2aWV3
IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViUGx1Z0luU3RvcEZvclBhZ2VDYWNoZSld
KSB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9N
V2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwogICAgICAgICBbdmlldyB3ZWJQbHVnSW5TdG9w
Rm9yUGFnZUNhY2hlXTsKICAgICB9IGVsc2UKICAgICAgICAgW3NlbGYgc3RvcE9uZVBsdWdpbjp2
aWV3XTsKQEAgLTI0NiwxMCArMjQ3LDEwIEBAIC0gKHZvaWQpc3RvcE9uZVBsdWdpbkZvclBhZ2VD
YWNoZTooTlNWaWUKIC0gKHZvaWQpZGVzdHJveU9uZVBsdWdpbjooTlNWaWV3ICopdmlldwogewog
ICAgIGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlBsdWdJbkRlc3Ry
b3kpXSkgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhK
U0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKICAgICAgICAgW3ZpZXcgd2ViUGx1Z0lu
RGVzdHJveV07CiAgICAgfSBlbHNlIGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVj
dG9yKHBsdWdpbkRlc3Ryb3kpXSkgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgICAgICBKU0M6
OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKICAgICAgICAg
W3ZpZXcgcGx1Z2luRGVzdHJveV07CiAgICAgfQogfQpAQCAtMjY2LDEwICsyNjcsMTAgQEAgLSAo
dm9pZClzdGFydEFsbFBsdWdpbnMKICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKysp
IHsKICAgICAgICAgaWQgYVZpZXcgPSBbX3ZpZXdzIG9iamVjdEF0SW5kZXg6aV07CiAgICAgICAg
IGlmIChbYVZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJQbHVnSW5TdGFydCld
KSB7Ci0gICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhK
U0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoY29tbW9uVk0oKSk7CiAgICAgICAgICAgICBbYVZpZXcg
d2ViUGx1Z0luU3RhcnRdOwogICAgICAgICB9IGVsc2UgaWYgKFthVmlldyByZXNwb25kc1RvU2Vs
ZWN0b3I6QHNlbGVjdG9yKHBsdWdpblN0YXJ0KV0pIHsKLSAgICAgICAgICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7
CisgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21t
b25WTSgpKTsKICAgICAgICAgICAgIFthVmlldyBwbHVnaW5TdGFydF07CiAgICAgICAgIH0KICAg
ICB9CkBAIC0zNDUsMTAgKzM0NiwxMCBAQCAtICh2b2lkKWFkZFBsdWdpbjooTlNWaWV3ICopdmll
dwogCiAgICAgICAgIExPRyhQbHVnaW5zLCAiaW5pdGlhbGl6aW5nIHBsdWctaW4gJUAiLCB2aWV3
KTsKICAgICAgICAgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViUGx1
Z0luSW5pdGlhbGl6ZSldKSB7Ci0gICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgICAgICAgICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoY29tbW9uVk0oKSk7CiAgICAg
ICAgICAgICBbdmlldyB3ZWJQbHVnSW5Jbml0aWFsaXplXTsKICAgICAgICAgfSBlbHNlIGlmIChb
dmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHBsdWdpbkluaXRpYWxpemUpXSkgewot
ICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01X
aW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwogICAgICAgICAgICAgW3ZpZXcgcGx1Z2lu
SW5pdGlhbGl6ZV07CiAgICAgICAgIH0KIApAQCAtMzYwLDE1ICszNjEsMTUgQEAgLSAodm9pZClh
ZGRQbHVnaW46KE5TVmlldyAqKXZpZXcKICAgICAgICAgaWYgKF9zdGFydGVkKSB7CiAgICAgICAg
ICAgICBMT0coUGx1Z2lucywgInN0YXJ0aW5nIHBsdWctaW4gJUAiLCB2aWV3KTsKICAgICAgICAg
ICAgIGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlBsdWdJblN0YXJ0
KV0pIHsKLSAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgICAgICAgICAgICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwogICAgICAgICAg
ICAgICAgIFt2aWV3IHdlYlBsdWdJblN0YXJ0XTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoW3Zp
ZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihwbHVnaW5TdGFydCldKSB7Ci0gICAgICAg
ICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5k
b3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKICAgICAgICAgICAgICAgICBbdmlldyBw
bHVnaW5TdGFydF07CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlm
IChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHNldENvbnRhaW5pbmdXaW5kb3c6
KV0pIHsKLSAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgICAgICAgICAgICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwogICAgICAgICAg
ICAgICAgIFt2aWV3IHNldENvbnRhaW5pbmdXaW5kb3c6W19kb2N1bWVudFZpZXcgd2luZG93XV07
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdp
bnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdFByb3h5Lm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdFByb3h5Lm1tCShy
ZXZpc2lvbiAyMDk2NzgpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRz
Y2FwZVBsdWdpbkhvc3RQcm94eS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAog
I2ltcG9ydCAiV2ViSG9zdGVkTmV0c2NhcGVQbHVnaW5WaWV3LmgiCiAjaW1wb3J0ICJXZWJLaXRT
eXN0ZW1JbnRlcmZhY2UuaCIKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0lkZW50aWZpZXJJbmxp
bmVzLmg+CisjaW1wb3J0IDxXZWJDb3JlL0NvbW1vblZNLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0Zy
YW1lLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0lkZW50aWZpZXJSZXAuaD4KICNpbXBvcnQgPFdlYkNv
cmUvU2NyaXB0Q29udHJvbGxlci5oPgpAQCAtNjI3LDcgKzYyOCw3IEBAIHN0YXRpYyBJZGVudGlm
aWVyIGlkZW50aWZpZXJGcm9tSWRlbnRpZmkKICAgICBBU1NFUlQoaWRlbnRpZmllci0+aXNTdHJp
bmcoKSk7CiAgIAogICAgIGNvbnN0IGNoYXIqIHN0ciA9IGlkZW50aWZpZXItPnN0cmluZygpOyAg
ICAKLSAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmSlNET01XaW5kb3c6OmNvbW1v
blZNKCksIFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soc3RyLCBzdHJsZW4oc3Ry
KSkpOworICAgIHJldHVybiBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZjb21tb25WTSgpLCBTdHJp
bmc6OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKHN0ciwgc3RybGVuKHN0cikpKTsKIH0KIAog
a2Vybl9yZXR1cm5fdCBXS1BDSW52b2tlKG1hY2hfcG9ydF90IGNsaWVudFBvcnQsIHVpbnQzMl90
IHBsdWdpbklELCB1aW50MzJfdCByZXF1ZXN0SUQsIHVpbnQzMl90IG9iamVjdElELCB1aW50NjRf
dCBzZXJ2ZXJJZGVudGlmaWVyLApJbmRleDogU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0
ZWQvUHJveHlJbnN0YW5jZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9QbHVn
aW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLm1tCShyZXZpc2lvbiAyMDk2NzgpCisrKyBTb3VyY2Uv
V2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbXBvcnQgIk5ldHNjYXBlUGx1Z2luSG9zdFByb3h5Lmgi
CiAjaW1wb3J0ICJQcm94eVJ1bnRpbWVPYmplY3QuaCIKKyNpbXBvcnQgPFdlYkNvcmUvQ29tbW9u
Vk0uaD4KICNpbXBvcnQgPFdlYkNvcmUvSWRlbnRpZmllclJlcC5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9KU0RPTVdpbmRvdy5oPgogI2ltcG9ydCA8V2ViQ29yZS9ucHJ1bnRpbWVfaW1wbC5oPgpAQCAt
MzI1LDcgKzMyNiw3IEBAIHZvaWQgUHJveHlJbnN0YW5jZTo6Z2V0UHJvcGVydHlOYW1lcyhFeGUK
IAogICAgICAgICBpZiAoaWRlbnRpZmllci0+aXNTdHJpbmcoKSkgewogICAgICAgICAgICAgY29u
c3QgY2hhciogc3RyID0gaWRlbnRpZmllci0+c3RyaW5nKCk7Ci0gICAgICAgICAgICBuYW1lQXJy
YXkuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcoJkpTRE9NV2luZG93Ojpjb21tb25WTSgpLCBT
dHJpbmc6OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKHN0ciwgc3RybGVuKHN0cikpKSk7Cisg
ICAgICAgICAgICBuYW1lQXJyYXkuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcoJmNvbW1vblZN
KCksIFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soc3RyLCBzdHJsZW4oc3RyKSkp
KTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBuYW1lQXJyYXkuYWRkKElkZW50aWZpZXI6
OmZyb20oZXhlYywgaWRlbnRpZmllci0+bnVtYmVyKCkpKTsKICAgICB9CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMDk2NzgpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNiBAQAorMjAxNi0xMi0xMCAgRmlsaXAgUGl6bG8g
IDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIFRoZSBET00gc2hvdWxkIGhhdmUgYW4gYWR2
YW5jaW5nIHdhdmVmcm9udCBvcGFxdWUgcm9vdCBiYXJyaWVyCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU3MTIKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFByb3BhZ2F0ZSB0aGUgSlNET01X
aW5kb3dCYXNlOjpjb21tb25WTSgpIC0+IGNvbW1vblZNKCkgY2hhbmdlLgorCisgICAgICAgICog
UGx1Z2lucy9QbHVnaW5WaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnN0
YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnN0b3ApOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6cGVyZm9ybVJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luVmlldzo6bnBPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cHJpdmF0
ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKiBQbHVnaW5zL1BsdWdpblZpZXdXaW4u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudCk6CisgICAgICAgIChXZWJD
b3JlOjpQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QpOgorICAgICAgICAqIFdlYkNvcmVTdGF0
aXN0aWNzLmNwcDoKKyAgICAgICAgKFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZhU2NyaXB0T2JqZWN0
c0NvdW50KToKKyAgICAgICAgKFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZhU2NyaXB0R2xvYmFsT2Jq
ZWN0c0NvdW50KToKKyAgICAgICAgKFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZhU2NyaXB0UHJvdGVj
dGVkT2JqZWN0c0NvdW50KToKKyAgICAgICAgKFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZhU2NyaXB0
UHJvdGVjdGVkR2xvYmFsT2JqZWN0c0NvdW50KToKKyAgICAgICAgKFdlYkNvcmVTdGF0aXN0aWNz
OjpqYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cyk6CisgICAgICAgIChXZWJDb3Jl
U3RhdGlzdGljczo6amF2YVNjcmlwdE9iamVjdFR5cGVDb3VudHMpOgorICAgICAgICAoV2ViQ29y
ZVN0YXRpc3RpY3M6OnNob3VsZFByaW50RXhjZXB0aW9ucyk6CisgICAgICAgIChXZWJDb3JlU3Rh
dGlzdGljczo6c2V0U2hvdWxkUHJpbnRFeGNlcHRpb25zKToKKyAgICAgICAgKFdlYkNvcmVTdGF0
aXN0aWNzOjptZW1vcnlTdGF0aXN0aWNzKToKKyAgICAgICAgKiBXZWJKYXZhU2NyaXB0Q29sbGVj
dG9yLmNwcDoKKyAgICAgICAgKFdlYkphdmFTY3JpcHRDb2xsZWN0b3I6Om9iamVjdENvdW50KToK
KwogMjAxNi0xMi0wOSAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIFRleHRQb3NpdGlvbiBhbmQgT3JkaW5hbE51bWJlciBzaG91bGQgYmUgbW9yZSBsaWtlIGlk
aW9tYXRpYyBudW1iZXJzCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3RhdGlzdGlj
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN0YXRpc3RpY3Mu
Y3BwCShyZXZpc2lvbiAyMDk2NzgpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3RhdGlz
dGljcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJDT01Q
cm9wZXJ0eUJhZy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTTG9jay5oPgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL01lbW9yeVN0YXRpc3RpY3MuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0NvbW1vblZNLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9ET01XaW5kb3cuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0ZvbnRDYWNoZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR0NDb250cm9sbGVyLmg+CkBA
IC0xMDMsOCArMTA0LDggQEAgSFJFU1VMVCBXZWJDb3JlU3RhdGlzdGljczo6amF2YVNjcmlwdE9i
agogICAgIGlmICghY291bnQpCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CiAKLSAgICBKU0xv
Y2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7Ci0gICAgKmNvdW50ID0gKFVJ
TlQpSlNET01XaW5kb3c6OmNvbW1vblZNKCkuaGVhcC5vYmplY3RDb3VudCgpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrKGNvbW1vblZNKCkpOworICAgICpjb3VudCA9IChVSU5UKWNvbW1vblZNKCku
aGVhcC5vYmplY3RDb3VudCgpOwogICAgIHJldHVybiBTX09LOwogfQogCkBAIC0xMTMsOCArMTE0
LDggQEAgSFJFU1VMVCBXZWJDb3JlU3RhdGlzdGljczo6amF2YVNjcmlwdEdsbwogICAgIGlmICgh
Y291bnQpCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9j
ayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7Ci0gICAgKmNvdW50ID0gKFVJTlQpSlNET01XaW5k
b3c6OmNvbW1vblZNKCkuaGVhcC5nbG9iYWxPYmplY3RDb3VudCgpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrKGNvbW1vblZNKCkpOworICAgICpjb3VudCA9IChVSU5UKWNvbW1vblZNKCkuaGVhcC5n
bG9iYWxPYmplY3RDb3VudCgpOwogICAgIHJldHVybiBTX09LOwogfQogCkBAIC0xMjMsOCArMTI0
LDggQEAgSFJFU1VMVCBXZWJDb3JlU3RhdGlzdGljczo6amF2YVNjcmlwdFBybwogICAgIGlmICgh
Y291bnQpCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9j
ayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7Ci0gICAgKmNvdW50ID0gKFVJTlQpSlNET01XaW5k
b3c6OmNvbW1vblZNKCkuaGVhcC5wcm90ZWN0ZWRPYmplY3RDb3VudCgpOworICAgIEpTTG9ja0hv
bGRlciBsb2NrKGNvbW1vblZNKCkpOworICAgICpjb3VudCA9IChVSU5UKWNvbW1vblZNKCkuaGVh
cC5wcm90ZWN0ZWRPYmplY3RDb3VudCgpOwogICAgIHJldHVybiBTX09LOwogfQogCkBAIC0xMzMs
OCArMTM0LDggQEAgSFJFU1VMVCBXZWJDb3JlU3RhdGlzdGljczo6amF2YVNjcmlwdFBybwogICAg
IGlmICghY291bnQpCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CiAKLSAgICBKU0xvY2tIb2xk
ZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7Ci0gICAgKmNvdW50ID0gKFVJTlQpSlNE
T01XaW5kb3c6OmNvbW1vblZNKCkuaGVhcC5wcm90ZWN0ZWRHbG9iYWxPYmplY3RDb3VudCgpOwor
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGNvbW1vblZNKCkpOworICAgICpjb3VudCA9IChVSU5UKWNv
bW1vblZNKCkuaGVhcC5wcm90ZWN0ZWRHbG9iYWxPYmplY3RDb3VudCgpOwogICAgIHJldHVybiBT
X09LOwogfQogCkBAIC0xNDMsOCArMTQ0LDggQEAgSFJFU1VMVCBXZWJDb3JlU3RhdGlzdGljczo6
amF2YVNjcmlwdFBybwogICAgIGlmICghdHlwZU5hbWVzQW5kQ291bnRzKQogICAgICAgICByZXR1
cm4gRV9QT0lOVEVSOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1v
blZNKCkpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlQ291bnRTZXQ+IGpzT2JqZWN0VHlwZU5h
bWVzKEpTRE9NV2luZG93Ojpjb21tb25WTSgpLmhlYXAucHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50
cygpKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhjb21tb25WTSgpKTsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8VHlwZUNvdW50U2V0PiBqc09iamVjdFR5cGVOYW1lcyhjb21tb25WTSgpLmhlYXAucHJv
dGVjdGVkT2JqZWN0VHlwZUNvdW50cygpKTsKICAgICB0eXBlZGVmIFR5cGVDb3VudFNldDo6Y29u
c3RfaXRlcmF0b3IgSXRlcmF0b3I7CiAgICAgSXRlcmF0b3IgZW5kID0ganNPYmplY3RUeXBlTmFt
ZXMtPmVuZCgpOwogICAgIEhhc2hNYXA8U3RyaW5nLCBpbnQ+IHR5cGVDb3VudE1hcDsKQEAgLTE2
MSw4ICsxNjIsOCBAQCBIUkVTVUxUIFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZhU2NyaXB0T2JqCiAg
ICAgaWYgKCF0eXBlTmFtZXNBbmRDb3VudHMpCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CiAK
LSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPFR5cGVDb3VudFNldD4ganNPYmplY3RUeXBlTmFtZXMoSlNET01XaW5kb3c6
OmNvbW1vblZNKCkuaGVhcC5vYmplY3RUeXBlQ291bnRzKCkpOworICAgIEpTTG9ja0hvbGRlciBs
b2NrKGNvbW1vblZNKCkpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlQ291bnRTZXQ+IGpzT2Jq
ZWN0VHlwZU5hbWVzKGNvbW1vblZNKCkuaGVhcC5vYmplY3RUeXBlQ291bnRzKCkpOwogICAgIHR5
cGVkZWYgVHlwZUNvdW50U2V0Ojpjb25zdF9pdGVyYXRvciBJdGVyYXRvcjsKICAgICBJdGVyYXRv
ciBlbmQgPSBqc09iamVjdFR5cGVOYW1lcy0+ZW5kKCk7CiAgICAgSGFzaE1hcDxTdHJpbmcsIGlu
dD4gdHlwZUNvdW50TWFwOwpAQCAtMjU5LDE0ICsyNjAsMTQgQEAgSFJFU1VMVCBXZWJDb3JlU3Rh
dGlzdGljczo6c2hvdWxkUHJpbnRFeAogICAgIGlmICghc2hvdWxkUHJpbnQpCiAgICAgICAgIHJl
dHVybiBFX1BPSU5URVI7CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29t
bW9uVk0oKSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7CiAgICAgKnNob3Vs
ZFByaW50ID0gUGFnZUNvbnNvbGVDbGllbnQ6OnNob3VsZFByaW50RXhjZXB0aW9ucygpOwogICAg
IHJldHVybiBTX09LOwogfQogCiBIUkVTVUxUIFdlYkNvcmVTdGF0aXN0aWNzOjpzZXRTaG91bGRQ
cmludEV4Y2VwdGlvbnMoQk9PTCBwcmludCkKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RP
TVdpbmRvdzo6Y29tbW9uVk0oKSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7
CiAgICAgUGFnZUNvbnNvbGVDbGllbnQ6OnNldFNob3VsZFByaW50RXhjZXB0aW9ucyhwcmludCk7
CiAgICAgcmV0dXJuIFNfT0s7CiB9CkBAIC0yOTAsOSArMjkxLDkgQEAgSFJFU1VMVCBXZWJDb3Jl
U3RhdGlzdGljczo6bWVtb3J5U3RhdGlzdAogCiAgICAgV1RGOjpGYXN0TWFsbG9jU3RhdGlzdGlj
cyBmYXN0TWFsbG9jU3RhdGlzdGljcyA9IFdURjo6ZmFzdE1hbGxvY1N0YXRpc3RpY3MoKTsKIAot
ICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsKLSAgICB1bnNp
Z25lZCBsb25nIGxvbmcgaGVhcFNpemUgPSBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS5oZWFwLnNp
emUoKTsKLSAgICB1bnNpZ25lZCBsb25nIGxvbmcgaGVhcEZyZWUgPSBKU0RPTVdpbmRvdzo6Y29t
bW9uVk0oKS5oZWFwLmNhcGFjaXR5KCkgLSBoZWFwU2l6ZTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhjb21tb25WTSgpKTsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgaGVhcFNpemUgPSBjb21tb25W
TSgpLmhlYXAuc2l6ZSgpOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBoZWFwRnJlZSA9IGNvbW1v
blZNKCkuaGVhcC5jYXBhY2l0eSgpIC0gaGVhcFNpemU7CiAgICAgR2xvYmFsTWVtb3J5U3RhdGlz
dGljcyBnbG9iYWxNZW1vcnlTdGF0cyA9IGdsb2JhbE1lbW9yeVN0YXRpc3RpY3MoKTsKIAogICAg
IEhhc2hNYXA8U3RyaW5nLCB1bnNpZ25lZCBsb25nIGxvbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZl
SGFzaD4gZmllbGRzOwpJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViSmF2YVNjcmlwdENvbGxl
Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViSmF2YVNjcmlwdENv
bGxlY3Rvci5jcHAJKHJldmlzaW9uIDIwOTY3OCkKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkph
dmFTY3JpcHRDb2xsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFwLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvVk0uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0NvbW1vblZNLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9ET01XaW5kb3cuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dDQ29udHJvbGxlci5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvSlNET01XaW5kb3cuaD4KQEAgLTExMCw3ICsxMTEsNyBAQCBIUkVTVUxUIFdl
YkphdmFTY3JpcHRDb2xsZWN0b3I6Om9iamVjdENvCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7
CiAgICAgfQogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkp
OwotICAgICpjb3VudCA9IChVSU5UKUpTRE9NV2luZG93Ojpjb21tb25WTSgpLmhlYXAub2JqZWN0
Q291bnQoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhjb21tb25WTSgpKTsKKyAgICAqY291bnQg
PSAoVUlOVCljb21tb25WTSgpLmhlYXAub2JqZWN0Q291bnQoKTsKICAgICByZXR1cm4gU19PSzsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAkocmV2aXNp
b24gMjA5Njc4KQorKysgU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIlBsdWdpblBhY2thZ2Uu
aCIKICNpbmNsdWRlIDxXZWJDb3JlL0JyaWRnZUpTQy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ2hy
b21lLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Db21tb25WTS5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
Q29va2llSmFyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvRG9jdW1lbnRMb2FkZXIuaD4KQEAgLTIzNiw3ICsyMzcsNyBAQCBib29sIFBsdWdpblZp
ZXc6OnN0YXJ0KCkKICAgICBOUEVycm9yIG5wRXJyOwogICAgIHsKICAgICAgICAgUGx1Z2luVmll
dzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAg
ICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwog
ICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAgICAgICBucEVyciA9IG1fcGx1Z2lu
LT5wbHVnaW5GdW5jcygpLT5uZXdwKChOUE1JTUVUeXBlKW1fbWltZVR5cGUudXRmOCgpLmRhdGEo
KSwgbV9pbnN0YW5jZSwgbV9tb2RlLCBtX3BhcmFtQ291bnQsIG1fcGFyYW1OYW1lcywgbV9wYXJh
bVZhbHVlcywgTlVMTCk7CiAgICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwpAQCAtMzI1
LDcgKzMyNiw3IEBAIHZvaWQgUGx1Z2luVmlldzo6c3RvcCgpCiAKICAgICBtX2lzU3RhcnRlZCA9
IGZhbHNlOwogCi0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNE
T01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKIAogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
QVBJKQogICAgIC8vIFVuc3ViY2xhc3MgdGhlIHdpbmRvdwpAQCAtNDI4LDcgKzQyOSw3IEBAIHZv
aWQgUGx1Z2luVmlldzo6cGVyZm9ybVJlcXVlc3QoUGx1Z2luUmUKICAgICAgICAgICAgIC8vIEZJ
WE1FOiA8cmRhcjovL3Byb2JsZW0vNDgwNzQ2OT4gVGhpcyBzaG91bGQgYmUgc2VudCB3aGVuIHRo
ZSBkb2N1bWVudCBoYXMgZmluaXNoZWQgbG9hZGluZwogICAgICAgICAgICAgaWYgKHJlcXVlc3Qt
PnNlbmROb3RpZmljYXRpb24oKSkgewogICAgICAgICAgICAgICAgIFBsdWdpblZpZXc6OnNldEN1
cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAg
ICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoY29tbW9u
Vk0oKSk7CiAgICAgICAgICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICAgICAg
ICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+dXJsbm90aWZ5KG1faW5zdGFuY2UsIHJl
cXVlc3RVUkwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgTlBSRVNfRE9ORSwgcmVxdWVzdC0+bm90
aWZ5RGF0YSgpKTsKICAgICAgICAgICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKQEAg
LTY2NSw3ICs2NjYsNyBAQCBOUE9iamVjdCogUGx1Z2luVmlldzo6bnBPYmplY3QoKQogICAgIE5Q
RXJyb3IgbnBFcnI7CiAgICAgewogICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2lu
Vmlldyh0aGlzKTsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoY29tbW9uVk0oKSk7CiAgICAgICAgIHNldENhbGxpbmdQ
bHVnaW4odHJ1ZSk7CiAgICAgICAgIG5wRXJyID0gbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdl
dHZhbHVlKG1faW5zdGFuY2UsIE5QUFZwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QsICZvYmplY3Qp
OwogICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKQEAgLTEzODIsNyArMTM4Myw3IEBA
IHZvaWQgUGx1Z2luVmlldzo6cHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGEKICAgICAgICAgcmV0dXJu
OwogCiAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAgSlND
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21t
b25WTSgpKTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21t
b25WTSgpKTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAgIE5QQm9vbCB2YWx1ZSA9
IHByaXZhdGVCcm93c2luZ0VuYWJsZWQ7CiAgICAgc2V0VmFsdWUobV9pbnN0YW5jZSwgTlBOVnBy
aXZhdGVNb2RlQm9vbCwgJnZhbHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMv
UGx1Z2luVmlld1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vUGx1Z2lu
cy9QbHVnaW5WaWV3V2luLmNwcAkocmV2aXNpb24gMjA5Njc4KQorKysgU291cmNlL1dlYktpdC93
aW4vUGx1Z2lucy9QbHVnaW5WaWV3V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMs
NyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvQnJpZGdlSlNDLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9D
aHJvbWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Nocm9tZUNsaWVudC5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvQ29tbW9uVk0uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9Eb2N1bWVudExvYWRlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRWxlbWVudC5o
PgpAQCAtNDUyLDcgKzQ1Myw3IEBAIGJvb2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KE5Q
RXZlbnQKICAgICAgICAgc2hvdWxkUG9wID0gdHJ1ZTsKICAgICB9CiAKLSAgICBKU0M6OkpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkp
OworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkp
OwogICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAgICAgYm9vbCBhY2NlcHRlZCA9ICFtX3Bs
dWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJm5wRXZlbnQpOwogICAgIHNl
dENhbGxpbmdQbHVnaW4oZmFsc2UpOwpAQCAtNTk1LDcgKzU5Niw3IEBAIHZvaWQgUGx1Z2luVmll
dzo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXkKICAgICB9IGVsc2UKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dC
YXNlOjpjb21tb25WTSgpKTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2Nrcyhjb21tb25WTSgpKTsKICAgICBpZiAoZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpKQogICAg
ICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKIH0KQEAgLTY2Miw3ICs2NjMsNyBAQCB2
b2lkIFBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VFCiAgICAgfSBlbHNlCiAgICAg
ICAgIHJldHVybjsKIAotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoY29tbW9uVk0oKSk7CiAgICAgLy8gRklYTUU6IENvbnNpZGVyIGJh
Y2sgcG9ydGluZyB0aGUgaHR0cDovL3dlYmtpdC5vcmcvYi81ODEwOCBmaXggaGVyZS4KICAgICBp
ZiAoZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpKQogICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhh
bmRsZWQoKTsKQEAgLTczMyw3ICs3MzQsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93
UmVjdChjb25zdCBJCiAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC50b3AgPSAwOwogCiAgICAgaWYg
KG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cpIHsKLSAgICAgICAgSlNDOjpKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgp
KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoY29tbW9u
Vk0oKSk7CiAgICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAgICAgICAgIG1fcGx1Z2lu
LT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cobV9pbnN0YW5jZSwgJm1fbnBXaW5kb3cpOwogICAg
ICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>296845</attachid>
            <date>2016-12-10 20:29:19 -0800</date>
            <delta_ts>2016-12-11 09:48:18 -0800</delta_ts>
            <desc>better patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>100826</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA5Njc4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBA
CisyMDE2LTEyLTEwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
VGhlIERPTSBzaG91bGQgaGF2ZSBhbiBhZHZhbmNpbmcgd2F2ZWZyb250IG9wYXF1ZSByb290IGJh
cnJpZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
NTcxMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAg
ICAgICAgVGhpcyBleHBvc2VzIHRoZSBhYmlsaXR5IHRvIGZpcmUgYW4gYWR2YW5jaW5nIHdhdmVm
cm9udCBiYXJyaWVyIG9uIG9wYXF1ZSByb290cy4gSXQgYWxzbworICAgICAgICBnaXZlcyBjbGll
bnRzIHRoZSBhYmlsaXR5IHRvIG1haW50YWluIHRoZWlyIG93biBjYWNoZSBvZiB3aGV0aGVyIHRo
YXQgYmFycmllciBuZWVkcyB0bworICAgICAgICBiZSBlbmFibGVkLgorICAgICAgICAKKyAgICAg
ICAgVGhlIERPTSB1c2VzIHRoaXMgdG8gZW5hYmxlIGEgdmVyeSBjaGVhcCBiYXJyaWVyIG9uIHRo
ZSBET00uIFRoaXMgaXMgbmV1dHJhbCBvbgorICAgICAgICBTcGVlZG9tZXRlciBhbmQgZml4ZXMg
YW5vdGhlciBjb25jdXJyZW50IEdDIGNyYXNoLgorCisgICAgICAgICogaGVhcC9IZWFwLmNwcDoK
KyAgICAgICAgKEpTQzo6SGVhcDo6YmVnaW5NYXJraW5nKToKKyAgICAgICAgKEpTQzo6SGVhcDo6
ZW5kTWFya2luZyk6CisgICAgICAgIChKU0M6OkhlYXA6OndyaXRlQmFycmllck9wYXF1ZVJvb3RT
bG93KToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWRkTXV0YXRvclNob3VsZEJlRmVuY2VkQ2FjaGUp
OgorICAgICAgICAoSlNDOjpIZWFwOjpzZXRNdXRhdG9yU2hvdWxkQmVGZW5jZWQpOgorICAgICAg
ICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAqIGhlYXAvSGVhcElubGluZXMuaDoKKyAgICAgICAg
KEpTQzo6d3JpdGVCYXJyaWVyT3BhcXVlUm9vdCk6CisKIDIwMTYtMTItMTAgIENvbW1pdCBRdWV1
ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxp
bmcgb3V0IHIyMDk2NTMsIHIyMDk2NTQsIHIyMDk2NjMsIGFuZApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIwOTY3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MTUsOCArODE1LDcgQEAgdm9p
ZCBIZWFwOjpiZWdpbk1hcmtpbmcoKQogICAgICAgICBtX2NvZGVCbG9ja3MtPmNsZWFyTWFya3NG
b3JGdWxsQ29sbGVjdGlvbigpOwogICAgIG1faml0U3R1YlJvdXRpbmVzLT5jbGVhck1hcmtzKCk7
CiAgICAgbV9vYmplY3RTcGFjZS5iZWdpbk1hcmtpbmcoKTsKLSAgICBtX211dGF0b3JTaG91bGRC
ZUZlbmNlZCA9IHRydWU7Ci0gICAgbV9iYXJyaWVyVGhyZXNob2xkID0gdGF1dG9sb2dpY2FsVGhy
ZXNob2xkOworICAgIHNldE11dGF0b3JTaG91bGRCZUZlbmNlZCh0cnVlKTsKICAgICBtX2JhcnJp
ZXJzRXhlY3V0ZWQgPSAwOwogfQogCkBAIC05NDMsOCArOTQyLDcgQEAgdm9pZCBIZWFwOjplbmRN
YXJraW5nKCkKICAgICBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzLnJlbW92ZUFsbCgpOwogICAg
IAogICAgIG1fb2JqZWN0U3BhY2UuZW5kTWFya2luZygpOwotICAgIG1fbXV0YXRvclNob3VsZEJl
RmVuY2VkID0gT3B0aW9uczo6Zm9yY2VGZW5jZWRCYXJyaWVyKCk7Ci0gICAgbV9iYXJyaWVyVGhy
ZXNob2xkID0gT3B0aW9uczo6Zm9yY2VGZW5jZWRCYXJyaWVyKCkgPyB0YXV0b2xvZ2ljYWxUaHJl
c2hvbGQgOiBibGFja1RocmVzaG9sZDsKKyAgICBzZXRNdXRhdG9yU2hvdWxkQmVGZW5jZWQoT3B0
aW9uczo6Zm9yY2VGZW5jZWRCYXJyaWVyKCkpOwogfQogCiBzaXplX3QgSGVhcDo6b2JqZWN0Q291
bnQoKQpAQCAtMjMxMyw0ICsyMzExLDI3IEBAIHZvaWQgSGVhcDo6Zm9yRWFjaFNsb3RWaXNpdG9y
KGNvbnN0IEZ1bmMKICAgICAgICAgZnVuYygqc2xvdFZpc2l0b3IpOwogfQogCit2b2lkIEhlYXA6
OndyaXRlQmFycmllck9wYXF1ZVJvb3RTbG93KHZvaWQqIHJvb3QpCit7CisgICAgQVNTRVJUKG11
dGF0b3JTaG91bGRCZUZlbmNlZCgpKTsKKyAgICAKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KG1fb3BhcXVlUm9vdHNNdXRleCk7CisgICAgbV9vcGFxdWVSb290cy5hZGQocm9vdCk7Cit9CisK
K3ZvaWQgSGVhcDo6YWRkTXV0YXRvclNob3VsZEJlRmVuY2VkQ2FjaGUoYm9vbCYgY2FjaGUpCit7
CisgICAgQVNTRVJUKGhhc0hlYXBBY2Nlc3MoKSk7CisgICAgY2FjaGUgPSBtX211dGF0b3JTaG91
bGRCZUZlbmNlZDsKKyAgICBtX211dGF0b3JTaG91bGRCZUZlbmNlZENhY2hlcy5hcHBlbmQoJmNh
Y2hlKTsKK30KKwordm9pZCBIZWFwOjpzZXRNdXRhdG9yU2hvdWxkQmVGZW5jZWQoYm9vbCB2YWx1
ZSkKK3sKKyAgICBtX211dGF0b3JTaG91bGRCZUZlbmNlZCA9IHZhbHVlOworICAgIG1fYmFycmll
clRocmVzaG9sZCA9IHZhbHVlID8gdGF1dG9sb2dpY2FsVGhyZXNob2xkIDogYmxhY2tUaHJlc2hv
bGQ7CisgICAgZm9yIChib29sKiBjYWNoZSA6IG1fbXV0YXRvclNob3VsZEJlRmVuY2VkQ2FjaGVz
KQorICAgICAgICAqY2FjaGUgPSB2YWx1ZTsKK30KKyAgICAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjA5Njc4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNiAr
MTI1LDggQEAgcHVibGljOgogCiAgICAgV3JpdGVCYXJyaWVyQnVmZmVyJiB3cml0ZUJhcnJpZXJC
dWZmZXIoKSB7IHJldHVybiBtX3dyaXRlQmFycmllckJ1ZmZlcjsgfQogICAgIHZvaWQgZmx1c2hX
cml0ZUJhcnJpZXJCdWZmZXIoSlNDZWxsKik7CisgICAgCisgICAgdm9pZCB3cml0ZUJhcnJpZXJP
cGFxdWVSb290KHZvaWQqKTsKIAogICAgIEhlYXAoVk0qLCBIZWFwVHlwZSk7CiAgICAgfkhlYXAo
KTsKQEAgLTM0OSw2ICszNTEsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBwcmV2ZW50Q29sbGVjdGlv
bigpOwogICAgIHZvaWQgYWxsb3dDb2xsZWN0aW9uKCk7CiAgICAgCisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBhZGRNdXRhdG9yU2hvdWxkQmVGZW5jZWRDYWNoZShib29sJik7CisgICAgCiAj
aWYgVVNFKENGKQogICAgIENGUnVuTG9vcFJlZiBydW5Mb29wKCkgY29uc3QgeyByZXR1cm4gbV9y
dW5Mb29wLmdldCgpOyB9CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRSdW5Mb29wKENG
UnVuTG9vcFJlZik7CkBAIC00OTAsNiArNDk0LDEwIEBAIHByaXZhdGU6CiAgICAgc2l6ZV90IHRo
cmVhZEJ5dGVzVmlzaXRlZCgpOwogICAgIAogICAgIHZvaWQgZm9yRWFjaENvZGVCbG9ja0ltcGwo
Y29uc3QgU2NvcGVkTGFtYmRhPGJvb2woQ29kZUJsb2NrKik+Jik7CisgICAgCisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCB3cml0ZUJhcnJpZXJPcGFxdWVSb290U2xvdyh2b2lkKik7CisgICAg
CisgICAgdm9pZCBzZXRNdXRhdG9yU2hvdWxkQmVGZW5jZWQoYm9vbCB2YWx1ZSk7CiAKICAgICBj
b25zdCBIZWFwVHlwZSBtX2hlYXBUeXBlOwogICAgIGNvbnN0IHNpemVfdCBtX3JhbVNpemU7CkBA
IC01NDksNiArNTU3LDcgQEAgcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXJCdWZmZXIgbV93cml0
ZUJhcnJpZXJCdWZmZXI7CiAgICAgYm9vbCBtX211dGF0b3JTaG91bGRCZUZlbmNlZCB7IE9wdGlv
bnM6OmZvcmNlRmVuY2VkQmFycmllcigpIH07CiAgICAgdW5zaWduZWQgbV9iYXJyaWVyVGhyZXNo
b2xkIHsgT3B0aW9uczo6Zm9yY2VGZW5jZWRCYXJyaWVyKCkgPyB0YXV0b2xvZ2ljYWxUaHJlc2hv
bGQgOiBibGFja1RocmVzaG9sZCB9OworICAgIFZlY3Rvcjxib29sKj4gbV9tdXRhdG9yU2hvdWxk
QmVGZW5jZWRDYWNoZXM7CiAKICAgICBWTSogbV92bTsKICAgICBkb3VibGUgbV9sYXN0RnVsbEdD
TGVuZ3RoOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCShy
ZXZpc2lvbiAyMDk2NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNzAsNCArMzcwLDEwIEBAIGlubGluZSB2b2lkIEhlYXA6
OnN0b3BJZk5lY2Vzc2FyeSgpCiAgICAgc3RvcElmTmVjZXNzYXJ5U2xvdygpOwogfQogCitpbmxp
bmUgdm9pZCBIZWFwOjp3cml0ZUJhcnJpZXJPcGFxdWVSb290KHZvaWQqIHJvb3QpCit7CisgICAg
aWYgKG11dGF0b3JTaG91bGRCZUZlbmNlZCgpKQorICAgICAgICB3cml0ZUJhcnJpZXJPcGFxdWVS
b290U2xvdyhyb290KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAyMDk2NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxMjUgQEAKKzIwMTYtMTItMDkgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFw
cGxlLmNvbT4KKworICAgICAgICBUaGUgRE9NIHNob3VsZCBoYXZlIGFuIGFkdmFuY2luZyB3YXZl
ZnJvbnQgb3BhcXVlIHJvb3QgYmFycmllcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NzEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2UgdGhpcyB3YXMgY292ZXJlZCBi
eSBjcmFzaGluZyB0ZXN0cy4KKyAgICAgICAgCisgICAgICAgIENvbnNpZGVyIHRoZXNlIHR3byBj
YXNlczoKKyAgICAgICAgCisgICAgICAgICAgIFJlbW92YWw6CisgICAgICAgICAgIDEpIERPTSBh
dCBzdGFydDogRC0+WC0+WQorICAgICAgICAgICAyKSBNYXJrIFgsIFgtPnZpc2l0Q2hpbGRyZW4s
IGFkZE9wYXF1ZVJvb3QoRCkKKyAgICAgICAgICAgMykgcmVtb3ZlIFgKKyAgICAgICAgICAgNCkg
WSB0aGlua3MgaXQncyBub3QgcmVhY2hhYmxlIChpdHMgb3BhcXVlIHJvb3QsIFgsIGlzIG5vdCBp
biB0aGUgc2V0KS4KKyAgICAgICAgICAgCisgICAgICAgICAgIEluc2VydGlvbjoKKyAgICAgICAg
ICAgMSkgRE9NIGF0IHN0YXJ0OiBELCBYLT5ZCisgICAgICAgICAgIDIpIE1hcmsgWCwgWC0+dmlz
aXRDaGlsZHJlbiwgYWRkT3BhcXVlUm9vdChYKQorICAgICAgICAgICAzKSBpbnNlcnQgWCBpbnRv
IEQKKyAgICAgICAgICAgNCkgWSB0aGlua3MgaXQncyBub3QgcmVhY2hhYmxlIChpdHMgb3BhcXVl
IHJvb3QsIEQsIGlzIG5vdCBpbiB0aGUgc2V0KS4KKyAgICAgICAgCisgICAgICAgIFdlIGNhbiBm
aXggdGhpcyB3aXRoIHR3byBiYXJyaWVyczoKKyAgICAgICAgCisgICAgICAgICAgIFJlbW92YWw6
IGFkZCBYICh0aGUgcmVtb3ZlZCBjaGlsZCkgdG8gdGhlIG9wYXF1ZSByb290IHNldC4KKyAgICAg
ICAgICAgSW5zZXJ0aW9uOiBhZGQgRCAodGhlIGluc2VydGlvbiBwb2ludCkgdG8gdGhlIG9wYXF1
ZSByb290IHNldC4KKyAgICAgICAgCisgICAgICAgIFRoYW5rcyBSeXNvc3VrZSBmb3IgY29taW5n
IHVwIHdpdGggdGhpcyBpZGVhIQorICAgICAgICAKKyAgICAgICAgQm90aCBiYXJyaWVycyBhZHZh
bmNlIHRoZSB3YXZlZnJvbnQuIFdlIGNvdWxkIGNvbnNpZGVyIHJldHJlYXRpbmcgd2F2ZWZyb250
IGJhcnJpZXJzIGluCisgICAgICAgIHRoZSBmdXR1cmUgKHdoZXJlIHdlIGNhdXNlIHZpc2l0Q2hp
bGRyZW4gdG8gYmUgY2FsbGVkIGFnYWluIG9uIHdyYXBwZXJzIHRoYXQgYmVsb25nZWQgdG8KKyAg
ICAgICAgcm9vdHMgdGhhdCBnb3QgYWZmZWN0ZWQgYnkgaW5zZXJ0aW9uL3JlbW92YWwpIGJ1dCB0
aG9zZSB3b3VsZCBwcm9iYWJseSByZXF1aXJlIG1vcmUKKyAgICAgICAgYm9va2tlZXBpbmcuCisg
ICAgICAgIAorICAgICAgICBUbyBtYWtlIHRoaXMgYmFycmllciB2ZXJ5IGZhc3QsIHRoZSBXZWJD
b3JlIGNhY2hlcyB0aGUgSlNDIFZNJ3MgYmFycmllciBzdGF0ZSBpbgorICAgICAgICBpdHMgb3du
IGdsb2JhbCB2YXJpYWJsZSBmb3IgdmVyeSBmYXN0IGFjY2Vzcy4gVGhpcyB2YXJpYWJsZSB3aWxs
IGJlIGZhbHNlIG1vc3Qgb2YgdGhlCisgICAgICAgIHRpbWUuIEl0J3MgZmFsc2Ugd2hlbiB0aGVy
ZSBpcyBubyBWTSwgc28gdHJpZ2dlcmluZyB0aGUgYmFycmllciB3b24ndCBjYXVzZSB0aGUgVk0g
dG8gYmUKKyAgICAgICAgY3JlYXRlZC4gSXQncyBvbmx5IHRydWUgd2hlbiBHQyBpcyBydW5uaW5n
LCB3aGljaCBpcyByYXJlIGJ5IGRlc2lnbi4KKyAgICAgICAgCisgICAgICAgIFRvIG1ha2UgdGhh
dCBjYWNoaW5nIG1vcmUgc2Vuc2libGUsIEkgZmluYWxseSBnYXZlIFdlYkNvcmUgYSBjZW50cmFs
IGhlYWRlciBmb3IKKyAgICAgICAgdGhlIGNvbW1vbiBWTSAoQ29tbW9uVk0uaCkuCisKKyAgICAg
ICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1NEUFBy
b2Nlc3Nvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTRFBQcm9jZXNzb3I6OmNhbGxTY3JpcHQp
OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9Db21tb25WTS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29t
bW9uVk1TbG93KToKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlQmFycmllck9wYXF1ZVJvb3RTbG93
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9Db21tb25WTS5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OmNvbW1vblZNKToKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlQmFycmllck9wYXF1ZVJv
b3QpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjptYWluVGhyZWFkTm9ybWFsV29ybGQpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0dDQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb2xsZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdDQ29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3RTb29uKToKKyAgICAgICAgKFdl
YkNvcmU6OkdDQ29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3ROb3cpOgorICAgICAgICAoV2ViQ29y
ZTo6R0NDb250cm9sbGVyOjpnYXJiYWdlQ29sbGVjdE5vd0lmTm90RG9uZVJlY2VudGx5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdDQ29udHJvbGxlcjo6c2V0SmF2YVNjcmlwdEdhcmJhZ2VDb2xsZWN0
b3JUaW1lckVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6R0NDb250cm9sbGVyOjpkZWxldGVB
bGxDb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkdDQ29udHJvbGxlcjo6ZGVsZXRlQWxsTGlua2Vk
Q29kZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI6Omxvb2t1cE5hbWVz
cGFjZVVSSSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmFkZEltcHVyZVByb3BlcnR5KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0RPTVdpbmRvd0Jhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpm
aXJlRnJhbWVDbGVhcmVkV2F0Y2hwb2ludHNGb3JXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6
SlNET01XaW5kb3dCYXNlOjpjb21tb25WTSk6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3Mv
anMvSlNET01XaW5kb3dCYXNlLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dT
aGVsbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd1NoZWxsOjpzZXRXaW5kb3cp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5oOgorICAgICAgICAoV2ViQ29y
ZTo6cm9vdCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhY2hlZEZyYW1lRGF0YTo6U2NyaXB0Q2FjaGVk
RnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhY2hlZEZyYW1lRGF0YTo6cmVz
dG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWNoZWRGcmFtZURhdGE6OmNsZWFyKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6On5TY3JpcHRDb250cm9sbGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNyZWF0ZVdvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcmlwdENvbnRyb2xsZXI6OmdldEFsbFdvcmxkcyk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHRDb250cm9sbGVyOjpjbGVhcldpbmRvd1NoZWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlw
dENvbnRyb2xsZXI6OmNhY2hlYWJsZUJpbmRpbmdSb290T2JqZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdENvbnRyb2xsZXI6OmJpbmRpbmdSb290T2JqZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdENvbnRyb2xsZXI6OndpbmRvd1NjcmlwdE5QT2JqZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmpzT2JqZWN0Rm9yUGx1Z2luRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpjbGVhclNjcmlwdE9iamVjdHMpOgorICAg
ICAgICAqIGRvbS9Db2xsZWN0aW9uSW5kZXhDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpy
ZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZEZvckNvbGxlY3Rpb25JbmRleENhY2hlKToKKyAgICAg
ICAgKiBkb20vQ29udGFpbmVyTm9kZS5jcHA6CisgICAgICAgICogZG9tL0NvbnRhaW5lck5vZGVB
bGdvcml0aG1zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om5vdGlmeUNoaWxkTm9kZUluc2VydGVk
KToKKyAgICAgICAgKFdlYkNvcmU6Om5vdGlmeUNoaWxkTm9kZVJlbW92ZWQpOgorICAgICAgICAq
IGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2hvdWxkQnlw
YXNzTWFpbldvcmxkQ29udGVudFNlY3VyaXR5UG9saWN5KToKKyAgICAgICAgKiBkb20vTm9kZS5o
OgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6b3BhcXVlUm9vdCk6CisgICAgICAgICogZG9tL1Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6dm0pOgorICAgICAgICAqIGh0bWwvSFRNTEltYWdlTG9hZGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUxvYWRlcjo6bm90aWZ5RmluaXNoZWQpOgorICAgICAg
ICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVk
aWFFbGVtZW50OjpwYXVzZUFmdGVyRGV0YWNoZWRUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxNZWRpYUVsZW1lbnQ6OmVuc3VyZUlzb2xhdGVkV29ybGQpOgorICAgICAgICAqIGh0bWwvSFRN
TFBsdWdJbkltYWdlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwbHVnSW5JbWFnZUVs
ZW1lbnRJc29sYXRlZFdvcmxkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjp2bSk6Cisg
ICAgICAgICogaW5zcGVjdG9yL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpQYWdlU2NyaXB0RGVidWdTZXJ2ZXI6OlBhZ2VTY3JpcHREZWJ1Z1NlcnZlcik6Cisg
ICAgICAgICogcGFnZS9QZXJmb3JtYW5jZUxvZ2dpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UGVyZm9ybWFuY2VMb2dnaW5nOjptZW1vcnlVc2FnZVN0YXRpc3RpY3MpOgorICAgICAgICAoV2Vi
Q29yZTo6UGVyZm9ybWFuY2VMb2dnaW5nOjpqYXZhU2NyaXB0T2JqZWN0Q291bnRzKToKKyAgICAg
ICAgKiBwYWdlL1Jlc291cmNlVXNhZ2VUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VVc2FnZVRocmVhZDo6Y3JlYXRlVGhyZWFkSWZOZWVkZWQpOgorICAgICAgICAqIHN2Zy9n
cmFwaGljcy9TVkdJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6cmVwb3J0
QXBwcm94aW1hdGVNZW1vcnlDb3N0KToKKyAgICAgICAgKiB0ZXN0aW5nL01lbW9yeUluZm8uaDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUluZm86Ok1lbW9yeUluZm8pOgorCiAyMDE2LTEyLTEw
ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFN1cHBv
cnQgdGhlIGRlcHJlY2F0ZWQgZGljdGlvbmFyeSBjb25zdHJ1Y3RvciBmb3IgRE9NUG9pbnRSZWFk
T25seSBhbmQgRE9NUG9pbnQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMDk2
NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
MTA3NSw2ICsxMDc1LDcgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIGJpbmRpbmdzL2pzL0Nh
Y2hlZE1vZHVsZVNjcmlwdC5jcHAKICAgICBiaW5kaW5ncy9qcy9DYWNoZWRNb2R1bGVTY3JpcHRM
b2FkZXIuY3BwCiAgICAgYmluZGluZ3MvanMvQ2FsbGJhY2tGdW5jdGlvbi5jcHAKKyAgICBiaW5k
aW5ncy9qcy9Db21tb25WTS5jcHAKICAgICBiaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQuY3Bw
CiAgICAgYmluZGluZ3MvanMvRGljdGlvbmFyeS5jcHAKICAgICBiaW5kaW5ncy9qcy9HQ0NvbnRy
b2xsZXIuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1NEUFBy
b2Nlc3Nvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9TRFBQcm9jZXNzb3IuY3BwCShyZXZpc2lvbiAyMDk2NzgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM0LDYgKzM0LDcgQEAKICNpZiBFTkFCTEUoV0VCX1JUQykKICNpbmNsdWRlICJTRFBQcm9jZXNz
b3IuaCIKIAorI2luY2x1ZGUgIkNvbW1vblZNLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmgi
CkBAIC00OTUsNyArNDk2LDcgQEAgYm9vbCBTRFBQcm9jZXNzb3I6OmNhbGxTY3JpcHQoY29uc3Qg
U3RyaQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIW1faXNvbGF0ZWRXb3JsZCkK
LSAgICAgICAgbV9pc29sYXRlZFdvcmxkID0gRE9NV3JhcHBlcldvcmxkOjpjcmVhdGUoSlNET01X
aW5kb3c6OmNvbW1vblZNKCkpOworICAgICAgICBtX2lzb2xhdGVkV29ybGQgPSBET01XcmFwcGVy
V29ybGQ6OmNyZWF0ZShjb21tb25WTSgpKTsKIAogICAgIFNjcmlwdENvbnRyb2xsZXImIHNjcmlw
dENvbnRyb2xsZXIgPSBkb2N1bWVudC0+ZnJhbWUoKS0+c2NyaXB0KCk7CiAgICAgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
c2NyaXB0Q29udHJvbGxlci5nbG9iYWxPYmplY3QoKm1faXNvbGF0ZWRXb3JsZCkpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1Rp
bWVQbHVnaW5SZXBsYWNlbWVudC5tbQkocmV2aXNpb24gMjA5Njc4KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbXBvcnQgIlF1aWNrVGltZVBsdWdpblJlcGxh
Y2VtZW50LmgiCiAKKyNpbXBvcnQgIkNvbW1vblZNLmgiCiAjaW1wb3J0ICJFdmVudC5oIgogI2lt
cG9ydCAiSFRNTFBsdWdJbkVsZW1lbnQuaCIKICNpbXBvcnQgIkhUTUxWaWRlb0VsZW1lbnQuaCIK
QEAgLTE0OCw3ICsxNDksNyBAQCBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gUXVpY2tUaW1lUGx1
Z2luCiAKIERPTVdyYXBwZXJXb3JsZCYgUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6Omlzb2xh
dGVkV29ybGQoKQogewotICAgIHN0YXRpYyBET01XcmFwcGVyV29ybGQmIGlzb2xhdGVkV29ybGQg
PSBET01XcmFwcGVyV29ybGQ6OmNyZWF0ZShKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSkubGVha1Jl
ZigpOworICAgIHN0YXRpYyBET01XcmFwcGVyV29ybGQmIGlzb2xhdGVkV29ybGQgPSBET01XcmFw
cGVyV29ybGQ6OmNyZWF0ZShjb21tb25WTSgpKS5sZWFrUmVmKCk7CiAgICAgcmV0dXJuIGlzb2xh
dGVkV29ybGQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwOTY3OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDk2
LDYgKzQ5Niw4IEBACiAJCTBGNUUyMDA2MThFNzcxRkMwMDNFQzNFNSAvKiBQbGF0Zm9ybUNBQW5p
bWF0aW9uQ29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNUUyMDA1MThFNzcxRkMwMDNFQzNFNSAvKiBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2Eu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjYw
NUFFQzE1Rjk0ODQ4MDA0REYwQzAgLyogU2Nyb2xsaW5nQ29uc3RyYWludHMuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MDVBRUExNUY5NDg0ODAw
NERGMEMwIC8qIFNjcm9sbGluZ0NvbnN0cmFpbnRzLmNwcCAqLzsgfTsKIAkJMEY2MDVBRUQxNUY5
NDg0ODAwNERGMEMwIC8qIFNjcm9sbGluZ0NvbnN0cmFpbnRzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYwNUFFQjE1Rjk0ODQ4MDA0REYwQzAgLyog
U2Nyb2xsaW5nQ29uc3RyYWludHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkwRjYwRjMyQjFERkJCMTA3MDA0MTZENkMgLyogQ29tbW9uVk0uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjBGMzJBMURG
QkIxMDQwMDQxNkQ2QyAvKiBDb21tb25WTS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTBGNjBGMzJDMURGQkIxMEIwMDQxNkQ2QyAvKiBDb21tb25W
TS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYw
RjMyOTFERkJCMTA0MDA0MTZENkMgLyogQ29tbW9uVk0uY3BwICovOyB9OwogCQkwRjYzODNERDE4
NjE1QjI5MDAzRTVEQjUgLyogVGhyZWFkZWRTY3JvbGxpbmdUcmVlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjM4M0RCMTg2MTVCMjkwMDNFNURC
NSAvKiBUaHJlYWRlZFNjcm9sbGluZ1RyZWUuY3BwICovOyB9OwogCQkwRjYzODNERTE4NjE1QjI5
MDAzRTVEQjUgLyogVGhyZWFkZWRTY3JvbGxpbmdUcmVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYzODNEQzE4NjE1QjI5MDAzRTVEQjUgLyogVGhy
ZWFkZWRTY3JvbGxpbmdUcmVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEY2QTEyQkQxQTAwOTIzNzAwQzZERTcyIC8qIERlYnVnUGFnZU92ZXJs
YXlzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NkExMkJCMUEwMDkyMzcwMEM2REU3MiAvKiBEZWJ1Z1BhZ2VPdmVybGF5cy5jcHAgKi87IH07CkBA
IC03NDkwLDYgKzc0OTIsOCBAQAogCQkwRjVFMjAwNTE4RTc3MUZDMDAzRUMzRTUgLyogUGxhdGZv
cm1DQUFuaW1hdGlvbkNvY29hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBs
YXRmb3JtQ0FBbmltYXRpb25Db2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjYwNUFFQTE1Rjk0ODQ4MDA0REYwQzAgLyogU2Nyb2xsaW5nQ29uc3RyYWludHMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsaW5nQ29uc3RyYWludHMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjYwNUFFQjE1Rjk0ODQ4MDA0REYwQzAg
LyogU2Nyb2xsaW5nQ29uc3RyYWludHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU2Nyb2xsaW5nQ29uc3RyYWludHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEY2MEYzMjkxREZCQjEwNDAwNDE2RDZDIC8qIENvbW1vblZNLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbW1vblZNLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEY2MEYzMkExREZCQjEwNDAwNDE2RDZDIC8qIENvbW1vblZNLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbW1vblZNLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNjM4M0RCMTg2MTVCMjkwMDNFNURCNSAvKiBUaHJlYWRlZFNjcm9sbGluZ1Ry
ZWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkZWRTY3Jv
bGxpbmdUcmVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MzgzREMxODYx
NUIyOTAwM0U1REI1IC8qIFRocmVhZGVkU2Nyb2xsaW5nVHJlZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBUaHJlYWRlZFNjcm9sbGluZ1RyZWUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY2QTEyQkIxQTAwOTIzNzAwQzZERTcyIC8qIERlYnVnUGFnZU92ZXJs
YXlzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlYnVnUGFnZU92
ZXJsYXlzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxOTE0LDYgKzIxOTE4
LDggQEAKIAkJCQlFMzA3REVDODFEODFFNDQ4MDAxNDFDQUYgLyogQ2FjaGVkTW9kdWxlU2NyaXB0
TG9hZGVyQ2xpZW50LmggKi8sCiAJCQkJQkNENTMzNjMwRUQ2ODQ4OTAwODg3NDY4IC8qIENhY2hl
ZFNjcmlwdFNvdXJjZVByb3ZpZGVyLmggKi8sCiAJCQkJOTNGOEIzMDYwQTMwMEZFQTAwRjYxQUI4
IC8qIENvZGVHZW5lcmF0b3JKUy5wbSAqLywKKwkJCQkwRjYwRjMyOTFERkJCMTA0MDA0MTZENkMg
LyogQ29tbW9uVk0uY3BwICovLAorCQkJCTBGNjBGMzJBMURGQkIxMDQwMDQxNkQ2QyAvKiBDb21t
b25WTS5oICovLAogCQkJCTMxMkQ2N0IwMTUzNTY5MUYwMDU2M0QwRCAvKiBEaWN0aW9uYXJ5LmNw
cCAqLywKIAkJCQkzMTYwMjNFRjE1MzJDNDBDMDBENTBGRjQgLyogRGljdGlvbmFyeS5oICovLAog
CQkJCUI1NjU3NkU3MTdEQTk0RTIwMEE1NkJEQyAvKiBET01Db25zdHJ1Y3RvcldpdGhEb2N1bWVu
dC5oICovLApAQCAtMjc1MjEsNiArMjc1MjcsNyBAQAogCQkJCUZENDVBOTVCMTc1RDQxRUUwMEMy
MUVDOCAvKiBTaGFwZUludGVydmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDQ1QTk1MjE3NUQz
RjNFMDBDMjFFQzggLyogU2hhcGVPdXRzaWRlSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQx
QUYxNTAxNjU2RjE1MTAwQzZENEY3IC8qIFNoYXBlVmFsdWUuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGNjBGMzJCMURGQkIxMDcwMDQxNkQ2QyAvKiBDb21tb25WTS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMUE0QTk1NEUwQjRFRENDQjAwMkQ4QzNDIC8qIFNoYXJlZEJ1ZmZlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTdCMUYwMkYxM0IwMjVEMjAwRjUxMDNGIC8qIFNoYXJlZEJ1ZmZlckNodW5rUmVh
ZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOUVBMzA5OUVCNzhDMDA1NkU1ODEgLyogU2hh
cmVkVGltZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzE2MjUsNiArMzE2MzIsNyBAQAogCQkJCUEx
NDgzMkIzMTg3RjYyOTEwMERBNjNBNiAvKiBXQUtDbGlwVmlldy5tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTE0ODMyQjUxODdGNjJGQzAwREE2M0E2IC8qIFdBS1Jlc3BvbmRlci5tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTE0ODMyQjcxODdGNjM2QzAwREE2M0E2IC8qIFdBS1Njcm9sbFZpZXcubW0gaW4g
U291cmNlcyAqLywKKwkJCQkwRjYwRjMyQzFERkJCMTBCMDA0MTZENkMgLyogQ29tbW9uVk0uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTE0ODMyQjkxODdGNjNENTAwREE2M0E2IC8qIFdBS1ZpZXcu
bW0gaW4gU291cmNlcyAqLywKIAkJCQlBMTQ4MzJCQzE4N0Y2NDhFMDBEQTYzQTYgLyogV0FLV2lu
ZG93Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQ3RjI5OTExM0Q0QzBDQjAwQUQ5NTM1IC8qIFdh
dmVTaGFwZXJEU1BLZXJuZWwuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9Db21tb25WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvQ29tbW9uVk0uY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0NvbW1vblZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDczIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJDb21tb25WTS5oIgorCisjaW5jbHVkZSAiU2NyaXB0Q29u
dHJvbGxlci5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiV2ViQ29yZUpTQ2xp
ZW50RGF0YS5oIgorI2luY2x1ZGUgPGhlYXAvSGVhcElubGluZXMuaD4KKyNpbmNsdWRlIDxydW50
aW1lL1ZNLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKwordXNpbmcgbmFtZXNwYWNl
IEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitWTSogZ19jb21tb25WTU9yTnVsbDsKK2Jv
b2wgZ19vcGFxdWVSb290V3JpdGVCYXJyaWVyRW5hYmxlZDsKKworVk0mIGNvbW1vblZNU2xvdygp
Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoIWdfY29tbW9uVk1P
ck51bGwpOworICAgIAorICAgIFNjcmlwdENvbnRyb2xsZXI6OmluaXRpYWxpemVUaHJlYWRpbmco
KTsKKyAgICBnX2NvbW1vblZNT3JOdWxsID0gJlZNOjpjcmVhdGVMZWFrZWQoTGFyZ2VIZWFwKS5s
ZWFrUmVmKCk7CisgICAgZ19jb21tb25WTU9yTnVsbC0+aGVhcC5hY3F1aXJlQWNjZXNzKCk7IC8v
IEF0IGFueSB0aW1lLCB3ZSBtYXkgZG8gdGhpbmdzIHRoYXQgYWZmZWN0IHRoZSBHQy4KKyNpZiAh
UExBVEZPUk0oSU9TKQorICAgIGdfY29tbW9uVk1Pck51bGwtPnNldEV4Y2x1c2l2ZVRocmVhZChz
dGQ6OnRoaXNfdGhyZWFkOjpnZXRfaWQoKSk7CisjZWxzZQorICAgIGdfY29tbW9uVk1Pck51bGwt
PmhlYXAuc2V0UnVuTG9vcChXZWJUaHJlYWRSdW5Mb29wKCkpOworICAgIGdfY29tbW9uVk1Pck51
bGwtPmhlYXAubWFjaGluZVRocmVhZHMoKS5hZGRDdXJyZW50VGhyZWFkKCk7CisjZW5kaWYKKyAg
ICAKKyAgICBnX2NvbW1vblZNT3JOdWxsLT5zZXRHbG9iYWxDb25zdFJlZGVjbGFyYXRpb25TaG91
bGRUaHJvdyhTZXR0aW5nczo6Z2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9uU2hvdWxkVGhyb3coKSk7
CisgICAgZ19jb21tb25WTU9yTnVsbC0+aGVhcC5hZGRNdXRhdG9yU2hvdWxkQmVGZW5jZWRDYWNo
ZShnX29wYXF1ZVJvb3RXcml0ZUJhcnJpZXJFbmFibGVkKTsKKyAgICAKKyAgICBpbml0Tm9ybWFs
V29ybGRDbGllbnREYXRhKGdfY29tbW9uVk1Pck51bGwpOworICAgIAorICAgIHJldHVybiAqZ19j
b21tb25WTU9yTnVsbDsKK30KKwordm9pZCB3cml0ZUJhcnJpZXJPcGFxdWVSb290U2xvdyh2b2lk
KiByb290KQoreworICAgIGlmIChWTSogdm0gPSBnX2NvbW1vblZNT3JOdWxsKQorICAgICAgICB2
bS0+aGVhcC53cml0ZUJhcnJpZXJPcGFxdWVSb290KHJvb3QpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0NvbW1vblZNLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQ29tbW9uVk0uaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Db21tb25WTS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBKU0MgeworY2xhc3Mg
Vk07Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV0VCQ09SRV9FWFBPUlQgZXh0ZXJuIEpT
Qzo6Vk0qIGdfY29tbW9uVk1Pck51bGw7CitXRUJDT1JFX0VYUE9SVCBleHRlcm4gYm9vbCBnX29w
YXF1ZVJvb3RXcml0ZUJhcnJpZXJFbmFibGVkOworCitXRUJDT1JFX0VYUE9SVCBKU0M6OlZNJiBj
b21tb25WTVNsb3coKTsKK1dFQkNPUkVfRVhQT1JUIHZvaWQgd3JpdGVCYXJyaWVyT3BhcXVlUm9v
dFNsb3codm9pZCopOworCitpbmxpbmUgSlNDOjpWTSYgY29tbW9uVk0oKQoreworICAgIGlmIChK
U0M6OlZNKiByZXN1bHQgPSBnX2NvbW1vblZNT3JOdWxsKQorICAgICAgICByZXR1cm4gKnJlc3Vs
dDsKKyAgICByZXR1cm4gY29tbW9uVk1TbG93KCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1
bmM+Cit2b2lkIHdyaXRlQmFycmllck9wYXF1ZVJvb3QoY29uc3QgRnVuYyYgcm9vdFRodW5rKQor
eworICAgIGlmIChnX29wYXF1ZVJvb3RXcml0ZUJhcnJpZXJFbmFibGVkKQorICAgICAgICB3cml0
ZUJhcnJpZXJPcGFxdWVSb290U2xvdyhyb290VGh1bmsoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NV3JhcHBlcldv
cmxkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01XcmFw
cGVyV29ybGQuY3BwCShyZXZpc2lvbiAyMDk2NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9ET01XcmFwcGVyV29ybGQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRE9NV3JhcHBlcldvcmxkLmgiCiAKKyNp
bmNsdWRlICJDb21tb25WTS5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCiAjaW5jbHVkZSAi
U2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKQEAg
LTY5LDcgKzcwLDcgQEAgRE9NV3JhcHBlcldvcmxkJiBub3JtYWxXb3JsZChKU0M6OlZNJiB2bQog
RE9NV3JhcHBlcldvcmxkJiBtYWluVGhyZWFkTm9ybWFsV29ybGQoKQogewogICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7Ci0gICAgc3RhdGljIERPTVdyYXBwZXJXb3JsZCYgY2FjaGVkTm9ybWFs
V29ybGQgPSBub3JtYWxXb3JsZChKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7CisgICAgc3RhdGlj
IERPTVdyYXBwZXJXb3JsZCYgY2FjaGVkTm9ybWFsV29ybGQgPSBub3JtYWxXb3JsZChjb21tb25W
TSgpKTsKICAgICByZXR1cm4gY2FjaGVkTm9ybWFsV29ybGQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjA5Njc4KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdD
Q29udHJvbGxlci5oIgogCi0jaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKKyNpbmNsdWRlICJDb21t
b25WTS5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvVk0uaD4KICNpbmNsdWRlIDxydW50aW1lL0pTTG9j
ay5oPgogI2luY2x1ZGUgPGhlYXAvSGVhcC5oPgpAQCAtNDAsOCArNDAsOCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHN0YXRpYyB2b2lkIGNvbGxlY3Qodm9pZCopCiB7Ci0gICAgSlNMb2NrSG9s
ZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOwotICAgIEpTRE9NV2luZG93Ojpjb21t
b25WTSgpLmhlYXAuY29sbGVjdEFsbEdhcmJhZ2UoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhj
b21tb25WTSgpKTsKKyAgICBjb21tb25WTSgpLmhlYXAuY29sbGVjdEFsbEdhcmJhZ2UoKTsKIH0K
IAogR0NDb250cm9sbGVyJiBHQ0NvbnRyb2xsZXI6OnNpbmdsZXRvbigpCkBAIC02MSw4ICs2MSw4
IEBAIHZvaWQgR0NDb250cm9sbGVyOjpnYXJiYWdlQ29sbGVjdFNvb24oKQogICAgIC8vIG9mIHRo
ZSBnYXJiYWdlIGNvbGxlY3RvciB0aW1lcnMgaW4gSmF2YVNjcmlwdENvcmUuIFdlIHdvdWxkbid0
IG5lZWQgdGhpcyBpZiBKYXZhU2NyaXB0Q29yZQogICAgIC8vIHVzZWQgYSB0aW1lciBpbXBsZW1l
bnRhdGlvbiBmcm9tIFdURiBsaWtlIFJ1bkxvb3A6OlRpbWVyLgogI2lmIFVTRShDRikgfHwgVVNF
KEdMSUIpCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOwot
ICAgIEpTRE9NV2luZG93Ojpjb21tb25WTSgpLmhlYXAucmVwb3J0QWJhbmRvbmVkT2JqZWN0R3Jh
cGgoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhjb21tb25WTSgpKTsKKyAgICBjb21tb25WTSgp
LmhlYXAucmVwb3J0QWJhbmRvbmVkT2JqZWN0R3JhcGgoKTsKICNlbHNlCiAgICAgZ2FyYmFnZUNv
bGxlY3RPbk5leHRSdW5Mb29wKCk7CiAjZW5kaWYKQEAgLTgxLDkgKzgxLDkgQEAgdm9pZCBHQ0Nv
bnRyb2xsZXI6OmdjVGltZXJGaXJlZCgpCiAKIHZvaWQgR0NDb250cm9sbGVyOjpnYXJiYWdlQ29s
bGVjdE5vdygpCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZN
KCkpOwotICAgIGlmICghSlNET01XaW5kb3c6OmNvbW1vblZNKCkuaGVhcC5pc0N1cnJlbnRUaHJl
YWRCdXN5KCkpIHsKLSAgICAgICAgSlNET01XaW5kb3c6OmNvbW1vblZNKCkuaGVhcC5jb2xsZWN0
QWxsR2FyYmFnZSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGNvbW1vblZNKCkpOworICAgIGlm
ICghY29tbW9uVk0oKS5oZWFwLmlzQ3VycmVudFRocmVhZEJ1c3koKSkgeworICAgICAgICBjb21t
b25WTSgpLmhlYXAuY29sbGVjdEFsbEdhcmJhZ2UoKTsKICAgICAgICAgV1RGOjpyZWxlYXNlRmFz
dE1hbGxvY0ZyZWVNZW1vcnkoKTsKICAgICB9CiB9CkBAIC05MSw5ICs5MSw5IEBAIHZvaWQgR0ND
b250cm9sbGVyOjpnYXJiYWdlQ29sbGVjdE5vdygpCiB2b2lkIEdDQ29udHJvbGxlcjo6Z2FyYmFn
ZUNvbGxlY3ROb3dJZk5vdERvbmVSZWNlbnRseSgpCiB7CiAjaWYgVVNFKENGKSB8fCBVU0UoR0xJ
QikKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7Ci0gICAg
aWYgKCFKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS5oZWFwLmlzQ3VycmVudFRocmVhZEJ1c3koKSkK
LSAgICAgICAgSlNET01XaW5kb3c6OmNvbW1vblZNKCkuaGVhcC5jb2xsZWN0QWxsR2FyYmFnZUlm
Tm90RG9uZVJlY2VudGx5KCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7Cisg
ICAgaWYgKCFjb21tb25WTSgpLmhlYXAuaXNDdXJyZW50VGhyZWFkQnVzeSgpKQorICAgICAgICBj
b21tb25WTSgpLmhlYXAuY29sbGVjdEFsbEdhcmJhZ2VJZk5vdERvbmVSZWNlbnRseSgpOwogI2Vs
c2UKICAgICBnYXJiYWdlQ29sbGVjdFNvb24oKTsKICNlbmRpZgpAQCAtMTEzLDE5ICsxMTMsMTkg
QEAgdm9pZCBHQ0NvbnRyb2xsZXI6OmdhcmJhZ2VDb2xsZWN0T25BbHRlcgogCiB2b2lkIEdDQ29u
dHJvbGxlcjo6c2V0SmF2YVNjcmlwdEdhcmJhZ2VDb2xsZWN0b3JUaW1lckVuYWJsZWQoYm9vbCBl
bmFibGUpCiB7Ci0gICAgSlNET01XaW5kb3c6OmNvbW1vblZNKCkuaGVhcC5zZXRHYXJiYWdlQ29s
bGVjdGlvblRpbWVyRW5hYmxlZChlbmFibGUpOworICAgIGNvbW1vblZNKCkuaGVhcC5zZXRHYXJi
YWdlQ29sbGVjdGlvblRpbWVyRW5hYmxlZChlbmFibGUpOwogfQogCiB2b2lkIEdDQ29udHJvbGxl
cjo6ZGVsZXRlQWxsQ29kZShEZWxldGVBbGxDb2RlRWZmb3J0IGVmZm9ydCkKIHsKLSAgICBKU0xv
Y2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7Ci0gICAgSlNET01XaW5kb3c6
OmNvbW1vblZNKCkuZGVsZXRlQWxsQ29kZShlZmZvcnQpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
KGNvbW1vblZNKCkpOworICAgIGNvbW1vblZNKCkuZGVsZXRlQWxsQ29kZShlZmZvcnQpOwogfQog
CiB2b2lkIEdDQ29udHJvbGxlcjo6ZGVsZXRlQWxsTGlua2VkQ29kZShEZWxldGVBbGxDb2RlRWZm
b3J0IGVmZm9ydCkKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9u
Vk0oKSk7Ci0gICAgSlNET01XaW5kb3c6OmNvbW1vblZNKCkuZGVsZXRlQWxsTGlua2VkQ29kZShl
ZmZvcnQpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGNvbW1vblZNKCkpOworICAgIGNvbW1vblZN
KCkuZGVsZXRlQWxsTGlua2VkQ29kZShlZmZvcnQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNv
bHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0
b21YUGF0aE5TUmVzb2x2ZXIuY3BwCShyZXZpc2lvbiAyMDk2NzgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU0N1c3Rv
bVhQYXRoTlNSZXNvbHZlci5oIgogCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJE
b2N1bWVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJGcmFtZS5o
IgpAQCAtNjksNyArNzAsNyBAQCBTdHJpbmcgSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI6Omxvb2t1
cE5hCiB7CiAgICAgQVNTRVJUKG1fY3VzdG9tUmVzb2x2ZXIpOwogCi0gICAgSlNMb2NrSG9sZGVy
IGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhjb21tb25WTSgpKTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZ2xvYmFsT2JqZWN0LT5n
bG9iYWxFeGVjKCk7CiAgICAgICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01CaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUJpbmRpbmcuY3BwCShyZXZpc2lvbiAyMDk2NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3
IEBACiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAKICNpbmNsdWRlICJDYWNoZWRTY3JpcHQu
aCIKKyNpbmNsdWRlICJDb21tb25WTS5oIgogI2luY2x1ZGUgIkRPTUNvbnN0cnVjdG9yV2l0aERv
Y3VtZW50LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkV4Y2VwdGlv
bkNvZGVEZXNjcmlwdGlvbi5oIgpAQCAtNjEsNyArNjIsNyBAQCBTVEFUSUNfQVNTRVJUX0lTX1RS
SVZJQUxMWV9ERVNUUlVDVElCTEUoCiAKIHZvaWQgYWRkSW1wdXJlUHJvcGVydHkoY29uc3QgQXRv
bWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgSlNET01XaW5kb3c6OmNvbW1vblZNKCku
YWRkSW1wdXJlUHJvcGVydHkocHJvcGVydHlOYW1lKTsKKyAgICBjb21tb25WTSgpLmFkZEltcHVy
ZVByb3BlcnR5KHByb3BlcnR5TmFtZSk7CiB9CiAKIEpTVmFsdWUganNPd25lZFN0cmluZ09yTnVs
bChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcykKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAkocmV2aXNpb24gMjA5Njc4KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVkZSAiQWN0aXZlRE9NQ2FsbGJhY2tN
aWNyb3Rhc2suaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRlICJDb21tb25WTS5oIgog
I2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSW5z
cGVjdG9yQ29udHJvbGxlci5oIgpAQCAtMjQ1LDMwICsyNDYsNiBAQCBKU0RPTVdpbmRvd1NoZWxs
KiBKU0RPTVdpbmRvd0Jhc2U6OnNoZWxsCiAgICAgcmV0dXJuIG1fc2hlbGw7CiB9CiAKLVZNJiBK
U0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwotCi0gICAgc3RhdGljIFZNKiB2bSA9IG51bGxwdHI7Ci0gICAgaWYgKCF2bSkgewotICAgICAg
ICBTY3JpcHRDb250cm9sbGVyOjppbml0aWFsaXplVGhyZWFkaW5nKCk7Ci0gICAgICAgIHZtID0g
JlZNOjpjcmVhdGVMZWFrZWQoTGFyZ2VIZWFwKS5sZWFrUmVmKCk7Ci0gICAgICAgIHZtLT5oZWFw
LmFjcXVpcmVBY2Nlc3MoKTsgLy8gQXQgYW55IHRpbWUsIHdlIG1heSBkbyB0aGluZ3MgdGhhdCBh
ZmZlY3QgdGhlIEdDLgotI2lmICFQTEFURk9STShJT1MpCi0gICAgICAgIHZtLT5zZXRFeGNsdXNp
dmVUaHJlYWQoc3RkOjp0aGlzX3RocmVhZDo6Z2V0X2lkKCkpOwotI2Vsc2UKLSAgICAgICAgdm0t
PmhlYXAuc2V0UnVuTG9vcChXZWJUaHJlYWRSdW5Mb29wKCkpOwotICAgICAgICB2bS0+aGVhcC5t
YWNoaW5lVGhyZWFkcygpLmFkZEN1cnJlbnRUaHJlYWQoKTsKLSNlbmRpZgotCi0gICAgICAgIHZt
LT5zZXRHbG9iYWxDb25zdFJlZGVjbGFyYXRpb25TaG91bGRUaHJvdyhTZXR0aW5nczo6Z2xvYmFs
Q29uc3RSZWRlY2xhcmF0aW9uU2hvdWxkVGhyb3coKSk7Ci0KLSAgICAgICAgaW5pdE5vcm1hbFdv
cmxkQ2xpZW50RGF0YSh2bSk7Ci0gICAgfQotCi0gICAgcmV0dXJuICp2bTsKLX0KLQogLy8gSlNE
T01HbG9iYWxPYmplY3QqIGlzIGlnbm9yZWQsIGFjY2Vzc2luZyBhIHdpbmRvdyBpbiBhbnkgY29u
dGV4dCB3aWxsCiAvLyB1c2UgdGhhdCBET01XaW5kb3cncyBwcm90b3R5cGUgY2hhaW4uCiBKU1Zh
bHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCosIERPTVdpbmRvdyYg
ZG9tV2luZG93KQpAQCAtMzA5LDcgKzI4Niw3IEBAIEpTRE9NV2luZG93KiB0b0pTRE9NV2luZG93
KEpTVmFsdWUgdmFsdWUKIAogdm9pZCBKU0RPTVdpbmRvd0Jhc2U6OmZpcmVGcmFtZUNsZWFyZWRX
YXRjaHBvaW50c0ZvcldpbmRvdyhET01XaW5kb3cqIHdpbmRvdykKIHsKLSAgICBKU0M6OlZNJiB2
bSA9IEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKTsKKyAgICBKU0M6OlZNJiB2bSA9IGNvbW1v
blZNKCk7CiAgICAgSlNWTUNsaWVudERhdGEqIGNsaWVudERhdGEgPSBzdGF0aWNfY2FzdDxKU1ZN
Q2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwogICAgIFZlY3RvcjxSZWY8RE9NV3JhcHBlcldv
cmxkPj4gd3JhcHBlcldvcmxkczsKICAgICBjbGllbnREYXRhLT5nZXRBbGxXb3JsZHMod3JhcHBl
cldvcmxkcyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jh
c2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRv
d0Jhc2UuaAkocmV2aXNpb24gMjA5Njc4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01XaW5kb3dCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDYgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAgICAgICAgIEpTRE9NV2luZG93U2hlbGwqIHNoZWxsKCkgY29uc3Q7
CiAKLSAgICAgICAgc3RhdGljIEpTQzo6Vk0mIGNvbW1vblZNKCk7CiAgICAgICAgIHN0YXRpYyB2
b2lkIGZpcmVGcmFtZUNsZWFyZWRXYXRjaHBvaW50c0ZvcldpbmRvdyhET01XaW5kb3cqKTsKICAg
ICAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dT
aGVsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01X
aW5kb3dTaGVsbC5jcHAJKHJldmlzaW9uIDIwOTY3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NV2luZG93U2hlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNET01XaW5kb3dTaGVsbC5oIgog
CisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkdD
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCkBAIC03OSw3ICs4MCw3IEBA
IHZvaWQgSlNET01XaW5kb3dTaGVsbDo6c2V0V2luZG93KFJlZlB0cjwKICAgICAvLyB3aGVuIHdl
IGFsbG9jYXRlIHRoZSBnbG9iYWwgb2JqZWN0LiAoT25jZSB0aGUgZ2xvYmFsIG9iamVjdCBpcyBm
dWxseQogICAgIC8vIGNvbnN0cnVjdGVkLCBpdCBjYW4gbWFyayBpdHMgb3duIHByb3RvdHlwZS4p
CiAgICAgCi0gICAgVk0mIHZtID0gSlNET01XaW5kb3c6OmNvbW1vblZNKCk7CisgICAgVk0mIHZt
ID0gY29tbW9uVk0oKTsKICAgICBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSA9IEpTRE9N
V2luZG93UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIDAsIGpzTnVsbCgpKTsKICAgICBT
dHJvbmc8SlNET01XaW5kb3dQcm90b3R5cGU+IHByb3RvdHlwZSh2bSwgSlNET01XaW5kb3dQcm90
b3R5cGU6OmNyZWF0ZSh2bSwgMCwgcHJvdG90eXBlU3RydWN0dXJlKSk7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5oCShyZXZpc2lvbiAyMDk2NzgpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uaAkod29ya2luZyBjb3B5
KQpAQCAtNjUsMTIgKzY1LDcgQEAgaW5saW5lIHZvaWQgd2lsbENyZWF0ZVBvc3NpYmx5T3JwaGFu
ZWRUcgogCiBpbmxpbmUgdm9pZCogcm9vdChOb2RlKiBub2RlKQogewotICAgIGlmIChub2RlLT5p
bkRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiAmbm9kZS0+ZG9jdW1lbnQoKTsKLQotICAgIHdo
aWxlIChub2RlLT5wYXJlbnRPclNoYWRvd0hvc3ROb2RlKCkpCi0gICAgICAgIG5vZGUgPSBub2Rl
LT5wYXJlbnRPclNoYWRvd0hvc3ROb2RlKCk7Ci0gICAgcmV0dXJuIG5vZGU7CisgICAgcmV0dXJu
IG5vZGUtPm9wYXF1ZVJvb3QoKTsKIH0KIAogaW5saW5lIHZvaWQqIHJvb3QoTm9kZSYgbm9kZSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhY2hlZEZyYW1lRGF0YS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FjaGVk
RnJhbWVEYXRhLmNwcAkocmV2aXNpb24gMjA5Njc4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiAr
MzIsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNjcmlwdENhY2hlZEZyYW1l
RGF0YS5oIgogCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgog
I2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiR0NDb250cm9sbGVyLmgiCkBAIC00OSw3ICs1
MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjpTY3Jp
cHRDYWNoZWRGcmFtZURhdGEoRnJhbWUmIGZyYW1lKQogewotICAgIEpTTG9ja0hvbGRlciBsb2Nr
KEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soY29t
bW9uVk0oKSk7CiAKICAgICBTY3JpcHRDb250cm9sbGVyJiBzY3JpcHRDb250cm9sbGVyID0gZnJh
bWUuc2NyaXB0KCk7CiAgICAgVmVjdG9yPEpTQzo6U3Ryb25nPEpTRE9NV2luZG93U2hlbGw+PiB3
aW5kb3dTaGVsbHMgPSBzY3JpcHRDb250cm9sbGVyLndpbmRvd1NoZWxscygpOwpAQCAtNzEsNyAr
NzIsNyBAQCBTY3JpcHRDYWNoZWRGcmFtZURhdGE6On5TY3JpcHRDYWNoZWRGcmFtCiAKIHZvaWQg
U2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjpyZXN0b3JlKEZyYW1lJiBmcmFtZSkKIHsKLSAgICBKU0xv
Y2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgIEpTTG9ja0hv
bGRlciBsb2NrKGNvbW1vblZNKCkpOwogCiAgICAgUGFnZSogcGFnZSA9IGZyYW1lLnBhZ2UoKTsK
ICAgICBTY3JpcHRDb250cm9sbGVyJiBzY3JpcHRDb250cm9sbGVyID0gZnJhbWUuc2NyaXB0KCk7
CkBAIC0xMDYsNyArMTA3LDcgQEAgdm9pZCBTY3JpcHRDYWNoZWRGcmFtZURhdGE6OmNsZWFyKCkK
ICAgICBpZiAobV93aW5kb3dzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSlNM
b2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9jayhjb21tb25WTSgpKTsKICAgICBtX3dpbmRvd3MuY2xlYXIoKTsKICAgICBHQ0Nv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLmdhcmJhZ2VDb2xsZWN0U29vbigpOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAJKHJldmlz
aW9uIDIwOTY3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xs
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlICJCcmlk
Z2VKU0MuaCIKICNpbmNsdWRlICJDYWNoZWRNb2R1bGVTY3JpcHQuaCIKKyNpbmNsdWRlICJDb21t
b25WTS5oIgogI2luY2x1ZGUgIkNvbnRlbnRTZWN1cml0eVBvbGljeS5oIgogI2luY2x1ZGUgIkRv
Y3VtZW50TG9hZGVyLmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKQEAgLTEwNSw3ICsxMDYsNyBAQCBT
Y3JpcHRDb250cm9sbGVyOjp+U2NyaXB0Q29udHJvbGxlcigpCiAgICAgZGlzY29ubmVjdFBsYXRm
b3JtU2NyaXB0T2JqZWN0cygpOwogCiAgICAgaWYgKG1fY2FjaGVhYmxlQmluZGluZ1Jvb3RPYmpl
Y3QpIHsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21tb25W
TSgpKTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7CiAgICAgICAgIG1f
Y2FjaGVhYmxlQmluZGluZ1Jvb3RPYmplY3QtPmludmFsaWRhdGUoKTsKICAgICAgICAgbV9jYWNo
ZWFibGVCaW5kaW5nUm9vdE9iamVjdCA9IG51bGxwdHI7CiAgICAgfQpAQCAtMjcxLDcgKzI3Miw3
IEBAIEpTQzo6SlNWYWx1ZSBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZU0KIAogUmVmPERPTVdy
YXBwZXJXb3JsZD4gU2NyaXB0Q29udHJvbGxlcjo6Y3JlYXRlV29ybGQoKQogewotICAgIHJldHVy
biBET01XcmFwcGVyV29ybGQ6OmNyZWF0ZShKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7CisgICAg
cmV0dXJuIERPTVdyYXBwZXJXb3JsZDo6Y3JlYXRlKGNvbW1vblZNKCkpOwogfQogCiBWZWN0b3I8
SlNDOjpTdHJvbmc8SlNET01XaW5kb3dTaGVsbD4+IFNjcmlwdENvbnRyb2xsZXI6OndpbmRvd1No
ZWxscygpCkBAIC0yODMsNyArMjg0LDcgQEAgVmVjdG9yPEpTQzo6U3Ryb25nPEpTRE9NV2luZG93
U2hlbGw+PiBTYwogCiB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmdldEFsbFdvcmxkcyhWZWN0b3I8
UmVmPERPTVdyYXBwZXJXb3JsZD4+JiB3b3JsZHMpCiB7Ci0gICAgc3RhdGljX2Nhc3Q8SlNWTUNs
aWVudERhdGEqPihKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS5jbGllbnREYXRhKS0+Z2V0QWxsV29y
bGRzKHdvcmxkcyk7CisgICAgc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPihjb21tb25WTSgp
LmNsaWVudERhdGEpLT5nZXRBbGxXb3JsZHMod29ybGRzKTsKIH0KIAogdm9pZCBTY3JpcHRDb250
cm9sbGVyOjpjbGVhcldpbmRvd1NoZWxsKERPTVdpbmRvdyogbmV3RE9NV2luZG93LCBib29sIGdv
aW5nSW50b1BhZ2VDYWNoZSkKQEAgLTI5MSw3ICsyOTIsNyBAQCB2b2lkIFNjcmlwdENvbnRyb2xs
ZXI6OmNsZWFyV2luZG93U2hlbGwoCiAgICAgaWYgKG1fd2luZG93U2hlbGxzLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNl
Ojpjb21tb25WTSgpKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhjb21tb25WTSgpKTsKIAogICAg
IFZlY3RvcjxKU0M6OlN0cm9uZzxKU0RPTVdpbmRvd1NoZWxsPj4gd2luZG93U2hlbGxzID0gdGhp
cy0+d2luZG93U2hlbGxzKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3aW5kb3dTaGVs
bHMuc2l6ZSgpOyArK2kpIHsKQEAgLTQ5Niw3ICs0OTcsNyBAQCBCaW5kaW5nczo6Um9vdE9iamVj
dCogU2NyaXB0Q29udHJvbGxlcjo6CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaWYgKCFtX2Nh
Y2hlYWJsZUJpbmRpbmdSb290T2JqZWN0KSB7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKEpT
RE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGNv
bW1vblZNKCkpOwogICAgICAgICBtX2NhY2hlYWJsZUJpbmRpbmdSb290T2JqZWN0ID0gQmluZGlu
Z3M6OlJvb3RPYmplY3Q6OmNyZWF0ZSgwLCBnbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSkpOwog
ICAgIH0KICAgICByZXR1cm4gbV9jYWNoZWFibGVCaW5kaW5nUm9vdE9iamVjdC5nZXQoKTsKQEAg
LTUwOCw3ICs1MDksNyBAQCBCaW5kaW5nczo6Um9vdE9iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6
CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaWYgKCFtX2JpbmRpbmdSb290T2JqZWN0KSB7Ci0g
ICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7Cisg
ICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGNvbW1vblZNKCkpOwogICAgICAgICBtX2JpbmRpbmdS
b290T2JqZWN0ID0gQmluZGluZ3M6OlJvb3RPYmplY3Q6OmNyZWF0ZSgwLCBnbG9iYWxPYmplY3Qo
cGx1Z2luV29ybGQoKSkpOwogICAgIH0KICAgICByZXR1cm4gbV9iaW5kaW5nUm9vdE9iamVjdC5n
ZXQoKTsKQEAgLTUzOSw3ICs1NDAsNyBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNvbGxlY3RJ
c29sYXRlZENvCiBOUE9iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6d2luZG93U2NyaXB0TlBPYmpl
Y3QoKQogewogICAgIGlmICghbV93aW5kb3dTY3JpcHROUE9iamVjdCkgewotICAgICAgICBKU0xv
Y2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgICAgICBKU0xv
Y2tIb2xkZXIgbG9jayhjb21tb25WTSgpKTsKICAgICAgICAgaWYgKGNhbkV4ZWN1dGVTY3JpcHRz
KE5vdEFib3V0VG9FeGVjdXRlU2NyaXB0KSkgewogICAgICAgICAgICAgLy8gSmF2YVNjcmlwdCBp
cyBlbmFibGVkLCBzbyB0aGVyZSBpcyBhIEphdmFTY3JpcHQgd2luZG93IG9iamVjdC4KICAgICAg
ICAgICAgIC8vIFJldHVybiBhbiBOUE9iamVjdCBib3VuZCB0byB0aGUgd2luZG93IG9iamVjdC4K
QEAgLTU3NCw3ICs1NzUsNyBAQCBKU09iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6anNPYmplY3RG
b3JQCiAgICAgaWYgKCFjYW5FeGVjdXRlU2NyaXB0cyhOb3RBYm91dFRvRXhlY3V0ZVNjcmlwdCkp
CiAgICAgICAgIHJldHVybiAwOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dC
YXNlOjpjb21tb25WTSgpKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhjb21tb25WTSgpKTsKIAog
ICAgIC8vIENyZWF0ZSBhIEpTT2JqZWN0IGJvdW5kIHRvIHRoaXMgZWxlbWVudAogICAgIEpTRE9N
V2luZG93KiBnbG9iYWxPYmogPSBnbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSk7CkBAIC02MTEs
NyArNjEyLDcgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhbnVwU2NyaXB0T2JqZQogCiB2
b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNsZWFyU2NyaXB0T2JqZWN0cygpCiB7Ci0gICAgSlNMb2Nr
SG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhjb21tb25WTSgpKTsKIAogICAgIFJvb3RPYmplY3RNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IG1fcm9vdE9iamVjdHMuZW5kKCk7CiAgICAgZm9yIChSb290T2JqZWN0TWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1fcm9vdE9iamVjdHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlck1hYy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVy
TWFjLm1tCShyZXZpc2lvbiAyMDk2NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHRDb250cm9sbGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAj
aW1wb3J0ICJTY3JpcHRDb250cm9sbGVyLmgiCiAKICNpbXBvcnQgIkJyaWRnZUpTQy5oIgorI2lt
cG9ydCAiQ29tbW9uVk0uaCIKICNpbXBvcnQgIkRPTVdpbmRvdy5oIgogI2ltcG9ydCAiRnJhbWUu
aCIKICNpbXBvcnQgIkZyYW1lTG9hZGVyLmgiCkBAIC0xMDAsNyArMTAxLDcgQEAgV2ViU2NyaXB0
T2JqZWN0ICpTY3JpcHRDb250cm9sbGVyOjp3aW5kbwogICAgICAgICByZXR1cm4gbmlsOwogCiAg
ICAgaWYgKCFtX3dpbmRvd1NjcmlwdE9iamVjdCkgewotICAgICAgICBKU0M6OkpTTG9ja0hvbGRl
ciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgICAgIEpTQzo6SlNMb2Nr
SG9sZGVyIGxvY2soY29tbW9uVk0oKSk7CiAgICAgICAgIEpTQzo6QmluZGluZ3M6OlJvb3RPYmpl
Y3QqIHJvb3QgPSBiaW5kaW5nUm9vdE9iamVjdCgpOwogICAgICAgICBtX3dpbmRvd1NjcmlwdE9i
amVjdCA9IFtXZWJTY3JpcHRPYmplY3Qgc2NyaXB0T2JqZWN0Rm9ySlNPYmplY3Q6dG9SZWYod2lu
ZG93U2hlbGwocGx1Z2luV29ybGQoKSkpIG9yaWdpblJvb3RPYmplY3Q6cm9vdCByb290T2JqZWN0
OnJvb3RdOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Db2xsZWN0aW9uSW5kZXhD
YWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NvbGxlY3Rpb25JbmRl
eENhY2hlLmNwcAkocmV2aXNpb24gMjA5Njc4KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NvbGxl
Y3Rpb25JbmRleENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTQgKzI2LDE1IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ29sbGVjdGlvbkluZGV4Q2FjaGUuaCIKIAor
I2luY2x1ZGUgIkNvbW1vblZNLmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCi0jaW5jbHVkZSAi
SlNET01XaW5kb3dCYXNlLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogdm9pZCByZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZEZvckNvbGxlY3Rp
b25JbmRleENhY2hlKHNpemVfdCBjb3N0KQogewotICAgIEpTQzo6Vk0mIHZtID0gSlNET01XaW5k
b3dCYXNlOjpjb21tb25WTSgpOworICAgIEpTQzo6Vk0mIHZtID0gY29tbW9uVk0oKTsKICAgICBK
U0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKICAgICAvLyBGSVhNRTogQWRvcHQgcmVwb3J0RXh0
cmFNZW1vcnlWaXNpdGVkLCBhbmQgc3dpdGNoIHRvIHJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVk
LgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI1OTUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAJKHJldmlzaW9uIDIwOTY3OCkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBr
ZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0Br
ZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUu
b3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5
LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAx
MCwgMjAxMSwgMjAxMiwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJDaHJvbWUu
aCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKICNpbmNsdWRlICJDbGFzc0NvbGxlY3Rpb24u
aCIKKyNpbmNsdWRlICJDb21tb25WTS5oIgogI2luY2x1ZGUgIkNvbnRhaW5lck5vZGVBbGdvcml0
aG1zLmgiCiAjaW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgpJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwCShy
ZXZpc2lvbiAyMDk2NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29y
aXRobXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuaCIKIAorI2luY2x1ZGUg
IkNvbW1vblZNLmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiTm9FdmVudERpc3BhdGNo
QXNzZXJ0aW9uLmgiCkBAIC0zMywxMCArMzQsMTAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci12b2lkIG5vdGlmeU5vZGVJbnNlcnRlZEludG9UcmVlKENvbnRhaW5lck5vZGUmIGluc2VydGlv
blBvaW50LCBDb250YWluZXJOb2RlJiwgTm9kZVZlY3RvciYgcG9zdEluc2VydGlvbk5vdGlmaWNh
dGlvblRhcmdldHMpOwotdm9pZCBub3RpZnlOb2RlSW5zZXJ0ZWRJbnRvRG9jdW1lbnQoQ29udGFp
bmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQsIE5vZGUmLCBOb2RlVmVjdG9yJiBwb3N0SW5zZXJ0aW9u
Tm90aWZpY2F0aW9uVGFyZ2V0cyk7Ci12b2lkIG5vdGlmeU5vZGVSZW1vdmVkRnJvbVRyZWUoQ29u
dGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQsIENvbnRhaW5lck5vZGUmKTsKLXZvaWQgbm90aWZ5
Tm9kZVJlbW92ZWRGcm9tRG9jdW1lbnQoQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQsIE5v
ZGUmKTsKK3N0YXRpYyB2b2lkIG5vdGlmeU5vZGVJbnNlcnRlZEludG9UcmVlKENvbnRhaW5lck5v
ZGUmIGluc2VydGlvblBvaW50LCBDb250YWluZXJOb2RlJiwgTm9kZVZlY3RvciYgcG9zdEluc2Vy
dGlvbk5vdGlmaWNhdGlvblRhcmdldHMpOworc3RhdGljIHZvaWQgbm90aWZ5Tm9kZUluc2VydGVk
SW50b0RvY3VtZW50KENvbnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50LCBOb2RlJiwgTm9kZVZl
Y3RvciYgcG9zdEluc2VydGlvbk5vdGlmaWNhdGlvblRhcmdldHMpOworc3RhdGljIHZvaWQgbm90
aWZ5Tm9kZVJlbW92ZWRGcm9tVHJlZShDb250YWluZXJOb2RlJiBpbnNlcnRpb25Qb2ludCwgQ29u
dGFpbmVyTm9kZSYpOworc3RhdGljIHZvaWQgbm90aWZ5Tm9kZVJlbW92ZWRGcm9tRG9jdW1lbnQo
Q29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQsIE5vZGUmKTsKIAogc3RhdGljIHZvaWQgbm90
aWZ5RGVzY2VuZGFudEluc2VydGVkSW50b0RvY3VtZW50KENvbnRhaW5lck5vZGUmIGluc2VydGlv
blBvaW50LCBDb250YWluZXJOb2RlJiBub2RlLCBOb2RlVmVjdG9yJiBwb3N0SW5zZXJ0aW9uTm90
aWZpY2F0aW9uVGFyZ2V0cykKIHsKQEAgLTEwMSw2ICsxMDIsOCBAQCB2b2lkIG5vdGlmeUNoaWxk
Tm9kZUluc2VydGVkKENvbnRhaW5lck5vCiAgICAgICAgIG5vdGlmeU5vZGVJbnNlcnRlZEludG9E
b2N1bWVudChpbnNlcnRpb25Qb2ludCwgbm9kZSwgcG9zdEluc2VydGlvbk5vdGlmaWNhdGlvblRh
cmdldHMpOwogICAgIGVsc2UgaWYgKGlzPENvbnRhaW5lck5vZGU+KG5vZGUpKQogICAgICAgICBu
b3RpZnlOb2RlSW5zZXJ0ZWRJbnRvVHJlZShpbnNlcnRpb25Qb2ludCwgZG93bmNhc3Q8Q29udGFp
bmVyTm9kZT4obm9kZSksIHBvc3RJbnNlcnRpb25Ob3RpZmljYXRpb25UYXJnZXRzKTsKKworICAg
IHdyaXRlQmFycmllck9wYXF1ZVJvb3QoWyZpbnNlcnRpb25Qb2ludF0gKCkgLT4gdm9pZCogeyBy
ZXR1cm4gaW5zZXJ0aW9uUG9pbnQub3BhcXVlUm9vdCgpOyB9KTsKIH0KIAogdm9pZCBub3RpZnlO
b2RlUmVtb3ZlZEZyb21Eb2N1bWVudChDb250YWluZXJOb2RlJiBpbnNlcnRpb25Qb2ludCwgTm9k
ZSYgbm9kZSkKQEAgLTE1Miw2ICsxNTUsOCBAQCB2b2lkIG5vdGlmeU5vZGVSZW1vdmVkRnJvbVRy
ZWUoQ29udGFpbmVyCiAKIHZvaWQgbm90aWZ5Q2hpbGROb2RlUmVtb3ZlZChDb250YWluZXJOb2Rl
JiBpbnNlcnRpb25Qb2ludCwgTm9kZSYgY2hpbGQpCiB7CisgICAgd3JpdGVCYXJyaWVyT3BhcXVl
Um9vdChbJmNoaWxkXSAoKSAtPiB2b2lkKiB7IHJldHVybiAmY2hpbGQ7IH0pOworCiAgICAgaWYg
KCFjaGlsZC5pbkRvY3VtZW50KCkpIHsKICAgICAgICAgaWYgKGlzPENvbnRhaW5lck5vZGU+KGNo
aWxkKSkKICAgICAgICAgICAgIG5vdGlmeU5vZGVSZW1vdmVkRnJvbVRyZWUoaW5zZXJ0aW9uUG9p
bnQsIGRvd25jYXN0PENvbnRhaW5lck5vZGU+KGNoaWxkKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAJKHJldmlzaW9uIDIwOTY3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJDaHJvbWUu
aCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKICNpbmNsdWRlICJDb21tZW50LmgiCisjaW5j
bHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJDb21wb3NpdGlvbkV2ZW50LmgiCiAjaW5jbHVk
ZSAiQ29udGVudFNlY3VyaXR5UG9saWN5LmgiCiAjaW5jbHVkZSAiQ29va2llSmFyLmgiCkBAIC0y
MzY1LDcgKzIzNjYsNyBAQCB2b2lkIERvY3VtZW50OjpyZXN1bWVEZXZpY2VNb3Rpb25BbmRPcmll
CiAKIGJvb2wgRG9jdW1lbnQ6OnNob3VsZEJ5cGFzc01haW5Xb3JsZENvbnRlbnRTZWN1cml0eVBv
bGljeSgpIGNvbnN0CiB7Ci0gICAgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IEpTRE9NV2lu
ZG93Ojpjb21tb25WTSgpLnRvcENhbGxGcmFtZTsKKyAgICBKU0M6OkNhbGxGcmFtZSogY2FsbEZy
YW1lID0gY29tbW9uVk0oKS50b3BDYWxsRnJhbWU7CiAgICAgaWYgKGNhbGxGcmFtZSA9PSBKU0M6
OkNhbGxGcmFtZTo6bm9DYWxsZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIERPTVdy
YXBwZXJXb3JsZCYgZG9tV3JhcHBlcldvcmxkID0gY3VycmVudFdvcmxkKGNhbGxGcmFtZSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAyMDk2NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzOTksNiArMjM5OSwxOCBAQCBib29sIE5v
ZGU6OmluUmVuZGVyZWREb2N1bWVudCgpIGNvbnN0CiAgICAgcmV0dXJuIGluRG9jdW1lbnQoKSAm
JiBkb2N1bWVudCgpLmhhc0xpdmluZ1JlbmRlclRyZWUoKTsKIH0KIAordm9pZCogTm9kZTo6b3Bh
cXVlUm9vdFNsb3coKSBjb25zdAoreworICAgIGNvbnN0IE5vZGUqIG5vZGUgPSB0aGlzOworICAg
IGZvciAoOzspIHsKKyAgICAgICAgY29uc3QgTm9kZSogbmV4dE5vZGUgPSBub2RlLT5wYXJlbnRP
clNoYWRvd0hvc3ROb2RlKCk7CisgICAgICAgIGlmICghbmV4dE5vZGUpCisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgbm9kZSA9IG5leHROb2RlOworICAgIH0KKyAgICByZXR1cm4gY29uc3Rf
Y2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KG5vZGUpKTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiAjaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5oCShyZXZpc2lvbiAyMDk2NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNjYsNiArMjY2LDggQEAgcHVibGljOgogICAgICAgICBib29sIGNv
bXBvc2VkOwogICAgIH07CiAgICAgTm9kZSYgZ2V0Um9vdE5vZGUoY29uc3QgR2V0Um9vdE5vZGVP
cHRpb25zJikgY29uc3Q7CisgICAgCisgICAgdm9pZCogb3BhcXVlUm9vdCgpIGNvbnN0OwogCiAg
ICAgLy8gVXNlIHdoZW4gaXQncyBndWFyYW50ZWVkIHRvIHRoYXQgc2hhZG93SG9zdCBpcyBudWxs
LgogICAgIENvbnRhaW5lck5vZGUqIHBhcmVudE5vZGVHdWFyYW50ZWVkSG9zdEZyZWUoKSBjb25z
dDsKQEAgLTY3MSw2ICs2NzMsOCBAQCBwcml2YXRlOgogICAgIEhhc2hTZXQ8TXV0YXRpb25PYnNl
cnZlclJlZ2lzdHJhdGlvbio+KiB0cmFuc2llbnRNdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKTsK
IAogICAgIHZvaWQgYWRqdXN0U3R5bGVWYWxpZGl0eShTdHlsZTo6VmFsaWRpdHksIFN0eWxlOjpJ
bnZhbGlkYXRpb25Nb2RlKTsKKyAgICAKKyAgICB2b2lkKiBvcGFxdWVSb290U2xvdygpIGNvbnN0
OwogCiAgICAgaW50IG1fcmVmQ291bnQ7CiAgICAgbXV0YWJsZSB1aW50MzJfdCBtX25vZGVGbGFn
czsKQEAgLTc1Nyw2ICs3NjEsMTUgQEAgaW5saW5lIENvbnRhaW5lck5vZGUqIE5vZGU6OnBhcmVu
dE5vZGUoKQogICAgIHJldHVybiBtX3BhcmVudE5vZGU7CiB9CiAKK2lubGluZSB2b2lkKiBOb2Rl
OjpvcGFxdWVSb290KCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogUG9zc2libGUgcmFjZT8KKyAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NzEzCisgICAg
aWYgKGluRG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuICZkb2N1bWVudCgpOworICAgIHJldHVy
biBvcGFxdWVSb290U2xvdygpOworfQorCiBpbmxpbmUgQ29udGFpbmVyTm9kZSogTm9kZTo6cGFy
ZW50Tm9kZUd1YXJhbnRlZWRIb3N0RnJlZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFpc1NoYWRv
d1Jvb3QoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQuY3BwCShyZXZpc2lvbiAyMDk2NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0
RXhlY3V0aW9uQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNp
bmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAKICNpbmNsdWRlICJDYWNoZWRTY3Jp
cHQuaCIKKyNpbmNsdWRlICJDb21tb25WTS5oIgogI2luY2x1ZGUgIkRPTVRpbWVyLmgiCiAjaW5j
bHVkZSAiRGF0YWJhc2VDb250ZXh0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKQEAgLTQ3Nyw3
ICs0NzgsNyBAQCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIFNjcmlwdEV4ZWN1dGlvCiBKU0M6
OlZNJiBTY3JpcHRFeGVjdXRpb25Db250ZXh0Ojp2bSgpCiB7CiAgICAgaWYgKGlzPERvY3VtZW50
PigqdGhpcykpCi0gICAgICAgIHJldHVybiBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKTsKKyAgICAg
ICAgcmV0dXJuIGNvbW1vblZNKCk7CiAKICAgICByZXR1cm4gZG93bmNhc3Q8V29ya2VyR2xvYmFs
U2NvcGU+KCp0aGlzKS5zY3JpcHQoKS0+dm0oKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEltYWdlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxJbWFnZUxvYWRlci5jcHAJKHJldmlzaW9uIDIwOTY3OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEltYWdlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBA
QAogI2luY2x1ZGUgIkhUTUxJbWFnZUxvYWRlci5oIgogCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2Uu
aCIKKyNpbmNsdWRlICJDb21tb25WTS5oIgogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1
ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJFdmVudC5oIgpAQCAtODQsNyArODUsNyBAQCB2b2lk
IEhUTUxJbWFnZUxvYWRlcjo6bm90aWZ5RmluaXNoZWQoQ2FjCiAgICAgYm9vbCBsb2FkRXJyb3Ig
PSBjYWNoZWRJbWFnZS5lcnJvck9jY3VycmVkKCkgfHwgY2FjaGVkSW1hZ2UucmVzcG9uc2UoKS5o
dHRwU3RhdHVzQ29kZSgpID49IDQwMDsKICAgICBpZiAoIWxvYWRFcnJvcikgewogICAgICAgICBp
ZiAoIWVsZW1lbnQoKS5pbkRvY3VtZW50KCkpIHsKLSAgICAgICAgICAgIEpTQzo6Vk0mIHZtID0g
SlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpOworICAgICAgICAgICAgSlNDOjpWTSYgdm0gPSBj
b21tb25WTSgpOwogICAgICAgICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAgICAg
ICAgICAgICAvLyBGSVhNRTogQWRvcHQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkLCBhbmQgc3dp
dGNoIHRvIHJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkLgogICAgICAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjU5NQpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDk2NzgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Nyw2ICszNyw3IEBACiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAjaW5jbHVkZSAiQ2xpZW50
UmVjdC5oIgogI2luY2x1ZGUgIkNsaWVudFJlY3RMaXN0LmgiCisjaW5jbHVkZSAiQ29tbW9uVk0u
aCIKICNpbmNsdWRlICJDb250ZW50U2VjdXJpdHlQb2xpY3kuaCIKICNpbmNsdWRlICJDb250ZW50
VHlwZS5oIgogI2luY2x1ZGUgIkNvb2tpZUphci5oIgpAQCAtODQ5LDcgKzg1MCw3IEBAIHZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6cGF1c2VBZnRlckRldGFjaGUKIAogICAgIHNpemVfdCBleHRyYU1l
bW9yeUNvc3QgPSBtX3BsYXllci0+ZXh0cmFNZW1vcnlDb3N0KCk7CiAgICAgaWYgKGV4dHJhTWVt
b3J5Q29zdCA+IG1fcmVwb3J0ZWRFeHRyYU1lbW9yeUNvc3QpIHsKLSAgICAgICAgSlNDOjpWTSYg
dm0gPSBKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCk7CisgICAgICAgIEpTQzo6Vk0mIHZtID0g
Y29tbW9uVk0oKTsKICAgICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAKICAgICAg
ICAgc2l6ZV90IGV4dHJhTWVtb3J5Q29zdERlbHRhID0gZXh0cmFNZW1vcnlDb3N0IC0gbV9yZXBv
cnRlZEV4dHJhTWVtb3J5Q29zdDsKQEAgLTY0OTYsNyArNjQ5Nyw3IEBAIFJlZlB0cjxWaWRlb1Bs
YXliYWNrUXVhbGl0eT4gSFRNTE1lZGlhRWwKIERPTVdyYXBwZXJXb3JsZCYgSFRNTE1lZGlhRWxl
bWVudDo6ZW5zdXJlSXNvbGF0ZWRXb3JsZCgpCiB7CiAgICAgaWYgKCFtX2lzb2xhdGVkV29ybGQp
Ci0gICAgICAgIG1faXNvbGF0ZWRXb3JsZCA9IERPTVdyYXBwZXJXb3JsZDo6Y3JlYXRlKEpTRE9N
V2luZG93Ojpjb21tb25WTSgpKTsKKyAgICAgICAgbV9pc29sYXRlZFdvcmxkID0gRE9NV3JhcHBl
cldvcmxkOjpjcmVhdGUoY29tbW9uVk0oKSk7CiAgICAgcmV0dXJuICptX2lzb2xhdGVkV29ybGQ7
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVt
ZW50LmNwcAkocmV2aXNpb24gMjA5Njc4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1
Z0luSW1hZ2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogCiAj
aW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCisjaW5jbHVkZSAi
Q29tbW9uVk0uaCIKICNpbmNsdWRlICJDb250ZW50U2VjdXJpdHlQb2xpY3kuaCIKICNpbmNsdWRl
ICJFdmVudC5oIgogI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgpAQCAtMzY1LDcgKzM2Niw3IEBA
IHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6dXBkYXRlU25hcHMKIAogc3RhdGljIERPTVdy
YXBwZXJXb3JsZCYgcGx1Z0luSW1hZ2VFbGVtZW50SXNvbGF0ZWRXb3JsZCgpCiB7Ci0gICAgc3Rh
dGljIERPTVdyYXBwZXJXb3JsZCYgaXNvbGF0ZWRXb3JsZCA9IERPTVdyYXBwZXJXb3JsZDo6Y3Jl
YXRlKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKS5sZWFrUmVmKCk7CisgICAgc3RhdGljIERPTVdy
YXBwZXJXb3JsZCYgaXNvbGF0ZWRXb3JsZCA9IERPTVdyYXBwZXJXb3JsZDo6Y3JlYXRlKGNvbW1v
blZNKCkpLmxlYWtSZWYoKTsKICAgICByZXR1cm4gaXNvbGF0ZWRXb3JsZDsKIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAko
cmV2aXNpb24gMjA5Njc4KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAi
SW5zcGVjdG9yQ29udHJvbGxlci5oIgogCiAjaW5jbHVkZSAiQ29tbWFuZExpbmVBUElIb3N0Lmgi
CisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJET01XcmFwcGVyV29ybGQuaCIKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JBcHBsaWNhdGlv
bkNhY2hlQWdlbnQuaCIKQEAgLTQ3MCw3ICs0NzEsNyBAQCBQYWdlU2NyaXB0RGVidWdTZXJ2ZXIm
IEluc3BlY3RvckNvbnRyb2xsCiAKIEpTQzo6Vk0mIEluc3BlY3RvckNvbnRyb2xsZXI6OnZtKCkK
IHsKLSAgICByZXR1cm4gSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpOworICAgIHJldHVybiBj
b21tb25WTSgpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENvbXBvc2l0ZShG
cmFtZSYgZnJhbWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZVNjcmlwdERl
YnVnU2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFn
ZVNjcmlwdERlYnVnU2VydmVyLmNwcAkocmV2aXNpb24gMjA5Njc4KQorKysgU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQYWdlU2NyaXB0
RGVidWdTZXJ2ZXIuaCIKIAorI2luY2x1ZGUgIkNvbW1vblZNLmgiCiAjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKICNpbmNsdWRlICJFdmVudExvb3AuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKQEAg
LTU0LDcgKzU1LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogUGFnZVNjcmlwdERlYnVnU2VydmVyOjpQYWdlU2NyaXB0RGVidWdTZXJ2ZXIoUGFn
ZSYgcGFnZSkKLSAgICA6IFNjcmlwdERlYnVnU2VydmVyKFdlYkNvcmU6OkpTRE9NV2luZG93QmFz
ZTo6Y29tbW9uVk0oKSkKKyAgICA6IFNjcmlwdERlYnVnU2VydmVyKFdlYkNvcmU6OmNvbW1vblZN
KCkpCiAgICAgLCBtX3BhZ2UocGFnZSkKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGVyZm9ybWFuY2VMb2dnaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L1BlcmZvcm1hbmNlTG9nZ2luZy5jcHAJKHJldmlzaW9uIDIwOTY3OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvUGVyZm9ybWFuY2VMb2dnaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiAr
MjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBlcmZvcm1hbmNlTG9nZ2lu
Zy5oIgogCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNp
bmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCkBAIC01
Miw3ICs1Myw3IEBAIEhhc2hNYXA8Y29uc3QgY2hhciosIHNpemVfdD4gUGVyZm9ybWFuY2UKIHsK
ICAgICBIYXNoTWFwPGNvbnN0IGNoYXIqLCBzaXplX3Q+IHN0YXRzOwogCi0gICAgYXV0byYgdm0g
PSBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKTsKKyAgICBhdXRvJiB2bSA9IGNvbW1vblZNKCk7CiAg
ICAgc3RhdHMuYWRkKCJqYXZhc2NyaXB0X2djX2hlYXBfY2FwYWNpdHkiLCB2bS5oZWFwLmNhcGFj
aXR5KCkpOwogICAgIHN0YXRzLmFkZCgiamF2YXNjcmlwdF9nY19oZWFwX2V4dHJhX21lbW9yeV9z
aXplIiwgdm0uaGVhcC5leHRyYU1lbW9yeVNpemUoKSk7CiAKQEAgLTc0LDcgKzc1LDcgQEAgSGFz
aE1hcDxjb25zdCBjaGFyKiwgc2l6ZV90PiBQZXJmb3JtYW5jZQogCiBIYXNoQ291bnRlZFNldDxj
b25zdCBjaGFyKj4gUGVyZm9ybWFuY2VMb2dnaW5nOjpqYXZhU2NyaXB0T2JqZWN0Q291bnRzKCkK
IHsKLSAgICByZXR1cm4gV1RGTW92ZSgqSlNET01XaW5kb3c6OmNvbW1vblZNKCkuaGVhcC5vYmpl
Y3RUeXBlQ291bnRzKCkpOworICAgIHJldHVybiBXVEZNb3ZlKCpjb21tb25WTSgpLmhlYXAub2Jq
ZWN0VHlwZUNvdW50cygpKTsKIH0KIAogUGVyZm9ybWFuY2VMb2dnaW5nOjpQZXJmb3JtYW5jZUxv
Z2dpbmcoTWFpbkZyYW1lJiBtYWluRnJhbWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1Jl
c291cmNlVXNhZ2VUaHJlYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
UmVzb3VyY2VVc2FnZVRocmVhZC5jcHAJKHJldmlzaW9uIDIwOTY3OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvUmVzb3VyY2VVc2FnZVRocmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYg
KzI4LDcgQEAKIAogI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKIAorI2luY2x1ZGUgIkNvbW1v
blZNLmgiCiAjaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKICNpbmNsdWRlIDx0aHJlYWQ+CiAjaW5j
bHVkZSA8d3RmL01haW5UaHJlYWQuaD4KQEAgLTk4LDcgKzk5LDcgQEAgdm9pZCBSZXNvdXJjZVVz
YWdlVGhyZWFkOjpjcmVhdGVUaHJlYWRJZgogICAgIGlmIChtX3RocmVhZElkZW50aWZpZXIpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIG1fdm0gPSAmSlNET01XaW5kb3c6OmNvbW1vblZNKCk7Cisg
ICAgbV92bSA9ICZjb21tb25WTSgpOwogICAgIG1fdGhyZWFkSWRlbnRpZmllciA9IGNyZWF0ZVRo
cmVhZCh0aHJlYWRDYWxsYmFjaywgdGhpcywgIldlYkNvcmU6IFJlc291cmNlVXNhZ2UiKTsKIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlT3ZlcmxheUNv
Y29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvUmVzb3VyY2VV
c2FnZU92ZXJsYXlDb2NvYS5tbQkocmV2aXNpb24gMjA5Njc4KQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlT3ZlcmxheUNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlIDxDb3JlVGV4dC9Db3JlVGV4dC5oPgogCisjaW5j
bHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgogI2luY2x1ZGUgIlBs
YXRmb3JtQ0FMYXllci5oIgogI2luY2x1ZGUgIlJlc291cmNlVXNhZ2VUaHJlYWQuaCIKQEAgLTIw
NCw3ICsyMDUsNyBAQCBzdGF0aWMgdm9pZCBhcHBlbmREYXRhVG9IaXN0b3J5KGNvbnN0IFJlCiAK
ICAgICAvLyBGSVhNRTogRmluZCBhIHdheSB0byBhZGQgdGhpcyB0byBSZXNvdXJjZVVzYWdlRGF0
YSBhbmQgY2FsY3VsYXRlIGl0IG9uIHRoZSByZXNvdXJjZSB1c2FnZSBzYW1wbGVyIHRocmVhZC4K
ICAgICB7Ci0gICAgICAgIEpTQzo6Vk0qIHZtID0gJkpTRE9NV2luZG93Ojpjb21tb25WTSgpOwor
ICAgICAgICBKU0M6OlZNKiB2bSA9ICZjb21tb25WTSgpOwogICAgICAgICBKU0M6OkpTTG9ja0hv
bGRlciBsb2NrKHZtKTsKICAgICAgICAgaGlzdG9yaWNEYXRhLmdjSGVhcFNpemUuYXBwZW5kKHZt
LT5oZWFwLnNpemUoKSAtIHZtLT5oZWFwLmV4dHJhTWVtb3J5U2l6ZSgpKTsKICAgICB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQkocmV2aXNpb24gMjA5Njc4KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4LDYg
KzI4LDcgQEAKICNpZiBQTEFURk9STShJT1MpCiAKICNpbXBvcnQgIkFuaW1hdGlvbkNvbnRyb2xs
ZXIuaCIKKyNpbXBvcnQgIkNvbW1vblZNLmgiCiAjaW1wb3J0ICJET01XaW5kb3cuaCIKICNpbXBv
cnQgIkRvY3VtZW50LmgiCiAjaW1wb3J0ICJEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaCIKQEAg
LTQ2LDcgKzQ3LDYgQEAKICNpbXBvcnQgIkhUTUxPYmplY3RFbGVtZW50LmgiCiAjaW1wb3J0ICJI
aXRUZXN0UmVxdWVzdC5oIgogI2ltcG9ydCAiSGl0VGVzdFJlc3VsdC5oIgotI2ltcG9ydCAiSlNE
T01XaW5kb3dCYXNlLmgiCiAjaW1wb3J0ICJNYWluRnJhbWUuaCIKICNpbXBvcnQgIk5vZGVSZW5k
ZXJTdHlsZS5oIgogI2ltcG9ydCAiTm9kZVRyYXZlcnNhbC5oIgpAQCAtNTQ0LDcgKzU0NCw3IEBA
IHZvaWQgRnJhbWU6OnNldFRpbWVyc1BhdXNlZChib29sIHBhdXNlZCkKIHsKICAgICBpZiAoIW1f
cGFnZSkKICAgICAgICAgcmV0dXJuOwotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93
QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7CiAg
ICAgaWYgKHBhdXNlZCkKICAgICAgICAgbV9wYWdlLT5zdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0Fu
ZEFuaW1hdGlvbnMoKTsKICAgICBlbHNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3Mvd2FrL1dlYkNvcmVUaHJlYWQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW9zL3dhay9XZWJDb3JlVGhyZWFkLm1tCShyZXZpc2lvbiAyMDk2NzgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mvd2FrL1dlYkNvcmVUaHJlYWQubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDggKzI4LDggQEAKIAogI2lmIFBMQVRGT1JNKElPUykKIAorI2ltcG9ydCAiQ29t
bW9uVk0uaCIKICNpbXBvcnQgIkZsb2F0aW5nUG9pbnRFbnZpcm9ubWVudC5oIgotI2ltcG9ydCAi
SlNET01XaW5kb3dCYXNlLmgiCiAjaW1wb3J0ICJSdW50aW1lQXBwbGljYXRpb25DaGVja3MuaCIK
ICNpbXBvcnQgIlRocmVhZEdsb2JhbERhdGEuaCIKICNpbXBvcnQgIldlYkNvcmVUaHJlYWRJbnRl
cm5hbC5oIgpAQCAtMjEwLDcgKzIxMCw3IEBAIHN0YXRpYyB2b2lkIFNlbmREZWxlZ2F0ZU1lc3Nh
Z2UoTlNJbnZvY2EKIAogICAgICAgICB7CiAgICAgICAgICAgICAvLyBDb2RlIGJsb2NrIGNyZWF0
ZWQgdG8gc2NvcGUgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBvdXRzaWRlIG9mIFdlYlRocmVh
ZExvY2soKQotICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3MoV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICAgICAgICAgIEpT
Qzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFdlYkNvcmU6OmNvbW1vblZNKCkp
OwogICAgICAgICAgICAgX1dlYlRocmVhZFVubG9jaygpOwogCiAgICAgICAgICAgICBDRlJ1bkxv
b3BTb3VyY2VTaWduYWwoZGVsZWdhdGVTb3VyY2UpOwpAQCAtMjQ4LDcgKzI0OCw3IEBAIHZvaWQg
V2ViVGhyZWFkUnVuT25NYWluVGhyZWFkKHZvaWQoXmRlbGUKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFdlYkNvcmU6
OkpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoV2ViQ29yZTo6Y29tbW9uVk0oKSk7CiAgICAgX1dlYlRocmVhZFVu
bG9jaygpOwogCiAgICAgdm9pZCAoXmRlbGVnYXRlQmxvY2tDb3B5KSgpID0gQmxvY2tfY29weShk
ZWxlZ2F0ZUJsb2NrKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFn
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdl
LmNwcAkocmV2aXNpb24gMjA5Njc4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NW
R0ltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIlNW
R0ltYWdlLmgiCiAKICNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRlICJDb21tb25WTS5oIgog
I2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5j
bHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgiCkBAIC0zOTcsNyArMzk4LDcgQEAgdm9pZCBTVkdJbWFn
ZTo6cmVwb3J0QXBwcm94aW1hdGVNZW1vcnlDbwogICAgIGZvciAoTm9kZSogbm9kZSA9IGRvY3Vt
ZW50OyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSkpCiAgICAgICAgIGRl
Y29kZWRJbWFnZU1lbW9yeUNvc3QgKz0gbm9kZS0+YXBwcm94aW1hdGVNZW1vcnlDb3N0KCk7CiAK
LSAgICBKU0M6OlZNJiB2bSA9IEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKTsKKyAgICBKU0M6
OlZNJiB2bSA9IGNvbW1vblZNKCk7CiAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAg
ICAgLy8gRklYTUU6IEFkb3B0IHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCwgYW5kIHN3aXRjaCB0
byByZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZC4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyNTk1CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L01lbW9yeUluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01lbW9y
eUluZm8uaAkocmV2aXNpb24gMjA5Njc4KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9NZW1v
cnlJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI3ByYWdtYSBvbmNl
CiAKKyNpbmNsdWRlICJDb21tb25WTS5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCiAjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIApAQCAtNDQsOCArNDUsOCBAQCBwdWJsaWM6CiAKIHBy
aXZhdGU6CiAgICAgTWVtb3J5SW5mbygpCi0gICAgICAgIDogbV91c2VkSlNIZWFwU2l6ZShKU0RP
TVdpbmRvdzo6Y29tbW9uVk0oKS5oZWFwLnNpemUoKSkKLSAgICAgICAgLCBtX3RvdGFsSlNIZWFw
U2l6ZShKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS5oZWFwLmNhcGFjaXR5KCkpCisgICAgICAgIDog
bV91c2VkSlNIZWFwU2l6ZShjb21tb25WTSgpLmhlYXAuc2l6ZSgpKQorICAgICAgICAsIG1fdG90
YWxKU0hlYXBTaXplKGNvbW1vblZNKCkuaGVhcC5jYXBhY2l0eSgpKQogICAgIHsKICAgICB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwOTY3OCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBACisyMDE2LTEyLTEwICBGaWxpcCBQ
aXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgVGhlIERPTSBzaG91bGQgaGF2ZSBh
biBhZHZhbmNpbmcgd2F2ZWZyb250IG9wYXF1ZSByb290IGJhcnJpZXIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTcxMgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgUHJvcGFnYXRlIHRoZSBK
U0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkgLT4gY29tbW9uVk0oKSBjaGFuZ2UuCisKKyAgICAg
ICAgKiBTaGFyZWQvbGludXgvV2ViTWVtb3J5U2FtcGxlckxpbnV4LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViTWVtb3J5U2FtcGxlcjo6c2FtcGxlV2ViS2l0KToKKyAgICAgICAgKiBTaGFyZWQv
bWFjL1dlYk1lbW9yeVNhbXBsZXIubWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJNZW1vcnlT
YW1wbGVyOjpzYW1wbGVXZWJLaXQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvSW5qZWN0ZWRCdW5kbGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZTo6
amF2YVNjcmlwdE9iamVjdHNDb3VudCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05l
dHNjYXBlL0pTTlBPYmplY3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpKU05QT2JqZWN0OjpjYWxs
TWV0aG9kKToKKyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6Y2FsbE9iamVjdCk6CisgICAg
ICAgIChXZWJLaXQ6OkpTTlBPYmplY3Q6OmNhbGxDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJL
aXQ6OkpTTlBPYmplY3Q6OnB1dCk6CisgICAgICAgIChXZWJLaXQ6OkpTTlBPYmplY3Q6OmRlbGV0
ZVByb3BlcnR5KToKKyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6Z2V0T3duUHJvcGVydHlO
YW1lcyk6CisgICAgICAgIChXZWJLaXQ6OkpTTlBPYmplY3Q6OnByb3BlcnR5R2V0dGVyKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2U6OnJ1bkphdmFTY3JpcHRJbk1haW5GcmFtZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2U6OmdldEJ5dGVjb2RlUHJvZmlsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6Omdl
dFNhbXBsaW5nUHJvZmlsZXJPdXRwdXQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vz
cy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OmdldFdlYkNvcmVTdGF0aXN0aWNz
KToKKwogMjAxNi0xMi0xMCAgS29uc3RhbnRpbiBUb2thcmV2ICA8YW5udWxlbkB5YW5kZXgucnU+
CiAKICAgICAgICAgW2NtYWtlXSBJbmNsdWRlIFdURiwgSlNDLCBhbmQgV2ViQ29yZSBoZWFkZXJz
IGF1dG9tYXRpY2FsbHkgdG8gdGFyZ2VycyB1c2luZyB0aGVtCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvbGludXgvV2ViTWVtb3J5U2FtcGxlckxpbnV4LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvV2ViTWVtb3J5U2FtcGxlckxpbnV4LmNwcAkocmV2
aXNpb24gMjA5Njc4KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1dlYk1lbW9yeVNh
bXBsZXJMaW51eC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFC
TEUoTUVNT1JZX1NBTVBMRVIpCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9NZW1vcnlTdGF0
aXN0aWNzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Db21tb25WTS5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvQ3VycmVudFByb2Nlc3NNZW1vcnlTdGF0dXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0pTRE9N
V2luZG93Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgpAQCAtMTIyLDgg
KzEyMyw4IEBAIFdlYk1lbW9yeVN0YXRpc3RpY3MgV2ViTWVtb3J5U2FtcGxlcjo6c2EKICAgICBh
cHBlbmRLZXlWYWx1ZVBhaXIod2ViS2l0TWVtb3J5U3RhdHMsIEFTQ0lJTGl0ZXJhbCgiRmFzdCBN
YWxsb2MgSW4gVXNlIiksIGZhc3RNYWxsb2NCeXRlc0luVXNlKTsKICAgICBhcHBlbmRLZXlWYWx1
ZVBhaXIod2ViS2l0TWVtb3J5U3RhdHMsIEFTQ0lJTGl0ZXJhbCgiRmFzdCBNYWxsb2MgQ29tbWl0
dGVkIE1lbW9yeSIpLCBmYXN0TWFsbG9jQnl0ZXNDb21taXR0ZWQpOwogCi0gICAgc2l6ZV90IGpz
Y0hlYXBCeXRlc0luVXNlID0gSlNET01XaW5kb3c6OmNvbW1vblZNKCkuaGVhcC5zaXplKCk7Ci0g
ICAgc2l6ZV90IGpzY0hlYXBCeXRlc0NvbW1pdHRlZCA9IEpTRE9NV2luZG93Ojpjb21tb25WTSgp
LmhlYXAuY2FwYWNpdHkoKTsKKyAgICBzaXplX3QganNjSGVhcEJ5dGVzSW5Vc2UgPSBjb21tb25W
TSgpLmhlYXAuc2l6ZSgpOworICAgIHNpemVfdCBqc2NIZWFwQnl0ZXNDb21taXR0ZWQgPSBjb21t
b25WTSgpLmhlYXAuY2FwYWNpdHkoKTsKICAgICB0b3RhbEJ5dGVzSW5Vc2UgKz0ganNjSGVhcEJ5
dGVzSW5Vc2U7CiAgICAgdG90YWxCeXRlc0NvbW1pdHRlZCArPSBqc2NIZWFwQnl0ZXNDb21taXR0
ZWQ7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViTWVtb3J5U2FtcGxlci5t
YWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJNZW1vcnlT
YW1wbGVyLm1hYy5tbQkocmV2aXNpb24gMjA5Njc4KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVk
L21hYy9XZWJNZW1vcnlTYW1wbGVyLm1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjksMTMgKzI5
LDE0IEBACiAjaWYgRU5BQkxFKE1FTU9SWV9TQU1QTEVSKSAgCiAKICNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL01lbW9yeVN0YXRpc3RpY3MuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL1ZNLmg+
CiAjaW1wb3J0IDxtYWNoL21hY2guaD4KICNpbXBvcnQgPG1hY2gvdGFzay5oPgogI2ltcG9ydCA8
bWFjaC9tYWNoX3R5cGVzLmg+CiAjaW1wb3J0IDxtYWxsb2MvbWFsbG9jLmg+CiAjaW1wb3J0IDxu
b3RpZnkuaD4KICNpbXBvcnQgPHJ1bnRpbWUvSlNMb2NrLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0pT
RE9NV2luZG93Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0NvbW1vblZNLmg+CiAjaW1wb3J0IDx3dGYv
Q3VycmVudFRpbWUuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC0xMTYsOSArMTE3
LDkgQEAgV2ViTWVtb3J5U3RhdGlzdGljcyBXZWJNZW1vcnlTYW1wbGVyOjpzYQogICAgIHRvdGFs
Qnl0ZXNJblVzZSArPSBmYXN0TWFsbG9jQnl0ZXNJblVzZTsKICAgICB0b3RhbEJ5dGVzQ29tbWl0
dGVkICs9IGZhc3RNYWxsb2NCeXRlc0NvbW1pdHRlZDsKICAgICAKLSAgICBKU0xvY2tIb2xkZXIg
bG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7Ci0gICAgc2l6ZV90IGpzY0hlYXBCeXRlc0lu
VXNlID0gSlNET01XaW5kb3c6OmNvbW1vblZNKCkuaGVhcC5zaXplKCk7Ci0gICAgc2l6ZV90IGpz
Y0hlYXBCeXRlc0NvbW1pdHRlZCA9IEpTRE9NV2luZG93Ojpjb21tb25WTSgpLmhlYXAuY2FwYWNp
dHkoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhjb21tb25WTSgpKTsKKyAgICBzaXplX3QganNj
SGVhcEJ5dGVzSW5Vc2UgPSBjb21tb25WTSgpLmhlYXAuc2l6ZSgpOworICAgIHNpemVfdCBqc2NI
ZWFwQnl0ZXNDb21taXR0ZWQgPSBjb21tb25WTSgpLmhlYXAuY2FwYWNpdHkoKTsKICAgICB0b3Rh
bEJ5dGVzSW5Vc2UgKz0ganNjSGVhcEJ5dGVzSW5Vc2U7CiAgICAgdG90YWxCeXRlc0NvbW1pdHRl
ZCArPSBqc2NIZWFwQnl0ZXNDb21taXR0ZWQ7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAJKHJldmlzaW9uIDIwOTY3OCkKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDYgKzcw
LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0FYT2JqZWN0Q2FjaGUuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9BdXRoZW50
aWNhdGlvbkNoYWxsZW5nZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQ29tbW9uVk0uaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0ROUy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGF0YWJhc2VNYW5hZ2VyLmg+CkBA
IC05NzIsMjEgKzk3MywyMSBAQCB2b2lkIFdlYlByb2Nlc3M6OmdldFdlYkNvcmVTdGF0aXN0aWNz
KHVpCiAgICAgCiAgICAgLy8gR2F0aGVyIEphdmFTY3JpcHQgc3RhdGlzdGljcy4KICAgICB7Ci0g
ICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsKLSAgICAg
ICAgZGF0YS5zdGF0aXN0aWNzTnVtYmVycy5zZXQoQVNDSUlMaXRlcmFsKCJKYXZhU2NyaXB0T2Jq
ZWN0c0NvdW50IiksIEpTRE9NV2luZG93Ojpjb21tb25WTSgpLmhlYXAub2JqZWN0Q291bnQoKSk7
Ci0gICAgICAgIGRhdGEuc3RhdGlzdGljc051bWJlcnMuc2V0KEFTQ0lJTGl0ZXJhbCgiSmF2YVNj
cmlwdEdsb2JhbE9iamVjdHNDb3VudCIpLCBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS5oZWFwLmds
b2JhbE9iamVjdENvdW50KCkpOwotICAgICAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJzLnNldChB
U0NJSUxpdGVyYWwoIkphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RzQ291bnQiKSwgSlNET01XaW5k
b3c6OmNvbW1vblZNKCkuaGVhcC5wcm90ZWN0ZWRPYmplY3RDb3VudCgpKTsKLSAgICAgICAgZGF0
YS5zdGF0aXN0aWNzTnVtYmVycy5zZXQoQVNDSUlMaXRlcmFsKCJKYXZhU2NyaXB0UHJvdGVjdGVk
R2xvYmFsT2JqZWN0c0NvdW50IiksIEpTRE9NV2luZG93Ojpjb21tb25WTSgpLmhlYXAucHJvdGVj
dGVkR2xvYmFsT2JqZWN0Q291bnQoKSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGNvbW1v
blZNKCkpOworICAgICAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJzLnNldChBU0NJSUxpdGVyYWwo
IkphdmFTY3JpcHRPYmplY3RzQ291bnQiKSwgY29tbW9uVk0oKS5oZWFwLm9iamVjdENvdW50KCkp
OworICAgICAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJzLnNldChBU0NJSUxpdGVyYWwoIkphdmFT
Y3JpcHRHbG9iYWxPYmplY3RzQ291bnQiKSwgY29tbW9uVk0oKS5oZWFwLmdsb2JhbE9iamVjdENv
dW50KCkpOworICAgICAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJzLnNldChBU0NJSUxpdGVyYWwo
IkphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RzQ291bnQiKSwgY29tbW9uVk0oKS5oZWFwLnByb3Rl
Y3RlZE9iamVjdENvdW50KCkpOworICAgICAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJzLnNldChB
U0NJSUxpdGVyYWwoIkphdmFTY3JpcHRQcm90ZWN0ZWRHbG9iYWxPYmplY3RzQ291bnQiKSwgY29t
bW9uVk0oKS5oZWFwLnByb3RlY3RlZEdsb2JhbE9iamVjdENvdW50KCkpOwogICAgICAgICAKLSAg
ICAgICAgc3RkOjp1bmlxdWVfcHRyPFR5cGVDb3VudFNldD4gcHJvdGVjdGVkT2JqZWN0VHlwZUNv
dW50cyhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS5oZWFwLnByb3RlY3RlZE9iamVjdFR5cGVDb3Vu
dHMoKSk7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlQ291bnRTZXQ+IHByb3RlY3RlZE9i
amVjdFR5cGVDb3VudHMoY29tbW9uVk0oKS5oZWFwLnByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMo
KSk7CiAgICAgICAgIGZyb21Db3VudGVkU2V0VG9IYXNoTWFwKHByb3RlY3RlZE9iamVjdFR5cGVD
b3VudHMuZ2V0KCksIGRhdGEuamF2YVNjcmlwdFByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMpOwog
ICAgICAgICAKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFR5cGVDb3VudFNldD4gb2JqZWN0VHlw
ZUNvdW50cyhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS5oZWFwLm9iamVjdFR5cGVDb3VudHMoKSk7
CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlQ291bnRTZXQ+IG9iamVjdFR5cGVDb3VudHMo
Y29tbW9uVk0oKS5oZWFwLm9iamVjdFR5cGVDb3VudHMoKSk7CiAgICAgICAgIGZyb21Db3VudGVk
U2V0VG9IYXNoTWFwKG9iamVjdFR5cGVDb3VudHMuZ2V0KCksIGRhdGEuamF2YVNjcmlwdE9iamVj
dFR5cGVDb3VudHMpOwogICAgICAgICAKLSAgICAgICAgdWludDY0X3QgamF2YVNjcmlwdEhlYXBT
aXplID0gSlNET01XaW5kb3c6OmNvbW1vblZNKCkuaGVhcC5zaXplKCk7CisgICAgICAgIHVpbnQ2
NF90IGphdmFTY3JpcHRIZWFwU2l6ZSA9IGNvbW1vblZNKCkuaGVhcC5zaXplKCk7CiAgICAgICAg
IGRhdGEuc3RhdGlzdGljc051bWJlcnMuc2V0KEFTQ0lJTGl0ZXJhbCgiSmF2YVNjcmlwdEhlYXBT
aXplIiksIGphdmFTY3JpcHRIZWFwU2l6ZSk7Ci0gICAgICAgIGRhdGEuc3RhdGlzdGljc051bWJl
cnMuc2V0KEFTQ0lJTGl0ZXJhbCgiSmF2YVNjcmlwdEZyZWVTaXplIiksIEpTRE9NV2luZG93Ojpj
b21tb25WTSgpLmhlYXAuY2FwYWNpdHkoKSAtIGphdmFTY3JpcHRIZWFwU2l6ZSk7CisgICAgICAg
IGRhdGEuc3RhdGlzdGljc051bWJlcnMuc2V0KEFTQ0lJTGl0ZXJhbCgiSmF2YVNjcmlwdEZyZWVT
aXplIiksIGNvbW1vblZNKCkuaGVhcC5jYXBhY2l0eSgpIC0gamF2YVNjcmlwdEhlYXBTaXplKTsK
ICAgICB9CiAKICAgICBXVEY6OkZhc3RNYWxsb2NTdGF0aXN0aWNzIGZhc3RNYWxsb2NTdGF0aXN0
aWNzID0gV1RGOjpmYXN0TWFsbG9jU3RhdGlzdGljcygpOwpJbmRleDogU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRs
ZS5jcHAJKHJldmlzaW9uIDIwOTY3OCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1
Myw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNMb2NrLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9BcHBsaWNhdGlvbkNhY2hlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9BcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQ29tbW9uVk0uaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0ZyYW1lTG9hZGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0dDQ29udHJvbGxlci5oPgpAQCAtNDkzLDggKzQ5NCw4IEBAIHZvaWQg
SW5qZWN0ZWRCdW5kbGU6OmdhcmJhZ2VDb2xsZWN0SmF2YVMKIAogc2l6ZV90IEluamVjdGVkQnVu
ZGxlOjpqYXZhU2NyaXB0T2JqZWN0c0NvdW50KCkKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhK
U0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7Ci0gICAgcmV0dXJuIEpTRE9NV2luZG93Ojpjb21tb25W
TSgpLmhlYXAub2JqZWN0Q291bnQoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhjb21tb25WTSgp
KTsKKyAgICByZXR1cm4gY29tbW9uVk0oKS5oZWFwLm9iamVjdENvdW50KCk7CiB9CiAKIHZvaWQg
SW5qZWN0ZWRCdW5kbGU6OnJlcG9ydEV4Y2VwdGlvbihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNW
YWx1ZVJlZiBleGNlcHRpb24pCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdp
bnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuY3BwCShyZXZpc2lvbiAyMDk2
NzgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9KU0dsb2JhbE9iamVjdC5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
TG9jay5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL09iamVjdFByb3RvdHlwZS5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvQ29tbW9uVk0uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0lkZW50aWZpZXJS
ZXAuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0pTRE9NV2luZG93QmFzZS5oPgogI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+CkBAIC0xMzYsNyArMTM3LDcgQEAgSlNWYWx1ZSBKU05QT2JqZWN0Ojpj
YWxsTWV0aG9kKEV4ZWNTdGF0ZQogICAgIFZPSURfVE9fTlBWQVJJQU5UKHJlc3VsdCk7CiAgICAg
CiAgICAgewotICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01X
aW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKGNvbW1vblZNKCkpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fbnBPYmplY3Qt
Pl9jbGFzcy0+aW52b2tlKG1fbnBPYmplY3QsIG1ldGhvZE5hbWUsIGFyZ3VtZW50cy5kYXRhKCks
IGFyZ3VtZW50Q291bnQsICZyZXN1bHQpOwogICAgICAgICBOUFJ1bnRpbWVPYmplY3RNYXA6Om1v
dmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShleGVjKTsKICAgICB9CkBAIC0xNzksNyArMTgw
LDcgQEAgSlNDOjpKU1ZhbHVlIEpTTlBPYmplY3Q6OmNhbGxPYmplY3QoSlNDOgogICAgIFZPSURf
VE9fTlBWQVJJQU5UKHJlc3VsdCk7CiAKICAgICB7Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgICAgICBK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoY29tbW9uVk0oKSk7CiAgICAgICAgIHJl
dHVyblZhbHVlID0gbV9ucE9iamVjdC0+X2NsYXNzLT5pbnZva2VEZWZhdWx0KG1fbnBPYmplY3Qs
IGFyZ3VtZW50cy5kYXRhKCksIGFyZ3VtZW50Q291bnQsICZyZXN1bHQpOwogICAgICAgICBOUFJ1
bnRpbWVPYmplY3RNYXA6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShleGVjKTsKICAg
ICB9CkBAIC0yMjIsNyArMjIzLDcgQEAgSlNWYWx1ZSBKU05QT2JqZWN0OjpjYWxsQ29uc3RydWN0
b3IoRXhlYwogICAgIFZPSURfVE9fTlBWQVJJQU5UKHJlc3VsdCk7CiAgICAgCiAgICAgewotICAg
ICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpj
b21tb25WTSgpKTsKKyAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGNv
bW1vblZNKCkpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fbnBPYmplY3QtPl9jbGFzcy0+Y29u
c3RydWN0KG1fbnBPYmplY3QsIGFyZ3VtZW50cy5kYXRhKCksIGFyZ3VtZW50Q291bnQsICZyZXN1
bHQpOwogICAgICAgICBOUFJ1bnRpbWVPYmplY3RNYXA6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4
ZWNTdGF0ZShleGVjKTsKICAgICB9CkBAIC0zNDUsNyArMzQ2LDcgQEAgYm9vbCBKU05QT2JqZWN0
OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjUwogCiAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKICAg
ICB7Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRv
d0Jhc2U6OmNvbW1vblZNKCkpOworICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoY29tbW9uVk0oKSk7CiAgICAgICAgIHJlc3VsdCA9IHRoaXNPYmplY3QtPm1fbnBPYmpl
Y3QtPl9jbGFzcy0+c2V0UHJvcGVydHkodGhpc09iamVjdC0+bV9ucE9iamVjdCwgbnBJZGVudGlm
aWVyLCAmdmFyaWFudCk7CiAKICAgICAgICAgTlBSdW50aW1lT2JqZWN0TWFwOjptb3ZlR2xvYmFs
RXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7CkBAIC0zOTQsNyArMzk1LDcgQEAgYm9vbCBKU05Q
T2JqZWN0OjpkZWxldGVQcm9wZXJ0eShFeGVjU3RhdAogICAgIE5QUnVudGltZU9iamVjdE1hcDo6
UGx1Z2luUHJvdGVjdG9yIHByb3RlY3RvcihtX29iamVjdE1hcCk7CiAKICAgICB7Ci0gICAgICAg
IEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1v
blZNKCkpOworICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoY29tbW9u
Vk0oKSk7CiAKICAgICAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSB0aHJvdyBhbiBleGNlcHRpb24g
aWYgcmVtb3ZlUHJvcGVydHkgcmV0dXJucyBmYWxzZT8KICAgICAgICAgaWYgKCFtX25wT2JqZWN0
LT5fY2xhc3MtPnJlbW92ZVByb3BlcnR5KG1fbnBPYmplY3QsIHByb3BlcnR5TmFtZSkpCkBAIC00
MzAsNyArNDMxLDcgQEAgdm9pZCBKU05QT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTTwog
ICAgIE5QUnVudGltZU9iamVjdE1hcDo6UGx1Z2luUHJvdGVjdG9yIHByb3RlY3Rvcih0aGlzT2Jq
ZWN0LT5tX29iamVjdE1hcCk7CiAgICAgCiAgICAgewotICAgICAgICBKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICAgICAg
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwogCiAgICAgICAg
IC8vIEZJWE1FOiBTaG91bGQgd2UgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGVudW1lcmF0ZSByZXR1
cm5zIGZhbHNlPwogICAgICAgICBpZiAoIXRoaXNPYmplY3QtPm1fbnBPYmplY3QtPl9jbGFzcy0+
ZW51bWVyYXRlKHRoaXNPYmplY3QtPm1fbnBPYmplY3QsICZpZGVudGlmaWVycywgJmlkZW50aWZp
ZXJDb3VudCkpCkBAIC00ODEsNyArNDgyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNOUE9iamVjdDo6
cHJvcGVydHlHZXR0ZQogICAgIAogICAgIGJvb2wgcmV0dXJuVmFsdWU7CiAgICAgewotICAgICAg
ICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21t
b25WTSgpKTsKKyAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGNvbW1v
blZNKCkpOwogICAgICAgICBOUElkZW50aWZpZXIgbnBJZGVudGlmaWVyID0gbnBJZGVudGlmaWVy
RnJvbUlkZW50aWZpZXIocHJvcGVydHlOYW1lKTsKICAgICAgICAgLy8gSWYgdGhlIHByb3BlcnR5
TmFtZSBpcyBzeW1ib2wuCiAgICAgICAgIGlmICghbnBJZGVudGlmaWVyKQpJbmRleDogU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMjA5
Njc4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTYsNiArMTE2LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0FwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9BcmNoaXZlUmVzb3VyY2Uu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0Nocm9tZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQ29tbW9u
Vk0uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NvbnRleHRNZW51Q29udHJvbGxlci5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvRGF0YVRyYW5zZmVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EYXRhYmFzZU1h
bmFnZXIuaD4KQEAgLTI3MTEsNyArMjcxMiw3IEBAIHZvaWQgV2ViUGFnZTo6cnVuSmF2YVNjcmlw
dEluTWFpbkZyYW1lKGMKICAgICAvLyBkaXNhcHBlYXIgZHVyaW5nIHNjcmlwdCBleGVjdXRpb24u
CiAKICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkUmVzdWx0VmFs
dWU7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOworICAg
IEpTTG9ja0hvbGRlciBsb2NrKGNvbW1vblZNKCkpOwogICAgIGJvb2wgaGFkRXhjZXB0aW9uID0g
dHJ1ZTsKICAgICBFeGNlcHRpb25EZXRhaWxzIGRldGFpbHM7CiAgICAgaWYgKEpTVmFsdWUgcmVz
dWx0VmFsdWUgPSBtX21haW5GcmFtZS0+Y29yZUZyYW1lKCktPnNjcmlwdCgpLmV4ZWN1dGVTY3Jp
cHQoc2NyaXB0LCB0cnVlLCAmZGV0YWlscykpIHsKQEAgLTU0NjIsMTIgKzU0NjMsMTIgQEAgdm9p
ZCBXZWJQYWdlOjp1cGRhdGVDYWNoZWREb2N1bWVudExvYWRlcgogCiB2b2lkIFdlYlBhZ2U6Omdl
dEJ5dGVjb2RlUHJvZmlsZSh1aW50NjRfdCBjYWxsYmFja0lEKQogewotICAgIGlmICghSlNET01X
aW5kb3c6OmNvbW1vblZNKCkubV9wZXJCeXRlY29kZVByb2ZpbGVyKSB7CisgICAgaWYgKCFjb21t
b25WTSgpLm1fcGVyQnl0ZWNvZGVQcm9maWxlcikgewogICAgICAgICBzZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OlN0cmluZ0NhbGxiYWNrKFN0cmluZygpLCBjYWxsYmFja0lEKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBTdHJpbmcgcmVzdWx0ID0gSlNET01XaW5kb3c6OmNv
bW1vblZNKCkubV9wZXJCeXRlY29kZVByb2ZpbGVyLT50b0pTT04oKTsKKyAgICBTdHJpbmcgcmVz
dWx0ID0gY29tbW9uVk0oKS5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPnRvSlNPTigpOwogICAgIEFT
U0VSVChyZXN1bHQubGVuZ3RoKCkpOwogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
U3RyaW5nQ2FsbGJhY2socmVzdWx0LCBjYWxsYmFja0lEKSk7CiB9CkBAIC01NDc1LDcgKzU0NzYs
NyBAQCB2b2lkIFdlYlBhZ2U6OmdldEJ5dGVjb2RlUHJvZmlsZSh1aW50NjRfCiB2b2lkIFdlYlBh
Z2U6OmdldFNhbXBsaW5nUHJvZmlsZXJPdXRwdXQodWludDY0X3QgY2FsbGJhY2tJRCkKIHsKICNp
ZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCi0gICAgU2FtcGxpbmdQcm9maWxlciogc2FtcGxp
bmdQcm9maWxlciA9IEpTRE9NV2luZG93Ojpjb21tb25WTSgpLnNhbXBsaW5nUHJvZmlsZXIoKTsK
KyAgICBTYW1wbGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVyID0gY29tbW9uVk0oKS5zYW1w
bGluZ1Byb2ZpbGVyKCk7CiAgICAgaWYgKCFzYW1wbGluZ1Byb2ZpbGVyKSB7CiAgICAgICAgIHNl
bmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6SW52YWxpZGF0ZVN0cmluZ0NhbGxiYWNrKGNhbGxi
YWNrSUQpKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24g
MjA5Njc4KQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDcgQEAKKzIwMTYtMTItMTAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNv
bT4KKworICAgICAgICBUaGUgRE9NIHNob3VsZCBoYXZlIGFuIGFkdmFuY2luZyB3YXZlZnJvbnQg
b3BhcXVlIHJvb3QgYmFycmllcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY1NzEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisgICAgICAgIAorICAgICAgICBQcm9wYWdhdGUgdGhlIEpTRE9NV2luZG93QmFzZTo6Y29tbW9u
Vk0oKSAtPiBjb21tb25WTSgpIGNoYW5nZS4KKworICAgICAgICAqIE1pc2MvV2ViQ29yZVN0YXRp
c3RpY3MubW06CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNzIGphdmFTY3JpcHRPYmplY3Rz
Q291bnRdKToKKyAgICAgICAgKCtbV2ViQ29yZVN0YXRpc3RpY3MgamF2YVNjcmlwdEdsb2JhbE9i
amVjdHNDb3VudF0pOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0UHJv
dGVjdGVkT2JqZWN0c0NvdW50XSk6CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNzIGphdmFT
Y3JpcHRQcm90ZWN0ZWRHbG9iYWxPYmplY3RzQ291bnRdKToKKyAgICAgICAgKCtbV2ViQ29yZVN0
YXRpc3RpY3MgamF2YVNjcmlwdFByb3RlY3RlZE9iamVjdFR5cGVDb3VudHNdKToKKyAgICAgICAg
KCtbV2ViQ29yZVN0YXRpc3RpY3MgamF2YVNjcmlwdE9iamVjdFR5cGVDb3VudHNdKToKKyAgICAg
ICAgKCtbV2ViQ29yZVN0YXRpc3RpY3Mgc2hvdWxkUHJpbnRFeGNlcHRpb25zXSk6CisgICAgICAg
ICgrW1dlYkNvcmVTdGF0aXN0aWNzIHNldFNob3VsZFByaW50RXhjZXB0aW9uczpdKToKKyAgICAg
ICAgKCtbV2ViQ29yZVN0YXRpc3RpY3MgbWVtb3J5U3RhdGlzdGljc10pOgorICAgICAgICAoK1tX
ZWJDb3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0UmVmZXJlbmNlZE9iamVjdHNDb3VudF0pOgorICAg
ICAgICAqIFBsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdFByb3h5Lm1tOgorICAgICAg
ICAoaWRlbnRpZmllckZyb21JZGVudGlmaWVyUmVwKToKKyAgICAgICAgKiBQbHVnaW5zL0hvc3Rl
ZC9Qcm94eUluc3RhbmNlLm1tOgorICAgICAgICAoV2ViS2l0OjpQcm94eUluc3RhbmNlOjpnZXRQ
cm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBQbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luU3RyZWFt
Lm1tOgorICAgICAgICAoV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW06OndhbnRzQWxsU3RyZWFtcyk6
CisgICAgICAgICogUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcubW06CisgICAgICAgICgt
W1dlYk5ldHNjYXBlUGx1Z2luVmlldyBzZW5kRXZlbnQ6aXNEcmF3UmVjdDpdKToKKyAgICAgICAg
KC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3IHByaXZhdGVCcm93c2luZ01vZGVEaWRDaGFuZ2VdKToK
KyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3IHNldFdpbmRvd0lmTmVjZXNzYXJ5XSk6
CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBjcmVhdGVQbHVnaW5TY3JpcHRhYmxl
T2JqZWN0XSk6CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBnZXRGb3JtVmFsdWU6
XSk6CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBldmFsdWF0ZUphdmFTY3JpcHRQ
bHVnaW5SZXF1ZXN0Ol0pOgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZpZXcgd2ViRnJh
bWU6ZGlkRmluaXNoTG9hZFdpdGhSZWFzb246XSk6CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1
Z2luVmlldyBsb2FkUGx1Z2luUmVxdWVzdDpdKToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVn
aW5WaWV3IF9wcmludGVkUGx1Z2luQml0bWFwXSk6CisgICAgICAgICogUGx1Z2lucy9XZWJQbHVn
aW5Db250cm9sbGVyLm1tOgorICAgICAgICAoLVtXZWJQbHVnaW5Db250cm9sbGVyIHBsdWdJblZp
ZXdXaXRoQXJndW1lbnRzOmZyb21QbHVnaW5QYWNrYWdlOl0pOgorICAgICAgICAoLVtXZWJQbHVn
aW5Db250cm9sbGVyIHN0b3BPbmVQbHVnaW46XSk6CisgICAgICAgICgtW1dlYlBsdWdpbkNvbnRy
b2xsZXIgc3RvcE9uZVBsdWdpbkZvclBhZ2VDYWNoZTpdKToKKyAgICAgICAgKC1bV2ViUGx1Z2lu
Q29udHJvbGxlciBkZXN0cm95T25lUGx1Z2luOl0pOgorICAgICAgICAoLVtXZWJQbHVnaW5Db250
cm9sbGVyIHN0YXJ0QWxsUGx1Z2luc10pOgorICAgICAgICAoLVtXZWJQbHVnaW5Db250cm9sbGVy
IGFkZFBsdWdpbjpdKToKKwogMjAxNi0xMi0wOSAgRGF2ZSBIeWF0dCAgPGh5YXR0QGFwcGxlLmNv
bT4KIAogICAgICAgICBbQ1NTIFBhcnNlcl0gUmVtb3ZlIHRoZSBvbGQgQ1NTIFBhcnNlcgpJbmRl
eDogU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCShyZXZpc2lv
biAyMDk2NzgpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW1wb3J0ICJXZWJGcmFtZUludGVy
bmFsLmgiCiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU0xvY2suaD4KICNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL01lbW9yeVN0YXRpc3RpY3MuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQ29tbW9uVk0u
aD4KICNpbXBvcnQgPFdlYkNvcmUvRm9udENhY2hlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1l
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0dDQ29udHJvbGxlci5oPgpAQCAtNTgsMzUgKzU5LDM1IEBA
ICsgKE5TQXJyYXkgKilzdGF0aXN0aWNzCiAKICsgKHNpemVfdClqYXZhU2NyaXB0T2JqZWN0c0Nv
dW50CiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOwot
ICAgIHJldHVybiBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS5oZWFwLm9iamVjdENvdW50KCk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7CisgICAgcmV0dXJuIGNvbW1vblZNKCku
aGVhcC5vYmplY3RDb3VudCgpOwogfQogCiArIChzaXplX3QpamF2YVNjcmlwdEdsb2JhbE9iamVj
dHNDb3VudAogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25WTSgp
KTsKLSAgICByZXR1cm4gSlNET01XaW5kb3c6OmNvbW1vblZNKCkuaGVhcC5nbG9iYWxPYmplY3RD
b3VudCgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGNvbW1vblZNKCkpOworICAgIHJldHVybiBj
b21tb25WTSgpLmhlYXAuZ2xvYmFsT2JqZWN0Q291bnQoKTsKIH0KIAogKyAoc2l6ZV90KWphdmFT
Y3JpcHRQcm90ZWN0ZWRPYmplY3RzQ291bnQKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RP
TVdpbmRvdzo6Y29tbW9uVk0oKSk7Ci0gICAgcmV0dXJuIEpTRE9NV2luZG93Ojpjb21tb25WTSgp
LmhlYXAucHJvdGVjdGVkT2JqZWN0Q291bnQoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhjb21t
b25WTSgpKTsKKyAgICByZXR1cm4gY29tbW9uVk0oKS5oZWFwLnByb3RlY3RlZE9iamVjdENvdW50
KCk7CiB9CiAKICsgKHNpemVfdClqYXZhU2NyaXB0UHJvdGVjdGVkR2xvYmFsT2JqZWN0c0NvdW50
CiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vblZNKCkpOwotICAg
IHJldHVybiBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS5oZWFwLnByb3RlY3RlZEdsb2JhbE9iamVj
dENvdW50KCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7CisgICAgcmV0dXJu
IGNvbW1vblZNKCkuaGVhcC5wcm90ZWN0ZWRHbG9iYWxPYmplY3RDb3VudCgpOwogfQogCiArIChO
U0NvdW50ZWRTZXQgKilqYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cwogewotICAg
IEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9jayhjb21tb25WTSgpKTsKICAgICAKICAgICBOU0NvdW50ZWRTZXQgKnJlc3VsdCA9
IFtOU0NvdW50ZWRTZXQgc2V0XTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlQ291bnRTZXQ+
IGNvdW50cyhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS5oZWFwLnByb3RlY3RlZE9iamVjdFR5cGVD
b3VudHMoKSk7CisgICAgc3RkOjp1bmlxdWVfcHRyPFR5cGVDb3VudFNldD4gY291bnRzKGNvbW1v
blZNKCkuaGVhcC5wcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKCkpOwogICAgIEhhc2hDb3VudGVk
U2V0PGNvbnN0IGNoYXIqPjo6aXRlcmF0b3IgZW5kID0gY291bnRzLT5lbmQoKTsKICAgICBmb3Ig
KEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPjo6aXRlcmF0b3IgaXQgPSBjb3VudHMtPmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0
LT52YWx1ZTsgKytpKQpAQCAtOTcsMTEgKzk4LDExIEBAICsgKE5TQ291bnRlZFNldCAqKWphdmFT
Y3JpcHRQcm90ZWN0ZWRPYmoKIAogKyAoTlNDb3VudGVkU2V0ICopamF2YVNjcmlwdE9iamVjdFR5
cGVDb3VudHMKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0o
KSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7CiAgICAgCiAgICAgTlNDb3Vu
dGVkU2V0ICpyZXN1bHQgPSBbTlNDb3VudGVkU2V0IHNldF07CiAKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8VHlwZUNvdW50U2V0PiBjb3VudHMoSlNET01XaW5kb3c6OmNvbW1vblZNKCkuaGVhcC5vYmpl
Y3RUeXBlQ291bnRzKCkpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlQ291bnRTZXQ+IGNvdW50
cyhjb21tb25WTSgpLmhlYXAub2JqZWN0VHlwZUNvdW50cygpKTsKICAgICBIYXNoQ291bnRlZFNl
dDxjb25zdCBjaGFyKj46Oml0ZXJhdG9yIGVuZCA9IGNvdW50cy0+ZW5kKCk7CiAgICAgZm9yIChI
YXNoQ291bnRlZFNldDxjb25zdCBjaGFyKj46Oml0ZXJhdG9yIGl0ID0gY291bnRzLT5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdC0+
dmFsdWU7ICsraSkKQEAgLTE2NywxMyArMTY4LDEzIEBAICsgKHNpemVfdClnbHlwaFBhZ2VDb3Vu
dAogCiArIChCT09MKXNob3VsZFByaW50RXhjZXB0aW9ucwogewotICAgIEpTTG9ja0hvbGRlciBs
b2NrKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhjb21t
b25WTSgpKTsKICAgICByZXR1cm4gUGFnZUNvbnNvbGVDbGllbnQ6OnNob3VsZFByaW50RXhjZXB0
aW9ucygpOwogfQogCiArICh2b2lkKXNldFNob3VsZFByaW50RXhjZXB0aW9uczooQk9PTClwcmlu
dAogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhjb21tb25WTSgpKTsKICAgICBQYWdlQ29uc29sZUNsaWVudDo6
c2V0U2hvdWxkUHJpbnRFeGNlcHRpb25zKHByaW50KTsKIH0KIApAQCAtMjAxLDkgKzIwMiw5IEBA
ICsgKE5TRGljdGlvbmFyeSAqKW1lbW9yeVN0YXRpc3RpY3MKIHsKICAgICBXVEY6OkZhc3RNYWxs
b2NTdGF0aXN0aWNzIGZhc3RNYWxsb2NTdGF0aXN0aWNzID0gV1RGOjpmYXN0TWFsbG9jU3RhdGlz
dGljcygpOwogICAgIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25W
TSgpKTsKLSAgICBzaXplX3QgaGVhcFNpemUgPSBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS5oZWFw
LnNpemUoKTsKLSAgICBzaXplX3QgaGVhcEZyZWUgPSBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS5o
ZWFwLmNhcGFjaXR5KCkgLSBoZWFwU2l6ZTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhjb21tb25W
TSgpKTsKKyAgICBzaXplX3QgaGVhcFNpemUgPSBjb21tb25WTSgpLmhlYXAuc2l6ZSgpOworICAg
IHNpemVfdCBoZWFwRnJlZSA9IGNvbW1vblZNKCkuaGVhcC5jYXBhY2l0eSgpIC0gaGVhcFNpemU7
CiAgICAgR2xvYmFsTWVtb3J5U3RhdGlzdGljcyBnbG9iYWxNZW1vcnlTdGF0cyA9IGdsb2JhbE1l
bW9yeVN0YXRpc3RpY3MoKTsKICAgICAKICAgICByZXR1cm4gW05TRGljdGlvbmFyeSBkaWN0aW9u
YXJ5V2l0aE9iamVjdHNBbmRLZXlzOgpAQCAtMjQ2LDggKzI0Nyw4IEBAICsgKHNpemVfdClqYXZh
U2NyaXB0Tm9HQ0FsbG93ZWRPYmplY3RzQ28KIAogKyAoc2l6ZV90KWphdmFTY3JpcHRSZWZlcmVu
Y2VkT2JqZWN0c0NvdW50CiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNv
bW1vblZNKCkpOwotICAgIHJldHVybiBKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS5oZWFwLnByb3Rl
Y3RlZE9iamVjdENvdW50KCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7Cisg
ICAgcmV0dXJuIGNvbW1vblZNKCkuaGVhcC5wcm90ZWN0ZWRPYmplY3RDb3VudCgpOwogfQogCiAr
IChOU1NldCAqKWphdmFTY3JpcHRSb290T2JqZWN0Q2xhc3NlcwpJbmRleDogU291cmNlL1dlYktp
dC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblN0cmVhbS5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luU3RyZWFtLm1tCShyZXZp
c2lvbiAyMDk2NzgpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1
Z2luU3RyZWFtLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW1wb3J0ICJX
ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCIKICNpbXBvcnQgPEZvdW5kYXRpb24vTlNVUkxSZXNw
b25zZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9DRk5ldHdvcmtTUEkuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvQ29tbW9uVk0uaD4KICNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnQuaD4KICNpbXBvcnQgPFdl
YkNvcmUvRG9jdW1lbnRMb2FkZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KQEAgLTM3
Nyw3ICszNzgsNyBAQCBib29sIFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtOjp3YW50c0FsbFN0CiAg
ICAgTlBFcnJvciBlcnJvcjsKICAgICB7CiAgICAgICAgIFBsdWdpblN0b3BEZWZlcnJlciBkZWZl
cnJlcihtX3BsdWdpblZpZXcuZ2V0KCkpOwotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgICAgICBK
U0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKICAgICAg
ICAgZXJyb3IgPSBtX3BsdWdpbkZ1bmNzLT5nZXR2YWx1ZShtX3BsdWdpbiwgTlBQVnBsdWdpbldh
bnRzQWxsTmV0d29ya1N0cmVhbXMsICZ2YWx1ZSk7CiAgICAgfQogICAgIGlmIChlcnJvciAhPSBO
UEVSUl9OT19FUlJPUikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2Nh
cGVQbHVnaW5WaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMv
V2ViTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCShyZXZpc2lvbiAyMDk2NzgpCisrKyBTb3VyY2UvV2Vi
S2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbQkod29ya2luZyBjb3B5KQpA
QCAtNTMsNiArNTMsNyBAQAogI2ltcG9ydCAiV2ViVUlEZWxlZ2F0ZVByaXZhdGUuaCIKICNpbXBv
cnQgIldlYlZpZXdJbnRlcm5hbC5oIgogI2ltcG9ydCA8Q2FyYm9uL0NhcmJvbi5oPgorI2ltcG9y
dCA8V2ViQ29yZS9Db21tb25WTS5oPgogI2ltcG9ydCA8V2ViQ29yZS9Db29raWVKYXIuaD4KICNp
bXBvcnQgPFdlYkNvcmUvRG9jdW1lbnRMb2FkZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvRWxlbWVu
dC5oPgpAQCAtNjY1LDcgKzY2Niw3IEBAIC0gKEJPT0wpc2VuZEV2ZW50Oih2b2lkKilldmVudCBp
c0RyYXdSZWMKICAgICAvLyBTZXQgdGhlIHBsdWdpbkFsbG93UG9wdXAgZmxhZy4KICAgICBBU1NF
UlQoX2V2ZW50SGFuZGxlcik7CiAgICAgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgICAgICBK
U0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKICAgICAg
ICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihfZXZlbnRIYW5kbGVyLT5j
dXJyZW50RXZlbnRJc1VzZXJHZXN0dXJlKCkgPyBzdGQ6Om9wdGlvbmFsPFByb2Nlc3NpbmdVc2Vy
R2VzdHVyZVN0YXRlPihQcm9jZXNzaW5nVXNlckdlc3R1cmUpIDogc3RkOjpudWxsb3B0KTsKICAg
ICAgICAgYWNjZXB0ZWRFdmVudCA9IFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5GdW5jc10t
PmV2ZW50KHBsdWdpbiwgZXZlbnQpOwogICAgIH0KQEAgLTg0MSw3ICs4NDIsNyBAQCAtICh2b2lk
KXByaXZhdGVCcm93c2luZ01vZGVEaWRDaGFuZ2UKIAogICAgIFtzZWxmIHdpbGxDYWxsUGx1Z0lu
RnVuY3Rpb25dOwogICAgIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICAgICAgSlNDOjpKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoY29tbW9uVk0oKSk7CiAgICAgICAgIGlmIChb
X3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT5zZXR2YWx1ZSkKICAgICAgICAgICAg
IFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5GdW5jc10tPnNldHZhbHVlKHBsdWdpbiwgTlBO
VnByaXZhdGVNb2RlQm9vbCwgJnZhbHVlKTsKICAgICB9CkBAIC05ODIsNyArOTgzLDcgQEAgLSAo
dm9pZClzZXRXaW5kb3dJZk5lY2Vzc2FyeQogICAgICAgICBpblNldFdpbmRvdyA9IFlFUzsgICAg
ICAgIAogICAgICAgICBbc2VsZiB3aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKICAgICAgICAgewot
ICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01X
aW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwogICAgICAgICAgICAgbnBFcnIgPSBbX3Bs
dWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT5zZXR3aW5kb3cocGx1Z2luLCAmd2luZG93
KTsKICAgICAgICAgfQogICAgICAgICBbc2VsZiBkaWRDYWxsUGx1Z0luRnVuY3Rpb25dOwpAQCAt
MTM1Miw3ICsxMzUzLDcgQEAgLSAoTlBPYmplY3QgKiljcmVhdGVQbHVnaW5TY3JpcHRhYmxlT2Jq
ZQogICAgIE5QRXJyb3IgZXJyb3I7CiAgICAgW3NlbGYgd2lsbENhbGxQbHVnSW5GdW5jdGlvbl07
CiAgICAgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhK
U0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKICAgICAgICAgZXJyb3IgPSBbX3BsdWdp
blBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT5nZXR2YWx1ZShwbHVnaW4sIE5QUFZwbHVnaW5T
Y3JpcHRhYmxlTlBPYmplY3QsICZ2YWx1ZSk7CiAgICAgfQogICAgIFtzZWxmIGRpZENhbGxQbHVn
SW5GdW5jdGlvbl07CkBAIC0xMzcxLDcgKzEzNzIsNyBAQCAtIChCT09MKWdldEZvcm1WYWx1ZToo
TlNTdHJpbmcgKiopdmFsdWUKICAgICBOUEVycm9yIGVycm9yOwogICAgIFtzZWxmIHdpbGxDYWxs
UGx1Z0luRnVuY3Rpb25dOwogICAgIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICAgICAgSlND
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoY29tbW9uVk0oKSk7CiAgICAgICAg
IGVycm9yID0gW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+Z2V0dmFsdWUocGx1
Z2luLCBOUFBWZm9ybVZhbHVlLCAmYnVmZmVyKTsKICAgICB9CiAgICAgW3NlbGYgZGlkQ2FsbFBs
dWdJbkZ1bmN0aW9uXTsKQEAgLTE1MDMsNyArMTUwNCw3IEBAIC0gKHZvaWQpZXZhbHVhdGVKYXZh
U2NyaXB0UGx1Z2luUmVxdWVzdDoKICAgICAgICAgaWYgKFtKU1BsdWdpblJlcXVlc3Qgc2VuZE5v
dGlmaWNhdGlvbl0pIHsKICAgICAgICAgICAgIFtzZWxmIHdpbGxDYWxsUGx1Z0luRnVuY3Rpb25d
OwogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgICAgICAg
ICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoY29tbW9uVk0oKSk7
CiAgICAgICAgICAgICAgICAgW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+dXJs
bm90aWZ5KHBsdWdpbiwgW1VSTCBfd2ViX1VSTENTdHJpbmddLCBOUFJFU19ET05FLCBbSlNQbHVn
aW5SZXF1ZXN0IG5vdGlmeURhdGFdKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFtzZWxm
IGRpZENhbGxQbHVnSW5GdW5jdGlvbl07CkBAIC0xNTM1LDcgKzE1MzYsNyBAQCAtICh2b2lkKXdl
YkZyYW1lOihXZWJGcmFtZSAqKXdlYkZyYW1lIGRpCiAgICAgICAgIAogICAgIFtzZWxmIHdpbGxD
YWxsUGx1Z0luRnVuY3Rpb25dOwogICAgIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICAgICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoY29tbW9uVk0oKSk7CiAgICAg
ICAgIFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5GdW5jc10tPnVybG5vdGlmeShwbHVnaW4s
IFtbW3BsdWdpblJlcXVlc3QgcmVxdWVzdF0gVVJMXSBfd2ViX1VSTENTdHJpbmddLCByZWFzb24s
IFtwbHVnaW5SZXF1ZXN0IG5vdGlmeURhdGFdKTsKICAgICB9CiAgICAgW3NlbGYgZGlkQ2FsbFBs
dWdJbkZ1bmN0aW9uXTsKQEAgLTE1NzksNyArMTU4MCw3IEBAIC0gKHZvaWQpbG9hZFBsdWdpblJl
cXVlc3Q6KFdlYlBsdWdpblJlcXUKICAgICAgICAgICAgICAgICBpZiAoW3BsdWdpblJlcXVlc3Qg
c2VuZE5vdGlmaWNhdGlvbl0pIHsKICAgICAgICAgICAgICAgICAgICAgW3NlbGYgd2lsbENhbGxQ
bHVnSW5GdW5jdGlvbl07CiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93
QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5GdW5jc10tPnVybG5vdGlmeShwbHVn
aW4sIFtbW3BsdWdpblJlcXVlc3QgcmVxdWVzdF0gVVJMXSBfd2ViX1VSTENTdHJpbmddLCBOUEVS
Ul9HRU5FUklDX0VSUk9SLCBbcGx1Z2luUmVxdWVzdCBub3RpZnlEYXRhXSk7CiAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgW3NlbGYgZGlkQ2FsbFBsdWdJbkZ1bmN0
aW9uXTsKQEAgLTIzNjksNyArMjM3MCw3IEBAIC0gKE5TQml0bWFwSW1hZ2VSZXAgKilfcHJpbnRl
ZFBsdWdpbkJpdG0KICAgICAvLyBUZWxsIHRoZSBwbHVnaW4gdG8gcHJpbnQgaW50byB0aGUgR1dv
cmxkCiAgICAgW3NlbGYgd2lsbENhbGxQbHVnSW5GdW5jdGlvbl07CiAgICAgewotICAgICAgICBK
U0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNv
bW1vblZNKCkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhjb21tb25WTSgpKTsKICAgICAgICAgW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNz
XS0+cHJpbnQocGx1Z2luLCAmbnBQcmludCk7CiAgICAgfQogICAgIFtzZWxmIGRpZENhbGxQbHVn
SW5GdW5jdGlvbl07CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYlBsdWdpbkNv
bnRyb2xsZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJQ
bHVnaW5Db250cm9sbGVyLm1tCShyZXZpc2lvbiAyMDk2NzgpCisrKyBTb3VyY2UvV2ViS2l0L21h
Yy9QbHVnaW5zL1dlYlBsdWdpbkNvbnRyb2xsZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYg
KzQ4LDcgQEAKICNpbXBvcnQgIldlYlVJRGVsZWdhdGUuaCIKICNpbXBvcnQgIldlYlZpZXdJbnRl
cm5hbC5oIgogI2ltcG9ydCA8Rm91bmRhdGlvbi9OU1VSTFJlcXVlc3QuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvQ29tbW9uVk0uaD4KICNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnRMb2FkZXIuaD4KICNp
bXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVMb2FkUmVxdWVz
dC5oPgpAQCAtMTMyLDE2ICsxMzMsMTYgQEAgLSAoTlNWaWV3ICopcGx1Z0luVmlld1dpdGhBcmd1
bWVudHM6KE5TRAogI2lmIFBMQVRGT1JNKElPUykKICAgICB7CiAgICAgICAgIFdlYlZpZXcgKndl
YlZpZXcgPSBbX2RvY3VtZW50VmlldyBfd2ViVmlld107Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7Cisg
ICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkp
OwogICAgICAgICB2aWV3ID0gW1t3ZWJWaWV3IF9VSUtpdERlbGVnYXRlRm9yd2FyZGVyXSB3ZWJW
aWV3OndlYlZpZXcgcGx1Z0luVmlld1dpdGhBcmd1bWVudHM6YXJndW1lbnRzIGZyb21QbHVnSW5Q
YWNrYWdlOnBsdWdpblBhY2thZ2VdOwogICAgIH0KICNlbHNlCiAgICAgQ2xhc3Mgdmlld0ZhY3Rv
cnkgPSBbcGx1Z2luUGFja2FnZSB2aWV3RmFjdG9yeV07CiAgICAgaWYgKFt2aWV3RmFjdG9yeSBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHBsdWdJblZpZXdXaXRoQXJndW1lbnRzOildKSB7
Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2lu
ZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwogICAgICAgICB2aWV3ID0gW3ZpZXdGYWN0b3J5IHBs
dWdJblZpZXdXaXRoQXJndW1lbnRzOmFyZ3VtZW50c107CiAgICAgfSBlbHNlIGlmIChbdmlld0Zh
Y3RvcnkgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihwbHVnaW5WaWV3V2l0aEFyZ3VtZW50
czopXSkgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhK
U0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKICAgICAgICAgdmlldyA9IFt2aWV3RmFj
dG9yeSBwbHVnaW5WaWV3V2l0aEFyZ3VtZW50czphcmd1bWVudHNdOwogICAgIH0KICNlbmRpZgpA
QCAtMjI0LDEwICsyMjUsMTAgQEAgLSAoQ0FMYXllciAqKXN1cGVybGF5ZXJGb3JQbHVnaW5WaWV3
OihOUwogLSAodm9pZClzdG9wT25lUGx1Z2luOihOU1ZpZXcgKil2aWV3CiB7CiAgICAgaWYgKFt2
aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViUGx1Z0luU3RvcCldKSB7Ci0gICAg
ICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFz
ZTo6Y29tbW9uVk0oKSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFs
bExvY2tzKGNvbW1vblZNKCkpOwogICAgICAgICBbdmlldyB3ZWJQbHVnSW5TdG9wXTsKICAgICB9
IGVsc2UgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocGx1Z2luU3RvcCld
KSB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9N
V2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwogICAgICAgICBbdmlldyBwbHVnaW5TdG9wXTsK
ICAgICB9CiB9CkBAIC0yMzYsNyArMjM3LDcgQEAgLSAodm9pZClzdG9wT25lUGx1Z2luOihOU1Zp
ZXcgKil2aWV3CiAtICh2b2lkKXN0b3BPbmVQbHVnaW5Gb3JQYWdlQ2FjaGU6KE5TVmlldyAqKXZp
ZXcKIHsKICAgICBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJQbHVn
SW5TdG9wRm9yUGFnZUNhY2hlKV0pIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICAgICAgSlND
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoY29tbW9uVk0oKSk7CiAgICAgICAg
IFt2aWV3IHdlYlBsdWdJblN0b3BGb3JQYWdlQ2FjaGVdOwogICAgIH0gZWxzZQogICAgICAgICBb
c2VsZiBzdG9wT25lUGx1Z2luOnZpZXddOwpAQCAtMjQ2LDEwICsyNDcsMTAgQEAgLSAodm9pZClz
dG9wT25lUGx1Z2luRm9yUGFnZUNhY2hlOihOU1ZpZQogLSAodm9pZClkZXN0cm95T25lUGx1Z2lu
OihOU1ZpZXcgKil2aWV3CiB7CiAgICAgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2Vs
ZWN0b3Iod2ViUGx1Z0luRGVzdHJveSldKSB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgICAg
IEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwogICAg
ICAgICBbdmlldyB3ZWJQbHVnSW5EZXN0cm95XTsKICAgICB9IGVsc2UgaWYgKFt2aWV3IHJlc3Bv
bmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocGx1Z2luRGVzdHJveSldKSB7Ci0gICAgICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9u
Vk0oKSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGNv
bW1vblZNKCkpOwogICAgICAgICBbdmlldyBwbHVnaW5EZXN0cm95XTsKICAgICB9CiB9CkBAIC0y
NjYsMTAgKzI2NywxMCBAQCAtICh2b2lkKXN0YXJ0QWxsUGx1Z2lucwogICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICAgICBpZCBhVmlldyA9IFtfdmlld3Mgb2JqZWN0
QXRJbmRleDppXTsKICAgICAgICAgaWYgKFthVmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVj
dG9yKHdlYlBsdWdJblN0YXJ0KV0pIHsKLSAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgICAg
ICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsK
ICAgICAgICAgICAgIFthVmlldyB3ZWJQbHVnSW5TdGFydF07CiAgICAgICAgIH0gZWxzZSBpZiAo
W2FWaWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocGx1Z2luU3RhcnQpXSkgewotICAg
ICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5k
b3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwogICAgICAgICAgICAgW2FWaWV3IHBsdWdpblN0
YXJ0XTsKICAgICAgICAgfQogICAgIH0KQEAgLTM0NSwxMCArMzQ2LDEwIEBAIC0gKHZvaWQpYWRk
UGx1Z2luOihOU1ZpZXcgKil2aWV3CiAKICAgICAgICAgTE9HKFBsdWdpbnMsICJpbml0aWFsaXpp
bmcgcGx1Zy1pbiAlQCIsIHZpZXcpOwogICAgICAgICBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVj
dG9yOkBzZWxlY3Rvcih3ZWJQbHVnSW5Jbml0aWFsaXplKV0pIHsKLSAgICAgICAgICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9u
Vk0oKSk7CisgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhjb21tb25WTSgpKTsKICAgICAgICAgICAgIFt2aWV3IHdlYlBsdWdJbkluaXRpYWxpemVdOwog
ICAgICAgICB9IGVsc2UgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocGx1
Z2luSW5pdGlhbGl6ZSldKSB7Ci0gICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgICAgICAgICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoY29tbW9uVk0oKSk7CiAgICAg
ICAgICAgICBbdmlldyBwbHVnaW5Jbml0aWFsaXplXTsKICAgICAgICAgfQogCkBAIC0zNjAsMTUg
KzM2MSwxNSBAQCAtICh2b2lkKWFkZFBsdWdpbjooTlNWaWV3ICopdmlldwogICAgICAgICBpZiAo
X3N0YXJ0ZWQpIHsKICAgICAgICAgICAgIExPRyhQbHVnaW5zLCAic3RhcnRpbmcgcGx1Zy1pbiAl
QCIsIHZpZXcpOwogICAgICAgICAgICAgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2Vs
ZWN0b3Iod2ViUGx1Z0luU3RhcnQpXSkgewotICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7Cisg
ICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoY29t
bW9uVk0oKSk7CiAgICAgICAgICAgICAgICAgW3ZpZXcgd2ViUGx1Z0luU3RhcnRdOwogICAgICAg
ICAgICAgfSBlbHNlIGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHBsdWdp
blN0YXJ0KV0pIHsKLSAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgICAgICAgICAgICAg
IEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwogICAg
ICAgICAgICAgICAgIFt2aWV3IHBsdWdpblN0YXJ0XTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIAogICAgICAgICAgICAgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
c2V0Q29udGFpbmluZ1dpbmRvdzopXSkgewotICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7Cisg
ICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoY29t
bW9uVk0oKSk7CiAgICAgICAgICAgICAgICAgW3ZpZXcgc2V0Q29udGFpbmluZ1dpbmRvdzpbX2Rv
Y3VtZW50VmlldyB3aW5kb3ddXTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRleDogU291
cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQ
bHVnaW5Ib3N0UHJveHkubW0JKHJldmlzaW9uIDIwOTY3OCkKKysrIFNvdXJjZS9XZWJLaXQvbWFj
L1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdFByb3h5Lm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0zNyw2ICszNyw3IEBACiAjaW1wb3J0ICJXZWJIb3N0ZWROZXRzY2FwZVBsdWdpblZpZXcu
aCIKICNpbXBvcnQgIldlYktpdFN5c3RlbUludGVyZmFjZS5oIgogI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvSWRlbnRpZmllcklubGluZXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQ29tbW9uVk0uaD4K
ICNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvSWRlbnRpZmllclJl
cC5oPgogI2ltcG9ydCA8V2ViQ29yZS9TY3JpcHRDb250cm9sbGVyLmg+CkBAIC02MjcsNyArNjI4
LDcgQEAgc3RhdGljIElkZW50aWZpZXIgaWRlbnRpZmllckZyb21JZGVudGlmaQogICAgIEFTU0VS
VChpZGVudGlmaWVyLT5pc1N0cmluZygpKTsKICAgCiAgICAgY29uc3QgY2hhciogc3RyID0gaWRl
bnRpZmllci0+c3RyaW5nKCk7ICAgIAotICAgIHJldHVybiBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSwgU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxs
YmFjayhzdHIsIHN0cmxlbihzdHIpKSk7CisgICAgcmV0dXJuIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJmNvbW1vblZNKCksIFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soc3RyLCBz
dHJsZW4oc3RyKSkpOwogfQogCiBrZXJuX3JldHVybl90IFdLUENJbnZva2UobWFjaF9wb3J0X3Qg
Y2xpZW50UG9ydCwgdWludDMyX3QgcGx1Z2luSUQsIHVpbnQzMl90IHJlcXVlc3RJRCwgdWludDMy
X3Qgb2JqZWN0SUQsIHVpbnQ2NF90IHNlcnZlcklkZW50aWZpZXIsCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UubW0JKHJldmlzaW9u
IDIwOTY3OCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5SW5zdGFu
Y2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2ltcG9ydCAiTmV0c2Nh
cGVQbHVnaW5Ib3N0UHJveHkuaCIKICNpbXBvcnQgIlByb3h5UnVudGltZU9iamVjdC5oIgorI2lt
cG9ydCA8V2ViQ29yZS9Db21tb25WTS5oPgogI2ltcG9ydCA8V2ViQ29yZS9JZGVudGlmaWVyUmVw
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0pTRE9NV2luZG93Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL25w
cnVudGltZV9pbXBsLmg+CkBAIC0zMjUsNyArMzI2LDcgQEAgdm9pZCBQcm94eUluc3RhbmNlOjpn
ZXRQcm9wZXJ0eU5hbWVzKEV4ZQogCiAgICAgICAgIGlmIChpZGVudGlmaWVyLT5pc1N0cmluZygp
KSB7CiAgICAgICAgICAgICBjb25zdCBjaGFyKiBzdHIgPSBpZGVudGlmaWVyLT5zdHJpbmcoKTsK
LSAgICAgICAgICAgIG5hbWVBcnJheS5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmSlNET01X
aW5kb3c6OmNvbW1vblZNKCksIFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soc3Ry
LCBzdHJsZW4oc3RyKSkpKTsKKyAgICAgICAgICAgIG5hbWVBcnJheS5hZGQoSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmY29tbW9uVk0oKSwgU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFj
ayhzdHIsIHN0cmxlbihzdHIpKSkpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG5hbWVB
cnJheS5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpZGVudGlmaWVyLT5udW1iZXIoKSkpOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwOTY3OCkKKysrIFNvdXJjZS9X
ZWJLaXQvd2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBACisyMDE2
LTEyLTEwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgVGhlIERP
TSBzaG91bGQgaGF2ZSBhbiBhZHZhbmNpbmcgd2F2ZWZyb250IG9wYXF1ZSByb290IGJhcnJpZXIK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTcxMgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAg
UHJvcGFnYXRlIHRoZSBKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkgLT4gY29tbW9uVk0oKSBj
aGFuZ2UuCisKKyAgICAgICAgKiBQbHVnaW5zL1BsdWdpblZpZXcuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6
c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwZXJmb3JtUmVxdWVzdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpucE9iamVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5WaWV3Ojpwcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWQpOgorICAgICAgICAqIFBs
dWdpbnMvUGx1Z2luVmlld1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpk
aXNwYXRjaE5QRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlS2V5
Ym9hcmRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldE5QV2luZG93UmVjdCk6Cisg
ICAgICAgICogV2ViQ29yZVN0YXRpc3RpY3MuY3BwOgorICAgICAgICAoV2ViQ29yZVN0YXRpc3Rp
Y3M6OmphdmFTY3JpcHRPYmplY3RzQ291bnQpOgorICAgICAgICAoV2ViQ29yZVN0YXRpc3RpY3M6
OmphdmFTY3JpcHRHbG9iYWxPYmplY3RzQ291bnQpOgorICAgICAgICAoV2ViQ29yZVN0YXRpc3Rp
Y3M6OmphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RzQ291bnQpOgorICAgICAgICAoV2ViQ29yZVN0
YXRpc3RpY3M6OmphdmFTY3JpcHRQcm90ZWN0ZWRHbG9iYWxPYmplY3RzQ291bnQpOgorICAgICAg
ICAoV2ViQ29yZVN0YXRpc3RpY3M6OmphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRz
KToKKyAgICAgICAgKFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZhU2NyaXB0T2JqZWN0VHlwZUNvdW50
cyk6CisgICAgICAgIChXZWJDb3JlU3RhdGlzdGljczo6c2hvdWxkUHJpbnRFeGNlcHRpb25zKToK
KyAgICAgICAgKFdlYkNvcmVTdGF0aXN0aWNzOjpzZXRTaG91bGRQcmludEV4Y2VwdGlvbnMpOgor
ICAgICAgICAoV2ViQ29yZVN0YXRpc3RpY3M6Om1lbW9yeVN0YXRpc3RpY3MpOgorICAgICAgICAq
IFdlYkphdmFTY3JpcHRDb2xsZWN0b3IuY3BwOgorICAgICAgICAoV2ViSmF2YVNjcmlwdENvbGxl
Y3Rvcjo6b2JqZWN0Q291bnQpOgorCiAyMDE2LTEyLTA5ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJl
bkBhcHBsZS5jb20+CiAKICAgICAgICAgVGV4dFBvc2l0aW9uIGFuZCBPcmRpbmFsTnVtYmVyIHNo
b3VsZCBiZSBtb3JlIGxpa2UgaWRpb21hdGljIG51bWJlcnMKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
d2luL1dlYkNvcmVTdGF0aXN0aWNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dp
bi9XZWJDb3JlU3RhdGlzdGljcy5jcHAJKHJldmlzaW9uIDIwOTY3OCkKKysrIFNvdXJjZS9XZWJL
aXQvd2luL1dlYkNvcmVTdGF0aXN0aWNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjks
NyBAQAogI2luY2x1ZGUgIkNPTVByb3BlcnR5QmFnLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSlNMb2NrLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvTWVtb3J5U3RhdGlzdGljcy5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvQ29tbW9uVk0uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RPTVdp
bmRvdy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRm9udENhY2hlLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9HQ0NvbnRyb2xsZXIuaD4KQEAgLTEwMyw4ICsxMDQsOCBAQCBIUkVTVUxUIFdlYkNvcmVTdGF0
aXN0aWNzOjpqYXZhU2NyaXB0T2JqCiAgICAgaWYgKCFjb3VudCkKICAgICAgICAgcmV0dXJuIEVf
UE9JTlRFUjsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25WTSgp
KTsKLSAgICAqY291bnQgPSAoVUlOVClKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS5oZWFwLm9iamVj
dENvdW50KCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7CisgICAgKmNvdW50
ID0gKFVJTlQpY29tbW9uVk0oKS5oZWFwLm9iamVjdENvdW50KCk7CiAgICAgcmV0dXJuIFNfT0s7
CiB9CiAKQEAgLTExMyw4ICsxMTQsOCBAQCBIUkVTVUxUIFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZh
U2NyaXB0R2xvCiAgICAgaWYgKCFjb3VudCkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKIAot
ICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsKLSAgICAqY291
bnQgPSAoVUlOVClKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS5oZWFwLmdsb2JhbE9iamVjdENvdW50
KCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7CisgICAgKmNvdW50ID0gKFVJ
TlQpY29tbW9uVk0oKS5oZWFwLmdsb2JhbE9iamVjdENvdW50KCk7CiAgICAgcmV0dXJuIFNfT0s7
CiB9CiAKQEAgLTEyMyw4ICsxMjQsOCBAQCBIUkVTVUxUIFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZh
U2NyaXB0UHJvCiAgICAgaWYgKCFjb3VudCkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKIAot
ICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsKLSAgICAqY291
bnQgPSAoVUlOVClKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS5oZWFwLnByb3RlY3RlZE9iamVjdENv
dW50KCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7CisgICAgKmNvdW50ID0g
KFVJTlQpY29tbW9uVk0oKS5oZWFwLnByb3RlY3RlZE9iamVjdENvdW50KCk7CiAgICAgcmV0dXJu
IFNfT0s7CiB9CiAKQEAgLTEzMyw4ICsxMzQsOCBAQCBIUkVTVUxUIFdlYkNvcmVTdGF0aXN0aWNz
OjpqYXZhU2NyaXB0UHJvCiAgICAgaWYgKCFjb3VudCkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRF
UjsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsKLSAg
ICAqY291bnQgPSAoVUlOVClKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS5oZWFwLnByb3RlY3RlZEds
b2JhbE9iamVjdENvdW50KCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7Cisg
ICAgKmNvdW50ID0gKFVJTlQpY29tbW9uVk0oKS5oZWFwLnByb3RlY3RlZEdsb2JhbE9iamVjdENv
dW50KCk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKQEAgLTE0Myw4ICsxNDQsOCBAQCBIUkVTVUxU
IFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZhU2NyaXB0UHJvCiAgICAgaWYgKCF0eXBlTmFtZXNBbmRD
b3VudHMpCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9j
ayhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFR5cGVDb3Vu
dFNldD4ganNPYmplY3RUeXBlTmFtZXMoSlNET01XaW5kb3c6OmNvbW1vblZNKCkuaGVhcC5wcm90
ZWN0ZWRPYmplY3RUeXBlQ291bnRzKCkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGNvbW1vblZN
KCkpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlQ291bnRTZXQ+IGpzT2JqZWN0VHlwZU5hbWVz
KGNvbW1vblZNKCkuaGVhcC5wcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKCkpOwogICAgIHR5cGVk
ZWYgVHlwZUNvdW50U2V0Ojpjb25zdF9pdGVyYXRvciBJdGVyYXRvcjsKICAgICBJdGVyYXRvciBl
bmQgPSBqc09iamVjdFR5cGVOYW1lcy0+ZW5kKCk7CiAgICAgSGFzaE1hcDxTdHJpbmcsIGludD4g
dHlwZUNvdW50TWFwOwpAQCAtMTYxLDggKzE2Miw4IEBAIEhSRVNVTFQgV2ViQ29yZVN0YXRpc3Rp
Y3M6OmphdmFTY3JpcHRPYmoKICAgICBpZiAoIXR5cGVOYW1lc0FuZENvdW50cykKICAgICAgICAg
cmV0dXJuIEVfUE9JTlRFUjsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpj
b21tb25WTSgpKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZUNvdW50U2V0PiBqc09iamVjdFR5
cGVOYW1lcyhKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKS5oZWFwLm9iamVjdFR5cGVDb3VudHMoKSk7
CisgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7CisgICAgc3RkOjp1bmlxdWVfcHRy
PFR5cGVDb3VudFNldD4ganNPYmplY3RUeXBlTmFtZXMoY29tbW9uVk0oKS5oZWFwLm9iamVjdFR5
cGVDb3VudHMoKSk7CiAgICAgdHlwZWRlZiBUeXBlQ291bnRTZXQ6OmNvbnN0X2l0ZXJhdG9yIEl0
ZXJhdG9yOwogICAgIEl0ZXJhdG9yIGVuZCA9IGpzT2JqZWN0VHlwZU5hbWVzLT5lbmQoKTsKICAg
ICBIYXNoTWFwPFN0cmluZywgaW50PiB0eXBlQ291bnRNYXA7CkBAIC0yNTksMTQgKzI2MCwxNCBA
QCBIUkVTVUxUIFdlYkNvcmVTdGF0aXN0aWNzOjpzaG91bGRQcmludEV4CiAgICAgaWYgKCFzaG91
bGRQcmludCkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKIAotICAgIEpTTG9ja0hvbGRlciBs
b2NrKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhjb21t
b25WTSgpKTsKICAgICAqc2hvdWxkUHJpbnQgPSBQYWdlQ29uc29sZUNsaWVudDo6c2hvdWxkUHJp
bnRFeGNlcHRpb25zKCk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKIEhSRVNVTFQgV2ViQ29yZVN0
YXRpc3RpY3M6OnNldFNob3VsZFByaW50RXhjZXB0aW9ucyhCT09MIHByaW50KQogewotICAgIEpT
TG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhjb21tb25WTSgpKTsKICAgICBQYWdlQ29uc29sZUNsaWVudDo6c2V0U2hvdWxkUHJp
bnRFeGNlcHRpb25zKHByaW50KTsKICAgICByZXR1cm4gU19PSzsKIH0KQEAgLTI5MCw5ICsyOTEs
OSBAQCBIUkVTVUxUIFdlYkNvcmVTdGF0aXN0aWNzOjptZW1vcnlTdGF0aXN0CiAKICAgICBXVEY6
OkZhc3RNYWxsb2NTdGF0aXN0aWNzIGZhc3RNYWxsb2NTdGF0aXN0aWNzID0gV1RGOjpmYXN0TWFs
bG9jU3RhdGlzdGljcygpOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNv
bW1vblZNKCkpOwotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBoZWFwU2l6ZSA9IEpTRE9NV2luZG93
Ojpjb21tb25WTSgpLmhlYXAuc2l6ZSgpOwotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBoZWFwRnJl
ZSA9IEpTRE9NV2luZG93Ojpjb21tb25WTSgpLmhlYXAuY2FwYWNpdHkoKSAtIGhlYXBTaXplOwor
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGNvbW1vblZNKCkpOworICAgIHVuc2lnbmVkIGxvbmcgbG9u
ZyBoZWFwU2l6ZSA9IGNvbW1vblZNKCkuaGVhcC5zaXplKCk7CisgICAgdW5zaWduZWQgbG9uZyBs
b25nIGhlYXBGcmVlID0gY29tbW9uVk0oKS5oZWFwLmNhcGFjaXR5KCkgLSBoZWFwU2l6ZTsKICAg
ICBHbG9iYWxNZW1vcnlTdGF0aXN0aWNzIGdsb2JhbE1lbW9yeVN0YXRzID0gZ2xvYmFsTWVtb3J5
U3RhdGlzdGljcygpOwogCiAgICAgSGFzaE1hcDxTdHJpbmcsIHVuc2lnbmVkIGxvbmcgbG9uZywg
QVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiBmaWVsZHM7CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dp
bi9XZWJKYXZhU2NyaXB0Q29sbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L3dpbi9XZWJKYXZhU2NyaXB0Q29sbGVjdG9yLmNwcAkocmV2aXNpb24gMjA5Njc4KQorKysgU291
cmNlL1dlYktpdC93aW4vV2ViSmF2YVNjcmlwdENvbGxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXAuaD4KICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9WTS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQ29tbW9uVk0u
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0RPTVdpbmRvdy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR0ND
b250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9KU0RPTVdpbmRvdy5oPgpAQCAtMTEwLDcg
KzExMSw3IEBAIEhSRVNVTFQgV2ViSmF2YVNjcmlwdENvbGxlY3Rvcjo6b2JqZWN0Q28KICAgICAg
ICAgcmV0dXJuIEVfUE9JTlRFUjsKICAgICB9CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RP
TVdpbmRvdzo6Y29tbW9uVk0oKSk7Ci0gICAgKmNvdW50ID0gKFVJTlQpSlNET01XaW5kb3c6OmNv
bW1vblZNKCkuaGVhcC5vYmplY3RDb3VudCgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGNvbW1v
blZNKCkpOworICAgICpjb3VudCA9IChVSU5UKWNvbW1vblZNKCkuaGVhcC5vYmplY3RDb3VudCgp
OwogICAgIHJldHVybiBTX09LOwogfQpJbmRleDogU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9Q
bHVnaW5WaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1Bs
dWdpblZpZXcuY3BwCShyZXZpc2lvbiAyMDk2NzgpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9QbHVn
aW5zL1BsdWdpblZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5j
bHVkZSAiUGx1Z2luUGFja2FnZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQnJpZGdlSlNDLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9DaHJvbWUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0NvbW1vblZNLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9Db29raWVKYXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RvY3Vt
ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudExvYWRlci5oPgpAQCAtMjM2LDcgKzIz
Nyw3IEBAIGJvb2wgUGx1Z2luVmlldzo6c3RhcnQoKQogICAgIE5QRXJyb3IgbnBFcnI7CiAgICAg
ewogICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICAg
ICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNl
Ojpjb21tb25WTSgpKTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoY29tbW9uVk0oKSk7CiAgICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAgICAg
ICAgIG5wRXJyID0gbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPm5ld3AoKE5QTUlNRVR5cGUpbV9t
aW1lVHlwZS51dGY4KCkuZGF0YSgpLCBtX2luc3RhbmNlLCBtX21vZGUsIG1fcGFyYW1Db3VudCwg
bV9wYXJhbU5hbWVzLCBtX3BhcmFtVmFsdWVzLCBOVUxMKTsKICAgICAgICAgc2V0Q2FsbGluZ1Bs
dWdpbihmYWxzZSk7CkBAIC0zMjUsNyArMzI2LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpzdG9wKCkK
IAogICAgIG1faXNTdGFydGVkID0gZmFsc2U7CiAKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwogCiAjaWYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgLy8gVW5zdWJjbGFzcyB0aGUgd2luZG93CkBA
IC00MjgsNyArNDI5LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpwZXJmb3JtUmVxdWVzdChQbHVnaW5S
ZQogICAgICAgICAgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS80ODA3NDY5PiBUaGlzIHNo
b3VsZCBiZSBzZW50IHdoZW4gdGhlIGRvY3VtZW50IGhhcyBmaW5pc2hlZCBsb2FkaW5nCiAgICAg
ICAgICAgICBpZiAocmVxdWVzdC0+c2VuZE5vdGlmaWNhdGlvbigpKSB7CiAgICAgICAgICAgICAg
ICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAgICAgICAgICAg
ICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNl
Ojpjb21tb25WTSgpKTsKKyAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKICAgICAgICAgICAgICAgICBzZXRDYWxsaW5nUGx1
Z2luKHRydWUpOwogICAgICAgICAgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT51cmxu
b3RpZnkobV9pbnN0YW5jZSwgcmVxdWVzdFVSTC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBOUFJF
U19ET05FLCByZXF1ZXN0LT5ub3RpZnlEYXRhKCkpOwogICAgICAgICAgICAgICAgIHNldENhbGxp
bmdQbHVnaW4oZmFsc2UpOwpAQCAtNjY1LDcgKzY2Niw3IEBAIE5QT2JqZWN0KiBQbHVnaW5WaWV3
OjpucE9iamVjdCgpCiAgICAgTlBFcnJvciBucEVycjsKICAgICB7CiAgICAgICAgIFBsdWdpblZp
ZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgICAgICBKU0M6OkpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAg
ICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsK
ICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICAgICAgbnBFcnIgPSBtX3BsdWdp
bi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBsdWdpblNjcmlwdGFi
bGVOUE9iamVjdCwgJm9iamVjdCk7CiAgICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwpA
QCAtMTM4Miw3ICsxMzgzLDcgQEAgdm9pZCBQbHVnaW5WaWV3Ojpwcml2YXRlQnJvd3NpbmdTdGF0
ZUNoYQogICAgICAgICByZXR1cm47CiAKICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2lu
Vmlldyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhK
U0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwogICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7
CiAgICAgTlBCb29sIHZhbHVlID0gcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZDsKICAgICBzZXRWYWx1
ZShtX2luc3RhbmNlLCBOUE5WcHJpdmF0ZU1vZGVCb29sLCAmdmFsdWUpOwpJbmRleDogU291cmNl
L1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5WaWV3V2luLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblZpZXdXaW4uY3BwCShyZXZpc2lvbiAyMDk2Nzgp
CisrKyBTb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblZpZXdXaW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9CcmlkZ2VKU0MuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0Nocm9tZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ2hyb21lQ2xp
ZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Db21tb25WTS5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
RG9jdW1lbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50TG9hZGVyLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9FbGVtZW50Lmg+CkBAIC00NTIsNyArNDUzLDcgQEAgYm9vbCBQbHVnaW5WaWV3
OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVudAogICAgICAgICBzaG91bGRQb3AgPSB0cnVlOwogICAg
IH0KIAotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2lu
ZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoY29tbW9uVk0oKSk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICBi
b29sIGFjY2VwdGVkID0gIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNl
LCAmbnBFdmVudCk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CkBAIC01OTUsNyArNTk2
LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleQogICAgIH0gZWxz
ZQogICAgICAgICByZXR1cm47CiAKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgIEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwogICAgIGlmIChkaXNwYXRjaE5Q
RXZlbnQobnBFdmVudCkpCiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogfQpA
QCAtNjYyLDcgKzY2Myw3IEBAIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudChNb3Vz
ZUUKICAgICB9IGVsc2UKICAgICAgICAgcmV0dXJuOwogCi0gICAgSlNDOjpKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICBK
U0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKICAgICAv
LyBGSVhNRTogQ29uc2lkZXIgYmFjayBwb3J0aW5nIHRoZSBodHRwOi8vd2Via2l0Lm9yZy9iLzU4
MTA4IGZpeCBoZXJlLgogICAgIGlmIChkaXNwYXRjaE5QRXZlbnQobnBFdmVudCkpCiAgICAgICAg
IGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwpAQCAtNzMzLDcgKzczNCw3IEBAIHZvaWQgUGx1
Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEkKICAgICBtX25wV2luZG93LmNsaXBSZWN0
LnRvcCA9IDA7CiAKICAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdykg
ewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdp
bmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2Nrcyhjb21tb25WTSgpKTsKICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVl
KTsKICAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdyhtX2luc3RhbmNl
LCAmbV9ucFdpbmRvdyk7CiAgICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwo=
</data>
<flag name="review"
          id="319232"
          type_id="1"
          status="+"
          setter="ysuzuki"
    />
          </attachment>
      

    </bug>

</bugzilla>