<?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>170579</bug_id>
          
          <creation_ts>2017-04-06 17:41:03 -0700</creation_ts>
          <short_desc>Add a PriorityQueue class</short_desc>
          <delta_ts>2017-04-11 10:50:14 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>170614</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Keith Miller">keith_miller</reporter>
          <assigned_to name="Keith Miller">keith_miller</assigned_to>
          <cc>benjamin</cc>
    
    <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>clopez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>ossy</cc>
    
    <cc>saam</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1295147</commentid>
    <comment_count>0</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-04-06 17:41:03 -0700</bug_when>
    <thetext>Add PriorityQueue class</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295159</commentid>
    <comment_count>1</comment_count>
      <attachid>306450</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-04-06 17:54:29 -0700</bug_when>
    <thetext>Created attachment 306450
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295165</commentid>
    <comment_count>2</comment_count>
      <attachid>306450</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-06 18:16:27 -0700</bug_when>
    <thetext>Comment on attachment 306450
Patch

I think we can use std::push_heap &amp; std::pop_heap to simplify the implementation. What do you think of?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295166</commentid>
    <comment_count>3</comment_count>
      <attachid>306453</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-04-06 18:26:34 -0700</bug_when>
    <thetext>Created attachment 306453
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295169</commentid>
    <comment_count>4</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-04-06 18:46:37 -0700</bug_when>
    <thetext>
(In reply to Yusuke Suzuki from comment #2)
&gt; Comment on attachment 306450 [details]
&gt; Patch
&gt; 
&gt; I think we can use std::push_heap &amp; std::pop_heap to simplify the
&gt; implementation. What do you think of?

I&apos;m not sure that really helps since we need to have a siftUp and siftDown for the increaseKey/decreaseKey methods.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295181</commentid>
    <comment_count>5</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-06 19:57:51 -0700</bug_when>
    <thetext>(In reply to Keith Miller from comment #4)
&gt; (In reply to Yusuke Suzuki from comment #2)
&gt; &gt; Comment on attachment 306450 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; I think we can use std::push_heap &amp; std::pop_heap to simplify the
&gt; &gt; implementation. What do you think of?
&gt; 
&gt; I&apos;m not sure that really helps since we need to have a siftUp and siftDown
&gt; for the increaseKey/decreaseKey methods.

Seems right. While increaseKey can be implemented in push_heap, decreaseKey requires siftDown which is not directly offered by stl.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295237</commentid>
    <comment_count>6</comment_count>
      <attachid>306453</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-04-07 00:39:01 -0700</bug_when>
    <thetext>Comment on attachment 306453
Patch

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

PriorityQueue LGTM, just one thing looks weird to me about how you&apos;re using this in Plan. Comments below.

&gt; Source/WTF/ChangeLog:19
&gt; +        The only way to update the location of an entry is to do a hash
&gt; +        table lookup with the entry&apos;s hash but this is probably more
&gt; +        expensive than just doing a linear search.

This seems unlikely to be true if the heap gets large. Perhaps it&apos;s worth filing a bug to investigate this if it ever becomes an issue?

&gt; Source/JavaScriptCore/wasm/WasmWorklist.cpp:112
&gt; +            worklist.m_queue.enqueue(WTFMove(element));
&gt;              worklist.m_planEnqueued-&gt;notifyAll(locker);
&gt; +            element = worklist.m_queue.peek();

I&apos;m confused as to what this is doing? What if you get back a different element when you do this?

Actually, this also looks like a potential problem in the old queue as well, except that it&apos;d naturally handle it since it never WTFMove() the element, so in the worst case, you&apos;d notify all your threads and they&apos;d grab a bunch of new plans and validate them, instead of compiling the element&apos;s plan in parallel.

&gt; Source/WTF/wtf/PriorityQueue.h:39
&gt; +//

Style: remove empty &quot;//&quot;

&gt; Source/WTF/wtf/PriorityQueue.h:54
&gt; +    void enqueue(T&amp;&amp; element)
&gt; +    {
&gt; +        size_t location = m_buffer.size();
&gt; +        m_buffer.append(WTFMove(element));
&gt; +        siftUp(location);
&gt; +    }

You should use forwarding semantics here.

&gt; Source/WTF/wtf/PriorityQueue.h:106
&gt; +    size_t parentOf(size_t location) const { ASSERT(location); return (location - 1) / 2; }
&gt; +    size_t leftChildOf(size_t location) const { return location * 2 + 1; }
&gt; +    size_t rightChildOf(size_t location) const { return leftChildOf(location) + 1; }

Style nit: I&apos;d make these static constexpr

&gt; Source/WTF/wtf/PriorityQueue.h:138
&gt; +    IsHigherPriority isHigherPriority;

It&apos;s questionable that you need to instantiate a value here. Why not just have an API here that requires some static function called isHigherPriority(a, b)?

&gt; Tools/TestWebKitAPI/Tests/WTF/PriorityQueue.cpp:34
&gt; +constexpr std::size_t operator &quot;&quot; _z ( unsigned long long n ) { return n; }

Is this needed? You only use it in 2 places.

&gt; Tools/TestWebKitAPI/Tests/WTF/PriorityQueue.cpp:196
&gt; +}

It might also be worth having a test based off randomness, but for values being enqueued/dequeued, and total length of the test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295445</commentid>
    <comment_count>7</comment_count>
      <attachid>306453</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-04-07 12:23:59 -0700</bug_when>
    <thetext>Comment on attachment 306453
Patch

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

&gt;&gt; Source/WTF/ChangeLog:19
&gt;&gt; +        expensive than just doing a linear search.
&gt; 
&gt; This seems unlikely to be true if the heap gets large. Perhaps it&apos;s worth filing a bug to investigate this if it ever becomes an issue?

Sounds good. I didn&apos;t mention this but it&apos;s also pretty rare that we actually use the  increase/decreaseKey functions so the cost of a O(n) is pretty rare. Also, the hash cost applies to enqueue and dequeue as well so changing the value of the key would likely need to be very common to outweigh the cost of searching.

&gt;&gt; Source/JavaScriptCore/wasm/WasmWorklist.cpp:112
&gt;&gt; +            element = worklist.m_queue.peek();
&gt; 
&gt; I&apos;m confused as to what this is doing? What if you get back a different element when you do this?
&gt; 
&gt; Actually, this also looks like a potential problem in the old queue as well, except that it&apos;d naturally handle it since it never WTFMove() the element, so in the worst case, you&apos;d notify all your threads and they&apos;d grab a bunch of new plans and validate them, instead of compiling the element&apos;s plan in parallel.

I think this works but only because compilation is strictly higher priority than validation. It might be conceptually simpler to poll again instead, however. I&apos;ll make that change.

&gt;&gt; Source/WTF/wtf/PriorityQueue.h:39
&gt;&gt; +//
&gt; 
&gt; Style: remove empty &quot;//&quot;

Fixed.

&gt;&gt; Source/WTF/wtf/PriorityQueue.h:54
&gt;&gt; +    }
&gt; 
&gt; You should use forwarding semantics here.

Fixed.

&gt;&gt; Source/WTF/wtf/PriorityQueue.h:106
&gt;&gt; +    size_t rightChildOf(size_t location) const { return leftChildOf(location) + 1; }
&gt; 
&gt; Style nit: I&apos;d make these static constexpr

Changed.

&gt;&gt; Source/WTF/wtf/PriorityQueue.h:138
&gt;&gt; +    IsHigherPriority isHigherPriority;
&gt; 
&gt; It&apos;s questionable that you need to instantiate a value here. Why not just have an API here that requires some static function called isHigherPriority(a, b)?

Otherwise, you can&apos;t use std::less and friends as the comparator. If you think it&apos;s worth it we could implement our own template isLess, isGreater, etc.

&gt;&gt; Tools/TestWebKitAPI/Tests/WTF/PriorityQueue.cpp:34
&gt;&gt; +constexpr std::size_t operator &quot;&quot; _z ( unsigned long long n ) { return n; }
&gt; 
&gt; Is this needed? You only use it in 2 places.

Either way. I can replace it with a const size_t zero.

&gt;&gt; Tools/TestWebKitAPI/Tests/WTF/PriorityQueue.cpp:196
&gt;&gt; +}
&gt; 
&gt; It might also be worth having a test based off randomness, but for values being enqueued/dequeued, and total length of the test.

Sounds good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295460</commentid>
    <comment_count>8</comment_count>
      <attachid>306530</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-04-07 12:56:10 -0700</bug_when>
    <thetext>Created attachment 306530
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295465</commentid>
    <comment_count>9</comment_count>
      <attachid>306530</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-04-07 13:02:21 -0700</bug_when>
    <thetext>Comment on attachment 306530
Patch

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

r=me

&gt; Source/JavaScriptCore/wasm/WasmWorklist.cpp:184
&gt; +    while (!m_queue.isEmpty()) {
&gt; +        QueueElement element = m_queue.dequeue();
&gt;          if (&amp;element.plan-&gt;vm() == &amp;vm) {
&gt;              element.plan-&gt;cancel();
&gt; -            return IterateResult::DropAndContinue;
&gt; +            continue;
&gt;          }

You need to rebase. This is no longer the code.

&gt; Source/WTF/wtf/PriorityQueue.h:39
&gt; +//

Please remove this.

&gt; Source/WTF/wtf/PriorityQueue.h:138
&gt; +    IsHigherPriority isHigherPriority;

I still don&apos;t quite understand why we need this, instead of something akin to HashTraits. Maybe file a bug to do this? It&apos;s unfortunate to make this class use more memory than needed. The only use of this class ATM will be a struct with no field members. It could just as easily be some abstract API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295485</commentid>
    <comment_count>10</comment_count>
      <attachid>306536</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-04-07 14:40:07 -0700</bug_when>
    <thetext>Created attachment 306536
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295486</commentid>
    <comment_count>11</comment_count>
      <attachid>306537</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-04-07 14:40:35 -0700</bug_when>
    <thetext>Created attachment 306537
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295490</commentid>
    <comment_count>12</comment_count>
      <attachid>306537</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-04-07 14:42:48 -0700</bug_when>
    <thetext>Comment on attachment 306537
Patch for landing

Rejecting attachment 306537 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-01&apos;, &apos;apply-attachment&apos;, &apos;--no-update&apos;, &apos;--non-interactive&apos;, 306537, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Last 500 characters of output:
ScriptCore/wasm/WasmWorklist.h
patching file Source/WTF/WTF.xcodeproj/project.pbxproj
patching file Source/WTF/wtf/MathExtras.h
patching file Source/WTF/wtf/PriorityQueue.h
patching file Tools/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj
patching file Tools/TestWebKitAPI/Tests/WTF/PriorityQueue.cpp

Failed to run &quot;[u&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/svn-apply&apos;, &apos;--force&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Full output: http://webkit-queues.webkit.org/results/3492593</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295499</commentid>
    <comment_count>13</comment_count>
      <attachid>306539</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-04-07 15:01:57 -0700</bug_when>
    <thetext>Created attachment 306539
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295507</commentid>
    <comment_count>14</comment_count>
      <attachid>306539</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-04-07 15:30:30 -0700</bug_when>
    <thetext>Comment on attachment 306539
Patch for landing

Rejecting attachment 306539 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-01&apos;, &apos;build&apos;, &apos;--no-clean&apos;, &apos;--no-update&apos;, &apos;--build-style=release&apos;, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Last 500 characters of output:
athExtras.dia -c /Volumes/Data/EWS/WebKit/Source/JavaScriptCore/b3/B3MathExtras.cpp -o /Volumes/Data/EWS/WebKit/WebKitBuild/JavaScriptCore.build/Release/JavaScriptCore.build/Objects-normal/x86_64/B3MathExtras.o

** BUILD FAILED **


The following build commands failed:
	CompileC /Volumes/Data/EWS/WebKit/WebKitBuild/JavaScriptCore.build/Release/JavaScriptCore.build/Objects-normal/x86_64/WasmWorklist.o wasm/WasmWorklist.cpp normal x86_64 c++ com.apple.compilers.llvm.clang.1_0.compiler
(1 failure)

Full output: http://webkit-queues.webkit.org/results/3492675</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295585</commentid>
    <comment_count>15</comment_count>
      <attachid>306554</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-04-07 17:35:02 -0700</bug_when>
    <thetext>Created attachment 306554
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295600</commentid>
    <comment_count>16</comment_count>
      <attachid>306554</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-04-07 18:15:12 -0700</bug_when>
    <thetext>Comment on attachment 306554
Patch for landing

Clearing flags on attachment: 306554

Committed r215135: &lt;http://trac.webkit.org/changeset/215135&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295601</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-04-07 18:15:14 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295649</commentid>
    <comment_count>18</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2017-04-08 01:34:53 -0700</bug_when>
    <thetext>(In reply to WebKit Commit Bot from comment #16)
&gt; Comment on attachment 306554 [details]
&gt; Patch for landing
&gt; 
&gt; Clearing flags on attachment: 306554
&gt; 
&gt; Committed r215135: &lt;http://trac.webkit.org/changeset/215135&gt;

It broke the GTK build:
In file included from ../../Source/JavaScriptCore/wasm/WasmWorklist.h:35:0,
                 from ../../Source/JavaScriptCore/wasm/WasmWorklist.cpp:26:
../../Source/WTF/wtf/PriorityQueue.h: In instantiation of ‘static constexpr size_t WTF::PriorityQueue&lt;T, isHigherPriority, inlineCapacity&gt;::parentOf(size_t) [with T = JSC::Wasm::Worklist::QueueElement; bool (* isHigherPriority)(const T&amp;, const T&amp;) = JSC::Wasm::Worklist::isHigherPriority; long unsigned int inlineCapacity = 10ul; size_t = long unsigned int]’:
../../Source/WTF/wtf/PriorityQueue.h:110:44:   required from ‘void WTF::PriorityQueue&lt;T, isHigherPriority, inlineCapacity&gt;::siftUp(size_t) [with T = JSC::Wasm::Worklist::QueueElement; bool (* isHigherPriority)(const T&amp;, const T&amp;) = JSC::Wasm::Worklist::isHigherPriority; long unsigned int inlineCapacity = 10ul; size_t = long unsigned int]’
../../Source/WTF/wtf/PriorityQueue.h:52:24:   required from ‘void WTF::PriorityQueue&lt;T, isHigherPriority, inlineCapacity&gt;::enqueue(T) [with T = JSC::Wasm::Worklist::QueueElement; bool (* isHigherPriority)(const T&amp;, const T&amp;) = JSC::Wasm::Worklist::isHigherPriority; long unsigned int inlineCapacity = 10ul]’
../../Source/JavaScriptCore/wasm/WasmWorklist.cpp:112:81:   required from here
../../Source/WTF/wtf/PriorityQueue.h:103:95: error: body of constexpr function ‘static constexpr size_t WTF::PriorityQueue&lt;T, isHigherPriority, inlineCapacity&gt;::parentOf(size_t) [with T = JSC::Wasm::Worklist::QueueElement; bool (* isHigherPriority)(const T&amp;, const T&amp;) = JSC::Wasm::Worklist::isHigherPriority; long unsigned int inlineCapacity = 10ul; size_t = long unsigned int]’ not a return-statement
     static constexpr size_t parentOf(size_t location) { ASSERT(location); return (location - 1) / 2; }
                                                                                               ^</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296001</commentid>
    <comment_count>19</comment_count>
      <attachid>306554</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2017-04-10 09:22:23 -0700</bug_when>
    <thetext>Comment on attachment 306554
Patch for landing

The std library has built-in heap functions. You should consider using those. (std has a priority queue as well. The only reason not to use it is that it will do the slow kind of allocation.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296426</commentid>
    <comment_count>20</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-04-11 09:14:22 -0700</bug_when>
    <thetext>When I needed a priority queue in the Timer.cpp implementation, I used std::push_heap and std::pop_heap. RunLoopGeneric.cpp and LegacyTileGrid.mm also use this approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296444</commentid>
    <comment_count>21</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-04-11 09:47:02 -0700</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #19)
&gt; The std library has built-in heap functions. You should consider using those.

(In reply to Darin Adler from comment #20)
&gt; When I needed a priority queue in the Timer.cpp implementation, I used
&gt; std::push_heap and std::pop_heap. RunLoopGeneric.cpp and LegacyTileGrid.mm
&gt; also use this approach.

I considered using the std::push_heap and std::pop_heap methods but it&apos;s not possible to implement decreaseKey() with std::pop_heap and there is no officially supported std::sift_down method. Although, it is possible to implement increaseKey() with std::push_heap.

(In reply to Geoffrey Garen from comment #19)
&gt; (std has a priority queue as well. The only reason not to use it is
&gt; that it will do the slow kind of allocation.)

std::priority_queue does not support iterating the queue, which is important for the Wasm use case. Additionally, std::priority_queue does not support an increaseKey or decreaseKey method. While I could subclass std::priority_queue and implement those methods, if I&apos;m going to go through that effort I might as well make a priority queue with all the bells and whistles I want.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296480</commentid>
    <comment_count>22</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2017-04-11 10:50:14 -0700</bug_when>
    <thetext>Since increaseKey and decreaseKey are O(n) in their implementations here, you could get similar performance using std by just changing a key and then calling make_heap again.

I guess you&apos;ve saved a little bit of performance since, after your O(n) search, you move the entry in O(log(n)) time, whereas make_heap would move the entry in O(n) time.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306450</attachid>
            <date>2017-04-06 17:54:29 -0700</date>
            <delta_ts>2017-04-06 18:26:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-170579-20170406175428.patch</filename>
            <type>text/plain</type>
            <size>36645</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE0OTcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
MmIzMzU5NmFhYmI4ZTQ3YTdjYTJkOTEwNzA0YmVjOTExNTc1ZjdhLi5kMGMyZGJjZmI2Y2NkYWVl
ZTA1MDVkZTMxMzllNTY3ZGNiNmZmMDIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMCBAQAorMjAxNy0wNC0wNiAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBBZGQgYSBQcmlvcml0eVF1ZXVlIGNsYXNzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA1NzkKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgV2FzbTo6V29ya2xpc3Qg
dG8gdXNlIFdURjo6UHJpb3JpdHlRdWV1ZS4KKworICAgICAgICAqIHdhc20vV2FzbVdvcmtsaXN0
LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OmVucXVldWUpOgorICAgICAgICAo
SlNDOjpXYXNtOjpXb3JrbGlzdDo6Y29tcGxldGVQbGFuU3luY2hyb25vdXNseSk6CisgICAgICAg
IChKU0M6Oldhc206OldvcmtsaXN0OjpzdG9wQWxsUGxhbnNGb3JWTSk6CisgICAgICAgIChKU0M6
Oldhc206OldvcmtsaXN0Ojp+V29ya2xpc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpXb3JrbGlz
dDo6aXRlcmF0ZSk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XYXNtV29ya2xpc3QuaDoKKwog
MjAxNy0wNC0wNSAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KIAogICAg
ICAgICBXZWJBc3NlbWJseTogUGxhbnMgc2hvdWxkIGJlIGFibGUgdG8gaGF2ZSBtb3JlIHRoYW4g
b25lIGNvbXBsZXRpb24gdGFzay4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIv
U291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggMTRlMDkzNjc0ZjJjODgwOTg0MjcwZmQxNDk1ZmMw
MTY4NWU0YjdmOS4uZjM1NTY1NDM3NWE3M2M4NTNjNjEwMzg4MjBmNjBmZWE5NDYxNDM2NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
QEAgLTEsMyArMSw0MSBAQAorMjAxNy0wNC0wNiAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVy
QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYSBQcmlvcml0eVF1ZXVlIGNsYXNzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA1NzkKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMg
YSBuZXcgUHJpb3JpdHlRdWV1ZSBjbGFzcyB0aGF0IGlzIGJhY2tlZCBieQorICAgICAgICBXVEY6
OlZlY3Rvci4gIEl0IGFsc28gaGFzIGEgbnVtYmVyIG9mIG90aGVyIG5pY2V0aWVzIHN1Y2ggYXMg
YmVpbmcKKyAgICAgICAgYWJsZSB0byBpdGVyYXRlIHRoZSBxdWV1ZSBhbmQgaW5jcmVhc2Ugb3Ig
ZGVjcmVhc2Uga2V5cy4KKworICAgICAgICBPbmUgbm90ZSBpcyB0aGF0IGluY3JlYXNlS2V5IGFu
ZCBkZWNyZWFzZUtleSBhcmUgTyhuKSByYXRoZXIgdGhhbgorICAgICAgICBPKGxvZyhuKSkuICBU
cmFkaXRpb25hbGx5LCB0aGUgbG9va3VwIG9mIHRoZSBrZXkgaXMgZG9uZSB3aXRoIGEKKyAgICAg
ICAgaGFzaCBtYXAgYnV0IHRoYXQncyBub3QgZmVhc2libGUgaGVyZS4gIFRoaXMgaXMgYmVjYXVz
ZSB1bmxlc3MgdGhlCisgICAgICAgIHF1ZXVlJ3MgZWxlbWVudCB0eXBlIGlzIGEgcG9pbnRlciB0
aGVyZSBpcyBubyBnb29kIHdheSBtYWludGFpbiBhCisgICAgICAgIHBlcnNpc3RlbnQgcmVmZXJl
bmNlIHRvIGV2ZXJ5IGVudHJ5IGluIHRoZSBxdWV1ZSB3aGlsZSB3ZSBzaWZ0LgorICAgICAgICBU
aGUgb25seSB3YXkgdG8gdXBkYXRlIHRoZSBsb2NhdGlvbiBvZiBhbiBlbnRyeSBpcyB0byBkbyBh
IGhhc2gKKyAgICAgICAgdGFibGUgbG9va3VwIHdpdGggdGhlIGVudHJ5J3MgaGFzaCBidXQgdGhp
cyBpcyBwcm9iYWJseSBtb3JlCisgICAgICAgIGV4cGVuc2l2ZSB0aGFuIGp1c3QgZG9pbmcgYSBs
aW5lYXIgc2VhcmNoLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogd3RmL1ByaW9yaXR5UXVldWUuaDogQWRkZWQuCisgICAgICAgIChXVEY6OlBy
aW9yaXR5UXVldWU6OnNpemUpOgorICAgICAgICAoV1RGOjpQcmlvcml0eVF1ZXVlOjppc0VtcHR5
KToKKyAgICAgICAgKFdURjo6UHJpb3JpdHlRdWV1ZTo6ZW5xdWV1ZSk6CisgICAgICAgIChXVEY6
OlByaW9yaXR5UXVldWU6OnBlZWspOgorICAgICAgICAoV1RGOjpQcmlvcml0eVF1ZXVlOjpkZXF1
ZXVlKToKKyAgICAgICAgKFdURjo6UHJpb3JpdHlRdWV1ZTo6ZGVjcmVhc2VLZXkpOgorICAgICAg
ICAoV1RGOjpQcmlvcml0eVF1ZXVlOjppbmNyZWFzZUtleSk6CisgICAgICAgIChXVEY6OlByaW9y
aXR5UXVldWU6OmJlZ2luKToKKyAgICAgICAgKFdURjo6UHJpb3JpdHlRdWV1ZTo6ZW5kKToKKyAg
ICAgICAgKFdURjo6UHJpb3JpdHlRdWV1ZTo6aXNWYWxpZEhlYXApOgorICAgICAgICAoV1RGOjpQ
cmlvcml0eVF1ZXVlOjpwYXJlbnRPZik6CisgICAgICAgIChXVEY6OlByaW9yaXR5UXVldWU6Omxl
ZnRDaGlsZE9mKToKKyAgICAgICAgKFdURjo6UHJpb3JpdHlRdWV1ZTo6cmlnaHRDaGlsZE9mKToK
KyAgICAgICAgKFdURjo6UHJpb3JpdHlRdWV1ZTo6c2lmdFVwKToKKyAgICAgICAgKFdURjo6UHJp
b3JpdHlRdWV1ZTo6c2lmdERvd24pOgorCiAyMDE3LTA0LTA1ICBZdXN1a2UgU3V6dWtpICA8dXRh
dGFuZS50ZWFAZ21haWwuY29tPgogCiAgICAgICAgIFtKU0NdIFN1cHByZXNzIHdhcm5pbmdzIGlu
IEdDQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5jcHAKaW5kZXgg
ZmRhMDZhNzMzZGJmMjA2OTE2OWMwZmIxNGY5ZDA1Y2NmY2JhMzFmMS4uNzExMDU2OTMzNjFmYWNj
ZGM2MTRjYWM4ZWRhYTU1ZTdkMTc3M2E2YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtV29ya2xpc3QuY3BwCkBAIC02NywxNiArNjcsMTUgQEAgcHJvdGVjdGVkOgogICAgICAg
ICBhdXRvJiBxdWV1ZSA9IHdvcmtsaXN0Lm1fcXVldWU7CiAgICAgICAgIHN5bmNocm9uaXplLm5v
dGlmeUFsbCgpOwogCi0gICAgICAgIHdoaWxlICghcXVldWUuZW1wdHkoKSkgewotCi0gICAgICAg
ICAgICBQcmlvcml0eSBwcmlvcml0eSA9IHF1ZXVlLnRvcCgpLnByaW9yaXR5OworICAgICAgICB3
aGlsZSAoIXF1ZXVlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgUHJpb3JpdHkgcHJpb3JpdHkg
PSBxdWV1ZS5wZWVrKCkucHJpb3JpdHk7CiAgICAgICAgICAgICBpZiAocHJpb3JpdHkgPT0gV29y
a2xpc3Q6OlByaW9yaXR5OjpTaHV0ZG93bikKICAgICAgICAgICAgICAgICByZXR1cm4gUG9sbFJl
c3VsdDo6U3RvcDsKIAotICAgICAgICAgICAgZWxlbWVudCA9IHF1ZXVlLnRvcCgpOworICAgICAg
ICAgICAgZWxlbWVudCA9IHF1ZXVlLnBlZWsoKTsKICAgICAgICAgICAgIC8vIE9ubHkgb25lIHRo
cmVhZCBzaG91bGQgdmFsaWRhdGUvcHJlcGFyZS4KLSAgICAgICAgICAgIGlmICghcXVldWUudG9w
KCkucGxhbi0+aGFzQmVlblByZXBhcmVkKCkpIHsKLSAgICAgICAgICAgICAgICBxdWV1ZS5wb3Ao
KTsKKyAgICAgICAgICAgIGlmICghcXVldWUucGVlaygpLnBsYW4tPmhhc0JlZW5QcmVwYXJlZCgp
KSB7CisgICAgICAgICAgICAgICAgcXVldWUuZGVxdWV1ZSgpOwogICAgICAgICAgICAgICAgIHJl
dHVybiBQb2xsUmVzdWx0OjpXb3JrOwogICAgICAgICAgICAgfQogCkBAIC04NCw3ICs4Myw3IEBA
IHByb3RlY3RlZDoKICAgICAgICAgICAgICAgICByZXR1cm4gUG9sbFJlc3VsdDo6V29yazsKIAog
ICAgICAgICAgICAgLy8gVGhlcmUgbXVzdCBiZSBhIGFub3RoZXIgdGhyZWFkIGxpbmtpbmcgdGhp
cyBwbGFuIHNvIHdlIGNhbiBkZXF1ZSBhbmQgc2VlIGlmIHRoZXJlIGlzIG90aGVyIHdvcmsuCi0g
ICAgICAgICAgICBxdWV1ZS5wb3AoKTsKKyAgICAgICAgICAgIHF1ZXVlLmRlcXVldWUoKTsKICAg
ICAgICAgICAgIGVsZW1lbnQgPSBRdWV1ZUVsZW1lbnQoKTsKICAgICAgICAgfQogICAgICAgICBy
ZXR1cm4gUG9sbFJlc3VsdDo6V2FpdDsKQEAgLTEwOCwyMiArMTA3LDEyIEBAIHByb3RlY3RlZDoK
IAogICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoKndvcmtsaXN0Lm1fbG9jayk7CiAgICAg
ICAgICAgICBlbGVtZW50LnNldFRvTmV4dFByaW9yaXR5KCk7Ci0gICAgICAgICAgICB3b3JrbGlz
dC5tX3F1ZXVlLnB1c2goZWxlbWVudCk7CisgICAgICAgICAgICB3b3JrbGlzdC5tX3F1ZXVlLmVu
cXVldWUoV1RGTW92ZShlbGVtZW50KSk7CiAgICAgICAgICAgICB3b3JrbGlzdC5tX3BsYW5FbnF1
ZXVlZC0+bm90aWZ5QWxsKGxvY2tlcik7CisgICAgICAgICAgICBlbGVtZW50ID0gd29ya2xpc3Qu
bV9xdWV1ZS5wZWVrKCk7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBGSVhNRTogdGhpcyBzaG91
bGQgY2hlY2sgaW4gb2NjYXNpb25hbGx5IHRvIHNlZSBpZiB0aGVyZSBhcmUgbmV3LCBoaWdoZXIg
cHJpb3JpdHkgZS5nLiBzeW5jaHJvbm91cywgcGxhbnMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4KLSAg
ICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDIwNAog
ICAgICAgICBwbGFuLT5jb21waWxlRnVuY3Rpb25zKFBsYW46OlBhcnRpYWwpOwotCi0gICAgICAg
IGlmICghcGxhbi0+aGFzV29yaygpKSB7Ci0gICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcigq
d29ya2xpc3QubV9sb2NrKTsKLSAgICAgICAgICAgIGF1dG8gcXVldWUgPSB3b3JrbGlzdC5tX3F1
ZXVlOwotICAgICAgICAgICAgLy8gQW5vdGhlciB0aHJlYWQgbWF5IGhhdmUgcmVtb3ZlZCBvdXIg
cGxhbiBmcm9tIHRoZSBxdWV1ZSBhbHJlYWR5LgotICAgICAgICAgICAgaWYgKCFxdWV1ZS5lbXB0
eSgpICYmIHF1ZXVlLnRvcCgpLnBsYW4gPT0gZWxlbWVudC5wbGFuKQotICAgICAgICAgICAgICAg
IHF1ZXVlLnBvcCgpOwotICAgICAgICB9Ci0KICAgICAgICAgcmV0dXJuIGNvbXBsZXRlKCk7CiAg
ICAgfQogCkBAIC0xNDgsNDcgKzEzNywxNyBAQCB2b2lkIFdvcmtsaXN0OjpRdWV1ZUVsZW1lbnQ6
OnNldFRvTmV4dFByaW9yaXR5KCkKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
fQogCi1lbnVtIGNsYXNzIEl0ZXJhdGVSZXN1bHQgeyBVcGRhdGVBbmRCcmVhaywgRHJvcEFuZENv
bnRpbnVlLCBDb250aW51ZSB9OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotdm9pZCBX
b3JrbGlzdDo6aXRlcmF0ZShjb25zdCBBYnN0cmFjdExvY2tlciYsIGNvbnN0IEZ1bmN0b3ImIGZ1
bmMpCi17Ci0gICAgLy8gc3RkOjpwcmlvcml0eV9xdWV1ZSBkb2VzIG5vdCBoYXZlIGFuIGl0ZXJh
dG9yIG9yIGRlY3JlYXNlX2tleS4uLiA6KCBXaGlsZSB0aGlzIGlzIGdyb3NzLCB0aGlzIGZ1bmN0
aW9uCi0gICAgLy8gc2hvdWxkbid0IGJlIGNhbGxlZCB2ZXJ5IG9mdGVuIGFuZCB0aGUgcXVldWUg
c2hvdWxkIGJlIHNtYWxsLgotICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgaGF2ZSBvdXIgb3duIFBy
aW9yaXR5UXVldWUgdGhhdCBkb2Vzbid0IHN1Y2suCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDE0NQotICAgIHN0ZDo6dmVjdG9yPFF1ZXVlRWxlbWVu
dD4gZWxlbWVudHM7Ci0gICAgd2hpbGUgKCFtX3F1ZXVlLmVtcHR5KCkpIHsKLSAgICAgICAgUXVl
dWVFbGVtZW50IGVsZW1lbnQgPSBtX3F1ZXVlLnRvcCgpOwotICAgICAgICBtX3F1ZXVlLnBvcCgp
OwotICAgICAgICBJdGVyYXRlUmVzdWx0IHJlc3VsdCA9IGZ1bmMoZWxlbWVudCk7Ci0gICAgICAg
IGlmIChyZXN1bHQgPT0gSXRlcmF0ZVJlc3VsdDo6VXBkYXRlQW5kQnJlYWspIHsKLSAgICAgICAg
ICAgIGVsZW1lbnRzLnB1c2hfYmFjayhlbGVtZW50KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKHJlc3VsdCA9PSBJdGVyYXRlUmVzdWx0OjpDb250aW51ZSkK
LSAgICAgICAgICAgIGVsZW1lbnRzLnB1c2hfYmFjayhlbGVtZW50KTsKLSAgICAgICAgY29udGlu
dWU7Ci0gICAgfQotICAgIAotICAgIGZvciAoYXV0byBlbGVtZW50IDogZWxlbWVudHMpCi0gICAg
ICAgIG1fcXVldWUucHVzaChlbGVtZW50KTsKLX0KLQogdm9pZCBXb3JrbGlzdDo6ZW5xdWV1ZShS
ZWY8UGxhbj4gcGxhbikKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKIAogICAg
IGlmICghQVNTRVJUX0RJU0FCTEVEKSB7Ci0gICAgICAgIGl0ZXJhdGUobG9ja2VyLCBbJl0gKFF1
ZXVlRWxlbWVudCYgZWxlbWVudCkgeworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGVsZW1lbnQg
OiBtX3F1ZXVlKQogICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChlbGVtZW50LCBlbGVtZW50LnBs
YW4uZ2V0KCkgIT0gJnBsYW4uZ2V0KCkpOwotICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGVSZXN1
bHQ6OkNvbnRpbnVlOwotICAgICAgICB9KTsKICAgICB9CiAKICAgICBkYXRhTG9nTG5JZih2ZXJi
b3NlLCAiRW5xdWV1aW5nIHBsYW4iKTsKLSAgICBtX3F1ZXVlLnB1c2goeyBQcmlvcml0eTo6UHJl
cGFyYXRpb24sIG5leHRUaWNrZXQoKSwgIFdURk1vdmUocGxhbikgfSk7CisgICAgbV9xdWV1ZS5l
bnF1ZXVlKHsgUHJpb3JpdHk6OlByZXBhcmF0aW9uLCBuZXh0VGlja2V0KCksICBXVEZNb3ZlKHBs
YW4pIH0pOwogICAgIG1fcGxhbkVucXVldWVkLT5ub3RpZnlPbmUobG9ja2VyKTsKIH0KIApAQCAt
MTk2LDEyICsxNTUsMTIgQEAgdm9pZCBXb3JrbGlzdDo6Y29tcGxldGVQbGFuU3luY2hyb25vdXNs
eShQbGFuJiBwbGFuKQogewogICAgIHsKICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9j
ayk7Ci0gICAgICAgIGl0ZXJhdGUobG9ja2VyLCBbJl0gKFF1ZXVlRWxlbWVudCYgZWxlbWVudCkg
eworICAgICAgICBtX3F1ZXVlLmRlY3JlYXNlS2V5KFsmXSAoUXVldWVFbGVtZW50JiBlbGVtZW50
KSB7CiAgICAgICAgICAgICBpZiAoZWxlbWVudC5wbGFuID09ICZwbGFuKSB7CiAgICAgICAgICAg
ICAgICAgZWxlbWVudC5wcmlvcml0eSA9IFByaW9yaXR5OjpTeW5jaHJvbm91czsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gSXRlcmF0ZVJlc3VsdDo6VXBkYXRlQW5kQnJlYWs7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gSXRl
cmF0ZVJlc3VsdDo6Q29udGludWU7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IH0pOwogCiAgICAgICAgIGZvciAoYXV0byYgdGhyZWFkIDogbV90aHJlYWRzKSB7CkBAIC0yMTYs
MTcgKzE3NSwyMyBAQCB2b2lkIFdvcmtsaXN0Ojpjb21wbGV0ZVBsYW5TeW5jaHJvbm91c2x5KFBs
YW4mIHBsYW4pCiB2b2lkIFdvcmtsaXN0OjpzdG9wQWxsUGxhbnNGb3JWTShWTSYgdm0pCiB7CiAg
ICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7Ci0gICAgaXRlcmF0ZShsb2NrZXIsIFsmXSAo
UXVldWVFbGVtZW50JiBlbGVtZW50KSB7CisgICAgVmVjdG9yPFF1ZXVlRWxlbWVudD4gZWxlbWVu
dHM7CisgICAgd2hpbGUgKCFtX3F1ZXVlLmlzRW1wdHkoKSkgeworICAgICAgICBRdWV1ZUVsZW1l
bnQgZWxlbWVudCA9IG1fcXVldWUuZGVxdWV1ZSgpOwogICAgICAgICBpZiAoJmVsZW1lbnQucGxh
bi0+dm0oKSA9PSAmdm0pIHsKICAgICAgICAgICAgIGVsZW1lbnQucGxhbi0+Y2FuY2VsKCk7Ci0g
ICAgICAgICAgICByZXR1cm4gSXRlcmF0ZVJlc3VsdDo6RHJvcEFuZENvbnRpbnVlOworICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEl0ZXJhdGVSZXN1bHQ6
OkNvbnRpbnVlOwotICAgIH0pOworCisgICAgICAgIGVsZW1lbnRzLmFwcGVuZChXVEZNb3ZlKGVs
ZW1lbnQpKTsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBlbGVtZW50cykKKyAg
ICAgICAgbV9xdWV1ZS5lbnF1ZXVlKFdURk1vdmUoZWxlbWVudCkpOwogCiAgICAgZm9yIChhdXRv
JiB0aHJlYWQgOiBtX3RocmVhZHMpIHsKICAgICAgICAgaWYgKHRocmVhZC0+ZWxlbWVudC5wbGFu
ICYmICZ0aHJlYWQtPmVsZW1lbnQucGxhbi0+dm0oKSA9PSAmdm0pIHsKLSAgICAgICAgICAgIC8v
IFdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhlIGRlYWRsb2NraW5nIHNpbmNlIHRoZSB0
aHJlYWQgY2FuJ3QgYmxvY2sgd2l0aG91dCBjbGVhcmluZyB0aGUgcGxhbiBhbmQgbXVzdCBob2xk
IHRoZSBsb2NrIHRvIGRvIHNvLgorICAgICAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSB0byB3b3Jy
eSBhYm91dCB0aGUgZGVhZGxvY2tpbmcgc2luY2UgdGhlIHRocmVhZCBjYW4ndCBibG9jayB3aXRo
b3V0IGNoZWNraW5nIGZvciBhIG5ldyBwbGFuIGFuZCBtdXN0IGhvbGQgdGhlIGxvY2sgdG8gZG8g
c28uCiAgICAgICAgICAgICB0aHJlYWQtPmVsZW1lbnQucGxhbi0+Y2FuY2VsKCk7CiAgICAgICAg
ICAgICB0aHJlYWQtPnN5bmNocm9uaXplLndhaXQoKm1fbG9jayk7CiAgICAgICAgIH0KQEAgLTI0
OCw3ICsyMTMsNyBAQCBXb3JrbGlzdDo6fldvcmtsaXN0KCkKIHsKICAgICB7CiAgICAgICAgIExv
Y2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOwotICAgICAgICBtX3F1ZXVlLnB1c2goeyBQcmlvcml0
eTo6U2h1dGRvd24sIG5leHRUaWNrZXQoKSwgbnVsbHB0ciB9KTsKKyAgICAgICAgbV9xdWV1ZS5l
bnF1ZXVlKHsgUHJpb3JpdHk6OlNodXRkb3duLCBuZXh0VGlja2V0KCksIG51bGxwdHIgfSk7CiAg
ICAgICAgIG1fcGxhbkVucXVldWVkLT5ub3RpZnlBbGwobG9ja2VyKTsKICAgICB9CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdGhyZWFkcy5zaXplKCk7ICsraSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmgKaW5kZXggYmNhZjFlZjg4ZGY0OTM1OTE1NjVj
ZmNlMDI4OWU3NWUxZWE0YzM3Mi4uOGRiMzA3NzQ0NzI5YWUwYjg3MmE2Zjk0ZGY4ZTFjZTEyZTUy
ZDhmYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmgKQEAgLTMy
LDYgKzMyLDcgQEAKICNpbmNsdWRlIDxxdWV1ZT4KIAogI2luY2x1ZGUgPHd0Zi9BdXRvbWF0aWNU
aHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvUHJpb3JpdHlRdWV1ZS5oPgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC04OCwxNyArODksMTMgQEAgcHJpdmF0ZToK
ICAgICAgICAgfQogICAgIH07CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotICAg
IHZvaWQgaXRlcmF0ZShjb25zdCBBYnN0cmFjdExvY2tlciYsIGNvbnN0IEZ1bmN0b3ImKTsKIAog
ICAgIEJveDxMb2NrPiBtX2xvY2s7CiAgICAgUmVmUHRyPEF1dG9tYXRpY1RocmVhZENvbmRpdGlv
bj4gbV9wbGFuRW5xdWV1ZWQ7CiAgICAgLy8gVGVjaG5pY2FsbHksIHRoaXMgY291bGQgb3ZlcmZs
b3cgYnV0IHRoYXQncyB1bmxpa2VseS4gRXZlbiBpZiBpdCBkaWQsIHdlIHdpbGwganVzdCBjb21w
aWxlIHRoaW5ncyBvZiB0aGUgc2FtZQogICAgIC8vIFByaW9yaXR5IGl0IHRoZSB3cm9uZyBvcmRl
ciwgd2hpY2ggaXNuJ3Qgd3JvbmcsIGp1c3Qgc3Vib3B0aW1hbC4KICAgICBUaWNrZXQgbV9sYXN0
R3JhbnRlZFRpY2tldCB7IDAgfTsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIFdURjo6
VmVjdG9yIGJ1dCBXVEY6OlZlY3RvciBkb2VzIG5vdCBzdXBwb3J0IHJhbmRvbSBhY2Nlc3MgaXRl
cmF0b3IuCi0gICAgc3RkOjpwcmlvcml0eV9xdWV1ZTxRdWV1ZUVsZW1lbnQsIHN0ZDo6dmVjdG9y
PFF1ZXVlRWxlbWVudD4sIENvbXBhcmF0b3I+IG1fcXVldWU7Ci0gICAgSGFzaE1hcDxKU1Byb21p
c2VEZWZlcnJlZCosIFBsYW4qPiBtX2FjdGl2ZVBsYW5zOworICAgIFByaW9yaXR5UXVldWU8UXVl
dWVFbGVtZW50LCBDb21wYXJhdG9yLCAxMD4gbV9xdWV1ZTsKICAgICBWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPFRocmVhZD4+IG1fdGhyZWFkczsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
V1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IGY1OGYxOWI1NmQzM2NiODhhNmZiNDlkNmU1ZjNiNjA5Nzg2
YmMwY2MuLjdjNzc0ZDk3ZGQ0MTg3MmEyMGYzOTljOTZhMzU5MWQ3YTRjYWUxNDkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNl
L1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTQ5LDYgKzE0OSw3IEBACiAJ
CTUxNUY3OTU2MUNGRDNBNjkwMENDRUQ5MyAvKiBDcm9zc1RocmVhZFF1ZXVlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTVGNzk1NTFDRkQzQTY5MDBD
Q0VEOTMgLyogQ3Jvc3NUaHJlYWRRdWV1ZS5oICovOyB9OwogCQk1MjE4MzAxMkM5OUU0NzZBODRF
RUJFQTggLyogU3ltYm9sSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGNzJCQkRCMTA3RkE0MjQ4ODYxNzhCOUUgLyogU3ltYm9sSW1wbC5jcHAg
Ki87IH07CiAJCTUzOUVCMDYzMUQ1NTI4NDIwMEM4MkVGNyAvKiBMRUJEZWNvZGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzlFQjA2MjFENTUyODQy
MDBDODJFRjcgLyogTEVCRGVjb2Rlci5oICovOyB9OworCQk1M0VDMjUzRTFFOTVBRDMwMDAwODMx
QjkgLyogUHJpb3JpdHlRdWV1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTNFQzI1M0MxRTk1QUQzMDAwMDgzMUI5IC8qIFByaW9yaXR5UXVldWUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1NTMwNzFD
QTFDNDA0MjcyMDAzODQ4OTggLyogVGlueUxSVUNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTMwNzFDOTFDNDA0MjcyMDAzODQ4OTggLyogVGlu
eUxSVUNhY2hlLmggKi87IH07CiAJCTU1OTdGODJGMUQ5NEI5OTcwMDY2QkMyMSAvKiBTeW5jaHJv
bml6ZWRGaXhlZFF1ZXVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1NTk3RjgyQzFEOTRCOTk3MDA2NkJDMjEgLyogU3luY2hyb25pemVkRml4ZWRRdWV1
ZS5oICovOyB9OwogCQk1QzdDODhENDFEMEEzQTBBMDA5RDJGNkQgLyogVW5pcXVlUmVmLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzdDODhEMzFEMEEz
QTBBMDA5RDJGNkQgLyogVW5pcXVlUmVmLmggKi87IH07CkBAIC0xNzgsNiArMTc5LDcgQEAKIAkJ
OTc0Q0ZDOEUxNkE0RjMyNzAwNkQ1NDA0IC8qIFdlYWtQdHIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3NENGQzhEMTZBNEYzMjcwMDZENTQwNCAvKiBX
ZWFrUHRyLmggKi87IH07CiAJCTlCQzcwRjA1MTc2QzM3OUQwMDEwMURFQyAvKiBBdG9taWNTdHJp
bmdUYWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5QkM3MEYwNDE3NkMzNzlEMDAxMDFERUMgLyogQXRvbWljU3RyaW5nVGFibGUuY3BwICovOyB9
OwogCQk5QkQ4RjQwQjE3NkMyQjQ3MDAwMkQ4NjUgLyogQXRvbWljU3RyaW5nVGFibGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCRDhGNDBBMTc2QzJB
RDgwMDAyRDg2NSAvKiBBdG9taWNTdHJpbmdUYWJsZS5oICovOyB9OworCQlBM0I3MjVFQzk4NzQ0
NkFEOTNGMUE0NDAgLyogUmFuZG9tRGV2aWNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM4RjU5N0NBMkE1NzQxN0ZCQUI5MkZENiAvKiBSYW5kb21E
ZXZpY2UuY3BwICovOyB9OwogCQlBNTA5OEIwMDFDMTY5RTA3MDAwODc3OTcgLyogU2FuZGJveFNQ
SS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTUwOThB
RkYxQzE2OUUwNzAwMDg3Nzk3IC8qIFNhbmRib3hTUEkuaCAqLzsgfTsKIAkJQTUwOThCMDIxQzE2
QTRGOTAwMDg3Nzk3IC8qIFNlY3VyaXR5U1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBNTA5OEIwMTFDMTZBNEY5MDAwODc3OTcgLyogU2VjdXJpdHlT
UEkuaCAqLzsgfTsKIAkJQTU2MUYzMTAxREYyNjQyMTAwRkY2NzVEIC8qIERlcHJlY2F0ZWRPcHRp
b25hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTU2
MUYzMEYxREYyNjQyMTAwRkY2NzVEIC8qIERlcHJlY2F0ZWRPcHRpb25hbC5oICovOyB9OwpAQCAt
MzgzLDEzICszODUsMTIgQEAKIAkJRTRBMEFEM0ExQTk2MjQ1NTAwNTM2REY2IC8qIFdvcmtRdWV1
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRBMEFE
MzgxQTk2MjQ1NTAwNTM2REY2IC8qIFdvcmtRdWV1ZS5oICovOyB9OwogCQlFNEEwQUQzRDFBOTYy
NTNDMDA1MzZERjYgLyogV29ya1F1ZXVlQ29jb2EuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRBMEFEM0MxQTk2MjUzQzAwNTM2REY2IC8qIFdvcmtR
dWV1ZUNvY29hLmNwcCAqLzsgfTsKIAkJRUI5NUUxRjAxNjFBNzI0MTAwODlBMkY1IC8qIEJ5dGVP
cmRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRUI5
NUUxRUYxNjFBNzI0MTAwODlBMkY1IC8qIEJ5dGVPcmRlci5oICovOyB9OworCQlGQzZFQzJCRjIw
Rjg0OTk2OUM2QTVCRTEgLyogUmFuZG9tRGV2aWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNEYxQjI0ODYxOUY0MTIyOTZEMUMxOUMgLyogUmFuZG9t
RGV2aWNlLmggKi87IH07CiAJCUZFODIyNTMxMUIyQTFFNUIwMEJBNjhGRCAvKiBOYWtlZFB0ci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU4MjI1MzAx
QjJBMUU1QjAwQkE2OEZEIC8qIE5ha2VkUHRyLmggKi87IH07CiAJCUZFODZBODc1MUU1OTQ0MDIw
MDExMUJCRiAvKiBGb3JiaWRIZWFwQWxsb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU4NkE4NzQxRTU5NDQwMjAwMTExQkJGIC8qIEZvcmJp
ZEhlYXBBbGxvY2F0aW9uLmggKi87IH07CiAJCUZFODkyNUIwMUQwMERBRUMwMDQ2OTA3RSAvKiBJ
bmRlbnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkU4OTI1QUYxRDAwREFFQzAwNDY5MDdFIC8qIEluZGVudGVyLmggKi87IH07CiAJCUZFREFDRDNE
MTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0YXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFREFDRDNCMTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFj
a1N0YXRzLmNwcCAqLzsgfTsKIAkJRkVEQUNEM0UxNjMwRjgzRjAwQzY5NjM0IC8qIFN0YWNrU3Rh
dHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFREFD
RDNDMTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0YXRzLmggKi87IH07Ci0JCUZDNkVDMkJGMjBG
ODQ5OTY5QzZBNUJFMSAvKiBSYW5kb21EZXZpY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI0RjFCMjQ4NjE5RjQxMjI5NkQxQzE5QyAvKiBSYW5kb21E
ZXZpY2UuaCAqLzsgfTsKLQkJQTNCNzI1RUM5ODc0NDZBRDkzRjFBNDQwIC8qIFJhbmRvbURldmlj
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDOEY1
OTdDQTJBNTc0MTdGQkFCOTJGRDYgLyogUmFuZG9tRGV2aWNlLmNwcCAqLzsgfTsKIC8qIEVuZCBQ
QlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhDb250YWluZXJJdGVtUHJveHkg
c2VjdGlvbiAqLwpAQCAtNTI2LDYgKzUyNyw3IEBACiAJCTFDQ0RCMTUxMUU1NjZCQzUwMDZDNzND
MCAvKiBDRlN0cmluZ1NQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDRlN0
cmluZ1NQSS5oOyBwYXRoID0gY2YvQ0ZTdHJpbmdTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMUZBNDdDODgxNTI1MDJEQTAwNTY4RDFCIC8qIFdlYkNvcmVUaHJlYWQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViQ29yZVRocmVhZC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFGQTQ3Qzg5MTUyNTAyREEwMDU2OEQxQiAvKiBX
ZWJDb3JlVGhyZWFkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVU
aHJlYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjRGMUIyNDg2MTlGNDEyMjk2
RDFDMTlDIC8qIFJhbmRvbURldmljZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSYW5kb21EZXZpY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjYxNDdCMDgx
NUREQ0NEQzAwRERCOTA3IC8qIEludGVnZXJUb1N0cmluZ0NvbnZlcnNpb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNjI5OUI2RDE3QTlFNUI4MDBBREVCRTUgLyogUmVm
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlZi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkyNjg0RDQzNTFDMDAwRDQwMDA4MUQ2NjMgLyogSW5kZXhTcGFyc2VT
ZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5kZXhTcGFyc2VTZXQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU0Miw2ICs1NDQsNyBAQAogCQk1MTVGNzk0
RDFDRkM5RjRBMDBDQ0VEOTMgLyogQ3Jvc3NUaHJlYWRUYXNrLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENyb3NzVGhyZWFkVGFzay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MTVGNzk1NTFDRkQzQTY5MDBDQ0VEOTMgLyogQ3Jvc3NUaHJlYWRRdWV1ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDcm9zc1RocmVhZFF1ZXVlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzOUVCMDYyMUQ1NTI4NDIwMEM4MkVGNyAvKiBMRUJE
ZWNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExFQkRlY29kZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTNFQzI1M0MxRTk1QUQzMDAwMDgzMUI5IC8q
IFByaW9yaXR5UXVldWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJpb3Jp
dHlRdWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NTMwNzFDOTFDNDA0Mjcy
MDAzODQ4OTggLyogVGlueUxSVUNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFRpbnlMUlVDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NTk3Rjgy
QzFEOTRCOTk3MDA2NkJDMjEgLyogU3luY2hyb25pemVkRml4ZWRRdWV1ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVCNDMzODNBNUQwQjQ2M0M5NDMzRDkzMyAvKiBJbmRleE1h
cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmRleE1hcC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzYwLDYgKzc2Myw3IEBACiAJCUFERjJDRTY1MUUzOUYx
MDYwMDY4ODlEQiAvKiBNZW1vcnlGb290cHJpbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gTWVtb3J5Rm9vdHByaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQjM4RkQ3QkMxNjg5NTNFODAwNjVDOTY5IC8qIEZlYXR1cmVEZWZpbmVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZlYXR1cmVEZWZpbmVzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM0RjhBOTM2MTlDNjVFQjQwMEIyQjE1RCAvKiBTdG9wd2F0
Y2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcHdhdGNoLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM4RjU5N0NBMkE1NzQxN0ZCQUI5MkZENiAvKiBSYW5k
b21EZXZpY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmFuZG9t
RGV2aWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q1NDk3QUExNTg1N0Qw
MzAwQjVCQzMwIC8qIE1lZGlhVGltZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBNZWRpYVRpbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDU0
OTdBQjE1ODU3RDAzMDBCNUJDMzAgLyogTWVkaWFUaW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IE1lZGlhVGltZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
RTQ2NTE2RDE5REIxRkI0MDAzRUNBMDUgLyogTlNNYXBUYWJsZVNQSS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBOU01hcFRhYmxlU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC03OTAsOCArNzk0LDYgQEAKIAkJRkU4OTI1QUYxRDAwREFFQzAwNDY5MDdFIC8q
IEluZGVudGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGVudGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFREFDRDNCMTYzMEY4M0YwMEM2OTYzNCAv
KiBTdGFja1N0YXRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0
YWNrU3RhdHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRURBQ0QzQzE2MzBG
ODNGMDBDNjk2MzQgLyogU3RhY2tTdGF0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTdGFja1N0YXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTI0RjFCMjQ4
NjE5RjQxMjI5NkQxQzE5QyAvKiBSYW5kb21EZXZpY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gUmFuZG9tRGV2aWNlLmg7IHBhdGggPSBSYW5kb21EZXZpY2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzhGNTk3Q0EyQTU3NDE3RkJBQjkyRkQ2IC8qIFJhbmRv
bURldmljZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBSYW5kb21E
ZXZpY2UuY3BwOyBwYXRoID0gUmFuZG9tRGV2aWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIC8qIEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJY
RnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwpAQCAtMTEwMyw2ICsxMTA1LDcgQEAKIAkJ
CQkwRkY4NjA5NDFCQ0NCRDc0MDA0NTEyN0YgLyogUG9pbnRlckNvbXBhcmlzb24uaCAqLywKIAkJ
CQkwRjlEMzM1RDE2NURCQTczMDA1QUQzODcgLyogUHJpbnRTdHJlYW0uY3BwICovLAogCQkJCTBG
OUQzMzVFMTY1REJBNzMwMDVBRDM4NyAvKiBQcmludFN0cmVhbS5oICovLAorCQkJCTUzRUMyNTND
MUU5NUFEMzAwMDA4MzFCOSAvKiBQcmlvcml0eVF1ZXVlLmggKi8sCiAJCQkJMEZDNDQ4ODIxNkZF
OUZFMTAwODQ0QkU5IC8qIFByb2Nlc3NJRC5oICovLAogCQkJCTE0M0Y2MTFEMTU2NUYwRjkwMERC
NTE0QSAvKiBSQU1TaXplLmNwcCAqLywKIAkJCQkxNDNGNjExRTE1NjVGMEY5MDBEQjUxNEEgLyog
UkFNU2l6ZS5oICovLApAQCAtMTQxMiw2ICsxNDE1LDcgQEAKIAkJCQk4MTM0MDEzOTE1QjA5MkZE
MDAxRkYwQjggLyogQmFzZTY0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNBOTE1MUE4MjVC
MDA0MTIzRkYgLyogYmlnbnVtLWR0b2EuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0FCMTUx
QTgyNUIwMDQxMjNGRiAvKiBiaWdudW0uaCBpbiBIZWFkZXJzICovLAorCQkJCTUzRUMyNTNFMUU5
NUFEMzAwMDA4MzFCOSAvKiBQcmlvcml0eVF1ZXVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0
NzQ1MjE1MUE4MjVCMDA0MTIzRkYgLyogQmluYXJ5U2VtYXBob3JlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBOEE0NzM4QTE1MUE4MjVCMDA0MTIzRkYgLyogQml0bWFwLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBOEE0NzM4QzE1MUE4MjVCMDA0MTIzRkYgLyogQml0VmVjdG9yLmggaW4gSGVhZGVycyAq
LywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1ByaW9yaXR5UXVldWUuaCBiL1NvdXJjZS9X
VEYvd3RmL1ByaW9yaXR5UXVldWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NzVmMzNiOWE5ZDk3N2E2OWEyODlh
MjA2ZWQwOTEyZWQ4MzNjZjdiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvUHJp
b3JpdHlRdWV1ZS5oCkBAIC0wLDAgKzEsMTQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8v
IFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhIGJhc2ljIHByaW9yaXR5IHF1ZXVlLiBUaGUgY2xhc3Mg
aXMgYmFja2VkIGFzIGEgYmluYXJ5IGhlYXAsIGxpa2Ugc3RkOjpwcmlvcml0eV9xdWV1ZS4KKy8v
IFByaW9yaXR5UXVldWUgaGFzIGEgY291cGxlIG9mIGFkdmFudGFnZXMgb3ZlciBzdGQ6OnByaW9y
aXR5X3F1ZXVlOgorLy8KKy8vIDEpIFRoZSBiYWNraW5nIHZlY3RvciBpcyBmYXN0TWFsbG9jZWQu
CisvLyAyKSBZb3UgY2FuIGl0ZXJhdGUgdGhlIGVsZW1lbnRzLgorLy8gMykgSXQgaGFzIGluLXBs
YWNlIGRlY3JlYXNlL2luY3JlYXNlS2V5IG1ldGhvZHMsIGFsdGhvdWdoIHRoZXkgYXJlIHN0aWxs
IE8obikgcmF0aGVyIHRoYW4gTyhsb2cobikpLgorLy8KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgSXNIaWdoZXJQcmlvcml0eSA9IHN0ZDo6bGVzczxUPiwgc2l6ZV90IGlubGluZUNh
cGFjaXR5ID0gMD4KK2NsYXNzIFByaW9yaXR5UXVldWUgeworICAgIHVzaW5nIEJ1ZmZlclR5cGUg
PSBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+OworICAgIHVzaW5nIGNvbnN0X2l0ZXJhdG9yID0g
dHlwZW5hbWUgQnVmZmVyVHlwZTo6Y29uc3RfaXRlcmF0b3I7CitwdWJsaWM6CisgICAgc2l6ZV90
IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5zaXplKCk7IH0KKyAgICBib29sIGlzRW1w
dHkoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5pc0VtcHR5KCk7IH0KKworICAgIHZvaWQgZW5x
dWV1ZShUJiYgZWxlbWVudCkKKyAgICB7CisgICAgICAgIHNpemVfdCBsb2NhdGlvbiA9IG1fYnVm
ZmVyLnNpemUoKTsKKyAgICAgICAgbV9idWZmZXIuYXBwZW5kKFdURk1vdmUoZWxlbWVudCkpOwor
ICAgICAgICBzaWZ0VXAobG9jYXRpb24pOworICAgIH0KKworICAgIGNvbnN0IFQmIHBlZWsoKSBj
b25zdCB7IHJldHVybiBtX2J1ZmZlclswXTsgfQorICAgIFQgZGVxdWV1ZSgpCisgICAgeworICAg
ICAgICBzdGQ6OnN3YXAobV9idWZmZXJbMF0sIG1fYnVmZmVyLmxhc3QoKSk7CisgICAgICAgIFQg
cmVzdWx0ID0gbV9idWZmZXIudGFrZUxhc3QoKTsKKyAgICAgICAgc2lmdERvd24oMCk7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4KKyAgICB2b2lkIGRlY3JlYXNlS2V5KGNvbnN0IEZ1bmN0b3ImIGRlc2lyZWRFbGVtZW50KQor
ICAgIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2J1ZmZlci5zaXplKCk7ICsr
aSkgeworICAgICAgICAgICAgaWYgKGRlc2lyZWRFbGVtZW50KG1fYnVmZmVyW2ldKSkgeworICAg
ICAgICAgICAgICAgIHNpZnREb3duKGkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoaXNWYWxpZEhlYXAoKSk7CisgICAg
fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGluY3JlYXNlS2V5
KGNvbnN0IEZ1bmN0b3ImIGRlc2lyZWRFbGVtZW50KQorICAgIHsKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2J1ZmZlci5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKGRl
c2lyZWRFbGVtZW50KG1fYnVmZmVyW2ldKSkgeworICAgICAgICAgICAgICAgIHNpZnRVcChpKTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgQVNTRVJUKGlzVmFsaWRIZWFwKCkpOworICAgIH0KKworICAgIGNvbnN0X2l0ZXJhdG9yIGJl
Z2luKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIuYmVnaW4oKTsgfTsKKyAgICBjb25zdF9pdGVy
YXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5lbmQoKTsgfTsKKworICAgIGJvb2wg
aXNWYWxpZEhlYXAoKSBjb25zdAorICAgIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX2J1ZmZlci5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKGxlZnRDaGlsZE9mKGkp
IDwgbV9idWZmZXIuc2l6ZSgpICYmICFpc0hpZ2hlclByaW9yaXR5KG1fYnVmZmVyW2ldLCBtX2J1
ZmZlcltsZWZ0Q2hpbGRPZihpKV0pKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIGlmIChyaWdodENoaWxkT2YoaSkgPCBtX2J1ZmZlci5zaXplKCkgJiYgIWlzSGln
aGVyUHJpb3JpdHkobV9idWZmZXJbaV0sIG1fYnVmZmVyW3JpZ2h0Q2hpbGRPZihpKV0pKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBzaXplX3QgcGFyZW50T2Yoc2l6ZV90IGxvY2F0
aW9uKSBjb25zdCB7IEFTU0VSVChsb2NhdGlvbik7IHJldHVybiAobG9jYXRpb24gLSAxKSAvIDI7
IH0KKyAgICBzaXplX3QgbGVmdENoaWxkT2Yoc2l6ZV90IGxvY2F0aW9uKSBjb25zdCB7IHJldHVy
biBsb2NhdGlvbiAqIDIgKyAxOyB9CisgICAgc2l6ZV90IHJpZ2h0Q2hpbGRPZihzaXplX3QgbG9j
YXRpb24pIGNvbnN0IHsgcmV0dXJuIGxlZnRDaGlsZE9mKGxvY2F0aW9uKSArIDE7IH0KKworICAg
IHZvaWQgc2lmdFVwKHNpemVfdCBsb2NhdGlvbikKKyAgICB7CisgICAgICAgIHdoaWxlIChsb2Nh
dGlvbikgeworICAgICAgICAgICAgYXV0byBwYXJlbnQgPSBwYXJlbnRPZihsb2NhdGlvbik7Cisg
ICAgICAgICAgICBpZiAoaXNIaWdoZXJQcmlvcml0eShtX2J1ZmZlcltwYXJlbnRdLCBtX2J1ZmZl
cltsb2NhdGlvbl0pKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgc3Rk
Ojpzd2FwKG1fYnVmZmVyW3BhcmVudF0sIG1fYnVmZmVyW2xvY2F0aW9uXSk7CisgICAgICAgICAg
ICBsb2NhdGlvbiA9IHBhcmVudDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgc2lmdERv
d24oc2l6ZV90IGxvY2F0aW9uKQorICAgIHsKKyAgICAgICAgd2hpbGUgKGxlZnRDaGlsZE9mKGxv
Y2F0aW9uKSA8IG1fYnVmZmVyLnNpemUoKSkgeworICAgICAgICAgICAgc2l6ZV90IGhpZ2hlclBy
aW9yaXR5Q2hpbGQ7CisgICAgICAgICAgICBpZiAoTElLRUxZKHJpZ2h0Q2hpbGRPZihsb2NhdGlv
bikgPCBtX2J1ZmZlci5zaXplKCkpKQorICAgICAgICAgICAgICAgIGhpZ2hlclByaW9yaXR5Q2hp
bGQgPSBpc0hpZ2hlclByaW9yaXR5KG1fYnVmZmVyW2xlZnRDaGlsZE9mKGxvY2F0aW9uKV0sIG1f
YnVmZmVyW3JpZ2h0Q2hpbGRPZihsb2NhdGlvbildKSA/IGxlZnRDaGlsZE9mKGxvY2F0aW9uKSA6
IHJpZ2h0Q2hpbGRPZihsb2NhdGlvbik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgaGlnaGVyUHJpb3JpdHlDaGlsZCA9IGxlZnRDaGlsZE9mKGxvY2F0aW9uKTsKKworICAgICAg
ICAgICAgaWYgKGlzSGlnaGVyUHJpb3JpdHkobV9idWZmZXJbbG9jYXRpb25dLCBtX2J1ZmZlclto
aWdoZXJQcmlvcml0eUNoaWxkXSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
ICAgICBzdGQ6OnN3YXAobV9idWZmZXJbbG9jYXRpb25dLCBtX2J1ZmZlcltoaWdoZXJQcmlvcml0
eUNoaWxkXSk7CisgICAgICAgICAgICBsb2NhdGlvbiA9IGhpZ2hlclByaW9yaXR5Q2hpbGQ7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IG1fYnVmZmVy
OworICAgIElzSGlnaGVyUHJpb3JpdHkgaXNIaWdoZXJQcmlvcml0eTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdURgorCit1c2luZyBXVEY6OlByaW9yaXR5UXVldWU7CmRpZmYgLS1naXQgYS9Ub29s
cy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNWM2MDkxY2ViNWQ5ZjdjYzc0YzE1
M2IxMjUwZmVkNDM5YTYxOWY4Yy4uODY3ODk0MzRmZjBiZDNlMWRlYTBkNTdiY2Y3ZmE3MjJjMGZk
YzVkZiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE4IEBACisyMDE3LTA0LTA2ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJA
YXBwbGUuY29tPgorCisgICAgICAgIEFkZCBhIFByaW9yaXR5UXVldWUgY2xhc3MKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDU3OQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvUHJpb3JpdHlRdWV1ZS5jcHA6IEFkZGVkLgorICAgICAgICAob3Bl
cmF0b3IgIF96ICk6CisgICAgICAgIChlbnF1ZXVlKToKKyAgICAgICAgKGRlcXVldWUpOgorICAg
ICAgICAoVEVTVCk6CisgICAgICAgIChDb21wYXJlTW92ZTo6b3BlcmF0b3IoKSk6CisKIDIwMTct
MDQtMDUgIEpvbmF0aGFuIEJlZGFyZCAgPGpiZWRhcmRAYXBwbGUuY29tPgogCiAgICAgICAgIHdl
YmtpdHB5OiBBZGQgcGlkIGxvZ2dpbmcgZm9yIHNpbXVsYXRvciBwcm9jZXNzZXMKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggZDdlZTcxODE0NWE4ZDUzZDc0NWMyNmIyMWM3MDQwYzc2YzQ1NzJm
YS4uNDE0MzZhNjZhNjM4ZGFhZmZkNDQ3MzViY2YzZTBkZTAxOTEwZmFkYiAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTE3MCw2ICsxNzAsNyBAQAogCQk1MzFDMUQ4RTFERjhFRjcyMDA2RTk3
OUYgLyogTEVCRGVjb2Rlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MzFDMUQ4RDFERjhFRjcyMDA2RTk3OUYgLyogTEVCRGVjb2Rlci5jcHAgKi87
IH07CiAJCTUzNjc3MDM0MUNDODAyMjgwMEQ0MjVCMSAvKiBXZWJTY3JpcHRPYmplY3REZXNjcmlw
dGlvbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUz
Njc3MDMzMUNDODAyMjgwMEQ0MjVCMSAvKiBXZWJTY3JpcHRPYmplY3REZXNjcmlwdGlvbi5tbSAq
LzsgfTsKIAkJNTM2NzcwMzYxQ0M4MUI2MTAwRDQyNUIxIC8qIFdlYlNjcmlwdE9iamVjdERlc2Ny
aXB0aW9uLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTM2NzcwMzUxQ0M4MTJGOTAwRDQyNUIxIC8qIFdlYlNjcmlwdE9iamVjdERlc2Ny
aXB0aW9uLmh0bWwgKi87IH07CisJCTUzRUMyNTQxMUU5NkZEODcwMDA4MzFCOSAvKiBQcmlvcml0
eVF1ZXVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUzRUMyNTNGMUU5NkJDODAwMDA4MzFCOSAvKiBQcmlvcml0eVF1ZXVlLmNwcCAqLzsgfTsKIAkJ
NTU5N0Y4MzYxRDk1OTZDODAwNjZCQzIxIC8qIFN5bmNocm9uaXplZEZpeGVkUXVldWUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTU5N0Y4MzQxRDk1
OTZDODAwNjZCQzIxIC8qIFN5bmNocm9uaXplZEZpeGVkUXVldWUuY3BwICovOyB9OwogCQk1NzE0
RUNCOTFDQThCNUIwMDAwNTFBQzggLyogRG93bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkwuaHRtbCBp
biBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzE0
RUNCODFDQThCNTg4MDAwNTFBQzggLyogRG93bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkwuaHRtbCAq
LzsgfTsKIAkJNTcxNEVDQkIxQ0E4QkZFNDAwMDUxQUM4IC8qIERvd25sb2FkUmVxdWVzdE9yaWdp
bmFsVVJMRnJhbWUuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1NzE0RUNCQTFDQThCRkQxMDAwNTFBQzggLyogRG93bmxvYWRSZXF1ZXN0
T3JpZ2luYWxVUkxGcmFtZS5odG1sICovOyB9OwpAQCAtMTA4Nyw2ICsxMDg4LDcgQEAKIAkJNTMx
QzFEOEQxREY4RUY3MjAwNkU5NzlGIC8qIExFQkRlY29kZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gTEVCRGVjb2Rlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUzNjc3MDMzMUNDODAyMjgwMEQ0MjVCMSAvKiBXZWJTY3JpcHRPYmplY3REZXNj
cmlwdGlvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlNj
cmlwdE9iamVjdERlc2NyaXB0aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MzY3NzAzNTFDQzgxMkY5MDBENDI1QjEgLyogV2ViU2NyaXB0T2JqZWN0RGVzY3JpcHRpb24uaHRt
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9IFdlYlNjcmlwdE9iamVjdERlc2NyaXB0aW9u
Lmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzRUMyNTNGMUU5NkJDODAwMDA4
MzFCOSAvKiBQcmlvcml0eVF1ZXVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFByaW9yaXR5UXVldWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
NTk3RjgzNDFEOTU5NkM4MDA2NkJDMjEgLyogU3luY2hyb25pemVkRml4ZWRRdWV1ZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcxNEVDQjgxQ0E4QjU4ODAwMDUx
QUM4IC8qIERvd25sb2FkUmVxdWVzdE9yaWdpbmFsVVJMLmh0bWwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0
bWw7IHBhdGggPSBEb3dubG9hZFJlcXVlc3RPcmlnaW5hbFVSTC5odG1sOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1NzE0RUNCQTFDQThCRkQxMDAwNTFBQzggLyogRG93bmxvYWRSZXF1
ZXN0T3JpZ2luYWxVUkxGcmFtZS5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gRG93
bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkxGcmFtZS5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMjA5Nyw2ICsyMDk5LDcgQEAKIAkJCQkxQUZERTY1NDE5NTNCMkMwMDBDNDhGRkEg
LyogT3B0aW9uYWwuY3BwICovLAogCQkJCUNFNTBEOEM4MUM4NjY1Q0UwMDcyRUE1QSAvKiBPcHRp
b25TZXQuY3BwICovLAogCQkJCTBGRTQ0Nzk3MUI3NkYxRTMwMDk0OThFQiAvKiBQYXJraW5nTG90
LmNwcCAqLywKKwkJCQk1M0VDMjUzRjFFOTZCQzgwMDAwODMxQjkgLyogUHJpb3JpdHlRdWV1ZS5j
cHAgKi8sCiAJCQkJMEZDNkM0Q0IxNDEwMjdFMDAwNUI3RjBDIC8qIFJlZEJsYWNrVHJlZS5jcHAg
Ki8sCiAJCQkJOTNBNDI3QUExODBEQTI2NDAwQ0QyNEQ3IC8qIFJlZi5jcHAgKi8sCiAJCQkJODZC
RDE5OTcxQTJEQjA1QjAwNkRDRjBBIC8qIFJlZkNvdW50ZXIuY3BwICovLApAQCAtMjY0Myw2ICsy
NjQ2LDcgQEAKIAkJCQkxQTc3QkFBMzFEOUFGRkZDMDA1RkM1NjggLyogT3B0aW9uU2V0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTdDODNERjAyMUQwQTU5MEMwMEZFQkNGMyAvKiBPU09iamVjdFB0
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREY1OTFEMEE1OTBDMDBGRUJDRjMgLyogUGFy
a2luZ0xvdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1M0VDMjU0MTFFOTZGRDg3MDAwODMxQjkg
LyogUHJpb3JpdHlRdWV1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYxMzFEMEE1OTBD
MDBGRUJDRjMgLyogUmVkQmxhY2tUcmVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjE0
MUQwQTU5MEMwMEZFQkNGMyAvKiBSZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGMTUx
RDBBNTkwQzAwRkVCQ0YzIC8qIFJlZkNvdW50ZXIuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Qcmlvcml0eVF1ZXVlLmNwcCBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ByaW9yaXR5UXVldWUuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjhlNzc2MmY1MjQ5Zjc5YTUxODM0MmNmNDE1ZGUzYzI2YWI3Y2RjM2EKLS0tIC9kZXYvbnVsbAor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Qcmlvcml0eVF1ZXVlLmNwcApAQCAt
MCwwICsxLDE5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1
ZGUgIk1vdmVPbmx5LmgiCisKKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KKyNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Qcmlvcml0eVF1ZXVlLmg+CisKK2NvbnN0ZXhwciBz
dGQ6OnNpemVfdCBvcGVyYXRvciAiIiBfeiAoIHVuc2lnbmVkIGxvbmcgbG9uZyBuICkgeyByZXR1
cm4gbjsgfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBDb21wYXJlPgorc3RhdGlj
IHZvaWQgZW5xdWV1ZShQcmlvcml0eVF1ZXVlPFQsIENvbXBhcmU+JiBxdWV1ZSwgVCBlbGVtZW50
KQoreworICAgIHNpemVfdCBzaXplQmVmb3JlID0gcXVldWUuc2l6ZSgpOworICAgIHF1ZXVlLmVu
cXVldWUoV1RGTW92ZShlbGVtZW50KSk7CisgICAgRVhQRUNUX0VRKHNpemVCZWZvcmUgKyAxLCBx
dWV1ZS5zaXplKCkpOworICAgIEVYUEVDVF9GQUxTRShxdWV1ZS5pc0VtcHR5KCkpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBDb21wYXJlPgorc3RhdGljIFQgZGVxdWV1ZShQ
cmlvcml0eVF1ZXVlPFQsIENvbXBhcmU+JiBxdWV1ZSkKK3sKKyAgICBFWFBFQ1RfRkFMU0UocXVl
dWUuaXNFbXB0eSgpKTsKKyAgICBzaXplX3Qgc2l6ZUJlZm9yZSA9IHF1ZXVlLnNpemUoKTsKKyAg
ICBUIHJlc3VsdCA9IHF1ZXVlLmRlcXVldWUoKTsKKyAgICBFWFBFQ1RfRVEoc2l6ZUJlZm9yZSAt
IDEsIHF1ZXVlLnNpemUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworCitURVNUKFdURl9Q
cmlvcml0eVF1ZXVlLCBCYXNpYykKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBudW1FbGVtZW50cyA9
IDEwOworICAgIFByaW9yaXR5UXVldWU8dW5zaWduZWQ+IHF1ZXVlOworCisgICAgRVhQRUNUX0VR
KDBfeiwgcXVldWUuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRShxdWV1ZS5pc0VtcHR5KCkpOwor
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyArK2kpCisgICAgICAg
IGVucXVldWUocXVldWUsIGkpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUVs
ZW1lbnRzOyArK2kpIHsKKyAgICAgICAgRVhQRUNUX0VRKGksIHF1ZXVlLnBlZWsoKSk7CisgICAg
ICAgIEVYUEVDVF9FUShpLCBkZXF1ZXVlKHF1ZXVlKSk7CisgICAgICAgIEVYUEVDVF9FUShudW1F
bGVtZW50cyAtIGkgLSAxLCBxdWV1ZS5zaXplKCkpOworICAgIH0KKworICAgIEVYUEVDVF9UUlVF
KHF1ZXVlLmlzRW1wdHkoKSk7Cit9CisKK1RFU1QoV1RGX1ByaW9yaXR5UXVldWUsIEN1c3RvbVBy
aW9yaXR5RnVuY3Rpb24pCit7CisgICAgY29uc3QgdW5zaWduZWQgbnVtRWxlbWVudHMgPSAxMDsK
KyAgICBQcmlvcml0eVF1ZXVlPHVuc2lnbmVkLCBzdGQ6OmdyZWF0ZXI8dW5zaWduZWQ+PiBxdWV1
ZTsKKworICAgIEVYUEVDVF9FUSgwX3osIHF1ZXVlLnNpemUoKSk7CisgICAgRVhQRUNUX1RSVUUo
cXVldWUuaXNFbXB0eSgpKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1FbGVt
ZW50czsgKytpKSB7CisgICAgICAgIGVucXVldWUocXVldWUsIGkpOworICAgICAgICBFWFBFQ1Rf
RVEoaSArIDEsIHF1ZXVlLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShxdWV1ZS5pc0Vt
cHR5KCkpOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1FbGVtZW50
czsgKytpKSB7CisgICAgICAgIEVYUEVDVF9FUShudW1FbGVtZW50cyAtIGkgLSAxLCBxdWV1ZS5w
ZWVrKCkpOworICAgICAgICBFWFBFQ1RfRVEobnVtRWxlbWVudHMgLSBpIC0gMSwgZGVxdWV1ZShx
dWV1ZSkpOworICAgICAgICBFWFBFQ1RfRVEobnVtRWxlbWVudHMgLSBpIC0gMSwgcXVldWUuc2l6
ZSgpKTsKKyAgICB9CisKKyAgICBFWFBFQ1RfVFJVRShxdWV1ZS5pc0VtcHR5KCkpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBDb21wYXJhdG9yPgorc3RydWN0IENvbXBhcmVNb3ZlIHsKKyAgICBi
b29sIG9wZXJhdG9yKCkoY29uc3QgTW92ZU9ubHkmIG0xLCBjb25zdCBNb3ZlT25seSYgbTIpIGNv
bnN0IHsgcmV0dXJuIGNvbXBhcmF0b3IobTEudmFsdWUoKSwgbTIudmFsdWUoKSk7IH0KKworICAg
IENvbXBhcmF0b3IgY29tcGFyYXRvcjsKK307CisKK1RFU1QoV1RGX1ByaW9yaXR5UXVldWUsIE1v
dmVPbmx5KQoreworICAgIFByaW9yaXR5UXVldWU8TW92ZU9ubHksIENvbXBhcmVNb3ZlPHN0ZDo6
bGVzczx1bnNpZ25lZD4+PiBxdWV1ZTsKKworICAgIFZlY3Rvcjx1bnNpZ25lZD4gdmFsdWVzID0g
eyAyMywgNTQsIDQsIDgsIDEsIDIsIDQsIDAgfTsKKyAgICBWZWN0b3I8dW5zaWduZWQ+IHNvcnRl
ZCA9IHZhbHVlczsKKyAgICBzdGQ6OnNvcnQoc29ydGVkLmJlZ2luKCksIHNvcnRlZC5lbmQoKSk7
CisKKyAgICBmb3IgKGF1dG8gdmFsdWUgOiB2YWx1ZXMpCisgICAgICAgIHF1ZXVlLmVucXVldWUo
TW92ZU9ubHkodmFsdWUpKTsKKworICAgIGZvciAoYXV0byBzb3J0ZWRWYWx1ZSA6IHNvcnRlZCkg
eworICAgICAgICBhdXRvIHZhbHVlID0gcXVldWUuZGVxdWV1ZSgpOworICAgICAgICBFWFBFQ1Rf
RVEoc29ydGVkVmFsdWUsIHZhbHVlLnZhbHVlKCkpOworICAgIH0KK30KKworVEVTVChXVEZfUHJp
b3JpdHlRdWV1ZSwgRGVjcmVhc2VLZXkpCit7CisgICAgUHJpb3JpdHlRdWV1ZTxNb3ZlT25seSwg
Q29tcGFyZU1vdmU8c3RkOjpsZXNzPHVuc2lnbmVkPj4+IHF1ZXVlOworCisgICAgVmVjdG9yPHVu
c2lnbmVkPiB2YWx1ZXMgPSB7IDIzLCA1NCwgNCwgOCwgMSwgMiwgNCwgMCB9OworICAgIFZlY3Rv
cjx1bnNpZ25lZD4gc29ydGVkID0gdmFsdWVzOworICAgIHNvcnRlZFszXSA9IDEyOworICAgIHN0
ZDo6c29ydChzb3J0ZWQuYmVnaW4oKSwgc29ydGVkLmVuZCgpKTsKKworICAgIGZvciAoYXV0byB2
YWx1ZSA6IHZhbHVlcykKKyAgICAgICAgcXVldWUuZW5xdWV1ZShNb3ZlT25seSh2YWx1ZSkpOwor
CisgICAgcXVldWUuZGVjcmVhc2VLZXkoW10gKE1vdmVPbmx5JiBtKSB7CisgICAgICAgIGlmICht
LnZhbHVlKCkgPT0gOCkgeworICAgICAgICAgICAgbSA9IE1vdmVPbmx5KDEyKTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
KTsKKworICAgIGZvciAoYXV0byBzb3J0ZWRWYWx1ZSA6IHNvcnRlZCkgeworICAgICAgICBhdXRv
IHZhbHVlID0gcXVldWUuZGVxdWV1ZSgpOworICAgICAgICBFWFBFQ1RfRVEoc29ydGVkVmFsdWUs
IHZhbHVlLnZhbHVlKCkpOworICAgIH0KK30KKworVEVTVChXVEZfUHJpb3JpdHlRdWV1ZSwgSW5j
cmVhc2VLZXkpCit7CisgICAgUHJpb3JpdHlRdWV1ZTxNb3ZlT25seSwgQ29tcGFyZU1vdmU8c3Rk
OjpncmVhdGVyPHVuc2lnbmVkPj4+IHF1ZXVlOworCisgICAgVmVjdG9yPHVuc2lnbmVkPiB2YWx1
ZXMgPSB7IDIzLCA1NCwgNCwgOCwgMSwgMiwgNCwgMCB9OworICAgIFZlY3Rvcjx1bnNpZ25lZD4g
c29ydGVkID0gdmFsdWVzOworICAgIHNvcnRlZFszXSA9IDEyOworICAgIHN0ZDo6c29ydChzb3J0
ZWQuYmVnaW4oKSwgc29ydGVkLmVuZCgpLCBzdGQ6OmdyZWF0ZXI8dW5zaWduZWQ+KCkpOworCisg
ICAgZm9yIChhdXRvIHZhbHVlIDogdmFsdWVzKQorICAgICAgICBxdWV1ZS5lbnF1ZXVlKE1vdmVP
bmx5KHZhbHVlKSk7CisKKyAgICBxdWV1ZS5pbmNyZWFzZUtleShbXSAoTW92ZU9ubHkmIG0pIHsK
KyAgICAgICAgaWYgKG0udmFsdWUoKSA9PSA4KSB7CisgICAgICAgICAgICBtID0gTW92ZU9ubHko
MTIpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0pOworCisgICAgZm9yIChhdXRvIHNvcnRlZFZhbHVlIDogc29ydGVkKSB7
CisgICAgICAgIGF1dG8gdmFsdWUgPSBxdWV1ZS5kZXF1ZXVlKCk7CisgICAgICAgIEVYUEVDVF9F
UShzb3J0ZWRWYWx1ZSwgdmFsdWUudmFsdWUoKSk7CisgICAgfQorfQorCitURVNUKFdURl9Qcmlv
cml0eVF1ZXVlLCBJdGVyYXRpb24pCit7CisgICAgUHJpb3JpdHlRdWV1ZTxNb3ZlT25seSwgQ29t
cGFyZU1vdmU8c3RkOjpncmVhdGVyPHVuc2lnbmVkPj4+IHF1ZXVlOworCisgICAgVmVjdG9yPHVu
c2lnbmVkPiB2YWx1ZXMgPSB7IDIzLCA1NCwgNCwgOCwgMSwgMiwgNCwgMCB9OworICAgIFZlY3Rv
cjx1bnNpZ25lZD4gc29ydGVkID0gdmFsdWVzOworICAgIHNvcnRlZFszXSA9IDEyOworICAgIHN0
ZDo6c29ydChzb3J0ZWQuYmVnaW4oKSwgc29ydGVkLmVuZCgpLCBzdGQ6OmdyZWF0ZXI8dW5zaWdu
ZWQ+KCkpOworCisgICAgZm9yIChhdXRvIHZhbHVlIDogdmFsdWVzKQorICAgICAgICBxdWV1ZS5l
bnF1ZXVlKE1vdmVPbmx5KHZhbHVlKSk7CisKKyAgICB2YWx1ZXMuY2xlYXIoKTsKKyAgICBmb3Ig
KGF1dG8mIGVsZW1lbnQgOiBxdWV1ZSkKKyAgICAgICAgdmFsdWVzLmFwcGVuZChlbGVtbnQudmFs
dWUoKSk7CisKKyAgICBzdGQ6OnNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5lbmQoKSwgc3Rk
OjpncmVhdGVyPHVuc2lnbmVkPigpKTsKKyAgICBBU1NFUlRfRVEodmFsdWVzLnNpemUoKSA9PSBz
b3J0ZWQuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSAsIHZhbHVlcy5zaXplKCks
ICsraSkKKyAgICAgICAgRVhQRUNUX0VRKHNvcnRlZFtpXSwgdmFsdWVzW2ldKTsKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306453</attachid>
            <date>2017-04-06 18:26:34 -0700</date>
            <delta_ts>2017-04-07 12:56:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-170579-20170406182633.patch</filename>
            <type>text/plain</type>
            <size>36681</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE0OTcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
MmIzMzU5NmFhYmI4ZTQ3YTdjYTJkOTEwNzA0YmVjOTExNTc1ZjdhLi5kMGMyZGJjZmI2Y2NkYWVl
ZTA1MDVkZTMxMzllNTY3ZGNiNmZmMDIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMCBAQAorMjAxNy0wNC0wNiAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBBZGQgYSBQcmlvcml0eVF1ZXVlIGNsYXNzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA1NzkKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgV2FzbTo6V29ya2xpc3Qg
dG8gdXNlIFdURjo6UHJpb3JpdHlRdWV1ZS4KKworICAgICAgICAqIHdhc20vV2FzbVdvcmtsaXN0
LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OmVucXVldWUpOgorICAgICAgICAo
SlNDOjpXYXNtOjpXb3JrbGlzdDo6Y29tcGxldGVQbGFuU3luY2hyb25vdXNseSk6CisgICAgICAg
IChKU0M6Oldhc206OldvcmtsaXN0OjpzdG9wQWxsUGxhbnNGb3JWTSk6CisgICAgICAgIChKU0M6
Oldhc206OldvcmtsaXN0Ojp+V29ya2xpc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpXb3JrbGlz
dDo6aXRlcmF0ZSk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XYXNtV29ya2xpc3QuaDoKKwog
MjAxNy0wNC0wNSAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KIAogICAg
ICAgICBXZWJBc3NlbWJseTogUGxhbnMgc2hvdWxkIGJlIGFibGUgdG8gaGF2ZSBtb3JlIHRoYW4g
b25lIGNvbXBsZXRpb24gdGFzay4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIv
U291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggMTRlMDkzNjc0ZjJjODgwOTg0MjcwZmQxNDk1ZmMw
MTY4NWU0YjdmOS4uZjM1NTY1NDM3NWE3M2M4NTNjNjEwMzg4MjBmNjBmZWE5NDYxNDM2NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
QEAgLTEsMyArMSw0MSBAQAorMjAxNy0wNC0wNiAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVy
QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYSBQcmlvcml0eVF1ZXVlIGNsYXNzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA1NzkKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMg
YSBuZXcgUHJpb3JpdHlRdWV1ZSBjbGFzcyB0aGF0IGlzIGJhY2tlZCBieQorICAgICAgICBXVEY6
OlZlY3Rvci4gIEl0IGFsc28gaGFzIGEgbnVtYmVyIG9mIG90aGVyIG5pY2V0aWVzIHN1Y2ggYXMg
YmVpbmcKKyAgICAgICAgYWJsZSB0byBpdGVyYXRlIHRoZSBxdWV1ZSBhbmQgaW5jcmVhc2Ugb3Ig
ZGVjcmVhc2Uga2V5cy4KKworICAgICAgICBPbmUgbm90ZSBpcyB0aGF0IGluY3JlYXNlS2V5IGFu
ZCBkZWNyZWFzZUtleSBhcmUgTyhuKSByYXRoZXIgdGhhbgorICAgICAgICBPKGxvZyhuKSkuICBU
cmFkaXRpb25hbGx5LCB0aGUgbG9va3VwIG9mIHRoZSBrZXkgaXMgZG9uZSB3aXRoIGEKKyAgICAg
ICAgaGFzaCBtYXAgYnV0IHRoYXQncyBub3QgZmVhc2libGUgaGVyZS4gIFRoaXMgaXMgYmVjYXVz
ZSB1bmxlc3MgdGhlCisgICAgICAgIHF1ZXVlJ3MgZWxlbWVudCB0eXBlIGlzIGEgcG9pbnRlciB0
aGVyZSBpcyBubyBnb29kIHdheSBtYWludGFpbiBhCisgICAgICAgIHBlcnNpc3RlbnQgcmVmZXJl
bmNlIHRvIGV2ZXJ5IGVudHJ5IGluIHRoZSBxdWV1ZSB3aGlsZSB3ZSBzaWZ0LgorICAgICAgICBU
aGUgb25seSB3YXkgdG8gdXBkYXRlIHRoZSBsb2NhdGlvbiBvZiBhbiBlbnRyeSBpcyB0byBkbyBh
IGhhc2gKKyAgICAgICAgdGFibGUgbG9va3VwIHdpdGggdGhlIGVudHJ5J3MgaGFzaCBidXQgdGhp
cyBpcyBwcm9iYWJseSBtb3JlCisgICAgICAgIGV4cGVuc2l2ZSB0aGFuIGp1c3QgZG9pbmcgYSBs
aW5lYXIgc2VhcmNoLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogd3RmL1ByaW9yaXR5UXVldWUuaDogQWRkZWQuCisgICAgICAgIChXVEY6OlBy
aW9yaXR5UXVldWU6OnNpemUpOgorICAgICAgICAoV1RGOjpQcmlvcml0eVF1ZXVlOjppc0VtcHR5
KToKKyAgICAgICAgKFdURjo6UHJpb3JpdHlRdWV1ZTo6ZW5xdWV1ZSk6CisgICAgICAgIChXVEY6
OlByaW9yaXR5UXVldWU6OnBlZWspOgorICAgICAgICAoV1RGOjpQcmlvcml0eVF1ZXVlOjpkZXF1
ZXVlKToKKyAgICAgICAgKFdURjo6UHJpb3JpdHlRdWV1ZTo6ZGVjcmVhc2VLZXkpOgorICAgICAg
ICAoV1RGOjpQcmlvcml0eVF1ZXVlOjppbmNyZWFzZUtleSk6CisgICAgICAgIChXVEY6OlByaW9y
aXR5UXVldWU6OmJlZ2luKToKKyAgICAgICAgKFdURjo6UHJpb3JpdHlRdWV1ZTo6ZW5kKToKKyAg
ICAgICAgKFdURjo6UHJpb3JpdHlRdWV1ZTo6aXNWYWxpZEhlYXApOgorICAgICAgICAoV1RGOjpQ
cmlvcml0eVF1ZXVlOjpwYXJlbnRPZik6CisgICAgICAgIChXVEY6OlByaW9yaXR5UXVldWU6Omxl
ZnRDaGlsZE9mKToKKyAgICAgICAgKFdURjo6UHJpb3JpdHlRdWV1ZTo6cmlnaHRDaGlsZE9mKToK
KyAgICAgICAgKFdURjo6UHJpb3JpdHlRdWV1ZTo6c2lmdFVwKToKKyAgICAgICAgKFdURjo6UHJp
b3JpdHlRdWV1ZTo6c2lmdERvd24pOgorCiAyMDE3LTA0LTA1ICBZdXN1a2UgU3V6dWtpICA8dXRh
dGFuZS50ZWFAZ21haWwuY29tPgogCiAgICAgICAgIFtKU0NdIFN1cHByZXNzIHdhcm5pbmdzIGlu
IEdDQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5jcHAKaW5kZXgg
ZmRhMDZhNzMzZGJmMjA2OTE2OWMwZmIxNGY5ZDA1Y2NmY2JhMzFmMS4uNzExMDU2OTMzNjFmYWNj
ZGM2MTRjYWM4ZWRhYTU1ZTdkMTc3M2E2YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtV29ya2xpc3QuY3BwCkBAIC02NywxNiArNjcsMTUgQEAgcHJvdGVjdGVkOgogICAgICAg
ICBhdXRvJiBxdWV1ZSA9IHdvcmtsaXN0Lm1fcXVldWU7CiAgICAgICAgIHN5bmNocm9uaXplLm5v
dGlmeUFsbCgpOwogCi0gICAgICAgIHdoaWxlICghcXVldWUuZW1wdHkoKSkgewotCi0gICAgICAg
ICAgICBQcmlvcml0eSBwcmlvcml0eSA9IHF1ZXVlLnRvcCgpLnByaW9yaXR5OworICAgICAgICB3
aGlsZSAoIXF1ZXVlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgUHJpb3JpdHkgcHJpb3JpdHkg
PSBxdWV1ZS5wZWVrKCkucHJpb3JpdHk7CiAgICAgICAgICAgICBpZiAocHJpb3JpdHkgPT0gV29y
a2xpc3Q6OlByaW9yaXR5OjpTaHV0ZG93bikKICAgICAgICAgICAgICAgICByZXR1cm4gUG9sbFJl
c3VsdDo6U3RvcDsKIAotICAgICAgICAgICAgZWxlbWVudCA9IHF1ZXVlLnRvcCgpOworICAgICAg
ICAgICAgZWxlbWVudCA9IHF1ZXVlLnBlZWsoKTsKICAgICAgICAgICAgIC8vIE9ubHkgb25lIHRo
cmVhZCBzaG91bGQgdmFsaWRhdGUvcHJlcGFyZS4KLSAgICAgICAgICAgIGlmICghcXVldWUudG9w
KCkucGxhbi0+aGFzQmVlblByZXBhcmVkKCkpIHsKLSAgICAgICAgICAgICAgICBxdWV1ZS5wb3Ao
KTsKKyAgICAgICAgICAgIGlmICghcXVldWUucGVlaygpLnBsYW4tPmhhc0JlZW5QcmVwYXJlZCgp
KSB7CisgICAgICAgICAgICAgICAgcXVldWUuZGVxdWV1ZSgpOwogICAgICAgICAgICAgICAgIHJl
dHVybiBQb2xsUmVzdWx0OjpXb3JrOwogICAgICAgICAgICAgfQogCkBAIC04NCw3ICs4Myw3IEBA
IHByb3RlY3RlZDoKICAgICAgICAgICAgICAgICByZXR1cm4gUG9sbFJlc3VsdDo6V29yazsKIAog
ICAgICAgICAgICAgLy8gVGhlcmUgbXVzdCBiZSBhIGFub3RoZXIgdGhyZWFkIGxpbmtpbmcgdGhp
cyBwbGFuIHNvIHdlIGNhbiBkZXF1ZSBhbmQgc2VlIGlmIHRoZXJlIGlzIG90aGVyIHdvcmsuCi0g
ICAgICAgICAgICBxdWV1ZS5wb3AoKTsKKyAgICAgICAgICAgIHF1ZXVlLmRlcXVldWUoKTsKICAg
ICAgICAgICAgIGVsZW1lbnQgPSBRdWV1ZUVsZW1lbnQoKTsKICAgICAgICAgfQogICAgICAgICBy
ZXR1cm4gUG9sbFJlc3VsdDo6V2FpdDsKQEAgLTEwOCwyMiArMTA3LDEyIEBAIHByb3RlY3RlZDoK
IAogICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoKndvcmtsaXN0Lm1fbG9jayk7CiAgICAg
ICAgICAgICBlbGVtZW50LnNldFRvTmV4dFByaW9yaXR5KCk7Ci0gICAgICAgICAgICB3b3JrbGlz
dC5tX3F1ZXVlLnB1c2goZWxlbWVudCk7CisgICAgICAgICAgICB3b3JrbGlzdC5tX3F1ZXVlLmVu
cXVldWUoV1RGTW92ZShlbGVtZW50KSk7CiAgICAgICAgICAgICB3b3JrbGlzdC5tX3BsYW5FbnF1
ZXVlZC0+bm90aWZ5QWxsKGxvY2tlcik7CisgICAgICAgICAgICBlbGVtZW50ID0gd29ya2xpc3Qu
bV9xdWV1ZS5wZWVrKCk7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBGSVhNRTogdGhpcyBzaG91
bGQgY2hlY2sgaW4gb2NjYXNpb25hbGx5IHRvIHNlZSBpZiB0aGVyZSBhcmUgbmV3LCBoaWdoZXIg
cHJpb3JpdHkgZS5nLiBzeW5jaHJvbm91cywgcGxhbnMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4KLSAg
ICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDIwNAog
ICAgICAgICBwbGFuLT5jb21waWxlRnVuY3Rpb25zKFBsYW46OlBhcnRpYWwpOwotCi0gICAgICAg
IGlmICghcGxhbi0+aGFzV29yaygpKSB7Ci0gICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcigq
d29ya2xpc3QubV9sb2NrKTsKLSAgICAgICAgICAgIGF1dG8gcXVldWUgPSB3b3JrbGlzdC5tX3F1
ZXVlOwotICAgICAgICAgICAgLy8gQW5vdGhlciB0aHJlYWQgbWF5IGhhdmUgcmVtb3ZlZCBvdXIg
cGxhbiBmcm9tIHRoZSBxdWV1ZSBhbHJlYWR5LgotICAgICAgICAgICAgaWYgKCFxdWV1ZS5lbXB0
eSgpICYmIHF1ZXVlLnRvcCgpLnBsYW4gPT0gZWxlbWVudC5wbGFuKQotICAgICAgICAgICAgICAg
IHF1ZXVlLnBvcCgpOwotICAgICAgICB9Ci0KICAgICAgICAgcmV0dXJuIGNvbXBsZXRlKCk7CiAg
ICAgfQogCkBAIC0xNDgsNDcgKzEzNywxNyBAQCB2b2lkIFdvcmtsaXN0OjpRdWV1ZUVsZW1lbnQ6
OnNldFRvTmV4dFByaW9yaXR5KCkKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
fQogCi1lbnVtIGNsYXNzIEl0ZXJhdGVSZXN1bHQgeyBVcGRhdGVBbmRCcmVhaywgRHJvcEFuZENv
bnRpbnVlLCBDb250aW51ZSB9OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotdm9pZCBX
b3JrbGlzdDo6aXRlcmF0ZShjb25zdCBBYnN0cmFjdExvY2tlciYsIGNvbnN0IEZ1bmN0b3ImIGZ1
bmMpCi17Ci0gICAgLy8gc3RkOjpwcmlvcml0eV9xdWV1ZSBkb2VzIG5vdCBoYXZlIGFuIGl0ZXJh
dG9yIG9yIGRlY3JlYXNlX2tleS4uLiA6KCBXaGlsZSB0aGlzIGlzIGdyb3NzLCB0aGlzIGZ1bmN0
aW9uCi0gICAgLy8gc2hvdWxkbid0IGJlIGNhbGxlZCB2ZXJ5IG9mdGVuIGFuZCB0aGUgcXVldWUg
c2hvdWxkIGJlIHNtYWxsLgotICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgaGF2ZSBvdXIgb3duIFBy
aW9yaXR5UXVldWUgdGhhdCBkb2Vzbid0IHN1Y2suCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDE0NQotICAgIHN0ZDo6dmVjdG9yPFF1ZXVlRWxlbWVu
dD4gZWxlbWVudHM7Ci0gICAgd2hpbGUgKCFtX3F1ZXVlLmVtcHR5KCkpIHsKLSAgICAgICAgUXVl
dWVFbGVtZW50IGVsZW1lbnQgPSBtX3F1ZXVlLnRvcCgpOwotICAgICAgICBtX3F1ZXVlLnBvcCgp
OwotICAgICAgICBJdGVyYXRlUmVzdWx0IHJlc3VsdCA9IGZ1bmMoZWxlbWVudCk7Ci0gICAgICAg
IGlmIChyZXN1bHQgPT0gSXRlcmF0ZVJlc3VsdDo6VXBkYXRlQW5kQnJlYWspIHsKLSAgICAgICAg
ICAgIGVsZW1lbnRzLnB1c2hfYmFjayhlbGVtZW50KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKHJlc3VsdCA9PSBJdGVyYXRlUmVzdWx0OjpDb250aW51ZSkK
LSAgICAgICAgICAgIGVsZW1lbnRzLnB1c2hfYmFjayhlbGVtZW50KTsKLSAgICAgICAgY29udGlu
dWU7Ci0gICAgfQotICAgIAotICAgIGZvciAoYXV0byBlbGVtZW50IDogZWxlbWVudHMpCi0gICAg
ICAgIG1fcXVldWUucHVzaChlbGVtZW50KTsKLX0KLQogdm9pZCBXb3JrbGlzdDo6ZW5xdWV1ZShS
ZWY8UGxhbj4gcGxhbikKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKIAogICAg
IGlmICghQVNTRVJUX0RJU0FCTEVEKSB7Ci0gICAgICAgIGl0ZXJhdGUobG9ja2VyLCBbJl0gKFF1
ZXVlRWxlbWVudCYgZWxlbWVudCkgeworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGVsZW1lbnQg
OiBtX3F1ZXVlKQogICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChlbGVtZW50LCBlbGVtZW50LnBs
YW4uZ2V0KCkgIT0gJnBsYW4uZ2V0KCkpOwotICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGVSZXN1
bHQ6OkNvbnRpbnVlOwotICAgICAgICB9KTsKICAgICB9CiAKICAgICBkYXRhTG9nTG5JZih2ZXJi
b3NlLCAiRW5xdWV1aW5nIHBsYW4iKTsKLSAgICBtX3F1ZXVlLnB1c2goeyBQcmlvcml0eTo6UHJl
cGFyYXRpb24sIG5leHRUaWNrZXQoKSwgIFdURk1vdmUocGxhbikgfSk7CisgICAgbV9xdWV1ZS5l
bnF1ZXVlKHsgUHJpb3JpdHk6OlByZXBhcmF0aW9uLCBuZXh0VGlja2V0KCksICBXVEZNb3ZlKHBs
YW4pIH0pOwogICAgIG1fcGxhbkVucXVldWVkLT5ub3RpZnlPbmUobG9ja2VyKTsKIH0KIApAQCAt
MTk2LDEyICsxNTUsMTIgQEAgdm9pZCBXb3JrbGlzdDo6Y29tcGxldGVQbGFuU3luY2hyb25vdXNs
eShQbGFuJiBwbGFuKQogewogICAgIHsKICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9j
ayk7Ci0gICAgICAgIGl0ZXJhdGUobG9ja2VyLCBbJl0gKFF1ZXVlRWxlbWVudCYgZWxlbWVudCkg
eworICAgICAgICBtX3F1ZXVlLmRlY3JlYXNlS2V5KFsmXSAoUXVldWVFbGVtZW50JiBlbGVtZW50
KSB7CiAgICAgICAgICAgICBpZiAoZWxlbWVudC5wbGFuID09ICZwbGFuKSB7CiAgICAgICAgICAg
ICAgICAgZWxlbWVudC5wcmlvcml0eSA9IFByaW9yaXR5OjpTeW5jaHJvbm91czsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gSXRlcmF0ZVJlc3VsdDo6VXBkYXRlQW5kQnJlYWs7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gSXRl
cmF0ZVJlc3VsdDo6Q29udGludWU7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IH0pOwogCiAgICAgICAgIGZvciAoYXV0byYgdGhyZWFkIDogbV90aHJlYWRzKSB7CkBAIC0yMTYs
MTcgKzE3NSwyMyBAQCB2b2lkIFdvcmtsaXN0Ojpjb21wbGV0ZVBsYW5TeW5jaHJvbm91c2x5KFBs
YW4mIHBsYW4pCiB2b2lkIFdvcmtsaXN0OjpzdG9wQWxsUGxhbnNGb3JWTShWTSYgdm0pCiB7CiAg
ICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7Ci0gICAgaXRlcmF0ZShsb2NrZXIsIFsmXSAo
UXVldWVFbGVtZW50JiBlbGVtZW50KSB7CisgICAgVmVjdG9yPFF1ZXVlRWxlbWVudD4gZWxlbWVu
dHM7CisgICAgd2hpbGUgKCFtX3F1ZXVlLmlzRW1wdHkoKSkgeworICAgICAgICBRdWV1ZUVsZW1l
bnQgZWxlbWVudCA9IG1fcXVldWUuZGVxdWV1ZSgpOwogICAgICAgICBpZiAoJmVsZW1lbnQucGxh
bi0+dm0oKSA9PSAmdm0pIHsKICAgICAgICAgICAgIGVsZW1lbnQucGxhbi0+Y2FuY2VsKCk7Ci0g
ICAgICAgICAgICByZXR1cm4gSXRlcmF0ZVJlc3VsdDo6RHJvcEFuZENvbnRpbnVlOworICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEl0ZXJhdGVSZXN1bHQ6
OkNvbnRpbnVlOwotICAgIH0pOworCisgICAgICAgIGVsZW1lbnRzLmFwcGVuZChXVEZNb3ZlKGVs
ZW1lbnQpKTsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBlbGVtZW50cykKKyAg
ICAgICAgbV9xdWV1ZS5lbnF1ZXVlKFdURk1vdmUoZWxlbWVudCkpOwogCiAgICAgZm9yIChhdXRv
JiB0aHJlYWQgOiBtX3RocmVhZHMpIHsKICAgICAgICAgaWYgKHRocmVhZC0+ZWxlbWVudC5wbGFu
ICYmICZ0aHJlYWQtPmVsZW1lbnQucGxhbi0+dm0oKSA9PSAmdm0pIHsKLSAgICAgICAgICAgIC8v
IFdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhlIGRlYWRsb2NraW5nIHNpbmNlIHRoZSB0
aHJlYWQgY2FuJ3QgYmxvY2sgd2l0aG91dCBjbGVhcmluZyB0aGUgcGxhbiBhbmQgbXVzdCBob2xk
IHRoZSBsb2NrIHRvIGRvIHNvLgorICAgICAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSB0byB3b3Jy
eSBhYm91dCB0aGUgZGVhZGxvY2tpbmcgc2luY2UgdGhlIHRocmVhZCBjYW4ndCBibG9jayB3aXRo
b3V0IGNoZWNraW5nIGZvciBhIG5ldyBwbGFuIGFuZCBtdXN0IGhvbGQgdGhlIGxvY2sgdG8gZG8g
c28uCiAgICAgICAgICAgICB0aHJlYWQtPmVsZW1lbnQucGxhbi0+Y2FuY2VsKCk7CiAgICAgICAg
ICAgICB0aHJlYWQtPnN5bmNocm9uaXplLndhaXQoKm1fbG9jayk7CiAgICAgICAgIH0KQEAgLTI0
OCw3ICsyMTMsNyBAQCBXb3JrbGlzdDo6fldvcmtsaXN0KCkKIHsKICAgICB7CiAgICAgICAgIExv
Y2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOwotICAgICAgICBtX3F1ZXVlLnB1c2goeyBQcmlvcml0
eTo6U2h1dGRvd24sIG5leHRUaWNrZXQoKSwgbnVsbHB0ciB9KTsKKyAgICAgICAgbV9xdWV1ZS5l
bnF1ZXVlKHsgUHJpb3JpdHk6OlNodXRkb3duLCBuZXh0VGlja2V0KCksIG51bGxwdHIgfSk7CiAg
ICAgICAgIG1fcGxhbkVucXVldWVkLT5ub3RpZnlBbGwobG9ja2VyKTsKICAgICB9CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdGhyZWFkcy5zaXplKCk7ICsraSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmgKaW5kZXggYmNhZjFlZjg4ZGY0OTM1OTE1NjVj
ZmNlMDI4OWU3NWUxZWE0YzM3Mi4uOGRiMzA3NzQ0NzI5YWUwYjg3MmE2Zjk0ZGY4ZTFjZTEyZTUy
ZDhmYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmgKQEAgLTMy
LDYgKzMyLDcgQEAKICNpbmNsdWRlIDxxdWV1ZT4KIAogI2luY2x1ZGUgPHd0Zi9BdXRvbWF0aWNU
aHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvUHJpb3JpdHlRdWV1ZS5oPgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC04OCwxNyArODksMTMgQEAgcHJpdmF0ZToK
ICAgICAgICAgfQogICAgIH07CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotICAg
IHZvaWQgaXRlcmF0ZShjb25zdCBBYnN0cmFjdExvY2tlciYsIGNvbnN0IEZ1bmN0b3ImKTsKIAog
ICAgIEJveDxMb2NrPiBtX2xvY2s7CiAgICAgUmVmUHRyPEF1dG9tYXRpY1RocmVhZENvbmRpdGlv
bj4gbV9wbGFuRW5xdWV1ZWQ7CiAgICAgLy8gVGVjaG5pY2FsbHksIHRoaXMgY291bGQgb3ZlcmZs
b3cgYnV0IHRoYXQncyB1bmxpa2VseS4gRXZlbiBpZiBpdCBkaWQsIHdlIHdpbGwganVzdCBjb21w
aWxlIHRoaW5ncyBvZiB0aGUgc2FtZQogICAgIC8vIFByaW9yaXR5IGl0IHRoZSB3cm9uZyBvcmRl
ciwgd2hpY2ggaXNuJ3Qgd3JvbmcsIGp1c3Qgc3Vib3B0aW1hbC4KICAgICBUaWNrZXQgbV9sYXN0
R3JhbnRlZFRpY2tldCB7IDAgfTsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIFdURjo6
VmVjdG9yIGJ1dCBXVEY6OlZlY3RvciBkb2VzIG5vdCBzdXBwb3J0IHJhbmRvbSBhY2Nlc3MgaXRl
cmF0b3IuCi0gICAgc3RkOjpwcmlvcml0eV9xdWV1ZTxRdWV1ZUVsZW1lbnQsIHN0ZDo6dmVjdG9y
PFF1ZXVlRWxlbWVudD4sIENvbXBhcmF0b3I+IG1fcXVldWU7Ci0gICAgSGFzaE1hcDxKU1Byb21p
c2VEZWZlcnJlZCosIFBsYW4qPiBtX2FjdGl2ZVBsYW5zOworICAgIFByaW9yaXR5UXVldWU8UXVl
dWVFbGVtZW50LCBDb21wYXJhdG9yLCAxMD4gbV9xdWV1ZTsKICAgICBWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPFRocmVhZD4+IG1fdGhyZWFkczsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
V1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IGY1OGYxOWI1NmQzM2NiODhhNmZiNDlkNmU1ZjNiNjA5Nzg2
YmMwY2MuLjdjNzc0ZDk3ZGQ0MTg3MmEyMGYzOTljOTZhMzU5MWQ3YTRjYWUxNDkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNl
L1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTQ5LDYgKzE0OSw3IEBACiAJ
CTUxNUY3OTU2MUNGRDNBNjkwMENDRUQ5MyAvKiBDcm9zc1RocmVhZFF1ZXVlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTVGNzk1NTFDRkQzQTY5MDBD
Q0VEOTMgLyogQ3Jvc3NUaHJlYWRRdWV1ZS5oICovOyB9OwogCQk1MjE4MzAxMkM5OUU0NzZBODRF
RUJFQTggLyogU3ltYm9sSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGNzJCQkRCMTA3RkE0MjQ4ODYxNzhCOUUgLyogU3ltYm9sSW1wbC5jcHAg
Ki87IH07CiAJCTUzOUVCMDYzMUQ1NTI4NDIwMEM4MkVGNyAvKiBMRUJEZWNvZGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzlFQjA2MjFENTUyODQy
MDBDODJFRjcgLyogTEVCRGVjb2Rlci5oICovOyB9OworCQk1M0VDMjUzRTFFOTVBRDMwMDAwODMx
QjkgLyogUHJpb3JpdHlRdWV1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTNFQzI1M0MxRTk1QUQzMDAwMDgzMUI5IC8qIFByaW9yaXR5UXVldWUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1NTMwNzFD
QTFDNDA0MjcyMDAzODQ4OTggLyogVGlueUxSVUNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTMwNzFDOTFDNDA0MjcyMDAzODQ4OTggLyogVGlu
eUxSVUNhY2hlLmggKi87IH07CiAJCTU1OTdGODJGMUQ5NEI5OTcwMDY2QkMyMSAvKiBTeW5jaHJv
bml6ZWRGaXhlZFF1ZXVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1NTk3RjgyQzFEOTRCOTk3MDA2NkJDMjEgLyogU3luY2hyb25pemVkRml4ZWRRdWV1
ZS5oICovOyB9OwogCQk1QzdDODhENDFEMEEzQTBBMDA5RDJGNkQgLyogVW5pcXVlUmVmLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzdDODhEMzFEMEEz
QTBBMDA5RDJGNkQgLyogVW5pcXVlUmVmLmggKi87IH07CkBAIC0xNzgsNiArMTc5LDcgQEAKIAkJ
OTc0Q0ZDOEUxNkE0RjMyNzAwNkQ1NDA0IC8qIFdlYWtQdHIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3NENGQzhEMTZBNEYzMjcwMDZENTQwNCAvKiBX
ZWFrUHRyLmggKi87IH07CiAJCTlCQzcwRjA1MTc2QzM3OUQwMDEwMURFQyAvKiBBdG9taWNTdHJp
bmdUYWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5QkM3MEYwNDE3NkMzNzlEMDAxMDFERUMgLyogQXRvbWljU3RyaW5nVGFibGUuY3BwICovOyB9
OwogCQk5QkQ4RjQwQjE3NkMyQjQ3MDAwMkQ4NjUgLyogQXRvbWljU3RyaW5nVGFibGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCRDhGNDBBMTc2QzJB
RDgwMDAyRDg2NSAvKiBBdG9taWNTdHJpbmdUYWJsZS5oICovOyB9OworCQlBM0I3MjVFQzk4NzQ0
NkFEOTNGMUE0NDAgLyogUmFuZG9tRGV2aWNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM4RjU5N0NBMkE1NzQxN0ZCQUI5MkZENiAvKiBSYW5kb21E
ZXZpY2UuY3BwICovOyB9OwogCQlBNTA5OEIwMDFDMTY5RTA3MDAwODc3OTcgLyogU2FuZGJveFNQ
SS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTUwOThB
RkYxQzE2OUUwNzAwMDg3Nzk3IC8qIFNhbmRib3hTUEkuaCAqLzsgfTsKIAkJQTUwOThCMDIxQzE2
QTRGOTAwMDg3Nzk3IC8qIFNlY3VyaXR5U1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBNTA5OEIwMTFDMTZBNEY5MDAwODc3OTcgLyogU2VjdXJpdHlT
UEkuaCAqLzsgfTsKIAkJQTU2MUYzMTAxREYyNjQyMTAwRkY2NzVEIC8qIERlcHJlY2F0ZWRPcHRp
b25hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTU2
MUYzMEYxREYyNjQyMTAwRkY2NzVEIC8qIERlcHJlY2F0ZWRPcHRpb25hbC5oICovOyB9OwpAQCAt
MzgzLDEzICszODUsMTIgQEAKIAkJRTRBMEFEM0ExQTk2MjQ1NTAwNTM2REY2IC8qIFdvcmtRdWV1
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRBMEFE
MzgxQTk2MjQ1NTAwNTM2REY2IC8qIFdvcmtRdWV1ZS5oICovOyB9OwogCQlFNEEwQUQzRDFBOTYy
NTNDMDA1MzZERjYgLyogV29ya1F1ZXVlQ29jb2EuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRBMEFEM0MxQTk2MjUzQzAwNTM2REY2IC8qIFdvcmtR
dWV1ZUNvY29hLmNwcCAqLzsgfTsKIAkJRUI5NUUxRjAxNjFBNzI0MTAwODlBMkY1IC8qIEJ5dGVP
cmRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRUI5
NUUxRUYxNjFBNzI0MTAwODlBMkY1IC8qIEJ5dGVPcmRlci5oICovOyB9OworCQlGQzZFQzJCRjIw
Rjg0OTk2OUM2QTVCRTEgLyogUmFuZG9tRGV2aWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNEYxQjI0ODYxOUY0MTIyOTZEMUMxOUMgLyogUmFuZG9t
RGV2aWNlLmggKi87IH07CiAJCUZFODIyNTMxMUIyQTFFNUIwMEJBNjhGRCAvKiBOYWtlZFB0ci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU4MjI1MzAx
QjJBMUU1QjAwQkE2OEZEIC8qIE5ha2VkUHRyLmggKi87IH07CiAJCUZFODZBODc1MUU1OTQ0MDIw
MDExMUJCRiAvKiBGb3JiaWRIZWFwQWxsb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU4NkE4NzQxRTU5NDQwMjAwMTExQkJGIC8qIEZvcmJp
ZEhlYXBBbGxvY2F0aW9uLmggKi87IH07CiAJCUZFODkyNUIwMUQwMERBRUMwMDQ2OTA3RSAvKiBJ
bmRlbnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkU4OTI1QUYxRDAwREFFQzAwNDY5MDdFIC8qIEluZGVudGVyLmggKi87IH07CiAJCUZFREFDRDNE
MTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0YXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFREFDRDNCMTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFj
a1N0YXRzLmNwcCAqLzsgfTsKIAkJRkVEQUNEM0UxNjMwRjgzRjAwQzY5NjM0IC8qIFN0YWNrU3Rh
dHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFREFD
RDNDMTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0YXRzLmggKi87IH07Ci0JCUZDNkVDMkJGMjBG
ODQ5OTY5QzZBNUJFMSAvKiBSYW5kb21EZXZpY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI0RjFCMjQ4NjE5RjQxMjI5NkQxQzE5QyAvKiBSYW5kb21E
ZXZpY2UuaCAqLzsgfTsKLQkJQTNCNzI1RUM5ODc0NDZBRDkzRjFBNDQwIC8qIFJhbmRvbURldmlj
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDOEY1
OTdDQTJBNTc0MTdGQkFCOTJGRDYgLyogUmFuZG9tRGV2aWNlLmNwcCAqLzsgfTsKIC8qIEVuZCBQ
QlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhDb250YWluZXJJdGVtUHJveHkg
c2VjdGlvbiAqLwpAQCAtNTI2LDYgKzUyNyw3IEBACiAJCTFDQ0RCMTUxMUU1NjZCQzUwMDZDNzND
MCAvKiBDRlN0cmluZ1NQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDRlN0
cmluZ1NQSS5oOyBwYXRoID0gY2YvQ0ZTdHJpbmdTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMUZBNDdDODgxNTI1MDJEQTAwNTY4RDFCIC8qIFdlYkNvcmVUaHJlYWQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViQ29yZVRocmVhZC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFGQTQ3Qzg5MTUyNTAyREEwMDU2OEQxQiAvKiBX
ZWJDb3JlVGhyZWFkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVU
aHJlYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjRGMUIyNDg2MTlGNDEyMjk2
RDFDMTlDIC8qIFJhbmRvbURldmljZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSYW5kb21EZXZpY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjYxNDdCMDgx
NUREQ0NEQzAwRERCOTA3IC8qIEludGVnZXJUb1N0cmluZ0NvbnZlcnNpb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNjI5OUI2RDE3QTlFNUI4MDBBREVCRTUgLyogUmVm
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlZi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkyNjg0RDQzNTFDMDAwRDQwMDA4MUQ2NjMgLyogSW5kZXhTcGFyc2VT
ZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5kZXhTcGFyc2VTZXQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU0Miw2ICs1NDQsNyBAQAogCQk1MTVGNzk0
RDFDRkM5RjRBMDBDQ0VEOTMgLyogQ3Jvc3NUaHJlYWRUYXNrLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENyb3NzVGhyZWFkVGFzay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MTVGNzk1NTFDRkQzQTY5MDBDQ0VEOTMgLyogQ3Jvc3NUaHJlYWRRdWV1ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDcm9zc1RocmVhZFF1ZXVlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzOUVCMDYyMUQ1NTI4NDIwMEM4MkVGNyAvKiBMRUJE
ZWNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExFQkRlY29kZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTNFQzI1M0MxRTk1QUQzMDAwMDgzMUI5IC8q
IFByaW9yaXR5UXVldWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJpb3Jp
dHlRdWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NTMwNzFDOTFDNDA0Mjcy
MDAzODQ4OTggLyogVGlueUxSVUNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFRpbnlMUlVDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NTk3Rjgy
QzFEOTRCOTk3MDA2NkJDMjEgLyogU3luY2hyb25pemVkRml4ZWRRdWV1ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVCNDMzODNBNUQwQjQ2M0M5NDMzRDkzMyAvKiBJbmRleE1h
cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmRleE1hcC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzYwLDYgKzc2Myw3IEBACiAJCUFERjJDRTY1MUUzOUYx
MDYwMDY4ODlEQiAvKiBNZW1vcnlGb290cHJpbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gTWVtb3J5Rm9vdHByaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQjM4RkQ3QkMxNjg5NTNFODAwNjVDOTY5IC8qIEZlYXR1cmVEZWZpbmVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZlYXR1cmVEZWZpbmVzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM0RjhBOTM2MTlDNjVFQjQwMEIyQjE1RCAvKiBTdG9wd2F0
Y2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcHdhdGNoLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM4RjU5N0NBMkE1NzQxN0ZCQUI5MkZENiAvKiBSYW5k
b21EZXZpY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmFuZG9t
RGV2aWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q1NDk3QUExNTg1N0Qw
MzAwQjVCQzMwIC8qIE1lZGlhVGltZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBNZWRpYVRpbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDU0
OTdBQjE1ODU3RDAzMDBCNUJDMzAgLyogTWVkaWFUaW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IE1lZGlhVGltZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
RTQ2NTE2RDE5REIxRkI0MDAzRUNBMDUgLyogTlNNYXBUYWJsZVNQSS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBOU01hcFRhYmxlU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC03OTAsOCArNzk0LDYgQEAKIAkJRkU4OTI1QUYxRDAwREFFQzAwNDY5MDdFIC8q
IEluZGVudGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGVudGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFREFDRDNCMTYzMEY4M0YwMEM2OTYzNCAv
KiBTdGFja1N0YXRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0
YWNrU3RhdHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRURBQ0QzQzE2MzBG
ODNGMDBDNjk2MzQgLyogU3RhY2tTdGF0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTdGFja1N0YXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTI0RjFCMjQ4
NjE5RjQxMjI5NkQxQzE5QyAvKiBSYW5kb21EZXZpY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gUmFuZG9tRGV2aWNlLmg7IHBhdGggPSBSYW5kb21EZXZpY2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzhGNTk3Q0EyQTU3NDE3RkJBQjkyRkQ2IC8qIFJhbmRv
bURldmljZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBSYW5kb21E
ZXZpY2UuY3BwOyBwYXRoID0gUmFuZG9tRGV2aWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIC8qIEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJY
RnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwpAQCAtMTEwMyw2ICsxMTA1LDcgQEAKIAkJ
CQkwRkY4NjA5NDFCQ0NCRDc0MDA0NTEyN0YgLyogUG9pbnRlckNvbXBhcmlzb24uaCAqLywKIAkJ
CQkwRjlEMzM1RDE2NURCQTczMDA1QUQzODcgLyogUHJpbnRTdHJlYW0uY3BwICovLAogCQkJCTBG
OUQzMzVFMTY1REJBNzMwMDVBRDM4NyAvKiBQcmludFN0cmVhbS5oICovLAorCQkJCTUzRUMyNTND
MUU5NUFEMzAwMDA4MzFCOSAvKiBQcmlvcml0eVF1ZXVlLmggKi8sCiAJCQkJMEZDNDQ4ODIxNkZF
OUZFMTAwODQ0QkU5IC8qIFByb2Nlc3NJRC5oICovLAogCQkJCTE0M0Y2MTFEMTU2NUYwRjkwMERC
NTE0QSAvKiBSQU1TaXplLmNwcCAqLywKIAkJCQkxNDNGNjExRTE1NjVGMEY5MDBEQjUxNEEgLyog
UkFNU2l6ZS5oICovLApAQCAtMTQxMiw2ICsxNDE1LDcgQEAKIAkJCQk4MTM0MDEzOTE1QjA5MkZE
MDAxRkYwQjggLyogQmFzZTY0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNBOTE1MUE4MjVC
MDA0MTIzRkYgLyogYmlnbnVtLWR0b2EuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0FCMTUx
QTgyNUIwMDQxMjNGRiAvKiBiaWdudW0uaCBpbiBIZWFkZXJzICovLAorCQkJCTUzRUMyNTNFMUU5
NUFEMzAwMDA4MzFCOSAvKiBQcmlvcml0eVF1ZXVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0
NzQ1MjE1MUE4MjVCMDA0MTIzRkYgLyogQmluYXJ5U2VtYXBob3JlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBOEE0NzM4QTE1MUE4MjVCMDA0MTIzRkYgLyogQml0bWFwLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBOEE0NzM4QzE1MUE4MjVCMDA0MTIzRkYgLyogQml0VmVjdG9yLmggaW4gSGVhZGVycyAq
LywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1ByaW9yaXR5UXVldWUuaCBiL1NvdXJjZS9X
VEYvd3RmL1ByaW9yaXR5UXVldWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NzVmMzNiOWE5ZDk3N2E2OWEyODlh
MjA2ZWQwOTEyZWQ4MzNjZjdiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvUHJp
b3JpdHlRdWV1ZS5oCkBAIC0wLDAgKzEsMTQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8v
IFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhIGJhc2ljIHByaW9yaXR5IHF1ZXVlLiBUaGUgY2xhc3Mg
aXMgYmFja2VkIGFzIGEgYmluYXJ5IGhlYXAsIGxpa2Ugc3RkOjpwcmlvcml0eV9xdWV1ZS4KKy8v
IFByaW9yaXR5UXVldWUgaGFzIGEgY291cGxlIG9mIGFkdmFudGFnZXMgb3ZlciBzdGQ6OnByaW9y
aXR5X3F1ZXVlOgorLy8KKy8vIDEpIFRoZSBiYWNraW5nIHZlY3RvciBpcyBmYXN0TWFsbG9jZWQu
CisvLyAyKSBZb3UgY2FuIGl0ZXJhdGUgdGhlIGVsZW1lbnRzLgorLy8gMykgSXQgaGFzIGluLXBs
YWNlIGRlY3JlYXNlL2luY3JlYXNlS2V5IG1ldGhvZHMsIGFsdGhvdWdoIHRoZXkgYXJlIHN0aWxs
IE8obikgcmF0aGVyIHRoYW4gTyhsb2cobikpLgorLy8KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgSXNIaWdoZXJQcmlvcml0eSA9IHN0ZDo6bGVzczxUPiwgc2l6ZV90IGlubGluZUNh
cGFjaXR5ID0gMD4KK2NsYXNzIFByaW9yaXR5UXVldWUgeworICAgIHVzaW5nIEJ1ZmZlclR5cGUg
PSBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+OworICAgIHVzaW5nIGNvbnN0X2l0ZXJhdG9yID0g
dHlwZW5hbWUgQnVmZmVyVHlwZTo6Y29uc3RfaXRlcmF0b3I7CitwdWJsaWM6CisgICAgc2l6ZV90
IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5zaXplKCk7IH0KKyAgICBib29sIGlzRW1w
dHkoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5pc0VtcHR5KCk7IH0KKworICAgIHZvaWQgZW5x
dWV1ZShUJiYgZWxlbWVudCkKKyAgICB7CisgICAgICAgIHNpemVfdCBsb2NhdGlvbiA9IG1fYnVm
ZmVyLnNpemUoKTsKKyAgICAgICAgbV9idWZmZXIuYXBwZW5kKFdURk1vdmUoZWxlbWVudCkpOwor
ICAgICAgICBzaWZ0VXAobG9jYXRpb24pOworICAgIH0KKworICAgIGNvbnN0IFQmIHBlZWsoKSBj
b25zdCB7IHJldHVybiBtX2J1ZmZlclswXTsgfQorICAgIFQgZGVxdWV1ZSgpCisgICAgeworICAg
ICAgICBzdGQ6OnN3YXAobV9idWZmZXJbMF0sIG1fYnVmZmVyLmxhc3QoKSk7CisgICAgICAgIFQg
cmVzdWx0ID0gbV9idWZmZXIudGFrZUxhc3QoKTsKKyAgICAgICAgc2lmdERvd24oMCk7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4KKyAgICB2b2lkIGRlY3JlYXNlS2V5KGNvbnN0IEZ1bmN0b3ImIGRlc2lyZWRFbGVtZW50KQor
ICAgIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2J1ZmZlci5zaXplKCk7ICsr
aSkgeworICAgICAgICAgICAgaWYgKGRlc2lyZWRFbGVtZW50KG1fYnVmZmVyW2ldKSkgeworICAg
ICAgICAgICAgICAgIHNpZnREb3duKGkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoaXNWYWxpZEhlYXAoKSk7CisgICAg
fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGluY3JlYXNlS2V5
KGNvbnN0IEZ1bmN0b3ImIGRlc2lyZWRFbGVtZW50KQorICAgIHsKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2J1ZmZlci5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKGRl
c2lyZWRFbGVtZW50KG1fYnVmZmVyW2ldKSkgeworICAgICAgICAgICAgICAgIHNpZnRVcChpKTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgQVNTRVJUKGlzVmFsaWRIZWFwKCkpOworICAgIH0KKworICAgIGNvbnN0X2l0ZXJhdG9yIGJl
Z2luKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIuYmVnaW4oKTsgfTsKKyAgICBjb25zdF9pdGVy
YXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5lbmQoKTsgfTsKKworICAgIGJvb2wg
aXNWYWxpZEhlYXAoKSBjb25zdAorICAgIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX2J1ZmZlci5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKGxlZnRDaGlsZE9mKGkp
IDwgbV9idWZmZXIuc2l6ZSgpICYmICFpc0hpZ2hlclByaW9yaXR5KG1fYnVmZmVyW2ldLCBtX2J1
ZmZlcltsZWZ0Q2hpbGRPZihpKV0pKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIGlmIChyaWdodENoaWxkT2YoaSkgPCBtX2J1ZmZlci5zaXplKCkgJiYgIWlzSGln
aGVyUHJpb3JpdHkobV9idWZmZXJbaV0sIG1fYnVmZmVyW3JpZ2h0Q2hpbGRPZihpKV0pKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBzaXplX3QgcGFyZW50T2Yoc2l6ZV90IGxvY2F0
aW9uKSBjb25zdCB7IEFTU0VSVChsb2NhdGlvbik7IHJldHVybiAobG9jYXRpb24gLSAxKSAvIDI7
IH0KKyAgICBzaXplX3QgbGVmdENoaWxkT2Yoc2l6ZV90IGxvY2F0aW9uKSBjb25zdCB7IHJldHVy
biBsb2NhdGlvbiAqIDIgKyAxOyB9CisgICAgc2l6ZV90IHJpZ2h0Q2hpbGRPZihzaXplX3QgbG9j
YXRpb24pIGNvbnN0IHsgcmV0dXJuIGxlZnRDaGlsZE9mKGxvY2F0aW9uKSArIDE7IH0KKworICAg
IHZvaWQgc2lmdFVwKHNpemVfdCBsb2NhdGlvbikKKyAgICB7CisgICAgICAgIHdoaWxlIChsb2Nh
dGlvbikgeworICAgICAgICAgICAgYXV0byBwYXJlbnQgPSBwYXJlbnRPZihsb2NhdGlvbik7Cisg
ICAgICAgICAgICBpZiAoaXNIaWdoZXJQcmlvcml0eShtX2J1ZmZlcltwYXJlbnRdLCBtX2J1ZmZl
cltsb2NhdGlvbl0pKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgc3Rk
Ojpzd2FwKG1fYnVmZmVyW3BhcmVudF0sIG1fYnVmZmVyW2xvY2F0aW9uXSk7CisgICAgICAgICAg
ICBsb2NhdGlvbiA9IHBhcmVudDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgc2lmdERv
d24oc2l6ZV90IGxvY2F0aW9uKQorICAgIHsKKyAgICAgICAgd2hpbGUgKGxlZnRDaGlsZE9mKGxv
Y2F0aW9uKSA8IG1fYnVmZmVyLnNpemUoKSkgeworICAgICAgICAgICAgc2l6ZV90IGhpZ2hlclBy
aW9yaXR5Q2hpbGQ7CisgICAgICAgICAgICBpZiAoTElLRUxZKHJpZ2h0Q2hpbGRPZihsb2NhdGlv
bikgPCBtX2J1ZmZlci5zaXplKCkpKQorICAgICAgICAgICAgICAgIGhpZ2hlclByaW9yaXR5Q2hp
bGQgPSBpc0hpZ2hlclByaW9yaXR5KG1fYnVmZmVyW2xlZnRDaGlsZE9mKGxvY2F0aW9uKV0sIG1f
YnVmZmVyW3JpZ2h0Q2hpbGRPZihsb2NhdGlvbildKSA/IGxlZnRDaGlsZE9mKGxvY2F0aW9uKSA6
IHJpZ2h0Q2hpbGRPZihsb2NhdGlvbik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgaGlnaGVyUHJpb3JpdHlDaGlsZCA9IGxlZnRDaGlsZE9mKGxvY2F0aW9uKTsKKworICAgICAg
ICAgICAgaWYgKGlzSGlnaGVyUHJpb3JpdHkobV9idWZmZXJbbG9jYXRpb25dLCBtX2J1ZmZlclto
aWdoZXJQcmlvcml0eUNoaWxkXSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
ICAgICBzdGQ6OnN3YXAobV9idWZmZXJbbG9jYXRpb25dLCBtX2J1ZmZlcltoaWdoZXJQcmlvcml0
eUNoaWxkXSk7CisgICAgICAgICAgICBsb2NhdGlvbiA9IGhpZ2hlclByaW9yaXR5Q2hpbGQ7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IG1fYnVmZmVy
OworICAgIElzSGlnaGVyUHJpb3JpdHkgaXNIaWdoZXJQcmlvcml0eTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdURgorCit1c2luZyBXVEY6OlByaW9yaXR5UXVldWU7CmRpZmYgLS1naXQgYS9Ub29s
cy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNWM2MDkxY2ViNWQ5ZjdjYzc0YzE1
M2IxMjUwZmVkNDM5YTYxOWY4Yy4uODY3ODk0MzRmZjBiZDNlMWRlYTBkNTdiY2Y3ZmE3MjJjMGZk
YzVkZiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE4IEBACisyMDE3LTA0LTA2ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJA
YXBwbGUuY29tPgorCisgICAgICAgIEFkZCBhIFByaW9yaXR5UXVldWUgY2xhc3MKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDU3OQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvUHJpb3JpdHlRdWV1ZS5jcHA6IEFkZGVkLgorICAgICAgICAob3Bl
cmF0b3IgIF96ICk6CisgICAgICAgIChlbnF1ZXVlKToKKyAgICAgICAgKGRlcXVldWUpOgorICAg
ICAgICAoVEVTVCk6CisgICAgICAgIChDb21wYXJlTW92ZTo6b3BlcmF0b3IoKSk6CisKIDIwMTct
MDQtMDUgIEpvbmF0aGFuIEJlZGFyZCAgPGpiZWRhcmRAYXBwbGUuY29tPgogCiAgICAgICAgIHdl
YmtpdHB5OiBBZGQgcGlkIGxvZ2dpbmcgZm9yIHNpbXVsYXRvciBwcm9jZXNzZXMKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggZDdlZTcxODE0NWE4ZDUzZDc0NWMyNmIyMWM3MDQwYzc2YzQ1NzJm
YS4uNDE0MzZhNjZhNjM4ZGFhZmZkNDQ3MzViY2YzZTBkZTAxOTEwZmFkYiAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTE3MCw2ICsxNzAsNyBAQAogCQk1MzFDMUQ4RTFERjhFRjcyMDA2RTk3
OUYgLyogTEVCRGVjb2Rlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MzFDMUQ4RDFERjhFRjcyMDA2RTk3OUYgLyogTEVCRGVjb2Rlci5jcHAgKi87
IH07CiAJCTUzNjc3MDM0MUNDODAyMjgwMEQ0MjVCMSAvKiBXZWJTY3JpcHRPYmplY3REZXNjcmlw
dGlvbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUz
Njc3MDMzMUNDODAyMjgwMEQ0MjVCMSAvKiBXZWJTY3JpcHRPYmplY3REZXNjcmlwdGlvbi5tbSAq
LzsgfTsKIAkJNTM2NzcwMzYxQ0M4MUI2MTAwRDQyNUIxIC8qIFdlYlNjcmlwdE9iamVjdERlc2Ny
aXB0aW9uLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTM2NzcwMzUxQ0M4MTJGOTAwRDQyNUIxIC8qIFdlYlNjcmlwdE9iamVjdERlc2Ny
aXB0aW9uLmh0bWwgKi87IH07CisJCTUzRUMyNTQxMUU5NkZEODcwMDA4MzFCOSAvKiBQcmlvcml0
eVF1ZXVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUzRUMyNTNGMUU5NkJDODAwMDA4MzFCOSAvKiBQcmlvcml0eVF1ZXVlLmNwcCAqLzsgfTsKIAkJ
NTU5N0Y4MzYxRDk1OTZDODAwNjZCQzIxIC8qIFN5bmNocm9uaXplZEZpeGVkUXVldWUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTU5N0Y4MzQxRDk1
OTZDODAwNjZCQzIxIC8qIFN5bmNocm9uaXplZEZpeGVkUXVldWUuY3BwICovOyB9OwogCQk1NzE0
RUNCOTFDQThCNUIwMDAwNTFBQzggLyogRG93bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkwuaHRtbCBp
biBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzE0
RUNCODFDQThCNTg4MDAwNTFBQzggLyogRG93bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkwuaHRtbCAq
LzsgfTsKIAkJNTcxNEVDQkIxQ0E4QkZFNDAwMDUxQUM4IC8qIERvd25sb2FkUmVxdWVzdE9yaWdp
bmFsVVJMRnJhbWUuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1NzE0RUNCQTFDQThCRkQxMDAwNTFBQzggLyogRG93bmxvYWRSZXF1ZXN0
T3JpZ2luYWxVUkxGcmFtZS5odG1sICovOyB9OwpAQCAtMTA4Nyw2ICsxMDg4LDcgQEAKIAkJNTMx
QzFEOEQxREY4RUY3MjAwNkU5NzlGIC8qIExFQkRlY29kZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gTEVCRGVjb2Rlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUzNjc3MDMzMUNDODAyMjgwMEQ0MjVCMSAvKiBXZWJTY3JpcHRPYmplY3REZXNj
cmlwdGlvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlNj
cmlwdE9iamVjdERlc2NyaXB0aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MzY3NzAzNTFDQzgxMkY5MDBENDI1QjEgLyogV2ViU2NyaXB0T2JqZWN0RGVzY3JpcHRpb24uaHRt
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9IFdlYlNjcmlwdE9iamVjdERlc2NyaXB0aW9u
Lmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzRUMyNTNGMUU5NkJDODAwMDA4
MzFCOSAvKiBQcmlvcml0eVF1ZXVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFByaW9yaXR5UXVldWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
NTk3RjgzNDFEOTU5NkM4MDA2NkJDMjEgLyogU3luY2hyb25pemVkRml4ZWRRdWV1ZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcxNEVDQjgxQ0E4QjU4ODAwMDUx
QUM4IC8qIERvd25sb2FkUmVxdWVzdE9yaWdpbmFsVVJMLmh0bWwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0
bWw7IHBhdGggPSBEb3dubG9hZFJlcXVlc3RPcmlnaW5hbFVSTC5odG1sOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1NzE0RUNCQTFDQThCRkQxMDAwNTFBQzggLyogRG93bmxvYWRSZXF1
ZXN0T3JpZ2luYWxVUkxGcmFtZS5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gRG93
bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkxGcmFtZS5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMjA5Nyw2ICsyMDk5LDcgQEAKIAkJCQkxQUZERTY1NDE5NTNCMkMwMDBDNDhGRkEg
LyogT3B0aW9uYWwuY3BwICovLAogCQkJCUNFNTBEOEM4MUM4NjY1Q0UwMDcyRUE1QSAvKiBPcHRp
b25TZXQuY3BwICovLAogCQkJCTBGRTQ0Nzk3MUI3NkYxRTMwMDk0OThFQiAvKiBQYXJraW5nTG90
LmNwcCAqLywKKwkJCQk1M0VDMjUzRjFFOTZCQzgwMDAwODMxQjkgLyogUHJpb3JpdHlRdWV1ZS5j
cHAgKi8sCiAJCQkJMEZDNkM0Q0IxNDEwMjdFMDAwNUI3RjBDIC8qIFJlZEJsYWNrVHJlZS5jcHAg
Ki8sCiAJCQkJOTNBNDI3QUExODBEQTI2NDAwQ0QyNEQ3IC8qIFJlZi5jcHAgKi8sCiAJCQkJODZC
RDE5OTcxQTJEQjA1QjAwNkRDRjBBIC8qIFJlZkNvdW50ZXIuY3BwICovLApAQCAtMjY0Myw2ICsy
NjQ2LDcgQEAKIAkJCQkxQTc3QkFBMzFEOUFGRkZDMDA1RkM1NjggLyogT3B0aW9uU2V0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTdDODNERjAyMUQwQTU5MEMwMEZFQkNGMyAvKiBPU09iamVjdFB0
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREY1OTFEMEE1OTBDMDBGRUJDRjMgLyogUGFy
a2luZ0xvdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1M0VDMjU0MTFFOTZGRDg3MDAwODMxQjkg
LyogUHJpb3JpdHlRdWV1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYxMzFEMEE1OTBD
MDBGRUJDRjMgLyogUmVkQmxhY2tUcmVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjE0
MUQwQTU5MEMwMEZFQkNGMyAvKiBSZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGMTUx
RDBBNTkwQzAwRkVCQ0YzIC8qIFJlZkNvdW50ZXIuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Qcmlvcml0eVF1ZXVlLmNwcCBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ByaW9yaXR5UXVldWUuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmFhZDMxMGUxYzlhNTQ3MDc3MzM2ODIzMjEwYWY5YWE3YWQ2NzQxMTYKLS0tIC9kZXYvbnVsbAor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Qcmlvcml0eVF1ZXVlLmNwcApAQCAt
MCwwICsxLDE5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1
ZGUgIk1vdmVPbmx5LmgiCisKKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KKyNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Qcmlvcml0eVF1ZXVlLmg+CisKK2NvbnN0ZXhwciBz
dGQ6OnNpemVfdCBvcGVyYXRvciAiIiBfeiAoIHVuc2lnbmVkIGxvbmcgbG9uZyBuICkgeyByZXR1
cm4gbjsgfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBDb21wYXJlPgorc3RhdGlj
IHZvaWQgZW5xdWV1ZShQcmlvcml0eVF1ZXVlPFQsIENvbXBhcmU+JiBxdWV1ZSwgVCBlbGVtZW50
KQoreworICAgIHNpemVfdCBzaXplQmVmb3JlID0gcXVldWUuc2l6ZSgpOworICAgIHF1ZXVlLmVu
cXVldWUoV1RGTW92ZShlbGVtZW50KSk7CisgICAgRVhQRUNUX0VRKHNpemVCZWZvcmUgKyAxLCBx
dWV1ZS5zaXplKCkpOworICAgIEVYUEVDVF9GQUxTRShxdWV1ZS5pc0VtcHR5KCkpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBDb21wYXJlPgorc3RhdGljIFQgZGVxdWV1ZShQ
cmlvcml0eVF1ZXVlPFQsIENvbXBhcmU+JiBxdWV1ZSkKK3sKKyAgICBFWFBFQ1RfRkFMU0UocXVl
dWUuaXNFbXB0eSgpKTsKKyAgICBzaXplX3Qgc2l6ZUJlZm9yZSA9IHF1ZXVlLnNpemUoKTsKKyAg
ICBUIHJlc3VsdCA9IHF1ZXVlLmRlcXVldWUoKTsKKyAgICBFWFBFQ1RfRVEoc2l6ZUJlZm9yZSAt
IDEsIHF1ZXVlLnNpemUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworCitURVNUKFdURl9Q
cmlvcml0eVF1ZXVlLCBCYXNpYykKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBudW1FbGVtZW50cyA9
IDEwOworICAgIFByaW9yaXR5UXVldWU8dW5zaWduZWQ+IHF1ZXVlOworCisgICAgRVhQRUNUX0VR
KDBfeiwgcXVldWUuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRShxdWV1ZS5pc0VtcHR5KCkpOwor
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyArK2kpCisgICAgICAg
IGVucXVldWUocXVldWUsIGkpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUVs
ZW1lbnRzOyArK2kpIHsKKyAgICAgICAgRVhQRUNUX0VRKGksIHF1ZXVlLnBlZWsoKSk7CisgICAg
ICAgIEVYUEVDVF9FUShpLCBkZXF1ZXVlKHF1ZXVlKSk7CisgICAgICAgIEVYUEVDVF9FUShudW1F
bGVtZW50cyAtIGkgLSAxLCBxdWV1ZS5zaXplKCkpOworICAgIH0KKworICAgIEVYUEVDVF9UUlVF
KHF1ZXVlLmlzRW1wdHkoKSk7Cit9CisKK1RFU1QoV1RGX1ByaW9yaXR5UXVldWUsIEN1c3RvbVBy
aW9yaXR5RnVuY3Rpb24pCit7CisgICAgY29uc3QgdW5zaWduZWQgbnVtRWxlbWVudHMgPSAxMDsK
KyAgICBQcmlvcml0eVF1ZXVlPHVuc2lnbmVkLCBzdGQ6OmdyZWF0ZXI8dW5zaWduZWQ+PiBxdWV1
ZTsKKworICAgIEVYUEVDVF9FUSgwX3osIHF1ZXVlLnNpemUoKSk7CisgICAgRVhQRUNUX1RSVUUo
cXVldWUuaXNFbXB0eSgpKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1FbGVt
ZW50czsgKytpKSB7CisgICAgICAgIGVucXVldWUocXVldWUsIGkpOworICAgICAgICBFWFBFQ1Rf
RVEoaSArIDEsIHF1ZXVlLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShxdWV1ZS5pc0Vt
cHR5KCkpOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1FbGVtZW50
czsgKytpKSB7CisgICAgICAgIEVYUEVDVF9FUShudW1FbGVtZW50cyAtIGkgLSAxLCBxdWV1ZS5w
ZWVrKCkpOworICAgICAgICBFWFBFQ1RfRVEobnVtRWxlbWVudHMgLSBpIC0gMSwgZGVxdWV1ZShx
dWV1ZSkpOworICAgICAgICBFWFBFQ1RfRVEobnVtRWxlbWVudHMgLSBpIC0gMSwgcXVldWUuc2l6
ZSgpKTsKKyAgICB9CisKKyAgICBFWFBFQ1RfVFJVRShxdWV1ZS5pc0VtcHR5KCkpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBDb21wYXJhdG9yPgorc3RydWN0IENvbXBhcmVNb3ZlIHsKKyAgICBi
b29sIG9wZXJhdG9yKCkoY29uc3QgTW92ZU9ubHkmIG0xLCBjb25zdCBNb3ZlT25seSYgbTIpIGNv
bnN0IHsgcmV0dXJuIGNvbXBhcmF0b3IobTEudmFsdWUoKSwgbTIudmFsdWUoKSk7IH0KKworICAg
IENvbXBhcmF0b3IgY29tcGFyYXRvcjsKK307CisKK1RFU1QoV1RGX1ByaW9yaXR5UXVldWUsIE1v
dmVPbmx5KQoreworICAgIFByaW9yaXR5UXVldWU8TW92ZU9ubHksIENvbXBhcmVNb3ZlPHN0ZDo6
bGVzczx1bnNpZ25lZD4+PiBxdWV1ZTsKKworICAgIFZlY3Rvcjx1bnNpZ25lZD4gdmFsdWVzID0g
eyAyMywgNTQsIDQsIDgsIDEsIDIsIDQsIDAgfTsKKyAgICBWZWN0b3I8dW5zaWduZWQ+IHNvcnRl
ZCA9IHZhbHVlczsKKyAgICBzdGQ6OnNvcnQoc29ydGVkLmJlZ2luKCksIHNvcnRlZC5lbmQoKSk7
CisKKyAgICBmb3IgKGF1dG8gdmFsdWUgOiB2YWx1ZXMpCisgICAgICAgIHF1ZXVlLmVucXVldWUo
TW92ZU9ubHkodmFsdWUpKTsKKworICAgIGZvciAoYXV0byBzb3J0ZWRWYWx1ZSA6IHNvcnRlZCkg
eworICAgICAgICBhdXRvIHZhbHVlID0gcXVldWUuZGVxdWV1ZSgpOworICAgICAgICBFWFBFQ1Rf
RVEoc29ydGVkVmFsdWUsIHZhbHVlLnZhbHVlKCkpOworICAgIH0KK30KKworVEVTVChXVEZfUHJp
b3JpdHlRdWV1ZSwgRGVjcmVhc2VLZXkpCit7CisgICAgUHJpb3JpdHlRdWV1ZTxNb3ZlT25seSwg
Q29tcGFyZU1vdmU8c3RkOjpsZXNzPHVuc2lnbmVkPj4+IHF1ZXVlOworCisgICAgVmVjdG9yPHVu
c2lnbmVkPiB2YWx1ZXMgPSB7IDIzLCA1NCwgNCwgOCwgMSwgMiwgNCwgMCB9OworICAgIFZlY3Rv
cjx1bnNpZ25lZD4gc29ydGVkID0gdmFsdWVzOworICAgIHNvcnRlZFszXSA9IDEyOworICAgIHN0
ZDo6c29ydChzb3J0ZWQuYmVnaW4oKSwgc29ydGVkLmVuZCgpKTsKKworICAgIGZvciAoYXV0byB2
YWx1ZSA6IHZhbHVlcykKKyAgICAgICAgcXVldWUuZW5xdWV1ZShNb3ZlT25seSh2YWx1ZSkpOwor
CisgICAgcXVldWUuZGVjcmVhc2VLZXkoW10gKE1vdmVPbmx5JiBtKSB7CisgICAgICAgIGlmICht
LnZhbHVlKCkgPT0gOCkgeworICAgICAgICAgICAgbSA9IE1vdmVPbmx5KDEyKTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
KTsKKworICAgIGZvciAoYXV0byBzb3J0ZWRWYWx1ZSA6IHNvcnRlZCkgeworICAgICAgICBhdXRv
IHZhbHVlID0gcXVldWUuZGVxdWV1ZSgpOworICAgICAgICBFWFBFQ1RfRVEoc29ydGVkVmFsdWUs
IHZhbHVlLnZhbHVlKCkpOworICAgIH0KK30KKworVEVTVChXVEZfUHJpb3JpdHlRdWV1ZSwgSW5j
cmVhc2VLZXkpCit7CisgICAgUHJpb3JpdHlRdWV1ZTxNb3ZlT25seSwgQ29tcGFyZU1vdmU8c3Rk
OjpncmVhdGVyPHVuc2lnbmVkPj4+IHF1ZXVlOworCisgICAgVmVjdG9yPHVuc2lnbmVkPiB2YWx1
ZXMgPSB7IDIzLCA1NCwgNCwgOCwgMSwgMiwgNCwgMCB9OworICAgIFZlY3Rvcjx1bnNpZ25lZD4g
c29ydGVkID0gdmFsdWVzOworICAgIHNvcnRlZFszXSA9IDEyOworICAgIHN0ZDo6c29ydChzb3J0
ZWQuYmVnaW4oKSwgc29ydGVkLmVuZCgpLCBzdGQ6OmdyZWF0ZXI8dW5zaWduZWQ+KCkpOworCisg
ICAgZm9yIChhdXRvIHZhbHVlIDogdmFsdWVzKQorICAgICAgICBxdWV1ZS5lbnF1ZXVlKE1vdmVP
bmx5KHZhbHVlKSk7CisKKyAgICBxdWV1ZS5pbmNyZWFzZUtleShbXSAoTW92ZU9ubHkmIG0pIHsK
KyAgICAgICAgaWYgKG0udmFsdWUoKSA9PSA4KSB7CisgICAgICAgICAgICBtID0gTW92ZU9ubHko
MTIpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0pOworCisgICAgZm9yIChhdXRvIHNvcnRlZFZhbHVlIDogc29ydGVkKSB7
CisgICAgICAgIGF1dG8gdmFsdWUgPSBxdWV1ZS5kZXF1ZXVlKCk7CisgICAgICAgIEVYUEVDVF9F
UShzb3J0ZWRWYWx1ZSwgdmFsdWUudmFsdWUoKSk7CisgICAgfQorfQorCitURVNUKFdURl9Qcmlv
cml0eVF1ZXVlLCBJdGVyYXRpb24pCit7CisgICAgUHJpb3JpdHlRdWV1ZTxNb3ZlT25seSwgQ29t
cGFyZU1vdmU8c3RkOjpncmVhdGVyPHVuc2lnbmVkPj4+IHF1ZXVlOworCisgICAgVmVjdG9yPHVu
c2lnbmVkPiB2YWx1ZXMgPSB7IDIzLCA1NCwgNCwgOCwgMSwgMiwgNCwgMCB9OworICAgIFZlY3Rv
cjx1bnNpZ25lZD4gc29ydGVkID0gdmFsdWVzOworICAgIHN0ZDo6c29ydChzb3J0ZWQuYmVnaW4o
KSwgc29ydGVkLmVuZCgpLCBzdGQ6OmdyZWF0ZXI8dW5zaWduZWQ+KCkpOworCisgICAgZm9yIChh
dXRvIHZhbHVlIDogdmFsdWVzKQorICAgICAgICBxdWV1ZS5lbnF1ZXVlKE1vdmVPbmx5KHZhbHVl
KSk7CisKKyAgICB2YWx1ZXMuY2xlYXIoKTsKKyAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBxdWV1
ZSkKKyAgICAgICAgdmFsdWVzLmFwcGVuZChlbGVtZW50LnZhbHVlKCkpOworCisgICAgc3RkOjpz
b3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuZW5kKCksIHN0ZDo6Z3JlYXRlcjx1bnNpZ25lZD4o
KSk7CisgICAgRVhQRUNUX0VRKHZhbHVlcy5zaXplKCksIHNvcnRlZC5zaXplKCkpOworICAgIGlm
ICh2YWx1ZXMuc2l6ZSgpID09IHNvcnRlZC5zaXplKCkpIHsKKyAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBFWFBFQ1RfRVEoc29y
dGVkW2ldLCB2YWx1ZXNbaV0pOworICAgIH0KK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306530</attachid>
            <date>2017-04-07 12:56:10 -0700</date>
            <delta_ts>2017-04-07 14:40:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-170579-20170407125610.patch</filename>
            <type>text/plain</type>
            <size>38339</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE0OTcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
MmIzMzU5NmFhYmI4ZTQ3YTdjYTJkOTEwNzA0YmVjOTExNTc1ZjdhLi5kMGMyZGJjZmI2Y2NkYWVl
ZTA1MDVkZTMxMzllNTY3ZGNiNmZmMDIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMCBAQAorMjAxNy0wNC0wNiAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBBZGQgYSBQcmlvcml0eVF1ZXVlIGNsYXNzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA1NzkKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgV2FzbTo6V29ya2xpc3Qg
dG8gdXNlIFdURjo6UHJpb3JpdHlRdWV1ZS4KKworICAgICAgICAqIHdhc20vV2FzbVdvcmtsaXN0
LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OmVucXVldWUpOgorICAgICAgICAo
SlNDOjpXYXNtOjpXb3JrbGlzdDo6Y29tcGxldGVQbGFuU3luY2hyb25vdXNseSk6CisgICAgICAg
IChKU0M6Oldhc206OldvcmtsaXN0OjpzdG9wQWxsUGxhbnNGb3JWTSk6CisgICAgICAgIChKU0M6
Oldhc206OldvcmtsaXN0Ojp+V29ya2xpc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpXb3JrbGlz
dDo6aXRlcmF0ZSk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XYXNtV29ya2xpc3QuaDoKKwog
MjAxNy0wNC0wNSAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KIAogICAg
ICAgICBXZWJBc3NlbWJseTogUGxhbnMgc2hvdWxkIGJlIGFibGUgdG8gaGF2ZSBtb3JlIHRoYW4g
b25lIGNvbXBsZXRpb24gdGFzay4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIv
U291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggMTRlMDkzNjc0ZjJjODgwOTg0MjcwZmQxNDk1ZmMw
MTY4NWU0YjdmOS4uZjM1NTY1NDM3NWE3M2M4NTNjNjEwMzg4MjBmNjBmZWE5NDYxNDM2NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
QEAgLTEsMyArMSw0MSBAQAorMjAxNy0wNC0wNiAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVy
QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYSBQcmlvcml0eVF1ZXVlIGNsYXNzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA1NzkKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMg
YSBuZXcgUHJpb3JpdHlRdWV1ZSBjbGFzcyB0aGF0IGlzIGJhY2tlZCBieQorICAgICAgICBXVEY6
OlZlY3Rvci4gIEl0IGFsc28gaGFzIGEgbnVtYmVyIG9mIG90aGVyIG5pY2V0aWVzIHN1Y2ggYXMg
YmVpbmcKKyAgICAgICAgYWJsZSB0byBpdGVyYXRlIHRoZSBxdWV1ZSBhbmQgaW5jcmVhc2Ugb3Ig
ZGVjcmVhc2Uga2V5cy4KKworICAgICAgICBPbmUgbm90ZSBpcyB0aGF0IGluY3JlYXNlS2V5IGFu
ZCBkZWNyZWFzZUtleSBhcmUgTyhuKSByYXRoZXIgdGhhbgorICAgICAgICBPKGxvZyhuKSkuICBU
cmFkaXRpb25hbGx5LCB0aGUgbG9va3VwIG9mIHRoZSBrZXkgaXMgZG9uZSB3aXRoIGEKKyAgICAg
ICAgaGFzaCBtYXAgYnV0IHRoYXQncyBub3QgZmVhc2libGUgaGVyZS4gIFRoaXMgaXMgYmVjYXVz
ZSB1bmxlc3MgdGhlCisgICAgICAgIHF1ZXVlJ3MgZWxlbWVudCB0eXBlIGlzIGEgcG9pbnRlciB0
aGVyZSBpcyBubyBnb29kIHdheSBtYWludGFpbiBhCisgICAgICAgIHBlcnNpc3RlbnQgcmVmZXJl
bmNlIHRvIGV2ZXJ5IGVudHJ5IGluIHRoZSBxdWV1ZSB3aGlsZSB3ZSBzaWZ0LgorICAgICAgICBU
aGUgb25seSB3YXkgdG8gdXBkYXRlIHRoZSBsb2NhdGlvbiBvZiBhbiBlbnRyeSBpcyB0byBkbyBh
IGhhc2gKKyAgICAgICAgdGFibGUgbG9va3VwIHdpdGggdGhlIGVudHJ5J3MgaGFzaCBidXQgdGhp
cyBpcyBwcm9iYWJseSBtb3JlCisgICAgICAgIGV4cGVuc2l2ZSB0aGFuIGp1c3QgZG9pbmcgYSBs
aW5lYXIgc2VhcmNoLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogd3RmL1ByaW9yaXR5UXVldWUuaDogQWRkZWQuCisgICAgICAgIChXVEY6OlBy
aW9yaXR5UXVldWU6OnNpemUpOgorICAgICAgICAoV1RGOjpQcmlvcml0eVF1ZXVlOjppc0VtcHR5
KToKKyAgICAgICAgKFdURjo6UHJpb3JpdHlRdWV1ZTo6ZW5xdWV1ZSk6CisgICAgICAgIChXVEY6
OlByaW9yaXR5UXVldWU6OnBlZWspOgorICAgICAgICAoV1RGOjpQcmlvcml0eVF1ZXVlOjpkZXF1
ZXVlKToKKyAgICAgICAgKFdURjo6UHJpb3JpdHlRdWV1ZTo6ZGVjcmVhc2VLZXkpOgorICAgICAg
ICAoV1RGOjpQcmlvcml0eVF1ZXVlOjppbmNyZWFzZUtleSk6CisgICAgICAgIChXVEY6OlByaW9y
aXR5UXVldWU6OmJlZ2luKToKKyAgICAgICAgKFdURjo6UHJpb3JpdHlRdWV1ZTo6ZW5kKToKKyAg
ICAgICAgKFdURjo6UHJpb3JpdHlRdWV1ZTo6aXNWYWxpZEhlYXApOgorICAgICAgICAoV1RGOjpQ
cmlvcml0eVF1ZXVlOjpwYXJlbnRPZik6CisgICAgICAgIChXVEY6OlByaW9yaXR5UXVldWU6Omxl
ZnRDaGlsZE9mKToKKyAgICAgICAgKFdURjo6UHJpb3JpdHlRdWV1ZTo6cmlnaHRDaGlsZE9mKToK
KyAgICAgICAgKFdURjo6UHJpb3JpdHlRdWV1ZTo6c2lmdFVwKToKKyAgICAgICAgKFdURjo6UHJp
b3JpdHlRdWV1ZTo6c2lmdERvd24pOgorCiAyMDE3LTA0LTA1ICBZdXN1a2UgU3V6dWtpICA8dXRh
dGFuZS50ZWFAZ21haWwuY29tPgogCiAgICAgICAgIFtKU0NdIFN1cHByZXNzIHdhcm5pbmdzIGlu
IEdDQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5jcHAKaW5kZXgg
ZmRhMDZhNzMzZGJmMjA2OTE2OWMwZmIxNGY5ZDA1Y2NmY2JhMzFmMS4uNjExZDQyOGVmNzcyMGI3
ZDRmOWVkOGY2NzA2ZGE0YzE5ZTI1MWEzMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtV29ya2xpc3QuY3BwCkBAIC02NywxNiArNjcsMTUgQEAgcHJvdGVjdGVkOgogICAgICAg
ICBhdXRvJiBxdWV1ZSA9IHdvcmtsaXN0Lm1fcXVldWU7CiAgICAgICAgIHN5bmNocm9uaXplLm5v
dGlmeUFsbCgpOwogCi0gICAgICAgIHdoaWxlICghcXVldWUuZW1wdHkoKSkgewotCi0gICAgICAg
ICAgICBQcmlvcml0eSBwcmlvcml0eSA9IHF1ZXVlLnRvcCgpLnByaW9yaXR5OworICAgICAgICB3
aGlsZSAoIXF1ZXVlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgUHJpb3JpdHkgcHJpb3JpdHkg
PSBxdWV1ZS5wZWVrKCkucHJpb3JpdHk7CiAgICAgICAgICAgICBpZiAocHJpb3JpdHkgPT0gV29y
a2xpc3Q6OlByaW9yaXR5OjpTaHV0ZG93bikKICAgICAgICAgICAgICAgICByZXR1cm4gUG9sbFJl
c3VsdDo6U3RvcDsKIAotICAgICAgICAgICAgZWxlbWVudCA9IHF1ZXVlLnRvcCgpOworICAgICAg
ICAgICAgZWxlbWVudCA9IHF1ZXVlLnBlZWsoKTsKICAgICAgICAgICAgIC8vIE9ubHkgb25lIHRo
cmVhZCBzaG91bGQgdmFsaWRhdGUvcHJlcGFyZS4KLSAgICAgICAgICAgIGlmICghcXVldWUudG9w
KCkucGxhbi0+aGFzQmVlblByZXBhcmVkKCkpIHsKLSAgICAgICAgICAgICAgICBxdWV1ZS5wb3Ao
KTsKKyAgICAgICAgICAgIGlmICghcXVldWUucGVlaygpLnBsYW4tPmhhc0JlZW5QcmVwYXJlZCgp
KSB7CisgICAgICAgICAgICAgICAgcXVldWUuZGVxdWV1ZSgpOwogICAgICAgICAgICAgICAgIHJl
dHVybiBQb2xsUmVzdWx0OjpXb3JrOwogICAgICAgICAgICAgfQogCkBAIC04NCw3ICs4Myw3IEBA
IHByb3RlY3RlZDoKICAgICAgICAgICAgICAgICByZXR1cm4gUG9sbFJlc3VsdDo6V29yazsKIAog
ICAgICAgICAgICAgLy8gVGhlcmUgbXVzdCBiZSBhIGFub3RoZXIgdGhyZWFkIGxpbmtpbmcgdGhp
cyBwbGFuIHNvIHdlIGNhbiBkZXF1ZSBhbmQgc2VlIGlmIHRoZXJlIGlzIG90aGVyIHdvcmsuCi0g
ICAgICAgICAgICBxdWV1ZS5wb3AoKTsKKyAgICAgICAgICAgIHF1ZXVlLmRlcXVldWUoKTsKICAg
ICAgICAgICAgIGVsZW1lbnQgPSBRdWV1ZUVsZW1lbnQoKTsKICAgICAgICAgfQogICAgICAgICBy
ZXR1cm4gUG9sbFJlc3VsdDo6V2FpdDsKQEAgLTEwOCwyMiArMTA3LDEyIEBAIHByb3RlY3RlZDoK
IAogICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoKndvcmtsaXN0Lm1fbG9jayk7CiAgICAg
ICAgICAgICBlbGVtZW50LnNldFRvTmV4dFByaW9yaXR5KCk7Ci0gICAgICAgICAgICB3b3JrbGlz
dC5tX3F1ZXVlLnB1c2goZWxlbWVudCk7CisgICAgICAgICAgICB3b3JrbGlzdC5tX3F1ZXVlLmVu
cXVldWUoV1RGTW92ZShlbGVtZW50KSk7CiAgICAgICAgICAgICB3b3JrbGlzdC5tX3BsYW5FbnF1
ZXVlZC0+bm90aWZ5QWxsKGxvY2tlcik7CisgICAgICAgICAgICByZXR1cm4gY29tcGxldGUoKTsK
ICAgICAgICAgfQogCi0gICAgICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBjaGVjayBpbiBvY2Nh
c2lvbmFsbHkgdG8gc2VlIGlmIHRoZXJlIGFyZSBuZXcsIGhpZ2hlciBwcmlvcml0eSBlLmcuIHN5
bmNocm9ub3VzLCBwbGFucyB0aGF0IG5lZWQgdG8gYmUgcnVuLgotICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwMjA0CiAgICAgICAgIHBsYW4tPmNv
bXBpbGVGdW5jdGlvbnMoUGxhbjo6UGFydGlhbCk7Ci0KLSAgICAgICAgaWYgKCFwbGFuLT5oYXNX
b3JrKCkpIHsKLSAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKCp3b3JrbGlzdC5tX2xvY2sp
OwotICAgICAgICAgICAgYXV0byBxdWV1ZSA9IHdvcmtsaXN0Lm1fcXVldWU7Ci0gICAgICAgICAg
ICAvLyBBbm90aGVyIHRocmVhZCBtYXkgaGF2ZSByZW1vdmVkIG91ciBwbGFuIGZyb20gdGhlIHF1
ZXVlIGFscmVhZHkuCi0gICAgICAgICAgICBpZiAoIXF1ZXVlLmVtcHR5KCkgJiYgcXVldWUudG9w
KCkucGxhbiA9PSBlbGVtZW50LnBsYW4pCi0gICAgICAgICAgICAgICAgcXVldWUucG9wKCk7Ci0g
ICAgICAgIH0KLQogICAgICAgICByZXR1cm4gY29tcGxldGUoKTsKICAgICB9CiAKQEAgLTE0OCw0
NyArMTM3LDE3IEBAIHZvaWQgV29ya2xpc3Q6OlF1ZXVlRWxlbWVudDo6c2V0VG9OZXh0UHJpb3Jp
dHkoKQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLWVudW0gY2xhc3Mg
SXRlcmF0ZVJlc3VsdCB7IFVwZGF0ZUFuZEJyZWFrLCBEcm9wQW5kQ29udGludWUsIENvbnRpbnVl
IH07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci12b2lkIFdvcmtsaXN0OjppdGVyYXRl
KGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgY29uc3QgRnVuY3RvciYgZnVuYykKLXsKLSAgICAvLyBz
dGQ6OnByaW9yaXR5X3F1ZXVlIGRvZXMgbm90IGhhdmUgYW4gaXRlcmF0b3Igb3IgZGVjcmVhc2Vf
a2V5Li4uIDooIFdoaWxlIHRoaXMgaXMgZ3Jvc3MsIHRoaXMgZnVuY3Rpb24KLSAgICAvLyBzaG91
bGRuJ3QgYmUgY2FsbGVkIHZlcnkgb2Z0ZW4gYW5kIHRoZSBxdWV1ZSBzaG91bGQgYmUgc21hbGwu
Ci0gICAgLy8gRklYTUU6IHdlIHNob3VsZCBoYXZlIG91ciBvd24gUHJpb3JpdHlRdWV1ZSB0aGF0
IGRvZXNuJ3Qgc3Vjay4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcwMTQ1Ci0gICAgc3RkOjp2ZWN0b3I8UXVldWVFbGVtZW50PiBlbGVtZW50czsKLSAg
ICB3aGlsZSAoIW1fcXVldWUuZW1wdHkoKSkgewotICAgICAgICBRdWV1ZUVsZW1lbnQgZWxlbWVu
dCA9IG1fcXVldWUudG9wKCk7Ci0gICAgICAgIG1fcXVldWUucG9wKCk7Ci0gICAgICAgIEl0ZXJh
dGVSZXN1bHQgcmVzdWx0ID0gZnVuYyhlbGVtZW50KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBJ
dGVyYXRlUmVzdWx0OjpVcGRhdGVBbmRCcmVhaykgewotICAgICAgICAgICAgZWxlbWVudHMucHVz
aF9iYWNrKGVsZW1lbnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAocmVzdWx0ID09IEl0ZXJhdGVSZXN1bHQ6OkNvbnRpbnVlKQotICAgICAgICAgICAgZWxl
bWVudHMucHVzaF9iYWNrKGVsZW1lbnQpOwotICAgICAgICBjb250aW51ZTsKLSAgICB9Ci0gICAg
Ci0gICAgZm9yIChhdXRvIGVsZW1lbnQgOiBlbGVtZW50cykKLSAgICAgICAgbV9xdWV1ZS5wdXNo
KGVsZW1lbnQpOwotfQotCiB2b2lkIFdvcmtsaXN0OjplbnF1ZXVlKFJlZjxQbGFuPiBwbGFuKQog
ewogICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOwogCiAgICAgaWYgKCFBU1NFUlRfRElT
QUJMRUQpIHsKLSAgICAgICAgaXRlcmF0ZShsb2NrZXIsIFsmXSAoUXVldWVFbGVtZW50JiBlbGVt
ZW50KSB7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgZWxlbWVudCA6IG1fcXVldWUpCiAgICAg
ICAgICAgICBBU1NFUlRfVU5VU0VEKGVsZW1lbnQsIGVsZW1lbnQucGxhbi5nZXQoKSAhPSAmcGxh
bi5nZXQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gSXRlcmF0ZVJlc3VsdDo6Q29udGludWU7Ci0g
ICAgICAgIH0pOwogICAgIH0KIAogICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJFbnF1ZXVpbmcg
cGxhbiIpOwotICAgIG1fcXVldWUucHVzaCh7IFByaW9yaXR5OjpQcmVwYXJhdGlvbiwgbmV4dFRp
Y2tldCgpLCAgV1RGTW92ZShwbGFuKSB9KTsKKyAgICBtX3F1ZXVlLmVucXVldWUoeyBQcmlvcml0
eTo6UHJlcGFyYXRpb24sIG5leHRUaWNrZXQoKSwgIFdURk1vdmUocGxhbikgfSk7CiAgICAgbV9w
bGFuRW5xdWV1ZWQtPm5vdGlmeU9uZShsb2NrZXIpOwogfQogCkBAIC0xOTYsMTIgKzE1NSwxMiBA
QCB2b2lkIFdvcmtsaXN0Ojpjb21wbGV0ZVBsYW5TeW5jaHJvbm91c2x5KFBsYW4mIHBsYW4pCiB7
CiAgICAgewogICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKLSAgICAgICAgaXRl
cmF0ZShsb2NrZXIsIFsmXSAoUXVldWVFbGVtZW50JiBlbGVtZW50KSB7CisgICAgICAgIG1fcXVl
dWUuZGVjcmVhc2VLZXkoWyZdIChRdWV1ZUVsZW1lbnQmIGVsZW1lbnQpIHsKICAgICAgICAgICAg
IGlmIChlbGVtZW50LnBsYW4gPT0gJnBsYW4pIHsKICAgICAgICAgICAgICAgICBlbGVtZW50LnBy
aW9yaXR5ID0gUHJpb3JpdHk6OlN5bmNocm9ub3VzOwotICAgICAgICAgICAgICAgIHJldHVybiBJ
dGVyYXRlUmVzdWx0OjpVcGRhdGVBbmRCcmVhazsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBJdGVyYXRlUmVzdWx0OjpDb250
aW51ZTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfSk7CiAKICAgICAgICAg
Zm9yIChhdXRvJiB0aHJlYWQgOiBtX3RocmVhZHMpIHsKQEAgLTIxNiwxNyArMTc1LDIzIEBAIHZv
aWQgV29ya2xpc3Q6OmNvbXBsZXRlUGxhblN5bmNocm9ub3VzbHkoUGxhbiYgcGxhbikKIHZvaWQg
V29ya2xpc3Q6OnN0b3BBbGxQbGFuc0ZvclZNKFZNJiB2bSkKIHsKICAgICBMb2NrSG9sZGVyIGxv
Y2tlcigqbV9sb2NrKTsKLSAgICBpdGVyYXRlKGxvY2tlciwgWyZdIChRdWV1ZUVsZW1lbnQmIGVs
ZW1lbnQpIHsKKyAgICBWZWN0b3I8UXVldWVFbGVtZW50PiBlbGVtZW50czsKKyAgICB3aGlsZSAo
IW1fcXVldWUuaXNFbXB0eSgpKSB7CisgICAgICAgIFF1ZXVlRWxlbWVudCBlbGVtZW50ID0gbV9x
dWV1ZS5kZXF1ZXVlKCk7CiAgICAgICAgIGlmICgmZWxlbWVudC5wbGFuLT52bSgpID09ICZ2bSkg
ewogICAgICAgICAgICAgZWxlbWVudC5wbGFuLT5jYW5jZWwoKTsKLSAgICAgICAgICAgIHJldHVy
biBJdGVyYXRlUmVzdWx0OjpEcm9wQW5kQ29udGludWU7CisgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgfQotICAgICAgICByZXR1cm4gSXRlcmF0ZVJlc3VsdDo6Q29udGludWU7Ci0gICAg
fSk7CisKKyAgICAgICAgZWxlbWVudHMuYXBwZW5kKFdURk1vdmUoZWxlbWVudCkpOworICAgIH0K
KworICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGVsZW1lbnRzKQorICAgICAgICBtX3F1ZXVlLmVu
cXVldWUoV1RGTW92ZShlbGVtZW50KSk7CiAKICAgICBmb3IgKGF1dG8mIHRocmVhZCA6IG1fdGhy
ZWFkcykgewogICAgICAgICBpZiAodGhyZWFkLT5lbGVtZW50LnBsYW4gJiYgJnRocmVhZC0+ZWxl
bWVudC5wbGFuLT52bSgpID09ICZ2bSkgewotICAgICAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSB0
byB3b3JyeSBhYm91dCB0aGUgZGVhZGxvY2tpbmcgc2luY2UgdGhlIHRocmVhZCBjYW4ndCBibG9j
ayB3aXRob3V0IGNsZWFyaW5nIHRoZSBwbGFuIGFuZCBtdXN0IGhvbGQgdGhlIGxvY2sgdG8gZG8g
c28uCisgICAgICAgICAgICAvLyBXZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoZSBkZWFk
bG9ja2luZyBzaW5jZSB0aGUgdGhyZWFkIGNhbid0IGJsb2NrIHdpdGhvdXQgY2hlY2tpbmcgZm9y
IGEgbmV3IHBsYW4gYW5kIG11c3QgaG9sZCB0aGUgbG9jayB0byBkbyBzby4KICAgICAgICAgICAg
IHRocmVhZC0+ZWxlbWVudC5wbGFuLT5jYW5jZWwoKTsKICAgICAgICAgICAgIHRocmVhZC0+c3lu
Y2hyb25pemUud2FpdCgqbV9sb2NrKTsKICAgICAgICAgfQpAQCAtMjQ4LDcgKzIxMyw3IEBAIFdv
cmtsaXN0Ojp+V29ya2xpc3QoKQogewogICAgIHsKICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIo
Km1fbG9jayk7Ci0gICAgICAgIG1fcXVldWUucHVzaCh7IFByaW9yaXR5OjpTaHV0ZG93biwgbmV4
dFRpY2tldCgpLCBudWxscHRyIH0pOworICAgICAgICBtX3F1ZXVlLmVucXVldWUoeyBQcmlvcml0
eTo6U2h1dGRvd24sIG5leHRUaWNrZXQoKSwgbnVsbHB0ciB9KTsKICAgICAgICAgbV9wbGFuRW5x
dWV1ZWQtPm5vdGlmeUFsbChsb2NrZXIpOwogICAgIH0KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV90aHJlYWRzLnNpemUoKTsgKytpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtV29ya2xpc3QuaAppbmRleCBiY2FmMWVmODhkZjQ5MzU5MTU2NWNmY2UwMjg5ZTc1ZTFlYTRj
MzcyLi44ZGIzMDc3NDQ3MjlhZTBiODcyYTZmOTRkZjhlMWNlMTJlNTJkOGZiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuaApAQCAtMzIsNiArMzIsNyBAQAogI2lu
Y2x1ZGUgPHF1ZXVlPgogCiAjaW5jbHVkZSA8d3RmL0F1dG9tYXRpY1RocmVhZC5oPgorI2luY2x1
ZGUgPHd0Zi9Qcmlvcml0eVF1ZXVlLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1l
c3BhY2UgSlNDIHsKQEAgLTg4LDE3ICs4OSwxMyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAg
fTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgdm9pZCBpdGVyYXRlKGNv
bnN0IEFic3RyYWN0TG9ja2VyJiwgY29uc3QgRnVuY3RvciYpOwogCiAgICAgQm94PExvY2s+IG1f
bG9jazsKICAgICBSZWZQdHI8QXV0b21hdGljVGhyZWFkQ29uZGl0aW9uPiBtX3BsYW5FbnF1ZXVl
ZDsKICAgICAvLyBUZWNobmljYWxseSwgdGhpcyBjb3VsZCBvdmVyZmxvdyBidXQgdGhhdCdzIHVu
bGlrZWx5LiBFdmVuIGlmIGl0IGRpZCwgd2Ugd2lsbCBqdXN0IGNvbXBpbGUgdGhpbmdzIG9mIHRo
ZSBzYW1lCiAgICAgLy8gUHJpb3JpdHkgaXQgdGhlIHdyb25nIG9yZGVyLCB3aGljaCBpc24ndCB3
cm9uZywganVzdCBzdWJvcHRpbWFsLgogICAgIFRpY2tldCBtX2xhc3RHcmFudGVkVGlja2V0IHsg
MCB9OwotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgV1RGOjpWZWN0b3IgYnV0IFdURjo6
VmVjdG9yIGRvZXMgbm90IHN1cHBvcnQgcmFuZG9tIGFjY2VzcyBpdGVyYXRvci4KLSAgICBzdGQ6
OnByaW9yaXR5X3F1ZXVlPFF1ZXVlRWxlbWVudCwgc3RkOjp2ZWN0b3I8UXVldWVFbGVtZW50Piwg
Q29tcGFyYXRvcj4gbV9xdWV1ZTsKLSAgICBIYXNoTWFwPEpTUHJvbWlzZURlZmVycmVkKiwgUGxh
bio+IG1fYWN0aXZlUGxhbnM7CisgICAgUHJpb3JpdHlRdWV1ZTxRdWV1ZUVsZW1lbnQsIENvbXBh
cmF0b3IsIDEwPiBtX3F1ZXVlOwogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkPj4g
bV90aHJlYWRzOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggZjU4ZjE5YjU2ZDMzY2I4OGE2ZmI0OWQ2ZTVmM2I2MDk3ODZiYzBjYy4uN2M3NzRkOTdk
ZDQxODcyYTIwZjM5OWM5NmEzNTkxZDdhNGNhZTE0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9X
VEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNDksNiArMTQ5LDcgQEAKIAkJNTE1Rjc5NTYxQ0ZEM0E2
OTAwQ0NFRDkzIC8qIENyb3NzVGhyZWFkUXVldWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNUY3OTU1MUNGRDNBNjkwMENDRUQ5MyAvKiBDcm9zc1Ro
cmVhZFF1ZXVlLmggKi87IH07CiAJCTUyMTgzMDEyQzk5RTQ3NkE4NEVFQkVBOCAvKiBTeW1ib2xJ
bXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY3
MkJCREIxMDdGQTQyNDg4NjE3OEI5RSAvKiBTeW1ib2xJbXBsLmNwcCAqLzsgfTsKIAkJNTM5RUIw
NjMxRDU1Mjg0MjAwQzgyRUY3IC8qIExFQkRlY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzOUVCMDYyMUQ1NTI4NDIwMEM4MkVGNyAvKiBMRUJE
ZWNvZGVyLmggKi87IH07CisJCTUzRUMyNTNFMUU5NUFEMzAwMDA4MzFCOSAvKiBQcmlvcml0eVF1
ZXVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0VD
MjUzQzFFOTVBRDMwMDAwODMxQjkgLyogUHJpb3JpdHlRdWV1ZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU1MzA3MUNBMUM0MDQyNzIwMDM4NDg5
OCAvKiBUaW55TFJVQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDU1MzA3MUM5MUM0MDQyNzIwMDM4NDg5OCAvKiBUaW55TFJVQ2FjaGUuaCAqLzsg
fTsKIAkJNTU5N0Y4MkYxRDk0Qjk5NzAwNjZCQzIxIC8qIFN5bmNocm9uaXplZEZpeGVkUXVldWUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1OTdGODJD
MUQ5NEI5OTcwMDY2QkMyMSAvKiBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmggKi87IH07CiAJCTVD
N0M4OEQ0MUQwQTNBMEEwMDlEMkY2RCAvKiBVbmlxdWVSZWYuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDN0M4OEQzMUQwQTNBMEEwMDlEMkY2RCAvKiBV
bmlxdWVSZWYuaCAqLzsgfTsKQEAgLTE3OCw2ICsxNzksNyBAQAogCQk5NzRDRkM4RTE2QTRGMzI3
MDA2RDU0MDQgLyogV2Vha1B0ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTc0Q0ZDOEQxNkE0RjMyNzAwNkQ1NDA0IC8qIFdlYWtQdHIuaCAqLzsgfTsK
IAkJOUJDNzBGMDUxNzZDMzc5RDAwMTAxREVDIC8qIEF0b21pY1N0cmluZ1RhYmxlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCQzcwRjA0MTc2QzM3
OUQwMDEwMURFQyAvKiBBdG9taWNTdHJpbmdUYWJsZS5jcHAgKi87IH07CiAJCTlCRDhGNDBCMTc2
QzJCNDcwMDAyRDg2NSAvKiBBdG9taWNTdHJpbmdUYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUJEOEY0MEExNzZDMkFEODAwMDJEODY1IC8qIEF0
b21pY1N0cmluZ1RhYmxlLmggKi87IH07CisJCUEzQjcyNUVDOTg3NDQ2QUQ5M0YxQTQ0MCAvKiBS
YW5kb21EZXZpY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQzhGNTk3Q0EyQTU3NDE3RkJBQjkyRkQ2IC8qIFJhbmRvbURldmljZS5jcHAgKi87IH07
CiAJCUE1MDk4QjAwMUMxNjlFMDcwMDA4Nzc5NyAvKiBTYW5kYm94U1BJLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTA5OEFGRjFDMTY5RTA3MDAwODc3
OTcgLyogU2FuZGJveFNQSS5oICovOyB9OwogCQlBNTA5OEIwMjFDMTZBNEY5MDAwODc3OTcgLyog
U2VjdXJpdHlTUEkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE1MDk4QjAxMUMxNkE0RjkwMDA4Nzc5NyAvKiBTZWN1cml0eVNQSS5oICovOyB9OwogCQlB
NTYxRjMxMDFERjI2NDIxMDBGRjY3NUQgLyogRGVwcmVjYXRlZE9wdGlvbmFsLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTYxRjMwRjFERjI2NDIxMDBG
RjY3NUQgLyogRGVwcmVjYXRlZE9wdGlvbmFsLmggKi87IH07CkBAIC0zODMsMTMgKzM4NSwxMiBA
QAogCQlFNEEwQUQzQTFBOTYyNDU1MDA1MzZERjYgLyogV29ya1F1ZXVlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEEwQUQzODFBOTYyNDU1MDA1MzZE
RjYgLyogV29ya1F1ZXVlLmggKi87IH07CiAJCUU0QTBBRDNEMUE5NjI1M0MwMDUzNkRGNiAvKiBX
b3JrUXVldWVDb2NvYS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFNEEwQUQzQzFBOTYyNTNDMDA1MzZERjYgLyogV29ya1F1ZXVlQ29jb2EuY3BwICov
OyB9OwogCQlFQjk1RTFGMDE2MUE3MjQxMDA4OUEyRjUgLyogQnl0ZU9yZGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFQjk1RTFFRjE2MUE3MjQxMDA4
OUEyRjUgLyogQnl0ZU9yZGVyLmggKi87IH07CisJCUZDNkVDMkJGMjBGODQ5OTY5QzZBNUJFMSAv
KiBSYW5kb21EZXZpY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDI0RjFCMjQ4NjE5RjQxMjI5NkQxQzE5QyAvKiBSYW5kb21EZXZpY2UuaCAqLzsgfTsK
IAkJRkU4MjI1MzExQjJBMUU1QjAwQkE2OEZEIC8qIE5ha2VkUHRyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTgyMjUzMDFCMkExRTVCMDBCQTY4RkQg
LyogTmFrZWRQdHIuaCAqLzsgfTsKIAkJRkU4NkE4NzUxRTU5NDQwMjAwMTExQkJGIC8qIEZvcmJp
ZEhlYXBBbGxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGRTg2QTg3NDFFNTk0NDAyMDAxMTFCQkYgLyogRm9yYmlkSGVhcEFsbG9jYXRpb24u
aCAqLzsgfTsKIAkJRkU4OTI1QjAxRDAwREFFQzAwNDY5MDdFIC8qIEluZGVudGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTg5MjVBRjFEMDBEQUVD
MDA0NjkwN0UgLyogSW5kZW50ZXIuaCAqLzsgfTsKIAkJRkVEQUNEM0QxNjMwRjgzRjAwQzY5NjM0
IC8qIFN0YWNrU3RhdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkVEQUNEM0IxNjMwRjgzRjAwQzY5NjM0IC8qIFN0YWNrU3RhdHMuY3BwICovOyB9
OwogCQlGRURBQ0QzRTE2MzBGODNGMDBDNjk2MzQgLyogU3RhY2tTdGF0cy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVEQUNEM0MxNjMwRjgzRjAwQzY5
NjM0IC8qIFN0YWNrU3RhdHMuaCAqLzsgfTsKLQkJRkM2RUMyQkYyMEY4NDk5NjlDNkE1QkUxIC8q
IFJhbmRvbURldmljZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMjRGMUIyNDg2MTlGNDEyMjk2RDFDMTlDIC8qIFJhbmRvbURldmljZS5oICovOyB9Owot
CQlBM0I3MjVFQzk4NzQ0NkFEOTNGMUE0NDAgLyogUmFuZG9tRGV2aWNlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM4RjU5N0NBMkE1NzQxN0ZCQUI5
MkZENiAvKiBSYW5kb21EZXZpY2UuY3BwICovOyB9OwogLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0
aW9uICovCiAKIC8qIEJlZ2luIFBCWENvbnRhaW5lckl0ZW1Qcm94eSBzZWN0aW9uICovCkBAIC01
MjYsNiArNTI3LDcgQEAKIAkJMUNDREIxNTExRTU2NkJDNTAwNkM3M0MwIC8qIENGU3RyaW5nU1BJ
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENGU3RyaW5nU1BJLmg7IHBhdGgg
PSBjZi9DRlN0cmluZ1NQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxRkE0N0M4
ODE1MjUwMkRBMDA1NjhEMUIgLyogV2ViQ29yZVRocmVhZC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXZWJDb3JlVGhyZWFkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMUZBNDdDODkxNTI1MDJEQTAwNTY4RDFCIC8qIFdlYkNvcmVUaHJlYWQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZVRocmVhZC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkyNEYxQjI0ODYxOUY0MTIyOTZEMUMxOUMgLyogUmFuZG9t
RGV2aWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJhbmRvbURldmljZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNjE0N0IwODE1RERDQ0RDMDBEREI5MDcg
LyogSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTI2Mjk5QjZEMTdBOUU1QjgwMEFERUJFNSAvKiBSZWYuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmVmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTI2ODRENDM1MUMwMDBENDAwMDgxRDY2MyAvKiBJbmRleFNwYXJzZVNldC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbmRleFNwYXJzZVNldC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNTQyLDYgKzU0NCw3IEBACiAJCTUxNUY3OTREMUNGQzlGNEEwMENDRUQ5
MyAvKiBDcm9zc1RocmVhZFRhc2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q3Jvc3NUaHJlYWRUYXNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNUY3OTU1
MUNGRDNBNjkwMENDRUQ5MyAvKiBDcm9zc1RocmVhZFF1ZXVlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENyb3NzVGhyZWFkUXVldWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTM5RUIwNjIxRDU1Mjg0MjAwQzgyRUY3IC8qIExFQkRlY29kZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTEVCRGVjb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1M0VDMjUzQzFFOTVBRDMwMDAwODMxQjkgLyogUHJpb3JpdHlRdWV1ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcmlvcml0eVF1ZXVlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1MzA3MUM5MUM0MDQyNzIwMDM4NDg5OCAvKiBUaW55
TFJVQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGlueUxSVUNhY2hl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1OTdGODJDMUQ5NEI5OTcwMDY2QkMy
MSAvKiBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFN5bmNocm9uaXplZEZpeGVkUXVldWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNUI0MzM4M0E1RDBCNDYzQzk0MzNEOTMzIC8qIEluZGV4TWFwLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGV4TWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC03NjAsNiArNzYzLDcgQEAKIAkJQURGMkNFNjUxRTM5RjEwNjAwNjg4OURCIC8qIE1l
bW9yeUZvb3RwcmludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBN
ZW1vcnlGb290cHJpbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMzhGRDdC
QzE2ODk1M0U4MDA2NUM5NjkgLyogRmVhdHVyZURlZmluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRmVhdHVyZURlZmluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQzRGOEE5MzYxOUM2NUVCNDAwQjJCMTVEIC8qIFN0b3B3YXRjaC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9wd2F0Y2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQzhGNTk3Q0EyQTU3NDE3RkJBQjkyRkQ2IC8qIFJhbmRvbURldmljZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSYW5kb21EZXZpY2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDU0OTdBQTE1ODU3RDAzMDBCNUJDMzAgLyogTWVk
aWFUaW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhVGlt
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNENTQ5N0FCMTU4NTdEMDMwMEI1
QkMzMCAvKiBNZWRpYVRpbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVk
aWFUaW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNFNDY1MTZEMTlEQjFGQjQw
MDNFQ0EwNSAvKiBOU01hcFRhYmxlU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE5TTWFwVGFibGVTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc5MCw4
ICs3OTQsNiBAQAogCQlGRTg5MjVBRjFEMDBEQUVDMDA0NjkwN0UgLyogSW5kZW50ZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5kZW50ZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRkVEQUNEM0IxNjMwRjgzRjAwQzY5NjM0IC8qIFN0YWNrU3RhdHMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RhY2tTdGF0cy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFREFDRDNDMTYzMEY4M0YwMEM2OTYzNCAvKiBT
dGFja1N0YXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0YWNrU3RhdHMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjRGMUIyNDg2MTlGNDEyMjk2RDFDMTlD
IC8qIFJhbmRvbURldmljZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBSYW5k
b21EZXZpY2UuaDsgcGF0aCA9IFJhbmRvbURldmljZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlDOEY1OTdDQTJBNTc0MTdGQkFCOTJGRDYgLyogUmFuZG9tRGV2aWNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFJhbmRvbURldmljZS5jcHA7IHBhdGgg
PSBSYW5kb21EZXZpY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogLyogRW5kIFBC
WEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhGcmFtZXdvcmtzQnVpbGRQ
aGFzZSBzZWN0aW9uICovCkBAIC0xMTAzLDYgKzExMDUsNyBAQAogCQkJCTBGRjg2MDk0MUJDQ0JE
NzQwMDQ1MTI3RiAvKiBQb2ludGVyQ29tcGFyaXNvbi5oICovLAogCQkJCTBGOUQzMzVEMTY1REJB
NzMwMDVBRDM4NyAvKiBQcmludFN0cmVhbS5jcHAgKi8sCiAJCQkJMEY5RDMzNUUxNjVEQkE3MzAw
NUFEMzg3IC8qIFByaW50U3RyZWFtLmggKi8sCisJCQkJNTNFQzI1M0MxRTk1QUQzMDAwMDgzMUI5
IC8qIFByaW9yaXR5UXVldWUuaCAqLywKIAkJCQkwRkM0NDg4MjE2RkU5RkUxMDA4NDRCRTkgLyog
UHJvY2Vzc0lELmggKi8sCiAJCQkJMTQzRjYxMUQxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUu
Y3BwICovLAogCQkJCTE0M0Y2MTFFMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmggKi8sCkBA
IC0xNDEyLDYgKzE0MTUsNyBAQAogCQkJCTgxMzQwMTM5MTVCMDkyRkQwMDFGRjBCOCAvKiBCYXNl
NjQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0E5MTUxQTgyNUIwMDQxMjNGRiAvKiBiaWdu
dW0tZHRvYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczQUIxNTFBODI1QjAwNDEyM0ZGIC8q
IGJpZ251bS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTNFQzI1M0UxRTk1QUQzMDAwMDgzMUI5IC8q
IFByaW9yaXR5UXVldWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDUyMTUxQTgyNUIwMDQx
MjNGRiAvKiBCaW5hcnlTZW1hcGhvcmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3MzhBMTUx
QTgyNUIwMDQxMjNGRiAvKiBCaXRtYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3MzhDMTUx
QTgyNUIwMDQxMjNGRiAvKiBCaXRWZWN0b3IuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvUHJpb3JpdHlRdWV1ZS5oIGIvU291cmNlL1dURi93dGYvUHJpb3JpdHlR
dWV1ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmEyODIwOTJhOGIwYTNkYWQ4ODNlYmFhMWNlZjNiMWUwMThjNzk0
MDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Qcmlvcml0eVF1ZXVlLmgKQEAg
LTAsMCArMSwxNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gVGhpcyBjbGFzcyBpbXBs
ZW1lbnRzIGEgYmFzaWMgcHJpb3JpdHkgcXVldWUuIFRoZSBjbGFzcyBpcyBiYWNrZWQgYXMgYSBi
aW5hcnkgaGVhcCwgbGlrZSBzdGQ6OnByaW9yaXR5X3F1ZXVlLgorLy8gUHJpb3JpdHlRdWV1ZSBo
YXMgYSBjb3VwbGUgb2YgYWR2YW50YWdlcyBvdmVyIHN0ZDo6cHJpb3JpdHlfcXVldWU6CisvLwor
Ly8gMSkgVGhlIGJhY2tpbmcgdmVjdG9yIGlzIGZhc3RNYWxsb2NlZC4KKy8vIDIpIFlvdSBjYW4g
aXRlcmF0ZSB0aGUgZWxlbWVudHMuCisvLyAzKSBJdCBoYXMgaW4tcGxhY2UgZGVjcmVhc2UvaW5j
cmVhc2VLZXkgbWV0aG9kcywgYWx0aG91Z2ggdGhleSBhcmUgc3RpbGwgTyhuKSByYXRoZXIgdGhh
biBPKGxvZyhuKSkuCisvLworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBJc0hpZ2hl
clByaW9yaXR5ID0gc3RkOjpsZXNzPFQ+LCBzaXplX3QgaW5saW5lQ2FwYWNpdHkgPSAwPgorY2xh
c3MgUHJpb3JpdHlRdWV1ZSB7CisgICAgdXNpbmcgQnVmZmVyVHlwZSA9IFZlY3RvcjxULCBpbmxp
bmVDYXBhY2l0eT47CisgICAgdXNpbmcgY29uc3RfaXRlcmF0b3IgPSB0eXBlbmFtZSBCdWZmZXJU
eXBlOjpjb25zdF9pdGVyYXRvcjsKK3B1YmxpYzoKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fYnVmZmVyLnNpemUoKTsgfQorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0
dXJuIG1fYnVmZmVyLmlzRW1wdHkoKTsgfQorCisgICAgdm9pZCBlbnF1ZXVlKFQgZWxlbWVudCkK
KyAgICB7CisgICAgICAgIHNpemVfdCBsb2NhdGlvbiA9IG1fYnVmZmVyLnNpemUoKTsKKyAgICAg
ICAgbV9idWZmZXIuYXBwZW5kKHN0ZDo6Zm9yd2FyZDxUPihlbGVtZW50KSk7CisgICAgICAgIHNp
ZnRVcChsb2NhdGlvbik7CisgICAgfQorCisgICAgY29uc3QgVCYgcGVlaygpIGNvbnN0IHsgcmV0
dXJuIG1fYnVmZmVyWzBdOyB9CisgICAgVCBkZXF1ZXVlKCkKKyAgICB7CisgICAgICAgIHN0ZDo6
c3dhcChtX2J1ZmZlclswXSwgbV9idWZmZXIubGFzdCgpKTsKKyAgICAgICAgVCByZXN1bHQgPSBt
X2J1ZmZlci50YWtlTGFzdCgpOworICAgICAgICBzaWZ0RG93bigwKTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZv
aWQgZGVjcmVhc2VLZXkoY29uc3QgRnVuY3RvciYgZGVzaXJlZEVsZW1lbnQpCisgICAgeworICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYnVmZmVyLnNpemUoKTsgKytpKSB7CisgICAg
ICAgICAgICBpZiAoZGVzaXJlZEVsZW1lbnQobV9idWZmZXJbaV0pKSB7CisgICAgICAgICAgICAg
ICAgc2lmdERvd24oaSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIEFTU0VSVChpc1ZhbGlkSGVhcCgpKTsKKyAgICB9CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgaW5jcmVhc2VLZXkoY29uc3QgRnVu
Y3RvciYgZGVzaXJlZEVsZW1lbnQpCisgICAgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1fYnVmZmVyLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoZGVzaXJlZEVsZW1l
bnQobV9idWZmZXJbaV0pKSB7CisgICAgICAgICAgICAgICAgc2lmdFVwKGkpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBBU1NFUlQo
aXNWYWxpZEhlYXAoKSk7CisgICAgfQorCisgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25z
dCB7IHJldHVybiBtX2J1ZmZlci5iZWdpbigpOyB9OworICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgp
IGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyLmVuZCgpOyB9OworCisgICAgYm9vbCBpc1ZhbGlkSGVh
cCgpIGNvbnN0CisgICAgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYnVmZmVy
LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAobGVmdENoaWxkT2YoaSkgPCBtX2J1ZmZl
ci5zaXplKCkgJiYgIWlzSGlnaGVyUHJpb3JpdHkobV9idWZmZXJbaV0sIG1fYnVmZmVyW2xlZnRD
aGlsZE9mKGkpXSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
aWYgKHJpZ2h0Q2hpbGRPZihpKSA8IG1fYnVmZmVyLnNpemUoKSAmJiAhaXNIaWdoZXJQcmlvcml0
eShtX2J1ZmZlcltpXSwgbV9idWZmZXJbcmlnaHRDaGlsZE9mKGkpXSkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworcHJvdGVjdGVkOgorICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IHBhcmVudE9mKHNpemVf
dCBsb2NhdGlvbikgeyBBU1NFUlQobG9jYXRpb24pOyByZXR1cm4gKGxvY2F0aW9uIC0gMSkgLyAy
OyB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbGVmdENoaWxkT2Yoc2l6ZV90IGxvY2F0
aW9uKSB7IHJldHVybiBsb2NhdGlvbiAqIDIgKyAxOyB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBz
aXplX3QgcmlnaHRDaGlsZE9mKHNpemVfdCBsb2NhdGlvbikgeyByZXR1cm4gbGVmdENoaWxkT2Yo
bG9jYXRpb24pICsgMTsgfQorCisgICAgdm9pZCBzaWZ0VXAoc2l6ZV90IGxvY2F0aW9uKQorICAg
IHsKKyAgICAgICAgd2hpbGUgKGxvY2F0aW9uKSB7CisgICAgICAgICAgICBhdXRvIHBhcmVudCA9
IHBhcmVudE9mKGxvY2F0aW9uKTsKKyAgICAgICAgICAgIGlmIChpc0hpZ2hlclByaW9yaXR5KG1f
YnVmZmVyW3BhcmVudF0sIG1fYnVmZmVyW2xvY2F0aW9uXSkpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgICAgICBzdGQ6OnN3YXAobV9idWZmZXJbcGFyZW50XSwgbV9idWZmZXJb
bG9jYXRpb25dKTsKKyAgICAgICAgICAgIGxvY2F0aW9uID0gcGFyZW50OworICAgICAgICB9Cisg
ICAgfQorCisgICAgdm9pZCBzaWZ0RG93bihzaXplX3QgbG9jYXRpb24pCisgICAgeworICAgICAg
ICB3aGlsZSAobGVmdENoaWxkT2YobG9jYXRpb24pIDwgbV9idWZmZXIuc2l6ZSgpKSB7CisgICAg
ICAgICAgICBzaXplX3QgaGlnaGVyUHJpb3JpdHlDaGlsZDsKKyAgICAgICAgICAgIGlmIChMSUtF
TFkocmlnaHRDaGlsZE9mKGxvY2F0aW9uKSA8IG1fYnVmZmVyLnNpemUoKSkpCisgICAgICAgICAg
ICAgICAgaGlnaGVyUHJpb3JpdHlDaGlsZCA9IGlzSGlnaGVyUHJpb3JpdHkobV9idWZmZXJbbGVm
dENoaWxkT2YobG9jYXRpb24pXSwgbV9idWZmZXJbcmlnaHRDaGlsZE9mKGxvY2F0aW9uKV0pID8g
bGVmdENoaWxkT2YobG9jYXRpb24pIDogcmlnaHRDaGlsZE9mKGxvY2F0aW9uKTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBoaWdoZXJQcmlvcml0eUNoaWxkID0gbGVmdENoaWxk
T2YobG9jYXRpb24pOworCisgICAgICAgICAgICBpZiAoaXNIaWdoZXJQcmlvcml0eShtX2J1ZmZl
cltsb2NhdGlvbl0sIG1fYnVmZmVyW2hpZ2hlclByaW9yaXR5Q2hpbGRdKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgICAgIHN0ZDo6c3dhcChtX2J1ZmZlcltsb2NhdGlvbl0s
IG1fYnVmZmVyW2hpZ2hlclByaW9yaXR5Q2hpbGRdKTsKKyAgICAgICAgICAgIGxvY2F0aW9uID0g
aGlnaGVyUHJpb3JpdHlDaGlsZDsKKyAgICAgICAgfQorICAgIH0KKworICAgIFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eT4gbV9idWZmZXI7CisgICAgSXNIaWdoZXJQcmlvcml0eSBpc0hpZ2hlclBy
aW9yaXR5OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6UHJpb3JpdHlR
dWV1ZTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRl
eCA1YzYwOTFjZWI1ZDlmN2NjNzRjMTUzYjEyNTBmZWQ0MzlhNjE5ZjhjLi44Njc4OTQzNGZmMGJk
M2UxZGVhMGQ1N2JjZjdmYTcyMmMwZmRjNWRmIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cK
KysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTctMDQtMDYgIEtlaXRo
IE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIGEgUHJpb3Jp
dHlRdWV1ZSBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcwNTc5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Qcmlvcml0eVF1ZXVlLmNw
cDogQWRkZWQuCisgICAgICAgIChvcGVyYXRvciAgX3ogKToKKyAgICAgICAgKGVucXVldWUpOgor
ICAgICAgICAoZGVxdWV1ZSk6CisgICAgICAgIChURVNUKToKKyAgICAgICAgKENvbXBhcmVNb3Zl
OjpvcGVyYXRvcigpKToKKwogMjAxNy0wNC0wNSAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBh
cHBsZS5jb20+CiAKICAgICAgICAgd2Via2l0cHk6IEFkZCBwaWQgbG9nZ2luZyBmb3Igc2ltdWxh
dG9yIHByb2Nlc3NlcwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0
QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RX
ZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBkN2VlNzE4MTQ1YThkNTNk
NzQ1YzI2YjIxYzcwNDBjNzZjNDU3MmZhLi40MTQzNmE2NmE2MzhkYWFmZmQ0NDczNWJjZjNlMGRl
MDE5MTBmYWRiIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEku
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RX
ZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTcwLDYgKzE3MCw3IEBACiAJ
CTUzMUMxRDhFMURGOEVGNzIwMDZFOTc5RiAvKiBMRUJEZWNvZGVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMUMxRDhEMURGOEVGNzIwMDZFOTc5
RiAvKiBMRUJEZWNvZGVyLmNwcCAqLzsgfTsKIAkJNTM2NzcwMzQxQ0M4MDIyODAwRDQyNUIxIC8q
IFdlYlNjcmlwdE9iamVjdERlc2NyaXB0aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTM2NzcwMzMxQ0M4MDIyODAwRDQyNUIxIC8qIFdlYlNjcmlw
dE9iamVjdERlc2NyaXB0aW9uLm1tICovOyB9OwogCQk1MzY3NzAzNjFDQzgxQjYxMDBENDI1QjEg
LyogV2ViU2NyaXB0T2JqZWN0RGVzY3JpcHRpb24uaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzY3NzAzNTFDQzgxMkY5MDBENDI1QjEg
LyogV2ViU2NyaXB0T2JqZWN0RGVzY3JpcHRpb24uaHRtbCAqLzsgfTsKKwkJNTNFQzI1NDExRTk2
RkQ4NzAwMDgzMUI5IC8qIFByaW9yaXR5UXVldWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNFQzI1M0YxRTk2QkM4MDAwMDgzMUI5IC8qIFByaW9y
aXR5UXVldWUuY3BwICovOyB9OwogCQk1NTk3RjgzNjFEOTU5NkM4MDA2NkJDMjEgLyogU3luY2hy
b25pemVkRml4ZWRRdWV1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1NTk3RjgzNDFEOTU5NkM4MDA2NkJDMjEgLyogU3luY2hyb25pemVkRml4ZWRR
dWV1ZS5jcHAgKi87IH07CiAJCTU3MTRFQ0I5MUNBOEI1QjAwMDA1MUFDOCAvKiBEb3dubG9hZFJl
cXVlc3RPcmlnaW5hbFVSTC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDU3MTRFQ0I4MUNBOEI1ODgwMDA1MUFDOCAvKiBEb3dubG9hZFJl
cXVlc3RPcmlnaW5hbFVSTC5odG1sICovOyB9OwogCQk1NzE0RUNCQjFDQThCRkU0MDAwNTFBQzgg
LyogRG93bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkxGcmFtZS5odG1sIGluIENvcHkgUmVzb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MTRFQ0JBMUNBOEJGRDEwMDA1
MUFDOCAvKiBEb3dubG9hZFJlcXVlc3RPcmlnaW5hbFVSTEZyYW1lLmh0bWwgKi87IH07CkBAIC0x
MDg3LDYgKzEwODgsNyBAQAogCQk1MzFDMUQ4RDFERjhFRjcyMDA2RTk3OUYgLyogTEVCRGVjb2Rl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMRUJEZWNvZGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM2NzcwMzMxQ0M4MDIyODAwRDQyNUIx
IC8qIFdlYlNjcmlwdE9iamVjdERlc2NyaXB0aW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gV2ViU2NyaXB0T2JqZWN0RGVzY3JpcHRpb24ubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNjc3MDM1MUNDODEyRjkwMEQ0MjVCMSAvKiBXZWJTY3Jp
cHRPYmplY3REZXNjcmlwdGlvbi5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gV2Vi
U2NyaXB0T2JqZWN0RGVzY3JpcHRpb24uaHRtbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTNFQzI1M0YxRTk2QkM4MDAwMDgzMUI5IC8qIFByaW9yaXR5UXVldWUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJpb3JpdHlRdWV1ZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1OTdGODM0MUQ5NTk2QzgwMDY2QkMyMSAvKiBTeW5jaHJv
bml6ZWRGaXhlZFF1ZXVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFN5bmNocm9uaXplZEZpeGVkUXVldWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1NzE0RUNCODFDQThCNTg4MDAwNTFBQzggLyogRG93bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkwu
aHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9IERvd25sb2FkUmVxdWVzdE9yaWdpbmFs
VVJMLmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MTRFQ0JBMUNBOEJGRDEw
MDA1MUFDOCAvKiBEb3dubG9hZFJlcXVlc3RPcmlnaW5hbFVSTEZyYW1lLmh0bWwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0Lmh0bWw7IHBhdGggPSBEb3dubG9hZFJlcXVlc3RPcmlnaW5hbFVSTEZyYW1lLmh0bWw7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDk3LDYgKzIwOTksNyBAQAogCQkJCTFB
RkRFNjU0MTk1M0IyQzAwMEM0OEZGQSAvKiBPcHRpb25hbC5jcHAgKi8sCiAJCQkJQ0U1MEQ4Qzgx
Qzg2NjVDRTAwNzJFQTVBIC8qIE9wdGlvblNldC5jcHAgKi8sCiAJCQkJMEZFNDQ3OTcxQjc2RjFF
MzAwOTQ5OEVCIC8qIFBhcmtpbmdMb3QuY3BwICovLAorCQkJCTUzRUMyNTNGMUU5NkJDODAwMDA4
MzFCOSAvKiBQcmlvcml0eVF1ZXVlLmNwcCAqLywKIAkJCQkwRkM2QzRDQjE0MTAyN0UwMDA1QjdG
MEMgLyogUmVkQmxhY2tUcmVlLmNwcCAqLywKIAkJCQk5M0E0MjdBQTE4MERBMjY0MDBDRDI0RDcg
LyogUmVmLmNwcCAqLywKIAkJCQk4NkJEMTk5NzFBMkRCMDVCMDA2RENGMEEgLyogUmVmQ291bnRl
ci5jcHAgKi8sCkBAIC0yNjQzLDYgKzI2NDYsNyBAQAogCQkJCTFBNzdCQUEzMUQ5QUZGRkMwMDVG
QzU2OCAvKiBPcHRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGMDIxRDBBNTkw
QzAwRkVCQ0YzIC8qIE9TT2JqZWN0UHRyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjU5
MUQwQTU5MEMwMEZFQkNGMyAvKiBQYXJraW5nTG90LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUz
RUMyNTQxMUU5NkZEODcwMDA4MzFCOSAvKiBQcmlvcml0eVF1ZXVlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTdDODNERjEzMUQwQTU5MEMwMEZFQkNGMyAvKiBSZWRCbGFja1RyZWUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0M4M0RGMTQxRDBBNTkwQzAwRkVCQ0YzIC8qIFJlZi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk3QzgzREYxNTFEMEE1OTBDMDBGRUJDRjMgLyogUmVmQ291bnRlci5jcHAg
aW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L1ByaW9yaXR5UXVldWUuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUHJpb3Jp
dHlRdWV1ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2JlMmM0ZGJkZjRjMmIwOTkyNjA5NmVmYWI4MTkyMTEw
ZTk2NTczZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L1ByaW9yaXR5UXVldWUuY3BwCkBAIC0wLDAgKzEsMjU2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiTW92ZU9ubHkuaCIKKworI2luY2x1ZGUgPHR5cGVf
dHJhaXRzPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1ByaW9yaXR5
UXVldWUuaD4KKworY29uc3RleHByIHN0ZDo6c2l6ZV90IG9wZXJhdG9yICIiIF96ICggdW5zaWdu
ZWQgbG9uZyBsb25nIG4gKSB7IHJldHVybiBuOyB9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIENvbXBhcmU+CitzdGF0aWMgdm9pZCBlbnF1ZXVlKFByaW9yaXR5UXVldWU8VCwgQ29t
cGFyZT4mIHF1ZXVlLCBUIGVsZW1lbnQpCit7CisgICAgc2l6ZV90IHNpemVCZWZvcmUgPSBxdWV1
ZS5zaXplKCk7CisgICAgcXVldWUuZW5xdWV1ZShXVEZNb3ZlKGVsZW1lbnQpKTsKKyAgICBFWFBF
Q1RfRVEoc2l6ZUJlZm9yZSArIDEsIHF1ZXVlLnNpemUoKSk7CisgICAgRVhQRUNUX0ZBTFNFKHF1
ZXVlLmlzRW1wdHkoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIENvbXBh
cmU+CitzdGF0aWMgVCBkZXF1ZXVlKFByaW9yaXR5UXVldWU8VCwgQ29tcGFyZT4mIHF1ZXVlKQor
eworICAgIEVYUEVDVF9GQUxTRShxdWV1ZS5pc0VtcHR5KCkpOworICAgIHNpemVfdCBzaXplQmVm
b3JlID0gcXVldWUuc2l6ZSgpOworICAgIFQgcmVzdWx0ID0gcXVldWUuZGVxdWV1ZSgpOworICAg
IEVYUEVDVF9FUShzaXplQmVmb3JlIC0gMSwgcXVldWUuc2l6ZSgpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCisKK1RFU1QoV1RGX1ByaW9yaXR5UXVldWUsIEJhc2ljKQoreworICAgIGNvbnN0
IHVuc2lnbmVkIG51bUVsZW1lbnRzID0gMTA7CisgICAgUHJpb3JpdHlRdWV1ZTx1bnNpZ25lZD4g
cXVldWU7CisKKyAgICBFWFBFQ1RfRVEoMF96LCBxdWV1ZS5zaXplKCkpOworICAgIEVYUEVDVF9U
UlVFKHF1ZXVlLmlzRW1wdHkoKSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVt
RWxlbWVudHM7ICsraSkKKyAgICAgICAgZW5xdWV1ZShxdWV1ZSwgaSk7CisKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7ICsraSkgeworICAgICAgICBFWFBFQ1RfRVEo
aSwgcXVldWUucGVlaygpKTsKKyAgICAgICAgRVhQRUNUX0VRKGksIGRlcXVldWUocXVldWUpKTsK
KyAgICAgICAgRVhQRUNUX0VRKG51bUVsZW1lbnRzIC0gaSAtIDEsIHF1ZXVlLnNpemUoKSk7Cisg
ICAgfQorCisgICAgRVhQRUNUX1RSVUUocXVldWUuaXNFbXB0eSgpKTsKK30KKworVEVTVChXVEZf
UHJpb3JpdHlRdWV1ZSwgQ3VzdG9tUHJpb3JpdHlGdW5jdGlvbikKK3sKKyAgICBjb25zdCB1bnNp
Z25lZCBudW1FbGVtZW50cyA9IDEwOworICAgIFByaW9yaXR5UXVldWU8dW5zaWduZWQsIHN0ZDo6
Z3JlYXRlcjx1bnNpZ25lZD4+IHF1ZXVlOworCisgICAgRVhQRUNUX0VRKDBfeiwgcXVldWUuc2l6
ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRShxdWV1ZS5pc0VtcHR5KCkpOworCisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyArK2kpIHsKKyAgICAgICAgZW5xdWV1ZShxdWV1
ZSwgaSk7CisgICAgICAgIEVYUEVDVF9FUShpICsgMSwgcXVldWUuc2l6ZSgpKTsKKyAgICAgICAg
RVhQRUNUX0ZBTFNFKHF1ZXVlLmlzRW1wdHkoKSk7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyArK2kpIHsKKyAgICAgICAgRVhQRUNUX0VRKG51bUVs
ZW1lbnRzIC0gaSAtIDEsIHF1ZXVlLnBlZWsoKSk7CisgICAgICAgIEVYUEVDVF9FUShudW1FbGVt
ZW50cyAtIGkgLSAxLCBkZXF1ZXVlKHF1ZXVlKSk7CisgICAgICAgIEVYUEVDVF9FUShudW1FbGVt
ZW50cyAtIGkgLSAxLCBxdWV1ZS5zaXplKCkpOworICAgIH0KKworICAgIEVYUEVDVF9UUlVFKHF1
ZXVlLmlzRW1wdHkoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbXBhcmF0b3I+CitzdHJ1
Y3QgQ29tcGFyZU1vdmUgeworICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBNb3ZlT25seSYgbTEs
IGNvbnN0IE1vdmVPbmx5JiBtMikgY29uc3QgeyByZXR1cm4gY29tcGFyYXRvcihtMS52YWx1ZSgp
LCBtMi52YWx1ZSgpKTsgfQorCisgICAgQ29tcGFyYXRvciBjb21wYXJhdG9yOworfTsKKworVEVT
VChXVEZfUHJpb3JpdHlRdWV1ZSwgTW92ZU9ubHkpCit7CisgICAgUHJpb3JpdHlRdWV1ZTxNb3Zl
T25seSwgQ29tcGFyZU1vdmU8c3RkOjpsZXNzPHVuc2lnbmVkPj4+IHF1ZXVlOworCisgICAgVmVj
dG9yPHVuc2lnbmVkPiB2YWx1ZXMgPSB7IDIzLCA1NCwgNCwgOCwgMSwgMiwgNCwgMCB9OworICAg
IFZlY3Rvcjx1bnNpZ25lZD4gc29ydGVkID0gdmFsdWVzOworICAgIHN0ZDo6c29ydChzb3J0ZWQu
YmVnaW4oKSwgc29ydGVkLmVuZCgpKTsKKworICAgIGZvciAoYXV0byB2YWx1ZSA6IHZhbHVlcykK
KyAgICAgICAgcXVldWUuZW5xdWV1ZShNb3ZlT25seSh2YWx1ZSkpOworCisgICAgZm9yIChhdXRv
IHNvcnRlZFZhbHVlIDogc29ydGVkKSB7CisgICAgICAgIGF1dG8gdmFsdWUgPSBxdWV1ZS5kZXF1
ZXVlKCk7CisgICAgICAgIEVYUEVDVF9FUShzb3J0ZWRWYWx1ZSwgdmFsdWUudmFsdWUoKSk7Cisg
ICAgfQorfQorCitURVNUKFdURl9Qcmlvcml0eVF1ZXVlLCBEZWNyZWFzZUtleSkKK3sKKyAgICBQ
cmlvcml0eVF1ZXVlPE1vdmVPbmx5LCBDb21wYXJlTW92ZTxzdGQ6Omxlc3M8dW5zaWduZWQ+Pj4g
cXVldWU7CisKKyAgICBWZWN0b3I8dW5zaWduZWQ+IHZhbHVlcyA9IHsgMjMsIDU0LCA0LCA4LCAx
LCAyLCA0LCAwIH07CisgICAgVmVjdG9yPHVuc2lnbmVkPiBzb3J0ZWQgPSB2YWx1ZXM7CisgICAg
c29ydGVkWzNdID0gMTI7CisgICAgc3RkOjpzb3J0KHNvcnRlZC5iZWdpbigpLCBzb3J0ZWQuZW5k
KCkpOworCisgICAgZm9yIChhdXRvIHZhbHVlIDogdmFsdWVzKQorICAgICAgICBxdWV1ZS5lbnF1
ZXVlKE1vdmVPbmx5KHZhbHVlKSk7CisKKyAgICBxdWV1ZS5kZWNyZWFzZUtleShbXSAoTW92ZU9u
bHkmIG0pIHsKKyAgICAgICAgaWYgKG0udmFsdWUoKSA9PSA4KSB7CisgICAgICAgICAgICBtID0g
TW92ZU9ubHkoMTIpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0pOworCisgICAgZm9yIChhdXRvIHNvcnRlZFZhbHVlIDog
c29ydGVkKSB7CisgICAgICAgIGF1dG8gdmFsdWUgPSBxdWV1ZS5kZXF1ZXVlKCk7CisgICAgICAg
IEVYUEVDVF9FUShzb3J0ZWRWYWx1ZSwgdmFsdWUudmFsdWUoKSk7CisgICAgfQorfQorCitURVNU
KFdURl9Qcmlvcml0eVF1ZXVlLCBJbmNyZWFzZUtleSkKK3sKKyAgICBQcmlvcml0eVF1ZXVlPE1v
dmVPbmx5LCBDb21wYXJlTW92ZTxzdGQ6OmdyZWF0ZXI8dW5zaWduZWQ+Pj4gcXVldWU7CisKKyAg
ICBWZWN0b3I8dW5zaWduZWQ+IHZhbHVlcyA9IHsgMjMsIDU0LCA0LCA4LCAxLCAyLCA0LCAwIH07
CisgICAgVmVjdG9yPHVuc2lnbmVkPiBzb3J0ZWQgPSB2YWx1ZXM7CisgICAgc29ydGVkWzNdID0g
MTI7CisgICAgc3RkOjpzb3J0KHNvcnRlZC5iZWdpbigpLCBzb3J0ZWQuZW5kKCksIHN0ZDo6Z3Jl
YXRlcjx1bnNpZ25lZD4oKSk7CisKKyAgICBmb3IgKGF1dG8gdmFsdWUgOiB2YWx1ZXMpCisgICAg
ICAgIHF1ZXVlLmVucXVldWUoTW92ZU9ubHkodmFsdWUpKTsKKworICAgIHF1ZXVlLmluY3JlYXNl
S2V5KFtdIChNb3ZlT25seSYgbSkgeworICAgICAgICBpZiAobS52YWx1ZSgpID09IDgpIHsKKyAg
ICAgICAgICAgIG0gPSBNb3ZlT25seSgxMik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSk7CisKKyAgICBmb3IgKGF1dG8g
c29ydGVkVmFsdWUgOiBzb3J0ZWQpIHsKKyAgICAgICAgYXV0byB2YWx1ZSA9IHF1ZXVlLmRlcXVl
dWUoKTsKKyAgICAgICAgRVhQRUNUX0VRKHNvcnRlZFZhbHVlLCB2YWx1ZS52YWx1ZSgpKTsKKyAg
ICB9Cit9CisKK1RFU1QoV1RGX1ByaW9yaXR5UXVldWUsIEl0ZXJhdGlvbikKK3sKKyAgICBQcmlv
cml0eVF1ZXVlPE1vdmVPbmx5LCBDb21wYXJlTW92ZTxzdGQ6OmdyZWF0ZXI8dW5zaWduZWQ+Pj4g
cXVldWU7CisKKyAgICBWZWN0b3I8dW5zaWduZWQ+IHZhbHVlcyA9IHsgMjMsIDU0LCA0LCA4LCAx
LCAyLCA0LCAwIH07CisgICAgVmVjdG9yPHVuc2lnbmVkPiBzb3J0ZWQgPSB2YWx1ZXM7CisgICAg
c3RkOjpzb3J0KHNvcnRlZC5iZWdpbigpLCBzb3J0ZWQuZW5kKCksIHN0ZDo6Z3JlYXRlcjx1bnNp
Z25lZD4oKSk7CisKKyAgICBmb3IgKGF1dG8gdmFsdWUgOiB2YWx1ZXMpCisgICAgICAgIHF1ZXVl
LmVucXVldWUoTW92ZU9ubHkodmFsdWUpKTsKKworICAgIHZhbHVlcy5jbGVhcigpOworICAgIGZv
ciAoYXV0byYgZWxlbWVudCA6IHF1ZXVlKQorICAgICAgICB2YWx1ZXMuYXBwZW5kKGVsZW1lbnQu
dmFsdWUoKSk7CisKKyAgICBzdGQ6OnNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5lbmQoKSwg
c3RkOjpncmVhdGVyPHVuc2lnbmVkPigpKTsKKyAgICBFWFBFQ1RfRVEodmFsdWVzLnNpemUoKSwg
c29ydGVkLnNpemUoKSk7CisgICAgaWYgKHZhbHVlcy5zaXplKCkgPT0gc29ydGVkLnNpemUoKSkg
eworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkKKyAg
ICAgICAgICAgIEVYUEVDVF9FUShzb3J0ZWRbaV0sIHZhbHVlc1tpXSk7CisgICAgfQorfQorCitU
RVNUKFdURl9Qcmlvcml0eVF1ZXVlLCBSYW5kb21BY3Rpb25zKQoreworICAgIGNvbnN0IHVpbnQ2
NF90IHByaW1lMSA9IDE1NDg3MjM3OworICAgIGNvbnN0IHVpbnQ2NF90IHByaW1lMiA9IDE3OTQy
ODI4MzsKKyAgICB1aW50NjRfdCByYW5kb21OdW1iZXIgPSAxOTQwNTcwOTsKKworICAgIGF1dG8g
bmV4dFJhbmRvbSA9IFsmXSAoKSAtPiB1aW50NjRfdCB7CisgICAgICAgIHJhbmRvbU51bWJlciA9
IHJhbmRvbU51bWJlciAqIHByaW1lMSArIHByaW1lMjsKKyAgICAgICAgcmV0dXJuIHJhbmRvbU51
bWJlcjsKKyAgICB9OworCisgICAgUHJpb3JpdHlRdWV1ZTx1aW50NjRfdD4gcXVldWU7CisgICAg
VmVjdG9yPHVpbnQ2NF90PiB2YWx1ZXM7CisKKyAgICBlbnVtIENhc2VzIHsKKyAgICAgICAgRW5x
dWV1ZSwKKyAgICAgICAgRGVxdWV1ZSwKKyAgICAgICAgTnVtYmVyT2ZDYXNlcworICAgIH07CisK
KyAgICAvLyBTZWVkIHRoZSBxdWV1ZS4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTAw
OyArK2kpIHsKKyAgICAgICAgYXV0byBudW1iZXIgPSBuZXh0UmFuZG9tKCk7CisgICAgICAgIHF1
ZXVlLmVucXVldWUobnVtYmVyKTsKKyAgICAgICAgdmFsdWVzLmFwcGVuZChudW1iZXIpOworICAg
ICAgICBFWFBFQ1RfVFJVRShxdWV1ZS5pc1ZhbGlkSGVhcCgpKTsKKyAgICB9CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICBhdXRvIG51bWJlciA9
IG5leHRSYW5kb20oKTsKKyAgICAgICAgc3dpdGNoIChudW1iZXIgJSBOdW1iZXJPZkNhc2VzKSB7
CisgICAgICAgIGNhc2UgRW5xdWV1ZTogeworICAgICAgICAgICAgcXVldWUuZW5xdWV1ZShudW1i
ZXIpOworICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChudW1iZXIpOworICAgICAgICAgICAgRVhQ
RUNUX1RSVUUocXVldWUuaXNWYWxpZEhlYXAoKSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEodmFs
dWVzLnNpemUoKSwgcXVldWUuc2l6ZSgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisKKyAgICAgICAgY2FzZSBEZXF1ZXVlOiB7CisgICAgICAgICAgICBFWFBFQ1RfRVEodmFs
dWVzLnNpemUoKSwgcXVldWUuc2l6ZSgpKTsKKyAgICAgICAgICAgIGlmICh2YWx1ZXMuc2l6ZSgp
ICE9IHF1ZXVlLnNpemUoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAg
aWYgKCF2YWx1ZXMuc2l6ZSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
ICAgICAvLyBTb3J0IHdpdGggZ3JlYXRlciBzbyB0aGUgbGFzdCBlbGVtZW50IHNob3VsZCBiZSB0
aGUgb25lIHdlIGRlcXVldWUuCisgICAgICAgICAgICBzdGQ6OnNvcnQodmFsdWVzLmJlZ2luKCks
IHZhbHVlcy5lbmQoKSwgc3RkOjpncmVhdGVyPHVpbnQ2NF90PigpKTsKKyAgICAgICAgICAgIEVY
UEVDVF9FUSh2YWx1ZXMudGFrZUxhc3QoKSwgcXVldWUuZGVxdWV1ZSgpKTsKKworICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgRVhQRUNUX1RS
VUUocXVldWUuaXNWYWxpZEhlYXAoKSk7CisgICAgfQorfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306536</attachid>
            <date>2017-04-07 14:40:07 -0700</date>
            <delta_ts>2017-04-07 14:40:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-170579-20170407144005.patch</filename>
            <type>text/plain</type>
            <size>40464</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE0OTcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
MmIzMzU5NmFhYmI4ZTQ3YTdjYTJkOTEwNzA0YmVjOTExNTc1ZjdhLi41ZGFhNTQ0YWM2MGRmZTEz
MGY2NjhlOTViMzkwNTJlYWFhMWNkODUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMCBAQAorMjAxNy0wNC0wNyAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBBZGQgYSBQcmlvcml0eVF1ZXVlIGNsYXNzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA1NzkKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgV2FzbTo6V29ya2xpc3Qg
dG8gdXNlIFdURjo6UHJpb3JpdHlRdWV1ZS4KKworICAgICAgICAqIHdhc20vV2FzbVdvcmtsaXN0
LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OmVucXVldWUpOgorICAgICAgICAo
SlNDOjpXYXNtOjpXb3JrbGlzdDo6Y29tcGxldGVQbGFuU3luY2hyb25vdXNseSk6CisgICAgICAg
IChKU0M6Oldhc206OldvcmtsaXN0OjpzdG9wQWxsUGxhbnNGb3JWTSk6CisgICAgICAgIChKU0M6
Oldhc206OldvcmtsaXN0Ojp+V29ya2xpc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpXb3JrbGlz
dDo6aXRlcmF0ZSk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XYXNtV29ya2xpc3QuaDoKKwor
ICAgICAgICAqIHdhc20vV2FzbVdvcmtsaXN0LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6V29y
a2xpc3Q6OmVucXVldWUpOgorICAgICAgICAoSlNDOjpXYXNtOjpXb3JrbGlzdDo6Y29tcGxldGVQ
bGFuU3luY2hyb25vdXNseSk6CisgICAgICAgIChKU0M6Oldhc206OldvcmtsaXN0OjpzdG9wQWxs
UGxhbnNGb3JWTSk6CisgICAgICAgIChKU0M6Oldhc206OldvcmtsaXN0Ojp+V29ya2xpc3QpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpXb3JrbGlzdDo6aXRlcmF0ZSk6IERlbGV0ZWQuCisgICAgICAg
ICogd2FzbS9XYXNtV29ya2xpc3QuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6Omlz
SGlnaGVyUHJpb3JpdHkpOgorICAgICAgICAoSlNDOjpXYXNtOjpXb3JrbGlzdDo6Q29tcGFyYXRv
cjo6b3BlcmF0b3IoKSk6IERlbGV0ZWQuCisKIDIwMTctMDQtMDUgIEtlaXRoIE1pbGxlciAgPGtl
aXRoX21pbGxlckBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViQXNzZW1ibHk6IFBsYW5zIHNob3Vs
ZCBiZSBhYmxlIHRvIGhhdmUgbW9yZSB0aGFuIG9uZSBjb21wbGV0aW9uIHRhc2suCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDE0
ZTA5MzY3NGYyYzg4MDk4NDI3MGZkMTQ5NWZjMDE2ODVlNGI3ZjkuLjAzNTdhYTk4ZWI4YzJjNmM3
N2E0YTkyOTg5Y2JlNWVhNTkzZTEzYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDggQEAKKzIwMTctMDQtMDcg
IEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIGEg
UHJpb3JpdHlRdWV1ZSBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTcwNTc5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIGEgbmV3IFByaW9yaXR5UXVldWUgY2xhc3MgdGhh
dCBpcyBiYWNrZWQgYnkKKyAgICAgICAgV1RGOjpWZWN0b3IuICBJdCBhbHNvIGhhcyBhIG51bWJl
ciBvZiBvdGhlciBuaWNldGllcyBzdWNoIGFzIGJlaW5nCisgICAgICAgIGFibGUgdG8gaXRlcmF0
ZSB0aGUgcXVldWUgYW5kIGluY3JlYXNlIG9yIGRlY3JlYXNlIGtleXMuCisKKyAgICAgICAgT25l
IG5vdGUgaXMgdGhhdCBpbmNyZWFzZUtleSBhbmQgZGVjcmVhc2VLZXkgYXJlIE8obikgcmF0aGVy
IHRoYW4KKyAgICAgICAgTyhsb2cobikpLiAgVHJhZGl0aW9uYWxseSwgdGhlIGxvb2t1cCBvZiB0
aGUga2V5IGlzIGRvbmUgd2l0aCBhCisgICAgICAgIGhhc2ggbWFwIGJ1dCB0aGF0J3Mgbm90IGZl
YXNpYmxlIGhlcmUuICBUaGlzIGlzIGJlY2F1c2UgdW5sZXNzIHRoZQorICAgICAgICBxdWV1ZSdz
IGVsZW1lbnQgdHlwZSBpcyBhIHBvaW50ZXIgdGhlcmUgaXMgbm8gZ29vZCB3YXkgbWFpbnRhaW4g
YQorICAgICAgICBwZXJzaXN0ZW50IHJlZmVyZW5jZSB0byBldmVyeSBlbnRyeSBpbiB0aGUgcXVl
dWUgd2hpbGUgd2Ugc2lmdC4KKyAgICAgICAgVGhlIG9ubHkgd2F5IHRvIHVwZGF0ZSB0aGUgbG9j
YXRpb24gb2YgYW4gZW50cnkgaXMgdG8gZG8gYSBoYXNoCisgICAgICAgIHRhYmxlIGxvb2t1cCB3
aXRoIHRoZSBlbnRyeSdzIGhhc2ggYnV0IHRoaXMgaXMgcHJvYmFibHkgbW9yZQorICAgICAgICBl
eHBlbnNpdmUgdGhhbiBqdXN0IGRvaW5nIGEgbGluZWFyIHNlYXJjaC4KKworICAgICAgICBBbHNv
LCBhZGQgY29tcGFyaXNvbiBvcGVyYXRvciBmdW5jdGlvbnMsIHdoaWNoIGNhbiBiZSBwYXNzZWQg
dG8gUHJpb3JpdHlRdWV1ZS4KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIHd0Zi9NYXRoRXh0cmFzLmg6CisgICAgICAgIChpc0xlc3NUaGFuKToK
KyAgICAgICAgKGlzTGVzc1RoYW5FcXVhbCk6CisgICAgICAgIChpc0dyZWF0ZXJUaGFuKToKKyAg
ICAgICAgKGlzR3JlYXRlclRoYW5FcXVhbCk6CisgICAgICAgICogd3RmL1ByaW9yaXR5UXVldWUu
aDogQWRkZWQuCisgICAgICAgIChXVEY6OlByaW9yaXR5UXVldWU6OnNpemUpOgorICAgICAgICAo
V1RGOjpQcmlvcml0eVF1ZXVlOjppc0VtcHR5KToKKyAgICAgICAgKFdURjo6UHJpb3JpdHlRdWV1
ZTo6ZW5xdWV1ZSk6CisgICAgICAgIChXVEY6OlByaW9yaXR5UXVldWU6OnBlZWspOgorICAgICAg
ICAoV1RGOjpQcmlvcml0eVF1ZXVlOjpkZXF1ZXVlKToKKyAgICAgICAgKFdURjo6UHJpb3JpdHlR
dWV1ZTo6ZGVjcmVhc2VLZXkpOgorICAgICAgICAoV1RGOjpQcmlvcml0eVF1ZXVlOjppbmNyZWFz
ZUtleSk6CisgICAgICAgIChXVEY6OlByaW9yaXR5UXVldWU6OmJlZ2luKToKKyAgICAgICAgKFdU
Rjo6UHJpb3JpdHlRdWV1ZTo6ZW5kKToKKyAgICAgICAgKFdURjo6UHJpb3JpdHlRdWV1ZTo6aXNW
YWxpZEhlYXApOgorICAgICAgICAoV1RGOjpQcmlvcml0eVF1ZXVlOjpwYXJlbnRPZik6CisgICAg
ICAgIChXVEY6OlByaW9yaXR5UXVldWU6OmxlZnRDaGlsZE9mKToKKyAgICAgICAgKFdURjo6UHJp
b3JpdHlRdWV1ZTo6cmlnaHRDaGlsZE9mKToKKyAgICAgICAgKFdURjo6UHJpb3JpdHlRdWV1ZTo6
c2lmdFVwKToKKyAgICAgICAgKFdURjo6UHJpb3JpdHlRdWV1ZTo6c2lmdERvd24pOgorCiAyMDE3
LTA0LTA1ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCiAgICAgICAg
IFtKU0NdIFN1cHByZXNzIHdhcm5pbmdzIGluIEdDQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21Xb3JrbGlzdC5jcHAKaW5kZXggZmRhMDZhNzMzZGJmMjA2OTE2OWMwZmIxNGY5ZDA1
Y2NmY2JhMzFmMS4uNjExZDQyOGVmNzcyMGI3ZDRmOWVkOGY2NzA2ZGE0YzE5ZTI1MWEzMiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuY3BwCkBAIC02NywxNiAr
NjcsMTUgQEAgcHJvdGVjdGVkOgogICAgICAgICBhdXRvJiBxdWV1ZSA9IHdvcmtsaXN0Lm1fcXVl
dWU7CiAgICAgICAgIHN5bmNocm9uaXplLm5vdGlmeUFsbCgpOwogCi0gICAgICAgIHdoaWxlICgh
cXVldWUuZW1wdHkoKSkgewotCi0gICAgICAgICAgICBQcmlvcml0eSBwcmlvcml0eSA9IHF1ZXVl
LnRvcCgpLnByaW9yaXR5OworICAgICAgICB3aGlsZSAoIXF1ZXVlLmlzRW1wdHkoKSkgeworICAg
ICAgICAgICAgUHJpb3JpdHkgcHJpb3JpdHkgPSBxdWV1ZS5wZWVrKCkucHJpb3JpdHk7CiAgICAg
ICAgICAgICBpZiAocHJpb3JpdHkgPT0gV29ya2xpc3Q6OlByaW9yaXR5OjpTaHV0ZG93bikKICAg
ICAgICAgICAgICAgICByZXR1cm4gUG9sbFJlc3VsdDo6U3RvcDsKIAotICAgICAgICAgICAgZWxl
bWVudCA9IHF1ZXVlLnRvcCgpOworICAgICAgICAgICAgZWxlbWVudCA9IHF1ZXVlLnBlZWsoKTsK
ICAgICAgICAgICAgIC8vIE9ubHkgb25lIHRocmVhZCBzaG91bGQgdmFsaWRhdGUvcHJlcGFyZS4K
LSAgICAgICAgICAgIGlmICghcXVldWUudG9wKCkucGxhbi0+aGFzQmVlblByZXBhcmVkKCkpIHsK
LSAgICAgICAgICAgICAgICBxdWV1ZS5wb3AoKTsKKyAgICAgICAgICAgIGlmICghcXVldWUucGVl
aygpLnBsYW4tPmhhc0JlZW5QcmVwYXJlZCgpKSB7CisgICAgICAgICAgICAgICAgcXVldWUuZGVx
dWV1ZSgpOwogICAgICAgICAgICAgICAgIHJldHVybiBQb2xsUmVzdWx0OjpXb3JrOwogICAgICAg
ICAgICAgfQogCkBAIC04NCw3ICs4Myw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgICAgICAgICBy
ZXR1cm4gUG9sbFJlc3VsdDo6V29yazsKIAogICAgICAgICAgICAgLy8gVGhlcmUgbXVzdCBiZSBh
IGFub3RoZXIgdGhyZWFkIGxpbmtpbmcgdGhpcyBwbGFuIHNvIHdlIGNhbiBkZXF1ZSBhbmQgc2Vl
IGlmIHRoZXJlIGlzIG90aGVyIHdvcmsuCi0gICAgICAgICAgICBxdWV1ZS5wb3AoKTsKKyAgICAg
ICAgICAgIHF1ZXVlLmRlcXVldWUoKTsKICAgICAgICAgICAgIGVsZW1lbnQgPSBRdWV1ZUVsZW1l
bnQoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gUG9sbFJlc3VsdDo6V2FpdDsKQEAgLTEw
OCwyMiArMTA3LDEyIEBAIHByb3RlY3RlZDoKIAogICAgICAgICAgICAgTG9ja0hvbGRlciBsb2Nr
ZXIoKndvcmtsaXN0Lm1fbG9jayk7CiAgICAgICAgICAgICBlbGVtZW50LnNldFRvTmV4dFByaW9y
aXR5KCk7Ci0gICAgICAgICAgICB3b3JrbGlzdC5tX3F1ZXVlLnB1c2goZWxlbWVudCk7CisgICAg
ICAgICAgICB3b3JrbGlzdC5tX3F1ZXVlLmVucXVldWUoV1RGTW92ZShlbGVtZW50KSk7CiAgICAg
ICAgICAgICB3b3JrbGlzdC5tX3BsYW5FbnF1ZXVlZC0+bm90aWZ5QWxsKGxvY2tlcik7CisgICAg
ICAgICAgICByZXR1cm4gY29tcGxldGUoKTsKICAgICAgICAgfQogCi0gICAgICAgIC8vIEZJWE1F
OiB0aGlzIHNob3VsZCBjaGVjayBpbiBvY2Nhc2lvbmFsbHkgdG8gc2VlIGlmIHRoZXJlIGFyZSBu
ZXcsIGhpZ2hlciBwcmlvcml0eSBlLmcuIHN5bmNocm9ub3VzLCBwbGFucyB0aGF0IG5lZWQgdG8g
YmUgcnVuLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTcwMjA0CiAgICAgICAgIHBsYW4tPmNvbXBpbGVGdW5jdGlvbnMoUGxhbjo6UGFydGlhbCk7
Ci0KLSAgICAgICAgaWYgKCFwbGFuLT5oYXNXb3JrKCkpIHsKLSAgICAgICAgICAgIExvY2tIb2xk
ZXIgbG9ja2VyKCp3b3JrbGlzdC5tX2xvY2spOwotICAgICAgICAgICAgYXV0byBxdWV1ZSA9IHdv
cmtsaXN0Lm1fcXVldWU7Ci0gICAgICAgICAgICAvLyBBbm90aGVyIHRocmVhZCBtYXkgaGF2ZSBy
ZW1vdmVkIG91ciBwbGFuIGZyb20gdGhlIHF1ZXVlIGFscmVhZHkuCi0gICAgICAgICAgICBpZiAo
IXF1ZXVlLmVtcHR5KCkgJiYgcXVldWUudG9wKCkucGxhbiA9PSBlbGVtZW50LnBsYW4pCi0gICAg
ICAgICAgICAgICAgcXVldWUucG9wKCk7Ci0gICAgICAgIH0KLQogICAgICAgICByZXR1cm4gY29t
cGxldGUoKTsKICAgICB9CiAKQEAgLTE0OCw0NyArMTM3LDE3IEBAIHZvaWQgV29ya2xpc3Q6OlF1
ZXVlRWxlbWVudDo6c2V0VG9OZXh0UHJpb3JpdHkoKQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiB9CiAKLWVudW0gY2xhc3MgSXRlcmF0ZVJlc3VsdCB7IFVwZGF0ZUFuZEJyZWFr
LCBEcm9wQW5kQ29udGludWUsIENvbnRpbnVlIH07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+Ci12b2lkIFdvcmtsaXN0OjppdGVyYXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgY29uc3Qg
RnVuY3RvciYgZnVuYykKLXsKLSAgICAvLyBzdGQ6OnByaW9yaXR5X3F1ZXVlIGRvZXMgbm90IGhh
dmUgYW4gaXRlcmF0b3Igb3IgZGVjcmVhc2Vfa2V5Li4uIDooIFdoaWxlIHRoaXMgaXMgZ3Jvc3Ms
IHRoaXMgZnVuY3Rpb24KLSAgICAvLyBzaG91bGRuJ3QgYmUgY2FsbGVkIHZlcnkgb2Z0ZW4gYW5k
IHRoZSBxdWV1ZSBzaG91bGQgYmUgc21hbGwuCi0gICAgLy8gRklYTUU6IHdlIHNob3VsZCBoYXZl
IG91ciBvd24gUHJpb3JpdHlRdWV1ZSB0aGF0IGRvZXNuJ3Qgc3Vjay4KLSAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwMTQ1Ci0gICAgc3RkOjp2ZWN0b3I8
UXVldWVFbGVtZW50PiBlbGVtZW50czsKLSAgICB3aGlsZSAoIW1fcXVldWUuZW1wdHkoKSkgewot
ICAgICAgICBRdWV1ZUVsZW1lbnQgZWxlbWVudCA9IG1fcXVldWUudG9wKCk7Ci0gICAgICAgIG1f
cXVldWUucG9wKCk7Ci0gICAgICAgIEl0ZXJhdGVSZXN1bHQgcmVzdWx0ID0gZnVuYyhlbGVtZW50
KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBJdGVyYXRlUmVzdWx0OjpVcGRhdGVBbmRCcmVhaykg
ewotICAgICAgICAgICAgZWxlbWVudHMucHVzaF9iYWNrKGVsZW1lbnQpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocmVzdWx0ID09IEl0ZXJhdGVSZXN1bHQ6
OkNvbnRpbnVlKQotICAgICAgICAgICAgZWxlbWVudHMucHVzaF9iYWNrKGVsZW1lbnQpOwotICAg
ICAgICBjb250aW51ZTsKLSAgICB9Ci0gICAgCi0gICAgZm9yIChhdXRvIGVsZW1lbnQgOiBlbGVt
ZW50cykKLSAgICAgICAgbV9xdWV1ZS5wdXNoKGVsZW1lbnQpOwotfQotCiB2b2lkIFdvcmtsaXN0
OjplbnF1ZXVlKFJlZjxQbGFuPiBwbGFuKQogewogICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xv
Y2spOwogCiAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKLSAgICAgICAgaXRlcmF0ZShsb2Nr
ZXIsIFsmXSAoUXVldWVFbGVtZW50JiBlbGVtZW50KSB7CisgICAgICAgIGZvciAoY29uc3QgYXV0
byYgZWxlbWVudCA6IG1fcXVldWUpCiAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGVsZW1lbnQs
IGVsZW1lbnQucGxhbi5nZXQoKSAhPSAmcGxhbi5nZXQoKSk7Ci0gICAgICAgICAgICByZXR1cm4g
SXRlcmF0ZVJlc3VsdDo6Q29udGludWU7Ci0gICAgICAgIH0pOwogICAgIH0KIAogICAgIGRhdGFM
b2dMbklmKHZlcmJvc2UsICJFbnF1ZXVpbmcgcGxhbiIpOwotICAgIG1fcXVldWUucHVzaCh7IFBy
aW9yaXR5OjpQcmVwYXJhdGlvbiwgbmV4dFRpY2tldCgpLCAgV1RGTW92ZShwbGFuKSB9KTsKKyAg
ICBtX3F1ZXVlLmVucXVldWUoeyBQcmlvcml0eTo6UHJlcGFyYXRpb24sIG5leHRUaWNrZXQoKSwg
IFdURk1vdmUocGxhbikgfSk7CiAgICAgbV9wbGFuRW5xdWV1ZWQtPm5vdGlmeU9uZShsb2NrZXIp
OwogfQogCkBAIC0xOTYsMTIgKzE1NSwxMiBAQCB2b2lkIFdvcmtsaXN0Ojpjb21wbGV0ZVBsYW5T
eW5jaHJvbm91c2x5KFBsYW4mIHBsYW4pCiB7CiAgICAgewogICAgICAgICBMb2NrSG9sZGVyIGxv
Y2tlcigqbV9sb2NrKTsKLSAgICAgICAgaXRlcmF0ZShsb2NrZXIsIFsmXSAoUXVldWVFbGVtZW50
JiBlbGVtZW50KSB7CisgICAgICAgIG1fcXVldWUuZGVjcmVhc2VLZXkoWyZdIChRdWV1ZUVsZW1l
bnQmIGVsZW1lbnQpIHsKICAgICAgICAgICAgIGlmIChlbGVtZW50LnBsYW4gPT0gJnBsYW4pIHsK
ICAgICAgICAgICAgICAgICBlbGVtZW50LnByaW9yaXR5ID0gUHJpb3JpdHk6OlN5bmNocm9ub3Vz
OwotICAgICAgICAgICAgICAgIHJldHVybiBJdGVyYXRlUmVzdWx0OjpVcGRhdGVBbmRCcmVhazsK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHJldHVybiBJdGVyYXRlUmVzdWx0OjpDb250aW51ZTsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgfSk7CiAKICAgICAgICAgZm9yIChhdXRvJiB0aHJlYWQgOiBtX3RocmVhZHMp
IHsKQEAgLTIxNiwxNyArMTc1LDIzIEBAIHZvaWQgV29ya2xpc3Q6OmNvbXBsZXRlUGxhblN5bmNo
cm9ub3VzbHkoUGxhbiYgcGxhbikKIHZvaWQgV29ya2xpc3Q6OnN0b3BBbGxQbGFuc0ZvclZNKFZN
JiB2bSkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKLSAgICBpdGVyYXRlKGxv
Y2tlciwgWyZdIChRdWV1ZUVsZW1lbnQmIGVsZW1lbnQpIHsKKyAgICBWZWN0b3I8UXVldWVFbGVt
ZW50PiBlbGVtZW50czsKKyAgICB3aGlsZSAoIW1fcXVldWUuaXNFbXB0eSgpKSB7CisgICAgICAg
IFF1ZXVlRWxlbWVudCBlbGVtZW50ID0gbV9xdWV1ZS5kZXF1ZXVlKCk7CiAgICAgICAgIGlmICgm
ZWxlbWVudC5wbGFuLT52bSgpID09ICZ2bSkgewogICAgICAgICAgICAgZWxlbWVudC5wbGFuLT5j
YW5jZWwoKTsKLSAgICAgICAgICAgIHJldHVybiBJdGVyYXRlUmVzdWx0OjpEcm9wQW5kQ29udGlu
dWU7CisgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gSXRl
cmF0ZVJlc3VsdDo6Q29udGludWU7Ci0gICAgfSk7CisKKyAgICAgICAgZWxlbWVudHMuYXBwZW5k
KFdURk1vdmUoZWxlbWVudCkpOworICAgIH0KKworICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGVs
ZW1lbnRzKQorICAgICAgICBtX3F1ZXVlLmVucXVldWUoV1RGTW92ZShlbGVtZW50KSk7CiAKICAg
ICBmb3IgKGF1dG8mIHRocmVhZCA6IG1fdGhyZWFkcykgewogICAgICAgICBpZiAodGhyZWFkLT5l
bGVtZW50LnBsYW4gJiYgJnRocmVhZC0+ZWxlbWVudC5wbGFuLT52bSgpID09ICZ2bSkgewotICAg
ICAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB0aGUgZGVhZGxvY2tpbmcg
c2luY2UgdGhlIHRocmVhZCBjYW4ndCBibG9jayB3aXRob3V0IGNsZWFyaW5nIHRoZSBwbGFuIGFu
ZCBtdXN0IGhvbGQgdGhlIGxvY2sgdG8gZG8gc28uCisgICAgICAgICAgICAvLyBXZSBkb24ndCBo
YXZlIHRvIHdvcnJ5IGFib3V0IHRoZSBkZWFkbG9ja2luZyBzaW5jZSB0aGUgdGhyZWFkIGNhbid0
IGJsb2NrIHdpdGhvdXQgY2hlY2tpbmcgZm9yIGEgbmV3IHBsYW4gYW5kIG11c3QgaG9sZCB0aGUg
bG9jayB0byBkbyBzby4KICAgICAgICAgICAgIHRocmVhZC0+ZWxlbWVudC5wbGFuLT5jYW5jZWwo
KTsKICAgICAgICAgICAgIHRocmVhZC0+c3luY2hyb25pemUud2FpdCgqbV9sb2NrKTsKICAgICAg
ICAgfQpAQCAtMjQ4LDcgKzIxMyw3IEBAIFdvcmtsaXN0Ojp+V29ya2xpc3QoKQogewogICAgIHsK
ICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7Ci0gICAgICAgIG1fcXVldWUucHVz
aCh7IFByaW9yaXR5OjpTaHV0ZG93biwgbmV4dFRpY2tldCgpLCBudWxscHRyIH0pOworICAgICAg
ICBtX3F1ZXVlLmVucXVldWUoeyBQcmlvcml0eTo6U2h1dGRvd24sIG5leHRUaWNrZXQoKSwgbnVs
bHB0ciB9KTsKICAgICAgICAgbV9wbGFuRW5xdWV1ZWQtPm5vdGlmeUFsbChsb2NrZXIpOwogICAg
IH0KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV90aHJlYWRzLnNpemUoKTsgKytpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuaAppbmRleCBiY2FmMWVmODhk
ZjQ5MzU5MTU2NWNmY2UwMjg5ZTc1ZTFlYTRjMzcyLi5hZDRiMTA4OTkwNmUzNjc1NDkzN2I2OTli
YmRmOGJkY2U1NGQyOTBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtV29ya2xpc3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xp
c3QuaApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPHF1ZXVlPgogCiAjaW5jbHVkZSA8d3Rm
L0F1dG9tYXRpY1RocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9Qcmlvcml0eVF1ZXVlLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTc5LDI2ICs4MCwyMCBA
QCBwcml2YXRlOgogICAgICAgICB2b2lkIHNldFRvTmV4dFByaW9yaXR5KCk7CiAgICAgfTsKIAot
ICAgIHN0cnVjdCBDb21wYXJhdG9yIHsKLSAgICAgICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IFF1
ZXVlRWxlbWVudCYgbGVmdCwgY29uc3QgUXVldWVFbGVtZW50JiByaWdodCkgY29uc3QKLSAgICAg
ICAgewotICAgICAgICAgICAgaWYgKGxlZnQucHJpb3JpdHkgPT0gcmlnaHQucHJpb3JpdHkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGxlZnQudGlja2V0ID4gcmlnaHQudGlja2V0OwotICAgICAg
ICAgICAgcmV0dXJuIGxlZnQucHJpb3JpdHkgPiByaWdodC5wcmlvcml0eTsKLSAgICAgICAgfQot
ICAgIH07CisgICAgc3RhdGljIGJvb2wgaXNIaWdoZXJQcmlvcml0eShjb25zdCBRdWV1ZUVsZW1l
bnQmIGxlZnQsIGNvbnN0IFF1ZXVlRWxlbWVudCYgcmlnaHQpCisgICAgeworICAgICAgICBpZiAo
bGVmdC5wcmlvcml0eSA9PSByaWdodC5wcmlvcml0eSkKKyAgICAgICAgICAgIHJldHVybiBsZWZ0
LnRpY2tldCA+IHJpZ2h0LnRpY2tldDsKKyAgICAgICAgcmV0dXJuIGxlZnQucHJpb3JpdHkgPiBy
aWdodC5wcmlvcml0eTsKKyAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgot
ICAgIHZvaWQgaXRlcmF0ZShjb25zdCBBYnN0cmFjdExvY2tlciYsIGNvbnN0IEZ1bmN0b3ImKTsK
IAogICAgIEJveDxMb2NrPiBtX2xvY2s7CiAgICAgUmVmUHRyPEF1dG9tYXRpY1RocmVhZENvbmRp
dGlvbj4gbV9wbGFuRW5xdWV1ZWQ7CiAgICAgLy8gVGVjaG5pY2FsbHksIHRoaXMgY291bGQgb3Zl
cmZsb3cgYnV0IHRoYXQncyB1bmxpa2VseS4gRXZlbiBpZiBpdCBkaWQsIHdlIHdpbGwganVzdCBj
b21waWxlIHRoaW5ncyBvZiB0aGUgc2FtZQogICAgIC8vIFByaW9yaXR5IGl0IHRoZSB3cm9uZyBv
cmRlciwgd2hpY2ggaXNuJ3Qgd3JvbmcsIGp1c3Qgc3Vib3B0aW1hbC4KICAgICBUaWNrZXQgbV9s
YXN0R3JhbnRlZFRpY2tldCB7IDAgfTsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIFdU
Rjo6VmVjdG9yIGJ1dCBXVEY6OlZlY3RvciBkb2VzIG5vdCBzdXBwb3J0IHJhbmRvbSBhY2Nlc3Mg
aXRlcmF0b3IuCi0gICAgc3RkOjpwcmlvcml0eV9xdWV1ZTxRdWV1ZUVsZW1lbnQsIHN0ZDo6dmVj
dG9yPFF1ZXVlRWxlbWVudD4sIENvbXBhcmF0b3I+IG1fcXVldWU7Ci0gICAgSGFzaE1hcDxKU1By
b21pc2VEZWZlcnJlZCosIFBsYW4qPiBtX2FjdGl2ZVBsYW5zOworICAgIFByaW9yaXR5UXVldWU8
UXVldWVFbGVtZW50LCBpc0hpZ2hlclByaW9yaXR5LCAxMD4gbV9xdWV1ZTsKICAgICBWZWN0b3I8
c3RkOjp1bmlxdWVfcHRyPFRocmVhZD4+IG1fdGhyZWFkczsKIH07CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGY1OGYxOWI1NmQzM2NiODhhNmZiNDlkNmU1
ZjNiNjA5Nzg2YmMwY2MuLjdjNzc0ZDk3ZGQ0MTg3MmEyMGYzOTljOTZhMzU5MWQ3YTRjYWUxNDkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTQ5LDYgKzE0
OSw3IEBACiAJCTUxNUY3OTU2MUNGRDNBNjkwMENDRUQ5MyAvKiBDcm9zc1RocmVhZFF1ZXVlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTVGNzk1NTFD
RkQzQTY5MDBDQ0VEOTMgLyogQ3Jvc3NUaHJlYWRRdWV1ZS5oICovOyB9OwogCQk1MjE4MzAxMkM5
OUU0NzZBODRFRUJFQTggLyogU3ltYm9sSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNzJCQkRCMTA3RkE0MjQ4ODYxNzhCOUUgLyogU3ltYm9s
SW1wbC5jcHAgKi87IH07CiAJCTUzOUVCMDYzMUQ1NTI4NDIwMEM4MkVGNyAvKiBMRUJEZWNvZGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzlFQjA2
MjFENTUyODQyMDBDODJFRjcgLyogTEVCRGVjb2Rlci5oICovOyB9OworCQk1M0VDMjUzRTFFOTVB
RDMwMDAwODMxQjkgLyogUHJpb3JpdHlRdWV1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTNFQzI1M0MxRTk1QUQzMDAwMDgzMUI5IC8qIFByaW9yaXR5
UXVldWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk1NTMwNzFDQTFDNDA0MjcyMDAzODQ4OTggLyogVGlueUxSVUNhY2hlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTMwNzFDOTFDNDA0MjcyMDAzODQ4
OTggLyogVGlueUxSVUNhY2hlLmggKi87IH07CiAJCTU1OTdGODJGMUQ5NEI5OTcwMDY2QkMyMSAv
KiBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1NTk3RjgyQzFEOTRCOTk3MDA2NkJDMjEgLyogU3luY2hyb25pemVk
Rml4ZWRRdWV1ZS5oICovOyB9OwogCQk1QzdDODhENDFEMEEzQTBBMDA5RDJGNkQgLyogVW5pcXVl
UmVmLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzdD
ODhEMzFEMEEzQTBBMDA5RDJGNkQgLyogVW5pcXVlUmVmLmggKi87IH07CkBAIC0xNzgsNiArMTc5
LDcgQEAKIAkJOTc0Q0ZDOEUxNkE0RjMyNzAwNkQ1NDA0IC8qIFdlYWtQdHIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3NENGQzhEMTZBNEYzMjcwMDZE
NTQwNCAvKiBXZWFrUHRyLmggKi87IH07CiAJCTlCQzcwRjA1MTc2QzM3OUQwMDEwMURFQyAvKiBB
dG9taWNTdHJpbmdUYWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5QkM3MEYwNDE3NkMzNzlEMDAxMDFERUMgLyogQXRvbWljU3RyaW5nVGFibGUu
Y3BwICovOyB9OwogCQk5QkQ4RjQwQjE3NkMyQjQ3MDAwMkQ4NjUgLyogQXRvbWljU3RyaW5nVGFi
bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCRDhG
NDBBMTc2QzJBRDgwMDAyRDg2NSAvKiBBdG9taWNTdHJpbmdUYWJsZS5oICovOyB9OworCQlBM0I3
MjVFQzk4NzQ0NkFEOTNGMUE0NDAgLyogUmFuZG9tRGV2aWNlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM4RjU5N0NBMkE1NzQxN0ZCQUI5MkZENiAv
KiBSYW5kb21EZXZpY2UuY3BwICovOyB9OwogCQlBNTA5OEIwMDFDMTY5RTA3MDAwODc3OTcgLyog
U2FuZGJveFNQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTUwOThBRkYxQzE2OUUwNzAwMDg3Nzk3IC8qIFNhbmRib3hTUEkuaCAqLzsgfTsKIAkJQTUw
OThCMDIxQzE2QTRGOTAwMDg3Nzk3IC8qIFNlY3VyaXR5U1BJLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTA5OEIwMTFDMTZBNEY5MDAwODc3OTcgLyog
U2VjdXJpdHlTUEkuaCAqLzsgfTsKIAkJQTU2MUYzMTAxREYyNjQyMTAwRkY2NzVEIC8qIERlcHJl
Y2F0ZWRPcHRpb25hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTU2MUYzMEYxREYyNjQyMTAwRkY2NzVEIC8qIERlcHJlY2F0ZWRPcHRpb25hbC5oICov
OyB9OwpAQCAtMzgzLDEzICszODUsMTIgQEAKIAkJRTRBMEFEM0ExQTk2MjQ1NTAwNTM2REY2IC8q
IFdvcmtRdWV1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTRBMEFEMzgxQTk2MjQ1NTAwNTM2REY2IC8qIFdvcmtRdWV1ZS5oICovOyB9OwogCQlFNEEw
QUQzRDFBOTYyNTNDMDA1MzZERjYgLyogV29ya1F1ZXVlQ29jb2EuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRBMEFEM0MxQTk2MjUzQzAwNTM2REY2
IC8qIFdvcmtRdWV1ZUNvY29hLmNwcCAqLzsgfTsKIAkJRUI5NUUxRjAxNjFBNzI0MTAwODlBMkY1
IC8qIEJ5dGVPcmRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRUI5NUUxRUYxNjFBNzI0MTAwODlBMkY1IC8qIEJ5dGVPcmRlci5oICovOyB9OworCQlG
QzZFQzJCRjIwRjg0OTk2OUM2QTVCRTEgLyogUmFuZG9tRGV2aWNlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNEYxQjI0ODYxOUY0MTIyOTZEMUMxOUMg
LyogUmFuZG9tRGV2aWNlLmggKi87IH07CiAJCUZFODIyNTMxMUIyQTFFNUIwMEJBNjhGRCAvKiBO
YWtlZFB0ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkU4MjI1MzAxQjJBMUU1QjAwQkE2OEZEIC8qIE5ha2VkUHRyLmggKi87IH07CiAJCUZFODZBODc1
MUU1OTQ0MDIwMDExMUJCRiAvKiBGb3JiaWRIZWFwQWxsb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU4NkE4NzQxRTU5NDQwMjAwMTExQkJG
IC8qIEZvcmJpZEhlYXBBbGxvY2F0aW9uLmggKi87IH07CiAJCUZFODkyNUIwMUQwMERBRUMwMDQ2
OTA3RSAvKiBJbmRlbnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkU4OTI1QUYxRDAwREFFQzAwNDY5MDdFIC8qIEluZGVudGVyLmggKi87IH07CiAJ
CUZFREFDRDNEMTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0YXRzLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFREFDRDNCMTYzMEY4M0YwMEM2OTYz
NCAvKiBTdGFja1N0YXRzLmNwcCAqLzsgfTsKIAkJRkVEQUNEM0UxNjMwRjgzRjAwQzY5NjM0IC8q
IFN0YWNrU3RhdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZFREFDRDNDMTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0YXRzLmggKi87IH07Ci0JCUZD
NkVDMkJGMjBGODQ5OTY5QzZBNUJFMSAvKiBSYW5kb21EZXZpY2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI0RjFCMjQ4NjE5RjQxMjI5NkQxQzE5QyAv
KiBSYW5kb21EZXZpY2UuaCAqLzsgfTsKLQkJQTNCNzI1RUM5ODc0NDZBRDkzRjFBNDQwIC8qIFJh
bmRvbURldmljZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDOEY1OTdDQTJBNTc0MTdGQkFCOTJGRDYgLyogUmFuZG9tRGV2aWNlLmNwcCAqLzsgfTsK
IC8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhDb250YWluZXJJ
dGVtUHJveHkgc2VjdGlvbiAqLwpAQCAtNTI2LDYgKzUyNyw3IEBACiAJCTFDQ0RCMTUxMUU1NjZC
QzUwMDZDNzNDMCAvKiBDRlN0cmluZ1NQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBDRlN0cmluZ1NQSS5oOyBwYXRoID0gY2YvQ0ZTdHJpbmdTUEkuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMUZBNDdDODgxNTI1MDJEQTAwNTY4RDFCIC8qIFdlYkNvcmVUaHJl
YWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViQ29yZVRocmVh
ZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFGQTQ3Qzg5MTUyNTAyREEwMDU2
OEQxQiAvKiBXZWJDb3JlVGhyZWFkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdlYkNvcmVUaHJlYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjRGMUIyNDg2
MTlGNDEyMjk2RDFDMTlDIC8qIFJhbmRvbURldmljZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSYW5kb21EZXZpY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MjYxNDdCMDgxNUREQ0NEQzAwRERCOTA3IC8qIEludGVnZXJUb1N0cmluZ0NvbnZlcnNpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZWdlclRvU3RyaW5nQ29udmVyc2lv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNjI5OUI2RDE3QTlFNUI4MDBBREVC
RTUgLyogUmVmLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlZi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNjg0RDQzNTFDMDAwRDQwMDA4MUQ2NjMgLyogSW5k
ZXhTcGFyc2VTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5kZXhTcGFy
c2VTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU0Miw2ICs1NDQsNyBAQAog
CQk1MTVGNzk0RDFDRkM5RjRBMDBDQ0VEOTMgLyogQ3Jvc3NUaHJlYWRUYXNrLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENyb3NzVGhyZWFkVGFzay5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MTVGNzk1NTFDRkQzQTY5MDBDQ0VEOTMgLyogQ3Jvc3NUaHJlYWRR
dWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDcm9zc1RocmVhZFF1ZXVl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzOUVCMDYyMUQ1NTI4NDIwMEM4MkVG
NyAvKiBMRUJEZWNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExFQkRl
Y29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTNFQzI1M0MxRTk1QUQzMDAw
MDgzMUI5IC8qIFByaW9yaXR5UXVldWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUHJpb3JpdHlRdWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NTMwNzFD
OTFDNDA0MjcyMDAzODQ4OTggLyogVGlueUxSVUNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRpbnlMUlVDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1NTk3RjgyQzFEOTRCOTk3MDA2NkJDMjEgLyogU3luY2hyb25pemVkRml4ZWRRdWV1ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVCNDMzODNBNUQwQjQ2M0M5NDMzRDkzMyAv
KiBJbmRleE1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmRleE1hcC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzYwLDYgKzc2Myw3IEBACiAJCUFERjJD
RTY1MUUzOUYxMDYwMDY4ODlEQiAvKiBNZW1vcnlGb290cHJpbnQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVtb3J5Rm9vdHByaW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQjM4RkQ3QkMxNjg5NTNFODAwNjVDOTY5IC8qIEZlYXR1cmVEZWZp
bmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZlYXR1cmVEZWZpbmVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM0RjhBOTM2MTlDNjVFQjQwMEIyQjE1RCAv
KiBTdG9wd2F0Y2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcHdhdGNo
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM4RjU5N0NBMkE1NzQxN0ZCQUI5MkZE
NiAvKiBSYW5kb21EZXZpY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUmFuZG9tRGV2aWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q1NDk3
QUExNTg1N0QwMzAwQjVCQzMwIC8qIE1lZGlhVGltZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBNZWRpYVRpbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlDRDU0OTdBQjE1ODU3RDAzMDBCNUJDMzAgLyogTWVkaWFUaW1lLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhVGltZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDRTQ2NTE2RDE5REIxRkI0MDAzRUNBMDUgLyogTlNNYXBUYWJsZVNQSS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOU01hcFRhYmxlU1BJLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC03OTAsOCArNzk0LDYgQEAKIAkJRkU4OTI1QUYxRDAwREFFQzAw
NDY5MDdFIC8qIEluZGVudGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElu
ZGVudGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFREFDRDNCMTYzMEY4M0Yw
MEM2OTYzNCAvKiBTdGFja1N0YXRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFN0YWNrU3RhdHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRURB
Q0QzQzE2MzBGODNGMDBDNjk2MzQgLyogU3RhY2tTdGF0cy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTdGFja1N0YXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTI0RjFCMjQ4NjE5RjQxMjI5NkQxQzE5QyAvKiBSYW5kb21EZXZpY2UuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gUmFuZG9tRGV2aWNlLmg7IHBhdGggPSBSYW5kb21EZXZpY2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzhGNTk3Q0EyQTU3NDE3RkJBQjkyRkQ2
IC8qIFJhbmRvbURldmljZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBSYW5kb21EZXZpY2UuY3BwOyBwYXRoID0gUmFuZG9tRGV2aWNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIC8qIEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIAogLyog
QmVnaW4gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwpAQCAtMTEwMyw2ICsxMTA1
LDcgQEAKIAkJCQkwRkY4NjA5NDFCQ0NCRDc0MDA0NTEyN0YgLyogUG9pbnRlckNvbXBhcmlzb24u
aCAqLywKIAkJCQkwRjlEMzM1RDE2NURCQTczMDA1QUQzODcgLyogUHJpbnRTdHJlYW0uY3BwICov
LAogCQkJCTBGOUQzMzVFMTY1REJBNzMwMDVBRDM4NyAvKiBQcmludFN0cmVhbS5oICovLAorCQkJ
CTUzRUMyNTNDMUU5NUFEMzAwMDA4MzFCOSAvKiBQcmlvcml0eVF1ZXVlLmggKi8sCiAJCQkJMEZD
NDQ4ODIxNkZFOUZFMTAwODQ0QkU5IC8qIFByb2Nlc3NJRC5oICovLAogCQkJCTE0M0Y2MTFEMTU2
NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCAqLywKIAkJCQkxNDNGNjExRTE1NjVGMEY5MDBE
QjUxNEEgLyogUkFNU2l6ZS5oICovLApAQCAtMTQxMiw2ICsxNDE1LDcgQEAKIAkJCQk4MTM0MDEz
OTE1QjA5MkZEMDAxRkYwQjggLyogQmFzZTY0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNB
OTE1MUE4MjVCMDA0MTIzRkYgLyogYmlnbnVtLWR0b2EuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4
QTQ3M0FCMTUxQTgyNUIwMDQxMjNGRiAvKiBiaWdudW0uaCBpbiBIZWFkZXJzICovLAorCQkJCTUz
RUMyNTNFMUU5NUFEMzAwMDA4MzFCOSAvKiBQcmlvcml0eVF1ZXVlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBOEE0NzQ1MjE1MUE4MjVCMDA0MTIzRkYgLyogQmluYXJ5U2VtYXBob3JlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBOEE0NzM4QTE1MUE4MjVCMDA0MTIzRkYgLyogQml0bWFwLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBOEE0NzM4QzE1MUE4MjVCMDA0MTIzRkYgLyogQml0VmVjdG9yLmggaW4g
SGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMuaCBiL1Nv
dXJjZS9XVEYvd3RmL01hdGhFeHRyYXMuaAppbmRleCA3OGRhZWFmNzM4ZDA2OWM4NjhhZjhkZTk2
ZDA3NGY2MWI5NmJhNDAzLi40MGM3N2UzNTQxNzQ1ZDMyZWE5OTk2MmIzM2ZlMjBhMGM1MzQzNmFi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9NYXRoRXh0cmFzLmgKKysrIGIvU291cmNlL1dU
Ri93dGYvTWF0aEV4dHJhcy5oCkBAIC0yNzcsNiArMjc3LDExIEBAIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IGlubGluZSBib29sIGlzR3JlYXRlclRoYW5Ob25aZXJvUG93ZXJPZlR3byhUIHZhbHVlLCB1
bnNpZ25lCiAgICAgcmV0dXJuICEhKCh2YWx1ZSA+PiAxKSA+PiAocG93ZXIgLSAxKSk7CiB9CiAK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBpbmxpbmUgYm9vbCBpc0xlc3NUaGFuKGNv
bnN0IFQmIGEsIGNvbnN0IFQmIGIpIHsgcmV0dXJuIGEgPCBiOyB9Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBjb25zdGV4cHIgaW5saW5lIGJvb2wgaXNMZXNzVGhhbkVxdWFsKGNvbnN0IFQmIGEsIGNv
bnN0IFQmIGIpIHsgcmV0dXJuIGEgPD0gYjsgfQordGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3Rl
eHByIGlubGluZSBib29sIGlzR3JlYXRlclRoYW4oY29uc3QgVCYgYSwgY29uc3QgVCYgYikgeyBy
ZXR1cm4gYSA+IGI7IH0KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBpbmxpbmUgYm9v
bCBpc0dyZWF0ZXJUaGFuRXF1YWwoY29uc3QgVCYgYSwgY29uc3QgVCYgYikgeyByZXR1cm4gYSA+
PSBiOyB9CisKICNpZm5kZWYgVUlOVDY0X0MKICNpZiBDT01QSUxFUihNU1ZDKQogI2RlZmluZSBV
SU5UNjRfQyhjKSBjICMjIHVpNjQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1ByaW9yaXR5
UXVldWUuaCBiL1NvdXJjZS9XVEYvd3RmL1ByaW9yaXR5UXVldWUuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMWY2
ZmFlODFmNWQ0MWVkNjkwMTRmNTgzOTgxOWQ2YTYzMjNiYzYyCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dURi93dGYvUHJpb3JpdHlRdWV1ZS5oCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFt
ZXNwYWNlIFdURiB7CisKKy8vIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhIGJhc2ljIHByaW9yaXR5
IHF1ZXVlLiBUaGUgY2xhc3MgaXMgYmFja2VkIGFzIGEgYmluYXJ5IGhlYXAsIGxpa2Ugc3RkOjpw
cmlvcml0eV9xdWV1ZS4KKy8vIFByaW9yaXR5UXVldWUgaGFzIGEgY291cGxlIG9mIGFkdmFudGFn
ZXMgb3ZlciBzdGQ6OnByaW9yaXR5X3F1ZXVlOgorLy8KKy8vIDEpIFRoZSBiYWNraW5nIHZlY3Rv
ciBpcyBmYXN0TWFsbG9jZWQuCisvLyAyKSBZb3UgY2FuIGl0ZXJhdGUgdGhlIGVsZW1lbnRzLgor
Ly8gMykgSXQgaGFzIGluLXBsYWNlIGRlY3JlYXNlL2luY3JlYXNlS2V5IG1ldGhvZHMsIGFsdGhv
dWdoIHRoZXkgYXJlIHN0aWxsIE8obikgcmF0aGVyIHRoYW4gTyhsb2cobikpLgorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCBib29sICgqaXNIaWdoZXJQcmlvcml0eSkoY29uc3QgVCYsIGNvbnN0IFQm
KSA9IGlzTGVzc1RoYW48VD4sIHNpemVfdCBpbmxpbmVDYXBhY2l0eSA9IDA+CitjbGFzcyBQcmlv
cml0eVF1ZXVlIHsKKyAgICB1c2luZyBCdWZmZXJUeXBlID0gVmVjdG9yPFQsIGlubGluZUNhcGFj
aXR5PjsKKyAgICB1c2luZyBjb25zdF9pdGVyYXRvciA9IHR5cGVuYW1lIEJ1ZmZlclR5cGU6OmNv
bnN0X2l0ZXJhdG9yOworcHVibGljOgorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV9idWZmZXIuc2l6ZSgpOyB9CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9i
dWZmZXIuaXNFbXB0eSgpOyB9CisKKyAgICB2b2lkIGVucXVldWUoVCBlbGVtZW50KQorICAgIHsK
KyAgICAgICAgc2l6ZV90IGxvY2F0aW9uID0gbV9idWZmZXIuc2l6ZSgpOworICAgICAgICBtX2J1
ZmZlci5hcHBlbmQoc3RkOjpmb3J3YXJkPFQ+KGVsZW1lbnQpKTsKKyAgICAgICAgc2lmdFVwKGxv
Y2F0aW9uKTsKKyAgICB9CisKKyAgICBjb25zdCBUJiBwZWVrKCkgY29uc3QgeyByZXR1cm4gbV9i
dWZmZXJbMF07IH0KKyAgICBUIGRlcXVldWUoKQorICAgIHsKKyAgICAgICAgc3RkOjpzd2FwKG1f
YnVmZmVyWzBdLCBtX2J1ZmZlci5sYXN0KCkpOworICAgICAgICBUIHJlc3VsdCA9IG1fYnVmZmVy
LnRha2VMYXN0KCk7CisgICAgICAgIHNpZnREb3duKDApOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBkZWNy
ZWFzZUtleShjb25zdCBGdW5jdG9yJiBkZXNpcmVkRWxlbWVudCkKKyAgICB7CisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9idWZmZXIuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAg
IGlmIChkZXNpcmVkRWxlbWVudChtX2J1ZmZlcltpXSkpIHsKKyAgICAgICAgICAgICAgICBzaWZ0
RG93bihpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgQVNTRVJUKGlzVmFsaWRIZWFwKCkpOworICAgIH0KKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBpbmNyZWFzZUtleShjb25zdCBGdW5jdG9yJiBk
ZXNpcmVkRWxlbWVudCkKKyAgICB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9i
dWZmZXIuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChkZXNpcmVkRWxlbWVudChtX2J1
ZmZlcltpXSkpIHsKKyAgICAgICAgICAgICAgICBzaWZ0VXAoaSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIEFTU0VSVChpc1ZhbGlk
SGVhcCgpKTsKKyAgICB9CisKKyAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0
dXJuIG1fYnVmZmVyLmJlZ2luKCk7IH07CisgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3Qg
eyByZXR1cm4gbV9idWZmZXIuZW5kKCk7IH07CisKKyAgICBib29sIGlzVmFsaWRIZWFwKCkgY29u
c3QKKyAgICB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9idWZmZXIuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgICAgIGlmIChsZWZ0Q2hpbGRPZihpKSA8IG1fYnVmZmVyLnNpemUo
KSAmJiAhaXNIaWdoZXJQcmlvcml0eShtX2J1ZmZlcltpXSwgbV9idWZmZXJbbGVmdENoaWxkT2Yo
aSldKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAocmln
aHRDaGlsZE9mKGkpIDwgbV9idWZmZXIuc2l6ZSgpICYmICFpc0hpZ2hlclByaW9yaXR5KG1fYnVm
ZmVyW2ldLCBtX2J1ZmZlcltyaWdodENoaWxkT2YoaSldKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCitwcm90
ZWN0ZWQ6CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgcGFyZW50T2Yoc2l6ZV90IGxvY2F0
aW9uKSB7IEFTU0VSVChsb2NhdGlvbik7IHJldHVybiAobG9jYXRpb24gLSAxKSAvIDI7IH0KKyAg
ICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBsZWZ0Q2hpbGRPZihzaXplX3QgbG9jYXRpb24pIHsg
cmV0dXJuIGxvY2F0aW9uICogMiArIDE7IH0KKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBy
aWdodENoaWxkT2Yoc2l6ZV90IGxvY2F0aW9uKSB7IHJldHVybiBsZWZ0Q2hpbGRPZihsb2NhdGlv
bikgKyAxOyB9CisKKyAgICB2b2lkIHNpZnRVcChzaXplX3QgbG9jYXRpb24pCisgICAgeworICAg
ICAgICB3aGlsZSAobG9jYXRpb24pIHsKKyAgICAgICAgICAgIGF1dG8gcGFyZW50ID0gcGFyZW50
T2YobG9jYXRpb24pOworICAgICAgICAgICAgaWYgKGlzSGlnaGVyUHJpb3JpdHkobV9idWZmZXJb
cGFyZW50XSwgbV9idWZmZXJbbG9jYXRpb25dKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgICAgIHN0ZDo6c3dhcChtX2J1ZmZlcltwYXJlbnRdLCBtX2J1ZmZlcltsb2NhdGlv
bl0pOworICAgICAgICAgICAgbG9jYXRpb24gPSBwYXJlbnQ7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICB2b2lkIHNpZnREb3duKHNpemVfdCBsb2NhdGlvbikKKyAgICB7CisgICAgICAgIHdoaWxl
IChsZWZ0Q2hpbGRPZihsb2NhdGlvbikgPCBtX2J1ZmZlci5zaXplKCkpIHsKKyAgICAgICAgICAg
IHNpemVfdCBoaWdoZXJQcmlvcml0eUNoaWxkOworICAgICAgICAgICAgaWYgKExJS0VMWShyaWdo
dENoaWxkT2YobG9jYXRpb24pIDwgbV9idWZmZXIuc2l6ZSgpKSkKKyAgICAgICAgICAgICAgICBo
aWdoZXJQcmlvcml0eUNoaWxkID0gaXNIaWdoZXJQcmlvcml0eShtX2J1ZmZlcltsZWZ0Q2hpbGRP
Zihsb2NhdGlvbildLCBtX2J1ZmZlcltyaWdodENoaWxkT2YobG9jYXRpb24pXSkgPyBsZWZ0Q2hp
bGRPZihsb2NhdGlvbikgOiByaWdodENoaWxkT2YobG9jYXRpb24pOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIGhpZ2hlclByaW9yaXR5Q2hpbGQgPSBsZWZ0Q2hpbGRPZihsb2Nh
dGlvbik7CisKKyAgICAgICAgICAgIGlmIChpc0hpZ2hlclByaW9yaXR5KG1fYnVmZmVyW2xvY2F0
aW9uXSwgbV9idWZmZXJbaGlnaGVyUHJpb3JpdHlDaGlsZF0pKQorICAgICAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICAgICAgc3RkOjpzd2FwKG1fYnVmZmVyW2xvY2F0aW9uXSwgbV9idWZm
ZXJbaGlnaGVyUHJpb3JpdHlDaGlsZF0pOworICAgICAgICAgICAgbG9jYXRpb24gPSBoaWdoZXJQ
cmlvcml0eUNoaWxkOworICAgICAgICB9CisgICAgfQorCisgICAgVmVjdG9yPFQsIGlubGluZUNh
cGFjaXR5PiBtX2J1ZmZlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6
OlByaW9yaXR5UXVldWU7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFu
Z2VMb2cKaW5kZXggNWM2MDkxY2ViNWQ5ZjdjYzc0YzE1M2IxMjUwZmVkNDM5YTYxOWY4Yy4uYmU0
Y2Q1ZDAwZWE4MzhjM2FlMWQ0NmFhOGIzOTI5YTNkYmExMjYwYSAxMDA2NDQKLS0tIGEvVG9vbHMv
Q2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDE3LTA0
LTA3ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAgIEFk
ZCBhIFByaW9yaXR5UXVldWUgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3MDU3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUHJpb3Jp
dHlRdWV1ZS5jcHA6IEFkZGVkLgorICAgICAgICAob3BlcmF0b3IgIF96ICk6CisgICAgICAgIChl
bnF1ZXVlKToKKyAgICAgICAgKGRlcXVldWUpOgorICAgICAgICAoVEVTVCk6CisgICAgICAgIChj
b21wYXJlTW92ZSk6CisKIDIwMTctMDQtMDUgIEpvbmF0aGFuIEJlZGFyZCAgPGpiZWRhcmRAYXBw
bGUuY29tPgogCiAgICAgICAgIHdlYmtpdHB5OiBBZGQgcGlkIGxvZ2dpbmcgZm9yIHNpbXVsYXRv
ciBwcm9jZXNzZXMKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQ
SS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2Vi
S2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZDdlZTcxODE0NWE4ZDUzZDc0
NWMyNmIyMWM3MDQwYzc2YzQ1NzJmYS4uNDE0MzZhNjZhNjM4ZGFhZmZkNDQ3MzViY2YzZTBkZTAx
OTEwZmFkYiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2Vi
S2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE3MCw2ICsxNzAsNyBAQAogCQk1
MzFDMUQ4RTFERjhFRjcyMDA2RTk3OUYgLyogTEVCRGVjb2Rlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzFDMUQ4RDFERjhFRjcyMDA2RTk3OUYg
LyogTEVCRGVjb2Rlci5jcHAgKi87IH07CiAJCTUzNjc3MDM0MUNDODAyMjgwMEQ0MjVCMSAvKiBX
ZWJTY3JpcHRPYmplY3REZXNjcmlwdGlvbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUzNjc3MDMzMUNDODAyMjgwMEQ0MjVCMSAvKiBXZWJTY3JpcHRP
YmplY3REZXNjcmlwdGlvbi5tbSAqLzsgfTsKIAkJNTM2NzcwMzYxQ0M4MUI2MTAwRDQyNUIxIC8q
IFdlYlNjcmlwdE9iamVjdERlc2NyaXB0aW9uLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM2NzcwMzUxQ0M4MTJGOTAwRDQyNUIxIC8q
IFdlYlNjcmlwdE9iamVjdERlc2NyaXB0aW9uLmh0bWwgKi87IH07CisJCTUzRUMyNTQxMUU5NkZE
ODcwMDA4MzFCOSAvKiBQcmlvcml0eVF1ZXVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRUMyNTNGMUU5NkJDODAwMDA4MzFCOSAvKiBQcmlvcml0
eVF1ZXVlLmNwcCAqLzsgfTsKIAkJNTU5N0Y4MzYxRDk1OTZDODAwNjZCQzIxIC8qIFN5bmNocm9u
aXplZEZpeGVkUXVldWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTU5N0Y4MzQxRDk1OTZDODAwNjZCQzIxIC8qIFN5bmNocm9uaXplZEZpeGVkUXVl
dWUuY3BwICovOyB9OwogCQk1NzE0RUNCOTFDQThCNUIwMDAwNTFBQzggLyogRG93bmxvYWRSZXF1
ZXN0T3JpZ2luYWxVUkwuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1NzE0RUNCODFDQThCNTg4MDAwNTFBQzggLyogRG93bmxvYWRSZXF1
ZXN0T3JpZ2luYWxVUkwuaHRtbCAqLzsgfTsKIAkJNTcxNEVDQkIxQ0E4QkZFNDAwMDUxQUM4IC8q
IERvd25sb2FkUmVxdWVzdE9yaWdpbmFsVVJMRnJhbWUuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzE0RUNCQTFDQThCRkQxMDAwNTFB
QzggLyogRG93bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkxGcmFtZS5odG1sICovOyB9OwpAQCAtMTA4
Nyw2ICsxMDg4LDcgQEAKIAkJNTMxQzFEOEQxREY4RUY3MjAwNkU5NzlGIC8qIExFQkRlY29kZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTEVCRGVjb2Rlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNjc3MDMzMUNDODAyMjgwMEQ0MjVCMSAv
KiBXZWJTY3JpcHRPYmplY3REZXNjcmlwdGlvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IFdlYlNjcmlwdE9iamVjdERlc2NyaXB0aW9uLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MzY3NzAzNTFDQzgxMkY5MDBENDI1QjEgLyogV2ViU2NyaXB0
T2JqZWN0RGVzY3JpcHRpb24uaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9IFdlYlNj
cmlwdE9iamVjdERlc2NyaXB0aW9uLmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTUzRUMyNTNGMUU5NkJDODAwMDA4MzFCOSAvKiBQcmlvcml0eVF1ZXVlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByaW9yaXR5UXVldWUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1NTk3RjgzNDFEOTU5NkM4MDA2NkJDMjEgLyogU3luY2hyb25p
emVkRml4ZWRRdWV1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
eW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTcxNEVDQjgxQ0E4QjU4ODAwMDUxQUM4IC8qIERvd25sb2FkUmVxdWVzdE9yaWdpbmFsVVJMLmh0
bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBEb3dubG9hZFJlcXVlc3RPcmlnaW5hbFVS
TC5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzE0RUNCQTFDQThCRkQxMDAw
NTFBQzggLyogRG93bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkxGcmFtZS5odG1sICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dC5odG1sOyBwYXRoID0gRG93bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkxGcmFtZS5odG1sOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjA5Nyw2ICsyMDk5LDcgQEAKIAkJCQkxQUZE
RTY1NDE5NTNCMkMwMDBDNDhGRkEgLyogT3B0aW9uYWwuY3BwICovLAogCQkJCUNFNTBEOEM4MUM4
NjY1Q0UwMDcyRUE1QSAvKiBPcHRpb25TZXQuY3BwICovLAogCQkJCTBGRTQ0Nzk3MUI3NkYxRTMw
MDk0OThFQiAvKiBQYXJraW5nTG90LmNwcCAqLywKKwkJCQk1M0VDMjUzRjFFOTZCQzgwMDAwODMx
QjkgLyogUHJpb3JpdHlRdWV1ZS5jcHAgKi8sCiAJCQkJMEZDNkM0Q0IxNDEwMjdFMDAwNUI3RjBD
IC8qIFJlZEJsYWNrVHJlZS5jcHAgKi8sCiAJCQkJOTNBNDI3QUExODBEQTI2NDAwQ0QyNEQ3IC8q
IFJlZi5jcHAgKi8sCiAJCQkJODZCRDE5OTcxQTJEQjA1QjAwNkRDRjBBIC8qIFJlZkNvdW50ZXIu
Y3BwICovLApAQCAtMjY0Myw2ICsyNjQ2LDcgQEAKIAkJCQkxQTc3QkFBMzFEOUFGRkZDMDA1RkM1
NjggLyogT3B0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjAyMUQwQTU5MEMw
MEZFQkNGMyAvKiBPU09iamVjdFB0ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREY1OTFE
MEE1OTBDMDBGRUJDRjMgLyogUGFya2luZ0xvdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1M0VD
MjU0MTFFOTZGRDg3MDAwODMxQjkgLyogUHJpb3JpdHlRdWV1ZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk3QzgzREYxMzFEMEE1OTBDMDBGRUJDRjMgLyogUmVkQmxhY2tUcmVlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTdDODNERjE0MUQwQTU5MEMwMEZFQkNGMyAvKiBSZWYuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJN0M4M0RGMTUxRDBBNTkwQzAwRkVCQ0YzIC8qIFJlZkNvdW50ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Q
cmlvcml0eVF1ZXVlLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ByaW9yaXR5
UXVldWUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM0NDU3ZDYyM2VhYWY3YWI2ODAyNzAzOGY5MzdjNGZlMjkw
MGJjNDkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Q
cmlvcml0eVF1ZXVlLmNwcApAQCAtMCwwICsxLDI1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2luY2x1ZGUgIk1vdmVPbmx5LmgiCisKKyNpbmNsdWRlIDx0eXBlX3Ry
YWl0cz4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Qcmlvcml0eVF1
ZXVlLmg+CisKK2NvbnN0ZXhwciBzdGQ6OnNpemVfdCBvcGVyYXRvciAiIiBfeiAoIHVuc2lnbmVk
IGxvbmcgbG9uZyBuICkgeyByZXR1cm4gbjsgfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29s
ICgqaXNIaWdoZXJQcmlvcml0eSkoY29uc3QgVCYsIGNvbnN0IFQmKT4KK3N0YXRpYyB2b2lkIGVu
cXVldWUoUHJpb3JpdHlRdWV1ZTxULCBpc0hpZ2hlclByaW9yaXR5PiYgcXVldWUsIFQgZWxlbWVu
dCkKK3sKKyAgICBzaXplX3Qgc2l6ZUJlZm9yZSA9IHF1ZXVlLnNpemUoKTsKKyAgICBxdWV1ZS5l
bnF1ZXVlKFdURk1vdmUoZWxlbWVudCkpOworICAgIEVYUEVDVF9FUShzaXplQmVmb3JlICsgMSwg
cXVldWUuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UocXVldWUuaXNFbXB0eSgpKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCAoKmlzSGlnaGVyUHJpb3JpdHkpKGNvbnN0IFQmLCBj
b25zdCBUJik+CitzdGF0aWMgVCBkZXF1ZXVlKFByaW9yaXR5UXVldWU8VCwgaXNIaWdoZXJQcmlv
cml0eT4mIHF1ZXVlKQoreworICAgIEVYUEVDVF9GQUxTRShxdWV1ZS5pc0VtcHR5KCkpOworICAg
IHNpemVfdCBzaXplQmVmb3JlID0gcXVldWUuc2l6ZSgpOworICAgIFQgcmVzdWx0ID0gcXVldWUu
ZGVxdWV1ZSgpOworICAgIEVYUEVDVF9FUShzaXplQmVmb3JlIC0gMSwgcXVldWUuc2l6ZSgpKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCisKK1RFU1QoV1RGX1ByaW9yaXR5UXVldWUsIEJhc2lj
KQoreworICAgIGNvbnN0IHVuc2lnbmVkIG51bUVsZW1lbnRzID0gMTA7CisgICAgUHJpb3JpdHlR
dWV1ZTx1bnNpZ25lZD4gcXVldWU7CisKKyAgICBFWFBFQ1RfRVEoMF96LCBxdWV1ZS5zaXplKCkp
OworICAgIEVYUEVDVF9UUlVFKHF1ZXVlLmlzRW1wdHkoKSk7CisKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7ICsraSkKKyAgICAgICAgZW5xdWV1ZShxdWV1ZSwgaSk7
CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7ICsraSkgeworICAg
ICAgICBFWFBFQ1RfRVEoaSwgcXVldWUucGVlaygpKTsKKyAgICAgICAgRVhQRUNUX0VRKGksIGRl
cXVldWUocXVldWUpKTsKKyAgICAgICAgRVhQRUNUX0VRKG51bUVsZW1lbnRzIC0gaSAtIDEsIHF1
ZXVlLnNpemUoKSk7CisgICAgfQorCisgICAgRVhQRUNUX1RSVUUocXVldWUuaXNFbXB0eSgpKTsK
K30KKworVEVTVChXVEZfUHJpb3JpdHlRdWV1ZSwgQ3VzdG9tUHJpb3JpdHlGdW5jdGlvbikKK3sK
KyAgICBjb25zdCB1bnNpZ25lZCBudW1FbGVtZW50cyA9IDEwOworICAgIFByaW9yaXR5UXVldWU8
dW5zaWduZWQsIGlzR3JlYXRlclRoYW48dW5zaWduZWQ+PiBxdWV1ZTsKKworICAgIEVYUEVDVF9F
USgwX3osIHF1ZXVlLnNpemUoKSk7CisgICAgRVhQRUNUX1RSVUUocXVldWUuaXNFbXB0eSgpKTsK
KworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgKytpKSB7CisgICAg
ICAgIGVucXVldWUocXVldWUsIGkpOworICAgICAgICBFWFBFQ1RfRVEoaSArIDEsIHF1ZXVlLnNp
emUoKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShxdWV1ZS5pc0VtcHR5KCkpOworICAgIH0KKwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgKytpKSB7CisgICAgICAg
IEVYUEVDVF9FUShudW1FbGVtZW50cyAtIGkgLSAxLCBxdWV1ZS5wZWVrKCkpOworICAgICAgICBF
WFBFQ1RfRVEobnVtRWxlbWVudHMgLSBpIC0gMSwgZGVxdWV1ZShxdWV1ZSkpOworICAgICAgICBF
WFBFQ1RfRVEobnVtRWxlbWVudHMgLSBpIC0gMSwgcXVldWUuc2l6ZSgpKTsKKyAgICB9CisKKyAg
ICBFWFBFQ1RfVFJVRShxdWV1ZS5pc0VtcHR5KCkpOworfQorCit0ZW1wbGF0ZTxib29sICgqaXNI
aWdoZXJQcmlvcml0eSkoY29uc3QgdW5zaWduZWQmLCBjb25zdCB1bnNpZ25lZCYpPgorc3RhdGlj
IGJvb2wgY29tcGFyZU1vdmUoY29uc3QgTW92ZU9ubHkmIG0xLCBjb25zdCBNb3ZlT25seSYgbTIp
Cit7CisgICAgcmV0dXJuIGlzSGlnaGVyUHJpb3JpdHkobTEudmFsdWUoKSwgbTIudmFsdWUoKSk7
Cit9CisKKworVEVTVChXVEZfUHJpb3JpdHlRdWV1ZSwgTW92ZU9ubHkpCit7CisgICAgUHJpb3Jp
dHlRdWV1ZTxNb3ZlT25seSwgY29tcGFyZU1vdmU8aXNMZXNzVGhhbjx1bnNpZ25lZD4+PiBxdWV1
ZTsKKworICAgIFZlY3Rvcjx1bnNpZ25lZD4gdmFsdWVzID0geyAyMywgNTQsIDQsIDgsIDEsIDIs
IDQsIDAgfTsKKyAgICBWZWN0b3I8dW5zaWduZWQ+IHNvcnRlZCA9IHZhbHVlczsKKyAgICBzdGQ6
OnNvcnQoc29ydGVkLmJlZ2luKCksIHNvcnRlZC5lbmQoKSk7CisKKyAgICBmb3IgKGF1dG8gdmFs
dWUgOiB2YWx1ZXMpCisgICAgICAgIHF1ZXVlLmVucXVldWUoTW92ZU9ubHkodmFsdWUpKTsKKwor
ICAgIGZvciAoYXV0byBzb3J0ZWRWYWx1ZSA6IHNvcnRlZCkgeworICAgICAgICBhdXRvIHZhbHVl
ID0gcXVldWUuZGVxdWV1ZSgpOworICAgICAgICBFWFBFQ1RfRVEoc29ydGVkVmFsdWUsIHZhbHVl
LnZhbHVlKCkpOworICAgIH0KK30KKworVEVTVChXVEZfUHJpb3JpdHlRdWV1ZSwgRGVjcmVhc2VL
ZXkpCit7CisgICAgUHJpb3JpdHlRdWV1ZTxNb3ZlT25seSwgY29tcGFyZU1vdmU8aXNMZXNzVGhh
bjx1bnNpZ25lZD4+PiBxdWV1ZTsKKworICAgIFZlY3Rvcjx1bnNpZ25lZD4gdmFsdWVzID0geyAy
MywgNTQsIDQsIDgsIDEsIDIsIDQsIDAgfTsKKyAgICBWZWN0b3I8dW5zaWduZWQ+IHNvcnRlZCA9
IHZhbHVlczsKKyAgICBzb3J0ZWRbM10gPSAxMjsKKyAgICBzdGQ6OnNvcnQoc29ydGVkLmJlZ2lu
KCksIHNvcnRlZC5lbmQoKSk7CisKKyAgICBmb3IgKGF1dG8gdmFsdWUgOiB2YWx1ZXMpCisgICAg
ICAgIHF1ZXVlLmVucXVldWUoTW92ZU9ubHkodmFsdWUpKTsKKworICAgIHF1ZXVlLmRlY3JlYXNl
S2V5KFtdIChNb3ZlT25seSYgbSkgeworICAgICAgICBpZiAobS52YWx1ZSgpID09IDgpIHsKKyAg
ICAgICAgICAgIG0gPSBNb3ZlT25seSgxMik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSk7CisKKyAgICBmb3IgKGF1dG8g
c29ydGVkVmFsdWUgOiBzb3J0ZWQpIHsKKyAgICAgICAgYXV0byB2YWx1ZSA9IHF1ZXVlLmRlcXVl
dWUoKTsKKyAgICAgICAgRVhQRUNUX0VRKHNvcnRlZFZhbHVlLCB2YWx1ZS52YWx1ZSgpKTsKKyAg
ICB9Cit9CisKK1RFU1QoV1RGX1ByaW9yaXR5UXVldWUsIEluY3JlYXNlS2V5KQoreworICAgIFBy
aW9yaXR5UXVldWU8TW92ZU9ubHksIGNvbXBhcmVNb3ZlPGlzR3JlYXRlclRoYW48dW5zaWduZWQ+
Pj4gcXVldWU7CisKKyAgICBWZWN0b3I8dW5zaWduZWQ+IHZhbHVlcyA9IHsgMjMsIDU0LCA0LCA4
LCAxLCAyLCA0LCAwIH07CisgICAgVmVjdG9yPHVuc2lnbmVkPiBzb3J0ZWQgPSB2YWx1ZXM7Cisg
ICAgc29ydGVkWzNdID0gMTI7CisgICAgc3RkOjpzb3J0KHNvcnRlZC5iZWdpbigpLCBzb3J0ZWQu
ZW5kKCksIHN0ZDo6Z3JlYXRlcjx1bnNpZ25lZD4oKSk7CisKKyAgICBmb3IgKGF1dG8gdmFsdWUg
OiB2YWx1ZXMpCisgICAgICAgIHF1ZXVlLmVucXVldWUoTW92ZU9ubHkodmFsdWUpKTsKKworICAg
IHF1ZXVlLmluY3JlYXNlS2V5KFtdIChNb3ZlT25seSYgbSkgeworICAgICAgICBpZiAobS52YWx1
ZSgpID09IDgpIHsKKyAgICAgICAgICAgIG0gPSBNb3ZlT25seSgxMik7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSk7CisK
KyAgICBmb3IgKGF1dG8gc29ydGVkVmFsdWUgOiBzb3J0ZWQpIHsKKyAgICAgICAgYXV0byB2YWx1
ZSA9IHF1ZXVlLmRlcXVldWUoKTsKKyAgICAgICAgRVhQRUNUX0VRKHNvcnRlZFZhbHVlLCB2YWx1
ZS52YWx1ZSgpKTsKKyAgICB9Cit9CisKK1RFU1QoV1RGX1ByaW9yaXR5UXVldWUsIEl0ZXJhdGlv
bikKK3sKKyAgICBQcmlvcml0eVF1ZXVlPE1vdmVPbmx5LCBjb21wYXJlTW92ZTxpc0dyZWF0ZXJU
aGFuPHVuc2lnbmVkPj4+IHF1ZXVlOworCisgICAgVmVjdG9yPHVuc2lnbmVkPiB2YWx1ZXMgPSB7
IDIzLCA1NCwgNCwgOCwgMSwgMiwgNCwgMCB9OworICAgIFZlY3Rvcjx1bnNpZ25lZD4gc29ydGVk
ID0gdmFsdWVzOworICAgIHN0ZDo6c29ydChzb3J0ZWQuYmVnaW4oKSwgc29ydGVkLmVuZCgpLCBz
dGQ6OmdyZWF0ZXI8dW5zaWduZWQ+KCkpOworCisgICAgZm9yIChhdXRvIHZhbHVlIDogdmFsdWVz
KQorICAgICAgICBxdWV1ZS5lbnF1ZXVlKE1vdmVPbmx5KHZhbHVlKSk7CisKKyAgICB2YWx1ZXMu
Y2xlYXIoKTsKKyAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBxdWV1ZSkKKyAgICAgICAgdmFsdWVz
LmFwcGVuZChlbGVtZW50LnZhbHVlKCkpOworCisgICAgc3RkOjpzb3J0KHZhbHVlcy5iZWdpbigp
LCB2YWx1ZXMuZW5kKCksIHN0ZDo6Z3JlYXRlcjx1bnNpZ25lZD4oKSk7CisgICAgRVhQRUNUX0VR
KHZhbHVlcy5zaXplKCksIHNvcnRlZC5zaXplKCkpOworICAgIGlmICh2YWx1ZXMuc2l6ZSgpID09
IHNvcnRlZC5zaXplKCkpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZXMu
c2l6ZSgpOyArK2kpCisgICAgICAgICAgICBFWFBFQ1RfRVEoc29ydGVkW2ldLCB2YWx1ZXNbaV0p
OworICAgIH0KK30KKworVEVTVChXVEZfUHJpb3JpdHlRdWV1ZSwgUmFuZG9tQWN0aW9ucykKK3sK
KyAgICBjb25zdCB1aW50NjRfdCBwcmltZTEgPSAxNTQ4NzIzNzsKKyAgICBjb25zdCB1aW50NjRf
dCBwcmltZTIgPSAxNzk0MjgyODM7CisgICAgdWludDY0X3QgcmFuZG9tTnVtYmVyID0gMTk0MDU3
MDk7CisKKyAgICBhdXRvIG5leHRSYW5kb20gPSBbJl0gKCkgLT4gdWludDY0X3QgeworICAgICAg
ICByYW5kb21OdW1iZXIgPSByYW5kb21OdW1iZXIgKiBwcmltZTEgKyBwcmltZTI7CisgICAgICAg
IHJldHVybiByYW5kb21OdW1iZXI7CisgICAgfTsKKworICAgIFByaW9yaXR5UXVldWU8dWludDY0
X3Q+IHF1ZXVlOworICAgIFZlY3Rvcjx1aW50NjRfdD4gdmFsdWVzOworCisgICAgZW51bSBDYXNl
cyB7CisgICAgICAgIEVucXVldWUsCisgICAgICAgIERlcXVldWUsCisgICAgICAgIE51bWJlck9m
Q2FzZXMKKyAgICB9OworCisgICAgLy8gU2VlZCB0aGUgcXVldWUuCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IDEwMDsgKytpKSB7CisgICAgICAgIGF1dG8gbnVtYmVyID0gbmV4dFJhbmRv
bSgpOworICAgICAgICBxdWV1ZS5lbnF1ZXVlKG51bWJlcik7CisgICAgICAgIHZhbHVlcy5hcHBl
bmQobnVtYmVyKTsKKyAgICAgICAgRVhQRUNUX1RSVUUocXVldWUuaXNWYWxpZEhlYXAoKSk7Cisg
ICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICAg
ICAgYXV0byBudW1iZXIgPSBuZXh0UmFuZG9tKCk7CisgICAgICAgIHN3aXRjaCAobnVtYmVyICUg
TnVtYmVyT2ZDYXNlcykgeworICAgICAgICBjYXNlIEVucXVldWU6IHsKKyAgICAgICAgICAgIHF1
ZXVlLmVucXVldWUobnVtYmVyKTsKKyAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQobnVtYmVyKTsK
KyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHF1ZXVlLmlzVmFsaWRIZWFwKCkpOworICAgICAgICAg
ICAgRVhQRUNUX0VRKHZhbHVlcy5zaXplKCksIHF1ZXVlLnNpemUoKSk7CisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgRGVxdWV1ZTogeworICAgICAgICAg
ICAgRVhQRUNUX0VRKHZhbHVlcy5zaXplKCksIHF1ZXVlLnNpemUoKSk7CisgICAgICAgICAgICBp
ZiAodmFsdWVzLnNpemUoKSAhPSBxdWV1ZS5zaXplKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgICAgIGlmICghdmFsdWVzLnNpemUoKSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICAgICAgLy8gU29ydCB3aXRoIGdyZWF0ZXIgc28gdGhlIGxhc3QgZWxl
bWVudCBzaG91bGQgYmUgdGhlIG9uZSB3ZSBkZXF1ZXVlLgorICAgICAgICAgICAgc3RkOjpzb3J0
KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuZW5kKCksIHN0ZDo6Z3JlYXRlcjx1aW50NjRfdD4oKSk7
CisgICAgICAgICAgICBFWFBFQ1RfRVEodmFsdWVzLnRha2VMYXN0KCksIHF1ZXVlLmRlcXVldWUo
KSk7CisKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9Cisg
ICAgICAgIEVYUEVDVF9UUlVFKHF1ZXVlLmlzVmFsaWRIZWFwKCkpOworICAgIH0KK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306537</attachid>
            <date>2017-04-07 14:40:35 -0700</date>
            <delta_ts>2017-04-07 15:01:55 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-170579-20170407144035.patch</filename>
            <type>text/plain</type>
            <size>40455</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE0OTcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
MmIzMzU5NmFhYmI4ZTQ3YTdjYTJkOTEwNzA0YmVjOTExNTc1ZjdhLi4wODZlYzNhZDE4YmQ0ODQ4
MDI1MTY0MmJmZmVhMThmM2EzMjg3MGVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMCBAQAorMjAxNy0wNC0wNyAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBBZGQgYSBQcmlvcml0eVF1ZXVlIGNsYXNzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA1NzkKKworICAgICAgICBSZXZp
ZXdlZCBieSBTYWFtIEJhcmF0aS4KKworICAgICAgICBVcGRhdGUgV2FzbTo6V29ya2xpc3QgdG8g
dXNlIFdURjo6UHJpb3JpdHlRdWV1ZS4KKworICAgICAgICAqIHdhc20vV2FzbVdvcmtsaXN0LmNw
cDoKKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OmVucXVldWUpOgorICAgICAgICAoSlND
OjpXYXNtOjpXb3JrbGlzdDo6Y29tcGxldGVQbGFuU3luY2hyb25vdXNseSk6CisgICAgICAgIChK
U0M6Oldhc206OldvcmtsaXN0OjpzdG9wQWxsUGxhbnNGb3JWTSk6CisgICAgICAgIChKU0M6Oldh
c206OldvcmtsaXN0Ojp+V29ya2xpc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpXb3JrbGlzdDo6
aXRlcmF0ZSk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XYXNtV29ya2xpc3QuaDoKKworICAg
ICAgICAqIHdhc20vV2FzbVdvcmtsaXN0LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xp
c3Q6OmVucXVldWUpOgorICAgICAgICAoSlNDOjpXYXNtOjpXb3JrbGlzdDo6Y29tcGxldGVQbGFu
U3luY2hyb25vdXNseSk6CisgICAgICAgIChKU0M6Oldhc206OldvcmtsaXN0OjpzdG9wQWxsUGxh
bnNGb3JWTSk6CisgICAgICAgIChKU0M6Oldhc206OldvcmtsaXN0Ojp+V29ya2xpc3QpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpXb3JrbGlzdDo6aXRlcmF0ZSk6IERlbGV0ZWQuCisgICAgICAgICog
d2FzbS9XYXNtV29ya2xpc3QuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OmlzSGln
aGVyUHJpb3JpdHkpOgorICAgICAgICAoSlNDOjpXYXNtOjpXb3JrbGlzdDo6Q29tcGFyYXRvcjo6
b3BlcmF0b3IoKSk6IERlbGV0ZWQuCisKIDIwMTctMDQtMDUgIEtlaXRoIE1pbGxlciAgPGtlaXRo
X21pbGxlckBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViQXNzZW1ibHk6IFBsYW5zIHNob3VsZCBi
ZSBhYmxlIHRvIGhhdmUgbW9yZSB0aGFuIG9uZSBjb21wbGV0aW9uIHRhc2suCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDE0ZTA5
MzY3NGYyYzg4MDk4NDI3MGZkMTQ5NWZjMDE2ODVlNGI3ZjkuLmNmZGQ3MTliYTM1Mzk3NDFiMGQ5
ZDUwYzgwZjA2YzEyMDk1ZTk5YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDggQEAKKzIwMTctMDQtMDcgIEtl
aXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIGEgUHJp
b3JpdHlRdWV1ZSBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTcwNTc5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2FhbSBCYXJhdGkuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCBhZGRzIGEgbmV3IFByaW9yaXR5UXVldWUgY2xhc3MgdGhhdCBpcyBi
YWNrZWQgYnkKKyAgICAgICAgV1RGOjpWZWN0b3IuICBJdCBhbHNvIGhhcyBhIG51bWJlciBvZiBv
dGhlciBuaWNldGllcyBzdWNoIGFzIGJlaW5nCisgICAgICAgIGFibGUgdG8gaXRlcmF0ZSB0aGUg
cXVldWUgYW5kIGluY3JlYXNlIG9yIGRlY3JlYXNlIGtleXMuCisKKyAgICAgICAgT25lIG5vdGUg
aXMgdGhhdCBpbmNyZWFzZUtleSBhbmQgZGVjcmVhc2VLZXkgYXJlIE8obikgcmF0aGVyIHRoYW4K
KyAgICAgICAgTyhsb2cobikpLiAgVHJhZGl0aW9uYWxseSwgdGhlIGxvb2t1cCBvZiB0aGUga2V5
IGlzIGRvbmUgd2l0aCBhCisgICAgICAgIGhhc2ggbWFwIGJ1dCB0aGF0J3Mgbm90IGZlYXNpYmxl
IGhlcmUuICBUaGlzIGlzIGJlY2F1c2UgdW5sZXNzIHRoZQorICAgICAgICBxdWV1ZSdzIGVsZW1l
bnQgdHlwZSBpcyBhIHBvaW50ZXIgdGhlcmUgaXMgbm8gZ29vZCB3YXkgbWFpbnRhaW4gYQorICAg
ICAgICBwZXJzaXN0ZW50IHJlZmVyZW5jZSB0byBldmVyeSBlbnRyeSBpbiB0aGUgcXVldWUgd2hp
bGUgd2Ugc2lmdC4KKyAgICAgICAgVGhlIG9ubHkgd2F5IHRvIHVwZGF0ZSB0aGUgbG9jYXRpb24g
b2YgYW4gZW50cnkgaXMgdG8gZG8gYSBoYXNoCisgICAgICAgIHRhYmxlIGxvb2t1cCB3aXRoIHRo
ZSBlbnRyeSdzIGhhc2ggYnV0IHRoaXMgaXMgcHJvYmFibHkgbW9yZQorICAgICAgICBleHBlbnNp
dmUgdGhhbiBqdXN0IGRvaW5nIGEgbGluZWFyIHNlYXJjaC4KKworICAgICAgICBBbHNvLCBhZGQg
Y29tcGFyaXNvbiBvcGVyYXRvciBmdW5jdGlvbnMsIHdoaWNoIGNhbiBiZSBwYXNzZWQgdG8gUHJp
b3JpdHlRdWV1ZS4KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIHd0Zi9NYXRoRXh0cmFzLmg6CisgICAgICAgIChpc0xlc3NUaGFuKToKKyAgICAg
ICAgKGlzTGVzc1RoYW5FcXVhbCk6CisgICAgICAgIChpc0dyZWF0ZXJUaGFuKToKKyAgICAgICAg
KGlzR3JlYXRlclRoYW5FcXVhbCk6CisgICAgICAgICogd3RmL1ByaW9yaXR5UXVldWUuaDogQWRk
ZWQuCisgICAgICAgIChXVEY6OlByaW9yaXR5UXVldWU6OnNpemUpOgorICAgICAgICAoV1RGOjpQ
cmlvcml0eVF1ZXVlOjppc0VtcHR5KToKKyAgICAgICAgKFdURjo6UHJpb3JpdHlRdWV1ZTo6ZW5x
dWV1ZSk6CisgICAgICAgIChXVEY6OlByaW9yaXR5UXVldWU6OnBlZWspOgorICAgICAgICAoV1RG
OjpQcmlvcml0eVF1ZXVlOjpkZXF1ZXVlKToKKyAgICAgICAgKFdURjo6UHJpb3JpdHlRdWV1ZTo6
ZGVjcmVhc2VLZXkpOgorICAgICAgICAoV1RGOjpQcmlvcml0eVF1ZXVlOjppbmNyZWFzZUtleSk6
CisgICAgICAgIChXVEY6OlByaW9yaXR5UXVldWU6OmJlZ2luKToKKyAgICAgICAgKFdURjo6UHJp
b3JpdHlRdWV1ZTo6ZW5kKToKKyAgICAgICAgKFdURjo6UHJpb3JpdHlRdWV1ZTo6aXNWYWxpZEhl
YXApOgorICAgICAgICAoV1RGOjpQcmlvcml0eVF1ZXVlOjpwYXJlbnRPZik6CisgICAgICAgIChX
VEY6OlByaW9yaXR5UXVldWU6OmxlZnRDaGlsZE9mKToKKyAgICAgICAgKFdURjo6UHJpb3JpdHlR
dWV1ZTo6cmlnaHRDaGlsZE9mKToKKyAgICAgICAgKFdURjo6UHJpb3JpdHlRdWV1ZTo6c2lmdFVw
KToKKyAgICAgICAgKFdURjo6UHJpb3JpdHlRdWV1ZTo6c2lmdERvd24pOgorCiAyMDE3LTA0LTA1
ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCiAgICAgICAgIFtKU0Nd
IFN1cHByZXNzIHdhcm5pbmdzIGluIEdDQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Xb3JrbGlzdC5jcHAKaW5kZXggZmRhMDZhNzMzZGJmMjA2OTE2OWMwZmIxNGY5ZDA1Y2NmY2Jh
MzFmMS4uNjExZDQyOGVmNzcyMGI3ZDRmOWVkOGY2NzA2ZGE0YzE5ZTI1MWEzMiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuY3BwCkBAIC02NywxNiArNjcsMTUg
QEAgcHJvdGVjdGVkOgogICAgICAgICBhdXRvJiBxdWV1ZSA9IHdvcmtsaXN0Lm1fcXVldWU7CiAg
ICAgICAgIHN5bmNocm9uaXplLm5vdGlmeUFsbCgpOwogCi0gICAgICAgIHdoaWxlICghcXVldWUu
ZW1wdHkoKSkgewotCi0gICAgICAgICAgICBQcmlvcml0eSBwcmlvcml0eSA9IHF1ZXVlLnRvcCgp
LnByaW9yaXR5OworICAgICAgICB3aGlsZSAoIXF1ZXVlLmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgUHJpb3JpdHkgcHJpb3JpdHkgPSBxdWV1ZS5wZWVrKCkucHJpb3JpdHk7CiAgICAgICAgICAg
ICBpZiAocHJpb3JpdHkgPT0gV29ya2xpc3Q6OlByaW9yaXR5OjpTaHV0ZG93bikKICAgICAgICAg
ICAgICAgICByZXR1cm4gUG9sbFJlc3VsdDo6U3RvcDsKIAotICAgICAgICAgICAgZWxlbWVudCA9
IHF1ZXVlLnRvcCgpOworICAgICAgICAgICAgZWxlbWVudCA9IHF1ZXVlLnBlZWsoKTsKICAgICAg
ICAgICAgIC8vIE9ubHkgb25lIHRocmVhZCBzaG91bGQgdmFsaWRhdGUvcHJlcGFyZS4KLSAgICAg
ICAgICAgIGlmICghcXVldWUudG9wKCkucGxhbi0+aGFzQmVlblByZXBhcmVkKCkpIHsKLSAgICAg
ICAgICAgICAgICBxdWV1ZS5wb3AoKTsKKyAgICAgICAgICAgIGlmICghcXVldWUucGVlaygpLnBs
YW4tPmhhc0JlZW5QcmVwYXJlZCgpKSB7CisgICAgICAgICAgICAgICAgcXVldWUuZGVxdWV1ZSgp
OwogICAgICAgICAgICAgICAgIHJldHVybiBQb2xsUmVzdWx0OjpXb3JrOwogICAgICAgICAgICAg
fQogCkBAIC04NCw3ICs4Myw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgICAgICAgICByZXR1cm4g
UG9sbFJlc3VsdDo6V29yazsKIAogICAgICAgICAgICAgLy8gVGhlcmUgbXVzdCBiZSBhIGFub3Ro
ZXIgdGhyZWFkIGxpbmtpbmcgdGhpcyBwbGFuIHNvIHdlIGNhbiBkZXF1ZSBhbmQgc2VlIGlmIHRo
ZXJlIGlzIG90aGVyIHdvcmsuCi0gICAgICAgICAgICBxdWV1ZS5wb3AoKTsKKyAgICAgICAgICAg
IHF1ZXVlLmRlcXVldWUoKTsKICAgICAgICAgICAgIGVsZW1lbnQgPSBRdWV1ZUVsZW1lbnQoKTsK
ICAgICAgICAgfQogICAgICAgICByZXR1cm4gUG9sbFJlc3VsdDo6V2FpdDsKQEAgLTEwOCwyMiAr
MTA3LDEyIEBAIHByb3RlY3RlZDoKIAogICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoKndv
cmtsaXN0Lm1fbG9jayk7CiAgICAgICAgICAgICBlbGVtZW50LnNldFRvTmV4dFByaW9yaXR5KCk7
Ci0gICAgICAgICAgICB3b3JrbGlzdC5tX3F1ZXVlLnB1c2goZWxlbWVudCk7CisgICAgICAgICAg
ICB3b3JrbGlzdC5tX3F1ZXVlLmVucXVldWUoV1RGTW92ZShlbGVtZW50KSk7CiAgICAgICAgICAg
ICB3b3JrbGlzdC5tX3BsYW5FbnF1ZXVlZC0+bm90aWZ5QWxsKGxvY2tlcik7CisgICAgICAgICAg
ICByZXR1cm4gY29tcGxldGUoKTsKICAgICAgICAgfQogCi0gICAgICAgIC8vIEZJWE1FOiB0aGlz
IHNob3VsZCBjaGVjayBpbiBvY2Nhc2lvbmFsbHkgdG8gc2VlIGlmIHRoZXJlIGFyZSBuZXcsIGhp
Z2hlciBwcmlvcml0eSBlLmcuIHN5bmNocm9ub3VzLCBwbGFucyB0aGF0IG5lZWQgdG8gYmUgcnVu
LgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcw
MjA0CiAgICAgICAgIHBsYW4tPmNvbXBpbGVGdW5jdGlvbnMoUGxhbjo6UGFydGlhbCk7Ci0KLSAg
ICAgICAgaWYgKCFwbGFuLT5oYXNXb3JrKCkpIHsKLSAgICAgICAgICAgIExvY2tIb2xkZXIgbG9j
a2VyKCp3b3JrbGlzdC5tX2xvY2spOwotICAgICAgICAgICAgYXV0byBxdWV1ZSA9IHdvcmtsaXN0
Lm1fcXVldWU7Ci0gICAgICAgICAgICAvLyBBbm90aGVyIHRocmVhZCBtYXkgaGF2ZSByZW1vdmVk
IG91ciBwbGFuIGZyb20gdGhlIHF1ZXVlIGFscmVhZHkuCi0gICAgICAgICAgICBpZiAoIXF1ZXVl
LmVtcHR5KCkgJiYgcXVldWUudG9wKCkucGxhbiA9PSBlbGVtZW50LnBsYW4pCi0gICAgICAgICAg
ICAgICAgcXVldWUucG9wKCk7Ci0gICAgICAgIH0KLQogICAgICAgICByZXR1cm4gY29tcGxldGUo
KTsKICAgICB9CiAKQEAgLTE0OCw0NyArMTM3LDE3IEBAIHZvaWQgV29ya2xpc3Q6OlF1ZXVlRWxl
bWVudDo6c2V0VG9OZXh0UHJpb3JpdHkoKQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiB9CiAKLWVudW0gY2xhc3MgSXRlcmF0ZVJlc3VsdCB7IFVwZGF0ZUFuZEJyZWFrLCBEcm9w
QW5kQ29udGludWUsIENvbnRpbnVlIH07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci12
b2lkIFdvcmtsaXN0OjppdGVyYXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgY29uc3QgRnVuY3Rv
ciYgZnVuYykKLXsKLSAgICAvLyBzdGQ6OnByaW9yaXR5X3F1ZXVlIGRvZXMgbm90IGhhdmUgYW4g
aXRlcmF0b3Igb3IgZGVjcmVhc2Vfa2V5Li4uIDooIFdoaWxlIHRoaXMgaXMgZ3Jvc3MsIHRoaXMg
ZnVuY3Rpb24KLSAgICAvLyBzaG91bGRuJ3QgYmUgY2FsbGVkIHZlcnkgb2Z0ZW4gYW5kIHRoZSBx
dWV1ZSBzaG91bGQgYmUgc21hbGwuCi0gICAgLy8gRklYTUU6IHdlIHNob3VsZCBoYXZlIG91ciBv
d24gUHJpb3JpdHlRdWV1ZSB0aGF0IGRvZXNuJ3Qgc3Vjay4KLSAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwMTQ1Ci0gICAgc3RkOjp2ZWN0b3I8UXVldWVF
bGVtZW50PiBlbGVtZW50czsKLSAgICB3aGlsZSAoIW1fcXVldWUuZW1wdHkoKSkgewotICAgICAg
ICBRdWV1ZUVsZW1lbnQgZWxlbWVudCA9IG1fcXVldWUudG9wKCk7Ci0gICAgICAgIG1fcXVldWUu
cG9wKCk7Ci0gICAgICAgIEl0ZXJhdGVSZXN1bHQgcmVzdWx0ID0gZnVuYyhlbGVtZW50KTsKLSAg
ICAgICAgaWYgKHJlc3VsdCA9PSBJdGVyYXRlUmVzdWx0OjpVcGRhdGVBbmRCcmVhaykgewotICAg
ICAgICAgICAgZWxlbWVudHMucHVzaF9iYWNrKGVsZW1lbnQpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocmVzdWx0ID09IEl0ZXJhdGVSZXN1bHQ6OkNvbnRp
bnVlKQotICAgICAgICAgICAgZWxlbWVudHMucHVzaF9iYWNrKGVsZW1lbnQpOwotICAgICAgICBj
b250aW51ZTsKLSAgICB9Ci0gICAgCi0gICAgZm9yIChhdXRvIGVsZW1lbnQgOiBlbGVtZW50cykK
LSAgICAgICAgbV9xdWV1ZS5wdXNoKGVsZW1lbnQpOwotfQotCiB2b2lkIFdvcmtsaXN0OjplbnF1
ZXVlKFJlZjxQbGFuPiBwbGFuKQogewogICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOwog
CiAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKLSAgICAgICAgaXRlcmF0ZShsb2NrZXIsIFsm
XSAoUXVldWVFbGVtZW50JiBlbGVtZW50KSB7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgZWxl
bWVudCA6IG1fcXVldWUpCiAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGVsZW1lbnQsIGVsZW1l
bnQucGxhbi5nZXQoKSAhPSAmcGxhbi5nZXQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gSXRlcmF0
ZVJlc3VsdDo6Q29udGludWU7Ci0gICAgICAgIH0pOwogICAgIH0KIAogICAgIGRhdGFMb2dMbklm
KHZlcmJvc2UsICJFbnF1ZXVpbmcgcGxhbiIpOwotICAgIG1fcXVldWUucHVzaCh7IFByaW9yaXR5
OjpQcmVwYXJhdGlvbiwgbmV4dFRpY2tldCgpLCAgV1RGTW92ZShwbGFuKSB9KTsKKyAgICBtX3F1
ZXVlLmVucXVldWUoeyBQcmlvcml0eTo6UHJlcGFyYXRpb24sIG5leHRUaWNrZXQoKSwgIFdURk1v
dmUocGxhbikgfSk7CiAgICAgbV9wbGFuRW5xdWV1ZWQtPm5vdGlmeU9uZShsb2NrZXIpOwogfQog
CkBAIC0xOTYsMTIgKzE1NSwxMiBAQCB2b2lkIFdvcmtsaXN0Ojpjb21wbGV0ZVBsYW5TeW5jaHJv
bm91c2x5KFBsYW4mIHBsYW4pCiB7CiAgICAgewogICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcigq
bV9sb2NrKTsKLSAgICAgICAgaXRlcmF0ZShsb2NrZXIsIFsmXSAoUXVldWVFbGVtZW50JiBlbGVt
ZW50KSB7CisgICAgICAgIG1fcXVldWUuZGVjcmVhc2VLZXkoWyZdIChRdWV1ZUVsZW1lbnQmIGVs
ZW1lbnQpIHsKICAgICAgICAgICAgIGlmIChlbGVtZW50LnBsYW4gPT0gJnBsYW4pIHsKICAgICAg
ICAgICAgICAgICBlbGVtZW50LnByaW9yaXR5ID0gUHJpb3JpdHk6OlN5bmNocm9ub3VzOwotICAg
ICAgICAgICAgICAgIHJldHVybiBJdGVyYXRlUmVzdWx0OjpVcGRhdGVBbmRCcmVhazsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVy
biBJdGVyYXRlUmVzdWx0OjpDb250aW51ZTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgfSk7CiAKICAgICAgICAgZm9yIChhdXRvJiB0aHJlYWQgOiBtX3RocmVhZHMpIHsKQEAg
LTIxNiwxNyArMTc1LDIzIEBAIHZvaWQgV29ya2xpc3Q6OmNvbXBsZXRlUGxhblN5bmNocm9ub3Vz
bHkoUGxhbiYgcGxhbikKIHZvaWQgV29ya2xpc3Q6OnN0b3BBbGxQbGFuc0ZvclZNKFZNJiB2bSkK
IHsKICAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKLSAgICBpdGVyYXRlKGxvY2tlciwg
WyZdIChRdWV1ZUVsZW1lbnQmIGVsZW1lbnQpIHsKKyAgICBWZWN0b3I8UXVldWVFbGVtZW50PiBl
bGVtZW50czsKKyAgICB3aGlsZSAoIW1fcXVldWUuaXNFbXB0eSgpKSB7CisgICAgICAgIFF1ZXVl
RWxlbWVudCBlbGVtZW50ID0gbV9xdWV1ZS5kZXF1ZXVlKCk7CiAgICAgICAgIGlmICgmZWxlbWVu
dC5wbGFuLT52bSgpID09ICZ2bSkgewogICAgICAgICAgICAgZWxlbWVudC5wbGFuLT5jYW5jZWwo
KTsKLSAgICAgICAgICAgIHJldHVybiBJdGVyYXRlUmVzdWx0OjpEcm9wQW5kQ29udGludWU7Cisg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gSXRlcmF0ZVJl
c3VsdDo6Q29udGludWU7Ci0gICAgfSk7CisKKyAgICAgICAgZWxlbWVudHMuYXBwZW5kKFdURk1v
dmUoZWxlbWVudCkpOworICAgIH0KKworICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGVsZW1lbnRz
KQorICAgICAgICBtX3F1ZXVlLmVucXVldWUoV1RGTW92ZShlbGVtZW50KSk7CiAKICAgICBmb3Ig
KGF1dG8mIHRocmVhZCA6IG1fdGhyZWFkcykgewogICAgICAgICBpZiAodGhyZWFkLT5lbGVtZW50
LnBsYW4gJiYgJnRocmVhZC0+ZWxlbWVudC5wbGFuLT52bSgpID09ICZ2bSkgewotICAgICAgICAg
ICAgLy8gV2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB0aGUgZGVhZGxvY2tpbmcgc2luY2Ug
dGhlIHRocmVhZCBjYW4ndCBibG9jayB3aXRob3V0IGNsZWFyaW5nIHRoZSBwbGFuIGFuZCBtdXN0
IGhvbGQgdGhlIGxvY2sgdG8gZG8gc28uCisgICAgICAgICAgICAvLyBXZSBkb24ndCBoYXZlIHRv
IHdvcnJ5IGFib3V0IHRoZSBkZWFkbG9ja2luZyBzaW5jZSB0aGUgdGhyZWFkIGNhbid0IGJsb2Nr
IHdpdGhvdXQgY2hlY2tpbmcgZm9yIGEgbmV3IHBsYW4gYW5kIG11c3QgaG9sZCB0aGUgbG9jayB0
byBkbyBzby4KICAgICAgICAgICAgIHRocmVhZC0+ZWxlbWVudC5wbGFuLT5jYW5jZWwoKTsKICAg
ICAgICAgICAgIHRocmVhZC0+c3luY2hyb25pemUud2FpdCgqbV9sb2NrKTsKICAgICAgICAgfQpA
QCAtMjQ4LDcgKzIxMyw3IEBAIFdvcmtsaXN0Ojp+V29ya2xpc3QoKQogewogICAgIHsKICAgICAg
ICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7Ci0gICAgICAgIG1fcXVldWUucHVzaCh7IFBy
aW9yaXR5OjpTaHV0ZG93biwgbmV4dFRpY2tldCgpLCBudWxscHRyIH0pOworICAgICAgICBtX3F1
ZXVlLmVucXVldWUoeyBQcmlvcml0eTo6U2h1dGRvd24sIG5leHRUaWNrZXQoKSwgbnVsbHB0ciB9
KTsKICAgICAgICAgbV9wbGFuRW5xdWV1ZWQtPm5vdGlmeUFsbChsb2NrZXIpOwogICAgIH0KICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV90aHJlYWRzLnNpemUoKTsgKytpKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuaAppbmRleCBiY2FmMWVmODhkZjQ5MzU5
MTU2NWNmY2UwMjg5ZTc1ZTFlYTRjMzcyLi5hZDRiMTA4OTkwNmUzNjc1NDkzN2I2OTliYmRmOGJk
Y2U1NGQyOTBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29y
a2xpc3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuaApA
QCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPHF1ZXVlPgogCiAjaW5jbHVkZSA8d3RmL0F1dG9t
YXRpY1RocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9Qcmlvcml0eVF1ZXVlLmg+CiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTc5LDI2ICs4MCwyMCBAQCBwcml2
YXRlOgogICAgICAgICB2b2lkIHNldFRvTmV4dFByaW9yaXR5KCk7CiAgICAgfTsKIAotICAgIHN0
cnVjdCBDb21wYXJhdG9yIHsKLSAgICAgICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IFF1ZXVlRWxl
bWVudCYgbGVmdCwgY29uc3QgUXVldWVFbGVtZW50JiByaWdodCkgY29uc3QKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKGxlZnQucHJpb3JpdHkgPT0gcmlnaHQucHJpb3JpdHkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGxlZnQudGlja2V0ID4gcmlnaHQudGlja2V0OwotICAgICAgICAgICAg
cmV0dXJuIGxlZnQucHJpb3JpdHkgPiByaWdodC5wcmlvcml0eTsKLSAgICAgICAgfQotICAgIH07
CisgICAgc3RhdGljIGJvb2wgaXNIaWdoZXJQcmlvcml0eShjb25zdCBRdWV1ZUVsZW1lbnQmIGxl
ZnQsIGNvbnN0IFF1ZXVlRWxlbWVudCYgcmlnaHQpCisgICAgeworICAgICAgICBpZiAobGVmdC5w
cmlvcml0eSA9PSByaWdodC5wcmlvcml0eSkKKyAgICAgICAgICAgIHJldHVybiBsZWZ0LnRpY2tl
dCA+IHJpZ2h0LnRpY2tldDsKKyAgICAgICAgcmV0dXJuIGxlZnQucHJpb3JpdHkgPiByaWdodC5w
cmlvcml0eTsKKyAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotICAgIHZv
aWQgaXRlcmF0ZShjb25zdCBBYnN0cmFjdExvY2tlciYsIGNvbnN0IEZ1bmN0b3ImKTsKIAogICAg
IEJveDxMb2NrPiBtX2xvY2s7CiAgICAgUmVmUHRyPEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbj4g
bV9wbGFuRW5xdWV1ZWQ7CiAgICAgLy8gVGVjaG5pY2FsbHksIHRoaXMgY291bGQgb3ZlcmZsb3cg
YnV0IHRoYXQncyB1bmxpa2VseS4gRXZlbiBpZiBpdCBkaWQsIHdlIHdpbGwganVzdCBjb21waWxl
IHRoaW5ncyBvZiB0aGUgc2FtZQogICAgIC8vIFByaW9yaXR5IGl0IHRoZSB3cm9uZyBvcmRlciwg
d2hpY2ggaXNuJ3Qgd3JvbmcsIGp1c3Qgc3Vib3B0aW1hbC4KICAgICBUaWNrZXQgbV9sYXN0R3Jh
bnRlZFRpY2tldCB7IDAgfTsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIFdURjo6VmVj
dG9yIGJ1dCBXVEY6OlZlY3RvciBkb2VzIG5vdCBzdXBwb3J0IHJhbmRvbSBhY2Nlc3MgaXRlcmF0
b3IuCi0gICAgc3RkOjpwcmlvcml0eV9xdWV1ZTxRdWV1ZUVsZW1lbnQsIHN0ZDo6dmVjdG9yPFF1
ZXVlRWxlbWVudD4sIENvbXBhcmF0b3I+IG1fcXVldWU7Ci0gICAgSGFzaE1hcDxKU1Byb21pc2VE
ZWZlcnJlZCosIFBsYW4qPiBtX2FjdGl2ZVBsYW5zOworICAgIFByaW9yaXR5UXVldWU8UXVldWVF
bGVtZW50LCBpc0hpZ2hlclByaW9yaXR5LCAxMD4gbV9xdWV1ZTsKICAgICBWZWN0b3I8c3RkOjp1
bmlxdWVfcHRyPFRocmVhZD4+IG1fdGhyZWFkczsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGY1OGYxOWI1NmQzM2NiODhhNmZiNDlkNmU1ZjNiNjA5
Nzg2YmMwY2MuLjdjNzc0ZDk3ZGQ0MTg3MmEyMGYzOTljOTZhMzU5MWQ3YTRjYWUxNDkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTQ5LDYgKzE0OSw3IEBA
CiAJCTUxNUY3OTU2MUNGRDNBNjkwMENDRUQ5MyAvKiBDcm9zc1RocmVhZFF1ZXVlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTVGNzk1NTFDRkQzQTY5
MDBDQ0VEOTMgLyogQ3Jvc3NUaHJlYWRRdWV1ZS5oICovOyB9OwogCQk1MjE4MzAxMkM5OUU0NzZB
ODRFRUJFQTggLyogU3ltYm9sSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGNzJCQkRCMTA3RkE0MjQ4ODYxNzhCOUUgLyogU3ltYm9sSW1wbC5j
cHAgKi87IH07CiAJCTUzOUVCMDYzMUQ1NTI4NDIwMEM4MkVGNyAvKiBMRUJEZWNvZGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzlFQjA2MjFENTUy
ODQyMDBDODJFRjcgLyogTEVCRGVjb2Rlci5oICovOyB9OworCQk1M0VDMjUzRTFFOTVBRDMwMDAw
ODMxQjkgLyogUHJpb3JpdHlRdWV1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTNFQzI1M0MxRTk1QUQzMDAwMDgzMUI5IC8qIFByaW9yaXR5UXVldWUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1NTMw
NzFDQTFDNDA0MjcyMDAzODQ4OTggLyogVGlueUxSVUNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTMwNzFDOTFDNDA0MjcyMDAzODQ4OTggLyog
VGlueUxSVUNhY2hlLmggKi87IH07CiAJCTU1OTdGODJGMUQ5NEI5OTcwMDY2QkMyMSAvKiBTeW5j
aHJvbml6ZWRGaXhlZFF1ZXVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1NTk3RjgyQzFEOTRCOTk3MDA2NkJDMjEgLyogU3luY2hyb25pemVkRml4ZWRR
dWV1ZS5oICovOyB9OwogCQk1QzdDODhENDFEMEEzQTBBMDA5RDJGNkQgLyogVW5pcXVlUmVmLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzdDODhEMzFE
MEEzQTBBMDA5RDJGNkQgLyogVW5pcXVlUmVmLmggKi87IH07CkBAIC0xNzgsNiArMTc5LDcgQEAK
IAkJOTc0Q0ZDOEUxNkE0RjMyNzAwNkQ1NDA0IC8qIFdlYWtQdHIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3NENGQzhEMTZBNEYzMjcwMDZENTQwNCAv
KiBXZWFrUHRyLmggKi87IH07CiAJCTlCQzcwRjA1MTc2QzM3OUQwMDEwMURFQyAvKiBBdG9taWNT
dHJpbmdUYWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5QkM3MEYwNDE3NkMzNzlEMDAxMDFERUMgLyogQXRvbWljU3RyaW5nVGFibGUuY3BwICov
OyB9OwogCQk5QkQ4RjQwQjE3NkMyQjQ3MDAwMkQ4NjUgLyogQXRvbWljU3RyaW5nVGFibGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCRDhGNDBBMTc2
QzJBRDgwMDAyRDg2NSAvKiBBdG9taWNTdHJpbmdUYWJsZS5oICovOyB9OworCQlBM0I3MjVFQzk4
NzQ0NkFEOTNGMUE0NDAgLyogUmFuZG9tRGV2aWNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM4RjU5N0NBMkE1NzQxN0ZCQUI5MkZENiAvKiBSYW5k
b21EZXZpY2UuY3BwICovOyB9OwogCQlBNTA5OEIwMDFDMTY5RTA3MDAwODc3OTcgLyogU2FuZGJv
eFNQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTUw
OThBRkYxQzE2OUUwNzAwMDg3Nzk3IC8qIFNhbmRib3hTUEkuaCAqLzsgfTsKIAkJQTUwOThCMDIx
QzE2QTRGOTAwMDg3Nzk3IC8qIFNlY3VyaXR5U1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTA5OEIwMTFDMTZBNEY5MDAwODc3OTcgLyogU2VjdXJp
dHlTUEkuaCAqLzsgfTsKIAkJQTU2MUYzMTAxREYyNjQyMTAwRkY2NzVEIC8qIERlcHJlY2F0ZWRP
cHRpb25hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTU2MUYzMEYxREYyNjQyMTAwRkY2NzVEIC8qIERlcHJlY2F0ZWRPcHRpb25hbC5oICovOyB9OwpA
QCAtMzgzLDEzICszODUsMTIgQEAKIAkJRTRBMEFEM0ExQTk2MjQ1NTAwNTM2REY2IC8qIFdvcmtR
dWV1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRB
MEFEMzgxQTk2MjQ1NTAwNTM2REY2IC8qIFdvcmtRdWV1ZS5oICovOyB9OwogCQlFNEEwQUQzRDFB
OTYyNTNDMDA1MzZERjYgLyogV29ya1F1ZXVlQ29jb2EuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRBMEFEM0MxQTk2MjUzQzAwNTM2REY2IC8qIFdv
cmtRdWV1ZUNvY29hLmNwcCAqLzsgfTsKIAkJRUI5NUUxRjAxNjFBNzI0MTAwODlBMkY1IC8qIEJ5
dGVPcmRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RUI5NUUxRUYxNjFBNzI0MTAwODlBMkY1IC8qIEJ5dGVPcmRlci5oICovOyB9OworCQlGQzZFQzJC
RjIwRjg0OTk2OUM2QTVCRTEgLyogUmFuZG9tRGV2aWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNEYxQjI0ODYxOUY0MTIyOTZEMUMxOUMgLyogUmFu
ZG9tRGV2aWNlLmggKi87IH07CiAJCUZFODIyNTMxMUIyQTFFNUIwMEJBNjhGRCAvKiBOYWtlZFB0
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU4MjI1
MzAxQjJBMUU1QjAwQkE2OEZEIC8qIE5ha2VkUHRyLmggKi87IH07CiAJCUZFODZBODc1MUU1OTQ0
MDIwMDExMUJCRiAvKiBGb3JiaWRIZWFwQWxsb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU4NkE4NzQxRTU5NDQwMjAwMTExQkJGIC8qIEZv
cmJpZEhlYXBBbGxvY2F0aW9uLmggKi87IH07CiAJCUZFODkyNUIwMUQwMERBRUMwMDQ2OTA3RSAv
KiBJbmRlbnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkU4OTI1QUYxRDAwREFFQzAwNDY5MDdFIC8qIEluZGVudGVyLmggKi87IH07CiAJCUZFREFD
RDNEMTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0YXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFREFDRDNCMTYzMEY4M0YwMEM2OTYzNCAvKiBT
dGFja1N0YXRzLmNwcCAqLzsgfTsKIAkJRkVEQUNEM0UxNjMwRjgzRjAwQzY5NjM0IC8qIFN0YWNr
U3RhdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZF
REFDRDNDMTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0YXRzLmggKi87IH07Ci0JCUZDNkVDMkJG
MjBGODQ5OTY5QzZBNUJFMSAvKiBSYW5kb21EZXZpY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI0RjFCMjQ4NjE5RjQxMjI5NkQxQzE5QyAvKiBSYW5k
b21EZXZpY2UuaCAqLzsgfTsKLQkJQTNCNzI1RUM5ODc0NDZBRDkzRjFBNDQwIC8qIFJhbmRvbURl
dmljZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
OEY1OTdDQTJBNTc0MTdGQkFCOTJGRDYgLyogUmFuZG9tRGV2aWNlLmNwcCAqLzsgfTsKIC8qIEVu
ZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhDb250YWluZXJJdGVtUHJv
eHkgc2VjdGlvbiAqLwpAQCAtNTI2LDYgKzUyNyw3IEBACiAJCTFDQ0RCMTUxMUU1NjZCQzUwMDZD
NzNDMCAvKiBDRlN0cmluZ1NQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBD
RlN0cmluZ1NQSS5oOyBwYXRoID0gY2YvQ0ZTdHJpbmdTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMUZBNDdDODgxNTI1MDJEQTAwNTY4RDFCIC8qIFdlYkNvcmVUaHJlYWQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViQ29yZVRocmVhZC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFGQTQ3Qzg5MTUyNTAyREEwMDU2OEQxQiAv
KiBXZWJDb3JlVGhyZWFkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNv
cmVUaHJlYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjRGMUIyNDg2MTlGNDEy
Mjk2RDFDMTlDIC8qIFJhbmRvbURldmljZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSYW5kb21EZXZpY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjYxNDdC
MDgxNUREQ0NEQzAwRERCOTA3IC8qIEludGVnZXJUb1N0cmluZ0NvbnZlcnNpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNjI5OUI2RDE3QTlFNUI4MDBBREVCRTUgLyog
UmVmLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlZi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkyNjg0RDQzNTFDMDAwRDQwMDA4MUQ2NjMgLyogSW5kZXhTcGFy
c2VTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5kZXhTcGFyc2VTZXQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU0Miw2ICs1NDQsNyBAQAogCQk1MTVG
Nzk0RDFDRkM5RjRBMDBDQ0VEOTMgLyogQ3Jvc3NUaHJlYWRUYXNrLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENyb3NzVGhyZWFkVGFzay5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MTVGNzk1NTFDRkQzQTY5MDBDQ0VEOTMgLyogQ3Jvc3NUaHJlYWRRdWV1ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDcm9zc1RocmVhZFF1ZXVlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzOUVCMDYyMUQ1NTI4NDIwMEM4MkVGNyAvKiBM
RUJEZWNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExFQkRlY29kZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTNFQzI1M0MxRTk1QUQzMDAwMDgzMUI5
IC8qIFByaW9yaXR5UXVldWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJp
b3JpdHlRdWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NTMwNzFDOTFDNDA0
MjcyMDAzODQ4OTggLyogVGlueUxSVUNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFRpbnlMUlVDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NTk3
RjgyQzFEOTRCOTk3MDA2NkJDMjEgLyogU3luY2hyb25pemVkRml4ZWRRdWV1ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVCNDMzODNBNUQwQjQ2M0M5NDMzRDkzMyAvKiBJbmRl
eE1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmRleE1hcC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzYwLDYgKzc2Myw3IEBACiAJCUFERjJDRTY1MUUz
OUYxMDYwMDY4ODlEQiAvKiBNZW1vcnlGb290cHJpbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTWVtb3J5Rm9vdHByaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQjM4RkQ3QkMxNjg5NTNFODAwNjVDOTY5IC8qIEZlYXR1cmVEZWZpbmVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZlYXR1cmVEZWZpbmVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM0RjhBOTM2MTlDNjVFQjQwMEIyQjE1RCAvKiBTdG9w
d2F0Y2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcHdhdGNoLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM4RjU5N0NBMkE1NzQxN0ZCQUI5MkZENiAvKiBS
YW5kb21EZXZpY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmFu
ZG9tRGV2aWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q1NDk3QUExNTg1
N0QwMzAwQjVCQzMwIC8qIE1lZGlhVGltZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBNZWRpYVRpbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
RDU0OTdBQjE1ODU3RDAzMDBCNUJDMzAgLyogTWVkaWFUaW1lLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE1lZGlhVGltZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDRTQ2NTE2RDE5REIxRkI0MDAzRUNBMDUgLyogTlNNYXBUYWJsZVNQSS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBOU01hcFRhYmxlU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC03OTAsOCArNzk0LDYgQEAKIAkJRkU4OTI1QUYxRDAwREFFQzAwNDY5MDdF
IC8qIEluZGVudGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGVudGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFREFDRDNCMTYzMEY4M0YwMEM2OTYz
NCAvKiBTdGFja1N0YXRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFN0YWNrU3RhdHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRURBQ0QzQzE2
MzBGODNGMDBDNjk2MzQgLyogU3RhY2tTdGF0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTdGFja1N0YXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTI0RjFC
MjQ4NjE5RjQxMjI5NkQxQzE5QyAvKiBSYW5kb21EZXZpY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gUmFuZG9tRGV2aWNlLmg7IHBhdGggPSBSYW5kb21EZXZpY2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzhGNTk3Q0EyQTU3NDE3RkJBQjkyRkQ2IC8qIFJh
bmRvbURldmljZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBSYW5k
b21EZXZpY2UuY3BwOyBwYXRoID0gUmFuZG9tRGV2aWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIC8qIEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4g
UEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwpAQCAtMTEwMyw2ICsxMTA1LDcgQEAK
IAkJCQkwRkY4NjA5NDFCQ0NCRDc0MDA0NTEyN0YgLyogUG9pbnRlckNvbXBhcmlzb24uaCAqLywK
IAkJCQkwRjlEMzM1RDE2NURCQTczMDA1QUQzODcgLyogUHJpbnRTdHJlYW0uY3BwICovLAogCQkJ
CTBGOUQzMzVFMTY1REJBNzMwMDVBRDM4NyAvKiBQcmludFN0cmVhbS5oICovLAorCQkJCTUzRUMy
NTNDMUU5NUFEMzAwMDA4MzFCOSAvKiBQcmlvcml0eVF1ZXVlLmggKi8sCiAJCQkJMEZDNDQ4ODIx
NkZFOUZFMTAwODQ0QkU5IC8qIFByb2Nlc3NJRC5oICovLAogCQkJCTE0M0Y2MTFEMTU2NUYwRjkw
MERCNTE0QSAvKiBSQU1TaXplLmNwcCAqLywKIAkJCQkxNDNGNjExRTE1NjVGMEY5MDBEQjUxNEEg
LyogUkFNU2l6ZS5oICovLApAQCAtMTQxMiw2ICsxNDE1LDcgQEAKIAkJCQk4MTM0MDEzOTE1QjA5
MkZEMDAxRkYwQjggLyogQmFzZTY0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNBOTE1MUE4
MjVCMDA0MTIzRkYgLyogYmlnbnVtLWR0b2EuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0FC
MTUxQTgyNUIwMDQxMjNGRiAvKiBiaWdudW0uaCBpbiBIZWFkZXJzICovLAorCQkJCTUzRUMyNTNF
MUU5NUFEMzAwMDA4MzFCOSAvKiBQcmlvcml0eVF1ZXVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
OEE0NzQ1MjE1MUE4MjVCMDA0MTIzRkYgLyogQmluYXJ5U2VtYXBob3JlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBOEE0NzM4QTE1MUE4MjVCMDA0MTIzRkYgLyogQml0bWFwLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBOEE0NzM4QzE1MUE4MjVCMDA0MTIzRkYgLyogQml0VmVjdG9yLmggaW4gSGVhZGVy
cyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMuaCBiL1NvdXJjZS9X
VEYvd3RmL01hdGhFeHRyYXMuaAppbmRleCA3OGRhZWFmNzM4ZDA2OWM4NjhhZjhkZTk2ZDA3NGY2
MWI5NmJhNDAzLi40MGM3N2UzNTQxNzQ1ZDMyZWE5OTk2MmIzM2ZlMjBhMGM1MzQzNmFiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9NYXRoRXh0cmFzLmgKKysrIGIvU291cmNlL1dURi93dGYv
TWF0aEV4dHJhcy5oCkBAIC0yNzcsNiArMjc3LDExIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlu
bGluZSBib29sIGlzR3JlYXRlclRoYW5Ob25aZXJvUG93ZXJPZlR3byhUIHZhbHVlLCB1bnNpZ25l
CiAgICAgcmV0dXJuICEhKCh2YWx1ZSA+PiAxKSA+PiAocG93ZXIgLSAxKSk7CiB9CiAKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBpbmxpbmUgYm9vbCBpc0xlc3NUaGFuKGNvbnN0IFQm
IGEsIGNvbnN0IFQmIGIpIHsgcmV0dXJuIGEgPCBiOyB9Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBj
b25zdGV4cHIgaW5saW5lIGJvb2wgaXNMZXNzVGhhbkVxdWFsKGNvbnN0IFQmIGEsIGNvbnN0IFQm
IGIpIHsgcmV0dXJuIGEgPD0gYjsgfQordGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGlu
bGluZSBib29sIGlzR3JlYXRlclRoYW4oY29uc3QgVCYgYSwgY29uc3QgVCYgYikgeyByZXR1cm4g
YSA+IGI7IH0KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBpbmxpbmUgYm9vbCBpc0dy
ZWF0ZXJUaGFuRXF1YWwoY29uc3QgVCYgYSwgY29uc3QgVCYgYikgeyByZXR1cm4gYSA+PSBiOyB9
CisKICNpZm5kZWYgVUlOVDY0X0MKICNpZiBDT01QSUxFUihNU1ZDKQogI2RlZmluZSBVSU5UNjRf
QyhjKSBjICMjIHVpNjQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1ByaW9yaXR5UXVldWUu
aCBiL1NvdXJjZS9XVEYvd3RmL1ByaW9yaXR5UXVldWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMWY2ZmFlODFm
NWQ0MWVkNjkwMTRmNTgzOTgxOWQ2YTYzMjNiYzYyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dURi93dGYvUHJpb3JpdHlRdWV1ZS5oCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNl
IFdURiB7CisKKy8vIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhIGJhc2ljIHByaW9yaXR5IHF1ZXVl
LiBUaGUgY2xhc3MgaXMgYmFja2VkIGFzIGEgYmluYXJ5IGhlYXAsIGxpa2Ugc3RkOjpwcmlvcml0
eV9xdWV1ZS4KKy8vIFByaW9yaXR5UXVldWUgaGFzIGEgY291cGxlIG9mIGFkdmFudGFnZXMgb3Zl
ciBzdGQ6OnByaW9yaXR5X3F1ZXVlOgorLy8KKy8vIDEpIFRoZSBiYWNraW5nIHZlY3RvciBpcyBm
YXN0TWFsbG9jZWQuCisvLyAyKSBZb3UgY2FuIGl0ZXJhdGUgdGhlIGVsZW1lbnRzLgorLy8gMykg
SXQgaGFzIGluLXBsYWNlIGRlY3JlYXNlL2luY3JlYXNlS2V5IG1ldGhvZHMsIGFsdGhvdWdoIHRo
ZXkgYXJlIHN0aWxsIE8obikgcmF0aGVyIHRoYW4gTyhsb2cobikpLgorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBib29sICgqaXNIaWdoZXJQcmlvcml0eSkoY29uc3QgVCYsIGNvbnN0IFQmKSA9IGlz
TGVzc1RoYW48VD4sIHNpemVfdCBpbmxpbmVDYXBhY2l0eSA9IDA+CitjbGFzcyBQcmlvcml0eVF1
ZXVlIHsKKyAgICB1c2luZyBCdWZmZXJUeXBlID0gVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PjsK
KyAgICB1c2luZyBjb25zdF9pdGVyYXRvciA9IHR5cGVuYW1lIEJ1ZmZlclR5cGU6OmNvbnN0X2l0
ZXJhdG9yOworcHVibGljOgorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9idWZm
ZXIuc2l6ZSgpOyB9CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIu
aXNFbXB0eSgpOyB9CisKKyAgICB2b2lkIGVucXVldWUoVCBlbGVtZW50KQorICAgIHsKKyAgICAg
ICAgc2l6ZV90IGxvY2F0aW9uID0gbV9idWZmZXIuc2l6ZSgpOworICAgICAgICBtX2J1ZmZlci5h
cHBlbmQoc3RkOjpmb3J3YXJkPFQ+KGVsZW1lbnQpKTsKKyAgICAgICAgc2lmdFVwKGxvY2F0aW9u
KTsKKyAgICB9CisKKyAgICBjb25zdCBUJiBwZWVrKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXJb
MF07IH0KKyAgICBUIGRlcXVldWUoKQorICAgIHsKKyAgICAgICAgc3RkOjpzd2FwKG1fYnVmZmVy
WzBdLCBtX2J1ZmZlci5sYXN0KCkpOworICAgICAgICBUIHJlc3VsdCA9IG1fYnVmZmVyLnRha2VM
YXN0KCk7CisgICAgICAgIHNpZnREb3duKDApOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBkZWNyZWFzZUtl
eShjb25zdCBGdW5jdG9yJiBkZXNpcmVkRWxlbWVudCkKKyAgICB7CisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9idWZmZXIuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChk
ZXNpcmVkRWxlbWVudChtX2J1ZmZlcltpXSkpIHsKKyAgICAgICAgICAgICAgICBzaWZ0RG93bihp
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgQVNTRVJUKGlzVmFsaWRIZWFwKCkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+CisgICAgdm9pZCBpbmNyZWFzZUtleShjb25zdCBGdW5jdG9yJiBkZXNpcmVk
RWxlbWVudCkKKyAgICB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9idWZmZXIu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChkZXNpcmVkRWxlbWVudChtX2J1ZmZlcltp
XSkpIHsKKyAgICAgICAgICAgICAgICBzaWZ0VXAoaSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIEFTU0VSVChpc1ZhbGlkSGVhcCgp
KTsKKyAgICB9CisKKyAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1f
YnVmZmVyLmJlZ2luKCk7IH07CisgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1
cm4gbV9idWZmZXIuZW5kKCk7IH07CisKKyAgICBib29sIGlzVmFsaWRIZWFwKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9idWZmZXIuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgICAgIGlmIChsZWZ0Q2hpbGRPZihpKSA8IG1fYnVmZmVyLnNpemUoKSAmJiAh
aXNIaWdoZXJQcmlvcml0eShtX2J1ZmZlcltpXSwgbV9idWZmZXJbbGVmdENoaWxkT2YoaSldKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAocmlnaHRDaGls
ZE9mKGkpIDwgbV9idWZmZXIuc2l6ZSgpICYmICFpc0hpZ2hlclByaW9yaXR5KG1fYnVmZmVyW2ld
LCBtX2J1ZmZlcltyaWdodENoaWxkT2YoaSldKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCitwcm90ZWN0ZWQ6
CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgcGFyZW50T2Yoc2l6ZV90IGxvY2F0aW9uKSB7
IEFTU0VSVChsb2NhdGlvbik7IHJldHVybiAobG9jYXRpb24gLSAxKSAvIDI7IH0KKyAgICBzdGF0
aWMgY29uc3RleHByIHNpemVfdCBsZWZ0Q2hpbGRPZihzaXplX3QgbG9jYXRpb24pIHsgcmV0dXJu
IGxvY2F0aW9uICogMiArIDE7IH0KKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCByaWdodENo
aWxkT2Yoc2l6ZV90IGxvY2F0aW9uKSB7IHJldHVybiBsZWZ0Q2hpbGRPZihsb2NhdGlvbikgKyAx
OyB9CisKKyAgICB2b2lkIHNpZnRVcChzaXplX3QgbG9jYXRpb24pCisgICAgeworICAgICAgICB3
aGlsZSAobG9jYXRpb24pIHsKKyAgICAgICAgICAgIGF1dG8gcGFyZW50ID0gcGFyZW50T2YobG9j
YXRpb24pOworICAgICAgICAgICAgaWYgKGlzSGlnaGVyUHJpb3JpdHkobV9idWZmZXJbcGFyZW50
XSwgbV9idWZmZXJbbG9jYXRpb25dKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgICAgIHN0ZDo6c3dhcChtX2J1ZmZlcltwYXJlbnRdLCBtX2J1ZmZlcltsb2NhdGlvbl0pOwor
ICAgICAgICAgICAgbG9jYXRpb24gPSBwYXJlbnQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2
b2lkIHNpZnREb3duKHNpemVfdCBsb2NhdGlvbikKKyAgICB7CisgICAgICAgIHdoaWxlIChsZWZ0
Q2hpbGRPZihsb2NhdGlvbikgPCBtX2J1ZmZlci5zaXplKCkpIHsKKyAgICAgICAgICAgIHNpemVf
dCBoaWdoZXJQcmlvcml0eUNoaWxkOworICAgICAgICAgICAgaWYgKExJS0VMWShyaWdodENoaWxk
T2YobG9jYXRpb24pIDwgbV9idWZmZXIuc2l6ZSgpKSkKKyAgICAgICAgICAgICAgICBoaWdoZXJQ
cmlvcml0eUNoaWxkID0gaXNIaWdoZXJQcmlvcml0eShtX2J1ZmZlcltsZWZ0Q2hpbGRPZihsb2Nh
dGlvbildLCBtX2J1ZmZlcltyaWdodENoaWxkT2YobG9jYXRpb24pXSkgPyBsZWZ0Q2hpbGRPZihs
b2NhdGlvbikgOiByaWdodENoaWxkT2YobG9jYXRpb24pOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIGhpZ2hlclByaW9yaXR5Q2hpbGQgPSBsZWZ0Q2hpbGRPZihsb2NhdGlvbik7
CisKKyAgICAgICAgICAgIGlmIChpc0hpZ2hlclByaW9yaXR5KG1fYnVmZmVyW2xvY2F0aW9uXSwg
bV9idWZmZXJbaGlnaGVyUHJpb3JpdHlDaGlsZF0pKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICAgICAgc3RkOjpzd2FwKG1fYnVmZmVyW2xvY2F0aW9uXSwgbV9idWZmZXJbaGln
aGVyUHJpb3JpdHlDaGlsZF0pOworICAgICAgICAgICAgbG9jYXRpb24gPSBoaWdoZXJQcmlvcml0
eUNoaWxkOworICAgICAgICB9CisgICAgfQorCisgICAgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5
PiBtX2J1ZmZlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OlByaW9y
aXR5UXVldWU7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cK
aW5kZXggNWM2MDkxY2ViNWQ5ZjdjYzc0YzE1M2IxMjUwZmVkNDM5YTYxOWY4Yy4uZjNlNDgyZTJm
ZmNhYTZlOTYxMzdmNDNmYjc5MDg3MTBiNDcwZTRkNiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdl
TG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDE3LTA0LTA3ICBL
ZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBhIFBy
aW9yaXR5UXVldWUgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3MDU3OQorCisgICAgICAgIFJldmlld2VkIGJ5IFNhYW0gQmFyYXRpLgorCisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUHJpb3JpdHlRdWV1ZS5j
cHA6IEFkZGVkLgorICAgICAgICAob3BlcmF0b3IgIF96ICk6CisgICAgICAgIChlbnF1ZXVlKToK
KyAgICAgICAgKGRlcXVldWUpOgorICAgICAgICAoVEVTVCk6CisgICAgICAgIChjb21wYXJlTW92
ZSk6CisKIDIwMTctMDQtMDUgIEpvbmF0aGFuIEJlZGFyZCAgPGpiZWRhcmRAYXBwbGUuY29tPgog
CiAgICAgICAgIHdlYmtpdHB5OiBBZGQgcGlkIGxvZ2dpbmcgZm9yIHNpbXVsYXRvciBwcm9jZXNz
ZXMKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZDdlZTcxODE0NWE4ZDUzZDc0NWMyNmIyMWM3
MDQwYzc2YzQ1NzJmYS4uNDE0MzZhNjZhNjM4ZGFhZmZkNDQ3MzViY2YzZTBkZTAxOTEwZmFkYiAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE3MCw2ICsxNzAsNyBAQAogCQk1MzFDMUQ4RTFE
RjhFRjcyMDA2RTk3OUYgLyogTEVCRGVjb2Rlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzFDMUQ4RDFERjhFRjcyMDA2RTk3OUYgLyogTEVCRGVj
b2Rlci5jcHAgKi87IH07CiAJCTUzNjc3MDM0MUNDODAyMjgwMEQ0MjVCMSAvKiBXZWJTY3JpcHRP
YmplY3REZXNjcmlwdGlvbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzNjc3MDMzMUNDODAyMjgwMEQ0MjVCMSAvKiBXZWJTY3JpcHRPYmplY3REZXNj
cmlwdGlvbi5tbSAqLzsgfTsKIAkJNTM2NzcwMzYxQ0M4MUI2MTAwRDQyNUIxIC8qIFdlYlNjcmlw
dE9iamVjdERlc2NyaXB0aW9uLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTM2NzcwMzUxQ0M4MTJGOTAwRDQyNUIxIC8qIFdlYlNjcmlw
dE9iamVjdERlc2NyaXB0aW9uLmh0bWwgKi87IH07CisJCTUzRUMyNTQxMUU5NkZEODcwMDA4MzFC
OSAvKiBQcmlvcml0eVF1ZXVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUzRUMyNTNGMUU5NkJDODAwMDA4MzFCOSAvKiBQcmlvcml0eVF1ZXVlLmNw
cCAqLzsgfTsKIAkJNTU5N0Y4MzYxRDk1OTZDODAwNjZCQzIxIC8qIFN5bmNocm9uaXplZEZpeGVk
UXVldWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTU5N0Y4MzQxRDk1OTZDODAwNjZCQzIxIC8qIFN5bmNocm9uaXplZEZpeGVkUXVldWUuY3BwICov
OyB9OwogCQk1NzE0RUNCOTFDQThCNUIwMDAwNTFBQzggLyogRG93bmxvYWRSZXF1ZXN0T3JpZ2lu
YWxVUkwuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1NzE0RUNCODFDQThCNTg4MDAwNTFBQzggLyogRG93bmxvYWRSZXF1ZXN0T3JpZ2lu
YWxVUkwuaHRtbCAqLzsgfTsKIAkJNTcxNEVDQkIxQ0E4QkZFNDAwMDUxQUM4IC8qIERvd25sb2Fk
UmVxdWVzdE9yaWdpbmFsVVJMRnJhbWUuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzE0RUNCQTFDQThCRkQxMDAwNTFBQzggLyogRG93
bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkxGcmFtZS5odG1sICovOyB9OwpAQCAtMTA4Nyw2ICsxMDg4
LDcgQEAKIAkJNTMxQzFEOEQxREY4RUY3MjAwNkU5NzlGIC8qIExFQkRlY29kZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTEVCRGVjb2Rlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNjc3MDMzMUNDODAyMjgwMEQ0MjVCMSAvKiBXZWJTY3Jp
cHRPYmplY3REZXNjcmlwdGlvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IFdlYlNjcmlwdE9iamVjdERlc2NyaXB0aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MzY3NzAzNTFDQzgxMkY5MDBENDI1QjEgLyogV2ViU2NyaXB0T2JqZWN0RGVz
Y3JpcHRpb24uaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9IFdlYlNjcmlwdE9iamVj
dERlc2NyaXB0aW9uLmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzRUMyNTNG
MUU5NkJDODAwMDA4MzFCOSAvKiBQcmlvcml0eVF1ZXVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFByaW9yaXR5UXVldWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1NTk3RjgzNDFEOTU5NkM4MDA2NkJDMjEgLyogU3luY2hyb25pemVkRml4ZWRR
dWV1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTeW5jaHJvbml6
ZWRGaXhlZFF1ZXVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcxNEVDQjgx
Q0E4QjU4ODAwMDUxQUM4IC8qIERvd25sb2FkUmVxdWVzdE9yaWdpbmFsVVJMLmh0bWwgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBEb3dubG9hZFJlcXVlc3RPcmlnaW5hbFVSTC5odG1sOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzE0RUNCQTFDQThCRkQxMDAwNTFBQzggLyog
RG93bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkxGcmFtZS5odG1sICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1s
OyBwYXRoID0gRG93bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkxGcmFtZS5odG1sOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjA5Nyw2ICsyMDk5LDcgQEAKIAkJCQkxQUZERTY1NDE5NTNC
MkMwMDBDNDhGRkEgLyogT3B0aW9uYWwuY3BwICovLAogCQkJCUNFNTBEOEM4MUM4NjY1Q0UwMDcy
RUE1QSAvKiBPcHRpb25TZXQuY3BwICovLAogCQkJCTBGRTQ0Nzk3MUI3NkYxRTMwMDk0OThFQiAv
KiBQYXJraW5nTG90LmNwcCAqLywKKwkJCQk1M0VDMjUzRjFFOTZCQzgwMDAwODMxQjkgLyogUHJp
b3JpdHlRdWV1ZS5jcHAgKi8sCiAJCQkJMEZDNkM0Q0IxNDEwMjdFMDAwNUI3RjBDIC8qIFJlZEJs
YWNrVHJlZS5jcHAgKi8sCiAJCQkJOTNBNDI3QUExODBEQTI2NDAwQ0QyNEQ3IC8qIFJlZi5jcHAg
Ki8sCiAJCQkJODZCRDE5OTcxQTJEQjA1QjAwNkRDRjBBIC8qIFJlZkNvdW50ZXIuY3BwICovLApA
QCAtMjY0Myw2ICsyNjQ2LDcgQEAKIAkJCQkxQTc3QkFBMzFEOUFGRkZDMDA1RkM1NjggLyogT3B0
aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjAyMUQwQTU5MEMwMEZFQkNGMyAv
KiBPU09iamVjdFB0ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREY1OTFEMEE1OTBDMDBG
RUJDRjMgLyogUGFya2luZ0xvdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1M0VDMjU0MTFFOTZG
RDg3MDAwODMxQjkgLyogUHJpb3JpdHlRdWV1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3Qzgz
REYxMzFEMEE1OTBDMDBGRUJDRjMgLyogUmVkQmxhY2tUcmVlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTdDODNERjE0MUQwQTU5MEMwMEZFQkNGMyAvKiBSZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJN0M4M0RGMTUxRDBBNTkwQzAwRkVCQ0YzIC8qIFJlZkNvdW50ZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Qcmlvcml0eVF1
ZXVlLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ByaW9yaXR5UXVldWUuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmM0NDU3ZDYyM2VhYWY3YWI2ODAyNzAzOGY5MzdjNGZlMjkwMGJjNDkKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Qcmlvcml0eVF1
ZXVlLmNwcApAQCAtMCwwICsxLDI1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2luY2x1ZGUgIk1vdmVPbmx5LmgiCisKKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KKyNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Qcmlvcml0eVF1ZXVlLmg+CisK
K2NvbnN0ZXhwciBzdGQ6OnNpemVfdCBvcGVyYXRvciAiIiBfeiAoIHVuc2lnbmVkIGxvbmcgbG9u
ZyBuICkgeyByZXR1cm4gbjsgfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sICgqaXNIaWdo
ZXJQcmlvcml0eSkoY29uc3QgVCYsIGNvbnN0IFQmKT4KK3N0YXRpYyB2b2lkIGVucXVldWUoUHJp
b3JpdHlRdWV1ZTxULCBpc0hpZ2hlclByaW9yaXR5PiYgcXVldWUsIFQgZWxlbWVudCkKK3sKKyAg
ICBzaXplX3Qgc2l6ZUJlZm9yZSA9IHF1ZXVlLnNpemUoKTsKKyAgICBxdWV1ZS5lbnF1ZXVlKFdU
Rk1vdmUoZWxlbWVudCkpOworICAgIEVYUEVDVF9FUShzaXplQmVmb3JlICsgMSwgcXVldWUuc2l6
ZSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UocXVldWUuaXNFbXB0eSgpKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVCwgYm9vbCAoKmlzSGlnaGVyUHJpb3JpdHkpKGNvbnN0IFQmLCBjb25zdCBUJik+
CitzdGF0aWMgVCBkZXF1ZXVlKFByaW9yaXR5UXVldWU8VCwgaXNIaWdoZXJQcmlvcml0eT4mIHF1
ZXVlKQoreworICAgIEVYUEVDVF9GQUxTRShxdWV1ZS5pc0VtcHR5KCkpOworICAgIHNpemVfdCBz
aXplQmVmb3JlID0gcXVldWUuc2l6ZSgpOworICAgIFQgcmVzdWx0ID0gcXVldWUuZGVxdWV1ZSgp
OworICAgIEVYUEVDVF9FUShzaXplQmVmb3JlIC0gMSwgcXVldWUuc2l6ZSgpKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCisKK1RFU1QoV1RGX1ByaW9yaXR5UXVldWUsIEJhc2ljKQoreworICAg
IGNvbnN0IHVuc2lnbmVkIG51bUVsZW1lbnRzID0gMTA7CisgICAgUHJpb3JpdHlRdWV1ZTx1bnNp
Z25lZD4gcXVldWU7CisKKyAgICBFWFBFQ1RfRVEoMF96LCBxdWV1ZS5zaXplKCkpOworICAgIEVY
UEVDVF9UUlVFKHF1ZXVlLmlzRW1wdHkoKSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbnVtRWxlbWVudHM7ICsraSkKKyAgICAgICAgZW5xdWV1ZShxdWV1ZSwgaSk7CisKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7ICsraSkgeworICAgICAgICBFWFBF
Q1RfRVEoaSwgcXVldWUucGVlaygpKTsKKyAgICAgICAgRVhQRUNUX0VRKGksIGRlcXVldWUocXVl
dWUpKTsKKyAgICAgICAgRVhQRUNUX0VRKG51bUVsZW1lbnRzIC0gaSAtIDEsIHF1ZXVlLnNpemUo
KSk7CisgICAgfQorCisgICAgRVhQRUNUX1RSVUUocXVldWUuaXNFbXB0eSgpKTsKK30KKworVEVT
VChXVEZfUHJpb3JpdHlRdWV1ZSwgQ3VzdG9tUHJpb3JpdHlGdW5jdGlvbikKK3sKKyAgICBjb25z
dCB1bnNpZ25lZCBudW1FbGVtZW50cyA9IDEwOworICAgIFByaW9yaXR5UXVldWU8dW5zaWduZWQs
IGlzR3JlYXRlclRoYW48dW5zaWduZWQ+PiBxdWV1ZTsKKworICAgIEVYUEVDVF9FUSgwX3osIHF1
ZXVlLnNpemUoKSk7CisgICAgRVhQRUNUX1RSVUUocXVldWUuaXNFbXB0eSgpKTsKKworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgKytpKSB7CisgICAgICAgIGVucXVl
dWUocXVldWUsIGkpOworICAgICAgICBFWFBFQ1RfRVEoaSArIDEsIHF1ZXVlLnNpemUoKSk7Cisg
ICAgICAgIEVYUEVDVF9GQUxTRShxdWV1ZS5pc0VtcHR5KCkpOworICAgIH0KKworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgKytpKSB7CisgICAgICAgIEVYUEVDVF9F
UShudW1FbGVtZW50cyAtIGkgLSAxLCBxdWV1ZS5wZWVrKCkpOworICAgICAgICBFWFBFQ1RfRVEo
bnVtRWxlbWVudHMgLSBpIC0gMSwgZGVxdWV1ZShxdWV1ZSkpOworICAgICAgICBFWFBFQ1RfRVEo
bnVtRWxlbWVudHMgLSBpIC0gMSwgcXVldWUuc2l6ZSgpKTsKKyAgICB9CisKKyAgICBFWFBFQ1Rf
VFJVRShxdWV1ZS5pc0VtcHR5KCkpOworfQorCit0ZW1wbGF0ZTxib29sICgqaXNIaWdoZXJQcmlv
cml0eSkoY29uc3QgdW5zaWduZWQmLCBjb25zdCB1bnNpZ25lZCYpPgorc3RhdGljIGJvb2wgY29t
cGFyZU1vdmUoY29uc3QgTW92ZU9ubHkmIG0xLCBjb25zdCBNb3ZlT25seSYgbTIpCit7CisgICAg
cmV0dXJuIGlzSGlnaGVyUHJpb3JpdHkobTEudmFsdWUoKSwgbTIudmFsdWUoKSk7Cit9CisKKwor
VEVTVChXVEZfUHJpb3JpdHlRdWV1ZSwgTW92ZU9ubHkpCit7CisgICAgUHJpb3JpdHlRdWV1ZTxN
b3ZlT25seSwgY29tcGFyZU1vdmU8aXNMZXNzVGhhbjx1bnNpZ25lZD4+PiBxdWV1ZTsKKworICAg
IFZlY3Rvcjx1bnNpZ25lZD4gdmFsdWVzID0geyAyMywgNTQsIDQsIDgsIDEsIDIsIDQsIDAgfTsK
KyAgICBWZWN0b3I8dW5zaWduZWQ+IHNvcnRlZCA9IHZhbHVlczsKKyAgICBzdGQ6OnNvcnQoc29y
dGVkLmJlZ2luKCksIHNvcnRlZC5lbmQoKSk7CisKKyAgICBmb3IgKGF1dG8gdmFsdWUgOiB2YWx1
ZXMpCisgICAgICAgIHF1ZXVlLmVucXVldWUoTW92ZU9ubHkodmFsdWUpKTsKKworICAgIGZvciAo
YXV0byBzb3J0ZWRWYWx1ZSA6IHNvcnRlZCkgeworICAgICAgICBhdXRvIHZhbHVlID0gcXVldWUu
ZGVxdWV1ZSgpOworICAgICAgICBFWFBFQ1RfRVEoc29ydGVkVmFsdWUsIHZhbHVlLnZhbHVlKCkp
OworICAgIH0KK30KKworVEVTVChXVEZfUHJpb3JpdHlRdWV1ZSwgRGVjcmVhc2VLZXkpCit7Cisg
ICAgUHJpb3JpdHlRdWV1ZTxNb3ZlT25seSwgY29tcGFyZU1vdmU8aXNMZXNzVGhhbjx1bnNpZ25l
ZD4+PiBxdWV1ZTsKKworICAgIFZlY3Rvcjx1bnNpZ25lZD4gdmFsdWVzID0geyAyMywgNTQsIDQs
IDgsIDEsIDIsIDQsIDAgfTsKKyAgICBWZWN0b3I8dW5zaWduZWQ+IHNvcnRlZCA9IHZhbHVlczsK
KyAgICBzb3J0ZWRbM10gPSAxMjsKKyAgICBzdGQ6OnNvcnQoc29ydGVkLmJlZ2luKCksIHNvcnRl
ZC5lbmQoKSk7CisKKyAgICBmb3IgKGF1dG8gdmFsdWUgOiB2YWx1ZXMpCisgICAgICAgIHF1ZXVl
LmVucXVldWUoTW92ZU9ubHkodmFsdWUpKTsKKworICAgIHF1ZXVlLmRlY3JlYXNlS2V5KFtdIChN
b3ZlT25seSYgbSkgeworICAgICAgICBpZiAobS52YWx1ZSgpID09IDgpIHsKKyAgICAgICAgICAg
IG0gPSBNb3ZlT25seSgxMik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSk7CisKKyAgICBmb3IgKGF1dG8gc29ydGVkVmFs
dWUgOiBzb3J0ZWQpIHsKKyAgICAgICAgYXV0byB2YWx1ZSA9IHF1ZXVlLmRlcXVldWUoKTsKKyAg
ICAgICAgRVhQRUNUX0VRKHNvcnRlZFZhbHVlLCB2YWx1ZS52YWx1ZSgpKTsKKyAgICB9Cit9CisK
K1RFU1QoV1RGX1ByaW9yaXR5UXVldWUsIEluY3JlYXNlS2V5KQoreworICAgIFByaW9yaXR5UXVl
dWU8TW92ZU9ubHksIGNvbXBhcmVNb3ZlPGlzR3JlYXRlclRoYW48dW5zaWduZWQ+Pj4gcXVldWU7
CisKKyAgICBWZWN0b3I8dW5zaWduZWQ+IHZhbHVlcyA9IHsgMjMsIDU0LCA0LCA4LCAxLCAyLCA0
LCAwIH07CisgICAgVmVjdG9yPHVuc2lnbmVkPiBzb3J0ZWQgPSB2YWx1ZXM7CisgICAgc29ydGVk
WzNdID0gMTI7CisgICAgc3RkOjpzb3J0KHNvcnRlZC5iZWdpbigpLCBzb3J0ZWQuZW5kKCksIHN0
ZDo6Z3JlYXRlcjx1bnNpZ25lZD4oKSk7CisKKyAgICBmb3IgKGF1dG8gdmFsdWUgOiB2YWx1ZXMp
CisgICAgICAgIHF1ZXVlLmVucXVldWUoTW92ZU9ubHkodmFsdWUpKTsKKworICAgIHF1ZXVlLmlu
Y3JlYXNlS2V5KFtdIChNb3ZlT25seSYgbSkgeworICAgICAgICBpZiAobS52YWx1ZSgpID09IDgp
IHsKKyAgICAgICAgICAgIG0gPSBNb3ZlT25seSgxMik7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSk7CisKKyAgICBmb3Ig
KGF1dG8gc29ydGVkVmFsdWUgOiBzb3J0ZWQpIHsKKyAgICAgICAgYXV0byB2YWx1ZSA9IHF1ZXVl
LmRlcXVldWUoKTsKKyAgICAgICAgRVhQRUNUX0VRKHNvcnRlZFZhbHVlLCB2YWx1ZS52YWx1ZSgp
KTsKKyAgICB9Cit9CisKK1RFU1QoV1RGX1ByaW9yaXR5UXVldWUsIEl0ZXJhdGlvbikKK3sKKyAg
ICBQcmlvcml0eVF1ZXVlPE1vdmVPbmx5LCBjb21wYXJlTW92ZTxpc0dyZWF0ZXJUaGFuPHVuc2ln
bmVkPj4+IHF1ZXVlOworCisgICAgVmVjdG9yPHVuc2lnbmVkPiB2YWx1ZXMgPSB7IDIzLCA1NCwg
NCwgOCwgMSwgMiwgNCwgMCB9OworICAgIFZlY3Rvcjx1bnNpZ25lZD4gc29ydGVkID0gdmFsdWVz
OworICAgIHN0ZDo6c29ydChzb3J0ZWQuYmVnaW4oKSwgc29ydGVkLmVuZCgpLCBzdGQ6OmdyZWF0
ZXI8dW5zaWduZWQ+KCkpOworCisgICAgZm9yIChhdXRvIHZhbHVlIDogdmFsdWVzKQorICAgICAg
ICBxdWV1ZS5lbnF1ZXVlKE1vdmVPbmx5KHZhbHVlKSk7CisKKyAgICB2YWx1ZXMuY2xlYXIoKTsK
KyAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBxdWV1ZSkKKyAgICAgICAgdmFsdWVzLmFwcGVuZChl
bGVtZW50LnZhbHVlKCkpOworCisgICAgc3RkOjpzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMu
ZW5kKCksIHN0ZDo6Z3JlYXRlcjx1bnNpZ25lZD4oKSk7CisgICAgRVhQRUNUX0VRKHZhbHVlcy5z
aXplKCksIHNvcnRlZC5zaXplKCkpOworICAgIGlmICh2YWx1ZXMuc2l6ZSgpID09IHNvcnRlZC5z
aXplKCkpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyAr
K2kpCisgICAgICAgICAgICBFWFBFQ1RfRVEoc29ydGVkW2ldLCB2YWx1ZXNbaV0pOworICAgIH0K
K30KKworVEVTVChXVEZfUHJpb3JpdHlRdWV1ZSwgUmFuZG9tQWN0aW9ucykKK3sKKyAgICBjb25z
dCB1aW50NjRfdCBwcmltZTEgPSAxNTQ4NzIzNzsKKyAgICBjb25zdCB1aW50NjRfdCBwcmltZTIg
PSAxNzk0MjgyODM7CisgICAgdWludDY0X3QgcmFuZG9tTnVtYmVyID0gMTk0MDU3MDk7CisKKyAg
ICBhdXRvIG5leHRSYW5kb20gPSBbJl0gKCkgLT4gdWludDY0X3QgeworICAgICAgICByYW5kb21O
dW1iZXIgPSByYW5kb21OdW1iZXIgKiBwcmltZTEgKyBwcmltZTI7CisgICAgICAgIHJldHVybiBy
YW5kb21OdW1iZXI7CisgICAgfTsKKworICAgIFByaW9yaXR5UXVldWU8dWludDY0X3Q+IHF1ZXVl
OworICAgIFZlY3Rvcjx1aW50NjRfdD4gdmFsdWVzOworCisgICAgZW51bSBDYXNlcyB7CisgICAg
ICAgIEVucXVldWUsCisgICAgICAgIERlcXVldWUsCisgICAgICAgIE51bWJlck9mQ2FzZXMKKyAg
ICB9OworCisgICAgLy8gU2VlZCB0aGUgcXVldWUuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IDEwMDsgKytpKSB7CisgICAgICAgIGF1dG8gbnVtYmVyID0gbmV4dFJhbmRvbSgpOworICAg
ICAgICBxdWV1ZS5lbnF1ZXVlKG51bWJlcik7CisgICAgICAgIHZhbHVlcy5hcHBlbmQobnVtYmVy
KTsKKyAgICAgICAgRVhQRUNUX1RSVUUocXVldWUuaXNWYWxpZEhlYXAoKSk7CisgICAgfQorCisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICAgICAgYXV0byBu
dW1iZXIgPSBuZXh0UmFuZG9tKCk7CisgICAgICAgIHN3aXRjaCAobnVtYmVyICUgTnVtYmVyT2ZD
YXNlcykgeworICAgICAgICBjYXNlIEVucXVldWU6IHsKKyAgICAgICAgICAgIHF1ZXVlLmVucXVl
dWUobnVtYmVyKTsKKyAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQobnVtYmVyKTsKKyAgICAgICAg
ICAgIEVYUEVDVF9UUlVFKHF1ZXVlLmlzVmFsaWRIZWFwKCkpOworICAgICAgICAgICAgRVhQRUNU
X0VRKHZhbHVlcy5zaXplKCksIHF1ZXVlLnNpemUoKSk7CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorCisgICAgICAgIGNhc2UgRGVxdWV1ZTogeworICAgICAgICAgICAgRVhQRUNU
X0VRKHZhbHVlcy5zaXplKCksIHF1ZXVlLnNpemUoKSk7CisgICAgICAgICAgICBpZiAodmFsdWVz
LnNpemUoKSAhPSBxdWV1ZS5zaXplKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgICAgIGlmICghdmFsdWVzLnNpemUoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICAgICAgLy8gU29ydCB3aXRoIGdyZWF0ZXIgc28gdGhlIGxhc3QgZWxlbWVudCBzaG91
bGQgYmUgdGhlIG9uZSB3ZSBkZXF1ZXVlLgorICAgICAgICAgICAgc3RkOjpzb3J0KHZhbHVlcy5i
ZWdpbigpLCB2YWx1ZXMuZW5kKCksIHN0ZDo6Z3JlYXRlcjx1aW50NjRfdD4oKSk7CisgICAgICAg
ICAgICBFWFBFQ1RfRVEodmFsdWVzLnRha2VMYXN0KCksIHF1ZXVlLmRlcXVldWUoKSk7CisKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIEVY
UEVDVF9UUlVFKHF1ZXVlLmlzVmFsaWRIZWFwKCkpOworICAgIH0KK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306539</attachid>
            <date>2017-04-07 15:01:57 -0700</date>
            <delta_ts>2017-04-07 17:35:00 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-170579-20170407150157.patch</filename>
            <type>text/plain</type>
            <size>40986</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1MTE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
NDNkYmE4ZWE1MGIzYzM4YWI5YTJmYTU4M2M2ZDBjNjhjZDM3ZmNlLi4zNTFkMzFhN2U3YjgzZWM5
ZTg4NzMxMTU3MDIyMmE0MjFjODQ3NzFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMiBAQAorMjAxNy0wNC0wNyAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBBZGQgYSBQcmlvcml0eVF1ZXVlIGNsYXNzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA1NzkKKworICAgICAgICBSZXZp
ZXdlZCBieSBTYWFtIEJhcmF0aS4KKworICAgICAgICBVcGRhdGUgV2FzbTo6V29ya2xpc3QgdG8g
dXNlIFdURjo6UHJpb3JpdHlRdWV1ZS4KKworICAgICAgICAqIHdhc20vV2FzbVdvcmtsaXN0LmNw
cDoKKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OmVucXVldWUpOgorICAgICAgICAoSlND
OjpXYXNtOjpXb3JrbGlzdDo6Y29tcGxldGVQbGFuU3luY2hyb25vdXNseSk6CisgICAgICAgIChK
U0M6Oldhc206OldvcmtsaXN0OjpzdG9wQWxsUGxhbnNGb3JWTSk6CisgICAgICAgIChKU0M6Oldh
c206OldvcmtsaXN0Ojp+V29ya2xpc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpXb3JrbGlzdDo6
aXRlcmF0ZSk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XYXNtV29ya2xpc3QuaDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OmlzSGlnaGVyUHJpb3JpdHkpOgorICAgICAgICAoSlND
OjpXYXNtOjpXb3JrbGlzdDo6Q29tcGFyYXRvcjo6b3BlcmF0b3IoKSk6IERlbGV0ZWQuCisKIDIw
MTctMDQtMDcgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgV2Vi
QXNzZW1ibHk6IE1vZHVsZTo6Z2V0T3JDcmVhdGVDb2RlQmxvY2sgaXMgd3JvbmcKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggZTg5
NGI1NmRhNzIzODM1YzNlMTBhN2ViYWU1ZDM5YWM2MzdkM2U2OS4uM2NkYWE1N2UxMmNlM2U5MWE3
ZWVkNjI2NGZjYjEzZGNkMjVlZDNhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0OCBAQAorMjAxNy0wNC0wNyAg
S2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYSBQ
cmlvcml0eVF1ZXVlIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzA1NzkKKworICAgICAgICBSZXZpZXdlZCBieSBTYWFtIEJhcmF0aS4KKwor
ICAgICAgICBUaGlzIHBhdGNoIGFkZHMgYSBuZXcgUHJpb3JpdHlRdWV1ZSBjbGFzcyB0aGF0IGlz
IGJhY2tlZCBieQorICAgICAgICBXVEY6OlZlY3Rvci4gIEl0IGFsc28gaGFzIGEgbnVtYmVyIG9m
IG90aGVyIG5pY2V0aWVzIHN1Y2ggYXMgYmVpbmcKKyAgICAgICAgYWJsZSB0byBpdGVyYXRlIHRo
ZSBxdWV1ZSBhbmQgaW5jcmVhc2Ugb3IgZGVjcmVhc2Uga2V5cy4KKworICAgICAgICBPbmUgbm90
ZSBpcyB0aGF0IGluY3JlYXNlS2V5IGFuZCBkZWNyZWFzZUtleSBhcmUgTyhuKSByYXRoZXIgdGhh
bgorICAgICAgICBPKGxvZyhuKSkuICBUcmFkaXRpb25hbGx5LCB0aGUgbG9va3VwIG9mIHRoZSBr
ZXkgaXMgZG9uZSB3aXRoIGEKKyAgICAgICAgaGFzaCBtYXAgYnV0IHRoYXQncyBub3QgZmVhc2li
bGUgaGVyZS4gIFRoaXMgaXMgYmVjYXVzZSB1bmxlc3MgdGhlCisgICAgICAgIHF1ZXVlJ3MgZWxl
bWVudCB0eXBlIGlzIGEgcG9pbnRlciB0aGVyZSBpcyBubyBnb29kIHdheSBtYWludGFpbiBhCisg
ICAgICAgIHBlcnNpc3RlbnQgcmVmZXJlbmNlIHRvIGV2ZXJ5IGVudHJ5IGluIHRoZSBxdWV1ZSB3
aGlsZSB3ZSBzaWZ0LgorICAgICAgICBUaGUgb25seSB3YXkgdG8gdXBkYXRlIHRoZSBsb2NhdGlv
biBvZiBhbiBlbnRyeSBpcyB0byBkbyBhIGhhc2gKKyAgICAgICAgdGFibGUgbG9va3VwIHdpdGgg
dGhlIGVudHJ5J3MgaGFzaCBidXQgdGhpcyBpcyBwcm9iYWJseSBtb3JlCisgICAgICAgIGV4cGVu
c2l2ZSB0aGFuIGp1c3QgZG9pbmcgYSBsaW5lYXIgc2VhcmNoLgorCisgICAgICAgIEFsc28sIGFk
ZCBjb21wYXJpc29uIG9wZXJhdG9yIGZ1bmN0aW9ucywgd2hpY2ggY2FuIGJlIHBhc3NlZCB0byBQ
cmlvcml0eVF1ZXVlLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogd3RmL01hdGhFeHRyYXMuaDoKKyAgICAgICAgKGlzTGVzc1RoYW4pOgorICAg
ICAgICAoaXNMZXNzVGhhbkVxdWFsKToKKyAgICAgICAgKGlzR3JlYXRlclRoYW4pOgorICAgICAg
ICAoaXNHcmVhdGVyVGhhbkVxdWFsKToKKyAgICAgICAgKiB3dGYvUHJpb3JpdHlRdWV1ZS5oOiBB
ZGRlZC4KKyAgICAgICAgKFdURjo6UHJpb3JpdHlRdWV1ZTo6c2l6ZSk6CisgICAgICAgIChXVEY6
OlByaW9yaXR5UXVldWU6OmlzRW1wdHkpOgorICAgICAgICAoV1RGOjpQcmlvcml0eVF1ZXVlOjpl
bnF1ZXVlKToKKyAgICAgICAgKFdURjo6UHJpb3JpdHlRdWV1ZTo6cGVlayk6CisgICAgICAgIChX
VEY6OlByaW9yaXR5UXVldWU6OmRlcXVldWUpOgorICAgICAgICAoV1RGOjpQcmlvcml0eVF1ZXVl
OjpkZWNyZWFzZUtleSk6CisgICAgICAgIChXVEY6OlByaW9yaXR5UXVldWU6OmluY3JlYXNlS2V5
KToKKyAgICAgICAgKFdURjo6UHJpb3JpdHlRdWV1ZTo6YmVnaW4pOgorICAgICAgICAoV1RGOjpQ
cmlvcml0eVF1ZXVlOjplbmQpOgorICAgICAgICAoV1RGOjpQcmlvcml0eVF1ZXVlOjppc1ZhbGlk
SGVhcCk6CisgICAgICAgIChXVEY6OlByaW9yaXR5UXVldWU6OnBhcmVudE9mKToKKyAgICAgICAg
KFdURjo6UHJpb3JpdHlRdWV1ZTo6bGVmdENoaWxkT2YpOgorICAgICAgICAoV1RGOjpQcmlvcml0
eVF1ZXVlOjpyaWdodENoaWxkT2YpOgorICAgICAgICAoV1RGOjpQcmlvcml0eVF1ZXVlOjpzaWZ0
VXApOgorICAgICAgICAoV1RGOjpQcmlvcml0eVF1ZXVlOjpzaWZ0RG93bik6CisKIDIwMTctMDQt
MDcgIFRpbmctV2VpIExhbiAgPGxhbnR3NDRAZ21haWwuY29tPgogCiAgICAgICAgIEluY2x1ZGUg
Y3N0ZGlvIGJlZm9yZSB1c2luZyBzc2NhbmYgYW5kIHN0ZGVycgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5jcHAKaW5kZXggNzk2OWZlNGQwOGZkMzgyZTEyOGUwMzcz
YTJkNTRmZmE3ZTI1YjIxNy4uMTdkNGNkMjBlNWQ4YWNiYzc1ZDdlM2FkZDUzMDQ4NWM0MWFiMDM1
MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuY3BwCkBAIC02
NywxNiArNjcsMTUgQEAgcHJvdGVjdGVkOgogICAgICAgICBhdXRvJiBxdWV1ZSA9IHdvcmtsaXN0
Lm1fcXVldWU7CiAgICAgICAgIHN5bmNocm9uaXplLm5vdGlmeUFsbCgpOwogCi0gICAgICAgIHdo
aWxlICghcXVldWUuZW1wdHkoKSkgewotCi0gICAgICAgICAgICBQcmlvcml0eSBwcmlvcml0eSA9
IHF1ZXVlLnRvcCgpLnByaW9yaXR5OworICAgICAgICB3aGlsZSAoIXF1ZXVlLmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgUHJpb3JpdHkgcHJpb3JpdHkgPSBxdWV1ZS5wZWVrKCkucHJpb3JpdHk7
CiAgICAgICAgICAgICBpZiAocHJpb3JpdHkgPT0gV29ya2xpc3Q6OlByaW9yaXR5OjpTaHV0ZG93
bikKICAgICAgICAgICAgICAgICByZXR1cm4gUG9sbFJlc3VsdDo6U3RvcDsKIAotICAgICAgICAg
ICAgZWxlbWVudCA9IHF1ZXVlLnRvcCgpOworICAgICAgICAgICAgZWxlbWVudCA9IHF1ZXVlLnBl
ZWsoKTsKICAgICAgICAgICAgIC8vIE9ubHkgb25lIHRocmVhZCBzaG91bGQgdmFsaWRhdGUvcHJl
cGFyZS4KLSAgICAgICAgICAgIGlmICghcXVldWUudG9wKCkucGxhbi0+aGFzQmVlblByZXBhcmVk
KCkpIHsKLSAgICAgICAgICAgICAgICBxdWV1ZS5wb3AoKTsKKyAgICAgICAgICAgIGlmICghcXVl
dWUucGVlaygpLnBsYW4tPmhhc0JlZW5QcmVwYXJlZCgpKSB7CisgICAgICAgICAgICAgICAgcXVl
dWUuZGVxdWV1ZSgpOwogICAgICAgICAgICAgICAgIHJldHVybiBQb2xsUmVzdWx0OjpXb3JrOwog
ICAgICAgICAgICAgfQogCkBAIC04NCw3ICs4Myw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgICAg
ICAgICByZXR1cm4gUG9sbFJlc3VsdDo6V29yazsKIAogICAgICAgICAgICAgLy8gVGhlcmUgbXVz
dCBiZSBhIGFub3RoZXIgdGhyZWFkIGxpbmtpbmcgdGhpcyBwbGFuIHNvIHdlIGNhbiBkZXF1ZSBh
bmQgc2VlIGlmIHRoZXJlIGlzIG90aGVyIHdvcmsuCi0gICAgICAgICAgICBxdWV1ZS5wb3AoKTsK
KyAgICAgICAgICAgIHF1ZXVlLmRlcXVldWUoKTsKICAgICAgICAgICAgIGVsZW1lbnQgPSBRdWV1
ZUVsZW1lbnQoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gUG9sbFJlc3VsdDo6V2FpdDsK
QEAgLTkyLDcgKzkxLDkgQEAgcHJvdGVjdGVkOgogCiAgICAgV29ya1Jlc3VsdCB3b3JrKCkgb3Zl
cnJpZGUKICAgICB7Ci0gICAgICAgIGF1dG8gY29tcGxldGUgPSBbJl0gKCkgeworICAgICAgICBh
dXRvIGNvbXBsZXRlID0gWyZdIChjb25zdCBMb2NrSG9sZGVyJikgeworICAgICAgICAgICAgLy8g
V2UgbmVlZCB0byBob2xkIHRoZSBsb2NrIHRvIHJlbGVhc2Ugb3VyIHBsYW4gb3RoZXJ3aXNlIHRo
ZSBtYWluIHRocmVhZCwgd2hpbGUgY2FuY2VsaW5nIHBsYW5zCisgICAgICAgICAgICAvLyBtaWdo
dCB1c2UgYWZ0ZXIgZnJlZSB0aGUgcGxhbiB3ZSBhcmUgbG9va2luZyBhdAogICAgICAgICAgICAg
ZWxlbWVudCA9IFF1ZXVlRWxlbWVudCgpOwogICAgICAgICAgICAgcmV0dXJuIFdvcmtSZXN1bHQ6
OkNvbnRpbnVlOwogICAgICAgICB9OwpAQCAtMTAyLDI5ICsxMDMsMTkgQEAgcHJvdGVjdGVkOgog
ICAgICAgICBpZiAoIXBsYW4tPmhhc0JlZW5QcmVwYXJlZCgpKSB7CiAgICAgICAgICAgICBwbGFu
LT5wYXJzZUFuZFZhbGlkYXRlTW9kdWxlKCk7CiAgICAgICAgICAgICBpZiAoIXBsYW4tPmhhc1dv
cmsoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY29tcGxldGUoKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gY29tcGxldGUoaG9sZExvY2soKndvcmtsaXN0Lm1fbG9jaykpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBwbGFuLT5wcmVwYXJlKCk7CiAKICAgICAgICAgICAgIExvY2tIb2xk
ZXIgbG9ja2VyKCp3b3JrbGlzdC5tX2xvY2spOwogICAgICAgICAgICAgZWxlbWVudC5zZXRUb05l
eHRQcmlvcml0eSgpOwotICAgICAgICAgICAgd29ya2xpc3QubV9xdWV1ZS5wdXNoKGVsZW1lbnQp
OworICAgICAgICAgICAgd29ya2xpc3QubV9xdWV1ZS5lbnF1ZXVlKFdURk1vdmUoZWxlbWVudCkp
OwogICAgICAgICAgICAgd29ya2xpc3QubV9wbGFuRW5xdWV1ZWQtPm5vdGlmeUFsbChsb2NrZXIp
OworICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRlKGxvY2tlcik7CiAgICAgICAgIH0KIAotICAg
ICAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgY2hlY2sgaW4gb2NjYXNpb25hbGx5IHRvIHNlZSBp
ZiB0aGVyZSBhcmUgbmV3LCBoaWdoZXIgcHJpb3JpdHkgZS5nLiBzeW5jaHJvbm91cywgcGxhbnMg
dGhhdCBuZWVkIHRvIGJlIHJ1bi4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3MDIwNAogICAgICAgICBwbGFuLT5jb21waWxlRnVuY3Rpb25zKFBs
YW46OlBhcnRpYWwpOwotCi0gICAgICAgIGlmICghcGxhbi0+aGFzV29yaygpKSB7Ci0gICAgICAg
ICAgICBMb2NrSG9sZGVyIGxvY2tlcigqd29ya2xpc3QubV9sb2NrKTsKLSAgICAgICAgICAgIGF1
dG8gcXVldWUgPSB3b3JrbGlzdC5tX3F1ZXVlOwotICAgICAgICAgICAgLy8gQW5vdGhlciB0aHJl
YWQgbWF5IGhhdmUgcmVtb3ZlZCBvdXIgcGxhbiBmcm9tIHRoZSBxdWV1ZSBhbHJlYWR5LgotICAg
ICAgICAgICAgaWYgKCFxdWV1ZS5lbXB0eSgpICYmIHF1ZXVlLnRvcCgpLnBsYW4gPT0gZWxlbWVu
dC5wbGFuKQotICAgICAgICAgICAgICAgIHF1ZXVlLnBvcCgpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgcmV0dXJuIGNvbXBsZXRlKCk7CisgICAgICAgIHJldHVybiBjb21wbGV0ZShob2xkTG9jaygq
d29ya2xpc3QubV9sb2NrKSk7CiAgICAgfQogCiBwdWJsaWM6CkBAIC0xNDgsNDcgKzEzOSwxNyBA
QCB2b2lkIFdvcmtsaXN0OjpRdWV1ZUVsZW1lbnQ6OnNldFRvTmV4dFByaW9yaXR5KCkKICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1lbnVtIGNsYXNzIEl0ZXJhdGVSZXN1
bHQgeyBVcGRhdGVBbmRCcmVhaywgRHJvcEFuZENvbnRpbnVlLCBDb250aW51ZSB9OwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotdm9pZCBXb3JrbGlzdDo6aXRlcmF0ZShjb25zdCBBYnN0
cmFjdExvY2tlciYsIGNvbnN0IEZ1bmN0b3ImIGZ1bmMpCi17Ci0gICAgLy8gc3RkOjpwcmlvcml0
eV9xdWV1ZSBkb2VzIG5vdCBoYXZlIGFuIGl0ZXJhdG9yIG9yIGRlY3JlYXNlX2tleS4uLiA6KCBX
aGlsZSB0aGlzIGlzIGdyb3NzLCB0aGlzIGZ1bmN0aW9uCi0gICAgLy8gc2hvdWxkbid0IGJlIGNh
bGxlZCB2ZXJ5IG9mdGVuIGFuZCB0aGUgcXVldWUgc2hvdWxkIGJlIHNtYWxsLgotICAgIC8vIEZJ
WE1FOiB3ZSBzaG91bGQgaGF2ZSBvdXIgb3duIFByaW9yaXR5UXVldWUgdGhhdCBkb2Vzbid0IHN1
Y2suCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDE0
NQotICAgIHN0ZDo6dmVjdG9yPFF1ZXVlRWxlbWVudD4gZWxlbWVudHM7Ci0gICAgd2hpbGUgKCFt
X3F1ZXVlLmVtcHR5KCkpIHsKLSAgICAgICAgUXVldWVFbGVtZW50IGVsZW1lbnQgPSBtX3F1ZXVl
LnRvcCgpOwotICAgICAgICBtX3F1ZXVlLnBvcCgpOwotICAgICAgICBJdGVyYXRlUmVzdWx0IHJl
c3VsdCA9IGZ1bmMoZWxlbWVudCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gSXRlcmF0ZVJlc3Vs
dDo6VXBkYXRlQW5kQnJlYWspIHsKLSAgICAgICAgICAgIGVsZW1lbnRzLnB1c2hfYmFjayhlbGVt
ZW50KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlc3Vs
dCA9PSBJdGVyYXRlUmVzdWx0OjpDb250aW51ZSkKLSAgICAgICAgICAgIGVsZW1lbnRzLnB1c2hf
YmFjayhlbGVtZW50KTsKLSAgICAgICAgY29udGludWU7Ci0gICAgfQotICAgIAotICAgIGZvciAo
YXV0byBlbGVtZW50IDogZWxlbWVudHMpCi0gICAgICAgIG1fcXVldWUucHVzaChlbGVtZW50KTsK
LX0KLQogdm9pZCBXb3JrbGlzdDo6ZW5xdWV1ZShSZWY8UGxhbj4gcGxhbikKIHsKICAgICBMb2Nr
SG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKIAogICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7Ci0g
ICAgICAgIGl0ZXJhdGUobG9ja2VyLCBbJl0gKFF1ZXVlRWxlbWVudCYgZWxlbWVudCkgeworICAg
ICAgICBmb3IgKGNvbnN0IGF1dG8mIGVsZW1lbnQgOiBtX3F1ZXVlKQogICAgICAgICAgICAgQVNT
RVJUX1VOVVNFRChlbGVtZW50LCBlbGVtZW50LnBsYW4uZ2V0KCkgIT0gJnBsYW4uZ2V0KCkpOwot
ICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGVSZXN1bHQ6OkNvbnRpbnVlOwotICAgICAgICB9KTsK
ICAgICB9CiAKICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiRW5xdWV1aW5nIHBsYW4iKTsKLSAg
ICBtX3F1ZXVlLnB1c2goeyBQcmlvcml0eTo6UHJlcGFyYXRpb24sIG5leHRUaWNrZXQoKSwgIFdU
Rk1vdmUocGxhbikgfSk7CisgICAgbV9xdWV1ZS5lbnF1ZXVlKHsgUHJpb3JpdHk6OlByZXBhcmF0
aW9uLCBuZXh0VGlja2V0KCksICBXVEZNb3ZlKHBsYW4pIH0pOwogICAgIG1fcGxhbkVucXVldWVk
LT5ub3RpZnlPbmUobG9ja2VyKTsKIH0KIApAQCAtMTk2LDEyICsxNTcsMTIgQEAgdm9pZCBXb3Jr
bGlzdDo6Y29tcGxldGVQbGFuU3luY2hyb25vdXNseShQbGFuJiBwbGFuKQogewogICAgIHsKICAg
ICAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7Ci0gICAgICAgIGl0ZXJhdGUobG9ja2Vy
LCBbJl0gKFF1ZXVlRWxlbWVudCYgZWxlbWVudCkgeworICAgICAgICBtX3F1ZXVlLmRlY3JlYXNl
S2V5KFsmXSAoUXVldWVFbGVtZW50JiBlbGVtZW50KSB7CiAgICAgICAgICAgICBpZiAoZWxlbWVu
dC5wbGFuID09ICZwbGFuKSB7CiAgICAgICAgICAgICAgICAgZWxlbWVudC5wcmlvcml0eSA9IFBy
aW9yaXR5OjpTeW5jaHJvbm91czsKLSAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0ZVJlc3Vs
dDo6VXBkYXRlQW5kQnJlYWs7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gSXRlcmF0ZVJlc3VsdDo6Q29udGludWU7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0pOwogCiAgICAgICAgIGZvciAoYXV0byYg
dGhyZWFkIDogbV90aHJlYWRzKSB7CkBAIC0yMTYsMTggKzE3NywyMiBAQCB2b2lkIFdvcmtsaXN0
Ojpjb21wbGV0ZVBsYW5TeW5jaHJvbm91c2x5KFBsYW4mIHBsYW4pCiB2b2lkIFdvcmtsaXN0Ojpz
dG9wQWxsUGxhbnNGb3JWTShWTSYgdm0pCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9j
ayk7Ci0gICAgaXRlcmF0ZShsb2NrZXIsIFsmXSAoUXVldWVFbGVtZW50JiBlbGVtZW50KSB7Cisg
ICAgVmVjdG9yPFF1ZXVlRWxlbWVudD4gZWxlbWVudHM7CisgICAgd2hpbGUgKCFtX3F1ZXVlLmlz
RW1wdHkoKSkgeworICAgICAgICBRdWV1ZUVsZW1lbnQgZWxlbWVudCA9IG1fcXVldWUuZGVxdWV1
ZSgpOwogICAgICAgICBib29sIGRpZENhbmNlbCA9IGVsZW1lbnQucGxhbi0+dHJ5UmVtb3ZlVk1B
bmRDYW5jZWxJZkxhc3Qodm0pOwotICAgICAgICBpZiAoZGlkQ2FuY2VsKQotICAgICAgICAgICAg
cmV0dXJuIEl0ZXJhdGVSZXN1bHQ6OkRyb3BBbmRDb250aW51ZTsKLSAgICAgICAgcmV0dXJuIEl0
ZXJhdGVSZXN1bHQ6OkNvbnRpbnVlOwotICAgIH0pOworICAgICAgICBpZiAoIWRpZENhbmNlbCkK
KyAgICAgICAgICAgIGVsZW1lbnRzLmFwcGVuZChXVEZNb3ZlKGVsZW1lbnQpKTsKKyAgICB9CisK
KyAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBlbGVtZW50cykKKyAgICAgICAgbV9xdWV1ZS5lbnF1
ZXVlKFdURk1vdmUoZWxlbWVudCkpOwogCiAgICAgZm9yIChhdXRvJiB0aHJlYWQgOiBtX3RocmVh
ZHMpIHsKICAgICAgICAgaWYgKHRocmVhZC0+ZWxlbWVudC5wbGFuKSB7CiAgICAgICAgICAgICBi
b29sIGRpZENhbmNlbCA9IHRocmVhZC0+ZWxlbWVudC5wbGFuLT50cnlSZW1vdmVWTUFuZENhbmNl
bElmTGFzdCh2bSk7CiAgICAgICAgICAgICBpZiAoZGlkQ2FuY2VsKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gV2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB0aGUgZGVhZGxvY2tpbmcgc2luY2Ug
dGhlIHRocmVhZCBjYW4ndCBibG9jayB3aXRob3V0IGNsZWFyaW5nIHRoZSBwbGFuIGFuZCBtdXN0
IGhvbGQgdGhlIGxvY2sgdG8gZG8gc28uCisgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgaGF2
ZSB0byB3b3JyeSBhYm91dCB0aGUgZGVhZGxvY2tpbmcgc2luY2UgdGhlIHRocmVhZCBjYW4ndCBi
bG9jayB3aXRob3V0IGNoZWNraW5nIGZvciBhIG5ldyBwbGFuIGFuZCBtdXN0IGhvbGQgdGhlIGxv
Y2sgdG8gZG8gc28uCiAgICAgICAgICAgICAgICAgdGhyZWFkLT5zeW5jaHJvbml6ZS53YWl0KCpt
X2xvY2spOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yNDksNyArMjE0LDcgQEAgV29y
a2xpc3Q6On5Xb3JrbGlzdCgpCiB7CiAgICAgewogICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcigq
bV9sb2NrKTsKLSAgICAgICAgbV9xdWV1ZS5wdXNoKHsgUHJpb3JpdHk6OlNodXRkb3duLCBuZXh0
VGlja2V0KCksIG51bGxwdHIgfSk7CisgICAgICAgIG1fcXVldWUuZW5xdWV1ZSh7IFByaW9yaXR5
OjpTaHV0ZG93biwgbmV4dFRpY2tldCgpLCBudWxscHRyIH0pOwogICAgICAgICBtX3BsYW5FbnF1
ZXVlZC0+bm90aWZ5QWxsKGxvY2tlcik7CiAgICAgfQogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX3RocmVhZHMuc2l6ZSgpOyArK2kpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtV29ya2xpc3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Xb3JrbGlzdC5oCmluZGV4IGJjYWYxZWY4OGRmNDkzNTkxNTY1Y2ZjZTAyODllNzVlMWVhNGMz
NzIuLmFkNGIxMDg5OTA2ZTM2NzU0OTM3YjY5OWJiZGY4YmRjZTU0ZDI5MGIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5oCkBAIC0zMiw2ICszMiw3IEBACiAjaW5j
bHVkZSA8cXVldWU+CiAKICNpbmNsdWRlIDx3dGYvQXV0b21hdGljVGhyZWFkLmg+CisjaW5jbHVk
ZSA8d3RmL1ByaW9yaXR5UXVldWUuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVz
cGFjZSBKU0MgewpAQCAtNzksMjYgKzgwLDIwIEBAIHByaXZhdGU6CiAgICAgICAgIHZvaWQgc2V0
VG9OZXh0UHJpb3JpdHkoKTsKICAgICB9OwogCi0gICAgc3RydWN0IENvbXBhcmF0b3IgewotICAg
ICAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgUXVldWVFbGVtZW50JiBsZWZ0LCBjb25zdCBRdWV1
ZUVsZW1lbnQmIHJpZ2h0KSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobGVmdC5w
cmlvcml0eSA9PSByaWdodC5wcmlvcml0eSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbGVmdC50
aWNrZXQgPiByaWdodC50aWNrZXQ7Ci0gICAgICAgICAgICByZXR1cm4gbGVmdC5wcmlvcml0eSA+
IHJpZ2h0LnByaW9yaXR5OwotICAgICAgICB9Ci0gICAgfTsKKyAgICBzdGF0aWMgYm9vbCBpc0hp
Z2hlclByaW9yaXR5KGNvbnN0IFF1ZXVlRWxlbWVudCYgbGVmdCwgY29uc3QgUXVldWVFbGVtZW50
JiByaWdodCkKKyAgICB7CisgICAgICAgIGlmIChsZWZ0LnByaW9yaXR5ID09IHJpZ2h0LnByaW9y
aXR5KQorICAgICAgICAgICAgcmV0dXJuIGxlZnQudGlja2V0ID4gcmlnaHQudGlja2V0OworICAg
ICAgICByZXR1cm4gbGVmdC5wcmlvcml0eSA+IHJpZ2h0LnByaW9yaXR5OworICAgIH0KIAotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgdm9pZCBpdGVyYXRlKGNvbnN0IEFic3Ry
YWN0TG9ja2VyJiwgY29uc3QgRnVuY3RvciYpOwogCiAgICAgQm94PExvY2s+IG1fbG9jazsKICAg
ICBSZWZQdHI8QXV0b21hdGljVGhyZWFkQ29uZGl0aW9uPiBtX3BsYW5FbnF1ZXVlZDsKICAgICAv
LyBUZWNobmljYWxseSwgdGhpcyBjb3VsZCBvdmVyZmxvdyBidXQgdGhhdCdzIHVubGlrZWx5LiBF
dmVuIGlmIGl0IGRpZCwgd2Ugd2lsbCBqdXN0IGNvbXBpbGUgdGhpbmdzIG9mIHRoZSBzYW1lCiAg
ICAgLy8gUHJpb3JpdHkgaXQgdGhlIHdyb25nIG9yZGVyLCB3aGljaCBpc24ndCB3cm9uZywganVz
dCBzdWJvcHRpbWFsLgogICAgIFRpY2tldCBtX2xhc3RHcmFudGVkVGlja2V0IHsgMCB9OwotICAg
IC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgV1RGOjpWZWN0b3IgYnV0IFdURjo6VmVjdG9yIGRv
ZXMgbm90IHN1cHBvcnQgcmFuZG9tIGFjY2VzcyBpdGVyYXRvci4KLSAgICBzdGQ6OnByaW9yaXR5
X3F1ZXVlPFF1ZXVlRWxlbWVudCwgc3RkOjp2ZWN0b3I8UXVldWVFbGVtZW50PiwgQ29tcGFyYXRv
cj4gbV9xdWV1ZTsKLSAgICBIYXNoTWFwPEpTUHJvbWlzZURlZmVycmVkKiwgUGxhbio+IG1fYWN0
aXZlUGxhbnM7CisgICAgUHJpb3JpdHlRdWV1ZTxRdWV1ZUVsZW1lbnQsIGlzSGlnaGVyUHJpb3Jp
dHksIDEwPiBtX3F1ZXVlOwogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkPj4gbV90
aHJlYWRzOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggZjU4ZjE5YjU2ZDMzY2I4OGE2ZmI0OWQ2ZTVmM2I2MDk3ODZiYzBjYy4uN2M3NzRkOTdkZDQx
ODcyYTIwZjM5OWM5NmEzNTkxZDdhNGNhZTE0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC0xNDksNiArMTQ5LDcgQEAKIAkJNTE1Rjc5NTYxQ0ZEM0E2OTAw
Q0NFRDkzIC8qIENyb3NzVGhyZWFkUXVldWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxNUY3OTU1MUNGRDNBNjkwMENDRUQ5MyAvKiBDcm9zc1RocmVh
ZFF1ZXVlLmggKi87IH07CiAJCTUyMTgzMDEyQzk5RTQ3NkE4NEVFQkVBOCAvKiBTeW1ib2xJbXBs
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY3MkJC
REIxMDdGQTQyNDg4NjE3OEI5RSAvKiBTeW1ib2xJbXBsLmNwcCAqLzsgfTsKIAkJNTM5RUIwNjMx
RDU1Mjg0MjAwQzgyRUY3IC8qIExFQkRlY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzOUVCMDYyMUQ1NTI4NDIwMEM4MkVGNyAvKiBMRUJEZWNv
ZGVyLmggKi87IH07CisJCTUzRUMyNTNFMUU5NUFEMzAwMDA4MzFCOSAvKiBQcmlvcml0eVF1ZXVl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0VDMjUz
QzFFOTVBRDMwMDAwODMxQjkgLyogUHJpb3JpdHlRdWV1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU1MzA3MUNBMUM0MDQyNzIwMDM4NDg5OCAv
KiBUaW55TFJVQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDU1MzA3MUM5MUM0MDQyNzIwMDM4NDg5OCAvKiBUaW55TFJVQ2FjaGUuaCAqLzsgfTsK
IAkJNTU5N0Y4MkYxRDk0Qjk5NzAwNjZCQzIxIC8qIFN5bmNocm9uaXplZEZpeGVkUXVldWUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1OTdGODJDMUQ5
NEI5OTcwMDY2QkMyMSAvKiBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmggKi87IH07CiAJCTVDN0M4
OEQ0MUQwQTNBMEEwMDlEMkY2RCAvKiBVbmlxdWVSZWYuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDN0M4OEQzMUQwQTNBMEEwMDlEMkY2RCAvKiBVbmlx
dWVSZWYuaCAqLzsgfTsKQEAgLTE3OCw2ICsxNzksNyBAQAogCQk5NzRDRkM4RTE2QTRGMzI3MDA2
RDU0MDQgLyogV2Vha1B0ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTc0Q0ZDOEQxNkE0RjMyNzAwNkQ1NDA0IC8qIFdlYWtQdHIuaCAqLzsgfTsKIAkJ
OUJDNzBGMDUxNzZDMzc5RDAwMTAxREVDIC8qIEF0b21pY1N0cmluZ1RhYmxlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCQzcwRjA0MTc2QzM3OUQw
MDEwMURFQyAvKiBBdG9taWNTdHJpbmdUYWJsZS5jcHAgKi87IH07CiAJCTlCRDhGNDBCMTc2QzJC
NDcwMDAyRDg2NSAvKiBBdG9taWNTdHJpbmdUYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUJEOEY0MEExNzZDMkFEODAwMDJEODY1IC8qIEF0b21p
Y1N0cmluZ1RhYmxlLmggKi87IH07CisJCUEzQjcyNUVDOTg3NDQ2QUQ5M0YxQTQ0MCAvKiBSYW5k
b21EZXZpY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQzhGNTk3Q0EyQTU3NDE3RkJBQjkyRkQ2IC8qIFJhbmRvbURldmljZS5jcHAgKi87IH07CiAJ
CUE1MDk4QjAwMUMxNjlFMDcwMDA4Nzc5NyAvKiBTYW5kYm94U1BJLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTA5OEFGRjFDMTY5RTA3MDAwODc3OTcg
LyogU2FuZGJveFNQSS5oICovOyB9OwogCQlBNTA5OEIwMjFDMTZBNEY5MDAwODc3OTcgLyogU2Vj
dXJpdHlTUEkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE1MDk4QjAxMUMxNkE0RjkwMDA4Nzc5NyAvKiBTZWN1cml0eVNQSS5oICovOyB9OwogCQlBNTYx
RjMxMDFERjI2NDIxMDBGRjY3NUQgLyogRGVwcmVjYXRlZE9wdGlvbmFsLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTYxRjMwRjFERjI2NDIxMDBGRjY3
NUQgLyogRGVwcmVjYXRlZE9wdGlvbmFsLmggKi87IH07CkBAIC0zODMsMTMgKzM4NSwxMiBAQAog
CQlFNEEwQUQzQTFBOTYyNDU1MDA1MzZERjYgLyogV29ya1F1ZXVlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEEwQUQzODFBOTYyNDU1MDA1MzZERjYg
LyogV29ya1F1ZXVlLmggKi87IH07CiAJCUU0QTBBRDNEMUE5NjI1M0MwMDUzNkRGNiAvKiBXb3Jr
UXVldWVDb2NvYS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFNEEwQUQzQzFBOTYyNTNDMDA1MzZERjYgLyogV29ya1F1ZXVlQ29jb2EuY3BwICovOyB9
OwogCQlFQjk1RTFGMDE2MUE3MjQxMDA4OUEyRjUgLyogQnl0ZU9yZGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFQjk1RTFFRjE2MUE3MjQxMDA4OUEy
RjUgLyogQnl0ZU9yZGVyLmggKi87IH07CisJCUZDNkVDMkJGMjBGODQ5OTY5QzZBNUJFMSAvKiBS
YW5kb21EZXZpY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDI0RjFCMjQ4NjE5RjQxMjI5NkQxQzE5QyAvKiBSYW5kb21EZXZpY2UuaCAqLzsgfTsKIAkJ
RkU4MjI1MzExQjJBMUU1QjAwQkE2OEZEIC8qIE5ha2VkUHRyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTgyMjUzMDFCMkExRTVCMDBCQTY4RkQgLyog
TmFrZWRQdHIuaCAqLzsgfTsKIAkJRkU4NkE4NzUxRTU5NDQwMjAwMTExQkJGIC8qIEZvcmJpZEhl
YXBBbGxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRTg2QTg3NDFFNTk0NDAyMDAxMTFCQkYgLyogRm9yYmlkSGVhcEFsbG9jYXRpb24uaCAq
LzsgfTsKIAkJRkU4OTI1QjAxRDAwREFFQzAwNDY5MDdFIC8qIEluZGVudGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTg5MjVBRjFEMDBEQUVDMDA0
NjkwN0UgLyogSW5kZW50ZXIuaCAqLzsgfTsKIAkJRkVEQUNEM0QxNjMwRjgzRjAwQzY5NjM0IC8q
IFN0YWNrU3RhdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkVEQUNEM0IxNjMwRjgzRjAwQzY5NjM0IC8qIFN0YWNrU3RhdHMuY3BwICovOyB9Owog
CQlGRURBQ0QzRTE2MzBGODNGMDBDNjk2MzQgLyogU3RhY2tTdGF0cy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVEQUNEM0MxNjMwRjgzRjAwQzY5NjM0
IC8qIFN0YWNrU3RhdHMuaCAqLzsgfTsKLQkJRkM2RUMyQkYyMEY4NDk5NjlDNkE1QkUxIC8qIFJh
bmRvbURldmljZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMjRGMUIyNDg2MTlGNDEyMjk2RDFDMTlDIC8qIFJhbmRvbURldmljZS5oICovOyB9OwotCQlB
M0I3MjVFQzk4NzQ0NkFEOTNGMUE0NDAgLyogUmFuZG9tRGV2aWNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM4RjU5N0NBMkE1NzQxN0ZCQUI5MkZE
NiAvKiBSYW5kb21EZXZpY2UuY3BwICovOyB9OwogLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9u
ICovCiAKIC8qIEJlZ2luIFBCWENvbnRhaW5lckl0ZW1Qcm94eSBzZWN0aW9uICovCkBAIC01MjYs
NiArNTI3LDcgQEAKIAkJMUNDREIxNTExRTU2NkJDNTAwNkM3M0MwIC8qIENGU3RyaW5nU1BJLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENGU3RyaW5nU1BJLmg7IHBhdGggPSBj
Zi9DRlN0cmluZ1NQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxRkE0N0M4ODE1
MjUwMkRBMDA1NjhEMUIgLyogV2ViQ29yZVRocmVhZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXZWJDb3JlVGhyZWFkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMUZBNDdDODkxNTI1MDJEQTAwNTY4RDFCIC8qIFdlYkNvcmVUaHJlYWQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZVRocmVhZC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkyNEYxQjI0ODYxOUY0MTIyOTZEMUMxOUMgLyogUmFuZG9tRGV2
aWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJhbmRvbURldmljZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNjE0N0IwODE1RERDQ0RDMDBEREI5MDcgLyog
SW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTI2Mjk5QjZEMTdBOUU1QjgwMEFERUJFNSAvKiBSZWYuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmVmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2
ODRENDM1MUMwMDBENDAwMDgxRDY2MyAvKiBJbmRleFNwYXJzZVNldC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbmRleFNwYXJzZVNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtNTQyLDYgKzU0NCw3IEBACiAJCTUxNUY3OTREMUNGQzlGNEEwMENDRUQ5MyAv
KiBDcm9zc1RocmVhZFRhc2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3Jv
c3NUaHJlYWRUYXNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNUY3OTU1MUNG
RDNBNjkwMENDRUQ5MyAvKiBDcm9zc1RocmVhZFF1ZXVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IENyb3NzVGhyZWFkUXVldWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTM5RUIwNjIxRDU1Mjg0MjAwQzgyRUY3IC8qIExFQkRlY29kZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTEVCRGVjb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1M0VDMjUzQzFFOTVBRDMwMDAwODMxQjkgLyogUHJpb3JpdHlRdWV1ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcmlvcml0eVF1ZXVlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1MzA3MUM5MUM0MDQyNzIwMDM4NDg5OCAvKiBUaW55TFJV
Q2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGlueUxSVUNhY2hlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1OTdGODJDMUQ5NEI5OTcwMDY2QkMyMSAv
KiBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFN5bmNocm9uaXplZEZpeGVkUXVldWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNUI0MzM4M0E1RDBCNDYzQzk0MzNEOTMzIC8qIEluZGV4TWFwLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEluZGV4TWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC03NjAsNiArNzYzLDcgQEAKIAkJQURGMkNFNjUxRTM5RjEwNjAwNjg4OURCIC8qIE1lbW9y
eUZvb3RwcmludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZW1v
cnlGb290cHJpbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMzhGRDdCQzE2
ODk1M0U4MDA2NUM5NjkgLyogRmVhdHVyZURlZmluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRmVhdHVyZURlZmluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQzRGOEE5MzYxOUM2NUVCNDAwQjJCMTVEIC8qIFN0b3B3YXRjaC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTdG9wd2F0Y2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQzhGNTk3Q0EyQTU3NDE3RkJBQjkyRkQ2IC8qIFJhbmRvbURldmljZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSYW5kb21EZXZpY2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDRDU0OTdBQTE1ODU3RDAzMDBCNUJDMzAgLyogTWVkaWFU
aW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhVGltZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNENTQ5N0FCMTU4NTdEMDMwMEI1QkMz
MCAvKiBNZWRpYVRpbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFU
aW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNFNDY1MTZEMTlEQjFGQjQwMDNF
Q0EwNSAvKiBOU01hcFRhYmxlU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE5TTWFwVGFibGVTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc5MCw4ICs3
OTQsNiBAQAogCQlGRTg5MjVBRjFEMDBEQUVDMDA0NjkwN0UgLyogSW5kZW50ZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5kZW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRkVEQUNEM0IxNjMwRjgzRjAwQzY5NjM0IC8qIFN0YWNrU3RhdHMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RhY2tTdGF0cy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFREFDRDNDMTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFj
a1N0YXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0YWNrU3RhdHMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjRGMUIyNDg2MTlGNDEyMjk2RDFDMTlDIC8q
IFJhbmRvbURldmljZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBSYW5kb21E
ZXZpY2UuaDsgcGF0aCA9IFJhbmRvbURldmljZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlDOEY1OTdDQTJBNTc0MTdGQkFCOTJGRDYgLyogUmFuZG9tRGV2aWNlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFJhbmRvbURldmljZS5jcHA7IHBhdGggPSBS
YW5kb21EZXZpY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogLyogRW5kIFBCWEZp
bGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhGcmFtZXdvcmtzQnVpbGRQaGFz
ZSBzZWN0aW9uICovCkBAIC0xMTAzLDYgKzExMDUsNyBAQAogCQkJCTBGRjg2MDk0MUJDQ0JENzQw
MDQ1MTI3RiAvKiBQb2ludGVyQ29tcGFyaXNvbi5oICovLAogCQkJCTBGOUQzMzVEMTY1REJBNzMw
MDVBRDM4NyAvKiBQcmludFN0cmVhbS5jcHAgKi8sCiAJCQkJMEY5RDMzNUUxNjVEQkE3MzAwNUFE
Mzg3IC8qIFByaW50U3RyZWFtLmggKi8sCisJCQkJNTNFQzI1M0MxRTk1QUQzMDAwMDgzMUI5IC8q
IFByaW9yaXR5UXVldWUuaCAqLywKIAkJCQkwRkM0NDg4MjE2RkU5RkUxMDA4NDRCRTkgLyogUHJv
Y2Vzc0lELmggKi8sCiAJCQkJMTQzRjYxMUQxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuY3Bw
ICovLAogCQkJCTE0M0Y2MTFFMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmggKi8sCkBAIC0x
NDEyLDYgKzE0MTUsNyBAQAogCQkJCTgxMzQwMTM5MTVCMDkyRkQwMDFGRjBCOCAvKiBCYXNlNjQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0E5MTUxQTgyNUIwMDQxMjNGRiAvKiBiaWdudW0t
ZHRvYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczQUIxNTFBODI1QjAwNDEyM0ZGIC8qIGJp
Z251bS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTNFQzI1M0UxRTk1QUQzMDAwMDgzMUI5IC8qIFBy
aW9yaXR5UXVldWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDUyMTUxQTgyNUIwMDQxMjNG
RiAvKiBCaW5hcnlTZW1hcGhvcmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3MzhBMTUxQTgy
NUIwMDQxMjNGRiAvKiBCaXRtYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3MzhDMTUxQTgy
NUIwMDQxMjNGRiAvKiBCaXRWZWN0b3IuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvTWF0aEV4dHJhcy5oIGIvU291cmNlL1dURi93dGYvTWF0aEV4dHJhcy5oCmlu
ZGV4IDc4ZGFlYWY3MzhkMDY5Yzg2OGFmOGRlOTZkMDc0ZjYxYjk2YmE0MDMuLjQwYzc3ZTM1NDE3
NDVkMzJlYTk5OTYyYjMzZmUyMGEwYzUzNDM2YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L01hdGhFeHRyYXMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9NYXRoRXh0cmFzLmgKQEAgLTI3Nyw2
ICsyNzcsMTEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIGJvb2wgaXNHcmVhdGVyVGhh
bk5vblplcm9Qb3dlck9mVHdvKFQgdmFsdWUsIHVuc2lnbmUKICAgICByZXR1cm4gISEoKHZhbHVl
ID4+IDEpID4+IChwb3dlciAtIDEpKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3Rl
eHByIGlubGluZSBib29sIGlzTGVzc1RoYW4oY29uc3QgVCYgYSwgY29uc3QgVCYgYikgeyByZXR1
cm4gYSA8IGI7IH0KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBpbmxpbmUgYm9vbCBp
c0xlc3NUaGFuRXF1YWwoY29uc3QgVCYgYSwgY29uc3QgVCYgYikgeyByZXR1cm4gYSA8PSBiOyB9
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgaW5saW5lIGJvb2wgaXNHcmVhdGVyVGhh
bihjb25zdCBUJiBhLCBjb25zdCBUJiBiKSB7IHJldHVybiBhID4gYjsgfQordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gY29uc3RleHByIGlubGluZSBib29sIGlzR3JlYXRlclRoYW5FcXVhbChjb25zdCBU
JiBhLCBjb25zdCBUJiBiKSB7IHJldHVybiBhID49IGI7IH0KKwogI2lmbmRlZiBVSU5UNjRfQwog
I2lmIENPTVBJTEVSKE1TVkMpCiAjZGVmaW5lIFVJTlQ2NF9DKGMpIGMgIyMgdWk2NApkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvUHJpb3JpdHlRdWV1ZS5oIGIvU291cmNlL1dURi93dGYvUHJp
b3JpdHlRdWV1ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAxZjZmYWU4MWY1ZDQxZWQ2OTAxNGY1ODM5ODE5ZDZh
NjMyM2JjNjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Qcmlvcml0eVF1ZXVl
LmgKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gVGhpcyBjbGFz
cyBpbXBsZW1lbnRzIGEgYmFzaWMgcHJpb3JpdHkgcXVldWUuIFRoZSBjbGFzcyBpcyBiYWNrZWQg
YXMgYSBiaW5hcnkgaGVhcCwgbGlrZSBzdGQ6OnByaW9yaXR5X3F1ZXVlLgorLy8gUHJpb3JpdHlR
dWV1ZSBoYXMgYSBjb3VwbGUgb2YgYWR2YW50YWdlcyBvdmVyIHN0ZDo6cHJpb3JpdHlfcXVldWU6
CisvLworLy8gMSkgVGhlIGJhY2tpbmcgdmVjdG9yIGlzIGZhc3RNYWxsb2NlZC4KKy8vIDIpIFlv
dSBjYW4gaXRlcmF0ZSB0aGUgZWxlbWVudHMuCisvLyAzKSBJdCBoYXMgaW4tcGxhY2UgZGVjcmVh
c2UvaW5jcmVhc2VLZXkgbWV0aG9kcywgYWx0aG91Z2ggdGhleSBhcmUgc3RpbGwgTyhuKSByYXRo
ZXIgdGhhbiBPKGxvZyhuKSkuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgKCppc0hpZ2hl
clByaW9yaXR5KShjb25zdCBUJiwgY29uc3QgVCYpID0gaXNMZXNzVGhhbjxUPiwgc2l6ZV90IGlu
bGluZUNhcGFjaXR5ID0gMD4KK2NsYXNzIFByaW9yaXR5UXVldWUgeworICAgIHVzaW5nIEJ1ZmZl
clR5cGUgPSBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+OworICAgIHVzaW5nIGNvbnN0X2l0ZXJh
dG9yID0gdHlwZW5hbWUgQnVmZmVyVHlwZTo6Y29uc3RfaXRlcmF0b3I7CitwdWJsaWM6CisgICAg
c2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5zaXplKCk7IH0KKyAgICBib29s
IGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5pc0VtcHR5KCk7IH0KKworICAgIHZv
aWQgZW5xdWV1ZShUIGVsZW1lbnQpCisgICAgeworICAgICAgICBzaXplX3QgbG9jYXRpb24gPSBt
X2J1ZmZlci5zaXplKCk7CisgICAgICAgIG1fYnVmZmVyLmFwcGVuZChzdGQ6OmZvcndhcmQ8VD4o
ZWxlbWVudCkpOworICAgICAgICBzaWZ0VXAobG9jYXRpb24pOworICAgIH0KKworICAgIGNvbnN0
IFQmIHBlZWsoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlclswXTsgfQorICAgIFQgZGVxdWV1ZSgp
CisgICAgeworICAgICAgICBzdGQ6OnN3YXAobV9idWZmZXJbMF0sIG1fYnVmZmVyLmxhc3QoKSk7
CisgICAgICAgIFQgcmVzdWx0ID0gbV9idWZmZXIudGFrZUxhc3QoKTsKKyAgICAgICAgc2lmdERv
d24oMCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGRlY3JlYXNlS2V5KGNvbnN0IEZ1bmN0b3ImIGRlc2ly
ZWRFbGVtZW50KQorICAgIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2J1ZmZl
ci5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKGRlc2lyZWRFbGVtZW50KG1fYnVmZmVy
W2ldKSkgeworICAgICAgICAgICAgICAgIHNpZnREb3duKGkpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoaXNWYWxpZEhl
YXAoKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lk
IGluY3JlYXNlS2V5KGNvbnN0IEZ1bmN0b3ImIGRlc2lyZWRFbGVtZW50KQorICAgIHsKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2J1ZmZlci5zaXplKCk7ICsraSkgeworICAgICAg
ICAgICAgaWYgKGRlc2lyZWRFbGVtZW50KG1fYnVmZmVyW2ldKSkgeworICAgICAgICAgICAgICAg
IHNpZnRVcChpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgQVNTRVJUKGlzVmFsaWRIZWFwKCkpOworICAgIH0KKworICAgIGNvbnN0
X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIuYmVnaW4oKTsgfTsKKyAg
ICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5lbmQoKTsgfTsK
KworICAgIGJvb2wgaXNWYWxpZEhlYXAoKSBjb25zdAorICAgIHsKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2J1ZmZlci5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKGxl
ZnRDaGlsZE9mKGkpIDwgbV9idWZmZXIuc2l6ZSgpICYmICFpc0hpZ2hlclByaW9yaXR5KG1fYnVm
ZmVyW2ldLCBtX2J1ZmZlcltsZWZ0Q2hpbGRPZihpKV0pKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIGlmIChyaWdodENoaWxkT2YoaSkgPCBtX2J1ZmZlci5zaXpl
KCkgJiYgIWlzSGlnaGVyUHJpb3JpdHkobV9idWZmZXJbaV0sIG1fYnVmZmVyW3JpZ2h0Q2hpbGRP
ZihpKV0pKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgY29uc3RleHBy
IHNpemVfdCBwYXJlbnRPZihzaXplX3QgbG9jYXRpb24pIHsgQVNTRVJUKGxvY2F0aW9uKTsgcmV0
dXJuIChsb2NhdGlvbiAtIDEpIC8gMjsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGxl
ZnRDaGlsZE9mKHNpemVfdCBsb2NhdGlvbikgeyByZXR1cm4gbG9jYXRpb24gKiAyICsgMTsgfQor
ICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IHJpZ2h0Q2hpbGRPZihzaXplX3QgbG9jYXRpb24p
IHsgcmV0dXJuIGxlZnRDaGlsZE9mKGxvY2F0aW9uKSArIDE7IH0KKworICAgIHZvaWQgc2lmdFVw
KHNpemVfdCBsb2NhdGlvbikKKyAgICB7CisgICAgICAgIHdoaWxlIChsb2NhdGlvbikgeworICAg
ICAgICAgICAgYXV0byBwYXJlbnQgPSBwYXJlbnRPZihsb2NhdGlvbik7CisgICAgICAgICAgICBp
ZiAoaXNIaWdoZXJQcmlvcml0eShtX2J1ZmZlcltwYXJlbnRdLCBtX2J1ZmZlcltsb2NhdGlvbl0p
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgc3RkOjpzd2FwKG1fYnVm
ZmVyW3BhcmVudF0sIG1fYnVmZmVyW2xvY2F0aW9uXSk7CisgICAgICAgICAgICBsb2NhdGlvbiA9
IHBhcmVudDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgc2lmdERvd24oc2l6ZV90IGxv
Y2F0aW9uKQorICAgIHsKKyAgICAgICAgd2hpbGUgKGxlZnRDaGlsZE9mKGxvY2F0aW9uKSA8IG1f
YnVmZmVyLnNpemUoKSkgeworICAgICAgICAgICAgc2l6ZV90IGhpZ2hlclByaW9yaXR5Q2hpbGQ7
CisgICAgICAgICAgICBpZiAoTElLRUxZKHJpZ2h0Q2hpbGRPZihsb2NhdGlvbikgPCBtX2J1ZmZl
ci5zaXplKCkpKQorICAgICAgICAgICAgICAgIGhpZ2hlclByaW9yaXR5Q2hpbGQgPSBpc0hpZ2hl
clByaW9yaXR5KG1fYnVmZmVyW2xlZnRDaGlsZE9mKGxvY2F0aW9uKV0sIG1fYnVmZmVyW3JpZ2h0
Q2hpbGRPZihsb2NhdGlvbildKSA/IGxlZnRDaGlsZE9mKGxvY2F0aW9uKSA6IHJpZ2h0Q2hpbGRP
Zihsb2NhdGlvbik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaGlnaGVyUHJp
b3JpdHlDaGlsZCA9IGxlZnRDaGlsZE9mKGxvY2F0aW9uKTsKKworICAgICAgICAgICAgaWYgKGlz
SGlnaGVyUHJpb3JpdHkobV9idWZmZXJbbG9jYXRpb25dLCBtX2J1ZmZlcltoaWdoZXJQcmlvcml0
eUNoaWxkXSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBzdGQ6OnN3
YXAobV9idWZmZXJbbG9jYXRpb25dLCBtX2J1ZmZlcltoaWdoZXJQcmlvcml0eUNoaWxkXSk7Cisg
ICAgICAgICAgICBsb2NhdGlvbiA9IGhpZ2hlclByaW9yaXR5Q2hpbGQ7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IG1fYnVmZmVyOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6UHJpb3JpdHlRdWV1ZTsKZGlmZiAtLWdpdCBh
L1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBlZDQ5YTMxMWEwNzQwZmQ4
YjY4YjBkYzhhODQxMWY5MjEwNzk2YjdiLi5kYTkxN2E5NzYwZTc5YTc0ZjEyOTU0ZDM4N2M2MTdk
YWU2ZDY0ZTJkIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTctMDQtMDcgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21p
bGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIGEgUHJpb3JpdHlRdWV1ZSBjbGFzcworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNTc5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgU2FhbSBCYXJhdGkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9Qcmlvcml0eVF1ZXVlLmNwcDogQWRkZWQuCisgICAgICAgIChv
cGVyYXRvciAgX3ogKToKKyAgICAgICAgKGVucXVldWUpOgorICAgICAgICAoZGVxdWV1ZSk6Cisg
ICAgICAgIChURVNUKToKKyAgICAgICAgKGNvbXBhcmVNb3ZlKToKKwogMjAxNy0wNC0wNyAgTXls
ZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJ
T04ocjIxMTM4Mik6IENvbXBsZXggdGV4dCB3aXRoIGp1c3RpZmljYXRpb24gZXJyb25lb3VzbHkg
b3ZlcmZsb3dzIGNvbnRhaW5lcnMKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZDdlZTcxODE0
NWE4ZDUzZDc0NWMyNmIyMWM3MDQwYzc2YzQ1NzJmYS4uNDE0MzZhNjZhNjM4ZGFhZmZkNDQ3MzVi
Y2YzZTBkZTAxOTEwZmFkYiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2Vi
S2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE3MCw2ICsxNzAs
NyBAQAogCQk1MzFDMUQ4RTFERjhFRjcyMDA2RTk3OUYgLyogTEVCRGVjb2Rlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzFDMUQ4RDFERjhFRjcy
MDA2RTk3OUYgLyogTEVCRGVjb2Rlci5jcHAgKi87IH07CiAJCTUzNjc3MDM0MUNDODAyMjgwMEQ0
MjVCMSAvKiBXZWJTY3JpcHRPYmplY3REZXNjcmlwdGlvbi5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNjc3MDMzMUNDODAyMjgwMEQ0MjVCMSAvKiBX
ZWJTY3JpcHRPYmplY3REZXNjcmlwdGlvbi5tbSAqLzsgfTsKIAkJNTM2NzcwMzYxQ0M4MUI2MTAw
RDQyNUIxIC8qIFdlYlNjcmlwdE9iamVjdERlc2NyaXB0aW9uLmh0bWwgaW4gQ29weSBSZXNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM2NzcwMzUxQ0M4MTJGOTAw
RDQyNUIxIC8qIFdlYlNjcmlwdE9iamVjdERlc2NyaXB0aW9uLmh0bWwgKi87IH07CisJCTUzRUMy
NTQxMUU5NkZEODcwMDA4MzFCOSAvKiBQcmlvcml0eVF1ZXVlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRUMyNTNGMUU5NkJDODAwMDA4MzFCOSAv
KiBQcmlvcml0eVF1ZXVlLmNwcCAqLzsgfTsKIAkJNTU5N0Y4MzYxRDk1OTZDODAwNjZCQzIxIC8q
IFN5bmNocm9uaXplZEZpeGVkUXVldWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTU5N0Y4MzQxRDk1OTZDODAwNjZCQzIxIC8qIFN5bmNocm9uaXpl
ZEZpeGVkUXVldWUuY3BwICovOyB9OwogCQk1NzE0RUNCOTFDQThCNUIwMDAwNTFBQzggLyogRG93
bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkwuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzE0RUNCODFDQThCNTg4MDAwNTFBQzggLyogRG93
bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkwuaHRtbCAqLzsgfTsKIAkJNTcxNEVDQkIxQ0E4QkZFNDAw
MDUxQUM4IC8qIERvd25sb2FkUmVxdWVzdE9yaWdpbmFsVVJMRnJhbWUuaHRtbCBpbiBDb3B5IFJl
c291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzE0RUNCQTFDQThC
RkQxMDAwNTFBQzggLyogRG93bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkxGcmFtZS5odG1sICovOyB9
OwpAQCAtMTA4Nyw2ICsxMDg4LDcgQEAKIAkJNTMxQzFEOEQxREY4RUY3MjAwNkU5NzlGIC8qIExF
QkRlY29kZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTEVCRGVj
b2Rlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNjc3MDMzMUNDODAyMjgw
MEQ0MjVCMSAvKiBXZWJTY3JpcHRPYmplY3REZXNjcmlwdGlvbi5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlNjcmlwdE9iamVjdERlc2NyaXB0aW9uLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzY3NzAzNTFDQzgxMkY5MDBENDI1QjEgLyog
V2ViU2NyaXB0T2JqZWN0RGVzY3JpcHRpb24uaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0
aCA9IFdlYlNjcmlwdE9iamVjdERlc2NyaXB0aW9uLmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTUzRUMyNTNGMUU5NkJDODAwMDA4MzFCOSAvKiBQcmlvcml0eVF1ZXVlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByaW9yaXR5UXVldWUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NTk3RjgzNDFEOTU5NkM4MDA2NkJDMjEgLyog
U3luY2hyb25pemVkRml4ZWRRdWV1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTcxNEVDQjgxQ0E4QjU4ODAwMDUxQUM4IC8qIERvd25sb2FkUmVxdWVzdE9yaWdp
bmFsVVJMLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBEb3dubG9hZFJlcXVlc3RP
cmlnaW5hbFVSTC5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzE0RUNCQTFD
QThCRkQxMDAwNTFBQzggLyogRG93bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkxGcmFtZS5odG1sICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gRG93bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkxGcmFt
ZS5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjA5Nyw2ICsyMDk5LDcgQEAK
IAkJCQkxQUZERTY1NDE5NTNCMkMwMDBDNDhGRkEgLyogT3B0aW9uYWwuY3BwICovLAogCQkJCUNF
NTBEOEM4MUM4NjY1Q0UwMDcyRUE1QSAvKiBPcHRpb25TZXQuY3BwICovLAogCQkJCTBGRTQ0Nzk3
MUI3NkYxRTMwMDk0OThFQiAvKiBQYXJraW5nTG90LmNwcCAqLywKKwkJCQk1M0VDMjUzRjFFOTZC
QzgwMDAwODMxQjkgLyogUHJpb3JpdHlRdWV1ZS5jcHAgKi8sCiAJCQkJMEZDNkM0Q0IxNDEwMjdF
MDAwNUI3RjBDIC8qIFJlZEJsYWNrVHJlZS5jcHAgKi8sCiAJCQkJOTNBNDI3QUExODBEQTI2NDAw
Q0QyNEQ3IC8qIFJlZi5jcHAgKi8sCiAJCQkJODZCRDE5OTcxQTJEQjA1QjAwNkRDRjBBIC8qIFJl
ZkNvdW50ZXIuY3BwICovLApAQCAtMjY0Myw2ICsyNjQ2LDcgQEAKIAkJCQkxQTc3QkFBMzFEOUFG
RkZDMDA1RkM1NjggLyogT3B0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjAy
MUQwQTU5MEMwMEZFQkNGMyAvKiBPU09iamVjdFB0ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3
QzgzREY1OTFEMEE1OTBDMDBGRUJDRjMgLyogUGFya2luZ0xvdC5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk1M0VDMjU0MTFFOTZGRDg3MDAwODMxQjkgLyogUHJpb3JpdHlRdWV1ZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk3QzgzREYxMzFEMEE1OTBDMDBGRUJDRjMgLyogUmVkQmxhY2tUcmVlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjE0MUQwQTU5MEMwMEZFQkNGMyAvKiBSZWYuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGMTUxRDBBNTkwQzAwRkVCQ0YzIC8qIFJlZkNvdW50
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dURi9Qcmlvcml0eVF1ZXVlLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L1ByaW9yaXR5UXVldWUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM0NDU3ZDYyM2VhYWY3YWI2ODAyNzAzOGY5
MzdjNGZlMjkwMGJjNDkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dURi9Qcmlvcml0eVF1ZXVlLmNwcApAQCAtMCwwICsxLDI1NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIk1vdmVPbmx5LmgiCisKKyNpbmNsdWRl
IDx0eXBlX3RyYWl0cz4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Q
cmlvcml0eVF1ZXVlLmg+CisKK2NvbnN0ZXhwciBzdGQ6OnNpemVfdCBvcGVyYXRvciAiIiBfeiAo
IHVuc2lnbmVkIGxvbmcgbG9uZyBuICkgeyByZXR1cm4gbjsgfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBib29sICgqaXNIaWdoZXJQcmlvcml0eSkoY29uc3QgVCYsIGNvbnN0IFQmKT4KK3N0YXRp
YyB2b2lkIGVucXVldWUoUHJpb3JpdHlRdWV1ZTxULCBpc0hpZ2hlclByaW9yaXR5PiYgcXVldWUs
IFQgZWxlbWVudCkKK3sKKyAgICBzaXplX3Qgc2l6ZUJlZm9yZSA9IHF1ZXVlLnNpemUoKTsKKyAg
ICBxdWV1ZS5lbnF1ZXVlKFdURk1vdmUoZWxlbWVudCkpOworICAgIEVYUEVDVF9FUShzaXplQmVm
b3JlICsgMSwgcXVldWUuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UocXVldWUuaXNFbXB0eSgp
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCAoKmlzSGlnaGVyUHJpb3JpdHkpKGNv
bnN0IFQmLCBjb25zdCBUJik+CitzdGF0aWMgVCBkZXF1ZXVlKFByaW9yaXR5UXVldWU8VCwgaXNI
aWdoZXJQcmlvcml0eT4mIHF1ZXVlKQoreworICAgIEVYUEVDVF9GQUxTRShxdWV1ZS5pc0VtcHR5
KCkpOworICAgIHNpemVfdCBzaXplQmVmb3JlID0gcXVldWUuc2l6ZSgpOworICAgIFQgcmVzdWx0
ID0gcXVldWUuZGVxdWV1ZSgpOworICAgIEVYUEVDVF9FUShzaXplQmVmb3JlIC0gMSwgcXVldWUu
c2l6ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisKK1RFU1QoV1RGX1ByaW9yaXR5UXVl
dWUsIEJhc2ljKQoreworICAgIGNvbnN0IHVuc2lnbmVkIG51bUVsZW1lbnRzID0gMTA7CisgICAg
UHJpb3JpdHlRdWV1ZTx1bnNpZ25lZD4gcXVldWU7CisKKyAgICBFWFBFQ1RfRVEoMF96LCBxdWV1
ZS5zaXplKCkpOworICAgIEVYUEVDVF9UUlVFKHF1ZXVlLmlzRW1wdHkoKSk7CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7ICsraSkKKyAgICAgICAgZW5xdWV1ZShx
dWV1ZSwgaSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7ICsr
aSkgeworICAgICAgICBFWFBFQ1RfRVEoaSwgcXVldWUucGVlaygpKTsKKyAgICAgICAgRVhQRUNU
X0VRKGksIGRlcXVldWUocXVldWUpKTsKKyAgICAgICAgRVhQRUNUX0VRKG51bUVsZW1lbnRzIC0g
aSAtIDEsIHF1ZXVlLnNpemUoKSk7CisgICAgfQorCisgICAgRVhQRUNUX1RSVUUocXVldWUuaXNF
bXB0eSgpKTsKK30KKworVEVTVChXVEZfUHJpb3JpdHlRdWV1ZSwgQ3VzdG9tUHJpb3JpdHlGdW5j
dGlvbikKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBudW1FbGVtZW50cyA9IDEwOworICAgIFByaW9y
aXR5UXVldWU8dW5zaWduZWQsIGlzR3JlYXRlclRoYW48dW5zaWduZWQ+PiBxdWV1ZTsKKworICAg
IEVYUEVDVF9FUSgwX3osIHF1ZXVlLnNpemUoKSk7CisgICAgRVhQRUNUX1RSVUUocXVldWUuaXNF
bXB0eSgpKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgKytp
KSB7CisgICAgICAgIGVucXVldWUocXVldWUsIGkpOworICAgICAgICBFWFBFQ1RfRVEoaSArIDEs
IHF1ZXVlLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShxdWV1ZS5pc0VtcHR5KCkpOwor
ICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgKytpKSB7
CisgICAgICAgIEVYUEVDVF9FUShudW1FbGVtZW50cyAtIGkgLSAxLCBxdWV1ZS5wZWVrKCkpOwor
ICAgICAgICBFWFBFQ1RfRVEobnVtRWxlbWVudHMgLSBpIC0gMSwgZGVxdWV1ZShxdWV1ZSkpOwor
ICAgICAgICBFWFBFQ1RfRVEobnVtRWxlbWVudHMgLSBpIC0gMSwgcXVldWUuc2l6ZSgpKTsKKyAg
ICB9CisKKyAgICBFWFBFQ1RfVFJVRShxdWV1ZS5pc0VtcHR5KCkpOworfQorCit0ZW1wbGF0ZTxi
b29sICgqaXNIaWdoZXJQcmlvcml0eSkoY29uc3QgdW5zaWduZWQmLCBjb25zdCB1bnNpZ25lZCYp
Pgorc3RhdGljIGJvb2wgY29tcGFyZU1vdmUoY29uc3QgTW92ZU9ubHkmIG0xLCBjb25zdCBNb3Zl
T25seSYgbTIpCit7CisgICAgcmV0dXJuIGlzSGlnaGVyUHJpb3JpdHkobTEudmFsdWUoKSwgbTIu
dmFsdWUoKSk7Cit9CisKKworVEVTVChXVEZfUHJpb3JpdHlRdWV1ZSwgTW92ZU9ubHkpCit7Cisg
ICAgUHJpb3JpdHlRdWV1ZTxNb3ZlT25seSwgY29tcGFyZU1vdmU8aXNMZXNzVGhhbjx1bnNpZ25l
ZD4+PiBxdWV1ZTsKKworICAgIFZlY3Rvcjx1bnNpZ25lZD4gdmFsdWVzID0geyAyMywgNTQsIDQs
IDgsIDEsIDIsIDQsIDAgfTsKKyAgICBWZWN0b3I8dW5zaWduZWQ+IHNvcnRlZCA9IHZhbHVlczsK
KyAgICBzdGQ6OnNvcnQoc29ydGVkLmJlZ2luKCksIHNvcnRlZC5lbmQoKSk7CisKKyAgICBmb3Ig
KGF1dG8gdmFsdWUgOiB2YWx1ZXMpCisgICAgICAgIHF1ZXVlLmVucXVldWUoTW92ZU9ubHkodmFs
dWUpKTsKKworICAgIGZvciAoYXV0byBzb3J0ZWRWYWx1ZSA6IHNvcnRlZCkgeworICAgICAgICBh
dXRvIHZhbHVlID0gcXVldWUuZGVxdWV1ZSgpOworICAgICAgICBFWFBFQ1RfRVEoc29ydGVkVmFs
dWUsIHZhbHVlLnZhbHVlKCkpOworICAgIH0KK30KKworVEVTVChXVEZfUHJpb3JpdHlRdWV1ZSwg
RGVjcmVhc2VLZXkpCit7CisgICAgUHJpb3JpdHlRdWV1ZTxNb3ZlT25seSwgY29tcGFyZU1vdmU8
aXNMZXNzVGhhbjx1bnNpZ25lZD4+PiBxdWV1ZTsKKworICAgIFZlY3Rvcjx1bnNpZ25lZD4gdmFs
dWVzID0geyAyMywgNTQsIDQsIDgsIDEsIDIsIDQsIDAgfTsKKyAgICBWZWN0b3I8dW5zaWduZWQ+
IHNvcnRlZCA9IHZhbHVlczsKKyAgICBzb3J0ZWRbM10gPSAxMjsKKyAgICBzdGQ6OnNvcnQoc29y
dGVkLmJlZ2luKCksIHNvcnRlZC5lbmQoKSk7CisKKyAgICBmb3IgKGF1dG8gdmFsdWUgOiB2YWx1
ZXMpCisgICAgICAgIHF1ZXVlLmVucXVldWUoTW92ZU9ubHkodmFsdWUpKTsKKworICAgIHF1ZXVl
LmRlY3JlYXNlS2V5KFtdIChNb3ZlT25seSYgbSkgeworICAgICAgICBpZiAobS52YWx1ZSgpID09
IDgpIHsKKyAgICAgICAgICAgIG0gPSBNb3ZlT25seSgxMik7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSk7CisKKyAgICBm
b3IgKGF1dG8gc29ydGVkVmFsdWUgOiBzb3J0ZWQpIHsKKyAgICAgICAgYXV0byB2YWx1ZSA9IHF1
ZXVlLmRlcXVldWUoKTsKKyAgICAgICAgRVhQRUNUX0VRKHNvcnRlZFZhbHVlLCB2YWx1ZS52YWx1
ZSgpKTsKKyAgICB9Cit9CisKK1RFU1QoV1RGX1ByaW9yaXR5UXVldWUsIEluY3JlYXNlS2V5KQor
eworICAgIFByaW9yaXR5UXVldWU8TW92ZU9ubHksIGNvbXBhcmVNb3ZlPGlzR3JlYXRlclRoYW48
dW5zaWduZWQ+Pj4gcXVldWU7CisKKyAgICBWZWN0b3I8dW5zaWduZWQ+IHZhbHVlcyA9IHsgMjMs
IDU0LCA0LCA4LCAxLCAyLCA0LCAwIH07CisgICAgVmVjdG9yPHVuc2lnbmVkPiBzb3J0ZWQgPSB2
YWx1ZXM7CisgICAgc29ydGVkWzNdID0gMTI7CisgICAgc3RkOjpzb3J0KHNvcnRlZC5iZWdpbigp
LCBzb3J0ZWQuZW5kKCksIHN0ZDo6Z3JlYXRlcjx1bnNpZ25lZD4oKSk7CisKKyAgICBmb3IgKGF1
dG8gdmFsdWUgOiB2YWx1ZXMpCisgICAgICAgIHF1ZXVlLmVucXVldWUoTW92ZU9ubHkodmFsdWUp
KTsKKworICAgIHF1ZXVlLmluY3JlYXNlS2V5KFtdIChNb3ZlT25seSYgbSkgeworICAgICAgICBp
ZiAobS52YWx1ZSgpID09IDgpIHsKKyAgICAgICAgICAgIG0gPSBNb3ZlT25seSgxMik7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfSk7CisKKyAgICBmb3IgKGF1dG8gc29ydGVkVmFsdWUgOiBzb3J0ZWQpIHsKKyAgICAgICAg
YXV0byB2YWx1ZSA9IHF1ZXVlLmRlcXVldWUoKTsKKyAgICAgICAgRVhQRUNUX0VRKHNvcnRlZFZh
bHVlLCB2YWx1ZS52YWx1ZSgpKTsKKyAgICB9Cit9CisKK1RFU1QoV1RGX1ByaW9yaXR5UXVldWUs
IEl0ZXJhdGlvbikKK3sKKyAgICBQcmlvcml0eVF1ZXVlPE1vdmVPbmx5LCBjb21wYXJlTW92ZTxp
c0dyZWF0ZXJUaGFuPHVuc2lnbmVkPj4+IHF1ZXVlOworCisgICAgVmVjdG9yPHVuc2lnbmVkPiB2
YWx1ZXMgPSB7IDIzLCA1NCwgNCwgOCwgMSwgMiwgNCwgMCB9OworICAgIFZlY3Rvcjx1bnNpZ25l
ZD4gc29ydGVkID0gdmFsdWVzOworICAgIHN0ZDo6c29ydChzb3J0ZWQuYmVnaW4oKSwgc29ydGVk
LmVuZCgpLCBzdGQ6OmdyZWF0ZXI8dW5zaWduZWQ+KCkpOworCisgICAgZm9yIChhdXRvIHZhbHVl
IDogdmFsdWVzKQorICAgICAgICBxdWV1ZS5lbnF1ZXVlKE1vdmVPbmx5KHZhbHVlKSk7CisKKyAg
ICB2YWx1ZXMuY2xlYXIoKTsKKyAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBxdWV1ZSkKKyAgICAg
ICAgdmFsdWVzLmFwcGVuZChlbGVtZW50LnZhbHVlKCkpOworCisgICAgc3RkOjpzb3J0KHZhbHVl
cy5iZWdpbigpLCB2YWx1ZXMuZW5kKCksIHN0ZDo6Z3JlYXRlcjx1bnNpZ25lZD4oKSk7CisgICAg
RVhQRUNUX0VRKHZhbHVlcy5zaXplKCksIHNvcnRlZC5zaXplKCkpOworICAgIGlmICh2YWx1ZXMu
c2l6ZSgpID09IHNvcnRlZC5zaXplKCkpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCB2YWx1ZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBFWFBFQ1RfRVEoc29ydGVkW2ldLCB2
YWx1ZXNbaV0pOworICAgIH0KK30KKworVEVTVChXVEZfUHJpb3JpdHlRdWV1ZSwgUmFuZG9tQWN0
aW9ucykKK3sKKyAgICBjb25zdCB1aW50NjRfdCBwcmltZTEgPSAxNTQ4NzIzNzsKKyAgICBjb25z
dCB1aW50NjRfdCBwcmltZTIgPSAxNzk0MjgyODM7CisgICAgdWludDY0X3QgcmFuZG9tTnVtYmVy
ID0gMTk0MDU3MDk7CisKKyAgICBhdXRvIG5leHRSYW5kb20gPSBbJl0gKCkgLT4gdWludDY0X3Qg
eworICAgICAgICByYW5kb21OdW1iZXIgPSByYW5kb21OdW1iZXIgKiBwcmltZTEgKyBwcmltZTI7
CisgICAgICAgIHJldHVybiByYW5kb21OdW1iZXI7CisgICAgfTsKKworICAgIFByaW9yaXR5UXVl
dWU8dWludDY0X3Q+IHF1ZXVlOworICAgIFZlY3Rvcjx1aW50NjRfdD4gdmFsdWVzOworCisgICAg
ZW51bSBDYXNlcyB7CisgICAgICAgIEVucXVldWUsCisgICAgICAgIERlcXVldWUsCisgICAgICAg
IE51bWJlck9mQ2FzZXMKKyAgICB9OworCisgICAgLy8gU2VlZCB0aGUgcXVldWUuCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IDEwMDsgKytpKSB7CisgICAgICAgIGF1dG8gbnVtYmVyID0g
bmV4dFJhbmRvbSgpOworICAgICAgICBxdWV1ZS5lbnF1ZXVlKG51bWJlcik7CisgICAgICAgIHZh
bHVlcy5hcHBlbmQobnVtYmVyKTsKKyAgICAgICAgRVhQRUNUX1RSVUUocXVldWUuaXNWYWxpZEhl
YXAoKSk7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDEwMDAwOyArK2kp
IHsKKyAgICAgICAgYXV0byBudW1iZXIgPSBuZXh0UmFuZG9tKCk7CisgICAgICAgIHN3aXRjaCAo
bnVtYmVyICUgTnVtYmVyT2ZDYXNlcykgeworICAgICAgICBjYXNlIEVucXVldWU6IHsKKyAgICAg
ICAgICAgIHF1ZXVlLmVucXVldWUobnVtYmVyKTsKKyAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQo
bnVtYmVyKTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHF1ZXVlLmlzVmFsaWRIZWFwKCkpOwor
ICAgICAgICAgICAgRVhQRUNUX0VRKHZhbHVlcy5zaXplKCksIHF1ZXVlLnNpemUoKSk7CisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgRGVxdWV1ZTogewor
ICAgICAgICAgICAgRVhQRUNUX0VRKHZhbHVlcy5zaXplKCksIHF1ZXVlLnNpemUoKSk7CisgICAg
ICAgICAgICBpZiAodmFsdWVzLnNpemUoKSAhPSBxdWV1ZS5zaXplKCkpCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICAgIGlmICghdmFsdWVzLnNpemUoKSkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgLy8gU29ydCB3aXRoIGdyZWF0ZXIgc28gdGhl
IGxhc3QgZWxlbWVudCBzaG91bGQgYmUgdGhlIG9uZSB3ZSBkZXF1ZXVlLgorICAgICAgICAgICAg
c3RkOjpzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuZW5kKCksIHN0ZDo6Z3JlYXRlcjx1aW50
NjRfdD4oKSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEodmFsdWVzLnRha2VMYXN0KCksIHF1ZXVl
LmRlcXVldWUoKSk7CisKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICB9CisgICAgICAgIEVYUEVDVF9UUlVFKHF1ZXVlLmlzVmFsaWRIZWFwKCkpOworICAgIH0K
K30K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306554</attachid>
            <date>2017-04-07 17:35:02 -0700</date>
            <delta_ts>2017-04-07 18:15:12 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-170579-20170407173501.patch</filename>
            <type>text/plain</type>
            <size>40946</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1MTI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
NDNkYmE4ZWE1MGIzYzM4YWI5YTJmYTU4M2M2ZDBjNjhjZDM3ZmNlLi4zNTFkMzFhN2U3YjgzZWM5
ZTg4NzMxMTU3MDIyMmE0MjFjODQ3NzFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMiBAQAorMjAxNy0wNC0wNyAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBBZGQgYSBQcmlvcml0eVF1ZXVlIGNsYXNzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA1NzkKKworICAgICAgICBSZXZp
ZXdlZCBieSBTYWFtIEJhcmF0aS4KKworICAgICAgICBVcGRhdGUgV2FzbTo6V29ya2xpc3QgdG8g
dXNlIFdURjo6UHJpb3JpdHlRdWV1ZS4KKworICAgICAgICAqIHdhc20vV2FzbVdvcmtsaXN0LmNw
cDoKKyAgICAgICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OmVucXVldWUpOgorICAgICAgICAoSlND
OjpXYXNtOjpXb3JrbGlzdDo6Y29tcGxldGVQbGFuU3luY2hyb25vdXNseSk6CisgICAgICAgIChK
U0M6Oldhc206OldvcmtsaXN0OjpzdG9wQWxsUGxhbnNGb3JWTSk6CisgICAgICAgIChKU0M6Oldh
c206OldvcmtsaXN0Ojp+V29ya2xpc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpXb3JrbGlzdDo6
aXRlcmF0ZSk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XYXNtV29ya2xpc3QuaDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OmlzSGlnaGVyUHJpb3JpdHkpOgorICAgICAgICAoSlND
OjpXYXNtOjpXb3JrbGlzdDo6Q29tcGFyYXRvcjo6b3BlcmF0b3IoKSk6IERlbGV0ZWQuCisKIDIw
MTctMDQtMDcgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgV2Vi
QXNzZW1ibHk6IE1vZHVsZTo6Z2V0T3JDcmVhdGVDb2RlQmxvY2sgaXMgd3JvbmcKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggZTg5
NGI1NmRhNzIzODM1YzNlMTBhN2ViYWU1ZDM5YWM2MzdkM2U2OS4uM2NkYWE1N2UxMmNlM2U5MWE3
ZWVkNjI2NGZjYjEzZGNkMjVlZDNhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0OCBAQAorMjAxNy0wNC0wNyAg
S2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYSBQ
cmlvcml0eVF1ZXVlIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzA1NzkKKworICAgICAgICBSZXZpZXdlZCBieSBTYWFtIEJhcmF0aS4KKwor
ICAgICAgICBUaGlzIHBhdGNoIGFkZHMgYSBuZXcgUHJpb3JpdHlRdWV1ZSBjbGFzcyB0aGF0IGlz
IGJhY2tlZCBieQorICAgICAgICBXVEY6OlZlY3Rvci4gIEl0IGFsc28gaGFzIGEgbnVtYmVyIG9m
IG90aGVyIG5pY2V0aWVzIHN1Y2ggYXMgYmVpbmcKKyAgICAgICAgYWJsZSB0byBpdGVyYXRlIHRo
ZSBxdWV1ZSBhbmQgaW5jcmVhc2Ugb3IgZGVjcmVhc2Uga2V5cy4KKworICAgICAgICBPbmUgbm90
ZSBpcyB0aGF0IGluY3JlYXNlS2V5IGFuZCBkZWNyZWFzZUtleSBhcmUgTyhuKSByYXRoZXIgdGhh
bgorICAgICAgICBPKGxvZyhuKSkuICBUcmFkaXRpb25hbGx5LCB0aGUgbG9va3VwIG9mIHRoZSBr
ZXkgaXMgZG9uZSB3aXRoIGEKKyAgICAgICAgaGFzaCBtYXAgYnV0IHRoYXQncyBub3QgZmVhc2li
bGUgaGVyZS4gIFRoaXMgaXMgYmVjYXVzZSB1bmxlc3MgdGhlCisgICAgICAgIHF1ZXVlJ3MgZWxl
bWVudCB0eXBlIGlzIGEgcG9pbnRlciB0aGVyZSBpcyBubyBnb29kIHdheSBtYWludGFpbiBhCisg
ICAgICAgIHBlcnNpc3RlbnQgcmVmZXJlbmNlIHRvIGV2ZXJ5IGVudHJ5IGluIHRoZSBxdWV1ZSB3
aGlsZSB3ZSBzaWZ0LgorICAgICAgICBUaGUgb25seSB3YXkgdG8gdXBkYXRlIHRoZSBsb2NhdGlv
biBvZiBhbiBlbnRyeSBpcyB0byBkbyBhIGhhc2gKKyAgICAgICAgdGFibGUgbG9va3VwIHdpdGgg
dGhlIGVudHJ5J3MgaGFzaCBidXQgdGhpcyBpcyBwcm9iYWJseSBtb3JlCisgICAgICAgIGV4cGVu
c2l2ZSB0aGFuIGp1c3QgZG9pbmcgYSBsaW5lYXIgc2VhcmNoLgorCisgICAgICAgIEFsc28sIGFk
ZCBjb21wYXJpc29uIG9wZXJhdG9yIGZ1bmN0aW9ucywgd2hpY2ggY2FuIGJlIHBhc3NlZCB0byBQ
cmlvcml0eVF1ZXVlLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogd3RmL01hdGhFeHRyYXMuaDoKKyAgICAgICAgKGlzTGVzc1RoYW4pOgorICAg
ICAgICAoaXNMZXNzVGhhbkVxdWFsKToKKyAgICAgICAgKGlzR3JlYXRlclRoYW4pOgorICAgICAg
ICAoaXNHcmVhdGVyVGhhbkVxdWFsKToKKyAgICAgICAgKiB3dGYvUHJpb3JpdHlRdWV1ZS5oOiBB
ZGRlZC4KKyAgICAgICAgKFdURjo6UHJpb3JpdHlRdWV1ZTo6c2l6ZSk6CisgICAgICAgIChXVEY6
OlByaW9yaXR5UXVldWU6OmlzRW1wdHkpOgorICAgICAgICAoV1RGOjpQcmlvcml0eVF1ZXVlOjpl
bnF1ZXVlKToKKyAgICAgICAgKFdURjo6UHJpb3JpdHlRdWV1ZTo6cGVlayk6CisgICAgICAgIChX
VEY6OlByaW9yaXR5UXVldWU6OmRlcXVldWUpOgorICAgICAgICAoV1RGOjpQcmlvcml0eVF1ZXVl
OjpkZWNyZWFzZUtleSk6CisgICAgICAgIChXVEY6OlByaW9yaXR5UXVldWU6OmluY3JlYXNlS2V5
KToKKyAgICAgICAgKFdURjo6UHJpb3JpdHlRdWV1ZTo6YmVnaW4pOgorICAgICAgICAoV1RGOjpQ
cmlvcml0eVF1ZXVlOjplbmQpOgorICAgICAgICAoV1RGOjpQcmlvcml0eVF1ZXVlOjppc1ZhbGlk
SGVhcCk6CisgICAgICAgIChXVEY6OlByaW9yaXR5UXVldWU6OnBhcmVudE9mKToKKyAgICAgICAg
KFdURjo6UHJpb3JpdHlRdWV1ZTo6bGVmdENoaWxkT2YpOgorICAgICAgICAoV1RGOjpQcmlvcml0
eVF1ZXVlOjpyaWdodENoaWxkT2YpOgorICAgICAgICAoV1RGOjpQcmlvcml0eVF1ZXVlOjpzaWZ0
VXApOgorICAgICAgICAoV1RGOjpQcmlvcml0eVF1ZXVlOjpzaWZ0RG93bik6CisKIDIwMTctMDQt
MDcgIFRpbmctV2VpIExhbiAgPGxhbnR3NDRAZ21haWwuY29tPgogCiAgICAgICAgIEluY2x1ZGUg
Y3N0ZGlvIGJlZm9yZSB1c2luZyBzc2NhbmYgYW5kIHN0ZGVycgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5jcHAKaW5kZXggNzk2OWZlNGQwOGZkMzgyZTEyOGUwMzcz
YTJkNTRmZmE3ZTI1YjIxNy4uNWZhZGZjYjEzNTcwOTA5MzIyZmE4NzlmNWI3NmQ0Njk5YmU5YzNk
OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuY3BwCkBAIC02
NywxNiArNjcsMTUgQEAgcHJvdGVjdGVkOgogICAgICAgICBhdXRvJiBxdWV1ZSA9IHdvcmtsaXN0
Lm1fcXVldWU7CiAgICAgICAgIHN5bmNocm9uaXplLm5vdGlmeUFsbCgpOwogCi0gICAgICAgIHdo
aWxlICghcXVldWUuZW1wdHkoKSkgewotCi0gICAgICAgICAgICBQcmlvcml0eSBwcmlvcml0eSA9
IHF1ZXVlLnRvcCgpLnByaW9yaXR5OworICAgICAgICB3aGlsZSAoIXF1ZXVlLmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgUHJpb3JpdHkgcHJpb3JpdHkgPSBxdWV1ZS5wZWVrKCkucHJpb3JpdHk7
CiAgICAgICAgICAgICBpZiAocHJpb3JpdHkgPT0gV29ya2xpc3Q6OlByaW9yaXR5OjpTaHV0ZG93
bikKICAgICAgICAgICAgICAgICByZXR1cm4gUG9sbFJlc3VsdDo6U3RvcDsKIAotICAgICAgICAg
ICAgZWxlbWVudCA9IHF1ZXVlLnRvcCgpOworICAgICAgICAgICAgZWxlbWVudCA9IHF1ZXVlLnBl
ZWsoKTsKICAgICAgICAgICAgIC8vIE9ubHkgb25lIHRocmVhZCBzaG91bGQgdmFsaWRhdGUvcHJl
cGFyZS4KLSAgICAgICAgICAgIGlmICghcXVldWUudG9wKCkucGxhbi0+aGFzQmVlblByZXBhcmVk
KCkpIHsKLSAgICAgICAgICAgICAgICBxdWV1ZS5wb3AoKTsKKyAgICAgICAgICAgIGlmICghcXVl
dWUucGVlaygpLnBsYW4tPmhhc0JlZW5QcmVwYXJlZCgpKSB7CisgICAgICAgICAgICAgICAgcXVl
dWUuZGVxdWV1ZSgpOwogICAgICAgICAgICAgICAgIHJldHVybiBQb2xsUmVzdWx0OjpXb3JrOwog
ICAgICAgICAgICAgfQogCkBAIC04NCw3ICs4Myw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgICAg
ICAgICByZXR1cm4gUG9sbFJlc3VsdDo6V29yazsKIAogICAgICAgICAgICAgLy8gVGhlcmUgbXVz
dCBiZSBhIGFub3RoZXIgdGhyZWFkIGxpbmtpbmcgdGhpcyBwbGFuIHNvIHdlIGNhbiBkZXF1ZSBh
bmQgc2VlIGlmIHRoZXJlIGlzIG90aGVyIHdvcmsuCi0gICAgICAgICAgICBxdWV1ZS5wb3AoKTsK
KyAgICAgICAgICAgIHF1ZXVlLmRlcXVldWUoKTsKICAgICAgICAgICAgIGVsZW1lbnQgPSBRdWV1
ZUVsZW1lbnQoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gUG9sbFJlc3VsdDo6V2FpdDsK
QEAgLTkyLDcgKzkxLDkgQEAgcHJvdGVjdGVkOgogCiAgICAgV29ya1Jlc3VsdCB3b3JrKCkgb3Zl
cnJpZGUKICAgICB7Ci0gICAgICAgIGF1dG8gY29tcGxldGUgPSBbJl0gKCkgeworICAgICAgICBh
dXRvIGNvbXBsZXRlID0gWyZdIChjb25zdCBBYnN0cmFjdExvY2tlciYpIHsKKyAgICAgICAgICAg
IC8vIFdlIG5lZWQgdG8gaG9sZCB0aGUgbG9jayB0byByZWxlYXNlIG91ciBwbGFuIG90aGVyd2lz
ZSB0aGUgbWFpbiB0aHJlYWQsIHdoaWxlIGNhbmNlbGluZyBwbGFucworICAgICAgICAgICAgLy8g
bWlnaHQgdXNlIGFmdGVyIGZyZWUgdGhlIHBsYW4gd2UgYXJlIGxvb2tpbmcgYXQKICAgICAgICAg
ICAgIGVsZW1lbnQgPSBRdWV1ZUVsZW1lbnQoKTsKICAgICAgICAgICAgIHJldHVybiBXb3JrUmVz
dWx0OjpDb250aW51ZTsKICAgICAgICAgfTsKQEAgLTEwMiwyOSArMTAzLDE5IEBAIHByb3RlY3Rl
ZDoKICAgICAgICAgaWYgKCFwbGFuLT5oYXNCZWVuUHJlcGFyZWQoKSkgewogICAgICAgICAgICAg
cGxhbi0+cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpOwogICAgICAgICAgICAgaWYgKCFwbGFuLT5o
YXNXb3JrKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRlKCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGNvbXBsZXRlKGhvbGRMb2NrKCp3b3JrbGlzdC5tX2xvY2spKTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgcGxhbi0+cHJlcGFyZSgpOwogCiAgICAgICAgICAgICBMb2Nr
SG9sZGVyIGxvY2tlcigqd29ya2xpc3QubV9sb2NrKTsKICAgICAgICAgICAgIGVsZW1lbnQuc2V0
VG9OZXh0UHJpb3JpdHkoKTsKLSAgICAgICAgICAgIHdvcmtsaXN0Lm1fcXVldWUucHVzaChlbGVt
ZW50KTsKKyAgICAgICAgICAgIHdvcmtsaXN0Lm1fcXVldWUuZW5xdWV1ZShXVEZNb3ZlKGVsZW1l
bnQpKTsKICAgICAgICAgICAgIHdvcmtsaXN0Lm1fcGxhbkVucXVldWVkLT5ub3RpZnlBbGwobG9j
a2VyKTsKKyAgICAgICAgICAgIHJldHVybiBjb21wbGV0ZShsb2NrZXIpOwogICAgICAgICB9CiAK
LSAgICAgICAgLy8gRklYTUU6IHRoaXMgc2hvdWxkIGNoZWNrIGluIG9jY2FzaW9uYWxseSB0byBz
ZWUgaWYgdGhlcmUgYXJlIG5ldywgaGlnaGVyIHByaW9yaXR5IGUuZy4gc3luY2hyb25vdXMsIHBs
YW5zIHRoYXQgbmVlZCB0byBiZSBydW4uCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzAyMDQKICAgICAgICAgcGxhbi0+Y29tcGlsZUZ1bmN0aW9u
cyhQbGFuOjpQYXJ0aWFsKTsKLQotICAgICAgICBpZiAoIXBsYW4tPmhhc1dvcmsoKSkgewotICAg
ICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoKndvcmtsaXN0Lm1fbG9jayk7Ci0gICAgICAgICAg
ICBhdXRvIHF1ZXVlID0gd29ya2xpc3QubV9xdWV1ZTsKLSAgICAgICAgICAgIC8vIEFub3RoZXIg
dGhyZWFkIG1heSBoYXZlIHJlbW92ZWQgb3VyIHBsYW4gZnJvbSB0aGUgcXVldWUgYWxyZWFkeS4K
LSAgICAgICAgICAgIGlmICghcXVldWUuZW1wdHkoKSAmJiBxdWV1ZS50b3AoKS5wbGFuID09IGVs
ZW1lbnQucGxhbikKLSAgICAgICAgICAgICAgICBxdWV1ZS5wb3AoKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHJldHVybiBjb21wbGV0ZSgpOworICAgICAgICByZXR1cm4gY29tcGxldGUoaG9sZExv
Y2soKndvcmtsaXN0Lm1fbG9jaykpOwogICAgIH0KIAogcHVibGljOgpAQCAtMTQ4LDQ3ICsxMzks
MTcgQEAgdm9pZCBXb3JrbGlzdDo6UXVldWVFbGVtZW50OjpzZXRUb05leHRQcmlvcml0eSgpCiAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotZW51bSBjbGFzcyBJdGVyYXRl
UmVzdWx0IHsgVXBkYXRlQW5kQnJlYWssIERyb3BBbmRDb250aW51ZSwgQ29udGludWUgfTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLXZvaWQgV29ya2xpc3Q6Oml0ZXJhdGUoY29uc3Qg
QWJzdHJhY3RMb2NrZXImLCBjb25zdCBGdW5jdG9yJiBmdW5jKQotewotICAgIC8vIHN0ZDo6cHJp
b3JpdHlfcXVldWUgZG9lcyBub3QgaGF2ZSBhbiBpdGVyYXRvciBvciBkZWNyZWFzZV9rZXkuLi4g
OiggV2hpbGUgdGhpcyBpcyBncm9zcywgdGhpcyBmdW5jdGlvbgotICAgIC8vIHNob3VsZG4ndCBi
ZSBjYWxsZWQgdmVyeSBvZnRlbiBhbmQgdGhlIHF1ZXVlIHNob3VsZCBiZSBzbWFsbC4KLSAgICAv
LyBGSVhNRTogd2Ugc2hvdWxkIGhhdmUgb3VyIG93biBQcmlvcml0eVF1ZXVlIHRoYXQgZG9lc24n
dCBzdWNrLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NzAxNDUKLSAgICBzdGQ6OnZlY3RvcjxRdWV1ZUVsZW1lbnQ+IGVsZW1lbnRzOwotICAgIHdoaWxl
ICghbV9xdWV1ZS5lbXB0eSgpKSB7Ci0gICAgICAgIFF1ZXVlRWxlbWVudCBlbGVtZW50ID0gbV9x
dWV1ZS50b3AoKTsKLSAgICAgICAgbV9xdWV1ZS5wb3AoKTsKLSAgICAgICAgSXRlcmF0ZVJlc3Vs
dCByZXN1bHQgPSBmdW5jKGVsZW1lbnQpOwotICAgICAgICBpZiAocmVzdWx0ID09IEl0ZXJhdGVS
ZXN1bHQ6OlVwZGF0ZUFuZEJyZWFrKSB7Ci0gICAgICAgICAgICBlbGVtZW50cy5wdXNoX2JhY2so
ZWxlbWVudCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChy
ZXN1bHQgPT0gSXRlcmF0ZVJlc3VsdDo6Q29udGludWUpCi0gICAgICAgICAgICBlbGVtZW50cy5w
dXNoX2JhY2soZWxlbWVudCk7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgIH0KLSAgICAKLSAgICBm
b3IgKGF1dG8gZWxlbWVudCA6IGVsZW1lbnRzKQotICAgICAgICBtX3F1ZXVlLnB1c2goZWxlbWVu
dCk7Ci19Ci0KIHZvaWQgV29ya2xpc3Q6OmVucXVldWUoUmVmPFBsYW4+IHBsYW4pCiB7CiAgICAg
TG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CiAKICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkg
ewotICAgICAgICBpdGVyYXRlKGxvY2tlciwgWyZdIChRdWV1ZUVsZW1lbnQmIGVsZW1lbnQpIHsK
KyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBlbGVtZW50IDogbV9xdWV1ZSkKICAgICAgICAgICAg
IEFTU0VSVF9VTlVTRUQoZWxlbWVudCwgZWxlbWVudC5wbGFuLmdldCgpICE9ICZwbGFuLmdldCgp
KTsKLSAgICAgICAgICAgIHJldHVybiBJdGVyYXRlUmVzdWx0OjpDb250aW51ZTsKLSAgICAgICAg
fSk7CiAgICAgfQogCiAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIkVucXVldWluZyBwbGFuIik7
Ci0gICAgbV9xdWV1ZS5wdXNoKHsgUHJpb3JpdHk6OlByZXBhcmF0aW9uLCBuZXh0VGlja2V0KCks
ICBXVEZNb3ZlKHBsYW4pIH0pOworICAgIG1fcXVldWUuZW5xdWV1ZSh7IFByaW9yaXR5OjpQcmVw
YXJhdGlvbiwgbmV4dFRpY2tldCgpLCAgV1RGTW92ZShwbGFuKSB9KTsKICAgICBtX3BsYW5FbnF1
ZXVlZC0+bm90aWZ5T25lKGxvY2tlcik7CiB9CiAKQEAgLTE5NiwxMiArMTU3LDEyIEBAIHZvaWQg
V29ya2xpc3Q6OmNvbXBsZXRlUGxhblN5bmNocm9ub3VzbHkoUGxhbiYgcGxhbikKIHsKICAgICB7
CiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOwotICAgICAgICBpdGVyYXRlKGxv
Y2tlciwgWyZdIChRdWV1ZUVsZW1lbnQmIGVsZW1lbnQpIHsKKyAgICAgICAgbV9xdWV1ZS5kZWNy
ZWFzZUtleShbJl0gKFF1ZXVlRWxlbWVudCYgZWxlbWVudCkgewogICAgICAgICAgICAgaWYgKGVs
ZW1lbnQucGxhbiA9PSAmcGxhbikgewogICAgICAgICAgICAgICAgIGVsZW1lbnQucHJpb3JpdHkg
PSBQcmlvcml0eTo6U3luY2hyb25vdXM7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGVS
ZXN1bHQ6OlVwZGF0ZUFuZEJyZWFrOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGVSZXN1bHQ6OkNvbnRpbnVlOwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9KTsKIAogICAgICAgICBmb3IgKGF1
dG8mIHRocmVhZCA6IG1fdGhyZWFkcykgewpAQCAtMjE2LDE4ICsxNzcsMjIgQEAgdm9pZCBXb3Jr
bGlzdDo6Y29tcGxldGVQbGFuU3luY2hyb25vdXNseShQbGFuJiBwbGFuKQogdm9pZCBXb3JrbGlz
dDo6c3RvcEFsbFBsYW5zRm9yVk0oVk0mIHZtKQogewogICAgIExvY2tIb2xkZXIgbG9ja2VyKCpt
X2xvY2spOwotICAgIGl0ZXJhdGUobG9ja2VyLCBbJl0gKFF1ZXVlRWxlbWVudCYgZWxlbWVudCkg
eworICAgIFZlY3RvcjxRdWV1ZUVsZW1lbnQ+IGVsZW1lbnRzOworICAgIHdoaWxlICghbV9xdWV1
ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgUXVldWVFbGVtZW50IGVsZW1lbnQgPSBtX3F1ZXVlLmRl
cXVldWUoKTsKICAgICAgICAgYm9vbCBkaWRDYW5jZWwgPSBlbGVtZW50LnBsYW4tPnRyeVJlbW92
ZVZNQW5kQ2FuY2VsSWZMYXN0KHZtKTsKLSAgICAgICAgaWYgKGRpZENhbmNlbCkKLSAgICAgICAg
ICAgIHJldHVybiBJdGVyYXRlUmVzdWx0OjpEcm9wQW5kQ29udGludWU7Ci0gICAgICAgIHJldHVy
biBJdGVyYXRlUmVzdWx0OjpDb250aW51ZTsKLSAgICB9KTsKKyAgICAgICAgaWYgKCFkaWRDYW5j
ZWwpCisgICAgICAgICAgICBlbGVtZW50cy5hcHBlbmQoV1RGTW92ZShlbGVtZW50KSk7CisgICAg
fQorCisgICAgZm9yIChhdXRvJiBlbGVtZW50IDogZWxlbWVudHMpCisgICAgICAgIG1fcXVldWUu
ZW5xdWV1ZShXVEZNb3ZlKGVsZW1lbnQpKTsKIAogICAgIGZvciAoYXV0byYgdGhyZWFkIDogbV90
aHJlYWRzKSB7CiAgICAgICAgIGlmICh0aHJlYWQtPmVsZW1lbnQucGxhbikgewogICAgICAgICAg
ICAgYm9vbCBkaWRDYW5jZWwgPSB0aHJlYWQtPmVsZW1lbnQucGxhbi0+dHJ5UmVtb3ZlVk1BbmRD
YW5jZWxJZkxhc3Qodm0pOwogICAgICAgICAgICAgaWYgKGRpZENhbmNlbCkgewotICAgICAgICAg
ICAgICAgIC8vIFdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhlIGRlYWRsb2NraW5nIHNp
bmNlIHRoZSB0aHJlYWQgY2FuJ3QgYmxvY2sgd2l0aG91dCBjbGVhcmluZyB0aGUgcGxhbiBhbmQg
bXVzdCBob2xkIHRoZSBsb2NrIHRvIGRvIHNvLgorICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0
IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhlIGRlYWRsb2NraW5nIHNpbmNlIHRoZSB0aHJlYWQgY2Fu
J3QgYmxvY2sgd2l0aG91dCBjaGVja2luZyBmb3IgYSBuZXcgcGxhbiBhbmQgbXVzdCBob2xkIHRo
ZSBsb2NrIHRvIGRvIHNvLgogICAgICAgICAgICAgICAgIHRocmVhZC0+c3luY2hyb25pemUud2Fp
dCgqbV9sb2NrKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjQ5LDcgKzIxNCw3IEBA
IFdvcmtsaXN0Ojp+V29ya2xpc3QoKQogewogICAgIHsKICAgICAgICAgTG9ja0hvbGRlciBsb2Nr
ZXIoKm1fbG9jayk7Ci0gICAgICAgIG1fcXVldWUucHVzaCh7IFByaW9yaXR5OjpTaHV0ZG93biwg
bmV4dFRpY2tldCgpLCBudWxscHRyIH0pOworICAgICAgICBtX3F1ZXVlLmVucXVldWUoeyBQcmlv
cml0eTo6U2h1dGRvd24sIG5leHRUaWNrZXQoKSwgbnVsbHB0ciB9KTsKICAgICAgICAgbV9wbGFu
RW5xdWV1ZWQtPm5vdGlmeUFsbChsb2NrZXIpOwogICAgIH0KICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV90aHJlYWRzLnNpemUoKTsgKytpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtV29ya2xpc3QuaAppbmRleCBiY2FmMWVmODhkZjQ5MzU5MTU2NWNmY2UwMjg5ZTc1ZTFl
YTRjMzcyLi5hZDRiMTA4OTkwNmUzNjc1NDkzN2I2OTliYmRmOGJkY2U1NGQyOTBiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuaApAQCAtMzIsNiArMzIsNyBAQAog
I2luY2x1ZGUgPHF1ZXVlPgogCiAjaW5jbHVkZSA8d3RmL0F1dG9tYXRpY1RocmVhZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9Qcmlvcml0eVF1ZXVlLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBu
YW1lc3BhY2UgSlNDIHsKQEAgLTc5LDI2ICs4MCwyMCBAQCBwcml2YXRlOgogICAgICAgICB2b2lk
IHNldFRvTmV4dFByaW9yaXR5KCk7CiAgICAgfTsKIAotICAgIHN0cnVjdCBDb21wYXJhdG9yIHsK
LSAgICAgICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IFF1ZXVlRWxlbWVudCYgbGVmdCwgY29uc3Qg
UXVldWVFbGVtZW50JiByaWdodCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGxl
ZnQucHJpb3JpdHkgPT0gcmlnaHQucHJpb3JpdHkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGxl
ZnQudGlja2V0ID4gcmlnaHQudGlja2V0OwotICAgICAgICAgICAgcmV0dXJuIGxlZnQucHJpb3Jp
dHkgPiByaWdodC5wcmlvcml0eTsKLSAgICAgICAgfQotICAgIH07CisgICAgc3RhdGljIGJvb2wg
aXNIaWdoZXJQcmlvcml0eShjb25zdCBRdWV1ZUVsZW1lbnQmIGxlZnQsIGNvbnN0IFF1ZXVlRWxl
bWVudCYgcmlnaHQpCisgICAgeworICAgICAgICBpZiAobGVmdC5wcmlvcml0eSA9PSByaWdodC5w
cmlvcml0eSkKKyAgICAgICAgICAgIHJldHVybiBsZWZ0LnRpY2tldCA+IHJpZ2h0LnRpY2tldDsK
KyAgICAgICAgcmV0dXJuIGxlZnQucHJpb3JpdHkgPiByaWdodC5wcmlvcml0eTsKKyAgICB9CiAK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotICAgIHZvaWQgaXRlcmF0ZShjb25zdCBB
YnN0cmFjdExvY2tlciYsIGNvbnN0IEZ1bmN0b3ImKTsKIAogICAgIEJveDxMb2NrPiBtX2xvY2s7
CiAgICAgUmVmUHRyPEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbj4gbV9wbGFuRW5xdWV1ZWQ7CiAg
ICAgLy8gVGVjaG5pY2FsbHksIHRoaXMgY291bGQgb3ZlcmZsb3cgYnV0IHRoYXQncyB1bmxpa2Vs
eS4gRXZlbiBpZiBpdCBkaWQsIHdlIHdpbGwganVzdCBjb21waWxlIHRoaW5ncyBvZiB0aGUgc2Ft
ZQogICAgIC8vIFByaW9yaXR5IGl0IHRoZSB3cm9uZyBvcmRlciwgd2hpY2ggaXNuJ3Qgd3Jvbmcs
IGp1c3Qgc3Vib3B0aW1hbC4KICAgICBUaWNrZXQgbV9sYXN0R3JhbnRlZFRpY2tldCB7IDAgfTsK
LSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIFdURjo6VmVjdG9yIGJ1dCBXVEY6OlZlY3Rv
ciBkb2VzIG5vdCBzdXBwb3J0IHJhbmRvbSBhY2Nlc3MgaXRlcmF0b3IuCi0gICAgc3RkOjpwcmlv
cml0eV9xdWV1ZTxRdWV1ZUVsZW1lbnQsIHN0ZDo6dmVjdG9yPFF1ZXVlRWxlbWVudD4sIENvbXBh
cmF0b3I+IG1fcXVldWU7Ci0gICAgSGFzaE1hcDxKU1Byb21pc2VEZWZlcnJlZCosIFBsYW4qPiBt
X2FjdGl2ZVBsYW5zOworICAgIFByaW9yaXR5UXVldWU8UXVldWVFbGVtZW50LCBpc0hpZ2hlclBy
aW9yaXR5LCAxMD4gbV9xdWV1ZTsKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFRocmVhZD4+
IG1fdGhyZWFkczsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IGY1OGYxOWI1NmQzM2NiODhhNmZiNDlkNmU1ZjNiNjA5Nzg2YmMwY2MuLjdjNzc0ZDk3
ZGQ0MTg3MmEyMGYzOTljOTZhMzU5MWQ3YTRjYWUxNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
V1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dURi9XVEYueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTQ5LDYgKzE0OSw3IEBACiAJCTUxNUY3OTU2MUNGRDNB
NjkwMENDRUQ5MyAvKiBDcm9zc1RocmVhZFF1ZXVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTVGNzk1NTFDRkQzQTY5MDBDQ0VEOTMgLyogQ3Jvc3NU
aHJlYWRRdWV1ZS5oICovOyB9OwogCQk1MjE4MzAxMkM5OUU0NzZBODRFRUJFQTggLyogU3ltYm9s
SW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NzJCQkRCMTA3RkE0MjQ4ODYxNzhCOUUgLyogU3ltYm9sSW1wbC5jcHAgKi87IH07CiAJCTUzOUVC
MDYzMUQ1NTI4NDIwMEM4MkVGNyAvKiBMRUJEZWNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzlFQjA2MjFENTUyODQyMDBDODJFRjcgLyogTEVC
RGVjb2Rlci5oICovOyB9OworCQk1M0VDMjUzRTFFOTVBRDMwMDAwODMxQjkgLyogUHJpb3JpdHlR
dWV1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNF
QzI1M0MxRTk1QUQzMDAwMDgzMUI5IC8qIFByaW9yaXR5UXVldWUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1NTMwNzFDQTFDNDA0MjcyMDAzODQ4
OTggLyogVGlueUxSVUNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1NTMwNzFDOTFDNDA0MjcyMDAzODQ4OTggLyogVGlueUxSVUNhY2hlLmggKi87
IH07CiAJCTU1OTdGODJGMUQ5NEI5OTcwMDY2QkMyMSAvKiBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTk3Rjgy
QzFEOTRCOTk3MDA2NkJDMjEgLyogU3luY2hyb25pemVkRml4ZWRRdWV1ZS5oICovOyB9OwogCQk1
QzdDODhENDFEMEEzQTBBMDA5RDJGNkQgLyogVW5pcXVlUmVmLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzdDODhEMzFEMEEzQTBBMDA5RDJGNkQgLyog
VW5pcXVlUmVmLmggKi87IH07CkBAIC0xNzgsNiArMTc5LDcgQEAKIAkJOTc0Q0ZDOEUxNkE0RjMy
NzAwNkQ1NDA0IC8qIFdlYWtQdHIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDk3NENGQzhEMTZBNEYzMjcwMDZENTQwNCAvKiBXZWFrUHRyLmggKi87IH07
CiAJCTlCQzcwRjA1MTc2QzM3OUQwMDEwMURFQyAvKiBBdG9taWNTdHJpbmdUYWJsZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QkM3MEYwNDE3NkMz
NzlEMDAxMDFERUMgLyogQXRvbWljU3RyaW5nVGFibGUuY3BwICovOyB9OwogCQk5QkQ4RjQwQjE3
NkMyQjQ3MDAwMkQ4NjUgLyogQXRvbWljU3RyaW5nVGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCRDhGNDBBMTc2QzJBRDgwMDAyRDg2NSAvKiBB
dG9taWNTdHJpbmdUYWJsZS5oICovOyB9OworCQlBM0I3MjVFQzk4NzQ0NkFEOTNGMUE0NDAgLyog
UmFuZG9tRGV2aWNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEM4RjU5N0NBMkE1NzQxN0ZCQUI5MkZENiAvKiBSYW5kb21EZXZpY2UuY3BwICovOyB9
OwogCQlBNTA5OEIwMDFDMTY5RTA3MDAwODc3OTcgLyogU2FuZGJveFNQSS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTUwOThBRkYxQzE2OUUwNzAwMDg3
Nzk3IC8qIFNhbmRib3hTUEkuaCAqLzsgfTsKIAkJQTUwOThCMDIxQzE2QTRGOTAwMDg3Nzk3IC8q
IFNlY3VyaXR5U1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBNTA5OEIwMTFDMTZBNEY5MDAwODc3OTcgLyogU2VjdXJpdHlTUEkuaCAqLzsgfTsKIAkJ
QTU2MUYzMTAxREYyNjQyMTAwRkY2NzVEIC8qIERlcHJlY2F0ZWRPcHRpb25hbC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTU2MUYzMEYxREYyNjQyMTAw
RkY2NzVEIC8qIERlcHJlY2F0ZWRPcHRpb25hbC5oICovOyB9OwpAQCAtMzgzLDEzICszODUsMTIg
QEAKIAkJRTRBMEFEM0ExQTk2MjQ1NTAwNTM2REY2IC8qIFdvcmtRdWV1ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRBMEFEMzgxQTk2MjQ1NTAwNTM2
REY2IC8qIFdvcmtRdWV1ZS5oICovOyB9OwogCQlFNEEwQUQzRDFBOTYyNTNDMDA1MzZERjYgLyog
V29ya1F1ZXVlQ29jb2EuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTRBMEFEM0MxQTk2MjUzQzAwNTM2REY2IC8qIFdvcmtRdWV1ZUNvY29hLmNwcCAq
LzsgfTsKIAkJRUI5NUUxRjAxNjFBNzI0MTAwODlBMkY1IC8qIEJ5dGVPcmRlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRUI5NUUxRUYxNjFBNzI0MTAw
ODlBMkY1IC8qIEJ5dGVPcmRlci5oICovOyB9OworCQlGQzZFQzJCRjIwRjg0OTk2OUM2QTVCRTEg
LyogUmFuZG9tRGV2aWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyNEYxQjI0ODYxOUY0MTIyOTZEMUMxOUMgLyogUmFuZG9tRGV2aWNlLmggKi87IH07
CiAJCUZFODIyNTMxMUIyQTFFNUIwMEJBNjhGRCAvKiBOYWtlZFB0ci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU4MjI1MzAxQjJBMUU1QjAwQkE2OEZE
IC8qIE5ha2VkUHRyLmggKi87IH07CiAJCUZFODZBODc1MUU1OTQ0MDIwMDExMUJCRiAvKiBGb3Ji
aWRIZWFwQWxsb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkU4NkE4NzQxRTU5NDQwMjAwMTExQkJGIC8qIEZvcmJpZEhlYXBBbGxvY2F0aW9u
LmggKi87IH07CiAJCUZFODkyNUIwMUQwMERBRUMwMDQ2OTA3RSAvKiBJbmRlbnRlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU4OTI1QUYxRDAwREFF
QzAwNDY5MDdFIC8qIEluZGVudGVyLmggKi87IH07CiAJCUZFREFDRDNEMTYzMEY4M0YwMEM2OTYz
NCAvKiBTdGFja1N0YXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZFREFDRDNCMTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0YXRzLmNwcCAqLzsg
fTsKIAkJRkVEQUNEM0UxNjMwRjgzRjAwQzY5NjM0IC8qIFN0YWNrU3RhdHMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFREFDRDNDMTYzMEY4M0YwMEM2
OTYzNCAvKiBTdGFja1N0YXRzLmggKi87IH07Ci0JCUZDNkVDMkJGMjBGODQ5OTY5QzZBNUJFMSAv
KiBSYW5kb21EZXZpY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDI0RjFCMjQ4NjE5RjQxMjI5NkQxQzE5QyAvKiBSYW5kb21EZXZpY2UuaCAqLzsgfTsK
LQkJQTNCNzI1RUM5ODc0NDZBRDkzRjFBNDQwIC8qIFJhbmRvbURldmljZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDOEY1OTdDQTJBNTc0MTdGQkFC
OTJGRDYgLyogUmFuZG9tRGV2aWNlLmNwcCAqLzsgfTsKIC8qIEVuZCBQQlhCdWlsZEZpbGUgc2Vj
dGlvbiAqLwogCiAvKiBCZWdpbiBQQlhDb250YWluZXJJdGVtUHJveHkgc2VjdGlvbiAqLwpAQCAt
NTI2LDYgKzUyNyw3IEBACiAJCTFDQ0RCMTUxMUU1NjZCQzUwMDZDNzNDMCAvKiBDRlN0cmluZ1NQ
SS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDRlN0cmluZ1NQSS5oOyBwYXRo
ID0gY2YvQ0ZTdHJpbmdTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUZBNDdD
ODgxNTI1MDJEQTAwNTY4RDFCIC8qIFdlYkNvcmVUaHJlYWQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV2ViQ29yZVRocmVhZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTFGQTQ3Qzg5MTUyNTAyREEwMDU2OEQxQiAvKiBXZWJDb3JlVGhyZWFkLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVUaHJlYWQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjRGMUIyNDg2MTlGNDEyMjk2RDFDMTlDIC8qIFJhbmRv
bURldmljZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSYW5kb21EZXZpY2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjYxNDdCMDgxNUREQ0NEQzAwRERCOTA3
IC8qIEludGVnZXJUb1N0cmluZ0NvbnZlcnNpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkyNjI5OUI2RDE3QTlFNUI4MDBBREVCRTUgLyogUmVmLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlZi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkyNjg0RDQzNTFDMDAwRDQwMDA4MUQ2NjMgLyogSW5kZXhTcGFyc2VTZXQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5kZXhTcGFyc2VTZXQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTU0Miw2ICs1NDQsNyBAQAogCQk1MTVGNzk0RDFDRkM5RjRBMDBDQ0VE
OTMgLyogQ3Jvc3NUaHJlYWRUYXNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENyb3NzVGhyZWFkVGFzay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTVGNzk1
NTFDRkQzQTY5MDBDQ0VEOTMgLyogQ3Jvc3NUaHJlYWRRdWV1ZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDcm9zc1RocmVhZFF1ZXVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUzOUVCMDYyMUQ1NTI4NDIwMEM4MkVGNyAvKiBMRUJEZWNvZGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExFQkRlY29kZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNTNFQzI1M0MxRTk1QUQzMDAwMDgzMUI5IC8qIFByaW9yaXR5UXVldWUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJpb3JpdHlRdWV1ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NTMwNzFDOTFDNDA0MjcyMDAzODQ4OTggLyogVGlu
eUxSVUNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbnlMUlVDYWNo
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NTk3RjgyQzFEOTRCOTk3MDA2NkJD
MjEgLyogU3luY2hyb25pemVkRml4ZWRRdWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTVCNDMzODNBNUQwQjQ2M0M5NDMzRDkzMyAvKiBJbmRleE1hcC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbmRleE1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNzYwLDYgKzc2Myw3IEBACiAJCUFERjJDRTY1MUUzOUYxMDYwMDY4ODlEQiAvKiBN
ZW1vcnlGb290cHJpbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
TWVtb3J5Rm9vdHByaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjM4RkQ3
QkMxNjg5NTNFODAwNjVDOTY5IC8qIEZlYXR1cmVEZWZpbmVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEZlYXR1cmVEZWZpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUM0RjhBOTM2MTlDNjVFQjQwMEIyQjE1RCAvKiBTdG9wd2F0Y2guaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcHdhdGNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUM4RjU5N0NBMkE1NzQxN0ZCQUI5MkZENiAvKiBSYW5kb21EZXZpY2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmFuZG9tRGV2aWNlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q1NDk3QUExNTg1N0QwMzAwQjVCQzMwIC8qIE1l
ZGlhVGltZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYVRp
bWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDU0OTdBQjE1ODU3RDAzMDBC
NUJDMzAgLyogTWVkaWFUaW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1l
ZGlhVGltZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRTQ2NTE2RDE5REIxRkI0
MDAzRUNBMDUgLyogTlNNYXBUYWJsZVNQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBOU01hcFRhYmxlU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03OTAs
OCArNzk0LDYgQEAKIAkJRkU4OTI1QUYxRDAwREFFQzAwNDY5MDdFIC8qIEluZGVudGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGVudGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUZFREFDRDNCMTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0YXRzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0YWNrU3RhdHMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRURBQ0QzQzE2MzBGODNGMDBDNjk2MzQgLyog
U3RhY2tTdGF0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdGFja1N0YXRz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTI0RjFCMjQ4NjE5RjQxMjI5NkQxQzE5
QyAvKiBSYW5kb21EZXZpY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUmFu
ZG9tRGV2aWNlLmg7IHBhdGggPSBSYW5kb21EZXZpY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQzhGNTk3Q0EyQTU3NDE3RkJBQjkyRkQ2IC8qIFJhbmRvbURldmljZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBSYW5kb21EZXZpY2UuY3BwOyBwYXRo
ID0gUmFuZG9tRGV2aWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIC8qIEVuZCBQ
QlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYRnJhbWV3b3Jrc0J1aWxk
UGhhc2Ugc2VjdGlvbiAqLwpAQCAtMTEwMyw2ICsxMTA1LDcgQEAKIAkJCQkwRkY4NjA5NDFCQ0NC
RDc0MDA0NTEyN0YgLyogUG9pbnRlckNvbXBhcmlzb24uaCAqLywKIAkJCQkwRjlEMzM1RDE2NURC
QTczMDA1QUQzODcgLyogUHJpbnRTdHJlYW0uY3BwICovLAogCQkJCTBGOUQzMzVFMTY1REJBNzMw
MDVBRDM4NyAvKiBQcmludFN0cmVhbS5oICovLAorCQkJCTUzRUMyNTNDMUU5NUFEMzAwMDA4MzFC
OSAvKiBQcmlvcml0eVF1ZXVlLmggKi8sCiAJCQkJMEZDNDQ4ODIxNkZFOUZFMTAwODQ0QkU5IC8q
IFByb2Nlc3NJRC5oICovLAogCQkJCTE0M0Y2MTFEMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXpl
LmNwcCAqLywKIAkJCQkxNDNGNjExRTE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5oICovLApA
QCAtMTQxMiw2ICsxNDE1LDcgQEAKIAkJCQk4MTM0MDEzOTE1QjA5MkZEMDAxRkYwQjggLyogQmFz
ZTY0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNBOTE1MUE4MjVCMDA0MTIzRkYgLyogYmln
bnVtLWR0b2EuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0FCMTUxQTgyNUIwMDQxMjNGRiAv
KiBiaWdudW0uaCBpbiBIZWFkZXJzICovLAorCQkJCTUzRUMyNTNFMUU5NUFEMzAwMDA4MzFCOSAv
KiBQcmlvcml0eVF1ZXVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ1MjE1MUE4MjVCMDA0
MTIzRkYgLyogQmluYXJ5U2VtYXBob3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzM4QTE1
MUE4MjVCMDA0MTIzRkYgLyogQml0bWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzM4QzE1
MUE4MjVCMDA0MTIzRkYgLyogQml0VmVjdG9yLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMuaCBiL1NvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMu
aAppbmRleCA3OGRhZWFmNzM4ZDA2OWM4NjhhZjhkZTk2ZDA3NGY2MWI5NmJhNDAzLi40MGM3N2Uz
NTQxNzQ1ZDMyZWE5OTk2MmIzM2ZlMjBhMGM1MzQzNmFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9NYXRoRXh0cmFzLmgKKysrIGIvU291cmNlL1dURi93dGYvTWF0aEV4dHJhcy5oCkBAIC0y
NzcsNiArMjc3LDExIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBib29sIGlzR3JlYXRl
clRoYW5Ob25aZXJvUG93ZXJPZlR3byhUIHZhbHVlLCB1bnNpZ25lCiAgICAgcmV0dXJuICEhKCh2
YWx1ZSA+PiAxKSA+PiAocG93ZXIgLSAxKSk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNv
bnN0ZXhwciBpbmxpbmUgYm9vbCBpc0xlc3NUaGFuKGNvbnN0IFQmIGEsIGNvbnN0IFQmIGIpIHsg
cmV0dXJuIGEgPCBiOyB9Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgaW5saW5lIGJv
b2wgaXNMZXNzVGhhbkVxdWFsKGNvbnN0IFQmIGEsIGNvbnN0IFQmIGIpIHsgcmV0dXJuIGEgPD0g
YjsgfQordGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGlubGluZSBib29sIGlzR3JlYXRl
clRoYW4oY29uc3QgVCYgYSwgY29uc3QgVCYgYikgeyByZXR1cm4gYSA+IGI7IH0KK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBpbmxpbmUgYm9vbCBpc0dyZWF0ZXJUaGFuRXF1YWwoY29u
c3QgVCYgYSwgY29uc3QgVCYgYikgeyByZXR1cm4gYSA+PSBiOyB9CisKICNpZm5kZWYgVUlOVDY0
X0MKICNpZiBDT01QSUxFUihNU1ZDKQogI2RlZmluZSBVSU5UNjRfQyhjKSBjICMjIHVpNjQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1ByaW9yaXR5UXVldWUuaCBiL1NvdXJjZS9XVEYvd3Rm
L1ByaW9yaXR5UXVldWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMWY2ZmFlODFmNWQ0MWVkNjkwMTRmNTgzOTgx
OWQ2YTYzMjNiYzYyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvUHJpb3JpdHlR
dWV1ZS5oCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8vIFRoaXMg
Y2xhc3MgaW1wbGVtZW50cyBhIGJhc2ljIHByaW9yaXR5IHF1ZXVlLiBUaGUgY2xhc3MgaXMgYmFj
a2VkIGFzIGEgYmluYXJ5IGhlYXAsIGxpa2Ugc3RkOjpwcmlvcml0eV9xdWV1ZS4KKy8vIFByaW9y
aXR5UXVldWUgaGFzIGEgY291cGxlIG9mIGFkdmFudGFnZXMgb3ZlciBzdGQ6OnByaW9yaXR5X3F1
ZXVlOgorLy8KKy8vIDEpIFRoZSBiYWNraW5nIHZlY3RvciBpcyBmYXN0TWFsbG9jZWQuCisvLyAy
KSBZb3UgY2FuIGl0ZXJhdGUgdGhlIGVsZW1lbnRzLgorLy8gMykgSXQgaGFzIGluLXBsYWNlIGRl
Y3JlYXNlL2luY3JlYXNlS2V5IG1ldGhvZHMsIGFsdGhvdWdoIHRoZXkgYXJlIHN0aWxsIE8obikg
cmF0aGVyIHRoYW4gTyhsb2cobikpLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sICgqaXNI
aWdoZXJQcmlvcml0eSkoY29uc3QgVCYsIGNvbnN0IFQmKSA9IGlzTGVzc1RoYW48VD4sIHNpemVf
dCBpbmxpbmVDYXBhY2l0eSA9IDA+CitjbGFzcyBQcmlvcml0eVF1ZXVlIHsKKyAgICB1c2luZyBC
dWZmZXJUeXBlID0gVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PjsKKyAgICB1c2luZyBjb25zdF9p
dGVyYXRvciA9IHR5cGVuYW1lIEJ1ZmZlclR5cGU6OmNvbnN0X2l0ZXJhdG9yOworcHVibGljOgor
ICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIuc2l6ZSgpOyB9CisgICAg
Ym9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIuaXNFbXB0eSgpOyB9CisKKyAg
ICB2b2lkIGVucXVldWUoVCBlbGVtZW50KQorICAgIHsKKyAgICAgICAgc2l6ZV90IGxvY2F0aW9u
ID0gbV9idWZmZXIuc2l6ZSgpOworICAgICAgICBtX2J1ZmZlci5hcHBlbmQoc3RkOjpmb3J3YXJk
PFQ+KGVsZW1lbnQpKTsKKyAgICAgICAgc2lmdFVwKGxvY2F0aW9uKTsKKyAgICB9CisKKyAgICBj
b25zdCBUJiBwZWVrKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXJbMF07IH0KKyAgICBUIGRlcXVl
dWUoKQorICAgIHsKKyAgICAgICAgc3RkOjpzd2FwKG1fYnVmZmVyWzBdLCBtX2J1ZmZlci5sYXN0
KCkpOworICAgICAgICBUIHJlc3VsdCA9IG1fYnVmZmVyLnRha2VMYXN0KCk7CisgICAgICAgIHNp
ZnREb3duKDApOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBkZWNyZWFzZUtleShjb25zdCBGdW5jdG9yJiBk
ZXNpcmVkRWxlbWVudCkKKyAgICB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9i
dWZmZXIuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChkZXNpcmVkRWxlbWVudChtX2J1
ZmZlcltpXSkpIHsKKyAgICAgICAgICAgICAgICBzaWZ0RG93bihpKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKGlzVmFs
aWRIZWFwKCkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAg
dm9pZCBpbmNyZWFzZUtleShjb25zdCBGdW5jdG9yJiBkZXNpcmVkRWxlbWVudCkKKyAgICB7Cisg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9idWZmZXIuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgICAgIGlmIChkZXNpcmVkRWxlbWVudChtX2J1ZmZlcltpXSkpIHsKKyAgICAgICAgICAg
ICAgICBzaWZ0VXAoaSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIEFTU0VSVChpc1ZhbGlkSGVhcCgpKTsKKyAgICB9CisKKyAgICBj
b25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyLmJlZ2luKCk7IH07
CisgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIuZW5kKCk7
IH07CisKKyAgICBib29sIGlzVmFsaWRIZWFwKCkgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9idWZmZXIuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlm
IChsZWZ0Q2hpbGRPZihpKSA8IG1fYnVmZmVyLnNpemUoKSAmJiAhaXNIaWdoZXJQcmlvcml0eSht
X2J1ZmZlcltpXSwgbV9idWZmZXJbbGVmdENoaWxkT2YoaSldKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAocmlnaHRDaGlsZE9mKGkpIDwgbV9idWZmZXIu
c2l6ZSgpICYmICFpc0hpZ2hlclByaW9yaXR5KG1fYnVmZmVyW2ldLCBtX2J1ZmZlcltyaWdodENo
aWxkT2YoaSldKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGNvbnN0
ZXhwciBzaXplX3QgcGFyZW50T2Yoc2l6ZV90IGxvY2F0aW9uKSB7IEFTU0VSVChsb2NhdGlvbik7
IHJldHVybiAobG9jYXRpb24gLSAxKSAvIDI7IH0KKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVf
dCBsZWZ0Q2hpbGRPZihzaXplX3QgbG9jYXRpb24pIHsgcmV0dXJuIGxvY2F0aW9uICogMiArIDE7
IH0KKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCByaWdodENoaWxkT2Yoc2l6ZV90IGxvY2F0
aW9uKSB7IHJldHVybiBsZWZ0Q2hpbGRPZihsb2NhdGlvbikgKyAxOyB9CisKKyAgICB2b2lkIHNp
ZnRVcChzaXplX3QgbG9jYXRpb24pCisgICAgeworICAgICAgICB3aGlsZSAobG9jYXRpb24pIHsK
KyAgICAgICAgICAgIGF1dG8gcGFyZW50ID0gcGFyZW50T2YobG9jYXRpb24pOworICAgICAgICAg
ICAgaWYgKGlzSGlnaGVyUHJpb3JpdHkobV9idWZmZXJbcGFyZW50XSwgbV9idWZmZXJbbG9jYXRp
b25dKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIHN0ZDo6c3dhcCht
X2J1ZmZlcltwYXJlbnRdLCBtX2J1ZmZlcltsb2NhdGlvbl0pOworICAgICAgICAgICAgbG9jYXRp
b24gPSBwYXJlbnQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHNpZnREb3duKHNpemVf
dCBsb2NhdGlvbikKKyAgICB7CisgICAgICAgIHdoaWxlIChsZWZ0Q2hpbGRPZihsb2NhdGlvbikg
PCBtX2J1ZmZlci5zaXplKCkpIHsKKyAgICAgICAgICAgIHNpemVfdCBoaWdoZXJQcmlvcml0eUNo
aWxkOworICAgICAgICAgICAgaWYgKExJS0VMWShyaWdodENoaWxkT2YobG9jYXRpb24pIDwgbV9i
dWZmZXIuc2l6ZSgpKSkKKyAgICAgICAgICAgICAgICBoaWdoZXJQcmlvcml0eUNoaWxkID0gaXNI
aWdoZXJQcmlvcml0eShtX2J1ZmZlcltsZWZ0Q2hpbGRPZihsb2NhdGlvbildLCBtX2J1ZmZlclty
aWdodENoaWxkT2YobG9jYXRpb24pXSkgPyBsZWZ0Q2hpbGRPZihsb2NhdGlvbikgOiByaWdodENo
aWxkT2YobG9jYXRpb24pOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGhpZ2hl
clByaW9yaXR5Q2hpbGQgPSBsZWZ0Q2hpbGRPZihsb2NhdGlvbik7CisKKyAgICAgICAgICAgIGlm
IChpc0hpZ2hlclByaW9yaXR5KG1fYnVmZmVyW2xvY2F0aW9uXSwgbV9idWZmZXJbaGlnaGVyUHJp
b3JpdHlDaGlsZF0pKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgc3Rk
Ojpzd2FwKG1fYnVmZmVyW2xvY2F0aW9uXSwgbV9idWZmZXJbaGlnaGVyUHJpb3JpdHlDaGlsZF0p
OworICAgICAgICAgICAgbG9jYXRpb24gPSBoaWdoZXJQcmlvcml0eUNoaWxkOworICAgICAgICB9
CisgICAgfQorCisgICAgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiBtX2J1ZmZlcjsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OlByaW9yaXR5UXVldWU7CmRpZmYgLS1n
aXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMGRlMTQ0NDQ2NDc1
NWQ3MjNjM2I1ZjY2NDFmYTY1ZDFhYzg2MmZhNi4uOWQ3OWM2MDg4YTgzOTVjN2UxZGVhNjFjMTAx
MDc5MjI0OGUwNjJjMCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDE3LTA0LTA3ICBLZWl0aCBNaWxsZXIgIDxrZWl0
aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBhIFByaW9yaXR5UXVldWUgY2xhc3MK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDU3OQor
CisgICAgICAgIFJldmlld2VkIGJ5IFNhYW0gQmFyYXRpLgorCisgICAgICAgICogVGVzdFdlYktp
dEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUHJpb3JpdHlRdWV1ZS5jcHA6IEFkZGVkLgorICAgICAg
ICAob3BlcmF0b3IgIF96ICk6CisgICAgICAgIChlbnF1ZXVlKToKKyAgICAgICAgKGRlcXVldWUp
OgorICAgICAgICAoVEVTVCk6CisgICAgICAgIChjb21wYXJlTW92ZSk6CisKIDIwMTctMDQtMDcg
IFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVwbGFjZSBFUzZT
YW1wbGVCZW5jaCBieSBBUkVTLTYgaW4gcnVuLWJlbmNobWFyawpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCBkN2VlNzE4MTQ1YThkNTNkNzQ1YzI2YjIxYzcwNDBjNzZjNDU3MmZhLi40MTQzNmE2
NmE2MzhkYWFmZmQ0NDczNWJjZjNlMGRlMDE5MTBmYWRiIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMTcwLDYgKzE3MCw3IEBACiAJCTUzMUMxRDhFMURGOEVGNzIwMDZFOTc5RiAvKiBMRUJE
ZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUzMUMxRDhEMURGOEVGNzIwMDZFOTc5RiAvKiBMRUJEZWNvZGVyLmNwcCAqLzsgfTsKIAkJNTM2
NzcwMzQxQ0M4MDIyODAwRDQyNUIxIC8qIFdlYlNjcmlwdE9iamVjdERlc2NyaXB0aW9uLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM2NzcwMzMxQ0M4
MDIyODAwRDQyNUIxIC8qIFdlYlNjcmlwdE9iamVjdERlc2NyaXB0aW9uLm1tICovOyB9OwogCQk1
MzY3NzAzNjFDQzgxQjYxMDBENDI1QjEgLyogV2ViU2NyaXB0T2JqZWN0RGVzY3JpcHRpb24uaHRt
bCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MzY3NzAzNTFDQzgxMkY5MDBENDI1QjEgLyogV2ViU2NyaXB0T2JqZWN0RGVzY3JpcHRpb24uaHRt
bCAqLzsgfTsKKwkJNTNFQzI1NDExRTk2RkQ4NzAwMDgzMUI5IC8qIFByaW9yaXR5UXVldWUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNFQzI1M0Yx
RTk2QkM4MDAwMDgzMUI5IC8qIFByaW9yaXR5UXVldWUuY3BwICovOyB9OwogCQk1NTk3RjgzNjFE
OTU5NkM4MDA2NkJDMjEgLyogU3luY2hyb25pemVkRml4ZWRRdWV1ZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTk3RjgzNDFEOTU5NkM4MDA2NkJD
MjEgLyogU3luY2hyb25pemVkRml4ZWRRdWV1ZS5jcHAgKi87IH07CiAJCTU3MTRFQ0I5MUNBOEI1
QjAwMDA1MUFDOCAvKiBEb3dubG9hZFJlcXVlc3RPcmlnaW5hbFVSTC5odG1sIGluIENvcHkgUmVz
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MTRFQ0I4MUNBOEI1
ODgwMDA1MUFDOCAvKiBEb3dubG9hZFJlcXVlc3RPcmlnaW5hbFVSTC5odG1sICovOyB9OwogCQk1
NzE0RUNCQjFDQThCRkU0MDAwNTFBQzggLyogRG93bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkxGcmFt
ZS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDU3MTRFQ0JBMUNBOEJGRDEwMDA1MUFDOCAvKiBEb3dubG9hZFJlcXVlc3RPcmlnaW5hbFVS
TEZyYW1lLmh0bWwgKi87IH07CkBAIC0xMDg3LDYgKzEwODgsNyBAQAogCQk1MzFDMUQ4RDFERjhF
RjcyMDA2RTk3OUYgLyogTEVCRGVjb2Rlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBMRUJEZWNvZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTM2NzcwMzMxQ0M4MDIyODAwRDQyNUIxIC8qIFdlYlNjcmlwdE9iamVjdERlc2NyaXB0aW9uLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViU2NyaXB0T2JqZWN0
RGVzY3JpcHRpb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNjc3MDM1MUND
ODEyRjkwMEQ0MjVCMSAvKiBXZWJTY3JpcHRPYmplY3REZXNjcmlwdGlvbi5odG1sICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dC5odG1sOyBwYXRoID0gV2ViU2NyaXB0T2JqZWN0RGVzY3JpcHRpb24uaHRtbDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTNFQzI1M0YxRTk2QkM4MDAwMDgzMUI5IC8qIFBy
aW9yaXR5UXVldWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJp
b3JpdHlRdWV1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1OTdGODM0MUQ5
NTk2QzgwMDY2QkMyMSAvKiBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5bmNocm9uaXplZEZpeGVkUXVldWUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzE0RUNCODFDQThCNTg4MDAwNTFBQzggLyogRG93
bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkwuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9
IERvd25sb2FkUmVxdWVzdE9yaWdpbmFsVVJMLmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTU3MTRFQ0JBMUNBOEJGRDEwMDA1MUFDOCAvKiBEb3dubG9hZFJlcXVlc3RPcmlnaW5h
bFVSTEZyYW1lLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBEb3dubG9hZFJlcXVl
c3RPcmlnaW5hbFVSTEZyYW1lLmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
MDk3LDYgKzIwOTksNyBAQAogCQkJCTFBRkRFNjU0MTk1M0IyQzAwMEM0OEZGQSAvKiBPcHRpb25h
bC5jcHAgKi8sCiAJCQkJQ0U1MEQ4QzgxQzg2NjVDRTAwNzJFQTVBIC8qIE9wdGlvblNldC5jcHAg
Ki8sCiAJCQkJMEZFNDQ3OTcxQjc2RjFFMzAwOTQ5OEVCIC8qIFBhcmtpbmdMb3QuY3BwICovLAor
CQkJCTUzRUMyNTNGMUU5NkJDODAwMDA4MzFCOSAvKiBQcmlvcml0eVF1ZXVlLmNwcCAqLywKIAkJ
CQkwRkM2QzRDQjE0MTAyN0UwMDA1QjdGMEMgLyogUmVkQmxhY2tUcmVlLmNwcCAqLywKIAkJCQk5
M0E0MjdBQTE4MERBMjY0MDBDRDI0RDcgLyogUmVmLmNwcCAqLywKIAkJCQk4NkJEMTk5NzFBMkRC
MDVCMDA2RENGMEEgLyogUmVmQ291bnRlci5jcHAgKi8sCkBAIC0yNjQzLDYgKzI2NDYsNyBAQAog
CQkJCTFBNzdCQUEzMUQ5QUZGRkMwMDVGQzU2OCAvKiBPcHRpb25TZXQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJN0M4M0RGMDIxRDBBNTkwQzAwRkVCQ0YzIC8qIE9TT2JqZWN0UHRyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTdDODNERjU5MUQwQTU5MEMwMEZFQkNGMyAvKiBQYXJraW5nTG90LmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTUzRUMyNTQxMUU5NkZEODcwMDA4MzFCOSAvKiBQcmlvcml0
eVF1ZXVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjEzMUQwQTU5MEMwMEZFQkNGMyAv
KiBSZWRCbGFja1RyZWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGMTQxRDBBNTkwQzAw
RkVCQ0YzIC8qIFJlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYxNTFEMEE1OTBDMDBG
RUJDRjMgLyogUmVmQ291bnRlci5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ByaW9yaXR5UXVldWUuY3BwIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvUHJpb3JpdHlRdWV1ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzQ0NTdkNjIz
ZWFhZjdhYjY4MDI3MDM4ZjkzN2M0ZmUyOTAwYmM0OQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ByaW9yaXR5UXVldWUuY3BwCkBAIC0wLDAgKzEsMjU2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiTW92ZU9u
bHkuaCIKKworI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CisjaW5jbHVkZSA8d3RmL1ByaW9yaXR5UXVldWUuaD4KKworY29uc3RleHByIHN0ZDo6c2l6ZV90
IG9wZXJhdG9yICIiIF96ICggdW5zaWduZWQgbG9uZyBsb25nIG4gKSB7IHJldHVybiBuOyB9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgKCppc0hpZ2hlclByaW9yaXR5KShjb25zdCBUJiwg
Y29uc3QgVCYpPgorc3RhdGljIHZvaWQgZW5xdWV1ZShQcmlvcml0eVF1ZXVlPFQsIGlzSGlnaGVy
UHJpb3JpdHk+JiBxdWV1ZSwgVCBlbGVtZW50KQoreworICAgIHNpemVfdCBzaXplQmVmb3JlID0g
cXVldWUuc2l6ZSgpOworICAgIHF1ZXVlLmVucXVldWUoV1RGTW92ZShlbGVtZW50KSk7CisgICAg
RVhQRUNUX0VRKHNpemVCZWZvcmUgKyAxLCBxdWV1ZS5zaXplKCkpOworICAgIEVYUEVDVF9GQUxT
RShxdWV1ZS5pc0VtcHR5KCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sICgqaXNI
aWdoZXJQcmlvcml0eSkoY29uc3QgVCYsIGNvbnN0IFQmKT4KK3N0YXRpYyBUIGRlcXVldWUoUHJp
b3JpdHlRdWV1ZTxULCBpc0hpZ2hlclByaW9yaXR5PiYgcXVldWUpCit7CisgICAgRVhQRUNUX0ZB
TFNFKHF1ZXVlLmlzRW1wdHkoKSk7CisgICAgc2l6ZV90IHNpemVCZWZvcmUgPSBxdWV1ZS5zaXpl
KCk7CisgICAgVCByZXN1bHQgPSBxdWV1ZS5kZXF1ZXVlKCk7CisgICAgRVhQRUNUX0VRKHNpemVC
ZWZvcmUgLSAxLCBxdWV1ZS5zaXplKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKworVEVT
VChXVEZfUHJpb3JpdHlRdWV1ZSwgQmFzaWMpCit7CisgICAgY29uc3QgdW5zaWduZWQgbnVtRWxl
bWVudHMgPSAxMDsKKyAgICBQcmlvcml0eVF1ZXVlPHVuc2lnbmVkPiBxdWV1ZTsKKworICAgIEVY
UEVDVF9FUSgwX3osIHF1ZXVlLnNpemUoKSk7CisgICAgRVhQRUNUX1RSVUUocXVldWUuaXNFbXB0
eSgpKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgKytpKQor
ICAgICAgICBlbnF1ZXVlKHF1ZXVlLCBpKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBudW1FbGVtZW50czsgKytpKSB7CisgICAgICAgIEVYUEVDVF9FUShpLCBxdWV1ZS5wZWVrKCkp
OworICAgICAgICBFWFBFQ1RfRVEoaSwgZGVxdWV1ZShxdWV1ZSkpOworICAgICAgICBFWFBFQ1Rf
RVEobnVtRWxlbWVudHMgLSBpIC0gMSwgcXVldWUuc2l6ZSgpKTsKKyAgICB9CisKKyAgICBFWFBF
Q1RfVFJVRShxdWV1ZS5pc0VtcHR5KCkpOworfQorCitURVNUKFdURl9Qcmlvcml0eVF1ZXVlLCBD
dXN0b21Qcmlvcml0eUZ1bmN0aW9uKQoreworICAgIGNvbnN0IHVuc2lnbmVkIG51bUVsZW1lbnRz
ID0gMTA7CisgICAgUHJpb3JpdHlRdWV1ZTx1bnNpZ25lZCwgaXNHcmVhdGVyVGhhbjx1bnNpZ25l
ZD4+IHF1ZXVlOworCisgICAgRVhQRUNUX0VRKDBfeiwgcXVldWUuc2l6ZSgpKTsKKyAgICBFWFBF
Q1RfVFJVRShxdWV1ZS5pc0VtcHR5KCkpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG51bUVsZW1lbnRzOyArK2kpIHsKKyAgICAgICAgZW5xdWV1ZShxdWV1ZSwgaSk7CisgICAgICAg
IEVYUEVDVF9FUShpICsgMSwgcXVldWUuc2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHF1
ZXVlLmlzRW1wdHkoKSk7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51
bUVsZW1lbnRzOyArK2kpIHsKKyAgICAgICAgRVhQRUNUX0VRKG51bUVsZW1lbnRzIC0gaSAtIDEs
IHF1ZXVlLnBlZWsoKSk7CisgICAgICAgIEVYUEVDVF9FUShudW1FbGVtZW50cyAtIGkgLSAxLCBk
ZXF1ZXVlKHF1ZXVlKSk7CisgICAgICAgIEVYUEVDVF9FUShudW1FbGVtZW50cyAtIGkgLSAxLCBx
dWV1ZS5zaXplKCkpOworICAgIH0KKworICAgIEVYUEVDVF9UUlVFKHF1ZXVlLmlzRW1wdHkoKSk7
Cit9CisKK3RlbXBsYXRlPGJvb2wgKCppc0hpZ2hlclByaW9yaXR5KShjb25zdCB1bnNpZ25lZCYs
IGNvbnN0IHVuc2lnbmVkJik+CitzdGF0aWMgYm9vbCBjb21wYXJlTW92ZShjb25zdCBNb3ZlT25s
eSYgbTEsIGNvbnN0IE1vdmVPbmx5JiBtMikKK3sKKyAgICByZXR1cm4gaXNIaWdoZXJQcmlvcml0
eShtMS52YWx1ZSgpLCBtMi52YWx1ZSgpKTsKK30KKworCitURVNUKFdURl9Qcmlvcml0eVF1ZXVl
LCBNb3ZlT25seSkKK3sKKyAgICBQcmlvcml0eVF1ZXVlPE1vdmVPbmx5LCBjb21wYXJlTW92ZTxp
c0xlc3NUaGFuPHVuc2lnbmVkPj4+IHF1ZXVlOworCisgICAgVmVjdG9yPHVuc2lnbmVkPiB2YWx1
ZXMgPSB7IDIzLCA1NCwgNCwgOCwgMSwgMiwgNCwgMCB9OworICAgIFZlY3Rvcjx1bnNpZ25lZD4g
c29ydGVkID0gdmFsdWVzOworICAgIHN0ZDo6c29ydChzb3J0ZWQuYmVnaW4oKSwgc29ydGVkLmVu
ZCgpKTsKKworICAgIGZvciAoYXV0byB2YWx1ZSA6IHZhbHVlcykKKyAgICAgICAgcXVldWUuZW5x
dWV1ZShNb3ZlT25seSh2YWx1ZSkpOworCisgICAgZm9yIChhdXRvIHNvcnRlZFZhbHVlIDogc29y
dGVkKSB7CisgICAgICAgIGF1dG8gdmFsdWUgPSBxdWV1ZS5kZXF1ZXVlKCk7CisgICAgICAgIEVY
UEVDVF9FUShzb3J0ZWRWYWx1ZSwgdmFsdWUudmFsdWUoKSk7CisgICAgfQorfQorCitURVNUKFdU
Rl9Qcmlvcml0eVF1ZXVlLCBEZWNyZWFzZUtleSkKK3sKKyAgICBQcmlvcml0eVF1ZXVlPE1vdmVP
bmx5LCBjb21wYXJlTW92ZTxpc0xlc3NUaGFuPHVuc2lnbmVkPj4+IHF1ZXVlOworCisgICAgVmVj
dG9yPHVuc2lnbmVkPiB2YWx1ZXMgPSB7IDIzLCA1NCwgNCwgOCwgMSwgMiwgNCwgMCB9OworICAg
IFZlY3Rvcjx1bnNpZ25lZD4gc29ydGVkID0gdmFsdWVzOworICAgIHNvcnRlZFszXSA9IDEyOwor
ICAgIHN0ZDo6c29ydChzb3J0ZWQuYmVnaW4oKSwgc29ydGVkLmVuZCgpKTsKKworICAgIGZvciAo
YXV0byB2YWx1ZSA6IHZhbHVlcykKKyAgICAgICAgcXVldWUuZW5xdWV1ZShNb3ZlT25seSh2YWx1
ZSkpOworCisgICAgcXVldWUuZGVjcmVhc2VLZXkoW10gKE1vdmVPbmx5JiBtKSB7CisgICAgICAg
IGlmIChtLnZhbHVlKCkgPT0gOCkgeworICAgICAgICAgICAgbSA9IE1vdmVPbmx5KDEyKTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9KTsKKworICAgIGZvciAoYXV0byBzb3J0ZWRWYWx1ZSA6IHNvcnRlZCkgeworICAgICAg
ICBhdXRvIHZhbHVlID0gcXVldWUuZGVxdWV1ZSgpOworICAgICAgICBFWFBFQ1RfRVEoc29ydGVk
VmFsdWUsIHZhbHVlLnZhbHVlKCkpOworICAgIH0KK30KKworVEVTVChXVEZfUHJpb3JpdHlRdWV1
ZSwgSW5jcmVhc2VLZXkpCit7CisgICAgUHJpb3JpdHlRdWV1ZTxNb3ZlT25seSwgY29tcGFyZU1v
dmU8aXNHcmVhdGVyVGhhbjx1bnNpZ25lZD4+PiBxdWV1ZTsKKworICAgIFZlY3Rvcjx1bnNpZ25l
ZD4gdmFsdWVzID0geyAyMywgNTQsIDQsIDgsIDEsIDIsIDQsIDAgfTsKKyAgICBWZWN0b3I8dW5z
aWduZWQ+IHNvcnRlZCA9IHZhbHVlczsKKyAgICBzb3J0ZWRbM10gPSAxMjsKKyAgICBzdGQ6OnNv
cnQoc29ydGVkLmJlZ2luKCksIHNvcnRlZC5lbmQoKSwgc3RkOjpncmVhdGVyPHVuc2lnbmVkPigp
KTsKKworICAgIGZvciAoYXV0byB2YWx1ZSA6IHZhbHVlcykKKyAgICAgICAgcXVldWUuZW5xdWV1
ZShNb3ZlT25seSh2YWx1ZSkpOworCisgICAgcXVldWUuaW5jcmVhc2VLZXkoW10gKE1vdmVPbmx5
JiBtKSB7CisgICAgICAgIGlmIChtLnZhbHVlKCkgPT0gOCkgeworICAgICAgICAgICAgbSA9IE1v
dmVPbmx5KDEyKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9KTsKKworICAgIGZvciAoYXV0byBzb3J0ZWRWYWx1ZSA6IHNv
cnRlZCkgeworICAgICAgICBhdXRvIHZhbHVlID0gcXVldWUuZGVxdWV1ZSgpOworICAgICAgICBF
WFBFQ1RfRVEoc29ydGVkVmFsdWUsIHZhbHVlLnZhbHVlKCkpOworICAgIH0KK30KKworVEVTVChX
VEZfUHJpb3JpdHlRdWV1ZSwgSXRlcmF0aW9uKQoreworICAgIFByaW9yaXR5UXVldWU8TW92ZU9u
bHksIGNvbXBhcmVNb3ZlPGlzR3JlYXRlclRoYW48dW5zaWduZWQ+Pj4gcXVldWU7CisKKyAgICBW
ZWN0b3I8dW5zaWduZWQ+IHZhbHVlcyA9IHsgMjMsIDU0LCA0LCA4LCAxLCAyLCA0LCAwIH07Cisg
ICAgVmVjdG9yPHVuc2lnbmVkPiBzb3J0ZWQgPSB2YWx1ZXM7CisgICAgc3RkOjpzb3J0KHNvcnRl
ZC5iZWdpbigpLCBzb3J0ZWQuZW5kKCksIHN0ZDo6Z3JlYXRlcjx1bnNpZ25lZD4oKSk7CisKKyAg
ICBmb3IgKGF1dG8gdmFsdWUgOiB2YWx1ZXMpCisgICAgICAgIHF1ZXVlLmVucXVldWUoTW92ZU9u
bHkodmFsdWUpKTsKKworICAgIHZhbHVlcy5jbGVhcigpOworICAgIGZvciAoYXV0byYgZWxlbWVu
dCA6IHF1ZXVlKQorICAgICAgICB2YWx1ZXMuYXBwZW5kKGVsZW1lbnQudmFsdWUoKSk7CisKKyAg
ICBzdGQ6OnNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5lbmQoKSwgc3RkOjpncmVhdGVyPHVu
c2lnbmVkPigpKTsKKyAgICBFWFBFQ1RfRVEodmFsdWVzLnNpemUoKSwgc29ydGVkLnNpemUoKSk7
CisgICAgaWYgKHZhbHVlcy5zaXplKCkgPT0gc29ydGVkLnNpemUoKSkgeworICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIEVYUEVD
VF9FUShzb3J0ZWRbaV0sIHZhbHVlc1tpXSk7CisgICAgfQorfQorCitURVNUKFdURl9Qcmlvcml0
eVF1ZXVlLCBSYW5kb21BY3Rpb25zKQoreworICAgIGNvbnN0IHVpbnQ2NF90IHByaW1lMSA9IDE1
NDg3MjM3OworICAgIGNvbnN0IHVpbnQ2NF90IHByaW1lMiA9IDE3OTQyODI4MzsKKyAgICB1aW50
NjRfdCByYW5kb21OdW1iZXIgPSAxOTQwNTcwOTsKKworICAgIGF1dG8gbmV4dFJhbmRvbSA9IFsm
XSAoKSAtPiB1aW50NjRfdCB7CisgICAgICAgIHJhbmRvbU51bWJlciA9IHJhbmRvbU51bWJlciAq
IHByaW1lMSArIHByaW1lMjsKKyAgICAgICAgcmV0dXJuIHJhbmRvbU51bWJlcjsKKyAgICB9Owor
CisgICAgUHJpb3JpdHlRdWV1ZTx1aW50NjRfdD4gcXVldWU7CisgICAgVmVjdG9yPHVpbnQ2NF90
PiB2YWx1ZXM7CisKKyAgICBlbnVtIENhc2VzIHsKKyAgICAgICAgRW5xdWV1ZSwKKyAgICAgICAg
RGVxdWV1ZSwKKyAgICAgICAgTnVtYmVyT2ZDYXNlcworICAgIH07CisKKyAgICAvLyBTZWVkIHRo
ZSBxdWV1ZS4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKyAgICAg
ICAgYXV0byBudW1iZXIgPSBuZXh0UmFuZG9tKCk7CisgICAgICAgIHF1ZXVlLmVucXVldWUobnVt
YmVyKTsKKyAgICAgICAgdmFsdWVzLmFwcGVuZChudW1iZXIpOworICAgICAgICBFWFBFQ1RfVFJV
RShxdWV1ZS5pc1ZhbGlkSGVhcCgpKTsKKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICBhdXRvIG51bWJlciA9IG5leHRSYW5kb20oKTsK
KyAgICAgICAgc3dpdGNoIChudW1iZXIgJSBOdW1iZXJPZkNhc2VzKSB7CisgICAgICAgIGNhc2Ug
RW5xdWV1ZTogeworICAgICAgICAgICAgcXVldWUuZW5xdWV1ZShudW1iZXIpOworICAgICAgICAg
ICAgdmFsdWVzLmFwcGVuZChudW1iZXIpOworICAgICAgICAgICAgRVhQRUNUX1RSVUUocXVldWUu
aXNWYWxpZEhlYXAoKSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEodmFsdWVzLnNpemUoKSwgcXVl
dWUuc2l6ZSgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAg
Y2FzZSBEZXF1ZXVlOiB7CisgICAgICAgICAgICBFWFBFQ1RfRVEodmFsdWVzLnNpemUoKSwgcXVl
dWUuc2l6ZSgpKTsKKyAgICAgICAgICAgIGlmICh2YWx1ZXMuc2l6ZSgpICE9IHF1ZXVlLnNpemUo
KSkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgaWYgKCF2YWx1ZXMuc2l6
ZSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAvLyBTb3J0IHdp
dGggZ3JlYXRlciBzbyB0aGUgbGFzdCBlbGVtZW50IHNob3VsZCBiZSB0aGUgb25lIHdlIGRlcXVl
dWUuCisgICAgICAgICAgICBzdGQ6OnNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5lbmQoKSwg
c3RkOjpncmVhdGVyPHVpbnQ2NF90PigpKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUSh2YWx1ZXMu
dGFrZUxhc3QoKSwgcXVldWUuZGVxdWV1ZSgpKTsKKworICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgRVhQRUNUX1RSVUUocXVldWUuaXNWYWxp
ZEhlYXAoKSk7CisgICAgfQorfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>