<?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>95490</bug_id>
          
          <creation_ts>2012-08-30 13:01:57 -0700</creation_ts>
          <short_desc>[CSS Exclusions] add support for the basic shapes</short_desc>
          <delta_ts>2012-08-31 16:53:19 -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>DUPLICATE</resolution>
          <dup_id>95625</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>89707</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hans Muller">giles_joplin</reporter>
          <assigned_to name="Hans Muller">giles_joplin</assigned_to>
          <cc>betravis</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>donggwan.kim</cc>
    
    <cc>eric</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>peter+ews</cc>
    
    <cc>rakuco</cc>
    
    <cc>s.choi</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>708935</commentid>
    <comment_count>0</comment_count>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2012-08-30 13:01:57 -0700</bug_when>
    <thetext>Initial support for the shapes listed in the &quot;Basic Shapes&quot; section of the CSS Exclusions spec - http://dev.w3.org/csswg/css3-exclusions/#basic-shapes-from-svg-syntax.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708967</commentid>
    <comment_count>1</comment_count>
      <attachid>161541</attachid>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2012-08-30 13:28:44 -0700</bug_when>
    <thetext>Created attachment 161541
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708986</commentid>
    <comment_count>2</comment_count>
      <attachid>161541</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-30 13:46:53 -0700</bug_when>
    <thetext>Comment on attachment 161541
Patch

Attachment 161541 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13680864</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708989</commentid>
    <comment_count>3</comment_count>
      <attachid>161541</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-08-30 13:49:26 -0700</bug_when>
    <thetext>Comment on attachment 161541
Patch

Attachment 161541 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/13682855</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708994</commentid>
    <comment_count>4</comment_count>
      <attachid>161541</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-08-30 13:50:37 -0700</bug_when>
    <thetext>Comment on attachment 161541
Patch

Attachment 161541 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/13680863</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709051</commentid>
    <comment_count>5</comment_count>
      <attachid>161541</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-08-30 14:53:22 -0700</bug_when>
    <thetext>Comment on attachment 161541
Patch

Attachment 161541 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/13681854</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709056</commentid>
    <comment_count>6</comment_count>
      <attachid>161541</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-08-30 14:56:08 -0700</bug_when>
    <thetext>Comment on attachment 161541
Patch

Attachment 161541 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/13694823</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709100</commentid>
    <comment_count>7</comment_count>
      <attachid>161541</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2012-08-30 15:24:57 -0700</bug_when>
    <thetext>Comment on attachment 161541
Patch

Attachment 161541 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/13699008</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709102</commentid>
    <comment_count>8</comment_count>
      <attachid>161573</attachid>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2012-08-30 15:31:14 -0700</bug_when>
    <thetext>Created attachment 161573
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709110</commentid>
    <comment_count>9</comment_count>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2012-08-30 15:37:48 -0700</bug_when>
    <thetext>(In reply to comment #8)
Added the new  filenames to five WebCore build files (they&apos;d already been added to the XCode project).  Hopefully that&apos;s all of them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709119</commentid>
    <comment_count>10</comment_count>
      <attachid>161573</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-08-30 16:00:35 -0700</bug_when>
    <thetext>Comment on attachment 161573
Patch

Attachment 161573 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13683938</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709179</commentid>
    <comment_count>11</comment_count>
    <who name="Bear Travis">betravis</who>
    <bug_when>2012-08-30 17:04:35 -0700</bug_when>
    <thetext>Here&apos;s a first pass over the code. I have not yet taken a really good look at the geometry algorithms, so comments on those will follow later.

&gt; Source/WebCore/ChangeLog:31
&gt; +        (WebCore::IntervalX1Comparator::operator()):

For a patch this large, you will probably need to write function-level comments (full-sentences) for each of the ChangeLog entries. You may be able to hold off a while if you anticipate large-scale architecture changes during the review process.

&gt; Source/WebCore/platform/graphics/XSInterval.cpp:1
&gt; +/*

I think XS is not the most descriptive prefix. ExclusionShape is probably a little too long. BasicShape, or just Shape? What classes are we most worried about naming collisions with?

&gt; Source/WebCore/platform/graphics/XSInterval.cpp:37
&gt; +struct IntervalX1Comparator {

Would the name XSIntervalComparator be more appropriate?

&gt; Source/WebCore/platform/graphics/XSInterval.cpp:45
&gt; +{  

WebKit code leans towards full-word variable names:
http://www.webkit.org/coding/coding-style.html#names-full-words
Perhaps other and result?

&gt; Source/WebCore/platform/graphics/XSInterval.cpp:70
&gt; +        for (size_t i = 0; i &lt; v.size(); i++) {

Think I&apos;m reading this right. Since interval is only null on the first pass, and v is guaranteed to have at least one element, I think this can change to:
ASSERT(v.size());
interval = &amp;v[0];
for (size_t i = 1; ... ; ... )

&gt; Source/WebCore/platform/graphics/XSInterval.cpp:71
&gt; +            if (!interval)

If the above is correct, you can remove this case

&gt; Source/WebCore/platform/graphics/XSInterval.cpp:81
&gt; +        if (interval)

And this null-check, and just append the interval.

&gt; Source/WebCore/platform/graphics/XSPolygon.h:1
&gt; +/*

Because the patch is already large, and we aren&apos;t testing Polygons yet, I would recommend removing the Polygon files and add them in a subsequent patch.

&gt; Source/WebCore/platform/graphics/XSRectangle.cpp:35
&gt; +// See http://hansmuller-webkit.blogspot.com/2012/07/computing-horizonal-rounded-rectangle.html

I would remove the blog reference in the file, and place it in the bug or the ChangeLog.

&gt; Source/WebCore/platform/graphics/XShape.cpp:103
&gt; +    case BasicShape::BASIC_SHAPE_POLYGON: {

If you remove Polygon, this can be changed to notImplemented()

&gt; Source/WebCore/platform/graphics/XShape.cpp:115
&gt; +    default:

Removing the default case adds a compile-time check that each shape case is covered. The ASSERT_NOT_REACHED can then be below the switch statement.

&gt; Source/WebCore/rendering/RenderBlockLineLayout.cpp:1325
&gt; +        if (wrapShapeInfo) {

I would change this back to the original form (no lineHeight), and add that in a subsequent patch.

&gt; Source/WebCore/rendering/RenderBlockLineLayout.cpp:1327
&gt; +            LayoutUnit lineBottom = lineTop + lineHeight(true, isHorizontalWritingMode() ? HorizontalLine : VerticalLine, PositionOfInteriorLineBoxes);

&quot;true&quot; should be replaced with layoutState.lineInfo().isFirstLine()

&gt; Source/WebCore/rendering/WrapShapeInfo.cpp:-108
&gt; -

Whitespace removed

&gt; Source/WebCore/rendering/WrapShapeInfo.cpp:114
&gt; +bool WrapShapeInfo::computeSegmentsForLine(LayoutUnit lineTop, LayoutUnit lineBottom)

Leave the signature on this as just lineTop, until you use lineBottom

&gt; Source/WebCore/rendering/WrapShapeInfo.h:81
&gt; +    bool computeSegmentsForLine(LayoutUnit lineTop, LayoutUnit lineBottom);

Ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709626</commentid>
    <comment_count>12</comment_count>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2012-08-31 07:58:48 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; &gt; Source/WebCore/platform/graphics/XSInterval.cpp:1
&gt; &gt; +/*
&gt; 
&gt; I think XS is not the most descriptive prefix. ExclusionShape is probably a little too long. BasicShape, or just Shape? What classes are we most worried about naming collisions with?

Since the classes are intended to (just) support operations required by CSS Exclusions, I don&apos;t 
think a generic prefix like &quot;Shape&quot; would make sense.  BasicShape (nee WrapShape) has already 
been used as the name of the class that just encodes the CSS information.  ExclusionShape is 
what &quot;XS&quot; is short for.  I was reluctant replace the abbreviation because names like 
ExclusionShapeIntervalX1Comparator are pretty clunky.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/XSInterval.cpp:37
&gt; &gt; +struct IntervalX1Comparator {
&gt; 
&gt; Would the name XSIntervalComparator be more appropriate?

No, that would obscure the important fact that XSInterval&apos;s &quot;x1&quot; field is what&apos;s being compared.


&gt; &gt; Source/WebCore/platform/graphics/XSInterval.cpp:45
&gt; &gt; +{  
&gt; 
&gt; WebKit code leans towards full-word variable names:
&gt; http://www.webkit.org/coding/coding-style.html#names-full-words
&gt; Perhaps other and result?

Yes, that would probably be more coding-style compliant.


&gt; &gt; Source/WebCore/platform/graphics/XSInterval.cpp:70
&gt; &gt; +        for (size_t i = 0; i &lt; v.size(); i++) {
&gt; 
&gt; Think I&apos;m reading this right. Since interval is only null on the first pass, and v is guaranteed to have at least one element, I think this can change to:
&gt; ASSERT(v.size());
&gt; interval = &amp;v[0];
&gt; for (size_t i = 1; ... ; ... )

What you mean is that v is guaranteed to have two elements.  In that case, yes the code could be refactored as you&apos;ve suggested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709758</commentid>
    <comment_count>13</comment_count>
      <attachid>161726</attachid>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2012-08-31 10:25:39 -0700</bug_when>
    <thetext>Created attachment 161726
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709794</commentid>
    <comment_count>14</comment_count>
      <attachid>161726</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-08-31 10:46:41 -0700</bug_when>
    <thetext>Comment on attachment 161726
Patch

Attachment 161726 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13719249</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709848</commentid>
    <comment_count>15</comment_count>
      <attachid>161744</attachid>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2012-08-31 11:50:08 -0700</bug_when>
    <thetext>Created attachment 161744
Patch

Fixed an uninitialized variable problem that the windows compiler was complaining about; removed extraneous trailing white space in the new files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709881</commentid>
    <comment_count>16</comment_count>
      <attachid>161744</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-08-31 12:22:08 -0700</bug_when>
    <thetext>Comment on attachment 161744
Patch

Attachment 161744 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13698022</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709948</commentid>
    <comment_count>17</comment_count>
      <attachid>161764</attachid>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2012-08-31 13:50:43 -0700</bug_when>
    <thetext>Created attachment 161764
Patch

Eliminated a dead code path in XShape::createXShape() that caused an error in the Windows build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710073</commentid>
    <comment_count>18</comment_count>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2012-08-31 16:53:19 -0700</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of bug 95625 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161541</attachid>
            <date>2012-08-30 13:28:44 -0700</date>
            <delta_ts>2012-08-30 15:31:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95490-20120830132833.patch</filename>
            <type>text/plain</type>
            <size>57808</size>
            <attacher name="Hans Muller">giles_joplin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3MTY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGJmZDZiODA5MjFiMmE3
NTM0OTNlYmM0NWRiYWQ3ZmM2NDNmM2RkYS4uOTM4NDZmM2I4MWI1ZWVjZTYzMTNiMWI0Mzk0OWE0
YjJkZmU2YzM4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNCBAQAorMjAxMi0wOC0zMCAgSGFu
cyBNdWxsZXIgIDxobXVsbGVyQGFkb2JlLmNvbT4KKworICAgICAgICBbQ1NTIEV4bHVzaW9uc10g
YWRkIHN1cHBvcnQgZm9yIHRoZSBiYXNpYyBzaGFwZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NDkwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgSW5pdGlhbCBjb21taXQgb2YgdGhlIENTUyBFeGNsdXNp
b25zIFNoYXBlcyBjbGFzc2VzLiBUaGV5J3JlIGJhc2VkIG9uIHRoZSAiQmFzaWMgU2hhcGVzIiBz
ZWN0aW9uIG9mIHRoZQorICAgICAgICBDU1MgRXhjbHVzaW9ucyBzcGVjIC0gaHR0cDovL2Rldi53
My5vcmcvY3Nzd2cvY3NzMy1leGNsdXNpb25zLyNiYXNpYy1zaGFwZXMtZnJvbS1zdmctc3ludGF4
LgorCisgICAgICAgIFRoaXMgc2V0IG9mIGNsYXNzZXMgZW5hYmxlcyB0aGUgZXhjbHVzaW9ucyBs
YXlvdXQgY29kZSB0byBkZXRlcm1pbmUgaG93IHRvIGJyZWFrIHVwIGEgbGluZSBpbnRvIHNlZ2Vt
ZW50cworICAgICAgICB0aGF0IHdpbGwgZml0IHdpdGhpbiBvciBhcm91bmQgYSBzaGFwZSwgZ2l2
ZW4gdGhlIFkgY29vcmRpbmF0ZXMgb2YgdGhlIGxpbmUncyB0b3AgZWRnZSBhbmQgYm90dG9tIGVk
Z2VzLgorICAgICAgICBUaGUgWFNoYXBlIGNsYXNzIHJlcHJlc2VudHMgQmFzaWNTaGFwZXMgd2hv
c2UgY29vcmRpbmF0ZXMgaGF2ZSBiZWVuIHJlc29sdmVkIHRvIGFjdHVhbCB2YWx1ZXMuIEl0IHBy
b3ZpZGVzCisgICAgICAgIGEgcGFpciBvZiBtZXRob2RzLCBnZXRJbnNpZGVJbnRlcnZhbHMoKSBh
bmQgZ2V0T3V0c2lkZUludGVydmFscygpLCB0aGF0IHJldHVybiB0aGUgbGluZSBzZWdtZW50cycg
c3RhcnQKKyAgICAgICAgYW5kIGVuZCBYIGNvb3JkaW5hdGVzLCBhbmQgYSBtZXRob2QgdGhhdCBj
b21wdXRlcyB0aGUgc2hhcGUncyBib3VuZGluZyBib3guIFRoZSBsaW5lIHNlZ21lbnRzJyBjb29y
ZGluYXRlcworICAgICAgICBhcmUgcmVwcmVzZW50ZWQgYnkgYSBWZWN0b3Igb2YgWFNJbnRlcnZh
bHMuICBYU0ludGVydmFsIGlzIGp1c3QgYSBwYWlyIG9mIFggY29vcmRpbmF0ZXMuCisKKyAgICAg
ICAgVGhlIG90aGVyIGNsYXNzZXMsIFhTUmVjdGFuZ2xlIGFuZCBYU1BvbHlnb24gZXQgYWwsIGFy
ZSBpbnRlcm5hbCB0byB0aGUgWFNoYXBlIGltcGxlbWVudGF0aW9uLgorCisgICAgICAgIFRoaXMg
aXMgdGhlIGluaXRpYWwgdmVyc2lvbiBvZiB0aGUgWFNoYXBlcyBjb2RlIGFuZCBpdCdzIG9ubHkg
YmVpbmcgdXNlZCB0byB0aGUgbGltaXRlZCBleHRlbnQgV2ViS2l0CisgICAgICAgIGN1cnJlbnRs
eSBzdXBwb3J0cyBzaGFwZS1pbnNpZGUgZXhjbHVzaW9ucy4gIEl0IHdpbGwgYmUgZXh0ZW5kZWQg
dG8gc3VwcG9ydCBjb21wdXRpbmcgYSBtaW5pbWFsCisgICAgICAgIGxpbmUgc2VnbWVudCdzICJm
aXJzdCBsYXlvdXQgbG9jYXRpb24iIGFuZCBvdGhlciBpbXByb3ZlbWVudHMsIGluIHRhbmRlbSB3
aXRoIHRoZSBleGNsdXNpb25zIGxheW91dCBjb2RlLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBo
YXZlIGJlZW4gYWRkZWQgc2luY2UgdGhpcyBjb2RlIGp1c3QgcmVwbGFjZXMgYSBwcm92aXNpb25h
bCBpbXBsZW1lbnRhdGlvbiBzdHViLgorCisgICAgICAgIE1vcmUgaW5mb3JtYXRpb24gYWJvdXQg
dGhlIGFsZ29yaXRobXMgdXNlZCBieSB0aGUgU2hhcGVzIG1vZHVsZSBjYW4gYmUgZm91bmQgaGVy
ZTogaHR0cDovL2hhbnNtdWxsZXItd2Via2l0LmJsb2dzcG90LmNvbS4KKworICAgICAgICAqIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9YU0ludGVydmFsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkludGVydmFsWDFDb21wYXJhdG9yOjpvcGVyYXRvcigpKToKKyAgICAgICAgKFdl
YkNvcmU6OlhTSW50ZXJ2YWw6OmludGVyc2VjdCk6CisgICAgICAgIChXZWJDb3JlOjpzb3J0WFNJ
bnRlcnZhbHMpOgorICAgICAgICAoV2ViQ29yZTo6bWVyZ2VYU0ludGVydmFscyk6CisgICAgICAg
IChXZWJDb3JlOjppbnRlcnNlY3RYU0ludGVydmFscyk6CisgICAgICAgIChXZWJDb3JlOjpzdWJ0
cmFjdFhTSW50ZXJ2YWxzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9YU0ludGVydmFs
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChYU0ludGVydmFsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlhTSW50ZXJ2YWw6OlhTSW50ZXJ2YWwpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL1hTUG9seWdvbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNYXhFZGdlWUNvbXBhcmF0b3I6Om9wZXJhdG9yKCkpOgorICAgICAg
ICAoTWF4RWRnZVlDb21wYXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Ok1pbkVkZ2VZQ29tcGFy
YXRvcjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChNaW5FZGdlWUNvbXBhcmF0b3IpOgorICAgICAg
ICAoV2ViQ29yZTo6SW50ZXJzZWN0aW9uWENvbXBhcmF0b3I6Om9wZXJhdG9yKCkpOgorICAgICAg
ICAoV2ViQ29yZTo6WFNFZGdlVHJlZTo6WFNFZGdlVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpY
U0VkZ2VUcmVlOjppbml0RWRnZVRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6WFNFZGdlVHJlZTo6
ZmluZEVkZ2VzVGhhdE92ZXJsYXBZKToKKyAgICAgICAgKFdlYkNvcmU6OlhTRWRnZVRyZWU6OmZp
bmRFZGdlc1RoYXRPdmVybGFwSW50ZXJ2YWwpOgorICAgICAgICAoV2ViQ29yZTo6WFNQb2x5Z29u
OjpYU1BvbHlnb24pOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZVhJbnRlcnNlY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6WFNQb2x5Z29uOjpyaWdodFZlcnRleFkpOgorICAgICAgICAoV2Vi
Q29yZTo6YXBwZW5kSW50ZXJ2YWxYKToKKyAgICAgICAgKFdlYkNvcmU6OlhTUG9seWdvbjo6Y29t
cHV0ZVhJbnRlcnNlY3Rpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlhTUG9seWdvbjo6Y29tcHV0
ZUVkZ2VJbnRlcnNlY3Rpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlhTUG9seWdvbjo6Z2V0T3V0
c2lkZUludGVydmFscyk6CisgICAgICAgIChXZWJDb3JlOjpYU1BvbHlnb246OmdldEluc2lkZUlu
dGVydmFscyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvWFNQb2x5Z29uLmg6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChYU1BvbHlnb24pOgorICAgICAgICAoV2Vi
Q29yZTo6WFNQb2x5Z29uOjpnZXRYQXQpOgorICAgICAgICAoV2ViQ29yZTo6WFNQb2x5Z29uOjpn
ZXRZQXQpOgorICAgICAgICAoV2ViQ29yZTo6WFNQb2x5Z29uOjpudW1iZXJPZlZlcnRpY2VzKToK
KyAgICAgICAgKFdlYkNvcmU6OlhTUG9seWdvbjo6ZmlsbFJ1bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6WFNQb2x5Z29uOjpzaGFwZUJvdW5kaW5nQm94KToKKyAgICAgICAgKFhTRWRnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpYU0VkZ2U6OlhTRWRnZSk6CisgICAgICAgIChXZWJDb3JlOjpYU0VkZ2U6
OngxKToKKyAgICAgICAgKFdlYkNvcmU6OlhTRWRnZTo6eTEpOgorICAgICAgICAoV2ViQ29yZTo6
WFNFZGdlOjp4Mik6CisgICAgICAgIChXZWJDb3JlOjpYU0VkZ2U6OnkyKToKKyAgICAgICAgKFdl
YkNvcmU6OlhTRWRnZTo6bWluWCk6CisgICAgICAgIChXZWJDb3JlOjpYU0VkZ2U6Om1pblkpOgor
ICAgICAgICAoV2ViQ29yZTo6WFNFZGdlOjptYXhYKToKKyAgICAgICAgKFdlYkNvcmU6OlhTRWRn
ZTo6bWF4WSk6CisgICAgICAgIChYU0VkZ2VUcmVlKToKKyAgICAgICAgKFhTSW50ZXJzZWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlhTSW50ZXJzZWN0aW9uOjpYU0ludGVyc2VjdGlvbik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvWFNSZWN0YW5nbGUuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6ZWxsaXBzZVhJbnRlcmNlcHQpOgorICAg
ICAgICAoV2ViQ29yZTo6WFNSZWN0YW5nbGU6OmdldE91dHNpZGVJbnRlcnZhbHMpOgorICAgICAg
ICAoV2ViQ29yZTo6WFNSZWN0YW5nbGU6OmdldEluc2lkZUludGVydmFscyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvWFNSZWN0YW5nbGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFhTUmVjdGFuZ2xlKToKKyAgICAgICAgKFdlYkNvcmU6OlhTUmVjdGFuZ2xl
OjpYU1JlY3RhbmdsZSk6CisgICAgICAgIChXZWJDb3JlOjpYU1JlY3RhbmdsZTo6c2hhcGVCb3Vu
ZGluZ0JveCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvWFNoYXBlLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVhTUmVjdGFuZ2xl
KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVhTQ2lyY2xlKToKKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZVhTRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVYU1BvbHlnb24pOgor
ICAgICAgICAoV2ViQ29yZTo6WFNoYXBlOjpjcmVhdGVYU2hhcGUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL1hTaGFwZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoWFNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlhTaGFwZTo6flhTaGFwZSk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6bGF5b3V0UnVuc0FuZEZsb2F0c0luUmFuZ2UpOgorICAgICAgICAqIHJl
bmRlcmluZy9XcmFwU2hhcGVJbmZvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldyYXBTaGFwZUlu
Zm86OmNvbXB1dGVTaGFwZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6V3JhcFNoYXBlSW5mbzo6
Y29tcHV0ZVNlZ21lbnRzRm9yTGluZSk6CisgICAgICAgICogcmVuZGVyaW5nL1dyYXBTaGFwZUlu
Zm8uaDoKKyAgICAgICAgKFdlYkNvcmU6OldyYXBTaGFwZUluZm86OnNoYXBlVG9wKToKKyAgICAg
ICAgKFdyYXBTaGFwZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6V3JhcFNoYXBlSW5mbzo6bGlu
ZVN0YXRlKToKKwogMjAxMi0wOC0zMCAgVmljdG9yIENhcmJ1bmUgIDx2aWN0b3JAcm9zZWR1Lm9y
Zz4KIAogICAgICAgICBbQ2hyb21pdW1dIFRoZSBDQyBidXR0b24gaXMgbm90IHBhaW50ZWQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
aiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCAxNzZmOWVkNjk4YWQ4OTBmMmU5ODJjOWU4YTZmOGViMTJiMmZkMWNmLi4wZWU0ZWQ5N2VjZjNj
NTUzY2M3N2Y3Nzc3N2I0ZjQ2YWQ4NGQxYjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xODMzLDYgKzE4MzMsMTQgQEAKIAkJ
NkU2N0QyQTYxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTY3RDJBNDEyODBFOEE0
MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdMLmNwcCAqLzsgfTsKIAkJNkU2N0QyQTcxMjgw
RThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU2N0QyQTUxMjgwRThBNDAwODc1OEY3IC8qIEV4
dGVuc2lvbnMzRE9wZW5HTC5oICovOyB9OwogCQk2RTY3RDJBOTEyODBFOEJEMDA4NzU4RjcgLyog
RXh0ZW5zaW9uczNELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2RTY3RDJBODEyODBFOEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9uczNELmggKi87IH07CisJ
CTZFODZGRTgxMTVFQzI0QzkwMEMyODE3MiAvKiBYU2hhcGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU4NkZFNzkxNUVDMjRDOTAwQzI4MTcyIC8q
IFhTaGFwZS5jcHAgKi87IH07CisJCTZFODZGRTgyMTVFQzI0QzkwMEMyODE3MiAvKiBYU2hhcGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFODZGRTdB
MTVFQzI0QzkwMEMyODE3MiAvKiBYU2hhcGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQk2RTg2RkU4MzE1RUMyNEM5MDBDMjgxNzIgLyogWFNJbnRl
cnZhbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2
RTg2RkU3QjE1RUMyNEM5MDBDMjgxNzIgLyogWFNJbnRlcnZhbC5jcHAgKi87IH07CisJCTZFODZG
RTg0MTVFQzI0QzkwMEMyODE3MiAvKiBYU0ludGVydmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTg2RkU3QzE1RUMyNEM5MDBDMjgxNzIgLyogWFNJ
bnRlcnZhbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTZFODZGRTg1MTVFQzI0QzkwMEMyODE3MiAvKiBYU1BvbHlnb24uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU4NkZFN0QxNUVDMjRDOTAwQzI4
MTcyIC8qIFhTUG9seWdvbi5jcHAgKi87IH07CisJCTZFODZGRTg2MTVFQzI0QzkwMEMyODE3MiAv
KiBYU1BvbHlnb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDZFODZGRTdFMTVFQzI0QzkwMEMyODE3MiAvKiBYU1BvbHlnb24uaCAqLzsgfTsKKwkJNkU4
NkZFODcxNUVDMjRDOTAwQzI4MTcyIC8qIFhTUmVjdGFuZ2xlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFODZGRTdGMTVFQzI0QzkwMEMyODE3MiAv
KiBYU1JlY3RhbmdsZS5jcHAgKi87IH07CisJCTZFODZGRTg4MTVFQzI0QzkwMEMyODE3MiAvKiBY
U1JlY3RhbmdsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNkU4NkZFODAxNUVDMjRDOTAwQzI4MTcyIC8qIFhTUmVjdGFuZ2xlLmggKi87IH07CiAJCTZF
QkM1RUFGMTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUJDNUVBRDEzOEI1MEYyMDBBMENG
OEEgLyogSlNGbG9hdDY0QXJyYXkuY3BwICovOyB9OwogCQk2RUJDNUVCMDEzOEI1MEYyMDBBMENG
OEEgLyogSlNGbG9hdDY0QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDZFQkM1RUFFMTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5o
ICovOyB9OwogCQk2RUJGMEU0ODEyQTg5MjYxMDBEQjE3MDkgLyogT0VTVGV4dHVyZUZsb2F0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFQkYwRTQ1
MTJBODkyNjEwMERCMTcwOSAvKiBPRVNUZXh0dXJlRmxvYXQuY3BwICovOyB9OwpAQCAtOTAwNyw2
ICs5MDE1LDE0IEBACiAJCTZFNjdEMkE0MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RP
cGVuR0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXh0ZW5zaW9u
czNET3BlbkdMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkU2N0QyQTUxMjgw
RThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBFeHRlbnNpb25zM0RPcGVuR0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNkU2N0QyQTgxMjgwRThCRDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHRlbnNpb25zM0QuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNkU4NkZFNzkxNUVDMjRDOTAwQzI4MTcyIC8qIFhTaGFwZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBYU2hhcGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk2RTg2RkU3QTE1RUMyNEM5MDBDMjgxNzIgLyogWFNoYXBl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBYU2hhcGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkU4NkZFN0IxNUVDMjRDOTAwQzI4MTcyIC8qIFhTSW50ZXJ2
YWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gWFNJbnRlcnZhbC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZFODZGRTdDMTVFQzI0QzkwMEMyODE3
MiAvKiBYU0ludGVydmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFhTSW50
ZXJ2YWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkU4NkZFN0QxNUVDMjRDOTAw
QzI4MTcyIC8qIFhTUG9seWdvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBYU1BvbHlnb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RTg2RkU3
RTE1RUMyNEM5MDBDMjgxNzIgLyogWFNQb2x5Z29uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFhTUG9seWdvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RTg2
RkU3RjE1RUMyNEM5MDBDMjgxNzIgLyogWFNSZWN0YW5nbGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gWFNSZWN0YW5nbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk2RTg2RkU4MDE1RUMyNEM5MDBDMjgxNzIgLyogWFNSZWN0YW5nbGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWFNSZWN0YW5nbGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNkVCQzVEODAxMzhCNEM0RTAwQTBDRjhBIC8qIEZsb2F0NjRBcnJh
eS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gRmxvYXQ2NEFycmF5LmlkbDsgcGF0aCA9IGNh
bnZhcy9GbG9hdDY0QXJyYXkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RUJD
NUVBRDEzOEI1MEYyMDBBMENGOEEgLyogSlNGbG9hdDY0QXJyYXkuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNGbG9hdDY0QXJyYXkuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk2RUJDNUVBRTEzOEI1MEYyMDBBMENGOEEgLyogSlNGbG9hdDY0QXJy
YXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNGbG9hdDY0QXJyYXkuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE5NzkxLDYgKzE5ODA3LDE0IEBACiAJCUIy
QTAxNTkxMEFGNkNENTMwMDZCQ0UwRSAvKiBncmFwaGljcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNkU4NkZFNzkxNUVDMjRDOTAwQzI4MTcyIC8qIFhT
aGFwZS5jcHAgKi8sCisJCQkJNkU4NkZFN0ExNUVDMjRDOTAwQzI4MTcyIC8qIFhTaGFwZS5oICov
LAorCQkJCTZFODZGRTdCMTVFQzI0QzkwMEMyODE3MiAvKiBYU0ludGVydmFsLmNwcCAqLywKKwkJ
CQk2RTg2RkU3QzE1RUMyNEM5MDBDMjgxNzIgLyogWFNJbnRlcnZhbC5oICovLAorCQkJCTZFODZG
RTdEMTVFQzI0QzkwMEMyODE3MiAvKiBYU1BvbHlnb24uY3BwICovLAorCQkJCTZFODZGRTdFMTVF
QzI0QzkwMEMyODE3MiAvKiBYU1BvbHlnb24uaCAqLywKKwkJCQk2RTg2RkU3RjE1RUMyNEM5MDBD
MjgxNzIgLyogWFNSZWN0YW5nbGUuY3BwICovLAorCQkJCTZFODZGRTgwMTVFQzI0QzkwMEMyODE3
MiAvKiBYU1JlY3RhbmdsZS5oICovLAogCQkJCTA3NkYwRDA4MTJCODE5MjcwMEMyNkFBNCAvKiBh
dmZvdW5kYXRpb24gKi8sCiAJCQkJNDk5QjNFQzAxMjhDQ0MxODAwRTcyNkMyIC8qIGNhICovLAog
CQkJCUIyNzUzNTI5MEIwNTM4MTQwMDJDRTY0RiAvKiBjZyAqLywKQEAgLTIyMjA0LDYgKzIyMjI4
LDcgQEAKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKIAkJ
CQk5N0JDNjlEQjE1MDVGMDc2MDAxQjc0QUMgLyogQWJzdHJhY3REYXRhYmFzZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNkU4NkZFODQxNUVDMjRDOTAwQzI4MTcyIC8qIFhTSW50ZXJ2YWwuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTQxRTFCMUQxMEZGNTk4NjkwMDU3NkIzQiAvKiBBYnN0cmFjdFdvcmtl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjlBODEyMkUwRkJCOUMxRDAwNTEwMjkzIC8qIEFjY2Vz
c2liaWxpdHlBUklBR3JpZENlbGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTI5QTgxMjMzMEZCQjlD
MUQwMDUxMDI5MyAvKiBBY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3cuaCBpbiBIZWFkZXJzICovLApA
QCAtMjU0ODQsNiArMjU1MDksOSBAQAogCQkJCTkzNzdBQkEwMTVERUZFRUYwMDMxRkQwNCAvKiBQ
YWdpbmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDQ3NkFBODE1REM0QkIxMDAzMDVEQjIg
LyogV3JpdGluZ01vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxQjgwMUJCMTVFQzU4QzcwMENF
NjQzRCAvKiBMYXlvdXRUeXBlc0lubGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTZF
ODZGRTgyMTVFQzI0QzkwMEMyODE3MiAvKiBYU2hhcGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTZF
ODZGRTg2MTVFQzI0QzkwMEMyODE3MiAvKiBYU1BvbHlnb24uaCBpbiBIZWFkZXJzICovLAorCQkJ
CTZFODZGRTg4MTVFQzI0QzkwMEMyODE3MiAvKiBYU1JlY3RhbmdsZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRkJENkFGODgxNUVGMjVDOTAwOEI3MTEwIC8qIENTU0Jhc2ljU2hhcGVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlGQkQ2QUY4QTE1RUYyNURGMDA4QjcxMTAgLyogQmFzaWNTaGFwZUZ1bmN0
aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkJENkFGOEMxNUVGMjYwNDAwOEI3MTEwIC8qIEJh
c2ljU2hhcGVzLmggaW4gSGVhZGVycyAqLywKQEAgLTI4NTcxLDYgKzI4NTk5LDEwIEBACiAJCQkJ
NTJCNkM5QzUxNUUzRjRERjAwNjkwQjA1IC8qIE5hbWVkRmxvd0NvbGxlY3Rpb24uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNTJDQ0E5RTIxNUUzRjYyQzAwNTNDNzdGIC8qIEpTRE9NTmFtZWRGbG93
Q29sbGVjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MkNDQTlFOTE1RTNGNjRDMDA1M0M3
N0YgLyogRE9NRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5tbSBpbiBTb3VyY2VzICovLAorCQkJCTZF
ODZGRTgxMTVFQzI0QzkwMEMyODE3MiAvKiBYU2hhcGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
NkU4NkZFODMxNUVDMjRDOTAwQzI4MTcyIC8qIFhTSW50ZXJ2YWwuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJNkU4NkZFODUxNUVDMjRDOTAwQzI4MTcyIC8qIFhTUG9seWdvbi5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQk2RTg2RkU4NzE1RUMyNEM5MDBDMjgxNzIgLyogWFNSZWN0YW5nbGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRkJENkFGODkxNUVGMjVEQjAwOEI3MTEwIC8qIEJhc2ljU2hhcGVG
dW5jdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkJENkFGOEIxNUVGMjVFNTAwOEI3MTEw
IC8qIENTU0Jhc2ljU2hhcGVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZCRDZBRjhEMTVFRjI2
MEEwMDhCNzExMCAvKiBCYXNpY1NoYXBlcy5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1hTSW50ZXJ2YWwuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvWFNJbnRlcnZhbC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODlj
ZTQ0MGZiYTUxZTQyNTEzMjg5MzI1NzhlNTMzYWUxM2RlNmY0OQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1hTSW50ZXJ2YWwuY3BwCkBAIC0wLDAg
KzEsMTY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jw
b3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisg
KiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlhTSW50ZXJ2
YWwuaCIKKworI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworc3RydWN0IEludGVydmFsWDFDb21wYXJhdG9yIHsKKyAgICBib29sIG9wZXJhdG9yKCkg
KGNvbnN0IFhTSW50ZXJ2YWwmIGkxLCBjb25zdCBYU0ludGVydmFsJiBpMikgY29uc3QgCisgICAg
eyAgICAgICAKKyAgICAgICAgcmV0dXJuIGkxLngxIDwgaTIueDE7CisgICAgfQorfTsKKworYm9v
bCBYU0ludGVydmFsOjppbnRlcnNlY3QoY29uc3QgWFNJbnRlcnZhbCYgaSwgWFNJbnRlcnZhbCYg
cnYpIGNvbnN0IAoreyAgCisgICAgaWYgKHgyIDwgaS54MSB8fCB4MSA+IGkueDIpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBydi54MSA9IHN0ZDo6bWF4KHgxLCBpLngxKTsKKyAgICBydi54
MiA9IHN0ZDo6bWluKHgyLCBpLngyKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBzb3J0
WFNJbnRlcnZhbHMoVmVjdG9yPFhTSW50ZXJ2YWw+JiB2KQoreworICAgIHN0ZDo6c29ydCh2LmJl
Z2luKCksIHYuZW5kKCksIEludGVydmFsWDFDb21wYXJhdG9yKCkpOworfQorCit2b2lkIG1lcmdl
WFNJbnRlcnZhbHMoY29uc3QgVmVjdG9yPFhTSW50ZXJ2YWw+JiB2MSwgY29uc3QgVmVjdG9yPFhT
SW50ZXJ2YWw+JiB2MiwgVmVjdG9yPFhTSW50ZXJ2YWw+JiBydikgCit7CisgICAgaWYgKCF2MS5z
aXplKCkpCisgICAgICAgIHJ2LmFwcGVuZFJhbmdlKHYyLmJlZ2luKCksIHYyLmVuZCgpKTsKKyAg
ICBlbHNlIGlmICghdjIuc2l6ZSgpKQorICAgICAgICBydi5hcHBlbmRSYW5nZSh2MS5iZWdpbigp
LCB2MS5lbmQoKSk7CisgICAgZWxzZSB7CisgICAgICAgIFZlY3RvcjxYU0ludGVydmFsPiB2KHYx
LnNpemUoKSArIHYyLnNpemUoKSk7CisgICAgICAgIFhTSW50ZXJ2YWwqIGludGVydmFsID0gMDsK
KyAgICAgICAgCisgICAgICAgIHN0ZDo6bWVyZ2UodjEuYmVnaW4oKSwgdjEuZW5kKCksIHYyLmJl
Z2luKCksIHYyLmVuZCgpLCB2LmJlZ2luKCksIEludGVydmFsWDFDb21wYXJhdG9yKCkpOworICAg
ICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2LnNpemUoKTsgaSsrKSB7Cisg
ICAgICAgICAgICBpZiAoIWludGVydmFsKQorICAgICAgICAgICAgICAgIGludGVydmFsID0gJnZb
aV07CisgICAgICAgICAgICBlbHNlIGlmICh2W2ldLngxID49IGludGVydmFsLT54MSAmJiB2W2ld
LngxIDw9IGludGVydmFsLT54MikgLy8gRklYTUU6IDFzdCA8PSB0ZXN0IG5vdCBuZWVkZWQ/Cisg
ICAgICAgICAgICAgICAgaW50ZXJ2YWwtPngyID0gc3RkOjptYXgoaW50ZXJ2YWwtPngyLCB2W2ld
LngyKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHJ2LmFwcGVuZCgqaW50
ZXJ2YWwpOworICAgICAgICAgICAgICAgIGludGVydmFsID0gJnZbaV07CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChpbnRlcnZhbCkKKyAgICAgICAgICAg
IHJ2LmFwcGVuZCgqaW50ZXJ2YWwpOworICAgIH0KK30KKwordm9pZCBpbnRlcnNlY3RYU0ludGVy
dmFscyhjb25zdCBWZWN0b3I8WFNJbnRlcnZhbD4mIHYxLCBjb25zdCBWZWN0b3I8WFNJbnRlcnZh
bD4mIHYyLCBWZWN0b3I8WFNJbnRlcnZhbD4mIHJ2KSAKK3sKKyAgICBzaXplX3QgdjFTaXplID0g
djEuc2l6ZSgpOworICAgIHNpemVfdCB2MlNpemUgPSB2Mi5zaXplKCk7CisKKyAgICBpZiAoIXYx
U2l6ZSB8fCAhdjJTaXplKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgWFNJbnRlcnZhbCBp
bnRlcnZhbDsKKyAgICBib29sIG92ZXJsYXAgPSBmYWxzZTsKKyAgICBzaXplX3QgaTEgPSAwOwor
ICAgIHNpemVfdCBpMiA9IDA7CisgICAgCisgICAgd2hpbGUgKGkxIDwgdjFTaXplICYmIGkyIDwg
djJTaXplKSB7CisgICAgICAgIFhTSW50ZXJ2YWwgdjEyOworICAgICAgICBpZiAodjFbaTFdLmlu
dGVyc2VjdCh2MltpMl0sIHYxMikpIHsKKyAgICAgICAgICAgIGlmICghb3ZlcmxhcCB8fCAhdjEy
LmludGVyc2VjdChpbnRlcnZhbCwgaW50ZXJ2YWwpKSB7CisgICAgICAgICAgICAgICAgaWYgKG92
ZXJsYXApIAorICAgICAgICAgICAgICAgICAgICBydi5hcHBlbmQoaW50ZXJ2YWwpOworICAgICAg
ICAgICAgICAgIGludGVydmFsID0gdjEyOworICAgICAgICAgICAgICAgIG92ZXJsYXAgPSB0cnVl
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHYxW2kxXS54MiA8IHYyW2kyXS54Mikg
CisgICAgICAgICAgICAgICAgaTErKzsgCisgICAgICAgICAgICBlbHNlIAorICAgICAgICAgICAg
ICAgIGkyKys7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAob3ZlcmxhcCkgCisg
ICAgICAgICAgICAgICAgcnYuYXBwZW5kKGludGVydmFsKTsKKyAgICAgICAgICAgIG92ZXJsYXAg
PSBmYWxzZTsKKyAgICAgICAgICAgIGlmICh2MVtpMV0ueDEgPCB2MltpMl0ueDEpIAorICAgICAg
ICAgICAgICAgIGkxKys7IAorICAgICAgICAgICAgZWxzZSAKKyAgICAgICAgICAgICAgICBpMisr
OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmIChvdmVybGFwKSAKKyAgICAgICAgcnYu
YXBwZW5kKGludGVydmFsKTsKK30KKwordm9pZCBzdWJ0cmFjdFhTSW50ZXJ2YWxzKGNvbnN0IFZl
Y3RvcjxYU0ludGVydmFsPiYgdjEsIGNvbnN0IFZlY3RvcjxYU0ludGVydmFsPiYgdjIsIFZlY3Rv
cjxYU0ludGVydmFsPiYgcnYpIAoreworICAgIHNpemVfdCB2MVNpemUgPSB2MS5zaXplKCk7Cisg
ICAgc2l6ZV90IHYyU2l6ZSA9IHYyLnNpemUoKTsKKyAgICAKKyAgICBpZiAoIXYxU2l6ZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKCF2MlNpemUpCisgICAgICAgIHJ2LmFwcGVuZFJhbmdl
KHYxLmJlZ2luKCksIHYxLmVuZCgpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgc2l6ZV90IGkxID0g
MCwgaTIgPSAwOworICAgICAgICBydi5hcHBlbmRSYW5nZSh2MS5iZWdpbigpLCB2MS5lbmQoKSk7
CisgICAgICAgIAorICAgICAgICB3aGlsZSAoaTEgPCBydi5zaXplKCkgJiYgaTIgPCB2MlNpemUp
IHsKKyAgICAgICAgICAgIFhTSW50ZXJ2YWwmIGludGVydmFsMSA9IHJ2W2kxXTsgIAorICAgICAg
ICAgICAgY29uc3QgWFNJbnRlcnZhbCYgaW50ZXJ2YWwyID0gdjJbaTJdOyAgCisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGlmIChpbnRlcnZhbDIueDEgPD0gaW50ZXJ2YWwxLngxICYmIGludGVy
dmFsMi54MiA+PSBpbnRlcnZhbDEueDIpIAorICAgICAgICAgICAgICAgIHJ2LnJlbW92ZShpMSk7
CisgICAgICAgICAgICBlbHNlIGlmIChpbnRlcnZhbDIueDIgPCBpbnRlcnZhbDEueDEpCisgICAg
ICAgICAgICAgICAgaTIgKz0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGludGVydmFsMi54MSA+
IGludGVydmFsMS54MikKKyAgICAgICAgICAgICAgICBpMSArPSAxOworICAgICAgICAgICAgZWxz
ZSBpZiAoaW50ZXJ2YWwyLngxID4gaW50ZXJ2YWwxLngxICYmIGludGVydmFsMi54MiA8IGludGVy
dmFsMS54MikgeworICAgICAgICAgICAgICAgIHJ2Lmluc2VydChpMSwgWFNJbnRlcnZhbChpbnRl
cnZhbDEueDEsIGludGVydmFsMi54MSkpOworICAgICAgICAgICAgICAgIGludGVydmFsMS54MSA9
IGludGVydmFsMi54MjsKKyAgICAgICAgICAgICAgICBpMiArPSAxOworICAgICAgICAgICAgfSBl
bHNlIGlmIChpbnRlcnZhbDIueDEgPD0gaW50ZXJ2YWwxLngxKSB7CisgICAgICAgICAgICAgICAg
aW50ZXJ2YWwxLngxID0gaW50ZXJ2YWwyLngyOworICAgICAgICAgICAgICAgIGkyICs9IDE7Cisg
ICAgICAgICAgICB9IGVsc2UgIHsgLy8gKGludGVydmFsMi54MiA+PSBpbnRlcnZhbDEueDIpIAor
ICAgICAgICAgICAgICAgIGludGVydmFsMS54MiA9IGludGVydmFsMi54MTsKKyAgICAgICAgICAg
ICAgICBpMSArPSAxOworICAgICAgICAgICAgfSAgICAgICAgICAgCisgICAgICAgIH0KKyAgICB9
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1hTSW50ZXJ2YWwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1hTSW50ZXJ2YWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZTQyNTQ1N2QxNDQ2NTQ0ZGIwNTVm
YzA4ZTUxMjgxNTk5ZmFkY2I0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvWFNJbnRlcnZhbC5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlz
Y2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAg
ICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBIT0xERVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIFhTSW50ZXJ2YWxfaAorI2RlZmluZSBYU0ludGVydmFsX2gKKworI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgWFNJbnRlcnZhbCB7Citw
dWJsaWM6CisgICAgZmxvYXQgeDE7CisgICAgZmxvYXQgeDI7CisKKyAgICBYU0ludGVydmFsKGZs
b2F0IHgxID0gMCwgZmxvYXQgeDIgPSAwKSAKKyAgICAgICAgOiB4MSh4MSkKKyAgICAgICAgLCB4
Mih4MikgCisgICAgeyAKKyAgICB9CisKKyAgICBib29sIGludGVyc2VjdChjb25zdCBYU0ludGVy
dmFsJiwgWFNJbnRlcnZhbCYpIGNvbnN0OyAKK307CisKK3ZvaWQgc29ydFhTSW50ZXJ2YWxzKFZl
Y3RvcjxYU0ludGVydmFsPiYpOwordm9pZCBtZXJnZVhTSW50ZXJ2YWxzKGNvbnN0IFZlY3RvcjxY
U0ludGVydmFsPiYsIGNvbnN0IFZlY3RvcjxYU0ludGVydmFsPiYsIFZlY3RvcjxYU0ludGVydmFs
PiYpOwordm9pZCBpbnRlcnNlY3RYU0ludGVydmFscyhjb25zdCBWZWN0b3I8WFNJbnRlcnZhbD4m
LCBjb25zdCBWZWN0b3I8WFNJbnRlcnZhbD4mLCBWZWN0b3I8WFNJbnRlcnZhbD4mKTsKK3ZvaWQg
c3VidHJhY3RYU0ludGVydmFscyhjb25zdCBWZWN0b3I8WFNJbnRlcnZhbD4mLCBjb25zdCBWZWN0
b3I8WFNJbnRlcnZhbD4mLCBWZWN0b3I8WFNJbnRlcnZhbD4mKTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gWFNJbnRlcnZhbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9YU1BvbHlnb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvWFNQb2x5Z29uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMzFkOTRhMWVjYjBjNjk2
NDk5ZDI2NDc3MzNjM2Y5N2NhODY0NWY3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvWFNQb2x5Z29uLmNwcApAQCAtMCwwICsxLDM2NSBAQAorIC8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwor
ICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBI
T0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiWFNQb2x5Z29uLmgiCisKKyNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBN
YXhFZGdlWUNvbXBhcmF0b3IgeyAgICAKKyAgICBib29sIG9wZXJhdG9yKCkgKGNvbnN0IFhTRWRn
ZSogZTEsIGNvbnN0IFhTRWRnZSogZTIpIGNvbnN0IAorICAgIHsgICAgICAgCisgICAgICAgIHJl
dHVybiBlMS0+bWF4WSgpIDwgZTItPm1heFkoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVy
YXRvcigpIChjb25zdCBYU0VkZ2UqIGUsIGZsb2F0IHkpIGNvbnN0IAorICAgIHsgICAgICAgCisg
ICAgICAgIHJldHVybiBlLT5tYXhZKCkgPCB5OworICAgIH0KK307CisKK3N0cnVjdCBNaW5FZGdl
WUNvbXBhcmF0b3IgeyAgICAKKyAgICBib29sIG9wZXJhdG9yKCkgKGNvbnN0IFhTRWRnZSogZTEs
IGNvbnN0IFhTRWRnZSogZTIpIGNvbnN0IAorICAgIHsgICAgICAgCisgICAgICAgIHJldHVybiBl
MS0+bWluWSgpIDwgZTItPm1pblkoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcigp
IChjb25zdCBYU0VkZ2UqIGUsIGZsb2F0IHkpIGNvbnN0CisgICAgeyAgICAgICAKKyAgICAgICAg
cmV0dXJuIGUtPm1pblkoKSA8IHk7CisgICAgfQorfTsKKworc3RydWN0IEludGVyc2VjdGlvblhD
b21wYXJhdG9yIHsKKyAgICBib29sIG9wZXJhdG9yKCkgKGNvbnN0IFhTSW50ZXJzZWN0aW9uJiBp
MSwgY29uc3QgWFNJbnRlcnNlY3Rpb24mIGkyKSBjb25zdCAKKyAgICB7ICAgICAgIAorICAgICAg
ICByZXR1cm4gKGkxLnggPT0gaTIueCkgPyBpMS50eXBlIDwgaTIudHlwZSA6IGkxLnggPCBpMi54
OworICAgIH0KK307CisKK1hTRWRnZVRyZWU6OlhTRWRnZVRyZWUoY29uc3QgVmVjdG9yPFhTRWRn
ZSo+JiBzb3J0ZWRFZGdlcykgCisgICAgOiBjZW50ZXIoMCkKKyAgICAsIGFib3ZlQ2VudGVyKDAp
CisgICAgLCBiZWxvd0NlbnRlcigwKQoreworICAgIGlmIChzb3J0ZWRFZGdlcy5zaXplKCkgPiAw
KQorICAgICAgICBpbml0RWRnZVRyZWUodGhpcywgc29ydGVkRWRnZXMpOworfQorCit2b2lkIFhT
RWRnZVRyZWU6OmluaXRFZGdlVHJlZShYU0VkZ2VUcmVlKiBub2RlLCBjb25zdCBWZWN0b3I8WFNF
ZGdlKj4mIGVkZ2VzKQoreworICAgIHNpemVfdCBlZGdlc1NpemUgPSBlZGdlcy5zaXplKCk7ICAK
KyAgICBzaXplX3QgY2VudGVySW5kZXggPSBlZGdlc1NpemUgLyAyOworICAgIG5vZGUtPmNlbnRl
ciA9IChlZGdlc1tjZW50ZXJJbmRleF0tPm1pblkoKSArIGVkZ2VzW2NlbnRlckluZGV4XS0+bWF4
WSgpKSAvIDI7CisgICAgCisgICAgVmVjdG9yPFhTRWRnZSo+IGFib3ZlQ2VudGVyRWRnZXM7Cisg
ICAgVmVjdG9yPFhTRWRnZSo+IGJlbG93Q2VudGVyRWRnZXM7CisgICAgCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBlZGdlc1NpemU7IGkrKykgeworICAgICAgICBYU0VkZ2UqIGVkZ2UgPSBl
ZGdlc1tpXTsKKyAgICAgICAgaWYgKGVkZ2UtPm1heFkoKSA8IG5vZGUtPmNlbnRlcikKKyAgICAg
ICAgICAgIGFib3ZlQ2VudGVyRWRnZXMuYXBwZW5kKGVkZ2UpOworICAgICAgICBlbHNlIGlmIChl
ZGdlLT5taW5ZKCkgPiBub2RlLT5jZW50ZXIpCisgICAgICAgICAgICBiZWxvd0NlbnRlckVkZ2Vz
LmFwcGVuZChlZGdlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbm9kZS0+b3ZlcmxhcENl
bnRlci5hcHBlbmQoZWRnZSk7CisgICAgfQorICAgIAorICAgIC8vIEZJWE1FOiBjcmVhdGUgdHdv
IHNvcnRlZCBjb3BpZXMgb2Ygb3ZlcmxhcENlbnRlcjogb3ZlcmxhcENlbnRlck1pblksIG92ZXJs
YXBDZW50ZXJNYXhZLCB1c2UgdGhlbSBpbiBmaW5kLi4uCisgICAgCisgICAgaWYgKGFib3ZlQ2Vu
dGVyRWRnZXMuc2l6ZSgpID4gMCkKKyAgICAgICAgbm9kZS0+YWJvdmVDZW50ZXIgPSBhZG9wdFB0
cihuZXcgWFNFZGdlVHJlZShhYm92ZUNlbnRlckVkZ2VzKSk7CisgICAgaWYgKGJlbG93Q2VudGVy
RWRnZXMuc2l6ZSgpID4gMCkKKyAgICAgICAgbm9kZS0+YmVsb3dDZW50ZXIgPSBhZG9wdFB0cihu
ZXcgWFNFZGdlVHJlZShiZWxvd0NlbnRlckVkZ2VzKSk7Cit9CisKK3ZvaWQgWFNFZGdlVHJlZTo6
ZmluZEVkZ2VzVGhhdE92ZXJsYXBZKGZsb2F0IHksIFZlY3RvcjxYU0VkZ2UqPiYgcnYpIGNvbnN0
Cit7CisgICAgaWYgKHkgPCBjZW50ZXIpIHsKKyAgICAgICAgaWYgKGFib3ZlQ2VudGVyKSAKKyAg
ICAgICAgICAgIGFib3ZlQ2VudGVyLT5maW5kRWRnZXNUaGF0T3ZlcmxhcFkoeSwgcnYpOworICAg
IH0gZWxzZSBpZiAoeSA+IGNlbnRlcikgeworICAgICAgICBpZiAoYmVsb3dDZW50ZXIpIAorICAg
ICAgICAgICAgYmVsb3dDZW50ZXItPmZpbmRFZGdlc1RoYXRPdmVybGFwWSh5LCBydik7CisgICAg
fQorICAgIAorICAgIHNpemVfdCBvdmVybGFwRWRnZXNTaXplID0gb3ZlcmxhcENlbnRlci5zaXpl
KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvdmVybGFwRWRnZXNTaXplOyBpKyspIHsK
KyAgICAgICAgWFNFZGdlKiBlZGdlID0gb3ZlcmxhcENlbnRlcltpXTsKKyAgICAgICAgaWYgKHkg
Pj0gZWRnZS0+bWluWSgpICYmIHkgPD0gZWRnZS0+bWF4WSgpKQorICAgICAgICAgICAgcnYuYXBw
ZW5kKGVkZ2UpOworICAgIH0KK30KKwordm9pZCBYU0VkZ2VUcmVlOjpmaW5kRWRnZXNUaGF0T3Zl
cmxhcEludGVydmFsKGZsb2F0IHlNaW4sIGZsb2F0IHlNYXgsIFZlY3RvcjxYU0VkZ2UqPiYgcnYp
IGNvbnN0Cit7CisgICAgaWYgKCh5TWluIDwgY2VudGVyKSAmJiBhYm92ZUNlbnRlcikKKyAgICAg
ICAgYWJvdmVDZW50ZXItPmZpbmRFZGdlc1RoYXRPdmVybGFwSW50ZXJ2YWwoeU1pbiwgeU1heCwg
cnYpOworCisgICAgaWYgKCh5TWF4ID4gY2VudGVyKSAmJiBiZWxvd0NlbnRlcikKKyAgICAgICAg
YmVsb3dDZW50ZXItPmZpbmRFZGdlc1RoYXRPdmVybGFwSW50ZXJ2YWwoeU1pbiwgeU1heCwgcnYp
OworICAgIAorICAgIHNpemVfdCBvdmVybGFwRWRnZXNTaXplID0gb3ZlcmxhcENlbnRlci5zaXpl
KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvdmVybGFwRWRnZXNTaXplOyBpKyspIHsK
KyAgICAgICAgWFNFZGdlKiBlZGdlID0gb3ZlcmxhcENlbnRlcltpXTsKKyAgICAgICAgaWYgKHlN
YXggPiBlZGdlLT5taW5ZKCkgJiYgeU1pbiA8IGVkZ2UtPm1heFkoKSkKKyAgICAgICAgICAgIHJ2
LmFwcGVuZChlZGdlKTsKKyAgICB9Cit9CisKK1hTUG9seWdvbjo6WFNQb2x5Z29uKFBhc3NPd25Q
dHI8VmVjdG9yPGZsb2F0PiA+IGNvb3JkaW5hdGVzLCBXaW5kUnVsZSBmaWxsUnVsZSkKKyAgICA6
IFhTaGFwZSgpCisgICAgLCBtX2Nvb3JkaW5hdGVzKGNvb3JkaW5hdGVzKQorICAgICwgbV9maWxs
UnVsZShmaWxsUnVsZSkgCit7CisgICAgLy8gRklYTUU6IHNwZWNpYWwgY2FzZXMgZm9yIChsZW5n
dGggPT0pIDAsIDEsIDIgIHBvaW50cworICAgIC8vIEZJWE1FOiBhc3N1bWluZyBvcGVuIHBvbHln
b25zIGZvciBub3cKKyAgICAKKyAgICBzaXplX3QgblZlcnRpY2VzID0gbnVtYmVyT2ZWZXJ0aWNl
cygpOworICAgIG1fZWRnZXMucmVzaXplKG5WZXJ0aWNlcyk7CisgICAgVmVjdG9yPFhTRWRnZSo+
IHNvcnRlZEVkZ2VzTWluWShuVmVydGljZXMpOworICAgIAorICAgIGZsb2F0IG1pblggPSBnZXRY
QXQoMCk7CisgICAgZmxvYXQgbWluWSA9IGdldFlBdCgwKTsKKyAgICBmbG9hdCBtYXhYID0gbWlu
WDsKKyAgICBmbG9hdCBtYXhZID0gbWluWTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
blZlcnRpY2VzOyBpKyspIHsKKyAgICAgICAgZmxvYXQgeCA9IGdldFhBdChpKTsKKyAgICAgICAg
ZmxvYXQgeSA9IGdldFlBdChpKTsKKyAgICAgICAgCisgICAgICAgIG1pblggPSBzdGQ6Om1pbih4
LCBtaW5YKTsKKyAgICAgICAgbWF4WCA9IHN0ZDo6bWF4KHgsIG1heFgpOworICAgICAgICBtaW5Z
ID0gc3RkOjptaW4oeSwgbWluWSk7CisgICAgICAgIG1heFkgPSBzdGQ6Om1heCh5LCBtYXhZKTsK
KyAgICAgICAgCisgICAgICAgIG1fZWRnZXNbaV0ucG9seWdvbiA9IHRoaXM7CisgICAgICAgIG1f
ZWRnZXNbaV0uaTEgPSBpOworICAgICAgICBtX2VkZ2VzW2ldLmkyID0gKGkrMSkgJSBuVmVydGlj
ZXM7CisgICAgICAgIAorICAgICAgICBzb3J0ZWRFZGdlc01pbllbaV0gPSAmbV9lZGdlc1tpXTsK
KyAgICB9CisgICAgCisgICAgbV9ib3VuZGluZ0JveC5zZXRYKG1pblgpOworICAgIG1fYm91bmRp
bmdCb3guc2V0WShtaW5ZKTsKKyAgICBtX2JvdW5kaW5nQm94LnNldFdpZHRoKG1heFggLSBtaW5Y
KTsKKyAgICBtX2JvdW5kaW5nQm94LnNldEhlaWdodChtYXhZIC0gbWluWSk7CisKKyAgICBzdGQ6
OnNvcnQoc29ydGVkRWRnZXNNaW5ZLmJlZ2luKCksIHNvcnRlZEVkZ2VzTWluWS5lbmQoKSwgTWlu
RWRnZVlDb21wYXJhdG9yKCkpOworICAgIG1fZWRnZVRyZWUgPSBhZG9wdFB0cihuZXcgWFNFZGdl
VHJlZShzb3J0ZWRFZGdlc01pblkpKTsKK30KKworc3RhdGljIGJvb2wgY29tcHV0ZVhJbnRlcnNl
Y3Rpb24oY29uc3QgWFNFZGdlKiBlcCwgZmxvYXQgeSwgWFNJbnRlcnNlY3Rpb24mIGkpCit7Cisg
ICAgY29uc3QgWFNFZGdlJiBlID0gKmVwOworICAgIAorICAgIGlmIChlLm1pblkoKSA+IHkgfHwg
ZS5tYXhZKCkgPCB5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgZmxvYXQgeDEg
PSBlLngxKCk7CisgICAgZmxvYXQgeTEgPSBlLnkxKCk7CisgICAgZmxvYXQgeDIgPSBlLngyKCk7
CisgICAgZmxvYXQgeTIgPSBlLnkyKCk7CisgICAgZmxvYXQgZHkgPSB5MiAtIHkxOworICAgIAor
ICAgIGkuZWRnZSA9IGVwOworICAgIGkueSA9IHk7CisgICAgCisgICAgaWYgKCFkeSkgeworICAg
ICAgICBpLnR5cGUgPSBWZXJ0ZXhZQm90aDsKKyAgICAgICAgaS54ID0gZS5taW5YKCk7CisgICAg
fSBlbHNlIGlmICh5ID09IGUubWluWSgpKSB7CisgICAgICAgIGkudHlwZSA9IFZlcnRleFlNaW47
CisgICAgICAgIGkueCA9ICh5MSA8IHkyKSA/IHgxIDogeDI7CisgICAgfSBlbHNlIGlmICh5ID09
IGUubWF4WSgpKSB7CisgICAgICAgIGkudHlwZSA9IFZlcnRleFlNYXg7CisgICAgICAgIGkueCA9
ICh5MSA+IHkyKSA/IHgxIDogeDI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaS50eXBlID0gTm9y
bWFsOworICAgICAgICBpLnggPSAoKHkgLSB5MSkgKiAoeDIgLSB4MSkgLyBkeSkgKyB4MTsKKyAg
ICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Zsb2F0IFhTUG9seWdvbjo6cmlnaHRW
ZXJ0ZXhZKHNpemVfdCBpbmRleCkgY29uc3QgCit7IAorICAgIHNpemVfdCBuVmVydGljZXMgPSBu
dW1iZXJPZlZlcnRpY2VzKCk7CisgICAgc2l6ZV90IGkxID0gKGluZGV4ICsgMSkgJSBuVmVydGlj
ZXM7CisgICAgc2l6ZV90IGkyID0gKGluZGV4IC0gMSkgJSBuVmVydGljZXM7CisKKyAgICBpZiAo
Z2V0WEF0KGkxKSA9PSBnZXRYQXQoaTIpKQorICAgICAgICByZXR1cm4gZ2V0WUF0KGkxKSA+IGdl
dFlBdChpMikgPyBnZXRZQXQoaTEpIDogZ2V0WUF0KGkyKTsKKworICAgIHJldHVybiBnZXRYQXQo
aTEpID4gZ2V0WEF0KGkyKSA/IGdldFlBdChpMSkgOiBnZXRZQXQoaTIpOworfQorCitzdGF0aWMg
Ym9vbCBhcHBlbmRJbnRlcnZhbFgoZmxvYXQgeCwgYm9vbCBpbnNpZGUsIFZlY3RvcjxYU0ludGVy
dmFsPiYgdikKK3sKKyAgICBpZiAoIWluc2lkZSkKKyAgICAgICAgdi5hcHBlbmQoWFNJbnRlcnZh
bCh4KSk7CisgICAgZWxzZQorICAgICAgICB2W3Yuc2l6ZSgpIC0gMV0ueDIgPSB4OworICAgIAor
ICAgIHJldHVybiAhaW5zaWRlOworfQorCit2b2lkIFhTUG9seWdvbjo6Y29tcHV0ZVhJbnRlcnNl
Y3Rpb25zKGZsb2F0IHksIFZlY3RvcjxYU0ludGVydmFsPiYgcnYpIGNvbnN0Cit7CisgICAgVmVj
dG9yPFhTRWRnZSo+IG92ZXJsYXBwaW5nRWRnZXM7CisgICAgbV9lZGdlVHJlZS0+ZmluZEVkZ2Vz
VGhhdE92ZXJsYXBZKHksIG92ZXJsYXBwaW5nRWRnZXMpOworCisgICAgVmVjdG9yPFhTSW50ZXJz
ZWN0aW9uPiBpbnRlcnNlY3Rpb25zOworICAgIFhTSW50ZXJzZWN0aW9uIGludGVyc2VjdGlvbjsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG92ZXJsYXBwaW5nRWRnZXMuc2l6ZSgpOyBpKysp
IHsgICAKKyAgICAgICAgaWYgKGNvbXB1dGVYSW50ZXJzZWN0aW9uKG92ZXJsYXBwaW5nRWRnZXNb
aV0sIHksIGludGVyc2VjdGlvbikgJiYgaW50ZXJzZWN0aW9uLnR5cGUgIT0gVmVydGV4WUJvdGgp
CisgICAgICAgICAgICBpbnRlcnNlY3Rpb25zLmFwcGVuZChpbnRlcnNlY3Rpb24pOworICAgIH0K
KyAgICBpZiAoaW50ZXJzZWN0aW9ucy5zaXplKCkgPCAyKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgc3RkOjpzb3J0KGludGVyc2VjdGlvbnMuYmVnaW4oKSwgaW50ZXJzZWN0aW9ucy5lbmQo
KSwgSW50ZXJzZWN0aW9uWENvbXBhcmF0b3IoKSk7CisgICAgCisgICAgc2l6ZV90IGluZGV4ID0g
MDsKKyAgICBpbnQgd2luZENvdW50ID0gMDsKKyAgICBib29sIGluc2lkZSA9IGZhbHNlOworICAg
IAorICAgIHdoaWxlIChpbmRleCA8IGludGVyc2VjdGlvbnMuc2l6ZSgpKSB7CisgICAgICAgIGNv
bnN0IFhTSW50ZXJzZWN0aW9uJiB0aGlzSW50ID0gaW50ZXJzZWN0aW9uc1tpbmRleF07CisKKyAg
ICAgICAgaWYgKGluZGV4ICsgMSA8IGludGVyc2VjdGlvbnMuc2l6ZSgpKSB7CisgICAgICAgICAg
ICBjb25zdCBYU0ludGVyc2VjdGlvbiYgbmV4dEludCA9IGludGVyc2VjdGlvbnNbaW5kZXggKzFd
OworICAgICAgICAgICAgaWYgKCh0aGlzSW50LnggPT0gbmV4dEludC54KSAmJiAodGhpc0ludC50
eXBlID09IFZlcnRleFlNaW4gfHwgdGhpc0ludC50eXBlID09IFZlcnRleFlNYXgpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKHRoaXNJbnQudHlwZSA9PSBuZXh0SW50LnR5cGUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gc2tpcCBWZXJ0ZXhZTWF4LFZlcnRleFlNYXggYW5kIFZlcnRleFlNaW4s
VmVydGV4WU1pbgorICAgICAgICAgICAgICAgICAgICBpbmRleCArPSAyOworICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFZlcnRleFlNaW4sVmVydGV4WU1h
eCBvciBWZXJ0ZXhZTWF4LFZlcnRleFlNaW4gPT4gVmVydGV4WU1pbgorICAgICAgICAgICAgICAg
ICAgICBpZiAobmV4dEludC50eXBlID09IFZlcnRleFlNYXgpCisgICAgICAgICAgICAgICAgICAg
ICAgICBpbnRlcnNlY3Rpb25zW2luZGV4ICsgMV0gPSB0aGlzSW50OworICAgICAgICAgICAgICAg
ICAgICBpbmRleCArPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY29uc3Qg
WFNFZGdlJiB0aGlzRWRnZSA9ICp0aGlzSW50LmVkZ2U7CisgICAgICAgIGJvb2wgY3Jvc3Npbmcg
PSAhd2luZENvdW50OyAKKyAgICAgICAgCisgICAgICAgICBpZiAoZmlsbFJ1bGUoKSA9PSBSVUxF
X0VWRU5PREQpIHsKKyAgICAgICAgICAgIHdpbmRDb3VudCArPSAoZ2V0WUF0KHRoaXNFZGdlLmky
KSA+IGdldFlBdCh0aGlzRWRnZS5pMSkpID8gKzEgOiAtMTsKKyAgICAgICAgICAgIGNyb3NzaW5n
ID0gY3Jvc3NpbmcgfHwgIXdpbmRDb3VudDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
aWYgKCh0aGlzSW50LnR5cGUgPT0gTm9ybWFsKSB8fCAodGhpc0ludC50eXBlID09IFZlcnRleFlN
aW4pKSB7CisgICAgICAgICAgICBpZiAoY3Jvc3NpbmcpCisgICAgICAgICAgICAgICAgaW5zaWRl
ID0gYXBwZW5kSW50ZXJ2YWxYKHRoaXNJbnQueCwgaW5zaWRlLCBydik7CisgICAgICAgIH0gZWxz
ZSBpZiAodGhpc0ludC50eXBlID09IFZlcnRleFlNYXgpIHsgCisgICAgICAgICAgICBpbnQgdmkg
PSAoZ2V0WUF0KHRoaXNFZGdlLmkyKSA+IGdldFlBdCh0aGlzRWRnZS5pMSkpID8gdGhpc0VkZ2Uu
aTIgOiB0aGlzRWRnZS5pMTsKKyAgICAgICAgICAgIGlmIChjcm9zc2luZyAmJiByaWdodFZlcnRl
eFkodmkpID4geSkKKyAgICAgICAgICAgICAgICBpbnNpZGUgPSBhcHBlbmRJbnRlcnZhbFgodGhp
c0VkZ2UubWF4WCgpLCBpbnNpZGUsIHJ2KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
aW5kZXggKz0gMTsKKyAgICB9Cit9CisKKy8vIFJldHVybiB0aGUgWCBwcm9qZWN0aW9ucyBvZiB0
aGUgZWRnZXMgdGhhdCBvdmVybGFwIHkxLHkyLgordm9pZCBYU1BvbHlnb246OmNvbXB1dGVFZGdl
SW50ZXJzZWN0aW9ucyhmbG9hdCB5MSwgZmxvYXQgeTIsIFZlY3RvcjxYU0ludGVydmFsPiYgcnYp
IGNvbnN0Cit7CisgICAgaWYgKHkxID4geTIpCisgICAgICAgIHN0ZDo6c3dhcCh5MSwgeTIpOwor
ICAgIAorICAgIFZlY3RvcjxYU0VkZ2UgKj4gb3ZlcmxhcHBpbmdFZGdlczsKKyAgICBtX2VkZ2VU
cmVlLT5maW5kRWRnZXNUaGF0T3ZlcmxhcEludGVydmFsKHkxLCB5Miwgb3ZlcmxhcHBpbmdFZGdl
cyk7CisgICAgCisgICAgWFNJbnRlcnNlY3Rpb24gaW50ZXJzZWN0aW9uOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgb3ZlcmxhcHBpbmdFZGdlcy5zaXplKCk7IGkrKykgeworICAgICAgICBj
b25zdCBYU0VkZ2UmIGVkZ2UgPSAqb3ZlcmxhcHBpbmdFZGdlc1tpXTsKKyAgICAgICAgZmxvYXQg
eDEsIHgyOworICAgICAgICAKKyAgICAgICAgaWYgKGVkZ2UubWluWSgpIDwgeTEpIHsKKyAgICAg
ICAgICAgIGNvbXB1dGVYSW50ZXJzZWN0aW9uKG92ZXJsYXBwaW5nRWRnZXNbaV0sIHkxLCBpbnRl
cnNlY3Rpb24pOworICAgICAgICAgICAgeDEgPSBpbnRlcnNlY3Rpb24ueDsKKyAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICB4MSA9IChlZGdlLnkxKCkgPCBlZGdlLnkyKCkpID8gZWRnZS54MSgp
IDogZWRnZS54MigpOworICAgICAgICAKKyAgICAgICAgaWYgKGVkZ2UubWF4WSgpID4geTIpIHsK
KyAgICAgICAgICAgIGNvbXB1dGVYSW50ZXJzZWN0aW9uKG92ZXJsYXBwaW5nRWRnZXNbaV0sIHky
LCBpbnRlcnNlY3Rpb24pOworICAgICAgICAgICAgeDIgPSBpbnRlcnNlY3Rpb24ueDsKKyAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICB4MiA9IChlZGdlLnkxKCkgPiBlZGdlLnkyKCkpID8gZWRn
ZS54MSgpIDogZWRnZS54MigpOworICAgICAgICAKKyAgICAgICAgaWYgKHgxID4geDIpIC8vIEZJ
WE1FOiBJbnRlcnZhbCBjb25zdHJ1Y3RvciBzaG91bGQgZG8gdGhpcworICAgICAgICAgICAgc3Rk
Ojpzd2FwKHgxLCB4Mik7CisgICAgICAgIAorICAgICAgICBydi5hcHBlbmQoWFNJbnRlcnZhbCh4
MSwgeDIpKTsKKyAgICB9CisgICAgCisgICAgc29ydFhTSW50ZXJ2YWxzKHJ2KTsKK30KKwordm9p
ZCBYU1BvbHlnb246OmdldE91dHNpZGVJbnRlcnZhbHMoZmxvYXQgeTEsIGZsb2F0IHkyLCBWZWN0
b3I8WFNJbnRlcnZhbD4mIHJ2KSBjb25zdAoreworICAgIGlmICh5MSA+IHkyKQorICAgICAgICBz
dGQ6OnN3YXAoeTEsIHkyKTsKKyAgICAKKyAgICBWZWN0b3I8WFNJbnRlcnZhbD4gdjEsIHYyOwor
ICAgIGNvbXB1dGVYSW50ZXJzZWN0aW9ucyh5MSwgdjEpOworICAgIGNvbXB1dGVYSW50ZXJzZWN0
aW9ucyh5MiwgdjIpOworICAgIAorICAgIFZlY3RvcjxYU0ludGVydmFsPiBtZXJnZWRJbnRlcnZh
bHM7CisgICAgbWVyZ2VYU0ludGVydmFscyh2MSwgdjIsIG1lcmdlZEludGVydmFscyk7CisgICAg
CisgICAgVmVjdG9yPFhTSW50ZXJ2YWw+IGVkZ2VJbnRlcnZhbHM7CisgICAgY29tcHV0ZUVkZ2VJ
bnRlcnNlY3Rpb25zKHkxLCB5MiwgZWRnZUludGVydmFscyk7CisgICAgbWVyZ2VYU0ludGVydmFs
cyhtZXJnZWRJbnRlcnZhbHMsIGVkZ2VJbnRlcnZhbHMsIHJ2KTsKK30KKwordm9pZCBYU1BvbHln
b246OmdldEluc2lkZUludGVydmFscyhmbG9hdCB5MSwgZmxvYXQgeTIsIFZlY3RvcjxYU0ludGVy
dmFsPiYgcnYpIGNvbnN0Cit7CisgICAgaWYgKHkxID4geTIpCisgICAgICAgIHN0ZDo6c3dhcCh5
MSwgeTIpOworICAgIAorICAgIFZlY3RvcjxYU0ludGVydmFsPiB2MSwgdjI7CisgICAgY29tcHV0
ZVhJbnRlcnNlY3Rpb25zKHkxLCB2MSk7CisgICAgY29tcHV0ZVhJbnRlcnNlY3Rpb25zKHkyLCB2
Mik7CisgICAgCisgICAgVmVjdG9yPFhTSW50ZXJ2YWw+IGNvbW1vbkludGVydmFsczsKKyAgICBp
bnRlcnNlY3RYU0ludGVydmFscyh2MSwgdjIsIGNvbW1vbkludGVydmFscyk7CisgICAgCisgICAg
VmVjdG9yPFhTSW50ZXJ2YWw+IGVkZ2VJbnRlcnZhbHM7CisgICAgY29tcHV0ZUVkZ2VJbnRlcnNl
Y3Rpb25zKHkxLCB5MiwgZWRnZUludGVydmFscyk7CisgICAgc3VidHJhY3RYU0ludGVydmFscyhj
b21tb25JbnRlcnZhbHMsIGVkZ2VJbnRlcnZhbHMsIHJ2KTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Y
U1BvbHlnb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1hTUG9seWdvbi5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmM0MmEyOTkxMTVjYWIyZDY3YTA2Nzc3YzcwZjIxYzQ4M2MwY2I0NTIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9YU1BvbHln
b24uaApAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBT
eXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
CisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRQorICogQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgWFNQb2x5Z29uX2gKKyNkZWZp
bmUgWFNQb2x5Z29uX2gKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIldpbmRS
dWxlLmgiCisjaW5jbHVkZSAiWFNoYXBlLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
KyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IFhT
RWRnZTsKK3N0cnVjdCBYU0VkZ2VUcmVlOworCitjbGFzcyBYU1BvbHlnb24gOiBwdWJsaWMgWFNo
YXBlIHsgICAgCitwdWJsaWM6CisgICAgWFNQb2x5Z29uKFBhc3NPd25QdHI8VmVjdG9yPGZsb2F0
PiA+IGNvb3JkaW5hdGVzLCBXaW5kUnVsZSBmaWxsUnVsZSk7CisKKyAgICBmbG9hdCBnZXRYQXQo
c2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fY29vcmRpbmF0ZXMtPmF0KGkqMik7IH0KKyAgICBm
bG9hdCBnZXRZQXQoc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fY29vcmRpbmF0ZXMtPmF0KGkq
MiArIDEpOyB9CisgICAgc2l6ZV90IG51bWJlck9mVmVydGljZXMoKSBjb25zdCB7IHJldHVybiBt
X2Nvb3JkaW5hdGVzLT5zaXplKCkgLyAyOyB9CisgICAgV2luZFJ1bGUgZmlsbFJ1bGUoKSBjb25z
dCB7IHJldHVybiBtX2ZpbGxSdWxlOyB9CisKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzaGFwZUJv
dW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9ib3VuZGluZ0JveDsgfTsKKyAgICB2aXJ0dWFs
IHZvaWQgZ2V0T3V0c2lkZUludGVydmFscyhmbG9hdCB5MSwgZmxvYXQgeTIsIFZlY3RvcjxYU0lu
dGVydmFsPiYpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBnZXRJbnNpZGVJbnRlcnZhbHMoZmxv
YXQgeTEsIGZsb2F0IHkyLCBWZWN0b3I8WFNJbnRlcnZhbD4mKSBjb25zdDsKKworcHJpdmF0ZToK
KyAgICBmbG9hdCByaWdodFZlcnRleFkoc2l6ZV90KSBjb25zdDsKKyAgICB2b2lkIGNvbXB1dGVY
SW50ZXJzZWN0aW9ucyhmbG9hdCB5LCBWZWN0b3I8WFNJbnRlcnZhbD4mKSBjb25zdDsgCisgICAg
dm9pZCBjb21wdXRlRWRnZUludGVyc2VjdGlvbnMoZmxvYXQgeU1pbiwgZmxvYXQgeU1heCwgVmVj
dG9yPFhTSW50ZXJ2YWw+JikgY29uc3Q7IAorCisgICAgT3duUHRyPFZlY3RvcjxmbG9hdD4gPiBt
X2Nvb3JkaW5hdGVzOworICAgIFdpbmRSdWxlIG1fZmlsbFJ1bGU7CisgICAgRmxvYXRSZWN0IG1f
Ym91bmRpbmdCb3g7CisgICAgVmVjdG9yPFhTRWRnZT4gbV9lZGdlczsKKyAgICBPd25QdHI8WFNF
ZGdlVHJlZT4gbV9lZGdlVHJlZTsKK307CisKK3N0cnVjdCBYU0VkZ2UgeworICAgIGNvbnN0IFhT
UG9seWdvbiogcG9seWdvbjsKKyAgICBzaXplX3QgaTE7CisgICAgc2l6ZV90IGkyOworICAgIAor
ICAgIFhTRWRnZSgpIAorICAgICAgICA6IHBvbHlnb24oMCkKKyAgICAgICAgLCBpMSgwKQorICAg
ICAgICAsIGkyKDApIAorICAgIHsgCisgICAgfQorICAgIAorICAgIGZsb2F0IHgxKCkgY29uc3Qg
eyByZXR1cm4gcG9seWdvbi0+Z2V0WEF0KGkxKTsgfQorICAgIGZsb2F0IHkxKCkgY29uc3QgeyBy
ZXR1cm4gcG9seWdvbi0+Z2V0WUF0KGkxKTsgfQorICAgIGZsb2F0IHgyKCkgY29uc3QgeyByZXR1
cm4gcG9seWdvbi0+Z2V0WEF0KGkyKTsgfQorICAgIGZsb2F0IHkyKCkgY29uc3QgeyByZXR1cm4g
cG9seWdvbi0+Z2V0WUF0KGkyKTsgfQorCisgICAgZmxvYXQgbWluWCgpIGNvbnN0IHsgcmV0dXJu
IHN0ZDo6bWluKHgxKCksIHgyKCkpOyB9CisgICAgZmxvYXQgbWluWSgpIGNvbnN0IHsgcmV0dXJu
IHN0ZDo6bWluKHkxKCksIHkyKCkpOyB9IAorICAgIGZsb2F0IG1heFgoKSBjb25zdCB7IHJldHVy
biBzdGQ6Om1heCh4MSgpLCB4MigpKTsgfQorICAgIGZsb2F0IG1heFkoKSBjb25zdCB7IHJldHVy
biBzdGQ6Om1heCh5MSgpLCB5MigpKTsgfQorfTsKKworc3RydWN0IFhTRWRnZVRyZWUgeworcHJp
dmF0ZToKKyAgICAvLyBGSVhNRTogbWluU3VidHJlZVNpemUgLSBkb24ndCBib3RoZXIgY3JlYXRp
bmcgc3VidHJlZXMgZm9yIGxlc3MgdGhhbiBOIGVkZ2VzCisgICAgZmxvYXQgY2VudGVyOworICAg
IFZlY3RvcjxYU0VkZ2UqPiBvdmVybGFwQ2VudGVyOyAKKyAgICBPd25QdHI8WFNFZGdlVHJlZT4g
YWJvdmVDZW50ZXI7IAorICAgIE93blB0cjxYU0VkZ2VUcmVlPiBiZWxvd0NlbnRlcjsKKyAgICAK
KyAgICBzdGF0aWMgdm9pZCBpbml0RWRnZVRyZWUoWFNFZGdlVHJlZSosIGNvbnN0IFZlY3RvcjxY
U0VkZ2UqPiYgc29ydGVkRWRnZXMpOworICAgIAorcHVibGljOgorICAgIFhTRWRnZVRyZWUoY29u
c3QgVmVjdG9yPFhTRWRnZSo+JiBzb3J0ZWRFZGdlcyk7CisKKyAgICB2b2lkIGZpbmRFZGdlc1Ro
YXRPdmVybGFwWShmbG9hdCB5LCBWZWN0b3I8WFNFZGdlKj4mKSBjb25zdDsKKyAgICB2b2lkIGZp
bmRFZGdlc1RoYXRPdmVybGFwSW50ZXJ2YWwoZmxvYXQgbWluWSwgZmxvYXQgbWF4WSwgVmVjdG9y
PFhTRWRnZSo+JikgY29uc3Q7Cit9OworCitlbnVtIFhTSW50ZXJzZWN0aW9uVHlwZSB7CisgICAg
Tm9ybWFsID0gMCwKKyAgICBWZXJ0ZXhZTWluID0gMSwKKyAgICBWZXJ0ZXhZTWF4ID0gMiwKKyAg
ICBWZXJ0ZXhZQm90aCA9IDMKK307CisKK3N0cnVjdCBYU0ludGVyc2VjdGlvbiB7CisgICAgY29u
c3QgWFNFZGdlKiBlZGdlOworICAgIGZsb2F0IHg7CisgICAgZmxvYXQgeTsKKyAgICBYU0ludGVy
c2VjdGlvblR5cGUgdHlwZTsKKyAgICAKKyAgICBYU0ludGVyc2VjdGlvbigpIAorICAgICAgICA6
IGVkZ2UoMCkKKyAgICAgICAgLCB4KDApCisgICAgICAgICwgeSgwKQorICAgICAgICAsIHR5cGUo
Tm9ybWFsKSAKKyAgICB7IAorICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIFhTUG9seWdvbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9YU1JlY3RhbmdsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9YU1JlY3RhbmdsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmVmZmM5Y2YwN2IzYjUyM2UwNmUxZDFi
NDBiZTBlMDg3M2EyZmUwYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1hTUmVjdGFuZ2xlLmNwcApAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBk
aXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAq
ICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIEhPTERFUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJYU1JlY3RhbmdsZS5oIgorCisjaW5jbHVkZSA8
d3RmL01hdGhFeHRyYXMuaD4KKworLy8gU2VlIGh0dHA6Ly9oYW5zbXVsbGVyLXdlYmtpdC5ibG9n
c3BvdC5jb20vMjAxMi8wNy9jb21wdXRpbmctaG9yaXpvbmFsLXJvdW5kZWQtcmVjdGFuZ2xlLmh0
bWwKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgaW5saW5lIGZsb2F0IGVsbGlwc2VY
SW50ZXJjZXB0KGZsb2F0IHksIGZsb2F0IHJ4LCBmbG9hdCByeSkgCit7CisgICAgQVNTRVJUKHJ5
ID4gMCk7CisgICAgcmV0dXJuIHJ4ICogc3FydCgxIC0gKHkqeSkgLyAocnkqcnkpKTsKK30KKwor
dm9pZCBYU1JlY3RhbmdsZTo6Z2V0T3V0c2lkZUludGVydmFscyhmbG9hdCB5MSwgZmxvYXQgeTIs
IFZlY3RvcjxYU0ludGVydmFsPiYgcnYpIGNvbnN0Cit7CisgICAgaWYgKHkxID4geTIpCisgICAg
ICAgIHN0ZDo6c3dhcCh5MSwgeTIpOworCisgICAgaWYgKHkyIDwgbV95IHx8IHkxID49IG1feSAr
IG1faGVpZ2h0KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgZmxvYXQgeDEgPSBtX3g7Cisg
ICAgZmxvYXQgeDIgPSBtX3ggKyBtX3dpZHRoOworICAgIAorICAgIGlmIChtX3J5ID4gMCkgewor
ICAgICAgICBpZiAoeTIgPCBtX3kgKyBtX3J5KSB7CisgICAgICAgICAgICBmbG9hdCB5aSA9IHky
IC0gbV95IC0gbV9yeTsKKyAgICAgICAgICAgIGZsb2F0IHhpID0gZWxsaXBzZVhJbnRlcmNlcHQo
eWksIG1fcngsIG1fcnkpOworICAgICAgICAgICAgeDEgPSBtX3ggKyBtX3J4IC0geGk7CisgICAg
ICAgICAgICB4MiA9IG1feCArIG1fd2lkdGggLSBtX3J4ICsgeGk7CisgICAgICAgIH0gZWxzZSBp
ZiAoeTEgPiBtX3kgKyBtX2hlaWdodCAtIG1fcnkpIHsKKyAgICAgICAgICAgIGZsb2F0IHlpID0g
IHkxIC0gKG1feSArIG1faGVpZ2h0IC0gbV9yeSk7CisgICAgICAgICAgICBmbG9hdCB4aSA9IGVs
bGlwc2VYSW50ZXJjZXB0KHlpLCBtX3J4LCBtX3J5KTsKKyAgICAgICAgICAgIHgxID0gbV94ICsg
bV9yeCAtIHhpOworICAgICAgICAgICAgeDIgPSBtX3ggKyBtX3dpZHRoIC0gbV9yeCArIHhpOwor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJ2LmFwcGVuZChYU0ludGVydmFsKHgxLCB4Mikp
OworfQorCit2b2lkIFhTUmVjdGFuZ2xlOjpnZXRJbnNpZGVJbnRlcnZhbHMoZmxvYXQgeTEsIGZs
b2F0IHkyLCBWZWN0b3I8WFNJbnRlcnZhbD4mIHJ2KSBjb25zdAoreworICAgIGlmICh5MSA+IHky
KQorICAgICAgICBzdGQ6OnN3YXAoeTEsIHkyKTsKKworICAgIGlmICh5MSA8IG1feSB8fCB5MiA+
PSBtX3kgKyBtX2hlaWdodCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGZsb2F0IHgxID0g
bV94OworICAgIGZsb2F0IHgyID0gbV94ICsgbV93aWR0aDsKKyAgICAKKyAgICBpZiAobV9yeSA+
IDApIHsKKyAgICAgICAgYm9vbCB5MUludGVyY2VwdHNDb3JuZXIgPSB5MSA8IG1feSArIG1fcnk7
CisgICAgICAgIGJvb2wgeTJJbnRlcmNlcHRzQ29ybmVyID0geTIgPiBtX3kgKyBtX2hlaWdodCAt
IG1fcnk7CisgICAgICAgIGZsb2F0IHhpOworCisgICAgICAgIGlmICh5MUludGVyY2VwdHNDb3Ju
ZXIgJiYgeTJJbnRlcmNlcHRzQ29ybmVyKSB7CisgICAgICAgICAgICBpZiAgKHkxIDwgbV9oZWln
aHQgKyAyKm1feSAtIHkyKSB7IAorICAgICAgICAgICAgICAgIGZsb2F0IHlpID0geTEgLSBtX3kg
LSBtX3J5OworICAgICAgICAgICAgICAgIHhpID0gZWxsaXBzZVhJbnRlcmNlcHQoeWksIG1fcngs
IG1fcnkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmbG9hdCB5aSA9
ICB5MiAtIChtX3kgKyBtX2hlaWdodCAtIG1fcnkpOworICAgICAgICAgICAgICAgIHhpID0gZWxs
aXBzZVhJbnRlcmNlcHQoeWksIG1fcngsIG1fcnkpOworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgaWYgKHkxSW50ZXJjZXB0c0Nvcm5lcikgeworICAgICAgICAgICAgZmxvYXQgeWkgPSB5
MSAtIG1feSAtIG1fcnk7CisgICAgICAgICAgICB4aSA9IGVsbGlwc2VYSW50ZXJjZXB0KHlpLCBt
X3J4LCBtX3J5KTsKKyAgICAgICAgfSBlbHNlIGlmICh5MkludGVyY2VwdHNDb3JuZXIpIHsKKyAg
ICAgICAgICAgIGZsb2F0IHlpID0gIHkyIC0gKG1feSArIG1faGVpZ2h0IC0gbV9yeSk7CisgICAg
ICAgICAgICB4aSA9IGVsbGlwc2VYSW50ZXJjZXB0KHlpLCBtX3J4LCBtX3J5KTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICh5MUludGVyY2VwdHNDb3JuZXIgfHwgeTJJbnRlcmNlcHRzQ29ybmVy
KSB7CisgICAgICAgICAgICB4MSA9IG1feCArIG1fcnggLSB4aTsKKyAgICAgICAgICAgIHgyID0g
bV94ICsgbV93aWR0aCAtIG1fcnggKyB4aTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBy
di5hcHBlbmQoWFNJbnRlcnZhbCh4MSwgeDIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9YU1JlY3Rh
bmdsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvWFNSZWN0YW5nbGUuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5jYmU1ZjA4ZjlmMTQ2Mjc4MTRmZjY2NTczZTE0NTc4YWJjODA1ZTNhCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvWFNSZWN0YW5n
bGUuaApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5
c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MK
KyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFCisgKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
CisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBYU1JlY3RhbmdsZV9oCisjZGVm
aW5lIFhTUmVjdGFuZ2xlX2gKKworI2luY2x1ZGUgIlhTaGFwZS5oIgorI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIFhTUmVjdGFuZ2xlIDogcHVibGljIFhTaGFwZSB7CitwdWJsaWM6CisgICAg
WFNSZWN0YW5nbGUoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwg
ZmxvYXQgcnggPSAwLCBmbG9hdCByeSA9IDApIAorICAgICAgICA6IFhTaGFwZSgpCisgICAgICAg
ICwgbV94KHgpCisgICAgICAgICwgbV95KHkpCisgICAgICAgICwgbV93aWR0aCh3aWR0aCkKKyAg
ICAgICAgLCBtX2hlaWdodChoZWlnaHQpCisgICAgICAgICwgbV9yeChyeCkKKyAgICAgICAgLCBt
X3J5KHJ5KSAKKyAgICB7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgRmxvYXRSZWN0IHNoYXBl
Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBGbG9hdFJlY3QobV94LCBtX3ksIG1fd2lkdGgs
IG1faGVpZ2h0KTsgfQorICAgIHZpcnR1YWwgdm9pZCBnZXRPdXRzaWRlSW50ZXJ2YWxzKGZsb2F0
IHkxLCBmbG9hdCB5MiwgVmVjdG9yPFhTSW50ZXJ2YWw+JikgY29uc3Q7CisgICAgdmlydHVhbCB2
b2lkIGdldEluc2lkZUludGVydmFscyhmbG9hdCB5MSwgZmxvYXQgeTIsIFZlY3RvcjxYU0ludGVy
dmFsPiYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGZsb2F0IG1feDsKKyAgICBmbG9hdCBtX3k7
CisgICAgZmxvYXQgbV93aWR0aDsKKyAgICBmbG9hdCBtX2hlaWdodDsKKyAgICBmbG9hdCBtX3J4
OworICAgIGZsb2F0IG1fcnk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBYU1JlY3RhbmdsZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9YU2hhcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvWFNo
YXBlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi43YWQ4MTg2MjkyMDllYmViZmFmOWNiMTMxN2I2ZWJlNmIzN2Fi
ZDAwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
WFNoYXBlLmNwcApAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBB
ZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICog
ICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJYU2hhcGUuaCIKKworI2luY2x1ZGUgIkJhc2ljU2hhcGVGdW5jdGlvbnMuaCIK
KyNpbmNsdWRlICJMZW5ndGhGdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJXaW5kUnVsZS5oIgorI2lu
Y2x1ZGUgIlhTUG9seWdvbi5oIgorI2luY2x1ZGUgIlhTUmVjdGFuZ2xlLmgiCisjaW5jbHVkZSA8
d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgUGFzc093blB0
cjxYU2hhcGU+IGNyZWF0ZVhTUmVjdGFuZ2xlKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHdpZHRo
LCBmbG9hdCBoZWlnaHQsIGZsb2F0IHJ4LCBmbG9hdCByeSkgCit7CisgICAgQVNTRVJUKHdpZHRo
ID49IDAgJiYgaGVpZ2h0ID49IDAgJiYgcnggPj0gMCAmJiByeSA+PSAwKTsKKyAgICByZXR1cm4g
YWRvcHRQdHIobmV3IFhTUmVjdGFuZ2xlKHgsIHksIHdpZHRoLCBoZWlnaHQsIHJ4LCByeSkpOwor
fQorCitzdGF0aWMgUGFzc093blB0cjxYU2hhcGU+IGNyZWF0ZVhTQ2lyY2xlKGZsb2F0IGN4LCBm
bG9hdCBjeSwgZmxvYXQgcmFkaXVzKSAKK3sKKyAgICBBU1NFUlQocmFkaXVzID49IDApOworICAg
IHJldHVybiBhZG9wdFB0cihuZXcgWFNSZWN0YW5nbGUoY3ggLSByYWRpdXMsIGN5IC0gcmFkaXVz
LCBjeCArIHJhZGl1cywgY3kgKyByYWRpdXMsIHJhZGl1cywgcmFkaXVzKSk7Cit9CisKK3N0YXRp
YyBQYXNzT3duUHRyPFhTaGFwZT4gY3JlYXRlWFNFbGxpcHNlKGZsb2F0IGN4LCBmbG9hdCBjeSwg
ZmxvYXQgcngsIGZsb2F0IHJ5KSAKK3sKKyAgICBBU1NFUlQocnggPj0gMCAmJiByeSA+PSAwKTsK
KyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFhTUmVjdGFuZ2xlKGN4IC0gcngsIGN5IC0gcnksIGN4
ICsgcngsIGN5ICsgcnksIHJ4LCByeSkpOworfQorCitzdGF0aWMgUGFzc093blB0cjxYU2hhcGU+
IGNyZWF0ZVhTUG9seWdvbihQYXNzT3duUHRyPFZlY3RvcjxmbG9hdD4gPiBjb29yZGluYXRlcywg
V2luZFJ1bGUgZmlsbFJ1bGUpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBYU1BvbHlnb24o
Y29vcmRpbmF0ZXMsIGZpbGxSdWxlKSk7Cit9CisKK1Bhc3NPd25QdHI8WFNoYXBlPiBYU2hhcGU6
OmNyZWF0ZVhTaGFwZShjb25zdCBCYXNpY1NoYXBlKiB3cmFwU2hhcGUsIGZsb2F0IGJveFdpZHRo
LCBmbG9hdCBib3hIZWlnaHQpCit7CisgICAgaWYgKCF3cmFwU2hhcGUpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgc3dpdGNoICh3cmFwU2hhcGUtPnR5cGUoKSkgeworICAgIGNhc2Ug
QmFzaWNTaGFwZTo6QkFTSUNfU0hBUEVfUkVDVEFOR0xFOiB7CisgICAgICAgIGNvbnN0IEJhc2lj
U2hhcGVSZWN0YW5nbGUqIHJlY3RhbmdsZSA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljU2hhcGVS
ZWN0YW5nbGUqPih3cmFwU2hhcGUpOworICAgICAgICBMZW5ndGggcnggPSByZWN0YW5nbGUtPmNv
cm5lclJhZGl1c1goKTsKKyAgICAgICAgTGVuZ3RoIHJ5ID0gcmVjdGFuZ2xlLT5jb3JuZXJSYWRp
dXNZKCk7CisgICAgICAgIHJldHVybiBjcmVhdGVYU1JlY3RhbmdsZSgKKyAgICAgICAgICAgIGZs
b2F0VmFsdWVGb3JMZW5ndGgocmVjdGFuZ2xlLT54KCksIGJveFdpZHRoKSwKKyAgICAgICAgICAg
IGZsb2F0VmFsdWVGb3JMZW5ndGgocmVjdGFuZ2xlLT55KCksIGJveEhlaWdodCksCisgICAgICAg
ICAgICBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJlY3RhbmdsZS0+d2lkdGgoKSwgYm94V2lkdGgpLAor
ICAgICAgICAgICAgZmxvYXRWYWx1ZUZvckxlbmd0aChyZWN0YW5nbGUtPmhlaWdodCgpLCBib3hI
ZWlnaHQpLAorICAgICAgICAgICAgcnguaXNVbmRlZmluZWQoKSA/IDAgOiBmbG9hdFZhbHVlRm9y
TGVuZ3RoKHJ4LCBib3hXaWR0aCksCisgICAgICAgICAgICByeS5pc1VuZGVmaW5lZCgpID8gMCA6
IGZsb2F0VmFsdWVGb3JMZW5ndGgocnksIGJveEhlaWdodCkgKTsKKyAgICB9CisKKyAgICBjYXNl
IEJhc2ljU2hhcGU6OkJBU0lDX1NIQVBFX0NJUkNMRTogeworICAgICAgICBjb25zdCBCYXNpY1No
YXBlQ2lyY2xlKiBjaXJjbGUgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY1NoYXBlQ2lyY2xlKj4o
d3JhcFNoYXBlKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVhTQ2lyY2xlKAorICAgICAgICAgICAg
ZmxvYXRWYWx1ZUZvckxlbmd0aChjaXJjbGUtPmNlbnRlclgoKSwgYm94V2lkdGgpLAorICAgICAg
ICAgICAgZmxvYXRWYWx1ZUZvckxlbmd0aChjaXJjbGUtPmNlbnRlclkoKSwgYm94SGVpZ2h0KSwK
KyAgICAgICAgICAgIGZsb2F0VmFsdWVGb3JMZW5ndGgoY2lyY2xlLT5yYWRpdXMoKSwgc3RkOjpt
YXgoYm94SGVpZ2h0LCBib3hXaWR0aCkpICk7CisgICAgfQorCisgICAgY2FzZSBCYXNpY1NoYXBl
OjpCQVNJQ19TSEFQRV9FTExJUFNFOiB7CisgICAgICAgIGNvbnN0IEJhc2ljU2hhcGVFbGxpcHNl
KiBlbGxpcHNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNTaGFwZUVsbGlwc2UqPih3cmFwU2hh
cGUpOworICAgICAgICByZXR1cm4gY3JlYXRlWFNFbGxpcHNlKAorICAgICAgICAgICAgZmxvYXRW
YWx1ZUZvckxlbmd0aChlbGxpcHNlLT5jZW50ZXJYKCksIGJveFdpZHRoKSwKKyAgICAgICAgICAg
IGZsb2F0VmFsdWVGb3JMZW5ndGgoZWxsaXBzZS0+Y2VudGVyWSgpLCBib3hIZWlnaHQpLAorICAg
ICAgICAgICAgZmxvYXRWYWx1ZUZvckxlbmd0aChlbGxpcHNlLT5yYWRpdXNYKCksIGJveFdpZHRo
KSwKKyAgICAgICAgICAgIGZsb2F0VmFsdWVGb3JMZW5ndGgoZWxsaXBzZS0+cmFkaXVzWSgpLCBi
b3hIZWlnaHQpICk7CisgICAgfQorCisgICAgY2FzZSBCYXNpY1NoYXBlOjpCQVNJQ19TSEFQRV9Q
T0xZR09OOiB7CisgICAgICAgIGNvbnN0IEJhc2ljU2hhcGVQb2x5Z29uKiBwb2x5Z29uID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgQmFzaWNTaGFwZVBvbHlnb24qPih3cmFwU2hhcGUpOworICAgICAgICBj
b25zdCBWZWN0b3I8TGVuZ3RoPiYgdmFsdWVzID0gcG9seWdvbi0+dmFsdWVzKCk7CisgICAgICAg
IHNpemVfdCB2YWx1ZXNTaXplID0gdmFsdWVzLnNpemUoKTsKKyAgICAgICAgVmVjdG9yPGZsb2F0
PiAqY3YgPSBuZXcgVmVjdG9yPGZsb2F0Pih2YWx1ZXNTaXplKTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHZhbHVlc1NpemU7IGkgKz0gMikgeworICAgICAgICAgICAgY3YtPmF0
KGkpID0gZmxvYXRWYWx1ZUZvckxlbmd0aCh2YWx1ZXMuYXQoaSksIGJveFdpZHRoKTsKKyAgICAg
ICAgICAgIGN2LT5hdChpKzEpID0gZmxvYXRWYWx1ZUZvckxlbmd0aCh2YWx1ZXMuYXQoaSsxKSwg
Ym94SGVpZ2h0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY3JlYXRlWFNQb2x5Z29uKGFk
b3B0UHRyKGN2KSwgcG9seWdvbi0+d2luZFJ1bGUoKSk7CisgICAgfQorCisgICAgZGVmYXVsdDoK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIH0KKworICAgIHJldHVybiBudWxscHRyOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9YU2hhcGUuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1hTaGFwZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZh
NGQwZjNmNTk3N2U1NTVjYTk4MmFlOTY0YjhkMTc1NDExYWNlOTEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9YU2hhcGUuaApAQCAtMCwwICsxLDU0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
ICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZ
UklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisg
KiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisg
KiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBYU2hhcGVfaAorI2RlZmluZSBYU2hhcGVfaAorCisjaW5jbHVk
ZSAiQmFzaWNTaGFwZXMuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJYU0lu
dGVydmFsLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgWFNoYXBlIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc093blB0cjxYU2hhcGU+IGNyZWF0ZVhTaGFwZShjb25zdCBCYXNpY1No
YXBlKiwgZmxvYXQgYm9yZGVyQm94V2lkdGgsIGZsb2F0IGJvcmRlckJveEhlaWdodCk7CisKKyAg
ICB2aXJ0dWFsIH5YU2hhcGUoKSB7IH0KKworICAgIHZpcnR1YWwgRmxvYXRSZWN0IHNoYXBlQm91
bmRpbmdCb3goKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldEluc2lkZUludGVydmFs
cyhmbG9hdCB5TWluLCBmbG9hdCB5TWF4LCBWZWN0b3I8WFNJbnRlcnZhbD4mKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGdldE91dHNpZGVJbnRlcnZhbHMoZmxvYXQgeU1pbiwgZmxvYXQg
eU1heCwgVmVjdG9yPFhTSW50ZXJ2YWw+JikgY29uc3QgPSAwOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gWFNoYXBlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKaW5kZXggOGI5NjBmMDU5MWIwNTFm
NzQyOGJjMzdlMjAyN2NmNjllMmIxOTE4ZC4uMmZiZGVlNmIzYWU5MGVkZTJlMWE5ZWY3NDUxYjE5
OTdhN2NiNGYzNSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrTGluZUxheW91dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrTGluZUxheW91dC5jcHAKQEAgLTEzMjIsOCArMTMyMiwxMSBAQCB2b2lkIFJlbmRlckJsb2Nr
OjpsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZShMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRl
LCBJbmxpbgogI2lmIEVOQUJMRShDU1NfRVhDTFVTSU9OUykKICAgICAgICAgLy8gRklYTUU6IEJ1
ZyA4OTk5MzogSWYgdGhlIHdyYXAgc2hhcGUgY29tZXMgZnJvbSBhIHBhcmVudCwgd2Ugd2lsbCBu
ZWVkIHRvIGFkanVzdAogICAgICAgICAvLyB0aGUgaGVpZ2h0IGNvb3JkaW5hdGUKLSAgICAgICAg
aWYgKHdyYXBTaGFwZUluZm8pCi0gICAgICAgICAgICB3cmFwU2hhcGVJbmZvLT5jb21wdXRlU2Vn
bWVudHNGb3JMaW5lKGxvZ2ljYWxIZWlnaHQoKSk7CisgICAgICAgIGlmICh3cmFwU2hhcGVJbmZv
KSB7CisgICAgICAgICAgICBMYXlvdXRVbml0IGxpbmVUb3AgPSBsb2dpY2FsSGVpZ2h0KCk7Cisg
ICAgICAgICAgICBMYXlvdXRVbml0IGxpbmVCb3R0b20gPSBsaW5lVG9wICsgbGluZUhlaWdodCh0
cnVlLCBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gSG9yaXpvbnRhbExpbmUgOiBWZXJ0aWNh
bExpbmUsIFBvc2l0aW9uT2ZJbnRlcmlvckxpbmVCb3hlcyk7CisgICAgICAgICAgICB3cmFwU2hh
cGVJbmZvLT5jb21wdXRlU2VnbWVudHNGb3JMaW5lKGxpbmVUb3AsIGxpbmVCb3R0b20pOworICAg
ICAgICB9CiAjZW5kaWYKICAgICAgICAgZW5kID0gbGluZUJyZWFrZXIubmV4dExpbmVCcmVhayhy
ZXNvbHZlciwgbGF5b3V0U3RhdGUubGluZUluZm8oKSwgcmVuZGVyVGV4dEluZm8sIGxhc3RGbG9h
dEZyb21QcmV2aW91c0xpbmUsIGNvbnNlY3V0aXZlSHlwaGVuYXRlZExpbmVzKTsKICAgICAgICAg
aWYgKHJlc29sdmVyLnBvc2l0aW9uKCkuYXRFbmQoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1dyYXBTaGFwZUluZm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1dyYXBTaGFwZUluZm8uY3BwCmluZGV4IDhlZjczYzdmY2MyMzc1MjZlNWE5ZDMyYmU5Yzhm
ZDljNGQzZGJkNzUuLjZmMGUzOWMxNjMyNTYxY2M2ZWQ5MDFmNjM4NjlhOTJiNDcxZDNlMzEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9XcmFwU2hhcGVJbmZvLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvV3JhcFNoYXBlSW5mby5jcHAKQEAgLTEwNSwzNyAr
MTA1LDI5IEBAIHZvaWQgV3JhcFNoYXBlSW5mbzo6Y29tcHV0ZVNoYXBlU2l6ZShMYXlvdXRVbml0
IGxvZ2ljYWxXaWR0aCwgTGF5b3V0VW5pdCBsb2dpY2FsCiAKICAgICAvLyBGSVhNRTogQnVnIDg5
OTkzOiBUaGUgd3JhcCBzaGFwZSBtYXkgY29tZSBmcm9tIHRoZSBwYXJlbnQgb2JqZWN0CiAgICAg
QmFzaWNTaGFwZSogc2hhcGUgPSBtX2Jsb2NrLT5zdHlsZSgpLT53cmFwU2hhcGVJbnNpZGUoKTsK
LQogICAgIEFTU0VSVChzaGFwZSk7CiAKLSAgICBzd2l0Y2ggKHNoYXBlLT50eXBlKCkpIHsKLSAg
ICBjYXNlIEJhc2ljU2hhcGU6OkJBU0lDX1NIQVBFX1JFQ1RBTkdMRTogewotICAgICAgICBCYXNp
Y1NoYXBlUmVjdGFuZ2xlKiByZWN0ID0gc3RhdGljX2Nhc3Q8QmFzaWNTaGFwZVJlY3RhbmdsZSAq
PihzaGFwZSk7Ci0gICAgICAgIG1fc2hhcGVMZWZ0ID0gdmFsdWVGb3JMZW5ndGgocmVjdC0+eCgp
LCBtX2xvZ2ljYWxXaWR0aCk7Ci0gICAgICAgIG1fc2hhcGVXaWR0aCA9IHZhbHVlRm9yTGVuZ3Ro
KHJlY3QtPndpZHRoKCksIG1fbG9naWNhbFdpZHRoKTsKLSAgICAgICAgbV9zaGFwZVRvcCA9IHZh
bHVlRm9yTGVuZ3RoKHJlY3QtPnkoKSwgbV9sb2dpY2FsSGVpZ2h0KTsKLSAgICAgICAgbV9zaGFw
ZUhlaWdodCA9IHZhbHVlRm9yTGVuZ3RoKHJlY3QtPmhlaWdodCgpLCBtX2xvZ2ljYWxIZWlnaHQp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgLy8gRklYTUU6IEJ1ZyA4OTcwNzogRW5hYmxl
IHNoYXBlIGluc2lkZSBmb3Igbm9uLXJlY3Rhbmd1bGFyIHNoYXBlcwotICAgIGNhc2UgQmFzaWNT
aGFwZTo6QkFTSUNfU0hBUEVfQ0lSQ0xFOgotICAgIGNhc2UgQmFzaWNTaGFwZTo6QkFTSUNfU0hB
UEVfRUxMSVBTRToKLSAgICBjYXNlIEJhc2ljU2hhcGU6OkJBU0lDX1NIQVBFX1BPTFlHT046IHsK
LSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIH0K
KyAgICBtX3hzaGFwZSA9IFhTaGFwZTo6Y3JlYXRlWFNoYXBlKHNoYXBlLCBsb2dpY2FsV2lkdGgs
IGxvZ2ljYWxIZWlnaHQpOworICAgIEFTU0VSVChtX3hzaGFwZSk7CiB9CiAKLWJvb2wgV3JhcFNo
YXBlSW5mbzo6Y29tcHV0ZVNlZ21lbnRzRm9yTGluZShMYXlvdXRVbml0IGxpbmVUb3ApCitib29s
IFdyYXBTaGFwZUluZm86OmNvbXB1dGVTZWdtZW50c0ZvckxpbmUoTGF5b3V0VW5pdCBsaW5lVG9w
LCBMYXlvdXRVbml0IGxpbmVCb3R0b20pCiB7CiAgICAgbV9saW5lVG9wID0gbGluZVRvcDsKICAg
ICBtX3NlZ21lbnRzLmNsZWFyKCk7CisKICAgICBpZiAobGluZVN0YXRlKCkgPT0gTElORV9JTlNJ
REVfU0hBUEUpIHsKLSAgICAgICAgTGluZVNlZ21lbnQgc2VnbWVudDsKLSAgICAgICAgc2VnbWVu
dC5sb2dpY2FsTGVmdCA9IG1fc2hhcGVMZWZ0OwotICAgICAgICBzZWdtZW50LmxvZ2ljYWxSaWdo
dCA9IG1fc2hhcGVMZWZ0ICsgbV9zaGFwZVdpZHRoOwotICAgICAgICBtX3NlZ21lbnRzLmFwcGVu
ZChzZWdtZW50KTsKKyAgICAgICAgQVNTRVJUKG1feHNoYXBlKTsKKworICAgICAgICBsaW5lQm90
dG9tID0gbGluZVRvcDsgLy8gRklYTUU6IEJ1ZyA5NTQ3OSwgd29ya2Fyb3VuZCBmb3Igbm93Cisg
ICAgICAgIFZlY3RvcjxYU0ludGVydmFsPiBpbnRlcnZhbHM7CisgICAgICAgIG1feHNoYXBlLT5n
ZXRJbnNpZGVJbnRlcnZhbHMobGluZVRvcCwgbGluZUJvdHRvbSwgaW50ZXJ2YWxzKTsgIAorICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGludGVydmFscy5zaXplKCk7IGkrKykgeworICAg
ICAgICAgICAgTGluZVNlZ21lbnQgc2VnbWVudDsKKyAgICAgICAgICAgIHNlZ21lbnQubG9naWNh
bExlZnQgPSBpbnRlcnZhbHNbaV0ueDE7CisgICAgICAgICAgICBzZWdtZW50LmxvZ2ljYWxSaWdo
dCA9IGludGVydmFsc1tpXS54MjsKKyAgICAgICAgICAgIG1fc2VnbWVudHMuYXBwZW5kKHNlZ21l
bnQpOworICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBtX3NlZ21lbnRzLnNpemUoKTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9XcmFwU2hhcGVJbmZvLmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvV3JhcFNoYXBlSW5mby5oCmluZGV4IGE4MDM2ZDBiYjhj
OTQwZDM5YWU4MmJmZTg1NmRjOTdjZjQ3ZDdhOGQuLjg4ZmQ1MmZmNjU4ZTA2MTE0NDRiYzA3Yjcw
OWY5ZWM0MTRlNzhhYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9XcmFw
U2hhcGVJbmZvLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1dyYXBTaGFwZUluZm8u
aApAQCAtMzIsNyArMzIsMTAgQEAKIAogI2lmIEVOQUJMRShDU1NfRVhDTFVTSU9OUykKIAorI2lu
Y2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkxheW91dFR5cGVzSW5saW5lTWV0aG9kcy5o
IgorI2luY2x1ZGUgIlhTaGFwZS5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtNjQsMTQg
KzY3LDE4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCByZW1vdmVXcmFwU2hhcGVJbmZvRm9y
UmVuZGVyQmxvY2soY29uc3QgUmVuZGVyQmxvY2sqKTsKICAgICBzdGF0aWMgYm9vbCBpc1dyYXBT
aGFwZUluZm9FbmFibGVkRm9yUmVuZGVyQmxvY2soY29uc3QgUmVuZGVyQmxvY2sqKTsKIAotICAg
IExheW91dFVuaXQgc2hhcGVUb3AoKSBjb25zdCB7IHJldHVybiBtX3NoYXBlVG9wOyB9CisgICAg
TGF5b3V0VW5pdCBzaGFwZVRvcCgpIGNvbnN0IAorICAgIHsgCisgICAgICAgIEFTU0VSVChtX3hz
aGFwZSk7CisgICAgICAgIHJldHVybiBtX3hzaGFwZS0+c2hhcGVCb3VuZGluZ0JveCgpLnkoKTsK
KyAgICB9CiAgICAgYm9vbCBoYXNTZWdtZW50cygpIGNvbnN0OwogICAgIGNvbnN0IFNlZ21lbnRM
aXN0JiBzZWdtZW50cygpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaGFzU2VnbWVudHMo
KSk7CiAgICAgICAgIHJldHVybiBtX3NlZ21lbnRzOwogICAgIH0KLSAgICBib29sIGNvbXB1dGVT
ZWdtZW50c0ZvckxpbmUoTGF5b3V0VW5pdCk7CisgICAgYm9vbCBjb21wdXRlU2VnbWVudHNGb3JM
aW5lKExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKTsKICAgICBMaW5l
U3RhdGUgbGluZVN0YXRlKCkgY29uc3Q7CiAgICAgdm9pZCBjb21wdXRlU2hhcGVTaXplKExheW91
dFVuaXQgbG9naWNhbFdpZHRoLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQpOwogICAgIHZvaWQg
ZGlydHlXcmFwU2hhcGVTaXplKCkgeyBtX3dyYXBTaGFwZVNpemVEaXJ0eSA9IHRydWU7IH0KQEAg
LTgwLDEwICs4Nyw3IEBAIHByaXZhdGU6CiAgICAgV3JhcFNoYXBlSW5mbyhSZW5kZXJCbG9jayop
OwogCiAgICAgUmVuZGVyQmxvY2sqIG1fYmxvY2s7Ci0gICAgTGF5b3V0VW5pdCBtX3NoYXBlTGVm
dDsKLSAgICBMYXlvdXRVbml0IG1fc2hhcGVUb3A7Ci0gICAgTGF5b3V0VW5pdCBtX3NoYXBlV2lk
dGg7Ci0gICAgTGF5b3V0VW5pdCBtX3NoYXBlSGVpZ2h0OworICAgIE93blB0cjxYU2hhcGU+IG1f
eHNoYXBlOwogCiAgICAgTGF5b3V0VW5pdCBtX2xpbmVUb3A7CiAgICAgTGF5b3V0VW5pdCBtX2xv
Z2ljYWxXaWR0aDsKQEAgLTk1LDEwICs5OSwxNSBAQCBwcml2YXRlOgogCiBpbmxpbmUgV3JhcFNo
YXBlSW5mbzo6TGluZVN0YXRlIFdyYXBTaGFwZUluZm86OmxpbmVTdGF0ZSgpIGNvbnN0CiB7Ci0g
ICAgaWYgKG1fbGluZVRvcCA8IG1fc2hhcGVUb3ApCisgICAgQVNTRVJUKG1feHNoYXBlKTsKKyAg
ICBGbG9hdFJlY3Qgc2hhcGVCb3VuZHMgPSBtX3hzaGFwZS0+c2hhcGVCb3VuZGluZ0JveCgpOwor
CisgICAgaWYgKG1fbGluZVRvcCA8IHNoYXBlQm91bmRzLnkoKSkKICAgICAgICAgcmV0dXJuIExJ
TkVfQkVGT1JFX1NIQVBFOwotICAgIGlmIChtX2xpbmVUb3AgPCBtX3NoYXBlVG9wICsgbV9zaGFw
ZUhlaWdodCkKKworICAgIGlmIChtX2xpbmVUb3AgPCBzaGFwZUJvdW5kcy5tYXhZKCkpCiAgICAg
ICAgIHJldHVybiBMSU5FX0lOU0lERV9TSEFQRTsKKwogICAgIHJldHVybiBMSU5FX0FGVEVSX1NI
QVBFOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161573</attachid>
            <date>2012-08-30 15:31:14 -0700</date>
            <delta_ts>2012-08-30 16:37:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95490-20120830153103.patch</filename>
            <type>text/plain</type>
            <size>62861</size>
            <attacher name="Hans Muller">giles_joplin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3MTY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGJmZDZiODA5MjFiMmE3
NTM0OTNlYmM0NWRiYWQ3ZmM2NDNmM2RkYS4uOTM4NDZmM2I4MWI1ZWVjZTYzMTNiMWI0Mzk0OWE0
YjJkZmU2YzM4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNCBAQAorMjAxMi0wOC0zMCAgSGFu
cyBNdWxsZXIgIDxobXVsbGVyQGFkb2JlLmNvbT4KKworICAgICAgICBbQ1NTIEV4bHVzaW9uc10g
YWRkIHN1cHBvcnQgZm9yIHRoZSBiYXNpYyBzaGFwZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NDkwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgSW5pdGlhbCBjb21taXQgb2YgdGhlIENTUyBFeGNsdXNp
b25zIFNoYXBlcyBjbGFzc2VzLiBUaGV5J3JlIGJhc2VkIG9uIHRoZSAiQmFzaWMgU2hhcGVzIiBz
ZWN0aW9uIG9mIHRoZQorICAgICAgICBDU1MgRXhjbHVzaW9ucyBzcGVjIC0gaHR0cDovL2Rldi53
My5vcmcvY3Nzd2cvY3NzMy1leGNsdXNpb25zLyNiYXNpYy1zaGFwZXMtZnJvbS1zdmctc3ludGF4
LgorCisgICAgICAgIFRoaXMgc2V0IG9mIGNsYXNzZXMgZW5hYmxlcyB0aGUgZXhjbHVzaW9ucyBs
YXlvdXQgY29kZSB0byBkZXRlcm1pbmUgaG93IHRvIGJyZWFrIHVwIGEgbGluZSBpbnRvIHNlZ2Vt
ZW50cworICAgICAgICB0aGF0IHdpbGwgZml0IHdpdGhpbiBvciBhcm91bmQgYSBzaGFwZSwgZ2l2
ZW4gdGhlIFkgY29vcmRpbmF0ZXMgb2YgdGhlIGxpbmUncyB0b3AgZWRnZSBhbmQgYm90dG9tIGVk
Z2VzLgorICAgICAgICBUaGUgWFNoYXBlIGNsYXNzIHJlcHJlc2VudHMgQmFzaWNTaGFwZXMgd2hv
c2UgY29vcmRpbmF0ZXMgaGF2ZSBiZWVuIHJlc29sdmVkIHRvIGFjdHVhbCB2YWx1ZXMuIEl0IHBy
b3ZpZGVzCisgICAgICAgIGEgcGFpciBvZiBtZXRob2RzLCBnZXRJbnNpZGVJbnRlcnZhbHMoKSBh
bmQgZ2V0T3V0c2lkZUludGVydmFscygpLCB0aGF0IHJldHVybiB0aGUgbGluZSBzZWdtZW50cycg
c3RhcnQKKyAgICAgICAgYW5kIGVuZCBYIGNvb3JkaW5hdGVzLCBhbmQgYSBtZXRob2QgdGhhdCBj
b21wdXRlcyB0aGUgc2hhcGUncyBib3VuZGluZyBib3guIFRoZSBsaW5lIHNlZ21lbnRzJyBjb29y
ZGluYXRlcworICAgICAgICBhcmUgcmVwcmVzZW50ZWQgYnkgYSBWZWN0b3Igb2YgWFNJbnRlcnZh
bHMuICBYU0ludGVydmFsIGlzIGp1c3QgYSBwYWlyIG9mIFggY29vcmRpbmF0ZXMuCisKKyAgICAg
ICAgVGhlIG90aGVyIGNsYXNzZXMsIFhTUmVjdGFuZ2xlIGFuZCBYU1BvbHlnb24gZXQgYWwsIGFy
ZSBpbnRlcm5hbCB0byB0aGUgWFNoYXBlIGltcGxlbWVudGF0aW9uLgorCisgICAgICAgIFRoaXMg
aXMgdGhlIGluaXRpYWwgdmVyc2lvbiBvZiB0aGUgWFNoYXBlcyBjb2RlIGFuZCBpdCdzIG9ubHkg
YmVpbmcgdXNlZCB0byB0aGUgbGltaXRlZCBleHRlbnQgV2ViS2l0CisgICAgICAgIGN1cnJlbnRs
eSBzdXBwb3J0cyBzaGFwZS1pbnNpZGUgZXhjbHVzaW9ucy4gIEl0IHdpbGwgYmUgZXh0ZW5kZWQg
dG8gc3VwcG9ydCBjb21wdXRpbmcgYSBtaW5pbWFsCisgICAgICAgIGxpbmUgc2VnbWVudCdzICJm
aXJzdCBsYXlvdXQgbG9jYXRpb24iIGFuZCBvdGhlciBpbXByb3ZlbWVudHMsIGluIHRhbmRlbSB3
aXRoIHRoZSBleGNsdXNpb25zIGxheW91dCBjb2RlLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBo
YXZlIGJlZW4gYWRkZWQgc2luY2UgdGhpcyBjb2RlIGp1c3QgcmVwbGFjZXMgYSBwcm92aXNpb25h
bCBpbXBsZW1lbnRhdGlvbiBzdHViLgorCisgICAgICAgIE1vcmUgaW5mb3JtYXRpb24gYWJvdXQg
dGhlIGFsZ29yaXRobXMgdXNlZCBieSB0aGUgU2hhcGVzIG1vZHVsZSBjYW4gYmUgZm91bmQgaGVy
ZTogaHR0cDovL2hhbnNtdWxsZXItd2Via2l0LmJsb2dzcG90LmNvbS4KKworICAgICAgICAqIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9YU0ludGVydmFsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkludGVydmFsWDFDb21wYXJhdG9yOjpvcGVyYXRvcigpKToKKyAgICAgICAgKFdl
YkNvcmU6OlhTSW50ZXJ2YWw6OmludGVyc2VjdCk6CisgICAgICAgIChXZWJDb3JlOjpzb3J0WFNJ
bnRlcnZhbHMpOgorICAgICAgICAoV2ViQ29yZTo6bWVyZ2VYU0ludGVydmFscyk6CisgICAgICAg
IChXZWJDb3JlOjppbnRlcnNlY3RYU0ludGVydmFscyk6CisgICAgICAgIChXZWJDb3JlOjpzdWJ0
cmFjdFhTSW50ZXJ2YWxzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9YU0ludGVydmFs
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChYU0ludGVydmFsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlhTSW50ZXJ2YWw6OlhTSW50ZXJ2YWwpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL1hTUG9seWdvbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNYXhFZGdlWUNvbXBhcmF0b3I6Om9wZXJhdG9yKCkpOgorICAgICAg
ICAoTWF4RWRnZVlDb21wYXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Ok1pbkVkZ2VZQ29tcGFy
YXRvcjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChNaW5FZGdlWUNvbXBhcmF0b3IpOgorICAgICAg
ICAoV2ViQ29yZTo6SW50ZXJzZWN0aW9uWENvbXBhcmF0b3I6Om9wZXJhdG9yKCkpOgorICAgICAg
ICAoV2ViQ29yZTo6WFNFZGdlVHJlZTo6WFNFZGdlVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpY
U0VkZ2VUcmVlOjppbml0RWRnZVRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6WFNFZGdlVHJlZTo6
ZmluZEVkZ2VzVGhhdE92ZXJsYXBZKToKKyAgICAgICAgKFdlYkNvcmU6OlhTRWRnZVRyZWU6OmZp
bmRFZGdlc1RoYXRPdmVybGFwSW50ZXJ2YWwpOgorICAgICAgICAoV2ViQ29yZTo6WFNQb2x5Z29u
OjpYU1BvbHlnb24pOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZVhJbnRlcnNlY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6WFNQb2x5Z29uOjpyaWdodFZlcnRleFkpOgorICAgICAgICAoV2Vi
Q29yZTo6YXBwZW5kSW50ZXJ2YWxYKToKKyAgICAgICAgKFdlYkNvcmU6OlhTUG9seWdvbjo6Y29t
cHV0ZVhJbnRlcnNlY3Rpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlhTUG9seWdvbjo6Y29tcHV0
ZUVkZ2VJbnRlcnNlY3Rpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlhTUG9seWdvbjo6Z2V0T3V0
c2lkZUludGVydmFscyk6CisgICAgICAgIChXZWJDb3JlOjpYU1BvbHlnb246OmdldEluc2lkZUlu
dGVydmFscyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvWFNQb2x5Z29uLmg6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChYU1BvbHlnb24pOgorICAgICAgICAoV2Vi
Q29yZTo6WFNQb2x5Z29uOjpnZXRYQXQpOgorICAgICAgICAoV2ViQ29yZTo6WFNQb2x5Z29uOjpn
ZXRZQXQpOgorICAgICAgICAoV2ViQ29yZTo6WFNQb2x5Z29uOjpudW1iZXJPZlZlcnRpY2VzKToK
KyAgICAgICAgKFdlYkNvcmU6OlhTUG9seWdvbjo6ZmlsbFJ1bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6WFNQb2x5Z29uOjpzaGFwZUJvdW5kaW5nQm94KToKKyAgICAgICAgKFhTRWRnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpYU0VkZ2U6OlhTRWRnZSk6CisgICAgICAgIChXZWJDb3JlOjpYU0VkZ2U6
OngxKToKKyAgICAgICAgKFdlYkNvcmU6OlhTRWRnZTo6eTEpOgorICAgICAgICAoV2ViQ29yZTo6
WFNFZGdlOjp4Mik6CisgICAgICAgIChXZWJDb3JlOjpYU0VkZ2U6OnkyKToKKyAgICAgICAgKFdl
YkNvcmU6OlhTRWRnZTo6bWluWCk6CisgICAgICAgIChXZWJDb3JlOjpYU0VkZ2U6Om1pblkpOgor
ICAgICAgICAoV2ViQ29yZTo6WFNFZGdlOjptYXhYKToKKyAgICAgICAgKFdlYkNvcmU6OlhTRWRn
ZTo6bWF4WSk6CisgICAgICAgIChYU0VkZ2VUcmVlKToKKyAgICAgICAgKFhTSW50ZXJzZWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlhTSW50ZXJzZWN0aW9uOjpYU0ludGVyc2VjdGlvbik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvWFNSZWN0YW5nbGUuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6ZWxsaXBzZVhJbnRlcmNlcHQpOgorICAg
ICAgICAoV2ViQ29yZTo6WFNSZWN0YW5nbGU6OmdldE91dHNpZGVJbnRlcnZhbHMpOgorICAgICAg
ICAoV2ViQ29yZTo6WFNSZWN0YW5nbGU6OmdldEluc2lkZUludGVydmFscyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvWFNSZWN0YW5nbGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFhTUmVjdGFuZ2xlKToKKyAgICAgICAgKFdlYkNvcmU6OlhTUmVjdGFuZ2xl
OjpYU1JlY3RhbmdsZSk6CisgICAgICAgIChXZWJDb3JlOjpYU1JlY3RhbmdsZTo6c2hhcGVCb3Vu
ZGluZ0JveCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvWFNoYXBlLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVhTUmVjdGFuZ2xl
KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVhTQ2lyY2xlKToKKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZVhTRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVYU1BvbHlnb24pOgor
ICAgICAgICAoV2ViQ29yZTo6WFNoYXBlOjpjcmVhdGVYU2hhcGUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL1hTaGFwZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoWFNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlhTaGFwZTo6flhTaGFwZSk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6bGF5b3V0UnVuc0FuZEZsb2F0c0luUmFuZ2UpOgorICAgICAgICAqIHJl
bmRlcmluZy9XcmFwU2hhcGVJbmZvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldyYXBTaGFwZUlu
Zm86OmNvbXB1dGVTaGFwZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6V3JhcFNoYXBlSW5mbzo6
Y29tcHV0ZVNlZ21lbnRzRm9yTGluZSk6CisgICAgICAgICogcmVuZGVyaW5nL1dyYXBTaGFwZUlu
Zm8uaDoKKyAgICAgICAgKFdlYkNvcmU6OldyYXBTaGFwZUluZm86OnNoYXBlVG9wKToKKyAgICAg
ICAgKFdyYXBTaGFwZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6V3JhcFNoYXBlSW5mbzo6bGlu
ZVN0YXRlKToKKwogMjAxMi0wOC0zMCAgVmljdG9yIENhcmJ1bmUgIDx2aWN0b3JAcm9zZWR1Lm9y
Zz4KIAogICAgICAgICBbQ2hyb21pdW1dIFRoZSBDQyBidXR0b24gaXMgbm90IHBhaW50ZWQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKaW5kZXggYjAzYjA4NjIwYjAxMmIzOTUwZTdhNmVlODU5OTViYmYxMGY5
ZmIwMS4uZDk1NGNmY2FlOTk1ODM0M2JmYTExYWFkODdhMDhiMzhkNjdiYzAxMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQKQEAgLTE4NjMsNiArMTg2MywxMCBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9U
aWxlZEJhY2tpbmdTdG9yZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9y
LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1hTSW50ZXJ2YWwuY3BwCisgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvWFNQb2x5Z29uLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1hTUmVjdGFuZ2xl
LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1hTaGFwZS5jcHAKIAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyQ29tcGlsZWRQcm9ncmFtLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dC5jcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDdlZjQzMDc3MWM0YjFlN2E3N2I5Y2EyOTUyN2Qz
M2M5MzliMjdiYWUuLmU4NjlkNmYxNjQwYmIwMzBhODhlZGRlNWM0ZDhjOTE0MmIyYzIwNTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNDQ1Niw2ICs0NDU2LDE0IEBAIHdlYmNv
cmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2luZFJ1
bGUuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV09GRkZpbGVGb3JtYXQu
Y3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZvcm1hdC5o
IFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9YU0ludGVydmFsLmNwcCBcCisJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvWFNJbnRlcnZhbC5oIFwKKwlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9YU1BvbHlnb24uY3BwIFwKKwlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9YU1BvbHlnb24uaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvWFNSZWN0YW5nbGUuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9YU1JlY3RhbmdsZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9YU2hhcGUuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9YU2hhcGUu
aCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0Vycm9yc0d0ay5jcHAgXAogCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9FcnJvcnNHdGsuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0dhbWVwYWRzR3RrLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9U
YXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCA2Mzk2YTY2NDA2Mzcz
ZjU0ZWMzOTM4MTRlMzE3ZDI1YjQ5MDc3MDllLi4wOWM4Nzg3NWZiMWE0ZmRjMDU2MGVmNDYwYzg0
MmFmYTk2MGU5YjY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTk5NCw2ICs5OTQsMTAgQEAgU09VUkNFUyAr
PSBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1TdGF0ZS5jcHAg
XAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNsYXRlVHJhbnNmb3JtT3Bl
cmF0aW9uLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAgXAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL1hTSW50ZXJ2YWwuY3BwIFwKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9YU1BvbHlnb24uY3BwIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9YU1JlY3RhbmdsZS5j
cHAgXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1hTaGFwZS5jcHAgXAogICAgIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAgXAogICAgIHBsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuY3BwIFwKICAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwIFwKQEAgLTIxNDAsNiArMjE0NCwxMCBAQCBIRUFERVJT
ICs9IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybVN0YXRlLmgg
XAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNsYXRlVHJhbnNmb3JtT3Bl
cmF0aW9uLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuaCBcCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvWFNJbnRlcnZhbC5oIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9Y
U1BvbHlnb24uaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvWFNSZWN0YW5nbGUuaCBcCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvWFNoYXBlLmggXAogICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2JtcC9CTVBJbWFnZURlY29kZXIuaCBcCiAgICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1w
L0JNUEltYWdlUmVhZGVyLmggXAogICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09J
bWFnZURlY29kZXIuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggNTU4ZWY0OTAyOThmNWFhYmRlZGJi
M2JhNjUzNjQ1OWViOTEzZjQ5NC4uMjllMDFkMWIzZGI1NjAwYzViNzM5YjRhYmVhMWUyZWU3ZTcw
MDQ3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNDE4LDYgKzQxOCwxNCBAQAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtT3BlcmF0aW9uLmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtT3BlcmF0aW9u
cy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9y
bWF0aW9uTWF0cml4LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL1hTSW50ZXJ2
YWwuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9YU0ludGVydmFsLmgnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL1hTUG9seWdvbi5jcHAnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL1hTUG9seWdvbi5oJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9YU1JlY3RhbmdsZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL1hTUmVjdGFuZ2xlLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL1hTaGFw
ZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL1hTaGFwZS5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBlci5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9sZXZlbGRiL0xldmVsREJDb21wYXJhdG9yLmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2xldmVsZGIvTGV2ZWxEQkRhdGFiYXNlLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDYzYjQ4YjMzZWEyYWY0YjEzNmYwOTk1ODE3
NzVjNTZjODRlZjNmZGIuLmIxZmRhYTFhNjk1YTJmYWM1NDJiMGRhNzEwNmYxNTg0MTZmYTJlZjQg
MTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC0z
NDEwNSw2ICszNDEwNSwzOCBAQAogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBo
aWNzXFdpZHRoSXRlcmF0b3IuaCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXFhTSW50ZXJ2YWwuY3BwIgorCQkJ
CQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZv
cm1cZ3JhcGhpY3NcWFNJbnRlcnZhbC5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxl
CisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcWFNQb2x5Z29uLmNwcCIK
KwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBs
YXRmb3JtXGdyYXBoaWNzXFhTUG9seWdvbi5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxG
aWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcWFNSZWN0YW5nbGUu
Y3BwIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccGxhdGZvcm1cZ3JhcGhpY3NcWFNSZWN0YW5nbGUuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4K
KwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXFhTaGFw
ZS5jcHAiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxwbGF0Zm9ybVxncmFwaGljc1xYU2hhcGUuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KIAkJ
CQk8RmlsdGVyCiAJCQkJCU5hbWU9ImNmIgogCQkJCQk+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMTc2ZjllZDY5OGFkODkwZjJl
OTgyYzllOGE2ZjhlYjEyYjJmZDFjZi4uMGVlNGVkOTdlY2YzYzU1M2NjNzdmNzc3NzdiNGY0NmFk
ODRkMWI1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtMTgzMyw2ICsxODMzLDE0IEBACiAJCTZFNjdEMkE2MTI4MEU4QTQwMDg3
NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNkU2N0QyQTQxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lv
bnMzRE9wZW5HTC5jcHAgKi87IH07CiAJCTZFNjdEMkE3MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRl
bnNpb25zM0RPcGVuR0wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDZFNjdEMkE1MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuaCAq
LzsgfTsKIAkJNkU2N0QyQTkxMjgwRThCRDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU2N0QyQTgxMjgwRThC
RDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRC5oICovOyB9OworCQk2RTg2RkU4MTE1RUMyNEM5MDBD
MjgxNzIgLyogWFNoYXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDZFODZGRTc5MTVFQzI0QzkwMEMyODE3MiAvKiBYU2hhcGUuY3BwICovOyB9Owor
CQk2RTg2RkU4MjE1RUMyNEM5MDBDMjgxNzIgLyogWFNoYXBlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTg2RkU3QTE1RUMyNEM5MDBDMjgxNzIgLyog
WFNoYXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJNkU4NkZFODMxNUVDMjRDOTAwQzI4MTcyIC8qIFhTSW50ZXJ2YWwuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU4NkZFN0IxNUVDMjRDOTAwQzI4
MTcyIC8qIFhTSW50ZXJ2YWwuY3BwICovOyB9OworCQk2RTg2RkU4NDE1RUMyNEM5MDBDMjgxNzIg
LyogWFNJbnRlcnZhbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNkU4NkZFN0MxNUVDMjRDOTAwQzI4MTcyIC8qIFhTSW50ZXJ2YWwuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk2RTg2RkU4NTE1RUMyNEM5
MDBDMjgxNzIgLyogWFNQb2x5Z29uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZFODZGRTdEMTVFQzI0QzkwMEMyODE3MiAvKiBYU1BvbHlnb24uY3Bw
ICovOyB9OworCQk2RTg2RkU4NjE1RUMyNEM5MDBDMjgxNzIgLyogWFNQb2x5Z29uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTg2RkU3RTE1RUMyNEM5
MDBDMjgxNzIgLyogWFNQb2x5Z29uLmggKi87IH07CisJCTZFODZGRTg3MTVFQzI0QzkwMEMyODE3
MiAvKiBYU1JlY3RhbmdsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2RTg2RkU3RjE1RUMyNEM5MDBDMjgxNzIgLyogWFNSZWN0YW5nbGUuY3BwICov
OyB9OworCQk2RTg2RkU4ODE1RUMyNEM5MDBDMjgxNzIgLyogWFNSZWN0YW5nbGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFODZGRTgwMTVFQzI0Qzkw
MEMyODE3MiAvKiBYU1JlY3RhbmdsZS5oICovOyB9OwogCQk2RUJDNUVBRjEzOEI1MEYyMDBBMENG
OEEgLyogSlNGbG9hdDY0QXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNkVCQzVFQUQxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5
LmNwcCAqLzsgfTsKIAkJNkVCQzVFQjAxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUJDNUVB
RTEzOEI1MEYyMDBBMENGOEEgLyogSlNGbG9hdDY0QXJyYXkuaCAqLzsgfTsKIAkJNkVCRjBFNDgx
MkE4OTI2MTAwREIxNzA5IC8qIE9FU1RleHR1cmVGbG9hdC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUJGMEU0NTEyQTg5MjYxMDBEQjE3MDkgLyog
T0VTVGV4dHVyZUZsb2F0LmNwcCAqLzsgfTsKQEAgLTkwMDcsNiArOTAxNSwxNCBAQAogCQk2RTY3
RDJBNDEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdMLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4dGVuc2lvbnMzRE9wZW5HTC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFNjdEMkE1MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRl
bnNpb25zM0RPcGVuR0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5z
aW9uczNET3BlbkdMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFNjdEMkE4MTI4
MEU4QkQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRXh0ZW5zaW9uczNELmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZF
ODZGRTc5MTVFQzI0QzkwMEMyODE3MiAvKiBYU2hhcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gWFNoYXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNkU4NkZFN0ExNUVDMjRDOTAwQzI4MTcyIC8qIFhTaGFwZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5j
b2RpbmcgPSA0OyBwYXRoID0gWFNoYXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTZFODZGRTdCMTVFQzI0QzkwMEMyODE3MiAvKiBYU0ludGVydmFsLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhTSW50ZXJ2YWwuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk2RTg2RkU3QzE1RUMyNEM5MDBDMjgxNzIgLyogWFNJbnRlcnZhbC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYU0ludGVydmFsLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTZFODZGRTdEMTVFQzI0QzkwMEMyODE3MiAvKiBYU1BvbHlnb24u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gWFNQb2x5Z29uLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkU4NkZFN0UxNUVDMjRDOTAwQzI4MTcyIC8q
IFhTUG9seWdvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYU1BvbHlnb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkU4NkZFN0YxNUVDMjRDOTAwQzI4MTcy
IC8qIFhTUmVjdGFuZ2xlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFhTUmVjdGFuZ2xlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkU4NkZFODAx
NUVDMjRDOTAwQzI4MTcyIC8qIFhTUmVjdGFuZ2xlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFhTUmVjdGFuZ2xlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZF
QkM1RDgwMTM4QjRDNEUwMEEwQ0Y4QSAvKiBGbG9hdDY0QXJyYXkuaWRsICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgbmFtZSA9IEZsb2F0NjRBcnJheS5pZGw7IHBhdGggPSBjYW52YXMvRmxvYXQ2NEFycmF5Lmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkVCQzVFQUQxMzhCNTBGMjAwQTBDRjhB
IC8qIEpTRmxvYXQ2NEFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTRmxvYXQ2NEFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkVC
QzVFQUUxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTRmxvYXQ2NEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xOTc5MSw2ICsxOTgwNywxNCBAQAogCQlCMkEwMTU5MTBBRjZDRDUzMDA2QkNF
MEUgLyogZ3JhcGhpY3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KAorCQkJCTZFODZGRTc5MTVFQzI0QzkwMEMyODE3MiAvKiBYU2hhcGUuY3BwICovLAorCQkJCTZF
ODZGRTdBMTVFQzI0QzkwMEMyODE3MiAvKiBYU2hhcGUuaCAqLywKKwkJCQk2RTg2RkU3QjE1RUMy
NEM5MDBDMjgxNzIgLyogWFNJbnRlcnZhbC5jcHAgKi8sCisJCQkJNkU4NkZFN0MxNUVDMjRDOTAw
QzI4MTcyIC8qIFhTSW50ZXJ2YWwuaCAqLywKKwkJCQk2RTg2RkU3RDE1RUMyNEM5MDBDMjgxNzIg
LyogWFNQb2x5Z29uLmNwcCAqLywKKwkJCQk2RTg2RkU3RTE1RUMyNEM5MDBDMjgxNzIgLyogWFNQ
b2x5Z29uLmggKi8sCisJCQkJNkU4NkZFN0YxNUVDMjRDOTAwQzI4MTcyIC8qIFhTUmVjdGFuZ2xl
LmNwcCAqLywKKwkJCQk2RTg2RkU4MDE1RUMyNEM5MDBDMjgxNzIgLyogWFNSZWN0YW5nbGUuaCAq
LywKIAkJCQkwNzZGMEQwODEyQjgxOTI3MDBDMjZBQTQgLyogYXZmb3VuZGF0aW9uICovLAogCQkJ
CTQ5OUIzRUMwMTI4Q0NDMTgwMEU3MjZDMiAvKiBjYSAqLywKIAkJCQlCMjc1MzUyOTBCMDUzODE0
MDAyQ0U2NEYgLyogY2cgKi8sCkBAIC0yMjIwNCw2ICsyMjIyOCw3IEBACiAJCQlidWlsZEFjdGlv
bk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCiAJCQkJOTdCQzY5REIxNTA1RjA3NjAw
MUI3NEFDIC8qIEFic3RyYWN0RGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTZFODZGRTg0
MTVFQzI0QzkwMEMyODE3MiAvKiBYU0ludGVydmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MUUx
QjFEMTBGRjU5ODY5MDA1NzZCM0IgLyogQWJzdHJhY3RXb3JrZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTI5QTgxMjJFMEZCQjlDMUQwMDUxMDI5MyAvKiBBY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxs
LmggaW4gSGVhZGVycyAqLywKIAkJCQkyOUE4MTIzMzBGQkI5QzFEMDA1MTAyOTMgLyogQWNjZXNz
aWJpbGl0eUFSSUFHcmlkUm93LmggaW4gSGVhZGVycyAqLywKQEAgLTI1NDg0LDYgKzI1NTA5LDkg
QEAKIAkJCQk5Mzc3QUJBMDE1REVGRUVGMDAzMUZEMDQgLyogUGFnaW5hdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMTQ0NzZBQTgxNURDNEJCMTAwMzA1REIyIC8qIFdyaXRpbmdNb2RlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkzMUI4MDFCQjE1RUM1OEM3MDBDRTY0M0QgLyogTGF5b3V0VHlwZXNJ
bmxpbmVNZXRob2RzLmggaW4gSGVhZGVycyAqLywKKwkJCQk2RTg2RkU4MjE1RUMyNEM5MDBDMjgx
NzIgLyogWFNoYXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQk2RTg2RkU4NjE1RUMyNEM5MDBDMjgx
NzIgLyogWFNQb2x5Z29uLmggaW4gSGVhZGVycyAqLywKKwkJCQk2RTg2RkU4ODE1RUMyNEM5MDBD
MjgxNzIgLyogWFNSZWN0YW5nbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZCRDZBRjg4MTVFRjI1
QzkwMDhCNzExMCAvKiBDU1NCYXNpY1NoYXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkJENkFG
OEExNUVGMjVERjAwOEI3MTEwIC8qIEJhc2ljU2hhcGVGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUZCRDZBRjhDMTVFRjI2MDQwMDhCNzExMCAvKiBCYXNpY1NoYXBlcy5oIGluIEhlYWRl
cnMgKi8sCkBAIC0yODU3MSw2ICsyODU5OSwxMCBAQAogCQkJCTUyQjZDOUM1MTVFM0Y0REYwMDY5
MEIwNSAvKiBOYW1lZEZsb3dDb2xsZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUyQ0NB
OUUyMTVFM0Y2MkMwMDUzQzc3RiAvKiBKU0RPTU5hbWVkRmxvd0NvbGxlY3Rpb24uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNTJDQ0E5RTkxNUUzRjY0QzAwNTNDNzdGIC8qIERPTURPTU5hbWVkRmxv
d0NvbGxlY3Rpb24ubW0gaW4gU291cmNlcyAqLywKKwkJCQk2RTg2RkU4MTE1RUMyNEM5MDBDMjgx
NzIgLyogWFNoYXBlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTZFODZGRTgzMTVFQzI0QzkwMEMy
ODE3MiAvKiBYU0ludGVydmFsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTZFODZGRTg1MTVFQzI0
QzkwMEMyODE3MiAvKiBYU1BvbHlnb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNkU4NkZFODcx
NUVDMjRDOTAwQzI4MTcyIC8qIFhTUmVjdGFuZ2xlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZC
RDZBRjg5MTVFRjI1REIwMDhCNzExMCAvKiBCYXNpY1NoYXBlRnVuY3Rpb25zLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUZCRDZBRjhCMTVFRjI1RTUwMDhCNzExMCAvKiBDU1NCYXNpY1NoYXBlcy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlGQkQ2QUY4RDE1RUYyNjBBMDA4QjcxMTAgLyogQmFzaWNT
aGFwZXMuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9YU0ludGVydmFsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1hTSW50ZXJ2YWwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg5Y2U0NDBmYmE1MWU0MjUxMzI4OTMy
NTc4ZTUzM2FlMTNkZTZmNDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9YU0ludGVydmFsLmNwcApAQCAtMCwwICsxLDE2NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBk
aXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAq
ICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIEhPTERFUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJYU0ludGVydmFsLmgiCisKKyNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBJbnRlcnZh
bFgxQ29tcGFyYXRvciB7CisgICAgYm9vbCBvcGVyYXRvcigpIChjb25zdCBYU0ludGVydmFsJiBp
MSwgY29uc3QgWFNJbnRlcnZhbCYgaTIpIGNvbnN0IAorICAgIHsgICAgICAgCisgICAgICAgIHJl
dHVybiBpMS54MSA8IGkyLngxOworICAgIH0KK307CisKK2Jvb2wgWFNJbnRlcnZhbDo6aW50ZXJz
ZWN0KGNvbnN0IFhTSW50ZXJ2YWwmIGksIFhTSW50ZXJ2YWwmIHJ2KSBjb25zdCAKK3sgIAorICAg
IGlmICh4MiA8IGkueDEgfHwgeDEgPiBpLngyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
cnYueDEgPSBzdGQ6Om1heCh4MSwgaS54MSk7CisgICAgcnYueDIgPSBzdGQ6Om1pbih4MiwgaS54
Mik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgc29ydFhTSW50ZXJ2YWxzKFZlY3RvcjxY
U0ludGVydmFsPiYgdikKK3sKKyAgICBzdGQ6OnNvcnQodi5iZWdpbigpLCB2LmVuZCgpLCBJbnRl
cnZhbFgxQ29tcGFyYXRvcigpKTsKK30KKwordm9pZCBtZXJnZVhTSW50ZXJ2YWxzKGNvbnN0IFZl
Y3RvcjxYU0ludGVydmFsPiYgdjEsIGNvbnN0IFZlY3RvcjxYU0ludGVydmFsPiYgdjIsIFZlY3Rv
cjxYU0ludGVydmFsPiYgcnYpIAoreworICAgIGlmICghdjEuc2l6ZSgpKQorICAgICAgICBydi5h
cHBlbmRSYW5nZSh2Mi5iZWdpbigpLCB2Mi5lbmQoKSk7CisgICAgZWxzZSBpZiAoIXYyLnNpemUo
KSkKKyAgICAgICAgcnYuYXBwZW5kUmFuZ2UodjEuYmVnaW4oKSwgdjEuZW5kKCkpOworICAgIGVs
c2UgeworICAgICAgICBWZWN0b3I8WFNJbnRlcnZhbD4gdih2MS5zaXplKCkgKyB2Mi5zaXplKCkp
OworICAgICAgICBYU0ludGVydmFsKiBpbnRlcnZhbCA9IDA7CisgICAgICAgIAorICAgICAgICBz
dGQ6Om1lcmdlKHYxLmJlZ2luKCksIHYxLmVuZCgpLCB2Mi5iZWdpbigpLCB2Mi5lbmQoKSwgdi5i
ZWdpbigpLCBJbnRlcnZhbFgxQ29tcGFyYXRvcigpKTsKKyAgICAgICAgCisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgdi5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgaWYgKCFpbnRl
cnZhbCkKKyAgICAgICAgICAgICAgICBpbnRlcnZhbCA9ICZ2W2ldOworICAgICAgICAgICAgZWxz
ZSBpZiAodltpXS54MSA+PSBpbnRlcnZhbC0+eDEgJiYgdltpXS54MSA8PSBpbnRlcnZhbC0+eDIp
IC8vIEZJWE1FOiAxc3QgPD0gdGVzdCBub3QgbmVlZGVkPworICAgICAgICAgICAgICAgIGludGVy
dmFsLT54MiA9IHN0ZDo6bWF4KGludGVydmFsLT54MiwgdltpXS54Mik7CisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICBydi5hcHBlbmQoKmludGVydmFsKTsKKyAgICAgICAgICAg
ICAgICBpbnRlcnZhbCA9ICZ2W2ldOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBpZiAoaW50ZXJ2YWwpCisgICAgICAgICAgICBydi5hcHBlbmQoKmludGVydmFs
KTsKKyAgICB9Cit9CisKK3ZvaWQgaW50ZXJzZWN0WFNJbnRlcnZhbHMoY29uc3QgVmVjdG9yPFhT
SW50ZXJ2YWw+JiB2MSwgY29uc3QgVmVjdG9yPFhTSW50ZXJ2YWw+JiB2MiwgVmVjdG9yPFhTSW50
ZXJ2YWw+JiBydikgCit7CisgICAgc2l6ZV90IHYxU2l6ZSA9IHYxLnNpemUoKTsKKyAgICBzaXpl
X3QgdjJTaXplID0gdjIuc2l6ZSgpOworCisgICAgaWYgKCF2MVNpemUgfHwgIXYyU2l6ZSkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIFhTSW50ZXJ2YWwgaW50ZXJ2YWw7CisgICAgYm9vbCBv
dmVybGFwID0gZmFsc2U7CisgICAgc2l6ZV90IGkxID0gMDsKKyAgICBzaXplX3QgaTIgPSAwOwor
ICAgIAorICAgIHdoaWxlIChpMSA8IHYxU2l6ZSAmJiBpMiA8IHYyU2l6ZSkgeworICAgICAgICBY
U0ludGVydmFsIHYxMjsKKyAgICAgICAgaWYgKHYxW2kxXS5pbnRlcnNlY3QodjJbaTJdLCB2MTIp
KSB7CisgICAgICAgICAgICBpZiAoIW92ZXJsYXAgfHwgIXYxMi5pbnRlcnNlY3QoaW50ZXJ2YWws
IGludGVydmFsKSkgeworICAgICAgICAgICAgICAgIGlmIChvdmVybGFwKSAKKyAgICAgICAgICAg
ICAgICAgICAgcnYuYXBwZW5kKGludGVydmFsKTsKKyAgICAgICAgICAgICAgICBpbnRlcnZhbCA9
IHYxMjsKKyAgICAgICAgICAgICAgICBvdmVybGFwID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICh2MVtpMV0ueDIgPCB2MltpMl0ueDIpIAorICAgICAgICAgICAgICAgIGkx
Kys7IAorICAgICAgICAgICAgZWxzZSAKKyAgICAgICAgICAgICAgICBpMisrOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgaWYgKG92ZXJsYXApIAorICAgICAgICAgICAgICAgIHJ2LmFw
cGVuZChpbnRlcnZhbCk7CisgICAgICAgICAgICBvdmVybGFwID0gZmFsc2U7CisgICAgICAgICAg
ICBpZiAodjFbaTFdLngxIDwgdjJbaTJdLngxKSAKKyAgICAgICAgICAgICAgICBpMSsrOyAKKyAg
ICAgICAgICAgIGVsc2UgCisgICAgICAgICAgICAgICAgaTIrKzsKKyAgICAgICAgfQorICAgIH0K
KyAgICAKKyAgICBpZiAob3ZlcmxhcCkgCisgICAgICAgIHJ2LmFwcGVuZChpbnRlcnZhbCk7Cit9
CisKK3ZvaWQgc3VidHJhY3RYU0ludGVydmFscyhjb25zdCBWZWN0b3I8WFNJbnRlcnZhbD4mIHYx
LCBjb25zdCBWZWN0b3I8WFNJbnRlcnZhbD4mIHYyLCBWZWN0b3I8WFNJbnRlcnZhbD4mIHJ2KSAK
K3sKKyAgICBzaXplX3QgdjFTaXplID0gdjEuc2l6ZSgpOworICAgIHNpemVfdCB2MlNpemUgPSB2
Mi5zaXplKCk7CisgICAgCisgICAgaWYgKCF2MVNpemUpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmICghdjJTaXplKQorICAgICAgICBydi5hcHBlbmRSYW5nZSh2MS5iZWdpbigpLCB2MS5lbmQo
KSk7CisgICAgZWxzZSB7CisgICAgICAgIHNpemVfdCBpMSA9IDAsIGkyID0gMDsKKyAgICAgICAg
cnYuYXBwZW5kUmFuZ2UodjEuYmVnaW4oKSwgdjEuZW5kKCkpOworICAgICAgICAKKyAgICAgICAg
d2hpbGUgKGkxIDwgcnYuc2l6ZSgpICYmIGkyIDwgdjJTaXplKSB7CisgICAgICAgICAgICBYU0lu
dGVydmFsJiBpbnRlcnZhbDEgPSBydltpMV07ICAKKyAgICAgICAgICAgIGNvbnN0IFhTSW50ZXJ2
YWwmIGludGVydmFsMiA9IHYyW2kyXTsgIAorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAo
aW50ZXJ2YWwyLngxIDw9IGludGVydmFsMS54MSAmJiBpbnRlcnZhbDIueDIgPj0gaW50ZXJ2YWwx
LngyKSAKKyAgICAgICAgICAgICAgICBydi5yZW1vdmUoaTEpOworICAgICAgICAgICAgZWxzZSBp
ZiAoaW50ZXJ2YWwyLngyIDwgaW50ZXJ2YWwxLngxKQorICAgICAgICAgICAgICAgIGkyICs9IDE7
CisgICAgICAgICAgICBlbHNlIGlmIChpbnRlcnZhbDIueDEgPiBpbnRlcnZhbDEueDIpCisgICAg
ICAgICAgICAgICAgaTEgKz0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGludGVydmFsMi54MSA+
IGludGVydmFsMS54MSAmJiBpbnRlcnZhbDIueDIgPCBpbnRlcnZhbDEueDIpIHsKKyAgICAgICAg
ICAgICAgICBydi5pbnNlcnQoaTEsIFhTSW50ZXJ2YWwoaW50ZXJ2YWwxLngxLCBpbnRlcnZhbDIu
eDEpKTsKKyAgICAgICAgICAgICAgICBpbnRlcnZhbDEueDEgPSBpbnRlcnZhbDIueDI7CisgICAg
ICAgICAgICAgICAgaTIgKz0gMTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaW50ZXJ2YWwyLngx
IDw9IGludGVydmFsMS54MSkgeworICAgICAgICAgICAgICAgIGludGVydmFsMS54MSA9IGludGVy
dmFsMi54MjsKKyAgICAgICAgICAgICAgICBpMiArPSAxOworICAgICAgICAgICAgfSBlbHNlICB7
IC8vIChpbnRlcnZhbDIueDIgPj0gaW50ZXJ2YWwxLngyKSAKKyAgICAgICAgICAgICAgICBpbnRl
cnZhbDEueDIgPSBpbnRlcnZhbDIueDE7CisgICAgICAgICAgICAgICAgaTEgKz0gMTsKKyAgICAg
ICAgICAgIH0gICAgICAgICAgIAorICAgICAgICB9CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Y
U0ludGVydmFsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9YU0ludGVydmFs
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uM2U0MjU0NTdkMTQ0NjU0NGRiMDU1ZmMwOGU1MTI4MTU5OWZhZGNiNAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1hTSW50
ZXJ2YWwuaApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2Jl
IFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBYU0ludGVydmFsX2gKKyNk
ZWZpbmUgWFNJbnRlcnZhbF9oCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworc3RydWN0IFhTSW50ZXJ2YWwgeworcHVibGljOgorICAgIGZsb2F0IHgx
OworICAgIGZsb2F0IHgyOworCisgICAgWFNJbnRlcnZhbChmbG9hdCB4MSA9IDAsIGZsb2F0IHgy
ID0gMCkgCisgICAgICAgIDogeDEoeDEpCisgICAgICAgICwgeDIoeDIpIAorICAgIHsgCisgICAg
fQorCisgICAgYm9vbCBpbnRlcnNlY3QoY29uc3QgWFNJbnRlcnZhbCYsIFhTSW50ZXJ2YWwmKSBj
b25zdDsgCit9OworCit2b2lkIHNvcnRYU0ludGVydmFscyhWZWN0b3I8WFNJbnRlcnZhbD4mKTsK
K3ZvaWQgbWVyZ2VYU0ludGVydmFscyhjb25zdCBWZWN0b3I8WFNJbnRlcnZhbD4mLCBjb25zdCBW
ZWN0b3I8WFNJbnRlcnZhbD4mLCBWZWN0b3I8WFNJbnRlcnZhbD4mKTsKK3ZvaWQgaW50ZXJzZWN0
WFNJbnRlcnZhbHMoY29uc3QgVmVjdG9yPFhTSW50ZXJ2YWw+JiwgY29uc3QgVmVjdG9yPFhTSW50
ZXJ2YWw+JiwgVmVjdG9yPFhTSW50ZXJ2YWw+Jik7Cit2b2lkIHN1YnRyYWN0WFNJbnRlcnZhbHMo
Y29uc3QgVmVjdG9yPFhTSW50ZXJ2YWw+JiwgY29uc3QgVmVjdG9yPFhTSW50ZXJ2YWw+JiwgVmVj
dG9yPFhTSW50ZXJ2YWw+Jik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IFhTSW50ZXJ2YWxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvWFNQb2x5Z29uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1hTUG9s
eWdvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMTMxZDk0YTFlY2IwYzY5NjQ5OWQyNjQ3NzMzYzNmOTdjYTg2
NDVmNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1hTUG9seWdvbi5jcHAKQEAgLTAsMCArMSwzNjUgQEAKKyAvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
CisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgor
ICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlhTUG9seWdvbi5oIgorCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgTWF4RWRnZVlDb21wYXJhdG9yIHsg
ICAgCisgICAgYm9vbCBvcGVyYXRvcigpIChjb25zdCBYU0VkZ2UqIGUxLCBjb25zdCBYU0VkZ2Uq
IGUyKSBjb25zdCAKKyAgICB7ICAgICAgIAorICAgICAgICByZXR1cm4gZTEtPm1heFkoKSA8IGUy
LT5tYXhZKCk7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IoKSAoY29uc3QgWFNFZGdl
KiBlLCBmbG9hdCB5KSBjb25zdCAKKyAgICB7ICAgICAgIAorICAgICAgICByZXR1cm4gZS0+bWF4
WSgpIDwgeTsKKyAgICB9Cit9OworCitzdHJ1Y3QgTWluRWRnZVlDb21wYXJhdG9yIHsgICAgCisg
ICAgYm9vbCBvcGVyYXRvcigpIChjb25zdCBYU0VkZ2UqIGUxLCBjb25zdCBYU0VkZ2UqIGUyKSBj
b25zdCAKKyAgICB7ICAgICAgIAorICAgICAgICByZXR1cm4gZTEtPm1pblkoKSA8IGUyLT5taW5Z
KCk7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IoKSAoY29uc3QgWFNFZGdlKiBlLCBm
bG9hdCB5KSBjb25zdAorICAgIHsgICAgICAgCisgICAgICAgIHJldHVybiBlLT5taW5ZKCkgPCB5
OworICAgIH0KK307CisKK3N0cnVjdCBJbnRlcnNlY3Rpb25YQ29tcGFyYXRvciB7CisgICAgYm9v
bCBvcGVyYXRvcigpIChjb25zdCBYU0ludGVyc2VjdGlvbiYgaTEsIGNvbnN0IFhTSW50ZXJzZWN0
aW9uJiBpMikgY29uc3QgCisgICAgeyAgICAgICAKKyAgICAgICAgcmV0dXJuIChpMS54ID09IGky
LngpID8gaTEudHlwZSA8IGkyLnR5cGUgOiBpMS54IDwgaTIueDsKKyAgICB9Cit9OworCitYU0Vk
Z2VUcmVlOjpYU0VkZ2VUcmVlKGNvbnN0IFZlY3RvcjxYU0VkZ2UqPiYgc29ydGVkRWRnZXMpIAor
ICAgIDogY2VudGVyKDApCisgICAgLCBhYm92ZUNlbnRlcigwKQorICAgICwgYmVsb3dDZW50ZXIo
MCkKK3sKKyAgICBpZiAoc29ydGVkRWRnZXMuc2l6ZSgpID4gMCkKKyAgICAgICAgaW5pdEVkZ2VU
cmVlKHRoaXMsIHNvcnRlZEVkZ2VzKTsKK30KKwordm9pZCBYU0VkZ2VUcmVlOjppbml0RWRnZVRy
ZWUoWFNFZGdlVHJlZSogbm9kZSwgY29uc3QgVmVjdG9yPFhTRWRnZSo+JiBlZGdlcykKK3sKKyAg
ICBzaXplX3QgZWRnZXNTaXplID0gZWRnZXMuc2l6ZSgpOyAgCisgICAgc2l6ZV90IGNlbnRlcklu
ZGV4ID0gZWRnZXNTaXplIC8gMjsKKyAgICBub2RlLT5jZW50ZXIgPSAoZWRnZXNbY2VudGVySW5k
ZXhdLT5taW5ZKCkgKyBlZGdlc1tjZW50ZXJJbmRleF0tPm1heFkoKSkgLyAyOworICAgIAorICAg
IFZlY3RvcjxYU0VkZ2UqPiBhYm92ZUNlbnRlckVkZ2VzOworICAgIFZlY3RvcjxYU0VkZ2UqPiBi
ZWxvd0NlbnRlckVkZ2VzOworICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZWRnZXNT
aXplOyBpKyspIHsKKyAgICAgICAgWFNFZGdlKiBlZGdlID0gZWRnZXNbaV07CisgICAgICAgIGlm
IChlZGdlLT5tYXhZKCkgPCBub2RlLT5jZW50ZXIpCisgICAgICAgICAgICBhYm92ZUNlbnRlckVk
Z2VzLmFwcGVuZChlZGdlKTsKKyAgICAgICAgZWxzZSBpZiAoZWRnZS0+bWluWSgpID4gbm9kZS0+
Y2VudGVyKQorICAgICAgICAgICAgYmVsb3dDZW50ZXJFZGdlcy5hcHBlbmQoZWRnZSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIG5vZGUtPm92ZXJsYXBDZW50ZXIuYXBwZW5kKGVkZ2UpOwor
ICAgIH0KKyAgICAKKyAgICAvLyBGSVhNRTogY3JlYXRlIHR3byBzb3J0ZWQgY29waWVzIG9mIG92
ZXJsYXBDZW50ZXI6IG92ZXJsYXBDZW50ZXJNaW5ZLCBvdmVybGFwQ2VudGVyTWF4WSwgdXNlIHRo
ZW0gaW4gZmluZC4uLgorICAgIAorICAgIGlmIChhYm92ZUNlbnRlckVkZ2VzLnNpemUoKSA+IDAp
CisgICAgICAgIG5vZGUtPmFib3ZlQ2VudGVyID0gYWRvcHRQdHIobmV3IFhTRWRnZVRyZWUoYWJv
dmVDZW50ZXJFZGdlcykpOworICAgIGlmIChiZWxvd0NlbnRlckVkZ2VzLnNpemUoKSA+IDApCisg
ICAgICAgIG5vZGUtPmJlbG93Q2VudGVyID0gYWRvcHRQdHIobmV3IFhTRWRnZVRyZWUoYmVsb3dD
ZW50ZXJFZGdlcykpOworfQorCit2b2lkIFhTRWRnZVRyZWU6OmZpbmRFZGdlc1RoYXRPdmVybGFw
WShmbG9hdCB5LCBWZWN0b3I8WFNFZGdlKj4mIHJ2KSBjb25zdAoreworICAgIGlmICh5IDwgY2Vu
dGVyKSB7CisgICAgICAgIGlmIChhYm92ZUNlbnRlcikgCisgICAgICAgICAgICBhYm92ZUNlbnRl
ci0+ZmluZEVkZ2VzVGhhdE92ZXJsYXBZKHksIHJ2KTsKKyAgICB9IGVsc2UgaWYgKHkgPiBjZW50
ZXIpIHsKKyAgICAgICAgaWYgKGJlbG93Q2VudGVyKSAKKyAgICAgICAgICAgIGJlbG93Q2VudGVy
LT5maW5kRWRnZXNUaGF0T3ZlcmxhcFkoeSwgcnYpOworICAgIH0KKyAgICAKKyAgICBzaXplX3Qg
b3ZlcmxhcEVkZ2VzU2l6ZSA9IG92ZXJsYXBDZW50ZXIuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgb3ZlcmxhcEVkZ2VzU2l6ZTsgaSsrKSB7CisgICAgICAgIFhTRWRnZSogZWRn
ZSA9IG92ZXJsYXBDZW50ZXJbaV07CisgICAgICAgIGlmICh5ID49IGVkZ2UtPm1pblkoKSAmJiB5
IDw9IGVkZ2UtPm1heFkoKSkKKyAgICAgICAgICAgIHJ2LmFwcGVuZChlZGdlKTsKKyAgICB9Cit9
CisKK3ZvaWQgWFNFZGdlVHJlZTo6ZmluZEVkZ2VzVGhhdE92ZXJsYXBJbnRlcnZhbChmbG9hdCB5
TWluLCBmbG9hdCB5TWF4LCBWZWN0b3I8WFNFZGdlKj4mIHJ2KSBjb25zdAoreworICAgIGlmICgo
eU1pbiA8IGNlbnRlcikgJiYgYWJvdmVDZW50ZXIpCisgICAgICAgIGFib3ZlQ2VudGVyLT5maW5k
RWRnZXNUaGF0T3ZlcmxhcEludGVydmFsKHlNaW4sIHlNYXgsIHJ2KTsKKworICAgIGlmICgoeU1h
eCA+IGNlbnRlcikgJiYgYmVsb3dDZW50ZXIpCisgICAgICAgIGJlbG93Q2VudGVyLT5maW5kRWRn
ZXNUaGF0T3ZlcmxhcEludGVydmFsKHlNaW4sIHlNYXgsIHJ2KTsKKyAgICAKKyAgICBzaXplX3Qg
b3ZlcmxhcEVkZ2VzU2l6ZSA9IG92ZXJsYXBDZW50ZXIuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgb3ZlcmxhcEVkZ2VzU2l6ZTsgaSsrKSB7CisgICAgICAgIFhTRWRnZSogZWRn
ZSA9IG92ZXJsYXBDZW50ZXJbaV07CisgICAgICAgIGlmICh5TWF4ID4gZWRnZS0+bWluWSgpICYm
IHlNaW4gPCBlZGdlLT5tYXhZKCkpCisgICAgICAgICAgICBydi5hcHBlbmQoZWRnZSk7CisgICAg
fQorfQorCitYU1BvbHlnb246OlhTUG9seWdvbihQYXNzT3duUHRyPFZlY3RvcjxmbG9hdD4gPiBj
b29yZGluYXRlcywgV2luZFJ1bGUgZmlsbFJ1bGUpCisgICAgOiBYU2hhcGUoKQorICAgICwgbV9j
b29yZGluYXRlcyhjb29yZGluYXRlcykKKyAgICAsIG1fZmlsbFJ1bGUoZmlsbFJ1bGUpIAorewor
ICAgIC8vIEZJWE1FOiBzcGVjaWFsIGNhc2VzIGZvciAobGVuZ3RoID09KSAwLCAxLCAyICBwb2lu
dHMKKyAgICAvLyBGSVhNRTogYXNzdW1pbmcgb3BlbiBwb2x5Z29ucyBmb3Igbm93CisgICAgCisg
ICAgc2l6ZV90IG5WZXJ0aWNlcyA9IG51bWJlck9mVmVydGljZXMoKTsKKyAgICBtX2VkZ2VzLnJl
c2l6ZShuVmVydGljZXMpOworICAgIFZlY3RvcjxYU0VkZ2UqPiBzb3J0ZWRFZGdlc01pblkoblZl
cnRpY2VzKTsKKyAgICAKKyAgICBmbG9hdCBtaW5YID0gZ2V0WEF0KDApOworICAgIGZsb2F0IG1p
blkgPSBnZXRZQXQoMCk7CisgICAgZmxvYXQgbWF4WCA9IG1pblg7CisgICAgZmxvYXQgbWF4WSA9
IG1pblk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5WZXJ0aWNlczsgaSsrKSB7Cisg
ICAgICAgIGZsb2F0IHggPSBnZXRYQXQoaSk7CisgICAgICAgIGZsb2F0IHkgPSBnZXRZQXQoaSk7
CisgICAgICAgIAorICAgICAgICBtaW5YID0gc3RkOjptaW4oeCwgbWluWCk7CisgICAgICAgIG1h
eFggPSBzdGQ6Om1heCh4LCBtYXhYKTsKKyAgICAgICAgbWluWSA9IHN0ZDo6bWluKHksIG1pblkp
OworICAgICAgICBtYXhZID0gc3RkOjptYXgoeSwgbWF4WSk7CisgICAgICAgIAorICAgICAgICBt
X2VkZ2VzW2ldLnBvbHlnb24gPSB0aGlzOworICAgICAgICBtX2VkZ2VzW2ldLmkxID0gaTsKKyAg
ICAgICAgbV9lZGdlc1tpXS5pMiA9IChpKzEpICUgblZlcnRpY2VzOworICAgICAgICAKKyAgICAg
ICAgc29ydGVkRWRnZXNNaW5ZW2ldID0gJm1fZWRnZXNbaV07CisgICAgfQorICAgIAorICAgIG1f
Ym91bmRpbmdCb3guc2V0WChtaW5YKTsKKyAgICBtX2JvdW5kaW5nQm94LnNldFkobWluWSk7Cisg
ICAgbV9ib3VuZGluZ0JveC5zZXRXaWR0aChtYXhYIC0gbWluWCk7CisgICAgbV9ib3VuZGluZ0Jv
eC5zZXRIZWlnaHQobWF4WSAtIG1pblkpOworCisgICAgc3RkOjpzb3J0KHNvcnRlZEVkZ2VzTWlu
WS5iZWdpbigpLCBzb3J0ZWRFZGdlc01pblkuZW5kKCksIE1pbkVkZ2VZQ29tcGFyYXRvcigpKTsK
KyAgICBtX2VkZ2VUcmVlID0gYWRvcHRQdHIobmV3IFhTRWRnZVRyZWUoc29ydGVkRWRnZXNNaW5Z
KSk7Cit9CisKK3N0YXRpYyBib29sIGNvbXB1dGVYSW50ZXJzZWN0aW9uKGNvbnN0IFhTRWRnZSog
ZXAsIGZsb2F0IHksIFhTSW50ZXJzZWN0aW9uJiBpKQoreworICAgIGNvbnN0IFhTRWRnZSYgZSA9
ICplcDsKKyAgICAKKyAgICBpZiAoZS5taW5ZKCkgPiB5IHx8IGUubWF4WSgpIDwgeSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGZsb2F0IHgxID0gZS54MSgpOworICAgIGZsb2F0
IHkxID0gZS55MSgpOworICAgIGZsb2F0IHgyID0gZS54MigpOworICAgIGZsb2F0IHkyID0gZS55
MigpOworICAgIGZsb2F0IGR5ID0geTIgLSB5MTsKKyAgICAKKyAgICBpLmVkZ2UgPSBlcDsKKyAg
ICBpLnkgPSB5OworICAgIAorICAgIGlmICghZHkpIHsKKyAgICAgICAgaS50eXBlID0gVmVydGV4
WUJvdGg7CisgICAgICAgIGkueCA9IGUubWluWCgpOworICAgIH0gZWxzZSBpZiAoeSA9PSBlLm1p
blkoKSkgeworICAgICAgICBpLnR5cGUgPSBWZXJ0ZXhZTWluOworICAgICAgICBpLnggPSAoeTEg
PCB5MikgPyB4MSA6IHgyOworICAgIH0gZWxzZSBpZiAoeSA9PSBlLm1heFkoKSkgeworICAgICAg
ICBpLnR5cGUgPSBWZXJ0ZXhZTWF4OworICAgICAgICBpLnggPSAoeTEgPiB5MikgPyB4MSA6IHgy
OworICAgIH0gZWxzZSB7CisgICAgICAgIGkudHlwZSA9IE5vcm1hbDsKKyAgICAgICAgaS54ID0g
KCh5IC0geTEpICogKHgyIC0geDEpIC8gZHkpICsgeDE7CisgICAgfQorICAgIAorICAgIHJldHVy
biB0cnVlOworfQorCitmbG9hdCBYU1BvbHlnb246OnJpZ2h0VmVydGV4WShzaXplX3QgaW5kZXgp
IGNvbnN0IAoreyAKKyAgICBzaXplX3QgblZlcnRpY2VzID0gbnVtYmVyT2ZWZXJ0aWNlcygpOwor
ICAgIHNpemVfdCBpMSA9IChpbmRleCArIDEpICUgblZlcnRpY2VzOworICAgIHNpemVfdCBpMiA9
IChpbmRleCAtIDEpICUgblZlcnRpY2VzOworCisgICAgaWYgKGdldFhBdChpMSkgPT0gZ2V0WEF0
KGkyKSkKKyAgICAgICAgcmV0dXJuIGdldFlBdChpMSkgPiBnZXRZQXQoaTIpID8gZ2V0WUF0KGkx
KSA6IGdldFlBdChpMik7CisKKyAgICByZXR1cm4gZ2V0WEF0KGkxKSA+IGdldFhBdChpMikgPyBn
ZXRZQXQoaTEpIDogZ2V0WUF0KGkyKTsKK30KKworc3RhdGljIGJvb2wgYXBwZW5kSW50ZXJ2YWxY
KGZsb2F0IHgsIGJvb2wgaW5zaWRlLCBWZWN0b3I8WFNJbnRlcnZhbD4mIHYpCit7CisgICAgaWYg
KCFpbnNpZGUpCisgICAgICAgIHYuYXBwZW5kKFhTSW50ZXJ2YWwoeCkpOworICAgIGVsc2UKKyAg
ICAgICAgdlt2LnNpemUoKSAtIDFdLngyID0geDsKKyAgICAKKyAgICByZXR1cm4gIWluc2lkZTsK
K30KKwordm9pZCBYU1BvbHlnb246OmNvbXB1dGVYSW50ZXJzZWN0aW9ucyhmbG9hdCB5LCBWZWN0
b3I8WFNJbnRlcnZhbD4mIHJ2KSBjb25zdAoreworICAgIFZlY3RvcjxYU0VkZ2UqPiBvdmVybGFw
cGluZ0VkZ2VzOworICAgIG1fZWRnZVRyZWUtPmZpbmRFZGdlc1RoYXRPdmVybGFwWSh5LCBvdmVy
bGFwcGluZ0VkZ2VzKTsKKworICAgIFZlY3RvcjxYU0ludGVyc2VjdGlvbj4gaW50ZXJzZWN0aW9u
czsKKyAgICBYU0ludGVyc2VjdGlvbiBpbnRlcnNlY3Rpb247CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBvdmVybGFwcGluZ0VkZ2VzLnNpemUoKTsgaSsrKSB7ICAgCisgICAgICAgIGlmIChj
b21wdXRlWEludGVyc2VjdGlvbihvdmVybGFwcGluZ0VkZ2VzW2ldLCB5LCBpbnRlcnNlY3Rpb24p
ICYmIGludGVyc2VjdGlvbi50eXBlICE9IFZlcnRleFlCb3RoKQorICAgICAgICAgICAgaW50ZXJz
ZWN0aW9ucy5hcHBlbmQoaW50ZXJzZWN0aW9uKTsKKyAgICB9CisgICAgaWYgKGludGVyc2VjdGlv
bnMuc2l6ZSgpIDwgMikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHN0ZDo6c29ydChpbnRl
cnNlY3Rpb25zLmJlZ2luKCksIGludGVyc2VjdGlvbnMuZW5kKCksIEludGVyc2VjdGlvblhDb21w
YXJhdG9yKCkpOworICAgIAorICAgIHNpemVfdCBpbmRleCA9IDA7CisgICAgaW50IHdpbmRDb3Vu
dCA9IDA7CisgICAgYm9vbCBpbnNpZGUgPSBmYWxzZTsKKyAgICAKKyAgICB3aGlsZSAoaW5kZXgg
PCBpbnRlcnNlY3Rpb25zLnNpemUoKSkgeworICAgICAgICBjb25zdCBYU0ludGVyc2VjdGlvbiYg
dGhpc0ludCA9IGludGVyc2VjdGlvbnNbaW5kZXhdOworCisgICAgICAgIGlmIChpbmRleCArIDEg
PCBpbnRlcnNlY3Rpb25zLnNpemUoKSkgeworICAgICAgICAgICAgY29uc3QgWFNJbnRlcnNlY3Rp
b24mIG5leHRJbnQgPSBpbnRlcnNlY3Rpb25zW2luZGV4ICsxXTsKKyAgICAgICAgICAgIGlmICgo
dGhpc0ludC54ID09IG5leHRJbnQueCkgJiYgKHRoaXNJbnQudHlwZSA9PSBWZXJ0ZXhZTWluIHx8
IHRoaXNJbnQudHlwZSA9PSBWZXJ0ZXhZTWF4KSkgeworICAgICAgICAgICAgICAgIGlmICh0aGlz
SW50LnR5cGUgPT0gbmV4dEludC50eXBlKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIHNraXAg
VmVydGV4WU1heCxWZXJ0ZXhZTWF4IGFuZCBWZXJ0ZXhZTWluLFZlcnRleFlNaW4KKyAgICAgICAg
ICAgICAgICAgICAgaW5kZXggKz0gMjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICAvLyBWZXJ0ZXhZTWluLFZlcnRleFlNYXggb3IgVmVydGV4WU1heCxWZXJ0
ZXhZTWluID0+IFZlcnRleFlNaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRJbnQudHlw
ZSA9PSBWZXJ0ZXhZTWF4KQorICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0aW9uc1tp
bmRleCArIDFdID0gdGhpc0ludDsKKyAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0gMTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGNvbnN0IFhTRWRnZSYgdGhpc0VkZ2UgPSAq
dGhpc0ludC5lZGdlOworICAgICAgICBib29sIGNyb3NzaW5nID0gIXdpbmRDb3VudDsgCisgICAg
ICAgIAorICAgICAgICAgaWYgKGZpbGxSdWxlKCkgPT0gUlVMRV9FVkVOT0REKSB7CisgICAgICAg
ICAgICB3aW5kQ291bnQgKz0gKGdldFlBdCh0aGlzRWRnZS5pMikgPiBnZXRZQXQodGhpc0VkZ2Uu
aTEpKSA/ICsxIDogLTE7CisgICAgICAgICAgICBjcm9zc2luZyA9IGNyb3NzaW5nIHx8ICF3aW5k
Q291bnQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICgodGhpc0ludC50eXBlID09
IE5vcm1hbCkgfHwgKHRoaXNJbnQudHlwZSA9PSBWZXJ0ZXhZTWluKSkgeworICAgICAgICAgICAg
aWYgKGNyb3NzaW5nKQorICAgICAgICAgICAgICAgIGluc2lkZSA9IGFwcGVuZEludGVydmFsWCh0
aGlzSW50LngsIGluc2lkZSwgcnYpOworICAgICAgICB9IGVsc2UgaWYgKHRoaXNJbnQudHlwZSA9
PSBWZXJ0ZXhZTWF4KSB7IAorICAgICAgICAgICAgaW50IHZpID0gKGdldFlBdCh0aGlzRWRnZS5p
MikgPiBnZXRZQXQodGhpc0VkZ2UuaTEpKSA/IHRoaXNFZGdlLmkyIDogdGhpc0VkZ2UuaTE7Cisg
ICAgICAgICAgICBpZiAoY3Jvc3NpbmcgJiYgcmlnaHRWZXJ0ZXhZKHZpKSA+IHkpCisgICAgICAg
ICAgICAgICAgaW5zaWRlID0gYXBwZW5kSW50ZXJ2YWxYKHRoaXNFZGdlLm1heFgoKSwgaW5zaWRl
LCBydik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGluZGV4ICs9IDE7CisgICAgfQor
fQorCisvLyBSZXR1cm4gdGhlIFggcHJvamVjdGlvbnMgb2YgdGhlIGVkZ2VzIHRoYXQgb3Zlcmxh
cCB5MSx5Mi4KK3ZvaWQgWFNQb2x5Z29uOjpjb21wdXRlRWRnZUludGVyc2VjdGlvbnMoZmxvYXQg
eTEsIGZsb2F0IHkyLCBWZWN0b3I8WFNJbnRlcnZhbD4mIHJ2KSBjb25zdAoreworICAgIGlmICh5
MSA+IHkyKQorICAgICAgICBzdGQ6OnN3YXAoeTEsIHkyKTsKKyAgICAKKyAgICBWZWN0b3I8WFNF
ZGdlICo+IG92ZXJsYXBwaW5nRWRnZXM7CisgICAgbV9lZGdlVHJlZS0+ZmluZEVkZ2VzVGhhdE92
ZXJsYXBJbnRlcnZhbCh5MSwgeTIsIG92ZXJsYXBwaW5nRWRnZXMpOworICAgIAorICAgIFhTSW50
ZXJzZWN0aW9uIGludGVyc2VjdGlvbjsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG92ZXJs
YXBwaW5nRWRnZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgY29uc3QgWFNFZGdlJiBlZGdlID0g
Km92ZXJsYXBwaW5nRWRnZXNbaV07CisgICAgICAgIGZsb2F0IHgxLCB4MjsKKyAgICAgICAgCisg
ICAgICAgIGlmIChlZGdlLm1pblkoKSA8IHkxKSB7CisgICAgICAgICAgICBjb21wdXRlWEludGVy
c2VjdGlvbihvdmVybGFwcGluZ0VkZ2VzW2ldLCB5MSwgaW50ZXJzZWN0aW9uKTsKKyAgICAgICAg
ICAgIHgxID0gaW50ZXJzZWN0aW9uLng7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgeDEg
PSAoZWRnZS55MSgpIDwgZWRnZS55MigpKSA/IGVkZ2UueDEoKSA6IGVkZ2UueDIoKTsKKyAgICAg
ICAgCisgICAgICAgIGlmIChlZGdlLm1heFkoKSA+IHkyKSB7CisgICAgICAgICAgICBjb21wdXRl
WEludGVyc2VjdGlvbihvdmVybGFwcGluZ0VkZ2VzW2ldLCB5MiwgaW50ZXJzZWN0aW9uKTsKKyAg
ICAgICAgICAgIHgyID0gaW50ZXJzZWN0aW9uLng7CisgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgeDIgPSAoZWRnZS55MSgpID4gZWRnZS55MigpKSA/IGVkZ2UueDEoKSA6IGVkZ2UueDIoKTsK
KyAgICAgICAgCisgICAgICAgIGlmICh4MSA+IHgyKSAvLyBGSVhNRTogSW50ZXJ2YWwgY29uc3Ry
dWN0b3Igc2hvdWxkIGRvIHRoaXMKKyAgICAgICAgICAgIHN0ZDo6c3dhcCh4MSwgeDIpOworICAg
ICAgICAKKyAgICAgICAgcnYuYXBwZW5kKFhTSW50ZXJ2YWwoeDEsIHgyKSk7CisgICAgfQorICAg
IAorICAgIHNvcnRYU0ludGVydmFscyhydik7Cit9CisKK3ZvaWQgWFNQb2x5Z29uOjpnZXRPdXRz
aWRlSW50ZXJ2YWxzKGZsb2F0IHkxLCBmbG9hdCB5MiwgVmVjdG9yPFhTSW50ZXJ2YWw+JiBydikg
Y29uc3QKK3sKKyAgICBpZiAoeTEgPiB5MikKKyAgICAgICAgc3RkOjpzd2FwKHkxLCB5Mik7Cisg
ICAgCisgICAgVmVjdG9yPFhTSW50ZXJ2YWw+IHYxLCB2MjsKKyAgICBjb21wdXRlWEludGVyc2Vj
dGlvbnMoeTEsIHYxKTsKKyAgICBjb21wdXRlWEludGVyc2VjdGlvbnMoeTIsIHYyKTsKKyAgICAK
KyAgICBWZWN0b3I8WFNJbnRlcnZhbD4gbWVyZ2VkSW50ZXJ2YWxzOworICAgIG1lcmdlWFNJbnRl
cnZhbHModjEsIHYyLCBtZXJnZWRJbnRlcnZhbHMpOworICAgIAorICAgIFZlY3RvcjxYU0ludGVy
dmFsPiBlZGdlSW50ZXJ2YWxzOworICAgIGNvbXB1dGVFZGdlSW50ZXJzZWN0aW9ucyh5MSwgeTIs
IGVkZ2VJbnRlcnZhbHMpOworICAgIG1lcmdlWFNJbnRlcnZhbHMobWVyZ2VkSW50ZXJ2YWxzLCBl
ZGdlSW50ZXJ2YWxzLCBydik7Cit9CisKK3ZvaWQgWFNQb2x5Z29uOjpnZXRJbnNpZGVJbnRlcnZh
bHMoZmxvYXQgeTEsIGZsb2F0IHkyLCBWZWN0b3I8WFNJbnRlcnZhbD4mIHJ2KSBjb25zdAorewor
ICAgIGlmICh5MSA+IHkyKQorICAgICAgICBzdGQ6OnN3YXAoeTEsIHkyKTsKKyAgICAKKyAgICBW
ZWN0b3I8WFNJbnRlcnZhbD4gdjEsIHYyOworICAgIGNvbXB1dGVYSW50ZXJzZWN0aW9ucyh5MSwg
djEpOworICAgIGNvbXB1dGVYSW50ZXJzZWN0aW9ucyh5MiwgdjIpOworICAgIAorICAgIFZlY3Rv
cjxYU0ludGVydmFsPiBjb21tb25JbnRlcnZhbHM7CisgICAgaW50ZXJzZWN0WFNJbnRlcnZhbHMo
djEsIHYyLCBjb21tb25JbnRlcnZhbHMpOworICAgIAorICAgIFZlY3RvcjxYU0ludGVydmFsPiBl
ZGdlSW50ZXJ2YWxzOworICAgIGNvbXB1dGVFZGdlSW50ZXJzZWN0aW9ucyh5MSwgeTIsIGVkZ2VJ
bnRlcnZhbHMpOworICAgIHN1YnRyYWN0WFNJbnRlcnZhbHMoY29tbW9uSW50ZXJ2YWxzLCBlZGdl
SW50ZXJ2YWxzLCBydik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvWFNQb2x5Z29uLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9YU1BvbHlnb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNDJhMjk5
MTE1Y2FiMmQ2N2EwNjc3N2M3MGYyMWM0ODNjMGNiNDUyCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvWFNQb2x5Z29uLmgKQEAgLTAsMCArMSwxMzUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAg
ICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlS
SUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAq
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAq
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFhTUG9seWdvbl9oCisjZGVmaW5lIFhTUG9seWdvbl9oCisKKyNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJXaW5kUnVsZS5oIgorI2luY2x1ZGUgIlhT
aGFwZS5oIgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL093blB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBYU0VkZ2U7CitzdHJ1Y3QgWFNFZGdl
VHJlZTsKKworY2xhc3MgWFNQb2x5Z29uIDogcHVibGljIFhTaGFwZSB7ICAgIAorcHVibGljOgor
ICAgIFhTUG9seWdvbihQYXNzT3duUHRyPFZlY3RvcjxmbG9hdD4gPiBjb29yZGluYXRlcywgV2lu
ZFJ1bGUgZmlsbFJ1bGUpOworCisgICAgZmxvYXQgZ2V0WEF0KHNpemVfdCBpKSBjb25zdCB7IHJl
dHVybiBtX2Nvb3JkaW5hdGVzLT5hdChpKjIpOyB9CisgICAgZmxvYXQgZ2V0WUF0KHNpemVfdCBp
KSBjb25zdCB7IHJldHVybiBtX2Nvb3JkaW5hdGVzLT5hdChpKjIgKyAxKTsgfQorICAgIHNpemVf
dCBudW1iZXJPZlZlcnRpY2VzKCkgY29uc3QgeyByZXR1cm4gbV9jb29yZGluYXRlcy0+c2l6ZSgp
IC8gMjsgfQorICAgIFdpbmRSdWxlIGZpbGxSdWxlKCkgY29uc3QgeyByZXR1cm4gbV9maWxsUnVs
ZTsgfQorCisgICAgdmlydHVhbCBGbG9hdFJlY3Qgc2hhcGVCb3VuZGluZ0JveCgpIGNvbnN0IHsg
cmV0dXJuIG1fYm91bmRpbmdCb3g7IH07CisgICAgdmlydHVhbCB2b2lkIGdldE91dHNpZGVJbnRl
cnZhbHMoZmxvYXQgeTEsIGZsb2F0IHkyLCBWZWN0b3I8WFNJbnRlcnZhbD4mKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHZvaWQgZ2V0SW5zaWRlSW50ZXJ2YWxzKGZsb2F0IHkxLCBmbG9hdCB5MiwgVmVj
dG9yPFhTSW50ZXJ2YWw+JikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZmxvYXQgcmlnaHRWZXJ0
ZXhZKHNpemVfdCkgY29uc3Q7CisgICAgdm9pZCBjb21wdXRlWEludGVyc2VjdGlvbnMoZmxvYXQg
eSwgVmVjdG9yPFhTSW50ZXJ2YWw+JikgY29uc3Q7IAorICAgIHZvaWQgY29tcHV0ZUVkZ2VJbnRl
cnNlY3Rpb25zKGZsb2F0IHlNaW4sIGZsb2F0IHlNYXgsIFZlY3RvcjxYU0ludGVydmFsPiYpIGNv
bnN0OyAKKworICAgIE93blB0cjxWZWN0b3I8ZmxvYXQ+ID4gbV9jb29yZGluYXRlczsKKyAgICBX
aW5kUnVsZSBtX2ZpbGxSdWxlOworICAgIEZsb2F0UmVjdCBtX2JvdW5kaW5nQm94OworICAgIFZl
Y3RvcjxYU0VkZ2U+IG1fZWRnZXM7CisgICAgT3duUHRyPFhTRWRnZVRyZWU+IG1fZWRnZVRyZWU7
Cit9OworCitzdHJ1Y3QgWFNFZGdlIHsKKyAgICBjb25zdCBYU1BvbHlnb24qIHBvbHlnb247Cisg
ICAgc2l6ZV90IGkxOworICAgIHNpemVfdCBpMjsKKyAgICAKKyAgICBYU0VkZ2UoKSAKKyAgICAg
ICAgOiBwb2x5Z29uKDApCisgICAgICAgICwgaTEoMCkKKyAgICAgICAgLCBpMigwKSAKKyAgICB7
IAorICAgIH0KKyAgICAKKyAgICBmbG9hdCB4MSgpIGNvbnN0IHsgcmV0dXJuIHBvbHlnb24tPmdl
dFhBdChpMSk7IH0KKyAgICBmbG9hdCB5MSgpIGNvbnN0IHsgcmV0dXJuIHBvbHlnb24tPmdldFlB
dChpMSk7IH0KKyAgICBmbG9hdCB4MigpIGNvbnN0IHsgcmV0dXJuIHBvbHlnb24tPmdldFhBdChp
Mik7IH0KKyAgICBmbG9hdCB5MigpIGNvbnN0IHsgcmV0dXJuIHBvbHlnb24tPmdldFlBdChpMik7
IH0KKworICAgIGZsb2F0IG1pblgoKSBjb25zdCB7IHJldHVybiBzdGQ6Om1pbih4MSgpLCB4Migp
KTsgfQorICAgIGZsb2F0IG1pblkoKSBjb25zdCB7IHJldHVybiBzdGQ6Om1pbih5MSgpLCB5Migp
KTsgfSAKKyAgICBmbG9hdCBtYXhYKCkgY29uc3QgeyByZXR1cm4gc3RkOjptYXgoeDEoKSwgeDIo
KSk7IH0KKyAgICBmbG9hdCBtYXhZKCkgY29uc3QgeyByZXR1cm4gc3RkOjptYXgoeTEoKSwgeTIo
KSk7IH0KK307CisKK3N0cnVjdCBYU0VkZ2VUcmVlIHsKK3ByaXZhdGU6CisgICAgLy8gRklYTUU6
IG1pblN1YnRyZWVTaXplIC0gZG9uJ3QgYm90aGVyIGNyZWF0aW5nIHN1YnRyZWVzIGZvciBsZXNz
IHRoYW4gTiBlZGdlcworICAgIGZsb2F0IGNlbnRlcjsKKyAgICBWZWN0b3I8WFNFZGdlKj4gb3Zl
cmxhcENlbnRlcjsgCisgICAgT3duUHRyPFhTRWRnZVRyZWU+IGFib3ZlQ2VudGVyOyAKKyAgICBP
d25QdHI8WFNFZGdlVHJlZT4gYmVsb3dDZW50ZXI7CisgICAgCisgICAgc3RhdGljIHZvaWQgaW5p
dEVkZ2VUcmVlKFhTRWRnZVRyZWUqLCBjb25zdCBWZWN0b3I8WFNFZGdlKj4mIHNvcnRlZEVkZ2Vz
KTsKKyAgICAKK3B1YmxpYzoKKyAgICBYU0VkZ2VUcmVlKGNvbnN0IFZlY3RvcjxYU0VkZ2UqPiYg
c29ydGVkRWRnZXMpOworCisgICAgdm9pZCBmaW5kRWRnZXNUaGF0T3ZlcmxhcFkoZmxvYXQgeSwg
VmVjdG9yPFhTRWRnZSo+JikgY29uc3Q7CisgICAgdm9pZCBmaW5kRWRnZXNUaGF0T3ZlcmxhcElu
dGVydmFsKGZsb2F0IG1pblksIGZsb2F0IG1heFksIFZlY3RvcjxYU0VkZ2UqPiYpIGNvbnN0Owor
fTsKKworZW51bSBYU0ludGVyc2VjdGlvblR5cGUgeworICAgIE5vcm1hbCA9IDAsCisgICAgVmVy
dGV4WU1pbiA9IDEsCisgICAgVmVydGV4WU1heCA9IDIsCisgICAgVmVydGV4WUJvdGggPSAzCit9
OworCitzdHJ1Y3QgWFNJbnRlcnNlY3Rpb24geworICAgIGNvbnN0IFhTRWRnZSogZWRnZTsKKyAg
ICBmbG9hdCB4OworICAgIGZsb2F0IHk7CisgICAgWFNJbnRlcnNlY3Rpb25UeXBlIHR5cGU7Cisg
ICAgCisgICAgWFNJbnRlcnNlY3Rpb24oKSAKKyAgICAgICAgOiBlZGdlKDApCisgICAgICAgICwg
eCgwKQorICAgICAgICAsIHkoMCkKKyAgICAgICAgLCB0eXBlKE5vcm1hbCkgCisgICAgeyAKKyAg
ICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBYU1BvbHlnb25f
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvWFNSZWN0YW5n
bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvWFNSZWN0YW5nbGUuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjZlZmZjOWNmMDdiM2I1MjNlMDZlMWQxYjQwYmUwZTA4NzNhMmZlMGMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9YU1JlY3Rh
bmdsZS5jcHAKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRv
YmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAg
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiWFNSZWN0YW5nbGUuaCIKKworI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisK
Ky8vIFNlZSBodHRwOi8vaGFuc211bGxlci13ZWJraXQuYmxvZ3Nwb3QuY29tLzIwMTIvMDcvY29t
cHV0aW5nLWhvcml6b25hbC1yb3VuZGVkLXJlY3RhbmdsZS5odG1sCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworc3RhdGljIGlubGluZSBmbG9hdCBlbGxpcHNlWEludGVyY2VwdChmbG9hdCB5LCBm
bG9hdCByeCwgZmxvYXQgcnkpIAoreworICAgIEFTU0VSVChyeSA+IDApOworICAgIHJldHVybiBy
eCAqIHNxcnQoMSAtICh5KnkpIC8gKHJ5KnJ5KSk7Cit9CisKK3ZvaWQgWFNSZWN0YW5nbGU6Omdl
dE91dHNpZGVJbnRlcnZhbHMoZmxvYXQgeTEsIGZsb2F0IHkyLCBWZWN0b3I8WFNJbnRlcnZhbD4m
IHJ2KSBjb25zdAoreworICAgIGlmICh5MSA+IHkyKQorICAgICAgICBzdGQ6OnN3YXAoeTEsIHky
KTsKKworICAgIGlmICh5MiA8IG1feSB8fCB5MSA+PSBtX3kgKyBtX2hlaWdodCkKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIGZsb2F0IHgxID0gbV94OworICAgIGZsb2F0IHgyID0gbV94ICsg
bV93aWR0aDsKKyAgICAKKyAgICBpZiAobV9yeSA+IDApIHsKKyAgICAgICAgaWYgKHkyIDwgbV95
ICsgbV9yeSkgeworICAgICAgICAgICAgZmxvYXQgeWkgPSB5MiAtIG1feSAtIG1fcnk7CisgICAg
ICAgICAgICBmbG9hdCB4aSA9IGVsbGlwc2VYSW50ZXJjZXB0KHlpLCBtX3J4LCBtX3J5KTsKKyAg
ICAgICAgICAgIHgxID0gbV94ICsgbV9yeCAtIHhpOworICAgICAgICAgICAgeDIgPSBtX3ggKyBt
X3dpZHRoIC0gbV9yeCArIHhpOworICAgICAgICB9IGVsc2UgaWYgKHkxID4gbV95ICsgbV9oZWln
aHQgLSBtX3J5KSB7CisgICAgICAgICAgICBmbG9hdCB5aSA9ICB5MSAtIChtX3kgKyBtX2hlaWdo
dCAtIG1fcnkpOworICAgICAgICAgICAgZmxvYXQgeGkgPSBlbGxpcHNlWEludGVyY2VwdCh5aSwg
bV9yeCwgbV9yeSk7CisgICAgICAgICAgICB4MSA9IG1feCArIG1fcnggLSB4aTsKKyAgICAgICAg
ICAgIHgyID0gbV94ICsgbV93aWR0aCAtIG1fcnggKyB4aTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICBydi5hcHBlbmQoWFNJbnRlcnZhbCh4MSwgeDIpKTsKK30KKwordm9pZCBYU1JlY3Rh
bmdsZTo6Z2V0SW5zaWRlSW50ZXJ2YWxzKGZsb2F0IHkxLCBmbG9hdCB5MiwgVmVjdG9yPFhTSW50
ZXJ2YWw+JiBydikgY29uc3QKK3sKKyAgICBpZiAoeTEgPiB5MikKKyAgICAgICAgc3RkOjpzd2Fw
KHkxLCB5Mik7CisKKyAgICBpZiAoeTEgPCBtX3kgfHwgeTIgPj0gbV95ICsgbV9oZWlnaHQpCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICBmbG9hdCB4MSA9IG1feDsKKyAgICBmbG9hdCB4MiA9
IG1feCArIG1fd2lkdGg7CisgICAgCisgICAgaWYgKG1fcnkgPiAwKSB7CisgICAgICAgIGJvb2wg
eTFJbnRlcmNlcHRzQ29ybmVyID0geTEgPCBtX3kgKyBtX3J5OworICAgICAgICBib29sIHkySW50
ZXJjZXB0c0Nvcm5lciA9IHkyID4gbV95ICsgbV9oZWlnaHQgLSBtX3J5OworICAgICAgICBmbG9h
dCB4aTsKKworICAgICAgICBpZiAoeTFJbnRlcmNlcHRzQ29ybmVyICYmIHkySW50ZXJjZXB0c0Nv
cm5lcikgeworICAgICAgICAgICAgaWYgICh5MSA8IG1faGVpZ2h0ICsgMiptX3kgLSB5MikgeyAK
KyAgICAgICAgICAgICAgICBmbG9hdCB5aSA9IHkxIC0gbV95IC0gbV9yeTsKKyAgICAgICAgICAg
ICAgICB4aSA9IGVsbGlwc2VYSW50ZXJjZXB0KHlpLCBtX3J4LCBtX3J5KTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZmxvYXQgeWkgPSAgeTIgLSAobV95ICsgbV9oZWln
aHQgLSBtX3J5KTsKKyAgICAgICAgICAgICAgICB4aSA9IGVsbGlwc2VYSW50ZXJjZXB0KHlpLCBt
X3J4LCBtX3J5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICh5MUludGVyY2Vw
dHNDb3JuZXIpIHsKKyAgICAgICAgICAgIGZsb2F0IHlpID0geTEgLSBtX3kgLSBtX3J5OworICAg
ICAgICAgICAgeGkgPSBlbGxpcHNlWEludGVyY2VwdCh5aSwgbV9yeCwgbV9yeSk7CisgICAgICAg
IH0gZWxzZSBpZiAoeTJJbnRlcmNlcHRzQ29ybmVyKSB7CisgICAgICAgICAgICBmbG9hdCB5aSA9
ICB5MiAtIChtX3kgKyBtX2hlaWdodCAtIG1fcnkpOworICAgICAgICAgICAgeGkgPSBlbGxpcHNl
WEludGVyY2VwdCh5aSwgbV9yeCwgbV9yeSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoeTFJ
bnRlcmNlcHRzQ29ybmVyIHx8IHkySW50ZXJjZXB0c0Nvcm5lcikgeworICAgICAgICAgICAgeDEg
PSBtX3ggKyBtX3J4IC0geGk7CisgICAgICAgICAgICB4MiA9IG1feCArIG1fd2lkdGggLSBtX3J4
ICsgeGk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcnYuYXBwZW5kKFhTSW50ZXJ2YWwo
eDEsIHgyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvWFNSZWN0YW5nbGUuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1hTUmVjdGFuZ2xlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2JlNWYwOGY5
ZjE0NjI3ODE0ZmY2NjU3M2UxNDU3OGFiYzgwNWUzYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1hTUmVjdGFuZ2xlLmgKQEAgLTAsMCArMSw2NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAg
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMKKyAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJ
R0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICog
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICog
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgWFNSZWN0YW5nbGVfaAorI2RlZmluZSBYU1JlY3RhbmdsZV9oCisK
KyNpbmNsdWRlICJYU2hhcGUuaCIKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBYU1JlY3Rh
bmdsZSA6IHB1YmxpYyBYU2hhcGUgeworcHVibGljOgorICAgIFhTUmVjdGFuZ2xlKGZsb2F0IHgs
IGZsb2F0IHksIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IHJ4ID0gMCwgZmxvYXQg
cnkgPSAwKSAKKyAgICAgICAgOiBYU2hhcGUoKQorICAgICAgICAsIG1feCh4KQorICAgICAgICAs
IG1feSh5KQorICAgICAgICAsIG1fd2lkdGgod2lkdGgpCisgICAgICAgICwgbV9oZWlnaHQoaGVp
Z2h0KQorICAgICAgICAsIG1fcngocngpCisgICAgICAgICwgbV9yeShyeSkgCisgICAgeworICAg
IH0KKyAgICAKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzaGFwZUJvdW5kaW5nQm94KCkgY29uc3Qg
eyByZXR1cm4gRmxvYXRSZWN0KG1feCwgbV95LCBtX3dpZHRoLCBtX2hlaWdodCk7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgZ2V0T3V0c2lkZUludGVydmFscyhmbG9hdCB5MSwgZmxvYXQgeTIsIFZlY3Rv
cjxYU0ludGVydmFsPiYpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBnZXRJbnNpZGVJbnRlcnZh
bHMoZmxvYXQgeTEsIGZsb2F0IHkyLCBWZWN0b3I8WFNJbnRlcnZhbD4mKSBjb25zdDsKKworcHJp
dmF0ZToKKyAgICBmbG9hdCBtX3g7CisgICAgZmxvYXQgbV95OworICAgIGZsb2F0IG1fd2lkdGg7
CisgICAgZmxvYXQgbV9oZWlnaHQ7CisgICAgZmxvYXQgbV9yeDsKKyAgICBmbG9hdCBtX3J5Owor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gWFNSZWN0YW5nbGVfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvWFNoYXBlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1hTaGFwZS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
N2FkODE4NjI5MjA5ZWJlYmZhZjljYjEzMTdiNmViZTZiMzdhYmQwMAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1hTaGFwZS5jcHAKQEAgLTAsMCAr
MSwxMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBv
cmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAq
IENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiWFNoYXBlLmgi
CisKKyNpbmNsdWRlICJCYXNpY1NoYXBlRnVuY3Rpb25zLmgiCisjaW5jbHVkZSAiTGVuZ3RoRnVu
Y3Rpb25zLmgiCisjaW5jbHVkZSAiV2luZFJ1bGUuaCIKKyNpbmNsdWRlICJYU1BvbHlnb24uaCIK
KyNpbmNsdWRlICJYU1JlY3RhbmdsZS5oIgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Cisj
aW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFBhc3NPd25QdHI8WFNoYXBlPiBjcmVhdGVYU1Jl
Y3RhbmdsZShmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9h
dCByeCwgZmxvYXQgcnkpIAoreworICAgIEFTU0VSVCh3aWR0aCA+PSAwICYmIGhlaWdodCA+PSAw
ICYmIHJ4ID49IDAgJiYgcnkgPj0gMCk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBYU1JlY3Rh
bmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCByeCwgcnkpKTsKK30KKworc3RhdGljIFBhc3NPd25Q
dHI8WFNoYXBlPiBjcmVhdGVYU0NpcmNsZShmbG9hdCBjeCwgZmxvYXQgY3ksIGZsb2F0IHJhZGl1
cykgCit7CisgICAgQVNTRVJUKHJhZGl1cyA+PSAwKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3
IFhTUmVjdGFuZ2xlKGN4IC0gcmFkaXVzLCBjeSAtIHJhZGl1cywgY3ggKyByYWRpdXMsIGN5ICsg
cmFkaXVzLCByYWRpdXMsIHJhZGl1cykpOworfQorCitzdGF0aWMgUGFzc093blB0cjxYU2hhcGU+
IGNyZWF0ZVhTRWxsaXBzZShmbG9hdCBjeCwgZmxvYXQgY3ksIGZsb2F0IHJ4LCBmbG9hdCByeSkg
Cit7CisgICAgQVNTRVJUKHJ4ID49IDAgJiYgcnkgPj0gMCk7CisgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBYU1JlY3RhbmdsZShjeCAtIHJ4LCBjeSAtIHJ5LCBjeCArIHJ4LCBjeSArIHJ5LCByeCwg
cnkpKTsKK30KKworc3RhdGljIFBhc3NPd25QdHI8WFNoYXBlPiBjcmVhdGVYU1BvbHlnb24oUGFz
c093blB0cjxWZWN0b3I8ZmxvYXQ+ID4gY29vcmRpbmF0ZXMsIFdpbmRSdWxlIGZpbGxSdWxlKQor
eworICAgIHJldHVybiBhZG9wdFB0cihuZXcgWFNQb2x5Z29uKGNvb3JkaW5hdGVzLCBmaWxsUnVs
ZSkpOworfQorCitQYXNzT3duUHRyPFhTaGFwZT4gWFNoYXBlOjpjcmVhdGVYU2hhcGUoY29uc3Qg
QmFzaWNTaGFwZSogd3JhcFNoYXBlLCBmbG9hdCBib3hXaWR0aCwgZmxvYXQgYm94SGVpZ2h0KQor
eworICAgIGlmICghd3JhcFNoYXBlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHN3
aXRjaCAod3JhcFNoYXBlLT50eXBlKCkpIHsKKyAgICBjYXNlIEJhc2ljU2hhcGU6OkJBU0lDX1NI
QVBFX1JFQ1RBTkdMRTogeworICAgICAgICBjb25zdCBCYXNpY1NoYXBlUmVjdGFuZ2xlKiByZWN0
YW5nbGUgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY1NoYXBlUmVjdGFuZ2xlKj4od3JhcFNoYXBl
KTsKKyAgICAgICAgTGVuZ3RoIHJ4ID0gcmVjdGFuZ2xlLT5jb3JuZXJSYWRpdXNYKCk7CisgICAg
ICAgIExlbmd0aCByeSA9IHJlY3RhbmdsZS0+Y29ybmVyUmFkaXVzWSgpOworICAgICAgICByZXR1
cm4gY3JlYXRlWFNSZWN0YW5nbGUoCisgICAgICAgICAgICBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJl
Y3RhbmdsZS0+eCgpLCBib3hXaWR0aCksCisgICAgICAgICAgICBmbG9hdFZhbHVlRm9yTGVuZ3Ro
KHJlY3RhbmdsZS0+eSgpLCBib3hIZWlnaHQpLAorICAgICAgICAgICAgZmxvYXRWYWx1ZUZvckxl
bmd0aChyZWN0YW5nbGUtPndpZHRoKCksIGJveFdpZHRoKSwKKyAgICAgICAgICAgIGZsb2F0VmFs
dWVGb3JMZW5ndGgocmVjdGFuZ2xlLT5oZWlnaHQoKSwgYm94SGVpZ2h0KSwKKyAgICAgICAgICAg
IHJ4LmlzVW5kZWZpbmVkKCkgPyAwIDogZmxvYXRWYWx1ZUZvckxlbmd0aChyeCwgYm94V2lkdGgp
LAorICAgICAgICAgICAgcnkuaXNVbmRlZmluZWQoKSA/IDAgOiBmbG9hdFZhbHVlRm9yTGVuZ3Ro
KHJ5LCBib3hIZWlnaHQpICk7CisgICAgfQorCisgICAgY2FzZSBCYXNpY1NoYXBlOjpCQVNJQ19T
SEFQRV9DSVJDTEU6IHsKKyAgICAgICAgY29uc3QgQmFzaWNTaGFwZUNpcmNsZSogY2lyY2xlID0g
c3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNTaGFwZUNpcmNsZSo+KHdyYXBTaGFwZSk7CisgICAgICAg
IHJldHVybiBjcmVhdGVYU0NpcmNsZSgKKyAgICAgICAgICAgIGZsb2F0VmFsdWVGb3JMZW5ndGgo
Y2lyY2xlLT5jZW50ZXJYKCksIGJveFdpZHRoKSwKKyAgICAgICAgICAgIGZsb2F0VmFsdWVGb3JM
ZW5ndGgoY2lyY2xlLT5jZW50ZXJZKCksIGJveEhlaWdodCksCisgICAgICAgICAgICBmbG9hdFZh
bHVlRm9yTGVuZ3RoKGNpcmNsZS0+cmFkaXVzKCksIHN0ZDo6bWF4KGJveEhlaWdodCwgYm94V2lk
dGgpKSApOworICAgIH0KKworICAgIGNhc2UgQmFzaWNTaGFwZTo6QkFTSUNfU0hBUEVfRUxMSVBT
RTogeworICAgICAgICBjb25zdCBCYXNpY1NoYXBlRWxsaXBzZSogZWxsaXBzZSA9IHN0YXRpY19j
YXN0PGNvbnN0IEJhc2ljU2hhcGVFbGxpcHNlKj4od3JhcFNoYXBlKTsKKyAgICAgICAgcmV0dXJu
IGNyZWF0ZVhTRWxsaXBzZSgKKyAgICAgICAgICAgIGZsb2F0VmFsdWVGb3JMZW5ndGgoZWxsaXBz
ZS0+Y2VudGVyWCgpLCBib3hXaWR0aCksCisgICAgICAgICAgICBmbG9hdFZhbHVlRm9yTGVuZ3Ro
KGVsbGlwc2UtPmNlbnRlclkoKSwgYm94SGVpZ2h0KSwKKyAgICAgICAgICAgIGZsb2F0VmFsdWVG
b3JMZW5ndGgoZWxsaXBzZS0+cmFkaXVzWCgpLCBib3hXaWR0aCksCisgICAgICAgICAgICBmbG9h
dFZhbHVlRm9yTGVuZ3RoKGVsbGlwc2UtPnJhZGl1c1koKSwgYm94SGVpZ2h0KSApOworICAgIH0K
KworICAgIGNhc2UgQmFzaWNTaGFwZTo6QkFTSUNfU0hBUEVfUE9MWUdPTjogeworICAgICAgICBj
b25zdCBCYXNpY1NoYXBlUG9seWdvbiogcG9seWdvbiA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2lj
U2hhcGVQb2x5Z29uKj4od3JhcFNoYXBlKTsKKyAgICAgICAgY29uc3QgVmVjdG9yPExlbmd0aD4m
IHZhbHVlcyA9IHBvbHlnb24tPnZhbHVlcygpOworICAgICAgICBzaXplX3QgdmFsdWVzU2l6ZSA9
IHZhbHVlcy5zaXplKCk7CisgICAgICAgIFZlY3RvcjxmbG9hdD4gKmN2ID0gbmV3IFZlY3Rvcjxm
bG9hdD4odmFsdWVzU2l6ZSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1
ZXNTaXplOyBpICs9IDIpIHsKKyAgICAgICAgICAgIGN2LT5hdChpKSA9IGZsb2F0VmFsdWVGb3JM
ZW5ndGgodmFsdWVzLmF0KGkpLCBib3hXaWR0aCk7CisgICAgICAgICAgICBjdi0+YXQoaSsxKSA9
IGZsb2F0VmFsdWVGb3JMZW5ndGgodmFsdWVzLmF0KGkrMSksIGJveEhlaWdodCk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIGNyZWF0ZVhTUG9seWdvbihhZG9wdFB0cihjdiksIHBvbHlnb24t
PndpbmRSdWxlKCkpOworICAgIH0KKworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4g
bnVsbHB0cjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvWFNoYXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9YU2hhcGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YTRkMGYzZjU5NzdlNTU1Y2E5ODJh
ZTk2NGI4ZDE3NTQxMWFjZTkxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvWFNoYXBlLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisg
KiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFp
bWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIEhPTERFUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
WFNoYXBlX2gKKyNkZWZpbmUgWFNoYXBlX2gKKworI2luY2x1ZGUgIkJhc2ljU2hhcGVzLmgiCisj
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiWFNJbnRlcnZhbC5oIgorI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIFhTaGFwZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25Q
dHI8WFNoYXBlPiBjcmVhdGVYU2hhcGUoY29uc3QgQmFzaWNTaGFwZSosIGZsb2F0IGJvcmRlckJv
eFdpZHRoLCBmbG9hdCBib3JkZXJCb3hIZWlnaHQpOworCisgICAgdmlydHVhbCB+WFNoYXBlKCkg
eyB9CisKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzaGFwZUJvdW5kaW5nQm94KCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBnZXRJbnNpZGVJbnRlcnZhbHMoZmxvYXQgeU1pbiwgZmxvYXQg
eU1heCwgVmVjdG9yPFhTSW50ZXJ2YWw+JikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBn
ZXRPdXRzaWRlSW50ZXJ2YWxzKGZsb2F0IHlNaW4sIGZsb2F0IHlNYXgsIFZlY3RvcjxYU0ludGVy
dmFsPiYpIGNvbnN0ID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIFhTaGFwZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2tMaW5lTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
a0xpbmVMYXlvdXQuY3BwCmluZGV4IDhiOTYwZjA1OTFiMDUxZjc0MjhiYzM3ZTIwMjdjZjY5ZTJi
MTkxOGQuLjJmYmRlZTZiM2FlOTBlZGUyZTFhOWVmNzQ1MWIxOTk3YTdjYjRmMzUgMTAwNzU1Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCkBA
IC0xMzIyLDggKzEzMjIsMTEgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UnVuc0FuZEZsb2F0
c0luUmFuZ2UoTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgSW5saW4KICNpZiBFTkFCTEUo
Q1NTX0VYQ0xVU0lPTlMpCiAgICAgICAgIC8vIEZJWE1FOiBCdWcgODk5OTM6IElmIHRoZSB3cmFw
IHNoYXBlIGNvbWVzIGZyb20gYSBwYXJlbnQsIHdlIHdpbGwgbmVlZCB0byBhZGp1c3QKICAgICAg
ICAgLy8gdGhlIGhlaWdodCBjb29yZGluYXRlCi0gICAgICAgIGlmICh3cmFwU2hhcGVJbmZvKQot
ICAgICAgICAgICAgd3JhcFNoYXBlSW5mby0+Y29tcHV0ZVNlZ21lbnRzRm9yTGluZShsb2dpY2Fs
SGVpZ2h0KCkpOworICAgICAgICBpZiAod3JhcFNoYXBlSW5mbykgeworICAgICAgICAgICAgTGF5
b3V0VW5pdCBsaW5lVG9wID0gbG9naWNhbEhlaWdodCgpOworICAgICAgICAgICAgTGF5b3V0VW5p
dCBsaW5lQm90dG9tID0gbGluZVRvcCArIGxpbmVIZWlnaHQodHJ1ZSwgaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSA/IEhvcml6b250YWxMaW5lIDogVmVydGljYWxMaW5lLCBQb3NpdGlvbk9mSW50
ZXJpb3JMaW5lQm94ZXMpOworICAgICAgICAgICAgd3JhcFNoYXBlSW5mby0+Y29tcHV0ZVNlZ21l
bnRzRm9yTGluZShsaW5lVG9wLCBsaW5lQm90dG9tKTsKKyAgICAgICAgfQogI2VuZGlmCiAgICAg
ICAgIGVuZCA9IGxpbmVCcmVha2VyLm5leHRMaW5lQnJlYWsocmVzb2x2ZXIsIGxheW91dFN0YXRl
LmxpbmVJbmZvKCksIHJlbmRlclRleHRJbmZvLCBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lLCBj
b25zZWN1dGl2ZUh5cGhlbmF0ZWRMaW5lcyk7CiAgICAgICAgIGlmIChyZXNvbHZlci5wb3NpdGlv
bigpLmF0RW5kKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9XcmFw
U2hhcGVJbmZvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9XcmFwU2hhcGVJbmZvLmNw
cAppbmRleCA4ZWY3M2M3ZmNjMjM3NTI2ZTVhOWQzMmJlOWM4ZmQ5YzRkM2RiZDc1Li42ZjBlMzlj
MTYzMjU2MWNjNmVkOTAxZjYzODY5YTkyYjQ3MWQzZTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvV3JhcFNoYXBlSW5mby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1dyYXBTaGFwZUluZm8uY3BwCkBAIC0xMDUsMzcgKzEwNSwyOSBAQCB2b2lkIFdyYXBT
aGFwZUluZm86OmNvbXB1dGVTaGFwZVNpemUoTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgsIExheW91
dFVuaXQgbG9naWNhbAogCiAgICAgLy8gRklYTUU6IEJ1ZyA4OTk5MzogVGhlIHdyYXAgc2hhcGUg
bWF5IGNvbWUgZnJvbSB0aGUgcGFyZW50IG9iamVjdAogICAgIEJhc2ljU2hhcGUqIHNoYXBlID0g
bV9ibG9jay0+c3R5bGUoKS0+d3JhcFNoYXBlSW5zaWRlKCk7Ci0KICAgICBBU1NFUlQoc2hhcGUp
OwogCi0gICAgc3dpdGNoIChzaGFwZS0+dHlwZSgpKSB7Ci0gICAgY2FzZSBCYXNpY1NoYXBlOjpC
QVNJQ19TSEFQRV9SRUNUQU5HTEU6IHsKLSAgICAgICAgQmFzaWNTaGFwZVJlY3RhbmdsZSogcmVj
dCA9IHN0YXRpY19jYXN0PEJhc2ljU2hhcGVSZWN0YW5nbGUgKj4oc2hhcGUpOwotICAgICAgICBt
X3NoYXBlTGVmdCA9IHZhbHVlRm9yTGVuZ3RoKHJlY3QtPngoKSwgbV9sb2dpY2FsV2lkdGgpOwot
ICAgICAgICBtX3NoYXBlV2lkdGggPSB2YWx1ZUZvckxlbmd0aChyZWN0LT53aWR0aCgpLCBtX2xv
Z2ljYWxXaWR0aCk7Ci0gICAgICAgIG1fc2hhcGVUb3AgPSB2YWx1ZUZvckxlbmd0aChyZWN0LT55
KCksIG1fbG9naWNhbEhlaWdodCk7Ci0gICAgICAgIG1fc2hhcGVIZWlnaHQgPSB2YWx1ZUZvckxl
bmd0aChyZWN0LT5oZWlnaHQoKSwgbV9sb2dpY2FsSGVpZ2h0KTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIC8vIEZJWE1FOiBCdWcgODk3MDc6IEVuYWJsZSBzaGFwZSBpbnNpZGUgZm9yIG5v
bi1yZWN0YW5ndWxhciBzaGFwZXMKLSAgICBjYXNlIEJhc2ljU2hhcGU6OkJBU0lDX1NIQVBFX0NJ
UkNMRToKLSAgICBjYXNlIEJhc2ljU2hhcGU6OkJBU0lDX1NIQVBFX0VMTElQU0U6Ci0gICAgY2Fz
ZSBCYXNpY1NoYXBlOjpCQVNJQ19TSEFQRV9QT0xZR09OOiB7Ci0gICAgICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICB9CisgICAgbV94c2hhcGUgPSBYU2hh
cGU6OmNyZWF0ZVhTaGFwZShzaGFwZSwgbG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KTsKKyAg
ICBBU1NFUlQobV94c2hhcGUpOwogfQogCi1ib29sIFdyYXBTaGFwZUluZm86OmNvbXB1dGVTZWdt
ZW50c0ZvckxpbmUoTGF5b3V0VW5pdCBsaW5lVG9wKQorYm9vbCBXcmFwU2hhcGVJbmZvOjpjb21w
dXRlU2VnbWVudHNGb3JMaW5lKExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90
dG9tKQogewogICAgIG1fbGluZVRvcCA9IGxpbmVUb3A7CiAgICAgbV9zZWdtZW50cy5jbGVhcigp
OworCiAgICAgaWYgKGxpbmVTdGF0ZSgpID09IExJTkVfSU5TSURFX1NIQVBFKSB7Ci0gICAgICAg
IExpbmVTZWdtZW50IHNlZ21lbnQ7Ci0gICAgICAgIHNlZ21lbnQubG9naWNhbExlZnQgPSBtX3No
YXBlTGVmdDsKLSAgICAgICAgc2VnbWVudC5sb2dpY2FsUmlnaHQgPSBtX3NoYXBlTGVmdCArIG1f
c2hhcGVXaWR0aDsKLSAgICAgICAgbV9zZWdtZW50cy5hcHBlbmQoc2VnbWVudCk7CisgICAgICAg
IEFTU0VSVChtX3hzaGFwZSk7CisKKyAgICAgICAgbGluZUJvdHRvbSA9IGxpbmVUb3A7IC8vIEZJ
WE1FOiBCdWcgOTU0NzksIHdvcmthcm91bmQgZm9yIG5vdworICAgICAgICBWZWN0b3I8WFNJbnRl
cnZhbD4gaW50ZXJ2YWxzOworICAgICAgICBtX3hzaGFwZS0+Z2V0SW5zaWRlSW50ZXJ2YWxzKGxp
bmVUb3AsIGxpbmVCb3R0b20sIGludGVydmFscyk7ICAKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBpbnRlcnZhbHMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIExpbmVTZWdtZW50
IHNlZ21lbnQ7CisgICAgICAgICAgICBzZWdtZW50LmxvZ2ljYWxMZWZ0ID0gaW50ZXJ2YWxzW2ld
LngxOworICAgICAgICAgICAgc2VnbWVudC5sb2dpY2FsUmlnaHQgPSBpbnRlcnZhbHNbaV0ueDI7
CisgICAgICAgICAgICBtX3NlZ21lbnRzLmFwcGVuZChzZWdtZW50KTsKKyAgICAgICAgfQogICAg
IH0KICAgICByZXR1cm4gbV9zZWdtZW50cy5zaXplKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvV3JhcFNoYXBlSW5mby5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1dyYXBTaGFwZUluZm8uaAppbmRleCBhODAzNmQwYmI4Yzk0MGQzOWFlODJiZmU4NTZkYzk3
Y2Y0N2Q3YThkLi44OGZkNTJmZjY1OGUwNjExNDQ0YmMwN2I3MDlmOWVjNDE0ZTc4YWExIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvV3JhcFNoYXBlSW5mby5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9XcmFwU2hhcGVJbmZvLmgKQEAgLTMyLDcgKzMyLDEwIEBA
CiAKICNpZiBFTkFCTEUoQ1NTX0VYQ0xVU0lPTlMpCiAKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
ICNpbmNsdWRlICJMYXlvdXRUeXBlc0lubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJYU2hhcGUu
aCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4K
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTY0LDE0ICs2NywxOCBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIHZvaWQgcmVtb3ZlV3JhcFNoYXBlSW5mb0ZvclJlbmRlckJsb2NrKGNvbnN0IFJl
bmRlckJsb2NrKik7CiAgICAgc3RhdGljIGJvb2wgaXNXcmFwU2hhcGVJbmZvRW5hYmxlZEZvclJl
bmRlckJsb2NrKGNvbnN0IFJlbmRlckJsb2NrKik7CiAKLSAgICBMYXlvdXRVbml0IHNoYXBlVG9w
KCkgY29uc3QgeyByZXR1cm4gbV9zaGFwZVRvcDsgfQorICAgIExheW91dFVuaXQgc2hhcGVUb3Ao
KSBjb25zdCAKKyAgICB7IAorICAgICAgICBBU1NFUlQobV94c2hhcGUpOworICAgICAgICByZXR1
cm4gbV94c2hhcGUtPnNoYXBlQm91bmRpbmdCb3goKS55KCk7CisgICAgfQogICAgIGJvb2wgaGFz
U2VnbWVudHMoKSBjb25zdDsKICAgICBjb25zdCBTZWdtZW50TGlzdCYgc2VnbWVudHMoKSBjb25z
dAogICAgIHsKICAgICAgICAgQVNTRVJUKGhhc1NlZ21lbnRzKCkpOwogICAgICAgICByZXR1cm4g
bV9zZWdtZW50czsKICAgICB9Ci0gICAgYm9vbCBjb21wdXRlU2VnbWVudHNGb3JMaW5lKExheW91
dFVuaXQpOworICAgIGJvb2wgY29tcHV0ZVNlZ21lbnRzRm9yTGluZShMYXlvdXRVbml0IGxpbmVU
b3AsIExheW91dFVuaXQgbGluZUJvdHRvbSk7CiAgICAgTGluZVN0YXRlIGxpbmVTdGF0ZSgpIGNv
bnN0OwogICAgIHZvaWQgY29tcHV0ZVNoYXBlU2l6ZShMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCwg
TGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0KTsKICAgICB2b2lkIGRpcnR5V3JhcFNoYXBlU2l6ZSgp
IHsgbV93cmFwU2hhcGVTaXplRGlydHkgPSB0cnVlOyB9CkBAIC04MCwxMCArODcsNyBAQCBwcml2
YXRlOgogICAgIFdyYXBTaGFwZUluZm8oUmVuZGVyQmxvY2sqKTsKIAogICAgIFJlbmRlckJsb2Nr
KiBtX2Jsb2NrOwotICAgIExheW91dFVuaXQgbV9zaGFwZUxlZnQ7Ci0gICAgTGF5b3V0VW5pdCBt
X3NoYXBlVG9wOwotICAgIExheW91dFVuaXQgbV9zaGFwZVdpZHRoOwotICAgIExheW91dFVuaXQg
bV9zaGFwZUhlaWdodDsKKyAgICBPd25QdHI8WFNoYXBlPiBtX3hzaGFwZTsKIAogICAgIExheW91
dFVuaXQgbV9saW5lVG9wOwogICAgIExheW91dFVuaXQgbV9sb2dpY2FsV2lkdGg7CkBAIC05NSwx
MCArOTksMTUgQEAgcHJpdmF0ZToKIAogaW5saW5lIFdyYXBTaGFwZUluZm86OkxpbmVTdGF0ZSBX
cmFwU2hhcGVJbmZvOjpsaW5lU3RhdGUoKSBjb25zdAogewotICAgIGlmIChtX2xpbmVUb3AgPCBt
X3NoYXBlVG9wKQorICAgIEFTU0VSVChtX3hzaGFwZSk7CisgICAgRmxvYXRSZWN0IHNoYXBlQm91
bmRzID0gbV94c2hhcGUtPnNoYXBlQm91bmRpbmdCb3goKTsKKworICAgIGlmIChtX2xpbmVUb3Ag
PCBzaGFwZUJvdW5kcy55KCkpCiAgICAgICAgIHJldHVybiBMSU5FX0JFRk9SRV9TSEFQRTsKLSAg
ICBpZiAobV9saW5lVG9wIDwgbV9zaGFwZVRvcCArIG1fc2hhcGVIZWlnaHQpCisKKyAgICBpZiAo
bV9saW5lVG9wIDwgc2hhcGVCb3VuZHMubWF4WSgpKQogICAgICAgICByZXR1cm4gTElORV9JTlNJ
REVfU0hBUEU7CisKICAgICByZXR1cm4gTElORV9BRlRFUl9TSEFQRTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161726</attachid>
            <date>2012-08-31 10:25:39 -0700</date>
            <delta_ts>2012-08-31 12:06:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>tmp.patch</filename>
            <type>text/plain</type>
            <size>61709</size>
            <attacher name="Hans Muller">giles_joplin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggYjExM2IzZi4uZTM5YWJmMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTE4NjMsNiArMTg2MywxMCBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJh
Y2tpbmdTdG9yZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL1hTSW50ZXJ2YWwuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvWFNQb2x5Z29uLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1hTUmVjdGFuZ2xlLmNwcAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL1hTaGFwZS5jcHAKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvQ3VzdG9tRmlsdGVyQ29tcGlsZWRQcm9ncmFtLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dC5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRl
eCBkNWU5NmIxLi41YTJkMzIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIwIEBACisyMDEyLTA4
LTMxICBIYW5zIE11bGxlciAgPGhtdWxsZXJAYWRvYmUuY29tPgorCisgICAgICAgIFtDU1MgRXhs
dXNpb25zXSBhZGQgc3VwcG9ydCBmb3IgdGhlIGJhc2ljIHNoYXBlcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU0OTAKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbml0aWFsIGNvbW1pdCBvZiB0aGUgQ1NT
IEV4Y2x1c2lvbnMgU2hhcGVzIGNsYXNzZXMuIFRoZXkncmUgYmFzZWQgb24gdGhlICJCYXNpYyBT
aGFwZXMiIHNlY3Rpb24gb2YgdGhlCisgICAgICAgIENTUyBFeGNsdXNpb25zIHNwZWMgLSBodHRw
Oi8vZGV2LnczLm9yZy9jc3N3Zy9jc3MzLWV4Y2x1c2lvbnMvI2Jhc2ljLXNoYXBlcy1mcm9tLXN2
Zy1zeW50YXguCisKKyAgICAgICAgVGhpcyBzZXQgb2YgY2xhc3NlcyBlbmFibGVzIHRoZSBleGNs
dXNpb25zIGxheW91dCBjb2RlIHRvIGRldGVybWluZSBob3cgdG8gYnJlYWsgdXAgYSBsaW5lIGlu
dG8gc2VnZW1lbnRzCisgICAgICAgIHRoYXQgd2lsbCBmaXQgd2l0aGluIG9yIGFyb3VuZCBhIHNo
YXBlLCBnaXZlbiB0aGUgWSBjb29yZGluYXRlcyBvZiB0aGUgbGluZSdzIHRvcCBlZGdlIGFuZCBi
b3R0b20gZWRnZXMuCisgICAgICAgIFRoZSBYU2hhcGUgY2xhc3MgcmVwcmVzZW50cyBCYXNpY1No
YXBlcyB3aG9zZSBjb29yZGluYXRlcyBoYXZlIGJlZW4gcmVzb2x2ZWQgdG8gYWN0dWFsIHZhbHVl
cy4gSXQgcHJvdmlkZXMKKyAgICAgICAgYSBwYWlyIG9mIG1ldGhvZHMsIGdldEluc2lkZUludGVy
dmFscygpIGFuZCBnZXRPdXRzaWRlSW50ZXJ2YWxzKCksIHRoYXQgcmV0dXJuIHRoZSBsaW5lIHNl
Z21lbnRzJyBzdGFydAorICAgICAgICBhbmQgZW5kIFggY29vcmRpbmF0ZXMsIGFuZCBhIG1ldGhv
ZCB0aGF0IGNvbXB1dGVzIHRoZSBzaGFwZSdzIGJvdW5kaW5nIGJveC4gVGhlIGxpbmUgc2VnbWVu
dHMnIGNvb3JkaW5hdGVzCisgICAgICAgIGFyZSByZXByZXNlbnRlZCBieSBhIFZlY3RvciBvZiBY
U0ludGVydmFscy4gIFhTSW50ZXJ2YWwgaXMganVzdCBhIHBhaXIgb2YgWCBjb29yZGluYXRlcy4K
KworICAgICAgICBUaGUgb3RoZXIgY2xhc3NlcywgWFNSZWN0YW5nbGUgYW5kIFhTUG9seWdvbiBl
dCBhbCwgYXJlIGludGVybmFsIHRvIHRoZSBYU2hhcGUgaW1wbGVtZW50YXRpb24uCisKKyAgICAg
ICAgVGhpcyBpcyB0aGUgaW5pdGlhbCB2ZXJzaW9uIG9mIHRoZSBYU2hhcGVzIGNvZGUgYW5kIGl0
J3Mgb25seSBiZWluZyB1c2VkIHRvIHRoZSBsaW1pdGVkIGV4dGVudCBXZWJLaXQKKyAgICAgICAg
Y3VycmVudGx5IHN1cHBvcnRzIHNoYXBlLWluc2lkZSBleGNsdXNpb25zLiAgSXQgd2lsbCBiZSBl
eHRlbmRlZCB0byBzdXBwb3J0IGNvbXB1dGluZyBhIG1pbmltYWwKKyAgICAgICAgbGluZSBzZWdt
ZW50J3MgImZpcnN0IGxheW91dCBsb2NhdGlvbiIgYW5kIG90aGVyIGltcHJvdmVtZW50cywgaW4g
dGFuZGVtIHdpdGggdGhlIGV4Y2x1c2lvbnMgbGF5b3V0IGNvZGUuCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzIGhhdmUgYmVlbiBhZGRlZCBzaW5jZSB0aGlzIGNvZGUganVzdCByZXBsYWNlcyBhIHBy
b3Zpc2lvbmFsIGltcGxlbWVudGF0aW9uIHN0dWIuCisKKyAgICAgICAgTW9yZSBpbmZvcm1hdGlv
biBhYm91dCB0aGUgYWxnb3JpdGhtcyB1c2VkIGJ5IHRoZSBTaGFwZXMgbW9kdWxlIGNhbiBiZSBm
b3VuZCBoZXJlOiBodHRwOi8vaGFuc211bGxlci13ZWJraXQuYmxvZ3Nwb3QuY29tLgorCisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAg
ICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBX
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qLm9yaWc6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvai4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9YU0ludGVydmFs
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVy
dmFsWDFDb21wYXJhdG9yOjpvcGVyYXRvcigpKToKKyAgICAgICAgKFdlYkNvcmU6OlhTSW50ZXJ2
YWw6OmludGVyc2VjdCk6CisgICAgICAgIChXZWJDb3JlOjpzb3J0WFNJbnRlcnZhbHMpOgorICAg
ICAgICAoV2ViQ29yZTo6bWVyZ2VYU0ludGVydmFscyk6CisgICAgICAgIChXZWJDb3JlOjppbnRl
cnNlY3RYU0ludGVydmFscyk6CisgICAgICAgIChXZWJDb3JlOjpzdWJ0cmFjdFhTSW50ZXJ2YWxz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9YU0ludGVydmFsLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChYU0ludGVydmFsKToKKyAgICAgICAgKFdlYkNvcmU6
OlhTSW50ZXJ2YWw6OlhTSW50ZXJ2YWwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1hT
UG9seWdvbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpNYXhFZGdlWUNvbXBhcmF0b3I6Om9wZXJhdG9yKCkpOgorICAgICAgICAoTWF4RWRnZVlDb21w
YXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Ok1pbkVkZ2VZQ29tcGFyYXRvcjo6b3BlcmF0b3Io
KSk6CisgICAgICAgIChNaW5FZGdlWUNvbXBhcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW50
ZXJzZWN0aW9uWENvbXBhcmF0b3I6Om9wZXJhdG9yKCkpOgorICAgICAgICAoV2ViQ29yZTo6WFNF
ZGdlVHJlZTo6WFNFZGdlVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpYU0VkZ2VUcmVlOjppbml0
RWRnZVRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6WFNFZGdlVHJlZTo6ZmluZEVkZ2VzVGhhdE92
ZXJsYXBZKToKKyAgICAgICAgKFdlYkNvcmU6OlhTRWRnZVRyZWU6OmZpbmRFZGdlc1RoYXRPdmVy
bGFwSW50ZXJ2YWwpOgorICAgICAgICAoV2ViQ29yZTo6WFNQb2x5Z29uOjpYU1BvbHlnb24pOgor
ICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZVhJbnRlcnNlY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6WFNQb2x5Z29uOjpyaWdodFZlcnRleFkpOgorICAgICAgICAoV2ViQ29yZTo6YXBwZW5kSW50
ZXJ2YWxYKToKKyAgICAgICAgKFdlYkNvcmU6OlhTUG9seWdvbjo6Y29tcHV0ZVhJbnRlcnNlY3Rp
b25zKToKKyAgICAgICAgKFdlYkNvcmU6OlhTUG9seWdvbjo6Y29tcHV0ZUVkZ2VJbnRlcnNlY3Rp
b25zKToKKyAgICAgICAgKFdlYkNvcmU6OlhTUG9seWdvbjo6Z2V0T3V0c2lkZUludGVydmFscyk6
CisgICAgICAgIChXZWJDb3JlOjpYU1BvbHlnb246OmdldEluc2lkZUludGVydmFscyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvWFNQb2x5Z29uLmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChYU1BvbHlnb24pOgorICAgICAgICAoV2ViQ29yZTo6WFNQb2x5Z29u
OjpnZXRYQXQpOgorICAgICAgICAoV2ViQ29yZTo6WFNQb2x5Z29uOjpnZXRZQXQpOgorICAgICAg
ICAoV2ViQ29yZTo6WFNQb2x5Z29uOjpudW1iZXJPZlZlcnRpY2VzKToKKyAgICAgICAgKFdlYkNv
cmU6OlhTUG9seWdvbjo6ZmlsbFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6WFNQb2x5Z29uOjpz
aGFwZUJvdW5kaW5nQm94KToKKyAgICAgICAgKFhTRWRnZSk6CisgICAgICAgIChXZWJDb3JlOjpY
U0VkZ2U6OlhTRWRnZSk6CisgICAgICAgIChXZWJDb3JlOjpYU0VkZ2U6OngxKToKKyAgICAgICAg
KFdlYkNvcmU6OlhTRWRnZTo6eTEpOgorICAgICAgICAoV2ViQ29yZTo6WFNFZGdlOjp4Mik6Cisg
ICAgICAgIChXZWJDb3JlOjpYU0VkZ2U6OnkyKToKKyAgICAgICAgKFdlYkNvcmU6OlhTRWRnZTo6
bWluWCk6CisgICAgICAgIChXZWJDb3JlOjpYU0VkZ2U6Om1pblkpOgorICAgICAgICAoV2ViQ29y
ZTo6WFNFZGdlOjptYXhYKToKKyAgICAgICAgKFdlYkNvcmU6OlhTRWRnZTo6bWF4WSk6CisgICAg
ICAgIChYU0VkZ2VUcmVlKToKKyAgICAgICAgKFhTSW50ZXJzZWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlhTSW50ZXJzZWN0aW9uOjpYU0ludGVyc2VjdGlvbik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvWFNSZWN0YW5nbGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6ZWxsaXBzZVhJbnRlcmNlcHQpOgorICAgICAgICAoV2ViQ29yZTo6
WFNSZWN0YW5nbGU6OmdldE91dHNpZGVJbnRlcnZhbHMpOgorICAgICAgICAoV2ViQ29yZTo6WFNS
ZWN0YW5nbGU6OmdldEluc2lkZUludGVydmFscyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvWFNSZWN0YW5nbGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFhT
UmVjdGFuZ2xlKToKKyAgICAgICAgKFdlYkNvcmU6OlhTUmVjdGFuZ2xlOjpYU1JlY3RhbmdsZSk6
CisgICAgICAgIChXZWJDb3JlOjpYU1JlY3RhbmdsZTo6c2hhcGVCb3VuZGluZ0JveCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvWFNoYXBlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVhTUmVjdGFuZ2xlKToKKyAgICAgICAgKFdl
YkNvcmU6OmNyZWF0ZVhTQ2lyY2xlKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVhTRWxsaXBz
ZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVYU1BvbHlnb24pOgorICAgICAgICAoV2ViQ29y
ZTo6WFNoYXBlOjpjcmVhdGVYU2hhcGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1hT
aGFwZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoWFNoYXBlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlhTaGFwZTo6flhTaGFwZSk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckJsb2NrTGluZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6
bGF5b3V0UnVuc0FuZEZsb2F0c0luUmFuZ2UpOgorICAgICAgICAqIHJlbmRlcmluZy9XcmFwU2hh
cGVJbmZvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldyYXBTaGFwZUluZm86OmNvbXB1dGVTaGFw
ZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6V3JhcFNoYXBlSW5mbzo6Y29tcHV0ZVNlZ21lbnRz
Rm9yTGluZSk6CisgICAgICAgICogcmVuZGVyaW5nL1dyYXBTaGFwZUluZm8uaDoKKyAgICAgICAg
KFdlYkNvcmU6OldyYXBTaGFwZUluZm86OnNoYXBlVG9wKToKKyAgICAgICAgKFdyYXBTaGFwZUlu
Zm8pOgorICAgICAgICAoV2ViQ29yZTo6V3JhcFNoYXBlSW5mbzo6bGluZVN0YXRlKToKKwogMjAx
Mi0wOC0zMSAgRGF2aWQgSHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CiAKICAgICAgICAgW05ldyBN
dWx0aWNvbHVtbl0gTWFrZSBSZW5kZXJGbG93VGhyZWFkcyBpbnRvIHNlbGVjdGlvbiByb290cy4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDgwYzYzNmYuLjY5MjYxNmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNDQ1OCw2ICs0NDU4LDE0IEBAIHdlYmNvcmVf
c291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2luZFJ1bGUu
aCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV09GRkZpbGVGb3JtYXQuY3Bw
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZvcm1hdC5oIFwK
KwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9YU0ludGVydmFsLmNwcCBcCisJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvWFNJbnRlcnZhbC5oIFwKKwlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9YU1BvbHlnb24uY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9YU1BvbHlnb24uaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvWFNSZWN0YW5nbGUuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9YU1JlY3RhbmdsZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Y
U2hhcGUuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9YU2hhcGUuaCBc
CiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0Vycm9yc0d0ay5jcHAgXAogCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9FcnJvcnNHdGsuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL0dhbWVwYWRzR3RrLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJn
ZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCBmNzM1OWFmLi4yY2RlZWQ1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1RhcmdldC5wcmkKQEAgLTk5NCw2ICs5OTQsMTAgQEAgU09VUkNFUyArPSBcCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1TdGF0ZS5jcHAgXAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcCBc
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAgXAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL1hTSW50ZXJ2YWwuY3BwIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9YU1BvbHln
b24uY3BwIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9YU1JlY3RhbmdsZS5jcHAgXAorICAgIHBs
YXRmb3JtL2dyYXBoaWNzL1hTaGFwZS5jcHAgXAogICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L0ltYWdlRGVjb2Rlci5jcHAgXAogICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJ
bWFnZURlY29kZXIuY3BwIFwKICAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1h
Z2VSZWFkZXIuY3BwIFwKQEAgLTIxNDEsNiArMjE0NSwxMCBAQCBIRUFERVJTICs9IFwKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybVN0YXRlLmggXAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmggXAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuaCBcCisgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvWFNJbnRlcnZhbC5oIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9YU1BvbHlnb24uaCBc
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvWFNSZWN0YW5nbGUuaCBcCisgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvWFNoYXBlLmggXAogICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFn
ZURlY29kZXIuaCBcCiAgICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVh
ZGVyLmggXAogICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIu
aCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMDMyZmRiYS4uNTdhNmEyZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQpAQCAtNDE4LDYgKzQxOCwxNCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3Ry
YW5zZm9ybXMvVHJhbnNmb3JtT3BlcmF0aW9uLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtT3BlcmF0aW9ucy5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmgnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL1hTSW50ZXJ2YWwuY3BwJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9YU0ludGVydmFsLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL1hTUG9seWdvbi5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L1hTUG9seWdvbi5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9YU1JlY3Rhbmds
ZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL1hTUmVjdGFuZ2xlLmgnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL1hTaGFwZS5jcHAnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL1hTaGFwZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ndGsv
UGFzdGVib2FyZEhlbHBlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9sZXZlbGRiL0xldmVs
REJDb21wYXJhdG9yLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQkRh
dGFiYXNlLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCmluZGV4IGYwNDk0MGIuLjM0MDUzNDYgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC0zNDEzMyw2ICszNDEzMywzOCBAQAogCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXFdpZHRoSXRlcmF0b3IuaCIKIAkJCQkJPgog
CQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdy
YXBoaWNzXFhTSW50ZXJ2YWwuY3BwIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJ
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcWFNJbnRlcnZhbC5oIgorCQkJ
CQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZv
cm1cZ3JhcGhpY3NcWFNQb2x5Z29uLmNwcCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8Rmls
ZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXFhTUG9seWdvbi5oIgor
CQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxh
dGZvcm1cZ3JhcGhpY3NcWFNSZWN0YW5nbGUuY3BwIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJ
CTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcWFNSZWN0YW5n
bGUuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXFhTaGFwZS5jcHAiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJ
CQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xYU2hhcGUu
aCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KIAkJCQk8RmlsdGVyCiAJCQkJCU5hbWU9ImNmIgogCQkJ
CQk+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKaW5kZXggOGE0MjQzZi4uMjRlZWUwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTgzMSw2ICsxODMxLDE0IEBACiAJCTZF
NEU5MUFEMTBGN0ZCMzEwMEEyNzc5QyAvKiBDYW52YXNDb250ZXh0QXR0cmlidXRlcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU0RTkxQTgxMEY3RkIz
MTAwQTI3NzlDIC8qIENhbnZhc0NvbnRleHRBdHRyaWJ1dGVzLmggKi87IH07CiAJCTZFNEU5MUFF
MTBGN0ZCMzEwMEEyNzc5QyAvKiBXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFNEU5MUE5MTBGN0ZCMzEwMEEy
Nzc5QyAvKiBXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmNwcCAqLzsgfTsKIAkJNkU0RTkxQUYxMEY3
RkIzMTAwQTI3NzlDIC8qIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFNEU5MUFBMTBGN0ZCMzEwMEEyNzc5QyAv
KiBXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmggKi87IH07CisJCTZFNjM3NDUyMTVGMTI4MDIwMEIz
RkRBMyAvKiBYU2hhcGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNkU2Mzc0NEExNUYxMjgwMjAwQjNGREEzIC8qIFhTaGFwZS5jcHAgKi87IH07CisJ
CTZFNjM3NDUzMTVGMTI4MDIwMEIzRkRBMyAvKiBYU2hhcGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFNjM3NDRCMTVGMTI4MDIwMEIzRkRBMyAvKiBY
U2hhcGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk2RTYzNzQ1NDE1RjEyODAyMDBCM0ZEQTMgLyogWFNJbnRlcnZhbC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTYzNzQ0QzE1RjEyODAyMDBCM0ZE
QTMgLyogWFNJbnRlcnZhbC5jcHAgKi87IH07CisJCTZFNjM3NDU1MTVGMTI4MDIwMEIzRkRBMyAv
KiBYU0ludGVydmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2RTYzNzQ0RDE1RjEyODAyMDBCM0ZEQTMgLyogWFNJbnRlcnZhbC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTZFNjM3NDU2MTVGMTI4MDIw
MEIzRkRBMyAvKiBYU1BvbHlnb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNkU2Mzc0NEUxNUYxMjgwMjAwQjNGREEzIC8qIFhTUG9seWdvbi5jcHAg
Ki87IH07CisJCTZFNjM3NDU3MTVGMTI4MDIwMEIzRkRBMyAvKiBYU1BvbHlnb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFNjM3NDRGMTVGMTI4MDIw
MEIzRkRBMyAvKiBYU1BvbHlnb24uaCAqLzsgfTsKKwkJNkU2Mzc0NTgxNUYxMjgwMjAwQjNGREEz
IC8qIFhTUmVjdGFuZ2xlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDZFNjM3NDUwMTVGMTI4MDIwMEIzRkRBMyAvKiBYU1JlY3RhbmdsZS5jcHAgKi87
IH07CisJCTZFNjM3NDU5MTVGMTI4MDIwMEIzRkRBMyAvKiBYU1JlY3RhbmdsZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU2Mzc0NTExNUYxMjgwMjAw
QjNGREEzIC8qIFhTUmVjdGFuZ2xlLmggKi87IH07CiAJCTZFNjdEMkE2MTI4MEU4QTQwMDg3NThG
NyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNkU2N0QyQTQxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMz
RE9wZW5HTC5jcHAgKi87IH07CiAJCTZFNjdEMkE3MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNp
b25zM0RPcGVuR0wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDZFNjdEMkE1MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuaCAqLzsg
fTsKIAkJNkU2N0QyQTkxMjgwRThCRDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU2N0QyQTgxMjgwRThCRDAw
ODc1OEY3IC8qIEV4dGVuc2lvbnMzRC5oICovOyB9OwpAQCAtOTAwOCw2ICs5MDE2LDE0IEBACiAJ
CTZFNEU5MUE5MTBGN0ZCMzEwMEEyNzc5QyAvKiBXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkdMQ29udGV4dEF0dHJpYnV0
ZXMuY3BwOyBwYXRoID0gY2FudmFzL1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk2RTRFOTFBQTEwRjdGQjMxMDBBMjc3OUMgLyogV2ViR0xD
b250ZXh0QXR0cmlidXRlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJH
TENvbnRleHRBdHRyaWJ1dGVzLmg7IHBhdGggPSBjYW52YXMvV2ViR0xDb250ZXh0QXR0cmlidXRl
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RTRFOTFBQjEwRjdGQjMxMDBBMjc3
OUMgLyogV2ViR0xDb250ZXh0QXR0cmlidXRlcy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0g
V2ViR0xDb250ZXh0QXR0cmlidXRlcy5pZGw7IHBhdGggPSBjYW52YXMvV2ViR0xDb250ZXh0QXR0
cmlidXRlcy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZFNjM3NDRBMTVGMTI4
MDIwMEIzRkRBMyAvKiBYU2hhcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gWFNoYXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkU2Mzc0NEIx
NUYxMjgwMjAwQjNGREEzIC8qIFhTaGFwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBYU2hhcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkU2Mzc0NEMxNUYx
MjgwMjAwQjNGREEzIC8qIFhTSW50ZXJ2YWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gWFNJbnRlcnZhbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTZFNjM3NDREMTVGMTI4MDIwMEIzRkRBMyAvKiBYU0ludGVydmFsLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFhTSW50ZXJ2YWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNkU2Mzc0NEUxNUYxMjgwMjAwQjNGREEzIC8qIFhTUG9seWdvbi5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBYU1BvbHlnb24uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk2RTYzNzQ0RjE1RjEyODAyMDBCM0ZEQTMgLyogWFNQb2x5Z29uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFhTUG9seWdvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk2RTYzNzQ1MDE1RjEyODAyMDBCM0ZEQTMgLyogWFNSZWN0YW5n
bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gWFNSZWN0YW5nbGUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RTYzNzQ1MTE1RjEyODAyMDBCM0ZE
QTMgLyogWFNSZWN0YW5nbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWFNS
ZWN0YW5nbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkU2N0QyQTQxMjgwRThB
NDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBFeHRlbnNpb25zM0RPcGVuR0wuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk2RTY3RDJBNTEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3Bl
bkdMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4dGVuc2lvbnMzRE9wZW5H
TC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RTY3RDJBODEyODBFOEJEMDA4NzU4
RjcgLyogRXh0ZW5zaW9uczNELmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4
dGVuc2lvbnMzRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTk5NDMsNiArMTk5
NTksMTQgQEAKIAkJCQk1MDFCQUFBODEzOTUwRTJDMDBGN0FDRUIgLyogV2luZFJ1bGUuaCAqLywK
IAkJCQkzNzk5MTk5NDEyMDBEREY0MDBFQTA0MUMgLyogV09GRkZpbGVGb3JtYXQuY3BwICovLAog
CQkJCTM3OTkxOTk1MTIwMERERjQwMEVBMDQxQyAvKiBXT0ZGRmlsZUZvcm1hdC5oICovLAorCQkJ
CTZFNjM3NDRBMTVGMTI4MDIwMEIzRkRBMyAvKiBYU2hhcGUuY3BwICovLAorCQkJCTZFNjM3NDRC
MTVGMTI4MDIwMEIzRkRBMyAvKiBYU2hhcGUuaCAqLywKKwkJCQk2RTYzNzQ0QzE1RjEyODAyMDBC
M0ZEQTMgLyogWFNJbnRlcnZhbC5jcHAgKi8sCisJCQkJNkU2Mzc0NEQxNUYxMjgwMjAwQjNGREEz
IC8qIFhTSW50ZXJ2YWwuaCAqLywKKwkJCQk2RTYzNzQ0RTE1RjEyODAyMDBCM0ZEQTMgLyogWFNQ
b2x5Z29uLmNwcCAqLywKKwkJCQk2RTYzNzQ0RjE1RjEyODAyMDBCM0ZEQTMgLyogWFNQb2x5Z29u
LmggKi8sCisJCQkJNkU2Mzc0NTAxNUYxMjgwMjAwQjNGREEzIC8qIFhTUmVjdGFuZ2xlLmNwcCAq
LywKKwkJCQk2RTYzNzQ1MTE1RjEyODAyMDBCM0ZEQTMgLyogWFNSZWN0YW5nbGUuaCAqLywKIAkJ
CSk7CiAJCQlwYXRoID0gZ3JhcGhpY3M7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAt
MjIyMTIsNiArMjIyMzYsOCBAQAogCQkJaXNhID0gUEJYSGVhZGVyc0J1aWxkUGhhc2U7CiAJCQli
dWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCisJCQkJNkU2Mzc0NTMx
NUYxMjgwMjAwQjNGREEzIC8qIFhTaGFwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNkU2Mzc0NTUx
NUYxMjgwMjAwQjNGREEzIC8qIFhTSW50ZXJ2YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QkM2
OURCMTUwNUYwNzYwMDFCNzRBQyAvKiBBYnN0cmFjdERhdGFiYXNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk0MUUxQjFEMTBGRjU5ODY5MDA1NzZCM0IgLyogQWJzdHJhY3RXb3JrZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTI5QTgxMjJFMEZCQjlDMUQwMDUxMDI5MyAvKiBBY2Nlc3NpYmlsaXR5QVJJ
QUdyaWRDZWxsLmggaW4gSGVhZGVycyAqLywKQEAgLTI1NDk3LDYgKzI1NTIzLDggQEAKIAkJCQlG
QkQ2QUY4ODE1RUYyNUM5MDA4QjcxMTAgLyogQ1NTQmFzaWNTaGFwZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUZCRDZBRjhBMTVFRjI1REYwMDhCNzExMCAvKiBCYXNpY1NoYXBlRnVuY3Rpb25zLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlGQkQ2QUY4QzE1RUYyNjA0MDA4QjcxMTAgLyogQmFzaWNTaGFw
ZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTZFNjM3NDU3MTVGMTI4MDIwMEIzRkRBMyAvKiBYU1Bv
bHlnb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTZFNjM3NDU5MTVGMTI4MDIwMEIzRkRBMyAvKiBY
U1JlY3RhbmdsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yODU4Nyw2ICsyODYxNSwxMCBAQAogCQkJ
CUZCRDZBRjhEMTVFRjI2MEEwMDhCNzExMCAvKiBCYXNpY1NoYXBlcy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk0RkIzOTBBRDE1RUY2MUYzMDA3QUQ1MUYgLyogR2VuZXJhdGVkSW1hZ2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMzc3QTNBOTAxNUVGQ0U5QjAwNTlGNUM3IC8qIEJpdG1hcEltYWdl
Q0cuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNkU2Mzc0NTIxNUYxMjgwMjAwQjNGREEzIC8qIFhT
aGFwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk2RTYzNzQ1NDE1RjEyODAyMDBCM0ZEQTMgLyog
WFNJbnRlcnZhbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk2RTYzNzQ1NjE1RjEyODAyMDBCM0ZE
QTMgLyogWFNQb2x5Z29uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTZFNjM3NDU4MTVGMTI4MDIw
MEIzRkRBMyAvKiBYU1JlY3RhbmdsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1hTSW50ZXJ2YWwuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvWFNJbnRlcnZhbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uODljZTQ0MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1hTSW50ZXJ2YWwuY3BwCkBAIC0wLDAgKzEsMTY2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcK
KyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQg
SE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlhTSW50ZXJ2YWwuaCIKKworI2lu
Y2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0
IEludGVydmFsWDFDb21wYXJhdG9yIHsKKyAgICBib29sIG9wZXJhdG9yKCkgKGNvbnN0IFhTSW50
ZXJ2YWwmIGkxLCBjb25zdCBYU0ludGVydmFsJiBpMikgY29uc3QgCisgICAgeyAgICAgICAKKyAg
ICAgICAgcmV0dXJuIGkxLngxIDwgaTIueDE7CisgICAgfQorfTsKKworYm9vbCBYU0ludGVydmFs
OjppbnRlcnNlY3QoY29uc3QgWFNJbnRlcnZhbCYgaSwgWFNJbnRlcnZhbCYgcnYpIGNvbnN0IAor
eyAgCisgICAgaWYgKHgyIDwgaS54MSB8fCB4MSA+IGkueDIpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBydi54MSA9IHN0ZDo6bWF4KHgxLCBpLngxKTsKKyAgICBydi54MiA9IHN0ZDo6bWlu
KHgyLCBpLngyKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBzb3J0WFNJbnRlcnZhbHMo
VmVjdG9yPFhTSW50ZXJ2YWw+JiB2KQoreworICAgIHN0ZDo6c29ydCh2LmJlZ2luKCksIHYuZW5k
KCksIEludGVydmFsWDFDb21wYXJhdG9yKCkpOworfQorCit2b2lkIG1lcmdlWFNJbnRlcnZhbHMo
Y29uc3QgVmVjdG9yPFhTSW50ZXJ2YWw+JiB2MSwgY29uc3QgVmVjdG9yPFhTSW50ZXJ2YWw+JiB2
MiwgVmVjdG9yPFhTSW50ZXJ2YWw+JiBydikgCit7CisgICAgaWYgKCF2MS5zaXplKCkpCisgICAg
ICAgIHJ2LmFwcGVuZFJhbmdlKHYyLmJlZ2luKCksIHYyLmVuZCgpKTsKKyAgICBlbHNlIGlmICgh
djIuc2l6ZSgpKQorICAgICAgICBydi5hcHBlbmRSYW5nZSh2MS5iZWdpbigpLCB2MS5lbmQoKSk7
CisgICAgZWxzZSB7CisgICAgICAgIFZlY3RvcjxYU0ludGVydmFsPiB2KHYxLnNpemUoKSArIHYy
LnNpemUoKSk7CisgICAgICAgIFhTSW50ZXJ2YWwqIGludGVydmFsID0gMDsKKyAgICAgICAgCisg
ICAgICAgIHN0ZDo6bWVyZ2UodjEuYmVnaW4oKSwgdjEuZW5kKCksIHYyLmJlZ2luKCksIHYyLmVu
ZCgpLCB2LmJlZ2luKCksIEludGVydmFsWDFDb21wYXJhdG9yKCkpOworICAgICAgICAKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2LnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBp
ZiAoIWludGVydmFsKQorICAgICAgICAgICAgICAgIGludGVydmFsID0gJnZbaV07CisgICAgICAg
ICAgICBlbHNlIGlmICh2W2ldLngxID49IGludGVydmFsLT54MSAmJiB2W2ldLngxIDw9IGludGVy
dmFsLT54MikgLy8gRklYTUU6IDFzdCA8PSB0ZXN0IG5vdCBuZWVkZWQ/CisgICAgICAgICAgICAg
ICAgaW50ZXJ2YWwtPngyID0gc3RkOjptYXgoaW50ZXJ2YWwtPngyLCB2W2ldLngyKTsKKyAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHJ2LmFwcGVuZCgqaW50ZXJ2YWwpOworICAg
ICAgICAgICAgICAgIGludGVydmFsID0gJnZbaV07CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGlmIChpbnRlcnZhbCkKKyAgICAgICAgICAgIHJ2LmFwcGVuZCgq
aW50ZXJ2YWwpOworICAgIH0KK30KKwordm9pZCBpbnRlcnNlY3RYU0ludGVydmFscyhjb25zdCBW
ZWN0b3I8WFNJbnRlcnZhbD4mIHYxLCBjb25zdCBWZWN0b3I8WFNJbnRlcnZhbD4mIHYyLCBWZWN0
b3I8WFNJbnRlcnZhbD4mIHJ2KSAKK3sKKyAgICBzaXplX3QgdjFTaXplID0gdjEuc2l6ZSgpOwor
ICAgIHNpemVfdCB2MlNpemUgPSB2Mi5zaXplKCk7CisKKyAgICBpZiAoIXYxU2l6ZSB8fCAhdjJT
aXplKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgWFNJbnRlcnZhbCBpbnRlcnZhbDsKKyAg
ICBib29sIG92ZXJsYXAgPSBmYWxzZTsKKyAgICBzaXplX3QgaTEgPSAwOworICAgIHNpemVfdCBp
MiA9IDA7CisgICAgCisgICAgd2hpbGUgKGkxIDwgdjFTaXplICYmIGkyIDwgdjJTaXplKSB7Cisg
ICAgICAgIFhTSW50ZXJ2YWwgdjEyOworICAgICAgICBpZiAodjFbaTFdLmludGVyc2VjdCh2Mltp
Ml0sIHYxMikpIHsKKyAgICAgICAgICAgIGlmICghb3ZlcmxhcCB8fCAhdjEyLmludGVyc2VjdChp
bnRlcnZhbCwgaW50ZXJ2YWwpKSB7CisgICAgICAgICAgICAgICAgaWYgKG92ZXJsYXApIAorICAg
ICAgICAgICAgICAgICAgICBydi5hcHBlbmQoaW50ZXJ2YWwpOworICAgICAgICAgICAgICAgIGlu
dGVydmFsID0gdjEyOworICAgICAgICAgICAgICAgIG92ZXJsYXAgPSB0cnVlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKHYxW2kxXS54MiA8IHYyW2kyXS54MikgCisgICAgICAgICAg
ICAgICAgaTErKzsgCisgICAgICAgICAgICBlbHNlIAorICAgICAgICAgICAgICAgIGkyKys7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAob3ZlcmxhcCkgCisgICAgICAgICAgICAg
ICAgcnYuYXBwZW5kKGludGVydmFsKTsKKyAgICAgICAgICAgIG92ZXJsYXAgPSBmYWxzZTsKKyAg
ICAgICAgICAgIGlmICh2MVtpMV0ueDEgPCB2MltpMl0ueDEpIAorICAgICAgICAgICAgICAgIGkx
Kys7IAorICAgICAgICAgICAgZWxzZSAKKyAgICAgICAgICAgICAgICBpMisrOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIGlmIChvdmVybGFwKSAKKyAgICAgICAgcnYuYXBwZW5kKGludGVy
dmFsKTsKK30KKwordm9pZCBzdWJ0cmFjdFhTSW50ZXJ2YWxzKGNvbnN0IFZlY3RvcjxYU0ludGVy
dmFsPiYgdjEsIGNvbnN0IFZlY3RvcjxYU0ludGVydmFsPiYgdjIsIFZlY3RvcjxYU0ludGVydmFs
PiYgcnYpIAoreworICAgIHNpemVfdCB2MVNpemUgPSB2MS5zaXplKCk7CisgICAgc2l6ZV90IHYy
U2l6ZSA9IHYyLnNpemUoKTsKKyAgICAKKyAgICBpZiAoIXYxU2l6ZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKCF2MlNpemUpCisgICAgICAgIHJ2LmFwcGVuZFJhbmdlKHYxLmJlZ2luKCks
IHYxLmVuZCgpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgc2l6ZV90IGkxID0gMCwgaTIgPSAwOwor
ICAgICAgICBydi5hcHBlbmRSYW5nZSh2MS5iZWdpbigpLCB2MS5lbmQoKSk7CisgICAgICAgIAor
ICAgICAgICB3aGlsZSAoaTEgPCBydi5zaXplKCkgJiYgaTIgPCB2MlNpemUpIHsKKyAgICAgICAg
ICAgIFhTSW50ZXJ2YWwmIGludGVydmFsMSA9IHJ2W2kxXTsgIAorICAgICAgICAgICAgY29uc3Qg
WFNJbnRlcnZhbCYgaW50ZXJ2YWwyID0gdjJbaTJdOyAgCisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGlmIChpbnRlcnZhbDIueDEgPD0gaW50ZXJ2YWwxLngxICYmIGludGVydmFsMi54MiA+PSBp
bnRlcnZhbDEueDIpIAorICAgICAgICAgICAgICAgIHJ2LnJlbW92ZShpMSk7CisgICAgICAgICAg
ICBlbHNlIGlmIChpbnRlcnZhbDIueDIgPCBpbnRlcnZhbDEueDEpCisgICAgICAgICAgICAgICAg
aTIgKz0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGludGVydmFsMi54MSA+IGludGVydmFsMS54
MikKKyAgICAgICAgICAgICAgICBpMSArPSAxOworICAgICAgICAgICAgZWxzZSBpZiAoaW50ZXJ2
YWwyLngxID4gaW50ZXJ2YWwxLngxICYmIGludGVydmFsMi54MiA8IGludGVydmFsMS54Mikgewor
ICAgICAgICAgICAgICAgIHJ2Lmluc2VydChpMSwgWFNJbnRlcnZhbChpbnRlcnZhbDEueDEsIGlu
dGVydmFsMi54MSkpOworICAgICAgICAgICAgICAgIGludGVydmFsMS54MSA9IGludGVydmFsMi54
MjsKKyAgICAgICAgICAgICAgICBpMiArPSAxOworICAgICAgICAgICAgfSBlbHNlIGlmIChpbnRl
cnZhbDIueDEgPD0gaW50ZXJ2YWwxLngxKSB7CisgICAgICAgICAgICAgICAgaW50ZXJ2YWwxLngx
ID0gaW50ZXJ2YWwyLngyOworICAgICAgICAgICAgICAgIGkyICs9IDE7CisgICAgICAgICAgICB9
IGVsc2UgIHsgLy8gKGludGVydmFsMi54MiA+PSBpbnRlcnZhbDEueDIpIAorICAgICAgICAgICAg
ICAgIGludGVydmFsMS54MiA9IGludGVydmFsMi54MTsKKyAgICAgICAgICAgICAgICBpMSArPSAx
OworICAgICAgICAgICAgfSAgICAgICAgICAgCisgICAgICAgIH0KKyAgICB9Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1hTSW50ZXJ2YWwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1hT
SW50ZXJ2YWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTQyNTQ1Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvWFNJbnRl
cnZhbC5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUg
U3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFhTSW50ZXJ2YWxfaAorI2Rl
ZmluZSBYU0ludGVydmFsX2gKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitzdHJ1Y3QgWFNJbnRlcnZhbCB7CitwdWJsaWM6CisgICAgZmxvYXQgeDE7
CisgICAgZmxvYXQgeDI7CisKKyAgICBYU0ludGVydmFsKGZsb2F0IHgxID0gMCwgZmxvYXQgeDIg
PSAwKSAKKyAgICAgICAgOiB4MSh4MSkKKyAgICAgICAgLCB4Mih4MikgCisgICAgeyAKKyAgICB9
CisKKyAgICBib29sIGludGVyc2VjdChjb25zdCBYU0ludGVydmFsJiwgWFNJbnRlcnZhbCYpIGNv
bnN0OyAKK307CisKK3ZvaWQgc29ydFhTSW50ZXJ2YWxzKFZlY3RvcjxYU0ludGVydmFsPiYpOwor
dm9pZCBtZXJnZVhTSW50ZXJ2YWxzKGNvbnN0IFZlY3RvcjxYU0ludGVydmFsPiYsIGNvbnN0IFZl
Y3RvcjxYU0ludGVydmFsPiYsIFZlY3RvcjxYU0ludGVydmFsPiYpOwordm9pZCBpbnRlcnNlY3RY
U0ludGVydmFscyhjb25zdCBWZWN0b3I8WFNJbnRlcnZhbD4mLCBjb25zdCBWZWN0b3I8WFNJbnRl
cnZhbD4mLCBWZWN0b3I8WFNJbnRlcnZhbD4mKTsKK3ZvaWQgc3VidHJhY3RYU0ludGVydmFscyhj
b25zdCBWZWN0b3I8WFNJbnRlcnZhbD4mLCBjb25zdCBWZWN0b3I8WFNJbnRlcnZhbD4mLCBWZWN0
b3I8WFNJbnRlcnZhbD4mKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
WFNJbnRlcnZhbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9YU1BvbHlnb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvWFNQb2x5
Z29uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTFlMmQ1Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvWFNQb2x5Z29u
LmNwcApAQCAtMCwwICsxLDM2MyBAQAorIC8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUg
U3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiWFNQb2x5Z29uLmgiCisKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBNYXhFZGdlWUNvbXBhcmF0b3IgeyAgICAKKyAgICBi
b29sIG9wZXJhdG9yKCkgKGNvbnN0IFhTRWRnZSogZTEsIGNvbnN0IFhTRWRnZSogZTIpIGNvbnN0
IAorICAgIHsgICAgICAgCisgICAgICAgIHJldHVybiBlMS0+bWF4WSgpIDwgZTItPm1heFkoKTsK
KyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcigpIChjb25zdCBYU0VkZ2UqIGUsIGZsb2F0
IHkpIGNvbnN0IAorICAgIHsgICAgICAgCisgICAgICAgIHJldHVybiBlLT5tYXhZKCkgPCB5Owor
ICAgIH0KK307CisKK3N0cnVjdCBNaW5FZGdlWUNvbXBhcmF0b3IgeyAgICAKKyAgICBib29sIG9w
ZXJhdG9yKCkgKGNvbnN0IFhTRWRnZSogZTEsIGNvbnN0IFhTRWRnZSogZTIpIGNvbnN0IAorICAg
IHsgICAgICAgCisgICAgICAgIHJldHVybiBlMS0+bWluWSgpIDwgZTItPm1pblkoKTsKKyAgICB9
CisgICAgCisgICAgYm9vbCBvcGVyYXRvcigpIChjb25zdCBYU0VkZ2UqIGUsIGZsb2F0IHkpIGNv
bnN0CisgICAgeyAgICAgICAKKyAgICAgICAgcmV0dXJuIGUtPm1pblkoKSA8IHk7CisgICAgfQor
fTsKKworc3RydWN0IEludGVyc2VjdGlvblhDb21wYXJhdG9yIHsKKyAgICBib29sIG9wZXJhdG9y
KCkgKGNvbnN0IFhTSW50ZXJzZWN0aW9uJiBpMSwgY29uc3QgWFNJbnRlcnNlY3Rpb24mIGkyKSBj
b25zdCAKKyAgICB7ICAgICAgIAorICAgICAgICByZXR1cm4gKGkxLnggPT0gaTIueCkgPyBpMS50
eXBlIDwgaTIudHlwZSA6IGkxLnggPCBpMi54OworICAgIH0KK307CisKK1hTRWRnZVRyZWU6OlhT
RWRnZVRyZWUoY29uc3QgVmVjdG9yPFhTRWRnZSo+JiBzb3J0ZWRFZGdlcykgCisgICAgOiBjZW50
ZXIoMCkKK3sKKyAgICBpZiAoc29ydGVkRWRnZXMuc2l6ZSgpID4gMCkKKyAgICAgICAgaW5pdEVk
Z2VUcmVlKHRoaXMsIHNvcnRlZEVkZ2VzKTsKK30KKwordm9pZCBYU0VkZ2VUcmVlOjppbml0RWRn
ZVRyZWUoWFNFZGdlVHJlZSogbm9kZSwgY29uc3QgVmVjdG9yPFhTRWRnZSo+JiBlZGdlcykKK3sK
KyAgICBzaXplX3QgZWRnZXNTaXplID0gZWRnZXMuc2l6ZSgpOyAgCisgICAgc2l6ZV90IGNlbnRl
ckluZGV4ID0gZWRnZXNTaXplIC8gMjsKKyAgICBub2RlLT5jZW50ZXIgPSAoZWRnZXNbY2VudGVy
SW5kZXhdLT5taW5ZKCkgKyBlZGdlc1tjZW50ZXJJbmRleF0tPm1heFkoKSkgLyAyOworICAgIAor
ICAgIFZlY3RvcjxYU0VkZ2UqPiBhYm92ZUNlbnRlckVkZ2VzOworICAgIFZlY3RvcjxYU0VkZ2Uq
PiBiZWxvd0NlbnRlckVkZ2VzOworICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZWRn
ZXNTaXplOyBpKyspIHsKKyAgICAgICAgWFNFZGdlKiBlZGdlID0gZWRnZXNbaV07CisgICAgICAg
IGlmIChlZGdlLT5tYXhZKCkgPCBub2RlLT5jZW50ZXIpCisgICAgICAgICAgICBhYm92ZUNlbnRl
ckVkZ2VzLmFwcGVuZChlZGdlKTsKKyAgICAgICAgZWxzZSBpZiAoZWRnZS0+bWluWSgpID4gbm9k
ZS0+Y2VudGVyKQorICAgICAgICAgICAgYmVsb3dDZW50ZXJFZGdlcy5hcHBlbmQoZWRnZSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5vZGUtPm92ZXJsYXBDZW50ZXIuYXBwZW5kKGVkZ2Up
OworICAgIH0KKyAgICAKKyAgICAvLyBGSVhNRTogY3JlYXRlIHR3byBzb3J0ZWQgY29waWVzIG9m
IG92ZXJsYXBDZW50ZXI6IG92ZXJsYXBDZW50ZXJNaW5ZLCBvdmVybGFwQ2VudGVyTWF4WSwgdXNl
IHRoZW0gaW4gZmluZC4uLgorICAgIAorICAgIGlmIChhYm92ZUNlbnRlckVkZ2VzLnNpemUoKSA+
IDApCisgICAgICAgIG5vZGUtPmFib3ZlQ2VudGVyID0gYWRvcHRQdHIobmV3IFhTRWRnZVRyZWUo
YWJvdmVDZW50ZXJFZGdlcykpOworICAgIGlmIChiZWxvd0NlbnRlckVkZ2VzLnNpemUoKSA+IDAp
CisgICAgICAgIG5vZGUtPmJlbG93Q2VudGVyID0gYWRvcHRQdHIobmV3IFhTRWRnZVRyZWUoYmVs
b3dDZW50ZXJFZGdlcykpOworfQorCit2b2lkIFhTRWRnZVRyZWU6OmZpbmRFZGdlc1RoYXRPdmVy
bGFwWShmbG9hdCB5LCBWZWN0b3I8WFNFZGdlKj4mIHJ2KSBjb25zdAoreworICAgIGlmICh5IDwg
Y2VudGVyKSB7CisgICAgICAgIGlmIChhYm92ZUNlbnRlcikgCisgICAgICAgICAgICBhYm92ZUNl
bnRlci0+ZmluZEVkZ2VzVGhhdE92ZXJsYXBZKHksIHJ2KTsKKyAgICB9IGVsc2UgaWYgKHkgPiBj
ZW50ZXIpIHsKKyAgICAgICAgaWYgKGJlbG93Q2VudGVyKSAKKyAgICAgICAgICAgIGJlbG93Q2Vu
dGVyLT5maW5kRWRnZXNUaGF0T3ZlcmxhcFkoeSwgcnYpOworICAgIH0KKyAgICAKKyAgICBzaXpl
X3Qgb3ZlcmxhcEVkZ2VzU2l6ZSA9IG92ZXJsYXBDZW50ZXIuc2l6ZSgpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgb3ZlcmxhcEVkZ2VzU2l6ZTsgaSsrKSB7CisgICAgICAgIFhTRWRnZSog
ZWRnZSA9IG92ZXJsYXBDZW50ZXJbaV07CisgICAgICAgIGlmICh5ID49IGVkZ2UtPm1pblkoKSAm
JiB5IDw9IGVkZ2UtPm1heFkoKSkKKyAgICAgICAgICAgIHJ2LmFwcGVuZChlZGdlKTsKKyAgICB9
Cit9CisKK3ZvaWQgWFNFZGdlVHJlZTo6ZmluZEVkZ2VzVGhhdE92ZXJsYXBJbnRlcnZhbChmbG9h
dCB5TWluLCBmbG9hdCB5TWF4LCBWZWN0b3I8WFNFZGdlKj4mIHJ2KSBjb25zdAoreworICAgIGlm
ICgoeU1pbiA8IGNlbnRlcikgJiYgYWJvdmVDZW50ZXIpCisgICAgICAgIGFib3ZlQ2VudGVyLT5m
aW5kRWRnZXNUaGF0T3ZlcmxhcEludGVydmFsKHlNaW4sIHlNYXgsIHJ2KTsKKworICAgIGlmICgo
eU1heCA+IGNlbnRlcikgJiYgYmVsb3dDZW50ZXIpCisgICAgICAgIGJlbG93Q2VudGVyLT5maW5k
RWRnZXNUaGF0T3ZlcmxhcEludGVydmFsKHlNaW4sIHlNYXgsIHJ2KTsKKyAgICAKKyAgICBzaXpl
X3Qgb3ZlcmxhcEVkZ2VzU2l6ZSA9IG92ZXJsYXBDZW50ZXIuc2l6ZSgpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgb3ZlcmxhcEVkZ2VzU2l6ZTsgaSsrKSB7CisgICAgICAgIFhTRWRnZSog
ZWRnZSA9IG92ZXJsYXBDZW50ZXJbaV07CisgICAgICAgIGlmICh5TWF4ID4gZWRnZS0+bWluWSgp
ICYmIHlNaW4gPCBlZGdlLT5tYXhZKCkpCisgICAgICAgICAgICBydi5hcHBlbmQoZWRnZSk7Cisg
ICAgfQorfQorCitYU1BvbHlnb246OlhTUG9seWdvbihQYXNzT3duUHRyPFZlY3RvcjxmbG9hdD4g
PiBjb29yZGluYXRlcywgV2luZFJ1bGUgZmlsbFJ1bGUpCisgICAgOiBYU2hhcGUoKQorICAgICwg
bV9jb29yZGluYXRlcyhjb29yZGluYXRlcykKKyAgICAsIG1fZmlsbFJ1bGUoZmlsbFJ1bGUpIAor
eworICAgIC8vIEZJWE1FOiBzcGVjaWFsIGNhc2VzIGZvciAobGVuZ3RoID09KSAwLCAxLCAyICBw
b2ludHMKKyAgICAvLyBGSVhNRTogYXNzdW1pbmcgb3BlbiBwb2x5Z29ucyBmb3Igbm93CisgICAg
CisgICAgc2l6ZV90IG5WZXJ0aWNlcyA9IG51bWJlck9mVmVydGljZXMoKTsKKyAgICBtX2VkZ2Vz
LnJlc2l6ZShuVmVydGljZXMpOworICAgIFZlY3RvcjxYU0VkZ2UqPiBzb3J0ZWRFZGdlc01pblko
blZlcnRpY2VzKTsKKyAgICAKKyAgICBmbG9hdCBtaW5YID0gZ2V0WEF0KDApOworICAgIGZsb2F0
IG1pblkgPSBnZXRZQXQoMCk7CisgICAgZmxvYXQgbWF4WCA9IG1pblg7CisgICAgZmxvYXQgbWF4
WSA9IG1pblk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5WZXJ0aWNlczsgaSsrKSB7
CisgICAgICAgIGZsb2F0IHggPSBnZXRYQXQoaSk7CisgICAgICAgIGZsb2F0IHkgPSBnZXRZQXQo
aSk7CisgICAgICAgIAorICAgICAgICBtaW5YID0gc3RkOjptaW4oeCwgbWluWCk7CisgICAgICAg
IG1heFggPSBzdGQ6Om1heCh4LCBtYXhYKTsKKyAgICAgICAgbWluWSA9IHN0ZDo6bWluKHksIG1p
blkpOworICAgICAgICBtYXhZID0gc3RkOjptYXgoeSwgbWF4WSk7CisgICAgICAgIAorICAgICAg
ICBtX2VkZ2VzW2ldLnBvbHlnb24gPSB0aGlzOworICAgICAgICBtX2VkZ2VzW2ldLmkxID0gaTsK
KyAgICAgICAgbV9lZGdlc1tpXS5pMiA9IChpKzEpICUgblZlcnRpY2VzOworICAgICAgICAKKyAg
ICAgICAgc29ydGVkRWRnZXNNaW5ZW2ldID0gJm1fZWRnZXNbaV07CisgICAgfQorICAgIAorICAg
IG1fYm91bmRpbmdCb3guc2V0WChtaW5YKTsKKyAgICBtX2JvdW5kaW5nQm94LnNldFkobWluWSk7
CisgICAgbV9ib3VuZGluZ0JveC5zZXRXaWR0aChtYXhYIC0gbWluWCk7CisgICAgbV9ib3VuZGlu
Z0JveC5zZXRIZWlnaHQobWF4WSAtIG1pblkpOworCisgICAgc3RkOjpzb3J0KHNvcnRlZEVkZ2Vz
TWluWS5iZWdpbigpLCBzb3J0ZWRFZGdlc01pblkuZW5kKCksIE1pbkVkZ2VZQ29tcGFyYXRvcigp
KTsKKyAgICBtX2VkZ2VUcmVlID0gYWRvcHRQdHIobmV3IFhTRWRnZVRyZWUoc29ydGVkRWRnZXNN
aW5ZKSk7Cit9CisKK3N0YXRpYyBib29sIGNvbXB1dGVYSW50ZXJzZWN0aW9uKGNvbnN0IFhTRWRn
ZSogZXAsIGZsb2F0IHksIFhTSW50ZXJzZWN0aW9uJiBpKQoreworICAgIGNvbnN0IFhTRWRnZSYg
ZSA9ICplcDsKKyAgICAKKyAgICBpZiAoZS5taW5ZKCkgPiB5IHx8IGUubWF4WSgpIDwgeSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGZsb2F0IHgxID0gZS54MSgpOworICAgIGZs
b2F0IHkxID0gZS55MSgpOworICAgIGZsb2F0IHgyID0gZS54MigpOworICAgIGZsb2F0IHkyID0g
ZS55MigpOworICAgIGZsb2F0IGR5ID0geTIgLSB5MTsKKyAgICAKKyAgICBpLmVkZ2UgPSBlcDsK
KyAgICBpLnkgPSB5OworICAgIAorICAgIGlmICghZHkpIHsKKyAgICAgICAgaS50eXBlID0gVmVy
dGV4WUJvdGg7CisgICAgICAgIGkueCA9IGUubWluWCgpOworICAgIH0gZWxzZSBpZiAoeSA9PSBl
Lm1pblkoKSkgeworICAgICAgICBpLnR5cGUgPSBWZXJ0ZXhZTWluOworICAgICAgICBpLnggPSAo
eTEgPCB5MikgPyB4MSA6IHgyOworICAgIH0gZWxzZSBpZiAoeSA9PSBlLm1heFkoKSkgeworICAg
ICAgICBpLnR5cGUgPSBWZXJ0ZXhZTWF4OworICAgICAgICBpLnggPSAoeTEgPiB5MikgPyB4MSA6
IHgyOworICAgIH0gZWxzZSB7CisgICAgICAgIGkudHlwZSA9IE5vcm1hbDsKKyAgICAgICAgaS54
ID0gKCh5IC0geTEpICogKHgyIC0geDEpIC8gZHkpICsgeDE7CisgICAgfQorICAgIAorICAgIHJl
dHVybiB0cnVlOworfQorCitmbG9hdCBYU1BvbHlnb246OnJpZ2h0VmVydGV4WShzaXplX3QgaW5k
ZXgpIGNvbnN0IAoreyAKKyAgICBzaXplX3QgblZlcnRpY2VzID0gbnVtYmVyT2ZWZXJ0aWNlcygp
OworICAgIHNpemVfdCBpMSA9IChpbmRleCArIDEpICUgblZlcnRpY2VzOworICAgIHNpemVfdCBp
MiA9IChpbmRleCAtIDEpICUgblZlcnRpY2VzOworCisgICAgaWYgKGdldFhBdChpMSkgPT0gZ2V0
WEF0KGkyKSkKKyAgICAgICAgcmV0dXJuIGdldFlBdChpMSkgPiBnZXRZQXQoaTIpID8gZ2V0WUF0
KGkxKSA6IGdldFlBdChpMik7CisKKyAgICByZXR1cm4gZ2V0WEF0KGkxKSA+IGdldFhBdChpMikg
PyBnZXRZQXQoaTEpIDogZ2V0WUF0KGkyKTsKK30KKworc3RhdGljIGJvb2wgYXBwZW5kSW50ZXJ2
YWxYKGZsb2F0IHgsIGJvb2wgaW5zaWRlLCBWZWN0b3I8WFNJbnRlcnZhbD4mIHYpCit7CisgICAg
aWYgKCFpbnNpZGUpCisgICAgICAgIHYuYXBwZW5kKFhTSW50ZXJ2YWwoeCkpOworICAgIGVsc2UK
KyAgICAgICAgdlt2LnNpemUoKSAtIDFdLngyID0geDsKKyAgICAKKyAgICByZXR1cm4gIWluc2lk
ZTsKK30KKwordm9pZCBYU1BvbHlnb246OmNvbXB1dGVYSW50ZXJzZWN0aW9ucyhmbG9hdCB5LCBW
ZWN0b3I8WFNJbnRlcnZhbD4mIHJ2KSBjb25zdAoreworICAgIFZlY3RvcjxYU0VkZ2UqPiBvdmVy
bGFwcGluZ0VkZ2VzOworICAgIG1fZWRnZVRyZWUtPmZpbmRFZGdlc1RoYXRPdmVybGFwWSh5LCBv
dmVybGFwcGluZ0VkZ2VzKTsKKworICAgIFZlY3RvcjxYU0ludGVyc2VjdGlvbj4gaW50ZXJzZWN0
aW9uczsKKyAgICBYU0ludGVyc2VjdGlvbiBpbnRlcnNlY3Rpb247CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBvdmVybGFwcGluZ0VkZ2VzLnNpemUoKTsgaSsrKSB7ICAgCisgICAgICAgIGlm
IChjb21wdXRlWEludGVyc2VjdGlvbihvdmVybGFwcGluZ0VkZ2VzW2ldLCB5LCBpbnRlcnNlY3Rp
b24pICYmIGludGVyc2VjdGlvbi50eXBlICE9IFZlcnRleFlCb3RoKQorICAgICAgICAgICAgaW50
ZXJzZWN0aW9ucy5hcHBlbmQoaW50ZXJzZWN0aW9uKTsKKyAgICB9CisgICAgaWYgKGludGVyc2Vj
dGlvbnMuc2l6ZSgpIDwgMikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHN0ZDo6c29ydChp
bnRlcnNlY3Rpb25zLmJlZ2luKCksIGludGVyc2VjdGlvbnMuZW5kKCksIEludGVyc2VjdGlvblhD
b21wYXJhdG9yKCkpOworICAgIAorICAgIHNpemVfdCBpbmRleCA9IDA7CisgICAgaW50IHdpbmRD
b3VudCA9IDA7CisgICAgYm9vbCBpbnNpZGUgPSBmYWxzZTsKKyAgICAKKyAgICB3aGlsZSAoaW5k
ZXggPCBpbnRlcnNlY3Rpb25zLnNpemUoKSkgeworICAgICAgICBjb25zdCBYU0ludGVyc2VjdGlv
biYgdGhpc0ludCA9IGludGVyc2VjdGlvbnNbaW5kZXhdOworCisgICAgICAgIGlmIChpbmRleCAr
IDEgPCBpbnRlcnNlY3Rpb25zLnNpemUoKSkgeworICAgICAgICAgICAgY29uc3QgWFNJbnRlcnNl
Y3Rpb24mIG5leHRJbnQgPSBpbnRlcnNlY3Rpb25zW2luZGV4ICsxXTsKKyAgICAgICAgICAgIGlm
ICgodGhpc0ludC54ID09IG5leHRJbnQueCkgJiYgKHRoaXNJbnQudHlwZSA9PSBWZXJ0ZXhZTWlu
IHx8IHRoaXNJbnQudHlwZSA9PSBWZXJ0ZXhZTWF4KSkgeworICAgICAgICAgICAgICAgIGlmICh0
aGlzSW50LnR5cGUgPT0gbmV4dEludC50eXBlKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIHNr
aXAgVmVydGV4WU1heCxWZXJ0ZXhZTWF4IGFuZCBWZXJ0ZXhZTWluLFZlcnRleFlNaW4KKyAgICAg
ICAgICAgICAgICAgICAgaW5kZXggKz0gMjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICAvLyBWZXJ0ZXhZTWluLFZlcnRleFlNYXggb3IgVmVydGV4WU1heCxW
ZXJ0ZXhZTWluID0+IFZlcnRleFlNaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRJbnQu
dHlwZSA9PSBWZXJ0ZXhZTWF4KQorICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0aW9u
c1tpbmRleCArIDFdID0gdGhpc0ludDsKKyAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0gMTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGNvbnN0IFhTRWRnZSYgdGhpc0VkZ2Ug
PSAqdGhpc0ludC5lZGdlOworICAgICAgICBib29sIGNyb3NzaW5nID0gIXdpbmRDb3VudDsgCisg
ICAgICAgIAorICAgICAgICAgaWYgKGZpbGxSdWxlKCkgPT0gUlVMRV9FVkVOT0REKSB7CisgICAg
ICAgICAgICB3aW5kQ291bnQgKz0gKGdldFlBdCh0aGlzRWRnZS5pMikgPiBnZXRZQXQodGhpc0Vk
Z2UuaTEpKSA/ICsxIDogLTE7CisgICAgICAgICAgICBjcm9zc2luZyA9IGNyb3NzaW5nIHx8ICF3
aW5kQ291bnQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICgodGhpc0ludC50eXBl
ID09IE5vcm1hbCkgfHwgKHRoaXNJbnQudHlwZSA9PSBWZXJ0ZXhZTWluKSkgeworICAgICAgICAg
ICAgaWYgKGNyb3NzaW5nKQorICAgICAgICAgICAgICAgIGluc2lkZSA9IGFwcGVuZEludGVydmFs
WCh0aGlzSW50LngsIGluc2lkZSwgcnYpOworICAgICAgICB9IGVsc2UgaWYgKHRoaXNJbnQudHlw
ZSA9PSBWZXJ0ZXhZTWF4KSB7IAorICAgICAgICAgICAgaW50IHZpID0gKGdldFlBdCh0aGlzRWRn
ZS5pMikgPiBnZXRZQXQodGhpc0VkZ2UuaTEpKSA/IHRoaXNFZGdlLmkyIDogdGhpc0VkZ2UuaTE7
CisgICAgICAgICAgICBpZiAoY3Jvc3NpbmcgJiYgcmlnaHRWZXJ0ZXhZKHZpKSA+IHkpCisgICAg
ICAgICAgICAgICAgaW5zaWRlID0gYXBwZW5kSW50ZXJ2YWxYKHRoaXNFZGdlLm1heFgoKSwgaW5z
aWRlLCBydik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGluZGV4ICs9IDE7CisgICAg
fQorfQorCisvLyBSZXR1cm4gdGhlIFggcHJvamVjdGlvbnMgb2YgdGhlIGVkZ2VzIHRoYXQgb3Zl
cmxhcCB5MSx5Mi4KK3ZvaWQgWFNQb2x5Z29uOjpjb21wdXRlRWRnZUludGVyc2VjdGlvbnMoZmxv
YXQgeTEsIGZsb2F0IHkyLCBWZWN0b3I8WFNJbnRlcnZhbD4mIHJ2KSBjb25zdAoreworICAgIGlm
ICh5MSA+IHkyKQorICAgICAgICBzdGQ6OnN3YXAoeTEsIHkyKTsKKyAgICAKKyAgICBWZWN0b3I8
WFNFZGdlICo+IG92ZXJsYXBwaW5nRWRnZXM7CisgICAgbV9lZGdlVHJlZS0+ZmluZEVkZ2VzVGhh
dE92ZXJsYXBJbnRlcnZhbCh5MSwgeTIsIG92ZXJsYXBwaW5nRWRnZXMpOworICAgIAorICAgIFhT
SW50ZXJzZWN0aW9uIGludGVyc2VjdGlvbjsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG92
ZXJsYXBwaW5nRWRnZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgY29uc3QgWFNFZGdlJiBlZGdl
ID0gKm92ZXJsYXBwaW5nRWRnZXNbaV07CisgICAgICAgIGZsb2F0IHgxLCB4MjsKKyAgICAgICAg
CisgICAgICAgIGlmIChlZGdlLm1pblkoKSA8IHkxKSB7CisgICAgICAgICAgICBjb21wdXRlWElu
dGVyc2VjdGlvbihvdmVybGFwcGluZ0VkZ2VzW2ldLCB5MSwgaW50ZXJzZWN0aW9uKTsKKyAgICAg
ICAgICAgIHgxID0gaW50ZXJzZWN0aW9uLng7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
eDEgPSAoZWRnZS55MSgpIDwgZWRnZS55MigpKSA/IGVkZ2UueDEoKSA6IGVkZ2UueDIoKTsKKyAg
ICAgICAgCisgICAgICAgIGlmIChlZGdlLm1heFkoKSA+IHkyKSB7CisgICAgICAgICAgICBjb21w
dXRlWEludGVyc2VjdGlvbihvdmVybGFwcGluZ0VkZ2VzW2ldLCB5MiwgaW50ZXJzZWN0aW9uKTsK
KyAgICAgICAgICAgIHgyID0gaW50ZXJzZWN0aW9uLng7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgeDIgPSAoZWRnZS55MSgpID4gZWRnZS55MigpKSA/IGVkZ2UueDEoKSA6IGVkZ2UueDIo
KTsKKyAgICAgICAgCisgICAgICAgIGlmICh4MSA+IHgyKSAvLyBGSVhNRTogSW50ZXJ2YWwgY29u
c3RydWN0b3Igc2hvdWxkIGRvIHRoaXMKKyAgICAgICAgICAgIHN0ZDo6c3dhcCh4MSwgeDIpOwor
ICAgICAgICAKKyAgICAgICAgcnYuYXBwZW5kKFhTSW50ZXJ2YWwoeDEsIHgyKSk7CisgICAgfQor
ICAgIAorICAgIHNvcnRYU0ludGVydmFscyhydik7Cit9CisKK3ZvaWQgWFNQb2x5Z29uOjpnZXRP
dXRzaWRlSW50ZXJ2YWxzKGZsb2F0IHkxLCBmbG9hdCB5MiwgVmVjdG9yPFhTSW50ZXJ2YWw+JiBy
dikgY29uc3QKK3sKKyAgICBpZiAoeTEgPiB5MikKKyAgICAgICAgc3RkOjpzd2FwKHkxLCB5Mik7
CisgICAgCisgICAgVmVjdG9yPFhTSW50ZXJ2YWw+IHYxLCB2MjsKKyAgICBjb21wdXRlWEludGVy
c2VjdGlvbnMoeTEsIHYxKTsKKyAgICBjb21wdXRlWEludGVyc2VjdGlvbnMoeTIsIHYyKTsKKyAg
ICAKKyAgICBWZWN0b3I8WFNJbnRlcnZhbD4gbWVyZ2VkSW50ZXJ2YWxzOworICAgIG1lcmdlWFNJ
bnRlcnZhbHModjEsIHYyLCBtZXJnZWRJbnRlcnZhbHMpOworICAgIAorICAgIFZlY3RvcjxYU0lu
dGVydmFsPiBlZGdlSW50ZXJ2YWxzOworICAgIGNvbXB1dGVFZGdlSW50ZXJzZWN0aW9ucyh5MSwg
eTIsIGVkZ2VJbnRlcnZhbHMpOworICAgIG1lcmdlWFNJbnRlcnZhbHMobWVyZ2VkSW50ZXJ2YWxz
LCBlZGdlSW50ZXJ2YWxzLCBydik7Cit9CisKK3ZvaWQgWFNQb2x5Z29uOjpnZXRJbnNpZGVJbnRl
cnZhbHMoZmxvYXQgeTEsIGZsb2F0IHkyLCBWZWN0b3I8WFNJbnRlcnZhbD4mIHJ2KSBjb25zdAor
eworICAgIGlmICh5MSA+IHkyKQorICAgICAgICBzdGQ6OnN3YXAoeTEsIHkyKTsKKyAgICAKKyAg
ICBWZWN0b3I8WFNJbnRlcnZhbD4gdjEsIHYyOworICAgIGNvbXB1dGVYSW50ZXJzZWN0aW9ucyh5
MSwgdjEpOworICAgIGNvbXB1dGVYSW50ZXJzZWN0aW9ucyh5MiwgdjIpOworICAgIAorICAgIFZl
Y3RvcjxYU0ludGVydmFsPiBjb21tb25JbnRlcnZhbHM7CisgICAgaW50ZXJzZWN0WFNJbnRlcnZh
bHModjEsIHYyLCBjb21tb25JbnRlcnZhbHMpOworICAgIAorICAgIFZlY3RvcjxYU0ludGVydmFs
PiBlZGdlSW50ZXJ2YWxzOworICAgIGNvbXB1dGVFZGdlSW50ZXJzZWN0aW9ucyh5MSwgeTIsIGVk
Z2VJbnRlcnZhbHMpOworICAgIHN1YnRyYWN0WFNJbnRlcnZhbHMoY29tbW9uSW50ZXJ2YWxzLCBl
ZGdlSW50ZXJ2YWxzLCBydik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvWFNQb2x5Z29uLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9YU1BvbHlnb24uaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5jNDJhMjk5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvWFNQb2x5Z29uLmgKQEAgLTAsMCArMSwxMzUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwor
ICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBI
T0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFhTUG9seWdvbl9oCisjZGVmaW5lIFhTUG9seWdvbl9oCisKKyNpbmNsdWRl
ICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJXaW5kUnVsZS5oIgorI2luY2x1ZGUgIlhTaGFwZS5o
IgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBYU0VkZ2U7CitzdHJ1Y3QgWFNFZGdlVHJlZTsK
KworY2xhc3MgWFNQb2x5Z29uIDogcHVibGljIFhTaGFwZSB7ICAgIAorcHVibGljOgorICAgIFhT
UG9seWdvbihQYXNzT3duUHRyPFZlY3RvcjxmbG9hdD4gPiBjb29yZGluYXRlcywgV2luZFJ1bGUg
ZmlsbFJ1bGUpOworCisgICAgZmxvYXQgZ2V0WEF0KHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBt
X2Nvb3JkaW5hdGVzLT5hdChpKjIpOyB9CisgICAgZmxvYXQgZ2V0WUF0KHNpemVfdCBpKSBjb25z
dCB7IHJldHVybiBtX2Nvb3JkaW5hdGVzLT5hdChpKjIgKyAxKTsgfQorICAgIHNpemVfdCBudW1i
ZXJPZlZlcnRpY2VzKCkgY29uc3QgeyByZXR1cm4gbV9jb29yZGluYXRlcy0+c2l6ZSgpIC8gMjsg
fQorICAgIFdpbmRSdWxlIGZpbGxSdWxlKCkgY29uc3QgeyByZXR1cm4gbV9maWxsUnVsZTsgfQor
CisgICAgdmlydHVhbCBGbG9hdFJlY3Qgc2hhcGVCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJu
IG1fYm91bmRpbmdCb3g7IH07CisgICAgdmlydHVhbCB2b2lkIGdldE91dHNpZGVJbnRlcnZhbHMo
ZmxvYXQgeTEsIGZsb2F0IHkyLCBWZWN0b3I8WFNJbnRlcnZhbD4mKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHZvaWQgZ2V0SW5zaWRlSW50ZXJ2YWxzKGZsb2F0IHkxLCBmbG9hdCB5MiwgVmVjdG9yPFhT
SW50ZXJ2YWw+JikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZmxvYXQgcmlnaHRWZXJ0ZXhZKHNp
emVfdCkgY29uc3Q7CisgICAgdm9pZCBjb21wdXRlWEludGVyc2VjdGlvbnMoZmxvYXQgeSwgVmVj
dG9yPFhTSW50ZXJ2YWw+JikgY29uc3Q7IAorICAgIHZvaWQgY29tcHV0ZUVkZ2VJbnRlcnNlY3Rp
b25zKGZsb2F0IHlNaW4sIGZsb2F0IHlNYXgsIFZlY3RvcjxYU0ludGVydmFsPiYpIGNvbnN0OyAK
KworICAgIE93blB0cjxWZWN0b3I8ZmxvYXQ+ID4gbV9jb29yZGluYXRlczsKKyAgICBXaW5kUnVs
ZSBtX2ZpbGxSdWxlOworICAgIEZsb2F0UmVjdCBtX2JvdW5kaW5nQm94OworICAgIFZlY3RvcjxY
U0VkZ2U+IG1fZWRnZXM7CisgICAgT3duUHRyPFhTRWRnZVRyZWU+IG1fZWRnZVRyZWU7Cit9Owor
CitzdHJ1Y3QgWFNFZGdlIHsKKyAgICBjb25zdCBYU1BvbHlnb24qIHBvbHlnb247CisgICAgc2l6
ZV90IGkxOworICAgIHNpemVfdCBpMjsKKyAgICAKKyAgICBYU0VkZ2UoKSAKKyAgICAgICAgOiBw
b2x5Z29uKDApCisgICAgICAgICwgaTEoMCkKKyAgICAgICAgLCBpMigwKSAKKyAgICB7IAorICAg
IH0KKyAgICAKKyAgICBmbG9hdCB4MSgpIGNvbnN0IHsgcmV0dXJuIHBvbHlnb24tPmdldFhBdChp
MSk7IH0KKyAgICBmbG9hdCB5MSgpIGNvbnN0IHsgcmV0dXJuIHBvbHlnb24tPmdldFlBdChpMSk7
IH0KKyAgICBmbG9hdCB4MigpIGNvbnN0IHsgcmV0dXJuIHBvbHlnb24tPmdldFhBdChpMik7IH0K
KyAgICBmbG9hdCB5MigpIGNvbnN0IHsgcmV0dXJuIHBvbHlnb24tPmdldFlBdChpMik7IH0KKwor
ICAgIGZsb2F0IG1pblgoKSBjb25zdCB7IHJldHVybiBzdGQ6Om1pbih4MSgpLCB4MigpKTsgfQor
ICAgIGZsb2F0IG1pblkoKSBjb25zdCB7IHJldHVybiBzdGQ6Om1pbih5MSgpLCB5MigpKTsgfSAK
KyAgICBmbG9hdCBtYXhYKCkgY29uc3QgeyByZXR1cm4gc3RkOjptYXgoeDEoKSwgeDIoKSk7IH0K
KyAgICBmbG9hdCBtYXhZKCkgY29uc3QgeyByZXR1cm4gc3RkOjptYXgoeTEoKSwgeTIoKSk7IH0K
K307CisKK3N0cnVjdCBYU0VkZ2VUcmVlIHsKK3ByaXZhdGU6CisgICAgLy8gRklYTUU6IG1pblN1
YnRyZWVTaXplIC0gZG9uJ3QgYm90aGVyIGNyZWF0aW5nIHN1YnRyZWVzIGZvciBsZXNzIHRoYW4g
TiBlZGdlcworICAgIGZsb2F0IGNlbnRlcjsKKyAgICBWZWN0b3I8WFNFZGdlKj4gb3ZlcmxhcENl
bnRlcjsgCisgICAgT3duUHRyPFhTRWRnZVRyZWU+IGFib3ZlQ2VudGVyOyAKKyAgICBPd25QdHI8
WFNFZGdlVHJlZT4gYmVsb3dDZW50ZXI7CisgICAgCisgICAgc3RhdGljIHZvaWQgaW5pdEVkZ2VU
cmVlKFhTRWRnZVRyZWUqLCBjb25zdCBWZWN0b3I8WFNFZGdlKj4mIHNvcnRlZEVkZ2VzKTsKKyAg
ICAKK3B1YmxpYzoKKyAgICBYU0VkZ2VUcmVlKGNvbnN0IFZlY3RvcjxYU0VkZ2UqPiYgc29ydGVk
RWRnZXMpOworCisgICAgdm9pZCBmaW5kRWRnZXNUaGF0T3ZlcmxhcFkoZmxvYXQgeSwgVmVjdG9y
PFhTRWRnZSo+JikgY29uc3Q7CisgICAgdm9pZCBmaW5kRWRnZXNUaGF0T3ZlcmxhcEludGVydmFs
KGZsb2F0IG1pblksIGZsb2F0IG1heFksIFZlY3RvcjxYU0VkZ2UqPiYpIGNvbnN0OworfTsKKwor
ZW51bSBYU0ludGVyc2VjdGlvblR5cGUgeworICAgIE5vcm1hbCA9IDAsCisgICAgVmVydGV4WU1p
biA9IDEsCisgICAgVmVydGV4WU1heCA9IDIsCisgICAgVmVydGV4WUJvdGggPSAzCit9OworCitz
dHJ1Y3QgWFNJbnRlcnNlY3Rpb24geworICAgIGNvbnN0IFhTRWRnZSogZWRnZTsKKyAgICBmbG9h
dCB4OworICAgIGZsb2F0IHk7CisgICAgWFNJbnRlcnNlY3Rpb25UeXBlIHR5cGU7CisgICAgCisg
ICAgWFNJbnRlcnNlY3Rpb24oKSAKKyAgICAgICAgOiBlZGdlKDApCisgICAgICAgICwgeCgwKQor
ICAgICAgICAsIHkoMCkKKyAgICAgICAgLCB0eXBlKE5vcm1hbCkgCisgICAgeyAKKyAgICB9Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBYU1BvbHlnb25faApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvWFNSZWN0YW5nbGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvWFNSZWN0YW5nbGUuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlZmZjOWMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9YU1JlY3RhbmdsZS5jcHAKQEAgLTAs
MCArMSwxMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNv
cnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUK
KyAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiWFNSZWN0
YW5nbGUuaCIKKworI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKKy8vIFNlZSBodHRwOi8v
aGFuc211bGxlci13ZWJraXQuYmxvZ3Nwb3QuY29tLzIwMTIvMDcvY29tcHV0aW5nLWhvcml6b25h
bC1yb3VuZGVkLXJlY3RhbmdsZS5odG1sCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGlj
IGlubGluZSBmbG9hdCBlbGxpcHNlWEludGVyY2VwdChmbG9hdCB5LCBmbG9hdCByeCwgZmxvYXQg
cnkpIAoreworICAgIEFTU0VSVChyeSA+IDApOworICAgIHJldHVybiByeCAqIHNxcnQoMSAtICh5
KnkpIC8gKHJ5KnJ5KSk7Cit9CisKK3ZvaWQgWFNSZWN0YW5nbGU6OmdldE91dHNpZGVJbnRlcnZh
bHMoZmxvYXQgeTEsIGZsb2F0IHkyLCBWZWN0b3I8WFNJbnRlcnZhbD4mIHJ2KSBjb25zdAorewor
ICAgIGlmICh5MSA+IHkyKQorICAgICAgICBzdGQ6OnN3YXAoeTEsIHkyKTsKKworICAgIGlmICh5
MiA8IG1feSB8fCB5MSA+PSBtX3kgKyBtX2hlaWdodCkKKyAgICAgICAgcmV0dXJuOworICAgIAor
ICAgIGZsb2F0IHgxID0gbV94OworICAgIGZsb2F0IHgyID0gbV94ICsgbV93aWR0aDsKKyAgICAK
KyAgICBpZiAobV9yeSA+IDApIHsKKyAgICAgICAgaWYgKHkyIDwgbV95ICsgbV9yeSkgeworICAg
ICAgICAgICAgZmxvYXQgeWkgPSB5MiAtIG1feSAtIG1fcnk7CisgICAgICAgICAgICBmbG9hdCB4
aSA9IGVsbGlwc2VYSW50ZXJjZXB0KHlpLCBtX3J4LCBtX3J5KTsKKyAgICAgICAgICAgIHgxID0g
bV94ICsgbV9yeCAtIHhpOworICAgICAgICAgICAgeDIgPSBtX3ggKyBtX3dpZHRoIC0gbV9yeCAr
IHhpOworICAgICAgICB9IGVsc2UgaWYgKHkxID4gbV95ICsgbV9oZWlnaHQgLSBtX3J5KSB7Cisg
ICAgICAgICAgICBmbG9hdCB5aSA9ICB5MSAtIChtX3kgKyBtX2hlaWdodCAtIG1fcnkpOworICAg
ICAgICAgICAgZmxvYXQgeGkgPSBlbGxpcHNlWEludGVyY2VwdCh5aSwgbV9yeCwgbV9yeSk7Cisg
ICAgICAgICAgICB4MSA9IG1feCArIG1fcnggLSB4aTsKKyAgICAgICAgICAgIHgyID0gbV94ICsg
bV93aWR0aCAtIG1fcnggKyB4aTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBydi5hcHBl
bmQoWFNJbnRlcnZhbCh4MSwgeDIpKTsKK30KKwordm9pZCBYU1JlY3RhbmdsZTo6Z2V0SW5zaWRl
SW50ZXJ2YWxzKGZsb2F0IHkxLCBmbG9hdCB5MiwgVmVjdG9yPFhTSW50ZXJ2YWw+JiBydikgY29u
c3QKK3sKKyAgICBpZiAoeTEgPiB5MikKKyAgICAgICAgc3RkOjpzd2FwKHkxLCB5Mik7CisKKyAg
ICBpZiAoeTEgPCBtX3kgfHwgeTIgPj0gbV95ICsgbV9oZWlnaHQpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBmbG9hdCB4MSA9IG1feDsKKyAgICBmbG9hdCB4MiA9IG1feCArIG1fd2lkdGg7
CisgICAgCisgICAgaWYgKG1fcnkgPiAwKSB7CisgICAgICAgIGJvb2wgeTFJbnRlcmNlcHRzQ29y
bmVyID0geTEgPCBtX3kgKyBtX3J5OworICAgICAgICBib29sIHkySW50ZXJjZXB0c0Nvcm5lciA9
IHkyID4gbV95ICsgbV9oZWlnaHQgLSBtX3J5OworICAgICAgICBmbG9hdCB4aTsKKworICAgICAg
ICBpZiAoeTFJbnRlcmNlcHRzQ29ybmVyICYmIHkySW50ZXJjZXB0c0Nvcm5lcikgeworICAgICAg
ICAgICAgaWYgICh5MSA8IG1faGVpZ2h0ICsgMiptX3kgLSB5MikgeyAKKyAgICAgICAgICAgICAg
ICBmbG9hdCB5aSA9IHkxIC0gbV95IC0gbV9yeTsKKyAgICAgICAgICAgICAgICB4aSA9IGVsbGlw
c2VYSW50ZXJjZXB0KHlpLCBtX3J4LCBtX3J5KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgZmxvYXQgeWkgPSAgeTIgLSAobV95ICsgbV9oZWlnaHQgLSBtX3J5KTsKKyAg
ICAgICAgICAgICAgICB4aSA9IGVsbGlwc2VYSW50ZXJjZXB0KHlpLCBtX3J4LCBtX3J5KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICh5MUludGVyY2VwdHNDb3JuZXIpIHsKKyAg
ICAgICAgICAgIGZsb2F0IHlpID0geTEgLSBtX3kgLSBtX3J5OworICAgICAgICAgICAgeGkgPSBl
bGxpcHNlWEludGVyY2VwdCh5aSwgbV9yeCwgbV9yeSk7CisgICAgICAgIH0gZWxzZSBpZiAoeTJJ
bnRlcmNlcHRzQ29ybmVyKSB7CisgICAgICAgICAgICBmbG9hdCB5aSA9ICB5MiAtIChtX3kgKyBt
X2hlaWdodCAtIG1fcnkpOworICAgICAgICAgICAgeGkgPSBlbGxpcHNlWEludGVyY2VwdCh5aSwg
bV9yeCwgbV9yeSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoeTFJbnRlcmNlcHRzQ29ybmVy
IHx8IHkySW50ZXJjZXB0c0Nvcm5lcikgeworICAgICAgICAgICAgeDEgPSBtX3ggKyBtX3J4IC0g
eGk7CisgICAgICAgICAgICB4MiA9IG1feCArIG1fd2lkdGggLSBtX3J4ICsgeGk7CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgcnYuYXBwZW5kKFhTSW50ZXJ2YWwoeDEsIHgyKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvWFNSZWN0YW5nbGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1hTUmVjdGFuZ2xlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
Y2JlNWYwOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1hTUmVjdGFuZ2xlLmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZworICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IK
KyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICog
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgWFNSZWN0
YW5nbGVfaAorI2RlZmluZSBYU1JlY3RhbmdsZV9oCisKKyNpbmNsdWRlICJYU2hhcGUuaCIKKyNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBYU1JlY3RhbmdsZSA6IHB1YmxpYyBYU2hhcGUgewor
cHVibGljOgorICAgIFhTUmVjdGFuZ2xlKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHdpZHRoLCBm
bG9hdCBoZWlnaHQsIGZsb2F0IHJ4ID0gMCwgZmxvYXQgcnkgPSAwKSAKKyAgICAgICAgOiBYU2hh
cGUoKQorICAgICAgICAsIG1feCh4KQorICAgICAgICAsIG1feSh5KQorICAgICAgICAsIG1fd2lk
dGgod2lkdGgpCisgICAgICAgICwgbV9oZWlnaHQoaGVpZ2h0KQorICAgICAgICAsIG1fcngocngp
CisgICAgICAgICwgbV9yeShyeSkgCisgICAgeworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIEZs
b2F0UmVjdCBzaGFwZUJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gRmxvYXRSZWN0KG1feCwg
bV95LCBtX3dpZHRoLCBtX2hlaWdodCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZ2V0T3V0c2lkZUlu
dGVydmFscyhmbG9hdCB5MSwgZmxvYXQgeTIsIFZlY3RvcjxYU0ludGVydmFsPiYpIGNvbnN0Owor
ICAgIHZpcnR1YWwgdm9pZCBnZXRJbnNpZGVJbnRlcnZhbHMoZmxvYXQgeTEsIGZsb2F0IHkyLCBW
ZWN0b3I8WFNJbnRlcnZhbD4mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBmbG9hdCBtX3g7Cisg
ICAgZmxvYXQgbV95OworICAgIGZsb2F0IG1fd2lkdGg7CisgICAgZmxvYXQgbV9oZWlnaHQ7Cisg
ICAgZmxvYXQgbV9yeDsKKyAgICBmbG9hdCBtX3J5OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gWFNSZWN0YW5nbGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvWFNoYXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1hTaGFwZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
N2FkODE4NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1hTaGFwZS5jcHAKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcK
KyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisg
KiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiWFNoYXBlLmgiCisKKyNpbmNsdWRlICJCYXNpY1NoYXBlRnVuY3Rpb25z
LmgiCisjaW5jbHVkZSAiTGVuZ3RoRnVuY3Rpb25zLmgiCisjaW5jbHVkZSAiV2luZFJ1bGUuaCIK
KyNpbmNsdWRlICJYU1BvbHlnb24uaCIKKyNpbmNsdWRlICJYU1JlY3RhbmdsZS5oIgorI2luY2x1
ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFBhc3NP
d25QdHI8WFNoYXBlPiBjcmVhdGVYU1JlY3RhbmdsZShmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB3
aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCByeCwgZmxvYXQgcnkpIAoreworICAgIEFTU0VSVCh3
aWR0aCA+PSAwICYmIGhlaWdodCA+PSAwICYmIHJ4ID49IDAgJiYgcnkgPj0gMCk7CisgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBYU1JlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCByeCwgcnkp
KTsKK30KKworc3RhdGljIFBhc3NPd25QdHI8WFNoYXBlPiBjcmVhdGVYU0NpcmNsZShmbG9hdCBj
eCwgZmxvYXQgY3ksIGZsb2F0IHJhZGl1cykgCit7CisgICAgQVNTRVJUKHJhZGl1cyA+PSAwKTsK
KyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFhTUmVjdGFuZ2xlKGN4IC0gcmFkaXVzLCBjeSAtIHJh
ZGl1cywgY3ggKyByYWRpdXMsIGN5ICsgcmFkaXVzLCByYWRpdXMsIHJhZGl1cykpOworfQorCitz
dGF0aWMgUGFzc093blB0cjxYU2hhcGU+IGNyZWF0ZVhTRWxsaXBzZShmbG9hdCBjeCwgZmxvYXQg
Y3ksIGZsb2F0IHJ4LCBmbG9hdCByeSkgCit7CisgICAgQVNTRVJUKHJ4ID49IDAgJiYgcnkgPj0g
MCk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBYU1JlY3RhbmdsZShjeCAtIHJ4LCBjeSAtIHJ5
LCBjeCArIHJ4LCBjeSArIHJ5LCByeCwgcnkpKTsKK30KKworc3RhdGljIFBhc3NPd25QdHI8WFNo
YXBlPiBjcmVhdGVYU1BvbHlnb24oUGFzc093blB0cjxWZWN0b3I8ZmxvYXQ+ID4gY29vcmRpbmF0
ZXMsIFdpbmRSdWxlIGZpbGxSdWxlKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgWFNQb2x5
Z29uKGNvb3JkaW5hdGVzLCBmaWxsUnVsZSkpOworfQorCitQYXNzT3duUHRyPFhTaGFwZT4gWFNo
YXBlOjpjcmVhdGVYU2hhcGUoY29uc3QgQmFzaWNTaGFwZSogd3JhcFNoYXBlLCBmbG9hdCBib3hX
aWR0aCwgZmxvYXQgYm94SGVpZ2h0KQoreworICAgIGlmICghd3JhcFNoYXBlKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIHN3aXRjaCAod3JhcFNoYXBlLT50eXBlKCkpIHsKKyAgICBj
YXNlIEJhc2ljU2hhcGU6OkJBU0lDX1NIQVBFX1JFQ1RBTkdMRTogeworICAgICAgICBjb25zdCBC
YXNpY1NoYXBlUmVjdGFuZ2xlKiByZWN0YW5nbGUgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY1No
YXBlUmVjdGFuZ2xlKj4od3JhcFNoYXBlKTsKKyAgICAgICAgTGVuZ3RoIHJ4ID0gcmVjdGFuZ2xl
LT5jb3JuZXJSYWRpdXNYKCk7CisgICAgICAgIExlbmd0aCByeSA9IHJlY3RhbmdsZS0+Y29ybmVy
UmFkaXVzWSgpOworICAgICAgICByZXR1cm4gY3JlYXRlWFNSZWN0YW5nbGUoCisgICAgICAgICAg
ICBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJlY3RhbmdsZS0+eCgpLCBib3hXaWR0aCksCisgICAgICAg
ICAgICBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJlY3RhbmdsZS0+eSgpLCBib3hIZWlnaHQpLAorICAg
ICAgICAgICAgZmxvYXRWYWx1ZUZvckxlbmd0aChyZWN0YW5nbGUtPndpZHRoKCksIGJveFdpZHRo
KSwKKyAgICAgICAgICAgIGZsb2F0VmFsdWVGb3JMZW5ndGgocmVjdGFuZ2xlLT5oZWlnaHQoKSwg
Ym94SGVpZ2h0KSwKKyAgICAgICAgICAgIHJ4LmlzVW5kZWZpbmVkKCkgPyAwIDogZmxvYXRWYWx1
ZUZvckxlbmd0aChyeCwgYm94V2lkdGgpLAorICAgICAgICAgICAgcnkuaXNVbmRlZmluZWQoKSA/
IDAgOiBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJ5LCBib3hIZWlnaHQpICk7CisgICAgfQorCisgICAg
Y2FzZSBCYXNpY1NoYXBlOjpCQVNJQ19TSEFQRV9DSVJDTEU6IHsKKyAgICAgICAgY29uc3QgQmFz
aWNTaGFwZUNpcmNsZSogY2lyY2xlID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNTaGFwZUNpcmNs
ZSo+KHdyYXBTaGFwZSk7CisgICAgICAgIHJldHVybiBjcmVhdGVYU0NpcmNsZSgKKyAgICAgICAg
ICAgIGZsb2F0VmFsdWVGb3JMZW5ndGgoY2lyY2xlLT5jZW50ZXJYKCksIGJveFdpZHRoKSwKKyAg
ICAgICAgICAgIGZsb2F0VmFsdWVGb3JMZW5ndGgoY2lyY2xlLT5jZW50ZXJZKCksIGJveEhlaWdo
dCksCisgICAgICAgICAgICBmbG9hdFZhbHVlRm9yTGVuZ3RoKGNpcmNsZS0+cmFkaXVzKCksIHN0
ZDo6bWF4KGJveEhlaWdodCwgYm94V2lkdGgpKSApOworICAgIH0KKworICAgIGNhc2UgQmFzaWNT
aGFwZTo6QkFTSUNfU0hBUEVfRUxMSVBTRTogeworICAgICAgICBjb25zdCBCYXNpY1NoYXBlRWxs
aXBzZSogZWxsaXBzZSA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljU2hhcGVFbGxpcHNlKj4od3Jh
cFNoYXBlKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVhTRWxsaXBzZSgKKyAgICAgICAgICAgIGZs
b2F0VmFsdWVGb3JMZW5ndGgoZWxsaXBzZS0+Y2VudGVyWCgpLCBib3hXaWR0aCksCisgICAgICAg
ICAgICBmbG9hdFZhbHVlRm9yTGVuZ3RoKGVsbGlwc2UtPmNlbnRlclkoKSwgYm94SGVpZ2h0KSwK
KyAgICAgICAgICAgIGZsb2F0VmFsdWVGb3JMZW5ndGgoZWxsaXBzZS0+cmFkaXVzWCgpLCBib3hX
aWR0aCksCisgICAgICAgICAgICBmbG9hdFZhbHVlRm9yTGVuZ3RoKGVsbGlwc2UtPnJhZGl1c1ko
KSwgYm94SGVpZ2h0KSApOworICAgIH0KKworICAgIGNhc2UgQmFzaWNTaGFwZTo6QkFTSUNfU0hB
UEVfUE9MWUdPTjogeworICAgICAgICBjb25zdCBCYXNpY1NoYXBlUG9seWdvbiogcG9seWdvbiA9
IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljU2hhcGVQb2x5Z29uKj4od3JhcFNoYXBlKTsKKyAgICAg
ICAgY29uc3QgVmVjdG9yPExlbmd0aD4mIHZhbHVlcyA9IHBvbHlnb24tPnZhbHVlcygpOworICAg
ICAgICBzaXplX3QgdmFsdWVzU2l6ZSA9IHZhbHVlcy5zaXplKCk7CisgICAgICAgIFZlY3Rvcjxm
bG9hdD4gKmN2ID0gbmV3IFZlY3RvcjxmbG9hdD4odmFsdWVzU2l6ZSk7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZXNTaXplOyBpICs9IDIpIHsKKyAgICAgICAgICAgIGN2
LT5hdChpKSA9IGZsb2F0VmFsdWVGb3JMZW5ndGgodmFsdWVzLmF0KGkpLCBib3hXaWR0aCk7Cisg
ICAgICAgICAgICBjdi0+YXQoaSsxKSA9IGZsb2F0VmFsdWVGb3JMZW5ndGgodmFsdWVzLmF0KGkr
MSksIGJveEhlaWdodCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNyZWF0ZVhTUG9seWdv
bihhZG9wdFB0cihjdiksIHBvbHlnb24tPndpbmRSdWxlKCkpOworICAgIH0KKworICAgIGRlZmF1
bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvWFNoYXBl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9YU2hhcGUuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTRkMGYzCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvWFNoYXBlLmgKQEAgLTAsMCArMSw1NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
CisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMKKyAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hU
IEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgWFNoYXBlX2gKKyNkZWZpbmUgWFNoYXBlX2gKKworI2luY2x1ZGUgIkJh
c2ljU2hhcGVzLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiWFNJbnRlcnZh
bC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFhTaGFwZSB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NPd25QdHI8WFNoYXBlPiBjcmVhdGVYU2hhcGUoY29uc3QgQmFzaWNTaGFwZSos
IGZsb2F0IGJvcmRlckJveFdpZHRoLCBmbG9hdCBib3JkZXJCb3hIZWlnaHQpOworCisgICAgdmly
dHVhbCB+WFNoYXBlKCkgeyB9CisKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzaGFwZUJvdW5kaW5n
Qm94KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXRJbnNpZGVJbnRlcnZhbHMoZmxv
YXQgeU1pbiwgZmxvYXQgeU1heCwgVmVjdG9yPFhTSW50ZXJ2YWw+JikgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBnZXRPdXRzaWRlSW50ZXJ2YWxzKGZsb2F0IHlNaW4sIGZsb2F0IHlNYXgs
IFZlY3RvcjxYU0ludGVydmFsPiYpIGNvbnN0ID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFhTaGFwZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCmluZGV4IDhiOTYwZjAuLjJmYmRlZTYgMTAw
NzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQu
Y3BwCkBAIC0xMzIyLDggKzEzMjIsMTEgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UnVuc0Fu
ZEZsb2F0c0luUmFuZ2UoTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgSW5saW4KICNpZiBF
TkFCTEUoQ1NTX0VYQ0xVU0lPTlMpCiAgICAgICAgIC8vIEZJWE1FOiBCdWcgODk5OTM6IElmIHRo
ZSB3cmFwIHNoYXBlIGNvbWVzIGZyb20gYSBwYXJlbnQsIHdlIHdpbGwgbmVlZCB0byBhZGp1c3QK
ICAgICAgICAgLy8gdGhlIGhlaWdodCBjb29yZGluYXRlCi0gICAgICAgIGlmICh3cmFwU2hhcGVJ
bmZvKQotICAgICAgICAgICAgd3JhcFNoYXBlSW5mby0+Y29tcHV0ZVNlZ21lbnRzRm9yTGluZShs
b2dpY2FsSGVpZ2h0KCkpOworICAgICAgICBpZiAod3JhcFNoYXBlSW5mbykgeworICAgICAgICAg
ICAgTGF5b3V0VW5pdCBsaW5lVG9wID0gbG9naWNhbEhlaWdodCgpOworICAgICAgICAgICAgTGF5
b3V0VW5pdCBsaW5lQm90dG9tID0gbGluZVRvcCArIGxpbmVIZWlnaHQodHJ1ZSwgaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSA/IEhvcml6b250YWxMaW5lIDogVmVydGljYWxMaW5lLCBQb3NpdGlv
bk9mSW50ZXJpb3JMaW5lQm94ZXMpOworICAgICAgICAgICAgd3JhcFNoYXBlSW5mby0+Y29tcHV0
ZVNlZ21lbnRzRm9yTGluZShsaW5lVG9wLCBsaW5lQm90dG9tKTsKKyAgICAgICAgfQogI2VuZGlm
CiAgICAgICAgIGVuZCA9IGxpbmVCcmVha2VyLm5leHRMaW5lQnJlYWsocmVzb2x2ZXIsIGxheW91
dFN0YXRlLmxpbmVJbmZvKCksIHJlbmRlclRleHRJbmZvLCBsYXN0RmxvYXRGcm9tUHJldmlvdXNM
aW5lLCBjb25zZWN1dGl2ZUh5cGhlbmF0ZWRMaW5lcyk7CiAgICAgICAgIGlmIChyZXNvbHZlci5w
b3NpdGlvbigpLmF0RW5kKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9XcmFwU2hhcGVJbmZvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9XcmFwU2hhcGVJ
bmZvLmNwcAppbmRleCA4ZWY3M2M3Li42ZjBlMzljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvV3JhcFNoYXBlSW5mby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1dyYXBTaGFwZUluZm8uY3BwCkBAIC0xMDUsMzcgKzEwNSwyOSBAQCB2b2lkIFdyYXBTaGFw
ZUluZm86OmNvbXB1dGVTaGFwZVNpemUoTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgsIExheW91dFVu
aXQgbG9naWNhbAogCiAgICAgLy8gRklYTUU6IEJ1ZyA4OTk5MzogVGhlIHdyYXAgc2hhcGUgbWF5
IGNvbWUgZnJvbSB0aGUgcGFyZW50IG9iamVjdAogICAgIEJhc2ljU2hhcGUqIHNoYXBlID0gbV9i
bG9jay0+c3R5bGUoKS0+d3JhcFNoYXBlSW5zaWRlKCk7Ci0KICAgICBBU1NFUlQoc2hhcGUpOwog
Ci0gICAgc3dpdGNoIChzaGFwZS0+dHlwZSgpKSB7Ci0gICAgY2FzZSBCYXNpY1NoYXBlOjpCQVNJ
Q19TSEFQRV9SRUNUQU5HTEU6IHsKLSAgICAgICAgQmFzaWNTaGFwZVJlY3RhbmdsZSogcmVjdCA9
IHN0YXRpY19jYXN0PEJhc2ljU2hhcGVSZWN0YW5nbGUgKj4oc2hhcGUpOwotICAgICAgICBtX3No
YXBlTGVmdCA9IHZhbHVlRm9yTGVuZ3RoKHJlY3QtPngoKSwgbV9sb2dpY2FsV2lkdGgpOwotICAg
ICAgICBtX3NoYXBlV2lkdGggPSB2YWx1ZUZvckxlbmd0aChyZWN0LT53aWR0aCgpLCBtX2xvZ2lj
YWxXaWR0aCk7Ci0gICAgICAgIG1fc2hhcGVUb3AgPSB2YWx1ZUZvckxlbmd0aChyZWN0LT55KCks
IG1fbG9naWNhbEhlaWdodCk7Ci0gICAgICAgIG1fc2hhcGVIZWlnaHQgPSB2YWx1ZUZvckxlbmd0
aChyZWN0LT5oZWlnaHQoKSwgbV9sb2dpY2FsSGVpZ2h0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIC8vIEZJWE1FOiBCdWcgODk3MDc6IEVuYWJsZSBzaGFwZSBpbnNpZGUgZm9yIG5vbi1y
ZWN0YW5ndWxhciBzaGFwZXMKLSAgICBjYXNlIEJhc2ljU2hhcGU6OkJBU0lDX1NIQVBFX0NJUkNM
RToKLSAgICBjYXNlIEJhc2ljU2hhcGU6OkJBU0lDX1NIQVBFX0VMTElQU0U6Ci0gICAgY2FzZSBC
YXNpY1NoYXBlOjpCQVNJQ19TSEFQRV9QT0xZR09OOiB7Ci0gICAgICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICB9CisgICAgbV94c2hhcGUgPSBYU2hhcGU6
OmNyZWF0ZVhTaGFwZShzaGFwZSwgbG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KTsKKyAgICBB
U1NFUlQobV94c2hhcGUpOwogfQogCi1ib29sIFdyYXBTaGFwZUluZm86OmNvbXB1dGVTZWdtZW50
c0ZvckxpbmUoTGF5b3V0VW5pdCBsaW5lVG9wKQorYm9vbCBXcmFwU2hhcGVJbmZvOjpjb21wdXRl
U2VnbWVudHNGb3JMaW5lKExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9t
KQogewogICAgIG1fbGluZVRvcCA9IGxpbmVUb3A7CiAgICAgbV9zZWdtZW50cy5jbGVhcigpOwor
CiAgICAgaWYgKGxpbmVTdGF0ZSgpID09IExJTkVfSU5TSURFX1NIQVBFKSB7Ci0gICAgICAgIExp
bmVTZWdtZW50IHNlZ21lbnQ7Ci0gICAgICAgIHNlZ21lbnQubG9naWNhbExlZnQgPSBtX3NoYXBl
TGVmdDsKLSAgICAgICAgc2VnbWVudC5sb2dpY2FsUmlnaHQgPSBtX3NoYXBlTGVmdCArIG1fc2hh
cGVXaWR0aDsKLSAgICAgICAgbV9zZWdtZW50cy5hcHBlbmQoc2VnbWVudCk7CisgICAgICAgIEFT
U0VSVChtX3hzaGFwZSk7CisKKyAgICAgICAgbGluZUJvdHRvbSA9IGxpbmVUb3A7IC8vIEZJWE1F
OiBCdWcgOTU0NzksIHdvcmthcm91bmQgZm9yIG5vdworICAgICAgICBWZWN0b3I8WFNJbnRlcnZh
bD4gaW50ZXJ2YWxzOworICAgICAgICBtX3hzaGFwZS0+Z2V0SW5zaWRlSW50ZXJ2YWxzKGxpbmVU
b3AsIGxpbmVCb3R0b20sIGludGVydmFscyk7ICAKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBpbnRlcnZhbHMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIExpbmVTZWdtZW50IHNl
Z21lbnQ7CisgICAgICAgICAgICBzZWdtZW50LmxvZ2ljYWxMZWZ0ID0gaW50ZXJ2YWxzW2ldLngx
OworICAgICAgICAgICAgc2VnbWVudC5sb2dpY2FsUmlnaHQgPSBpbnRlcnZhbHNbaV0ueDI7Cisg
ICAgICAgICAgICBtX3NlZ21lbnRzLmFwcGVuZChzZWdtZW50KTsKKyAgICAgICAgfQogICAgIH0K
ICAgICByZXR1cm4gbV9zZWdtZW50cy5zaXplKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvV3JhcFNoYXBlSW5mby5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1dyYXBTaGFwZUluZm8uaAppbmRleCBhODAzNmQwLi44OGZkNTJmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvV3JhcFNoYXBlSW5mby5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9XcmFwU2hhcGVJbmZvLmgKQEAgLTMyLDcgKzMyLDEwIEBACiAKICNpZiBFTkFC
TEUoQ1NTX0VYQ0xVU0lPTlMpCiAKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJM
YXlvdXRUeXBlc0lubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJYU2hhcGUuaCIKKyNpbmNsdWRl
IDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAKQEAgLTY0LDE0ICs2NywxOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZv
aWQgcmVtb3ZlV3JhcFNoYXBlSW5mb0ZvclJlbmRlckJsb2NrKGNvbnN0IFJlbmRlckJsb2NrKik7
CiAgICAgc3RhdGljIGJvb2wgaXNXcmFwU2hhcGVJbmZvRW5hYmxlZEZvclJlbmRlckJsb2NrKGNv
bnN0IFJlbmRlckJsb2NrKik7CiAKLSAgICBMYXlvdXRVbml0IHNoYXBlVG9wKCkgY29uc3QgeyBy
ZXR1cm4gbV9zaGFwZVRvcDsgfQorICAgIExheW91dFVuaXQgc2hhcGVUb3AoKSBjb25zdCAKKyAg
ICB7IAorICAgICAgICBBU1NFUlQobV94c2hhcGUpOworICAgICAgICByZXR1cm4gbV94c2hhcGUt
PnNoYXBlQm91bmRpbmdCb3goKS55KCk7CisgICAgfQogICAgIGJvb2wgaGFzU2VnbWVudHMoKSBj
b25zdDsKICAgICBjb25zdCBTZWdtZW50TGlzdCYgc2VnbWVudHMoKSBjb25zdAogICAgIHsKICAg
ICAgICAgQVNTRVJUKGhhc1NlZ21lbnRzKCkpOwogICAgICAgICByZXR1cm4gbV9zZWdtZW50czsK
ICAgICB9Ci0gICAgYm9vbCBjb21wdXRlU2VnbWVudHNGb3JMaW5lKExheW91dFVuaXQpOworICAg
IGJvb2wgY29tcHV0ZVNlZ21lbnRzRm9yTGluZShMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVu
aXQgbGluZUJvdHRvbSk7CiAgICAgTGluZVN0YXRlIGxpbmVTdGF0ZSgpIGNvbnN0OwogICAgIHZv
aWQgY29tcHV0ZVNoYXBlU2l6ZShMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCwgTGF5b3V0VW5pdCBs
b2dpY2FsSGVpZ2h0KTsKICAgICB2b2lkIGRpcnR5V3JhcFNoYXBlU2l6ZSgpIHsgbV93cmFwU2hh
cGVTaXplRGlydHkgPSB0cnVlOyB9CkBAIC04MCwxMCArODcsNyBAQCBwcml2YXRlOgogICAgIFdy
YXBTaGFwZUluZm8oUmVuZGVyQmxvY2sqKTsKIAogICAgIFJlbmRlckJsb2NrKiBtX2Jsb2NrOwot
ICAgIExheW91dFVuaXQgbV9zaGFwZUxlZnQ7Ci0gICAgTGF5b3V0VW5pdCBtX3NoYXBlVG9wOwot
ICAgIExheW91dFVuaXQgbV9zaGFwZVdpZHRoOwotICAgIExheW91dFVuaXQgbV9zaGFwZUhlaWdo
dDsKKyAgICBPd25QdHI8WFNoYXBlPiBtX3hzaGFwZTsKIAogICAgIExheW91dFVuaXQgbV9saW5l
VG9wOwogICAgIExheW91dFVuaXQgbV9sb2dpY2FsV2lkdGg7CkBAIC05NSwxMCArOTksMTUgQEAg
cHJpdmF0ZToKIAogaW5saW5lIFdyYXBTaGFwZUluZm86OkxpbmVTdGF0ZSBXcmFwU2hhcGVJbmZv
OjpsaW5lU3RhdGUoKSBjb25zdAogewotICAgIGlmIChtX2xpbmVUb3AgPCBtX3NoYXBlVG9wKQor
ICAgIEFTU0VSVChtX3hzaGFwZSk7CisgICAgRmxvYXRSZWN0IHNoYXBlQm91bmRzID0gbV94c2hh
cGUtPnNoYXBlQm91bmRpbmdCb3goKTsKKworICAgIGlmIChtX2xpbmVUb3AgPCBzaGFwZUJvdW5k
cy55KCkpCiAgICAgICAgIHJldHVybiBMSU5FX0JFRk9SRV9TSEFQRTsKLSAgICBpZiAobV9saW5l
VG9wIDwgbV9zaGFwZVRvcCArIG1fc2hhcGVIZWlnaHQpCisKKyAgICBpZiAobV9saW5lVG9wIDwg
c2hhcGVCb3VuZHMubWF4WSgpKQogICAgICAgICByZXR1cm4gTElORV9JTlNJREVfU0hBUEU7CisK
ICAgICByZXR1cm4gTElORV9BRlRFUl9TSEFQRTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161744</attachid>
            <date>2012-08-31 11:50:08 -0700</date>
            <delta_ts>2012-08-31 13:51:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>tmp.patch</filename>
            <type>text/plain</type>
            <size>61228</size>
            <attacher name="Hans Muller">giles_joplin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggYjExM2IzZi4uZTM5YWJmMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTE4NjMsNiArMTg2MywxMCBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJh
Y2tpbmdTdG9yZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL1hTSW50ZXJ2YWwuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvWFNQb2x5Z29uLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1hTUmVjdGFuZ2xlLmNwcAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL1hTaGFwZS5jcHAKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvQ3VzdG9tRmlsdGVyQ29tcGlsZWRQcm9ncmFtLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dC5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRl
eCAwNGRjZDI1Li5hYTEwMmQ5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyMCBAQAorMjAxMi0w
OC0zMSAgSGFucyBNdWxsZXIgIDxobXVsbGVyQGFkb2JlLmNvbT4KKworICAgICAgICBbQ1NTIEV4
bHVzaW9uc10gYWRkIHN1cHBvcnQgZm9yIHRoZSBiYXNpYyBzaGFwZXMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NDkwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5pdGlhbCBjb21taXQgb2YgdGhlIENT
UyBFeGNsdXNpb25zIFNoYXBlcyBjbGFzc2VzLiBUaGV5J3JlIGJhc2VkIG9uIHRoZSAiQmFzaWMg
U2hhcGVzIiBzZWN0aW9uIG9mIHRoZQorICAgICAgICBDU1MgRXhjbHVzaW9ucyBzcGVjIC0gaHR0
cDovL2Rldi53My5vcmcvY3Nzd2cvY3NzMy1leGNsdXNpb25zLyNiYXNpYy1zaGFwZXMtZnJvbS1z
dmctc3ludGF4LgorCisgICAgICAgIFRoaXMgc2V0IG9mIGNsYXNzZXMgZW5hYmxlcyB0aGUgZXhj
bHVzaW9ucyBsYXlvdXQgY29kZSB0byBkZXRlcm1pbmUgaG93IHRvIGJyZWFrIHVwIGEgbGluZSBp
bnRvIHNlZ2VtZW50cworICAgICAgICB0aGF0IHdpbGwgZml0IHdpdGhpbiBvciBhcm91bmQgYSBz
aGFwZSwgZ2l2ZW4gdGhlIFkgY29vcmRpbmF0ZXMgb2YgdGhlIGxpbmUncyB0b3AgZWRnZSBhbmQg
Ym90dG9tIGVkZ2VzLgorICAgICAgICBUaGUgWFNoYXBlIGNsYXNzIHJlcHJlc2VudHMgQmFzaWNT
aGFwZXMgd2hvc2UgY29vcmRpbmF0ZXMgaGF2ZSBiZWVuIHJlc29sdmVkIHRvIGFjdHVhbCB2YWx1
ZXMuIEl0IHByb3ZpZGVzCisgICAgICAgIGEgcGFpciBvZiBtZXRob2RzLCBnZXRJbnNpZGVJbnRl
cnZhbHMoKSBhbmQgZ2V0T3V0c2lkZUludGVydmFscygpLCB0aGF0IHJldHVybiB0aGUgbGluZSBz
ZWdtZW50cycgc3RhcnQKKyAgICAgICAgYW5kIGVuZCBYIGNvb3JkaW5hdGVzLCBhbmQgYSBtZXRo
b2QgdGhhdCBjb21wdXRlcyB0aGUgc2hhcGUncyBib3VuZGluZyBib3guIFRoZSBsaW5lIHNlZ21l
bnRzJyBjb29yZGluYXRlcworICAgICAgICBhcmUgcmVwcmVzZW50ZWQgYnkgYSBWZWN0b3Igb2Yg
WFNJbnRlcnZhbHMuICBYU0ludGVydmFsIGlzIGp1c3QgYSBwYWlyIG9mIFggY29vcmRpbmF0ZXMu
CisKKyAgICAgICAgVGhlIG90aGVyIGNsYXNzZXMsIFhTUmVjdGFuZ2xlIGFuZCBYU1BvbHlnb24g
ZXQgYWwsIGFyZSBpbnRlcm5hbCB0byB0aGUgWFNoYXBlIGltcGxlbWVudGF0aW9uLgorCisgICAg
ICAgIFRoaXMgaXMgdGhlIGluaXRpYWwgdmVyc2lvbiBvZiB0aGUgWFNoYXBlcyBjb2RlIGFuZCBp
dCdzIG9ubHkgYmVpbmcgdXNlZCB0byB0aGUgbGltaXRlZCBleHRlbnQgV2ViS2l0CisgICAgICAg
IGN1cnJlbnRseSBzdXBwb3J0cyBzaGFwZS1pbnNpZGUgZXhjbHVzaW9ucy4gIEl0IHdpbGwgYmUg
ZXh0ZW5kZWQgdG8gc3VwcG9ydCBjb21wdXRpbmcgYSBtaW5pbWFsCisgICAgICAgIGxpbmUgc2Vn
bWVudCdzICJmaXJzdCBsYXlvdXQgbG9jYXRpb24iIGFuZCBvdGhlciBpbXByb3ZlbWVudHMsIGlu
IHRhbmRlbSB3aXRoIHRoZSBleGNsdXNpb25zIGxheW91dCBjb2RlLgorCisgICAgICAgIE5vIG5l
dyB0ZXN0cyBoYXZlIGJlZW4gYWRkZWQgc2luY2UgdGhpcyBjb2RlIGp1c3QgcmVwbGFjZXMgYSBw
cm92aXNpb25hbCBpbXBsZW1lbnRhdGlvbiBzdHViLgorCisgICAgICAgIE1vcmUgaW5mb3JtYXRp
b24gYWJvdXQgdGhlIGFsZ29yaXRobXMgdXNlZCBieSB0aGUgU2hhcGVzIG1vZHVsZSBjYW4gYmUg
Zm91bmQgaGVyZTogaHR0cDovL2hhbnNtdWxsZXItd2Via2l0LmJsb2dzcG90LmNvbS4KKworICAg
ICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06Cisg
ICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICog
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvai5vcmlnOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ouCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvWFNJbnRlcnZh
bC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnRl
cnZhbFgxQ29tcGFyYXRvcjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChXZWJDb3JlOjpYU0ludGVy
dmFsOjppbnRlcnNlY3QpOgorICAgICAgICAoV2ViQ29yZTo6c29ydFhTSW50ZXJ2YWxzKToKKyAg
ICAgICAgKFdlYkNvcmU6Om1lcmdlWFNJbnRlcnZhbHMpOgorICAgICAgICAoV2ViQ29yZTo6aW50
ZXJzZWN0WFNJbnRlcnZhbHMpOgorICAgICAgICAoV2ViQ29yZTo6c3VidHJhY3RYU0ludGVydmFs
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvWFNJbnRlcnZhbC5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoWFNJbnRlcnZhbCk6CisgICAgICAgIChXZWJDb3Jl
OjpYU0ludGVydmFsOjpYU0ludGVydmFsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Y
U1BvbHlnb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6TWF4RWRnZVlDb21wYXJhdG9yOjpvcGVyYXRvcigpKToKKyAgICAgICAgKE1heEVkZ2VZQ29t
cGFyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpNaW5FZGdlWUNvbXBhcmF0b3I6Om9wZXJhdG9y
KCkpOgorICAgICAgICAoTWluRWRnZVlDb21wYXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
dGVyc2VjdGlvblhDb21wYXJhdG9yOjpvcGVyYXRvcigpKToKKyAgICAgICAgKFdlYkNvcmU6OlhT
RWRnZVRyZWU6OlhTRWRnZVRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6WFNFZGdlVHJlZTo6aW5p
dEVkZ2VUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlhTRWRnZVRyZWU6OmZpbmRFZGdlc1RoYXRP
dmVybGFwWSk6CisgICAgICAgIChXZWJDb3JlOjpYU0VkZ2VUcmVlOjpmaW5kRWRnZXNUaGF0T3Zl
cmxhcEludGVydmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlhTUG9seWdvbjo6WFNQb2x5Z29uKToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVYSW50ZXJzZWN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlhTUG9seWdvbjo6cmlnaHRWZXJ0ZXhZKToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZElu
dGVydmFsWCk6CisgICAgICAgIChXZWJDb3JlOjpYU1BvbHlnb246OmNvbXB1dGVYSW50ZXJzZWN0
aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpYU1BvbHlnb246OmNvbXB1dGVFZGdlSW50ZXJzZWN0
aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpYU1BvbHlnb246OmdldE91dHNpZGVJbnRlcnZhbHMp
OgorICAgICAgICAoV2ViQ29yZTo6WFNQb2x5Z29uOjpnZXRJbnNpZGVJbnRlcnZhbHMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1hTUG9seWdvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoWFNQb2x5Z29uKToKKyAgICAgICAgKFdlYkNvcmU6OlhTUG9seWdv
bjo6Z2V0WEF0KToKKyAgICAgICAgKFdlYkNvcmU6OlhTUG9seWdvbjo6Z2V0WUF0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlhTUG9seWdvbjo6bnVtYmVyT2ZWZXJ0aWNlcyk6CisgICAgICAgIChXZWJD
b3JlOjpYU1BvbHlnb246OmZpbGxSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlhTUG9seWdvbjo6
c2hhcGVCb3VuZGluZ0JveCk6CisgICAgICAgIChYU0VkZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
WFNFZGdlOjpYU0VkZ2UpOgorICAgICAgICAoV2ViQ29yZTo6WFNFZGdlOjp4MSk6CisgICAgICAg
IChXZWJDb3JlOjpYU0VkZ2U6OnkxKToKKyAgICAgICAgKFdlYkNvcmU6OlhTRWRnZTo6eDIpOgor
ICAgICAgICAoV2ViQ29yZTo6WFNFZGdlOjp5Mik6CisgICAgICAgIChXZWJDb3JlOjpYU0VkZ2U6
Om1pblgpOgorICAgICAgICAoV2ViQ29yZTo6WFNFZGdlOjptaW5ZKToKKyAgICAgICAgKFdlYkNv
cmU6OlhTRWRnZTo6bWF4WCk6CisgICAgICAgIChXZWJDb3JlOjpYU0VkZ2U6Om1heFkpOgorICAg
ICAgICAoWFNFZGdlVHJlZSk6CisgICAgICAgIChYU0ludGVyc2VjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpYU0ludGVyc2VjdGlvbjo6WFNJbnRlcnNlY3Rpb24pOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL1hTUmVjdGFuZ2xlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OmVsbGlwc2VYSW50ZXJjZXB0KToKKyAgICAgICAgKFdlYkNvcmU6
OlhTUmVjdGFuZ2xlOjpnZXRPdXRzaWRlSW50ZXJ2YWxzKToKKyAgICAgICAgKFdlYkNvcmU6OlhT
UmVjdGFuZ2xlOjpnZXRJbnNpZGVJbnRlcnZhbHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL1hTUmVjdGFuZ2xlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChY
U1JlY3RhbmdsZSk6CisgICAgICAgIChXZWJDb3JlOjpYU1JlY3RhbmdsZTo6WFNSZWN0YW5nbGUp
OgorICAgICAgICAoV2ViQ29yZTo6WFNSZWN0YW5nbGU6OnNoYXBlQm91bmRpbmdCb3gpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1hTaGFwZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVYU1JlY3RhbmdsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpjcmVhdGVYU0NpcmNsZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVYU0VsbGlw
c2UpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlWFNQb2x5Z29uKToKKyAgICAgICAgKFdlYkNv
cmU6OlhTaGFwZTo6Y3JlYXRlWFNoYXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Y
U2hhcGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFhTaGFwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpYU2hhcGU6On5YU2hhcGUpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OmxheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvV3JhcFNo
YXBlSW5mby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXcmFwU2hhcGVJbmZvOjpjb21wdXRlU2hh
cGVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OldyYXBTaGFwZUluZm86OmNvbXB1dGVTZWdtZW50
c0ZvckxpbmUpOgorICAgICAgICAqIHJlbmRlcmluZy9XcmFwU2hhcGVJbmZvLmg6CisgICAgICAg
IChXZWJDb3JlOjpXcmFwU2hhcGVJbmZvOjpzaGFwZVRvcCk6CisgICAgICAgIChXcmFwU2hhcGVJ
bmZvKToKKyAgICAgICAgKFdlYkNvcmU6OldyYXBTaGFwZUluZm86OmxpbmVTdGF0ZSk6CisKIDIw
MTItMDgtMzEgIEFsb2sgUHJpeWFkYXJzaGkgIDxhbG9rcEBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgW2Nocm9taXVtXSBMYXlvdXQgdGVzdHMgc3ZnLWZpbHRlcnMuaHRtbCBhbmQgYWxwaGEuaHRt
bCBhcmUgY3Jhc2hpbmcgaW50ZXJtaXR0ZW50bHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
CmluZGV4IDgwYzYzNmYuLjY5MjYxNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpA
QCAtNDQ1OCw2ICs0NDU4LDE0IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2luZFJ1bGUuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvV09GRkZpbGVGb3JtYXQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9XT0ZGRmlsZUZvcm1hdC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9YU0ludGVydmFsLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvWFNJbnRlcnZhbC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9YU1Bv
bHlnb24uY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9YU1BvbHlnb24u
aCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvWFNSZWN0YW5nbGUuY3BwIFwK
KwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9YU1JlY3RhbmdsZS5oIFwKKwlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9YU2hhcGUuY3BwIFwKKwlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9YU2hhcGUuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL0Vycm9yc0d0ay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9FcnJvcnNH
dGsuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dhbWVwYWRzR3RrLmNwcCBcCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFy
Z2V0LnByaQppbmRleCBmNzM1OWFmLi4yY2RlZWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTk5NCw2ICs5
OTQsMTAgQEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9U
cmFuc2Zvcm1TdGF0ZS5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJh
bnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvV2lk
dGhJdGVyYXRvci5jcHAgXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1hTSW50ZXJ2YWwuY3BwIFwK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9YU1BvbHlnb24uY3BwIFwKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9YU1JlY3RhbmdsZS5jcHAgXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1hTaGFwZS5jcHAg
XAogICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAgXAogICAgIHBs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuY3BwIFwKICAgICBwbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwIFwKQEAgLTIxNDEsNiAr
MjE0NSwxMCBAQCBIRUFERVJTICs9IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1z
L1RyYW5zZm9ybVN0YXRlLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJh
bnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1dpZHRo
SXRlcmF0b3IuaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvWFNJbnRlcnZhbC5oIFwKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9YU1BvbHlnb24uaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvWFNS
ZWN0YW5nbGUuaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvWFNoYXBlLmggXAogICAgIHBsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuaCBcCiAgICAgcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmggXAogICAgIHBsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMDMy
ZmRiYS4uNTdhNmEyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNDE4LDYgKzQxOCwxNCBAQAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtT3BlcmF0aW9u
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3Jt
T3BlcmF0aW9ucy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1z
L1RyYW5zZm9ybWF0aW9uTWF0cml4LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L1hTSW50ZXJ2YWwuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9YU0ludGVy
dmFsLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL1hTUG9seWdvbi5jcHAnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL1hTUG9seWdvbi5oJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9YU1JlY3RhbmdsZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL1hTUmVjdGFuZ2xlLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL1hTaGFwZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL1hTaGFwZS5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBlci5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJDb21wYXJhdG9yLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQkRhdGFiYXNlLmNwcCcsCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IGYwNDk0MGIuLjM0MDUzNDYg
MTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC0z
NDEzMyw2ICszNDEzMywzOCBAQAogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBo
aWNzXFdpZHRoSXRlcmF0b3IuaCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXFhTSW50ZXJ2YWwuY3BwIgorCQkJ
CQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZv
cm1cZ3JhcGhpY3NcWFNJbnRlcnZhbC5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxl
CisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcWFNQb2x5Z29uLmNwcCIK
KwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBs
YXRmb3JtXGdyYXBoaWNzXFhTUG9seWdvbi5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxG
aWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcWFNSZWN0YW5nbGUu
Y3BwIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccGxhdGZvcm1cZ3JhcGhpY3NcWFNSZWN0YW5nbGUuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4K
KwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXFhTaGFw
ZS5jcHAiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxwbGF0Zm9ybVxncmFwaGljc1xYU2hhcGUuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KIAkJ
CQk8RmlsdGVyCiAJCQkJCU5hbWU9ImNmIgogCQkJCQk+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggOGE0MjQzZi4uMjRlZWUwMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMTgzMSw2ICsxODMxLDE0IEBACiAJCTZFNEU5MUFEMTBGN0ZCMzEwMEEyNzc5QyAvKiBD
YW52YXNDb250ZXh0QXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNkU0RTkxQTgxMEY3RkIzMTAwQTI3NzlDIC8qIENhbnZhc0NvbnRleHRB
dHRyaWJ1dGVzLmggKi87IH07CiAJCTZFNEU5MUFFMTBGN0ZCMzEwMEEyNzc5QyAvKiBXZWJHTENv
bnRleHRBdHRyaWJ1dGVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDZFNEU5MUE5MTBGN0ZCMzEwMEEyNzc5QyAvKiBXZWJHTENvbnRleHRBdHRyaWJ1
dGVzLmNwcCAqLzsgfTsKIAkJNkU0RTkxQUYxMEY3RkIzMTAwQTI3NzlDIC8qIFdlYkdMQ29udGV4
dEF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDZFNEU5MUFBMTBGN0ZCMzEwMEEyNzc5QyAvKiBXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmgg
Ki87IH07CisJCTZFNjM3NDUyMTVGMTI4MDIwMEIzRkRBMyAvKiBYU2hhcGUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU2Mzc0NEExNUYxMjgwMjAw
QjNGREEzIC8qIFhTaGFwZS5jcHAgKi87IH07CisJCTZFNjM3NDUzMTVGMTI4MDIwMEIzRkRBMyAv
KiBYU2hhcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDZFNjM3NDRCMTVGMTI4MDIwMEIzRkRBMyAvKiBYU2hhcGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk2RTYzNzQ1NDE1RjEyODAyMDBCM0ZEQTMg
LyogWFNJbnRlcnZhbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2RTYzNzQ0QzE1RjEyODAyMDBCM0ZEQTMgLyogWFNJbnRlcnZhbC5jcHAgKi87IH07
CisJCTZFNjM3NDU1MTVGMTI4MDIwMEIzRkRBMyAvKiBYU0ludGVydmFsLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTYzNzQ0RDE1RjEyODAyMDBCM0ZE
QTMgLyogWFNJbnRlcnZhbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTZFNjM3NDU2MTVGMTI4MDIwMEIzRkRBMyAvKiBYU1BvbHlnb24uY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU2Mzc0NEUxNUYx
MjgwMjAwQjNGREEzIC8qIFhTUG9seWdvbi5jcHAgKi87IH07CisJCTZFNjM3NDU3MTVGMTI4MDIw
MEIzRkRBMyAvKiBYU1BvbHlnb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDZFNjM3NDRGMTVGMTI4MDIwMEIzRkRBMyAvKiBYU1BvbHlnb24uaCAqLzsg
fTsKKwkJNkU2Mzc0NTgxNUYxMjgwMjAwQjNGREEzIC8qIFhTUmVjdGFuZ2xlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFNjM3NDUwMTVGMTI4MDIw
MEIzRkRBMyAvKiBYU1JlY3RhbmdsZS5jcHAgKi87IH07CisJCTZFNjM3NDU5MTVGMTI4MDIwMEIz
RkRBMyAvKiBYU1JlY3RhbmdsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNkU2Mzc0NTExNUYxMjgwMjAwQjNGREEzIC8qIFhTUmVjdGFuZ2xlLmggKi87
IH07CiAJCTZFNjdEMkE2MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU2N0QyQTQx
MjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5jcHAgKi87IH07CiAJCTZFNjdE
MkE3MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFNjdEMkE1MTI4MEU4QTQwMDg3NThG
NyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuaCAqLzsgfTsKIAkJNkU2N0QyQTkxMjgwRThCRDAwODc1
OEY3IC8qIEV4dGVuc2lvbnMzRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNkU2N0QyQTgxMjgwRThCRDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRC5oICov
OyB9OwpAQCAtOTAwOCw2ICs5MDE2LDE0IEBACiAJCTZFNEU5MUE5MTBGN0ZCMzEwMEEyNzc5QyAv
KiBXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMuY3BwOyBwYXRoID0gY2FudmFzL1dlYkdM
Q29udGV4dEF0dHJpYnV0ZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RTRF
OTFBQTEwRjdGQjMxMDBBMjc3OUMgLyogV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmg7IHBhdGgg
PSBjYW52YXMvV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk2RTRFOTFBQjEwRjdGQjMxMDBBMjc3OUMgLyogV2ViR0xDb250ZXh0QXR0cmlidXRl
cy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gV2ViR0xDb250ZXh0QXR0cmlidXRlcy5pZGw7
IHBhdGggPSBjYW52YXMvV2ViR0xDb250ZXh0QXR0cmlidXRlcy5pZGw7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTZFNjM3NDRBMTVGMTI4MDIwMEIzRkRBMyAvKiBYU2hhcGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gWFNoYXBlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkU2Mzc0NEIxNUYxMjgwMjAwQjNGREEzIC8qIFhTaGFwZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYU2hhcGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNkU2Mzc0NEMxNUYxMjgwMjAwQjNGREEzIC8qIFhTSW50ZXJ2YWwu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gWFNJbnRlcnZhbC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZFNjM3NDREMTVGMTI4MDIwMEIzRkRBMyAv
KiBYU0ludGVydmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFhTSW50ZXJ2
YWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkU2Mzc0NEUxNUYxMjgwMjAwQjNG
REEzIC8qIFhTUG9seWdvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBYU1BvbHlnb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RTYzNzQ0RjE1
RjEyODAyMDBCM0ZEQTMgLyogWFNQb2x5Z29uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFhTUG9seWdvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RTYzNzQ1
MDE1RjEyODAyMDBCM0ZEQTMgLyogWFNSZWN0YW5nbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gWFNSZWN0YW5nbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk2RTYzNzQ1MTE1RjEyODAyMDBCM0ZEQTMgLyogWFNSZWN0YW5nbGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWFNSZWN0YW5nbGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNkU2N0QyQTQxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9w
ZW5HTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeHRlbnNpb25z
M0RPcGVuR0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RTY3RDJBNTEyODBF
OEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEV4dGVuc2lvbnMzRE9wZW5HTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk2RTY3RDJBODEyODBFOEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9uczNELmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4dGVuc2lvbnMzRC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTk5NDMsNiArMTk5NTksMTQgQEAKIAkJCQk1MDFCQUFBODEzOTUw
RTJDMDBGN0FDRUIgLyogV2luZFJ1bGUuaCAqLywKIAkJCQkzNzk5MTk5NDEyMDBEREY0MDBFQTA0
MUMgLyogV09GRkZpbGVGb3JtYXQuY3BwICovLAogCQkJCTM3OTkxOTk1MTIwMERERjQwMEVBMDQx
QyAvKiBXT0ZGRmlsZUZvcm1hdC5oICovLAorCQkJCTZFNjM3NDRBMTVGMTI4MDIwMEIzRkRBMyAv
KiBYU2hhcGUuY3BwICovLAorCQkJCTZFNjM3NDRCMTVGMTI4MDIwMEIzRkRBMyAvKiBYU2hhcGUu
aCAqLywKKwkJCQk2RTYzNzQ0QzE1RjEyODAyMDBCM0ZEQTMgLyogWFNJbnRlcnZhbC5jcHAgKi8s
CisJCQkJNkU2Mzc0NEQxNUYxMjgwMjAwQjNGREEzIC8qIFhTSW50ZXJ2YWwuaCAqLywKKwkJCQk2
RTYzNzQ0RTE1RjEyODAyMDBCM0ZEQTMgLyogWFNQb2x5Z29uLmNwcCAqLywKKwkJCQk2RTYzNzQ0
RjE1RjEyODAyMDBCM0ZEQTMgLyogWFNQb2x5Z29uLmggKi8sCisJCQkJNkU2Mzc0NTAxNUYxMjgw
MjAwQjNGREEzIC8qIFhTUmVjdGFuZ2xlLmNwcCAqLywKKwkJCQk2RTYzNzQ1MTE1RjEyODAyMDBC
M0ZEQTMgLyogWFNSZWN0YW5nbGUuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gZ3JhcGhpY3M7CiAJ
CQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMjIyMTIsNiArMjIyMzYsOCBAQAogCQkJaXNh
ID0gUEJYSGVhZGVyc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3
OwogCQkJZmlsZXMgPSAoCisJCQkJNkU2Mzc0NTMxNUYxMjgwMjAwQjNGREEzIC8qIFhTaGFwZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNkU2Mzc0NTUxNUYxMjgwMjAwQjNGREEzIC8qIFhTSW50ZXJ2
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QkM2OURCMTUwNUYwNzYwMDFCNzRBQyAvKiBBYnN0
cmFjdERhdGFiYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MUUxQjFEMTBGRjU5ODY5MDA1NzZC
M0IgLyogQWJzdHJhY3RXb3JrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTI5QTgxMjJFMEZCQjlD
MUQwMDUxMDI5MyAvKiBBY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsLmggaW4gSGVhZGVycyAqLywK
QEAgLTI1NDk3LDYgKzI1NTIzLDggQEAKIAkJCQlGQkQ2QUY4ODE1RUYyNUM5MDA4QjcxMTAgLyog
Q1NTQmFzaWNTaGFwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUZCRDZBRjhBMTVFRjI1REYwMDhC
NzExMCAvKiBCYXNpY1NoYXBlRnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlGQkQ2QUY4
QzE1RUYyNjA0MDA4QjcxMTAgLyogQmFzaWNTaGFwZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTZF
NjM3NDU3MTVGMTI4MDIwMEIzRkRBMyAvKiBYU1BvbHlnb24uaCBpbiBIZWFkZXJzICovLAorCQkJ
CTZFNjM3NDU5MTVGMTI4MDIwMEIzRkRBMyAvKiBYU1JlY3RhbmdsZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07
CkBAIC0yODU4Nyw2ICsyODYxNSwxMCBAQAogCQkJCUZCRDZBRjhEMTVFRjI2MEEwMDhCNzExMCAv
KiBCYXNpY1NoYXBlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0RkIzOTBBRDE1RUY2MUYzMDA3
QUQ1MUYgLyogR2VuZXJhdGVkSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzc3QTNBOTAx
NUVGQ0U5QjAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
NkU2Mzc0NTIxNUYxMjgwMjAwQjNGREEzIC8qIFhTaGFwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQk2RTYzNzQ1NDE1RjEyODAyMDBCM0ZEQTMgLyogWFNJbnRlcnZhbC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk2RTYzNzQ1NjE1RjEyODAyMDBCM0ZEQTMgLyogWFNQb2x5Z29uLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTZFNjM3NDU4MTVGMTI4MDIwMEIzRkRBMyAvKiBYU1JlY3RhbmdsZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1hTSW50ZXJ2YWwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvWFNJ
bnRlcnZhbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg1NDA0Nwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1hTSW50
ZXJ2YWwuY3BwCkBAIC0wLDAgKzEsMTY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFk
b2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAg
ICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlhTSW50ZXJ2YWwuaCIKKworI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IEludGVydmFsWDFDb21wYXJhdG9yIHsKKyAg
ICBib29sIG9wZXJhdG9yKCkgKGNvbnN0IFhTSW50ZXJ2YWwmIGkxLCBjb25zdCBYU0ludGVydmFs
JiBpMikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpMS54MSA8IGkyLngxOworICAgIH0K
K307CisKK2Jvb2wgWFNJbnRlcnZhbDo6aW50ZXJzZWN0KGNvbnN0IFhTSW50ZXJ2YWwmIGksIFhT
SW50ZXJ2YWwmIHJ2KSBjb25zdAoreworICAgIGlmICh4MiA8IGkueDEgfHwgeDEgPiBpLngyKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcnYueDEgPSBzdGQ6Om1heCh4MSwgaS54MSk7Cisg
ICAgcnYueDIgPSBzdGQ6Om1pbih4MiwgaS54Mik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgc29ydFhTSW50ZXJ2YWxzKFZlY3RvcjxYU0ludGVydmFsPiYgdikKK3sKKyAgICBzdGQ6OnNv
cnQodi5iZWdpbigpLCB2LmVuZCgpLCBJbnRlcnZhbFgxQ29tcGFyYXRvcigpKTsKK30KKwordm9p
ZCBtZXJnZVhTSW50ZXJ2YWxzKGNvbnN0IFZlY3RvcjxYU0ludGVydmFsPiYgdjEsIGNvbnN0IFZl
Y3RvcjxYU0ludGVydmFsPiYgdjIsIFZlY3RvcjxYU0ludGVydmFsPiYgcnYpCit7CisgICAgaWYg
KCF2MS5zaXplKCkpCisgICAgICAgIHJ2LmFwcGVuZFJhbmdlKHYyLmJlZ2luKCksIHYyLmVuZCgp
KTsKKyAgICBlbHNlIGlmICghdjIuc2l6ZSgpKQorICAgICAgICBydi5hcHBlbmRSYW5nZSh2MS5i
ZWdpbigpLCB2MS5lbmQoKSk7CisgICAgZWxzZSB7CisgICAgICAgIFZlY3RvcjxYU0ludGVydmFs
PiB2KHYxLnNpemUoKSArIHYyLnNpemUoKSk7CisgICAgICAgIFhTSW50ZXJ2YWwqIGludGVydmFs
ID0gMDsKKworICAgICAgICBzdGQ6Om1lcmdlKHYxLmJlZ2luKCksIHYxLmVuZCgpLCB2Mi5iZWdp
bigpLCB2Mi5lbmQoKSwgdi5iZWdpbigpLCBJbnRlcnZhbFgxQ29tcGFyYXRvcigpKTsKKworICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHYuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAg
IGlmICghaW50ZXJ2YWwpCisgICAgICAgICAgICAgICAgaW50ZXJ2YWwgPSAmdltpXTsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKHZbaV0ueDEgPj0gaW50ZXJ2YWwtPngxICYmIHZbaV0ueDEgPD0gaW50
ZXJ2YWwtPngyKSAvLyBGSVhNRTogMXN0IDw9IHRlc3Qgbm90IG5lZWRlZD8KKyAgICAgICAgICAg
ICAgICBpbnRlcnZhbC0+eDIgPSBzdGQ6Om1heChpbnRlcnZhbC0+eDIsIHZbaV0ueDIpOworICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcnYuYXBwZW5kKCppbnRlcnZhbCk7Cisg
ICAgICAgICAgICAgICAgaW50ZXJ2YWwgPSAmdltpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIGlmIChpbnRlcnZhbCkKKyAgICAgICAgICAgIHJ2LmFwcGVuZCgqaW50ZXJ2
YWwpOworICAgIH0KK30KKwordm9pZCBpbnRlcnNlY3RYU0ludGVydmFscyhjb25zdCBWZWN0b3I8
WFNJbnRlcnZhbD4mIHYxLCBjb25zdCBWZWN0b3I8WFNJbnRlcnZhbD4mIHYyLCBWZWN0b3I8WFNJ
bnRlcnZhbD4mIHJ2KQoreworICAgIHNpemVfdCB2MVNpemUgPSB2MS5zaXplKCk7CisgICAgc2l6
ZV90IHYyU2l6ZSA9IHYyLnNpemUoKTsKKworICAgIGlmICghdjFTaXplIHx8ICF2MlNpemUpCisg
ICAgICAgIHJldHVybjsKKworICAgIFhTSW50ZXJ2YWwgaW50ZXJ2YWw7CisgICAgYm9vbCBvdmVy
bGFwID0gZmFsc2U7CisgICAgc2l6ZV90IGkxID0gMDsKKyAgICBzaXplX3QgaTIgPSAwOworCisg
ICAgd2hpbGUgKGkxIDwgdjFTaXplICYmIGkyIDwgdjJTaXplKSB7CisgICAgICAgIFhTSW50ZXJ2
YWwgdjEyOworICAgICAgICBpZiAodjFbaTFdLmludGVyc2VjdCh2MltpMl0sIHYxMikpIHsKKyAg
ICAgICAgICAgIGlmICghb3ZlcmxhcCB8fCAhdjEyLmludGVyc2VjdChpbnRlcnZhbCwgaW50ZXJ2
YWwpKSB7CisgICAgICAgICAgICAgICAgaWYgKG92ZXJsYXApCisgICAgICAgICAgICAgICAgICAg
IHJ2LmFwcGVuZChpbnRlcnZhbCk7CisgICAgICAgICAgICAgICAgaW50ZXJ2YWwgPSB2MTI7Cisg
ICAgICAgICAgICAgICAgb3ZlcmxhcCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAodjFbaTFdLngyIDwgdjJbaTJdLngyKQorICAgICAgICAgICAgICAgIGkxKys7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaTIrKzsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGlmIChvdmVybGFwKQorICAgICAgICAgICAgICAgIHJ2LmFwcGVuZChpbnRlcnZh
bCk7CisgICAgICAgICAgICBvdmVybGFwID0gZmFsc2U7CisgICAgICAgICAgICBpZiAodjFbaTFd
LngxIDwgdjJbaTJdLngxKQorICAgICAgICAgICAgICAgIGkxKys7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgaTIrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChvdmVy
bGFwKQorICAgICAgICBydi5hcHBlbmQoaW50ZXJ2YWwpOworfQorCit2b2lkIHN1YnRyYWN0WFNJ
bnRlcnZhbHMoY29uc3QgVmVjdG9yPFhTSW50ZXJ2YWw+JiB2MSwgY29uc3QgVmVjdG9yPFhTSW50
ZXJ2YWw+JiB2MiwgVmVjdG9yPFhTSW50ZXJ2YWw+JiBydikKK3sKKyAgICBzaXplX3QgdjFTaXpl
ID0gdjEuc2l6ZSgpOworICAgIHNpemVfdCB2MlNpemUgPSB2Mi5zaXplKCk7CisKKyAgICBpZiAo
IXYxU2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCF2MlNpemUpCisgICAgICAgIHJ2
LmFwcGVuZFJhbmdlKHYxLmJlZ2luKCksIHYxLmVuZCgpKTsKKyAgICBlbHNlIHsKKyAgICAgICAg
c2l6ZV90IGkxID0gMCwgaTIgPSAwOworICAgICAgICBydi5hcHBlbmRSYW5nZSh2MS5iZWdpbigp
LCB2MS5lbmQoKSk7CisKKyAgICAgICAgd2hpbGUgKGkxIDwgcnYuc2l6ZSgpICYmIGkyIDwgdjJT
aXplKSB7CisgICAgICAgICAgICBYU0ludGVydmFsJiBpbnRlcnZhbDEgPSBydltpMV07CisgICAg
ICAgICAgICBjb25zdCBYU0ludGVydmFsJiBpbnRlcnZhbDIgPSB2MltpMl07CisKKyAgICAgICAg
ICAgIGlmIChpbnRlcnZhbDIueDEgPD0gaW50ZXJ2YWwxLngxICYmIGludGVydmFsMi54MiA+PSBp
bnRlcnZhbDEueDIpCisgICAgICAgICAgICAgICAgcnYucmVtb3ZlKGkxKTsKKyAgICAgICAgICAg
IGVsc2UgaWYgKGludGVydmFsMi54MiA8IGludGVydmFsMS54MSkKKyAgICAgICAgICAgICAgICBp
MiArPSAxOworICAgICAgICAgICAgZWxzZSBpZiAoaW50ZXJ2YWwyLngxID4gaW50ZXJ2YWwxLngy
KQorICAgICAgICAgICAgICAgIGkxICs9IDE7CisgICAgICAgICAgICBlbHNlIGlmIChpbnRlcnZh
bDIueDEgPiBpbnRlcnZhbDEueDEgJiYgaW50ZXJ2YWwyLngyIDwgaW50ZXJ2YWwxLngyKSB7Cisg
ICAgICAgICAgICAgICAgcnYuaW5zZXJ0KGkxLCBYU0ludGVydmFsKGludGVydmFsMS54MSwgaW50
ZXJ2YWwyLngxKSk7CisgICAgICAgICAgICAgICAgaW50ZXJ2YWwxLngxID0gaW50ZXJ2YWwyLngy
OworICAgICAgICAgICAgICAgIGkyICs9IDE7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGludGVy
dmFsMi54MSA8PSBpbnRlcnZhbDEueDEpIHsKKyAgICAgICAgICAgICAgICBpbnRlcnZhbDEueDEg
PSBpbnRlcnZhbDIueDI7CisgICAgICAgICAgICAgICAgaTIgKz0gMTsKKyAgICAgICAgICAgIH0g
ZWxzZSAgeyAvLyAoaW50ZXJ2YWwyLngyID49IGludGVydmFsMS54MikKKyAgICAgICAgICAgICAg
ICBpbnRlcnZhbDEueDIgPSBpbnRlcnZhbDIueDE7CisgICAgICAgICAgICAgICAgaTEgKz0gMTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvWFNJbnRl
cnZhbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvWFNJbnRlcnZhbC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNjE3ZGQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9YU0ludGVydmFsLmgKQEAgLTAs
MCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29y
cG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMKKyAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQor
ICogQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgWFNJbnRlcnZhbF9oCisjZGVmaW5lIFhTSW50ZXJ2
YWxfaAorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3N0cnVjdCBYU0ludGVydmFsIHsKK3B1YmxpYzoKKyAgICBmbG9hdCB4MTsKKyAgICBmbG9hdCB4
MjsKKworICAgIFhTSW50ZXJ2YWwoZmxvYXQgeDEgPSAwLCBmbG9hdCB4MiA9IDApIAorICAgICAg
ICA6IHgxKHgxKQorICAgICAgICAsIHgyKHgyKSAKKyAgICB7IAorICAgIH0KKworICAgIGJvb2wg
aW50ZXJzZWN0KGNvbnN0IFhTSW50ZXJ2YWwmLCBYU0ludGVydmFsJikgY29uc3Q7Cit9OworCit2
b2lkIHNvcnRYU0ludGVydmFscyhWZWN0b3I8WFNJbnRlcnZhbD4mKTsKK3ZvaWQgbWVyZ2VYU0lu
dGVydmFscyhjb25zdCBWZWN0b3I8WFNJbnRlcnZhbD4mLCBjb25zdCBWZWN0b3I8WFNJbnRlcnZh
bD4mLCBWZWN0b3I8WFNJbnRlcnZhbD4mKTsKK3ZvaWQgaW50ZXJzZWN0WFNJbnRlcnZhbHMoY29u
c3QgVmVjdG9yPFhTSW50ZXJ2YWw+JiwgY29uc3QgVmVjdG9yPFhTSW50ZXJ2YWw+JiwgVmVjdG9y
PFhTSW50ZXJ2YWw+Jik7Cit2b2lkIHN1YnRyYWN0WFNJbnRlcnZhbHMoY29uc3QgVmVjdG9yPFhT
SW50ZXJ2YWw+JiwgY29uc3QgVmVjdG9yPFhTSW50ZXJ2YWw+JiwgVmVjdG9yPFhTSW50ZXJ2YWw+
Jik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFhTSW50ZXJ2YWxfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvWFNQb2x5Z29uLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1hTUG9seWdvbi5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVlNGQ5NgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1hTUG9seWdvbi5jcHAKQEAgLTAsMCAr
MSwzNjIgQEAKKyAvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jw
b3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisg
KiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlhTUG9seWdv
bi5oIgorCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitzdHJ1Y3QgTWF4RWRnZVlDb21wYXJhdG9yIHsKKyAgICBib29sIG9wZXJhdG9yKCkgKGNv
bnN0IFhTRWRnZSogZTEsIGNvbnN0IFhTRWRnZSogZTIpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gZTEtPm1heFkoKSA8IGUyLT5tYXhZKCk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRv
cigpIChjb25zdCBYU0VkZ2UqIGUsIGZsb2F0IHkpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gZS0+bWF4WSgpIDwgeTsKKyAgICB9Cit9OworCitzdHJ1Y3QgTWluRWRnZVlDb21wYXJhdG9y
IHsgIAorICAgIGJvb2wgb3BlcmF0b3IoKSAoY29uc3QgWFNFZGdlKiBlMSwgY29uc3QgWFNFZGdl
KiBlMikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBlMS0+bWluWSgpIDwgZTItPm1pblko
KTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yKCkgKGNvbnN0IFhTRWRnZSogZSwgZmxvYXQg
eSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBlLT5taW5ZKCkgPCB5OworICAgIH0KK307
CisKK3N0cnVjdCBJbnRlcnNlY3Rpb25YQ29tcGFyYXRvciB7CisgICAgYm9vbCBvcGVyYXRvcigp
IChjb25zdCBYU0ludGVyc2VjdGlvbiYgaTEsIGNvbnN0IFhTSW50ZXJzZWN0aW9uJiBpMikgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiAoaTEueCA9PSBpMi54KSA/IGkxLnR5cGUgPCBpMi50
eXBlIDogaTEueCA8IGkyLng7CisgICAgfQorfTsKKworWFNFZGdlVHJlZTo6WFNFZGdlVHJlZShj
b25zdCBWZWN0b3I8WFNFZGdlKj4mIHNvcnRlZEVkZ2VzKQorICAgIDogY2VudGVyKDApCit7Cisg
ICAgaWYgKHNvcnRlZEVkZ2VzLnNpemUoKSA+IDApCisgICAgICAgIGluaXRFZGdlVHJlZSh0aGlz
LCBzb3J0ZWRFZGdlcyk7Cit9CisKK3ZvaWQgWFNFZGdlVHJlZTo6aW5pdEVkZ2VUcmVlKFhTRWRn
ZVRyZWUqIG5vZGUsIGNvbnN0IFZlY3RvcjxYU0VkZ2UqPiYgZWRnZXMpCit7CisgICAgc2l6ZV90
IGVkZ2VzU2l6ZSA9IGVkZ2VzLnNpemUoKTsKKyAgICBzaXplX3QgY2VudGVySW5kZXggPSBlZGdl
c1NpemUgLyAyOworICAgIG5vZGUtPmNlbnRlciA9IChlZGdlc1tjZW50ZXJJbmRleF0tPm1pblko
KSArIGVkZ2VzW2NlbnRlckluZGV4XS0+bWF4WSgpKSAvIDI7CisKKyAgICBWZWN0b3I8WFNFZGdl
Kj4gYWJvdmVDZW50ZXJFZGdlczsKKyAgICBWZWN0b3I8WFNFZGdlKj4gYmVsb3dDZW50ZXJFZGdl
czsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZWRnZXNTaXplOyBpKyspIHsKKyAgICAg
ICAgWFNFZGdlKiBlZGdlID0gZWRnZXNbaV07CisgICAgICAgIGlmIChlZGdlLT5tYXhZKCkgPCBu
b2RlLT5jZW50ZXIpCisgICAgICAgICAgICBhYm92ZUNlbnRlckVkZ2VzLmFwcGVuZChlZGdlKTsK
KyAgICAgICAgZWxzZSBpZiAoZWRnZS0+bWluWSgpID4gbm9kZS0+Y2VudGVyKQorICAgICAgICAg
ICAgYmVsb3dDZW50ZXJFZGdlcy5hcHBlbmQoZWRnZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIG5vZGUtPm92ZXJsYXBDZW50ZXIuYXBwZW5kKGVkZ2UpOworICAgIH0KKworICAgIC8vIEZJ
WE1FOiBjcmVhdGUgdHdvIHNvcnRlZCBjb3BpZXMgb2Ygb3ZlcmxhcENlbnRlcjogb3ZlcmxhcENl
bnRlck1pblksIG92ZXJsYXBDZW50ZXJNYXhZLCB1c2UgdGhlbSBpbiBmaW5kLi4uCisgICAgCisg
ICAgaWYgKGFib3ZlQ2VudGVyRWRnZXMuc2l6ZSgpID4gMCkKKyAgICAgICAgbm9kZS0+YWJvdmVD
ZW50ZXIgPSBhZG9wdFB0cihuZXcgWFNFZGdlVHJlZShhYm92ZUNlbnRlckVkZ2VzKSk7CisgICAg
aWYgKGJlbG93Q2VudGVyRWRnZXMuc2l6ZSgpID4gMCkKKyAgICAgICAgbm9kZS0+YmVsb3dDZW50
ZXIgPSBhZG9wdFB0cihuZXcgWFNFZGdlVHJlZShiZWxvd0NlbnRlckVkZ2VzKSk7Cit9CisKK3Zv
aWQgWFNFZGdlVHJlZTo6ZmluZEVkZ2VzVGhhdE92ZXJsYXBZKGZsb2F0IHksIFZlY3RvcjxYU0Vk
Z2UqPiYgcnYpIGNvbnN0Cit7CisgICAgaWYgKHkgPCBjZW50ZXIpIHsKKyAgICAgICAgaWYgKGFi
b3ZlQ2VudGVyKQorICAgICAgICAgICAgYWJvdmVDZW50ZXItPmZpbmRFZGdlc1RoYXRPdmVybGFw
WSh5LCBydik7CisgICAgfSBlbHNlIGlmICh5ID4gY2VudGVyKSB7CisgICAgICAgIGlmIChiZWxv
d0NlbnRlcikKKyAgICAgICAgICAgIGJlbG93Q2VudGVyLT5maW5kRWRnZXNUaGF0T3ZlcmxhcFko
eSwgcnYpOworICAgIH0KKworICAgIHNpemVfdCBvdmVybGFwRWRnZXNTaXplID0gb3ZlcmxhcENl
bnRlci5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvdmVybGFwRWRnZXNTaXpl
OyBpKyspIHsKKyAgICAgICAgWFNFZGdlKiBlZGdlID0gb3ZlcmxhcENlbnRlcltpXTsKKyAgICAg
ICAgaWYgKHkgPj0gZWRnZS0+bWluWSgpICYmIHkgPD0gZWRnZS0+bWF4WSgpKQorICAgICAgICAg
ICAgcnYuYXBwZW5kKGVkZ2UpOworICAgIH0KK30KKwordm9pZCBYU0VkZ2VUcmVlOjpmaW5kRWRn
ZXNUaGF0T3ZlcmxhcEludGVydmFsKGZsb2F0IHlNaW4sIGZsb2F0IHlNYXgsIFZlY3RvcjxYU0Vk
Z2UqPiYgcnYpIGNvbnN0Cit7CisgICAgaWYgKCh5TWluIDwgY2VudGVyKSAmJiBhYm92ZUNlbnRl
cikKKyAgICAgICAgYWJvdmVDZW50ZXItPmZpbmRFZGdlc1RoYXRPdmVybGFwSW50ZXJ2YWwoeU1p
biwgeU1heCwgcnYpOworCisgICAgaWYgKCh5TWF4ID4gY2VudGVyKSAmJiBiZWxvd0NlbnRlcikK
KyAgICAgICAgYmVsb3dDZW50ZXItPmZpbmRFZGdlc1RoYXRPdmVybGFwSW50ZXJ2YWwoeU1pbiwg
eU1heCwgcnYpOworCisgICAgc2l6ZV90IG92ZXJsYXBFZGdlc1NpemUgPSBvdmVybGFwQ2VudGVy
LnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG92ZXJsYXBFZGdlc1NpemU7IGkr
KykgeworICAgICAgICBYU0VkZ2UqIGVkZ2UgPSBvdmVybGFwQ2VudGVyW2ldOworICAgICAgICBp
ZiAoeU1heCA+IGVkZ2UtPm1pblkoKSAmJiB5TWluIDwgZWRnZS0+bWF4WSgpKQorICAgICAgICAg
ICAgcnYuYXBwZW5kKGVkZ2UpOworICAgIH0KK30KKworWFNQb2x5Z29uOjpYU1BvbHlnb24oUGFz
c093blB0cjxWZWN0b3I8ZmxvYXQ+ID4gY29vcmRpbmF0ZXMsIFdpbmRSdWxlIGZpbGxSdWxlKQor
ICAgIDogWFNoYXBlKCkKKyAgICAsIG1fY29vcmRpbmF0ZXMoY29vcmRpbmF0ZXMpCisgICAgLCBt
X2ZpbGxSdWxlKGZpbGxSdWxlKSAKK3sKKyAgICAvLyBGSVhNRTogc3BlY2lhbCBjYXNlcyBmb3Ig
KGxlbmd0aCA9PSkgMCwgMSwgMiAgcG9pbnRzCisgICAgLy8gRklYTUU6IGFzc3VtaW5nIG9wZW4g
cG9seWdvbnMgZm9yIG5vdworCisgICAgc2l6ZV90IG5WZXJ0aWNlcyA9IG51bWJlck9mVmVydGlj
ZXMoKTsKKyAgICBtX2VkZ2VzLnJlc2l6ZShuVmVydGljZXMpOworICAgIFZlY3RvcjxYU0VkZ2Uq
PiBzb3J0ZWRFZGdlc01pblkoblZlcnRpY2VzKTsKKworICAgIGZsb2F0IG1pblggPSBnZXRYQXQo
MCk7CisgICAgZmxvYXQgbWluWSA9IGdldFlBdCgwKTsKKyAgICBmbG9hdCBtYXhYID0gbWluWDsK
KyAgICBmbG9hdCBtYXhZID0gbWluWTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgblZl
cnRpY2VzOyBpKyspIHsKKyAgICAgICAgZmxvYXQgeCA9IGdldFhBdChpKTsKKyAgICAgICAgZmxv
YXQgeSA9IGdldFlBdChpKTsKKworICAgICAgICBtaW5YID0gc3RkOjptaW4oeCwgbWluWCk7Cisg
ICAgICAgIG1heFggPSBzdGQ6Om1heCh4LCBtYXhYKTsKKyAgICAgICAgbWluWSA9IHN0ZDo6bWlu
KHksIG1pblkpOworICAgICAgICBtYXhZID0gc3RkOjptYXgoeSwgbWF4WSk7CisKKyAgICAgICAg
bV9lZGdlc1tpXS5wb2x5Z29uID0gdGhpczsKKyAgICAgICAgbV9lZGdlc1tpXS5pMSA9IGk7Cisg
ICAgICAgIG1fZWRnZXNbaV0uaTIgPSAoaSsxKSAlIG5WZXJ0aWNlczsKKworICAgICAgICBzb3J0
ZWRFZGdlc01pbllbaV0gPSAmbV9lZGdlc1tpXTsKKyAgICB9CisKKyAgICBtX2JvdW5kaW5nQm94
LnNldFgobWluWCk7CisgICAgbV9ib3VuZGluZ0JveC5zZXRZKG1pblkpOworICAgIG1fYm91bmRp
bmdCb3guc2V0V2lkdGgobWF4WCAtIG1pblgpOworICAgIG1fYm91bmRpbmdCb3guc2V0SGVpZ2h0
KG1heFkgLSBtaW5ZKTsKKworICAgIHN0ZDo6c29ydChzb3J0ZWRFZGdlc01pblkuYmVnaW4oKSwg
c29ydGVkRWRnZXNNaW5ZLmVuZCgpLCBNaW5FZGdlWUNvbXBhcmF0b3IoKSk7CisgICAgbV9lZGdl
VHJlZSA9IGFkb3B0UHRyKG5ldyBYU0VkZ2VUcmVlKHNvcnRlZEVkZ2VzTWluWSkpOworfQorCitz
dGF0aWMgYm9vbCBjb21wdXRlWEludGVyc2VjdGlvbihjb25zdCBYU0VkZ2UqIGVwLCBmbG9hdCB5
LCBYU0ludGVyc2VjdGlvbiYgaSkKK3sKKyAgICBjb25zdCBYU0VkZ2UmIGUgPSAqZXA7CisKKyAg
ICBpZiAoZS5taW5ZKCkgPiB5IHx8IGUubWF4WSgpIDwgeSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIAorICAgIGZsb2F0IHgxID0gZS54MSgpOworICAgIGZsb2F0IHkxID0gZS55MSgpOwor
ICAgIGZsb2F0IHgyID0gZS54MigpOworICAgIGZsb2F0IHkyID0gZS55MigpOworICAgIGZsb2F0
IGR5ID0geTIgLSB5MTsKKworICAgIGkuZWRnZSA9IGVwOworICAgIGkueSA9IHk7CisKKyAgICBp
ZiAoIWR5KSB7CisgICAgICAgIGkudHlwZSA9IFZlcnRleFlCb3RoOworICAgICAgICBpLnggPSBl
Lm1pblgoKTsKKyAgICB9IGVsc2UgaWYgKHkgPT0gZS5taW5ZKCkpIHsKKyAgICAgICAgaS50eXBl
ID0gVmVydGV4WU1pbjsKKyAgICAgICAgaS54ID0gKHkxIDwgeTIpID8geDEgOiB4MjsKKyAgICB9
IGVsc2UgaWYgKHkgPT0gZS5tYXhZKCkpIHsKKyAgICAgICAgaS50eXBlID0gVmVydGV4WU1heDsK
KyAgICAgICAgaS54ID0gKHkxID4geTIpID8geDEgOiB4MjsKKyAgICB9IGVsc2UgeworICAgICAg
ICBpLnR5cGUgPSBOb3JtYWw7CisgICAgICAgIGkueCA9ICgoeSAtIHkxKSAqICh4MiAtIHgxKSAv
IGR5KSArIHgxOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitmbG9hdCBYU1BvbHln
b246OnJpZ2h0VmVydGV4WShzaXplX3QgaW5kZXgpIGNvbnN0Cit7CisgICAgc2l6ZV90IG5WZXJ0
aWNlcyA9IG51bWJlck9mVmVydGljZXMoKTsKKyAgICBzaXplX3QgaTEgPSAoaW5kZXggKyAxKSAl
IG5WZXJ0aWNlczsKKyAgICBzaXplX3QgaTIgPSAoaW5kZXggLSAxKSAlIG5WZXJ0aWNlczsKKwor
ICAgIGlmIChnZXRYQXQoaTEpID09IGdldFhBdChpMikpCisgICAgICAgIHJldHVybiBnZXRZQXQo
aTEpID4gZ2V0WUF0KGkyKSA/IGdldFlBdChpMSkgOiBnZXRZQXQoaTIpOworCisgICAgcmV0dXJu
IGdldFhBdChpMSkgPiBnZXRYQXQoaTIpID8gZ2V0WUF0KGkxKSA6IGdldFlBdChpMik7Cit9CisK
K3N0YXRpYyBib29sIGFwcGVuZEludGVydmFsWChmbG9hdCB4LCBib29sIGluc2lkZSwgVmVjdG9y
PFhTSW50ZXJ2YWw+JiB2KQoreworICAgIGlmICghaW5zaWRlKQorICAgICAgICB2LmFwcGVuZChY
U0ludGVydmFsKHgpKTsKKyAgICBlbHNlCisgICAgICAgIHZbdi5zaXplKCkgLSAxXS54MiA9IHg7
CisKKyAgICByZXR1cm4gIWluc2lkZTsKK30KKwordm9pZCBYU1BvbHlnb246OmNvbXB1dGVYSW50
ZXJzZWN0aW9ucyhmbG9hdCB5LCBWZWN0b3I8WFNJbnRlcnZhbD4mIHJ2KSBjb25zdAoreworICAg
IFZlY3RvcjxYU0VkZ2UqPiBvdmVybGFwcGluZ0VkZ2VzOworICAgIG1fZWRnZVRyZWUtPmZpbmRF
ZGdlc1RoYXRPdmVybGFwWSh5LCBvdmVybGFwcGluZ0VkZ2VzKTsKKworICAgIFZlY3RvcjxYU0lu
dGVyc2VjdGlvbj4gaW50ZXJzZWN0aW9uczsKKyAgICBYU0ludGVyc2VjdGlvbiBpbnRlcnNlY3Rp
b247CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvdmVybGFwcGluZ0VkZ2VzLnNpemUoKTsg
aSsrKSB7CisgICAgICAgIGlmIChjb21wdXRlWEludGVyc2VjdGlvbihvdmVybGFwcGluZ0VkZ2Vz
W2ldLCB5LCBpbnRlcnNlY3Rpb24pICYmIGludGVyc2VjdGlvbi50eXBlICE9IFZlcnRleFlCb3Ro
KQorICAgICAgICAgICAgaW50ZXJzZWN0aW9ucy5hcHBlbmQoaW50ZXJzZWN0aW9uKTsKKyAgICB9
CisgICAgaWYgKGludGVyc2VjdGlvbnMuc2l6ZSgpIDwgMikKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIHN0ZDo6c29ydChpbnRlcnNlY3Rpb25zLmJlZ2luKCksIGludGVyc2VjdGlvbnMuZW5k
KCksIEludGVyc2VjdGlvblhDb21wYXJhdG9yKCkpOworICAgIAorICAgIHNpemVfdCBpbmRleCA9
IDA7CisgICAgaW50IHdpbmRDb3VudCA9IDA7CisgICAgYm9vbCBpbnNpZGUgPSBmYWxzZTsKKwor
ICAgIHdoaWxlIChpbmRleCA8IGludGVyc2VjdGlvbnMuc2l6ZSgpKSB7CisgICAgICAgIGNvbnN0
IFhTSW50ZXJzZWN0aW9uJiB0aGlzSW50ID0gaW50ZXJzZWN0aW9uc1tpbmRleF07CisKKyAgICAg
ICAgaWYgKGluZGV4ICsgMSA8IGludGVyc2VjdGlvbnMuc2l6ZSgpKSB7CisgICAgICAgICAgICBj
b25zdCBYU0ludGVyc2VjdGlvbiYgbmV4dEludCA9IGludGVyc2VjdGlvbnNbaW5kZXggKzFdOwor
ICAgICAgICAgICAgaWYgKCh0aGlzSW50LnggPT0gbmV4dEludC54KSAmJiAodGhpc0ludC50eXBl
ID09IFZlcnRleFlNaW4gfHwgdGhpc0ludC50eXBlID09IFZlcnRleFlNYXgpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKHRoaXNJbnQudHlwZSA9PSBuZXh0SW50LnR5cGUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gc2tpcCBWZXJ0ZXhZTWF4LFZlcnRleFlNYXggYW5kIFZlcnRleFlNaW4sVmVy
dGV4WU1pbgorICAgICAgICAgICAgICAgICAgICBpbmRleCArPSAyOworICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFZlcnRleFlNaW4sVmVydGV4WU1heCBv
ciBWZXJ0ZXhZTWF4LFZlcnRleFlNaW4gPT4gVmVydGV4WU1pbgorICAgICAgICAgICAgICAgICAg
ICBpZiAobmV4dEludC50eXBlID09IFZlcnRleFlNYXgpCisgICAgICAgICAgICAgICAgICAgICAg
ICBpbnRlcnNlY3Rpb25zW2luZGV4ICsgMV0gPSB0aGlzSW50OworICAgICAgICAgICAgICAgICAg
ICBpbmRleCArPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFhTRWRnZSYgdGhp
c0VkZ2UgPSAqdGhpc0ludC5lZGdlOworICAgICAgICBib29sIGNyb3NzaW5nID0gIXdpbmRDb3Vu
dDsKKworICAgICAgICAgaWYgKGZpbGxSdWxlKCkgPT0gUlVMRV9FVkVOT0REKSB7CisgICAgICAg
ICAgICB3aW5kQ291bnQgKz0gKGdldFlBdCh0aGlzRWRnZS5pMikgPiBnZXRZQXQodGhpc0VkZ2Uu
aTEpKSA/ICsxIDogLTE7CisgICAgICAgICAgICBjcm9zc2luZyA9IGNyb3NzaW5nIHx8ICF3aW5k
Q291bnQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKHRoaXNJbnQudHlwZSA9PSBOb3JtYWwp
IHx8ICh0aGlzSW50LnR5cGUgPT0gVmVydGV4WU1pbikpIHsKKyAgICAgICAgICAgIGlmIChjcm9z
c2luZykKKyAgICAgICAgICAgICAgICBpbnNpZGUgPSBhcHBlbmRJbnRlcnZhbFgodGhpc0ludC54
LCBpbnNpZGUsIHJ2KTsKKyAgICAgICAgfSBlbHNlIGlmICh0aGlzSW50LnR5cGUgPT0gVmVydGV4
WU1heCkgeworICAgICAgICAgICAgaW50IHZpID0gKGdldFlBdCh0aGlzRWRnZS5pMikgPiBnZXRZ
QXQodGhpc0VkZ2UuaTEpKSA/IHRoaXNFZGdlLmkyIDogdGhpc0VkZ2UuaTE7CisgICAgICAgICAg
ICBpZiAoY3Jvc3NpbmcgJiYgcmlnaHRWZXJ0ZXhZKHZpKSA+IHkpCisgICAgICAgICAgICAgICAg
aW5zaWRlID0gYXBwZW5kSW50ZXJ2YWxYKHRoaXNFZGdlLm1heFgoKSwgaW5zaWRlLCBydik7Cisg
ICAgICAgIH0KKworICAgICAgICBpbmRleCArPSAxOworICAgIH0KK30KKworLy8gUmV0dXJuIHRo
ZSBYIHByb2plY3Rpb25zIG9mIHRoZSBlZGdlcyB0aGF0IG92ZXJsYXAgeTEseTIuCit2b2lkIFhT
UG9seWdvbjo6Y29tcHV0ZUVkZ2VJbnRlcnNlY3Rpb25zKGZsb2F0IHkxLCBmbG9hdCB5MiwgVmVj
dG9yPFhTSW50ZXJ2YWw+JiBydikgY29uc3QKK3sKKyAgICBpZiAoeTEgPiB5MikKKyAgICAgICAg
c3RkOjpzd2FwKHkxLCB5Mik7CisKKyAgICBWZWN0b3I8WFNFZGdlICo+IG92ZXJsYXBwaW5nRWRn
ZXM7CisgICAgbV9lZGdlVHJlZS0+ZmluZEVkZ2VzVGhhdE92ZXJsYXBJbnRlcnZhbCh5MSwgeTIs
IG92ZXJsYXBwaW5nRWRnZXMpOworCisgICAgWFNJbnRlcnNlY3Rpb24gaW50ZXJzZWN0aW9uOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3ZlcmxhcHBpbmdFZGdlcy5zaXplKCk7IGkrKykg
eworICAgICAgICBjb25zdCBYU0VkZ2UmIGVkZ2UgPSAqb3ZlcmxhcHBpbmdFZGdlc1tpXTsKKyAg
ICAgICAgZmxvYXQgeDEsIHgyOworCisgICAgICAgIGlmIChlZGdlLm1pblkoKSA8IHkxKSB7Cisg
ICAgICAgICAgICBjb21wdXRlWEludGVyc2VjdGlvbihvdmVybGFwcGluZ0VkZ2VzW2ldLCB5MSwg
aW50ZXJzZWN0aW9uKTsKKyAgICAgICAgICAgIHgxID0gaW50ZXJzZWN0aW9uLng7CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgeDEgPSAoZWRnZS55MSgpIDwgZWRnZS55MigpKSA/IGVkZ2Uu
eDEoKSA6IGVkZ2UueDIoKTsKKworICAgICAgICBpZiAoZWRnZS5tYXhZKCkgPiB5MikgeworICAg
ICAgICAgICAgY29tcHV0ZVhJbnRlcnNlY3Rpb24ob3ZlcmxhcHBpbmdFZGdlc1tpXSwgeTIsIGlu
dGVyc2VjdGlvbik7CisgICAgICAgICAgICB4MiA9IGludGVyc2VjdGlvbi54OworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIHgyID0gKGVkZ2UueTEoKSA+IGVkZ2UueTIoKSkgPyBlZGdlLngx
KCkgOiBlZGdlLngyKCk7CisKKyAgICAgICAgaWYgKHgxID4geDIpIC8vIEZJWE1FOiBJbnRlcnZh
bCBjb25zdHJ1Y3RvciBzaG91bGQgZG8gdGhpcworICAgICAgICAgICAgc3RkOjpzd2FwKHgxLCB4
Mik7CisKKyAgICAgICAgcnYuYXBwZW5kKFhTSW50ZXJ2YWwoeDEsIHgyKSk7CisgICAgfQorCisg
ICAgc29ydFhTSW50ZXJ2YWxzKHJ2KTsKK30KKwordm9pZCBYU1BvbHlnb246OmdldE91dHNpZGVJ
bnRlcnZhbHMoZmxvYXQgeTEsIGZsb2F0IHkyLCBWZWN0b3I8WFNJbnRlcnZhbD4mIHJ2KSBjb25z
dAoreworICAgIGlmICh5MSA+IHkyKQorICAgICAgICBzdGQ6OnN3YXAoeTEsIHkyKTsKKworICAg
IFZlY3RvcjxYU0ludGVydmFsPiB2MSwgdjI7CisgICAgY29tcHV0ZVhJbnRlcnNlY3Rpb25zKHkx
LCB2MSk7CisgICAgY29tcHV0ZVhJbnRlcnNlY3Rpb25zKHkyLCB2Mik7CisKKyAgICBWZWN0b3I8
WFNJbnRlcnZhbD4gbWVyZ2VkSW50ZXJ2YWxzOworICAgIG1lcmdlWFNJbnRlcnZhbHModjEsIHYy
LCBtZXJnZWRJbnRlcnZhbHMpOworCisgICAgVmVjdG9yPFhTSW50ZXJ2YWw+IGVkZ2VJbnRlcnZh
bHM7CisgICAgY29tcHV0ZUVkZ2VJbnRlcnNlY3Rpb25zKHkxLCB5MiwgZWRnZUludGVydmFscyk7
CisgICAgbWVyZ2VYU0ludGVydmFscyhtZXJnZWRJbnRlcnZhbHMsIGVkZ2VJbnRlcnZhbHMsIHJ2
KTsKK30KKwordm9pZCBYU1BvbHlnb246OmdldEluc2lkZUludGVydmFscyhmbG9hdCB5MSwgZmxv
YXQgeTIsIFZlY3RvcjxYU0ludGVydmFsPiYgcnYpIGNvbnN0Cit7CisgICAgaWYgKHkxID4geTIp
CisgICAgICAgIHN0ZDo6c3dhcCh5MSwgeTIpOworCisgICAgVmVjdG9yPFhTSW50ZXJ2YWw+IHYx
LCB2MjsKKyAgICBjb21wdXRlWEludGVyc2VjdGlvbnMoeTEsIHYxKTsKKyAgICBjb21wdXRlWElu
dGVyc2VjdGlvbnMoeTIsIHYyKTsKKworICAgIFZlY3RvcjxYU0ludGVydmFsPiBjb21tb25JbnRl
cnZhbHM7CisgICAgaW50ZXJzZWN0WFNJbnRlcnZhbHModjEsIHYyLCBjb21tb25JbnRlcnZhbHMp
OworCisgICAgVmVjdG9yPFhTSW50ZXJ2YWw+IGVkZ2VJbnRlcnZhbHM7CisgICAgY29tcHV0ZUVk
Z2VJbnRlcnNlY3Rpb25zKHkxLCB5MiwgZWRnZUludGVydmFscyk7CisgICAgc3VidHJhY3RYU0lu
dGVydmFscyhjb21tb25JbnRlcnZhbHMsIGVkZ2VJbnRlcnZhbHMsIHJ2KTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvWFNQb2x5Z29uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9YU1Bv
bHlnb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTZlYjU0Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvWFNQb2x5Z29u
LmgKQEAgLTAsMCArMSwxMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lz
dGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwor
ICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUKKyAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikK
KyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFhTUG9seWdvbl9oCisjZGVmaW5l
IFhTUG9seWdvbl9oCisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJXaW5kUnVs
ZS5oIgorI2luY2x1ZGUgIlhTaGFwZS5oIgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Cisj
aW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBYU0Vk
Z2U7CitzdHJ1Y3QgWFNFZGdlVHJlZTsKKworY2xhc3MgWFNQb2x5Z29uIDogcHVibGljIFhTaGFw
ZSB7CitwdWJsaWM6CisgICAgWFNQb2x5Z29uKFBhc3NPd25QdHI8VmVjdG9yPGZsb2F0PiA+IGNv
b3JkaW5hdGVzLCBXaW5kUnVsZSBmaWxsUnVsZSk7CisKKyAgICBmbG9hdCBnZXRYQXQoc2l6ZV90
IGkpIGNvbnN0IHsgcmV0dXJuIG1fY29vcmRpbmF0ZXMtPmF0KGkqMik7IH0KKyAgICBmbG9hdCBn
ZXRZQXQoc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fY29vcmRpbmF0ZXMtPmF0KGkqMiArIDEp
OyB9CisgICAgc2l6ZV90IG51bWJlck9mVmVydGljZXMoKSBjb25zdCB7IHJldHVybiBtX2Nvb3Jk
aW5hdGVzLT5zaXplKCkgLyAyOyB9CisgICAgV2luZFJ1bGUgZmlsbFJ1bGUoKSBjb25zdCB7IHJl
dHVybiBtX2ZpbGxSdWxlOyB9CisKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzaGFwZUJvdW5kaW5n
Qm94KCkgY29uc3QgeyByZXR1cm4gbV9ib3VuZGluZ0JveDsgfTsKKyAgICB2aXJ0dWFsIHZvaWQg
Z2V0T3V0c2lkZUludGVydmFscyhmbG9hdCB5MSwgZmxvYXQgeTIsIFZlY3RvcjxYU0ludGVydmFs
PiYpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBnZXRJbnNpZGVJbnRlcnZhbHMoZmxvYXQgeTEs
IGZsb2F0IHkyLCBWZWN0b3I8WFNJbnRlcnZhbD4mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBm
bG9hdCByaWdodFZlcnRleFkoc2l6ZV90KSBjb25zdDsKKyAgICB2b2lkIGNvbXB1dGVYSW50ZXJz
ZWN0aW9ucyhmbG9hdCB5LCBWZWN0b3I8WFNJbnRlcnZhbD4mKSBjb25zdDsKKyAgICB2b2lkIGNv
bXB1dGVFZGdlSW50ZXJzZWN0aW9ucyhmbG9hdCB5TWluLCBmbG9hdCB5TWF4LCBWZWN0b3I8WFNJ
bnRlcnZhbD4mKSBjb25zdDsKKworICAgIE93blB0cjxWZWN0b3I8ZmxvYXQ+ID4gbV9jb29yZGlu
YXRlczsKKyAgICBXaW5kUnVsZSBtX2ZpbGxSdWxlOworICAgIEZsb2F0UmVjdCBtX2JvdW5kaW5n
Qm94OworICAgIFZlY3RvcjxYU0VkZ2U+IG1fZWRnZXM7CisgICAgT3duUHRyPFhTRWRnZVRyZWU+
IG1fZWRnZVRyZWU7Cit9OworCitzdHJ1Y3QgWFNFZGdlIHsKKyAgICBjb25zdCBYU1BvbHlnb24q
IHBvbHlnb247CisgICAgc2l6ZV90IGkxOworICAgIHNpemVfdCBpMjsKKworICAgIFhTRWRnZSgp
CisgICAgICAgIDogcG9seWdvbigwKQorICAgICAgICAsIGkxKDApCisgICAgICAgICwgaTIoMCkK
KyAgICB7CisgICAgfQorCisgICAgZmxvYXQgeDEoKSBjb25zdCB7IHJldHVybiBwb2x5Z29uLT5n
ZXRYQXQoaTEpOyB9CisgICAgZmxvYXQgeTEoKSBjb25zdCB7IHJldHVybiBwb2x5Z29uLT5nZXRZ
QXQoaTEpOyB9CisgICAgZmxvYXQgeDIoKSBjb25zdCB7IHJldHVybiBwb2x5Z29uLT5nZXRYQXQo
aTIpOyB9CisgICAgZmxvYXQgeTIoKSBjb25zdCB7IHJldHVybiBwb2x5Z29uLT5nZXRZQXQoaTIp
OyB9CisKKyAgICBmbG9hdCBtaW5YKCkgY29uc3QgeyByZXR1cm4gc3RkOjptaW4oeDEoKSwgeDIo
KSk7IH0KKyAgICBmbG9hdCBtaW5ZKCkgY29uc3QgeyByZXR1cm4gc3RkOjptaW4oeTEoKSwgeTIo
KSk7IH0gCisgICAgZmxvYXQgbWF4WCgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWF4KHgxKCksIHgy
KCkpOyB9CisgICAgZmxvYXQgbWF4WSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWF4KHkxKCksIHky
KCkpOyB9Cit9OworCitzdHJ1Y3QgWFNFZGdlVHJlZSB7Citwcml2YXRlOgorICAgIC8vIEZJWE1F
OiBtaW5TdWJ0cmVlU2l6ZSAtIGRvbid0IGJvdGhlciBjcmVhdGluZyBzdWJ0cmVlcyBmb3IgbGVz
cyB0aGFuIE4gZWRnZXMKKyAgICBmbG9hdCBjZW50ZXI7CisgICAgVmVjdG9yPFhTRWRnZSo+IG92
ZXJsYXBDZW50ZXI7CisgICAgT3duUHRyPFhTRWRnZVRyZWU+IGFib3ZlQ2VudGVyOworICAgIE93
blB0cjxYU0VkZ2VUcmVlPiBiZWxvd0NlbnRlcjsKKworICAgIHN0YXRpYyB2b2lkIGluaXRFZGdl
VHJlZShYU0VkZ2VUcmVlKiwgY29uc3QgVmVjdG9yPFhTRWRnZSo+JiBzb3J0ZWRFZGdlcyk7CisK
K3B1YmxpYzoKKyAgICBYU0VkZ2VUcmVlKGNvbnN0IFZlY3RvcjxYU0VkZ2UqPiYgc29ydGVkRWRn
ZXMpOworCisgICAgdm9pZCBmaW5kRWRnZXNUaGF0T3ZlcmxhcFkoZmxvYXQgeSwgVmVjdG9yPFhT
RWRnZSo+JikgY29uc3Q7CisgICAgdm9pZCBmaW5kRWRnZXNUaGF0T3ZlcmxhcEludGVydmFsKGZs
b2F0IG1pblksIGZsb2F0IG1heFksIFZlY3RvcjxYU0VkZ2UqPiYpIGNvbnN0OworfTsKKworZW51
bSBYU0ludGVyc2VjdGlvblR5cGUgeworICAgIE5vcm1hbCA9IDAsCisgICAgVmVydGV4WU1pbiA9
IDEsCisgICAgVmVydGV4WU1heCA9IDIsCisgICAgVmVydGV4WUJvdGggPSAzCit9OworCitzdHJ1
Y3QgWFNJbnRlcnNlY3Rpb24geworICAgIGNvbnN0IFhTRWRnZSogZWRnZTsKKyAgICBmbG9hdCB4
OworICAgIGZsb2F0IHk7CisgICAgWFNJbnRlcnNlY3Rpb25UeXBlIHR5cGU7CisKKyAgICBYU0lu
dGVyc2VjdGlvbigpCisgICAgICAgIDogZWRnZSgwKQorICAgICAgICAsIHgoMCkKKyAgICAgICAg
LCB5KDApCisgICAgICAgICwgdHlwZShOb3JtYWwpCisgICAgeworICAgIH0KK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFhTUG9seWdvbl9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9YU1JlY3RhbmdsZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9YU1JlY3RhbmdsZS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uN2FiZDZlYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1hTUmVjdGFuZ2xlLmNwcApAQCAtMCwwICsxLDExMiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAg
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMKKyAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJ
R0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICog
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICog
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJYU1JlY3RhbmdsZS5oIgor
CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitz
dGF0aWMgaW5saW5lIGZsb2F0IGVsbGlwc2VYSW50ZXJjZXB0KGZsb2F0IHksIGZsb2F0IHJ4LCBm
bG9hdCByeSkgCit7CisgICAgQVNTRVJUKHJ5ID4gMCk7CisgICAgcmV0dXJuIHJ4ICogc3FydCgx
IC0gKHkqeSkgLyAocnkqcnkpKTsKK30KKwordm9pZCBYU1JlY3RhbmdsZTo6Z2V0T3V0c2lkZUlu
dGVydmFscyhmbG9hdCB5MSwgZmxvYXQgeTIsIFZlY3RvcjxYU0ludGVydmFsPiYgcnYpIGNvbnN0
Cit7CisgICAgaWYgKHkxID4geTIpCisgICAgICAgIHN0ZDo6c3dhcCh5MSwgeTIpOworCisgICAg
aWYgKHkyIDwgbV95IHx8IHkxID49IG1feSArIG1faGVpZ2h0KQorICAgICAgICByZXR1cm47CisK
KyAgICBmbG9hdCB4MSA9IG1feDsKKyAgICBmbG9hdCB4MiA9IG1feCArIG1fd2lkdGg7CisKKyAg
ICBpZiAobV9yeSA+IDApIHsKKyAgICAgICAgaWYgKHkyIDwgbV95ICsgbV9yeSkgeworICAgICAg
ICAgICAgZmxvYXQgeWkgPSB5MiAtIG1feSAtIG1fcnk7CisgICAgICAgICAgICBmbG9hdCB4aSA9
IGVsbGlwc2VYSW50ZXJjZXB0KHlpLCBtX3J4LCBtX3J5KTsKKyAgICAgICAgICAgIHgxID0gbV94
ICsgbV9yeCAtIHhpOworICAgICAgICAgICAgeDIgPSBtX3ggKyBtX3dpZHRoIC0gbV9yeCArIHhp
OworICAgICAgICB9IGVsc2UgaWYgKHkxID4gbV95ICsgbV9oZWlnaHQgLSBtX3J5KSB7CisgICAg
ICAgICAgICBmbG9hdCB5aSA9ICB5MSAtIChtX3kgKyBtX2hlaWdodCAtIG1fcnkpOworICAgICAg
ICAgICAgZmxvYXQgeGkgPSBlbGxpcHNlWEludGVyY2VwdCh5aSwgbV9yeCwgbV9yeSk7CisgICAg
ICAgICAgICB4MSA9IG1feCArIG1fcnggLSB4aTsKKyAgICAgICAgICAgIHgyID0gbV94ICsgbV93
aWR0aCAtIG1fcnggKyB4aTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJ2LmFwcGVuZChYU0lu
dGVydmFsKHgxLCB4MikpOworfQorCit2b2lkIFhTUmVjdGFuZ2xlOjpnZXRJbnNpZGVJbnRlcnZh
bHMoZmxvYXQgeTEsIGZsb2F0IHkyLCBWZWN0b3I8WFNJbnRlcnZhbD4mIHJ2KSBjb25zdAorewor
ICAgIGlmICh5MSA+IHkyKQorICAgICAgICBzdGQ6OnN3YXAoeTEsIHkyKTsKKworICAgIGlmICh5
MSA8IG1feSB8fCB5MiA+PSBtX3kgKyBtX2hlaWdodCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
ZmxvYXQgeDEgPSBtX3g7CisgICAgZmxvYXQgeDIgPSBtX3ggKyBtX3dpZHRoOworCisgICAgaWYg
KG1fcnkgPiAwKSB7CisgICAgICAgIGJvb2wgeTFJbnRlcmNlcHRzQ29ybmVyID0geTEgPCBtX3kg
KyBtX3J5OworICAgICAgICBib29sIHkySW50ZXJjZXB0c0Nvcm5lciA9IHkyID4gbV95ICsgbV9o
ZWlnaHQgLSBtX3J5OworICAgICAgICBmbG9hdCB4aSA9IDA7CisKKyAgICAgICAgaWYgKHkxSW50
ZXJjZXB0c0Nvcm5lciAmJiB5MkludGVyY2VwdHNDb3JuZXIpIHsKKyAgICAgICAgICAgIGlmICAo
eTEgPCBtX2hlaWdodCArIDIqbV95IC0geTIpIHsKKyAgICAgICAgICAgICAgICBmbG9hdCB5aSA9
IHkxIC0gbV95IC0gbV9yeTsKKyAgICAgICAgICAgICAgICB4aSA9IGVsbGlwc2VYSW50ZXJjZXB0
KHlpLCBtX3J4LCBtX3J5KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ZmxvYXQgeWkgPSAgeTIgLSAobV95ICsgbV9oZWlnaHQgLSBtX3J5KTsKKyAgICAgICAgICAgICAg
ICB4aSA9IGVsbGlwc2VYSW50ZXJjZXB0KHlpLCBtX3J4LCBtX3J5KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIGlmICh5MUludGVyY2VwdHNDb3JuZXIpIHsKKyAgICAgICAgICAgIGZs
b2F0IHlpID0geTEgLSBtX3kgLSBtX3J5OworICAgICAgICAgICAgeGkgPSBlbGxpcHNlWEludGVy
Y2VwdCh5aSwgbV9yeCwgbV9yeSk7CisgICAgICAgIH0gZWxzZSBpZiAoeTJJbnRlcmNlcHRzQ29y
bmVyKSB7CisgICAgICAgICAgICBmbG9hdCB5aSA9ICB5MiAtIChtX3kgKyBtX2hlaWdodCAtIG1f
cnkpOworICAgICAgICAgICAgeGkgPSBlbGxpcHNlWEludGVyY2VwdCh5aSwgbV9yeCwgbV9yeSk7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoeTFJbnRlcmNlcHRzQ29ybmVyIHx8IHkySW50ZXJj
ZXB0c0Nvcm5lcikgeworICAgICAgICAgICAgeDEgPSBtX3ggKyBtX3J4IC0geGk7CisgICAgICAg
ICAgICB4MiA9IG1feCArIG1fd2lkdGggLSBtX3J4ICsgeGk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBydi5hcHBlbmQoWFNJbnRlcnZhbCh4MSwgeDIpKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvWFNS
ZWN0YW5nbGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1hTUmVjdGFuZ2xl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdkMjM0ZQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1hTUmVjdGFuZ2xlLmgK
QEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1z
IEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRQorICogQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICog
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgWFNSZWN0YW5nbGVfaAorI2RlZmluZSBY
U1JlY3RhbmdsZV9oCisKKyNpbmNsdWRlICJYU2hhcGUuaCIKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBYU1JlY3RhbmdsZSA6IHB1YmxpYyBYU2hhcGUgeworcHVibGljOgorICAgIFhTUmVj
dGFuZ2xlKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0
IHJ4ID0gMCwgZmxvYXQgcnkgPSAwKQorICAgICAgICA6IFhTaGFwZSgpCisgICAgICAgICwgbV94
KHgpCisgICAgICAgICwgbV95KHkpCisgICAgICAgICwgbV93aWR0aCh3aWR0aCkKKyAgICAgICAg
LCBtX2hlaWdodChoZWlnaHQpCisgICAgICAgICwgbV9yeChyeCkKKyAgICAgICAgLCBtX3J5KHJ5
KSAKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCBGbG9hdFJlY3Qgc2hhcGVCb3VuZGluZ0Jv
eCgpIGNvbnN0IHsgcmV0dXJuIEZsb2F0UmVjdChtX3gsIG1feSwgbV93aWR0aCwgbV9oZWlnaHQp
OyB9CisgICAgdmlydHVhbCB2b2lkIGdldE91dHNpZGVJbnRlcnZhbHMoZmxvYXQgeTEsIGZsb2F0
IHkyLCBWZWN0b3I8WFNJbnRlcnZhbD4mKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0SW5z
aWRlSW50ZXJ2YWxzKGZsb2F0IHkxLCBmbG9hdCB5MiwgVmVjdG9yPFhTSW50ZXJ2YWw+JikgY29u
c3Q7CisKK3ByaXZhdGU6CisgICAgZmxvYXQgbV94OworICAgIGZsb2F0IG1feTsKKyAgICBmbG9h
dCBtX3dpZHRoOworICAgIGZsb2F0IG1faGVpZ2h0OworICAgIGZsb2F0IG1fcng7CisgICAgZmxv
YXQgbV9yeTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFhTUmVj
dGFuZ2xlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1hT
aGFwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9YU2hhcGUuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5OGUyNmQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9YU2hhcGUuY3BwCkBAIC0wLDAg
KzEsMTIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jw
b3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisg
KiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlhTaGFwZS5o
IgorCisjaW5jbHVkZSAiQmFzaWNTaGFwZUZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgIkxlbmd0aEZ1
bmN0aW9ucy5oIgorI2luY2x1ZGUgIldpbmRSdWxlLmgiCisjaW5jbHVkZSAiWFNQb2x5Z29uLmgi
CisjaW5jbHVkZSAiWFNSZWN0YW5nbGUuaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgor
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBQYXNzT3duUHRyPFhTaGFwZT4gY3JlYXRlWFNS
ZWN0YW5nbGUoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxv
YXQgcngsIGZsb2F0IHJ5KQoreworICAgIEFTU0VSVCh3aWR0aCA+PSAwICYmIGhlaWdodCA+PSAw
ICYmIHJ4ID49IDAgJiYgcnkgPj0gMCk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBYU1JlY3Rh
bmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCByeCwgcnkpKTsKK30KKworc3RhdGljIFBhc3NPd25Q
dHI8WFNoYXBlPiBjcmVhdGVYU0NpcmNsZShmbG9hdCBjeCwgZmxvYXQgY3ksIGZsb2F0IHJhZGl1
cykgCit7CisgICAgQVNTRVJUKHJhZGl1cyA+PSAwKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3
IFhTUmVjdGFuZ2xlKGN4IC0gcmFkaXVzLCBjeSAtIHJhZGl1cywgY3ggKyByYWRpdXMsIGN5ICsg
cmFkaXVzLCByYWRpdXMsIHJhZGl1cykpOworfQorCitzdGF0aWMgUGFzc093blB0cjxYU2hhcGU+
IGNyZWF0ZVhTRWxsaXBzZShmbG9hdCBjeCwgZmxvYXQgY3ksIGZsb2F0IHJ4LCBmbG9hdCByeSkK
K3sKKyAgICBBU1NFUlQocnggPj0gMCAmJiByeSA+PSAwKTsKKyAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IFhTUmVjdGFuZ2xlKGN4IC0gcngsIGN5IC0gcnksIGN4ICsgcngsIGN5ICsgcnksIHJ4LCBy
eSkpOworfQorCitzdGF0aWMgUGFzc093blB0cjxYU2hhcGU+IGNyZWF0ZVhTUG9seWdvbihQYXNz
T3duUHRyPFZlY3RvcjxmbG9hdD4gPiBjb29yZGluYXRlcywgV2luZFJ1bGUgZmlsbFJ1bGUpCit7
CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBYU1BvbHlnb24oY29vcmRpbmF0ZXMsIGZpbGxSdWxl
KSk7Cit9CisKK1Bhc3NPd25QdHI8WFNoYXBlPiBYU2hhcGU6OmNyZWF0ZVhTaGFwZShjb25zdCBC
YXNpY1NoYXBlKiB3cmFwU2hhcGUsIGZsb2F0IGJveFdpZHRoLCBmbG9hdCBib3hIZWlnaHQpCit7
CisgICAgaWYgKCF3cmFwU2hhcGUpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgc3dp
dGNoICh3cmFwU2hhcGUtPnR5cGUoKSkgeworICAgIGNhc2UgQmFzaWNTaGFwZTo6QkFTSUNfU0hB
UEVfUkVDVEFOR0xFOiB7CisgICAgICAgIGNvbnN0IEJhc2ljU2hhcGVSZWN0YW5nbGUqIHJlY3Rh
bmdsZSA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljU2hhcGVSZWN0YW5nbGUqPih3cmFwU2hhcGUp
OworICAgICAgICBMZW5ndGggcnggPSByZWN0YW5nbGUtPmNvcm5lclJhZGl1c1goKTsKKyAgICAg
ICAgTGVuZ3RoIHJ5ID0gcmVjdGFuZ2xlLT5jb3JuZXJSYWRpdXNZKCk7CisgICAgICAgIHJldHVy
biBjcmVhdGVYU1JlY3RhbmdsZSgKKyAgICAgICAgICAgIGZsb2F0VmFsdWVGb3JMZW5ndGgocmVj
dGFuZ2xlLT54KCksIGJveFdpZHRoKSwKKyAgICAgICAgICAgIGZsb2F0VmFsdWVGb3JMZW5ndGgo
cmVjdGFuZ2xlLT55KCksIGJveEhlaWdodCksCisgICAgICAgICAgICBmbG9hdFZhbHVlRm9yTGVu
Z3RoKHJlY3RhbmdsZS0+d2lkdGgoKSwgYm94V2lkdGgpLAorICAgICAgICAgICAgZmxvYXRWYWx1
ZUZvckxlbmd0aChyZWN0YW5nbGUtPmhlaWdodCgpLCBib3hIZWlnaHQpLAorICAgICAgICAgICAg
cnguaXNVbmRlZmluZWQoKSA/IDAgOiBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJ4LCBib3hXaWR0aCks
CisgICAgICAgICAgICByeS5pc1VuZGVmaW5lZCgpID8gMCA6IGZsb2F0VmFsdWVGb3JMZW5ndGgo
cnksIGJveEhlaWdodCkgKTsKKyAgICB9CisKKyAgICBjYXNlIEJhc2ljU2hhcGU6OkJBU0lDX1NI
QVBFX0NJUkNMRTogeworICAgICAgICBjb25zdCBCYXNpY1NoYXBlQ2lyY2xlKiBjaXJjbGUgPSBz
dGF0aWNfY2FzdDxjb25zdCBCYXNpY1NoYXBlQ2lyY2xlKj4od3JhcFNoYXBlKTsKKyAgICAgICAg
cmV0dXJuIGNyZWF0ZVhTQ2lyY2xlKAorICAgICAgICAgICAgZmxvYXRWYWx1ZUZvckxlbmd0aChj
aXJjbGUtPmNlbnRlclgoKSwgYm94V2lkdGgpLAorICAgICAgICAgICAgZmxvYXRWYWx1ZUZvckxl
bmd0aChjaXJjbGUtPmNlbnRlclkoKSwgYm94SGVpZ2h0KSwKKyAgICAgICAgICAgIGZsb2F0VmFs
dWVGb3JMZW5ndGgoY2lyY2xlLT5yYWRpdXMoKSwgc3RkOjptYXgoYm94SGVpZ2h0LCBib3hXaWR0
aCkpICk7CisgICAgfQorCisgICAgY2FzZSBCYXNpY1NoYXBlOjpCQVNJQ19TSEFQRV9FTExJUFNF
OiB7CisgICAgICAgIGNvbnN0IEJhc2ljU2hhcGVFbGxpcHNlKiBlbGxpcHNlID0gc3RhdGljX2Nh
c3Q8Y29uc3QgQmFzaWNTaGFwZUVsbGlwc2UqPih3cmFwU2hhcGUpOworICAgICAgICByZXR1cm4g
Y3JlYXRlWFNFbGxpcHNlKAorICAgICAgICAgICAgZmxvYXRWYWx1ZUZvckxlbmd0aChlbGxpcHNl
LT5jZW50ZXJYKCksIGJveFdpZHRoKSwKKyAgICAgICAgICAgIGZsb2F0VmFsdWVGb3JMZW5ndGgo
ZWxsaXBzZS0+Y2VudGVyWSgpLCBib3hIZWlnaHQpLAorICAgICAgICAgICAgZmxvYXRWYWx1ZUZv
ckxlbmd0aChlbGxpcHNlLT5yYWRpdXNYKCksIGJveFdpZHRoKSwKKyAgICAgICAgICAgIGZsb2F0
VmFsdWVGb3JMZW5ndGgoZWxsaXBzZS0+cmFkaXVzWSgpLCBib3hIZWlnaHQpICk7CisgICAgfQor
CisgICAgY2FzZSBCYXNpY1NoYXBlOjpCQVNJQ19TSEFQRV9QT0xZR09OOiB7CisgICAgICAgIGNv
bnN0IEJhc2ljU2hhcGVQb2x5Z29uKiBwb2x5Z29uID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNT
aGFwZVBvbHlnb24qPih3cmFwU2hhcGUpOworICAgICAgICBjb25zdCBWZWN0b3I8TGVuZ3RoPiYg
dmFsdWVzID0gcG9seWdvbi0+dmFsdWVzKCk7CisgICAgICAgIHNpemVfdCB2YWx1ZXNTaXplID0g
dmFsdWVzLnNpemUoKTsKKyAgICAgICAgVmVjdG9yPGZsb2F0PiAqY3YgPSBuZXcgVmVjdG9yPGZs
b2F0Pih2YWx1ZXNTaXplKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVl
c1NpemU7IGkgKz0gMikgeworICAgICAgICAgICAgY3YtPmF0KGkpID0gZmxvYXRWYWx1ZUZvckxl
bmd0aCh2YWx1ZXMuYXQoaSksIGJveFdpZHRoKTsKKyAgICAgICAgICAgIGN2LT5hdChpKzEpID0g
ZmxvYXRWYWx1ZUZvckxlbmd0aCh2YWx1ZXMuYXQoaSsxKSwgYm94SGVpZ2h0KTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gY3JlYXRlWFNQb2x5Z29uKGFkb3B0UHRyKGN2KSwgcG9seWdvbi0+
d2luZFJ1bGUoKSk7CisgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHJldHVybiBu
dWxscHRyOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9YU2hhcGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1hTaGFwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjZhNGQwZjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9YU2hhcGUuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisg
KiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICog
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBYU2hhcGVfaAor
I2RlZmluZSBYU2hhcGVfaAorCisjaW5jbHVkZSAiQmFzaWNTaGFwZXMuaCIKKyNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKKyNpbmNsdWRlICJYU0ludGVydmFsLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NP
d25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgWFNoYXBlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxYU2hhcGU+
IGNyZWF0ZVhTaGFwZShjb25zdCBCYXNpY1NoYXBlKiwgZmxvYXQgYm9yZGVyQm94V2lkdGgsIGZs
b2F0IGJvcmRlckJveEhlaWdodCk7CisKKyAgICB2aXJ0dWFsIH5YU2hhcGUoKSB7IH0KKworICAg
IHZpcnR1YWwgRmxvYXRSZWN0IHNoYXBlQm91bmRpbmdCb3goKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGdldEluc2lkZUludGVydmFscyhmbG9hdCB5TWluLCBmbG9hdCB5TWF4LCBWZWN0
b3I8WFNJbnRlcnZhbD4mKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldE91dHNpZGVJ
bnRlcnZhbHMoZmxvYXQgeU1pbiwgZmxvYXQgeU1heCwgVmVjdG9yPFhTSW50ZXJ2YWw+JikgY29u
c3QgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gWFNoYXBl
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVM
YXlvdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91
dC5jcHAKaW5kZXggOGI5NjBmMC4uMmZiZGVlNiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKQEAgLTEzMjIsOCArMTMyMiwxMSBA
QCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZShMaW5lTGF5b3V0
U3RhdGUmIGxheW91dFN0YXRlLCBJbmxpbgogI2lmIEVOQUJMRShDU1NfRVhDTFVTSU9OUykKICAg
ICAgICAgLy8gRklYTUU6IEJ1ZyA4OTk5MzogSWYgdGhlIHdyYXAgc2hhcGUgY29tZXMgZnJvbSBh
IHBhcmVudCwgd2Ugd2lsbCBuZWVkIHRvIGFkanVzdAogICAgICAgICAvLyB0aGUgaGVpZ2h0IGNv
b3JkaW5hdGUKLSAgICAgICAgaWYgKHdyYXBTaGFwZUluZm8pCi0gICAgICAgICAgICB3cmFwU2hh
cGVJbmZvLT5jb21wdXRlU2VnbWVudHNGb3JMaW5lKGxvZ2ljYWxIZWlnaHQoKSk7CisgICAgICAg
IGlmICh3cmFwU2hhcGVJbmZvKSB7CisgICAgICAgICAgICBMYXlvdXRVbml0IGxpbmVUb3AgPSBs
b2dpY2FsSGVpZ2h0KCk7CisgICAgICAgICAgICBMYXlvdXRVbml0IGxpbmVCb3R0b20gPSBsaW5l
VG9wICsgbGluZUhlaWdodCh0cnVlLCBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gSG9yaXpv
bnRhbExpbmUgOiBWZXJ0aWNhbExpbmUsIFBvc2l0aW9uT2ZJbnRlcmlvckxpbmVCb3hlcyk7Cisg
ICAgICAgICAgICB3cmFwU2hhcGVJbmZvLT5jb21wdXRlU2VnbWVudHNGb3JMaW5lKGxpbmVUb3As
IGxpbmVCb3R0b20pOworICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgZW5kID0gbGluZUJyZWFr
ZXIubmV4dExpbmVCcmVhayhyZXNvbHZlciwgbGF5b3V0U3RhdGUubGluZUluZm8oKSwgcmVuZGVy
VGV4dEluZm8sIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIGNvbnNlY3V0aXZlSHlwaGVuYXRl
ZExpbmVzKTsKICAgICAgICAgaWYgKHJlc29sdmVyLnBvc2l0aW9uKCkuYXRFbmQoKSkgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1dyYXBTaGFwZUluZm8uY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1dyYXBTaGFwZUluZm8uY3BwCmluZGV4IDhlZjczYzcuLjZm
MGUzOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9XcmFwU2hhcGVJbmZv
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvV3JhcFNoYXBlSW5mby5jcHAKQEAg
LTEwNSwzNyArMTA1LDI5IEBAIHZvaWQgV3JhcFNoYXBlSW5mbzo6Y29tcHV0ZVNoYXBlU2l6ZShM
YXlvdXRVbml0IGxvZ2ljYWxXaWR0aCwgTGF5b3V0VW5pdCBsb2dpY2FsCiAKICAgICAvLyBGSVhN
RTogQnVnIDg5OTkzOiBUaGUgd3JhcCBzaGFwZSBtYXkgY29tZSBmcm9tIHRoZSBwYXJlbnQgb2Jq
ZWN0CiAgICAgQmFzaWNTaGFwZSogc2hhcGUgPSBtX2Jsb2NrLT5zdHlsZSgpLT53cmFwU2hhcGVJ
bnNpZGUoKTsKLQogICAgIEFTU0VSVChzaGFwZSk7CiAKLSAgICBzd2l0Y2ggKHNoYXBlLT50eXBl
KCkpIHsKLSAgICBjYXNlIEJhc2ljU2hhcGU6OkJBU0lDX1NIQVBFX1JFQ1RBTkdMRTogewotICAg
ICAgICBCYXNpY1NoYXBlUmVjdGFuZ2xlKiByZWN0ID0gc3RhdGljX2Nhc3Q8QmFzaWNTaGFwZVJl
Y3RhbmdsZSAqPihzaGFwZSk7Ci0gICAgICAgIG1fc2hhcGVMZWZ0ID0gdmFsdWVGb3JMZW5ndGgo
cmVjdC0+eCgpLCBtX2xvZ2ljYWxXaWR0aCk7Ci0gICAgICAgIG1fc2hhcGVXaWR0aCA9IHZhbHVl
Rm9yTGVuZ3RoKHJlY3QtPndpZHRoKCksIG1fbG9naWNhbFdpZHRoKTsKLSAgICAgICAgbV9zaGFw
ZVRvcCA9IHZhbHVlRm9yTGVuZ3RoKHJlY3QtPnkoKSwgbV9sb2dpY2FsSGVpZ2h0KTsKLSAgICAg
ICAgbV9zaGFwZUhlaWdodCA9IHZhbHVlRm9yTGVuZ3RoKHJlY3QtPmhlaWdodCgpLCBtX2xvZ2lj
YWxIZWlnaHQpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgLy8gRklYTUU6IEJ1ZyA4OTcw
NzogRW5hYmxlIHNoYXBlIGluc2lkZSBmb3Igbm9uLXJlY3Rhbmd1bGFyIHNoYXBlcwotICAgIGNh
c2UgQmFzaWNTaGFwZTo6QkFTSUNfU0hBUEVfQ0lSQ0xFOgotICAgIGNhc2UgQmFzaWNTaGFwZTo6
QkFTSUNfU0hBUEVfRUxMSVBTRToKLSAgICBjYXNlIEJhc2ljU2hhcGU6OkJBU0lDX1NIQVBFX1BP
TFlHT046IHsKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIH0KKyAgICBtX3hzaGFwZSA9IFhTaGFwZTo6Y3JlYXRlWFNoYXBlKHNoYXBlLCBsb2dp
Y2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQpOworICAgIEFTU0VSVChtX3hzaGFwZSk7CiB9CiAKLWJv
b2wgV3JhcFNoYXBlSW5mbzo6Y29tcHV0ZVNlZ21lbnRzRm9yTGluZShMYXlvdXRVbml0IGxpbmVU
b3ApCitib29sIFdyYXBTaGFwZUluZm86OmNvbXB1dGVTZWdtZW50c0ZvckxpbmUoTGF5b3V0VW5p
dCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pCiB7CiAgICAgbV9saW5lVG9wID0gbGlu
ZVRvcDsKICAgICBtX3NlZ21lbnRzLmNsZWFyKCk7CisKICAgICBpZiAobGluZVN0YXRlKCkgPT0g
TElORV9JTlNJREVfU0hBUEUpIHsKLSAgICAgICAgTGluZVNlZ21lbnQgc2VnbWVudDsKLSAgICAg
ICAgc2VnbWVudC5sb2dpY2FsTGVmdCA9IG1fc2hhcGVMZWZ0OwotICAgICAgICBzZWdtZW50Lmxv
Z2ljYWxSaWdodCA9IG1fc2hhcGVMZWZ0ICsgbV9zaGFwZVdpZHRoOwotICAgICAgICBtX3NlZ21l
bnRzLmFwcGVuZChzZWdtZW50KTsKKyAgICAgICAgQVNTRVJUKG1feHNoYXBlKTsKKworICAgICAg
ICBsaW5lQm90dG9tID0gbGluZVRvcDsgLy8gRklYTUU6IEJ1ZyA5NTQ3OSwgd29ya2Fyb3VuZCBm
b3Igbm93CisgICAgICAgIFZlY3RvcjxYU0ludGVydmFsPiBpbnRlcnZhbHM7CisgICAgICAgIG1f
eHNoYXBlLT5nZXRJbnNpZGVJbnRlcnZhbHMobGluZVRvcCwgbGluZUJvdHRvbSwgaW50ZXJ2YWxz
KTsgIAorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGludGVydmFscy5zaXplKCk7IGkr
KykgeworICAgICAgICAgICAgTGluZVNlZ21lbnQgc2VnbWVudDsKKyAgICAgICAgICAgIHNlZ21l
bnQubG9naWNhbExlZnQgPSBpbnRlcnZhbHNbaV0ueDE7CisgICAgICAgICAgICBzZWdtZW50Lmxv
Z2ljYWxSaWdodCA9IGludGVydmFsc1tpXS54MjsKKyAgICAgICAgICAgIG1fc2VnbWVudHMuYXBw
ZW5kKHNlZ21lbnQpOworICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBtX3NlZ21lbnRzLnNp
emUoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9XcmFwU2hhcGVJ
bmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvV3JhcFNoYXBlSW5mby5oCmluZGV4IGE4
MDM2ZDAuLjg4ZmQ1MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9XcmFw
U2hhcGVJbmZvLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1dyYXBTaGFwZUluZm8u
aApAQCAtMzIsNyArMzIsMTAgQEAKIAogI2lmIEVOQUJMRShDU1NfRVhDTFVTSU9OUykKIAorI2lu
Y2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkxheW91dFR5cGVzSW5saW5lTWV0aG9kcy5o
IgorI2luY2x1ZGUgIlhTaGFwZS5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtNjQsMTQg
KzY3LDE4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCByZW1vdmVXcmFwU2hhcGVJbmZvRm9y
UmVuZGVyQmxvY2soY29uc3QgUmVuZGVyQmxvY2sqKTsKICAgICBzdGF0aWMgYm9vbCBpc1dyYXBT
aGFwZUluZm9FbmFibGVkRm9yUmVuZGVyQmxvY2soY29uc3QgUmVuZGVyQmxvY2sqKTsKIAotICAg
IExheW91dFVuaXQgc2hhcGVUb3AoKSBjb25zdCB7IHJldHVybiBtX3NoYXBlVG9wOyB9CisgICAg
TGF5b3V0VW5pdCBzaGFwZVRvcCgpIGNvbnN0IAorICAgIHsgCisgICAgICAgIEFTU0VSVChtX3hz
aGFwZSk7CisgICAgICAgIHJldHVybiBtX3hzaGFwZS0+c2hhcGVCb3VuZGluZ0JveCgpLnkoKTsK
KyAgICB9CiAgICAgYm9vbCBoYXNTZWdtZW50cygpIGNvbnN0OwogICAgIGNvbnN0IFNlZ21lbnRM
aXN0JiBzZWdtZW50cygpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaGFzU2VnbWVudHMo
KSk7CiAgICAgICAgIHJldHVybiBtX3NlZ21lbnRzOwogICAgIH0KLSAgICBib29sIGNvbXB1dGVT
ZWdtZW50c0ZvckxpbmUoTGF5b3V0VW5pdCk7CisgICAgYm9vbCBjb21wdXRlU2VnbWVudHNGb3JM
aW5lKExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKTsKICAgICBMaW5l
U3RhdGUgbGluZVN0YXRlKCkgY29uc3Q7CiAgICAgdm9pZCBjb21wdXRlU2hhcGVTaXplKExheW91
dFVuaXQgbG9naWNhbFdpZHRoLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQpOwogICAgIHZvaWQg
ZGlydHlXcmFwU2hhcGVTaXplKCkgeyBtX3dyYXBTaGFwZVNpemVEaXJ0eSA9IHRydWU7IH0KQEAg
LTgwLDEwICs4Nyw3IEBAIHByaXZhdGU6CiAgICAgV3JhcFNoYXBlSW5mbyhSZW5kZXJCbG9jayop
OwogCiAgICAgUmVuZGVyQmxvY2sqIG1fYmxvY2s7Ci0gICAgTGF5b3V0VW5pdCBtX3NoYXBlTGVm
dDsKLSAgICBMYXlvdXRVbml0IG1fc2hhcGVUb3A7Ci0gICAgTGF5b3V0VW5pdCBtX3NoYXBlV2lk
dGg7Ci0gICAgTGF5b3V0VW5pdCBtX3NoYXBlSGVpZ2h0OworICAgIE93blB0cjxYU2hhcGU+IG1f
eHNoYXBlOwogCiAgICAgTGF5b3V0VW5pdCBtX2xpbmVUb3A7CiAgICAgTGF5b3V0VW5pdCBtX2xv
Z2ljYWxXaWR0aDsKQEAgLTk1LDEwICs5OSwxNSBAQCBwcml2YXRlOgogCiBpbmxpbmUgV3JhcFNo
YXBlSW5mbzo6TGluZVN0YXRlIFdyYXBTaGFwZUluZm86OmxpbmVTdGF0ZSgpIGNvbnN0CiB7Ci0g
ICAgaWYgKG1fbGluZVRvcCA8IG1fc2hhcGVUb3ApCisgICAgQVNTRVJUKG1feHNoYXBlKTsKKyAg
ICBGbG9hdFJlY3Qgc2hhcGVCb3VuZHMgPSBtX3hzaGFwZS0+c2hhcGVCb3VuZGluZ0JveCgpOwor
CisgICAgaWYgKG1fbGluZVRvcCA8IHNoYXBlQm91bmRzLnkoKSkKICAgICAgICAgcmV0dXJuIExJ
TkVfQkVGT1JFX1NIQVBFOwotICAgIGlmIChtX2xpbmVUb3AgPCBtX3NoYXBlVG9wICsgbV9zaGFw
ZUhlaWdodCkKKworICAgIGlmIChtX2xpbmVUb3AgPCBzaGFwZUJvdW5kcy5tYXhZKCkpCiAgICAg
ICAgIHJldHVybiBMSU5FX0lOU0lERV9TSEFQRTsKKwogICAgIHJldHVybiBMSU5FX0FGVEVSX1NI
QVBFOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161764</attachid>
            <date>2012-08-31 13:50:43 -0700</date>
            <delta_ts>2012-08-31 13:50:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>tmp.patch</filename>
            <type>text/plain</type>
            <size>61212</size>
            <attacher name="Hans Muller">giles_joplin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggYjExM2IzZi4uZTM5YWJmMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTE4NjMsNiArMTg2MywxMCBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJh
Y2tpbmdTdG9yZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL1hTSW50ZXJ2YWwuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvWFNQb2x5Z29uLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1hTUmVjdGFuZ2xlLmNwcAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL1hTaGFwZS5jcHAKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvQ3VzdG9tRmlsdGVyQ29tcGlsZWRQcm9ncmFtLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dC5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRl
eCAwNGRjZDI1Li5hYTEwMmQ5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyMCBAQAorMjAxMi0w
OC0zMSAgSGFucyBNdWxsZXIgIDxobXVsbGVyQGFkb2JlLmNvbT4KKworICAgICAgICBbQ1NTIEV4
bHVzaW9uc10gYWRkIHN1cHBvcnQgZm9yIHRoZSBiYXNpYyBzaGFwZXMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NDkwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5pdGlhbCBjb21taXQgb2YgdGhlIENT
UyBFeGNsdXNpb25zIFNoYXBlcyBjbGFzc2VzLiBUaGV5J3JlIGJhc2VkIG9uIHRoZSAiQmFzaWMg
U2hhcGVzIiBzZWN0aW9uIG9mIHRoZQorICAgICAgICBDU1MgRXhjbHVzaW9ucyBzcGVjIC0gaHR0
cDovL2Rldi53My5vcmcvY3Nzd2cvY3NzMy1leGNsdXNpb25zLyNiYXNpYy1zaGFwZXMtZnJvbS1z
dmctc3ludGF4LgorCisgICAgICAgIFRoaXMgc2V0IG9mIGNsYXNzZXMgZW5hYmxlcyB0aGUgZXhj
bHVzaW9ucyBsYXlvdXQgY29kZSB0byBkZXRlcm1pbmUgaG93IHRvIGJyZWFrIHVwIGEgbGluZSBp
bnRvIHNlZ2VtZW50cworICAgICAgICB0aGF0IHdpbGwgZml0IHdpdGhpbiBvciBhcm91bmQgYSBz
aGFwZSwgZ2l2ZW4gdGhlIFkgY29vcmRpbmF0ZXMgb2YgdGhlIGxpbmUncyB0b3AgZWRnZSBhbmQg
Ym90dG9tIGVkZ2VzLgorICAgICAgICBUaGUgWFNoYXBlIGNsYXNzIHJlcHJlc2VudHMgQmFzaWNT
aGFwZXMgd2hvc2UgY29vcmRpbmF0ZXMgaGF2ZSBiZWVuIHJlc29sdmVkIHRvIGFjdHVhbCB2YWx1
ZXMuIEl0IHByb3ZpZGVzCisgICAgICAgIGEgcGFpciBvZiBtZXRob2RzLCBnZXRJbnNpZGVJbnRl
cnZhbHMoKSBhbmQgZ2V0T3V0c2lkZUludGVydmFscygpLCB0aGF0IHJldHVybiB0aGUgbGluZSBz
ZWdtZW50cycgc3RhcnQKKyAgICAgICAgYW5kIGVuZCBYIGNvb3JkaW5hdGVzLCBhbmQgYSBtZXRo
b2QgdGhhdCBjb21wdXRlcyB0aGUgc2hhcGUncyBib3VuZGluZyBib3guIFRoZSBsaW5lIHNlZ21l
bnRzJyBjb29yZGluYXRlcworICAgICAgICBhcmUgcmVwcmVzZW50ZWQgYnkgYSBWZWN0b3Igb2Yg
WFNJbnRlcnZhbHMuICBYU0ludGVydmFsIGlzIGp1c3QgYSBwYWlyIG9mIFggY29vcmRpbmF0ZXMu
CisKKyAgICAgICAgVGhlIG90aGVyIGNsYXNzZXMsIFhTUmVjdGFuZ2xlIGFuZCBYU1BvbHlnb24g
ZXQgYWwsIGFyZSBpbnRlcm5hbCB0byB0aGUgWFNoYXBlIGltcGxlbWVudGF0aW9uLgorCisgICAg
ICAgIFRoaXMgaXMgdGhlIGluaXRpYWwgdmVyc2lvbiBvZiB0aGUgWFNoYXBlcyBjb2RlIGFuZCBp
dCdzIG9ubHkgYmVpbmcgdXNlZCB0byB0aGUgbGltaXRlZCBleHRlbnQgV2ViS2l0CisgICAgICAg
IGN1cnJlbnRseSBzdXBwb3J0cyBzaGFwZS1pbnNpZGUgZXhjbHVzaW9ucy4gIEl0IHdpbGwgYmUg
ZXh0ZW5kZWQgdG8gc3VwcG9ydCBjb21wdXRpbmcgYSBtaW5pbWFsCisgICAgICAgIGxpbmUgc2Vn
bWVudCdzICJmaXJzdCBsYXlvdXQgbG9jYXRpb24iIGFuZCBvdGhlciBpbXByb3ZlbWVudHMsIGlu
IHRhbmRlbSB3aXRoIHRoZSBleGNsdXNpb25zIGxheW91dCBjb2RlLgorCisgICAgICAgIE5vIG5l
dyB0ZXN0cyBoYXZlIGJlZW4gYWRkZWQgc2luY2UgdGhpcyBjb2RlIGp1c3QgcmVwbGFjZXMgYSBw
cm92aXNpb25hbCBpbXBsZW1lbnRhdGlvbiBzdHViLgorCisgICAgICAgIE1vcmUgaW5mb3JtYXRp
b24gYWJvdXQgdGhlIGFsZ29yaXRobXMgdXNlZCBieSB0aGUgU2hhcGVzIG1vZHVsZSBjYW4gYmUg
Zm91bmQgaGVyZTogaHR0cDovL2hhbnNtdWxsZXItd2Via2l0LmJsb2dzcG90LmNvbS4KKworICAg
ICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06Cisg
ICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICog
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvai5vcmlnOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ouCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvWFNJbnRlcnZh
bC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnRl
cnZhbFgxQ29tcGFyYXRvcjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChXZWJDb3JlOjpYU0ludGVy
dmFsOjppbnRlcnNlY3QpOgorICAgICAgICAoV2ViQ29yZTo6c29ydFhTSW50ZXJ2YWxzKToKKyAg
ICAgICAgKFdlYkNvcmU6Om1lcmdlWFNJbnRlcnZhbHMpOgorICAgICAgICAoV2ViQ29yZTo6aW50
ZXJzZWN0WFNJbnRlcnZhbHMpOgorICAgICAgICAoV2ViQ29yZTo6c3VidHJhY3RYU0ludGVydmFs
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvWFNJbnRlcnZhbC5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoWFNJbnRlcnZhbCk6CisgICAgICAgIChXZWJDb3Jl
OjpYU0ludGVydmFsOjpYU0ludGVydmFsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Y
U1BvbHlnb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6TWF4RWRnZVlDb21wYXJhdG9yOjpvcGVyYXRvcigpKToKKyAgICAgICAgKE1heEVkZ2VZQ29t
cGFyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpNaW5FZGdlWUNvbXBhcmF0b3I6Om9wZXJhdG9y
KCkpOgorICAgICAgICAoTWluRWRnZVlDb21wYXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
dGVyc2VjdGlvblhDb21wYXJhdG9yOjpvcGVyYXRvcigpKToKKyAgICAgICAgKFdlYkNvcmU6OlhT
RWRnZVRyZWU6OlhTRWRnZVRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6WFNFZGdlVHJlZTo6aW5p
dEVkZ2VUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlhTRWRnZVRyZWU6OmZpbmRFZGdlc1RoYXRP
dmVybGFwWSk6CisgICAgICAgIChXZWJDb3JlOjpYU0VkZ2VUcmVlOjpmaW5kRWRnZXNUaGF0T3Zl
cmxhcEludGVydmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlhTUG9seWdvbjo6WFNQb2x5Z29uKToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVYSW50ZXJzZWN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlhTUG9seWdvbjo6cmlnaHRWZXJ0ZXhZKToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZElu
dGVydmFsWCk6CisgICAgICAgIChXZWJDb3JlOjpYU1BvbHlnb246OmNvbXB1dGVYSW50ZXJzZWN0
aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpYU1BvbHlnb246OmNvbXB1dGVFZGdlSW50ZXJzZWN0
aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpYU1BvbHlnb246OmdldE91dHNpZGVJbnRlcnZhbHMp
OgorICAgICAgICAoV2ViQ29yZTo6WFNQb2x5Z29uOjpnZXRJbnNpZGVJbnRlcnZhbHMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1hTUG9seWdvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoWFNQb2x5Z29uKToKKyAgICAgICAgKFdlYkNvcmU6OlhTUG9seWdv
bjo6Z2V0WEF0KToKKyAgICAgICAgKFdlYkNvcmU6OlhTUG9seWdvbjo6Z2V0WUF0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlhTUG9seWdvbjo6bnVtYmVyT2ZWZXJ0aWNlcyk6CisgICAgICAgIChXZWJD
b3JlOjpYU1BvbHlnb246OmZpbGxSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlhTUG9seWdvbjo6
c2hhcGVCb3VuZGluZ0JveCk6CisgICAgICAgIChYU0VkZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
WFNFZGdlOjpYU0VkZ2UpOgorICAgICAgICAoV2ViQ29yZTo6WFNFZGdlOjp4MSk6CisgICAgICAg
IChXZWJDb3JlOjpYU0VkZ2U6OnkxKToKKyAgICAgICAgKFdlYkNvcmU6OlhTRWRnZTo6eDIpOgor
ICAgICAgICAoV2ViQ29yZTo6WFNFZGdlOjp5Mik6CisgICAgICAgIChXZWJDb3JlOjpYU0VkZ2U6
Om1pblgpOgorICAgICAgICAoV2ViQ29yZTo6WFNFZGdlOjptaW5ZKToKKyAgICAgICAgKFdlYkNv
cmU6OlhTRWRnZTo6bWF4WCk6CisgICAgICAgIChXZWJDb3JlOjpYU0VkZ2U6Om1heFkpOgorICAg
ICAgICAoWFNFZGdlVHJlZSk6CisgICAgICAgIChYU0ludGVyc2VjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpYU0ludGVyc2VjdGlvbjo6WFNJbnRlcnNlY3Rpb24pOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL1hTUmVjdGFuZ2xlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OmVsbGlwc2VYSW50ZXJjZXB0KToKKyAgICAgICAgKFdlYkNvcmU6
OlhTUmVjdGFuZ2xlOjpnZXRPdXRzaWRlSW50ZXJ2YWxzKToKKyAgICAgICAgKFdlYkNvcmU6OlhT
UmVjdGFuZ2xlOjpnZXRJbnNpZGVJbnRlcnZhbHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL1hTUmVjdGFuZ2xlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChY
U1JlY3RhbmdsZSk6CisgICAgICAgIChXZWJDb3JlOjpYU1JlY3RhbmdsZTo6WFNSZWN0YW5nbGUp
OgorICAgICAgICAoV2ViQ29yZTo6WFNSZWN0YW5nbGU6OnNoYXBlQm91bmRpbmdCb3gpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1hTaGFwZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVYU1JlY3RhbmdsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpjcmVhdGVYU0NpcmNsZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVYU0VsbGlw
c2UpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlWFNQb2x5Z29uKToKKyAgICAgICAgKFdlYkNv
cmU6OlhTaGFwZTo6Y3JlYXRlWFNoYXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Y
U2hhcGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFhTaGFwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpYU2hhcGU6On5YU2hhcGUpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OmxheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvV3JhcFNo
YXBlSW5mby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXcmFwU2hhcGVJbmZvOjpjb21wdXRlU2hh
cGVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OldyYXBTaGFwZUluZm86OmNvbXB1dGVTZWdtZW50
c0ZvckxpbmUpOgorICAgICAgICAqIHJlbmRlcmluZy9XcmFwU2hhcGVJbmZvLmg6CisgICAgICAg
IChXZWJDb3JlOjpXcmFwU2hhcGVJbmZvOjpzaGFwZVRvcCk6CisgICAgICAgIChXcmFwU2hhcGVJ
bmZvKToKKyAgICAgICAgKFdlYkNvcmU6OldyYXBTaGFwZUluZm86OmxpbmVTdGF0ZSk6CisKIDIw
MTItMDgtMzEgIEFsb2sgUHJpeWFkYXJzaGkgIDxhbG9rcEBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgW2Nocm9taXVtXSBMYXlvdXQgdGVzdHMgc3ZnLWZpbHRlcnMuaHRtbCBhbmQgYWxwaGEuaHRt
bCBhcmUgY3Jhc2hpbmcgaW50ZXJtaXR0ZW50bHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
CmluZGV4IDgwYzYzNmYuLjY5MjYxNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpA
QCAtNDQ1OCw2ICs0NDU4LDE0IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2luZFJ1bGUuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvV09GRkZpbGVGb3JtYXQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9XT0ZGRmlsZUZvcm1hdC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9YU0ludGVydmFsLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvWFNJbnRlcnZhbC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9YU1Bv
bHlnb24uY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9YU1BvbHlnb24u
aCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvWFNSZWN0YW5nbGUuY3BwIFwK
KwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9YU1JlY3RhbmdsZS5oIFwKKwlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9YU2hhcGUuY3BwIFwKKwlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9YU2hhcGUuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL0Vycm9yc0d0ay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9FcnJvcnNH
dGsuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dhbWVwYWRzR3RrLmNwcCBcCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFy
Z2V0LnByaQppbmRleCBmNzM1OWFmLi4yY2RlZWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTk5NCw2ICs5
OTQsMTAgQEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9U
cmFuc2Zvcm1TdGF0ZS5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJh
bnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvV2lk
dGhJdGVyYXRvci5jcHAgXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1hTSW50ZXJ2YWwuY3BwIFwK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9YU1BvbHlnb24uY3BwIFwKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9YU1JlY3RhbmdsZS5jcHAgXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1hTaGFwZS5jcHAg
XAogICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAgXAogICAgIHBs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuY3BwIFwKICAgICBwbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwIFwKQEAgLTIxNDEsNiAr
MjE0NSwxMCBAQCBIRUFERVJTICs9IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1z
L1RyYW5zZm9ybVN0YXRlLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJh
bnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1dpZHRo
SXRlcmF0b3IuaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvWFNJbnRlcnZhbC5oIFwKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9YU1BvbHlnb24uaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvWFNS
ZWN0YW5nbGUuaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvWFNoYXBlLmggXAogICAgIHBsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuaCBcCiAgICAgcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmggXAogICAgIHBsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMDMy
ZmRiYS4uNTdhNmEyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNDE4LDYgKzQxOCwxNCBAQAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtT3BlcmF0aW9u
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3Jt
T3BlcmF0aW9ucy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1z
L1RyYW5zZm9ybWF0aW9uTWF0cml4LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L1hTSW50ZXJ2YWwuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9YU0ludGVy
dmFsLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL1hTUG9seWdvbi5jcHAnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL1hTUG9seWdvbi5oJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9YU1JlY3RhbmdsZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL1hTUmVjdGFuZ2xlLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL1hTaGFwZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL1hTaGFwZS5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBlci5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJDb21wYXJhdG9yLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQkRhdGFiYXNlLmNwcCcsCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IGYwNDk0MGIuLjM0MDUzNDYg
MTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC0z
NDEzMyw2ICszNDEzMywzOCBAQAogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBo
aWNzXFdpZHRoSXRlcmF0b3IuaCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXFhTSW50ZXJ2YWwuY3BwIgorCQkJ
CQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZv
cm1cZ3JhcGhpY3NcWFNJbnRlcnZhbC5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxl
CisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcWFNQb2x5Z29uLmNwcCIK
KwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBs
YXRmb3JtXGdyYXBoaWNzXFhTUG9seWdvbi5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxG
aWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcWFNSZWN0YW5nbGUu
Y3BwIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccGxhdGZvcm1cZ3JhcGhpY3NcWFNSZWN0YW5nbGUuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4K
KwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXFhTaGFw
ZS5jcHAiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxwbGF0Zm9ybVxncmFwaGljc1xYU2hhcGUuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KIAkJ
CQk8RmlsdGVyCiAJCQkJCU5hbWU9ImNmIgogCQkJCQk+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggOGE0MjQzZi4uMjRlZWUwMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMTgzMSw2ICsxODMxLDE0IEBACiAJCTZFNEU5MUFEMTBGN0ZCMzEwMEEyNzc5QyAvKiBD
YW52YXNDb250ZXh0QXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNkU0RTkxQTgxMEY3RkIzMTAwQTI3NzlDIC8qIENhbnZhc0NvbnRleHRB
dHRyaWJ1dGVzLmggKi87IH07CiAJCTZFNEU5MUFFMTBGN0ZCMzEwMEEyNzc5QyAvKiBXZWJHTENv
bnRleHRBdHRyaWJ1dGVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDZFNEU5MUE5MTBGN0ZCMzEwMEEyNzc5QyAvKiBXZWJHTENvbnRleHRBdHRyaWJ1
dGVzLmNwcCAqLzsgfTsKIAkJNkU0RTkxQUYxMEY3RkIzMTAwQTI3NzlDIC8qIFdlYkdMQ29udGV4
dEF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDZFNEU5MUFBMTBGN0ZCMzEwMEEyNzc5QyAvKiBXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmgg
Ki87IH07CisJCTZFNjM3NDUyMTVGMTI4MDIwMEIzRkRBMyAvKiBYU2hhcGUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU2Mzc0NEExNUYxMjgwMjAw
QjNGREEzIC8qIFhTaGFwZS5jcHAgKi87IH07CisJCTZFNjM3NDUzMTVGMTI4MDIwMEIzRkRBMyAv
KiBYU2hhcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDZFNjM3NDRCMTVGMTI4MDIwMEIzRkRBMyAvKiBYU2hhcGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk2RTYzNzQ1NDE1RjEyODAyMDBCM0ZEQTMg
LyogWFNJbnRlcnZhbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2RTYzNzQ0QzE1RjEyODAyMDBCM0ZEQTMgLyogWFNJbnRlcnZhbC5jcHAgKi87IH07
CisJCTZFNjM3NDU1MTVGMTI4MDIwMEIzRkRBMyAvKiBYU0ludGVydmFsLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTYzNzQ0RDE1RjEyODAyMDBCM0ZE
QTMgLyogWFNJbnRlcnZhbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTZFNjM3NDU2MTVGMTI4MDIwMEIzRkRBMyAvKiBYU1BvbHlnb24uY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU2Mzc0NEUxNUYx
MjgwMjAwQjNGREEzIC8qIFhTUG9seWdvbi5jcHAgKi87IH07CisJCTZFNjM3NDU3MTVGMTI4MDIw
MEIzRkRBMyAvKiBYU1BvbHlnb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDZFNjM3NDRGMTVGMTI4MDIwMEIzRkRBMyAvKiBYU1BvbHlnb24uaCAqLzsg
fTsKKwkJNkU2Mzc0NTgxNUYxMjgwMjAwQjNGREEzIC8qIFhTUmVjdGFuZ2xlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFNjM3NDUwMTVGMTI4MDIw
MEIzRkRBMyAvKiBYU1JlY3RhbmdsZS5jcHAgKi87IH07CisJCTZFNjM3NDU5MTVGMTI4MDIwMEIz
RkRBMyAvKiBYU1JlY3RhbmdsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNkU2Mzc0NTExNUYxMjgwMjAwQjNGREEzIC8qIFhTUmVjdGFuZ2xlLmggKi87
IH07CiAJCTZFNjdEMkE2MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU2N0QyQTQx
MjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5jcHAgKi87IH07CiAJCTZFNjdE
MkE3MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFNjdEMkE1MTI4MEU4QTQwMDg3NThG
NyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuaCAqLzsgfTsKIAkJNkU2N0QyQTkxMjgwRThCRDAwODc1
OEY3IC8qIEV4dGVuc2lvbnMzRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNkU2N0QyQTgxMjgwRThCRDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRC5oICov
OyB9OwpAQCAtOTAwOCw2ICs5MDE2LDE0IEBACiAJCTZFNEU5MUE5MTBGN0ZCMzEwMEEyNzc5QyAv
KiBXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMuY3BwOyBwYXRoID0gY2FudmFzL1dlYkdM
Q29udGV4dEF0dHJpYnV0ZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RTRF
OTFBQTEwRjdGQjMxMDBBMjc3OUMgLyogV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmg7IHBhdGgg
PSBjYW52YXMvV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk2RTRFOTFBQjEwRjdGQjMxMDBBMjc3OUMgLyogV2ViR0xDb250ZXh0QXR0cmlidXRl
cy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gV2ViR0xDb250ZXh0QXR0cmlidXRlcy5pZGw7
IHBhdGggPSBjYW52YXMvV2ViR0xDb250ZXh0QXR0cmlidXRlcy5pZGw7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTZFNjM3NDRBMTVGMTI4MDIwMEIzRkRBMyAvKiBYU2hhcGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gWFNoYXBlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkU2Mzc0NEIxNUYxMjgwMjAwQjNGREEzIC8qIFhTaGFwZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYU2hhcGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNkU2Mzc0NEMxNUYxMjgwMjAwQjNGREEzIC8qIFhTSW50ZXJ2YWwu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gWFNJbnRlcnZhbC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZFNjM3NDREMTVGMTI4MDIwMEIzRkRBMyAv
KiBYU0ludGVydmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFhTSW50ZXJ2
YWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkU2Mzc0NEUxNUYxMjgwMjAwQjNG
REEzIC8qIFhTUG9seWdvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBYU1BvbHlnb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RTYzNzQ0RjE1
RjEyODAyMDBCM0ZEQTMgLyogWFNQb2x5Z29uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFhTUG9seWdvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RTYzNzQ1
MDE1RjEyODAyMDBCM0ZEQTMgLyogWFNSZWN0YW5nbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gWFNSZWN0YW5nbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk2RTYzNzQ1MTE1RjEyODAyMDBCM0ZEQTMgLyogWFNSZWN0YW5nbGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWFNSZWN0YW5nbGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNkU2N0QyQTQxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9w
ZW5HTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeHRlbnNpb25z
M0RPcGVuR0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RTY3RDJBNTEyODBF
OEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEV4dGVuc2lvbnMzRE9wZW5HTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk2RTY3RDJBODEyODBFOEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9uczNELmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4dGVuc2lvbnMzRC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTk5NDMsNiArMTk5NTksMTQgQEAKIAkJCQk1MDFCQUFBODEzOTUw
RTJDMDBGN0FDRUIgLyogV2luZFJ1bGUuaCAqLywKIAkJCQkzNzk5MTk5NDEyMDBEREY0MDBFQTA0
MUMgLyogV09GRkZpbGVGb3JtYXQuY3BwICovLAogCQkJCTM3OTkxOTk1MTIwMERERjQwMEVBMDQx
QyAvKiBXT0ZGRmlsZUZvcm1hdC5oICovLAorCQkJCTZFNjM3NDRBMTVGMTI4MDIwMEIzRkRBMyAv
KiBYU2hhcGUuY3BwICovLAorCQkJCTZFNjM3NDRCMTVGMTI4MDIwMEIzRkRBMyAvKiBYU2hhcGUu
aCAqLywKKwkJCQk2RTYzNzQ0QzE1RjEyODAyMDBCM0ZEQTMgLyogWFNJbnRlcnZhbC5jcHAgKi8s
CisJCQkJNkU2Mzc0NEQxNUYxMjgwMjAwQjNGREEzIC8qIFhTSW50ZXJ2YWwuaCAqLywKKwkJCQk2
RTYzNzQ0RTE1RjEyODAyMDBCM0ZEQTMgLyogWFNQb2x5Z29uLmNwcCAqLywKKwkJCQk2RTYzNzQ0
RjE1RjEyODAyMDBCM0ZEQTMgLyogWFNQb2x5Z29uLmggKi8sCisJCQkJNkU2Mzc0NTAxNUYxMjgw
MjAwQjNGREEzIC8qIFhTUmVjdGFuZ2xlLmNwcCAqLywKKwkJCQk2RTYzNzQ1MTE1RjEyODAyMDBC
M0ZEQTMgLyogWFNSZWN0YW5nbGUuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gZ3JhcGhpY3M7CiAJ
CQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMjIyMTIsNiArMjIyMzYsOCBAQAogCQkJaXNh
ID0gUEJYSGVhZGVyc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3
OwogCQkJZmlsZXMgPSAoCisJCQkJNkU2Mzc0NTMxNUYxMjgwMjAwQjNGREEzIC8qIFhTaGFwZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNkU2Mzc0NTUxNUYxMjgwMjAwQjNGREEzIC8qIFhTSW50ZXJ2
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QkM2OURCMTUwNUYwNzYwMDFCNzRBQyAvKiBBYnN0
cmFjdERhdGFiYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MUUxQjFEMTBGRjU5ODY5MDA1NzZC
M0IgLyogQWJzdHJhY3RXb3JrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTI5QTgxMjJFMEZCQjlD
MUQwMDUxMDI5MyAvKiBBY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsLmggaW4gSGVhZGVycyAqLywK
QEAgLTI1NDk3LDYgKzI1NTIzLDggQEAKIAkJCQlGQkQ2QUY4ODE1RUYyNUM5MDA4QjcxMTAgLyog
Q1NTQmFzaWNTaGFwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUZCRDZBRjhBMTVFRjI1REYwMDhC
NzExMCAvKiBCYXNpY1NoYXBlRnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlGQkQ2QUY4
QzE1RUYyNjA0MDA4QjcxMTAgLyogQmFzaWNTaGFwZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTZF
NjM3NDU3MTVGMTI4MDIwMEIzRkRBMyAvKiBYU1BvbHlnb24uaCBpbiBIZWFkZXJzICovLAorCQkJ
CTZFNjM3NDU5MTVGMTI4MDIwMEIzRkRBMyAvKiBYU1JlY3RhbmdsZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07
CkBAIC0yODU4Nyw2ICsyODYxNSwxMCBAQAogCQkJCUZCRDZBRjhEMTVFRjI2MEEwMDhCNzExMCAv
KiBCYXNpY1NoYXBlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0RkIzOTBBRDE1RUY2MUYzMDA3
QUQ1MUYgLyogR2VuZXJhdGVkSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzc3QTNBOTAx
NUVGQ0U5QjAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
NkU2Mzc0NTIxNUYxMjgwMjAwQjNGREEzIC8qIFhTaGFwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQk2RTYzNzQ1NDE1RjEyODAyMDBCM0ZEQTMgLyogWFNJbnRlcnZhbC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk2RTYzNzQ1NjE1RjEyODAyMDBCM0ZEQTMgLyogWFNQb2x5Z29uLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTZFNjM3NDU4MTVGMTI4MDIwMEIzRkRBMyAvKiBYU1JlY3RhbmdsZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1hTSW50ZXJ2YWwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvWFNJ
bnRlcnZhbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg1NDA0Nwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1hTSW50
ZXJ2YWwuY3BwCkBAIC0wLDAgKzEsMTY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFk
b2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAg
ICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlhTSW50ZXJ2YWwuaCIKKworI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IEludGVydmFsWDFDb21wYXJhdG9yIHsKKyAg
ICBib29sIG9wZXJhdG9yKCkgKGNvbnN0IFhTSW50ZXJ2YWwmIGkxLCBjb25zdCBYU0ludGVydmFs
JiBpMikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpMS54MSA8IGkyLngxOworICAgIH0K
K307CisKK2Jvb2wgWFNJbnRlcnZhbDo6aW50ZXJzZWN0KGNvbnN0IFhTSW50ZXJ2YWwmIGksIFhT
SW50ZXJ2YWwmIHJ2KSBjb25zdAoreworICAgIGlmICh4MiA8IGkueDEgfHwgeDEgPiBpLngyKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcnYueDEgPSBzdGQ6Om1heCh4MSwgaS54MSk7Cisg
ICAgcnYueDIgPSBzdGQ6Om1pbih4MiwgaS54Mik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgc29ydFhTSW50ZXJ2YWxzKFZlY3RvcjxYU0ludGVydmFsPiYgdikKK3sKKyAgICBzdGQ6OnNv
cnQodi5iZWdpbigpLCB2LmVuZCgpLCBJbnRlcnZhbFgxQ29tcGFyYXRvcigpKTsKK30KKwordm9p
ZCBtZXJnZVhTSW50ZXJ2YWxzKGNvbnN0IFZlY3RvcjxYU0ludGVydmFsPiYgdjEsIGNvbnN0IFZl
Y3RvcjxYU0ludGVydmFsPiYgdjIsIFZlY3RvcjxYU0ludGVydmFsPiYgcnYpCit7CisgICAgaWYg
KCF2MS5zaXplKCkpCisgICAgICAgIHJ2LmFwcGVuZFJhbmdlKHYyLmJlZ2luKCksIHYyLmVuZCgp
KTsKKyAgICBlbHNlIGlmICghdjIuc2l6ZSgpKQorICAgICAgICBydi5hcHBlbmRSYW5nZSh2MS5i
ZWdpbigpLCB2MS5lbmQoKSk7CisgICAgZWxzZSB7CisgICAgICAgIFZlY3RvcjxYU0ludGVydmFs
PiB2KHYxLnNpemUoKSArIHYyLnNpemUoKSk7CisgICAgICAgIFhTSW50ZXJ2YWwqIGludGVydmFs
ID0gMDsKKworICAgICAgICBzdGQ6Om1lcmdlKHYxLmJlZ2luKCksIHYxLmVuZCgpLCB2Mi5iZWdp
bigpLCB2Mi5lbmQoKSwgdi5iZWdpbigpLCBJbnRlcnZhbFgxQ29tcGFyYXRvcigpKTsKKworICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHYuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAg
IGlmICghaW50ZXJ2YWwpCisgICAgICAgICAgICAgICAgaW50ZXJ2YWwgPSAmdltpXTsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKHZbaV0ueDEgPj0gaW50ZXJ2YWwtPngxICYmIHZbaV0ueDEgPD0gaW50
ZXJ2YWwtPngyKSAvLyBGSVhNRTogMXN0IDw9IHRlc3Qgbm90IG5lZWRlZD8KKyAgICAgICAgICAg
ICAgICBpbnRlcnZhbC0+eDIgPSBzdGQ6Om1heChpbnRlcnZhbC0+eDIsIHZbaV0ueDIpOworICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcnYuYXBwZW5kKCppbnRlcnZhbCk7Cisg
ICAgICAgICAgICAgICAgaW50ZXJ2YWwgPSAmdltpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIGlmIChpbnRlcnZhbCkKKyAgICAgICAgICAgIHJ2LmFwcGVuZCgqaW50ZXJ2
YWwpOworICAgIH0KK30KKwordm9pZCBpbnRlcnNlY3RYU0ludGVydmFscyhjb25zdCBWZWN0b3I8
WFNJbnRlcnZhbD4mIHYxLCBjb25zdCBWZWN0b3I8WFNJbnRlcnZhbD4mIHYyLCBWZWN0b3I8WFNJ
bnRlcnZhbD4mIHJ2KQoreworICAgIHNpemVfdCB2MVNpemUgPSB2MS5zaXplKCk7CisgICAgc2l6
ZV90IHYyU2l6ZSA9IHYyLnNpemUoKTsKKworICAgIGlmICghdjFTaXplIHx8ICF2MlNpemUpCisg
ICAgICAgIHJldHVybjsKKworICAgIFhTSW50ZXJ2YWwgaW50ZXJ2YWw7CisgICAgYm9vbCBvdmVy
bGFwID0gZmFsc2U7CisgICAgc2l6ZV90IGkxID0gMDsKKyAgICBzaXplX3QgaTIgPSAwOworCisg
ICAgd2hpbGUgKGkxIDwgdjFTaXplICYmIGkyIDwgdjJTaXplKSB7CisgICAgICAgIFhTSW50ZXJ2
YWwgdjEyOworICAgICAgICBpZiAodjFbaTFdLmludGVyc2VjdCh2MltpMl0sIHYxMikpIHsKKyAg
ICAgICAgICAgIGlmICghb3ZlcmxhcCB8fCAhdjEyLmludGVyc2VjdChpbnRlcnZhbCwgaW50ZXJ2
YWwpKSB7CisgICAgICAgICAgICAgICAgaWYgKG92ZXJsYXApCisgICAgICAgICAgICAgICAgICAg
IHJ2LmFwcGVuZChpbnRlcnZhbCk7CisgICAgICAgICAgICAgICAgaW50ZXJ2YWwgPSB2MTI7Cisg
ICAgICAgICAgICAgICAgb3ZlcmxhcCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAodjFbaTFdLngyIDwgdjJbaTJdLngyKQorICAgICAgICAgICAgICAgIGkxKys7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaTIrKzsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGlmIChvdmVybGFwKQorICAgICAgICAgICAgICAgIHJ2LmFwcGVuZChpbnRlcnZh
bCk7CisgICAgICAgICAgICBvdmVybGFwID0gZmFsc2U7CisgICAgICAgICAgICBpZiAodjFbaTFd
LngxIDwgdjJbaTJdLngxKQorICAgICAgICAgICAgICAgIGkxKys7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgaTIrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChvdmVy
bGFwKQorICAgICAgICBydi5hcHBlbmQoaW50ZXJ2YWwpOworfQorCit2b2lkIHN1YnRyYWN0WFNJ
bnRlcnZhbHMoY29uc3QgVmVjdG9yPFhTSW50ZXJ2YWw+JiB2MSwgY29uc3QgVmVjdG9yPFhTSW50
ZXJ2YWw+JiB2MiwgVmVjdG9yPFhTSW50ZXJ2YWw+JiBydikKK3sKKyAgICBzaXplX3QgdjFTaXpl
ID0gdjEuc2l6ZSgpOworICAgIHNpemVfdCB2MlNpemUgPSB2Mi5zaXplKCk7CisKKyAgICBpZiAo
IXYxU2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCF2MlNpemUpCisgICAgICAgIHJ2
LmFwcGVuZFJhbmdlKHYxLmJlZ2luKCksIHYxLmVuZCgpKTsKKyAgICBlbHNlIHsKKyAgICAgICAg
c2l6ZV90IGkxID0gMCwgaTIgPSAwOworICAgICAgICBydi5hcHBlbmRSYW5nZSh2MS5iZWdpbigp
LCB2MS5lbmQoKSk7CisKKyAgICAgICAgd2hpbGUgKGkxIDwgcnYuc2l6ZSgpICYmIGkyIDwgdjJT
aXplKSB7CisgICAgICAgICAgICBYU0ludGVydmFsJiBpbnRlcnZhbDEgPSBydltpMV07CisgICAg
ICAgICAgICBjb25zdCBYU0ludGVydmFsJiBpbnRlcnZhbDIgPSB2MltpMl07CisKKyAgICAgICAg
ICAgIGlmIChpbnRlcnZhbDIueDEgPD0gaW50ZXJ2YWwxLngxICYmIGludGVydmFsMi54MiA+PSBp
bnRlcnZhbDEueDIpCisgICAgICAgICAgICAgICAgcnYucmVtb3ZlKGkxKTsKKyAgICAgICAgICAg
IGVsc2UgaWYgKGludGVydmFsMi54MiA8IGludGVydmFsMS54MSkKKyAgICAgICAgICAgICAgICBp
MiArPSAxOworICAgICAgICAgICAgZWxzZSBpZiAoaW50ZXJ2YWwyLngxID4gaW50ZXJ2YWwxLngy
KQorICAgICAgICAgICAgICAgIGkxICs9IDE7CisgICAgICAgICAgICBlbHNlIGlmIChpbnRlcnZh
bDIueDEgPiBpbnRlcnZhbDEueDEgJiYgaW50ZXJ2YWwyLngyIDwgaW50ZXJ2YWwxLngyKSB7Cisg
ICAgICAgICAgICAgICAgcnYuaW5zZXJ0KGkxLCBYU0ludGVydmFsKGludGVydmFsMS54MSwgaW50
ZXJ2YWwyLngxKSk7CisgICAgICAgICAgICAgICAgaW50ZXJ2YWwxLngxID0gaW50ZXJ2YWwyLngy
OworICAgICAgICAgICAgICAgIGkyICs9IDE7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGludGVy
dmFsMi54MSA8PSBpbnRlcnZhbDEueDEpIHsKKyAgICAgICAgICAgICAgICBpbnRlcnZhbDEueDEg
PSBpbnRlcnZhbDIueDI7CisgICAgICAgICAgICAgICAgaTIgKz0gMTsKKyAgICAgICAgICAgIH0g
ZWxzZSAgeyAvLyAoaW50ZXJ2YWwyLngyID49IGludGVydmFsMS54MikKKyAgICAgICAgICAgICAg
ICBpbnRlcnZhbDEueDIgPSBpbnRlcnZhbDIueDE7CisgICAgICAgICAgICAgICAgaTEgKz0gMTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvWFNJbnRl
cnZhbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvWFNJbnRlcnZhbC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNjE3ZGQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9YU0ludGVydmFsLmgKQEAgLTAs
MCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29y
cG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMKKyAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQor
ICogQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgWFNJbnRlcnZhbF9oCisjZGVmaW5lIFhTSW50ZXJ2
YWxfaAorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3N0cnVjdCBYU0ludGVydmFsIHsKK3B1YmxpYzoKKyAgICBmbG9hdCB4MTsKKyAgICBmbG9hdCB4
MjsKKworICAgIFhTSW50ZXJ2YWwoZmxvYXQgeDEgPSAwLCBmbG9hdCB4MiA9IDApIAorICAgICAg
ICA6IHgxKHgxKQorICAgICAgICAsIHgyKHgyKSAKKyAgICB7IAorICAgIH0KKworICAgIGJvb2wg
aW50ZXJzZWN0KGNvbnN0IFhTSW50ZXJ2YWwmLCBYU0ludGVydmFsJikgY29uc3Q7Cit9OworCit2
b2lkIHNvcnRYU0ludGVydmFscyhWZWN0b3I8WFNJbnRlcnZhbD4mKTsKK3ZvaWQgbWVyZ2VYU0lu
dGVydmFscyhjb25zdCBWZWN0b3I8WFNJbnRlcnZhbD4mLCBjb25zdCBWZWN0b3I8WFNJbnRlcnZh
bD4mLCBWZWN0b3I8WFNJbnRlcnZhbD4mKTsKK3ZvaWQgaW50ZXJzZWN0WFNJbnRlcnZhbHMoY29u
c3QgVmVjdG9yPFhTSW50ZXJ2YWw+JiwgY29uc3QgVmVjdG9yPFhTSW50ZXJ2YWw+JiwgVmVjdG9y
PFhTSW50ZXJ2YWw+Jik7Cit2b2lkIHN1YnRyYWN0WFNJbnRlcnZhbHMoY29uc3QgVmVjdG9yPFhT
SW50ZXJ2YWw+JiwgY29uc3QgVmVjdG9yPFhTSW50ZXJ2YWw+JiwgVmVjdG9yPFhTSW50ZXJ2YWw+
Jik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFhTSW50ZXJ2YWxfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvWFNQb2x5Z29uLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1hTUG9seWdvbi5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVlNGQ5NgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1hTUG9seWdvbi5jcHAKQEAgLTAsMCAr
MSwzNjIgQEAKKyAvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jw
b3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisg
KiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlhTUG9seWdv
bi5oIgorCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitzdHJ1Y3QgTWF4RWRnZVlDb21wYXJhdG9yIHsKKyAgICBib29sIG9wZXJhdG9yKCkgKGNv
bnN0IFhTRWRnZSogZTEsIGNvbnN0IFhTRWRnZSogZTIpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gZTEtPm1heFkoKSA8IGUyLT5tYXhZKCk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRv
cigpIChjb25zdCBYU0VkZ2UqIGUsIGZsb2F0IHkpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gZS0+bWF4WSgpIDwgeTsKKyAgICB9Cit9OworCitzdHJ1Y3QgTWluRWRnZVlDb21wYXJhdG9y
IHsgIAorICAgIGJvb2wgb3BlcmF0b3IoKSAoY29uc3QgWFNFZGdlKiBlMSwgY29uc3QgWFNFZGdl
KiBlMikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBlMS0+bWluWSgpIDwgZTItPm1pblko
KTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yKCkgKGNvbnN0IFhTRWRnZSogZSwgZmxvYXQg
eSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBlLT5taW5ZKCkgPCB5OworICAgIH0KK307
CisKK3N0cnVjdCBJbnRlcnNlY3Rpb25YQ29tcGFyYXRvciB7CisgICAgYm9vbCBvcGVyYXRvcigp
IChjb25zdCBYU0ludGVyc2VjdGlvbiYgaTEsIGNvbnN0IFhTSW50ZXJzZWN0aW9uJiBpMikgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiAoaTEueCA9PSBpMi54KSA/IGkxLnR5cGUgPCBpMi50
eXBlIDogaTEueCA8IGkyLng7CisgICAgfQorfTsKKworWFNFZGdlVHJlZTo6WFNFZGdlVHJlZShj
b25zdCBWZWN0b3I8WFNFZGdlKj4mIHNvcnRlZEVkZ2VzKQorICAgIDogY2VudGVyKDApCit7Cisg
ICAgaWYgKHNvcnRlZEVkZ2VzLnNpemUoKSA+IDApCisgICAgICAgIGluaXRFZGdlVHJlZSh0aGlz
LCBzb3J0ZWRFZGdlcyk7Cit9CisKK3ZvaWQgWFNFZGdlVHJlZTo6aW5pdEVkZ2VUcmVlKFhTRWRn
ZVRyZWUqIG5vZGUsIGNvbnN0IFZlY3RvcjxYU0VkZ2UqPiYgZWRnZXMpCit7CisgICAgc2l6ZV90
IGVkZ2VzU2l6ZSA9IGVkZ2VzLnNpemUoKTsKKyAgICBzaXplX3QgY2VudGVySW5kZXggPSBlZGdl
c1NpemUgLyAyOworICAgIG5vZGUtPmNlbnRlciA9IChlZGdlc1tjZW50ZXJJbmRleF0tPm1pblko
KSArIGVkZ2VzW2NlbnRlckluZGV4XS0+bWF4WSgpKSAvIDI7CisKKyAgICBWZWN0b3I8WFNFZGdl
Kj4gYWJvdmVDZW50ZXJFZGdlczsKKyAgICBWZWN0b3I8WFNFZGdlKj4gYmVsb3dDZW50ZXJFZGdl
czsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZWRnZXNTaXplOyBpKyspIHsKKyAgICAg
ICAgWFNFZGdlKiBlZGdlID0gZWRnZXNbaV07CisgICAgICAgIGlmIChlZGdlLT5tYXhZKCkgPCBu
b2RlLT5jZW50ZXIpCisgICAgICAgICAgICBhYm92ZUNlbnRlckVkZ2VzLmFwcGVuZChlZGdlKTsK
KyAgICAgICAgZWxzZSBpZiAoZWRnZS0+bWluWSgpID4gbm9kZS0+Y2VudGVyKQorICAgICAgICAg
ICAgYmVsb3dDZW50ZXJFZGdlcy5hcHBlbmQoZWRnZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIG5vZGUtPm92ZXJsYXBDZW50ZXIuYXBwZW5kKGVkZ2UpOworICAgIH0KKworICAgIC8vIEZJ
WE1FOiBjcmVhdGUgdHdvIHNvcnRlZCBjb3BpZXMgb2Ygb3ZlcmxhcENlbnRlcjogb3ZlcmxhcENl
bnRlck1pblksIG92ZXJsYXBDZW50ZXJNYXhZLCB1c2UgdGhlbSBpbiBmaW5kLi4uCisgICAgCisg
ICAgaWYgKGFib3ZlQ2VudGVyRWRnZXMuc2l6ZSgpID4gMCkKKyAgICAgICAgbm9kZS0+YWJvdmVD
ZW50ZXIgPSBhZG9wdFB0cihuZXcgWFNFZGdlVHJlZShhYm92ZUNlbnRlckVkZ2VzKSk7CisgICAg
aWYgKGJlbG93Q2VudGVyRWRnZXMuc2l6ZSgpID4gMCkKKyAgICAgICAgbm9kZS0+YmVsb3dDZW50
ZXIgPSBhZG9wdFB0cihuZXcgWFNFZGdlVHJlZShiZWxvd0NlbnRlckVkZ2VzKSk7Cit9CisKK3Zv
aWQgWFNFZGdlVHJlZTo6ZmluZEVkZ2VzVGhhdE92ZXJsYXBZKGZsb2F0IHksIFZlY3RvcjxYU0Vk
Z2UqPiYgcnYpIGNvbnN0Cit7CisgICAgaWYgKHkgPCBjZW50ZXIpIHsKKyAgICAgICAgaWYgKGFi
b3ZlQ2VudGVyKQorICAgICAgICAgICAgYWJvdmVDZW50ZXItPmZpbmRFZGdlc1RoYXRPdmVybGFw
WSh5LCBydik7CisgICAgfSBlbHNlIGlmICh5ID4gY2VudGVyKSB7CisgICAgICAgIGlmIChiZWxv
d0NlbnRlcikKKyAgICAgICAgICAgIGJlbG93Q2VudGVyLT5maW5kRWRnZXNUaGF0T3ZlcmxhcFko
eSwgcnYpOworICAgIH0KKworICAgIHNpemVfdCBvdmVybGFwRWRnZXNTaXplID0gb3ZlcmxhcENl
bnRlci5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvdmVybGFwRWRnZXNTaXpl
OyBpKyspIHsKKyAgICAgICAgWFNFZGdlKiBlZGdlID0gb3ZlcmxhcENlbnRlcltpXTsKKyAgICAg
ICAgaWYgKHkgPj0gZWRnZS0+bWluWSgpICYmIHkgPD0gZWRnZS0+bWF4WSgpKQorICAgICAgICAg
ICAgcnYuYXBwZW5kKGVkZ2UpOworICAgIH0KK30KKwordm9pZCBYU0VkZ2VUcmVlOjpmaW5kRWRn
ZXNUaGF0T3ZlcmxhcEludGVydmFsKGZsb2F0IHlNaW4sIGZsb2F0IHlNYXgsIFZlY3RvcjxYU0Vk
Z2UqPiYgcnYpIGNvbnN0Cit7CisgICAgaWYgKCh5TWluIDwgY2VudGVyKSAmJiBhYm92ZUNlbnRl
cikKKyAgICAgICAgYWJvdmVDZW50ZXItPmZpbmRFZGdlc1RoYXRPdmVybGFwSW50ZXJ2YWwoeU1p
biwgeU1heCwgcnYpOworCisgICAgaWYgKCh5TWF4ID4gY2VudGVyKSAmJiBiZWxvd0NlbnRlcikK
KyAgICAgICAgYmVsb3dDZW50ZXItPmZpbmRFZGdlc1RoYXRPdmVybGFwSW50ZXJ2YWwoeU1pbiwg
eU1heCwgcnYpOworCisgICAgc2l6ZV90IG92ZXJsYXBFZGdlc1NpemUgPSBvdmVybGFwQ2VudGVy
LnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG92ZXJsYXBFZGdlc1NpemU7IGkr
KykgeworICAgICAgICBYU0VkZ2UqIGVkZ2UgPSBvdmVybGFwQ2VudGVyW2ldOworICAgICAgICBp
ZiAoeU1heCA+IGVkZ2UtPm1pblkoKSAmJiB5TWluIDwgZWRnZS0+bWF4WSgpKQorICAgICAgICAg
ICAgcnYuYXBwZW5kKGVkZ2UpOworICAgIH0KK30KKworWFNQb2x5Z29uOjpYU1BvbHlnb24oUGFz
c093blB0cjxWZWN0b3I8ZmxvYXQ+ID4gY29vcmRpbmF0ZXMsIFdpbmRSdWxlIGZpbGxSdWxlKQor
ICAgIDogWFNoYXBlKCkKKyAgICAsIG1fY29vcmRpbmF0ZXMoY29vcmRpbmF0ZXMpCisgICAgLCBt
X2ZpbGxSdWxlKGZpbGxSdWxlKSAKK3sKKyAgICAvLyBGSVhNRTogc3BlY2lhbCBjYXNlcyBmb3Ig
KGxlbmd0aCA9PSkgMCwgMSwgMiAgcG9pbnRzCisgICAgLy8gRklYTUU6IGFzc3VtaW5nIG9wZW4g
cG9seWdvbnMgZm9yIG5vdworCisgICAgc2l6ZV90IG5WZXJ0aWNlcyA9IG51bWJlck9mVmVydGlj
ZXMoKTsKKyAgICBtX2VkZ2VzLnJlc2l6ZShuVmVydGljZXMpOworICAgIFZlY3RvcjxYU0VkZ2Uq
PiBzb3J0ZWRFZGdlc01pblkoblZlcnRpY2VzKTsKKworICAgIGZsb2F0IG1pblggPSBnZXRYQXQo
MCk7CisgICAgZmxvYXQgbWluWSA9IGdldFlBdCgwKTsKKyAgICBmbG9hdCBtYXhYID0gbWluWDsK
KyAgICBmbG9hdCBtYXhZID0gbWluWTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgblZl
cnRpY2VzOyBpKyspIHsKKyAgICAgICAgZmxvYXQgeCA9IGdldFhBdChpKTsKKyAgICAgICAgZmxv
YXQgeSA9IGdldFlBdChpKTsKKworICAgICAgICBtaW5YID0gc3RkOjptaW4oeCwgbWluWCk7Cisg
ICAgICAgIG1heFggPSBzdGQ6Om1heCh4LCBtYXhYKTsKKyAgICAgICAgbWluWSA9IHN0ZDo6bWlu
KHksIG1pblkpOworICAgICAgICBtYXhZID0gc3RkOjptYXgoeSwgbWF4WSk7CisKKyAgICAgICAg
bV9lZGdlc1tpXS5wb2x5Z29uID0gdGhpczsKKyAgICAgICAgbV9lZGdlc1tpXS5pMSA9IGk7Cisg
ICAgICAgIG1fZWRnZXNbaV0uaTIgPSAoaSsxKSAlIG5WZXJ0aWNlczsKKworICAgICAgICBzb3J0
ZWRFZGdlc01pbllbaV0gPSAmbV9lZGdlc1tpXTsKKyAgICB9CisKKyAgICBtX2JvdW5kaW5nQm94
LnNldFgobWluWCk7CisgICAgbV9ib3VuZGluZ0JveC5zZXRZKG1pblkpOworICAgIG1fYm91bmRp
bmdCb3guc2V0V2lkdGgobWF4WCAtIG1pblgpOworICAgIG1fYm91bmRpbmdCb3guc2V0SGVpZ2h0
KG1heFkgLSBtaW5ZKTsKKworICAgIHN0ZDo6c29ydChzb3J0ZWRFZGdlc01pblkuYmVnaW4oKSwg
c29ydGVkRWRnZXNNaW5ZLmVuZCgpLCBNaW5FZGdlWUNvbXBhcmF0b3IoKSk7CisgICAgbV9lZGdl
VHJlZSA9IGFkb3B0UHRyKG5ldyBYU0VkZ2VUcmVlKHNvcnRlZEVkZ2VzTWluWSkpOworfQorCitz
dGF0aWMgYm9vbCBjb21wdXRlWEludGVyc2VjdGlvbihjb25zdCBYU0VkZ2UqIGVwLCBmbG9hdCB5
LCBYU0ludGVyc2VjdGlvbiYgaSkKK3sKKyAgICBjb25zdCBYU0VkZ2UmIGUgPSAqZXA7CisKKyAg
ICBpZiAoZS5taW5ZKCkgPiB5IHx8IGUubWF4WSgpIDwgeSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIAorICAgIGZsb2F0IHgxID0gZS54MSgpOworICAgIGZsb2F0IHkxID0gZS55MSgpOwor
ICAgIGZsb2F0IHgyID0gZS54MigpOworICAgIGZsb2F0IHkyID0gZS55MigpOworICAgIGZsb2F0
IGR5ID0geTIgLSB5MTsKKworICAgIGkuZWRnZSA9IGVwOworICAgIGkueSA9IHk7CisKKyAgICBp
ZiAoIWR5KSB7CisgICAgICAgIGkudHlwZSA9IFZlcnRleFlCb3RoOworICAgICAgICBpLnggPSBl
Lm1pblgoKTsKKyAgICB9IGVsc2UgaWYgKHkgPT0gZS5taW5ZKCkpIHsKKyAgICAgICAgaS50eXBl
ID0gVmVydGV4WU1pbjsKKyAgICAgICAgaS54ID0gKHkxIDwgeTIpID8geDEgOiB4MjsKKyAgICB9
IGVsc2UgaWYgKHkgPT0gZS5tYXhZKCkpIHsKKyAgICAgICAgaS50eXBlID0gVmVydGV4WU1heDsK
KyAgICAgICAgaS54ID0gKHkxID4geTIpID8geDEgOiB4MjsKKyAgICB9IGVsc2UgeworICAgICAg
ICBpLnR5cGUgPSBOb3JtYWw7CisgICAgICAgIGkueCA9ICgoeSAtIHkxKSAqICh4MiAtIHgxKSAv
IGR5KSArIHgxOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitmbG9hdCBYU1BvbHln
b246OnJpZ2h0VmVydGV4WShzaXplX3QgaW5kZXgpIGNvbnN0Cit7CisgICAgc2l6ZV90IG5WZXJ0
aWNlcyA9IG51bWJlck9mVmVydGljZXMoKTsKKyAgICBzaXplX3QgaTEgPSAoaW5kZXggKyAxKSAl
IG5WZXJ0aWNlczsKKyAgICBzaXplX3QgaTIgPSAoaW5kZXggLSAxKSAlIG5WZXJ0aWNlczsKKwor
ICAgIGlmIChnZXRYQXQoaTEpID09IGdldFhBdChpMikpCisgICAgICAgIHJldHVybiBnZXRZQXQo
aTEpID4gZ2V0WUF0KGkyKSA/IGdldFlBdChpMSkgOiBnZXRZQXQoaTIpOworCisgICAgcmV0dXJu
IGdldFhBdChpMSkgPiBnZXRYQXQoaTIpID8gZ2V0WUF0KGkxKSA6IGdldFlBdChpMik7Cit9CisK
K3N0YXRpYyBib29sIGFwcGVuZEludGVydmFsWChmbG9hdCB4LCBib29sIGluc2lkZSwgVmVjdG9y
PFhTSW50ZXJ2YWw+JiB2KQoreworICAgIGlmICghaW5zaWRlKQorICAgICAgICB2LmFwcGVuZChY
U0ludGVydmFsKHgpKTsKKyAgICBlbHNlCisgICAgICAgIHZbdi5zaXplKCkgLSAxXS54MiA9IHg7
CisKKyAgICByZXR1cm4gIWluc2lkZTsKK30KKwordm9pZCBYU1BvbHlnb246OmNvbXB1dGVYSW50
ZXJzZWN0aW9ucyhmbG9hdCB5LCBWZWN0b3I8WFNJbnRlcnZhbD4mIHJ2KSBjb25zdAoreworICAg
IFZlY3RvcjxYU0VkZ2UqPiBvdmVybGFwcGluZ0VkZ2VzOworICAgIG1fZWRnZVRyZWUtPmZpbmRF
ZGdlc1RoYXRPdmVybGFwWSh5LCBvdmVybGFwcGluZ0VkZ2VzKTsKKworICAgIFZlY3RvcjxYU0lu
dGVyc2VjdGlvbj4gaW50ZXJzZWN0aW9uczsKKyAgICBYU0ludGVyc2VjdGlvbiBpbnRlcnNlY3Rp
b247CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvdmVybGFwcGluZ0VkZ2VzLnNpemUoKTsg
aSsrKSB7CisgICAgICAgIGlmIChjb21wdXRlWEludGVyc2VjdGlvbihvdmVybGFwcGluZ0VkZ2Vz
W2ldLCB5LCBpbnRlcnNlY3Rpb24pICYmIGludGVyc2VjdGlvbi50eXBlICE9IFZlcnRleFlCb3Ro
KQorICAgICAgICAgICAgaW50ZXJzZWN0aW9ucy5hcHBlbmQoaW50ZXJzZWN0aW9uKTsKKyAgICB9
CisgICAgaWYgKGludGVyc2VjdGlvbnMuc2l6ZSgpIDwgMikKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIHN0ZDo6c29ydChpbnRlcnNlY3Rpb25zLmJlZ2luKCksIGludGVyc2VjdGlvbnMuZW5k
KCksIEludGVyc2VjdGlvblhDb21wYXJhdG9yKCkpOworICAgIAorICAgIHNpemVfdCBpbmRleCA9
IDA7CisgICAgaW50IHdpbmRDb3VudCA9IDA7CisgICAgYm9vbCBpbnNpZGUgPSBmYWxzZTsKKwor
ICAgIHdoaWxlIChpbmRleCA8IGludGVyc2VjdGlvbnMuc2l6ZSgpKSB7CisgICAgICAgIGNvbnN0
IFhTSW50ZXJzZWN0aW9uJiB0aGlzSW50ID0gaW50ZXJzZWN0aW9uc1tpbmRleF07CisKKyAgICAg
ICAgaWYgKGluZGV4ICsgMSA8IGludGVyc2VjdGlvbnMuc2l6ZSgpKSB7CisgICAgICAgICAgICBj
b25zdCBYU0ludGVyc2VjdGlvbiYgbmV4dEludCA9IGludGVyc2VjdGlvbnNbaW5kZXggKzFdOwor
ICAgICAgICAgICAgaWYgKCh0aGlzSW50LnggPT0gbmV4dEludC54KSAmJiAodGhpc0ludC50eXBl
ID09IFZlcnRleFlNaW4gfHwgdGhpc0ludC50eXBlID09IFZlcnRleFlNYXgpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKHRoaXNJbnQudHlwZSA9PSBuZXh0SW50LnR5cGUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gc2tpcCBWZXJ0ZXhZTWF4LFZlcnRleFlNYXggYW5kIFZlcnRleFlNaW4sVmVy
dGV4WU1pbgorICAgICAgICAgICAgICAgICAgICBpbmRleCArPSAyOworICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFZlcnRleFlNaW4sVmVydGV4WU1heCBv
ciBWZXJ0ZXhZTWF4LFZlcnRleFlNaW4gPT4gVmVydGV4WU1pbgorICAgICAgICAgICAgICAgICAg
ICBpZiAobmV4dEludC50eXBlID09IFZlcnRleFlNYXgpCisgICAgICAgICAgICAgICAgICAgICAg
ICBpbnRlcnNlY3Rpb25zW2luZGV4ICsgMV0gPSB0aGlzSW50OworICAgICAgICAgICAgICAgICAg
ICBpbmRleCArPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFhTRWRnZSYgdGhp
c0VkZ2UgPSAqdGhpc0ludC5lZGdlOworICAgICAgICBib29sIGNyb3NzaW5nID0gIXdpbmRDb3Vu
dDsKKworICAgICAgICAgaWYgKGZpbGxSdWxlKCkgPT0gUlVMRV9FVkVOT0REKSB7CisgICAgICAg
ICAgICB3aW5kQ291bnQgKz0gKGdldFlBdCh0aGlzRWRnZS5pMikgPiBnZXRZQXQodGhpc0VkZ2Uu
aTEpKSA/ICsxIDogLTE7CisgICAgICAgICAgICBjcm9zc2luZyA9IGNyb3NzaW5nIHx8ICF3aW5k
Q291bnQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKHRoaXNJbnQudHlwZSA9PSBOb3JtYWwp
IHx8ICh0aGlzSW50LnR5cGUgPT0gVmVydGV4WU1pbikpIHsKKyAgICAgICAgICAgIGlmIChjcm9z
c2luZykKKyAgICAgICAgICAgICAgICBpbnNpZGUgPSBhcHBlbmRJbnRlcnZhbFgodGhpc0ludC54
LCBpbnNpZGUsIHJ2KTsKKyAgICAgICAgfSBlbHNlIGlmICh0aGlzSW50LnR5cGUgPT0gVmVydGV4
WU1heCkgeworICAgICAgICAgICAgaW50IHZpID0gKGdldFlBdCh0aGlzRWRnZS5pMikgPiBnZXRZ
QXQodGhpc0VkZ2UuaTEpKSA/IHRoaXNFZGdlLmkyIDogdGhpc0VkZ2UuaTE7CisgICAgICAgICAg
ICBpZiAoY3Jvc3NpbmcgJiYgcmlnaHRWZXJ0ZXhZKHZpKSA+IHkpCisgICAgICAgICAgICAgICAg
aW5zaWRlID0gYXBwZW5kSW50ZXJ2YWxYKHRoaXNFZGdlLm1heFgoKSwgaW5zaWRlLCBydik7Cisg
ICAgICAgIH0KKworICAgICAgICBpbmRleCArPSAxOworICAgIH0KK30KKworLy8gUmV0dXJuIHRo
ZSBYIHByb2plY3Rpb25zIG9mIHRoZSBlZGdlcyB0aGF0IG92ZXJsYXAgeTEseTIuCit2b2lkIFhT
UG9seWdvbjo6Y29tcHV0ZUVkZ2VJbnRlcnNlY3Rpb25zKGZsb2F0IHkxLCBmbG9hdCB5MiwgVmVj
dG9yPFhTSW50ZXJ2YWw+JiBydikgY29uc3QKK3sKKyAgICBpZiAoeTEgPiB5MikKKyAgICAgICAg
c3RkOjpzd2FwKHkxLCB5Mik7CisKKyAgICBWZWN0b3I8WFNFZGdlICo+IG92ZXJsYXBwaW5nRWRn
ZXM7CisgICAgbV9lZGdlVHJlZS0+ZmluZEVkZ2VzVGhhdE92ZXJsYXBJbnRlcnZhbCh5MSwgeTIs
IG92ZXJsYXBwaW5nRWRnZXMpOworCisgICAgWFNJbnRlcnNlY3Rpb24gaW50ZXJzZWN0aW9uOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3ZlcmxhcHBpbmdFZGdlcy5zaXplKCk7IGkrKykg
eworICAgICAgICBjb25zdCBYU0VkZ2UmIGVkZ2UgPSAqb3ZlcmxhcHBpbmdFZGdlc1tpXTsKKyAg
ICAgICAgZmxvYXQgeDEsIHgyOworCisgICAgICAgIGlmIChlZGdlLm1pblkoKSA8IHkxKSB7Cisg
ICAgICAgICAgICBjb21wdXRlWEludGVyc2VjdGlvbihvdmVybGFwcGluZ0VkZ2VzW2ldLCB5MSwg
aW50ZXJzZWN0aW9uKTsKKyAgICAgICAgICAgIHgxID0gaW50ZXJzZWN0aW9uLng7CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgeDEgPSAoZWRnZS55MSgpIDwgZWRnZS55MigpKSA/IGVkZ2Uu
eDEoKSA6IGVkZ2UueDIoKTsKKworICAgICAgICBpZiAoZWRnZS5tYXhZKCkgPiB5MikgeworICAg
ICAgICAgICAgY29tcHV0ZVhJbnRlcnNlY3Rpb24ob3ZlcmxhcHBpbmdFZGdlc1tpXSwgeTIsIGlu
dGVyc2VjdGlvbik7CisgICAgICAgICAgICB4MiA9IGludGVyc2VjdGlvbi54OworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIHgyID0gKGVkZ2UueTEoKSA+IGVkZ2UueTIoKSkgPyBlZGdlLngx
KCkgOiBlZGdlLngyKCk7CisKKyAgICAgICAgaWYgKHgxID4geDIpIC8vIEZJWE1FOiBJbnRlcnZh
bCBjb25zdHJ1Y3RvciBzaG91bGQgZG8gdGhpcworICAgICAgICAgICAgc3RkOjpzd2FwKHgxLCB4
Mik7CisKKyAgICAgICAgcnYuYXBwZW5kKFhTSW50ZXJ2YWwoeDEsIHgyKSk7CisgICAgfQorCisg
ICAgc29ydFhTSW50ZXJ2YWxzKHJ2KTsKK30KKwordm9pZCBYU1BvbHlnb246OmdldE91dHNpZGVJ
bnRlcnZhbHMoZmxvYXQgeTEsIGZsb2F0IHkyLCBWZWN0b3I8WFNJbnRlcnZhbD4mIHJ2KSBjb25z
dAoreworICAgIGlmICh5MSA+IHkyKQorICAgICAgICBzdGQ6OnN3YXAoeTEsIHkyKTsKKworICAg
IFZlY3RvcjxYU0ludGVydmFsPiB2MSwgdjI7CisgICAgY29tcHV0ZVhJbnRlcnNlY3Rpb25zKHkx
LCB2MSk7CisgICAgY29tcHV0ZVhJbnRlcnNlY3Rpb25zKHkyLCB2Mik7CisKKyAgICBWZWN0b3I8
WFNJbnRlcnZhbD4gbWVyZ2VkSW50ZXJ2YWxzOworICAgIG1lcmdlWFNJbnRlcnZhbHModjEsIHYy
LCBtZXJnZWRJbnRlcnZhbHMpOworCisgICAgVmVjdG9yPFhTSW50ZXJ2YWw+IGVkZ2VJbnRlcnZh
bHM7CisgICAgY29tcHV0ZUVkZ2VJbnRlcnNlY3Rpb25zKHkxLCB5MiwgZWRnZUludGVydmFscyk7
CisgICAgbWVyZ2VYU0ludGVydmFscyhtZXJnZWRJbnRlcnZhbHMsIGVkZ2VJbnRlcnZhbHMsIHJ2
KTsKK30KKwordm9pZCBYU1BvbHlnb246OmdldEluc2lkZUludGVydmFscyhmbG9hdCB5MSwgZmxv
YXQgeTIsIFZlY3RvcjxYU0ludGVydmFsPiYgcnYpIGNvbnN0Cit7CisgICAgaWYgKHkxID4geTIp
CisgICAgICAgIHN0ZDo6c3dhcCh5MSwgeTIpOworCisgICAgVmVjdG9yPFhTSW50ZXJ2YWw+IHYx
LCB2MjsKKyAgICBjb21wdXRlWEludGVyc2VjdGlvbnMoeTEsIHYxKTsKKyAgICBjb21wdXRlWElu
dGVyc2VjdGlvbnMoeTIsIHYyKTsKKworICAgIFZlY3RvcjxYU0ludGVydmFsPiBjb21tb25JbnRl
cnZhbHM7CisgICAgaW50ZXJzZWN0WFNJbnRlcnZhbHModjEsIHYyLCBjb21tb25JbnRlcnZhbHMp
OworCisgICAgVmVjdG9yPFhTSW50ZXJ2YWw+IGVkZ2VJbnRlcnZhbHM7CisgICAgY29tcHV0ZUVk
Z2VJbnRlcnNlY3Rpb25zKHkxLCB5MiwgZWRnZUludGVydmFscyk7CisgICAgc3VidHJhY3RYU0lu
dGVydmFscyhjb21tb25JbnRlcnZhbHMsIGVkZ2VJbnRlcnZhbHMsIHJ2KTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvWFNQb2x5Z29uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9YU1Bv
bHlnb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTZlYjU0Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvWFNQb2x5Z29u
LmgKQEAgLTAsMCArMSwxMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lz
dGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwor
ICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUKKyAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikK
KyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFhTUG9seWdvbl9oCisjZGVmaW5l
IFhTUG9seWdvbl9oCisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJXaW5kUnVs
ZS5oIgorI2luY2x1ZGUgIlhTaGFwZS5oIgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Cisj
aW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBYU0Vk
Z2U7CitzdHJ1Y3QgWFNFZGdlVHJlZTsKKworY2xhc3MgWFNQb2x5Z29uIDogcHVibGljIFhTaGFw
ZSB7CitwdWJsaWM6CisgICAgWFNQb2x5Z29uKFBhc3NPd25QdHI8VmVjdG9yPGZsb2F0PiA+IGNv
b3JkaW5hdGVzLCBXaW5kUnVsZSBmaWxsUnVsZSk7CisKKyAgICBmbG9hdCBnZXRYQXQoc2l6ZV90
IGkpIGNvbnN0IHsgcmV0dXJuIG1fY29vcmRpbmF0ZXMtPmF0KGkqMik7IH0KKyAgICBmbG9hdCBn
ZXRZQXQoc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fY29vcmRpbmF0ZXMtPmF0KGkqMiArIDEp
OyB9CisgICAgc2l6ZV90IG51bWJlck9mVmVydGljZXMoKSBjb25zdCB7IHJldHVybiBtX2Nvb3Jk
aW5hdGVzLT5zaXplKCkgLyAyOyB9CisgICAgV2luZFJ1bGUgZmlsbFJ1bGUoKSBjb25zdCB7IHJl
dHVybiBtX2ZpbGxSdWxlOyB9CisKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzaGFwZUJvdW5kaW5n
Qm94KCkgY29uc3QgeyByZXR1cm4gbV9ib3VuZGluZ0JveDsgfTsKKyAgICB2aXJ0dWFsIHZvaWQg
Z2V0T3V0c2lkZUludGVydmFscyhmbG9hdCB5MSwgZmxvYXQgeTIsIFZlY3RvcjxYU0ludGVydmFs
PiYpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBnZXRJbnNpZGVJbnRlcnZhbHMoZmxvYXQgeTEs
IGZsb2F0IHkyLCBWZWN0b3I8WFNJbnRlcnZhbD4mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBm
bG9hdCByaWdodFZlcnRleFkoc2l6ZV90KSBjb25zdDsKKyAgICB2b2lkIGNvbXB1dGVYSW50ZXJz
ZWN0aW9ucyhmbG9hdCB5LCBWZWN0b3I8WFNJbnRlcnZhbD4mKSBjb25zdDsKKyAgICB2b2lkIGNv
bXB1dGVFZGdlSW50ZXJzZWN0aW9ucyhmbG9hdCB5TWluLCBmbG9hdCB5TWF4LCBWZWN0b3I8WFNJ
bnRlcnZhbD4mKSBjb25zdDsKKworICAgIE93blB0cjxWZWN0b3I8ZmxvYXQ+ID4gbV9jb29yZGlu
YXRlczsKKyAgICBXaW5kUnVsZSBtX2ZpbGxSdWxlOworICAgIEZsb2F0UmVjdCBtX2JvdW5kaW5n
Qm94OworICAgIFZlY3RvcjxYU0VkZ2U+IG1fZWRnZXM7CisgICAgT3duUHRyPFhTRWRnZVRyZWU+
IG1fZWRnZVRyZWU7Cit9OworCitzdHJ1Y3QgWFNFZGdlIHsKKyAgICBjb25zdCBYU1BvbHlnb24q
IHBvbHlnb247CisgICAgc2l6ZV90IGkxOworICAgIHNpemVfdCBpMjsKKworICAgIFhTRWRnZSgp
CisgICAgICAgIDogcG9seWdvbigwKQorICAgICAgICAsIGkxKDApCisgICAgICAgICwgaTIoMCkK
KyAgICB7CisgICAgfQorCisgICAgZmxvYXQgeDEoKSBjb25zdCB7IHJldHVybiBwb2x5Z29uLT5n
ZXRYQXQoaTEpOyB9CisgICAgZmxvYXQgeTEoKSBjb25zdCB7IHJldHVybiBwb2x5Z29uLT5nZXRZ
QXQoaTEpOyB9CisgICAgZmxvYXQgeDIoKSBjb25zdCB7IHJldHVybiBwb2x5Z29uLT5nZXRYQXQo
aTIpOyB9CisgICAgZmxvYXQgeTIoKSBjb25zdCB7IHJldHVybiBwb2x5Z29uLT5nZXRZQXQoaTIp
OyB9CisKKyAgICBmbG9hdCBtaW5YKCkgY29uc3QgeyByZXR1cm4gc3RkOjptaW4oeDEoKSwgeDIo
KSk7IH0KKyAgICBmbG9hdCBtaW5ZKCkgY29uc3QgeyByZXR1cm4gc3RkOjptaW4oeTEoKSwgeTIo
KSk7IH0gCisgICAgZmxvYXQgbWF4WCgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWF4KHgxKCksIHgy
KCkpOyB9CisgICAgZmxvYXQgbWF4WSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWF4KHkxKCksIHky
KCkpOyB9Cit9OworCitzdHJ1Y3QgWFNFZGdlVHJlZSB7Citwcml2YXRlOgorICAgIC8vIEZJWE1F
OiBtaW5TdWJ0cmVlU2l6ZSAtIGRvbid0IGJvdGhlciBjcmVhdGluZyBzdWJ0cmVlcyBmb3IgbGVz
cyB0aGFuIE4gZWRnZXMKKyAgICBmbG9hdCBjZW50ZXI7CisgICAgVmVjdG9yPFhTRWRnZSo+IG92
ZXJsYXBDZW50ZXI7CisgICAgT3duUHRyPFhTRWRnZVRyZWU+IGFib3ZlQ2VudGVyOworICAgIE93
blB0cjxYU0VkZ2VUcmVlPiBiZWxvd0NlbnRlcjsKKworICAgIHN0YXRpYyB2b2lkIGluaXRFZGdl
VHJlZShYU0VkZ2VUcmVlKiwgY29uc3QgVmVjdG9yPFhTRWRnZSo+JiBzb3J0ZWRFZGdlcyk7CisK
K3B1YmxpYzoKKyAgICBYU0VkZ2VUcmVlKGNvbnN0IFZlY3RvcjxYU0VkZ2UqPiYgc29ydGVkRWRn
ZXMpOworCisgICAgdm9pZCBmaW5kRWRnZXNUaGF0T3ZlcmxhcFkoZmxvYXQgeSwgVmVjdG9yPFhT
RWRnZSo+JikgY29uc3Q7CisgICAgdm9pZCBmaW5kRWRnZXNUaGF0T3ZlcmxhcEludGVydmFsKGZs
b2F0IG1pblksIGZsb2F0IG1heFksIFZlY3RvcjxYU0VkZ2UqPiYpIGNvbnN0OworfTsKKworZW51
bSBYU0ludGVyc2VjdGlvblR5cGUgeworICAgIE5vcm1hbCA9IDAsCisgICAgVmVydGV4WU1pbiA9
IDEsCisgICAgVmVydGV4WU1heCA9IDIsCisgICAgVmVydGV4WUJvdGggPSAzCit9OworCitzdHJ1
Y3QgWFNJbnRlcnNlY3Rpb24geworICAgIGNvbnN0IFhTRWRnZSogZWRnZTsKKyAgICBmbG9hdCB4
OworICAgIGZsb2F0IHk7CisgICAgWFNJbnRlcnNlY3Rpb25UeXBlIHR5cGU7CisKKyAgICBYU0lu
dGVyc2VjdGlvbigpCisgICAgICAgIDogZWRnZSgwKQorICAgICAgICAsIHgoMCkKKyAgICAgICAg
LCB5KDApCisgICAgICAgICwgdHlwZShOb3JtYWwpCisgICAgeworICAgIH0KK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFhTUG9seWdvbl9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9YU1JlY3RhbmdsZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9YU1JlY3RhbmdsZS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uN2FiZDZlYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1hTUmVjdGFuZ2xlLmNwcApAQCAtMCwwICsxLDExMiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAg
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMKKyAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJ
R0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICog
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICog
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJYU1JlY3RhbmdsZS5oIgor
CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitz
dGF0aWMgaW5saW5lIGZsb2F0IGVsbGlwc2VYSW50ZXJjZXB0KGZsb2F0IHksIGZsb2F0IHJ4LCBm
bG9hdCByeSkgCit7CisgICAgQVNTRVJUKHJ5ID4gMCk7CisgICAgcmV0dXJuIHJ4ICogc3FydCgx
IC0gKHkqeSkgLyAocnkqcnkpKTsKK30KKwordm9pZCBYU1JlY3RhbmdsZTo6Z2V0T3V0c2lkZUlu
dGVydmFscyhmbG9hdCB5MSwgZmxvYXQgeTIsIFZlY3RvcjxYU0ludGVydmFsPiYgcnYpIGNvbnN0
Cit7CisgICAgaWYgKHkxID4geTIpCisgICAgICAgIHN0ZDo6c3dhcCh5MSwgeTIpOworCisgICAg
aWYgKHkyIDwgbV95IHx8IHkxID49IG1feSArIG1faGVpZ2h0KQorICAgICAgICByZXR1cm47CisK
KyAgICBmbG9hdCB4MSA9IG1feDsKKyAgICBmbG9hdCB4MiA9IG1feCArIG1fd2lkdGg7CisKKyAg
ICBpZiAobV9yeSA+IDApIHsKKyAgICAgICAgaWYgKHkyIDwgbV95ICsgbV9yeSkgeworICAgICAg
ICAgICAgZmxvYXQgeWkgPSB5MiAtIG1feSAtIG1fcnk7CisgICAgICAgICAgICBmbG9hdCB4aSA9
IGVsbGlwc2VYSW50ZXJjZXB0KHlpLCBtX3J4LCBtX3J5KTsKKyAgICAgICAgICAgIHgxID0gbV94
ICsgbV9yeCAtIHhpOworICAgICAgICAgICAgeDIgPSBtX3ggKyBtX3dpZHRoIC0gbV9yeCArIHhp
OworICAgICAgICB9IGVsc2UgaWYgKHkxID4gbV95ICsgbV9oZWlnaHQgLSBtX3J5KSB7CisgICAg
ICAgICAgICBmbG9hdCB5aSA9ICB5MSAtIChtX3kgKyBtX2hlaWdodCAtIG1fcnkpOworICAgICAg
ICAgICAgZmxvYXQgeGkgPSBlbGxpcHNlWEludGVyY2VwdCh5aSwgbV9yeCwgbV9yeSk7CisgICAg
ICAgICAgICB4MSA9IG1feCArIG1fcnggLSB4aTsKKyAgICAgICAgICAgIHgyID0gbV94ICsgbV93
aWR0aCAtIG1fcnggKyB4aTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJ2LmFwcGVuZChYU0lu
dGVydmFsKHgxLCB4MikpOworfQorCit2b2lkIFhTUmVjdGFuZ2xlOjpnZXRJbnNpZGVJbnRlcnZh
bHMoZmxvYXQgeTEsIGZsb2F0IHkyLCBWZWN0b3I8WFNJbnRlcnZhbD4mIHJ2KSBjb25zdAorewor
ICAgIGlmICh5MSA+IHkyKQorICAgICAgICBzdGQ6OnN3YXAoeTEsIHkyKTsKKworICAgIGlmICh5
MSA8IG1feSB8fCB5MiA+PSBtX3kgKyBtX2hlaWdodCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
ZmxvYXQgeDEgPSBtX3g7CisgICAgZmxvYXQgeDIgPSBtX3ggKyBtX3dpZHRoOworCisgICAgaWYg
KG1fcnkgPiAwKSB7CisgICAgICAgIGJvb2wgeTFJbnRlcmNlcHRzQ29ybmVyID0geTEgPCBtX3kg
KyBtX3J5OworICAgICAgICBib29sIHkySW50ZXJjZXB0c0Nvcm5lciA9IHkyID4gbV95ICsgbV9o
ZWlnaHQgLSBtX3J5OworICAgICAgICBmbG9hdCB4aSA9IDA7CisKKyAgICAgICAgaWYgKHkxSW50
ZXJjZXB0c0Nvcm5lciAmJiB5MkludGVyY2VwdHNDb3JuZXIpIHsKKyAgICAgICAgICAgIGlmICAo
eTEgPCBtX2hlaWdodCArIDIqbV95IC0geTIpIHsKKyAgICAgICAgICAgICAgICBmbG9hdCB5aSA9
IHkxIC0gbV95IC0gbV9yeTsKKyAgICAgICAgICAgICAgICB4aSA9IGVsbGlwc2VYSW50ZXJjZXB0
KHlpLCBtX3J4LCBtX3J5KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ZmxvYXQgeWkgPSAgeTIgLSAobV95ICsgbV9oZWlnaHQgLSBtX3J5KTsKKyAgICAgICAgICAgICAg
ICB4aSA9IGVsbGlwc2VYSW50ZXJjZXB0KHlpLCBtX3J4LCBtX3J5KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIGlmICh5MUludGVyY2VwdHNDb3JuZXIpIHsKKyAgICAgICAgICAgIGZs
b2F0IHlpID0geTEgLSBtX3kgLSBtX3J5OworICAgICAgICAgICAgeGkgPSBlbGxpcHNlWEludGVy
Y2VwdCh5aSwgbV9yeCwgbV9yeSk7CisgICAgICAgIH0gZWxzZSBpZiAoeTJJbnRlcmNlcHRzQ29y
bmVyKSB7CisgICAgICAgICAgICBmbG9hdCB5aSA9ICB5MiAtIChtX3kgKyBtX2hlaWdodCAtIG1f
cnkpOworICAgICAgICAgICAgeGkgPSBlbGxpcHNlWEludGVyY2VwdCh5aSwgbV9yeCwgbV9yeSk7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoeTFJbnRlcmNlcHRzQ29ybmVyIHx8IHkySW50ZXJj
ZXB0c0Nvcm5lcikgeworICAgICAgICAgICAgeDEgPSBtX3ggKyBtX3J4IC0geGk7CisgICAgICAg
ICAgICB4MiA9IG1feCArIG1fd2lkdGggLSBtX3J4ICsgeGk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBydi5hcHBlbmQoWFNJbnRlcnZhbCh4MSwgeDIpKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvWFNS
ZWN0YW5nbGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1hTUmVjdGFuZ2xl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdkMjM0ZQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1hTUmVjdGFuZ2xlLmgK
QEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1z
IEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRQorICogQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICog
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgWFNSZWN0YW5nbGVfaAorI2RlZmluZSBY
U1JlY3RhbmdsZV9oCisKKyNpbmNsdWRlICJYU2hhcGUuaCIKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBYU1JlY3RhbmdsZSA6IHB1YmxpYyBYU2hhcGUgeworcHVibGljOgorICAgIFhTUmVj
dGFuZ2xlKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0
IHJ4ID0gMCwgZmxvYXQgcnkgPSAwKQorICAgICAgICA6IFhTaGFwZSgpCisgICAgICAgICwgbV94
KHgpCisgICAgICAgICwgbV95KHkpCisgICAgICAgICwgbV93aWR0aCh3aWR0aCkKKyAgICAgICAg
LCBtX2hlaWdodChoZWlnaHQpCisgICAgICAgICwgbV9yeChyeCkKKyAgICAgICAgLCBtX3J5KHJ5
KSAKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCBGbG9hdFJlY3Qgc2hhcGVCb3VuZGluZ0Jv
eCgpIGNvbnN0IHsgcmV0dXJuIEZsb2F0UmVjdChtX3gsIG1feSwgbV93aWR0aCwgbV9oZWlnaHQp
OyB9CisgICAgdmlydHVhbCB2b2lkIGdldE91dHNpZGVJbnRlcnZhbHMoZmxvYXQgeTEsIGZsb2F0
IHkyLCBWZWN0b3I8WFNJbnRlcnZhbD4mKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0SW5z
aWRlSW50ZXJ2YWxzKGZsb2F0IHkxLCBmbG9hdCB5MiwgVmVjdG9yPFhTSW50ZXJ2YWw+JikgY29u
c3Q7CisKK3ByaXZhdGU6CisgICAgZmxvYXQgbV94OworICAgIGZsb2F0IG1feTsKKyAgICBmbG9h
dCBtX3dpZHRoOworICAgIGZsb2F0IG1faGVpZ2h0OworICAgIGZsb2F0IG1fcng7CisgICAgZmxv
YXQgbV9yeTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFhTUmVj
dGFuZ2xlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1hT
aGFwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9YU2hhcGUuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YjVhNWEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9YU2hhcGUuY3BwCkBAIC0wLDAg
KzEsMTIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jw
b3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisg
KiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlhTaGFwZS5o
IgorCisjaW5jbHVkZSAiQmFzaWNTaGFwZUZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgIkxlbmd0aEZ1
bmN0aW9ucy5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiV2luZFJ1
bGUuaCIKKyNpbmNsdWRlICJYU1BvbHlnb24uaCIKKyNpbmNsdWRlICJYU1JlY3RhbmdsZS5oIgor
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGlj
IFBhc3NPd25QdHI8WFNoYXBlPiBjcmVhdGVYU1JlY3RhbmdsZShmbG9hdCB4LCBmbG9hdCB5LCBm
bG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCByeCwgZmxvYXQgcnkpCit7CisgICAgQVNT
RVJUKHdpZHRoID49IDAgJiYgaGVpZ2h0ID49IDAgJiYgcnggPj0gMCAmJiByeSA+PSAwKTsKKyAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IFhTUmVjdGFuZ2xlKHgsIHksIHdpZHRoLCBoZWlnaHQsIHJ4
LCByeSkpOworfQorCitzdGF0aWMgUGFzc093blB0cjxYU2hhcGU+IGNyZWF0ZVhTQ2lyY2xlKGZs
b2F0IGN4LCBmbG9hdCBjeSwgZmxvYXQgcmFkaXVzKSAKK3sKKyAgICBBU1NFUlQocmFkaXVzID49
IDApOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgWFNSZWN0YW5nbGUoY3ggLSByYWRpdXMsIGN5
IC0gcmFkaXVzLCBjeCArIHJhZGl1cywgY3kgKyByYWRpdXMsIHJhZGl1cywgcmFkaXVzKSk7Cit9
CisKK3N0YXRpYyBQYXNzT3duUHRyPFhTaGFwZT4gY3JlYXRlWFNFbGxpcHNlKGZsb2F0IGN4LCBm
bG9hdCBjeSwgZmxvYXQgcngsIGZsb2F0IHJ5KQoreworICAgIEFTU0VSVChyeCA+PSAwICYmIHJ5
ID49IDApOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgWFNSZWN0YW5nbGUoY3ggLSByeCwgY3kg
LSByeSwgY3ggKyByeCwgY3kgKyByeSwgcngsIHJ5KSk7Cit9CisKK3N0YXRpYyBQYXNzT3duUHRy
PFhTaGFwZT4gY3JlYXRlWFNQb2x5Z29uKFBhc3NPd25QdHI8VmVjdG9yPGZsb2F0PiA+IGNvb3Jk
aW5hdGVzLCBXaW5kUnVsZSBmaWxsUnVsZSkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFhT
UG9seWdvbihjb29yZGluYXRlcywgZmlsbFJ1bGUpKTsKK30KKworUGFzc093blB0cjxYU2hhcGU+
IFhTaGFwZTo6Y3JlYXRlWFNoYXBlKGNvbnN0IEJhc2ljU2hhcGUqIHdyYXBTaGFwZSwgZmxvYXQg
Ym94V2lkdGgsIGZsb2F0IGJveEhlaWdodCkKK3sKKyAgICBpZiAoIXdyYXBTaGFwZSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBzd2l0Y2ggKHdyYXBTaGFwZS0+dHlwZSgpKSB7Cisg
ICAgY2FzZSBCYXNpY1NoYXBlOjpCQVNJQ19TSEFQRV9SRUNUQU5HTEU6IHsKKyAgICAgICAgY29u
c3QgQmFzaWNTaGFwZVJlY3RhbmdsZSogcmVjdGFuZ2xlID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFz
aWNTaGFwZVJlY3RhbmdsZSo+KHdyYXBTaGFwZSk7CisgICAgICAgIExlbmd0aCByeCA9IHJlY3Rh
bmdsZS0+Y29ybmVyUmFkaXVzWCgpOworICAgICAgICBMZW5ndGggcnkgPSByZWN0YW5nbGUtPmNv
cm5lclJhZGl1c1koKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVhTUmVjdGFuZ2xlKAorICAgICAg
ICAgICAgZmxvYXRWYWx1ZUZvckxlbmd0aChyZWN0YW5nbGUtPngoKSwgYm94V2lkdGgpLAorICAg
ICAgICAgICAgZmxvYXRWYWx1ZUZvckxlbmd0aChyZWN0YW5nbGUtPnkoKSwgYm94SGVpZ2h0KSwK
KyAgICAgICAgICAgIGZsb2F0VmFsdWVGb3JMZW5ndGgocmVjdGFuZ2xlLT53aWR0aCgpLCBib3hX
aWR0aCksCisgICAgICAgICAgICBmbG9hdFZhbHVlRm9yTGVuZ3RoKHJlY3RhbmdsZS0+aGVpZ2h0
KCksIGJveEhlaWdodCksCisgICAgICAgICAgICByeC5pc1VuZGVmaW5lZCgpID8gMCA6IGZsb2F0
VmFsdWVGb3JMZW5ndGgocngsIGJveFdpZHRoKSwKKyAgICAgICAgICAgIHJ5LmlzVW5kZWZpbmVk
KCkgPyAwIDogZmxvYXRWYWx1ZUZvckxlbmd0aChyeSwgYm94SGVpZ2h0KSApOworICAgIH0KKwor
ICAgIGNhc2UgQmFzaWNTaGFwZTo6QkFTSUNfU0hBUEVfQ0lSQ0xFOiB7CisgICAgICAgIGNvbnN0
IEJhc2ljU2hhcGVDaXJjbGUqIGNpcmNsZSA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljU2hhcGVD
aXJjbGUqPih3cmFwU2hhcGUpOworICAgICAgICByZXR1cm4gY3JlYXRlWFNDaXJjbGUoCisgICAg
ICAgICAgICBmbG9hdFZhbHVlRm9yTGVuZ3RoKGNpcmNsZS0+Y2VudGVyWCgpLCBib3hXaWR0aCks
CisgICAgICAgICAgICBmbG9hdFZhbHVlRm9yTGVuZ3RoKGNpcmNsZS0+Y2VudGVyWSgpLCBib3hI
ZWlnaHQpLAorICAgICAgICAgICAgZmxvYXRWYWx1ZUZvckxlbmd0aChjaXJjbGUtPnJhZGl1cygp
LCBzdGQ6Om1heChib3hIZWlnaHQsIGJveFdpZHRoKSkgKTsKKyAgICB9CisKKyAgICBjYXNlIEJh
c2ljU2hhcGU6OkJBU0lDX1NIQVBFX0VMTElQU0U6IHsKKyAgICAgICAgY29uc3QgQmFzaWNTaGFw
ZUVsbGlwc2UqIGVsbGlwc2UgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY1NoYXBlRWxsaXBzZSo+
KHdyYXBTaGFwZSk7CisgICAgICAgIHJldHVybiBjcmVhdGVYU0VsbGlwc2UoCisgICAgICAgICAg
ICBmbG9hdFZhbHVlRm9yTGVuZ3RoKGVsbGlwc2UtPmNlbnRlclgoKSwgYm94V2lkdGgpLAorICAg
ICAgICAgICAgZmxvYXRWYWx1ZUZvckxlbmd0aChlbGxpcHNlLT5jZW50ZXJZKCksIGJveEhlaWdo
dCksCisgICAgICAgICAgICBmbG9hdFZhbHVlRm9yTGVuZ3RoKGVsbGlwc2UtPnJhZGl1c1goKSwg
Ym94V2lkdGgpLAorICAgICAgICAgICAgZmxvYXRWYWx1ZUZvckxlbmd0aChlbGxpcHNlLT5yYWRp
dXNZKCksIGJveEhlaWdodCkgKTsKKyAgICB9CisKKyAgICBjYXNlIEJhc2ljU2hhcGU6OkJBU0lD
X1NIQVBFX1BPTFlHT046IHsKKyAgICAgICAgY29uc3QgQmFzaWNTaGFwZVBvbHlnb24qIHBvbHln
b24gPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY1NoYXBlUG9seWdvbio+KHdyYXBTaGFwZSk7Cisg
ICAgICAgIGNvbnN0IFZlY3RvcjxMZW5ndGg+JiB2YWx1ZXMgPSBwb2x5Z29uLT52YWx1ZXMoKTsK
KyAgICAgICAgc2l6ZV90IHZhbHVlc1NpemUgPSB2YWx1ZXMuc2l6ZSgpOworICAgICAgICBWZWN0
b3I8ZmxvYXQ+ICpjdiA9IG5ldyBWZWN0b3I8ZmxvYXQ+KHZhbHVlc1NpemUpOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVzU2l6ZTsgaSArPSAyKSB7CisgICAgICAgICAg
ICBjdi0+YXQoaSkgPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKHZhbHVlcy5hdChpKSwgYm94V2lkdGgp
OworICAgICAgICAgICAgY3YtPmF0KGkrMSkgPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKHZhbHVlcy5h
dChpKzEpLCBib3hIZWlnaHQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBjcmVhdGVYU1Bv
bHlnb24oYWRvcHRQdHIoY3YpLCBwb2x5Z29uLT53aW5kUnVsZSgpKTsKKyAgICB9CisgICAgfQor
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1hTaGFwZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvWFNo
YXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE0ZDBmMwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1hTaGFwZS5oCkBA
IC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJ
bmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUKKyAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFhTaGFwZV9oCisjZGVmaW5lIFhTaGFwZV9o
CisKKyNpbmNsdWRlICJCYXNpY1NoYXBlcy5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2lu
Y2x1ZGUgIlhTSW50ZXJ2YWwuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBYU2hhcGUg
eworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFhTaGFwZT4gY3JlYXRlWFNoYXBlKGNv
bnN0IEJhc2ljU2hhcGUqLCBmbG9hdCBib3JkZXJCb3hXaWR0aCwgZmxvYXQgYm9yZGVyQm94SGVp
Z2h0KTsKKworICAgIHZpcnR1YWwgflhTaGFwZSgpIHsgfQorCisgICAgdmlydHVhbCBGbG9hdFJl
Y3Qgc2hhcGVCb3VuZGluZ0JveCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0SW5z
aWRlSW50ZXJ2YWxzKGZsb2F0IHlNaW4sIGZsb2F0IHlNYXgsIFZlY3RvcjxYU0ludGVydmFsPiYp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0T3V0c2lkZUludGVydmFscyhmbG9hdCB5
TWluLCBmbG9hdCB5TWF4LCBWZWN0b3I8WFNJbnRlcnZhbD4mKSBjb25zdCA9IDA7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBYU2hhcGVfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAppbmRleCA4Yjk2
MGYwLi4yZmJkZWU2IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2tMaW5lTGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2tMaW5lTGF5b3V0LmNwcApAQCAtMTMyMiw4ICsxMzIyLDExIEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OmxheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3Rh
dGUsIElubGluCiAjaWYgRU5BQkxFKENTU19FWENMVVNJT05TKQogICAgICAgICAvLyBGSVhNRTog
QnVnIDg5OTkzOiBJZiB0aGUgd3JhcCBzaGFwZSBjb21lcyBmcm9tIGEgcGFyZW50LCB3ZSB3aWxs
IG5lZWQgdG8gYWRqdXN0CiAgICAgICAgIC8vIHRoZSBoZWlnaHQgY29vcmRpbmF0ZQotICAgICAg
ICBpZiAod3JhcFNoYXBlSW5mbykKLSAgICAgICAgICAgIHdyYXBTaGFwZUluZm8tPmNvbXB1dGVT
ZWdtZW50c0ZvckxpbmUobG9naWNhbEhlaWdodCgpKTsKKyAgICAgICAgaWYgKHdyYXBTaGFwZUlu
Zm8pIHsKKyAgICAgICAgICAgIExheW91dFVuaXQgbGluZVRvcCA9IGxvZ2ljYWxIZWlnaHQoKTsK
KyAgICAgICAgICAgIExheW91dFVuaXQgbGluZUJvdHRvbSA9IGxpbmVUb3AgKyBsaW5lSGVpZ2h0
KHRydWUsIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBIb3Jpem9udGFsTGluZSA6IFZlcnRp
Y2FsTGluZSwgUG9zaXRpb25PZkludGVyaW9yTGluZUJveGVzKTsKKyAgICAgICAgICAgIHdyYXBT
aGFwZUluZm8tPmNvbXB1dGVTZWdtZW50c0ZvckxpbmUobGluZVRvcCwgbGluZUJvdHRvbSk7Cisg
ICAgICAgIH0KICNlbmRpZgogICAgICAgICBlbmQgPSBsaW5lQnJlYWtlci5uZXh0TGluZUJyZWFr
KHJlc29sdmVyLCBsYXlvdXRTdGF0ZS5saW5lSW5mbygpLCByZW5kZXJUZXh0SW5mbywgbGFzdEZs
b2F0RnJvbVByZXZpb3VzTGluZSwgY29uc2VjdXRpdmVIeXBoZW5hdGVkTGluZXMpOwogICAgICAg
ICBpZiAocmVzb2x2ZXIucG9zaXRpb24oKS5hdEVuZCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvV3JhcFNoYXBlSW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvV3JhcFNoYXBlSW5mby5jcHAKaW5kZXggOGVmNzNjNy4uNmYwZTM5YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1dyYXBTaGFwZUluZm8uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9XcmFwU2hhcGVJbmZvLmNwcApAQCAtMTA1LDM3ICsxMDUsMjkg
QEAgdm9pZCBXcmFwU2hhcGVJbmZvOjpjb21wdXRlU2hhcGVTaXplKExheW91dFVuaXQgbG9naWNh
bFdpZHRoLCBMYXlvdXRVbml0IGxvZ2ljYWwKIAogICAgIC8vIEZJWE1FOiBCdWcgODk5OTM6IFRo
ZSB3cmFwIHNoYXBlIG1heSBjb21lIGZyb20gdGhlIHBhcmVudCBvYmplY3QKICAgICBCYXNpY1No
YXBlKiBzaGFwZSA9IG1fYmxvY2stPnN0eWxlKCktPndyYXBTaGFwZUluc2lkZSgpOwotCiAgICAg
QVNTRVJUKHNoYXBlKTsKIAotICAgIHN3aXRjaCAoc2hhcGUtPnR5cGUoKSkgewotICAgIGNhc2Ug
QmFzaWNTaGFwZTo6QkFTSUNfU0hBUEVfUkVDVEFOR0xFOiB7Ci0gICAgICAgIEJhc2ljU2hhcGVS
ZWN0YW5nbGUqIHJlY3QgPSBzdGF0aWNfY2FzdDxCYXNpY1NoYXBlUmVjdGFuZ2xlICo+KHNoYXBl
KTsKLSAgICAgICAgbV9zaGFwZUxlZnQgPSB2YWx1ZUZvckxlbmd0aChyZWN0LT54KCksIG1fbG9n
aWNhbFdpZHRoKTsKLSAgICAgICAgbV9zaGFwZVdpZHRoID0gdmFsdWVGb3JMZW5ndGgocmVjdC0+
d2lkdGgoKSwgbV9sb2dpY2FsV2lkdGgpOwotICAgICAgICBtX3NoYXBlVG9wID0gdmFsdWVGb3JM
ZW5ndGgocmVjdC0+eSgpLCBtX2xvZ2ljYWxIZWlnaHQpOwotICAgICAgICBtX3NoYXBlSGVpZ2h0
ID0gdmFsdWVGb3JMZW5ndGgocmVjdC0+aGVpZ2h0KCksIG1fbG9naWNhbEhlaWdodCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICAvLyBGSVhNRTogQnVnIDg5NzA3OiBFbmFibGUgc2hhcGUg
aW5zaWRlIGZvciBub24tcmVjdGFuZ3VsYXIgc2hhcGVzCi0gICAgY2FzZSBCYXNpY1NoYXBlOjpC
QVNJQ19TSEFQRV9DSVJDTEU6Ci0gICAgY2FzZSBCYXNpY1NoYXBlOjpCQVNJQ19TSEFQRV9FTExJ
UFNFOgotICAgIGNhc2UgQmFzaWNTaGFwZTo6QkFTSUNfU0hBUEVfUE9MWUdPTjogewotICAgICAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgfQorICAgIG1f
eHNoYXBlID0gWFNoYXBlOjpjcmVhdGVYU2hhcGUoc2hhcGUsIGxvZ2ljYWxXaWR0aCwgbG9naWNh
bEhlaWdodCk7CisgICAgQVNTRVJUKG1feHNoYXBlKTsKIH0KIAotYm9vbCBXcmFwU2hhcGVJbmZv
Ojpjb21wdXRlU2VnbWVudHNGb3JMaW5lKExheW91dFVuaXQgbGluZVRvcCkKK2Jvb2wgV3JhcFNo
YXBlSW5mbzo6Y29tcHV0ZVNlZ21lbnRzRm9yTGluZShMYXlvdXRVbml0IGxpbmVUb3AsIExheW91
dFVuaXQgbGluZUJvdHRvbSkKIHsKICAgICBtX2xpbmVUb3AgPSBsaW5lVG9wOwogICAgIG1fc2Vn
bWVudHMuY2xlYXIoKTsKKwogICAgIGlmIChsaW5lU3RhdGUoKSA9PSBMSU5FX0lOU0lERV9TSEFQ
RSkgewotICAgICAgICBMaW5lU2VnbWVudCBzZWdtZW50OwotICAgICAgICBzZWdtZW50LmxvZ2lj
YWxMZWZ0ID0gbV9zaGFwZUxlZnQ7Ci0gICAgICAgIHNlZ21lbnQubG9naWNhbFJpZ2h0ID0gbV9z
aGFwZUxlZnQgKyBtX3NoYXBlV2lkdGg7Ci0gICAgICAgIG1fc2VnbWVudHMuYXBwZW5kKHNlZ21l
bnQpOworICAgICAgICBBU1NFUlQobV94c2hhcGUpOworCisgICAgICAgIGxpbmVCb3R0b20gPSBs
aW5lVG9wOyAvLyBGSVhNRTogQnVnIDk1NDc5LCB3b3JrYXJvdW5kIGZvciBub3cKKyAgICAgICAg
VmVjdG9yPFhTSW50ZXJ2YWw+IGludGVydmFsczsKKyAgICAgICAgbV94c2hhcGUtPmdldEluc2lk
ZUludGVydmFscyhsaW5lVG9wLCBsaW5lQm90dG9tLCBpbnRlcnZhbHMpOyAgCisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgaW50ZXJ2YWxzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAg
ICBMaW5lU2VnbWVudCBzZWdtZW50OworICAgICAgICAgICAgc2VnbWVudC5sb2dpY2FsTGVmdCA9
IGludGVydmFsc1tpXS54MTsKKyAgICAgICAgICAgIHNlZ21lbnQubG9naWNhbFJpZ2h0ID0gaW50
ZXJ2YWxzW2ldLngyOworICAgICAgICAgICAgbV9zZWdtZW50cy5hcHBlbmQoc2VnbWVudCk7Cisg
ICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIG1fc2VnbWVudHMuc2l6ZSgpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1dyYXBTaGFwZUluZm8uaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9XcmFwU2hhcGVJbmZvLmgKaW5kZXggYTgwMzZkMC4uODhmZDUyZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1dyYXBTaGFwZUluZm8uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvV3JhcFNoYXBlSW5mby5oCkBAIC0zMiw3ICszMiwx
MCBAQAogCiAjaWYgRU5BQkxFKENTU19FWENMVVNJT05TKQogCisjaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCiAjaW5jbHVkZSAiTGF5b3V0VHlwZXNJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiWFNo
YXBlLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC02NCwxNCArNjcsMTggQEAgcHVibGlj
OgogICAgIHN0YXRpYyB2b2lkIHJlbW92ZVdyYXBTaGFwZUluZm9Gb3JSZW5kZXJCbG9jayhjb25z
dCBSZW5kZXJCbG9jayopOwogICAgIHN0YXRpYyBib29sIGlzV3JhcFNoYXBlSW5mb0VuYWJsZWRG
b3JSZW5kZXJCbG9jayhjb25zdCBSZW5kZXJCbG9jayopOwogCi0gICAgTGF5b3V0VW5pdCBzaGFw
ZVRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcGVUb3A7IH0KKyAgICBMYXlvdXRVbml0IHNoYXBl
VG9wKCkgY29uc3QgCisgICAgeyAKKyAgICAgICAgQVNTRVJUKG1feHNoYXBlKTsKKyAgICAgICAg
cmV0dXJuIG1feHNoYXBlLT5zaGFwZUJvdW5kaW5nQm94KCkueSgpOworICAgIH0KICAgICBib29s
IGhhc1NlZ21lbnRzKCkgY29uc3Q7CiAgICAgY29uc3QgU2VnbWVudExpc3QmIHNlZ21lbnRzKCkg
Y29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChoYXNTZWdtZW50cygpKTsKICAgICAgICAgcmV0
dXJuIG1fc2VnbWVudHM7CiAgICAgfQotICAgIGJvb2wgY29tcHV0ZVNlZ21lbnRzRm9yTGluZShM
YXlvdXRVbml0KTsKKyAgICBib29sIGNvbXB1dGVTZWdtZW50c0ZvckxpbmUoTGF5b3V0VW5pdCBs
aW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pOwogICAgIExpbmVTdGF0ZSBsaW5lU3RhdGUo
KSBjb25zdDsKICAgICB2b2lkIGNvbXB1dGVTaGFwZVNpemUoTGF5b3V0VW5pdCBsb2dpY2FsV2lk
dGgsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCk7CiAgICAgdm9pZCBkaXJ0eVdyYXBTaGFwZVNp
emUoKSB7IG1fd3JhcFNoYXBlU2l6ZURpcnR5ID0gdHJ1ZTsgfQpAQCAtODAsMTAgKzg3LDcgQEAg
cHJpdmF0ZToKICAgICBXcmFwU2hhcGVJbmZvKFJlbmRlckJsb2NrKik7CiAKICAgICBSZW5kZXJC
bG9jayogbV9ibG9jazsKLSAgICBMYXlvdXRVbml0IG1fc2hhcGVMZWZ0OwotICAgIExheW91dFVu
aXQgbV9zaGFwZVRvcDsKLSAgICBMYXlvdXRVbml0IG1fc2hhcGVXaWR0aDsKLSAgICBMYXlvdXRV
bml0IG1fc2hhcGVIZWlnaHQ7CisgICAgT3duUHRyPFhTaGFwZT4gbV94c2hhcGU7CiAKICAgICBM
YXlvdXRVbml0IG1fbGluZVRvcDsKICAgICBMYXlvdXRVbml0IG1fbG9naWNhbFdpZHRoOwpAQCAt
OTUsMTAgKzk5LDE1IEBAIHByaXZhdGU6CiAKIGlubGluZSBXcmFwU2hhcGVJbmZvOjpMaW5lU3Rh
dGUgV3JhcFNoYXBlSW5mbzo6bGluZVN0YXRlKCkgY29uc3QKIHsKLSAgICBpZiAobV9saW5lVG9w
IDwgbV9zaGFwZVRvcCkKKyAgICBBU1NFUlQobV94c2hhcGUpOworICAgIEZsb2F0UmVjdCBzaGFw
ZUJvdW5kcyA9IG1feHNoYXBlLT5zaGFwZUJvdW5kaW5nQm94KCk7CisKKyAgICBpZiAobV9saW5l
VG9wIDwgc2hhcGVCb3VuZHMueSgpKQogICAgICAgICByZXR1cm4gTElORV9CRUZPUkVfU0hBUEU7
Ci0gICAgaWYgKG1fbGluZVRvcCA8IG1fc2hhcGVUb3AgKyBtX3NoYXBlSGVpZ2h0KQorCisgICAg
aWYgKG1fbGluZVRvcCA8IHNoYXBlQm91bmRzLm1heFkoKSkKICAgICAgICAgcmV0dXJuIExJTkVf
SU5TSURFX1NIQVBFOworCiAgICAgcmV0dXJuIExJTkVfQUZURVJfU0hBUEU7CiB9CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>