<?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>74293</bug_id>
          
          <creation_ts>2011-12-12 07:46:53 -0800</creation_ts>
          <short_desc>[Qt] Mobile theme could use a little refresh</short_desc>
          <delta_ts>2011-12-14 06:37:05 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Pierre Rossi">pierre.rossi</reporter>
          <assigned_to name="Pierre Rossi">pierre.rossi</assigned_to>
          <cc>hausmann</cc>
    
    <cc>kbalazs</cc>
    
    <cc>kenneth</cc>
    
    <cc>macpherson</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>519190</commentid>
    <comment_count>0</comment_count>
    <who name="Pierre Rossi">pierre.rossi</who>
    <bug_when>2011-12-12 07:46:53 -0800</bug_when>
    <thetext>[Qt] Mobile theme could use a little refresh</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519196</commentid>
    <comment_count>1</comment_count>
      <attachid>118786</attachid>
    <who name="Pierre Rossi">pierre.rossi</who>
    <bug_when>2011-12-12 07:52:14 -0800</bug_when>
    <thetext>Created attachment 118786
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519261</commentid>
    <comment_count>2</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-12-12 09:09:26 -0800</bug_when>
    <thetext>We always love screenshots :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519891</commentid>
    <comment_count>3</comment_count>
      <attachid>118786</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-12-12 23:39:16 -0800</bug_when>
    <thetext>Comment on attachment 118786
Patch

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

I just went quickly over the patch. Sorry, no real review.

&gt; Source/WebCore/platform/qt/RenderThemeQt.cpp:121
&gt;      String result = RenderTheme::extraDefaultStyleSheet();
&gt; -    if (useMobileTheme())
&gt; +    if (useMobileTheme()) {
&gt;          result += String(themeQtNoListboxesUserAgentStyleSheet, sizeof(themeQtNoListboxesUserAgentStyleSheet));
&gt; +        result += String(mobileThemeQtUserAgentStyleSheet, sizeof(mobileThemeQtUserAgentStyleSheet));
&gt; +    }
&gt;      return result;

We have StringBuilder to build string effectively.

&gt; Source/WebCore/platform/qt/RenderThemeQtMobile.cpp:145
&gt; +void StylePainterMobile::drawChecker(QPainter* painter, const QRect&amp; rect, QColor color) const

QColor -&gt; const QColor&amp;

&gt; Source/WebCore/platform/qt/RenderThemeQtMobile.cpp:158
&gt; +    path.moveTo(0.18, 0.47);
&gt; +    path.lineTo(0.25, 0.4);
&gt; +    path.lineTo(0.4, 0.55);
&gt; +    path.quadTo(0.64, 0.29, 0.78, 0.2);
&gt; +    path.lineTo(0.8, 0.25);
&gt; +    path.quadTo(0.53, 0.55, 0.45, 0.75);

Better give name for those magic numbers :)

&gt; Source/WebCore/platform/qt/RenderThemeQtMobile.cpp:164
&gt; +// Assumption here is that we&apos;re working with a square size

What about removing the comment and adding an ASSERT? :)

&gt; Source/WebCore/platform/qt/RenderThemeQtMobile.cpp:170
&gt; +                  + (checked ? QLatin1String(&quot;-checked&quot;) : QLatin1String(&quot;&quot;));

QLatin1String(&quot;&quot;) ? Not QLatin1String()?

&gt; Source/WebCore/platform/qt/RenderThemeQtMobile.cpp:171
&gt; +    if (true || !QPixmapCache::find(key, result)) {

true || ?

&gt; Source/WebCore/platform/qt/RenderThemeQtMobile.cpp:184
&gt; +// Assumption here is that we&apos;re working with a square size

ASSERT? :)

&gt; Source/WebCore/platform/qt/RenderThemeQtMobile.cpp:190
&gt; +    const int border = size.width()/ 4;

Coding style: &quot; / &quot; :)

&gt; Source/WebCore/platform/qt/RenderThemeQtMobile.cpp:213
&gt; +//    painter-&gt;fillRect(QRect(QPoint(0,0), size), Qt::red);

Uh?

&gt; Source/WebCore/platform/qt/RenderThemeQtMobile.cpp:214
&gt; +    const int height = size.height() - 1;

Probably &quot;side&quot; instead of &quot;height&quot; or something like that?

&gt; Source/WebCore/platform/qt/RenderThemeQtMobile.cpp:406
&gt; +    // TODO: cache ?

We use FIXME.

&gt; Source/WebCore/platform/qt/RenderThemeQtMobile.cpp:631
&gt; +    // our animation goes back and forth so we need to make it last twice as long

our -&gt; Our

&gt; Source/WebCore/platform/qt/RenderThemeQtMobile.cpp:632
&gt; +    // and we need the numerator to be an odd number in order to ensure we get a progress value of 0.5

PERIOD at the end of the sentence!!!!!
You are lucky Kenneth did not see the patch yet ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519947</commentid>
    <comment_count>4</comment_count>
      <attachid>118786</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-12-13 01:18:47 -0800</bug_when>
    <thetext>Comment on attachment 118786
Patch

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

&gt; Source/WebCore/ChangeLog:7
&gt; +        The look and feel of the &quot;mobile theme&quot; we&apos;re
&gt; +        using in QtWebKit dates back to the maemo 5 days.

Not entirely true :-) It was way uglier in the Maemo 5 days, and it got a mini update for Grob.

&gt; Source/WebCore/css/mobileThemeQt.css:30
&gt; +input[type=&quot;submit&quot;], select{
&gt; +  font-family: Arial, sans-serif;
&gt; +}

What about using Nokia font if available?

&gt; Source/WebCore/css/mobileThemeQt.css:32
&gt; +input[type=&quot;submit&quot;]:disabled, input[type=&quot;submit&quot;]:disabled:active, select:disabled, input[type=&quot;text&quot;]:disabled{

space before {

&gt; Source/WebCore/platform/qt/RenderThemeQt.cpp:874
&gt;  {
&gt;      Q_UNUSED(theme);
&gt; -    init(paintInfo.context ? paintInfo.context : 0);
&gt; +    if (paintInfo.context)
&gt; +        init(paintInfo.context);
&gt;  }

So when does this happen that we dont have a context? Assert? Comment?

&gt; Source/WebCore/platform/qt/RenderThemeQtMobile.cpp:95
&gt;      painter-&gt;drawRoundedRect(rect.adjusted(line, line, -line, -line),
&gt; -            /* xRadius */ 5.0, /* yRadious */ 5.0);
&gt; +            xRadius, yRadius);

Just put that on one line

&gt; Source/WebCore/platform/qt/RenderThemeQtMobile.cpp:100
&gt; +static inline QRect squareFromRect(const QRect&amp; rect)

expandRectToSquare ?

&gt; Source/WebCore/platform/qt/RenderThemeQtMobile.cpp:116
&gt; +    oldSmoothPixmapTransform = painter-&gt;testRenderHint(QPainter::SmoothPixmapTransform);
&gt; +    if (!oldSmoothPixmapTransform)
&gt; +        painter-&gt;setRenderHint(QPainter::SmoothPixmapTransform);

is old stored somewhere? or could this be two lines? what about adding a comment and also I dislike old* :-) previous sounds more clear

&gt; Source/WebCore/platform/qt/RenderThemeQtMobile.cpp:124
&gt; +void StylePainterMobile::drawCheckableBackground(QPainter *painter, const QRect&amp; rect, bool checked, bool enabled) const

* alignment

&gt; Source/WebCore/platform/qt/RenderThemeQtMobile.cpp:139
&gt; +QSize StylePainterMobile::sizeForPainterScale(const QRect &amp;rect) const

&amp; alighment

Also the name is not very clear, but I dont have any better suggestion. but I do like At better than For

&gt; Source/WebCore/platform/qt/RenderThemeQtMobile.cpp:200
&gt; +                  + (checked ? QLatin1String(&quot;-checked&quot;) : QLatin1String(&quot;&quot;));

Doesn&apos;t QLatin1String() work?

&gt; Source/WebCore/platform/qt/RenderThemeQtMobile.cpp:226
&gt; +    const int width = size.width();

why do you do with this width and not height which you use multiple places

&gt; Source/WebCore/platform/qt/RenderThemeQtMobile.cpp:227
&gt; +    const int middle = width / 2;

horizontalCenter? confusing with center below

&gt; Source/WebCore/platform/qt/RenderThemeQtMobile.cpp:228
&gt; +    const int vCenter = size.height() / 2;

v? vertical?

&gt; Source/WebCore/platform/qt/RenderThemeQtMobile.cpp:267
&gt; +    static const QString prefix = QLatin1String(&quot;$qt-webkit-mobile-theme-combo-&quot;);
&gt; +    QPixmap result;
&gt;      QString key = prefix + (multiple ? QLatin1String(&quot;multiple-&quot;) : QLatin1String(&quot;simple-&quot;))
&gt; -        + QString::number(imageSize.width()) + QLatin1String(&quot;-&quot;) + QString::number(imageSize.height())
&gt; -        + QLatin1String(&quot;-&quot;) + (disabled ? QLatin1String(&quot;disabled&quot;) : QLatin1String(&quot;enabled&quot;));
&gt; +        + QString::number(size.width()) + QLatin1String(&quot;-&quot;) + QString::number(size.height())
&gt; +        + QLatin1String(&quot;-&quot;) + (enabled ? QLatin1String(&quot;on&quot;) : QLatin1String(&quot;off&quot;));

You seem to do this multiple places? maybe we need a dedicated method for doing this

&gt; Source/WebCore/platform/qt/RenderThemeQtMobile.cpp:288
&gt; +        const int border = focusPen.width() - 1;

comment? why - 1?

&gt; Source/WebCore/platform/qt/RenderThemeQtMobile.h:115
&gt; +    bool oldSmoothPixmapTransform;

m_previousSmoothPixmapTransform ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520076</commentid>
    <comment_count>5</comment_count>
      <attachid>118786</attachid>
    <who name="Pierre Rossi">pierre.rossi</who>
    <bug_when>2011-12-13 07:38:18 -0800</bug_when>
    <thetext>Comment on attachment 118786
Patch

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

&gt;&gt; Source/WebCore/css/mobileThemeQt.css:30
&gt;&gt; +}
&gt; 
&gt; What about using Nokia font if available?

@Kenneth: that&apos;s a actually not a bad idea at all... ;)

&gt;&gt; Source/WebCore/platform/qt/RenderThemeQtMobile.cpp:100
&gt;&gt; +static inline QRect squareFromRect(const QRect&amp; rect)
&gt; 
&gt; expandRectToSquare ?

Actually it shrinks, so I&apos;d probably go with shrinkRectToSquare. Your comment makes it clear that the name is not clear enough :)

&gt;&gt; Source/WebCore/platform/qt/RenderThemeQtMobile.cpp:116
&gt;&gt; +        painter-&gt;setRenderHint(QPainter::SmoothPixmapTransform);
&gt; 
&gt; is old stored somewhere? or could this be two lines? what about adding a comment and also I dislike old* :-) previous sounds more clear

I basically named it that to be consistent with what was already there in stylePainter (oldBrush and oldAntiAliasing).

&gt;&gt; Source/WebCore/platform/qt/RenderThemeQtMobile.cpp:171
&gt;&gt; +    if (true || !QPixmapCache::find(key, result)) {
&gt; 
&gt; true || ?

duh, I should really read things again sometimes. Remainders from testing something...

&gt;&gt; Source/WebCore/platform/qt/RenderThemeQtMobile.cpp:190
&gt;&gt; +    const int border = size.width()/ 4;
&gt; 
&gt; Coding style: &quot; / &quot; :)

Interesting that this wasn&apos;t caught by check-webkit-style...

&gt;&gt; Source/WebCore/platform/qt/RenderThemeQtMobile.cpp:213
&gt;&gt; +//    painter-&gt;fillRect(QRect(QPoint(0,0), size), Qt::red);
&gt; 
&gt; Uh?

yup, I should definitely have proof-read that...

&gt;&gt; Source/WebCore/platform/qt/RenderThemeQtMobile.cpp:226
&gt;&gt; +    const int width = size.width();
&gt; 
&gt; why do you do with this width and not height which you use multiple places

true. Should have done that when I changed the spacing to not be constant.

&gt;&gt; Source/WebCore/platform/qt/RenderThemeQtMobile.cpp:267
&gt;&gt; +        + QLatin1String(&quot;-&quot;) + (enabled ? QLatin1String(&quot;on&quot;) : QLatin1String(&quot;off&quot;));
&gt; 
&gt; You seem to do this multiple places? maybe we need a dedicated method for doing this

While I agree there seems to be a pattern, it&apos;s done in 4 places with a different number and type of arguments. I&apos;m just not sure it&apos;s worth over-engineering...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520091</commentid>
    <comment_count>6</comment_count>
      <attachid>119021</attachid>
    <who name="Pierre Rossi">pierre.rossi</who>
    <bug_when>2011-12-13 08:34:36 -0800</bug_when>
    <thetext>Created attachment 119021
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520867</commentid>
    <comment_count>7</comment_count>
      <attachid>119021</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-14 05:21:07 -0800</bug_when>
    <thetext>Comment on attachment 119021
Patch

Clearing flags on attachment: 119021

Committed r102768: &lt;http://trac.webkit.org/changeset/102768&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520868</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-14 05:21:12 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520881</commentid>
    <comment_count>9</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2011-12-14 05:50:12 -0800</bug_when>
    <thetext>The patch has broken the Qt-Minimal bot: http://build.webkit.org/builders/Qt%20Linux%20Release%20minimal/builds/38829/steps/compile-webkit/logs/stdio. Could you take a look?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520899</commentid>
    <comment_count>10</comment_count>
    <who name="Pierre Rossi">pierre.rossi</who>
    <bug_when>2011-12-14 06:25:47 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; The patch has broken the Qt-Minimal bot: http://build.webkit.org/builders/Qt%20Linux%20Release%20minimal/builds/38829/steps/compile-webkit/logs/stdio. Could you take a look?

Fixed in r102773 :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520905</commentid>
    <comment_count>11</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2011-12-14 06:37:05 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; The patch has broken the Qt-Minimal bot: http://build.webkit.org/builders/Qt%20Linux%20Release%20minimal/builds/38829/steps/compile-webkit/logs/stdio. Could you take a look?
&gt; 
&gt; Fixed in r102773 :)

Thanks!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118786</attachid>
            <date>2011-12-12 07:52:14 -0800</date>
            <delta_ts>2011-12-13 08:34:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74293-20111212165431.patch</filename>
            <type>text/plain</type>
            <size>38121</size>
            <attacher name="Pierre Rossi">pierre.rossi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyNTgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWQwN2I4MGJiOWQxMzFl
YzQxZTQyOTA5M2I2ZTAwZWJkMzVhODA5OS4uNTllOWI0ZmU4NTczZDY0OTQ4NmU3ZjNkMDY3OTlh
YzJhOGVmMDkwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDExLTEyLTEyICBQaWVy
cmUgUm9zc2kgIDxwaWVycmUucm9zc2lAZ21haWwuY29tPgorCisgICAgICAgIFtRdF0gTW9iaWxl
IHRoZW1lIGNvdWxkIHVzZSBhIGxpdHRsZSByZWZyZXNoCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDI5MworCisgICAgICAgIFRoZSBsb29rIGFuZCBm
ZWVsIG9mIHRoZSAibW9iaWxlIHRoZW1lIiB3ZSdyZQorICAgICAgICB1c2luZyBpbiBRdFdlYktp
dCBkYXRlcyBiYWNrIHRvIHRoZSBtYWVtbyA1IGRheXMuCisgICAgICAgIFRoaXMgaXMgYW4gYXR0
ZW1wdCBhdCBtYWtpbmcgaXQgbG9vayBsZXNzIG91dCBvZiAKKyAgICAgICAgcGxhY2UsIGFuZCBh
bHNvIHN1cHBvcnQgcHJvZ3Jlc3MgYW5kIHJhbmdlLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgdGhpcyBpcyBzdGlsbCBub3Qg
dGhlIGRlZmF1bHQgdGhlbWUKKyAgICAgICAgZm9yIHRlc3RzLgorCisgICAgICAgICogRGVyaXZl
ZFNvdXJjZXMucHJpOgorICAgICAgICAqIGNzcy9tb2JpbGVUaGVtZVF0LmNzczogQWRkZWQuCisg
ICAgICAgIChpbnB1dFt0eXBlPSJzdWJtaXQiXSwgc2VsZWN0KToKKyAgICAgICAgKGlucHV0W3R5
cGU9InN1Ym1pdCJdOmRpc2FibGVkLCBpbnB1dFt0eXBlPSJzdWJtaXQiXTpkaXNhYmxlZDphY3Rp
dmUsIHNlbGVjdDpkaXNhYmxlZCwgaW5wdXRbdHlwZT0idGV4dCJdOmRpc2FibGVkKToKKyAgICAg
ICAgKGlucHV0W3R5cGU9InN1Ym1pdCJdOmFjdGl2ZSk6CisgICAgICAgICogcGxhdGZvcm0vcXQv
UmVuZGVyVGhlbWVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpleHRy
YURlZmF1bHRTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlcjo6U3R5
bGVQYWludGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdSZWN0YW5ndWxhckNvbnRyb2xCYWNrZ3JvdW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OnNxdWFyZUZyb21SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUGFpbnRlck1vYmlsZTo6U3R5bGVQYWludGVyTW9iaWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUGFpbnRlck1vYmlsZTo6flN0eWxlUGFpbnRlck1vYmlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdDaGVja2FibGVCYWNrZ3JvdW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6c2l6ZUZvclBhaW50ZXJTY2FsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdDaGVja2VyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6ZmluZENoZWNrQm94KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6ZHJhd1JhZGlvKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6ZmluZFJhZGlvKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUGFpbnRlck1vYmlsZTo6ZHJhd011bHRpcGxlQ29tYm9CdXR0b24pOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVQYWludGVyTW9iaWxlOjpkcmF3U2ltcGxlQ29tYm9CdXR0b24pOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVQYWludGVyTW9iaWxlOjpnZXRCdXR0b25JbWFnZVNpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyTW9iaWxlOjpmaW5kQ29tYm9CdXR0b24pOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyTW9iaWxlOjpkcmF3TGluZUVkaXQpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVQYWludGVyTW9iaWxlOjpkcmF3Q2hlY2tCb3gpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVQYWludGVyTW9iaWxlOjpkcmF3UmFkaW9CdXR0b24pOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVQYWludGVyTW9iaWxlOjpkcmF3UHVzaEJ1dHRvbik6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdDb21ib0JveCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdQcm9ncmVzcyk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdTbGlkZXJUaHVtYik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludFRleHRGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZVF0TW9iaWxlOjpzZXRQb3B1cFBhZGRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRNZW51TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludE1lbnVMaXN0QnV0dG9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OmFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRQcm9ncmVzc0Jh
cik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludFNsaWRlclRy
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50U2xpZGVy
VGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6YWRqdXN0U2xp
ZGVyVGh1bWJTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxl
Lmg6CisKIDIwMTEtMTItMTIgIEFsZXhhbmRlciBQYXZsb3YgIDxhcGF2bG92QGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBbU3R5bGVzXSBNb2RpZmllZCBzZWxlY3RvciB0
ZXh0IG5lZWRzIHNhbml0aXphdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvRGVyaXZl
ZFNvdXJjZXMucHJpIGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMucHJpCmluZGV4IDgy
YzNiNjliMGM4NTRiOGY3NjgyNWQyMmMyODU4MjBiN2EwMzdlN2UuLmE4OGRmZTc1ZWZhYjBlZTI2
Y2FiNDUzMGYxMGM3ZDlkMWU2YmIzMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2
ZWRTb3VyY2VzLnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5wcmkKQEAg
LTg2LDcgKzg2LDggQEAgU1RZTEVTSEVFVFNfRU1CRUQgPSBcCiAgICAgJCRQV0QvY3NzL21lZGlh
Q29udHJvbHMuY3NzIFwKICAgICAkJFBXRC9jc3MvbWVkaWFDb250cm9sc1F0LmNzcyBcCiAgICAg
JCRQV0QvY3NzL21lZGlhQ29udHJvbHNRdEZ1bGxzY3JlZW4uY3NzIFwKLSAgICAkJFBXRC9jc3Mv
dGhlbWVRdE5vTGlzdGJveGVzLmNzcworICAgICQkUFdEL2Nzcy90aGVtZVF0Tm9MaXN0Ym94ZXMu
Y3NzIFwKKyAgICAkJFBXRC9jc3MvbW9iaWxlVGhlbWVRdC5jc3MKIAogSURMX0JJTkRJTkdTICs9
IFwKICAgICBjc3MvQ291bnRlci5pZGwgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L21vYmlsZVRoZW1lUXQuY3NzIGIvU291cmNlL1dlYkNvcmUvY3NzL21vYmlsZVRoZW1lUXQuY3Nz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjgxMzk5ZTY3NmZlNTQ0NGYzM2Q1MzA3MWY2ZTVhYjVmNjRkNjY1MDkKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvbW9iaWxlVGhlbWVRdC5jc3MKQEAg
LTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
aW5wdXRbdHlwZT0ic3VibWl0Il0sIHNlbGVjdHsKKyAgZm9udC1mYW1pbHk6IEFyaWFsLCBzYW5z
LXNlcmlmOworfQorCitpbnB1dFt0eXBlPSJzdWJtaXQiXTpkaXNhYmxlZCwgaW5wdXRbdHlwZT0i
c3VibWl0Il06ZGlzYWJsZWQ6YWN0aXZlLCBzZWxlY3Q6ZGlzYWJsZWQsIGlucHV0W3R5cGU9InRl
eHQiXTpkaXNhYmxlZHsKKyAgY29sb3I6ICM4MDgwODA7Cit9CisKK2lucHV0W3R5cGU9InN1Ym1p
dCJdOmFjdGl2ZSB7CisgIGNvbG9yOiB3aGl0ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAKaW5kZXggYjY1ZGUzMzcyMzk3MGM3YjQ0ZTEyZTMwYWNj
NzdiYzNjMDM2MDZjZS4uNjZhNTQ2YzJiZWViNGQ1NTg3NDBlYzE0ZGM5ODQwN2QxOTNhNzk5ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAKQEAgLTEx
NCw4ICsxMTQsMTAgQEAgYm9vbCBSZW5kZXJUaGVtZVF0Ojppc0NvbnRyb2xTdHlsZWQoY29uc3Qg
UmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBCb3JkZXJEYXRhJgogU3RyaW5nIFJlbmRlclRoZW1l
UXQ6OmV4dHJhRGVmYXVsdFN0eWxlU2hlZXQoKQogewogICAgIFN0cmluZyByZXN1bHQgPSBSZW5k
ZXJUaGVtZTo6ZXh0cmFEZWZhdWx0U3R5bGVTaGVldCgpOwotICAgIGlmICh1c2VNb2JpbGVUaGVt
ZSgpKQorICAgIGlmICh1c2VNb2JpbGVUaGVtZSgpKSB7CiAgICAgICAgIHJlc3VsdCArPSBTdHJp
bmcodGhlbWVRdE5vTGlzdGJveGVzVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHRoZW1lUXRO
b0xpc3Rib3hlc1VzZXJBZ2VudFN0eWxlU2hlZXQpKTsKKyAgICAgICAgcmVzdWx0ICs9IFN0cmlu
Zyhtb2JpbGVUaGVtZVF0VXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKG1vYmlsZVRoZW1lUXRV
c2VyQWdlbnRTdHlsZVNoZWV0KSk7CisgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAg
LTg2Nyw3ICs4NjksOCBAQCBTdHlsZVBhaW50ZXI6OlN0eWxlUGFpbnRlcihSZW5kZXJUaGVtZVF0
KiB0aGVtZSwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8pCiAgICAgOiBwYWludGVyKDApCiB7
CiAgICAgUV9VTlVTRUQodGhlbWUpOwotICAgIGluaXQocGFpbnRJbmZvLmNvbnRleHQgPyBwYWlu
dEluZm8uY29udGV4dCA6IDApOworICAgIGlmIChwYWludEluZm8uY29udGV4dCkKKyAgICAgICAg
aW5pdChwYWludEluZm8uY29udGV4dCk7CiB9CiAKIFN0eWxlUGFpbnRlcjo6U3R5bGVQYWludGVy
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRN
b2JpbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmls
ZS5jcHAKaW5kZXggZGVmNWY1YmI5NjAwODMxZDhlZTZmMTEyOGQ1ZTFlYWJmY2RhY2E5Yy4uZTU3
NjhlZTY0NGViODUxNTllMGY4MWJkNGQzZGRlNGY2OWFmOGYzOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5jcHAKQEAgLTU1LDIzICs1
NSwzMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7
CiAKLS8vIENvbnN0YW50cyBleHRyYWN0ZWQgZnJvbSBRQ29tbW9uU3R5bGUgYW5kIFFXaW5kb3dz
U3R5bGUKLXN0YXRpYyBjb25zdCBpbnQgYXJyb3dCb3hXaWR0aCA9IDE2OworLy8gQ29uc3RhbnRz
IHVzZWQgYnkgdGhlIG1vYmlsZSB0aGVtZQorc3RhdGljIGNvbnN0IGludCBhcnJvd0JveFdpZHRo
ID0gMjY7CiBzdGF0aWMgY29uc3QgaW50IGZyYW1lV2lkdGggPSAyOwotc3RhdGljIGNvbnN0IGlu
dCBjaGVja0JveFdpZHRoID0gMTM7Ci1zdGF0aWMgY29uc3QgaW50IHJhZGlvV2lkdGggPSAxMjsK
K3N0YXRpYyBjb25zdCBpbnQgY2hlY2tCb3hXaWR0aCA9IDIxOworc3RhdGljIGNvbnN0IGludCBy
YWRpb1dpZHRoID0gMjE7CiBzdGF0aWMgY29uc3QgaW50IGJ1dHRvbkljb25TaXplID0gMTY7Ci1z
dGF0aWMgY29uc3QgaW50IHNsaWRlcldpZHRoID0gMTE7Ci1zdGF0aWMgY29uc3QgaW50IHNsaWRl
ckhlaWdodCA9IDA7Ci0KLS8vIE90aGVyIGNvbnN0YW50cyB1c2VkIGJ5IHRoZSBtb2JpbGUgdGhl
bWUKLXN0YXRpYyBmbG9hdCBidXR0b25QYWRkaW5nTGVmdCA9IDE4Owotc3RhdGljIGZsb2F0IGJ1
dHRvblBhZGRpbmdSaWdodCA9IDE4Owotc3RhdGljIGZsb2F0IGJ1dHRvblBhZGRpbmdUb3AgPSAy
Owotc3RhdGljIGZsb2F0IGJ1dHRvblBhZGRpbmdCb3R0b20gPSAzOwotc3RhdGljIGZsb2F0IG1l
bnVMaXN0UGFkZGluZyA9IDk7Ci1zdGF0aWMgZmxvYXQgdGV4dEZpZWxkUGFkZGluZyA9IDU7Ci0K
K3N0YXRpYyBjb25zdCBpbnQgc2xpZGVyU2l6ZSA9IDE4OworCitzdGF0aWMgY29uc3QgZmxvYXQg
YnV0dG9uUGFkZGluZ0xlZnQgPSAxODsKK3N0YXRpYyBjb25zdCBmbG9hdCBidXR0b25QYWRkaW5n
UmlnaHQgPSAxODsKK3N0YXRpYyBjb25zdCBmbG9hdCBidXR0b25QYWRkaW5nVG9wID0gMjsKK3N0
YXRpYyBjb25zdCBmbG9hdCBidXR0b25QYWRkaW5nQm90dG9tID0gMzsKK3N0YXRpYyBjb25zdCBm
bG9hdCBtZW51TGlzdFBhZGRpbmcgPSA5Oworc3RhdGljIGNvbnN0IGZsb2F0IHRleHRGaWVsZFBh
ZGRpbmcgPSA1Oworc3RhdGljIGNvbnN0IGZsb2F0IHJhZGl1c0ZhY3RvciA9IDAuMzY7CisjaWYg
RU5BQkxFKFBST0dSRVNTX1RBRykKK3N0YXRpYyBjb25zdCBmbG9hdCBwcm9ncmVzc0JhckNodW5r
UGVyY2VudGFnZSA9IDAuMjsKK3N0YXRpYyBjb25zdCBpbnQgcHJvZ3Jlc3NBbmltYXRpb25HcmFu
dWxhcml0eSA9IDI7CisjZW5kaWYKK3N0YXRpYyBjb25zdCBRQ29sb3IgZGFya0NvbG9yKDQwLCA0
MCwgNDApOworc3RhdGljIGNvbnN0IFFDb2xvciBoaWdobGlnaHRDb2xvcigxNiwgMTI4LCAyMjEp
Oworc3RhdGljIGNvbnN0IFFDb2xvciBidXR0b25HcmFkaWVudEJvdHRvbSgyNDUsIDI0NSwgMjQ1
KTsKK3N0YXRpYyBjb25zdCBRQ29sb3Igc2hhZG93Q29sb3IoODAsIDgwLCA4MCwgMTYwKTsKK3N0
YXRpYyBjb25zdCBRUGVuIGJvcmRlclBlbihkYXJrQ29sb3IsIDAuMywgUXQ6OlNvbGlkTGluZSwg
UXQ6OlJvdW5kQ2FwLCBRdDo6Um91bmRKb2luKTsKIAogc3RhdGljIGlubGluZSB2b2lkIGRyYXdS
ZWN0YW5ndWxhckNvbnRyb2xCYWNrZ3JvdW5kKFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRUGVu
JiBwZW4sIGNvbnN0IFFSZWN0JiByZWN0LCBjb25zdCBRQnJ1c2gmIGJydXNoKQogewpAQCAtODIs
MTIgKzg5LDIwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkcmF3UmVjdGFuZ3VsYXJDb250cm9sQmFj
a2dyb3VuZChRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVBlCiAgICAgcGFpbnRlci0+c2V0QnJ1
c2goYnJ1c2gpOwogCiAgICAgaW50IGxpbmUgPSAxOworICAgIGNvbnN0IGRvdWJsZSB5UmFkaXVz
ID0gcmFkaXVzRmFjdG9yICogcmVjdC5oZWlnaHQoKTsKKyAgICBjb25zdCBkb3VibGUgeFJhZGl1
cyA9IHJhZGl1c0ZhY3RvciAqIHJlY3QuaGVpZ2h0KCk7CiAgICAgcGFpbnRlci0+ZHJhd1JvdW5k
ZWRSZWN0KHJlY3QuYWRqdXN0ZWQobGluZSwgbGluZSwgLWxpbmUsIC1saW5lKSwKLSAgICAgICAg
ICAgIC8qIHhSYWRpdXMgKi8gNS4wLCAvKiB5UmFkaW91cyAqLyA1LjApOworICAgICAgICAgICAg
eFJhZGl1cywgeVJhZGl1cyk7CiAgICAgcGFpbnRlci0+c2V0UGVuKG9sZFBlbik7CiAgICAgcGFp
bnRlci0+c2V0QnJ1c2gob2xkQnJ1c2gpOwogfQogCitzdGF0aWMgaW5saW5lIFFSZWN0IHNxdWFy
ZUZyb21SZWN0KGNvbnN0IFFSZWN0JiByZWN0KQoreworICAgIGNvbnN0IGludCBzaWRlID0gcU1p
bihyZWN0LmhlaWdodCgpLCByZWN0LndpZHRoKCkpOworICAgIHJldHVybiBRUmVjdChyZWN0LnRv
cExlZnQoKSwgUVNpemUoc2lkZSwgc2lkZSkpOworfQorCiBRU2hhcmVkUG9pbnRlcjxTdHlsZVBh
aW50ZXI+IFJlbmRlclRoZW1lUXRNb2JpbGU6OmdldFN0eWxlUGFpbnRlcihjb25zdCBQYWludElu
Zm8mIHBpKQogewogICAgIHJldHVybiBRU2hhcmVkUG9pbnRlcjxTdHlsZVBhaW50ZXI+KG5ldyBT
dHlsZVBhaW50ZXJNb2JpbGUodGhpcywgcGkpKTsKQEAgLTk2LDg5ICsxMTEsOTggQEAgUVNoYXJl
ZFBvaW50ZXI8U3R5bGVQYWludGVyPiBSZW5kZXJUaGVtZVF0TW9iaWxlOjpnZXRTdHlsZVBhaW50
ZXIoY29uc3QgUGFpbnRJbmYKIFN0eWxlUGFpbnRlck1vYmlsZTo6U3R5bGVQYWludGVyTW9iaWxl
KFJlbmRlclRoZW1lUXRNb2JpbGUqIHRoZW1lLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbykK
ICAgICA6IFN0eWxlUGFpbnRlcih0aGVtZSwgcGFpbnRJbmZvKQogeworICAgIG9sZFNtb290aFBp
eG1hcFRyYW5zZm9ybSA9IHBhaW50ZXItPnRlc3RSZW5kZXJIaW50KFFQYWludGVyOjpTbW9vdGhQ
aXhtYXBUcmFuc2Zvcm0pOworICAgIGlmICghb2xkU21vb3RoUGl4bWFwVHJhbnNmb3JtKQorICAg
ICAgICBwYWludGVyLT5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpTbW9vdGhQaXhtYXBUcmFuc2Zv
cm0pOwogfQogCi12b2lkIFN0eWxlUGFpbnRlck1vYmlsZTo6ZHJhd0NoZWNrZXIoUVBhaW50ZXIq
IHBhaW50ZXIsIGludCBzaXplLCBRQ29sb3IgY29sb3IpIGNvbnN0CitTdHlsZVBhaW50ZXJNb2Jp
bGU6On5TdHlsZVBhaW50ZXJNb2JpbGUoKQogewotICAgIGludCBib3JkZXIgPSBxTWluKHFNYXgo
MSwgaW50KDAuMiAqIHNpemUpKSwgNik7Ci0gICAgaW50IGNoZWNrZXJTaXplID0gcU1heChzaXpl
IC0gMiAqIGJvcmRlciwgMyk7Ci0gICAgaW50IHdpZHRoID0gY2hlY2tlclNpemUgLyAzOwotICAg
IGludCBtaWRkbGUgPSBxTWF4KDMgKiBjaGVja2VyU2l6ZSAvIDcsIDMpOwotICAgIGludCB4ID0g
KChzaXplIC0gY2hlY2tlclNpemUpID4+IDEpOwotICAgIGludCB5ID0gKChzaXplIC0gY2hlY2tl
clNpemUpID4+IDEpICsgKGNoZWNrZXJTaXplIC0gd2lkdGggLSBtaWRkbGUpOwotICAgIFFWZWN0
b3I8UUxpbmVGPiBsaW5lcyhjaGVja2VyU2l6ZSArIDEpOwotICAgIHBhaW50ZXItPnNldFBlbihj
b2xvcik7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtaWRkbGU7ICsraSkgewotICAgICAgICBs
aW5lc1tpXSA9IFFMaW5lRih4LCB5LCB4LCB5ICsgd2lkdGgpOwotICAgICAgICArK3g7Ci0gICAg
ICAgICsreTsKLSAgICB9Ci0gICAgZm9yIChpbnQgaSA9IG1pZGRsZTsgaSA8PSBjaGVja2VyU2l6
ZTsgKytpKSB7Ci0gICAgICAgIGxpbmVzW2ldID0gUUxpbmVGKHgsIHksIHgsIHkgKyB3aWR0aCk7
Ci0gICAgICAgICsreDsKLSAgICAgICAgLS15OwotICAgIH0KLSAgICBwYWludGVyLT5kcmF3TGlu
ZXMobGluZXMuY29uc3REYXRhKCksIGxpbmVzLnNpemUoKSk7CisgICAgcGFpbnRlci0+c2V0UmVu
ZGVySGludHMoUVBhaW50ZXI6OlNtb290aFBpeG1hcFRyYW5zZm9ybSwgb2xkU21vb3RoUGl4bWFw
VHJhbnNmb3JtKTsKK30KKwordm9pZCBTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdDaGVja2FibGVC
YWNrZ3JvdW5kKFFQYWludGVyICpwYWludGVyLCBjb25zdCBRUmVjdCYgcmVjdCwgYm9vbCBjaGVj
a2VkLCBib29sIGVuYWJsZWQpIGNvbnN0Cit7CisgICAgUUJydXNoIGJydXNoOworICAgIGlmIChj
aGVja2VkICYmIGVuYWJsZWQpIHsKKyAgICAgICAgUUxpbmVhckdyYWRpZW50IGdyYWRpZW50Owor
ICAgICAgICBncmFkaWVudC5zZXRTdGFydChyZWN0LmJvdHRvbUxlZnQoKSk7CisgICAgICAgIGdy
YWRpZW50LnNldEZpbmFsU3RvcChyZWN0LnRvcExlZnQoKSk7CisgICAgICAgIGdyYWRpZW50LnNl
dENvbG9yQXQoMC4wLCBoaWdobGlnaHRDb2xvcik7CisgICAgICAgIGdyYWRpZW50LnNldENvbG9y
QXQoMS4wLCBoaWdobGlnaHRDb2xvci5saWdodGVyKCkpOworICAgICAgICBicnVzaCA9IGdyYWRp
ZW50OworICAgIH0gZWxzZQorICAgICAgICBicnVzaCA9IFF0OjpsaWdodEdyYXk7CisgICAgZHJh
d1JlY3Rhbmd1bGFyQ29udHJvbEJhY2tncm91bmQocGFpbnRlciwgYm9yZGVyUGVuLCByZWN0LCBi
cnVzaCk7Cit9CisKK1FTaXplIFN0eWxlUGFpbnRlck1vYmlsZTo6c2l6ZUZvclBhaW50ZXJTY2Fs
ZShjb25zdCBRUmVjdCAmcmVjdCkgY29uc3QKK3sKKyAgICBjb25zdCBRUmVjdCBtYXBwZWRSZWN0
ID0gcGFpbnRlci0+dHJhbnNmb3JtKCkubWFwUmVjdChyZWN0KTsKKyAgICByZXR1cm4gbWFwcGVk
UmVjdC5zaXplKCk7CiB9CiAKLVFQaXhtYXAgU3R5bGVQYWludGVyTW9iaWxlOjpmaW5kQ2hlY2tl
cihjb25zdCBRUmVjdCYgcmVjdCwgYm9vbCBkaXNhYmxlZCkgY29uc3QKK3ZvaWQgU3R5bGVQYWlu
dGVyTW9iaWxlOjpkcmF3Q2hlY2tlcihRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVJlY3QmIHJl
Y3QsIFFDb2xvciBjb2xvcikgY29uc3QKK3sKKyAgICBwYWludGVyLT5zZXRSZW5kZXJIaW50KFFQ
YWludGVyOjpBbnRpYWxpYXNpbmcsIHRydWUpOworICAgIFFQZW4gcGVuKFF0OjpkYXJrR3JheSk7
CisgICAgcGVuLnNldENvc21ldGljKHRydWUpOworICAgIHBhaW50ZXItPnNldFBlbihwZW4pOwor
ICAgIHBhaW50ZXItPnNjYWxlKHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgUVBh
aW50ZXJQYXRoIHBhdGg7CisgICAgcGF0aC5tb3ZlVG8oMC4xOCwgMC40Nyk7CisgICAgcGF0aC5s
aW5lVG8oMC4yNSwgMC40KTsKKyAgICBwYXRoLmxpbmVUbygwLjQsIDAuNTUpOworICAgIHBhdGgu
cXVhZFRvKDAuNjQsIDAuMjksIDAuNzgsIDAuMik7CisgICAgcGF0aC5saW5lVG8oMC44LCAwLjI1
KTsKKyAgICBwYXRoLnF1YWRUbygwLjUzLCAwLjU1LCAwLjQ1LCAwLjc1KTsKKyAgICBwYXRoLmNs
b3NlU3VicGF0aCgpOworICAgIHBhaW50ZXItPnNldEJydXNoKGNvbG9yKTsKKyAgICBwYWludGVy
LT5kcmF3UGF0aChwYXRoKTsKK30KKworLy8gQXNzdW1wdGlvbiBoZXJlIGlzIHRoYXQgd2UncmUg
d29ya2luZyB3aXRoIGEgc3F1YXJlIHNpemUKK1FQaXhtYXAgU3R5bGVQYWludGVyTW9iaWxlOjpm
aW5kQ2hlY2tCb3goY29uc3QgUVNpemUmIHNpemUsIGJvb2wgY2hlY2tlZCwgYm9vbCBlbmFibGVk
KSBjb25zdAogewotICAgIGludCBzaXplID0gcU1pbihyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0
KCkpOwogICAgIFFQaXhtYXAgcmVzdWx0OwotICAgIHN0YXRpYyBjb25zdCBRU3RyaW5nIHByZWZp
eCA9IFFMYXRpbjFTdHJpbmcoIiRxdC1tYWVtbzUtbW9iaWxlLXRoZW1lLWNoZWNrZXItIik7Ci0g
ICAgUVN0cmluZyBrZXkgPSBwcmVmaXggKyBRU3RyaW5nOjpudW1iZXIoc2l6ZSkgKyBRTGF0aW4x
U3RyaW5nKCItIikgKyAoZGlzYWJsZWQgPyBRTGF0aW4xU3RyaW5nKCJkaXNhYmxlZCIpIDogUUxh
dGluMVN0cmluZygiZW5hYmxlZCIpKTsKLSAgICBpZiAoIVFQaXhtYXBDYWNoZTo6ZmluZChrZXks
IHJlc3VsdCkpIHsKLSAgICAgICAgcmVzdWx0ID0gUVBpeG1hcChzaXplLCBzaXplKTsKKyAgICBz
dGF0aWMgY29uc3QgUVN0cmluZyBwcmVmaXggPSBRTGF0aW4xU3RyaW5nKCIkcXQtd2Via2l0LW1v
YmlsZS10aGVtZS1jaGVja2JveC0iKTsKKyAgICBRU3RyaW5nIGtleSA9IHByZWZpeCArIFFTdHJp
bmc6Om51bWJlcihzaXplLndpZHRoKCkpICsgUUxhdGluMVN0cmluZygiLSIpICsgKGVuYWJsZWQg
PyBRTGF0aW4xU3RyaW5nKCJvbiIpIDogUUxhdGluMVN0cmluZygib2ZmIikpCisgICAgICAgICAg
ICAgICAgICArIChjaGVja2VkID8gUUxhdGluMVN0cmluZygiLWNoZWNrZWQiKSA6IFFMYXRpbjFT
dHJpbmcoIiIpKTsKKyAgICBpZiAodHJ1ZSB8fCAhUVBpeG1hcENhY2hlOjpmaW5kKGtleSwgcmVz
dWx0KSkgeworICAgICAgICByZXN1bHQgPSBRUGl4bWFwKHNpemUpOwogICAgICAgICByZXN1bHQu
ZmlsbChRdDo6dHJhbnNwYXJlbnQpOwogICAgICAgICBRUGFpbnRlciBwYWludGVyKCZyZXN1bHQp
OwotICAgICAgICBkcmF3Q2hlY2tlcigmcGFpbnRlciwgc2l6ZSwgZGlzYWJsZWQgPyBRdDo6bGln
aHRHcmF5IDogUXQ6OmRhcmtHcmF5KTsKKyAgICAgICAgUVJlY3QgcmVjdChRUG9pbnQoMCwgMCks
IHNpemUpOworICAgICAgICBkcmF3Q2hlY2thYmxlQmFja2dyb3VuZCgmcGFpbnRlciwgcmVjdCwg
Y2hlY2tlZCwgZW5hYmxlZCk7CisgICAgICAgIGlmIChjaGVja2VkIHx8ICFlbmFibGVkKQorICAg
ICAgICAgICAgZHJhd0NoZWNrZXIoJnBhaW50ZXIsIHJlY3QsIGVuYWJsZWQgPyBRdDo6d2hpdGUg
OiBRdDo6Z3JheSk7CiAgICAgICAgIFFQaXhtYXBDYWNoZTo6aW5zZXJ0KGtleSwgcmVzdWx0KTsK
ICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBTdHlsZVBhaW50ZXJNb2JpbGU6
OmRyYXdSYWRpbyhRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVNpemUmIHNpemUsIGJvb2wgY2hl
Y2tlZCwgUUNvbG9yIGNvbG9yKSBjb25zdAorLy8gQXNzdW1wdGlvbiBoZXJlIGlzIHRoYXQgd2Un
cmUgd29ya2luZyB3aXRoIGEgc3F1YXJlIHNpemUKK3ZvaWQgU3R5bGVQYWludGVyTW9iaWxlOjpk
cmF3UmFkaW8oUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFTaXplJiBzaXplLCBib29sIGNoZWNr
ZWQsIGJvb2wgZW5hYmxlZCkgY29uc3QKIHsKLSAgICBwYWludGVyLT5zZXRSZW5kZXJIaW50KFFQ
YWludGVyOjpBbnRpYWxpYXNpbmcsIHRydWUpOworICAgIFFSZWN0IHJlY3QoUVBvaW50KDAsIDAp
LCBzaXplKTsKIAotICAgIC8vIGdldCBtaW5vciBzaXplIHRvIGRvIG5vdCBwYWludCBhIHdpZGUg
ZWxpcHNlCi0gICAgcXJlYWwgc3F1YXJlU2l6ZSA9IHFNaW4oc2l6ZS53aWR0aCgpLCBzaXplLmhl
aWdodCgpKTsKLSAgICAvLyBkZWZsYXRlIG9uZSBwaXhlbAotICAgIFFSZWN0IHJlY3QgPSBRUmVj
dChRUG9pbnQoMSwgMSksIFFTaXplKHNxdWFyZVNpemUgLSAyLCBzcXVhcmVTaXplIC0gMikpOwot
ICAgIGNvbnN0IFFQb2ludCBjZW50ZXJHcmFkaWVudChyZWN0LmJvdHRvbVJpZ2h0KCkgKiAwLjcp
OwotCi0gICAgUVJhZGlhbEdyYWRpZW50IHJhZGlhbEdyYWRpZW50KGNlbnRlckdyYWRpZW50LCBj
ZW50ZXJHcmFkaWVudC54KCkgLSAxKTsKLSAgICByYWRpYWxHcmFkaWVudC5zZXRDb2xvckF0KDAu
MCwgUXQ6OndoaXRlKTsKLSAgICByYWRpYWxHcmFkaWVudC5zZXRDb2xvckF0KDAuNiwgUXQ6Ondo
aXRlKTsKLSAgICByYWRpYWxHcmFkaWVudC5zZXRDb2xvckF0KDEuMCwgY29sb3IpOwotCi0gICAg
cGFpbnRlci0+c2V0UGVuKGNvbG9yKTsKLSAgICBwYWludGVyLT5zZXRCcnVzaChjb2xvcik7Ci0g
ICAgcGFpbnRlci0+ZHJhd0VsbGlwc2UocmVjdCk7Ci0gICAgcGFpbnRlci0+c2V0QnJ1c2gocmFk
aWFsR3JhZGllbnQpOwotICAgIHBhaW50ZXItPmRyYXdFbGxpcHNlKHJlY3QpOwotCi0gICAgaW50
IGJvcmRlciA9IDAuMSAqIChyZWN0LndpZHRoKCkgKyByZWN0LmhlaWdodCgpKTsKLSAgICBib3Jk
ZXIgPSBxTWluKHFNYXgoMiwgYm9yZGVyKSwgMTApOworICAgIGRyYXdDaGVja2FibGVCYWNrZ3Jv
dW5kKHBhaW50ZXIsIHJlY3QsIGNoZWNrZWQsIGVuYWJsZWQpOworICAgIGNvbnN0IGludCBib3Jk
ZXIgPSBzaXplLndpZHRoKCkvIDQ7CiAgICAgcmVjdC5hZGp1c3QoYm9yZGVyLCBib3JkZXIsIC1i
b3JkZXIsIC1ib3JkZXIpOwotICAgIGlmIChjaGVja2VkKSB7Ci0gICAgICAgIHBhaW50ZXItPnNl
dFBlbihRdDo6Tm9QZW4pOwotICAgICAgICBwYWludGVyLT5zZXRCcnVzaChjb2xvcik7Ci0gICAg
ICAgIHBhaW50ZXItPmRyYXdFbGxpcHNlKHJlY3QpOwotICAgIH0KKyAgICBkcmF3UmVjdGFuZ3Vs
YXJDb250cm9sQmFja2dyb3VuZChwYWludGVyLCBib3JkZXJQZW4sIHJlY3QsIGVuYWJsZWQgPyBR
dDo6d2hpdGUgOiBRdDo6Z3JheSk7CiB9CiAKLVFQaXhtYXAgU3R5bGVQYWludGVyTW9iaWxlOjpm
aW5kUmFkaW8oY29uc3QgUVNpemUmIHNpemUsIGJvb2wgY2hlY2tlZCwgYm9vbCBkaXNhYmxlZCkg
Y29uc3QKK1FQaXhtYXAgU3R5bGVQYWludGVyTW9iaWxlOjpmaW5kUmFkaW8oY29uc3QgUVNpemUm
IHNpemUsIGJvb2wgY2hlY2tlZCwgYm9vbCBlbmFibGVkKSBjb25zdAogewogICAgIFFQaXhtYXAg
cmVzdWx0OwotICAgIHN0YXRpYyBjb25zdCBRU3RyaW5nIHByZWZpeCA9IFFMYXRpbjFTdHJpbmco
IiRxdC1tYWVtbzUtbW9iaWxlLXRoZW1lLXJhZGlvLSIpOwotICAgIFFTdHJpbmcga2V5ID0gcHJl
Zml4ICsgUVN0cmluZzo6bnVtYmVyKHNpemUud2lkdGgoKSkgKyBRTGF0aW4xU3RyaW5nKCItIikg
KyBRU3RyaW5nOjpudW1iZXIoc2l6ZS5oZWlnaHQoKSkgKyBRTGF0aW4xU3RyaW5nKCItIikKLSAg
ICAgICAgKyAoZGlzYWJsZWQgPyBRTGF0aW4xU3RyaW5nKCJkaXNhYmxlZCIpIDogUUxhdGluMVN0
cmluZygiZW5hYmxlZCIpKSArIChjaGVja2VkID8gUUxhdGluMVN0cmluZygiLWNoZWNrZWQiKSA6
IFFMYXRpbjFTdHJpbmcoIiIpKTsKKyAgICBzdGF0aWMgY29uc3QgUVN0cmluZyBwcmVmaXggPSBR
TGF0aW4xU3RyaW5nKCIkcXQtd2Via2l0LW1vYmlsZS10aGVtZS1yYWRpby0iKTsKKyAgICBRU3Ry
aW5nIGtleSA9IHByZWZpeCArIFFTdHJpbmc6Om51bWJlcihzaXplLndpZHRoKCkpICsgUUxhdGlu
MVN0cmluZygiLSIpICsgKGVuYWJsZWQgPyBRTGF0aW4xU3RyaW5nKCJvbiIpIDogUUxhdGluMVN0
cmluZygib2ZmIikpCisgICAgICAgICAgICAgICAgICArIChjaGVja2VkID8gUUxhdGluMVN0cmlu
ZygiLWNoZWNrZWQiKSA6IFFMYXRpbjFTdHJpbmcoIiIpKTsKICAgICBpZiAoIVFQaXhtYXBDYWNo
ZTo6ZmluZChrZXksIHJlc3VsdCkpIHsKICAgICAgICAgcmVzdWx0ID0gUVBpeG1hcChzaXplKTsK
ICAgICAgICAgcmVzdWx0LmZpbGwoUXQ6OnRyYW5zcGFyZW50KTsKICAgICAgICAgUVBhaW50ZXIg
cGFpbnRlcigmcmVzdWx0KTsKLSAgICAgICAgZHJhd1JhZGlvKCZwYWludGVyLCBzaXplLCBjaGVj
a2VkLCBkaXNhYmxlZCA/IFF0OjpsaWdodEdyYXkgOiBRdDo6ZGFya0dyYXkpOworICAgICAgICBk
cmF3UmFkaW8oJnBhaW50ZXIsIHNpemUsIGNoZWNrZWQsIGVuYWJsZWQpOwogICAgICAgICBRUGl4
bWFwQ2FjaGU6Omluc2VydChrZXksIHJlc3VsdCk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7
CkBAIC0xODYsMjAxICsyMTAsMjAxIEBAIFFQaXhtYXAgU3R5bGVQYWludGVyTW9iaWxlOjpmaW5k
UmFkaW8oY29uc3QgUVNpemUmIHNpemUsIGJvb2wgY2hlY2tlZCwgYm9vbCBkaXNhCiAKIHZvaWQg
U3R5bGVQYWludGVyTW9iaWxlOjpkcmF3TXVsdGlwbGVDb21ib0J1dHRvbihRUGFpbnRlciogcGFp
bnRlciwgY29uc3QgUVNpemUmIHNpemUsIFFDb2xvciBjb2xvcikgY29uc3QKIHsKLSAgICBpbnQg
cmVjdFdpZHRoID0gc2l6ZS53aWR0aCgpIC0gMTsKLSAgICBpbnQgd2lkdGggPSBxTWF4KDIsIHJl
Y3RXaWR0aCA+PiAzKTsKLSAgICBpbnQgZGlzdGFuY2UgPSAocmVjdFdpZHRoIC0gMyAqIHdpZHRo
KSA+PiAxOwotICAgIGludCB0b3AgPSAoc2l6ZS5oZWlnaHQoKSAtIHdpZHRoKSA+PiAxOworLy8g
ICAgcGFpbnRlci0+ZmlsbFJlY3QoUVJlY3QoUVBvaW50KDAsMCksIHNpemUpLCBRdDo6cmVkKTsK
KyAgICBjb25zdCBpbnQgaGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKSAtIDE7CiAKICAgICBwYWludGVy
LT5zZXRQZW4oY29sb3IpOwogICAgIHBhaW50ZXItPnNldEJydXNoKGNvbG9yKTsKIAotICAgIHBh
aW50ZXItPmRyYXdSZWN0KDAsIHRvcCwgd2lkdGgsIHdpZHRoKTsKLSAgICBwYWludGVyLT5kcmF3
UmVjdCh3aWR0aCArIGRpc3RhbmNlLCB0b3AsIHdpZHRoLCB3aWR0aCk7Ci0gICAgcGFpbnRlci0+
ZHJhd1JlY3QoMiAqICh3aWR0aCArIGRpc3RhbmNlKSwgdG9wLCB3aWR0aCwgd2lkdGgpOworICAg
IHBhaW50ZXItPmRyYXdFbGxpcHNlKDAsIDAsIGhlaWdodCwgaGVpZ2h0KTsKKyAgICBwYWludGVy
LT5kcmF3RWxsaXBzZShoZWlnaHQgKiAyLCAwLCBoZWlnaHQsIGhlaWdodCk7CisgICAgcGFpbnRl
ci0+ZHJhd0VsbGlwc2UoNCAqIGhlaWdodCwgMCwgaGVpZ2h0LCBoZWlnaHQpOwogfQogCiB2b2lk
IFN0eWxlUGFpbnRlck1vYmlsZTo6ZHJhd1NpbXBsZUNvbWJvQnV0dG9uKFFQYWludGVyKiBwYWlu
dGVyLCBjb25zdCBRU2l6ZSYgc2l6ZSwgUUNvbG9yIGNvbG9yKSBjb25zdAogewotICAgIGludCB3
aWR0aCA9IHNpemUud2lkdGgoKTsKLSAgICBpbnQgbWlkbGUgPSB3aWR0aCA+PiAxOwotICAgIFFW
ZWN0b3I8UUxpbmU+IGxpbmVzKHdpZHRoICsgMSk7Ci0KLSAgICBmb3IgKGludCB4ID0gMCwgeSA9
IDA7ICB4IDwgbWlkbGU7IHgrKywgeSsrKSB7Ci0gICAgICAgIGxpbmVzW3hdID0gUUxpbmUoeCwg
eSwgeCwgeSArIDIpOwotICAgICAgICBsaW5lc1t4ICsgbWlkbGVdID0gUUxpbmUod2lkdGggLSB4
IC0gMSwgeSwgd2lkdGggLSB4IC0gMSwgeSArIDIpOworICAgIGNvbnN0IGludCB3aWR0aCA9IHNp
emUud2lkdGgoKTsKKyAgICBjb25zdCBpbnQgbWlkZGxlID0gd2lkdGggLyAyOworICAgIGNvbnN0
IGludCB2Q2VudGVyID0gc2l6ZS5oZWlnaHQoKSAvIDI7CisgICAgY29uc3QgaW50IHNwYWNpbmcg
PSAxICsgc2l6ZS5oZWlnaHQoKSAvIDE1OworCisgICAgUVZlY3RvcjxRTGluZT4gbGluZXMoMiAq
IHdpZHRoKTsKKyAgICBpbnQgbGVuZ3RoID0gMDsKKyAgICBmb3IgKGludCB4ID0gMDsgeCA8IG1p
ZGRsZSA7IHgrKykgeworICAgICAgICBsZW5ndGgrKzsKKyAgICAgICAgbGluZXNbeF0gPSBRTGlu
ZSh4LCB2Q2VudGVyICsgc3BhY2luZywgeCwgdkNlbnRlciArIHNwYWNpbmcgKyBsZW5ndGgpOwor
ICAgICAgICBsaW5lc1syICogd2lkdGggLSB4IC0gMV0gPSBRTGluZSh4LCB2Q2VudGVyIC0gc3Bh
Y2luZywgeCwgdkNlbnRlciAtIHNwYWNpbmcgLSBsZW5ndGgpOworICAgIH0KKyAgICBmb3IgKGlu
dCB4ID0gbWlkZGxlOyB4IDwgd2lkdGg7IHgrKykgeworICAgICAgICBsaW5lc1t4XSA9IFFMaW5l
KHgsIHZDZW50ZXIgKyBzcGFjaW5nLCB4LCB2Q2VudGVyICsgc3BhY2luZyArIGxlbmd0aCk7Cisg
ICAgICAgIGxpbmVzWzIgKiB3aWR0aCAtIHggLSAxXSA9IFFMaW5lKHgsIHZDZW50ZXIgLSBzcGFj
aW5nLCB4LCB2Q2VudGVyIC0gc3BhY2luZyAtIGxlbmd0aCk7CisgICAgICAgIGxlbmd0aC0tOwog
ICAgIH0KLSAgICAvLyBKdXN0IHRvIGVuc3VyZSB0aGUgbGluZXMnIGludGVyc2VjdGlvbi4KLSAg
ICBsaW5lc1t3aWR0aF0gPSBRTGluZShtaWRsZSwgbWlkbGUsIG1pZGxlLCBtaWRsZSArIDIpOwog
CiAgICAgcGFpbnRlci0+c2V0UGVuKGNvbG9yKTsKICAgICBwYWludGVyLT5zZXRCcnVzaChjb2xv
cik7CiAgICAgcGFpbnRlci0+ZHJhd0xpbmVzKGxpbmVzKTsKIH0KIAotUVNpemUgU3R5bGVQYWlu
dGVyTW9iaWxlOjpnZXRCdXR0b25JbWFnZVNpemUoY29uc3QgUVNpemUmIGJ1dHRvblNpemUpIGNv
bnN0CitRU2l6ZSBTdHlsZVBhaW50ZXJNb2JpbGU6OmdldEJ1dHRvbkltYWdlU2l6ZShjb25zdCBR
U2l6ZSYgYnV0dG9uU2l6ZSwgYm9vbCBtdWx0aXBsZSkgY29uc3QKIHsKLSAgICBjb25zdCBpbnQg
Ym9yZGVyID0gcU1heCgzLCBidXR0b25TaXplLndpZHRoKCkgPj4gMykgPDwgMTsKLQotICAgIGlu
dCB3aWR0aCA9IGJ1dHRvblNpemUud2lkdGgoKSAtIGJvcmRlcjsKLSAgICBpbnQgaGVpZ2h0ID0g
YnV0dG9uU2l6ZS5oZWlnaHQoKSAtIGJvcmRlcjsKLQotICAgIGlmICh3aWR0aCA8IDAgfHwgaGVp
Z2h0IDwgMCkKLSAgICAgICAgcmV0dXJuIFFTaXplKCk7CisgICAgaWYgKG11bHRpcGxlKQorICAg
ICAgICByZXR1cm4gUVNpemUoYnV0dG9uU2l6ZS53aWR0aCgpLCBidXR0b25TaXplLndpZHRoKCkg
LyA1KTsKIAotICAgIGlmIChoZWlnaHQgPj0gKHdpZHRoID4+IDEpKQotICAgICAgICB3aWR0aCA9
IHdpZHRoID4+IDEgPDwgMTsKLSAgICBlbHNlCi0gICAgICAgIHdpZHRoID0gaGVpZ2h0IDw8IDE7
Ci0KLSAgICByZXR1cm4gUVNpemUod2lkdGggKyAxLCB3aWR0aCk7CisgICAgY29uc3QgaW50IGhl
aWdodCA9IGJ1dHRvblNpemUuaGVpZ2h0KCkgLyAyICsgZnJhbWVXaWR0aDsKKyAgICBjb25zdCBp
bnQgd2lkdGggPSBoZWlnaHQgLSAoMiAqICgxICsgaGVpZ2h0IC8gMTUpKSAtIDE7CisgICAgcmV0
dXJuIFFTaXplKHdpZHRoICwgaGVpZ2h0KTsKIH0KIAotUVBpeG1hcCBTdHlsZVBhaW50ZXJNb2Jp
bGU6OmZpbmRDb21ib0J1dHRvbihjb25zdCBRU2l6ZSYgc2l6ZSwgYm9vbCBtdWx0aXBsZSwgYm9v
bCBkaXNhYmxlZCkgY29uc3QKK1FQaXhtYXAgU3R5bGVQYWludGVyTW9iaWxlOjpmaW5kQ29tYm9C
dXR0b24oY29uc3QgUVNpemUmIHNpemUsIGJvb2wgbXVsdGlwbGUsIGJvb2wgZW5hYmxlZCkgY29u
c3QKIHsKLSAgICBRUGl4bWFwIHJlc3VsdDsKLSAgICBRU2l6ZSBpbWFnZVNpemUgPSBnZXRCdXR0
b25JbWFnZVNpemUoc2l6ZSk7Ci0KLSAgICBpZiAoaW1hZ2VTaXplLmlzTnVsbCgpKQorICAgIGlm
IChzaXplLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gUVBpeG1hcCgpOwotICAgIHN0YXRpYyBj
b25zdCBRU3RyaW5nIHByZWZpeCA9IFFMYXRpbjFTdHJpbmcoIiRxdC1tYWVtbzUtbW9iaWxlLXRo
ZW1lLWNvbWJvLSIpOworICAgIHN0YXRpYyBjb25zdCBRU3RyaW5nIHByZWZpeCA9IFFMYXRpbjFT
dHJpbmcoIiRxdC13ZWJraXQtbW9iaWxlLXRoZW1lLWNvbWJvLSIpOworICAgIFFQaXhtYXAgcmVz
dWx0OwogICAgIFFTdHJpbmcga2V5ID0gcHJlZml4ICsgKG11bHRpcGxlID8gUUxhdGluMVN0cmlu
ZygibXVsdGlwbGUtIikgOiBRTGF0aW4xU3RyaW5nKCJzaW1wbGUtIikpCi0gICAgICAgICsgUVN0
cmluZzo6bnVtYmVyKGltYWdlU2l6ZS53aWR0aCgpKSArIFFMYXRpbjFTdHJpbmcoIi0iKSArIFFT
dHJpbmc6Om51bWJlcihpbWFnZVNpemUuaGVpZ2h0KCkpCi0gICAgICAgICsgUUxhdGluMVN0cmlu
ZygiLSIpICsgKGRpc2FibGVkID8gUUxhdGluMVN0cmluZygiZGlzYWJsZWQiKSA6IFFMYXRpbjFT
dHJpbmcoImVuYWJsZWQiKSk7CisgICAgICAgICsgUVN0cmluZzo6bnVtYmVyKHNpemUud2lkdGgo
KSkgKyBRTGF0aW4xU3RyaW5nKCItIikgKyBRU3RyaW5nOjpudW1iZXIoc2l6ZS5oZWlnaHQoKSkK
KyAgICAgICAgKyBRTGF0aW4xU3RyaW5nKCItIikgKyAoZW5hYmxlZCA/IFFMYXRpbjFTdHJpbmco
Im9uIikgOiBRTGF0aW4xU3RyaW5nKCJvZmYiKSk7CisKICAgICBpZiAoIVFQaXhtYXBDYWNoZTo6
ZmluZChrZXksIHJlc3VsdCkpIHsKLSAgICAgICAgcmVzdWx0ID0gUVBpeG1hcChpbWFnZVNpemUp
OworICAgICAgICByZXN1bHQgPSBRUGl4bWFwKHNpemUpOwogICAgICAgICByZXN1bHQuZmlsbChR
dDo6dHJhbnNwYXJlbnQpOwogICAgICAgICBRUGFpbnRlciBwYWludGVyKCZyZXN1bHQpOwogICAg
ICAgICBpZiAobXVsdGlwbGUpCi0gICAgICAgICAgICBkcmF3TXVsdGlwbGVDb21ib0J1dHRvbigm
cGFpbnRlciwgaW1hZ2VTaXplLCBkaXNhYmxlZCA/IFF0OjpsaWdodEdyYXkgOiBRdDo6ZGFya0dy
YXkpOworICAgICAgICAgICAgZHJhd011bHRpcGxlQ29tYm9CdXR0b24oJnBhaW50ZXIsIHNpemUs
IGVuYWJsZWQgPyBkYXJrQ29sb3IgOiBRdDo6bGlnaHRHcmF5KTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgZHJhd1NpbXBsZUNvbWJvQnV0dG9uKCZwYWludGVyLCBpbWFnZVNpemUsIGRpc2Fi
bGVkID8gUXQ6OmxpZ2h0R3JheSA6IFF0OjpkYXJrR3JheSk7CisgICAgICAgICAgICBkcmF3U2lt
cGxlQ29tYm9CdXR0b24oJnBhaW50ZXIsIHNpemUsIGVuYWJsZWQgPyBkYXJrQ29sb3IgOiBRdDo6
bGlnaHRHcmF5KTsKICAgICAgICAgUVBpeG1hcENhY2hlOjppbnNlcnQoa2V5LCByZXN1bHQpOwog
ICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFN0eWxlUGFpbnRlck1vYmlsZTo6
ZHJhd0xpbmVFZGl0KGNvbnN0IFFSZWN0JiByZWN0LCBib29sIHN1bmtlbiwgYm9vbCBlbmFibGVk
KQordm9pZCBTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdMaW5lRWRpdChjb25zdCBRUmVjdCYgcmVj
dCwgYm9vbCBmb2N1c2VkLCBib29sIGVuYWJsZWQpCiB7Ci0gICAgUVBlbiBwZW4oUXQ6OmRhcmtH
cmF5LCAxLjAsIFF0OjpTb2xpZExpbmUsIFF0OjpSb3VuZENhcCwgUXQ6OlJvdW5kSm9pbik7Ci0g
ICAgcGFpbnRlci0+c2V0UGVuKHBlbik7CisgICAgZHJhd1JlY3Rhbmd1bGFyQ29udHJvbEJhY2tn
cm91bmQocGFpbnRlciwgYm9yZGVyUGVuLCByZWN0LCBRdDo6d2hpdGUpOwogCi0gICAgaWYgKHN1
bmtlbikgewotICAgICAgICBkcmF3UmVjdGFuZ3VsYXJDb250cm9sQmFja2dyb3VuZChwYWludGVy
LCBwZW4sIHJlY3QsIFFCcnVzaChRdDo6ZGFya0dyYXkpKTsKLSAgICAgICAgcmV0dXJuOworICAg
IGlmIChmb2N1c2VkKSB7CisgICAgICAgIFFQZW4gZm9jdXNQZW4oaGlnaGxpZ2h0Q29sb3IsIGZs
b2F0KHJlY3QuaGVpZ2h0KCkgLyAyNi4wKSwgUXQ6OlNvbGlkTGluZSwgUXQ6OlJvdW5kQ2FwLCBR
dDo6Um91bmRKb2luKTsKKyAgICAgICAgY29uc3QgaW50IGJvcmRlciA9IGZvY3VzUGVuLndpZHRo
KCkgLSAxOworICAgICAgICBkcmF3UmVjdGFuZ3VsYXJDb250cm9sQmFja2dyb3VuZChwYWludGVy
LCBmb2N1c1BlbiwgcmVjdC5hZGp1c3RlZCgtYm9yZGVyLCAtYm9yZGVyLCBib3JkZXIsIGJvcmRl
ciksIFF0OjpOb0JydXNoKTsKICAgICB9Ci0KLSAgICBRTGluZWFyR3JhZGllbnQgbGluZWFyR3Jh
ZGllbnQ7Ci0gICAgaWYgKCFlbmFibGVkKSB7Ci0gICAgICAgIGxpbmVhckdyYWRpZW50LnNldFN0
YXJ0KHJlY3QudG9wTGVmdCgpKTsKLSAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0RmluYWxTdG9w
KHJlY3QuYm90dG9tTGVmdCgpKTsKLSAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgw
LjAsIFF0OjpsaWdodEdyYXkpOwotICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDEu
MCwgUXQ6OndoaXRlKTsKLSAgICB9IGVsc2UgewotICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRT
dGFydChyZWN0LnRvcExlZnQoKSk7Ci0gICAgICAgIGxpbmVhckdyYWRpZW50LnNldEZpbmFsU3Rv
cChRUG9pbnQocmVjdC50b3BMZWZ0KCkueCgpLAotICAgICAgICAgICAgICAgICAgICByZWN0LnRv
cExlZnQoKS55KCkgKyAvKiBvZmZzZXQgbGltaXQgZm9yIGdyYWRpZW50ICovIDIwKSk7Ci0gICAg
ICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQoMC4wLCBRdDo6ZGFya0dyYXkpOwotICAgICAg
ICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDAuMzUsIFF0Ojp3aGl0ZSk7Ci0gICAgfQotCi0g
ICAgZHJhd1JlY3Rhbmd1bGFyQ29udHJvbEJhY2tncm91bmQocGFpbnRlciwgcGVuLCByZWN0LCBs
aW5lYXJHcmFkaWVudCk7CiB9CiAKIHZvaWQgU3R5bGVQYWludGVyTW9iaWxlOjpkcmF3Q2hlY2tC
b3goY29uc3QgUVJlY3QmIHJlY3QsIGJvb2wgY2hlY2tlZCwgYm9vbCBlbmFibGVkKQogewotICAg
IFFMaW5lYXJHcmFkaWVudCBsaW5lYXJHcmFkaWVudChyZWN0LnRvcExlZnQoKSwgcmVjdC5ib3R0
b21MZWZ0KCkpOwotICAgIGlmICghZW5hYmxlZCkgewotICAgICAgICBsaW5lYXJHcmFkaWVudC5z
ZXRDb2xvckF0KDAuMCwgUXQ6OmxpZ2h0R3JheSk7Ci0gICAgICAgIGxpbmVhckdyYWRpZW50LnNl
dENvbG9yQXQoMC41LCBRdDo6d2hpdGUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGxpbmVhckdy
YWRpZW50LnNldENvbG9yQXQoMC4wLCBRdDo6ZGFya0dyYXkpOwotICAgICAgICBsaW5lYXJHcmFk
aWVudC5zZXRDb2xvckF0KDAuNSwgUXQ6OndoaXRlKTsKLSAgICB9Ci0KLSAgICBwYWludGVyLT5z
ZXRQZW4oUVBlbihlbmFibGVkID8gUXQ6OmRhcmtHcmF5IDogUXQ6OmxpZ2h0R3JheSkpOwotICAg
IHBhaW50ZXItPnNldEJydXNoKGxpbmVhckdyYWRpZW50KTsKLSAgICBwYWludGVyLT5kcmF3UmVj
dChyZWN0KTsKLSAgICBjb25zdCBRUmVjdCByID0gcmVjdC5hZGp1c3RlZCgxLCAxLCAtMSwgLTEp
OwotCi0gICAgaWYgKCFjaGVja2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBRUGl4bWFwIGNo
ZWNrZXIgPSBmaW5kQ2hlY2tlcihyLCAhZW5hYmxlZCk7Ci0gICAgaWYgKGNoZWNrZXIuaXNOdWxs
KCkpCisgICAgY29uc3QgUVJlY3Qgc3F1YXJlID0gc3F1YXJlRnJvbVJlY3QocmVjdCk7CisgICAg
UVBpeG1hcCBjaGVja0JveCA9IGZpbmRDaGVja0JveChzaXplRm9yUGFpbnRlclNjYWxlKHNxdWFy
ZSksIGNoZWNrZWQsIGVuYWJsZWQpOworICAgIGlmIChjaGVja0JveC5pc051bGwoKSkKICAgICAg
ICAgcmV0dXJuOwotCi0gICAgaW50IHggPSAoci53aWR0aCgpIC0gY2hlY2tlci53aWR0aCgpKSA+
PiAxOwotICAgIGludCB5ID0gKHIuaGVpZ2h0KCkgLSBjaGVja2VyLmhlaWdodCgpKSA+PiAxOwot
ICAgIHBhaW50ZXItPmRyYXdQaXhtYXAoci54KCkgKyB4LCByLnkoKSArIHksIGNoZWNrZXIpOwor
ICAgIHBhaW50ZXItPmRyYXdQaXhtYXAoc3F1YXJlLCBjaGVja0JveCk7CiB9CiAKIHZvaWQgU3R5
bGVQYWludGVyTW9iaWxlOjpkcmF3UmFkaW9CdXR0b24oY29uc3QgUVJlY3QmIHJlY3QsIGJvb2wg
Y2hlY2tlZCwgYm9vbCBlbmFibGVkKQogewotICAgIFFQaXhtYXAgcmFkaW8gPSBmaW5kUmFkaW8o
cmVjdC5zaXplKCksIGNoZWNrZWQsICFlbmFibGVkKTsKKyAgICBjb25zdCBRUmVjdCBzcXVhcmUg
PSBzcXVhcmVGcm9tUmVjdChyZWN0KTsKKyAgICBRUGl4bWFwIHJhZGlvID0gZmluZFJhZGlvKHNp
emVGb3JQYWludGVyU2NhbGUoc3F1YXJlKSwgY2hlY2tlZCwgZW5hYmxlZCk7CiAgICAgaWYgKHJh
ZGlvLmlzTnVsbCgpKQogICAgICAgICByZXR1cm47Ci0gICAgcGFpbnRlci0+ZHJhd1BpeG1hcChy
ZWN0LngoKSwgcmVjdC55KCksIHJhZGlvKTsKKyAgICBwYWludGVyLT5kcmF3UGl4bWFwKHNxdWFy
ZSwgcmFkaW8pOwogfQogCiB2b2lkIFN0eWxlUGFpbnRlck1vYmlsZTo6ZHJhd1B1c2hCdXR0b24o
Y29uc3QgUVJlY3QmIHJlY3QsIGJvb2wgc3Vua2VuLCBib29sIGVuYWJsZWQpCiB7Ci0gICAgUVBl
biBwZW4oUXQ6OmRhcmtHcmF5LCAxLjAsIFF0OjpTb2xpZExpbmUsIFF0OjpSb3VuZENhcCwgUXQ6
OlJvdW5kSm9pbik7Ci0gICAgcGFpbnRlci0+c2V0UGVuKHBlbik7CisgICAgZHJhd1JlY3Rhbmd1
bGFyQ29udHJvbEJhY2tncm91bmQocGFpbnRlciwgUXQ6Ok5vUGVuLCByZWN0LmFkanVzdGVkKDAs
IDEsIDAsIDEpLCBzaGFkb3dDb2xvcik7CiAKLSAgICBpZiAoc3Vua2VuKSB7Ci0gICAgICAgIGRy
YXdSZWN0YW5ndWxhckNvbnRyb2xCYWNrZ3JvdW5kKHBhaW50ZXIsIHBlbiwgcmVjdCwgUUJydXNo
KFF0OjpkYXJrR3JheSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUUxpbmVhckdy
YWRpZW50IGxpbmVhckdyYWRpZW50OwotICAgIGlmICghZW5hYmxlZCkgeworICAgIFFCcnVzaCBi
cnVzaDsKKyAgICBpZiAoZW5hYmxlZCAmJiAhc3Vua2VuKSB7CisgICAgICAgIFFMaW5lYXJHcmFk
aWVudCBsaW5lYXJHcmFkaWVudDsKICAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0U3RhcnQocmVj
dC5ib3R0b21MZWZ0KCkpOwogICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRGaW5hbFN0b3AocmVj
dC50b3BMZWZ0KCkpOwotICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDAuMCwgUXQ6
OmdyYXkpOworICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDAuMCwgYnV0dG9uR3Jh
ZGllbnRCb3R0b20pOwogICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDEuMCwgUXQ6
OndoaXRlKTsKLSAgICB9IGVsc2UgeworICAgICAgICBicnVzaCA9IGxpbmVhckdyYWRpZW50Owor
ICAgIH0gZWxzZSBpZiAoIWVuYWJsZWQpCisgICAgICAgIGJydXNoID0gUUNvbG9yKDI0MSwgMjQy
LCAyNDMpOworICAgIGVsc2UgeyAvLyBzdW5rZW4KKyAgICAgICAgUUxpbmVhckdyYWRpZW50IGxp
bmVhckdyYWRpZW50OwogICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRTdGFydChyZWN0LmJvdHRv
bUxlZnQoKSk7Ci0gICAgICAgIGxpbmVhckdyYWRpZW50LnNldEZpbmFsU3RvcChRUG9pbnQocmVj
dC5ib3R0b21MZWZ0KCkueCgpLAotICAgICAgICAgICAgICAgICAgICByZWN0LmJvdHRvbUxlZnQo
KS55KCkgLSAvKiBvZmZzZXQgbGltaXQgZm9yIGdyYWRpZW50ICovIDIwKSk7Ci0gICAgICAgIGxp
bmVhckdyYWRpZW50LnNldENvbG9yQXQoMC4wLCBRdDo6Z3JheSk7Ci0gICAgICAgIGxpbmVhckdy
YWRpZW50LnNldENvbG9yQXQoMC40LCBRdDo6d2hpdGUpOworICAgICAgICBsaW5lYXJHcmFkaWVu
dC5zZXRGaW5hbFN0b3AocmVjdC50b3BMZWZ0KCkpOworICAgICAgICBsaW5lYXJHcmFkaWVudC5z
ZXRDb2xvckF0KDAuMCwgaGlnaGxpZ2h0Q29sb3IpOworICAgICAgICBsaW5lYXJHcmFkaWVudC5z
ZXRDb2xvckF0KDEuMCwgaGlnaGxpZ2h0Q29sb3IubGlnaHRlcigpKTsKKyAgICAgICAgYnJ1c2gg
PSBsaW5lYXJHcmFkaWVudDsKICAgICB9CiAKLSAgICBkcmF3UmVjdGFuZ3VsYXJDb250cm9sQmFj
a2dyb3VuZChwYWludGVyLCBwZW4sIHJlY3QsIGxpbmVhckdyYWRpZW50KTsKKyAgICBkcmF3UmVj
dGFuZ3VsYXJDb250cm9sQmFja2dyb3VuZChwYWludGVyLCBib3JkZXJQZW4sIHJlY3QsIGJydXNo
KTsKIH0KIAogdm9pZCBTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdDb21ib0JveChjb25zdCBRUmVj
dCYgcmVjdCwgYm9vbCBtdWx0aXBsZSwgYm9vbCBlbmFibGVkKQogewotICAgIFFQZW4gcGVuKFF0
OjpkYXJrR3JheSwgMS4wLCBRdDo6U29saWRMaW5lLCBRdDo6Um91bmRDYXAsIFF0OjpSb3VuZEpv
aW4pOworICAgIGRyYXdSZWN0YW5ndWxhckNvbnRyb2xCYWNrZ3JvdW5kKHBhaW50ZXIsIFF0OjpO
b1BlbiwgcmVjdC5hZGp1c3RlZCgwLCAxLCAwLCAyKSwgc2hhZG93Q29sb3IpOworCiAgICAgUUxp
bmVhckdyYWRpZW50IGxpbmVhckdyYWRpZW50OwotICAgIGlmICghZW5hYmxlZCkgewotICAgICAg
ICBsaW5lYXJHcmFkaWVudC5zZXRTdGFydChyZWN0LmJvdHRvbUxlZnQoKSk7Ci0gICAgICAgIGxp
bmVhckdyYWRpZW50LnNldEZpbmFsU3RvcChyZWN0LnRvcExlZnQoKSk7Ci0gICAgICAgIGxpbmVh
ckdyYWRpZW50LnNldENvbG9yQXQoMC4wLCBRdDo6Z3JheSk7Ci0gICAgICAgIGxpbmVhckdyYWRp
ZW50LnNldENvbG9yQXQoMS4wLCBRdDo6d2hpdGUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGxp
bmVhckdyYWRpZW50LnNldFN0YXJ0KHJlY3QuYm90dG9tTGVmdCgpKTsKLSAgICAgICAgbGluZWFy
R3JhZGllbnQuc2V0RmluYWxTdG9wKFFQb2ludChyZWN0LmJvdHRvbUxlZnQoKS54KCksCi0gICAg
ICAgICAgICAgICAgICAgIHJlY3QuYm90dG9tTGVmdCgpLnkoKSAtIC8qIG9mZnNldCBsaW1pdCBm
b3IgZ3JhZGllbnQgKi8gMjApKTsKLSAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgw
LjAsIFF0OjpncmF5KTsKLSAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgwLjQsIFF0
Ojp3aGl0ZSk7Ci0gICAgfQorICAgIGxpbmVhckdyYWRpZW50LnNldFN0YXJ0KHJlY3QuYm90dG9t
TGVmdCgpKTsKKyAgICBsaW5lYXJHcmFkaWVudC5zZXRGaW5hbFN0b3AocmVjdC50b3BMZWZ0KCkp
OworICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQoMC4wLCBidXR0b25HcmFkaWVudEJvdHRv
bSk7CisgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgxLjAsIFF0Ojp3aGl0ZSk7CiAKLSAg
ICBkcmF3UmVjdGFuZ3VsYXJDb250cm9sQmFja2dyb3VuZChwYWludGVyLCBwZW4sIHJlY3QsIGxp
bmVhckdyYWRpZW50KTsKIAotICAgIGNvbnN0IFFSZWN0IHIocmVjdC54KCkgKyByZWN0LndpZHRo
KCkgLSBmcmFtZVdpZHRoIC0gYXJyb3dCb3hXaWR0aCwgcmVjdC55KCkgKyBmcmFtZVdpZHRoCi0g
ICAgICAgICAgICAgICAgICAgLCBhcnJvd0JveFdpZHRoLCByZWN0LmhlaWdodCgpIC0gMiAqIGZy
YW1lV2lkdGgpOwotICAgIFFQaXhtYXAgcGljID0gZmluZENvbWJvQnV0dG9uKHIuc2l6ZSgpLCBt
dWx0aXBsZSwgIWVuYWJsZWQpOworICAgIGRyYXdSZWN0YW5ndWxhckNvbnRyb2xCYWNrZ3JvdW5k
KHBhaW50ZXIsIGJvcmRlclBlbiwgcmVjdCwgbGluZWFyR3JhZGllbnQpOwogCisgICAgY29uc3Qg
UVJlY3QgYnV0dG9uUmVjdChyZWN0LngoKSArIHJlY3Qud2lkdGgoKSAtIGZyYW1lV2lkdGggLSBh
cnJvd0JveFdpZHRoLCByZWN0LnkoKSArIGZyYW1lV2lkdGgKKyAgICAgICAgICAgICAgICAgICAs
IHJlY3QuaGVpZ2h0KCksIHJlY3QuaGVpZ2h0KCkgLSAyICogZnJhbWVXaWR0aCk7CisgICAgUVJl
Y3QgdGFyZ2V0UmVjdChRUG9pbnQoMCwgMCksIGdldEJ1dHRvbkltYWdlU2l6ZShidXR0b25SZWN0
LnNpemUoKSwgbXVsdGlwbGUpKTsKKyAgICB0YXJnZXRSZWN0Lm1vdmVDZW50ZXIoYnV0dG9uUmVj
dC5jZW50ZXIoKSk7CisgICAgUVBpeG1hcCBwaWMgPSBmaW5kQ29tYm9CdXR0b24oc2l6ZUZvclBh
aW50ZXJTY2FsZSh0YXJnZXRSZWN0KSwgbXVsdGlwbGUsIGVuYWJsZWQpOwogICAgIGlmIChwaWMu
aXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGludCB4ID0gKHIud2lkdGgoKSAtIHBp
Yy53aWR0aCgpKSA+PiAxOwotICAgIGludCB5ID0gKHIuaGVpZ2h0KCkgLSBwaWMuaGVpZ2h0KCkp
ID4+IDE7Ci0gICAgcGFpbnRlci0+ZHJhd1BpeG1hcChyLngoKSArIHgsIHIueSgpICsgeSwgcGlj
KTsKKyAgICBwYWludGVyLT5kcmF3UGl4bWFwKHRhcmdldFJlY3QsIHBpYyk7Cit9CisKK3ZvaWQg
U3R5bGVQYWludGVyTW9iaWxlOjpkcmF3UHJvZ3Jlc3MoY29uc3QgUVJlY3QgJnJlY3QsIGRvdWJs
ZSBwcm9ncmVzcywgYm9vbCBsZWZ0VG9SaWdodCwgYm9vbCBhbmltYXRlZCkgY29uc3QKK3sKKyAg
ICBzdGF0aWMgY29uc3QgUVN0cmluZyBwcmVmaXggPSBRTGF0aW4xU3RyaW5nKCIkcXQtd2Via2l0
LW1vYmlsZS10aGVtZS1wcm9ncmVzcy0iKTsKKyAgICBjb25zdCBpbnQgYm9yZGVyID0gcmVjdC5o
ZWlnaHQoKSAvIDM7CisgICAgY29uc3QgUVJlY3QgdGFyZ2V0UmVjdCA9IHJlY3QuYWRqdXN0ZWQo
MCwgYm9yZGVyLCAwLCAtYm9yZGVyKTsKIAotICAgIHBhaW50ZXItPnNldFBlbihlbmFibGVkID8g
UXQ6OmRhcmtHcmF5IDogUXQ6OmdyYXkpOwotICAgIHBhaW50ZXItPmRyYXdMaW5lKHIubGVmdCgp
IC0gMiwgci50b3AoKSArIDIsIHIubGVmdCgpIC0gMiwgci5ib3R0b20oKSAtIDIpOworICAgIFFQ
aXhtYXAgcmVzdWx0OworICAgIGNvbnN0IFFTaXplIGltYWdlU2l6ZSA9IHNpemVGb3JQYWludGVy
U2NhbGUodGFyZ2V0UmVjdCk7CisgICAgUVN0cmluZyBrZXkgPSBwcmVmaXggKyBRU3RyaW5nOjpu
dW1iZXIoaW1hZ2VTaXplLndpZHRoKCkpICsgUUxhdGluMVN0cmluZygiLSIpICsgUVN0cmluZzo6
bnVtYmVyKGltYWdlU2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgICAgICsgUUxhdGluMVN0cmluZygi
LSIpICsgUVN0cmluZzo6bnVtYmVyKHByb2dyZXNzLCAnZicsIDMpICsgKGFuaW1hdGVkPyBRTGF0
aW4xU3RyaW5nKCItYW5pbSIpIDogUVN0cmluZygpKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICsgKCghYW5pbWF0ZWQgJiYgIWxlZnRUb1JpZ2h0KSA/IFFMYXRpbjFTdHJpbmcoIi1ydGwiKSA6
IFFTdHJpbmcoKSk7CisgICAgaWYgKCFRUGl4bWFwQ2FjaGU6OmZpbmQoa2V5LCByZXN1bHQpKSB7
CisgICAgICAgIGlmIChpbWFnZVNpemUuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJlc3VsdCA9IFFQaXhtYXAoaW1hZ2VTaXplKTsKKyAgICAgICAgcmVzdWx0LmZpbGwo
UXQ6OnRyYW5zcGFyZW50KTsKKyAgICAgICAgUVBhaW50ZXIgcGFpbnRlcigmcmVzdWx0KTsKKyAg
ICAgICAgUVJlY3QgcHJvZ3Jlc3NSZWN0KFFQb2ludCgwLCAwKSwgaW1hZ2VTaXplKTsKKyAgICAg
ICAgZHJhd1JlY3Rhbmd1bGFyQ29udHJvbEJhY2tncm91bmQoJnBhaW50ZXIsIGJvcmRlclBlbiwg
cHJvZ3Jlc3NSZWN0LCBRdDo6d2hpdGUpOworICAgICAgICBwcm9ncmVzc1JlY3QuYWRqdXN0KDEs
IDEsIC0xLCAtMSk7CisgICAgICAgIGlmIChhbmltYXRlZCkgeworICAgICAgICAgICAgY29uc3Qg
aW50IHJpZ2h0ID0gcHJvZ3Jlc3NSZWN0LnJpZ2h0KCk7CisgICAgICAgICAgICBjb25zdCBpbnQg
c3RhcnRQb3MgPSByaWdodCAqICgxIC0gcHJvZ3Jlc3NCYXJDaHVua1BlcmNlbnRhZ2UpICogMiAq
IGZhYnMocHJvZ3Jlc3MgLSAwLjUpOworICAgICAgICAgICAgcHJvZ3Jlc3NSZWN0LnNldFdpZHRo
KHByb2dyZXNzQmFyQ2h1bmtQZXJjZW50YWdlICogcmlnaHQpOworICAgICAgICAgICAgcHJvZ3Jl
c3NSZWN0Lm1vdmVMZWZ0KHN0YXJ0UG9zKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IHByb2dyZXNzUmVjdC5zZXRXaWR0aChwcm9ncmVzcyAqIHByb2dyZXNzUmVjdC53aWR0aCgpKTsK
KyAgICAgICAgICAgIGlmICghbGVmdFRvUmlnaHQpCisgICAgICAgICAgICAgICAgcHJvZ3Jlc3NS
ZWN0Lm1vdmVSaWdodChpbWFnZVNpemUud2lkdGgoKSAtIDIpOworICAgICAgICB9CisgICAgICAg
IGlmIChwcm9ncmVzc1JlY3Qud2lkdGgoKSA+IDApIHsKKyAgICAgICAgICAgIFFMaW5lYXJHcmFk
aWVudCBncmFkaWVudDsKKyAgICAgICAgICAgIGdyYWRpZW50LnNldFN0YXJ0KHByb2dyZXNzUmVj
dC5ib3R0b21MZWZ0KCkpOworICAgICAgICAgICAgZ3JhZGllbnQuc2V0RmluYWxTdG9wKHByb2dy
ZXNzUmVjdC50b3BMZWZ0KCkpOworICAgICAgICAgICAgZ3JhZGllbnQuc2V0Q29sb3JBdCgwLjAs
IGhpZ2hsaWdodENvbG9yKTsKKyAgICAgICAgICAgIGdyYWRpZW50LnNldENvbG9yQXQoMS4wLCBo
aWdobGlnaHRDb2xvci5saWdodGVyKCkpOworICAgICAgICAgICAgZHJhd1JlY3Rhbmd1bGFyQ29u
dHJvbEJhY2tncm91bmQoJnBhaW50ZXIsIFF0OjpOb1BlbiwgcHJvZ3Jlc3NSZWN0LCBncmFkaWVu
dCk7CisgICAgICAgIH0KKyAgICAgICAgUVBpeG1hcENhY2hlOjppbnNlcnQoa2V5LCByZXN1bHQp
OworICAgIH0KKyAgICBwYWludGVyLT5kcmF3UGl4bWFwKHRhcmdldFJlY3QsIHJlc3VsdCk7Cit9
CisKK3ZvaWQgU3R5bGVQYWludGVyTW9iaWxlOjpkcmF3U2xpZGVyVGh1bWIoY29uc3QgUVJlY3Qg
JiByZWN0LCBib29sIHByZXNzZWQpIGNvbnN0Cit7CisgICAgLy8gVE9ETzogY2FjaGUgPworICAg
IGRyYXdSZWN0YW5ndWxhckNvbnRyb2xCYWNrZ3JvdW5kKHBhaW50ZXIsIGJvcmRlclBlbiwgcmVj
dCwgcHJlc3NlZD8gUXQ6OmxpZ2h0R3JheSA6IGJ1dHRvbkdyYWRpZW50Qm90dG9tKTsKIH0KIAog
CkBAIC01MTEsMTEgKzUzNSwxMSBAQCBib29sIFJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50QnV0
dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdAogCiAgICAgQ29u
dHJvbFBhcnQgYXBwZWFyYW5jZSA9IG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKTsKICAgICBpZiAo
YXBwZWFyYW5jZSA9PSBQdXNoQnV0dG9uUGFydCB8fCBhcHBlYXJhbmNlID09IEJ1dHRvblBhcnQp
IHsKLSAgICAgICAgcC5kcmF3UHVzaEJ1dHRvbihyLCBpc1ByZXNzZWQobykpOworICAgICAgICBw
LmRyYXdQdXNoQnV0dG9uKHIsIGlzUHJlc3NlZChvKSwgaXNFbmFibGVkKG8pKTsKICAgICB9IGVs
c2UgaWYgKGFwcGVhcmFuY2UgPT0gUmFkaW9QYXJ0KQotICAgICAgIHAuZHJhd1JhZGlvQnV0dG9u
KHIsIGlzQ2hlY2tlZChvKSk7CisgICAgICAgcC5kcmF3UmFkaW9CdXR0b24ociwgaXNDaGVja2Vk
KG8pLCBpc0VuYWJsZWQobykpOwogICAgIGVsc2UgaWYgKGFwcGVhcmFuY2UgPT0gQ2hlY2tib3hQ
YXJ0KQotICAgICAgIHAuZHJhd0NoZWNrQm94KHIsIGlzQ2hlY2tlZChvKSk7CisgICAgICAgcC5k
cmF3Q2hlY2tCb3gociwgaXNDaGVja2VkKG8pLCBpc0VuYWJsZWQobykpOwogCiAgICAgcmV0dXJu
IGZhbHNlOwogfQpAQCAtNTQ5LDcgKzU3Myw3IEBAIGJvb2wgUmVuZGVyVGhlbWVRdE1vYmlsZTo6
cGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvCiAg
ICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gTm93IHBhaW50IHRoZSB0ZXh0IGZpZWxkLgot
ICAgIHAuZHJhd0xpbmVFZGl0KHIsIC8qc3Vua2VuID0gKi9pc1ByZXNzZWQobykpOworICAgIHAu
ZHJhd0xpbmVFZGl0KHIsIGlzRm9jdXNlZChvKSwgaXNFbmFibGVkKG8pKTsKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKQEAgLTU2NSw3ICs1ODksNyBAQCB2b2lkIFJlbmRlclRoZW1lUXRNb2JpbGU6
OnNldFBvcHVwUGFkZGluZyhSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CiAgICAgY29uc3QgaW50
IHBhZGRpbmdSaWdodCA9IHN0eWxlLT53aWR0aCgpLmlzRml4ZWQoKSB8fCBzdHlsZS0+d2lkdGgo
KS5pc1BlcmNlbnQoKSA/IDUgOiA4OwogCiAgICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0
aChwYWRkaW5nTGVmdCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0
aChwYWRkaW5nUmlnaHQgKyBidXR0b25JY29uU2l6ZSwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0
UGFkZGluZ1JpZ2h0KExlbmd0aChwYWRkaW5nUmlnaHQgKyBhcnJvd0JveFdpZHRoLCBGaXhlZCkp
OwogCiAgICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3RoKDIsIEZpeGVkKSk7CiAgICAgc3R5
bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKDIsIEZpeGVkKSk7CkBAIC01ODIsNyArNjA2LDcg
QEAgYm9vbCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCog
bywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb24KICAgICBwLnBhaW50ZXItPnRyYW5zbGF0ZSh0b3BM
ZWZ0KTsKICAgICBjb25zdCBRUmVjdCByZWN0KFFQb2ludCgwLCAwKSwgci5zaXplKCkpOwogCi0g
ICAgcC5kcmF3Q29tYm9Cb3gocmVjdCwgY2hlY2tNdWx0aXBsZShvKSk7CisgICAgcC5kcmF3Q29t
Ym9Cb3gocmVjdCwgY2hlY2tNdWx0aXBsZShvKSwgaXNFbmFibGVkKG8pKTsKICAgICBwLnBhaW50
ZXItPnRyYW5zbGF0ZSgtdG9wTGVmdCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtNTk0LDcg
KzYxOCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRNZW51TGlzdEJ1dHRvbihS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYKICAgICBpZiAoIXAuaXNWYWxpZCgpKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHAuZHJhd0NvbWJvQm94KHIsIGNoZWNrTXVsdGlw
bGUobykpOworICAgIHAuZHJhd0NvbWJvQm94KHIsIGNoZWNrTXVsdGlwbGUobyksIGlzRW5hYmxl
ZChvKSk7CiAKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC02MDIsMzAgKzYyNiw2MyBAQCBib29s
IFJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiBv
LCBjb25zdCBQYWludEluZm8mCiAjaWYgRU5BQkxFKFBST0dSRVNTX1RBRykKIGRvdWJsZSBSZW5k
ZXJUaGVtZVF0TW9iaWxlOjphbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclBy
b2dyZXNzKiByZW5kZXJQcm9ncmVzcykgY29uc3QKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiAwLjsKKyAgICBpZiAocmVuZGVyUHJvZ3Jlc3MtPmlzRGV0ZXJtaW5hdGUoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgLy8gb3VyIGFuaW1hdGlvbiBnb2VzIGJhY2sgYW5kIGZv
cnRoIHNvIHdlIG5lZWQgdG8gbWFrZSBpdCBsYXN0IHR3aWNlIGFzIGxvbmcKKyAgICAvLyBhbmQg
d2UgbmVlZCB0aGUgbnVtZXJhdG9yIHRvIGJlIGFuIG9kZCBudW1iZXIgaW4gb3JkZXIgdG8gZW5z
dXJlIHdlIGdldCBhIHByb2dyZXNzIHZhbHVlIG9mIDAuNQorICAgIHJldHVybiAoMiAqIHByb2dy
ZXNzQW5pbWF0aW9uR3JhbnVsYXJpdHkgKzEpLyBwcm9ncmVzc0JhckNodW5rUGVyY2VudGFnZSAq
IGFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIocmVuZGVyUHJvZ3Jlc3MpOwog
fQogCiBib29sIFJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50UHJvZ3Jlc3NCYXIoUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBpLCBjb25zdCBJbnRSZWN0JiByKQogewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCFvLT5pc1Byb2dyZXNz
KCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgU3R5bGVQYWludGVyTW9iaWxlIHAodGhp
cywgcGkpOworICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgUmVuZGVyUHJvZ3Jlc3MqIHJlbmRlclByb2dyZXNzID0gdG9SZW5kZXJQcm9ncmVzcyhvKTsK
KyAgICBjb25zdCBib29sIGlzUlRMID0gKHJlbmRlclByb2dyZXNzLT5zdHlsZSgpLT5kaXJlY3Rp
b24oKSA9PSBSVEwpOworCisgICAgaWYgKHJlbmRlclByb2dyZXNzLT5pc0RldGVybWluYXRlKCkp
CisgICAgICAgIHAuZHJhd1Byb2dyZXNzKHIsIHJlbmRlclByb2dyZXNzLT5wb3NpdGlvbigpLCAh
aXNSVEwpOworICAgIGVsc2UKKyAgICAgICAgcC5kcmF3UHJvZ3Jlc3MociwgcmVuZGVyUHJvZ3Jl
c3MtPmFuaW1hdGlvblByb2dyZXNzKCksICFpc1JUTCwgdHJ1ZSk7CisKKyAgICByZXR1cm4gZmFs
c2U7CiB9CiAjZW5kaWYKIAogYm9vbCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludFNsaWRlclRy
YWNrKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwaSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiByKQogewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgU3R5bGVQYWludGVyTW9iaWxlIHAodGhp
cywgcGkpOworICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgSFRNTElucHV0RWxlbWVudCogc2xpZGVyID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVu
dCo+KG8tPm5vZGUoKSk7CisKKyAgICBjb25zdCBkb3VibGUgbWluID0gc2xpZGVyLT5taW5pbXVt
KCk7CisgICAgY29uc3QgZG91YmxlIG1heCA9IHNsaWRlci0+bWF4aW11bSgpOworICAgIGNvbnN0
IGRvdWJsZSBwcm9ncmVzcyA9IChtYXggLSBtaW4gPiAwKSA/IChzbGlkZXItPnZhbHVlQXNOdW1i
ZXIoKSAtIG1pbikgLyAobWF4IC0gbWluKSA6IDA7CisKKyAgICAvLyBSZW5kZXIgdGhlIHNwaW4g
YnV0dG9ucyBmb3IgTFRSIG9yIFJUTCBhY2NvcmRpbmdseS4KKyAgICBwLmRyYXdQcm9ncmVzcyhy
LCBwcm9ncmVzcywgby0+c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKTsKKworICAg
IHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludFNsaWRl
clRodW1iKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwaSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiByKQogewotICAgIC8vIFdl
J3ZlIGFscmVhZHkgcGFpbnRlZCBpdCBpbiBwYWludFNsaWRlclRyYWNrKCksIG5vIG5lZWQgdG8g
ZG8gYW55dGhpbmcgaGVyZS4KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB0cnVl
OworICAgIFN0eWxlUGFpbnRlck1vYmlsZSBwKHRoaXMsIHBpKTsKKyAgICBpZiAoIXAuaXNWYWxp
ZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHAuZHJhd1NsaWRlclRodW1iKHIsIGlz
UHJlc3NlZChvKSk7CisKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVR
dE1vYmlsZTo6Y2hlY2tNdWx0aXBsZShSZW5kZXJPYmplY3QqIG8pIGNvbnN0CkBAIC02NDUsOCAr
NzAyLDkgQEAgdm9pZCBSZW5kZXJUaGVtZVF0TW9iaWxlOjphZGp1c3RTbGlkZXJUaHVtYlNpemUo
UmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogewogICAgIGNvbnN0IENvbnRyb2xQYXJ0IHBhcnQg
PSBzdHlsZS0+YXBwZWFyYW5jZSgpOwogICAgIGlmIChwYXJ0ID09IFNsaWRlclRodW1iSG9yaXpv
bnRhbFBhcnQgfHwgcGFydCA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkgewotICAgICAgICBz
dHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNsaWRlcldpZHRoLCBGaXhlZCkpOwotICAgICAgICBzdHls
ZS0+c2V0SGVpZ2h0KExlbmd0aChzbGlkZXJIZWlnaHQsIEZpeGVkKSk7CisgICAgICAgIGNvbnN0
IGludCBzaXplID0gc2xpZGVyU2l6ZSAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCk7CisgICAgICAg
IHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc2l6ZSwgRml4ZWQpKTsKKyAgICAgICAgc3R5bGUtPnNl
dEhlaWdodChMZW5ndGgoc2l6ZSwgRml4ZWQpKTsKICAgICB9IGVsc2UKICAgICAgICAgUmVuZGVy
VGhlbWVRdDo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKHN0eWxlKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2JpbGUuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2JpbGUuaAppbmRleCA4MmM0ODI4NTM3
ZDQ3MTAyODM4ODkyNmY1YWYxZWU4NzA4ZGIwM2Q4Li43ODVjM2RlNWI2MDc4ODYxZGIyYTI0ODI1
MjkyMGU0NTQ1YWZkNzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9S
ZW5kZXJUaGVtZVF0TW9iaWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVu
ZGVyVGhlbWVRdE1vYmlsZS5oCkBAIC04NCwyOSArODQsMzkgQEAgcHJpdmF0ZToKIH07CiAKIGNs
YXNzIFN0eWxlUGFpbnRlck1vYmlsZSA6IHB1YmxpYyBTdHlsZVBhaW50ZXIgeworCiBwdWJsaWM6
CiAgICAgZXhwbGljaXQgU3R5bGVQYWludGVyTW9iaWxlKFJlbmRlclRoZW1lUXRNb2JpbGUqLCBj
b25zdCBQYWludEluZm8mKTsKKyAgICB+U3R5bGVQYWludGVyTW9iaWxlKCk7CiAKLSAgICB2b2lk
IGRyYXdMaW5lRWRpdChjb25zdCBRUmVjdCYsIGJvb2wgc3Vua2VuLCBib29sIGVuYWJsZWQgPSB0
cnVlKTsKKyAgICB2b2lkIGRyYXdMaW5lRWRpdChjb25zdCBRUmVjdCYsIGJvb2wgZm9jdXNlZCwg
Ym9vbCBlbmFibGVkID0gdHJ1ZSk7CiAgICAgdm9pZCBkcmF3Q2hlY2tCb3goY29uc3QgUVJlY3Qm
LCBib29sIGNoZWNrZWQsIGJvb2wgZW5hYmxlZCA9IHRydWUpOwogICAgIHZvaWQgZHJhd1JhZGlv
QnV0dG9uKGNvbnN0IFFSZWN0JiwgYm9vbCBjaGVja2VkLCBib29sIGVuYWJsZWQgPSB0cnVlKTsK
ICAgICB2b2lkIGRyYXdQdXNoQnV0dG9uKGNvbnN0IFFSZWN0JiwgYm9vbCBzdW5rZW4sIGJvb2wg
ZW5hYmxlZCA9IHRydWUpOwogICAgIHZvaWQgZHJhd0NvbWJvQm94KGNvbnN0IFFSZWN0JiwgYm9v
bCBtdWx0aXBsZSwgYm9vbCBlbmFibGVkID0gdHJ1ZSk7CisgICAgdm9pZCBkcmF3UHJvZ3Jlc3Mo
Y29uc3QgUVJlY3QmLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgbGVmdFRvUmlnaHQgPSB0cnVlLCBi
b29sIGFuaW1hdGVkID0gZmFsc2UpIGNvbnN0OworICAgIHZvaWQgZHJhd1NsaWRlclRodW1iKGNv
bnN0IFFSZWN0JiwgYm9vbCBwcmVzc2VkKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICB2b2lkIGRy
YXdDaGVja2VyKFFQYWludGVyKiwgaW50IHNpemUsIFFDb2xvcikgY29uc3Q7Ci0gICAgUVBpeG1h
cCBmaW5kQ2hlY2tlcihjb25zdCBRUmVjdCYsIGJvb2wgZGlzYWJsZWQpIGNvbnN0OworICAgIHZv
aWQgZHJhd0NoZWNrYWJsZUJhY2tncm91bmQoUVBhaW50ZXIqLCBjb25zdCBRUmVjdCYsIGJvb2wg
Y2hlY2tlZCwgYm9vbCBlbmFibGVkKSBjb25zdDsKKyAgICB2b2lkIGRyYXdDaGVja2VyKFFQYWlu
dGVyKiwgY29uc3QgUVJlY3QmLCBRQ29sb3IpIGNvbnN0OworICAgIFFQaXhtYXAgZmluZENoZWNr
Qm94KGNvbnN0IFFTaXplJiwgYm9vbCBjaGVja2VkLCBib29sIGVuYWJsZWQpIGNvbnN0OwogCi0g
ICAgdm9pZCBkcmF3UmFkaW8oUVBhaW50ZXIqLCBjb25zdCBRU2l6ZSYsIGJvb2wgY2hlY2tlZCwg
UUNvbG9yKSBjb25zdDsKLSAgICBRUGl4bWFwIGZpbmRSYWRpbyhjb25zdCBRU2l6ZSYsIGJvb2wg
Y2hlY2tlZCwgYm9vbCBkaXNhYmxlZCkgY29uc3Q7CisgICAgdm9pZCBkcmF3UmFkaW8oUVBhaW50
ZXIqLCBjb25zdCBRU2l6ZSYsIGJvb2wgY2hlY2tlZCwgYm9vbCBlbmFibGVkKSBjb25zdDsKKyAg
ICBRUGl4bWFwIGZpbmRSYWRpbyhjb25zdCBRU2l6ZSYsIGJvb2wgY2hlY2tlZCwgYm9vbCBlbmFi
bGVkKSBjb25zdDsKIAotICAgIFFTaXplIGdldEJ1dHRvbkltYWdlU2l6ZShjb25zdCBRU2l6ZSYp
IGNvbnN0OworICAgIFFTaXplIGdldEJ1dHRvbkltYWdlU2l6ZShjb25zdCBRU2l6ZSYsIGJvb2wg
bXVsdGlwbGUpIGNvbnN0OwogICAgIHZvaWQgZHJhd1NpbXBsZUNvbWJvQnV0dG9uKFFQYWludGVy
KiwgY29uc3QgUVNpemUmLCBRQ29sb3IpIGNvbnN0OwogICAgIHZvaWQgZHJhd011bHRpcGxlQ29t
Ym9CdXR0b24oUVBhaW50ZXIqLCBjb25zdCBRU2l6ZSYsIFFDb2xvcikgY29uc3Q7Ci0gICAgUVBp
eG1hcCBmaW5kQ29tYm9CdXR0b24oY29uc3QgUVNpemUmLCBib29sIG11bHRpcGxlLCBib29sIGRp
c2FibGVkKSBjb25zdDsKKyAgICBRUGl4bWFwIGZpbmRDb21ib0J1dHRvbihjb25zdCBRU2l6ZSYs
IGJvb2wgbXVsdGlwbGUsIGJvb2wgZW5hYmxlZCkgY29uc3Q7CisKKyAgICBRU2l6ZSBzaXplRm9y
UGFpbnRlclNjYWxlKGNvbnN0IFFSZWN0JikgY29uc3Q7CisKKyAgICBib29sIG9sZFNtb290aFBp
eG1hcFRyYW5zZm9ybTsKIAogICAgIFFfRElTQUJMRV9DT1BZKFN0eWxlUGFpbnRlck1vYmlsZSk7
CiB9OworCiB9CiAKICNlbmRpZiAvLyBSZW5kZXJUaGVtZVF0TW9iaWxlX2gK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119021</attachid>
            <date>2011-12-13 08:34:36 -0800</date>
            <delta_ts>2011-12-14 05:21:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74293-20111213173649.patch</filename>
            <type>text/plain</type>
            <size>42486</size>
            <attacher name="Pierre Rossi">pierre.rossi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyNjY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGRhZGY3ODFlYzlhMTJl
YzdhZTk5OTI5NjMyNTRhY2E0MzRmZWY1ZS4uZWY4MTY4NTdiZjI0ZThiMjFiODVjMGE2YzNmMWQw
NGQ3Mjg5Nzk0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDExLTEyLTEyICBQaWVy
cmUgUm9zc2kgIDxwaWVycmUucm9zc2lAZ21haWwuY29tPgorCisgICAgICAgIFtRdF0gTW9iaWxl
IHRoZW1lIGNvdWxkIHVzZSBhIGxpdHRsZSByZWZyZXNoCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDI5MworCisgICAgICAgIFRoZSBsb29rIGFuZCBm
ZWVsIG9mIHRoZSAibW9iaWxlIHRoZW1lIiB3ZSdyZQorICAgICAgICB1c2luZyBpbiBRdFdlYktp
dCBkYXRlcyBiYWNrIHRvIHRoZSBtYWVtbyA1IGRheXMuCisgICAgICAgIFRoaXMgaXMgYW4gYXR0
ZW1wdCBhdCBtYWtpbmcgaXQgbG9vayBsZXNzIG91dCBvZgorICAgICAgICBwbGFjZSwgYW5kIGFs
c28gc3VwcG9ydCBwcm9ncmVzcyBhbmQgcmFuZ2UuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCB0aGlzIGlzIHN0aWxsIG5vdCB0
aGUgZGVmYXVsdCB0aGVtZQorICAgICAgICBmb3IgdGVzdHMuCisKKyAgICAgICAgKiBEZXJpdmVk
U291cmNlcy5wcmk6CisgICAgICAgICogY3NzL21vYmlsZVRoZW1lUXQuY3NzOiBBZGRlZC4KKyAg
ICAgICAgKGlucHV0W3R5cGU9InN1Ym1pdCJdLCBzZWxlY3QpOgorICAgICAgICAoaW5wdXRbdHlw
ZT0ic3VibWl0Il06ZGlzYWJsZWQsIGlucHV0W3R5cGU9InN1Ym1pdCJdOmRpc2FibGVkOmFjdGl2
ZSwgc2VsZWN0OmRpc2FibGVkLCBpbnB1dFt0eXBlPSJ0ZXh0Il06ZGlzYWJsZWQpOgorICAgICAg
ICAoaW5wdXRbdHlwZT0ic3VibWl0Il06YWN0aXZlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9S
ZW5kZXJUaGVtZVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OmV4dHJh
RGVmYXVsdFN0eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyOjpTdHls
ZVBhaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyOjppbml0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlcjo6flN0eWxlUGFpbnRlcik6CisgICAgICAgICogcGxh
dGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5oOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1JlbmRlclRo
ZW1lUXRNb2JpbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd1JlY3Rhbmd1bGFyQ29udHJv
bEJhY2tncm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6c2hyaW5rUmVjdFRvU3F1YXJlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6U3R5bGVQYWludGVyTW9iaWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6flN0eWxlUGFpbnRlck1vYmls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdDaGVja2FibGVC
YWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6c2l6ZUZv
clBhaW50ZXJTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXJNb2JpbGU6OmRy
YXdDaGVja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6ZmluZENo
ZWNrQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6ZHJhd1JhZGlv
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6ZmluZFJhZGlvKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6ZHJhd011bHRpcGxlQ29tYm9CdXR0
b24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyTW9iaWxlOjpkcmF3U2ltcGxlQ29t
Ym9CdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyTW9iaWxlOjpnZXRCdXR0
b25JbWFnZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyTW9iaWxlOjpmaW5k
Q29tYm9CdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyTW9iaWxlOjpkcmF3
TGluZUVkaXQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyTW9iaWxlOjpkcmF3Q2hl
Y2tCb3gpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyTW9iaWxlOjpkcmF3UmFkaW9C
dXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyTW9iaWxlOjpkcmF3UHVzaEJ1
dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdDb21ib0Jv
eCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdQcm9ncmVzcyk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdTbGlkZXJUaHVtYik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludEJ1dHRvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludFRleHRGaWVsZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpzZXRQb3B1cFBhZGRpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRNZW51TGlzdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludE1lbnVMaXN0QnV0dG9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OmFuaW1hdGlvbkR1cmF0
aW9uRm9yUHJvZ3Jlc3NCYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmls
ZTo6cGFpbnRQcm9ncmVzc0Jhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9i
aWxlOjpwYWludFNsaWRlclRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRN
b2JpbGU6OnBhaW50U2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVR
dE1vYmlsZTo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9S
ZW5kZXJUaGVtZVF0TW9iaWxlLmg6CisKIDIwMTEtMTItMTMgIEphcnJlZCBOaWNob2xscyAgPGph
cnJlZEBzZW5jaGEuY29tPgogCiAgICAgICAgIFhIUiBzaG91bGQgdXNlIG1fcmVzcG9uc2VUeXBl
Q29kZSBpbnRlcm5hbGx5IHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBXZWJLaXQgY29kaW5nIHN0eWxl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5wcmkgYi9Tb3VyY2Uv
V2ViQ29yZS9EZXJpdmVkU291cmNlcy5wcmkKaW5kZXggODJjM2I2OWIwYzg1NGI4Zjc2ODI1ZDIy
YzI4NTgyMGI3YTAzN2U3ZS4uYTg4ZGZlNzVlZmFiMGVlMjZjYWI0NTMwZjEwYzdkOWQxZTZiYjMw
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMucHJpCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLnByaQpAQCAtODYsNyArODYsOCBAQCBTVFlMRVNI
RUVUU19FTUJFRCA9IFwKICAgICAkJFBXRC9jc3MvbWVkaWFDb250cm9scy5jc3MgXAogICAgICQk
UFdEL2Nzcy9tZWRpYUNvbnRyb2xzUXQuY3NzIFwKICAgICAkJFBXRC9jc3MvbWVkaWFDb250cm9s
c1F0RnVsbHNjcmVlbi5jc3MgXAotICAgICQkUFdEL2Nzcy90aGVtZVF0Tm9MaXN0Ym94ZXMuY3Nz
CisgICAgJCRQV0QvY3NzL3RoZW1lUXROb0xpc3Rib3hlcy5jc3MgXAorICAgICQkUFdEL2Nzcy9t
b2JpbGVUaGVtZVF0LmNzcwogCiBJRExfQklORElOR1MgKz0gXAogICAgIGNzcy9Db3VudGVyLmlk
bCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvbW9iaWxlVGhlbWVRdC5jc3MgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvbW9iaWxlVGhlbWVRdC5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjAzNzhkZTcw
ODUzYjZkZGQ2ZGYyMjIxNWNkOTkyMmZkNTU1NjY5MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9tb2JpbGVUaGVtZVF0LmNzcwpAQCAtMCwwICsxLDM4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFy
eSgtaWVzKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitpbnB1dFt0eXBlPSJzdWJtaXQiXSwg
c2VsZWN0IHsKKyAgZm9udC1mYW1pbHk6ICJOb2tpYSBQdXJlIFRleHQiLCBBcmlhbCwgc2Fucy1z
ZXJpZjsKK30KKworaW5wdXRbdHlwZT0ic3VibWl0Il06ZGlzYWJsZWQsIGlucHV0W3R5cGU9InN1
Ym1pdCJdOmRpc2FibGVkOmFjdGl2ZSwgc2VsZWN0OmRpc2FibGVkLCBpbnB1dFt0eXBlPSJ0ZXh0
Il06ZGlzYWJsZWQgeworICBjb2xvcjogIzgwODA4MDsKK30KKworaW5wdXRbdHlwZT0ic3VibWl0
Il06YWN0aXZlIHsKKyAgY29sb3I6IHdoaXRlOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9xdC9SZW5kZXJUaGVtZVF0LmNwcAppbmRleCBiNjVkZTMzNzIzOTcwYzdiNDRlMTJlMzBhY2M3
N2JjM2MwMzYwNmNlLi41YzBkYzgwZDQwYmI2OTEwZTJlYjA5MTFkM2JkNWQ0NWMyMjdkYjEwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmNwcApAQCAtNTcs
NiArNTcsNyBAQAogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCiAjaW5jbHVkZSAiVGltZVJh
bmdlcy5oIgogI2luY2x1ZGUgIlVzZXJBZ2VudFN0eWxlU2hlZXRzLmgiCisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiAjaW5jbHVkZSA8UUd1aUFwcGxpY2F0aW9uPgogI2lu
Y2x1ZGUgPFFDb2xvcj4KQEAgLTExMywxMCArMTE0LDEzIEBAIGJvb2wgUmVuZGVyVGhlbWVRdDo6
aXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgQm9yZGVyRGF0
YSYKIAogU3RyaW5nIFJlbmRlclRoZW1lUXQ6OmV4dHJhRGVmYXVsdFN0eWxlU2hlZXQoKQogewot
ICAgIFN0cmluZyByZXN1bHQgPSBSZW5kZXJUaGVtZTo6ZXh0cmFEZWZhdWx0U3R5bGVTaGVldCgp
OwotICAgIGlmICh1c2VNb2JpbGVUaGVtZSgpKQotICAgICAgICByZXN1bHQgKz0gU3RyaW5nKHRo
ZW1lUXROb0xpc3Rib3hlc1VzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZih0aGVtZVF0Tm9MaXN0
Ym94ZXNVc2VyQWdlbnRTdHlsZVNoZWV0KSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBTdHJp
bmdCdWlsZGVyIHJlc3VsdDsKKyAgICByZXN1bHQuYXBwZW5kKFJlbmRlclRoZW1lOjpleHRyYURl
ZmF1bHRTdHlsZVNoZWV0KCkpOworICAgIGlmICh1c2VNb2JpbGVUaGVtZSgpKSB7CisgICAgICAg
IHJlc3VsdC5hcHBlbmQoU3RyaW5nKHRoZW1lUXROb0xpc3Rib3hlc1VzZXJBZ2VudFN0eWxlU2hl
ZXQsIHNpemVvZih0aGVtZVF0Tm9MaXN0Ym94ZXNVc2VyQWdlbnRTdHlsZVNoZWV0KSkpOworICAg
ICAgICByZXN1bHQuYXBwZW5kKFN0cmluZyhtb2JpbGVUaGVtZVF0VXNlckFnZW50U3R5bGVTaGVl
dCwgc2l6ZW9mKG1vYmlsZVRoZW1lUXRVc2VyQWdlbnRTdHlsZVNoZWV0KSkpOworICAgIH0KKyAg
ICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVRdDo6c3Vw
cG9ydHNIb3Zlcihjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0CkBAIC04NjcsNyArODcxLDggQEAg
U3R5bGVQYWludGVyOjpTdHlsZVBhaW50ZXIoUmVuZGVyVGhlbWVRdCogdGhlbWUsIGNvbnN0IFBh
aW50SW5mbyYgcGFpbnRJbmZvKQogICAgIDogcGFpbnRlcigwKQogewogICAgIFFfVU5VU0VEKHRo
ZW1lKTsKLSAgICBpbml0KHBhaW50SW5mby5jb250ZXh0ID8gcGFpbnRJbmZvLmNvbnRleHQgOiAw
KTsKKyAgICBBU1NFUlQocGFpbnRJbmZvLmNvbnRleHQpOworICAgIGluaXQocGFpbnRJbmZvLmNv
bnRleHQpOwogfQogCiBTdHlsZVBhaW50ZXI6OlN0eWxlUGFpbnRlcigpCkBAIC04ODIsMTIgKzg4
NywxMiBAQCB2b2lkIFN0eWxlUGFpbnRlcjo6aW5pdChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQp
CiAgICAgaWYgKHBhaW50ZXIpIHsKICAgICAgICAgLy8gdGhlIHN0eWxlcyBvZnRlbiBhc3N1bWUg
YmVpbmcgY2FsbGVkIHdpdGggYSBwcmlzdGluZSBwYWludGVyIHdoZXJlIG5vIGJydXNoIGlzIHNl
dCwKICAgICAgICAgLy8gc28gcmVzZXQgaXQgbWFudWFsbHkKLSAgICAgICAgb2xkQnJ1c2ggPSBw
YWludGVyLT5icnVzaCgpOworICAgICAgICBtX3ByZXZpb3VzQnJ1c2ggPSBwYWludGVyLT5icnVz
aCgpOwogICAgICAgICBwYWludGVyLT5zZXRCcnVzaChRdDo6Tm9CcnVzaCk7CiAKICAgICAgICAg
Ly8gcGFpbnRpbmcgdGhlIHdpZGdldCB3aXRoIGFudGktYWxpYXNpbmcgd2lsbCBtYWtlIGl0IGJs
dXJyeQogICAgICAgICAvLyBkaXNhYmxlIGl0IGhlcmUgYW5kIHJlc3RvcmUgaXQgbGF0ZXIKLSAg
ICAgICAgb2xkQW50aWFsaWFzaW5nID0gcGFpbnRlci0+dGVzdFJlbmRlckhpbnQoUVBhaW50ZXI6
OkFudGlhbGlhc2luZyk7CisgICAgICAgIG1fcHJldmlvdXNBbnRpYWxpYXNpbmcgPSBwYWludGVy
LT50ZXN0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nKTsKICAgICAgICAgcGFpbnRl
ci0+c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCBmYWxzZSk7CiAgICAgfQog
fQpAQCAtODk1LDggKzkwMCw4IEBAIHZvaWQgU3R5bGVQYWludGVyOjppbml0KEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCkKIFN0eWxlUGFpbnRlcjo6flN0eWxlUGFpbnRlcigpCiB7CiAgICAgaWYg
KHBhaW50ZXIpIHsKLSAgICAgICAgcGFpbnRlci0+c2V0QnJ1c2gob2xkQnJ1c2gpOwotICAgICAg
ICBwYWludGVyLT5zZXRSZW5kZXJIaW50cyhRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCBvbGRBbnRp
YWxpYXNpbmcpOworICAgICAgICBwYWludGVyLT5zZXRCcnVzaChtX3ByZXZpb3VzQnJ1c2gpOwor
ICAgICAgICBwYWludGVyLT5zZXRSZW5kZXJIaW50cyhRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCBt
X3ByZXZpb3VzQW50aWFsaWFzaW5nKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3F0L1JlbmRlclRoZW1lUXQuaAppbmRleCA2YzBhYjA2YjdjNzk4NWI1ODQ1YTkzMTY0ZTA1
ZmM5NDc4MTBkMDkwLi42MThmYWQzOTE3YTUxMGUwYTVjZGJkZjEwODc4M2U1ZDM1MTg0NTM5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5oCkBAIC0xODUsOCAr
MTg1LDggQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgaW5pdChHcmFwaGljc0NvbnRleHQqKTsKIAog
cHJpdmF0ZToKLSAgICBRQnJ1c2ggb2xkQnJ1c2g7Ci0gICAgYm9vbCBvbGRBbnRpYWxpYXNpbmc7
CisgICAgUUJydXNoIG1fcHJldmlvdXNCcnVzaDsKKyAgICBib29sIG1fcHJldmlvdXNBbnRpYWxp
YXNpbmc7CiAKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Jl
bmRlclRoZW1lUXRNb2JpbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVy
VGhlbWVRdE1vYmlsZS5jcHAKaW5kZXggZGVmNWY1YmI5NjAwODMxZDhlZTZmMTEyOGQ1ZTFlYWJm
Y2RhY2E5Yy4uNDUxZTVjYmY0YjI0Y2FhYzViY2IzODJkZjk5Mzg1OGQwZGEyNmVkYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5jcHAK
QEAgLTU1LDIzICs1NSwzMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFj
ZSBIVE1MTmFtZXM7CiAKLS8vIENvbnN0YW50cyBleHRyYWN0ZWQgZnJvbSBRQ29tbW9uU3R5bGUg
YW5kIFFXaW5kb3dzU3R5bGUKLXN0YXRpYyBjb25zdCBpbnQgYXJyb3dCb3hXaWR0aCA9IDE2Owor
Ly8gQ29uc3RhbnRzIHVzZWQgYnkgdGhlIG1vYmlsZSB0aGVtZQorc3RhdGljIGNvbnN0IGludCBh
cnJvd0JveFdpZHRoID0gMjY7CiBzdGF0aWMgY29uc3QgaW50IGZyYW1lV2lkdGggPSAyOwotc3Rh
dGljIGNvbnN0IGludCBjaGVja0JveFdpZHRoID0gMTM7Ci1zdGF0aWMgY29uc3QgaW50IHJhZGlv
V2lkdGggPSAxMjsKK3N0YXRpYyBjb25zdCBpbnQgY2hlY2tCb3hXaWR0aCA9IDIxOworc3RhdGlj
IGNvbnN0IGludCByYWRpb1dpZHRoID0gMjE7CiBzdGF0aWMgY29uc3QgaW50IGJ1dHRvbkljb25T
aXplID0gMTY7Ci1zdGF0aWMgY29uc3QgaW50IHNsaWRlcldpZHRoID0gMTE7Ci1zdGF0aWMgY29u
c3QgaW50IHNsaWRlckhlaWdodCA9IDA7Ci0KLS8vIE90aGVyIGNvbnN0YW50cyB1c2VkIGJ5IHRo
ZSBtb2JpbGUgdGhlbWUKLXN0YXRpYyBmbG9hdCBidXR0b25QYWRkaW5nTGVmdCA9IDE4Owotc3Rh
dGljIGZsb2F0IGJ1dHRvblBhZGRpbmdSaWdodCA9IDE4Owotc3RhdGljIGZsb2F0IGJ1dHRvblBh
ZGRpbmdUb3AgPSAyOwotc3RhdGljIGZsb2F0IGJ1dHRvblBhZGRpbmdCb3R0b20gPSAzOwotc3Rh
dGljIGZsb2F0IG1lbnVMaXN0UGFkZGluZyA9IDk7Ci1zdGF0aWMgZmxvYXQgdGV4dEZpZWxkUGFk
ZGluZyA9IDU7Ci0KK3N0YXRpYyBjb25zdCBpbnQgc2xpZGVyU2l6ZSA9IDE4OworCitzdGF0aWMg
Y29uc3QgZmxvYXQgYnV0dG9uUGFkZGluZ0xlZnQgPSAxODsKK3N0YXRpYyBjb25zdCBmbG9hdCBi
dXR0b25QYWRkaW5nUmlnaHQgPSAxODsKK3N0YXRpYyBjb25zdCBmbG9hdCBidXR0b25QYWRkaW5n
VG9wID0gMjsKK3N0YXRpYyBjb25zdCBmbG9hdCBidXR0b25QYWRkaW5nQm90dG9tID0gMzsKK3N0
YXRpYyBjb25zdCBmbG9hdCBtZW51TGlzdFBhZGRpbmcgPSA5Oworc3RhdGljIGNvbnN0IGZsb2F0
IHRleHRGaWVsZFBhZGRpbmcgPSA1Oworc3RhdGljIGNvbnN0IGZsb2F0IHJhZGl1c0ZhY3RvciA9
IDAuMzY7CisjaWYgRU5BQkxFKFBST0dSRVNTX1RBRykKK3N0YXRpYyBjb25zdCBmbG9hdCBwcm9n
cmVzc0JhckNodW5rUGVyY2VudGFnZSA9IDAuMjsKK3N0YXRpYyBjb25zdCBpbnQgcHJvZ3Jlc3NB
bmltYXRpb25HcmFudWxhcml0eSA9IDI7CisjZW5kaWYKK3N0YXRpYyBjb25zdCBmbG9hdCBzbGlk
ZXJHcm9vdmVCb3JkZXJSYXRpbyA9IDAuMjsKK3N0YXRpYyBjb25zdCBRQ29sb3IgZGFya0NvbG9y
KDQwLCA0MCwgNDApOworc3RhdGljIGNvbnN0IFFDb2xvciBoaWdobGlnaHRDb2xvcigxNiwgMTI4
LCAyMjEpOworc3RhdGljIGNvbnN0IFFDb2xvciBidXR0b25HcmFkaWVudEJvdHRvbSgyNDUsIDI0
NSwgMjQ1KTsKK3N0YXRpYyBjb25zdCBRQ29sb3Igc2hhZG93Q29sb3IoODAsIDgwLCA4MCwgMTYw
KTsKK3N0YXRpYyBjb25zdCBRUGVuIGJvcmRlclBlbihkYXJrQ29sb3IsIDAuMywgUXQ6OlNvbGlk
TGluZSwgUXQ6OlJvdW5kQ2FwLCBRdDo6Um91bmRKb2luKTsKIAogc3RhdGljIGlubGluZSB2b2lk
IGRyYXdSZWN0YW5ndWxhckNvbnRyb2xCYWNrZ3JvdW5kKFFQYWludGVyKiBwYWludGVyLCBjb25z
dCBRUGVuJiBwZW4sIGNvbnN0IFFSZWN0JiByZWN0LCBjb25zdCBRQnJ1c2gmIGJydXNoKQogewpA
QCAtODEsMTMgKzg5LDE5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkcmF3UmVjdGFuZ3VsYXJDb250
cm9sQmFja2dyb3VuZChRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVBlCiAgICAgcGFpbnRlci0+
c2V0UGVuKHBlbik7CiAgICAgcGFpbnRlci0+c2V0QnJ1c2goYnJ1c2gpOwogCi0gICAgaW50IGxp
bmUgPSAxOwotICAgIHBhaW50ZXItPmRyYXdSb3VuZGVkUmVjdChyZWN0LmFkanVzdGVkKGxpbmUs
IGxpbmUsIC1saW5lLCAtbGluZSksCi0gICAgICAgICAgICAvKiB4UmFkaXVzICovIDUuMCwgLyog
eVJhZGlvdXMgKi8gNS4wKTsKKyAgICBjb25zdCBpbnQgbGluZSA9IDE7CisgICAgY29uc3QgZG91
YmxlIHJhZGl1cyA9IHJhZGl1c0ZhY3RvciAqIHJlY3QuaGVpZ2h0KCk7CisgICAgcGFpbnRlci0+
ZHJhd1JvdW5kZWRSZWN0KHJlY3QuYWRqdXN0ZWQobGluZSwgbGluZSwgLWxpbmUsIC1saW5lKSwg
cmFkaXVzLCByYWRpdXMpOwogICAgIHBhaW50ZXItPnNldFBlbihvbGRQZW4pOwogICAgIHBhaW50
ZXItPnNldEJydXNoKG9sZEJydXNoKTsKIH0KIAorc3RhdGljIGlubGluZSBRUmVjdCBzaHJpbmtS
ZWN0VG9TcXVhcmUoY29uc3QgUVJlY3QmIHJlY3QpCit7CisgICAgY29uc3QgaW50IHNpZGUgPSBx
TWluKHJlY3QuaGVpZ2h0KCksIHJlY3Qud2lkdGgoKSk7CisgICAgcmV0dXJuIFFSZWN0KHJlY3Qu
dG9wTGVmdCgpLCBRU2l6ZShzaWRlLCBzaWRlKSk7Cit9CisKIFFTaGFyZWRQb2ludGVyPFN0eWxl
UGFpbnRlcj4gUmVuZGVyVGhlbWVRdE1vYmlsZTo6Z2V0U3R5bGVQYWludGVyKGNvbnN0IFBhaW50
SW5mbyYgcGkpCiB7CiAgICAgcmV0dXJuIFFTaGFyZWRQb2ludGVyPFN0eWxlUGFpbnRlcj4obmV3
IFN0eWxlUGFpbnRlck1vYmlsZSh0aGlzLCBwaSkpOwpAQCAtOTYsMjkxICsxMTAsMjk4IEBAIFFT
aGFyZWRQb2ludGVyPFN0eWxlUGFpbnRlcj4gUmVuZGVyVGhlbWVRdE1vYmlsZTo6Z2V0U3R5bGVQ
YWludGVyKGNvbnN0IFBhaW50SW5mCiBTdHlsZVBhaW50ZXJNb2JpbGU6OlN0eWxlUGFpbnRlck1v
YmlsZShSZW5kZXJUaGVtZVF0TW9iaWxlKiB0aGVtZSwgY29uc3QgUGFpbnRJbmZvJiBwYWludElu
Zm8pCiAgICAgOiBTdHlsZVBhaW50ZXIodGhlbWUsIHBhaW50SW5mbykKIHsKKyAgICBtX3ByZXZp
b3VzU21vb3RoUGl4bWFwVHJhbnNmb3JtID0gcGFpbnRlci0+dGVzdFJlbmRlckhpbnQoUVBhaW50
ZXI6OlNtb290aFBpeG1hcFRyYW5zZm9ybSk7CisgICAgaWYgKCFtX3ByZXZpb3VzU21vb3RoUGl4
bWFwVHJhbnNmb3JtKQorICAgICAgICBwYWludGVyLT5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpT
bW9vdGhQaXhtYXBUcmFuc2Zvcm0pOwogfQogCi12b2lkIFN0eWxlUGFpbnRlck1vYmlsZTo6ZHJh
d0NoZWNrZXIoUVBhaW50ZXIqIHBhaW50ZXIsIGludCBzaXplLCBRQ29sb3IgY29sb3IpIGNvbnN0
CitTdHlsZVBhaW50ZXJNb2JpbGU6On5TdHlsZVBhaW50ZXJNb2JpbGUoKQogewotICAgIGludCBi
b3JkZXIgPSBxTWluKHFNYXgoMSwgaW50KDAuMiAqIHNpemUpKSwgNik7Ci0gICAgaW50IGNoZWNr
ZXJTaXplID0gcU1heChzaXplIC0gMiAqIGJvcmRlciwgMyk7Ci0gICAgaW50IHdpZHRoID0gY2hl
Y2tlclNpemUgLyAzOwotICAgIGludCBtaWRkbGUgPSBxTWF4KDMgKiBjaGVja2VyU2l6ZSAvIDcs
IDMpOwotICAgIGludCB4ID0gKChzaXplIC0gY2hlY2tlclNpemUpID4+IDEpOwotICAgIGludCB5
ID0gKChzaXplIC0gY2hlY2tlclNpemUpID4+IDEpICsgKGNoZWNrZXJTaXplIC0gd2lkdGggLSBt
aWRkbGUpOwotICAgIFFWZWN0b3I8UUxpbmVGPiBsaW5lcyhjaGVja2VyU2l6ZSArIDEpOwotICAg
IHBhaW50ZXItPnNldFBlbihjb2xvcik7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtaWRkbGU7
ICsraSkgewotICAgICAgICBsaW5lc1tpXSA9IFFMaW5lRih4LCB5LCB4LCB5ICsgd2lkdGgpOwot
ICAgICAgICArK3g7Ci0gICAgICAgICsreTsKLSAgICB9Ci0gICAgZm9yIChpbnQgaSA9IG1pZGRs
ZTsgaSA8PSBjaGVja2VyU2l6ZTsgKytpKSB7Ci0gICAgICAgIGxpbmVzW2ldID0gUUxpbmVGKHgs
IHksIHgsIHkgKyB3aWR0aCk7Ci0gICAgICAgICsreDsKLSAgICAgICAgLS15OwotICAgIH0KLSAg
ICBwYWludGVyLT5kcmF3TGluZXMobGluZXMuY29uc3REYXRhKCksIGxpbmVzLnNpemUoKSk7Cisg
ICAgcGFpbnRlci0+c2V0UmVuZGVySGludHMoUVBhaW50ZXI6OlNtb290aFBpeG1hcFRyYW5zZm9y
bSwgbV9wcmV2aW91c1Ntb290aFBpeG1hcFRyYW5zZm9ybSk7Cit9CisKK3ZvaWQgU3R5bGVQYWlu
dGVyTW9iaWxlOjpkcmF3Q2hlY2thYmxlQmFja2dyb3VuZChRUGFpbnRlciogcGFpbnRlciwgY29u
c3QgUVJlY3QmIHJlY3QsIGJvb2wgY2hlY2tlZCwgYm9vbCBlbmFibGVkKSBjb25zdAoreworICAg
IFFCcnVzaCBicnVzaDsKKyAgICBpZiAoY2hlY2tlZCAmJiBlbmFibGVkKSB7CisgICAgICAgIFFM
aW5lYXJHcmFkaWVudCBncmFkaWVudDsKKyAgICAgICAgZ3JhZGllbnQuc2V0U3RhcnQocmVjdC5i
b3R0b21MZWZ0KCkpOworICAgICAgICBncmFkaWVudC5zZXRGaW5hbFN0b3AocmVjdC50b3BMZWZ0
KCkpOworICAgICAgICBncmFkaWVudC5zZXRDb2xvckF0KDAuMCwgaGlnaGxpZ2h0Q29sb3IpOwor
ICAgICAgICBncmFkaWVudC5zZXRDb2xvckF0KDEuMCwgaGlnaGxpZ2h0Q29sb3IubGlnaHRlcigp
KTsKKyAgICAgICAgYnJ1c2ggPSBncmFkaWVudDsKKyAgICB9IGVsc2UKKyAgICAgICAgYnJ1c2gg
PSBRdDo6bGlnaHRHcmF5OworICAgIGRyYXdSZWN0YW5ndWxhckNvbnRyb2xCYWNrZ3JvdW5kKHBh
aW50ZXIsIGJvcmRlclBlbiwgcmVjdCwgYnJ1c2gpOworfQorCitRU2l6ZSBTdHlsZVBhaW50ZXJN
b2JpbGU6OnNpemVGb3JQYWludGVyU2NhbGUoY29uc3QgUVJlY3QmIHJlY3QpIGNvbnN0Cit7Cisg
ICAgY29uc3QgUVJlY3QgbWFwcGVkUmVjdCA9IHBhaW50ZXItPnRyYW5zZm9ybSgpLm1hcFJlY3Qo
cmVjdCk7CisgICAgcmV0dXJuIG1hcHBlZFJlY3Quc2l6ZSgpOwogfQogCi1RUGl4bWFwIFN0eWxl
UGFpbnRlck1vYmlsZTo6ZmluZENoZWNrZXIoY29uc3QgUVJlY3QmIHJlY3QsIGJvb2wgZGlzYWJs
ZWQpIGNvbnN0Cit2b2lkIFN0eWxlUGFpbnRlck1vYmlsZTo6ZHJhd0NoZWNrZXIoUVBhaW50ZXIq
IHBhaW50ZXIsIGNvbnN0IFFSZWN0JiByZWN0LCBjb25zdCBRQ29sb3ImIGNvbG9yKSBjb25zdAog
ewotICAgIGludCBzaXplID0gcU1pbihyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAg
IHBhaW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgdHJ1ZSk7Cisg
ICAgUVBlbiBwZW4oUXQ6OmRhcmtHcmF5KTsKKyAgICBwZW4uc2V0Q29zbWV0aWModHJ1ZSk7Cisg
ICAgcGFpbnRlci0+c2V0UGVuKHBlbik7CisgICAgcGFpbnRlci0+c2NhbGUocmVjdC53aWR0aCgp
LCByZWN0LmhlaWdodCgpKTsKKyAgICBRUGFpbnRlclBhdGggcGF0aDsKKyAgICBwYXRoLm1vdmVU
bygwLjE4LCAwLjQ3KTsKKyAgICBwYXRoLmxpbmVUbygwLjI1LCAwLjQpOworICAgIHBhdGgubGlu
ZVRvKDAuNCwgMC41NSk7CisgICAgcGF0aC5xdWFkVG8oMC42NCwgMC4yOSwgMC43OCwgMC4yKTsK
KyAgICBwYXRoLmxpbmVUbygwLjgsIDAuMjUpOworICAgIHBhdGgucXVhZFRvKDAuNTMsIDAuNTUs
IDAuNDUsIDAuNzUpOworICAgIHBhdGguY2xvc2VTdWJwYXRoKCk7CisgICAgcGFpbnRlci0+c2V0
QnJ1c2goY29sb3IpOworICAgIHBhaW50ZXItPmRyYXdQYXRoKHBhdGgpOworfQorCitRUGl4bWFw
IFN0eWxlUGFpbnRlck1vYmlsZTo6ZmluZENoZWNrQm94KGNvbnN0IFFTaXplJiBzaXplLCBib29s
IGNoZWNrZWQsIGJvb2wgZW5hYmxlZCkgY29uc3QKK3sKKyAgICBBU1NFUlQoc2l6ZS53aWR0aCgp
ID09IHNpemUuaGVpZ2h0KCkpOwogICAgIFFQaXhtYXAgcmVzdWx0OwotICAgIHN0YXRpYyBjb25z
dCBRU3RyaW5nIHByZWZpeCA9IFFMYXRpbjFTdHJpbmcoIiRxdC1tYWVtbzUtbW9iaWxlLXRoZW1l
LWNoZWNrZXItIik7Ci0gICAgUVN0cmluZyBrZXkgPSBwcmVmaXggKyBRU3RyaW5nOjpudW1iZXIo
c2l6ZSkgKyBRTGF0aW4xU3RyaW5nKCItIikgKyAoZGlzYWJsZWQgPyBRTGF0aW4xU3RyaW5nKCJk
aXNhYmxlZCIpIDogUUxhdGluMVN0cmluZygiZW5hYmxlZCIpKTsKKyAgICBzdGF0aWMgY29uc3Qg
UVN0cmluZyBwcmVmaXggPSBRTGF0aW4xU3RyaW5nKCIkcXQtd2Via2l0LW1vYmlsZS10aGVtZS1j
aGVja2JveC0iKTsKKyAgICBRU3RyaW5nIGtleSA9IHByZWZpeCArIFFTdHJpbmc6Om51bWJlcihz
aXplLndpZHRoKCkpICsgUUxhdGluMVN0cmluZygiLSIpICsgKGVuYWJsZWQgPyBRTGF0aW4xU3Ry
aW5nKCJvbiIpIDogUUxhdGluMVN0cmluZygib2ZmIikpCisgICAgICAgICAgICAgICAgICArIChj
aGVja2VkID8gUUxhdGluMVN0cmluZygiLWNoZWNrZWQiKSA6IFFTdHJpbmcoKSk7CiAgICAgaWYg
KCFRUGl4bWFwQ2FjaGU6OmZpbmQoa2V5LCByZXN1bHQpKSB7Ci0gICAgICAgIHJlc3VsdCA9IFFQ
aXhtYXAoc2l6ZSwgc2l6ZSk7CisgICAgICAgIHJlc3VsdCA9IFFQaXhtYXAoc2l6ZSk7CiAgICAg
ICAgIHJlc3VsdC5maWxsKFF0Ojp0cmFuc3BhcmVudCk7CiAgICAgICAgIFFQYWludGVyIHBhaW50
ZXIoJnJlc3VsdCk7Ci0gICAgICAgIGRyYXdDaGVja2VyKCZwYWludGVyLCBzaXplLCBkaXNhYmxl
ZCA/IFF0OjpsaWdodEdyYXkgOiBRdDo6ZGFya0dyYXkpOworICAgICAgICBRUmVjdCByZWN0KFFQ
b2ludCgwLCAwKSwgc2l6ZSk7CisgICAgICAgIGRyYXdDaGVja2FibGVCYWNrZ3JvdW5kKCZwYWlu
dGVyLCByZWN0LCBjaGVja2VkLCBlbmFibGVkKTsKKyAgICAgICAgaWYgKGNoZWNrZWQgfHwgIWVu
YWJsZWQpCisgICAgICAgICAgICBkcmF3Q2hlY2tlcigmcGFpbnRlciwgcmVjdCwgZW5hYmxlZCA/
IFF0Ojp3aGl0ZSA6IFF0OjpncmF5KTsKICAgICAgICAgUVBpeG1hcENhY2hlOjppbnNlcnQoa2V5
LCByZXN1bHQpOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFN0eWxlUGFp
bnRlck1vYmlsZTo6ZHJhd1JhZGlvKFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRU2l6ZSYgc2l6
ZSwgYm9vbCBjaGVja2VkLCBRQ29sb3IgY29sb3IpIGNvbnN0Cit2b2lkIFN0eWxlUGFpbnRlck1v
YmlsZTo6ZHJhd1JhZGlvKFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRU2l6ZSYgc2l6ZSwgYm9v
bCBjaGVja2VkLCBib29sIGVuYWJsZWQpIGNvbnN0CiB7Ci0gICAgcGFpbnRlci0+c2V0UmVuZGVy
SGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCB0cnVlKTsKLQotICAgIC8vIGdldCBtaW5vciBz
aXplIHRvIGRvIG5vdCBwYWludCBhIHdpZGUgZWxpcHNlCi0gICAgcXJlYWwgc3F1YXJlU2l6ZSA9
IHFNaW4oc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKLSAgICAvLyBkZWZsYXRlIG9uZSBw
aXhlbAotICAgIFFSZWN0IHJlY3QgPSBRUmVjdChRUG9pbnQoMSwgMSksIFFTaXplKHNxdWFyZVNp
emUgLSAyLCBzcXVhcmVTaXplIC0gMikpOwotICAgIGNvbnN0IFFQb2ludCBjZW50ZXJHcmFkaWVu
dChyZWN0LmJvdHRvbVJpZ2h0KCkgKiAwLjcpOworICAgIEFTU0VSVChzaXplLndpZHRoKCkgPT0g
c2l6ZS5oZWlnaHQoKSk7CisgICAgUVJlY3QgcmVjdChRUG9pbnQoMCwgMCksIHNpemUpOwogCi0g
ICAgUVJhZGlhbEdyYWRpZW50IHJhZGlhbEdyYWRpZW50KGNlbnRlckdyYWRpZW50LCBjZW50ZXJH
cmFkaWVudC54KCkgLSAxKTsKLSAgICByYWRpYWxHcmFkaWVudC5zZXRDb2xvckF0KDAuMCwgUXQ6
OndoaXRlKTsKLSAgICByYWRpYWxHcmFkaWVudC5zZXRDb2xvckF0KDAuNiwgUXQ6OndoaXRlKTsK
LSAgICByYWRpYWxHcmFkaWVudC5zZXRDb2xvckF0KDEuMCwgY29sb3IpOwotCi0gICAgcGFpbnRl
ci0+c2V0UGVuKGNvbG9yKTsKLSAgICBwYWludGVyLT5zZXRCcnVzaChjb2xvcik7Ci0gICAgcGFp
bnRlci0+ZHJhd0VsbGlwc2UocmVjdCk7Ci0gICAgcGFpbnRlci0+c2V0QnJ1c2gocmFkaWFsR3Jh
ZGllbnQpOwotICAgIHBhaW50ZXItPmRyYXdFbGxpcHNlKHJlY3QpOwotCi0gICAgaW50IGJvcmRl
ciA9IDAuMSAqIChyZWN0LndpZHRoKCkgKyByZWN0LmhlaWdodCgpKTsKLSAgICBib3JkZXIgPSBx
TWluKHFNYXgoMiwgYm9yZGVyKSwgMTApOworICAgIGRyYXdDaGVja2FibGVCYWNrZ3JvdW5kKHBh
aW50ZXIsIHJlY3QsIGNoZWNrZWQsIGVuYWJsZWQpOworICAgIGNvbnN0IGludCBib3JkZXIgPSBz
aXplLndpZHRoKCkgLyA0OwogICAgIHJlY3QuYWRqdXN0KGJvcmRlciwgYm9yZGVyLCAtYm9yZGVy
LCAtYm9yZGVyKTsKLSAgICBpZiAoY2hlY2tlZCkgewotICAgICAgICBwYWludGVyLT5zZXRQZW4o
UXQ6Ok5vUGVuKTsKLSAgICAgICAgcGFpbnRlci0+c2V0QnJ1c2goY29sb3IpOwotICAgICAgICBw
YWludGVyLT5kcmF3RWxsaXBzZShyZWN0KTsKLSAgICB9CisgICAgZHJhd1JlY3Rhbmd1bGFyQ29u
dHJvbEJhY2tncm91bmQocGFpbnRlciwgYm9yZGVyUGVuLCByZWN0LCBlbmFibGVkID8gUXQ6Ondo
aXRlIDogUXQ6OmdyYXkpOwogfQogCi1RUGl4bWFwIFN0eWxlUGFpbnRlck1vYmlsZTo6ZmluZFJh
ZGlvKGNvbnN0IFFTaXplJiBzaXplLCBib29sIGNoZWNrZWQsIGJvb2wgZGlzYWJsZWQpIGNvbnN0
CitRUGl4bWFwIFN0eWxlUGFpbnRlck1vYmlsZTo6ZmluZFJhZGlvKGNvbnN0IFFTaXplJiBzaXpl
LCBib29sIGNoZWNrZWQsIGJvb2wgZW5hYmxlZCkgY29uc3QKIHsKICAgICBRUGl4bWFwIHJlc3Vs
dDsKLSAgICBzdGF0aWMgY29uc3QgUVN0cmluZyBwcmVmaXggPSBRTGF0aW4xU3RyaW5nKCIkcXQt
bWFlbW81LW1vYmlsZS10aGVtZS1yYWRpby0iKTsKLSAgICBRU3RyaW5nIGtleSA9IHByZWZpeCAr
IFFTdHJpbmc6Om51bWJlcihzaXplLndpZHRoKCkpICsgUUxhdGluMVN0cmluZygiLSIpICsgUVN0
cmluZzo6bnVtYmVyKHNpemUuaGVpZ2h0KCkpICsgUUxhdGluMVN0cmluZygiLSIpCi0gICAgICAg
ICsgKGRpc2FibGVkID8gUUxhdGluMVN0cmluZygiZGlzYWJsZWQiKSA6IFFMYXRpbjFTdHJpbmco
ImVuYWJsZWQiKSkgKyAoY2hlY2tlZCA/IFFMYXRpbjFTdHJpbmcoIi1jaGVja2VkIikgOiBRTGF0
aW4xU3RyaW5nKCIiKSk7CisgICAgc3RhdGljIGNvbnN0IFFTdHJpbmcgcHJlZml4ID0gUUxhdGlu
MVN0cmluZygiJHF0LXdlYmtpdC1tb2JpbGUtdGhlbWUtcmFkaW8tIik7CisgICAgUVN0cmluZyBr
ZXkgPSBwcmVmaXggKyBRU3RyaW5nOjpudW1iZXIoc2l6ZS53aWR0aCgpKSArIFFMYXRpbjFTdHJp
bmcoIi0iKSArIChlbmFibGVkID8gUUxhdGluMVN0cmluZygib24iKSA6IFFMYXRpbjFTdHJpbmco
Im9mZiIpKQorICAgICAgICAgICAgICAgICAgKyAoY2hlY2tlZCA/IFFMYXRpbjFTdHJpbmcoIi1j
aGVja2VkIikgOiBRU3RyaW5nKCkpOwogICAgIGlmICghUVBpeG1hcENhY2hlOjpmaW5kKGtleSwg
cmVzdWx0KSkgewogICAgICAgICByZXN1bHQgPSBRUGl4bWFwKHNpemUpOwogICAgICAgICByZXN1
bHQuZmlsbChRdDo6dHJhbnNwYXJlbnQpOwogICAgICAgICBRUGFpbnRlciBwYWludGVyKCZyZXN1
bHQpOwotICAgICAgICBkcmF3UmFkaW8oJnBhaW50ZXIsIHNpemUsIGNoZWNrZWQsIGRpc2FibGVk
ID8gUXQ6OmxpZ2h0R3JheSA6IFF0OjpkYXJrR3JheSk7CisgICAgICAgIGRyYXdSYWRpbygmcGFp
bnRlciwgc2l6ZSwgY2hlY2tlZCwgZW5hYmxlZCk7CiAgICAgICAgIFFQaXhtYXBDYWNoZTo6aW5z
ZXJ0KGtleSwgcmVzdWx0KTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBT
dHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdNdWx0aXBsZUNvbWJvQnV0dG9uKFFQYWludGVyKiBwYWlu
dGVyLCBjb25zdCBRU2l6ZSYgc2l6ZSwgUUNvbG9yIGNvbG9yKSBjb25zdAordm9pZCBTdHlsZVBh
aW50ZXJNb2JpbGU6OmRyYXdNdWx0aXBsZUNvbWJvQnV0dG9uKFFQYWludGVyKiBwYWludGVyLCBj
b25zdCBRU2l6ZSYgc2l6ZSwgY29uc3QgUUNvbG9yJiBjb2xvcikgY29uc3QKIHsKLSAgICBpbnQg
cmVjdFdpZHRoID0gc2l6ZS53aWR0aCgpIC0gMTsKLSAgICBpbnQgd2lkdGggPSBxTWF4KDIsIHJl
Y3RXaWR0aCA+PiAzKTsKLSAgICBpbnQgZGlzdGFuY2UgPSAocmVjdFdpZHRoIC0gMyAqIHdpZHRo
KSA+PiAxOwotICAgIGludCB0b3AgPSAoc2l6ZS5oZWlnaHQoKSAtIHdpZHRoKSA+PiAxOworICAg
IGNvbnN0IGludCBkb3RTaXplID0gc2l6ZS5oZWlnaHQoKSAtIDE7CiAKICAgICBwYWludGVyLT5z
ZXRQZW4oY29sb3IpOwogICAgIHBhaW50ZXItPnNldEJydXNoKGNvbG9yKTsKIAotICAgIHBhaW50
ZXItPmRyYXdSZWN0KDAsIHRvcCwgd2lkdGgsIHdpZHRoKTsKLSAgICBwYWludGVyLT5kcmF3UmVj
dCh3aWR0aCArIGRpc3RhbmNlLCB0b3AsIHdpZHRoLCB3aWR0aCk7Ci0gICAgcGFpbnRlci0+ZHJh
d1JlY3QoMiAqICh3aWR0aCArIGRpc3RhbmNlKSwgdG9wLCB3aWR0aCwgd2lkdGgpOworICAgIHBh
aW50ZXItPmRyYXdFbGxpcHNlKDAsIDAsIGRvdFNpemUsIGRvdFNpemUpOworICAgIHBhaW50ZXIt
PmRyYXdFbGxpcHNlKGRvdFNpemUgKiAyLCAwLCBkb3RTaXplLCBkb3RTaXplKTsKKyAgICBwYWlu
dGVyLT5kcmF3RWxsaXBzZSg0ICogZG90U2l6ZSwgMCwgZG90U2l6ZSwgZG90U2l6ZSk7CiB9CiAK
LXZvaWQgU3R5bGVQYWludGVyTW9iaWxlOjpkcmF3U2ltcGxlQ29tYm9CdXR0b24oUVBhaW50ZXIq
IHBhaW50ZXIsIGNvbnN0IFFTaXplJiBzaXplLCBRQ29sb3IgY29sb3IpIGNvbnN0Cit2b2lkIFN0
eWxlUGFpbnRlck1vYmlsZTo6ZHJhd1NpbXBsZUNvbWJvQnV0dG9uKFFQYWludGVyKiBwYWludGVy
LCBjb25zdCBRU2l6ZSYgc2l6ZSwgY29uc3QgUUNvbG9yJiBjb2xvcikgY29uc3QKIHsKLSAgICBp
bnQgd2lkdGggPSBzaXplLndpZHRoKCk7Ci0gICAgaW50IG1pZGxlID0gd2lkdGggPj4gMTsKLSAg
ICBRVmVjdG9yPFFMaW5lPiBsaW5lcyh3aWR0aCArIDEpOworICAgIGNvbnN0IGludCB3aWR0aCA9
IHNpemUud2lkdGgoKTsKKyAgICBjb25zdCBpbnQgaGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKTsKKyAg
ICBjb25zdCBpbnQgaG9yaXpvbnRhbENlbnRlciA9IHdpZHRoIC8gMjsKKyAgICBjb25zdCBpbnQg
dmVydGljYWxDZW50ZXIgPSBoZWlnaHQgLyAyOworICAgIGNvbnN0IGludCBzcGFjaW5nID0gMSAr
IGhlaWdodCAvIDE1OwogCi0gICAgZm9yIChpbnQgeCA9IDAsIHkgPSAwOyAgeCA8IG1pZGxlOyB4
KyssIHkrKykgewotICAgICAgICBsaW5lc1t4XSA9IFFMaW5lKHgsIHksIHgsIHkgKyAyKTsKLSAg
ICAgICAgbGluZXNbeCArIG1pZGxlXSA9IFFMaW5lKHdpZHRoIC0geCAtIDEsIHksIHdpZHRoIC0g
eCAtIDEsIHkgKyAyKTsKKyAgICBRVmVjdG9yPFFMaW5lPiBsaW5lcygyICogd2lkdGgpOworICAg
IGludCBsZW5ndGggPSAwOworICAgIGZvciAoaW50IHggPSAwOyB4IDwgaG9yaXpvbnRhbENlbnRl
ciA7IHgrKykgeworICAgICAgICBsZW5ndGgrKzsKKyAgICAgICAgbGluZXNbeF0gPSBRTGluZSh4
LCB2ZXJ0aWNhbENlbnRlciArIHNwYWNpbmcsIHgsIHZlcnRpY2FsQ2VudGVyICsgc3BhY2luZyAr
IGxlbmd0aCk7CisgICAgICAgIGxpbmVzWzIgKiB3aWR0aCAtIHggLSAxXSA9IFFMaW5lKHgsIHZl
cnRpY2FsQ2VudGVyIC0gc3BhY2luZywgeCwgdmVydGljYWxDZW50ZXIgLSBzcGFjaW5nIC0gbGVu
Z3RoKTsKKyAgICB9CisgICAgZm9yIChpbnQgeCA9IGhvcml6b250YWxDZW50ZXI7IHggPCB3aWR0
aDsgeCsrKSB7CisgICAgICAgIGxpbmVzW3hdID0gUUxpbmUoeCwgdmVydGljYWxDZW50ZXIgKyBz
cGFjaW5nLCB4LCB2ZXJ0aWNhbENlbnRlciArIHNwYWNpbmcgKyBsZW5ndGgpOworICAgICAgICBs
aW5lc1syICogd2lkdGggLSB4IC0gMV0gPSBRTGluZSh4LCB2ZXJ0aWNhbENlbnRlciAtIHNwYWNp
bmcsIHgsIHZlcnRpY2FsQ2VudGVyIC0gc3BhY2luZyAtIGxlbmd0aCk7CisgICAgICAgIGxlbmd0
aC0tOwogICAgIH0KLSAgICAvLyBKdXN0IHRvIGVuc3VyZSB0aGUgbGluZXMnIGludGVyc2VjdGlv
bi4KLSAgICBsaW5lc1t3aWR0aF0gPSBRTGluZShtaWRsZSwgbWlkbGUsIG1pZGxlLCBtaWRsZSAr
IDIpOwogCiAgICAgcGFpbnRlci0+c2V0UGVuKGNvbG9yKTsKICAgICBwYWludGVyLT5zZXRCcnVz
aChjb2xvcik7CiAgICAgcGFpbnRlci0+ZHJhd0xpbmVzKGxpbmVzKTsKIH0KIAotUVNpemUgU3R5
bGVQYWludGVyTW9iaWxlOjpnZXRCdXR0b25JbWFnZVNpemUoY29uc3QgUVNpemUmIGJ1dHRvblNp
emUpIGNvbnN0CitRU2l6ZSBTdHlsZVBhaW50ZXJNb2JpbGU6OmdldEJ1dHRvbkltYWdlU2l6ZShj
b25zdCBRU2l6ZSYgYnV0dG9uU2l6ZSwgYm9vbCBtdWx0aXBsZSkgY29uc3QKIHsKLSAgICBjb25z
dCBpbnQgYm9yZGVyID0gcU1heCgzLCBidXR0b25TaXplLndpZHRoKCkgPj4gMykgPDwgMTsKLQot
ICAgIGludCB3aWR0aCA9IGJ1dHRvblNpemUud2lkdGgoKSAtIGJvcmRlcjsKLSAgICBpbnQgaGVp
Z2h0ID0gYnV0dG9uU2l6ZS5oZWlnaHQoKSAtIGJvcmRlcjsKKyAgICBpZiAobXVsdGlwbGUpCisg
ICAgICAgIHJldHVybiBRU2l6ZShidXR0b25TaXplLndpZHRoKCksIGJ1dHRvblNpemUud2lkdGgo
KSAvIDUpOwogCi0gICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQotICAgICAgICByZXR1
cm4gUVNpemUoKTsKLQotICAgIGlmIChoZWlnaHQgPj0gKHdpZHRoID4+IDEpKQotICAgICAgICB3
aWR0aCA9IHdpZHRoID4+IDEgPDwgMTsKLSAgICBlbHNlCi0gICAgICAgIHdpZHRoID0gaGVpZ2h0
IDw8IDE7Ci0KLSAgICByZXR1cm4gUVNpemUod2lkdGggKyAxLCB3aWR0aCk7CisgICAgY29uc3Qg
aW50IGhlaWdodCA9IGJ1dHRvblNpemUuaGVpZ2h0KCkgLyAyICsgZnJhbWVXaWR0aDsKKyAgICBj
b25zdCBpbnQgd2lkdGggPSBoZWlnaHQgLSAoMiAqICgxICsgaGVpZ2h0IC8gMTUpKSAtIDE7Cisg
ICAgcmV0dXJuIFFTaXplKHdpZHRoICwgaGVpZ2h0KTsKIH0KIAotUVBpeG1hcCBTdHlsZVBhaW50
ZXJNb2JpbGU6OmZpbmRDb21ib0J1dHRvbihjb25zdCBRU2l6ZSYgc2l6ZSwgYm9vbCBtdWx0aXBs
ZSwgYm9vbCBkaXNhYmxlZCkgY29uc3QKK1FQaXhtYXAgU3R5bGVQYWludGVyTW9iaWxlOjpmaW5k
Q29tYm9CdXR0b24oY29uc3QgUVNpemUmIHNpemUsIGJvb2wgbXVsdGlwbGUsIGJvb2wgZW5hYmxl
ZCkgY29uc3QKIHsKLSAgICBRUGl4bWFwIHJlc3VsdDsKLSAgICBRU2l6ZSBpbWFnZVNpemUgPSBn
ZXRCdXR0b25JbWFnZVNpemUoc2l6ZSk7Ci0KLSAgICBpZiAoaW1hZ2VTaXplLmlzTnVsbCgpKQor
ICAgIGlmIChzaXplLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gUVBpeG1hcCgpOwotICAgIHN0
YXRpYyBjb25zdCBRU3RyaW5nIHByZWZpeCA9IFFMYXRpbjFTdHJpbmcoIiRxdC1tYWVtbzUtbW9i
aWxlLXRoZW1lLWNvbWJvLSIpOworICAgIHN0YXRpYyBjb25zdCBRU3RyaW5nIHByZWZpeCA9IFFM
YXRpbjFTdHJpbmcoIiRxdC13ZWJraXQtbW9iaWxlLXRoZW1lLWNvbWJvLSIpOworICAgIFFQaXht
YXAgcmVzdWx0OwogICAgIFFTdHJpbmcga2V5ID0gcHJlZml4ICsgKG11bHRpcGxlID8gUUxhdGlu
MVN0cmluZygibXVsdGlwbGUtIikgOiBRTGF0aW4xU3RyaW5nKCJzaW1wbGUtIikpCi0gICAgICAg
ICsgUVN0cmluZzo6bnVtYmVyKGltYWdlU2l6ZS53aWR0aCgpKSArIFFMYXRpbjFTdHJpbmcoIi0i
KSArIFFTdHJpbmc6Om51bWJlcihpbWFnZVNpemUuaGVpZ2h0KCkpCi0gICAgICAgICsgUUxhdGlu
MVN0cmluZygiLSIpICsgKGRpc2FibGVkID8gUUxhdGluMVN0cmluZygiZGlzYWJsZWQiKSA6IFFM
YXRpbjFTdHJpbmcoImVuYWJsZWQiKSk7CisgICAgICAgICsgUVN0cmluZzo6bnVtYmVyKHNpemUu
d2lkdGgoKSkgKyBRTGF0aW4xU3RyaW5nKCItIikgKyBRU3RyaW5nOjpudW1iZXIoc2l6ZS5oZWln
aHQoKSkKKyAgICAgICAgKyBRTGF0aW4xU3RyaW5nKCItIikgKyAoZW5hYmxlZCA/IFFMYXRpbjFT
dHJpbmcoIm9uIikgOiBRTGF0aW4xU3RyaW5nKCJvZmYiKSk7CisKICAgICBpZiAoIVFQaXhtYXBD
YWNoZTo6ZmluZChrZXksIHJlc3VsdCkpIHsKLSAgICAgICAgcmVzdWx0ID0gUVBpeG1hcChpbWFn
ZVNpemUpOworICAgICAgICByZXN1bHQgPSBRUGl4bWFwKHNpemUpOwogICAgICAgICByZXN1bHQu
ZmlsbChRdDo6dHJhbnNwYXJlbnQpOwogICAgICAgICBRUGFpbnRlciBwYWludGVyKCZyZXN1bHQp
OwogICAgICAgICBpZiAobXVsdGlwbGUpCi0gICAgICAgICAgICBkcmF3TXVsdGlwbGVDb21ib0J1
dHRvbigmcGFpbnRlciwgaW1hZ2VTaXplLCBkaXNhYmxlZCA/IFF0OjpsaWdodEdyYXkgOiBRdDo6
ZGFya0dyYXkpOworICAgICAgICAgICAgZHJhd011bHRpcGxlQ29tYm9CdXR0b24oJnBhaW50ZXIs
IHNpemUsIGVuYWJsZWQgPyBkYXJrQ29sb3IgOiBRdDo6bGlnaHRHcmF5KTsKICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgZHJhd1NpbXBsZUNvbWJvQnV0dG9uKCZwYWludGVyLCBpbWFnZVNpemUs
IGRpc2FibGVkID8gUXQ6OmxpZ2h0R3JheSA6IFF0OjpkYXJrR3JheSk7CisgICAgICAgICAgICBk
cmF3U2ltcGxlQ29tYm9CdXR0b24oJnBhaW50ZXIsIHNpemUsIGVuYWJsZWQgPyBkYXJrQ29sb3Ig
OiBRdDo6bGlnaHRHcmF5KTsKICAgICAgICAgUVBpeG1hcENhY2hlOjppbnNlcnQoa2V5LCByZXN1
bHQpOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFN0eWxlUGFpbnRlck1v
YmlsZTo6ZHJhd0xpbmVFZGl0KGNvbnN0IFFSZWN0JiByZWN0LCBib29sIHN1bmtlbiwgYm9vbCBl
bmFibGVkKQordm9pZCBTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdMaW5lRWRpdChjb25zdCBRUmVj
dCYgcmVjdCwgYm9vbCBmb2N1c2VkLCBib29sIGVuYWJsZWQpCiB7Ci0gICAgUVBlbiBwZW4oUXQ6
OmRhcmtHcmF5LCAxLjAsIFF0OjpTb2xpZExpbmUsIFF0OjpSb3VuZENhcCwgUXQ6OlJvdW5kSm9p
bik7Ci0gICAgcGFpbnRlci0+c2V0UGVuKHBlbik7Ci0KLSAgICBpZiAoc3Vua2VuKSB7Ci0gICAg
ICAgIGRyYXdSZWN0YW5ndWxhckNvbnRyb2xCYWNrZ3JvdW5kKHBhaW50ZXIsIHBlbiwgcmVjdCwg
UUJydXNoKFF0OjpkYXJrR3JheSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGRyYXdS
ZWN0YW5ndWxhckNvbnRyb2xCYWNrZ3JvdW5kKHBhaW50ZXIsIGJvcmRlclBlbiwgcmVjdCwgUXQ6
OndoaXRlKTsKIAotICAgIFFMaW5lYXJHcmFkaWVudCBsaW5lYXJHcmFkaWVudDsKLSAgICBpZiAo
IWVuYWJsZWQpIHsKLSAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0U3RhcnQocmVjdC50b3BMZWZ0
KCkpOwotICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRGaW5hbFN0b3AocmVjdC5ib3R0b21MZWZ0
KCkpOwotICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDAuMCwgUXQ6OmxpZ2h0R3Jh
eSk7Ci0gICAgICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQoMS4wLCBRdDo6d2hpdGUpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGxpbmVhckdyYWRpZW50LnNldFN0YXJ0KHJlY3QudG9wTGVm
dCgpKTsKLSAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0RmluYWxTdG9wKFFQb2ludChyZWN0LnRv
cExlZnQoKS54KCksCi0gICAgICAgICAgICAgICAgICAgIHJlY3QudG9wTGVmdCgpLnkoKSArIC8q
IG9mZnNldCBsaW1pdCBmb3IgZ3JhZGllbnQgKi8gMjApKTsKLSAgICAgICAgbGluZWFyR3JhZGll
bnQuc2V0Q29sb3JBdCgwLjAsIFF0OjpkYXJrR3JheSk7Ci0gICAgICAgIGxpbmVhckdyYWRpZW50
LnNldENvbG9yQXQoMC4zNSwgUXQ6OndoaXRlKTsKKyAgICBpZiAoZm9jdXNlZCkgeworICAgICAg
ICBRUGVuIGZvY3VzUGVuKGhpZ2hsaWdodENvbG9yLCBmbG9hdChyZWN0LmhlaWdodCgpIC8gMjYu
MCksIFF0OjpTb2xpZExpbmUsIFF0OjpSb3VuZENhcCwgUXQ6OlJvdW5kSm9pbik7CisgICAgICAg
IGRyYXdSZWN0YW5ndWxhckNvbnRyb2xCYWNrZ3JvdW5kKHBhaW50ZXIsIGZvY3VzUGVuLCByZWN0
LCBRdDo6Tm9CcnVzaCk7CiAgICAgfQotCi0gICAgZHJhd1JlY3Rhbmd1bGFyQ29udHJvbEJhY2tn
cm91bmQocGFpbnRlciwgcGVuLCByZWN0LCBsaW5lYXJHcmFkaWVudCk7CiB9CiAKIHZvaWQgU3R5
bGVQYWludGVyTW9iaWxlOjpkcmF3Q2hlY2tCb3goY29uc3QgUVJlY3QmIHJlY3QsIGJvb2wgY2hl
Y2tlZCwgYm9vbCBlbmFibGVkKQogewotICAgIFFMaW5lYXJHcmFkaWVudCBsaW5lYXJHcmFkaWVu
dChyZWN0LnRvcExlZnQoKSwgcmVjdC5ib3R0b21MZWZ0KCkpOwotICAgIGlmICghZW5hYmxlZCkg
ewotICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDAuMCwgUXQ6OmxpZ2h0R3JheSk7
Ci0gICAgICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQoMC41LCBRdDo6d2hpdGUpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQoMC4wLCBRdDo6ZGFy
a0dyYXkpOwotICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDAuNSwgUXQ6OndoaXRl
KTsKLSAgICB9Ci0KLSAgICBwYWludGVyLT5zZXRQZW4oUVBlbihlbmFibGVkID8gUXQ6OmRhcmtH
cmF5IDogUXQ6OmxpZ2h0R3JheSkpOwotICAgIHBhaW50ZXItPnNldEJydXNoKGxpbmVhckdyYWRp
ZW50KTsKLSAgICBwYWludGVyLT5kcmF3UmVjdChyZWN0KTsKLSAgICBjb25zdCBRUmVjdCByID0g
cmVjdC5hZGp1c3RlZCgxLCAxLCAtMSwgLTEpOwotCi0gICAgaWYgKCFjaGVja2VkKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBRUGl4bWFwIGNoZWNrZXIgPSBmaW5kQ2hlY2tlcihyLCAhZW5hYmxl
ZCk7Ci0gICAgaWYgKGNoZWNrZXIuaXNOdWxsKCkpCisgICAgY29uc3QgUVJlY3Qgc3F1YXJlID0g
c2hyaW5rUmVjdFRvU3F1YXJlKHJlY3QpOworICAgIFFQaXhtYXAgY2hlY2tCb3ggPSBmaW5kQ2hl
Y2tCb3goc2l6ZUZvclBhaW50ZXJTY2FsZShzcXVhcmUpLCBjaGVja2VkLCBlbmFibGVkKTsKKyAg
ICBpZiAoY2hlY2tCb3guaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKLQotICAgIGludCB4ID0g
KHIud2lkdGgoKSAtIGNoZWNrZXIud2lkdGgoKSkgPj4gMTsKLSAgICBpbnQgeSA9IChyLmhlaWdo
dCgpIC0gY2hlY2tlci5oZWlnaHQoKSkgPj4gMTsKLSAgICBwYWludGVyLT5kcmF3UGl4bWFwKHIu
eCgpICsgeCwgci55KCkgKyB5LCBjaGVja2VyKTsKKyAgICBwYWludGVyLT5kcmF3UGl4bWFwKHNx
dWFyZSwgY2hlY2tCb3gpOwogfQogCiB2b2lkIFN0eWxlUGFpbnRlck1vYmlsZTo6ZHJhd1JhZGlv
QnV0dG9uKGNvbnN0IFFSZWN0JiByZWN0LCBib29sIGNoZWNrZWQsIGJvb2wgZW5hYmxlZCkKIHsK
LSAgICBRUGl4bWFwIHJhZGlvID0gZmluZFJhZGlvKHJlY3Quc2l6ZSgpLCBjaGVja2VkLCAhZW5h
YmxlZCk7CisgICAgY29uc3QgUVJlY3Qgc3F1YXJlID0gc2hyaW5rUmVjdFRvU3F1YXJlKHJlY3Qp
OworICAgIFFQaXhtYXAgcmFkaW8gPSBmaW5kUmFkaW8oc2l6ZUZvclBhaW50ZXJTY2FsZShzcXVh
cmUpLCBjaGVja2VkLCBlbmFibGVkKTsKICAgICBpZiAocmFkaW8uaXNOdWxsKCkpCiAgICAgICAg
IHJldHVybjsKLSAgICBwYWludGVyLT5kcmF3UGl4bWFwKHJlY3QueCgpLCByZWN0LnkoKSwgcmFk
aW8pOworICAgIHBhaW50ZXItPmRyYXdQaXhtYXAoc3F1YXJlLCByYWRpbyk7CiB9CiAKIHZvaWQg
U3R5bGVQYWludGVyTW9iaWxlOjpkcmF3UHVzaEJ1dHRvbihjb25zdCBRUmVjdCYgcmVjdCwgYm9v
bCBzdW5rZW4sIGJvb2wgZW5hYmxlZCkKIHsKLSAgICBRUGVuIHBlbihRdDo6ZGFya0dyYXksIDEu
MCwgUXQ6OlNvbGlkTGluZSwgUXQ6OlJvdW5kQ2FwLCBRdDo6Um91bmRKb2luKTsKLSAgICBwYWlu
dGVyLT5zZXRQZW4ocGVuKTsKKyAgICBkcmF3UmVjdGFuZ3VsYXJDb250cm9sQmFja2dyb3VuZChw
YWludGVyLCBRdDo6Tm9QZW4sIHJlY3QuYWRqdXN0ZWQoMCwgMSwgMCwgMSksIHNoYWRvd0NvbG9y
KTsKIAotICAgIGlmIChzdW5rZW4pIHsKLSAgICAgICAgZHJhd1JlY3Rhbmd1bGFyQ29udHJvbEJh
Y2tncm91bmQocGFpbnRlciwgcGVuLCByZWN0LCBRQnJ1c2goUXQ6OmRhcmtHcmF5KSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBRTGluZWFyR3JhZGllbnQgbGluZWFyR3JhZGllbnQ7
Ci0gICAgaWYgKCFlbmFibGVkKSB7CisgICAgUUJydXNoIGJydXNoOworICAgIGlmIChlbmFibGVk
ICYmICFzdW5rZW4pIHsKKyAgICAgICAgUUxpbmVhckdyYWRpZW50IGxpbmVhckdyYWRpZW50Owog
ICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRTdGFydChyZWN0LmJvdHRvbUxlZnQoKSk7CiAgICAg
ICAgIGxpbmVhckdyYWRpZW50LnNldEZpbmFsU3RvcChyZWN0LnRvcExlZnQoKSk7Ci0gICAgICAg
IGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQoMC4wLCBRdDo6Z3JheSk7CisgICAgICAgIGxpbmVh
ckdyYWRpZW50LnNldENvbG9yQXQoMC4wLCBidXR0b25HcmFkaWVudEJvdHRvbSk7CiAgICAgICAg
IGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQoMS4wLCBRdDo6d2hpdGUpOwotICAgIH0gZWxzZSB7
CisgICAgICAgIGJydXNoID0gbGluZWFyR3JhZGllbnQ7CisgICAgfSBlbHNlIGlmICghZW5hYmxl
ZCkKKyAgICAgICAgYnJ1c2ggPSBRQ29sb3IoMjQxLCAyNDIsIDI0Myk7CisgICAgZWxzZSB7IC8v
IHN1bmtlbgorICAgICAgICBRTGluZWFyR3JhZGllbnQgbGluZWFyR3JhZGllbnQ7CiAgICAgICAg
IGxpbmVhckdyYWRpZW50LnNldFN0YXJ0KHJlY3QuYm90dG9tTGVmdCgpKTsKLSAgICAgICAgbGlu
ZWFyR3JhZGllbnQuc2V0RmluYWxTdG9wKFFQb2ludChyZWN0LmJvdHRvbUxlZnQoKS54KCksCi0g
ICAgICAgICAgICAgICAgICAgIHJlY3QuYm90dG9tTGVmdCgpLnkoKSAtIC8qIG9mZnNldCBsaW1p
dCBmb3IgZ3JhZGllbnQgKi8gMjApKTsKLSAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JB
dCgwLjAsIFF0OjpncmF5KTsKLSAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgwLjQs
IFF0Ojp3aGl0ZSk7CisgICAgICAgIGxpbmVhckdyYWRpZW50LnNldEZpbmFsU3RvcChyZWN0LnRv
cExlZnQoKSk7CisgICAgICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQoMC4wLCBoaWdobGln
aHRDb2xvcik7CisgICAgICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQoMS4wLCBoaWdobGln
aHRDb2xvci5saWdodGVyKCkpOworICAgICAgICBicnVzaCA9IGxpbmVhckdyYWRpZW50OwogICAg
IH0KIAotICAgIGRyYXdSZWN0YW5ndWxhckNvbnRyb2xCYWNrZ3JvdW5kKHBhaW50ZXIsIHBlbiwg
cmVjdCwgbGluZWFyR3JhZGllbnQpOworICAgIGRyYXdSZWN0YW5ndWxhckNvbnRyb2xCYWNrZ3Jv
dW5kKHBhaW50ZXIsIGJvcmRlclBlbiwgcmVjdCwgYnJ1c2gpOwogfQogCiB2b2lkIFN0eWxlUGFp
bnRlck1vYmlsZTo6ZHJhd0NvbWJvQm94KGNvbnN0IFFSZWN0JiByZWN0LCBib29sIG11bHRpcGxl
LCBib29sIGVuYWJsZWQpCiB7Ci0gICAgUVBlbiBwZW4oUXQ6OmRhcmtHcmF5LCAxLjAsIFF0OjpT
b2xpZExpbmUsIFF0OjpSb3VuZENhcCwgUXQ6OlJvdW5kSm9pbik7CisgICAgZHJhd1JlY3Rhbmd1
bGFyQ29udHJvbEJhY2tncm91bmQocGFpbnRlciwgUXQ6Ok5vUGVuLCByZWN0LmFkanVzdGVkKDAs
IDEsIDAsIDIpLCBzaGFkb3dDb2xvcik7CisKICAgICBRTGluZWFyR3JhZGllbnQgbGluZWFyR3Jh
ZGllbnQ7Ci0gICAgaWYgKCFlbmFibGVkKSB7Ci0gICAgICAgIGxpbmVhckdyYWRpZW50LnNldFN0
YXJ0KHJlY3QuYm90dG9tTGVmdCgpKTsKLSAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0RmluYWxT
dG9wKHJlY3QudG9wTGVmdCgpKTsKLSAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgw
LjAsIFF0OjpncmF5KTsKLSAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgxLjAsIFF0
Ojp3aGl0ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0U3RhcnQo
cmVjdC5ib3R0b21MZWZ0KCkpOwotICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRGaW5hbFN0b3Ao
UVBvaW50KHJlY3QuYm90dG9tTGVmdCgpLngoKSwKLSAgICAgICAgICAgICAgICAgICAgcmVjdC5i
b3R0b21MZWZ0KCkueSgpIC0gLyogb2Zmc2V0IGxpbWl0IGZvciBncmFkaWVudCAqLyAyMCkpOwot
ICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDAuMCwgUXQ6OmdyYXkpOwotICAgICAg
ICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDAuNCwgUXQ6OndoaXRlKTsKLSAgICB9CisgICAg
bGluZWFyR3JhZGllbnQuc2V0U3RhcnQocmVjdC5ib3R0b21MZWZ0KCkpOworICAgIGxpbmVhckdy
YWRpZW50LnNldEZpbmFsU3RvcChyZWN0LnRvcExlZnQoKSk7CisgICAgbGluZWFyR3JhZGllbnQu
c2V0Q29sb3JBdCgwLjAsIGJ1dHRvbkdyYWRpZW50Qm90dG9tKTsKKyAgICBsaW5lYXJHcmFkaWVu
dC5zZXRDb2xvckF0KDEuMCwgUXQ6OndoaXRlKTsKIAotICAgIGRyYXdSZWN0YW5ndWxhckNvbnRy
b2xCYWNrZ3JvdW5kKHBhaW50ZXIsIHBlbiwgcmVjdCwgbGluZWFyR3JhZGllbnQpOwogCi0gICAg
Y29uc3QgUVJlY3QgcihyZWN0LngoKSArIHJlY3Qud2lkdGgoKSAtIGZyYW1lV2lkdGggLSBhcnJv
d0JveFdpZHRoLCByZWN0LnkoKSArIGZyYW1lV2lkdGgKLSAgICAgICAgICAgICAgICAgICAsIGFy
cm93Qm94V2lkdGgsIHJlY3QuaGVpZ2h0KCkgLSAyICogZnJhbWVXaWR0aCk7Ci0gICAgUVBpeG1h
cCBwaWMgPSBmaW5kQ29tYm9CdXR0b24oci5zaXplKCksIG11bHRpcGxlLCAhZW5hYmxlZCk7Cisg
ICAgZHJhd1JlY3Rhbmd1bGFyQ29udHJvbEJhY2tncm91bmQocGFpbnRlciwgYm9yZGVyUGVuLCBy
ZWN0LCBsaW5lYXJHcmFkaWVudCk7CiAKKyAgICBjb25zdCBRUmVjdCBidXR0b25SZWN0KHJlY3Qu
eCgpICsgcmVjdC53aWR0aCgpIC0gZnJhbWVXaWR0aCAtIGFycm93Qm94V2lkdGgsIHJlY3QueSgp
ICsgZnJhbWVXaWR0aAorICAgICAgICAgICAgICAgICAgICwgcmVjdC5oZWlnaHQoKSwgcmVjdC5o
ZWlnaHQoKSAtIDIgKiBmcmFtZVdpZHRoKTsKKyAgICBRUmVjdCB0YXJnZXRSZWN0KFFQb2ludCgw
LCAwKSwgZ2V0QnV0dG9uSW1hZ2VTaXplKGJ1dHRvblJlY3Quc2l6ZSgpLCBtdWx0aXBsZSkpOwor
ICAgIHRhcmdldFJlY3QubW92ZUNlbnRlcihidXR0b25SZWN0LmNlbnRlcigpKTsKKyAgICBRUGl4
bWFwIHBpYyA9IGZpbmRDb21ib0J1dHRvbihzaXplRm9yUGFpbnRlclNjYWxlKHRhcmdldFJlY3Qp
LCBtdWx0aXBsZSwgZW5hYmxlZCk7CiAgICAgaWYgKHBpYy5pc051bGwoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaW50IHggPSAoci53aWR0aCgpIC0gcGljLndpZHRoKCkpID4+IDE7Ci0gICAg
aW50IHkgPSAoci5oZWlnaHQoKSAtIHBpYy5oZWlnaHQoKSkgPj4gMTsKLSAgICBwYWludGVyLT5k
cmF3UGl4bWFwKHIueCgpICsgeCwgci55KCkgKyB5LCBwaWMpOworICAgIHBhaW50ZXItPmRyYXdQ
aXhtYXAodGFyZ2V0UmVjdCwgcGljKTsKK30KKwordm9pZCBTdHlsZVBhaW50ZXJNb2JpbGU6OmRy
YXdQcm9ncmVzcyhjb25zdCBRUmVjdCYgcmVjdCwgZG91YmxlIHByb2dyZXNzLCBib29sIGxlZnRU
b1JpZ2h0LCBib29sIGFuaW1hdGVkKSBjb25zdAoreworICAgIHN0YXRpYyBjb25zdCBRU3RyaW5n
IHByZWZpeCA9IFFMYXRpbjFTdHJpbmcoIiRxdC13ZWJraXQtbW9iaWxlLXRoZW1lLXByb2dyZXNz
LSIpOworICAgIGNvbnN0IGludCBib3JkZXIgPSByZWN0LmhlaWdodCgpIC8gNDsKKyAgICBjb25z
dCBRUmVjdCB0YXJnZXRSZWN0ID0gcmVjdC5hZGp1c3RlZCgwLCBib3JkZXIsIDAsIC1ib3JkZXIp
OworCisgICAgUVBpeG1hcCByZXN1bHQ7CisgICAgY29uc3QgUVNpemUgaW1hZ2VTaXplID0gc2l6
ZUZvclBhaW50ZXJTY2FsZSh0YXJnZXRSZWN0KTsKKyAgICBRU3RyaW5nIGtleSA9IHByZWZpeCAr
IFFTdHJpbmc6Om51bWJlcihpbWFnZVNpemUud2lkdGgoKSkgKyBRTGF0aW4xU3RyaW5nKCItIikg
KyBRU3RyaW5nOjpudW1iZXIoaW1hZ2VTaXplLmhlaWdodCgpKQorICAgICAgICAgICAgKyBRTGF0
aW4xU3RyaW5nKCItIikgKyBRU3RyaW5nOjpudW1iZXIocHJvZ3Jlc3MsICdmJywgMykgKyAoYW5p
bWF0ZWQ/IFFMYXRpbjFTdHJpbmcoIi1hbmltIikgOiBRU3RyaW5nKCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgKyAoKCFhbmltYXRlZCAmJiAhbGVmdFRvUmlnaHQpID8gUUxhdGluMVN0cmlu
ZygiLXJ0bCIpIDogUVN0cmluZygpKTsKKyAgICBpZiAoIVFQaXhtYXBDYWNoZTo6ZmluZChrZXks
IHJlc3VsdCkpIHsKKyAgICAgICAgaWYgKGltYWdlU2l6ZS5pc051bGwoKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgcmVzdWx0ID0gUVBpeG1hcChpbWFnZVNpemUpOworICAgICAgICBy
ZXN1bHQuZmlsbChRdDo6dHJhbnNwYXJlbnQpOworICAgICAgICBRUGFpbnRlciBwYWludGVyKCZy
ZXN1bHQpOworICAgICAgICBRUmVjdCBwcm9ncmVzc1JlY3QoUVBvaW50KDAsIDApLCBpbWFnZVNp
emUpOworICAgICAgICBkcmF3UmVjdGFuZ3VsYXJDb250cm9sQmFja2dyb3VuZCgmcGFpbnRlciwg
Ym9yZGVyUGVuLCBwcm9ncmVzc1JlY3QsIFF0Ojp3aGl0ZSk7CisgICAgICAgIHByb2dyZXNzUmVj
dC5hZGp1c3QoMSwgMSwgLTEsIC0xKTsKKyAgICAgICAgaWYgKGFuaW1hdGVkKSB7CisgICAgICAg
ICAgICBjb25zdCBpbnQgcmlnaHQgPSBwcm9ncmVzc1JlY3QucmlnaHQoKTsKKyAgICAgICAgICAg
IGNvbnN0IGludCBzdGFydFBvcyA9IHJpZ2h0ICogKDEgLSBwcm9ncmVzc0JhckNodW5rUGVyY2Vu
dGFnZSkgKiAyICogZmFicyhwcm9ncmVzcyAtIDAuNSk7CisgICAgICAgICAgICBwcm9ncmVzc1Jl
Y3Quc2V0V2lkdGgocHJvZ3Jlc3NCYXJDaHVua1BlcmNlbnRhZ2UgKiByaWdodCk7CisgICAgICAg
ICAgICBwcm9ncmVzc1JlY3QubW92ZUxlZnQoc3RhcnRQb3MpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgcHJvZ3Jlc3NSZWN0LnNldFdpZHRoKHByb2dyZXNzICogcHJvZ3Jlc3NSZWN0
LndpZHRoKCkpOworICAgICAgICAgICAgaWYgKCFsZWZ0VG9SaWdodCkKKyAgICAgICAgICAgICAg
ICBwcm9ncmVzc1JlY3QubW92ZVJpZ2h0KGltYWdlU2l6ZS53aWR0aCgpIC0gMik7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKHByb2dyZXNzUmVjdC53aWR0aCgpID4gMCkgeworICAgICAgICAgICAg
UUxpbmVhckdyYWRpZW50IGdyYWRpZW50OworICAgICAgICAgICAgZ3JhZGllbnQuc2V0U3RhcnQo
cHJvZ3Jlc3NSZWN0LmJvdHRvbUxlZnQoKSk7CisgICAgICAgICAgICBncmFkaWVudC5zZXRGaW5h
bFN0b3AocHJvZ3Jlc3NSZWN0LnRvcExlZnQoKSk7CisgICAgICAgICAgICBncmFkaWVudC5zZXRD
b2xvckF0KDAuMCwgaGlnaGxpZ2h0Q29sb3IpOworICAgICAgICAgICAgZ3JhZGllbnQuc2V0Q29s
b3JBdCgxLjAsIGhpZ2hsaWdodENvbG9yLmxpZ2h0ZXIoKSk7CisgICAgICAgICAgICBkcmF3UmVj
dGFuZ3VsYXJDb250cm9sQmFja2dyb3VuZCgmcGFpbnRlciwgUXQ6Ok5vUGVuLCBwcm9ncmVzc1Jl
Y3QsIGdyYWRpZW50KTsKKyAgICAgICAgfQorICAgICAgICBRUGl4bWFwQ2FjaGU6Omluc2VydChr
ZXksIHJlc3VsdCk7CisgICAgfQorICAgIHBhaW50ZXItPmRyYXdQaXhtYXAodGFyZ2V0UmVjdCwg
cmVzdWx0KTsKK30KIAotICAgIHBhaW50ZXItPnNldFBlbihlbmFibGVkID8gUXQ6OmRhcmtHcmF5
IDogUXQ6OmdyYXkpOwotICAgIHBhaW50ZXItPmRyYXdMaW5lKHIubGVmdCgpIC0gMiwgci50b3Ao
KSArIDIsIHIubGVmdCgpIC0gMiwgci5ib3R0b20oKSAtIDIpOwordm9pZCBTdHlsZVBhaW50ZXJN
b2JpbGU6OmRyYXdTbGlkZXJUaHVtYihjb25zdCBRUmVjdCAmIHJlY3QsIGJvb2wgcHJlc3NlZCkg
Y29uc3QKK3sKKyAgICBkcmF3UmVjdGFuZ3VsYXJDb250cm9sQmFja2dyb3VuZChwYWludGVyLCBi
b3JkZXJQZW4sIHJlY3QsIHByZXNzZWQ/IFF0OjpsaWdodEdyYXkgOiBidXR0b25HcmFkaWVudEJv
dHRvbSk7CiB9CiAKIApAQCAtNTExLDExICs1MzIsMTEgQEAgYm9vbCBSZW5kZXJUaGVtZVF0TW9i
aWxlOjpwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29u
c3QKIAogICAgIENvbnRyb2xQYXJ0IGFwcGVhcmFuY2UgPSBvLT5zdHlsZSgpLT5hcHBlYXJhbmNl
KCk7CiAgICAgaWYgKGFwcGVhcmFuY2UgPT0gUHVzaEJ1dHRvblBhcnQgfHwgYXBwZWFyYW5jZSA9
PSBCdXR0b25QYXJ0KSB7Ci0gICAgICAgIHAuZHJhd1B1c2hCdXR0b24ociwgaXNQcmVzc2VkKG8p
KTsKKyAgICAgICAgcC5kcmF3UHVzaEJ1dHRvbihyLCBpc1ByZXNzZWQobyksIGlzRW5hYmxlZChv
KSk7CiAgICAgfSBlbHNlIGlmIChhcHBlYXJhbmNlID09IFJhZGlvUGFydCkKLSAgICAgICBwLmRy
YXdSYWRpb0J1dHRvbihyLCBpc0NoZWNrZWQobykpOworICAgICAgIHAuZHJhd1JhZGlvQnV0dG9u
KHIsIGlzQ2hlY2tlZChvKSwgaXNFbmFibGVkKG8pKTsKICAgICBlbHNlIGlmIChhcHBlYXJhbmNl
ID09IENoZWNrYm94UGFydCkKLSAgICAgICBwLmRyYXdDaGVja0JveChyLCBpc0NoZWNrZWQobykp
OworICAgICAgIHAuZHJhd0NoZWNrQm94KHIsIGlzQ2hlY2tlZChvKSwgaXNFbmFibGVkKG8pKTsK
IAogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTU0OSw3ICs1NzAsNyBAQCBib29sIFJlbmRlclRo
ZW1lUXRNb2JpbGU6OnBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJ
bmZvJiBpLCBjbwogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8vIE5vdyBwYWludCB0aGUg
dGV4dCBmaWVsZC4KLSAgICBwLmRyYXdMaW5lRWRpdChyLCAvKnN1bmtlbiA9ICovaXNQcmVzc2Vk
KG8pKTsKKyAgICBwLmRyYXdMaW5lRWRpdChyLCBpc0ZvY3VzZWQobyksIGlzRW5hYmxlZChvKSk7
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC01NjUsNyArNTg2LDcgQEAgdm9pZCBSZW5kZXJU
aGVtZVF0TW9iaWxlOjpzZXRQb3B1cFBhZGRpbmcoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAog
ICAgIGNvbnN0IGludCBwYWRkaW5nUmlnaHQgPSBzdHlsZS0+d2lkdGgoKS5pc0ZpeGVkKCkgfHwg
c3R5bGUtPndpZHRoKCkuaXNQZXJjZW50KCkgPyA1IDogODsKIAogICAgIHN0eWxlLT5zZXRQYWRk
aW5nTGVmdChMZW5ndGgocGFkZGluZ0xlZnQsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRp
bmdSaWdodChMZW5ndGgocGFkZGluZ1JpZ2h0ICsgYnV0dG9uSWNvblNpemUsIEZpeGVkKSk7Cisg
ICAgc3R5bGUtPnNldFBhZGRpbmdSaWdodChMZW5ndGgocGFkZGluZ1JpZ2h0ICsgYXJyb3dCb3hX
aWR0aCwgRml4ZWQpKTsKIAogICAgIHN0eWxlLT5zZXRQYWRkaW5nVG9wKExlbmd0aCgyLCBGaXhl
ZCkpOwogICAgIHN0eWxlLT5zZXRQYWRkaW5nQm90dG9tKExlbmd0aCgyLCBGaXhlZCkpOwpAQCAt
NTgyLDcgKzYwMyw3IEBAIGJvb2wgUmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRNZW51TGlzdChS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uCiAgICAgcC5wYWludGVyLT50
cmFuc2xhdGUodG9wTGVmdCk7CiAgICAgY29uc3QgUVJlY3QgcmVjdChRUG9pbnQoMCwgMCksIHIu
c2l6ZSgpKTsKIAotICAgIHAuZHJhd0NvbWJvQm94KHJlY3QsIGNoZWNrTXVsdGlwbGUobykpOwor
ICAgIHAuZHJhd0NvbWJvQm94KHJlY3QsIGNoZWNrTXVsdGlwbGUobyksIGlzRW5hYmxlZChvKSk7
CiAgICAgcC5wYWludGVyLT50cmFuc2xhdGUoLXRvcExlZnQpOwogICAgIHJldHVybiBmYWxzZTsK
IH0KQEAgLTU5NCw3ICs2MTUsNyBAQCBib29sIFJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50TWVu
dUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mCiAgICAgaWYgKCFw
LmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBwLmRyYXdDb21ib0JveChy
LCBjaGVja011bHRpcGxlKG8pKTsKKyAgICBwLmRyYXdDb21ib0JveChyLCBjaGVja011bHRpcGxl
KG8pLCBpc0VuYWJsZWQobykpOwogCiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtNjAyLDMwICs2
MjMsNjUgQEAgYm9vbCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludE1lbnVMaXN0QnV0dG9uKFJl
bmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJgogI2lmIEVOQUJMRShQUk9HUkVTU19UQUcp
CiBkb3VibGUgUmVuZGVyVGhlbWVRdE1vYmlsZTo6YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVz
c0JhcihSZW5kZXJQcm9ncmVzcyogcmVuZGVyUHJvZ3Jlc3MpIGNvbnN0CiB7Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMC47CisgICAgaWYgKHJlbmRlclByb2dyZXNzLT5pc0Rl
dGVybWluYXRlKCkpCisgICAgICAgIHJldHVybiAwOworICAgIC8vIE91ciBhbmltYXRpb24gZ29l
cyBiYWNrIGFuZCBmb3J0aCBzbyB3ZSBuZWVkIHRvIG1ha2UgaXQgbGFzdCB0d2ljZSBhcyBsb25n
CisgICAgLy8gYW5kIHdlIG5lZWQgdGhlIG51bWVyYXRvciB0byBiZSBhbiBvZGQgbnVtYmVyIHRv
IGVuc3VyZSB3ZSBnZXQgYSBwcm9ncmVzcyB2YWx1ZSBvZiAwLjUuCisgICAgcmV0dXJuICgyICog
cHJvZ3Jlc3NBbmltYXRpb25HcmFudWxhcml0eSArMSkgLyBwcm9ncmVzc0JhckNodW5rUGVyY2Vu
dGFnZSAqIGFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIocmVuZGVyUHJvZ3Jl
c3MpOwogfQogCiBib29sIFJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50UHJvZ3Jlc3NCYXIoUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBpLCBjb25zdCBJbnRSZWN0JiByKQogewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCFvLT5pc1By
b2dyZXNzKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgU3R5bGVQYWludGVyTW9iaWxl
IHAodGhpcywgcGkpOworICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgUmVuZGVyUHJvZ3Jlc3MqIHJlbmRlclByb2dyZXNzID0gdG9SZW5kZXJQcm9ncmVz
cyhvKTsKKyAgICBjb25zdCBib29sIGlzUlRMID0gKHJlbmRlclByb2dyZXNzLT5zdHlsZSgpLT5k
aXJlY3Rpb24oKSA9PSBSVEwpOworCisgICAgaWYgKHJlbmRlclByb2dyZXNzLT5pc0RldGVybWlu
YXRlKCkpCisgICAgICAgIHAuZHJhd1Byb2dyZXNzKHIsIHJlbmRlclByb2dyZXNzLT5wb3NpdGlv
bigpLCAhaXNSVEwpOworICAgIGVsc2UKKyAgICAgICAgcC5kcmF3UHJvZ3Jlc3MociwgcmVuZGVy
UHJvZ3Jlc3MtPmFuaW1hdGlvblByb2dyZXNzKCksICFpc1JUTCwgdHJ1ZSk7CisKKyAgICByZXR1
cm4gZmFsc2U7CiB9CiAjZW5kaWYKIAogYm9vbCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludFNs
aWRlclRyYWNrKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwaSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiByKQogewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgU3R5bGVQYWludGVyTW9iaWxl
IHAodGhpcywgcGkpOworICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgSFRNTElucHV0RWxlbWVudCogc2xpZGVyID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0
RWxlbWVudCo+KG8tPm5vZGUoKSk7CisKKyAgICBjb25zdCBkb3VibGUgbWluID0gc2xpZGVyLT5t
aW5pbXVtKCk7CisgICAgY29uc3QgZG91YmxlIG1heCA9IHNsaWRlci0+bWF4aW11bSgpOworICAg
IGNvbnN0IGRvdWJsZSBwcm9ncmVzcyA9IChtYXggLSBtaW4gPiAwKSA/IChzbGlkZXItPnZhbHVl
QXNOdW1iZXIoKSAtIG1pbikgLyAobWF4IC0gbWluKSA6IDA7CisKKyAgICAvLyBSZW5kZXIgdGhl
IHNwaW4gYnV0dG9ucyBmb3IgTFRSIG9yIFJUTCBhY2NvcmRpbmdseS4KKyAgICBjb25zdCBpbnQg
Z3Jvb3ZlUGFkZGluZyA9IHIuaGVpZ2h0KCkgKiBzbGlkZXJHcm9vdmVCb3JkZXJSYXRpbzsKKyAg
ICBjb25zdCBRUmVjdCByZWN0KHIpOworICAgIHAuZHJhd1Byb2dyZXNzKHJlY3QuYWRqdXN0ZWQo
MCwgZ3Jvb3ZlUGFkZGluZywgMCwgLWdyb292ZVBhZGRpbmcpLCBwcm9ncmVzcywgby0+c3R5bGUo
KS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKTsKKworICAgIHJldHVybiBmYWxzZTsKIH0KIAog
Ym9vbCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCog
bywgY29uc3QgUGFpbnRJbmZvJiBwaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBJbnRSZWN0JiByKQogewotICAgIC8vIFdlJ3ZlIGFscmVhZHkgcGFpbnRlZCBp
dCBpbiBwYWludFNsaWRlclRyYWNrKCksIG5vIG5lZWQgdG8gZG8gYW55dGhpbmcgaGVyZS4KLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB0cnVlOworICAgIFN0eWxlUGFpbnRlck1v
YmlsZSBwKHRoaXMsIHBpKTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIHAuZHJhd1NsaWRlclRodW1iKHIsIGlzUHJlc3NlZChvKSk7CisKKyAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVRdE1vYmlsZTo6Y2hlY2tNdWx0aXBs
ZShSZW5kZXJPYmplY3QqIG8pIGNvbnN0CkBAIC02NDUsOCArNzAxLDkgQEAgdm9pZCBSZW5kZXJU
aGVtZVF0TW9iaWxlOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBj
b25zdAogewogICAgIGNvbnN0IENvbnRyb2xQYXJ0IHBhcnQgPSBzdHlsZS0+YXBwZWFyYW5jZSgp
OwogICAgIGlmIChwYXJ0ID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgfHwgcGFydCA9PSBT
bGlkZXJUaHVtYlZlcnRpY2FsUGFydCkgewotICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3Ro
KHNsaWRlcldpZHRoLCBGaXhlZCkpOwotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChz
bGlkZXJIZWlnaHQsIEZpeGVkKSk7CisgICAgICAgIGNvbnN0IGludCBzaXplID0gc2xpZGVyU2l6
ZSAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCk7CisgICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5n
dGgoc2l6ZSwgRml4ZWQpKTsKKyAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoc2l6ZSwg
Rml4ZWQpKTsKICAgICB9IGVsc2UKICAgICAgICAgUmVuZGVyVGhlbWVRdDo6YWRqdXN0U2xpZGVy
VGh1bWJTaXplKHN0eWxlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3F0L1JlbmRlclRoZW1lUXRNb2JpbGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Jl
bmRlclRoZW1lUXRNb2JpbGUuaAppbmRleCA4MmM0ODI4NTM3ZDQ3MTAyODM4ODkyNmY1YWYxZWU4
NzA4ZGIwM2Q4Li4zMjEyOTU4NDQ3ZmQyOWY4NDMwZGVkMmQxNzM5ZmJjZmJjYTkzODA1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5oCkBA
IC04NCwyOSArODQsMzkgQEAgcHJpdmF0ZToKIH07CiAKIGNsYXNzIFN0eWxlUGFpbnRlck1vYmls
ZSA6IHB1YmxpYyBTdHlsZVBhaW50ZXIgeworCiBwdWJsaWM6CiAgICAgZXhwbGljaXQgU3R5bGVQ
YWludGVyTW9iaWxlKFJlbmRlclRoZW1lUXRNb2JpbGUqLCBjb25zdCBQYWludEluZm8mKTsKKyAg
ICB+U3R5bGVQYWludGVyTW9iaWxlKCk7CiAKLSAgICB2b2lkIGRyYXdMaW5lRWRpdChjb25zdCBR
UmVjdCYsIGJvb2wgc3Vua2VuLCBib29sIGVuYWJsZWQgPSB0cnVlKTsKKyAgICB2b2lkIGRyYXdM
aW5lRWRpdChjb25zdCBRUmVjdCYsIGJvb2wgZm9jdXNlZCwgYm9vbCBlbmFibGVkID0gdHJ1ZSk7
CiAgICAgdm9pZCBkcmF3Q2hlY2tCb3goY29uc3QgUVJlY3QmLCBib29sIGNoZWNrZWQsIGJvb2wg
ZW5hYmxlZCA9IHRydWUpOwogICAgIHZvaWQgZHJhd1JhZGlvQnV0dG9uKGNvbnN0IFFSZWN0Jiwg
Ym9vbCBjaGVja2VkLCBib29sIGVuYWJsZWQgPSB0cnVlKTsKICAgICB2b2lkIGRyYXdQdXNoQnV0
dG9uKGNvbnN0IFFSZWN0JiwgYm9vbCBzdW5rZW4sIGJvb2wgZW5hYmxlZCA9IHRydWUpOwogICAg
IHZvaWQgZHJhd0NvbWJvQm94KGNvbnN0IFFSZWN0JiwgYm9vbCBtdWx0aXBsZSwgYm9vbCBlbmFi
bGVkID0gdHJ1ZSk7CisgICAgdm9pZCBkcmF3UHJvZ3Jlc3MoY29uc3QgUVJlY3QmLCBkb3VibGUg
cHJvZ3Jlc3MsIGJvb2wgbGVmdFRvUmlnaHQgPSB0cnVlLCBib29sIGFuaW1hdGVkID0gZmFsc2Up
IGNvbnN0OworICAgIHZvaWQgZHJhd1NsaWRlclRodW1iKGNvbnN0IFFSZWN0JiwgYm9vbCBwcmVz
c2VkKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICB2b2lkIGRyYXdDaGVja2VyKFFQYWludGVyKiwg
aW50IHNpemUsIFFDb2xvcikgY29uc3Q7Ci0gICAgUVBpeG1hcCBmaW5kQ2hlY2tlcihjb25zdCBR
UmVjdCYsIGJvb2wgZGlzYWJsZWQpIGNvbnN0OworICAgIHZvaWQgZHJhd0NoZWNrYWJsZUJhY2tn
cm91bmQoUVBhaW50ZXIqLCBjb25zdCBRUmVjdCYsIGJvb2wgY2hlY2tlZCwgYm9vbCBlbmFibGVk
KSBjb25zdDsKKyAgICB2b2lkIGRyYXdDaGVja2VyKFFQYWludGVyKiwgY29uc3QgUVJlY3QmLCBj
b25zdCBRQ29sb3ImKSBjb25zdDsKKyAgICBRUGl4bWFwIGZpbmRDaGVja0JveChjb25zdCBRU2l6
ZSYsIGJvb2wgY2hlY2tlZCwgYm9vbCBlbmFibGVkKSBjb25zdDsKKworICAgIHZvaWQgZHJhd1Jh
ZGlvKFFQYWludGVyKiwgY29uc3QgUVNpemUmLCBib29sIGNoZWNrZWQsIGJvb2wgZW5hYmxlZCkg
Y29uc3Q7CisgICAgUVBpeG1hcCBmaW5kUmFkaW8oY29uc3QgUVNpemUmLCBib29sIGNoZWNrZWQs
IGJvb2wgZW5hYmxlZCkgY29uc3Q7CiAKLSAgICB2b2lkIGRyYXdSYWRpbyhRUGFpbnRlciosIGNv
bnN0IFFTaXplJiwgYm9vbCBjaGVja2VkLCBRQ29sb3IpIGNvbnN0OwotICAgIFFQaXhtYXAgZmlu
ZFJhZGlvKGNvbnN0IFFTaXplJiwgYm9vbCBjaGVja2VkLCBib29sIGRpc2FibGVkKSBjb25zdDsK
KyAgICBRU2l6ZSBnZXRCdXR0b25JbWFnZVNpemUoY29uc3QgUVNpemUmLCBib29sIG11bHRpcGxl
KSBjb25zdDsKKyAgICB2b2lkIGRyYXdTaW1wbGVDb21ib0J1dHRvbihRUGFpbnRlciosIGNvbnN0
IFFTaXplJiwgY29uc3QgUUNvbG9yJikgY29uc3Q7CisgICAgdm9pZCBkcmF3TXVsdGlwbGVDb21i
b0J1dHRvbihRUGFpbnRlciosIGNvbnN0IFFTaXplJiwgY29uc3QgUUNvbG9yJikgY29uc3Q7Cisg
ICAgUVBpeG1hcCBmaW5kQ29tYm9CdXR0b24oY29uc3QgUVNpemUmLCBib29sIG11bHRpcGxlLCBi
b29sIGVuYWJsZWQpIGNvbnN0OwogCi0gICAgUVNpemUgZ2V0QnV0dG9uSW1hZ2VTaXplKGNvbnN0
IFFTaXplJikgY29uc3Q7Ci0gICAgdm9pZCBkcmF3U2ltcGxlQ29tYm9CdXR0b24oUVBhaW50ZXIq
LCBjb25zdCBRU2l6ZSYsIFFDb2xvcikgY29uc3Q7Ci0gICAgdm9pZCBkcmF3TXVsdGlwbGVDb21i
b0J1dHRvbihRUGFpbnRlciosIGNvbnN0IFFTaXplJiwgUUNvbG9yKSBjb25zdDsKLSAgICBRUGl4
bWFwIGZpbmRDb21ib0J1dHRvbihjb25zdCBRU2l6ZSYsIGJvb2wgbXVsdGlwbGUsIGJvb2wgZGlz
YWJsZWQpIGNvbnN0OworICAgIFFTaXplIHNpemVGb3JQYWludGVyU2NhbGUoY29uc3QgUVJlY3Qm
KSBjb25zdDsKKworICAgIGJvb2wgbV9wcmV2aW91c1Ntb290aFBpeG1hcFRyYW5zZm9ybTsKIAog
ICAgIFFfRElTQUJMRV9DT1BZKFN0eWxlUGFpbnRlck1vYmlsZSk7CiB9OworCiB9CiAKICNlbmRp
ZiAvLyBSZW5kZXJUaGVtZVF0TW9iaWxlX2gKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA2ZmVkMjk3NjhhNmQ5YTY4NDY0NWNmMDRhYmVmOTNjNjMz
MDViYWU3Li4zMDY2MTkwNWY2NjhkNGJiMTkyMmJlYzYxNTcyYWViNDM2Njk3MWRmIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYg
QEAKKzIwMTEtMTItMTMgIFBpZXJyZSBSb3NzaSAgPHBpZXJyZS5yb3NzaUBnbWFpbC5jb20+CisK
KyAgICAgICAgW1F0XSBNb2JpbGUgdGhlbWUgY291bGQgdXNlIGEgbGl0dGxlIHJlZnJlc2gKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0MjkzCisKKyAg
ICAgICAgSGF2ZSBNaW5pQnJvd3NlciB1c2UgdGhlIG1vYmlsZSB0aGVtZSB3aGVuIG5vdAorICAg
ICAgICBwYXNzZWQgLS1kZXNrdG9wLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogTWluaUJyb3dzZXIvcXQvTWluaUJyb3dzZXJBcHBsaWNhdGlvbi5j
cHA6CisgICAgICAgIChNaW5pQnJvd3NlckFwcGxpY2F0aW9uOjpoYW5kbGVVc2VyT3B0aW9ucyk6
CisKIDIwMTEtMTItMTMgIEtlbmljaGkgSXNoaWJhc2hpICA8YmFzaGlAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFJldmlld2VkLCByZW1vdmVkIG9uZSBvZiBteSBlbWFpbCBhZGRyZXNzZXMgdG8g
dXNlIHRoZSBhcHBycHJpYXRlIG9uZS4KZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3F0
L01pbmlCcm93c2VyQXBwbGljYXRpb24uY3BwIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvTWluaUJy
b3dzZXJBcHBsaWNhdGlvbi5jcHAKaW5kZXggZmY5YTQ1YjUwMTQ5ZWY3NjRiMjJjZGMxZjljOWI0
MzYxZjdjYzUxNS4uMDk5YTY0MWQ2OTVlYTM0YmUxZDQxNGRmYTdiY2ZiOGExYjdkYTQ3ZiAxMDA2
NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvTWluaUJyb3dzZXJBcHBsaWNhdGlvbi5jcHAK
KysrIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvTWluaUJyb3dzZXJBcHBsaWNhdGlvbi5jcHAKQEAg
LTE5OSw3ICsxOTksMTAgQEAgdm9pZCBNaW5pQnJvd3NlckFwcGxpY2F0aW9uOjpoYW5kbGVVc2Vy
T3B0aW9ucygpCiAgICAgICAgIGFwcFF1aXQoMCk7CiAgICAgfQogCi0gICAgbV93aW5kb3dPcHRp
b25zLnNldFVzZVRyYWRpdGlvbmFsRGVza3RvcEJlaGF2aW9yKHRha2VPcHRpb25GbGFnKCZhcmdz
LCAiLS1kZXNrdG9wIikpOworICAgIGNvbnN0IGJvb2wgdXNlRGVza3RvcEJlaGF2aW9yID0gdGFr
ZU9wdGlvbkZsYWcoJmFyZ3MsICItLWRlc2t0b3AiKTsKKyAgICBpZiAoIXVzZURlc2t0b3BCZWhh
dmlvcikKKyAgICAgICAgcXB1dGVudigiUVRfV0VCS0lUX1VTRV9NT0JJTEVfVEhFTUUiLCBRQnl0
ZUFycmF5KCIxIikpOworICAgIG1fd2luZG93T3B0aW9ucy5zZXRVc2VUcmFkaXRpb25hbERlc2t0
b3BCZWhhdmlvcih1c2VEZXNrdG9wQmVoYXZpb3IpOwogICAgIG1fd2luZG93T3B0aW9ucy5zZXRQ
cmludExvYWRlZFVybHModGFrZU9wdGlvbkZsYWcoJmFyZ3MsICItdiIpKTsKICAgICBtX3dpbmRv
d09wdGlvbnMuc2V0U3RhcnRNYXhpbWl6ZWQodGFrZU9wdGlvbkZsYWcoJmFyZ3MsICItLW1heGlt
aXplIikpOwogICAgIG1fd2luZG93T3B0aW9ucy5zZXRTdGFydEZ1bGxTY3JlZW4odGFrZU9wdGlv
bkZsYWcoJmFyZ3MsICItZiIpKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>