<?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>152691</bug_id>
          
          <creation_ts>2016-01-04 09:44:21 -0800</creation_ts>
          <short_desc>[JSC] Iterating over a Set/Map is too slow</short_desc>
          <delta_ts>2016-01-10 21:54:25 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=152422</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikita Vasilyev">nvasilyev</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>bburg</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1152346</commentid>
    <comment_count>0</comment_count>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2016-01-04 09:44:21 -0800</bug_when>
    <thetext>http://jsperf.com/linked-list-vs-arraw-iteration-speed/3

Iterating over a Set/Map is approximately 12 times slower
than iterating over a linked list and over 40 times slower
than an array.

Can somebody explain to me why is that the case?
Can it be improved?

In Web Inspector we need to use ordered maps for
Bug 152422 &quot;Web Inspector: WebInspector.Object.addEventListener is O(n), make it O(1)&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1152550</commentid>
    <comment_count>1</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-01-04 15:37:31 -0800</bug_when>
    <thetext>I guess we can improve this by making Set.prototype.forEach written in JS.
Currently, it is implemented in C++, it avoid inlining the given callback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1152551</commentid>
    <comment_count>2</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2016-01-04 15:38:30 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; I guess we can improve this by making Set.prototype.forEach written in JS.
&gt; Currently, it is implemented in C++, it avoid inlining the given callback.

If it&apos;s not too much work, it sounds worth a try!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1152575</commentid>
    <comment_count>3</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-04 16:48:22 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; I guess we can improve this by making Set.prototype.forEach written in JS.
&gt; Currently, it is implemented in C++, it avoid inlining the given callback.

But if you have many calls to Set.prototype.forEach, we&apos;re not going
to inline the call.

Is there a fast way to get an array of the elements in the set?
That way we could just iterate over that array?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1152580</commentid>
    <comment_count>4</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2016-01-04 16:56:08 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #1)
&gt; &gt; I guess we can improve this by making Set.prototype.forEach written in JS.
&gt; &gt; Currently, it is implemented in C++, it avoid inlining the given callback.
&gt; 
&gt; But if you have many calls to Set.prototype.forEach, we&apos;re not going
&gt; to inline the call.

Aww shucks, we happen to do that ;-) Can&apos;t DFG create multiple inlined versions of the same function? That would be super useful for lots of megamorphic library methods.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1152596</commentid>
    <comment_count>5</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-01-04 18:13:52 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #1)
&gt; &gt; I guess we can improve this by making Set.prototype.forEach written in JS.
&gt; &gt; Currently, it is implemented in C++, it avoid inlining the given callback.
&gt; 
&gt; But if you have many calls to Set.prototype.forEach, we&apos;re not going
&gt; to inline the call.
&gt; 
&gt; Is there a fast way to get an array of the elements in the set?
&gt; That way we could just iterate over that array?

I created the small patch and measure the bottlenecks with Linux perf.
The test script, https://gist.github.com/Constellation/b747d897066ebbc567c8
And I executed the code with `jsc lodash.min.js benchmark.js above-code.js`.

And collect the perf result with `perf record jsc lodash.min.js benchmark.js above-code.js`.
Set forEach x 13,138 ops/sec ±0.21% (66 runs sampled)

And the perf report shows the following.

Samples: 23K of event &apos;cycles&apos;, Event count (approx.): 21446074385                                                                                                                                                                  
 34.04%  jsc  libjavascriptcoregtk-4.0.so.18.3.1  [.] JSC::Interpreter::execute(JSC::CallFrameClosure&amp;)                                                                                                                             
 20.48%  jsc  libjavascriptcoregtk-4.0.so.18.3.1  [.] vmEntryToJavaScript                                                                                                                                                           
  9.80%  jsc  libjavascriptcoregtk-4.0.so.18.3.1  [.] JSC::JITCode::execute(JSC::VM*, JSC::ProtoCallFrame*)                                                                                                                         
  7.95%  jsc  libjavascriptcoregtk-4.0.so.18.3.1  [.] JSC::setProtoFuncForEach(JSC::ExecState*)                                                                                                                                     
  5.65%  jsc  perf-22854.map                      [.] 0x00007f5d2c204a6f                                                                                                                                                            
  2.76%  jsc  libjavascriptcoregtk-4.0.so.18.3.1  [.] JSC::JSLock::currentThreadIsHoldingLock()                                                                                                                                     
  0.69%  jsc  libjavascriptcoregtk-4.0.so.18.3.1  [.] JSC::FTL::JITCode::executableAddressAtOffset(unsigned long)                                                                                                                   
  0.68%  jsc  libjavascriptcoregtk-4.0.so.18.3.1  [.] pthread_self@plt                                                                                                                                                              
  0.65%  jsc  libjavascriptcoregtk-4.0.so.18.3.1  [.] JSC::Interpreter::startSampling()                                                                                                                                             
  0.61%  jsc  libpthread-2.19.so                  [.] pthread_self                                                                                                                                                                  
  0.60%  jsc  libjavascriptcoregtk-4.0.so.18.3.1  [.] JSC::Interpreter::stopSampling()                                                                                                                                              
  0.60%  jsc  libjavascriptcoregtk-4.0.so.18.3.1  [.] _ZN3JSC11Interpreter12stopSamplingEv@plt                                                                                                                                      
  0.54%  jsc  libjavascriptcoregtk-4.0.so.18.3.1  [.] _ZN3JSC7JITCode7executeEPNS_2VMEPNS_14ProtoCallFrameE@plt                                                                                                                     
  0.52%  jsc  libjavascriptcoregtk-4.0.so.18.3.1  [.] _ZN3JSC6JSLock26currentThreadIsHoldingLockEv@plt                                                                                                                              
  0.38%  jsc  libjavascriptcoregtk-4.0.so.18.3.1  [.] _ZN3JSC11Interpreter7executeERNS_16CallFrameClosureE@plt                                                                                                                      
  0.29%  jsc  libjavascriptcoregtk-4.0.so.18.3.1  [.] _ZN3JSC11Interpreter13startSamplingEv@plt                                                                                                                                     
  0.25%  jsc  libjavascriptcoregtk-4.0.so.18.3.1  [.] JSC::Lexer&lt;unsigned char&gt;::lex(JSC::JSToken*, unsigned int, bool)

We can see that C++ -&gt; JS call becomes large performance overhead.
So, I&apos;ve created the small change, adding builtin&apos;s Set.prototype.forEach. It results the following,

Set forEach x 20,827 ops/sec ±3.69% (40 runs sampled)

Samples: 23K of event &apos;cycles&apos;, Event count (approx.): 21255691651                                                                                                                                                                  
 62.91%  jsc  perf-22890.map                      [.] 0x00007fd117c0a3b9                                                                                                                                                            
 24.89%  jsc  libjavascriptcoregtk-4.0.so.18.3.1  [.] JSC::privateFuncSetIteratorNext(JSC::ExecState*)                                                                                                                              
  0.29%  jsc  libjavascriptcoregtk-4.0.so.18.3.1  [.] JSC::CodeBlock::updateAllPredictionsAndCountLiveness(unsigned int&amp;, unsigned int&amp;)                                                                                            
  0.24%  jsc  [vdso]                              [.] 0x00000000000008e8                                                                                                                                                            
  0.22%  jsc  libjavascriptcoregtk-4.0.so.18.3.1  [.] JSC::CodeBlock::predictedMachineCodeSize()                                                                                                                                    
  0.16%  jsc  libjavascriptcoregtk-4.0.so.18.3.1  [.] WTF::MetaAllocator::currentStatistics()                                                                                                                                       
  0.15%  jsc  libjavascriptcoregtk-4.0.so.18.3.1  [.] JSC::Lexer&lt;unsigned char&gt;::lex(JSC::JSToken*, unsigned int, bool)

The one of the bottlenecks was C++ -&gt; JS calls. It can be eliminated and now privateFuncSetIteratorNext (SetIterator&apos;s next op) becomes the main contribution.

It&apos;s still slow. But at least, dropping C++ -&gt; JS calls improve the performance; 1.6x.

$ WebKitBuild/set-map-old/Release/bin/jsc tmp/lodash.min.js tmp/benchmark.js tmp/hello.js
Linked List x 212,160 ops/sec ±0.39% (66 runs sampled)
Array x 376,348 ops/sec ±0.21% (66 runs sampled)
Array forEach x 20,054 ops/sec ±4.26% (49 runs sampled)
Set forEach x 13,294 ops/sec ±0.20% (67 runs sampled)
Fastest is Array

$ WebKitBuild/set-map/Release/bin/jsc tmp/lodash.min.js tmp/benchmark.js tmp/hello.js
Linked List x 210,151 ops/sec ±0.65% (66 runs sampled)
Array x 370,408 ops/sec ±0.51% (66 runs sampled)
Array forEach x 20,345 ops/sec ±4.35% (46 runs sampled)
Set forEach x 21,007 ops/sec ±3.51% (40 runs sampled)
Fastest is Array</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1152600</commentid>
    <comment_count>6</comment_count>
      <attachid>268254</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-01-04 18:17:08 -0800</bug_when>
    <thetext>Created attachment 268254
Patch

First attempt, this patch just intends to drop C++ -&gt; JS calls</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1152604</commentid>
    <comment_count>7</comment_count>
      <attachid>268254</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-01-04 18:21:34 -0800</bug_when>
    <thetext>Comment on attachment 268254
Patch

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

&gt; Source/JavaScriptCore/builtins/MapPrototype.js:38
&gt; +    var value = [ undefined, undefined ];

This is very trickly part. When using the usual generator&apos;s interface (next() returns an object), since the implementaiton is currently written in C++, we cannot eliminate the object allocation and it incurs large overhead.
So for now, I took this trickly hack. Create the placeholder and pass it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1152605</commentid>
    <comment_count>8</comment_count>
      <attachid>268254</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-01-04 18:23:46 -0800</bug_when>
    <thetext>Comment on attachment 268254
Patch

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

&gt; Source/JavaScriptCore/runtime/SetPrototype.cpp:191
&gt; +    return JSValue::encode(createIteratorResultObject(exec, jsUndefined(), true));

oops. drop this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1152611</commentid>
    <comment_count>9</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-01-04 18:33:18 -0800</bug_when>
    <thetext>Seeing the dump, since the iteration is not enough, it seems that forEach is not DFG compiled.
So Array.prototype.forEach and Set.prototype.forEach becomes comparable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1152615</commentid>
    <comment_count>10</comment_count>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2016-01-04 18:38:27 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; ...
&gt; Is there a fast way to get an array of the elements in the set?
&gt; That way we could just iterate over that array?

Array.from(set) works but it&apos;s 3 times slower than Set.prototype.forEach.
I updated the jsperf test: http://jsperf.com/linked-list-vs-arraw-iteration-speed/4

On a related note, `for (item of set)` is also slower than set.forEach:
http://jsperf.com/iterating-over-a-set-vs-iterating-over-an-array/2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1152618</commentid>
    <comment_count>11</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-01-04 19:01:41 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #3)
&gt; &gt; ...
&gt; &gt; Is there a fast way to get an array of the elements in the set?
&gt; &gt; That way we could just iterate over that array?
&gt; 
&gt; Array.from(set) works but it&apos;s 3 times slower than Set.prototype.forEach.
&gt; I updated the jsperf test:
&gt; http://jsperf.com/linked-list-vs-arraw-iteration-speed/4
&gt; 
&gt; On a related note, `for (item of set)` is also slower than set.forEach:
&gt; http://jsperf.com/iterating-over-a-set-vs-iterating-over-an-array/2

https://gist.github.com/Constellation/b747d897066ebbc567c8

[X / _ / X:gpgpu]$ WebKitBuild/set-map/Release/bin/jsc tmp/lodash.min.js tmp/benchmark.js tmp/hello.js
Linked List x 211,788 ops/sec ±0.24% (161 runs sampled)
Array x 376,235 ops/sec ±0.17% (162 runs sampled)
Array forEach x 20,667 ops/sec ±2.42% (149 runs sampled)
Array for-of x 16,512 ops/sec ±0.48% (160 runs sampled)
Set forEach x 20,365 ops/sec ±1.18% (136 runs sampled)
Set for-of x 4,705 ops/sec ±0.47% (122 runs sampled)
Fastest is Array

It seems that the patched Set.prototype.forEach becomes comparable to Array.prototype.forEach.
And Set &amp; for-of is significantly slower than the others. I guess it is due to the object allocation for the iterator result, but anyway, we need to measure the bottleneck.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1152620</commentid>
    <comment_count>12</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-01-04 19:04:03 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; And Set &amp; for-of is significantly slower than the others. I guess it is due
&gt; to the object allocation for the iterator result, but anyway, we need to
&gt; measure the bottleneck.

Yeah, perf report shows that createIteratorResultObject is the bottleneck for Set &amp; for-of.

Samples: 108K of event &apos;cycles&apos;, Event count (approx.): 95529273748                                                                                                                                                                 
 18.02%  jsc  libjavascriptcoregtk-4.0.so.18.3.1  [.] JSC::createIteratorResultObject(JSC::ExecState*, JSC::JSValue, bool)                                                                                                         ◆
 15.68%  jsc  jsc                                 [.] JSC::JSObject::putDirect(JSC::VM&amp;, JSC::PropertyName, JSC::JSValue, unsigned int)                                                                                            ▒
 14.18%  jsc  libjavascriptcoregtk-4.0.so.18.3.1  [.] JSC::PrototypeMap::emptyObjectStructureForPrototype(JSC::JSObject*, unsigned int)                                                                                            ▒
 13.40%  jsc  perf-25420.map                      [.] 0x00007fce158006a1                                                                                                                                                           ▒
  6.79%  jsc  libjavascriptcoregtk-4.0.so.18.3.1  [.] JSC::StructureTransitionTable::get(WTF::UniquedStringImpl*, unsigned int) const                                                                                              ▒
  6.64%  jsc  libjavascriptcoregtk-4.0.so.18.3.1  [.] WTF::HashMap&lt;std::pair&lt;WTF::UniquedStringImpl*, unsigned int&gt;, JSC::Weak&lt;JSC::Structure&gt;, JSC::StructureTransitionTable::Hash, WTF::HashTraits&lt;std::pair&lt;WTF::UniquedStringIm▒
  4.94%  jsc  libjavascriptcoregtk-4.0.so.18.3.1  [.] JSC::MarkedBlock::sweep(JSC::MarkedBlock::SweepMode)                                                                                                                         ▒
  4.83%  jsc  libjavascriptcoregtk-4.0.so.18.3.1  [.] JSC::SetIteratorPrototypeFuncNext(JSC::ExecState*)                                                                                                                           ▒
  2.12%  jsc  libjavascriptcoregtk-4.0.so.18.3.1  [.] JSC::Structure::addPropertyTransitionToExistingStructureImpl(JSC::Structure*, WTF::UniquedStringImpl*, unsigned int, int&amp;)                                                   ▒
  1.69%  jsc  jsc                                 [.] JSC::Structure::outOfLineCapacity() const                                                                                                                                    ▒
  0.56%  jsc  libjavascriptcoregtk-4.0.so.18.3.1  [.] _ZNK3JSC24StructureTransitionTable3getEPN3WTF17UniquedStringImplEj@plt                                                                                                       ▒
  0.52%  jsc  jsc                                 [.] _ZN3JSC9Structure40addPropertyTransitionToExistingStructureEPS0_NS_12PropertyNameEjRi@plt                                                                                    ▒
  0.52%  jsc  libjavascriptcoregtk-4.0.so.18.3.1  [.] JSC::MarkedAllocator::allocateSlowCase(unsigned long)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1152621</commentid>
    <comment_count>13</comment_count>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2016-01-04 19:18:13 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; (In reply to comment #3)
&gt; &gt; &gt; ...
&gt; &gt; &gt; Is there a fast way to get an array of the elements in the set?
&gt; &gt; &gt; That way we could just iterate over that array?
&gt; &gt; 
&gt; &gt; Array.from(set) works but it&apos;s 3 times slower than Set.prototype.forEach.
&gt; &gt; I updated the jsperf test:
&gt; &gt; http://jsperf.com/linked-list-vs-arraw-iteration-speed/4
&gt; &gt; 
&gt; &gt; On a related note, `for (item of set)` is also slower than set.forEach:
&gt; &gt; http://jsperf.com/iterating-over-a-set-vs-iterating-over-an-array/2
&gt; 
&gt; https://gist.github.com/Constellation/b747d897066ebbc567c8
&gt; 
&gt; [X / _ / X:gpgpu]$ WebKitBuild/set-map/Release/bin/jsc tmp/lodash.min.js
&gt; tmp/benchmark.js tmp/hello.js
&gt; Linked List x 211,788 ops/sec ±0.24% (161 runs sampled)
&gt; Array x 376,235 ops/sec ±0.17% (162 runs sampled)
&gt; Array forEach x 20,667 ops/sec ±2.42% (149 runs sampled)
&gt; Array for-of x 16,512 ops/sec ±0.48% (160 runs sampled)
&gt; Set forEach x 20,365 ops/sec ±1.18% (136 runs sampled)
&gt; Set for-of x 4,705 ops/sec ±0.47% (122 runs sampled)
&gt; Fastest is Array
&gt; 
&gt; It seems that the patched Set.prototype.forEach becomes comparable to
&gt; Array.prototype.forEach.
&gt; And Set &amp; for-of is significantly slower than the others. I guess it is due
&gt; to the object allocation for the iterator result, but anyway, we need to
&gt; measure the bottleneck.

First of all, thanks a lot for looking into this issue!

Set forEach is still 10 times slower than Linked List. While
an improvement, I&apos;m afraid for my particular task it is still
not fast enough. I&apos;m going to use a custom made ordered set
that is backed by a Linked List to preserve the order:
https://bugs.webkit.org/show_bug.cgi?id=152422#c33</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1152622</commentid>
    <comment_count>14</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-01-04 19:47:31 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; First of all, thanks a lot for looking into this issue!
&gt; 
&gt; Set forEach is still 10 times slower than Linked List. While
&gt; an improvement, I&apos;m afraid for my particular task it is still
&gt; not fast enough. I&apos;m going to use a custom made ordered set
&gt; that is backed by a Linked List to preserve the order:
&gt; https://bugs.webkit.org/show_bug.cgi?id=152422#c33

OK, and thank you for filing this!
We should make it as fast as user-implemented one :D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1152623</commentid>
    <comment_count>15</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-01-04 19:52:46 -0800</bug_when>
    <thetext>With pre-baked Structure for the iterator result object, the performance is significantly improved.

Linked List x 204,093 ops/sec ±0.43% (160 runs sampled)
Array x 366,205 ops/sec ±0.43% (160 runs sampled)
Array forEach x 20,080 ops/sec ±2.27% (147 runs sampled)
Array for-of x 16,234 ops/sec ±1.07% (158 runs sampled)
Set forEach x 20,026 ops/sec ±1.18% (136 runs sampled)
Set for-of x 12,200 ops/sec ±0.41% (159 runs sampled)
Fastest is Array

In the long term, we should emit the iterator result in JS to allow object allocation elimination. But optimizing createIteratorResultObject is still useful.

After adding the tests, I&apos;ll upload the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1152717</commentid>
    <comment_count>16</comment_count>
      <attachid>268280</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-01-05 08:06:51 -0800</bug_when>
    <thetext>Created attachment 268280
Patch

Without xcodeproj change since now I don&apos;t have OSX laptop. In weekend, I&apos;ll add it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1152737</commentid>
    <comment_count>17</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-05 09:28:56 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; (In reply to comment #1)
&gt; &gt; &gt; I guess we can improve this by making Set.prototype.forEach written in JS.
&gt; &gt; &gt; Currently, it is implemented in C++, it avoid inlining the given callback.
&gt; &gt; 
&gt; &gt; But if you have many calls to Set.prototype.forEach, we&apos;re not going
&gt; &gt; to inline the call.
&gt; 
&gt; Aww shucks, we happen to do that ;-) Can&apos;t DFG create multiple inlined
&gt; versions of the same function? That would be super useful for lots of
&gt; megamorphic library methods.

We would definitely inline &quot;forEach&quot; into the call site if it&apos;s not too big.
But I don&apos;t think we&apos;ll inline the function passed as an argument into
forEach (with sufficiently many calls to forEach with different functions).
Hopefully I&apos;m wrong here, but some simple testing could tell us the answer.
This would be a useful code pattern to detect inside the DFG&apos;s inliner if we don&apos;t already.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1152738</commentid>
    <comment_count>18</comment_count>
      <attachid>268288</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-05 09:37:13 -0800</bug_when>
    <thetext>Created attachment 268288
test

Test program demonstrating that we probably won&apos;t inline all calls
into the inlined forEach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1152741</commentid>
    <comment_count>19</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-01-05 09:47:10 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; Created attachment 268288 [details]
&gt; test
&gt; 
&gt; Test program demonstrating that we probably won&apos;t inline all calls
&gt; into the inlined forEach.

Yeah. Nice catch!
Seeing the perf result, the bottleneck in Set#forEach/Set+for-of compared to Array#forEach/Set+for-of was

1. C++ -&gt; JS calls
2. iterator result object allocations

The uploaded patch improves the performance by fixing the above 2 problems and the result of Set#forEach becomes comparable to Array#forEach.
But it is still slower than for-iteration. It seems that callback in forEach is not inlined in both (Array#forEach/Set#forEach) cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1152755</commentid>
    <comment_count>20</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-05 10:45:01 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; Created attachment 268288 [details]
&gt; test
&gt; 
&gt; Test program demonstrating that we probably won&apos;t inline all calls
&gt; into the inlined forEach.

So the FTL will do this form of inlining. But it relies on the IC
from the third tier compilation to give it information about inlining
the argument to forEach. It does this because forEach gets inlined into
the call site in the third tier, then, after that inlining, we can tell
the function passed into forEach is monomorphic for that particular compilation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1152756</commentid>
    <comment_count>21</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2016-01-05 10:47:24 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; (In reply to comment #18)
&gt; &gt; Created attachment 268288 [details]
&gt; &gt; test
&gt; &gt; 
&gt; &gt; Test program demonstrating that we probably won&apos;t inline all calls
&gt; &gt; into the inlined forEach.
&gt; 
&gt; So the FTL will do this form of inlining. But it relies on the IC
&gt; from the third tier compilation to give it information about inlining
&gt; the argument to forEach. It does this because forEach gets inlined into
&gt; the call site in the third tier, then, after that inlining, we can tell
&gt; the function passed into forEach is monomorphic for that particular
&gt; compilation.

Now if only we had a way to visualize compilation levels and depots directly in the Inspector.. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1152762</commentid>
    <comment_count>22</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-05 11:01:27 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; (In reply to comment #20)
&gt; &gt; (In reply to comment #18)
&gt; &gt; &gt; Created attachment 268288 [details]
&gt; &gt; &gt; test
&gt; &gt; &gt; 
&gt; &gt; &gt; Test program demonstrating that we probably won&apos;t inline all calls
&gt; &gt; &gt; into the inlined forEach.
&gt; &gt; 
&gt; &gt; So the FTL will do this form of inlining. But it relies on the IC
&gt; &gt; from the third tier compilation to give it information about inlining
&gt; &gt; the argument to forEach. It does this because forEach gets inlined into
&gt; &gt; the call site in the third tier, then, after that inlining, we can tell
&gt; &gt; the function passed into forEach is monomorphic for that particular
&gt; &gt; compilation.
&gt; 
&gt; Now if only we had a way to visualize compilation levels and depots directly
&gt; in the Inspector.. :)

I think the slowness here is still mostly because the ES6 iteration protocol.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1153750</commentid>
    <comment_count>23</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-01-07 19:37:53 -0800</bug_when>
    <thetext>In this weekend, I&apos;ll return home and can touch my OSX laptop.
So, I&apos;ll add files to xcodeproj and upload the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154151</commentid>
    <comment_count>24</comment_count>
      <attachid>268623</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-01-09 10:14:32 -0800</bug_when>
    <thetext>Created attachment 268623
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154283</commentid>
    <comment_count>25</comment_count>
      <attachid>268623</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-10 15:30:44 -0800</bug_when>
    <thetext>Comment on attachment 268623
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154313</commentid>
    <comment_count>26</comment_count>
      <attachid>268623</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-10 21:54:19 -0800</bug_when>
    <thetext>Comment on attachment 268623
Patch

Clearing flags on attachment: 268623

Committed r194838: &lt;http://trac.webkit.org/changeset/194838&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154314</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-10 21:54:25 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268254</attachid>
            <date>2016-01-04 18:17:08 -0800</date>
            <delta_ts>2016-01-05 08:06:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-152691-20160105111634.patch</filename>
            <type>text/plain</type>
            <size>24965</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk0NTQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
NjEwZmYyNTZlMTQ0NmU0MDQxNjM4ZTcwNGVjOGU0OWUzZTg0YmM3Li4yZWRmNzM5YTVmMzRlYmQw
ZDFjMzM1ZDJhMzhiMjk4ODJhNTgwMTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNSBAQAorMjAxNi0wMS0wNCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBJdGVyYXRpbmcgb3ZlciBhIFNldC9NYXAg
aXMgdG9vIHNsb3cKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1MjY5MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogYnVpbHRpbnMvTWFwUHJvdG90eXBlLmpz
OiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUu
aC4KKyAgICAgICAgKGZvckVhY2gpOgorICAgICAgICAqIGJ1aWx0aW5zL1NldFByb3RvdHlwZS5q
czogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBl
LmguCisgICAgICAgIChmb3JFYWNoKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vbklkZW50aWZp
ZXJzLmg6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChK
U0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0KToKKyAgICAgICAgKiBydW50aW1lL01hcFByb3RvdHlw
ZS5jcHA6CisgICAgICAgIChKU0M6Ok1hcFByb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlTbG90KToK
KyAgICAgICAgKEpTQzo6cHJpdmF0ZUZ1bmNJc01hcCk6CisgICAgICAgIChKU0M6OnByaXZhdGVG
dW5jTWFwSXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpwcml2YXRlRnVuY01hcEl0ZXJhdG9yTmV4
dCk6CisgICAgICAgIChKU0M6Ok1hcFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjptYXBQcm90b0Z1bmNGb3JFYWNoKTogRGVsZXRlZC4KKyAgICAgICAg
KiBydW50aW1lL01hcFByb3RvdHlwZS5oOgorICAgICAgICAqIHJ1bnRpbWUvU2V0UHJvdG90eXBl
LmNwcDoKKyAgICAgICAgKEpTQzo6U2V0UHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgor
ICAgICAgICAoSlNDOjpwcml2YXRlRnVuY0lzU2V0KToKKyAgICAgICAgKEpTQzo6cHJpdmF0ZUZ1
bmNTZXRJdGVyYXRvcik6CisgICAgICAgIChKU0M6OnByaXZhdGVGdW5jU2V0SXRlcmF0b3JOZXh0
KToKKyAgICAgICAgKEpTQzo6U2V0UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OnNldFByb3RvRnVuY0ZvckVhY2gpOiBEZWxldGVkLgorICAgICAgICAq
IHJ1bnRpbWUvU2V0UHJvdG90eXBlLmg6CisKIDIwMTYtMDEtMDQgIEZpbGlwIFBpemxvICA8ZnBp
emxvQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBkaXNhYmxlIEZUTCBCMyBmb3Ig
bm93LiBJIGRpZG4ndCBpbnRlbmQgdG8gZW5hYmxlIGl0IHlldC4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
TWFrZUxpc3RzLnR4dAppbmRleCAzZDViNDlmOGQ1YzMyYWFmZTY0YzViZjc5ZDk2ZmM2Y2RkYzM4
NmNkLi4zZTIzNTYyNmNkNzY1ZWYwNGRmZmVhYjQ3YTU0M2E1YWVmNmFkMWZiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC03ODUsNiArNzg1LDcgQEAgc2V0KEphdmFTY3Jp
cHRDb3JlX09CSkVDVF9MVVRfU09VUkNFUwogICAgIHJ1bnRpbWUvSlNPTk9iamVjdC5jcHAKICAg
ICBydW50aW1lL0pTUHJvbWlzZUNvbnN0cnVjdG9yLmNwcAogICAgIHJ1bnRpbWUvSlNQcm9taXNl
UHJvdG90eXBlLmNwcAorICAgIHJ1bnRpbWUvTWFwUHJvdG90eXBlLmNwcAogICAgIHJ1bnRpbWUv
TW9kdWxlTG9hZGVyT2JqZWN0LmNwcAogICAgIHJ1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuY3Bw
CiAgICAgcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3BwCkBAIC03OTIsNiArNzkzLDcgQEAgc2V0
KEphdmFTY3JpcHRDb3JlX09CSkVDVF9MVVRfU09VUkNFUwogICAgIHJ1bnRpbWUvUmVmbGVjdE9i
amVjdC5jcHAKICAgICBydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAogICAgIHJ1bnRpbWUv
UmVnRXhwUHJvdG90eXBlLmNwcAorICAgIHJ1bnRpbWUvU2V0UHJvdG90eXBlLmNwcAogICAgIHJ1
bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwCiAgICAgcnVudGltZS9TdHJpbmdJdGVyYXRvclBy
b3RvdHlwZS5jcHAKICAgICBydW50aW1lL1N5bWJvbENvbnN0cnVjdG9yLmNwcApAQCAtMTI0Miw2
ICsxMjQ0LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX0JVSUxUSU5TX1NPVVJDRVMKICAgICAke0pB
VkFTQ1JJUFRDT1JFX0RJUn0vYnVpbHRpbnMvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0
LmpzCiAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2J1aWx0aW5zL0ludGVybmFsUHJvbWlzZUNv
bnN0cnVjdG9yLmpzCiAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2J1aWx0aW5zL0l0ZXJhdG9y
UHJvdG90eXBlLmpzCisgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2J1aWx0aW5zL01hcFByb3Rv
dHlwZS5qcwogICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9idWlsdGlucy9Nb2R1bGVMb2FkZXJP
YmplY3QuanMKICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vYnVpbHRpbnMvTnVtYmVyUHJvdG90
eXBlLmpzCiAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2J1aWx0aW5zL09iamVjdENvbnN0cnVj
dG9yLmpzCkBAIC0xMjQ5LDYgKzEyNTIsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfQlVJTFRJTlNf
U09VUkNFUwogICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9idWlsdGlucy9Qcm9taXNlT3BlcmF0
aW9ucy5qcwogICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9idWlsdGlucy9Qcm9taXNlUHJvdG90
eXBlLmpzCiAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2J1aWx0aW5zL1JlZmxlY3RPYmplY3Qu
anMKKyAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vYnVpbHRpbnMvU2V0UHJvdG90eXBlLmpzCiAg
ICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2J1aWx0aW5zL1N0cmluZ0NvbnN0cnVjdG9yLmpzCiAg
ICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2J1aWx0aW5zL1N0cmluZ0l0ZXJhdG9yUHJvdG90eXBl
LmpzCiAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2J1aWx0aW5zL1N0cmluZ1Byb3RvdHlwZS5q
cwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL01hcFByb3RvdHlw
ZS5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9NYXBQcm90b3R5cGUuanMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uM2IwMDliMWFkMTEwMGEzYWIxN2JlNTM4NTQ2OWMxNDJiNjY0YjFkZgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9NYXBQcm90b3R5cGUu
anMKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBZdXN1a2UgU3V6
dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCitmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrIC8qLCB0aGlzQXJnICov
KQoreworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIGlmICghQGlzTWFwKHRoaXMpKQorICAgICAg
ICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiTWFwIG9wZXJhdGlvbiBjYWxsZWQgb24gbm9uLU1hcCBv
YmplY3QiKTsKKworICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpCisgICAg
ICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJNYXAucHJvdG90eXBlLmZvckVhY2ggY2FsbGJhY2sg
bXVzdCBiZSBhIGZ1bmN0aW9uIik7CisKKyAgICB2YXIgdGhpc0FyZyA9IGFyZ3VtZW50cy5sZW5n
dGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkOworICAgIHZhciBpdGVyYXRvciA9IEBN
YXBJdGVyYXRvcih0aGlzKTsKKyAgICB2YXIgdmFsdWUgPSBbIHVuZGVmaW5lZCwgdW5kZWZpbmVk
IF07CisgICAgZm9yICg7OykgeworICAgICAgICBpZiAoQG1hcEl0ZXJhdG9yTmV4dC5AY2FsbChp
dGVyYXRvciwgdmFsdWUpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhbGxiYWNrLkBj
YWxsKHRoaXNBcmcsIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdGhpcyk7CisgICAgfQorfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL1NldFByb3RvdHlwZS5qcyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9TZXRQcm90b3R5cGUuanMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
OGNmY2ZjN2ZjY2IxYWVhNDU1M2Q0YTE1ZjQ5NzBiNmJmMGE0OTA4ZgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9TZXRQcm90b3R5cGUuanMKQEAgLTAs
MCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBZdXN1a2UgU3V6dWtpIDx1dGF0
YW5lLnRlYUBnbWFpbC5jb20+LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCitmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrIC8qLCB0aGlzQXJnICovKQoreworICAg
ICJ1c2Ugc3RyaWN0IjsKKworICAgIGlmICghQGlzU2V0KHRoaXMpKQorICAgICAgICB0aHJvdyBu
ZXcgQFR5cGVFcnJvcigiU2V0IG9wZXJhdGlvbiBjYWxsZWQgb24gbm9uLVNldCBvYmplY3QiKTsK
KworICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpCisgICAgICAgIHRocm93
IG5ldyBAVHlwZUVycm9yKCJTZXQucHJvdG90eXBlLmZvckVhY2ggY2FsbGJhY2sgbXVzdCBiZSBh
IGZ1bmN0aW9uIik7CisKKyAgICB2YXIgdGhpc0FyZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8g
YXJndW1lbnRzWzFdIDogdW5kZWZpbmVkOworICAgIHZhciBpdGVyYXRvciA9IEBTZXRJdGVyYXRv
cih0aGlzKTsKKyAgICB2YXIgdmFsdWUgPSBbIHVuZGVmaW5lZCBdOworICAgIGZvciAoOzspIHsK
KyAgICAgICAgaWYgKEBzZXRJdGVyYXRvck5leHQuQGNhbGwoaXRlcmF0b3IsIHZhbHVlKSkKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYWxsYmFjay5AY2FsbCh0aGlzQXJnLCB2YWx1ZVsw
XSwgdmFsdWVbMF0sIHRoaXMpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oCmluZGV4IGI1MTAyOGY0MDE0YzU4M2U5Y2Mx
YmE4YTM4OGYwYjFmZWQ5MzI1YWEuLjBjNWE4YTA4MmQ0M2M5NGY3ZTdmNGVhYmQ5ZTk0MjY2YmRj
NTUyZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklk
ZW50aWZpZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRl
bnRpZmllcnMuaApAQCAtMzYyLDYgKzM2MiwxMiBAQAogICAgIG1hY3JvKGlzQm91bmRGdW5jdGlv
bikgXAogICAgIG1hY3JvKGhhc0luc3RhbmNlQm91bmRGdW5jdGlvbikgXAogICAgIG1hY3JvKGlu
c3RhbmNlT2YpIFwKKyAgICBtYWNybyhpc1NldCkgXAorICAgIG1hY3JvKGlzTWFwKSBcCisgICAg
bWFjcm8oU2V0SXRlcmF0b3IpIFwKKyAgICBtYWNybyhzZXRJdGVyYXRvck5leHQpIFwKKyAgICBt
YWNybyhNYXBJdGVyYXRvcikgXAorICAgIG1hY3JvKG1hcEl0ZXJhdG9yTmV4dCkgXAogCiAKIG5h
bWVzcGFjZSBKU0MgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuY3BwCmluZGV4IDdkODk3M2QzZGMyZjlhNDQ1ZjU3ODgwMmUyOTBkZmM5MDg4NDli
MGEuLmM2N2U3NzdmNDlmMTk5MTA0MTU0M2NiYzE5YWYzZjBlZDIxMzkwMmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKQEAgLTU1OCw2
ICs1NTgsMTQgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6aW5pdChWTSYgdm0pCiAgICAgICAgIEds
b2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5Qcm9taXNlUHJpdmF0ZU5hbWUsIHBy
b21pc2VDb25zdHJ1Y3RvciwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAogICAg
ICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+SW50ZXJuYWxQcm9taXNl
UHJpdmF0ZU5hbWUsIGludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLCBEb250RW51bSB8IERvbnRE
ZWxldGUgfCBSZWFkT25seSksCiAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0
eU5hbWVzLT5wcm9taXNlUGVuZGluZ1ByaXZhdGVOYW1lLCBqc051bWJlcihzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oSlNQcm9taXNlOjpTdGF0dXM6OlBlbmRpbmcpKSwgRG9udEVudW0gfCBEb250RGVs
ZXRlIHwgUmVhZE9ubHkpLAorCisgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0
eU5hbWVzLT5pc1NldFByaXZhdGVOYW1lLCBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIHRoaXMsIDEs
IFN0cmluZygpLCBwcml2YXRlRnVuY0lzU2V0KSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVh
ZE9ubHkpLAorICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+U2V0
SXRlcmF0b3JQcml2YXRlTmFtZSwgSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCB0aGlzLCAxLCBTdHJp
bmcoKSwgcHJpdmF0ZUZ1bmNTZXRJdGVyYXRvciksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJl
YWRPbmx5KSwKKyAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKHZtLnByb3BlcnR5TmFtZXMtPnNl
dEl0ZXJhdG9yTmV4dFByaXZhdGVOYW1lLCBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIHRoaXMsIDAs
IFN0cmluZygpLCBwcml2YXRlRnVuY1NldEl0ZXJhdG9yTmV4dCksIERvbnRFbnVtIHwgRG9udERl
bGV0ZSB8IFJlYWRPbmx5KSwKKyAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKHZtLnByb3BlcnR5
TmFtZXMtPmlzTWFwUHJpdmF0ZU5hbWUsIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgdGhpcywgMSwg
U3RyaW5nKCksIHByaXZhdGVGdW5jSXNNYXApLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFk
T25seSksCisgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5NYXBJ
dGVyYXRvclByaXZhdGVOYW1lLCBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIHRoaXMsIDEsIFN0cmlu
ZygpLCBwcml2YXRlRnVuY01hcEl0ZXJhdG9yKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVh
ZE9ubHkpLAorICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+bWFw
SXRlcmF0b3JOZXh0UHJpdmF0ZU5hbWUsIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgdGhpcywgMCwg
U3RyaW5nKCksIHByaXZhdGVGdW5jTWFwSXRlcmF0b3JOZXh0KSwgRG9udEVudW0gfCBEb250RGVs
ZXRlIHwgUmVhZE9ubHkpLAorCiAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0
eU5hbWVzLT5idWlsdGluTmFtZXMoKS5wcm9taXNlRnVsZmlsbGVkUHJpdmF0ZU5hbWUoKSwganNO
dW1iZXIoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTUHJvbWlzZTo6U3RhdHVzOjpGdWxmaWxsZWQp
KSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAogICAgICAgICBHbG9iYWxQcm9w
ZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkucHJvbWlzZVJlamVjdGVk
UHJpdmF0ZU5hbWUoKSwganNOdW1iZXIoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTUHJvbWlzZTo6
U3RhdHVzOjpSZWplY3RlZCkpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCiAg
ICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMo
KS50b0xlbmd0aFByaXZhdGVOYW1lKCksIHByaXZhdGVGdW5jVG9MZW5ndGgsIERvbnRFbnVtIHwg
RG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL01hcFByb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9NYXBQcm90b3R5cGUuY3BwCmluZGV4IGJlNzkwZGQxYjg0Njg3Y2FiZmI0NWRiM2NhZTk3MTA3
NTU2NGYwMTAuLmM5MDEyODViZTQ1NGU0MmM2YzVlZTRkZTJmOWE3MDE4MGU4N2NhZmEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcFByb3RvdHlwZS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmNwcApAQCAtMzAs
MjAgKzMwLDI5IEBACiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFeGNlcHRpb25IZWxw
ZXJzLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCisjaW5jbHVkZSAiSXRlcmF0b3JPcGVy
YXRpb25zLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJKU0Z1
bmN0aW9uSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTTWFwLmgiCiAjaW5jbHVkZSAiSlNNYXBJdGVy
YXRvci5oIgorI2luY2x1ZGUgIkxvb2t1cC5oIgogI2luY2x1ZGUgIk1hcERhdGFJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCisjaW5jbHVkZSAiTWFwUHJvdG90eXBl
Lmx1dC5oIgorCiBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIE1hcFByb3RvdHlw
ZTo6c19pbmZvID0geyAiTWFwIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJM
RShNYXBQcm90b3R5cGUpIH07CiAKKy8qIFNvdXJjZSBmb3IgTWFwUHJvdG90eXBlLmx1dC5oCitA
YmVnaW4gbWFwUHJvdG90eXBlVGFibGUKKyAgZm9yRWFjaCAgIEpTQnVpbHRpbiAgRG9udEVudW18
RnVuY3Rpb24gMAorQGVuZAorKi8KKwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgbWFwUHJvdG9GdW5jQ2xlYXIoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNEZWxldGUoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNGb3JFYWNoKEV4ZWNTdGF0ZSop
Owogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jR2V0KEV4
ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9G
dW5jSGFzKEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
bWFwUHJvdG9GdW5jU2V0KEV4ZWNTdGF0ZSopOwpAQCAtNjEsNyArNzAsNiBAQCB2b2lkIE1hcFBy
b3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQogCiAgICAgSlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5jbGVhciwg
bWFwUHJvdG9GdW5jQ2xlYXIsIERvbnRFbnVtLCAwKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9O
KHZtLnByb3BlcnR5TmFtZXMtPmRlbGV0ZUtleXdvcmQsIG1hcFByb3RvRnVuY0RlbGV0ZSwgRG9u
dEVudW0sIDEpOwotICAgIEpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+Zm9y
RWFjaCwgbWFwUHJvdG9GdW5jRm9yRWFjaCwgRG9udEVudW0sIDEpOwogICAgIEpTQ19OQVRJVkVf
RlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+Z2V0LCBtYXBQcm90b0Z1bmNHZXQsIERvbnRFbnVt
LCAxKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmhhcywgbWFw
UHJvdG9GdW5jSGFzLCBEb250RW51bSwgMSk7CiAgICAgSlNDX05BVElWRV9GVU5DVElPTih2bS5w
cm9wZXJ0eU5hbWVzLT5zZXQsIG1hcFByb3RvRnVuY1NldCwgRG9udEVudW0sIDIpOwpAQCAtODMs
NiArOTEsMTEgQEAgdm9pZCBNYXBQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICBwdXREaXJlY3ROb25JbmRleEFjY2Vzc29y
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5zaXplLCBhY2Nlc3NvciwgRG9udEVudW0gfCBBY2Nlc3Nv
cik7CiB9CiAKK2Jvb2wgTWFwUHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uU2xvdDxCYXNl
PihleGVjLCBtYXBQcm90b3R5cGVUYWJsZSwganNDYXN0PE1hcFByb3RvdHlwZSo+KG9iamVjdCks
IHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKIEFMV0FZU19JTkxJTkUgc3RhdGljIEpTTWFwKiBn
ZXRNYXAoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgdGhpc1ZhbHVlKQogewogICAgIGlm
ICghdGhpc1ZhbHVlLmlzT2JqZWN0KCkpIHsKQEAgLTExNCw0NCArMTI3LDYgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNEZWxldGUoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUpCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4obWFwLT5yZW1vdmUoY2Fs
bEZyYW1lLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY0ZvckVhY2goQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi17
Ci0gICAgSlNNYXAqIG1hcCA9IGdldE1hcChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVl
KCkpOwotICAgIGlmICghbWFwKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwotICAgIEpTVmFsdWUgY2FsbEJhY2sgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDAp
OwotICAgIENhbGxEYXRhIGNhbGxEYXRhOwotICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2Fs
bERhdGEoY2FsbEJhY2ssIGNhbGxEYXRhKTsKLSAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVO
b25lKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGNhbGxG
cmFtZSwgV1RGOjpBU0NJSUxpdGVyYWwoIk1hcC5wcm90b3R5cGUuZm9yRWFjaCBjYWxsZWQgd2l0
aG91dCBjYWxsYmFjayIpKSk7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPmFy
Z3VtZW50KDEpOwotICAgIFZNKiB2bSA9ICZjYWxsRnJhbWUtPnZtKCk7Ci0gICAgSlNNYXBJdGVy
YXRvciogaXRlcmF0b3IgPSBKU01hcEl0ZXJhdG9yOjpjcmVhdGUoKnZtLCBjYWxsRnJhbWUtPmNh
bGxlZSgpLT5nbG9iYWxPYmplY3QoKS0+bWFwSXRlcmF0b3JTdHJ1Y3R1cmUoKSwgbWFwLCBNYXBJ
dGVyYXRlS2V5VmFsdWUpOwotICAgIEpTVmFsdWUga2V5LCB2YWx1ZTsKLSAgICBpZiAoY2FsbFR5
cGUgPT0gQ2FsbFR5cGVKUykgewotICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2Fz
dDxKU0Z1bmN0aW9uKj4oY2FsbEJhY2spOwotICAgICAgICBDYWNoZWRDYWxsIGNhY2hlZENhbGwo
Y2FsbEZyYW1lLCBmdW5jdGlvbiwgMyk7Ci0gICAgICAgIHdoaWxlIChpdGVyYXRvci0+bmV4dEtl
eVZhbHVlKGtleSwgdmFsdWUpICYmICF2bS0+ZXhjZXB0aW9uKCkpIHsKLSAgICAgICAgICAgIGNh
Y2hlZENhbGwuc2V0VGhpcyh0aGlzVmFsdWUpOwotICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRB
cmd1bWVudCgwLCB2YWx1ZSk7Ci0gICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDEs
IGtleSk7Ci0gICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDIsIG1hcCk7Ci0gICAg
ICAgICAgICBjYWNoZWRDYWxsLmNhbGwoKTsKLSAgICAgICAgfQotICAgICAgICBpdGVyYXRvci0+
ZmluaXNoKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgd2hpbGUgKGl0ZXJhdG9yLT5uZXh0S2V5
VmFsdWUoa2V5LCB2YWx1ZSkgJiYgIXZtLT5leGNlcHRpb24oKSkgewotICAgICAgICAgICAgTWFy
a2VkQXJndW1lbnRCdWZmZXIgYXJnczsKLSAgICAgICAgICAgIGFyZ3MuYXBwZW5kKHZhbHVlKTsK
LSAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGtleSk7Ci0gICAgICAgICAgICBhcmdzLmFwcGVuZCht
YXApOwotICAgICAgICAgICAgSlNDOjpjYWxsKGNhbGxGcmFtZSwgY2FsbEJhY2ssIGNhbGxUeXBl
LCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzKTsKLSAgICAgICAgfQotICAgICAgICBpdGVyYXRv
ci0+ZmluaXNoKCk7Ci0gICAgfQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7Ci19Ci0KIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jR2V0
KENhbGxGcmFtZSogY2FsbEZyYW1lKQogewogICAgIEpTTWFwKiBtYXAgPSBnZXRNYXAoY2FsbEZy
YW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKQEAgLTIxMCw0ICsxODUsMzEgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNLZXlzKENhbGxGcmFtZSogY2FsbEZy
YW1lKQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNNYXBJdGVyYXRvcjo6Y3JlYXRlKGNh
bGxGcmFtZS0+dm0oKSwgY2FsbEZyYW1lLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCktPm1hcEl0
ZXJhdG9yU3RydWN0dXJlKCksIHRoaXNPYmosIE1hcEl0ZXJhdGVLZXkpKTsKIH0KIAorRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcml2YXRlRnVuY0lzTWFwKEV4ZWNTdGF0ZSogZXhlYykK
K3sKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihqc0R5bmFtaWNDYXN0PEpT
TWFwKj4oZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmNNYXBJdGVyYXRvcihFeGVjU3RhdGUqIGV4ZWMpCit7
CisgICAgQVNTRVJUKGpzRHluYW1pY0Nhc3Q8SlNNYXAqPihleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgwKSkpOworICAgIEpTTWFwKiBtYXAgPSBqc0Nhc3Q8SlNNYXAqPihleGVjLT51bmNoZWNrZWRB
cmd1bWVudCgwKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU01hcEl0ZXJhdG9yOjpj
cmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgpLT5tYXBJdGVy
YXRvclN0cnVjdHVyZSgpLCBtYXAsIE1hcEl0ZXJhdGVLZXlWYWx1ZSkpOworfQorCitFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByaXZhdGVGdW5jTWFwSXRlcmF0b3JOZXh0KEV4ZWNTdGF0
ZSogZXhlYykKK3sKKyAgICBBU1NFUlQoanNEeW5hbWljQ2FzdDxKU01hcEl0ZXJhdG9yKj4oZXhl
Yy0+dGhpc1ZhbHVlKCkpKTsKKyAgICBKU01hcEl0ZXJhdG9yKiBpdGVyYXRvciA9IGpzQ2FzdDxK
U01hcEl0ZXJhdG9yKj4oZXhlYy0+dGhpc1ZhbHVlKCkpOworICAgIEpTVmFsdWUga2V5LCB2YWx1
ZTsKKyAgICBpZiAoaXRlcmF0b3ItPm5leHRLZXlWYWx1ZShrZXksIHZhbHVlKSkgeworICAgICAg
ICBKU0FycmF5KiByZXN1bHRBcnJheSA9IGpzQ2FzdDxKU0FycmF5Kj4oZXhlYy0+dW5jaGVja2Vk
QXJndW1lbnQoMCkpOworICAgICAgICByZXN1bHRBcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywg
MCwga2V5KTsKKyAgICAgICAgcmVzdWx0QXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIDEsIHZh
bHVlKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKTsK
KyAgICB9CisgICAgaXRlcmF0b3ItPmZpbmlzaCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKHRydWUpKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9NYXBQcm90b3R5cGUuaAppbmRleCBlYWE1ODI1Mzc5ZmE2ZjY3MDNjOTdhM2MxMzM4NzA0
MWNjYWVkNTgxLi4zZTcyNTY3ZGIzMTkxZGVkYjNmNjBmYzE2YmNlMWIxMTllOThkNWY2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUuaApAQCAtMzQsNiAr
MzQsOCBAQCBjbGFzcyBNYXBQcm90b3R5cGUgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBw
dWJsaWM6CiAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CiAKKyAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNs
b3QgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKKwogICAgIHN0YXRpYyBNYXBQcm90b3R5cGUqIGNy
ZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQogICAgIHsKICAgICAgICAgTWFwUHJvdG90eXBlKiBwcm90b3R5cGUgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxNYXBQcm90b3R5cGU+KHZtLmhlYXApKSBNYXBQcm90b3R5cGUo
dm0sIHN0cnVjdHVyZSk7CkBAIC01NCw4ICs1NiwxMyBAQCBjbGFzcyBNYXBQcm90b3R5cGUgOiBw
dWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiAgICAgewogICAgIH0KICAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9w
ZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYpOwogfTsKIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcml2YXRlRnVuY0lzTWFw
KEV4ZWNTdGF0ZSopOworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcml2YXRlRnVuY01h
cEl0ZXJhdG9yKEV4ZWNTdGF0ZSopOworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcml2
YXRlRnVuY01hcEl0ZXJhdG9yTmV4dChFeGVjU3RhdGUqKTsKKwogfQogCiAjZW5kaWYgLy8gIWRl
ZmluZWQoTWFwUHJvdG90eXBlX2gpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TZXRQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2V0UHJvdG90eXBlLmNwcAppbmRleCBkZGVlZTM3YjZmNDI4ZTA3M2FmMWVmYjAxMTM2OWY0YTI3
OTA1NmE5Li5kM2FlOTI2ZWZiYTgwMTk5NDYwNTE1NjM4Zjg3OTMxNTcxMGRmNjQzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRQcm90b3R5cGUuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldFByb3RvdHlwZS5jcHAKQEAgLTMwLDIx
ICszMCwzMCBAQAogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVy
cy5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgorI2luY2x1ZGUgIkl0ZXJhdG9yT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNGdW5j
dGlvbklubGluZXMuaCIKICNpbmNsdWRlICJKU1NldC5oIgogI2luY2x1ZGUgIkpTU2V0SXRlcmF0
b3IuaCIKKyNpbmNsdWRlICJMb29rdXAuaCIKICNpbmNsdWRlICJNYXBEYXRhSW5saW5lcy5oIgog
I2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIAorI2luY2x1ZGUgIlNldFByb3RvdHlwZS5s
dXQuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBTZXRQcm90b3R5cGU6
OnNfaW5mbyA9IHsgIlNldCIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUo
U2V0UHJvdG90eXBlKSB9OwogCisvKiBTb3VyY2UgZm9yIFNldEl0ZXJhdG9yUHJvdG90eXBlLmx1
dC5oCitAYmVnaW4gc2V0UHJvdG90eXBlVGFibGUKKyAgZm9yRWFjaCAgIEpTQnVpbHRpbiAgRG9u
dEVudW18RnVuY3Rpb24gMAorQGVuZAorKi8KKwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgc2V0UHJvdG9GdW5jQWRkKEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgc2V0UHJvdG9GdW5jQ2xlYXIoRXhlY1N0YXRlKik7CiBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNEZWxldGUoRXhlY1N0YXRl
Kik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNGb3JF
YWNoKEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc2V0
UHJvdG9GdW5jSGFzKEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc2V0UHJvdG9GdW5jVmFsdWVzKEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgc2V0UHJvdG9GdW5jRW50cmllcyhFeGVjU3RhdGUqKTsKQEAgLTYx
LDcgKzcwLDYgQEAgdm9pZCBTZXRQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnBy
b3BlcnR5TmFtZXMtPmFkZCwgc2V0UHJvdG9GdW5jQWRkLCBEb250RW51bSwgMSk7CiAgICAgSlND
X05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5jbGVhciwgc2V0UHJvdG9GdW5jQ2xl
YXIsIERvbnRFbnVtLCAwKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFt
ZXMtPmRlbGV0ZUtleXdvcmQsIHNldFByb3RvRnVuY0RlbGV0ZSwgRG9udEVudW0sIDEpOwotICAg
IEpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+Zm9yRWFjaCwgc2V0UHJvdG9G
dW5jRm9yRWFjaCwgRG9udEVudW0sIDEpOwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJv
cGVydHlOYW1lcy0+aGFzLCBzZXRQcm90b0Z1bmNIYXMsIERvbnRFbnVtLCAxKTsKICAgICBKU0Nf
TkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmVudHJpZXMsIHNldFByb3RvRnVuY0Vu
dHJpZXMsIERvbnRFbnVtLCAwKTsKIApAQCAtNzcsNiArODUsMTIgQEAgdm9pZCBTZXRQcm90b3R5
cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkK
ICAgICBwdXREaXJlY3ROb25JbmRleEFjY2Vzc29yKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5zaXpl
LCBhY2Nlc3NvciwgRG9udEVudW0gfCBBY2Nlc3Nvcik7CiB9CiAKK2Jvb2wgU2V0UHJvdG90eXBl
OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgcmV0
dXJuIGdldFN0YXRpY0Z1bmN0aW9uU2xvdDxCYXNlPihleGVjLCBzZXRQcm90b3R5cGVUYWJsZSwg
anNDYXN0PFNldFByb3RvdHlwZSo+KG9iamVjdCksIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisK
KwogQUxXQVlTX0lOTElORSBzdGF0aWMgSlNTZXQqIGdldFNldChDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgSlNWYWx1ZSB0aGlzVmFsdWUpCiB7CiAgICAgaWYgKCF0aGlzVmFsdWUuaXNPYmplY3QoKSkg
ewpAQCAtMTE4LDQ0ICsxMzIsNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHNldFBy
b3RvRnVuY0RlbGV0ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzQm9vbGVhbihzZXQtPnJlbW92ZShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+YXJndW1l
bnQoMCkpKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc2V0UHJvdG9GdW5j
Rm9yRWFjaChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKLXsKLSAgICBKU1NldCogc2V0ID0gZ2V0U2V0
KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7Ci0gICAgaWYgKCFzZXQpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgSlNWYWx1ZSBj
YWxsQmFjayA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7Ci0gICAgQ2FsbERhdGEgY2FsbERhdGE7
Ci0gICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShjYWxsQmFjaywgY2FsbERhdGEp
OwotICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpCi0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoY2FsbEZyYW1lLCBXVEY6OkFTQ0lJTGl0ZXJhbCgi
U2V0LnByb3RvdHlwZS5mb3JFYWNoIGNhbGxlZCB3aXRob3V0IGNhbGxiYWNrIikpKTsKLSAgICBK
U1ZhbHVlIHRoaXNWYWx1ZSA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMSk7Ci0gICAgVk0qIHZtID0g
JmNhbGxGcmFtZS0+dm0oKTsKLSAgICBKU1NldEl0ZXJhdG9yKiBpdGVyYXRvciA9IEpTU2V0SXRl
cmF0b3I6OmNyZWF0ZSgqdm0sIGNhbGxGcmFtZS0+Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgpLT5z
ZXRJdGVyYXRvclN0cnVjdHVyZSgpLCBzZXQsIFNldEl0ZXJhdGVLZXkpOwotICAgIEpTVmFsdWUg
a2V5OwotICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUpTKSB7Ci0gICAgICAgIEpTRnVuY3Rp
b24qIGZ1bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsQmFjayk7Ci0gICAgICAgIENh
Y2hlZENhbGwgY2FjaGVkQ2FsbChjYWxsRnJhbWUsIGZ1bmN0aW9uLCAzKTsKLSAgICAgICAgd2hp
bGUgKGl0ZXJhdG9yLT5uZXh0KGNhbGxGcmFtZSwga2V5KSAmJiAhdm0tPmV4Y2VwdGlvbigpKSB7
Ci0gICAgICAgICAgICBjYWNoZWRDYWxsLnNldFRoaXModGhpc1ZhbHVlKTsKLSAgICAgICAgICAg
IGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMCwga2V5KTsKLSAgICAgICAgICAgIGNhY2hlZENhbGwu
c2V0QXJndW1lbnQoMSwga2V5KTsKLSAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQo
Miwgc2V0KTsKLSAgICAgICAgICAgIGNhY2hlZENhbGwuY2FsbCgpOwotICAgICAgICB9Ci0gICAg
ICAgIGl0ZXJhdG9yLT5maW5pc2goKTsKLSAgICB9IGVsc2UgewotICAgICAgICB3aGlsZSAoaXRl
cmF0b3ItPm5leHQoY2FsbEZyYW1lLCBrZXkpICYmICF2bS0+ZXhjZXB0aW9uKCkpIHsKLSAgICAg
ICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7Ci0gICAgICAgICAgICBhcmdzLmFwcGVu
ZChrZXkpOwotICAgICAgICAgICAgYXJncy5hcHBlbmQoa2V5KTsKLSAgICAgICAgICAgIGFyZ3Mu
YXBwZW5kKHNldCk7Ci0gICAgICAgICAgICBKU0M6OmNhbGwoY2FsbEZyYW1lLCBjYWxsQmFjaywg
Y2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3MpOwotICAgICAgICB9Ci0gICAgICAg
IGl0ZXJhdG9yLT5maW5pc2goKTsKLSAgICB9Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKLX0KLQogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90
b0Z1bmNIYXMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgSlNTZXQqIHNldCA9IGdldFNl
dChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwpAQCAtMTg4LDQgKzE2NCwzMSBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHNldFByb3RvRnVuY0VudHJpZXMoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1NldEl0ZXJhdG9y
OjpjcmVhdGUoY2FsbEZyYW1lLT52bSgpLCBjYWxsRnJhbWUtPmNhbGxlZSgpLT5nbG9iYWxPYmpl
Y3QoKS0+c2V0SXRlcmF0b3JTdHJ1Y3R1cmUoKSwgdGhpc09iaiwgU2V0SXRlcmF0ZUtleVZhbHVl
KSk7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmNJc1NldChF
eGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
anNEeW5hbWljQ2FzdDxKU1NldCo+KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKSkpOworfQor
CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByaXZhdGVGdW5jU2V0SXRlcmF0b3IoRXhl
Y1N0YXRlKiBleGVjKQoreworICAgIEFTU0VSVChqc0R5bmFtaWNDYXN0PEpTU2V0Kj4oZXhlYy0+
dW5jaGVja2VkQXJndW1lbnQoMCkpKTsKKyAgICBKU1NldCogc2V0ID0ganNDYXN0PEpTU2V0Kj4o
ZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
SlNTZXRJdGVyYXRvcjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmNhbGxlZSgpLT5nbG9iYWxP
YmplY3QoKS0+c2V0SXRlcmF0b3JTdHJ1Y3R1cmUoKSwgc2V0LCBTZXRJdGVyYXRlS2V5KSk7Cit9
CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmNTZXRJdGVyYXRvck5l
eHQoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEFTU0VSVChqc0R5bmFtaWNDYXN0PEpTU2V0SXRl
cmF0b3IqPihleGVjLT50aGlzVmFsdWUoKSkpOworICAgIEpTU2V0SXRlcmF0b3IqIGl0ZXJhdG9y
ID0ganNDYXN0PEpTU2V0SXRlcmF0b3IqPihleGVjLT50aGlzVmFsdWUoKSk7CisgICAgSlNWYWx1
ZSByZXN1bHQ7CisgICAgaWYgKGl0ZXJhdG9yLT5uZXh0KGV4ZWMsIHJlc3VsdCkpIHsKKyAgICAg
ICAgSlNBcnJheSogcmVzdWx0QXJyYXkgPSBqc0Nhc3Q8SlNBcnJheSo+KGV4ZWMtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApKTsKKyAgICAgICAgcmVzdWx0QXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMs
IDAsIHJlc3VsdCk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZh
bHNlKSk7CisgICAgfQorICAgIGl0ZXJhdG9yLT5maW5pc2goKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShj
cmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdChleGVjLCBqc1VuZGVmaW5lZCgpLCB0cnVlKSk7Cit9
CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldFByb3Rv
dHlwZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmgKaW5k
ZXggYmRmOTBmNDMzMjc1MjI4ZDY0OTc2YTRjOWQwNWM4MDU1NzY0M2YwMC4uZTI3MTlhNjJhYzdh
Y2ZkMDZlZmUwNDM3NGFlNjIxNGJhZDZkNzRkNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2V0UHJvdG90eXBlLmgKQEAgLTM0LDYgKzM0LDggQEAgY2xhc3MgU2V0UHJvdG90
eXBlIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgogICAgIHR5cGVkZWYgSlNO
b25GaW5hbE9iamVjdCBCYXNlOwogCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgQmFzZTo6U3RydWN0dXJlRmxh
Z3M7CisKICAgICBzdGF0aWMgU2V0UHJvdG90eXBlKiBjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7CiAgICAgICAg
IFNldFByb3RvdHlwZSogcHJvdG90eXBlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8U2V0
UHJvdG90eXBlPih2bS5oZWFwKSkgU2V0UHJvdG90eXBlKHZtLCBzdHJ1Y3R1cmUpOwpAQCAtNTQs
OCArNTYsMTMgQEAgY2xhc3MgU2V0UHJvdG90eXBlIDogcHVibGljIEpTTm9uRmluYWxPYmplY3Qg
ewogICAgIHsKICAgICB9CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTR2xvYmFsT2Jq
ZWN0Kik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKIH07CiAKK0VuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmNJc1NldChFeGVjU3RhdGUqKTsKK0VuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmNTZXRJdGVyYXRvcihFeGVjU3RhdGUqKTsK
K0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmNTZXRJdGVyYXRvck5leHQo
RXhlY1N0YXRlKik7CisKIH0KIAogI2VuZGlmIC8vICFkZWZpbmVkKFNldFByb3RvdHlwZV9oKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268280</attachid>
            <date>2016-01-05 08:06:51 -0800</date>
            <delta_ts>2016-01-09 10:14:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-152691-20160106010617.patch</filename>
            <type>text/plain</type>
            <size>50846</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk0NTQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
NjEwZmYyNTZlMTQ0NmU0MDQxNjM4ZTcwNGVjOGU0OWUzZTg0YmM3Li44ZmI2MGU0NzVjYWY1NmVk
YWVmYzFlZTZkYTVkYjFlMDI2YmEyOTAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMTEgQEAKKzIwMTYtMDEtMDUgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+CisKKyAgICAgICAgW0pTQ10gSXRlcmF0aW5nIG92ZXIgYSBTZXQvTWFwIGlzIHRvbyBz
bG93CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI2
OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTZXQj
Zm9yRWFjaCBhbmQgU2V0ICYgZm9yLW9mIGFyZSB2ZXJ5IHNsb3cuIFRoZXJlIGFyZSAyIHJlYXNv
bnMuCisKKyAgICAgICAgMS4gZm9yRWFjaCBpcyBpbXBsZW1lbnRlZCBpbiBDKysuIEFuZCB0eXBp
Y2FsbHksIHRha2luZyBKUyBjYWxsYmFjayBhbmQgY2FsbGluZyBpdCBmcm9tIEMrKy4KKworICAg
ICAgICBDKysgdG8gSlMgdHJhbnNpdGlvbiBzZWVtcyBjb3N0bHkuIHBlcmYgcmVzdWx0IGluIExp
bnV4IG1hY2hpbmUgc2hvd3MgdGhpcy4KKworICAgICAgICAgICAgU2FtcGxlczogMjNLIG9mIGV2
ZW50ICdjeWNsZXMnLCBFdmVudCBjb3VudCAoYXBwcm94Lik6IDIxNDQ2MDc0Mzg1CisgICAgICAg
ICAgICAzNC4wNCUgIGpzYyAgbGliamF2YXNjcmlwdGNvcmVndGstNC4wLnNvLjE4LjMuMSAgWy5d
IEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGUoSlNDOjpDYWxsRnJhbWVDbG9zdXJlJikKKyAgICAg
ICAgICAgIDIwLjQ4JSAganNjICBsaWJqYXZhc2NyaXB0Y29yZWd0ay00LjAuc28uMTguMy4xICBb
Ll0gdm1FbnRyeVRvSmF2YVNjcmlwdAorICAgICAgICAgICAgIDkuODAlICBqc2MgIGxpYmphdmFz
Y3JpcHRjb3JlZ3RrLTQuMC5zby4xOC4zLjEgIFsuXSBKU0M6OkpJVENvZGU6OmV4ZWN1dGUoSlND
OjpWTSosIEpTQzo6UHJvdG9DYWxsRnJhbWUqKQorICAgICAgICAgICAgIDcuOTUlICBqc2MgIGxp
YmphdmFzY3JpcHRjb3JlZ3RrLTQuMC5zby4xOC4zLjEgIFsuXSBKU0M6OnNldFByb3RvRnVuY0Zv
ckVhY2goSlNDOjpFeGVjU3RhdGUqKQorICAgICAgICAgICAgIDUuNjUlICBqc2MgIHBlcmYtMjI4
NTQubWFwICAgICAgICAgICAgICAgICAgICAgIFsuXSAweDAwMDA3ZjVkMmMyMDRhNmYKKworICAg
ICAgICBXcml0aW5nIGZvckVhY2ggaW4gSlMgZWxpbWluYXRlcyB0aGlzLgorCisgICAgICAgICAg
ICBTYW1wbGVzOiAyM0sgb2YgZXZlbnQgJ2N5Y2xlcycsIEV2ZW50IGNvdW50IChhcHByb3guKTog
MjEyNTU2OTE2NTEKKyAgICAgICAgICAgIDYyLjkxJSAganNjICBwZXJmLTIyODkwLm1hcCAgICAg
ICAgICAgICAgICAgICAgICBbLl0gMHgwMDAwN2ZkMTE3YzBhM2I5CisgICAgICAgICAgICAyNC44
OSUgIGpzYyAgbGliamF2YXNjcmlwdGNvcmVndGstNC4wLnNvLjE4LjMuMSAgWy5dIEpTQzo6cHJp
dmF0ZUZ1bmNTZXRJdGVyYXRvck5leHQoSlNDOjpFeGVjU3RhdGUqKQorICAgICAgICAgICAgIDAu
MjklICBqc2MgIGxpYmphdmFzY3JpcHRjb3JlZ3RrLTQuMC5zby4xOC4zLjEgIFsuXSBKU0M6OkNv
ZGVCbG9jazo6dXBkYXRlQWxsUHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNzKHVuc2lnbmVkIGlu
dCYsIHVuc2lnbmVkIGludCYpCisgICAgICAgICAgICAgMC4yNCUgIGpzYyAgW3Zkc29dICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgWy5dIDB4MDAwMDAwMDAwMDAwMDhlOAorICAgICAgICAg
ICAgIDAuMjIlICBqc2MgIGxpYmphdmFzY3JpcHRjb3JlZ3RrLTQuMC5zby4xOC4zLjEgIFsuXSBK
U0M6OkNvZGVCbG9jazo6cHJlZGljdGVkTWFjaGluZUNvZGVTaXplKCkKKyAgICAgICAgICAgICAw
LjE2JSAganNjICBsaWJqYXZhc2NyaXB0Y29yZWd0ay00LjAuc28uMTguMy4xICBbLl0gV1RGOjpN
ZXRhQWxsb2NhdG9yOjpjdXJyZW50U3RhdGlzdGljcygpCisgICAgICAgICAgICAgMC4xNSUgIGpz
YyAgbGliamF2YXNjcmlwdGNvcmVndGstNC4wLnNvLjE4LjMuMSAgWy5dIEpTQzo6TGV4ZXI8dW5z
aWduZWQgY2hhcj46OmxleChKU0M6OkpTVG9rZW4qLCB1bnNpZ25lZCBpbnQsIGJvb2wpCisKKyAg
ICAgICAgMi4gSXRlcmF0b3IgcmVzdWx0IG9iamVjdCBhbGxvY2F0aW9uIGlzIGNvc3RseS4KKwor
ICAgICAgICBJdGVyYXRvciByZXN1bHQgb2JqZWN0IGFsbG9jYXRpb24gaXMgY29zdGx5LiBFdmVu
IGlmIHRoZSAoMSkgaXMgc29sdmVkLCB3aGVuIGV4ZWN1dGluZyBTZXQgJiBmb3Itb2YsIHBlcmYg
cmVzdWx0IHNob3dzIHZlcnkgc2xvdyBwZXJmb3JtYW5jZSBkdWUgdG8gKDIpLgorCisgICAgICAg
ICAgICBTYW1wbGVzOiAxMDhLIG9mIGV2ZW50ICdjeWNsZXMnLCBFdmVudCBjb3VudCAoYXBwcm94
Lik6IDk1NTI5MjczNzQ4CisgICAgICAgICAgICAxOC4wMiUgIGpzYyAgbGliamF2YXNjcmlwdGNv
cmVndGstNC4wLnNvLjE4LjMuMSAgWy5dIEpTQzo6Y3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3Qo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGJvb2wpCisgICAgICAgICAgICAxNS42OCUg
IGpzYyAganNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWy5dIEpTQzo6SlNPYmpl
Y3Q6OnB1dERpcmVjdChKU0M6OlZNJiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwg
dW5zaWduZWQgaW50KQorICAgICAgICAgICAgMTQuMTglICBqc2MgIGxpYmphdmFzY3JpcHRjb3Jl
Z3RrLTQuMC5zby4xOC4zLjEgIFsuXSBKU0M6OlByb3RvdHlwZU1hcDo6ZW1wdHlPYmplY3RTdHJ1
Y3R1cmVGb3JQcm90b3R5cGUoSlNDOjpKU09iamVjdCosIHVuc2lnbmVkIGludCkKKyAgICAgICAg
ICAgIDEzLjQwJSAganNjICBwZXJmLTI1NDIwLm1hcCAgICAgICAgICAgICAgICAgICAgICBbLl0g
MHgwMDAwN2ZjZTE1ODAwNmExCisgICAgICAgICAgICAgNi43OSUgIGpzYyAgbGliamF2YXNjcmlw
dGNvcmVndGstNC4wLnNvLjE4LjMuMSAgWy5dIEpTQzo6U3RydWN0dXJlVHJhbnNpdGlvblRhYmxl
OjpnZXQoV1RGOjpVbmlxdWVkU3RyaW5nSW1wbCosIHVuc2lnbmVkIGludCkgY29uc3QKKworICAg
ICAgICBJbiB0aGUgbG9uZyB0ZXJtLCB3ZSBzaG91bGQgaW1wbGVtZW50IFNldEl0ZXJhdG9yI25l
eHQgaW4gSlMgYW5kIG1ha2UgdGhlIGl0ZXJhdG9yIHJlc3VsdCBvYmplY3QgYWxsb2NhdGlvbiB3
cml0dGVuIGluIEpTIHRvIGVuY291cmFnZSBvYmplY3QgYWxsb2NhdGlvbiBlbGltaW5hdGlvbiBp
biBGVEwuCisgICAgICAgIEJ1dCBzZWVpbmcgdGhlIHBlcmYgcmVzdWx0LCB3ZSBjYW4gZmluZCB0
aGUgZWFzeSB0byBmaXggYm90dGxlbmVjayBpbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbi4K
KyAgICAgICAgRXZlcnkgdGltZSBjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdCBjcmVhdGVzIHRo
ZSBlbXB0eSBvYmplY3QgYW5kIHVzZSBwdXREaXJlY3QgdG8gc3RvcmUgcHJvcGVydGllcy4KKyAg
ICAgICAgVGhlIHByZS1iYWtlZCBTdHJ1Y3R1cmUqIHdpdGggYGRvbmVgIGFuZCBgdmFsdWVgIHBy
b3BlcnRpZXMgbWFrZXMgdGhpcyBpbXBsZW1lbnRhdGlvbiBmYXN0LgorCisgICAgICAgIEFmdGVy
IHRoZXNlIGltcHJvdmVtZW50cywgdGhlIG1pY3JvIGJlbmNobWFya1sxXSBzaG93cyB0aGUgZm9s
bG93aW5nLgorCisgICAgICAgIG9sZDoKKyAgICAgICAgICAgIExpbmtlZCBMaXN0IHggMjEyLDc3
NiBvcHMvc2VjIMKxMC4yMSUgKDE2MiBydW5zIHNhbXBsZWQpCisgICAgICAgICAgICBBcnJheSB4
IDM3NiwxNTYgb3BzL3NlYyDCsTAuMjAlICgxNjIgcnVucyBzYW1wbGVkKQorICAgICAgICAgICAg
QXJyYXkgZm9yRWFjaCB4IDE3LDM0NSBvcHMvc2VjIMKxMC45OSUgKDEzNyBydW5zIHNhbXBsZWQp
CisgICAgICAgICAgICBBcnJheSBmb3Itb2YgeCAxNiw1MTggb3BzL3NlYyDCsTAuNTglICgxNjAg
cnVucyBzYW1wbGVkKQorICAgICAgICAgICAgU2V0IGZvckVhY2ggeCAxMywyNjMgb3BzL3NlYyDC
sTAuMjAlICgxNjIgcnVucyBzYW1wbGVkKQorICAgICAgICAgICAgU2V0IGZvci1vZiB4IDQsNzMy
IG9wcy9zZWMgwrEwLjM0JSAoMTIzIHJ1bnMgc2FtcGxlZCkKKworICAgICAgICBuZXc6CisgICAg
ICAgICAgICBMaW5rZWQgTGlzdCB4IDIxMCw4MzMgb3BzL3NlYyDCsTAuMjglICgxNjEgcnVucyBz
YW1wbGVkKQorICAgICAgICAgICAgQXJyYXkgeCAzNzEsMzQ3IG9wcy9zZWMgwrEwLjM2JSAoMTYy
IHJ1bnMgc2FtcGxlZCkKKyAgICAgICAgICAgIEFycmF5IGZvckVhY2ggeCAxNyw0NjAgb3BzL3Nl
YyDCsTAuODQlICgxMzYgcnVucyBzYW1wbGVkKQorICAgICAgICAgICAgQXJyYXkgZm9yLW9mIHgg
MTYsMTg4IG9wcy9zZWMgwrExLjI3JSAoMTU4IHJ1bnMgc2FtcGxlZCkKKyAgICAgICAgICAgIFNl
dCBmb3JFYWNoIHggMjMsNjg0IG9wcy9zZWMgwrEyLjQ2JSAoMTM5IHJ1bnMgc2FtcGxlZCkKKyAg
ICAgICAgICAgIFNldCBmb3Itb2YgeCAxMiwxNzYgb3BzL3NlYyDCsTAuNTQlICgxNTcgcnVucyBz
YW1wbGVkKQorCisgICAgICAgIFNldCNmb3JFYWNoIGJlY29tZXMgY29tcGFyYWJsZSB0byBBcnJh
eSNmb3JFYWNoLiBBbmQgU2V0I2ZvckVhY2ggYW5kIFNldCAmIGZvci1vZiBhcmUgaW1wcm92ZWQg
KDEuNzl4LCBhbmQgMi41N3gpLgorICAgICAgICBBZnRlciB0aGlzIG9wdGltaXphdGlvbnMsIHRo
ZXkgYXJlIHN0aWxsIG11Y2ggc2xvd2VyIHRoYW4gbGlua2VkIGxpc3QgYW5kIGFycmF5LgorICAg
ICAgICBUaGlzIHNob3VsZCBiZSBvcHRpbWl6ZWQgaW4gdGhlIGxvbmcgdGVybS4KKworICAgICAg
ICBbMV06IGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0NvbnN0ZWxsYXRpb24vOGRiNWY1YjhmMTJm
ZTdlMjgzZDAKKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIERlcml2ZWRT
b3VyY2VzLm1ha2U6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlw
dENvcmUudmN4cHJvai5maWx0ZXJzOgorICAgICAgICAqIGJ1aWx0aW5zL01hcFByb3RvdHlwZS5q
czogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JPcGVy
YXRpb25zLmguCisgICAgICAgIChmb3JFYWNoKToKKyAgICAgICAgKiBidWlsdGlucy9TZXRQcm90
b3R5cGUuanM6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJh
dG9yT3BlcmF0aW9ucy5oLgorICAgICAgICAoZm9yRWFjaCk6CisgICAgICAgICogcnVudGltZS9D
b21tb25JZGVudGlmaWVycy5oOgorICAgICAgICAqIHJ1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25z
LmNwcDoKKyAgICAgICAgKEpTQzo6Y3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3RTdHJ1Y3R1cmUp
OgorICAgICAgICAoSlNDOjpjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdCk6CisgICAgICAgICog
cnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmluaXQpOgorICAgICAg
ICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6aXRlcmF0
b3JSZXN1bHRPYmplY3RTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6
aXRlcmF0b3JSZXN1bHRTdHJ1Y3R1cmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU0dsb2Jh
bE9iamVjdDo6aXRlcmF0b3JSZXN1bHRTdHJ1Y3R1cmVPZmZzZXQpOiBEZWxldGVkLgorICAgICAg
ICAqIHJ1bnRpbWUvTWFwUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6TWFwUHJvdG90eXBl
OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpwcml2YXRlRnVuY0lzTWFwKToK
KyAgICAgICAgKEpTQzo6cHJpdmF0ZUZ1bmNNYXBJdGVyYXRvcik6CisgICAgICAgIChKU0M6OnBy
aXZhdGVGdW5jTWFwSXRlcmF0b3JOZXh0KToKKyAgICAgICAgKEpTQzo6TWFwUHJvdG90eXBlOjpm
aW5pc2hDcmVhdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Om1hcFByb3RvRnVuY0ZvckVh
Y2gpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvTWFwUHJvdG90eXBlLmg6CisgICAgICAg
ICogcnVudGltZS9TZXRQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpTZXRQcm90b3R5cGU6
OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OnByaXZhdGVGdW5jSXNTZXQpOgor
ICAgICAgICAoSlNDOjpwcml2YXRlRnVuY1NldEl0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6cHJp
dmF0ZUZ1bmNTZXRJdGVyYXRvck5leHQpOgorICAgICAgICAoSlNDOjpTZXRQcm90b3R5cGU6OmZp
bmlzaENyZWF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6c2V0UHJvdG9GdW5jRm9yRWFj
aCk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9TZXRQcm90b3R5cGUuaDoKKwogMjAxNi0w
MS0wNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3
ZWQsIGRpc2FibGUgRlRMIEIzIGZvciBub3cuIEkgZGlkbid0IGludGVuZCB0byBlbmFibGUgaXQg
eWV0LgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDNkNWI0OWY4ZDVjMzJh
YWZlNjRjNWJmNzlkOTZmYzZjZGRjMzg2Y2QuLjNlMjM1NjI2Y2Q3NjVlZjA0ZGZmZWFiNDdhNTQz
YTVhZWY2YWQxZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTc4NSw2
ICs3ODUsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfT0JKRUNUX0xVVF9TT1VSQ0VTCiAgICAgcnVu
dGltZS9KU09OT2JqZWN0LmNwcAogICAgIHJ1bnRpbWUvSlNQcm9taXNlQ29uc3RydWN0b3IuY3Bw
CiAgICAgcnVudGltZS9KU1Byb21pc2VQcm90b3R5cGUuY3BwCisgICAgcnVudGltZS9NYXBQcm90
b3R5cGUuY3BwCiAgICAgcnVudGltZS9Nb2R1bGVMb2FkZXJPYmplY3QuY3BwCiAgICAgcnVudGlt
ZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHAKICAgICBydW50aW1lL051bWJlclByb3RvdHlwZS5jcHAK
QEAgLTc5Miw2ICs3OTMsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfT0JKRUNUX0xVVF9TT1VSQ0VT
CiAgICAgcnVudGltZS9SZWZsZWN0T2JqZWN0LmNwcAogICAgIHJ1bnRpbWUvUmVnRXhwQ29uc3Ry
dWN0b3IuY3BwCiAgICAgcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCisgICAgcnVudGltZS9T
ZXRQcm90b3R5cGUuY3BwCiAgICAgcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAKICAgICBy
dW50aW1lL1N0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmNwcAogICAgIHJ1bnRpbWUvU3ltYm9sQ29u
c3RydWN0b3IuY3BwCkBAIC0xMjQyLDYgKzEyNDQsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfQlVJ
TFRJTlNfU09VUkNFUwogICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9idWlsdGlucy9JbnNwZWN0
b3JJbnN0cnVtZW50YXRpb25PYmplY3QuanMKICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vYnVp
bHRpbnMvSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IuanMKICAgICAke0pBVkFTQ1JJUFRDT1JF
X0RJUn0vYnVpbHRpbnMvSXRlcmF0b3JQcm90b3R5cGUuanMKKyAgICAke0pBVkFTQ1JJUFRDT1JF
X0RJUn0vYnVpbHRpbnMvTWFwUHJvdG90eXBlLmpzCiAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9
L2J1aWx0aW5zL01vZHVsZUxvYWRlck9iamVjdC5qcwogICAgICR7SkFWQVNDUklQVENPUkVfRElS
fS9idWlsdGlucy9OdW1iZXJQcm90b3R5cGUuanMKICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0v
YnVpbHRpbnMvT2JqZWN0Q29uc3RydWN0b3IuanMKQEAgLTEyNDksNiArMTI1Miw3IEBAIHNldChK
YXZhU2NyaXB0Q29yZV9CVUlMVElOU19TT1VSQ0VTCiAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9
L2J1aWx0aW5zL1Byb21pc2VPcGVyYXRpb25zLmpzCiAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9
L2J1aWx0aW5zL1Byb21pc2VQcm90b3R5cGUuanMKICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0v
YnVpbHRpbnMvUmVmbGVjdE9iamVjdC5qcworICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9idWls
dGlucy9TZXRQcm90b3R5cGUuanMKICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vYnVpbHRpbnMv
U3RyaW5nQ29uc3RydWN0b3IuanMKICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vYnVpbHRpbnMv
U3RyaW5nSXRlcmF0b3JQcm90b3R5cGUuanMKICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vYnVp
bHRpbnMvU3RyaW5nUHJvdG90eXBlLmpzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291
cmNlcy5tYWtlCmluZGV4IDFlZTM5NGZjMDk3YzBkNTUxMDcxZmQyOWQwOTJmNzRhZDg1MzgxMWYu
LjU1MDE2ZmJlNWFkMjM5OGZlNTY4ZThlY2M0MGRmNTAwNTQ3NWY1M2EgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC04OSw2ICs4OSw3IEBAIEphdmFTY3Jp
cHRDb3JlX0JVSUxUSU5TX1NPVVJDRVMgPSBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvYnVpbHRp
bnMvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmpzIFwKICAgICAkKEphdmFTY3JpcHRD
b3JlKS9idWlsdGlucy9JbnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rvci5qcyBcCiAgICAgJChKYXZh
U2NyaXB0Q29yZSkvYnVpbHRpbnMvSXRlcmF0b3JQcm90b3R5cGUuanMgXAorICAgICQoSmF2YVNj
cmlwdENvcmUpL2J1aWx0aW5zL01hcFByb3RvdHlwZS5qcyBcCiAgICAgJChKYXZhU2NyaXB0Q29y
ZSkvYnVpbHRpbnMvTW9kdWxlTG9hZGVyT2JqZWN0LmpzIFwKICAgICAkKEphdmFTY3JpcHRDb3Jl
KS9idWlsdGlucy9OdW1iZXJQcm90b3R5cGUuanMgXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2J1
aWx0aW5zL09iamVjdENvbnN0cnVjdG9yLmpzIFwKQEAgLTk2LDYgKzk3LDcgQEAgSmF2YVNjcmlw
dENvcmVfQlVJTFRJTlNfU09VUkNFUyA9IFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9idWlsdGlu
cy9Qcm9taXNlT3BlcmF0aW9ucy5qcyBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvYnVpbHRpbnMv
UHJvbWlzZVByb3RvdHlwZS5qcyBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvYnVpbHRpbnMvUmVm
bGVjdE9iamVjdC5qcyBcCisgICAgJChKYXZhU2NyaXB0Q29yZSkvYnVpbHRpbnMvU2V0UHJvdG90
eXBlLmpzIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9idWlsdGlucy9TdHJpbmdDb25zdHJ1Y3Rv
ci5qcyBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvYnVpbHRpbnMvU3RyaW5nSXRlcmF0b3JQcm90
b3R5cGUuanMgXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2J1aWx0aW5zL1N0cmluZ1Byb3RvdHlw
ZS5qcyBcCkBAIC0xMzYsNiArMTM4LDcgQEAgT0JKRUNUX0xVVF9IRUFERVJTID0gXAogICAgIEpT
T05PYmplY3QubHV0LmggXAogICAgIEpTUHJvbWlzZVByb3RvdHlwZS5sdXQuaCBcCiAgICAgSlNQ
cm9taXNlQ29uc3RydWN0b3IubHV0LmggXAorICAgIE1hcFByb3RvdHlwZS5sdXQuaCBcCiAgICAg
TW9kdWxlTG9hZGVyT2JqZWN0Lmx1dC5oIFwKICAgICBOdW1iZXJDb25zdHJ1Y3Rvci5sdXQuaCBc
CiAgICAgTnVtYmVyUHJvdG90eXBlLmx1dC5oIFwKQEAgLTE0Myw2ICsxNDYsNyBAQCBPQkpFQ1Rf
TFVUX0hFQURFUlMgPSBcCiAgICAgUmVmbGVjdE9iamVjdC5sdXQuaCBcCiAgICAgUmVnRXhwQ29u
c3RydWN0b3IubHV0LmggXAogICAgIFJlZ0V4cFByb3RvdHlwZS5sdXQuaCBcCisgICAgU2V0UHJv
dG90eXBlLmx1dC5oIFwKICAgICBTdHJpbmdDb25zdHJ1Y3Rvci5sdXQuaCBcCiAgICAgU3RyaW5n
SXRlcmF0b3JQcm90b3R5cGUubHV0LmggXAogICAgIFN5bWJvbENvbnN0cnVjdG9yLmx1dC5oIFwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
L0phdmFTY3JpcHRDb3JlLnZjeHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCmluZGV4IDZkOTcyOWZmNTRkYzlh
NzE3NTNlZjgxNjRiOWFmM2UzYzBiNDZmN2YuLmM3NDhhNTg5ZDQ1Nzc1ZjQ0NWQ5ZjA5ODllZmFk
Y2Q2ODQ4NzM1YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagpAQCAt
OTc0LDYgKzk3NCw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25C
dWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQcm9qZWN0TmFtZSlcRGVyaXZl
ZFNvdXJjZXNcSlNQcm9taXNlUHJvdG90eXBlLmx1dC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUp
XCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEtleXdvcmRMb29rdXAubHV0LmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqJChQbGF0
Zm9ybUFyY2hpdGVjdHVyZSlcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcTGV4ZXIubHV0
LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilc
b2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNc
TWFwUHJvdG90eXBlLmx1dC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1
cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUp
XERlcml2ZWRTb3VyY2VzXE51bWJlckNvbnN0cnVjdG9yLmx1dC5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRl
Y3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXE51bWJlclByb3RvdHlwZS5sdXQu
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxv
YmokKFBsYXRmb3JtQXJjaGl0ZWN0dXJlKVwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xP
YmplY3RDb25zdHJ1Y3Rvci5sdXQuaCIgLz4KQEAgLTk4Miw2ICs5ODMsNyBAQAogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNo
aXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXFJlZ0V4cENvbnN0cnVjdG9y
Lmx1dC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGRE
aXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3Vy
Y2VzXFJlZ0V4cEppdFRhYmxlcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25m
aWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5h
bWUpXERlcml2ZWRTb3VyY2VzXFJlZ0V4cFByb3RvdHlwZS5sdXQuaCIgLz4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0
ZWN0dXJlKVwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xTZXRQcm90b3R5cGUubHV0Lmgi
IC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2Jq
JChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcU3Ry
aW5nQ29uc3RydWN0b3IubHV0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKENvbmZp
Z3VyYXRpb25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQcm9qZWN0TmFt
ZSlcRGVyaXZlZFNvdXJjZXNcU3ltYm9sUHJvdG90eXBlLmx1dC5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRl
Y3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEpTQ0J1aWx0aW5zLmgiIC8+CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMKaW5kZXgg
ZTMwOTNmOWFkMGIyZDFhMzhiNmVmMzM0NGI3MGQzNjg5ODViNGQzNC4uZjNkYTRmYzMxODI5NzIz
MTZhYjc1NjY5MjM1N2RjNDlmMTRmYzRlNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJz
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwpAQCAtMzQxMSw2ICszNDExLDkgQEAKICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJj
aGl0ZWN0dXJlKVwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xSZWdFeHBDb25zdHJ1Y3Rv
ci5sdXQuaCI+CiAgICAgICA8RmlsdGVyPkRlcml2ZWQgU291cmNlczwvRmlsdGVyPgogICAgIDwv
Q2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGRE
aXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3Vy
Y2VzXE1hcFByb3RvdHlwZS5sdXQuaCI+CisgICAgICA8RmlsdGVyPkRlcml2ZWQgU291cmNlczwv
RmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25m
aWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5h
bWUpXERlcml2ZWRTb3VyY2VzXE51bWJlclByb3RvdHlwZS5sdXQuaCI+CiAgICAgICA8RmlsdGVy
PkRlcml2ZWQgU291cmNlczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpAQCAtMzQyMCw2ICsz
NDIzLDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGly
KVxvYmokKFBsYXRmb3JtQXJjaGl0ZWN0dXJlKVwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNl
c1xSZWdFeHBQcm90b3R5cGUubHV0LmgiPgogICAgICAgPEZpbHRlcj5EZXJpdmVkIFNvdXJjZXM8
L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoQ29u
ZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0ZWN0dXJlKVwkKFByb2plY3RO
YW1lKVxEZXJpdmVkU291cmNlc1xTZXRQcm90b3R5cGUubHV0LmgiPgorICAgICAgPEZpbHRlcj5E
ZXJpdmVkIFNvdXJjZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0ZWN0
dXJlKVwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xTdHJpbmdDb25zdHJ1Y3Rvci5sdXQu
aCI+CiAgICAgICA8RmlsdGVyPkRlcml2ZWQgU291cmNlczwvRmlsdGVyPgogICAgIDwvQ2xJbmNs
dWRlPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL01hcFByb3Rv
dHlwZS5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9NYXBQcm90b3R5cGUuanMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNjM2NDZhODM2NTcwODUyMDFlMTU1ODE4ZTllOTU4MzFiMzExOGE3ZgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9NYXBQcm90b3R5
cGUuanMKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBZdXN1a2Ug
U3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCitmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrIC8qLCB0aGlzQXJn
ICovKQoreworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIGlmICghQGlzTWFwKHRoaXMpKQorICAg
ICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiTWFwIG9wZXJhdGlvbiBjYWxsZWQgb24gbm9uLU1h
cCBvYmplY3QiKTsKKworICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpCisg
ICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJNYXAucHJvdG90eXBlLmZvckVhY2ggY2FsbGJh
Y2sgbXVzdCBiZSBhIGZ1bmN0aW9uIik7CisKKyAgICB2YXIgdGhpc0FyZyA9IGFyZ3VtZW50cy5s
ZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkOworICAgIHZhciBpdGVyYXRvciA9
IEBNYXBJdGVyYXRvcih0aGlzKTsKKworICAgIC8vIFRvIGF2b2lkIG9iamVjdCBhbGxvY2F0aW9u
cyBmb3IgaXRlcmF0b3IgcmVzdWx0IG9iamVjdHMsIHdlIHBhc3MgdGhlIHBsYWNlaG9sZGVyIHRv
IHRoZSBzcGVjaWFsICJuZXh0IiBmdW5jdGlvbiBpbiBvcmRlciB0byBmaWxsIHRoZSByZXN1bHRz
LgorICAgIHZhciB2YWx1ZSA9IFsgdW5kZWZpbmVkLCB1bmRlZmluZWQgXTsKKyAgICBmb3IgKDs7
KSB7CisgICAgICAgIGlmIChAbWFwSXRlcmF0b3JOZXh0LkBjYWxsKGl0ZXJhdG9yLCB2YWx1ZSkp
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FsbGJhY2suQGNhbGwodGhpc0FyZywgdmFs
dWVbMV0sIHZhbHVlWzBdLCB0aGlzKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnVpbHRpbnMvU2V0UHJvdG90eXBlLmpzIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J1aWx0aW5zL1NldFByb3RvdHlwZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYjg5YzZlZTViNjI2NzY4
MWUyZWVlNGZlMDc0MzY4MDNlZTE5Y2U1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J1aWx0aW5zL1NldFByb3RvdHlwZS5qcwpAQCAtMCwwICsxLDQ2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNv
bT4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK2Z1bmN0aW9u
IGZvckVhY2goY2FsbGJhY2sgLyosIHRoaXNBcmcgKi8pCit7CisgICAgInVzZSBzdHJpY3QiOwor
CisgICAgaWYgKCFAaXNTZXQodGhpcykpCisgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJT
ZXQgb3BlcmF0aW9uIGNhbGxlZCBvbiBub24tU2V0IG9iamVjdCIpOworCisgICAgaWYgKHR5cGVv
ZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykKKyAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3Io
IlNldC5wcm90b3R5cGUuZm9yRWFjaCBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24iKTsKKwor
ICAgIHZhciB0aGlzQXJnID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1
bmRlZmluZWQ7CisgICAgdmFyIGl0ZXJhdG9yID0gQFNldEl0ZXJhdG9yKHRoaXMpOworCisgICAg
Ly8gVG8gYXZvaWQgb2JqZWN0IGFsbG9jYXRpb25zIGZvciBpdGVyYXRvciByZXN1bHQgb2JqZWN0
cywgd2UgcGFzcyB0aGUgcGxhY2Vob2xkZXIgdG8gdGhlIHNwZWNpYWwgIm5leHQiIGZ1bmN0aW9u
IGluIG9yZGVyIHRvIGZpbGwgdGhlIHJlc3VsdHMuCisgICAgdmFyIHZhbHVlID0gWyB1bmRlZmlu
ZWQgXTsKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGlmIChAc2V0SXRlcmF0b3JOZXh0LkBjYWxs
KGl0ZXJhdG9yLCB2YWx1ZSkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FsbGJhY2su
QGNhbGwodGhpc0FyZywgdmFsdWVbMF0sIHZhbHVlWzBdLCB0aGlzKTsKKyAgICB9Cit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAppbmRl
eCBiNTEwMjhmNDAxNGM1ODNlOWNjMWJhOGEzODhmMGIxZmVkOTMyNWFhLi4wYzVhOGEwODJkNDNj
OTRmN2U3ZjRlYWJkOWU5NDI2NmJkYzU1MmRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgKQEAgLTM2Miw2ICszNjIsMTIgQEAKICAg
ICBtYWNybyhpc0JvdW5kRnVuY3Rpb24pIFwKICAgICBtYWNybyhoYXNJbnN0YW5jZUJvdW5kRnVu
Y3Rpb24pIFwKICAgICBtYWNybyhpbnN0YW5jZU9mKSBcCisgICAgbWFjcm8oaXNTZXQpIFwKKyAg
ICBtYWNybyhpc01hcCkgXAorICAgIG1hY3JvKFNldEl0ZXJhdG9yKSBcCisgICAgbWFjcm8oc2V0
SXRlcmF0b3JOZXh0KSBcCisgICAgbWFjcm8oTWFwSXRlcmF0b3IpIFwKKyAgICBtYWNybyhtYXBJ
dGVyYXRvck5leHQpIFwKIAogCiBuYW1lc3BhY2UgSlNDIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuY3BwCmluZGV4IDJlODg2YmY5
NmIwOGQ5NTczNGFmMTdjMTJmNzg5YzBmZDMyZTMwZjIuLjdkY2QwN2I2ZmRhODI1NmFhOTJkZDRk
NjY0Y2U3OWMwMzBlMGJlZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmNwcApAQCAtMTMxLDExICsxMzEsMjUgQEAgdm9pZCBp
dGVyYXRvckNsb3NlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBpdGVyYXRvcikKICAgICB9CiB9
CiAKK3N0YXRpYyBjb25zdCBQcm9wZXJ0eU9mZnNldCBkb25lUHJvcGVydHlPZmZzZXQgPSAwOwor
c3RhdGljIGNvbnN0IFByb3BlcnR5T2Zmc2V0IHZhbHVlUHJvcGVydHlPZmZzZXQgPSAxOworCitT
dHJ1Y3R1cmUqIGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0U3RydWN0dXJlKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBTdHJ1Y3R1cmUqIGl0ZXJhdG9yUmVz
dWx0U3RydWN0dXJlID0gdm0ucHJvdG90eXBlTWFwLmVtcHR5T2JqZWN0U3RydWN0dXJlRm9yUHJv
dG90eXBlKGdsb2JhbE9iamVjdC5vYmplY3RQcm90b3R5cGUoKSwgSlNGaW5hbE9iamVjdDo6ZGVm
YXVsdElubGluZUNhcGFjaXR5KCkpOworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICBp
dGVyYXRvclJlc3VsdFN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9u
KHZtLCBpdGVyYXRvclJlc3VsdFN0cnVjdHVyZSwgdm0ucHJvcGVydHlOYW1lcy0+ZG9uZSwgMCwg
b2Zmc2V0KTsKKyAgICBSRUxFQVNFX0FTU0VSVChvZmZzZXQgPT0gZG9uZVByb3BlcnR5T2Zmc2V0
KTsKKyAgICBpdGVyYXRvclJlc3VsdFN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlU
cmFuc2l0aW9uKHZtLCBpdGVyYXRvclJlc3VsdFN0cnVjdHVyZSwgdm0ucHJvcGVydHlOYW1lcy0+
dmFsdWUsIDAsIG9mZnNldCk7CisgICAgUkVMRUFTRV9BU1NFUlQob2Zmc2V0ID09IHZhbHVlUHJv
cGVydHlPZmZzZXQpOworICAgIHJldHVybiBpdGVyYXRvclJlc3VsdFN0cnVjdHVyZTsKK30KKwog
SlNPYmplY3QqIGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSB2YWx1ZSwgYm9vbCBkb25lKQogewotICAgIEpTT2JqZWN0KiByZXN1bHRPYmplY3QgPSBj
b25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKLSAgICByZXN1bHRPYmplY3QtPnB1dERpcmVjdChl
eGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZG9uZSwganNCb29sZWFuKGRvbmUpKTsK
LSAgICByZXN1bHRPYmplY3QtPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkudmFsdWUsIHZhbHVlKTsKKyAgICBKU09iamVjdCogcmVzdWx0T2JqZWN0ID0gY29uc3Ry
dWN0RW1wdHlPYmplY3QoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5pdGVyYXRv
clJlc3VsdE9iamVjdFN0cnVjdHVyZSgpKTsKKyAgICByZXN1bHRPYmplY3QtPnB1dERpcmVjdChl
eGVjLT52bSgpLCBkb25lUHJvcGVydHlPZmZzZXQsIGpzQm9vbGVhbihkb25lKSk7CisgICAgcmVz
dWx0T2JqZWN0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgdmFsdWVQcm9wZXJ0eU9mZnNldCwgdmFs
dWUpOwogICAgIHJldHVybiByZXN1bHRPYmplY3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmgKaW5kZXggYTlhMzAwYzk0MjYy
ZGEyYmNkYTQ3NjAwMmUzMWZjNDU2Y2FmNzdiYS4uZmFlZTQ2YWUyZjBmYWFmOTA3ZjQ0YTljZWQ0
MWUxZDRkYTg1ZTkxNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SXRlcmF0b3JPcGVyYXRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SXRlcmF0b3JPcGVyYXRpb25zLmgKQEAgLTM5LDYgKzM5LDggQEAKIHZvaWQgaXRlcmF0b3JDbG9z
ZShFeGVjU3RhdGUqLCBKU1ZhbHVlIGl0ZXJhdG9yKTsKIEpTX0VYUE9SVF9QUklWQVRFIEpTT2Jq
ZWN0KiBjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBib29s
IGRvbmUpOwogCitTdHJ1Y3R1cmUqIGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0U3RydWN0dXJl
KFZNJiwgSlNHbG9iYWxPYmplY3QmKTsKKwogfQogCiAjZW5kaWYgLy8gIWRlZmluZWQoSXRlcmF0
b3JPcGVyYXRpb25zX2gpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbE9iamVjdC5jcHAKaW5kZXggN2Q4OTczZDNkYzJmOWE0NDVmNTc4ODAyZTI5MGRmYzkwODg0
OWIwYS4uNTI5N2Q2NDU3YTBmMmFhOGEzMjU2ZDcxYTg4OTU5MmQ3OGRiMjc2OCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcApAQCAtNDU5
LDEyICs0NTksNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojppbml0KFZNJiB2bSkKICAgICBGT1Jf
RUFDSF9TSU1QTEVfQlVJTFRJTl9UWVBFX1dJVEhfQ09OU1RSVUNUT1IoUFVUX0NPTlNUUlVDVE9S
X0ZPUl9TSU1QTEVfVFlQRSkKIAogI3VuZGVmIFBVVF9DT05TVFJVQ1RPUl9GT1JfU0lNUExFX1RZ
UEUKLSAgICBQcm90b3R5cGVNYXAmIHByb3RvdHlwZU1hcCA9IHZtLnByb3RvdHlwZU1hcDsKLSAg
ICBTdHJ1Y3R1cmUqIGl0ZXJhdG9yUmVzdWx0U3RydWN0dXJlID0gcHJvdG90eXBlTWFwLmVtcHR5
T2JqZWN0U3RydWN0dXJlRm9yUHJvdG90eXBlKG1fb2JqZWN0UHJvdG90eXBlLmdldCgpLCBKU0Zp
bmFsT2JqZWN0OjpkZWZhdWx0SW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0OwotICAgIGl0ZXJhdG9yUmVzdWx0U3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9w
ZXJ0eVRyYW5zaXRpb24odm0sIGl0ZXJhdG9yUmVzdWx0U3RydWN0dXJlLCB2bS5wcm9wZXJ0eU5h
bWVzLT5kb25lLCAwLCBvZmZzZXQpOwotICAgIGl0ZXJhdG9yUmVzdWx0U3RydWN0dXJlID0gU3Ry
dWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24odm0sIGl0ZXJhdG9yUmVzdWx0U3RydWN0dXJl
LCB2bS5wcm9wZXJ0eU5hbWVzLT52YWx1ZSwgMCwgb2Zmc2V0KTsKLSAgICBtX2l0ZXJhdG9yUmVz
dWx0U3RydWN0dXJlLnNldCh2bSwgdGhpcywgaXRlcmF0b3JSZXN1bHRTdHJ1Y3R1cmUpOworICAg
IG1faXRlcmF0b3JSZXN1bHRPYmplY3RTdHJ1Y3R1cmUuc2V0KHZtLCB0aGlzLCBjcmVhdGVJdGVy
YXRvclJlc3VsdE9iamVjdFN0cnVjdHVyZSh2bSwgKnRoaXMpKTsKICAgICAKICAgICBtX2V2YWxG
dW5jdGlvbi5zZXQodm0sIHRoaXMsIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgdGhpcywgMSwgdm0u
cHJvcGVydHlOYW1lcy0+ZXZhbC5zdHJpbmcoKSwgZ2xvYmFsRnVuY0V2YWwpKTsKICAgICBwdXRE
aXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+ZXZhbCwgbV9ldmFs
RnVuY3Rpb24uZ2V0KCksIERvbnRFbnVtKTsKQEAgLTU1OCw2ICs1NTMsMTQgQEAgdm9pZCBKU0ds
b2JhbE9iamVjdDo6aW5pdChWTSYgdm0pCiAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5w
cm9wZXJ0eU5hbWVzLT5Qcm9taXNlUHJpdmF0ZU5hbWUsIHByb21pc2VDb25zdHJ1Y3RvciwgRG9u
dEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAogICAgICAgICBHbG9iYWxQcm9wZXJ0eUlu
Zm8odm0ucHJvcGVydHlOYW1lcy0+SW50ZXJuYWxQcm9taXNlUHJpdmF0ZU5hbWUsIGludGVybmFs
UHJvbWlzZUNvbnN0cnVjdG9yLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCiAg
ICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5wcm9taXNlUGVuZGlu
Z1ByaXZhdGVOYW1lLCBqc051bWJlcihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNQcm9taXNlOjpT
dGF0dXM6OlBlbmRpbmcpKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAorCisg
ICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5pc1NldFByaXZhdGVO
YW1lLCBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIHRoaXMsIDEsIFN0cmluZygpLCBwcml2YXRlRnVu
Y0lzU2V0KSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAorICAgICAgICBHbG9i
YWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+U2V0SXRlcmF0b3JQcml2YXRlTmFtZSwg
SlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCB0aGlzLCAxLCBTdHJpbmcoKSwgcHJpdmF0ZUZ1bmNTZXRJ
dGVyYXRvciksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKKyAgICAgICAgR2xv
YmFsUHJvcGVydHlJbmZvKHZtLnByb3BlcnR5TmFtZXMtPnNldEl0ZXJhdG9yTmV4dFByaXZhdGVO
YW1lLCBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIHRoaXMsIDAsIFN0cmluZygpLCBwcml2YXRlRnVu
Y1NldEl0ZXJhdG9yTmV4dCksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKKyAg
ICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKHZtLnByb3BlcnR5TmFtZXMtPmlzTWFwUHJpdmF0ZU5h
bWUsIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgdGhpcywgMSwgU3RyaW5nKCksIHByaXZhdGVGdW5j
SXNNYXApLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCisgICAgICAgIEdsb2Jh
bFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5NYXBJdGVyYXRvclByaXZhdGVOYW1lLCBK
U0Z1bmN0aW9uOjpjcmVhdGUodm0sIHRoaXMsIDEsIFN0cmluZygpLCBwcml2YXRlRnVuY01hcEl0
ZXJhdG9yKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAorICAgICAgICBHbG9i
YWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+bWFwSXRlcmF0b3JOZXh0UHJpdmF0ZU5h
bWUsIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgdGhpcywgMCwgU3RyaW5nKCksIHByaXZhdGVGdW5j
TWFwSXRlcmF0b3JOZXh0KSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAorCiAg
ICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMo
KS5wcm9taXNlRnVsZmlsbGVkUHJpdmF0ZU5hbWUoKSwganNOdW1iZXIoc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KEpTUHJvbWlzZTo6U3RhdHVzOjpGdWxmaWxsZWQpKSwgRG9udEVudW0gfCBEb250RGVs
ZXRlIHwgUmVhZE9ubHkpLAogICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlO
YW1lcy0+YnVpbHRpbk5hbWVzKCkucHJvbWlzZVJlamVjdGVkUHJpdmF0ZU5hbWUoKSwganNOdW1i
ZXIoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTUHJvbWlzZTo6U3RhdHVzOjpSZWplY3RlZCkpLCBE
b250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCiAgICAgICAgIEdsb2JhbFByb3BlcnR5
SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS50b0xlbmd0aFByaXZhdGVOYW1l
KCksIHByaXZhdGVGdW5jVG9MZW5ndGgsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5
KSwKQEAgLTg5Miw2ICs4OTUsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgdmlzaXRvci5hcHBlbmQo
JnRoaXNPYmplY3QtPm1fc3ltYm9sT2JqZWN0U3RydWN0dXJlKTsKICAgICB2aXNpdG9yLmFwcGVu
ZCgmdGhpc09iamVjdC0+bV9yZWdFeHBTdHJ1Y3R1cmUpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0
aGlzT2JqZWN0LT5tX2dlbmVyYXRvckZ1bmN0aW9uU3RydWN0dXJlKTsKKyAgICB2aXNpdG9yLmFw
cGVuZCgmdGhpc09iamVjdC0+bV9pdGVyYXRvclJlc3VsdE9iamVjdFN0cnVjdHVyZSk7CiAgICAg
dmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fcmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJl
KTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9tb2R1bGVSZWNvcmRTdHJ1Y3R1
cmUpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX21vZHVsZU5hbWVzcGFjZU9i
amVjdFN0cnVjdHVyZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuaAppbmRleCA4YjEzNzRiZjE1ZGIyMDI2MWVhMDAzZDY0NGFhY2YwYzY5ZmZjNzc5
Li40ZjU3ZTFmNTI4OTMwMmRhMTA4MzFjZGM4MWQyMGVlYTBhMmE5NzcwIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKQEAgLTI3MSw3ICsyNzEs
NyBAQCBjbGFzcyBKU0dsb2JhbE9iamVjdCA6IHB1YmxpYyBKU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0IHsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2NvbnNvbGVTdHJ1Y3R1cmU7CiAg
ICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9kb2xsYXJWTVN0cnVjdHVyZTsKICAgICBXcml0
ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2ludGVybmFsRnVuY3Rpb25TdHJ1Y3R1cmU7Ci0gICAgV3Jp
dGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9pdGVyYXRvclJlc3VsdFN0cnVjdHVyZTsKKyAgICBXcml0
ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2l0ZXJhdG9yUmVzdWx0T2JqZWN0U3RydWN0dXJlOwogICAg
IFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fcmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlOwog
ICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fbW9kdWxlUmVjb3JkU3RydWN0dXJlOwogICAg
IFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fbW9kdWxlTmFtZXNwYWNlT2JqZWN0U3RydWN0dXJl
OwpAQCAtNTE5LDggKzUxOSw3IEBAIGNsYXNzIEpTR2xvYmFsT2JqZWN0IDogcHVibGljIEpTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3QgewogICAgIFN0cnVjdHVyZSogc2V0U3RydWN0dXJlKCkgY29u
c3QgeyByZXR1cm4gbV9zZXRTdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICBTdHJ1Y3R1cmUqIHN0cmlu
Z09iamVjdFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nT2JqZWN0U3RydWN0dXJl
LmdldCgpOyB9CiAgICAgU3RydWN0dXJlKiBzeW1ib2xPYmplY3RTdHJ1Y3R1cmUoKSBjb25zdCB7
IHJldHVybiBtX3N5bWJvbE9iamVjdFN0cnVjdHVyZS5nZXQoKTsgfQotICAgIFN0cnVjdHVyZSog
aXRlcmF0b3JSZXN1bHRTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX2l0ZXJhdG9yUmVzdWx0
U3RydWN0dXJlLmdldCgpOyB9Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBpdGVyYXRvclJlc3VsdFN0
cnVjdHVyZU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwg
bV9pdGVyYXRvclJlc3VsdFN0cnVjdHVyZSk7IH0KKyAgICBTdHJ1Y3R1cmUqIGl0ZXJhdG9yUmVz
dWx0T2JqZWN0U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9pdGVyYXRvclJlc3VsdE9iamVj
dFN0cnVjdHVyZS5nZXQoKTsgfQogICAgIFN0cnVjdHVyZSogcmVnRXhwTWF0Y2hlc0FycmF5U3Ry
dWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUuZ2V0
KCk7IH0KICAgICBTdHJ1Y3R1cmUqIG1vZHVsZVJlY29yZFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbW9kdWxlUmVjb3JkU3RydWN0dXJlLmdldCgpOyB9CiAgICAgU3RydWN0dXJlKiBtb2R1
bGVOYW1lc3BhY2VPYmplY3RTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX21vZHVsZU5hbWVz
cGFjZU9iamVjdFN0cnVjdHVyZS5nZXQoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL01hcFByb3RvdHlwZS5jcHAKaW5kZXggYmU3OTBkZDFiODQ2ODdjYWJmYjQ1ZGIzY2Fl
OTcxMDc1NTY0ZjAxMC4uYzkwMTI4NWJlNDU0ZTQyYzZjNWVlNGRlMmY5YTcwMTgwZTg3Y2FmYSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUuY3BwCkBA
IC0zMCwyMCArMzAsMjkgQEAKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkV4Y2VwdGlv
bkhlbHBlcnMuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKKyNpbmNsdWRlICJJdGVyYXRv
ck9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUg
IkpTRnVuY3Rpb25JbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNNYXAuaCIKICNpbmNsdWRlICJKU01h
cEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiTG9va3VwLmgiCiAjaW5jbHVkZSAiTWFwRGF0YUlubGlu
ZXMuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAKKyNpbmNsdWRlICJNYXBQcm90
b3R5cGUubHV0LmgiCisKIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gTWFwUHJv
dG90eXBlOjpzX2luZm8gPSB7ICJNYXAiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKE1hcFByb3RvdHlwZSkgfTsKIAorLyogU291cmNlIGZvciBNYXBQcm90b3R5cGUubHV0
LmgKK0BiZWdpbiBtYXBQcm90b3R5cGVUYWJsZQorICBmb3JFYWNoICAgSlNCdWlsdGluICBEb250
RW51bXxGdW5jdGlvbiAwCitAZW5kCisqLworCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBtYXBQcm90b0Z1bmNDbGVhcihFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY0RlbGV0ZShFeGVjU3RhdGUqKTsKLXN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY0ZvckVhY2goRXhlY1N0
YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNH
ZXQoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQ
cm90b0Z1bmNIYXMoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBtYXBQcm90b0Z1bmNTZXQoRXhlY1N0YXRlKik7CkBAIC02MSw3ICs3MCw2IEBAIHZvaWQg
TWFwUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QpCiAKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmNs
ZWFyLCBtYXBQcm90b0Z1bmNDbGVhciwgRG9udEVudW0sIDApOwogICAgIEpTQ19OQVRJVkVfRlVO
Q1RJT04odm0ucHJvcGVydHlOYW1lcy0+ZGVsZXRlS2V5d29yZCwgbWFwUHJvdG9GdW5jRGVsZXRl
LCBEb250RW51bSwgMSk7Ci0gICAgSlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVz
LT5mb3JFYWNoLCBtYXBQcm90b0Z1bmNGb3JFYWNoLCBEb250RW51bSwgMSk7CiAgICAgSlNDX05B
VElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5nZXQsIG1hcFByb3RvRnVuY0dldCwgRG9u
dEVudW0sIDEpOwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+aGFz
LCBtYXBQcm90b0Z1bmNIYXMsIERvbnRFbnVtLCAxKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9O
KHZtLnByb3BlcnR5TmFtZXMtPnNldCwgbWFwUHJvdG9GdW5jU2V0LCBEb250RW51bSwgMik7CkBA
IC04Myw2ICs5MSwxMSBAQCB2b2lkIE1hcFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAgIHB1dERpcmVjdE5vbkluZGV4QWNj
ZXNzb3Iodm0sIHZtLnByb3BlcnR5TmFtZXMtPnNpemUsIGFjY2Vzc29yLCBEb250RW51bSB8IEFj
Y2Vzc29yKTsKIH0KIAorYm9vbCBNYXBQcm90b3R5cGU6OmdldE93blByb3BlcnR5U2xvdChKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rpb25TbG90
PEJhc2U+KGV4ZWMsIG1hcFByb3RvdHlwZVRhYmxlLCBqc0Nhc3Q8TWFwUHJvdG90eXBlKj4ob2Jq
ZWN0KSwgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKwogQUxXQVlTX0lOTElORSBzdGF0aWMgSlNN
YXAqIGdldE1hcChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSB0aGlzVmFsdWUpCiB7CiAg
ICAgaWYgKCF0aGlzVmFsdWUuaXNPYmplY3QoKSkgewpAQCAtMTE0LDQ0ICsxMjcsNiBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY0RlbGV0ZShDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihtYXAtPnJlbW92
ZShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpKSk7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jRm9yRWFjaChDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKLXsKLSAgICBKU01hcCogbWFwID0gZ2V0TWFwKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlz
VmFsdWUoKSk7Ci0gICAgaWYgKCFtYXApCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7Ci0gICAgSlNWYWx1ZSBjYWxsQmFjayA9IGNhbGxGcmFtZS0+YXJndW1l
bnQoMCk7Ci0gICAgQ2FsbERhdGEgY2FsbERhdGE7Ci0gICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBn
ZXRDYWxsRGF0YShjYWxsQmFjaywgY2FsbERhdGEpOwotICAgIGlmIChjYWxsVHlwZSA9PSBDYWxs
VHlwZU5vbmUpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3Io
Y2FsbEZyYW1lLCBXVEY6OkFTQ0lJTGl0ZXJhbCgiTWFwLnByb3RvdHlwZS5mb3JFYWNoIGNhbGxl
ZCB3aXRob3V0IGNhbGxiYWNrIikpKTsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGNhbGxGcmFt
ZS0+YXJndW1lbnQoMSk7Ci0gICAgVk0qIHZtID0gJmNhbGxGcmFtZS0+dm0oKTsKLSAgICBKU01h
cEl0ZXJhdG9yKiBpdGVyYXRvciA9IEpTTWFwSXRlcmF0b3I6OmNyZWF0ZSgqdm0sIGNhbGxGcmFt
ZS0+Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgpLT5tYXBJdGVyYXRvclN0cnVjdHVyZSgpLCBtYXAs
IE1hcEl0ZXJhdGVLZXlWYWx1ZSk7Ci0gICAgSlNWYWx1ZSBrZXksIHZhbHVlOwotICAgIGlmIChj
YWxsVHlwZSA9PSBDYWxsVHlwZUpTKSB7Ci0gICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0g
anNDYXN0PEpTRnVuY3Rpb24qPihjYWxsQmFjayk7Ci0gICAgICAgIENhY2hlZENhbGwgY2FjaGVk
Q2FsbChjYWxsRnJhbWUsIGZ1bmN0aW9uLCAzKTsKLSAgICAgICAgd2hpbGUgKGl0ZXJhdG9yLT5u
ZXh0S2V5VmFsdWUoa2V5LCB2YWx1ZSkgJiYgIXZtLT5leGNlcHRpb24oKSkgewotICAgICAgICAg
ICAgY2FjaGVkQ2FsbC5zZXRUaGlzKHRoaXNWYWx1ZSk7Ci0gICAgICAgICAgICBjYWNoZWRDYWxs
LnNldEFyZ3VtZW50KDAsIHZhbHVlKTsKLSAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1l
bnQoMSwga2V5KTsKLSAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMiwgbWFwKTsK
LSAgICAgICAgICAgIGNhY2hlZENhbGwuY2FsbCgpOwotICAgICAgICB9Ci0gICAgICAgIGl0ZXJh
dG9yLT5maW5pc2goKTsKLSAgICB9IGVsc2UgewotICAgICAgICB3aGlsZSAoaXRlcmF0b3ItPm5l
eHRLZXlWYWx1ZShrZXksIHZhbHVlKSAmJiAhdm0tPmV4Y2VwdGlvbigpKSB7Ci0gICAgICAgICAg
ICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwotICAgICAgICAgICAgYXJncy5hcHBlbmQodmFs
dWUpOwotICAgICAgICAgICAgYXJncy5hcHBlbmQoa2V5KTsKLSAgICAgICAgICAgIGFyZ3MuYXBw
ZW5kKG1hcCk7Ci0gICAgICAgICAgICBKU0M6OmNhbGwoY2FsbEZyYW1lLCBjYWxsQmFjaywgY2Fs
bFR5cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3MpOwotICAgICAgICB9Ci0gICAgICAgIGl0
ZXJhdG9yLT5maW5pc2goKTsKLSAgICB9Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKLX0KLQogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1
bmNHZXQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgSlNNYXAqIG1hcCA9IGdldE1hcChj
YWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwpAQCAtMjEwLDQgKzE4NSwzMSBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY0tleXMoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU01hcEl0ZXJhdG9yOjpjcmVh
dGUoY2FsbEZyYW1lLT52bSgpLCBjYWxsRnJhbWUtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKS0+
bWFwSXRlcmF0b3JTdHJ1Y3R1cmUoKSwgdGhpc09iaiwgTWFwSXRlcmF0ZUtleSkpOwogfQogCitF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByaXZhdGVGdW5jSXNNYXAoRXhlY1N0YXRlKiBl
eGVjKQoreworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGpzRHluYW1pY0Nh
c3Q8SlNNYXAqPihleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSkpKTsKK30KKworRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBwcml2YXRlRnVuY01hcEl0ZXJhdG9yKEV4ZWNTdGF0ZSogZXhl
YykKK3sKKyAgICBBU1NFUlQoanNEeW5hbWljQ2FzdDxKU01hcCo+KGV4ZWMtPnVuY2hlY2tlZEFy
Z3VtZW50KDApKSk7CisgICAgSlNNYXAqIG1hcCA9IGpzQ2FzdDxKU01hcCo+KGV4ZWMtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTTWFwSXRlcmF0
b3I6OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCktPm1h
cEl0ZXJhdG9yU3RydWN0dXJlKCksIG1hcCwgTWFwSXRlcmF0ZUtleVZhbHVlKSk7Cit9CisKK0Vu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmNNYXBJdGVyYXRvck5leHQoRXhl
Y1N0YXRlKiBleGVjKQoreworICAgIEFTU0VSVChqc0R5bmFtaWNDYXN0PEpTTWFwSXRlcmF0b3Iq
PihleGVjLT50aGlzVmFsdWUoKSkpOworICAgIEpTTWFwSXRlcmF0b3IqIGl0ZXJhdG9yID0ganND
YXN0PEpTTWFwSXRlcmF0b3IqPihleGVjLT50aGlzVmFsdWUoKSk7CisgICAgSlNWYWx1ZSBrZXks
IHZhbHVlOworICAgIGlmIChpdGVyYXRvci0+bmV4dEtleVZhbHVlKGtleSwgdmFsdWUpKSB7Cisg
ICAgICAgIEpTQXJyYXkqIHJlc3VsdEFycmF5ID0ganNDYXN0PEpTQXJyYXkqPihleGVjLT51bmNo
ZWNrZWRBcmd1bWVudCgwKSk7CisgICAgICAgIHJlc3VsdEFycmF5LT5wdXREaXJlY3RJbmRleChl
eGVjLCAwLCBrZXkpOworICAgICAgICByZXN1bHRBcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywg
MSwgdmFsdWUpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxz
ZSkpOworICAgIH0KKyAgICBpdGVyYXRvci0+ZmluaXNoKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL01hcFByb3RvdHlwZS5oCmluZGV4IGVhYTU4MjUzNzlmYTZmNjcwM2M5N2EzYzEz
Mzg3MDQxY2NhZWQ1ODEuLjNlNzI1NjdkYjMxOTFkZWRiM2Y2MGZjMTZiY2UxYjExOWU5OGQ1ZjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcFByb3RvdHlwZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcFByb3RvdHlwZS5oCkBAIC0z
NCw2ICszNCw4IEBAIGNsYXNzIE1hcFByb3RvdHlwZSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0
IHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKIAorICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3Bl
cnR5U2xvdCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworCiAgICAgc3RhdGljIE1hcFByb3RvdHlw
ZSogY3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCiAgICAgewogICAgICAgICBNYXBQcm90b3R5cGUqIHByb3RvdHlwZSA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPE1hcFByb3RvdHlwZT4odm0uaGVhcCkpIE1hcFByb3Rv
dHlwZSh2bSwgc3RydWN0dXJlKTsKQEAgLTU0LDggKzU2LDEzIEBAIGNsYXNzIE1hcFByb3RvdHlw
ZSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICB7CiAgICAgfQogICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oVk0mLCBKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90Jik7CiB9OwogCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByaXZhdGVGdW5j
SXNNYXAoRXhlY1N0YXRlKik7CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByaXZhdGVG
dW5jTWFwSXRlcmF0b3IoRXhlY1N0YXRlKik7CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHByaXZhdGVGdW5jTWFwSXRlcmF0b3JOZXh0KEV4ZWNTdGF0ZSopOworCiB9CiAKICNlbmRpZiAv
LyAhZGVmaW5lZChNYXBQcm90b3R5cGVfaCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1NldFByb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TZXRQcm90b3R5cGUuY3BwCmluZGV4IGRkZWVlMzdiNmY0MjhlMDczYWYxZWZiMDExMzY5
ZjRhMjc5MDU2YTkuLjEyMDE0ZjMxNzExZGE1ZGI1YTgwMjhmYmE4MTY2M2UzOTkzMjAzYmIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldFByb3RvdHlwZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmNwcApAQCAt
MzAsMjEgKzMwLDMwIEBACiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFeGNlcHRpb25I
ZWxwZXJzLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCisjaW5jbHVkZSAiSXRlcmF0b3JP
cGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJK
U0Z1bmN0aW9uSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTU2V0LmgiCiAjaW5jbHVkZSAiSlNTZXRJ
dGVyYXRvci5oIgorI2luY2x1ZGUgIkxvb2t1cC5oIgogI2luY2x1ZGUgIk1hcERhdGFJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCisjaW5jbHVkZSAiU2V0UHJvdG90
eXBlLmx1dC5oIgorCiBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIFNldFByb3Rv
dHlwZTo6c19pbmZvID0geyAiU2V0IiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9U
QUJMRShTZXRQcm90b3R5cGUpIH07CiAKKy8qIFNvdXJjZSBmb3IgU2V0SXRlcmF0b3JQcm90b3R5
cGUubHV0LmgKK0BiZWdpbiBzZXRQcm90b3R5cGVUYWJsZQorICBmb3JFYWNoICAgSlNCdWlsdGlu
ICBEb250RW51bXxGdW5jdGlvbiAwCitAZW5kCisqLworCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNBZGQoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNDbGVhcihFeGVjU3RhdGUqKTsKIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHNldFByb3RvRnVuY0RlbGV0ZShFeGVj
U3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHNldFByb3RvRnVu
Y0ZvckVhY2goRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzZXRQcm90b0Z1bmNIYXMoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNWYWx1ZXMoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNFbnRyaWVzKEV4ZWNTdGF0ZSopOwpA
QCAtNjEsNyArNzAsNiBAQCB2b2lkIFNldFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT04o
dm0ucHJvcGVydHlOYW1lcy0+YWRkLCBzZXRQcm90b0Z1bmNBZGQsIERvbnRFbnVtLCAxKTsKICAg
ICBKU0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmNsZWFyLCBzZXRQcm90b0Z1
bmNDbGVhciwgRG9udEVudW0sIDApOwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVy
dHlOYW1lcy0+ZGVsZXRlS2V5d29yZCwgc2V0UHJvdG9GdW5jRGVsZXRlLCBEb250RW51bSwgMSk7
Ci0gICAgSlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5mb3JFYWNoLCBzZXRQ
cm90b0Z1bmNGb3JFYWNoLCBEb250RW51bSwgMSk7CiAgICAgSlNDX05BVElWRV9GVU5DVElPTih2
bS5wcm9wZXJ0eU5hbWVzLT5oYXMsIHNldFByb3RvRnVuY0hhcywgRG9udEVudW0sIDEpOwogICAg
IEpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+ZW50cmllcywgc2V0UHJvdG9G
dW5jRW50cmllcywgRG9udEVudW0sIDApOwogCkBAIC03Nyw2ICs4NSwxMiBAQCB2b2lkIFNldFBy
b3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQogICAgIHB1dERpcmVjdE5vbkluZGV4QWNjZXNzb3Iodm0sIHZtLnByb3BlcnR5TmFtZXMt
PnNpemUsIGFjY2Vzc29yLCBEb250RW51bSB8IEFjY2Vzc29yKTsKIH0KIAorYm9vbCBTZXRQcm90
b3R5cGU6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAg
ICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rpb25TbG90PEJhc2U+KGV4ZWMsIHNldFByb3RvdHlwZVRh
YmxlLCBqc0Nhc3Q8U2V0UHJvdG90eXBlKj4ob2JqZWN0KSwgcHJvcGVydHlOYW1lLCBzbG90KTsK
K30KKworCiBBTFdBWVNfSU5MSU5FIHN0YXRpYyBKU1NldCogZ2V0U2V0KENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBKU1ZhbHVlIHRoaXNWYWx1ZSkKIHsKICAgICBpZiAoIXRoaXNWYWx1ZS5pc09iamVj
dCgpKSB7CkBAIC0xMTgsNDQgKzEzMiw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
c2V0UHJvdG9GdW5jRGVsZXRlKENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNCb29sZWFuKHNldC0+cmVtb3ZlKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5h
cmd1bWVudCgwKSkpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90
b0Z1bmNGb3JFYWNoKENhbGxGcmFtZSogY2FsbEZyYW1lKQotewotICAgIEpTU2V0KiBzZXQgPSBn
ZXRTZXQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKLSAgICBpZiAoIXNldCkK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBKU1Zh
bHVlIGNhbGxCYWNrID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKLSAgICBDYWxsRGF0YSBjYWxs
RGF0YTsKLSAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGNhbGxCYWNrLCBjYWxs
RGF0YSk7Ci0gICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUsIFdURjo6QVNDSUlMaXRl
cmFsKCJTZXQucHJvdG90eXBlLmZvckVhY2ggY2FsbGVkIHdpdGhvdXQgY2FsbGJhY2siKSkpOwot
ICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gY2FsbEZyYW1lLT5hcmd1bWVudCgxKTsKLSAgICBWTSog
dm0gPSAmY2FsbEZyYW1lLT52bSgpOwotICAgIEpTU2V0SXRlcmF0b3IqIGl0ZXJhdG9yID0gSlNT
ZXRJdGVyYXRvcjo6Y3JlYXRlKCp2bSwgY2FsbEZyYW1lLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0
KCktPnNldEl0ZXJhdG9yU3RydWN0dXJlKCksIHNldCwgU2V0SXRlcmF0ZUtleSk7Ci0gICAgSlNW
YWx1ZSBrZXk7Ci0gICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlSlMpIHsKLSAgICAgICAgSlNG
dW5jdGlvbiogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxCYWNrKTsKLSAgICAg
ICAgQ2FjaGVkQ2FsbCBjYWNoZWRDYWxsKGNhbGxGcmFtZSwgZnVuY3Rpb24sIDMpOwotICAgICAg
ICB3aGlsZSAoaXRlcmF0b3ItPm5leHQoY2FsbEZyYW1lLCBrZXkpICYmICF2bS0+ZXhjZXB0aW9u
KCkpIHsKLSAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0VGhpcyh0aGlzVmFsdWUpOwotICAgICAg
ICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgwLCBrZXkpOwotICAgICAgICAgICAgY2FjaGVk
Q2FsbC5zZXRBcmd1bWVudCgxLCBrZXkpOwotICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1
bWVudCgyLCBzZXQpOwotICAgICAgICAgICAgY2FjaGVkQ2FsbC5jYWxsKCk7Ci0gICAgICAgIH0K
LSAgICAgICAgaXRlcmF0b3ItPmZpbmlzaCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHdoaWxl
IChpdGVyYXRvci0+bmV4dChjYWxsRnJhbWUsIGtleSkgJiYgIXZtLT5leGNlcHRpb24oKSkgewot
ICAgICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKLSAgICAgICAgICAgIGFyZ3Mu
YXBwZW5kKGtleSk7Ci0gICAgICAgICAgICBhcmdzLmFwcGVuZChrZXkpOwotICAgICAgICAgICAg
YXJncy5hcHBlbmQoc2V0KTsKLSAgICAgICAgICAgIEpTQzo6Y2FsbChjYWxsRnJhbWUsIGNhbGxC
YWNrLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncyk7Ci0gICAgICAgIH0KLSAg
ICAgICAgaXRlcmF0b3ItPmZpbmlzaCgpOwotICAgIH0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwotfQotCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHNl
dFByb3RvRnVuY0hhcyhDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBKU1NldCogc2V0ID0g
Z2V0U2V0KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CkBAIC0xODgsNCArMTY0
LDMwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc2V0UHJvdG9GdW5jRW50cmllcyhD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTU2V0SXRl
cmF0b3I6OmNyZWF0ZShjYWxsRnJhbWUtPnZtKCksIGNhbGxGcmFtZS0+Y2FsbGVlKCktPmdsb2Jh
bE9iamVjdCgpLT5zZXRJdGVyYXRvclN0cnVjdHVyZSgpLCB0aGlzT2JqLCBTZXRJdGVyYXRlS2V5
VmFsdWUpKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcml2YXRlRnVuY0lz
U2V0KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbihqc0R5bmFtaWNDYXN0PEpTU2V0Kj4oZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpKSk7
Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmNTZXRJdGVyYXRv
cihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgQVNTRVJUKGpzRHluYW1pY0Nhc3Q8SlNTZXQqPihl
eGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSkpOworICAgIEpTU2V0KiBzZXQgPSBqc0Nhc3Q8SlNT
ZXQqPihleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShKU1NldEl0ZXJhdG9yOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+Y2FsbGVlKCktPmds
b2JhbE9iamVjdCgpLT5zZXRJdGVyYXRvclN0cnVjdHVyZSgpLCBzZXQsIFNldEl0ZXJhdGVLZXkp
KTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcml2YXRlRnVuY1NldEl0ZXJh
dG9yTmV4dChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgQVNTRVJUKGpzRHluYW1pY0Nhc3Q8SlNT
ZXRJdGVyYXRvcio+KGV4ZWMtPnRoaXNWYWx1ZSgpKSk7CisgICAgSlNTZXRJdGVyYXRvciogaXRl
cmF0b3IgPSBqc0Nhc3Q8SlNTZXRJdGVyYXRvcio+KGV4ZWMtPnRoaXNWYWx1ZSgpKTsKKyAgICBK
U1ZhbHVlIHJlc3VsdDsKKyAgICBpZiAoaXRlcmF0b3ItPm5leHQoZXhlYywgcmVzdWx0KSkgewor
ICAgICAgICBKU0FycmF5KiByZXN1bHRBcnJheSA9IGpzQ2FzdDxKU0FycmF5Kj4oZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMCkpOworICAgICAgICByZXN1bHRBcnJheS0+cHV0RGlyZWN0SW5kZXgo
ZXhlYywgMCwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4oZmFsc2UpKTsKKyAgICB9CisgICAgaXRlcmF0b3ItPmZpbmlzaCgpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TZXRQcm90b3R5cGUuaAppbmRleCBiZGY5MGY0MzMyNzUyMjhkNjQ5
NzZhNGM5ZDA1YzgwNTU3NjQzZjAwLi5lMjcxOWE2MmFjN2FjZmQwNmVmZTA0Mzc0YWU2MjE0YmFk
NmQ3NGQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRQcm90
b3R5cGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRQcm90b3R5cGUu
aApAQCAtMzQsNiArMzQsOCBAQCBjbGFzcyBTZXRQcm90b3R5cGUgOiBwdWJsaWMgSlNOb25GaW5h
bE9iamVjdCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CiAK
KyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eVNsb3QgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKKwogICAgIHN0YXRpYyBTZXRQ
cm90b3R5cGUqIGNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0
cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKICAgICAgICAgU2V0UHJvdG90eXBlKiBwcm90b3R5
cGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxTZXRQcm90b3R5cGU+KHZtLmhlYXApKSBT
ZXRQcm90b3R5cGUodm0sIHN0cnVjdHVyZSk7CkBAIC01NCw4ICs1NiwxMyBAQCBjbGFzcyBTZXRQ
cm90b3R5cGUgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiAgICAgewogICAgIH0KICAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0aWMgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUs
IFByb3BlcnR5U2xvdCYpOwogfTsKIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcml2
YXRlRnVuY0lzU2V0KEV4ZWNTdGF0ZSopOworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBw
cml2YXRlRnVuY1NldEl0ZXJhdG9yKEV4ZWNTdGF0ZSopOworRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBwcml2YXRlRnVuY1NldEl0ZXJhdG9yTmV4dChFeGVjU3RhdGUqKTsKKwogfQogCiAj
ZW5kaWYgLy8gIWRlZmluZWQoU2V0UHJvdG90eXBlX2gpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZDNiODhiOWY0NGJlMDJm
ZDAwNDM1ZGI4NTJjZjU4ZmUwNzIxNGVjNy4uNTE0MmEwMmU5ZTFmYThlNjgxZjFiNjVkOGY5NzE0
ODNhMzU2YjJlYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDE2LTAxLTA1ICBZdXN1a2UgU3V6
dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIFtKU0NdIEl0ZXJhdGluZyBv
dmVyIGEgU2V0L01hcCBpcyB0b28gc2xvdworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTUyNjkxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkIHJlZ3Jlc3MgdGVzdHMuCisKKyAgICAgICAgKiBqcy9yZWdy
ZXNzL21hcC1mb3ItZWFjaC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jl
c3MvbWFwLWZvci1lYWNoLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvbWFwLWZv
ci1vZi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvbWFwLWZvci1v
Zi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9tYXAtZm9y
LWVhY2guanM6IEFkZGVkLgorICAgICAgICAoY3JlYXRlTWFwKToKKyAgICAgICAgKGkubWFwLmZv
ckVhY2gpOgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL21hcC1mb3Itb2YuanM6
IEFkZGVkLgorICAgICAgICAoY3JlYXRlTWFwKToKKyAgICAgICAgKiBqcy9yZWdyZXNzL3Njcmlw
dC10ZXN0cy9zZXQtZm9yLWVhY2guanM6IEFkZGVkLgorICAgICAgICAoc2V0IGZvckVhY2gpOgor
ICAgICAgICAoc2V0IGNyZWF0ZVNldCk6CisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVz
dHMvc2V0LWZvci1vZi5qczogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9zZXQtZm9yLWVh
Y2gtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3NldC1mb3ItZWFj
aC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3NldC1mb3Itb2YtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3NldC1mb3Itb2YuaHRtbDogQWRkZWQu
CisKIDIwMTYtMDEtMDQgIFJ5YW4gSGFkZGFkICA8cnlhbmhhZGRhZEBhcHBsZS5jb20+CiAKICAg
ICAgICAgU2tpcCBmYWlsaW5nIHRlc3QgZmFzdC9hbmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24t
ZnJhbWUtZGlzYWJsZWQuaHRtbCBvbiBpb3Mtc2ltdWxhdG9yCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL21hcC1mb3ItZWFjaC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9q
cy9yZWdyZXNzL21hcC1mb3ItZWFjaC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTM5N2RjNjRj
MmQ0NzYzMTA0ODcxNmM5OWIzZjliMGRiMGZkOGQ2MwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2pzL3JlZ3Jlc3MvbWFwLWZvci1lYWNoLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEw
IEBACitKU1JlZ3Jlc3MvbWFwLWZvci1lYWNoCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4K
KworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL21hcC1mb3ItZWFjaC5odG1sIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9tYXAtZm9yLWVh
Y2guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40ZmYxNzUxMWE2OWM4ZGNlZTM5MmIzNmYwZWI5MmY4NjllNmRk
ZjNkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9tYXAtZm9yLWVh
Y2guaHRtbApAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYv
L0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291
cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9InNjcmlwdC10ZXN0cy9tYXAtZm9yLWVhY2guanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9tYXAtZm9yLW9mLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvbWFwLWZvci1vZi1leHBlY3RlZC50eHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNGU0YjM4NDdmNWYzZTNiNDdkNzQ3ZjAxMzA3MjJiNGVhYzQ3OWFkZAotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvbWFwLWZvci1vZi1leHBlY3Rl
ZC50eHQKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL21hcC1mb3Itb2YKKworT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkg
IlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2pzL3JlZ3Jlc3MvbWFwLWZvci1vZi5odG1sIGIvTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9tYXAtZm9yLW9mLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2FjOWU1YjM2OTZmOTczOGJlZmNiOTdi
MGU3Y2VmZDlhNGIyNTMwYwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jl
c3MvbWFwLWZvci1vZi5odG1sCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJ
QyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL21hcC1mb3Itb2YuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQt
dGVzdHMvbWFwLWZvci1lYWNoLmpzIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVz
dHMvbWFwLWZvci1lYWNoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI0NTk4NTJkNzVlMjJiNmM3ZDI5YTc2MjYy
YTI3OTA0NjkyYTZmZDAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L3NjcmlwdC10ZXN0cy9tYXAtZm9yLWVhY2guanMKQEAgLTAsMCArMSwyMyBAQAordmFyIGdsb2Jh
bFN1bSA9IDA7CisoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIGNyZWF0ZU1hcChjb3VudCkg
eworICAgICAgICB2YXIgbWFwID0gbmV3IE1hcDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKSB7CisgICAgICAgICAgICBtYXAuc2V0KGksIGkpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBtYXA7CisgICAgfQorCisgICAgdmFyIENPVU5UID0gMjAwMDsKKyAgICB2
YXIgbWFwID0gY3JlYXRlTWFwKENPVU5UKTsKKyAgICB2YXIgc3VtID0gMDsKKworICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgMWUyOyArK2kpIHsKKyAgICAgICAgc3VtID0gMDsKKyAgICAgICAgbWFw
LmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHsKKyAgICAgICAgICAgIHN1bSArPSBrZXk7
CisgICAgICAgIH0pOworICAgICAgICBnbG9iYWxTdW0gPSBzdW07CisgICAgfQorICAgIHJldHVy
biBzdW07Cit9KCkpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQt
dGVzdHMvbWFwLWZvci1vZi5qcyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3Rz
L21hcC1mb3Itb2YuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjllMTFiN2RiMGM0ZjUwNDZjNDNjNDM2NzEyYTVi
ZDc5ODE5OGM0NwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2Ny
aXB0LXRlc3RzL21hcC1mb3Itb2YuanMKQEAgLTAsMCArMSwyMyBAQAordmFyIGdsb2JhbFN1bSA9
IDA7CisoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIGNyZWF0ZU1hcChjb3VudCkgeworICAg
ICAgICB2YXIgbWFwID0gbmV3IE1hcDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKSB7CisgICAgICAgICAgICBtYXAuc2V0KGksIGkpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBtYXA7CisgICAgfQorCisgICAgdmFyIENPVU5UID0gMjAwMDsKKyAgICB2YXIgbWFw
ID0gY3JlYXRlTWFwKENPVU5UKTsKKyAgICB2YXIgc3VtID0gMDsKKworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgMWUyOyArK2kpIHsKKyAgICAgICAgc3VtID0gMDsKKyAgICAgICAgZm9yICh2YXIg
aXRlbSBvZiBtYXApIHsKKyAgICAgICAgICAgIHN1bSArPSBpdGVtWzBdOworICAgICAgICB9Cisg
ICAgICAgIGdsb2JhbFN1bSA9IHN1bTsKKyAgICB9CisgICAgcmV0dXJuIHN1bTsKK30oKSk7CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9zZXQtZm9yLWVh
Y2guanMgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9zZXQtZm9yLWVhY2gu
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMDBkNjY1MzI2NzY5YWEwODlmMDk2YWNhNDEzZDM3NGZlMWVlOGRlNwot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3Nl
dC1mb3ItZWFjaC5qcwpAQCAtMCwwICsxLDIzIEBACit2YXIgZ2xvYmFsU3VtID0gMDsKKyhmdW5j
dGlvbiAoKSB7CisgICAgZnVuY3Rpb24gY3JlYXRlU2V0KGNvdW50KSB7CisgICAgICAgIHZhciBz
ZXQgPSBuZXcgU2V0OworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsK
KyAgICAgICAgICAgIHNldC5hZGQoaSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNldDsK
KyAgICB9CisKKyAgICB2YXIgQ09VTlQgPSAyMDAwOworICAgIHZhciBzZXQgPSBjcmVhdGVTZXQo
Q09VTlQpOworICAgIHZhciBzdW0gPSAwOworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTI7
ICsraSkgeworICAgICAgICBzdW0gPSAwOworICAgICAgICBzZXQuZm9yRWFjaChmdW5jdGlvbiAo
aXRlbSkgeworICAgICAgICAgICAgc3VtICs9IGl0ZW07CisgICAgICAgIH0pOworICAgICAgICBn
bG9iYWxTdW0gPSBzdW07CisgICAgfQorICAgIHJldHVybiBzdW07Cit9KCkpOwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvc2V0LWZvci1vZi5qcyBiL0xh
eW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3NldC1mb3Itb2YuanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYTUyYjM4OWRkMmZhYjdjZDU4ZTI4NmNiZjNmMWFiMGJkMjY4NTFlMwotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3NldC1mb3Itb2YuanMK
QEAgLTAsMCArMSwyMyBAQAordmFyIGdsb2JhbFN1bSA9IDA7CisoZnVuY3Rpb24gKCkgeworICAg
IGZ1bmN0aW9uIGNyZWF0ZVNldChjb3VudCkgeworICAgICAgICB2YXIgc2V0ID0gbmV3IFNldDsK
KyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgICAgICBz
ZXQuYWRkKGkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzZXQ7CisgICAgfQorCisgICAg
dmFyIENPVU5UID0gMjAwMDsKKyAgICB2YXIgc2V0ID0gY3JlYXRlU2V0KENPVU5UKTsKKyAgICB2
YXIgc3VtID0gMDsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWUyOyArK2kpIHsKKyAgICAg
ICAgc3VtID0gMDsKKyAgICAgICAgZm9yICh2YXIgaXRlbSBvZiBzZXQpIHsKKyAgICAgICAgICAg
IHN1bSArPSBpdGVtOworICAgICAgICB9CisgICAgICAgIGdsb2JhbFN1bSA9IHN1bTsKKyAgICB9
CisgICAgcmV0dXJuIHN1bTsKK30oKSk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL3NldC1mb3ItZWFjaC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Nl
dC1mb3ItZWFjaC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTAzNjZjODA1OTUzMWMxNmVjNzg4
Mzg4YzY2NmUzZDA4ZGMzZmVmMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3Jl
Z3Jlc3Mvc2V0LWZvci1lYWNoLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jl
c3Mvc2V0LWZvci1lYWNoCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5v
IGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NldC1mb3It
ZWFjaC5odG1sIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zZXQtZm9yLWVhY2guaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi40NzJjZmM5MmQ1OTE3NTY5NTJhZmQzOGJlNmNmM2Y4ZjkwN2FjYjdhCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zZXQtZm9yLWVhY2guaHRtbApAQCAt
MCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9F
TiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0
LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9y
ZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10
ZXN0cy9zZXQtZm9yLWVhY2guanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291
cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291
cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zZXQtZm9yLW9mLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2V0LWZvci1vZi1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YjE4ZGRjNzFiZTc1MjAxYjVkZjc2NTAwNjA5OWMzMWMwZWNjZmI1YgotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2V0LWZvci1vZi1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSwxMCBAQAorSlNSZWdyZXNzL3NldC1mb3Itb2YKKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pz
L3JlZ3Jlc3Mvc2V0LWZvci1vZi5odG1sIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zZXQtZm9y
LW9mLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uODgyZjY0YzQ0MjJkMGJhMTE1ZjExMzgwZTJhY2NlOTQ0MDky
MmZhOAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2V0LWZvci1v
Zi5odG1sCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8v
RFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBz
cmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0ic2NyaXB0LXRlc3RzL3NldC1mb3Itb2YuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>268288</attachid>
            <date>2016-01-05 09:37:13 -0800</date>
            <delta_ts>2016-01-05 09:37:13 -0800</delta_ts>
            <desc>test</desc>
            <filename>test.js</filename>
            <type>application/x-javascript</type>
            <size>10444</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">ZnVuY3Rpb24gZG9DYWxsKGYpIHsKICAgIGYoKTsKfQoKZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7
IGkrKykgewogICAgZG9DYWxsKGZ1bmN0aW9uICgpIHsgcmV0dXJuIDE7IH0pOwogICAgZG9DYWxs
KGZ1bmN0aW9uICgpIHsgcmV0dXJuIDI7IH0pOwogICAgZG9DYWxsKGZ1bmN0aW9uICgpIHsgcmV0
dXJuIDM7IH0pOwogICAgZG9DYWxsKGZ1bmN0aW9uICgpIHsgcmV0dXJuIDQ7IH0pOwogICAgZG9D
YWxsKGZ1bmN0aW9uICgpIHsgcmV0dXJuIDU7IH0pOwogICAgZG9DYWxsKGZ1bmN0aW9uICgpIHsg
cmV0dXJuIDY7IH0pOwogICAgZG9DYWxsKGZ1bmN0aW9uICgpIHsgcmV0dXJuIDg7IH0pOwogICAg
ZG9DYWxsKGZ1bmN0aW9uICgpIHsgcmV0dXJuIDk7IH0pOwogICAgZG9DYWxsKGZ1bmN0aW9uICgp
IHsgcmV0dXJuIDEwOyB9KTsKICAgIGRvQ2FsbChmdW5jdGlvbiAoKSB7IHJldHVybiAxMTsgfSk7
CiAgICBkb0NhbGwoZnVuY3Rpb24gKCkgeyByZXR1cm4gMTI7IH0pOwogICAgZG9DYWxsKGZ1bmN0
aW9uICgpIHsgcmV0dXJuIDEzOyB9KTsKICAgIGRvQ2FsbChmdW5jdGlvbiAoKSB7IHJldHVybiAx
NDsgfSk7CiAgICBkb0NhbGwoZnVuY3Rpb24gKCkgeyByZXR1cm4gMTU7IH0pOwogICAgZG9DYWxs
KGZ1bmN0aW9uICgpIHsgcmV0dXJuIDE2OyB9KTsKICAgIGRvQ2FsbChmdW5jdGlvbiAoKSB7IHJl
dHVybiAxNzsgfSk7CiAgICBkb0NhbGwoZnVuY3Rpb24gKCkgeyByZXR1cm4gMTg7IH0pOwogICAg
ZG9DYWxsKGZ1bmN0aW9uICgpIHsgcmV0dXJuIDE5OyB9KTsKICAgIGRvQ2FsbChmdW5jdGlvbiAo
KSB7IHJldHVybiAyMDsgfSk7Cn0KCmZ1bmN0aW9uIGZvbygpIHsKICAgIGZ1bmN0aW9uIGJheigp
IHsKICAgICAgICByZXR1cm4gMTAwOwogICAgfQogICAgZG9DYWxsKGJheik7Cn0Kbm9JbmxpbmUo
Zm9vKTsKZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwOyBpKyspCiAgICBmb28oKTsKCi8qCiAqICdm
b28nIHByb2R1Y2VzIHRoaXMgREZHIGdyYXBoIGFmdGVyIGJ5dGVjb2RlIHBhcnNpbmcKCiBCbG9j
ayAjMCAoYmMjMCk6IChPU1IgdGFyZ2V0KQogIEV4ZWN1dGlvbiBjb3VudDogMS4wMDAwMDAKICBQ
cmVkZWNlc3NvcnM6CiAgU3VjY2Vzc29yczoKICBTdGF0ZXM6IFN0cnVjdHVyZXNBcmVXYXRjaGVk
LCBDdXJyZW50bHlDRkFVbnJlYWNoYWJsZQogIFZhcnMgQmVmb3JlOiA8ZW1wdHk+CiAgSW50ZXJz
ZWN0ZWQgVmFycyBCZWZvcmU6IGFyZzA6KERvdWJsZWltcHVyZW5hblRvcEVtcHR5LCBUT1AsIFRP
UCkgbG9jMDooRG91YmxlaW1wdXJlbmFuVG9wRW1wdHksIFRPUCwgVE9QKSBsb2MxOihEb3VibGVp
bXB1cmVuYW5Ub3BFbXB0eSwgVE9QLCBUT1ApIGxvYzI6KERvdWJsZWltcHVyZW5hblRvcEVtcHR5
LCBUT1AsIFRPUCkgbG9jMzooRG91YmxlaW1wdXJlbmFuVG9wRW1wdHksIFRPUCwgVE9QKSBsb2M0
OihEb3VibGVpbXB1cmVuYW5Ub3BFbXB0eSwgVE9QLCBUT1ApIGxvYzU6KERvdWJsZWltcHVyZW5h
blRvcEVtcHR5LCBUT1AsIFRPUCkgbG9jNjooRG91YmxlaW1wdXJlbmFuVG9wRW1wdHksIFRPUCwg
VE9QKSBsb2M3OihEb3VibGVpbXB1cmVuYW5Ub3BFbXB0eSwgVE9QLCBUT1ApIGxvYzg6KERvdWJs
ZWltcHVyZW5hblRvcEVtcHR5LCBUT1AsIFRPUCkgbG9jOTooRG91YmxlaW1wdXJlbmFuVG9wRW1w
dHksIFRPUCwgVE9QKSBsb2MxMDooRG91YmxlaW1wdXJlbmFuVG9wRW1wdHksIFRPUCwgVE9QKSBs
b2MxMTooRG91YmxlaW1wdXJlbmFuVG9wRW1wdHksIFRPUCwgVE9QKSBsb2MxMjooRG91YmxlaW1w
dXJlbmFuVG9wRW1wdHksIFRPUCwgVE9QKSBsb2MxMzooRG91YmxlaW1wdXJlbmFuVG9wRW1wdHks
IFRPUCwgVE9QKSBsb2MxNDooRG91YmxlaW1wdXJlbmFuVG9wRW1wdHksIFRPUCwgVE9QKSBsb2Mx
NTooRG91YmxlaW1wdXJlbmFuVG9wRW1wdHksIFRPUCwgVE9QKSBsb2MxNjooRG91YmxlaW1wdXJl
bmFuVG9wRW1wdHksIFRPUCwgVE9QKSBsb2MxNzooRG91YmxlaW1wdXJlbmFuVG9wRW1wdHksIFRP
UCwgVE9QKSBsb2MxODooRG91YmxlaW1wdXJlbmFuVG9wRW1wdHksIFRPUCwgVE9QKSBsb2MxOToo
RG91YmxlaW1wdXJlbmFuVG9wRW1wdHksIFRPUCwgVE9QKSBsb2MyMDooRG91YmxlaW1wdXJlbmFu
VG9wRW1wdHksIFRPUCwgVE9QKSBsb2MyMTooRG91YmxlaW1wdXJlbmFuVG9wRW1wdHksIFRPUCwg
VE9QKSBsb2MyMjooRG91YmxlaW1wdXJlbmFuVG9wRW1wdHksIFRPUCwgVE9QKSBsb2MyMzooRG91
YmxlaW1wdXJlbmFuVG9wRW1wdHksIFRPUCwgVE9QKSBsb2MyNDooRG91YmxlaW1wdXJlbmFuVG9w
RW1wdHksIFRPUCwgVE9QKSBsb2MyNTooRG91YmxlaW1wdXJlbmFuVG9wRW1wdHksIFRPUCwgVE9Q
KSBsb2MyNjooRG91YmxlaW1wdXJlbmFuVG9wRW1wdHksIFRPUCwgVE9QKSBsb2MyNzooRG91Ymxl
aW1wdXJlbmFuVG9wRW1wdHksIFRPUCwgVE9QKSBsb2MyODooRG91YmxlaW1wdXJlbmFuVG9wRW1w
dHksIFRPUCwgVE9QKSBsb2MyOTooRG91YmxlaW1wdXJlbmFuVG9wRW1wdHksIFRPUCwgVE9QKQog
IFZhciBMaW5rczogCiAgIDA6PCAxOi0+CVNldEFyZ3VtZW50KHRoaXMoYSksIFc6U2lkZVN0YXRl
LCBiYyMwKSAgcHJlZGljdGluZyBOb25lCiAgIDE6PCAxOi0+CUpTQ29uc3RhbnQoSlN8UHVyZUlu
dCwgVW5kZWZpbmVkLCBiYyMwKQogICAyOjwhMDotPglNb3ZIaW50KENoZWNrOlVudHlwZWQ6QDEs
IE11c3RHZW4sIGxvYzAsIFc6U2lkZVN0YXRlLCBDbG9iYmVyc0V4aXQsIGJjIzApCiAgIDM6PCAx
Oi0+CVNldExvY2FsKENoZWNrOlVudHlwZWQ6QDEsIGxvYzAoQn4vRmx1c2hlZEpTVmFsdWUpLCBX
OlN0YWNrKC0xKSwgYmMjMCwgRXhpdEludmFsaWQpICBwcmVkaWN0aW5nIE5vbmUKICAgNDo8ITA6
LT4JTW92SGludChDaGVjazpVbnR5cGVkOkAxLCBNdXN0R2VuLCBsb2MxLCBXOlNpZGVTdGF0ZSwg
Q2xvYmJlcnNFeGl0LCBiYyMwLCBFeGl0SW52YWxpZCkKICAgNTo8IDE6LT4JU2V0TG9jYWwoQ2hl
Y2s6VW50eXBlZDpAMSwgbG9jMShDfi9GbHVzaGVkSlNWYWx1ZSksIFc6U3RhY2soLTIpLCBiYyMw
LCBFeGl0SW52YWxpZCkgIHByZWRpY3RpbmcgTm9uZQogICA2OjwhMDotPglNb3ZIaW50KENoZWNr
OlVudHlwZWQ6QDEsIE11c3RHZW4sIGxvYzIsIFc6U2lkZVN0YXRlLCBDbG9iYmVyc0V4aXQsIGJj
IzAsIEV4aXRJbnZhbGlkKQogICA3OjwgMTotPglTZXRMb2NhbChDaGVjazpVbnR5cGVkOkAxLCBs
b2MyKER+L0ZsdXNoZWRKU1ZhbHVlKSwgVzpTdGFjaygtMyksIGJjIzAsIEV4aXRJbnZhbGlkKSAg
cHJlZGljdGluZyBOb25lCiAgIDg6PCEwOi0+CU1vdkhpbnQoQ2hlY2s6VW50eXBlZDpAMSwgTXVz
dEdlbiwgbG9jMywgVzpTaWRlU3RhdGUsIENsb2JiZXJzRXhpdCwgYmMjMCwgRXhpdEludmFsaWQp
CiAgIDk6PCAxOi0+CVNldExvY2FsKENoZWNrOlVudHlwZWQ6QDEsIGxvYzMoRX4vRmx1c2hlZEpT
VmFsdWUpLCBXOlN0YWNrKC00KSwgYmMjMCwgRXhpdEludmFsaWQpICBwcmVkaWN0aW5nIE5vbmUK
ICAxMDo8ITA6LT4JTW92SGludChDaGVjazpVbnR5cGVkOkAxLCBNdXN0R2VuLCBsb2M0LCBXOlNp
ZGVTdGF0ZSwgQ2xvYmJlcnNFeGl0LCBiYyMwLCBFeGl0SW52YWxpZCkKICAxMTo8IDE6LT4JU2V0
TG9jYWwoQ2hlY2s6VW50eXBlZDpAMSwgbG9jNChGfi9GbHVzaGVkSlNWYWx1ZSksIFc6U3RhY2so
LTUpLCBiYyMwLCBFeGl0SW52YWxpZCkgIHByZWRpY3RpbmcgTm9uZQogIDEyOjwhMDotPglNb3ZI
aW50KENoZWNrOlVudHlwZWQ6QDEsIE11c3RHZW4sIGxvYzUsIFc6U2lkZVN0YXRlLCBDbG9iYmVy
c0V4aXQsIGJjIzAsIEV4aXRJbnZhbGlkKQogIDEzOjwgMTotPglTZXRMb2NhbChDaGVjazpVbnR5
cGVkOkAxLCBsb2M1KEd+L0ZsdXNoZWRKU1ZhbHVlKSwgVzpTdGFjaygtNiksIGJjIzAsIEV4aXRJ
bnZhbGlkKSAgcHJlZGljdGluZyBOb25lCiAgMTQ6PCEwOi0+CU1vdkhpbnQoQ2hlY2s6VW50eXBl
ZDpAMSwgTXVzdEdlbiwgbG9jNiwgVzpTaWRlU3RhdGUsIENsb2JiZXJzRXhpdCwgYmMjMCwgRXhp
dEludmFsaWQpCiAgMTU6PCAxOi0+CVNldExvY2FsKENoZWNrOlVudHlwZWQ6QDEsIGxvYzYoSH4v
Rmx1c2hlZEpTVmFsdWUpLCBXOlN0YWNrKC03KSwgYmMjMCwgRXhpdEludmFsaWQpICBwcmVkaWN0
aW5nIE5vbmUKICAxNjo8IDE6LT4JSlNDb25zdGFudChKU3xQdXJlSW50LCBXZWFrOkNlbGw6IDB4
MTBhNDY4MzcwICglQTU6RnVuY3Rpb24pLCBJRDogNTEsIGJjIzEpCiAgMTc6PCAxOi0+CUpTQ29u
c3RhbnQoSlN8UHVyZUludCwgV2VhazpDZWxsOiAweDEwYTQ1YmZjMCAoJUVlOkpTR2xvYmFsTGV4
aWNhbEVudmlyb25tZW50KSwgSUQ6IDUwLCBiYyMxKQogIDE4OjwhMDotPglNb3ZIaW50KENoZWNr
OlVudHlwZWQ6QDE3LCBNdXN0R2VuLCBsb2MzLCBXOlNpZGVTdGF0ZSwgQ2xvYmJlcnNFeGl0LCBi
YyMxKQogIDE5OjwgMTotPglTZXRMb2NhbChDaGVjazpVbnR5cGVkOkAxNywgbG9jMyhJfi9GbHVz
aGVkSlNWYWx1ZSksIFc6U3RhY2soLTQpLCBiYyMxLCBleGl0OiBiYyMzKSAgcHJlZGljdGluZyBO
b25lCiAgMjA6PCEwOi0+CU1vdkhpbnQoQ2hlY2s6VW50eXBlZDpAMTcsIE11c3RHZW4sIGxvYzQs
IFc6U2lkZVN0YXRlLCBDbG9iYmVyc0V4aXQsIGJjIzMpCiAgMjE6PCAxOi0+CVNldExvY2FsKENo
ZWNrOlVudHlwZWQ6QDE3LCBsb2M0KEp+L0ZsdXNoZWRKU1ZhbHVlKSwgVzpTdGFjaygtNSksIGJj
IzMsIGV4aXQ6IGJjIzYpICBwcmVkaWN0aW5nIE5vbmUKICAyMjo8IDE6LT4JTmV3RnVuY3Rpb24o
Q2hlY2s6VW50eXBlZDpAMTcsIEpTfFB1cmVJbnQsIDwweDEwYTRiMTkwMCwgRnVuY3Rpb25FeGVj
dXRhYmxlPiwgYmF6Izxuby1oYXNoPi88bm9nZW4+OlsweDEwYTRiMTkwMF0sIFI6SGVhcE9iamVj
dENvdW50LCBXOkhlYXBPYmplY3RDb3VudCwgRXhpdHNGb3JFeGNlcHRpb25zLCBiYyM2KQogIDIz
OjwhMDotPglNb3ZIaW50KENoZWNrOlVudHlwZWQ6QDIyLCBNdXN0R2VuLCBsb2M3LCBXOlNpZGVT
dGF0ZSwgQ2xvYmJlcnNFeGl0LCBiYyM2KQogIDI0OjwgMTotPglTZXRMb2NhbChDaGVjazpVbnR5
cGVkOkAyMiwgbG9jNyhLfi9GbHVzaGVkSlNWYWx1ZSksIFc6U3RhY2soLTgpLCBiYyM2LCBleGl0
OiBiYyMxMCkgIHByZWRpY3RpbmcgTm9uZQogIDI1OjwhMDotPglNb3ZIaW50KENoZWNrOlVudHlw
ZWQ6QDIyLCBNdXN0R2VuLCBsb2M1LCBXOlNpZGVTdGF0ZSwgQ2xvYmJlcnNFeGl0LCBiYyMxMCkK
ICAyNjo8IDE6LT4JU2V0TG9jYWwoQ2hlY2s6VW50eXBlZDpAMjIsIGxvYzUoTH4vRmx1c2hlZEpT
VmFsdWUpLCBXOlN0YWNrKC02KSwgYmMjMTAsIGV4aXQ6IGJjIzEzKSAgcHJlZGljdGluZyBOb25l
CiAgMjc6PCAxOi0+CUpTQ29uc3RhbnQoSlN8UHVyZUludCwgV2VhazpDZWxsOiAweDEwYTQ0Mzcw
MCAoJUNBOmdsb2JhbCksIElEOiA0NjMsIGJjIzEzKQogIDI4OjwhMDotPglNb3ZIaW50KENoZWNr
OlVudHlwZWQ6QDI3LCBNdXN0R2VuLCBsb2MxMCwgVzpTaWRlU3RhdGUsIENsb2JiZXJzRXhpdCwg
YmMjMTMpCiAgMjk6PCEwOi0+CVBoYW50b20oQ2hlY2s6VW50eXBlZDpAMTcsIE11c3RHZW4sIGJj
IzEzLCBFeGl0SW52YWxpZCkKICAzMDo8IDE6LT4JU2V0TG9jYWwoQ2hlY2s6VW50eXBlZDpAMjcs
IGxvYzEwKE1+L0ZsdXNoZWRKU1ZhbHVlKSwgVzpTdGFjaygtMTEpLCBiYyMxMywgZXhpdDogYmMj
MjApICBwcmVkaWN0aW5nIE5vbmUKICAzMTo8ITA6LT4JUGhhbnRvbShDaGVjazpVbnR5cGVkOkAy
NywgTXVzdEdlbiwgYmMjMjApCiAgMzI6PCAxOi0+CUpTQ29uc3RhbnQoSlN8UHVyZUludCwgV2Vh
azpDZWxsOiAweDEwYTQ2ODNhMCAoJUE1OkZ1bmN0aW9uKSwgSUQ6IDUxLCBiYyMyMCkKICAzMzo8
ITA6LT4JTW92SGludChDaGVjazpVbnR5cGVkOkAzMiwgTXVzdEdlbiwgbG9jNywgVzpTaWRlU3Rh
dGUsIENsb2JiZXJzRXhpdCwgYmMjMjApCiAgMzQ6PCAxOi0+CVNldExvY2FsKENoZWNrOlVudHlw
ZWQ6QDMyLCBsb2M3KE5+L0ZsdXNoZWRKU1ZhbHVlKSwgVzpTdGFjaygtOCksIGJjIzIwLCBleGl0
OiBiYyMyOCkgIHByZWRpY3RpbmcgTm9uZQogIDM1OjwhMDotPglNb3ZIaW50KENoZWNrOlVudHlw
ZWQ6QDIyLCBNdXN0R2VuLCBsb2M5LCBXOlNpZGVTdGF0ZSwgQ2xvYmJlcnNFeGl0LCBiYyMyOCkK
ICAzNjo8IDE6LT4JU2V0TG9jYWwoQ2hlY2s6VW50eXBlZDpAMjIsIGxvYzkoT34vRmx1c2hlZEpT
VmFsdWUpLCBXOlN0YWNrKC0xMCksIGJjIzI4LCBleGl0OiBiYyMzMSkgIHByZWRpY3RpbmcgTm9u
ZQogIDM3OjwhMDotPglDaGVja0NlbGwoQ2hlY2s6VW50eXBlZDpAMzIsIENoZWNrOlVudHlwZWQ6
QDI3LCBNdXN0R2VuLCA8MHgxMGE0NjgzYTAsIEZ1bmN0aW9uPiwgZG9DYWxsIzxuby1oYXNoPi88
bm9nZW4+OlsweDEwYTRiMmYwMF0sIEV4aXRzLCBiYyMzMSkKICAtLT4gZG9DYWxsIzxuby1oYXNo
Pjo8MHgxMGE0ODdhMDAsIGJjIzMxLCBDYWxsLCBrbm93biBjYWxsZWU6IENlbGw6IDB4MTBhNDY4
M2EwICglQTU6RnVuY3Rpb24pLCBJRDogNTEsIG51bUFyZ3MrdGhpcyA9IDIsIHN0YWNrT2Zmc2V0
ID0gLTE2IChsb2MwIG1hcHMgdG8gbG9jMTYpPgogICAgMzg6PCAxOi0+CUpTQ29uc3RhbnQoSlN8
UHVyZUludCwgVW5kZWZpbmVkLCBiYyMwKQogICAgMzk6PCEwOi0+CU1vdkhpbnQoQ2hlY2s6VW50
eXBlZDpAMzgsIE11c3RHZW4sIGxvYzE2LCBXOlNpZGVTdGF0ZSwgQ2xvYmJlcnNFeGl0LCBiYyMw
KQogICAgNDA6PCAxOi0+CVNldExvY2FsKENoZWNrOlVudHlwZWQ6QDM4LCBsb2MxNihQfi9GbHVz
aGVkSlNWYWx1ZSksIFc6U3RhY2soLTE3KSwgYmMjMCwgRXhpdEludmFsaWQpICBwcmVkaWN0aW5n
IE5vbmUKICAgIDQxOjwhMDotPglNb3ZIaW50KENoZWNrOlVudHlwZWQ6QDM4LCBNdXN0R2VuLCBs
b2MxNywgVzpTaWRlU3RhdGUsIENsb2JiZXJzRXhpdCwgYmMjMCwgRXhpdEludmFsaWQpCiAgICA0
Mjo8IDE6LT4JU2V0TG9jYWwoQ2hlY2s6VW50eXBlZDpAMzgsIGxvYzE3KFF+L0ZsdXNoZWRKU1Zh
bHVlKSwgVzpTdGFjaygtMTgpLCBiYyMwLCBFeGl0SW52YWxpZCkgIHByZWRpY3RpbmcgTm9uZQog
ICAgNDM6PCEwOi0+CU1vdkhpbnQoQ2hlY2s6VW50eXBlZDpAMzgsIE11c3RHZW4sIGxvYzE4LCBX
OlNpZGVTdGF0ZSwgQ2xvYmJlcnNFeGl0LCBiYyMwLCBFeGl0SW52YWxpZCkKICAgIDQ0OjwgMTot
PglTZXRMb2NhbChDaGVjazpVbnR5cGVkOkAzOCwgbG9jMTgoUn4vRmx1c2hlZEpTVmFsdWUpLCBX
OlN0YWNrKC0xOSksIGJjIzAsIEV4aXRJbnZhbGlkKSAgcHJlZGljdGluZyBOb25lCiAgICA0NTo8
ITA6LT4JTW92SGludChDaGVjazpVbnR5cGVkOkAzOCwgTXVzdEdlbiwgbG9jMTksIFc6U2lkZVN0
YXRlLCBDbG9iYmVyc0V4aXQsIGJjIzAsIEV4aXRJbnZhbGlkKQogICAgNDY6PCAxOi0+CVNldExv
Y2FsKENoZWNrOlVudHlwZWQ6QDM4LCBsb2MxOShTfi9GbHVzaGVkSlNWYWx1ZSksIFc6U3RhY2so
LTIwKSwgYmMjMCwgRXhpdEludmFsaWQpICBwcmVkaWN0aW5nIE5vbmUKICAgIDQ3OjwhMDotPglN
b3ZIaW50KENoZWNrOlVudHlwZWQ6QDM4LCBNdXN0R2VuLCBsb2MyMCwgVzpTaWRlU3RhdGUsIENs
b2JiZXJzRXhpdCwgYmMjMCwgRXhpdEludmFsaWQpCiAgICA0ODo8IDE6LT4JU2V0TG9jYWwoQ2hl
Y2s6VW50eXBlZDpAMzgsIGxvYzIwKFR+L0ZsdXNoZWRKU1ZhbHVlKSwgVzpTdGFjaygtMjEpLCBi
YyMwLCBFeGl0SW52YWxpZCkgIHByZWRpY3RpbmcgTm9uZQogICAgNDk6PCEwOi0+CU1vdkhpbnQo
Q2hlY2s6VW50eXBlZDpAMzgsIE11c3RHZW4sIGxvYzIxLCBXOlNpZGVTdGF0ZSwgQ2xvYmJlcnNF
eGl0LCBiYyMwLCBFeGl0SW52YWxpZCkKICAgIDUwOjwgMTotPglTZXRMb2NhbChDaGVjazpVbnR5
cGVkOkAzOCwgbG9jMjEoVX4vRmx1c2hlZEpTVmFsdWUpLCBXOlN0YWNrKC0yMiksIGJjIzAsIEV4
aXRJbnZhbGlkKSAgcHJlZGljdGluZyBOb25lCiAgICA1MTo8IDE6LT4JSlNDb25zdGFudChKU3xQ
dXJlSW50LCBXZWFrOkNlbGw6IDB4MTBhNDY4M2EwICglQTU6RnVuY3Rpb24pLCBJRDogNTEsIGJj
IzEpCiAgICA1Mjo8IDE6LT4JSlNDb25zdGFudChKU3xQdXJlSW50LCBXZWFrOkNlbGw6IDB4MTBh
NDViZmMwICglRWU6SlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQpLCBJRDogNTAsIGJjIzEpCiAg
ICA1Mzo8ITA6LT4JTW92SGludChDaGVjazpVbnR5cGVkOkA1MiwgTXVzdEdlbiwgbG9jMTksIFc6
U2lkZVN0YXRlLCBDbG9iYmVyc0V4aXQsIGJjIzEpCiAgICA1NDo8IDE6LT4JU2V0TG9jYWwoQ2hl
Y2s6VW50eXBlZDpANTIsIGxvYzE5KFZ+L0ZsdXNoZWRKU1ZhbHVlKSwgVzpTdGFjaygtMjApLCBi
YyMxLCBleGl0OiBiYyMzMSAtLT4gZG9DYWxsIzxuby1oYXNoPjo8MHgxMGE0ODdhMDA+IGJjIzMp
ICBwcmVkaWN0aW5nIE5vbmUKICAgIDU1OjwhMDotPglNb3ZIaW50KENoZWNrOlVudHlwZWQ6QDUy
LCBNdXN0R2VuLCBsb2MyMCwgVzpTaWRlU3RhdGUsIENsb2JiZXJzRXhpdCwgYmMjMykKICAgIDU2
OjwgMTotPglTZXRMb2NhbChDaGVjazpVbnR5cGVkOkA1MiwgbG9jMjAoV34vRmx1c2hlZEpTVmFs
dWUpLCBXOlN0YWNrKC0yMSksIGJjIzMsIGV4aXQ6IGJjIzMxIC0tPiBkb0NhbGwjPG5vLWhhc2g+
OjwweDEwYTQ4N2EwMD4gYmMjNikgIHByZWRpY3RpbmcgTm9uZQogICAgNTc6PCEwOi0+CU1vdkhp
bnQoQ2hlY2s6VW50eXBlZDpAMjIsIE11c3RHZW4sIGxvYzIyLCBXOlNpZGVTdGF0ZSwgQ2xvYmJl
cnNFeGl0LCBiYyM2KQogICAgNTg6PCAxOi0+CVNldExvY2FsKENoZWNrOlVudHlwZWQ6QDIyLCBs
b2MyMihYfi9GbHVzaGVkSlNWYWx1ZSksIFc6U3RhY2soLTIzKSwgYmMjNiwgZXhpdDogYmMjMzEg
LS0+IGRvQ2FsbCM8bm8taGFzaD46PDB4MTBhNDg3YTAwPiBiYyM5KSAgcHJlZGljdGluZyBOb25l
CiAgICA1OTo8IDE6LT4JSlNDb25zdGFudChKU3xQdXJlSW50LCBVbmRlZmluZWQsIGJjIzkpCiAg
ICA2MDo8ITA6LT4JTW92SGludChDaGVjazpVbnR5cGVkOkA1OSwgTXVzdEdlbiwgbG9jMjQsIFc6
U2lkZVN0YXRlLCBDbG9iYmVyc0V4aXQsIGJjIzkpCiAgICA2MTo8IDE6LT4JU2V0TG9jYWwoQ2hl
Y2s6VW50eXBlZDpANTksIGxvYzI0KFl+L0ZsdXNoZWRKU1ZhbHVlKSwgVzpTdGFjaygtMjUpLCBi
YyM5LCBleGl0OiBiYyMzMSAtLT4gZG9DYWxsIzxuby1oYXNoPjo8MHgxMGE0ODdhMDA+IGJjIzEy
KSAgcHJlZGljdGluZyBOb25lCiAgICA2Mjo8ITA6LT4JQ2FsbChDaGVjazpVbnR5cGVkOkAyMiwg
Q2hlY2s6VW50eXBlZDpANTksIEpTfE11c3RHZW58VmFyQXJnc3xQdXJlSW50LCBSOldvcmxkLCBX
OkhlYXAsIEV4aXRzRm9yRXhjZXB0aW9ucywgQ2xvYmJlcnNFeGl0LCBiYyMxMikgIHByZWRpY3Rp
bmcgTm9uYm9vbGludDMyCiAgICA2Mzo8ITA6LT4JTW92SGludChDaGVjazpVbnR5cGVkOkA2Miwg
TXVzdEdlbiwgbG9jMjIsIFc6U2lkZVN0YXRlLCBDbG9iYmVyc0V4aXQsIGJjIzEyLCBFeGl0SW52
YWxpZCkKICAgIDY0OjwgMTotPglTZXRMb2NhbChDaGVjazpVbnR5cGVkOkA2MiwgbG9jMjIoWn4v
Rmx1c2hlZEpTVmFsdWUpLCBXOlN0YWNrKC0yMyksIGJjIzEyLCBleGl0OiBiYyMzMSAtLT4gZG9D
YWxsIzxuby1oYXNoPjo8MHgxMGE0ODdhMDA+IGJjIzIxKSAgcHJlZGljdGluZyBOb25lCiAgICA2
NTo8ITA6LT4JRmx1c2goTXVzdEdlbiwgbG9jOShPfi9GbHVzaGVkSlNWYWx1ZSksIFI6U3RhY2so
LTEwKSwgVzpTaWRlU3RhdGUsIGJjIzIxKSAgcHJlZGljdGluZyBOb25lCiAgICA2Njo8ITA6LT4J
TW92SGludChDaGVjazpVbnR5cGVkOkA1OSwgTXVzdEdlbiwgbG9jNywgVzpTaWRlU3RhdGUsIENs
b2JiZXJzRXhpdCwgYmMjMjEpCiAgICA2Nzo8IDE6LT4JU2V0TG9jYWwoQ2hlY2s6VW50eXBlZDpA
NTksIGxvYzcoQUJ+L0ZsdXNoZWRKU1ZhbHVlKSwgVzpTdGFjaygtOCksIGJjIzIxLCBFeGl0SW52
YWxpZCkgIHByZWRpY3RpbmcgTm9uZQogIDwtLSBkb0NhbGwjPG5vLWhhc2g+OjwweDEwYTQ4N2Ew
MCwgYmMjMzEsIENhbGwsIGtub3duIGNhbGxlZTogQ2VsbDogMHgxMGE0NjgzYTAgKCVBNTpGdW5j
dGlvbiksIElEOiA1MSwgbnVtQXJncyt0aGlzID0gMiwgc3RhY2tPZmZzZXQgPSAtMTYgKGxvYzAg
bWFwcyB0byBsb2MxNik+CiAgNjg6PCAxOi0+CUpTQ29uc3RhbnQoSlN8UHVyZUludCwgVW5kZWZp
bmVkLCBiYyM0MCkKICA2OTo8ITA6LT4JUmV0dXJuKENoZWNrOlVudHlwZWQ6QDY4LCBNdXN0R2Vu
LCBXOlNpZGVTdGF0ZSwgRXhpdHMsIGJjIzQwKQogIFN0YXRlczogSW52YWxpZEJyYW5jaERpcmVj
dGlvbiwgU3RydWN0dXJlc0FyZVdhdGNoZWQKICBWYXJzIEFmdGVyOiA8ZW1wdHk+CiAgVmFyIExp
bmtzOiBhcmcwOkAwIGxvYzA6QDMgbG9jMTpANSBsb2MyOkA3IGxvYzM6QDE5IGxvYzQ6QDIxIGxv
YzU6QDI2IGxvYzY6QDE1IGxvYzc6QDY3IGxvYzk6QDY1IGxvYzEwOkAzMCBsb2MxNjpANDAgbG9j
MTc6QDQyIGxvYzE4OkA0NCBsb2MxOTpANTQgbG9jMjA6QDU2IGxvYzIxOkA1MCBsb2MyMjpANjQg
bG9jMjQ6QDYxCiovCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268623</attachid>
            <date>2016-01-09 10:14:32 -0800</date>
            <delta_ts>2016-01-10 21:54:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-152691-20160110031359.patch</filename>
            <type>text/plain</type>
            <size>55037</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk0ODIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
MmI5ZDk3YjA1ZTE4NTM2ODk0ZGNlNzk5OTJlZGQ2YmJhNjJhYzcxLi42NzAwNGIzNTJmOWQ5OGE3
Zjc4NGNiYzhhZDU1NjRiNGQxYzUzZTY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMTIgQEAKKzIwMTYtMDEtMDkgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+CisKKyAgICAgICAgW0pTQ10gSXRlcmF0aW5nIG92ZXIgYSBTZXQvTWFwIGlzIHRvbyBz
bG93CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI2
OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTZXQj
Zm9yRWFjaCBhbmQgU2V0ICYgZm9yLW9mIGFyZSB2ZXJ5IHNsb3cuIFRoZXJlIGFyZSAyIHJlYXNv
bnMuCisKKyAgICAgICAgMS4gZm9yRWFjaCBpcyBpbXBsZW1lbnRlZCBpbiBDKysuIEFuZCB0eXBp
Y2FsbHksIHRha2luZyBKUyBjYWxsYmFjayBhbmQgY2FsbGluZyBpdCBmcm9tIEMrKy4KKworICAg
ICAgICBDKysgdG8gSlMgdHJhbnNpdGlvbiBzZWVtcyBjb3N0bHkuIHBlcmYgcmVzdWx0IGluIExp
bnV4IG1hY2hpbmUgc2hvd3MgdGhpcy4KKworICAgICAgICAgICAgU2FtcGxlczogMjNLIG9mIGV2
ZW50ICdjeWNsZXMnLCBFdmVudCBjb3VudCAoYXBwcm94Lik6IDIxNDQ2MDc0Mzg1CisgICAgICAg
ICAgICAzNC4wNCUgIGpzYyAgbGliamF2YXNjcmlwdGNvcmVndGstNC4wLnNvLjE4LjMuMSAgWy5d
IEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGUoSlNDOjpDYWxsRnJhbWVDbG9zdXJlJikKKyAgICAg
ICAgICAgIDIwLjQ4JSAganNjICBsaWJqYXZhc2NyaXB0Y29yZWd0ay00LjAuc28uMTguMy4xICBb
Ll0gdm1FbnRyeVRvSmF2YVNjcmlwdAorICAgICAgICAgICAgIDkuODAlICBqc2MgIGxpYmphdmFz
Y3JpcHRjb3JlZ3RrLTQuMC5zby4xOC4zLjEgIFsuXSBKU0M6OkpJVENvZGU6OmV4ZWN1dGUoSlND
OjpWTSosIEpTQzo6UHJvdG9DYWxsRnJhbWUqKQorICAgICAgICAgICAgIDcuOTUlICBqc2MgIGxp
YmphdmFzY3JpcHRjb3JlZ3RrLTQuMC5zby4xOC4zLjEgIFsuXSBKU0M6OnNldFByb3RvRnVuY0Zv
ckVhY2goSlNDOjpFeGVjU3RhdGUqKQorICAgICAgICAgICAgIDUuNjUlICBqc2MgIHBlcmYtMjI4
NTQubWFwICAgICAgICAgICAgICAgICAgICAgIFsuXSAweDAwMDA3ZjVkMmMyMDRhNmYKKworICAg
ICAgICBXcml0aW5nIGZvckVhY2ggaW4gSlMgZWxpbWluYXRlcyB0aGlzLgorCisgICAgICAgICAg
ICBTYW1wbGVzOiAyM0sgb2YgZXZlbnQgJ2N5Y2xlcycsIEV2ZW50IGNvdW50IChhcHByb3guKTog
MjEyNTU2OTE2NTEKKyAgICAgICAgICAgIDYyLjkxJSAganNjICBwZXJmLTIyODkwLm1hcCAgICAg
ICAgICAgICAgICAgICAgICBbLl0gMHgwMDAwN2ZkMTE3YzBhM2I5CisgICAgICAgICAgICAyNC44
OSUgIGpzYyAgbGliamF2YXNjcmlwdGNvcmVndGstNC4wLnNvLjE4LjMuMSAgWy5dIEpTQzo6cHJp
dmF0ZUZ1bmNTZXRJdGVyYXRvck5leHQoSlNDOjpFeGVjU3RhdGUqKQorICAgICAgICAgICAgIDAu
MjklICBqc2MgIGxpYmphdmFzY3JpcHRjb3JlZ3RrLTQuMC5zby4xOC4zLjEgIFsuXSBKU0M6OkNv
ZGVCbG9jazo6dXBkYXRlQWxsUHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNzKHVuc2lnbmVkIGlu
dCYsIHVuc2lnbmVkIGludCYpCisgICAgICAgICAgICAgMC4yNCUgIGpzYyAgW3Zkc29dICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgWy5dIDB4MDAwMDAwMDAwMDAwMDhlOAorICAgICAgICAg
ICAgIDAuMjIlICBqc2MgIGxpYmphdmFzY3JpcHRjb3JlZ3RrLTQuMC5zby4xOC4zLjEgIFsuXSBK
U0M6OkNvZGVCbG9jazo6cHJlZGljdGVkTWFjaGluZUNvZGVTaXplKCkKKyAgICAgICAgICAgICAw
LjE2JSAganNjICBsaWJqYXZhc2NyaXB0Y29yZWd0ay00LjAuc28uMTguMy4xICBbLl0gV1RGOjpN
ZXRhQWxsb2NhdG9yOjpjdXJyZW50U3RhdGlzdGljcygpCisgICAgICAgICAgICAgMC4xNSUgIGpz
YyAgbGliamF2YXNjcmlwdGNvcmVndGstNC4wLnNvLjE4LjMuMSAgWy5dIEpTQzo6TGV4ZXI8dW5z
aWduZWQgY2hhcj46OmxleChKU0M6OkpTVG9rZW4qLCB1bnNpZ25lZCBpbnQsIGJvb2wpCisKKyAg
ICAgICAgMi4gSXRlcmF0b3IgcmVzdWx0IG9iamVjdCBhbGxvY2F0aW9uIGlzIGNvc3RseS4KKwor
ICAgICAgICBJdGVyYXRvciByZXN1bHQgb2JqZWN0IGFsbG9jYXRpb24gaXMgY29zdGx5LiBFdmVu
IGlmIHRoZSAoMSkgaXMgc29sdmVkLCB3aGVuIGV4ZWN1dGluZyBTZXQgJiBmb3Itb2YsIHBlcmYg
cmVzdWx0IHNob3dzIHZlcnkgc2xvdyBwZXJmb3JtYW5jZSBkdWUgdG8gKDIpLgorCisgICAgICAg
ICAgICBTYW1wbGVzOiAxMDhLIG9mIGV2ZW50ICdjeWNsZXMnLCBFdmVudCBjb3VudCAoYXBwcm94
Lik6IDk1NTI5MjczNzQ4CisgICAgICAgICAgICAxOC4wMiUgIGpzYyAgbGliamF2YXNjcmlwdGNv
cmVndGstNC4wLnNvLjE4LjMuMSAgWy5dIEpTQzo6Y3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3Qo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGJvb2wpCisgICAgICAgICAgICAxNS42OCUg
IGpzYyAganNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWy5dIEpTQzo6SlNPYmpl
Y3Q6OnB1dERpcmVjdChKU0M6OlZNJiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwg
dW5zaWduZWQgaW50KQorICAgICAgICAgICAgMTQuMTglICBqc2MgIGxpYmphdmFzY3JpcHRjb3Jl
Z3RrLTQuMC5zby4xOC4zLjEgIFsuXSBKU0M6OlByb3RvdHlwZU1hcDo6ZW1wdHlPYmplY3RTdHJ1
Y3R1cmVGb3JQcm90b3R5cGUoSlNDOjpKU09iamVjdCosIHVuc2lnbmVkIGludCkKKyAgICAgICAg
ICAgIDEzLjQwJSAganNjICBwZXJmLTI1NDIwLm1hcCAgICAgICAgICAgICAgICAgICAgICBbLl0g
MHgwMDAwN2ZjZTE1ODAwNmExCisgICAgICAgICAgICAgNi43OSUgIGpzYyAgbGliamF2YXNjcmlw
dGNvcmVndGstNC4wLnNvLjE4LjMuMSAgWy5dIEpTQzo6U3RydWN0dXJlVHJhbnNpdGlvblRhYmxl
OjpnZXQoV1RGOjpVbmlxdWVkU3RyaW5nSW1wbCosIHVuc2lnbmVkIGludCkgY29uc3QKKworICAg
ICAgICBJbiB0aGUgbG9uZyB0ZXJtLCB3ZSBzaG91bGQgaW1wbGVtZW50IFNldEl0ZXJhdG9yI25l
eHQgaW4gSlMgYW5kIG1ha2UgdGhlIGl0ZXJhdG9yIHJlc3VsdCBvYmplY3QgYWxsb2NhdGlvbiB3
cml0dGVuIGluIEpTIHRvIGVuY291cmFnZSBvYmplY3QgYWxsb2NhdGlvbiBlbGltaW5hdGlvbiBp
biBGVEwuCisgICAgICAgIEJ1dCBzZWVpbmcgdGhlIHBlcmYgcmVzdWx0LCB3ZSBjYW4gZmluZCB0
aGUgZWFzeSB0byBmaXggYm90dGxlbmVjayBpbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbi4K
KyAgICAgICAgRXZlcnkgdGltZSBjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdCBjcmVhdGVzIHRo
ZSBlbXB0eSBvYmplY3QgYW5kIHVzZSBwdXREaXJlY3QgdG8gc3RvcmUgcHJvcGVydGllcy4KKyAg
ICAgICAgVGhlIHByZS1iYWtlZCBTdHJ1Y3R1cmUqIHdpdGggYGRvbmVgIGFuZCBgdmFsdWVgIHBy
b3BlcnRpZXMgbWFrZXMgdGhpcyBpbXBsZW1lbnRhdGlvbiBmYXN0LgorCisgICAgICAgIEFmdGVy
IHRoZXNlIGltcHJvdmVtZW50cywgdGhlIG1pY3JvIGJlbmNobWFya1sxXSBzaG93cyB0aGUgZm9s
bG93aW5nLgorCisgICAgICAgIG9sZDoKKyAgICAgICAgICAgIExpbmtlZCBMaXN0IHggMjEyLDc3
NiBvcHMvc2VjIMKxMC4yMSUgKDE2MiBydW5zIHNhbXBsZWQpCisgICAgICAgICAgICBBcnJheSB4
IDM3NiwxNTYgb3BzL3NlYyDCsTAuMjAlICgxNjIgcnVucyBzYW1wbGVkKQorICAgICAgICAgICAg
QXJyYXkgZm9yRWFjaCB4IDE3LDM0NSBvcHMvc2VjIMKxMC45OSUgKDEzNyBydW5zIHNhbXBsZWQp
CisgICAgICAgICAgICBBcnJheSBmb3Itb2YgeCAxNiw1MTggb3BzL3NlYyDCsTAuNTglICgxNjAg
cnVucyBzYW1wbGVkKQorICAgICAgICAgICAgU2V0IGZvckVhY2ggeCAxMywyNjMgb3BzL3NlYyDC
sTAuMjAlICgxNjIgcnVucyBzYW1wbGVkKQorICAgICAgICAgICAgU2V0IGZvci1vZiB4IDQsNzMy
IG9wcy9zZWMgwrEwLjM0JSAoMTIzIHJ1bnMgc2FtcGxlZCkKKworICAgICAgICBuZXc6CisgICAg
ICAgICAgICBMaW5rZWQgTGlzdCB4IDIxMCw4MzMgb3BzL3NlYyDCsTAuMjglICgxNjEgcnVucyBz
YW1wbGVkKQorICAgICAgICAgICAgQXJyYXkgeCAzNzEsMzQ3IG9wcy9zZWMgwrEwLjM2JSAoMTYy
IHJ1bnMgc2FtcGxlZCkKKyAgICAgICAgICAgIEFycmF5IGZvckVhY2ggeCAxNyw0NjAgb3BzL3Nl
YyDCsTAuODQlICgxMzYgcnVucyBzYW1wbGVkKQorICAgICAgICAgICAgQXJyYXkgZm9yLW9mIHgg
MTYsMTg4IG9wcy9zZWMgwrExLjI3JSAoMTU4IHJ1bnMgc2FtcGxlZCkKKyAgICAgICAgICAgIFNl
dCBmb3JFYWNoIHggMjMsNjg0IG9wcy9zZWMgwrEyLjQ2JSAoMTM5IHJ1bnMgc2FtcGxlZCkKKyAg
ICAgICAgICAgIFNldCBmb3Itb2YgeCAxMiwxNzYgb3BzL3NlYyDCsTAuNTQlICgxNTcgcnVucyBz
YW1wbGVkKQorCisgICAgICAgIFNldCNmb3JFYWNoIGJlY29tZXMgY29tcGFyYWJsZSB0byBBcnJh
eSNmb3JFYWNoLiBBbmQgU2V0I2ZvckVhY2ggYW5kIFNldCAmIGZvci1vZiBhcmUgaW1wcm92ZWQg
KDEuNzl4LCBhbmQgMi41N3gpLgorICAgICAgICBBZnRlciB0aGlzIG9wdGltaXphdGlvbnMsIHRo
ZXkgYXJlIHN0aWxsIG11Y2ggc2xvd2VyIHRoYW4gbGlua2VkIGxpc3QgYW5kIGFycmF5LgorICAg
ICAgICBUaGlzIHNob3VsZCBiZSBvcHRpbWl6ZWQgaW4gdGhlIGxvbmcgdGVybS4KKworICAgICAg
ICBbMV06IGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0NvbnN0ZWxsYXRpb24vOGRiNWY1YjhmMTJm
ZTdlMjgzZDAKKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIERlcml2ZWRT
b3VyY2VzLm1ha2U6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlw
dENvcmUudmN4cHJvai5maWx0ZXJzOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnVpbHRpbnMvTWFwUHJvdG90eXBlLmpzOiBD
b3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRvck9wZXJhdGlv
bnMuaC4KKyAgICAgICAgKGZvckVhY2gpOgorICAgICAgICAqIGJ1aWx0aW5zL1NldFByb3RvdHlw
ZS5qczogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JP
cGVyYXRpb25zLmguCisgICAgICAgIChmb3JFYWNoKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1v
bklkZW50aWZpZXJzLmg6CisgICAgICAgICogcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuY3Bw
OgorICAgICAgICAoSlNDOjpjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdFN0cnVjdHVyZSk6Cisg
ICAgICAgIChKU0M6OmNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0KToKKyAgICAgICAgKiBydW50
aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6aW5pdCk6CisgICAgICAgIChK
U0M6OkpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL0pT
R2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjppdGVyYXRvclJl
c3VsdE9iamVjdFN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjppdGVy
YXRvclJlc3VsdFN0cnVjdHVyZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTR2xvYmFsT2Jq
ZWN0OjppdGVyYXRvclJlc3VsdFN0cnVjdHVyZU9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgICog
cnVudGltZS9NYXBQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpNYXBQcm90b3R5cGU6Omdl
dE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OnByaXZhdGVGdW5jSXNNYXApOgorICAg
ICAgICAoSlNDOjpwcml2YXRlRnVuY01hcEl0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6cHJpdmF0
ZUZ1bmNNYXBJdGVyYXRvck5leHQpOgorICAgICAgICAoSlNDOjpNYXBQcm90b3R5cGU6OmZpbmlz
aENyZWF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6bWFwUHJvdG9GdW5jRm9yRWFjaCk6
IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9NYXBQcm90b3R5cGUuaDoKKyAgICAgICAgKiBy
dW50aW1lL1NldFByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OlNldFByb3RvdHlwZTo6Z2V0
T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6cHJpdmF0ZUZ1bmNJc1NldCk6CisgICAg
ICAgIChKU0M6OnByaXZhdGVGdW5jU2V0SXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpwcml2YXRl
RnVuY1NldEl0ZXJhdG9yTmV4dCk6CisgICAgICAgIChKU0M6OlNldFByb3RvdHlwZTo6ZmluaXNo
Q3JlYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpzZXRQcm90b0Z1bmNGb3JFYWNoKTog
RGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL1NldFByb3RvdHlwZS5oOgorCiAyMDE2LTAxLTA5
ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBUaGUgRlRMIGFsbG9j
YXRlZCBzcGlsbCBzbG90cyBmb3IgQmluYXJ5T3BzIGlzIHNvbWV0aW1lcyBpbmFjY3VyYXRlLgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGRlNDFhMzkxMjcwYTU0MGNmN2Y0
YzFjMDBhN2NkODA4OGY1NjQyY2QuLjNjNmE3NmRlMTJjYmEyMDJjZjQ3Yzg0MWYwOGVjZmY2ZGM4
MzZhMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTc5NSw2ICs3OTUs
NyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfT0JKRUNUX0xVVF9TT1VSQ0VTCiAgICAgcnVudGltZS9K
U09OT2JqZWN0LmNwcAogICAgIHJ1bnRpbWUvSlNQcm9taXNlQ29uc3RydWN0b3IuY3BwCiAgICAg
cnVudGltZS9KU1Byb21pc2VQcm90b3R5cGUuY3BwCisgICAgcnVudGltZS9NYXBQcm90b3R5cGUu
Y3BwCiAgICAgcnVudGltZS9Nb2R1bGVMb2FkZXJPYmplY3QuY3BwCiAgICAgcnVudGltZS9OdW1i
ZXJDb25zdHJ1Y3Rvci5jcHAKICAgICBydW50aW1lL051bWJlclByb3RvdHlwZS5jcHAKQEAgLTgw
Miw2ICs4MDMsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfT0JKRUNUX0xVVF9TT1VSQ0VTCiAgICAg
cnVudGltZS9SZWZsZWN0T2JqZWN0LmNwcAogICAgIHJ1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3Iu
Y3BwCiAgICAgcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCisgICAgcnVudGltZS9TZXRQcm90
b3R5cGUuY3BwCiAgICAgcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAKICAgICBydW50aW1l
L1N0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmNwcAogICAgIHJ1bnRpbWUvU3ltYm9sQ29uc3RydWN0
b3IuY3BwCkBAIC0xMjM4LDYgKzEyNDAsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfQlVJTFRJTlNf
U09VUkNFUwogICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9idWlsdGlucy9JbnNwZWN0b3JJbnN0
cnVtZW50YXRpb25PYmplY3QuanMKICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vYnVpbHRpbnMv
SW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IuanMKICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0v
YnVpbHRpbnMvSXRlcmF0b3JQcm90b3R5cGUuanMKKyAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0v
YnVpbHRpbnMvTWFwUHJvdG90eXBlLmpzCiAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2J1aWx0
aW5zL01vZHVsZUxvYWRlck9iamVjdC5qcwogICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9idWls
dGlucy9OdW1iZXJQcm90b3R5cGUuanMKICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vYnVpbHRp
bnMvT2JqZWN0Q29uc3RydWN0b3IuanMKQEAgLTEyNDUsNiArMTI0OCw3IEBAIHNldChKYXZhU2Ny
aXB0Q29yZV9CVUlMVElOU19TT1VSQ0VTCiAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2J1aWx0
aW5zL1Byb21pc2VPcGVyYXRpb25zLmpzCiAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2J1aWx0
aW5zL1Byb21pc2VQcm90b3R5cGUuanMKICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vYnVpbHRp
bnMvUmVmbGVjdE9iamVjdC5qcworICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9idWlsdGlucy9T
ZXRQcm90b3R5cGUuanMKICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vYnVpbHRpbnMvU3RyaW5n
Q29uc3RydWN0b3IuanMKICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vYnVpbHRpbnMvU3RyaW5n
SXRlcmF0b3JQcm90b3R5cGUuanMKICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vYnVpbHRpbnMv
U3RyaW5nUHJvdG90eXBlLmpzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVy
aXZlZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5t
YWtlCmluZGV4IDFlZTM5NGZjMDk3YzBkNTUxMDcxZmQyOWQwOTJmNzRhZDg1MzgxMWYuLjU1MDE2
ZmJlNWFkMjM5OGZlNTY4ZThlY2M0MGRmNTAwNTQ3NWY1M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC04OSw2ICs4OSw3IEBAIEphdmFTY3JpcHRDb3Jl
X0JVSUxUSU5TX1NPVVJDRVMgPSBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvYnVpbHRpbnMvSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmpzIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9i
dWlsdGlucy9JbnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rvci5qcyBcCiAgICAgJChKYXZhU2NyaXB0
Q29yZSkvYnVpbHRpbnMvSXRlcmF0b3JQcm90b3R5cGUuanMgXAorICAgICQoSmF2YVNjcmlwdENv
cmUpL2J1aWx0aW5zL01hcFByb3RvdHlwZS5qcyBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvYnVp
bHRpbnMvTW9kdWxlTG9hZGVyT2JqZWN0LmpzIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9idWls
dGlucy9OdW1iZXJQcm90b3R5cGUuanMgXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2J1aWx0aW5z
L09iamVjdENvbnN0cnVjdG9yLmpzIFwKQEAgLTk2LDYgKzk3LDcgQEAgSmF2YVNjcmlwdENvcmVf
QlVJTFRJTlNfU09VUkNFUyA9IFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9idWlsdGlucy9Qcm9t
aXNlT3BlcmF0aW9ucy5qcyBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvYnVpbHRpbnMvUHJvbWlz
ZVByb3RvdHlwZS5qcyBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvYnVpbHRpbnMvUmVmbGVjdE9i
amVjdC5qcyBcCisgICAgJChKYXZhU2NyaXB0Q29yZSkvYnVpbHRpbnMvU2V0UHJvdG90eXBlLmpz
IFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9idWlsdGlucy9TdHJpbmdDb25zdHJ1Y3Rvci5qcyBc
CiAgICAgJChKYXZhU2NyaXB0Q29yZSkvYnVpbHRpbnMvU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUu
anMgXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2J1aWx0aW5zL1N0cmluZ1Byb3RvdHlwZS5qcyBc
CkBAIC0xMzYsNiArMTM4LDcgQEAgT0JKRUNUX0xVVF9IRUFERVJTID0gXAogICAgIEpTT05PYmpl
Y3QubHV0LmggXAogICAgIEpTUHJvbWlzZVByb3RvdHlwZS5sdXQuaCBcCiAgICAgSlNQcm9taXNl
Q29uc3RydWN0b3IubHV0LmggXAorICAgIE1hcFByb3RvdHlwZS5sdXQuaCBcCiAgICAgTW9kdWxl
TG9hZGVyT2JqZWN0Lmx1dC5oIFwKICAgICBOdW1iZXJDb25zdHJ1Y3Rvci5sdXQuaCBcCiAgICAg
TnVtYmVyUHJvdG90eXBlLmx1dC5oIFwKQEAgLTE0Myw2ICsxNDYsNyBAQCBPQkpFQ1RfTFVUX0hF
QURFUlMgPSBcCiAgICAgUmVmbGVjdE9iamVjdC5sdXQuaCBcCiAgICAgUmVnRXhwQ29uc3RydWN0
b3IubHV0LmggXAogICAgIFJlZ0V4cFByb3RvdHlwZS5sdXQuaCBcCisgICAgU2V0UHJvdG90eXBl
Lmx1dC5oIFwKICAgICBTdHJpbmdDb25zdHJ1Y3Rvci5sdXQuaCBcCiAgICAgU3RyaW5nSXRlcmF0
b3JQcm90b3R5cGUubHV0LmggXAogICAgIFN5bWJvbENvbnN0cnVjdG9yLmx1dC5oIFwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCmluZGV4IDZkOTcyOWZmNTRkYzlhNzE3NTNl
ZjgxNjRiOWFmM2UzYzBiNDZmN2YuLmM3NDhhNTg5ZDQ1Nzc1ZjQ0NWQ5ZjA5ODllZmFkY2Q2ODQ4
NzM1YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagpAQCAtOTc0LDYg
Kzk3NCw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERp
cilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJj
ZXNcSlNQcm9taXNlUHJvdG90eXBlLmx1dC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
JChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJv
amVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEtleXdvcmRMb29rdXAubHV0LmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFy
Y2hpdGVjdHVyZSlcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcTGV4ZXIubHV0LmgiIC8+
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqJChQ
bGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcTWFwUHJv
dG90eXBlLmx1dC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9u
QnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2
ZWRTb3VyY2VzXE51bWJlckNvbnN0cnVjdG9yLmx1dC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUp
XCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXE51bWJlclByb3RvdHlwZS5sdXQuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBs
YXRmb3JtQXJjaGl0ZWN0dXJlKVwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xPYmplY3RD
b25zdHJ1Y3Rvci5sdXQuaCIgLz4KQEAgLTk4Miw2ICs5ODMsNyBAQAogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1
cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXFJlZ0V4cENvbnN0cnVjdG9yLmx1dC5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9i
aiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXFJl
Z0V4cEppdFRhYmxlcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0
aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERl
cml2ZWRTb3VyY2VzXFJlZ0V4cFByb3RvdHlwZS5sdXQuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0ZWN0dXJl
KVwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xTZXRQcm90b3R5cGUubHV0LmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqJChQbGF0
Zm9ybUFyY2hpdGVjdHVyZSlcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcU3RyaW5nQ29u
c3RydWN0b3IubHV0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRp
b25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQcm9qZWN0TmFtZSlcRGVy
aXZlZFNvdXJjZXNcU3ltYm9sUHJvdG90eXBlLmx1dC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUp
XCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEpTQ0J1aWx0aW5zLmgiIC8+CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMKaW5kZXggZTMwOTNm
OWFkMGIyZDFhMzhiNmVmMzM0NGI3MGQzNjg5ODViNGQzNC4uZjNkYTRmYzMxODI5NzIzMTZhYjc1
NjY5MjM1N2RjNDlmMTRmYzRlNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRD
b3JlLnZjeHByb2ouZmlsdGVycwpAQCAtMzQxMSw2ICszNDExLDkgQEAKICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0ZWN0
dXJlKVwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xSZWdFeHBDb25zdHJ1Y3Rvci5sdXQu
aCI+CiAgICAgICA8RmlsdGVyPkRlcml2ZWQgU291cmNlczwvRmlsdGVyPgogICAgIDwvQ2xJbmNs
dWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9i
aiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXE1h
cFByb3RvdHlwZS5sdXQuaCI+CisgICAgICA8RmlsdGVyPkRlcml2ZWQgU291cmNlczwvRmlsdGVy
PgorICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0
aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERl
cml2ZWRTb3VyY2VzXE51bWJlclByb3RvdHlwZS5sdXQuaCI+CiAgICAgICA8RmlsdGVyPkRlcml2
ZWQgU291cmNlczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpAQCAtMzQyMCw2ICszNDIzLDkg
QEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmok
KFBsYXRmb3JtQXJjaGl0ZWN0dXJlKVwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xSZWdF
eHBQcm90b3R5cGUubHV0LmgiPgogICAgICAgPEZpbHRlcj5EZXJpdmVkIFNvdXJjZXM8L0ZpbHRl
cj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoQ29uZmlndXJh
dGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0ZWN0dXJlKVwkKFByb2plY3ROYW1lKVxE
ZXJpdmVkU291cmNlc1xTZXRQcm90b3R5cGUubHV0LmgiPgorICAgICAgPEZpbHRlcj5EZXJpdmVk
IFNvdXJjZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0ZWN0dXJlKVwk
KFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xTdHJpbmdDb25zdHJ1Y3Rvci5sdXQuaCI+CiAg
ICAgICA8RmlsdGVyPkRlcml2ZWQgU291cmNlczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAxZWVlOTg4NjVjNjY1MWIzYTI1NDUyNmU5
MjM5NTU1YTRkNjkwNDExLi5jMjcxYmE3YWY1NTEyNmIzZjc2MTQ4MmZhOTUyYjM5ZWI4NWRiMDY5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzM2NSw2ICszMzY1LDEwIEBACiAJ
CTcwMTEzRDRBMUE4REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSXRlcmF0b3JPcGVyYXRpb25zLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcwMTNDQTg5MUI0OTFBOTQwMENBRTYxMyAvKiBKU0pvYi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0pvYi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcwMTNDQThBMUI0OTFBOTQwMENBRTYxMyAvKiBKU0pv
Yi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0pvYi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MDM1NTg3QzFDNDE4NDE5MDA0QkQ3QkYgLyogTWFwUHJvdG90
eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gTWFwUHJvdG90
eXBlLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MDM1NTg3RDFDNDE4NDE5MDA0
QkQ3QkYgLyogU2V0UHJvdG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0
OyBwYXRoID0gU2V0UHJvdG90eXBlLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MDM1NTg3RTFDNDE4NDU4MDA0QkQ3QkYgLyogTWFwUHJvdG90eXBlLmx1dC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBNYXBQcm90b3R5cGUubHV0Lmg7IHBhdGggPSBNYXBQcm90
b3R5cGUubHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcwMzU1ODdGMUM0MTg0
NTgwMDRCRDdCRiAvKiBTZXRQcm90b3R5cGUubHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFNldFByb3RvdHlwZS5sdXQuaDsgcGF0aCA9IFNldFByb3RvdHlwZS5sdXQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzA0RkQzNTMwNTY5N0U2RDAwM0RCRUQ5IC8q
IEJvb2xlYW5PYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQm9vbGVhbk9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJX
aWR0aCA9IDg7IH07CiAJCTcwNUI0MUEzMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2wuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3ltYm9sLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzA1QjQxQTQxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeW1ib2wuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTUzMjcsNiArNTMzMSw3IEBACiAJCQkJQTdDMjI1Q0QxMzk5ODQ5
QzAwRkYxNjYyIC8qIEtleXdvcmRMb29rdXAuaCAqLywKIAkJCQlCQzE4QzUyRDBFMTZGQ0UxMDBC
MzQ0NjAgLyogTGV4ZXIubHV0LmggKi8sCiAJCQkJNzBERTlBMDgxQkU3RDY3MDAwNUQ4OUQ5IC8q
IExMSW50QXNzZW1ibHkuaCAqLywKKwkJCQk3MDM1NTg3RTFDNDE4NDU4MDA0QkQ3QkYgLyogTWFw
UHJvdG90eXBlLmx1dC5oICovLAogCQkJCTk5NkI3MzBDMUJEOUZBMkMwMDMzMUI4NCAvKiBNb2R1
bGVMb2FkZXJPYmplY3QubHV0LmggKi8sCiAJCQkJQkMyNjgwRTYwRTE2RDUyMzAwQTA2RTkyIC8q
IE51bWJlckNvbnN0cnVjdG9yLmx1dC5oICovLAogCQkJCTk5NkI3MzBEMUJEOUZBMkMwMDMzMUI4
NCAvKiBOdW1iZXJQcm90b3R5cGUubHV0LmggKi8sCkBAIC01MzM1LDYgKzUzNDAsNyBAQAogCQkJ
CUJDRDIwMkQ1MEUxNzA3MDgwMDJDN0U4MiAvKiBSZWdFeHBDb25zdHJ1Y3Rvci5sdXQuaCAqLywK
IAkJCQlBNzE4RjYxQTExNzU0QTIxMDAyNDY1QTcgLyogUmVnRXhwSml0VGFibGVzLmggKi8sCiAJ
CQkJOTk2QjczMTAxQkQ5RkEyQzAwMzMxQjg0IC8qIFJlZ0V4cFByb3RvdHlwZS5sdXQuaCAqLywK
KwkJCQk3MDM1NTg3RjFDNDE4NDU4MDA0QkQ3QkYgLyogU2V0UHJvdG90eXBlLmx1dC5oICovLAog
CQkJCTk5NkI3MzExMUJEOUZBMkMwMDMzMUI4NCAvKiBTdHJpbmdDb25zdHJ1Y3Rvci5sdXQuaCAq
LywKIAkJCQk5OTZCNzMxMjFCRDlGQTJDMDAzMzFCODQgLyogU3RyaW5nSXRlcmF0b3JQcm90b3R5
cGUubHV0LmggKi8sCiAJCQkJOTk2QjczMTMxQkQ5RkEyQzAwMzMxQjg0IC8qIFN5bWJvbENvbnN0
cnVjdG9yLmx1dC5oICovLApAQCAtNjc4OCw2ICs2Nzk0LDcgQEAKIAkJCQlFMzVFMDM2MTFCN0FC
NDg1MDA3M0FEMkEgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmpzICovLAogCQkJ
CUUzM0Y1MDg4MUI4NDRBMUEwMDQxMzg1NiAvKiBJbnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rvci5q
cyAqLywKIAkJCQk3Q0Y5QkM1QjFCNjVEOUEzMDA5REIxRUYgLyogSXRlcmF0b3JQcm90b3R5cGUu
anMgKi8sCisJCQkJNzAzNTU4N0MxQzQxODQxOTAwNEJEN0JGIC8qIE1hcFByb3RvdHlwZS5qcyAq
LywKIAkJCQlFMzA2Nzc5NzFCOEJDNkY1MDAzRjg3RjAgLyogTW9kdWxlTG9hZGVyT2JqZWN0Lmpz
ICovLAogCQkJCUExNURFNUM1MUMwRkJGOEQwMDg5MTMzRCAvKiBOdW1iZXJQcm90b3R5cGUuanMg
Ki8sCiAJCQkJN0NGOUJDNUMxQjY1RDlCMTAwOURCMUVGIC8qIE9iamVjdENvbnN0cnVjdG9yLmpz
ICovLApAQCAtNjc5NSw2ICs2ODAyLDcgQEAKIAkJCQk3Q0ZCQUMxQzE4QjUzNUU1MDBEMDA3NTAg
LyogUHJvbWlzZVByb3RvdHlwZS5qcyAqLywKIAkJCQk3Q0Y5QkM1RTFCNjVEOUIxMDA5REIxRUYg
LyogUHJvbWlzZUNvbnN0cnVjdG9yLmpzICovLAogCQkJCTdDRjlCQzVGMUI2NUQ5QjEwMDlEQjFF
RiAvKiBSZWZsZWN0T2JqZWN0LmpzICovLAorCQkJCTcwMzU1ODdEMUM0MTg0MTkwMDRCRDdCRiAv
KiBTZXRQcm90b3R5cGUuanMgKi8sCiAJCQkJN0NGOUJDNjAxQjY1RDlCMTAwOURCMUVGIC8qIFN0
cmluZ0NvbnN0cnVjdG9yLmpzICovLAogCQkJCTdDRjlCQzYxMUI2NUQ5QjEwMDlEQjFFRiAvKiBT
dHJpbmdJdGVyYXRvclByb3RvdHlwZS5qcyAqLywKIAkJCQlBMUUwNDUxQjFDMjVCNEIxMDBCQjY2
M0MgLyogU3RyaW5nUHJvdG90eXBlLmpzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J1aWx0aW5zL01hcFByb3RvdHlwZS5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
dWlsdGlucy9NYXBQcm90b3R5cGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjM2NDZhODM2NTcwODUyMDFlMTU1
ODE4ZTllOTU4MzFiMzExOGE3ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9idWlsdGlucy9NYXBQcm90b3R5cGUuanMKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNiBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+Lgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitmdW5jdGlvbiBmb3JF
YWNoKGNhbGxiYWNrIC8qLCB0aGlzQXJnICovKQoreworICAgICJ1c2Ugc3RyaWN0IjsKKworICAg
IGlmICghQGlzTWFwKHRoaXMpKQorICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiTWFwIG9w
ZXJhdGlvbiBjYWxsZWQgb24gbm9uLU1hcCBvYmplY3QiKTsKKworICAgIGlmICh0eXBlb2YgY2Fs
bGJhY2sgIT09ICdmdW5jdGlvbicpCisgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJNYXAu
cHJvdG90eXBlLmZvckVhY2ggY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uIik7CisKKyAgICB2
YXIgdGhpc0FyZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZp
bmVkOworICAgIHZhciBpdGVyYXRvciA9IEBNYXBJdGVyYXRvcih0aGlzKTsKKworICAgIC8vIFRv
IGF2b2lkIG9iamVjdCBhbGxvY2F0aW9ucyBmb3IgaXRlcmF0b3IgcmVzdWx0IG9iamVjdHMsIHdl
IHBhc3MgdGhlIHBsYWNlaG9sZGVyIHRvIHRoZSBzcGVjaWFsICJuZXh0IiBmdW5jdGlvbiBpbiBv
cmRlciB0byBmaWxsIHRoZSByZXN1bHRzLgorICAgIHZhciB2YWx1ZSA9IFsgdW5kZWZpbmVkLCB1
bmRlZmluZWQgXTsKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGlmIChAbWFwSXRlcmF0b3JOZXh0
LkBjYWxsKGl0ZXJhdG9yLCB2YWx1ZSkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fs
bGJhY2suQGNhbGwodGhpc0FyZywgdmFsdWVbMV0sIHZhbHVlWzBdLCB0aGlzKTsKKyAgICB9Cit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvU2V0UHJvdG90eXBl
LmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL1NldFByb3RvdHlwZS5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5hYjg5YzZlZTViNjI2NzY4MWUyZWVlNGZlMDc0MzY4MDNlZTE5Y2U1Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL1NldFByb3RvdHlwZS5q
cwpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IFl1c3VrZSBTdXp1
a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKK2Z1bmN0aW9uIGZvckVhY2goY2FsbGJhY2sgLyosIHRoaXNBcmcgKi8p
Cit7CisgICAgInVzZSBzdHJpY3QiOworCisgICAgaWYgKCFAaXNTZXQodGhpcykpCisgICAgICAg
IHRocm93IG5ldyBAVHlwZUVycm9yKCJTZXQgb3BlcmF0aW9uIGNhbGxlZCBvbiBub24tU2V0IG9i
amVjdCIpOworCisgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykKKyAgICAg
ICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIlNldC5wcm90b3R5cGUuZm9yRWFjaCBjYWxsYmFjayBt
dXN0IGJlIGEgZnVuY3Rpb24iKTsKKworICAgIHZhciB0aGlzQXJnID0gYXJndW1lbnRzLmxlbmd0
aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7CisgICAgdmFyIGl0ZXJhdG9yID0gQFNl
dEl0ZXJhdG9yKHRoaXMpOworCisgICAgLy8gVG8gYXZvaWQgb2JqZWN0IGFsbG9jYXRpb25zIGZv
ciBpdGVyYXRvciByZXN1bHQgb2JqZWN0cywgd2UgcGFzcyB0aGUgcGxhY2Vob2xkZXIgdG8gdGhl
IHNwZWNpYWwgIm5leHQiIGZ1bmN0aW9uIGluIG9yZGVyIHRvIGZpbGwgdGhlIHJlc3VsdHMuCisg
ICAgdmFyIHZhbHVlID0gWyB1bmRlZmluZWQgXTsKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGlm
IChAc2V0SXRlcmF0b3JOZXh0LkBjYWxsKGl0ZXJhdG9yLCB2YWx1ZSkpCisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FsbGJhY2suQGNhbGwodGhpc0FyZywgdmFsdWVbMF0sIHZhbHVlWzBd
LCB0aGlzKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21tb25JZGVudGlmaWVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29tbW9uSWRlbnRpZmllcnMuaAppbmRleCBiNTEwMjhmNDAxNGM1ODNlOWNjMWJhOGEzODhmMGIx
ZmVkOTMyNWFhLi4wYzVhOGEwODJkNDNjOTRmN2U3ZjRlYWJkOWU5NDI2NmJkYzU1MmRmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgK
QEAgLTM2Miw2ICszNjIsMTIgQEAKICAgICBtYWNybyhpc0JvdW5kRnVuY3Rpb24pIFwKICAgICBt
YWNybyhoYXNJbnN0YW5jZUJvdW5kRnVuY3Rpb24pIFwKICAgICBtYWNybyhpbnN0YW5jZU9mKSBc
CisgICAgbWFjcm8oaXNTZXQpIFwKKyAgICBtYWNybyhpc01hcCkgXAorICAgIG1hY3JvKFNldEl0
ZXJhdG9yKSBcCisgICAgbWFjcm8oc2V0SXRlcmF0b3JOZXh0KSBcCisgICAgbWFjcm8oTWFwSXRl
cmF0b3IpIFwKKyAgICBtYWNybyhtYXBJdGVyYXRvck5leHQpIFwKIAogCiBuYW1lc3BhY2UgSlND
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdG9yT3Bl
cmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRvck9wZXJh
dGlvbnMuY3BwCmluZGV4IDJlODg2YmY5NmIwOGQ5NTczNGFmMTdjMTJmNzg5YzBmZDMyZTMwZjIu
LjdkY2QwN2I2ZmRhODI1NmFhOTJkZDRkNjY0Y2U3OWMwMzBlMGJlZjEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmNwcApAQCAt
MTMxLDExICsxMzEsMjUgQEAgdm9pZCBpdGVyYXRvckNsb3NlKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSBpdGVyYXRvcikKICAgICB9CiB9CiAKK3N0YXRpYyBjb25zdCBQcm9wZXJ0eU9mZnNldCBk
b25lUHJvcGVydHlPZmZzZXQgPSAwOworc3RhdGljIGNvbnN0IFByb3BlcnR5T2Zmc2V0IHZhbHVl
UHJvcGVydHlPZmZzZXQgPSAxOworCitTdHJ1Y3R1cmUqIGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2Jq
ZWN0U3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAg
ICBTdHJ1Y3R1cmUqIGl0ZXJhdG9yUmVzdWx0U3RydWN0dXJlID0gdm0ucHJvdG90eXBlTWFwLmVt
cHR5T2JqZWN0U3RydWN0dXJlRm9yUHJvdG90eXBlKGdsb2JhbE9iamVjdC5vYmplY3RQcm90b3R5
cGUoKSwgSlNGaW5hbE9iamVjdDo6ZGVmYXVsdElubGluZUNhcGFjaXR5KCkpOworICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldDsKKyAgICBpdGVyYXRvclJlc3VsdFN0cnVjdHVyZSA9IFN0cnVjdHVy
ZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBpdGVyYXRvclJlc3VsdFN0cnVjdHVyZSwgdm0u
cHJvcGVydHlOYW1lcy0+ZG9uZSwgMCwgb2Zmc2V0KTsKKyAgICBSRUxFQVNFX0FTU0VSVChvZmZz
ZXQgPT0gZG9uZVByb3BlcnR5T2Zmc2V0KTsKKyAgICBpdGVyYXRvclJlc3VsdFN0cnVjdHVyZSA9
IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBpdGVyYXRvclJlc3VsdFN0cnVj
dHVyZSwgdm0ucHJvcGVydHlOYW1lcy0+dmFsdWUsIDAsIG9mZnNldCk7CisgICAgUkVMRUFTRV9B
U1NFUlQob2Zmc2V0ID09IHZhbHVlUHJvcGVydHlPZmZzZXQpOworICAgIHJldHVybiBpdGVyYXRv
clJlc3VsdFN0cnVjdHVyZTsKK30KKwogSlNPYmplY3QqIGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2Jq
ZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBkb25lKQogewotICAgIEpT
T2JqZWN0KiByZXN1bHRPYmplY3QgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKLSAgICBy
ZXN1bHRPYmplY3QtPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
ZG9uZSwganNCb29sZWFuKGRvbmUpKTsKLSAgICByZXN1bHRPYmplY3QtPnB1dERpcmVjdChleGVj
LT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudmFsdWUsIHZhbHVlKTsKKyAgICBKU09iamVj
dCogcmVzdWx0T2JqZWN0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYywgZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLT5pdGVyYXRvclJlc3VsdE9iamVjdFN0cnVjdHVyZSgpKTsKKyAgICBy
ZXN1bHRPYmplY3QtPnB1dERpcmVjdChleGVjLT52bSgpLCBkb25lUHJvcGVydHlPZmZzZXQsIGpz
Qm9vbGVhbihkb25lKSk7CisgICAgcmVzdWx0T2JqZWN0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwg
dmFsdWVQcm9wZXJ0eU9mZnNldCwgdmFsdWUpOwogICAgIHJldHVybiByZXN1bHRPYmplY3Q7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdG9yT3Bl
cmF0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JPcGVyYXRp
b25zLmgKaW5kZXggYTlhMzAwYzk0MjYyZGEyYmNkYTQ3NjAwMmUzMWZjNDU2Y2FmNzdiYS4uZmFl
ZTQ2YWUyZjBmYWFmOTA3ZjQ0YTljZWQ0MWUxZDRkYTg1ZTkxNSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmgKQEAgLTM5LDYgKzM5
LDggQEAgSlNWYWx1ZSBpdGVyYXRvclN0ZXAoRXhlY1N0YXRlKiwgSlNWYWx1ZSBpdGVyYXRvcik7
CiB2b2lkIGl0ZXJhdG9yQ2xvc2UoRXhlY1N0YXRlKiwgSlNWYWx1ZSBpdGVyYXRvcik7CiBKU19F
WFBPUlRfUFJJVkFURSBKU09iamVjdCogY3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoRXhlY1N0
YXRlKiwgSlNWYWx1ZSwgYm9vbCBkb25lKTsKIAorU3RydWN0dXJlKiBjcmVhdGVJdGVyYXRvclJl
c3VsdE9iamVjdFN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0Jik7CisKIH0KIAogI2VuZGlm
IC8vICFkZWZpbmVkKEl0ZXJhdG9yT3BlcmF0aW9uc19oKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCmluZGV4IDdkODk3M2QzZGMyZjlhNDQ1
ZjU3ODgwMmUyOTBkZmM5MDg4NDliMGEuLjUyOTdkNjQ1N2EwZjJhYThhMzI1NmQ3MWE4ODk1OTJk
NzhkYjI3NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHAKQEAgLTQ1OSwxMiArNDU5LDcgQEAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRp
b24odm0sIHZtLnByb3BlcnR5TmFtZXMtPiBqc05hbWUsIGxvd2VyTmFtZSAjIyBDb25zdHJ1Y3QK
ICAgICBGT1JfRUFDSF9TSU1QTEVfQlVJTFRJTl9UWVBFX1dJVEhfQ09OU1RSVUNUT1IoUFVUX0NP
TlNUUlVDVE9SX0ZPUl9TSU1QTEVfVFlQRSkKIAogI3VuZGVmIFBVVF9DT05TVFJVQ1RPUl9GT1Jf
U0lNUExFX1RZUEUKLSAgICBQcm90b3R5cGVNYXAmIHByb3RvdHlwZU1hcCA9IHZtLnByb3RvdHlw
ZU1hcDsKLSAgICBTdHJ1Y3R1cmUqIGl0ZXJhdG9yUmVzdWx0U3RydWN0dXJlID0gcHJvdG90eXBl
TWFwLmVtcHR5T2JqZWN0U3RydWN0dXJlRm9yUHJvdG90eXBlKG1fb2JqZWN0UHJvdG90eXBlLmdl
dCgpLCBKU0ZpbmFsT2JqZWN0OjpkZWZhdWx0SW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0OwotICAgIGl0ZXJhdG9yUmVzdWx0U3RydWN0dXJlID0gU3RydWN0dXJl
OjphZGRQcm9wZXJ0eVRyYW5zaXRpb24odm0sIGl0ZXJhdG9yUmVzdWx0U3RydWN0dXJlLCB2bS5w
cm9wZXJ0eU5hbWVzLT5kb25lLCAwLCBvZmZzZXQpOwotICAgIGl0ZXJhdG9yUmVzdWx0U3RydWN0
dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24odm0sIGl0ZXJhdG9yUmVzdWx0
U3RydWN0dXJlLCB2bS5wcm9wZXJ0eU5hbWVzLT52YWx1ZSwgMCwgb2Zmc2V0KTsKLSAgICBtX2l0
ZXJhdG9yUmVzdWx0U3RydWN0dXJlLnNldCh2bSwgdGhpcywgaXRlcmF0b3JSZXN1bHRTdHJ1Y3R1
cmUpOworICAgIG1faXRlcmF0b3JSZXN1bHRPYmplY3RTdHJ1Y3R1cmUuc2V0KHZtLCB0aGlzLCBj
cmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdFN0cnVjdHVyZSh2bSwgKnRoaXMpKTsKICAgICAKICAg
ICBtX2V2YWxGdW5jdGlvbi5zZXQodm0sIHRoaXMsIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgdGhp
cywgMSwgdm0ucHJvcGVydHlOYW1lcy0+ZXZhbC5zdHJpbmcoKSwgZ2xvYmFsRnVuY0V2YWwpKTsK
ICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+ZXZh
bCwgbV9ldmFsRnVuY3Rpb24uZ2V0KCksIERvbnRFbnVtKTsKQEAgLTU1OCw2ICs1NTMsMTQgQEAg
cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPiBqc05hbWUs
IGxvd2VyTmFtZSAjIyBDb25zdHJ1Y3QKICAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKHZtLnBy
b3BlcnR5TmFtZXMtPlByb21pc2VQcml2YXRlTmFtZSwgcHJvbWlzZUNvbnN0cnVjdG9yLCBEb250
RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCiAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5m
byh2bS5wcm9wZXJ0eU5hbWVzLT5JbnRlcm5hbFByb21pc2VQcml2YXRlTmFtZSwgaW50ZXJuYWxQ
cm9taXNlQ29uc3RydWN0b3IsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKICAg
ICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKHZtLnByb3BlcnR5TmFtZXMtPnByb21pc2VQZW5kaW5n
UHJpdmF0ZU5hbWUsIGpzTnVtYmVyKHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU1Byb21pc2U6OlN0
YXR1czo6UGVuZGluZykpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCisKKyAg
ICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKHZtLnByb3BlcnR5TmFtZXMtPmlzU2V0UHJpdmF0ZU5h
bWUsIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgdGhpcywgMSwgU3RyaW5nKCksIHByaXZhdGVGdW5j
SXNTZXQpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCisgICAgICAgIEdsb2Jh
bFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5TZXRJdGVyYXRvclByaXZhdGVOYW1lLCBK
U0Z1bmN0aW9uOjpjcmVhdGUodm0sIHRoaXMsIDEsIFN0cmluZygpLCBwcml2YXRlRnVuY1NldEl0
ZXJhdG9yKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAorICAgICAgICBHbG9i
YWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+c2V0SXRlcmF0b3JOZXh0UHJpdmF0ZU5h
bWUsIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgdGhpcywgMCwgU3RyaW5nKCksIHByaXZhdGVGdW5j
U2V0SXRlcmF0b3JOZXh0KSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAorICAg
ICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+aXNNYXBQcml2YXRlTmFt
ZSwgSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCB0aGlzLCAxLCBTdHJpbmcoKSwgcHJpdmF0ZUZ1bmNJ
c01hcCksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKKyAgICAgICAgR2xvYmFs
UHJvcGVydHlJbmZvKHZtLnByb3BlcnR5TmFtZXMtPk1hcEl0ZXJhdG9yUHJpdmF0ZU5hbWUsIEpT
RnVuY3Rpb246OmNyZWF0ZSh2bSwgdGhpcywgMSwgU3RyaW5nKCksIHByaXZhdGVGdW5jTWFwSXRl
cmF0b3IpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCisgICAgICAgIEdsb2Jh
bFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5tYXBJdGVyYXRvck5leHRQcml2YXRlTmFt
ZSwgSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCB0aGlzLCAwLCBTdHJpbmcoKSwgcHJpdmF0ZUZ1bmNN
YXBJdGVyYXRvck5leHQpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCisKICAg
ICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygp
LnByb21pc2VGdWxmaWxsZWRQcml2YXRlTmFtZSgpLCBqc051bWJlcihzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oSlNQcm9taXNlOjpTdGF0dXM6OkZ1bGZpbGxlZCkpLCBEb250RW51bSB8IERvbnREZWxl
dGUgfCBSZWFkT25seSksCiAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5h
bWVzLT5idWlsdGluTmFtZXMoKS5wcm9taXNlUmVqZWN0ZWRQcml2YXRlTmFtZSgpLCBqc051bWJl
cihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNQcm9taXNlOjpTdGF0dXM6OlJlamVjdGVkKSksIERv
bnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKICAgICAgICAgR2xvYmFsUHJvcGVydHlJ
bmZvKHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLnRvTGVuZ3RoUHJpdmF0ZU5hbWUo
KSwgcHJpdmF0ZUZ1bmNUb0xlbmd0aCwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkp
LApAQCAtODkyLDYgKzg5NSw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB2aXNpdG9yLmFwcGVuZCgm
dGhpc09iamVjdC0+bV9zeW1ib2xPYmplY3RTdHJ1Y3R1cmUpOwogICAgIHZpc2l0b3IuYXBwZW5k
KCZ0aGlzT2JqZWN0LT5tX3JlZ0V4cFN0cnVjdHVyZSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRo
aXNPYmplY3QtPm1fZ2VuZXJhdG9yRnVuY3Rpb25TdHJ1Y3R1cmUpOworICAgIHZpc2l0b3IuYXBw
ZW5kKCZ0aGlzT2JqZWN0LT5tX2l0ZXJhdG9yUmVzdWx0T2JqZWN0U3RydWN0dXJlKTsKICAgICB2
aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUp
OwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX21vZHVsZVJlY29yZFN0cnVjdHVy
ZSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fbW9kdWxlTmFtZXNwYWNlT2Jq
ZWN0U3RydWN0dXJlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oCmluZGV4IDBmNThkOTFjYjQwMGQ0MWQzN2JmMzc3MmI2MTZmN2EyMzFmN2ZlYTYu
LjEwY2M5NjQ0ZDkwYzE3ZGQ0Y2NlNzU5ZjEwZGI3OGIwYzE0NzgwNjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaApAQCAtMjcyLDcgKzI3Miw3
IEBAIGNsYXNzIEpTR2xvYmFsT2JqZWN0IDogcHVibGljIEpTU2VnbWVudGVkVmFyaWFibGVPYmpl
Y3QgewogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fY29uc29sZVN0cnVjdHVyZTsKICAg
ICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2RvbGxhclZNU3RydWN0dXJlOwogICAgIFdyaXRl
QmFycmllcjxTdHJ1Y3R1cmU+IG1faW50ZXJuYWxGdW5jdGlvblN0cnVjdHVyZTsKLSAgICBXcml0
ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2l0ZXJhdG9yUmVzdWx0U3RydWN0dXJlOworICAgIFdyaXRl
QmFycmllcjxTdHJ1Y3R1cmU+IG1faXRlcmF0b3JSZXN1bHRPYmplY3RTdHJ1Y3R1cmU7CiAgICAg
V3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmU7CiAg
ICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9tb2R1bGVSZWNvcmRTdHJ1Y3R1cmU7CiAgICAg
V3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9tb2R1bGVOYW1lc3BhY2VPYmplY3RTdHJ1Y3R1cmU7
CkBAIC01MjQsOCArNTI0LDcgQEAgY2xhc3MgSlNHbG9iYWxPYmplY3QgOiBwdWJsaWMgSlNTZWdt
ZW50ZWRWYXJpYWJsZU9iamVjdCB7CiAgICAgU3RydWN0dXJlKiBzZXRTdHJ1Y3R1cmUoKSBjb25z
dCB7IHJldHVybiBtX3NldFN0cnVjdHVyZS5nZXQoKTsgfQogICAgIFN0cnVjdHVyZSogc3RyaW5n
T2JqZWN0U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmdPYmplY3RTdHJ1Y3R1cmUu
Z2V0KCk7IH0KICAgICBTdHJ1Y3R1cmUqIHN5bWJvbE9iamVjdFN0cnVjdHVyZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3ltYm9sT2JqZWN0U3RydWN0dXJlLmdldCgpOyB9Ci0gICAgU3RydWN0dXJlKiBp
dGVyYXRvclJlc3VsdFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1faXRlcmF0b3JSZXN1bHRT
dHJ1Y3R1cmUuZ2V0KCk7IH0KLSAgICBzdGF0aWMgcHRyZGlmZl90IGl0ZXJhdG9yUmVzdWx0U3Ry
dWN0dXJlT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBt
X2l0ZXJhdG9yUmVzdWx0U3RydWN0dXJlKTsgfQorICAgIFN0cnVjdHVyZSogaXRlcmF0b3JSZXN1
bHRPYmplY3RTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX2l0ZXJhdG9yUmVzdWx0T2JqZWN0
U3RydWN0dXJlLmdldCgpOyB9CiAgICAgU3RydWN0dXJlKiByZWdFeHBNYXRjaGVzQXJyYXlTdHJ1
Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3JlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZS5nZXQo
KTsgfQogICAgIFN0cnVjdHVyZSogbW9kdWxlUmVjb3JkU3RydWN0dXJlKCkgY29uc3QgeyByZXR1
cm4gbV9tb2R1bGVSZWNvcmRTdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICBTdHJ1Y3R1cmUqIG1vZHVs
ZU5hbWVzcGFjZU9iamVjdFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlTmFtZXNw
YWNlT2JqZWN0U3RydWN0dXJlLmdldCgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTWFwUHJvdG90eXBlLmNwcAppbmRleCBiZTc5MGRkMWI4NDY4N2NhYmZiNDVkYjNjYWU5
NzEwNzU1NjRmMDEwLi5jOTAxMjg1YmU0NTRlNDJjNmM1ZWU0ZGUyZjlhNzAxODBlODdjYWZhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcFByb3RvdHlwZS5jcHAKQEAg
LTMwLDIwICszMCwyOSBAQAogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9u
SGVscGVycy5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgorI2luY2x1ZGUgIkl0ZXJhdG9y
T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
SlNGdW5jdGlvbklubGluZXMuaCIKICNpbmNsdWRlICJKU01hcC5oIgogI2luY2x1ZGUgIkpTTWFw
SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJMb29rdXAuaCIKICNpbmNsdWRlICJNYXBEYXRhSW5saW5l
cy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIAorI2luY2x1ZGUgIk1hcFByb3Rv
dHlwZS5sdXQuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBNYXBQcm90
b3R5cGU6OnNfaW5mbyA9IHsgIk1hcCIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0Rf
VEFCTEUoTWFwUHJvdG90eXBlKSB9OwogCisvKiBTb3VyY2UgZm9yIE1hcFByb3RvdHlwZS5sdXQu
aAorQGJlZ2luIG1hcFByb3RvdHlwZVRhYmxlCisgIGZvckVhY2ggICBKU0J1aWx0aW4gIERvbnRF
bnVtfEZ1bmN0aW9uIDAKK0BlbmQKKyovCisKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG1hcFByb3RvRnVuY0NsZWFyKEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jRGVsZXRlKEV4ZWNTdGF0ZSopOwotc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jRm9yRWFjaChFeGVjU3Rh
dGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY0dl
dChFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFBy
b3RvRnVuY0hhcyhFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG1hcFByb3RvRnVuY1NldChFeGVjU3RhdGUqKTsKQEAgLTYxLDcgKzcwLDYgQEAgdm9pZCBN
YXBQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCkKIAogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+Y2xl
YXIsIG1hcFByb3RvRnVuY0NsZWFyLCBEb250RW51bSwgMCk7CiAgICAgSlNDX05BVElWRV9GVU5D
VElPTih2bS5wcm9wZXJ0eU5hbWVzLT5kZWxldGVLZXl3b3JkLCBtYXBQcm90b0Z1bmNEZWxldGUs
IERvbnRFbnVtLCAxKTsKLSAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMt
PmZvckVhY2gsIG1hcFByb3RvRnVuY0ZvckVhY2gsIERvbnRFbnVtLCAxKTsKICAgICBKU0NfTkFU
SVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmdldCwgbWFwUHJvdG9GdW5jR2V0LCBEb250
RW51bSwgMSk7CiAgICAgSlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5oYXMs
IG1hcFByb3RvRnVuY0hhcywgRG9udEVudW0sIDEpOwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT04o
dm0ucHJvcGVydHlOYW1lcy0+c2V0LCBtYXBQcm90b0Z1bmNTZXQsIERvbnRFbnVtLCAyKTsKQEAg
LTgzLDYgKzkxLDExIEBAIHZvaWQgTWFwUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgcHV0RGlyZWN0Tm9uSW5kZXhBY2Nl
c3Nvcih2bSwgdm0ucHJvcGVydHlOYW1lcy0+c2l6ZSwgYWNjZXNzb3IsIERvbnRFbnVtIHwgQWNj
ZXNzb3IpOwogfQogCitib29sIE1hcFByb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2Jq
ZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90JiBzbG90KQoreworICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvblNsb3Q8
QmFzZT4oZXhlYywgbWFwUHJvdG90eXBlVGFibGUsIGpzQ2FzdDxNYXBQcm90b3R5cGUqPihvYmpl
Y3QpLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworfQorCiBBTFdBWVNfSU5MSU5FIHN0YXRpYyBKU01h
cCogZ2V0TWFwKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIHRoaXNWYWx1ZSkKIHsKICAg
ICBpZiAoIXRoaXNWYWx1ZS5pc09iamVjdCgpKSB7CkBAIC0xMTQsNDQgKzEyNyw2IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jRGVsZXRlKENhbGxGcmFtZSogY2Fs
bEZyYW1lKQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKG1hcC0+cmVtb3Zl
KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSkpKTsKIH0KIAotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNGb3JFYWNoKENhbGxGcmFtZSogY2FsbEZyYW1l
KQotewotICAgIEpTTWFwKiBtYXAgPSBnZXRNYXAoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNW
YWx1ZSgpKTsKLSAgICBpZiAoIW1hcCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKLSAgICBKU1ZhbHVlIGNhbGxCYWNrID0gY2FsbEZyYW1lLT5hcmd1bWVu
dCgwKTsKLSAgICBDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdl
dENhbGxEYXRhKGNhbGxCYWNrLCBjYWxsRGF0YSk7Ci0gICAgaWYgKGNhbGxUeXBlID09IENhbGxU
eXBlTm9uZSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihj
YWxsRnJhbWUsIFdURjo6QVNDSUlMaXRlcmFsKCJNYXAucHJvdG90eXBlLmZvckVhY2ggY2FsbGVk
IHdpdGhvdXQgY2FsbGJhY2siKSkpOwotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gY2FsbEZyYW1l
LT5hcmd1bWVudCgxKTsKLSAgICBWTSogdm0gPSAmY2FsbEZyYW1lLT52bSgpOwotICAgIEpTTWFw
SXRlcmF0b3IqIGl0ZXJhdG9yID0gSlNNYXBJdGVyYXRvcjo6Y3JlYXRlKCp2bSwgY2FsbEZyYW1l
LT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCktPm1hcEl0ZXJhdG9yU3RydWN0dXJlKCksIG1hcCwg
TWFwSXRlcmF0ZUtleVZhbHVlKTsKLSAgICBKU1ZhbHVlIGtleSwgdmFsdWU7Ci0gICAgaWYgKGNh
bGxUeXBlID09IENhbGxUeXBlSlMpIHsKLSAgICAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBq
c0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxCYWNrKTsKLSAgICAgICAgQ2FjaGVkQ2FsbCBjYWNoZWRD
YWxsKGNhbGxGcmFtZSwgZnVuY3Rpb24sIDMpOwotICAgICAgICB3aGlsZSAoaXRlcmF0b3ItPm5l
eHRLZXlWYWx1ZShrZXksIHZhbHVlKSAmJiAhdm0tPmV4Y2VwdGlvbigpKSB7Ci0gICAgICAgICAg
ICBjYWNoZWRDYWxsLnNldFRoaXModGhpc1ZhbHVlKTsKLSAgICAgICAgICAgIGNhY2hlZENhbGwu
c2V0QXJndW1lbnQoMCwgdmFsdWUpOwotICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVu
dCgxLCBrZXkpOwotICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgyLCBtYXApOwot
ICAgICAgICAgICAgY2FjaGVkQ2FsbC5jYWxsKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaXRlcmF0
b3ItPmZpbmlzaCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHdoaWxlIChpdGVyYXRvci0+bmV4
dEtleVZhbHVlKGtleSwgdmFsdWUpICYmICF2bS0+ZXhjZXB0aW9uKCkpIHsKLSAgICAgICAgICAg
IE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7Ci0gICAgICAgICAgICBhcmdzLmFwcGVuZCh2YWx1
ZSk7Ci0gICAgICAgICAgICBhcmdzLmFwcGVuZChrZXkpOwotICAgICAgICAgICAgYXJncy5hcHBl
bmQobWFwKTsKLSAgICAgICAgICAgIEpTQzo6Y2FsbChjYWxsRnJhbWUsIGNhbGxCYWNrLCBjYWxs
VHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncyk7Ci0gICAgICAgIH0KLSAgICAgICAgaXRl
cmF0b3ItPmZpbmlzaCgpOwotICAgIH0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwotfQotCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVu
Y0dldChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBKU01hcCogbWFwID0gZ2V0TWFwKGNh
bGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CkBAIC0yMTAsNCArMTg1LDMxIEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jS2V5cyhDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTTWFwSXRlcmF0b3I6OmNyZWF0
ZShjYWxsRnJhbWUtPnZtKCksIGNhbGxGcmFtZS0+Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgpLT5t
YXBJdGVyYXRvclN0cnVjdHVyZSgpLCB0aGlzT2JqLCBNYXBJdGVyYXRlS2V5KSk7CiB9CiAKK0Vu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmNJc01hcChFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oanNEeW5hbWljQ2Fz
dDxKU01hcCo+KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKSkpOworfQorCitFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHByaXZhdGVGdW5jTWFwSXRlcmF0b3IoRXhlY1N0YXRlKiBleGVj
KQoreworICAgIEFTU0VSVChqc0R5bmFtaWNDYXN0PEpTTWFwKj4oZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoMCkpKTsKKyAgICBKU01hcCogbWFwID0ganNDYXN0PEpTTWFwKj4oZXhlYy0+dW5jaGVj
a2VkQXJndW1lbnQoMCkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNNYXBJdGVyYXRv
cjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKS0+bWFw
SXRlcmF0b3JTdHJ1Y3R1cmUoKSwgbWFwLCBNYXBJdGVyYXRlS2V5VmFsdWUpKTsKK30KKworRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcml2YXRlRnVuY01hcEl0ZXJhdG9yTmV4dChFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgQVNTRVJUKGpzRHluYW1pY0Nhc3Q8SlNNYXBJdGVyYXRvcio+
KGV4ZWMtPnRoaXNWYWx1ZSgpKSk7CisgICAgSlNNYXBJdGVyYXRvciogaXRlcmF0b3IgPSBqc0Nh
c3Q8SlNNYXBJdGVyYXRvcio+KGV4ZWMtPnRoaXNWYWx1ZSgpKTsKKyAgICBKU1ZhbHVlIGtleSwg
dmFsdWU7CisgICAgaWYgKGl0ZXJhdG9yLT5uZXh0S2V5VmFsdWUoa2V5LCB2YWx1ZSkpIHsKKyAg
ICAgICAgSlNBcnJheSogcmVzdWx0QXJyYXkgPSBqc0Nhc3Q8SlNBcnJheSo+KGV4ZWMtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApKTsKKyAgICAgICAgcmVzdWx0QXJyYXktPnB1dERpcmVjdEluZGV4KGV4
ZWMsIDAsIGtleSk7CisgICAgICAgIHJlc3VsdEFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCAx
LCB2YWx1ZSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNl
KSk7CisgICAgfQorICAgIGl0ZXJhdG9yLT5maW5pc2goKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSk7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL01hcFByb3RvdHlwZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTWFwUHJvdG90eXBlLmgKaW5kZXggZWFhNTgyNTM3OWZhNmY2NzAzYzk3YTNjMTMz
ODcwNDFjY2FlZDU4MS4uM2U3MjU2N2RiMzE5MWRlZGIzZjYwZmMxNmJjZTFiMTE5ZTk4ZDVmNiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmgKQEAgLTM0
LDYgKzM0LDggQEAgY2xhc3MgTWFwUHJvdG90eXBlIDogcHVibGljIEpTTm9uRmluYWxPYmplY3Qg
ewogcHVibGljOgogICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOwogCisgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90IHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisKICAgICBzdGF0aWMgTWFwUHJvdG90eXBl
KiBjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKICAgICB7CiAgICAgICAgIE1hcFByb3RvdHlwZSogcHJvdG90eXBlID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8TWFwUHJvdG90eXBlPih2bS5oZWFwKSkgTWFwUHJvdG90
eXBlKHZtLCBzdHJ1Y3R1cmUpOwpAQCAtNTQsOCArNTYsMTMgQEAgY2xhc3MgTWFwUHJvdG90eXBl
IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogICAgIHsKICAgICB9CiAgICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0Kik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3du
UHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmKTsKIH07CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmNJ
c01hcChFeGVjU3RhdGUqKTsKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1
bmNNYXBJdGVyYXRvcihFeGVjU3RhdGUqKTsKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
cHJpdmF0ZUZ1bmNNYXBJdGVyYXRvck5leHQoRXhlY1N0YXRlKik7CisKIH0KIAogI2VuZGlmIC8v
ICFkZWZpbmVkKE1hcFByb3RvdHlwZV9oKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NldFByb3RvdHlwZS5jcHAKaW5kZXggZGRlZWUzN2I2ZjQyOGUwNzNhZjFlZmIwMTEzNjlm
NGEyNzkwNTZhOS4uMTIwMTRmMzE3MTFkYTVkYjVhODAyOGZiYTgxNjYzZTM5OTMyMDNiYiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRQcm90b3R5cGUuY3BwCkBAIC0z
MCwyMSArMzAsMzAgQEAKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkhl
bHBlcnMuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKKyNpbmNsdWRlICJJdGVyYXRvck9w
ZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpT
RnVuY3Rpb25JbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNTZXQuaCIKICNpbmNsdWRlICJKU1NldEl0
ZXJhdG9yLmgiCisjaW5jbHVkZSAiTG9va3VwLmgiCiAjaW5jbHVkZSAiTWFwRGF0YUlubGluZXMu
aCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAKKyNpbmNsdWRlICJTZXRQcm90b3R5
cGUubHV0LmgiCisKIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gU2V0UHJvdG90
eXBlOjpzX2luZm8gPSB7ICJTZXQiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKFNldFByb3RvdHlwZSkgfTsKIAorLyogU291cmNlIGZvciBTZXRJdGVyYXRvclByb3RvdHlw
ZS5sdXQuaAorQGJlZ2luIHNldFByb3RvdHlwZVRhYmxlCisgIGZvckVhY2ggICBKU0J1aWx0aW4g
IERvbnRFbnVtfEZ1bmN0aW9uIDAKK0BlbmQKKyovCisKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHNldFByb3RvRnVuY0FkZChFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHNldFByb3RvRnVuY0NsZWFyKEV4ZWNTdGF0ZSopOwogc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc2V0UHJvdG9GdW5jRGVsZXRlKEV4ZWNT
dGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc2V0UHJvdG9GdW5j
Rm9yRWFjaChFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHNldFByb3RvRnVuY0hhcyhFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHNldFByb3RvRnVuY1ZhbHVlcyhFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHNldFByb3RvRnVuY0VudHJpZXMoRXhlY1N0YXRlKik7CkBA
IC02MSw3ICs3MCw2IEBAIHZvaWQgU2V0UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgSlNDX05BVElWRV9GVU5DVElPTih2
bS5wcm9wZXJ0eU5hbWVzLT5hZGQsIHNldFByb3RvRnVuY0FkZCwgRG9udEVudW0sIDEpOwogICAg
IEpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+Y2xlYXIsIHNldFByb3RvRnVu
Y0NsZWFyLCBEb250RW51bSwgMCk7CiAgICAgSlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0
eU5hbWVzLT5kZWxldGVLZXl3b3JkLCBzZXRQcm90b0Z1bmNEZWxldGUsIERvbnRFbnVtLCAxKTsK
LSAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmZvckVhY2gsIHNldFBy
b3RvRnVuY0ZvckVhY2gsIERvbnRFbnVtLCAxKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OKHZt
LnByb3BlcnR5TmFtZXMtPmhhcywgc2V0UHJvdG9GdW5jSGFzLCBEb250RW51bSwgMSk7CiAgICAg
SlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5lbnRyaWVzLCBzZXRQcm90b0Z1
bmNFbnRyaWVzLCBEb250RW51bSwgMCk7CiAKQEAgLTc3LDYgKzg1LDEyIEBAIHZvaWQgU2V0UHJv
dG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCiAgICAgcHV0RGlyZWN0Tm9uSW5kZXhBY2Nlc3Nvcih2bSwgdm0ucHJvcGVydHlOYW1lcy0+
c2l6ZSwgYWNjZXNzb3IsIERvbnRFbnVtIHwgQWNjZXNzb3IpOwogfQogCitib29sIFNldFByb3Rv
dHlwZTo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAg
IHJldHVybiBnZXRTdGF0aWNGdW5jdGlvblNsb3Q8QmFzZT4oZXhlYywgc2V0UHJvdG90eXBlVGFi
bGUsIGpzQ2FzdDxTZXRQcm90b3R5cGUqPihvYmplY3QpLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwor
fQorCisKIEFMV0FZU19JTkxJTkUgc3RhdGljIEpTU2V0KiBnZXRTZXQoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIEpTVmFsdWUgdGhpc1ZhbHVlKQogewogICAgIGlmICghdGhpc1ZhbHVlLmlzT2JqZWN0
KCkpIHsKQEAgLTExOCw0NCArMTMyLDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
ZXRQcm90b0Z1bmNEZWxldGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc0Jvb2xlYW4oc2V0LT5yZW1vdmUoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmFy
Z3VtZW50KDApKSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHNldFByb3Rv
RnVuY0ZvckVhY2goQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi17Ci0gICAgSlNTZXQqIHNldCA9IGdl
dFNldChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwotICAgIGlmICghc2V0KQot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIEpTVmFs
dWUgY2FsbEJhY2sgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwotICAgIENhbGxEYXRhIGNhbGxE
YXRhOwotICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoY2FsbEJhY2ssIGNhbGxE
YXRhKTsKLSAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKQotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwgV1RGOjpBU0NJSUxpdGVy
YWwoIlNldC5wcm90b3R5cGUuZm9yRWFjaCBjYWxsZWQgd2l0aG91dCBjYWxsYmFjayIpKSk7Ci0g
ICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDEpOwotICAgIFZNKiB2
bSA9ICZjYWxsRnJhbWUtPnZtKCk7Ci0gICAgSlNTZXRJdGVyYXRvciogaXRlcmF0b3IgPSBKU1Nl
dEl0ZXJhdG9yOjpjcmVhdGUoKnZtLCBjYWxsRnJhbWUtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3Qo
KS0+c2V0SXRlcmF0b3JTdHJ1Y3R1cmUoKSwgc2V0LCBTZXRJdGVyYXRlS2V5KTsKLSAgICBKU1Zh
bHVlIGtleTsKLSAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVKUykgewotICAgICAgICBKU0Z1
bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEJhY2spOwotICAgICAg
ICBDYWNoZWRDYWxsIGNhY2hlZENhbGwoY2FsbEZyYW1lLCBmdW5jdGlvbiwgMyk7Ci0gICAgICAg
IHdoaWxlIChpdGVyYXRvci0+bmV4dChjYWxsRnJhbWUsIGtleSkgJiYgIXZtLT5leGNlcHRpb24o
KSkgewotICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRUaGlzKHRoaXNWYWx1ZSk7Ci0gICAgICAg
ICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDAsIGtleSk7Ci0gICAgICAgICAgICBjYWNoZWRD
YWxsLnNldEFyZ3VtZW50KDEsIGtleSk7Ci0gICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3Vt
ZW50KDIsIHNldCk7Ci0gICAgICAgICAgICBjYWNoZWRDYWxsLmNhbGwoKTsKLSAgICAgICAgfQot
ICAgICAgICBpdGVyYXRvci0+ZmluaXNoKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgd2hpbGUg
KGl0ZXJhdG9yLT5uZXh0KGNhbGxGcmFtZSwga2V5KSAmJiAhdm0tPmV4Y2VwdGlvbigpKSB7Ci0g
ICAgICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwotICAgICAgICAgICAgYXJncy5h
cHBlbmQoa2V5KTsKLSAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGtleSk7Ci0gICAgICAgICAgICBh
cmdzLmFwcGVuZChzZXQpOwotICAgICAgICAgICAgSlNDOjpjYWxsKGNhbGxGcmFtZSwgY2FsbEJh
Y2ssIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzKTsKLSAgICAgICAgfQotICAg
ICAgICBpdGVyYXRvci0+ZmluaXNoKCk7Ci0gICAgfQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7Ci19Ci0KIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc2V0
UHJvdG9GdW5jSGFzKENhbGxGcmFtZSogY2FsbEZyYW1lKQogewogICAgIEpTU2V0KiBzZXQgPSBn
ZXRTZXQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKQEAgLTE4OCw0ICsxNjQs
MzAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNFbnRyaWVzKENh
bGxGcmFtZSogY2FsbEZyYW1lKQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNTZXRJdGVy
YXRvcjo6Y3JlYXRlKGNhbGxGcmFtZS0+dm0oKSwgY2FsbEZyYW1lLT5jYWxsZWUoKS0+Z2xvYmFs
T2JqZWN0KCktPnNldEl0ZXJhdG9yU3RydWN0dXJlKCksIHRoaXNPYmosIFNldEl0ZXJhdGVLZXlW
YWx1ZSkpOwogfQogCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByaXZhdGVGdW5jSXNT
ZXQoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29s
ZWFuKGpzRHluYW1pY0Nhc3Q8SlNTZXQqPihleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSkpKTsK
K30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcml2YXRlRnVuY1NldEl0ZXJhdG9y
KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBBU1NFUlQoanNEeW5hbWljQ2FzdDxKU1NldCo+KGV4
ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKSk7CisgICAgSlNTZXQqIHNldCA9IGpzQ2FzdDxKU1Nl
dCo+KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKEpTU2V0SXRlcmF0b3I6OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5jYWxsZWUoKS0+Z2xv
YmFsT2JqZWN0KCktPnNldEl0ZXJhdG9yU3RydWN0dXJlKCksIHNldCwgU2V0SXRlcmF0ZUtleSkp
OworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByaXZhdGVGdW5jU2V0SXRlcmF0
b3JOZXh0KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBBU1NFUlQoanNEeW5hbWljQ2FzdDxKU1Nl
dEl0ZXJhdG9yKj4oZXhlYy0+dGhpc1ZhbHVlKCkpKTsKKyAgICBKU1NldEl0ZXJhdG9yKiBpdGVy
YXRvciA9IGpzQ2FzdDxKU1NldEl0ZXJhdG9yKj4oZXhlYy0+dGhpc1ZhbHVlKCkpOworICAgIEpT
VmFsdWUgcmVzdWx0OworICAgIGlmIChpdGVyYXRvci0+bmV4dChleGVjLCByZXN1bHQpKSB7Cisg
ICAgICAgIEpTQXJyYXkqIHJlc3VsdEFycmF5ID0ganNDYXN0PEpTQXJyYXkqPihleGVjLT51bmNo
ZWNrZWRBcmd1bWVudCgwKSk7CisgICAgICAgIHJlc3VsdEFycmF5LT5wdXREaXJlY3RJbmRleChl
eGVjLCAwLCByZXN1bHQpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVh
bihmYWxzZSkpOworICAgIH0KKyAgICBpdGVyYXRvci0+ZmluaXNoKCk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRQcm90b3R5cGUuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1NldFByb3RvdHlwZS5oCmluZGV4IGJkZjkwZjQzMzI3NTIyOGQ2NDk3
NmE0YzlkMDVjODA1NTc2NDNmMDAuLmUyNzE5YTYyYWM3YWNmZDA2ZWZlMDQzNzRhZTYyMTRiYWQ2
ZDc0ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldFByb3Rv
dHlwZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldFByb3RvdHlwZS5o
CkBAIC0zNCw2ICszNCw4IEBAIGNsYXNzIFNldFByb3RvdHlwZSA6IHB1YmxpYyBKU05vbkZpbmFs
T2JqZWN0IHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKIAor
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93
blByb3BlcnR5U2xvdCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworCiAgICAgc3RhdGljIFNldFBy
b3RvdHlwZSogY3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewogICAgICAgICBTZXRQcm90b3R5cGUqIHByb3RvdHlw
ZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFNldFByb3RvdHlwZT4odm0uaGVhcCkpIFNl
dFByb3RvdHlwZSh2bSwgc3RydWN0dXJlKTsKQEAgLTU0LDggKzU2LDEzIEBAIGNsYXNzIFNldFBy
b3RvdHlwZSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICB7CiAgICAgfQogICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90Jik7CiB9OwogCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByaXZh
dGVGdW5jSXNTZXQoRXhlY1N0YXRlKik7CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHBy
aXZhdGVGdW5jU2V0SXRlcmF0b3IoRXhlY1N0YXRlKik7CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHByaXZhdGVGdW5jU2V0SXRlcmF0b3JOZXh0KEV4ZWNTdGF0ZSopOworCiB9CiAKICNl
bmRpZiAvLyAhZGVmaW5lZChTZXRQcm90b3R5cGVfaCkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBlMTZkY2Q5YTQ2Mjk2ZjY2
MDBlODU2NTZmNDQwYTEwMTAwNTRjOTFhLi42ODMxM2FlNTRkYzYxN2Y1MGMwMjZkNDAwZmNiOWQy
OGQxZjQwZWUyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTYtMDEtMDkgIFl1c3VrZSBTdXp1
a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgW0pTQ10gSXRlcmF0aW5nIG92
ZXIgYSBTZXQvTWFwIGlzIHRvbyBzbG93CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTI2OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGQgcmVncmVzcyB0ZXN0cy4KKworICAgICAgICAqIGpzL3JlZ3Jl
c3MvbWFwLWZvci1lYWNoLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVz
cy9tYXAtZm9yLWVhY2guaHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9tYXAtZm9y
LW9mLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9tYXAtZm9yLW9m
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL21hcC1mb3It
ZWFjaC5qczogQWRkZWQuCisgICAgICAgIChjcmVhdGVNYXApOgorICAgICAgICAoaS5tYXAuZm9y
RWFjaCk6CisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvbWFwLWZvci1vZi5qczog
QWRkZWQuCisgICAgICAgIChjcmVhdGVNYXApOgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0
LXRlc3RzL3NldC1mb3ItZWFjaC5qczogQWRkZWQuCisgICAgICAgIChzZXQgZm9yRWFjaCk6Cisg
ICAgICAgIChzZXQgY3JlYXRlU2V0KToKKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0
cy9zZXQtZm9yLW9mLmpzOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3NldC1mb3ItZWFj
aC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2V0LWZvci1lYWNo
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2V0LWZvci1vZi1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2V0LWZvci1vZi5odG1sOiBBZGRlZC4K
KwogMjAxNi0wMS0wOCAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAg
IEFic29sdXRlIHBvc2l0aW9uaW5nIC13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b24gY3Jhc2hl
cyBTYWZhcmkuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL21hcC1mb3ItZWFj
aC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL21hcC1mb3ItZWFjaC1leHBl
Y3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMTM5N2RjNjRjMmQ0NzYzMTA0ODcxNmM5OWIzZjliMGRiMGZk
OGQ2MwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvbWFwLWZvci1l
YWNoLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvbWFwLWZvci1lYWNo
CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMs
IGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJv
d24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL21hcC1mb3ItZWFjaC5odG1sIGIvTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9tYXAtZm9yLWVhY2guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZmYxNzUx
MWE2OWM4ZGNlZTM5MmIzNmYwZWI5MmY4NjllNmRkZjNkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9tYXAtZm9yLWVhY2guaHRtbApAQCAtMCwwICsxLDEyIEBACis8
IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxo
ZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVz
cy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9tYXAtZm9yLWVh
Y2guanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBv
c3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBv
c3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9tYXAtZm9yLW9mLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2pzL3Jl
Z3Jlc3MvbWFwLWZvci1vZi1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGU0YjM4NDdmNWYzZTNi
NDdkNzQ3ZjAxMzA3MjJiNGVhYzQ3OWFkZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2pzL3JlZ3Jlc3MvbWFwLWZvci1vZi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMCBAQAorSlNS
ZWdyZXNzL21hcC1mb3Itb2YKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mg
bm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitU
RVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvbWFwLWZv
ci1vZi5odG1sIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9tYXAtZm9yLW9mLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uN2FjOWU1YjM2OTZmOTczOGJlZmNiOTdiMGU3Y2VmZDlhNGIyNTMwYwotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvbWFwLWZvci1vZi5odG1sCkBAIC0wLDAg
KzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4K
KzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJl
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291
cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3Rz
L21hcC1mb3Itb2YuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9y
ZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9q
cy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvbWFwLWZvci1lYWNoLmpzIGIvTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvbWFwLWZvci1lYWNoLmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmI0NTk4NTJkNzVlMjJiNmM3ZDI5YTc2MjYyYTI3OTA0NjkyYTZmZDAKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9tYXAtZm9yLWVhY2gu
anMKQEAgLTAsMCArMSwyMyBAQAordmFyIGdsb2JhbFN1bSA9IDA7CisoZnVuY3Rpb24gKCkgewor
ICAgIGZ1bmN0aW9uIGNyZWF0ZU1hcChjb3VudCkgeworICAgICAgICB2YXIgbWFwID0gbmV3IE1h
cDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgICAg
ICBtYXAuc2V0KGksIGkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtYXA7CisgICAgfQor
CisgICAgdmFyIENPVU5UID0gMjAwMDsKKyAgICB2YXIgbWFwID0gY3JlYXRlTWFwKENPVU5UKTsK
KyAgICB2YXIgc3VtID0gMDsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWUyOyArK2kpIHsK
KyAgICAgICAgc3VtID0gMDsKKyAgICAgICAgbWFwLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBr
ZXkpIHsKKyAgICAgICAgICAgIHN1bSArPSBrZXk7CisgICAgICAgIH0pOworICAgICAgICBnbG9i
YWxTdW0gPSBzdW07CisgICAgfQorICAgIHJldHVybiBzdW07Cit9KCkpOwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvbWFwLWZvci1vZi5qcyBiL0xheW91
dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL21hcC1mb3Itb2YuanMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NjllMTFiN2RiMGM0ZjUwNDZjNDNjNDM2NzEyYTViZDc5ODE5OGM0NwotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL21hcC1mb3Itb2YuanMKQEAg
LTAsMCArMSwyMyBAQAordmFyIGdsb2JhbFN1bSA9IDA7CisoZnVuY3Rpb24gKCkgeworICAgIGZ1
bmN0aW9uIGNyZWF0ZU1hcChjb3VudCkgeworICAgICAgICB2YXIgbWFwID0gbmV3IE1hcDsKKyAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgICAgICBtYXAu
c2V0KGksIGkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtYXA7CisgICAgfQorCisgICAg
dmFyIENPVU5UID0gMjAwMDsKKyAgICB2YXIgbWFwID0gY3JlYXRlTWFwKENPVU5UKTsKKyAgICB2
YXIgc3VtID0gMDsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWUyOyArK2kpIHsKKyAgICAg
ICAgc3VtID0gMDsKKyAgICAgICAgZm9yICh2YXIgaXRlbSBvZiBtYXApIHsKKyAgICAgICAgICAg
IHN1bSArPSBpdGVtWzBdOworICAgICAgICB9CisgICAgICAgIGdsb2JhbFN1bSA9IHN1bTsKKyAg
ICB9CisgICAgcmV0dXJuIHN1bTsKK30oKSk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL3NjcmlwdC10ZXN0cy9zZXQtZm9yLWVhY2guanMgYi9MYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL3NjcmlwdC10ZXN0cy9zZXQtZm9yLWVhY2guanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDBkNjY1MzI2NzY5
YWEwODlmMDk2YWNhNDEzZDM3NGZlMWVlOGRlNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3NldC1mb3ItZWFjaC5qcwpAQCAtMCwwICsxLDIz
IEBACit2YXIgZ2xvYmFsU3VtID0gMDsKKyhmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gY3Jl
YXRlU2V0KGNvdW50KSB7CisgICAgICAgIHZhciBzZXQgPSBuZXcgU2V0OworICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgICAgIHNldC5hZGQoaSk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNldDsKKyAgICB9CisKKyAgICB2YXIgQ09VTlQgPSAy
MDAwOworICAgIHZhciBzZXQgPSBjcmVhdGVTZXQoQ09VTlQpOworICAgIHZhciBzdW0gPSAwOwor
CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTI7ICsraSkgeworICAgICAgICBzdW0gPSAwOwor
ICAgICAgICBzZXQuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkgeworICAgICAgICAgICAgc3VtICs9
IGl0ZW07CisgICAgICAgIH0pOworICAgICAgICBnbG9iYWxTdW0gPSBzdW07CisgICAgfQorICAg
IHJldHVybiBzdW07Cit9KCkpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9z
Y3JpcHQtdGVzdHMvc2V0LWZvci1vZi5qcyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0
LXRlc3RzL3NldC1mb3Itb2YuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTUyYjM4OWRkMmZhYjdjZDU4ZTI4NmNi
ZjNmMWFiMGJkMjY4NTFlMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jl
c3Mvc2NyaXB0LXRlc3RzL3NldC1mb3Itb2YuanMKQEAgLTAsMCArMSwyMyBAQAordmFyIGdsb2Jh
bFN1bSA9IDA7CisoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIGNyZWF0ZVNldChjb3VudCkg
eworICAgICAgICB2YXIgc2V0ID0gbmV3IFNldDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKSB7CisgICAgICAgICAgICBzZXQuYWRkKGkpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBzZXQ7CisgICAgfQorCisgICAgdmFyIENPVU5UID0gMjAwMDsKKyAgICB2YXIg
c2V0ID0gY3JlYXRlU2V0KENPVU5UKTsKKyAgICB2YXIgc3VtID0gMDsKKworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgMWUyOyArK2kpIHsKKyAgICAgICAgc3VtID0gMDsKKyAgICAgICAgZm9yICh2
YXIgaXRlbSBvZiBzZXQpIHsKKyAgICAgICAgICAgIHN1bSArPSBpdGVtOworICAgICAgICB9Cisg
ICAgICAgIGdsb2JhbFN1bSA9IHN1bTsKKyAgICB9CisgICAgcmV0dXJuIHN1bTsKK30oKSk7CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NldC1mb3ItZWFjaC1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NldC1mb3ItZWFjaC1leHBlY3RlZC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYTAzNjZjODA1OTUzMWMxNmVjNzg4Mzg4YzY2NmUzZDA4ZGMzZmVmMAotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2V0LWZvci1lYWNoLWV4cGVjdGVk
LnR4dApAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3Mvc2V0LWZvci1lYWNoCisKK09uIHN1Y2Nl
c3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5
ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NldC1mb3ItZWFjaC5odG1sIGIvTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9zZXQtZm9yLWVhY2guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NzJjZmM5MmQ1OTE3NTY5NTJh
ZmQzOGJlNmNmM2Y4ZjkwN2FjYjdhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9zZXQtZm9yLWVhY2guaHRtbApAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRN
TCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlw
dCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9zZXQtZm9yLWVhY2guanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9zZXQtZm9yLW9mLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2V0LWZv
ci1vZi1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjE4ZGRjNzFiZTc1MjAxYjVkZjc2NTAwNjA5
OWMzMWMwZWNjZmI1YgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
c2V0LWZvci1vZi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL3NldC1m
b3Itb2YKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNz
YWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9u
IHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRF
CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2V0LWZvci1vZi5odG1sIGIv
TGF5b3V0VGVzdHMvanMvcmVncmVzcy9zZXQtZm9yLW9mLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODgyZjY0
YzQ0MjJkMGJhMTE1ZjExMzgwZTJhY2NlOTQ0MDkyMmZhOAotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2V0LWZvci1vZi5odG1sCkBAIC0wLDAgKzEsMTIgQEAKKzwh
RE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhl
YWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNz
LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL3NldC1mb3Itb2Yu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3Qu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3Qu
anMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>