<?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>120211</bug_id>
          
          <creation_ts>2013-08-23 09:49:16 -0700</creation_ts>
          <short_desc>[CSS Shapes] Improve the performance of image valued shapes</short_desc>
          <delta_ts>2013-09-11 18:20:49 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>120381</dependson>
    
    <dependson>120439</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Hans Muller">giles_joplin</reporter>
          <assigned_to name="Hans Muller">giles_joplin</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>eric</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>kondapallykalyan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>920251</commentid>
    <comment_count>0</comment_count>
      <attachid>209468</attachid>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2013-08-23 09:49:16 -0700</bug_when>
    <thetext>Created attachment 209468
benchmark

Shapes defined by large complex images can have a significant impact on layout performance. The time spent creating an internal RasterShape object dominates the overall cost of layout and rendering when the value of a shape-inside is a complex image.

A simple benchmark that demonstrates the problem is attached.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920256</commentid>
    <comment_count>1</comment_count>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2013-08-23 09:50:22 -0700</bug_when>
    <thetext>I did some shape-inside benchmarking with a 2480x2480 snowflake image (http://imagesci.com/img/2013/04/snowflake-background-8906-hd-wallpapers.png). The run-length encoded version of the mask produced by thresholding this image&apos;s alpha channel is reasonably complex: 2170 vertical spans and 24322 horizontal segments. Profiling showed that 85% of the execution time was spent building the Region based representation of the shape.  The culprit was Region::unite() which is used by RasterShapeIntervals.addInterval() to add each horizontal interval or &quot;run&quot; to the Region. Regions are actually just containers for Region::Shape objects and all of the logical Shape operations are constructive. So Region::unite(otherRegion) computes a new Region::Shape which is the union of this Region and otherRegion and replaces this Region&apos;s internal Region::Shape object with the new one. In our case otherRegion is just a 1 pixel high rectangle that represents a run. A Region and its Region::Shape must be created to represent the rectangle, which forces the allocation of two Vectors:

        Vector&lt;int, 32&gt; m_segments;
        Vector&lt;Span, 16&gt; m_spans;

Not surprisingly, most of the benchmark&apos;s time spent in Region::unite() is spent inside the Vector memory management methods.

By making some ugly hacks in Region.h,cpp I was able to demonstrate that if the Region::unite(IntRect) did its work in-place, without constructing any temporary Regions or Region::Shapes, I could improve the performance of laying out and rendering the snowflake benchmark by 10X. From an overall time of about 1.2 seconds to 120ms. This appears to be a worthy quest.

I&apos;d planned to add the following methods to Region:

    void unite(const IntRect&amp;);
    void intersect(const IntRect&amp;);
    bool contains(const IntRect&amp;) const;
    bool intersects(const IntRect&amp;) const;

The goal was to do the work without allocating any temporary objects. This proved to be painful and has led me to reconsider using Regions as the internal representation for Image shapes. 

The Region class was based on &quot;Scanline Coherent Shape Algebra&quot;, Jonathan E. Steinhart, Graphics Gems II, Chapter 1.9  (http://tinyurl.com/krbmpq5). Its design was motivated by the needs of window systems, where fast logical operations on sets of overlapping rectangles are needed. The WebKit implementation stores shapes that are predominantly rectangular, very compactly. Aside from the temporary memory allocation costs, logical operations are quite efficient. The representation lacks some of the explicit structure one would expect. For example all of the horizontal segments are stored in a single vector&lt;int&gt;, where each subsequent pair of elements represents the segment&apos;s start and end X coordinates. Vertical &quot;spans&quot; just contain their starting y coordinate and the index of their first segment. A m_span[i]&apos;s height is m_spans[i+1].y - m_spans[i].y.  Its segments are m_segments[ m_spans[i].segment_index ] to m_segments[ m_spans[i+1].segment_index ]. The implementation of logical operations uses begin/end pairs of iterators to navigate the packed data structure. 

I took a shot at writing an implementation of Region::unite(const IntRect&amp;) that modified the Region in-place. Several shots actually. The results were messier than I&apos;d be willing to share.

Reconsidering the dependency of RasterShape (RasterShapeIntervals really) on Region:

- The boundaries of RasterShapes rarely look like the logical combination of a small set of rectangles. The shapes tend to be ragged and complex, which defeats the Region&apos;s coalescing strategy.
- The first fit, inside intervals, and outside intervals, RasterShape algorithms are primarily defined in terms of horizontal intervals, not shapes. Most of the Regions employed by the RasterShape implementation, notably the Regions used to construct the RasterShape in the first place, are really just glorified horizontal intervals.
- An unpacked run-length encoding of the shape, where each image row was represented by a run-list, would trivialize a common RasterShape operation: constructing a read-only view of a horizontal band within the shape. Doing as much with Region requires constructing a temporary Region that contains a copy of the horizontal band. Which is considerably more expensive.

Creating a simple run-length encoded type for RasterShape&apos;s internal use looks like it would be less difficult and more efficient than attempting stretch the Region type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920354</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-08-23 12:14:08 -0700</bug_when>
    <thetext>Region has long been slow. The last time I ran into them was bug 98800.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921718</commentid>
    <comment_count>3</comment_count>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2013-08-27 15:58:28 -0700</bug_when>
    <thetext>Summary: I&apos;d like to eliminate RasterShape&apos;s dependence on Region as well as improve its efficiency a bit, in three steps:

- Convert ShapeInterval to a template class to enable ShapeInterval&lt;float&gt; for PolygonShape, and ShapeInterval&lt;int&gt; for RasterShape.

- Revise the ShapeIntervals implementation to improve efficiency and clarity.

- Redefine RasterShape in terms of ShapeInterval&lt;int&gt;.


Here&apos;s a more detailed rationale, starting with RasterShape.

A version of RasterShape that doesn&apos;t depend on Region could be as simple as the following. I&apos;ve assumed that the existing ShapeInterval class has been turned into a template type. The cost of adding a run to the shape is just a vector append, and the cost of access to all of the runs for one image row, getIntervals(), is just a vector lookup. RasterShape&apos;s internal m_intervalLists Vector could be define its own allocater to reduce the overhead of the per-row ShapeInterval vectors, however the additional complexity might not be worth the trouble.

  class RasterShape {
  public:
      RLEShape(unsigned size) 
          : m_bounds(-1, -1, -1, -1)
      {
          m_intervalLists.resize(size);
      }

      typedef ShapeInterval&lt;int&gt; RasterShapeInterval;

      unsigned size() const { return m_intervalLists.size(); }
      const IntRect&amp; bounds() { m_bounds; }

      const Vector&lt;RasterShapeInterval&gt;&amp; getIntervals(int y) const 
      { 
          ASSERT(y &gt;= 0 &amp;&amp; y &lt; m_intervalLists.size());
          return m_intervalLists[y]; 
      }

      void appendInterval(int y, int x1, int x2) 
      { 
          ASSERT(y &gt;= 0 &amp;&amp; y &lt; m_intervalLists.size());
          m_intervalLists[y].append(RasterShapeInterval(x1, x2)); 
          m_bounds.unite(IntRect(x1, y, x2 - x1, 0));
      }

  private:
      IntRect m_bounds;
      Vector&lt;Vector&lt;RasterShapeInterval &gt; &gt; m_intervalLists;
  };


Templatizing the existing ShapeIntervals class, which current defines an interval as a pair floats, is straightforward.

  template &lt;typename T&gt;
  class ShapeInterval { 
  public:
      Interval(T x1 = 0, T x2 = 0)
          : m_x1(x1)
          , m_x2(x2)
      {
          ASSERT(x2 &gt;= x1);
      }

      T x1() const { return m_x1; }
      T x2() const { return m_x2; }
      void setX1(T value) { m_x1 = value; }
      void setX2(T value) { m_x2 = value; }
      void set(T x1, T x2)
      {
          ASSERT(x2 &gt;= x1);
          m_x1 = x1;
          m_x2 = x2;
      }

      bool overlaps(const Interval&lt;T&gt;&amp; interval) const
      {
          return x2() &gt;= interval.x1() &amp;&amp; x1() &lt;= interval.x2();
      }

  private:
      T m_x1;
      T m_x2; 
  };

  // ... overloads for the logical operators


In light of this I&apos;ve taken the opportunity to review the ShapeIntervals class. The logical operations could be written more simply and more efficiently.  For example, the logical OR operation:

  template &lt;typename T&gt;
  void uniteShapeIntervals(const Vector&lt;ShapeInterval&lt;T&gt; &gt;&amp; a, const Vector&lt;ShapeInterval&lt;T &gt; &gt;&amp; b, Vector&lt;ShapeInterval&lt;T&gt; &gt;&amp; result)
  {
      // ... assertions and the empty a/b special cases left out for clarity 

      typedef typename Vector&lt;ShapeInterval&lt;T&gt; &gt;::const_iterator IntervalIterator;
      IntervalIterator aNext = a.begin();
      IntervalIterator bNext = b.begin();

      while(aNext != a.end() || bNext != b.end()) {
          IntervalIterator next = (bNext == b.end() || (aNext != a.end() &amp;&amp; *aNext &lt; *bNext)) ? aNext++ : bNext++;
          if (result.isEmpty() || !result.last().overlaps(*next))
              result.append(*next);
          else
              result.last().setX2(std::max&lt;T&gt;(result.last().x2(), next-&gt;x2()));
      }
  }

Aside from the typedef, this isn&apos;t particularly tricky either.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>924715</commentid>
    <comment_count>4</comment_count>
      <attachid>210533</attachid>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2013-09-04 18:00:37 -0700</bug_when>
    <thetext>Created attachment 210533
Patch

Replaced the implementation of RasterShapeIntervals with one based on the new ShapeInterval&lt;int&gt; class. This eliminates the dependency the Region class and delivers a 10X layout speedup for the attached benchmark.

This a just an implementation refactoring, no new tests were needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>925063</commentid>
    <comment_count>5</comment_count>
      <attachid>210623</attachid>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2013-09-05 09:05:12 -0700</bug_when>
    <thetext>Created attachment 210623
Patch

Corrected a pre-existing inconsistency in the way intervals where converted to line segments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>925116</commentid>
    <comment_count>6</comment_count>
      <attachid>210635</attachid>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2013-09-05 10:39:34 -0700</bug_when>
    <thetext>Created attachment 210635
Patch

Corrected ShapeInterval&lt;T&gt;subtractShapeIntervals(), prevent attempts to dereference Vector iterators that had reached the end.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>925180</commentid>
    <comment_count>7</comment_count>
      <attachid>210651</attachid>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2013-09-05 13:05:04 -0700</bug_when>
    <thetext>Created attachment 210651
Patch

Some implementation changes based on review feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>925181</commentid>
    <comment_count>8</comment_count>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2013-09-05 13:05:52 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Created an attachment (id=210635) [details]
&gt; Patch
&gt; 
&gt; Corrected ShapeInterval&lt;T&gt;subtractShapeIntervals(), prevent attempts to dereference Vector iterators that had reached the end.

I&apos;ve removed this from the patch.  It will be included in a separate bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>925598</commentid>
    <comment_count>9</comment_count>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2013-09-06 08:21:04 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #6)
&gt; &gt; Created an attachment (id=210635) [details] [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; Corrected ShapeInterval&lt;T&gt;subtractShapeIntervals(), prevent attempts to dereference Vector iterators that had reached the end.
&gt; 
&gt; I&apos;ve removed this from the patch.  It will be included in a separate bug.

FTR, it&apos;s https://bugs.webkit.org/show_bug.cgi?id=120802</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927370</commentid>
    <comment_count>10</comment_count>
      <attachid>210651</attachid>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2013-09-10 10:22:03 -0700</bug_when>
    <thetext>Comment on attachment 210651
Patch

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

&gt; Source/WebCore/rendering/shapes/RasterShape.cpp:95
&gt;  bool RasterShapeIntervals::firstIncludedIntervalY(int minY, const IntSize&amp; minSize, LayoutUnit&amp; result) const

There&apos;s a bunch of code that lives in RasterShape::firstIncludedIntervalLogicalTop that checks that minY fits in the bounds of the intervals, but I would rather have that here instead. It seems like RasterShape knows too much about RasterShapeIntervals.

&gt; Source/WebCore/rendering/shapes/RasterShape.cpp:104
&gt; +        if (!getIntervalX1Values(lineY, lineY + minSize.height(), intervalX1Values))

Is there any reason to consider the intervals that are smaller than the minSize.width() ?

&gt; Source/WebCore/rendering/shapes/RasterShape.cpp:113
&gt; +            if (contains(IntRect(lineX, lineY, minSize.width(), minSize.height()))) {

Keep a reference to the IntRect on the stack and just update the x() / y() members when needed. The size is never changing.

&gt; Source/WebCore/rendering/shapes/RasterShape.cpp:123
&gt; +void RasterShapeIntervals::getIncludedIntervals(int y1, int y2, IntShapeIntervals&amp; result) const

ditto, I would move the checks from RasterShape::getIncludedIntervals in here instead.

&gt; Source/WebCore/rendering/shapes/RasterShape.cpp:135
&gt; +        IntShapeInterval::intersectShapeIntervals(result, getIntervals(y), intervals);

I think you can check if you have any remaining intervals and just break early.

&gt; Source/WebCore/rendering/shapes/RasterShape.cpp:136
&gt; +        result = intervals;

You can do a vector swap instead as you don&apos;t need to preserve previous vector. (There&apos;s a function in Vector.h for that)

&gt; Source/WebCore/rendering/shapes/RasterShape.cpp:153
&gt; +        result = intervals;

ditto. Swap vectors instead.

&gt; Source/WebCore/rendering/shapes/RasterShape.cpp:193
&gt; +    for (unsigned i = 0; i &lt; excludedIntervals.size(); ++i)
&gt; +        result.append(LineSegment(excludedIntervals[i].x1(), excludedIntervals[i].x2() + 1));

It seems like this could be a function as you do it twice.

&gt; Source/WebCore/rendering/shapes/RasterShape.h:53
&gt; +    bool getIntervalX1Values(int minY, int maxY, Vector&lt;int&gt;&amp; result) const;

All the methods that are not supposed to be used by other classes should be private.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927425</commentid>
    <comment_count>11</comment_count>
      <attachid>211223</attachid>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2013-09-10 12:31:59 -0700</bug_when>
    <thetext>Created attachment 211223
Patch

Made the suggested changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>928030</commentid>
    <comment_count>12</comment_count>
      <attachid>211223</attachid>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2013-09-11 16:11:43 -0700</bug_when>
    <thetext>Comment on attachment 211223
Patch

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

&gt; Source/WebCore/rendering/shapes/RasterShape.cpp:220
&gt; +    float minY = std::max&lt;float&gt;(intervals.bounds().y(), minLogicalIntervalTop);

There&apos;s no reason to have this outside the intervals.firstIncludedIntervalY method. It actually knows too much about how the method is supposed to work.

&gt; Source/WebCore/rendering/shapes/RasterShape.h:54
&gt; +    const IntShapeIntervals&amp; getIntervals(int y) const

This method is not needed outside RasterShapeIntervals. Make it private.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>928041</commentid>
    <comment_count>13</comment_count>
      <attachid>211365</attachid>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2013-09-11 16:49:37 -0700</bug_when>
    <thetext>Created attachment 211365
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>928065</commentid>
    <comment_count>14</comment_count>
      <attachid>211365</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-11 17:43:42 -0700</bug_when>
    <thetext>Comment on attachment 211365
Patch

Rejecting attachment 211365 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.appspot.com&apos;, &apos;--bot-id=webkit-cq-01&apos;, &apos;validate-changelog&apos;, &apos;--check-oops&apos;, &apos;--non-interactive&apos;, 211365, &apos;--port=mac&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

ChangeLog entry in Source/WebCore/ChangeLog contains OOPS!.

Full output: http://webkit-queues.appspot.com/results/1799017</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>928071</commentid>
    <comment_count>15</comment_count>
      <attachid>211374</attachid>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2013-09-11 17:47:15 -0700</bug_when>
    <thetext>Created attachment 211374
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>928085</commentid>
    <comment_count>16</comment_count>
      <attachid>211374</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-11 18:20:46 -0700</bug_when>
    <thetext>Comment on attachment 211374
Patch

Clearing flags on attachment: 211374

Committed r155583: &lt;http://trac.webkit.org/changeset/155583&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>928086</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-11 18:20:49 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>209468</attachid>
            <date>2013-08-23 09:49:16 -0700</date>
            <delta_ts>2013-08-23 09:49:16 -0700</delta_ts>
            <desc>benchmark</desc>
            <filename>benchmark.html</filename>
            <type>text/html</type>
            <size>11873</size>
            <attacher name="Hans Muller">giles_joplin</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxodG1sPgo8aGVhZD4KPCEtLQpzbm93Zmxha2UucG5nIC0gaHR0cDov
L2ltYWdlc2NpLmNvbS9pbWcvMjAxMy8wNC9zbm93Zmxha2UtYmFja2dyb3VuZC04OTA2LWhkLXdh
bGxwYXBlcnMucG5nCkFsaWNlIGluIFdvbmRlcmxhbmQgdGV4dCAtIGh0dHA6Ly93d3cuY3MuY211
LmVkdS9+cmdzL2FsaWNlLXRhYmxlLmh0bWwKLS0+CjxzdHlsZT4KI2ltYWdlLXNoYXBlIHsKICAg
IGZvbnQtZmFtaWx5OiBWZXJkYW5hOwogICAgZm9udC1zaXplOiAxZW07CiAgICBsaW5lLWhlaWdo
dDogMS4yZW07CiAgICB3aWR0aDogMjQ4MHB4OwogICAgaGVpZ2h0OiAyNDgwcHg7CiAgICAtd2Vi
a2l0LXNoYXBlLWluc2lkZTogdXJsKCJzbm93Zmxha2UucG5nIik7CiAgICBiYWNrZ3JvdW5kLWlt
YWdlOiB1cmwoInNub3dmbGFrZS5wbmciKTsKICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBl
YXQ7Cn0KPC9zdHlsZT4KPGJvZHk+CiAgICA8ZGl2IGlkPSJpbWFnZS1zaGFwZSI+CkRvd24gdGhl
IFJhYmJpdC1Ib2xlCgpBbGljZSB3YXMgYmVnaW5uaW5nIHRvIGdldCB2ZXJ5IHRpcmVkIG9mIHNp
dHRpbmcgYnkgaGVyIHNpc3RlciBvbiB0aGUgYmFuaywgYW5kIG9mIGhhdmluZyBub3RoaW5nIHRv
IGRvOiBvbmNlIG9yIHR3aWNlIHNoZSBoYWQgcGVlcGVkIGludG8gdGhlIGJvb2sgaGVyIHNpc3Rl
ciB3YXMgcmVhZGluZywgYnV0IGl0IGhhZCBubyBwaWN0dXJlcyBvciBjb252ZXJzYXRpb25zIGlu
IGl0LCBgYW5kIHdoYXQgaXMgdGhlIHVzZSBvZiBhIGJvb2ssJyB0aG91Z2h0IEFsaWNlIGB3aXRo
b3V0IHBpY3R1cmVzIG9yIGNvbnZlcnNhdGlvbj8nClNvIHNoZSB3YXMgY29uc2lkZXJpbmcgaW4g
aGVyIG93biBtaW5kIChhcyB3ZWxsIGFzIHNoZSBjb3VsZCwgZm9yIHRoZSBob3QgZGF5IG1hZGUg
aGVyIGZlZWwgdmVyeSBzbGVlcHkgYW5kIHN0dXBpZCksIHdoZXRoZXIgdGhlIHBsZWFzdXJlIG9m
IG1ha2luZyBhIGRhaXN5LWNoYWluIHdvdWxkIGJlIHdvcnRoIHRoZSB0cm91YmxlIG9mIGdldHRp
bmcgdXAgYW5kIHBpY2tpbmcgdGhlIGRhaXNpZXMsIHdoZW4gc3VkZGVubHkgYSBXaGl0ZSBSYWJi
aXQgd2l0aCBwaW5rIGV5ZXMgcmFuIGNsb3NlIGJ5IGhlci4KClRoZXJlIHdhcyBub3RoaW5nIHNv
IHZlcnkgcmVtYXJrYWJsZSBpbiB0aGF0OyBub3IgZGlkIEFsaWNlIHRoaW5rIGl0IHNvIHZlcnkg
bXVjaCBvdXQgb2YgdGhlIHdheSB0byBoZWFyIHRoZSBSYWJiaXQgc2F5IHRvIGl0c2VsZiwgYE9o
IGRlYXIhIE9oIGRlYXIhIEkgc2hhbGwgYmUgbGF0ZSEnICh3aGVuIHNoZSB0aG91Z2h0IGl0IG92
ZXIgYWZ0ZXJ3YXJkcywgaXQgb2NjdXJyZWQgdG8gaGVyIHRoYXQgc2hlIG91Z2h0IHRvIGhhdmUg
d29uZGVyZWQgYXQgdGhpcywgYnV0IGF0IHRoZSB0aW1lIGl0IGFsbCBzZWVtZWQgcXVpdGUgbmF0
dXJhbCk7IGJ1dCB3aGVuIHRoZSBSYWJiaXQgYWN0dWFsbHkgdG9vayBhIHdhdGNoIG91dCBvZiBp
dHMgd2Fpc3Rjb2F0LXBvY2tldCwgYW5kIGxvb2tlZCBhdCBpdCwgYW5kIHRoZW4gaHVycmllZCBv
biwgQWxpY2Ugc3RhcnRlZCB0byBoZXIgZmVldCwgZm9yIGl0IGZsYXNoZWQgYWNyb3NzIGhlciBt
aW5kIHRoYXQgc2hlIGhhZCBuZXZlciBiZWZvcmUgc2VlbiBhIHJhYmJpdCB3aXRoIGVpdGhlciBh
IHdhaXN0Y29hdC1wb2NrZXQsIG9yIGEgd2F0Y2ggdG8gdGFrZSBvdXQgb2YgaXQsIGFuZCBidXJu
aW5nIHdpdGggY3VyaW9zaXR5LCBzaGUgcmFuIGFjcm9zcyB0aGUgZmllbGQgYWZ0ZXIgaXQsIGFu
ZCBmb3J0dW5hdGVseSB3YXMganVzdCBpbiB0aW1lIHRvIHNlZSBpdCBwb3AgZG93biBhIGxhcmdl
IHJhYmJpdC1ob2xlIHVuZGVyIHRoZSBoZWRnZS4KCiBXaGl0ZSBSYWJiaXQgY2hlY2tpbmcgd2F0
Y2gKCkluIGFub3RoZXIgbW9tZW50IGRvd24gd2VudCBBbGljZSBhZnRlciBpdCwgbmV2ZXIgb25j
ZSBjb25zaWRlcmluZyBob3cgaW4gdGhlIHdvcmxkIHNoZSB3YXMgdG8gZ2V0IG91dCBhZ2Fpbi4K
ClRoZSByYWJiaXQtaG9sZSB3ZW50IHN0cmFpZ2h0IG9uIGxpa2UgYSB0dW5uZWwgZm9yIHNvbWUg
d2F5LCBhbmQgdGhlbiBkaXBwZWQgc3VkZGVubHkgZG93biwgc28gc3VkZGVubHkgdGhhdCBBbGlj
ZSBoYWQgbm90IGEgbW9tZW50IHRvIHRoaW5rIGFib3V0IHN0b3BwaW5nIGhlcnNlbGYgYmVmb3Jl
IHNoZSBmb3VuZCBoZXJzZWxmIGZhbGxpbmcgZG93biBhIHZlcnkgZGVlcCB3ZWxsLgoKRWl0aGVy
IHRoZSB3ZWxsIHdhcyB2ZXJ5IGRlZXAsIG9yIHNoZSBmZWxsIHZlcnkgc2xvd2x5LCBmb3Igc2hl
IGhhZCBwbGVudHkgb2YgdGltZSBhcyBzaGUgd2VudCBkb3duIHRvIGxvb2sgYWJvdXQgaGVyIGFu
ZCB0byB3b25kZXIgd2hhdCB3YXMgZ29pbmcgdG8gaGFwcGVuIG5leHQuIEZpcnN0LCBzaGUgdHJp
ZWQgdG8gbG9vayBkb3duIGFuZCBtYWtlIG91dCB3aGF0IHNoZSB3YXMgY29taW5nIHRvLCBidXQg
aXQgd2FzIHRvbyBkYXJrIHRvIHNlZSBhbnl0aGluZzsgdGhlbiBzaGUgbG9va2VkIGF0IHRoZSBz
aWRlcyBvZiB0aGUgd2VsbCwgYW5kIG5vdGljZWQgdGhhdCB0aGV5IHdlcmUgZmlsbGVkIHdpdGgg
Y3VwYm9hcmRzIGFuZCBib29rLXNoZWx2ZXM7IGhlcmUgYW5kIHRoZXJlIHNoZSBzYXcgbWFwcyBh
bmQgcGljdHVyZXMgaHVuZyB1cG9uIHBlZ3MuIFNoZSB0b29rIGRvd24gYSBqYXIgZnJvbSBvbmUg
b2YgdGhlIHNoZWx2ZXMgYXMgc2hlIHBhc3NlZDsgaXQgd2FzIGxhYmVsbGVkIGBPUkFOR0UgTUFS
TUFMQURFJywgYnV0IHRvIGhlciBncmVhdCBkaXNhcHBvaW50bWVudCBpdCB3YXMgZW1wdHk6IHNo
ZSBkaWQgbm90IGxpa2UgdG8gZHJvcCB0aGUgamFyIGZvciBmZWFyIG9mIGtpbGxpbmcgc29tZWJv
ZHksIHNvIG1hbmFnZWQgdG8gcHV0IGl0IGludG8gb25lIG9mIHRoZSBjdXBib2FyZHMgYXMgc2hl
IGZlbGwgcGFzdCBpdC4KCmBXZWxsIScgdGhvdWdodCBBbGljZSB0byBoZXJzZWxmLCBgYWZ0ZXIg
c3VjaCBhIGZhbGwgYXMgdGhpcywgSSBzaGFsbCB0aGluayBub3RoaW5nIG9mIHR1bWJsaW5nIGRv
d24gc3RhaXJzISBIb3cgYnJhdmUgdGhleSdsbCBhbGwgdGhpbmsgbWUgYXQgaG9tZSEgV2h5LCBJ
IHdvdWxkbid0IHNheSBhbnl0aGluZyBhYm91dCBpdCwgZXZlbiBpZiBJIGZlbGwgb2ZmIHRoZSB0
b3Agb2YgdGhlIGhvdXNlIScgKFdoaWNoIHdhcyB2ZXJ5IGxpa2VseSB0cnVlLikKCkRvd24sIGRv
d24sIGRvd24uIFdvdWxkIHRoZSBmYWxsIG5ldmVyIGNvbWUgdG8gYW4gZW5kISBgSSB3b25kZXIg
aG93IG1hbnkgbWlsZXMgSSd2ZSBmYWxsZW4gYnkgdGhpcyB0aW1lPycgc2hlIHNhaWQgYWxvdWQu
IGBJIG11c3QgYmUgZ2V0dGluZyBzb21ld2hlcmUgbmVhciB0aGUgY2VudHJlIG9mIHRoZSBlYXJ0
aC4gTGV0IG1lIHNlZTogdGhhdCB3b3VsZCBiZSBmb3VyIHRob3VzYW5kIG1pbGVzIGRvd24sIEkg
dGhpbmstLScgKGZvciwgeW91IHNlZSwgQWxpY2UgaGFkIGxlYXJudCBzZXZlcmFsIHRoaW5ncyBv
ZiB0aGlzIHNvcnQgaW4gaGVyIGxlc3NvbnMgaW4gdGhlIHNjaG9vbHJvb20sIGFuZCB0aG91Z2gg
dGhpcyB3YXMgbm90IGEgdmVyeSBnb29kIG9wcG9ydHVuaXR5IGZvciBzaG93aW5nIG9mZiBoZXIg
a25vd2xlZGdlLCBhcyB0aGVyZSB3YXMgbm8gb25lIHRvIGxpc3RlbiB0byBoZXIsIHN0aWxsIGl0
IHdhcyBnb29kIHByYWN0aWNlIHRvIHNheSBpdCBvdmVyKSBgLS15ZXMsIHRoYXQncyBhYm91dCB0
aGUgcmlnaHQgZGlzdGFuY2UtLWJ1dCB0aGVuIEkgd29uZGVyIHdoYXQgTGF0aXR1ZGUgb3IgTG9u
Z2l0dWRlIEkndmUgZ290IHRvPycgKEFsaWNlIGhhZCBubyBpZGVhIHdoYXQgTGF0aXR1ZGUgd2Fz
LCBvciBMb25naXR1ZGUgZWl0aGVyLCBidXQgdGhvdWdodCB0aGV5IHdlcmUgbmljZSBncmFuZCB3
b3JkcyB0byBzYXkuKQoKUHJlc2VudGx5IHNoZSBiZWdhbiBhZ2Fpbi4gYEkgd29uZGVyIGlmIEkg
c2hhbGwgZmFsbCByaWdodCB0aHJvdWdoIHRoZSBlYXJ0aCEgSG93IGZ1bm55IGl0J2xsIHNlZW0g
dG8gY29tZSBvdXQgYW1vbmcgdGhlIHBlb3BsZSB0aGF0IHdhbGsgd2l0aCB0aGVpciBoZWFkcyBk
b3dud2FyZCEgVGhlIEFudGlwYXRoaWVzLCBJIHRoaW5rLS0nIChzaGUgd2FzIHJhdGhlciBnbGFk
IHRoZXJlIHdhcyBubyBvbmUgbGlzdGVuaW5nLCB0aGlzIHRpbWUsIGFzIGl0IGRpZG4ndCBzb3Vu
ZCBhdCBhbGwgdGhlIHJpZ2h0IHdvcmQpIGAtLWJ1dCBJIHNoYWxsIGhhdmUgdG8gYXNrIHRoZW0g
d2hhdCB0aGUgbmFtZSBvZiB0aGUgY291bnRyeSBpcywgeW91IGtub3cuIFBsZWFzZSwgTWEnYW0s
IGlzIHRoaXMgTmV3IFplYWxhbmQgb3IgQXVzdHJhbGlhPycgKGFuZCBzaGUgdHJpZWQgdG8gY3Vy
dHNleSBhcyBzaGUgc3Bva2UtLWZhbmN5IGN1cnRzZXlpbmcgYXMgeW91J3JlIGZhbGxpbmcgdGhy
b3VnaCB0aGUgYWlyISBEbyB5b3UgdGhpbmsgeW91IGNvdWxkIG1hbmFnZSBpdD8pIGBBbmQgd2hh
dCBhbiBpZ25vcmFudCBsaXR0bGUgZ2lybCBzaGUnbGwgdGhpbmsgbWUgZm9yIGFza2luZyEgTm8s
IGl0J2xsIG5ldmVyIGRvIHRvIGFzazogcGVyaGFwcyBJIHNoYWxsIHNlZSBpdCB3cml0dGVuIHVw
IHNvbWV3aGVyZS4nCgpEb3duLCBkb3duLCBkb3duLiBUaGVyZSB3YXMgbm90aGluZyBlbHNlIHRv
IGRvLCBzbyBBbGljZSBzb29uIGJlZ2FuIHRhbGtpbmcgYWdhaW4uIGBEaW5haCdsbCBtaXNzIG1l
IHZlcnkgbXVjaCB0by1uaWdodCwgSSBzaG91bGQgdGhpbmshJyAoRGluYWggd2FzIHRoZSBjYXQu
KSBgSSBob3BlIHRoZXknbGwgcmVtZW1iZXIgaGVyIHNhdWNlciBvZiBtaWxrIGF0IHRlYS10aW1l
LiBEaW5haCBteSBkZWFyISBJIHdpc2ggeW91IHdlcmUgZG93biBoZXJlIHdpdGggbWUhIFRoZXJl
IGFyZSBubyBtaWNlIGluIHRoZSBhaXIsIEknbSBhZnJhaWQsIGJ1dCB5b3UgbWlnaHQgY2F0Y2gg
YSBiYXQsIGFuZCB0aGF0J3MgdmVyeSBsaWtlIGEgbW91c2UsIHlvdSBrbm93LiBCdXQgZG8gY2F0
cyBlYXQgYmF0cywgSSB3b25kZXI/JyBBbmQgaGVyZSBBbGljZSBiZWdhbiB0byBnZXQgcmF0aGVy
IHNsZWVweSwgYW5kIHdlbnQgb24gc2F5aW5nIHRvIGhlcnNlbGYsIGluIGEgZHJlYW15IHNvcnQg
b2Ygd2F5LCBgRG8gY2F0cyBlYXQgYmF0cz8gRG8gY2F0cyBlYXQgYmF0cz8nIGFuZCBzb21ldGlt
ZXMsIGBEbyBiYXRzIGVhdCBjYXRzPycgZm9yLCB5b3Ugc2VlLCBhcyBzaGUgY291bGRuJ3QgYW5z
d2VyIGVpdGhlciBxdWVzdGlvbiwgaXQgZGlkbid0IG11Y2ggbWF0dGVyIHdoaWNoIHdheSBzaGUg
cHV0IGl0LiBTaGUgZmVsdCB0aGF0IHNoZSB3YXMgZG96aW5nIG9mZiwgYW5kIGhhZCBqdXN0IGJl
Z3VuIHRvIGRyZWFtIHRoYXQgc2hlIHdhcyB3YWxraW5nIGhhbmQgaW4gaGFuZCB3aXRoIERpbmFo
LCBhbmQgc2F5aW5nIHRvIGhlciB2ZXJ5IGVhcm5lc3RseSwgYE5vdywgRGluYWgsIHRlbGwgbWUg
dGhlIHRydXRoOiBkaWQgeW91IGV2ZXIgZWF0IGEgYmF0Pycgd2hlbiBzdWRkZW5seSwgdGh1bXAh
IHRodW1wISBkb3duIHNoZSBjYW1lIHVwb24gYSBoZWFwIG9mIHN0aWNrcyBhbmQgZHJ5IGxlYXZl
cywgYW5kIHRoZSBmYWxsIHdhcyBvdmVyLgoKQWxpY2Ugd2FzIG5vdCBhIGJpdCBodXJ0LCBhbmQg
c2hlIGp1bXBlZCB1cCBvbiB0byBoZXIgZmVldCBpbiBhIG1vbWVudDogc2hlIGxvb2tlZCB1cCwg
YnV0IGl0IHdhcyBhbGwgZGFyayBvdmVyaGVhZDsgYmVmb3JlIGhlciB3YXMgYW5vdGhlciBsb25n
IHBhc3NhZ2UsIGFuZCB0aGUgV2hpdGUgUmFiYml0IHdhcyBzdGlsbCBpbiBzaWdodCwgaHVycnlp
bmcgZG93biBpdC4gVGhlcmUgd2FzIG5vdCBhIG1vbWVudCB0byBiZSBsb3N0OiBhd2F5IHdlbnQg
QWxpY2UgbGlrZSB0aGUgd2luZCwgYW5kIHdhcyBqdXN0IGluIHRpbWUgdG8gaGVhciBpdCBzYXks
IGFzIGl0IHR1cm5lZCBhIGNvcm5lciwgYE9oIG15IGVhcnMgYW5kIHdoaXNrZXJzLCBob3cgbGF0
ZSBpdCdzIGdldHRpbmchJyBTaGUgd2FzIGNsb3NlIGJlaGluZCBpdCB3aGVuIHNoZSB0dXJuZWQg
dGhlIGNvcm5lciwgYnV0IHRoZSBSYWJiaXQgd2FzIG5vIGxvbmdlciB0byBiZSBzZWVuOiBzaGUg
Zm91bmQgaGVyc2VsZiBpbiBhIGxvbmcsIGxvdyBoYWxsLCB3aGljaCB3YXMgbGl0IHVwIGJ5IGEg
cm93IG9mIGxhbXBzIGhhbmdpbmcgZnJvbSB0aGUgcm9vZi4KClRoZXJlIHdlcmUgZG9vcnMgYWxs
IHJvdW5kIHRoZSBoYWxsLCBidXQgdGhleSB3ZXJlIGFsbCBsb2NrZWQ7IGFuZCB3aGVuIEFsaWNl
IGhhZCBiZWVuIGFsbCB0aGUgd2F5IGRvd24gb25lIHNpZGUgYW5kIHVwIHRoZSBvdGhlciwgdHJ5
aW5nIGV2ZXJ5IGRvb3IsIHNoZSB3YWxrZWQgc2FkbHkgZG93biB0aGUgbWlkZGxlLCB3b25kZXJp
bmcgaG93IHNoZSB3YXMgZXZlciB0byBnZXQgb3V0IGFnYWluLgoKU3VkZGVubHkgc2hlIGNhbWUg
dXBvbiBhIGxpdHRsZSB0aHJlZS1sZWdnZWQgdGFibGUsIGFsbCBtYWRlIG9mIHNvbGlkIGdsYXNz
OyB0aGVyZSB3YXMgbm90aGluZyBvbiBpdCBleGNlcHQgYSB0aW55IGdvbGRlbiBrZXksIGFuZCBB
bGljZSdzIGZpcnN0IHRob3VnaHQgd2FzIHRoYXQgaXQgbWlnaHQgYmVsb25nIHRvIG9uZSBvZiB0
aGUgZG9vcnMgb2YgdGhlIGhhbGw7IGJ1dCwgYWxhcyEgZWl0aGVyIHRoZSBsb2NrcyB3ZXJlIHRv
byBsYXJnZSwgb3IgdGhlIGtleSB3YXMgdG9vIHNtYWxsLCBidXQgYXQgYW55IHJhdGUgaXQgd291
bGQgbm90IG9wZW4gYW55IG9mIHRoZW0uIEhvd2V2ZXIsIG9uIHRoZSBzZWNvbmQgdGltZSByb3Vu
ZCwgc2hlIGNhbWUgdXBvbiBhIGxvdyBjdXJ0YWluIHNoZSBoYWQgbm90IG5vdGljZWQgYmVmb3Jl
LCBhbmQgYmVoaW5kIGl0IHdhcyBhIGxpdHRsZSBkb29yIGFib3V0IGZpZnRlZW4gaW5jaGVzIGhp
Z2g6IHNoZSB0cmllZCB0aGUgbGl0dGxlIGdvbGRlbiBrZXkgaW4gdGhlIGxvY2ssIGFuZCB0byBo
ZXIgZ3JlYXQgZGVsaWdodCBpdCBmaXR0ZWQhCgogQWxpY2UgZmluZGluZyB0aW55IGRvb3IgYmVo
aW5kIGN1cnRhaW4KCkFsaWNlIG9wZW5lZCB0aGUgZG9vciBhbmQgZm91bmQgdGhhdCBpdCBsZWQg
aW50byBhIHNtYWxsIHBhc3NhZ2UsIG5vdCBtdWNoIGxhcmdlciB0aGFuIGEgcmF0LWhvbGU6IHNo
ZSBrbmVsdCBkb3duIGFuZCBsb29rZWQgYWxvbmcgdGhlIHBhc3NhZ2UgaW50byB0aGUgbG92ZWxp
ZXN0IGdhcmRlbiB5b3UgZXZlciBzYXcuIEhvdyBzaGUgbG9uZ2VkIHRvIGdldCBvdXQgb2YgdGhh
dCBkYXJrIGhhbGwsIGFuZCB3YW5kZXIgYWJvdXQgYW1vbmcgdGhvc2UgYmVkcyBvZiBicmlnaHQg
Zmxvd2VycyBhbmQgdGhvc2UgY29vbCBmb3VudGFpbnMsIGJ1dCBzaGUgY291bGQgbm90IGV2ZW4g
Z2V0IGhlciBoZWFkIHRob3VnaCB0aGUgZG9vcndheTsgYGFuZCBldmVuIGlmIG15IGhlYWQgd291
bGQgZ28gdGhyb3VnaCwnIHRob3VnaHQgcG9vciBBbGljZSwgYGl0IHdvdWxkIGJlIG9mIHZlcnkg
bGl0dGxlIHVzZSB3aXRob3V0IG15IHNob3VsZGVycy4gT2gsIGhvdyBJIHdpc2ggSSBjb3VsZCBz
aHV0IHVwIGxpa2UgYSB0ZWxlc2NvcGUhIEkgdGhpbmsgSSBjb3VsZCwgaWYgSSBvbmx5IGtub3cg
aG93IHRvIGJlZ2luLicgRm9yLCB5b3Ugc2VlLCBzbyBtYW55IG91dC1vZi10aGUtd2F5IHRoaW5n
cyBoYWQgaGFwcGVuZWQgbGF0ZWx5LCB0aGF0IEFsaWNlIGhhZCBiZWd1biB0byB0aGluayB0aGF0
IHZlcnkgZmV3IHRoaW5ncyBpbmRlZWQgd2VyZSByZWFsbHkgaW1wb3NzaWJsZS4KClRoZXJlIHNl
ZW1lZCB0byBiZSBubyB1c2UgaW4gd2FpdGluZyBieSB0aGUgbGl0dGxlIGRvb3IsIHNvIHNoZSB3
ZW50IGJhY2sgdG8gdGhlIHRhYmxlLCBoYWxmIGhvcGluZyBzaGUgbWlnaHQgZmluZCBhbm90aGVy
IGtleSBvbiBpdCwgb3IgYXQgYW55IHJhdGUgYSBib29rIG9mIHJ1bGVzIGZvciBzaHV0dGluZyBw
ZW9wbGUgdXAgbGlrZSB0ZWxlc2NvcGVzOiB0aGlzIHRpbWUgc2hlIGZvdW5kIGEgbGl0dGxlIGJv
dHRsZSBvbiBpdCwgKGB3aGljaCBjZXJ0YWlubHkgd2FzIG5vdCBoZXJlIGJlZm9yZSwnIHNhaWQg
QWxpY2UsKSBhbmQgcm91bmQgdGhlIG5lY2sgb2YgdGhlIGJvdHRsZSB3YXMgYSBwYXBlciBsYWJl
bCwgd2l0aCB0aGUgd29yZHMgYERSSU5LIE1FJyBiZWF1dGlmdWxseSBwcmludGVkIG9uIGl0IGlu
IGxhcmdlIGxldHRlcnMuCgogQWxpY2UgdGFraW5nICJEcmluayBNZSIgYm90dGxlCgpJdCB3YXMg
YWxsIHZlcnkgd2VsbCB0byBzYXkgYERyaW5rIG1lLCcgYnV0IHRoZSB3aXNlIGxpdHRsZSBBbGlj
ZSB3YXMgbm90IGdvaW5nIHRvIGRvIHRoYXQgaW4gYSBodXJyeS4gYE5vLCBJJ2xsIGxvb2sgZmly
c3QsJyBzaGUgc2FpZCwgYGFuZCBzZWUgd2hldGhlciBpdCdzIG1hcmtlZCAicG9pc29uIiBvciBu
b3QnOyBmb3Igc2hlIGhhZCByZWFkIHNldmVyYWwgbmljZSBsaXR0bGUgaGlzdG9yaWVzIGFib3V0
IGNoaWxkcmVuIHdobyBoYWQgZ290IGJ1cm50LCBhbmQgZWF0ZW4gdXAgYnkgd2lsZCBiZWFzdHMg
YW5kIG90aGVyIHVucGxlYXNhbnQgdGhpbmdzLCBhbGwgYmVjYXVzZSB0aGV5IHdvdWxkIG5vdCBy
ZW1lbWJlciB0aGUgc2ltcGxlIHJ1bGVzIHRoZWlyIGZyaWVuZHMgaGFkIHRhdWdodCB0aGVtOiBz
dWNoIGFzLCB0aGF0IGEgcmVkLWhvdCBwb2tlciB3aWxsIGJ1cm4geW91IGlmIHlvdSBob2xkIGl0
IHRvbyBsb25nOyBhbmQgdGhhdCBpZiB5b3UgY3V0IHlvdXIgZmluZ2VyIHZlcnkgZGVlcGx5IHdp
dGggYSBrbmlmZSwgaXQgdXN1YWxseSBibGVlZHM7IGFuZCBzaGUgaGFkIG5ldmVyIGZvcmdvdHRl
biB0aGF0LCBpZiB5b3UgZHJpbmsgbXVjaCBmcm9tIGEgYm90dGxlIG1hcmtlZCBgcG9pc29uLCcg
aXQgaXMgYWxtb3N0IGNlcnRhaW4gdG8gZGlzYWdyZWUgd2l0aCB5b3UsIHNvb25lciBvciBsYXRl
ci4KCkhvd2V2ZXIsIHRoaXMgYm90dGxlIHdhcyBub3QgbWFya2VkIGBwb2lzb24sJyBzbyBBbGlj
ZSB2ZW50dXJlZCB0byB0YXN0ZSBpdCwgYW5kIGZpbmRpbmcgaXQgdmVyeSBuaWNlLCAoaXQgaGFk
LCBpbiBmYWN0LCBhIHNvcnQgb2YgbWl4ZWQgZmxhdm91ciBvZiBjaGVycnktdGFydCwgY3VzdGFy
ZCwgcGluZS1hcHBsZSwgcm9hc3QgdHVya2V5LCB0b2ZmZWUsIGFuZCBob3QgYnV0dGVyZWQgdG9h
c3QsKSBzaGUgdmVyeSBzb29uIGZpbmlzaGVkIGl0IG9mZi4KCmBXaGF0IGEgY3VyaW91cyBmZWVs
aW5nIScgc2FpZCBBbGljZTsgYEkgbXVzdCBiZSBzaHV0dGluZyB1cCBsaWtlIGEgdGVsZXNjb3Bl
LicKQW5kIHNvIGl0IHdhcyBpbmRlZWQ6IHNoZSB3YXMgbm93IG9ubHkgdGVuIGluY2hlcyBoaWdo
LCBhbmQgaGVyIGZhY2UgYnJpZ2h0ZW5lZCB1cCBhdCB0aGUgdGhvdWdodCB0aGF0IHNoZSB3YXMg
bm93IHRoZSByaWdodCBzaXplIGZvciBnb2luZyB0aHJvdWdoIHRoZSBsaXR0bGUgZG9vciBpbnRv
IHRoYXQgbG92ZWx5IGdhcmRlbi4gRmlyc3QsIGhvd2V2ZXIsIHNoZSB3YWl0ZWQgZm9yIGEgZmV3
IG1pbnV0ZXMgdG8gc2VlIGlmIHNoZSB3YXMgZ29pbmcgdG8gc2hyaW5rIGFueSBmdXJ0aGVyOiBz
aGUgZmVsdCBhIGxpdHRsZSBuZXJ2b3VzIGFib3V0IHRoaXM7IGBmb3IgaXQgbWlnaHQgZW5kLCB5
b3Uga25vdywnIHNhaWQgQWxpY2UgdG8gaGVyc2VsZiwgYGluIG15IGdvaW5nIG91dCBhbHRvZ2V0
aGVyLCBsaWtlIGEgY2FuZGxlLiBJIHdvbmRlciB3aGF0IEkgc2hvdWxkIGJlIGxpa2UgdGhlbj8n
IEFuZCBzaGUgdHJpZWQgdG8gZmFuY3kgd2hhdCB0aGUgZmxhbWUgb2YgYSBjYW5kbGUgaXMgbGlr
ZSBhZnRlciB0aGUgY2FuZGxlIGlzIGJsb3duIG91dCwgZm9yIHNoZSBjb3VsZCBub3QgcmVtZW1i
ZXIgZXZlciBoYXZpbmcgc2VlbiBzdWNoIGEgdGhpbmcuCgpBZnRlciBhIHdoaWxlLCBmaW5kaW5n
IHRoYXQgbm90aGluZyBtb3JlIGhhcHBlbmVkLCBzaGUgZGVjaWRlZCBvbiBnb2luZyBpbnRvIHRo
ZSBnYXJkZW4gYXQgb25jZTsgYnV0LCBhbGFzIGZvciBwb29yIEFsaWNlISB3aGVuIHNoZSBnb3Qg
dG8gdGhlIGRvb3IsIHNoZSBmb3VuZCBzaGUgaGFkIGZvcmdvdHRlbiB0aGUgbGl0dGxlIGdvbGRl
biBrZXksIGFuZCB3aGVuIHNoZSB3ZW50IGJhY2sgdG8gdGhlIHRhYmxlIGZvciBpdCwgc2hlIGZv
dW5kIHNoZSBjb3VsZCBub3QgcG9zc2libHkgcmVhY2ggaXQ6IHNoZSBjb3VsZCBzZWUgaXQgcXVp
dGUgcGxhaW5seSB0aHJvdWdoIHRoZSBnbGFzcywgYW5kIHNoZSB0cmllZCBoZXIgYmVzdCB0byBj
bGltYiB1cCBvbmUgb2YgdGhlIGxlZ3Mgb2YgdGhlIHRhYmxlLCBidXQgaXQgd2FzIHRvbyBzbGlw
cGVyeTsgYW5kIHdoZW4gc2hlIGhhZCB0aXJlZCBoZXJzZWxmIG91dCB3aXRoIHRyeWluZywgdGhl
IHBvb3IgbGl0dGxlIHRoaW5nIHNhdCBkb3duIGFuZCBjcmllZC4KCmBDb21lLCB0aGVyZSdzIG5v
IHVzZSBpbiBjcnlpbmcgbGlrZSB0aGF0IScgc2FpZCBBbGljZSB0byBoZXJzZWxmLCByYXRoZXIg
c2hhcnBseTsgYEkgYWR2aXNlIHlvdSB0byBsZWF2ZSBvZmYgdGhpcyBtaW51dGUhJyBTaGUgZ2Vu
ZXJhbGx5IGdhdmUgaGVyc2VsZiB2ZXJ5IGdvb2QgYWR2aWNlLCAodGhvdWdoIHNoZSB2ZXJ5IHNl
bGRvbSBmb2xsb3dlZCBpdCksIGFuZCBzb21ldGltZXMgc2hlIHNjb2xkZWQgaGVyc2VsZiBzbyBz
ZXZlcmVseSBhcyB0byBicmluZyB0ZWFycyBpbnRvIGhlciBleWVzOyBhbmQgb25jZSBzaGUgcmVt
ZW1iZXJlZCB0cnlpbmcgdG8gYm94IGhlciBvd24gZWFycyBmb3IgaGF2aW5nIGNoZWF0ZWQgaGVy
c2VsZiBpbiBhIGdhbWUgb2YgY3JvcXVldCBzaGUgd2FzIHBsYXlpbmcgYWdhaW5zdCBoZXJzZWxm
LCBmb3IgdGhpcyBjdXJpb3VzIGNoaWxkIHdhcyB2ZXJ5IGZvbmQgb2YgcHJldGVuZGluZyB0byBi
ZSB0d28gcGVvcGxlLiBgQnV0IGl0J3Mgbm8gdXNlIG5vdywnIHRob3VnaHQgcG9vciBBbGljZSwg
YHRvIHByZXRlbmQgdG8gYmUgdHdvIHBlb3BsZSEgV2h5LCB0aGVyZSdzIGhhcmRseSBlbm91Z2gg
b2YgbWUgbGVmdCB0byBtYWtlIG9uZSByZXNwZWN0YWJsZSBwZXJzb24hJwoKU29vbiBoZXIgZXll
IGZlbGwgb24gYSBsaXR0bGUgZ2xhc3MgYm94IHRoYXQgd2FzIGx5aW5nIHVuZGVyIHRoZSB0YWJs
ZTogc2hlIG9wZW5lZCBpdCwgYW5kIGZvdW5kIGluIGl0IGEgdmVyeSBzbWFsbCBjYWtlLCBvbiB3
aGljaCB0aGUgd29yZHMgYEVBVCBNRScgd2VyZSBiZWF1dGlmdWxseSBtYXJrZWQgaW4gY3VycmFu
dHMuIGBXZWxsLCBJJ2xsIGVhdCBpdCwnIHNhaWQgQWxpY2UsIGBhbmQgaWYgaXQgbWFrZXMgbWUg
Z3JvdyBsYXJnZXIsIEkgY2FuIHJlYWNoIHRoZSBrZXk7IGFuZCBpZiBpdCBtYWtlcyBtZSBncm93
IHNtYWxsZXIsIEkgY2FuIGNyZWVwIHVuZGVyIHRoZSBkb29yOyBzbyBlaXRoZXIgd2F5IEknbGwg
Z2V0IGludG8gdGhlIGdhcmRlbiwgYW5kIEkgZG9uJ3QgY2FyZSB3aGljaCBoYXBwZW5zIScKClNo
ZSBhdGUgYSBsaXR0bGUgYml0LCBhbmQgc2FpZCBhbnhpb3VzbHkgdG8gaGVyc2VsZiwgYFdoaWNo
IHdheT8gV2hpY2ggd2F5PycsIGhvbGRpbmcgaGVyIGhhbmQgb24gdGhlIHRvcCBvZiBoZXIgaGVh
ZCB0byBmZWVsIHdoaWNoIHdheSBpdCB3YXMgZ3Jvd2luZywgYW5kIHNoZSB3YXMgcXVpdGUgc3Vy
cHJpc2VkIHRvIGZpbmQgdGhhdCBzaGUgcmVtYWluZWQgdGhlIHNhbWUgc2l6ZTogdG8gYmUgc3Vy
ZSwgdGhpcyBnZW5lcmFsbHkgaGFwcGVucyB3aGVuIG9uZSBlYXRzIGNha2UsIGJ1dCBBbGljZSBo
YWQgZ290IHNvIG11Y2ggaW50byB0aGUgd2F5IG9mIGV4cGVjdGluZyBub3RoaW5nIGJ1dCBvdXQt
b2YtdGhlLXdheSB0aGluZ3MgdG8gaGFwcGVuLCB0aGF0IGl0IHNlZW1lZCBxdWl0ZSBkdWxsIGFu
ZCBzdHVwaWQgZm9yIGxpZmUgdG8gZ28gb24gaW4gdGhlIGNvbW1vbiB3YXkuCgpTbyBzaGUgc2V0
IHRvIHdvcmssIGFuZCB2ZXJ5IHNvb24gZmluaXNoZWQgb2ZmIHRoZSBjYWtlLgogICAgPC9kaXY+
CjwvYm9keT4KPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>210533</attachid>
            <date>2013-09-04 18:00:37 -0700</date>
            <delta_ts>2013-09-05 09:05:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>tmp.patch</filename>
            <type>text/plain</type>
            <size>14221</size>
            <attacher name="Hans Muller">giles_joplin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBhZjhiOThlLi4xNDM3ZTZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYg
QEAKKzIwMTMtMDktMDQgIEhhbnMgTXVsbGVyICA8aG11bGxlckBhZG9iZS5jb20+CisKKyAgICAg
ICAgW0NTUyBTaGFwZXNdIEltcHJvdmUgdGhlIHBlcmZvcm1hbmNlIG9mIGltYWdlIHZhbHVlZCBz
aGFwZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEy
MDIxMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJl
cGxhY2VkIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBSYXN0ZXJTaGFwZUludGVydmFscyB3aXRoIG9u
ZSBiYXNlZCBvbiB0aGUKKyAgICAgICAgbmV3IFNoYXBlSW50ZXJ2YWw8aW50PiBjbGFzcy4gVGhp
cyBlbGltaW5hdGVzIHRoZSBkZXBlbmRlbmN5IHRoZSBSZWdpb24gY2xhc3MKKyAgICAgICAgYW5k
IGRlbGl2ZXJzIGEgMTBYIGxheW91dCBzcGVlZHVwIGZvciBsYXJnZSBpbWFnZSB2YWx1ZWQgc2hh
cGVzLgorCisgICAgICAgIFRoaXMgYSBqdXN0IGFuIGltcGxlbWVudGF0aW9uIHJlZmFjdG9yaW5n
LCBubyBuZXcgdGVzdHMgd2VyZSBuZWVkZWQuCisKKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVz
L1Jhc3RlclNoYXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJhc3RlclNoYXBlSW50ZXJ2YWxz
OjphcHBlbmRJbnRlcnZhbCk6IFJlbmFtZWQgdGhpcyBtZXRob2QsIGl0IHdhcyBjYWxsZWQgYWRk
SW50ZXJ2YWwoKS4KKyAgICAgICAgKFdlYkNvcmU6OnNoYXBlSW50ZXJ2YWxzQ29udGFpbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSYXN0ZXJTaGFwZUludGVydmFsczo6Y29udGFpbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmFzdGVyU2hhcGVJbnRlcnZhbHM6OmdldEludGVydmFsc0luTGluZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpjb21wYXJlWDEpOgorICAgICAgICAoV2ViQ29yZTo6UmFzdGVyU2hh
cGVJbnRlcnZhbHM6OmZpcnN0SW5jbHVkZWRJbnRlcnZhbFkpOgorICAgICAgICAoV2ViQ29yZTo6
UmFzdGVyU2hhcGVJbnRlcnZhbHM6OmdldEluY2x1ZGVkSW50ZXJ2YWxzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJhc3RlclNoYXBlSW50ZXJ2YWxzOjpnZXRFeGNsdWRlZEludGVydmFscyk6CisgICAg
ICAgIChXZWJDb3JlOjpSYXN0ZXJTaGFwZTo6Z2V0RXhjbHVkZWRJbnRlcnZhbHMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmFzdGVyU2hhcGU6OmdldEluY2x1ZGVkSW50ZXJ2YWxzKToKKyAgICAgICAg
KiByZW5kZXJpbmcvc2hhcGVzL1Jhc3RlclNoYXBlLmg6CisgICAgICAgIChXZWJDb3JlOjpSYXN0
ZXJTaGFwZUludGVydmFsczo6UmFzdGVyU2hhcGVJbnRlcnZhbHMpOiBUaGUgY29uc3RydWN0b3Ig
bm93IHRha2VzIGEgc2l6ZSBhcmd1bWVudCB3aGljaCBpcyB1c2VkIHRvIGFsbG9jYXRlIEludFNo
YXBlSW50ZXJ2YWxzIHN0b3JhZ2UuCisgICAgICAgIChXZWJDb3JlOjpSYXN0ZXJTaGFwZUludGVy
dmFsczo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSYXN0ZXJTaGFwZUludGVydmFsczo6Ym91
bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJhc3RlclNoYXBlSW50ZXJ2YWxzOjppc0VtcHR5KToK
KyAgICAgICAgKFdlYkNvcmU6OlJhc3RlclNoYXBlSW50ZXJ2YWxzOjpnZXRJbnRlcnZhbHMpOgor
ICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U2hhcGU6OmNyZWF0ZVNoYXBlKTogVXNlIGFwcGVuZEludGVydmFsKCkgaW5zdGVhZCBvZiBhZGRJ
bnRlcnZhbCgpIChzZWUgYWJvdmUpIGFuZCB0aGUgbmV3IFJhc3RlclNoYXBlSW50ZXJ2YWxzIGNv
bnN0cnVjdG9yLgorCiAyMDEzLTA5LTA0ICBTYW11ZWwgV2hpdGUgIDxzYW11ZWxfd2hpdGVAYXBw
bGUuY29tPgogCiAgICAgICAgIEFYOiB3aGVuIG5vIG90aGVyIGxhYmVsIG9uIHByb3ZpZGVkIG9u
IGZvcm0gZWxlbWVudHMsIFdlYktpdCBzaG91bGQgZmFsbCBiYWNrIHRvIHVzaW5nIEB0aXRsZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9SYXN0ZXJTaGFwZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1Jhc3RlclNoYXBlLmNwcAppbmRl
eCA0ZWI4YWViLi5kMDZmNjk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c2hhcGVzL1Jhc3RlclNoYXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hh
cGVzL1Jhc3RlclNoYXBlLmNwcApAQCAtMzAsMTE1ICszMCwxMjggQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJSYXN0ZXJTaGFwZS5oIgogCi0jaW5jbHVkZSAiU2hhcGVJbnRlcnZh
bC5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotSW50UmVjdCBSYXN0ZXJTaGFwZUludGVydmFsczo6Ym91bmRzKCkgY29uc3QKK3ZvaWQgUmFz
dGVyU2hhcGVJbnRlcnZhbHM6OmFwcGVuZEludGVydmFsKGludCB5LCBpbnQgeDEsIGludCB4MikK
IHsKLSAgICBpZiAoIW1fYm91bmRzKQotICAgICAgICBtX2JvdW5kcyA9IGFkb3B0UHRyKG5ldyBJ
bnRSZWN0KG1fcmVnaW9uLmJvdW5kcygpKSk7Ci0gICAgcmV0dXJuICptX2JvdW5kczsKKyAgICBB
U1NFUlQoeSA+PSAwICYmIHkgPCBzaXplKCkgJiYgeDEgPj0gMCAmJiB4MiA+IHgxKTsKKworICAg
IGlmIChtX2JvdW5kcy53aWR0aCgpID09IC0xKQorICAgICAgICBtX2JvdW5kcyA9IEludFJlY3Qo
eDEsIHksIHgyIC0geDEsIDEpOworICAgIGVsc2UKKyAgICAgICAgbV9ib3VuZHMudW5pdGUoSW50
UmVjdCh4MSwgeSwgeDIgLSB4MSwgMSkpOworCisgICAgbV9pbnRlcnZhbExpc3RzW3ldLmFwcGVu
ZChJbnRTaGFwZUludGVydmFsKHgxLCB4MikpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2hh
cGVJbnRlcnZhbHNDb250YWluKGNvbnN0IEludFNoYXBlSW50ZXJ2YWxzJiBpbnRlcnZhbHMsIGNv
bnN0IEludFNoYXBlSW50ZXJ2YWwmIGludGVydmFsKQoreworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBpbnRlcnZhbHMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgaWYgKGludGVydmFsc1tp
XS54MSgpID4gaW50ZXJ2YWwueDIoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgaWYgKGludGVydmFsc1tpXS5jb250YWlucyhpbnRlcnZhbCkpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmFzdGVyU2hh
cGVJbnRlcnZhbHM6OmNvbnRhaW5zKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAg
aWYgKCFib3VuZHMoKS5jb250YWlucyhyZWN0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgY29uc3QgSW50U2hhcGVJbnRlcnZhbCYgcmVjdEludGVydmFsID0gSW50U2hhcGVJbnRlcnZh
bChyZWN0LngoKSwgcmVjdC5tYXhYKCkpOworICAgIGZvciAoaW50IHkgPSByZWN0LnkoKTsgeSA8
IHJlY3QubWF4WSgpOyB5KyspIHsKKyAgICAgICAgaWYgKCFzaGFwZUludGVydmFsc0NvbnRhaW4o
Z2V0SW50ZXJ2YWxzKHkpLCByZWN0SW50ZXJ2YWwpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFJhc3RlclNoYXBlSW50ZXJ2
YWxzOjpnZXRJbnRlcnZhbHNJbkxpbmUoaW50IHkxLCBpbnQgeTIsIEludFNoYXBlSW50ZXJ2YWxz
JiByZXN1bHQpIGNvbnN0Cit7CisgICAgZm9yIChpbnQgeSA9IHkxOyB5IDwgeTI7ICB5KyspIHsK
KyAgICAgICAgaWYgKGdldEludGVydmFscyh5KS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgZm9yIChpbnQgeSA9IHkxOyB5IDwgeTI7ICB5KyspIHsK
KyAgICAgICAgY29uc3QgSW50U2hhcGVJbnRlcnZhbHMmIHlJbnRlcnZhbHMgPSBnZXRJbnRlcnZh
bHMoeSk7CisgICAgICAgIGlmICh5ID4geTEgJiYgeUludGVydmFscyA9PSBnZXRJbnRlcnZhbHMo
eSAtIDEpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHJlc3VsdC5hcHBlbmRWZWN0
b3IoeUludGVydmFscyk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmFz
dGVyU2hhcGVJbnRlcnZhbHM6OmFkZEludGVydmFsKGludCB5LCBpbnQgeDEsIGludCB4MikKK3N0
YXRpYyBib29sIGNvbXBhcmVYMShjb25zdCBJbnRTaGFwZUludGVydmFsIGEsIGNvbnN0IEludFNo
YXBlSW50ZXJ2YWwmIGIpCiB7Ci0gICAgbV9yZWdpb24udW5pdGUoUmVnaW9uKEludFJlY3QoeDEs
IHksIHgyIC0geDEsIDEpKSk7Ci0gICAgbV9ib3VuZHMuY2xlYXIoKTsKKyAgICByZXR1cm4gYS54
MSgpIDwgYi54MSgpOwogfQogCiBib29sIFJhc3RlclNoYXBlSW50ZXJ2YWxzOjpmaXJzdEluY2x1
ZGVkSW50ZXJ2YWxZKGludCBtaW5ZLCBjb25zdCBJbnRTaXplJiBtaW5TaXplLCBMYXlvdXRVbml0
JiByZXN1bHQpIGNvbnN0CiB7Ci0gICAgZm9yIChpbnQgeSA9IG1pblk7IHkgPD0gYm91bmRzKCku
bWF4WSgpIC0gbWluU2l6ZS5oZWlnaHQoKTsgeSsrKSB7Ci0gICAgICAgIFJlZ2lvbiBsaW5lUmVn
aW9uKEludFJlY3QoYm91bmRzKCkueCgpLCB5LCBib3VuZHMoKS53aWR0aCgpLCBtaW5TaXplLmhl
aWdodCgpKSk7Ci0gICAgICAgIGxpbmVSZWdpb24uaW50ZXJzZWN0KG1fcmVnaW9uKTsKLSAgICAg
ICAgaWYgKGxpbmVSZWdpb24uaXNFbXB0eSgpKQorICAgIEFTU0VSVChtaW5ZID49IDAgJiYgbWlu
WSArIG1pblNpemUuaGVpZ2h0KCkgPCBzaXplKCkpOworCisgICAgZm9yIChpbnQgbGluZVkgPSBt
aW5ZOyBsaW5lWSA8PSBib3VuZHMoKS5tYXhZKCkgLSBtaW5TaXplLmhlaWdodCgpOyBsaW5lWSsr
KSB7CisgICAgICAgIEludFNoYXBlSW50ZXJ2YWxzIGxpbmVJbnRlcnZhbHM7CisgICAgICAgIGlm
ICghZ2V0SW50ZXJ2YWxzSW5MaW5lKGxpbmVZLCBsaW5lWSArIG1pblNpemUuaGVpZ2h0KCksIGxp
bmVJbnRlcnZhbHMpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgY29uc3QgVmVj
dG9yPEludFJlY3Q+JiBsaW5lUmVjdHMgPSBsaW5lUmVnaW9uLnJlY3RzKCk7Ci0gICAgICAgIEFT
U0VSVChsaW5lUmVjdHMuc2l6ZSgpID4gMCk7CisgICAgICAgIHN0ZDo6c29ydChsaW5lSW50ZXJ2
YWxzLmJlZ2luKCksIGxpbmVJbnRlcnZhbHMuZW5kKCksIGNvbXBhcmVYMSk7CiAKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpbmVSZWN0cy5zaXplKCk7IGkrKykgewotICAgICAg
ICAgICAgSW50UmVjdCByZWN0ID0gbGluZVJlY3RzW2ldOwotICAgICAgICAgICAgaWYgKHJlY3Qu
d2lkdGgoKSA+PSBtaW5TaXplLndpZHRoKCkgJiYgbGluZVJlZ2lvbi5jb250YWlucyhSZWdpb24o
SW50UmVjdChJbnRQb2ludChyZWN0LngoKSwgeSksIG1pblNpemUpKSkpIHsKLSAgICAgICAgICAg
ICAgICByZXN1bHQgPSB5OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGluZUlu
dGVydmFscy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgaW50IGxpbmVYID0gbGluZUludGVy
dmFsc1tpXS54MSgpOworICAgICAgICAgICAgaWYgKGkgPiAwICYmIGxpbmVYID09IGxpbmVJbnRl
cnZhbHNbaSAtIDFdLngxKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICBpZiAoY29udGFpbnMoSW50UmVjdChsaW5lWCwgbGluZVksIG1pblNpemUud2lkdGgoKSwgbWlu
U2l6ZS5oZWlnaHQoKSkpKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbGluZVk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
CisKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSW50UmVjdCBhbGlnbmVk
UmVjdChJbnRSZWN0IHIsIGludCB5MSwgaW50IHkyKQotewotICAgIHJldHVybiBJbnRSZWN0KHIu
eCgpLCB5MSwgci53aWR0aCgpLCB5MiAtIHkxKTsKLX0KIAotdm9pZCBSYXN0ZXJTaGFwZUludGVy
dmFsczo6Z2V0SW5jbHVkZWRJbnRlcnZhbHMoaW50IHkxLCBpbnQgeTIsIFNlZ21lbnRMaXN0JiBy
ZXN1bHQpIGNvbnN0Cit2b2lkIFJhc3RlclNoYXBlSW50ZXJ2YWxzOjpnZXRJbmNsdWRlZEludGVy
dmFscyhpbnQgeTEsIGludCB5MiwgSW50U2hhcGVJbnRlcnZhbHMmIHJlc3VsdCkgY29uc3QKIHsK
ICAgICBBU1NFUlQoeTIgPj0geTEpOwogCi0gICAgSW50UmVjdCBsaW5lUmVjdChib3VuZHMoKS54
KCksIHkxLCBib3VuZHMoKS53aWR0aCgpLCB5MiAtIHkxKTsKLSAgICBSZWdpb24gbGluZVJlZ2lv
bihsaW5lUmVjdCk7Ci0gICAgbGluZVJlZ2lvbi5pbnRlcnNlY3QobV9yZWdpb24pOwotICAgIGlm
IChsaW5lUmVnaW9uLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgVmVj
dG9yPEludFJlY3Q+JiBsaW5lUmVjdHMgPSBsaW5lUmVnaW9uLnJlY3RzKCk7Ci0gICAgQVNTRVJU
KGxpbmVSZWN0cy5zaXplKCkgPiAwKTsKLQotICAgIFJlZ2lvbiBzZWdtZW50c1JlZ2lvbihsaW5l
UmVjdCk7Ci0gICAgUmVnaW9uIGludGVydmFsc1JlZ2lvbjsKLQotICAgIC8vIFRoZSBsb29wIGJl
bG93IHVzZXMgUmVnaW9ucyB0byBjb21wdXRlIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIGhvcml6
b250YWwKLSAgICAvLyBzaGFwZSBpbnRlcnZhbHMgdGhhdCBmYWxsIHdpdGhpbiB0aGUgbGluZSdz
IGJveC4KLSAgICBpbnQgY3VycmVudExpbmVZID0gbGluZVJlY3RzWzBdLnkoKTsKLSAgICBpbnQg
Y3VycmVudExpbmVNYXhZID0gbGluZVJlY3RzWzBdLm1heFkoKTsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGluZVJlY3RzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGludCBsaW5lWSA9
IGxpbmVSZWN0c1tpXS55KCk7Ci0gICAgICAgIEFTU0VSVChsaW5lWSA+PSBjdXJyZW50TGluZVkp
OwotICAgICAgICBpZiAobGluZVkgPiBjdXJyZW50TGluZU1heFkpIHsKLSAgICAgICAgICAgIC8v
IFdlJ3ZlIGVuY291bnRlcmVkIGEgdmVydGljYWwgZ2FwIGluIGxpbmVSZWN0cywgdGhlcmUgYXJl
IG5vIGluY2x1ZGVkIGludGVydmFscy4KKyAgICBmb3IgKGludCB5ID0geTE7IHkgPCB5MjsgIHkr
KykgeworICAgICAgICBpZiAoZ2V0SW50ZXJ2YWxzKHkpLmlzRW1wdHkoKSkKICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBpZiAobGluZVkgPiBjdXJyZW50TGluZVkpIHsK
LSAgICAgICAgICAgIGN1cnJlbnRMaW5lWSA9IGxpbmVZOwotICAgICAgICAgICAgY3VycmVudExp
bmVNYXhZID0gbGluZVJlY3RzW2ldLm1heFkoKTsKLSAgICAgICAgICAgIHNlZ21lbnRzUmVnaW9u
LmludGVyc2VjdChpbnRlcnZhbHNSZWdpb24pOwotICAgICAgICAgICAgaW50ZXJ2YWxzUmVnaW9u
ID0gUmVnaW9uKCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY3VycmVudExpbmVNYXhZ
ID0gc3RkOjptYXg8aW50PihjdXJyZW50TGluZU1heFksIGxpbmVSZWN0c1tpXS5tYXhZKCkpOwot
ICAgICAgICBpbnRlcnZhbHNSZWdpb24udW5pdGUoUmVnaW9uKGFsaWduZWRSZWN0KGxpbmVSZWN0
c1tpXSwgeTEsIHkyKSkpOwogICAgIH0KLSAgICBpZiAoIWludGVydmFsc1JlZ2lvbi5pc0VtcHR5
KCkpCi0gICAgICAgIHNlZ21lbnRzUmVnaW9uLmludGVyc2VjdChpbnRlcnZhbHNSZWdpb24pOwog
Ci0gICAgY29uc3QgVmVjdG9yPEludFJlY3Q+JiBzZWdtZW50UmVjdHMgPSBzZWdtZW50c1JlZ2lv
bi5yZWN0cygpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzZWdtZW50UmVjdHMuc2l6
ZSgpOyArK2kpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoTGluZVNlZ21lbnQoc2VnbWVudFJlY3Rz
W2ldLngoKSwgc2VnbWVudFJlY3RzW2ldLm1heFgoKSkpOworICAgIHJlc3VsdCA9IGdldEludGVy
dmFscyh5MSk7CisgICAgZm9yIChpbnQgeSA9IHkxICsgMTsgeSA8IHkyOyAgeSsrKSB7CisgICAg
ICAgIEludFNoYXBlSW50ZXJ2YWxzIGludGVydmFsczsKKyAgICAgICAgSW50U2hhcGVJbnRlcnZh
bDo6aW50ZXJzZWN0U2hhcGVJbnRlcnZhbHMocmVzdWx0LCBnZXRJbnRlcnZhbHMoeSksIGludGVy
dmFscyk7CisgICAgICAgIHJlc3VsdCA9IGludGVydmFsczsKKyAgICB9CiB9CiAKLXZvaWQgUmFz
dGVyU2hhcGVJbnRlcnZhbHM6OmdldEV4Y2x1ZGVkSW50ZXJ2YWxzKGludCB5MSwgaW50IHkyLCBT
ZWdtZW50TGlzdCYgcmVzdWx0KSBjb25zdAordm9pZCBSYXN0ZXJTaGFwZUludGVydmFsczo6Z2V0
RXhjbHVkZWRJbnRlcnZhbHMoaW50IHkxLCBpbnQgeTIsIEludFNoYXBlSW50ZXJ2YWxzJiByZXN1
bHQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKHkyID49IHkxKTsKIAotICAgIEludFJlY3QgbGluZVJl
Y3QoYm91bmRzKCkueCgpLCB5MSwgYm91bmRzKCkud2lkdGgoKSwgeTIgLSB5MSk7Ci0gICAgUmVn
aW9uIGxpbmVSZWdpb24obGluZVJlY3QpOwotICAgIGxpbmVSZWdpb24uaW50ZXJzZWN0KG1fcmVn
aW9uKTsKLSAgICBpZiAobGluZVJlZ2lvbi5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgbGluZVJlY3RzID0gbGluZVJlZ2lvbi5yZWN0cygp
OwotICAgIEFTU0VSVChsaW5lUmVjdHMuc2l6ZSgpID4gMCk7Ci0KLSAgICBSZWdpb24gc2VnbWVu
dHNSZWdpb247Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpbmVSZWN0cy5zaXplKCk7
IGkrKykKLSAgICAgICAgc2VnbWVudHNSZWdpb24udW5pdGUoUmVnaW9uKGFsaWduZWRSZWN0KGxp
bmVSZWN0c1tpXSwgeTEsIHkyKSkpOworICAgIGZvciAoaW50IHkgPSB5MTsgeSA8IHkyOyAgeSsr
KSB7CisgICAgICAgIGlmIChnZXRJbnRlcnZhbHMoeSkuaXNFbXB0eSgpKQorICAgICAgICAgICAg
cmV0dXJuOworICAgIH0KIAotICAgIGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgc2VnbWVudFJlY3Rz
ID0gc2VnbWVudHNSZWdpb24ucmVjdHMoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c2VnbWVudFJlY3RzLnNpemUoKTsgaSsrKQotICAgICAgICByZXN1bHQuYXBwZW5kKExpbmVTZWdt
ZW50KHNlZ21lbnRSZWN0c1tpXS54KCksIHNlZ21lbnRSZWN0c1tpXS5tYXhYKCkgKyAxKSk7Cisg
ICAgcmVzdWx0ID0gZ2V0SW50ZXJ2YWxzKHkxKTsKKyAgICBmb3IgKGludCB5ID0geTEgKyAxOyB5
IDwgeTI7ICB5KyspIHsKKyAgICAgICAgSW50U2hhcGVJbnRlcnZhbHMgaW50ZXJ2YWxzOworICAg
ICAgICBJbnRTaGFwZUludGVydmFsOjp1bml0ZVNoYXBlSW50ZXJ2YWxzKHJlc3VsdCwgZ2V0SW50
ZXJ2YWxzKHkpLCBpbnRlcnZhbHMpOworICAgICAgICByZXN1bHQgPSBpbnRlcnZhbHM7CisgICAg
fQogfQogCiBjb25zdCBSYXN0ZXJTaGFwZUludGVydmFscyYgUmFzdGVyU2hhcGU6Om1hcmdpbklu
dGVydmFscygpIGNvbnN0CkBAIC0xNzMsNyArMTg2LDExIEBAIHZvaWQgUmFzdGVyU2hhcGU6Omdl
dEV4Y2x1ZGVkSW50ZXJ2YWxzKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dp
Y2FsCiAgICAgaWYgKHkyIDwgaW50ZXJ2YWxzLmJvdW5kcygpLnkoKSB8fCB5MSA+PSBpbnRlcnZh
bHMuYm91bmRzKCkubWF4WSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpbnRlcnZhbHMuZ2V0
RXhjbHVkZWRJbnRlcnZhbHMoeTEsIHkyLCByZXN1bHQpOworICAgIEludFNoYXBlSW50ZXJ2YWxz
IGV4Y2x1ZGVkSW50ZXJ2YWxzOworICAgIGludGVydmFscy5nZXRFeGNsdWRlZEludGVydmFscyh5
MSwgeTIsIGV4Y2x1ZGVkSW50ZXJ2YWxzKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBleGNsdWRlZEludGVydmFscy5zaXplKCk7ICsraSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZChM
aW5lU2VnbWVudChleGNsdWRlZEludGVydmFsc1tpXS54MSgpLCBleGNsdWRlZEludGVydmFsc1tp
XS54MigpICsgMSkpOwogfQogCiB2b2lkIFJhc3RlclNoYXBlOjpnZXRJbmNsdWRlZEludGVydmFs
cyhMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2VnbWVu
dExpc3QmIHJlc3VsdCkgY29uc3QKQEAgLTE4OCw3ICsyMDUsMTIgQEAgdm9pZCBSYXN0ZXJTaGFw
ZTo6Z2V0SW5jbHVkZWRJbnRlcnZhbHMoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0
IGxvZ2ljYWwKICAgICBpZiAoeTEgPCBpbnRlcnZhbHMuYm91bmRzKCkueSgpIHx8IHkyID4gaW50
ZXJ2YWxzLmJvdW5kcygpLm1heFkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50ZXJ2YWxz
LmdldEluY2x1ZGVkSW50ZXJ2YWxzKHkxLCB5MiwgcmVzdWx0KTsKKyAgICBJbnRTaGFwZUludGVy
dmFscyBpbmNsdWRlZEludGVydmFsczsKKyAgICBpbnRlcnZhbHMuZ2V0SW5jbHVkZWRJbnRlcnZh
bHMoeTEsIHkyLCBpbmNsdWRlZEludGVydmFscyk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgaW5jbHVkZWRJbnRlcnZhbHMuc2l6ZSgpOyArK2kpCisgICAgICAgIHJlc3VsdC5hcHBl
bmQoTGluZVNlZ21lbnQoaW5jbHVkZWRJbnRlcnZhbHNbaV0ueDEoKSwgaW5jbHVkZWRJbnRlcnZh
bHNbaV0ueDIoKSkpOworCiB9CiAKIGJvb2wgUmFzdGVyU2hhcGU6OmZpcnN0SW5jbHVkZWRJbnRl
cnZhbExvZ2ljYWxUb3AoTGF5b3V0VW5pdCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3AsIGNvbnN0IExh
eW91dFNpemUmIG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUsIExheW91dFVuaXQmIHJlc3VsdCkgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvUmFzdGVyU2hh
cGUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvUmFzdGVyU2hhcGUuaAppbmRl
eCA5NDcyZTBjLi41NGJhMjA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c2hhcGVzL1Jhc3RlclNoYXBlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBl
cy9SYXN0ZXJTaGFwZS5oCkBAIC0zMSw4ICszMSw4IEBACiAjZGVmaW5lIFJhc3RlclNoYXBlX2gK
IAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIlJlZ2lvbi5oIgogI2luY2x1ZGUg
IlNoYXBlLmgiCisjaW5jbHVkZSAiU2hhcGVJbnRlcnZhbC5oIgogI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC00MCwxOCArNDAsMzIgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBSYXN0ZXJTaGFwZUludGVydmFscyB7CiBwdWJs
aWM6Ci0gICAgUmFzdGVyU2hhcGVJbnRlcnZhbHMoKSB7IH0KKyAgICBSYXN0ZXJTaGFwZUludGVy
dmFscyh1bnNpZ25lZCBzaXplKQorICAgICAgICA6IG1fYm91bmRzKC0xLCAtMSwgLTEsIC0xKQor
ICAgIHsKKyAgICAgICAgbV9pbnRlcnZhbExpc3RzLnJlc2l6ZShzaXplKTsKKyAgICB9CisKKyAg
ICBpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW50ZXJ2YWxMaXN0cy5zaXplKCk7IH0KKyAg
ICBjb25zdCBJbnRSZWN0JiBib3VuZHMoKSBjb25zdCB7IHJldHVybiBtX2JvdW5kczsgfQorICAg
IGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRzLmlzRW1wdHkoKTsgfQorICAg
IHZvaWQgYXBwZW5kSW50ZXJ2YWwoaW50IHksIGludCB4MSwgaW50IHgyKTsKKyAgICBib29sIGNv
bnRhaW5zKGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICBib29sIGdldEludGVydmFsc0luTGlu
ZShpbnQgbWluWSwgaW50IG1heFksIEludFNoYXBlSW50ZXJ2YWxzJiByZXN1bHQpIGNvbnN0Owor
CisgICAgY29uc3QgSW50U2hhcGVJbnRlcnZhbHMmIGdldEludGVydmFscyhpbnQgeSkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVCh5ID49IDAgJiYgeSA8IHNpemUoKSk7CisgICAgICAgIHJl
dHVybiBtX2ludGVydmFsTGlzdHNbeV07CisgICAgfQogCi0gICAgSW50UmVjdCBib3VuZHMoKSBj
b25zdDsKLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCAgeyByZXR1cm4gbV9yZWdpb24uaXNFbXB0
eSgpOyB9Ci0gICAgdm9pZCBhZGRJbnRlcnZhbChpbnQgeSwgaW50IHgxLCBpbnQgeDIpOwotICAg
IHZvaWQgZ2V0SW5jbHVkZWRJbnRlcnZhbHMoaW50IHkxLCBpbnQgeTIsIFNlZ21lbnRMaXN0Jikg
Y29uc3Q7Ci0gICAgdm9pZCBnZXRFeGNsdWRlZEludGVydmFscyhpbnQgeTEsIGludCB5MiwgU2Vn
bWVudExpc3QmKSBjb25zdDsKLSAgICBib29sIGZpcnN0SW5jbHVkZWRJbnRlcnZhbFkoaW50IG1p
blksIGNvbnN0IEludFNpemUmIG1pbkludGVydmFsU2l6ZSwgTGF5b3V0VW5pdCYpIGNvbnN0Owor
ICAgIHZvaWQgZ2V0SW5jbHVkZWRJbnRlcnZhbHMoaW50IHkxLCBpbnQgeTIsIEludFNoYXBlSW50
ZXJ2YWxzJiByZXN1bHQpIGNvbnN0OworICAgIHZvaWQgZ2V0RXhjbHVkZWRJbnRlcnZhbHMoaW50
IHkxLCBpbnQgeTIsIEludFNoYXBlSW50ZXJ2YWxzJiByZXN1bHQpIGNvbnN0OworICAgIGJvb2wg
Zmlyc3RJbmNsdWRlZEludGVydmFsWShpbnQgbWluWSwgY29uc3QgSW50U2l6ZSYgbWluU2l6ZSwg
TGF5b3V0VW5pdCYgcmVzdWx0KSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBSZWdpb24gbV9yZWdp
b247Ci0gICAgbXV0YWJsZSBPd25QdHI8SW50UmVjdD4gbV9ib3VuZHM7IC8vIENhY2hlZCB2YWx1
ZSBvZiBtX3JlZ2lvbi5ib3VuZHMoKS4KKyAgICBJbnRSZWN0IG1fYm91bmRzOworICAgIFZlY3Rv
cjxJbnRTaGFwZUludGVydmFscyA+IG1faW50ZXJ2YWxMaXN0czsKIH07CiAKIGNsYXNzIFJhc3Rl
clNoYXBlIDogcHVibGljIFNoYXBlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zaGFwZXMvU2hhcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9T
aGFwZS5jcHAKaW5kZXggYjNiOWQ2ZC4uZDA0ZTgwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3NoYXBlcy9TaGFwZS5jcHAKQEAgLTIwNywxMCArMjA3LDExIEBAIFBhc3NPd25QdHI8U2hh
cGU+IFNoYXBlOjpjcmVhdGVTaGFwZShjb25zdCBTdHlsZUltYWdlKiBzdHlsZUltYWdlLCBmbG9h
dCB0aHJlc2hvCiB7CiAgICAgQVNTRVJUKHN0eWxlSW1hZ2UgJiYgc3R5bGVJbWFnZS0+aXNDYWNo
ZWRJbWFnZSgpICYmIHN0eWxlSW1hZ2UtPmNhY2hlZEltYWdlKCkgJiYgc3R5bGVJbWFnZS0+Y2Fj
aGVkSW1hZ2UoKS0+aW1hZ2UoKSk7CiAKLSAgICBPd25QdHI8UmFzdGVyU2hhcGVJbnRlcnZhbHM+
IGludGVydmFscyA9IGFkb3B0UHRyKG5ldyBSYXN0ZXJTaGFwZUludGVydmFscygpKTsKLQogICAg
IEltYWdlKiBpbWFnZSA9IHN0eWxlSW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlKCk7CiAgICAg
Y29uc3QgSW50U2l6ZSYgaW1hZ2VTaXplID0gaW1hZ2UtPnNpemUoKTsKKworICAgIE93blB0cjxS
YXN0ZXJTaGFwZUludGVydmFscz4gaW50ZXJ2YWxzID0gYWRvcHRQdHIobmV3IFJhc3RlclNoYXBl
SW50ZXJ2YWxzKGltYWdlU2l6ZS5oZWlnaHQoKSkpOworCiAgICAgT3duUHRyPEltYWdlQnVmZmVy
PiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoaW1hZ2VTaXplKTsKICAgICBpZiAo
aW1hZ2VCdWZmZXIpIHsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQg
PSBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpOwpAQCAtMjMwLDcgKzIzMSw3IEBAIFBhc3NPd25QdHI8
U2hhcGU+IFNoYXBlOjpjcmVhdGVTaGFwZShjb25zdCBTdHlsZUltYWdlKiBzdHlsZUltYWdlLCBm
bG9hdCB0aHJlc2hvCiAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFydFggPT0gLTEgJiYgYWxw
aGFBYm92ZVRocmVzaG9sZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRYID0geDsK
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydFggIT0gLTEgJiYgKCFhbHBoYUFi
b3ZlVGhyZXNob2xkIHx8IHggPT0gaW1hZ2VTaXplLndpZHRoKCkgLSAxKSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgaW50ZXJ2YWxzLT5hZGRJbnRlcnZhbCh5LCBzdGFydFgsIHgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaW50ZXJ2YWxzLT5hcHBlbmRJbnRlcnZhbCh5LCBzdGFydFgs
IHgpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRYID0gLTE7CiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>210623</attachid>
            <date>2013-09-05 09:05:12 -0700</date>
            <delta_ts>2013-09-05 10:39:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>tmp.patch</filename>
            <type>text/plain</type>
            <size>14242</size>
            <attacher name="Hans Muller">giles_joplin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBhZjhiOThlLi4xNDM3ZTZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYg
QEAKKzIwMTMtMDktMDQgIEhhbnMgTXVsbGVyICA8aG11bGxlckBhZG9iZS5jb20+CisKKyAgICAg
ICAgW0NTUyBTaGFwZXNdIEltcHJvdmUgdGhlIHBlcmZvcm1hbmNlIG9mIGltYWdlIHZhbHVlZCBz
aGFwZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEy
MDIxMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJl
cGxhY2VkIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBSYXN0ZXJTaGFwZUludGVydmFscyB3aXRoIG9u
ZSBiYXNlZCBvbiB0aGUKKyAgICAgICAgbmV3IFNoYXBlSW50ZXJ2YWw8aW50PiBjbGFzcy4gVGhp
cyBlbGltaW5hdGVzIHRoZSBkZXBlbmRlbmN5IHRoZSBSZWdpb24gY2xhc3MKKyAgICAgICAgYW5k
IGRlbGl2ZXJzIGEgMTBYIGxheW91dCBzcGVlZHVwIGZvciBsYXJnZSBpbWFnZSB2YWx1ZWQgc2hh
cGVzLgorCisgICAgICAgIFRoaXMgYSBqdXN0IGFuIGltcGxlbWVudGF0aW9uIHJlZmFjdG9yaW5n
LCBubyBuZXcgdGVzdHMgd2VyZSBuZWVkZWQuCisKKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVz
L1Jhc3RlclNoYXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJhc3RlclNoYXBlSW50ZXJ2YWxz
OjphcHBlbmRJbnRlcnZhbCk6IFJlbmFtZWQgdGhpcyBtZXRob2QsIGl0IHdhcyBjYWxsZWQgYWRk
SW50ZXJ2YWwoKS4KKyAgICAgICAgKFdlYkNvcmU6OnNoYXBlSW50ZXJ2YWxzQ29udGFpbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSYXN0ZXJTaGFwZUludGVydmFsczo6Y29udGFpbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmFzdGVyU2hhcGVJbnRlcnZhbHM6OmdldEludGVydmFsc0luTGluZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpjb21wYXJlWDEpOgorICAgICAgICAoV2ViQ29yZTo6UmFzdGVyU2hh
cGVJbnRlcnZhbHM6OmZpcnN0SW5jbHVkZWRJbnRlcnZhbFkpOgorICAgICAgICAoV2ViQ29yZTo6
UmFzdGVyU2hhcGVJbnRlcnZhbHM6OmdldEluY2x1ZGVkSW50ZXJ2YWxzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJhc3RlclNoYXBlSW50ZXJ2YWxzOjpnZXRFeGNsdWRlZEludGVydmFscyk6CisgICAg
ICAgIChXZWJDb3JlOjpSYXN0ZXJTaGFwZTo6Z2V0RXhjbHVkZWRJbnRlcnZhbHMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmFzdGVyU2hhcGU6OmdldEluY2x1ZGVkSW50ZXJ2YWxzKToKKyAgICAgICAg
KiByZW5kZXJpbmcvc2hhcGVzL1Jhc3RlclNoYXBlLmg6CisgICAgICAgIChXZWJDb3JlOjpSYXN0
ZXJTaGFwZUludGVydmFsczo6UmFzdGVyU2hhcGVJbnRlcnZhbHMpOiBUaGUgY29uc3RydWN0b3Ig
bm93IHRha2VzIGEgc2l6ZSBhcmd1bWVudCB3aGljaCBpcyB1c2VkIHRvIGFsbG9jYXRlIEludFNo
YXBlSW50ZXJ2YWxzIHN0b3JhZ2UuCisgICAgICAgIChXZWJDb3JlOjpSYXN0ZXJTaGFwZUludGVy
dmFsczo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSYXN0ZXJTaGFwZUludGVydmFsczo6Ym91
bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJhc3RlclNoYXBlSW50ZXJ2YWxzOjppc0VtcHR5KToK
KyAgICAgICAgKFdlYkNvcmU6OlJhc3RlclNoYXBlSW50ZXJ2YWxzOjpnZXRJbnRlcnZhbHMpOgor
ICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U2hhcGU6OmNyZWF0ZVNoYXBlKTogVXNlIGFwcGVuZEludGVydmFsKCkgaW5zdGVhZCBvZiBhZGRJ
bnRlcnZhbCgpIChzZWUgYWJvdmUpIGFuZCB0aGUgbmV3IFJhc3RlclNoYXBlSW50ZXJ2YWxzIGNv
bnN0cnVjdG9yLgorCiAyMDEzLTA5LTA0ICBTYW11ZWwgV2hpdGUgIDxzYW11ZWxfd2hpdGVAYXBw
bGUuY29tPgogCiAgICAgICAgIEFYOiB3aGVuIG5vIG90aGVyIGxhYmVsIG9uIHByb3ZpZGVkIG9u
IGZvcm0gZWxlbWVudHMsIFdlYktpdCBzaG91bGQgZmFsbCBiYWNrIHRvIHVzaW5nIEB0aXRsZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9SYXN0ZXJTaGFwZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1Jhc3RlclNoYXBlLmNwcAppbmRl
eCA0ZWI4YWViLi45Mzg4YmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c2hhcGVzL1Jhc3RlclNoYXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hh
cGVzL1Jhc3RlclNoYXBlLmNwcApAQCAtMzAsMTE1ICszMCwxMjcgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJSYXN0ZXJTaGFwZS5oIgogCi0jaW5jbHVkZSAiU2hhcGVJbnRlcnZh
bC5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotSW50UmVjdCBSYXN0ZXJTaGFwZUludGVydmFsczo6Ym91bmRzKCkgY29uc3QKK3ZvaWQgUmFz
dGVyU2hhcGVJbnRlcnZhbHM6OmFwcGVuZEludGVydmFsKGludCB5LCBpbnQgeDEsIGludCB4MikK
IHsKLSAgICBpZiAoIW1fYm91bmRzKQotICAgICAgICBtX2JvdW5kcyA9IGFkb3B0UHRyKG5ldyBJ
bnRSZWN0KG1fcmVnaW9uLmJvdW5kcygpKSk7Ci0gICAgcmV0dXJuICptX2JvdW5kczsKKyAgICBB
U1NFUlQoeSA+PSAwICYmIHkgPCBzaXplKCkgJiYgeDEgPj0gMCAmJiB4MiA+IHgxKTsKKworICAg
IGlmIChtX2JvdW5kcy53aWR0aCgpID09IC0xKQorICAgICAgICBtX2JvdW5kcyA9IEludFJlY3Qo
eDEsIHksIHgyIC0geDEsIDEpOworICAgIGVsc2UKKyAgICAgICAgbV9ib3VuZHMudW5pdGUoSW50
UmVjdCh4MSwgeSwgeDIgLSB4MSwgMSkpOworCisgICAgbV9pbnRlcnZhbExpc3RzW3ldLmFwcGVu
ZChJbnRTaGFwZUludGVydmFsKHgxLCB4MikpOwogfQogCi12b2lkIFJhc3RlclNoYXBlSW50ZXJ2
YWxzOjphZGRJbnRlcnZhbChpbnQgeSwgaW50IHgxLCBpbnQgeDIpCitzdGF0aWMgaW5saW5lIGJv
b2wgc2hhcGVJbnRlcnZhbHNDb250YWluKGNvbnN0IEludFNoYXBlSW50ZXJ2YWxzJiBpbnRlcnZh
bHMsIGNvbnN0IEludFNoYXBlSW50ZXJ2YWwmIGludGVydmFsKQogewotICAgIG1fcmVnaW9uLnVu
aXRlKFJlZ2lvbihJbnRSZWN0KHgxLCB5LCB4MiAtIHgxLCAxKSkpOwotICAgIG1fYm91bmRzLmNs
ZWFyKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGludGVydmFscy5zaXplKCk7IGkr
KykgeworICAgICAgICBpZiAoaW50ZXJ2YWxzW2ldLngxKCkgPiBpbnRlcnZhbC54MigpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoaW50ZXJ2YWxzW2ldLmNvbnRhaW5z
KGludGVydmFsKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBSYXN0ZXJTaGFwZUludGVydmFsczo6Y29udGFpbnMoY29uc3Qg
SW50UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBpZiAoIWJvdW5kcygpLmNvbnRhaW5zKHJlY3Qp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBJbnRTaGFwZUludGVydmFsJiBy
ZWN0SW50ZXJ2YWwgPSBJbnRTaGFwZUludGVydmFsKHJlY3QueCgpLCByZWN0Lm1heFgoKSk7Cisg
ICAgZm9yIChpbnQgeSA9IHJlY3QueSgpOyB5IDwgcmVjdC5tYXhZKCk7IHkrKykgeworICAgICAg
ICBpZiAoIXNoYXBlSW50ZXJ2YWxzQ29udGFpbihnZXRJbnRlcnZhbHMoeSksIHJlY3RJbnRlcnZh
bCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgUmFzdGVyU2hhcGVJbnRlcnZhbHM6OmdldEludGVydmFsc0luTGluZShpbnQg
eTEsIGludCB5MiwgSW50U2hhcGVJbnRlcnZhbHMmIHJlc3VsdCkgY29uc3QKK3sKKyAgICBmb3Ig
KGludCB5ID0geTE7IHkgPCB5MjsgIHkrKykgeworICAgICAgICBpZiAoZ2V0SW50ZXJ2YWxzKHkp
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBmb3Ig
KGludCB5ID0geTE7IHkgPCB5MjsgIHkrKykgeworICAgICAgICBjb25zdCBJbnRTaGFwZUludGVy
dmFscyYgeUludGVydmFscyA9IGdldEludGVydmFscyh5KTsKKyAgICAgICAgaWYgKHkgPiB5MSAm
JiB5SW50ZXJ2YWxzID09IGdldEludGVydmFscyh5IC0gMSkpCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZFZlY3Rvcih5SW50ZXJ2YWxzKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgY29tcGFyZVgxKGNvbnN0IEludFNoYXBl
SW50ZXJ2YWwgYSwgY29uc3QgSW50U2hhcGVJbnRlcnZhbCYgYikKK3sKKyAgICByZXR1cm4gYS54
MSgpIDwgYi54MSgpOwogfQogCiBib29sIFJhc3RlclNoYXBlSW50ZXJ2YWxzOjpmaXJzdEluY2x1
ZGVkSW50ZXJ2YWxZKGludCBtaW5ZLCBjb25zdCBJbnRTaXplJiBtaW5TaXplLCBMYXlvdXRVbml0
JiByZXN1bHQpIGNvbnN0CiB7Ci0gICAgZm9yIChpbnQgeSA9IG1pblk7IHkgPD0gYm91bmRzKCku
bWF4WSgpIC0gbWluU2l6ZS5oZWlnaHQoKTsgeSsrKSB7Ci0gICAgICAgIFJlZ2lvbiBsaW5lUmVn
aW9uKEludFJlY3QoYm91bmRzKCkueCgpLCB5LCBib3VuZHMoKS53aWR0aCgpLCBtaW5TaXplLmhl
aWdodCgpKSk7Ci0gICAgICAgIGxpbmVSZWdpb24uaW50ZXJzZWN0KG1fcmVnaW9uKTsKLSAgICAg
ICAgaWYgKGxpbmVSZWdpb24uaXNFbXB0eSgpKQorICAgIEFTU0VSVChtaW5ZID49IDAgJiYgbWlu
WSArIG1pblNpemUuaGVpZ2h0KCkgPCBzaXplKCkpOworCisgICAgZm9yIChpbnQgbGluZVkgPSBt
aW5ZOyBsaW5lWSA8PSBib3VuZHMoKS5tYXhZKCkgLSBtaW5TaXplLmhlaWdodCgpOyBsaW5lWSsr
KSB7CisgICAgICAgIEludFNoYXBlSW50ZXJ2YWxzIGxpbmVJbnRlcnZhbHM7CisgICAgICAgIGlm
ICghZ2V0SW50ZXJ2YWxzSW5MaW5lKGxpbmVZLCBsaW5lWSArIG1pblNpemUuaGVpZ2h0KCksIGxp
bmVJbnRlcnZhbHMpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgY29uc3QgVmVj
dG9yPEludFJlY3Q+JiBsaW5lUmVjdHMgPSBsaW5lUmVnaW9uLnJlY3RzKCk7Ci0gICAgICAgIEFT
U0VSVChsaW5lUmVjdHMuc2l6ZSgpID4gMCk7CisgICAgICAgIHN0ZDo6c29ydChsaW5lSW50ZXJ2
YWxzLmJlZ2luKCksIGxpbmVJbnRlcnZhbHMuZW5kKCksIGNvbXBhcmVYMSk7CiAKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpbmVSZWN0cy5zaXplKCk7IGkrKykgewotICAgICAg
ICAgICAgSW50UmVjdCByZWN0ID0gbGluZVJlY3RzW2ldOwotICAgICAgICAgICAgaWYgKHJlY3Qu
d2lkdGgoKSA+PSBtaW5TaXplLndpZHRoKCkgJiYgbGluZVJlZ2lvbi5jb250YWlucyhSZWdpb24o
SW50UmVjdChJbnRQb2ludChyZWN0LngoKSwgeSksIG1pblNpemUpKSkpIHsKLSAgICAgICAgICAg
ICAgICByZXN1bHQgPSB5OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGluZUlu
dGVydmFscy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgaW50IGxpbmVYID0gbGluZUludGVy
dmFsc1tpXS54MSgpOworICAgICAgICAgICAgaWYgKGkgPiAwICYmIGxpbmVYID09IGxpbmVJbnRl
cnZhbHNbaSAtIDFdLngxKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICBpZiAoY29udGFpbnMoSW50UmVjdChsaW5lWCwgbGluZVksIG1pblNpemUud2lkdGgoKSwgbWlu
U2l6ZS5oZWlnaHQoKSkpKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbGluZVk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQogCi1zdGF0aWMgaW5saW5lIEludFJlY3QgYWxpZ25lZFJl
Y3QoSW50UmVjdCByLCBpbnQgeTEsIGludCB5MikKLXsKLSAgICByZXR1cm4gSW50UmVjdChyLngo
KSwgeTEsIHIud2lkdGgoKSwgeTIgLSB5MSk7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lk
IFJhc3RlclNoYXBlSW50ZXJ2YWxzOjpnZXRJbmNsdWRlZEludGVydmFscyhpbnQgeTEsIGludCB5
MiwgU2VnbWVudExpc3QmIHJlc3VsdCkgY29uc3QKK3ZvaWQgUmFzdGVyU2hhcGVJbnRlcnZhbHM6
OmdldEluY2x1ZGVkSW50ZXJ2YWxzKGludCB5MSwgaW50IHkyLCBJbnRTaGFwZUludGVydmFscyYg
cmVzdWx0KSBjb25zdAogewogICAgIEFTU0VSVCh5MiA+PSB5MSk7CiAKLSAgICBJbnRSZWN0IGxp
bmVSZWN0KGJvdW5kcygpLngoKSwgeTEsIGJvdW5kcygpLndpZHRoKCksIHkyIC0geTEpOwotICAg
IFJlZ2lvbiBsaW5lUmVnaW9uKGxpbmVSZWN0KTsKLSAgICBsaW5lUmVnaW9uLmludGVyc2VjdCht
X3JlZ2lvbik7Ci0gICAgaWYgKGxpbmVSZWdpb24uaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBjb25zdCBWZWN0b3I8SW50UmVjdD4mIGxpbmVSZWN0cyA9IGxpbmVSZWdpb24ucmVj
dHMoKTsKLSAgICBBU1NFUlQobGluZVJlY3RzLnNpemUoKSA+IDApOwotCi0gICAgUmVnaW9uIHNl
Z21lbnRzUmVnaW9uKGxpbmVSZWN0KTsKLSAgICBSZWdpb24gaW50ZXJ2YWxzUmVnaW9uOwotCi0g
ICAgLy8gVGhlIGxvb3AgYmVsb3cgdXNlcyBSZWdpb25zIHRvIGNvbXB1dGUgdGhlIGludGVyc2Vj
dGlvbiBvZiB0aGUgaG9yaXpvbnRhbAotICAgIC8vIHNoYXBlIGludGVydmFscyB0aGF0IGZhbGwg
d2l0aGluIHRoZSBsaW5lJ3MgYm94LgotICAgIGludCBjdXJyZW50TGluZVkgPSBsaW5lUmVjdHNb
MF0ueSgpOwotICAgIGludCBjdXJyZW50TGluZU1heFkgPSBsaW5lUmVjdHNbMF0ubWF4WSgpOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaW5lUmVjdHMuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgaW50IGxpbmVZID0gbGluZVJlY3RzW2ldLnkoKTsKLSAgICAgICAgQVNTRVJUKGxpbmVZ
ID49IGN1cnJlbnRMaW5lWSk7Ci0gICAgICAgIGlmIChsaW5lWSA+IGN1cnJlbnRMaW5lTWF4WSkg
ewotICAgICAgICAgICAgLy8gV2UndmUgZW5jb3VudGVyZWQgYSB2ZXJ0aWNhbCBnYXAgaW4gbGlu
ZVJlY3RzLCB0aGVyZSBhcmUgbm8gaW5jbHVkZWQgaW50ZXJ2YWxzLgorICAgIGZvciAoaW50IHkg
PSB5MTsgeSA8IHkyOyAgeSsrKSB7CisgICAgICAgIGlmIChnZXRJbnRlcnZhbHMoeSkuaXNFbXB0
eSgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChsaW5lWSA+
IGN1cnJlbnRMaW5lWSkgewotICAgICAgICAgICAgY3VycmVudExpbmVZID0gbGluZVk7Ci0gICAg
ICAgICAgICBjdXJyZW50TGluZU1heFkgPSBsaW5lUmVjdHNbaV0ubWF4WSgpOwotICAgICAgICAg
ICAgc2VnbWVudHNSZWdpb24uaW50ZXJzZWN0KGludGVydmFsc1JlZ2lvbik7Ci0gICAgICAgICAg
ICBpbnRlcnZhbHNSZWdpb24gPSBSZWdpb24oKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBjdXJyZW50TGluZU1heFkgPSBzdGQ6Om1heDxpbnQ+KGN1cnJlbnRMaW5lTWF4WSwgbGluZVJl
Y3RzW2ldLm1heFkoKSk7Ci0gICAgICAgIGludGVydmFsc1JlZ2lvbi51bml0ZShSZWdpb24oYWxp
Z25lZFJlY3QobGluZVJlY3RzW2ldLCB5MSwgeTIpKSk7CiAgICAgfQotICAgIGlmICghaW50ZXJ2
YWxzUmVnaW9uLmlzRW1wdHkoKSkKLSAgICAgICAgc2VnbWVudHNSZWdpb24uaW50ZXJzZWN0KGlu
dGVydmFsc1JlZ2lvbik7CiAKLSAgICBjb25zdCBWZWN0b3I8SW50UmVjdD4mIHNlZ21lbnRSZWN0
cyA9IHNlZ21lbnRzUmVnaW9uLnJlY3RzKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNlZ21lbnRSZWN0cy5zaXplKCk7ICsraSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZChMaW5lU2Vn
bWVudChzZWdtZW50UmVjdHNbaV0ueCgpLCBzZWdtZW50UmVjdHNbaV0ubWF4WCgpKSk7CisgICAg
cmVzdWx0ID0gZ2V0SW50ZXJ2YWxzKHkxKTsKKyAgICBmb3IgKGludCB5ID0geTEgKyAxOyB5IDwg
eTI7ICB5KyspIHsKKyAgICAgICAgSW50U2hhcGVJbnRlcnZhbHMgaW50ZXJ2YWxzOworICAgICAg
ICBJbnRTaGFwZUludGVydmFsOjppbnRlcnNlY3RTaGFwZUludGVydmFscyhyZXN1bHQsIGdldElu
dGVydmFscyh5KSwgaW50ZXJ2YWxzKTsKKyAgICAgICAgcmVzdWx0ID0gaW50ZXJ2YWxzOworICAg
IH0KIH0KIAotdm9pZCBSYXN0ZXJTaGFwZUludGVydmFsczo6Z2V0RXhjbHVkZWRJbnRlcnZhbHMo
aW50IHkxLCBpbnQgeTIsIFNlZ21lbnRMaXN0JiByZXN1bHQpIGNvbnN0Cit2b2lkIFJhc3RlclNo
YXBlSW50ZXJ2YWxzOjpnZXRFeGNsdWRlZEludGVydmFscyhpbnQgeTEsIGludCB5MiwgSW50U2hh
cGVJbnRlcnZhbHMmIHJlc3VsdCkgY29uc3QKIHsKICAgICBBU1NFUlQoeTIgPj0geTEpOwogCi0g
ICAgSW50UmVjdCBsaW5lUmVjdChib3VuZHMoKS54KCksIHkxLCBib3VuZHMoKS53aWR0aCgpLCB5
MiAtIHkxKTsKLSAgICBSZWdpb24gbGluZVJlZ2lvbihsaW5lUmVjdCk7Ci0gICAgbGluZVJlZ2lv
bi5pbnRlcnNlY3QobV9yZWdpb24pOwotICAgIGlmIChsaW5lUmVnaW9uLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgVmVjdG9yPEludFJlY3Q+JiBsaW5lUmVjdHMgPSBs
aW5lUmVnaW9uLnJlY3RzKCk7Ci0gICAgQVNTRVJUKGxpbmVSZWN0cy5zaXplKCkgPiAwKTsKLQot
ICAgIFJlZ2lvbiBzZWdtZW50c1JlZ2lvbjsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGluZVJlY3RzLnNpemUoKTsgaSsrKQotICAgICAgICBzZWdtZW50c1JlZ2lvbi51bml0ZShSZWdp
b24oYWxpZ25lZFJlY3QobGluZVJlY3RzW2ldLCB5MSwgeTIpKSk7CisgICAgZm9yIChpbnQgeSA9
IHkxOyB5IDwgeTI7ICB5KyspIHsKKyAgICAgICAgaWYgKGdldEludGVydmFscyh5KS5pc0VtcHR5
KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgY29uc3QgVmVjdG9yPEludFJl
Y3Q+JiBzZWdtZW50UmVjdHMgPSBzZWdtZW50c1JlZ2lvbi5yZWN0cygpOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzZWdtZW50UmVjdHMuc2l6ZSgpOyBpKyspCi0gICAgICAgIHJlc3Vs
dC5hcHBlbmQoTGluZVNlZ21lbnQoc2VnbWVudFJlY3RzW2ldLngoKSwgc2VnbWVudFJlY3RzW2ld
Lm1heFgoKSArIDEpKTsKKyAgICByZXN1bHQgPSBnZXRJbnRlcnZhbHMoeTEpOworICAgIGZvciAo
aW50IHkgPSB5MSArIDE7IHkgPCB5MjsgIHkrKykgeworICAgICAgICBJbnRTaGFwZUludGVydmFs
cyBpbnRlcnZhbHM7CisgICAgICAgIEludFNoYXBlSW50ZXJ2YWw6OnVuaXRlU2hhcGVJbnRlcnZh
bHMocmVzdWx0LCBnZXRJbnRlcnZhbHMoeSksIGludGVydmFscyk7CisgICAgICAgIHJlc3VsdCA9
IGludGVydmFsczsKKyAgICB9CiB9CiAKIGNvbnN0IFJhc3RlclNoYXBlSW50ZXJ2YWxzJiBSYXN0
ZXJTaGFwZTo6bWFyZ2luSW50ZXJ2YWxzKCkgY29uc3QKQEAgLTE3Myw3ICsxODUsMTEgQEAgdm9p
ZCBSYXN0ZXJTaGFwZTo6Z2V0RXhjbHVkZWRJbnRlcnZhbHMoTGF5b3V0VW5pdCBsb2dpY2FsVG9w
LCBMYXlvdXRVbml0IGxvZ2ljYWwKICAgICBpZiAoeTIgPCBpbnRlcnZhbHMuYm91bmRzKCkueSgp
IHx8IHkxID49IGludGVydmFscy5ib3VuZHMoKS5tYXhZKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGludGVydmFscy5nZXRFeGNsdWRlZEludGVydmFscyh5MSwgeTIsIHJlc3VsdCk7CisgICAg
SW50U2hhcGVJbnRlcnZhbHMgZXhjbHVkZWRJbnRlcnZhbHM7CisgICAgaW50ZXJ2YWxzLmdldEV4
Y2x1ZGVkSW50ZXJ2YWxzKHkxLCB5MiwgZXhjbHVkZWRJbnRlcnZhbHMpOworCisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGV4Y2x1ZGVkSW50ZXJ2YWxzLnNpemUoKTsgKytpKQorICAgICAg
ICByZXN1bHQuYXBwZW5kKExpbmVTZWdtZW50KGV4Y2x1ZGVkSW50ZXJ2YWxzW2ldLngxKCksIGV4
Y2x1ZGVkSW50ZXJ2YWxzW2ldLngyKCkgKyAxKSk7CiB9CiAKIHZvaWQgUmFzdGVyU2hhcGU6Omdl
dEluY2x1ZGVkSW50ZXJ2YWxzKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dp
Y2FsSGVpZ2h0LCBTZWdtZW50TGlzdCYgcmVzdWx0KSBjb25zdApAQCAtMTg4LDcgKzIwNCwxMiBA
QCB2b2lkIFJhc3RlclNoYXBlOjpnZXRJbmNsdWRlZEludGVydmFscyhMYXlvdXRVbml0IGxvZ2lj
YWxUb3AsIExheW91dFVuaXQgbG9naWNhbAogICAgIGlmICh5MSA8IGludGVydmFscy5ib3VuZHMo
KS55KCkgfHwgeTIgPiBpbnRlcnZhbHMuYm91bmRzKCkubWF4WSgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBpbnRlcnZhbHMuZ2V0SW5jbHVkZWRJbnRlcnZhbHMoeTEsIHkyLCByZXN1bHQpOwor
ICAgIEludFNoYXBlSW50ZXJ2YWxzIGluY2x1ZGVkSW50ZXJ2YWxzOworICAgIGludGVydmFscy5n
ZXRJbmNsdWRlZEludGVydmFscyh5MSwgeTIsIGluY2x1ZGVkSW50ZXJ2YWxzKTsKKworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbmNsdWRlZEludGVydmFscy5zaXplKCk7ICsraSkKKyAg
ICAgICAgcmVzdWx0LmFwcGVuZChMaW5lU2VnbWVudChpbmNsdWRlZEludGVydmFsc1tpXS54MSgp
LCBpbmNsdWRlZEludGVydmFsc1tpXS54MigpICsgMSkpOworCiB9CiAKIGJvb2wgUmFzdGVyU2hh
cGU6OmZpcnN0SW5jbHVkZWRJbnRlcnZhbExvZ2ljYWxUb3AoTGF5b3V0VW5pdCBtaW5Mb2dpY2Fs
SW50ZXJ2YWxUb3AsIGNvbnN0IExheW91dFNpemUmIG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUsIExh
eW91dFVuaXQmIHJlc3VsdCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zaGFwZXMvUmFzdGVyU2hhcGUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFw
ZXMvUmFzdGVyU2hhcGUuaAppbmRleCA5NDcyZTBjLi41NGJhMjA2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1Jhc3RlclNoYXBlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9SYXN0ZXJTaGFwZS5oCkBAIC0zMSw4ICszMSw4IEBACiAj
ZGVmaW5lIFJhc3RlclNoYXBlX2gKIAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUg
IlJlZ2lvbi5oIgogI2luY2x1ZGUgIlNoYXBlLmgiCisjaW5jbHVkZSAiU2hhcGVJbnRlcnZhbC5o
IgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
CkBAIC00MCwxOCArNDAsMzIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBSYXN0ZXJT
aGFwZUludGVydmFscyB7CiBwdWJsaWM6Ci0gICAgUmFzdGVyU2hhcGVJbnRlcnZhbHMoKSB7IH0K
KyAgICBSYXN0ZXJTaGFwZUludGVydmFscyh1bnNpZ25lZCBzaXplKQorICAgICAgICA6IG1fYm91
bmRzKC0xLCAtMSwgLTEsIC0xKQorICAgIHsKKyAgICAgICAgbV9pbnRlcnZhbExpc3RzLnJlc2l6
ZShzaXplKTsKKyAgICB9CisKKyAgICBpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW50ZXJ2
YWxMaXN0cy5zaXplKCk7IH0KKyAgICBjb25zdCBJbnRSZWN0JiBib3VuZHMoKSBjb25zdCB7IHJl
dHVybiBtX2JvdW5kczsgfQorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fYm91
bmRzLmlzRW1wdHkoKTsgfQorICAgIHZvaWQgYXBwZW5kSW50ZXJ2YWwoaW50IHksIGludCB4MSwg
aW50IHgyKTsKKyAgICBib29sIGNvbnRhaW5zKGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICBi
b29sIGdldEludGVydmFsc0luTGluZShpbnQgbWluWSwgaW50IG1heFksIEludFNoYXBlSW50ZXJ2
YWxzJiByZXN1bHQpIGNvbnN0OworCisgICAgY29uc3QgSW50U2hhcGVJbnRlcnZhbHMmIGdldElu
dGVydmFscyhpbnQgeSkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCh5ID49IDAgJiYgeSA8
IHNpemUoKSk7CisgICAgICAgIHJldHVybiBtX2ludGVydmFsTGlzdHNbeV07CisgICAgfQogCi0g
ICAgSW50UmVjdCBib3VuZHMoKSBjb25zdDsKLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCAgeyBy
ZXR1cm4gbV9yZWdpb24uaXNFbXB0eSgpOyB9Ci0gICAgdm9pZCBhZGRJbnRlcnZhbChpbnQgeSwg
aW50IHgxLCBpbnQgeDIpOwotICAgIHZvaWQgZ2V0SW5jbHVkZWRJbnRlcnZhbHMoaW50IHkxLCBp
bnQgeTIsIFNlZ21lbnRMaXN0JikgY29uc3Q7Ci0gICAgdm9pZCBnZXRFeGNsdWRlZEludGVydmFs
cyhpbnQgeTEsIGludCB5MiwgU2VnbWVudExpc3QmKSBjb25zdDsKLSAgICBib29sIGZpcnN0SW5j
bHVkZWRJbnRlcnZhbFkoaW50IG1pblksIGNvbnN0IEludFNpemUmIG1pbkludGVydmFsU2l6ZSwg
TGF5b3V0VW5pdCYpIGNvbnN0OworICAgIHZvaWQgZ2V0SW5jbHVkZWRJbnRlcnZhbHMoaW50IHkx
LCBpbnQgeTIsIEludFNoYXBlSW50ZXJ2YWxzJiByZXN1bHQpIGNvbnN0OworICAgIHZvaWQgZ2V0
RXhjbHVkZWRJbnRlcnZhbHMoaW50IHkxLCBpbnQgeTIsIEludFNoYXBlSW50ZXJ2YWxzJiByZXN1
bHQpIGNvbnN0OworICAgIGJvb2wgZmlyc3RJbmNsdWRlZEludGVydmFsWShpbnQgbWluWSwgY29u
c3QgSW50U2l6ZSYgbWluU2l6ZSwgTGF5b3V0VW5pdCYgcmVzdWx0KSBjb25zdDsKIAogcHJpdmF0
ZToKLSAgICBSZWdpb24gbV9yZWdpb247Ci0gICAgbXV0YWJsZSBPd25QdHI8SW50UmVjdD4gbV9i
b3VuZHM7IC8vIENhY2hlZCB2YWx1ZSBvZiBtX3JlZ2lvbi5ib3VuZHMoKS4KKyAgICBJbnRSZWN0
IG1fYm91bmRzOworICAgIFZlY3RvcjxJbnRTaGFwZUludGVydmFscyA+IG1faW50ZXJ2YWxMaXN0
czsKIH07CiAKIGNsYXNzIFJhc3RlclNoYXBlIDogcHVibGljIFNoYXBlIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAKaW5kZXggYjNiOWQ2ZC4uZDA0ZTgwYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAKQEAgLTIwNywxMCArMjA3
LDExIEBAIFBhc3NPd25QdHI8U2hhcGU+IFNoYXBlOjpjcmVhdGVTaGFwZShjb25zdCBTdHlsZUlt
YWdlKiBzdHlsZUltYWdlLCBmbG9hdCB0aHJlc2hvCiB7CiAgICAgQVNTRVJUKHN0eWxlSW1hZ2Ug
JiYgc3R5bGVJbWFnZS0+aXNDYWNoZWRJbWFnZSgpICYmIHN0eWxlSW1hZ2UtPmNhY2hlZEltYWdl
KCkgJiYgc3R5bGVJbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2UoKSk7CiAKLSAgICBPd25QdHI8
UmFzdGVyU2hhcGVJbnRlcnZhbHM+IGludGVydmFscyA9IGFkb3B0UHRyKG5ldyBSYXN0ZXJTaGFw
ZUludGVydmFscygpKTsKLQogICAgIEltYWdlKiBpbWFnZSA9IHN0eWxlSW1hZ2UtPmNhY2hlZElt
YWdlKCktPmltYWdlKCk7CiAgICAgY29uc3QgSW50U2l6ZSYgaW1hZ2VTaXplID0gaW1hZ2UtPnNp
emUoKTsKKworICAgIE93blB0cjxSYXN0ZXJTaGFwZUludGVydmFscz4gaW50ZXJ2YWxzID0gYWRv
cHRQdHIobmV3IFJhc3RlclNoYXBlSW50ZXJ2YWxzKGltYWdlU2l6ZS5oZWlnaHQoKSkpOworCiAg
ICAgT3duUHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
aW1hZ2VTaXplKTsKICAgICBpZiAoaW1hZ2VCdWZmZXIpIHsKICAgICAgICAgR3JhcGhpY3NDb250
ZXh0KiBncmFwaGljc0NvbnRleHQgPSBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpOwpAQCAtMjMwLDcg
KzIzMSw3IEBAIFBhc3NPd25QdHI8U2hhcGU+IFNoYXBlOjpjcmVhdGVTaGFwZShjb25zdCBTdHls
ZUltYWdlKiBzdHlsZUltYWdlLCBmbG9hdCB0aHJlc2hvCiAgICAgICAgICAgICAgICAgICAgIGlm
IChzdGFydFggPT0gLTEgJiYgYWxwaGFBYm92ZVRocmVzaG9sZCkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhcnRYID0geDsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFy
dFggIT0gLTEgJiYgKCFhbHBoYUFib3ZlVGhyZXNob2xkIHx8IHggPT0gaW1hZ2VTaXplLndpZHRo
KCkgLSAxKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJ2YWxzLT5hZGRJbnRlcnZh
bCh5LCBzdGFydFgsIHgpOworICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJ2YWxzLT5hcHBl
bmRJbnRlcnZhbCh5LCBzdGFydFgsIHgpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRY
ID0gLTE7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>210635</attachid>
            <date>2013-09-05 10:39:34 -0700</date>
            <delta_ts>2013-09-05 13:05:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>tmp.patch</filename>
            <type>text/plain</type>
            <size>16384</size>
            <attacher name="Hans Muller">giles_joplin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBhZjhiOThlLi4xNDM3ZTZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYg
QEAKKzIwMTMtMDktMDQgIEhhbnMgTXVsbGVyICA8aG11bGxlckBhZG9iZS5jb20+CisKKyAgICAg
ICAgW0NTUyBTaGFwZXNdIEltcHJvdmUgdGhlIHBlcmZvcm1hbmNlIG9mIGltYWdlIHZhbHVlZCBz
aGFwZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEy
MDIxMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJl
cGxhY2VkIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBSYXN0ZXJTaGFwZUludGVydmFscyB3aXRoIG9u
ZSBiYXNlZCBvbiB0aGUKKyAgICAgICAgbmV3IFNoYXBlSW50ZXJ2YWw8aW50PiBjbGFzcy4gVGhp
cyBlbGltaW5hdGVzIHRoZSBkZXBlbmRlbmN5IHRoZSBSZWdpb24gY2xhc3MKKyAgICAgICAgYW5k
IGRlbGl2ZXJzIGEgMTBYIGxheW91dCBzcGVlZHVwIGZvciBsYXJnZSBpbWFnZSB2YWx1ZWQgc2hh
cGVzLgorCisgICAgICAgIFRoaXMgYSBqdXN0IGFuIGltcGxlbWVudGF0aW9uIHJlZmFjdG9yaW5n
LCBubyBuZXcgdGVzdHMgd2VyZSBuZWVkZWQuCisKKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVz
L1Jhc3RlclNoYXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJhc3RlclNoYXBlSW50ZXJ2YWxz
OjphcHBlbmRJbnRlcnZhbCk6IFJlbmFtZWQgdGhpcyBtZXRob2QsIGl0IHdhcyBjYWxsZWQgYWRk
SW50ZXJ2YWwoKS4KKyAgICAgICAgKFdlYkNvcmU6OnNoYXBlSW50ZXJ2YWxzQ29udGFpbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSYXN0ZXJTaGFwZUludGVydmFsczo6Y29udGFpbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmFzdGVyU2hhcGVJbnRlcnZhbHM6OmdldEludGVydmFsc0luTGluZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpjb21wYXJlWDEpOgorICAgICAgICAoV2ViQ29yZTo6UmFzdGVyU2hh
cGVJbnRlcnZhbHM6OmZpcnN0SW5jbHVkZWRJbnRlcnZhbFkpOgorICAgICAgICAoV2ViQ29yZTo6
UmFzdGVyU2hhcGVJbnRlcnZhbHM6OmdldEluY2x1ZGVkSW50ZXJ2YWxzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJhc3RlclNoYXBlSW50ZXJ2YWxzOjpnZXRFeGNsdWRlZEludGVydmFscyk6CisgICAg
ICAgIChXZWJDb3JlOjpSYXN0ZXJTaGFwZTo6Z2V0RXhjbHVkZWRJbnRlcnZhbHMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmFzdGVyU2hhcGU6OmdldEluY2x1ZGVkSW50ZXJ2YWxzKToKKyAgICAgICAg
KiByZW5kZXJpbmcvc2hhcGVzL1Jhc3RlclNoYXBlLmg6CisgICAgICAgIChXZWJDb3JlOjpSYXN0
ZXJTaGFwZUludGVydmFsczo6UmFzdGVyU2hhcGVJbnRlcnZhbHMpOiBUaGUgY29uc3RydWN0b3Ig
bm93IHRha2VzIGEgc2l6ZSBhcmd1bWVudCB3aGljaCBpcyB1c2VkIHRvIGFsbG9jYXRlIEludFNo
YXBlSW50ZXJ2YWxzIHN0b3JhZ2UuCisgICAgICAgIChXZWJDb3JlOjpSYXN0ZXJTaGFwZUludGVy
dmFsczo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSYXN0ZXJTaGFwZUludGVydmFsczo6Ym91
bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJhc3RlclNoYXBlSW50ZXJ2YWxzOjppc0VtcHR5KToK
KyAgICAgICAgKFdlYkNvcmU6OlJhc3RlclNoYXBlSW50ZXJ2YWxzOjpnZXRJbnRlcnZhbHMpOgor
ICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U2hhcGU6OmNyZWF0ZVNoYXBlKTogVXNlIGFwcGVuZEludGVydmFsKCkgaW5zdGVhZCBvZiBhZGRJ
bnRlcnZhbCgpIChzZWUgYWJvdmUpIGFuZCB0aGUgbmV3IFJhc3RlclNoYXBlSW50ZXJ2YWxzIGNv
bnN0cnVjdG9yLgorCiAyMDEzLTA5LTA0ICBTYW11ZWwgV2hpdGUgIDxzYW11ZWxfd2hpdGVAYXBw
bGUuY29tPgogCiAgICAgICAgIEFYOiB3aGVuIG5vIG90aGVyIGxhYmVsIG9uIHByb3ZpZGVkIG9u
IGZvcm0gZWxlbWVudHMsIFdlYktpdCBzaG91bGQgZmFsbCBiYWNrIHRvIHVzaW5nIEB0aXRsZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9SYXN0ZXJTaGFwZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1Jhc3RlclNoYXBlLmNwcAppbmRl
eCA0ZWI4YWViLi45Mzg4YmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c2hhcGVzL1Jhc3RlclNoYXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hh
cGVzL1Jhc3RlclNoYXBlLmNwcApAQCAtMzAsMTE1ICszMCwxMjcgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJSYXN0ZXJTaGFwZS5oIgogCi0jaW5jbHVkZSAiU2hhcGVJbnRlcnZh
bC5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotSW50UmVjdCBSYXN0ZXJTaGFwZUludGVydmFsczo6Ym91bmRzKCkgY29uc3QKK3ZvaWQgUmFz
dGVyU2hhcGVJbnRlcnZhbHM6OmFwcGVuZEludGVydmFsKGludCB5LCBpbnQgeDEsIGludCB4MikK
IHsKLSAgICBpZiAoIW1fYm91bmRzKQotICAgICAgICBtX2JvdW5kcyA9IGFkb3B0UHRyKG5ldyBJ
bnRSZWN0KG1fcmVnaW9uLmJvdW5kcygpKSk7Ci0gICAgcmV0dXJuICptX2JvdW5kczsKKyAgICBB
U1NFUlQoeSA+PSAwICYmIHkgPCBzaXplKCkgJiYgeDEgPj0gMCAmJiB4MiA+IHgxKTsKKworICAg
IGlmIChtX2JvdW5kcy53aWR0aCgpID09IC0xKQorICAgICAgICBtX2JvdW5kcyA9IEludFJlY3Qo
eDEsIHksIHgyIC0geDEsIDEpOworICAgIGVsc2UKKyAgICAgICAgbV9ib3VuZHMudW5pdGUoSW50
UmVjdCh4MSwgeSwgeDIgLSB4MSwgMSkpOworCisgICAgbV9pbnRlcnZhbExpc3RzW3ldLmFwcGVu
ZChJbnRTaGFwZUludGVydmFsKHgxLCB4MikpOwogfQogCi12b2lkIFJhc3RlclNoYXBlSW50ZXJ2
YWxzOjphZGRJbnRlcnZhbChpbnQgeSwgaW50IHgxLCBpbnQgeDIpCitzdGF0aWMgaW5saW5lIGJv
b2wgc2hhcGVJbnRlcnZhbHNDb250YWluKGNvbnN0IEludFNoYXBlSW50ZXJ2YWxzJiBpbnRlcnZh
bHMsIGNvbnN0IEludFNoYXBlSW50ZXJ2YWwmIGludGVydmFsKQogewotICAgIG1fcmVnaW9uLnVu
aXRlKFJlZ2lvbihJbnRSZWN0KHgxLCB5LCB4MiAtIHgxLCAxKSkpOwotICAgIG1fYm91bmRzLmNs
ZWFyKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGludGVydmFscy5zaXplKCk7IGkr
KykgeworICAgICAgICBpZiAoaW50ZXJ2YWxzW2ldLngxKCkgPiBpbnRlcnZhbC54MigpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoaW50ZXJ2YWxzW2ldLmNvbnRhaW5z
KGludGVydmFsKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBSYXN0ZXJTaGFwZUludGVydmFsczo6Y29udGFpbnMoY29uc3Qg
SW50UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBpZiAoIWJvdW5kcygpLmNvbnRhaW5zKHJlY3Qp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBJbnRTaGFwZUludGVydmFsJiBy
ZWN0SW50ZXJ2YWwgPSBJbnRTaGFwZUludGVydmFsKHJlY3QueCgpLCByZWN0Lm1heFgoKSk7Cisg
ICAgZm9yIChpbnQgeSA9IHJlY3QueSgpOyB5IDwgcmVjdC5tYXhZKCk7IHkrKykgeworICAgICAg
ICBpZiAoIXNoYXBlSW50ZXJ2YWxzQ29udGFpbihnZXRJbnRlcnZhbHMoeSksIHJlY3RJbnRlcnZh
bCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgUmFzdGVyU2hhcGVJbnRlcnZhbHM6OmdldEludGVydmFsc0luTGluZShpbnQg
eTEsIGludCB5MiwgSW50U2hhcGVJbnRlcnZhbHMmIHJlc3VsdCkgY29uc3QKK3sKKyAgICBmb3Ig
KGludCB5ID0geTE7IHkgPCB5MjsgIHkrKykgeworICAgICAgICBpZiAoZ2V0SW50ZXJ2YWxzKHkp
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBmb3Ig
KGludCB5ID0geTE7IHkgPCB5MjsgIHkrKykgeworICAgICAgICBjb25zdCBJbnRTaGFwZUludGVy
dmFscyYgeUludGVydmFscyA9IGdldEludGVydmFscyh5KTsKKyAgICAgICAgaWYgKHkgPiB5MSAm
JiB5SW50ZXJ2YWxzID09IGdldEludGVydmFscyh5IC0gMSkpCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZFZlY3Rvcih5SW50ZXJ2YWxzKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgY29tcGFyZVgxKGNvbnN0IEludFNoYXBl
SW50ZXJ2YWwgYSwgY29uc3QgSW50U2hhcGVJbnRlcnZhbCYgYikKK3sKKyAgICByZXR1cm4gYS54
MSgpIDwgYi54MSgpOwogfQogCiBib29sIFJhc3RlclNoYXBlSW50ZXJ2YWxzOjpmaXJzdEluY2x1
ZGVkSW50ZXJ2YWxZKGludCBtaW5ZLCBjb25zdCBJbnRTaXplJiBtaW5TaXplLCBMYXlvdXRVbml0
JiByZXN1bHQpIGNvbnN0CiB7Ci0gICAgZm9yIChpbnQgeSA9IG1pblk7IHkgPD0gYm91bmRzKCku
bWF4WSgpIC0gbWluU2l6ZS5oZWlnaHQoKTsgeSsrKSB7Ci0gICAgICAgIFJlZ2lvbiBsaW5lUmVn
aW9uKEludFJlY3QoYm91bmRzKCkueCgpLCB5LCBib3VuZHMoKS53aWR0aCgpLCBtaW5TaXplLmhl
aWdodCgpKSk7Ci0gICAgICAgIGxpbmVSZWdpb24uaW50ZXJzZWN0KG1fcmVnaW9uKTsKLSAgICAg
ICAgaWYgKGxpbmVSZWdpb24uaXNFbXB0eSgpKQorICAgIEFTU0VSVChtaW5ZID49IDAgJiYgbWlu
WSArIG1pblNpemUuaGVpZ2h0KCkgPCBzaXplKCkpOworCisgICAgZm9yIChpbnQgbGluZVkgPSBt
aW5ZOyBsaW5lWSA8PSBib3VuZHMoKS5tYXhZKCkgLSBtaW5TaXplLmhlaWdodCgpOyBsaW5lWSsr
KSB7CisgICAgICAgIEludFNoYXBlSW50ZXJ2YWxzIGxpbmVJbnRlcnZhbHM7CisgICAgICAgIGlm
ICghZ2V0SW50ZXJ2YWxzSW5MaW5lKGxpbmVZLCBsaW5lWSArIG1pblNpemUuaGVpZ2h0KCksIGxp
bmVJbnRlcnZhbHMpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgY29uc3QgVmVj
dG9yPEludFJlY3Q+JiBsaW5lUmVjdHMgPSBsaW5lUmVnaW9uLnJlY3RzKCk7Ci0gICAgICAgIEFT
U0VSVChsaW5lUmVjdHMuc2l6ZSgpID4gMCk7CisgICAgICAgIHN0ZDo6c29ydChsaW5lSW50ZXJ2
YWxzLmJlZ2luKCksIGxpbmVJbnRlcnZhbHMuZW5kKCksIGNvbXBhcmVYMSk7CiAKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpbmVSZWN0cy5zaXplKCk7IGkrKykgewotICAgICAg
ICAgICAgSW50UmVjdCByZWN0ID0gbGluZVJlY3RzW2ldOwotICAgICAgICAgICAgaWYgKHJlY3Qu
d2lkdGgoKSA+PSBtaW5TaXplLndpZHRoKCkgJiYgbGluZVJlZ2lvbi5jb250YWlucyhSZWdpb24o
SW50UmVjdChJbnRQb2ludChyZWN0LngoKSwgeSksIG1pblNpemUpKSkpIHsKLSAgICAgICAgICAg
ICAgICByZXN1bHQgPSB5OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGluZUlu
dGVydmFscy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgaW50IGxpbmVYID0gbGluZUludGVy
dmFsc1tpXS54MSgpOworICAgICAgICAgICAgaWYgKGkgPiAwICYmIGxpbmVYID09IGxpbmVJbnRl
cnZhbHNbaSAtIDFdLngxKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICBpZiAoY29udGFpbnMoSW50UmVjdChsaW5lWCwgbGluZVksIG1pblNpemUud2lkdGgoKSwgbWlu
U2l6ZS5oZWlnaHQoKSkpKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbGluZVk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQogCi1zdGF0aWMgaW5saW5lIEludFJlY3QgYWxpZ25lZFJl
Y3QoSW50UmVjdCByLCBpbnQgeTEsIGludCB5MikKLXsKLSAgICByZXR1cm4gSW50UmVjdChyLngo
KSwgeTEsIHIud2lkdGgoKSwgeTIgLSB5MSk7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lk
IFJhc3RlclNoYXBlSW50ZXJ2YWxzOjpnZXRJbmNsdWRlZEludGVydmFscyhpbnQgeTEsIGludCB5
MiwgU2VnbWVudExpc3QmIHJlc3VsdCkgY29uc3QKK3ZvaWQgUmFzdGVyU2hhcGVJbnRlcnZhbHM6
OmdldEluY2x1ZGVkSW50ZXJ2YWxzKGludCB5MSwgaW50IHkyLCBJbnRTaGFwZUludGVydmFscyYg
cmVzdWx0KSBjb25zdAogewogICAgIEFTU0VSVCh5MiA+PSB5MSk7CiAKLSAgICBJbnRSZWN0IGxp
bmVSZWN0KGJvdW5kcygpLngoKSwgeTEsIGJvdW5kcygpLndpZHRoKCksIHkyIC0geTEpOwotICAg
IFJlZ2lvbiBsaW5lUmVnaW9uKGxpbmVSZWN0KTsKLSAgICBsaW5lUmVnaW9uLmludGVyc2VjdCht
X3JlZ2lvbik7Ci0gICAgaWYgKGxpbmVSZWdpb24uaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBjb25zdCBWZWN0b3I8SW50UmVjdD4mIGxpbmVSZWN0cyA9IGxpbmVSZWdpb24ucmVj
dHMoKTsKLSAgICBBU1NFUlQobGluZVJlY3RzLnNpemUoKSA+IDApOwotCi0gICAgUmVnaW9uIHNl
Z21lbnRzUmVnaW9uKGxpbmVSZWN0KTsKLSAgICBSZWdpb24gaW50ZXJ2YWxzUmVnaW9uOwotCi0g
ICAgLy8gVGhlIGxvb3AgYmVsb3cgdXNlcyBSZWdpb25zIHRvIGNvbXB1dGUgdGhlIGludGVyc2Vj
dGlvbiBvZiB0aGUgaG9yaXpvbnRhbAotICAgIC8vIHNoYXBlIGludGVydmFscyB0aGF0IGZhbGwg
d2l0aGluIHRoZSBsaW5lJ3MgYm94LgotICAgIGludCBjdXJyZW50TGluZVkgPSBsaW5lUmVjdHNb
MF0ueSgpOwotICAgIGludCBjdXJyZW50TGluZU1heFkgPSBsaW5lUmVjdHNbMF0ubWF4WSgpOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaW5lUmVjdHMuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgaW50IGxpbmVZID0gbGluZVJlY3RzW2ldLnkoKTsKLSAgICAgICAgQVNTRVJUKGxpbmVZ
ID49IGN1cnJlbnRMaW5lWSk7Ci0gICAgICAgIGlmIChsaW5lWSA+IGN1cnJlbnRMaW5lTWF4WSkg
ewotICAgICAgICAgICAgLy8gV2UndmUgZW5jb3VudGVyZWQgYSB2ZXJ0aWNhbCBnYXAgaW4gbGlu
ZVJlY3RzLCB0aGVyZSBhcmUgbm8gaW5jbHVkZWQgaW50ZXJ2YWxzLgorICAgIGZvciAoaW50IHkg
PSB5MTsgeSA8IHkyOyAgeSsrKSB7CisgICAgICAgIGlmIChnZXRJbnRlcnZhbHMoeSkuaXNFbXB0
eSgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChsaW5lWSA+
IGN1cnJlbnRMaW5lWSkgewotICAgICAgICAgICAgY3VycmVudExpbmVZID0gbGluZVk7Ci0gICAg
ICAgICAgICBjdXJyZW50TGluZU1heFkgPSBsaW5lUmVjdHNbaV0ubWF4WSgpOwotICAgICAgICAg
ICAgc2VnbWVudHNSZWdpb24uaW50ZXJzZWN0KGludGVydmFsc1JlZ2lvbik7Ci0gICAgICAgICAg
ICBpbnRlcnZhbHNSZWdpb24gPSBSZWdpb24oKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBjdXJyZW50TGluZU1heFkgPSBzdGQ6Om1heDxpbnQ+KGN1cnJlbnRMaW5lTWF4WSwgbGluZVJl
Y3RzW2ldLm1heFkoKSk7Ci0gICAgICAgIGludGVydmFsc1JlZ2lvbi51bml0ZShSZWdpb24oYWxp
Z25lZFJlY3QobGluZVJlY3RzW2ldLCB5MSwgeTIpKSk7CiAgICAgfQotICAgIGlmICghaW50ZXJ2
YWxzUmVnaW9uLmlzRW1wdHkoKSkKLSAgICAgICAgc2VnbWVudHNSZWdpb24uaW50ZXJzZWN0KGlu
dGVydmFsc1JlZ2lvbik7CiAKLSAgICBjb25zdCBWZWN0b3I8SW50UmVjdD4mIHNlZ21lbnRSZWN0
cyA9IHNlZ21lbnRzUmVnaW9uLnJlY3RzKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNlZ21lbnRSZWN0cy5zaXplKCk7ICsraSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZChMaW5lU2Vn
bWVudChzZWdtZW50UmVjdHNbaV0ueCgpLCBzZWdtZW50UmVjdHNbaV0ubWF4WCgpKSk7CisgICAg
cmVzdWx0ID0gZ2V0SW50ZXJ2YWxzKHkxKTsKKyAgICBmb3IgKGludCB5ID0geTEgKyAxOyB5IDwg
eTI7ICB5KyspIHsKKyAgICAgICAgSW50U2hhcGVJbnRlcnZhbHMgaW50ZXJ2YWxzOworICAgICAg
ICBJbnRTaGFwZUludGVydmFsOjppbnRlcnNlY3RTaGFwZUludGVydmFscyhyZXN1bHQsIGdldElu
dGVydmFscyh5KSwgaW50ZXJ2YWxzKTsKKyAgICAgICAgcmVzdWx0ID0gaW50ZXJ2YWxzOworICAg
IH0KIH0KIAotdm9pZCBSYXN0ZXJTaGFwZUludGVydmFsczo6Z2V0RXhjbHVkZWRJbnRlcnZhbHMo
aW50IHkxLCBpbnQgeTIsIFNlZ21lbnRMaXN0JiByZXN1bHQpIGNvbnN0Cit2b2lkIFJhc3RlclNo
YXBlSW50ZXJ2YWxzOjpnZXRFeGNsdWRlZEludGVydmFscyhpbnQgeTEsIGludCB5MiwgSW50U2hh
cGVJbnRlcnZhbHMmIHJlc3VsdCkgY29uc3QKIHsKICAgICBBU1NFUlQoeTIgPj0geTEpOwogCi0g
ICAgSW50UmVjdCBsaW5lUmVjdChib3VuZHMoKS54KCksIHkxLCBib3VuZHMoKS53aWR0aCgpLCB5
MiAtIHkxKTsKLSAgICBSZWdpb24gbGluZVJlZ2lvbihsaW5lUmVjdCk7Ci0gICAgbGluZVJlZ2lv
bi5pbnRlcnNlY3QobV9yZWdpb24pOwotICAgIGlmIChsaW5lUmVnaW9uLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgVmVjdG9yPEludFJlY3Q+JiBsaW5lUmVjdHMgPSBs
aW5lUmVnaW9uLnJlY3RzKCk7Ci0gICAgQVNTRVJUKGxpbmVSZWN0cy5zaXplKCkgPiAwKTsKLQot
ICAgIFJlZ2lvbiBzZWdtZW50c1JlZ2lvbjsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGluZVJlY3RzLnNpemUoKTsgaSsrKQotICAgICAgICBzZWdtZW50c1JlZ2lvbi51bml0ZShSZWdp
b24oYWxpZ25lZFJlY3QobGluZVJlY3RzW2ldLCB5MSwgeTIpKSk7CisgICAgZm9yIChpbnQgeSA9
IHkxOyB5IDwgeTI7ICB5KyspIHsKKyAgICAgICAgaWYgKGdldEludGVydmFscyh5KS5pc0VtcHR5
KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgY29uc3QgVmVjdG9yPEludFJl
Y3Q+JiBzZWdtZW50UmVjdHMgPSBzZWdtZW50c1JlZ2lvbi5yZWN0cygpOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzZWdtZW50UmVjdHMuc2l6ZSgpOyBpKyspCi0gICAgICAgIHJlc3Vs
dC5hcHBlbmQoTGluZVNlZ21lbnQoc2VnbWVudFJlY3RzW2ldLngoKSwgc2VnbWVudFJlY3RzW2ld
Lm1heFgoKSArIDEpKTsKKyAgICByZXN1bHQgPSBnZXRJbnRlcnZhbHMoeTEpOworICAgIGZvciAo
aW50IHkgPSB5MSArIDE7IHkgPCB5MjsgIHkrKykgeworICAgICAgICBJbnRTaGFwZUludGVydmFs
cyBpbnRlcnZhbHM7CisgICAgICAgIEludFNoYXBlSW50ZXJ2YWw6OnVuaXRlU2hhcGVJbnRlcnZh
bHMocmVzdWx0LCBnZXRJbnRlcnZhbHMoeSksIGludGVydmFscyk7CisgICAgICAgIHJlc3VsdCA9
IGludGVydmFsczsKKyAgICB9CiB9CiAKIGNvbnN0IFJhc3RlclNoYXBlSW50ZXJ2YWxzJiBSYXN0
ZXJTaGFwZTo6bWFyZ2luSW50ZXJ2YWxzKCkgY29uc3QKQEAgLTE3Myw3ICsxODUsMTEgQEAgdm9p
ZCBSYXN0ZXJTaGFwZTo6Z2V0RXhjbHVkZWRJbnRlcnZhbHMoTGF5b3V0VW5pdCBsb2dpY2FsVG9w
LCBMYXlvdXRVbml0IGxvZ2ljYWwKICAgICBpZiAoeTIgPCBpbnRlcnZhbHMuYm91bmRzKCkueSgp
IHx8IHkxID49IGludGVydmFscy5ib3VuZHMoKS5tYXhZKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGludGVydmFscy5nZXRFeGNsdWRlZEludGVydmFscyh5MSwgeTIsIHJlc3VsdCk7CisgICAg
SW50U2hhcGVJbnRlcnZhbHMgZXhjbHVkZWRJbnRlcnZhbHM7CisgICAgaW50ZXJ2YWxzLmdldEV4
Y2x1ZGVkSW50ZXJ2YWxzKHkxLCB5MiwgZXhjbHVkZWRJbnRlcnZhbHMpOworCisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGV4Y2x1ZGVkSW50ZXJ2YWxzLnNpemUoKTsgKytpKQorICAgICAg
ICByZXN1bHQuYXBwZW5kKExpbmVTZWdtZW50KGV4Y2x1ZGVkSW50ZXJ2YWxzW2ldLngxKCksIGV4
Y2x1ZGVkSW50ZXJ2YWxzW2ldLngyKCkgKyAxKSk7CiB9CiAKIHZvaWQgUmFzdGVyU2hhcGU6Omdl
dEluY2x1ZGVkSW50ZXJ2YWxzKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dp
Y2FsSGVpZ2h0LCBTZWdtZW50TGlzdCYgcmVzdWx0KSBjb25zdApAQCAtMTg4LDcgKzIwNCwxMiBA
QCB2b2lkIFJhc3RlclNoYXBlOjpnZXRJbmNsdWRlZEludGVydmFscyhMYXlvdXRVbml0IGxvZ2lj
YWxUb3AsIExheW91dFVuaXQgbG9naWNhbAogICAgIGlmICh5MSA8IGludGVydmFscy5ib3VuZHMo
KS55KCkgfHwgeTIgPiBpbnRlcnZhbHMuYm91bmRzKCkubWF4WSgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBpbnRlcnZhbHMuZ2V0SW5jbHVkZWRJbnRlcnZhbHMoeTEsIHkyLCByZXN1bHQpOwor
ICAgIEludFNoYXBlSW50ZXJ2YWxzIGluY2x1ZGVkSW50ZXJ2YWxzOworICAgIGludGVydmFscy5n
ZXRJbmNsdWRlZEludGVydmFscyh5MSwgeTIsIGluY2x1ZGVkSW50ZXJ2YWxzKTsKKworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbmNsdWRlZEludGVydmFscy5zaXplKCk7ICsraSkKKyAg
ICAgICAgcmVzdWx0LmFwcGVuZChMaW5lU2VnbWVudChpbmNsdWRlZEludGVydmFsc1tpXS54MSgp
LCBpbmNsdWRlZEludGVydmFsc1tpXS54MigpICsgMSkpOworCiB9CiAKIGJvb2wgUmFzdGVyU2hh
cGU6OmZpcnN0SW5jbHVkZWRJbnRlcnZhbExvZ2ljYWxUb3AoTGF5b3V0VW5pdCBtaW5Mb2dpY2Fs
SW50ZXJ2YWxUb3AsIGNvbnN0IExheW91dFNpemUmIG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUsIExh
eW91dFVuaXQmIHJlc3VsdCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zaGFwZXMvUmFzdGVyU2hhcGUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFw
ZXMvUmFzdGVyU2hhcGUuaAppbmRleCA5NDcyZTBjLi41NGJhMjA2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1Jhc3RlclNoYXBlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9SYXN0ZXJTaGFwZS5oCkBAIC0zMSw4ICszMSw4IEBACiAj
ZGVmaW5lIFJhc3RlclNoYXBlX2gKIAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUg
IlJlZ2lvbi5oIgogI2luY2x1ZGUgIlNoYXBlLmgiCisjaW5jbHVkZSAiU2hhcGVJbnRlcnZhbC5o
IgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
CkBAIC00MCwxOCArNDAsMzIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBSYXN0ZXJT
aGFwZUludGVydmFscyB7CiBwdWJsaWM6Ci0gICAgUmFzdGVyU2hhcGVJbnRlcnZhbHMoKSB7IH0K
KyAgICBSYXN0ZXJTaGFwZUludGVydmFscyh1bnNpZ25lZCBzaXplKQorICAgICAgICA6IG1fYm91
bmRzKC0xLCAtMSwgLTEsIC0xKQorICAgIHsKKyAgICAgICAgbV9pbnRlcnZhbExpc3RzLnJlc2l6
ZShzaXplKTsKKyAgICB9CisKKyAgICBpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW50ZXJ2
YWxMaXN0cy5zaXplKCk7IH0KKyAgICBjb25zdCBJbnRSZWN0JiBib3VuZHMoKSBjb25zdCB7IHJl
dHVybiBtX2JvdW5kczsgfQorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fYm91
bmRzLmlzRW1wdHkoKTsgfQorICAgIHZvaWQgYXBwZW5kSW50ZXJ2YWwoaW50IHksIGludCB4MSwg
aW50IHgyKTsKKyAgICBib29sIGNvbnRhaW5zKGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICBi
b29sIGdldEludGVydmFsc0luTGluZShpbnQgbWluWSwgaW50IG1heFksIEludFNoYXBlSW50ZXJ2
YWxzJiByZXN1bHQpIGNvbnN0OworCisgICAgY29uc3QgSW50U2hhcGVJbnRlcnZhbHMmIGdldElu
dGVydmFscyhpbnQgeSkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCh5ID49IDAgJiYgeSA8
IHNpemUoKSk7CisgICAgICAgIHJldHVybiBtX2ludGVydmFsTGlzdHNbeV07CisgICAgfQogCi0g
ICAgSW50UmVjdCBib3VuZHMoKSBjb25zdDsKLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCAgeyBy
ZXR1cm4gbV9yZWdpb24uaXNFbXB0eSgpOyB9Ci0gICAgdm9pZCBhZGRJbnRlcnZhbChpbnQgeSwg
aW50IHgxLCBpbnQgeDIpOwotICAgIHZvaWQgZ2V0SW5jbHVkZWRJbnRlcnZhbHMoaW50IHkxLCBp
bnQgeTIsIFNlZ21lbnRMaXN0JikgY29uc3Q7Ci0gICAgdm9pZCBnZXRFeGNsdWRlZEludGVydmFs
cyhpbnQgeTEsIGludCB5MiwgU2VnbWVudExpc3QmKSBjb25zdDsKLSAgICBib29sIGZpcnN0SW5j
bHVkZWRJbnRlcnZhbFkoaW50IG1pblksIGNvbnN0IEludFNpemUmIG1pbkludGVydmFsU2l6ZSwg
TGF5b3V0VW5pdCYpIGNvbnN0OworICAgIHZvaWQgZ2V0SW5jbHVkZWRJbnRlcnZhbHMoaW50IHkx
LCBpbnQgeTIsIEludFNoYXBlSW50ZXJ2YWxzJiByZXN1bHQpIGNvbnN0OworICAgIHZvaWQgZ2V0
RXhjbHVkZWRJbnRlcnZhbHMoaW50IHkxLCBpbnQgeTIsIEludFNoYXBlSW50ZXJ2YWxzJiByZXN1
bHQpIGNvbnN0OworICAgIGJvb2wgZmlyc3RJbmNsdWRlZEludGVydmFsWShpbnQgbWluWSwgY29u
c3QgSW50U2l6ZSYgbWluU2l6ZSwgTGF5b3V0VW5pdCYgcmVzdWx0KSBjb25zdDsKIAogcHJpdmF0
ZToKLSAgICBSZWdpb24gbV9yZWdpb247Ci0gICAgbXV0YWJsZSBPd25QdHI8SW50UmVjdD4gbV9i
b3VuZHM7IC8vIENhY2hlZCB2YWx1ZSBvZiBtX3JlZ2lvbi5ib3VuZHMoKS4KKyAgICBJbnRSZWN0
IG1fYm91bmRzOworICAgIFZlY3RvcjxJbnRTaGFwZUludGVydmFscyA+IG1faW50ZXJ2YWxMaXN0
czsKIH07CiAKIGNsYXNzIFJhc3RlclNoYXBlIDogcHVibGljIFNoYXBlIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAKaW5kZXggYjNiOWQ2ZC4uZDA0ZTgwYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAKQEAgLTIwNywxMCArMjA3
LDExIEBAIFBhc3NPd25QdHI8U2hhcGU+IFNoYXBlOjpjcmVhdGVTaGFwZShjb25zdCBTdHlsZUlt
YWdlKiBzdHlsZUltYWdlLCBmbG9hdCB0aHJlc2hvCiB7CiAgICAgQVNTRVJUKHN0eWxlSW1hZ2Ug
JiYgc3R5bGVJbWFnZS0+aXNDYWNoZWRJbWFnZSgpICYmIHN0eWxlSW1hZ2UtPmNhY2hlZEltYWdl
KCkgJiYgc3R5bGVJbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2UoKSk7CiAKLSAgICBPd25QdHI8
UmFzdGVyU2hhcGVJbnRlcnZhbHM+IGludGVydmFscyA9IGFkb3B0UHRyKG5ldyBSYXN0ZXJTaGFw
ZUludGVydmFscygpKTsKLQogICAgIEltYWdlKiBpbWFnZSA9IHN0eWxlSW1hZ2UtPmNhY2hlZElt
YWdlKCktPmltYWdlKCk7CiAgICAgY29uc3QgSW50U2l6ZSYgaW1hZ2VTaXplID0gaW1hZ2UtPnNp
emUoKTsKKworICAgIE93blB0cjxSYXN0ZXJTaGFwZUludGVydmFscz4gaW50ZXJ2YWxzID0gYWRv
cHRQdHIobmV3IFJhc3RlclNoYXBlSW50ZXJ2YWxzKGltYWdlU2l6ZS5oZWlnaHQoKSkpOworCiAg
ICAgT3duUHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
aW1hZ2VTaXplKTsKICAgICBpZiAoaW1hZ2VCdWZmZXIpIHsKICAgICAgICAgR3JhcGhpY3NDb250
ZXh0KiBncmFwaGljc0NvbnRleHQgPSBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpOwpAQCAtMjMwLDcg
KzIzMSw3IEBAIFBhc3NPd25QdHI8U2hhcGU+IFNoYXBlOjpjcmVhdGVTaGFwZShjb25zdCBTdHls
ZUltYWdlKiBzdHlsZUltYWdlLCBmbG9hdCB0aHJlc2hvCiAgICAgICAgICAgICAgICAgICAgIGlm
IChzdGFydFggPT0gLTEgJiYgYWxwaGFBYm92ZVRocmVzaG9sZCkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhcnRYID0geDsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFy
dFggIT0gLTEgJiYgKCFhbHBoYUFib3ZlVGhyZXNob2xkIHx8IHggPT0gaW1hZ2VTaXplLndpZHRo
KCkgLSAxKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJ2YWxzLT5hZGRJbnRlcnZh
bCh5LCBzdGFydFgsIHgpOworICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJ2YWxzLT5hcHBl
bmRJbnRlcnZhbCh5LCBzdGFydFgsIHgpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRY
ID0gLTE7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW50ZXJ2YWwuaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnRlcnZhbC5oCmluZGV4IGQxYjZk
ZDIuLmJmMGJjMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMv
U2hhcGVJbnRlcnZhbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hh
cGVJbnRlcnZhbC5oCkBAIC0xNTcsMzMgKzE1Nyw0MiBAQCBwdWJsaWM6CiAgICAgICAgIFNoYXBl
SW50ZXJ2YWw8VD4gYVZhbHVlID0gKmFOZXh0OwogICAgICAgICBTaGFwZUludGVydmFsPFQ+IGJW
YWx1ZSA9ICpiTmV4dDsKIAotICAgICAgICB3aGlsZSAoYU5leHQgIT0gYS5lbmQoKSAmJiBiTmV4
dCAhPSBiLmVuZCgpKSB7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGJvb2wgYUluY3JlbWVu
dCA9IGZhbHNlOworICAgICAgICAgICAgYm9vbCBiSW5jcmVtZW50ID0gZmFsc2U7CisKICAgICAg
ICAgICAgIGlmIChiVmFsdWUuY29udGFpbnMoYVZhbHVlKSkgewotICAgICAgICAgICAgICAgIGFW
YWx1ZSA9ICorK2FOZXh0OworICAgICAgICAgICAgICAgIGFJbmNyZW1lbnQgPSB0cnVlOwogICAg
ICAgICAgICAgfSBlbHNlIGlmIChhVmFsdWUuY29udGFpbnMoYlZhbHVlKSkgewogICAgICAgICAg
ICAgICAgIGlmIChiVmFsdWUueDEoKSA+IGFWYWx1ZS54MSgpKQogICAgICAgICAgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKFNoYXBlSW50ZXJ2YWw8VD4oYVZhbHVlLngxKCksIGJWYWx1ZS54MSgp
KSk7CiAgICAgICAgICAgICAgICAgaWYgKGFWYWx1ZS54MigpID4gYlZhbHVlLngyKCkpCiAgICAg
ICAgICAgICAgICAgICAgIGFWYWx1ZS5zZXRYMShiVmFsdWUueDIoKSk7CiAgICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBhVmFsdWUgPSAqKythTmV4dDsKLSAgICAgICAg
ICAgICAgICBiVmFsdWUgPSAqKytiTmV4dDsKKyAgICAgICAgICAgICAgICAgICAgYUluY3JlbWVu
dCA9IHRydWU7CisgICAgICAgICAgICAgICAgYkluY3JlbWVudCA9IHRydWU7CiAgICAgICAgICAg
ICB9IGVsc2UgaWYgKGFWYWx1ZS5vdmVybGFwcyhiVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAg
aWYgKGFWYWx1ZS54MSgpIDwgYlZhbHVlLngxKCkpIHsKICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZChTaGFwZUludGVydmFsPFQ+KGFWYWx1ZS54MSgpLCBiVmFsdWUueDEoKSkpOwot
ICAgICAgICAgICAgICAgICAgICBhVmFsdWUgPSAqKythTmV4dDsKKyAgICAgICAgICAgICAgICAg
ICAgYUluY3JlbWVudCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAgICAgYVZhbHVlLnNldFgxKGJWYWx1ZS54MigpKTsKLSAgICAgICAgICAgICAgICAg
ICAgYlZhbHVlID0gKisrYk5leHQ7CisgICAgICAgICAgICAgICAgICAgIGJJbmNyZW1lbnQgPSB0
cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgaWYgKGFWYWx1ZS54MSgpIDwgYlZhbHVlLngxKCkpIHsKICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChhVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICBhVmFsdWUgPSAq
KythTmV4dDsKKyAgICAgICAgICAgICAgICAgICAgYUluY3JlbWVudCA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGJWYWx1ZSA9ICorK2JOZXh0Owor
ICAgICAgICAgICAgICAgICAgICBiSW5jcmVtZW50ID0gdHJ1ZTsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoYUluY3JlbWVudCAmJiArK2FOZXh0ICE9IGEuZW5k
KCkpCisgICAgICAgICAgICAgICAgYVZhbHVlID0gKmFOZXh0OworICAgICAgICAgICAgaWYgKGJJ
bmNyZW1lbnQgJiYgKytiTmV4dCAhPSBiLmVuZCgpKQorICAgICAgICAgICAgICAgIGJWYWx1ZSA9
ICpiTmV4dDsKKworICAgICAgICB9IHdoaWxlIChhTmV4dCAhPSBhLmVuZCgpICYmIGJOZXh0ICE9
IGIuZW5kKCkpOwogCiAgICAgICAgIGlmIChhTmV4dCAhPSBhLmVuZCgpKSB7CiAgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKGFWYWx1ZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>210651</attachid>
            <date>2013-09-05 13:05:04 -0700</date>
            <delta_ts>2013-09-10 12:31:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>tmp.patch</filename>
            <type>text/plain</type>
            <size>14302</size>
            <attacher name="Hans Muller">giles_joplin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBhZjhiOThlLi4xNDM3ZTZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYg
QEAKKzIwMTMtMDktMDQgIEhhbnMgTXVsbGVyICA8aG11bGxlckBhZG9iZS5jb20+CisKKyAgICAg
ICAgW0NTUyBTaGFwZXNdIEltcHJvdmUgdGhlIHBlcmZvcm1hbmNlIG9mIGltYWdlIHZhbHVlZCBz
aGFwZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEy
MDIxMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJl
cGxhY2VkIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBSYXN0ZXJTaGFwZUludGVydmFscyB3aXRoIG9u
ZSBiYXNlZCBvbiB0aGUKKyAgICAgICAgbmV3IFNoYXBlSW50ZXJ2YWw8aW50PiBjbGFzcy4gVGhp
cyBlbGltaW5hdGVzIHRoZSBkZXBlbmRlbmN5IHRoZSBSZWdpb24gY2xhc3MKKyAgICAgICAgYW5k
IGRlbGl2ZXJzIGEgMTBYIGxheW91dCBzcGVlZHVwIGZvciBsYXJnZSBpbWFnZSB2YWx1ZWQgc2hh
cGVzLgorCisgICAgICAgIFRoaXMgYSBqdXN0IGFuIGltcGxlbWVudGF0aW9uIHJlZmFjdG9yaW5n
LCBubyBuZXcgdGVzdHMgd2VyZSBuZWVkZWQuCisKKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVz
L1Jhc3RlclNoYXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJhc3RlclNoYXBlSW50ZXJ2YWxz
OjphcHBlbmRJbnRlcnZhbCk6IFJlbmFtZWQgdGhpcyBtZXRob2QsIGl0IHdhcyBjYWxsZWQgYWRk
SW50ZXJ2YWwoKS4KKyAgICAgICAgKFdlYkNvcmU6OnNoYXBlSW50ZXJ2YWxzQ29udGFpbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSYXN0ZXJTaGFwZUludGVydmFsczo6Y29udGFpbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmFzdGVyU2hhcGVJbnRlcnZhbHM6OmdldEludGVydmFsc0luTGluZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpjb21wYXJlWDEpOgorICAgICAgICAoV2ViQ29yZTo6UmFzdGVyU2hh
cGVJbnRlcnZhbHM6OmZpcnN0SW5jbHVkZWRJbnRlcnZhbFkpOgorICAgICAgICAoV2ViQ29yZTo6
UmFzdGVyU2hhcGVJbnRlcnZhbHM6OmdldEluY2x1ZGVkSW50ZXJ2YWxzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJhc3RlclNoYXBlSW50ZXJ2YWxzOjpnZXRFeGNsdWRlZEludGVydmFscyk6CisgICAg
ICAgIChXZWJDb3JlOjpSYXN0ZXJTaGFwZTo6Z2V0RXhjbHVkZWRJbnRlcnZhbHMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmFzdGVyU2hhcGU6OmdldEluY2x1ZGVkSW50ZXJ2YWxzKToKKyAgICAgICAg
KiByZW5kZXJpbmcvc2hhcGVzL1Jhc3RlclNoYXBlLmg6CisgICAgICAgIChXZWJDb3JlOjpSYXN0
ZXJTaGFwZUludGVydmFsczo6UmFzdGVyU2hhcGVJbnRlcnZhbHMpOiBUaGUgY29uc3RydWN0b3Ig
bm93IHRha2VzIGEgc2l6ZSBhcmd1bWVudCB3aGljaCBpcyB1c2VkIHRvIGFsbG9jYXRlIEludFNo
YXBlSW50ZXJ2YWxzIHN0b3JhZ2UuCisgICAgICAgIChXZWJDb3JlOjpSYXN0ZXJTaGFwZUludGVy
dmFsczo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSYXN0ZXJTaGFwZUludGVydmFsczo6Ym91
bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJhc3RlclNoYXBlSW50ZXJ2YWxzOjppc0VtcHR5KToK
KyAgICAgICAgKFdlYkNvcmU6OlJhc3RlclNoYXBlSW50ZXJ2YWxzOjpnZXRJbnRlcnZhbHMpOgor
ICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U2hhcGU6OmNyZWF0ZVNoYXBlKTogVXNlIGFwcGVuZEludGVydmFsKCkgaW5zdGVhZCBvZiBhZGRJ
bnRlcnZhbCgpIChzZWUgYWJvdmUpIGFuZCB0aGUgbmV3IFJhc3RlclNoYXBlSW50ZXJ2YWxzIGNv
bnN0cnVjdG9yLgorCiAyMDEzLTA5LTA0ICBTYW11ZWwgV2hpdGUgIDxzYW11ZWxfd2hpdGVAYXBw
bGUuY29tPgogCiAgICAgICAgIEFYOiB3aGVuIG5vIG90aGVyIGxhYmVsIG9uIHByb3ZpZGVkIG9u
IGZvcm0gZWxlbWVudHMsIFdlYktpdCBzaG91bGQgZmFsbCBiYWNrIHRvIHVzaW5nIEB0aXRsZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9SYXN0ZXJTaGFwZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1Jhc3RlclNoYXBlLmNwcAppbmRl
eCA0ZWI4YWViLi41M2QxNzI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c2hhcGVzL1Jhc3RlclNoYXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hh
cGVzL1Jhc3RlclNoYXBlLmNwcApAQCAtMzAsMTE1ICszMCwxMjggQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJSYXN0ZXJTaGFwZS5oIgogCi0jaW5jbHVkZSAiU2hhcGVJbnRlcnZh
bC5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotSW50UmVjdCBSYXN0ZXJTaGFwZUludGVydmFsczo6Ym91bmRzKCkgY29uc3QKK3ZvaWQgUmFz
dGVyU2hhcGVJbnRlcnZhbHM6OmFwcGVuZEludGVydmFsKGludCB5LCBpbnQgeDEsIGludCB4MikK
IHsKLSAgICBpZiAoIW1fYm91bmRzKQotICAgICAgICBtX2JvdW5kcyA9IGFkb3B0UHRyKG5ldyBJ
bnRSZWN0KG1fcmVnaW9uLmJvdW5kcygpKSk7Ci0gICAgcmV0dXJuICptX2JvdW5kczsKKyAgICBB
U1NFUlQoeSA+PSAwICYmIHkgPCBzaXplKCkgJiYgeDEgPj0gMCAmJiB4MiA+IHgxICYmIChtX2lu
dGVydmFsTGlzdHNbeV0uaXNFbXB0eSgpIHx8IHgxID4gbV9pbnRlcnZhbExpc3RzW3ldLmxhc3Qo
KS54MigpKSk7CisKKyAgICBtX2JvdW5kcy51bml0ZShJbnRSZWN0KHgxLCB5LCB4MiAtIHgxLCAx
KSk7CisgICAgbV9pbnRlcnZhbExpc3RzW3ldLmFwcGVuZChJbnRTaGFwZUludGVydmFsKHgxLCB4
MikpOwogfQogCi12b2lkIFJhc3RlclNoYXBlSW50ZXJ2YWxzOjphZGRJbnRlcnZhbChpbnQgeSwg
aW50IHgxLCBpbnQgeDIpCitzdGF0aWMgaW5saW5lIGJvb2wgc2hhcGVJbnRlcnZhbHNDb250YWlu
KGNvbnN0IEludFNoYXBlSW50ZXJ2YWxzJiBpbnRlcnZhbHMsIGNvbnN0IEludFNoYXBlSW50ZXJ2
YWwmIGludGVydmFsKQogewotICAgIG1fcmVnaW9uLnVuaXRlKFJlZ2lvbihJbnRSZWN0KHgxLCB5
LCB4MiAtIHgxLCAxKSkpOwotICAgIG1fYm91bmRzLmNsZWFyKCk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGludGVydmFscy5zaXplKCk7IGkrKykgeworICAgICAgICBpZiAoaW50ZXJ2
YWxzW2ldLngxKCkgPiBpbnRlcnZhbC54MigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBpZiAoaW50ZXJ2YWxzW2ldLmNvbnRhaW5zKGludGVydmFsKSkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSYXN0
ZXJTaGFwZUludGVydmFsczo6Y29udGFpbnMoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK3sK
KyAgICBpZiAoIWJvdW5kcygpLmNvbnRhaW5zKHJlY3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBjb25zdCBJbnRTaGFwZUludGVydmFsJiByZWN0SW50ZXJ2YWwgPSBJbnRTaGFwZUlu
dGVydmFsKHJlY3QueCgpLCByZWN0Lm1heFgoKSk7CisgICAgZm9yIChpbnQgeSA9IHJlY3QueSgp
OyB5IDwgcmVjdC5tYXhZKCk7IHkrKykgeworICAgICAgICBpZiAoIXNoYXBlSW50ZXJ2YWxzQ29u
dGFpbihnZXRJbnRlcnZhbHMoeSksIHJlY3RJbnRlcnZhbCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGVu
ZFgxVmFsdWVzKGNvbnN0IEludFNoYXBlSW50ZXJ2YWxzJiBpbnRlcnZhbHMsIFZlY3RvcjxpbnQ+
JiByZXN1bHQpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGludGVydmFscy5zaXpl
KCk7IGkrKykKKyAgICAgICAgcmVzdWx0LmFwcGVuZChpbnRlcnZhbHNbaV0ueDEoKSk7Cit9CisK
K2Jvb2wgUmFzdGVyU2hhcGVJbnRlcnZhbHM6OmdldEludGVydmFsWDFWYWx1ZXMoaW50IHkxLCBp
bnQgeTIsIFZlY3RvcjxpbnQ+JiByZXN1bHQpIGNvbnN0Cit7CisgICAgQVNTRVJUKHkxID49IDAg
JiYgeTIgPiB5MSk7CisKKyAgICBmb3IgKGludCB5ID0geTE7IHkgPCB5MjsgIHkrKykgeworICAg
ICAgICBpZiAoZ2V0SW50ZXJ2YWxzKHkpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBhcHBlbmRYMVZhbHVlcyhnZXRJbnRlcnZhbHMoeTEpLCByZXN1
bHQpOworICAgIGZvciAoaW50IHkgPSB5MSArIDE7IHkgPCB5MjsgIHkrKykgeworICAgICAgICBp
ZiAoZ2V0SW50ZXJ2YWxzKHkpICE9IGdldEludGVydmFscyh5IC0gMSkpCisgICAgICAgICAgICBh
cHBlbmRYMVZhbHVlcyhnZXRJbnRlcnZhbHMoeSksIHJlc3VsdCk7CisgICAgfQorCisgICAgcmV0
dXJuIHRydWU7CiB9CiAKIGJvb2wgUmFzdGVyU2hhcGVJbnRlcnZhbHM6OmZpcnN0SW5jbHVkZWRJ
bnRlcnZhbFkoaW50IG1pblksIGNvbnN0IEludFNpemUmIG1pblNpemUsIExheW91dFVuaXQmIHJl
c3VsdCkgY29uc3QKIHsKLSAgICBmb3IgKGludCB5ID0gbWluWTsgeSA8PSBib3VuZHMoKS5tYXhZ
KCkgLSBtaW5TaXplLmhlaWdodCgpOyB5KyspIHsKLSAgICAgICAgUmVnaW9uIGxpbmVSZWdpb24o
SW50UmVjdChib3VuZHMoKS54KCksIHksIGJvdW5kcygpLndpZHRoKCksIG1pblNpemUuaGVpZ2h0
KCkpKTsKLSAgICAgICAgbGluZVJlZ2lvbi5pbnRlcnNlY3QobV9yZWdpb24pOwotICAgICAgICBp
ZiAobGluZVJlZ2lvbi5pc0VtcHR5KCkpCisgICAgQVNTRVJUKG1pblkgPj0gMCAmJiBtaW5ZICsg
bWluU2l6ZS5oZWlnaHQoKSA8IHNpemUoKSk7CisKKyAgICBpZiAobWluU2l6ZS5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAoaW50IGxpbmVZID0gbWluWTsgbGlu
ZVkgPD0gYm91bmRzKCkubWF4WSgpIC0gbWluU2l6ZS5oZWlnaHQoKTsgbGluZVkrKykgeworICAg
ICAgICBWZWN0b3I8aW50PiBpbnRlcnZhbFgxVmFsdWVzOworICAgICAgICBpZiAoIWdldEludGVy
dmFsWDFWYWx1ZXMobGluZVksIGxpbmVZICsgbWluU2l6ZS5oZWlnaHQoKSwgaW50ZXJ2YWxYMVZh
bHVlcykpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBjb25zdCBWZWN0b3I8SW50
UmVjdD4mIGxpbmVSZWN0cyA9IGxpbmVSZWdpb24ucmVjdHMoKTsKLSAgICAgICAgQVNTRVJUKGxp
bmVSZWN0cy5zaXplKCkgPiAwKTsKKyAgICAgICAgc3RkOjpzb3J0KGludGVydmFsWDFWYWx1ZXMu
YmVnaW4oKSwgaW50ZXJ2YWxYMVZhbHVlcy5lbmQoKSk7CiAKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxpbmVSZWN0cy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgSW50UmVj
dCByZWN0ID0gbGluZVJlY3RzW2ldOwotICAgICAgICAgICAgaWYgKHJlY3Qud2lkdGgoKSA+PSBt
aW5TaXplLndpZHRoKCkgJiYgbGluZVJlZ2lvbi5jb250YWlucyhSZWdpb24oSW50UmVjdChJbnRQ
b2ludChyZWN0LngoKSwgeSksIG1pblNpemUpKSkpIHsKLSAgICAgICAgICAgICAgICByZXN1bHQg
PSB5OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW50ZXJ2YWxYMVZhbHVlcy5z
aXplKCk7IGkrKykgeworICAgICAgICAgICAgaW50IGxpbmVYID0gaW50ZXJ2YWxYMVZhbHVlc1tp
XTsKKyAgICAgICAgICAgIGlmIChpID4gMCAmJiBsaW5lWCA9PSBpbnRlcnZhbFgxVmFsdWVzW2kg
LSAxXSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChjb250YWlu
cyhJbnRSZWN0KGxpbmVYLCBsaW5lWSwgbWluU2l6ZS53aWR0aCgpLCBtaW5TaXplLmhlaWdodCgp
KSkpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBsaW5lWTsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19CiAKLXN0YXRpYyBpbmxpbmUgSW50UmVjdCBhbGlnbmVkUmVjdChJbnRSZWN0IHIs
IGludCB5MSwgaW50IHkyKQotewotICAgIHJldHVybiBJbnRSZWN0KHIueCgpLCB5MSwgci53aWR0
aCgpLCB5MiAtIHkxKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmFzdGVyU2hhcGVJ
bnRlcnZhbHM6OmdldEluY2x1ZGVkSW50ZXJ2YWxzKGludCB5MSwgaW50IHkyLCBTZWdtZW50TGlz
dCYgcmVzdWx0KSBjb25zdAordm9pZCBSYXN0ZXJTaGFwZUludGVydmFsczo6Z2V0SW5jbHVkZWRJ
bnRlcnZhbHMoaW50IHkxLCBpbnQgeTIsIEludFNoYXBlSW50ZXJ2YWxzJiByZXN1bHQpIGNvbnN0
CiB7CiAgICAgQVNTRVJUKHkyID49IHkxKTsKIAotICAgIEludFJlY3QgbGluZVJlY3QoYm91bmRz
KCkueCgpLCB5MSwgYm91bmRzKCkud2lkdGgoKSwgeTIgLSB5MSk7Ci0gICAgUmVnaW9uIGxpbmVS
ZWdpb24obGluZVJlY3QpOwotICAgIGxpbmVSZWdpb24uaW50ZXJzZWN0KG1fcmVnaW9uKTsKLSAg
ICBpZiAobGluZVJlZ2lvbi5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0
IFZlY3RvcjxJbnRSZWN0PiYgbGluZVJlY3RzID0gbGluZVJlZ2lvbi5yZWN0cygpOwotICAgIEFT
U0VSVChsaW5lUmVjdHMuc2l6ZSgpID4gMCk7Ci0KLSAgICBSZWdpb24gc2VnbWVudHNSZWdpb24o
bGluZVJlY3QpOwotICAgIFJlZ2lvbiBpbnRlcnZhbHNSZWdpb247Ci0KLSAgICAvLyBUaGUgbG9v
cCBiZWxvdyB1c2VzIFJlZ2lvbnMgdG8gY29tcHV0ZSB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSBo
b3Jpem9udGFsCi0gICAgLy8gc2hhcGUgaW50ZXJ2YWxzIHRoYXQgZmFsbCB3aXRoaW4gdGhlIGxp
bmUncyBib3guCi0gICAgaW50IGN1cnJlbnRMaW5lWSA9IGxpbmVSZWN0c1swXS55KCk7Ci0gICAg
aW50IGN1cnJlbnRMaW5lTWF4WSA9IGxpbmVSZWN0c1swXS5tYXhZKCk7Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxpbmVSZWN0cy5zaXplKCk7ICsraSkgewotICAgICAgICBpbnQgbGlu
ZVkgPSBsaW5lUmVjdHNbaV0ueSgpOwotICAgICAgICBBU1NFUlQobGluZVkgPj0gY3VycmVudExp
bmVZKTsKLSAgICAgICAgaWYgKGxpbmVZID4gY3VycmVudExpbmVNYXhZKSB7Ci0gICAgICAgICAg
ICAvLyBXZSd2ZSBlbmNvdW50ZXJlZCBhIHZlcnRpY2FsIGdhcCBpbiBsaW5lUmVjdHMsIHRoZXJl
IGFyZSBubyBpbmNsdWRlZCBpbnRlcnZhbHMuCisgICAgZm9yIChpbnQgeSA9IHkxOyB5IDwgeTI7
ICB5KyspIHsKKyAgICAgICAgaWYgKGdldEludGVydmFscyh5KS5pc0VtcHR5KCkpCiAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxpbmVZID4gY3VycmVudExpbmVZ
KSB7Ci0gICAgICAgICAgICBjdXJyZW50TGluZVkgPSBsaW5lWTsKLSAgICAgICAgICAgIGN1cnJl
bnRMaW5lTWF4WSA9IGxpbmVSZWN0c1tpXS5tYXhZKCk7Ci0gICAgICAgICAgICBzZWdtZW50c1Jl
Z2lvbi5pbnRlcnNlY3QoaW50ZXJ2YWxzUmVnaW9uKTsKLSAgICAgICAgICAgIGludGVydmFsc1Jl
Z2lvbiA9IFJlZ2lvbigpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGN1cnJlbnRMaW5l
TWF4WSA9IHN0ZDo6bWF4PGludD4oY3VycmVudExpbmVNYXhZLCBsaW5lUmVjdHNbaV0ubWF4WSgp
KTsKLSAgICAgICAgaW50ZXJ2YWxzUmVnaW9uLnVuaXRlKFJlZ2lvbihhbGlnbmVkUmVjdChsaW5l
UmVjdHNbaV0sIHkxLCB5MikpKTsKICAgICB9Ci0gICAgaWYgKCFpbnRlcnZhbHNSZWdpb24uaXNF
bXB0eSgpKQotICAgICAgICBzZWdtZW50c1JlZ2lvbi5pbnRlcnNlY3QoaW50ZXJ2YWxzUmVnaW9u
KTsKIAotICAgIGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgc2VnbWVudFJlY3RzID0gc2VnbWVudHNS
ZWdpb24ucmVjdHMoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2VnbWVudFJlY3Rz
LnNpemUoKTsgKytpKQotICAgICAgICByZXN1bHQuYXBwZW5kKExpbmVTZWdtZW50KHNlZ21lbnRS
ZWN0c1tpXS54KCksIHNlZ21lbnRSZWN0c1tpXS5tYXhYKCkpKTsKKyAgICByZXN1bHQgPSBnZXRJ
bnRlcnZhbHMoeTEpOworICAgIGZvciAoaW50IHkgPSB5MSArIDE7IHkgPCB5MjsgIHkrKykgewor
ICAgICAgICBJbnRTaGFwZUludGVydmFscyBpbnRlcnZhbHM7CisgICAgICAgIEludFNoYXBlSW50
ZXJ2YWw6OmludGVyc2VjdFNoYXBlSW50ZXJ2YWxzKHJlc3VsdCwgZ2V0SW50ZXJ2YWxzKHkpLCBp
bnRlcnZhbHMpOworICAgICAgICByZXN1bHQgPSBpbnRlcnZhbHM7CisgICAgfQogfQogCi12b2lk
IFJhc3RlclNoYXBlSW50ZXJ2YWxzOjpnZXRFeGNsdWRlZEludGVydmFscyhpbnQgeTEsIGludCB5
MiwgU2VnbWVudExpc3QmIHJlc3VsdCkgY29uc3QKK3ZvaWQgUmFzdGVyU2hhcGVJbnRlcnZhbHM6
OmdldEV4Y2x1ZGVkSW50ZXJ2YWxzKGludCB5MSwgaW50IHkyLCBJbnRTaGFwZUludGVydmFscyYg
cmVzdWx0KSBjb25zdAogewogICAgIEFTU0VSVCh5MiA+PSB5MSk7CiAKLSAgICBJbnRSZWN0IGxp
bmVSZWN0KGJvdW5kcygpLngoKSwgeTEsIGJvdW5kcygpLndpZHRoKCksIHkyIC0geTEpOwotICAg
IFJlZ2lvbiBsaW5lUmVnaW9uKGxpbmVSZWN0KTsKLSAgICBsaW5lUmVnaW9uLmludGVyc2VjdCht
X3JlZ2lvbik7Ci0gICAgaWYgKGxpbmVSZWdpb24uaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBjb25zdCBWZWN0b3I8SW50UmVjdD4mIGxpbmVSZWN0cyA9IGxpbmVSZWdpb24ucmVj
dHMoKTsKLSAgICBBU1NFUlQobGluZVJlY3RzLnNpemUoKSA+IDApOwotCi0gICAgUmVnaW9uIHNl
Z21lbnRzUmVnaW9uOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaW5lUmVjdHMuc2l6
ZSgpOyBpKyspCi0gICAgICAgIHNlZ21lbnRzUmVnaW9uLnVuaXRlKFJlZ2lvbihhbGlnbmVkUmVj
dChsaW5lUmVjdHNbaV0sIHkxLCB5MikpKTsKKyAgICBmb3IgKGludCB5ID0geTE7IHkgPCB5Mjsg
IHkrKykgeworICAgICAgICBpZiAoZ2V0SW50ZXJ2YWxzKHkpLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBjb25zdCBWZWN0b3I8SW50UmVjdD4mIHNlZ21lbnRS
ZWN0cyA9IHNlZ21lbnRzUmVnaW9uLnJlY3RzKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHNlZ21lbnRSZWN0cy5zaXplKCk7IGkrKykKLSAgICAgICAgcmVzdWx0LmFwcGVuZChMaW5l
U2VnbWVudChzZWdtZW50UmVjdHNbaV0ueCgpLCBzZWdtZW50UmVjdHNbaV0ubWF4WCgpICsgMSkp
OworICAgIHJlc3VsdCA9IGdldEludGVydmFscyh5MSk7CisgICAgZm9yIChpbnQgeSA9IHkxICsg
MTsgeSA8IHkyOyAgeSsrKSB7CisgICAgICAgIEludFNoYXBlSW50ZXJ2YWxzIGludGVydmFsczsK
KyAgICAgICAgSW50U2hhcGVJbnRlcnZhbDo6dW5pdGVTaGFwZUludGVydmFscyhyZXN1bHQsIGdl
dEludGVydmFscyh5KSwgaW50ZXJ2YWxzKTsKKyAgICAgICAgcmVzdWx0ID0gaW50ZXJ2YWxzOwor
ICAgIH0KIH0KIAogY29uc3QgUmFzdGVyU2hhcGVJbnRlcnZhbHMmIFJhc3RlclNoYXBlOjptYXJn
aW5JbnRlcnZhbHMoKSBjb25zdApAQCAtMTczLDcgKzE4NiwxMSBAQCB2b2lkIFJhc3RlclNoYXBl
OjpnZXRFeGNsdWRlZEludGVydmFscyhMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQg
bG9naWNhbAogICAgIGlmICh5MiA8IGludGVydmFscy5ib3VuZHMoKS55KCkgfHwgeTEgPj0gaW50
ZXJ2YWxzLmJvdW5kcygpLm1heFkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50ZXJ2YWxz
LmdldEV4Y2x1ZGVkSW50ZXJ2YWxzKHkxLCB5MiwgcmVzdWx0KTsKKyAgICBJbnRTaGFwZUludGVy
dmFscyBleGNsdWRlZEludGVydmFsczsKKyAgICBpbnRlcnZhbHMuZ2V0RXhjbHVkZWRJbnRlcnZh
bHMoeTEsIHkyLCBleGNsdWRlZEludGVydmFscyk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgZXhjbHVkZWRJbnRlcnZhbHMuc2l6ZSgpOyArK2kpCisgICAgICAgIHJlc3VsdC5hcHBl
bmQoTGluZVNlZ21lbnQoZXhjbHVkZWRJbnRlcnZhbHNbaV0ueDEoKSwgZXhjbHVkZWRJbnRlcnZh
bHNbaV0ueDIoKSArIDEpKTsKIH0KIAogdm9pZCBSYXN0ZXJTaGFwZTo6Z2V0SW5jbHVkZWRJbnRl
cnZhbHMoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNl
Z21lbnRMaXN0JiByZXN1bHQpIGNvbnN0CkBAIC0xODgsNyArMjA1LDEyIEBAIHZvaWQgUmFzdGVy
U2hhcGU6OmdldEluY2x1ZGVkSW50ZXJ2YWxzKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0
VW5pdCBsb2dpY2FsCiAgICAgaWYgKHkxIDwgaW50ZXJ2YWxzLmJvdW5kcygpLnkoKSB8fCB5MiA+
IGludGVydmFscy5ib3VuZHMoKS5tYXhZKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGludGVy
dmFscy5nZXRJbmNsdWRlZEludGVydmFscyh5MSwgeTIsIHJlc3VsdCk7CisgICAgSW50U2hhcGVJ
bnRlcnZhbHMgaW5jbHVkZWRJbnRlcnZhbHM7CisgICAgaW50ZXJ2YWxzLmdldEluY2x1ZGVkSW50
ZXJ2YWxzKHkxLCB5MiwgaW5jbHVkZWRJbnRlcnZhbHMpOworCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGluY2x1ZGVkSW50ZXJ2YWxzLnNpemUoKTsgKytpKQorICAgICAgICByZXN1bHQu
YXBwZW5kKExpbmVTZWdtZW50KGluY2x1ZGVkSW50ZXJ2YWxzW2ldLngxKCksIGluY2x1ZGVkSW50
ZXJ2YWxzW2ldLngyKCkgKyAxKSk7CisKIH0KIAogYm9vbCBSYXN0ZXJTaGFwZTo6Zmlyc3RJbmNs
dWRlZEludGVydmFsTG9naWNhbFRvcChMYXlvdXRVbml0IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCwg
Y29uc3QgTGF5b3V0U2l6ZSYgbWluTG9naWNhbEludGVydmFsU2l6ZSwgTGF5b3V0VW5pdCYgcmVz
dWx0KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9S
YXN0ZXJTaGFwZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9SYXN0ZXJTaGFw
ZS5oCmluZGV4IDk0NzJlMGMuLjczY2U4ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zaGFwZXMvUmFzdGVyU2hhcGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc2hhcGVzL1Jhc3RlclNoYXBlLmgKQEAgLTMxLDggKzMxLDggQEAKICNkZWZpbmUgUmFzdGVy
U2hhcGVfaAogCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiUmVnaW9uLmgiCiAj
aW5jbHVkZSAiU2hhcGUuaCIKKyNpbmNsdWRlICJTaGFwZUludGVydmFsLmgiCiAjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTQwLDE4ICs0
MCwzMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFJhc3RlclNoYXBlSW50ZXJ2YWxz
IHsKIHB1YmxpYzoKLSAgICBSYXN0ZXJTaGFwZUludGVydmFscygpIHsgfQorICAgIFJhc3RlclNo
YXBlSW50ZXJ2YWxzKHVuc2lnbmVkIHNpemUpCisgICAgeworICAgICAgICBtX2ludGVydmFsTGlz
dHMucmVzaXplKHNpemUpOworICAgIH0KKworICAgIGludCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV9pbnRlcnZhbExpc3RzLnNpemUoKTsgfQorICAgIGNvbnN0IEludFJlY3QmIGJvdW5kcygpIGNv
bnN0IHsgcmV0dXJuIG1fYm91bmRzOyB9CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1
cm4gbV9ib3VuZHMuaXNFbXB0eSgpOyB9CisgICAgdm9pZCBhcHBlbmRJbnRlcnZhbChpbnQgeSwg
aW50IHgxLCBpbnQgeDIpOworICAgIGJvb2wgY29udGFpbnMoY29uc3QgSW50UmVjdCYpIGNvbnN0
OworICAgIGJvb2wgZ2V0SW50ZXJ2YWxYMVZhbHVlcyhpbnQgbWluWSwgaW50IG1heFksIFZlY3Rv
cjxpbnQ+JiByZXN1bHQpIGNvbnN0OworCisgICAgY29uc3QgSW50U2hhcGVJbnRlcnZhbHMmIGdl
dEludGVydmFscyhpbnQgeSkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCh5ID49IDAgJiYg
eSA8IHNpemUoKSk7CisgICAgICAgIHJldHVybiBtX2ludGVydmFsTGlzdHNbeV07CisgICAgfQog
Ci0gICAgSW50UmVjdCBib3VuZHMoKSBjb25zdDsKLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCAg
eyByZXR1cm4gbV9yZWdpb24uaXNFbXB0eSgpOyB9Ci0gICAgdm9pZCBhZGRJbnRlcnZhbChpbnQg
eSwgaW50IHgxLCBpbnQgeDIpOwotICAgIHZvaWQgZ2V0SW5jbHVkZWRJbnRlcnZhbHMoaW50IHkx
LCBpbnQgeTIsIFNlZ21lbnRMaXN0JikgY29uc3Q7Ci0gICAgdm9pZCBnZXRFeGNsdWRlZEludGVy
dmFscyhpbnQgeTEsIGludCB5MiwgU2VnbWVudExpc3QmKSBjb25zdDsKLSAgICBib29sIGZpcnN0
SW5jbHVkZWRJbnRlcnZhbFkoaW50IG1pblksIGNvbnN0IEludFNpemUmIG1pbkludGVydmFsU2l6
ZSwgTGF5b3V0VW5pdCYpIGNvbnN0OworICAgIHZvaWQgZ2V0SW5jbHVkZWRJbnRlcnZhbHMoaW50
IHkxLCBpbnQgeTIsIEludFNoYXBlSW50ZXJ2YWxzJiByZXN1bHQpIGNvbnN0OworICAgIHZvaWQg
Z2V0RXhjbHVkZWRJbnRlcnZhbHMoaW50IHkxLCBpbnQgeTIsIEludFNoYXBlSW50ZXJ2YWxzJiBy
ZXN1bHQpIGNvbnN0OworICAgIGJvb2wgZmlyc3RJbmNsdWRlZEludGVydmFsWShpbnQgbWluWSwg
Y29uc3QgSW50U2l6ZSYgbWluU2l6ZSwgTGF5b3V0VW5pdCYgcmVzdWx0KSBjb25zdDsKIAogcHJp
dmF0ZToKLSAgICBSZWdpb24gbV9yZWdpb247Ci0gICAgbXV0YWJsZSBPd25QdHI8SW50UmVjdD4g
bV9ib3VuZHM7IC8vIENhY2hlZCB2YWx1ZSBvZiBtX3JlZ2lvbi5ib3VuZHMoKS4KKyAgICBJbnRS
ZWN0IG1fYm91bmRzOworICAgIFZlY3RvcjxJbnRTaGFwZUludGVydmFscyA+IG1faW50ZXJ2YWxM
aXN0czsKIH07CiAKIGNsYXNzIFJhc3RlclNoYXBlIDogcHVibGljIFNoYXBlIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAKaW5kZXggYjNiOWQ2ZC4uZDA0ZTgwYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAKQEAgLTIwNywxMCAr
MjA3LDExIEBAIFBhc3NPd25QdHI8U2hhcGU+IFNoYXBlOjpjcmVhdGVTaGFwZShjb25zdCBTdHls
ZUltYWdlKiBzdHlsZUltYWdlLCBmbG9hdCB0aHJlc2hvCiB7CiAgICAgQVNTRVJUKHN0eWxlSW1h
Z2UgJiYgc3R5bGVJbWFnZS0+aXNDYWNoZWRJbWFnZSgpICYmIHN0eWxlSW1hZ2UtPmNhY2hlZElt
YWdlKCkgJiYgc3R5bGVJbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2UoKSk7CiAKLSAgICBPd25Q
dHI8UmFzdGVyU2hhcGVJbnRlcnZhbHM+IGludGVydmFscyA9IGFkb3B0UHRyKG5ldyBSYXN0ZXJT
aGFwZUludGVydmFscygpKTsKLQogICAgIEltYWdlKiBpbWFnZSA9IHN0eWxlSW1hZ2UtPmNhY2hl
ZEltYWdlKCktPmltYWdlKCk7CiAgICAgY29uc3QgSW50U2l6ZSYgaW1hZ2VTaXplID0gaW1hZ2Ut
PnNpemUoKTsKKworICAgIE93blB0cjxSYXN0ZXJTaGFwZUludGVydmFscz4gaW50ZXJ2YWxzID0g
YWRvcHRQdHIobmV3IFJhc3RlclNoYXBlSW50ZXJ2YWxzKGltYWdlU2l6ZS5oZWlnaHQoKSkpOwor
CiAgICAgT3duUHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoaW1hZ2VTaXplKTsKICAgICBpZiAoaW1hZ2VCdWZmZXIpIHsKICAgICAgICAgR3JhcGhpY3ND
b250ZXh0KiBncmFwaGljc0NvbnRleHQgPSBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpOwpAQCAtMjMw
LDcgKzIzMSw3IEBAIFBhc3NPd25QdHI8U2hhcGU+IFNoYXBlOjpjcmVhdGVTaGFwZShjb25zdCBT
dHlsZUltYWdlKiBzdHlsZUltYWdlLCBmbG9hdCB0aHJlc2hvCiAgICAgICAgICAgICAgICAgICAg
IGlmIChzdGFydFggPT0gLTEgJiYgYWxwaGFBYm92ZVRocmVzaG9sZCkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhcnRYID0geDsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChz
dGFydFggIT0gLTEgJiYgKCFhbHBoYUFib3ZlVGhyZXNob2xkIHx8IHggPT0gaW1hZ2VTaXplLndp
ZHRoKCkgLSAxKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJ2YWxzLT5hZGRJbnRl
cnZhbCh5LCBzdGFydFgsIHgpOworICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJ2YWxzLT5h
cHBlbmRJbnRlcnZhbCh5LCBzdGFydFgsIHgpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
cnRYID0gLTE7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Cg==
</data>
<flag name="review"
          id="232743"
          type_id="1"
          status="-"
          setter="achicu"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211223</attachid>
            <date>2013-09-10 12:31:59 -0700</date>
            <delta_ts>2013-09-11 16:49:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>tmp.patch</filename>
            <type>text/plain</type>
            <size>16411</size>
            <attacher name="Hans Muller">giles_joplin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0OTc2MzkyLi43NGUxNGFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYg
QEAKKzIwMTMtMDktMDQgIEhhbnMgTXVsbGVyICA8aG11bGxlckBhZG9iZS5jb20+CisKKyAgICAg
ICAgW0NTUyBTaGFwZXNdIEltcHJvdmUgdGhlIHBlcmZvcm1hbmNlIG9mIGltYWdlIHZhbHVlZCBz
aGFwZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEy
MDIxMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJl
cGxhY2VkIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBSYXN0ZXJTaGFwZUludGVydmFscyB3aXRoIG9u
ZSBiYXNlZCBvbiB0aGUKKyAgICAgICAgbmV3IFNoYXBlSW50ZXJ2YWw8aW50PiBjbGFzcy4gVGhp
cyBlbGltaW5hdGVzIHRoZSBkZXBlbmRlbmN5IHRoZSBSZWdpb24gY2xhc3MKKyAgICAgICAgYW5k
IGRlbGl2ZXJzIGEgMTBYIGxheW91dCBzcGVlZHVwIGZvciBsYXJnZSBpbWFnZSB2YWx1ZWQgc2hh
cGVzLgorCisgICAgICAgIFRoaXMgYSBqdXN0IGFuIGltcGxlbWVudGF0aW9uIHJlZmFjdG9yaW5n
LCBubyBuZXcgdGVzdHMgd2VyZSBuZWVkZWQuCisKKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVz
L1Jhc3RlclNoYXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJhc3RlclNoYXBlSW50ZXJ2YWxz
OjphcHBlbmRJbnRlcnZhbCk6IFJlbmFtZWQgdGhpcyBtZXRob2QsIGl0IHdhcyBjYWxsZWQgYWRk
SW50ZXJ2YWwoKS4KKyAgICAgICAgKFdlYkNvcmU6OnNoYXBlSW50ZXJ2YWxzQ29udGFpbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSYXN0ZXJTaGFwZUludGVydmFsczo6Y29udGFpbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmFzdGVyU2hhcGVJbnRlcnZhbHM6OmdldEludGVydmFsc0luTGluZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpjb21wYXJlWDEpOgorICAgICAgICAoV2ViQ29yZTo6UmFzdGVyU2hh
cGVJbnRlcnZhbHM6OmZpcnN0SW5jbHVkZWRJbnRlcnZhbFkpOgorICAgICAgICAoV2ViQ29yZTo6
UmFzdGVyU2hhcGVJbnRlcnZhbHM6OmdldEluY2x1ZGVkSW50ZXJ2YWxzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJhc3RlclNoYXBlSW50ZXJ2YWxzOjpnZXRFeGNsdWRlZEludGVydmFscyk6CisgICAg
ICAgIChXZWJDb3JlOjpSYXN0ZXJTaGFwZTo6Z2V0RXhjbHVkZWRJbnRlcnZhbHMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmFzdGVyU2hhcGU6OmdldEluY2x1ZGVkSW50ZXJ2YWxzKToKKyAgICAgICAg
KiByZW5kZXJpbmcvc2hhcGVzL1Jhc3RlclNoYXBlLmg6CisgICAgICAgIChXZWJDb3JlOjpSYXN0
ZXJTaGFwZUludGVydmFsczo6UmFzdGVyU2hhcGVJbnRlcnZhbHMpOiBUaGUgY29uc3RydWN0b3Ig
bm93IHRha2VzIGEgc2l6ZSBhcmd1bWVudCB3aGljaCBpcyB1c2VkIHRvIGFsbG9jYXRlIEludFNo
YXBlSW50ZXJ2YWxzIHN0b3JhZ2UuCisgICAgICAgIChXZWJDb3JlOjpSYXN0ZXJTaGFwZUludGVy
dmFsczo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSYXN0ZXJTaGFwZUludGVydmFsczo6Ym91
bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJhc3RlclNoYXBlSW50ZXJ2YWxzOjppc0VtcHR5KToK
KyAgICAgICAgKFdlYkNvcmU6OlJhc3RlclNoYXBlSW50ZXJ2YWxzOjpnZXRJbnRlcnZhbHMpOgor
ICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U2hhcGU6OmNyZWF0ZVNoYXBlKTogVXNlIGFwcGVuZEludGVydmFsKCkgaW5zdGVhZCBvZiBhZGRJ
bnRlcnZhbCgpIChzZWUgYWJvdmUpIGFuZCB0aGUgbmV3IFJhc3RlclNoYXBlSW50ZXJ2YWxzIGNv
bnN0cnVjdG9yLgorCiAyMDEzLTA5LTEwICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBw
bGUuY29tPgogCiAgICAgICAgIFttYWNdIDxwcm9ncmVzcz4gaGFzIHJlbmRlcmluZyBhcnRpZmFj
dHMgYWxvbmcgdGhlIGJvdHRvbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3NoYXBlcy9SYXN0ZXJTaGFwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVz
L1Jhc3RlclNoYXBlLmNwcAppbmRleCA0ZWI4YWViLi4wMTNjM2RlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1Jhc3RlclNoYXBlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1Jhc3RlclNoYXBlLmNwcApAQCAtMzAsMTE1ICszMCwx
MzcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSYXN0ZXJTaGFwZS5oIgogCi0j
aW5jbHVkZSAiU2hhcGVJbnRlcnZhbC5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSW50UmVjdCBSYXN0ZXJTaGFwZUludGVydmFsczo6Ym91
bmRzKCkgY29uc3QKK3ZvaWQgUmFzdGVyU2hhcGVJbnRlcnZhbHM6OmFwcGVuZEludGVydmFsKGlu
dCB5LCBpbnQgeDEsIGludCB4MikKIHsKLSAgICBpZiAoIW1fYm91bmRzKQotICAgICAgICBtX2Jv
dW5kcyA9IGFkb3B0UHRyKG5ldyBJbnRSZWN0KG1fcmVnaW9uLmJvdW5kcygpKSk7Ci0gICAgcmV0
dXJuICptX2JvdW5kczsKKyAgICBBU1NFUlQoeSA+PSAwICYmIHkgPCBzaXplKCkgJiYgeDEgPj0g
MCAmJiB4MiA+IHgxICYmIChtX2ludGVydmFsTGlzdHNbeV0uaXNFbXB0eSgpIHx8IHgxID4gbV9p
bnRlcnZhbExpc3RzW3ldLmxhc3QoKS54MigpKSk7CisKKyAgICBtX2JvdW5kcy51bml0ZShJbnRS
ZWN0KHgxLCB5LCB4MiAtIHgxLCAxKSk7CisgICAgbV9pbnRlcnZhbExpc3RzW3ldLmFwcGVuZChJ
bnRTaGFwZUludGVydmFsKHgxLCB4MikpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2hhcGVJ
bnRlcnZhbHNDb250YWluKGNvbnN0IEludFNoYXBlSW50ZXJ2YWxzJiBpbnRlcnZhbHMsIGNvbnN0
IEludFNoYXBlSW50ZXJ2YWwmIGludGVydmFsKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBpbnRlcnZhbHMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgaWYgKGludGVydmFsc1tpXS54
MSgpID4gaW50ZXJ2YWwueDIoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
aWYgKGludGVydmFsc1tpXS5jb250YWlucyhpbnRlcnZhbCkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmFzdGVyU2hhcGVJ
bnRlcnZhbHM6OmNvbnRhaW5zKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgaWYg
KCFib3VuZHMoKS5jb250YWlucyhyZWN0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Y29uc3QgSW50U2hhcGVJbnRlcnZhbCYgcmVjdEludGVydmFsID0gSW50U2hhcGVJbnRlcnZhbChy
ZWN0LngoKSwgcmVjdC5tYXhYKCkpOworICAgIGZvciAoaW50IHkgPSByZWN0LnkoKTsgeSA8IHJl
Y3QubWF4WSgpOyB5KyspIHsKKyAgICAgICAgaWYgKCFzaGFwZUludGVydmFsc0NvbnRhaW4oZ2V0
SW50ZXJ2YWxzKHkpLCByZWN0SW50ZXJ2YWwpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5k
WDFWYWx1ZXMoY29uc3QgSW50U2hhcGVJbnRlcnZhbHMmIGludGVydmFscywgaW50IG1pbkludGVy
dmFsV2lkdGgsIFZlY3RvcjxpbnQ+JiByZXN1bHQpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGludGVydmFscy5zaXplKCk7IGkrKykKKyAgICAgICAgaWYgKGludGVydmFsc1tpXS53
aWR0aCgpID49IG1pbkludGVydmFsV2lkdGgpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGlu
dGVydmFsc1tpXS54MSgpKTsKIH0KIAotdm9pZCBSYXN0ZXJTaGFwZUludGVydmFsczo6YWRkSW50
ZXJ2YWwoaW50IHksIGludCB4MSwgaW50IHgyKQorYm9vbCBSYXN0ZXJTaGFwZUludGVydmFsczo6
Z2V0SW50ZXJ2YWxYMVZhbHVlcyhpbnQgeTEsIGludCB5MiwgaW50IG1pbkludGVydmFsV2lkdGgs
IFZlY3RvcjxpbnQ+JiByZXN1bHQpIGNvbnN0CiB7Ci0gICAgbV9yZWdpb24udW5pdGUoUmVnaW9u
KEludFJlY3QoeDEsIHksIHgyIC0geDEsIDEpKSk7Ci0gICAgbV9ib3VuZHMuY2xlYXIoKTsKKyAg
ICBBU1NFUlQoeTEgPj0gMCAmJiB5MiA+IHkxKTsKKworICAgIGZvciAoaW50IHkgPSB5MTsgeSA8
IHkyOyAgeSsrKSB7CisgICAgICAgIGlmIChnZXRJbnRlcnZhbHMoeSkuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGFwcGVuZFgxVmFsdWVzKGdldElu
dGVydmFscyh5MSksIG1pbkludGVydmFsV2lkdGgsIHJlc3VsdCk7CisgICAgZm9yIChpbnQgeSA9
IHkxICsgMTsgeSA8IHkyOyAgeSsrKSB7CisgICAgICAgIGlmIChnZXRJbnRlcnZhbHMoeSkgIT0g
Z2V0SW50ZXJ2YWxzKHkgLSAxKSkKKyAgICAgICAgICAgIGFwcGVuZFgxVmFsdWVzKGdldEludGVy
dmFscyh5KSwgbWluSW50ZXJ2YWxXaWR0aCwgcmVzdWx0KTsKKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogYm9vbCBSYXN0ZXJTaGFwZUludGVydmFsczo6Zmlyc3RJbmNsdWRlZEludGVy
dmFsWShpbnQgbWluWSwgY29uc3QgSW50U2l6ZSYgbWluU2l6ZSwgTGF5b3V0VW5pdCYgcmVzdWx0
KSBjb25zdAogewotICAgIGZvciAoaW50IHkgPSBtaW5ZOyB5IDw9IGJvdW5kcygpLm1heFkoKSAt
IG1pblNpemUuaGVpZ2h0KCk7IHkrKykgewotICAgICAgICBSZWdpb24gbGluZVJlZ2lvbihJbnRS
ZWN0KGJvdW5kcygpLngoKSwgeSwgYm91bmRzKCkud2lkdGgoKSwgbWluU2l6ZS5oZWlnaHQoKSkp
OwotICAgICAgICBsaW5lUmVnaW9uLmludGVyc2VjdChtX3JlZ2lvbik7Ci0gICAgICAgIGlmIChs
aW5lUmVnaW9uLmlzRW1wdHkoKSkKKyAgICBBU1NFUlQobWluWSA+PSAwICYmIG1pblkgKyBtaW5T
aXplLmhlaWdodCgpIDwgc2l6ZSgpKTsKKworICAgIGlmIChtaW5TaXplLmlzRW1wdHkoKSB8fCBt
aW5TaXplLndpZHRoKCkgPiBib3VuZHMoKS53aWR0aCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBmb3IgKGludCBsaW5lWSA9IG1pblk7IGxpbmVZIDw9IGJvdW5kcygpLm1heFkoKSAt
IG1pblNpemUuaGVpZ2h0KCk7IGxpbmVZKyspIHsKKyAgICAgICAgVmVjdG9yPGludD4gaW50ZXJ2
YWxYMVZhbHVlczsKKyAgICAgICAgaWYgKCFnZXRJbnRlcnZhbFgxVmFsdWVzKGxpbmVZLCBsaW5l
WSArIG1pblNpemUuaGVpZ2h0KCksIG1pblNpemUud2lkdGgoKSwgaW50ZXJ2YWxYMVZhbHVlcykp
CiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBjb25zdCBWZWN0b3I8SW50UmVjdD4m
IGxpbmVSZWN0cyA9IGxpbmVSZWdpb24ucmVjdHMoKTsKLSAgICAgICAgQVNTRVJUKGxpbmVSZWN0
cy5zaXplKCkgPiAwKTsKKyAgICAgICAgc3RkOjpzb3J0KGludGVydmFsWDFWYWx1ZXMuYmVnaW4o
KSwgaW50ZXJ2YWxYMVZhbHVlcy5lbmQoKSk7CiAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxpbmVSZWN0cy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgSW50UmVjdCByZWN0
ID0gbGluZVJlY3RzW2ldOwotICAgICAgICAgICAgaWYgKHJlY3Qud2lkdGgoKSA+PSBtaW5TaXpl
LndpZHRoKCkgJiYgbGluZVJlZ2lvbi5jb250YWlucyhSZWdpb24oSW50UmVjdChJbnRQb2ludChy
ZWN0LngoKSwgeSksIG1pblNpemUpKSkpIHsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSB5Owor
ICAgICAgICBJbnRSZWN0IGZpcnN0Rml0UmVjdChJbnRQb2ludCgwLCAwKSwgbWluU2l6ZSk7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnRlcnZhbFgxVmFsdWVzLnNpemUoKTsg
aSsrKSB7CisgICAgICAgICAgICBpbnQgbGluZVggPSBpbnRlcnZhbFgxVmFsdWVzW2ldOworICAg
ICAgICAgICAgaWYgKGkgPiAwICYmIGxpbmVYID09IGludGVydmFsWDFWYWx1ZXNbaSAtIDFdKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZmlyc3RGaXRSZWN0LnNldExv
Y2F0aW9uKEludFBvaW50KGxpbmVYLCBsaW5lWSkpOworICAgICAgICAgICAgaWYgKGNvbnRhaW5z
KGZpcnN0Rml0UmVjdCkpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBsaW5lWTsKICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0K
LSAgICByZXR1cm4gZmFsc2U7Ci19CiAKLXN0YXRpYyBpbmxpbmUgSW50UmVjdCBhbGlnbmVkUmVj
dChJbnRSZWN0IHIsIGludCB5MSwgaW50IHkyKQotewotICAgIHJldHVybiBJbnRSZWN0KHIueCgp
LCB5MSwgci53aWR0aCgpLCB5MiAtIHkxKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQg
UmFzdGVyU2hhcGVJbnRlcnZhbHM6OmdldEluY2x1ZGVkSW50ZXJ2YWxzKGludCB5MSwgaW50IHky
LCBTZWdtZW50TGlzdCYgcmVzdWx0KSBjb25zdAordm9pZCBSYXN0ZXJTaGFwZUludGVydmFsczo6
Z2V0SW5jbHVkZWRJbnRlcnZhbHMoaW50IHkxLCBpbnQgeTIsIEludFNoYXBlSW50ZXJ2YWxzJiBy
ZXN1bHQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKHkyID49IHkxKTsKIAotICAgIEludFJlY3QgbGlu
ZVJlY3QoYm91bmRzKCkueCgpLCB5MSwgYm91bmRzKCkud2lkdGgoKSwgeTIgLSB5MSk7Ci0gICAg
UmVnaW9uIGxpbmVSZWdpb24obGluZVJlY3QpOwotICAgIGxpbmVSZWdpb24uaW50ZXJzZWN0KG1f
cmVnaW9uKTsKLSAgICBpZiAobGluZVJlZ2lvbi5pc0VtcHR5KCkpCisgICAgaWYgKHkxIDwgYm91
bmRzKCkueSgpIHx8IHkyID4gYm91bmRzKCkubWF4WSgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBjb25zdCBWZWN0b3I8SW50UmVjdD4mIGxpbmVSZWN0cyA9IGxpbmVSZWdpb24ucmVjdHMoKTsK
LSAgICBBU1NFUlQobGluZVJlY3RzLnNpemUoKSA+IDApOwotCi0gICAgUmVnaW9uIHNlZ21lbnRz
UmVnaW9uKGxpbmVSZWN0KTsKLSAgICBSZWdpb24gaW50ZXJ2YWxzUmVnaW9uOwotCi0gICAgLy8g
VGhlIGxvb3AgYmVsb3cgdXNlcyBSZWdpb25zIHRvIGNvbXB1dGUgdGhlIGludGVyc2VjdGlvbiBv
ZiB0aGUgaG9yaXpvbnRhbAotICAgIC8vIHNoYXBlIGludGVydmFscyB0aGF0IGZhbGwgd2l0aGlu
IHRoZSBsaW5lJ3MgYm94LgotICAgIGludCBjdXJyZW50TGluZVkgPSBsaW5lUmVjdHNbMF0ueSgp
OwotICAgIGludCBjdXJyZW50TGluZU1heFkgPSBsaW5lUmVjdHNbMF0ubWF4WSgpOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaW5lUmVjdHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
aW50IGxpbmVZID0gbGluZVJlY3RzW2ldLnkoKTsKLSAgICAgICAgQVNTRVJUKGxpbmVZID49IGN1
cnJlbnRMaW5lWSk7Ci0gICAgICAgIGlmIChsaW5lWSA+IGN1cnJlbnRMaW5lTWF4WSkgewotICAg
ICAgICAgICAgLy8gV2UndmUgZW5jb3VudGVyZWQgYSB2ZXJ0aWNhbCBnYXAgaW4gbGluZVJlY3Rz
LCB0aGVyZSBhcmUgbm8gaW5jbHVkZWQgaW50ZXJ2YWxzLgorICAgIGZvciAoaW50IHkgPSB5MTsg
eSA8IHkyOyAgeSsrKSB7CisgICAgICAgIGlmIChnZXRJbnRlcnZhbHMoeSkuaXNFbXB0eSgpKQog
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChsaW5lWSA+IGN1cnJl
bnRMaW5lWSkgewotICAgICAgICAgICAgY3VycmVudExpbmVZID0gbGluZVk7Ci0gICAgICAgICAg
ICBjdXJyZW50TGluZU1heFkgPSBsaW5lUmVjdHNbaV0ubWF4WSgpOwotICAgICAgICAgICAgc2Vn
bWVudHNSZWdpb24uaW50ZXJzZWN0KGludGVydmFsc1JlZ2lvbik7Ci0gICAgICAgICAgICBpbnRl
cnZhbHNSZWdpb24gPSBSZWdpb24oKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjdXJy
ZW50TGluZU1heFkgPSBzdGQ6Om1heDxpbnQ+KGN1cnJlbnRMaW5lTWF4WSwgbGluZVJlY3RzW2ld
Lm1heFkoKSk7Ci0gICAgICAgIGludGVydmFsc1JlZ2lvbi51bml0ZShSZWdpb24oYWxpZ25lZFJl
Y3QobGluZVJlY3RzW2ldLCB5MSwgeTIpKSk7CiAgICAgfQotICAgIGlmICghaW50ZXJ2YWxzUmVn
aW9uLmlzRW1wdHkoKSkKLSAgICAgICAgc2VnbWVudHNSZWdpb24uaW50ZXJzZWN0KGludGVydmFs
c1JlZ2lvbik7CiAKLSAgICBjb25zdCBWZWN0b3I8SW50UmVjdD4mIHNlZ21lbnRSZWN0cyA9IHNl
Z21lbnRzUmVnaW9uLnJlY3RzKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNlZ21l
bnRSZWN0cy5zaXplKCk7ICsraSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZChMaW5lU2VnbWVudChz
ZWdtZW50UmVjdHNbaV0ueCgpLCBzZWdtZW50UmVjdHNbaV0ubWF4WCgpKSk7CisgICAgcmVzdWx0
ID0gZ2V0SW50ZXJ2YWxzKHkxKTsKKyAgICBmb3IgKGludCB5ID0geTEgKyAxOyB5IDwgeTIgJiYg
IXJlc3VsdC5pc0VtcHR5KCk7ICB5KyspIHsKKyAgICAgICAgSW50U2hhcGVJbnRlcnZhbHMgaW50
ZXJ2YWxzOworICAgICAgICBJbnRTaGFwZUludGVydmFsOjppbnRlcnNlY3RTaGFwZUludGVydmFs
cyhyZXN1bHQsIGdldEludGVydmFscyh5KSwgaW50ZXJ2YWxzKTsKKyAgICAgICAgcmVzdWx0LnN3
YXAoaW50ZXJ2YWxzKTsKKyAgICB9CiB9CiAKLXZvaWQgUmFzdGVyU2hhcGVJbnRlcnZhbHM6Omdl
dEV4Y2x1ZGVkSW50ZXJ2YWxzKGludCB5MSwgaW50IHkyLCBTZWdtZW50TGlzdCYgcmVzdWx0KSBj
b25zdAordm9pZCBSYXN0ZXJTaGFwZUludGVydmFsczo6Z2V0RXhjbHVkZWRJbnRlcnZhbHMoaW50
IHkxLCBpbnQgeTIsIEludFNoYXBlSW50ZXJ2YWxzJiByZXN1bHQpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKHkyID49IHkxKTsKIAotICAgIEludFJlY3QgbGluZVJlY3QoYm91bmRzKCkueCgpLCB5MSwg
Ym91bmRzKCkud2lkdGgoKSwgeTIgLSB5MSk7Ci0gICAgUmVnaW9uIGxpbmVSZWdpb24obGluZVJl
Y3QpOwotICAgIGxpbmVSZWdpb24uaW50ZXJzZWN0KG1fcmVnaW9uKTsKLSAgICBpZiAobGluZVJl
Z2lvbi5pc0VtcHR5KCkpCisgICAgaWYgKHkyIDwgYm91bmRzKCkueSgpIHx8IHkxID49IGJvdW5k
cygpLm1heFkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29uc3QgVmVjdG9yPEludFJlY3Q+
JiBsaW5lUmVjdHMgPSBsaW5lUmVnaW9uLnJlY3RzKCk7Ci0gICAgQVNTRVJUKGxpbmVSZWN0cy5z
aXplKCkgPiAwKTsKLQotICAgIFJlZ2lvbiBzZWdtZW50c1JlZ2lvbjsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGluZVJlY3RzLnNpemUoKTsgaSsrKQotICAgICAgICBzZWdtZW50c1Jl
Z2lvbi51bml0ZShSZWdpb24oYWxpZ25lZFJlY3QobGluZVJlY3RzW2ldLCB5MSwgeTIpKSk7Cisg
ICAgZm9yIChpbnQgeSA9IHkxOyB5IDwgeTI7ICB5KyspIHsKKyAgICAgICAgaWYgKGdldEludGVy
dmFscyh5KS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgY29u
c3QgVmVjdG9yPEludFJlY3Q+JiBzZWdtZW50UmVjdHMgPSBzZWdtZW50c1JlZ2lvbi5yZWN0cygp
OwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzZWdtZW50UmVjdHMuc2l6ZSgpOyBpKysp
Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoTGluZVNlZ21lbnQoc2VnbWVudFJlY3RzW2ldLngoKSwg
c2VnbWVudFJlY3RzW2ldLm1heFgoKSArIDEpKTsKKyAgICByZXN1bHQgPSBnZXRJbnRlcnZhbHMo
eTEpOworICAgIGZvciAoaW50IHkgPSB5MSArIDE7IHkgPCB5MjsgIHkrKykgeworICAgICAgICBJ
bnRTaGFwZUludGVydmFscyBpbnRlcnZhbHM7CisgICAgICAgIEludFNoYXBlSW50ZXJ2YWw6OnVu
aXRlU2hhcGVJbnRlcnZhbHMocmVzdWx0LCBnZXRJbnRlcnZhbHMoeSksIGludGVydmFscyk7Cisg
ICAgICAgIHJlc3VsdC5zd2FwKGludGVydmFscyk7CisgICAgfQogfQogCiBjb25zdCBSYXN0ZXJT
aGFwZUludGVydmFscyYgUmFzdGVyU2hhcGU6Om1hcmdpbkludGVydmFscygpIGNvbnN0CkBAIC0x
NjEsMTkgKzE4MywyMSBAQCBjb25zdCBSYXN0ZXJTaGFwZUludGVydmFscyYgUmFzdGVyU2hhcGU6
OnBhZGRpbmdJbnRlcnZhbHMoKSBjb25zdAogICAgIHJldHVybiAqbV9pbnRlcnZhbHM7CiB9CiAK
K3N0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmRMaW5lU2VnbWVudHMoY29uc3QgSW50U2hhcGVJbnRl
cnZhbHMmIGludGVydmFscywgU2VnbWVudExpc3QmIHJlc3VsdCkKK3sKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgaW50ZXJ2YWxzLnNpemUoKTsgaSsrKQorICAgICAgICByZXN1bHQuYXBw
ZW5kKExpbmVTZWdtZW50KGludGVydmFsc1tpXS54MSgpLCBpbnRlcnZhbHNbaV0ueDIoKSArIDEp
KTsKK30KKwogdm9pZCBSYXN0ZXJTaGFwZTo6Z2V0RXhjbHVkZWRJbnRlcnZhbHMoTGF5b3V0VW5p
dCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNlZ21lbnRMaXN0JiByZXN1
bHQpIGNvbnN0CiB7CiAgICAgY29uc3QgUmFzdGVyU2hhcGVJbnRlcnZhbHMmIGludGVydmFscyA9
IG1hcmdpbkludGVydmFscygpOwogICAgIGlmIChpbnRlcnZhbHMuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBmbG9hdCB5MSA9IGxvZ2ljYWxUb3A7Ci0gICAgZmxvYXQgeTIgPSBs
b2dpY2FsVG9wICsgbG9naWNhbEhlaWdodDsKLQotICAgIGlmICh5MiA8IGludGVydmFscy5ib3Vu
ZHMoKS55KCkgfHwgeTEgPj0gaW50ZXJ2YWxzLmJvdW5kcygpLm1heFkoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaW50ZXJ2YWxzLmdldEV4Y2x1ZGVkSW50ZXJ2YWxzKHkxLCB5MiwgcmVzdWx0
KTsKKyAgICBJbnRTaGFwZUludGVydmFscyBleGNsdWRlZEludGVydmFsczsKKyAgICBpbnRlcnZh
bHMuZ2V0RXhjbHVkZWRJbnRlcnZhbHMobG9naWNhbFRvcCwgbG9naWNhbFRvcCArIGxvZ2ljYWxI
ZWlnaHQsIGV4Y2x1ZGVkSW50ZXJ2YWxzKTsKKyAgICBhcHBlbmRMaW5lU2VnbWVudHMoZXhjbHVk
ZWRJbnRlcnZhbHMsIHJlc3VsdCk7CiB9CiAKIHZvaWQgUmFzdGVyU2hhcGU6OmdldEluY2x1ZGVk
SW50ZXJ2YWxzKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0
LCBTZWdtZW50TGlzdCYgcmVzdWx0KSBjb25zdApAQCAtMTgyLDMwICsyMDYsMTggQEAgdm9pZCBS
YXN0ZXJTaGFwZTo6Z2V0SW5jbHVkZWRJbnRlcnZhbHMoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBM
YXlvdXRVbml0IGxvZ2ljYWwKICAgICBpZiAoaW50ZXJ2YWxzLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgZmxvYXQgeTEgPSBsb2dpY2FsVG9wOwotICAgIGZsb2F0IHkyID0gbG9n
aWNhbFRvcCArIGxvZ2ljYWxIZWlnaHQ7Ci0KLSAgICBpZiAoeTEgPCBpbnRlcnZhbHMuYm91bmRz
KCkueSgpIHx8IHkyID4gaW50ZXJ2YWxzLmJvdW5kcygpLm1heFkoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaW50ZXJ2YWxzLmdldEluY2x1ZGVkSW50ZXJ2YWxzKHkxLCB5MiwgcmVzdWx0KTsK
KyAgICBJbnRTaGFwZUludGVydmFscyBpbmNsdWRlZEludGVydmFsczsKKyAgICBpbnRlcnZhbHMu
Z2V0SW5jbHVkZWRJbnRlcnZhbHMobG9naWNhbFRvcCwgbG9naWNhbFRvcCArIGxvZ2ljYWxIZWln
aHQsIGluY2x1ZGVkSW50ZXJ2YWxzKTsKKyAgICBhcHBlbmRMaW5lU2VnbWVudHMoaW5jbHVkZWRJ
bnRlcnZhbHMsIHJlc3VsdCk7CiB9CiAKIGJvb2wgUmFzdGVyU2hhcGU6OmZpcnN0SW5jbHVkZWRJ
bnRlcnZhbExvZ2ljYWxUb3AoTGF5b3V0VW5pdCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3AsIGNvbnN0
IExheW91dFNpemUmIG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUsIExheW91dFVuaXQmIHJlc3VsdCkg
Y29uc3QKIHsKLSAgICBmbG9hdCBtaW5JbnRlcnZhbFRvcCA9IG1pbkxvZ2ljYWxJbnRlcnZhbFRv
cDsKLSAgICBmbG9hdCBtaW5JbnRlcnZhbEhlaWdodCA9IG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUu
aGVpZ2h0KCk7Ci0gICAgZmxvYXQgbWluSW50ZXJ2YWxXaWR0aCA9IG1pbkxvZ2ljYWxJbnRlcnZh
bFNpemUud2lkdGgoKTsKLQogICAgIGNvbnN0IFJhc3RlclNoYXBlSW50ZXJ2YWxzJiBpbnRlcnZh
bHMgPSBwYWRkaW5nSW50ZXJ2YWxzKCk7Ci0gICAgaWYgKGludGVydmFscy5pc0VtcHR5KCkgfHwg
bWluSW50ZXJ2YWxXaWR0aCA+IGludGVydmFscy5ib3VuZHMoKS53aWR0aCgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBmbG9hdCBtaW5ZID0gc3RkOjptYXg8ZmxvYXQ+KGludGVydmFs
cy5ib3VuZHMoKS55KCksIG1pbkludGVydmFsVG9wKTsKLSAgICBmbG9hdCBtYXhZID0gbWluWSAr
IG1pbkludGVydmFsSGVpZ2h0OwotICAgIGlmIChtYXhZID4gaW50ZXJ2YWxzLmJvdW5kcygpLm1h
eFkoKSkKKyAgICBpZiAoaW50ZXJ2YWxzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCisgICAgZmxvYXQgbWluWSA9IHN0ZDo6bWF4PGZsb2F0PihpbnRlcnZhbHMuYm91bmRzKCku
eSgpLCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3ApOwogICAgIHJldHVybiBpbnRlcnZhbHMuZmlyc3RJ
bmNsdWRlZEludGVydmFsWShtaW5ZLCBmbG9vcmVkSW50U2l6ZShtaW5Mb2dpY2FsSW50ZXJ2YWxT
aXplKSwgcmVzdWx0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3NoYXBlcy9SYXN0ZXJTaGFwZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9S
YXN0ZXJTaGFwZS5oCmluZGV4IDk0NzJlMGMuLjQzYjNmMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvUmFzdGVyU2hhcGUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc2hhcGVzL1Jhc3RlclNoYXBlLmgKQEAgLTMxLDggKzMxLDggQEAKICNkZWZp
bmUgUmFzdGVyU2hhcGVfaAogCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiUmVn
aW9uLmgiCiAjaW5jbHVkZSAiU2hhcGUuaCIKKyNpbmNsdWRlICJTaGFwZUludGVydmFsLmgiCiAj
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAg
LTQwLDE4ICs0MCwzMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFJhc3RlclNoYXBl
SW50ZXJ2YWxzIHsKIHB1YmxpYzoKLSAgICBSYXN0ZXJTaGFwZUludGVydmFscygpIHsgfQorICAg
IFJhc3RlclNoYXBlSW50ZXJ2YWxzKHVuc2lnbmVkIHNpemUpCisgICAgeworICAgICAgICBtX2lu
dGVydmFsTGlzdHMucmVzaXplKHNpemUpOworICAgIH0KIAotICAgIEludFJlY3QgYm91bmRzKCkg
Y29uc3Q7Ci0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgIHsgcmV0dXJuIG1fcmVnaW9uLmlzRW1w
dHkoKTsgfQotICAgIHZvaWQgYWRkSW50ZXJ2YWwoaW50IHksIGludCB4MSwgaW50IHgyKTsKLSAg
ICB2b2lkIGdldEluY2x1ZGVkSW50ZXJ2YWxzKGludCB5MSwgaW50IHkyLCBTZWdtZW50TGlzdCYp
IGNvbnN0OwotICAgIHZvaWQgZ2V0RXhjbHVkZWRJbnRlcnZhbHMoaW50IHkxLCBpbnQgeTIsIFNl
Z21lbnRMaXN0JikgY29uc3Q7Ci0gICAgYm9vbCBmaXJzdEluY2x1ZGVkSW50ZXJ2YWxZKGludCBt
aW5ZLCBjb25zdCBJbnRTaXplJiBtaW5JbnRlcnZhbFNpemUsIExheW91dFVuaXQmKSBjb25zdDsK
KyAgICBpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW50ZXJ2YWxMaXN0cy5zaXplKCk7IH0K
KyAgICBjb25zdCBJbnRSZWN0JiBib3VuZHMoKSBjb25zdCB7IHJldHVybiBtX2JvdW5kczsgfQor
ICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRzLmlzRW1wdHkoKTsgfQor
ICAgIHZvaWQgYXBwZW5kSW50ZXJ2YWwoaW50IHksIGludCB4MSwgaW50IHgyKTsKKyAgICBib29s
IGNvbnRhaW5zKGNvbnN0IEludFJlY3QmKSBjb25zdDsKKworICAgIGNvbnN0IEludFNoYXBlSW50
ZXJ2YWxzJiBnZXRJbnRlcnZhbHMoaW50IHkpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQo
eSA+PSAwICYmIHkgPCBzaXplKCkpOworICAgICAgICByZXR1cm4gbV9pbnRlcnZhbExpc3RzW3ld
OworICAgIH0KKworICAgIHZvaWQgZ2V0SW5jbHVkZWRJbnRlcnZhbHMoaW50IHkxLCBpbnQgeTIs
IEludFNoYXBlSW50ZXJ2YWxzJiByZXN1bHQpIGNvbnN0OworICAgIHZvaWQgZ2V0RXhjbHVkZWRJ
bnRlcnZhbHMoaW50IHkxLCBpbnQgeTIsIEludFNoYXBlSW50ZXJ2YWxzJiByZXN1bHQpIGNvbnN0
OworICAgIGJvb2wgZmlyc3RJbmNsdWRlZEludGVydmFsWShpbnQgbWluWSwgY29uc3QgSW50U2l6
ZSYgbWluU2l6ZSwgTGF5b3V0VW5pdCYgcmVzdWx0KSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBS
ZWdpb24gbV9yZWdpb247Ci0gICAgbXV0YWJsZSBPd25QdHI8SW50UmVjdD4gbV9ib3VuZHM7IC8v
IENhY2hlZCB2YWx1ZSBvZiBtX3JlZ2lvbi5ib3VuZHMoKS4KKyAgICBib29sIGdldEludGVydmFs
WDFWYWx1ZXMoaW50IG1pblksIGludCBtYXhZLCBpbnQgbWluSW50ZXJ2YWxXaWR0aCwgVmVjdG9y
PGludD4mIHJlc3VsdCkgY29uc3Q7CisKKyAgICBJbnRSZWN0IG1fYm91bmRzOworICAgIFZlY3Rv
cjxJbnRTaGFwZUludGVydmFscyA+IG1faW50ZXJ2YWxMaXN0czsKIH07CiAKIGNsYXNzIFJhc3Rl
clNoYXBlIDogcHVibGljIFNoYXBlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zaGFwZXMvU2hhcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9T
aGFwZS5jcHAKaW5kZXggYjNiOWQ2ZC4uZDA0ZTgwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3NoYXBlcy9TaGFwZS5jcHAKQEAgLTIwNywxMCArMjA3LDExIEBAIFBhc3NPd25QdHI8U2hh
cGU+IFNoYXBlOjpjcmVhdGVTaGFwZShjb25zdCBTdHlsZUltYWdlKiBzdHlsZUltYWdlLCBmbG9h
dCB0aHJlc2hvCiB7CiAgICAgQVNTRVJUKHN0eWxlSW1hZ2UgJiYgc3R5bGVJbWFnZS0+aXNDYWNo
ZWRJbWFnZSgpICYmIHN0eWxlSW1hZ2UtPmNhY2hlZEltYWdlKCkgJiYgc3R5bGVJbWFnZS0+Y2Fj
aGVkSW1hZ2UoKS0+aW1hZ2UoKSk7CiAKLSAgICBPd25QdHI8UmFzdGVyU2hhcGVJbnRlcnZhbHM+
IGludGVydmFscyA9IGFkb3B0UHRyKG5ldyBSYXN0ZXJTaGFwZUludGVydmFscygpKTsKLQogICAg
IEltYWdlKiBpbWFnZSA9IHN0eWxlSW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlKCk7CiAgICAg
Y29uc3QgSW50U2l6ZSYgaW1hZ2VTaXplID0gaW1hZ2UtPnNpemUoKTsKKworICAgIE93blB0cjxS
YXN0ZXJTaGFwZUludGVydmFscz4gaW50ZXJ2YWxzID0gYWRvcHRQdHIobmV3IFJhc3RlclNoYXBl
SW50ZXJ2YWxzKGltYWdlU2l6ZS5oZWlnaHQoKSkpOworCiAgICAgT3duUHRyPEltYWdlQnVmZmVy
PiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoaW1hZ2VTaXplKTsKICAgICBpZiAo
aW1hZ2VCdWZmZXIpIHsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQg
PSBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpOwpAQCAtMjMwLDcgKzIzMSw3IEBAIFBhc3NPd25QdHI8
U2hhcGU+IFNoYXBlOjpjcmVhdGVTaGFwZShjb25zdCBTdHlsZUltYWdlKiBzdHlsZUltYWdlLCBm
bG9hdCB0aHJlc2hvCiAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFydFggPT0gLTEgJiYgYWxw
aGFBYm92ZVRocmVzaG9sZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRYID0geDsK
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydFggIT0gLTEgJiYgKCFhbHBoYUFi
b3ZlVGhyZXNob2xkIHx8IHggPT0gaW1hZ2VTaXplLndpZHRoKCkgLSAxKSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgaW50ZXJ2YWxzLT5hZGRJbnRlcnZhbCh5LCBzdGFydFgsIHgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaW50ZXJ2YWxzLT5hcHBlbmRJbnRlcnZhbCh5LCBzdGFydFgs
IHgpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRYID0gLTE7CiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW50ZXJ2YWwuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zaGFwZXMvU2hhcGVJbnRlcnZhbC5oCmluZGV4IGJmMGJjMDguLjg0YTVhOWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnRlcnZhbC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnRlcnZhbC5oCkBAIC00Nyw2
ICs0Nyw3IEBAIHB1YmxpYzoKIAogICAgIFQgeDEoKSBjb25zdCB7IHJldHVybiBtX3gxOyB9CiAg
ICAgVCB4MigpIGNvbnN0IHsgcmV0dXJuIG1feDI7IH0KKyAgICBUIHdpZHRoKCkgY29uc3QgeyBy
ZXR1cm4gbV94MiAtIG1feDE7IH0KIAogICAgIHZvaWQgc2V0WDEoVCB4MSkKICAgICB7Cg==
</data>
<flag name="review"
          id="233281"
          type_id="1"
          status="+"
          setter="achicu"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211365</attachid>
            <date>2013-09-11 16:49:37 -0700</date>
            <delta_ts>2013-09-11 17:47:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>tmp.patch</filename>
            <type>text/plain</type>
            <size>16526</size>
            <attacher name="Hans Muller">giles_joplin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiMzk1NDMyLi4xNDgzZjc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYg
QEAKKzIwMTMtMDktMDQgIEhhbnMgTXVsbGVyICA8aG11bGxlckBhZG9iZS5jb20+CisKKyAgICAg
ICAgW0NTUyBTaGFwZXNdIEltcHJvdmUgdGhlIHBlcmZvcm1hbmNlIG9mIGltYWdlIHZhbHVlZCBz
aGFwZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEy
MDIxMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJl
cGxhY2VkIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBSYXN0ZXJTaGFwZUludGVydmFscyB3aXRoIG9u
ZSBiYXNlZCBvbiB0aGUKKyAgICAgICAgbmV3IFNoYXBlSW50ZXJ2YWw8aW50PiBjbGFzcy4gVGhp
cyBlbGltaW5hdGVzIHRoZSBkZXBlbmRlbmN5IHRoZSBSZWdpb24gY2xhc3MKKyAgICAgICAgYW5k
IGRlbGl2ZXJzIGEgMTBYIGxheW91dCBzcGVlZHVwIGZvciBsYXJnZSBpbWFnZSB2YWx1ZWQgc2hh
cGVzLgorCisgICAgICAgIFRoaXMgYSBqdXN0IGFuIGltcGxlbWVudGF0aW9uIHJlZmFjdG9yaW5n
LCBubyBuZXcgdGVzdHMgd2VyZSBuZWVkZWQuCisKKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVz
L1Jhc3RlclNoYXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJhc3RlclNoYXBlSW50ZXJ2YWxz
OjphcHBlbmRJbnRlcnZhbCk6IFJlbmFtZWQgdGhpcyBtZXRob2QsIGl0IHdhcyBjYWxsZWQgYWRk
SW50ZXJ2YWwoKS4KKyAgICAgICAgKFdlYkNvcmU6OnNoYXBlSW50ZXJ2YWxzQ29udGFpbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSYXN0ZXJTaGFwZUludGVydmFsczo6Y29udGFpbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmFzdGVyU2hhcGVJbnRlcnZhbHM6OmdldEludGVydmFsc0luTGluZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpjb21wYXJlWDEpOgorICAgICAgICAoV2ViQ29yZTo6UmFzdGVyU2hh
cGVJbnRlcnZhbHM6OmZpcnN0SW5jbHVkZWRJbnRlcnZhbFkpOgorICAgICAgICAoV2ViQ29yZTo6
UmFzdGVyU2hhcGVJbnRlcnZhbHM6OmdldEluY2x1ZGVkSW50ZXJ2YWxzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJhc3RlclNoYXBlSW50ZXJ2YWxzOjpnZXRFeGNsdWRlZEludGVydmFscyk6CisgICAg
ICAgIChXZWJDb3JlOjpSYXN0ZXJTaGFwZTo6Z2V0RXhjbHVkZWRJbnRlcnZhbHMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmFzdGVyU2hhcGU6OmdldEluY2x1ZGVkSW50ZXJ2YWxzKToKKyAgICAgICAg
KiByZW5kZXJpbmcvc2hhcGVzL1Jhc3RlclNoYXBlLmg6CisgICAgICAgIChXZWJDb3JlOjpSYXN0
ZXJTaGFwZUludGVydmFsczo6UmFzdGVyU2hhcGVJbnRlcnZhbHMpOiBUaGUgY29uc3RydWN0b3Ig
bm93IHRha2VzIGEgc2l6ZSBhcmd1bWVudCB3aGljaCBpcyB1c2VkIHRvIGFsbG9jYXRlIEludFNo
YXBlSW50ZXJ2YWxzIHN0b3JhZ2UuCisgICAgICAgIChXZWJDb3JlOjpSYXN0ZXJTaGFwZUludGVy
dmFsczo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSYXN0ZXJTaGFwZUludGVydmFsczo6Ym91
bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJhc3RlclNoYXBlSW50ZXJ2YWxzOjppc0VtcHR5KToK
KyAgICAgICAgKFdlYkNvcmU6OlJhc3RlclNoYXBlSW50ZXJ2YWxzOjpnZXRJbnRlcnZhbHMpOgor
ICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U2hhcGU6OmNyZWF0ZVNoYXBlKTogVXNlIGFwcGVuZEludGVydmFsKCkgaW5zdGVhZCBvZiBhZGRJ
bnRlcnZhbCgpIChzZWUgYWJvdmUpIGFuZCB0aGUgbmV3IFJhc3RlclNoYXBlSW50ZXJ2YWxzIGNv
bnN0cnVjdG9yLgorCiAyMDEzLTA5LTExICBUaGlhZ28gZGUgQmFycm9zIExhY2VyZGEgIDx0aGlh
Z28ubGFjZXJkYUBvcGVuYm9zc2Eub3JnPgogCiAgICAgICAgIE1lZGlhU3RyZWFtIEFQSTogUmVt
b3ZlIExvY2FsTWVkaWFTdHJlYW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zaGFwZXMvUmFzdGVyU2hhcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBl
cy9SYXN0ZXJTaGFwZS5jcHAKaW5kZXggNGViOGFlYi4uZDdmNDA2MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9SYXN0ZXJTaGFwZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9SYXN0ZXJTaGFwZS5jcHAKQEAgLTMwLDExNSArMzAs
MTM5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmFzdGVyU2hhcGUuaCIKIAot
I2luY2x1ZGUgIlNoYXBlSW50ZXJ2YWwuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUludFJlY3QgUmFzdGVyU2hhcGVJbnRlcnZhbHM6OmJv
dW5kcygpIGNvbnN0Cit2b2lkIFJhc3RlclNoYXBlSW50ZXJ2YWxzOjphcHBlbmRJbnRlcnZhbChp
bnQgeSwgaW50IHgxLCBpbnQgeDIpCiB7Ci0gICAgaWYgKCFtX2JvdW5kcykKLSAgICAgICAgbV9i
b3VuZHMgPSBhZG9wdFB0cihuZXcgSW50UmVjdChtX3JlZ2lvbi5ib3VuZHMoKSkpOwotICAgIHJl
dHVybiAqbV9ib3VuZHM7CisgICAgQVNTRVJUKHkgPj0gMCAmJiB5IDwgc2l6ZSgpICYmIHgxID49
IDAgJiYgeDIgPiB4MSAmJiAobV9pbnRlcnZhbExpc3RzW3ldLmlzRW1wdHkoKSB8fCB4MSA+IG1f
aW50ZXJ2YWxMaXN0c1t5XS5sYXN0KCkueDIoKSkpOworCisgICAgbV9ib3VuZHMudW5pdGUoSW50
UmVjdCh4MSwgeSwgeDIgLSB4MSwgMSkpOworICAgIG1faW50ZXJ2YWxMaXN0c1t5XS5hcHBlbmQo
SW50U2hhcGVJbnRlcnZhbCh4MSwgeDIpKTsKIH0KIAotdm9pZCBSYXN0ZXJTaGFwZUludGVydmFs
czo6YWRkSW50ZXJ2YWwoaW50IHksIGludCB4MSwgaW50IHgyKQorc3RhdGljIGlubGluZSBib29s
IHNoYXBlSW50ZXJ2YWxzQ29udGFpbihjb25zdCBJbnRTaGFwZUludGVydmFscyYgaW50ZXJ2YWxz
LCBjb25zdCBJbnRTaGFwZUludGVydmFsJiBpbnRlcnZhbCkKIHsKLSAgICBtX3JlZ2lvbi51bml0
ZShSZWdpb24oSW50UmVjdCh4MSwgeSwgeDIgLSB4MSwgMSkpKTsKLSAgICBtX2JvdW5kcy5jbGVh
cigpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnRlcnZhbHMuc2l6ZSgpOyBpKysp
IHsKKyAgICAgICAgaWYgKGludGVydmFsc1tpXS54MSgpID4gaW50ZXJ2YWwueDIoKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKGludGVydmFsc1tpXS5jb250YWlucyhp
bnRlcnZhbCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgUmFzdGVyU2hhcGVJbnRlcnZhbHM6OmNvbnRhaW5zKGNvbnN0IElu
dFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgaWYgKCFib3VuZHMoKS5jb250YWlucyhyZWN0KSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgSW50U2hhcGVJbnRlcnZhbCYgcmVj
dEludGVydmFsID0gSW50U2hhcGVJbnRlcnZhbChyZWN0LngoKSwgcmVjdC5tYXhYKCkpOworICAg
IGZvciAoaW50IHkgPSByZWN0LnkoKTsgeSA8IHJlY3QubWF4WSgpOyB5KyspIHsKKyAgICAgICAg
aWYgKCFzaGFwZUludGVydmFsc0NvbnRhaW4oZ2V0SW50ZXJ2YWxzKHkpLCByZWN0SW50ZXJ2YWwp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOwor
fQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kWDFWYWx1ZXMoY29uc3QgSW50U2hhcGVJbnRl
cnZhbHMmIGludGVydmFscywgaW50IG1pbkludGVydmFsV2lkdGgsIFZlY3RvcjxpbnQ+JiByZXN1
bHQpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGludGVydmFscy5zaXplKCk7IGkr
KykKKyAgICAgICAgaWYgKGludGVydmFsc1tpXS53aWR0aCgpID49IG1pbkludGVydmFsV2lkdGgp
CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGludGVydmFsc1tpXS54MSgpKTsKK30KKworYm9v
bCBSYXN0ZXJTaGFwZUludGVydmFsczo6Z2V0SW50ZXJ2YWxYMVZhbHVlcyhpbnQgeTEsIGludCB5
MiwgaW50IG1pbkludGVydmFsV2lkdGgsIFZlY3RvcjxpbnQ+JiByZXN1bHQpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKHkxID49IDAgJiYgeTIgPiB5MSk7CisKKyAgICBmb3IgKGludCB5ID0geTE7IHkg
PCB5MjsgIHkrKykgeworICAgICAgICBpZiAoZ2V0SW50ZXJ2YWxzKHkpLmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBhcHBlbmRYMVZhbHVlcyhnZXRJ
bnRlcnZhbHMoeTEpLCBtaW5JbnRlcnZhbFdpZHRoLCByZXN1bHQpOworICAgIGZvciAoaW50IHkg
PSB5MSArIDE7IHkgPCB5MjsgIHkrKykgeworICAgICAgICBpZiAoZ2V0SW50ZXJ2YWxzKHkpICE9
IGdldEludGVydmFscyh5IC0gMSkpCisgICAgICAgICAgICBhcHBlbmRYMVZhbHVlcyhnZXRJbnRl
cnZhbHMoeSksIG1pbkludGVydmFsV2lkdGgsIHJlc3VsdCk7CisgICAgfQorCisgICAgcmV0dXJu
IHRydWU7CiB9CiAKIGJvb2wgUmFzdGVyU2hhcGVJbnRlcnZhbHM6OmZpcnN0SW5jbHVkZWRJbnRl
cnZhbFkoaW50IG1pblksIGNvbnN0IEludFNpemUmIG1pblNpemUsIExheW91dFVuaXQmIHJlc3Vs
dCkgY29uc3QKIHsKLSAgICBmb3IgKGludCB5ID0gbWluWTsgeSA8PSBib3VuZHMoKS5tYXhZKCkg
LSBtaW5TaXplLmhlaWdodCgpOyB5KyspIHsKLSAgICAgICAgUmVnaW9uIGxpbmVSZWdpb24oSW50
UmVjdChib3VuZHMoKS54KCksIHksIGJvdW5kcygpLndpZHRoKCksIG1pblNpemUuaGVpZ2h0KCkp
KTsKLSAgICAgICAgbGluZVJlZ2lvbi5pbnRlcnNlY3QobV9yZWdpb24pOwotICAgICAgICBpZiAo
bGluZVJlZ2lvbi5pc0VtcHR5KCkpCisgICAgbWluWSA9IHN0ZDo6bWF4PGludD4oYm91bmRzKCku
eSgpLCBtaW5ZKTsKKworICAgIEFTU0VSVChtaW5ZID49IDAgJiYgbWluWSArIG1pblNpemUuaGVp
Z2h0KCkgPCBzaXplKCkpOworCisgICAgaWYgKG1pblNpemUuaXNFbXB0eSgpIHx8IG1pblNpemUu
d2lkdGgoKSA+IGJvdW5kcygpLndpZHRoKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGZvciAoaW50IGxpbmVZID0gbWluWTsgbGluZVkgPD0gYm91bmRzKCkubWF4WSgpIC0gbWluU2l6
ZS5oZWlnaHQoKTsgbGluZVkrKykgeworICAgICAgICBWZWN0b3I8aW50PiBpbnRlcnZhbFgxVmFs
dWVzOworICAgICAgICBpZiAoIWdldEludGVydmFsWDFWYWx1ZXMobGluZVksIGxpbmVZICsgbWlu
U2l6ZS5oZWlnaHQoKSwgbWluU2l6ZS53aWR0aCgpLCBpbnRlcnZhbFgxVmFsdWVzKSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgbGluZVJl
Y3RzID0gbGluZVJlZ2lvbi5yZWN0cygpOwotICAgICAgICBBU1NFUlQobGluZVJlY3RzLnNpemUo
KSA+IDApOworICAgICAgICBzdGQ6OnNvcnQoaW50ZXJ2YWxYMVZhbHVlcy5iZWdpbigpLCBpbnRl
cnZhbFgxVmFsdWVzLmVuZCgpKTsKIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGluZVJlY3RzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBJbnRSZWN0IHJlY3QgPSBsaW5l
UmVjdHNbaV07Ci0gICAgICAgICAgICBpZiAocmVjdC53aWR0aCgpID49IG1pblNpemUud2lkdGgo
KSAmJiBsaW5lUmVnaW9uLmNvbnRhaW5zKFJlZ2lvbihJbnRSZWN0KEludFBvaW50KHJlY3QueCgp
LCB5KSwgbWluU2l6ZSkpKSkgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHk7CisgICAgICAg
IEludFJlY3QgZmlyc3RGaXRSZWN0KEludFBvaW50KDAsIDApLCBtaW5TaXplKTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGludGVydmFsWDFWYWx1ZXMuc2l6ZSgpOyBpKyspIHsK
KyAgICAgICAgICAgIGludCBsaW5lWCA9IGludGVydmFsWDFWYWx1ZXNbaV07CisgICAgICAgICAg
ICBpZiAoaSA+IDAgJiYgbGluZVggPT0gaW50ZXJ2YWxYMVZhbHVlc1tpIC0gMV0pCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmaXJzdEZpdFJlY3Quc2V0TG9jYXRpb24o
SW50UG9pbnQobGluZVgsIGxpbmVZKSk7CisgICAgICAgICAgICBpZiAoY29udGFpbnMoZmlyc3RG
aXRSZWN0KSkgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGxpbmVZOwogICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIHJl
dHVybiBmYWxzZTsKLX0KIAotc3RhdGljIGlubGluZSBJbnRSZWN0IGFsaWduZWRSZWN0KEludFJl
Y3QgciwgaW50IHkxLCBpbnQgeTIpCi17Ci0gICAgcmV0dXJuIEludFJlY3Qoci54KCksIHkxLCBy
LndpZHRoKCksIHkyIC0geTEpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSYXN0ZXJT
aGFwZUludGVydmFsczo6Z2V0SW5jbHVkZWRJbnRlcnZhbHMoaW50IHkxLCBpbnQgeTIsIFNlZ21l
bnRMaXN0JiByZXN1bHQpIGNvbnN0Cit2b2lkIFJhc3RlclNoYXBlSW50ZXJ2YWxzOjpnZXRJbmNs
dWRlZEludGVydmFscyhpbnQgeTEsIGludCB5MiwgSW50U2hhcGVJbnRlcnZhbHMmIHJlc3VsdCkg
Y29uc3QKIHsKICAgICBBU1NFUlQoeTIgPj0geTEpOwogCi0gICAgSW50UmVjdCBsaW5lUmVjdChi
b3VuZHMoKS54KCksIHkxLCBib3VuZHMoKS53aWR0aCgpLCB5MiAtIHkxKTsKLSAgICBSZWdpb24g
bGluZVJlZ2lvbihsaW5lUmVjdCk7Ci0gICAgbGluZVJlZ2lvbi5pbnRlcnNlY3QobV9yZWdpb24p
OwotICAgIGlmIChsaW5lUmVnaW9uLmlzRW1wdHkoKSkKKyAgICBpZiAoeTEgPCBib3VuZHMoKS55
KCkgfHwgeTIgPiBib3VuZHMoKS5tYXhZKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnN0
IFZlY3RvcjxJbnRSZWN0PiYgbGluZVJlY3RzID0gbGluZVJlZ2lvbi5yZWN0cygpOwotICAgIEFT
U0VSVChsaW5lUmVjdHMuc2l6ZSgpID4gMCk7Ci0KLSAgICBSZWdpb24gc2VnbWVudHNSZWdpb24o
bGluZVJlY3QpOwotICAgIFJlZ2lvbiBpbnRlcnZhbHNSZWdpb247Ci0KLSAgICAvLyBUaGUgbG9v
cCBiZWxvdyB1c2VzIFJlZ2lvbnMgdG8gY29tcHV0ZSB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSBo
b3Jpem9udGFsCi0gICAgLy8gc2hhcGUgaW50ZXJ2YWxzIHRoYXQgZmFsbCB3aXRoaW4gdGhlIGxp
bmUncyBib3guCi0gICAgaW50IGN1cnJlbnRMaW5lWSA9IGxpbmVSZWN0c1swXS55KCk7Ci0gICAg
aW50IGN1cnJlbnRMaW5lTWF4WSA9IGxpbmVSZWN0c1swXS5tYXhZKCk7Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxpbmVSZWN0cy5zaXplKCk7ICsraSkgewotICAgICAgICBpbnQgbGlu
ZVkgPSBsaW5lUmVjdHNbaV0ueSgpOwotICAgICAgICBBU1NFUlQobGluZVkgPj0gY3VycmVudExp
bmVZKTsKLSAgICAgICAgaWYgKGxpbmVZID4gY3VycmVudExpbmVNYXhZKSB7Ci0gICAgICAgICAg
ICAvLyBXZSd2ZSBlbmNvdW50ZXJlZCBhIHZlcnRpY2FsIGdhcCBpbiBsaW5lUmVjdHMsIHRoZXJl
IGFyZSBubyBpbmNsdWRlZCBpbnRlcnZhbHMuCisgICAgZm9yIChpbnQgeSA9IHkxOyB5IDwgeTI7
ICB5KyspIHsKKyAgICAgICAgaWYgKGdldEludGVydmFscyh5KS5pc0VtcHR5KCkpCiAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxpbmVZID4gY3VycmVudExpbmVZ
KSB7Ci0gICAgICAgICAgICBjdXJyZW50TGluZVkgPSBsaW5lWTsKLSAgICAgICAgICAgIGN1cnJl
bnRMaW5lTWF4WSA9IGxpbmVSZWN0c1tpXS5tYXhZKCk7Ci0gICAgICAgICAgICBzZWdtZW50c1Jl
Z2lvbi5pbnRlcnNlY3QoaW50ZXJ2YWxzUmVnaW9uKTsKLSAgICAgICAgICAgIGludGVydmFsc1Jl
Z2lvbiA9IFJlZ2lvbigpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGN1cnJlbnRMaW5l
TWF4WSA9IHN0ZDo6bWF4PGludD4oY3VycmVudExpbmVNYXhZLCBsaW5lUmVjdHNbaV0ubWF4WSgp
KTsKLSAgICAgICAgaW50ZXJ2YWxzUmVnaW9uLnVuaXRlKFJlZ2lvbihhbGlnbmVkUmVjdChsaW5l
UmVjdHNbaV0sIHkxLCB5MikpKTsKICAgICB9Ci0gICAgaWYgKCFpbnRlcnZhbHNSZWdpb24uaXNF
bXB0eSgpKQotICAgICAgICBzZWdtZW50c1JlZ2lvbi5pbnRlcnNlY3QoaW50ZXJ2YWxzUmVnaW9u
KTsKIAotICAgIGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgc2VnbWVudFJlY3RzID0gc2VnbWVudHNS
ZWdpb24ucmVjdHMoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2VnbWVudFJlY3Rz
LnNpemUoKTsgKytpKQotICAgICAgICByZXN1bHQuYXBwZW5kKExpbmVTZWdtZW50KHNlZ21lbnRS
ZWN0c1tpXS54KCksIHNlZ21lbnRSZWN0c1tpXS5tYXhYKCkpKTsKKyAgICByZXN1bHQgPSBnZXRJ
bnRlcnZhbHMoeTEpOworICAgIGZvciAoaW50IHkgPSB5MSArIDE7IHkgPCB5MiAmJiAhcmVzdWx0
LmlzRW1wdHkoKTsgIHkrKykgeworICAgICAgICBJbnRTaGFwZUludGVydmFscyBpbnRlcnZhbHM7
CisgICAgICAgIEludFNoYXBlSW50ZXJ2YWw6OmludGVyc2VjdFNoYXBlSW50ZXJ2YWxzKHJlc3Vs
dCwgZ2V0SW50ZXJ2YWxzKHkpLCBpbnRlcnZhbHMpOworICAgICAgICByZXN1bHQuc3dhcChpbnRl
cnZhbHMpOworICAgIH0KIH0KIAotdm9pZCBSYXN0ZXJTaGFwZUludGVydmFsczo6Z2V0RXhjbHVk
ZWRJbnRlcnZhbHMoaW50IHkxLCBpbnQgeTIsIFNlZ21lbnRMaXN0JiByZXN1bHQpIGNvbnN0Cit2
b2lkIFJhc3RlclNoYXBlSW50ZXJ2YWxzOjpnZXRFeGNsdWRlZEludGVydmFscyhpbnQgeTEsIGlu
dCB5MiwgSW50U2hhcGVJbnRlcnZhbHMmIHJlc3VsdCkgY29uc3QKIHsKICAgICBBU1NFUlQoeTIg
Pj0geTEpOwogCi0gICAgSW50UmVjdCBsaW5lUmVjdChib3VuZHMoKS54KCksIHkxLCBib3VuZHMo
KS53aWR0aCgpLCB5MiAtIHkxKTsKLSAgICBSZWdpb24gbGluZVJlZ2lvbihsaW5lUmVjdCk7Ci0g
ICAgbGluZVJlZ2lvbi5pbnRlcnNlY3QobV9yZWdpb24pOwotICAgIGlmIChsaW5lUmVnaW9uLmlz
RW1wdHkoKSkKKyAgICBpZiAoeTIgPCBib3VuZHMoKS55KCkgfHwgeTEgPj0gYm91bmRzKCkubWF4
WSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBjb25zdCBWZWN0b3I8SW50UmVjdD4mIGxpbmVS
ZWN0cyA9IGxpbmVSZWdpb24ucmVjdHMoKTsKLSAgICBBU1NFUlQobGluZVJlY3RzLnNpemUoKSA+
IDApOwotCi0gICAgUmVnaW9uIHNlZ21lbnRzUmVnaW9uOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsaW5lUmVjdHMuc2l6ZSgpOyBpKyspCi0gICAgICAgIHNlZ21lbnRzUmVnaW9uLnVu
aXRlKFJlZ2lvbihhbGlnbmVkUmVjdChsaW5lUmVjdHNbaV0sIHkxLCB5MikpKTsKKyAgICBmb3Ig
KGludCB5ID0geTE7IHkgPCB5MjsgIHkrKykgeworICAgICAgICBpZiAoZ2V0SW50ZXJ2YWxzKHkp
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBjb25zdCBWZWN0
b3I8SW50UmVjdD4mIHNlZ21lbnRSZWN0cyA9IHNlZ21lbnRzUmVnaW9uLnJlY3RzKCk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNlZ21lbnRSZWN0cy5zaXplKCk7IGkrKykKLSAgICAg
ICAgcmVzdWx0LmFwcGVuZChMaW5lU2VnbWVudChzZWdtZW50UmVjdHNbaV0ueCgpLCBzZWdtZW50
UmVjdHNbaV0ubWF4WCgpICsgMSkpOworICAgIHJlc3VsdCA9IGdldEludGVydmFscyh5MSk7Cisg
ICAgZm9yIChpbnQgeSA9IHkxICsgMTsgeSA8IHkyOyAgeSsrKSB7CisgICAgICAgIEludFNoYXBl
SW50ZXJ2YWxzIGludGVydmFsczsKKyAgICAgICAgSW50U2hhcGVJbnRlcnZhbDo6dW5pdGVTaGFw
ZUludGVydmFscyhyZXN1bHQsIGdldEludGVydmFscyh5KSwgaW50ZXJ2YWxzKTsKKyAgICAgICAg
cmVzdWx0LnN3YXAoaW50ZXJ2YWxzKTsKKyAgICB9CiB9CiAKIGNvbnN0IFJhc3RlclNoYXBlSW50
ZXJ2YWxzJiBSYXN0ZXJTaGFwZTo6bWFyZ2luSW50ZXJ2YWxzKCkgY29uc3QKQEAgLTE2MSwxOSAr
MTg1LDIxIEBAIGNvbnN0IFJhc3RlclNoYXBlSW50ZXJ2YWxzJiBSYXN0ZXJTaGFwZTo6cGFkZGlu
Z0ludGVydmFscygpIGNvbnN0CiAgICAgcmV0dXJuICptX2ludGVydmFsczsKIH0KIAorc3RhdGlj
IGlubGluZSB2b2lkIGFwcGVuZExpbmVTZWdtZW50cyhjb25zdCBJbnRTaGFwZUludGVydmFscyYg
aW50ZXJ2YWxzLCBTZWdtZW50TGlzdCYgcmVzdWx0KQoreworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBpbnRlcnZhbHMuc2l6ZSgpOyBpKyspCisgICAgICAgIHJlc3VsdC5hcHBlbmQoTGlu
ZVNlZ21lbnQoaW50ZXJ2YWxzW2ldLngxKCksIGludGVydmFsc1tpXS54MigpICsgMSkpOworfQor
CiB2b2lkIFJhc3RlclNoYXBlOjpnZXRFeGNsdWRlZEludGVydmFscyhMYXlvdXRVbml0IGxvZ2lj
YWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgU2VnbWVudExpc3QmIHJlc3VsdCkgY29u
c3QKIHsKICAgICBjb25zdCBSYXN0ZXJTaGFwZUludGVydmFscyYgaW50ZXJ2YWxzID0gbWFyZ2lu
SW50ZXJ2YWxzKCk7CiAgICAgaWYgKGludGVydmFscy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGZsb2F0IHkxID0gbG9naWNhbFRvcDsKLSAgICBmbG9hdCB5MiA9IGxvZ2ljYWxU
b3AgKyBsb2dpY2FsSGVpZ2h0OwotCi0gICAgaWYgKHkyIDwgaW50ZXJ2YWxzLmJvdW5kcygpLnko
KSB8fCB5MSA+PSBpbnRlcnZhbHMuYm91bmRzKCkubWF4WSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpbnRlcnZhbHMuZ2V0RXhjbHVkZWRJbnRlcnZhbHMoeTEsIHkyLCByZXN1bHQpOworICAg
IEludFNoYXBlSW50ZXJ2YWxzIGV4Y2x1ZGVkSW50ZXJ2YWxzOworICAgIGludGVydmFscy5nZXRF
eGNsdWRlZEludGVydmFscyhsb2dpY2FsVG9wLCBsb2dpY2FsVG9wICsgbG9naWNhbEhlaWdodCwg
ZXhjbHVkZWRJbnRlcnZhbHMpOworICAgIGFwcGVuZExpbmVTZWdtZW50cyhleGNsdWRlZEludGVy
dmFscywgcmVzdWx0KTsKIH0KIAogdm9pZCBSYXN0ZXJTaGFwZTo6Z2V0SW5jbHVkZWRJbnRlcnZh
bHMoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNlZ21l
bnRMaXN0JiByZXN1bHQpIGNvbnN0CkBAIC0xODIsMzEgKzIwOCwxOCBAQCB2b2lkIFJhc3RlclNo
YXBlOjpnZXRJbmNsdWRlZEludGVydmFscyhMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVu
aXQgbG9naWNhbAogICAgIGlmIChpbnRlcnZhbHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBmbG9hdCB5MSA9IGxvZ2ljYWxUb3A7Ci0gICAgZmxvYXQgeTIgPSBsb2dpY2FsVG9w
ICsgbG9naWNhbEhlaWdodDsKLQotICAgIGlmICh5MSA8IGludGVydmFscy5ib3VuZHMoKS55KCkg
fHwgeTIgPiBpbnRlcnZhbHMuYm91bmRzKCkubWF4WSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpbnRlcnZhbHMuZ2V0SW5jbHVkZWRJbnRlcnZhbHMoeTEsIHkyLCByZXN1bHQpOworICAgIElu
dFNoYXBlSW50ZXJ2YWxzIGluY2x1ZGVkSW50ZXJ2YWxzOworICAgIGludGVydmFscy5nZXRJbmNs
dWRlZEludGVydmFscyhsb2dpY2FsVG9wLCBsb2dpY2FsVG9wICsgbG9naWNhbEhlaWdodCwgaW5j
bHVkZWRJbnRlcnZhbHMpOworICAgIGFwcGVuZExpbmVTZWdtZW50cyhpbmNsdWRlZEludGVydmFs
cywgcmVzdWx0KTsKIH0KIAogYm9vbCBSYXN0ZXJTaGFwZTo6Zmlyc3RJbmNsdWRlZEludGVydmFs
TG9naWNhbFRvcChMYXlvdXRVbml0IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCwgY29uc3QgTGF5b3V0
U2l6ZSYgbWluTG9naWNhbEludGVydmFsU2l6ZSwgTGF5b3V0VW5pdCYgcmVzdWx0KSBjb25zdAog
ewotICAgIGZsb2F0IG1pbkludGVydmFsVG9wID0gbWluTG9naWNhbEludGVydmFsVG9wOwotICAg
IGZsb2F0IG1pbkludGVydmFsSGVpZ2h0ID0gbWluTG9naWNhbEludGVydmFsU2l6ZS5oZWlnaHQo
KTsKLSAgICBmbG9hdCBtaW5JbnRlcnZhbFdpZHRoID0gbWluTG9naWNhbEludGVydmFsU2l6ZS53
aWR0aCgpOwotCiAgICAgY29uc3QgUmFzdGVyU2hhcGVJbnRlcnZhbHMmIGludGVydmFscyA9IHBh
ZGRpbmdJbnRlcnZhbHMoKTsKLSAgICBpZiAoaW50ZXJ2YWxzLmlzRW1wdHkoKSB8fCBtaW5JbnRl
cnZhbFdpZHRoID4gaW50ZXJ2YWxzLmJvdW5kcygpLndpZHRoKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGZsb2F0IG1pblkgPSBzdGQ6Om1heDxmbG9hdD4oaW50ZXJ2YWxzLmJvdW5k
cygpLnkoKSwgbWluSW50ZXJ2YWxUb3ApOwotICAgIGZsb2F0IG1heFkgPSBtaW5ZICsgbWluSW50
ZXJ2YWxIZWlnaHQ7Ci0gICAgaWYgKG1heFkgPiBpbnRlcnZhbHMuYm91bmRzKCkubWF4WSgpKQor
ICAgIGlmIChpbnRlcnZhbHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICByZXR1cm4gaW50ZXJ2YWxzLmZpcnN0SW5jbHVkZWRJbnRlcnZhbFkobWluWSwgZmxvb3JlZElu
dFNpemUobWluTG9naWNhbEludGVydmFsU2l6ZSksIHJlc3VsdCk7CisgICAgcmV0dXJuIGludGVy
dmFscy5maXJzdEluY2x1ZGVkSW50ZXJ2YWxZKG1pbkxvZ2ljYWxJbnRlcnZhbFRvcC5mbG9vcigp
LCBmbG9vcmVkSW50U2l6ZShtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplKSwgcmVzdWx0KTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3NoYXBlcy9SYXN0ZXJTaGFwZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBl
cy9SYXN0ZXJTaGFwZS5oCmluZGV4IDk0NzJlMGMuLmYxNzlhNzAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvUmFzdGVyU2hhcGUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc2hhcGVzL1Jhc3RlclNoYXBlLmgKQEAgLTMxLDggKzMxLDggQEAKICNk
ZWZpbmUgUmFzdGVyU2hhcGVfaAogCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAi
UmVnaW9uLmgiCiAjaW5jbHVkZSAiU2hhcGUuaCIKKyNpbmNsdWRlICJTaGFwZUludGVydmFsLmgi
CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAK
QEAgLTQwLDE4ICs0MCwzMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFJhc3RlclNo
YXBlSW50ZXJ2YWxzIHsKIHB1YmxpYzoKLSAgICBSYXN0ZXJTaGFwZUludGVydmFscygpIHsgfQor
ICAgIFJhc3RlclNoYXBlSW50ZXJ2YWxzKHVuc2lnbmVkIHNpemUpCisgICAgeworICAgICAgICBt
X2ludGVydmFsTGlzdHMucmVzaXplKHNpemUpOworICAgIH0KKworICAgIGNvbnN0IEludFJlY3Qm
IGJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRzOyB9CisgICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3QgeyByZXR1cm4gbV9ib3VuZHMuaXNFbXB0eSgpOyB9CisgICAgdm9pZCBhcHBlbmRJbnRl
cnZhbChpbnQgeSwgaW50IHgxLCBpbnQgeDIpOwogCi0gICAgSW50UmVjdCBib3VuZHMoKSBjb25z
dDsKLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCAgeyByZXR1cm4gbV9yZWdpb24uaXNFbXB0eSgp
OyB9Ci0gICAgdm9pZCBhZGRJbnRlcnZhbChpbnQgeSwgaW50IHgxLCBpbnQgeDIpOwotICAgIHZv
aWQgZ2V0SW5jbHVkZWRJbnRlcnZhbHMoaW50IHkxLCBpbnQgeTIsIFNlZ21lbnRMaXN0JikgY29u
c3Q7Ci0gICAgdm9pZCBnZXRFeGNsdWRlZEludGVydmFscyhpbnQgeTEsIGludCB5MiwgU2VnbWVu
dExpc3QmKSBjb25zdDsKLSAgICBib29sIGZpcnN0SW5jbHVkZWRJbnRlcnZhbFkoaW50IG1pblks
IGNvbnN0IEludFNpemUmIG1pbkludGVydmFsU2l6ZSwgTGF5b3V0VW5pdCYpIGNvbnN0OworICAg
IHZvaWQgZ2V0SW5jbHVkZWRJbnRlcnZhbHMoaW50IHkxLCBpbnQgeTIsIEludFNoYXBlSW50ZXJ2
YWxzJiByZXN1bHQpIGNvbnN0OworICAgIHZvaWQgZ2V0RXhjbHVkZWRJbnRlcnZhbHMoaW50IHkx
LCBpbnQgeTIsIEludFNoYXBlSW50ZXJ2YWxzJiByZXN1bHQpIGNvbnN0OworICAgIGJvb2wgZmly
c3RJbmNsdWRlZEludGVydmFsWShpbnQgbWluWSwgY29uc3QgSW50U2l6ZSYgbWluU2l6ZSwgTGF5
b3V0VW5pdCYgcmVzdWx0KSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBSZWdpb24gbV9yZWdpb247
Ci0gICAgbXV0YWJsZSBPd25QdHI8SW50UmVjdD4gbV9ib3VuZHM7IC8vIENhY2hlZCB2YWx1ZSBv
ZiBtX3JlZ2lvbi5ib3VuZHMoKS4KKyAgICBpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW50
ZXJ2YWxMaXN0cy5zaXplKCk7IH0KKyAgICBjb25zdCBJbnRTaGFwZUludGVydmFscyYgZ2V0SW50
ZXJ2YWxzKGludCB5KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKHkgPj0gMCAmJiB5IDwg
c2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuIG1faW50ZXJ2YWxMaXN0c1t5XTsKKyAgICB9CisgICAg
Ym9vbCBjb250YWlucyhjb25zdCBJbnRSZWN0JikgY29uc3Q7CisgICAgYm9vbCBnZXRJbnRlcnZh
bFgxVmFsdWVzKGludCBtaW5ZLCBpbnQgbWF4WSwgaW50IG1pbkludGVydmFsV2lkdGgsIFZlY3Rv
cjxpbnQ+JiByZXN1bHQpIGNvbnN0OworCisgICAgSW50UmVjdCBtX2JvdW5kczsKKyAgICBWZWN0
b3I8SW50U2hhcGVJbnRlcnZhbHMgPiBtX2ludGVydmFsTGlzdHM7CiB9OwogCiBjbGFzcyBSYXN0
ZXJTaGFwZSA6IHB1YmxpYyBTaGFwZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc2hhcGVzL1NoYXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMv
U2hhcGUuY3BwCmluZGV4IGIzYjlkNmQuLmQwNGU4MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zaGFwZXMvU2hhcGUuY3BwCkBAIC0yMDcsMTAgKzIwNywxMSBAQCBQYXNzT3duUHRyPFNo
YXBlPiBTaGFwZTo6Y3JlYXRlU2hhcGUoY29uc3QgU3R5bGVJbWFnZSogc3R5bGVJbWFnZSwgZmxv
YXQgdGhyZXNobwogewogICAgIEFTU0VSVChzdHlsZUltYWdlICYmIHN0eWxlSW1hZ2UtPmlzQ2Fj
aGVkSW1hZ2UoKSAmJiBzdHlsZUltYWdlLT5jYWNoZWRJbWFnZSgpICYmIHN0eWxlSW1hZ2UtPmNh
Y2hlZEltYWdlKCktPmltYWdlKCkpOwogCi0gICAgT3duUHRyPFJhc3RlclNoYXBlSW50ZXJ2YWxz
PiBpbnRlcnZhbHMgPSBhZG9wdFB0cihuZXcgUmFzdGVyU2hhcGVJbnRlcnZhbHMoKSk7Ci0KICAg
ICBJbWFnZSogaW1hZ2UgPSBzdHlsZUltYWdlLT5jYWNoZWRJbWFnZSgpLT5pbWFnZSgpOwogICAg
IGNvbnN0IEludFNpemUmIGltYWdlU2l6ZSA9IGltYWdlLT5zaXplKCk7CisKKyAgICBPd25QdHI8
UmFzdGVyU2hhcGVJbnRlcnZhbHM+IGludGVydmFscyA9IGFkb3B0UHRyKG5ldyBSYXN0ZXJTaGFw
ZUludGVydmFscyhpbWFnZVNpemUuaGVpZ2h0KCkpKTsKKwogICAgIE93blB0cjxJbWFnZUJ1ZmZl
cj4gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGltYWdlU2l6ZSk7CiAgICAgaWYg
KGltYWdlQnVmZmVyKSB7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0
ID0gaW1hZ2VCdWZmZXItPmNvbnRleHQoKTsKQEAgLTIzMCw3ICsyMzEsNyBAQCBQYXNzT3duUHRy
PFNoYXBlPiBTaGFwZTo6Y3JlYXRlU2hhcGUoY29uc3QgU3R5bGVJbWFnZSogc3R5bGVJbWFnZSwg
ZmxvYXQgdGhyZXNobwogICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnRYID09IC0xICYmIGFs
cGhhQWJvdmVUaHJlc2hvbGQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0WCA9IHg7
CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRYICE9IC0xICYmICghYWxwaGFB
Ym92ZVRocmVzaG9sZCB8fCB4ID09IGltYWdlU2l6ZS53aWR0aCgpIC0gMSkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGludGVydmFscy0+YWRkSW50ZXJ2YWwoeSwgc3RhcnRYLCB4KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGludGVydmFscy0+YXBwZW5kSW50ZXJ2YWwoeSwgc3RhcnRY
LCB4KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0WCA9IC0xOwogICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3NoYXBlcy9TaGFwZUludGVydmFsLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc2hhcGVzL1NoYXBlSW50ZXJ2YWwuaAppbmRleCBiZjBiYzA4Li44NGE1YTlhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW50ZXJ2YWwuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW50ZXJ2YWwuaApAQCAtNDcs
NiArNDcsNyBAQCBwdWJsaWM6CiAKICAgICBUIHgxKCkgY29uc3QgeyByZXR1cm4gbV94MTsgfQog
ICAgIFQgeDIoKSBjb25zdCB7IHJldHVybiBtX3gyOyB9CisgICAgVCB3aWR0aCgpIGNvbnN0IHsg
cmV0dXJuIG1feDIgLSBtX3gxOyB9CiAKICAgICB2b2lkIHNldFgxKFQgeDEpCiAgICAgewo=
</data>
<flag name="commit-queue"
          id="233456"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211374</attachid>
            <date>2013-09-11 17:47:15 -0700</date>
            <delta_ts>2013-09-11 18:20:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>tmp.patch</filename>
            <type>text/plain</type>
            <size>16531</size>
            <attacher name="Hans Muller">giles_joplin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiMzk1NDMyLi4wNDQ2MWQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYg
QEAKKzIwMTMtMDktMDQgIEhhbnMgTXVsbGVyICA8aG11bGxlckBhZG9iZS5jb20+CisKKyAgICAg
ICAgW0NTUyBTaGFwZXNdIEltcHJvdmUgdGhlIHBlcmZvcm1hbmNlIG9mIGltYWdlIHZhbHVlZCBz
aGFwZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEy
MDIxMQorCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXhhbmRydSBDaGljdWxpdGEuCisKKyAgICAg
ICAgUmVwbGFjZWQgdGhlIGltcGxlbWVudGF0aW9uIG9mIFJhc3RlclNoYXBlSW50ZXJ2YWxzIHdp
dGggb25lIGJhc2VkIG9uIHRoZQorICAgICAgICBuZXcgU2hhcGVJbnRlcnZhbDxpbnQ+IGNsYXNz
LiBUaGlzIGVsaW1pbmF0ZXMgdGhlIGRlcGVuZGVuY3kgdGhlIFJlZ2lvbiBjbGFzcworICAgICAg
ICBhbmQgZGVsaXZlcnMgYSAxMFggbGF5b3V0IHNwZWVkdXAgZm9yIGxhcmdlIGltYWdlIHZhbHVl
ZCBzaGFwZXMuCisKKyAgICAgICAgVGhpcyBhIGp1c3QgYW4gaW1wbGVtZW50YXRpb24gcmVmYWN0
b3JpbmcsIG5vIG5ldyB0ZXN0cyB3ZXJlIG5lZWRlZC4KKworICAgICAgICAqIHJlbmRlcmluZy9z
aGFwZXMvUmFzdGVyU2hhcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmFzdGVyU2hhcGVJbnRl
cnZhbHM6OmFwcGVuZEludGVydmFsKTogUmVuYW1lZCB0aGlzIG1ldGhvZCwgaXQgd2FzIGNhbGxl
ZCBhZGRJbnRlcnZhbCgpLgorICAgICAgICAoV2ViQ29yZTo6c2hhcGVJbnRlcnZhbHNDb250YWlu
KToKKyAgICAgICAgKFdlYkNvcmU6OlJhc3RlclNoYXBlSW50ZXJ2YWxzOjpjb250YWlucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSYXN0ZXJTaGFwZUludGVydmFsczo6Z2V0SW50ZXJ2YWxzSW5MaW5l
KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXBhcmVYMSk6CisgICAgICAgIChXZWJDb3JlOjpSYXN0
ZXJTaGFwZUludGVydmFsczo6Zmlyc3RJbmNsdWRlZEludGVydmFsWSk6CisgICAgICAgIChXZWJD
b3JlOjpSYXN0ZXJTaGFwZUludGVydmFsczo6Z2V0SW5jbHVkZWRJbnRlcnZhbHMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmFzdGVyU2hhcGVJbnRlcnZhbHM6OmdldEV4Y2x1ZGVkSW50ZXJ2YWxzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJhc3RlclNoYXBlOjpnZXRFeGNsdWRlZEludGVydmFscyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSYXN0ZXJTaGFwZTo6Z2V0SW5jbHVkZWRJbnRlcnZhbHMpOgorICAg
ICAgICAqIHJlbmRlcmluZy9zaGFwZXMvUmFzdGVyU2hhcGUuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlJhc3RlclNoYXBlSW50ZXJ2YWxzOjpSYXN0ZXJTaGFwZUludGVydmFscyk6IFRoZSBjb25zdHJ1
Y3RvciBub3cgdGFrZXMgYSBzaXplIGFyZ3VtZW50IHdoaWNoIGlzIHVzZWQgdG8gYWxsb2NhdGUg
SW50U2hhcGVJbnRlcnZhbHMgc3RvcmFnZS4KKyAgICAgICAgKFdlYkNvcmU6OlJhc3RlclNoYXBl
SW50ZXJ2YWxzOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJhc3RlclNoYXBlSW50ZXJ2YWxz
Ojpib3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6UmFzdGVyU2hhcGVJbnRlcnZhbHM6OmlzRW1w
dHkpOgorICAgICAgICAoV2ViQ29yZTo6UmFzdGVyU2hhcGVJbnRlcnZhbHM6OmdldEludGVydmFs
cyk6CisgICAgICAgICogcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTaGFwZTo6Y3JlYXRlU2hhcGUpOiBVc2UgYXBwZW5kSW50ZXJ2YWwoKSBpbnN0ZWFkIG9m
IGFkZEludGVydmFsKCkgKHNlZSBhYm92ZSkgYW5kIHRoZSBuZXcgUmFzdGVyU2hhcGVJbnRlcnZh
bHMgY29uc3RydWN0b3IuCisKIDIwMTMtMDktMTEgIFRoaWFnbyBkZSBCYXJyb3MgTGFjZXJkYSAg
PHRoaWFnby5sYWNlcmRhQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAgTWVkaWFTdHJlYW0gQVBJ
OiBSZW1vdmUgTG9jYWxNZWRpYVN0cmVhbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3NoYXBlcy9SYXN0ZXJTaGFwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c2hhcGVzL1Jhc3RlclNoYXBlLmNwcAppbmRleCA0ZWI4YWViLi5kN2Y0MDYxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1Jhc3RlclNoYXBlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1Jhc3RlclNoYXBlLmNwcApAQCAtMzAsMTE1
ICszMCwxMzkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSYXN0ZXJTaGFwZS5o
IgogCi0jaW5jbHVkZSAiU2hhcGVJbnRlcnZhbC5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFz
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSW50UmVjdCBSYXN0ZXJTaGFwZUludGVydmFs
czo6Ym91bmRzKCkgY29uc3QKK3ZvaWQgUmFzdGVyU2hhcGVJbnRlcnZhbHM6OmFwcGVuZEludGVy
dmFsKGludCB5LCBpbnQgeDEsIGludCB4MikKIHsKLSAgICBpZiAoIW1fYm91bmRzKQotICAgICAg
ICBtX2JvdW5kcyA9IGFkb3B0UHRyKG5ldyBJbnRSZWN0KG1fcmVnaW9uLmJvdW5kcygpKSk7Ci0g
ICAgcmV0dXJuICptX2JvdW5kczsKKyAgICBBU1NFUlQoeSA+PSAwICYmIHkgPCBzaXplKCkgJiYg
eDEgPj0gMCAmJiB4MiA+IHgxICYmIChtX2ludGVydmFsTGlzdHNbeV0uaXNFbXB0eSgpIHx8IHgx
ID4gbV9pbnRlcnZhbExpc3RzW3ldLmxhc3QoKS54MigpKSk7CisKKyAgICBtX2JvdW5kcy51bml0
ZShJbnRSZWN0KHgxLCB5LCB4MiAtIHgxLCAxKSk7CisgICAgbV9pbnRlcnZhbExpc3RzW3ldLmFw
cGVuZChJbnRTaGFwZUludGVydmFsKHgxLCB4MikpOwogfQogCi12b2lkIFJhc3RlclNoYXBlSW50
ZXJ2YWxzOjphZGRJbnRlcnZhbChpbnQgeSwgaW50IHgxLCBpbnQgeDIpCitzdGF0aWMgaW5saW5l
IGJvb2wgc2hhcGVJbnRlcnZhbHNDb250YWluKGNvbnN0IEludFNoYXBlSW50ZXJ2YWxzJiBpbnRl
cnZhbHMsIGNvbnN0IEludFNoYXBlSW50ZXJ2YWwmIGludGVydmFsKQogewotICAgIG1fcmVnaW9u
LnVuaXRlKFJlZ2lvbihJbnRSZWN0KHgxLCB5LCB4MiAtIHgxLCAxKSkpOwotICAgIG1fYm91bmRz
LmNsZWFyKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGludGVydmFscy5zaXplKCk7
IGkrKykgeworICAgICAgICBpZiAoaW50ZXJ2YWxzW2ldLngxKCkgPiBpbnRlcnZhbC54MigpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoaW50ZXJ2YWxzW2ldLmNvbnRh
aW5zKGludGVydmFsKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBSYXN0ZXJTaGFwZUludGVydmFsczo6Y29udGFpbnMoY29u
c3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBpZiAoIWJvdW5kcygpLmNvbnRhaW5zKHJl
Y3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBJbnRTaGFwZUludGVydmFs
JiByZWN0SW50ZXJ2YWwgPSBJbnRTaGFwZUludGVydmFsKHJlY3QueCgpLCByZWN0Lm1heFgoKSk7
CisgICAgZm9yIChpbnQgeSA9IHJlY3QueSgpOyB5IDwgcmVjdC5tYXhZKCk7IHkrKykgeworICAg
ICAgICBpZiAoIXNoYXBlSW50ZXJ2YWxzQ29udGFpbihnZXRJbnRlcnZhbHMoeSksIHJlY3RJbnRl
cnZhbCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmRYMVZhbHVlcyhjb25zdCBJbnRTaGFw
ZUludGVydmFscyYgaW50ZXJ2YWxzLCBpbnQgbWluSW50ZXJ2YWxXaWR0aCwgVmVjdG9yPGludD4m
IHJlc3VsdCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW50ZXJ2YWxzLnNpemUo
KTsgaSsrKQorICAgICAgICBpZiAoaW50ZXJ2YWxzW2ldLndpZHRoKCkgPj0gbWluSW50ZXJ2YWxX
aWR0aCkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoaW50ZXJ2YWxzW2ldLngxKCkpOworfQor
Citib29sIFJhc3RlclNoYXBlSW50ZXJ2YWxzOjpnZXRJbnRlcnZhbFgxVmFsdWVzKGludCB5MSwg
aW50IHkyLCBpbnQgbWluSW50ZXJ2YWxXaWR0aCwgVmVjdG9yPGludD4mIHJlc3VsdCkgY29uc3QK
K3sKKyAgICBBU1NFUlQoeTEgPj0gMCAmJiB5MiA+IHkxKTsKKworICAgIGZvciAoaW50IHkgPSB5
MTsgeSA8IHkyOyAgeSsrKSB7CisgICAgICAgIGlmIChnZXRJbnRlcnZhbHMoeSkuaXNFbXB0eSgp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGFwcGVuZFgxVmFsdWVz
KGdldEludGVydmFscyh5MSksIG1pbkludGVydmFsV2lkdGgsIHJlc3VsdCk7CisgICAgZm9yIChp
bnQgeSA9IHkxICsgMTsgeSA8IHkyOyAgeSsrKSB7CisgICAgICAgIGlmIChnZXRJbnRlcnZhbHMo
eSkgIT0gZ2V0SW50ZXJ2YWxzKHkgLSAxKSkKKyAgICAgICAgICAgIGFwcGVuZFgxVmFsdWVzKGdl
dEludGVydmFscyh5KSwgbWluSW50ZXJ2YWxXaWR0aCwgcmVzdWx0KTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBSYXN0ZXJTaGFwZUludGVydmFsczo6Zmlyc3RJbmNsdWRl
ZEludGVydmFsWShpbnQgbWluWSwgY29uc3QgSW50U2l6ZSYgbWluU2l6ZSwgTGF5b3V0VW5pdCYg
cmVzdWx0KSBjb25zdAogewotICAgIGZvciAoaW50IHkgPSBtaW5ZOyB5IDw9IGJvdW5kcygpLm1h
eFkoKSAtIG1pblNpemUuaGVpZ2h0KCk7IHkrKykgewotICAgICAgICBSZWdpb24gbGluZVJlZ2lv
bihJbnRSZWN0KGJvdW5kcygpLngoKSwgeSwgYm91bmRzKCkud2lkdGgoKSwgbWluU2l6ZS5oZWln
aHQoKSkpOwotICAgICAgICBsaW5lUmVnaW9uLmludGVyc2VjdChtX3JlZ2lvbik7Ci0gICAgICAg
IGlmIChsaW5lUmVnaW9uLmlzRW1wdHkoKSkKKyAgICBtaW5ZID0gc3RkOjptYXg8aW50Pihib3Vu
ZHMoKS55KCksIG1pblkpOworCisgICAgQVNTRVJUKG1pblkgPj0gMCAmJiBtaW5ZICsgbWluU2l6
ZS5oZWlnaHQoKSA8IHNpemUoKSk7CisKKyAgICBpZiAobWluU2l6ZS5pc0VtcHR5KCkgfHwgbWlu
U2l6ZS53aWR0aCgpID4gYm91bmRzKCkud2lkdGgoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgZm9yIChpbnQgbGluZVkgPSBtaW5ZOyBsaW5lWSA8PSBib3VuZHMoKS5tYXhZKCkgLSBt
aW5TaXplLmhlaWdodCgpOyBsaW5lWSsrKSB7CisgICAgICAgIFZlY3RvcjxpbnQ+IGludGVydmFs
WDFWYWx1ZXM7CisgICAgICAgIGlmICghZ2V0SW50ZXJ2YWxYMVZhbHVlcyhsaW5lWSwgbGluZVkg
KyBtaW5TaXplLmhlaWdodCgpLCBtaW5TaXplLndpZHRoKCksIGludGVydmFsWDFWYWx1ZXMpKQog
ICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgY29uc3QgVmVjdG9yPEludFJlY3Q+JiBs
aW5lUmVjdHMgPSBsaW5lUmVnaW9uLnJlY3RzKCk7Ci0gICAgICAgIEFTU0VSVChsaW5lUmVjdHMu
c2l6ZSgpID4gMCk7CisgICAgICAgIHN0ZDo6c29ydChpbnRlcnZhbFgxVmFsdWVzLmJlZ2luKCks
IGludGVydmFsWDFWYWx1ZXMuZW5kKCkpOwogCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsaW5lUmVjdHMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIEludFJlY3QgcmVjdCA9
IGxpbmVSZWN0c1tpXTsKLSAgICAgICAgICAgIGlmIChyZWN0LndpZHRoKCkgPj0gbWluU2l6ZS53
aWR0aCgpICYmIGxpbmVSZWdpb24uY29udGFpbnMoUmVnaW9uKEludFJlY3QoSW50UG9pbnQocmVj
dC54KCksIHkpLCBtaW5TaXplKSkpKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0geTsKKyAg
ICAgICAgSW50UmVjdCBmaXJzdEZpdFJlY3QoSW50UG9pbnQoMCwgMCksIG1pblNpemUpOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW50ZXJ2YWxYMVZhbHVlcy5zaXplKCk7IGkr
KykgeworICAgICAgICAgICAgaW50IGxpbmVYID0gaW50ZXJ2YWxYMVZhbHVlc1tpXTsKKyAgICAg
ICAgICAgIGlmIChpID4gMCAmJiBsaW5lWCA9PSBpbnRlcnZhbFgxVmFsdWVzW2kgLSAxXSkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZpcnN0Rml0UmVjdC5zZXRMb2Nh
dGlvbihJbnRQb2ludChsaW5lWCwgbGluZVkpKTsKKyAgICAgICAgICAgIGlmIChjb250YWlucyhm
aXJzdEZpdFJlY3QpKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbGluZVk7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQogCi1zdGF0aWMgaW5saW5lIEludFJlY3QgYWxpZ25lZFJlY3Qo
SW50UmVjdCByLCBpbnQgeTEsIGludCB5MikKLXsKLSAgICByZXR1cm4gSW50UmVjdChyLngoKSwg
eTEsIHIud2lkdGgoKSwgeTIgLSB5MSk7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJh
c3RlclNoYXBlSW50ZXJ2YWxzOjpnZXRJbmNsdWRlZEludGVydmFscyhpbnQgeTEsIGludCB5Miwg
U2VnbWVudExpc3QmIHJlc3VsdCkgY29uc3QKK3ZvaWQgUmFzdGVyU2hhcGVJbnRlcnZhbHM6Omdl
dEluY2x1ZGVkSW50ZXJ2YWxzKGludCB5MSwgaW50IHkyLCBJbnRTaGFwZUludGVydmFscyYgcmVz
dWx0KSBjb25zdAogewogICAgIEFTU0VSVCh5MiA+PSB5MSk7CiAKLSAgICBJbnRSZWN0IGxpbmVS
ZWN0KGJvdW5kcygpLngoKSwgeTEsIGJvdW5kcygpLndpZHRoKCksIHkyIC0geTEpOwotICAgIFJl
Z2lvbiBsaW5lUmVnaW9uKGxpbmVSZWN0KTsKLSAgICBsaW5lUmVnaW9uLmludGVyc2VjdChtX3Jl
Z2lvbik7Ci0gICAgaWYgKGxpbmVSZWdpb24uaXNFbXB0eSgpKQorICAgIGlmICh5MSA8IGJvdW5k
cygpLnkoKSB8fCB5MiA+IGJvdW5kcygpLm1heFkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
Y29uc3QgVmVjdG9yPEludFJlY3Q+JiBsaW5lUmVjdHMgPSBsaW5lUmVnaW9uLnJlY3RzKCk7Ci0g
ICAgQVNTRVJUKGxpbmVSZWN0cy5zaXplKCkgPiAwKTsKLQotICAgIFJlZ2lvbiBzZWdtZW50c1Jl
Z2lvbihsaW5lUmVjdCk7Ci0gICAgUmVnaW9uIGludGVydmFsc1JlZ2lvbjsKLQotICAgIC8vIFRo
ZSBsb29wIGJlbG93IHVzZXMgUmVnaW9ucyB0byBjb21wdXRlIHRoZSBpbnRlcnNlY3Rpb24gb2Yg
dGhlIGhvcml6b250YWwKLSAgICAvLyBzaGFwZSBpbnRlcnZhbHMgdGhhdCBmYWxsIHdpdGhpbiB0
aGUgbGluZSdzIGJveC4KLSAgICBpbnQgY3VycmVudExpbmVZID0gbGluZVJlY3RzWzBdLnkoKTsK
LSAgICBpbnQgY3VycmVudExpbmVNYXhZID0gbGluZVJlY3RzWzBdLm1heFkoKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGluZVJlY3RzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlu
dCBsaW5lWSA9IGxpbmVSZWN0c1tpXS55KCk7Ci0gICAgICAgIEFTU0VSVChsaW5lWSA+PSBjdXJy
ZW50TGluZVkpOwotICAgICAgICBpZiAobGluZVkgPiBjdXJyZW50TGluZU1heFkpIHsKLSAgICAg
ICAgICAgIC8vIFdlJ3ZlIGVuY291bnRlcmVkIGEgdmVydGljYWwgZ2FwIGluIGxpbmVSZWN0cywg
dGhlcmUgYXJlIG5vIGluY2x1ZGVkIGludGVydmFscy4KKyAgICBmb3IgKGludCB5ID0geTE7IHkg
PCB5MjsgIHkrKykgeworICAgICAgICBpZiAoZ2V0SW50ZXJ2YWxzKHkpLmlzRW1wdHkoKSkKICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBpZiAobGluZVkgPiBjdXJyZW50
TGluZVkpIHsKLSAgICAgICAgICAgIGN1cnJlbnRMaW5lWSA9IGxpbmVZOwotICAgICAgICAgICAg
Y3VycmVudExpbmVNYXhZID0gbGluZVJlY3RzW2ldLm1heFkoKTsKLSAgICAgICAgICAgIHNlZ21l
bnRzUmVnaW9uLmludGVyc2VjdChpbnRlcnZhbHNSZWdpb24pOwotICAgICAgICAgICAgaW50ZXJ2
YWxzUmVnaW9uID0gUmVnaW9uKCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY3VycmVu
dExpbmVNYXhZID0gc3RkOjptYXg8aW50PihjdXJyZW50TGluZU1heFksIGxpbmVSZWN0c1tpXS5t
YXhZKCkpOwotICAgICAgICBpbnRlcnZhbHNSZWdpb24udW5pdGUoUmVnaW9uKGFsaWduZWRSZWN0
KGxpbmVSZWN0c1tpXSwgeTEsIHkyKSkpOwogICAgIH0KLSAgICBpZiAoIWludGVydmFsc1JlZ2lv
bi5pc0VtcHR5KCkpCi0gICAgICAgIHNlZ21lbnRzUmVnaW9uLmludGVyc2VjdChpbnRlcnZhbHNS
ZWdpb24pOwogCi0gICAgY29uc3QgVmVjdG9yPEludFJlY3Q+JiBzZWdtZW50UmVjdHMgPSBzZWdt
ZW50c1JlZ2lvbi5yZWN0cygpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzZWdtZW50
UmVjdHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoTGluZVNlZ21lbnQoc2Vn
bWVudFJlY3RzW2ldLngoKSwgc2VnbWVudFJlY3RzW2ldLm1heFgoKSkpOworICAgIHJlc3VsdCA9
IGdldEludGVydmFscyh5MSk7CisgICAgZm9yIChpbnQgeSA9IHkxICsgMTsgeSA8IHkyICYmICFy
ZXN1bHQuaXNFbXB0eSgpOyAgeSsrKSB7CisgICAgICAgIEludFNoYXBlSW50ZXJ2YWxzIGludGVy
dmFsczsKKyAgICAgICAgSW50U2hhcGVJbnRlcnZhbDo6aW50ZXJzZWN0U2hhcGVJbnRlcnZhbHMo
cmVzdWx0LCBnZXRJbnRlcnZhbHMoeSksIGludGVydmFscyk7CisgICAgICAgIHJlc3VsdC5zd2Fw
KGludGVydmFscyk7CisgICAgfQogfQogCi12b2lkIFJhc3RlclNoYXBlSW50ZXJ2YWxzOjpnZXRF
eGNsdWRlZEludGVydmFscyhpbnQgeTEsIGludCB5MiwgU2VnbWVudExpc3QmIHJlc3VsdCkgY29u
c3QKK3ZvaWQgUmFzdGVyU2hhcGVJbnRlcnZhbHM6OmdldEV4Y2x1ZGVkSW50ZXJ2YWxzKGludCB5
MSwgaW50IHkyLCBJbnRTaGFwZUludGVydmFscyYgcmVzdWx0KSBjb25zdAogewogICAgIEFTU0VS
VCh5MiA+PSB5MSk7CiAKLSAgICBJbnRSZWN0IGxpbmVSZWN0KGJvdW5kcygpLngoKSwgeTEsIGJv
dW5kcygpLndpZHRoKCksIHkyIC0geTEpOwotICAgIFJlZ2lvbiBsaW5lUmVnaW9uKGxpbmVSZWN0
KTsKLSAgICBsaW5lUmVnaW9uLmludGVyc2VjdChtX3JlZ2lvbik7Ci0gICAgaWYgKGxpbmVSZWdp
b24uaXNFbXB0eSgpKQorICAgIGlmICh5MiA8IGJvdW5kcygpLnkoKSB8fCB5MSA+PSBib3VuZHMo
KS5tYXhZKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYg
bGluZVJlY3RzID0gbGluZVJlZ2lvbi5yZWN0cygpOwotICAgIEFTU0VSVChsaW5lUmVjdHMuc2l6
ZSgpID4gMCk7Ci0KLSAgICBSZWdpb24gc2VnbWVudHNSZWdpb247Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxpbmVSZWN0cy5zaXplKCk7IGkrKykKLSAgICAgICAgc2VnbWVudHNSZWdp
b24udW5pdGUoUmVnaW9uKGFsaWduZWRSZWN0KGxpbmVSZWN0c1tpXSwgeTEsIHkyKSkpOworICAg
IGZvciAoaW50IHkgPSB5MTsgeSA8IHkyOyAgeSsrKSB7CisgICAgICAgIGlmIChnZXRJbnRlcnZh
bHMoeSkuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGNvbnN0
IFZlY3RvcjxJbnRSZWN0PiYgc2VnbWVudFJlY3RzID0gc2VnbWVudHNSZWdpb24ucmVjdHMoKTsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2VnbWVudFJlY3RzLnNpemUoKTsgaSsrKQot
ICAgICAgICByZXN1bHQuYXBwZW5kKExpbmVTZWdtZW50KHNlZ21lbnRSZWN0c1tpXS54KCksIHNl
Z21lbnRSZWN0c1tpXS5tYXhYKCkgKyAxKSk7CisgICAgcmVzdWx0ID0gZ2V0SW50ZXJ2YWxzKHkx
KTsKKyAgICBmb3IgKGludCB5ID0geTEgKyAxOyB5IDwgeTI7ICB5KyspIHsKKyAgICAgICAgSW50
U2hhcGVJbnRlcnZhbHMgaW50ZXJ2YWxzOworICAgICAgICBJbnRTaGFwZUludGVydmFsOjp1bml0
ZVNoYXBlSW50ZXJ2YWxzKHJlc3VsdCwgZ2V0SW50ZXJ2YWxzKHkpLCBpbnRlcnZhbHMpOworICAg
ICAgICByZXN1bHQuc3dhcChpbnRlcnZhbHMpOworICAgIH0KIH0KIAogY29uc3QgUmFzdGVyU2hh
cGVJbnRlcnZhbHMmIFJhc3RlclNoYXBlOjptYXJnaW5JbnRlcnZhbHMoKSBjb25zdApAQCAtMTYx
LDE5ICsxODUsMjEgQEAgY29uc3QgUmFzdGVyU2hhcGVJbnRlcnZhbHMmIFJhc3RlclNoYXBlOjpw
YWRkaW5nSW50ZXJ2YWxzKCkgY29uc3QKICAgICByZXR1cm4gKm1faW50ZXJ2YWxzOwogfQogCitz
dGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kTGluZVNlZ21lbnRzKGNvbnN0IEludFNoYXBlSW50ZXJ2
YWxzJiBpbnRlcnZhbHMsIFNlZ21lbnRMaXN0JiByZXN1bHQpCit7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGludGVydmFscy5zaXplKCk7IGkrKykKKyAgICAgICAgcmVzdWx0LmFwcGVu
ZChMaW5lU2VnbWVudChpbnRlcnZhbHNbaV0ueDEoKSwgaW50ZXJ2YWxzW2ldLngyKCkgKyAxKSk7
Cit9CisKIHZvaWQgUmFzdGVyU2hhcGU6OmdldEV4Y2x1ZGVkSW50ZXJ2YWxzKExheW91dFVuaXQg
bG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBTZWdtZW50TGlzdCYgcmVzdWx0
KSBjb25zdAogewogICAgIGNvbnN0IFJhc3RlclNoYXBlSW50ZXJ2YWxzJiBpbnRlcnZhbHMgPSBt
YXJnaW5JbnRlcnZhbHMoKTsKICAgICBpZiAoaW50ZXJ2YWxzLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgZmxvYXQgeTEgPSBsb2dpY2FsVG9wOwotICAgIGZsb2F0IHkyID0gbG9n
aWNhbFRvcCArIGxvZ2ljYWxIZWlnaHQ7Ci0KLSAgICBpZiAoeTIgPCBpbnRlcnZhbHMuYm91bmRz
KCkueSgpIHx8IHkxID49IGludGVydmFscy5ib3VuZHMoKS5tYXhZKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGludGVydmFscy5nZXRFeGNsdWRlZEludGVydmFscyh5MSwgeTIsIHJlc3VsdCk7
CisgICAgSW50U2hhcGVJbnRlcnZhbHMgZXhjbHVkZWRJbnRlcnZhbHM7CisgICAgaW50ZXJ2YWxz
LmdldEV4Y2x1ZGVkSW50ZXJ2YWxzKGxvZ2ljYWxUb3AsIGxvZ2ljYWxUb3AgKyBsb2dpY2FsSGVp
Z2h0LCBleGNsdWRlZEludGVydmFscyk7CisgICAgYXBwZW5kTGluZVNlZ21lbnRzKGV4Y2x1ZGVk
SW50ZXJ2YWxzLCByZXN1bHQpOwogfQogCiB2b2lkIFJhc3RlclNoYXBlOjpnZXRJbmNsdWRlZElu
dGVydmFscyhMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwg
U2VnbWVudExpc3QmIHJlc3VsdCkgY29uc3QKQEAgLTE4MiwzMSArMjA4LDE4IEBAIHZvaWQgUmFz
dGVyU2hhcGU6OmdldEluY2x1ZGVkSW50ZXJ2YWxzKExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5
b3V0VW5pdCBsb2dpY2FsCiAgICAgaWYgKGludGVydmFscy5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGZsb2F0IHkxID0gbG9naWNhbFRvcDsKLSAgICBmbG9hdCB5MiA9IGxvZ2lj
YWxUb3AgKyBsb2dpY2FsSGVpZ2h0OwotCi0gICAgaWYgKHkxIDwgaW50ZXJ2YWxzLmJvdW5kcygp
LnkoKSB8fCB5MiA+IGludGVydmFscy5ib3VuZHMoKS5tYXhZKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGludGVydmFscy5nZXRJbmNsdWRlZEludGVydmFscyh5MSwgeTIsIHJlc3VsdCk7Cisg
ICAgSW50U2hhcGVJbnRlcnZhbHMgaW5jbHVkZWRJbnRlcnZhbHM7CisgICAgaW50ZXJ2YWxzLmdl
dEluY2x1ZGVkSW50ZXJ2YWxzKGxvZ2ljYWxUb3AsIGxvZ2ljYWxUb3AgKyBsb2dpY2FsSGVpZ2h0
LCBpbmNsdWRlZEludGVydmFscyk7CisgICAgYXBwZW5kTGluZVNlZ21lbnRzKGluY2x1ZGVkSW50
ZXJ2YWxzLCByZXN1bHQpOwogfQogCiBib29sIFJhc3RlclNoYXBlOjpmaXJzdEluY2x1ZGVkSW50
ZXJ2YWxMb2dpY2FsVG9wKExheW91dFVuaXQgbWluTG9naWNhbEludGVydmFsVG9wLCBjb25zdCBM
YXlvdXRTaXplJiBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplLCBMYXlvdXRVbml0JiByZXN1bHQpIGNv
bnN0CiB7Ci0gICAgZmxvYXQgbWluSW50ZXJ2YWxUb3AgPSBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3A7
Ci0gICAgZmxvYXQgbWluSW50ZXJ2YWxIZWlnaHQgPSBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplLmhl
aWdodCgpOwotICAgIGZsb2F0IG1pbkludGVydmFsV2lkdGggPSBtaW5Mb2dpY2FsSW50ZXJ2YWxT
aXplLndpZHRoKCk7Ci0KICAgICBjb25zdCBSYXN0ZXJTaGFwZUludGVydmFscyYgaW50ZXJ2YWxz
ID0gcGFkZGluZ0ludGVydmFscygpOwotICAgIGlmIChpbnRlcnZhbHMuaXNFbXB0eSgpIHx8IG1p
bkludGVydmFsV2lkdGggPiBpbnRlcnZhbHMuYm91bmRzKCkud2lkdGgoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgZmxvYXQgbWluWSA9IHN0ZDo6bWF4PGZsb2F0PihpbnRlcnZhbHMu
Ym91bmRzKCkueSgpLCBtaW5JbnRlcnZhbFRvcCk7Ci0gICAgZmxvYXQgbWF4WSA9IG1pblkgKyBt
aW5JbnRlcnZhbEhlaWdodDsKLSAgICBpZiAobWF4WSA+IGludGVydmFscy5ib3VuZHMoKS5tYXhZ
KCkpCisgICAgaWYgKGludGVydmFscy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIHJldHVybiBpbnRlcnZhbHMuZmlyc3RJbmNsdWRlZEludGVydmFsWShtaW5ZLCBmbG9v
cmVkSW50U2l6ZShtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplKSwgcmVzdWx0KTsKKyAgICByZXR1cm4g
aW50ZXJ2YWxzLmZpcnN0SW5jbHVkZWRJbnRlcnZhbFkobWluTG9naWNhbEludGVydmFsVG9wLmZs
b29yKCksIGZsb29yZWRJbnRTaXplKG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUpLCByZXN1bHQpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc2hhcGVzL1Jhc3RlclNoYXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c2hhcGVzL1Jhc3RlclNoYXBlLmgKaW5kZXggOTQ3MmUwYy4uZjE3OWE3MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9SYXN0ZXJTaGFwZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvUmFzdGVyU2hhcGUuaApAQCAtMzEsOCArMzEsOCBA
QAogI2RlZmluZSBSYXN0ZXJTaGFwZV9oCiAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNs
dWRlICJSZWdpb24uaCIKICNpbmNsdWRlICJTaGFwZS5oIgorI2luY2x1ZGUgIlNoYXBlSW50ZXJ2
YWwuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KIApAQCAtNDAsMTggKzQwLDMxIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUmFz
dGVyU2hhcGVJbnRlcnZhbHMgewogcHVibGljOgotICAgIFJhc3RlclNoYXBlSW50ZXJ2YWxzKCkg
eyB9CisgICAgUmFzdGVyU2hhcGVJbnRlcnZhbHModW5zaWduZWQgc2l6ZSkKKyAgICB7CisgICAg
ICAgIG1faW50ZXJ2YWxMaXN0cy5yZXNpemUoc2l6ZSk7CisgICAgfQorCisgICAgY29uc3QgSW50
UmVjdCYgYm91bmRzKCkgY29uc3QgeyByZXR1cm4gbV9ib3VuZHM7IH0KKyAgICBib29sIGlzRW1w
dHkoKSBjb25zdCB7IHJldHVybiBtX2JvdW5kcy5pc0VtcHR5KCk7IH0KKyAgICB2b2lkIGFwcGVu
ZEludGVydmFsKGludCB5LCBpbnQgeDEsIGludCB4Mik7CiAKLSAgICBJbnRSZWN0IGJvdW5kcygp
IGNvbnN0OwotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0ICB7IHJldHVybiBtX3JlZ2lvbi5pc0Vt
cHR5KCk7IH0KLSAgICB2b2lkIGFkZEludGVydmFsKGludCB5LCBpbnQgeDEsIGludCB4Mik7Ci0g
ICAgdm9pZCBnZXRJbmNsdWRlZEludGVydmFscyhpbnQgeTEsIGludCB5MiwgU2VnbWVudExpc3Qm
KSBjb25zdDsKLSAgICB2b2lkIGdldEV4Y2x1ZGVkSW50ZXJ2YWxzKGludCB5MSwgaW50IHkyLCBT
ZWdtZW50TGlzdCYpIGNvbnN0OwotICAgIGJvb2wgZmlyc3RJbmNsdWRlZEludGVydmFsWShpbnQg
bWluWSwgY29uc3QgSW50U2l6ZSYgbWluSW50ZXJ2YWxTaXplLCBMYXlvdXRVbml0JikgY29uc3Q7
CisgICAgdm9pZCBnZXRJbmNsdWRlZEludGVydmFscyhpbnQgeTEsIGludCB5MiwgSW50U2hhcGVJ
bnRlcnZhbHMmIHJlc3VsdCkgY29uc3Q7CisgICAgdm9pZCBnZXRFeGNsdWRlZEludGVydmFscyhp
bnQgeTEsIGludCB5MiwgSW50U2hhcGVJbnRlcnZhbHMmIHJlc3VsdCkgY29uc3Q7CisgICAgYm9v
bCBmaXJzdEluY2x1ZGVkSW50ZXJ2YWxZKGludCBtaW5ZLCBjb25zdCBJbnRTaXplJiBtaW5TaXpl
LCBMYXlvdXRVbml0JiByZXN1bHQpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIFJlZ2lvbiBtX3Jl
Z2lvbjsKLSAgICBtdXRhYmxlIE93blB0cjxJbnRSZWN0PiBtX2JvdW5kczsgLy8gQ2FjaGVkIHZh
bHVlIG9mIG1fcmVnaW9uLmJvdW5kcygpLgorICAgIGludCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV9pbnRlcnZhbExpc3RzLnNpemUoKTsgfQorICAgIGNvbnN0IEludFNoYXBlSW50ZXJ2YWxzJiBn
ZXRJbnRlcnZhbHMoaW50IHkpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoeSA+PSAwICYm
IHkgPCBzaXplKCkpOworICAgICAgICByZXR1cm4gbV9pbnRlcnZhbExpc3RzW3ldOworICAgIH0K
KyAgICBib29sIGNvbnRhaW5zKGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICBib29sIGdldElu
dGVydmFsWDFWYWx1ZXMoaW50IG1pblksIGludCBtYXhZLCBpbnQgbWluSW50ZXJ2YWxXaWR0aCwg
VmVjdG9yPGludD4mIHJlc3VsdCkgY29uc3Q7CisKKyAgICBJbnRSZWN0IG1fYm91bmRzOworICAg
IFZlY3RvcjxJbnRTaGFwZUludGVydmFscyA+IG1faW50ZXJ2YWxMaXN0czsKIH07CiAKIGNsYXNz
IFJhc3RlclNoYXBlIDogcHVibGljIFNoYXBlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3No
YXBlcy9TaGFwZS5jcHAKaW5kZXggYjNiOWQ2ZC4uZDA0ZTgwYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAKQEAgLTIwNywxMCArMjA3LDExIEBAIFBhc3NPd25Q
dHI8U2hhcGU+IFNoYXBlOjpjcmVhdGVTaGFwZShjb25zdCBTdHlsZUltYWdlKiBzdHlsZUltYWdl
LCBmbG9hdCB0aHJlc2hvCiB7CiAgICAgQVNTRVJUKHN0eWxlSW1hZ2UgJiYgc3R5bGVJbWFnZS0+
aXNDYWNoZWRJbWFnZSgpICYmIHN0eWxlSW1hZ2UtPmNhY2hlZEltYWdlKCkgJiYgc3R5bGVJbWFn
ZS0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2UoKSk7CiAKLSAgICBPd25QdHI8UmFzdGVyU2hhcGVJbnRl
cnZhbHM+IGludGVydmFscyA9IGFkb3B0UHRyKG5ldyBSYXN0ZXJTaGFwZUludGVydmFscygpKTsK
LQogICAgIEltYWdlKiBpbWFnZSA9IHN0eWxlSW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlKCk7
CiAgICAgY29uc3QgSW50U2l6ZSYgaW1hZ2VTaXplID0gaW1hZ2UtPnNpemUoKTsKKworICAgIE93
blB0cjxSYXN0ZXJTaGFwZUludGVydmFscz4gaW50ZXJ2YWxzID0gYWRvcHRQdHIobmV3IFJhc3Rl
clNoYXBlSW50ZXJ2YWxzKGltYWdlU2l6ZS5oZWlnaHQoKSkpOworCiAgICAgT3duUHRyPEltYWdl
QnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoaW1hZ2VTaXplKTsKICAg
ICBpZiAoaW1hZ2VCdWZmZXIpIHsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0Nv
bnRleHQgPSBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpOwpAQCAtMjMwLDcgKzIzMSw3IEBAIFBhc3NP
d25QdHI8U2hhcGU+IFNoYXBlOjpjcmVhdGVTaGFwZShjb25zdCBTdHlsZUltYWdlKiBzdHlsZUlt
YWdlLCBmbG9hdCB0aHJlc2hvCiAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFydFggPT0gLTEg
JiYgYWxwaGFBYm92ZVRocmVzaG9sZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRY
ID0geDsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydFggIT0gLTEgJiYgKCFh
bHBoYUFib3ZlVGhyZXNob2xkIHx8IHggPT0gaW1hZ2VTaXplLndpZHRoKCkgLSAxKSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgaW50ZXJ2YWxzLT5hZGRJbnRlcnZhbCh5LCBzdGFydFgsIHgp
OworICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJ2YWxzLT5hcHBlbmRJbnRlcnZhbCh5LCBz
dGFydFgsIHgpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRYID0gLTE7CiAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW50ZXJ2YWwuaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zaGFwZXMvU2hhcGVJbnRlcnZhbC5oCmluZGV4IGJmMGJjMDguLjg0YTVhOWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnRlcnZhbC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnRlcnZhbC5oCkBA
IC00Nyw2ICs0Nyw3IEBAIHB1YmxpYzoKIAogICAgIFQgeDEoKSBjb25zdCB7IHJldHVybiBtX3gx
OyB9CiAgICAgVCB4MigpIGNvbnN0IHsgcmV0dXJuIG1feDI7IH0KKyAgICBUIHdpZHRoKCkgY29u
c3QgeyByZXR1cm4gbV94MiAtIG1feDE7IH0KIAogICAgIHZvaWQgc2V0WDEoVCB4MSkKICAgICB7
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>