<?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>34631</bug_id>
          
          <creation_ts>2010-02-04 22:30:15 -0800</creation_ts>
          <short_desc>[Qt] Switching from Phonon to QtMultimedia Backend for Qt 4.7</short_desc>
          <delta_ts>2010-02-23 22:29:33 -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>Media</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Nick Young">nicholas.young</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ariya.hidayat</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>hausmann</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>noam</cc>
    
    <cc>vestbo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yael</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>188075</commentid>
    <comment_count>0</comment_count>
    <who name="Nick Young">nicholas.young</who>
    <bug_when>2010-02-04 22:30:15 -0800</bug_when>
    <thetext>This change should bring superior support for HTML5 Media elements in QtWebkit from Qt 4.7.
Hopefully we should be able to make this switch without breaking anything along the way.

Patch is forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188084</commentid>
    <comment_count>1</comment_count>
      <attachid>48202</attachid>
    <who name="Nick Young">nicholas.young</who>
    <bug_when>2010-02-04 23:05:36 -0800</bug_when>
    <thetext>Created attachment 48202
Initial Patch

Note that there are build guards everywhere which prevent much of the new code from running in versions of Qt prior to 4.7.
To build the QtMultimedia compatible code, you&apos;ll have to build and link against a recent version of qt-multimedia (git://scm.dev.nokia.troll.no/qt/qt-multimedia.git).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188085</commentid>
    <comment_count>2</comment_count>
      <attachid>48203</attachid>
    <who name="Nick Young">nicholas.young</who>
    <bug_when>2010-02-04 23:10:23 -0800</bug_when>
    <thetext>Created attachment 48203
Updated Patch

Whoops. Fixed a memory leak. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188125</commentid>
    <comment_count>3</comment_count>
      <attachid>48203</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-02-05 02:30:40 -0800</bug_when>
    <thetext>Comment on attachment 48203
Updated Patch


&gt; +#include &lt;private/qpaintervideosurface_p.h&gt;

This is going to be an issue, as we cannot include private header files from Qt in WebKit. Is there a way to remove this dependency?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188132</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-02-05 03:26:21 -0800</bug_when>
    <thetext>In general, btw, Nicholas, your patch looks great! Now we just need to sort out the details :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188152</commentid>
    <comment_count>5</comment_count>
    <who name="Nick Young">nicholas.young</who>
    <bug_when>2010-02-05 05:18:20 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 48203 [details])
&gt; 
&gt; &gt; +#include &lt;private/qpaintervideosurface_p.h&gt;
&gt; 
&gt; This is going to be an issue, as we cannot include private header files from Qt
&gt; in WebKit. Is there a way to remove this dependency?

Whilst this is a private header, it is an exported symbol. There is no technical reason why we can not link against this.

Or is this a matter of principle/convention &quot;We WILL not link against private headers!&quot;?

For a variety of reasons, this is not a dependency which can be easily removed.

I suppose the simplest solution would be to make this a public header - but I&apos;ll have to speak to Justin before I can say any more on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188164</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-02-05 06:02:28 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #3)
&gt; &gt; (From update of attachment 48203 [details] [details])
&gt; &gt; 
&gt; &gt; &gt; +#include &lt;private/qpaintervideosurface_p.h&gt;
&gt; &gt; 
&gt; &gt; This is going to be an issue, as we cannot include private header files from Qt
&gt; &gt; in WebKit. Is there a way to remove this dependency?
&gt; 
&gt; Whilst this is a private header, it is an exported symbol. There is no
&gt; technical reason why we can not link against this.

The technical reason is that it does not compile, because the private headers are not installed as part of &quot;make install&quot; in Qt.

It does compile for _our_ builds of Qt as we don&apos;t use &quot;make install&quot;, but Qt customers use &quot;make install&quot; for example on Linux or Unix.

We need to be able to compile against an installed version of Qt :)

&gt; Or is this a matter of principle/convention &quot;We WILL not link against private
&gt; headers!&quot;?

It is also a matter of principle indeed, as we intend to be able to support at least two Qt versions simultaneously, therefore we cannot rely on private Qt API that is not guaranteed to be source and binary compatible.

&gt; For a variety of reasons, this is not a dependency which can be easily removed.
&gt; 
&gt; I suppose the simplest solution would be to make this a public header - but
&gt; I&apos;ll have to speak to Justin before I can say any more on this.

That would be great :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188533</commentid>
    <comment_count>7</comment_count>
      <attachid>48309</attachid>
    <who name="Nick Young">nicholas.young</who>
    <bug_when>2010-02-07 18:00:56 -0800</bug_when>
    <thetext>Created attachment 48309
Updated Patch - No Private Headers

After having a discussion with the rest of the multimedia team, we decided that the correct decision at this stage is to move a copy of the private class in to WebCore.

This is a temporary solution, and we are hopeful that this class can be made public within Qt at some time in the future.
However, we are not ready to commit to binary and source compatibility for that class - particularly given prospective changes to the Qt Painting engine which could allow us to clean up the API for that class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188534</commentid>
    <comment_count>8</comment_count>
      <attachid>48310</attachid>
    <who name="Nick Young">nicholas.young</who>
    <bug_when>2010-02-07 18:02:32 -0800</bug_when>
    <thetext>Created attachment 48310
Minor Modification

Very small change. See previous patch description.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188535</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-07 18:04:19 -0800</bug_when>
    <thetext>Attachment 48310 did not pass style-queue:

Failed to run &quot;[&apos;git&apos;, &apos;reset&apos;, &apos;--hard&apos;, &apos;HEAD&apos;]&quot; exit_code: 128
fatal: Unable to create &apos;.git/index.lock&apos;: File exists.

If no other git process is currently running, this probably means a
git process crashed in this repository earlier. Make sure no other git
process is running and remove the file manually to continue.
fatal: Could not reset index file to revision &apos;HEAD&apos;.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188541</commentid>
    <comment_count>10</comment_count>
    <who name="Nick Young">nicholas.young</who>
    <bug_when>2010-02-07 19:06:03 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Attachment 48310 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;git&apos;, &apos;reset&apos;, &apos;--hard&apos;, &apos;HEAD&apos;]&quot; exit_code: 128
&gt; fatal: Unable to create &apos;.git/index.lock&apos;: File exists.
&gt; 
&gt; If no other git process is currently running, this probably means a
&gt; git process crashed in this repository earlier. Make sure no other git
&gt; process is running and remove the file manually to continue.
&gt; fatal: Could not reset index file to revision &apos;HEAD&apos;.
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against
&gt; check-webkit-style.

This was an issue with the ews script, apparently.
The patch passes check-webkit-style with no errors :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188543</commentid>
    <comment_count>11</comment_count>
      <attachid>48312</attachid>
    <who name="Nick Young">nicholas.young</who>
    <bug_when>2010-02-07 20:05:12 -0800</bug_when>
    <thetext>Created attachment 48312
Updated Patch - Removed Dependency

Removed references to the Window control. Full screen functionality requires it - there is not full screen in this patch as it is still &quot;experimental&quot; (read: broken).
Otherwise, same as previous patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189233</commentid>
    <comment_count>12</comment_count>
      <attachid>48460</attachid>
    <who name="Nick Young">nicholas.young</who>
    <bug_when>2010-02-09 21:12:20 -0800</bug_when>
    <thetext>Created attachment 48460
Updated Patch - Various Improvements

I have addressed some outstanding issues with the integration.

A bug with seeking has been resolved, and a bug with resource selection has been resolved (For multi-source media, webkit will now correctly load an alternate source if this one fails).

There has also been a concern raised in regards to the fact that the dimensions of the media controls are specified in pixels, rather than a DPI independent measurement.
Would be interested to hear thoughts on that issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189465</commentid>
    <comment_count>13</comment_count>
      <attachid>48460</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-02-10 14:32:51 -0800</bug_when>
    <thetext>Comment on attachment 48460
Updated Patch - Various Improvements

Nicholas, I&apos;m not so familiar with this code myself, I think Tor Arne will be a better reviewer. But there are a few things I can give feedback on:

&gt; -# Disable HTML5 media compilation if phonon is unavailable
&gt; -!contains(DEFINES, ENABLE_VIDEO=1) {
&gt; -    !contains(QT_CONFIG, phonon) {
&gt; -        DEFINES -= ENABLE_VIDEO=1
&gt; -        DEFINES += ENABLE_VIDEO=0
&gt; +# QtMultimedia since 4.7
&gt; +greaterThan(QT_MINOR_VERSION, 6) {
&gt; +    # Disable HTML5 media compilation if qtmultimedia is unavailable
&gt; +    !contains(DEFINES, ENABLE_VIDEO=1) {
&gt; +        !contains(QT_CONFIG, multimedia) {
&gt; +            DEFINES -= ENABLE_VIDEO=1
&gt; +            DEFINES += ENABLE_VIDEO=0
&gt; +        }
&gt; +    }
&gt; +} else {
&gt; +    # Disable HTML5 media compilation if phonon is unavailable
&gt; +    !contains(DEFINES, ENABLE_VIDEO=1) {
&gt; +        !contains(QT_CONFIG, phonon) {
&gt; +            DEFINES -= ENABLE_VIDEO=1
&gt; +            DEFINES += ENABLE_VIDEO=0
&gt; +        }
&gt;      }
&gt;  }

Just a thought, but perhaps the logic of the above checks would be
simpler if reversed, i.e. _enable_ video only if we have either phonon
available or 4.7 and multimedia.

&gt; +void MediaPlayerPrivate::load(const String&amp; url)
[...]
&gt; +    const QUrl rUrl(url);

I hope that conversion is safe. An alternate approach, slower but safer would be something
along the lines of

const QUrl rUrl(KURL(ParsedURLString, url));

&gt; +
&gt; +            // Set the refferer
&gt; +            request.setRawHeader(&quot;Refferer&quot;, document-&gt;documentURI().utf8().data());

That looks like a typo to me, shouldn&apos;t it be Referrer with only one f? :)

That said, there&apos;s another rule that&apos;s important to obey for referrers: When an https site requests a non-http resources, the referrer should not be set. See QNetworkReplyHandler.cpp.

Perhaps there&apos;s a way to re-use some more code from the networking layer here, just a thought :)

&gt; +MediaPlayerPrivateDefault::MediaPlayerPrivateDefault(MediaPlayer *player)

Coding style nitpick: The * position should be to the left.

&gt; +    : MediaPlayerPrivate(player)
&gt; +    , m_videoSurface(new QPainterVideoSurface(m_mediaPlayer))
&gt; +{
&gt; +    if (m_mediaPlayer) {

Is it really possible that m_mediaPlayer is null?

&gt; +void MediaPlayerPrivateDefault::paint(GraphicsContext* context, const IntRect&amp; rect)
&gt; +{
&gt; +    if (context-&gt;paintingDisabled())
&gt; +        return;
&gt; +
&gt; +    if (!m_isVisible)
&gt; +        return;
&gt; +
&gt; +    // Grab the painter
&gt; +    QPainter* painter = context-&gt;platformContext();
&gt; +
&gt; +    if (!m_isActive) {
&gt; +        // Attempt GL Setup
&gt; +#if !defined(QT_NO_OPENGL) &amp;&amp; !defined(QT_OPENGL_ES_1_CL) &amp;&amp; !defined(QT_OPENGL_ES_1)
&gt; +        if ((painter-&gt;paintEngine()-&gt;type() == QPaintEngine::OpenGL
&gt; +             || painter-&gt;paintEngine()-&gt;type() == QPaintEngine::OpenGL2)) {
&gt; +            // Set GL Context
&gt; +            m_videoSurface-&gt;setGLContext(const_cast&lt;QGLContext *&gt;(QGLContext::currentContext()));

Style nitpick: No space before * here.


&gt; +
&gt; +class QVideoSurfacePainter {
&gt; +public:

If this class is here only temporarily, then it would be best to add a comment here
explaining that it&apos;ll be removed in the future. That would also help to understand why
the coding style is different.


&gt; +
&gt; +class QVideoSurfacePainter;
&gt; +class Q_AUTOTEST_EXPORT QPainterVideoSurface : public QAbstractVideoSurface {

There shouldn&apos;t be a Q_AUTOTEST_EXPORT macro here, not when building inside WebKit.


&gt; +bool RenderThemeQt::paintMediaCurrentTime(RenderObject* o, const RenderObject::PaintInfo&amp; paintInfo, const IntRect&amp; r)
&gt; +{
&gt; +    StylePainter p(this, paintInfo);
&gt; +    if (!p.isValid())
&gt; +        return true;
&gt; +
&gt; +    if (o-&gt;style()) {
&gt; +        // Set the text color depending on platform
&gt; +        QPalette pal = QApplication::palette();

I think it would be better to use setPaletteFromPageClientIfExists instead of the application global palette.


&gt; +    static const QColor highlightText = QApplication::palette().brush(QPalette::Active, QPalette::HighlightedText).color();
&gt; +    static const QColor scaleColor(highlightText.red(), highlightText.green(), highlightText.blue(), mediaControlsBaselineOpacity() * 255);

I&apos;d prefer if these weren&apos;t global variables but taken from the page client&apos;s palette instead.


&gt; +    #if QT_VERSION &gt;= 0x040700
&gt; +    if (MediaPlayer* player = mediaElement-&gt;player()) {
&gt; +        // Get the buffered parts of the media
&gt; +        PassRefPtr&lt;TimeRanges&gt; buffered = player-&gt;buffered();
&gt; +        if (buffered-&gt;length() &gt; 0 &amp;&amp; player-&gt;duration() &lt; std::numeric_limits&lt;float&gt;::infinity()) {
&gt; +            // Set the transform and brush
&gt; +            WorldMatrixTransformer transformer(p.painter, o, r);
&gt; +            p.painter-&gt;setBrush(getMediaControlForegroundColor());
&gt; +
&gt; +            // Paint each buffered section
&gt; +            ExceptionCode ex;
&gt; +            for (int i = 0; i &lt; buffered-&gt;length(); i++) {
&gt; +                float startX = (buffered-&gt;start(i, ex) / player-&gt;duration()) * 100;
&gt; +                float width = ((buffered-&gt;end(i, ex) / player-&gt;duration()) * 100) - startX;
&gt; +                p.painter-&gt;drawRect(startX, 37, width, 26);
&gt; +            }
&gt; +        }
&gt; +    }
&gt; +    #endif

Usually preprocessor statements begin at the beginning of the line :)


How does the new RenderTheme media controls part affect the existing Phonon backend?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189563</commentid>
    <comment_count>14</comment_count>
    <who name="Nick Young">nicholas.young</who>
    <bug_when>2010-02-10 18:22:18 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; Nicholas, I&apos;m not so familiar with this code myself, I think Tor Arne will be a
&gt; better reviewer. But there are a few things I can give feedback on:

Your partial review is still much appreciated :)

&gt; Just a thought, but perhaps the logic of the above checks would be
&gt; simpler if reversed, i.e. _enable_ video only if we have either phonon
&gt; available or 4.7 and multimedia.

Yep. Good Point.

&gt; I hope that conversion is safe. An alternate approach, slower but safer would
&gt; be something
&gt; along the lines of
&gt; 
&gt; const QUrl rUrl(KURL(ParsedURLString, url));

On this, I will need more convincing. My question would be this: where is it said that KURL is better at parsing than QUrl?

In either case, the url parameter passed to this method has already been parsed by KURL and checked by security policies, before being converted back to a String. See HTMLMediaElement::loadResource().

Aside: the Media Player interface should probably specify a KURL parameter for this load method, rather than a String.

Bottom line: I don&apos;t see how this conversion could ever be unsafe.
Perhaps removing the implicit conversion would be sufficient:

const QUrl rUrl(QString(url));

&gt; That looks like a typo to me, shouldn&apos;t it be Referrer with only one f? :)

It should be &quot;Referer&quot;. Neither of us was right ;)

&gt; That said, there&apos;s another rule that&apos;s important to obey for referrers: When an
&gt; https site requests a non-http resources, the referrer should not be set. See
&gt; QNetworkReplyHandler.cpp.
&gt; 
&gt; Perhaps there&apos;s a way to re-use some more code from the networking layer here,
&gt; just a thought :)

I had a look at the file you specified, as well as some of the related networking code. Looks like I could replace this entire block of code
with:

    // Construct the media content with a network request if the resource is http[s]
    if (scheme == &quot;http&quot; || scheme == &quot;https&quot;) {
        const QNetworkRequest request = ResourceRequest(rurl).toNetworkRequest();
        m_mediaPlayer-&gt;setMedia(QMediaContent(request));
    } else {
        // Otherwise, just use the URL
        m_mediaPlayer-&gt;setMedia(QMediaContent(rUrl));
    }

Would that work?
I certainly appreciate your guidance here.


&gt; Coding style nitpick: The * position should be to the left.

Fixed :)

&gt; Is it really possible that m_mediaPlayer is null?

Yeah, this check is probably unnecessary.
Technically, if &quot;new QMediaPlayer&quot; fails, this could happen - but new rarely fails, even when out of memory.

I&apos;ve removed the check in both of the places where it appears :)

&gt; Style nitpick: No space before * here.

Yep.
 
&gt; If this class is here only temporarily, then it would be best to add a comment
&gt; here
&gt; explaining that it&apos;ll be removed in the future. That would also help to
&gt; understand why
&gt; the coding style is different.

Done.

&gt; There shouldn&apos;t be a Q_AUTOTEST_EXPORT macro here, not when building inside
&gt; WebKit.

Whoops. I missed that when moving that class in to Webkit. Removed.

&gt; I think it would be better to use setPaletteFromPageClientIfExists instead of
&gt; the application global palette.

Sure.

&gt; I&apos;d prefer if these weren&apos;t global variables but taken from the page client&apos;s
&gt; palette instead.

Yep.

&gt; Usually preprocessor statements begin at the beginning of the line :)

Indeed they do. Fixed.

&gt; How does the new RenderTheme media controls part affect the existing Phonon
&gt; backend?

The phonon backend gains a current time display and a functional volume control. The controls have been tested for both backends :)

That part in RenderThemeQt which has a version guard is to account for the fact that the phonon backend neither implements the buffered() method nor the maxTimeSeekable() method. If you would prefer, I could try and implement one of those methods on the phonon backend so that the media controls are on a truly equal footing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189586</commentid>
    <comment_count>15</comment_count>
    <who name="Ariya Hidayat">ariya.hidayat</who>
    <bug_when>2010-02-10 19:45:50 -0800</bug_when>
    <thetext>
&gt; To build the QtMultimedia compatible code, you&apos;ll have to build and link
&gt; against a recent version of qt-multimedia
&gt; (git://scm.dev.nokia.troll.no/qt/qt-multimedia.git).

For all non-Trolls like us, can you point out the public repository for this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189591</commentid>
    <comment_count>16</comment_count>
    <who name="Nick Young">nicholas.young</who>
    <bug_when>2010-02-10 20:07:25 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; &gt; To build the QtMultimedia compatible code, you&apos;ll have to build and link
&gt; &gt; against a recent version of qt-multimedia
&gt; &gt; (git://scm.dev.nokia.troll.no/qt/qt-multimedia.git).
&gt; 
&gt; For all non-Trolls like us, can you point out the public repository for this?

Mmm, not exactly.
What you can do is look at the multimedia sections of Qt Mobility, which is essentially equal to QtMultimedia (with the exception that QtMultimedia does not have the QtMobility namespace).

Relevant files can be seen here: http://qt.gitorious.org/qt-mobility/qt-mobility/trees/master/src/multimedia

Note that this public repo is not 100% up to date.

It should be possible to successfully link against QtMobility, provided you add a &quot;using namespace QtMobility;&quot;. You will also need to build qtmobility, then add in some additions to WebCore.pro

My build against mobility has these lines:

    INCLUDEPATH += \
        $$PWD/../../../../../../qtmobility/qtm-multimedia/src/global \
        $$PWD/../../../../../../qtmobility/qtm-multimedia/src/multimedia
        
    LIBS += \
        -L$$PWD/../../../../../../../build/qtmobility/qtm-multimedia/lib \
        -lQtMedia</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189606</commentid>
    <comment_count>17</comment_count>
      <attachid>48548</attachid>
    <who name="Nick Young">nicholas.young</who>
    <bug_when>2010-02-10 22:21:21 -0800</bug_when>
    <thetext>Created attachment 48548
Updated Patch - Addressed issues from review

The ResourceRequest path didn&apos;t work out. It seems headers and cookies are not added to the network request until later..?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189820</commentid>
    <comment_count>18</comment_count>
    <who name="Ariya Hidayat">ariya.hidayat</who>
    <bug_when>2010-02-11 15:39:05 -0800</bug_when>
    <thetext>&gt; It should be possible to successfully link against QtMobility, provided you add
&gt; a &quot;using namespace QtMobility;&quot;. You will also need to build qtmobility, then
&gt; add in some additions to WebCore.pro

Then should this patch be modified to use QtMobility instead?

I mean, what&apos;s the point of upstreaming big change which can&apos;t be built and tested by anyone else who do not have access to QtMultimedia? I might miss something obvious here...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189828</commentid>
    <comment_count>19</comment_count>
    <who name="Nick Young">nicholas.young</who>
    <bug_when>2010-02-11 16:24:33 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; Then should this patch be modified to use QtMobility instead?
&gt; 
&gt; I mean, what&apos;s the point of upstreaming big change which can&apos;t be built and
&gt; tested by anyone else who do not have access to QtMultimedia? I might miss
&gt; something obvious here...

There is a very good reason why we have version guards everywhere in this patch.
As the bug title implies, this patch is targeted at Qt4.7, at which stage all of the relevant APIs should be available within Qt.

I appreciate where you are coming from - I recognized from the start that this would be an interesting balancing act.

Hopefully at some stage in the near future, the new playback APIs should make it in to Qt master. Some time after that, it should be synched in to the public Gitorious repo. This is the best I can do for non Trolls.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190371</commentid>
    <comment_count>20</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2010-02-14 20:26:07 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; Aside: the Media Player interface should probably specify a KURL parameter for
&gt; this load method, rather than a String.
&gt; 
True enough. Patches are *always* welcome ;-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190668</commentid>
    <comment_count>21</comment_count>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2010-02-16 05:08:57 -0800</bug_when>
    <thetext>Tested on Mac OS 10.6 with qt-multimedia dc7a0b2842a5866b6248e56d41db0af05f7efbc2:

http://chaos.troll.no/~tavestbo/webkit/mediaelement/ seems to work fine, although sometimes the video view does not seem to be initialized (no resize, and no video blitting, only sound).

http://jilion.com/sublime/video does not work, no video or sound out of the box, but after clicking around the seek bar i managed to get sound and play/pause working, but no video.

http://www.youtube.com/watch?v=H6UsFe6X3cc (after visiting youtube.com/html5 and joining the beta), does not seem to load.

http://vimeo.com/8736190 (after clicking &quot;Switch to HTML5 player&quot;), does not seem to load. Stdout:

Building Pixel Buffer visual context 
Could not create visual context (PixelBuffer) 
QT7MovieRenderer: failed to create visual context 

If i switch HD to off loading and playback with sound but no video seems to work.

Neither of these problems are showstoppers though, as they didn&apos;t work with the old Phonon backend either, and this new backend has a lot more potential than the old one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190807</commentid>
    <comment_count>22</comment_count>
    <who name="Nick Young">nicholas.young</who>
    <bug_when>2010-02-16 16:06:47 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; Tested on Mac OS 10.6 with qt-multimedia
&gt; dc7a0b2842a5866b6248e56d41db0af05f7efbc2:

Hey there Tor Arne, thanks for taking the time to look this patch over.
I will say in advance, that I&apos;m working on an updated patch - It should be much smaller and elegant, it won&apos;t have that QPainterVideoSurface dependency that we&apos;ve added, and it will keep platform specific optimisations in QtMultimedia instead of Webkit.

&gt; http://chaos.troll.no/~tavestbo/webkit/mediaelement/ seems to work fine,
&gt; although sometimes the video view does not seem to be initialized (no resize,
&gt; and no video blitting, only sound).

Connection is timing out. I&apos;ll try it again later.

&gt; http://jilion.com/sublime/video does not work, no video or sound out of the
&gt; box, but after clicking around the seek bar i managed to get sound and
&gt; play/pause working, but no video.

Doesn&apos;t work for me either. I&apos;ll investigate.

&gt; http://www.youtube.com/watch?v=H6UsFe6X3cc (after visiting youtube.com/html5
&gt; and joining the beta), does not seem to load.

I&apos;ve spent quite some time trying to get youtube/html5 to work. I am yet to have success, and I am extremely suspicious that youtube is serving only to specific user agents.

&gt; http://vimeo.com/8736190 (after clicking &quot;Switch to HTML5 player&quot;), does not
&gt; seem to load. Stdout:
&gt; 
&gt; Building Pixel Buffer visual context 
&gt; Could not create visual context (PixelBuffer) 
&gt; QT7MovieRenderer: failed to create visual context 
&gt; 
&gt; If i switch HD to off loading and playback with sound but no video seems to
&gt; work.

Seems like you may have stumbled over an issue without our QuickTime backend. I&apos;ll try and investigate. Vimeo has been a difficult one to test, as the flash plugin I have on my workstation has a propensity for segfaults when browsing Vimeo.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190832</commentid>
    <comment_count>23</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2010-02-16 17:46:38 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; 
&gt; &gt; http://www.youtube.com/watch?v=H6UsFe6X3cc (after visiting youtube.com/html5
&gt; &gt; and joining the beta), does not seem to load.
&gt; 
&gt; I&apos;ve spent quite some time trying to get youtube/html5 to work. I am yet to
&gt; have success, and I am extremely suspicious that youtube is serving only to
&gt; specific user agents.
&gt; 
Check to make sure you are sending all of the cookies for the movie url. Both the Quicktime/Windows and GTK based media engines had this problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190924</commentid>
    <comment_count>24</comment_count>
      <attachid>48548</attachid>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2010-02-17 00:54:55 -0800</bug_when>
    <thetext>Comment on attachment 48548
Updated Patch - Addressed issues from review

A few initial comments:

&gt; Index: WebCore/WebCore.pro
&gt; ===================================================================
&gt; --- WebCore/WebCore.pro	(revision 54641)
&gt; +++ WebCore/WebCore.pro	(working copy)
&gt; @@ -131,12 +131,20 @@ mameo5|symbian|embedded {
&gt;  
&gt;  include($$PWD/../JavaScriptCore/JavaScriptCore.pri)
&gt;  
&gt; -# Disable HTML5 media compilation if phonon is unavailable
&gt; -!contains(DEFINES, ENABLE_VIDEO=1) {
&gt; -    !contains(QT_CONFIG, phonon) {
&gt; -        DEFINES -= ENABLE_VIDEO=1
&gt; -        DEFINES += ENABLE_VIDEO=0
&gt; -    }
&gt; +
&gt; +# HTML5 Media Support
&gt; +# We require phonon for versions of Qt &lt; 4.7
&gt; +# We require QtMultimedia for versions of Qt &gt;= 4.7
&gt; +DEFINES -= ENABLE_VIDEO=1
&gt; +DEFINES += ENABLE_VIDEO=0

Please keep the !contains(DEFINES, ENABLE_VIDEO=1) logic, as it allow you to pass --[no-]video to build-webkit to override the detection

&gt;  audio::-webkit-media-controls-seek-back-button, video::-webkit-media-controls-seek-back-button {
&gt; -    /* Since MediaControlElements are always created with a renderer we have to hide
&gt; -       the controls we don&apos;t use, so they don&apos;t mess up activation and event handling */
&gt; -    left: 0px;
&gt; -    top: 0px;
&gt; -    width: 0px;
&gt; -    height: 0px;
&gt; -
&gt;      display: none;
&gt;  }
&gt;  
&gt;  audio::-webkit-media-controls-seek-forward-button, video::-webkit-media-controls-seek-forward-button {
&gt; -    /* Since MediaControlElements are always created with a renderer we have to hide
&gt; -       the controls we don&apos;t use, so they don&apos;t mess up activation and event handling */
&gt; -    left: 0px;
&gt; -    top: 0px;
&gt; -    width: 0px;
&gt; -    height: 0px;
&gt; -
&gt;      display: none;
&gt;  }
&gt;  
&gt;  audio::-webkit-media-controls-fullscreen-button, video::-webkit-media-controls-fullscreen-button {
&gt; -    /* Since MediaControlElements are always created with a renderer we have to hide
&gt; -       the controls we don&apos;t use, so they don&apos;t mess up activation and event handling */
&gt; -    left: 0px;
&gt; -    top: 0px;
&gt; -    width: 0px;
&gt; -    height: 0px;
&gt; -
&gt;      display: none;
&gt;  }

The sizes-hack was used due to display: none not working. Have you verified that this should work now? I remember seeing clicks in the areas of the seek-button being picked up and causing the video to pause, even though the element was set to display: none.

&gt; Index: WebCore/platform/graphics/MediaPlayer.cpp
&gt; ===================================================================
&gt; --- WebCore/platform/graphics/MediaPlayer.cpp	(revision 54641)
&gt; +++ WebCore/platform/graphics/MediaPlayer.cpp	(working copy)
&gt; -#include &quot;MediaPlayerPrivatePhonon.h&quot;
&gt; +    #if QT_VERSION &lt; 0x040700
&gt; +    #include &quot;MediaPlayerPrivatePhonon.h&quot;
&gt; +    #else
&gt; +    #include &quot;MediaPlayerPrivateQt.h&quot;
&gt; +    #endif
&gt;  #elif PLATFORM(CHROMIUM)

No indentation please.

&gt; Index: WebCore/platform/qt/RenderThemeQt.cpp
&gt; ===================================================================
&gt; --- WebCore/platform/qt/RenderThemeQt.cpp	(revision 54641)
&gt; +++ WebCore/platform/qt/RenderThemeQt.cpp	(working copy)


&gt; +double RenderThemeQt::mediaControlsBaselineOpacity() const
&gt; +{
&gt; +    return 0.4;
&gt; +}
&gt; +
&gt;  void RenderThemeQt::paintMediaBackground(QPainter* painter, const IntRect&amp; r) const
&gt;  {
&gt;      painter-&gt;setPen(Qt::NoPen);
&gt; -    static QColor transparentBlack(0, 0, 0, 100);
&gt; +    static const QColor shadow = QApplication::palette().brush(QPalette::Active, QPalette::Shadow).color();
&gt; +    static QColor transparentBlack(shadow.red(), shadow.green(), shadow.blue(), mediaControlsBaselineOpacity() * 255);

This leaves me with a transparent light gray overlay instead of black transparent one, probably due to the shadow color on mac. Dunno if this was intentional (you didn&apos;t like the black i chose? :)

Anyways, the variable transparentBlack should probably be renamed transparentShadow to match the logical change.

Also, we don&apos;t normally use const for variables like this.

Will continue review when new updated patch is up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190925</commentid>
    <comment_count>25</comment_count>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2010-02-17 01:00:01 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; (In reply to comment #21)
&gt; &gt; Tested on Mac OS 10.6 with qt-multimedia
&gt; &gt; dc7a0b2842a5866b6248e56d41db0af05f7efbc2:
&gt; 
&gt; Hey there Tor Arne, thanks for taking the time to look this patch over.
&gt; I will say in advance, that I&apos;m working on an updated patch - It should be much
&gt; smaller and elegant, it won&apos;t have that QPainterVideoSurface dependency that
&gt; we&apos;ve added, and it will keep platform specific optimisations in QtMultimedia
&gt; instead of Webkit.

Rock! Can&apos;t wait to get this landed :)

&gt; &gt; http://chaos.troll.no/~tavestbo/webkit/mediaelement/ seems to work fine,
&gt; &gt; although sometimes the video view does not seem to be initialized (no resize,
&gt; &gt; and no video blitting, only sound).
&gt; 
&gt; Connection is timing out. I&apos;ll try it again later.

Hmm, should be available from the outside. Try anarki internally.

&gt; &gt; http://jilion.com/sublime/video does not work, no video or sound out of the
&gt; &gt; box, but after clicking around the seek bar i managed to get sound and
&gt; &gt; play/pause working, but no video.
&gt; 
&gt; Doesn&apos;t work for me either. I&apos;ll investigate.

Cool, but as I said, these didn&apos;t work before either, so we can do that sort of bugfixing as follow-up patches too if they appear to require more than trivial work.

&gt; I&apos;ve spent quite some time trying to get youtube/html5 to work. I am yet to
&gt; have success, and I am extremely suspicious that youtube is serving only to
&gt; specific user agents.

Hmm, possibly, see Eric&apos;s comment about cookies. 

We should probably have a menu in the QtLauncher for changing the user agent like Safari in dev-mode has, would be useful for testing.

&gt; &gt; http://vimeo.com/8736190 (after clicking &quot;Switch to HTML5 player&quot;), does not
&gt; &gt; seem to load. Stdout:
&gt; &gt; 
&gt; &gt; Building Pixel Buffer visual context 
&gt; &gt; Could not create visual context (PixelBuffer) 
&gt; &gt; QT7MovieRenderer: failed to create visual context 
&gt; &gt; 
&gt; &gt; If i switch HD to off loading and playback with sound but no video seems to
&gt; &gt; work.
&gt; 
&gt; Seems like you may have stumbled over an issue without our QuickTime backend.
&gt; I&apos;ll try and investigate. Vimeo has been a difficult one to test, as the flash
&gt; plugin I have on my workstation has a propensity for segfaults when browsing
&gt; Vimeo.

Ah, you can try hacking QtLauncher to disable plugins using QWebSettings while you investigate (should probably also be an option ;)

Thanks for looking into these issues!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191836</commentid>
    <comment_count>26</comment_count>
      <attachid>49059</attachid>
    <who name="Nick Young">nicholas.young</who>
    <bug_when>2010-02-18 23:40:46 -0800</bug_when>
    <thetext>Created attachment 49059
Updated Patch - Simplified and Improved

Ok. Here&apos;s the updated patch that I promised.
It removes the QPainterVideoSurface dependency, as well as dramatically simplifying the task of painting video frames.

The method for painting is very similar to the previous patch, the difference is it is deferred to a different class - QGraphicsVideoItem - which is in QtMultimedia. We use this item even when we don&apos;t have a QGraphicsView. When we do have a QGraphicsView, we can easily support Accelerated Compositing, I&apos;ve been chatting with Noam about this on IRC, so we should hopefully have another patch not too far in the future.

Also in this patch is a bunch of bugfixes.
Including:
- More Robust Seeking
- Support for the recently added &quot;supportsMuting()&quot; API.
- Video Size changes are propagated to WebKit
- Different path for pulling the QNAM during load(), which actually works _before_ our renderer is created (which is when load() is usually called).

We now have support for:

- Sublime Video HTML5 Player
&gt; http://jilion.com/sublime/video
(Note that on OSX, QuickTime requires the entire movie to be buffered before it will play. This seems to be specific to some HD movies, including the one used on this page.) 

- Vimeo HTML5
(I&apos;ve seen working on OSX. Am yet to test on other backends, but I believe this should work.)

We are still working on support for youtube/html5. Cookies are being sent, but our requests still result in 403 Forbidden.
Investigation is ongoing.

After realising that using the application pallete didn&apos;t work so well for the controls on Mac, I went back to the hard coded colours approach.

Note that some of the issues previously mentioned were related to our QuickTime backend on OSX.
You will need to pull a new version of qt-multimedia.

In fact, I recommend pulling qt-mulutimedia-team, which is our staging repo that we&apos;re currently in the process of integrating in to Qt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191838</commentid>
    <comment_count>27</comment_count>
    <who name="Nick Young">nicholas.young</who>
    <bug_when>2010-02-18 23:46:43 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; The sizes-hack was used due to display: none not working. Have you verified
&gt; that this should work now? I remember seeing clicks in the areas of the
&gt; seek-button being picked up and causing the video to pause, even though the
&gt; element was set to display: none.

I have not seen any evidence that this is still an issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191839</commentid>
    <comment_count>28</comment_count>
      <attachid>49060</attachid>
    <who name="Nick Young">nicholas.young</who>
    <bug_when>2010-02-18 23:51:17 -0800</bug_when>
    <thetext>Created attachment 49060
Updated Patch..

Malformed Patch. Let&apos;s try that again ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191850</commentid>
    <comment_count>29</comment_count>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2010-02-19 03:19:06 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; Ok. Here&apos;s the updated patch that I promised.
&gt; It removes the QPainterVideoSurface dependency, as well as dramatically
&gt; simplifying the task of painting video frames.

Nice!

&gt; We now have support for:
&gt; 
&gt; - Sublime Video HTML5 Player
&gt; &gt; http://jilion.com/sublime/video
&gt; (Note that on OSX, QuickTime requires the entire movie to be buffered before it
&gt; will play. This seems to be specific to some HD movies, including the one used
&gt; on this page.) 

Tested with qt-multimedia-team repo 7e7cbe2152efe47972e11875f008ddb8f0cc78db

Can confirm this works now, but I get a spinning beach ball on OS X while the movie loads. In chrome the loading is almost instentanious, and in Safari the load is slower and seems to match the time we spend, but the UI is responsive and the seek bar is updated with the load progress. Dunno what could be the cause, just reporting what I&apos;m seeing :)

The seek bare also flickers a lot when you hover over it while the video is playing. See screenshot. 

Also, when I then move from the sublime-player to http://vimeo.com/8736190, the video sound keeps playing in the background, so something is not unloaded as it should it seems.

Anyways, we can investigate these bugs as follow-up patches.

&gt; - Vimeo HTML5
&gt; (I&apos;ve seen working on OSX. Am yet to test on other backends, but I believe this
&gt; should work.)

Confirmed

&gt; We are still working on support for youtube/html5. Cookies are being sent, but
&gt; our requests still result in 403 Forbidden.
&gt; Investigation is ongoing.

Cool

&gt; After realising that using the application pallete didn&apos;t work so well for the
&gt; controls on Mac, I went back to the hard coded colours approach.

Looks good now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191858</commentid>
    <comment_count>30</comment_count>
      <attachid>49060</attachid>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2010-02-19 03:46:20 -0800</bug_when>
    <thetext>Comment on attachment 49060
Updated Patch..

LGTM, a few nitpicks below. I also had to change QtMedia to QtMultimedia a few places to make it compile against latest qt-multimedia-team&apos;s master, so r- for now, but should be able to land this soon.


&gt; +!contains(DEFINES, ENABLE_VIDEO=1):!contains(DEFINES, ENABLE_VIDEO=0) {

You can use the short-form !contains(DEFINES, ENABLE_VIDEO=.)


&gt; +bool MediaPlayerPrivate::hasVideo() const
&gt; +{
&gt; +    // return m_mediaPlayer-&gt;isVideoAvailable();
&gt; +    return true;
&gt; +}

Is this not implemented yet in QtMultimedia?

&gt; +    QLatin1String blKey(&quot;bytes-loaded&quot;);

Coding-style: bytesLoadedKey

&gt; +    p.painter-&gt;setPen(mediaElement-&gt;muted() ? Qt::darkGray : Qt::lightGray);

Minor visual style nitpick: Is this to contrast the dark red? The gray outline does not match the other controls, such as the play buttons etc. I&apos;d say skip this for now, and we can revisit the styling of the whole default control style if neccecary.

&gt; +bool RenderThemeQt::paintMediaVolumeSliderTrack(RenderObject *o, const RenderObject::PaintInfo &amp;paintInfo, const IntRect &amp;r)
&gt; +    // Draw the outer rectangle
&gt; +    p.painter-&gt;setPen(Qt::lightGray);

Same with this, I&apos;d rather we keep the no-pen look for now :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191904</commentid>
    <comment_count>31</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2010-02-19 07:15:04 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; - Sublime Video HTML5 Player
&gt; &gt; http://jilion.com/sublime/video
&gt; (Note that on OSX, QuickTime requires the entire movie to be buffered before it
&gt; will play. This seems to be specific to some HD movies, including the one used
&gt; on this page.) 
&gt; 
That is a symptom of a movie that was not &quot;flattened&quot;, saving so the &apos;moov&apos; atom (the movie table of contents) is at the beginning of the file. Looking at the sublime mp4 file that is indeed the case:

    &apos;ftyp&apos;  size: 28  offset: 0   - File Type
    &apos;free&apos;  size: 132  offset: 28   - Free Space
    &apos;mdat&apos;  size: 29887735  offset: 160   - Movie Data
    &apos;moov&apos;  size: 69206  offset: 29887895   - Movie

This means that if the client doesn&apos;t support reading the file with byte range requests, as is the case with &quot;classic&quot; QuickTime, it has to read 29887895 bytes before it gets to the tables it needs to understand the media data.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192330</commentid>
    <comment_count>32</comment_count>
    <who name="Nick Young">nicholas.young</who>
    <bug_when>2010-02-21 17:27:20 -0800</bug_when>
    <thetext>(In reply to comment #30)
&gt; LGTM, a few nitpicks below. I also had to change QtMedia to QtMultimedia a few
&gt; places to make it compile against latest qt-multimedia-team&apos;s master, so r- for
&gt; now, but should be able to land this soon.

A namespace change was made between me posting that patch and you pulling the repo ;) Nevermind, fixed now.

&gt; You can use the short-form !contains(DEFINES, ENABLE_VIDEO=.)

Sure.
 
&gt; Is this not implemented yet in QtMultimedia?

At one stage it was causing some problems, because the gstreamer backend only returns true to this after you&apos;ve begun playback. However, I&apos;ve done a quick test and there does not seem to be any problems now.

&gt; Coding-style: bytesLoadedKey

Done.

&gt; Minor visual style nitpick: Is this to contrast the dark red? The gray outline
&gt; does not match the other controls, such as the play buttons etc. I&apos;d say skip
&gt; this for now, and we can revisit the styling of the whole default control style
&gt; if neccecary.
&gt; 
&gt; Same with this, I&apos;d rather we keep the no-pen look for now :)

OK, that seems reasonable. I&apos;ve removed those, and changed the volume control slightly so it&apos;s consistent with the no-pen style.

Patch Soon :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192331</commentid>
    <comment_count>33</comment_count>
      <attachid>49180</attachid>
    <who name="Nick Young">nicholas.young</who>
    <bug_when>2010-02-21 17:37:00 -0800</bug_when>
    <thetext>Created attachment 49180
Patch - Round 10

10th time lucky? ;-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192428</commentid>
    <comment_count>34</comment_count>
      <attachid>49180</attachid>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2010-02-22 05:39:52 -0800</bug_when>
    <thetext>Comment on attachment 49180
Patch - Round 10

We have a winner!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192433</commentid>
    <comment_count>35</comment_count>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2010-02-22 05:54:11 -0800</bug_when>
    <thetext>Landed in r55079</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192926</commentid>
    <comment_count>36</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2010-02-23 06:57:01 -0800</bug_when>
    <thetext>(In reply to comment #34)
&gt; (From update of attachment 49180 [details])
&gt; We have a winner!

A few late comments:


155     // Grab the client media element
156     HTMLMediaElement* element = static_cast&lt;HTMLMediaElement*&gt;(m_player-&gt;mediaPlayerClient());
 ... 
197     // Set the current volume and mute status
198     // We get these from the element, rather than the player, in case we have
199     // transitioned from a media engine which doesn&apos;t support muting, to a media
200     // engine which does.
201     m_mediaPlayer-&gt;setMuted(element-&gt;muted());
202     m_mediaPlayer-&gt;setVolume(static_cast&lt;int&gt;(element-&gt;volume() * 100.0));

I cry foul - no fair casting the &quot;client&quot; pointer to the element so you can use it! If there is a problem here you should file a bug and fix it so all ports benefit from the change. Is there any reason that MediaPlayer needs to cache these values?


315 unsigned MediaPlayerPrivate::bytesLoaded() const
316 {
317     unsigned percentage = m_mediaPlayer-&gt;bufferStatus();
318
319     if (percentage == 100) {
320         if (m_networkState != MediaPlayer::Idle) {
321             m_networkState = MediaPlayer::Idle;
322             m_player-&gt;networkStateChanged();
323         }
324         if (m_readyState != MediaPlayer::HaveEnoughData) {
325             m_readyState = MediaPlayer::HaveEnoughData;
326             m_player-&gt;readyStateChanged();
327         }
328     }
329

Is it possible for bufferStatus() to return 100 when mediaStatus() does not also return QMediaPlayer::BufferedMedia or QMediaPlayer::EndOfMedia? If so, why? If not, why do this check here when the condition will be detected in updateStates()?


34 class MediaPlayerPrivate : public QObject, public MediaPlayerPrivateInterface {
35
36     Q_OBJECT
37
38 public:
39     static MediaPlayerPrivateInterface* create(MediaPlayer* player);
40     ~MediaPlayerPrivate();
41
42     static void registerMediaEngine(MediaEngineRegistrar);
43     static void getSupportedTypes(HashSet&lt;String&gt;&amp;);
44     static MediaPlayer::SupportsType supportsType(const String&amp;, const String&amp;);
45     static bool isAvailable() { return true; }
46

Only registerMediaEngine should be public, everything else can be private.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193176</commentid>
    <comment_count>37</comment_count>
    <who name="Nick Young">nicholas.young</who>
    <bug_when>2010-02-23 16:31:21 -0800</bug_when>
    <thetext>
&gt; I cry foul - no fair casting the &quot;client&quot; pointer to the element so you can use
&gt; it! If there is a problem here you should file a bug and fix it so all ports
&gt; benefit from the change. Is there any reason that MediaPlayer needs to cache
&gt; these values?

To be fair, the caching isn&apos;t really the problem. There&apos;s a problem related to supportsMuting() which crops up when you move from a NullMediaPlayerPrivate (which doesn&apos;t support muting) to an actual MediaPlayerPrivate (which does).

It was easier to fix here. But if I get a chance, I&apos;ll file a bug and submit a patch.

&gt; Is it possible for bufferStatus() to return 100 when mediaStatus() does not
&gt; also return QMediaPlayer::BufferedMedia or QMediaPlayer::EndOfMedia? If so,
&gt; why? If not, why do this check here when the condition will be detected in
&gt; updateStates()?

This is here because of an inconsistency with our backends. Fair to say, I should probably patch the backend and remove this ;)

&gt; Only registerMediaEngine should be public, everything else can be private.

I suppose. I don&apos;t really see a problem with it how it is unless it introduces some sort of security issue..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193240</commentid>
    <comment_count>38</comment_count>
    <who name="Nick Young">nicholas.young</who>
    <bug_when>2010-02-23 21:58:01 -0800</bug_when>
    <thetext>&gt; To be fair, the caching isn&apos;t really the problem. There&apos;s a problem related to
&gt; supportsMuting() which crops up when you move from a NullMediaPlayerPrivate
&gt; (which doesn&apos;t support muting) to an actual MediaPlayerPrivate (which does).
&gt; 
&gt; It was easier to fix here. But if I get a chance, I&apos;ll file a bug and submit a
&gt; patch.

Bug 35327
After some investigation, the problem wasn&apos;t exactly how I described it here, but somewhat similar.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193247</commentid>
    <comment_count>39</comment_count>
    <who name="Nick Young">nicholas.young</who>
    <bug_when>2010-02-23 22:29:33 -0800</bug_when>
    <thetext>Eric&apos;s other concerns have been (mostly) addressed in Bug 35328.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48202</attachid>
            <date>2010-02-04 23:05:36 -0800</date>
            <delta_ts>2010-02-04 23:10:23 -0800</delta_ts>
            <desc>Initial Patch</desc>
            <filename>webkit-qtmultimedia-integration.txt</filename>
            <type>text/plain</type>
            <size>35837</size>
            <attacher name="Nick Young">nicholas.young</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDQwOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMTAtMDItMDQgIE5pY2hvbGFzIFlvdW5nICA8bmljaG9sYXMueW91
bmdAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICBbUXRdIFN3aXRjaGluZyBmcm9tIFBob25vbiB0byBRdE11bHRpbWVkaWEgQmFja2Vu
ZCBmb3IgUXQgNC43CisgICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MzQ2MzEKKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgcGF0Y2ggb25seSBhZmZl
Y3RzIG11bHRpbWVkaWEgYmFja2VuZC4KKworICAgICAgICAqIFdlYkNvcmUucHJvOiBEaWZmZXJl
bnQgYnVpbGQgZGVwZW5kaW5nIG9uIFF0IHZlcnNpb24uCisgICAgICAgICogY3NzL21lZGlhQ29u
dHJvbHNRdC5jc3M6IFVwZGF0ZWQgZm9yIG5ldyBhbmQgbW9kaWZpZWQgY29udHJvbHMuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwOiBEaWZmZXJlbnQgYmFja2Vu
ZCBpbmNsdWRlZCBkZXBlbmRpbmcgb24gUXQgdmVyc2lvbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9x
dC9SZW5kZXJUaGVtZVF0LmNwcDogVXBkYXRlZCBtZWRpYSBjb250cm9scy4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBhaW50TWVkaWFNdXRlQnV0dG9uKTogQ2hhbmdlZCBzdHls
aW5nLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYUN1cnJlbnRU
aW1lKTogQWRkZWQgY3VycmVudCB0aW1lIGRpc3BsYXkuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZVF0Ojpmb3JtYXRNZWRpYUNvbnRyb2xzQ3VycmVudFRpbWUpOiBBZGRlZCAgdGltZSBm
b3JtYXR0aW5nLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6Zm9ybWF0TWVkaWFD
b250cm9sc1JlbWFpbmluZ1RpbWUpOiBObyByZW1haW5pbmcgdGltZSBpcyBzaG93bi4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUcmFjayk6
IFZvbHVtZSBzbGlkZXIgYWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0Ojpw
YWludE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIpOiBTZWUgYWJvdmUuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhU2xpZGVyVHJhY2spOiBVcGRhdGVkIGZvciBRdE11
bHRpbWVkaWEgYmFja2VuZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBhaW50
TWVkaWFTbGlkZXJUaHVtYik6IERyb3BwZWQgYW4gdW5uZWNlc3NhcnkgY2hlY2suCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjphZGp1c3RTbGlkZXJUaHVtYlNpemUpOiBIYW5kbGUg
YSBjYXNlIHdoaWNoIHdhc24ndCBoYW5kbGVkIHByZXZpb3VzbHkuCisgICAgICAgICogcGxhdGZv
cm0vcXQvUmVuZGVyVGhlbWVRdC5oOiBSZWltcGxlbWVudGVkIGEgZmV3IG1vcmUgbWV0aG9kcy4g
CisKIDIwMTAtMDItMDQgIE1hcmsgUm93ZSAgPG1yb3dlQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDU0NDA3KQorKysgV2Vi
Q29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMTMxLDExICsxMzEsMjIgQEAgbWFt
ZW81fHN5bWJpYW58ZW1iZWRkZWQgewogCiBpbmNsdWRlKCQkUFdELy4uL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnByaSkKIAotIyBEaXNhYmxlIEhUTUw1IG1lZGlhIGNvbXBpbGF0aW9u
IGlmIHBob25vbiBpcyB1bmF2YWlsYWJsZQotIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9WSURF
Tz0xKSB7Ci0gICAgIWNvbnRhaW5zKFFUX0NPTkZJRywgcGhvbm9uKSB7Ci0gICAgICAgIERFRklO
RVMgLT0gRU5BQkxFX1ZJREVPPTEKLSAgICAgICAgREVGSU5FUyArPSBFTkFCTEVfVklERU89MAor
IyBRdE11bHRpbWVkaWEgc2luY2UgNC43CitncmVhdGVyVGhhbihRVF9NSU5PUl9WRVJTSU9OLCA2
KSB7CisgICAgIyBEaXNhYmxlIEhUTUw1IG1lZGlhIGNvbXBpbGF0aW9uIGlmIHF0bXVsdGltZWRp
YSBpcyB1bmF2YWlsYWJsZQorICAgICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfVklERU89MSkg
eworICAgICAgICAhY29udGFpbnMoUVRfQ09ORklHLCBtdWx0aW1lZGlhKSB7CisgICAgICAgICAg
ICBERUZJTkVTIC09IEVOQUJMRV9WSURFTz0xCisgICAgICAgICAgICBERUZJTkVTICs9IEVOQUJM
RV9WSURFTz0wCisgICAgICAgIH0KKyAgICB9Cit9IGVsc2UgeworICAgICMgRGlzYWJsZSBIVE1M
NSBtZWRpYSBjb21waWxhdGlvbiBpZiBwaG9ub24gaXMgdW5hdmFpbGFibGUKKyAgICAhY29udGFp
bnMoREVGSU5FUywgRU5BQkxFX1ZJREVPPTEpIHsKKyAgICAgICAgIWNvbnRhaW5zKFFUX0NPTkZJ
RywgcGhvbm9uKSB7CisgICAgICAgICAgICBERUZJTkVTIC09IEVOQUJMRV9WSURFTz0xCisgICAg
ICAgICAgICBERUZJTkVTICs9IEVOQUJMRV9WSURFTz0wCisgICAgICAgIH0KICAgICB9CiB9CiAK
QEAgLTIyOTksMjEgKzIzMTAsMzMgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1ZJREVPPTEp
IHsKICAgICAgICAgcmVuZGVyaW5nL1JlbmRlck1lZGlhLmNwcCBcCiAgICAgICAgIGJpbmRpbmdz
L2pzL0pTQXVkaW9Db25zdHJ1Y3Rvci5jcHAKIAotICAgICAgICBIRUFERVJTICs9IFwKLSAgICAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVBob25vbi5oCisg
ICAgICAgICMgUXRNdWx0aW1lZGlhIHNpbmNlIDQuNworICAgICAgICBncmVhdGVyVGhhbihRVF9N
SU5PUl9WRVJTSU9OLCA2KSB7CisgICAgICAgICAgICBIRUFERVJTICs9IFwKKyAgICAgICAgICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5oCiAKLSAgICAg
ICAgU09VUkNFUyArPSBcCi0gICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBs
YXllclByaXZhdGVQaG9ub24uY3BwCisgICAgICAgICAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAg
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5jcHAKIAot
ICAgICAgICAjIEFkZCBwaG9ub24gbWFudWFsbHkgdG8gcHJldmVudCBpdCBmcm9tIGNvbWluZyBm
aXJzdCBpbgotICAgICAgICAjIHRoZSBpbmNsdWRlIHBhdGhzLCBhcyBQaG9ub24ncyBwYXRoLmgg
Y29uZmxpY3RzIHdpdGgKLSAgICAgICAgIyBXZWJDb3JlJ3MgUGF0aC5oIG9uIGNhc2UtaW5zZW5z
aXRpdmUgZmlsZXN5c3RlbXMuCi0gICAgICAgIHF0QWRkTGlicmFyeShwaG9ub24pCi0gICAgICAg
IElOQ0xVREVQQVRIIC09ICQkUU1BS0VfSU5DRElSX1FUL3Bob25vbgotICAgICAgICBJTkNMVURF
UEFUSCArPSAkJFFNQUtFX0lOQ0RJUl9RVC9waG9ub24KLSAgICAgICAgbWFjIHsKLSAgICAgICAg
ICAgIElOQ0xVREVQQVRIIC09ICQkUU1BS0VfTElCRElSX1FUL3Bob25vbi5mcmFtZXdvcmsvSGVh
ZGVycwotICAgICAgICAgICAgSU5DTFVERVBBVEggKz0gJCRRTUFLRV9MSUJESVJfUVQvcGhvbm9u
LmZyYW1ld29yay9IZWFkZXJzCisgICAgICAgICAgICBRVCArPSBtdWx0aW1lZGlhCisgICAgICAg
ICAgICBjb250YWlucyhRVF9DT05GSUcsIG9wZW5nbCk6IFFUICs9IG9wZW5nbAorICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgSEVBREVSUyArPSBcCisgICAgICAgICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uLmgKKworICAgICAgICAgICAg
U09VUkNFUyArPSBcCisgICAgICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQ
bGF5ZXJQcml2YXRlUGhvbm9uLmNwcAorCisgICAgICAgICAgICAjIEFkZCBwaG9ub24gbWFudWFs
bHkgdG8gcHJldmVudCBpdCBmcm9tIGNvbWluZyBmaXJzdCBpbgorICAgICAgICAgICAgIyB0aGUg
aW5jbHVkZSBwYXRocywgYXMgUGhvbm9uJ3MgcGF0aC5oIGNvbmZsaWN0cyB3aXRoCisgICAgICAg
ICAgICAjIFdlYkNvcmUncyBQYXRoLmggb24gY2FzZS1pbnNlbnNpdGl2ZSBmaWxlc3lzdGVtcy4K
KyAgICAgICAgICAgIHF0QWRkTGlicmFyeShwaG9ub24pCisgICAgICAgICAgICBJTkNMVURFUEFU
SCAtPSAkJFFNQUtFX0lOQ0RJUl9RVC9waG9ub24KKyAgICAgICAgICAgIElOQ0xVREVQQVRIICs9
ICQkUU1BS0VfSU5DRElSX1FUL3Bob25vbgorICAgICAgICAgICAgbWFjIHsKKyAgICAgICAgICAg
ICAgICBJTkNMVURFUEFUSCAtPSAkJFFNQUtFX0xJQkRJUl9RVC9waG9ub24uZnJhbWV3b3JrL0hl
YWRlcnMKKyAgICAgICAgICAgICAgICBJTkNMVURFUEFUSCArPSAkJFFNQUtFX0xJQkRJUl9RVC9w
aG9ub24uZnJhbWV3b3JrL0hlYWRlcnMKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiB9Cklu
ZGV4OiBXZWJDb3JlL2Nzcy9tZWRpYUNvbnRyb2xzUXQuY3NzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvY3NzL21lZGlhQ29udHJvbHNRdC5jc3MJKHJldmlzaW9uIDU0NDA3KQorKysgV2ViQ29yZS9j
c3MvbWVkaWFDb250cm9sc1F0LmNzcwkod29ya2luZyBjb3B5KQpAQCAtNTEsOCArNTEsNiBAQCB2
aWRlbzotd2Via2l0LWZ1bGwtcGFnZS1tZWRpYTo6LXdlYmtpdC1tCiB9CiAKIGF1ZGlvOjotd2Vi
a2l0LW1lZGlhLWNvbnRyb2xzLW11dGUtYnV0dG9uLCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250
cm9scy1tdXRlLWJ1dHRvbiB7Ci0gICAgbGVmdDogYXV0bzsKLSAgICByaWdodDogNXB4OwogICAg
IHdpZHRoOiAxMnB4OwogICAgIGhlaWdodDogMTJweDsKICAgICBwYWRkaW5nOiA2cHg7CkBAIC02
MCw3ICs1OCw2IEBAIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLW11dGUtYnV0dG8KIH0K
IAogYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtcGxheS1idXR0b24sIHZpZGVvOjotd2Vi
a2l0LW1lZGlhLWNvbnRyb2xzLXBsYXktYnV0dG9uIHsKLSAgICBsZWZ0OiA1cHg7CiAgICAgd2lk
dGg6IDlweDsKICAgICBoZWlnaHQ6IDEycHg7CiAgICAgcGFkZGluZzogNnB4IDEycHggNnB4IDEx
cHg7CkBAIC03Miw3ICs2OSwyMCBAQCBhdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1l
bGluZS1jCiB9CiAKIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWN1cnJlbnQtdGltZS1k
aXNwbGF5LCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1jdXJyZW50LXRpbWUtZGlzcGxh
eSB7Ci0gICAgZGlzcGxheTogbm9uZTsKKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG1lZGlhLWN1
cnJlbnQtdGltZS1kaXNwbGF5OworICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CisgICAg
ZGlzcGxheTogaW5saW5lLWJsb2NrOworICAgIGhlaWdodDogMTJweDsKKyAgICBwYWRkaW5nOiA2
cHg7CisgICAgbWFyZ2luOiA1cHggM3B4OworCisgICAgb3ZlcmZsb3c6IGhpZGRlbjsKKyAgICBj
dXJzb3I6IGRlZmF1bHQ7CisKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgZm9udC1zaXpl
OiAxMHB4OworICAgIGZvbnQtZmFtaWx5OiBWZXJkYW5hOworICAgIGZvbnQtd2VpZ2h0OiBib2xk
OwogfQogCiBhdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lLXJlbWFpbmluZy1kaXNw
bGF5LCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lLXJlbWFpbmluZy1kaXNwbGF5
IHsKQEAgLTgwLDUxICs5MCwzOCBAQCBhdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1l
LXJlbWFpCiB9CiAKIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXRpbWVsaW5lLCB2aWRl
bzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lbGluZSB7Ci0gICAgbGVmdDogNDJweDsKLSAg
ICByaWdodDogMzRweDsKICAgICBoZWlnaHQ6IDEycHg7CiAgICAgcGFkZGluZzogNnB4IDhweDsK
LSAgICBtYXJnaW46IDVweCAwcHg7CisgICAgbWFyZ2luOiA1cHggM3B4OwogfQogCiBhdWRpbzo6
LXdlYmtpdC1tZWRpYS1jb250cm9scy12b2x1bWUtc2xpZGVyLWNvbnRhaW5lciwgdmlkZW86Oi13
ZWJraXQtbWVkaWEtY29udHJvbHMtdm9sdW1lLXNsaWRlci1jb250YWluZXIgewotICAgIGRpc3Bs
YXk6IG5vbmU7CisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBtZWRpYS12b2x1bWUtc2xpZGVyLWNv
bnRhaW5lcjsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgaGVpZ2h0OiAxMDNweDsKKyAg
ICB3aWR0aDogMjRweDsKIH0KIAogYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdm9sdW1l
LXNsaWRlciwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdm9sdW1lLXNsaWRlciB7Ci0g
ICAgZGlzcGxheTogbm9uZTsKKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG1lZGlhLXZvbHVtZS1z
bGlkZXI7CisgICAgZGlzcGxheTogaW5saW5lOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKwor
ICAgIHdpZHRoOiAxMnB4OworICAgIHBhZGRpbmc6IDZweDsKKyAgICBoZWlnaHQ6IDg4cHg7Cisg
ICAgbWFyZ2luOiAwIDAgM3B4IDA7CiB9CiAKIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xz
LXNlZWstYmFjay1idXR0b24sIHZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXNlZWstYmFj
ay1idXR0b24gewotICAgIC8qIFNpbmNlIE1lZGlhQ29udHJvbEVsZW1lbnRzIGFyZSBhbHdheXMg
Y3JlYXRlZCB3aXRoIGEgcmVuZGVyZXIgd2UgaGF2ZSB0byBoaWRlCi0gICAgICAgdGhlIGNvbnRy
b2xzIHdlIGRvbid0IHVzZSwgc28gdGhleSBkb24ndCBtZXNzIHVwIGFjdGl2YXRpb24gYW5kIGV2
ZW50IGhhbmRsaW5nICovCi0gICAgbGVmdDogMHB4OwotICAgIHRvcDogMHB4OwotICAgIHdpZHRo
OiAwcHg7Ci0gICAgaGVpZ2h0OiAwcHg7Ci0KICAgICBkaXNwbGF5OiBub25lOwogfQogCiBhdWRp
bzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1zZWVrLWZvcndhcmQtYnV0dG9uLCB2aWRlbzo6LXdl
YmtpdC1tZWRpYS1jb250cm9scy1zZWVrLWZvcndhcmQtYnV0dG9uIHsKLSAgICAvKiBTaW5jZSBN
ZWRpYUNvbnRyb2xFbGVtZW50cyBhcmUgYWx3YXlzIGNyZWF0ZWQgd2l0aCBhIHJlbmRlcmVyIHdl
IGhhdmUgdG8gaGlkZQotICAgICAgIHRoZSBjb250cm9scyB3ZSBkb24ndCB1c2UsIHNvIHRoZXkg
ZG9uJ3QgbWVzcyB1cCBhY3RpdmF0aW9uIGFuZCBldmVudCBoYW5kbGluZyAqLwotICAgIGxlZnQ6
IDBweDsKLSAgICB0b3A6IDBweDsKLSAgICB3aWR0aDogMHB4OwotICAgIGhlaWdodDogMHB4Owot
CiAgICAgZGlzcGxheTogbm9uZTsKIH0KIAogYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMt
ZnVsbHNjcmVlbi1idXR0b24sIHZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWZ1bGxzY3Jl
ZW4tYnV0dG9uIHsKLSAgICAvKiBTaW5jZSBNZWRpYUNvbnRyb2xFbGVtZW50cyBhcmUgYWx3YXlz
IGNyZWF0ZWQgd2l0aCBhIHJlbmRlcmVyIHdlIGhhdmUgdG8gaGlkZQotICAgICAgIHRoZSBjb250
cm9scyB3ZSBkb24ndCB1c2UsIHNvIHRoZXkgZG9uJ3QgbWVzcyB1cCBhY3RpdmF0aW9uIGFuZCBl
dmVudCBoYW5kbGluZyAqLwotICAgIGxlZnQ6IDBweDsKLSAgICB0b3A6IDBweDsKLSAgICB3aWR0
aDogMHB4OwotICAgIGhlaWdodDogMHB4OwotCiAgICAgZGlzcGxheTogbm9uZTsKIH0KIApAQCAt
MTM2LDMgKzEzMyw3IEBAIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXJldHVybi10by0K
ICAgICBkaXNwbGF5OiBub25lOwogfQogCithdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10
b2dnbGUtY2xvc2VkLWNhcHRpb25zLWJ1dHRvbiwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJv
bHMtdG9nZ2xlLWNsb3NlZC1jYXB0aW9ucy1idXR0b24geworICAgIGRpc3BsYXk6IG5vbmU7Cit9
CisKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCShyZXZp
c2lvbiA1NDQwNykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNywxMCBAQAogI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiVGltZVJhbmdlcy5oIgogCisjaWYgUExBVEZPUk0oUVQpCisjaW5jbHVkZSA8
UXRHbG9iYWw+CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKE1BQykKICNpbmNsdWRlICJNZWRpYVBs
YXllclByaXZhdGVRVEtpdC5oIgogI2VsaWYgT1MoV0lOQ0UpICYmICFQTEFURk9STShRVCkKQEAg
LTQ2LDcgKzUwLDExIEBACiAjZWxpZiBQTEFURk9STShHVEspCiAjaW5jbHVkZSAiTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyLmgiCiAjZWxpZiBQTEFURk9STShRVCkKLSNpbmNsdWRlICJNZWRp
YVBsYXllclByaXZhdGVQaG9ub24uaCIKKyAgICAjaWYgUVRfVkVSU0lPTiA8IDB4MDQwNzAwCisg
ICAgI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZVBob25vbi5oIgorICAgICNlbHNlCisgICAg
I2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZVF0LmgiCisgICAgI2VuZGlmCiAjZWxpZiBQTEFU
Rk9STShDSFJPTUlVTSkKICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVDaHJvbWl1bS5oIgog
I2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJp
dmF0ZVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01l
ZGlhUGxheWVyUHJpdmF0ZVF0LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDQ5OSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgICAgQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlUXQuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNp
bmNsdWRlICJGcmFtZUxvYWRlckNsaWVudFF0LmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
KyNpbmNsdWRlICJUaW1lUmFuZ2VzLmgiCisjaW5jbHVkZSAiV2lkZ2V0LmgiCisKKyNpbmNsdWRl
ICJxd2ViZnJhbWUuaCIKKyNpbmNsdWRlICJxd2VicGFnZS5oIgorCisjaW5jbHVkZSA8UU5ldHdv
cmtBY2Nlc3NNYW5hZ2VyPgorI2luY2x1ZGUgPFFOZXR3b3JrQ29va2llSmFyPgorI2luY2x1ZGUg
PFFOZXR3b3JrUmVxdWVzdD4KKyNpbmNsdWRlIDxRUGFpbnRlcj4KKyNpbmNsdWRlIDxRUmVjdD4K
KyNpbmNsdWRlIDxRVGltZT4KKyNpbmNsdWRlIDxRVXJsPgorI2luY2x1ZGUgPFFWaWRlb1N1cmZh
Y2VGb3JtYXQ+CisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisK
KyNpZiAhZGVmaW5lZChRVF9OT19PUEVOR0wpICYmICFkZWZpbmVkKFFUX09QRU5HTF9FU18xX0NM
KSAmJiAhZGVmaW5lZChRVF9PUEVOR0xfRVNfMSkKKyNpbmNsdWRlIDxRR0xDb250ZXh0PgorI2Vu
ZGlmCisKKy8vIFF0IE11bHRpbWVkaWEgSW5jbHVkZXMKKyNpbmNsdWRlIDxRTWVkaWFTZXJ2aWNl
PgorI2luY2x1ZGUgPFFWaWRlb091dHB1dENvbnRyb2w+CisjaW5jbHVkZSA8UVZpZGVvUmVuZGVy
ZXJDb250cm9sPgorI2luY2x1ZGUgPFFWaWRlb1dpbmRvd0NvbnRyb2w+CisjaW5jbHVkZSA8cHJp
dmF0ZS9xcGFpbnRlcnZpZGVvc3VyZmFjZV9wLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlRGVmYXVsdCA6
IHB1YmxpYyBNZWRpYVBsYXllclByaXZhdGUgeworcHVibGljOgorICAgIEludFNpemUgbmF0dXJh
bFNpemUoKSBjb25zdDsKKyAgICB2b2lkIHNldFNpemUoY29uc3QgSW50U2l6ZSYpIHt9CisgICAg
dm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CisgICAgYm9vbCBz
dXBwb3J0c0Z1bGxzY3JlZW4oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCitwcml2YXRlIHNs
b3RzOgorICAgIHZvaWQgcmVwYWludCgpOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBN
ZWRpYVBsYXllclByaXZhdGU7CisgICAgTWVkaWFQbGF5ZXJQcml2YXRlRGVmYXVsdChNZWRpYVBs
YXllciopOworICAgIH5NZWRpYVBsYXllclByaXZhdGVEZWZhdWx0KCk7CisKKyAgICBRUGFpbnRl
clZpZGVvU3VyZmFjZSogbV92aWRlb1N1cmZhY2U7CisgICAgUVZpZGVvT3V0cHV0Q29udHJvbCog
bV9vdXRwdXRDb250cm9sOworICAgIFFWaWRlb1JlbmRlcmVyQ29udHJvbCogbV9yZW5kZXJlckNv
bnRyb2w7CisgICAgUVZpZGVvV2luZG93Q29udHJvbCogbV93aW5kb3dDb250cm9sOworCisgICAg
Ym9vbCBtX2lzQWN0aXZlOworfTsKKworTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlKiBNZWRp
YVBsYXllclByaXZhdGU6OmNyZWF0ZShNZWRpYVBsYXllciogcGxheWVyKQoreworICAgIHJldHVy
biBuZXcgTWVkaWFQbGF5ZXJQcml2YXRlRGVmYXVsdChwbGF5ZXIpOworfQorCit2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZTo6cmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJlZ2lzdHJhciBy
ZWdpc3RyYXIpCit7CisgICAgcmVnaXN0cmFyKGNyZWF0ZSwgZ2V0U3VwcG9ydGVkVHlwZXMsIHN1
cHBvcnRzVHlwZSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpnZXRTdXBwb3J0ZWRU
eXBlcyhIYXNoU2V0PFN0cmluZz4gJnN1cHBvcnRlZCkKK3sKKyAgICBRU3RyaW5nTGlzdCB0eXBl
cyA9IFFNZWRpYVBsYXllcjo6c3VwcG9ydGVkTWltZVR5cGVzKCk7CisKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IHR5cGVzLnNpemUoKTsgaSsrKQorICAgICAgICBzdXBwb3J0ZWQuYWRkKHR5cGVz
LmF0KGkpKTsKK30KKworTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZh
dGU6OnN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmIG1pbWUsIGNvbnN0IFN0cmluZyYgY29kZWMp
Cit7CisgICAgaWYgKFFNZWRpYVBsYXllcjo6aGFzU3VwcG9ydChtaW1lLCBRU3RyaW5nTGlzdChj
b2RlYykpID49IFF0TWVkaWE6OlByb2JhYmx5U3VwcG9ydGVkKQorICAgICAgICByZXR1cm4gTWVk
aWFQbGF5ZXI6OklzU3VwcG9ydGVkOworCisgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpNYXlCZVN1
cHBvcnRlZDsKK30KKworTWVkaWFQbGF5ZXJQcml2YXRlOjpNZWRpYVBsYXllclByaXZhdGUoTWVk
aWFQbGF5ZXIqIHBsYXllcikKKyAgICA6IG1fcGxheWVyKHBsYXllcikKKyAgICAsIG1fbWVkaWFQ
bGF5ZXIobmV3IFFNZWRpYVBsYXllcikKKyAgICAsIG1fbmV0d29ya1N0YXRlKE1lZGlhUGxheWVy
OjpFbXB0eSkKKyAgICAsIG1fcmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcpCisg
ICAgLCBtX2lzVmlzaWJsZShmYWxzZSkKK3sKKyAgICAvLyBTaWduYWwgSGFuZGxlcnMKKyAgICBj
b25uZWN0KG1fbWVkaWFQbGF5ZXIsIFNJR05BTChtZWRpYVN0YXR1c0NoYW5nZWQoUU1lZGlhUGxh
eWVyOjpNZWRpYVN0YXR1cykpLAorICAgICAgICAgICAgdGhpcywgU0xPVChtZWRpYVN0YXR1c0No
YW5nZWQoUU1lZGlhUGxheWVyOjpNZWRpYVN0YXR1cykpKTsKKyAgICBjb25uZWN0KG1fbWVkaWFQ
bGF5ZXIsIFNJR05BTChzdGF0ZUNoYW5nZWQoUU1lZGlhUGxheWVyOjpTdGF0ZSkpLAorICAgICAg
ICAgICAgdGhpcywgU0xPVChzdGF0ZUNoYW5nZWQoUU1lZGlhUGxheWVyOjpTdGF0ZSkpKTsKKyAg
ICBjb25uZWN0KG1fbWVkaWFQbGF5ZXIsIFNJR05BTChlcnJvcihRTWVkaWFQbGF5ZXI6OkVycm9y
KSksCisgICAgICAgICAgICB0aGlzLCBTTE9UKGhhbmRsZUVycm9yKFFNZWRpYVBsYXllcjo6RXJy
b3IpKSk7CisgICAgY29ubmVjdChtX21lZGlhUGxheWVyLCBTSUdOQUwoZHVyYXRpb25DaGFuZ2Vk
KHFpbnQ2NCkpLAorICAgICAgICAgICAgdGhpcywgU0xPVChkdXJhdGlvbkNoYW5nZWQocWludDY0
KSkpOworICAgIGNvbm5lY3QobV9tZWRpYVBsYXllciwgU0lHTkFMKHBvc2l0aW9uQ2hhbmdlZChx
aW50NjQpKSwKKyAgICAgICAgICAgIHRoaXMsIFNMT1QocG9zaXRpb25DaGFuZ2VkKHFpbnQ2NCkp
KTsKKworICAgIC8vIEdyYWIgdGhlIHBsYXllciBjb250cm9sCisgICAgaWYgKG1fbWVkaWFQbGF5
ZXIpIHsKKyAgICAgICAgUU1lZGlhU2VydmljZSogc2VydmljZSA9IG1fbWVkaWFQbGF5ZXItPnNl
cnZpY2UoKTsKKyAgICAgICAgaWYgKHNlcnZpY2UpIHsKKyAgICAgICAgICAgIG1fbWVkaWFQbGF5
ZXJDb250cm9sID0gcW9iamVjdF9jYXN0PFFNZWRpYVBsYXllckNvbnRyb2wgKj4oCisgICAgICAg
ICAgICAgICAgICAgIHNlcnZpY2UtPmNvbnRyb2woUU1lZGlhUGxheWVyQ29udHJvbF9paWQpKTsK
KyAgICAgICAgfQorICAgIH0KK30KKworTWVkaWFQbGF5ZXJQcml2YXRlOjp+TWVkaWFQbGF5ZXJQ
cml2YXRlKCkKK3sKKyAgICBkZWxldGUgbV9tZWRpYVBsYXllcjsKKyAgICBtX21lZGlhUGxheWVy
ID0gMDsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGU6Omhhc1ZpZGVvKCkgY29uc3QKK3sK
KyAgICAvLyByZXR1cm4gbV9tZWRpYVBsYXllci0+aXNWaWRlb0F2YWlsYWJsZSgpOworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6aGFzQXVkaW8oKSBjb25z
dAoreworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6bG9h
ZChjb25zdCBTdHJpbmcmIHVybCkKK3sKKyAgICAvLyBXZSBhcmUgbm93IGxvYWRpbmcKKyAgICBp
ZiAobV9uZXR3b3JrU3RhdGUgIT0gTWVkaWFQbGF5ZXI6OkxvYWRpbmcpIHsKKyAgICAgICAgbV9u
ZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGluZzsKKyAgICAgICAgbV9wbGF5ZXItPm5l
dHdvcmtTdGF0ZUNoYW5nZWQoKTsKKyAgICB9CisKKyAgICAvLyBBbmQgd2UgZG9uJ3QgaGF2ZSBh
bnkgZGF0YSB5ZXQKKyAgICBpZiAobV9yZWFkeVN0YXRlICE9IE1lZGlhUGxheWVyOjpIYXZlTm90
aGluZykgeworICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7
CisgICAgICAgIG1fcGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOworICAgIH0KKworICAgIGNv
bnN0IFFVcmwgclVybCh1cmwpOworICAgIGNvbnN0IFFTdHJpbmcgc2NoZW1lID0gclVybC5zY2hl
bWUoKS50b0xvd2VyKCk7CisKKyAgICAvLyBDb25zdHJ1Y3QgdGhlIG1lZGlhIGNvbnRlbnQgd2l0
aCBhIG5ldHdvcmsgcmVxdWVzdCBpZiB0aGUgcmVzb3VyY2UgaXMgaHR0cFtzXQorICAgIGlmIChz
Y2hlbWUgPT0gImh0dHAiIHx8IHNjaGVtZSA9PSAiaHR0cHMiKSB7CisgICAgICAgIFFOZXR3b3Jr
UmVxdWVzdCByZXF1ZXN0ID0gUU5ldHdvcmtSZXF1ZXN0KHJVcmwpOworCisgICAgICAgIC8vIEdy
YWIgdGhlIGN1cnJlbnQgZG9jdW1lbnQgYW5kIG5ldHdvcmsgbWFuYWdlcgorICAgICAgICBGcmFt
ZSogZnJhbWUgPSBtX3BsYXllci0+ZnJhbWVWaWV3KCkgPyBtX3BsYXllci0+ZnJhbWVWaWV3KCkt
PmZyYW1lKCkgOiAwOworICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZSA/IGZyYW1l
LT5kb2N1bWVudCgpIDogMDsKKyAgICAgICAgRnJhbWVMb2FkZXJDbGllbnRRdCogZnJhbWVMb2Fk
ZXIgPSAgZnJhbWUgPyBzdGF0aWNfY2FzdDxGcmFtZUxvYWRlckNsaWVudFF0Kj4oZnJhbWUtPmxv
YWRlcigpLT5jbGllbnQoKSkgOiAwOworICAgICAgICBRTmV0d29ya0FjY2Vzc01hbmFnZXIqIG1h
bmFnZXIgPSBmcmFtZUxvYWRlciA/IGZyYW1lTG9hZGVyLT53ZWJGcmFtZSgpLT5wYWdlKCktPm5l
dHdvcmtBY2Nlc3NNYW5hZ2VyKCkgOiAwOworCisgICAgICAgIGlmIChkb2N1bWVudCAmJiBtYW5h
Z2VyKSB7CisgICAgICAgICAgICAvLyBTZXQgdGhlIGNvb2tpZXMKKyAgICAgICAgICAgIFFOZXR3
b3JrQ29va2llSmFyKiBjb29raWVzID0gbWFuYWdlci0+Y29va2llSmFyKCk7CisgICAgICAgICAg
ICByZXF1ZXN0LnNldEhlYWRlcihRTmV0d29ya1JlcXVlc3Q6OkNvb2tpZUhlYWRlciwgcVZhcmlh
bnRGcm9tVmFsdWUoY29va2llcy0+Y29va2llc0ZvclVybChyVXJsKSkpOworCisgICAgICAgICAg
ICAvLyBTZXQgdGhlIHJlZmZlcmVyCisgICAgICAgICAgICByZXF1ZXN0LnNldFJhd0hlYWRlcigi
UmVmZmVyZXIiLCBkb2N1bWVudC0+ZG9jdW1lbnRVUkkoKS51dGY4KCkuZGF0YSgpKTsKKworICAg
ICAgICAgICAgLy8gU2V0IHRoZSB1c2VyIGFnZW50CisgICAgICAgICAgICByZXF1ZXN0LnNldFJh
d0hlYWRlcigiVXNlci1BZ2VudCIsIGZyYW1lTG9hZGVyLT51c2VyQWdlbnQoclVybCkudXRmOCgp
LmRhdGEoKSk7CisgICAgICAgIH0KKworICAgICAgICBtX21lZGlhUGxheWVyLT5zZXRNZWRpYShR
TWVkaWFDb250ZW50KHJlcXVlc3QpKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBPdGhlcndp
c2UsIGp1c3QgdXNlIHRoZSBVUkwKKyAgICAgICAgbV9tZWRpYVBsYXllci0+c2V0TWVkaWEoUU1l
ZGlhQ29udGVudChyVXJsKSk7CisgICAgfQorfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6
Y2FuY2VsTG9hZCgpCit7CisgICAgbV9tZWRpYVBsYXllci0+c2V0TWVkaWEoUU1lZGlhQ29udGVu
dCgpKTsKKyAgICB1cGRhdGVTdGF0ZXMoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6
OnBsYXkoKQoreworICAgIGlmIChtX21lZGlhUGxheWVyLT5zdGF0ZSgpICE9IFFNZWRpYVBsYXll
cjo6UGxheWluZ1N0YXRlKQorICAgICAgICBtX21lZGlhUGxheWVyLT5wbGF5KCk7Cit9CisKK3Zv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpwYXVzZSgpCit7CisgICAgaWYgKG1fbWVkaWFQbGF5ZXIt
PnN0YXRlKCkgPT0gUU1lZGlhUGxheWVyOjpQbGF5aW5nU3RhdGUpCisgICAgICAgIG1fbWVkaWFQ
bGF5ZXItPnBhdXNlKCk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpwYXVzZWQoKSBj
b25zdAoreworICAgIHJldHVybiBtX21lZGlhUGxheWVyLT5zdGF0ZSgpICE9IFFNZWRpYVBsYXll
cjo6UGxheWluZ1N0YXRlOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2VlayhmbG9h
dCBwb3NpdGlvbikKK3sKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXItPmlzU2Vla2FibGUoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fbWVkaWFQbGF5ZXJDb250cm9sICYmICFtX21lZGlh
UGxheWVyQ29udHJvbC0+YXZhaWxhYmxlUGxheWJhY2tSYW5nZXMoKS5jb250YWlucyhwb3NpdGlv
biAqIDEwMDApKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAocG9zaXRpb24gPiBkdXJhdGlv
bigpKQorICAgICAgICBwb3NpdGlvbiA9IGR1cmF0aW9uKCk7CisKKyAgICBtX21lZGlhUGxheWVy
LT5zZXRQb3NpdGlvbihwb3NpdGlvbiAqIDEwMDAuMGYpOworfQorCitib29sIE1lZGlhUGxheWVy
UHJpdmF0ZTo6c2Vla2luZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitmbG9h
dCBNZWRpYVBsYXllclByaXZhdGU6OmR1cmF0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAobV9yZWFk
eVN0YXRlIDwgTWVkaWFQbGF5ZXI6OkhhdmVNZXRhZGF0YSkKKyAgICAgICAgcmV0dXJuIDAuMGY7
CisKKyAgICBmbG9hdCBkdXJhdGlvbiA9IG1fbWVkaWFQbGF5ZXItPmR1cmF0aW9uKCkgLyAxMDAw
LjBmOworCisgICAgLy8gV2UgYXJlIHN0cmVhbWluZworICAgIGlmIChkdXJhdGlvbiA8PSAwLjBm
KQorICAgICAgICBkdXJhdGlvbiA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0
eSgpOworCisgICAgcmV0dXJuIGR1cmF0aW9uOworfQorCitmbG9hdCBNZWRpYVBsYXllclByaXZh
dGU6OmN1cnJlbnRUaW1lKCkgY29uc3QKK3sKKyAgICBmbG9hdCBjdXJyZW50VGltZSA9IG1fbWVk
aWFQbGF5ZXItPnBvc2l0aW9uKCkgLyAxMDAwLjBmOworICAgIHJldHVybiBjdXJyZW50VGltZTsK
K30KKworUGFzc1JlZlB0cjxUaW1lUmFuZ2VzPiBNZWRpYVBsYXllclByaXZhdGU6OmJ1ZmZlcmVk
KCkgY29uc3QKK3sKKyAgICBSZWZQdHI8VGltZVJhbmdlcz4gYnVmZmVyZWQgPSBUaW1lUmFuZ2Vz
OjpjcmVhdGUoKTsKKworICAgIGlmICghbV9tZWRpYVBsYXllckNvbnRyb2wpCisgICAgICAgIHJl
dHVybiBidWZmZXJlZDsKKworICAgIFFNZWRpYVRpbWVSYW5nZSBwbGF5YmFja1JhbmdlcyA9IG1f
bWVkaWFQbGF5ZXJDb250cm9sLT5hdmFpbGFibGVQbGF5YmFja1JhbmdlcygpOworCisgICAgZm9y
ZWFjaCAoY29uc3QgUU1lZGlhVGltZUludGVydmFsIGludGVydmFsLCBwbGF5YmFja1Jhbmdlcy5p
bnRlcnZhbHMoKSkgeworICAgICAgICBmbG9hdCByYW5nZU1pbiA9IHN0YXRpY19jYXN0PGZsb2F0
PihpbnRlcnZhbC5zdGFydCgpKSAvIDEwMDAuMGY7CisgICAgICAgIGZsb2F0IHJhbmdlTWF4ID0g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KGludGVydmFsLmVuZCgpKSAvIDEwMDAuMGY7CisgICAgICAgIGJ1
ZmZlcmVkLT5hZGQocmFuZ2VNaW4sIHJhbmdlTWF4KTsKKyAgICB9CisKKyAgICByZXR1cm4gYnVm
ZmVyZWQucmVsZWFzZSgpOworfQorCitmbG9hdCBNZWRpYVBsYXllclByaXZhdGU6Om1heFRpbWVT
ZWVrYWJsZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX21lZGlhUGxheWVyQ29udHJvbCkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fbWVkaWFQbGF5
ZXJDb250cm9sLT5hdmFpbGFibGVQbGF5YmFja1JhbmdlcygpLmxhdGVzdFRpbWUoKSkgLyAxMDAw
LjBmOworfQorCit1bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGU6OmJ5dGVzTG9hZGVkKCkgY29u
c3QKK3sKKyAgICB1bnNpZ25lZCBwZXJjZW50YWdlID0gbV9tZWRpYVBsYXllci0+YnVmZmVyU3Rh
dHVzKCk7CisKKyAgICBpZiAocGVyY2VudGFnZSA9PSAxMDApIHsKKyAgICAgICAgaWYgKG1fbmV0
d29ya1N0YXRlICE9IE1lZGlhUGxheWVyOjpJZGxlKSB7CisgICAgICAgICAgICBtX25ldHdvcmtT
dGF0ZSA9IE1lZGlhUGxheWVyOjpJZGxlOworICAgICAgICAgICAgbV9wbGF5ZXItPm5ldHdvcmtT
dGF0ZUNoYW5nZWQoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9yZWFkeVN0YXRlICE9IE1l
ZGlhUGxheWVyOjpIYXZlRW5vdWdoRGF0YSkgeworICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0g
TWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhOworICAgICAgICAgICAgbV9wbGF5ZXItPnJlYWR5
U3RhdGVDaGFuZ2VkKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBRTGF0aW4xU3RyaW5nIGJs
S2V5KCJieXRlcy1sb2FkZWQiKTsKKyAgICBpZiAobV9tZWRpYVBsYXllci0+YXZhaWxhYmxlRXh0
ZW5kZWRNZXRhRGF0YSgpLmNvbnRhaW5zKGJsS2V5KSkKKyAgICAgICAgcmV0dXJuIG1fbWVkaWFQ
bGF5ZXItPmV4dGVuZGVkTWV0YURhdGEoYmxLZXkpLnRvSW50KCk7CisKKyAgICByZXR1cm4gcGVy
Y2VudGFnZTsKK30KKwordW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRlOjp0b3RhbEJ5dGVzKCkg
Y29uc3QKK3sKKyAgICBpZiAobV9tZWRpYVBsYXllci0+YXZhaWxhYmxlTWV0YURhdGEoKS5jb250
YWlucyhRdE1lZGlhOjpTaXplKSkKKyAgICAgICAgcmV0dXJuIG1fbWVkaWFQbGF5ZXItPm1ldGFE
YXRhKFF0TWVkaWE6OlNpemUpLnRvSW50KCk7CisKKyAgICByZXR1cm4gMTAwOworfQorCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0UmF0ZShmbG9hdCByYXRlKQoreworICAgIG1fbWVkaWFQ
bGF5ZXItPnNldFBsYXliYWNrUmF0ZShyYXRlKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZh
dGU6OnNldFZvbHVtZShmbG9hdCB2b2x1bWUpCit7CisgICAgbV9tZWRpYVBsYXllci0+c2V0Vm9s
dW1lKHN0YXRpY19jYXN0PGludD4odm9sdW1lICogMTAwLjApKTsKK30KKwordm9pZCBNZWRpYVBs
YXllclByaXZhdGU6OnNldE11dGVkKGJvb2wgbXV0ZWQpCit7CisgICAgbV9tZWRpYVBsYXllci0+
c2V0TXV0ZWQobXV0ZWQpOworfQorCitNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIE1lZGlhUGxh
eWVyUHJpdmF0ZTo6bmV0d29ya1N0YXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9uZXR3b3Jr
U3RhdGU7Cit9CisKK01lZGlhUGxheWVyOjpSZWFkeVN0YXRlIE1lZGlhUGxheWVyUHJpdmF0ZTo6
cmVhZHlTdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVhZHlTdGF0ZTsKK30KKwordm9p
ZCBNZWRpYVBsYXllclByaXZhdGU6OnNldFZpc2libGUoYm9vbCB2aXNpYmxlKQoreworICAgIG1f
aXNWaXNpYmxlID0gdmlzaWJsZTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om1lZGlh
U3RhdHVzQ2hhbmdlZChRTWVkaWFQbGF5ZXI6Ok1lZGlhU3RhdHVzKQoreworICAgIHVwZGF0ZVN0
YXRlcygpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6aGFuZGxlRXJyb3IoUU1lZGlh
UGxheWVyOjpFcnJvcikKK3sKKyAgICB1cGRhdGVTdGF0ZXMoKTsKK30KKwordm9pZCBNZWRpYVBs
YXllclByaXZhdGU6OmR1cmF0aW9uQ2hhbmdlZChxaW50NjQpCit7CisgICAgbV9wbGF5ZXItPmR1
cmF0aW9uQ2hhbmdlZCgpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6dXBkYXRlU3Rh
dGVzKCkKK3sKKyAgICAvLyBTdG9yZSB0aGUgb2xkIHN0YXRlcyBzbyB0aGF0IHdlIGNhbiBkZXRl
Y3QgYSBjaGFuZ2UgYW5kIHJhaXNlIGNoYW5nZSBldmVudHMKKyAgICBNZWRpYVBsYXllcjo6TmV0
d29ya1N0YXRlIG9sZE5ldHdvcmtTdGF0ZSA9IG1fbmV0d29ya1N0YXRlOworICAgIE1lZGlhUGxh
eWVyOjpSZWFkeVN0YXRlIG9sZFJlYWR5U3RhdGUgPSBtX3JlYWR5U3RhdGU7CisKKyAgICBRTWVk
aWFQbGF5ZXI6Ok1lZGlhU3RhdHVzIGN1cnJlbnRTdGF0dXMgPSBtX21lZGlhUGxheWVyLT5tZWRp
YVN0YXR1cygpOworICAgIFFNZWRpYVBsYXllcjo6RXJyb3IgY3VycmVudEVycm9yID0gbV9tZWRp
YVBsYXllci0+ZXJyb3IoKTsKKworICAgIGlmIChjdXJyZW50RXJyb3IgIT0gUU1lZGlhUGxheWVy
OjpOb0Vycm9yKSB7CisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90
aGluZzsKKyAgICAgICAgaWYgKGN1cnJlbnRFcnJvciA9PSBRTWVkaWFQbGF5ZXI6OkZvcm1hdEVy
cm9yKQorICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6Rm9ybWF0RXJy
b3I7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5
ZXI6Ok5ldHdvcmtFcnJvcjsKKyAgICB9IGVsc2UgaWYgKGN1cnJlbnRTdGF0dXMgPT0gUU1lZGlh
UGxheWVyOjpVbmtub3duTWVkaWFTdGF0dXMKKyAgICAgICAgICAgICAgIHx8IGN1cnJlbnRTdGF0
dXMgPT0gUU1lZGlhUGxheWVyOjpOb01lZGlhKSB7CisgICAgICAgIG1fbmV0d29ya1N0YXRlID0g
TWVkaWFQbGF5ZXI6OklkbGU7CisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpI
YXZlTm90aGluZzsKKyAgICB9IGVsc2UgaWYgKGN1cnJlbnRTdGF0dXMgPT0gUU1lZGlhUGxheWVy
OjpMb2FkaW5nTWVkaWEpIHsKKyAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6
TG9hZGluZzsKKyAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5n
OworICAgIH0gZWxzZSBpZiAoY3VycmVudFN0YXR1cyA9PSBRTWVkaWFQbGF5ZXI6OkxvYWRlZE1l
ZGlhKSB7CisgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRpbmc7Cisg
ICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTWV0YWRhdGE7CisgICAgfSBl
bHNlIGlmIChjdXJyZW50U3RhdHVzID09IFFNZWRpYVBsYXllcjo6QnVmZmVyaW5nTWVkaWEpIHsK
KyAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGluZzsKKyAgICAgICAg
bV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVGdXR1cmVEYXRhOworICAgIH0gZWxzZSBp
ZiAoY3VycmVudFN0YXR1cyA9PSBRTWVkaWFQbGF5ZXI6OlN0YWxsZWRNZWRpYSkgeworICAgICAg
ICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOworICAgICAgICBtX3JlYWR5
U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUN1cnJlbnREYXRhOworICAgIH0gZWxzZSBpZiAoY3Vy
cmVudFN0YXR1cyA9PSBRTWVkaWFQbGF5ZXI6OkJ1ZmZlcmVkTWVkaWEKKyAgICAgICAgICAgICAg
IHx8IGN1cnJlbnRTdGF0dXMgPT0gUU1lZGlhUGxheWVyOjpFbmRPZk1lZGlhKSB7CisgICAgICAg
IG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OklkbGU7CisgICAgICAgIG1fcmVhZHlTdGF0
ZSA9IE1lZGlhUGxheWVyOjpIYXZlRW5vdWdoRGF0YTsKKyAgICB9IGVsc2UgaWYgKGN1cnJlbnRT
dGF0dXMgPT0gUU1lZGlhUGxheWVyOjpJbnZhbGlkTWVkaWEpIHsKKyAgICAgICAgbV9uZXR3b3Jr
U3RhdGUgPSBNZWRpYVBsYXllcjo6Rm9ybWF0RXJyb3I7CisgICAgICAgIG1fcmVhZHlTdGF0ZSA9
IE1lZGlhUGxheWVyOjpIYXZlTWV0YWRhdGE7CisgICAgfQorCisgICAgLy8gTG9nIHRoZSBzdGF0
ZSBjaGFuZ2VzIGFuZCByYWlzZSB0aGUgc3RhdGUgY2hhbmdlIGV2ZW50cworICAgIGlmIChtX25l
dHdvcmtTdGF0ZSAhPSBvbGROZXR3b3JrU3RhdGUpCisgICAgICAgIG1fcGxheWVyLT5uZXR3b3Jr
U3RhdGVDaGFuZ2VkKCk7CisKKyAgICBpZiAobV9yZWFkeVN0YXRlICE9IG9sZFJlYWR5U3RhdGUp
CisgICAgICAgIG1fcGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOworfQorCitNZWRpYVBsYXll
clByaXZhdGVEZWZhdWx0OjpNZWRpYVBsYXllclByaXZhdGVEZWZhdWx0KE1lZGlhUGxheWVyICpw
bGF5ZXIpCisgICAgOiBNZWRpYVBsYXllclByaXZhdGUocGxheWVyKQorICAgICwgbV92aWRlb1N1
cmZhY2UobmV3IFFQYWludGVyVmlkZW9TdXJmYWNlKG1fbWVkaWFQbGF5ZXIpKQoreworICAgIGlm
IChtX21lZGlhUGxheWVyKSB7CisgICAgICAgIFFNZWRpYVNlcnZpY2UqIHNlcnZpY2UgPSBtX21l
ZGlhUGxheWVyLT5zZXJ2aWNlKCk7CisgICAgICAgIGlmIChzZXJ2aWNlKSB7CisgICAgICAgICAg
ICBtX291dHB1dENvbnRyb2wgPSBxb2JqZWN0X2Nhc3Q8UVZpZGVvT3V0cHV0Q29udHJvbCAqPigK
KyAgICAgICAgICAgICAgICAgICAgc2VydmljZS0+Y29udHJvbChRVmlkZW9PdXRwdXRDb250cm9s
X2lpZCkpOworICAgICAgICAgICAgbV9yZW5kZXJlckNvbnRyb2wgPSBxb2JqZWN0X2Nhc3Q8UVZp
ZGVvUmVuZGVyZXJDb250cm9sICo+KAorICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLT5jb250
cm9sKFFWaWRlb1JlbmRlcmVyQ29udHJvbF9paWQpKTsKKyAgICAgICAgICAgIG1fd2luZG93Q29u
dHJvbCA9IHFvYmplY3RfY2FzdDxRVmlkZW9XaW5kb3dDb250cm9sICo+KAorICAgICAgICAgICAg
ICAgICAgICBzZXJ2aWNlLT5jb250cm9sKFFWaWRlb1dpbmRvd0NvbnRyb2xfaWlkKSk7CisKKyAg
ICAgICAgICAgIGlmIChtX291dHB1dENvbnRyb2wgJiYgbV9yZW5kZXJlckNvbnRyb2wpIHsKKyAg
ICAgICAgICAgICAgICBjb25uZWN0KG1fdmlkZW9TdXJmYWNlLCBTSUdOQUwoZnJhbWVDaGFuZ2Vk
KCkpLCB0aGlzLCBTTE9UKHJlcGFpbnQoKSkpOworCisgICAgICAgICAgICAgICAgbV9yZW5kZXJl
ckNvbnRyb2wtPnNldFN1cmZhY2UobV92aWRlb1N1cmZhY2UpOworICAgICAgICAgICAgICAgIG1f
b3V0cHV0Q29udHJvbC0+c2V0T3V0cHV0KFFWaWRlb091dHB1dENvbnRyb2w6OlJlbmRlcmVyT3V0
cHV0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworTWVkaWFQbGF5ZXJQ
cml2YXRlRGVmYXVsdDo6fk1lZGlhUGxheWVyUHJpdmF0ZURlZmF1bHQoKQoreworCit9CisKK0lu
dFNpemUgTWVkaWFQbGF5ZXJQcml2YXRlRGVmYXVsdDo6bmF0dXJhbFNpemUoKSBjb25zdAorewor
ICAgIGlmICghaGFzVmlkZW8oKSB8fCBtX3JlYWR5U3RhdGUgPCBNZWRpYVBsYXllcjo6SGF2ZU1l
dGFkYXRhKQorICAgICAgICByZXR1cm4gSW50U2l6ZSgpOworCisgICAgUVNpemUgdmlkZW9TaXpl
ID0gbV92aWRlb1N1cmZhY2UtPnN1cmZhY2VGb3JtYXQoKS5zaXplSGludCgpOworCisgICAgaWYg
KHZpZGVvU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBJbnRTaXplKCk7CisKKyAgICBy
ZXR1cm4gSW50U2l6ZSh2aWRlb1NpemUud2lkdGgoKSwgdmlkZW9TaXplLmhlaWdodCgpKTsKK30K
Kwordm9pZCBNZWRpYVBsYXllclByaXZhdGVEZWZhdWx0OjpwYWludChHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKGNvbnRleHQtPnBhaW50
aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2lzVmlzaWJsZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgLy8gR3JhYiB0aGUgcGFpbnRlcgorICAgIFFQYWludGVy
KiBwYWludGVyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisKKyAgICBpZiAoIW1faXNB
Y3RpdmUpIHsKKyAgICAgICAgLy8gQXR0ZW1wdCBHTCBTZXR1cAorI2lmICFkZWZpbmVkKFFUX05P
X09QRU5HTCkgJiYgIWRlZmluZWQoUVRfT1BFTkdMX0VTXzFfQ0wpICYmICFkZWZpbmVkKFFUX09Q
RU5HTF9FU18xKQorICAgICAgICBpZiAoKHBhaW50ZXItPnBhaW50RW5naW5lKCktPnR5cGUoKSA9
PSBRUGFpbnRFbmdpbmU6Ok9wZW5HTAorICAgICAgICAgICAgIHx8IHBhaW50ZXItPnBhaW50RW5n
aW5lKCktPnR5cGUoKSA9PSBRUGFpbnRFbmdpbmU6Ok9wZW5HTDIpKSB7CisgICAgICAgICAgICAv
LyBTZXQgR0wgQ29udGV4dAorICAgICAgICAgICAgbV92aWRlb1N1cmZhY2UtPnNldEdMQ29udGV4
dChjb25zdF9jYXN0PFFHTENvbnRleHQgKj4oUUdMQ29udGV4dDo6Y3VycmVudENvbnRleHQoKSkp
OworCisgICAgICAgICAgICAvLyBDaGVjayBTaGFkZXIgVHlwZXMKKyAgICAgICAgICAgIGlmICht
X3ZpZGVvU3VyZmFjZS0+c3VwcG9ydGVkU2hhZGVyVHlwZXMoKSAmIFFQYWludGVyVmlkZW9TdXJm
YWNlOjpHbHNsU2hhZGVyKQorICAgICAgICAgICAgICAgIG1fdmlkZW9TdXJmYWNlLT5zZXRTaGFk
ZXJUeXBlKFFQYWludGVyVmlkZW9TdXJmYWNlOjpHbHNsU2hhZGVyKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBtX3ZpZGVvU3VyZmFjZS0+c2V0U2hhZGVyVHlwZShRUGFpbnRl
clZpZGVvU3VyZmFjZTo6RnJhZ21lbnRQcm9ncmFtU2hhZGVyKTsKKyAgICAgICAgfQorI2VuZGlm
CisKKyAgICAgICAgLy8gU2V0dXAgQ29tcGxldGVkCisgICAgICAgIG1faXNBY3RpdmUgPSB0cnVl
OworICAgIH0KKworICAgIC8vIFBhaW50IHRoZSBmcmFtZQorICAgIG1fdmlkZW9TdXJmYWNlLT5w
YWludChwYWludGVyLCBRUmVjdChyZWN0LngoKSwgcmVjdC55KCksCisgICAgcmVjdC53aWR0aCgp
LCByZWN0LmhlaWdodCgpKSk7CisgICAgbV92aWRlb1N1cmZhY2UtPnNldFJlYWR5KHRydWUpOwor
fQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZURlZmF1bHQ6OnJlcGFpbnQoKQoreworICAgIG1f
cGxheWVyLT5yZXBhaW50KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2luY2x1
ZGUgIm1vY19NZWRpYVBsYXllclByaXZhdGVRdC5jcHAiCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5oCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIw
MDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgICAgQ29w
eXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZu
ZGVmIE1lZGlhUGxheWVyUHJpdmF0ZVF0X2gKKyNkZWZpbmUgTWVkaWFQbGF5ZXJQcml2YXRlUXRf
aAorCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCisKKyNpbmNsdWRlIDxRTWVkaWFQ
bGF5ZXI+CisjaW5jbHVkZSA8UU1lZGlhUGxheWVyQ29udHJvbD4KKyNpbmNsdWRlIDxRT2JqZWN0
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZSA6IHB1
YmxpYyBRT2JqZWN0LCBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlIHsKKworICAg
IFFfT0JKRUNUCisKK3B1YmxpYzoKKyAgICBzdGF0aWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJm
YWNlKiBjcmVhdGUoTWVkaWFQbGF5ZXIqIHBsYXllcik7CisgICAgdmlydHVhbCB+TWVkaWFQbGF5
ZXJQcml2YXRlKCk7CisKKyAgICBzdGF0aWMgdm9pZCByZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlh
RW5naW5lUmVnaXN0cmFyKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRUeXBlcyhIYXNo
U2V0PFN0cmluZz4mKTsKKyAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBzdXBw
b3J0c1R5cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGNvZGVjcyk7CisgICAg
c3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKSB7IHJldHVybiB0cnVlOyB9CisKKyAgICBib29sIGhh
c1ZpZGVvKCkgY29uc3Q7CisgICAgYm9vbCBoYXNBdWRpbygpIGNvbnN0OworCisgICAgdm9pZCBs
b2FkKGNvbnN0IFN0cmluZyAmdXJsKTsKKyAgICB2b2lkIGNhbmNlbExvYWQoKTsKKworICAgIHZv
aWQgcGxheSgpOworICAgIHZvaWQgcGF1c2UoKTsKKworICAgIGJvb2wgcGF1c2VkKCkgY29uc3Q7
CisgICAgYm9vbCBzZWVraW5nKCkgY29uc3Q7CisKKyAgICBmbG9hdCBkdXJhdGlvbigpIGNvbnN0
OworICAgIGZsb2F0IGN1cnJlbnRUaW1lKCkgY29uc3Q7CisgICAgdm9pZCBzZWVrKGZsb2F0KTsK
KworICAgIHZvaWQgc2V0UmF0ZShmbG9hdCk7CisgICAgdm9pZCBzZXRWb2x1bWUoZmxvYXQpOwor
ICAgIHZvaWQgc2V0TXV0ZWQoYm9vbCk7CisKKyAgICAvLyBTdGF0ZSBJbmZvcm1hdGlvbgorICAg
IE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlKCkgY29uc3Q7CisgICAgTWVk
aWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0OworCisgICAgLy8gTmV0d29y
ayBJbmZvcm1hdGlvbgorICAgIFBhc3NSZWZQdHI8VGltZVJhbmdlcz4gYnVmZmVyZWQoKSBjb25z
dDsKKyAgICBmbG9hdCBtYXhUaW1lU2Vla2FibGUoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBieXRl
c0xvYWRlZCgpIGNvbnN0OworICAgIHVuc2lnbmVkIHRvdGFsQnl0ZXMoKSBjb25zdDsKKworICAg
IHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlKGJvb2wpOworCisgICAgdmlydHVhbCBJbnRTaXplIG5h
dHVyYWxTaXplKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRTaXplKGNvbnN0IElu
dFNpemUmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IEludFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRnVsbHNjcmVlbigp
IGNvbnN0ID0gMDsKKworcHJvdGVjdGVkIHNsb3RzOgorICAgIHZpcnR1YWwgdm9pZCBtZWRpYVN0
YXR1c0NoYW5nZWQoUU1lZGlhUGxheWVyOjpNZWRpYVN0YXR1cyk7CisgICAgdmlydHVhbCB2b2lk
IGhhbmRsZUVycm9yKFFNZWRpYVBsYXllcjo6RXJyb3IpOworICAgIHZpcnR1YWwgdm9pZCBzdGF0
ZUNoYW5nZWQoUU1lZGlhUGxheWVyOjpTdGF0ZSkge30KKyAgICB2aXJ0dWFsIHZvaWQgcG9zaXRp
b25DaGFuZ2VkKHFpbnQ2NCkge30KKyAgICB2aXJ0dWFsIHZvaWQgZHVyYXRpb25DaGFuZ2VkKHFp
bnQ2NCk7CisgICAgdmlydHVhbCB2b2lkIHJlcGFpbnQoKSB7fQorCitwcm90ZWN0ZWQ6CisgICAg
TWVkaWFQbGF5ZXJQcml2YXRlKE1lZGlhUGxheWVyKik7CisKKyAgICBNZWRpYVBsYXllciogbV9w
bGF5ZXI7CisgICAgUU1lZGlhUGxheWVyKiBtX21lZGlhUGxheWVyOworICAgIFFNZWRpYVBsYXll
ckNvbnRyb2wqIG1fbWVkaWFQbGF5ZXJDb250cm9sOworCisgICAgbXV0YWJsZSBNZWRpYVBsYXll
cjo6TmV0d29ya1N0YXRlIG1fbmV0d29ya1N0YXRlOworICAgIG11dGFibGUgTWVkaWFQbGF5ZXI6
OlJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlOworCisgICAgYm9vbCBtX2lzVmlzaWJsZTsKKworcHJp
dmF0ZToKKyAgICB2b2lkIHVwZGF0ZVN0YXRlcygpOworfTsKK30KKworI2VuZGlmIC8vIE1lZGlh
UGxheWVyUHJpdmF0ZVF0X2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVR
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmNw
cAkocmV2aXNpb24gNTQ0MDcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiRm9udC5oIgog
I2luY2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgor
I2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50
LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
QEAgLTQ3LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKICNpbmNsdWRlICJSZW5k
ZXJTbGlkZXIuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgorI2luY2x1ZGUgIlRpbWVSYW5n
ZXMuaCIKICNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZVF0LmgiCiAjaW5jbHVkZSAiVXNlckFnZW50
U3R5bGVTaGVldHMuaCIKICNpbmNsdWRlICJxd2VicGFnZS5oIgpAQCAtOTIxLDE0ICs5MjMsMTAg
QEAgYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhTXV0ZUJ1dHRvbgogICAgIGNvbnN0IFFQ
b2ludEYgc3BlYWtlclBvbHlnb25bNl0gPSB7IFFQb2ludEYoMjAsIDMwKSwgUVBvaW50Rig1MCwg
MzApLCBRUG9pbnRGKDgwLCAwKSwKICAgICAgICAgICAgIFFQb2ludEYoODAsIDEwMCksIFFQb2lu
dEYoNTAsIDcwKSwgUVBvaW50RigyMCwgNzApfTsKIAotICAgIHAucGFpbnRlci0+c2V0QnJ1c2go
Z2V0TWVkaWFDb250cm9sRm9yZWdyb3VuZENvbG9yKG8pKTsKKyAgICBwLnBhaW50ZXItPnNldFBl
bihtZWRpYUVsZW1lbnQtPm11dGVkKCkgPyBRdDo6ZGFya0dyYXkgOiBRdDo6bGlnaHRHcmF5KTsK
KyAgICBwLnBhaW50ZXItPnNldEJydXNoKG1lZGlhRWxlbWVudC0+bXV0ZWQoKSA/IFF0OjpkYXJr
UmVkIDogZ2V0TWVkaWFDb250cm9sRm9yZWdyb3VuZENvbG9yKG8pKTsKICAgICBwLnBhaW50ZXIt
PmRyYXdQb2x5Z29uKHNwZWFrZXJQb2x5Z29uLCA2KTsKIAotICAgIGlmIChtZWRpYUVsZW1lbnQt
Pm11dGVkKCkpIHsKLSAgICAgICAgcC5wYWludGVyLT5zZXRQZW4oUXQ6OnJlZCk7Ci0gICAgICAg
IHAucGFpbnRlci0+ZHJhd0xpbmUoMCwgMTAwLCAxMDAsIDApOwotICAgIH0KLQogICAgIHJldHVy
biBmYWxzZTsKIH0KIApAQCAtOTcxLDYgKzk2OSw5MSBAQCBib29sIFJlbmRlclRoZW1lUXQ6OnBh
aW50TWVkaWFTZWVrRm9yd2FyCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitib29sIFJlbmRlclRo
ZW1lUXQ6OnBhaW50TWVkaWFDdXJyZW50VGltZShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAg
U3R5bGVQYWludGVyIHAodGhpcywgcGFpbnRJbmZvKTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChvLT5zdHlsZSgpKSB7CisgICAgICAgIC8v
IFNldCB0aGUgdGV4dCBjb2xvciBkZXBlbmRpbmcgb24gcGxhdGZvcm0KKyAgICAgICAgUVBhbGV0
dGUgcGFsID0gUUFwcGxpY2F0aW9uOjpwYWxldHRlKCk7CisgICAgICAgIG8tPnN0eWxlKCktPnNl
dFRleHRGaWxsQ29sb3IocGFsLmJydXNoKFFQYWxldHRlOjpBY3RpdmUsIFFQYWxldHRlOjpIaWdo
bGlnaHRlZFRleHQpLmNvbG9yKCkpOworICAgIH0KKworICAgIHAucGFpbnRlci0+c2V0UmVuZGVy
SGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCB0cnVlKTsKKyAgICBwYWludE1lZGlhQmFja2dy
b3VuZChwLnBhaW50ZXIsIHIpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitTdHJpbmcgUmVu
ZGVyVGhlbWVRdDo6Zm9ybWF0TWVkaWFDb250cm9sc0N1cnJlbnRUaW1lKGZsb2F0IGN1cnJlbnRU
aW1lLCBmbG9hdCBkdXJhdGlvbikgY29uc3QKK3sKKyAgICByZXR1cm4gZm9ybWF0TWVkaWFDb250
cm9sc1RpbWUoY3VycmVudFRpbWUpICsgIiAvICIgKyBmb3JtYXRNZWRpYUNvbnRyb2xzVGltZShk
dXJhdGlvbik7Cit9CisKK1N0cmluZyBSZW5kZXJUaGVtZVF0Ojpmb3JtYXRNZWRpYUNvbnRyb2xz
UmVtYWluaW5nVGltZShmbG9hdCBjdXJyZW50VGltZSwgZmxvYXQgZHVyYXRpb24pIGNvbnN0Cit7
CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50TWVk
aWFWb2x1bWVTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QgKm8sIGNvbnN0IFJlbmRlck9iamVjdDo6
UGFpbnRJbmZvICZwYWludEluZm8sIGNvbnN0IEludFJlY3QgJnIpCit7CisgICAgU3R5bGVQYWlu
dGVyIHAodGhpcywgcGFpbnRJbmZvKTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIHAucGFpbnRlci0+c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50
aWFsaWFzaW5nLCB0cnVlKTsKKworICAgIHBhaW50TWVkaWFCYWNrZ3JvdW5kKHAucGFpbnRlciwg
cik7CisKKyAgICBpZiAoIW8tPmlzU2xpZGVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIEludFJlY3QgYiA9IHRvUmVuZGVyQm94KG8pLT5jb250ZW50Qm94UmVjdCgpOworCisgICAg
Ly8gUG9zaXRpb24gdGhlIG91dGVyIHJlY3RhbmdsZQorICAgIGludCB0b3AgPSByLnkoKSArIGIu
eSgpOworICAgIGludCBsZWZ0ID0gci54KCkgKyBiLngoKTsKKyAgICBpbnQgd2lkdGggPSBiLndp
ZHRoKCk7CisgICAgaW50IGhlaWdodCA9IGIuaGVpZ2h0KCk7CisKKyAgICBzdGF0aWMgY29uc3Qg
UUNvbG9yIHNjYWxlQ29sb3IoMjU1LCAyNTUsIDI1NSwgMTAwKTsKKworICAgIC8vIERyYXcgdGhl
IG91dGVyIHJlY3RhbmdsZQorICAgIHAucGFpbnRlci0+c2V0UGVuKFF0OjpsaWdodEdyYXkpOwor
ICAgIHAucGFpbnRlci0+c2V0QnJ1c2goc2NhbGVDb2xvcik7CisgICAgcC5wYWludGVyLT5kcmF3
UmVjdChsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpOworCisgICAgaWYgKCFvLT5ub2RlKCkgfHwg
IW8tPm5vZGUoKS0+aGFzVGFnTmFtZShpbnB1dFRhZykpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIEhUTUxJbnB1dEVsZW1lbnQqIHNsaWRlciA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVs
ZW1lbnQqPihvLT5ub2RlKCkpOworCisgICAgLy8gUG9zaXRpb24gdGhlIGlubmVyIHJlY3Rhbmds
ZQorICAgIGhlaWdodCA9IChoZWlnaHQgLSAyKSAqIHNsaWRlci0+dmFsdWVBc051bWJlcigpOwor
ICAgIHdpZHRoIC09IDI7CisgICAgbGVmdCArPSAxOworICAgIHRvcCArPSAoYi5oZWlnaHQoKSAt
IGhlaWdodCkgLSAxOworCisgICAgLy8gRHJhdyB0aGUgaW5uZXIgcmVjdGFuZ2xlCisgICAgcC5w
YWludGVyLT5zZXRQZW4oUXQ6Ok5vUGVuKTsKKyAgICBwLnBhaW50ZXItPnNldEJydXNoKGdldE1l
ZGlhQ29udHJvbEZvcmVncm91bmRDb2xvcihvKSk7CisgICAgcC5wYWludGVyLT5kcmF3UmVjdChs
ZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IFJlbmRlclRoZW1lUXQ6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUaHVtYihSZW5kZXJPYmplY3Qg
Km8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvICZwYWludEluZm8sIGNvbnN0IEludFJl
Y3QgJnIpCit7CisgICAgU3R5bGVQYWludGVyIHAodGhpcywgcGFpbnRJbmZvKTsKKyAgICBpZiAo
IXAuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIE5vdGhpbmcgdG8g
ZHJhdyBoZXJlLCB0aGlzIGlzIGFsbCBkb25lIGluIHRoZSB0cmFjaworICAgIHJldHVybiBmYWxz
ZTsKK30KKwogYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhU2xpZGVyVHJhY2soUmVuZGVy
T2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBJbnRSZWN0JiByKQogewogICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IGdl
dE1lZGlhRWxlbWVudEZyb21SZW5kZXJPYmplY3Qobyk7CkBAIC05ODUsMTUgKzEwNjgsMzEgQEAg
Ym9vbCBSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhU2xpZGVyVHJhYwogCiAgICAgcGFpbnRNZWRp
YUJhY2tncm91bmQocC5wYWludGVyLCByKTsKIAorICAgICNpZiBRVF9WRVJTSU9OID49IDB4MDQw
NzAwCisgICAgaWYgKE1lZGlhUGxheWVyKiBwbGF5ZXIgPSBtZWRpYUVsZW1lbnQtPnBsYXllcigp
KSB7CisgICAgICAgIC8vIEdldCB0aGUgYnVmZmVyZWQgcGFydHMgb2YgdGhlIG1lZGlhCisgICAg
ICAgIFBhc3NSZWZQdHI8VGltZVJhbmdlcz4gYnVmZmVyZWQgPSBwbGF5ZXItPmJ1ZmZlcmVkKCk7
CisgICAgICAgIGlmIChidWZmZXJlZC0+bGVuZ3RoKCkgPiAwICYmIHBsYXllci0+ZHVyYXRpb24o
KSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpKSB7CisgICAgICAgICAg
ICAvLyBTZXQgdGhlIHRyYW5zZm9ybSBhbmQgYnJ1c2gKKyAgICAgICAgICAgIFdvcmxkTWF0cml4
VHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIocC5wYWludGVyLCBvLCByKTsKKyAgICAgICAgICAgIHAu
cGFpbnRlci0+c2V0QnJ1c2goZ2V0TWVkaWFDb250cm9sRm9yZWdyb3VuZENvbG9yKCkpOworCisg
ICAgICAgICAgICAvLyBQYWludCBlYWNoIGJ1ZmZlcmVkIHNlY3Rpb24KKyAgICAgICAgICAgIEV4
Y2VwdGlvbkNvZGUgZXg7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGJ1ZmZlcmVk
LT5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgZmxvYXQgc3RhcnRYID0gKGJ1ZmZl
cmVkLT5zdGFydChpLCBleCkgLyBwbGF5ZXItPmR1cmF0aW9uKCkpICogMTAwOworICAgICAgICAg
ICAgICAgIGZsb2F0IHdpZHRoID0gKChidWZmZXJlZC0+ZW5kKGksIGV4KSAvIHBsYXllci0+ZHVy
YXRpb24oKSkgKiAxMDApIC0gc3RhcnRYOworICAgICAgICAgICAgICAgIHAucGFpbnRlci0+ZHJh
d1JlY3Qoc3RhcnRYLCAzNywgd2lkdGgsIDI2KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKyAgICAjZW5kaWYKKwogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBSZW5kZXJU
aGVtZVF0OjpwYWludE1lZGlhU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5k
ZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewotICAg
IEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IGdldE1lZGlhRWxlbWVudEZyb21SZW5k
ZXJPYmplY3Qoby0+cGFyZW50KCkpOwotICAgIGlmICghbWVkaWFFbGVtZW50KQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KICAgICBTdHlsZVBhaW50ZXIgcCh0aGlzLCBwYWludEluZm8pOwogICAg
IGlmICghcC5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTAxOSw2ICsxMTE4
LDEzIEBAIHZvaWQgUmVuZGVyVGhlbWVRdDo6YWRqdXN0U2xpZGVyVGh1bWJTaXoKICAgICAgICAg
aW50IHBhcmVudEhlaWdodCA9IHBhcmVudFN0eWxlLT5oZWlnaHQoKS52YWx1ZSgpOwogICAgICAg
ICBvLT5zdHlsZSgpLT5zZXRXaWR0aChMZW5ndGgocGFyZW50SGVpZ2h0IC8gMywgRml4ZWQpKTsK
ICAgICAgICAgby0+c3R5bGUoKS0+c2V0SGVpZ2h0KExlbmd0aChwYXJlbnRIZWlnaHQsIEZpeGVk
KSk7CisgICAgfSBlbHNlIGlmIChwYXJ0ID09IE1lZGlhVm9sdW1lU2xpZGVyVGh1bWJQYXJ0KSB7
CisgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IG8tPnBhcmVudCgpLT5zdHlsZSgp
OworICAgICAgICBRX0FTU0VSVChwYXJlbnRTdHlsZSk7CisKKyAgICAgICAgaW50IHBhcmVudFdp
ZHRoID0gcGFyZW50U3R5bGUtPndpZHRoKCkudmFsdWUoKTsKKyAgICAgICAgby0+c3R5bGUoKS0+
c2V0SGVpZ2h0KExlbmd0aChwYXJlbnRXaWR0aCAvIDMsIEZpeGVkKSk7CisgICAgICAgIG8tPnN0
eWxlKCktPnNldFdpZHRoKExlbmd0aChwYXJlbnRXaWR0aCwgRml4ZWQpKTsKICAgICB9IGVsc2Ug
aWYgKHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCB8fCBwYXJ0ID09IFNsaWRlclRo
dW1iVmVydGljYWxQYXJ0KSB7CiAgICAgICAgIFFTdHlsZU9wdGlvblNsaWRlciBvcHRpb247CiAg
ICAgICAgIGlmIChwYXJ0ID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmgJKHJldmlzaW9uIDU0NDA3KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw3ICsxMjcsMTEg
QEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2Vla0ZvcndhcmRCdXR0
b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFTbGlkZXJUcmFjayhSZW5kZXJP
YmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
ICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNv
bnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotCisgICAgdmly
dHVhbCBib29sIHBhaW50TWVkaWFDdXJyZW50VGltZShSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5k
ZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9i
amVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWlu
dE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBTdHJpbmcgZm9ybWF0
TWVkaWFDb250cm9sc0N1cnJlbnRUaW1lKGZsb2F0IGN1cnJlbnRUaW1lLCBmbG9hdCBkdXJhdGlv
bikgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcgZm9ybWF0TWVkaWFDb250cm9sc1JlbWFpbmlu
Z1RpbWUoZmxvYXQgY3VycmVudFRpbWUsIGZsb2F0IGR1cmF0aW9uKSBjb25zdDsKIHByaXZhdGU6
CiAgICAgSFRNTE1lZGlhRWxlbWVudCogZ2V0TWVkaWFFbGVtZW50RnJvbVJlbmRlck9iamVjdChS
ZW5kZXJPYmplY3QqIG8pIGNvbnN0OwogICAgIHZvaWQgcGFpbnRNZWRpYUJhY2tncm91bmQoUVBh
aW50ZXIqIHBhaW50ZXIsIGNvbnN0IEludFJlY3QmIHIpIGNvbnN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48203</attachid>
            <date>2010-02-04 23:10:23 -0800</date>
            <delta_ts>2010-02-07 18:00:56 -0800</delta_ts>
            <desc>Updated Patch</desc>
            <filename>webkit-qtmultimedia-integration.txt</filename>
            <type>text/plain</type>
            <size>35888</size>
            <attacher name="Nick Young">nicholas.young</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDQwOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMTAtMDItMDQgIE5pY2hvbGFzIFlvdW5nICA8bmljaG9sYXMueW91
bmdAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICBbUXRdIFN3aXRjaGluZyBmcm9tIFBob25vbiB0byBRdE11bHRpbWVkaWEgQmFja2Vu
ZCBmb3IgUXQgNC43CisgICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MzQ2MzEKKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgcGF0Y2ggb25seSBhZmZl
Y3RzIG11bHRpbWVkaWEgYmFja2VuZC4KKworICAgICAgICAqIFdlYkNvcmUucHJvOiBEaWZmZXJl
bnQgYnVpbGQgZGVwZW5kaW5nIG9uIFF0IHZlcnNpb24uCisgICAgICAgICogY3NzL21lZGlhQ29u
dHJvbHNRdC5jc3M6IFVwZGF0ZWQgZm9yIG5ldyBhbmQgbW9kaWZpZWQgY29udHJvbHMuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwOiBEaWZmZXJlbnQgYmFja2Vu
ZCBpbmNsdWRlZCBkZXBlbmRpbmcgb24gUXQgdmVyc2lvbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9x
dC9SZW5kZXJUaGVtZVF0LmNwcDogVXBkYXRlZCBtZWRpYSBjb250cm9scy4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBhaW50TWVkaWFNdXRlQnV0dG9uKTogQ2hhbmdlZCBzdHls
aW5nLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYUN1cnJlbnRU
aW1lKTogQWRkZWQgY3VycmVudCB0aW1lIGRpc3BsYXkuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZVF0Ojpmb3JtYXRNZWRpYUNvbnRyb2xzQ3VycmVudFRpbWUpOiBBZGRlZCAgdGltZSBm
b3JtYXR0aW5nLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6Zm9ybWF0TWVkaWFD
b250cm9sc1JlbWFpbmluZ1RpbWUpOiBObyByZW1haW5pbmcgdGltZSBpcyBzaG93bi4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUcmFjayk6
IFZvbHVtZSBzbGlkZXIgYWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0Ojpw
YWludE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIpOiBTZWUgYWJvdmUuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhU2xpZGVyVHJhY2spOiBVcGRhdGVkIGZvciBRdE11
bHRpbWVkaWEgYmFja2VuZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBhaW50
TWVkaWFTbGlkZXJUaHVtYik6IERyb3BwZWQgYW4gdW5uZWNlc3NhcnkgY2hlY2suCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjphZGp1c3RTbGlkZXJUaHVtYlNpemUpOiBIYW5kbGUg
YSBjYXNlIHdoaWNoIHdhc24ndCBoYW5kbGVkIHByZXZpb3VzbHkuCisgICAgICAgICogcGxhdGZv
cm0vcXQvUmVuZGVyVGhlbWVRdC5oOiBSZWltcGxlbWVudGVkIGEgZmV3IG1vcmUgbWV0aG9kcy4g
CisKIDIwMTAtMDItMDQgIE1hcmsgUm93ZSAgPG1yb3dlQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDU0NDA3KQorKysgV2Vi
Q29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMTMxLDExICsxMzEsMjIgQEAgbWFt
ZW81fHN5bWJpYW58ZW1iZWRkZWQgewogCiBpbmNsdWRlKCQkUFdELy4uL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnByaSkKIAotIyBEaXNhYmxlIEhUTUw1IG1lZGlhIGNvbXBpbGF0aW9u
IGlmIHBob25vbiBpcyB1bmF2YWlsYWJsZQotIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9WSURF
Tz0xKSB7Ci0gICAgIWNvbnRhaW5zKFFUX0NPTkZJRywgcGhvbm9uKSB7Ci0gICAgICAgIERFRklO
RVMgLT0gRU5BQkxFX1ZJREVPPTEKLSAgICAgICAgREVGSU5FUyArPSBFTkFCTEVfVklERU89MAor
IyBRdE11bHRpbWVkaWEgc2luY2UgNC43CitncmVhdGVyVGhhbihRVF9NSU5PUl9WRVJTSU9OLCA2
KSB7CisgICAgIyBEaXNhYmxlIEhUTUw1IG1lZGlhIGNvbXBpbGF0aW9uIGlmIHF0bXVsdGltZWRp
YSBpcyB1bmF2YWlsYWJsZQorICAgICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfVklERU89MSkg
eworICAgICAgICAhY29udGFpbnMoUVRfQ09ORklHLCBtdWx0aW1lZGlhKSB7CisgICAgICAgICAg
ICBERUZJTkVTIC09IEVOQUJMRV9WSURFTz0xCisgICAgICAgICAgICBERUZJTkVTICs9IEVOQUJM
RV9WSURFTz0wCisgICAgICAgIH0KKyAgICB9Cit9IGVsc2UgeworICAgICMgRGlzYWJsZSBIVE1M
NSBtZWRpYSBjb21waWxhdGlvbiBpZiBwaG9ub24gaXMgdW5hdmFpbGFibGUKKyAgICAhY29udGFp
bnMoREVGSU5FUywgRU5BQkxFX1ZJREVPPTEpIHsKKyAgICAgICAgIWNvbnRhaW5zKFFUX0NPTkZJ
RywgcGhvbm9uKSB7CisgICAgICAgICAgICBERUZJTkVTIC09IEVOQUJMRV9WSURFTz0xCisgICAg
ICAgICAgICBERUZJTkVTICs9IEVOQUJMRV9WSURFTz0wCisgICAgICAgIH0KICAgICB9CiB9CiAK
QEAgLTIyOTksMjEgKzIzMTAsMzMgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1ZJREVPPTEp
IHsKICAgICAgICAgcmVuZGVyaW5nL1JlbmRlck1lZGlhLmNwcCBcCiAgICAgICAgIGJpbmRpbmdz
L2pzL0pTQXVkaW9Db25zdHJ1Y3Rvci5jcHAKIAotICAgICAgICBIRUFERVJTICs9IFwKLSAgICAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVBob25vbi5oCisg
ICAgICAgICMgUXRNdWx0aW1lZGlhIHNpbmNlIDQuNworICAgICAgICBncmVhdGVyVGhhbihRVF9N
SU5PUl9WRVJTSU9OLCA2KSB7CisgICAgICAgICAgICBIRUFERVJTICs9IFwKKyAgICAgICAgICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5oCiAKLSAgICAg
ICAgU09VUkNFUyArPSBcCi0gICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBs
YXllclByaXZhdGVQaG9ub24uY3BwCisgICAgICAgICAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAg
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5jcHAKIAot
ICAgICAgICAjIEFkZCBwaG9ub24gbWFudWFsbHkgdG8gcHJldmVudCBpdCBmcm9tIGNvbWluZyBm
aXJzdCBpbgotICAgICAgICAjIHRoZSBpbmNsdWRlIHBhdGhzLCBhcyBQaG9ub24ncyBwYXRoLmgg
Y29uZmxpY3RzIHdpdGgKLSAgICAgICAgIyBXZWJDb3JlJ3MgUGF0aC5oIG9uIGNhc2UtaW5zZW5z
aXRpdmUgZmlsZXN5c3RlbXMuCi0gICAgICAgIHF0QWRkTGlicmFyeShwaG9ub24pCi0gICAgICAg
IElOQ0xVREVQQVRIIC09ICQkUU1BS0VfSU5DRElSX1FUL3Bob25vbgotICAgICAgICBJTkNMVURF
UEFUSCArPSAkJFFNQUtFX0lOQ0RJUl9RVC9waG9ub24KLSAgICAgICAgbWFjIHsKLSAgICAgICAg
ICAgIElOQ0xVREVQQVRIIC09ICQkUU1BS0VfTElCRElSX1FUL3Bob25vbi5mcmFtZXdvcmsvSGVh
ZGVycwotICAgICAgICAgICAgSU5DTFVERVBBVEggKz0gJCRRTUFLRV9MSUJESVJfUVQvcGhvbm9u
LmZyYW1ld29yay9IZWFkZXJzCisgICAgICAgICAgICBRVCArPSBtdWx0aW1lZGlhCisgICAgICAg
ICAgICBjb250YWlucyhRVF9DT05GSUcsIG9wZW5nbCk6IFFUICs9IG9wZW5nbAorICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgSEVBREVSUyArPSBcCisgICAgICAgICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uLmgKKworICAgICAgICAgICAg
U09VUkNFUyArPSBcCisgICAgICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQ
bGF5ZXJQcml2YXRlUGhvbm9uLmNwcAorCisgICAgICAgICAgICAjIEFkZCBwaG9ub24gbWFudWFs
bHkgdG8gcHJldmVudCBpdCBmcm9tIGNvbWluZyBmaXJzdCBpbgorICAgICAgICAgICAgIyB0aGUg
aW5jbHVkZSBwYXRocywgYXMgUGhvbm9uJ3MgcGF0aC5oIGNvbmZsaWN0cyB3aXRoCisgICAgICAg
ICAgICAjIFdlYkNvcmUncyBQYXRoLmggb24gY2FzZS1pbnNlbnNpdGl2ZSBmaWxlc3lzdGVtcy4K
KyAgICAgICAgICAgIHF0QWRkTGlicmFyeShwaG9ub24pCisgICAgICAgICAgICBJTkNMVURFUEFU
SCAtPSAkJFFNQUtFX0lOQ0RJUl9RVC9waG9ub24KKyAgICAgICAgICAgIElOQ0xVREVQQVRIICs9
ICQkUU1BS0VfSU5DRElSX1FUL3Bob25vbgorICAgICAgICAgICAgbWFjIHsKKyAgICAgICAgICAg
ICAgICBJTkNMVURFUEFUSCAtPSAkJFFNQUtFX0xJQkRJUl9RVC9waG9ub24uZnJhbWV3b3JrL0hl
YWRlcnMKKyAgICAgICAgICAgICAgICBJTkNMVURFUEFUSCArPSAkJFFNQUtFX0xJQkRJUl9RVC9w
aG9ub24uZnJhbWV3b3JrL0hlYWRlcnMKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiB9Cklu
ZGV4OiBXZWJDb3JlL2Nzcy9tZWRpYUNvbnRyb2xzUXQuY3NzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvY3NzL21lZGlhQ29udHJvbHNRdC5jc3MJKHJldmlzaW9uIDU0NDA3KQorKysgV2ViQ29yZS9j
c3MvbWVkaWFDb250cm9sc1F0LmNzcwkod29ya2luZyBjb3B5KQpAQCAtNTEsOCArNTEsNiBAQCB2
aWRlbzotd2Via2l0LWZ1bGwtcGFnZS1tZWRpYTo6LXdlYmtpdC1tCiB9CiAKIGF1ZGlvOjotd2Vi
a2l0LW1lZGlhLWNvbnRyb2xzLW11dGUtYnV0dG9uLCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250
cm9scy1tdXRlLWJ1dHRvbiB7Ci0gICAgbGVmdDogYXV0bzsKLSAgICByaWdodDogNXB4OwogICAg
IHdpZHRoOiAxMnB4OwogICAgIGhlaWdodDogMTJweDsKICAgICBwYWRkaW5nOiA2cHg7CkBAIC02
MCw3ICs1OCw2IEBAIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLW11dGUtYnV0dG8KIH0K
IAogYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtcGxheS1idXR0b24sIHZpZGVvOjotd2Vi
a2l0LW1lZGlhLWNvbnRyb2xzLXBsYXktYnV0dG9uIHsKLSAgICBsZWZ0OiA1cHg7CiAgICAgd2lk
dGg6IDlweDsKICAgICBoZWlnaHQ6IDEycHg7CiAgICAgcGFkZGluZzogNnB4IDEycHggNnB4IDEx
cHg7CkBAIC03Miw3ICs2OSwyMCBAQCBhdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1l
bGluZS1jCiB9CiAKIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWN1cnJlbnQtdGltZS1k
aXNwbGF5LCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1jdXJyZW50LXRpbWUtZGlzcGxh
eSB7Ci0gICAgZGlzcGxheTogbm9uZTsKKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG1lZGlhLWN1
cnJlbnQtdGltZS1kaXNwbGF5OworICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CisgICAg
ZGlzcGxheTogaW5saW5lLWJsb2NrOworICAgIGhlaWdodDogMTJweDsKKyAgICBwYWRkaW5nOiA2
cHg7CisgICAgbWFyZ2luOiA1cHggM3B4OworCisgICAgb3ZlcmZsb3c6IGhpZGRlbjsKKyAgICBj
dXJzb3I6IGRlZmF1bHQ7CisKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgZm9udC1zaXpl
OiAxMHB4OworICAgIGZvbnQtZmFtaWx5OiBWZXJkYW5hOworICAgIGZvbnQtd2VpZ2h0OiBib2xk
OwogfQogCiBhdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lLXJlbWFpbmluZy1kaXNw
bGF5LCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lLXJlbWFpbmluZy1kaXNwbGF5
IHsKQEAgLTgwLDUxICs5MCwzOCBAQCBhdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1l
LXJlbWFpCiB9CiAKIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXRpbWVsaW5lLCB2aWRl
bzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lbGluZSB7Ci0gICAgbGVmdDogNDJweDsKLSAg
ICByaWdodDogMzRweDsKICAgICBoZWlnaHQ6IDEycHg7CiAgICAgcGFkZGluZzogNnB4IDhweDsK
LSAgICBtYXJnaW46IDVweCAwcHg7CisgICAgbWFyZ2luOiA1cHggM3B4OwogfQogCiBhdWRpbzo6
LXdlYmtpdC1tZWRpYS1jb250cm9scy12b2x1bWUtc2xpZGVyLWNvbnRhaW5lciwgdmlkZW86Oi13
ZWJraXQtbWVkaWEtY29udHJvbHMtdm9sdW1lLXNsaWRlci1jb250YWluZXIgewotICAgIGRpc3Bs
YXk6IG5vbmU7CisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBtZWRpYS12b2x1bWUtc2xpZGVyLWNv
bnRhaW5lcjsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgaGVpZ2h0OiAxMDNweDsKKyAg
ICB3aWR0aDogMjRweDsKIH0KIAogYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdm9sdW1l
LXNsaWRlciwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdm9sdW1lLXNsaWRlciB7Ci0g
ICAgZGlzcGxheTogbm9uZTsKKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG1lZGlhLXZvbHVtZS1z
bGlkZXI7CisgICAgZGlzcGxheTogaW5saW5lOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKwor
ICAgIHdpZHRoOiAxMnB4OworICAgIHBhZGRpbmc6IDZweDsKKyAgICBoZWlnaHQ6IDg4cHg7Cisg
ICAgbWFyZ2luOiAwIDAgM3B4IDA7CiB9CiAKIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xz
LXNlZWstYmFjay1idXR0b24sIHZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXNlZWstYmFj
ay1idXR0b24gewotICAgIC8qIFNpbmNlIE1lZGlhQ29udHJvbEVsZW1lbnRzIGFyZSBhbHdheXMg
Y3JlYXRlZCB3aXRoIGEgcmVuZGVyZXIgd2UgaGF2ZSB0byBoaWRlCi0gICAgICAgdGhlIGNvbnRy
b2xzIHdlIGRvbid0IHVzZSwgc28gdGhleSBkb24ndCBtZXNzIHVwIGFjdGl2YXRpb24gYW5kIGV2
ZW50IGhhbmRsaW5nICovCi0gICAgbGVmdDogMHB4OwotICAgIHRvcDogMHB4OwotICAgIHdpZHRo
OiAwcHg7Ci0gICAgaGVpZ2h0OiAwcHg7Ci0KICAgICBkaXNwbGF5OiBub25lOwogfQogCiBhdWRp
bzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1zZWVrLWZvcndhcmQtYnV0dG9uLCB2aWRlbzo6LXdl
YmtpdC1tZWRpYS1jb250cm9scy1zZWVrLWZvcndhcmQtYnV0dG9uIHsKLSAgICAvKiBTaW5jZSBN
ZWRpYUNvbnRyb2xFbGVtZW50cyBhcmUgYWx3YXlzIGNyZWF0ZWQgd2l0aCBhIHJlbmRlcmVyIHdl
IGhhdmUgdG8gaGlkZQotICAgICAgIHRoZSBjb250cm9scyB3ZSBkb24ndCB1c2UsIHNvIHRoZXkg
ZG9uJ3QgbWVzcyB1cCBhY3RpdmF0aW9uIGFuZCBldmVudCBoYW5kbGluZyAqLwotICAgIGxlZnQ6
IDBweDsKLSAgICB0b3A6IDBweDsKLSAgICB3aWR0aDogMHB4OwotICAgIGhlaWdodDogMHB4Owot
CiAgICAgZGlzcGxheTogbm9uZTsKIH0KIAogYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMt
ZnVsbHNjcmVlbi1idXR0b24sIHZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWZ1bGxzY3Jl
ZW4tYnV0dG9uIHsKLSAgICAvKiBTaW5jZSBNZWRpYUNvbnRyb2xFbGVtZW50cyBhcmUgYWx3YXlz
IGNyZWF0ZWQgd2l0aCBhIHJlbmRlcmVyIHdlIGhhdmUgdG8gaGlkZQotICAgICAgIHRoZSBjb250
cm9scyB3ZSBkb24ndCB1c2UsIHNvIHRoZXkgZG9uJ3QgbWVzcyB1cCBhY3RpdmF0aW9uIGFuZCBl
dmVudCBoYW5kbGluZyAqLwotICAgIGxlZnQ6IDBweDsKLSAgICB0b3A6IDBweDsKLSAgICB3aWR0
aDogMHB4OwotICAgIGhlaWdodDogMHB4OwotCiAgICAgZGlzcGxheTogbm9uZTsKIH0KIApAQCAt
MTM2LDMgKzEzMyw3IEBAIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXJldHVybi10by0K
ICAgICBkaXNwbGF5OiBub25lOwogfQogCithdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10
b2dnbGUtY2xvc2VkLWNhcHRpb25zLWJ1dHRvbiwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJv
bHMtdG9nZ2xlLWNsb3NlZC1jYXB0aW9ucy1idXR0b24geworICAgIGRpc3BsYXk6IG5vbmU7Cit9
CisKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCShyZXZp
c2lvbiA1NDQwNykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNywxMCBAQAogI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiVGltZVJhbmdlcy5oIgogCisjaWYgUExBVEZPUk0oUVQpCisjaW5jbHVkZSA8
UXRHbG9iYWw+CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKE1BQykKICNpbmNsdWRlICJNZWRpYVBs
YXllclByaXZhdGVRVEtpdC5oIgogI2VsaWYgT1MoV0lOQ0UpICYmICFQTEFURk9STShRVCkKQEAg
LTQ2LDcgKzUwLDExIEBACiAjZWxpZiBQTEFURk9STShHVEspCiAjaW5jbHVkZSAiTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyLmgiCiAjZWxpZiBQTEFURk9STShRVCkKLSNpbmNsdWRlICJNZWRp
YVBsYXllclByaXZhdGVQaG9ub24uaCIKKyAgICAjaWYgUVRfVkVSU0lPTiA8IDB4MDQwNzAwCisg
ICAgI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZVBob25vbi5oIgorICAgICNlbHNlCisgICAg
I2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZVF0LmgiCisgICAgI2VuZGlmCiAjZWxpZiBQTEFU
Rk9STShDSFJPTUlVTSkKICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVDaHJvbWl1bS5oIgog
I2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJp
dmF0ZVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01l
ZGlhUGxheWVyUHJpdmF0ZVF0LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDUwMCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgICAgQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlUXQuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNp
bmNsdWRlICJGcmFtZUxvYWRlckNsaWVudFF0LmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
KyNpbmNsdWRlICJUaW1lUmFuZ2VzLmgiCisjaW5jbHVkZSAiV2lkZ2V0LmgiCisKKyNpbmNsdWRl
ICJxd2ViZnJhbWUuaCIKKyNpbmNsdWRlICJxd2VicGFnZS5oIgorCisjaW5jbHVkZSA8UU5ldHdv
cmtBY2Nlc3NNYW5hZ2VyPgorI2luY2x1ZGUgPFFOZXR3b3JrQ29va2llSmFyPgorI2luY2x1ZGUg
PFFOZXR3b3JrUmVxdWVzdD4KKyNpbmNsdWRlIDxRUGFpbnRlcj4KKyNpbmNsdWRlIDxRUmVjdD4K
KyNpbmNsdWRlIDxRVGltZT4KKyNpbmNsdWRlIDxRVXJsPgorI2luY2x1ZGUgPFFWaWRlb1N1cmZh
Y2VGb3JtYXQ+CisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisK
KyNpZiAhZGVmaW5lZChRVF9OT19PUEVOR0wpICYmICFkZWZpbmVkKFFUX09QRU5HTF9FU18xX0NM
KSAmJiAhZGVmaW5lZChRVF9PUEVOR0xfRVNfMSkKKyNpbmNsdWRlIDxRR0xDb250ZXh0PgorI2Vu
ZGlmCisKKy8vIFF0IE11bHRpbWVkaWEgSW5jbHVkZXMKKyNpbmNsdWRlIDxRTWVkaWFTZXJ2aWNl
PgorI2luY2x1ZGUgPFFWaWRlb091dHB1dENvbnRyb2w+CisjaW5jbHVkZSA8UVZpZGVvUmVuZGVy
ZXJDb250cm9sPgorI2luY2x1ZGUgPFFWaWRlb1dpbmRvd0NvbnRyb2w+CisjaW5jbHVkZSA8cHJp
dmF0ZS9xcGFpbnRlcnZpZGVvc3VyZmFjZV9wLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlRGVmYXVsdCA6
IHB1YmxpYyBNZWRpYVBsYXllclByaXZhdGUgeworcHVibGljOgorICAgIEludFNpemUgbmF0dXJh
bFNpemUoKSBjb25zdDsKKyAgICB2b2lkIHNldFNpemUoY29uc3QgSW50U2l6ZSYpIHt9CisgICAg
dm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CisgICAgYm9vbCBz
dXBwb3J0c0Z1bGxzY3JlZW4oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCitwcml2YXRlIHNs
b3RzOgorICAgIHZvaWQgcmVwYWludCgpOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBN
ZWRpYVBsYXllclByaXZhdGU7CisgICAgTWVkaWFQbGF5ZXJQcml2YXRlRGVmYXVsdChNZWRpYVBs
YXllciopOworICAgIH5NZWRpYVBsYXllclByaXZhdGVEZWZhdWx0KCk7CisKKyAgICBRUGFpbnRl
clZpZGVvU3VyZmFjZSogbV92aWRlb1N1cmZhY2U7CisgICAgUVZpZGVvT3V0cHV0Q29udHJvbCog
bV9vdXRwdXRDb250cm9sOworICAgIFFWaWRlb1JlbmRlcmVyQ29udHJvbCogbV9yZW5kZXJlckNv
bnRyb2w7CisgICAgUVZpZGVvV2luZG93Q29udHJvbCogbV93aW5kb3dDb250cm9sOworCisgICAg
Ym9vbCBtX2lzQWN0aXZlOworfTsKKworTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlKiBNZWRp
YVBsYXllclByaXZhdGU6OmNyZWF0ZShNZWRpYVBsYXllciogcGxheWVyKQoreworICAgIHJldHVy
biBuZXcgTWVkaWFQbGF5ZXJQcml2YXRlRGVmYXVsdChwbGF5ZXIpOworfQorCit2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZTo6cmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJlZ2lzdHJhciBy
ZWdpc3RyYXIpCit7CisgICAgcmVnaXN0cmFyKGNyZWF0ZSwgZ2V0U3VwcG9ydGVkVHlwZXMsIHN1
cHBvcnRzVHlwZSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpnZXRTdXBwb3J0ZWRU
eXBlcyhIYXNoU2V0PFN0cmluZz4gJnN1cHBvcnRlZCkKK3sKKyAgICBRU3RyaW5nTGlzdCB0eXBl
cyA9IFFNZWRpYVBsYXllcjo6c3VwcG9ydGVkTWltZVR5cGVzKCk7CisKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IHR5cGVzLnNpemUoKTsgaSsrKQorICAgICAgICBzdXBwb3J0ZWQuYWRkKHR5cGVz
LmF0KGkpKTsKK30KKworTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZh
dGU6OnN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmIG1pbWUsIGNvbnN0IFN0cmluZyYgY29kZWMp
Cit7CisgICAgaWYgKFFNZWRpYVBsYXllcjo6aGFzU3VwcG9ydChtaW1lLCBRU3RyaW5nTGlzdChj
b2RlYykpID49IFF0TWVkaWE6OlByb2JhYmx5U3VwcG9ydGVkKQorICAgICAgICByZXR1cm4gTWVk
aWFQbGF5ZXI6OklzU3VwcG9ydGVkOworCisgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpNYXlCZVN1
cHBvcnRlZDsKK30KKworTWVkaWFQbGF5ZXJQcml2YXRlOjpNZWRpYVBsYXllclByaXZhdGUoTWVk
aWFQbGF5ZXIqIHBsYXllcikKKyAgICA6IG1fcGxheWVyKHBsYXllcikKKyAgICAsIG1fbWVkaWFQ
bGF5ZXIobmV3IFFNZWRpYVBsYXllcikKKyAgICAsIG1fbmV0d29ya1N0YXRlKE1lZGlhUGxheWVy
OjpFbXB0eSkKKyAgICAsIG1fcmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcpCisg
ICAgLCBtX2lzVmlzaWJsZShmYWxzZSkKK3sKKyAgICAvLyBTaWduYWwgSGFuZGxlcnMKKyAgICBj
b25uZWN0KG1fbWVkaWFQbGF5ZXIsIFNJR05BTChtZWRpYVN0YXR1c0NoYW5nZWQoUU1lZGlhUGxh
eWVyOjpNZWRpYVN0YXR1cykpLAorICAgICAgICAgICAgdGhpcywgU0xPVChtZWRpYVN0YXR1c0No
YW5nZWQoUU1lZGlhUGxheWVyOjpNZWRpYVN0YXR1cykpKTsKKyAgICBjb25uZWN0KG1fbWVkaWFQ
bGF5ZXIsIFNJR05BTChzdGF0ZUNoYW5nZWQoUU1lZGlhUGxheWVyOjpTdGF0ZSkpLAorICAgICAg
ICAgICAgdGhpcywgU0xPVChzdGF0ZUNoYW5nZWQoUU1lZGlhUGxheWVyOjpTdGF0ZSkpKTsKKyAg
ICBjb25uZWN0KG1fbWVkaWFQbGF5ZXIsIFNJR05BTChlcnJvcihRTWVkaWFQbGF5ZXI6OkVycm9y
KSksCisgICAgICAgICAgICB0aGlzLCBTTE9UKGhhbmRsZUVycm9yKFFNZWRpYVBsYXllcjo6RXJy
b3IpKSk7CisgICAgY29ubmVjdChtX21lZGlhUGxheWVyLCBTSUdOQUwoZHVyYXRpb25DaGFuZ2Vk
KHFpbnQ2NCkpLAorICAgICAgICAgICAgdGhpcywgU0xPVChkdXJhdGlvbkNoYW5nZWQocWludDY0
KSkpOworICAgIGNvbm5lY3QobV9tZWRpYVBsYXllciwgU0lHTkFMKHBvc2l0aW9uQ2hhbmdlZChx
aW50NjQpKSwKKyAgICAgICAgICAgIHRoaXMsIFNMT1QocG9zaXRpb25DaGFuZ2VkKHFpbnQ2NCkp
KTsKKworICAgIC8vIEdyYWIgdGhlIHBsYXllciBjb250cm9sCisgICAgaWYgKG1fbWVkaWFQbGF5
ZXIpIHsKKyAgICAgICAgUU1lZGlhU2VydmljZSogc2VydmljZSA9IG1fbWVkaWFQbGF5ZXItPnNl
cnZpY2UoKTsKKyAgICAgICAgaWYgKHNlcnZpY2UpIHsKKyAgICAgICAgICAgIG1fbWVkaWFQbGF5
ZXJDb250cm9sID0gcW9iamVjdF9jYXN0PFFNZWRpYVBsYXllckNvbnRyb2wgKj4oCisgICAgICAg
ICAgICAgICAgICAgIHNlcnZpY2UtPmNvbnRyb2woUU1lZGlhUGxheWVyQ29udHJvbF9paWQpKTsK
KyAgICAgICAgfQorICAgIH0KK30KKworTWVkaWFQbGF5ZXJQcml2YXRlOjp+TWVkaWFQbGF5ZXJQ
cml2YXRlKCkKK3sKKyAgICBkZWxldGUgbV9tZWRpYVBsYXllcjsKKyAgICBtX21lZGlhUGxheWVy
ID0gMDsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGU6Omhhc1ZpZGVvKCkgY29uc3QKK3sK
KyAgICAvLyByZXR1cm4gbV9tZWRpYVBsYXllci0+aXNWaWRlb0F2YWlsYWJsZSgpOworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6aGFzQXVkaW8oKSBjb25z
dAoreworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6bG9h
ZChjb25zdCBTdHJpbmcmIHVybCkKK3sKKyAgICAvLyBXZSBhcmUgbm93IGxvYWRpbmcKKyAgICBp
ZiAobV9uZXR3b3JrU3RhdGUgIT0gTWVkaWFQbGF5ZXI6OkxvYWRpbmcpIHsKKyAgICAgICAgbV9u
ZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGluZzsKKyAgICAgICAgbV9wbGF5ZXItPm5l
dHdvcmtTdGF0ZUNoYW5nZWQoKTsKKyAgICB9CisKKyAgICAvLyBBbmQgd2UgZG9uJ3QgaGF2ZSBh
bnkgZGF0YSB5ZXQKKyAgICBpZiAobV9yZWFkeVN0YXRlICE9IE1lZGlhUGxheWVyOjpIYXZlTm90
aGluZykgeworICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7
CisgICAgICAgIG1fcGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOworICAgIH0KKworICAgIGNv
bnN0IFFVcmwgclVybCh1cmwpOworICAgIGNvbnN0IFFTdHJpbmcgc2NoZW1lID0gclVybC5zY2hl
bWUoKS50b0xvd2VyKCk7CisKKyAgICAvLyBDb25zdHJ1Y3QgdGhlIG1lZGlhIGNvbnRlbnQgd2l0
aCBhIG5ldHdvcmsgcmVxdWVzdCBpZiB0aGUgcmVzb3VyY2UgaXMgaHR0cFtzXQorICAgIGlmIChz
Y2hlbWUgPT0gImh0dHAiIHx8IHNjaGVtZSA9PSAiaHR0cHMiKSB7CisgICAgICAgIFFOZXR3b3Jr
UmVxdWVzdCByZXF1ZXN0ID0gUU5ldHdvcmtSZXF1ZXN0KHJVcmwpOworCisgICAgICAgIC8vIEdy
YWIgdGhlIGN1cnJlbnQgZG9jdW1lbnQgYW5kIG5ldHdvcmsgbWFuYWdlcgorICAgICAgICBGcmFt
ZSogZnJhbWUgPSBtX3BsYXllci0+ZnJhbWVWaWV3KCkgPyBtX3BsYXllci0+ZnJhbWVWaWV3KCkt
PmZyYW1lKCkgOiAwOworICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZSA/IGZyYW1l
LT5kb2N1bWVudCgpIDogMDsKKyAgICAgICAgRnJhbWVMb2FkZXJDbGllbnRRdCogZnJhbWVMb2Fk
ZXIgPSAgZnJhbWUgPyBzdGF0aWNfY2FzdDxGcmFtZUxvYWRlckNsaWVudFF0Kj4oZnJhbWUtPmxv
YWRlcigpLT5jbGllbnQoKSkgOiAwOworICAgICAgICBRTmV0d29ya0FjY2Vzc01hbmFnZXIqIG1h
bmFnZXIgPSBmcmFtZUxvYWRlciA/IGZyYW1lTG9hZGVyLT53ZWJGcmFtZSgpLT5wYWdlKCktPm5l
dHdvcmtBY2Nlc3NNYW5hZ2VyKCkgOiAwOworCisgICAgICAgIGlmIChkb2N1bWVudCAmJiBtYW5h
Z2VyKSB7CisgICAgICAgICAgICAvLyBTZXQgdGhlIGNvb2tpZXMKKyAgICAgICAgICAgIFFOZXR3
b3JrQ29va2llSmFyKiBjb29raWVzID0gbWFuYWdlci0+Y29va2llSmFyKCk7CisgICAgICAgICAg
ICByZXF1ZXN0LnNldEhlYWRlcihRTmV0d29ya1JlcXVlc3Q6OkNvb2tpZUhlYWRlciwgcVZhcmlh
bnRGcm9tVmFsdWUoY29va2llcy0+Y29va2llc0ZvclVybChyVXJsKSkpOworCisgICAgICAgICAg
ICAvLyBTZXQgdGhlIHJlZmZlcmVyCisgICAgICAgICAgICByZXF1ZXN0LnNldFJhd0hlYWRlcigi
UmVmZmVyZXIiLCBkb2N1bWVudC0+ZG9jdW1lbnRVUkkoKS51dGY4KCkuZGF0YSgpKTsKKworICAg
ICAgICAgICAgLy8gU2V0IHRoZSB1c2VyIGFnZW50CisgICAgICAgICAgICByZXF1ZXN0LnNldFJh
d0hlYWRlcigiVXNlci1BZ2VudCIsIGZyYW1lTG9hZGVyLT51c2VyQWdlbnQoclVybCkudXRmOCgp
LmRhdGEoKSk7CisgICAgICAgIH0KKworICAgICAgICBtX21lZGlhUGxheWVyLT5zZXRNZWRpYShR
TWVkaWFDb250ZW50KHJlcXVlc3QpKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBPdGhlcndp
c2UsIGp1c3QgdXNlIHRoZSBVUkwKKyAgICAgICAgbV9tZWRpYVBsYXllci0+c2V0TWVkaWEoUU1l
ZGlhQ29udGVudChyVXJsKSk7CisgICAgfQorfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6
Y2FuY2VsTG9hZCgpCit7CisgICAgbV9tZWRpYVBsYXllci0+c2V0TWVkaWEoUU1lZGlhQ29udGVu
dCgpKTsKKyAgICB1cGRhdGVTdGF0ZXMoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6
OnBsYXkoKQoreworICAgIGlmIChtX21lZGlhUGxheWVyLT5zdGF0ZSgpICE9IFFNZWRpYVBsYXll
cjo6UGxheWluZ1N0YXRlKQorICAgICAgICBtX21lZGlhUGxheWVyLT5wbGF5KCk7Cit9CisKK3Zv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpwYXVzZSgpCit7CisgICAgaWYgKG1fbWVkaWFQbGF5ZXIt
PnN0YXRlKCkgPT0gUU1lZGlhUGxheWVyOjpQbGF5aW5nU3RhdGUpCisgICAgICAgIG1fbWVkaWFQ
bGF5ZXItPnBhdXNlKCk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpwYXVzZWQoKSBj
b25zdAoreworICAgIHJldHVybiBtX21lZGlhUGxheWVyLT5zdGF0ZSgpICE9IFFNZWRpYVBsYXll
cjo6UGxheWluZ1N0YXRlOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2VlayhmbG9h
dCBwb3NpdGlvbikKK3sKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXItPmlzU2Vla2FibGUoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fbWVkaWFQbGF5ZXJDb250cm9sICYmICFtX21lZGlh
UGxheWVyQ29udHJvbC0+YXZhaWxhYmxlUGxheWJhY2tSYW5nZXMoKS5jb250YWlucyhwb3NpdGlv
biAqIDEwMDApKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAocG9zaXRpb24gPiBkdXJhdGlv
bigpKQorICAgICAgICBwb3NpdGlvbiA9IGR1cmF0aW9uKCk7CisKKyAgICBtX21lZGlhUGxheWVy
LT5zZXRQb3NpdGlvbihwb3NpdGlvbiAqIDEwMDAuMGYpOworfQorCitib29sIE1lZGlhUGxheWVy
UHJpdmF0ZTo6c2Vla2luZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitmbG9h
dCBNZWRpYVBsYXllclByaXZhdGU6OmR1cmF0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAobV9yZWFk
eVN0YXRlIDwgTWVkaWFQbGF5ZXI6OkhhdmVNZXRhZGF0YSkKKyAgICAgICAgcmV0dXJuIDAuMGY7
CisKKyAgICBmbG9hdCBkdXJhdGlvbiA9IG1fbWVkaWFQbGF5ZXItPmR1cmF0aW9uKCkgLyAxMDAw
LjBmOworCisgICAgLy8gV2UgYXJlIHN0cmVhbWluZworICAgIGlmIChkdXJhdGlvbiA8PSAwLjBm
KQorICAgICAgICBkdXJhdGlvbiA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0
eSgpOworCisgICAgcmV0dXJuIGR1cmF0aW9uOworfQorCitmbG9hdCBNZWRpYVBsYXllclByaXZh
dGU6OmN1cnJlbnRUaW1lKCkgY29uc3QKK3sKKyAgICBmbG9hdCBjdXJyZW50VGltZSA9IG1fbWVk
aWFQbGF5ZXItPnBvc2l0aW9uKCkgLyAxMDAwLjBmOworICAgIHJldHVybiBjdXJyZW50VGltZTsK
K30KKworUGFzc1JlZlB0cjxUaW1lUmFuZ2VzPiBNZWRpYVBsYXllclByaXZhdGU6OmJ1ZmZlcmVk
KCkgY29uc3QKK3sKKyAgICBSZWZQdHI8VGltZVJhbmdlcz4gYnVmZmVyZWQgPSBUaW1lUmFuZ2Vz
OjpjcmVhdGUoKTsKKworICAgIGlmICghbV9tZWRpYVBsYXllckNvbnRyb2wpCisgICAgICAgIHJl
dHVybiBidWZmZXJlZDsKKworICAgIFFNZWRpYVRpbWVSYW5nZSBwbGF5YmFja1JhbmdlcyA9IG1f
bWVkaWFQbGF5ZXJDb250cm9sLT5hdmFpbGFibGVQbGF5YmFja1JhbmdlcygpOworCisgICAgZm9y
ZWFjaCAoY29uc3QgUU1lZGlhVGltZUludGVydmFsIGludGVydmFsLCBwbGF5YmFja1Jhbmdlcy5p
bnRlcnZhbHMoKSkgeworICAgICAgICBmbG9hdCByYW5nZU1pbiA9IHN0YXRpY19jYXN0PGZsb2F0
PihpbnRlcnZhbC5zdGFydCgpKSAvIDEwMDAuMGY7CisgICAgICAgIGZsb2F0IHJhbmdlTWF4ID0g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KGludGVydmFsLmVuZCgpKSAvIDEwMDAuMGY7CisgICAgICAgIGJ1
ZmZlcmVkLT5hZGQocmFuZ2VNaW4sIHJhbmdlTWF4KTsKKyAgICB9CisKKyAgICByZXR1cm4gYnVm
ZmVyZWQucmVsZWFzZSgpOworfQorCitmbG9hdCBNZWRpYVBsYXllclByaXZhdGU6Om1heFRpbWVT
ZWVrYWJsZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX21lZGlhUGxheWVyQ29udHJvbCkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fbWVkaWFQbGF5
ZXJDb250cm9sLT5hdmFpbGFibGVQbGF5YmFja1JhbmdlcygpLmxhdGVzdFRpbWUoKSkgLyAxMDAw
LjBmOworfQorCit1bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGU6OmJ5dGVzTG9hZGVkKCkgY29u
c3QKK3sKKyAgICB1bnNpZ25lZCBwZXJjZW50YWdlID0gbV9tZWRpYVBsYXllci0+YnVmZmVyU3Rh
dHVzKCk7CisKKyAgICBpZiAocGVyY2VudGFnZSA9PSAxMDApIHsKKyAgICAgICAgaWYgKG1fbmV0
d29ya1N0YXRlICE9IE1lZGlhUGxheWVyOjpJZGxlKSB7CisgICAgICAgICAgICBtX25ldHdvcmtT
dGF0ZSA9IE1lZGlhUGxheWVyOjpJZGxlOworICAgICAgICAgICAgbV9wbGF5ZXItPm5ldHdvcmtT
dGF0ZUNoYW5nZWQoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9yZWFkeVN0YXRlICE9IE1l
ZGlhUGxheWVyOjpIYXZlRW5vdWdoRGF0YSkgeworICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0g
TWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhOworICAgICAgICAgICAgbV9wbGF5ZXItPnJlYWR5
U3RhdGVDaGFuZ2VkKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBRTGF0aW4xU3RyaW5nIGJs
S2V5KCJieXRlcy1sb2FkZWQiKTsKKyAgICBpZiAobV9tZWRpYVBsYXllci0+YXZhaWxhYmxlRXh0
ZW5kZWRNZXRhRGF0YSgpLmNvbnRhaW5zKGJsS2V5KSkKKyAgICAgICAgcmV0dXJuIG1fbWVkaWFQ
bGF5ZXItPmV4dGVuZGVkTWV0YURhdGEoYmxLZXkpLnRvSW50KCk7CisKKyAgICByZXR1cm4gcGVy
Y2VudGFnZTsKK30KKwordW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRlOjp0b3RhbEJ5dGVzKCkg
Y29uc3QKK3sKKyAgICBpZiAobV9tZWRpYVBsYXllci0+YXZhaWxhYmxlTWV0YURhdGEoKS5jb250
YWlucyhRdE1lZGlhOjpTaXplKSkKKyAgICAgICAgcmV0dXJuIG1fbWVkaWFQbGF5ZXItPm1ldGFE
YXRhKFF0TWVkaWE6OlNpemUpLnRvSW50KCk7CisKKyAgICByZXR1cm4gMTAwOworfQorCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0UmF0ZShmbG9hdCByYXRlKQoreworICAgIG1fbWVkaWFQ
bGF5ZXItPnNldFBsYXliYWNrUmF0ZShyYXRlKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZh
dGU6OnNldFZvbHVtZShmbG9hdCB2b2x1bWUpCit7CisgICAgbV9tZWRpYVBsYXllci0+c2V0Vm9s
dW1lKHN0YXRpY19jYXN0PGludD4odm9sdW1lICogMTAwLjApKTsKK30KKwordm9pZCBNZWRpYVBs
YXllclByaXZhdGU6OnNldE11dGVkKGJvb2wgbXV0ZWQpCit7CisgICAgbV9tZWRpYVBsYXllci0+
c2V0TXV0ZWQobXV0ZWQpOworfQorCitNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIE1lZGlhUGxh
eWVyUHJpdmF0ZTo6bmV0d29ya1N0YXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9uZXR3b3Jr
U3RhdGU7Cit9CisKK01lZGlhUGxheWVyOjpSZWFkeVN0YXRlIE1lZGlhUGxheWVyUHJpdmF0ZTo6
cmVhZHlTdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVhZHlTdGF0ZTsKK30KKwordm9p
ZCBNZWRpYVBsYXllclByaXZhdGU6OnNldFZpc2libGUoYm9vbCB2aXNpYmxlKQoreworICAgIG1f
aXNWaXNpYmxlID0gdmlzaWJsZTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om1lZGlh
U3RhdHVzQ2hhbmdlZChRTWVkaWFQbGF5ZXI6Ok1lZGlhU3RhdHVzKQoreworICAgIHVwZGF0ZVN0
YXRlcygpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6aGFuZGxlRXJyb3IoUU1lZGlh
UGxheWVyOjpFcnJvcikKK3sKKyAgICB1cGRhdGVTdGF0ZXMoKTsKK30KKwordm9pZCBNZWRpYVBs
YXllclByaXZhdGU6OmR1cmF0aW9uQ2hhbmdlZChxaW50NjQpCit7CisgICAgbV9wbGF5ZXItPmR1
cmF0aW9uQ2hhbmdlZCgpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6dXBkYXRlU3Rh
dGVzKCkKK3sKKyAgICAvLyBTdG9yZSB0aGUgb2xkIHN0YXRlcyBzbyB0aGF0IHdlIGNhbiBkZXRl
Y3QgYSBjaGFuZ2UgYW5kIHJhaXNlIGNoYW5nZSBldmVudHMKKyAgICBNZWRpYVBsYXllcjo6TmV0
d29ya1N0YXRlIG9sZE5ldHdvcmtTdGF0ZSA9IG1fbmV0d29ya1N0YXRlOworICAgIE1lZGlhUGxh
eWVyOjpSZWFkeVN0YXRlIG9sZFJlYWR5U3RhdGUgPSBtX3JlYWR5U3RhdGU7CisKKyAgICBRTWVk
aWFQbGF5ZXI6Ok1lZGlhU3RhdHVzIGN1cnJlbnRTdGF0dXMgPSBtX21lZGlhUGxheWVyLT5tZWRp
YVN0YXR1cygpOworICAgIFFNZWRpYVBsYXllcjo6RXJyb3IgY3VycmVudEVycm9yID0gbV9tZWRp
YVBsYXllci0+ZXJyb3IoKTsKKworICAgIGlmIChjdXJyZW50RXJyb3IgIT0gUU1lZGlhUGxheWVy
OjpOb0Vycm9yKSB7CisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90
aGluZzsKKyAgICAgICAgaWYgKGN1cnJlbnRFcnJvciA9PSBRTWVkaWFQbGF5ZXI6OkZvcm1hdEVy
cm9yKQorICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6Rm9ybWF0RXJy
b3I7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5
ZXI6Ok5ldHdvcmtFcnJvcjsKKyAgICB9IGVsc2UgaWYgKGN1cnJlbnRTdGF0dXMgPT0gUU1lZGlh
UGxheWVyOjpVbmtub3duTWVkaWFTdGF0dXMKKyAgICAgICAgICAgICAgIHx8IGN1cnJlbnRTdGF0
dXMgPT0gUU1lZGlhUGxheWVyOjpOb01lZGlhKSB7CisgICAgICAgIG1fbmV0d29ya1N0YXRlID0g
TWVkaWFQbGF5ZXI6OklkbGU7CisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpI
YXZlTm90aGluZzsKKyAgICB9IGVsc2UgaWYgKGN1cnJlbnRTdGF0dXMgPT0gUU1lZGlhUGxheWVy
OjpMb2FkaW5nTWVkaWEpIHsKKyAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6
TG9hZGluZzsKKyAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5n
OworICAgIH0gZWxzZSBpZiAoY3VycmVudFN0YXR1cyA9PSBRTWVkaWFQbGF5ZXI6OkxvYWRlZE1l
ZGlhKSB7CisgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRpbmc7Cisg
ICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTWV0YWRhdGE7CisgICAgfSBl
bHNlIGlmIChjdXJyZW50U3RhdHVzID09IFFNZWRpYVBsYXllcjo6QnVmZmVyaW5nTWVkaWEpIHsK
KyAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGluZzsKKyAgICAgICAg
bV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVGdXR1cmVEYXRhOworICAgIH0gZWxzZSBp
ZiAoY3VycmVudFN0YXR1cyA9PSBRTWVkaWFQbGF5ZXI6OlN0YWxsZWRNZWRpYSkgeworICAgICAg
ICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOworICAgICAgICBtX3JlYWR5
U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUN1cnJlbnREYXRhOworICAgIH0gZWxzZSBpZiAoY3Vy
cmVudFN0YXR1cyA9PSBRTWVkaWFQbGF5ZXI6OkJ1ZmZlcmVkTWVkaWEKKyAgICAgICAgICAgICAg
IHx8IGN1cnJlbnRTdGF0dXMgPT0gUU1lZGlhUGxheWVyOjpFbmRPZk1lZGlhKSB7CisgICAgICAg
IG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OklkbGU7CisgICAgICAgIG1fcmVhZHlTdGF0
ZSA9IE1lZGlhUGxheWVyOjpIYXZlRW5vdWdoRGF0YTsKKyAgICB9IGVsc2UgaWYgKGN1cnJlbnRT
dGF0dXMgPT0gUU1lZGlhUGxheWVyOjpJbnZhbGlkTWVkaWEpIHsKKyAgICAgICAgbV9uZXR3b3Jr
U3RhdGUgPSBNZWRpYVBsYXllcjo6Rm9ybWF0RXJyb3I7CisgICAgICAgIG1fcmVhZHlTdGF0ZSA9
IE1lZGlhUGxheWVyOjpIYXZlTWV0YWRhdGE7CisgICAgfQorCisgICAgLy8gTG9nIHRoZSBzdGF0
ZSBjaGFuZ2VzIGFuZCByYWlzZSB0aGUgc3RhdGUgY2hhbmdlIGV2ZW50cworICAgIGlmIChtX25l
dHdvcmtTdGF0ZSAhPSBvbGROZXR3b3JrU3RhdGUpCisgICAgICAgIG1fcGxheWVyLT5uZXR3b3Jr
U3RhdGVDaGFuZ2VkKCk7CisKKyAgICBpZiAobV9yZWFkeVN0YXRlICE9IG9sZFJlYWR5U3RhdGUp
CisgICAgICAgIG1fcGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOworfQorCitNZWRpYVBsYXll
clByaXZhdGVEZWZhdWx0OjpNZWRpYVBsYXllclByaXZhdGVEZWZhdWx0KE1lZGlhUGxheWVyICpw
bGF5ZXIpCisgICAgOiBNZWRpYVBsYXllclByaXZhdGUocGxheWVyKQorICAgICwgbV92aWRlb1N1
cmZhY2UobmV3IFFQYWludGVyVmlkZW9TdXJmYWNlKG1fbWVkaWFQbGF5ZXIpKQoreworICAgIGlm
IChtX21lZGlhUGxheWVyKSB7CisgICAgICAgIFFNZWRpYVNlcnZpY2UqIHNlcnZpY2UgPSBtX21l
ZGlhUGxheWVyLT5zZXJ2aWNlKCk7CisgICAgICAgIGlmIChzZXJ2aWNlKSB7CisgICAgICAgICAg
ICBtX291dHB1dENvbnRyb2wgPSBxb2JqZWN0X2Nhc3Q8UVZpZGVvT3V0cHV0Q29udHJvbCAqPigK
KyAgICAgICAgICAgICAgICAgICAgc2VydmljZS0+Y29udHJvbChRVmlkZW9PdXRwdXRDb250cm9s
X2lpZCkpOworICAgICAgICAgICAgbV9yZW5kZXJlckNvbnRyb2wgPSBxb2JqZWN0X2Nhc3Q8UVZp
ZGVvUmVuZGVyZXJDb250cm9sICo+KAorICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLT5jb250
cm9sKFFWaWRlb1JlbmRlcmVyQ29udHJvbF9paWQpKTsKKyAgICAgICAgICAgIG1fd2luZG93Q29u
dHJvbCA9IHFvYmplY3RfY2FzdDxRVmlkZW9XaW5kb3dDb250cm9sICo+KAorICAgICAgICAgICAg
ICAgICAgICBzZXJ2aWNlLT5jb250cm9sKFFWaWRlb1dpbmRvd0NvbnRyb2xfaWlkKSk7CisKKyAg
ICAgICAgICAgIGlmIChtX291dHB1dENvbnRyb2wgJiYgbV9yZW5kZXJlckNvbnRyb2wpIHsKKyAg
ICAgICAgICAgICAgICBjb25uZWN0KG1fdmlkZW9TdXJmYWNlLCBTSUdOQUwoZnJhbWVDaGFuZ2Vk
KCkpLCB0aGlzLCBTTE9UKHJlcGFpbnQoKSkpOworCisgICAgICAgICAgICAgICAgbV9yZW5kZXJl
ckNvbnRyb2wtPnNldFN1cmZhY2UobV92aWRlb1N1cmZhY2UpOworICAgICAgICAgICAgICAgIG1f
b3V0cHV0Q29udHJvbC0+c2V0T3V0cHV0KFFWaWRlb091dHB1dENvbnRyb2w6OlJlbmRlcmVyT3V0
cHV0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworTWVkaWFQbGF5ZXJQ
cml2YXRlRGVmYXVsdDo6fk1lZGlhUGxheWVyUHJpdmF0ZURlZmF1bHQoKQoreworICAgIGRlbGV0
ZSBtX3ZpZGVvU3VyZmFjZTsKKyAgICBtX3ZpZGVvU3VyZmFjZSA9IDA7Cit9CisKK0ludFNpemUg
TWVkaWFQbGF5ZXJQcml2YXRlRGVmYXVsdDo6bmF0dXJhbFNpemUoKSBjb25zdAoreworICAgIGlm
ICghaGFzVmlkZW8oKSB8fCBtX3JlYWR5U3RhdGUgPCBNZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRh
KQorICAgICAgICByZXR1cm4gSW50U2l6ZSgpOworCisgICAgUVNpemUgdmlkZW9TaXplID0gbV92
aWRlb1N1cmZhY2UtPnN1cmZhY2VGb3JtYXQoKS5zaXplSGludCgpOworCisgICAgaWYgKHZpZGVv
U2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBJbnRTaXplKCk7CisKKyAgICByZXR1cm4g
SW50U2l6ZSh2aWRlb1NpemUud2lkdGgoKSwgdmlkZW9TaXplLmhlaWdodCgpKTsKK30KKwordm9p
ZCBNZWRpYVBsYXllclByaXZhdGVEZWZhdWx0OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKGNvbnRleHQtPnBhaW50aW5nRGlz
YWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2lzVmlzaWJsZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy8gR3JhYiB0aGUgcGFpbnRlcgorICAgIFFQYWludGVyKiBwYWlu
dGVyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisKKyAgICBpZiAoIW1faXNBY3RpdmUp
IHsKKyAgICAgICAgLy8gQXR0ZW1wdCBHTCBTZXR1cAorI2lmICFkZWZpbmVkKFFUX05PX09QRU5H
TCkgJiYgIWRlZmluZWQoUVRfT1BFTkdMX0VTXzFfQ0wpICYmICFkZWZpbmVkKFFUX09QRU5HTF9F
U18xKQorICAgICAgICBpZiAoKHBhaW50ZXItPnBhaW50RW5naW5lKCktPnR5cGUoKSA9PSBRUGFp
bnRFbmdpbmU6Ok9wZW5HTAorICAgICAgICAgICAgIHx8IHBhaW50ZXItPnBhaW50RW5naW5lKCkt
PnR5cGUoKSA9PSBRUGFpbnRFbmdpbmU6Ok9wZW5HTDIpKSB7CisgICAgICAgICAgICAvLyBTZXQg
R0wgQ29udGV4dAorICAgICAgICAgICAgbV92aWRlb1N1cmZhY2UtPnNldEdMQ29udGV4dChjb25z
dF9jYXN0PFFHTENvbnRleHQgKj4oUUdMQ29udGV4dDo6Y3VycmVudENvbnRleHQoKSkpOworCisg
ICAgICAgICAgICAvLyBDaGVjayBTaGFkZXIgVHlwZXMKKyAgICAgICAgICAgIGlmIChtX3ZpZGVv
U3VyZmFjZS0+c3VwcG9ydGVkU2hhZGVyVHlwZXMoKSAmIFFQYWludGVyVmlkZW9TdXJmYWNlOjpH
bHNsU2hhZGVyKQorICAgICAgICAgICAgICAgIG1fdmlkZW9TdXJmYWNlLT5zZXRTaGFkZXJUeXBl
KFFQYWludGVyVmlkZW9TdXJmYWNlOjpHbHNsU2hhZGVyKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBtX3ZpZGVvU3VyZmFjZS0+c2V0U2hhZGVyVHlwZShRUGFpbnRlclZpZGVv
U3VyZmFjZTo6RnJhZ21lbnRQcm9ncmFtU2hhZGVyKTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAg
ICAgICAgLy8gU2V0dXAgQ29tcGxldGVkCisgICAgICAgIG1faXNBY3RpdmUgPSB0cnVlOworICAg
IH0KKworICAgIC8vIFBhaW50IHRoZSBmcmFtZQorICAgIG1fdmlkZW9TdXJmYWNlLT5wYWludChw
YWludGVyLCBRUmVjdChyZWN0LngoKSwgcmVjdC55KCksCisgICAgcmVjdC53aWR0aCgpLCByZWN0
LmhlaWdodCgpKSk7CisgICAgbV92aWRlb1N1cmZhY2UtPnNldFJlYWR5KHRydWUpOworfQorCit2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZURlZmF1bHQ6OnJlcGFpbnQoKQoreworICAgIG1fcGxheWVy
LT5yZXBhaW50KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2luY2x1ZGUgIm1v
Y19NZWRpYVBsYXllclByaXZhdGVRdC5jcHAiCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5oCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgICAgQ29weXJpZ2h0
IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIE1l
ZGlhUGxheWVyUHJpdmF0ZVF0X2gKKyNkZWZpbmUgTWVkaWFQbGF5ZXJQcml2YXRlUXRfaAorCisj
aW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCisKKyNpbmNsdWRlIDxRTWVkaWFQbGF5ZXI+
CisjaW5jbHVkZSA8UU1lZGlhUGxheWVyQ29udHJvbD4KKyNpbmNsdWRlIDxRT2JqZWN0PgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZSA6IHB1YmxpYyBR
T2JqZWN0LCBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlIHsKKworICAgIFFfT0JK
RUNUCisKK3B1YmxpYzoKKyAgICBzdGF0aWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlKiBj
cmVhdGUoTWVkaWFQbGF5ZXIqIHBsYXllcik7CisgICAgdmlydHVhbCB+TWVkaWFQbGF5ZXJQcml2
YXRlKCk7CisKKyAgICBzdGF0aWMgdm9pZCByZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5l
UmVnaXN0cmFyKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0
cmluZz4mKTsKKyAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBzdXBwb3J0c1R5
cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGNvZGVjcyk7CisgICAgc3RhdGlj
IGJvb2wgaXNBdmFpbGFibGUoKSB7IHJldHVybiB0cnVlOyB9CisKKyAgICBib29sIGhhc1ZpZGVv
KCkgY29uc3Q7CisgICAgYm9vbCBoYXNBdWRpbygpIGNvbnN0OworCisgICAgdm9pZCBsb2FkKGNv
bnN0IFN0cmluZyAmdXJsKTsKKyAgICB2b2lkIGNhbmNlbExvYWQoKTsKKworICAgIHZvaWQgcGxh
eSgpOworICAgIHZvaWQgcGF1c2UoKTsKKworICAgIGJvb2wgcGF1c2VkKCkgY29uc3Q7CisgICAg
Ym9vbCBzZWVraW5nKCkgY29uc3Q7CisKKyAgICBmbG9hdCBkdXJhdGlvbigpIGNvbnN0OworICAg
IGZsb2F0IGN1cnJlbnRUaW1lKCkgY29uc3Q7CisgICAgdm9pZCBzZWVrKGZsb2F0KTsKKworICAg
IHZvaWQgc2V0UmF0ZShmbG9hdCk7CisgICAgdm9pZCBzZXRWb2x1bWUoZmxvYXQpOworICAgIHZv
aWQgc2V0TXV0ZWQoYm9vbCk7CisKKyAgICAvLyBTdGF0ZSBJbmZvcm1hdGlvbgorICAgIE1lZGlh
UGxheWVyOjpOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlKCkgY29uc3Q7CisgICAgTWVkaWFQbGF5
ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0OworCisgICAgLy8gTmV0d29yayBJbmZv
cm1hdGlvbgorICAgIFBhc3NSZWZQdHI8VGltZVJhbmdlcz4gYnVmZmVyZWQoKSBjb25zdDsKKyAg
ICBmbG9hdCBtYXhUaW1lU2Vla2FibGUoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBieXRlc0xvYWRl
ZCgpIGNvbnN0OworICAgIHVuc2lnbmVkIHRvdGFsQnl0ZXMoKSBjb25zdDsKKworICAgIHZpcnR1
YWwgdm9pZCBzZXRWaXNpYmxlKGJvb2wpOworCisgICAgdmlydHVhbCBJbnRTaXplIG5hdHVyYWxT
aXplKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRTaXplKGNvbnN0IEludFNpemUm
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IElu
dFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0
ID0gMDsKKworcHJvdGVjdGVkIHNsb3RzOgorICAgIHZpcnR1YWwgdm9pZCBtZWRpYVN0YXR1c0No
YW5nZWQoUU1lZGlhUGxheWVyOjpNZWRpYVN0YXR1cyk7CisgICAgdmlydHVhbCB2b2lkIGhhbmRs
ZUVycm9yKFFNZWRpYVBsYXllcjo6RXJyb3IpOworICAgIHZpcnR1YWwgdm9pZCBzdGF0ZUNoYW5n
ZWQoUU1lZGlhUGxheWVyOjpTdGF0ZSkge30KKyAgICB2aXJ0dWFsIHZvaWQgcG9zaXRpb25DaGFu
Z2VkKHFpbnQ2NCkge30KKyAgICB2aXJ0dWFsIHZvaWQgZHVyYXRpb25DaGFuZ2VkKHFpbnQ2NCk7
CisgICAgdmlydHVhbCB2b2lkIHJlcGFpbnQoKSB7fQorCitwcm90ZWN0ZWQ6CisgICAgTWVkaWFQ
bGF5ZXJQcml2YXRlKE1lZGlhUGxheWVyKik7CisKKyAgICBNZWRpYVBsYXllciogbV9wbGF5ZXI7
CisgICAgUU1lZGlhUGxheWVyKiBtX21lZGlhUGxheWVyOworICAgIFFNZWRpYVBsYXllckNvbnRy
b2wqIG1fbWVkaWFQbGF5ZXJDb250cm9sOworCisgICAgbXV0YWJsZSBNZWRpYVBsYXllcjo6TmV0
d29ya1N0YXRlIG1fbmV0d29ya1N0YXRlOworICAgIG11dGFibGUgTWVkaWFQbGF5ZXI6OlJlYWR5
U3RhdGUgbV9yZWFkeVN0YXRlOworCisgICAgYm9vbCBtX2lzVmlzaWJsZTsKKworcHJpdmF0ZToK
KyAgICB2b2lkIHVwZGF0ZVN0YXRlcygpOworfTsKK30KKworI2VuZGlmIC8vIE1lZGlhUGxheWVy
UHJpdmF0ZVF0X2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmNwcAkocmV2
aXNpb24gNTQ0MDcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1
ZGUgIkZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1
ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCiAj
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKQEAgLTQ3
LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKICNpbmNsdWRlICJSZW5kZXJTbGlk
ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgorI2luY2x1ZGUgIlRpbWVSYW5nZXMuaCIK
ICNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZVF0LmgiCiAjaW5jbHVkZSAiVXNlckFnZW50U3R5bGVT
aGVldHMuaCIKICNpbmNsdWRlICJxd2VicGFnZS5oIgpAQCAtOTIxLDE0ICs5MjMsMTAgQEAgYm9v
bCBSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhTXV0ZUJ1dHRvbgogICAgIGNvbnN0IFFQb2ludEYg
c3BlYWtlclBvbHlnb25bNl0gPSB7IFFQb2ludEYoMjAsIDMwKSwgUVBvaW50Rig1MCwgMzApLCBR
UG9pbnRGKDgwLCAwKSwKICAgICAgICAgICAgIFFQb2ludEYoODAsIDEwMCksIFFQb2ludEYoNTAs
IDcwKSwgUVBvaW50RigyMCwgNzApfTsKIAotICAgIHAucGFpbnRlci0+c2V0QnJ1c2goZ2V0TWVk
aWFDb250cm9sRm9yZWdyb3VuZENvbG9yKG8pKTsKKyAgICBwLnBhaW50ZXItPnNldFBlbihtZWRp
YUVsZW1lbnQtPm11dGVkKCkgPyBRdDo6ZGFya0dyYXkgOiBRdDo6bGlnaHRHcmF5KTsKKyAgICBw
LnBhaW50ZXItPnNldEJydXNoKG1lZGlhRWxlbWVudC0+bXV0ZWQoKSA/IFF0OjpkYXJrUmVkIDog
Z2V0TWVkaWFDb250cm9sRm9yZWdyb3VuZENvbG9yKG8pKTsKICAgICBwLnBhaW50ZXItPmRyYXdQ
b2x5Z29uKHNwZWFrZXJQb2x5Z29uLCA2KTsKIAotICAgIGlmIChtZWRpYUVsZW1lbnQtPm11dGVk
KCkpIHsKLSAgICAgICAgcC5wYWludGVyLT5zZXRQZW4oUXQ6OnJlZCk7Ci0gICAgICAgIHAucGFp
bnRlci0+ZHJhd0xpbmUoMCwgMTAwLCAxMDAsIDApOwotICAgIH0KLQogICAgIHJldHVybiBmYWxz
ZTsKIH0KIApAQCAtOTcxLDYgKzk2OSw5MSBAQCBib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50TWVk
aWFTZWVrRm9yd2FyCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitib29sIFJlbmRlclRoZW1lUXQ6
OnBhaW50TWVkaWFDdXJyZW50VGltZShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVj
dDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgU3R5bGVQ
YWludGVyIHAodGhpcywgcGFpbnRJbmZvKTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChvLT5zdHlsZSgpKSB7CisgICAgICAgIC8vIFNldCB0
aGUgdGV4dCBjb2xvciBkZXBlbmRpbmcgb24gcGxhdGZvcm0KKyAgICAgICAgUVBhbGV0dGUgcGFs
ID0gUUFwcGxpY2F0aW9uOjpwYWxldHRlKCk7CisgICAgICAgIG8tPnN0eWxlKCktPnNldFRleHRG
aWxsQ29sb3IocGFsLmJydXNoKFFQYWxldHRlOjpBY3RpdmUsIFFQYWxldHRlOjpIaWdobGlnaHRl
ZFRleHQpLmNvbG9yKCkpOworICAgIH0KKworICAgIHAucGFpbnRlci0+c2V0UmVuZGVySGludChR
UGFpbnRlcjo6QW50aWFsaWFzaW5nLCB0cnVlKTsKKyAgICBwYWludE1lZGlhQmFja2dyb3VuZChw
LnBhaW50ZXIsIHIpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitTdHJpbmcgUmVuZGVyVGhl
bWVRdDo6Zm9ybWF0TWVkaWFDb250cm9sc0N1cnJlbnRUaW1lKGZsb2F0IGN1cnJlbnRUaW1lLCBm
bG9hdCBkdXJhdGlvbikgY29uc3QKK3sKKyAgICByZXR1cm4gZm9ybWF0TWVkaWFDb250cm9sc1Rp
bWUoY3VycmVudFRpbWUpICsgIiAvICIgKyBmb3JtYXRNZWRpYUNvbnRyb2xzVGltZShkdXJhdGlv
bik7Cit9CisKK1N0cmluZyBSZW5kZXJUaGVtZVF0Ojpmb3JtYXRNZWRpYUNvbnRyb2xzUmVtYWlu
aW5nVGltZShmbG9hdCBjdXJyZW50VGltZSwgZmxvYXQgZHVyYXRpb24pIGNvbnN0Cit7CisgICAg
cmV0dXJuIFN0cmluZygpOworfQorCitib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50TWVkaWFWb2x1
bWVTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QgKm8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJ
bmZvICZwYWludEluZm8sIGNvbnN0IEludFJlY3QgJnIpCit7CisgICAgU3R5bGVQYWludGVyIHAo
dGhpcywgcGFpbnRJbmZvKTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIHAucGFpbnRlci0+c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFz
aW5nLCB0cnVlKTsKKworICAgIHBhaW50TWVkaWFCYWNrZ3JvdW5kKHAucGFpbnRlciwgcik7CisK
KyAgICBpZiAoIW8tPmlzU2xpZGVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIElu
dFJlY3QgYiA9IHRvUmVuZGVyQm94KG8pLT5jb250ZW50Qm94UmVjdCgpOworCisgICAgLy8gUG9z
aXRpb24gdGhlIG91dGVyIHJlY3RhbmdsZQorICAgIGludCB0b3AgPSByLnkoKSArIGIueSgpOwor
ICAgIGludCBsZWZ0ID0gci54KCkgKyBiLngoKTsKKyAgICBpbnQgd2lkdGggPSBiLndpZHRoKCk7
CisgICAgaW50IGhlaWdodCA9IGIuaGVpZ2h0KCk7CisKKyAgICBzdGF0aWMgY29uc3QgUUNvbG9y
IHNjYWxlQ29sb3IoMjU1LCAyNTUsIDI1NSwgMTAwKTsKKworICAgIC8vIERyYXcgdGhlIG91dGVy
IHJlY3RhbmdsZQorICAgIHAucGFpbnRlci0+c2V0UGVuKFF0OjpsaWdodEdyYXkpOworICAgIHAu
cGFpbnRlci0+c2V0QnJ1c2goc2NhbGVDb2xvcik7CisgICAgcC5wYWludGVyLT5kcmF3UmVjdChs
ZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpOworCisgICAgaWYgKCFvLT5ub2RlKCkgfHwgIW8tPm5v
ZGUoKS0+aGFzVGFnTmFtZShpbnB1dFRhZykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IEhUTUxJbnB1dEVsZW1lbnQqIHNsaWRlciA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQq
PihvLT5ub2RlKCkpOworCisgICAgLy8gUG9zaXRpb24gdGhlIGlubmVyIHJlY3RhbmdsZQorICAg
IGhlaWdodCA9IChoZWlnaHQgLSAyKSAqIHNsaWRlci0+dmFsdWVBc051bWJlcigpOworICAgIHdp
ZHRoIC09IDI7CisgICAgbGVmdCArPSAxOworICAgIHRvcCArPSAoYi5oZWlnaHQoKSAtIGhlaWdo
dCkgLSAxOworCisgICAgLy8gRHJhdyB0aGUgaW5uZXIgcmVjdGFuZ2xlCisgICAgcC5wYWludGVy
LT5zZXRQZW4oUXQ6Ok5vUGVuKTsKKyAgICBwLnBhaW50ZXItPnNldEJydXNoKGdldE1lZGlhQ29u
dHJvbEZvcmVncm91bmRDb2xvcihvKSk7CisgICAgcC5wYWludGVyLT5kcmF3UmVjdChsZWZ0LCB0
b3AsIHdpZHRoLCBoZWlnaHQpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRl
clRoZW1lUXQ6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QgKm8sIGNv
bnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvICZwYWludEluZm8sIGNvbnN0IEludFJlY3QgJnIp
Cit7CisgICAgU3R5bGVQYWludGVyIHAodGhpcywgcGFpbnRJbmZvKTsKKyAgICBpZiAoIXAuaXNW
YWxpZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIE5vdGhpbmcgdG8gZHJhdyBo
ZXJlLCB0aGlzIGlzIGFsbCBkb25lIGluIHRoZSB0cmFjaworICAgIHJldHVybiBmYWxzZTsKK30K
KwogYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0
KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRS
ZWN0JiByKQogewogICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IGdldE1lZGlh
RWxlbWVudEZyb21SZW5kZXJPYmplY3Qobyk7CkBAIC05ODUsMTUgKzEwNjgsMzEgQEAgYm9vbCBS
ZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhU2xpZGVyVHJhYwogCiAgICAgcGFpbnRNZWRpYUJhY2tn
cm91bmQocC5wYWludGVyLCByKTsKIAorICAgICNpZiBRVF9WRVJTSU9OID49IDB4MDQwNzAwCisg
ICAgaWYgKE1lZGlhUGxheWVyKiBwbGF5ZXIgPSBtZWRpYUVsZW1lbnQtPnBsYXllcigpKSB7Cisg
ICAgICAgIC8vIEdldCB0aGUgYnVmZmVyZWQgcGFydHMgb2YgdGhlIG1lZGlhCisgICAgICAgIFBh
c3NSZWZQdHI8VGltZVJhbmdlcz4gYnVmZmVyZWQgPSBwbGF5ZXItPmJ1ZmZlcmVkKCk7CisgICAg
ICAgIGlmIChidWZmZXJlZC0+bGVuZ3RoKCkgPiAwICYmIHBsYXllci0+ZHVyYXRpb24oKSA8IHN0
ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpKSB7CisgICAgICAgICAgICAvLyBT
ZXQgdGhlIHRyYW5zZm9ybSBhbmQgYnJ1c2gKKyAgICAgICAgICAgIFdvcmxkTWF0cml4VHJhbnNm
b3JtZXIgdHJhbnNmb3JtZXIocC5wYWludGVyLCBvLCByKTsKKyAgICAgICAgICAgIHAucGFpbnRl
ci0+c2V0QnJ1c2goZ2V0TWVkaWFDb250cm9sRm9yZWdyb3VuZENvbG9yKCkpOworCisgICAgICAg
ICAgICAvLyBQYWludCBlYWNoIGJ1ZmZlcmVkIHNlY3Rpb24KKyAgICAgICAgICAgIEV4Y2VwdGlv
bkNvZGUgZXg7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGJ1ZmZlcmVkLT5sZW5n
dGgoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgZmxvYXQgc3RhcnRYID0gKGJ1ZmZlcmVkLT5z
dGFydChpLCBleCkgLyBwbGF5ZXItPmR1cmF0aW9uKCkpICogMTAwOworICAgICAgICAgICAgICAg
IGZsb2F0IHdpZHRoID0gKChidWZmZXJlZC0+ZW5kKGksIGV4KSAvIHBsYXllci0+ZHVyYXRpb24o
KSkgKiAxMDApIC0gc3RhcnRYOworICAgICAgICAgICAgICAgIHAucGFpbnRlci0+ZHJhd1JlY3Qo
c3RhcnRYLCAzNywgd2lkdGgsIDI2KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KyAgICAjZW5kaWYKKwogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZVF0
OjpwYWludE1lZGlhU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewotICAgIEhUTUxN
ZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IGdldE1lZGlhRWxlbWVudEZyb21SZW5kZXJPYmpl
Y3Qoby0+cGFyZW50KCkpOwotICAgIGlmICghbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KICAgICBTdHlsZVBhaW50ZXIgcCh0aGlzLCBwYWludEluZm8pOwogICAgIGlmICgh
cC5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTAxOSw2ICsxMTE4LDEzIEBA
IHZvaWQgUmVuZGVyVGhlbWVRdDo6YWRqdXN0U2xpZGVyVGh1bWJTaXoKICAgICAgICAgaW50IHBh
cmVudEhlaWdodCA9IHBhcmVudFN0eWxlLT5oZWlnaHQoKS52YWx1ZSgpOwogICAgICAgICBvLT5z
dHlsZSgpLT5zZXRXaWR0aChMZW5ndGgocGFyZW50SGVpZ2h0IC8gMywgRml4ZWQpKTsKICAgICAg
ICAgby0+c3R5bGUoKS0+c2V0SGVpZ2h0KExlbmd0aChwYXJlbnRIZWlnaHQsIEZpeGVkKSk7Cisg
ICAgfSBlbHNlIGlmIChwYXJ0ID09IE1lZGlhVm9sdW1lU2xpZGVyVGh1bWJQYXJ0KSB7CisgICAg
ICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IG8tPnBhcmVudCgpLT5zdHlsZSgpOworICAg
ICAgICBRX0FTU0VSVChwYXJlbnRTdHlsZSk7CisKKyAgICAgICAgaW50IHBhcmVudFdpZHRoID0g
cGFyZW50U3R5bGUtPndpZHRoKCkudmFsdWUoKTsKKyAgICAgICAgby0+c3R5bGUoKS0+c2V0SGVp
Z2h0KExlbmd0aChwYXJlbnRXaWR0aCAvIDMsIEZpeGVkKSk7CisgICAgICAgIG8tPnN0eWxlKCkt
PnNldFdpZHRoKExlbmd0aChwYXJlbnRXaWR0aCwgRml4ZWQpKTsKICAgICB9IGVsc2UgaWYgKHBh
cnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCB8fCBwYXJ0ID09IFNsaWRlclRodW1iVmVy
dGljYWxQYXJ0KSB7CiAgICAgICAgIFFTdHlsZU9wdGlvblNsaWRlciBvcHRpb247CiAgICAgICAg
IGlmIChwYXJ0ID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KQpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9x
dC9SZW5kZXJUaGVtZVF0LmgJKHJldmlzaW9uIDU0NDA3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9x
dC9SZW5kZXJUaGVtZVF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw3ICsxMjcsMTEgQEAgcHJv
dGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2Vla0ZvcndhcmRCdXR0b24oUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFTbGlkZXJUcmFjayhSZW5kZXJPYmplY3Qq
LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFJl
bmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotCisgICAgdmlydHVhbCBi
b29sIHBhaW50TWVkaWFDdXJyZW50VGltZShSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRN
ZWRpYVZvbHVtZVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlh
Vm9sdW1lU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBTdHJpbmcgZm9ybWF0TWVkaWFD
b250cm9sc0N1cnJlbnRUaW1lKGZsb2F0IGN1cnJlbnRUaW1lLCBmbG9hdCBkdXJhdGlvbikgY29u
c3Q7CisgICAgdmlydHVhbCBTdHJpbmcgZm9ybWF0TWVkaWFDb250cm9sc1JlbWFpbmluZ1RpbWUo
ZmxvYXQgY3VycmVudFRpbWUsIGZsb2F0IGR1cmF0aW9uKSBjb25zdDsKIHByaXZhdGU6CiAgICAg
SFRNTE1lZGlhRWxlbWVudCogZ2V0TWVkaWFFbGVtZW50RnJvbVJlbmRlck9iamVjdChSZW5kZXJP
YmplY3QqIG8pIGNvbnN0OwogICAgIHZvaWQgcGFpbnRNZWRpYUJhY2tncm91bmQoUVBhaW50ZXIq
IHBhaW50ZXIsIGNvbnN0IEludFJlY3QmIHIpIGNvbnN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48309</attachid>
            <date>2010-02-07 18:00:56 -0800</date>
            <delta_ts>2010-02-07 18:02:32 -0800</delta_ts>
            <desc>Updated Patch - No Private Headers</desc>
            <filename>webkit-qtmultimedia-integration.txt</filename>
            <type>text/plain</type>
            <size>91278</size>
            <attacher name="Nick Young">nicholas.young</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDQ3NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTI0IEBACisyMDEwLTAyLTA3ICBOaWNob2xhcyBZb3VuZyAgPG5pY2hvbGFzLnlv
dW5nQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBbUXRdIFN3aXRjaGluZyBmcm9tIFBob25vbiB0byBRdE11bHRpbWVkaWEgQmFja2Vu
ZCBmb3IgUXQgNC43CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zNDYzMQorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhpcyBwYXRjaCBvbmx5IGFmZmVj
dHMgbXVsdGltZWRpYSBiYWNrZW5kLgorCisgICAgICAgICogV2ViQ29yZS5wcm86IEJ1aWxkIGRl
cGVuZHMgb24gUXQgVmVyc2lvbi4KKyAgICAgICAgKiBjc3MvbWVkaWFDb250cm9sc1F0LmNzczog
VXBkYXRlZCBtZWRpYSBjb250cm9scy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRp
YVBsYXllci5jcHA6IERpZmZlcmVudCBiYWNrZW5kIGluY2x1ZGVkIGRlcGVuZGluZyBvbiBRdCB2
ZXJzaW9uLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0
ZVF0LmNwcDogQWRkZWQgbmV3IFF0TXVsdGltZWRpYSBCYWNrZW5kLgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlRGVmYXVsdDo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVEZWZhdWx0OjpzdXBwb3J0c0Z1bGxzY3JlZW4pOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpyZWdpc3Rlck1lZGlhRW5naW5lKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6Z2V0U3VwcG9ydGVkVHlwZXMpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpzdXBwb3J0c1R5cGUpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpNZWRpYVBsYXllclByaXZhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjp+TWVkaWFQbGF5ZXJQcml2YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6aGFzVmlkZW8pOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpoYXNBdWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGU6OmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlOjpjYW5jZWxMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZTo6cGxheSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnBhdXNlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6cGF1c2VkKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6c2Vlayk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGU6OnNlZWtpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlOjpkdXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGU6OmN1cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6
YnVmZmVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjptYXhUaW1l
U2Vla2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpieXRlc0xv
YWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnRvdGFsQnl0ZXMp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRSYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0Vm9sdW1lKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0TXV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlOjpuZXR3b3JrU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlOjpyZWFkeVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZTo6c2V0VmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGU6Om1lZGlhU3RhdHVzQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGU6OmhhbmRsZUVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZTo6ZHVyYXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZTo6dXBkYXRlU3RhdGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZURlZmF1bHQ6Ok1lZGlhUGxheWVyUHJpdmF0ZURlZmF1bHQpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlRGVmYXVsdDo6fk1lZGlhUGxheWVyUHJpdmF0ZURlZmF1bHQpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlRGVmYXVsdDo6bmF0dXJhbFNpemUp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlRGVmYXVsdDo6cGFpbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlRGVmYXVsdDo6cmVwYWludCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuaDogQWRk
ZWQgUVBhaW50ZXJWaWRlb1N1cmZhY2UgdG8gV2ViQ29yZSBhcyBhIHRlbXBvcmFyeSBzb2x1dGlv
biB0byB0aGUgdXNlIG9mIGEgcHJpdmF0ZSBRdCBoZWFkZXIuCisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGU6OmlzQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZTo6c3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZTo6cG9zaXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZTo6cmVwYWludCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvUVBh
aW50ZXJWaWRlb1N1cmZhY2UuY3BwOiBBZGRlZCBRUGFpbnRlclZpZGVvU3VyZmFjZSB0byBXZWJD
b3JlIGFzIGEgdGVtcG9yYXJ5IHNvbHV0aW9uIHRvIHRoZSB1c2Ugb2YgYSBwcml2YXRlIFF0IGhl
YWRlci4KKyAgICAgICAgKFdlYkNvcmU6OlFWaWRlb1N1cmZhY2VQYWludGVyOjp+UVZpZGVvU3Vy
ZmFjZVBhaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UVZpZGVvU3VyZmFjZVJhc3RlclBhaW50
ZXI6OlFWaWRlb1N1cmZhY2VSYXN0ZXJQYWludGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlFWaWRl
b1N1cmZhY2VSYXN0ZXJQYWludGVyOjpzdXBwb3J0ZWRQaXhlbEZvcm1hdHMpOgorICAgICAgICAo
V2ViQ29yZTo6UVZpZGVvU3VyZmFjZVJhc3RlclBhaW50ZXI6OmlzRm9ybWF0U3VwcG9ydGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OlFWaWRlb1N1cmZhY2VSYXN0ZXJQYWludGVyOjpzdGFydCk6Cisg
ICAgICAgIChXZWJDb3JlOjpRVmlkZW9TdXJmYWNlUmFzdGVyUGFpbnRlcjo6c3RvcCk6CisgICAg
ICAgIChXZWJDb3JlOjpRVmlkZW9TdXJmYWNlUmFzdGVyUGFpbnRlcjo6c2V0Q3VycmVudEZyYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OlFWaWRlb1N1cmZhY2VSYXN0ZXJQYWludGVyOjpwYWludCk6
CisgICAgICAgIChXZWJDb3JlOjpRVmlkZW9TdXJmYWNlUmFzdGVyUGFpbnRlcjo6dXBkYXRlQ29s
b3JzKToKKyAgICAgICAgKFdlYkNvcmU6OlFWaWRlb1N1cmZhY2VHTFBhaW50ZXI6OlFWaWRlb1N1
cmZhY2VHTFBhaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UVZpZGVvU3VyZmFjZUdMUGFpbnRl
cjo6flFWaWRlb1N1cmZhY2VHTFBhaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UVZpZGVvU3Vy
ZmFjZUdMUGFpbnRlcjo6c3VwcG9ydGVkUGl4ZWxGb3JtYXRzKToKKyAgICAgICAgKFdlYkNvcmU6
OlFWaWRlb1N1cmZhY2VHTFBhaW50ZXI6OmlzRm9ybWF0U3VwcG9ydGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OlFWaWRlb1N1cmZhY2VHTFBhaW50ZXI6OnNldEN1cnJlbnRGcmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpRVmlkZW9TdXJmYWNlR0xQYWludGVyOjp1cGRhdGVDb2xvcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6UVZpZGVvU3VyZmFjZUdMUGFpbnRlcjo6aW5pdFJnYlRleHR1cmVJbmZvKToK
KyAgICAgICAgKFdlYkNvcmU6OlFWaWRlb1N1cmZhY2VHTFBhaW50ZXI6OmluaXRZdXY0MjBQVGV4
dHVyZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6UVZpZGVvU3VyZmFjZUdMUGFpbnRlcjo6aW5p
dFl2MTJUZXh0dXJlSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpRVmlkZW9TdXJmYWNlQXJiRnBQ
YWludGVyOjpRVmlkZW9TdXJmYWNlQXJiRnBQYWludGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlFW
aWRlb1N1cmZhY2VBcmJGcFBhaW50ZXI6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlFWaWRl
b1N1cmZhY2VBcmJGcFBhaW50ZXI6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6UVZpZGVvU3Vy
ZmFjZUFyYkZwUGFpbnRlcjo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UVZpZGVvU3VyZmFj
ZUdsc2xQYWludGVyOjpRVmlkZW9TdXJmYWNlR2xzbFBhaW50ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UVZpZGVvU3VyZmFjZUdsc2xQYWludGVyOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpR
VmlkZW9TdXJmYWNlR2xzbFBhaW50ZXI6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6UVZpZGVv
U3VyZmFjZUdsc2xQYWludGVyOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpRUGFpbnRlclZp
ZGVvU3VyZmFjZTo6UVBhaW50ZXJWaWRlb1N1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6UVBh
aW50ZXJWaWRlb1N1cmZhY2U6On5RUGFpbnRlclZpZGVvU3VyZmFjZSk6CisgICAgICAgIChXZWJD
b3JlOjpRUGFpbnRlclZpZGVvU3VyZmFjZTo6c3VwcG9ydGVkUGl4ZWxGb3JtYXRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlFQYWludGVyVmlkZW9TdXJmYWNlOjppc0Zvcm1hdFN1cHBvcnRlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpRUGFpbnRlclZpZGVvU3VyZmFjZTo6c3RhcnQpOgorICAgICAgICAo
V2ViQ29yZTo6UVBhaW50ZXJWaWRlb1N1cmZhY2U6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6
UVBhaW50ZXJWaWRlb1N1cmZhY2U6OnByZXNlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UVBhaW50
ZXJWaWRlb1N1cmZhY2U6OmJyaWdodG5lc3MpOgorICAgICAgICAoV2ViQ29yZTo6UVBhaW50ZXJW
aWRlb1N1cmZhY2U6OnNldEJyaWdodG5lc3MpOgorICAgICAgICAoV2ViQ29yZTo6UVBhaW50ZXJW
aWRlb1N1cmZhY2U6OmNvbnRyYXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlFQYWludGVyVmlkZW9T
dXJmYWNlOjpzZXRDb250cmFzdCk6CisgICAgICAgIChXZWJDb3JlOjpRUGFpbnRlclZpZGVvU3Vy
ZmFjZTo6aHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlFQYWludGVyVmlkZW9TdXJmYWNlOjpzZXRI
dWUpOgorICAgICAgICAoV2ViQ29yZTo6UVBhaW50ZXJWaWRlb1N1cmZhY2U6OnNhdHVyYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6UVBhaW50ZXJWaWRlb1N1cmZhY2U6OnNldFNhdHVyYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6UVBhaW50ZXJWaWRlb1N1cmZhY2U6OmlzUmVhZHkpOgorICAg
ICAgICAoV2ViQ29yZTo6UVBhaW50ZXJWaWRlb1N1cmZhY2U6OnNldFJlYWR5KToKKyAgICAgICAg
KFdlYkNvcmU6OlFQYWludGVyVmlkZW9TdXJmYWNlOjpwYWludCk6CisgICAgICAgIChXZWJDb3Jl
OjpRUGFpbnRlclZpZGVvU3VyZmFjZTo6Z2xDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlFQ
YWludGVyVmlkZW9TdXJmYWNlOjpzZXRHTENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UVBh
aW50ZXJWaWRlb1N1cmZhY2U6OnN1cHBvcnRlZFNoYWRlclR5cGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OlFQYWludGVyVmlkZW9TdXJmYWNlOjpzaGFkZXJUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OlFQYWludGVyVmlkZW9TdXJmYWNlOjpzZXRTaGFkZXJUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OlFQYWludGVyVmlkZW9TdXJmYWNlOjpjcmVhdGVQYWludGVyKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9xdC9RUGFpbnRlclZpZGVvU3VyZmFjZS5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6Oik6IEFkZGVkIFFQYWludGVyVmlkZW9TdXJmYWNlIHRvIFdlYkNvcmUgYXMgYSB0ZW1w
b3Jhcnkgc29sdXRpb24gdG8gdGhlIHVzZSBvZiBhIHByaXZhdGUgUXQgaGVhZGVyLgorICAgICAg
ICAqIHBsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuY3BwOiBVcGRhdGVkIG1lZGlhIGNvbnRyb2xz
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYU11dGVCdXR0b24p
OiBDaGFuZ2VkIHN0eWxpbmcuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWlu
dE1lZGlhQ3VycmVudFRpbWUpOiBBZGRlZCBjdXJyZW50IHRpbWUgZGlzcGxheS4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OmZvcm1hdE1lZGlhQ29udHJvbHNDdXJyZW50VGltZSk6
IEFkZGVkIHRpbWUgZm9ybWF0dGluZy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6
OmZvcm1hdE1lZGlhQ29udHJvbHNSZW1haW5pbmdUaW1lKTogQWRkZWQgdGltZSBmb3JtYXR0aW5n
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVZvbHVtZVNsaWRl
clRyYWNrKTogVm9sdW1lIHNsaWRlciBhZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lUXQ6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUaHVtYik6IFZvbHVtZSBzbGlkZXIgYWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhU2xpZGVyVHJhY2sp
OiBVcGRhdGVkIGZvciBRdE11bHRpbWVkaWEuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVF0OjpwYWludE1lZGlhU2xpZGVyVGh1bWIpOiBEcm9wcGVkIGFuIHVubmVjZXNzYXJ5IGNoZWNr
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6YWRqdXN0U2xpZGVyVGh1bWJTaXpl
KTogSGFuZGxlIGEgbWlzc2luZyBjYXNlLgorICAgICAgICAqIHBsYXRmb3JtL3F0L1JlbmRlclRo
ZW1lUXQuaDogUmVpbXBsZW1lbnRlZCBhIGZldyBtb3JlIG1ldGhvZHMuCisKIDIwMTAtMDItMDcg
IERhbmllbCBCYXRlcyAgPGRiYXRlc0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiA1NDQ3NSkKKysrIFdlYkNvcmUvV2ViQ29yZS5w
cm8JKHdvcmtpbmcgY29weSkKQEAgLTEzMSwxMSArMTMxLDIyIEBAIG1hbWVvNXxzeW1iaWFufGVt
YmVkZGVkIHsKIAogaW5jbHVkZSgkJFBXRC8uLi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS5wcmkpCiAKLSMgRGlzYWJsZSBIVE1MNSBtZWRpYSBjb21waWxhdGlvbiBpZiBwaG9ub24gaXMg
dW5hdmFpbGFibGUKLSFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfVklERU89MSkgewotICAgICFj
b250YWlucyhRVF9DT05GSUcsIHBob25vbikgewotICAgICAgICBERUZJTkVTIC09IEVOQUJMRV9W
SURFTz0xCi0gICAgICAgIERFRklORVMgKz0gRU5BQkxFX1ZJREVPPTAKKyMgUXRNdWx0aW1lZGlh
IHNpbmNlIDQuNworZ3JlYXRlclRoYW4oUVRfTUlOT1JfVkVSU0lPTiwgNikgeworICAgICMgRGlz
YWJsZSBIVE1MNSBtZWRpYSBjb21waWxhdGlvbiBpZiBxdG11bHRpbWVkaWEgaXMgdW5hdmFpbGFi
bGUKKyAgICAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1ZJREVPPTEpIHsKKyAgICAgICAgIWNv
bnRhaW5zKFFUX0NPTkZJRywgbXVsdGltZWRpYSkgeworICAgICAgICAgICAgREVGSU5FUyAtPSBF
TkFCTEVfVklERU89MQorICAgICAgICAgICAgREVGSU5FUyArPSBFTkFCTEVfVklERU89MAorICAg
ICAgICB9CisgICAgfQorfSBlbHNlIHsKKyAgICAjIERpc2FibGUgSFRNTDUgbWVkaWEgY29tcGls
YXRpb24gaWYgcGhvbm9uIGlzIHVuYXZhaWxhYmxlCisgICAgIWNvbnRhaW5zKERFRklORVMsIEVO
QUJMRV9WSURFTz0xKSB7CisgICAgICAgICFjb250YWlucyhRVF9DT05GSUcsIHBob25vbikgewor
ICAgICAgICAgICAgREVGSU5FUyAtPSBFTkFCTEVfVklERU89MQorICAgICAgICAgICAgREVGSU5F
UyArPSBFTkFCTEVfVklERU89MAorICAgICAgICB9CiAgICAgfQogfQogCkBAIC0yMjk5LDIxICsy
MzEwLDM1IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9WSURFTz0xKSB7CiAgICAgICAgIHJl
bmRlcmluZy9SZW5kZXJNZWRpYS5jcHAgXAogICAgICAgICBiaW5kaW5ncy9qcy9KU0F1ZGlvQ29u
c3RydWN0b3IuY3BwCiAKLSAgICAgICAgSEVBREVSUyArPSBcCi0gICAgICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVQaG9ub24uaAorICAgICAgICAjIFF0TXVs
dGltZWRpYSBzaW5jZSA0LjcKKyAgICAgICAgZ3JlYXRlclRoYW4oUVRfTUlOT1JfVkVSU0lPTiwg
NikgeworICAgICAgICAgICAgSEVBREVSUyArPSBcCisgICAgICAgICAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuaCBcCisgICAgICAgICAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvUVBhaW50ZXJWaWRlb1N1cmZhY2UuaAorCisgICAgICAgICAgICBT
T1VSQ0VTICs9IFwKKyAgICAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBs
YXllclByaXZhdGVRdC5jcHAgXAorICAgICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0
L1FQYWludGVyVmlkZW9TdXJmYWNlLmNwcAogCi0gICAgICAgIFNPVVJDRVMgKz0gXAotICAgICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uLmNwcAor
ICAgICAgICAgICAgUVQgKz0gbXVsdGltZWRpYQorICAgICAgICAgICAgY29udGFpbnMoUVRfQ09O
RklHLCBvcGVuZ2wpOiBRVCArPSBvcGVuZ2wKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IEhFQURFUlMgKz0gXAorICAgICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlh
UGxheWVyUHJpdmF0ZVBob25vbi5oCisKKyAgICAgICAgICAgIFNPVVJDRVMgKz0gXAorICAgICAg
ICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVBob25vbi5j
cHAKIAotICAgICAgICAjIEFkZCBwaG9ub24gbWFudWFsbHkgdG8gcHJldmVudCBpdCBmcm9tIGNv
bWluZyBmaXJzdCBpbgotICAgICAgICAjIHRoZSBpbmNsdWRlIHBhdGhzLCBhcyBQaG9ub24ncyBw
YXRoLmggY29uZmxpY3RzIHdpdGgKLSAgICAgICAgIyBXZWJDb3JlJ3MgUGF0aC5oIG9uIGNhc2Ut
aW5zZW5zaXRpdmUgZmlsZXN5c3RlbXMuCi0gICAgICAgIHF0QWRkTGlicmFyeShwaG9ub24pCi0g
ICAgICAgIElOQ0xVREVQQVRIIC09ICQkUU1BS0VfSU5DRElSX1FUL3Bob25vbgotICAgICAgICBJ
TkNMVURFUEFUSCArPSAkJFFNQUtFX0lOQ0RJUl9RVC9waG9ub24KLSAgICAgICAgbWFjIHsKLSAg
ICAgICAgICAgIElOQ0xVREVQQVRIIC09ICQkUU1BS0VfTElCRElSX1FUL3Bob25vbi5mcmFtZXdv
cmsvSGVhZGVycwotICAgICAgICAgICAgSU5DTFVERVBBVEggKz0gJCRRTUFLRV9MSUJESVJfUVQv
cGhvbm9uLmZyYW1ld29yay9IZWFkZXJzCisgICAgICAgICAgICAjIEFkZCBwaG9ub24gbWFudWFs
bHkgdG8gcHJldmVudCBpdCBmcm9tIGNvbWluZyBmaXJzdCBpbgorICAgICAgICAgICAgIyB0aGUg
aW5jbHVkZSBwYXRocywgYXMgUGhvbm9uJ3MgcGF0aC5oIGNvbmZsaWN0cyB3aXRoCisgICAgICAg
ICAgICAjIFdlYkNvcmUncyBQYXRoLmggb24gY2FzZS1pbnNlbnNpdGl2ZSBmaWxlc3lzdGVtcy4K
KyAgICAgICAgICAgIHF0QWRkTGlicmFyeShwaG9ub24pCisgICAgICAgICAgICBJTkNMVURFUEFU
SCAtPSAkJFFNQUtFX0lOQ0RJUl9RVC9waG9ub24KKyAgICAgICAgICAgIElOQ0xVREVQQVRIICs9
ICQkUU1BS0VfSU5DRElSX1FUL3Bob25vbgorICAgICAgICAgICAgbWFjIHsKKyAgICAgICAgICAg
ICAgICBJTkNMVURFUEFUSCAtPSAkJFFNQUtFX0xJQkRJUl9RVC9waG9ub24uZnJhbWV3b3JrL0hl
YWRlcnMKKyAgICAgICAgICAgICAgICBJTkNMVURFUEFUSCArPSAkJFFNQUtFX0xJQkRJUl9RVC9w
aG9ub24uZnJhbWV3b3JrL0hlYWRlcnMKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiB9Cklu
ZGV4OiBXZWJDb3JlL2Nzcy9tZWRpYUNvbnRyb2xzUXQuY3NzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvY3NzL21lZGlhQ29udHJvbHNRdC5jc3MJKHJldmlzaW9uIDU0NDc1KQorKysgV2ViQ29yZS9j
c3MvbWVkaWFDb250cm9sc1F0LmNzcwkod29ya2luZyBjb3B5KQpAQCAtNTEsOCArNTEsNiBAQCB2
aWRlbzotd2Via2l0LWZ1bGwtcGFnZS1tZWRpYTo6LXdlYmtpdC1tCiB9CiAKIGF1ZGlvOjotd2Vi
a2l0LW1lZGlhLWNvbnRyb2xzLW11dGUtYnV0dG9uLCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250
cm9scy1tdXRlLWJ1dHRvbiB7Ci0gICAgbGVmdDogYXV0bzsKLSAgICByaWdodDogNXB4OwogICAg
IHdpZHRoOiAxMnB4OwogICAgIGhlaWdodDogMTJweDsKICAgICBwYWRkaW5nOiA2cHg7CkBAIC02
MCw3ICs1OCw2IEBAIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLW11dGUtYnV0dG8KIH0K
IAogYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtcGxheS1idXR0b24sIHZpZGVvOjotd2Vi
a2l0LW1lZGlhLWNvbnRyb2xzLXBsYXktYnV0dG9uIHsKLSAgICBsZWZ0OiA1cHg7CiAgICAgd2lk
dGg6IDlweDsKICAgICBoZWlnaHQ6IDEycHg7CiAgICAgcGFkZGluZzogNnB4IDEycHggNnB4IDEx
cHg7CkBAIC03Miw3ICs2OSwyMCBAQCBhdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1l
bGluZS1jCiB9CiAKIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWN1cnJlbnQtdGltZS1k
aXNwbGF5LCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1jdXJyZW50LXRpbWUtZGlzcGxh
eSB7Ci0gICAgZGlzcGxheTogbm9uZTsKKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG1lZGlhLWN1
cnJlbnQtdGltZS1kaXNwbGF5OworICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CisgICAg
ZGlzcGxheTogaW5saW5lLWJsb2NrOworICAgIGhlaWdodDogMTJweDsKKyAgICBwYWRkaW5nOiA2
cHg7CisgICAgbWFyZ2luOiA1cHggM3B4OworCisgICAgb3ZlcmZsb3c6IGhpZGRlbjsKKyAgICBj
dXJzb3I6IGRlZmF1bHQ7CisKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgZm9udC1zaXpl
OiAxMHB4OworICAgIGZvbnQtZmFtaWx5OiBWZXJkYW5hOworICAgIGZvbnQtd2VpZ2h0OiBib2xk
OwogfQogCiBhdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lLXJlbWFpbmluZy1kaXNw
bGF5LCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lLXJlbWFpbmluZy1kaXNwbGF5
IHsKQEAgLTgwLDUxICs5MCwzOCBAQCBhdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1l
LXJlbWFpCiB9CiAKIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXRpbWVsaW5lLCB2aWRl
bzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lbGluZSB7Ci0gICAgbGVmdDogNDJweDsKLSAg
ICByaWdodDogMzRweDsKICAgICBoZWlnaHQ6IDEycHg7CiAgICAgcGFkZGluZzogNnB4IDhweDsK
LSAgICBtYXJnaW46IDVweCAwcHg7CisgICAgbWFyZ2luOiA1cHggM3B4OwogfQogCiBhdWRpbzo6
LXdlYmtpdC1tZWRpYS1jb250cm9scy12b2x1bWUtc2xpZGVyLWNvbnRhaW5lciwgdmlkZW86Oi13
ZWJraXQtbWVkaWEtY29udHJvbHMtdm9sdW1lLXNsaWRlci1jb250YWluZXIgewotICAgIGRpc3Bs
YXk6IG5vbmU7CisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBtZWRpYS12b2x1bWUtc2xpZGVyLWNv
bnRhaW5lcjsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgaGVpZ2h0OiAxMDNweDsKKyAg
ICB3aWR0aDogMjRweDsKIH0KIAogYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdm9sdW1l
LXNsaWRlciwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdm9sdW1lLXNsaWRlciB7Ci0g
ICAgZGlzcGxheTogbm9uZTsKKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG1lZGlhLXZvbHVtZS1z
bGlkZXI7CisgICAgZGlzcGxheTogaW5saW5lOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKwor
ICAgIHdpZHRoOiAxMnB4OworICAgIHBhZGRpbmc6IDZweDsKKyAgICBoZWlnaHQ6IDg4cHg7Cisg
ICAgbWFyZ2luOiAwIDAgM3B4IDA7CiB9CiAKIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xz
LXNlZWstYmFjay1idXR0b24sIHZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXNlZWstYmFj
ay1idXR0b24gewotICAgIC8qIFNpbmNlIE1lZGlhQ29udHJvbEVsZW1lbnRzIGFyZSBhbHdheXMg
Y3JlYXRlZCB3aXRoIGEgcmVuZGVyZXIgd2UgaGF2ZSB0byBoaWRlCi0gICAgICAgdGhlIGNvbnRy
b2xzIHdlIGRvbid0IHVzZSwgc28gdGhleSBkb24ndCBtZXNzIHVwIGFjdGl2YXRpb24gYW5kIGV2
ZW50IGhhbmRsaW5nICovCi0gICAgbGVmdDogMHB4OwotICAgIHRvcDogMHB4OwotICAgIHdpZHRo
OiAwcHg7Ci0gICAgaGVpZ2h0OiAwcHg7Ci0KICAgICBkaXNwbGF5OiBub25lOwogfQogCiBhdWRp
bzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1zZWVrLWZvcndhcmQtYnV0dG9uLCB2aWRlbzo6LXdl
YmtpdC1tZWRpYS1jb250cm9scy1zZWVrLWZvcndhcmQtYnV0dG9uIHsKLSAgICAvKiBTaW5jZSBN
ZWRpYUNvbnRyb2xFbGVtZW50cyBhcmUgYWx3YXlzIGNyZWF0ZWQgd2l0aCBhIHJlbmRlcmVyIHdl
IGhhdmUgdG8gaGlkZQotICAgICAgIHRoZSBjb250cm9scyB3ZSBkb24ndCB1c2UsIHNvIHRoZXkg
ZG9uJ3QgbWVzcyB1cCBhY3RpdmF0aW9uIGFuZCBldmVudCBoYW5kbGluZyAqLwotICAgIGxlZnQ6
IDBweDsKLSAgICB0b3A6IDBweDsKLSAgICB3aWR0aDogMHB4OwotICAgIGhlaWdodDogMHB4Owot
CiAgICAgZGlzcGxheTogbm9uZTsKIH0KIAogYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMt
ZnVsbHNjcmVlbi1idXR0b24sIHZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWZ1bGxzY3Jl
ZW4tYnV0dG9uIHsKLSAgICAvKiBTaW5jZSBNZWRpYUNvbnRyb2xFbGVtZW50cyBhcmUgYWx3YXlz
IGNyZWF0ZWQgd2l0aCBhIHJlbmRlcmVyIHdlIGhhdmUgdG8gaGlkZQotICAgICAgIHRoZSBjb250
cm9scyB3ZSBkb24ndCB1c2UsIHNvIHRoZXkgZG9uJ3QgbWVzcyB1cCBhY3RpdmF0aW9uIGFuZCBl
dmVudCBoYW5kbGluZyAqLwotICAgIGxlZnQ6IDBweDsKLSAgICB0b3A6IDBweDsKLSAgICB3aWR0
aDogMHB4OwotICAgIGhlaWdodDogMHB4OwotCiAgICAgZGlzcGxheTogbm9uZTsKIH0KIApAQCAt
MTM2LDMgKzEzMyw3IEBAIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXJldHVybi10by0K
ICAgICBkaXNwbGF5OiBub25lOwogfQogCithdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10
b2dnbGUtY2xvc2VkLWNhcHRpb25zLWJ1dHRvbiwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJv
bHMtdG9nZ2xlLWNsb3NlZC1jYXB0aW9ucy1idXR0b24geworICAgIGRpc3BsYXk6IG5vbmU7Cit9
CisKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCShyZXZp
c2lvbiA1NDQ3NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNywxMCBAQAogI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiVGltZVJhbmdlcy5oIgogCisjaWYgUExBVEZPUk0oUVQpCisjaW5jbHVkZSA8
UXRHbG9iYWw+CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKE1BQykKICNpbmNsdWRlICJNZWRpYVBs
YXllclByaXZhdGVRVEtpdC5oIgogI2VsaWYgT1MoV0lOQ0UpICYmICFQTEFURk9STShRVCkKQEAg
LTQ2LDcgKzUwLDExIEBACiAjZWxpZiBQTEFURk9STShHVEspCiAjaW5jbHVkZSAiTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyLmgiCiAjZWxpZiBQTEFURk9STShRVCkKLSNpbmNsdWRlICJNZWRp
YVBsYXllclByaXZhdGVQaG9ub24uaCIKKyAgICAjaWYgUVRfVkVSU0lPTiA8IDB4MDQwNzAwCisg
ICAgI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZVBob25vbi5oIgorICAgICNlbHNlCisgICAg
I2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZVF0LmgiCisgICAgI2VuZGlmCiAjZWxpZiBQTEFU
Rk9STShDSFJPTUlVTSkKICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVDaHJvbWl1bS5oIgog
I2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJp
dmF0ZVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01l
ZGlhUGxheWVyUHJpdmF0ZVF0LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDUwMCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgICAgQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlUXQuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNp
bmNsdWRlICJGcmFtZUxvYWRlckNsaWVudFF0LmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
KyNpbmNsdWRlICJRUGFpbnRlclZpZGVvU3VyZmFjZS5oIgorI2luY2x1ZGUgIlRpbWVSYW5nZXMu
aCIKKyNpbmNsdWRlICJXaWRnZXQuaCIKKworI2luY2x1ZGUgInF3ZWJmcmFtZS5oIgorI2luY2x1
ZGUgInF3ZWJwYWdlLmgiCisKKyNpbmNsdWRlIDxRTmV0d29ya0FjY2Vzc01hbmFnZXI+CisjaW5j
bHVkZSA8UU5ldHdvcmtDb29raWVKYXI+CisjaW5jbHVkZSA8UU5ldHdvcmtSZXF1ZXN0PgorI2lu
Y2x1ZGUgPFFQYWludGVyPgorI2luY2x1ZGUgPFFSZWN0PgorI2luY2x1ZGUgPFFUaW1lPgorI2lu
Y2x1ZGUgPFFVcmw+CisjaW5jbHVkZSA8UVZpZGVvU3VyZmFjZUZvcm1hdD4KKyNpbmNsdWRlIDxs
aW1pdHM+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKworI2lmICFkZWZpbmVkKFFUX05PX09Q
RU5HTCkgJiYgIWRlZmluZWQoUVRfT1BFTkdMX0VTXzFfQ0wpICYmICFkZWZpbmVkKFFUX09QRU5H
TF9FU18xKQorI2luY2x1ZGUgPFFHTENvbnRleHQ+CisjZW5kaWYKKworLy8gUXQgTXVsdGltZWRp
YSBJbmNsdWRlcworI2luY2x1ZGUgPFFNZWRpYVNlcnZpY2U+CisjaW5jbHVkZSA8UVZpZGVvT3V0
cHV0Q29udHJvbD4KKyNpbmNsdWRlIDxRVmlkZW9SZW5kZXJlckNvbnRyb2w+CisjaW5jbHVkZSA8
UVZpZGVvV2luZG93Q29udHJvbD4KKwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBNZWRpYVBsYXllclByaXZhdGVEZWZhdWx0IDogcHVibGljIE1l
ZGlhUGxheWVyUHJpdmF0ZSB7CitwdWJsaWM6CisgICAgSW50U2l6ZSBuYXR1cmFsU2l6ZSgpIGNv
bnN0OworICAgIHZvaWQgc2V0U2l6ZShjb25zdCBJbnRTaXplJikge30KKyAgICB2b2lkIHBhaW50
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKKyAgICBib29sIHN1cHBvcnRzRnVs
bHNjcmVlbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKK3ByaXZhdGUgc2xvdHM6CisgICAg
dm9pZCByZXBhaW50KCk7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIE1lZGlhUGxheWVy
UHJpdmF0ZTsKKyAgICBNZWRpYVBsYXllclByaXZhdGVEZWZhdWx0KE1lZGlhUGxheWVyKik7Cisg
ICAgfk1lZGlhUGxheWVyUHJpdmF0ZURlZmF1bHQoKTsKKworICAgIFFQYWludGVyVmlkZW9TdXJm
YWNlKiBtX3ZpZGVvU3VyZmFjZTsKKyAgICBRVmlkZW9PdXRwdXRDb250cm9sKiBtX291dHB1dENv
bnRyb2w7CisgICAgUVZpZGVvUmVuZGVyZXJDb250cm9sKiBtX3JlbmRlcmVyQ29udHJvbDsKKyAg
ICBRVmlkZW9XaW5kb3dDb250cm9sKiBtX3dpbmRvd0NvbnRyb2w7CisKKyAgICBib29sIG1faXNB
Y3RpdmU7Cit9OworCitNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UqIE1lZGlhUGxheWVyUHJp
dmF0ZTo6Y3JlYXRlKE1lZGlhUGxheWVyKiBwbGF5ZXIpCit7CisgICAgcmV0dXJuIG5ldyBNZWRp
YVBsYXllclByaXZhdGVEZWZhdWx0KHBsYXllcik7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlOjpyZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyIHJlZ2lzdHJhcikK
K3sKKyAgICByZWdpc3RyYXIoY3JlYXRlLCBnZXRTdXBwb3J0ZWRUeXBlcywgc3VwcG9ydHNUeXBl
KTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmdldFN1cHBvcnRlZFR5cGVzKEhhc2hT
ZXQ8U3RyaW5nPiAmc3VwcG9ydGVkKQoreworICAgIFFTdHJpbmdMaXN0IHR5cGVzID0gUU1lZGlh
UGxheWVyOjpzdXBwb3J0ZWRNaW1lVHlwZXMoKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
dHlwZXMuc2l6ZSgpOyBpKyspCisgICAgICAgIHN1cHBvcnRlZC5hZGQodHlwZXMuYXQoaSkpOwor
fQorCitNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyUHJpdmF0ZTo6c3VwcG9y
dHNUeXBlKGNvbnN0IFN0cmluZyYgbWltZSwgY29uc3QgU3RyaW5nJiBjb2RlYykKK3sKKyAgICBp
ZiAoUU1lZGlhUGxheWVyOjpoYXNTdXBwb3J0KG1pbWUsIFFTdHJpbmdMaXN0KGNvZGVjKSkgPj0g
UXRNZWRpYTo6UHJvYmFibHlTdXBwb3J0ZWQpCisgICAgICAgIHJldHVybiBNZWRpYVBsYXllcjo6
SXNTdXBwb3J0ZWQ7CisKKyAgICByZXR1cm4gTWVkaWFQbGF5ZXI6Ok1heUJlU3VwcG9ydGVkOwor
fQorCitNZWRpYVBsYXllclByaXZhdGU6Ok1lZGlhUGxheWVyUHJpdmF0ZShNZWRpYVBsYXllciog
cGxheWVyKQorICAgIDogbV9wbGF5ZXIocGxheWVyKQorICAgICwgbV9tZWRpYVBsYXllcihuZXcg
UU1lZGlhUGxheWVyKQorICAgICwgbV9uZXR3b3JrU3RhdGUoTWVkaWFQbGF5ZXI6OkVtcHR5KQor
ICAgICwgbV9yZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpIYXZlTm90aGluZykKKyAgICAsIG1faXNW
aXNpYmxlKGZhbHNlKQoreworICAgIC8vIFNpZ25hbCBIYW5kbGVycworICAgIGNvbm5lY3QobV9t
ZWRpYVBsYXllciwgU0lHTkFMKG1lZGlhU3RhdHVzQ2hhbmdlZChRTWVkaWFQbGF5ZXI6Ok1lZGlh
U3RhdHVzKSksCisgICAgICAgICAgICB0aGlzLCBTTE9UKG1lZGlhU3RhdHVzQ2hhbmdlZChRTWVk
aWFQbGF5ZXI6Ok1lZGlhU3RhdHVzKSkpOworICAgIGNvbm5lY3QobV9tZWRpYVBsYXllciwgU0lH
TkFMKHN0YXRlQ2hhbmdlZChRTWVkaWFQbGF5ZXI6OlN0YXRlKSksCisgICAgICAgICAgICB0aGlz
LCBTTE9UKHN0YXRlQ2hhbmdlZChRTWVkaWFQbGF5ZXI6OlN0YXRlKSkpOworICAgIGNvbm5lY3Qo
bV9tZWRpYVBsYXllciwgU0lHTkFMKGVycm9yKFFNZWRpYVBsYXllcjo6RXJyb3IpKSwKKyAgICAg
ICAgICAgIHRoaXMsIFNMT1QoaGFuZGxlRXJyb3IoUU1lZGlhUGxheWVyOjpFcnJvcikpKTsKKyAg
ICBjb25uZWN0KG1fbWVkaWFQbGF5ZXIsIFNJR05BTChkdXJhdGlvbkNoYW5nZWQocWludDY0KSks
CisgICAgICAgICAgICB0aGlzLCBTTE9UKGR1cmF0aW9uQ2hhbmdlZChxaW50NjQpKSk7CisgICAg
Y29ubmVjdChtX21lZGlhUGxheWVyLCBTSUdOQUwocG9zaXRpb25DaGFuZ2VkKHFpbnQ2NCkpLAor
ICAgICAgICAgICAgdGhpcywgU0xPVChwb3NpdGlvbkNoYW5nZWQocWludDY0KSkpOworCisgICAg
Ly8gR3JhYiB0aGUgcGxheWVyIGNvbnRyb2wKKyAgICBpZiAobV9tZWRpYVBsYXllcikgeworICAg
ICAgICBRTWVkaWFTZXJ2aWNlKiBzZXJ2aWNlID0gbV9tZWRpYVBsYXllci0+c2VydmljZSgpOwor
ICAgICAgICBpZiAoc2VydmljZSkgeworICAgICAgICAgICAgbV9tZWRpYVBsYXllckNvbnRyb2wg
PSBxb2JqZWN0X2Nhc3Q8UU1lZGlhUGxheWVyQ29udHJvbCAqPigKKyAgICAgICAgICAgICAgICAg
ICAgc2VydmljZS0+Y29udHJvbChRTWVkaWFQbGF5ZXJDb250cm9sX2lpZCkpOworICAgICAgICB9
CisgICAgfQorfQorCitNZWRpYVBsYXllclByaXZhdGU6On5NZWRpYVBsYXllclByaXZhdGUoKQor
eworICAgIGRlbGV0ZSBtX21lZGlhUGxheWVyOworICAgIG1fbWVkaWFQbGF5ZXIgPSAwOworfQor
Citib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6aGFzVmlkZW8oKSBjb25zdAoreworICAgIC8vIHJl
dHVybiBtX21lZGlhUGxheWVyLT5pc1ZpZGVvQXZhaWxhYmxlKCk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpoYXNBdWRpbygpIGNvbnN0Cit7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpsb2FkKGNvbnN0IFN0
cmluZyYgdXJsKQoreworICAgIC8vIFdlIGFyZSBub3cgbG9hZGluZworICAgIGlmIChtX25ldHdv
cmtTdGF0ZSAhPSBNZWRpYVBsYXllcjo6TG9hZGluZykgeworICAgICAgICBtX25ldHdvcmtTdGF0
ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOworICAgICAgICBtX3BsYXllci0+bmV0d29ya1N0YXRl
Q2hhbmdlZCgpOworICAgIH0KKworICAgIC8vIEFuZCB3ZSBkb24ndCBoYXZlIGFueSBkYXRhIHll
dAorICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nKSB7Cisg
ICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKKyAgICAgICAg
bV9wbGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7CisgICAgfQorCisgICAgY29uc3QgUVVybCBy
VXJsKHVybCk7CisgICAgY29uc3QgUVN0cmluZyBzY2hlbWUgPSByVXJsLnNjaGVtZSgpLnRvTG93
ZXIoKTsKKworICAgIC8vIENvbnN0cnVjdCB0aGUgbWVkaWEgY29udGVudCB3aXRoIGEgbmV0d29y
ayByZXF1ZXN0IGlmIHRoZSByZXNvdXJjZSBpcyBodHRwW3NdCisgICAgaWYgKHNjaGVtZSA9PSAi
aHR0cCIgfHwgc2NoZW1lID09ICJodHRwcyIpIHsKKyAgICAgICAgUU5ldHdvcmtSZXF1ZXN0IHJl
cXVlc3QgPSBRTmV0d29ya1JlcXVlc3QoclVybCk7CisKKyAgICAgICAgLy8gR3JhYiB0aGUgY3Vy
cmVudCBkb2N1bWVudCBhbmQgbmV0d29yayBtYW5hZ2VyCisgICAgICAgIEZyYW1lKiBmcmFtZSA9
IG1fcGxheWVyLT5mcmFtZVZpZXcoKSA/IG1fcGxheWVyLT5mcmFtZVZpZXcoKS0+ZnJhbWUoKSA6
IDA7CisgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lID8gZnJhbWUtPmRvY3VtZW50
KCkgOiAwOworICAgICAgICBGcmFtZUxvYWRlckNsaWVudFF0KiBmcmFtZUxvYWRlciA9ICBmcmFt
ZSA/IHN0YXRpY19jYXN0PEZyYW1lTG9hZGVyQ2xpZW50UXQqPihmcmFtZS0+bG9hZGVyKCktPmNs
aWVudCgpKSA6IDA7CisgICAgICAgIFFOZXR3b3JrQWNjZXNzTWFuYWdlciogbWFuYWdlciA9IGZy
YW1lTG9hZGVyID8gZnJhbWVMb2FkZXItPndlYkZyYW1lKCktPnBhZ2UoKS0+bmV0d29ya0FjY2Vz
c01hbmFnZXIoKSA6IDA7CisKKyAgICAgICAgaWYgKGRvY3VtZW50ICYmIG1hbmFnZXIpIHsKKyAg
ICAgICAgICAgIC8vIFNldCB0aGUgY29va2llcworICAgICAgICAgICAgUU5ldHdvcmtDb29raWVK
YXIqIGNvb2tpZXMgPSBtYW5hZ2VyLT5jb29raWVKYXIoKTsKKyAgICAgICAgICAgIHJlcXVlc3Qu
c2V0SGVhZGVyKFFOZXR3b3JrUmVxdWVzdDo6Q29va2llSGVhZGVyLCBxVmFyaWFudEZyb21WYWx1
ZShjb29raWVzLT5jb29raWVzRm9yVXJsKHJVcmwpKSk7CisKKyAgICAgICAgICAgIC8vIFNldCB0
aGUgcmVmZmVyZXIKKyAgICAgICAgICAgIHJlcXVlc3Quc2V0UmF3SGVhZGVyKCJSZWZmZXJlciIs
IGRvY3VtZW50LT5kb2N1bWVudFVSSSgpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgICAgICAgICAv
LyBTZXQgdGhlIHVzZXIgYWdlbnQKKyAgICAgICAgICAgIHJlcXVlc3Quc2V0UmF3SGVhZGVyKCJV
c2VyLUFnZW50IiwgZnJhbWVMb2FkZXItPnVzZXJBZ2VudChyVXJsKS51dGY4KCkuZGF0YSgpKTsK
KyAgICAgICAgfQorCisgICAgICAgIG1fbWVkaWFQbGF5ZXItPnNldE1lZGlhKFFNZWRpYUNvbnRl
bnQocmVxdWVzdCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE90aGVyd2lzZSwganVzdCB1
c2UgdGhlIFVSTAorICAgICAgICBtX21lZGlhUGxheWVyLT5zZXRNZWRpYShRTWVkaWFDb250ZW50
KHJVcmwpKTsKKyAgICB9Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpjYW5jZWxMb2Fk
KCkKK3sKKyAgICBtX21lZGlhUGxheWVyLT5zZXRNZWRpYShRTWVkaWFDb250ZW50KCkpOworICAg
IHVwZGF0ZVN0YXRlcygpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGxheSgpCit7
CisgICAgaWYgKG1fbWVkaWFQbGF5ZXItPnN0YXRlKCkgIT0gUU1lZGlhUGxheWVyOjpQbGF5aW5n
U3RhdGUpCisgICAgICAgIG1fbWVkaWFQbGF5ZXItPnBsYXkoKTsKK30KKwordm9pZCBNZWRpYVBs
YXllclByaXZhdGU6OnBhdXNlKCkKK3sKKyAgICBpZiAobV9tZWRpYVBsYXllci0+c3RhdGUoKSA9
PSBRTWVkaWFQbGF5ZXI6OlBsYXlpbmdTdGF0ZSkKKyAgICAgICAgbV9tZWRpYVBsYXllci0+cGF1
c2UoKTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGU6OnBhdXNlZCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fbWVkaWFQbGF5ZXItPnN0YXRlKCkgIT0gUU1lZGlhUGxheWVyOjpQbGF5aW5n
U3RhdGU7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZWVrKGZsb2F0IHBvc2l0aW9u
KQoreworICAgIGlmICghbV9tZWRpYVBsYXllci0+aXNTZWVrYWJsZSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAobV9tZWRpYVBsYXllckNvbnRyb2wgJiYgIW1fbWVkaWFQbGF5ZXJDb250
cm9sLT5hdmFpbGFibGVQbGF5YmFja1JhbmdlcygpLmNvbnRhaW5zKHBvc2l0aW9uICogMTAwMCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChwb3NpdGlvbiA+IGR1cmF0aW9uKCkpCisgICAg
ICAgIHBvc2l0aW9uID0gZHVyYXRpb24oKTsKKworICAgIG1fbWVkaWFQbGF5ZXItPnNldFBvc2l0
aW9uKHBvc2l0aW9uICogMTAwMC4wZik7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpz
ZWVraW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Zsb2F0IE1lZGlhUGxh
eWVyUHJpdmF0ZTo6ZHVyYXRpb24oKSBjb25zdAoreworICAgIGlmIChtX3JlYWR5U3RhdGUgPCBN
ZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRhKQorICAgICAgICByZXR1cm4gMC4wZjsKKworICAgIGZs
b2F0IGR1cmF0aW9uID0gbV9tZWRpYVBsYXllci0+ZHVyYXRpb24oKSAvIDEwMDAuMGY7CisKKyAg
ICAvLyBXZSBhcmUgc3RyZWFtaW5nCisgICAgaWYgKGR1cmF0aW9uIDw9IDAuMGYpCisgICAgICAg
IGR1cmF0aW9uID0gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCk7CisKKyAg
ICByZXR1cm4gZHVyYXRpb247Cit9CisKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZTo6Y3VycmVu
dFRpbWUoKSBjb25zdAoreworICAgIGZsb2F0IGN1cnJlbnRUaW1lID0gbV9tZWRpYVBsYXllci0+
cG9zaXRpb24oKSAvIDEwMDAuMGY7CisgICAgcmV0dXJuIGN1cnJlbnRUaW1lOworfQorCitQYXNz
UmVmUHRyPFRpbWVSYW5nZXM+IE1lZGlhUGxheWVyUHJpdmF0ZTo6YnVmZmVyZWQoKSBjb25zdAor
eworICAgIFJlZlB0cjxUaW1lUmFuZ2VzPiBidWZmZXJlZCA9IFRpbWVSYW5nZXM6OmNyZWF0ZSgp
OworCisgICAgaWYgKCFtX21lZGlhUGxheWVyQ29udHJvbCkKKyAgICAgICAgcmV0dXJuIGJ1ZmZl
cmVkOworCisgICAgUU1lZGlhVGltZVJhbmdlIHBsYXliYWNrUmFuZ2VzID0gbV9tZWRpYVBsYXll
ckNvbnRyb2wtPmF2YWlsYWJsZVBsYXliYWNrUmFuZ2VzKCk7CisKKyAgICBmb3JlYWNoIChjb25z
dCBRTWVkaWFUaW1lSW50ZXJ2YWwgaW50ZXJ2YWwsIHBsYXliYWNrUmFuZ2VzLmludGVydmFscygp
KSB7CisgICAgICAgIGZsb2F0IHJhbmdlTWluID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGludGVydmFs
LnN0YXJ0KCkpIC8gMTAwMC4wZjsKKyAgICAgICAgZmxvYXQgcmFuZ2VNYXggPSBzdGF0aWNfY2Fz
dDxmbG9hdD4oaW50ZXJ2YWwuZW5kKCkpIC8gMTAwMC4wZjsKKyAgICAgICAgYnVmZmVyZWQtPmFk
ZChyYW5nZU1pbiwgcmFuZ2VNYXgpOworICAgIH0KKworICAgIHJldHVybiBidWZmZXJlZC5yZWxl
YXNlKCk7Cit9CisKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZTo6bWF4VGltZVNlZWthYmxlKCkg
Y29uc3QKK3sKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXJDb250cm9sKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obV9tZWRpYVBsYXllckNvbnRyb2wt
PmF2YWlsYWJsZVBsYXliYWNrUmFuZ2VzKCkubGF0ZXN0VGltZSgpKSAvIDEwMDAuMGY7Cit9CisK
K3Vuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Ynl0ZXNMb2FkZWQoKSBjb25zdAoreworICAg
IHVuc2lnbmVkIHBlcmNlbnRhZ2UgPSBtX21lZGlhUGxheWVyLT5idWZmZXJTdGF0dXMoKTsKKwor
ICAgIGlmIChwZXJjZW50YWdlID09IDEwMCkgeworICAgICAgICBpZiAobV9uZXR3b3JrU3RhdGUg
IT0gTWVkaWFQbGF5ZXI6OklkbGUpIHsKKyAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVk
aWFQbGF5ZXI6OklkbGU7CisgICAgICAgICAgICBtX3BsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdl
ZCgpOworICAgICAgICB9CisgICAgICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gTWVkaWFQbGF5ZXI6
OkhhdmVFbm91Z2hEYXRhKSB7CisgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXll
cjo6SGF2ZUVub3VnaERhdGE7CisgICAgICAgICAgICBtX3BsYXllci0+cmVhZHlTdGF0ZUNoYW5n
ZWQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFFMYXRpbjFTdHJpbmcgYmxLZXkoImJ5dGVz
LWxvYWRlZCIpOworICAgIGlmIChtX21lZGlhUGxheWVyLT5hdmFpbGFibGVFeHRlbmRlZE1ldGFE
YXRhKCkuY29udGFpbnMoYmxLZXkpKQorICAgICAgICByZXR1cm4gbV9tZWRpYVBsYXllci0+ZXh0
ZW5kZWRNZXRhRGF0YShibEtleSkudG9JbnQoKTsKKworICAgIHJldHVybiBwZXJjZW50YWdlOwor
fQorCit1bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGU6OnRvdGFsQnl0ZXMoKSBjb25zdAorewor
ICAgIGlmIChtX21lZGlhUGxheWVyLT5hdmFpbGFibGVNZXRhRGF0YSgpLmNvbnRhaW5zKFF0TWVk
aWE6OlNpemUpKQorICAgICAgICByZXR1cm4gbV9tZWRpYVBsYXllci0+bWV0YURhdGEoUXRNZWRp
YTo6U2l6ZSkudG9JbnQoKTsKKworICAgIHJldHVybiAxMDA7Cit9CisKK3ZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlOjpzZXRSYXRlKGZsb2F0IHJhdGUpCit7CisgICAgbV9tZWRpYVBsYXllci0+c2V0
UGxheWJhY2tSYXRlKHJhdGUpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0Vm9s
dW1lKGZsb2F0IHZvbHVtZSkKK3sKKyAgICBtX21lZGlhUGxheWVyLT5zZXRWb2x1bWUoc3RhdGlj
X2Nhc3Q8aW50Pih2b2x1bWUgKiAxMDAuMCkpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZTo6c2V0TXV0ZWQoYm9vbCBtdXRlZCkKK3sKKyAgICBtX21lZGlhUGxheWVyLT5zZXRNdXRlZCht
dXRlZCk7Cit9CisKK01lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgTWVkaWFQbGF5ZXJQcml2YXRl
OjpuZXR3b3JrU3RhdGUoKSBjb25zdAoreworICAgIHJldHVybiBtX25ldHdvcmtTdGF0ZTsKK30K
KworTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgTWVkaWFQbGF5ZXJQcml2YXRlOjpyZWFkeVN0YXRl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZWFkeVN0YXRlOworfQorCit2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZTo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCit7CisgICAgbV9pc1Zpc2libGUg
PSB2aXNpYmxlOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6bWVkaWFTdGF0dXNDaGFu
Z2VkKFFNZWRpYVBsYXllcjo6TWVkaWFTdGF0dXMpCit7CisgICAgdXBkYXRlU3RhdGVzKCk7Cit9
CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpoYW5kbGVFcnJvcihRTWVkaWFQbGF5ZXI6OkVy
cm9yKQoreworICAgIHVwZGF0ZVN0YXRlcygpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZTo6ZHVyYXRpb25DaGFuZ2VkKHFpbnQ2NCkKK3sKKyAgICBtX3BsYXllci0+ZHVyYXRpb25DaGFu
Z2VkKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjp1cGRhdGVTdGF0ZXMoKQorewor
ICAgIC8vIFN0b3JlIHRoZSBvbGQgc3RhdGVzIHNvIHRoYXQgd2UgY2FuIGRldGVjdCBhIGNoYW5n
ZSBhbmQgcmFpc2UgY2hhbmdlIGV2ZW50cworICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUg
b2xkTmV0d29ya1N0YXRlID0gbV9uZXR3b3JrU3RhdGU7CisgICAgTWVkaWFQbGF5ZXI6OlJlYWR5
U3RhdGUgb2xkUmVhZHlTdGF0ZSA9IG1fcmVhZHlTdGF0ZTsKKworICAgIFFNZWRpYVBsYXllcjo6
TWVkaWFTdGF0dXMgY3VycmVudFN0YXR1cyA9IG1fbWVkaWFQbGF5ZXItPm1lZGlhU3RhdHVzKCk7
CisgICAgUU1lZGlhUGxheWVyOjpFcnJvciBjdXJyZW50RXJyb3IgPSBtX21lZGlhUGxheWVyLT5l
cnJvcigpOworCisgICAgaWYgKGN1cnJlbnRFcnJvciAhPSBRTWVkaWFQbGF5ZXI6Ok5vRXJyb3Ip
IHsKKyAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOworICAg
ICAgICBpZiAoY3VycmVudEVycm9yID09IFFNZWRpYVBsYXllcjo6Rm9ybWF0RXJyb3IpCisgICAg
ICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpGb3JtYXRFcnJvcjsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TmV0d29y
a0Vycm9yOworICAgIH0gZWxzZSBpZiAoY3VycmVudFN0YXR1cyA9PSBRTWVkaWFQbGF5ZXI6OlVu
a25vd25NZWRpYVN0YXR1cworICAgICAgICAgICAgICAgfHwgY3VycmVudFN0YXR1cyA9PSBRTWVk
aWFQbGF5ZXI6Ok5vTWVkaWEpIHsKKyAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXll
cjo6SWRsZTsKKyAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5n
OworICAgIH0gZWxzZSBpZiAoY3VycmVudFN0YXR1cyA9PSBRTWVkaWFQbGF5ZXI6OkxvYWRpbmdN
ZWRpYSkgeworICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOwor
ICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7CisgICAgfSBl
bHNlIGlmIChjdXJyZW50U3RhdHVzID09IFFNZWRpYVBsYXllcjo6TG9hZGVkTWVkaWEpIHsKKyAg
ICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGluZzsKKyAgICAgICAgbV9y
ZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVNZXRhZGF0YTsKKyAgICB9IGVsc2UgaWYgKGN1
cnJlbnRTdGF0dXMgPT0gUU1lZGlhUGxheWVyOjpCdWZmZXJpbmdNZWRpYSkgeworICAgICAgICBt
X25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOworICAgICAgICBtX3JlYWR5U3Rh
dGUgPSBNZWRpYVBsYXllcjo6SGF2ZUZ1dHVyZURhdGE7CisgICAgfSBlbHNlIGlmIChjdXJyZW50
U3RhdHVzID09IFFNZWRpYVBsYXllcjo6U3RhbGxlZE1lZGlhKSB7CisgICAgICAgIG1fbmV0d29y
a1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRpbmc7CisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1l
ZGlhUGxheWVyOjpIYXZlQ3VycmVudERhdGE7CisgICAgfSBlbHNlIGlmIChjdXJyZW50U3RhdHVz
ID09IFFNZWRpYVBsYXllcjo6QnVmZmVyZWRNZWRpYQorICAgICAgICAgICAgICAgfHwgY3VycmVu
dFN0YXR1cyA9PSBRTWVkaWFQbGF5ZXI6OkVuZE9mTWVkaWEpIHsKKyAgICAgICAgbV9uZXR3b3Jr
U3RhdGUgPSBNZWRpYVBsYXllcjo6SWRsZTsKKyAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQ
bGF5ZXI6OkhhdmVFbm91Z2hEYXRhOworICAgIH0gZWxzZSBpZiAoY3VycmVudFN0YXR1cyA9PSBR
TWVkaWFQbGF5ZXI6OkludmFsaWRNZWRpYSkgeworICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1l
ZGlhUGxheWVyOjpGb3JtYXRFcnJvcjsKKyAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5
ZXI6OkhhdmVNZXRhZGF0YTsKKyAgICB9CisKKyAgICAvLyBMb2cgdGhlIHN0YXRlIGNoYW5nZXMg
YW5kIHJhaXNlIHRoZSBzdGF0ZSBjaGFuZ2UgZXZlbnRzCisgICAgaWYgKG1fbmV0d29ya1N0YXRl
ICE9IG9sZE5ldHdvcmtTdGF0ZSkKKyAgICAgICAgbV9wbGF5ZXItPm5ldHdvcmtTdGF0ZUNoYW5n
ZWQoKTsKKworICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gb2xkUmVhZHlTdGF0ZSkKKyAgICAgICAg
bV9wbGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7Cit9CisKK01lZGlhUGxheWVyUHJpdmF0ZURl
ZmF1bHQ6Ok1lZGlhUGxheWVyUHJpdmF0ZURlZmF1bHQoTWVkaWFQbGF5ZXIgKnBsYXllcikKKyAg
ICA6IE1lZGlhUGxheWVyUHJpdmF0ZShwbGF5ZXIpCisgICAgLCBtX3ZpZGVvU3VyZmFjZShuZXcg
UVBhaW50ZXJWaWRlb1N1cmZhY2UobV9tZWRpYVBsYXllcikpCit7CisgICAgaWYgKG1fbWVkaWFQ
bGF5ZXIpIHsKKyAgICAgICAgUU1lZGlhU2VydmljZSogc2VydmljZSA9IG1fbWVkaWFQbGF5ZXIt
PnNlcnZpY2UoKTsKKyAgICAgICAgaWYgKHNlcnZpY2UpIHsKKyAgICAgICAgICAgIG1fb3V0cHV0
Q29udHJvbCA9IHFvYmplY3RfY2FzdDxRVmlkZW9PdXRwdXRDb250cm9sICo+KAorICAgICAgICAg
ICAgICAgICAgICBzZXJ2aWNlLT5jb250cm9sKFFWaWRlb091dHB1dENvbnRyb2xfaWlkKSk7Cisg
ICAgICAgICAgICBtX3JlbmRlcmVyQ29udHJvbCA9IHFvYmplY3RfY2FzdDxRVmlkZW9SZW5kZXJl
ckNvbnRyb2wgKj4oCisgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtPmNvbnRyb2woUVZpZGVv
UmVuZGVyZXJDb250cm9sX2lpZCkpOworICAgICAgICAgICAgbV93aW5kb3dDb250cm9sID0gcW9i
amVjdF9jYXN0PFFWaWRlb1dpbmRvd0NvbnRyb2wgKj4oCisgICAgICAgICAgICAgICAgICAgIHNl
cnZpY2UtPmNvbnRyb2woUVZpZGVvV2luZG93Q29udHJvbF9paWQpKTsKKworICAgICAgICAgICAg
aWYgKG1fb3V0cHV0Q29udHJvbCAmJiBtX3JlbmRlcmVyQ29udHJvbCkgeworICAgICAgICAgICAg
ICAgIGNvbm5lY3QobV92aWRlb1N1cmZhY2UsIFNJR05BTChmcmFtZUNoYW5nZWQoKSksIHRoaXMs
IFNMT1QocmVwYWludCgpKSk7CisKKyAgICAgICAgICAgICAgICBtX3JlbmRlcmVyQ29udHJvbC0+
c2V0U3VyZmFjZShtX3ZpZGVvU3VyZmFjZSk7CisgICAgICAgICAgICAgICAgbV9vdXRwdXRDb250
cm9sLT5zZXRPdXRwdXQoUVZpZGVvT3V0cHV0Q29udHJvbDo6UmVuZGVyZXJPdXRwdXQpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitNZWRpYVBsYXllclByaXZhdGVEZWZh
dWx0Ojp+TWVkaWFQbGF5ZXJQcml2YXRlRGVmYXVsdCgpCit7CisgICAgZGVsZXRlIG1fdmlkZW9T
dXJmYWNlOworICAgIG1fdmlkZW9TdXJmYWNlID0gMDsKK30KKworSW50U2l6ZSBNZWRpYVBsYXll
clByaXZhdGVEZWZhdWx0OjpuYXR1cmFsU2l6ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFoYXNWaWRl
bygpIHx8IG1fcmVhZHlTdGF0ZSA8IE1lZGlhUGxheWVyOjpIYXZlTWV0YWRhdGEpCisgICAgICAg
IHJldHVybiBJbnRTaXplKCk7CisKKyAgICBRU2l6ZSB2aWRlb1NpemUgPSBtX3ZpZGVvU3VyZmFj
ZS0+c3VyZmFjZUZvcm1hdCgpLnNpemVIaW50KCk7CisKKyAgICBpZiAodmlkZW9TaXplLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIEludFNpemUoKTsKKworICAgIHJldHVybiBJbnRTaXplKHZp
ZGVvU2l6ZS53aWR0aCgpLCB2aWRlb1NpemUuaGVpZ2h0KCkpOworfQorCit2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZURlZmF1bHQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
SW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1faXNWaXNpYmxlKQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBHcmFiIHRoZSBwYWludGVyCisgICAgUVBhaW50ZXIqIHBhaW50ZXIgPSBjb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKworICAgIGlmICghbV9pc0FjdGl2ZSkgeworICAgICAg
ICAvLyBBdHRlbXB0IEdMIFNldHVwCisjaWYgIWRlZmluZWQoUVRfTk9fT1BFTkdMKSAmJiAhZGVm
aW5lZChRVF9PUEVOR0xfRVNfMV9DTCkgJiYgIWRlZmluZWQoUVRfT1BFTkdMX0VTXzEpCisgICAg
ICAgIGlmICgocGFpbnRlci0+cGFpbnRFbmdpbmUoKS0+dHlwZSgpID09IFFQYWludEVuZ2luZTo6
T3BlbkdMCisgICAgICAgICAgICAgfHwgcGFpbnRlci0+cGFpbnRFbmdpbmUoKS0+dHlwZSgpID09
IFFQYWludEVuZ2luZTo6T3BlbkdMMikpIHsKKyAgICAgICAgICAgIC8vIFNldCBHTCBDb250ZXh0
CisgICAgICAgICAgICBtX3ZpZGVvU3VyZmFjZS0+c2V0R0xDb250ZXh0KGNvbnN0X2Nhc3Q8UUdM
Q29udGV4dCAqPihRR0xDb250ZXh0OjpjdXJyZW50Q29udGV4dCgpKSk7CisKKyAgICAgICAgICAg
IC8vIENoZWNrIFNoYWRlciBUeXBlcworICAgICAgICAgICAgaWYgKG1fdmlkZW9TdXJmYWNlLT5z
dXBwb3J0ZWRTaGFkZXJUeXBlcygpICYgUVBhaW50ZXJWaWRlb1N1cmZhY2U6Okdsc2xTaGFkZXIp
CisgICAgICAgICAgICAgICAgbV92aWRlb1N1cmZhY2UtPnNldFNoYWRlclR5cGUoUVBhaW50ZXJW
aWRlb1N1cmZhY2U6Okdsc2xTaGFkZXIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIG1fdmlkZW9TdXJmYWNlLT5zZXRTaGFkZXJUeXBlKFFQYWludGVyVmlkZW9TdXJmYWNlOjpG
cmFnbWVudFByb2dyYW1TaGFkZXIpOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICAvLyBT
ZXR1cCBDb21wbGV0ZWQKKyAgICAgICAgbV9pc0FjdGl2ZSA9IHRydWU7CisgICAgfQorCisgICAg
Ly8gUGFpbnQgdGhlIGZyYW1lCisgICAgbV92aWRlb1N1cmZhY2UtPnBhaW50KHBhaW50ZXIsIFFS
ZWN0KHJlY3QueCgpLCByZWN0LnkoKSwKKyAgICByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkp
KTsKKyAgICBtX3ZpZGVvU3VyZmFjZS0+c2V0UmVhZHkodHJ1ZSk7Cit9CisKK3ZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlRGVmYXVsdDo6cmVwYWludCgpCit7CisgICAgbV9wbGF5ZXItPnJlcGFpbnQo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjaW5jbHVkZSAibW9jX01lZGlhUGxh
eWVyUHJpdmF0ZVF0LmNwcCIKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVk
aWFQbGF5ZXJQcml2YXRlUXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTA2IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAg
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKwor
ICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
ICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIE1lZGlhUGxheWVy
UHJpdmF0ZVF0X2gKKyNkZWZpbmUgTWVkaWFQbGF5ZXJQcml2YXRlUXRfaAorCisjaW5jbHVkZSAi
TWVkaWFQbGF5ZXJQcml2YXRlLmgiCisKKyNpbmNsdWRlIDxRTWVkaWFQbGF5ZXI+CisjaW5jbHVk
ZSA8UU1lZGlhUGxheWVyQ29udHJvbD4KKyNpbmNsdWRlIDxRT2JqZWN0PgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZSA6IHB1YmxpYyBRT2JqZWN0LCBw
dWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlIHsKKworICAgIFFfT0JKRUNUCisKK3B1
YmxpYzoKKyAgICBzdGF0aWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlKiBjcmVhdGUoTWVk
aWFQbGF5ZXIqIHBsYXllcik7CisgICAgdmlydHVhbCB+TWVkaWFQbGF5ZXJQcml2YXRlKCk7CisK
KyAgICBzdGF0aWMgdm9pZCByZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFy
KTsKKyAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mKTsK
KyAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBzdXBwb3J0c1R5cGUoY29uc3Qg
U3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGNvZGVjcyk7CisgICAgc3RhdGljIGJvb2wgaXNB
dmFpbGFibGUoKSB7IHJldHVybiB0cnVlOyB9CisKKyAgICBib29sIGhhc1ZpZGVvKCkgY29uc3Q7
CisgICAgYm9vbCBoYXNBdWRpbygpIGNvbnN0OworCisgICAgdm9pZCBsb2FkKGNvbnN0IFN0cmlu
ZyAmdXJsKTsKKyAgICB2b2lkIGNhbmNlbExvYWQoKTsKKworICAgIHZvaWQgcGxheSgpOworICAg
IHZvaWQgcGF1c2UoKTsKKworICAgIGJvb2wgcGF1c2VkKCkgY29uc3Q7CisgICAgYm9vbCBzZWVr
aW5nKCkgY29uc3Q7CisKKyAgICBmbG9hdCBkdXJhdGlvbigpIGNvbnN0OworICAgIGZsb2F0IGN1
cnJlbnRUaW1lKCkgY29uc3Q7CisgICAgdm9pZCBzZWVrKGZsb2F0KTsKKworICAgIHZvaWQgc2V0
UmF0ZShmbG9hdCk7CisgICAgdm9pZCBzZXRWb2x1bWUoZmxvYXQpOworICAgIHZvaWQgc2V0TXV0
ZWQoYm9vbCk7CisKKyAgICAvLyBTdGF0ZSBJbmZvcm1hdGlvbgorICAgIE1lZGlhUGxheWVyOjpO
ZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlKCkgY29uc3Q7CisgICAgTWVkaWFQbGF5ZXI6OlJlYWR5
U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0OworCisgICAgLy8gTmV0d29yayBJbmZvcm1hdGlvbgor
ICAgIFBhc3NSZWZQdHI8VGltZVJhbmdlcz4gYnVmZmVyZWQoKSBjb25zdDsKKyAgICBmbG9hdCBt
YXhUaW1lU2Vla2FibGUoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBieXRlc0xvYWRlZCgpIGNvbnN0
OworICAgIHVuc2lnbmVkIHRvdGFsQnl0ZXMoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBz
ZXRWaXNpYmxlKGJvb2wpOworCisgICAgdmlydHVhbCBJbnRTaXplIG5hdHVyYWxTaXplKCkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRTaXplKGNvbnN0IEludFNpemUmKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKSA9
IDA7CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0ID0gMDsKKwor
cHJvdGVjdGVkIHNsb3RzOgorICAgIHZpcnR1YWwgdm9pZCBtZWRpYVN0YXR1c0NoYW5nZWQoUU1l
ZGlhUGxheWVyOjpNZWRpYVN0YXR1cyk7CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUVycm9yKFFN
ZWRpYVBsYXllcjo6RXJyb3IpOworICAgIHZpcnR1YWwgdm9pZCBzdGF0ZUNoYW5nZWQoUU1lZGlh
UGxheWVyOjpTdGF0ZSkge30KKyAgICB2aXJ0dWFsIHZvaWQgcG9zaXRpb25DaGFuZ2VkKHFpbnQ2
NCkge30KKyAgICB2aXJ0dWFsIHZvaWQgZHVyYXRpb25DaGFuZ2VkKHFpbnQ2NCk7CisgICAgdmly
dHVhbCB2b2lkIHJlcGFpbnQoKSB7fQorCitwcm90ZWN0ZWQ6CisgICAgTWVkaWFQbGF5ZXJQcml2
YXRlKE1lZGlhUGxheWVyKik7CisKKyAgICBNZWRpYVBsYXllciogbV9wbGF5ZXI7CisgICAgUU1l
ZGlhUGxheWVyKiBtX21lZGlhUGxheWVyOworICAgIFFNZWRpYVBsYXllckNvbnRyb2wqIG1fbWVk
aWFQbGF5ZXJDb250cm9sOworCisgICAgbXV0YWJsZSBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRl
IG1fbmV0d29ya1N0YXRlOworICAgIG11dGFibGUgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgbV9y
ZWFkeVN0YXRlOworCisgICAgYm9vbCBtX2lzVmlzaWJsZTsKKworcHJpdmF0ZToKKyAgICB2b2lk
IHVwZGF0ZVN0YXRlcygpOworfTsKK30KKworI2VuZGlmIC8vIE1lZGlhUGxheWVyUHJpdmF0ZVF0
X2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvUVBhaW50ZXJWaWRlb1N1cmZh
Y2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvUVBhaW50
ZXJWaWRlb1N1cmZhY2UuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9RUGFpbnRlclZpZGVvU3VyZmFjZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTM3OSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAg
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlFQYWludGVyVmlkZW9TdXJmYWNlLmgiCisKKyNpbmNsdWRlIDxRUGFpbnRlcj4KKyNpbmNs
dWRlIDxRVmFyaWFudD4KKyNpbmNsdWRlIDxRVmlkZW9TdXJmYWNlRm9ybWF0PgorI2luY2x1ZGUg
PHFtYXRoLmg+CisKKyNpZiAhZGVmaW5lZChRVF9OT19PUEVOR0wpICYmICFkZWZpbmVkKFFUX09Q
RU5HTF9FU18xX0NMKSAmJiAhZGVmaW5lZChRVF9PUEVOR0xfRVNfMSkKKyNpbmNsdWRlIDxxZ2xz
aGFkZXJwcm9ncmFtLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBR
VmlkZW9TdXJmYWNlUGFpbnRlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+UVZpZGVvU3VyZmFj
ZVBhaW50ZXIoKTsKKworICAgIHZpcnR1YWwgUUxpc3Q8UVZpZGVvRnJhbWU6OlBpeGVsRm9ybWF0
PiBzdXBwb3J0ZWRQaXhlbEZvcm1hdHMoCisgICAgICAgICAgICBRQWJzdHJhY3RWaWRlb0J1ZmZl
cjo6SGFuZGxlVHlwZSBoYW5kbGVUeXBlKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wg
aXNGb3JtYXRTdXBwb3J0ZWQoCisgICAgICAgICAgICBjb25zdCBRVmlkZW9TdXJmYWNlRm9ybWF0
ICZmb3JtYXQsIFFWaWRlb1N1cmZhY2VGb3JtYXQgKnNpbWlsYXIpIGNvbnN0ID0gMDsKKworICAg
IHZpcnR1YWwgUUFic3RyYWN0VmlkZW9TdXJmYWNlOjpFcnJvciBzdGFydChjb25zdCBRVmlkZW9T
dXJmYWNlRm9ybWF0ICZmb3JtYXQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpID0gMDsK
KworICAgIHZpcnR1YWwgUUFic3RyYWN0VmlkZW9TdXJmYWNlOjpFcnJvciBzZXRDdXJyZW50RnJh
bWUoY29uc3QgUVZpZGVvRnJhbWUgJmZyYW1lKSA9IDA7CisKKyAgICB2aXJ0dWFsIFFBYnN0cmFj
dFZpZGVvU3VyZmFjZTo6RXJyb3IgcGFpbnQoCisgICAgICAgICAgICBjb25zdCBRUmVjdEYgJnRh
cmdldCwgUVBhaW50ZXIgKnBhaW50ZXIsIGNvbnN0IFFSZWN0RiAmc291cmNlKSA9IDA7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29sb3JzKGludCBicmlnaHRuZXNzLCBpbnQgY29udHJhc3Qs
IGludCBodWUsIGludCBzYXR1cmF0aW9uKSA9IDA7Cit9OworCitRVmlkZW9TdXJmYWNlUGFpbnRl
cjo6flFWaWRlb1N1cmZhY2VQYWludGVyKCkKK3sKK30KKworY2xhc3MgUVZpZGVvU3VyZmFjZVJh
c3RlclBhaW50ZXIgOiBwdWJsaWMgUVZpZGVvU3VyZmFjZVBhaW50ZXIgeworcHVibGljOgorICAg
IFFWaWRlb1N1cmZhY2VSYXN0ZXJQYWludGVyKCk7CisKKyAgICBRTGlzdDxRVmlkZW9GcmFtZTo6
UGl4ZWxGb3JtYXQ+IHN1cHBvcnRlZFBpeGVsRm9ybWF0cygKKyAgICAgICAgICAgIFFBYnN0cmFj
dFZpZGVvQnVmZmVyOjpIYW5kbGVUeXBlIGhhbmRsZVR5cGUpIGNvbnN0OworCisgICAgYm9vbCBp
c0Zvcm1hdFN1cHBvcnRlZCgKKyAgICAgICAgICAgIGNvbnN0IFFWaWRlb1N1cmZhY2VGb3JtYXQg
JmZvcm1hdCwgUVZpZGVvU3VyZmFjZUZvcm1hdCAqc2ltaWxhcikgY29uc3Q7CisKKyAgICBRQWJz
dHJhY3RWaWRlb1N1cmZhY2U6OkVycm9yIHN0YXJ0KGNvbnN0IFFWaWRlb1N1cmZhY2VGb3JtYXQg
JmZvcm1hdCk7CisgICAgdm9pZCBzdG9wKCk7CisKKyAgICBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6
OkVycm9yIHNldEN1cnJlbnRGcmFtZShjb25zdCBRVmlkZW9GcmFtZSAmZnJhbWUpOworCisgICAg
UUFic3RyYWN0VmlkZW9TdXJmYWNlOjpFcnJvciBwYWludCgKKyAgICAgICAgICAgIGNvbnN0IFFS
ZWN0RiAmdGFyZ2V0LCBRUGFpbnRlciAqcGFpbnRlciwgY29uc3QgUVJlY3RGICZzb3VyY2UpOwor
CisgICAgdm9pZCB1cGRhdGVDb2xvcnMoaW50IGJyaWdodG5lc3MsIGludCBjb250cmFzdCwgaW50
IGh1ZSwgaW50IHNhdHVyYXRpb24pOworCitwcml2YXRlOgorICAgIFFMaXN0PFFWaWRlb0ZyYW1l
OjpQaXhlbEZvcm1hdD4gbV9pbWFnZVBpeGVsRm9ybWF0czsKKyAgICBRVmlkZW9GcmFtZSBtX2Zy
YW1lOworICAgIFFTaXplIG1faW1hZ2VTaXplOworICAgIFFJbWFnZTo6Rm9ybWF0IG1faW1hZ2VG
b3JtYXQ7CisgICAgUVZpZGVvU3VyZmFjZUZvcm1hdDo6RGlyZWN0aW9uIG1fc2NhbkxpbmVEaXJl
Y3Rpb247Cit9OworCitRVmlkZW9TdXJmYWNlUmFzdGVyUGFpbnRlcjo6UVZpZGVvU3VyZmFjZVJh
c3RlclBhaW50ZXIoKQorICAgIDogbV9pbWFnZUZvcm1hdChRSW1hZ2U6OkZvcm1hdF9JbnZhbGlk
KQorICAgICwgbV9zY2FuTGluZURpcmVjdGlvbihRVmlkZW9TdXJmYWNlRm9ybWF0OjpUb3BUb0Jv
dHRvbSkKK3sKKyAgICBtX2ltYWdlUGl4ZWxGb3JtYXRzCisgICAgICAgIDw8IFFWaWRlb0ZyYW1l
OjpGb3JtYXRfUkdCMzIKKyNpZm5kZWYgUVRfT1BFTkdMX0VTIC8vIFRoZSByYXN0ZXIgZm9ybWF0
cyBzaG91bGQgYmUgYSBzdWJzZXQgb2YgdGhlIEdMIGZvcm1hdHMuCisgICAgICAgIDw8IFFWaWRl
b0ZyYW1lOjpGb3JtYXRfUkdCMjQKKyNlbmRpZgorICAgICAgICA8PCBRVmlkZW9GcmFtZTo6Rm9y
bWF0X0FSR0IzMgorICAgICAgICA8PCBRVmlkZW9GcmFtZTo6Rm9ybWF0X1JHQjU2NTsKK30KKwor
UUxpc3Q8UVZpZGVvRnJhbWU6OlBpeGVsRm9ybWF0PiBRVmlkZW9TdXJmYWNlUmFzdGVyUGFpbnRl
cjo6c3VwcG9ydGVkUGl4ZWxGb3JtYXRzKAorICAgICAgICBRQWJzdHJhY3RWaWRlb0J1ZmZlcjo6
SGFuZGxlVHlwZSBoYW5kbGVUeXBlKSBjb25zdAoreworICAgIHJldHVybiBoYW5kbGVUeXBlID09
IFFBYnN0cmFjdFZpZGVvQnVmZmVyOjpOb0hhbmRsZQorICAgICAgICA/IG1faW1hZ2VQaXhlbEZv
cm1hdHMKKyAgICAgICAgOiBRTGlzdDxRVmlkZW9GcmFtZTo6UGl4ZWxGb3JtYXQ+KCk7Cit9CisK
K2Jvb2wgUVZpZGVvU3VyZmFjZVJhc3RlclBhaW50ZXI6OmlzRm9ybWF0U3VwcG9ydGVkKAorICAg
ICAgICBjb25zdCBRVmlkZW9TdXJmYWNlRm9ybWF0ICZmb3JtYXQsIFFWaWRlb1N1cmZhY2VGb3Jt
YXQgKikgY29uc3QKK3sKKyAgICByZXR1cm4gZm9ybWF0LmhhbmRsZVR5cGUoKSA9PSBRQWJzdHJh
Y3RWaWRlb0J1ZmZlcjo6Tm9IYW5kbGUKKyAgICAgICAgICAgICYmIG1faW1hZ2VQaXhlbEZvcm1h
dHMuY29udGFpbnMoZm9ybWF0LnBpeGVsRm9ybWF0KCkpCisgICAgICAgICAgICAmJiAhZm9ybWF0
LmZyYW1lU2l6ZSgpLmlzRW1wdHkoKTsKK30KKworUUFic3RyYWN0VmlkZW9TdXJmYWNlOjpFcnJv
ciBRVmlkZW9TdXJmYWNlUmFzdGVyUGFpbnRlcjo6c3RhcnQoY29uc3QgUVZpZGVvU3VyZmFjZUZv
cm1hdCAmZm9ybWF0KQoreworICAgIG1fZnJhbWUgPSBRVmlkZW9GcmFtZSgpOworICAgIG1faW1h
Z2VGb3JtYXQgPSBRVmlkZW9GcmFtZTo6aW1hZ2VGb3JtYXRGcm9tUGl4ZWxGb3JtYXQoZm9ybWF0
LnBpeGVsRm9ybWF0KCkpOworICAgIG1faW1hZ2VTaXplID0gZm9ybWF0LmZyYW1lU2l6ZSgpOwor
ICAgIG1fc2NhbkxpbmVEaXJlY3Rpb24gPSBmb3JtYXQuc2NhbkxpbmVEaXJlY3Rpb24oKTsKKwor
ICAgIHJldHVybiBmb3JtYXQuaGFuZGxlVHlwZSgpID09IFFBYnN0cmFjdFZpZGVvQnVmZmVyOjpO
b0hhbmRsZQorICAgICAgICAgICAgJiYgbV9pbWFnZUZvcm1hdCAhPSBRSW1hZ2U6OkZvcm1hdF9J
bnZhbGlkCisgICAgICAgICAgICAmJiAhbV9pbWFnZVNpemUuaXNFbXB0eSgpCisgICAgICAgICAg
ICA/IFFBYnN0cmFjdFZpZGVvU3VyZmFjZTo6Tm9FcnJvcgorICAgICAgICAgICAgOiBRQWJzdHJh
Y3RWaWRlb1N1cmZhY2U6OlVuc3VwcG9ydGVkRm9ybWF0RXJyb3I7Cit9CisKK3ZvaWQgUVZpZGVv
U3VyZmFjZVJhc3RlclBhaW50ZXI6OnN0b3AoKQoreworICAgIG1fZnJhbWUgPSBRVmlkZW9GcmFt
ZSgpOworfQorCitRQWJzdHJhY3RWaWRlb1N1cmZhY2U6OkVycm9yIFFWaWRlb1N1cmZhY2VSYXN0
ZXJQYWludGVyOjpzZXRDdXJyZW50RnJhbWUoY29uc3QgUVZpZGVvRnJhbWUgJmZyYW1lKQorewor
ICAgIG1fZnJhbWUgPSBmcmFtZTsKKworICAgIHJldHVybiBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6
Ok5vRXJyb3I7Cit9CisKK1FBYnN0cmFjdFZpZGVvU3VyZmFjZTo6RXJyb3IgUVZpZGVvU3VyZmFj
ZVJhc3RlclBhaW50ZXI6OnBhaW50KAorICAgICAgICAgICAgY29uc3QgUVJlY3RGICZ0YXJnZXQs
IFFQYWludGVyICpwYWludGVyLCBjb25zdCBRUmVjdEYgJnNvdXJjZSkKK3sKKyAgICBpZiAobV9m
cmFtZS5tYXAoUUFic3RyYWN0VmlkZW9CdWZmZXI6OlJlYWRPbmx5KSkgeworICAgICAgICBRSW1h
Z2UgaW1hZ2UoCisgICAgICAgICAgICAgICAgbV9mcmFtZS5iaXRzKCksCisgICAgICAgICAgICAg
ICAgbV9pbWFnZVNpemUud2lkdGgoKSwKKyAgICAgICAgICAgICAgICBtX2ltYWdlU2l6ZS5oZWln
aHQoKSwKKyAgICAgICAgICAgICAgICBtX2ZyYW1lLmJ5dGVzUGVyTGluZSgpLAorICAgICAgICAg
ICAgICAgIG1faW1hZ2VGb3JtYXQpOworCisgICAgICAgIGlmIChtX3NjYW5MaW5lRGlyZWN0aW9u
ID09IFFWaWRlb1N1cmZhY2VGb3JtYXQ6OkJvdHRvbVRvVG9wKSB7CisgICAgICAgICAgICBjb25z
dCBRVHJhbnNmb3JtIG9sZFRyYW5zZm9ybSA9IHBhaW50ZXItPnRyYW5zZm9ybSgpOworCisgICAg
ICAgICAgICBwYWludGVyLT5zY2FsZSgxLCAtMSk7CisgICAgICAgICAgICBwYWludGVyLT50cmFu
c2xhdGUoMCwgLXRhcmdldC5ib3R0b20oKSk7CisgICAgICAgICAgICBwYWludGVyLT5kcmF3SW1h
Z2UoCisgICAgICAgICAgICAgICAgUVJlY3RGKHRhcmdldC54KCksIDAsIHRhcmdldC53aWR0aCgp
LCB0YXJnZXQuaGVpZ2h0KCkpLCBpbWFnZSwgc291cmNlKTsKKyAgICAgICAgICAgIHBhaW50ZXIt
PnNldFRyYW5zZm9ybShvbGRUcmFuc2Zvcm0pOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IHBhaW50ZXItPmRyYXdJbWFnZSh0YXJnZXQsIGltYWdlLCBzb3VyY2UpOworCisgICAgICAgIG1f
ZnJhbWUudW5tYXAoKTsKKyAgICB9IGVsc2UgaWYgKG1fZnJhbWUuaXNWYWxpZCgpKQorICAgICAg
ICByZXR1cm4gUUFic3RyYWN0VmlkZW9TdXJmYWNlOjpJbmNvcnJlY3RGb3JtYXRFcnJvcjsKKyAg
ICBlbHNlCisgICAgICAgIHBhaW50ZXItPmZpbGxSZWN0KHRhcmdldCwgUXQ6OmJsYWNrKTsKKwor
ICAgIHJldHVybiBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6Ok5vRXJyb3I7Cit9CisKK3ZvaWQgUVZp
ZGVvU3VyZmFjZVJhc3RlclBhaW50ZXI6OnVwZGF0ZUNvbG9ycyhpbnQsIGludCwgaW50LCBpbnQp
Cit7Cit9CisKKyNpZiAhZGVmaW5lZChRVF9OT19PUEVOR0wpICYmICFkZWZpbmVkKFFUX09QRU5H
TF9FU18xX0NMKSAmJiAhZGVmaW5lZChRVF9PUEVOR0xfRVNfMSkKKworI2lmbmRlZiBRX1dTX01B
QworIyBpZm5kZWYgQVBJRU5UUllQCisjICAgaWZkZWYgQVBJRU5UUlkKKyMgICAgIGRlZmluZSBB
UElFTlRSWVAgQVBJRU5UUlkgKgorIyAgIGVsc2UKKyMgICAgIGRlZmluZSBBUElFTlRSWQorIyAg
ICAgZGVmaW5lIEFQSUVOVFJZUCAqCisjICAgZW5kaWYKKyMgZW5kaWYKKyNlbHNlCisjIGRlZmlu
ZSBBUElFTlRSWQorIyBkZWZpbmUgQVBJRU5UUllQICoKKyNlbmRpZgorCisjaWZuZGVmIEdMX1RF
WFRVUkUwCisjICBkZWZpbmUgR0xfVEVYVFVSRTAgICAgMHg4NEMwCisjICBkZWZpbmUgR0xfVEVY
VFVSRTEgICAgMHg4NEMxCisjICBkZWZpbmUgR0xfVEVYVFVSRTIgICAgMHg4NEMyCisjZW5kaWYK
KyNpZm5kZWYgR0xfUFJPR1JBTV9FUlJPUl9TVFJJTkdfQVJCCisjICBkZWZpbmUgR0xfUFJPR1JB
TV9FUlJPUl9TVFJJTkdfQVJCICAgICAgIDB4ODg3NAorI2VuZGlmCisKKyNpZm5kZWYgR0xfVU5T
SUdORURfU0hPUlRfNV82XzUKKyMgIGRlZmluZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNSAzMzYz
NQorI2VuZGlmCisKK2NsYXNzIFFWaWRlb1N1cmZhY2VHTFBhaW50ZXIgOiBwdWJsaWMgUVZpZGVv
U3VyZmFjZVBhaW50ZXIgeworcHVibGljOgorICAgIFFWaWRlb1N1cmZhY2VHTFBhaW50ZXIoUUdM
Q29udGV4dCAqY29udGV4dCk7CisgICAgflFWaWRlb1N1cmZhY2VHTFBhaW50ZXIoKTsKKyAgICBR
TGlzdDxRVmlkZW9GcmFtZTo6UGl4ZWxGb3JtYXQ+IHN1cHBvcnRlZFBpeGVsRm9ybWF0cygKKyAg
ICAgICAgICAgIFFBYnN0cmFjdFZpZGVvQnVmZmVyOjpIYW5kbGVUeXBlIGhhbmRsZVR5cGUpIGNv
bnN0OworCisgICAgYm9vbCBpc0Zvcm1hdFN1cHBvcnRlZCgKKyAgICAgICAgICAgIGNvbnN0IFFW
aWRlb1N1cmZhY2VGb3JtYXQgJmZvcm1hdCwgUVZpZGVvU3VyZmFjZUZvcm1hdCAqc2ltaWxhcikg
Y29uc3Q7CisKKyAgICBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6OkVycm9yIHNldEN1cnJlbnRGcmFt
ZShjb25zdCBRVmlkZW9GcmFtZSAmZnJhbWUpOworCisgICAgdm9pZCB1cGRhdGVDb2xvcnMoaW50
IGJyaWdodG5lc3MsIGludCBjb250cmFzdCwgaW50IGh1ZSwgaW50IHNhdHVyYXRpb24pOworCitw
cm90ZWN0ZWQ6CisgICAgdm9pZCBpbml0UmdiVGV4dHVyZUluZm8oR0xlbnVtIGludGVybmFsRm9y
bWF0LCBHTHVpbnQgZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUVNpemUgJnNpemUpOworICAg
IHZvaWQgaW5pdFl1djQyMFBUZXh0dXJlSW5mbyhjb25zdCBRU2l6ZSAmc2l6ZSk7CisgICAgdm9p
ZCBpbml0WXYxMlRleHR1cmVJbmZvKGNvbnN0IFFTaXplICZzaXplKTsKKworI2lmbmRlZiBRVF9P
UEVOR0xfRVMKKyAgICB0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpfZ2xBY3RpdmVUZXh0dXJlKSAo
R0xlbnVtKTsKKyAgICBfZ2xBY3RpdmVUZXh0dXJlIGdsQWN0aXZlVGV4dHVyZTsKKyNlbmRpZgor
CisgICAgUUxpc3Q8UVZpZGVvRnJhbWU6OlBpeGVsRm9ybWF0PiBtX2ltYWdlUGl4ZWxGb3JtYXRz
OworICAgIFFMaXN0PFFWaWRlb0ZyYW1lOjpQaXhlbEZvcm1hdD4gbV9nbFBpeGVsRm9ybWF0czsK
KyAgICBRTWF0cml4NHg0IG1fY29sb3JNYXRyaXg7CisgICAgUVZpZGVvRnJhbWUgbV9mcmFtZTsK
KworICAgIFFHTENvbnRleHQqIG1fY29udGV4dDsKKyAgICBRQWJzdHJhY3RWaWRlb0J1ZmZlcjo6
SGFuZGxlVHlwZSBtX2hhbmRsZVR5cGU7CisgICAgUVZpZGVvU3VyZmFjZUZvcm1hdDo6RGlyZWN0
aW9uIG1fc2NhbkxpbmVEaXJlY3Rpb247CisgICAgR0xlbnVtIG1fdGV4dHVyZUZvcm1hdDsKKyAg
ICBHTHVpbnQgbV90ZXh0dXJlSW50ZXJuYWxGb3JtYXQ7CisgICAgR0xlbnVtIG1fdGV4dHVyZVR5
cGU7CisgICAgaW50IG1fdGV4dHVyZUNvdW50OworICAgIEdMdWludCBtX3RleHR1cmVJZHNbM107
CisgICAgaW50IG1fdGV4dHVyZVdpZHRoc1szXTsKKyAgICBpbnQgbV90ZXh0dXJlSGVpZ2h0c1sz
XTsKKyAgICBpbnQgbV90ZXh0dXJlT2Zmc2V0c1szXTsKKyAgICBib29sIG1feXV2OworfTsKKwor
UVZpZGVvU3VyZmFjZUdMUGFpbnRlcjo6UVZpZGVvU3VyZmFjZUdMUGFpbnRlcihRR0xDb250ZXh0
ICpjb250ZXh0KQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBtX2hhbmRsZVR5cGUo
UUFic3RyYWN0VmlkZW9CdWZmZXI6Ok5vSGFuZGxlKQorICAgICwgbV9zY2FuTGluZURpcmVjdGlv
bihRVmlkZW9TdXJmYWNlRm9ybWF0OjpUb3BUb0JvdHRvbSkKKyAgICAsIG1fdGV4dHVyZUZvcm1h
dCgwKQorICAgICwgbV90ZXh0dXJlSW50ZXJuYWxGb3JtYXQoMCkKKyAgICAsIG1fdGV4dHVyZVR5
cGUoMCkKKyAgICAsIG1fdGV4dHVyZUNvdW50KDApCisgICAgLCBtX3l1dihmYWxzZSkKK3sKKyNp
Zm5kZWYgUVRfT1BFTkdMX0VTCisgICAgZ2xBY3RpdmVUZXh0dXJlID0gKF9nbEFjdGl2ZVRleHR1
cmUpbV9jb250ZXh0LT5nZXRQcm9jQWRkcmVzcyhRTGF0aW4xU3RyaW5nKCJnbEFjdGl2ZVRleHR1
cmUiKSk7CisjZW5kaWYKK30KKworUVZpZGVvU3VyZmFjZUdMUGFpbnRlcjo6flFWaWRlb1N1cmZh
Y2VHTFBhaW50ZXIoKQoreworfQorCitRTGlzdDxRVmlkZW9GcmFtZTo6UGl4ZWxGb3JtYXQ+IFFW
aWRlb1N1cmZhY2VHTFBhaW50ZXI6OnN1cHBvcnRlZFBpeGVsRm9ybWF0cygKKyAgICAgICAgUUFi
c3RyYWN0VmlkZW9CdWZmZXI6OkhhbmRsZVR5cGUgaGFuZGxlVHlwZSkgY29uc3QKK3sKKyAgICBz
d2l0Y2ggKGhhbmRsZVR5cGUpIHsKKyAgICBjYXNlIFFBYnN0cmFjdFZpZGVvQnVmZmVyOjpOb0hh
bmRsZToKKyAgICAgICAgcmV0dXJuIG1faW1hZ2VQaXhlbEZvcm1hdHM7CisgICAgY2FzZSBRQWJz
dHJhY3RWaWRlb0J1ZmZlcjo6R0xUZXh0dXJlSGFuZGxlOgorICAgICAgICByZXR1cm4gbV9nbFBp
eGVsRm9ybWF0czsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gUUxpc3Q8UVZpZGVvRnJh
bWU6OlBpeGVsRm9ybWF0PigpOworICAgIH0KK30KKworYm9vbCBRVmlkZW9TdXJmYWNlR0xQYWlu
dGVyOjppc0Zvcm1hdFN1cHBvcnRlZCgKKyAgICAgICAgY29uc3QgUVZpZGVvU3VyZmFjZUZvcm1h
dCAmZm9ybWF0LCBRVmlkZW9TdXJmYWNlRm9ybWF0ICopIGNvbnN0Cit7CisgICAgaWYgKGZvcm1h
dC5mcmFtZVNpemUoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN3
aXRjaCAoZm9ybWF0LmhhbmRsZVR5cGUoKSkgeworICAgIGNhc2UgUUFic3RyYWN0VmlkZW9CdWZm
ZXI6Ok5vSGFuZGxlOgorICAgICAgICByZXR1cm4gbV9pbWFnZVBpeGVsRm9ybWF0cy5jb250YWlu
cyhmb3JtYXQucGl4ZWxGb3JtYXQoKSk7CisgICAgY2FzZSBRQWJzdHJhY3RWaWRlb0J1ZmZlcjo6
R0xUZXh0dXJlSGFuZGxlOgorICAgICAgICByZXR1cm4gbV9nbFBpeGVsRm9ybWF0cy5jb250YWlu
cyhmb3JtYXQucGl4ZWxGb3JtYXQoKSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KK30KKworUUFic3RyYWN0VmlkZW9TdXJmYWNlOjpFcnJvciBRVmlkZW9TdXJm
YWNlR0xQYWludGVyOjpzZXRDdXJyZW50RnJhbWUoY29uc3QgUVZpZGVvRnJhbWUgJmZyYW1lKQor
eworICAgIG1fZnJhbWUgPSBmcmFtZTsKKworICAgIGlmIChtX2hhbmRsZVR5cGUgPT0gUUFic3Ry
YWN0VmlkZW9CdWZmZXI6OkdMVGV4dHVyZUhhbmRsZSkgeworICAgICAgICBtX3RleHR1cmVJZHNb
MF0gPSBmcmFtZS5oYW5kbGUoKS50b0ludCgpOworICAgIH0gZWxzZSBpZiAobV9mcmFtZS5tYXAo
UUFic3RyYWN0VmlkZW9CdWZmZXI6OlJlYWRPbmx5KSkgeworICAgICAgICBtX2NvbnRleHQtPm1h
a2VDdXJyZW50KCk7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX3RleHR1cmVDb3Vu
dDsgKytpKSB7CisgICAgICAgICAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4
dHVyZUlkc1tpXSk7CisgICAgICAgICAgICBnbFRleEltYWdlMkQoCisgICAgICAgICAgICAgICAg
ICAgIEdMX1RFWFRVUkVfMkQsCisgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAg
ICAgICAgIG1fdGV4dHVyZUludGVybmFsRm9ybWF0LAorICAgICAgICAgICAgICAgICAgICBtX3Rl
eHR1cmVXaWR0aHNbaV0sCisgICAgICAgICAgICAgICAgICAgIG1fdGV4dHVyZUhlaWdodHNbaV0s
CisgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgIG1fdGV4dHVyZUZv
cm1hdCwKKyAgICAgICAgICAgICAgICAgICAgbV90ZXh0dXJlVHlwZSwKKyAgICAgICAgICAgICAg
ICAgICAgbV9mcmFtZS5iaXRzKCkgKyBtX3RleHR1cmVPZmZzZXRzW2ldKTsKKyAgICAgICAgICAg
IGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdM
X0xJTkVBUik7CisgICAgICAgICAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xf
VEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgICAgICAgICAgZ2xUZXhQYXJhbWV0
ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9SRVBFQVQpOworICAgICAg
ICAgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBH
TF9SRVBFQVQpOworICAgICAgICB9CisgICAgICAgIG1fZnJhbWUudW5tYXAoKTsKKyAgICB9IGVs
c2UgaWYgKG1fZnJhbWUuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gUUFic3RyYWN0VmlkZW9T
dXJmYWNlOjpJbmNvcnJlY3RGb3JtYXRFcnJvcjsKKworICAgIHJldHVybiBRQWJzdHJhY3RWaWRl
b1N1cmZhY2U6Ok5vRXJyb3I7Cit9CisKK3ZvaWQgUVZpZGVvU3VyZmFjZUdMUGFpbnRlcjo6dXBk
YXRlQ29sb3JzKGludCBicmlnaHRuZXNzLCBpbnQgY29udHJhc3QsIGludCBodWUsIGludCBzYXR1
cmF0aW9uKQoreworICAgIGNvbnN0IHFyZWFsIGIgPSBicmlnaHRuZXNzIC8gMjAwLjA7CisgICAg
Y29uc3QgcXJlYWwgYyA9IGNvbnRyYXN0IC8gMTAwLjAgKyAxLjA7CisgICAgY29uc3QgcXJlYWwg
aCA9IGh1ZSAvIDIwMC4wOworICAgIGNvbnN0IHFyZWFsIHMgPSBzYXR1cmF0aW9uIC8gMTAwLjAg
KyAxLjA7CisKKyAgICBjb25zdCBxcmVhbCBjb3NIID0gcUNvcyhNX1BJICogaCk7CisgICAgY29u
c3QgcXJlYWwgc2luSCA9IHFTaW4oTV9QSSAqIGgpOworCisgICAgY29uc3QgcXJlYWwgaDExID0g
LTAuNDcyOCAqIGNvc0ggKyAwLjc5NTQgKiBzaW5IICsgMS40NzI4OworICAgIGNvbnN0IHFyZWFs
IGgyMSA9IC0wLjkyNTMgKiBjb3NIIC0gMC4wMTE4ICogc2luSCArIDAuOTUyMzsKKyAgICBjb25z
dCBxcmVhbCBoMzEgPSAgMC40NTI1ICogY29zSCArIDAuODA3MiAqIHNpbkggLSAwLjQ1MjQ7CisK
KyAgICBjb25zdCBxcmVhbCBoMTIgPSAgMS40NzI4ICogY29zSCAtIDEuMzcyOCAqIHNpbkggLSAx
LjQ3Mjg7CisgICAgY29uc3QgcXJlYWwgaDIyID0gIDEuOTI1MyAqIGNvc0ggKyAwLjU4OTEgKiBz
aW5IIC0gMC45MjUzOworICAgIGNvbnN0IHFyZWFsIGgzMiA9IC0wLjQ1MjUgKiBjb3NIIC0gMS45
NjE5ICogc2luSCArIDAuNDUyNTsKKworICAgIGNvbnN0IHFyZWFsIGgxMyA9ICAxLjQ3MjggKiBj
b3NIIC0gMC4yMTgxICogc2luSCAtIDEuNDcyODsKKyAgICBjb25zdCBxcmVhbCBoMjMgPSAgMC45
MjUzICogY29zSCArIDEuMTY2NSAqIHNpbkggLSAwLjkyNTM7CisgICAgY29uc3QgcXJlYWwgaDMz
ID0gIDAuNTQ3NSAqIGNvc0ggLSAxLjM4NDYgKiBzaW5IICsgMC40NTI1OworCisgICAgY29uc3Qg
cXJlYWwgc3IgPSAoMS4wIC0gcykgKiAwLjMwODY7CisgICAgY29uc3QgcXJlYWwgc2cgPSAoMS4w
IC0gcykgKiAwLjYwOTQ7CisgICAgY29uc3QgcXJlYWwgc2IgPSAoMS4wIC0gcykgKiAwLjA4MjA7
CisKKyAgICBjb25zdCBxcmVhbCBzclMgPSBzciArIHM7CisgICAgY29uc3QgcXJlYWwgc2dTID0g
c2cgKyBzOworICAgIGNvbnN0IHFyZWFsIHNiUyA9IHNyICsgczsKKworICAgIGNvbnN0IGZsb2F0
IG00ID0gKHMgKyBzciArIHNnICsgc2IpICogKDAuNSAtIDAuNSAqIGMgKyBiKTsKKworICAgIG1f
Y29sb3JNYXRyaXgoMCwgMCkgPSBjICogKHNyUyAqIGgxMSArIHNnICogaDIxICsgc2IgKiBoMzEp
OworICAgIG1fY29sb3JNYXRyaXgoMCwgMSkgPSBjICogKHNyUyAqIGgxMiArIHNnICogaDIyICsg
c2IgKiBoMzIpOworICAgIG1fY29sb3JNYXRyaXgoMCwgMikgPSBjICogKHNyUyAqIGgxMyArIHNn
ICogaDIzICsgc2IgKiBoMzMpOworICAgIG1fY29sb3JNYXRyaXgoMCwgMykgPSBtNDsKKworICAg
IG1fY29sb3JNYXRyaXgoMSwgMCkgPSBjICogKHNyICogaDExICsgc2dTICogaDIxICsgc2IgKiBo
MzEpOworICAgIG1fY29sb3JNYXRyaXgoMSwgMSkgPSBjICogKHNyICogaDEyICsgc2dTICogaDIy
ICsgc2IgKiBoMzIpOworICAgIG1fY29sb3JNYXRyaXgoMSwgMikgPSBjICogKHNyICogaDEzICsg
c2dTICogaDIzICsgc2IgKiBoMzMpOworICAgIG1fY29sb3JNYXRyaXgoMSwgMykgPSBtNDsKKwor
ICAgIG1fY29sb3JNYXRyaXgoMiwgMCkgPSBjICogKHNyICogaDExICsgc2cgKiBoMjEgKyBzYlMg
KiBoMzEpOworICAgIG1fY29sb3JNYXRyaXgoMiwgMSkgPSBjICogKHNyICogaDEyICsgc2cgKiBo
MjIgKyBzYlMgKiBoMzIpOworICAgIG1fY29sb3JNYXRyaXgoMiwgMikgPSBjICogKHNyICogaDEz
ICsgc2cgKiBoMjMgKyBzYlMgKiBoMzMpOworICAgIG1fY29sb3JNYXRyaXgoMiwgMykgPSBtNDsK
KworICAgIG1fY29sb3JNYXRyaXgoMywgMCkgPSAwLjA7CisgICAgbV9jb2xvck1hdHJpeCgzLCAx
KSA9IDAuMDsKKyAgICBtX2NvbG9yTWF0cml4KDMsIDIpID0gMC4wOworICAgIG1fY29sb3JNYXRy
aXgoMywgMykgPSAxLjA7CisKKyAgICBpZiAobV95dXYpIHsKKyAgICAgICAgbV9jb2xvck1hdHJp
eCA9IG1fY29sb3JNYXRyaXggKiBRTWF0cml4NHg0KAorICAgICAgICAgICAgICAgIDEuMCwgIDAu
MDAwLCAgMS4xNDAsIC0wLjU3MDAsCisgICAgICAgICAgICAgICAgMS4wLCAtMC4zOTQsIC0wLjU4
MSwgIDAuNDg3NSwKKyAgICAgICAgICAgICAgICAxLjAsICAyLjAyOCwgIDAuMDAwLCAtMS4wMTQw
LAorICAgICAgICAgICAgICAgIDAuMCwgIDAuMDAwLCAgMC4wMDAsICAxLjAwMDApOworICAgIH0K
K30KKwordm9pZCBRVmlkZW9TdXJmYWNlR0xQYWludGVyOjppbml0UmdiVGV4dHVyZUluZm8oCisg
ICAgICAgIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGZvcm1hdCwgR0xlbnVtIHR5cGUs
IGNvbnN0IFFTaXplICZzaXplKQoreworICAgIG1feXV2ID0gZmFsc2U7CisgICAgbV90ZXh0dXJl
SW50ZXJuYWxGb3JtYXQgPSBpbnRlcm5hbEZvcm1hdDsKKyAgICBtX3RleHR1cmVGb3JtYXQgPSBm
b3JtYXQ7CisgICAgbV90ZXh0dXJlVHlwZSA9IHR5cGU7CisgICAgbV90ZXh0dXJlQ291bnQgPSAx
OworICAgIG1fdGV4dHVyZVdpZHRoc1swXSA9IHNpemUud2lkdGgoKTsKKyAgICBtX3RleHR1cmVI
ZWlnaHRzWzBdID0gc2l6ZS5oZWlnaHQoKTsKKyAgICBtX3RleHR1cmVPZmZzZXRzWzBdID0gMDsK
K30KKwordm9pZCBRVmlkZW9TdXJmYWNlR0xQYWludGVyOjppbml0WXV2NDIwUFRleHR1cmVJbmZv
KGNvbnN0IFFTaXplICZzaXplKQoreworICAgIG1feXV2ID0gdHJ1ZTsKKyAgICBtX3RleHR1cmVJ
bnRlcm5hbEZvcm1hdCA9IEdMX0xVTUlOQU5DRTsKKyAgICBtX3RleHR1cmVGb3JtYXQgPSBHTF9M
VU1JTkFOQ0U7CisgICAgbV90ZXh0dXJlVHlwZSA9IEdMX1VOU0lHTkVEX0JZVEU7CisgICAgbV90
ZXh0dXJlQ291bnQgPSAzOworICAgIG1fdGV4dHVyZVdpZHRoc1swXSA9IHNpemUud2lkdGgoKTsK
KyAgICBtX3RleHR1cmVIZWlnaHRzWzBdID0gc2l6ZS5oZWlnaHQoKTsKKyAgICBtX3RleHR1cmVP
ZmZzZXRzWzBdID0gMDsKKyAgICBtX3RleHR1cmVXaWR0aHNbMV0gPSBzaXplLndpZHRoKCkgLyAy
OworICAgIG1fdGV4dHVyZUhlaWdodHNbMV0gPSBzaXplLmhlaWdodCgpIC8gMjsKKyAgICBtX3Rl
eHR1cmVPZmZzZXRzWzFdID0gc2l6ZS53aWR0aCgpICogc2l6ZS5oZWlnaHQoKTsKKyAgICBtX3Rl
eHR1cmVXaWR0aHNbMl0gPSBzaXplLndpZHRoKCkgLyAyOworICAgIG1fdGV4dHVyZUhlaWdodHNb
Ml0gPSBzaXplLmhlaWdodCgpIC8gMjsKKyAgICBtX3RleHR1cmVPZmZzZXRzWzJdID0gc2l6ZS53
aWR0aCgpICogc2l6ZS5oZWlnaHQoKSAqIDUgLyA0OworfQorCit2b2lkIFFWaWRlb1N1cmZhY2VH
TFBhaW50ZXI6OmluaXRZdjEyVGV4dHVyZUluZm8oY29uc3QgUVNpemUgJnNpemUpCit7CisgICAg
bV95dXYgPSB0cnVlOworICAgIG1fdGV4dHVyZUludGVybmFsRm9ybWF0ID0gR0xfTFVNSU5BTkNF
OworICAgIG1fdGV4dHVyZUZvcm1hdCA9IEdMX0xVTUlOQU5DRTsKKyAgICBtX3RleHR1cmVUeXBl
ID0gR0xfVU5TSUdORURfQllURTsKKyAgICBtX3RleHR1cmVDb3VudCA9IDM7CisgICAgbV90ZXh0
dXJlV2lkdGhzWzBdID0gc2l6ZS53aWR0aCgpOworICAgIG1fdGV4dHVyZUhlaWdodHNbMF0gPSBz
aXplLmhlaWdodCgpOworICAgIG1fdGV4dHVyZU9mZnNldHNbMF0gPSAwOworICAgIG1fdGV4dHVy
ZVdpZHRoc1sxXSA9IHNpemUud2lkdGgoKSAvIDI7CisgICAgbV90ZXh0dXJlSGVpZ2h0c1sxXSA9
IHNpemUuaGVpZ2h0KCkgLyAyOworICAgIG1fdGV4dHVyZU9mZnNldHNbMV0gPSBzaXplLndpZHRo
KCkgKiBzaXplLmhlaWdodCgpICogNSAvIDQ7CisgICAgbV90ZXh0dXJlV2lkdGhzWzJdID0gc2l6
ZS53aWR0aCgpIC8gMjsKKyAgICBtX3RleHR1cmVIZWlnaHRzWzJdID0gc2l6ZS5oZWlnaHQoKSAv
IDI7CisgICAgbV90ZXh0dXJlT2Zmc2V0c1syXSA9IHNpemUud2lkdGgoKSAqIHNpemUuaGVpZ2h0
KCk7Cit9CisKKyNpZm5kZWYgUVRfT1BFTkdMX0VTCisKKyMgaWZuZGVmIEdMX0ZSQUdNRU5UX1BS
T0dSQU1fQVJCCisjICBkZWZpbmUgR0xfRlJBR01FTlRfUFJPR1JBTV9BUkIgICAgICAgICAgIDB4
ODgwNAorIyAgZGVmaW5lIEdMX1BST0dSQU1fRk9STUFUX0FTQ0lJX0FSQiAgICAgICAweDg4NzUK
KyMgZW5kaWYKKworLy8gUGFpbnRzIGFuIFJHQjMyIGZyYW1lCitzdGF0aWMgY29uc3QgY2hhciAq
cXRfYXJiZnBfeHJnYlNoYWRlclByb2dyYW0gPQorICAgICIhIUFSQmZwMS4wXG4iCisgICAgIlBB
UkFNIG1hdHJpeFs0XSA9IHsgcHJvZ3JhbS5sb2NhbFswLi4yXSwiCisgICAgInsgMC4wLCAwLjAs
IDAuMCwgMS4wIH0gfTtcbiIKKyAgICAiVEVNUCB4cmdiO1xuIgorICAgICJURVggeHJnYi54eXos
IGZyYWdtZW50LnRleGNvb3JkWzBdLCB0ZXh0dXJlWzBdLCAyRDtcbiIKKyAgICAiTU9WIHhyZ2Iu
dywgbWF0cml4WzNdLnc7XG4iCisgICAgIkRQNCByZXN1bHQuY29sb3IueCwgeHJnYi56eXh3LCBt
YXRyaXhbMF07XG4iCisgICAgIkRQNCByZXN1bHQuY29sb3IueSwgeHJnYi56eXh3LCBtYXRyaXhb
MV07XG4iCisgICAgIkRQNCByZXN1bHQuY29sb3IueiwgeHJnYi56eXh3LCBtYXRyaXhbMl07XG4i
CisgICAgIkVORCI7CisKKy8vIFBhaW50cyBhbiBBUkdCIGZyYW1lLgorc3RhdGljIGNvbnN0IGNo
YXIgKnF0X2FyYmZwX2FyZ2JTaGFkZXJQcm9ncmFtID0KKyAgICAiISFBUkJmcDEuMFxuIgorICAg
ICJQQVJBTSBtYXRyaXhbNF0gPSB7IHByb2dyYW0ubG9jYWxbMC4uMl0sIgorICAgICJ7IDAuMCwg
MC4wLCAwLjAsIDEuMCB9IH07XG4iCisgICAgIlRFTVAgYXJnYjtcbiIKKyAgICAiVEVYIGFyZ2Is
IGZyYWdtZW50LnRleGNvb3JkWzBdLCB0ZXh0dXJlWzBdLCAyRDtcbiIKKyAgICAiTU9WIGFyZ2Iu
dywgbWF0cml4WzNdLnc7XG4iCisgICAgIkRQNCByZXN1bHQuY29sb3IueCwgYXJnYi56eXh3LCBt
YXRyaXhbMF07XG4iCisgICAgIkRQNCByZXN1bHQuY29sb3IueSwgYXJnYi56eXh3LCBtYXRyaXhb
MV07XG4iCisgICAgIkRQNCByZXN1bHQuY29sb3IueiwgYXJnYi56eXh3LCBtYXRyaXhbMl07XG4i
CisgICAgIlRFWCByZXN1bHQuY29sb3IudywgZnJhZ21lbnQudGV4Y29vcmRbMF0sIHRleHR1cmUs
IDJEO1xuIgorICAgICJFTkQiOworCisvLyBQYWludHMgYW4gUkdCKEEpIGZyYW1lLgorc3RhdGlj
IGNvbnN0IGNoYXIgKnF0X2FyYmZwX3JnYlNoYWRlclByb2dyYW0gPQorICAgICIhIUFSQmZwMS4w
XG4iCisgICAgIlBBUkFNIG1hdHJpeFs0XSA9IHsgcHJvZ3JhbS5sb2NhbFswLi4yXSwiCisgICAg
InsgMC4wLCAwLjAsIDAuMCwgMS4wIH0gfTtcbiIKKyAgICAiVEVNUCByZ2I7XG4iCisgICAgIlRF
WCByZ2IsIGZyYWdtZW50LnRleGNvb3JkWzBdLCB0ZXh0dXJlWzBdLCAyRDtcbiIKKyAgICAiTU9W
IHJnYi53LCBtYXRyaXhbM10udztcbiIKKyAgICAiRFA0IHJlc3VsdC5jb2xvci54LCByZ2IsIG1h
dHJpeFswXTtcbiIKKyAgICAiRFA0IHJlc3VsdC5jb2xvci55LCByZ2IsIG1hdHJpeFsxXTtcbiIK
KyAgICAiRFA0IHJlc3VsdC5jb2xvci56LCByZ2IsIG1hdHJpeFsyXTtcbiIKKyAgICAiVEVYIHJl
c3VsdC5jb2xvci53LCBmcmFnbWVudC50ZXhjb29yZFswXSwgdGV4dHVyZSwgMkQ7XG4iCisgICAg
IkVORCI7CisKKy8vIFBhaW50cyBhIFlVVjQyMFAgb3IgWVYxMiBmcmFtZS4KK3N0YXRpYyBjb25z
dCBjaGFyICpxdF9hcmJmcF95dXZQbGFuYXJTaGFkZXJQcm9ncmFtID0KKyAgICAiISFBUkJmcDEu
MFxuIgorICAgICJQQVJBTSBtYXRyaXhbNF0gPSB7IHByb2dyYW0ubG9jYWxbMC4uMl0sIgorICAg
ICJ7IDAuMCwgMC4wLCAwLjAsIDEuMCB9IH07XG4iCisgICAgIlRFTVAgeXV2O1xuIgorICAgICJU
RVggeXV2LngsIGZyYWdtZW50LnRleGNvb3JkWzBdLCB0ZXh0dXJlWzBdLCAyRDtcbiIKKyAgICAi
VEVYIHl1di55LCBmcmFnbWVudC50ZXhjb29yZFswXSwgdGV4dHVyZVsxXSwgMkQ7XG4iCisgICAg
IlRFWCB5dXYueiwgZnJhZ21lbnQudGV4Y29vcmRbMF0sIHRleHR1cmVbMl0sIDJEO1xuIgorICAg
ICJNT1YgeXV2LncsIG1hdHJpeFszXS53O1xuIgorICAgICJEUDQgcmVzdWx0LmNvbG9yLngsIHl1
diwgbWF0cml4WzBdO1xuIgorICAgICJEUDQgcmVzdWx0LmNvbG9yLnksIHl1diwgbWF0cml4WzFd
O1xuIgorICAgICJEUDQgcmVzdWx0LmNvbG9yLnosIHl1diwgbWF0cml4WzJdO1xuIgorICAgICJF
TkQiOworCisKK2NsYXNzIFFWaWRlb1N1cmZhY2VBcmJGcFBhaW50ZXIgOiBwdWJsaWMgUVZpZGVv
U3VyZmFjZUdMUGFpbnRlciB7CitwdWJsaWM6CisgICAgUVZpZGVvU3VyZmFjZUFyYkZwUGFpbnRl
cihRR0xDb250ZXh0ICpjb250ZXh0KTsKKworICAgIFFBYnN0cmFjdFZpZGVvU3VyZmFjZTo6RXJy
b3Igc3RhcnQoY29uc3QgUVZpZGVvU3VyZmFjZUZvcm1hdCAmZm9ybWF0KTsKKyAgICB2b2lkIHN0
b3AoKTsKKworICAgIFFBYnN0cmFjdFZpZGVvU3VyZmFjZTo6RXJyb3IgcGFpbnQoCisgICAgICAg
ICAgICBjb25zdCBRUmVjdEYgJnRhcmdldCwgUVBhaW50ZXIgKnBhaW50ZXIsIGNvbnN0IFFSZWN0
RiAmc291cmNlKTsKKworcHJpdmF0ZToKKyAgICB0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpfZ2xQ
cm9ncmFtU3RyaW5nQVJCKSAoR0xlbnVtLCBHTGVudW0sIEdMc2l6ZWksIGNvbnN0IEdMdm9pZCAq
KTsKKyAgICB0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpfZ2xCaW5kUHJvZ3JhbUFSQikgKEdMZW51
bSwgR0x1aW50KTsKKyAgICB0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpfZ2xEZWxldGVQcm9ncmFt
c0FSQikgKEdMc2l6ZWksIGNvbnN0IEdMdWludCAqKTsKKyAgICB0eXBlZGVmIHZvaWQgKEFQSUVO
VFJZICpfZ2xHZW5Qcm9ncmFtc0FSQikgKEdMc2l6ZWksIEdMdWludCAqKTsKKyAgICB0eXBlZGVm
IHZvaWQgKEFQSUVOVFJZICpfZ2xQcm9ncmFtTG9jYWxQYXJhbWV0ZXI0ZkFSQikgKAorICAgICAg
ICAgICAgR0xlbnVtLCBHTHVpbnQsIEdMZmxvYXQsIEdMZmxvYXQsIEdMZmxvYXQsIEdMZmxvYXQp
OworICAgIHR5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKl9nbEFjdGl2ZVRleHR1cmUpIChHTGVudW0p
OworCisgICAgX2dsUHJvZ3JhbVN0cmluZ0FSQiBnbFByb2dyYW1TdHJpbmdBUkI7CisgICAgX2ds
QmluZFByb2dyYW1BUkIgZ2xCaW5kUHJvZ3JhbUFSQjsKKyAgICBfZ2xEZWxldGVQcm9ncmFtc0FS
QiBnbERlbGV0ZVByb2dyYW1zQVJCOworICAgIF9nbEdlblByb2dyYW1zQVJCIGdsR2VuUHJvZ3Jh
bXNBUkI7CisgICAgX2dsUHJvZ3JhbUxvY2FsUGFyYW1ldGVyNGZBUkIgZ2xQcm9ncmFtTG9jYWxQ
YXJhbWV0ZXI0ZkFSQjsKKworICAgIEdMdWludCBtX3Byb2dyYW1JZDsKKyAgICBRU2l6ZSBtX2Zy
YW1lU2l6ZTsKK307CisKK1FWaWRlb1N1cmZhY2VBcmJGcFBhaW50ZXI6OlFWaWRlb1N1cmZhY2VB
cmJGcFBhaW50ZXIoUUdMQ29udGV4dCAqY29udGV4dCkKKyAgICA6IFFWaWRlb1N1cmZhY2VHTFBh
aW50ZXIoY29udGV4dCkKKyAgICAsIG1fcHJvZ3JhbUlkKDApCit7CisgICAgZ2xQcm9ncmFtU3Ry
aW5nQVJCID0gKF9nbFByb2dyYW1TdHJpbmdBUkIpIG1fY29udGV4dC0+Z2V0UHJvY0FkZHJlc3Mo
CisgICAgICAgICAgICAgICAgUUxhdGluMVN0cmluZygiZ2xQcm9ncmFtU3RyaW5nQVJCIikpOwor
ICAgIGdsQmluZFByb2dyYW1BUkIgPSAoX2dsQmluZFByb2dyYW1BUkIpIG1fY29udGV4dC0+Z2V0
UHJvY0FkZHJlc3MoCisgICAgICAgICAgICAgICAgUUxhdGluMVN0cmluZygiZ2xCaW5kUHJvZ3Jh
bUFSQiIpKTsKKyAgICBnbERlbGV0ZVByb2dyYW1zQVJCID0gKF9nbERlbGV0ZVByb2dyYW1zQVJC
KSBtX2NvbnRleHQtPmdldFByb2NBZGRyZXNzKAorICAgICAgICAgICAgICAgIFFMYXRpbjFTdHJp
bmcoImdsRGVsZXRlUHJvZ3JhbXNBUkIiKSk7CisgICAgZ2xHZW5Qcm9ncmFtc0FSQiA9IChfZ2xH
ZW5Qcm9ncmFtc0FSQikgbV9jb250ZXh0LT5nZXRQcm9jQWRkcmVzcygKKyAgICAgICAgICAgICAg
ICBRTGF0aW4xU3RyaW5nKCJnbEdlblByb2dyYW1zQVJCIikpOworICAgIGdsUHJvZ3JhbUxvY2Fs
UGFyYW1ldGVyNGZBUkIgPSAoX2dsUHJvZ3JhbUxvY2FsUGFyYW1ldGVyNGZBUkIpIG1fY29udGV4
dC0+Z2V0UHJvY0FkZHJlc3MoCisgICAgICAgICAgICAgICAgUUxhdGluMVN0cmluZygiZ2xQcm9n
cmFtTG9jYWxQYXJhbWV0ZXI0ZkFSQiIpKTsKKworICAgIG1faW1hZ2VQaXhlbEZvcm1hdHMKKyAg
ICAgICAgICAgIDw8IFFWaWRlb0ZyYW1lOjpGb3JtYXRfUkdCMzIKKyAgICAgICAgICAgIDw8IFFW
aWRlb0ZyYW1lOjpGb3JtYXRfQVJHQjMyCisgICAgICAgICAgICA8PCBRVmlkZW9GcmFtZTo6Rm9y
bWF0X1JHQjI0CisgICAgICAgICAgICA8PCBRVmlkZW9GcmFtZTo6Rm9ybWF0X1JHQjU2NQorICAg
ICAgICAgICAgPDwgUVZpZGVvRnJhbWU6OkZvcm1hdF9ZVjEyCisgICAgICAgICAgICA8PCBRVmlk
ZW9GcmFtZTo6Rm9ybWF0X1lVVjQyMFA7CisgICAgbV9nbFBpeGVsRm9ybWF0cworICAgICAgICAg
ICAgPDwgUVZpZGVvRnJhbWU6OkZvcm1hdF9SR0IzMgorICAgICAgICAgICAgPDwgUVZpZGVvRnJh
bWU6OkZvcm1hdF9BUkdCMzI7Cit9CisKK1FBYnN0cmFjdFZpZGVvU3VyZmFjZTo6RXJyb3IgUVZp
ZGVvU3VyZmFjZUFyYkZwUGFpbnRlcjo6c3RhcnQoY29uc3QgUVZpZGVvU3VyZmFjZUZvcm1hdCAm
Zm9ybWF0KQoreworICAgIFFfQVNTRVJUKCFtX3RleHR1cmVDb3VudCk7CisKKyAgICBRQWJzdHJh
Y3RWaWRlb1N1cmZhY2U6OkVycm9yIGVycm9yID0gUUFic3RyYWN0VmlkZW9TdXJmYWNlOjpOb0Vy
cm9yOworCisgICAgbV9jb250ZXh0LT5tYWtlQ3VycmVudCgpOworCisgICAgY29uc3QgY2hhciAq
cHJvZ3JhbSA9IDA7CisKKyAgICBpZiAoZm9ybWF0LmhhbmRsZVR5cGUoKSA9PSBRQWJzdHJhY3RW
aWRlb0J1ZmZlcjo6Tm9IYW5kbGUpIHsKKyAgICAgICAgc3dpdGNoIChmb3JtYXQucGl4ZWxGb3Jt
YXQoKSkgeworICAgICAgICBjYXNlIFFWaWRlb0ZyYW1lOjpGb3JtYXRfUkdCMzI6CisgICAgICAg
ICAgICBpbml0UmdiVGV4dHVyZUluZm8oR0xfUkdCQSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllU
RSwgZm9ybWF0LmZyYW1lU2l6ZSgpKTsKKyAgICAgICAgICAgIHByb2dyYW0gPSBxdF9hcmJmcF94
cmdiU2hhZGVyUHJvZ3JhbTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFFWaWRl
b0ZyYW1lOjpGb3JtYXRfQVJHQjMyOgorICAgICAgICAgICAgaW5pdFJnYlRleHR1cmVJbmZvKEdM
X1JHQkEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGZvcm1hdC5mcmFtZVNpemUoKSk7Cisg
ICAgICAgICAgICBwcm9ncmFtID0gcXRfYXJiZnBfYXJnYlNoYWRlclByb2dyYW07CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBRVmlkZW9GcmFtZTo6Rm9ybWF0X1JHQjI0OgorICAg
ICAgICAgICAgaW5pdFJnYlRleHR1cmVJbmZvKEdMX1JHQjgsIEdMX1JHQkEsIEdMX1VOU0lHTkVE
X0JZVEUsIGZvcm1hdC5mcmFtZVNpemUoKSk7CisgICAgICAgICAgICBwcm9ncmFtID0gcXRfYXJi
ZnBfYXJnYlNoYWRlclByb2dyYW07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBR
VmlkZW9GcmFtZTo6Rm9ybWF0X1JHQjU2NToKKyAgICAgICAgICAgIGluaXRSZ2JUZXh0dXJlSW5m
byhHTF9SR0IsIEdMX1JHQiwgR0xfVU5TSUdORURfU0hPUlRfNV82XzUsIGZvcm1hdC5mcmFtZVNp
emUoKSk7CisgICAgICAgICAgICBwcm9ncmFtID0gcXRfYXJiZnBfcmdiU2hhZGVyUHJvZ3JhbTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFFWaWRlb0ZyYW1lOjpGb3JtYXRfWVYx
MjoKKyAgICAgICAgICAgIGluaXRZdjEyVGV4dHVyZUluZm8oZm9ybWF0LmZyYW1lU2l6ZSgpKTsK
KyAgICAgICAgICAgIHByb2dyYW0gPSBxdF9hcmJmcF95dXZQbGFuYXJTaGFkZXJQcm9ncmFtOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUVZpZGVvRnJhbWU6OkZvcm1hdF9ZVVY0
MjBQOgorICAgICAgICAgICAgaW5pdFl1djQyMFBUZXh0dXJlSW5mbyhmb3JtYXQuZnJhbWVTaXpl
KCkpOworICAgICAgICAgICAgcHJvZ3JhbSA9IHF0X2FyYmZwX3l1dlBsYW5hclNoYWRlclByb2dy
YW07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChmb3JtYXQuaGFuZGxlVHlwZSgpID09IFFB
YnN0cmFjdFZpZGVvQnVmZmVyOjpHTFRleHR1cmVIYW5kbGUpIHsKKyAgICAgICAgc3dpdGNoIChm
b3JtYXQucGl4ZWxGb3JtYXQoKSkgeworICAgICAgICBjYXNlIFFWaWRlb0ZyYW1lOjpGb3JtYXRf
UkdCMzI6CisgICAgICAgIGNhc2UgUVZpZGVvRnJhbWU6OkZvcm1hdF9BUkdCMzI6CisgICAgICAg
ICAgICBtX3l1diA9IGZhbHNlOworICAgICAgICAgICAgbV90ZXh0dXJlQ291bnQgPSAxOworICAg
ICAgICAgICAgcHJvZ3JhbSA9IHF0X2FyYmZwX3JnYlNoYWRlclByb2dyYW07CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgfQorCisgICAgaWYgKCFwcm9ncmFtKQorICAgICAgICBlcnJvciA9IFFBYnN0cmFjdFZp
ZGVvU3VyZmFjZTo6VW5zdXBwb3J0ZWRGb3JtYXRFcnJvcjsKKyAgICBlbHNlIHsKKyAgICAgICAg
Z2xHZW5Qcm9ncmFtc0FSQigxLCAmbV9wcm9ncmFtSWQpOworCisgICAgICAgIEdMZW51bSBnbEVy
cm9yID0gZ2xHZXRFcnJvcigpOworICAgICAgICBpZiAoZ2xFcnJvciAhPSBHTF9OT19FUlJPUikg
eworICAgICAgICAgICAgcVdhcm5pbmcoIlFQYWludGVyVmlkZW9TdXJmYWNlOiBBUkJmYiBTaGFk
ZXIgYWxsb2NhdGlvbiBlcnJvciAleCIsIGludChnbEVycm9yKSk7CisgICAgICAgICAgICBtX3Rl
eHR1cmVDb3VudCA9IDA7CisgICAgICAgICAgICBtX3Byb2dyYW1JZCA9IDA7CisKKyAgICAgICAg
ICAgIGVycm9yID0gUUFic3RyYWN0VmlkZW9TdXJmYWNlOjpSZXNvdXJjZUVycm9yOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgZ2xCaW5kUHJvZ3JhbUFSQihHTF9GUkFHTUVOVF9QUk9H
UkFNX0FSQiwgbV9wcm9ncmFtSWQpOworICAgICAgICAgICAgZ2xQcm9ncmFtU3RyaW5nQVJCKAor
ICAgICAgICAgICAgICAgICAgICBHTF9GUkFHTUVOVF9QUk9HUkFNX0FSQiwKKyAgICAgICAgICAg
ICAgICAgICAgR0xfUFJPR1JBTV9GT1JNQVRfQVNDSUlfQVJCLAorICAgICAgICAgICAgICAgICAg
ICBxc3RybGVuKHByb2dyYW0pLAorICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0
PGNvbnN0IEdMdm9pZCAqPihwcm9ncmFtKSk7CisKKyAgICAgICAgICAgIGlmICgoZ2xFcnJvciA9
IGdsR2V0RXJyb3IoKSkgIT0gR0xfTk9fRVJST1IpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBH
THVieXRlKiBlcnJvclN0cmluZyA9IGdsR2V0U3RyaW5nKEdMX1BST0dSQU1fRVJST1JfU1RSSU5H
X0FSQik7CisKKyAgICAgICAgICAgICAgICBxV2FybmluZygiUVBhaW50ZXJWaWRlb1N1cmZhY2U6
IEFSQmZwIFNoYWRlciBjb21waWxlIGVycm9yICV4LCAlcyIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50KGdsRXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgY2hhciAqPihlcnJvclN0cmluZykpOworICAgICAgICAgICAgICAgIGdsRGVs
ZXRlUHJvZ3JhbXNBUkIoMSwgJm1fcHJvZ3JhbUlkKTsKKworICAgICAgICAgICAgICAgIG1fdGV4
dHVyZUNvdW50ID0gMDsKKyAgICAgICAgICAgICAgICBtX3Byb2dyYW1JZCA9IDA7CisKKyAgICAg
ICAgICAgICAgICBlcnJvciA9IFFBYnN0cmFjdFZpZGVvU3VyZmFjZTo6UmVzb3VyY2VFcnJvcjsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbV9oYW5kbGVUeXBlID0gZm9y
bWF0LmhhbmRsZVR5cGUoKTsKKyAgICAgICAgICAgICAgICBtX3NjYW5MaW5lRGlyZWN0aW9uID0g
Zm9ybWF0LnNjYW5MaW5lRGlyZWN0aW9uKCk7CisgICAgICAgICAgICAgICAgbV9mcmFtZVNpemUg
PSBmb3JtYXQuZnJhbWVTaXplKCk7CisKKyAgICAgICAgICAgICAgICBpZiAobV9oYW5kbGVUeXBl
ID09IFFBYnN0cmFjdFZpZGVvQnVmZmVyOjpOb0hhbmRsZSkKKyAgICAgICAgICAgICAgICAgICAg
Z2xHZW5UZXh0dXJlcyhtX3RleHR1cmVDb3VudCwgbV90ZXh0dXJlSWRzKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBRVmlk
ZW9TdXJmYWNlQXJiRnBQYWludGVyOjpzdG9wKCkKK3sKKyAgICBtX2NvbnRleHQtPm1ha2VDdXJy
ZW50KCk7CisKKyAgICBpZiAobV9oYW5kbGVUeXBlICE9IFFBYnN0cmFjdFZpZGVvQnVmZmVyOjpH
TFRleHR1cmVIYW5kbGUpCisgICAgICAgIGdsRGVsZXRlVGV4dHVyZXMobV90ZXh0dXJlQ291bnQs
IG1fdGV4dHVyZUlkcyk7CisgICAgZ2xEZWxldGVQcm9ncmFtc0FSQigxLCAmbV9wcm9ncmFtSWQp
OworCisgICAgbV90ZXh0dXJlQ291bnQgPSAwOworICAgIG1fcHJvZ3JhbUlkID0gMDsKKyAgICBt
X2hhbmRsZVR5cGUgPSBRQWJzdHJhY3RWaWRlb0J1ZmZlcjo6Tm9IYW5kbGU7Cit9CisKK1FBYnN0
cmFjdFZpZGVvU3VyZmFjZTo6RXJyb3IgUVZpZGVvU3VyZmFjZUFyYkZwUGFpbnRlcjo6cGFpbnQo
CisgICAgICAgIGNvbnN0IFFSZWN0RiAmdGFyZ2V0LCBRUGFpbnRlciAqcGFpbnRlciwgY29uc3Qg
UVJlY3RGICZzb3VyY2UpCit7CisgICAgaWYgKG1fZnJhbWUuaXNWYWxpZCgpKSB7CisgICAgICAg
IHBhaW50ZXItPmJlZ2luTmF0aXZlUGFpbnRpbmcoKTsKKworICAgICAgICBjb25zdCBmbG9hdCB0
eExlZnQgPSBzb3VyY2UubGVmdCgpIC8gbV9mcmFtZVNpemUud2lkdGgoKTsKKyAgICAgICAgY29u
c3QgZmxvYXQgdHhSaWdodCA9IHNvdXJjZS5yaWdodCgpIC8gbV9mcmFtZVNpemUud2lkdGgoKTsK
KyAgICAgICAgY29uc3QgZmxvYXQgdHhUb3AgPSBtX3NjYW5MaW5lRGlyZWN0aW9uID09IFFWaWRl
b1N1cmZhY2VGb3JtYXQ6OlRvcFRvQm90dG9tCisgICAgICAgICAgICAgICAgPyBzb3VyY2UudG9w
KCkgLyBtX2ZyYW1lU2l6ZS5oZWlnaHQoKQorICAgICAgICAgICAgICAgIDogc291cmNlLmJvdHRv
bSgpIC8gbV9mcmFtZVNpemUuaGVpZ2h0KCk7CisgICAgICAgIGNvbnN0IGZsb2F0IHR4Qm90dG9t
ID0gbV9zY2FuTGluZURpcmVjdGlvbiA9PSBRVmlkZW9TdXJmYWNlRm9ybWF0OjpUb3BUb0JvdHRv
bQorICAgICAgICAgICAgICAgID8gc291cmNlLmJvdHRvbSgpIC8gbV9mcmFtZVNpemUuaGVpZ2h0
KCkKKyAgICAgICAgICAgICAgICA6IHNvdXJjZS50b3AoKSAvIG1fZnJhbWVTaXplLmhlaWdodCgp
OworCisgICAgICAgIGNvbnN0IGZsb2F0IHR4QXJyYXlbXSA9CisgICAgICAgIHsKKyAgICAgICAg
ICAgIHR4TGVmdCAsIHR4Qm90dG9tLAorICAgICAgICAgICAgdHhSaWdodCwgdHhCb3R0b20sCisg
ICAgICAgICAgICB0eExlZnQgLCB0eFRvcCwKKyAgICAgICAgICAgIHR4UmlnaHQsIHR4VG9wCisg
ICAgICAgIH07CisKKyAgICAgICAgY29uc3QgR0xmbG9hdCB2VG9wID0gbV9zY2FuTGluZURpcmVj
dGlvbiA9PSBRVmlkZW9TdXJmYWNlRm9ybWF0OjpUb3BUb0JvdHRvbQorICAgICAgICAgICAgICAg
ID8gdGFyZ2V0LnRvcCgpCisgICAgICAgICAgICAgICAgOiB0YXJnZXQuYm90dG9tKCkgKyAxOwor
ICAgICAgICBjb25zdCBHTGZsb2F0IHZCb3R0b20gPSBtX3NjYW5MaW5lRGlyZWN0aW9uID09IFFW
aWRlb1N1cmZhY2VGb3JtYXQ6OlRvcFRvQm90dG9tCisgICAgICAgICAgICAgICAgPyB0YXJnZXQu
Ym90dG9tKCkgKyAxCisgICAgICAgICAgICAgICAgOiB0YXJnZXQudG9wKCk7CisKKyAgICAgICAg
Y29uc3QgR0xmbG9hdCB2QXJyYXlbXSA9CisgICAgICAgIHsKKyAgICAgICAgICAgIHRhcmdldC5s
ZWZ0KCkgICAgICwgdkJvdHRvbSwKKyAgICAgICAgICAgIHRhcmdldC5yaWdodCgpICsgMSwgdkJv
dHRvbSwKKyAgICAgICAgICAgIHRhcmdldC5sZWZ0KCkgICAgICwgdlRvcCwKKyAgICAgICAgICAg
IHRhcmdldC5yaWdodCgpICsgMSwgdlRvcAorICAgICAgICB9OworCisgICAgICAgIGdsRW5hYmxl
KEdMX0ZSQUdNRU5UX1BST0dSQU1fQVJCKTsKKyAgICAgICAgZ2xCaW5kUHJvZ3JhbUFSQihHTF9G
UkFHTUVOVF9QUk9HUkFNX0FSQiwgbV9wcm9ncmFtSWQpOworCisgICAgICAgIGdsUHJvZ3JhbUxv
Y2FsUGFyYW1ldGVyNGZBUkIoCisgICAgICAgICAgICAgICAgR0xfRlJBR01FTlRfUFJPR1JBTV9B
UkIsCisgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICBtX2NvbG9yTWF0cml4KDAs
IDApLAorICAgICAgICAgICAgICAgIG1fY29sb3JNYXRyaXgoMCwgMSksCisgICAgICAgICAgICAg
ICAgbV9jb2xvck1hdHJpeCgwLCAyKSwKKyAgICAgICAgICAgICAgICBtX2NvbG9yTWF0cml4KDAs
IDMpKTsKKyAgICAgICAgZ2xQcm9ncmFtTG9jYWxQYXJhbWV0ZXI0ZkFSQigKKyAgICAgICAgICAg
ICAgICBHTF9GUkFHTUVOVF9QUk9HUkFNX0FSQiwKKyAgICAgICAgICAgICAgICAxLAorICAgICAg
ICAgICAgICAgIG1fY29sb3JNYXRyaXgoMSwgMCksCisgICAgICAgICAgICAgICAgbV9jb2xvck1h
dHJpeCgxLCAxKSwKKyAgICAgICAgICAgICAgICBtX2NvbG9yTWF0cml4KDEsIDIpLAorICAgICAg
ICAgICAgICAgIG1fY29sb3JNYXRyaXgoMSwgMykpOworICAgICAgICBnbFByb2dyYW1Mb2NhbFBh
cmFtZXRlcjRmQVJCKAorICAgICAgICAgICAgICAgIEdMX0ZSQUdNRU5UX1BST0dSQU1fQVJCLAor
ICAgICAgICAgICAgICAgIDIsCisgICAgICAgICAgICAgICAgbV9jb2xvck1hdHJpeCgyLCAwKSwK
KyAgICAgICAgICAgICAgICBtX2NvbG9yTWF0cml4KDIsIDEpLAorICAgICAgICAgICAgICAgIG1f
Y29sb3JNYXRyaXgoMiwgMiksCisgICAgICAgICAgICAgICAgbV9jb2xvck1hdHJpeCgyLCAzKSk7
CisKKyAgICAgICAgZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsKKyAgICAgICAgZ2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmVJZHNbMF0pOworCisgICAgICAgIGlmICht
X3RleHR1cmVDb3VudCA9PSAzKSB7CisgICAgICAgICAgICBnbEFjdGl2ZVRleHR1cmUoR0xfVEVY
VFVSRTEpOworICAgICAgICAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1
cmVJZHNbMV0pOworICAgICAgICAgICAgZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUyKTsKKyAg
ICAgICAgICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlSWRzWzJdKTsK
KyAgICAgICAgICAgIGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCk7CisgICAgICAgIH0KKwor
ICAgICAgICBnbFZlcnRleFBvaW50ZXIoMiwgR0xfRkxPQVQsIDAsIHZBcnJheSk7CisgICAgICAg
IGdsVGV4Q29vcmRQb2ludGVyKDIsIEdMX0ZMT0FULCAwLCB0eEFycmF5KTsKKworICAgICAgICBn
bEVuYWJsZUNsaWVudFN0YXRlKEdMX1ZFUlRFWF9BUlJBWSk7CisgICAgICAgIGdsRW5hYmxlQ2xp
ZW50U3RhdGUoR0xfVEVYVFVSRV9DT09SRF9BUlJBWSk7CisKKyAgICAgICAgZ2xEcmF3QXJyYXlz
KEdMX1RSSUFOR0xFX1NUUklQLCAwLCA0KTsKKworICAgICAgICBnbERpc2FibGVDbGllbnRTdGF0
ZShHTF9URVhUVVJFX0NPT1JEX0FSUkFZKTsKKyAgICAgICAgZ2xEaXNhYmxlQ2xpZW50U3RhdGUo
R0xfVkVSVEVYX0FSUkFZKTsKKyAgICAgICAgZ2xEaXNhYmxlKEdMX0ZSQUdNRU5UX1BST0dSQU1f
QVJCKTsKKworICAgICAgICBwYWludGVyLT5lbmROYXRpdmVQYWludGluZygpOworICAgIH0KKyAg
ICByZXR1cm4gUUFic3RyYWN0VmlkZW9TdXJmYWNlOjpOb0Vycm9yOworfQorCisjZW5kaWYKKwor
c3RhdGljIGNvbnN0IGNoYXIgKnF0X2dsc2xfdmVydGV4U2hhZGVyUHJvZ3JhbSA9CisgICAgICAg
ICJhdHRyaWJ1dGUgaGlnaHAgdmVjNCB2ZXJ0ZXhDb29yZEFycmF5O1xuIgorICAgICAgICAiYXR0
cmlidXRlIGhpZ2hwIHZlYzIgdGV4dHVyZUNvb3JkQXJyYXk7XG4iCisgICAgICAgICJ1bmlmb3Jt
IGhpZ2hwIG1hdDQgcG9zaXRpb25NYXRyaXg7XG4iCisgICAgICAgICJ2YXJ5aW5nIGhpZ2hwIHZl
YzIgdGV4dHVyZUNvb3JkO1xuIgorICAgICAgICAidm9pZCBtYWluKHZvaWQpXG4iCisgICAgICAg
ICJ7XG4iCisgICAgICAgICIgICBnbF9Qb3NpdGlvbiA9IHBvc2l0aW9uTWF0cml4ICogdmVydGV4
Q29vcmRBcnJheTtcbiIKKyAgICAgICAgIiAgIHRleHR1cmVDb29yZCA9IHRleHR1cmVDb29yZEFy
cmF5O1xuIgorICAgICAgICAifVxuIjsKKworLy8gUGFpbnRzIGFuIFJHQjMyIGZyYW1lCitzdGF0
aWMgY29uc3QgY2hhciAqcXRfZ2xzbF94cmdiU2hhZGVyUHJvZ3JhbSA9CisgICAgICAgICJ1bmlm
b3JtIHNhbXBsZXIyRCB0ZXhSZ2I7XG4iCisgICAgICAgICJ1bmlmb3JtIG1lZGl1bXAgbWF0NCBj
b2xvck1hdHJpeDtcbiIKKyAgICAgICAgInZhcnlpbmcgaGlnaHAgdmVjMiB0ZXh0dXJlQ29vcmQ7
XG4iCisgICAgICAgICJ2b2lkIG1haW4odm9pZClcbiIKKyAgICAgICAgIntcbiIKKyAgICAgICAg
IiAgICBoaWdocCB2ZWM0IGNvbG9yID0gdmVjNCh0ZXh0dXJlMkQodGV4UmdiLCB0ZXh0dXJlQ29v
cmQuc3QpLmJnciwgMS4wKTtcbiIKKyAgICAgICAgIiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvck1h
dHJpeCAqIGNvbG9yO1xuIgorICAgICAgICAifVxuIjsKKworLy8gUGFpbnRzIGFuIEFSR0IgZnJh
bWUuCitzdGF0aWMgY29uc3QgY2hhciAqcXRfZ2xzbF9hcmdiU2hhZGVyUHJvZ3JhbSA9CisgICAg
ICAgICJ1bmlmb3JtIHNhbXBsZXIyRCB0ZXhSZ2I7XG4iCisgICAgICAgICJ1bmlmb3JtIG1lZGl1
bXAgbWF0NCBjb2xvck1hdHJpeDtcbiIKKyAgICAgICAgInZhcnlpbmcgaGlnaHAgdmVjMiB0ZXh0
dXJlQ29vcmQ7XG4iCisgICAgICAgICJ2b2lkIG1haW4odm9pZClcbiIKKyAgICAgICAgIntcbiIK
KyAgICAgICAgIiAgICBoaWdocCB2ZWM0IGNvbG9yID0gdmVjNCh0ZXh0dXJlMkQodGV4UmdiLCB0
ZXh0dXJlQ29vcmQuc3QpLmJnciwgMS4wKTtcbiIKKyAgICAgICAgIiAgICBjb2xvciA9IGNvbG9y
TWF0cml4ICogY29sb3I7XG4iCisgICAgICAgICIgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xv
ci5yZ2IsIHRleHR1cmUyRCh0ZXhSZ2IsIHRleHR1cmVDb29yZC5zdCkuYSk7XG4iCisgICAgICAg
ICJ9XG4iOworCisvLyBQYWludHMgYW4gUkdCKEEpIGZyYW1lLgorc3RhdGljIGNvbnN0IGNoYXIg
KnF0X2dsc2xfcmdiU2hhZGVyUHJvZ3JhbSA9CisgICAgICAgICJ1bmlmb3JtIHNhbXBsZXIyRCB0
ZXhSZ2I7XG4iCisgICAgICAgICJ1bmlmb3JtIG1lZGl1bXAgbWF0NCBjb2xvck1hdHJpeDtcbiIK
KyAgICAgICAgInZhcnlpbmcgaGlnaHAgdmVjMiB0ZXh0dXJlQ29vcmQ7XG4iCisgICAgICAgICJ2
b2lkIG1haW4odm9pZClcbiIKKyAgICAgICAgIntcbiIKKyAgICAgICAgIiAgICBoaWdocCB2ZWM0
IGNvbG9yID0gdmVjNCh0ZXh0dXJlMkQodGV4UmdiLCB0ZXh0dXJlQ29vcmQuc3QpLnJnYiwgMS4w
KTtcbiIKKyAgICAgICAgIiAgICBjb2xvciA9IGNvbG9yTWF0cml4ICogY29sb3I7XG4iCisgICAg
ICAgICIgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvci5yZ2IsIHRleHR1cmUyRCh0ZXhSZ2Is
IHRleHR1cmVDb29yZC5zdCkuYSk7XG4iCisgICAgICAgICJ9XG4iOworCisvLyBQYWludHMgYSBZ
VVY0MjBQIG9yIFlWMTIgZnJhbWUuCitzdGF0aWMgY29uc3QgY2hhciAqcXRfZ2xzbF95dXZQbGFu
YXJTaGFkZXJQcm9ncmFtID0KKyAgICAgICAgInVuaWZvcm0gc2FtcGxlcjJEIHRleFk7XG4iCisg
ICAgICAgICJ1bmlmb3JtIHNhbXBsZXIyRCB0ZXhVO1xuIgorICAgICAgICAidW5pZm9ybSBzYW1w
bGVyMkQgdGV4VjtcbiIKKyAgICAgICAgInVuaWZvcm0gbWVkaXVtcCBtYXQ0IGNvbG9yTWF0cml4
O1xuIgorICAgICAgICAidmFyeWluZyBoaWdocCB2ZWMyIHRleHR1cmVDb29yZDtcbiIKKyAgICAg
ICAgInZvaWQgbWFpbih2b2lkKVxuIgorICAgICAgICAie1xuIgorICAgICAgICAiICAgIGhpZ2hw
IHZlYzQgY29sb3IgPSB2ZWM0KFxuIgorICAgICAgICAiICAgICAgICAgICB0ZXh0dXJlMkQodGV4
WSwgdGV4dHVyZUNvb3JkLnN0KS5yLFxuIgorICAgICAgICAiICAgICAgICAgICB0ZXh0dXJlMkQo
dGV4VSwgdGV4dHVyZUNvb3JkLnN0KS5yLFxuIgorICAgICAgICAiICAgICAgICAgICB0ZXh0dXJl
MkQodGV4ViwgdGV4dHVyZUNvb3JkLnN0KS5yLFxuIgorICAgICAgICAiICAgICAgICAgICAxLjAp
O1xuIgorICAgICAgICAiICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yTWF0cml4ICogY29sb3I7XG4i
CisgICAgICAgICJ9XG4iOworCisKK2NsYXNzIFFWaWRlb1N1cmZhY2VHbHNsUGFpbnRlciA6IHB1
YmxpYyBRVmlkZW9TdXJmYWNlR0xQYWludGVyIHsKK3B1YmxpYzoKKyAgICBRVmlkZW9TdXJmYWNl
R2xzbFBhaW50ZXIoUUdMQ29udGV4dCAqY29udGV4dCk7CisKKyAgICBRQWJzdHJhY3RWaWRlb1N1
cmZhY2U6OkVycm9yIHN0YXJ0KGNvbnN0IFFWaWRlb1N1cmZhY2VGb3JtYXQgJmZvcm1hdCk7Cisg
ICAgdm9pZCBzdG9wKCk7CisKKyAgICBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6OkVycm9yIHBhaW50
KAorICAgICAgICAgICAgY29uc3QgUVJlY3RGICZ0YXJnZXQsIFFQYWludGVyICpwYWludGVyLCBj
b25zdCBRUmVjdEYgJnNvdXJjZSk7CisKK3ByaXZhdGU6CisgICAgUUdMU2hhZGVyUHJvZ3JhbSBt
X3Byb2dyYW07CisgICAgUVNpemUgbV9mcmFtZVNpemU7Cit9OworCitRVmlkZW9TdXJmYWNlR2xz
bFBhaW50ZXI6OlFWaWRlb1N1cmZhY2VHbHNsUGFpbnRlcihRR0xDb250ZXh0ICpjb250ZXh0KQor
ICAgIDogUVZpZGVvU3VyZmFjZUdMUGFpbnRlcihjb250ZXh0KQorICAgICwgbV9wcm9ncmFtKGNv
bnRleHQpCit7CisgICAgbV9pbWFnZVBpeGVsRm9ybWF0cworICAgICAgICAgICAgPDwgUVZpZGVv
RnJhbWU6OkZvcm1hdF9SR0IzMgorICAgICAgICAgICAgPDwgUVZpZGVvRnJhbWU6OkZvcm1hdF9B
UkdCMzIKKyNpZm5kZWYgUVRfT1BFTkdMX0VTCisgICAgICAgICAgICA8PCBRVmlkZW9GcmFtZTo6
Rm9ybWF0X1JHQjI0CisjZW5kaWYKKyAgICAgICAgICAgIDw8IFFWaWRlb0ZyYW1lOjpGb3JtYXRf
UkdCNTY1CisgICAgICAgICAgICA8PCBRVmlkZW9GcmFtZTo6Rm9ybWF0X1lWMTIKKyAgICAgICAg
ICAgIDw8IFFWaWRlb0ZyYW1lOjpGb3JtYXRfWVVWNDIwUDsKKyAgICBtX2dsUGl4ZWxGb3JtYXRz
CisgICAgICAgICAgICA8PCBRVmlkZW9GcmFtZTo6Rm9ybWF0X1JHQjMyCisgICAgICAgICAgICA8
PCBRVmlkZW9GcmFtZTo6Rm9ybWF0X0FSR0IzMjsKK30KKworUUFic3RyYWN0VmlkZW9TdXJmYWNl
OjpFcnJvciBRVmlkZW9TdXJmYWNlR2xzbFBhaW50ZXI6OnN0YXJ0KGNvbnN0IFFWaWRlb1N1cmZh
Y2VGb3JtYXQgJmZvcm1hdCkKK3sKKyAgICBRX0FTU0VSVCghbV90ZXh0dXJlQ291bnQpOworCisg
ICAgUUFic3RyYWN0VmlkZW9TdXJmYWNlOjpFcnJvciBlcnJvciA9IFFBYnN0cmFjdFZpZGVvU3Vy
ZmFjZTo6Tm9FcnJvcjsKKworICAgIG1fY29udGV4dC0+bWFrZUN1cnJlbnQoKTsKKworICAgIGNv
bnN0IGNoYXIgKmZyYWdtZW50UHJvZ3JhbSA9IDA7CisKKyAgICBpZiAoZm9ybWF0LmhhbmRsZVR5
cGUoKSA9PSBRQWJzdHJhY3RWaWRlb0J1ZmZlcjo6Tm9IYW5kbGUpIHsKKyAgICAgICAgc3dpdGNo
IChmb3JtYXQucGl4ZWxGb3JtYXQoKSkgeworICAgICAgICBjYXNlIFFWaWRlb0ZyYW1lOjpGb3Jt
YXRfUkdCMzI6CisgICAgICAgICAgICBpbml0UmdiVGV4dHVyZUluZm8oR0xfUkdCQSwgR0xfUkdC
QSwgR0xfVU5TSUdORURfQllURSwgZm9ybWF0LmZyYW1lU2l6ZSgpKTsKKyAgICAgICAgICAgIGZy
YWdtZW50UHJvZ3JhbSA9IHF0X2dsc2xfeHJnYlNoYWRlclByb2dyYW07CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBRVmlkZW9GcmFtZTo6Rm9ybWF0X0FSR0IzMjoKKyAgICAgICAg
ICAgIGluaXRSZ2JUZXh0dXJlSW5mbyhHTF9SR0JBLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRF
LCBmb3JtYXQuZnJhbWVTaXplKCkpOworICAgICAgICAgICAgZnJhZ21lbnRQcm9ncmFtID0gcXRf
Z2xzbF9hcmdiU2hhZGVyUHJvZ3JhbTsKKyAgICAgICAgICAgIGJyZWFrOworI2lmbmRlZiBRVF9P
UEVOR0xfRVMKKyAgICAgICAgY2FzZSBRVmlkZW9GcmFtZTo6Rm9ybWF0X1JHQjI0OgorICAgICAg
ICAgICAgaW5pdFJnYlRleHR1cmVJbmZvKEdMX1JHQjgsIEdMX1JHQiwgR0xfVU5TSUdORURfQllU
RSwgZm9ybWF0LmZyYW1lU2l6ZSgpKTsKKyAgICAgICAgICAgIGZyYWdtZW50UHJvZ3JhbSA9IHF0
X2dsc2xfcmdiU2hhZGVyUHJvZ3JhbTsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAg
ICAgIGNhc2UgUVZpZGVvRnJhbWU6OkZvcm1hdF9SR0I1NjU6CisgICAgICAgICAgICBpbml0Umdi
VGV4dHVyZUluZm8oR0xfUkdCLCBHTF9SR0IsIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81LCBmb3Jt
YXQuZnJhbWVTaXplKCkpOworICAgICAgICAgICAgZnJhZ21lbnRQcm9ncmFtID0gcXRfZ2xzbF9y
Z2JTaGFkZXJQcm9ncmFtOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUVZpZGVv
RnJhbWU6OkZvcm1hdF9ZVjEyOgorICAgICAgICAgICAgaW5pdFl2MTJUZXh0dXJlSW5mbyhmb3Jt
YXQuZnJhbWVTaXplKCkpOworICAgICAgICAgICAgZnJhZ21lbnRQcm9ncmFtID0gcXRfZ2xzbF95
dXZQbGFuYXJTaGFkZXJQcm9ncmFtOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
UVZpZGVvRnJhbWU6OkZvcm1hdF9ZVVY0MjBQOgorICAgICAgICAgICAgaW5pdFl1djQyMFBUZXh0
dXJlSW5mbyhmb3JtYXQuZnJhbWVTaXplKCkpOworICAgICAgICAgICAgZnJhZ21lbnRQcm9ncmFt
ID0gcXRfZ2xzbF95dXZQbGFuYXJTaGFkZXJQcm9ncmFtOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0gZWxz
ZSBpZiAoZm9ybWF0LmhhbmRsZVR5cGUoKSA9PSBRQWJzdHJhY3RWaWRlb0J1ZmZlcjo6R0xUZXh0
dXJlSGFuZGxlKSB7CisgICAgICAgIHN3aXRjaCAoZm9ybWF0LnBpeGVsRm9ybWF0KCkpIHsKKyAg
ICAgICAgY2FzZSBRVmlkZW9GcmFtZTo6Rm9ybWF0X1JHQjMyOgorICAgICAgICBjYXNlIFFWaWRl
b0ZyYW1lOjpGb3JtYXRfQVJHQjMyOgorICAgICAgICAgICAgbV95dXYgPSBmYWxzZTsKKyAgICAg
ICAgICAgIG1fdGV4dHVyZUNvdW50ID0gMTsKKyAgICAgICAgICAgIGZyYWdtZW50UHJvZ3JhbSA9
IHF0X2dsc2xfcmdiU2hhZGVyUHJvZ3JhbTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAo
IWZyYWdtZW50UHJvZ3JhbSkgeworICAgICAgICBlcnJvciA9IFFBYnN0cmFjdFZpZGVvU3VyZmFj
ZTo6VW5zdXBwb3J0ZWRGb3JtYXRFcnJvcjsKKyAgICB9IGVsc2UgaWYgKCFtX3Byb2dyYW0uYWRk
U2hhZGVyRnJvbVNvdXJjZUNvZGUoUUdMU2hhZGVyOjpWZXJ0ZXgsIHF0X2dsc2xfdmVydGV4U2hh
ZGVyUHJvZ3JhbSkpIHsKKyAgICAgICAgcVdhcm5pbmcoIlFQYWludGVyVmlkZW9TdXJmYWNlOiBW
ZXJ0ZXggc2hhZGVyIGNvbXBpbGUgZXJyb3IgJXMiLAorICAgICAgICAgICAgICAgICBxUHJpbnRh
YmxlKG1fcHJvZ3JhbS5sb2coKSkpOworICAgICAgICBlcnJvciA9IFFBYnN0cmFjdFZpZGVvU3Vy
ZmFjZTo6UmVzb3VyY2VFcnJvcjsKKyAgICB9IGVsc2UgaWYgKCFtX3Byb2dyYW0uYWRkU2hhZGVy
RnJvbVNvdXJjZUNvZGUoUUdMU2hhZGVyOjpGcmFnbWVudCwgZnJhZ21lbnRQcm9ncmFtKSkgewor
ICAgICAgICBxV2FybmluZygiUVBhaW50ZXJWaWRlb1N1cmZhY2U6IFNoYWRlciBjb21waWxlIGVy
cm9yICVzIiwgcVByaW50YWJsZShtX3Byb2dyYW0ubG9nKCkpKTsKKyAgICAgICAgZXJyb3IgPSBR
QWJzdHJhY3RWaWRlb1N1cmZhY2U6OlJlc291cmNlRXJyb3I7CisgICAgICAgIG1fcHJvZ3JhbS5y
ZW1vdmVBbGxTaGFkZXJzKCk7CisgICAgfSBlbHNlIGlmICghbV9wcm9ncmFtLmxpbmsoKSkgewor
ICAgICAgICBxV2FybmluZygiUVBhaW50ZXJWaWRlb1N1cmZhY2U6IFNoYWRlciBsaW5rIGVycm9y
ICVzIiwgcVByaW50YWJsZShtX3Byb2dyYW0ubG9nKCkpKTsKKyAgICAgICAgbV9wcm9ncmFtLnJl
bW92ZUFsbFNoYWRlcnMoKTsKKyAgICAgICAgZXJyb3IgPSBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6
OlJlc291cmNlRXJyb3I7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9oYW5kbGVUeXBlID0gZm9y
bWF0LmhhbmRsZVR5cGUoKTsKKyAgICAgICAgbV9zY2FuTGluZURpcmVjdGlvbiA9IGZvcm1hdC5z
Y2FuTGluZURpcmVjdGlvbigpOworICAgICAgICBtX2ZyYW1lU2l6ZSA9IGZvcm1hdC5mcmFtZVNp
emUoKTsKKworICAgICAgICBpZiAobV9oYW5kbGVUeXBlID09IFFBYnN0cmFjdFZpZGVvQnVmZmVy
OjpOb0hhbmRsZSkKKyAgICAgICAgICAgIGdsR2VuVGV4dHVyZXMobV90ZXh0dXJlQ291bnQsIG1f
dGV4dHVyZUlkcyk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCit2b2lkIFFWaWRl
b1N1cmZhY2VHbHNsUGFpbnRlcjo6c3RvcCgpCit7CisgICAgbV9jb250ZXh0LT5tYWtlQ3VycmVu
dCgpOworCisgICAgaWYgKG1faGFuZGxlVHlwZSAhPSBRQWJzdHJhY3RWaWRlb0J1ZmZlcjo6R0xU
ZXh0dXJlSGFuZGxlKQorICAgICAgICBnbERlbGV0ZVRleHR1cmVzKG1fdGV4dHVyZUNvdW50LCBt
X3RleHR1cmVJZHMpOworICAgIG1fcHJvZ3JhbS5yZW1vdmVBbGxTaGFkZXJzKCk7CisKKyAgICBt
X3RleHR1cmVDb3VudCA9IDA7CisgICAgbV9oYW5kbGVUeXBlID0gUUFic3RyYWN0VmlkZW9CdWZm
ZXI6Ok5vSGFuZGxlOworfQorCitRQWJzdHJhY3RWaWRlb1N1cmZhY2U6OkVycm9yIFFWaWRlb1N1
cmZhY2VHbHNsUGFpbnRlcjo6cGFpbnQoCisgICAgICAgIGNvbnN0IFFSZWN0RiAmdGFyZ2V0LCBR
UGFpbnRlciAqcGFpbnRlciwgY29uc3QgUVJlY3RGICZzb3VyY2UpCit7CisgICAgaWYgKG1fZnJh
bWUuaXNWYWxpZCgpKSB7CisgICAgICAgIHBhaW50ZXItPmJlZ2luTmF0aXZlUGFpbnRpbmcoKTsK
KworICAgICAgICBjb25zdCBpbnQgd2lkdGggPSBRR0xDb250ZXh0OjpjdXJyZW50Q29udGV4dCgp
LT5kZXZpY2UoKS0+d2lkdGgoKTsKKyAgICAgICAgY29uc3QgaW50IGhlaWdodCA9IFFHTENvbnRl
eHQ6OmN1cnJlbnRDb250ZXh0KCktPmRldmljZSgpLT5oZWlnaHQoKTsKKworICAgICAgICBjb25z
dCBRVHJhbnNmb3JtIHRyYW5zZm9ybSA9IHBhaW50ZXItPmRldmljZVRyYW5zZm9ybSgpOworCisg
ICAgICAgIGNvbnN0IEdMZmxvYXQgd2ZhY3RvciA9IDIuMCAvIHdpZHRoOworICAgICAgICBjb25z
dCBHTGZsb2F0IGhmYWN0b3IgPSAtMi4wIC8gaGVpZ2h0OworCisgICAgICAgIGNvbnN0IEdMZmxv
YXQgcG9zaXRpb25NYXRyaXhbNF1bNF0gPQorICAgICAgICB7CisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgLyooMCwwKSovIHdmYWN0b3IgKiB0cmFuc2Zvcm0ubTExKCkgLSB0cmFuc2Zv
cm0ubTEzKCksCisgICAgICAgICAgICAgICAgLyooMCwxKSovIGhmYWN0b3IgKiB0cmFuc2Zvcm0u
bTEyKCkgKyB0cmFuc2Zvcm0ubTEzKCksCisgICAgICAgICAgICAgICAgLyooMCwyKSovIDAuMCwK
KyAgICAgICAgICAgICAgICAvKigwLDMpKi8gdHJhbnNmb3JtLm0xMygpCisgICAgICAgICAgICB9
LCB7CisgICAgICAgICAgICAgICAgLyooMSwwKSovIHdmYWN0b3IgKiB0cmFuc2Zvcm0ubTIxKCkg
LSB0cmFuc2Zvcm0ubTIzKCksCisgICAgICAgICAgICAgICAgLyooMSwxKSovIGhmYWN0b3IgKiB0
cmFuc2Zvcm0ubTIyKCkgKyB0cmFuc2Zvcm0ubTIzKCksCisgICAgICAgICAgICAgICAgLyooMSwy
KSovIDAuMCwKKyAgICAgICAgICAgICAgICAvKigxLDMpKi8gdHJhbnNmb3JtLm0yMygpCisgICAg
ICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgLyooMiwwKSovIDAuMCwKKyAgICAgICAgICAg
ICAgICAvKigyLDEpKi8gMC4wLAorICAgICAgICAgICAgICAgIC8qKDIsMikqLyAtMS4wLAorICAg
ICAgICAgICAgICAgIC8qKDIsMykqLyAwLjAKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAg
ICAgICAvKigzLDApKi8gd2ZhY3RvciAqIHRyYW5zZm9ybS5keCgpIC0gdHJhbnNmb3JtLm0zMygp
LAorICAgICAgICAgICAgICAgIC8qKDMsMSkqLyBoZmFjdG9yICogdHJhbnNmb3JtLmR5KCkgKyB0
cmFuc2Zvcm0ubTMzKCksCisgICAgICAgICAgICAgICAgLyooMywyKSovIDAuMCwKKyAgICAgICAg
ICAgICAgICAvKigzLDMpKi8gdHJhbnNmb3JtLm0zMygpCisgICAgICAgICAgICB9CisgICAgICAg
IH07CisKKyAgICAgICAgY29uc3QgR0xmbG9hdCB2VG9wID0gbV9zY2FuTGluZURpcmVjdGlvbiA9
PSBRVmlkZW9TdXJmYWNlRm9ybWF0OjpUb3BUb0JvdHRvbQorICAgICAgICAgICAgICAgID8gdGFy
Z2V0LnRvcCgpCisgICAgICAgICAgICAgICAgOiB0YXJnZXQuYm90dG9tKCkgKyAxOworICAgICAg
ICBjb25zdCBHTGZsb2F0IHZCb3R0b20gPSBtX3NjYW5MaW5lRGlyZWN0aW9uID09IFFWaWRlb1N1
cmZhY2VGb3JtYXQ6OlRvcFRvQm90dG9tCisgICAgICAgICAgICAgICAgPyB0YXJnZXQuYm90dG9t
KCkgKyAxCisgICAgICAgICAgICAgICAgOiB0YXJnZXQudG9wKCk7CisKKworICAgICAgICBjb25z
dCBHTGZsb2F0IHZlcnRleENvb3JkQXJyYXlbXSA9CisgICAgICAgIHsKKyAgICAgICAgICAgIHRh
cmdldC5sZWZ0KCkgICAgICwgdkJvdHRvbSwKKyAgICAgICAgICAgIHRhcmdldC5yaWdodCgpICsg
MSwgdkJvdHRvbSwKKyAgICAgICAgICAgIHRhcmdldC5sZWZ0KCkgICAgICwgdlRvcCwKKyAgICAg
ICAgICAgIHRhcmdldC5yaWdodCgpICsgMSwgdlRvcAorICAgICAgICB9OworCisgICAgICAgIGNv
bnN0IEdMZmxvYXQgdHhMZWZ0ID0gc291cmNlLmxlZnQoKSAvIG1fZnJhbWVTaXplLndpZHRoKCk7
CisgICAgICAgIGNvbnN0IEdMZmxvYXQgdHhSaWdodCA9IHNvdXJjZS5yaWdodCgpIC8gbV9mcmFt
ZVNpemUud2lkdGgoKTsKKyAgICAgICAgY29uc3QgR0xmbG9hdCB0eFRvcCA9IG1fc2NhbkxpbmVE
aXJlY3Rpb24gPT0gUVZpZGVvU3VyZmFjZUZvcm1hdDo6VG9wVG9Cb3R0b20KKyAgICAgICAgICAg
ICAgICA/IHNvdXJjZS50b3AoKSAvIG1fZnJhbWVTaXplLmhlaWdodCgpCisgICAgICAgICAgICAg
ICAgOiBzb3VyY2UuYm90dG9tKCkgLyBtX2ZyYW1lU2l6ZS5oZWlnaHQoKTsKKyAgICAgICAgY29u
c3QgR0xmbG9hdCB0eEJvdHRvbSA9IG1fc2NhbkxpbmVEaXJlY3Rpb24gPT0gUVZpZGVvU3VyZmFj
ZUZvcm1hdDo6VG9wVG9Cb3R0b20KKyAgICAgICAgICAgICAgICA/IHNvdXJjZS5ib3R0b20oKSAv
IG1fZnJhbWVTaXplLmhlaWdodCgpCisgICAgICAgICAgICAgICAgOiBzb3VyY2UudG9wKCkgLyBt
X2ZyYW1lU2l6ZS5oZWlnaHQoKTsKKworICAgICAgICBjb25zdCBHTGZsb2F0IHRleHR1cmVDb29y
ZEFycmF5W10gPQorICAgICAgICB7CisgICAgICAgICAgICB0eExlZnQgLCB0eEJvdHRvbSwKKyAg
ICAgICAgICAgIHR4UmlnaHQsIHR4Qm90dG9tLAorICAgICAgICAgICAgdHhMZWZ0ICwgdHhUb3As
CisgICAgICAgICAgICB0eFJpZ2h0LCB0eFRvcAorICAgICAgICB9OworCisgICAgICAgIG1fcHJv
Z3JhbS5iaW5kKCk7CisKKyAgICAgICAgbV9wcm9ncmFtLmVuYWJsZUF0dHJpYnV0ZUFycmF5KCJ2
ZXJ0ZXhDb29yZEFycmF5Iik7CisgICAgICAgIG1fcHJvZ3JhbS5lbmFibGVBdHRyaWJ1dGVBcnJh
eSgidGV4dHVyZUNvb3JkQXJyYXkiKTsKKyAgICAgICAgbV9wcm9ncmFtLnNldEF0dHJpYnV0ZUFy
cmF5KCJ2ZXJ0ZXhDb29yZEFycmF5IiwgdmVydGV4Q29vcmRBcnJheSwgMik7CisgICAgICAgIG1f
cHJvZ3JhbS5zZXRBdHRyaWJ1dGVBcnJheSgidGV4dHVyZUNvb3JkQXJyYXkiLCB0ZXh0dXJlQ29v
cmRBcnJheSwgMik7CisgICAgICAgIG1fcHJvZ3JhbS5zZXRVbmlmb3JtVmFsdWUoInBvc2l0aW9u
TWF0cml4IiwgcG9zaXRpb25NYXRyaXgpOworCisgICAgICAgIGlmIChtX3RleHR1cmVDb3VudCA9
PSAzKSB7CisgICAgICAgICAgICBnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApOworICAgICAg
ICAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmVJZHNbMF0pOworICAg
ICAgICAgICAgZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUxKTsKKyAgICAgICAgICAgIGdsQmlu
ZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlSWRzWzFdKTsKKyAgICAgICAgICAgIGds
QWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMik7CisgICAgICAgICAgICBnbEJpbmRUZXh0dXJlKEdM
X1RFWFRVUkVfMkQsIG1fdGV4dHVyZUlkc1syXSk7CisgICAgICAgICAgICBnbEFjdGl2ZVRleHR1
cmUoR0xfVEVYVFVSRTApOworCisgICAgICAgICAgICBtX3Byb2dyYW0uc2V0VW5pZm9ybVZhbHVl
KCJ0ZXhZIiwgMCk7CisgICAgICAgICAgICBtX3Byb2dyYW0uc2V0VW5pZm9ybVZhbHVlKCJ0ZXhV
IiwgMSk7CisgICAgICAgICAgICBtX3Byb2dyYW0uc2V0VW5pZm9ybVZhbHVlKCJ0ZXhWIiwgMik7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVS
RTApOworICAgICAgICAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmVJ
ZHNbMF0pOworCisgICAgICAgICAgICBtX3Byb2dyYW0uc2V0VW5pZm9ybVZhbHVlKCJ0ZXhSZ2Ii
LCAwKTsKKyAgICAgICAgfQorICAgICAgICBtX3Byb2dyYW0uc2V0VW5pZm9ybVZhbHVlKCJjb2xv
ck1hdHJpeCIsIG1fY29sb3JNYXRyaXgpOworCisgICAgICAgIGdsRHJhd0FycmF5cyhHTF9UUklB
TkdMRV9TVFJJUCwgMCwgNCk7CisKKyAgICAgICAgbV9wcm9ncmFtLnJlbGVhc2UoKTsKKworICAg
ICAgICBwYWludGVyLT5lbmROYXRpdmVQYWludGluZygpOworICAgIH0KKyAgICByZXR1cm4gUUFi
c3RyYWN0VmlkZW9TdXJmYWNlOjpOb0Vycm9yOworfQorCisjZW5kaWYKKworUVBhaW50ZXJWaWRl
b1N1cmZhY2U6OlFQYWludGVyVmlkZW9TdXJmYWNlKFFPYmplY3QgKnBhcmVudCkKKyAgICA6IFFB
YnN0cmFjdFZpZGVvU3VyZmFjZShwYXJlbnQpCisgICAgLCBtX3BhaW50ZXIoMCkKKyNpZiAhZGVm
aW5lZChRVF9OT19PUEVOR0wpICYmICFkZWZpbmVkKFFUX09QRU5HTF9FU18xX0NMKSAmJiAhZGVm
aW5lZChRVF9PUEVOR0xfRVNfMSkKKyAgICAsIG1fZ2xDb250ZXh0KDApCisgICAgLCBtX3NoYWRl
clR5cGVzKE5vU2hhZGVycykKKyAgICAsIG1fc2hhZGVyVHlwZShOb1NoYWRlcnMpCisjZW5kaWYK
KyAgICAsIG1fYnJpZ2h0bmVzcygwKQorICAgICwgbV9jb250cmFzdCgwKQorICAgICwgbV9odWUo
MCkKKyAgICAsIG1fc2F0dXJhdGlvbigwKQorICAgICwgbV9waXhlbEZvcm1hdChRVmlkZW9GcmFt
ZTo6Rm9ybWF0X0ludmFsaWQpCisgICAgLCBtX2NvbG9yc0RpcnR5KHRydWUpCisgICAgLCBtX3Jl
YWR5KGZhbHNlKQoreworfQorCitRUGFpbnRlclZpZGVvU3VyZmFjZTo6flFQYWludGVyVmlkZW9T
dXJmYWNlKCkKK3sKKyAgICBpZiAoaXNBY3RpdmUoKSkKKyAgICAgICAgbV9wYWludGVyLT5zdG9w
KCk7CisKKyAgICBkZWxldGUgbV9wYWludGVyOworfQorCitRTGlzdDxRVmlkZW9GcmFtZTo6UGl4
ZWxGb3JtYXQ+IFFQYWludGVyVmlkZW9TdXJmYWNlOjpzdXBwb3J0ZWRQaXhlbEZvcm1hdHMoCisg
ICAgICAgIFFBYnN0cmFjdFZpZGVvQnVmZmVyOjpIYW5kbGVUeXBlIGhhbmRsZVR5cGUpIGNvbnN0
Cit7CisgICAgaWYgKCFtX3BhaW50ZXIpCisgICAgICAgIGNvbnN0X2Nhc3Q8UVBhaW50ZXJWaWRl
b1N1cmZhY2UgKj4odGhpcyktPmNyZWF0ZVBhaW50ZXIoKTsKKworICAgIHJldHVybiBtX3BhaW50
ZXItPnN1cHBvcnRlZFBpeGVsRm9ybWF0cyhoYW5kbGVUeXBlKTsKK30KKworYm9vbCBRUGFpbnRl
clZpZGVvU3VyZmFjZTo6aXNGb3JtYXRTdXBwb3J0ZWQoCisgICAgICAgIGNvbnN0IFFWaWRlb1N1
cmZhY2VGb3JtYXQgJmZvcm1hdCwgUVZpZGVvU3VyZmFjZUZvcm1hdCAqc2ltaWxhcikgY29uc3QK
K3sKKyAgICBpZiAoIW1fcGFpbnRlcikKKyAgICAgICAgY29uc3RfY2FzdDxRUGFpbnRlclZpZGVv
U3VyZmFjZSAqPih0aGlzKS0+Y3JlYXRlUGFpbnRlcigpOworCisgICAgcmV0dXJuIG1fcGFpbnRl
ci0+aXNGb3JtYXRTdXBwb3J0ZWQoZm9ybWF0LCBzaW1pbGFyKTsKK30KKworYm9vbCBRUGFpbnRl
clZpZGVvU3VyZmFjZTo6c3RhcnQoY29uc3QgUVZpZGVvU3VyZmFjZUZvcm1hdCAmZm9ybWF0KQor
eworICAgIGlmIChpc0FjdGl2ZSgpKQorICAgICAgICBtX3BhaW50ZXItPnN0b3AoKTsKKworICAg
IGlmICghbV9wYWludGVyKQorICAgICAgICBjcmVhdGVQYWludGVyKCk7CisKKyAgICBpZiAoZm9y
bWF0LmZyYW1lU2l6ZSgpLmlzRW1wdHkoKSkKKyAgICAgICAgc2V0RXJyb3IoVW5zdXBwb3J0ZWRG
b3JtYXRFcnJvcik7CisgICAgZWxzZSB7CisgICAgICAgIFFBYnN0cmFjdFZpZGVvU3VyZmFjZTo6
RXJyb3IgZXJyb3IgPSBtX3BhaW50ZXItPnN0YXJ0KGZvcm1hdCk7CisKKyAgICAgICAgaWYgKGVy
cm9yICE9IFFBYnN0cmFjdFZpZGVvU3VyZmFjZTo6Tm9FcnJvcikKKyAgICAgICAgICAgIHNldEVy
cm9yKGVycm9yKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtX3BpeGVsRm9ybWF0ID0g
Zm9ybWF0LnBpeGVsRm9ybWF0KCk7CisgICAgICAgICAgICBtX2ZyYW1lU2l6ZSA9IGZvcm1hdC5m
cmFtZVNpemUoKTsKKyAgICAgICAgICAgIG1fc291cmNlUmVjdCA9IGZvcm1hdC52aWV3cG9ydCgp
OworICAgICAgICAgICAgbV9jb2xvcnNEaXJ0eSA9IHRydWU7CisgICAgICAgICAgICBtX3JlYWR5
ID0gdHJ1ZTsKKworICAgICAgICAgICAgcmV0dXJuIFFBYnN0cmFjdFZpZGVvU3VyZmFjZTo6c3Rh
cnQoZm9ybWF0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFFBYnN0cmFjdFZpZGVvU3VyZmFj
ZTo6c3RvcCgpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFFQYWludGVyVmlkZW9T
dXJmYWNlOjpzdG9wKCkKK3sKKyAgICBpZiAoaXNBY3RpdmUoKSkgeworICAgICAgICBtX3BhaW50
ZXItPnN0b3AoKTsKKyAgICAgICAgbV9yZWFkeSA9IGZhbHNlOworCisgICAgICAgIFFBYnN0cmFj
dFZpZGVvU3VyZmFjZTo6c3RvcCgpOworICAgIH0KK30KKworYm9vbCBRUGFpbnRlclZpZGVvU3Vy
ZmFjZTo6cHJlc2VudChjb25zdCBRVmlkZW9GcmFtZSAmZnJhbWUpCit7CisgICAgaWYgKCFtX3Jl
YWR5KSB7CisgICAgICAgIGlmICghaXNBY3RpdmUoKSkKKyAgICAgICAgICAgIHNldEVycm9yKFN0
b3BwZWRFcnJvcik7CisgICAgfSBlbHNlIGlmIChmcmFtZS5pc1ZhbGlkKCkgCisgICAgICAgICAg
ICAmJiAoZnJhbWUucGl4ZWxGb3JtYXQoKSAhPSBtX3BpeGVsRm9ybWF0IHx8IGZyYW1lLnNpemUo
KSAhPSBtX2ZyYW1lU2l6ZSkpIHsKKyAgICAgICAgc2V0RXJyb3IoSW5jb3JyZWN0Rm9ybWF0RXJy
b3IpOworCisgICAgICAgIHN0b3AoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBRQWJzdHJhY3RW
aWRlb1N1cmZhY2U6OkVycm9yIGVycm9yID0gbV9wYWludGVyLT5zZXRDdXJyZW50RnJhbWUoZnJh
bWUpOworCisgICAgICAgIGlmIChlcnJvciAhPSBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6Ok5vRXJy
b3IpIHsKKyAgICAgICAgICAgIHNldEVycm9yKGVycm9yKTsKKworICAgICAgICAgICAgc3RvcCgp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9yZWFkeSA9IGZhbHNlOworCisgICAg
ICAgICAgICBlbWl0IGZyYW1lQ2hhbmdlZCgpOworCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2ludCBRUGFpbnRlclZp
ZGVvU3VyZmFjZTo6YnJpZ2h0bmVzcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYnJpZ2h0bmVz
czsKK30KKwordm9pZCBRUGFpbnRlclZpZGVvU3VyZmFjZTo6c2V0QnJpZ2h0bmVzcyhpbnQgYnJp
Z2h0bmVzcykKK3sKKyAgICBtX2JyaWdodG5lc3MgPSBicmlnaHRuZXNzOworCisgICAgbV9jb2xv
cnNEaXJ0eSA9IHRydWU7Cit9CisKK2ludCBRUGFpbnRlclZpZGVvU3VyZmFjZTo6Y29udHJhc3Qo
KSBjb25zdAoreworICAgIHJldHVybiBtX2NvbnRyYXN0OworfQorCit2b2lkIFFQYWludGVyVmlk
ZW9TdXJmYWNlOjpzZXRDb250cmFzdChpbnQgY29udHJhc3QpCit7CisgICAgbV9jb250cmFzdCA9
IGNvbnRyYXN0OworCisgICAgbV9jb2xvcnNEaXJ0eSA9IHRydWU7Cit9CisKK2ludCBRUGFpbnRl
clZpZGVvU3VyZmFjZTo6aHVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9odWU7Cit9CisKK3Zv
aWQgUVBhaW50ZXJWaWRlb1N1cmZhY2U6OnNldEh1ZShpbnQgaHVlKQoreworICAgIG1faHVlID0g
aHVlOworCisgICAgbV9jb2xvcnNEaXJ0eSA9IHRydWU7Cit9CisKK2ludCBRUGFpbnRlclZpZGVv
U3VyZmFjZTo6c2F0dXJhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2F0dXJhdGlvbjsK
K30KKwordm9pZCBRUGFpbnRlclZpZGVvU3VyZmFjZTo6c2V0U2F0dXJhdGlvbihpbnQgc2F0dXJh
dGlvbikKK3sKKyAgICBtX3NhdHVyYXRpb24gPSBzYXR1cmF0aW9uOworCisgICAgbV9jb2xvcnNE
aXJ0eSA9IHRydWU7Cit9CisKK2Jvb2wgUVBhaW50ZXJWaWRlb1N1cmZhY2U6OmlzUmVhZHkoKSBj
b25zdAoreworICAgIHJldHVybiBtX3JlYWR5OworfQorCit2b2lkIFFQYWludGVyVmlkZW9TdXJm
YWNlOjpzZXRSZWFkeShib29sIHJlYWR5KQoreworICAgIG1fcmVhZHkgPSByZWFkeTsKK30KKwor
dm9pZCBRUGFpbnRlclZpZGVvU3VyZmFjZTo6cGFpbnQoUVBhaW50ZXIgKnBhaW50ZXIsIGNvbnN0
IFFSZWN0RiAmdGFyZ2V0LCBjb25zdCBRUmVjdEYgJnNvdXJjZSkKK3sKKyAgICBpZiAoIWlzQWN0
aXZlKCkpCisgICAgICAgIHBhaW50ZXItPmZpbGxSZWN0KHRhcmdldCwgUUJydXNoKFF0OjpibGFj
aykpOworICAgIGVsc2UgeworICAgICAgICBpZiAobV9jb2xvcnNEaXJ0eSkgeworICAgICAgICAg
ICAgbV9wYWludGVyLT51cGRhdGVDb2xvcnMobV9icmlnaHRuZXNzLCBtX2NvbnRyYXN0LCBtX2h1
ZSwgbV9zYXR1cmF0aW9uKTsKKyAgICAgICAgICAgIG1fY29sb3JzRGlydHkgPSBmYWxzZTsKKyAg
ICAgICAgfQorCisgICAgICAgIGNvbnN0IFFSZWN0RiBzb3VyY2VSZWN0KAorICAgICAgICAgICAg
ICAgIG1fc291cmNlUmVjdC54KCkgKyBtX3NvdXJjZVJlY3Qud2lkdGgoKSAqIHNvdXJjZS54KCks
CisgICAgICAgICAgICAgICAgbV9zb3VyY2VSZWN0LnkoKSArIG1fc291cmNlUmVjdC5oZWlnaHQo
KSAqIHNvdXJjZS55KCksCisgICAgICAgICAgICAgICAgbV9zb3VyY2VSZWN0LndpZHRoKCkgKiBz
b3VyY2Uud2lkdGgoKSwKKyAgICAgICAgICAgICAgICBtX3NvdXJjZVJlY3QuaGVpZ2h0KCkgKiBz
b3VyY2UuaGVpZ2h0KCkpOworCisgICAgICAgIFFBYnN0cmFjdFZpZGVvU3VyZmFjZTo6RXJyb3Ig
ZXJyb3IgPSBtX3BhaW50ZXItPnBhaW50KHRhcmdldCwgcGFpbnRlciwgc291cmNlUmVjdCk7CisK
KyAgICAgICAgaWYgKGVycm9yICE9IFFBYnN0cmFjdFZpZGVvU3VyZmFjZTo6Tm9FcnJvcikgewor
ICAgICAgICAgICAgc2V0RXJyb3IoZXJyb3IpOworCisgICAgICAgICAgICBzdG9wKCk7CisgICAg
ICAgIH0KKyAgICB9Cit9CisKKyNpZiAhZGVmaW5lZChRVF9OT19PUEVOR0wpICYmICFkZWZpbmVk
KFFUX09QRU5HTF9FU18xX0NMKSAmJiAhZGVmaW5lZChRVF9PUEVOR0xfRVNfMSkKKworY29uc3Qg
UUdMQ29udGV4dCAqUVBhaW50ZXJWaWRlb1N1cmZhY2U6OmdsQ29udGV4dCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fZ2xDb250ZXh0OworfQorCit2b2lkIFFQYWludGVyVmlkZW9TdXJmYWNlOjpz
ZXRHTENvbnRleHQoUUdMQ29udGV4dCAqY29udGV4dCkKK3sKKyAgICBpZiAobV9nbENvbnRleHQg
PT0gY29udGV4dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9nbENvbnRleHQgPSBjb250ZXh0
OworCisgICAgbV9zaGFkZXJUeXBlcyA9IE5vU2hhZGVyczsKKworICAgIGlmIChtX2dsQ29udGV4
dCkgeworICAgICAgICBtX2dsQ29udGV4dC0+bWFrZUN1cnJlbnQoKTsKKworICAgICAgICBjb25z
dCBRQnl0ZUFycmF5IGV4dGVuc2lvbnMocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyICo+KGds
R2V0U3RyaW5nKEdMX0VYVEVOU0lPTlMpKSk7CisjaWZuZGVmIFFUX09QRU5HTF9FUworCisgICAg
ICAgIGlmIChleHRlbnNpb25zLmNvbnRhaW5zKCJBUkJfZnJhZ21lbnRfcHJvZ3JhbSIpKQorICAg
ICAgICAgICAgbV9zaGFkZXJUeXBlcyB8PSBGcmFnbWVudFByb2dyYW1TaGFkZXI7CisjZW5kaWYK
KworICAgICAgICBpZiAoUUdMU2hhZGVyUHJvZ3JhbTo6aGFzT3BlbkdMU2hhZGVyUHJvZ3JhbXMo
bV9nbENvbnRleHQpCisgICAgICAgICAgICAgICAgJiYgZXh0ZW5zaW9ucy5jb250YWlucygiQVJC
X3NoYWRlcl9vYmplY3RzIikpCisgICAgICAgICAgICBtX3NoYWRlclR5cGVzIHw9IEdsc2xTaGFk
ZXI7CisgICAgfQorCisgICAgU2hhZGVyVHlwZSB0eXBlID0gKG1fc2hhZGVyVHlwZSAmIG1fc2hh
ZGVyVHlwZXMpCisgICAgICAgICAgICA/IG1fc2hhZGVyVHlwZQorICAgICAgICAgICAgOiBOb1No
YWRlcnM7CisKKyAgICBpZiAodHlwZSAhPSBtX3NoYWRlclR5cGUgfHwgdHlwZSAhPSBOb1NoYWRl
cnMpIHsKKyAgICAgICAgbV9zaGFkZXJUeXBlID0gdHlwZTsKKworICAgICAgICBpZiAoaXNBY3Rp
dmUoKSkgeworICAgICAgICAgICAgbV9wYWludGVyLT5zdG9wKCk7CisgICAgICAgICAgICBkZWxl
dGUgbV9wYWludGVyOworICAgICAgICAgICAgbV9wYWludGVyID0gMDsKKyAgICAgICAgICAgIG1f
cmVhZHkgPSBmYWxzZTsKKworICAgICAgICAgICAgc2V0RXJyb3IoUmVzb3VyY2VFcnJvcik7Cisg
ICAgICAgICAgICBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6OnN0b3AoKTsKKyAgICAgICAgfQorICAg
ICAgICBlbWl0IHN1cHBvcnRlZEZvcm1hdHNDaGFuZ2VkKCk7CisgICAgfQorfQorCitRUGFpbnRl
clZpZGVvU3VyZmFjZTo6U2hhZGVyVHlwZXMgUVBhaW50ZXJWaWRlb1N1cmZhY2U6OnN1cHBvcnRl
ZFNoYWRlclR5cGVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zaGFkZXJUeXBlczsKK30KKwor
UVBhaW50ZXJWaWRlb1N1cmZhY2U6OlNoYWRlclR5cGUgUVBhaW50ZXJWaWRlb1N1cmZhY2U6OnNo
YWRlclR5cGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3NoYWRlclR5cGU7Cit9CisKK3ZvaWQg
UVBhaW50ZXJWaWRlb1N1cmZhY2U6OnNldFNoYWRlclR5cGUoU2hhZGVyVHlwZSB0eXBlKQorewor
ICAgIGlmICghKHR5cGUgJiBtX3NoYWRlclR5cGVzKSkKKyAgICAgICAgdHlwZSA9IE5vU2hhZGVy
czsKKworICAgIGlmICh0eXBlICE9IG1fc2hhZGVyVHlwZSkgeworICAgICAgICBtX3NoYWRlclR5
cGUgPSB0eXBlOworCisgICAgICAgIGlmIChpc0FjdGl2ZSgpKSB7CisgICAgICAgICAgICBtX3Bh
aW50ZXItPnN0b3AoKTsKKyAgICAgICAgICAgIGRlbGV0ZSBtX3BhaW50ZXI7CisgICAgICAgICAg
ICBtX3BhaW50ZXIgPSAwOworICAgICAgICAgICAgbV9yZWFkeSA9IGZhbHNlOworCisgICAgICAg
ICAgICBzZXRFcnJvcihSZXNvdXJjZUVycm9yKTsKKyAgICAgICAgICAgIFFBYnN0cmFjdFZpZGVv
U3VyZmFjZTo6c3RvcCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGVsZXRlIG1f
cGFpbnRlcjsKKyAgICAgICAgICAgIG1fcGFpbnRlciA9IDA7CisgICAgICAgIH0KKyAgICAgICAg
ZW1pdCBzdXBwb3J0ZWRGb3JtYXRzQ2hhbmdlZCgpOworICAgIH0KK30KKworI2VuZGlmCisKK3Zv
aWQgUVBhaW50ZXJWaWRlb1N1cmZhY2U6OmNyZWF0ZVBhaW50ZXIoKQoreworICAgIFFfQVNTRVJU
KCFtX3BhaW50ZXIpOworCisjaWYgIWRlZmluZWQoUVRfTk9fT1BFTkdMKSAmJiAhZGVmaW5lZChR
VF9PUEVOR0xfRVNfMV9DTCkgJiYgIWRlZmluZWQoUVRfT1BFTkdMX0VTXzEpCisgICAgc3dpdGNo
IChtX3NoYWRlclR5cGUpIHsKKyNpZm5kZWYgUVRfT1BFTkdMX0VTCisgICAgY2FzZSBGcmFnbWVu
dFByb2dyYW1TaGFkZXI6CisgICAgICAgIFFfQVNTRVJUKG1fZ2xDb250ZXh0KTsKKyAgICAgICAg
bV9nbENvbnRleHQtPm1ha2VDdXJyZW50KCk7CisgICAgICAgIG1fcGFpbnRlciA9IG5ldyBRVmlk
ZW9TdXJmYWNlQXJiRnBQYWludGVyKG1fZ2xDb250ZXh0KTsKKyAgICAgICAgYnJlYWs7CisjZW5k
aWYKKyAgICBjYXNlIEdsc2xTaGFkZXI6CisgICAgICAgIFFfQVNTRVJUKG1fZ2xDb250ZXh0KTsK
KyAgICAgICAgbV9nbENvbnRleHQtPm1ha2VDdXJyZW50KCk7CisgICAgICAgIG1fcGFpbnRlciA9
IG5ldyBRVmlkZW9TdXJmYWNlR2xzbFBhaW50ZXIobV9nbENvbnRleHQpOworICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBtX3BhaW50ZXIgPSBuZXcgUVZpZGVvU3VyZmFjZVJh
c3RlclBhaW50ZXI7CisgICAgICAgIGJyZWFrOworICAgIH0KKyNlbHNlCisgICAgbV9wYWludGVy
ID0gbmV3IFFWaWRlb1N1cmZhY2VSYXN0ZXJQYWludGVyOworI2VuZGlmCit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2luY2x1ZGUgIm1vY19RUGFpbnRlclZpZGVvU3VyZmFjZS5jcHAi
CisKKwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9RUGFpbnRlclZpZGVvU3Vy
ZmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvUVBhaW50
ZXJWaWRlb1N1cmZhY2UuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvUVBhaW50ZXJWaWRlb1N1cmZhY2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTkg
QEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgUVBhaW50ZXJWaWRlb1N1cmZhY2VfaAor
I2RlZmluZSBRUGFpbnRlclZpZGVvU3VyZmFjZV9oCisKKyNpbmNsdWRlIDxRdENvcmUvcXNpemUu
aD4KKyNpbmNsdWRlIDxRdEd1aS9xaW1hZ2UuaD4KKyNpbmNsdWRlIDxRdEd1aS9xbWF0cml4NHg0
Lmg+CisjaW5jbHVkZSA8UXRHdWkvcXBhaW50ZW5naW5lLmg+CisjaW5jbHVkZSA8UXRNdWx0aW1l
ZGlhL3FhYnN0cmFjdHZpZGVvc3VyZmFjZS5oPgorI2luY2x1ZGUgPFF0TXVsdGltZWRpYS9xdmlk
ZW9mcmFtZS5oPgorCitRVF9CRUdJTl9OQU1FU1BBQ0UKK2NsYXNzIFFHTENvbnRleHQ7CitRVF9F
TkRfTkFNRVNQQUNFCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUVZpZGVvU3VyZmFj
ZVBhaW50ZXI7CitjbGFzcyBRX0FVVE9URVNUX0VYUE9SVCBRUGFpbnRlclZpZGVvU3VyZmFjZSA6
IHB1YmxpYyBRQWJzdHJhY3RWaWRlb1N1cmZhY2UgeworICAgIFFfT0JKRUNUCitwdWJsaWM6Cisg
ICAgZXhwbGljaXQgUVBhaW50ZXJWaWRlb1N1cmZhY2UoUU9iamVjdCAqcGFyZW50ID0gMCk7Cisg
ICAgflFQYWludGVyVmlkZW9TdXJmYWNlKCk7CisKKyAgICBRTGlzdDxRVmlkZW9GcmFtZTo6UGl4
ZWxGb3JtYXQ+IHN1cHBvcnRlZFBpeGVsRm9ybWF0cygKKyAgICAgICAgICAgIFFBYnN0cmFjdFZp
ZGVvQnVmZmVyOjpIYW5kbGVUeXBlIGhhbmRsZVR5cGUgPSBRQWJzdHJhY3RWaWRlb0J1ZmZlcjo6
Tm9IYW5kbGUpIGNvbnN0OworCisgICAgYm9vbCBpc0Zvcm1hdFN1cHBvcnRlZCgKKyAgICAgICAg
ICAgIGNvbnN0IFFWaWRlb1N1cmZhY2VGb3JtYXQgJmZvcm1hdCwgUVZpZGVvU3VyZmFjZUZvcm1h
dCAqc2ltaWxhciA9IDApIGNvbnN0OworCisgICAgYm9vbCBzdGFydChjb25zdCBRVmlkZW9TdXJm
YWNlRm9ybWF0ICZmb3JtYXQpOworICAgIHZvaWQgc3RvcCgpOworCisgICAgYm9vbCBwcmVzZW50
KGNvbnN0IFFWaWRlb0ZyYW1lICZmcmFtZSk7CisKKyAgICBpbnQgYnJpZ2h0bmVzcygpIGNvbnN0
OworICAgIHZvaWQgc2V0QnJpZ2h0bmVzcyhpbnQgYnJpZ2h0bmVzcyk7CisKKyAgICBpbnQgY29u
dHJhc3QoKSBjb25zdDsKKyAgICB2b2lkIHNldENvbnRyYXN0KGludCBjb250cmFzdCk7CisKKyAg
ICBpbnQgaHVlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRIdWUoaW50IGh1ZSk7CisKKyAgICBpbnQg
c2F0dXJhdGlvbigpIGNvbnN0OworICAgIHZvaWQgc2V0U2F0dXJhdGlvbihpbnQgc2F0dXJhdGlv
bik7CisKKyAgICBib29sIGlzUmVhZHkoKSBjb25zdDsKKyAgICB2b2lkIHNldFJlYWR5KGJvb2wg
cmVhZHkpOworCisgICAgdm9pZCBwYWludChRUGFpbnRlciAqcGFpbnRlciwgY29uc3QgUVJlY3RG
ICZ0YXJnZXQsIGNvbnN0IFFSZWN0RiAmc291cmNlID0gUVJlY3RGKDAsIDAsIDEsIDEpKTsKKwor
I2lmICFkZWZpbmVkKFFUX05PX09QRU5HTCkgJiYgIWRlZmluZWQoUVRfT1BFTkdMX0VTXzFfQ0wp
ICYmICFkZWZpbmVkKFFUX09QRU5HTF9FU18xKQorICAgIGNvbnN0IFFHTENvbnRleHQgKmdsQ29u
dGV4dCgpIGNvbnN0OworICAgIHZvaWQgc2V0R0xDb250ZXh0KFFHTENvbnRleHQgKmNvbnRleHQp
OworCisgICAgZW51bSBTaGFkZXJUeXBlIHsKKyAgICAgICAgTm9TaGFkZXJzID0gMHgwMCwKKyAg
ICAgICAgRnJhZ21lbnRQcm9ncmFtU2hhZGVyID0gMHgwMSwKKyAgICAgICAgR2xzbFNoYWRlciA9
IDB4MDIKKyAgICB9OworCisgICAgUV9ERUNMQVJFX0ZMQUdTKFNoYWRlclR5cGVzLCBTaGFkZXJU
eXBlKQorCisgICAgU2hhZGVyVHlwZXMgc3VwcG9ydGVkU2hhZGVyVHlwZXMoKSBjb25zdDsKKwor
ICAgIFNoYWRlclR5cGUgc2hhZGVyVHlwZSgpIGNvbnN0OworICAgIHZvaWQgc2V0U2hhZGVyVHlw
ZShTaGFkZXJUeXBlIHR5cGUpOworI2VuZGlmCisKK1FfU0lHTkFMUzoKKyAgICB2b2lkIGZyYW1l
Q2hhbmdlZCgpOworCitwcml2YXRlOgorICAgIHZvaWQgY3JlYXRlUGFpbnRlcigpOworCisgICAg
UVZpZGVvU3VyZmFjZVBhaW50ZXIgKm1fcGFpbnRlcjsKKyNpZiAhZGVmaW5lZChRVF9OT19PUEVO
R0wpICYmICFkZWZpbmVkKFFUX09QRU5HTF9FU18xX0NMKSAmJiAhZGVmaW5lZChRVF9PUEVOR0xf
RVNfMSkKKyAgICBRR0xDb250ZXh0ICptX2dsQ29udGV4dDsKKyAgICBTaGFkZXJUeXBlcyBtX3No
YWRlclR5cGVzOworICAgIFNoYWRlclR5cGUgbV9zaGFkZXJUeXBlOworI2VuZGlmCisgICAgaW50
IG1fYnJpZ2h0bmVzczsKKyAgICBpbnQgbV9jb250cmFzdDsKKyAgICBpbnQgbV9odWU7CisgICAg
aW50IG1fc2F0dXJhdGlvbjsKKworICAgIFFWaWRlb0ZyYW1lOjpQaXhlbEZvcm1hdCBtX3BpeGVs
Rm9ybWF0OworICAgIFFTaXplIG1fZnJhbWVTaXplOworICAgIFFSZWN0IG1fc291cmNlUmVjdDsK
KyAgICBib29sIG1fY29sb3JzRGlydHk7CisgICAgYm9vbCBtX3JlYWR5OworfTsKKworI2lmICFk
ZWZpbmVkKFFUX05PX09QRU5HTCkgJiYgIWRlZmluZWQoUVRfT1BFTkdMX0VTXzFfQ0wpICYmICFk
ZWZpbmVkKFFUX09QRU5HTF9FU18xKQorUV9ERUNMQVJFX09QRVJBVE9SU19GT1JfRkxBR1MoUVBh
aW50ZXJWaWRlb1N1cmZhY2U6OlNoYWRlclR5cGVzKQorI2VuZGlmCisKK30KKworI2VuZGlmCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAJKHJldmlzaW9uIDU0NDc1KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250U2VsZWN0
b3IuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIVE1MSW5wdXRF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCkBAIC00Nyw2ICs0OCw3IEBACiAj
aW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyU2xpZGVyLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVGhlbWUuaCIKKyNpbmNsdWRlICJUaW1lUmFuZ2VzLmgiCiAjaW5jbHVkZSAiU2Ny
b2xsYmFyVGhlbWVRdC5oIgogI2luY2x1ZGUgIlVzZXJBZ2VudFN0eWxlU2hlZXRzLmgiCiAjaW5j
bHVkZSAicXdlYnBhZ2UuaCIKQEAgLTkyMSwxNCArOTIzLDEwIEBAIGJvb2wgUmVuZGVyVGhlbWVR
dDo6cGFpbnRNZWRpYU11dGVCdXR0b24KICAgICBjb25zdCBRUG9pbnRGIHNwZWFrZXJQb2x5Z29u
WzZdID0geyBRUG9pbnRGKDIwLCAzMCksIFFQb2ludEYoNTAsIDMwKSwgUVBvaW50Rig4MCwgMCks
CiAgICAgICAgICAgICBRUG9pbnRGKDgwLCAxMDApLCBRUG9pbnRGKDUwLCA3MCksIFFQb2ludEYo
MjAsIDcwKX07CiAKLSAgICBwLnBhaW50ZXItPnNldEJydXNoKGdldE1lZGlhQ29udHJvbEZvcmVn
cm91bmRDb2xvcihvKSk7CisgICAgcC5wYWludGVyLT5zZXRQZW4obWVkaWFFbGVtZW50LT5tdXRl
ZCgpID8gUXQ6OmRhcmtHcmF5IDogUXQ6OmxpZ2h0R3JheSk7CisgICAgcC5wYWludGVyLT5zZXRC
cnVzaChtZWRpYUVsZW1lbnQtPm11dGVkKCkgPyBRdDo6ZGFya1JlZCA6IGdldE1lZGlhQ29udHJv
bEZvcmVncm91bmRDb2xvcihvKSk7CiAgICAgcC5wYWludGVyLT5kcmF3UG9seWdvbihzcGVha2Vy
UG9seWdvbiwgNik7CiAKLSAgICBpZiAobWVkaWFFbGVtZW50LT5tdXRlZCgpKSB7Ci0gICAgICAg
IHAucGFpbnRlci0+c2V0UGVuKFF0OjpyZWQpOwotICAgICAgICBwLnBhaW50ZXItPmRyYXdMaW5l
KDAsIDEwMCwgMTAwLCAwKTsKLSAgICB9Ci0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTk3
MSw2ICs5NjksOTEgQEAgYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhU2Vla0Zvcndhcgog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAorYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhQ3Vy
cmVudFRpbWUoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIFN0eWxlUGFpbnRlciBwKHRoaXMs
IHBhaW50SW5mbyk7CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBpZiAoby0+c3R5bGUoKSkgeworICAgICAgICAvLyBTZXQgdGhlIHRleHQgY29sb3Ig
ZGVwZW5kaW5nIG9uIHBsYXRmb3JtCisgICAgICAgIFFQYWxldHRlIHBhbCA9IFFBcHBsaWNhdGlv
bjo6cGFsZXR0ZSgpOworICAgICAgICBvLT5zdHlsZSgpLT5zZXRUZXh0RmlsbENvbG9yKHBhbC5i
cnVzaChRUGFsZXR0ZTo6QWN0aXZlLCBRUGFsZXR0ZTo6SGlnaGxpZ2h0ZWRUZXh0KS5jb2xvcigp
KTsKKyAgICB9CisKKyAgICBwLnBhaW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlh
bGlhc2luZywgdHJ1ZSk7CisgICAgcGFpbnRNZWRpYUJhY2tncm91bmQocC5wYWludGVyLCByKTsK
KworICAgIHJldHVybiBmYWxzZTsKK30KKworU3RyaW5nIFJlbmRlclRoZW1lUXQ6OmZvcm1hdE1l
ZGlhQ29udHJvbHNDdXJyZW50VGltZShmbG9hdCBjdXJyZW50VGltZSwgZmxvYXQgZHVyYXRpb24p
IGNvbnN0Cit7CisgICAgcmV0dXJuIGZvcm1hdE1lZGlhQ29udHJvbHNUaW1lKGN1cnJlbnRUaW1l
KSArICIgLyAiICsgZm9ybWF0TWVkaWFDb250cm9sc1RpbWUoZHVyYXRpb24pOworfQorCitTdHJp
bmcgUmVuZGVyVGhlbWVRdDo6Zm9ybWF0TWVkaWFDb250cm9sc1JlbWFpbmluZ1RpbWUoZmxvYXQg
Y3VycmVudFRpbWUsIGZsb2F0IGR1cmF0aW9uKSBjb25zdAoreworICAgIHJldHVybiBTdHJpbmco
KTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVHJhY2so
UmVuZGVyT2JqZWN0ICpvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyAmcGFpbnRJbmZv
LCBjb25zdCBJbnRSZWN0ICZyKQoreworICAgIFN0eWxlUGFpbnRlciBwKHRoaXMsIHBhaW50SW5m
byk7CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBw
LnBhaW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgdHJ1ZSk7CisK
KyAgICBwYWludE1lZGlhQmFja2dyb3VuZChwLnBhaW50ZXIsIHIpOworCisgICAgaWYgKCFvLT5p
c1NsaWRlcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBJbnRSZWN0IGIgPSB0b1Jl
bmRlckJveChvKS0+Y29udGVudEJveFJlY3QoKTsKKworICAgIC8vIFBvc2l0aW9uIHRoZSBvdXRl
ciByZWN0YW5nbGUKKyAgICBpbnQgdG9wID0gci55KCkgKyBiLnkoKTsKKyAgICBpbnQgbGVmdCA9
IHIueCgpICsgYi54KCk7CisgICAgaW50IHdpZHRoID0gYi53aWR0aCgpOworICAgIGludCBoZWln
aHQgPSBiLmhlaWdodCgpOworCisgICAgc3RhdGljIGNvbnN0IFFDb2xvciBzY2FsZUNvbG9yKDI1
NSwgMjU1LCAyNTUsIDEwMCk7CisKKyAgICAvLyBEcmF3IHRoZSBvdXRlciByZWN0YW5nbGUKKyAg
ICBwLnBhaW50ZXItPnNldFBlbihRdDo6bGlnaHRHcmF5KTsKKyAgICBwLnBhaW50ZXItPnNldEJy
dXNoKHNjYWxlQ29sb3IpOworICAgIHAucGFpbnRlci0+ZHJhd1JlY3QobGVmdCwgdG9wLCB3aWR0
aCwgaGVpZ2h0KTsKKworICAgIGlmICghby0+bm9kZSgpIHx8ICFvLT5ub2RlKCktPmhhc1RhZ05h
bWUoaW5wdXRUYWcpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBIVE1MSW5wdXRFbGVt
ZW50KiBzbGlkZXIgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oby0+bm9kZSgpKTsK
KworICAgIC8vIFBvc2l0aW9uIHRoZSBpbm5lciByZWN0YW5nbGUKKyAgICBoZWlnaHQgPSAoaGVp
Z2h0IC0gMikgKiBzbGlkZXItPnZhbHVlQXNOdW1iZXIoKTsKKyAgICB3aWR0aCAtPSAyOworICAg
IGxlZnQgKz0gMTsKKyAgICB0b3AgKz0gKGIuaGVpZ2h0KCkgLSBoZWlnaHQpIC0gMTsKKworICAg
IC8vIERyYXcgdGhlIGlubmVyIHJlY3RhbmdsZQorICAgIHAucGFpbnRlci0+c2V0UGVuKFF0OjpO
b1Blbik7CisgICAgcC5wYWludGVyLT5zZXRCcnVzaChnZXRNZWRpYUNvbnRyb2xGb3JlZ3JvdW5k
Q29sb3IobykpOworICAgIHAucGFpbnRlci0+ZHJhd1JlY3QobGVmdCwgdG9wLCB3aWR0aCwgaGVp
Z2h0KTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWlu
dE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0ICpvLCBjb25zdCBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyAmcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0ICZyKQoreworICAgIFN0eWxl
UGFpbnRlciBwKHRoaXMsIHBhaW50SW5mbyk7CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBOb3RoaW5nIHRvIGRyYXcgaGVyZSwgdGhpcyBpcyBh
bGwgZG9uZSBpbiB0aGUgdHJhY2sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIGJvb2wgUmVuZGVy
VGhlbWVRdDo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVu
ZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKICAg
ICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBnZXRNZWRpYUVsZW1lbnRGcm9tUmVu
ZGVyT2JqZWN0KG8pOwpAQCAtOTg1LDE1ICsxMDY4LDMxIEBAIGJvb2wgUmVuZGVyVGhlbWVRdDo6
cGFpbnRNZWRpYVNsaWRlclRyYWMKIAogICAgIHBhaW50TWVkaWFCYWNrZ3JvdW5kKHAucGFpbnRl
ciwgcik7CiAKKyAgICAjaWYgUVRfVkVSU0lPTiA+PSAweDA0MDcwMAorICAgIGlmIChNZWRpYVBs
YXllciogcGxheWVyID0gbWVkaWFFbGVtZW50LT5wbGF5ZXIoKSkgeworICAgICAgICAvLyBHZXQg
dGhlIGJ1ZmZlcmVkIHBhcnRzIG9mIHRoZSBtZWRpYQorICAgICAgICBQYXNzUmVmUHRyPFRpbWVS
YW5nZXM+IGJ1ZmZlcmVkID0gcGxheWVyLT5idWZmZXJlZCgpOworICAgICAgICBpZiAoYnVmZmVy
ZWQtPmxlbmd0aCgpID4gMCAmJiBwbGF5ZXItPmR1cmF0aW9uKCkgPCBzdGQ6Om51bWVyaWNfbGlt
aXRzPGZsb2F0Pjo6aW5maW5pdHkoKSkgeworICAgICAgICAgICAgLy8gU2V0IHRoZSB0cmFuc2Zv
cm0gYW5kIGJydXNoCisgICAgICAgICAgICBXb3JsZE1hdHJpeFRyYW5zZm9ybWVyIHRyYW5zZm9y
bWVyKHAucGFpbnRlciwgbywgcik7CisgICAgICAgICAgICBwLnBhaW50ZXItPnNldEJydXNoKGdl
dE1lZGlhQ29udHJvbEZvcmVncm91bmRDb2xvcigpKTsKKworICAgICAgICAgICAgLy8gUGFpbnQg
ZWFjaCBidWZmZXJlZCBzZWN0aW9uCisgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGV4OworICAg
ICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBidWZmZXJlZC0+bGVuZ3RoKCk7IGkrKykgewor
ICAgICAgICAgICAgICAgIGZsb2F0IHN0YXJ0WCA9IChidWZmZXJlZC0+c3RhcnQoaSwgZXgpIC8g
cGxheWVyLT5kdXJhdGlvbigpKSAqIDEwMDsKKyAgICAgICAgICAgICAgICBmbG9hdCB3aWR0aCA9
ICgoYnVmZmVyZWQtPmVuZChpLCBleCkgLyBwbGF5ZXItPmR1cmF0aW9uKCkpICogMTAwKSAtIHN0
YXJ0WDsKKyAgICAgICAgICAgICAgICBwLnBhaW50ZXItPmRyYXdSZWN0KHN0YXJ0WCwgMzcsIHdp
ZHRoLCAyNik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgI2VuZGlmCisK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVNs
aWRlclRodW1iKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBt
ZWRpYUVsZW1lbnQgPSBnZXRNZWRpYUVsZW1lbnRGcm9tUmVuZGVyT2JqZWN0KG8tPnBhcmVudCgp
KTsKLSAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAg
U3R5bGVQYWludGVyIHAodGhpcywgcGFpbnRJbmZvKTsKICAgICBpZiAoIXAuaXNWYWxpZCgpKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEwMTksNiArMTExOCwxMyBAQCB2b2lkIFJlbmRlclRo
ZW1lUXQ6OmFkanVzdFNsaWRlclRodW1iU2l6CiAgICAgICAgIGludCBwYXJlbnRIZWlnaHQgPSBw
YXJlbnRTdHlsZS0+aGVpZ2h0KCkudmFsdWUoKTsKICAgICAgICAgby0+c3R5bGUoKS0+c2V0V2lk
dGgoTGVuZ3RoKHBhcmVudEhlaWdodCAvIDMsIEZpeGVkKSk7CiAgICAgICAgIG8tPnN0eWxlKCkt
PnNldEhlaWdodChMZW5ndGgocGFyZW50SGVpZ2h0LCBGaXhlZCkpOworICAgIH0gZWxzZSBpZiAo
cGFydCA9PSBNZWRpYVZvbHVtZVNsaWRlclRodW1iUGFydCkgeworICAgICAgICBSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUgPSBvLT5wYXJlbnQoKS0+c3R5bGUoKTsKKyAgICAgICAgUV9BU1NFUlQo
cGFyZW50U3R5bGUpOworCisgICAgICAgIGludCBwYXJlbnRXaWR0aCA9IHBhcmVudFN0eWxlLT53
aWR0aCgpLnZhbHVlKCk7CisgICAgICAgIG8tPnN0eWxlKCktPnNldEhlaWdodChMZW5ndGgocGFy
ZW50V2lkdGggLyAzLCBGaXhlZCkpOworICAgICAgICBvLT5zdHlsZSgpLT5zZXRXaWR0aChMZW5n
dGgocGFyZW50V2lkdGgsIEZpeGVkKSk7CiAgICAgfSBlbHNlIGlmIChwYXJ0ID09IFNsaWRlclRo
dW1iSG9yaXpvbnRhbFBhcnQgfHwgcGFydCA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkgewog
ICAgICAgICBRU3R5bGVPcHRpb25TbGlkZXIgb3B0aW9uOwogICAgICAgICBpZiAocGFydCA9PSBT
bGlkZXJUaHVtYlZlcnRpY2FsUGFydCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVy
VGhlbWVRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVR
dC5oCShyZXZpc2lvbiA1NDQ3NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVR
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNyArMTI3LDExIEBAIHByb3RlY3RlZDoKICAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNlZWtGb3J3YXJkQnV0dG9uKFJlbmRlck9iamVjdCosIGNv
bnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1
YWwgYm9vbCBwYWludE1lZGlhU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVy
T2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIHBh
aW50TWVkaWFTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLQorICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlh
Q3VycmVudFRpbWUoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFWb2x1bWVTbGlk
ZXJUcmFjayhSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVZvbHVtZVNsaWRlclRo
dW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOworICAgIHZpcnR1YWwgU3RyaW5nIGZvcm1hdE1lZGlhQ29udHJvbHNDdXJyZW50
VGltZShmbG9hdCBjdXJyZW50VGltZSwgZmxvYXQgZHVyYXRpb24pIGNvbnN0OworICAgIHZpcnR1
YWwgU3RyaW5nIGZvcm1hdE1lZGlhQ29udHJvbHNSZW1haW5pbmdUaW1lKGZsb2F0IGN1cnJlbnRU
aW1lLCBmbG9hdCBkdXJhdGlvbikgY29uc3Q7CiBwcml2YXRlOgogICAgIEhUTUxNZWRpYUVsZW1l
bnQqIGdldE1lZGlhRWxlbWVudEZyb21SZW5kZXJPYmplY3QoUmVuZGVyT2JqZWN0KiBvKSBjb25z
dDsKICAgICB2b2lkIHBhaW50TWVkaWFCYWNrZ3JvdW5kKFFQYWludGVyKiBwYWludGVyLCBjb25z
dCBJbnRSZWN0JiByKSBjb25zdDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48310</attachid>
            <date>2010-02-07 18:02:32 -0800</date>
            <delta_ts>2010-02-07 20:05:12 -0800</delta_ts>
            <desc>Minor Modification</desc>
            <filename>webkit-qtmultimedia-integration.txt</filename>
            <type>text/plain</type>
            <size>91222</size>
            <attacher name="Nick Young">nicholas.young</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDQ3NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTI0IEBACisyMDEwLTAyLTA3ICBOaWNob2xhcyBZb3VuZyAgPG5pY2hvbGFzLnlv
dW5nQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBbUXRdIFN3aXRjaGluZyBmcm9tIFBob25vbiB0byBRdE11bHRpbWVkaWEgQmFja2Vu
ZCBmb3IgUXQgNC43CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zNDYzMQorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhpcyBwYXRjaCBvbmx5IGFmZmVj
dHMgbXVsdGltZWRpYSBiYWNrZW5kLgorCisgICAgICAgICogV2ViQ29yZS5wcm86IEJ1aWxkIGRl
cGVuZHMgb24gUXQgVmVyc2lvbi4KKyAgICAgICAgKiBjc3MvbWVkaWFDb250cm9sc1F0LmNzczog
VXBkYXRlZCBtZWRpYSBjb250cm9scy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRp
YVBsYXllci5jcHA6IERpZmZlcmVudCBiYWNrZW5kIGluY2x1ZGVkIGRlcGVuZGluZyBvbiBRdCB2
ZXJzaW9uLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0
ZVF0LmNwcDogQWRkZWQgbmV3IFF0TXVsdGltZWRpYSBCYWNrZW5kLgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlRGVmYXVsdDo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVEZWZhdWx0OjpzdXBwb3J0c0Z1bGxzY3JlZW4pOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpyZWdpc3Rlck1lZGlhRW5naW5lKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6Z2V0U3VwcG9ydGVkVHlwZXMpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpzdXBwb3J0c1R5cGUpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpNZWRpYVBsYXllclByaXZhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjp+TWVkaWFQbGF5ZXJQcml2YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6aGFzVmlkZW8pOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpoYXNBdWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGU6OmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlOjpjYW5jZWxMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZTo6cGxheSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnBhdXNlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6cGF1c2VkKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6c2Vlayk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGU6OnNlZWtpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlOjpkdXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGU6OmN1cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6
YnVmZmVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjptYXhUaW1l
U2Vla2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpieXRlc0xv
YWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnRvdGFsQnl0ZXMp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRSYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0Vm9sdW1lKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0TXV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlOjpuZXR3b3JrU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlOjpyZWFkeVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZTo6c2V0VmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGU6Om1lZGlhU3RhdHVzQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGU6OmhhbmRsZUVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZTo6ZHVyYXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZTo6dXBkYXRlU3RhdGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZURlZmF1bHQ6Ok1lZGlhUGxheWVyUHJpdmF0ZURlZmF1bHQpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlRGVmYXVsdDo6fk1lZGlhUGxheWVyUHJpdmF0ZURlZmF1bHQpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlRGVmYXVsdDo6bmF0dXJhbFNpemUp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlRGVmYXVsdDo6cGFpbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlRGVmYXVsdDo6cmVwYWludCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuaDogQWRk
ZWQgUVBhaW50ZXJWaWRlb1N1cmZhY2UgdG8gV2ViQ29yZSBhcyBhIHRlbXBvcmFyeSBzb2x1dGlv
biB0byB0aGUgdXNlIG9mIGEgcHJpdmF0ZSBRdCBoZWFkZXIuCisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGU6OmlzQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZTo6c3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZTo6cG9zaXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZTo6cmVwYWludCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvUVBh
aW50ZXJWaWRlb1N1cmZhY2UuY3BwOiBBZGRlZCBRUGFpbnRlclZpZGVvU3VyZmFjZSB0byBXZWJD
b3JlIGFzIGEgdGVtcG9yYXJ5IHNvbHV0aW9uIHRvIHRoZSB1c2Ugb2YgYSBwcml2YXRlIFF0IGhl
YWRlci4KKyAgICAgICAgKFdlYkNvcmU6OlFWaWRlb1N1cmZhY2VQYWludGVyOjp+UVZpZGVvU3Vy
ZmFjZVBhaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UVZpZGVvU3VyZmFjZVJhc3RlclBhaW50
ZXI6OlFWaWRlb1N1cmZhY2VSYXN0ZXJQYWludGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlFWaWRl
b1N1cmZhY2VSYXN0ZXJQYWludGVyOjpzdXBwb3J0ZWRQaXhlbEZvcm1hdHMpOgorICAgICAgICAo
V2ViQ29yZTo6UVZpZGVvU3VyZmFjZVJhc3RlclBhaW50ZXI6OmlzRm9ybWF0U3VwcG9ydGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OlFWaWRlb1N1cmZhY2VSYXN0ZXJQYWludGVyOjpzdGFydCk6Cisg
ICAgICAgIChXZWJDb3JlOjpRVmlkZW9TdXJmYWNlUmFzdGVyUGFpbnRlcjo6c3RvcCk6CisgICAg
ICAgIChXZWJDb3JlOjpRVmlkZW9TdXJmYWNlUmFzdGVyUGFpbnRlcjo6c2V0Q3VycmVudEZyYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OlFWaWRlb1N1cmZhY2VSYXN0ZXJQYWludGVyOjpwYWludCk6
CisgICAgICAgIChXZWJDb3JlOjpRVmlkZW9TdXJmYWNlUmFzdGVyUGFpbnRlcjo6dXBkYXRlQ29s
b3JzKToKKyAgICAgICAgKFdlYkNvcmU6OlFWaWRlb1N1cmZhY2VHTFBhaW50ZXI6OlFWaWRlb1N1
cmZhY2VHTFBhaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UVZpZGVvU3VyZmFjZUdMUGFpbnRl
cjo6flFWaWRlb1N1cmZhY2VHTFBhaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UVZpZGVvU3Vy
ZmFjZUdMUGFpbnRlcjo6c3VwcG9ydGVkUGl4ZWxGb3JtYXRzKToKKyAgICAgICAgKFdlYkNvcmU6
OlFWaWRlb1N1cmZhY2VHTFBhaW50ZXI6OmlzRm9ybWF0U3VwcG9ydGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OlFWaWRlb1N1cmZhY2VHTFBhaW50ZXI6OnNldEN1cnJlbnRGcmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpRVmlkZW9TdXJmYWNlR0xQYWludGVyOjp1cGRhdGVDb2xvcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6UVZpZGVvU3VyZmFjZUdMUGFpbnRlcjo6aW5pdFJnYlRleHR1cmVJbmZvKToK
KyAgICAgICAgKFdlYkNvcmU6OlFWaWRlb1N1cmZhY2VHTFBhaW50ZXI6OmluaXRZdXY0MjBQVGV4
dHVyZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6UVZpZGVvU3VyZmFjZUdMUGFpbnRlcjo6aW5p
dFl2MTJUZXh0dXJlSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpRVmlkZW9TdXJmYWNlQXJiRnBQ
YWludGVyOjpRVmlkZW9TdXJmYWNlQXJiRnBQYWludGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlFW
aWRlb1N1cmZhY2VBcmJGcFBhaW50ZXI6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlFWaWRl
b1N1cmZhY2VBcmJGcFBhaW50ZXI6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6UVZpZGVvU3Vy
ZmFjZUFyYkZwUGFpbnRlcjo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UVZpZGVvU3VyZmFj
ZUdsc2xQYWludGVyOjpRVmlkZW9TdXJmYWNlR2xzbFBhaW50ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UVZpZGVvU3VyZmFjZUdsc2xQYWludGVyOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpR
VmlkZW9TdXJmYWNlR2xzbFBhaW50ZXI6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6UVZpZGVv
U3VyZmFjZUdsc2xQYWludGVyOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpRUGFpbnRlclZp
ZGVvU3VyZmFjZTo6UVBhaW50ZXJWaWRlb1N1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6UVBh
aW50ZXJWaWRlb1N1cmZhY2U6On5RUGFpbnRlclZpZGVvU3VyZmFjZSk6CisgICAgICAgIChXZWJD
b3JlOjpRUGFpbnRlclZpZGVvU3VyZmFjZTo6c3VwcG9ydGVkUGl4ZWxGb3JtYXRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlFQYWludGVyVmlkZW9TdXJmYWNlOjppc0Zvcm1hdFN1cHBvcnRlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpRUGFpbnRlclZpZGVvU3VyZmFjZTo6c3RhcnQpOgorICAgICAgICAo
V2ViQ29yZTo6UVBhaW50ZXJWaWRlb1N1cmZhY2U6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6
UVBhaW50ZXJWaWRlb1N1cmZhY2U6OnByZXNlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UVBhaW50
ZXJWaWRlb1N1cmZhY2U6OmJyaWdodG5lc3MpOgorICAgICAgICAoV2ViQ29yZTo6UVBhaW50ZXJW
aWRlb1N1cmZhY2U6OnNldEJyaWdodG5lc3MpOgorICAgICAgICAoV2ViQ29yZTo6UVBhaW50ZXJW
aWRlb1N1cmZhY2U6OmNvbnRyYXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlFQYWludGVyVmlkZW9T
dXJmYWNlOjpzZXRDb250cmFzdCk6CisgICAgICAgIChXZWJDb3JlOjpRUGFpbnRlclZpZGVvU3Vy
ZmFjZTo6aHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlFQYWludGVyVmlkZW9TdXJmYWNlOjpzZXRI
dWUpOgorICAgICAgICAoV2ViQ29yZTo6UVBhaW50ZXJWaWRlb1N1cmZhY2U6OnNhdHVyYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6UVBhaW50ZXJWaWRlb1N1cmZhY2U6OnNldFNhdHVyYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6UVBhaW50ZXJWaWRlb1N1cmZhY2U6OmlzUmVhZHkpOgorICAg
ICAgICAoV2ViQ29yZTo6UVBhaW50ZXJWaWRlb1N1cmZhY2U6OnNldFJlYWR5KToKKyAgICAgICAg
KFdlYkNvcmU6OlFQYWludGVyVmlkZW9TdXJmYWNlOjpwYWludCk6CisgICAgICAgIChXZWJDb3Jl
OjpRUGFpbnRlclZpZGVvU3VyZmFjZTo6Z2xDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlFQ
YWludGVyVmlkZW9TdXJmYWNlOjpzZXRHTENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UVBh
aW50ZXJWaWRlb1N1cmZhY2U6OnN1cHBvcnRlZFNoYWRlclR5cGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OlFQYWludGVyVmlkZW9TdXJmYWNlOjpzaGFkZXJUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OlFQYWludGVyVmlkZW9TdXJmYWNlOjpzZXRTaGFkZXJUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OlFQYWludGVyVmlkZW9TdXJmYWNlOjpjcmVhdGVQYWludGVyKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9xdC9RUGFpbnRlclZpZGVvU3VyZmFjZS5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6Oik6IEFkZGVkIFFQYWludGVyVmlkZW9TdXJmYWNlIHRvIFdlYkNvcmUgYXMgYSB0ZW1w
b3Jhcnkgc29sdXRpb24gdG8gdGhlIHVzZSBvZiBhIHByaXZhdGUgUXQgaGVhZGVyLgorICAgICAg
ICAqIHBsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuY3BwOiBVcGRhdGVkIG1lZGlhIGNvbnRyb2xz
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYU11dGVCdXR0b24p
OiBDaGFuZ2VkIHN0eWxpbmcuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWlu
dE1lZGlhQ3VycmVudFRpbWUpOiBBZGRlZCBjdXJyZW50IHRpbWUgZGlzcGxheS4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OmZvcm1hdE1lZGlhQ29udHJvbHNDdXJyZW50VGltZSk6
IEFkZGVkIHRpbWUgZm9ybWF0dGluZy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6
OmZvcm1hdE1lZGlhQ29udHJvbHNSZW1haW5pbmdUaW1lKTogQWRkZWQgdGltZSBmb3JtYXR0aW5n
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVZvbHVtZVNsaWRl
clRyYWNrKTogVm9sdW1lIHNsaWRlciBhZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lUXQ6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUaHVtYik6IFZvbHVtZSBzbGlkZXIgYWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhU2xpZGVyVHJhY2sp
OiBVcGRhdGVkIGZvciBRdE11bHRpbWVkaWEuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVF0OjpwYWludE1lZGlhU2xpZGVyVGh1bWIpOiBEcm9wcGVkIGFuIHVubmVjZXNzYXJ5IGNoZWNr
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6YWRqdXN0U2xpZGVyVGh1bWJTaXpl
KTogSGFuZGxlIGEgbWlzc2luZyBjYXNlLgorICAgICAgICAqIHBsYXRmb3JtL3F0L1JlbmRlclRo
ZW1lUXQuaDogUmVpbXBsZW1lbnRlZCBhIGZldyBtb3JlIG1ldGhvZHMuCisKIDIwMTAtMDItMDcg
IERhbmllbCBCYXRlcyAgPGRiYXRlc0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiA1NDQ3NSkKKysrIFdlYkNvcmUvV2ViQ29yZS5w
cm8JKHdvcmtpbmcgY29weSkKQEAgLTEzMSwxMSArMTMxLDIyIEBAIG1hbWVvNXxzeW1iaWFufGVt
YmVkZGVkIHsKIAogaW5jbHVkZSgkJFBXRC8uLi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS5wcmkpCiAKLSMgRGlzYWJsZSBIVE1MNSBtZWRpYSBjb21waWxhdGlvbiBpZiBwaG9ub24gaXMg
dW5hdmFpbGFibGUKLSFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfVklERU89MSkgewotICAgICFj
b250YWlucyhRVF9DT05GSUcsIHBob25vbikgewotICAgICAgICBERUZJTkVTIC09IEVOQUJMRV9W
SURFTz0xCi0gICAgICAgIERFRklORVMgKz0gRU5BQkxFX1ZJREVPPTAKKyMgUXRNdWx0aW1lZGlh
IHNpbmNlIDQuNworZ3JlYXRlclRoYW4oUVRfTUlOT1JfVkVSU0lPTiwgNikgeworICAgICMgRGlz
YWJsZSBIVE1MNSBtZWRpYSBjb21waWxhdGlvbiBpZiBxdG11bHRpbWVkaWEgaXMgdW5hdmFpbGFi
bGUKKyAgICAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1ZJREVPPTEpIHsKKyAgICAgICAgIWNv
bnRhaW5zKFFUX0NPTkZJRywgbXVsdGltZWRpYSkgeworICAgICAgICAgICAgREVGSU5FUyAtPSBF
TkFCTEVfVklERU89MQorICAgICAgICAgICAgREVGSU5FUyArPSBFTkFCTEVfVklERU89MAorICAg
ICAgICB9CisgICAgfQorfSBlbHNlIHsKKyAgICAjIERpc2FibGUgSFRNTDUgbWVkaWEgY29tcGls
YXRpb24gaWYgcGhvbm9uIGlzIHVuYXZhaWxhYmxlCisgICAgIWNvbnRhaW5zKERFRklORVMsIEVO
QUJMRV9WSURFTz0xKSB7CisgICAgICAgICFjb250YWlucyhRVF9DT05GSUcsIHBob25vbikgewor
ICAgICAgICAgICAgREVGSU5FUyAtPSBFTkFCTEVfVklERU89MQorICAgICAgICAgICAgREVGSU5F
UyArPSBFTkFCTEVfVklERU89MAorICAgICAgICB9CiAgICAgfQogfQogCkBAIC0yMjk5LDIxICsy
MzEwLDM1IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9WSURFTz0xKSB7CiAgICAgICAgIHJl
bmRlcmluZy9SZW5kZXJNZWRpYS5jcHAgXAogICAgICAgICBiaW5kaW5ncy9qcy9KU0F1ZGlvQ29u
c3RydWN0b3IuY3BwCiAKLSAgICAgICAgSEVBREVSUyArPSBcCi0gICAgICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVQaG9ub24uaAorICAgICAgICAjIFF0TXVs
dGltZWRpYSBzaW5jZSA0LjcKKyAgICAgICAgZ3JlYXRlclRoYW4oUVRfTUlOT1JfVkVSU0lPTiwg
NikgeworICAgICAgICAgICAgSEVBREVSUyArPSBcCisgICAgICAgICAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuaCBcCisgICAgICAgICAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvUVBhaW50ZXJWaWRlb1N1cmZhY2UuaAorCisgICAgICAgICAgICBT
T1VSQ0VTICs9IFwKKyAgICAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBs
YXllclByaXZhdGVRdC5jcHAgXAorICAgICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0
L1FQYWludGVyVmlkZW9TdXJmYWNlLmNwcAogCi0gICAgICAgIFNPVVJDRVMgKz0gXAotICAgICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uLmNwcAor
ICAgICAgICAgICAgUVQgKz0gbXVsdGltZWRpYQorICAgICAgICAgICAgY29udGFpbnMoUVRfQ09O
RklHLCBvcGVuZ2wpOiBRVCArPSBvcGVuZ2wKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IEhFQURFUlMgKz0gXAorICAgICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlh
UGxheWVyUHJpdmF0ZVBob25vbi5oCisKKyAgICAgICAgICAgIFNPVVJDRVMgKz0gXAorICAgICAg
ICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVBob25vbi5j
cHAKIAotICAgICAgICAjIEFkZCBwaG9ub24gbWFudWFsbHkgdG8gcHJldmVudCBpdCBmcm9tIGNv
bWluZyBmaXJzdCBpbgotICAgICAgICAjIHRoZSBpbmNsdWRlIHBhdGhzLCBhcyBQaG9ub24ncyBw
YXRoLmggY29uZmxpY3RzIHdpdGgKLSAgICAgICAgIyBXZWJDb3JlJ3MgUGF0aC5oIG9uIGNhc2Ut
aW5zZW5zaXRpdmUgZmlsZXN5c3RlbXMuCi0gICAgICAgIHF0QWRkTGlicmFyeShwaG9ub24pCi0g
ICAgICAgIElOQ0xVREVQQVRIIC09ICQkUU1BS0VfSU5DRElSX1FUL3Bob25vbgotICAgICAgICBJ
TkNMVURFUEFUSCArPSAkJFFNQUtFX0lOQ0RJUl9RVC9waG9ub24KLSAgICAgICAgbWFjIHsKLSAg
ICAgICAgICAgIElOQ0xVREVQQVRIIC09ICQkUU1BS0VfTElCRElSX1FUL3Bob25vbi5mcmFtZXdv
cmsvSGVhZGVycwotICAgICAgICAgICAgSU5DTFVERVBBVEggKz0gJCRRTUFLRV9MSUJESVJfUVQv
cGhvbm9uLmZyYW1ld29yay9IZWFkZXJzCisgICAgICAgICAgICAjIEFkZCBwaG9ub24gbWFudWFs
bHkgdG8gcHJldmVudCBpdCBmcm9tIGNvbWluZyBmaXJzdCBpbgorICAgICAgICAgICAgIyB0aGUg
aW5jbHVkZSBwYXRocywgYXMgUGhvbm9uJ3MgcGF0aC5oIGNvbmZsaWN0cyB3aXRoCisgICAgICAg
ICAgICAjIFdlYkNvcmUncyBQYXRoLmggb24gY2FzZS1pbnNlbnNpdGl2ZSBmaWxlc3lzdGVtcy4K
KyAgICAgICAgICAgIHF0QWRkTGlicmFyeShwaG9ub24pCisgICAgICAgICAgICBJTkNMVURFUEFU
SCAtPSAkJFFNQUtFX0lOQ0RJUl9RVC9waG9ub24KKyAgICAgICAgICAgIElOQ0xVREVQQVRIICs9
ICQkUU1BS0VfSU5DRElSX1FUL3Bob25vbgorICAgICAgICAgICAgbWFjIHsKKyAgICAgICAgICAg
ICAgICBJTkNMVURFUEFUSCAtPSAkJFFNQUtFX0xJQkRJUl9RVC9waG9ub24uZnJhbWV3b3JrL0hl
YWRlcnMKKyAgICAgICAgICAgICAgICBJTkNMVURFUEFUSCArPSAkJFFNQUtFX0xJQkRJUl9RVC9w
aG9ub24uZnJhbWV3b3JrL0hlYWRlcnMKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiB9Cklu
ZGV4OiBXZWJDb3JlL2Nzcy9tZWRpYUNvbnRyb2xzUXQuY3NzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvY3NzL21lZGlhQ29udHJvbHNRdC5jc3MJKHJldmlzaW9uIDU0NDc1KQorKysgV2ViQ29yZS9j
c3MvbWVkaWFDb250cm9sc1F0LmNzcwkod29ya2luZyBjb3B5KQpAQCAtNTEsOCArNTEsNiBAQCB2
aWRlbzotd2Via2l0LWZ1bGwtcGFnZS1tZWRpYTo6LXdlYmtpdC1tCiB9CiAKIGF1ZGlvOjotd2Vi
a2l0LW1lZGlhLWNvbnRyb2xzLW11dGUtYnV0dG9uLCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250
cm9scy1tdXRlLWJ1dHRvbiB7Ci0gICAgbGVmdDogYXV0bzsKLSAgICByaWdodDogNXB4OwogICAg
IHdpZHRoOiAxMnB4OwogICAgIGhlaWdodDogMTJweDsKICAgICBwYWRkaW5nOiA2cHg7CkBAIC02
MCw3ICs1OCw2IEBAIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLW11dGUtYnV0dG8KIH0K
IAogYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtcGxheS1idXR0b24sIHZpZGVvOjotd2Vi
a2l0LW1lZGlhLWNvbnRyb2xzLXBsYXktYnV0dG9uIHsKLSAgICBsZWZ0OiA1cHg7CiAgICAgd2lk
dGg6IDlweDsKICAgICBoZWlnaHQ6IDEycHg7CiAgICAgcGFkZGluZzogNnB4IDEycHggNnB4IDEx
cHg7CkBAIC03Miw3ICs2OSwyMCBAQCBhdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1l
bGluZS1jCiB9CiAKIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWN1cnJlbnQtdGltZS1k
aXNwbGF5LCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1jdXJyZW50LXRpbWUtZGlzcGxh
eSB7Ci0gICAgZGlzcGxheTogbm9uZTsKKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG1lZGlhLWN1
cnJlbnQtdGltZS1kaXNwbGF5OworICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CisgICAg
ZGlzcGxheTogaW5saW5lLWJsb2NrOworICAgIGhlaWdodDogMTJweDsKKyAgICBwYWRkaW5nOiA2
cHg7CisgICAgbWFyZ2luOiA1cHggM3B4OworCisgICAgb3ZlcmZsb3c6IGhpZGRlbjsKKyAgICBj
dXJzb3I6IGRlZmF1bHQ7CisKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgZm9udC1zaXpl
OiAxMHB4OworICAgIGZvbnQtZmFtaWx5OiBWZXJkYW5hOworICAgIGZvbnQtd2VpZ2h0OiBib2xk
OwogfQogCiBhdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lLXJlbWFpbmluZy1kaXNw
bGF5LCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lLXJlbWFpbmluZy1kaXNwbGF5
IHsKQEAgLTgwLDUxICs5MCwzOCBAQCBhdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1l
LXJlbWFpCiB9CiAKIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXRpbWVsaW5lLCB2aWRl
bzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lbGluZSB7Ci0gICAgbGVmdDogNDJweDsKLSAg
ICByaWdodDogMzRweDsKICAgICBoZWlnaHQ6IDEycHg7CiAgICAgcGFkZGluZzogNnB4IDhweDsK
LSAgICBtYXJnaW46IDVweCAwcHg7CisgICAgbWFyZ2luOiA1cHggM3B4OwogfQogCiBhdWRpbzo6
LXdlYmtpdC1tZWRpYS1jb250cm9scy12b2x1bWUtc2xpZGVyLWNvbnRhaW5lciwgdmlkZW86Oi13
ZWJraXQtbWVkaWEtY29udHJvbHMtdm9sdW1lLXNsaWRlci1jb250YWluZXIgewotICAgIGRpc3Bs
YXk6IG5vbmU7CisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBtZWRpYS12b2x1bWUtc2xpZGVyLWNv
bnRhaW5lcjsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgaGVpZ2h0OiAxMDNweDsKKyAg
ICB3aWR0aDogMjRweDsKIH0KIAogYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdm9sdW1l
LXNsaWRlciwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdm9sdW1lLXNsaWRlciB7Ci0g
ICAgZGlzcGxheTogbm9uZTsKKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG1lZGlhLXZvbHVtZS1z
bGlkZXI7CisgICAgZGlzcGxheTogaW5saW5lOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKwor
ICAgIHdpZHRoOiAxMnB4OworICAgIHBhZGRpbmc6IDZweDsKKyAgICBoZWlnaHQ6IDg4cHg7Cisg
ICAgbWFyZ2luOiAwIDAgM3B4IDA7CiB9CiAKIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xz
LXNlZWstYmFjay1idXR0b24sIHZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXNlZWstYmFj
ay1idXR0b24gewotICAgIC8qIFNpbmNlIE1lZGlhQ29udHJvbEVsZW1lbnRzIGFyZSBhbHdheXMg
Y3JlYXRlZCB3aXRoIGEgcmVuZGVyZXIgd2UgaGF2ZSB0byBoaWRlCi0gICAgICAgdGhlIGNvbnRy
b2xzIHdlIGRvbid0IHVzZSwgc28gdGhleSBkb24ndCBtZXNzIHVwIGFjdGl2YXRpb24gYW5kIGV2
ZW50IGhhbmRsaW5nICovCi0gICAgbGVmdDogMHB4OwotICAgIHRvcDogMHB4OwotICAgIHdpZHRo
OiAwcHg7Ci0gICAgaGVpZ2h0OiAwcHg7Ci0KICAgICBkaXNwbGF5OiBub25lOwogfQogCiBhdWRp
bzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1zZWVrLWZvcndhcmQtYnV0dG9uLCB2aWRlbzo6LXdl
YmtpdC1tZWRpYS1jb250cm9scy1zZWVrLWZvcndhcmQtYnV0dG9uIHsKLSAgICAvKiBTaW5jZSBN
ZWRpYUNvbnRyb2xFbGVtZW50cyBhcmUgYWx3YXlzIGNyZWF0ZWQgd2l0aCBhIHJlbmRlcmVyIHdl
IGhhdmUgdG8gaGlkZQotICAgICAgIHRoZSBjb250cm9scyB3ZSBkb24ndCB1c2UsIHNvIHRoZXkg
ZG9uJ3QgbWVzcyB1cCBhY3RpdmF0aW9uIGFuZCBldmVudCBoYW5kbGluZyAqLwotICAgIGxlZnQ6
IDBweDsKLSAgICB0b3A6IDBweDsKLSAgICB3aWR0aDogMHB4OwotICAgIGhlaWdodDogMHB4Owot
CiAgICAgZGlzcGxheTogbm9uZTsKIH0KIAogYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMt
ZnVsbHNjcmVlbi1idXR0b24sIHZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWZ1bGxzY3Jl
ZW4tYnV0dG9uIHsKLSAgICAvKiBTaW5jZSBNZWRpYUNvbnRyb2xFbGVtZW50cyBhcmUgYWx3YXlz
IGNyZWF0ZWQgd2l0aCBhIHJlbmRlcmVyIHdlIGhhdmUgdG8gaGlkZQotICAgICAgIHRoZSBjb250
cm9scyB3ZSBkb24ndCB1c2UsIHNvIHRoZXkgZG9uJ3QgbWVzcyB1cCBhY3RpdmF0aW9uIGFuZCBl
dmVudCBoYW5kbGluZyAqLwotICAgIGxlZnQ6IDBweDsKLSAgICB0b3A6IDBweDsKLSAgICB3aWR0
aDogMHB4OwotICAgIGhlaWdodDogMHB4OwotCiAgICAgZGlzcGxheTogbm9uZTsKIH0KIApAQCAt
MTM2LDMgKzEzMyw3IEBAIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXJldHVybi10by0K
ICAgICBkaXNwbGF5OiBub25lOwogfQogCithdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10
b2dnbGUtY2xvc2VkLWNhcHRpb25zLWJ1dHRvbiwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJv
bHMtdG9nZ2xlLWNsb3NlZC1jYXB0aW9ucy1idXR0b24geworICAgIGRpc3BsYXk6IG5vbmU7Cit9
CisKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCShyZXZp
c2lvbiA1NDQ3NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNywxMCBAQAogI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiVGltZVJhbmdlcy5oIgogCisjaWYgUExBVEZPUk0oUVQpCisjaW5jbHVkZSA8
UXRHbG9iYWw+CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKE1BQykKICNpbmNsdWRlICJNZWRpYVBs
YXllclByaXZhdGVRVEtpdC5oIgogI2VsaWYgT1MoV0lOQ0UpICYmICFQTEFURk9STShRVCkKQEAg
LTQ2LDcgKzUwLDExIEBACiAjZWxpZiBQTEFURk9STShHVEspCiAjaW5jbHVkZSAiTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyLmgiCiAjZWxpZiBQTEFURk9STShRVCkKLSNpbmNsdWRlICJNZWRp
YVBsYXllclByaXZhdGVQaG9ub24uaCIKKyAgICAjaWYgUVRfVkVSU0lPTiA8IDB4MDQwNzAwCisg
ICAgI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZVBob25vbi5oIgorICAgICNlbHNlCisgICAg
I2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZVF0LmgiCisgICAgI2VuZGlmCiAjZWxpZiBQTEFU
Rk9STShDSFJPTUlVTSkKICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVDaHJvbWl1bS5oIgog
I2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJp
dmF0ZVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01l
ZGlhUGxheWVyUHJpdmF0ZVF0LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDQ5OSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZVF0LmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisj
aW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnRRdC5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
CisjaW5jbHVkZSAiUVBhaW50ZXJWaWRlb1N1cmZhY2UuaCIKKyNpbmNsdWRlICJUaW1lUmFuZ2Vz
LmgiCisjaW5jbHVkZSAiV2lkZ2V0LmgiCisKKyNpbmNsdWRlICJxd2ViZnJhbWUuaCIKKyNpbmNs
dWRlICJxd2VicGFnZS5oIgorCisjaW5jbHVkZSA8UU5ldHdvcmtBY2Nlc3NNYW5hZ2VyPgorI2lu
Y2x1ZGUgPFFOZXR3b3JrQ29va2llSmFyPgorI2luY2x1ZGUgPFFOZXR3b3JrUmVxdWVzdD4KKyNp
bmNsdWRlIDxRUGFpbnRlcj4KKyNpbmNsdWRlIDxRUmVjdD4KKyNpbmNsdWRlIDxRVGltZT4KKyNp
bmNsdWRlIDxRVXJsPgorI2luY2x1ZGUgPFFWaWRlb1N1cmZhY2VGb3JtYXQ+CisjaW5jbHVkZSA8
bGltaXRzPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisKKyNpZiAhZGVmaW5lZChRVF9OT19P
UEVOR0wpICYmICFkZWZpbmVkKFFUX09QRU5HTF9FU18xX0NMKSAmJiAhZGVmaW5lZChRVF9PUEVO
R0xfRVNfMSkKKyNpbmNsdWRlIDxRR0xDb250ZXh0PgorI2VuZGlmCisKKy8vIFF0IE11bHRpbWVk
aWEgSW5jbHVkZXMKKyNpbmNsdWRlIDxRTWVkaWFTZXJ2aWNlPgorI2luY2x1ZGUgPFFWaWRlb091
dHB1dENvbnRyb2w+CisjaW5jbHVkZSA8UVZpZGVvUmVuZGVyZXJDb250cm9sPgorI2luY2x1ZGUg
PFFWaWRlb1dpbmRvd0NvbnRyb2w+CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlRGVmYXVsdCA6IHB1YmxpYyBN
ZWRpYVBsYXllclByaXZhdGUgeworcHVibGljOgorICAgIEludFNpemUgbmF0dXJhbFNpemUoKSBj
b25zdDsKKyAgICB2b2lkIHNldFNpemUoY29uc3QgSW50U2l6ZSYpIHt9CisgICAgdm9pZCBwYWlu
dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CisgICAgYm9vbCBzdXBwb3J0c0Z1
bGxzY3JlZW4oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCitwcml2YXRlIHNsb3RzOgorICAg
IHZvaWQgcmVwYWludCgpOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBNZWRpYVBsYXll
clByaXZhdGU7CisgICAgTWVkaWFQbGF5ZXJQcml2YXRlRGVmYXVsdChNZWRpYVBsYXllciopOwor
ICAgIH5NZWRpYVBsYXllclByaXZhdGVEZWZhdWx0KCk7CisKKyAgICBRUGFpbnRlclZpZGVvU3Vy
ZmFjZSogbV92aWRlb1N1cmZhY2U7CisgICAgUVZpZGVvT3V0cHV0Q29udHJvbCogbV9vdXRwdXRD
b250cm9sOworICAgIFFWaWRlb1JlbmRlcmVyQ29udHJvbCogbV9yZW5kZXJlckNvbnRyb2w7Cisg
ICAgUVZpZGVvV2luZG93Q29udHJvbCogbV93aW5kb3dDb250cm9sOworCisgICAgYm9vbCBtX2lz
QWN0aXZlOworfTsKKworTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlKiBNZWRpYVBsYXllclBy
aXZhdGU6OmNyZWF0ZShNZWRpYVBsYXllciogcGxheWVyKQoreworICAgIHJldHVybiBuZXcgTWVk
aWFQbGF5ZXJQcml2YXRlRGVmYXVsdChwbGF5ZXIpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZTo6cmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJlZ2lzdHJhciByZWdpc3RyYXIp
Cit7CisgICAgcmVnaXN0cmFyKGNyZWF0ZSwgZ2V0U3VwcG9ydGVkVHlwZXMsIHN1cHBvcnRzVHlw
ZSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpnZXRTdXBwb3J0ZWRUeXBlcyhIYXNo
U2V0PFN0cmluZz4gJnN1cHBvcnRlZCkKK3sKKyAgICBRU3RyaW5nTGlzdCB0eXBlcyA9IFFNZWRp
YVBsYXllcjo6c3VwcG9ydGVkTWltZVR5cGVzKCk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8
IHR5cGVzLnNpemUoKTsgaSsrKQorICAgICAgICBzdXBwb3J0ZWQuYWRkKHR5cGVzLmF0KGkpKTsK
K30KKworTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGU6OnN1cHBv
cnRzVHlwZShjb25zdCBTdHJpbmcmIG1pbWUsIGNvbnN0IFN0cmluZyYgY29kZWMpCit7CisgICAg
aWYgKFFNZWRpYVBsYXllcjo6aGFzU3VwcG9ydChtaW1lLCBRU3RyaW5nTGlzdChjb2RlYykpID49
IFF0TWVkaWE6OlByb2JhYmx5U3VwcG9ydGVkKQorICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXI6
OklzU3VwcG9ydGVkOworCisgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpNYXlCZVN1cHBvcnRlZDsK
K30KKworTWVkaWFQbGF5ZXJQcml2YXRlOjpNZWRpYVBsYXllclByaXZhdGUoTWVkaWFQbGF5ZXIq
IHBsYXllcikKKyAgICA6IG1fcGxheWVyKHBsYXllcikKKyAgICAsIG1fbWVkaWFQbGF5ZXIobmV3
IFFNZWRpYVBsYXllcikKKyAgICAsIG1fbmV0d29ya1N0YXRlKE1lZGlhUGxheWVyOjpFbXB0eSkK
KyAgICAsIG1fcmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcpCisgICAgLCBtX2lz
VmlzaWJsZShmYWxzZSkKK3sKKyAgICAvLyBTaWduYWwgSGFuZGxlcnMKKyAgICBjb25uZWN0KG1f
bWVkaWFQbGF5ZXIsIFNJR05BTChtZWRpYVN0YXR1c0NoYW5nZWQoUU1lZGlhUGxheWVyOjpNZWRp
YVN0YXR1cykpLAorICAgICAgICAgICAgdGhpcywgU0xPVChtZWRpYVN0YXR1c0NoYW5nZWQoUU1l
ZGlhUGxheWVyOjpNZWRpYVN0YXR1cykpKTsKKyAgICBjb25uZWN0KG1fbWVkaWFQbGF5ZXIsIFNJ
R05BTChzdGF0ZUNoYW5nZWQoUU1lZGlhUGxheWVyOjpTdGF0ZSkpLAorICAgICAgICAgICAgdGhp
cywgU0xPVChzdGF0ZUNoYW5nZWQoUU1lZGlhUGxheWVyOjpTdGF0ZSkpKTsKKyAgICBjb25uZWN0
KG1fbWVkaWFQbGF5ZXIsIFNJR05BTChlcnJvcihRTWVkaWFQbGF5ZXI6OkVycm9yKSksCisgICAg
ICAgICAgICB0aGlzLCBTTE9UKGhhbmRsZUVycm9yKFFNZWRpYVBsYXllcjo6RXJyb3IpKSk7Cisg
ICAgY29ubmVjdChtX21lZGlhUGxheWVyLCBTSUdOQUwoZHVyYXRpb25DaGFuZ2VkKHFpbnQ2NCkp
LAorICAgICAgICAgICAgdGhpcywgU0xPVChkdXJhdGlvbkNoYW5nZWQocWludDY0KSkpOworICAg
IGNvbm5lY3QobV9tZWRpYVBsYXllciwgU0lHTkFMKHBvc2l0aW9uQ2hhbmdlZChxaW50NjQpKSwK
KyAgICAgICAgICAgIHRoaXMsIFNMT1QocG9zaXRpb25DaGFuZ2VkKHFpbnQ2NCkpKTsKKworICAg
IC8vIEdyYWIgdGhlIHBsYXllciBjb250cm9sCisgICAgaWYgKG1fbWVkaWFQbGF5ZXIpIHsKKyAg
ICAgICAgUU1lZGlhU2VydmljZSogc2VydmljZSA9IG1fbWVkaWFQbGF5ZXItPnNlcnZpY2UoKTsK
KyAgICAgICAgaWYgKHNlcnZpY2UpIHsKKyAgICAgICAgICAgIG1fbWVkaWFQbGF5ZXJDb250cm9s
ID0gcW9iamVjdF9jYXN0PFFNZWRpYVBsYXllckNvbnRyb2wgKj4oCisgICAgICAgICAgICAgICAg
ICAgIHNlcnZpY2UtPmNvbnRyb2woUU1lZGlhUGxheWVyQ29udHJvbF9paWQpKTsKKyAgICAgICAg
fQorICAgIH0KK30KKworTWVkaWFQbGF5ZXJQcml2YXRlOjp+TWVkaWFQbGF5ZXJQcml2YXRlKCkK
K3sKKyAgICBkZWxldGUgbV9tZWRpYVBsYXllcjsKKyAgICBtX21lZGlhUGxheWVyID0gMDsKK30K
KworYm9vbCBNZWRpYVBsYXllclByaXZhdGU6Omhhc1ZpZGVvKCkgY29uc3QKK3sKKyAgICAvLyBy
ZXR1cm4gbV9tZWRpYVBsYXllci0+aXNWaWRlb0F2YWlsYWJsZSgpOworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6aGFzQXVkaW8oKSBjb25zdAoreworICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6bG9hZChjb25zdCBT
dHJpbmcmIHVybCkKK3sKKyAgICAvLyBXZSBhcmUgbm93IGxvYWRpbmcKKyAgICBpZiAobV9uZXR3
b3JrU3RhdGUgIT0gTWVkaWFQbGF5ZXI6OkxvYWRpbmcpIHsKKyAgICAgICAgbV9uZXR3b3JrU3Rh
dGUgPSBNZWRpYVBsYXllcjo6TG9hZGluZzsKKyAgICAgICAgbV9wbGF5ZXItPm5ldHdvcmtTdGF0
ZUNoYW5nZWQoKTsKKyAgICB9CisKKyAgICAvLyBBbmQgd2UgZG9uJ3QgaGF2ZSBhbnkgZGF0YSB5
ZXQKKyAgICBpZiAobV9yZWFkeVN0YXRlICE9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZykgewor
ICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7CisgICAgICAg
IG1fcGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOworICAgIH0KKworICAgIGNvbnN0IFFVcmwg
clVybCh1cmwpOworICAgIGNvbnN0IFFTdHJpbmcgc2NoZW1lID0gclVybC5zY2hlbWUoKS50b0xv
d2VyKCk7CisKKyAgICAvLyBDb25zdHJ1Y3QgdGhlIG1lZGlhIGNvbnRlbnQgd2l0aCBhIG5ldHdv
cmsgcmVxdWVzdCBpZiB0aGUgcmVzb3VyY2UgaXMgaHR0cFtzXQorICAgIGlmIChzY2hlbWUgPT0g
Imh0dHAiIHx8IHNjaGVtZSA9PSAiaHR0cHMiKSB7CisgICAgICAgIFFOZXR3b3JrUmVxdWVzdCBy
ZXF1ZXN0ID0gUU5ldHdvcmtSZXF1ZXN0KHJVcmwpOworCisgICAgICAgIC8vIEdyYWIgdGhlIGN1
cnJlbnQgZG9jdW1lbnQgYW5kIG5ldHdvcmsgbWFuYWdlcgorICAgICAgICBGcmFtZSogZnJhbWUg
PSBtX3BsYXllci0+ZnJhbWVWaWV3KCkgPyBtX3BsYXllci0+ZnJhbWVWaWV3KCktPmZyYW1lKCkg
OiAwOworICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZSA/IGZyYW1lLT5kb2N1bWVu
dCgpIDogMDsKKyAgICAgICAgRnJhbWVMb2FkZXJDbGllbnRRdCogZnJhbWVMb2FkZXIgPSAgZnJh
bWUgPyBzdGF0aWNfY2FzdDxGcmFtZUxvYWRlckNsaWVudFF0Kj4oZnJhbWUtPmxvYWRlcigpLT5j
bGllbnQoKSkgOiAwOworICAgICAgICBRTmV0d29ya0FjY2Vzc01hbmFnZXIqIG1hbmFnZXIgPSBm
cmFtZUxvYWRlciA/IGZyYW1lTG9hZGVyLT53ZWJGcmFtZSgpLT5wYWdlKCktPm5ldHdvcmtBY2Nl
c3NNYW5hZ2VyKCkgOiAwOworCisgICAgICAgIGlmIChkb2N1bWVudCAmJiBtYW5hZ2VyKSB7Cisg
ICAgICAgICAgICAvLyBTZXQgdGhlIGNvb2tpZXMKKyAgICAgICAgICAgIFFOZXR3b3JrQ29va2ll
SmFyKiBjb29raWVzID0gbWFuYWdlci0+Y29va2llSmFyKCk7CisgICAgICAgICAgICByZXF1ZXN0
LnNldEhlYWRlcihRTmV0d29ya1JlcXVlc3Q6OkNvb2tpZUhlYWRlciwgcVZhcmlhbnRGcm9tVmFs
dWUoY29va2llcy0+Y29va2llc0ZvclVybChyVXJsKSkpOworCisgICAgICAgICAgICAvLyBTZXQg
dGhlIHJlZmZlcmVyCisgICAgICAgICAgICByZXF1ZXN0LnNldFJhd0hlYWRlcigiUmVmZmVyZXIi
LCBkb2N1bWVudC0+ZG9jdW1lbnRVUkkoKS51dGY4KCkuZGF0YSgpKTsKKworICAgICAgICAgICAg
Ly8gU2V0IHRoZSB1c2VyIGFnZW50CisgICAgICAgICAgICByZXF1ZXN0LnNldFJhd0hlYWRlcigi
VXNlci1BZ2VudCIsIGZyYW1lTG9hZGVyLT51c2VyQWdlbnQoclVybCkudXRmOCgpLmRhdGEoKSk7
CisgICAgICAgIH0KKworICAgICAgICBtX21lZGlhUGxheWVyLT5zZXRNZWRpYShRTWVkaWFDb250
ZW50KHJlcXVlc3QpKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBPdGhlcndpc2UsIGp1c3Qg
dXNlIHRoZSBVUkwKKyAgICAgICAgbV9tZWRpYVBsYXllci0+c2V0TWVkaWEoUU1lZGlhQ29udGVu
dChyVXJsKSk7CisgICAgfQorfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Y2FuY2VsTG9h
ZCgpCit7CisgICAgbV9tZWRpYVBsYXllci0+c2V0TWVkaWEoUU1lZGlhQ29udGVudCgpKTsKKyAg
ICB1cGRhdGVTdGF0ZXMoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnBsYXkoKQor
eworICAgIGlmIChtX21lZGlhUGxheWVyLT5zdGF0ZSgpICE9IFFNZWRpYVBsYXllcjo6UGxheWlu
Z1N0YXRlKQorICAgICAgICBtX21lZGlhUGxheWVyLT5wbGF5KCk7Cit9CisKK3ZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlOjpwYXVzZSgpCit7CisgICAgaWYgKG1fbWVkaWFQbGF5ZXItPnN0YXRlKCkg
PT0gUU1lZGlhUGxheWVyOjpQbGF5aW5nU3RhdGUpCisgICAgICAgIG1fbWVkaWFQbGF5ZXItPnBh
dXNlKCk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpwYXVzZWQoKSBjb25zdAorewor
ICAgIHJldHVybiBtX21lZGlhUGxheWVyLT5zdGF0ZSgpICE9IFFNZWRpYVBsYXllcjo6UGxheWlu
Z1N0YXRlOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2VlayhmbG9hdCBwb3NpdGlv
bikKK3sKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXItPmlzU2Vla2FibGUoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKG1fbWVkaWFQbGF5ZXJDb250cm9sICYmICFtX21lZGlhUGxheWVyQ29u
dHJvbC0+YXZhaWxhYmxlUGxheWJhY2tSYW5nZXMoKS5jb250YWlucyhwb3NpdGlvbiAqIDEwMDAp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAocG9zaXRpb24gPiBkdXJhdGlvbigpKQorICAg
ICAgICBwb3NpdGlvbiA9IGR1cmF0aW9uKCk7CisKKyAgICBtX21lZGlhUGxheWVyLT5zZXRQb3Np
dGlvbihwb3NpdGlvbiAqIDEwMDAuMGYpOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6
c2Vla2luZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitmbG9hdCBNZWRpYVBs
YXllclByaXZhdGU6OmR1cmF0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAobV9yZWFkeVN0YXRlIDwg
TWVkaWFQbGF5ZXI6OkhhdmVNZXRhZGF0YSkKKyAgICAgICAgcmV0dXJuIDAuMGY7CisKKyAgICBm
bG9hdCBkdXJhdGlvbiA9IG1fbWVkaWFQbGF5ZXItPmR1cmF0aW9uKCkgLyAxMDAwLjBmOworCisg
ICAgLy8gV2UgYXJlIHN0cmVhbWluZworICAgIGlmIChkdXJhdGlvbiA8PSAwLjBmKQorICAgICAg
ICBkdXJhdGlvbiA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpOworCisg
ICAgcmV0dXJuIGR1cmF0aW9uOworfQorCitmbG9hdCBNZWRpYVBsYXllclByaXZhdGU6OmN1cnJl
bnRUaW1lKCkgY29uc3QKK3sKKyAgICBmbG9hdCBjdXJyZW50VGltZSA9IG1fbWVkaWFQbGF5ZXIt
PnBvc2l0aW9uKCkgLyAxMDAwLjBmOworICAgIHJldHVybiBjdXJyZW50VGltZTsKK30KKworUGFz
c1JlZlB0cjxUaW1lUmFuZ2VzPiBNZWRpYVBsYXllclByaXZhdGU6OmJ1ZmZlcmVkKCkgY29uc3QK
K3sKKyAgICBSZWZQdHI8VGltZVJhbmdlcz4gYnVmZmVyZWQgPSBUaW1lUmFuZ2VzOjpjcmVhdGUo
KTsKKworICAgIGlmICghbV9tZWRpYVBsYXllckNvbnRyb2wpCisgICAgICAgIHJldHVybiBidWZm
ZXJlZDsKKworICAgIFFNZWRpYVRpbWVSYW5nZSBwbGF5YmFja1JhbmdlcyA9IG1fbWVkaWFQbGF5
ZXJDb250cm9sLT5hdmFpbGFibGVQbGF5YmFja1JhbmdlcygpOworCisgICAgZm9yZWFjaCAoY29u
c3QgUU1lZGlhVGltZUludGVydmFsIGludGVydmFsLCBwbGF5YmFja1Jhbmdlcy5pbnRlcnZhbHMo
KSkgeworICAgICAgICBmbG9hdCByYW5nZU1pbiA9IHN0YXRpY19jYXN0PGZsb2F0PihpbnRlcnZh
bC5zdGFydCgpKSAvIDEwMDAuMGY7CisgICAgICAgIGZsb2F0IHJhbmdlTWF4ID0gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KGludGVydmFsLmVuZCgpKSAvIDEwMDAuMGY7CisgICAgICAgIGJ1ZmZlcmVkLT5h
ZGQocmFuZ2VNaW4sIHJhbmdlTWF4KTsKKyAgICB9CisKKyAgICByZXR1cm4gYnVmZmVyZWQucmVs
ZWFzZSgpOworfQorCitmbG9hdCBNZWRpYVBsYXllclByaXZhdGU6Om1heFRpbWVTZWVrYWJsZSgp
IGNvbnN0Cit7CisgICAgaWYgKCFtX21lZGlhUGxheWVyQ29udHJvbCkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fbWVkaWFQbGF5ZXJDb250cm9s
LT5hdmFpbGFibGVQbGF5YmFja1JhbmdlcygpLmxhdGVzdFRpbWUoKSkgLyAxMDAwLjBmOworfQor
Cit1bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGU6OmJ5dGVzTG9hZGVkKCkgY29uc3QKK3sKKyAg
ICB1bnNpZ25lZCBwZXJjZW50YWdlID0gbV9tZWRpYVBsYXllci0+YnVmZmVyU3RhdHVzKCk7CisK
KyAgICBpZiAocGVyY2VudGFnZSA9PSAxMDApIHsKKyAgICAgICAgaWYgKG1fbmV0d29ya1N0YXRl
ICE9IE1lZGlhUGxheWVyOjpJZGxlKSB7CisgICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1l
ZGlhUGxheWVyOjpJZGxlOworICAgICAgICAgICAgbV9wbGF5ZXItPm5ldHdvcmtTdGF0ZUNoYW5n
ZWQoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9yZWFkeVN0YXRlICE9IE1lZGlhUGxheWVy
OjpIYXZlRW5vdWdoRGF0YSkgeworICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5
ZXI6OkhhdmVFbm91Z2hEYXRhOworICAgICAgICAgICAgbV9wbGF5ZXItPnJlYWR5U3RhdGVDaGFu
Z2VkKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBRTGF0aW4xU3RyaW5nIGJsS2V5KCJieXRl
cy1sb2FkZWQiKTsKKyAgICBpZiAobV9tZWRpYVBsYXllci0+YXZhaWxhYmxlRXh0ZW5kZWRNZXRh
RGF0YSgpLmNvbnRhaW5zKGJsS2V5KSkKKyAgICAgICAgcmV0dXJuIG1fbWVkaWFQbGF5ZXItPmV4
dGVuZGVkTWV0YURhdGEoYmxLZXkpLnRvSW50KCk7CisKKyAgICByZXR1cm4gcGVyY2VudGFnZTsK
K30KKwordW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRlOjp0b3RhbEJ5dGVzKCkgY29uc3QKK3sK
KyAgICBpZiAobV9tZWRpYVBsYXllci0+YXZhaWxhYmxlTWV0YURhdGEoKS5jb250YWlucyhRdE1l
ZGlhOjpTaXplKSkKKyAgICAgICAgcmV0dXJuIG1fbWVkaWFQbGF5ZXItPm1ldGFEYXRhKFF0TWVk
aWE6OlNpemUpLnRvSW50KCk7CisKKyAgICByZXR1cm4gMTAwOworfQorCit2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZTo6c2V0UmF0ZShmbG9hdCByYXRlKQoreworICAgIG1fbWVkaWFQbGF5ZXItPnNl
dFBsYXliYWNrUmF0ZShyYXRlKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldFZv
bHVtZShmbG9hdCB2b2x1bWUpCit7CisgICAgbV9tZWRpYVBsYXllci0+c2V0Vm9sdW1lKHN0YXRp
Y19jYXN0PGludD4odm9sdW1lICogMTAwLjApKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZh
dGU6OnNldE11dGVkKGJvb2wgbXV0ZWQpCit7CisgICAgbV9tZWRpYVBsYXllci0+c2V0TXV0ZWQo
bXV0ZWQpOworfQorCitNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIE1lZGlhUGxheWVyUHJpdmF0
ZTo6bmV0d29ya1N0YXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9uZXR3b3JrU3RhdGU7Cit9
CisKK01lZGlhUGxheWVyOjpSZWFkeVN0YXRlIE1lZGlhUGxheWVyUHJpdmF0ZTo6cmVhZHlTdGF0
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVhZHlTdGF0ZTsKK30KKwordm9pZCBNZWRpYVBs
YXllclByaXZhdGU6OnNldFZpc2libGUoYm9vbCB2aXNpYmxlKQoreworICAgIG1faXNWaXNpYmxl
ID0gdmlzaWJsZTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om1lZGlhU3RhdHVzQ2hh
bmdlZChRTWVkaWFQbGF5ZXI6Ok1lZGlhU3RhdHVzKQoreworICAgIHVwZGF0ZVN0YXRlcygpOwor
fQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6aGFuZGxlRXJyb3IoUU1lZGlhUGxheWVyOjpF
cnJvcikKK3sKKyAgICB1cGRhdGVTdGF0ZXMoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZh
dGU6OmR1cmF0aW9uQ2hhbmdlZChxaW50NjQpCit7CisgICAgbV9wbGF5ZXItPmR1cmF0aW9uQ2hh
bmdlZCgpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6dXBkYXRlU3RhdGVzKCkKK3sK
KyAgICAvLyBTdG9yZSB0aGUgb2xkIHN0YXRlcyBzbyB0aGF0IHdlIGNhbiBkZXRlY3QgYSBjaGFu
Z2UgYW5kIHJhaXNlIGNoYW5nZSBldmVudHMKKyAgICBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRl
IG9sZE5ldHdvcmtTdGF0ZSA9IG1fbmV0d29ya1N0YXRlOworICAgIE1lZGlhUGxheWVyOjpSZWFk
eVN0YXRlIG9sZFJlYWR5U3RhdGUgPSBtX3JlYWR5U3RhdGU7CisKKyAgICBRTWVkaWFQbGF5ZXI6
Ok1lZGlhU3RhdHVzIGN1cnJlbnRTdGF0dXMgPSBtX21lZGlhUGxheWVyLT5tZWRpYVN0YXR1cygp
OworICAgIFFNZWRpYVBsYXllcjo6RXJyb3IgY3VycmVudEVycm9yID0gbV9tZWRpYVBsYXllci0+
ZXJyb3IoKTsKKworICAgIGlmIChjdXJyZW50RXJyb3IgIT0gUU1lZGlhUGxheWVyOjpOb0Vycm9y
KSB7CisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKKyAg
ICAgICAgaWYgKGN1cnJlbnRFcnJvciA9PSBRTWVkaWFQbGF5ZXI6OkZvcm1hdEVycm9yKQorICAg
ICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6Rm9ybWF0RXJyb3I7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6Ok5ldHdv
cmtFcnJvcjsKKyAgICB9IGVsc2UgaWYgKGN1cnJlbnRTdGF0dXMgPT0gUU1lZGlhUGxheWVyOjpV
bmtub3duTWVkaWFTdGF0dXMKKyAgICAgICAgICAgICAgIHx8IGN1cnJlbnRTdGF0dXMgPT0gUU1l
ZGlhUGxheWVyOjpOb01lZGlhKSB7CisgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5
ZXI6OklkbGU7CisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGlu
ZzsKKyAgICB9IGVsc2UgaWYgKGN1cnJlbnRTdGF0dXMgPT0gUU1lZGlhUGxheWVyOjpMb2FkaW5n
TWVkaWEpIHsKKyAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGluZzsK
KyAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOworICAgIH0g
ZWxzZSBpZiAoY3VycmVudFN0YXR1cyA9PSBRTWVkaWFQbGF5ZXI6OkxvYWRlZE1lZGlhKSB7Cisg
ICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRpbmc7CisgICAgICAgIG1f
cmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTWV0YWRhdGE7CisgICAgfSBlbHNlIGlmIChj
dXJyZW50U3RhdHVzID09IFFNZWRpYVBsYXllcjo6QnVmZmVyaW5nTWVkaWEpIHsKKyAgICAgICAg
bV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGluZzsKKyAgICAgICAgbV9yZWFkeVN0
YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVGdXR1cmVEYXRhOworICAgIH0gZWxzZSBpZiAoY3VycmVu
dFN0YXR1cyA9PSBRTWVkaWFQbGF5ZXI6OlN0YWxsZWRNZWRpYSkgeworICAgICAgICBtX25ldHdv
cmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOworICAgICAgICBtX3JlYWR5U3RhdGUgPSBN
ZWRpYVBsYXllcjo6SGF2ZUN1cnJlbnREYXRhOworICAgIH0gZWxzZSBpZiAoY3VycmVudFN0YXR1
cyA9PSBRTWVkaWFQbGF5ZXI6OkJ1ZmZlcmVkTWVkaWEKKyAgICAgICAgICAgICAgIHx8IGN1cnJl
bnRTdGF0dXMgPT0gUU1lZGlhUGxheWVyOjpFbmRPZk1lZGlhKSB7CisgICAgICAgIG1fbmV0d29y
a1N0YXRlID0gTWVkaWFQbGF5ZXI6OklkbGU7CisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlh
UGxheWVyOjpIYXZlRW5vdWdoRGF0YTsKKyAgICB9IGVsc2UgaWYgKGN1cnJlbnRTdGF0dXMgPT0g
UU1lZGlhUGxheWVyOjpJbnZhbGlkTWVkaWEpIHsKKyAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBN
ZWRpYVBsYXllcjo6Rm9ybWF0RXJyb3I7CisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxh
eWVyOjpIYXZlTWV0YWRhdGE7CisgICAgfQorCisgICAgLy8gTG9nIHRoZSBzdGF0ZSBjaGFuZ2Vz
IGFuZCByYWlzZSB0aGUgc3RhdGUgY2hhbmdlIGV2ZW50cworICAgIGlmIChtX25ldHdvcmtTdGF0
ZSAhPSBvbGROZXR3b3JrU3RhdGUpCisgICAgICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFu
Z2VkKCk7CisKKyAgICBpZiAobV9yZWFkeVN0YXRlICE9IG9sZFJlYWR5U3RhdGUpCisgICAgICAg
IG1fcGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOworfQorCitNZWRpYVBsYXllclByaXZhdGVE
ZWZhdWx0OjpNZWRpYVBsYXllclByaXZhdGVEZWZhdWx0KE1lZGlhUGxheWVyICpwbGF5ZXIpCisg
ICAgOiBNZWRpYVBsYXllclByaXZhdGUocGxheWVyKQorICAgICwgbV92aWRlb1N1cmZhY2UobmV3
IFFQYWludGVyVmlkZW9TdXJmYWNlKG1fbWVkaWFQbGF5ZXIpKQoreworICAgIGlmIChtX21lZGlh
UGxheWVyKSB7CisgICAgICAgIFFNZWRpYVNlcnZpY2UqIHNlcnZpY2UgPSBtX21lZGlhUGxheWVy
LT5zZXJ2aWNlKCk7CisgICAgICAgIGlmIChzZXJ2aWNlKSB7CisgICAgICAgICAgICBtX291dHB1
dENvbnRyb2wgPSBxb2JqZWN0X2Nhc3Q8UVZpZGVvT3V0cHV0Q29udHJvbCAqPigKKyAgICAgICAg
ICAgICAgICAgICAgc2VydmljZS0+Y29udHJvbChRVmlkZW9PdXRwdXRDb250cm9sX2lpZCkpOwor
ICAgICAgICAgICAgbV9yZW5kZXJlckNvbnRyb2wgPSBxb2JqZWN0X2Nhc3Q8UVZpZGVvUmVuZGVy
ZXJDb250cm9sICo+KAorICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLT5jb250cm9sKFFWaWRl
b1JlbmRlcmVyQ29udHJvbF9paWQpKTsKKyAgICAgICAgICAgIG1fd2luZG93Q29udHJvbCA9IHFv
YmplY3RfY2FzdDxRVmlkZW9XaW5kb3dDb250cm9sICo+KAorICAgICAgICAgICAgICAgICAgICBz
ZXJ2aWNlLT5jb250cm9sKFFWaWRlb1dpbmRvd0NvbnRyb2xfaWlkKSk7CisKKyAgICAgICAgICAg
IGlmIChtX291dHB1dENvbnRyb2wgJiYgbV9yZW5kZXJlckNvbnRyb2wpIHsKKyAgICAgICAgICAg
ICAgICBjb25uZWN0KG1fdmlkZW9TdXJmYWNlLCBTSUdOQUwoZnJhbWVDaGFuZ2VkKCkpLCB0aGlz
LCBTTE9UKHJlcGFpbnQoKSkpOworCisgICAgICAgICAgICAgICAgbV9yZW5kZXJlckNvbnRyb2wt
PnNldFN1cmZhY2UobV92aWRlb1N1cmZhY2UpOworICAgICAgICAgICAgICAgIG1fb3V0cHV0Q29u
dHJvbC0+c2V0T3V0cHV0KFFWaWRlb091dHB1dENvbnRyb2w6OlJlbmRlcmVyT3V0cHV0KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworTWVkaWFQbGF5ZXJQcml2YXRlRGVm
YXVsdDo6fk1lZGlhUGxheWVyUHJpdmF0ZURlZmF1bHQoKQoreworICAgIGRlbGV0ZSBtX3ZpZGVv
U3VyZmFjZTsKKyAgICBtX3ZpZGVvU3VyZmFjZSA9IDA7Cit9CisKK0ludFNpemUgTWVkaWFQbGF5
ZXJQcml2YXRlRGVmYXVsdDo6bmF0dXJhbFNpemUoKSBjb25zdAoreworICAgIGlmICghaGFzVmlk
ZW8oKSB8fCBtX3JlYWR5U3RhdGUgPCBNZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRhKQorICAgICAg
ICByZXR1cm4gSW50U2l6ZSgpOworCisgICAgUVNpemUgdmlkZW9TaXplID0gbV92aWRlb1N1cmZh
Y2UtPnN1cmZhY2VGb3JtYXQoKS5zaXplSGludCgpOworCisgICAgaWYgKHZpZGVvU2l6ZS5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBJbnRTaXplKCk7CisKKyAgICByZXR1cm4gSW50U2l6ZSh2
aWRlb1NpemUud2lkdGgoKSwgdmlkZW9TaXplLmhlaWdodCgpKTsKK30KKwordm9pZCBNZWRpYVBs
YXllclByaXZhdGVEZWZhdWx0OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2lzVmlzaWJsZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gR3JhYiB0aGUgcGFpbnRlcgorICAgIFFQYWludGVyKiBwYWludGVyID0gY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisKKyAgICBpZiAoIW1faXNBY3RpdmUpIHsKKyAgICAg
ICAgLy8gQXR0ZW1wdCBHTCBTZXR1cAorI2lmICFkZWZpbmVkKFFUX05PX09QRU5HTCkgJiYgIWRl
ZmluZWQoUVRfT1BFTkdMX0VTXzFfQ0wpICYmICFkZWZpbmVkKFFUX09QRU5HTF9FU18xKQorICAg
ICAgICBpZiAoKHBhaW50ZXItPnBhaW50RW5naW5lKCktPnR5cGUoKSA9PSBRUGFpbnRFbmdpbmU6
Ok9wZW5HTAorICAgICAgICAgICAgIHx8IHBhaW50ZXItPnBhaW50RW5naW5lKCktPnR5cGUoKSA9
PSBRUGFpbnRFbmdpbmU6Ok9wZW5HTDIpKSB7CisgICAgICAgICAgICAvLyBTZXQgR0wgQ29udGV4
dAorICAgICAgICAgICAgbV92aWRlb1N1cmZhY2UtPnNldEdMQ29udGV4dChjb25zdF9jYXN0PFFH
TENvbnRleHQgKj4oUUdMQ29udGV4dDo6Y3VycmVudENvbnRleHQoKSkpOworCisgICAgICAgICAg
ICAvLyBDaGVjayBTaGFkZXIgVHlwZXMKKyAgICAgICAgICAgIGlmIChtX3ZpZGVvU3VyZmFjZS0+
c3VwcG9ydGVkU2hhZGVyVHlwZXMoKSAmIFFQYWludGVyVmlkZW9TdXJmYWNlOjpHbHNsU2hhZGVy
KQorICAgICAgICAgICAgICAgIG1fdmlkZW9TdXJmYWNlLT5zZXRTaGFkZXJUeXBlKFFQYWludGVy
VmlkZW9TdXJmYWNlOjpHbHNsU2hhZGVyKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBtX3ZpZGVvU3VyZmFjZS0+c2V0U2hhZGVyVHlwZShRUGFpbnRlclZpZGVvU3VyZmFjZTo6
RnJhZ21lbnRQcm9ncmFtU2hhZGVyKTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgLy8g
U2V0dXAgQ29tcGxldGVkCisgICAgICAgIG1faXNBY3RpdmUgPSB0cnVlOworICAgIH0KKworICAg
IC8vIFBhaW50IHRoZSBmcmFtZQorICAgIG1fdmlkZW9TdXJmYWNlLT5wYWludChwYWludGVyLCBR
UmVjdChyZWN0LngoKSwgcmVjdC55KCksCisgICAgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgp
KSk7CisgICAgbV92aWRlb1N1cmZhY2UtPnNldFJlYWR5KHRydWUpOworfQorCit2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZURlZmF1bHQ6OnJlcGFpbnQoKQoreworICAgIG1fcGxheWVyLT5yZXBhaW50
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2luY2x1ZGUgIm1vY19NZWRpYVBs
YXllclByaXZhdGVRdC5jcHAiCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01l
ZGlhUGxheWVyUHJpdmF0ZVF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDEwNiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBNZWRpYVBsYXll
clByaXZhdGVRdF9oCisjZGVmaW5lIE1lZGlhUGxheWVyUHJpdmF0ZVF0X2gKKworI2luY2x1ZGUg
Ik1lZGlhUGxheWVyUHJpdmF0ZS5oIgorCisjaW5jbHVkZSA8UU1lZGlhUGxheWVyPgorI2luY2x1
ZGUgPFFNZWRpYVBsYXllckNvbnRyb2w+CisjaW5jbHVkZSA8UU9iamVjdD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBNZWRpYVBsYXllclByaXZhdGUgOiBwdWJsaWMgUU9iamVjdCwg
cHVibGljIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSB7CisKKyAgICBRX09CSkVDVAorCitw
dWJsaWM6CisgICAgc3RhdGljIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSogY3JlYXRlKE1l
ZGlhUGxheWVyKiBwbGF5ZXIpOworICAgIHZpcnR1YWwgfk1lZGlhUGxheWVyUHJpdmF0ZSgpOwor
CisgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJlZ2lzdHJh
cik7CisgICAgc3RhdGljIHZvaWQgZ2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmc+Jik7
CisgICAgc3RhdGljIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgc3VwcG9ydHNUeXBlKGNvbnN0
IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBjb2RlY3MpOworICAgIHN0YXRpYyBib29sIGlz
QXZhaWxhYmxlKCkgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgYm9vbCBoYXNWaWRlbygpIGNvbnN0
OworICAgIGJvb2wgaGFzQXVkaW8oKSBjb25zdDsKKworICAgIHZvaWQgbG9hZChjb25zdCBTdHJp
bmcgJnVybCk7CisgICAgdm9pZCBjYW5jZWxMb2FkKCk7CisKKyAgICB2b2lkIHBsYXkoKTsKKyAg
ICB2b2lkIHBhdXNlKCk7CisKKyAgICBib29sIHBhdXNlZCgpIGNvbnN0OworICAgIGJvb2wgc2Vl
a2luZygpIGNvbnN0OworCisgICAgZmxvYXQgZHVyYXRpb24oKSBjb25zdDsKKyAgICBmbG9hdCBj
dXJyZW50VGltZSgpIGNvbnN0OworICAgIHZvaWQgc2VlayhmbG9hdCk7CisKKyAgICB2b2lkIHNl
dFJhdGUoZmxvYXQpOworICAgIHZvaWQgc2V0Vm9sdW1lKGZsb2F0KTsKKyAgICB2b2lkIHNldE11
dGVkKGJvb2wpOworCisgICAgLy8gU3RhdGUgSW5mb3JtYXRpb24KKyAgICBNZWRpYVBsYXllcjo6
TmV0d29ya1N0YXRlIG5ldHdvcmtTdGF0ZSgpIGNvbnN0OworICAgIE1lZGlhUGxheWVyOjpSZWFk
eVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdDsKKworICAgIC8vIE5ldHdvcmsgSW5mb3JtYXRpb24K
KyAgICBQYXNzUmVmUHRyPFRpbWVSYW5nZXM+IGJ1ZmZlcmVkKCkgY29uc3Q7CisgICAgZmxvYXQg
bWF4VGltZVNlZWthYmxlKCkgY29uc3Q7CisgICAgdW5zaWduZWQgYnl0ZXNMb2FkZWQoKSBjb25z
dDsKKyAgICB1bnNpZ25lZCB0b3RhbEJ5dGVzKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0VmlzaWJsZShib29sKTsKKworICAgIHZpcnR1YWwgSW50U2l6ZSBuYXR1cmFsU2l6ZSgpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2l6ZShjb25zdCBJbnRTaXplJikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jikg
PSAwOworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Z1bGxzY3JlZW4oKSBjb25zdCA9IDA7CisK
K3Byb3RlY3RlZCBzbG90czoKKyAgICB2aXJ0dWFsIHZvaWQgbWVkaWFTdGF0dXNDaGFuZ2VkKFFN
ZWRpYVBsYXllcjo6TWVkaWFTdGF0dXMpOworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFcnJvcihR
TWVkaWFQbGF5ZXI6OkVycm9yKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhdGVDaGFuZ2VkKFFNZWRp
YVBsYXllcjo6U3RhdGUpIHt9CisgICAgdmlydHVhbCB2b2lkIHBvc2l0aW9uQ2hhbmdlZChxaW50
NjQpIHt9CisgICAgdmlydHVhbCB2b2lkIGR1cmF0aW9uQ2hhbmdlZChxaW50NjQpOworICAgIHZp
cnR1YWwgdm9pZCByZXBhaW50KCkge30KKworcHJvdGVjdGVkOgorICAgIE1lZGlhUGxheWVyUHJp
dmF0ZShNZWRpYVBsYXllciopOworCisgICAgTWVkaWFQbGF5ZXIqIG1fcGxheWVyOworICAgIFFN
ZWRpYVBsYXllciogbV9tZWRpYVBsYXllcjsKKyAgICBRTWVkaWFQbGF5ZXJDb250cm9sKiBtX21l
ZGlhUGxheWVyQ29udHJvbDsKKworICAgIG11dGFibGUgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0
ZSBtX25ldHdvcmtTdGF0ZTsKKyAgICBtdXRhYmxlIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG1f
cmVhZHlTdGF0ZTsKKworICAgIGJvb2wgbV9pc1Zpc2libGU7CisKK3ByaXZhdGU6CisgICAgdm9p
ZCB1cGRhdGVTdGF0ZXMoKTsKK307Cit9CisKKyNlbmRpZiAvLyBNZWRpYVBsYXllclByaXZhdGVR
dF9oCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1FQYWludGVyVmlkZW9TdXJm
YWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1FQYWlu
dGVyVmlkZW9TdXJmYWNlLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvUVBhaW50ZXJWaWRlb1N1cmZhY2UuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDEzNzkgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJRUGFpbnRlclZpZGVvU3VyZmFjZS5oIgorCisjaW5jbHVkZSA8UVBhaW50ZXI+CisjaW5j
bHVkZSA8UVZhcmlhbnQ+CisjaW5jbHVkZSA8UVZpZGVvU3VyZmFjZUZvcm1hdD4KKyNpbmNsdWRl
IDxxbWF0aC5oPgorCisjaWYgIWRlZmluZWQoUVRfTk9fT1BFTkdMKSAmJiAhZGVmaW5lZChRVF9P
UEVOR0xfRVNfMV9DTCkgJiYgIWRlZmluZWQoUVRfT1BFTkdMX0VTXzEpCisjaW5jbHVkZSA8cWds
c2hhZGVycHJvZ3JhbS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
UVZpZGVvU3VyZmFjZVBhaW50ZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgflFWaWRlb1N1cmZh
Y2VQYWludGVyKCk7CisKKyAgICB2aXJ0dWFsIFFMaXN0PFFWaWRlb0ZyYW1lOjpQaXhlbEZvcm1h
dD4gc3VwcG9ydGVkUGl4ZWxGb3JtYXRzKAorICAgICAgICAgICAgUUFic3RyYWN0VmlkZW9CdWZm
ZXI6OkhhbmRsZVR5cGUgaGFuZGxlVHlwZSkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBib29s
IGlzRm9ybWF0U3VwcG9ydGVkKAorICAgICAgICAgICAgY29uc3QgUVZpZGVvU3VyZmFjZUZvcm1h
dCAmZm9ybWF0LCBRVmlkZW9TdXJmYWNlRm9ybWF0ICpzaW1pbGFyKSBjb25zdCA9IDA7CisKKyAg
ICB2aXJ0dWFsIFFBYnN0cmFjdFZpZGVvU3VyZmFjZTo6RXJyb3Igc3RhcnQoY29uc3QgUVZpZGVv
U3VyZmFjZUZvcm1hdCAmZm9ybWF0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0b3AoKSA9IDA7
CisKKyAgICB2aXJ0dWFsIFFBYnN0cmFjdFZpZGVvU3VyZmFjZTo6RXJyb3Igc2V0Q3VycmVudEZy
YW1lKGNvbnN0IFFWaWRlb0ZyYW1lICZmcmFtZSkgPSAwOworCisgICAgdmlydHVhbCBRQWJzdHJh
Y3RWaWRlb1N1cmZhY2U6OkVycm9yIHBhaW50KAorICAgICAgICAgICAgY29uc3QgUVJlY3RGICZ0
YXJnZXQsIFFQYWludGVyICpwYWludGVyLCBjb25zdCBRUmVjdEYgJnNvdXJjZSkgPSAwOworCisg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbG9ycyhpbnQgYnJpZ2h0bmVzcywgaW50IGNvbnRyYXN0
LCBpbnQgaHVlLCBpbnQgc2F0dXJhdGlvbikgPSAwOworfTsKKworUVZpZGVvU3VyZmFjZVBhaW50
ZXI6On5RVmlkZW9TdXJmYWNlUGFpbnRlcigpCit7Cit9CisKK2NsYXNzIFFWaWRlb1N1cmZhY2VS
YXN0ZXJQYWludGVyIDogcHVibGljIFFWaWRlb1N1cmZhY2VQYWludGVyIHsKK3B1YmxpYzoKKyAg
ICBRVmlkZW9TdXJmYWNlUmFzdGVyUGFpbnRlcigpOworCisgICAgUUxpc3Q8UVZpZGVvRnJhbWU6
OlBpeGVsRm9ybWF0PiBzdXBwb3J0ZWRQaXhlbEZvcm1hdHMoCisgICAgICAgICAgICBRQWJzdHJh
Y3RWaWRlb0J1ZmZlcjo6SGFuZGxlVHlwZSBoYW5kbGVUeXBlKSBjb25zdDsKKworICAgIGJvb2wg
aXNGb3JtYXRTdXBwb3J0ZWQoCisgICAgICAgICAgICBjb25zdCBRVmlkZW9TdXJmYWNlRm9ybWF0
ICZmb3JtYXQsIFFWaWRlb1N1cmZhY2VGb3JtYXQgKnNpbWlsYXIpIGNvbnN0OworCisgICAgUUFi
c3RyYWN0VmlkZW9TdXJmYWNlOjpFcnJvciBzdGFydChjb25zdCBRVmlkZW9TdXJmYWNlRm9ybWF0
ICZmb3JtYXQpOworICAgIHZvaWQgc3RvcCgpOworCisgICAgUUFic3RyYWN0VmlkZW9TdXJmYWNl
OjpFcnJvciBzZXRDdXJyZW50RnJhbWUoY29uc3QgUVZpZGVvRnJhbWUgJmZyYW1lKTsKKworICAg
IFFBYnN0cmFjdFZpZGVvU3VyZmFjZTo6RXJyb3IgcGFpbnQoCisgICAgICAgICAgICBjb25zdCBR
UmVjdEYgJnRhcmdldCwgUVBhaW50ZXIgKnBhaW50ZXIsIGNvbnN0IFFSZWN0RiAmc291cmNlKTsK
KworICAgIHZvaWQgdXBkYXRlQ29sb3JzKGludCBicmlnaHRuZXNzLCBpbnQgY29udHJhc3QsIGlu
dCBodWUsIGludCBzYXR1cmF0aW9uKTsKKworcHJpdmF0ZToKKyAgICBRTGlzdDxRVmlkZW9GcmFt
ZTo6UGl4ZWxGb3JtYXQ+IG1faW1hZ2VQaXhlbEZvcm1hdHM7CisgICAgUVZpZGVvRnJhbWUgbV9m
cmFtZTsKKyAgICBRU2l6ZSBtX2ltYWdlU2l6ZTsKKyAgICBRSW1hZ2U6OkZvcm1hdCBtX2ltYWdl
Rm9ybWF0OworICAgIFFWaWRlb1N1cmZhY2VGb3JtYXQ6OkRpcmVjdGlvbiBtX3NjYW5MaW5lRGly
ZWN0aW9uOworfTsKKworUVZpZGVvU3VyZmFjZVJhc3RlclBhaW50ZXI6OlFWaWRlb1N1cmZhY2VS
YXN0ZXJQYWludGVyKCkKKyAgICA6IG1faW1hZ2VGb3JtYXQoUUltYWdlOjpGb3JtYXRfSW52YWxp
ZCkKKyAgICAsIG1fc2NhbkxpbmVEaXJlY3Rpb24oUVZpZGVvU3VyZmFjZUZvcm1hdDo6VG9wVG9C
b3R0b20pCit7CisgICAgbV9pbWFnZVBpeGVsRm9ybWF0cworICAgICAgICA8PCBRVmlkZW9GcmFt
ZTo6Rm9ybWF0X1JHQjMyCisjaWZuZGVmIFFUX09QRU5HTF9FUyAvLyBUaGUgcmFzdGVyIGZvcm1h
dHMgc2hvdWxkIGJlIGEgc3Vic2V0IG9mIHRoZSBHTCBmb3JtYXRzLgorICAgICAgICA8PCBRVmlk
ZW9GcmFtZTo6Rm9ybWF0X1JHQjI0CisjZW5kaWYKKyAgICAgICAgPDwgUVZpZGVvRnJhbWU6OkZv
cm1hdF9BUkdCMzIKKyAgICAgICAgPDwgUVZpZGVvRnJhbWU6OkZvcm1hdF9SR0I1NjU7Cit9CisK
K1FMaXN0PFFWaWRlb0ZyYW1lOjpQaXhlbEZvcm1hdD4gUVZpZGVvU3VyZmFjZVJhc3RlclBhaW50
ZXI6OnN1cHBvcnRlZFBpeGVsRm9ybWF0cygKKyAgICAgICAgUUFic3RyYWN0VmlkZW9CdWZmZXI6
OkhhbmRsZVR5cGUgaGFuZGxlVHlwZSkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFuZGxlVHlwZSA9
PSBRQWJzdHJhY3RWaWRlb0J1ZmZlcjo6Tm9IYW5kbGUKKyAgICAgICAgPyBtX2ltYWdlUGl4ZWxG
b3JtYXRzCisgICAgICAgIDogUUxpc3Q8UVZpZGVvRnJhbWU6OlBpeGVsRm9ybWF0PigpOworfQor
Citib29sIFFWaWRlb1N1cmZhY2VSYXN0ZXJQYWludGVyOjppc0Zvcm1hdFN1cHBvcnRlZCgKKyAg
ICAgICAgY29uc3QgUVZpZGVvU3VyZmFjZUZvcm1hdCAmZm9ybWF0LCBRVmlkZW9TdXJmYWNlRm9y
bWF0ICopIGNvbnN0Cit7CisgICAgcmV0dXJuIGZvcm1hdC5oYW5kbGVUeXBlKCkgPT0gUUFic3Ry
YWN0VmlkZW9CdWZmZXI6Ok5vSGFuZGxlCisgICAgICAgICAgICAmJiBtX2ltYWdlUGl4ZWxGb3Jt
YXRzLmNvbnRhaW5zKGZvcm1hdC5waXhlbEZvcm1hdCgpKQorICAgICAgICAgICAgJiYgIWZvcm1h
dC5mcmFtZVNpemUoKS5pc0VtcHR5KCk7Cit9CisKK1FBYnN0cmFjdFZpZGVvU3VyZmFjZTo6RXJy
b3IgUVZpZGVvU3VyZmFjZVJhc3RlclBhaW50ZXI6OnN0YXJ0KGNvbnN0IFFWaWRlb1N1cmZhY2VG
b3JtYXQgJmZvcm1hdCkKK3sKKyAgICBtX2ZyYW1lID0gUVZpZGVvRnJhbWUoKTsKKyAgICBtX2lt
YWdlRm9ybWF0ID0gUVZpZGVvRnJhbWU6OmltYWdlRm9ybWF0RnJvbVBpeGVsRm9ybWF0KGZvcm1h
dC5waXhlbEZvcm1hdCgpKTsKKyAgICBtX2ltYWdlU2l6ZSA9IGZvcm1hdC5mcmFtZVNpemUoKTsK
KyAgICBtX3NjYW5MaW5lRGlyZWN0aW9uID0gZm9ybWF0LnNjYW5MaW5lRGlyZWN0aW9uKCk7CisK
KyAgICByZXR1cm4gZm9ybWF0LmhhbmRsZVR5cGUoKSA9PSBRQWJzdHJhY3RWaWRlb0J1ZmZlcjo6
Tm9IYW5kbGUKKyAgICAgICAgICAgICYmIG1faW1hZ2VGb3JtYXQgIT0gUUltYWdlOjpGb3JtYXRf
SW52YWxpZAorICAgICAgICAgICAgJiYgIW1faW1hZ2VTaXplLmlzRW1wdHkoKQorICAgICAgICAg
ICAgPyBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6Ok5vRXJyb3IKKyAgICAgICAgICAgIDogUUFic3Ry
YWN0VmlkZW9TdXJmYWNlOjpVbnN1cHBvcnRlZEZvcm1hdEVycm9yOworfQorCit2b2lkIFFWaWRl
b1N1cmZhY2VSYXN0ZXJQYWludGVyOjpzdG9wKCkKK3sKKyAgICBtX2ZyYW1lID0gUVZpZGVvRnJh
bWUoKTsKK30KKworUUFic3RyYWN0VmlkZW9TdXJmYWNlOjpFcnJvciBRVmlkZW9TdXJmYWNlUmFz
dGVyUGFpbnRlcjo6c2V0Q3VycmVudEZyYW1lKGNvbnN0IFFWaWRlb0ZyYW1lICZmcmFtZSkKK3sK
KyAgICBtX2ZyYW1lID0gZnJhbWU7CisKKyAgICByZXR1cm4gUUFic3RyYWN0VmlkZW9TdXJmYWNl
OjpOb0Vycm9yOworfQorCitRQWJzdHJhY3RWaWRlb1N1cmZhY2U6OkVycm9yIFFWaWRlb1N1cmZh
Y2VSYXN0ZXJQYWludGVyOjpwYWludCgKKyAgICAgICAgICAgIGNvbnN0IFFSZWN0RiAmdGFyZ2V0
LCBRUGFpbnRlciAqcGFpbnRlciwgY29uc3QgUVJlY3RGICZzb3VyY2UpCit7CisgICAgaWYgKG1f
ZnJhbWUubWFwKFFBYnN0cmFjdFZpZGVvQnVmZmVyOjpSZWFkT25seSkpIHsKKyAgICAgICAgUUlt
YWdlIGltYWdlKAorICAgICAgICAgICAgICAgIG1fZnJhbWUuYml0cygpLAorICAgICAgICAgICAg
ICAgIG1faW1hZ2VTaXplLndpZHRoKCksCisgICAgICAgICAgICAgICAgbV9pbWFnZVNpemUuaGVp
Z2h0KCksCisgICAgICAgICAgICAgICAgbV9mcmFtZS5ieXRlc1BlckxpbmUoKSwKKyAgICAgICAg
ICAgICAgICBtX2ltYWdlRm9ybWF0KTsKKworICAgICAgICBpZiAobV9zY2FuTGluZURpcmVjdGlv
biA9PSBRVmlkZW9TdXJmYWNlRm9ybWF0OjpCb3R0b21Ub1RvcCkgeworICAgICAgICAgICAgY29u
c3QgUVRyYW5zZm9ybSBvbGRUcmFuc2Zvcm0gPSBwYWludGVyLT50cmFuc2Zvcm0oKTsKKworICAg
ICAgICAgICAgcGFpbnRlci0+c2NhbGUoMSwgLTEpOworICAgICAgICAgICAgcGFpbnRlci0+dHJh
bnNsYXRlKDAsIC10YXJnZXQuYm90dG9tKCkpOworICAgICAgICAgICAgcGFpbnRlci0+ZHJhd0lt
YWdlKAorICAgICAgICAgICAgICAgIFFSZWN0Rih0YXJnZXQueCgpLCAwLCB0YXJnZXQud2lkdGgo
KSwgdGFyZ2V0LmhlaWdodCgpKSwgaW1hZ2UsIHNvdXJjZSk7CisgICAgICAgICAgICBwYWludGVy
LT5zZXRUcmFuc2Zvcm0ob2xkVHJhbnNmb3JtKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBwYWludGVyLT5kcmF3SW1hZ2UodGFyZ2V0LCBpbWFnZSwgc291cmNlKTsKKworICAgICAgICBt
X2ZyYW1lLnVubWFwKCk7CisgICAgfSBlbHNlIGlmIChtX2ZyYW1lLmlzVmFsaWQoKSkKKyAgICAg
ICAgcmV0dXJuIFFBYnN0cmFjdFZpZGVvU3VyZmFjZTo6SW5jb3JyZWN0Rm9ybWF0RXJyb3I7Cisg
ICAgZWxzZQorICAgICAgICBwYWludGVyLT5maWxsUmVjdCh0YXJnZXQsIFF0OjpibGFjayk7CisK
KyAgICByZXR1cm4gUUFic3RyYWN0VmlkZW9TdXJmYWNlOjpOb0Vycm9yOworfQorCit2b2lkIFFW
aWRlb1N1cmZhY2VSYXN0ZXJQYWludGVyOjp1cGRhdGVDb2xvcnMoaW50LCBpbnQsIGludCwgaW50
KQoreworfQorCisjaWYgIWRlZmluZWQoUVRfTk9fT1BFTkdMKSAmJiAhZGVmaW5lZChRVF9PUEVO
R0xfRVNfMV9DTCkgJiYgIWRlZmluZWQoUVRfT1BFTkdMX0VTXzEpCisKKyNpZm5kZWYgUV9XU19N
QUMKKyMgaWZuZGVmIEFQSUVOVFJZUAorIyAgIGlmZGVmIEFQSUVOVFJZCisjICAgICBkZWZpbmUg
QVBJRU5UUllQIEFQSUVOVFJZICoKKyMgICBlbHNlCisjICAgICBkZWZpbmUgQVBJRU5UUlkKKyMg
ICAgIGRlZmluZSBBUElFTlRSWVAgKgorIyAgIGVuZGlmCisjIGVuZGlmCisjZWxzZQorIyBkZWZp
bmUgQVBJRU5UUlkKKyMgZGVmaW5lIEFQSUVOVFJZUCAqCisjZW5kaWYKKworI2lmbmRlZiBHTF9U
RVhUVVJFMAorIyAgZGVmaW5lIEdMX1RFWFRVUkUwICAgIDB4ODRDMAorIyAgZGVmaW5lIEdMX1RF
WFRVUkUxICAgIDB4ODRDMQorIyAgZGVmaW5lIEdMX1RFWFRVUkUyICAgIDB4ODRDMgorI2VuZGlm
CisjaWZuZGVmIEdMX1BST0dSQU1fRVJST1JfU1RSSU5HX0FSQgorIyAgZGVmaW5lIEdMX1BST0dS
QU1fRVJST1JfU1RSSU5HX0FSQiAgICAgICAweDg4NzQKKyNlbmRpZgorCisjaWZuZGVmIEdMX1VO
U0lHTkVEX1NIT1JUXzVfNl81CisjICBkZWZpbmUgR0xfVU5TSUdORURfU0hPUlRfNV82XzUgMzM2
MzUKKyNlbmRpZgorCitjbGFzcyBRVmlkZW9TdXJmYWNlR0xQYWludGVyIDogcHVibGljIFFWaWRl
b1N1cmZhY2VQYWludGVyIHsKK3B1YmxpYzoKKyAgICBRVmlkZW9TdXJmYWNlR0xQYWludGVyKFFH
TENvbnRleHQgKmNvbnRleHQpOworICAgIH5RVmlkZW9TdXJmYWNlR0xQYWludGVyKCk7CisgICAg
UUxpc3Q8UVZpZGVvRnJhbWU6OlBpeGVsRm9ybWF0PiBzdXBwb3J0ZWRQaXhlbEZvcm1hdHMoCisg
ICAgICAgICAgICBRQWJzdHJhY3RWaWRlb0J1ZmZlcjo6SGFuZGxlVHlwZSBoYW5kbGVUeXBlKSBj
b25zdDsKKworICAgIGJvb2wgaXNGb3JtYXRTdXBwb3J0ZWQoCisgICAgICAgICAgICBjb25zdCBR
VmlkZW9TdXJmYWNlRm9ybWF0ICZmb3JtYXQsIFFWaWRlb1N1cmZhY2VGb3JtYXQgKnNpbWlsYXIp
IGNvbnN0OworCisgICAgUUFic3RyYWN0VmlkZW9TdXJmYWNlOjpFcnJvciBzZXRDdXJyZW50RnJh
bWUoY29uc3QgUVZpZGVvRnJhbWUgJmZyYW1lKTsKKworICAgIHZvaWQgdXBkYXRlQ29sb3JzKGlu
dCBicmlnaHRuZXNzLCBpbnQgY29udHJhc3QsIGludCBodWUsIGludCBzYXR1cmF0aW9uKTsKKwor
cHJvdGVjdGVkOgorICAgIHZvaWQgaW5pdFJnYlRleHR1cmVJbmZvKEdMZW51bSBpbnRlcm5hbEZv
cm1hdCwgR0x1aW50IGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFFTaXplICZzaXplKTsKKyAg
ICB2b2lkIGluaXRZdXY0MjBQVGV4dHVyZUluZm8oY29uc3QgUVNpemUgJnNpemUpOworICAgIHZv
aWQgaW5pdFl2MTJUZXh0dXJlSW5mbyhjb25zdCBRU2l6ZSAmc2l6ZSk7CisKKyNpZm5kZWYgUVRf
T1BFTkdMX0VTCisgICAgdHlwZWRlZiB2b2lkIChBUElFTlRSWSAqX2dsQWN0aXZlVGV4dHVyZSkg
KEdMZW51bSk7CisgICAgX2dsQWN0aXZlVGV4dHVyZSBnbEFjdGl2ZVRleHR1cmU7CisjZW5kaWYK
KworICAgIFFMaXN0PFFWaWRlb0ZyYW1lOjpQaXhlbEZvcm1hdD4gbV9pbWFnZVBpeGVsRm9ybWF0
czsKKyAgICBRTGlzdDxRVmlkZW9GcmFtZTo6UGl4ZWxGb3JtYXQ+IG1fZ2xQaXhlbEZvcm1hdHM7
CisgICAgUU1hdHJpeDR4NCBtX2NvbG9yTWF0cml4OworICAgIFFWaWRlb0ZyYW1lIG1fZnJhbWU7
CisKKyAgICBRR0xDb250ZXh0KiBtX2NvbnRleHQ7CisgICAgUUFic3RyYWN0VmlkZW9CdWZmZXI6
OkhhbmRsZVR5cGUgbV9oYW5kbGVUeXBlOworICAgIFFWaWRlb1N1cmZhY2VGb3JtYXQ6OkRpcmVj
dGlvbiBtX3NjYW5MaW5lRGlyZWN0aW9uOworICAgIEdMZW51bSBtX3RleHR1cmVGb3JtYXQ7Cisg
ICAgR0x1aW50IG1fdGV4dHVyZUludGVybmFsRm9ybWF0OworICAgIEdMZW51bSBtX3RleHR1cmVU
eXBlOworICAgIGludCBtX3RleHR1cmVDb3VudDsKKyAgICBHTHVpbnQgbV90ZXh0dXJlSWRzWzNd
OworICAgIGludCBtX3RleHR1cmVXaWR0aHNbM107CisgICAgaW50IG1fdGV4dHVyZUhlaWdodHNb
M107CisgICAgaW50IG1fdGV4dHVyZU9mZnNldHNbM107CisgICAgYm9vbCBtX3l1djsKK307CisK
K1FWaWRlb1N1cmZhY2VHTFBhaW50ZXI6OlFWaWRlb1N1cmZhY2VHTFBhaW50ZXIoUUdMQ29udGV4
dCAqY29udGV4dCkKKyAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9oYW5kbGVUeXBl
KFFBYnN0cmFjdFZpZGVvQnVmZmVyOjpOb0hhbmRsZSkKKyAgICAsIG1fc2NhbkxpbmVEaXJlY3Rp
b24oUVZpZGVvU3VyZmFjZUZvcm1hdDo6VG9wVG9Cb3R0b20pCisgICAgLCBtX3RleHR1cmVGb3Jt
YXQoMCkKKyAgICAsIG1fdGV4dHVyZUludGVybmFsRm9ybWF0KDApCisgICAgLCBtX3RleHR1cmVU
eXBlKDApCisgICAgLCBtX3RleHR1cmVDb3VudCgwKQorICAgICwgbV95dXYoZmFsc2UpCit7Cisj
aWZuZGVmIFFUX09QRU5HTF9FUworICAgIGdsQWN0aXZlVGV4dHVyZSA9IChfZ2xBY3RpdmVUZXh0
dXJlKW1fY29udGV4dC0+Z2V0UHJvY0FkZHJlc3MoUUxhdGluMVN0cmluZygiZ2xBY3RpdmVUZXh0
dXJlIikpOworI2VuZGlmCit9CisKK1FWaWRlb1N1cmZhY2VHTFBhaW50ZXI6On5RVmlkZW9TdXJm
YWNlR0xQYWludGVyKCkKK3sKK30KKworUUxpc3Q8UVZpZGVvRnJhbWU6OlBpeGVsRm9ybWF0PiBR
VmlkZW9TdXJmYWNlR0xQYWludGVyOjpzdXBwb3J0ZWRQaXhlbEZvcm1hdHMoCisgICAgICAgIFFB
YnN0cmFjdFZpZGVvQnVmZmVyOjpIYW5kbGVUeXBlIGhhbmRsZVR5cGUpIGNvbnN0Cit7CisgICAg
c3dpdGNoIChoYW5kbGVUeXBlKSB7CisgICAgY2FzZSBRQWJzdHJhY3RWaWRlb0J1ZmZlcjo6Tm9I
YW5kbGU6CisgICAgICAgIHJldHVybiBtX2ltYWdlUGl4ZWxGb3JtYXRzOworICAgIGNhc2UgUUFi
c3RyYWN0VmlkZW9CdWZmZXI6OkdMVGV4dHVyZUhhbmRsZToKKyAgICAgICAgcmV0dXJuIG1fZ2xQ
aXhlbEZvcm1hdHM7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIFFMaXN0PFFWaWRlb0Zy
YW1lOjpQaXhlbEZvcm1hdD4oKTsKKyAgICB9Cit9CisKK2Jvb2wgUVZpZGVvU3VyZmFjZUdMUGFp
bnRlcjo6aXNGb3JtYXRTdXBwb3J0ZWQoCisgICAgICAgIGNvbnN0IFFWaWRlb1N1cmZhY2VGb3Jt
YXQgJmZvcm1hdCwgUVZpZGVvU3VyZmFjZUZvcm1hdCAqKSBjb25zdAoreworICAgIGlmIChmb3Jt
YXQuZnJhbWVTaXplKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBz
d2l0Y2ggKGZvcm1hdC5oYW5kbGVUeXBlKCkpIHsKKyAgICBjYXNlIFFBYnN0cmFjdFZpZGVvQnVm
ZmVyOjpOb0hhbmRsZToKKyAgICAgICAgcmV0dXJuIG1faW1hZ2VQaXhlbEZvcm1hdHMuY29udGFp
bnMoZm9ybWF0LnBpeGVsRm9ybWF0KCkpOworICAgIGNhc2UgUUFic3RyYWN0VmlkZW9CdWZmZXI6
OkdMVGV4dHVyZUhhbmRsZToKKyAgICAgICAgcmV0dXJuIG1fZ2xQaXhlbEZvcm1hdHMuY29udGFp
bnMoZm9ybWF0LnBpeGVsRm9ybWF0KCkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9Cit9CisKK1FBYnN0cmFjdFZpZGVvU3VyZmFjZTo6RXJyb3IgUVZpZGVvU3Vy
ZmFjZUdMUGFpbnRlcjo6c2V0Q3VycmVudEZyYW1lKGNvbnN0IFFWaWRlb0ZyYW1lICZmcmFtZSkK
K3sKKyAgICBtX2ZyYW1lID0gZnJhbWU7CisKKyAgICBpZiAobV9oYW5kbGVUeXBlID09IFFBYnN0
cmFjdFZpZGVvQnVmZmVyOjpHTFRleHR1cmVIYW5kbGUpIHsKKyAgICAgICAgbV90ZXh0dXJlSWRz
WzBdID0gZnJhbWUuaGFuZGxlKCkudG9JbnQoKTsKKyAgICB9IGVsc2UgaWYgKG1fZnJhbWUubWFw
KFFBYnN0cmFjdFZpZGVvQnVmZmVyOjpSZWFkT25seSkpIHsKKyAgICAgICAgbV9jb250ZXh0LT5t
YWtlQ3VycmVudCgpOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV90ZXh0dXJlQ291
bnQ7ICsraSkgeworICAgICAgICAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3Rl
eHR1cmVJZHNbaV0pOworICAgICAgICAgICAgZ2xUZXhJbWFnZTJEKAorICAgICAgICAgICAgICAg
ICAgICBHTF9URVhUVVJFXzJELAorICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAg
ICAgICAgICBtX3RleHR1cmVJbnRlcm5hbEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgbV90
ZXh0dXJlV2lkdGhzW2ldLAorICAgICAgICAgICAgICAgICAgICBtX3RleHR1cmVIZWlnaHRzW2ld
LAorICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICBtX3RleHR1cmVG
b3JtYXQsCisgICAgICAgICAgICAgICAgICAgIG1fdGV4dHVyZVR5cGUsCisgICAgICAgICAgICAg
ICAgICAgIG1fZnJhbWUuYml0cygpICsgbV90ZXh0dXJlT2Zmc2V0c1tpXSk7CisgICAgICAgICAg
ICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBH
TF9MSU5FQVIpOworICAgICAgICAgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdM
X1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICAgICAgICAgIGdsVGV4UGFyYW1l
dGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfUkVQRUFUKTsKKyAgICAg
ICAgICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwg
R0xfUkVQRUFUKTsKKyAgICAgICAgfQorICAgICAgICBtX2ZyYW1lLnVubWFwKCk7CisgICAgfSBl
bHNlIGlmIChtX2ZyYW1lLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIFFBYnN0cmFjdFZpZGVv
U3VyZmFjZTo6SW5jb3JyZWN0Rm9ybWF0RXJyb3I7CisKKyAgICByZXR1cm4gUUFic3RyYWN0Vmlk
ZW9TdXJmYWNlOjpOb0Vycm9yOworfQorCit2b2lkIFFWaWRlb1N1cmZhY2VHTFBhaW50ZXI6OnVw
ZGF0ZUNvbG9ycyhpbnQgYnJpZ2h0bmVzcywgaW50IGNvbnRyYXN0LCBpbnQgaHVlLCBpbnQgc2F0
dXJhdGlvbikKK3sKKyAgICBjb25zdCBxcmVhbCBiID0gYnJpZ2h0bmVzcyAvIDIwMC4wOworICAg
IGNvbnN0IHFyZWFsIGMgPSBjb250cmFzdCAvIDEwMC4wICsgMS4wOworICAgIGNvbnN0IHFyZWFs
IGggPSBodWUgLyAyMDAuMDsKKyAgICBjb25zdCBxcmVhbCBzID0gc2F0dXJhdGlvbiAvIDEwMC4w
ICsgMS4wOworCisgICAgY29uc3QgcXJlYWwgY29zSCA9IHFDb3MoTV9QSSAqIGgpOworICAgIGNv
bnN0IHFyZWFsIHNpbkggPSBxU2luKE1fUEkgKiBoKTsKKworICAgIGNvbnN0IHFyZWFsIGgxMSA9
IC0wLjQ3MjggKiBjb3NIICsgMC43OTU0ICogc2luSCArIDEuNDcyODsKKyAgICBjb25zdCBxcmVh
bCBoMjEgPSAtMC45MjUzICogY29zSCAtIDAuMDExOCAqIHNpbkggKyAwLjk1MjM7CisgICAgY29u
c3QgcXJlYWwgaDMxID0gIDAuNDUyNSAqIGNvc0ggKyAwLjgwNzIgKiBzaW5IIC0gMC40NTI0Owor
CisgICAgY29uc3QgcXJlYWwgaDEyID0gIDEuNDcyOCAqIGNvc0ggLSAxLjM3MjggKiBzaW5IIC0g
MS40NzI4OworICAgIGNvbnN0IHFyZWFsIGgyMiA9ICAxLjkyNTMgKiBjb3NIICsgMC41ODkxICog
c2luSCAtIDAuOTI1MzsKKyAgICBjb25zdCBxcmVhbCBoMzIgPSAtMC40NTI1ICogY29zSCAtIDEu
OTYxOSAqIHNpbkggKyAwLjQ1MjU7CisKKyAgICBjb25zdCBxcmVhbCBoMTMgPSAgMS40NzI4ICog
Y29zSCAtIDAuMjE4MSAqIHNpbkggLSAxLjQ3Mjg7CisgICAgY29uc3QgcXJlYWwgaDIzID0gIDAu
OTI1MyAqIGNvc0ggKyAxLjE2NjUgKiBzaW5IIC0gMC45MjUzOworICAgIGNvbnN0IHFyZWFsIGgz
MyA9ICAwLjU0NzUgKiBjb3NIIC0gMS4zODQ2ICogc2luSCArIDAuNDUyNTsKKworICAgIGNvbnN0
IHFyZWFsIHNyID0gKDEuMCAtIHMpICogMC4zMDg2OworICAgIGNvbnN0IHFyZWFsIHNnID0gKDEu
MCAtIHMpICogMC42MDk0OworICAgIGNvbnN0IHFyZWFsIHNiID0gKDEuMCAtIHMpICogMC4wODIw
OworCisgICAgY29uc3QgcXJlYWwgc3JTID0gc3IgKyBzOworICAgIGNvbnN0IHFyZWFsIHNnUyA9
IHNnICsgczsKKyAgICBjb25zdCBxcmVhbCBzYlMgPSBzciArIHM7CisKKyAgICBjb25zdCBmbG9h
dCBtNCA9IChzICsgc3IgKyBzZyArIHNiKSAqICgwLjUgLSAwLjUgKiBjICsgYik7CisKKyAgICBt
X2NvbG9yTWF0cml4KDAsIDApID0gYyAqIChzclMgKiBoMTEgKyBzZyAqIGgyMSArIHNiICogaDMx
KTsKKyAgICBtX2NvbG9yTWF0cml4KDAsIDEpID0gYyAqIChzclMgKiBoMTIgKyBzZyAqIGgyMiAr
IHNiICogaDMyKTsKKyAgICBtX2NvbG9yTWF0cml4KDAsIDIpID0gYyAqIChzclMgKiBoMTMgKyBz
ZyAqIGgyMyArIHNiICogaDMzKTsKKyAgICBtX2NvbG9yTWF0cml4KDAsIDMpID0gbTQ7CisKKyAg
ICBtX2NvbG9yTWF0cml4KDEsIDApID0gYyAqIChzciAqIGgxMSArIHNnUyAqIGgyMSArIHNiICog
aDMxKTsKKyAgICBtX2NvbG9yTWF0cml4KDEsIDEpID0gYyAqIChzciAqIGgxMiArIHNnUyAqIGgy
MiArIHNiICogaDMyKTsKKyAgICBtX2NvbG9yTWF0cml4KDEsIDIpID0gYyAqIChzciAqIGgxMyAr
IHNnUyAqIGgyMyArIHNiICogaDMzKTsKKyAgICBtX2NvbG9yTWF0cml4KDEsIDMpID0gbTQ7CisK
KyAgICBtX2NvbG9yTWF0cml4KDIsIDApID0gYyAqIChzciAqIGgxMSArIHNnICogaDIxICsgc2JT
ICogaDMxKTsKKyAgICBtX2NvbG9yTWF0cml4KDIsIDEpID0gYyAqIChzciAqIGgxMiArIHNnICog
aDIyICsgc2JTICogaDMyKTsKKyAgICBtX2NvbG9yTWF0cml4KDIsIDIpID0gYyAqIChzciAqIGgx
MyArIHNnICogaDIzICsgc2JTICogaDMzKTsKKyAgICBtX2NvbG9yTWF0cml4KDIsIDMpID0gbTQ7
CisKKyAgICBtX2NvbG9yTWF0cml4KDMsIDApID0gMC4wOworICAgIG1fY29sb3JNYXRyaXgoMywg
MSkgPSAwLjA7CisgICAgbV9jb2xvck1hdHJpeCgzLCAyKSA9IDAuMDsKKyAgICBtX2NvbG9yTWF0
cml4KDMsIDMpID0gMS4wOworCisgICAgaWYgKG1feXV2KSB7CisgICAgICAgIG1fY29sb3JNYXRy
aXggPSBtX2NvbG9yTWF0cml4ICogUU1hdHJpeDR4NCgKKyAgICAgICAgICAgICAgICAxLjAsICAw
LjAwMCwgIDEuMTQwLCAtMC41NzAwLAorICAgICAgICAgICAgICAgIDEuMCwgLTAuMzk0LCAtMC41
ODEsICAwLjQ4NzUsCisgICAgICAgICAgICAgICAgMS4wLCAgMi4wMjgsICAwLjAwMCwgLTEuMDE0
MCwKKyAgICAgICAgICAgICAgICAwLjAsICAwLjAwMCwgIDAuMDAwLCAgMS4wMDAwKTsKKyAgICB9
Cit9CisKK3ZvaWQgUVZpZGVvU3VyZmFjZUdMUGFpbnRlcjo6aW5pdFJnYlRleHR1cmVJbmZvKAor
ICAgICAgICBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBmb3JtYXQsIEdMZW51bSB0eXBl
LCBjb25zdCBRU2l6ZSAmc2l6ZSkKK3sKKyAgICBtX3l1diA9IGZhbHNlOworICAgIG1fdGV4dHVy
ZUludGVybmFsRm9ybWF0ID0gaW50ZXJuYWxGb3JtYXQ7CisgICAgbV90ZXh0dXJlRm9ybWF0ID0g
Zm9ybWF0OworICAgIG1fdGV4dHVyZVR5cGUgPSB0eXBlOworICAgIG1fdGV4dHVyZUNvdW50ID0g
MTsKKyAgICBtX3RleHR1cmVXaWR0aHNbMF0gPSBzaXplLndpZHRoKCk7CisgICAgbV90ZXh0dXJl
SGVpZ2h0c1swXSA9IHNpemUuaGVpZ2h0KCk7CisgICAgbV90ZXh0dXJlT2Zmc2V0c1swXSA9IDA7
Cit9CisKK3ZvaWQgUVZpZGVvU3VyZmFjZUdMUGFpbnRlcjo6aW5pdFl1djQyMFBUZXh0dXJlSW5m
byhjb25zdCBRU2l6ZSAmc2l6ZSkKK3sKKyAgICBtX3l1diA9IHRydWU7CisgICAgbV90ZXh0dXJl
SW50ZXJuYWxGb3JtYXQgPSBHTF9MVU1JTkFOQ0U7CisgICAgbV90ZXh0dXJlRm9ybWF0ID0gR0xf
TFVNSU5BTkNFOworICAgIG1fdGV4dHVyZVR5cGUgPSBHTF9VTlNJR05FRF9CWVRFOworICAgIG1f
dGV4dHVyZUNvdW50ID0gMzsKKyAgICBtX3RleHR1cmVXaWR0aHNbMF0gPSBzaXplLndpZHRoKCk7
CisgICAgbV90ZXh0dXJlSGVpZ2h0c1swXSA9IHNpemUuaGVpZ2h0KCk7CisgICAgbV90ZXh0dXJl
T2Zmc2V0c1swXSA9IDA7CisgICAgbV90ZXh0dXJlV2lkdGhzWzFdID0gc2l6ZS53aWR0aCgpIC8g
MjsKKyAgICBtX3RleHR1cmVIZWlnaHRzWzFdID0gc2l6ZS5oZWlnaHQoKSAvIDI7CisgICAgbV90
ZXh0dXJlT2Zmc2V0c1sxXSA9IHNpemUud2lkdGgoKSAqIHNpemUuaGVpZ2h0KCk7CisgICAgbV90
ZXh0dXJlV2lkdGhzWzJdID0gc2l6ZS53aWR0aCgpIC8gMjsKKyAgICBtX3RleHR1cmVIZWlnaHRz
WzJdID0gc2l6ZS5oZWlnaHQoKSAvIDI7CisgICAgbV90ZXh0dXJlT2Zmc2V0c1syXSA9IHNpemUu
d2lkdGgoKSAqIHNpemUuaGVpZ2h0KCkgKiA1IC8gNDsKK30KKwordm9pZCBRVmlkZW9TdXJmYWNl
R0xQYWludGVyOjppbml0WXYxMlRleHR1cmVJbmZvKGNvbnN0IFFTaXplICZzaXplKQoreworICAg
IG1feXV2ID0gdHJ1ZTsKKyAgICBtX3RleHR1cmVJbnRlcm5hbEZvcm1hdCA9IEdMX0xVTUlOQU5D
RTsKKyAgICBtX3RleHR1cmVGb3JtYXQgPSBHTF9MVU1JTkFOQ0U7CisgICAgbV90ZXh0dXJlVHlw
ZSA9IEdMX1VOU0lHTkVEX0JZVEU7CisgICAgbV90ZXh0dXJlQ291bnQgPSAzOworICAgIG1fdGV4
dHVyZVdpZHRoc1swXSA9IHNpemUud2lkdGgoKTsKKyAgICBtX3RleHR1cmVIZWlnaHRzWzBdID0g
c2l6ZS5oZWlnaHQoKTsKKyAgICBtX3RleHR1cmVPZmZzZXRzWzBdID0gMDsKKyAgICBtX3RleHR1
cmVXaWR0aHNbMV0gPSBzaXplLndpZHRoKCkgLyAyOworICAgIG1fdGV4dHVyZUhlaWdodHNbMV0g
PSBzaXplLmhlaWdodCgpIC8gMjsKKyAgICBtX3RleHR1cmVPZmZzZXRzWzFdID0gc2l6ZS53aWR0
aCgpICogc2l6ZS5oZWlnaHQoKSAqIDUgLyA0OworICAgIG1fdGV4dHVyZVdpZHRoc1syXSA9IHNp
emUud2lkdGgoKSAvIDI7CisgICAgbV90ZXh0dXJlSGVpZ2h0c1syXSA9IHNpemUuaGVpZ2h0KCkg
LyAyOworICAgIG1fdGV4dHVyZU9mZnNldHNbMl0gPSBzaXplLndpZHRoKCkgKiBzaXplLmhlaWdo
dCgpOworfQorCisjaWZuZGVmIFFUX09QRU5HTF9FUworCisjIGlmbmRlZiBHTF9GUkFHTUVOVF9Q
Uk9HUkFNX0FSQgorIyAgZGVmaW5lIEdMX0ZSQUdNRU5UX1BST0dSQU1fQVJCICAgICAgICAgICAw
eDg4MDQKKyMgIGRlZmluZSBHTF9QUk9HUkFNX0ZPUk1BVF9BU0NJSV9BUkIgICAgICAgMHg4ODc1
CisjIGVuZGlmCisKKy8vIFBhaW50cyBhbiBSR0IzMiBmcmFtZQorc3RhdGljIGNvbnN0IGNoYXIg
KnF0X2FyYmZwX3hyZ2JTaGFkZXJQcm9ncmFtID0KKyAgICAiISFBUkJmcDEuMFxuIgorICAgICJQ
QVJBTSBtYXRyaXhbNF0gPSB7IHByb2dyYW0ubG9jYWxbMC4uMl0sIgorICAgICJ7IDAuMCwgMC4w
LCAwLjAsIDEuMCB9IH07XG4iCisgICAgIlRFTVAgeHJnYjtcbiIKKyAgICAiVEVYIHhyZ2IueHl6
LCBmcmFnbWVudC50ZXhjb29yZFswXSwgdGV4dHVyZVswXSwgMkQ7XG4iCisgICAgIk1PViB4cmdi
LncsIG1hdHJpeFszXS53O1xuIgorICAgICJEUDQgcmVzdWx0LmNvbG9yLngsIHhyZ2Iuenl4dywg
bWF0cml4WzBdO1xuIgorICAgICJEUDQgcmVzdWx0LmNvbG9yLnksIHhyZ2Iuenl4dywgbWF0cml4
WzFdO1xuIgorICAgICJEUDQgcmVzdWx0LmNvbG9yLnosIHhyZ2Iuenl4dywgbWF0cml4WzJdO1xu
IgorICAgICJFTkQiOworCisvLyBQYWludHMgYW4gQVJHQiBmcmFtZS4KK3N0YXRpYyBjb25zdCBj
aGFyICpxdF9hcmJmcF9hcmdiU2hhZGVyUHJvZ3JhbSA9CisgICAgIiEhQVJCZnAxLjBcbiIKKyAg
ICAiUEFSQU0gbWF0cml4WzRdID0geyBwcm9ncmFtLmxvY2FsWzAuLjJdLCIKKyAgICAieyAwLjAs
IDAuMCwgMC4wLCAxLjAgfSB9O1xuIgorICAgICJURU1QIGFyZ2I7XG4iCisgICAgIlRFWCBhcmdi
LCBmcmFnbWVudC50ZXhjb29yZFswXSwgdGV4dHVyZVswXSwgMkQ7XG4iCisgICAgIk1PViBhcmdi
LncsIG1hdHJpeFszXS53O1xuIgorICAgICJEUDQgcmVzdWx0LmNvbG9yLngsIGFyZ2Iuenl4dywg
bWF0cml4WzBdO1xuIgorICAgICJEUDQgcmVzdWx0LmNvbG9yLnksIGFyZ2Iuenl4dywgbWF0cml4
WzFdO1xuIgorICAgICJEUDQgcmVzdWx0LmNvbG9yLnosIGFyZ2Iuenl4dywgbWF0cml4WzJdO1xu
IgorICAgICJURVggcmVzdWx0LmNvbG9yLncsIGZyYWdtZW50LnRleGNvb3JkWzBdLCB0ZXh0dXJl
LCAyRDtcbiIKKyAgICAiRU5EIjsKKworLy8gUGFpbnRzIGFuIFJHQihBKSBmcmFtZS4KK3N0YXRp
YyBjb25zdCBjaGFyICpxdF9hcmJmcF9yZ2JTaGFkZXJQcm9ncmFtID0KKyAgICAiISFBUkJmcDEu
MFxuIgorICAgICJQQVJBTSBtYXRyaXhbNF0gPSB7IHByb2dyYW0ubG9jYWxbMC4uMl0sIgorICAg
ICJ7IDAuMCwgMC4wLCAwLjAsIDEuMCB9IH07XG4iCisgICAgIlRFTVAgcmdiO1xuIgorICAgICJU
RVggcmdiLCBmcmFnbWVudC50ZXhjb29yZFswXSwgdGV4dHVyZVswXSwgMkQ7XG4iCisgICAgIk1P
ViByZ2IudywgbWF0cml4WzNdLnc7XG4iCisgICAgIkRQNCByZXN1bHQuY29sb3IueCwgcmdiLCBt
YXRyaXhbMF07XG4iCisgICAgIkRQNCByZXN1bHQuY29sb3IueSwgcmdiLCBtYXRyaXhbMV07XG4i
CisgICAgIkRQNCByZXN1bHQuY29sb3IueiwgcmdiLCBtYXRyaXhbMl07XG4iCisgICAgIlRFWCBy
ZXN1bHQuY29sb3IudywgZnJhZ21lbnQudGV4Y29vcmRbMF0sIHRleHR1cmUsIDJEO1xuIgorICAg
ICJFTkQiOworCisvLyBQYWludHMgYSBZVVY0MjBQIG9yIFlWMTIgZnJhbWUuCitzdGF0aWMgY29u
c3QgY2hhciAqcXRfYXJiZnBfeXV2UGxhbmFyU2hhZGVyUHJvZ3JhbSA9CisgICAgIiEhQVJCZnAx
LjBcbiIKKyAgICAiUEFSQU0gbWF0cml4WzRdID0geyBwcm9ncmFtLmxvY2FsWzAuLjJdLCIKKyAg
ICAieyAwLjAsIDAuMCwgMC4wLCAxLjAgfSB9O1xuIgorICAgICJURU1QIHl1djtcbiIKKyAgICAi
VEVYIHl1di54LCBmcmFnbWVudC50ZXhjb29yZFswXSwgdGV4dHVyZVswXSwgMkQ7XG4iCisgICAg
IlRFWCB5dXYueSwgZnJhZ21lbnQudGV4Y29vcmRbMF0sIHRleHR1cmVbMV0sIDJEO1xuIgorICAg
ICJURVggeXV2LnosIGZyYWdtZW50LnRleGNvb3JkWzBdLCB0ZXh0dXJlWzJdLCAyRDtcbiIKKyAg
ICAiTU9WIHl1di53LCBtYXRyaXhbM10udztcbiIKKyAgICAiRFA0IHJlc3VsdC5jb2xvci54LCB5
dXYsIG1hdHJpeFswXTtcbiIKKyAgICAiRFA0IHJlc3VsdC5jb2xvci55LCB5dXYsIG1hdHJpeFsx
XTtcbiIKKyAgICAiRFA0IHJlc3VsdC5jb2xvci56LCB5dXYsIG1hdHJpeFsyXTtcbiIKKyAgICAi
RU5EIjsKKworCitjbGFzcyBRVmlkZW9TdXJmYWNlQXJiRnBQYWludGVyIDogcHVibGljIFFWaWRl
b1N1cmZhY2VHTFBhaW50ZXIgeworcHVibGljOgorICAgIFFWaWRlb1N1cmZhY2VBcmJGcFBhaW50
ZXIoUUdMQ29udGV4dCAqY29udGV4dCk7CisKKyAgICBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6OkVy
cm9yIHN0YXJ0KGNvbnN0IFFWaWRlb1N1cmZhY2VGb3JtYXQgJmZvcm1hdCk7CisgICAgdm9pZCBz
dG9wKCk7CisKKyAgICBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6OkVycm9yIHBhaW50KAorICAgICAg
ICAgICAgY29uc3QgUVJlY3RGICZ0YXJnZXQsIFFQYWludGVyICpwYWludGVyLCBjb25zdCBRUmVj
dEYgJnNvdXJjZSk7CisKK3ByaXZhdGU6CisgICAgdHlwZWRlZiB2b2lkIChBUElFTlRSWSAqX2ds
UHJvZ3JhbVN0cmluZ0FSQikgKEdMZW51bSwgR0xlbnVtLCBHTHNpemVpLCBjb25zdCBHTHZvaWQg
Kik7CisgICAgdHlwZWRlZiB2b2lkIChBUElFTlRSWSAqX2dsQmluZFByb2dyYW1BUkIpIChHTGVu
dW0sIEdMdWludCk7CisgICAgdHlwZWRlZiB2b2lkIChBUElFTlRSWSAqX2dsRGVsZXRlUHJvZ3Jh
bXNBUkIpIChHTHNpemVpLCBjb25zdCBHTHVpbnQgKik7CisgICAgdHlwZWRlZiB2b2lkIChBUElF
TlRSWSAqX2dsR2VuUHJvZ3JhbXNBUkIpIChHTHNpemVpLCBHTHVpbnQgKik7CisgICAgdHlwZWRl
ZiB2b2lkIChBUElFTlRSWSAqX2dsUHJvZ3JhbUxvY2FsUGFyYW1ldGVyNGZBUkIpICgKKyAgICAg
ICAgICAgIEdMZW51bSwgR0x1aW50LCBHTGZsb2F0LCBHTGZsb2F0LCBHTGZsb2F0LCBHTGZsb2F0
KTsKKyAgICB0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpfZ2xBY3RpdmVUZXh0dXJlKSAoR0xlbnVt
KTsKKworICAgIF9nbFByb2dyYW1TdHJpbmdBUkIgZ2xQcm9ncmFtU3RyaW5nQVJCOworICAgIF9n
bEJpbmRQcm9ncmFtQVJCIGdsQmluZFByb2dyYW1BUkI7CisgICAgX2dsRGVsZXRlUHJvZ3JhbXNB
UkIgZ2xEZWxldGVQcm9ncmFtc0FSQjsKKyAgICBfZ2xHZW5Qcm9ncmFtc0FSQiBnbEdlblByb2dy
YW1zQVJCOworICAgIF9nbFByb2dyYW1Mb2NhbFBhcmFtZXRlcjRmQVJCIGdsUHJvZ3JhbUxvY2Fs
UGFyYW1ldGVyNGZBUkI7CisKKyAgICBHTHVpbnQgbV9wcm9ncmFtSWQ7CisgICAgUVNpemUgbV9m
cmFtZVNpemU7Cit9OworCitRVmlkZW9TdXJmYWNlQXJiRnBQYWludGVyOjpRVmlkZW9TdXJmYWNl
QXJiRnBQYWludGVyKFFHTENvbnRleHQgKmNvbnRleHQpCisgICAgOiBRVmlkZW9TdXJmYWNlR0xQ
YWludGVyKGNvbnRleHQpCisgICAgLCBtX3Byb2dyYW1JZCgwKQoreworICAgIGdsUHJvZ3JhbVN0
cmluZ0FSQiA9IChfZ2xQcm9ncmFtU3RyaW5nQVJCKSBtX2NvbnRleHQtPmdldFByb2NBZGRyZXNz
KAorICAgICAgICAgICAgICAgIFFMYXRpbjFTdHJpbmcoImdsUHJvZ3JhbVN0cmluZ0FSQiIpKTsK
KyAgICBnbEJpbmRQcm9ncmFtQVJCID0gKF9nbEJpbmRQcm9ncmFtQVJCKSBtX2NvbnRleHQtPmdl
dFByb2NBZGRyZXNzKAorICAgICAgICAgICAgICAgIFFMYXRpbjFTdHJpbmcoImdsQmluZFByb2dy
YW1BUkIiKSk7CisgICAgZ2xEZWxldGVQcm9ncmFtc0FSQiA9IChfZ2xEZWxldGVQcm9ncmFtc0FS
QikgbV9jb250ZXh0LT5nZXRQcm9jQWRkcmVzcygKKyAgICAgICAgICAgICAgICBRTGF0aW4xU3Ry
aW5nKCJnbERlbGV0ZVByb2dyYW1zQVJCIikpOworICAgIGdsR2VuUHJvZ3JhbXNBUkIgPSAoX2ds
R2VuUHJvZ3JhbXNBUkIpIG1fY29udGV4dC0+Z2V0UHJvY0FkZHJlc3MoCisgICAgICAgICAgICAg
ICAgUUxhdGluMVN0cmluZygiZ2xHZW5Qcm9ncmFtc0FSQiIpKTsKKyAgICBnbFByb2dyYW1Mb2Nh
bFBhcmFtZXRlcjRmQVJCID0gKF9nbFByb2dyYW1Mb2NhbFBhcmFtZXRlcjRmQVJCKSBtX2NvbnRl
eHQtPmdldFByb2NBZGRyZXNzKAorICAgICAgICAgICAgICAgIFFMYXRpbjFTdHJpbmcoImdsUHJv
Z3JhbUxvY2FsUGFyYW1ldGVyNGZBUkIiKSk7CisKKyAgICBtX2ltYWdlUGl4ZWxGb3JtYXRzCisg
ICAgICAgICAgICA8PCBRVmlkZW9GcmFtZTo6Rm9ybWF0X1JHQjMyCisgICAgICAgICAgICA8PCBR
VmlkZW9GcmFtZTo6Rm9ybWF0X0FSR0IzMgorICAgICAgICAgICAgPDwgUVZpZGVvRnJhbWU6OkZv
cm1hdF9SR0IyNAorICAgICAgICAgICAgPDwgUVZpZGVvRnJhbWU6OkZvcm1hdF9SR0I1NjUKKyAg
ICAgICAgICAgIDw8IFFWaWRlb0ZyYW1lOjpGb3JtYXRfWVYxMgorICAgICAgICAgICAgPDwgUVZp
ZGVvRnJhbWU6OkZvcm1hdF9ZVVY0MjBQOworICAgIG1fZ2xQaXhlbEZvcm1hdHMKKyAgICAgICAg
ICAgIDw8IFFWaWRlb0ZyYW1lOjpGb3JtYXRfUkdCMzIKKyAgICAgICAgICAgIDw8IFFWaWRlb0Zy
YW1lOjpGb3JtYXRfQVJHQjMyOworfQorCitRQWJzdHJhY3RWaWRlb1N1cmZhY2U6OkVycm9yIFFW
aWRlb1N1cmZhY2VBcmJGcFBhaW50ZXI6OnN0YXJ0KGNvbnN0IFFWaWRlb1N1cmZhY2VGb3JtYXQg
JmZvcm1hdCkKK3sKKyAgICBRX0FTU0VSVCghbV90ZXh0dXJlQ291bnQpOworCisgICAgUUFic3Ry
YWN0VmlkZW9TdXJmYWNlOjpFcnJvciBlcnJvciA9IFFBYnN0cmFjdFZpZGVvU3VyZmFjZTo6Tm9F
cnJvcjsKKworICAgIG1fY29udGV4dC0+bWFrZUN1cnJlbnQoKTsKKworICAgIGNvbnN0IGNoYXIg
KnByb2dyYW0gPSAwOworCisgICAgaWYgKGZvcm1hdC5oYW5kbGVUeXBlKCkgPT0gUUFic3RyYWN0
VmlkZW9CdWZmZXI6Ok5vSGFuZGxlKSB7CisgICAgICAgIHN3aXRjaCAoZm9ybWF0LnBpeGVsRm9y
bWF0KCkpIHsKKyAgICAgICAgY2FzZSBRVmlkZW9GcmFtZTo6Rm9ybWF0X1JHQjMyOgorICAgICAg
ICAgICAgaW5pdFJnYlRleHR1cmVJbmZvKEdMX1JHQkEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZ
VEUsIGZvcm1hdC5mcmFtZVNpemUoKSk7CisgICAgICAgICAgICBwcm9ncmFtID0gcXRfYXJiZnBf
eHJnYlNoYWRlclByb2dyYW07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBRVmlk
ZW9GcmFtZTo6Rm9ybWF0X0FSR0IzMjoKKyAgICAgICAgICAgIGluaXRSZ2JUZXh0dXJlSW5mbyhH
TF9SR0JBLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBmb3JtYXQuZnJhbWVTaXplKCkpOwor
ICAgICAgICAgICAgcHJvZ3JhbSA9IHF0X2FyYmZwX2FyZ2JTaGFkZXJQcm9ncmFtOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUVZpZGVvRnJhbWU6OkZvcm1hdF9SR0IyNDoKKyAg
ICAgICAgICAgIGluaXRSZ2JUZXh0dXJlSW5mbyhHTF9SR0I4LCBHTF9SR0JBLCBHTF9VTlNJR05F
RF9CWVRFLCBmb3JtYXQuZnJhbWVTaXplKCkpOworICAgICAgICAgICAgcHJvZ3JhbSA9IHF0X2Fy
YmZwX2FyZ2JTaGFkZXJQcm9ncmFtOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
UVZpZGVvRnJhbWU6OkZvcm1hdF9SR0I1NjU6CisgICAgICAgICAgICBpbml0UmdiVGV4dHVyZUlu
Zm8oR0xfUkdCLCBHTF9SR0IsIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81LCBmb3JtYXQuZnJhbWVT
aXplKCkpOworICAgICAgICAgICAgcHJvZ3JhbSA9IHF0X2FyYmZwX3JnYlNoYWRlclByb2dyYW07
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBRVmlkZW9GcmFtZTo6Rm9ybWF0X1lW
MTI6CisgICAgICAgICAgICBpbml0WXYxMlRleHR1cmVJbmZvKGZvcm1hdC5mcmFtZVNpemUoKSk7
CisgICAgICAgICAgICBwcm9ncmFtID0gcXRfYXJiZnBfeXV2UGxhbmFyU2hhZGVyUHJvZ3JhbTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFFWaWRlb0ZyYW1lOjpGb3JtYXRfWVVW
NDIwUDoKKyAgICAgICAgICAgIGluaXRZdXY0MjBQVGV4dHVyZUluZm8oZm9ybWF0LmZyYW1lU2l6
ZSgpKTsKKyAgICAgICAgICAgIHByb2dyYW0gPSBxdF9hcmJmcF95dXZQbGFuYXJTaGFkZXJQcm9n
cmFtOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoZm9ybWF0LmhhbmRsZVR5cGUoKSA9PSBR
QWJzdHJhY3RWaWRlb0J1ZmZlcjo6R0xUZXh0dXJlSGFuZGxlKSB7CisgICAgICAgIHN3aXRjaCAo
Zm9ybWF0LnBpeGVsRm9ybWF0KCkpIHsKKyAgICAgICAgY2FzZSBRVmlkZW9GcmFtZTo6Rm9ybWF0
X1JHQjMyOgorICAgICAgICBjYXNlIFFWaWRlb0ZyYW1lOjpGb3JtYXRfQVJHQjMyOgorICAgICAg
ICAgICAgbV95dXYgPSBmYWxzZTsKKyAgICAgICAgICAgIG1fdGV4dHVyZUNvdW50ID0gMTsKKyAg
ICAgICAgICAgIHByb2dyYW0gPSBxdF9hcmJmcF9yZ2JTaGFkZXJQcm9ncmFtOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgZXJyb3IgPSBRQWJzdHJhY3RW
aWRlb1N1cmZhY2U6OlVuc3VwcG9ydGVkRm9ybWF0RXJyb3I7CisgICAgZWxzZSB7CisgICAgICAg
IGdsR2VuUHJvZ3JhbXNBUkIoMSwgJm1fcHJvZ3JhbUlkKTsKKworICAgICAgICBHTGVudW0gZ2xF
cnJvciA9IGdsR2V0RXJyb3IoKTsKKyAgICAgICAgaWYgKGdsRXJyb3IgIT0gR0xfTk9fRVJST1Ip
IHsKKyAgICAgICAgICAgIHFXYXJuaW5nKCJRUGFpbnRlclZpZGVvU3VyZmFjZTogQVJCZmIgU2hh
ZGVyIGFsbG9jYXRpb24gZXJyb3IgJXgiLCBpbnQoZ2xFcnJvcikpOworICAgICAgICAgICAgbV90
ZXh0dXJlQ291bnQgPSAwOworICAgICAgICAgICAgbV9wcm9ncmFtSWQgPSAwOworCisgICAgICAg
ICAgICBlcnJvciA9IFFBYnN0cmFjdFZpZGVvU3VyZmFjZTo6UmVzb3VyY2VFcnJvcjsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGdsQmluZFByb2dyYW1BUkIoR0xfRlJBR01FTlRfUFJP
R1JBTV9BUkIsIG1fcHJvZ3JhbUlkKTsKKyAgICAgICAgICAgIGdsUHJvZ3JhbVN0cmluZ0FSQigK
KyAgICAgICAgICAgICAgICAgICAgR0xfRlJBR01FTlRfUFJPR1JBTV9BUkIsCisgICAgICAgICAg
ICAgICAgICAgIEdMX1BST0dSQU1fRk9STUFUX0FTQ0lJX0FSQiwKKyAgICAgICAgICAgICAgICAg
ICAgcXN0cmxlbihwcm9ncmFtKSwKKyAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBHTHZvaWQgKj4ocHJvZ3JhbSkpOworCisgICAgICAgICAgICBpZiAoKGdsRXJyb3Ig
PSBnbEdldEVycm9yKCkpICE9IEdMX05PX0VSUk9SKSB7CisgICAgICAgICAgICAgICAgY29uc3Qg
R0x1Ynl0ZSogZXJyb3JTdHJpbmcgPSBnbEdldFN0cmluZyhHTF9QUk9HUkFNX0VSUk9SX1NUUklO
R19BUkIpOworCisgICAgICAgICAgICAgICAgcVdhcm5pbmcoIlFQYWludGVyVmlkZW9TdXJmYWNl
OiBBUkJmcCBTaGFkZXIgY29tcGlsZSBlcnJvciAleCwgJXMiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIGludChnbEVycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIgKj4oZXJyb3JTdHJpbmcpKTsKKyAgICAgICAgICAgICAgICBnbERl
bGV0ZVByb2dyYW1zQVJCKDEsICZtX3Byb2dyYW1JZCk7CisKKyAgICAgICAgICAgICAgICBtX3Rl
eHR1cmVDb3VudCA9IDA7CisgICAgICAgICAgICAgICAgbV9wcm9ncmFtSWQgPSAwOworCisgICAg
ICAgICAgICAgICAgZXJyb3IgPSBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6OlJlc291cmNlRXJyb3I7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1faGFuZGxlVHlwZSA9IGZv
cm1hdC5oYW5kbGVUeXBlKCk7CisgICAgICAgICAgICAgICAgbV9zY2FuTGluZURpcmVjdGlvbiA9
IGZvcm1hdC5zY2FuTGluZURpcmVjdGlvbigpOworICAgICAgICAgICAgICAgIG1fZnJhbWVTaXpl
ID0gZm9ybWF0LmZyYW1lU2l6ZSgpOworCisgICAgICAgICAgICAgICAgaWYgKG1faGFuZGxlVHlw
ZSA9PSBRQWJzdHJhY3RWaWRlb0J1ZmZlcjo6Tm9IYW5kbGUpCisgICAgICAgICAgICAgICAgICAg
IGdsR2VuVGV4dHVyZXMobV90ZXh0dXJlQ291bnQsIG1fdGV4dHVyZUlkcyk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgUVZp
ZGVvU3VyZmFjZUFyYkZwUGFpbnRlcjo6c3RvcCgpCit7CisgICAgbV9jb250ZXh0LT5tYWtlQ3Vy
cmVudCgpOworCisgICAgaWYgKG1faGFuZGxlVHlwZSAhPSBRQWJzdHJhY3RWaWRlb0J1ZmZlcjo6
R0xUZXh0dXJlSGFuZGxlKQorICAgICAgICBnbERlbGV0ZVRleHR1cmVzKG1fdGV4dHVyZUNvdW50
LCBtX3RleHR1cmVJZHMpOworICAgIGdsRGVsZXRlUHJvZ3JhbXNBUkIoMSwgJm1fcHJvZ3JhbUlk
KTsKKworICAgIG1fdGV4dHVyZUNvdW50ID0gMDsKKyAgICBtX3Byb2dyYW1JZCA9IDA7CisgICAg
bV9oYW5kbGVUeXBlID0gUUFic3RyYWN0VmlkZW9CdWZmZXI6Ok5vSGFuZGxlOworfQorCitRQWJz
dHJhY3RWaWRlb1N1cmZhY2U6OkVycm9yIFFWaWRlb1N1cmZhY2VBcmJGcFBhaW50ZXI6OnBhaW50
KAorICAgICAgICBjb25zdCBRUmVjdEYgJnRhcmdldCwgUVBhaW50ZXIgKnBhaW50ZXIsIGNvbnN0
IFFSZWN0RiAmc291cmNlKQoreworICAgIGlmIChtX2ZyYW1lLmlzVmFsaWQoKSkgeworICAgICAg
ICBwYWludGVyLT5iZWdpbk5hdGl2ZVBhaW50aW5nKCk7CisKKyAgICAgICAgY29uc3QgZmxvYXQg
dHhMZWZ0ID0gc291cmNlLmxlZnQoKSAvIG1fZnJhbWVTaXplLndpZHRoKCk7CisgICAgICAgIGNv
bnN0IGZsb2F0IHR4UmlnaHQgPSBzb3VyY2UucmlnaHQoKSAvIG1fZnJhbWVTaXplLndpZHRoKCk7
CisgICAgICAgIGNvbnN0IGZsb2F0IHR4VG9wID0gbV9zY2FuTGluZURpcmVjdGlvbiA9PSBRVmlk
ZW9TdXJmYWNlRm9ybWF0OjpUb3BUb0JvdHRvbQorICAgICAgICAgICAgICAgID8gc291cmNlLnRv
cCgpIC8gbV9mcmFtZVNpemUuaGVpZ2h0KCkKKyAgICAgICAgICAgICAgICA6IHNvdXJjZS5ib3R0
b20oKSAvIG1fZnJhbWVTaXplLmhlaWdodCgpOworICAgICAgICBjb25zdCBmbG9hdCB0eEJvdHRv
bSA9IG1fc2NhbkxpbmVEaXJlY3Rpb24gPT0gUVZpZGVvU3VyZmFjZUZvcm1hdDo6VG9wVG9Cb3R0
b20KKyAgICAgICAgICAgICAgICA/IHNvdXJjZS5ib3R0b20oKSAvIG1fZnJhbWVTaXplLmhlaWdo
dCgpCisgICAgICAgICAgICAgICAgOiBzb3VyY2UudG9wKCkgLyBtX2ZyYW1lU2l6ZS5oZWlnaHQo
KTsKKworICAgICAgICBjb25zdCBmbG9hdCB0eEFycmF5W10gPQorICAgICAgICB7CisgICAgICAg
ICAgICB0eExlZnQgLCB0eEJvdHRvbSwKKyAgICAgICAgICAgIHR4UmlnaHQsIHR4Qm90dG9tLAor
ICAgICAgICAgICAgdHhMZWZ0ICwgdHhUb3AsCisgICAgICAgICAgICB0eFJpZ2h0LCB0eFRvcAor
ICAgICAgICB9OworCisgICAgICAgIGNvbnN0IEdMZmxvYXQgdlRvcCA9IG1fc2NhbkxpbmVEaXJl
Y3Rpb24gPT0gUVZpZGVvU3VyZmFjZUZvcm1hdDo6VG9wVG9Cb3R0b20KKyAgICAgICAgICAgICAg
ICA/IHRhcmdldC50b3AoKQorICAgICAgICAgICAgICAgIDogdGFyZ2V0LmJvdHRvbSgpICsgMTsK
KyAgICAgICAgY29uc3QgR0xmbG9hdCB2Qm90dG9tID0gbV9zY2FuTGluZURpcmVjdGlvbiA9PSBR
VmlkZW9TdXJmYWNlRm9ybWF0OjpUb3BUb0JvdHRvbQorICAgICAgICAgICAgICAgID8gdGFyZ2V0
LmJvdHRvbSgpICsgMQorICAgICAgICAgICAgICAgIDogdGFyZ2V0LnRvcCgpOworCisgICAgICAg
IGNvbnN0IEdMZmxvYXQgdkFycmF5W10gPQorICAgICAgICB7CisgICAgICAgICAgICB0YXJnZXQu
bGVmdCgpICAgICAsIHZCb3R0b20sCisgICAgICAgICAgICB0YXJnZXQucmlnaHQoKSArIDEsIHZC
b3R0b20sCisgICAgICAgICAgICB0YXJnZXQubGVmdCgpICAgICAsIHZUb3AsCisgICAgICAgICAg
ICB0YXJnZXQucmlnaHQoKSArIDEsIHZUb3AKKyAgICAgICAgfTsKKworICAgICAgICBnbEVuYWJs
ZShHTF9GUkFHTUVOVF9QUk9HUkFNX0FSQik7CisgICAgICAgIGdsQmluZFByb2dyYW1BUkIoR0xf
RlJBR01FTlRfUFJPR1JBTV9BUkIsIG1fcHJvZ3JhbUlkKTsKKworICAgICAgICBnbFByb2dyYW1M
b2NhbFBhcmFtZXRlcjRmQVJCKAorICAgICAgICAgICAgICAgIEdMX0ZSQUdNRU5UX1BST0dSQU1f
QVJCLAorICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgbV9jb2xvck1hdHJpeCgw
LCAwKSwKKyAgICAgICAgICAgICAgICBtX2NvbG9yTWF0cml4KDAsIDEpLAorICAgICAgICAgICAg
ICAgIG1fY29sb3JNYXRyaXgoMCwgMiksCisgICAgICAgICAgICAgICAgbV9jb2xvck1hdHJpeCgw
LCAzKSk7CisgICAgICAgIGdsUHJvZ3JhbUxvY2FsUGFyYW1ldGVyNGZBUkIoCisgICAgICAgICAg
ICAgICAgR0xfRlJBR01FTlRfUFJPR1JBTV9BUkIsCisgICAgICAgICAgICAgICAgMSwKKyAgICAg
ICAgICAgICAgICBtX2NvbG9yTWF0cml4KDEsIDApLAorICAgICAgICAgICAgICAgIG1fY29sb3JN
YXRyaXgoMSwgMSksCisgICAgICAgICAgICAgICAgbV9jb2xvck1hdHJpeCgxLCAyKSwKKyAgICAg
ICAgICAgICAgICBtX2NvbG9yTWF0cml4KDEsIDMpKTsKKyAgICAgICAgZ2xQcm9ncmFtTG9jYWxQ
YXJhbWV0ZXI0ZkFSQigKKyAgICAgICAgICAgICAgICBHTF9GUkFHTUVOVF9QUk9HUkFNX0FSQiwK
KyAgICAgICAgICAgICAgICAyLAorICAgICAgICAgICAgICAgIG1fY29sb3JNYXRyaXgoMiwgMCks
CisgICAgICAgICAgICAgICAgbV9jb2xvck1hdHJpeCgyLCAxKSwKKyAgICAgICAgICAgICAgICBt
X2NvbG9yTWF0cml4KDIsIDIpLAorICAgICAgICAgICAgICAgIG1fY29sb3JNYXRyaXgoMiwgMykp
OworCisgICAgICAgIGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCk7CisgICAgICAgIGdsQmlu
ZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlSWRzWzBdKTsKKworICAgICAgICBpZiAo
bV90ZXh0dXJlQ291bnQgPT0gMykgeworICAgICAgICAgICAgZ2xBY3RpdmVUZXh0dXJlKEdMX1RF
WFRVUkUxKTsKKyAgICAgICAgICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0
dXJlSWRzWzFdKTsKKyAgICAgICAgICAgIGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMik7Cisg
ICAgICAgICAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZUlkc1syXSk7
CisgICAgICAgICAgICBnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApOworICAgICAgICB9CisK
KyAgICAgICAgZ2xWZXJ0ZXhQb2ludGVyKDIsIEdMX0ZMT0FULCAwLCB2QXJyYXkpOworICAgICAg
ICBnbFRleENvb3JkUG9pbnRlcigyLCBHTF9GTE9BVCwgMCwgdHhBcnJheSk7CisKKyAgICAgICAg
Z2xFbmFibGVDbGllbnRTdGF0ZShHTF9WRVJURVhfQVJSQVkpOworICAgICAgICBnbEVuYWJsZUNs
aWVudFN0YXRlKEdMX1RFWFRVUkVfQ09PUkRfQVJSQVkpOworCisgICAgICAgIGdsRHJhd0FycmF5
cyhHTF9UUklBTkdMRV9TVFJJUCwgMCwgNCk7CisKKyAgICAgICAgZ2xEaXNhYmxlQ2xpZW50U3Rh
dGUoR0xfVEVYVFVSRV9DT09SRF9BUlJBWSk7CisgICAgICAgIGdsRGlzYWJsZUNsaWVudFN0YXRl
KEdMX1ZFUlRFWF9BUlJBWSk7CisgICAgICAgIGdsRGlzYWJsZShHTF9GUkFHTUVOVF9QUk9HUkFN
X0FSQik7CisKKyAgICAgICAgcGFpbnRlci0+ZW5kTmF0aXZlUGFpbnRpbmcoKTsKKyAgICB9Cisg
ICAgcmV0dXJuIFFBYnN0cmFjdFZpZGVvU3VyZmFjZTo6Tm9FcnJvcjsKK30KKworI2VuZGlmCisK
K3N0YXRpYyBjb25zdCBjaGFyICpxdF9nbHNsX3ZlcnRleFNoYWRlclByb2dyYW0gPQorICAgICAg
ICAiYXR0cmlidXRlIGhpZ2hwIHZlYzQgdmVydGV4Q29vcmRBcnJheTtcbiIKKyAgICAgICAgImF0
dHJpYnV0ZSBoaWdocCB2ZWMyIHRleHR1cmVDb29yZEFycmF5O1xuIgorICAgICAgICAidW5pZm9y
bSBoaWdocCBtYXQ0IHBvc2l0aW9uTWF0cml4O1xuIgorICAgICAgICAidmFyeWluZyBoaWdocCB2
ZWMyIHRleHR1cmVDb29yZDtcbiIKKyAgICAgICAgInZvaWQgbWFpbih2b2lkKVxuIgorICAgICAg
ICAie1xuIgorICAgICAgICAiICAgZ2xfUG9zaXRpb24gPSBwb3NpdGlvbk1hdHJpeCAqIHZlcnRl
eENvb3JkQXJyYXk7XG4iCisgICAgICAgICIgICB0ZXh0dXJlQ29vcmQgPSB0ZXh0dXJlQ29vcmRB
cnJheTtcbiIKKyAgICAgICAgIn1cbiI7CisKKy8vIFBhaW50cyBhbiBSR0IzMiBmcmFtZQorc3Rh
dGljIGNvbnN0IGNoYXIgKnF0X2dsc2xfeHJnYlNoYWRlclByb2dyYW0gPQorICAgICAgICAidW5p
Zm9ybSBzYW1wbGVyMkQgdGV4UmdiO1xuIgorICAgICAgICAidW5pZm9ybSBtZWRpdW1wIG1hdDQg
Y29sb3JNYXRyaXg7XG4iCisgICAgICAgICJ2YXJ5aW5nIGhpZ2hwIHZlYzIgdGV4dHVyZUNvb3Jk
O1xuIgorICAgICAgICAidm9pZCBtYWluKHZvaWQpXG4iCisgICAgICAgICJ7XG4iCisgICAgICAg
ICIgICAgaGlnaHAgdmVjNCBjb2xvciA9IHZlYzQodGV4dHVyZTJEKHRleFJnYiwgdGV4dHVyZUNv
b3JkLnN0KS5iZ3IsIDEuMCk7XG4iCisgICAgICAgICIgICAgZ2xfRnJhZ0NvbG9yID0gY29sb3JN
YXRyaXggKiBjb2xvcjtcbiIKKyAgICAgICAgIn1cbiI7CisKKy8vIFBhaW50cyBhbiBBUkdCIGZy
YW1lLgorc3RhdGljIGNvbnN0IGNoYXIgKnF0X2dsc2xfYXJnYlNoYWRlclByb2dyYW0gPQorICAg
ICAgICAidW5pZm9ybSBzYW1wbGVyMkQgdGV4UmdiO1xuIgorICAgICAgICAidW5pZm9ybSBtZWRp
dW1wIG1hdDQgY29sb3JNYXRyaXg7XG4iCisgICAgICAgICJ2YXJ5aW5nIGhpZ2hwIHZlYzIgdGV4
dHVyZUNvb3JkO1xuIgorICAgICAgICAidm9pZCBtYWluKHZvaWQpXG4iCisgICAgICAgICJ7XG4i
CisgICAgICAgICIgICAgaGlnaHAgdmVjNCBjb2xvciA9IHZlYzQodGV4dHVyZTJEKHRleFJnYiwg
dGV4dHVyZUNvb3JkLnN0KS5iZ3IsIDEuMCk7XG4iCisgICAgICAgICIgICAgY29sb3IgPSBjb2xv
ck1hdHJpeCAqIGNvbG9yO1xuIgorICAgICAgICAiICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29s
b3IucmdiLCB0ZXh0dXJlMkQodGV4UmdiLCB0ZXh0dXJlQ29vcmQuc3QpLmEpO1xuIgorICAgICAg
ICAifVxuIjsKKworLy8gUGFpbnRzIGFuIFJHQihBKSBmcmFtZS4KK3N0YXRpYyBjb25zdCBjaGFy
ICpxdF9nbHNsX3JnYlNoYWRlclByb2dyYW0gPQorICAgICAgICAidW5pZm9ybSBzYW1wbGVyMkQg
dGV4UmdiO1xuIgorICAgICAgICAidW5pZm9ybSBtZWRpdW1wIG1hdDQgY29sb3JNYXRyaXg7XG4i
CisgICAgICAgICJ2YXJ5aW5nIGhpZ2hwIHZlYzIgdGV4dHVyZUNvb3JkO1xuIgorICAgICAgICAi
dm9pZCBtYWluKHZvaWQpXG4iCisgICAgICAgICJ7XG4iCisgICAgICAgICIgICAgaGlnaHAgdmVj
NCBjb2xvciA9IHZlYzQodGV4dHVyZTJEKHRleFJnYiwgdGV4dHVyZUNvb3JkLnN0KS5yZ2IsIDEu
MCk7XG4iCisgICAgICAgICIgICAgY29sb3IgPSBjb2xvck1hdHJpeCAqIGNvbG9yO1xuIgorICAg
ICAgICAiICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IucmdiLCB0ZXh0dXJlMkQodGV4Umdi
LCB0ZXh0dXJlQ29vcmQuc3QpLmEpO1xuIgorICAgICAgICAifVxuIjsKKworLy8gUGFpbnRzIGEg
WVVWNDIwUCBvciBZVjEyIGZyYW1lLgorc3RhdGljIGNvbnN0IGNoYXIgKnF0X2dsc2xfeXV2UGxh
bmFyU2hhZGVyUHJvZ3JhbSA9CisgICAgICAgICJ1bmlmb3JtIHNhbXBsZXIyRCB0ZXhZO1xuIgor
ICAgICAgICAidW5pZm9ybSBzYW1wbGVyMkQgdGV4VTtcbiIKKyAgICAgICAgInVuaWZvcm0gc2Ft
cGxlcjJEIHRleFY7XG4iCisgICAgICAgICJ1bmlmb3JtIG1lZGl1bXAgbWF0NCBjb2xvck1hdHJp
eDtcbiIKKyAgICAgICAgInZhcnlpbmcgaGlnaHAgdmVjMiB0ZXh0dXJlQ29vcmQ7XG4iCisgICAg
ICAgICJ2b2lkIG1haW4odm9pZClcbiIKKyAgICAgICAgIntcbiIKKyAgICAgICAgIiAgICBoaWdo
cCB2ZWM0IGNvbG9yID0gdmVjNChcbiIKKyAgICAgICAgIiAgICAgICAgICAgdGV4dHVyZTJEKHRl
eFksIHRleHR1cmVDb29yZC5zdCkucixcbiIKKyAgICAgICAgIiAgICAgICAgICAgdGV4dHVyZTJE
KHRleFUsIHRleHR1cmVDb29yZC5zdCkucixcbiIKKyAgICAgICAgIiAgICAgICAgICAgdGV4dHVy
ZTJEKHRleFYsIHRleHR1cmVDb29yZC5zdCkucixcbiIKKyAgICAgICAgIiAgICAgICAgICAgMS4w
KTtcbiIKKyAgICAgICAgIiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvck1hdHJpeCAqIGNvbG9yO1xu
IgorICAgICAgICAifVxuIjsKKworCitjbGFzcyBRVmlkZW9TdXJmYWNlR2xzbFBhaW50ZXIgOiBw
dWJsaWMgUVZpZGVvU3VyZmFjZUdMUGFpbnRlciB7CitwdWJsaWM6CisgICAgUVZpZGVvU3VyZmFj
ZUdsc2xQYWludGVyKFFHTENvbnRleHQgKmNvbnRleHQpOworCisgICAgUUFic3RyYWN0VmlkZW9T
dXJmYWNlOjpFcnJvciBzdGFydChjb25zdCBRVmlkZW9TdXJmYWNlRm9ybWF0ICZmb3JtYXQpOwor
ICAgIHZvaWQgc3RvcCgpOworCisgICAgUUFic3RyYWN0VmlkZW9TdXJmYWNlOjpFcnJvciBwYWlu
dCgKKyAgICAgICAgICAgIGNvbnN0IFFSZWN0RiAmdGFyZ2V0LCBRUGFpbnRlciAqcGFpbnRlciwg
Y29uc3QgUVJlY3RGICZzb3VyY2UpOworCitwcml2YXRlOgorICAgIFFHTFNoYWRlclByb2dyYW0g
bV9wcm9ncmFtOworICAgIFFTaXplIG1fZnJhbWVTaXplOworfTsKKworUVZpZGVvU3VyZmFjZUds
c2xQYWludGVyOjpRVmlkZW9TdXJmYWNlR2xzbFBhaW50ZXIoUUdMQ29udGV4dCAqY29udGV4dCkK
KyAgICA6IFFWaWRlb1N1cmZhY2VHTFBhaW50ZXIoY29udGV4dCkKKyAgICAsIG1fcHJvZ3JhbShj
b250ZXh0KQoreworICAgIG1faW1hZ2VQaXhlbEZvcm1hdHMKKyAgICAgICAgICAgIDw8IFFWaWRl
b0ZyYW1lOjpGb3JtYXRfUkdCMzIKKyAgICAgICAgICAgIDw8IFFWaWRlb0ZyYW1lOjpGb3JtYXRf
QVJHQjMyCisjaWZuZGVmIFFUX09QRU5HTF9FUworICAgICAgICAgICAgPDwgUVZpZGVvRnJhbWU6
OkZvcm1hdF9SR0IyNAorI2VuZGlmCisgICAgICAgICAgICA8PCBRVmlkZW9GcmFtZTo6Rm9ybWF0
X1JHQjU2NQorICAgICAgICAgICAgPDwgUVZpZGVvRnJhbWU6OkZvcm1hdF9ZVjEyCisgICAgICAg
ICAgICA8PCBRVmlkZW9GcmFtZTo6Rm9ybWF0X1lVVjQyMFA7CisgICAgbV9nbFBpeGVsRm9ybWF0
cworICAgICAgICAgICAgPDwgUVZpZGVvRnJhbWU6OkZvcm1hdF9SR0IzMgorICAgICAgICAgICAg
PDwgUVZpZGVvRnJhbWU6OkZvcm1hdF9BUkdCMzI7Cit9CisKK1FBYnN0cmFjdFZpZGVvU3VyZmFj
ZTo6RXJyb3IgUVZpZGVvU3VyZmFjZUdsc2xQYWludGVyOjpzdGFydChjb25zdCBRVmlkZW9TdXJm
YWNlRm9ybWF0ICZmb3JtYXQpCit7CisgICAgUV9BU1NFUlQoIW1fdGV4dHVyZUNvdW50KTsKKwor
ICAgIFFBYnN0cmFjdFZpZGVvU3VyZmFjZTo6RXJyb3IgZXJyb3IgPSBRQWJzdHJhY3RWaWRlb1N1
cmZhY2U6Ok5vRXJyb3I7CisKKyAgICBtX2NvbnRleHQtPm1ha2VDdXJyZW50KCk7CisKKyAgICBj
b25zdCBjaGFyICpmcmFnbWVudFByb2dyYW0gPSAwOworCisgICAgaWYgKGZvcm1hdC5oYW5kbGVU
eXBlKCkgPT0gUUFic3RyYWN0VmlkZW9CdWZmZXI6Ok5vSGFuZGxlKSB7CisgICAgICAgIHN3aXRj
aCAoZm9ybWF0LnBpeGVsRm9ybWF0KCkpIHsKKyAgICAgICAgY2FzZSBRVmlkZW9GcmFtZTo6Rm9y
bWF0X1JHQjMyOgorICAgICAgICAgICAgaW5pdFJnYlRleHR1cmVJbmZvKEdMX1JHQkEsIEdMX1JH
QkEsIEdMX1VOU0lHTkVEX0JZVEUsIGZvcm1hdC5mcmFtZVNpemUoKSk7CisgICAgICAgICAgICBm
cmFnbWVudFByb2dyYW0gPSBxdF9nbHNsX3hyZ2JTaGFkZXJQcm9ncmFtOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgUVZpZGVvRnJhbWU6OkZvcm1hdF9BUkdCMzI6CisgICAgICAg
ICAgICBpbml0UmdiVGV4dHVyZUluZm8oR0xfUkdCQSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllU
RSwgZm9ybWF0LmZyYW1lU2l6ZSgpKTsKKyAgICAgICAgICAgIGZyYWdtZW50UHJvZ3JhbSA9IHF0
X2dsc2xfYXJnYlNoYWRlclByb2dyYW07CisgICAgICAgICAgICBicmVhazsKKyNpZm5kZWYgUVRf
T1BFTkdMX0VTCisgICAgICAgIGNhc2UgUVZpZGVvRnJhbWU6OkZvcm1hdF9SR0IyNDoKKyAgICAg
ICAgICAgIGluaXRSZ2JUZXh0dXJlSW5mbyhHTF9SR0I4LCBHTF9SR0IsIEdMX1VOU0lHTkVEX0JZ
VEUsIGZvcm1hdC5mcmFtZVNpemUoKSk7CisgICAgICAgICAgICBmcmFnbWVudFByb2dyYW0gPSBx
dF9nbHNsX3JnYlNoYWRlclByb2dyYW07CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorICAg
ICAgICBjYXNlIFFWaWRlb0ZyYW1lOjpGb3JtYXRfUkdCNTY1OgorICAgICAgICAgICAgaW5pdFJn
YlRleHR1cmVJbmZvKEdMX1JHQiwgR0xfUkdCLCBHTF9VTlNJR05FRF9TSE9SVF81XzZfNSwgZm9y
bWF0LmZyYW1lU2l6ZSgpKTsKKyAgICAgICAgICAgIGZyYWdtZW50UHJvZ3JhbSA9IHF0X2dsc2xf
cmdiU2hhZGVyUHJvZ3JhbTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFFWaWRl
b0ZyYW1lOjpGb3JtYXRfWVYxMjoKKyAgICAgICAgICAgIGluaXRZdjEyVGV4dHVyZUluZm8oZm9y
bWF0LmZyYW1lU2l6ZSgpKTsKKyAgICAgICAgICAgIGZyYWdtZW50UHJvZ3JhbSA9IHF0X2dsc2xf
eXV2UGxhbmFyU2hhZGVyUHJvZ3JhbTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFFWaWRlb0ZyYW1lOjpGb3JtYXRfWVVWNDIwUDoKKyAgICAgICAgICAgIGluaXRZdXY0MjBQVGV4
dHVyZUluZm8oZm9ybWF0LmZyYW1lU2l6ZSgpKTsKKyAgICAgICAgICAgIGZyYWdtZW50UHJvZ3Jh
bSA9IHF0X2dsc2xfeXV2UGxhbmFyU2hhZGVyUHJvZ3JhbTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgaWYgKGZvcm1hdC5oYW5kbGVUeXBlKCkgPT0gUUFic3RyYWN0VmlkZW9CdWZmZXI6OkdMVGV4
dHVyZUhhbmRsZSkgeworICAgICAgICBzd2l0Y2ggKGZvcm1hdC5waXhlbEZvcm1hdCgpKSB7Cisg
ICAgICAgIGNhc2UgUVZpZGVvRnJhbWU6OkZvcm1hdF9SR0IzMjoKKyAgICAgICAgY2FzZSBRVmlk
ZW9GcmFtZTo6Rm9ybWF0X0FSR0IzMjoKKyAgICAgICAgICAgIG1feXV2ID0gZmFsc2U7CisgICAg
ICAgICAgICBtX3RleHR1cmVDb3VudCA9IDE7CisgICAgICAgICAgICBmcmFnbWVudFByb2dyYW0g
PSBxdF9nbHNsX3JnYlNoYWRlclByb2dyYW07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KCFmcmFnbWVudFByb2dyYW0pIHsKKyAgICAgICAgZXJyb3IgPSBRQWJzdHJhY3RWaWRlb1N1cmZh
Y2U6OlVuc3VwcG9ydGVkRm9ybWF0RXJyb3I7CisgICAgfSBlbHNlIGlmICghbV9wcm9ncmFtLmFk
ZFNoYWRlckZyb21Tb3VyY2VDb2RlKFFHTFNoYWRlcjo6VmVydGV4LCBxdF9nbHNsX3ZlcnRleFNo
YWRlclByb2dyYW0pKSB7CisgICAgICAgIHFXYXJuaW5nKCJRUGFpbnRlclZpZGVvU3VyZmFjZTog
VmVydGV4IHNoYWRlciBjb21waWxlIGVycm9yICVzIiwKKyAgICAgICAgICAgICAgICAgcVByaW50
YWJsZShtX3Byb2dyYW0ubG9nKCkpKTsKKyAgICAgICAgZXJyb3IgPSBRQWJzdHJhY3RWaWRlb1N1
cmZhY2U6OlJlc291cmNlRXJyb3I7CisgICAgfSBlbHNlIGlmICghbV9wcm9ncmFtLmFkZFNoYWRl
ckZyb21Tb3VyY2VDb2RlKFFHTFNoYWRlcjo6RnJhZ21lbnQsIGZyYWdtZW50UHJvZ3JhbSkpIHsK
KyAgICAgICAgcVdhcm5pbmcoIlFQYWludGVyVmlkZW9TdXJmYWNlOiBTaGFkZXIgY29tcGlsZSBl
cnJvciAlcyIsIHFQcmludGFibGUobV9wcm9ncmFtLmxvZygpKSk7CisgICAgICAgIGVycm9yID0g
UUFic3RyYWN0VmlkZW9TdXJmYWNlOjpSZXNvdXJjZUVycm9yOworICAgICAgICBtX3Byb2dyYW0u
cmVtb3ZlQWxsU2hhZGVycygpOworICAgIH0gZWxzZSBpZiAoIW1fcHJvZ3JhbS5saW5rKCkpIHsK
KyAgICAgICAgcVdhcm5pbmcoIlFQYWludGVyVmlkZW9TdXJmYWNlOiBTaGFkZXIgbGluayBlcnJv
ciAlcyIsIHFQcmludGFibGUobV9wcm9ncmFtLmxvZygpKSk7CisgICAgICAgIG1fcHJvZ3JhbS5y
ZW1vdmVBbGxTaGFkZXJzKCk7CisgICAgICAgIGVycm9yID0gUUFic3RyYWN0VmlkZW9TdXJmYWNl
OjpSZXNvdXJjZUVycm9yOworICAgIH0gZWxzZSB7CisgICAgICAgIG1faGFuZGxlVHlwZSA9IGZv
cm1hdC5oYW5kbGVUeXBlKCk7CisgICAgICAgIG1fc2NhbkxpbmVEaXJlY3Rpb24gPSBmb3JtYXQu
c2NhbkxpbmVEaXJlY3Rpb24oKTsKKyAgICAgICAgbV9mcmFtZVNpemUgPSBmb3JtYXQuZnJhbWVT
aXplKCk7CisKKyAgICAgICAgaWYgKG1faGFuZGxlVHlwZSA9PSBRQWJzdHJhY3RWaWRlb0J1ZmZl
cjo6Tm9IYW5kbGUpCisgICAgICAgICAgICBnbEdlblRleHR1cmVzKG1fdGV4dHVyZUNvdW50LCBt
X3RleHR1cmVJZHMpOworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBRVmlk
ZW9TdXJmYWNlR2xzbFBhaW50ZXI6OnN0b3AoKQoreworICAgIG1fY29udGV4dC0+bWFrZUN1cnJl
bnQoKTsKKworICAgIGlmIChtX2hhbmRsZVR5cGUgIT0gUUFic3RyYWN0VmlkZW9CdWZmZXI6OkdM
VGV4dHVyZUhhbmRsZSkKKyAgICAgICAgZ2xEZWxldGVUZXh0dXJlcyhtX3RleHR1cmVDb3VudCwg
bV90ZXh0dXJlSWRzKTsKKyAgICBtX3Byb2dyYW0ucmVtb3ZlQWxsU2hhZGVycygpOworCisgICAg
bV90ZXh0dXJlQ291bnQgPSAwOworICAgIG1faGFuZGxlVHlwZSA9IFFBYnN0cmFjdFZpZGVvQnVm
ZmVyOjpOb0hhbmRsZTsKK30KKworUUFic3RyYWN0VmlkZW9TdXJmYWNlOjpFcnJvciBRVmlkZW9T
dXJmYWNlR2xzbFBhaW50ZXI6OnBhaW50KAorICAgICAgICBjb25zdCBRUmVjdEYgJnRhcmdldCwg
UVBhaW50ZXIgKnBhaW50ZXIsIGNvbnN0IFFSZWN0RiAmc291cmNlKQoreworICAgIGlmIChtX2Zy
YW1lLmlzVmFsaWQoKSkgeworICAgICAgICBwYWludGVyLT5iZWdpbk5hdGl2ZVBhaW50aW5nKCk7
CisKKyAgICAgICAgY29uc3QgaW50IHdpZHRoID0gUUdMQ29udGV4dDo6Y3VycmVudENvbnRleHQo
KS0+ZGV2aWNlKCktPndpZHRoKCk7CisgICAgICAgIGNvbnN0IGludCBoZWlnaHQgPSBRR0xDb250
ZXh0OjpjdXJyZW50Q29udGV4dCgpLT5kZXZpY2UoKS0+aGVpZ2h0KCk7CisKKyAgICAgICAgY29u
c3QgUVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBwYWludGVyLT5kZXZpY2VUcmFuc2Zvcm0oKTsKKwor
ICAgICAgICBjb25zdCBHTGZsb2F0IHdmYWN0b3IgPSAyLjAgLyB3aWR0aDsKKyAgICAgICAgY29u
c3QgR0xmbG9hdCBoZmFjdG9yID0gLTIuMCAvIGhlaWdodDsKKworICAgICAgICBjb25zdCBHTGZs
b2F0IHBvc2l0aW9uTWF0cml4WzRdWzRdID0KKyAgICAgICAgeworICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIC8qKDAsMCkqLyB3ZmFjdG9yICogdHJhbnNmb3JtLm0xMSgpIC0gdHJhbnNm
b3JtLm0xMygpLAorICAgICAgICAgICAgICAgIC8qKDAsMSkqLyBoZmFjdG9yICogdHJhbnNmb3Jt
Lm0xMigpICsgdHJhbnNmb3JtLm0xMygpLAorICAgICAgICAgICAgICAgIC8qKDAsMikqLyAwLjAs
CisgICAgICAgICAgICAgICAgLyooMCwzKSovIHRyYW5zZm9ybS5tMTMoKQorICAgICAgICAgICAg
fSwgeworICAgICAgICAgICAgICAgIC8qKDEsMCkqLyB3ZmFjdG9yICogdHJhbnNmb3JtLm0yMSgp
IC0gdHJhbnNmb3JtLm0yMygpLAorICAgICAgICAgICAgICAgIC8qKDEsMSkqLyBoZmFjdG9yICog
dHJhbnNmb3JtLm0yMigpICsgdHJhbnNmb3JtLm0yMygpLAorICAgICAgICAgICAgICAgIC8qKDEs
MikqLyAwLjAsCisgICAgICAgICAgICAgICAgLyooMSwzKSovIHRyYW5zZm9ybS5tMjMoKQorICAg
ICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIC8qKDIsMCkqLyAwLjAsCisgICAgICAgICAg
ICAgICAgLyooMiwxKSovIDAuMCwKKyAgICAgICAgICAgICAgICAvKigyLDIpKi8gLTEuMCwKKyAg
ICAgICAgICAgICAgICAvKigyLDMpKi8gMC4wCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAg
ICAgICAgLyooMywwKSovIHdmYWN0b3IgKiB0cmFuc2Zvcm0uZHgoKSAtIHRyYW5zZm9ybS5tMzMo
KSwKKyAgICAgICAgICAgICAgICAvKigzLDEpKi8gaGZhY3RvciAqIHRyYW5zZm9ybS5keSgpICsg
dHJhbnNmb3JtLm0zMygpLAorICAgICAgICAgICAgICAgIC8qKDMsMikqLyAwLjAsCisgICAgICAg
ICAgICAgICAgLyooMywzKSovIHRyYW5zZm9ybS5tMzMoKQorICAgICAgICAgICAgfQorICAgICAg
ICB9OworCisgICAgICAgIGNvbnN0IEdMZmxvYXQgdlRvcCA9IG1fc2NhbkxpbmVEaXJlY3Rpb24g
PT0gUVZpZGVvU3VyZmFjZUZvcm1hdDo6VG9wVG9Cb3R0b20KKyAgICAgICAgICAgICAgICA/IHRh
cmdldC50b3AoKQorICAgICAgICAgICAgICAgIDogdGFyZ2V0LmJvdHRvbSgpICsgMTsKKyAgICAg
ICAgY29uc3QgR0xmbG9hdCB2Qm90dG9tID0gbV9zY2FuTGluZURpcmVjdGlvbiA9PSBRVmlkZW9T
dXJmYWNlRm9ybWF0OjpUb3BUb0JvdHRvbQorICAgICAgICAgICAgICAgID8gdGFyZ2V0LmJvdHRv
bSgpICsgMQorICAgICAgICAgICAgICAgIDogdGFyZ2V0LnRvcCgpOworCisKKyAgICAgICAgY29u
c3QgR0xmbG9hdCB2ZXJ0ZXhDb29yZEFycmF5W10gPQorICAgICAgICB7CisgICAgICAgICAgICB0
YXJnZXQubGVmdCgpICAgICAsIHZCb3R0b20sCisgICAgICAgICAgICB0YXJnZXQucmlnaHQoKSAr
IDEsIHZCb3R0b20sCisgICAgICAgICAgICB0YXJnZXQubGVmdCgpICAgICAsIHZUb3AsCisgICAg
ICAgICAgICB0YXJnZXQucmlnaHQoKSArIDEsIHZUb3AKKyAgICAgICAgfTsKKworICAgICAgICBj
b25zdCBHTGZsb2F0IHR4TGVmdCA9IHNvdXJjZS5sZWZ0KCkgLyBtX2ZyYW1lU2l6ZS53aWR0aCgp
OworICAgICAgICBjb25zdCBHTGZsb2F0IHR4UmlnaHQgPSBzb3VyY2UucmlnaHQoKSAvIG1fZnJh
bWVTaXplLndpZHRoKCk7CisgICAgICAgIGNvbnN0IEdMZmxvYXQgdHhUb3AgPSBtX3NjYW5MaW5l
RGlyZWN0aW9uID09IFFWaWRlb1N1cmZhY2VGb3JtYXQ6OlRvcFRvQm90dG9tCisgICAgICAgICAg
ICAgICAgPyBzb3VyY2UudG9wKCkgLyBtX2ZyYW1lU2l6ZS5oZWlnaHQoKQorICAgICAgICAgICAg
ICAgIDogc291cmNlLmJvdHRvbSgpIC8gbV9mcmFtZVNpemUuaGVpZ2h0KCk7CisgICAgICAgIGNv
bnN0IEdMZmxvYXQgdHhCb3R0b20gPSBtX3NjYW5MaW5lRGlyZWN0aW9uID09IFFWaWRlb1N1cmZh
Y2VGb3JtYXQ6OlRvcFRvQm90dG9tCisgICAgICAgICAgICAgICAgPyBzb3VyY2UuYm90dG9tKCkg
LyBtX2ZyYW1lU2l6ZS5oZWlnaHQoKQorICAgICAgICAgICAgICAgIDogc291cmNlLnRvcCgpIC8g
bV9mcmFtZVNpemUuaGVpZ2h0KCk7CisKKyAgICAgICAgY29uc3QgR0xmbG9hdCB0ZXh0dXJlQ29v
cmRBcnJheVtdID0KKyAgICAgICAgeworICAgICAgICAgICAgdHhMZWZ0ICwgdHhCb3R0b20sCisg
ICAgICAgICAgICB0eFJpZ2h0LCB0eEJvdHRvbSwKKyAgICAgICAgICAgIHR4TGVmdCAsIHR4VG9w
LAorICAgICAgICAgICAgdHhSaWdodCwgdHhUb3AKKyAgICAgICAgfTsKKworICAgICAgICBtX3By
b2dyYW0uYmluZCgpOworCisgICAgICAgIG1fcHJvZ3JhbS5lbmFibGVBdHRyaWJ1dGVBcnJheSgi
dmVydGV4Q29vcmRBcnJheSIpOworICAgICAgICBtX3Byb2dyYW0uZW5hYmxlQXR0cmlidXRlQXJy
YXkoInRleHR1cmVDb29yZEFycmF5Iik7CisgICAgICAgIG1fcHJvZ3JhbS5zZXRBdHRyaWJ1dGVB
cnJheSgidmVydGV4Q29vcmRBcnJheSIsIHZlcnRleENvb3JkQXJyYXksIDIpOworICAgICAgICBt
X3Byb2dyYW0uc2V0QXR0cmlidXRlQXJyYXkoInRleHR1cmVDb29yZEFycmF5IiwgdGV4dHVyZUNv
b3JkQXJyYXksIDIpOworICAgICAgICBtX3Byb2dyYW0uc2V0VW5pZm9ybVZhbHVlKCJwb3NpdGlv
bk1hdHJpeCIsIHBvc2l0aW9uTWF0cml4KTsKKworICAgICAgICBpZiAobV90ZXh0dXJlQ291bnQg
PT0gMykgeworICAgICAgICAgICAgZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsKKyAgICAg
ICAgICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlSWRzWzBdKTsKKyAg
ICAgICAgICAgIGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMSk7CisgICAgICAgICAgICBnbEJp
bmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZUlkc1sxXSk7CisgICAgICAgICAgICBn
bEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTIpOworICAgICAgICAgICAgZ2xCaW5kVGV4dHVyZShH
TF9URVhUVVJFXzJELCBtX3RleHR1cmVJZHNbMl0pOworICAgICAgICAgICAgZ2xBY3RpdmVUZXh0
dXJlKEdMX1RFWFRVUkUwKTsKKworICAgICAgICAgICAgbV9wcm9ncmFtLnNldFVuaWZvcm1WYWx1
ZSgidGV4WSIsIDApOworICAgICAgICAgICAgbV9wcm9ncmFtLnNldFVuaWZvcm1WYWx1ZSgidGV4
VSIsIDEpOworICAgICAgICAgICAgbV9wcm9ncmFtLnNldFVuaWZvcm1WYWx1ZSgidGV4ViIsIDIp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRV
UkUwKTsKKyAgICAgICAgICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJl
SWRzWzBdKTsKKworICAgICAgICAgICAgbV9wcm9ncmFtLnNldFVuaWZvcm1WYWx1ZSgidGV4Umdi
IiwgMCk7CisgICAgICAgIH0KKyAgICAgICAgbV9wcm9ncmFtLnNldFVuaWZvcm1WYWx1ZSgiY29s
b3JNYXRyaXgiLCBtX2NvbG9yTWF0cml4KTsKKworICAgICAgICBnbERyYXdBcnJheXMoR0xfVFJJ
QU5HTEVfU1RSSVAsIDAsIDQpOworCisgICAgICAgIG1fcHJvZ3JhbS5yZWxlYXNlKCk7CisKKyAg
ICAgICAgcGFpbnRlci0+ZW5kTmF0aXZlUGFpbnRpbmcoKTsKKyAgICB9CisgICAgcmV0dXJuIFFB
YnN0cmFjdFZpZGVvU3VyZmFjZTo6Tm9FcnJvcjsKK30KKworI2VuZGlmCisKK1FQYWludGVyVmlk
ZW9TdXJmYWNlOjpRUGFpbnRlclZpZGVvU3VyZmFjZShRT2JqZWN0ICpwYXJlbnQpCisgICAgOiBR
QWJzdHJhY3RWaWRlb1N1cmZhY2UocGFyZW50KQorICAgICwgbV9wYWludGVyKDApCisjaWYgIWRl
ZmluZWQoUVRfTk9fT1BFTkdMKSAmJiAhZGVmaW5lZChRVF9PUEVOR0xfRVNfMV9DTCkgJiYgIWRl
ZmluZWQoUVRfT1BFTkdMX0VTXzEpCisgICAgLCBtX2dsQ29udGV4dCgwKQorICAgICwgbV9zaGFk
ZXJUeXBlcyhOb1NoYWRlcnMpCisgICAgLCBtX3NoYWRlclR5cGUoTm9TaGFkZXJzKQorI2VuZGlm
CisgICAgLCBtX2JyaWdodG5lc3MoMCkKKyAgICAsIG1fY29udHJhc3QoMCkKKyAgICAsIG1faHVl
KDApCisgICAgLCBtX3NhdHVyYXRpb24oMCkKKyAgICAsIG1fcGl4ZWxGb3JtYXQoUVZpZGVvRnJh
bWU6OkZvcm1hdF9JbnZhbGlkKQorICAgICwgbV9jb2xvcnNEaXJ0eSh0cnVlKQorICAgICwgbV9y
ZWFkeShmYWxzZSkKK3sKK30KKworUVBhaW50ZXJWaWRlb1N1cmZhY2U6On5RUGFpbnRlclZpZGVv
U3VyZmFjZSgpCit7CisgICAgaWYgKGlzQWN0aXZlKCkpCisgICAgICAgIG1fcGFpbnRlci0+c3Rv
cCgpOworCisgICAgZGVsZXRlIG1fcGFpbnRlcjsKK30KKworUUxpc3Q8UVZpZGVvRnJhbWU6OlBp
eGVsRm9ybWF0PiBRUGFpbnRlclZpZGVvU3VyZmFjZTo6c3VwcG9ydGVkUGl4ZWxGb3JtYXRzKAor
ICAgICAgICBRQWJzdHJhY3RWaWRlb0J1ZmZlcjo6SGFuZGxlVHlwZSBoYW5kbGVUeXBlKSBjb25z
dAoreworICAgIGlmICghbV9wYWludGVyKQorICAgICAgICBjb25zdF9jYXN0PFFQYWludGVyVmlk
ZW9TdXJmYWNlICo+KHRoaXMpLT5jcmVhdGVQYWludGVyKCk7CisKKyAgICByZXR1cm4gbV9wYWlu
dGVyLT5zdXBwb3J0ZWRQaXhlbEZvcm1hdHMoaGFuZGxlVHlwZSk7Cit9CisKK2Jvb2wgUVBhaW50
ZXJWaWRlb1N1cmZhY2U6OmlzRm9ybWF0U3VwcG9ydGVkKAorICAgICAgICBjb25zdCBRVmlkZW9T
dXJmYWNlRm9ybWF0ICZmb3JtYXQsIFFWaWRlb1N1cmZhY2VGb3JtYXQgKnNpbWlsYXIpIGNvbnN0
Cit7CisgICAgaWYgKCFtX3BhaW50ZXIpCisgICAgICAgIGNvbnN0X2Nhc3Q8UVBhaW50ZXJWaWRl
b1N1cmZhY2UgKj4odGhpcyktPmNyZWF0ZVBhaW50ZXIoKTsKKworICAgIHJldHVybiBtX3BhaW50
ZXItPmlzRm9ybWF0U3VwcG9ydGVkKGZvcm1hdCwgc2ltaWxhcik7Cit9CisKK2Jvb2wgUVBhaW50
ZXJWaWRlb1N1cmZhY2U6OnN0YXJ0KGNvbnN0IFFWaWRlb1N1cmZhY2VGb3JtYXQgJmZvcm1hdCkK
K3sKKyAgICBpZiAoaXNBY3RpdmUoKSkKKyAgICAgICAgbV9wYWludGVyLT5zdG9wKCk7CisKKyAg
ICBpZiAoIW1fcGFpbnRlcikKKyAgICAgICAgY3JlYXRlUGFpbnRlcigpOworCisgICAgaWYgKGZv
cm1hdC5mcmFtZVNpemUoKS5pc0VtcHR5KCkpCisgICAgICAgIHNldEVycm9yKFVuc3VwcG9ydGVk
Rm9ybWF0RXJyb3IpOworICAgIGVsc2UgeworICAgICAgICBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6
OkVycm9yIGVycm9yID0gbV9wYWludGVyLT5zdGFydChmb3JtYXQpOworCisgICAgICAgIGlmIChl
cnJvciAhPSBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6Ok5vRXJyb3IpCisgICAgICAgICAgICBzZXRF
cnJvcihlcnJvcik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbV9waXhlbEZvcm1hdCA9
IGZvcm1hdC5waXhlbEZvcm1hdCgpOworICAgICAgICAgICAgbV9mcmFtZVNpemUgPSBmb3JtYXQu
ZnJhbWVTaXplKCk7CisgICAgICAgICAgICBtX3NvdXJjZVJlY3QgPSBmb3JtYXQudmlld3BvcnQo
KTsKKyAgICAgICAgICAgIG1fY29sb3JzRGlydHkgPSB0cnVlOworICAgICAgICAgICAgbV9yZWFk
eSA9IHRydWU7CisKKyAgICAgICAgICAgIHJldHVybiBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6OnN0
YXJ0KGZvcm1hdCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBRQWJzdHJhY3RWaWRlb1N1cmZh
Y2U6OnN0b3AoKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBRUGFpbnRlclZpZGVv
U3VyZmFjZTo6c3RvcCgpCit7CisgICAgaWYgKGlzQWN0aXZlKCkpIHsKKyAgICAgICAgbV9wYWlu
dGVyLT5zdG9wKCk7CisgICAgICAgIG1fcmVhZHkgPSBmYWxzZTsKKworICAgICAgICBRQWJzdHJh
Y3RWaWRlb1N1cmZhY2U6OnN0b3AoKTsKKyAgICB9Cit9CisKK2Jvb2wgUVBhaW50ZXJWaWRlb1N1
cmZhY2U6OnByZXNlbnQoY29uc3QgUVZpZGVvRnJhbWUgJmZyYW1lKQoreworICAgIGlmICghbV9y
ZWFkeSkgeworICAgICAgICBpZiAoIWlzQWN0aXZlKCkpCisgICAgICAgICAgICBzZXRFcnJvcihT
dG9wcGVkRXJyb3IpOworICAgIH0gZWxzZSBpZiAoZnJhbWUuaXNWYWxpZCgpIAorICAgICAgICAg
ICAgJiYgKGZyYW1lLnBpeGVsRm9ybWF0KCkgIT0gbV9waXhlbEZvcm1hdCB8fCBmcmFtZS5zaXpl
KCkgIT0gbV9mcmFtZVNpemUpKSB7CisgICAgICAgIHNldEVycm9yKEluY29ycmVjdEZvcm1hdEVy
cm9yKTsKKworICAgICAgICBzdG9wKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUUFic3RyYWN0
VmlkZW9TdXJmYWNlOjpFcnJvciBlcnJvciA9IG1fcGFpbnRlci0+c2V0Q3VycmVudEZyYW1lKGZy
YW1lKTsKKworICAgICAgICBpZiAoZXJyb3IgIT0gUUFic3RyYWN0VmlkZW9TdXJmYWNlOjpOb0Vy
cm9yKSB7CisgICAgICAgICAgICBzZXRFcnJvcihlcnJvcik7CisKKyAgICAgICAgICAgIHN0b3Ao
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fcmVhZHkgPSBmYWxzZTsKKworICAg
ICAgICAgICAgZW1pdCBmcmFtZUNoYW5nZWQoKTsKKworICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbnQgUVBhaW50ZXJW
aWRlb1N1cmZhY2U6OmJyaWdodG5lc3MoKSBjb25zdAoreworICAgIHJldHVybiBtX2JyaWdodG5l
c3M7Cit9CisKK3ZvaWQgUVBhaW50ZXJWaWRlb1N1cmZhY2U6OnNldEJyaWdodG5lc3MoaW50IGJy
aWdodG5lc3MpCit7CisgICAgbV9icmlnaHRuZXNzID0gYnJpZ2h0bmVzczsKKworICAgIG1fY29s
b3JzRGlydHkgPSB0cnVlOworfQorCitpbnQgUVBhaW50ZXJWaWRlb1N1cmZhY2U6OmNvbnRyYXN0
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb250cmFzdDsKK30KKwordm9pZCBRUGFpbnRlclZp
ZGVvU3VyZmFjZTo6c2V0Q29udHJhc3QoaW50IGNvbnRyYXN0KQoreworICAgIG1fY29udHJhc3Qg
PSBjb250cmFzdDsKKworICAgIG1fY29sb3JzRGlydHkgPSB0cnVlOworfQorCitpbnQgUVBhaW50
ZXJWaWRlb1N1cmZhY2U6Omh1ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faHVlOworfQorCit2
b2lkIFFQYWludGVyVmlkZW9TdXJmYWNlOjpzZXRIdWUoaW50IGh1ZSkKK3sKKyAgICBtX2h1ZSA9
IGh1ZTsKKworICAgIG1fY29sb3JzRGlydHkgPSB0cnVlOworfQorCitpbnQgUVBhaW50ZXJWaWRl
b1N1cmZhY2U6OnNhdHVyYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX3NhdHVyYXRpb247
Cit9CisKK3ZvaWQgUVBhaW50ZXJWaWRlb1N1cmZhY2U6OnNldFNhdHVyYXRpb24oaW50IHNhdHVy
YXRpb24pCit7CisgICAgbV9zYXR1cmF0aW9uID0gc2F0dXJhdGlvbjsKKworICAgIG1fY29sb3Jz
RGlydHkgPSB0cnVlOworfQorCitib29sIFFQYWludGVyVmlkZW9TdXJmYWNlOjppc1JlYWR5KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9yZWFkeTsKK30KKwordm9pZCBRUGFpbnRlclZpZGVvU3Vy
ZmFjZTo6c2V0UmVhZHkoYm9vbCByZWFkeSkKK3sKKyAgICBtX3JlYWR5ID0gcmVhZHk7Cit9CisK
K3ZvaWQgUVBhaW50ZXJWaWRlb1N1cmZhY2U6OnBhaW50KFFQYWludGVyICpwYWludGVyLCBjb25z
dCBRUmVjdEYgJnRhcmdldCwgY29uc3QgUVJlY3RGICZzb3VyY2UpCit7CisgICAgaWYgKCFpc0Fj
dGl2ZSgpKQorICAgICAgICBwYWludGVyLT5maWxsUmVjdCh0YXJnZXQsIFFCcnVzaChRdDo6Ymxh
Y2spKTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKG1fY29sb3JzRGlydHkpIHsKKyAgICAgICAg
ICAgIG1fcGFpbnRlci0+dXBkYXRlQ29sb3JzKG1fYnJpZ2h0bmVzcywgbV9jb250cmFzdCwgbV9o
dWUsIG1fc2F0dXJhdGlvbik7CisgICAgICAgICAgICBtX2NvbG9yc0RpcnR5ID0gZmFsc2U7Cisg
ICAgICAgIH0KKworICAgICAgICBjb25zdCBRUmVjdEYgc291cmNlUmVjdCgKKyAgICAgICAgICAg
ICAgICBtX3NvdXJjZVJlY3QueCgpICsgbV9zb3VyY2VSZWN0LndpZHRoKCkgKiBzb3VyY2UueCgp
LAorICAgICAgICAgICAgICAgIG1fc291cmNlUmVjdC55KCkgKyBtX3NvdXJjZVJlY3QuaGVpZ2h0
KCkgKiBzb3VyY2UueSgpLAorICAgICAgICAgICAgICAgIG1fc291cmNlUmVjdC53aWR0aCgpICog
c291cmNlLndpZHRoKCksCisgICAgICAgICAgICAgICAgbV9zb3VyY2VSZWN0LmhlaWdodCgpICog
c291cmNlLmhlaWdodCgpKTsKKworICAgICAgICBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6OkVycm9y
IGVycm9yID0gbV9wYWludGVyLT5wYWludCh0YXJnZXQsIHBhaW50ZXIsIHNvdXJjZVJlY3QpOwor
CisgICAgICAgIGlmIChlcnJvciAhPSBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6Ok5vRXJyb3IpIHsK
KyAgICAgICAgICAgIHNldEVycm9yKGVycm9yKTsKKworICAgICAgICAgICAgc3RvcCgpOworICAg
ICAgICB9CisgICAgfQorfQorCisjaWYgIWRlZmluZWQoUVRfTk9fT1BFTkdMKSAmJiAhZGVmaW5l
ZChRVF9PUEVOR0xfRVNfMV9DTCkgJiYgIWRlZmluZWQoUVRfT1BFTkdMX0VTXzEpCisKK2NvbnN0
IFFHTENvbnRleHQgKlFQYWludGVyVmlkZW9TdXJmYWNlOjpnbENvbnRleHQoKSBjb25zdAorewor
ICAgIHJldHVybiBtX2dsQ29udGV4dDsKK30KKwordm9pZCBRUGFpbnRlclZpZGVvU3VyZmFjZTo6
c2V0R0xDb250ZXh0KFFHTENvbnRleHQgKmNvbnRleHQpCit7CisgICAgaWYgKG1fZ2xDb250ZXh0
ID09IGNvbnRleHQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZ2xDb250ZXh0ID0gY29udGV4
dDsKKworICAgIG1fc2hhZGVyVHlwZXMgPSBOb1NoYWRlcnM7CisKKyAgICBpZiAobV9nbENvbnRl
eHQpIHsKKyAgICAgICAgbV9nbENvbnRleHQtPm1ha2VDdXJyZW50KCk7CisKKyAgICAgICAgY29u
c3QgUUJ5dGVBcnJheSBleHRlbnNpb25zKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhciAqPihn
bEdldFN0cmluZyhHTF9FWFRFTlNJT05TKSkpOworI2lmbmRlZiBRVF9PUEVOR0xfRVMKKworICAg
ICAgICBpZiAoZXh0ZW5zaW9ucy5jb250YWlucygiQVJCX2ZyYWdtZW50X3Byb2dyYW0iKSkKKyAg
ICAgICAgICAgIG1fc2hhZGVyVHlwZXMgfD0gRnJhZ21lbnRQcm9ncmFtU2hhZGVyOworI2VuZGlm
CisKKyAgICAgICAgaWYgKFFHTFNoYWRlclByb2dyYW06Omhhc09wZW5HTFNoYWRlclByb2dyYW1z
KG1fZ2xDb250ZXh0KQorICAgICAgICAgICAgICAgICYmIGV4dGVuc2lvbnMuY29udGFpbnMoIkFS
Ql9zaGFkZXJfb2JqZWN0cyIpKQorICAgICAgICAgICAgbV9zaGFkZXJUeXBlcyB8PSBHbHNsU2hh
ZGVyOworICAgIH0KKworICAgIFNoYWRlclR5cGUgdHlwZSA9IChtX3NoYWRlclR5cGUgJiBtX3No
YWRlclR5cGVzKQorICAgICAgICAgICAgPyBtX3NoYWRlclR5cGUKKyAgICAgICAgICAgIDogTm9T
aGFkZXJzOworCisgICAgaWYgKHR5cGUgIT0gbV9zaGFkZXJUeXBlIHx8IHR5cGUgIT0gTm9TaGFk
ZXJzKSB7CisgICAgICAgIG1fc2hhZGVyVHlwZSA9IHR5cGU7CisKKyAgICAgICAgaWYgKGlzQWN0
aXZlKCkpIHsKKyAgICAgICAgICAgIG1fcGFpbnRlci0+c3RvcCgpOworICAgICAgICAgICAgZGVs
ZXRlIG1fcGFpbnRlcjsKKyAgICAgICAgICAgIG1fcGFpbnRlciA9IDA7CisgICAgICAgICAgICBt
X3JlYWR5ID0gZmFsc2U7CisKKyAgICAgICAgICAgIHNldEVycm9yKFJlc291cmNlRXJyb3IpOwor
ICAgICAgICAgICAgUUFic3RyYWN0VmlkZW9TdXJmYWNlOjpzdG9wKCk7CisgICAgICAgIH0KKyAg
ICAgICAgZW1pdCBzdXBwb3J0ZWRGb3JtYXRzQ2hhbmdlZCgpOworICAgIH0KK30KKworUVBhaW50
ZXJWaWRlb1N1cmZhY2U6OlNoYWRlclR5cGVzIFFQYWludGVyVmlkZW9TdXJmYWNlOjpzdXBwb3J0
ZWRTaGFkZXJUeXBlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2hhZGVyVHlwZXM7Cit9CisK
K1FQYWludGVyVmlkZW9TdXJmYWNlOjpTaGFkZXJUeXBlIFFQYWludGVyVmlkZW9TdXJmYWNlOjpz
aGFkZXJUeXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zaGFkZXJUeXBlOworfQorCit2b2lk
IFFQYWludGVyVmlkZW9TdXJmYWNlOjpzZXRTaGFkZXJUeXBlKFNoYWRlclR5cGUgdHlwZSkKK3sK
KyAgICBpZiAoISh0eXBlICYgbV9zaGFkZXJUeXBlcykpCisgICAgICAgIHR5cGUgPSBOb1NoYWRl
cnM7CisKKyAgICBpZiAodHlwZSAhPSBtX3NoYWRlclR5cGUpIHsKKyAgICAgICAgbV9zaGFkZXJU
eXBlID0gdHlwZTsKKworICAgICAgICBpZiAoaXNBY3RpdmUoKSkgeworICAgICAgICAgICAgbV9w
YWludGVyLT5zdG9wKCk7CisgICAgICAgICAgICBkZWxldGUgbV9wYWludGVyOworICAgICAgICAg
ICAgbV9wYWludGVyID0gMDsKKyAgICAgICAgICAgIG1fcmVhZHkgPSBmYWxzZTsKKworICAgICAg
ICAgICAgc2V0RXJyb3IoUmVzb3VyY2VFcnJvcik7CisgICAgICAgICAgICBRQWJzdHJhY3RWaWRl
b1N1cmZhY2U6OnN0b3AoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRlbGV0ZSBt
X3BhaW50ZXI7CisgICAgICAgICAgICBtX3BhaW50ZXIgPSAwOworICAgICAgICB9CisgICAgICAg
IGVtaXQgc3VwcG9ydGVkRm9ybWF0c0NoYW5nZWQoKTsKKyAgICB9Cit9CisKKyNlbmRpZgorCit2
b2lkIFFQYWludGVyVmlkZW9TdXJmYWNlOjpjcmVhdGVQYWludGVyKCkKK3sKKyAgICBRX0FTU0VS
VCghbV9wYWludGVyKTsKKworI2lmICFkZWZpbmVkKFFUX05PX09QRU5HTCkgJiYgIWRlZmluZWQo
UVRfT1BFTkdMX0VTXzFfQ0wpICYmICFkZWZpbmVkKFFUX09QRU5HTF9FU18xKQorICAgIHN3aXRj
aCAobV9zaGFkZXJUeXBlKSB7CisjaWZuZGVmIFFUX09QRU5HTF9FUworICAgIGNhc2UgRnJhZ21l
bnRQcm9ncmFtU2hhZGVyOgorICAgICAgICBRX0FTU0VSVChtX2dsQ29udGV4dCk7CisgICAgICAg
IG1fZ2xDb250ZXh0LT5tYWtlQ3VycmVudCgpOworICAgICAgICBtX3BhaW50ZXIgPSBuZXcgUVZp
ZGVvU3VyZmFjZUFyYkZwUGFpbnRlcihtX2dsQ29udGV4dCk7CisgICAgICAgIGJyZWFrOworI2Vu
ZGlmCisgICAgY2FzZSBHbHNsU2hhZGVyOgorICAgICAgICBRX0FTU0VSVChtX2dsQ29udGV4dCk7
CisgICAgICAgIG1fZ2xDb250ZXh0LT5tYWtlQ3VycmVudCgpOworICAgICAgICBtX3BhaW50ZXIg
PSBuZXcgUVZpZGVvU3VyZmFjZUdsc2xQYWludGVyKG1fZ2xDb250ZXh0KTsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgbV9wYWludGVyID0gbmV3IFFWaWRlb1N1cmZhY2VS
YXN0ZXJQYWludGVyOworICAgICAgICBicmVhazsKKyAgICB9CisjZWxzZQorICAgIG1fcGFpbnRl
ciA9IG5ldyBRVmlkZW9TdXJmYWNlUmFzdGVyUGFpbnRlcjsKKyNlbmRpZgorfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNpbmNsdWRlICJtb2NfUVBhaW50ZXJWaWRlb1N1cmZhY2UuY3Bw
IgorCisKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvUVBhaW50ZXJWaWRlb1N1
cmZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1FQYWlu
dGVyVmlkZW9TdXJmYWNlLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L1FQYWludGVyVmlkZW9TdXJmYWNlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTE5
IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIFFQYWludGVyVmlkZW9TdXJmYWNlX2gK
KyNkZWZpbmUgUVBhaW50ZXJWaWRlb1N1cmZhY2VfaAorCisjaW5jbHVkZSA8UXRDb3JlL3FzaXpl
Lmg+CisjaW5jbHVkZSA8UXRHdWkvcWltYWdlLmg+CisjaW5jbHVkZSA8UXRHdWkvcW1hdHJpeDR4
NC5oPgorI2luY2x1ZGUgPFF0R3VpL3FwYWludGVuZ2luZS5oPgorI2luY2x1ZGUgPFF0TXVsdGlt
ZWRpYS9xYWJzdHJhY3R2aWRlb3N1cmZhY2UuaD4KKyNpbmNsdWRlIDxRdE11bHRpbWVkaWEvcXZp
ZGVvZnJhbWUuaD4KKworUVRfQkVHSU5fTkFNRVNQQUNFCitjbGFzcyBRR0xDb250ZXh0OworUVRf
RU5EX05BTUVTUEFDRQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFFWaWRlb1N1cmZh
Y2VQYWludGVyOworY2xhc3MgUV9BVVRPVEVTVF9FWFBPUlQgUVBhaW50ZXJWaWRlb1N1cmZhY2Ug
OiBwdWJsaWMgUUFic3RyYWN0VmlkZW9TdXJmYWNlIHsKKyAgICBRX09CSkVDVAorcHVibGljOgor
ICAgIGV4cGxpY2l0IFFQYWludGVyVmlkZW9TdXJmYWNlKFFPYmplY3QgKnBhcmVudCA9IDApOwor
ICAgIH5RUGFpbnRlclZpZGVvU3VyZmFjZSgpOworCisgICAgUUxpc3Q8UVZpZGVvRnJhbWU6OlBp
eGVsRm9ybWF0PiBzdXBwb3J0ZWRQaXhlbEZvcm1hdHMoCisgICAgICAgICAgICBRQWJzdHJhY3RW
aWRlb0J1ZmZlcjo6SGFuZGxlVHlwZSBoYW5kbGVUeXBlID0gUUFic3RyYWN0VmlkZW9CdWZmZXI6
Ok5vSGFuZGxlKSBjb25zdDsKKworICAgIGJvb2wgaXNGb3JtYXRTdXBwb3J0ZWQoCisgICAgICAg
ICAgICBjb25zdCBRVmlkZW9TdXJmYWNlRm9ybWF0ICZmb3JtYXQsIFFWaWRlb1N1cmZhY2VGb3Jt
YXQgKnNpbWlsYXIgPSAwKSBjb25zdDsKKworICAgIGJvb2wgc3RhcnQoY29uc3QgUVZpZGVvU3Vy
ZmFjZUZvcm1hdCAmZm9ybWF0KTsKKyAgICB2b2lkIHN0b3AoKTsKKworICAgIGJvb2wgcHJlc2Vu
dChjb25zdCBRVmlkZW9GcmFtZSAmZnJhbWUpOworCisgICAgaW50IGJyaWdodG5lc3MoKSBjb25z
dDsKKyAgICB2b2lkIHNldEJyaWdodG5lc3MoaW50IGJyaWdodG5lc3MpOworCisgICAgaW50IGNv
bnRyYXN0KCkgY29uc3Q7CisgICAgdm9pZCBzZXRDb250cmFzdChpbnQgY29udHJhc3QpOworCisg
ICAgaW50IGh1ZSgpIGNvbnN0OworICAgIHZvaWQgc2V0SHVlKGludCBodWUpOworCisgICAgaW50
IHNhdHVyYXRpb24oKSBjb25zdDsKKyAgICB2b2lkIHNldFNhdHVyYXRpb24oaW50IHNhdHVyYXRp
b24pOworCisgICAgYm9vbCBpc1JlYWR5KCkgY29uc3Q7CisgICAgdm9pZCBzZXRSZWFkeShib29s
IHJlYWR5KTsKKworICAgIHZvaWQgcGFpbnQoUVBhaW50ZXIgKnBhaW50ZXIsIGNvbnN0IFFSZWN0
RiAmdGFyZ2V0LCBjb25zdCBRUmVjdEYgJnNvdXJjZSA9IFFSZWN0RigwLCAwLCAxLCAxKSk7CisK
KyNpZiAhZGVmaW5lZChRVF9OT19PUEVOR0wpICYmICFkZWZpbmVkKFFUX09QRU5HTF9FU18xX0NM
KSAmJiAhZGVmaW5lZChRVF9PUEVOR0xfRVNfMSkKKyAgICBjb25zdCBRR0xDb250ZXh0ICpnbENv
bnRleHQoKSBjb25zdDsKKyAgICB2b2lkIHNldEdMQ29udGV4dChRR0xDb250ZXh0ICpjb250ZXh0
KTsKKworICAgIGVudW0gU2hhZGVyVHlwZSB7CisgICAgICAgIE5vU2hhZGVycyA9IDB4MDAsCisg
ICAgICAgIEZyYWdtZW50UHJvZ3JhbVNoYWRlciA9IDB4MDEsCisgICAgICAgIEdsc2xTaGFkZXIg
PSAweDAyCisgICAgfTsKKworICAgIFFfREVDTEFSRV9GTEFHUyhTaGFkZXJUeXBlcywgU2hhZGVy
VHlwZSkKKworICAgIFNoYWRlclR5cGVzIHN1cHBvcnRlZFNoYWRlclR5cGVzKCkgY29uc3Q7CisK
KyAgICBTaGFkZXJUeXBlIHNoYWRlclR5cGUoKSBjb25zdDsKKyAgICB2b2lkIHNldFNoYWRlclR5
cGUoU2hhZGVyVHlwZSB0eXBlKTsKKyNlbmRpZgorCitRX1NJR05BTFM6CisgICAgdm9pZCBmcmFt
ZUNoYW5nZWQoKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGNyZWF0ZVBhaW50ZXIoKTsKKworICAg
IFFWaWRlb1N1cmZhY2VQYWludGVyICptX3BhaW50ZXI7CisjaWYgIWRlZmluZWQoUVRfTk9fT1BF
TkdMKSAmJiAhZGVmaW5lZChRVF9PUEVOR0xfRVNfMV9DTCkgJiYgIWRlZmluZWQoUVRfT1BFTkdM
X0VTXzEpCisgICAgUUdMQ29udGV4dCAqbV9nbENvbnRleHQ7CisgICAgU2hhZGVyVHlwZXMgbV9z
aGFkZXJUeXBlczsKKyAgICBTaGFkZXJUeXBlIG1fc2hhZGVyVHlwZTsKKyNlbmRpZgorICAgIGlu
dCBtX2JyaWdodG5lc3M7CisgICAgaW50IG1fY29udHJhc3Q7CisgICAgaW50IG1faHVlOworICAg
IGludCBtX3NhdHVyYXRpb247CisKKyAgICBRVmlkZW9GcmFtZTo6UGl4ZWxGb3JtYXQgbV9waXhl
bEZvcm1hdDsKKyAgICBRU2l6ZSBtX2ZyYW1lU2l6ZTsKKyAgICBRUmVjdCBtX3NvdXJjZVJlY3Q7
CisgICAgYm9vbCBtX2NvbG9yc0RpcnR5OworICAgIGJvb2wgbV9yZWFkeTsKK307CisKKyNpZiAh
ZGVmaW5lZChRVF9OT19PUEVOR0wpICYmICFkZWZpbmVkKFFUX09QRU5HTF9FU18xX0NMKSAmJiAh
ZGVmaW5lZChRVF9PUEVOR0xfRVNfMSkKK1FfREVDTEFSRV9PUEVSQVRPUlNfRk9SX0ZMQUdTKFFQ
YWludGVyVmlkZW9TdXJmYWNlOjpTaGFkZXJUeXBlcykKKyNlbmRpZgorCit9CisKKyNlbmRpZgpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuY3BwCShyZXZpc2lvbiA1NDQ3NSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udFNlbGVj
dG9yLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSFRNTElucHV0
RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgpAQCAtNDcsNiArNDgsNyBAQAog
I2luY2x1ZGUgIlJlbmRlckJveC5oIgogI2luY2x1ZGUgIlJlbmRlclNsaWRlci5oIgogI2luY2x1
ZGUgIlJlbmRlclRoZW1lLmgiCisjaW5jbHVkZSAiVGltZVJhbmdlcy5oIgogI2luY2x1ZGUgIlNj
cm9sbGJhclRoZW1lUXQuaCIKICNpbmNsdWRlICJVc2VyQWdlbnRTdHlsZVNoZWV0cy5oIgogI2lu
Y2x1ZGUgInF3ZWJwYWdlLmgiCkBAIC05MjEsMTQgKzkyMywxMCBAQCBib29sIFJlbmRlclRoZW1l
UXQ6OnBhaW50TWVkaWFNdXRlQnV0dG9uCiAgICAgY29uc3QgUVBvaW50RiBzcGVha2VyUG9seWdv
bls2XSA9IHsgUVBvaW50RigyMCwgMzApLCBRUG9pbnRGKDUwLCAzMCksIFFQb2ludEYoODAsIDAp
LAogICAgICAgICAgICAgUVBvaW50Rig4MCwgMTAwKSwgUVBvaW50Rig1MCwgNzApLCBRUG9pbnRG
KDIwLCA3MCl9OwogCi0gICAgcC5wYWludGVyLT5zZXRCcnVzaChnZXRNZWRpYUNvbnRyb2xGb3Jl
Z3JvdW5kQ29sb3IobykpOworICAgIHAucGFpbnRlci0+c2V0UGVuKG1lZGlhRWxlbWVudC0+bXV0
ZWQoKSA/IFF0OjpkYXJrR3JheSA6IFF0OjpsaWdodEdyYXkpOworICAgIHAucGFpbnRlci0+c2V0
QnJ1c2gobWVkaWFFbGVtZW50LT5tdXRlZCgpID8gUXQ6OmRhcmtSZWQgOiBnZXRNZWRpYUNvbnRy
b2xGb3JlZ3JvdW5kQ29sb3IobykpOwogICAgIHAucGFpbnRlci0+ZHJhd1BvbHlnb24oc3BlYWtl
clBvbHlnb24sIDYpOwogCi0gICAgaWYgKG1lZGlhRWxlbWVudC0+bXV0ZWQoKSkgewotICAgICAg
ICBwLnBhaW50ZXItPnNldFBlbihRdDo6cmVkKTsKLSAgICAgICAgcC5wYWludGVyLT5kcmF3TGlu
ZSgwLCAxMDAsIDEwMCwgMCk7Ci0gICAgfQotCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC05
NzEsNiArOTY5LDkxIEBAIGJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVNlZWtGb3J3YXIK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYUN1
cnJlbnRUaW1lKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBTdHlsZVBhaW50ZXIgcCh0aGlz
LCBwYWludEluZm8pOworICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgaWYgKG8tPnN0eWxlKCkpIHsKKyAgICAgICAgLy8gU2V0IHRoZSB0ZXh0IGNvbG9y
IGRlcGVuZGluZyBvbiBwbGF0Zm9ybQorICAgICAgICBRUGFsZXR0ZSBwYWwgPSBRQXBwbGljYXRp
b246OnBhbGV0dGUoKTsKKyAgICAgICAgby0+c3R5bGUoKS0+c2V0VGV4dEZpbGxDb2xvcihwYWwu
YnJ1c2goUVBhbGV0dGU6OkFjdGl2ZSwgUVBhbGV0dGU6OkhpZ2hsaWdodGVkVGV4dCkuY29sb3Io
KSk7CisgICAgfQorCisgICAgcC5wYWludGVyLT5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRp
YWxpYXNpbmcsIHRydWUpOworICAgIHBhaW50TWVkaWFCYWNrZ3JvdW5kKHAucGFpbnRlciwgcik7
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1N0cmluZyBSZW5kZXJUaGVtZVF0Ojpmb3JtYXRN
ZWRpYUNvbnRyb2xzQ3VycmVudFRpbWUoZmxvYXQgY3VycmVudFRpbWUsIGZsb2F0IGR1cmF0aW9u
KSBjb25zdAoreworICAgIHJldHVybiBmb3JtYXRNZWRpYUNvbnRyb2xzVGltZShjdXJyZW50VGlt
ZSkgKyAiIC8gIiArIGZvcm1hdE1lZGlhQ29udHJvbHNUaW1lKGR1cmF0aW9uKTsKK30KKworU3Ry
aW5nIFJlbmRlclRoZW1lUXQ6OmZvcm1hdE1lZGlhQ29udHJvbHNSZW1haW5pbmdUaW1lKGZsb2F0
IGN1cnJlbnRUaW1lLCBmbG9hdCBkdXJhdGlvbikgY29uc3QKK3sKKyAgICByZXR1cm4gU3RyaW5n
KCk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNr
KFJlbmRlck9iamVjdCAqbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8gJnBhaW50SW5m
bywgY29uc3QgSW50UmVjdCAmcikKK3sKKyAgICBTdHlsZVBhaW50ZXIgcCh0aGlzLCBwYWludElu
Zm8pOworICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
cC5wYWludGVyLT5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIHRydWUpOwor
CisgICAgcGFpbnRNZWRpYUJhY2tncm91bmQocC5wYWludGVyLCByKTsKKworICAgIGlmICghby0+
aXNTbGlkZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgSW50UmVjdCBiID0gdG9S
ZW5kZXJCb3gobyktPmNvbnRlbnRCb3hSZWN0KCk7CisKKyAgICAvLyBQb3NpdGlvbiB0aGUgb3V0
ZXIgcmVjdGFuZ2xlCisgICAgaW50IHRvcCA9IHIueSgpICsgYi55KCk7CisgICAgaW50IGxlZnQg
PSByLngoKSArIGIueCgpOworICAgIGludCB3aWR0aCA9IGIud2lkdGgoKTsKKyAgICBpbnQgaGVp
Z2h0ID0gYi5oZWlnaHQoKTsKKworICAgIHN0YXRpYyBjb25zdCBRQ29sb3Igc2NhbGVDb2xvcigy
NTUsIDI1NSwgMjU1LCAxMDApOworCisgICAgLy8gRHJhdyB0aGUgb3V0ZXIgcmVjdGFuZ2xlCisg
ICAgcC5wYWludGVyLT5zZXRQZW4oUXQ6OmxpZ2h0R3JheSk7CisgICAgcC5wYWludGVyLT5zZXRC
cnVzaChzY2FsZUNvbG9yKTsKKyAgICBwLnBhaW50ZXItPmRyYXdSZWN0KGxlZnQsIHRvcCwgd2lk
dGgsIGhlaWdodCk7CisKKyAgICBpZiAoIW8tPm5vZGUoKSB8fCAhby0+bm9kZSgpLT5oYXNUYWdO
YW1lKGlucHV0VGFnKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgSFRNTElucHV0RWxl
bWVudCogc2xpZGVyID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG8tPm5vZGUoKSk7
CisKKyAgICAvLyBQb3NpdGlvbiB0aGUgaW5uZXIgcmVjdGFuZ2xlCisgICAgaGVpZ2h0ID0gKGhl
aWdodCAtIDIpICogc2xpZGVyLT52YWx1ZUFzTnVtYmVyKCk7CisgICAgd2lkdGggLT0gMjsKKyAg
ICBsZWZ0ICs9IDE7CisgICAgdG9wICs9IChiLmhlaWdodCgpIC0gaGVpZ2h0KSAtIDE7CisKKyAg
ICAvLyBEcmF3IHRoZSBpbm5lciByZWN0YW5nbGUKKyAgICBwLnBhaW50ZXItPnNldFBlbihRdDo6
Tm9QZW4pOworICAgIHAucGFpbnRlci0+c2V0QnJ1c2goZ2V0TWVkaWFDb250cm9sRm9yZWdyb3Vu
ZENvbG9yKG8pKTsKKyAgICBwLnBhaW50ZXItPmRyYXdSZWN0KGxlZnQsIHRvcCwgd2lkdGgsIGhl
aWdodCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRdDo6cGFp
bnRNZWRpYVZvbHVtZVNsaWRlclRodW1iKFJlbmRlck9iamVjdCAqbywgY29uc3QgUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8gJnBhaW50SW5mbywgY29uc3QgSW50UmVjdCAmcikKK3sKKyAgICBTdHls
ZVBhaW50ZXIgcCh0aGlzLCBwYWludEluZm8pOworICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgLy8gTm90aGluZyB0byBkcmF3IGhlcmUsIHRoaXMgaXMg
YWxsIGRvbmUgaW4gdGhlIHRyYWNrCisgICAgcmV0dXJuIGZhbHNlOworfQorCiBib29sIFJlbmRl
clRoZW1lUXQ6OnBhaW50TWVkaWFTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJl
bmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAg
ICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gZ2V0TWVkaWFFbGVtZW50RnJvbVJl
bmRlck9iamVjdChvKTsKQEAgLTk4NSwxNSArMTA2OCwzMSBAQCBib29sIFJlbmRlclRoZW1lUXQ6
OnBhaW50TWVkaWFTbGlkZXJUcmFjCiAKICAgICBwYWludE1lZGlhQmFja2dyb3VuZChwLnBhaW50
ZXIsIHIpOwogCisgICAgI2lmIFFUX1ZFUlNJT04gPj0gMHgwNDA3MDAKKyAgICBpZiAoTWVkaWFQ
bGF5ZXIqIHBsYXllciA9IG1lZGlhRWxlbWVudC0+cGxheWVyKCkpIHsKKyAgICAgICAgLy8gR2V0
IHRoZSBidWZmZXJlZCBwYXJ0cyBvZiB0aGUgbWVkaWEKKyAgICAgICAgUGFzc1JlZlB0cjxUaW1l
UmFuZ2VzPiBidWZmZXJlZCA9IHBsYXllci0+YnVmZmVyZWQoKTsKKyAgICAgICAgaWYgKGJ1ZmZl
cmVkLT5sZW5ndGgoKSA+IDAgJiYgcGxheWVyLT5kdXJhdGlvbigpIDwgc3RkOjpudW1lcmljX2xp
bWl0czxmbG9hdD46OmluZmluaXR5KCkpIHsKKyAgICAgICAgICAgIC8vIFNldCB0aGUgdHJhbnNm
b3JtIGFuZCBicnVzaAorICAgICAgICAgICAgV29ybGRNYXRyaXhUcmFuc2Zvcm1lciB0cmFuc2Zv
cm1lcihwLnBhaW50ZXIsIG8sIHIpOworICAgICAgICAgICAgcC5wYWludGVyLT5zZXRCcnVzaChn
ZXRNZWRpYUNvbnRyb2xGb3JlZ3JvdW5kQ29sb3IoKSk7CisKKyAgICAgICAgICAgIC8vIFBhaW50
IGVhY2ggYnVmZmVyZWQgc2VjdGlvbgorICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBleDsKKyAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYnVmZmVyZWQtPmxlbmd0aCgpOyBpKyspIHsK
KyAgICAgICAgICAgICAgICBmbG9hdCBzdGFydFggPSAoYnVmZmVyZWQtPnN0YXJ0KGksIGV4KSAv
IHBsYXllci0+ZHVyYXRpb24oKSkgKiAxMDA7CisgICAgICAgICAgICAgICAgZmxvYXQgd2lkdGgg
PSAoKGJ1ZmZlcmVkLT5lbmQoaSwgZXgpIC8gcGxheWVyLT5kdXJhdGlvbigpKSAqIDEwMCkgLSBz
dGFydFg7CisgICAgICAgICAgICAgICAgcC5wYWludGVyLT5kcmF3UmVjdChzdGFydFgsIDM3LCB3
aWR0aCwgMjYpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgICNlbmRpZgor
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50TWVkaWFT
bGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7Ci0gICAgSFRNTE1lZGlhRWxlbWVudCog
bWVkaWFFbGVtZW50ID0gZ2V0TWVkaWFFbGVtZW50RnJvbVJlbmRlck9iamVjdChvLT5wYXJlbnQo
KSk7Ci0gICAgaWYgKCFtZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQogICAg
IFN0eWxlUGFpbnRlciBwKHRoaXMsIHBhaW50SW5mbyk7CiAgICAgaWYgKCFwLmlzVmFsaWQoKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMDE5LDYgKzExMTgsMTMgQEAgdm9pZCBSZW5kZXJU
aGVtZVF0OjphZGp1c3RTbGlkZXJUaHVtYlNpegogICAgICAgICBpbnQgcGFyZW50SGVpZ2h0ID0g
cGFyZW50U3R5bGUtPmhlaWdodCgpLnZhbHVlKCk7CiAgICAgICAgIG8tPnN0eWxlKCktPnNldFdp
ZHRoKExlbmd0aChwYXJlbnRIZWlnaHQgLyAzLCBGaXhlZCkpOwogICAgICAgICBvLT5zdHlsZSgp
LT5zZXRIZWlnaHQoTGVuZ3RoKHBhcmVudEhlaWdodCwgRml4ZWQpKTsKKyAgICB9IGVsc2UgaWYg
KHBhcnQgPT0gTWVkaWFWb2x1bWVTbGlkZXJUaHVtYlBhcnQpIHsKKyAgICAgICAgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlID0gby0+cGFyZW50KCktPnN0eWxlKCk7CisgICAgICAgIFFfQVNTRVJU
KHBhcmVudFN0eWxlKTsKKworICAgICAgICBpbnQgcGFyZW50V2lkdGggPSBwYXJlbnRTdHlsZS0+
d2lkdGgoKS52YWx1ZSgpOworICAgICAgICBvLT5zdHlsZSgpLT5zZXRIZWlnaHQoTGVuZ3RoKHBh
cmVudFdpZHRoIC8gMywgRml4ZWQpKTsKKyAgICAgICAgby0+c3R5bGUoKS0+c2V0V2lkdGgoTGVu
Z3RoKHBhcmVudFdpZHRoLCBGaXhlZCkpOwogICAgIH0gZWxzZSBpZiAocGFydCA9PSBTbGlkZXJU
aHVtYkhvcml6b250YWxQYXJ0IHx8IHBhcnQgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpIHsK
ICAgICAgICAgUVN0eWxlT3B0aW9uU2xpZGVyIG9wdGlvbjsKICAgICAgICAgaWYgKHBhcnQgPT0g
U2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRl
clRoZW1lUXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1l
UXQuaAkocmV2aXNpb24gNTQ0NzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1l
UXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDcgKzEyNywxMSBAQCBwcm90ZWN0ZWQ6CiAgICAg
dmlydHVhbCBib29sIHBhaW50TWVkaWFTZWVrRm9yd2FyZEJ1dHRvbihSZW5kZXJPYmplY3QqLCBj
b25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRNZWRpYVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBw
YWludE1lZGlhU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRp
YUN1cnJlbnRUaW1lKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhVm9sdW1lU2xp
ZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFWb2x1bWVTbGlkZXJU
aHVtYihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBmb3JtYXRNZWRpYUNvbnRyb2xzQ3VycmVu
dFRpbWUoZmxvYXQgY3VycmVudFRpbWUsIGZsb2F0IGR1cmF0aW9uKSBjb25zdDsKKyAgICB2aXJ0
dWFsIFN0cmluZyBmb3JtYXRNZWRpYUNvbnRyb2xzUmVtYWluaW5nVGltZShmbG9hdCBjdXJyZW50
VGltZSwgZmxvYXQgZHVyYXRpb24pIGNvbnN0OwogcHJpdmF0ZToKICAgICBIVE1MTWVkaWFFbGVt
ZW50KiBnZXRNZWRpYUVsZW1lbnRGcm9tUmVuZGVyT2JqZWN0KFJlbmRlck9iamVjdCogbykgY29u
c3Q7CiAgICAgdm9pZCBwYWludE1lZGlhQmFja2dyb3VuZChRUGFpbnRlciogcGFpbnRlciwgY29u
c3QgSW50UmVjdCYgcikgY29uc3Q7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48312</attachid>
            <date>2010-02-07 20:05:12 -0800</date>
            <delta_ts>2010-02-09 21:12:20 -0800</delta_ts>
            <desc>Updated Patch - Removed Dependency</desc>
            <filename>webkit-qtmultimedia-integration.txt</filename>
            <type>text/plain</type>
            <size>91014</size>
            <attacher name="Nick Young">nicholas.young</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDQ3NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTI0IEBACisyMDEwLTAyLTA3ICBOaWNob2xhcyBZb3VuZyAgPG5pY2hvbGFzLnlv
dW5nQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBbUXRdIFN3aXRjaGluZyBmcm9tIFBob25vbiB0byBRdE11bHRpbWVkaWEgQmFja2Vu
ZCBmb3IgUXQgNC43CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zNDYzMQorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhpcyBwYXRjaCBvbmx5IGFmZmVj
dHMgbXVsdGltZWRpYSBiYWNrZW5kLgorCisgICAgICAgICogV2ViQ29yZS5wcm86IEJ1aWxkIGRl
cGVuZHMgb24gUXQgVmVyc2lvbi4KKyAgICAgICAgKiBjc3MvbWVkaWFDb250cm9sc1F0LmNzczog
VXBkYXRlZCBtZWRpYSBjb250cm9scy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRp
YVBsYXllci5jcHA6IERpZmZlcmVudCBiYWNrZW5kIGluY2x1ZGVkIGRlcGVuZGluZyBvbiBRdCB2
ZXJzaW9uLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0
ZVF0LmNwcDogQWRkZWQgbmV3IFF0TXVsdGltZWRpYSBCYWNrZW5kLgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlRGVmYXVsdDo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVEZWZhdWx0OjpzdXBwb3J0c0Z1bGxzY3JlZW4pOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpyZWdpc3Rlck1lZGlhRW5naW5lKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6Z2V0U3VwcG9ydGVkVHlwZXMpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpzdXBwb3J0c1R5cGUpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpNZWRpYVBsYXllclByaXZhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjp+TWVkaWFQbGF5ZXJQcml2YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6aGFzVmlkZW8pOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpoYXNBdWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGU6OmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlOjpjYW5jZWxMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZTo6cGxheSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnBhdXNlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6cGF1c2VkKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6c2Vlayk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGU6OnNlZWtpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlOjpkdXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGU6OmN1cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6
YnVmZmVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjptYXhUaW1l
U2Vla2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpieXRlc0xv
YWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnRvdGFsQnl0ZXMp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRSYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0Vm9sdW1lKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0TXV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlOjpuZXR3b3JrU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlOjpyZWFkeVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZTo6c2V0VmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGU6Om1lZGlhU3RhdHVzQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGU6OmhhbmRsZUVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZTo6ZHVyYXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZTo6dXBkYXRlU3RhdGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZURlZmF1bHQ6Ok1lZGlhUGxheWVyUHJpdmF0ZURlZmF1bHQpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlRGVmYXVsdDo6fk1lZGlhUGxheWVyUHJpdmF0ZURlZmF1bHQpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlRGVmYXVsdDo6bmF0dXJhbFNpemUp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlRGVmYXVsdDo6cGFpbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlRGVmYXVsdDo6cmVwYWludCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuaDogQWRk
ZWQgUVBhaW50ZXJWaWRlb1N1cmZhY2UgdG8gV2ViQ29yZSBhcyBhIHRlbXBvcmFyeSBzb2x1dGlv
biB0byB0aGUgdXNlIG9mIGEgcHJpdmF0ZSBRdCBoZWFkZXIuCisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGU6OmlzQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZTo6c3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZTo6cG9zaXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZTo6cmVwYWludCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvUVBh
aW50ZXJWaWRlb1N1cmZhY2UuY3BwOiBBZGRlZCBRUGFpbnRlclZpZGVvU3VyZmFjZSB0byBXZWJD
b3JlIGFzIGEgdGVtcG9yYXJ5IHNvbHV0aW9uIHRvIHRoZSB1c2Ugb2YgYSBwcml2YXRlIFF0IGhl
YWRlci4KKyAgICAgICAgKFdlYkNvcmU6OlFWaWRlb1N1cmZhY2VQYWludGVyOjp+UVZpZGVvU3Vy
ZmFjZVBhaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UVZpZGVvU3VyZmFjZVJhc3RlclBhaW50
ZXI6OlFWaWRlb1N1cmZhY2VSYXN0ZXJQYWludGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlFWaWRl
b1N1cmZhY2VSYXN0ZXJQYWludGVyOjpzdXBwb3J0ZWRQaXhlbEZvcm1hdHMpOgorICAgICAgICAo
V2ViQ29yZTo6UVZpZGVvU3VyZmFjZVJhc3RlclBhaW50ZXI6OmlzRm9ybWF0U3VwcG9ydGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OlFWaWRlb1N1cmZhY2VSYXN0ZXJQYWludGVyOjpzdGFydCk6Cisg
ICAgICAgIChXZWJDb3JlOjpRVmlkZW9TdXJmYWNlUmFzdGVyUGFpbnRlcjo6c3RvcCk6CisgICAg
ICAgIChXZWJDb3JlOjpRVmlkZW9TdXJmYWNlUmFzdGVyUGFpbnRlcjo6c2V0Q3VycmVudEZyYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OlFWaWRlb1N1cmZhY2VSYXN0ZXJQYWludGVyOjpwYWludCk6
CisgICAgICAgIChXZWJDb3JlOjpRVmlkZW9TdXJmYWNlUmFzdGVyUGFpbnRlcjo6dXBkYXRlQ29s
b3JzKToKKyAgICAgICAgKFdlYkNvcmU6OlFWaWRlb1N1cmZhY2VHTFBhaW50ZXI6OlFWaWRlb1N1
cmZhY2VHTFBhaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UVZpZGVvU3VyZmFjZUdMUGFpbnRl
cjo6flFWaWRlb1N1cmZhY2VHTFBhaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UVZpZGVvU3Vy
ZmFjZUdMUGFpbnRlcjo6c3VwcG9ydGVkUGl4ZWxGb3JtYXRzKToKKyAgICAgICAgKFdlYkNvcmU6
OlFWaWRlb1N1cmZhY2VHTFBhaW50ZXI6OmlzRm9ybWF0U3VwcG9ydGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OlFWaWRlb1N1cmZhY2VHTFBhaW50ZXI6OnNldEN1cnJlbnRGcmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpRVmlkZW9TdXJmYWNlR0xQYWludGVyOjp1cGRhdGVDb2xvcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6UVZpZGVvU3VyZmFjZUdMUGFpbnRlcjo6aW5pdFJnYlRleHR1cmVJbmZvKToK
KyAgICAgICAgKFdlYkNvcmU6OlFWaWRlb1N1cmZhY2VHTFBhaW50ZXI6OmluaXRZdXY0MjBQVGV4
dHVyZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6UVZpZGVvU3VyZmFjZUdMUGFpbnRlcjo6aW5p
dFl2MTJUZXh0dXJlSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpRVmlkZW9TdXJmYWNlQXJiRnBQ
YWludGVyOjpRVmlkZW9TdXJmYWNlQXJiRnBQYWludGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlFW
aWRlb1N1cmZhY2VBcmJGcFBhaW50ZXI6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlFWaWRl
b1N1cmZhY2VBcmJGcFBhaW50ZXI6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6UVZpZGVvU3Vy
ZmFjZUFyYkZwUGFpbnRlcjo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UVZpZGVvU3VyZmFj
ZUdsc2xQYWludGVyOjpRVmlkZW9TdXJmYWNlR2xzbFBhaW50ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UVZpZGVvU3VyZmFjZUdsc2xQYWludGVyOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpR
VmlkZW9TdXJmYWNlR2xzbFBhaW50ZXI6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6UVZpZGVv
U3VyZmFjZUdsc2xQYWludGVyOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpRUGFpbnRlclZp
ZGVvU3VyZmFjZTo6UVBhaW50ZXJWaWRlb1N1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6UVBh
aW50ZXJWaWRlb1N1cmZhY2U6On5RUGFpbnRlclZpZGVvU3VyZmFjZSk6CisgICAgICAgIChXZWJD
b3JlOjpRUGFpbnRlclZpZGVvU3VyZmFjZTo6c3VwcG9ydGVkUGl4ZWxGb3JtYXRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlFQYWludGVyVmlkZW9TdXJmYWNlOjppc0Zvcm1hdFN1cHBvcnRlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpRUGFpbnRlclZpZGVvU3VyZmFjZTo6c3RhcnQpOgorICAgICAgICAo
V2ViQ29yZTo6UVBhaW50ZXJWaWRlb1N1cmZhY2U6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6
UVBhaW50ZXJWaWRlb1N1cmZhY2U6OnByZXNlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UVBhaW50
ZXJWaWRlb1N1cmZhY2U6OmJyaWdodG5lc3MpOgorICAgICAgICAoV2ViQ29yZTo6UVBhaW50ZXJW
aWRlb1N1cmZhY2U6OnNldEJyaWdodG5lc3MpOgorICAgICAgICAoV2ViQ29yZTo6UVBhaW50ZXJW
aWRlb1N1cmZhY2U6OmNvbnRyYXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlFQYWludGVyVmlkZW9T
dXJmYWNlOjpzZXRDb250cmFzdCk6CisgICAgICAgIChXZWJDb3JlOjpRUGFpbnRlclZpZGVvU3Vy
ZmFjZTo6aHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlFQYWludGVyVmlkZW9TdXJmYWNlOjpzZXRI
dWUpOgorICAgICAgICAoV2ViQ29yZTo6UVBhaW50ZXJWaWRlb1N1cmZhY2U6OnNhdHVyYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6UVBhaW50ZXJWaWRlb1N1cmZhY2U6OnNldFNhdHVyYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6UVBhaW50ZXJWaWRlb1N1cmZhY2U6OmlzUmVhZHkpOgorICAg
ICAgICAoV2ViQ29yZTo6UVBhaW50ZXJWaWRlb1N1cmZhY2U6OnNldFJlYWR5KToKKyAgICAgICAg
KFdlYkNvcmU6OlFQYWludGVyVmlkZW9TdXJmYWNlOjpwYWludCk6CisgICAgICAgIChXZWJDb3Jl
OjpRUGFpbnRlclZpZGVvU3VyZmFjZTo6Z2xDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlFQ
YWludGVyVmlkZW9TdXJmYWNlOjpzZXRHTENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UVBh
aW50ZXJWaWRlb1N1cmZhY2U6OnN1cHBvcnRlZFNoYWRlclR5cGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OlFQYWludGVyVmlkZW9TdXJmYWNlOjpzaGFkZXJUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OlFQYWludGVyVmlkZW9TdXJmYWNlOjpzZXRTaGFkZXJUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OlFQYWludGVyVmlkZW9TdXJmYWNlOjpjcmVhdGVQYWludGVyKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9xdC9RUGFpbnRlclZpZGVvU3VyZmFjZS5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6Oik6IEFkZGVkIFFQYWludGVyVmlkZW9TdXJmYWNlIHRvIFdlYkNvcmUgYXMgYSB0ZW1w
b3Jhcnkgc29sdXRpb24gdG8gdGhlIHVzZSBvZiBhIHByaXZhdGUgUXQgaGVhZGVyLgorICAgICAg
ICAqIHBsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuY3BwOiBVcGRhdGVkIG1lZGlhIGNvbnRyb2xz
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYU11dGVCdXR0b24p
OiBDaGFuZ2VkIHN0eWxpbmcuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWlu
dE1lZGlhQ3VycmVudFRpbWUpOiBBZGRlZCBjdXJyZW50IHRpbWUgZGlzcGxheS4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OmZvcm1hdE1lZGlhQ29udHJvbHNDdXJyZW50VGltZSk6
IEFkZGVkIHRpbWUgZm9ybWF0dGluZy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6
OmZvcm1hdE1lZGlhQ29udHJvbHNSZW1haW5pbmdUaW1lKTogQWRkZWQgdGltZSBmb3JtYXR0aW5n
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVZvbHVtZVNsaWRl
clRyYWNrKTogVm9sdW1lIHNsaWRlciBhZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lUXQ6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUaHVtYik6IFZvbHVtZSBzbGlkZXIgYWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhU2xpZGVyVHJhY2sp
OiBVcGRhdGVkIGZvciBRdE11bHRpbWVkaWEuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVF0OjpwYWludE1lZGlhU2xpZGVyVGh1bWIpOiBEcm9wcGVkIGFuIHVubmVjZXNzYXJ5IGNoZWNr
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6YWRqdXN0U2xpZGVyVGh1bWJTaXpl
KTogSGFuZGxlIGEgbWlzc2luZyBjYXNlLgorICAgICAgICAqIHBsYXRmb3JtL3F0L1JlbmRlclRo
ZW1lUXQuaDogUmVpbXBsZW1lbnRlZCBhIGZldyBtb3JlIG1ldGhvZHMuCisKIDIwMTAtMDItMDcg
IERhbmllbCBCYXRlcyAgPGRiYXRlc0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiA1NDQ3NSkKKysrIFdlYkNvcmUvV2ViQ29yZS5w
cm8JKHdvcmtpbmcgY29weSkKQEAgLTEzMSwxMSArMTMxLDIyIEBAIG1hbWVvNXxzeW1iaWFufGVt
YmVkZGVkIHsKIAogaW5jbHVkZSgkJFBXRC8uLi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS5wcmkpCiAKLSMgRGlzYWJsZSBIVE1MNSBtZWRpYSBjb21waWxhdGlvbiBpZiBwaG9ub24gaXMg
dW5hdmFpbGFibGUKLSFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfVklERU89MSkgewotICAgICFj
b250YWlucyhRVF9DT05GSUcsIHBob25vbikgewotICAgICAgICBERUZJTkVTIC09IEVOQUJMRV9W
SURFTz0xCi0gICAgICAgIERFRklORVMgKz0gRU5BQkxFX1ZJREVPPTAKKyMgUXRNdWx0aW1lZGlh
IHNpbmNlIDQuNworZ3JlYXRlclRoYW4oUVRfTUlOT1JfVkVSU0lPTiwgNikgeworICAgICMgRGlz
YWJsZSBIVE1MNSBtZWRpYSBjb21waWxhdGlvbiBpZiBxdG11bHRpbWVkaWEgaXMgdW5hdmFpbGFi
bGUKKyAgICAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1ZJREVPPTEpIHsKKyAgICAgICAgIWNv
bnRhaW5zKFFUX0NPTkZJRywgbXVsdGltZWRpYSkgeworICAgICAgICAgICAgREVGSU5FUyAtPSBF
TkFCTEVfVklERU89MQorICAgICAgICAgICAgREVGSU5FUyArPSBFTkFCTEVfVklERU89MAorICAg
ICAgICB9CisgICAgfQorfSBlbHNlIHsKKyAgICAjIERpc2FibGUgSFRNTDUgbWVkaWEgY29tcGls
YXRpb24gaWYgcGhvbm9uIGlzIHVuYXZhaWxhYmxlCisgICAgIWNvbnRhaW5zKERFRklORVMsIEVO
QUJMRV9WSURFTz0xKSB7CisgICAgICAgICFjb250YWlucyhRVF9DT05GSUcsIHBob25vbikgewor
ICAgICAgICAgICAgREVGSU5FUyAtPSBFTkFCTEVfVklERU89MQorICAgICAgICAgICAgREVGSU5F
UyArPSBFTkFCTEVfVklERU89MAorICAgICAgICB9CiAgICAgfQogfQogCkBAIC0yMjk5LDIxICsy
MzEwLDM1IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9WSURFTz0xKSB7CiAgICAgICAgIHJl
bmRlcmluZy9SZW5kZXJNZWRpYS5jcHAgXAogICAgICAgICBiaW5kaW5ncy9qcy9KU0F1ZGlvQ29u
c3RydWN0b3IuY3BwCiAKLSAgICAgICAgSEVBREVSUyArPSBcCi0gICAgICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVQaG9ub24uaAorICAgICAgICAjIFF0TXVs
dGltZWRpYSBzaW5jZSA0LjcKKyAgICAgICAgZ3JlYXRlclRoYW4oUVRfTUlOT1JfVkVSU0lPTiwg
NikgeworICAgICAgICAgICAgSEVBREVSUyArPSBcCisgICAgICAgICAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuaCBcCisgICAgICAgICAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvUVBhaW50ZXJWaWRlb1N1cmZhY2UuaAorCisgICAgICAgICAgICBT
T1VSQ0VTICs9IFwKKyAgICAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBs
YXllclByaXZhdGVRdC5jcHAgXAorICAgICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0
L1FQYWludGVyVmlkZW9TdXJmYWNlLmNwcAogCi0gICAgICAgIFNPVVJDRVMgKz0gXAotICAgICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uLmNwcAor
ICAgICAgICAgICAgUVQgKz0gbXVsdGltZWRpYQorICAgICAgICAgICAgY29udGFpbnMoUVRfQ09O
RklHLCBvcGVuZ2wpOiBRVCArPSBvcGVuZ2wKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IEhFQURFUlMgKz0gXAorICAgICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlh
UGxheWVyUHJpdmF0ZVBob25vbi5oCisKKyAgICAgICAgICAgIFNPVVJDRVMgKz0gXAorICAgICAg
ICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVBob25vbi5j
cHAKIAotICAgICAgICAjIEFkZCBwaG9ub24gbWFudWFsbHkgdG8gcHJldmVudCBpdCBmcm9tIGNv
bWluZyBmaXJzdCBpbgotICAgICAgICAjIHRoZSBpbmNsdWRlIHBhdGhzLCBhcyBQaG9ub24ncyBw
YXRoLmggY29uZmxpY3RzIHdpdGgKLSAgICAgICAgIyBXZWJDb3JlJ3MgUGF0aC5oIG9uIGNhc2Ut
aW5zZW5zaXRpdmUgZmlsZXN5c3RlbXMuCi0gICAgICAgIHF0QWRkTGlicmFyeShwaG9ub24pCi0g
ICAgICAgIElOQ0xVREVQQVRIIC09ICQkUU1BS0VfSU5DRElSX1FUL3Bob25vbgotICAgICAgICBJ
TkNMVURFUEFUSCArPSAkJFFNQUtFX0lOQ0RJUl9RVC9waG9ub24KLSAgICAgICAgbWFjIHsKLSAg
ICAgICAgICAgIElOQ0xVREVQQVRIIC09ICQkUU1BS0VfTElCRElSX1FUL3Bob25vbi5mcmFtZXdv
cmsvSGVhZGVycwotICAgICAgICAgICAgSU5DTFVERVBBVEggKz0gJCRRTUFLRV9MSUJESVJfUVQv
cGhvbm9uLmZyYW1ld29yay9IZWFkZXJzCisgICAgICAgICAgICAjIEFkZCBwaG9ub24gbWFudWFs
bHkgdG8gcHJldmVudCBpdCBmcm9tIGNvbWluZyBmaXJzdCBpbgorICAgICAgICAgICAgIyB0aGUg
aW5jbHVkZSBwYXRocywgYXMgUGhvbm9uJ3MgcGF0aC5oIGNvbmZsaWN0cyB3aXRoCisgICAgICAg
ICAgICAjIFdlYkNvcmUncyBQYXRoLmggb24gY2FzZS1pbnNlbnNpdGl2ZSBmaWxlc3lzdGVtcy4K
KyAgICAgICAgICAgIHF0QWRkTGlicmFyeShwaG9ub24pCisgICAgICAgICAgICBJTkNMVURFUEFU
SCAtPSAkJFFNQUtFX0lOQ0RJUl9RVC9waG9ub24KKyAgICAgICAgICAgIElOQ0xVREVQQVRIICs9
ICQkUU1BS0VfSU5DRElSX1FUL3Bob25vbgorICAgICAgICAgICAgbWFjIHsKKyAgICAgICAgICAg
ICAgICBJTkNMVURFUEFUSCAtPSAkJFFNQUtFX0xJQkRJUl9RVC9waG9ub24uZnJhbWV3b3JrL0hl
YWRlcnMKKyAgICAgICAgICAgICAgICBJTkNMVURFUEFUSCArPSAkJFFNQUtFX0xJQkRJUl9RVC9w
aG9ub24uZnJhbWV3b3JrL0hlYWRlcnMKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiB9Cklu
ZGV4OiBXZWJDb3JlL2Nzcy9tZWRpYUNvbnRyb2xzUXQuY3NzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvY3NzL21lZGlhQ29udHJvbHNRdC5jc3MJKHJldmlzaW9uIDU0NDc1KQorKysgV2ViQ29yZS9j
c3MvbWVkaWFDb250cm9sc1F0LmNzcwkod29ya2luZyBjb3B5KQpAQCAtNTEsOCArNTEsNiBAQCB2
aWRlbzotd2Via2l0LWZ1bGwtcGFnZS1tZWRpYTo6LXdlYmtpdC1tCiB9CiAKIGF1ZGlvOjotd2Vi
a2l0LW1lZGlhLWNvbnRyb2xzLW11dGUtYnV0dG9uLCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250
cm9scy1tdXRlLWJ1dHRvbiB7Ci0gICAgbGVmdDogYXV0bzsKLSAgICByaWdodDogNXB4OwogICAg
IHdpZHRoOiAxMnB4OwogICAgIGhlaWdodDogMTJweDsKICAgICBwYWRkaW5nOiA2cHg7CkBAIC02
MCw3ICs1OCw2IEBAIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLW11dGUtYnV0dG8KIH0K
IAogYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtcGxheS1idXR0b24sIHZpZGVvOjotd2Vi
a2l0LW1lZGlhLWNvbnRyb2xzLXBsYXktYnV0dG9uIHsKLSAgICBsZWZ0OiA1cHg7CiAgICAgd2lk
dGg6IDlweDsKICAgICBoZWlnaHQ6IDEycHg7CiAgICAgcGFkZGluZzogNnB4IDEycHggNnB4IDEx
cHg7CkBAIC03Miw3ICs2OSwyMCBAQCBhdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1l
bGluZS1jCiB9CiAKIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWN1cnJlbnQtdGltZS1k
aXNwbGF5LCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1jdXJyZW50LXRpbWUtZGlzcGxh
eSB7Ci0gICAgZGlzcGxheTogbm9uZTsKKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG1lZGlhLWN1
cnJlbnQtdGltZS1kaXNwbGF5OworICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CisgICAg
ZGlzcGxheTogaW5saW5lLWJsb2NrOworICAgIGhlaWdodDogMTJweDsKKyAgICBwYWRkaW5nOiA2
cHg7CisgICAgbWFyZ2luOiA1cHggM3B4OworCisgICAgb3ZlcmZsb3c6IGhpZGRlbjsKKyAgICBj
dXJzb3I6IGRlZmF1bHQ7CisKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgZm9udC1zaXpl
OiAxMHB4OworICAgIGZvbnQtZmFtaWx5OiBWZXJkYW5hOworICAgIGZvbnQtd2VpZ2h0OiBib2xk
OwogfQogCiBhdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lLXJlbWFpbmluZy1kaXNw
bGF5LCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lLXJlbWFpbmluZy1kaXNwbGF5
IHsKQEAgLTgwLDUxICs5MCwzOCBAQCBhdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1l
LXJlbWFpCiB9CiAKIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXRpbWVsaW5lLCB2aWRl
bzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lbGluZSB7Ci0gICAgbGVmdDogNDJweDsKLSAg
ICByaWdodDogMzRweDsKICAgICBoZWlnaHQ6IDEycHg7CiAgICAgcGFkZGluZzogNnB4IDhweDsK
LSAgICBtYXJnaW46IDVweCAwcHg7CisgICAgbWFyZ2luOiA1cHggM3B4OwogfQogCiBhdWRpbzo6
LXdlYmtpdC1tZWRpYS1jb250cm9scy12b2x1bWUtc2xpZGVyLWNvbnRhaW5lciwgdmlkZW86Oi13
ZWJraXQtbWVkaWEtY29udHJvbHMtdm9sdW1lLXNsaWRlci1jb250YWluZXIgewotICAgIGRpc3Bs
YXk6IG5vbmU7CisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBtZWRpYS12b2x1bWUtc2xpZGVyLWNv
bnRhaW5lcjsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgaGVpZ2h0OiAxMDNweDsKKyAg
ICB3aWR0aDogMjRweDsKIH0KIAogYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdm9sdW1l
LXNsaWRlciwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdm9sdW1lLXNsaWRlciB7Ci0g
ICAgZGlzcGxheTogbm9uZTsKKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG1lZGlhLXZvbHVtZS1z
bGlkZXI7CisgICAgZGlzcGxheTogaW5saW5lOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKwor
ICAgIHdpZHRoOiAxMnB4OworICAgIHBhZGRpbmc6IDZweDsKKyAgICBoZWlnaHQ6IDg4cHg7Cisg
ICAgbWFyZ2luOiAwIDAgM3B4IDA7CiB9CiAKIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xz
LXNlZWstYmFjay1idXR0b24sIHZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXNlZWstYmFj
ay1idXR0b24gewotICAgIC8qIFNpbmNlIE1lZGlhQ29udHJvbEVsZW1lbnRzIGFyZSBhbHdheXMg
Y3JlYXRlZCB3aXRoIGEgcmVuZGVyZXIgd2UgaGF2ZSB0byBoaWRlCi0gICAgICAgdGhlIGNvbnRy
b2xzIHdlIGRvbid0IHVzZSwgc28gdGhleSBkb24ndCBtZXNzIHVwIGFjdGl2YXRpb24gYW5kIGV2
ZW50IGhhbmRsaW5nICovCi0gICAgbGVmdDogMHB4OwotICAgIHRvcDogMHB4OwotICAgIHdpZHRo
OiAwcHg7Ci0gICAgaGVpZ2h0OiAwcHg7Ci0KICAgICBkaXNwbGF5OiBub25lOwogfQogCiBhdWRp
bzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1zZWVrLWZvcndhcmQtYnV0dG9uLCB2aWRlbzo6LXdl
YmtpdC1tZWRpYS1jb250cm9scy1zZWVrLWZvcndhcmQtYnV0dG9uIHsKLSAgICAvKiBTaW5jZSBN
ZWRpYUNvbnRyb2xFbGVtZW50cyBhcmUgYWx3YXlzIGNyZWF0ZWQgd2l0aCBhIHJlbmRlcmVyIHdl
IGhhdmUgdG8gaGlkZQotICAgICAgIHRoZSBjb250cm9scyB3ZSBkb24ndCB1c2UsIHNvIHRoZXkg
ZG9uJ3QgbWVzcyB1cCBhY3RpdmF0aW9uIGFuZCBldmVudCBoYW5kbGluZyAqLwotICAgIGxlZnQ6
IDBweDsKLSAgICB0b3A6IDBweDsKLSAgICB3aWR0aDogMHB4OwotICAgIGhlaWdodDogMHB4Owot
CiAgICAgZGlzcGxheTogbm9uZTsKIH0KIAogYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMt
ZnVsbHNjcmVlbi1idXR0b24sIHZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWZ1bGxzY3Jl
ZW4tYnV0dG9uIHsKLSAgICAvKiBTaW5jZSBNZWRpYUNvbnRyb2xFbGVtZW50cyBhcmUgYWx3YXlz
IGNyZWF0ZWQgd2l0aCBhIHJlbmRlcmVyIHdlIGhhdmUgdG8gaGlkZQotICAgICAgIHRoZSBjb250
cm9scyB3ZSBkb24ndCB1c2UsIHNvIHRoZXkgZG9uJ3QgbWVzcyB1cCBhY3RpdmF0aW9uIGFuZCBl
dmVudCBoYW5kbGluZyAqLwotICAgIGxlZnQ6IDBweDsKLSAgICB0b3A6IDBweDsKLSAgICB3aWR0
aDogMHB4OwotICAgIGhlaWdodDogMHB4OwotCiAgICAgZGlzcGxheTogbm9uZTsKIH0KIApAQCAt
MTM2LDMgKzEzMyw3IEBAIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXJldHVybi10by0K
ICAgICBkaXNwbGF5OiBub25lOwogfQogCithdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10
b2dnbGUtY2xvc2VkLWNhcHRpb25zLWJ1dHRvbiwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJv
bHMtdG9nZ2xlLWNsb3NlZC1jYXB0aW9ucy1idXR0b24geworICAgIGRpc3BsYXk6IG5vbmU7Cit9
CisKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCShyZXZp
c2lvbiA1NDQ3NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNywxMCBAQAogI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiVGltZVJhbmdlcy5oIgogCisjaWYgUExBVEZPUk0oUVQpCisjaW5jbHVkZSA8
UXRHbG9iYWw+CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKE1BQykKICNpbmNsdWRlICJNZWRpYVBs
YXllclByaXZhdGVRVEtpdC5oIgogI2VsaWYgT1MoV0lOQ0UpICYmICFQTEFURk9STShRVCkKQEAg
LTQ2LDcgKzUwLDExIEBACiAjZWxpZiBQTEFURk9STShHVEspCiAjaW5jbHVkZSAiTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyLmgiCiAjZWxpZiBQTEFURk9STShRVCkKLSNpbmNsdWRlICJNZWRp
YVBsYXllclByaXZhdGVQaG9ub24uaCIKKyAgICAjaWYgUVRfVkVSU0lPTiA8IDB4MDQwNzAwCisg
ICAgI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZVBob25vbi5oIgorICAgICNlbHNlCisgICAg
I2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZVF0LmgiCisgICAgI2VuZGlmCiAjZWxpZiBQTEFU
Rk9STShDSFJPTUlVTSkKICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVDaHJvbWl1bS5oIgog
I2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJp
dmF0ZVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01l
ZGlhUGxheWVyUHJpdmF0ZVF0LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDQ5NSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZVF0LmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisj
aW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnRRdC5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
CisjaW5jbHVkZSAiUVBhaW50ZXJWaWRlb1N1cmZhY2UuaCIKKyNpbmNsdWRlICJUaW1lUmFuZ2Vz
LmgiCisjaW5jbHVkZSAiV2lkZ2V0LmgiCisKKyNpbmNsdWRlICJxd2ViZnJhbWUuaCIKKyNpbmNs
dWRlICJxd2VicGFnZS5oIgorCisjaW5jbHVkZSA8UU5ldHdvcmtBY2Nlc3NNYW5hZ2VyPgorI2lu
Y2x1ZGUgPFFOZXR3b3JrQ29va2llSmFyPgorI2luY2x1ZGUgPFFOZXR3b3JrUmVxdWVzdD4KKyNp
bmNsdWRlIDxRUGFpbnRlcj4KKyNpbmNsdWRlIDxRUmVjdD4KKyNpbmNsdWRlIDxRVGltZT4KKyNp
bmNsdWRlIDxRVXJsPgorI2luY2x1ZGUgPFFWaWRlb1N1cmZhY2VGb3JtYXQ+CisjaW5jbHVkZSA8
bGltaXRzPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisKKyNpZiAhZGVmaW5lZChRVF9OT19P
UEVOR0wpICYmICFkZWZpbmVkKFFUX09QRU5HTF9FU18xX0NMKSAmJiAhZGVmaW5lZChRVF9PUEVO
R0xfRVNfMSkKKyNpbmNsdWRlIDxRR0xDb250ZXh0PgorI2VuZGlmCisKKy8vIFF0IE11bHRpbWVk
aWEgSW5jbHVkZXMKKyNpbmNsdWRlIDxRTWVkaWFTZXJ2aWNlPgorI2luY2x1ZGUgPFFWaWRlb091
dHB1dENvbnRyb2w+CisjaW5jbHVkZSA8UVZpZGVvUmVuZGVyZXJDb250cm9sPgorCit1c2luZyBu
YW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE1lZGlhUGxheWVy
UHJpdmF0ZURlZmF1bHQgOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlIHsKK3B1YmxpYzoKKyAg
ICBJbnRTaXplIG5hdHVyYWxTaXplKCkgY29uc3Q7CisgICAgdm9pZCBzZXRTaXplKGNvbnN0IElu
dFNpemUmKSB7fQorICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVj
dCYpOworICAgIGJvb2wgc3VwcG9ydHNGdWxsc2NyZWVuKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KKworcHJpdmF0ZSBzbG90czoKKyAgICB2b2lkIHJlcGFpbnQoKTsKKworcHJpdmF0ZToKKyAg
ICBmcmllbmQgY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlOworICAgIE1lZGlhUGxheWVyUHJpdmF0
ZURlZmF1bHQoTWVkaWFQbGF5ZXIqKTsKKyAgICB+TWVkaWFQbGF5ZXJQcml2YXRlRGVmYXVsdCgp
OworCisgICAgUVBhaW50ZXJWaWRlb1N1cmZhY2UqIG1fdmlkZW9TdXJmYWNlOworICAgIFFWaWRl
b091dHB1dENvbnRyb2wqIG1fb3V0cHV0Q29udHJvbDsKKyAgICBRVmlkZW9SZW5kZXJlckNvbnRy
b2wqIG1fcmVuZGVyZXJDb250cm9sOworCisgICAgYm9vbCBtX2lzQWN0aXZlOworfTsKKworTWVk
aWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlKiBNZWRpYVBsYXllclByaXZhdGU6OmNyZWF0ZShNZWRp
YVBsYXllciogcGxheWVyKQoreworICAgIHJldHVybiBuZXcgTWVkaWFQbGF5ZXJQcml2YXRlRGVm
YXVsdChwbGF5ZXIpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cmVnaXN0ZXJNZWRp
YUVuZ2luZShNZWRpYUVuZ2luZVJlZ2lzdHJhciByZWdpc3RyYXIpCit7CisgICAgcmVnaXN0cmFy
KGNyZWF0ZSwgZ2V0U3VwcG9ydGVkVHlwZXMsIHN1cHBvcnRzVHlwZSk7Cit9CisKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlOjpnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4gJnN1cHBv
cnRlZCkKK3sKKyAgICBRU3RyaW5nTGlzdCB0eXBlcyA9IFFNZWRpYVBsYXllcjo6c3VwcG9ydGVk
TWltZVR5cGVzKCk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVzLnNpemUoKTsgaSsr
KQorICAgICAgICBzdXBwb3J0ZWQuYWRkKHR5cGVzLmF0KGkpKTsKK30KKworTWVkaWFQbGF5ZXI6
OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGU6OnN1cHBvcnRzVHlwZShjb25zdCBTdHJp
bmcmIG1pbWUsIGNvbnN0IFN0cmluZyYgY29kZWMpCit7CisgICAgaWYgKFFNZWRpYVBsYXllcjo6
aGFzU3VwcG9ydChtaW1lLCBRU3RyaW5nTGlzdChjb2RlYykpID49IFF0TWVkaWE6OlByb2JhYmx5
U3VwcG9ydGVkKQorICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OklzU3VwcG9ydGVkOworCisg
ICAgcmV0dXJuIE1lZGlhUGxheWVyOjpNYXlCZVN1cHBvcnRlZDsKK30KKworTWVkaWFQbGF5ZXJQ
cml2YXRlOjpNZWRpYVBsYXllclByaXZhdGUoTWVkaWFQbGF5ZXIqIHBsYXllcikKKyAgICA6IG1f
cGxheWVyKHBsYXllcikKKyAgICAsIG1fbWVkaWFQbGF5ZXIobmV3IFFNZWRpYVBsYXllcikKKyAg
ICAsIG1fbmV0d29ya1N0YXRlKE1lZGlhUGxheWVyOjpFbXB0eSkKKyAgICAsIG1fcmVhZHlTdGF0
ZShNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcpCisgICAgLCBtX2lzVmlzaWJsZShmYWxzZSkKK3sK
KyAgICAvLyBTaWduYWwgSGFuZGxlcnMKKyAgICBjb25uZWN0KG1fbWVkaWFQbGF5ZXIsIFNJR05B
TChtZWRpYVN0YXR1c0NoYW5nZWQoUU1lZGlhUGxheWVyOjpNZWRpYVN0YXR1cykpLAorICAgICAg
ICAgICAgdGhpcywgU0xPVChtZWRpYVN0YXR1c0NoYW5nZWQoUU1lZGlhUGxheWVyOjpNZWRpYVN0
YXR1cykpKTsKKyAgICBjb25uZWN0KG1fbWVkaWFQbGF5ZXIsIFNJR05BTChzdGF0ZUNoYW5nZWQo
UU1lZGlhUGxheWVyOjpTdGF0ZSkpLAorICAgICAgICAgICAgdGhpcywgU0xPVChzdGF0ZUNoYW5n
ZWQoUU1lZGlhUGxheWVyOjpTdGF0ZSkpKTsKKyAgICBjb25uZWN0KG1fbWVkaWFQbGF5ZXIsIFNJ
R05BTChlcnJvcihRTWVkaWFQbGF5ZXI6OkVycm9yKSksCisgICAgICAgICAgICB0aGlzLCBTTE9U
KGhhbmRsZUVycm9yKFFNZWRpYVBsYXllcjo6RXJyb3IpKSk7CisgICAgY29ubmVjdChtX21lZGlh
UGxheWVyLCBTSUdOQUwoZHVyYXRpb25DaGFuZ2VkKHFpbnQ2NCkpLAorICAgICAgICAgICAgdGhp
cywgU0xPVChkdXJhdGlvbkNoYW5nZWQocWludDY0KSkpOworICAgIGNvbm5lY3QobV9tZWRpYVBs
YXllciwgU0lHTkFMKHBvc2l0aW9uQ2hhbmdlZChxaW50NjQpKSwKKyAgICAgICAgICAgIHRoaXMs
IFNMT1QocG9zaXRpb25DaGFuZ2VkKHFpbnQ2NCkpKTsKKworICAgIC8vIEdyYWIgdGhlIHBsYXll
ciBjb250cm9sCisgICAgaWYgKG1fbWVkaWFQbGF5ZXIpIHsKKyAgICAgICAgUU1lZGlhU2Vydmlj
ZSogc2VydmljZSA9IG1fbWVkaWFQbGF5ZXItPnNlcnZpY2UoKTsKKyAgICAgICAgaWYgKHNlcnZp
Y2UpIHsKKyAgICAgICAgICAgIG1fbWVkaWFQbGF5ZXJDb250cm9sID0gcW9iamVjdF9jYXN0PFFN
ZWRpYVBsYXllckNvbnRyb2wgKj4oCisgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtPmNvbnRy
b2woUU1lZGlhUGxheWVyQ29udHJvbF9paWQpKTsKKyAgICAgICAgfQorICAgIH0KK30KKworTWVk
aWFQbGF5ZXJQcml2YXRlOjp+TWVkaWFQbGF5ZXJQcml2YXRlKCkKK3sKKyAgICBkZWxldGUgbV9t
ZWRpYVBsYXllcjsKKyAgICBtX21lZGlhUGxheWVyID0gMDsKK30KKworYm9vbCBNZWRpYVBsYXll
clByaXZhdGU6Omhhc1ZpZGVvKCkgY29uc3QKK3sKKyAgICAvLyByZXR1cm4gbV9tZWRpYVBsYXll
ci0+aXNWaWRlb0F2YWlsYWJsZSgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE1lZGlh
UGxheWVyUHJpdmF0ZTo6aGFzQXVkaW8oKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQor
Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6bG9hZChjb25zdCBTdHJpbmcmIHVybCkKK3sKKyAg
ICAvLyBXZSBhcmUgbm93IGxvYWRpbmcKKyAgICBpZiAobV9uZXR3b3JrU3RhdGUgIT0gTWVkaWFQ
bGF5ZXI6OkxvYWRpbmcpIHsKKyAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6
TG9hZGluZzsKKyAgICAgICAgbV9wbGF5ZXItPm5ldHdvcmtTdGF0ZUNoYW5nZWQoKTsKKyAgICB9
CisKKyAgICAvLyBBbmQgd2UgZG9uJ3QgaGF2ZSBhbnkgZGF0YSB5ZXQKKyAgICBpZiAobV9yZWFk
eVN0YXRlICE9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZykgeworICAgICAgICBtX3JlYWR5U3Rh
dGUgPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7CisgICAgICAgIG1fcGxheWVyLT5yZWFkeVN0
YXRlQ2hhbmdlZCgpOworICAgIH0KKworICAgIGNvbnN0IFFVcmwgclVybCh1cmwpOworICAgIGNv
bnN0IFFTdHJpbmcgc2NoZW1lID0gclVybC5zY2hlbWUoKS50b0xvd2VyKCk7CisKKyAgICAvLyBD
b25zdHJ1Y3QgdGhlIG1lZGlhIGNvbnRlbnQgd2l0aCBhIG5ldHdvcmsgcmVxdWVzdCBpZiB0aGUg
cmVzb3VyY2UgaXMgaHR0cFtzXQorICAgIGlmIChzY2hlbWUgPT0gImh0dHAiIHx8IHNjaGVtZSA9
PSAiaHR0cHMiKSB7CisgICAgICAgIFFOZXR3b3JrUmVxdWVzdCByZXF1ZXN0ID0gUU5ldHdvcmtS
ZXF1ZXN0KHJVcmwpOworCisgICAgICAgIC8vIEdyYWIgdGhlIGN1cnJlbnQgZG9jdW1lbnQgYW5k
IG5ldHdvcmsgbWFuYWdlcgorICAgICAgICBGcmFtZSogZnJhbWUgPSBtX3BsYXllci0+ZnJhbWVW
aWV3KCkgPyBtX3BsYXllci0+ZnJhbWVWaWV3KCktPmZyYW1lKCkgOiAwOworICAgICAgICBEb2N1
bWVudCogZG9jdW1lbnQgPSBmcmFtZSA/IGZyYW1lLT5kb2N1bWVudCgpIDogMDsKKyAgICAgICAg
RnJhbWVMb2FkZXJDbGllbnRRdCogZnJhbWVMb2FkZXIgPSAgZnJhbWUgPyBzdGF0aWNfY2FzdDxG
cmFtZUxvYWRlckNsaWVudFF0Kj4oZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSkgOiAwOworICAg
ICAgICBRTmV0d29ya0FjY2Vzc01hbmFnZXIqIG1hbmFnZXIgPSBmcmFtZUxvYWRlciA/IGZyYW1l
TG9hZGVyLT53ZWJGcmFtZSgpLT5wYWdlKCktPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCkgOiAwOwor
CisgICAgICAgIGlmIChkb2N1bWVudCAmJiBtYW5hZ2VyKSB7CisgICAgICAgICAgICAvLyBTZXQg
dGhlIGNvb2tpZXMKKyAgICAgICAgICAgIFFOZXR3b3JrQ29va2llSmFyKiBjb29raWVzID0gbWFu
YWdlci0+Y29va2llSmFyKCk7CisgICAgICAgICAgICByZXF1ZXN0LnNldEhlYWRlcihRTmV0d29y
a1JlcXVlc3Q6OkNvb2tpZUhlYWRlciwgcVZhcmlhbnRGcm9tVmFsdWUoY29va2llcy0+Y29va2ll
c0ZvclVybChyVXJsKSkpOworCisgICAgICAgICAgICAvLyBTZXQgdGhlIHJlZmZlcmVyCisgICAg
ICAgICAgICByZXF1ZXN0LnNldFJhd0hlYWRlcigiUmVmZmVyZXIiLCBkb2N1bWVudC0+ZG9jdW1l
bnRVUkkoKS51dGY4KCkuZGF0YSgpKTsKKworICAgICAgICAgICAgLy8gU2V0IHRoZSB1c2VyIGFn
ZW50CisgICAgICAgICAgICByZXF1ZXN0LnNldFJhd0hlYWRlcigiVXNlci1BZ2VudCIsIGZyYW1l
TG9hZGVyLT51c2VyQWdlbnQoclVybCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIH0KKworICAg
ICAgICBtX21lZGlhUGxheWVyLT5zZXRNZWRpYShRTWVkaWFDb250ZW50KHJlcXVlc3QpKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICAvLyBPdGhlcndpc2UsIGp1c3QgdXNlIHRoZSBVUkwKKyAgICAg
ICAgbV9tZWRpYVBsYXllci0+c2V0TWVkaWEoUU1lZGlhQ29udGVudChyVXJsKSk7CisgICAgfQor
fQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Y2FuY2VsTG9hZCgpCit7CisgICAgbV9tZWRp
YVBsYXllci0+c2V0TWVkaWEoUU1lZGlhQ29udGVudCgpKTsKKyAgICB1cGRhdGVTdGF0ZXMoKTsK
K30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnBsYXkoKQoreworICAgIGlmIChtX21lZGlh
UGxheWVyLT5zdGF0ZSgpICE9IFFNZWRpYVBsYXllcjo6UGxheWluZ1N0YXRlKQorICAgICAgICBt
X21lZGlhUGxheWVyLT5wbGF5KCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpwYXVz
ZSgpCit7CisgICAgaWYgKG1fbWVkaWFQbGF5ZXItPnN0YXRlKCkgPT0gUU1lZGlhUGxheWVyOjpQ
bGF5aW5nU3RhdGUpCisgICAgICAgIG1fbWVkaWFQbGF5ZXItPnBhdXNlKCk7Cit9CisKK2Jvb2wg
TWVkaWFQbGF5ZXJQcml2YXRlOjpwYXVzZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX21lZGlh
UGxheWVyLT5zdGF0ZSgpICE9IFFNZWRpYVBsYXllcjo6UGxheWluZ1N0YXRlOworfQorCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZTo6c2VlayhmbG9hdCBwb3NpdGlvbikKK3sKKyAgICBpZiAoIW1f
bWVkaWFQbGF5ZXItPmlzU2Vla2FibGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1f
bWVkaWFQbGF5ZXJDb250cm9sICYmICFtX21lZGlhUGxheWVyQ29udHJvbC0+YXZhaWxhYmxlUGxh
eWJhY2tSYW5nZXMoKS5jb250YWlucyhwb3NpdGlvbiAqIDEwMDApKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAocG9zaXRpb24gPiBkdXJhdGlvbigpKQorICAgICAgICBwb3NpdGlvbiA9IGR1
cmF0aW9uKCk7CisKKyAgICBtX21lZGlhUGxheWVyLT5zZXRQb3NpdGlvbihwb3NpdGlvbiAqIDEw
MDAuMGYpOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2Vla2luZygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitmbG9hdCBNZWRpYVBsYXllclByaXZhdGU6OmR1cmF0
aW9uKCkgY29uc3QKK3sKKyAgICBpZiAobV9yZWFkeVN0YXRlIDwgTWVkaWFQbGF5ZXI6OkhhdmVN
ZXRhZGF0YSkKKyAgICAgICAgcmV0dXJuIDAuMGY7CisKKyAgICBmbG9hdCBkdXJhdGlvbiA9IG1f
bWVkaWFQbGF5ZXItPmR1cmF0aW9uKCkgLyAxMDAwLjBmOworCisgICAgLy8gV2UgYXJlIHN0cmVh
bWluZworICAgIGlmIChkdXJhdGlvbiA8PSAwLjBmKQorICAgICAgICBkdXJhdGlvbiA9IHN0ZDo6
bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpOworCisgICAgcmV0dXJuIGR1cmF0aW9u
OworfQorCitmbG9hdCBNZWRpYVBsYXllclByaXZhdGU6OmN1cnJlbnRUaW1lKCkgY29uc3QKK3sK
KyAgICBmbG9hdCBjdXJyZW50VGltZSA9IG1fbWVkaWFQbGF5ZXItPnBvc2l0aW9uKCkgLyAxMDAw
LjBmOworICAgIHJldHVybiBjdXJyZW50VGltZTsKK30KKworUGFzc1JlZlB0cjxUaW1lUmFuZ2Vz
PiBNZWRpYVBsYXllclByaXZhdGU6OmJ1ZmZlcmVkKCkgY29uc3QKK3sKKyAgICBSZWZQdHI8VGlt
ZVJhbmdlcz4gYnVmZmVyZWQgPSBUaW1lUmFuZ2VzOjpjcmVhdGUoKTsKKworICAgIGlmICghbV9t
ZWRpYVBsYXllckNvbnRyb2wpCisgICAgICAgIHJldHVybiBidWZmZXJlZDsKKworICAgIFFNZWRp
YVRpbWVSYW5nZSBwbGF5YmFja1JhbmdlcyA9IG1fbWVkaWFQbGF5ZXJDb250cm9sLT5hdmFpbGFi
bGVQbGF5YmFja1JhbmdlcygpOworCisgICAgZm9yZWFjaCAoY29uc3QgUU1lZGlhVGltZUludGVy
dmFsIGludGVydmFsLCBwbGF5YmFja1Jhbmdlcy5pbnRlcnZhbHMoKSkgeworICAgICAgICBmbG9h
dCByYW5nZU1pbiA9IHN0YXRpY19jYXN0PGZsb2F0PihpbnRlcnZhbC5zdGFydCgpKSAvIDEwMDAu
MGY7CisgICAgICAgIGZsb2F0IHJhbmdlTWF4ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGludGVydmFs
LmVuZCgpKSAvIDEwMDAuMGY7CisgICAgICAgIGJ1ZmZlcmVkLT5hZGQocmFuZ2VNaW4sIHJhbmdl
TWF4KTsKKyAgICB9CisKKyAgICByZXR1cm4gYnVmZmVyZWQucmVsZWFzZSgpOworfQorCitmbG9h
dCBNZWRpYVBsYXllclByaXZhdGU6Om1heFRpbWVTZWVrYWJsZSgpIGNvbnN0Cit7CisgICAgaWYg
KCFtX21lZGlhUGxheWVyQ29udHJvbCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fbWVkaWFQbGF5ZXJDb250cm9sLT5hdmFpbGFibGVQbGF5YmFj
a1JhbmdlcygpLmxhdGVzdFRpbWUoKSkgLyAxMDAwLjBmOworfQorCit1bnNpZ25lZCBNZWRpYVBs
YXllclByaXZhdGU6OmJ5dGVzTG9hZGVkKCkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBwZXJjZW50
YWdlID0gbV9tZWRpYVBsYXllci0+YnVmZmVyU3RhdHVzKCk7CisKKyAgICBpZiAocGVyY2VudGFn
ZSA9PSAxMDApIHsKKyAgICAgICAgaWYgKG1fbmV0d29ya1N0YXRlICE9IE1lZGlhUGxheWVyOjpJ
ZGxlKSB7CisgICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpJZGxlOwor
ICAgICAgICAgICAgbV9wbGF5ZXItPm5ldHdvcmtTdGF0ZUNoYW5nZWQoKTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAobV9yZWFkeVN0YXRlICE9IE1lZGlhUGxheWVyOjpIYXZlRW5vdWdoRGF0YSkg
eworICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRh
OworICAgICAgICAgICAgbV9wbGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBRTGF0aW4xU3RyaW5nIGJsS2V5KCJieXRlcy1sb2FkZWQiKTsKKyAgICBp
ZiAobV9tZWRpYVBsYXllci0+YXZhaWxhYmxlRXh0ZW5kZWRNZXRhRGF0YSgpLmNvbnRhaW5zKGJs
S2V5KSkKKyAgICAgICAgcmV0dXJuIG1fbWVkaWFQbGF5ZXItPmV4dGVuZGVkTWV0YURhdGEoYmxL
ZXkpLnRvSW50KCk7CisKKyAgICByZXR1cm4gcGVyY2VudGFnZTsKK30KKwordW5zaWduZWQgTWVk
aWFQbGF5ZXJQcml2YXRlOjp0b3RhbEJ5dGVzKCkgY29uc3QKK3sKKyAgICBpZiAobV9tZWRpYVBs
YXllci0+YXZhaWxhYmxlTWV0YURhdGEoKS5jb250YWlucyhRdE1lZGlhOjpTaXplKSkKKyAgICAg
ICAgcmV0dXJuIG1fbWVkaWFQbGF5ZXItPm1ldGFEYXRhKFF0TWVkaWE6OlNpemUpLnRvSW50KCk7
CisKKyAgICByZXR1cm4gMTAwOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0UmF0
ZShmbG9hdCByYXRlKQoreworICAgIG1fbWVkaWFQbGF5ZXItPnNldFBsYXliYWNrUmF0ZShyYXRl
KTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldFZvbHVtZShmbG9hdCB2b2x1bWUp
Cit7CisgICAgbV9tZWRpYVBsYXllci0+c2V0Vm9sdW1lKHN0YXRpY19jYXN0PGludD4odm9sdW1l
ICogMTAwLjApKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldE11dGVkKGJvb2wg
bXV0ZWQpCit7CisgICAgbV9tZWRpYVBsYXllci0+c2V0TXV0ZWQobXV0ZWQpOworfQorCitNZWRp
YVBsYXllcjo6TmV0d29ya1N0YXRlIE1lZGlhUGxheWVyUHJpdmF0ZTo6bmV0d29ya1N0YXRlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9uZXR3b3JrU3RhdGU7Cit9CisKK01lZGlhUGxheWVyOjpS
ZWFkeVN0YXRlIE1lZGlhUGxheWVyUHJpdmF0ZTo6cmVhZHlTdGF0ZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fcmVhZHlTdGF0ZTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldFZp
c2libGUoYm9vbCB2aXNpYmxlKQoreworICAgIG1faXNWaXNpYmxlID0gdmlzaWJsZTsKK30KKwor
dm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om1lZGlhU3RhdHVzQ2hhbmdlZChRTWVkaWFQbGF5ZXI6
Ok1lZGlhU3RhdHVzKQoreworICAgIHVwZGF0ZVN0YXRlcygpOworfQorCit2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZTo6aGFuZGxlRXJyb3IoUU1lZGlhUGxheWVyOjpFcnJvcikKK3sKKyAgICB1cGRh
dGVTdGF0ZXMoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmR1cmF0aW9uQ2hhbmdl
ZChxaW50NjQpCit7CisgICAgbV9wbGF5ZXItPmR1cmF0aW9uQ2hhbmdlZCgpOworfQorCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZTo6dXBkYXRlU3RhdGVzKCkKK3sKKyAgICAvLyBTdG9yZSB0aGUg
b2xkIHN0YXRlcyBzbyB0aGF0IHdlIGNhbiBkZXRlY3QgYSBjaGFuZ2UgYW5kIHJhaXNlIGNoYW5n
ZSBldmVudHMKKyAgICBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG9sZE5ldHdvcmtTdGF0ZSA9
IG1fbmV0d29ya1N0YXRlOworICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG9sZFJlYWR5U3Rh
dGUgPSBtX3JlYWR5U3RhdGU7CisKKyAgICBRTWVkaWFQbGF5ZXI6Ok1lZGlhU3RhdHVzIGN1cnJl
bnRTdGF0dXMgPSBtX21lZGlhUGxheWVyLT5tZWRpYVN0YXR1cygpOworICAgIFFNZWRpYVBsYXll
cjo6RXJyb3IgY3VycmVudEVycm9yID0gbV9tZWRpYVBsYXllci0+ZXJyb3IoKTsKKworICAgIGlm
IChjdXJyZW50RXJyb3IgIT0gUU1lZGlhUGxheWVyOjpOb0Vycm9yKSB7CisgICAgICAgIG1fcmVh
ZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKKyAgICAgICAgaWYgKGN1cnJlbnRF
cnJvciA9PSBRTWVkaWFQbGF5ZXI6OkZvcm1hdEVycm9yKQorICAgICAgICAgICAgbV9uZXR3b3Jr
U3RhdGUgPSBNZWRpYVBsYXllcjo6Rm9ybWF0RXJyb3I7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6Ok5ldHdvcmtFcnJvcjsKKyAgICB9IGVs
c2UgaWYgKGN1cnJlbnRTdGF0dXMgPT0gUU1lZGlhUGxheWVyOjpVbmtub3duTWVkaWFTdGF0dXMK
KyAgICAgICAgICAgICAgIHx8IGN1cnJlbnRTdGF0dXMgPT0gUU1lZGlhUGxheWVyOjpOb01lZGlh
KSB7CisgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OklkbGU7CisgICAgICAg
IG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKKyAgICB9IGVsc2UgaWYg
KGN1cnJlbnRTdGF0dXMgPT0gUU1lZGlhUGxheWVyOjpMb2FkaW5nTWVkaWEpIHsKKyAgICAgICAg
bV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGluZzsKKyAgICAgICAgbV9yZWFkeVN0
YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOworICAgIH0gZWxzZSBpZiAoY3VycmVudFN0
YXR1cyA9PSBRTWVkaWFQbGF5ZXI6OkxvYWRlZE1lZGlhKSB7CisgICAgICAgIG1fbmV0d29ya1N0
YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRpbmc7CisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlh
UGxheWVyOjpIYXZlTWV0YWRhdGE7CisgICAgfSBlbHNlIGlmIChjdXJyZW50U3RhdHVzID09IFFN
ZWRpYVBsYXllcjo6QnVmZmVyaW5nTWVkaWEpIHsKKyAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBN
ZWRpYVBsYXllcjo6TG9hZGluZzsKKyAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6
OkhhdmVGdXR1cmVEYXRhOworICAgIH0gZWxzZSBpZiAoY3VycmVudFN0YXR1cyA9PSBRTWVkaWFQ
bGF5ZXI6OlN0YWxsZWRNZWRpYSkgeworICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxh
eWVyOjpMb2FkaW5nOworICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUN1
cnJlbnREYXRhOworICAgIH0gZWxzZSBpZiAoY3VycmVudFN0YXR1cyA9PSBRTWVkaWFQbGF5ZXI6
OkJ1ZmZlcmVkTWVkaWEKKyAgICAgICAgICAgICAgIHx8IGN1cnJlbnRTdGF0dXMgPT0gUU1lZGlh
UGxheWVyOjpFbmRPZk1lZGlhKSB7CisgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5
ZXI6OklkbGU7CisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlRW5vdWdo
RGF0YTsKKyAgICB9IGVsc2UgaWYgKGN1cnJlbnRTdGF0dXMgPT0gUU1lZGlhUGxheWVyOjpJbnZh
bGlkTWVkaWEpIHsKKyAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6Rm9ybWF0
RXJyb3I7CisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTWV0YWRhdGE7
CisgICAgfQorCisgICAgLy8gTG9nIHRoZSBzdGF0ZSBjaGFuZ2VzIGFuZCByYWlzZSB0aGUgc3Rh
dGUgY2hhbmdlIGV2ZW50cworICAgIGlmIChtX25ldHdvcmtTdGF0ZSAhPSBvbGROZXR3b3JrU3Rh
dGUpCisgICAgICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CisKKyAgICBpZiAo
bV9yZWFkeVN0YXRlICE9IG9sZFJlYWR5U3RhdGUpCisgICAgICAgIG1fcGxheWVyLT5yZWFkeVN0
YXRlQ2hhbmdlZCgpOworfQorCitNZWRpYVBsYXllclByaXZhdGVEZWZhdWx0OjpNZWRpYVBsYXll
clByaXZhdGVEZWZhdWx0KE1lZGlhUGxheWVyICpwbGF5ZXIpCisgICAgOiBNZWRpYVBsYXllclBy
aXZhdGUocGxheWVyKQorICAgICwgbV92aWRlb1N1cmZhY2UobmV3IFFQYWludGVyVmlkZW9TdXJm
YWNlKG1fbWVkaWFQbGF5ZXIpKQoreworICAgIGlmIChtX21lZGlhUGxheWVyKSB7CisgICAgICAg
IFFNZWRpYVNlcnZpY2UqIHNlcnZpY2UgPSBtX21lZGlhUGxheWVyLT5zZXJ2aWNlKCk7CisgICAg
ICAgIGlmIChzZXJ2aWNlKSB7CisgICAgICAgICAgICBtX291dHB1dENvbnRyb2wgPSBxb2JqZWN0
X2Nhc3Q8UVZpZGVvT3V0cHV0Q29udHJvbCAqPigKKyAgICAgICAgICAgICAgICAgICAgc2Vydmlj
ZS0+Y29udHJvbChRVmlkZW9PdXRwdXRDb250cm9sX2lpZCkpOworICAgICAgICAgICAgbV9yZW5k
ZXJlckNvbnRyb2wgPSBxb2JqZWN0X2Nhc3Q8UVZpZGVvUmVuZGVyZXJDb250cm9sICo+KAorICAg
ICAgICAgICAgICAgICAgICBzZXJ2aWNlLT5jb250cm9sKFFWaWRlb1JlbmRlcmVyQ29udHJvbF9p
aWQpKTsKKworICAgICAgICAgICAgaWYgKG1fb3V0cHV0Q29udHJvbCAmJiBtX3JlbmRlcmVyQ29u
dHJvbCkgeworICAgICAgICAgICAgICAgIGNvbm5lY3QobV92aWRlb1N1cmZhY2UsIFNJR05BTChm
cmFtZUNoYW5nZWQoKSksIHRoaXMsIFNMT1QocmVwYWludCgpKSk7CisKKyAgICAgICAgICAgICAg
ICBtX3JlbmRlcmVyQ29udHJvbC0+c2V0U3VyZmFjZShtX3ZpZGVvU3VyZmFjZSk7CisgICAgICAg
ICAgICAgICAgbV9vdXRwdXRDb250cm9sLT5zZXRPdXRwdXQoUVZpZGVvT3V0cHV0Q29udHJvbDo6
UmVuZGVyZXJPdXRwdXQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitN
ZWRpYVBsYXllclByaXZhdGVEZWZhdWx0Ojp+TWVkaWFQbGF5ZXJQcml2YXRlRGVmYXVsdCgpCit7
CisgICAgZGVsZXRlIG1fdmlkZW9TdXJmYWNlOworICAgIG1fdmlkZW9TdXJmYWNlID0gMDsKK30K
KworSW50U2l6ZSBNZWRpYVBsYXllclByaXZhdGVEZWZhdWx0OjpuYXR1cmFsU2l6ZSgpIGNvbnN0
Cit7CisgICAgaWYgKCFoYXNWaWRlbygpIHx8IG1fcmVhZHlTdGF0ZSA8IE1lZGlhUGxheWVyOjpI
YXZlTWV0YWRhdGEpCisgICAgICAgIHJldHVybiBJbnRTaXplKCk7CisKKyAgICBRU2l6ZSB2aWRl
b1NpemUgPSBtX3ZpZGVvU3VyZmFjZS0+c3VyZmFjZUZvcm1hdCgpLnNpemVIaW50KCk7CisKKyAg
ICBpZiAodmlkZW9TaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIEludFNpemUoKTsKKwor
ICAgIHJldHVybiBJbnRTaXplKHZpZGVvU2l6ZS53aWR0aCgpLCB2aWRlb1NpemUuaGVpZ2h0KCkp
OworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZURlZmF1bHQ6OnBhaW50KEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoY29udGV4dC0+
cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1faXNWaXNp
YmxlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBHcmFiIHRoZSBwYWludGVyCisgICAgUVBh
aW50ZXIqIHBhaW50ZXIgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKworICAgIGlmICgh
bV9pc0FjdGl2ZSkgeworICAgICAgICAvLyBBdHRlbXB0IEdMIFNldHVwCisjaWYgIWRlZmluZWQo
UVRfTk9fT1BFTkdMKSAmJiAhZGVmaW5lZChRVF9PUEVOR0xfRVNfMV9DTCkgJiYgIWRlZmluZWQo
UVRfT1BFTkdMX0VTXzEpCisgICAgICAgIGlmICgocGFpbnRlci0+cGFpbnRFbmdpbmUoKS0+dHlw
ZSgpID09IFFQYWludEVuZ2luZTo6T3BlbkdMCisgICAgICAgICAgICAgfHwgcGFpbnRlci0+cGFp
bnRFbmdpbmUoKS0+dHlwZSgpID09IFFQYWludEVuZ2luZTo6T3BlbkdMMikpIHsKKyAgICAgICAg
ICAgIC8vIFNldCBHTCBDb250ZXh0CisgICAgICAgICAgICBtX3ZpZGVvU3VyZmFjZS0+c2V0R0xD
b250ZXh0KGNvbnN0X2Nhc3Q8UUdMQ29udGV4dCAqPihRR0xDb250ZXh0OjpjdXJyZW50Q29udGV4
dCgpKSk7CisKKyAgICAgICAgICAgIC8vIENoZWNrIFNoYWRlciBUeXBlcworICAgICAgICAgICAg
aWYgKG1fdmlkZW9TdXJmYWNlLT5zdXBwb3J0ZWRTaGFkZXJUeXBlcygpICYgUVBhaW50ZXJWaWRl
b1N1cmZhY2U6Okdsc2xTaGFkZXIpCisgICAgICAgICAgICAgICAgbV92aWRlb1N1cmZhY2UtPnNl
dFNoYWRlclR5cGUoUVBhaW50ZXJWaWRlb1N1cmZhY2U6Okdsc2xTaGFkZXIpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIG1fdmlkZW9TdXJmYWNlLT5zZXRTaGFkZXJUeXBlKFFQ
YWludGVyVmlkZW9TdXJmYWNlOjpGcmFnbWVudFByb2dyYW1TaGFkZXIpOworICAgICAgICB9Cisj
ZW5kaWYKKworICAgICAgICAvLyBTZXR1cCBDb21wbGV0ZWQKKyAgICAgICAgbV9pc0FjdGl2ZSA9
IHRydWU7CisgICAgfQorCisgICAgLy8gUGFpbnQgdGhlIGZyYW1lCisgICAgbV92aWRlb1N1cmZh
Y2UtPnBhaW50KHBhaW50ZXIsIFFSZWN0KHJlY3QueCgpLCByZWN0LnkoKSwKKyAgICByZWN0Lndp
ZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsKKyAgICBtX3ZpZGVvU3VyZmFjZS0+c2V0UmVhZHkodHJ1
ZSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlRGVmYXVsdDo6cmVwYWludCgpCit7Cisg
ICAgbV9wbGF5ZXItPnJlcGFpbnQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
aW5jbHVkZSAibW9jX01lZGlhUGxheWVyUHJpdmF0ZVF0LmNwcCIKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmgJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0
ZVF0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICAgIENvcHlyaWdodCAo
QykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLwor
CisjaWZuZGVmIE1lZGlhUGxheWVyUHJpdmF0ZVF0X2gKKyNkZWZpbmUgTWVkaWFQbGF5ZXJQcml2
YXRlUXRfaAorCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCisKKyNpbmNsdWRlIDxR
TWVkaWFQbGF5ZXI+CisjaW5jbHVkZSA8UU1lZGlhUGxheWVyQ29udHJvbD4KKyNpbmNsdWRlIDxR
T2JqZWN0PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE1lZGlhUGxheWVyUHJpdmF0
ZSA6IHB1YmxpYyBRT2JqZWN0LCBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlIHsK
KworICAgIFFfT0JKRUNUCisKK3B1YmxpYzoKKyAgICBzdGF0aWMgTWVkaWFQbGF5ZXJQcml2YXRl
SW50ZXJmYWNlKiBjcmVhdGUoTWVkaWFQbGF5ZXIqIHBsYXllcik7CisgICAgdmlydHVhbCB+TWVk
aWFQbGF5ZXJQcml2YXRlKCk7CisKKyAgICBzdGF0aWMgdm9pZCByZWdpc3Rlck1lZGlhRW5naW5l
KE1lZGlhRW5naW5lUmVnaXN0cmFyKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRUeXBl
cyhIYXNoU2V0PFN0cmluZz4mKTsKKyAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlw
ZSBzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGNvZGVjcyk7
CisgICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKSB7IHJldHVybiB0cnVlOyB9CisKKyAgICBi
b29sIGhhc1ZpZGVvKCkgY29uc3Q7CisgICAgYm9vbCBoYXNBdWRpbygpIGNvbnN0OworCisgICAg
dm9pZCBsb2FkKGNvbnN0IFN0cmluZyAmdXJsKTsKKyAgICB2b2lkIGNhbmNlbExvYWQoKTsKKwor
ICAgIHZvaWQgcGxheSgpOworICAgIHZvaWQgcGF1c2UoKTsKKworICAgIGJvb2wgcGF1c2VkKCkg
Y29uc3Q7CisgICAgYm9vbCBzZWVraW5nKCkgY29uc3Q7CisKKyAgICBmbG9hdCBkdXJhdGlvbigp
IGNvbnN0OworICAgIGZsb2F0IGN1cnJlbnRUaW1lKCkgY29uc3Q7CisgICAgdm9pZCBzZWVrKGZs
b2F0KTsKKworICAgIHZvaWQgc2V0UmF0ZShmbG9hdCk7CisgICAgdm9pZCBzZXRWb2x1bWUoZmxv
YXQpOworICAgIHZvaWQgc2V0TXV0ZWQoYm9vbCk7CisKKyAgICAvLyBTdGF0ZSBJbmZvcm1hdGlv
bgorICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlKCkgY29uc3Q7Cisg
ICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0OworCisgICAgLy8g
TmV0d29yayBJbmZvcm1hdGlvbgorICAgIFBhc3NSZWZQdHI8VGltZVJhbmdlcz4gYnVmZmVyZWQo
KSBjb25zdDsKKyAgICBmbG9hdCBtYXhUaW1lU2Vla2FibGUoKSBjb25zdDsKKyAgICB1bnNpZ25l
ZCBieXRlc0xvYWRlZCgpIGNvbnN0OworICAgIHVuc2lnbmVkIHRvdGFsQnl0ZXMoKSBjb25zdDsK
KworICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlKGJvb2wpOworCisgICAgdmlydHVhbCBJbnRT
aXplIG5hdHVyYWxTaXplKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRTaXplKGNv
bnN0IEludFNpemUmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IEludFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRnVsbHNj
cmVlbigpIGNvbnN0ID0gMDsKKworcHJvdGVjdGVkIHNsb3RzOgorICAgIHZpcnR1YWwgdm9pZCBt
ZWRpYVN0YXR1c0NoYW5nZWQoUU1lZGlhUGxheWVyOjpNZWRpYVN0YXR1cyk7CisgICAgdmlydHVh
bCB2b2lkIGhhbmRsZUVycm9yKFFNZWRpYVBsYXllcjo6RXJyb3IpOworICAgIHZpcnR1YWwgdm9p
ZCBzdGF0ZUNoYW5nZWQoUU1lZGlhUGxheWVyOjpTdGF0ZSkge30KKyAgICB2aXJ0dWFsIHZvaWQg
cG9zaXRpb25DaGFuZ2VkKHFpbnQ2NCkge30KKyAgICB2aXJ0dWFsIHZvaWQgZHVyYXRpb25DaGFu
Z2VkKHFpbnQ2NCk7CisgICAgdmlydHVhbCB2b2lkIHJlcGFpbnQoKSB7fQorCitwcm90ZWN0ZWQ6
CisgICAgTWVkaWFQbGF5ZXJQcml2YXRlKE1lZGlhUGxheWVyKik7CisKKyAgICBNZWRpYVBsYXll
ciogbV9wbGF5ZXI7CisgICAgUU1lZGlhUGxheWVyKiBtX21lZGlhUGxheWVyOworICAgIFFNZWRp
YVBsYXllckNvbnRyb2wqIG1fbWVkaWFQbGF5ZXJDb250cm9sOworCisgICAgbXV0YWJsZSBNZWRp
YVBsYXllcjo6TmV0d29ya1N0YXRlIG1fbmV0d29ya1N0YXRlOworICAgIG11dGFibGUgTWVkaWFQ
bGF5ZXI6OlJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlOworCisgICAgYm9vbCBtX2lzVmlzaWJsZTsK
KworcHJpdmF0ZToKKyAgICB2b2lkIHVwZGF0ZVN0YXRlcygpOworfTsKK30KKworI2VuZGlmIC8v
IE1lZGlhUGxheWVyUHJpdmF0ZVF0X2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvUVBhaW50ZXJWaWRlb1N1cmZhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvUVBhaW50ZXJWaWRlb1N1cmZhY2UuY3BwCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9RUGFpbnRlclZpZGVvU3VyZmFjZS5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTM3OSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTAg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlFQYWludGVyVmlkZW9TdXJmYWNlLmgiCisKKyNpbmNs
dWRlIDxRUGFpbnRlcj4KKyNpbmNsdWRlIDxRVmFyaWFudD4KKyNpbmNsdWRlIDxRVmlkZW9TdXJm
YWNlRm9ybWF0PgorI2luY2x1ZGUgPHFtYXRoLmg+CisKKyNpZiAhZGVmaW5lZChRVF9OT19PUEVO
R0wpICYmICFkZWZpbmVkKFFUX09QRU5HTF9FU18xX0NMKSAmJiAhZGVmaW5lZChRVF9PUEVOR0xf
RVNfMSkKKyNpbmNsdWRlIDxxZ2xzaGFkZXJwcm9ncmFtLmg+CisjZW5kaWYKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBRVmlkZW9TdXJmYWNlUGFpbnRlciB7CitwdWJsaWM6CisgICAg
dmlydHVhbCB+UVZpZGVvU3VyZmFjZVBhaW50ZXIoKTsKKworICAgIHZpcnR1YWwgUUxpc3Q8UVZp
ZGVvRnJhbWU6OlBpeGVsRm9ybWF0PiBzdXBwb3J0ZWRQaXhlbEZvcm1hdHMoCisgICAgICAgICAg
ICBRQWJzdHJhY3RWaWRlb0J1ZmZlcjo6SGFuZGxlVHlwZSBoYW5kbGVUeXBlKSBjb25zdCA9IDA7
CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNGb3JtYXRTdXBwb3J0ZWQoCisgICAgICAgICAgICBjb25z
dCBRVmlkZW9TdXJmYWNlRm9ybWF0ICZmb3JtYXQsIFFWaWRlb1N1cmZhY2VGb3JtYXQgKnNpbWls
YXIpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgUUFic3RyYWN0VmlkZW9TdXJmYWNlOjpFcnJv
ciBzdGFydChjb25zdCBRVmlkZW9TdXJmYWNlRm9ybWF0ICZmb3JtYXQpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgc3RvcCgpID0gMDsKKworICAgIHZpcnR1YWwgUUFic3RyYWN0VmlkZW9TdXJmYWNl
OjpFcnJvciBzZXRDdXJyZW50RnJhbWUoY29uc3QgUVZpZGVvRnJhbWUgJmZyYW1lKSA9IDA7CisK
KyAgICB2aXJ0dWFsIFFBYnN0cmFjdFZpZGVvU3VyZmFjZTo6RXJyb3IgcGFpbnQoCisgICAgICAg
ICAgICBjb25zdCBRUmVjdEYgJnRhcmdldCwgUVBhaW50ZXIgKnBhaW50ZXIsIGNvbnN0IFFSZWN0
RiAmc291cmNlKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29sb3JzKGludCBicmln
aHRuZXNzLCBpbnQgY29udHJhc3QsIGludCBodWUsIGludCBzYXR1cmF0aW9uKSA9IDA7Cit9Owor
CitRVmlkZW9TdXJmYWNlUGFpbnRlcjo6flFWaWRlb1N1cmZhY2VQYWludGVyKCkKK3sKK30KKwor
Y2xhc3MgUVZpZGVvU3VyZmFjZVJhc3RlclBhaW50ZXIgOiBwdWJsaWMgUVZpZGVvU3VyZmFjZVBh
aW50ZXIgeworcHVibGljOgorICAgIFFWaWRlb1N1cmZhY2VSYXN0ZXJQYWludGVyKCk7CisKKyAg
ICBRTGlzdDxRVmlkZW9GcmFtZTo6UGl4ZWxGb3JtYXQ+IHN1cHBvcnRlZFBpeGVsRm9ybWF0cygK
KyAgICAgICAgICAgIFFBYnN0cmFjdFZpZGVvQnVmZmVyOjpIYW5kbGVUeXBlIGhhbmRsZVR5cGUp
IGNvbnN0OworCisgICAgYm9vbCBpc0Zvcm1hdFN1cHBvcnRlZCgKKyAgICAgICAgICAgIGNvbnN0
IFFWaWRlb1N1cmZhY2VGb3JtYXQgJmZvcm1hdCwgUVZpZGVvU3VyZmFjZUZvcm1hdCAqc2ltaWxh
cikgY29uc3Q7CisKKyAgICBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6OkVycm9yIHN0YXJ0KGNvbnN0
IFFWaWRlb1N1cmZhY2VGb3JtYXQgJmZvcm1hdCk7CisgICAgdm9pZCBzdG9wKCk7CisKKyAgICBR
QWJzdHJhY3RWaWRlb1N1cmZhY2U6OkVycm9yIHNldEN1cnJlbnRGcmFtZShjb25zdCBRVmlkZW9G
cmFtZSAmZnJhbWUpOworCisgICAgUUFic3RyYWN0VmlkZW9TdXJmYWNlOjpFcnJvciBwYWludCgK
KyAgICAgICAgICAgIGNvbnN0IFFSZWN0RiAmdGFyZ2V0LCBRUGFpbnRlciAqcGFpbnRlciwgY29u
c3QgUVJlY3RGICZzb3VyY2UpOworCisgICAgdm9pZCB1cGRhdGVDb2xvcnMoaW50IGJyaWdodG5l
c3MsIGludCBjb250cmFzdCwgaW50IGh1ZSwgaW50IHNhdHVyYXRpb24pOworCitwcml2YXRlOgor
ICAgIFFMaXN0PFFWaWRlb0ZyYW1lOjpQaXhlbEZvcm1hdD4gbV9pbWFnZVBpeGVsRm9ybWF0czsK
KyAgICBRVmlkZW9GcmFtZSBtX2ZyYW1lOworICAgIFFTaXplIG1faW1hZ2VTaXplOworICAgIFFJ
bWFnZTo6Rm9ybWF0IG1faW1hZ2VGb3JtYXQ7CisgICAgUVZpZGVvU3VyZmFjZUZvcm1hdDo6RGly
ZWN0aW9uIG1fc2NhbkxpbmVEaXJlY3Rpb247Cit9OworCitRVmlkZW9TdXJmYWNlUmFzdGVyUGFp
bnRlcjo6UVZpZGVvU3VyZmFjZVJhc3RlclBhaW50ZXIoKQorICAgIDogbV9pbWFnZUZvcm1hdChR
SW1hZ2U6OkZvcm1hdF9JbnZhbGlkKQorICAgICwgbV9zY2FuTGluZURpcmVjdGlvbihRVmlkZW9T
dXJmYWNlRm9ybWF0OjpUb3BUb0JvdHRvbSkKK3sKKyAgICBtX2ltYWdlUGl4ZWxGb3JtYXRzCisg
ICAgICAgIDw8IFFWaWRlb0ZyYW1lOjpGb3JtYXRfUkdCMzIKKyNpZm5kZWYgUVRfT1BFTkdMX0VT
IC8vIFRoZSByYXN0ZXIgZm9ybWF0cyBzaG91bGQgYmUgYSBzdWJzZXQgb2YgdGhlIEdMIGZvcm1h
dHMuCisgICAgICAgIDw8IFFWaWRlb0ZyYW1lOjpGb3JtYXRfUkdCMjQKKyNlbmRpZgorICAgICAg
ICA8PCBRVmlkZW9GcmFtZTo6Rm9ybWF0X0FSR0IzMgorICAgICAgICA8PCBRVmlkZW9GcmFtZTo6
Rm9ybWF0X1JHQjU2NTsKK30KKworUUxpc3Q8UVZpZGVvRnJhbWU6OlBpeGVsRm9ybWF0PiBRVmlk
ZW9TdXJmYWNlUmFzdGVyUGFpbnRlcjo6c3VwcG9ydGVkUGl4ZWxGb3JtYXRzKAorICAgICAgICBR
QWJzdHJhY3RWaWRlb0J1ZmZlcjo6SGFuZGxlVHlwZSBoYW5kbGVUeXBlKSBjb25zdAoreworICAg
IHJldHVybiBoYW5kbGVUeXBlID09IFFBYnN0cmFjdFZpZGVvQnVmZmVyOjpOb0hhbmRsZQorICAg
ICAgICA/IG1faW1hZ2VQaXhlbEZvcm1hdHMKKyAgICAgICAgOiBRTGlzdDxRVmlkZW9GcmFtZTo6
UGl4ZWxGb3JtYXQ+KCk7Cit9CisKK2Jvb2wgUVZpZGVvU3VyZmFjZVJhc3RlclBhaW50ZXI6Omlz
Rm9ybWF0U3VwcG9ydGVkKAorICAgICAgICBjb25zdCBRVmlkZW9TdXJmYWNlRm9ybWF0ICZmb3Jt
YXQsIFFWaWRlb1N1cmZhY2VGb3JtYXQgKikgY29uc3QKK3sKKyAgICByZXR1cm4gZm9ybWF0Lmhh
bmRsZVR5cGUoKSA9PSBRQWJzdHJhY3RWaWRlb0J1ZmZlcjo6Tm9IYW5kbGUKKyAgICAgICAgICAg
ICYmIG1faW1hZ2VQaXhlbEZvcm1hdHMuY29udGFpbnMoZm9ybWF0LnBpeGVsRm9ybWF0KCkpCisg
ICAgICAgICAgICAmJiAhZm9ybWF0LmZyYW1lU2l6ZSgpLmlzRW1wdHkoKTsKK30KKworUUFic3Ry
YWN0VmlkZW9TdXJmYWNlOjpFcnJvciBRVmlkZW9TdXJmYWNlUmFzdGVyUGFpbnRlcjo6c3RhcnQo
Y29uc3QgUVZpZGVvU3VyZmFjZUZvcm1hdCAmZm9ybWF0KQoreworICAgIG1fZnJhbWUgPSBRVmlk
ZW9GcmFtZSgpOworICAgIG1faW1hZ2VGb3JtYXQgPSBRVmlkZW9GcmFtZTo6aW1hZ2VGb3JtYXRG
cm9tUGl4ZWxGb3JtYXQoZm9ybWF0LnBpeGVsRm9ybWF0KCkpOworICAgIG1faW1hZ2VTaXplID0g
Zm9ybWF0LmZyYW1lU2l6ZSgpOworICAgIG1fc2NhbkxpbmVEaXJlY3Rpb24gPSBmb3JtYXQuc2Nh
bkxpbmVEaXJlY3Rpb24oKTsKKworICAgIHJldHVybiBmb3JtYXQuaGFuZGxlVHlwZSgpID09IFFB
YnN0cmFjdFZpZGVvQnVmZmVyOjpOb0hhbmRsZQorICAgICAgICAgICAgJiYgbV9pbWFnZUZvcm1h
dCAhPSBRSW1hZ2U6OkZvcm1hdF9JbnZhbGlkCisgICAgICAgICAgICAmJiAhbV9pbWFnZVNpemUu
aXNFbXB0eSgpCisgICAgICAgICAgICA/IFFBYnN0cmFjdFZpZGVvU3VyZmFjZTo6Tm9FcnJvcgor
ICAgICAgICAgICAgOiBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6OlVuc3VwcG9ydGVkRm9ybWF0RXJy
b3I7Cit9CisKK3ZvaWQgUVZpZGVvU3VyZmFjZVJhc3RlclBhaW50ZXI6OnN0b3AoKQoreworICAg
IG1fZnJhbWUgPSBRVmlkZW9GcmFtZSgpOworfQorCitRQWJzdHJhY3RWaWRlb1N1cmZhY2U6OkVy
cm9yIFFWaWRlb1N1cmZhY2VSYXN0ZXJQYWludGVyOjpzZXRDdXJyZW50RnJhbWUoY29uc3QgUVZp
ZGVvRnJhbWUgJmZyYW1lKQoreworICAgIG1fZnJhbWUgPSBmcmFtZTsKKworICAgIHJldHVybiBR
QWJzdHJhY3RWaWRlb1N1cmZhY2U6Ok5vRXJyb3I7Cit9CisKK1FBYnN0cmFjdFZpZGVvU3VyZmFj
ZTo6RXJyb3IgUVZpZGVvU3VyZmFjZVJhc3RlclBhaW50ZXI6OnBhaW50KAorICAgICAgICAgICAg
Y29uc3QgUVJlY3RGICZ0YXJnZXQsIFFQYWludGVyICpwYWludGVyLCBjb25zdCBRUmVjdEYgJnNv
dXJjZSkKK3sKKyAgICBpZiAobV9mcmFtZS5tYXAoUUFic3RyYWN0VmlkZW9CdWZmZXI6OlJlYWRP
bmx5KSkgeworICAgICAgICBRSW1hZ2UgaW1hZ2UoCisgICAgICAgICAgICAgICAgbV9mcmFtZS5i
aXRzKCksCisgICAgICAgICAgICAgICAgbV9pbWFnZVNpemUud2lkdGgoKSwKKyAgICAgICAgICAg
ICAgICBtX2ltYWdlU2l6ZS5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICBtX2ZyYW1lLmJ5dGVz
UGVyTGluZSgpLAorICAgICAgICAgICAgICAgIG1faW1hZ2VGb3JtYXQpOworCisgICAgICAgIGlm
IChtX3NjYW5MaW5lRGlyZWN0aW9uID09IFFWaWRlb1N1cmZhY2VGb3JtYXQ6OkJvdHRvbVRvVG9w
KSB7CisgICAgICAgICAgICBjb25zdCBRVHJhbnNmb3JtIG9sZFRyYW5zZm9ybSA9IHBhaW50ZXIt
PnRyYW5zZm9ybSgpOworCisgICAgICAgICAgICBwYWludGVyLT5zY2FsZSgxLCAtMSk7CisgICAg
ICAgICAgICBwYWludGVyLT50cmFuc2xhdGUoMCwgLXRhcmdldC5ib3R0b20oKSk7CisgICAgICAg
ICAgICBwYWludGVyLT5kcmF3SW1hZ2UoCisgICAgICAgICAgICAgICAgUVJlY3RGKHRhcmdldC54
KCksIDAsIHRhcmdldC53aWR0aCgpLCB0YXJnZXQuaGVpZ2h0KCkpLCBpbWFnZSwgc291cmNlKTsK
KyAgICAgICAgICAgIHBhaW50ZXItPnNldFRyYW5zZm9ybShvbGRUcmFuc2Zvcm0pOworICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgIHBhaW50ZXItPmRyYXdJbWFnZSh0YXJnZXQsIGltYWdlLCBz
b3VyY2UpOworCisgICAgICAgIG1fZnJhbWUudW5tYXAoKTsKKyAgICB9IGVsc2UgaWYgKG1fZnJh
bWUuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gUUFic3RyYWN0VmlkZW9TdXJmYWNlOjpJbmNv
cnJlY3RGb3JtYXRFcnJvcjsKKyAgICBlbHNlCisgICAgICAgIHBhaW50ZXItPmZpbGxSZWN0KHRh
cmdldCwgUXQ6OmJsYWNrKTsKKworICAgIHJldHVybiBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6Ok5v
RXJyb3I7Cit9CisKK3ZvaWQgUVZpZGVvU3VyZmFjZVJhc3RlclBhaW50ZXI6OnVwZGF0ZUNvbG9y
cyhpbnQsIGludCwgaW50LCBpbnQpCit7Cit9CisKKyNpZiAhZGVmaW5lZChRVF9OT19PUEVOR0wp
ICYmICFkZWZpbmVkKFFUX09QRU5HTF9FU18xX0NMKSAmJiAhZGVmaW5lZChRVF9PUEVOR0xfRVNf
MSkKKworI2lmbmRlZiBRX1dTX01BQworIyBpZm5kZWYgQVBJRU5UUllQCisjICAgaWZkZWYgQVBJ
RU5UUlkKKyMgICAgIGRlZmluZSBBUElFTlRSWVAgQVBJRU5UUlkgKgorIyAgIGVsc2UKKyMgICAg
IGRlZmluZSBBUElFTlRSWQorIyAgICAgZGVmaW5lIEFQSUVOVFJZUCAqCisjICAgZW5kaWYKKyMg
ZW5kaWYKKyNlbHNlCisjIGRlZmluZSBBUElFTlRSWQorIyBkZWZpbmUgQVBJRU5UUllQICoKKyNl
bmRpZgorCisjaWZuZGVmIEdMX1RFWFRVUkUwCisjICBkZWZpbmUgR0xfVEVYVFVSRTAgICAgMHg4
NEMwCisjICBkZWZpbmUgR0xfVEVYVFVSRTEgICAgMHg4NEMxCisjICBkZWZpbmUgR0xfVEVYVFVS
RTIgICAgMHg4NEMyCisjZW5kaWYKKyNpZm5kZWYgR0xfUFJPR1JBTV9FUlJPUl9TVFJJTkdfQVJC
CisjICBkZWZpbmUgR0xfUFJPR1JBTV9FUlJPUl9TVFJJTkdfQVJCICAgICAgIDB4ODg3NAorI2Vu
ZGlmCisKKyNpZm5kZWYgR0xfVU5TSUdORURfU0hPUlRfNV82XzUKKyMgIGRlZmluZSBHTF9VTlNJ
R05FRF9TSE9SVF81XzZfNSAzMzYzNQorI2VuZGlmCisKK2NsYXNzIFFWaWRlb1N1cmZhY2VHTFBh
aW50ZXIgOiBwdWJsaWMgUVZpZGVvU3VyZmFjZVBhaW50ZXIgeworcHVibGljOgorICAgIFFWaWRl
b1N1cmZhY2VHTFBhaW50ZXIoUUdMQ29udGV4dCAqY29udGV4dCk7CisgICAgflFWaWRlb1N1cmZh
Y2VHTFBhaW50ZXIoKTsKKyAgICBRTGlzdDxRVmlkZW9GcmFtZTo6UGl4ZWxGb3JtYXQ+IHN1cHBv
cnRlZFBpeGVsRm9ybWF0cygKKyAgICAgICAgICAgIFFBYnN0cmFjdFZpZGVvQnVmZmVyOjpIYW5k
bGVUeXBlIGhhbmRsZVR5cGUpIGNvbnN0OworCisgICAgYm9vbCBpc0Zvcm1hdFN1cHBvcnRlZCgK
KyAgICAgICAgICAgIGNvbnN0IFFWaWRlb1N1cmZhY2VGb3JtYXQgJmZvcm1hdCwgUVZpZGVvU3Vy
ZmFjZUZvcm1hdCAqc2ltaWxhcikgY29uc3Q7CisKKyAgICBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6
OkVycm9yIHNldEN1cnJlbnRGcmFtZShjb25zdCBRVmlkZW9GcmFtZSAmZnJhbWUpOworCisgICAg
dm9pZCB1cGRhdGVDb2xvcnMoaW50IGJyaWdodG5lc3MsIGludCBjb250cmFzdCwgaW50IGh1ZSwg
aW50IHNhdHVyYXRpb24pOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBpbml0UmdiVGV4dHVyZUlu
Zm8oR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgZm9ybWF0LCBHTGVudW0gdHlwZSwgY29u
c3QgUVNpemUgJnNpemUpOworICAgIHZvaWQgaW5pdFl1djQyMFBUZXh0dXJlSW5mbyhjb25zdCBR
U2l6ZSAmc2l6ZSk7CisgICAgdm9pZCBpbml0WXYxMlRleHR1cmVJbmZvKGNvbnN0IFFTaXplICZz
aXplKTsKKworI2lmbmRlZiBRVF9PUEVOR0xfRVMKKyAgICB0eXBlZGVmIHZvaWQgKEFQSUVOVFJZ
ICpfZ2xBY3RpdmVUZXh0dXJlKSAoR0xlbnVtKTsKKyAgICBfZ2xBY3RpdmVUZXh0dXJlIGdsQWN0
aXZlVGV4dHVyZTsKKyNlbmRpZgorCisgICAgUUxpc3Q8UVZpZGVvRnJhbWU6OlBpeGVsRm9ybWF0
PiBtX2ltYWdlUGl4ZWxGb3JtYXRzOworICAgIFFMaXN0PFFWaWRlb0ZyYW1lOjpQaXhlbEZvcm1h
dD4gbV9nbFBpeGVsRm9ybWF0czsKKyAgICBRTWF0cml4NHg0IG1fY29sb3JNYXRyaXg7CisgICAg
UVZpZGVvRnJhbWUgbV9mcmFtZTsKKworICAgIFFHTENvbnRleHQqIG1fY29udGV4dDsKKyAgICBR
QWJzdHJhY3RWaWRlb0J1ZmZlcjo6SGFuZGxlVHlwZSBtX2hhbmRsZVR5cGU7CisgICAgUVZpZGVv
U3VyZmFjZUZvcm1hdDo6RGlyZWN0aW9uIG1fc2NhbkxpbmVEaXJlY3Rpb247CisgICAgR0xlbnVt
IG1fdGV4dHVyZUZvcm1hdDsKKyAgICBHTHVpbnQgbV90ZXh0dXJlSW50ZXJuYWxGb3JtYXQ7Cisg
ICAgR0xlbnVtIG1fdGV4dHVyZVR5cGU7CisgICAgaW50IG1fdGV4dHVyZUNvdW50OworICAgIEdM
dWludCBtX3RleHR1cmVJZHNbM107CisgICAgaW50IG1fdGV4dHVyZVdpZHRoc1szXTsKKyAgICBp
bnQgbV90ZXh0dXJlSGVpZ2h0c1szXTsKKyAgICBpbnQgbV90ZXh0dXJlT2Zmc2V0c1szXTsKKyAg
ICBib29sIG1feXV2OworfTsKKworUVZpZGVvU3VyZmFjZUdMUGFpbnRlcjo6UVZpZGVvU3VyZmFj
ZUdMUGFpbnRlcihRR0xDb250ZXh0ICpjb250ZXh0KQorICAgIDogbV9jb250ZXh0KGNvbnRleHQp
CisgICAgLCBtX2hhbmRsZVR5cGUoUUFic3RyYWN0VmlkZW9CdWZmZXI6Ok5vSGFuZGxlKQorICAg
ICwgbV9zY2FuTGluZURpcmVjdGlvbihRVmlkZW9TdXJmYWNlRm9ybWF0OjpUb3BUb0JvdHRvbSkK
KyAgICAsIG1fdGV4dHVyZUZvcm1hdCgwKQorICAgICwgbV90ZXh0dXJlSW50ZXJuYWxGb3JtYXQo
MCkKKyAgICAsIG1fdGV4dHVyZVR5cGUoMCkKKyAgICAsIG1fdGV4dHVyZUNvdW50KDApCisgICAg
LCBtX3l1dihmYWxzZSkKK3sKKyNpZm5kZWYgUVRfT1BFTkdMX0VTCisgICAgZ2xBY3RpdmVUZXh0
dXJlID0gKF9nbEFjdGl2ZVRleHR1cmUpbV9jb250ZXh0LT5nZXRQcm9jQWRkcmVzcyhRTGF0aW4x
U3RyaW5nKCJnbEFjdGl2ZVRleHR1cmUiKSk7CisjZW5kaWYKK30KKworUVZpZGVvU3VyZmFjZUdM
UGFpbnRlcjo6flFWaWRlb1N1cmZhY2VHTFBhaW50ZXIoKQoreworfQorCitRTGlzdDxRVmlkZW9G
cmFtZTo6UGl4ZWxGb3JtYXQ+IFFWaWRlb1N1cmZhY2VHTFBhaW50ZXI6OnN1cHBvcnRlZFBpeGVs
Rm9ybWF0cygKKyAgICAgICAgUUFic3RyYWN0VmlkZW9CdWZmZXI6OkhhbmRsZVR5cGUgaGFuZGxl
VHlwZSkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGhhbmRsZVR5cGUpIHsKKyAgICBjYXNlIFFBYnN0
cmFjdFZpZGVvQnVmZmVyOjpOb0hhbmRsZToKKyAgICAgICAgcmV0dXJuIG1faW1hZ2VQaXhlbEZv
cm1hdHM7CisgICAgY2FzZSBRQWJzdHJhY3RWaWRlb0J1ZmZlcjo6R0xUZXh0dXJlSGFuZGxlOgor
ICAgICAgICByZXR1cm4gbV9nbFBpeGVsRm9ybWF0czsKKyAgICBkZWZhdWx0OgorICAgICAgICBy
ZXR1cm4gUUxpc3Q8UVZpZGVvRnJhbWU6OlBpeGVsRm9ybWF0PigpOworICAgIH0KK30KKworYm9v
bCBRVmlkZW9TdXJmYWNlR0xQYWludGVyOjppc0Zvcm1hdFN1cHBvcnRlZCgKKyAgICAgICAgY29u
c3QgUVZpZGVvU3VyZmFjZUZvcm1hdCAmZm9ybWF0LCBRVmlkZW9TdXJmYWNlRm9ybWF0ICopIGNv
bnN0Cit7CisgICAgaWYgKGZvcm1hdC5mcmFtZVNpemUoKS5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIHN3aXRjaCAoZm9ybWF0LmhhbmRsZVR5cGUoKSkgeworICAgIGNh
c2UgUUFic3RyYWN0VmlkZW9CdWZmZXI6Ok5vSGFuZGxlOgorICAgICAgICByZXR1cm4gbV9pbWFn
ZVBpeGVsRm9ybWF0cy5jb250YWlucyhmb3JtYXQucGl4ZWxGb3JtYXQoKSk7CisgICAgY2FzZSBR
QWJzdHJhY3RWaWRlb0J1ZmZlcjo6R0xUZXh0dXJlSGFuZGxlOgorICAgICAgICByZXR1cm4gbV9n
bFBpeGVsRm9ybWF0cy5jb250YWlucyhmb3JtYXQucGl4ZWxGb3JtYXQoKSk7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworUUFic3RyYWN0VmlkZW9TdXJm
YWNlOjpFcnJvciBRVmlkZW9TdXJmYWNlR0xQYWludGVyOjpzZXRDdXJyZW50RnJhbWUoY29uc3Qg
UVZpZGVvRnJhbWUgJmZyYW1lKQoreworICAgIG1fZnJhbWUgPSBmcmFtZTsKKworICAgIGlmICht
X2hhbmRsZVR5cGUgPT0gUUFic3RyYWN0VmlkZW9CdWZmZXI6OkdMVGV4dHVyZUhhbmRsZSkgewor
ICAgICAgICBtX3RleHR1cmVJZHNbMF0gPSBmcmFtZS5oYW5kbGUoKS50b0ludCgpOworICAgIH0g
ZWxzZSBpZiAobV9mcmFtZS5tYXAoUUFic3RyYWN0VmlkZW9CdWZmZXI6OlJlYWRPbmx5KSkgewor
ICAgICAgICBtX2NvbnRleHQtPm1ha2VDdXJyZW50KCk7CisKKyAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBtX3RleHR1cmVDb3VudDsgKytpKSB7CisgICAgICAgICAgICBnbEJpbmRUZXh0dXJl
KEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZUlkc1tpXSk7CisgICAgICAgICAgICBnbFRleEltYWdl
MkQoCisgICAgICAgICAgICAgICAgICAgIEdMX1RFWFRVUkVfMkQsCisgICAgICAgICAgICAgICAg
ICAgIDAsCisgICAgICAgICAgICAgICAgICAgIG1fdGV4dHVyZUludGVybmFsRm9ybWF0LAorICAg
ICAgICAgICAgICAgICAgICBtX3RleHR1cmVXaWR0aHNbaV0sCisgICAgICAgICAgICAgICAgICAg
IG1fdGV4dHVyZUhlaWdodHNbaV0sCisgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAg
ICAgICAgICAgIG1fdGV4dHVyZUZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgbV90ZXh0dXJl
VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgbV9mcmFtZS5iaXRzKCkgKyBtX3RleHR1cmVPZmZz
ZXRzW2ldKTsKKyAgICAgICAgICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9U
RVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgICAgICAgICBnbFRleFBhcmFtZXRl
cmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAg
ICAgICAgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9T
LCBHTF9SRVBFQVQpOworICAgICAgICAgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQs
IEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9SRVBFQVQpOworICAgICAgICB9CisgICAgICAgIG1fZnJh
bWUudW5tYXAoKTsKKyAgICB9IGVsc2UgaWYgKG1fZnJhbWUuaXNWYWxpZCgpKQorICAgICAgICBy
ZXR1cm4gUUFic3RyYWN0VmlkZW9TdXJmYWNlOjpJbmNvcnJlY3RGb3JtYXRFcnJvcjsKKworICAg
IHJldHVybiBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6Ok5vRXJyb3I7Cit9CisKK3ZvaWQgUVZpZGVv
U3VyZmFjZUdMUGFpbnRlcjo6dXBkYXRlQ29sb3JzKGludCBicmlnaHRuZXNzLCBpbnQgY29udHJh
c3QsIGludCBodWUsIGludCBzYXR1cmF0aW9uKQoreworICAgIGNvbnN0IHFyZWFsIGIgPSBicmln
aHRuZXNzIC8gMjAwLjA7CisgICAgY29uc3QgcXJlYWwgYyA9IGNvbnRyYXN0IC8gMTAwLjAgKyAx
LjA7CisgICAgY29uc3QgcXJlYWwgaCA9IGh1ZSAvIDIwMC4wOworICAgIGNvbnN0IHFyZWFsIHMg
PSBzYXR1cmF0aW9uIC8gMTAwLjAgKyAxLjA7CisKKyAgICBjb25zdCBxcmVhbCBjb3NIID0gcUNv
cyhNX1BJICogaCk7CisgICAgY29uc3QgcXJlYWwgc2luSCA9IHFTaW4oTV9QSSAqIGgpOworCisg
ICAgY29uc3QgcXJlYWwgaDExID0gLTAuNDcyOCAqIGNvc0ggKyAwLjc5NTQgKiBzaW5IICsgMS40
NzI4OworICAgIGNvbnN0IHFyZWFsIGgyMSA9IC0wLjkyNTMgKiBjb3NIIC0gMC4wMTE4ICogc2lu
SCArIDAuOTUyMzsKKyAgICBjb25zdCBxcmVhbCBoMzEgPSAgMC40NTI1ICogY29zSCArIDAuODA3
MiAqIHNpbkggLSAwLjQ1MjQ7CisKKyAgICBjb25zdCBxcmVhbCBoMTIgPSAgMS40NzI4ICogY29z
SCAtIDEuMzcyOCAqIHNpbkggLSAxLjQ3Mjg7CisgICAgY29uc3QgcXJlYWwgaDIyID0gIDEuOTI1
MyAqIGNvc0ggKyAwLjU4OTEgKiBzaW5IIC0gMC45MjUzOworICAgIGNvbnN0IHFyZWFsIGgzMiA9
IC0wLjQ1MjUgKiBjb3NIIC0gMS45NjE5ICogc2luSCArIDAuNDUyNTsKKworICAgIGNvbnN0IHFy
ZWFsIGgxMyA9ICAxLjQ3MjggKiBjb3NIIC0gMC4yMTgxICogc2luSCAtIDEuNDcyODsKKyAgICBj
b25zdCBxcmVhbCBoMjMgPSAgMC45MjUzICogY29zSCArIDEuMTY2NSAqIHNpbkggLSAwLjkyNTM7
CisgICAgY29uc3QgcXJlYWwgaDMzID0gIDAuNTQ3NSAqIGNvc0ggLSAxLjM4NDYgKiBzaW5IICsg
MC40NTI1OworCisgICAgY29uc3QgcXJlYWwgc3IgPSAoMS4wIC0gcykgKiAwLjMwODY7CisgICAg
Y29uc3QgcXJlYWwgc2cgPSAoMS4wIC0gcykgKiAwLjYwOTQ7CisgICAgY29uc3QgcXJlYWwgc2Ig
PSAoMS4wIC0gcykgKiAwLjA4MjA7CisKKyAgICBjb25zdCBxcmVhbCBzclMgPSBzciArIHM7Cisg
ICAgY29uc3QgcXJlYWwgc2dTID0gc2cgKyBzOworICAgIGNvbnN0IHFyZWFsIHNiUyA9IHNyICsg
czsKKworICAgIGNvbnN0IGZsb2F0IG00ID0gKHMgKyBzciArIHNnICsgc2IpICogKDAuNSAtIDAu
NSAqIGMgKyBiKTsKKworICAgIG1fY29sb3JNYXRyaXgoMCwgMCkgPSBjICogKHNyUyAqIGgxMSAr
IHNnICogaDIxICsgc2IgKiBoMzEpOworICAgIG1fY29sb3JNYXRyaXgoMCwgMSkgPSBjICogKHNy
UyAqIGgxMiArIHNnICogaDIyICsgc2IgKiBoMzIpOworICAgIG1fY29sb3JNYXRyaXgoMCwgMikg
PSBjICogKHNyUyAqIGgxMyArIHNnICogaDIzICsgc2IgKiBoMzMpOworICAgIG1fY29sb3JNYXRy
aXgoMCwgMykgPSBtNDsKKworICAgIG1fY29sb3JNYXRyaXgoMSwgMCkgPSBjICogKHNyICogaDEx
ICsgc2dTICogaDIxICsgc2IgKiBoMzEpOworICAgIG1fY29sb3JNYXRyaXgoMSwgMSkgPSBjICog
KHNyICogaDEyICsgc2dTICogaDIyICsgc2IgKiBoMzIpOworICAgIG1fY29sb3JNYXRyaXgoMSwg
MikgPSBjICogKHNyICogaDEzICsgc2dTICogaDIzICsgc2IgKiBoMzMpOworICAgIG1fY29sb3JN
YXRyaXgoMSwgMykgPSBtNDsKKworICAgIG1fY29sb3JNYXRyaXgoMiwgMCkgPSBjICogKHNyICog
aDExICsgc2cgKiBoMjEgKyBzYlMgKiBoMzEpOworICAgIG1fY29sb3JNYXRyaXgoMiwgMSkgPSBj
ICogKHNyICogaDEyICsgc2cgKiBoMjIgKyBzYlMgKiBoMzIpOworICAgIG1fY29sb3JNYXRyaXgo
MiwgMikgPSBjICogKHNyICogaDEzICsgc2cgKiBoMjMgKyBzYlMgKiBoMzMpOworICAgIG1fY29s
b3JNYXRyaXgoMiwgMykgPSBtNDsKKworICAgIG1fY29sb3JNYXRyaXgoMywgMCkgPSAwLjA7Cisg
ICAgbV9jb2xvck1hdHJpeCgzLCAxKSA9IDAuMDsKKyAgICBtX2NvbG9yTWF0cml4KDMsIDIpID0g
MC4wOworICAgIG1fY29sb3JNYXRyaXgoMywgMykgPSAxLjA7CisKKyAgICBpZiAobV95dXYpIHsK
KyAgICAgICAgbV9jb2xvck1hdHJpeCA9IG1fY29sb3JNYXRyaXggKiBRTWF0cml4NHg0KAorICAg
ICAgICAgICAgICAgIDEuMCwgIDAuMDAwLCAgMS4xNDAsIC0wLjU3MDAsCisgICAgICAgICAgICAg
ICAgMS4wLCAtMC4zOTQsIC0wLjU4MSwgIDAuNDg3NSwKKyAgICAgICAgICAgICAgICAxLjAsICAy
LjAyOCwgIDAuMDAwLCAtMS4wMTQwLAorICAgICAgICAgICAgICAgIDAuMCwgIDAuMDAwLCAgMC4w
MDAsICAxLjAwMDApOworICAgIH0KK30KKwordm9pZCBRVmlkZW9TdXJmYWNlR0xQYWludGVyOjpp
bml0UmdiVGV4dHVyZUluZm8oCisgICAgICAgIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFFTaXplICZzaXplKQoreworICAgIG1feXV2ID0g
ZmFsc2U7CisgICAgbV90ZXh0dXJlSW50ZXJuYWxGb3JtYXQgPSBpbnRlcm5hbEZvcm1hdDsKKyAg
ICBtX3RleHR1cmVGb3JtYXQgPSBmb3JtYXQ7CisgICAgbV90ZXh0dXJlVHlwZSA9IHR5cGU7Cisg
ICAgbV90ZXh0dXJlQ291bnQgPSAxOworICAgIG1fdGV4dHVyZVdpZHRoc1swXSA9IHNpemUud2lk
dGgoKTsKKyAgICBtX3RleHR1cmVIZWlnaHRzWzBdID0gc2l6ZS5oZWlnaHQoKTsKKyAgICBtX3Rl
eHR1cmVPZmZzZXRzWzBdID0gMDsKK30KKwordm9pZCBRVmlkZW9TdXJmYWNlR0xQYWludGVyOjpp
bml0WXV2NDIwUFRleHR1cmVJbmZvKGNvbnN0IFFTaXplICZzaXplKQoreworICAgIG1feXV2ID0g
dHJ1ZTsKKyAgICBtX3RleHR1cmVJbnRlcm5hbEZvcm1hdCA9IEdMX0xVTUlOQU5DRTsKKyAgICBt
X3RleHR1cmVGb3JtYXQgPSBHTF9MVU1JTkFOQ0U7CisgICAgbV90ZXh0dXJlVHlwZSA9IEdMX1VO
U0lHTkVEX0JZVEU7CisgICAgbV90ZXh0dXJlQ291bnQgPSAzOworICAgIG1fdGV4dHVyZVdpZHRo
c1swXSA9IHNpemUud2lkdGgoKTsKKyAgICBtX3RleHR1cmVIZWlnaHRzWzBdID0gc2l6ZS5oZWln
aHQoKTsKKyAgICBtX3RleHR1cmVPZmZzZXRzWzBdID0gMDsKKyAgICBtX3RleHR1cmVXaWR0aHNb
MV0gPSBzaXplLndpZHRoKCkgLyAyOworICAgIG1fdGV4dHVyZUhlaWdodHNbMV0gPSBzaXplLmhl
aWdodCgpIC8gMjsKKyAgICBtX3RleHR1cmVPZmZzZXRzWzFdID0gc2l6ZS53aWR0aCgpICogc2l6
ZS5oZWlnaHQoKTsKKyAgICBtX3RleHR1cmVXaWR0aHNbMl0gPSBzaXplLndpZHRoKCkgLyAyOwor
ICAgIG1fdGV4dHVyZUhlaWdodHNbMl0gPSBzaXplLmhlaWdodCgpIC8gMjsKKyAgICBtX3RleHR1
cmVPZmZzZXRzWzJdID0gc2l6ZS53aWR0aCgpICogc2l6ZS5oZWlnaHQoKSAqIDUgLyA0OworfQor
Cit2b2lkIFFWaWRlb1N1cmZhY2VHTFBhaW50ZXI6OmluaXRZdjEyVGV4dHVyZUluZm8oY29uc3Qg
UVNpemUgJnNpemUpCit7CisgICAgbV95dXYgPSB0cnVlOworICAgIG1fdGV4dHVyZUludGVybmFs
Rm9ybWF0ID0gR0xfTFVNSU5BTkNFOworICAgIG1fdGV4dHVyZUZvcm1hdCA9IEdMX0xVTUlOQU5D
RTsKKyAgICBtX3RleHR1cmVUeXBlID0gR0xfVU5TSUdORURfQllURTsKKyAgICBtX3RleHR1cmVD
b3VudCA9IDM7CisgICAgbV90ZXh0dXJlV2lkdGhzWzBdID0gc2l6ZS53aWR0aCgpOworICAgIG1f
dGV4dHVyZUhlaWdodHNbMF0gPSBzaXplLmhlaWdodCgpOworICAgIG1fdGV4dHVyZU9mZnNldHNb
MF0gPSAwOworICAgIG1fdGV4dHVyZVdpZHRoc1sxXSA9IHNpemUud2lkdGgoKSAvIDI7CisgICAg
bV90ZXh0dXJlSGVpZ2h0c1sxXSA9IHNpemUuaGVpZ2h0KCkgLyAyOworICAgIG1fdGV4dHVyZU9m
ZnNldHNbMV0gPSBzaXplLndpZHRoKCkgKiBzaXplLmhlaWdodCgpICogNSAvIDQ7CisgICAgbV90
ZXh0dXJlV2lkdGhzWzJdID0gc2l6ZS53aWR0aCgpIC8gMjsKKyAgICBtX3RleHR1cmVIZWlnaHRz
WzJdID0gc2l6ZS5oZWlnaHQoKSAvIDI7CisgICAgbV90ZXh0dXJlT2Zmc2V0c1syXSA9IHNpemUu
d2lkdGgoKSAqIHNpemUuaGVpZ2h0KCk7Cit9CisKKyNpZm5kZWYgUVRfT1BFTkdMX0VTCisKKyMg
aWZuZGVmIEdMX0ZSQUdNRU5UX1BST0dSQU1fQVJCCisjICBkZWZpbmUgR0xfRlJBR01FTlRfUFJP
R1JBTV9BUkIgICAgICAgICAgIDB4ODgwNAorIyAgZGVmaW5lIEdMX1BST0dSQU1fRk9STUFUX0FT
Q0lJX0FSQiAgICAgICAweDg4NzUKKyMgZW5kaWYKKworLy8gUGFpbnRzIGFuIFJHQjMyIGZyYW1l
CitzdGF0aWMgY29uc3QgY2hhciAqcXRfYXJiZnBfeHJnYlNoYWRlclByb2dyYW0gPQorICAgICIh
IUFSQmZwMS4wXG4iCisgICAgIlBBUkFNIG1hdHJpeFs0XSA9IHsgcHJvZ3JhbS5sb2NhbFswLi4y
XSwiCisgICAgInsgMC4wLCAwLjAsIDAuMCwgMS4wIH0gfTtcbiIKKyAgICAiVEVNUCB4cmdiO1xu
IgorICAgICJURVggeHJnYi54eXosIGZyYWdtZW50LnRleGNvb3JkWzBdLCB0ZXh0dXJlWzBdLCAy
RDtcbiIKKyAgICAiTU9WIHhyZ2IudywgbWF0cml4WzNdLnc7XG4iCisgICAgIkRQNCByZXN1bHQu
Y29sb3IueCwgeHJnYi56eXh3LCBtYXRyaXhbMF07XG4iCisgICAgIkRQNCByZXN1bHQuY29sb3Iu
eSwgeHJnYi56eXh3LCBtYXRyaXhbMV07XG4iCisgICAgIkRQNCByZXN1bHQuY29sb3IueiwgeHJn
Yi56eXh3LCBtYXRyaXhbMl07XG4iCisgICAgIkVORCI7CisKKy8vIFBhaW50cyBhbiBBUkdCIGZy
YW1lLgorc3RhdGljIGNvbnN0IGNoYXIgKnF0X2FyYmZwX2FyZ2JTaGFkZXJQcm9ncmFtID0KKyAg
ICAiISFBUkJmcDEuMFxuIgorICAgICJQQVJBTSBtYXRyaXhbNF0gPSB7IHByb2dyYW0ubG9jYWxb
MC4uMl0sIgorICAgICJ7IDAuMCwgMC4wLCAwLjAsIDEuMCB9IH07XG4iCisgICAgIlRFTVAgYXJn
YjtcbiIKKyAgICAiVEVYIGFyZ2IsIGZyYWdtZW50LnRleGNvb3JkWzBdLCB0ZXh0dXJlWzBdLCAy
RDtcbiIKKyAgICAiTU9WIGFyZ2IudywgbWF0cml4WzNdLnc7XG4iCisgICAgIkRQNCByZXN1bHQu
Y29sb3IueCwgYXJnYi56eXh3LCBtYXRyaXhbMF07XG4iCisgICAgIkRQNCByZXN1bHQuY29sb3Iu
eSwgYXJnYi56eXh3LCBtYXRyaXhbMV07XG4iCisgICAgIkRQNCByZXN1bHQuY29sb3IueiwgYXJn
Yi56eXh3LCBtYXRyaXhbMl07XG4iCisgICAgIlRFWCByZXN1bHQuY29sb3IudywgZnJhZ21lbnQu
dGV4Y29vcmRbMF0sIHRleHR1cmUsIDJEO1xuIgorICAgICJFTkQiOworCisvLyBQYWludHMgYW4g
UkdCKEEpIGZyYW1lLgorc3RhdGljIGNvbnN0IGNoYXIgKnF0X2FyYmZwX3JnYlNoYWRlclByb2dy
YW0gPQorICAgICIhIUFSQmZwMS4wXG4iCisgICAgIlBBUkFNIG1hdHJpeFs0XSA9IHsgcHJvZ3Jh
bS5sb2NhbFswLi4yXSwiCisgICAgInsgMC4wLCAwLjAsIDAuMCwgMS4wIH0gfTtcbiIKKyAgICAi
VEVNUCByZ2I7XG4iCisgICAgIlRFWCByZ2IsIGZyYWdtZW50LnRleGNvb3JkWzBdLCB0ZXh0dXJl
WzBdLCAyRDtcbiIKKyAgICAiTU9WIHJnYi53LCBtYXRyaXhbM10udztcbiIKKyAgICAiRFA0IHJl
c3VsdC5jb2xvci54LCByZ2IsIG1hdHJpeFswXTtcbiIKKyAgICAiRFA0IHJlc3VsdC5jb2xvci55
LCByZ2IsIG1hdHJpeFsxXTtcbiIKKyAgICAiRFA0IHJlc3VsdC5jb2xvci56LCByZ2IsIG1hdHJp
eFsyXTtcbiIKKyAgICAiVEVYIHJlc3VsdC5jb2xvci53LCBmcmFnbWVudC50ZXhjb29yZFswXSwg
dGV4dHVyZSwgMkQ7XG4iCisgICAgIkVORCI7CisKKy8vIFBhaW50cyBhIFlVVjQyMFAgb3IgWVYx
MiBmcmFtZS4KK3N0YXRpYyBjb25zdCBjaGFyICpxdF9hcmJmcF95dXZQbGFuYXJTaGFkZXJQcm9n
cmFtID0KKyAgICAiISFBUkJmcDEuMFxuIgorICAgICJQQVJBTSBtYXRyaXhbNF0gPSB7IHByb2dy
YW0ubG9jYWxbMC4uMl0sIgorICAgICJ7IDAuMCwgMC4wLCAwLjAsIDEuMCB9IH07XG4iCisgICAg
IlRFTVAgeXV2O1xuIgorICAgICJURVggeXV2LngsIGZyYWdtZW50LnRleGNvb3JkWzBdLCB0ZXh0
dXJlWzBdLCAyRDtcbiIKKyAgICAiVEVYIHl1di55LCBmcmFnbWVudC50ZXhjb29yZFswXSwgdGV4
dHVyZVsxXSwgMkQ7XG4iCisgICAgIlRFWCB5dXYueiwgZnJhZ21lbnQudGV4Y29vcmRbMF0sIHRl
eHR1cmVbMl0sIDJEO1xuIgorICAgICJNT1YgeXV2LncsIG1hdHJpeFszXS53O1xuIgorICAgICJE
UDQgcmVzdWx0LmNvbG9yLngsIHl1diwgbWF0cml4WzBdO1xuIgorICAgICJEUDQgcmVzdWx0LmNv
bG9yLnksIHl1diwgbWF0cml4WzFdO1xuIgorICAgICJEUDQgcmVzdWx0LmNvbG9yLnosIHl1diwg
bWF0cml4WzJdO1xuIgorICAgICJFTkQiOworCisKK2NsYXNzIFFWaWRlb1N1cmZhY2VBcmJGcFBh
aW50ZXIgOiBwdWJsaWMgUVZpZGVvU3VyZmFjZUdMUGFpbnRlciB7CitwdWJsaWM6CisgICAgUVZp
ZGVvU3VyZmFjZUFyYkZwUGFpbnRlcihRR0xDb250ZXh0ICpjb250ZXh0KTsKKworICAgIFFBYnN0
cmFjdFZpZGVvU3VyZmFjZTo6RXJyb3Igc3RhcnQoY29uc3QgUVZpZGVvU3VyZmFjZUZvcm1hdCAm
Zm9ybWF0KTsKKyAgICB2b2lkIHN0b3AoKTsKKworICAgIFFBYnN0cmFjdFZpZGVvU3VyZmFjZTo6
RXJyb3IgcGFpbnQoCisgICAgICAgICAgICBjb25zdCBRUmVjdEYgJnRhcmdldCwgUVBhaW50ZXIg
KnBhaW50ZXIsIGNvbnN0IFFSZWN0RiAmc291cmNlKTsKKworcHJpdmF0ZToKKyAgICB0eXBlZGVm
IHZvaWQgKEFQSUVOVFJZICpfZ2xQcm9ncmFtU3RyaW5nQVJCKSAoR0xlbnVtLCBHTGVudW0sIEdM
c2l6ZWksIGNvbnN0IEdMdm9pZCAqKTsKKyAgICB0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpfZ2xC
aW5kUHJvZ3JhbUFSQikgKEdMZW51bSwgR0x1aW50KTsKKyAgICB0eXBlZGVmIHZvaWQgKEFQSUVO
VFJZICpfZ2xEZWxldGVQcm9ncmFtc0FSQikgKEdMc2l6ZWksIGNvbnN0IEdMdWludCAqKTsKKyAg
ICB0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpfZ2xHZW5Qcm9ncmFtc0FSQikgKEdMc2l6ZWksIEdM
dWludCAqKTsKKyAgICB0eXBlZGVmIHZvaWQgKEFQSUVOVFJZICpfZ2xQcm9ncmFtTG9jYWxQYXJh
bWV0ZXI0ZkFSQikgKAorICAgICAgICAgICAgR0xlbnVtLCBHTHVpbnQsIEdMZmxvYXQsIEdMZmxv
YXQsIEdMZmxvYXQsIEdMZmxvYXQpOworICAgIHR5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKl9nbEFj
dGl2ZVRleHR1cmUpIChHTGVudW0pOworCisgICAgX2dsUHJvZ3JhbVN0cmluZ0FSQiBnbFByb2dy
YW1TdHJpbmdBUkI7CisgICAgX2dsQmluZFByb2dyYW1BUkIgZ2xCaW5kUHJvZ3JhbUFSQjsKKyAg
ICBfZ2xEZWxldGVQcm9ncmFtc0FSQiBnbERlbGV0ZVByb2dyYW1zQVJCOworICAgIF9nbEdlblBy
b2dyYW1zQVJCIGdsR2VuUHJvZ3JhbXNBUkI7CisgICAgX2dsUHJvZ3JhbUxvY2FsUGFyYW1ldGVy
NGZBUkIgZ2xQcm9ncmFtTG9jYWxQYXJhbWV0ZXI0ZkFSQjsKKworICAgIEdMdWludCBtX3Byb2dy
YW1JZDsKKyAgICBRU2l6ZSBtX2ZyYW1lU2l6ZTsKK307CisKK1FWaWRlb1N1cmZhY2VBcmJGcFBh
aW50ZXI6OlFWaWRlb1N1cmZhY2VBcmJGcFBhaW50ZXIoUUdMQ29udGV4dCAqY29udGV4dCkKKyAg
ICA6IFFWaWRlb1N1cmZhY2VHTFBhaW50ZXIoY29udGV4dCkKKyAgICAsIG1fcHJvZ3JhbUlkKDAp
Cit7CisgICAgZ2xQcm9ncmFtU3RyaW5nQVJCID0gKF9nbFByb2dyYW1TdHJpbmdBUkIpIG1fY29u
dGV4dC0+Z2V0UHJvY0FkZHJlc3MoCisgICAgICAgICAgICAgICAgUUxhdGluMVN0cmluZygiZ2xQ
cm9ncmFtU3RyaW5nQVJCIikpOworICAgIGdsQmluZFByb2dyYW1BUkIgPSAoX2dsQmluZFByb2dy
YW1BUkIpIG1fY29udGV4dC0+Z2V0UHJvY0FkZHJlc3MoCisgICAgICAgICAgICAgICAgUUxhdGlu
MVN0cmluZygiZ2xCaW5kUHJvZ3JhbUFSQiIpKTsKKyAgICBnbERlbGV0ZVByb2dyYW1zQVJCID0g
KF9nbERlbGV0ZVByb2dyYW1zQVJCKSBtX2NvbnRleHQtPmdldFByb2NBZGRyZXNzKAorICAgICAg
ICAgICAgICAgIFFMYXRpbjFTdHJpbmcoImdsRGVsZXRlUHJvZ3JhbXNBUkIiKSk7CisgICAgZ2xH
ZW5Qcm9ncmFtc0FSQiA9IChfZ2xHZW5Qcm9ncmFtc0FSQikgbV9jb250ZXh0LT5nZXRQcm9jQWRk
cmVzcygKKyAgICAgICAgICAgICAgICBRTGF0aW4xU3RyaW5nKCJnbEdlblByb2dyYW1zQVJCIikp
OworICAgIGdsUHJvZ3JhbUxvY2FsUGFyYW1ldGVyNGZBUkIgPSAoX2dsUHJvZ3JhbUxvY2FsUGFy
YW1ldGVyNGZBUkIpIG1fY29udGV4dC0+Z2V0UHJvY0FkZHJlc3MoCisgICAgICAgICAgICAgICAg
UUxhdGluMVN0cmluZygiZ2xQcm9ncmFtTG9jYWxQYXJhbWV0ZXI0ZkFSQiIpKTsKKworICAgIG1f
aW1hZ2VQaXhlbEZvcm1hdHMKKyAgICAgICAgICAgIDw8IFFWaWRlb0ZyYW1lOjpGb3JtYXRfUkdC
MzIKKyAgICAgICAgICAgIDw8IFFWaWRlb0ZyYW1lOjpGb3JtYXRfQVJHQjMyCisgICAgICAgICAg
ICA8PCBRVmlkZW9GcmFtZTo6Rm9ybWF0X1JHQjI0CisgICAgICAgICAgICA8PCBRVmlkZW9GcmFt
ZTo6Rm9ybWF0X1JHQjU2NQorICAgICAgICAgICAgPDwgUVZpZGVvRnJhbWU6OkZvcm1hdF9ZVjEy
CisgICAgICAgICAgICA8PCBRVmlkZW9GcmFtZTo6Rm9ybWF0X1lVVjQyMFA7CisgICAgbV9nbFBp
eGVsRm9ybWF0cworICAgICAgICAgICAgPDwgUVZpZGVvRnJhbWU6OkZvcm1hdF9SR0IzMgorICAg
ICAgICAgICAgPDwgUVZpZGVvRnJhbWU6OkZvcm1hdF9BUkdCMzI7Cit9CisKK1FBYnN0cmFjdFZp
ZGVvU3VyZmFjZTo6RXJyb3IgUVZpZGVvU3VyZmFjZUFyYkZwUGFpbnRlcjo6c3RhcnQoY29uc3Qg
UVZpZGVvU3VyZmFjZUZvcm1hdCAmZm9ybWF0KQoreworICAgIFFfQVNTRVJUKCFtX3RleHR1cmVD
b3VudCk7CisKKyAgICBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6OkVycm9yIGVycm9yID0gUUFic3Ry
YWN0VmlkZW9TdXJmYWNlOjpOb0Vycm9yOworCisgICAgbV9jb250ZXh0LT5tYWtlQ3VycmVudCgp
OworCisgICAgY29uc3QgY2hhciAqcHJvZ3JhbSA9IDA7CisKKyAgICBpZiAoZm9ybWF0LmhhbmRs
ZVR5cGUoKSA9PSBRQWJzdHJhY3RWaWRlb0J1ZmZlcjo6Tm9IYW5kbGUpIHsKKyAgICAgICAgc3dp
dGNoIChmb3JtYXQucGl4ZWxGb3JtYXQoKSkgeworICAgICAgICBjYXNlIFFWaWRlb0ZyYW1lOjpG
b3JtYXRfUkdCMzI6CisgICAgICAgICAgICBpbml0UmdiVGV4dHVyZUluZm8oR0xfUkdCQSwgR0xf
UkdCQSwgR0xfVU5TSUdORURfQllURSwgZm9ybWF0LmZyYW1lU2l6ZSgpKTsKKyAgICAgICAgICAg
IHByb2dyYW0gPSBxdF9hcmJmcF94cmdiU2hhZGVyUHJvZ3JhbTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFFWaWRlb0ZyYW1lOjpGb3JtYXRfQVJHQjMyOgorICAgICAgICAgICAg
aW5pdFJnYlRleHR1cmVJbmZvKEdMX1JHQkEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGZv
cm1hdC5mcmFtZVNpemUoKSk7CisgICAgICAgICAgICBwcm9ncmFtID0gcXRfYXJiZnBfYXJnYlNo
YWRlclByb2dyYW07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBRVmlkZW9GcmFt
ZTo6Rm9ybWF0X1JHQjI0OgorICAgICAgICAgICAgaW5pdFJnYlRleHR1cmVJbmZvKEdMX1JHQjgs
IEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGZvcm1hdC5mcmFtZVNpemUoKSk7CisgICAgICAg
ICAgICBwcm9ncmFtID0gcXRfYXJiZnBfYXJnYlNoYWRlclByb2dyYW07CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBRVmlkZW9GcmFtZTo6Rm9ybWF0X1JHQjU2NToKKyAgICAgICAg
ICAgIGluaXRSZ2JUZXh0dXJlSW5mbyhHTF9SR0IsIEdMX1JHQiwgR0xfVU5TSUdORURfU0hPUlRf
NV82XzUsIGZvcm1hdC5mcmFtZVNpemUoKSk7CisgICAgICAgICAgICBwcm9ncmFtID0gcXRfYXJi
ZnBfcmdiU2hhZGVyUHJvZ3JhbTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFFW
aWRlb0ZyYW1lOjpGb3JtYXRfWVYxMjoKKyAgICAgICAgICAgIGluaXRZdjEyVGV4dHVyZUluZm8o
Zm9ybWF0LmZyYW1lU2l6ZSgpKTsKKyAgICAgICAgICAgIHByb2dyYW0gPSBxdF9hcmJmcF95dXZQ
bGFuYXJTaGFkZXJQcm9ncmFtOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUVZp
ZGVvRnJhbWU6OkZvcm1hdF9ZVVY0MjBQOgorICAgICAgICAgICAgaW5pdFl1djQyMFBUZXh0dXJl
SW5mbyhmb3JtYXQuZnJhbWVTaXplKCkpOworICAgICAgICAgICAgcHJvZ3JhbSA9IHF0X2FyYmZw
X3l1dlBsYW5hclNoYWRlclByb2dyYW07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChmb3Jt
YXQuaGFuZGxlVHlwZSgpID09IFFBYnN0cmFjdFZpZGVvQnVmZmVyOjpHTFRleHR1cmVIYW5kbGUp
IHsKKyAgICAgICAgc3dpdGNoIChmb3JtYXQucGl4ZWxGb3JtYXQoKSkgeworICAgICAgICBjYXNl
IFFWaWRlb0ZyYW1lOjpGb3JtYXRfUkdCMzI6CisgICAgICAgIGNhc2UgUVZpZGVvRnJhbWU6OkZv
cm1hdF9BUkdCMzI6CisgICAgICAgICAgICBtX3l1diA9IGZhbHNlOworICAgICAgICAgICAgbV90
ZXh0dXJlQ291bnQgPSAxOworICAgICAgICAgICAgcHJvZ3JhbSA9IHF0X2FyYmZwX3JnYlNoYWRl
clByb2dyYW07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFwcm9ncmFtKQorICAgICAg
ICBlcnJvciA9IFFBYnN0cmFjdFZpZGVvU3VyZmFjZTo6VW5zdXBwb3J0ZWRGb3JtYXRFcnJvcjsK
KyAgICBlbHNlIHsKKyAgICAgICAgZ2xHZW5Qcm9ncmFtc0FSQigxLCAmbV9wcm9ncmFtSWQpOwor
CisgICAgICAgIEdMZW51bSBnbEVycm9yID0gZ2xHZXRFcnJvcigpOworICAgICAgICBpZiAoZ2xF
cnJvciAhPSBHTF9OT19FUlJPUikgeworICAgICAgICAgICAgcVdhcm5pbmcoIlFQYWludGVyVmlk
ZW9TdXJmYWNlOiBBUkJmYiBTaGFkZXIgYWxsb2NhdGlvbiBlcnJvciAleCIsIGludChnbEVycm9y
KSk7CisgICAgICAgICAgICBtX3RleHR1cmVDb3VudCA9IDA7CisgICAgICAgICAgICBtX3Byb2dy
YW1JZCA9IDA7CisKKyAgICAgICAgICAgIGVycm9yID0gUUFic3RyYWN0VmlkZW9TdXJmYWNlOjpS
ZXNvdXJjZUVycm9yOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZ2xCaW5kUHJvZ3Jh
bUFSQihHTF9GUkFHTUVOVF9QUk9HUkFNX0FSQiwgbV9wcm9ncmFtSWQpOworICAgICAgICAgICAg
Z2xQcm9ncmFtU3RyaW5nQVJCKAorICAgICAgICAgICAgICAgICAgICBHTF9GUkFHTUVOVF9QUk9H
UkFNX0FSQiwKKyAgICAgICAgICAgICAgICAgICAgR0xfUFJPR1JBTV9GT1JNQVRfQVNDSUlfQVJC
LAorICAgICAgICAgICAgICAgICAgICBxc3RybGVuKHByb2dyYW0pLAorICAgICAgICAgICAgICAg
ICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IEdMdm9pZCAqPihwcm9ncmFtKSk7CisKKyAgICAg
ICAgICAgIGlmICgoZ2xFcnJvciA9IGdsR2V0RXJyb3IoKSkgIT0gR0xfTk9fRVJST1IpIHsKKyAg
ICAgICAgICAgICAgICBjb25zdCBHTHVieXRlKiBlcnJvclN0cmluZyA9IGdsR2V0U3RyaW5nKEdM
X1BST0dSQU1fRVJST1JfU1RSSU5HX0FSQik7CisKKyAgICAgICAgICAgICAgICBxV2FybmluZygi
UVBhaW50ZXJWaWRlb1N1cmZhY2U6IEFSQmZwIFNoYWRlciBjb21waWxlIGVycm9yICV4LCAlcyIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgaW50KGdsRXJyb3IpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhciAqPihlcnJvclN0cmluZykpOwor
ICAgICAgICAgICAgICAgIGdsRGVsZXRlUHJvZ3JhbXNBUkIoMSwgJm1fcHJvZ3JhbUlkKTsKKwor
ICAgICAgICAgICAgICAgIG1fdGV4dHVyZUNvdW50ID0gMDsKKyAgICAgICAgICAgICAgICBtX3By
b2dyYW1JZCA9IDA7CisKKyAgICAgICAgICAgICAgICBlcnJvciA9IFFBYnN0cmFjdFZpZGVvU3Vy
ZmFjZTo6UmVzb3VyY2VFcnJvcjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgbV9oYW5kbGVUeXBlID0gZm9ybWF0LmhhbmRsZVR5cGUoKTsKKyAgICAgICAgICAgICAgICBt
X3NjYW5MaW5lRGlyZWN0aW9uID0gZm9ybWF0LnNjYW5MaW5lRGlyZWN0aW9uKCk7CisgICAgICAg
ICAgICAgICAgbV9mcmFtZVNpemUgPSBmb3JtYXQuZnJhbWVTaXplKCk7CisKKyAgICAgICAgICAg
ICAgICBpZiAobV9oYW5kbGVUeXBlID09IFFBYnN0cmFjdFZpZGVvQnVmZmVyOjpOb0hhbmRsZSkK
KyAgICAgICAgICAgICAgICAgICAgZ2xHZW5UZXh0dXJlcyhtX3RleHR1cmVDb3VudCwgbV90ZXh0
dXJlSWRzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBl
cnJvcjsKK30KKwordm9pZCBRVmlkZW9TdXJmYWNlQXJiRnBQYWludGVyOjpzdG9wKCkKK3sKKyAg
ICBtX2NvbnRleHQtPm1ha2VDdXJyZW50KCk7CisKKyAgICBpZiAobV9oYW5kbGVUeXBlICE9IFFB
YnN0cmFjdFZpZGVvQnVmZmVyOjpHTFRleHR1cmVIYW5kbGUpCisgICAgICAgIGdsRGVsZXRlVGV4
dHVyZXMobV90ZXh0dXJlQ291bnQsIG1fdGV4dHVyZUlkcyk7CisgICAgZ2xEZWxldGVQcm9ncmFt
c0FSQigxLCAmbV9wcm9ncmFtSWQpOworCisgICAgbV90ZXh0dXJlQ291bnQgPSAwOworICAgIG1f
cHJvZ3JhbUlkID0gMDsKKyAgICBtX2hhbmRsZVR5cGUgPSBRQWJzdHJhY3RWaWRlb0J1ZmZlcjo6
Tm9IYW5kbGU7Cit9CisKK1FBYnN0cmFjdFZpZGVvU3VyZmFjZTo6RXJyb3IgUVZpZGVvU3VyZmFj
ZUFyYkZwUGFpbnRlcjo6cGFpbnQoCisgICAgICAgIGNvbnN0IFFSZWN0RiAmdGFyZ2V0LCBRUGFp
bnRlciAqcGFpbnRlciwgY29uc3QgUVJlY3RGICZzb3VyY2UpCit7CisgICAgaWYgKG1fZnJhbWUu
aXNWYWxpZCgpKSB7CisgICAgICAgIHBhaW50ZXItPmJlZ2luTmF0aXZlUGFpbnRpbmcoKTsKKwor
ICAgICAgICBjb25zdCBmbG9hdCB0eExlZnQgPSBzb3VyY2UubGVmdCgpIC8gbV9mcmFtZVNpemUu
d2lkdGgoKTsKKyAgICAgICAgY29uc3QgZmxvYXQgdHhSaWdodCA9IHNvdXJjZS5yaWdodCgpIC8g
bV9mcmFtZVNpemUud2lkdGgoKTsKKyAgICAgICAgY29uc3QgZmxvYXQgdHhUb3AgPSBtX3NjYW5M
aW5lRGlyZWN0aW9uID09IFFWaWRlb1N1cmZhY2VGb3JtYXQ6OlRvcFRvQm90dG9tCisgICAgICAg
ICAgICAgICAgPyBzb3VyY2UudG9wKCkgLyBtX2ZyYW1lU2l6ZS5oZWlnaHQoKQorICAgICAgICAg
ICAgICAgIDogc291cmNlLmJvdHRvbSgpIC8gbV9mcmFtZVNpemUuaGVpZ2h0KCk7CisgICAgICAg
IGNvbnN0IGZsb2F0IHR4Qm90dG9tID0gbV9zY2FuTGluZURpcmVjdGlvbiA9PSBRVmlkZW9TdXJm
YWNlRm9ybWF0OjpUb3BUb0JvdHRvbQorICAgICAgICAgICAgICAgID8gc291cmNlLmJvdHRvbSgp
IC8gbV9mcmFtZVNpemUuaGVpZ2h0KCkKKyAgICAgICAgICAgICAgICA6IHNvdXJjZS50b3AoKSAv
IG1fZnJhbWVTaXplLmhlaWdodCgpOworCisgICAgICAgIGNvbnN0IGZsb2F0IHR4QXJyYXlbXSA9
CisgICAgICAgIHsKKyAgICAgICAgICAgIHR4TGVmdCAsIHR4Qm90dG9tLAorICAgICAgICAgICAg
dHhSaWdodCwgdHhCb3R0b20sCisgICAgICAgICAgICB0eExlZnQgLCB0eFRvcCwKKyAgICAgICAg
ICAgIHR4UmlnaHQsIHR4VG9wCisgICAgICAgIH07CisKKyAgICAgICAgY29uc3QgR0xmbG9hdCB2
VG9wID0gbV9zY2FuTGluZURpcmVjdGlvbiA9PSBRVmlkZW9TdXJmYWNlRm9ybWF0OjpUb3BUb0Jv
dHRvbQorICAgICAgICAgICAgICAgID8gdGFyZ2V0LnRvcCgpCisgICAgICAgICAgICAgICAgOiB0
YXJnZXQuYm90dG9tKCkgKyAxOworICAgICAgICBjb25zdCBHTGZsb2F0IHZCb3R0b20gPSBtX3Nj
YW5MaW5lRGlyZWN0aW9uID09IFFWaWRlb1N1cmZhY2VGb3JtYXQ6OlRvcFRvQm90dG9tCisgICAg
ICAgICAgICAgICAgPyB0YXJnZXQuYm90dG9tKCkgKyAxCisgICAgICAgICAgICAgICAgOiB0YXJn
ZXQudG9wKCk7CisKKyAgICAgICAgY29uc3QgR0xmbG9hdCB2QXJyYXlbXSA9CisgICAgICAgIHsK
KyAgICAgICAgICAgIHRhcmdldC5sZWZ0KCkgICAgICwgdkJvdHRvbSwKKyAgICAgICAgICAgIHRh
cmdldC5yaWdodCgpICsgMSwgdkJvdHRvbSwKKyAgICAgICAgICAgIHRhcmdldC5sZWZ0KCkgICAg
ICwgdlRvcCwKKyAgICAgICAgICAgIHRhcmdldC5yaWdodCgpICsgMSwgdlRvcAorICAgICAgICB9
OworCisgICAgICAgIGdsRW5hYmxlKEdMX0ZSQUdNRU5UX1BST0dSQU1fQVJCKTsKKyAgICAgICAg
Z2xCaW5kUHJvZ3JhbUFSQihHTF9GUkFHTUVOVF9QUk9HUkFNX0FSQiwgbV9wcm9ncmFtSWQpOwor
CisgICAgICAgIGdsUHJvZ3JhbUxvY2FsUGFyYW1ldGVyNGZBUkIoCisgICAgICAgICAgICAgICAg
R0xfRlJBR01FTlRfUFJPR1JBTV9BUkIsCisgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAg
ICAgICBtX2NvbG9yTWF0cml4KDAsIDApLAorICAgICAgICAgICAgICAgIG1fY29sb3JNYXRyaXgo
MCwgMSksCisgICAgICAgICAgICAgICAgbV9jb2xvck1hdHJpeCgwLCAyKSwKKyAgICAgICAgICAg
ICAgICBtX2NvbG9yTWF0cml4KDAsIDMpKTsKKyAgICAgICAgZ2xQcm9ncmFtTG9jYWxQYXJhbWV0
ZXI0ZkFSQigKKyAgICAgICAgICAgICAgICBHTF9GUkFHTUVOVF9QUk9HUkFNX0FSQiwKKyAgICAg
ICAgICAgICAgICAxLAorICAgICAgICAgICAgICAgIG1fY29sb3JNYXRyaXgoMSwgMCksCisgICAg
ICAgICAgICAgICAgbV9jb2xvck1hdHJpeCgxLCAxKSwKKyAgICAgICAgICAgICAgICBtX2NvbG9y
TWF0cml4KDEsIDIpLAorICAgICAgICAgICAgICAgIG1fY29sb3JNYXRyaXgoMSwgMykpOworICAg
ICAgICBnbFByb2dyYW1Mb2NhbFBhcmFtZXRlcjRmQVJCKAorICAgICAgICAgICAgICAgIEdMX0ZS
QUdNRU5UX1BST0dSQU1fQVJCLAorICAgICAgICAgICAgICAgIDIsCisgICAgICAgICAgICAgICAg
bV9jb2xvck1hdHJpeCgyLCAwKSwKKyAgICAgICAgICAgICAgICBtX2NvbG9yTWF0cml4KDIsIDEp
LAorICAgICAgICAgICAgICAgIG1fY29sb3JNYXRyaXgoMiwgMiksCisgICAgICAgICAgICAgICAg
bV9jb2xvck1hdHJpeCgyLCAzKSk7CisKKyAgICAgICAgZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRV
UkUwKTsKKyAgICAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmVJZHNb
MF0pOworCisgICAgICAgIGlmIChtX3RleHR1cmVDb3VudCA9PSAzKSB7CisgICAgICAgICAgICBn
bEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTEpOworICAgICAgICAgICAgZ2xCaW5kVGV4dHVyZShH
TF9URVhUVVJFXzJELCBtX3RleHR1cmVJZHNbMV0pOworICAgICAgICAgICAgZ2xBY3RpdmVUZXh0
dXJlKEdMX1RFWFRVUkUyKTsKKyAgICAgICAgICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8y
RCwgbV90ZXh0dXJlSWRzWzJdKTsKKyAgICAgICAgICAgIGdsQWN0aXZlVGV4dHVyZShHTF9URVhU
VVJFMCk7CisgICAgICAgIH0KKworICAgICAgICBnbFZlcnRleFBvaW50ZXIoMiwgR0xfRkxPQVQs
IDAsIHZBcnJheSk7CisgICAgICAgIGdsVGV4Q29vcmRQb2ludGVyKDIsIEdMX0ZMT0FULCAwLCB0
eEFycmF5KTsKKworICAgICAgICBnbEVuYWJsZUNsaWVudFN0YXRlKEdMX1ZFUlRFWF9BUlJBWSk7
CisgICAgICAgIGdsRW5hYmxlQ2xpZW50U3RhdGUoR0xfVEVYVFVSRV9DT09SRF9BUlJBWSk7CisK
KyAgICAgICAgZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFX1NUUklQLCAwLCA0KTsKKworICAgICAg
ICBnbERpc2FibGVDbGllbnRTdGF0ZShHTF9URVhUVVJFX0NPT1JEX0FSUkFZKTsKKyAgICAgICAg
Z2xEaXNhYmxlQ2xpZW50U3RhdGUoR0xfVkVSVEVYX0FSUkFZKTsKKyAgICAgICAgZ2xEaXNhYmxl
KEdMX0ZSQUdNRU5UX1BST0dSQU1fQVJCKTsKKworICAgICAgICBwYWludGVyLT5lbmROYXRpdmVQ
YWludGluZygpOworICAgIH0KKyAgICByZXR1cm4gUUFic3RyYWN0VmlkZW9TdXJmYWNlOjpOb0Vy
cm9yOworfQorCisjZW5kaWYKKworc3RhdGljIGNvbnN0IGNoYXIgKnF0X2dsc2xfdmVydGV4U2hh
ZGVyUHJvZ3JhbSA9CisgICAgICAgICJhdHRyaWJ1dGUgaGlnaHAgdmVjNCB2ZXJ0ZXhDb29yZEFy
cmF5O1xuIgorICAgICAgICAiYXR0cmlidXRlIGhpZ2hwIHZlYzIgdGV4dHVyZUNvb3JkQXJyYXk7
XG4iCisgICAgICAgICJ1bmlmb3JtIGhpZ2hwIG1hdDQgcG9zaXRpb25NYXRyaXg7XG4iCisgICAg
ICAgICJ2YXJ5aW5nIGhpZ2hwIHZlYzIgdGV4dHVyZUNvb3JkO1xuIgorICAgICAgICAidm9pZCBt
YWluKHZvaWQpXG4iCisgICAgICAgICJ7XG4iCisgICAgICAgICIgICBnbF9Qb3NpdGlvbiA9IHBv
c2l0aW9uTWF0cml4ICogdmVydGV4Q29vcmRBcnJheTtcbiIKKyAgICAgICAgIiAgIHRleHR1cmVD
b29yZCA9IHRleHR1cmVDb29yZEFycmF5O1xuIgorICAgICAgICAifVxuIjsKKworLy8gUGFpbnRz
IGFuIFJHQjMyIGZyYW1lCitzdGF0aWMgY29uc3QgY2hhciAqcXRfZ2xzbF94cmdiU2hhZGVyUHJv
Z3JhbSA9CisgICAgICAgICJ1bmlmb3JtIHNhbXBsZXIyRCB0ZXhSZ2I7XG4iCisgICAgICAgICJ1
bmlmb3JtIG1lZGl1bXAgbWF0NCBjb2xvck1hdHJpeDtcbiIKKyAgICAgICAgInZhcnlpbmcgaGln
aHAgdmVjMiB0ZXh0dXJlQ29vcmQ7XG4iCisgICAgICAgICJ2b2lkIG1haW4odm9pZClcbiIKKyAg
ICAgICAgIntcbiIKKyAgICAgICAgIiAgICBoaWdocCB2ZWM0IGNvbG9yID0gdmVjNCh0ZXh0dXJl
MkQodGV4UmdiLCB0ZXh0dXJlQ29vcmQuc3QpLmJnciwgMS4wKTtcbiIKKyAgICAgICAgIiAgICBn
bF9GcmFnQ29sb3IgPSBjb2xvck1hdHJpeCAqIGNvbG9yO1xuIgorICAgICAgICAifVxuIjsKKwor
Ly8gUGFpbnRzIGFuIEFSR0IgZnJhbWUuCitzdGF0aWMgY29uc3QgY2hhciAqcXRfZ2xzbF9hcmdi
U2hhZGVyUHJvZ3JhbSA9CisgICAgICAgICJ1bmlmb3JtIHNhbXBsZXIyRCB0ZXhSZ2I7XG4iCisg
ICAgICAgICJ1bmlmb3JtIG1lZGl1bXAgbWF0NCBjb2xvck1hdHJpeDtcbiIKKyAgICAgICAgInZh
cnlpbmcgaGlnaHAgdmVjMiB0ZXh0dXJlQ29vcmQ7XG4iCisgICAgICAgICJ2b2lkIG1haW4odm9p
ZClcbiIKKyAgICAgICAgIntcbiIKKyAgICAgICAgIiAgICBoaWdocCB2ZWM0IGNvbG9yID0gdmVj
NCh0ZXh0dXJlMkQodGV4UmdiLCB0ZXh0dXJlQ29vcmQuc3QpLmJnciwgMS4wKTtcbiIKKyAgICAg
ICAgIiAgICBjb2xvciA9IGNvbG9yTWF0cml4ICogY29sb3I7XG4iCisgICAgICAgICIgICAgZ2xf
RnJhZ0NvbG9yID0gdmVjNChjb2xvci5yZ2IsIHRleHR1cmUyRCh0ZXhSZ2IsIHRleHR1cmVDb29y
ZC5zdCkuYSk7XG4iCisgICAgICAgICJ9XG4iOworCisvLyBQYWludHMgYW4gUkdCKEEpIGZyYW1l
Lgorc3RhdGljIGNvbnN0IGNoYXIgKnF0X2dsc2xfcmdiU2hhZGVyUHJvZ3JhbSA9CisgICAgICAg
ICJ1bmlmb3JtIHNhbXBsZXIyRCB0ZXhSZ2I7XG4iCisgICAgICAgICJ1bmlmb3JtIG1lZGl1bXAg
bWF0NCBjb2xvck1hdHJpeDtcbiIKKyAgICAgICAgInZhcnlpbmcgaGlnaHAgdmVjMiB0ZXh0dXJl
Q29vcmQ7XG4iCisgICAgICAgICJ2b2lkIG1haW4odm9pZClcbiIKKyAgICAgICAgIntcbiIKKyAg
ICAgICAgIiAgICBoaWdocCB2ZWM0IGNvbG9yID0gdmVjNCh0ZXh0dXJlMkQodGV4UmdiLCB0ZXh0
dXJlQ29vcmQuc3QpLnJnYiwgMS4wKTtcbiIKKyAgICAgICAgIiAgICBjb2xvciA9IGNvbG9yTWF0
cml4ICogY29sb3I7XG4iCisgICAgICAgICIgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvci5y
Z2IsIHRleHR1cmUyRCh0ZXhSZ2IsIHRleHR1cmVDb29yZC5zdCkuYSk7XG4iCisgICAgICAgICJ9
XG4iOworCisvLyBQYWludHMgYSBZVVY0MjBQIG9yIFlWMTIgZnJhbWUuCitzdGF0aWMgY29uc3Qg
Y2hhciAqcXRfZ2xzbF95dXZQbGFuYXJTaGFkZXJQcm9ncmFtID0KKyAgICAgICAgInVuaWZvcm0g
c2FtcGxlcjJEIHRleFk7XG4iCisgICAgICAgICJ1bmlmb3JtIHNhbXBsZXIyRCB0ZXhVO1xuIgor
ICAgICAgICAidW5pZm9ybSBzYW1wbGVyMkQgdGV4VjtcbiIKKyAgICAgICAgInVuaWZvcm0gbWVk
aXVtcCBtYXQ0IGNvbG9yTWF0cml4O1xuIgorICAgICAgICAidmFyeWluZyBoaWdocCB2ZWMyIHRl
eHR1cmVDb29yZDtcbiIKKyAgICAgICAgInZvaWQgbWFpbih2b2lkKVxuIgorICAgICAgICAie1xu
IgorICAgICAgICAiICAgIGhpZ2hwIHZlYzQgY29sb3IgPSB2ZWM0KFxuIgorICAgICAgICAiICAg
ICAgICAgICB0ZXh0dXJlMkQodGV4WSwgdGV4dHVyZUNvb3JkLnN0KS5yLFxuIgorICAgICAgICAi
ICAgICAgICAgICB0ZXh0dXJlMkQodGV4VSwgdGV4dHVyZUNvb3JkLnN0KS5yLFxuIgorICAgICAg
ICAiICAgICAgICAgICB0ZXh0dXJlMkQodGV4ViwgdGV4dHVyZUNvb3JkLnN0KS5yLFxuIgorICAg
ICAgICAiICAgICAgICAgICAxLjApO1xuIgorICAgICAgICAiICAgIGdsX0ZyYWdDb2xvciA9IGNv
bG9yTWF0cml4ICogY29sb3I7XG4iCisgICAgICAgICJ9XG4iOworCisKK2NsYXNzIFFWaWRlb1N1
cmZhY2VHbHNsUGFpbnRlciA6IHB1YmxpYyBRVmlkZW9TdXJmYWNlR0xQYWludGVyIHsKK3B1Ymxp
YzoKKyAgICBRVmlkZW9TdXJmYWNlR2xzbFBhaW50ZXIoUUdMQ29udGV4dCAqY29udGV4dCk7CisK
KyAgICBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6OkVycm9yIHN0YXJ0KGNvbnN0IFFWaWRlb1N1cmZh
Y2VGb3JtYXQgJmZvcm1hdCk7CisgICAgdm9pZCBzdG9wKCk7CisKKyAgICBRQWJzdHJhY3RWaWRl
b1N1cmZhY2U6OkVycm9yIHBhaW50KAorICAgICAgICAgICAgY29uc3QgUVJlY3RGICZ0YXJnZXQs
IFFQYWludGVyICpwYWludGVyLCBjb25zdCBRUmVjdEYgJnNvdXJjZSk7CisKK3ByaXZhdGU6Cisg
ICAgUUdMU2hhZGVyUHJvZ3JhbSBtX3Byb2dyYW07CisgICAgUVNpemUgbV9mcmFtZVNpemU7Cit9
OworCitRVmlkZW9TdXJmYWNlR2xzbFBhaW50ZXI6OlFWaWRlb1N1cmZhY2VHbHNsUGFpbnRlcihR
R0xDb250ZXh0ICpjb250ZXh0KQorICAgIDogUVZpZGVvU3VyZmFjZUdMUGFpbnRlcihjb250ZXh0
KQorICAgICwgbV9wcm9ncmFtKGNvbnRleHQpCit7CisgICAgbV9pbWFnZVBpeGVsRm9ybWF0cwor
ICAgICAgICAgICAgPDwgUVZpZGVvRnJhbWU6OkZvcm1hdF9SR0IzMgorICAgICAgICAgICAgPDwg
UVZpZGVvRnJhbWU6OkZvcm1hdF9BUkdCMzIKKyNpZm5kZWYgUVRfT1BFTkdMX0VTCisgICAgICAg
ICAgICA8PCBRVmlkZW9GcmFtZTo6Rm9ybWF0X1JHQjI0CisjZW5kaWYKKyAgICAgICAgICAgIDw8
IFFWaWRlb0ZyYW1lOjpGb3JtYXRfUkdCNTY1CisgICAgICAgICAgICA8PCBRVmlkZW9GcmFtZTo6
Rm9ybWF0X1lWMTIKKyAgICAgICAgICAgIDw8IFFWaWRlb0ZyYW1lOjpGb3JtYXRfWVVWNDIwUDsK
KyAgICBtX2dsUGl4ZWxGb3JtYXRzCisgICAgICAgICAgICA8PCBRVmlkZW9GcmFtZTo6Rm9ybWF0
X1JHQjMyCisgICAgICAgICAgICA8PCBRVmlkZW9GcmFtZTo6Rm9ybWF0X0FSR0IzMjsKK30KKwor
UUFic3RyYWN0VmlkZW9TdXJmYWNlOjpFcnJvciBRVmlkZW9TdXJmYWNlR2xzbFBhaW50ZXI6OnN0
YXJ0KGNvbnN0IFFWaWRlb1N1cmZhY2VGb3JtYXQgJmZvcm1hdCkKK3sKKyAgICBRX0FTU0VSVCgh
bV90ZXh0dXJlQ291bnQpOworCisgICAgUUFic3RyYWN0VmlkZW9TdXJmYWNlOjpFcnJvciBlcnJv
ciA9IFFBYnN0cmFjdFZpZGVvU3VyZmFjZTo6Tm9FcnJvcjsKKworICAgIG1fY29udGV4dC0+bWFr
ZUN1cnJlbnQoKTsKKworICAgIGNvbnN0IGNoYXIgKmZyYWdtZW50UHJvZ3JhbSA9IDA7CisKKyAg
ICBpZiAoZm9ybWF0LmhhbmRsZVR5cGUoKSA9PSBRQWJzdHJhY3RWaWRlb0J1ZmZlcjo6Tm9IYW5k
bGUpIHsKKyAgICAgICAgc3dpdGNoIChmb3JtYXQucGl4ZWxGb3JtYXQoKSkgeworICAgICAgICBj
YXNlIFFWaWRlb0ZyYW1lOjpGb3JtYXRfUkdCMzI6CisgICAgICAgICAgICBpbml0UmdiVGV4dHVy
ZUluZm8oR0xfUkdCQSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgZm9ybWF0LmZyYW1lU2l6
ZSgpKTsKKyAgICAgICAgICAgIGZyYWdtZW50UHJvZ3JhbSA9IHF0X2dsc2xfeHJnYlNoYWRlclBy
b2dyYW07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBRVmlkZW9GcmFtZTo6Rm9y
bWF0X0FSR0IzMjoKKyAgICAgICAgICAgIGluaXRSZ2JUZXh0dXJlSW5mbyhHTF9SR0JBLCBHTF9S
R0JBLCBHTF9VTlNJR05FRF9CWVRFLCBmb3JtYXQuZnJhbWVTaXplKCkpOworICAgICAgICAgICAg
ZnJhZ21lbnRQcm9ncmFtID0gcXRfZ2xzbF9hcmdiU2hhZGVyUHJvZ3JhbTsKKyAgICAgICAgICAg
IGJyZWFrOworI2lmbmRlZiBRVF9PUEVOR0xfRVMKKyAgICAgICAgY2FzZSBRVmlkZW9GcmFtZTo6
Rm9ybWF0X1JHQjI0OgorICAgICAgICAgICAgaW5pdFJnYlRleHR1cmVJbmZvKEdMX1JHQjgsIEdM
X1JHQiwgR0xfVU5TSUdORURfQllURSwgZm9ybWF0LmZyYW1lU2l6ZSgpKTsKKyAgICAgICAgICAg
IGZyYWdtZW50UHJvZ3JhbSA9IHF0X2dsc2xfcmdiU2hhZGVyUHJvZ3JhbTsKKyAgICAgICAgICAg
IGJyZWFrOworI2VuZGlmCisgICAgICAgIGNhc2UgUVZpZGVvRnJhbWU6OkZvcm1hdF9SR0I1NjU6
CisgICAgICAgICAgICBpbml0UmdiVGV4dHVyZUluZm8oR0xfUkdCLCBHTF9SR0IsIEdMX1VOU0lH
TkVEX1NIT1JUXzVfNl81LCBmb3JtYXQuZnJhbWVTaXplKCkpOworICAgICAgICAgICAgZnJhZ21l
bnRQcm9ncmFtID0gcXRfZ2xzbF9yZ2JTaGFkZXJQcm9ncmFtOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgUVZpZGVvRnJhbWU6OkZvcm1hdF9ZVjEyOgorICAgICAgICAgICAgaW5p
dFl2MTJUZXh0dXJlSW5mbyhmb3JtYXQuZnJhbWVTaXplKCkpOworICAgICAgICAgICAgZnJhZ21l
bnRQcm9ncmFtID0gcXRfZ2xzbF95dXZQbGFuYXJTaGFkZXJQcm9ncmFtOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgUVZpZGVvRnJhbWU6OkZvcm1hdF9ZVVY0MjBQOgorICAgICAg
ICAgICAgaW5pdFl1djQyMFBUZXh0dXJlSW5mbyhmb3JtYXQuZnJhbWVTaXplKCkpOworICAgICAg
ICAgICAgZnJhZ21lbnRQcm9ncmFtID0gcXRfZ2xzbF95dXZQbGFuYXJTaGFkZXJQcm9ncmFtOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoZm9ybWF0LmhhbmRsZVR5cGUoKSA9PSBRQWJzdHJh
Y3RWaWRlb0J1ZmZlcjo6R0xUZXh0dXJlSGFuZGxlKSB7CisgICAgICAgIHN3aXRjaCAoZm9ybWF0
LnBpeGVsRm9ybWF0KCkpIHsKKyAgICAgICAgY2FzZSBRVmlkZW9GcmFtZTo6Rm9ybWF0X1JHQjMy
OgorICAgICAgICBjYXNlIFFWaWRlb0ZyYW1lOjpGb3JtYXRfQVJHQjMyOgorICAgICAgICAgICAg
bV95dXYgPSBmYWxzZTsKKyAgICAgICAgICAgIG1fdGV4dHVyZUNvdW50ID0gMTsKKyAgICAgICAg
ICAgIGZyYWdtZW50UHJvZ3JhbSA9IHF0X2dsc2xfcmdiU2hhZGVyUHJvZ3JhbTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBpZiAoIWZyYWdtZW50UHJvZ3JhbSkgeworICAgICAgICBlcnJvciA9
IFFBYnN0cmFjdFZpZGVvU3VyZmFjZTo6VW5zdXBwb3J0ZWRGb3JtYXRFcnJvcjsKKyAgICB9IGVs
c2UgaWYgKCFtX3Byb2dyYW0uYWRkU2hhZGVyRnJvbVNvdXJjZUNvZGUoUUdMU2hhZGVyOjpWZXJ0
ZXgsIHF0X2dsc2xfdmVydGV4U2hhZGVyUHJvZ3JhbSkpIHsKKyAgICAgICAgcVdhcm5pbmcoIlFQ
YWludGVyVmlkZW9TdXJmYWNlOiBWZXJ0ZXggc2hhZGVyIGNvbXBpbGUgZXJyb3IgJXMiLAorICAg
ICAgICAgICAgICAgICBxUHJpbnRhYmxlKG1fcHJvZ3JhbS5sb2coKSkpOworICAgICAgICBlcnJv
ciA9IFFBYnN0cmFjdFZpZGVvU3VyZmFjZTo6UmVzb3VyY2VFcnJvcjsKKyAgICB9IGVsc2UgaWYg
KCFtX3Byb2dyYW0uYWRkU2hhZGVyRnJvbVNvdXJjZUNvZGUoUUdMU2hhZGVyOjpGcmFnbWVudCwg
ZnJhZ21lbnRQcm9ncmFtKSkgeworICAgICAgICBxV2FybmluZygiUVBhaW50ZXJWaWRlb1N1cmZh
Y2U6IFNoYWRlciBjb21waWxlIGVycm9yICVzIiwgcVByaW50YWJsZShtX3Byb2dyYW0ubG9nKCkp
KTsKKyAgICAgICAgZXJyb3IgPSBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6OlJlc291cmNlRXJyb3I7
CisgICAgICAgIG1fcHJvZ3JhbS5yZW1vdmVBbGxTaGFkZXJzKCk7CisgICAgfSBlbHNlIGlmICgh
bV9wcm9ncmFtLmxpbmsoKSkgeworICAgICAgICBxV2FybmluZygiUVBhaW50ZXJWaWRlb1N1cmZh
Y2U6IFNoYWRlciBsaW5rIGVycm9yICVzIiwgcVByaW50YWJsZShtX3Byb2dyYW0ubG9nKCkpKTsK
KyAgICAgICAgbV9wcm9ncmFtLnJlbW92ZUFsbFNoYWRlcnMoKTsKKyAgICAgICAgZXJyb3IgPSBR
QWJzdHJhY3RWaWRlb1N1cmZhY2U6OlJlc291cmNlRXJyb3I7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgbV9oYW5kbGVUeXBlID0gZm9ybWF0LmhhbmRsZVR5cGUoKTsKKyAgICAgICAgbV9zY2FuTGlu
ZURpcmVjdGlvbiA9IGZvcm1hdC5zY2FuTGluZURpcmVjdGlvbigpOworICAgICAgICBtX2ZyYW1l
U2l6ZSA9IGZvcm1hdC5mcmFtZVNpemUoKTsKKworICAgICAgICBpZiAobV9oYW5kbGVUeXBlID09
IFFBYnN0cmFjdFZpZGVvQnVmZmVyOjpOb0hhbmRsZSkKKyAgICAgICAgICAgIGdsR2VuVGV4dHVy
ZXMobV90ZXh0dXJlQ291bnQsIG1fdGV4dHVyZUlkcyk7CisgICAgfQorCisgICAgcmV0dXJuIGVy
cm9yOworfQorCit2b2lkIFFWaWRlb1N1cmZhY2VHbHNsUGFpbnRlcjo6c3RvcCgpCit7CisgICAg
bV9jb250ZXh0LT5tYWtlQ3VycmVudCgpOworCisgICAgaWYgKG1faGFuZGxlVHlwZSAhPSBRQWJz
dHJhY3RWaWRlb0J1ZmZlcjo6R0xUZXh0dXJlSGFuZGxlKQorICAgICAgICBnbERlbGV0ZVRleHR1
cmVzKG1fdGV4dHVyZUNvdW50LCBtX3RleHR1cmVJZHMpOworICAgIG1fcHJvZ3JhbS5yZW1vdmVB
bGxTaGFkZXJzKCk7CisKKyAgICBtX3RleHR1cmVDb3VudCA9IDA7CisgICAgbV9oYW5kbGVUeXBl
ID0gUUFic3RyYWN0VmlkZW9CdWZmZXI6Ok5vSGFuZGxlOworfQorCitRQWJzdHJhY3RWaWRlb1N1
cmZhY2U6OkVycm9yIFFWaWRlb1N1cmZhY2VHbHNsUGFpbnRlcjo6cGFpbnQoCisgICAgICAgIGNv
bnN0IFFSZWN0RiAmdGFyZ2V0LCBRUGFpbnRlciAqcGFpbnRlciwgY29uc3QgUVJlY3RGICZzb3Vy
Y2UpCit7CisgICAgaWYgKG1fZnJhbWUuaXNWYWxpZCgpKSB7CisgICAgICAgIHBhaW50ZXItPmJl
Z2luTmF0aXZlUGFpbnRpbmcoKTsKKworICAgICAgICBjb25zdCBpbnQgd2lkdGggPSBRR0xDb250
ZXh0OjpjdXJyZW50Q29udGV4dCgpLT5kZXZpY2UoKS0+d2lkdGgoKTsKKyAgICAgICAgY29uc3Qg
aW50IGhlaWdodCA9IFFHTENvbnRleHQ6OmN1cnJlbnRDb250ZXh0KCktPmRldmljZSgpLT5oZWln
aHQoKTsKKworICAgICAgICBjb25zdCBRVHJhbnNmb3JtIHRyYW5zZm9ybSA9IHBhaW50ZXItPmRl
dmljZVRyYW5zZm9ybSgpOworCisgICAgICAgIGNvbnN0IEdMZmxvYXQgd2ZhY3RvciA9IDIuMCAv
IHdpZHRoOworICAgICAgICBjb25zdCBHTGZsb2F0IGhmYWN0b3IgPSAtMi4wIC8gaGVpZ2h0Owor
CisgICAgICAgIGNvbnN0IEdMZmxvYXQgcG9zaXRpb25NYXRyaXhbNF1bNF0gPQorICAgICAgICB7
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyooMCwwKSovIHdmYWN0b3IgKiB0cmFu
c2Zvcm0ubTExKCkgLSB0cmFuc2Zvcm0ubTEzKCksCisgICAgICAgICAgICAgICAgLyooMCwxKSov
IGhmYWN0b3IgKiB0cmFuc2Zvcm0ubTEyKCkgKyB0cmFuc2Zvcm0ubTEzKCksCisgICAgICAgICAg
ICAgICAgLyooMCwyKSovIDAuMCwKKyAgICAgICAgICAgICAgICAvKigwLDMpKi8gdHJhbnNmb3Jt
Lm0xMygpCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgLyooMSwwKSovIHdmYWN0
b3IgKiB0cmFuc2Zvcm0ubTIxKCkgLSB0cmFuc2Zvcm0ubTIzKCksCisgICAgICAgICAgICAgICAg
LyooMSwxKSovIGhmYWN0b3IgKiB0cmFuc2Zvcm0ubTIyKCkgKyB0cmFuc2Zvcm0ubTIzKCksCisg
ICAgICAgICAgICAgICAgLyooMSwyKSovIDAuMCwKKyAgICAgICAgICAgICAgICAvKigxLDMpKi8g
dHJhbnNmb3JtLm0yMygpCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgLyooMiww
KSovIDAuMCwKKyAgICAgICAgICAgICAgICAvKigyLDEpKi8gMC4wLAorICAgICAgICAgICAgICAg
IC8qKDIsMikqLyAtMS4wLAorICAgICAgICAgICAgICAgIC8qKDIsMykqLyAwLjAKKyAgICAgICAg
ICAgIH0sIHsKKyAgICAgICAgICAgICAgICAvKigzLDApKi8gd2ZhY3RvciAqIHRyYW5zZm9ybS5k
eCgpIC0gdHJhbnNmb3JtLm0zMygpLAorICAgICAgICAgICAgICAgIC8qKDMsMSkqLyBoZmFjdG9y
ICogdHJhbnNmb3JtLmR5KCkgKyB0cmFuc2Zvcm0ubTMzKCksCisgICAgICAgICAgICAgICAgLyoo
MywyKSovIDAuMCwKKyAgICAgICAgICAgICAgICAvKigzLDMpKi8gdHJhbnNmb3JtLm0zMygpCisg
ICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgY29uc3QgR0xmbG9hdCB2VG9wID0g
bV9zY2FuTGluZURpcmVjdGlvbiA9PSBRVmlkZW9TdXJmYWNlRm9ybWF0OjpUb3BUb0JvdHRvbQor
ICAgICAgICAgICAgICAgID8gdGFyZ2V0LnRvcCgpCisgICAgICAgICAgICAgICAgOiB0YXJnZXQu
Ym90dG9tKCkgKyAxOworICAgICAgICBjb25zdCBHTGZsb2F0IHZCb3R0b20gPSBtX3NjYW5MaW5l
RGlyZWN0aW9uID09IFFWaWRlb1N1cmZhY2VGb3JtYXQ6OlRvcFRvQm90dG9tCisgICAgICAgICAg
ICAgICAgPyB0YXJnZXQuYm90dG9tKCkgKyAxCisgICAgICAgICAgICAgICAgOiB0YXJnZXQudG9w
KCk7CisKKworICAgICAgICBjb25zdCBHTGZsb2F0IHZlcnRleENvb3JkQXJyYXlbXSA9CisgICAg
ICAgIHsKKyAgICAgICAgICAgIHRhcmdldC5sZWZ0KCkgICAgICwgdkJvdHRvbSwKKyAgICAgICAg
ICAgIHRhcmdldC5yaWdodCgpICsgMSwgdkJvdHRvbSwKKyAgICAgICAgICAgIHRhcmdldC5sZWZ0
KCkgICAgICwgdlRvcCwKKyAgICAgICAgICAgIHRhcmdldC5yaWdodCgpICsgMSwgdlRvcAorICAg
ICAgICB9OworCisgICAgICAgIGNvbnN0IEdMZmxvYXQgdHhMZWZ0ID0gc291cmNlLmxlZnQoKSAv
IG1fZnJhbWVTaXplLndpZHRoKCk7CisgICAgICAgIGNvbnN0IEdMZmxvYXQgdHhSaWdodCA9IHNv
dXJjZS5yaWdodCgpIC8gbV9mcmFtZVNpemUud2lkdGgoKTsKKyAgICAgICAgY29uc3QgR0xmbG9h
dCB0eFRvcCA9IG1fc2NhbkxpbmVEaXJlY3Rpb24gPT0gUVZpZGVvU3VyZmFjZUZvcm1hdDo6VG9w
VG9Cb3R0b20KKyAgICAgICAgICAgICAgICA/IHNvdXJjZS50b3AoKSAvIG1fZnJhbWVTaXplLmhl
aWdodCgpCisgICAgICAgICAgICAgICAgOiBzb3VyY2UuYm90dG9tKCkgLyBtX2ZyYW1lU2l6ZS5o
ZWlnaHQoKTsKKyAgICAgICAgY29uc3QgR0xmbG9hdCB0eEJvdHRvbSA9IG1fc2NhbkxpbmVEaXJl
Y3Rpb24gPT0gUVZpZGVvU3VyZmFjZUZvcm1hdDo6VG9wVG9Cb3R0b20KKyAgICAgICAgICAgICAg
ICA/IHNvdXJjZS5ib3R0b20oKSAvIG1fZnJhbWVTaXplLmhlaWdodCgpCisgICAgICAgICAgICAg
ICAgOiBzb3VyY2UudG9wKCkgLyBtX2ZyYW1lU2l6ZS5oZWlnaHQoKTsKKworICAgICAgICBjb25z
dCBHTGZsb2F0IHRleHR1cmVDb29yZEFycmF5W10gPQorICAgICAgICB7CisgICAgICAgICAgICB0
eExlZnQgLCB0eEJvdHRvbSwKKyAgICAgICAgICAgIHR4UmlnaHQsIHR4Qm90dG9tLAorICAgICAg
ICAgICAgdHhMZWZ0ICwgdHhUb3AsCisgICAgICAgICAgICB0eFJpZ2h0LCB0eFRvcAorICAgICAg
ICB9OworCisgICAgICAgIG1fcHJvZ3JhbS5iaW5kKCk7CisKKyAgICAgICAgbV9wcm9ncmFtLmVu
YWJsZUF0dHJpYnV0ZUFycmF5KCJ2ZXJ0ZXhDb29yZEFycmF5Iik7CisgICAgICAgIG1fcHJvZ3Jh
bS5lbmFibGVBdHRyaWJ1dGVBcnJheSgidGV4dHVyZUNvb3JkQXJyYXkiKTsKKyAgICAgICAgbV9w
cm9ncmFtLnNldEF0dHJpYnV0ZUFycmF5KCJ2ZXJ0ZXhDb29yZEFycmF5IiwgdmVydGV4Q29vcmRB
cnJheSwgMik7CisgICAgICAgIG1fcHJvZ3JhbS5zZXRBdHRyaWJ1dGVBcnJheSgidGV4dHVyZUNv
b3JkQXJyYXkiLCB0ZXh0dXJlQ29vcmRBcnJheSwgMik7CisgICAgICAgIG1fcHJvZ3JhbS5zZXRV
bmlmb3JtVmFsdWUoInBvc2l0aW9uTWF0cml4IiwgcG9zaXRpb25NYXRyaXgpOworCisgICAgICAg
IGlmIChtX3RleHR1cmVDb3VudCA9PSAzKSB7CisgICAgICAgICAgICBnbEFjdGl2ZVRleHR1cmUo
R0xfVEVYVFVSRTApOworICAgICAgICAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBt
X3RleHR1cmVJZHNbMF0pOworICAgICAgICAgICAgZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUx
KTsKKyAgICAgICAgICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlSWRz
WzFdKTsKKyAgICAgICAgICAgIGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMik7CisgICAgICAg
ICAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZUlkc1syXSk7CisgICAg
ICAgICAgICBnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApOworCisgICAgICAgICAgICBtX3By
b2dyYW0uc2V0VW5pZm9ybVZhbHVlKCJ0ZXhZIiwgMCk7CisgICAgICAgICAgICBtX3Byb2dyYW0u
c2V0VW5pZm9ybVZhbHVlKCJ0ZXhVIiwgMSk7CisgICAgICAgICAgICBtX3Byb2dyYW0uc2V0VW5p
Zm9ybVZhbHVlKCJ0ZXhWIiwgMik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBnbEFj
dGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApOworICAgICAgICAgICAgZ2xCaW5kVGV4dHVyZShHTF9U
RVhUVVJFXzJELCBtX3RleHR1cmVJZHNbMF0pOworCisgICAgICAgICAgICBtX3Byb2dyYW0uc2V0
VW5pZm9ybVZhbHVlKCJ0ZXhSZ2IiLCAwKTsKKyAgICAgICAgfQorICAgICAgICBtX3Byb2dyYW0u
c2V0VW5pZm9ybVZhbHVlKCJjb2xvck1hdHJpeCIsIG1fY29sb3JNYXRyaXgpOworCisgICAgICAg
IGdsRHJhd0FycmF5cyhHTF9UUklBTkdMRV9TVFJJUCwgMCwgNCk7CisKKyAgICAgICAgbV9wcm9n
cmFtLnJlbGVhc2UoKTsKKworICAgICAgICBwYWludGVyLT5lbmROYXRpdmVQYWludGluZygpOwor
ICAgIH0KKyAgICByZXR1cm4gUUFic3RyYWN0VmlkZW9TdXJmYWNlOjpOb0Vycm9yOworfQorCisj
ZW5kaWYKKworUVBhaW50ZXJWaWRlb1N1cmZhY2U6OlFQYWludGVyVmlkZW9TdXJmYWNlKFFPYmpl
Y3QgKnBhcmVudCkKKyAgICA6IFFBYnN0cmFjdFZpZGVvU3VyZmFjZShwYXJlbnQpCisgICAgLCBt
X3BhaW50ZXIoMCkKKyNpZiAhZGVmaW5lZChRVF9OT19PUEVOR0wpICYmICFkZWZpbmVkKFFUX09Q
RU5HTF9FU18xX0NMKSAmJiAhZGVmaW5lZChRVF9PUEVOR0xfRVNfMSkKKyAgICAsIG1fZ2xDb250
ZXh0KDApCisgICAgLCBtX3NoYWRlclR5cGVzKE5vU2hhZGVycykKKyAgICAsIG1fc2hhZGVyVHlw
ZShOb1NoYWRlcnMpCisjZW5kaWYKKyAgICAsIG1fYnJpZ2h0bmVzcygwKQorICAgICwgbV9jb250
cmFzdCgwKQorICAgICwgbV9odWUoMCkKKyAgICAsIG1fc2F0dXJhdGlvbigwKQorICAgICwgbV9w
aXhlbEZvcm1hdChRVmlkZW9GcmFtZTo6Rm9ybWF0X0ludmFsaWQpCisgICAgLCBtX2NvbG9yc0Rp
cnR5KHRydWUpCisgICAgLCBtX3JlYWR5KGZhbHNlKQoreworfQorCitRUGFpbnRlclZpZGVvU3Vy
ZmFjZTo6flFQYWludGVyVmlkZW9TdXJmYWNlKCkKK3sKKyAgICBpZiAoaXNBY3RpdmUoKSkKKyAg
ICAgICAgbV9wYWludGVyLT5zdG9wKCk7CisKKyAgICBkZWxldGUgbV9wYWludGVyOworfQorCitR
TGlzdDxRVmlkZW9GcmFtZTo6UGl4ZWxGb3JtYXQ+IFFQYWludGVyVmlkZW9TdXJmYWNlOjpzdXBw
b3J0ZWRQaXhlbEZvcm1hdHMoCisgICAgICAgIFFBYnN0cmFjdFZpZGVvQnVmZmVyOjpIYW5kbGVU
eXBlIGhhbmRsZVR5cGUpIGNvbnN0Cit7CisgICAgaWYgKCFtX3BhaW50ZXIpCisgICAgICAgIGNv
bnN0X2Nhc3Q8UVBhaW50ZXJWaWRlb1N1cmZhY2UgKj4odGhpcyktPmNyZWF0ZVBhaW50ZXIoKTsK
KworICAgIHJldHVybiBtX3BhaW50ZXItPnN1cHBvcnRlZFBpeGVsRm9ybWF0cyhoYW5kbGVUeXBl
KTsKK30KKworYm9vbCBRUGFpbnRlclZpZGVvU3VyZmFjZTo6aXNGb3JtYXRTdXBwb3J0ZWQoCisg
ICAgICAgIGNvbnN0IFFWaWRlb1N1cmZhY2VGb3JtYXQgJmZvcm1hdCwgUVZpZGVvU3VyZmFjZUZv
cm1hdCAqc2ltaWxhcikgY29uc3QKK3sKKyAgICBpZiAoIW1fcGFpbnRlcikKKyAgICAgICAgY29u
c3RfY2FzdDxRUGFpbnRlclZpZGVvU3VyZmFjZSAqPih0aGlzKS0+Y3JlYXRlUGFpbnRlcigpOwor
CisgICAgcmV0dXJuIG1fcGFpbnRlci0+aXNGb3JtYXRTdXBwb3J0ZWQoZm9ybWF0LCBzaW1pbGFy
KTsKK30KKworYm9vbCBRUGFpbnRlclZpZGVvU3VyZmFjZTo6c3RhcnQoY29uc3QgUVZpZGVvU3Vy
ZmFjZUZvcm1hdCAmZm9ybWF0KQoreworICAgIGlmIChpc0FjdGl2ZSgpKQorICAgICAgICBtX3Bh
aW50ZXItPnN0b3AoKTsKKworICAgIGlmICghbV9wYWludGVyKQorICAgICAgICBjcmVhdGVQYWlu
dGVyKCk7CisKKyAgICBpZiAoZm9ybWF0LmZyYW1lU2l6ZSgpLmlzRW1wdHkoKSkKKyAgICAgICAg
c2V0RXJyb3IoVW5zdXBwb3J0ZWRGb3JtYXRFcnJvcik7CisgICAgZWxzZSB7CisgICAgICAgIFFB
YnN0cmFjdFZpZGVvU3VyZmFjZTo6RXJyb3IgZXJyb3IgPSBtX3BhaW50ZXItPnN0YXJ0KGZvcm1h
dCk7CisKKyAgICAgICAgaWYgKGVycm9yICE9IFFBYnN0cmFjdFZpZGVvU3VyZmFjZTo6Tm9FcnJv
cikKKyAgICAgICAgICAgIHNldEVycm9yKGVycm9yKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBtX3BpeGVsRm9ybWF0ID0gZm9ybWF0LnBpeGVsRm9ybWF0KCk7CisgICAgICAgICAgICBt
X2ZyYW1lU2l6ZSA9IGZvcm1hdC5mcmFtZVNpemUoKTsKKyAgICAgICAgICAgIG1fc291cmNlUmVj
dCA9IGZvcm1hdC52aWV3cG9ydCgpOworICAgICAgICAgICAgbV9jb2xvcnNEaXJ0eSA9IHRydWU7
CisgICAgICAgICAgICBtX3JlYWR5ID0gdHJ1ZTsKKworICAgICAgICAgICAgcmV0dXJuIFFBYnN0
cmFjdFZpZGVvU3VyZmFjZTo6c3RhcnQoZm9ybWF0KTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IFFBYnN0cmFjdFZpZGVvU3VyZmFjZTo6c3RvcCgpOworCisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit2b2lkIFFQYWludGVyVmlkZW9TdXJmYWNlOjpzdG9wKCkKK3sKKyAgICBpZiAoaXNBY3RpdmUo
KSkgeworICAgICAgICBtX3BhaW50ZXItPnN0b3AoKTsKKyAgICAgICAgbV9yZWFkeSA9IGZhbHNl
OworCisgICAgICAgIFFBYnN0cmFjdFZpZGVvU3VyZmFjZTo6c3RvcCgpOworICAgIH0KK30KKwor
Ym9vbCBRUGFpbnRlclZpZGVvU3VyZmFjZTo6cHJlc2VudChjb25zdCBRVmlkZW9GcmFtZSAmZnJh
bWUpCit7CisgICAgaWYgKCFtX3JlYWR5KSB7CisgICAgICAgIGlmICghaXNBY3RpdmUoKSkKKyAg
ICAgICAgICAgIHNldEVycm9yKFN0b3BwZWRFcnJvcik7CisgICAgfSBlbHNlIGlmIChmcmFtZS5p
c1ZhbGlkKCkgCisgICAgICAgICAgICAmJiAoZnJhbWUucGl4ZWxGb3JtYXQoKSAhPSBtX3BpeGVs
Rm9ybWF0IHx8IGZyYW1lLnNpemUoKSAhPSBtX2ZyYW1lU2l6ZSkpIHsKKyAgICAgICAgc2V0RXJy
b3IoSW5jb3JyZWN0Rm9ybWF0RXJyb3IpOworCisgICAgICAgIHN0b3AoKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6OkVycm9yIGVycm9yID0gbV9wYWludGVy
LT5zZXRDdXJyZW50RnJhbWUoZnJhbWUpOworCisgICAgICAgIGlmIChlcnJvciAhPSBRQWJzdHJh
Y3RWaWRlb1N1cmZhY2U6Ok5vRXJyb3IpIHsKKyAgICAgICAgICAgIHNldEVycm9yKGVycm9yKTsK
KworICAgICAgICAgICAgc3RvcCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9y
ZWFkeSA9IGZhbHNlOworCisgICAgICAgICAgICBlbWl0IGZyYW1lQ2hhbmdlZCgpOworCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2ludCBRUGFpbnRlclZpZGVvU3VyZmFjZTo6YnJpZ2h0bmVzcygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fYnJpZ2h0bmVzczsKK30KKwordm9pZCBRUGFpbnRlclZpZGVvU3VyZmFjZTo6
c2V0QnJpZ2h0bmVzcyhpbnQgYnJpZ2h0bmVzcykKK3sKKyAgICBtX2JyaWdodG5lc3MgPSBicmln
aHRuZXNzOworCisgICAgbV9jb2xvcnNEaXJ0eSA9IHRydWU7Cit9CisKK2ludCBRUGFpbnRlclZp
ZGVvU3VyZmFjZTo6Y29udHJhc3QoKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbnRyYXN0Owor
fQorCit2b2lkIFFQYWludGVyVmlkZW9TdXJmYWNlOjpzZXRDb250cmFzdChpbnQgY29udHJhc3Qp
Cit7CisgICAgbV9jb250cmFzdCA9IGNvbnRyYXN0OworCisgICAgbV9jb2xvcnNEaXJ0eSA9IHRy
dWU7Cit9CisKK2ludCBRUGFpbnRlclZpZGVvU3VyZmFjZTo6aHVlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9odWU7Cit9CisKK3ZvaWQgUVBhaW50ZXJWaWRlb1N1cmZhY2U6OnNldEh1ZShpbnQg
aHVlKQoreworICAgIG1faHVlID0gaHVlOworCisgICAgbV9jb2xvcnNEaXJ0eSA9IHRydWU7Cit9
CisKK2ludCBRUGFpbnRlclZpZGVvU3VyZmFjZTo6c2F0dXJhdGlvbigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fc2F0dXJhdGlvbjsKK30KKwordm9pZCBRUGFpbnRlclZpZGVvU3VyZmFjZTo6c2V0
U2F0dXJhdGlvbihpbnQgc2F0dXJhdGlvbikKK3sKKyAgICBtX3NhdHVyYXRpb24gPSBzYXR1cmF0
aW9uOworCisgICAgbV9jb2xvcnNEaXJ0eSA9IHRydWU7Cit9CisKK2Jvb2wgUVBhaW50ZXJWaWRl
b1N1cmZhY2U6OmlzUmVhZHkoKSBjb25zdAoreworICAgIHJldHVybiBtX3JlYWR5OworfQorCit2
b2lkIFFQYWludGVyVmlkZW9TdXJmYWNlOjpzZXRSZWFkeShib29sIHJlYWR5KQoreworICAgIG1f
cmVhZHkgPSByZWFkeTsKK30KKwordm9pZCBRUGFpbnRlclZpZGVvU3VyZmFjZTo6cGFpbnQoUVBh
aW50ZXIgKnBhaW50ZXIsIGNvbnN0IFFSZWN0RiAmdGFyZ2V0LCBjb25zdCBRUmVjdEYgJnNvdXJj
ZSkKK3sKKyAgICBpZiAoIWlzQWN0aXZlKCkpCisgICAgICAgIHBhaW50ZXItPmZpbGxSZWN0KHRh
cmdldCwgUUJydXNoKFF0OjpibGFjaykpOworICAgIGVsc2UgeworICAgICAgICBpZiAobV9jb2xv
cnNEaXJ0eSkgeworICAgICAgICAgICAgbV9wYWludGVyLT51cGRhdGVDb2xvcnMobV9icmlnaHRu
ZXNzLCBtX2NvbnRyYXN0LCBtX2h1ZSwgbV9zYXR1cmF0aW9uKTsKKyAgICAgICAgICAgIG1fY29s
b3JzRGlydHkgPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFFSZWN0RiBzb3Vy
Y2VSZWN0KAorICAgICAgICAgICAgICAgIG1fc291cmNlUmVjdC54KCkgKyBtX3NvdXJjZVJlY3Qu
d2lkdGgoKSAqIHNvdXJjZS54KCksCisgICAgICAgICAgICAgICAgbV9zb3VyY2VSZWN0LnkoKSAr
IG1fc291cmNlUmVjdC5oZWlnaHQoKSAqIHNvdXJjZS55KCksCisgICAgICAgICAgICAgICAgbV9z
b3VyY2VSZWN0LndpZHRoKCkgKiBzb3VyY2Uud2lkdGgoKSwKKyAgICAgICAgICAgICAgICBtX3Nv
dXJjZVJlY3QuaGVpZ2h0KCkgKiBzb3VyY2UuaGVpZ2h0KCkpOworCisgICAgICAgIFFBYnN0cmFj
dFZpZGVvU3VyZmFjZTo6RXJyb3IgZXJyb3IgPSBtX3BhaW50ZXItPnBhaW50KHRhcmdldCwgcGFp
bnRlciwgc291cmNlUmVjdCk7CisKKyAgICAgICAgaWYgKGVycm9yICE9IFFBYnN0cmFjdFZpZGVv
U3VyZmFjZTo6Tm9FcnJvcikgeworICAgICAgICAgICAgc2V0RXJyb3IoZXJyb3IpOworCisgICAg
ICAgICAgICBzdG9wKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKyNpZiAhZGVmaW5lZChRVF9O
T19PUEVOR0wpICYmICFkZWZpbmVkKFFUX09QRU5HTF9FU18xX0NMKSAmJiAhZGVmaW5lZChRVF9P
UEVOR0xfRVNfMSkKKworY29uc3QgUUdMQ29udGV4dCAqUVBhaW50ZXJWaWRlb1N1cmZhY2U6Omds
Q29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZ2xDb250ZXh0OworfQorCit2b2lkIFFQ
YWludGVyVmlkZW9TdXJmYWNlOjpzZXRHTENvbnRleHQoUUdMQ29udGV4dCAqY29udGV4dCkKK3sK
KyAgICBpZiAobV9nbENvbnRleHQgPT0gY29udGV4dCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9nbENvbnRleHQgPSBjb250ZXh0OworCisgICAgbV9zaGFkZXJUeXBlcyA9IE5vU2hhZGVyczsK
KworICAgIGlmIChtX2dsQ29udGV4dCkgeworICAgICAgICBtX2dsQ29udGV4dC0+bWFrZUN1cnJl
bnQoKTsKKworICAgICAgICBjb25zdCBRQnl0ZUFycmF5IGV4dGVuc2lvbnMocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBjaGFyICo+KGdsR2V0U3RyaW5nKEdMX0VYVEVOU0lPTlMpKSk7CisjaWZuZGVm
IFFUX09QRU5HTF9FUworCisgICAgICAgIGlmIChleHRlbnNpb25zLmNvbnRhaW5zKCJBUkJfZnJh
Z21lbnRfcHJvZ3JhbSIpKQorICAgICAgICAgICAgbV9zaGFkZXJUeXBlcyB8PSBGcmFnbWVudFBy
b2dyYW1TaGFkZXI7CisjZW5kaWYKKworICAgICAgICBpZiAoUUdMU2hhZGVyUHJvZ3JhbTo6aGFz
T3BlbkdMU2hhZGVyUHJvZ3JhbXMobV9nbENvbnRleHQpCisgICAgICAgICAgICAgICAgJiYgZXh0
ZW5zaW9ucy5jb250YWlucygiQVJCX3NoYWRlcl9vYmplY3RzIikpCisgICAgICAgICAgICBtX3No
YWRlclR5cGVzIHw9IEdsc2xTaGFkZXI7CisgICAgfQorCisgICAgU2hhZGVyVHlwZSB0eXBlID0g
KG1fc2hhZGVyVHlwZSAmIG1fc2hhZGVyVHlwZXMpCisgICAgICAgICAgICA/IG1fc2hhZGVyVHlw
ZQorICAgICAgICAgICAgOiBOb1NoYWRlcnM7CisKKyAgICBpZiAodHlwZSAhPSBtX3NoYWRlclR5
cGUgfHwgdHlwZSAhPSBOb1NoYWRlcnMpIHsKKyAgICAgICAgbV9zaGFkZXJUeXBlID0gdHlwZTsK
KworICAgICAgICBpZiAoaXNBY3RpdmUoKSkgeworICAgICAgICAgICAgbV9wYWludGVyLT5zdG9w
KCk7CisgICAgICAgICAgICBkZWxldGUgbV9wYWludGVyOworICAgICAgICAgICAgbV9wYWludGVy
ID0gMDsKKyAgICAgICAgICAgIG1fcmVhZHkgPSBmYWxzZTsKKworICAgICAgICAgICAgc2V0RXJy
b3IoUmVzb3VyY2VFcnJvcik7CisgICAgICAgICAgICBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6OnN0
b3AoKTsKKyAgICAgICAgfQorICAgICAgICBlbWl0IHN1cHBvcnRlZEZvcm1hdHNDaGFuZ2VkKCk7
CisgICAgfQorfQorCitRUGFpbnRlclZpZGVvU3VyZmFjZTo6U2hhZGVyVHlwZXMgUVBhaW50ZXJW
aWRlb1N1cmZhY2U6OnN1cHBvcnRlZFNoYWRlclR5cGVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9zaGFkZXJUeXBlczsKK30KKworUVBhaW50ZXJWaWRlb1N1cmZhY2U6OlNoYWRlclR5cGUgUVBh
aW50ZXJWaWRlb1N1cmZhY2U6OnNoYWRlclR5cGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3No
YWRlclR5cGU7Cit9CisKK3ZvaWQgUVBhaW50ZXJWaWRlb1N1cmZhY2U6OnNldFNoYWRlclR5cGUo
U2hhZGVyVHlwZSB0eXBlKQoreworICAgIGlmICghKHR5cGUgJiBtX3NoYWRlclR5cGVzKSkKKyAg
ICAgICAgdHlwZSA9IE5vU2hhZGVyczsKKworICAgIGlmICh0eXBlICE9IG1fc2hhZGVyVHlwZSkg
eworICAgICAgICBtX3NoYWRlclR5cGUgPSB0eXBlOworCisgICAgICAgIGlmIChpc0FjdGl2ZSgp
KSB7CisgICAgICAgICAgICBtX3BhaW50ZXItPnN0b3AoKTsKKyAgICAgICAgICAgIGRlbGV0ZSBt
X3BhaW50ZXI7CisgICAgICAgICAgICBtX3BhaW50ZXIgPSAwOworICAgICAgICAgICAgbV9yZWFk
eSA9IGZhbHNlOworCisgICAgICAgICAgICBzZXRFcnJvcihSZXNvdXJjZUVycm9yKTsKKyAgICAg
ICAgICAgIFFBYnN0cmFjdFZpZGVvU3VyZmFjZTo6c3RvcCgpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgZGVsZXRlIG1fcGFpbnRlcjsKKyAgICAgICAgICAgIG1fcGFpbnRlciA9IDA7
CisgICAgICAgIH0KKyAgICAgICAgZW1pdCBzdXBwb3J0ZWRGb3JtYXRzQ2hhbmdlZCgpOworICAg
IH0KK30KKworI2VuZGlmCisKK3ZvaWQgUVBhaW50ZXJWaWRlb1N1cmZhY2U6OmNyZWF0ZVBhaW50
ZXIoKQoreworICAgIFFfQVNTRVJUKCFtX3BhaW50ZXIpOworCisjaWYgIWRlZmluZWQoUVRfTk9f
T1BFTkdMKSAmJiAhZGVmaW5lZChRVF9PUEVOR0xfRVNfMV9DTCkgJiYgIWRlZmluZWQoUVRfT1BF
TkdMX0VTXzEpCisgICAgc3dpdGNoIChtX3NoYWRlclR5cGUpIHsKKyNpZm5kZWYgUVRfT1BFTkdM
X0VTCisgICAgY2FzZSBGcmFnbWVudFByb2dyYW1TaGFkZXI6CisgICAgICAgIFFfQVNTRVJUKG1f
Z2xDb250ZXh0KTsKKyAgICAgICAgbV9nbENvbnRleHQtPm1ha2VDdXJyZW50KCk7CisgICAgICAg
IG1fcGFpbnRlciA9IG5ldyBRVmlkZW9TdXJmYWNlQXJiRnBQYWludGVyKG1fZ2xDb250ZXh0KTsK
KyAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICBjYXNlIEdsc2xTaGFkZXI6CisgICAgICAgIFFf
QVNTRVJUKG1fZ2xDb250ZXh0KTsKKyAgICAgICAgbV9nbENvbnRleHQtPm1ha2VDdXJyZW50KCk7
CisgICAgICAgIG1fcGFpbnRlciA9IG5ldyBRVmlkZW9TdXJmYWNlR2xzbFBhaW50ZXIobV9nbENv
bnRleHQpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBtX3BhaW50ZXIg
PSBuZXcgUVZpZGVvU3VyZmFjZVJhc3RlclBhaW50ZXI7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyNlbHNlCisgICAgbV9wYWludGVyID0gbmV3IFFWaWRlb1N1cmZhY2VSYXN0ZXJQYWludGVyOwor
I2VuZGlmCit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2luY2x1ZGUgIm1vY19RUGFp
bnRlclZpZGVvU3VyZmFjZS5jcHAiCisKKwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9RUGFpbnRlclZpZGVvU3VyZmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvUVBhaW50ZXJWaWRlb1N1cmZhY2UuaAkocmV2aXNpb24gMCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvUVBhaW50ZXJWaWRlb1N1cmZhY2UuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAg
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgUVBh
aW50ZXJWaWRlb1N1cmZhY2VfaAorI2RlZmluZSBRUGFpbnRlclZpZGVvU3VyZmFjZV9oCisKKyNp
bmNsdWRlIDxRdENvcmUvcXNpemUuaD4KKyNpbmNsdWRlIDxRdEd1aS9xaW1hZ2UuaD4KKyNpbmNs
dWRlIDxRdEd1aS9xbWF0cml4NHg0Lmg+CisjaW5jbHVkZSA8UXRHdWkvcXBhaW50ZW5naW5lLmg+
CisjaW5jbHVkZSA8UXRNdWx0aW1lZGlhL3FhYnN0cmFjdHZpZGVvc3VyZmFjZS5oPgorI2luY2x1
ZGUgPFF0TXVsdGltZWRpYS9xdmlkZW9mcmFtZS5oPgorCitRVF9CRUdJTl9OQU1FU1BBQ0UKK2Ns
YXNzIFFHTENvbnRleHQ7CitRVF9FTkRfTkFNRVNQQUNFCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgUVZpZGVvU3VyZmFjZVBhaW50ZXI7CitjbGFzcyBRX0FVVE9URVNUX0VYUE9SVCBR
UGFpbnRlclZpZGVvU3VyZmFjZSA6IHB1YmxpYyBRQWJzdHJhY3RWaWRlb1N1cmZhY2UgeworICAg
IFFfT0JKRUNUCitwdWJsaWM6CisgICAgZXhwbGljaXQgUVBhaW50ZXJWaWRlb1N1cmZhY2UoUU9i
amVjdCAqcGFyZW50ID0gMCk7CisgICAgflFQYWludGVyVmlkZW9TdXJmYWNlKCk7CisKKyAgICBR
TGlzdDxRVmlkZW9GcmFtZTo6UGl4ZWxGb3JtYXQ+IHN1cHBvcnRlZFBpeGVsRm9ybWF0cygKKyAg
ICAgICAgICAgIFFBYnN0cmFjdFZpZGVvQnVmZmVyOjpIYW5kbGVUeXBlIGhhbmRsZVR5cGUgPSBR
QWJzdHJhY3RWaWRlb0J1ZmZlcjo6Tm9IYW5kbGUpIGNvbnN0OworCisgICAgYm9vbCBpc0Zvcm1h
dFN1cHBvcnRlZCgKKyAgICAgICAgICAgIGNvbnN0IFFWaWRlb1N1cmZhY2VGb3JtYXQgJmZvcm1h
dCwgUVZpZGVvU3VyZmFjZUZvcm1hdCAqc2ltaWxhciA9IDApIGNvbnN0OworCisgICAgYm9vbCBz
dGFydChjb25zdCBRVmlkZW9TdXJmYWNlRm9ybWF0ICZmb3JtYXQpOworICAgIHZvaWQgc3RvcCgp
OworCisgICAgYm9vbCBwcmVzZW50KGNvbnN0IFFWaWRlb0ZyYW1lICZmcmFtZSk7CisKKyAgICBp
bnQgYnJpZ2h0bmVzcygpIGNvbnN0OworICAgIHZvaWQgc2V0QnJpZ2h0bmVzcyhpbnQgYnJpZ2h0
bmVzcyk7CisKKyAgICBpbnQgY29udHJhc3QoKSBjb25zdDsKKyAgICB2b2lkIHNldENvbnRyYXN0
KGludCBjb250cmFzdCk7CisKKyAgICBpbnQgaHVlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRIdWUo
aW50IGh1ZSk7CisKKyAgICBpbnQgc2F0dXJhdGlvbigpIGNvbnN0OworICAgIHZvaWQgc2V0U2F0
dXJhdGlvbihpbnQgc2F0dXJhdGlvbik7CisKKyAgICBib29sIGlzUmVhZHkoKSBjb25zdDsKKyAg
ICB2b2lkIHNldFJlYWR5KGJvb2wgcmVhZHkpOworCisgICAgdm9pZCBwYWludChRUGFpbnRlciAq
cGFpbnRlciwgY29uc3QgUVJlY3RGICZ0YXJnZXQsIGNvbnN0IFFSZWN0RiAmc291cmNlID0gUVJl
Y3RGKDAsIDAsIDEsIDEpKTsKKworI2lmICFkZWZpbmVkKFFUX05PX09QRU5HTCkgJiYgIWRlZmlu
ZWQoUVRfT1BFTkdMX0VTXzFfQ0wpICYmICFkZWZpbmVkKFFUX09QRU5HTF9FU18xKQorICAgIGNv
bnN0IFFHTENvbnRleHQgKmdsQ29udGV4dCgpIGNvbnN0OworICAgIHZvaWQgc2V0R0xDb250ZXh0
KFFHTENvbnRleHQgKmNvbnRleHQpOworCisgICAgZW51bSBTaGFkZXJUeXBlIHsKKyAgICAgICAg
Tm9TaGFkZXJzID0gMHgwMCwKKyAgICAgICAgRnJhZ21lbnRQcm9ncmFtU2hhZGVyID0gMHgwMSwK
KyAgICAgICAgR2xzbFNoYWRlciA9IDB4MDIKKyAgICB9OworCisgICAgUV9ERUNMQVJFX0ZMQUdT
KFNoYWRlclR5cGVzLCBTaGFkZXJUeXBlKQorCisgICAgU2hhZGVyVHlwZXMgc3VwcG9ydGVkU2hh
ZGVyVHlwZXMoKSBjb25zdDsKKworICAgIFNoYWRlclR5cGUgc2hhZGVyVHlwZSgpIGNvbnN0Owor
ICAgIHZvaWQgc2V0U2hhZGVyVHlwZShTaGFkZXJUeXBlIHR5cGUpOworI2VuZGlmCisKK1FfU0lH
TkFMUzoKKyAgICB2b2lkIGZyYW1lQ2hhbmdlZCgpOworCitwcml2YXRlOgorICAgIHZvaWQgY3Jl
YXRlUGFpbnRlcigpOworCisgICAgUVZpZGVvU3VyZmFjZVBhaW50ZXIgKm1fcGFpbnRlcjsKKyNp
ZiAhZGVmaW5lZChRVF9OT19PUEVOR0wpICYmICFkZWZpbmVkKFFUX09QRU5HTF9FU18xX0NMKSAm
JiAhZGVmaW5lZChRVF9PUEVOR0xfRVNfMSkKKyAgICBRR0xDb250ZXh0ICptX2dsQ29udGV4dDsK
KyAgICBTaGFkZXJUeXBlcyBtX3NoYWRlclR5cGVzOworICAgIFNoYWRlclR5cGUgbV9zaGFkZXJU
eXBlOworI2VuZGlmCisgICAgaW50IG1fYnJpZ2h0bmVzczsKKyAgICBpbnQgbV9jb250cmFzdDsK
KyAgICBpbnQgbV9odWU7CisgICAgaW50IG1fc2F0dXJhdGlvbjsKKworICAgIFFWaWRlb0ZyYW1l
OjpQaXhlbEZvcm1hdCBtX3BpeGVsRm9ybWF0OworICAgIFFTaXplIG1fZnJhbWVTaXplOworICAg
IFFSZWN0IG1fc291cmNlUmVjdDsKKyAgICBib29sIG1fY29sb3JzRGlydHk7CisgICAgYm9vbCBt
X3JlYWR5OworfTsKKworI2lmICFkZWZpbmVkKFFUX05PX09QRU5HTCkgJiYgIWRlZmluZWQoUVRf
T1BFTkdMX0VTXzFfQ0wpICYmICFkZWZpbmVkKFFUX09QRU5HTF9FU18xKQorUV9ERUNMQVJFX09Q
RVJBVE9SU19GT1JfRkxBR1MoUVBhaW50ZXJWaWRlb1N1cmZhY2U6OlNoYWRlclR5cGVzKQorI2Vu
ZGlmCisKK30KKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1l
UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5j
cHAJKHJldmlzaW9uIDU0NDc1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkZvbnQuaCIK
ICNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
KyNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVu
dC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
CkBAIC00Nyw2ICs0OCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVkZSAiUmVu
ZGVyU2xpZGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKKyNpbmNsdWRlICJUaW1lUmFu
Z2VzLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVRdC5oIgogI2luY2x1ZGUgIlVzZXJBZ2Vu
dFN0eWxlU2hlZXRzLmgiCiAjaW5jbHVkZSAicXdlYnBhZ2UuaCIKQEAgLTkyMSwxNCArOTIzLDEw
IEBAIGJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYU11dGVCdXR0b24KICAgICBjb25zdCBR
UG9pbnRGIHNwZWFrZXJQb2x5Z29uWzZdID0geyBRUG9pbnRGKDIwLCAzMCksIFFQb2ludEYoNTAs
IDMwKSwgUVBvaW50Rig4MCwgMCksCiAgICAgICAgICAgICBRUG9pbnRGKDgwLCAxMDApLCBRUG9p
bnRGKDUwLCA3MCksIFFQb2ludEYoMjAsIDcwKX07CiAKLSAgICBwLnBhaW50ZXItPnNldEJydXNo
KGdldE1lZGlhQ29udHJvbEZvcmVncm91bmRDb2xvcihvKSk7CisgICAgcC5wYWludGVyLT5zZXRQ
ZW4obWVkaWFFbGVtZW50LT5tdXRlZCgpID8gUXQ6OmRhcmtHcmF5IDogUXQ6OmxpZ2h0R3JheSk7
CisgICAgcC5wYWludGVyLT5zZXRCcnVzaChtZWRpYUVsZW1lbnQtPm11dGVkKCkgPyBRdDo6ZGFy
a1JlZCA6IGdldE1lZGlhQ29udHJvbEZvcmVncm91bmRDb2xvcihvKSk7CiAgICAgcC5wYWludGVy
LT5kcmF3UG9seWdvbihzcGVha2VyUG9seWdvbiwgNik7CiAKLSAgICBpZiAobWVkaWFFbGVtZW50
LT5tdXRlZCgpKSB7Ci0gICAgICAgIHAucGFpbnRlci0+c2V0UGVuKFF0OjpyZWQpOwotICAgICAg
ICBwLnBhaW50ZXItPmRyYXdMaW5lKDAsIDEwMCwgMTAwLCAwKTsKLSAgICB9Ci0KICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKQEAgLTk3MSw2ICs5NjksOTEgQEAgYm9vbCBSZW5kZXJUaGVtZVF0Ojpw
YWludE1lZGlhU2Vla0ZvcndhcgogICAgIHJldHVybiBmYWxzZTsKIH0KIAorYm9vbCBSZW5kZXJU
aGVtZVF0OjpwYWludE1lZGlhQ3VycmVudFRpbWUoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5k
ZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQoreworICAg
IFN0eWxlUGFpbnRlciBwKHRoaXMsIHBhaW50SW5mbyk7CisgICAgaWYgKCFwLmlzVmFsaWQoKSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoby0+c3R5bGUoKSkgeworICAgICAgICAv
LyBTZXQgdGhlIHRleHQgY29sb3IgZGVwZW5kaW5nIG9uIHBsYXRmb3JtCisgICAgICAgIFFQYWxl
dHRlIHBhbCA9IFFBcHBsaWNhdGlvbjo6cGFsZXR0ZSgpOworICAgICAgICBvLT5zdHlsZSgpLT5z
ZXRUZXh0RmlsbENvbG9yKHBhbC5icnVzaChRUGFsZXR0ZTo6QWN0aXZlLCBRUGFsZXR0ZTo6SGln
aGxpZ2h0ZWRUZXh0KS5jb2xvcigpKTsKKyAgICB9CisKKyAgICBwLnBhaW50ZXItPnNldFJlbmRl
ckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgdHJ1ZSk7CisgICAgcGFpbnRNZWRpYUJhY2tn
cm91bmQocC5wYWludGVyLCByKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworU3RyaW5nIFJl
bmRlclRoZW1lUXQ6OmZvcm1hdE1lZGlhQ29udHJvbHNDdXJyZW50VGltZShmbG9hdCBjdXJyZW50
VGltZSwgZmxvYXQgZHVyYXRpb24pIGNvbnN0Cit7CisgICAgcmV0dXJuIGZvcm1hdE1lZGlhQ29u
dHJvbHNUaW1lKGN1cnJlbnRUaW1lKSArICIgLyAiICsgZm9ybWF0TWVkaWFDb250cm9sc1RpbWUo
ZHVyYXRpb24pOworfQorCitTdHJpbmcgUmVuZGVyVGhlbWVRdDo6Zm9ybWF0TWVkaWFDb250cm9s
c1JlbWFpbmluZ1RpbWUoZmxvYXQgY3VycmVudFRpbWUsIGZsb2F0IGR1cmF0aW9uKSBjb25zdAor
eworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWludE1l
ZGlhVm9sdW1lU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0ICpvLCBjb25zdCBSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyAmcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0ICZyKQoreworICAgIFN0eWxlUGFp
bnRlciBwKHRoaXMsIHBhaW50SW5mbyk7CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBwLnBhaW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFu
dGlhbGlhc2luZywgdHJ1ZSk7CisKKyAgICBwYWludE1lZGlhQmFja2dyb3VuZChwLnBhaW50ZXIs
IHIpOworCisgICAgaWYgKCFvLT5pc1NsaWRlcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBJbnRSZWN0IGIgPSB0b1JlbmRlckJveChvKS0+Y29udGVudEJveFJlY3QoKTsKKworICAg
IC8vIFBvc2l0aW9uIHRoZSBvdXRlciByZWN0YW5nbGUKKyAgICBpbnQgdG9wID0gci55KCkgKyBi
LnkoKTsKKyAgICBpbnQgbGVmdCA9IHIueCgpICsgYi54KCk7CisgICAgaW50IHdpZHRoID0gYi53
aWR0aCgpOworICAgIGludCBoZWlnaHQgPSBiLmhlaWdodCgpOworCisgICAgc3RhdGljIGNvbnN0
IFFDb2xvciBzY2FsZUNvbG9yKDI1NSwgMjU1LCAyNTUsIDEwMCk7CisKKyAgICAvLyBEcmF3IHRo
ZSBvdXRlciByZWN0YW5nbGUKKyAgICBwLnBhaW50ZXItPnNldFBlbihRdDo6bGlnaHRHcmF5KTsK
KyAgICBwLnBhaW50ZXItPnNldEJydXNoKHNjYWxlQ29sb3IpOworICAgIHAucGFpbnRlci0+ZHJh
d1JlY3QobGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIGlmICghby0+bm9kZSgpIHx8
ICFvLT5ub2RlKCktPmhhc1RhZ05hbWUoaW5wdXRUYWcpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBzbGlkZXIgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRF
bGVtZW50Kj4oby0+bm9kZSgpKTsKKworICAgIC8vIFBvc2l0aW9uIHRoZSBpbm5lciByZWN0YW5n
bGUKKyAgICBoZWlnaHQgPSAoaGVpZ2h0IC0gMikgKiBzbGlkZXItPnZhbHVlQXNOdW1iZXIoKTsK
KyAgICB3aWR0aCAtPSAyOworICAgIGxlZnQgKz0gMTsKKyAgICB0b3AgKz0gKGIuaGVpZ2h0KCkg
LSBoZWlnaHQpIC0gMTsKKworICAgIC8vIERyYXcgdGhlIGlubmVyIHJlY3RhbmdsZQorICAgIHAu
cGFpbnRlci0+c2V0UGVuKFF0OjpOb1Blbik7CisgICAgcC5wYWludGVyLT5zZXRCcnVzaChnZXRN
ZWRpYUNvbnRyb2xGb3JlZ3JvdW5kQ29sb3IobykpOworICAgIHAucGFpbnRlci0+ZHJhd1JlY3Qo
bGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0
ICpvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyAmcGFpbnRJbmZvLCBjb25zdCBJbnRS
ZWN0ICZyKQoreworICAgIFN0eWxlUGFpbnRlciBwKHRoaXMsIHBhaW50SW5mbyk7CisgICAgaWYg
KCFwLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBOb3RoaW5nIHRv
IGRyYXcgaGVyZSwgdGhpcyBpcyBhbGwgZG9uZSBpbiB0aGUgdHJhY2sKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKIGJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKFJlbmRl
ck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCYgcikKIHsKICAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBn
ZXRNZWRpYUVsZW1lbnRGcm9tUmVuZGVyT2JqZWN0KG8pOwpAQCAtOTg1LDE1ICsxMDY4LDMxIEBA
IGJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVNsaWRlclRyYWMKIAogICAgIHBhaW50TWVk
aWFCYWNrZ3JvdW5kKHAucGFpbnRlciwgcik7CiAKKyAgICAjaWYgUVRfVkVSU0lPTiA+PSAweDA0
MDcwMAorICAgIGlmIChNZWRpYVBsYXllciogcGxheWVyID0gbWVkaWFFbGVtZW50LT5wbGF5ZXIo
KSkgeworICAgICAgICAvLyBHZXQgdGhlIGJ1ZmZlcmVkIHBhcnRzIG9mIHRoZSBtZWRpYQorICAg
ICAgICBQYXNzUmVmUHRyPFRpbWVSYW5nZXM+IGJ1ZmZlcmVkID0gcGxheWVyLT5idWZmZXJlZCgp
OworICAgICAgICBpZiAoYnVmZmVyZWQtPmxlbmd0aCgpID4gMCAmJiBwbGF5ZXItPmR1cmF0aW9u
KCkgPCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSkgeworICAgICAgICAg
ICAgLy8gU2V0IHRoZSB0cmFuc2Zvcm0gYW5kIGJydXNoCisgICAgICAgICAgICBXb3JsZE1hdHJp
eFRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyKHAucGFpbnRlciwgbywgcik7CisgICAgICAgICAgICBw
LnBhaW50ZXItPnNldEJydXNoKGdldE1lZGlhQ29udHJvbEZvcmVncm91bmRDb2xvcigpKTsKKwor
ICAgICAgICAgICAgLy8gUGFpbnQgZWFjaCBidWZmZXJlZCBzZWN0aW9uCisgICAgICAgICAgICBF
eGNlcHRpb25Db2RlIGV4OworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBidWZmZXJl
ZC0+bGVuZ3RoKCk7IGkrKykgeworICAgICAgICAgICAgICAgIGZsb2F0IHN0YXJ0WCA9IChidWZm
ZXJlZC0+c3RhcnQoaSwgZXgpIC8gcGxheWVyLT5kdXJhdGlvbigpKSAqIDEwMDsKKyAgICAgICAg
ICAgICAgICBmbG9hdCB3aWR0aCA9ICgoYnVmZmVyZWQtPmVuZChpLCBleCkgLyBwbGF5ZXItPmR1
cmF0aW9uKCkpICogMTAwKSAtIHN0YXJ0WDsKKyAgICAgICAgICAgICAgICBwLnBhaW50ZXItPmRy
YXdSZWN0KHN0YXJ0WCwgMzcsIHdpZHRoLCAyNik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgI2VuZGlmCisKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgUmVuZGVy
VGhlbWVRdDo6cGFpbnRNZWRpYVNsaWRlclRodW1iKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVu
ZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKLSAg
ICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBnZXRNZWRpYUVsZW1lbnRGcm9tUmVu
ZGVyT2JqZWN0KG8tPnBhcmVudCgpKTsKLSAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCiAgICAgU3R5bGVQYWludGVyIHAodGhpcywgcGFpbnRJbmZvKTsKICAg
ICBpZiAoIXAuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEwMTksNiArMTEx
OCwxMyBAQCB2b2lkIFJlbmRlclRoZW1lUXQ6OmFkanVzdFNsaWRlclRodW1iU2l6CiAgICAgICAg
IGludCBwYXJlbnRIZWlnaHQgPSBwYXJlbnRTdHlsZS0+aGVpZ2h0KCkudmFsdWUoKTsKICAgICAg
ICAgby0+c3R5bGUoKS0+c2V0V2lkdGgoTGVuZ3RoKHBhcmVudEhlaWdodCAvIDMsIEZpeGVkKSk7
CiAgICAgICAgIG8tPnN0eWxlKCktPnNldEhlaWdodChMZW5ndGgocGFyZW50SGVpZ2h0LCBGaXhl
ZCkpOworICAgIH0gZWxzZSBpZiAocGFydCA9PSBNZWRpYVZvbHVtZVNsaWRlclRodW1iUGFydCkg
eworICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBvLT5wYXJlbnQoKS0+c3R5bGUo
KTsKKyAgICAgICAgUV9BU1NFUlQocGFyZW50U3R5bGUpOworCisgICAgICAgIGludCBwYXJlbnRX
aWR0aCA9IHBhcmVudFN0eWxlLT53aWR0aCgpLnZhbHVlKCk7CisgICAgICAgIG8tPnN0eWxlKCkt
PnNldEhlaWdodChMZW5ndGgocGFyZW50V2lkdGggLyAzLCBGaXhlZCkpOworICAgICAgICBvLT5z
dHlsZSgpLT5zZXRXaWR0aChMZW5ndGgocGFyZW50V2lkdGgsIEZpeGVkKSk7CiAgICAgfSBlbHNl
IGlmIChwYXJ0ID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgfHwgcGFydCA9PSBTbGlkZXJU
aHVtYlZlcnRpY2FsUGFydCkgewogICAgICAgICBRU3R5bGVPcHRpb25TbGlkZXIgb3B0aW9uOwog
ICAgICAgICBpZiAocGFydCA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5oCShyZXZpc2lvbiA1NDQ3NSkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNyArMTI3LDEx
IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNlZWtGb3J3YXJkQnV0
dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2xpZGVyVHJhY2soUmVuZGVy
T2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqLCBj
b25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLQorICAgIHZp
cnR1YWwgYm9vbCBwYWludE1lZGlhQ3VycmVudFRpbWUoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVu
ZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29s
IHBhaW50TWVkaWFWb2x1bWVTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJP
YmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRNZWRpYVZvbHVtZVNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVj
dDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgU3RyaW5nIGZvcm1h
dE1lZGlhQ29udHJvbHNDdXJyZW50VGltZShmbG9hdCBjdXJyZW50VGltZSwgZmxvYXQgZHVyYXRp
b24pIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIGZvcm1hdE1lZGlhQ29udHJvbHNSZW1haW5p
bmdUaW1lKGZsb2F0IGN1cnJlbnRUaW1lLCBmbG9hdCBkdXJhdGlvbikgY29uc3Q7CiBwcml2YXRl
OgogICAgIEhUTUxNZWRpYUVsZW1lbnQqIGdldE1lZGlhRWxlbWVudEZyb21SZW5kZXJPYmplY3Qo
UmVuZGVyT2JqZWN0KiBvKSBjb25zdDsKICAgICB2b2lkIHBhaW50TWVkaWFCYWNrZ3JvdW5kKFFQ
YWludGVyKiBwYWludGVyLCBjb25zdCBJbnRSZWN0JiByKSBjb25zdDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48460</attachid>
            <date>2010-02-09 21:12:20 -0800</date>
            <delta_ts>2010-02-10 22:21:21 -0800</delta_ts>
            <desc>Updated Patch - Various Improvements</desc>
            <filename>webkit-qtmultimedia-integration.txt</filename>
            <type>text/plain</type>
            <size>93830</size>
            <attacher name="Nick Young">nicholas.young</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDU4NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTI1IEBACisyMDEwLTAyLTA5ICBOaWNob2xhcyBZb3VuZyAgPG5pY2hvbGFzLnlv
dW5nQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBbUXRdIFN3aXRjaGluZyBmcm9tIFBob25vbiB0byBRdE11bHRpbWVkaWEgQmFja2Vu
ZCBmb3IgUXQgNC43CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zNDYzMQorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhpcyBwYXRjaCBvbmx5IGFmZmVj
dHMgbXVsdGltZWRpYSBiYWNrZW5kLgorCisgICAgICAgICogV2ViQ29yZS5wcm86IEJ1aWxkIGRl
cGVuZHMgb24gUXQgVmVyc2lvbi4KKyAgICAgICAgKiBjc3MvbWVkaWFDb250cm9sc1F0LmNzczog
VXBkYXRlZCBtZWRpYSBjb250cm9scy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRp
YVBsYXllci5jcHA6IERpZmZlcmVudCBiYWNrZW5kIGluY2x1ZGVkIGRlcGVuZGluZyBvbiBRdCB2
ZXJzaW9uLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0
ZVF0LmNwcDogQWRkZWQgbmV3IFF0TXVsdGltZWRpYSBCYWNrZW5kLgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlRGVmYXVsdDo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVEZWZhdWx0OjpzdXBwb3J0c0Z1bGxzY3JlZW4pOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpyZWdpc3Rlck1lZGlhRW5naW5lKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6Z2V0U3VwcG9ydGVkVHlwZXMpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpzdXBwb3J0c1R5cGUpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpNZWRpYVBsYXllclByaXZhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjp+TWVkaWFQbGF5ZXJQcml2YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6aGFzVmlkZW8pOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpoYXNBdWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGU6OmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlOjpjYW5jZWxMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZTo6cGxheSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnBhdXNlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6cGF1c2VkKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6c2Vlayk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGU6OnNlZWtpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlOjpkdXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGU6OmN1cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6
YnVmZmVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjptYXhUaW1l
U2Vla2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpieXRlc0xv
YWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnRvdGFsQnl0ZXMp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRSYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0Vm9sdW1lKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0TXV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlOjpuZXR3b3JrU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlOjpyZWFkeVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZTo6c2V0VmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGU6Om1lZGlhU3RhdHVzQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGU6OmhhbmRsZUVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZTo6c3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZTo6cG9zaXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZTo6ZHVyYXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZTo6dXBkYXRlU3RhdGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZURl
ZmF1bHQ6Ok1lZGlhUGxheWVyUHJpdmF0ZURlZmF1bHQpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlRGVmYXVsdDo6fk1lZGlhUGxheWVyUHJpdmF0ZURlZmF1bHQpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlRGVmYXVsdDo6bmF0dXJhbFNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlRGVmYXVsdDo6cGFpbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlRGVmYXVsdDo6cmVwYWludCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuaDogQWRkZWQg
bmV3IFF0TXVsdGltZWRpYSBCYWNrZW5kLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlOjppc0F2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGU6OnJlcGFpbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L1FQYWludGVyVmlk
ZW9TdXJmYWNlLmNwcDogQWRkZWQgUVBhaW50ZXJWaWRlb1N1cmZhY2UgdG8gV2ViQ29yZSBhcyBh
IHRlbXBvcmFyeSBzb2x1dGlvbiB0byB0aGUgdXNlIG9mIGEgcHJpdmF0ZSBRdCBoZWFkZXIuCisg
ICAgICAgIChXZWJDb3JlOjpRVmlkZW9TdXJmYWNlUGFpbnRlcjo6flFWaWRlb1N1cmZhY2VQYWlu
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlFWaWRlb1N1cmZhY2VSYXN0ZXJQYWludGVyOjpRVmlk
ZW9TdXJmYWNlUmFzdGVyUGFpbnRlcik6CisgICAgICAgIChXZWJDb3JlOjpRVmlkZW9TdXJmYWNl
UmFzdGVyUGFpbnRlcjo6c3VwcG9ydGVkUGl4ZWxGb3JtYXRzKToKKyAgICAgICAgKFdlYkNvcmU6
OlFWaWRlb1N1cmZhY2VSYXN0ZXJQYWludGVyOjppc0Zvcm1hdFN1cHBvcnRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpRVmlkZW9TdXJmYWNlUmFzdGVyUGFpbnRlcjo6c3RhcnQpOgorICAgICAgICAo
V2ViQ29yZTo6UVZpZGVvU3VyZmFjZVJhc3RlclBhaW50ZXI6OnN0b3ApOgorICAgICAgICAoV2Vi
Q29yZTo6UVZpZGVvU3VyZmFjZVJhc3RlclBhaW50ZXI6OnNldEN1cnJlbnRGcmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpRVmlkZW9TdXJmYWNlUmFzdGVyUGFpbnRlcjo6cGFpbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6UVZpZGVvU3VyZmFjZVJhc3RlclBhaW50ZXI6OnVwZGF0ZUNvbG9ycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpRVmlkZW9TdXJmYWNlR0xQYWludGVyOjpRVmlkZW9TdXJmYWNlR0xQ
YWludGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlFWaWRlb1N1cmZhY2VHTFBhaW50ZXI6On5RVmlk
ZW9TdXJmYWNlR0xQYWludGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlFWaWRlb1N1cmZhY2VHTFBh
aW50ZXI6OnN1cHBvcnRlZFBpeGVsRm9ybWF0cyk6CisgICAgICAgIChXZWJDb3JlOjpRVmlkZW9T
dXJmYWNlR0xQYWludGVyOjppc0Zvcm1hdFN1cHBvcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpR
VmlkZW9TdXJmYWNlR0xQYWludGVyOjpzZXRDdXJyZW50RnJhbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6UVZpZGVvU3VyZmFjZUdMUGFpbnRlcjo6dXBkYXRlQ29sb3JzKToKKyAgICAgICAgKFdlYkNv
cmU6OlFWaWRlb1N1cmZhY2VHTFBhaW50ZXI6OmluaXRSZ2JUZXh0dXJlSW5mbyk6CisgICAgICAg
IChXZWJDb3JlOjpRVmlkZW9TdXJmYWNlR0xQYWludGVyOjppbml0WXV2NDIwUFRleHR1cmVJbmZv
KToKKyAgICAgICAgKFdlYkNvcmU6OlFWaWRlb1N1cmZhY2VHTFBhaW50ZXI6OmluaXRZdjEyVGV4
dHVyZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6UVZpZGVvU3VyZmFjZUFyYkZwUGFpbnRlcjo6
UVZpZGVvU3VyZmFjZUFyYkZwUGFpbnRlcik6CisgICAgICAgIChXZWJDb3JlOjpRVmlkZW9TdXJm
YWNlQXJiRnBQYWludGVyOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpRVmlkZW9TdXJmYWNl
QXJiRnBQYWludGVyOjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlFWaWRlb1N1cmZhY2VBcmJG
cFBhaW50ZXI6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlFWaWRlb1N1cmZhY2VHbHNsUGFp
bnRlcjo6UVZpZGVvU3VyZmFjZUdsc2xQYWludGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlFWaWRl
b1N1cmZhY2VHbHNsUGFpbnRlcjo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UVZpZGVvU3Vy
ZmFjZUdsc2xQYWludGVyOjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlFWaWRlb1N1cmZhY2VH
bHNsUGFpbnRlcjo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UVBhaW50ZXJWaWRlb1N1cmZh
Y2U6OlFQYWludGVyVmlkZW9TdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlFQYWludGVyVmlk
ZW9TdXJmYWNlOjp+UVBhaW50ZXJWaWRlb1N1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6UVBh
aW50ZXJWaWRlb1N1cmZhY2U6OnN1cHBvcnRlZFBpeGVsRm9ybWF0cyk6CisgICAgICAgIChXZWJD
b3JlOjpRUGFpbnRlclZpZGVvU3VyZmFjZTo6aXNGb3JtYXRTdXBwb3J0ZWQpOgorICAgICAgICAo
V2ViQ29yZTo6UVBhaW50ZXJWaWRlb1N1cmZhY2U6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6
OlFQYWludGVyVmlkZW9TdXJmYWNlOjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlFQYWludGVy
VmlkZW9TdXJmYWNlOjpwcmVzZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlFQYWludGVyVmlkZW9T
dXJmYWNlOjpicmlnaHRuZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OlFQYWludGVyVmlkZW9TdXJm
YWNlOjpzZXRCcmlnaHRuZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OlFQYWludGVyVmlkZW9TdXJm
YWNlOjpjb250cmFzdCk6CisgICAgICAgIChXZWJDb3JlOjpRUGFpbnRlclZpZGVvU3VyZmFjZTo6
c2V0Q29udHJhc3QpOgorICAgICAgICAoV2ViQ29yZTo6UVBhaW50ZXJWaWRlb1N1cmZhY2U6Omh1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpRUGFpbnRlclZpZGVvU3VyZmFjZTo6c2V0SHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlFQYWludGVyVmlkZW9TdXJmYWNlOjpzYXR1cmF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlFQYWludGVyVmlkZW9TdXJmYWNlOjpzZXRTYXR1cmF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlFQYWludGVyVmlkZW9TdXJmYWNlOjppc1JlYWR5KToKKyAgICAgICAgKFdl
YkNvcmU6OlFQYWludGVyVmlkZW9TdXJmYWNlOjpzZXRSZWFkeSk6CisgICAgICAgIChXZWJDb3Jl
OjpRUGFpbnRlclZpZGVvU3VyZmFjZTo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UVBhaW50
ZXJWaWRlb1N1cmZhY2U6OmdsQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpRUGFpbnRlclZp
ZGVvU3VyZmFjZTo6c2V0R0xDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlFQYWludGVyVmlk
ZW9TdXJmYWNlOjpzdXBwb3J0ZWRTaGFkZXJUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpRUGFp
bnRlclZpZGVvU3VyZmFjZTo6c2hhZGVyVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpRUGFpbnRl
clZpZGVvU3VyZmFjZTo6c2V0U2hhZGVyVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpRUGFpbnRl
clZpZGVvU3VyZmFjZTo6Y3JlYXRlUGFpbnRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvUVBhaW50ZXJWaWRlb1N1cmZhY2UuaDogQWRkZWQgUVBhaW50ZXJWaWRlb1N1cmZhY2Ug
dG8gV2ViQ29yZSBhcyBhIHRlbXBvcmFyeSBzb2x1dGlvbiB0byB0aGUgdXNlIG9mIGEgcHJpdmF0
ZSBRdCBoZWFkZXIuCisgICAgICAgIChXZWJDb3JlOjopOiBBZGRlZCBRUGFpbnRlclZpZGVvU3Vy
ZmFjZSB0byBXZWJDb3JlIGFzIGEgdGVtcG9yYXJ5IHNvbHV0aW9uIHRvIHRoZSB1c2Ugb2YgYSBw
cml2YXRlIFF0IGhlYWRlci4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmNw
cDogVXBkYXRlZCBtZWRpYSBjb250cm9scy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
UXQ6Om1lZGlhQ29udHJvbHNCYXNlbGluZU9wYWNpdHkpOiBOZXcgbWV0aG9kIGRldGVybWluZXMg
YmFzZWxpbmUgb3BhY2l0eSB3aGVuIGNvbnRyb2xzIGFyZSBzaG93bi4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lUXQ6OnBhaW50TWVkaWFNdXRlQnV0dG9uKTogQ2hhbmdlZCBzdHlsaW5n
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYUN1cnJlbnRUaW1l
KTogQWRkZWQgY3VycmVudCB0aW1lIGRpc3BsYXkuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZVF0Ojpmb3JtYXRNZWRpYUNvbnRyb2xzQ3VycmVudFRpbWUpOiBBZGRlZCB0aW1lIGZvcm1h
dHRpbmcuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0Ojpmb3JtYXRNZWRpYUNvbnRy
b2xzUmVtYWluaW5nVGltZSk6IEFkZGVkIHRpbWUgZm9ybWF0dGluZy4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lUXQ6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUcmFjayk6IFZvbHVtZSBz
bGlkZXIgYWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlh
Vm9sdW1lU2xpZGVyVGh1bWIpOiBWb2x1bWUgc2xpZGVyIGFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKTogVXBkYXRlZCBmb3IgUXRN
dWx0aW1lZGlhLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVNs
aWRlclRodW1iKTogRHJvcHBlZCBhbiB1bm5lY2Vzc2FyeSBjaGVjay4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lUXQ6OmFkanVzdFNsaWRlclRodW1iU2l6ZSk6IEhhbmRsZSBhIG1pc3Np
bmcgY2FzZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0Lmg6IFJlaW1wbGVt
ZW50ZWQgYSBmZXcgbW9yZSBtZXRob2RzLgorCiAyMDEwLTAyLTA5ICBDaHJpcyBHdWlsbG9yeSAg
PGN0Z3VpbEBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4K
SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3Jl
LnBybwkocmV2aXNpb24gNTQ1ODQpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzEsMTEgKzEzMSwyMiBAQCBtYW1lbzV8c3ltYmlhbnxlbWJlZGRlZCB7CiAKIGlu
Y2x1ZGUoJCRQV0QvLi4vSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJpKQogCi0jIERp
c2FibGUgSFRNTDUgbWVkaWEgY29tcGlsYXRpb24gaWYgcGhvbm9uIGlzIHVuYXZhaWxhYmxlCi0h
Y29udGFpbnMoREVGSU5FUywgRU5BQkxFX1ZJREVPPTEpIHsKLSAgICAhY29udGFpbnMoUVRfQ09O
RklHLCBwaG9ub24pIHsKLSAgICAgICAgREVGSU5FUyAtPSBFTkFCTEVfVklERU89MQotICAgICAg
ICBERUZJTkVTICs9IEVOQUJMRV9WSURFTz0wCisjIFF0TXVsdGltZWRpYSBzaW5jZSA0LjcKK2dy
ZWF0ZXJUaGFuKFFUX01JTk9SX1ZFUlNJT04sIDYpIHsKKyAgICAjIERpc2FibGUgSFRNTDUgbWVk
aWEgY29tcGlsYXRpb24gaWYgcXRtdWx0aW1lZGlhIGlzIHVuYXZhaWxhYmxlCisgICAgIWNvbnRh
aW5zKERFRklORVMsIEVOQUJMRV9WSURFTz0xKSB7CisgICAgICAgICFjb250YWlucyhRVF9DT05G
SUcsIG11bHRpbWVkaWEpIHsKKyAgICAgICAgICAgIERFRklORVMgLT0gRU5BQkxFX1ZJREVPPTEK
KyAgICAgICAgICAgIERFRklORVMgKz0gRU5BQkxFX1ZJREVPPTAKKyAgICAgICAgfQorICAgIH0K
K30gZWxzZSB7CisgICAgIyBEaXNhYmxlIEhUTUw1IG1lZGlhIGNvbXBpbGF0aW9uIGlmIHBob25v
biBpcyB1bmF2YWlsYWJsZQorICAgICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfVklERU89MSkg
eworICAgICAgICAhY29udGFpbnMoUVRfQ09ORklHLCBwaG9ub24pIHsKKyAgICAgICAgICAgIERF
RklORVMgLT0gRU5BQkxFX1ZJREVPPTEKKyAgICAgICAgICAgIERFRklORVMgKz0gRU5BQkxFX1ZJ
REVPPTAKKyAgICAgICAgfQogICAgIH0KIH0KIApAQCAtMjI5OSwyMSArMjMxMCwzNSBAQCBjb250
YWlucyhERUZJTkVTLCBFTkFCTEVfVklERU89MSkgewogICAgICAgICByZW5kZXJpbmcvUmVuZGVy
TWVkaWEuY3BwIFwKICAgICAgICAgYmluZGluZ3MvanMvSlNBdWRpb0NvbnN0cnVjdG9yLmNwcAog
Ci0gICAgICAgIEhFQURFUlMgKz0gXAotICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
TWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uLmgKKyAgICAgICAgIyBRdE11bHRpbWVkaWEgc2luY2Ug
NC43CisgICAgICAgIGdyZWF0ZXJUaGFuKFFUX01JTk9SX1ZFUlNJT04sIDYpIHsKKyAgICAgICAg
ICAgIEhFQURFUlMgKz0gXAorICAgICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L01l
ZGlhUGxheWVyUHJpdmF0ZVF0LmggXAorICAgICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3F0L1FQYWludGVyVmlkZW9TdXJmYWNlLmgKKworICAgICAgICAgICAgU09VUkNFUyArPSBcCisg
ICAgICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQu
Y3BwIFwKKyAgICAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9RUGFpbnRlclZpZGVv
U3VyZmFjZS5jcHAKIAotICAgICAgICBTT1VSQ0VTICs9IFwKLSAgICAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVBob25vbi5jcHAKKyAgICAgICAgICAgIFFU
ICs9IG11bHRpbWVkaWEKKyAgICAgICAgICAgIGNvbnRhaW5zKFFUX0NPTkZJRywgb3BlbmdsKTog
UVQgKz0gb3BlbmdsCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBIRUFERVJTICs9IFwK
KyAgICAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVQ
aG9ub24uaAorCisgICAgICAgICAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAgICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVQaG9ub24uY3BwCiAKLSAgICAgICAg
IyBBZGQgcGhvbm9uIG1hbnVhbGx5IHRvIHByZXZlbnQgaXQgZnJvbSBjb21pbmcgZmlyc3QgaW4K
LSAgICAgICAgIyB0aGUgaW5jbHVkZSBwYXRocywgYXMgUGhvbm9uJ3MgcGF0aC5oIGNvbmZsaWN0
cyB3aXRoCi0gICAgICAgICMgV2ViQ29yZSdzIFBhdGguaCBvbiBjYXNlLWluc2Vuc2l0aXZlIGZp
bGVzeXN0ZW1zLgotICAgICAgICBxdEFkZExpYnJhcnkocGhvbm9uKQotICAgICAgICBJTkNMVURF
UEFUSCAtPSAkJFFNQUtFX0lOQ0RJUl9RVC9waG9ub24KLSAgICAgICAgSU5DTFVERVBBVEggKz0g
JCRRTUFLRV9JTkNESVJfUVQvcGhvbm9uCi0gICAgICAgIG1hYyB7Ci0gICAgICAgICAgICBJTkNM
VURFUEFUSCAtPSAkJFFNQUtFX0xJQkRJUl9RVC9waG9ub24uZnJhbWV3b3JrL0hlYWRlcnMKLSAg
ICAgICAgICAgIElOQ0xVREVQQVRIICs9ICQkUU1BS0VfTElCRElSX1FUL3Bob25vbi5mcmFtZXdv
cmsvSGVhZGVycworICAgICAgICAgICAgIyBBZGQgcGhvbm9uIG1hbnVhbGx5IHRvIHByZXZlbnQg
aXQgZnJvbSBjb21pbmcgZmlyc3QgaW4KKyAgICAgICAgICAgICMgdGhlIGluY2x1ZGUgcGF0aHMs
IGFzIFBob25vbidzIHBhdGguaCBjb25mbGljdHMgd2l0aAorICAgICAgICAgICAgIyBXZWJDb3Jl
J3MgUGF0aC5oIG9uIGNhc2UtaW5zZW5zaXRpdmUgZmlsZXN5c3RlbXMuCisgICAgICAgICAgICBx
dEFkZExpYnJhcnkocGhvbm9uKQorICAgICAgICAgICAgSU5DTFVERVBBVEggLT0gJCRRTUFLRV9J
TkNESVJfUVQvcGhvbm9uCisgICAgICAgICAgICBJTkNMVURFUEFUSCArPSAkJFFNQUtFX0lOQ0RJ
Ul9RVC9waG9ub24KKyAgICAgICAgICAgIG1hYyB7CisgICAgICAgICAgICAgICAgSU5DTFVERVBB
VEggLT0gJCRRTUFLRV9MSUJESVJfUVQvcGhvbm9uLmZyYW1ld29yay9IZWFkZXJzCisgICAgICAg
ICAgICAgICAgSU5DTFVERVBBVEggKz0gJCRRTUFLRV9MSUJESVJfUVQvcGhvbm9uLmZyYW1ld29y
ay9IZWFkZXJzCisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogfQpJbmRleDogV2ViQ29yZS9j
c3MvbWVkaWFDb250cm9sc1F0LmNzcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9tZWRpYUNv
bnRyb2xzUXQuY3NzCShyZXZpc2lvbiA1NDU4NCkKKysrIFdlYkNvcmUvY3NzL21lZGlhQ29udHJv
bHNRdC5jc3MJKHdvcmtpbmcgY29weSkKQEAgLTUxLDggKzUxLDYgQEAgdmlkZW86LXdlYmtpdC1m
dWxsLXBhZ2UtbWVkaWE6Oi13ZWJraXQtbQogfQogCiBhdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250
cm9scy1tdXRlLWJ1dHRvbiwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtbXV0ZS1idXR0
b24gewotICAgIGxlZnQ6IGF1dG87Ci0gICAgcmlnaHQ6IDVweDsKICAgICB3aWR0aDogMTJweDsK
ICAgICBoZWlnaHQ6IDEycHg7CiAgICAgcGFkZGluZzogNnB4OwpAQCAtNjAsNyArNTgsNiBAQCBh
dWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1tdXRlLWJ1dHRvCiB9CiAKIGF1ZGlvOjotd2Vi
a2l0LW1lZGlhLWNvbnRyb2xzLXBsYXktYnV0dG9uLCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250
cm9scy1wbGF5LWJ1dHRvbiB7Ci0gICAgbGVmdDogNXB4OwogICAgIHdpZHRoOiA5cHg7CiAgICAg
aGVpZ2h0OiAxMnB4OwogICAgIHBhZGRpbmc6IDZweCAxMnB4IDZweCAxMXB4OwpAQCAtNzIsNyAr
NjksMjAgQEAgYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdGltZWxpbmUtYwogfQogCiBh
dWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1jdXJyZW50LXRpbWUtZGlzcGxheSwgdmlkZW86
Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtY3VycmVudC10aW1lLWRpc3BsYXkgewotICAgIGRpc3Bs
YXk6IG5vbmU7CisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBtZWRpYS1jdXJyZW50LXRpbWUtZGlz
cGxheTsKKyAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOworICAgIGRpc3BsYXk6IGlubGlu
ZS1ibG9jazsKKyAgICBoZWlnaHQ6IDEycHg7CisgICAgcGFkZGluZzogNnB4OworICAgIG1hcmdp
bjogNXB4IDNweDsKKworICAgIG92ZXJmbG93OiBoaWRkZW47CisgICAgY3Vyc29yOiBkZWZhdWx0
OworCisgICAgdGV4dC1hbGlnbjogY2VudGVyOworICAgIGZvbnQtc2l6ZTogMTBweDsKKyAgICBm
b250LWZhbWlseTogVmVyZGFuYTsKKyAgICBmb250LXdlaWdodDogYm9sZDsKIH0KIAogYXVkaW86
Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdGltZS1yZW1haW5pbmctZGlzcGxheSwgdmlkZW86Oi13
ZWJraXQtbWVkaWEtY29udHJvbHMtdGltZS1yZW1haW5pbmctZGlzcGxheSB7CkBAIC04MCw1MSAr
OTAsMzggQEAgYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdGltZS1yZW1haQogfQogCiBh
dWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lbGluZSwgdmlkZW86Oi13ZWJraXQtbWVk
aWEtY29udHJvbHMtdGltZWxpbmUgewotICAgIGxlZnQ6IDQycHg7Ci0gICAgcmlnaHQ6IDM0cHg7
CiAgICAgaGVpZ2h0OiAxMnB4OwogICAgIHBhZGRpbmc6IDZweCA4cHg7Ci0gICAgbWFyZ2luOiA1
cHggMHB4OworICAgIG1hcmdpbjogNXB4IDNweDsKIH0KIAogYXVkaW86Oi13ZWJraXQtbWVkaWEt
Y29udHJvbHMtdm9sdW1lLXNsaWRlci1jb250YWluZXIsIHZpZGVvOjotd2Via2l0LW1lZGlhLWNv
bnRyb2xzLXZvbHVtZS1zbGlkZXItY29udGFpbmVyIHsKLSAgICBkaXNwbGF5OiBub25lOworICAg
IC13ZWJraXQtYXBwZWFyYW5jZTogbWVkaWEtdm9sdW1lLXNsaWRlci1jb250YWluZXI7CisgICAg
cG9zaXRpb246IGFic29sdXRlOworICAgIGhlaWdodDogMTAzcHg7CisgICAgd2lkdGg6IDI0cHg7
CiB9CiAKIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXZvbHVtZS1zbGlkZXIsIHZpZGVv
Ojotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXZvbHVtZS1zbGlkZXIgewotICAgIGRpc3BsYXk6IG5v
bmU7CisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBtZWRpYS12b2x1bWUtc2xpZGVyOworICAgIGRp
c3BsYXk6IGlubGluZTsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisKKyAgICB3aWR0aDogMTJw
eDsKKyAgICBwYWRkaW5nOiA2cHg7CisgICAgaGVpZ2h0OiA4OHB4OworICAgIG1hcmdpbjogMCAw
IDNweCAwOwogfQogCiBhdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1zZWVrLWJhY2stYnV0
dG9uLCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1zZWVrLWJhY2stYnV0dG9uIHsKLSAg
ICAvKiBTaW5jZSBNZWRpYUNvbnRyb2xFbGVtZW50cyBhcmUgYWx3YXlzIGNyZWF0ZWQgd2l0aCBh
IHJlbmRlcmVyIHdlIGhhdmUgdG8gaGlkZQotICAgICAgIHRoZSBjb250cm9scyB3ZSBkb24ndCB1
c2UsIHNvIHRoZXkgZG9uJ3QgbWVzcyB1cCBhY3RpdmF0aW9uIGFuZCBldmVudCBoYW5kbGluZyAq
LwotICAgIGxlZnQ6IDBweDsKLSAgICB0b3A6IDBweDsKLSAgICB3aWR0aDogMHB4OwotICAgIGhl
aWdodDogMHB4OwotCiAgICAgZGlzcGxheTogbm9uZTsKIH0KIAogYXVkaW86Oi13ZWJraXQtbWVk
aWEtY29udHJvbHMtc2Vlay1mb3J3YXJkLWJ1dHRvbiwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29u
dHJvbHMtc2Vlay1mb3J3YXJkLWJ1dHRvbiB7Ci0gICAgLyogU2luY2UgTWVkaWFDb250cm9sRWxl
bWVudHMgYXJlIGFsd2F5cyBjcmVhdGVkIHdpdGggYSByZW5kZXJlciB3ZSBoYXZlIHRvIGhpZGUK
LSAgICAgICB0aGUgY29udHJvbHMgd2UgZG9uJ3QgdXNlLCBzbyB0aGV5IGRvbid0IG1lc3MgdXAg
YWN0aXZhdGlvbiBhbmQgZXZlbnQgaGFuZGxpbmcgKi8KLSAgICBsZWZ0OiAwcHg7Ci0gICAgdG9w
OiAwcHg7Ci0gICAgd2lkdGg6IDBweDsKLSAgICBoZWlnaHQ6IDBweDsKLQogICAgIGRpc3BsYXk6
IG5vbmU7CiB9CiAKIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWZ1bGxzY3JlZW4tYnV0
dG9uLCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1mdWxsc2NyZWVuLWJ1dHRvbiB7Ci0g
ICAgLyogU2luY2UgTWVkaWFDb250cm9sRWxlbWVudHMgYXJlIGFsd2F5cyBjcmVhdGVkIHdpdGgg
YSByZW5kZXJlciB3ZSBoYXZlIHRvIGhpZGUKLSAgICAgICB0aGUgY29udHJvbHMgd2UgZG9uJ3Qg
dXNlLCBzbyB0aGV5IGRvbid0IG1lc3MgdXAgYWN0aXZhdGlvbiBhbmQgZXZlbnQgaGFuZGxpbmcg
Ki8KLSAgICBsZWZ0OiAwcHg7Ci0gICAgdG9wOiAwcHg7Ci0gICAgd2lkdGg6IDBweDsKLSAgICBo
ZWlnaHQ6IDBweDsKLQogICAgIGRpc3BsYXk6IG5vbmU7CiB9CiAKQEAgLTEzNiwzICsxMzMsNyBA
QCBhdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1yZXR1cm4tdG8tCiAgICAgZGlzcGxheTog
bm9uZTsKIH0KIAorYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdG9nZ2xlLWNsb3NlZC1j
YXB0aW9ucy1idXR0b24sIHZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXRvZ2dsZS1jbG9z
ZWQtY2FwdGlvbnMtYnV0dG9uIHsKKyAgICBkaXNwbGF5OiBub25lOworfQorCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAkocmV2aXNpb24gNTQ1ODQpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzcsNiArMzcsMTAgQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIlRp
bWVSYW5nZXMuaCIKIAorI2lmIFBMQVRGT1JNKFFUKQorI2luY2x1ZGUgPFF0R2xvYmFsPgorI2Vu
ZGlmCisKICNpZiBQTEFURk9STShNQUMpCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlUVRL
aXQuaCIKICNlbGlmIE9TKFdJTkNFKSAmJiAhUExBVEZPUk0oUVQpCkBAIC00Niw3ICs1MCwxMSBA
QAogI2VsaWYgUExBVEZPUk0oR1RLKQogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lci5oIgogI2VsaWYgUExBVEZPUk0oUVQpCi0jaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRl
UGhvbm9uLmgiCisgICAgI2lmIFFUX1ZFUlNJT04gPCAweDA0MDcwMAorICAgICNpbmNsdWRlICJN
ZWRpYVBsYXllclByaXZhdGVQaG9ub24uaCIKKyAgICAjZWxzZQorICAgICNpbmNsdWRlICJNZWRp
YVBsYXllclByaXZhdGVRdC5oIgorICAgICNlbmRpZgogI2VsaWYgUExBVEZPUk0oQ0hST01JVU0p
CiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlQ2hyb21pdW0uaCIKICNlbmRpZgpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZh
dGVRdC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01l
ZGlhUGxheWVyUHJpdmF0ZVF0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MzMgQEAKKy8q
CisgICAgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNZWRpYVBs
YXllclByaXZhdGVRdC5oIgorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkZyYW1l
TG9hZGVyQ2xpZW50UXQuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlFQ
YWludGVyVmlkZW9TdXJmYWNlLmgiCisjaW5jbHVkZSAiVGltZVJhbmdlcy5oIgorI2luY2x1ZGUg
IldpZGdldC5oIgorCisjaW5jbHVkZSAicXdlYmZyYW1lLmgiCisjaW5jbHVkZSAicXdlYnBhZ2Uu
aCIKKworI2luY2x1ZGUgPFFOZXR3b3JrQWNjZXNzTWFuYWdlcj4KKyNpbmNsdWRlIDxRTmV0d29y
a0Nvb2tpZUphcj4KKyNpbmNsdWRlIDxRTmV0d29ya1JlcXVlc3Q+CisjaW5jbHVkZSA8UVBhaW50
ZXI+CisjaW5jbHVkZSA8UVJlY3Q+CisjaW5jbHVkZSA8UVRpbWU+CisjaW5jbHVkZSA8UVVybD4K
KyNpbmNsdWRlIDxRVmlkZW9TdXJmYWNlRm9ybWF0PgorI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgorCisjaWYgIWRlZmluZWQoUVRfTk9fT1BFTkdMKSAmJiAhZGVm
aW5lZChRVF9PUEVOR0xfRVNfMV9DTCkgJiYgIWRlZmluZWQoUVRfT1BFTkdMX0VTXzEpCisjaW5j
bHVkZSA8UUdMQ29udGV4dD4KKyNlbmRpZgorCisvLyBRdCBNdWx0aW1lZGlhIEluY2x1ZGVzCisj
aW5jbHVkZSA8UU1lZGlhU2VydmljZT4KKyNpbmNsdWRlIDxRVmlkZW9PdXRwdXRDb250cm9sPgor
I2luY2x1ZGUgPFFWaWRlb1JlbmRlcmVyQ29udHJvbD4KKwordXNpbmcgbmFtZXNwYWNlIFdURjsK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBNZWRpYVBsYXllclByaXZhdGVEZWZhdWx0
IDogcHVibGljIE1lZGlhUGxheWVyUHJpdmF0ZSB7CitwdWJsaWM6CisgICAgSW50U2l6ZSBuYXR1
cmFsU2l6ZSgpIGNvbnN0OworICAgIHZvaWQgc2V0U2l6ZShjb25zdCBJbnRTaXplJikgeyB9Cisg
ICAgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CisgICAgYm9v
bCBzdXBwb3J0c0Z1bGxzY3JlZW4oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCitwcml2YXRl
IHNsb3RzOgorICAgIHZvaWQgcmVwYWludCgpOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFz
cyBNZWRpYVBsYXllclByaXZhdGU7CisgICAgTWVkaWFQbGF5ZXJQcml2YXRlRGVmYXVsdChNZWRp
YVBsYXllciopOworICAgIH5NZWRpYVBsYXllclByaXZhdGVEZWZhdWx0KCk7CisKKyAgICBRUGFp
bnRlclZpZGVvU3VyZmFjZSogbV92aWRlb1N1cmZhY2U7CisgICAgUVZpZGVvT3V0cHV0Q29udHJv
bCogbV9vdXRwdXRDb250cm9sOworICAgIFFWaWRlb1JlbmRlcmVyQ29udHJvbCogbV9yZW5kZXJl
ckNvbnRyb2w7CisKKyAgICBib29sIG1faXNBY3RpdmU7Cit9OworCitNZWRpYVBsYXllclByaXZh
dGVJbnRlcmZhY2UqIE1lZGlhUGxheWVyUHJpdmF0ZTo6Y3JlYXRlKE1lZGlhUGxheWVyKiBwbGF5
ZXIpCit7CisgICAgcmV0dXJuIG5ldyBNZWRpYVBsYXllclByaXZhdGVEZWZhdWx0KHBsYXllcik7
Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpyZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlh
RW5naW5lUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sKKyAgICByZWdpc3RyYXIoY3JlYXRlLCBnZXRT
dXBwb3J0ZWRUeXBlcywgc3VwcG9ydHNUeXBlKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZh
dGU6OmdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiAmc3VwcG9ydGVkKQoreworICAg
IFFTdHJpbmdMaXN0IHR5cGVzID0gUU1lZGlhUGxheWVyOjpzdXBwb3J0ZWRNaW1lVHlwZXMoKTsK
KworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZXMuc2l6ZSgpOyBpKyspCisgICAgICAgIHN1
cHBvcnRlZC5hZGQodHlwZXMuYXQoaSkpOworfQorCitNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBl
IE1lZGlhUGxheWVyUHJpdmF0ZTo6c3VwcG9ydHNUeXBlKGNvbnN0IFN0cmluZyYgbWltZSwgY29u
c3QgU3RyaW5nJiBjb2RlYykKK3sKKyAgICBpZiAoUU1lZGlhUGxheWVyOjpoYXNTdXBwb3J0KG1p
bWUsIFFTdHJpbmdMaXN0KGNvZGVjKSkgPj0gUXRNZWRpYTo6UHJvYmFibHlTdXBwb3J0ZWQpCisg
ICAgICAgIHJldHVybiBNZWRpYVBsYXllcjo6SXNTdXBwb3J0ZWQ7CisKKyAgICByZXR1cm4gTWVk
aWFQbGF5ZXI6Ok1heUJlU3VwcG9ydGVkOworfQorCitNZWRpYVBsYXllclByaXZhdGU6Ok1lZGlh
UGxheWVyUHJpdmF0ZShNZWRpYVBsYXllciogcGxheWVyKQorICAgIDogbV9wbGF5ZXIocGxheWVy
KQorICAgICwgbV9tZWRpYVBsYXllcihuZXcgUU1lZGlhUGxheWVyKQorICAgICwgbV9uZXR3b3Jr
U3RhdGUoTWVkaWFQbGF5ZXI6OkVtcHR5KQorICAgICwgbV9yZWFkeVN0YXRlKE1lZGlhUGxheWVy
OjpIYXZlTm90aGluZykKKyAgICAsIG1faXNWaXNpYmxlKGZhbHNlKQorICAgICwgbV9pc1NlZWtp
bmcoZmFsc2UpCisgICAgLCBtX3F1ZXVlZFNlZWsoLTEpCit7CisgICAgLy8gU2lnbmFsIEhhbmRs
ZXJzCisgICAgY29ubmVjdChtX21lZGlhUGxheWVyLCBTSUdOQUwobWVkaWFTdGF0dXNDaGFuZ2Vk
KFFNZWRpYVBsYXllcjo6TWVkaWFTdGF0dXMpKSwKKyAgICAgICAgICAgIHRoaXMsIFNMT1QobWVk
aWFTdGF0dXNDaGFuZ2VkKFFNZWRpYVBsYXllcjo6TWVkaWFTdGF0dXMpKSk7CisgICAgY29ubmVj
dChtX21lZGlhUGxheWVyLCBTSUdOQUwoc3RhdGVDaGFuZ2VkKFFNZWRpYVBsYXllcjo6U3RhdGUp
KSwKKyAgICAgICAgICAgIHRoaXMsIFNMT1Qoc3RhdGVDaGFuZ2VkKFFNZWRpYVBsYXllcjo6U3Rh
dGUpKSk7CisgICAgY29ubmVjdChtX21lZGlhUGxheWVyLCBTSUdOQUwoZXJyb3IoUU1lZGlhUGxh
eWVyOjpFcnJvcikpLAorICAgICAgICAgICAgdGhpcywgU0xPVChoYW5kbGVFcnJvcihRTWVkaWFQ
bGF5ZXI6OkVycm9yKSkpOworICAgIGNvbm5lY3QobV9tZWRpYVBsYXllciwgU0lHTkFMKGR1cmF0
aW9uQ2hhbmdlZChxaW50NjQpKSwKKyAgICAgICAgICAgIHRoaXMsIFNMT1QoZHVyYXRpb25DaGFu
Z2VkKHFpbnQ2NCkpKTsKKyAgICBjb25uZWN0KG1fbWVkaWFQbGF5ZXIsIFNJR05BTChwb3NpdGlv
bkNoYW5nZWQocWludDY0KSksCisgICAgICAgICAgICB0aGlzLCBTTE9UKHBvc2l0aW9uQ2hhbmdl
ZChxaW50NjQpKSk7CisKKyAgICAvLyBHcmFiIHRoZSBwbGF5ZXIgY29udHJvbAorICAgIGlmICht
X21lZGlhUGxheWVyKSB7CisgICAgICAgIFFNZWRpYVNlcnZpY2UqIHNlcnZpY2UgPSBtX21lZGlh
UGxheWVyLT5zZXJ2aWNlKCk7CisgICAgICAgIGlmIChzZXJ2aWNlKSB7CisgICAgICAgICAgICBt
X21lZGlhUGxheWVyQ29udHJvbCA9IHFvYmplY3RfY2FzdDxRTWVkaWFQbGF5ZXJDb250cm9sICo+
KAorICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLT5jb250cm9sKFFNZWRpYVBsYXllckNvbnRy
b2xfaWlkKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK01lZGlhUGxheWVyUHJpdmF0ZTo6fk1l
ZGlhUGxheWVyUHJpdmF0ZSgpCit7CisgICAgZGVsZXRlIG1fbWVkaWFQbGF5ZXI7CisgICAgbV9t
ZWRpYVBsYXllciA9IDA7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpoYXNWaWRlbygp
IGNvbnN0Cit7CisgICAgLy8gcmV0dXJuIG1fbWVkaWFQbGF5ZXItPmlzVmlkZW9BdmFpbGFibGUo
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGU6Omhhc0F1
ZGlvKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBNZWRpYVBsYXllclBy
aXZhdGU6OmxvYWQoY29uc3QgU3RyaW5nJiB1cmwpCit7CisgICAgLy8gV2UgYXJlIG5vdyBsb2Fk
aW5nCisgICAgaWYgKG1fbmV0d29ya1N0YXRlICE9IE1lZGlhUGxheWVyOjpMb2FkaW5nKSB7Cisg
ICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRpbmc7CisgICAgICAgIG1f
cGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CisgICAgfQorCisgICAgLy8gQW5kIHdlIGRv
bid0IGhhdmUgYW55IGRhdGEgeWV0CisgICAgaWYgKG1fcmVhZHlTdGF0ZSAhPSBNZWRpYVBsYXll
cjo6SGF2ZU5vdGhpbmcpIHsKKyAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6Okhh
dmVOb3RoaW5nOworICAgICAgICBtX3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKKyAgICB9
CisKKyAgICBjb25zdCBRVXJsIHJVcmwodXJsKTsKKyAgICBjb25zdCBRU3RyaW5nIHNjaGVtZSA9
IHJVcmwuc2NoZW1lKCkudG9Mb3dlcigpOworCisgICAgLy8gQ29uc3RydWN0IHRoZSBtZWRpYSBj
b250ZW50IHdpdGggYSBuZXR3b3JrIHJlcXVlc3QgaWYgdGhlIHJlc291cmNlIGlzIGh0dHBbc10K
KyAgICBpZiAoc2NoZW1lID09ICJodHRwIiB8fCBzY2hlbWUgPT0gImh0dHBzIikgeworICAgICAg
ICBRTmV0d29ya1JlcXVlc3QgcmVxdWVzdCA9IFFOZXR3b3JrUmVxdWVzdChyVXJsKTsKKworICAg
ICAgICAvLyBHcmFiIHRoZSBjdXJyZW50IGRvY3VtZW50IGFuZCBuZXR3b3JrIG1hbmFnZXIKKyAg
ICAgICAgRnJhbWUqIGZyYW1lID0gbV9wbGF5ZXItPmZyYW1lVmlldygpID8gbV9wbGF5ZXItPmZy
YW1lVmlldygpLT5mcmFtZSgpIDogMDsKKyAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJh
bWUgPyBmcmFtZS0+ZG9jdW1lbnQoKSA6IDA7CisgICAgICAgIEZyYW1lTG9hZGVyQ2xpZW50UXQq
IGZyYW1lTG9hZGVyID0gIGZyYW1lID8gc3RhdGljX2Nhc3Q8RnJhbWVMb2FkZXJDbGllbnRRdCo+
KGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCkpIDogMDsKKyAgICAgICAgUU5ldHdvcmtBY2Nlc3NN
YW5hZ2VyKiBtYW5hZ2VyID0gZnJhbWVMb2FkZXIgPyBmcmFtZUxvYWRlci0+d2ViRnJhbWUoKS0+
cGFnZSgpLT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpIDogMDsKKworICAgICAgICBpZiAoZG9jdW1l
bnQgJiYgbWFuYWdlcikgeworICAgICAgICAgICAgLy8gU2V0IHRoZSBjb29raWVzCisgICAgICAg
ICAgICBRTmV0d29ya0Nvb2tpZUphciogamFyID0gbWFuYWdlci0+Y29va2llSmFyKCk7CisgICAg
ICAgICAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT4gY29va2llcyA9IGphci0+Y29va2llc0ZvclVy
bChyVXJsKTsKKworICAgICAgICAgICAgLy8gRG9uJ3Qgc2V0IHRoZSBoZWFkZXIgaWYgdGhlcmUg
YXJlIG5vIGNvb2tpZXMuCisgICAgICAgICAgICAvLyBUaGlzIHByZXZlbnRzIGEgd2FybmluZyBm
cm9tIGJlaW5nIGVtaXR0ZWQuCisgICAgICAgICAgICBpZiAoIWNvb2tpZXMuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgICAgIHJlcXVlc3Quc2V0SGVhZGVyKFFOZXR3b3JrUmVxdWVzdDo6Q29va2ll
SGVhZGVyLCBxVmFyaWFudEZyb21WYWx1ZShjb29raWVzKSk7CisKKyAgICAgICAgICAgIC8vIFNl
dCB0aGUgcmVmZmVyZXIKKyAgICAgICAgICAgIHJlcXVlc3Quc2V0UmF3SGVhZGVyKCJSZWZmZXJl
ciIsIGRvY3VtZW50LT5kb2N1bWVudFVSSSgpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgICAgICAg
ICAvLyBTZXQgdGhlIHVzZXIgYWdlbnQKKyAgICAgICAgICAgIHJlcXVlc3Quc2V0UmF3SGVhZGVy
KCJVc2VyLUFnZW50IiwgZnJhbWVMb2FkZXItPnVzZXJBZ2VudChyVXJsKS51dGY4KCkuZGF0YSgp
KTsKKyAgICAgICAgfQorCisgICAgICAgIG1fbWVkaWFQbGF5ZXItPnNldE1lZGlhKFFNZWRpYUNv
bnRlbnQocmVxdWVzdCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE90aGVyd2lzZSwganVz
dCB1c2UgdGhlIFVSTAorICAgICAgICBtX21lZGlhUGxheWVyLT5zZXRNZWRpYShRTWVkaWFDb250
ZW50KHJVcmwpKTsKKyAgICB9Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpjYW5jZWxM
b2FkKCkKK3sKKyAgICBtX21lZGlhUGxheWVyLT5zZXRNZWRpYShRTWVkaWFDb250ZW50KCkpOwor
ICAgIHVwZGF0ZVN0YXRlcygpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGxheSgp
Cit7CisgICAgaWYgKG1fbWVkaWFQbGF5ZXItPnN0YXRlKCkgIT0gUU1lZGlhUGxheWVyOjpQbGF5
aW5nU3RhdGUpCisgICAgICAgIG1fbWVkaWFQbGF5ZXItPnBsYXkoKTsKK30KKwordm9pZCBNZWRp
YVBsYXllclByaXZhdGU6OnBhdXNlKCkKK3sKKyAgICBpZiAobV9tZWRpYVBsYXllci0+c3RhdGUo
KSA9PSBRTWVkaWFQbGF5ZXI6OlBsYXlpbmdTdGF0ZSkKKyAgICAgICAgbV9tZWRpYVBsYXllci0+
cGF1c2UoKTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGU6OnBhdXNlZCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIChtX21lZGlhUGxheWVyLT5zdGF0ZSgpICE9IFFNZWRpYVBsYXllcjo6UGxh
eWluZ1N0YXRlKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNlZWsoZmxvYXQgcG9z
aXRpb24pCit7CisgICAgaWYgKCFtX21lZGlhUGxheWVyLT5pc1NlZWthYmxlKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChtX21lZGlhUGxheWVyQ29udHJvbCAmJiAhbV9tZWRpYVBsYXll
ckNvbnRyb2wtPmF2YWlsYWJsZVBsYXliYWNrUmFuZ2VzKCkuY29udGFpbnMocG9zaXRpb24gKiAx
MDAwKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHBvc2l0aW9uID4gZHVyYXRpb24oKSkK
KyAgICAgICAgcG9zaXRpb24gPSBkdXJhdGlvbigpOworCisgICAgLy8gU2Vla2luZyBpcyBtb3N0
IHJlbGlhYmxlIHdoZW4gd2UncmUgcGF1c2VkLgorICAgIC8vIFdlYmtpdCB3aWxsIHRyeSB0byBw
YXVzZSBiZWZvcmUgc2Vla2luZywgYnV0IGR1ZSB0byB0aGUgYXN5bmNocm9ub3VzIG5hdHVyZQor
ICAgIC8vIG9mIHRoZSBiYWNrZW5kLCB0aGUgcGxheWVyIG1heSBub3QgYWN0dWFsbHkgYmUgcGF1
c2VkIHlldC4KKyAgICAvLyBJbiB0aGlzIGNhc2UsIHdlIHNob3VsZCBxdWV1ZSB0aGUgc2VlayBh
bmQgd2FpdCB1bnRpbCBwYXVzaW5nIGhhcyBjb21wbGV0ZWQKKyAgICAvLyBiZWZvcmUgYXR0ZW1w
dGluZyB0byBzZWVrLgorICAgIGlmIChtX21lZGlhUGxheWVyLT5zdGF0ZSgpID09IFFNZWRpYVBs
YXllcjo6UGxheWluZ1N0YXRlKSB7CisgICAgICAgIG1fbWVkaWFQbGF5ZXItPnBhdXNlKCk7Cisg
ICAgICAgIG1faXNTZWVraW5nID0gdHJ1ZTsKKyAgICAgICAgbV9xdWV1ZWRTZWVrID0gc3RhdGlj
X2Nhc3Q8cWludDY0Pihwb3NpdGlvbiAqIDEwMDApOworICAgIH0gZWxzZSB7CisgICAgICAgIG1f
aXNTZWVraW5nID0gdHJ1ZTsKKyAgICAgICAgbV9tZWRpYVBsYXllci0+c2V0UG9zaXRpb24oc3Rh
dGljX2Nhc3Q8cWludDY0Pihwb3NpdGlvbiAqIDEwMDApKTsKKyAgICB9Cit9CisKK2Jvb2wgTWVk
aWFQbGF5ZXJQcml2YXRlOjpzZWVraW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pc1NlZWtp
bmc7Cit9CisKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZTo6ZHVyYXRpb24oKSBjb25zdAorewor
ICAgIGlmIChtX3JlYWR5U3RhdGUgPCBNZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRhKQorICAgICAg
ICByZXR1cm4gMC4wZjsKKworICAgIGZsb2F0IGR1cmF0aW9uID0gbV9tZWRpYVBsYXllci0+ZHVy
YXRpb24oKSAvIDEwMDAuMGY7CisKKyAgICAvLyBXZSBhcmUgc3RyZWFtaW5nCisgICAgaWYgKGR1
cmF0aW9uIDw9IDAuMGYpCisgICAgICAgIGR1cmF0aW9uID0gc3RkOjpudW1lcmljX2xpbWl0czxm
bG9hdD46OmluZmluaXR5KCk7CisKKyAgICByZXR1cm4gZHVyYXRpb247Cit9CisKK2Zsb2F0IE1l
ZGlhUGxheWVyUHJpdmF0ZTo6Y3VycmVudFRpbWUoKSBjb25zdAoreworICAgIGZsb2F0IGN1cnJl
bnRUaW1lID0gbV9tZWRpYVBsYXllci0+cG9zaXRpb24oKSAvIDEwMDAuMGY7CisgICAgcmV0dXJu
IGN1cnJlbnRUaW1lOworfQorCitQYXNzUmVmUHRyPFRpbWVSYW5nZXM+IE1lZGlhUGxheWVyUHJp
dmF0ZTo6YnVmZmVyZWQoKSBjb25zdAoreworICAgIFJlZlB0cjxUaW1lUmFuZ2VzPiBidWZmZXJl
ZCA9IFRpbWVSYW5nZXM6OmNyZWF0ZSgpOworCisgICAgaWYgKCFtX21lZGlhUGxheWVyQ29udHJv
bCkKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcmVkOworCisgICAgUU1lZGlhVGltZVJhbmdlIHBsYXli
YWNrUmFuZ2VzID0gbV9tZWRpYVBsYXllckNvbnRyb2wtPmF2YWlsYWJsZVBsYXliYWNrUmFuZ2Vz
KCk7CisKKyAgICBmb3JlYWNoIChjb25zdCBRTWVkaWFUaW1lSW50ZXJ2YWwgaW50ZXJ2YWwsIHBs
YXliYWNrUmFuZ2VzLmludGVydmFscygpKSB7CisgICAgICAgIGZsb2F0IHJhbmdlTWluID0gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KGludGVydmFsLnN0YXJ0KCkpIC8gMTAwMC4wZjsKKyAgICAgICAgZmxv
YXQgcmFuZ2VNYXggPSBzdGF0aWNfY2FzdDxmbG9hdD4oaW50ZXJ2YWwuZW5kKCkpIC8gMTAwMC4w
ZjsKKyAgICAgICAgYnVmZmVyZWQtPmFkZChyYW5nZU1pbiwgcmFuZ2VNYXgpOworICAgIH0KKwor
ICAgIHJldHVybiBidWZmZXJlZC5yZWxlYXNlKCk7Cit9CisKK2Zsb2F0IE1lZGlhUGxheWVyUHJp
dmF0ZTo6bWF4VGltZVNlZWthYmxlKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXJD
b250cm9sKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9h
dD4obV9tZWRpYVBsYXllckNvbnRyb2wtPmF2YWlsYWJsZVBsYXliYWNrUmFuZ2VzKCkubGF0ZXN0
VGltZSgpKSAvIDEwMDAuMGY7Cit9CisKK3Vuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Ynl0
ZXNMb2FkZWQoKSBjb25zdAoreworICAgIHVuc2lnbmVkIHBlcmNlbnRhZ2UgPSBtX21lZGlhUGxh
eWVyLT5idWZmZXJTdGF0dXMoKTsKKworICAgIGlmIChwZXJjZW50YWdlID09IDEwMCkgeworICAg
ICAgICBpZiAobV9uZXR3b3JrU3RhdGUgIT0gTWVkaWFQbGF5ZXI6OklkbGUpIHsKKyAgICAgICAg
ICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OklkbGU7CisgICAgICAgICAgICBtX3Bs
YXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgpOworICAgICAgICB9CisgICAgICAgIGlmIChtX3Jl
YWR5U3RhdGUgIT0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhKSB7CisgICAgICAgICAgICBt
X3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGE7CisgICAgICAgICAgICBt
X3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFFM
YXRpbjFTdHJpbmcgYmxLZXkoImJ5dGVzLWxvYWRlZCIpOworICAgIGlmIChtX21lZGlhUGxheWVy
LT5hdmFpbGFibGVFeHRlbmRlZE1ldGFEYXRhKCkuY29udGFpbnMoYmxLZXkpKQorICAgICAgICBy
ZXR1cm4gbV9tZWRpYVBsYXllci0+ZXh0ZW5kZWRNZXRhRGF0YShibEtleSkudG9JbnQoKTsKKwor
ICAgIHJldHVybiBwZXJjZW50YWdlOworfQorCit1bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGU6
OnRvdGFsQnl0ZXMoKSBjb25zdAoreworICAgIGlmIChtX21lZGlhUGxheWVyLT5hdmFpbGFibGVN
ZXRhRGF0YSgpLmNvbnRhaW5zKFF0TWVkaWE6OlNpemUpKQorICAgICAgICByZXR1cm4gbV9tZWRp
YVBsYXllci0+bWV0YURhdGEoUXRNZWRpYTo6U2l6ZSkudG9JbnQoKTsKKworICAgIHJldHVybiAx
MDA7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRSYXRlKGZsb2F0IHJhdGUpCit7
CisgICAgbV9tZWRpYVBsYXllci0+c2V0UGxheWJhY2tSYXRlKHJhdGUpOworfQorCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZTo6c2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSkKK3sKKyAgICBtX21lZGlh
UGxheWVyLT5zZXRWb2x1bWUoc3RhdGljX2Nhc3Q8aW50Pih2b2x1bWUgKiAxMDAuMCkpOworfQor
Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0TXV0ZWQoYm9vbCBtdXRlZCkKK3sKKyAgICBt
X21lZGlhUGxheWVyLT5zZXRNdXRlZChtdXRlZCk7Cit9CisKK01lZGlhUGxheWVyOjpOZXR3b3Jr
U3RhdGUgTWVkaWFQbGF5ZXJQcml2YXRlOjpuZXR3b3JrU3RhdGUoKSBjb25zdAoreworICAgIHJl
dHVybiBtX25ldHdvcmtTdGF0ZTsKK30KKworTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgTWVkaWFQ
bGF5ZXJQcml2YXRlOjpyZWFkeVN0YXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZWFkeVN0
YXRlOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0VmlzaWJsZShib29sIHZpc2li
bGUpCit7CisgICAgbV9pc1Zpc2libGUgPSB2aXNpYmxlOworfQorCit2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZTo6bWVkaWFTdGF0dXNDaGFuZ2VkKFFNZWRpYVBsYXllcjo6TWVkaWFTdGF0dXMpCit7
CisgICAgdXBkYXRlU3RhdGVzKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpoYW5k
bGVFcnJvcihRTWVkaWFQbGF5ZXI6OkVycm9yKQoreworICAgIHVwZGF0ZVN0YXRlcygpOworfQor
Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c3RhdGVDaGFuZ2VkKFFNZWRpYVBsYXllcjo6U3Rh
dGUgc3RhdGUpCit7CisgICAgaWYgKHN0YXRlICE9IFFNZWRpYVBsYXllcjo6UGxheWluZ1N0YXRl
ICYmIG1faXNTZWVraW5nICYmIG1fcXVldWVkU2VlayA+PSAwKSB7CisgICAgICAgIG1fbWVkaWFQ
bGF5ZXItPnNldFBvc2l0aW9uKG1fcXVldWVkU2Vlayk7CisgICAgICAgIG1fcXVldWVkU2VlayA9
IC0xOworICAgIH0KK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnBvc2l0aW9uQ2hhbmdl
ZChxaW50NjQpCit7CisgICAgLy8gT25seSBwcm9wb2dhdGUgdGhpcyBldmVudCBpZiB3ZSBhcmUg
c2Vla2luZworICAgIGlmIChtX2lzU2Vla2luZyAmJiBtX3F1ZXVlZFNlZWsgPT0gLTEpIHsKKyAg
ICAgICAgbV9wbGF5ZXItPnRpbWVDaGFuZ2VkKCk7CisgICAgICAgIG1faXNTZWVraW5nID0gZmFs
c2U7CisgICAgfQorfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6ZHVyYXRpb25DaGFuZ2Vk
KHFpbnQ2NCkKK3sKKyAgICBtX3BsYXllci0+ZHVyYXRpb25DaGFuZ2VkKCk7Cit9CisKK3ZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlOjp1cGRhdGVTdGF0ZXMoKQoreworICAgIC8vIFN0b3JlIHRoZSBv
bGQgc3RhdGVzIHNvIHRoYXQgd2UgY2FuIGRldGVjdCBhIGNoYW5nZSBhbmQgcmFpc2UgY2hhbmdl
IGV2ZW50cworICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgb2xkTmV0d29ya1N0YXRlID0g
bV9uZXR3b3JrU3RhdGU7CisgICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgb2xkUmVhZHlTdGF0
ZSA9IG1fcmVhZHlTdGF0ZTsKKworICAgIFFNZWRpYVBsYXllcjo6TWVkaWFTdGF0dXMgY3VycmVu
dFN0YXR1cyA9IG1fbWVkaWFQbGF5ZXItPm1lZGlhU3RhdHVzKCk7CisgICAgUU1lZGlhUGxheWVy
OjpFcnJvciBjdXJyZW50RXJyb3IgPSBtX21lZGlhUGxheWVyLT5lcnJvcigpOworCisgICAgaWYg
KGN1cnJlbnRFcnJvciAhPSBRTWVkaWFQbGF5ZXI6Ok5vRXJyb3IpIHsKKyAgICAgICAgbV9yZWFk
eVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOworICAgICAgICBpZiAoY3VycmVudEVy
cm9yID09IFFNZWRpYVBsYXllcjo6Rm9ybWF0RXJyb3IpCisgICAgICAgICAgICBtX25ldHdvcmtT
dGF0ZSA9IE1lZGlhUGxheWVyOjpGb3JtYXRFcnJvcjsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TmV0d29ya0Vycm9yOworICAgIH0gZWxz
ZSBpZiAoY3VycmVudFN0YXR1cyA9PSBRTWVkaWFQbGF5ZXI6OlVua25vd25NZWRpYVN0YXR1cwor
ICAgICAgICAgICAgICAgfHwgY3VycmVudFN0YXR1cyA9PSBRTWVkaWFQbGF5ZXI6Ok5vTWVkaWEp
IHsKKyAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6SWRsZTsKKyAgICAgICAg
bV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOworICAgIH0gZWxzZSBpZiAo
Y3VycmVudFN0YXR1cyA9PSBRTWVkaWFQbGF5ZXI6OkxvYWRpbmdNZWRpYSkgeworICAgICAgICBt
X25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOworICAgICAgICBtX3JlYWR5U3Rh
dGUgPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7CisgICAgfSBlbHNlIGlmIChjdXJyZW50U3Rh
dHVzID09IFFNZWRpYVBsYXllcjo6TG9hZGVkTWVkaWEpIHsKKyAgICAgICAgbV9uZXR3b3JrU3Rh
dGUgPSBNZWRpYVBsYXllcjo6TG9hZGluZzsKKyAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQ
bGF5ZXI6OkhhdmVNZXRhZGF0YTsKKyAgICB9IGVsc2UgaWYgKGN1cnJlbnRTdGF0dXMgPT0gUU1l
ZGlhUGxheWVyOjpCdWZmZXJpbmdNZWRpYSkgeworICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1l
ZGlhUGxheWVyOjpMb2FkaW5nOworICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6
SGF2ZUZ1dHVyZURhdGE7CisgICAgfSBlbHNlIGlmIChjdXJyZW50U3RhdHVzID09IFFNZWRpYVBs
YXllcjo6U3RhbGxlZE1lZGlhKSB7CisgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5
ZXI6OkxvYWRpbmc7CisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlQ3Vy
cmVudERhdGE7CisgICAgfSBlbHNlIGlmIChjdXJyZW50U3RhdHVzID09IFFNZWRpYVBsYXllcjo6
QnVmZmVyZWRNZWRpYQorICAgICAgICAgICAgICAgfHwgY3VycmVudFN0YXR1cyA9PSBRTWVkaWFQ
bGF5ZXI6OkVuZE9mTWVkaWEpIHsKKyAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXll
cjo6SWRsZTsKKyAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hE
YXRhOworICAgIH0gZWxzZSBpZiAoY3VycmVudFN0YXR1cyA9PSBRTWVkaWFQbGF5ZXI6OkludmFs
aWRNZWRpYSkgeworICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpOZXR3b3Jr
RXJyb3I7CisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsK
KyAgICB9CisKKyAgICAvLyBMb2cgdGhlIHN0YXRlIGNoYW5nZXMgYW5kIHJhaXNlIHRoZSBzdGF0
ZSBjaGFuZ2UgZXZlbnRzCisgICAgLy8gTkI6IFRoZSByZWFkeVN0YXRlQ2hhbmdlZCBldmVudCBt
dXN0IGNvbWUgYmVmb3JlIHRoZSBuZXR3b3JrU3RhdGVDaGFuZ2VkIGV2ZW50LgorICAgIC8vIEJy
ZWFraW5nIHRoaXMgaW52YXJpYW50IHdpbGwgY2F1c2UgdGhlIHJlc291cmNlIHNlbGVjdGlvbiBh
bGdvcml0aG0gZm9yIG11bHRpcGxlCisgICAgLy8gc291cmNlcyB0byBmYWlsLgorICAgIGlmICht
X3JlYWR5U3RhdGUgIT0gb2xkUmVhZHlTdGF0ZSkKKyAgICAgICAgbV9wbGF5ZXItPnJlYWR5U3Rh
dGVDaGFuZ2VkKCk7CisKKyAgICBpZiAobV9uZXR3b3JrU3RhdGUgIT0gb2xkTmV0d29ya1N0YXRl
KQorICAgICAgICBtX3BsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgpOworfQorCitNZWRpYVBs
YXllclByaXZhdGVEZWZhdWx0OjpNZWRpYVBsYXllclByaXZhdGVEZWZhdWx0KE1lZGlhUGxheWVy
ICpwbGF5ZXIpCisgICAgOiBNZWRpYVBsYXllclByaXZhdGUocGxheWVyKQorICAgICwgbV92aWRl
b1N1cmZhY2UobmV3IFFQYWludGVyVmlkZW9TdXJmYWNlKG1fbWVkaWFQbGF5ZXIpKQoreworICAg
IGlmIChtX21lZGlhUGxheWVyKSB7CisgICAgICAgIFFNZWRpYVNlcnZpY2UqIHNlcnZpY2UgPSBt
X21lZGlhUGxheWVyLT5zZXJ2aWNlKCk7CisgICAgICAgIGlmIChzZXJ2aWNlKSB7CisgICAgICAg
ICAgICBtX291dHB1dENvbnRyb2wgPSBxb2JqZWN0X2Nhc3Q8UVZpZGVvT3V0cHV0Q29udHJvbCo+
KAorICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLT5jb250cm9sKFFWaWRlb091dHB1dENvbnRy
b2xfaWlkKSk7CisgICAgICAgICAgICBtX3JlbmRlcmVyQ29udHJvbCA9IHFvYmplY3RfY2FzdDxR
VmlkZW9SZW5kZXJlckNvbnRyb2wqPigKKyAgICAgICAgICAgICAgICAgICAgc2VydmljZS0+Y29u
dHJvbChRVmlkZW9SZW5kZXJlckNvbnRyb2xfaWlkKSk7CisKKyAgICAgICAgICAgIGlmIChtX291
dHB1dENvbnRyb2wgJiYgbV9yZW5kZXJlckNvbnRyb2wpIHsKKyAgICAgICAgICAgICAgICBjb25u
ZWN0KG1fdmlkZW9TdXJmYWNlLCBTSUdOQUwoZnJhbWVDaGFuZ2VkKCkpLCB0aGlzLCBTTE9UKHJl
cGFpbnQoKSkpOworCisgICAgICAgICAgICAgICAgbV9yZW5kZXJlckNvbnRyb2wtPnNldFN1cmZh
Y2UobV92aWRlb1N1cmZhY2UpOworICAgICAgICAgICAgICAgIG1fb3V0cHV0Q29udHJvbC0+c2V0
T3V0cHV0KFFWaWRlb091dHB1dENvbnRyb2w6OlJlbmRlcmVyT3V0cHV0KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KK30KKworTWVkaWFQbGF5ZXJQcml2YXRlRGVmYXVsdDo6fk1l
ZGlhUGxheWVyUHJpdmF0ZURlZmF1bHQoKQoreworICAgIGRlbGV0ZSBtX3ZpZGVvU3VyZmFjZTsK
KyAgICBtX3ZpZGVvU3VyZmFjZSA9IDA7Cit9CisKK0ludFNpemUgTWVkaWFQbGF5ZXJQcml2YXRl
RGVmYXVsdDo6bmF0dXJhbFNpemUoKSBjb25zdAoreworICAgIGlmICghaGFzVmlkZW8oKSB8fCBt
X3JlYWR5U3RhdGUgPCBNZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRhKQorICAgICAgICByZXR1cm4g
SW50U2l6ZSgpOworCisgICAgUVNpemUgdmlkZW9TaXplID0gbV92aWRlb1N1cmZhY2UtPnN1cmZh
Y2VGb3JtYXQoKS5zaXplSGludCgpOworCisgICAgaWYgKHZpZGVvU2l6ZS5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiBJbnRTaXplKCk7CisKKyAgICByZXR1cm4gSW50U2l6ZSh2aWRlb1NpemUu
d2lkdGgoKSwgdmlkZW9TaXplLmhlaWdodCgpKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZh
dGVEZWZhdWx0OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3Qm
IHJlY3QpCit7CisgICAgaWYgKGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKCFtX2lzVmlzaWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gR3JhYiB0aGUgcGFpbnRlcgorICAgIFFQYWludGVyKiBwYWludGVyID0gY29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCk7CisKKyAgICBpZiAoIW1faXNBY3RpdmUpIHsKKyAgICAgICAgLy8gQXR0
ZW1wdCBHTCBTZXR1cAorI2lmICFkZWZpbmVkKFFUX05PX09QRU5HTCkgJiYgIWRlZmluZWQoUVRf
T1BFTkdMX0VTXzFfQ0wpICYmICFkZWZpbmVkKFFUX09QRU5HTF9FU18xKQorICAgICAgICBpZiAo
KHBhaW50ZXItPnBhaW50RW5naW5lKCktPnR5cGUoKSA9PSBRUGFpbnRFbmdpbmU6Ok9wZW5HTAor
ICAgICAgICAgICAgIHx8IHBhaW50ZXItPnBhaW50RW5naW5lKCktPnR5cGUoKSA9PSBRUGFpbnRF
bmdpbmU6Ok9wZW5HTDIpKSB7CisgICAgICAgICAgICAvLyBTZXQgR0wgQ29udGV4dAorICAgICAg
ICAgICAgbV92aWRlb1N1cmZhY2UtPnNldEdMQ29udGV4dChjb25zdF9jYXN0PFFHTENvbnRleHQg
Kj4oUUdMQ29udGV4dDo6Y3VycmVudENvbnRleHQoKSkpOworCisgICAgICAgICAgICAvLyBDaGVj
ayBTaGFkZXIgVHlwZXMKKyAgICAgICAgICAgIGlmIChtX3ZpZGVvU3VyZmFjZS0+c3VwcG9ydGVk
U2hhZGVyVHlwZXMoKSAmIFFQYWludGVyVmlkZW9TdXJmYWNlOjpHbHNsU2hhZGVyKQorICAgICAg
ICAgICAgICAgIG1fdmlkZW9TdXJmYWNlLT5zZXRTaGFkZXJUeXBlKFFQYWludGVyVmlkZW9TdXJm
YWNlOjpHbHNsU2hhZGVyKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Zp
ZGVvU3VyZmFjZS0+c2V0U2hhZGVyVHlwZShRUGFpbnRlclZpZGVvU3VyZmFjZTo6RnJhZ21lbnRQ
cm9ncmFtU2hhZGVyKTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgLy8gU2V0dXAgQ29t
cGxldGVkCisgICAgICAgIG1faXNBY3RpdmUgPSB0cnVlOworICAgIH0KKworICAgIC8vIFBhaW50
IHRoZSBmcmFtZQorICAgIG1fdmlkZW9TdXJmYWNlLT5wYWludChwYWludGVyLCBRUmVjdChyZWN0
KSk7CisgICAgbV92aWRlb1N1cmZhY2UtPnNldFJlYWR5KHRydWUpOworfQorCit2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZURlZmF1bHQ6OnJlcGFpbnQoKQoreworICAgIG1fcGxheWVyLT5yZXBhaW50
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2luY2x1ZGUgIm1vY19NZWRpYVBs
YXllclByaXZhdGVRdC5jcHAiCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01l
ZGlhUGxheWVyUHJpdmF0ZVF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDEwOCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBNZWRpYVBsYXll
clByaXZhdGVRdF9oCisjZGVmaW5lIE1lZGlhUGxheWVyUHJpdmF0ZVF0X2gKKworI2luY2x1ZGUg
Ik1lZGlhUGxheWVyUHJpdmF0ZS5oIgorCisjaW5jbHVkZSA8UU1lZGlhUGxheWVyPgorI2luY2x1
ZGUgPFFNZWRpYVBsYXllckNvbnRyb2w+CisjaW5jbHVkZSA8UU9iamVjdD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBNZWRpYVBsYXllclByaXZhdGUgOiBwdWJsaWMgUU9iamVjdCwg
cHVibGljIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSB7CisKKyAgICBRX09CSkVDVAorCitw
dWJsaWM6CisgICAgc3RhdGljIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSogY3JlYXRlKE1l
ZGlhUGxheWVyKiBwbGF5ZXIpOworICAgIHZpcnR1YWwgfk1lZGlhUGxheWVyUHJpdmF0ZSgpOwor
CisgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJlZ2lzdHJh
cik7CisgICAgc3RhdGljIHZvaWQgZ2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmc+Jik7
CisgICAgc3RhdGljIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgc3VwcG9ydHNUeXBlKGNvbnN0
IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBjb2RlY3MpOworICAgIHN0YXRpYyBib29sIGlz
QXZhaWxhYmxlKCkgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgYm9vbCBoYXNWaWRlbygpIGNvbnN0
OworICAgIGJvb2wgaGFzQXVkaW8oKSBjb25zdDsKKworICAgIHZvaWQgbG9hZChjb25zdCBTdHJp
bmcgJnVybCk7CisgICAgdm9pZCBjYW5jZWxMb2FkKCk7CisKKyAgICB2b2lkIHBsYXkoKTsKKyAg
ICB2b2lkIHBhdXNlKCk7CisKKyAgICBib29sIHBhdXNlZCgpIGNvbnN0OworICAgIGJvb2wgc2Vl
a2luZygpIGNvbnN0OworCisgICAgZmxvYXQgZHVyYXRpb24oKSBjb25zdDsKKyAgICBmbG9hdCBj
dXJyZW50VGltZSgpIGNvbnN0OworICAgIHZvaWQgc2VlayhmbG9hdCk7CisKKyAgICB2b2lkIHNl
dFJhdGUoZmxvYXQpOworICAgIHZvaWQgc2V0Vm9sdW1lKGZsb2F0KTsKKyAgICB2b2lkIHNldE11
dGVkKGJvb2wpOworCisgICAgLy8gU3RhdGUgSW5mb3JtYXRpb24KKyAgICBNZWRpYVBsYXllcjo6
TmV0d29ya1N0YXRlIG5ldHdvcmtTdGF0ZSgpIGNvbnN0OworICAgIE1lZGlhUGxheWVyOjpSZWFk
eVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdDsKKworICAgIC8vIE5ldHdvcmsgSW5mb3JtYXRpb24K
KyAgICBQYXNzUmVmUHRyPFRpbWVSYW5nZXM+IGJ1ZmZlcmVkKCkgY29uc3Q7CisgICAgZmxvYXQg
bWF4VGltZVNlZWthYmxlKCkgY29uc3Q7CisgICAgdW5zaWduZWQgYnl0ZXNMb2FkZWQoKSBjb25z
dDsKKyAgICB1bnNpZ25lZCB0b3RhbEJ5dGVzKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0VmlzaWJsZShib29sKTsKKworICAgIHZpcnR1YWwgSW50U2l6ZSBuYXR1cmFsU2l6ZSgpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2l6ZShjb25zdCBJbnRTaXplJikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jikg
PSAwOworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Z1bGxzY3JlZW4oKSBjb25zdCA9IDA7CisK
K3Byb3RlY3RlZCBzbG90czoKKyAgICB2aXJ0dWFsIHZvaWQgbWVkaWFTdGF0dXNDaGFuZ2VkKFFN
ZWRpYVBsYXllcjo6TWVkaWFTdGF0dXMpOworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFcnJvcihR
TWVkaWFQbGF5ZXI6OkVycm9yKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhdGVDaGFuZ2VkKFFNZWRp
YVBsYXllcjo6U3RhdGUpOworICAgIHZpcnR1YWwgdm9pZCBwb3NpdGlvbkNoYW5nZWQocWludDY0
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZHVyYXRpb25DaGFuZ2VkKHFpbnQ2NCk7CisgICAgdmlydHVh
bCB2b2lkIHJlcGFpbnQoKSB7fQorCitwcm90ZWN0ZWQ6CisgICAgTWVkaWFQbGF5ZXJQcml2YXRl
KE1lZGlhUGxheWVyKik7CisKKyAgICBNZWRpYVBsYXllciogbV9wbGF5ZXI7CisgICAgUU1lZGlh
UGxheWVyKiBtX21lZGlhUGxheWVyOworICAgIFFNZWRpYVBsYXllckNvbnRyb2wqIG1fbWVkaWFQ
bGF5ZXJDb250cm9sOworCisgICAgbXV0YWJsZSBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG1f
bmV0d29ya1N0YXRlOworICAgIG11dGFibGUgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgbV9yZWFk
eVN0YXRlOworCisgICAgYm9vbCBtX2lzVmlzaWJsZTsKKyAgICBib29sIG1faXNTZWVraW5nOwor
ICAgIHFpbnQ2NCBtX3F1ZXVlZFNlZWs7CisKK3ByaXZhdGU6CisgICAgdm9pZCB1cGRhdGVTdGF0
ZXMoKTsKK307Cit9CisKKyNlbmRpZiAvLyBNZWRpYVBsYXllclByaXZhdGVRdF9oCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1FQYWludGVyVmlkZW9TdXJmYWNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1FQYWludGVyVmlkZW9TdXJm
YWNlLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvUVBh
aW50ZXJWaWRlb1N1cmZhY2UuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzNzkgQEAKKy8q
CisgICAgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJRUGFpbnRl
clZpZGVvU3VyZmFjZS5oIgorCisjaW5jbHVkZSA8UVBhaW50ZXI+CisjaW5jbHVkZSA8UVZhcmlh
bnQ+CisjaW5jbHVkZSA8UVZpZGVvU3VyZmFjZUZvcm1hdD4KKyNpbmNsdWRlIDxxbWF0aC5oPgor
CisjaWYgIWRlZmluZWQoUVRfTk9fT1BFTkdMKSAmJiAhZGVmaW5lZChRVF9PUEVOR0xfRVNfMV9D
TCkgJiYgIWRlZmluZWQoUVRfT1BFTkdMX0VTXzEpCisjaW5jbHVkZSA8cWdsc2hhZGVycHJvZ3Jh
bS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUVZpZGVvU3VyZmFj
ZVBhaW50ZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgflFWaWRlb1N1cmZhY2VQYWludGVyKCk7
CisKKyAgICB2aXJ0dWFsIFFMaXN0PFFWaWRlb0ZyYW1lOjpQaXhlbEZvcm1hdD4gc3VwcG9ydGVk
UGl4ZWxGb3JtYXRzKAorICAgICAgICAgICAgUUFic3RyYWN0VmlkZW9CdWZmZXI6OkhhbmRsZVR5
cGUgaGFuZGxlVHlwZSkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBib29sIGlzRm9ybWF0U3Vw
cG9ydGVkKAorICAgICAgICAgICAgY29uc3QgUVZpZGVvU3VyZmFjZUZvcm1hdCAmZm9ybWF0LCBR
VmlkZW9TdXJmYWNlRm9ybWF0ICpzaW1pbGFyKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIFFB
YnN0cmFjdFZpZGVvU3VyZmFjZTo6RXJyb3Igc3RhcnQoY29uc3QgUVZpZGVvU3VyZmFjZUZvcm1h
dCAmZm9ybWF0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0b3AoKSA9IDA7CisKKyAgICB2aXJ0
dWFsIFFBYnN0cmFjdFZpZGVvU3VyZmFjZTo6RXJyb3Igc2V0Q3VycmVudEZyYW1lKGNvbnN0IFFW
aWRlb0ZyYW1lICZmcmFtZSkgPSAwOworCisgICAgdmlydHVhbCBRQWJzdHJhY3RWaWRlb1N1cmZh
Y2U6OkVycm9yIHBhaW50KAorICAgICAgICAgICAgY29uc3QgUVJlY3RGICZ0YXJnZXQsIFFQYWlu
dGVyICpwYWludGVyLCBjb25zdCBRUmVjdEYgJnNvdXJjZSkgPSAwOworCisgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZUNvbG9ycyhpbnQgYnJpZ2h0bmVzcywgaW50IGNvbnRyYXN0LCBpbnQgaHVlLCBp
bnQgc2F0dXJhdGlvbikgPSAwOworfTsKKworUVZpZGVvU3VyZmFjZVBhaW50ZXI6On5RVmlkZW9T
dXJmYWNlUGFpbnRlcigpCit7Cit9CisKK2NsYXNzIFFWaWRlb1N1cmZhY2VSYXN0ZXJQYWludGVy
IDogcHVibGljIFFWaWRlb1N1cmZhY2VQYWludGVyIHsKK3B1YmxpYzoKKyAgICBRVmlkZW9TdXJm
YWNlUmFzdGVyUGFpbnRlcigpOworCisgICAgUUxpc3Q8UVZpZGVvRnJhbWU6OlBpeGVsRm9ybWF0
PiBzdXBwb3J0ZWRQaXhlbEZvcm1hdHMoCisgICAgICAgICAgICBRQWJzdHJhY3RWaWRlb0J1ZmZl
cjo6SGFuZGxlVHlwZSBoYW5kbGVUeXBlKSBjb25zdDsKKworICAgIGJvb2wgaXNGb3JtYXRTdXBw
b3J0ZWQoCisgICAgICAgICAgICBjb25zdCBRVmlkZW9TdXJmYWNlRm9ybWF0ICZmb3JtYXQsIFFW
aWRlb1N1cmZhY2VGb3JtYXQgKnNpbWlsYXIpIGNvbnN0OworCisgICAgUUFic3RyYWN0VmlkZW9T
dXJmYWNlOjpFcnJvciBzdGFydChjb25zdCBRVmlkZW9TdXJmYWNlRm9ybWF0ICZmb3JtYXQpOwor
ICAgIHZvaWQgc3RvcCgpOworCisgICAgUUFic3RyYWN0VmlkZW9TdXJmYWNlOjpFcnJvciBzZXRD
dXJyZW50RnJhbWUoY29uc3QgUVZpZGVvRnJhbWUgJmZyYW1lKTsKKworICAgIFFBYnN0cmFjdFZp
ZGVvU3VyZmFjZTo6RXJyb3IgcGFpbnQoCisgICAgICAgICAgICBjb25zdCBRUmVjdEYgJnRhcmdl
dCwgUVBhaW50ZXIgKnBhaW50ZXIsIGNvbnN0IFFSZWN0RiAmc291cmNlKTsKKworICAgIHZvaWQg
dXBkYXRlQ29sb3JzKGludCBicmlnaHRuZXNzLCBpbnQgY29udHJhc3QsIGludCBodWUsIGludCBz
YXR1cmF0aW9uKTsKKworcHJpdmF0ZToKKyAgICBRTGlzdDxRVmlkZW9GcmFtZTo6UGl4ZWxGb3Jt
YXQ+IG1faW1hZ2VQaXhlbEZvcm1hdHM7CisgICAgUVZpZGVvRnJhbWUgbV9mcmFtZTsKKyAgICBR
U2l6ZSBtX2ltYWdlU2l6ZTsKKyAgICBRSW1hZ2U6OkZvcm1hdCBtX2ltYWdlRm9ybWF0OworICAg
IFFWaWRlb1N1cmZhY2VGb3JtYXQ6OkRpcmVjdGlvbiBtX3NjYW5MaW5lRGlyZWN0aW9uOworfTsK
KworUVZpZGVvU3VyZmFjZVJhc3RlclBhaW50ZXI6OlFWaWRlb1N1cmZhY2VSYXN0ZXJQYWludGVy
KCkKKyAgICA6IG1faW1hZ2VGb3JtYXQoUUltYWdlOjpGb3JtYXRfSW52YWxpZCkKKyAgICAsIG1f
c2NhbkxpbmVEaXJlY3Rpb24oUVZpZGVvU3VyZmFjZUZvcm1hdDo6VG9wVG9Cb3R0b20pCit7Cisg
ICAgbV9pbWFnZVBpeGVsRm9ybWF0cworICAgICAgICA8PCBRVmlkZW9GcmFtZTo6Rm9ybWF0X1JH
QjMyCisjaWZuZGVmIFFUX09QRU5HTF9FUyAvLyBUaGUgcmFzdGVyIGZvcm1hdHMgc2hvdWxkIGJl
IGEgc3Vic2V0IG9mIHRoZSBHTCBmb3JtYXRzLgorICAgICAgICA8PCBRVmlkZW9GcmFtZTo6Rm9y
bWF0X1JHQjI0CisjZW5kaWYKKyAgICAgICAgPDwgUVZpZGVvRnJhbWU6OkZvcm1hdF9BUkdCMzIK
KyAgICAgICAgPDwgUVZpZGVvRnJhbWU6OkZvcm1hdF9SR0I1NjU7Cit9CisKK1FMaXN0PFFWaWRl
b0ZyYW1lOjpQaXhlbEZvcm1hdD4gUVZpZGVvU3VyZmFjZVJhc3RlclBhaW50ZXI6OnN1cHBvcnRl
ZFBpeGVsRm9ybWF0cygKKyAgICAgICAgUUFic3RyYWN0VmlkZW9CdWZmZXI6OkhhbmRsZVR5cGUg
aGFuZGxlVHlwZSkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFuZGxlVHlwZSA9PSBRQWJzdHJhY3RW
aWRlb0J1ZmZlcjo6Tm9IYW5kbGUKKyAgICAgICAgPyBtX2ltYWdlUGl4ZWxGb3JtYXRzCisgICAg
ICAgIDogUUxpc3Q8UVZpZGVvRnJhbWU6OlBpeGVsRm9ybWF0PigpOworfQorCitib29sIFFWaWRl
b1N1cmZhY2VSYXN0ZXJQYWludGVyOjppc0Zvcm1hdFN1cHBvcnRlZCgKKyAgICAgICAgY29uc3Qg
UVZpZGVvU3VyZmFjZUZvcm1hdCAmZm9ybWF0LCBRVmlkZW9TdXJmYWNlRm9ybWF0ICopIGNvbnN0
Cit7CisgICAgcmV0dXJuIGZvcm1hdC5oYW5kbGVUeXBlKCkgPT0gUUFic3RyYWN0VmlkZW9CdWZm
ZXI6Ok5vSGFuZGxlCisgICAgICAgICAgICAmJiBtX2ltYWdlUGl4ZWxGb3JtYXRzLmNvbnRhaW5z
KGZvcm1hdC5waXhlbEZvcm1hdCgpKQorICAgICAgICAgICAgJiYgIWZvcm1hdC5mcmFtZVNpemUo
KS5pc0VtcHR5KCk7Cit9CisKK1FBYnN0cmFjdFZpZGVvU3VyZmFjZTo6RXJyb3IgUVZpZGVvU3Vy
ZmFjZVJhc3RlclBhaW50ZXI6OnN0YXJ0KGNvbnN0IFFWaWRlb1N1cmZhY2VGb3JtYXQgJmZvcm1h
dCkKK3sKKyAgICBtX2ZyYW1lID0gUVZpZGVvRnJhbWUoKTsKKyAgICBtX2ltYWdlRm9ybWF0ID0g
UVZpZGVvRnJhbWU6OmltYWdlRm9ybWF0RnJvbVBpeGVsRm9ybWF0KGZvcm1hdC5waXhlbEZvcm1h
dCgpKTsKKyAgICBtX2ltYWdlU2l6ZSA9IGZvcm1hdC5mcmFtZVNpemUoKTsKKyAgICBtX3NjYW5M
aW5lRGlyZWN0aW9uID0gZm9ybWF0LnNjYW5MaW5lRGlyZWN0aW9uKCk7CisKKyAgICByZXR1cm4g
Zm9ybWF0LmhhbmRsZVR5cGUoKSA9PSBRQWJzdHJhY3RWaWRlb0J1ZmZlcjo6Tm9IYW5kbGUKKyAg
ICAgICAgICAgICYmIG1faW1hZ2VGb3JtYXQgIT0gUUltYWdlOjpGb3JtYXRfSW52YWxpZAorICAg
ICAgICAgICAgJiYgIW1faW1hZ2VTaXplLmlzRW1wdHkoKQorICAgICAgICAgICAgPyBRQWJzdHJh
Y3RWaWRlb1N1cmZhY2U6Ok5vRXJyb3IKKyAgICAgICAgICAgIDogUUFic3RyYWN0VmlkZW9TdXJm
YWNlOjpVbnN1cHBvcnRlZEZvcm1hdEVycm9yOworfQorCit2b2lkIFFWaWRlb1N1cmZhY2VSYXN0
ZXJQYWludGVyOjpzdG9wKCkKK3sKKyAgICBtX2ZyYW1lID0gUVZpZGVvRnJhbWUoKTsKK30KKwor
UUFic3RyYWN0VmlkZW9TdXJmYWNlOjpFcnJvciBRVmlkZW9TdXJmYWNlUmFzdGVyUGFpbnRlcjo6
c2V0Q3VycmVudEZyYW1lKGNvbnN0IFFWaWRlb0ZyYW1lICZmcmFtZSkKK3sKKyAgICBtX2ZyYW1l
ID0gZnJhbWU7CisKKyAgICByZXR1cm4gUUFic3RyYWN0VmlkZW9TdXJmYWNlOjpOb0Vycm9yOwor
fQorCitRQWJzdHJhY3RWaWRlb1N1cmZhY2U6OkVycm9yIFFWaWRlb1N1cmZhY2VSYXN0ZXJQYWlu
dGVyOjpwYWludCgKKyAgICAgICAgICAgIGNvbnN0IFFSZWN0RiAmdGFyZ2V0LCBRUGFpbnRlciAq
cGFpbnRlciwgY29uc3QgUVJlY3RGICZzb3VyY2UpCit7CisgICAgaWYgKG1fZnJhbWUubWFwKFFB
YnN0cmFjdFZpZGVvQnVmZmVyOjpSZWFkT25seSkpIHsKKyAgICAgICAgUUltYWdlIGltYWdlKAor
ICAgICAgICAgICAgICAgIG1fZnJhbWUuYml0cygpLAorICAgICAgICAgICAgICAgIG1faW1hZ2VT
aXplLndpZHRoKCksCisgICAgICAgICAgICAgICAgbV9pbWFnZVNpemUuaGVpZ2h0KCksCisgICAg
ICAgICAgICAgICAgbV9mcmFtZS5ieXRlc1BlckxpbmUoKSwKKyAgICAgICAgICAgICAgICBtX2lt
YWdlRm9ybWF0KTsKKworICAgICAgICBpZiAobV9zY2FuTGluZURpcmVjdGlvbiA9PSBRVmlkZW9T
dXJmYWNlRm9ybWF0OjpCb3R0b21Ub1RvcCkgeworICAgICAgICAgICAgY29uc3QgUVRyYW5zZm9y
bSBvbGRUcmFuc2Zvcm0gPSBwYWludGVyLT50cmFuc2Zvcm0oKTsKKworICAgICAgICAgICAgcGFp
bnRlci0+c2NhbGUoMSwgLTEpOworICAgICAgICAgICAgcGFpbnRlci0+dHJhbnNsYXRlKDAsIC10
YXJnZXQuYm90dG9tKCkpOworICAgICAgICAgICAgcGFpbnRlci0+ZHJhd0ltYWdlKAorICAgICAg
ICAgICAgICAgIFFSZWN0Rih0YXJnZXQueCgpLCAwLCB0YXJnZXQud2lkdGgoKSwgdGFyZ2V0Lmhl
aWdodCgpKSwgaW1hZ2UsIHNvdXJjZSk7CisgICAgICAgICAgICBwYWludGVyLT5zZXRUcmFuc2Zv
cm0ob2xkVHJhbnNmb3JtKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBwYWludGVyLT5k
cmF3SW1hZ2UodGFyZ2V0LCBpbWFnZSwgc291cmNlKTsKKworICAgICAgICBtX2ZyYW1lLnVubWFw
KCk7CisgICAgfSBlbHNlIGlmIChtX2ZyYW1lLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIFFB
YnN0cmFjdFZpZGVvU3VyZmFjZTo6SW5jb3JyZWN0Rm9ybWF0RXJyb3I7CisgICAgZWxzZQorICAg
ICAgICBwYWludGVyLT5maWxsUmVjdCh0YXJnZXQsIFF0OjpibGFjayk7CisKKyAgICByZXR1cm4g
UUFic3RyYWN0VmlkZW9TdXJmYWNlOjpOb0Vycm9yOworfQorCit2b2lkIFFWaWRlb1N1cmZhY2VS
YXN0ZXJQYWludGVyOjp1cGRhdGVDb2xvcnMoaW50LCBpbnQsIGludCwgaW50KQoreworfQorCisj
aWYgIWRlZmluZWQoUVRfTk9fT1BFTkdMKSAmJiAhZGVmaW5lZChRVF9PUEVOR0xfRVNfMV9DTCkg
JiYgIWRlZmluZWQoUVRfT1BFTkdMX0VTXzEpCisKKyNpZm5kZWYgUV9XU19NQUMKKyMgaWZuZGVm
IEFQSUVOVFJZUAorIyAgIGlmZGVmIEFQSUVOVFJZCisjICAgICBkZWZpbmUgQVBJRU5UUllQIEFQ
SUVOVFJZICoKKyMgICBlbHNlCisjICAgICBkZWZpbmUgQVBJRU5UUlkKKyMgICAgIGRlZmluZSBB
UElFTlRSWVAgKgorIyAgIGVuZGlmCisjIGVuZGlmCisjZWxzZQorIyBkZWZpbmUgQVBJRU5UUlkK
KyMgZGVmaW5lIEFQSUVOVFJZUCAqCisjZW5kaWYKKworI2lmbmRlZiBHTF9URVhUVVJFMAorIyAg
ZGVmaW5lIEdMX1RFWFRVUkUwICAgIDB4ODRDMAorIyAgZGVmaW5lIEdMX1RFWFRVUkUxICAgIDB4
ODRDMQorIyAgZGVmaW5lIEdMX1RFWFRVUkUyICAgIDB4ODRDMgorI2VuZGlmCisjaWZuZGVmIEdM
X1BST0dSQU1fRVJST1JfU1RSSU5HX0FSQgorIyAgZGVmaW5lIEdMX1BST0dSQU1fRVJST1JfU1RS
SU5HX0FSQiAgICAgICAweDg4NzQKKyNlbmRpZgorCisjaWZuZGVmIEdMX1VOU0lHTkVEX1NIT1JU
XzVfNl81CisjICBkZWZpbmUgR0xfVU5TSUdORURfU0hPUlRfNV82XzUgMzM2MzUKKyNlbmRpZgor
CitjbGFzcyBRVmlkZW9TdXJmYWNlR0xQYWludGVyIDogcHVibGljIFFWaWRlb1N1cmZhY2VQYWlu
dGVyIHsKK3B1YmxpYzoKKyAgICBRVmlkZW9TdXJmYWNlR0xQYWludGVyKFFHTENvbnRleHQgKmNv
bnRleHQpOworICAgIH5RVmlkZW9TdXJmYWNlR0xQYWludGVyKCk7CisgICAgUUxpc3Q8UVZpZGVv
RnJhbWU6OlBpeGVsRm9ybWF0PiBzdXBwb3J0ZWRQaXhlbEZvcm1hdHMoCisgICAgICAgICAgICBR
QWJzdHJhY3RWaWRlb0J1ZmZlcjo6SGFuZGxlVHlwZSBoYW5kbGVUeXBlKSBjb25zdDsKKworICAg
IGJvb2wgaXNGb3JtYXRTdXBwb3J0ZWQoCisgICAgICAgICAgICBjb25zdCBRVmlkZW9TdXJmYWNl
Rm9ybWF0ICZmb3JtYXQsIFFWaWRlb1N1cmZhY2VGb3JtYXQgKnNpbWlsYXIpIGNvbnN0OworCisg
ICAgUUFic3RyYWN0VmlkZW9TdXJmYWNlOjpFcnJvciBzZXRDdXJyZW50RnJhbWUoY29uc3QgUVZp
ZGVvRnJhbWUgJmZyYW1lKTsKKworICAgIHZvaWQgdXBkYXRlQ29sb3JzKGludCBicmlnaHRuZXNz
LCBpbnQgY29udHJhc3QsIGludCBodWUsIGludCBzYXR1cmF0aW9uKTsKKworcHJvdGVjdGVkOgor
ICAgIHZvaWQgaW5pdFJnYlRleHR1cmVJbmZvKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFFTaXplICZzaXplKTsKKyAgICB2b2lkIGluaXRZ
dXY0MjBQVGV4dHVyZUluZm8oY29uc3QgUVNpemUgJnNpemUpOworICAgIHZvaWQgaW5pdFl2MTJU
ZXh0dXJlSW5mbyhjb25zdCBRU2l6ZSAmc2l6ZSk7CisKKyNpZm5kZWYgUVRfT1BFTkdMX0VTCisg
ICAgdHlwZWRlZiB2b2lkIChBUElFTlRSWSAqX2dsQWN0aXZlVGV4dHVyZSkgKEdMZW51bSk7Cisg
ICAgX2dsQWN0aXZlVGV4dHVyZSBnbEFjdGl2ZVRleHR1cmU7CisjZW5kaWYKKworICAgIFFMaXN0
PFFWaWRlb0ZyYW1lOjpQaXhlbEZvcm1hdD4gbV9pbWFnZVBpeGVsRm9ybWF0czsKKyAgICBRTGlz
dDxRVmlkZW9GcmFtZTo6UGl4ZWxGb3JtYXQ+IG1fZ2xQaXhlbEZvcm1hdHM7CisgICAgUU1hdHJp
eDR4NCBtX2NvbG9yTWF0cml4OworICAgIFFWaWRlb0ZyYW1lIG1fZnJhbWU7CisKKyAgICBRR0xD
b250ZXh0KiBtX2NvbnRleHQ7CisgICAgUUFic3RyYWN0VmlkZW9CdWZmZXI6OkhhbmRsZVR5cGUg
bV9oYW5kbGVUeXBlOworICAgIFFWaWRlb1N1cmZhY2VGb3JtYXQ6OkRpcmVjdGlvbiBtX3NjYW5M
aW5lRGlyZWN0aW9uOworICAgIEdMZW51bSBtX3RleHR1cmVGb3JtYXQ7CisgICAgR0x1aW50IG1f
dGV4dHVyZUludGVybmFsRm9ybWF0OworICAgIEdMZW51bSBtX3RleHR1cmVUeXBlOworICAgIGlu
dCBtX3RleHR1cmVDb3VudDsKKyAgICBHTHVpbnQgbV90ZXh0dXJlSWRzWzNdOworICAgIGludCBt
X3RleHR1cmVXaWR0aHNbM107CisgICAgaW50IG1fdGV4dHVyZUhlaWdodHNbM107CisgICAgaW50
IG1fdGV4dHVyZU9mZnNldHNbM107CisgICAgYm9vbCBtX3l1djsKK307CisKK1FWaWRlb1N1cmZh
Y2VHTFBhaW50ZXI6OlFWaWRlb1N1cmZhY2VHTFBhaW50ZXIoUUdMQ29udGV4dCAqY29udGV4dCkK
KyAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9oYW5kbGVUeXBlKFFBYnN0cmFjdFZp
ZGVvQnVmZmVyOjpOb0hhbmRsZSkKKyAgICAsIG1fc2NhbkxpbmVEaXJlY3Rpb24oUVZpZGVvU3Vy
ZmFjZUZvcm1hdDo6VG9wVG9Cb3R0b20pCisgICAgLCBtX3RleHR1cmVGb3JtYXQoMCkKKyAgICAs
IG1fdGV4dHVyZUludGVybmFsRm9ybWF0KDApCisgICAgLCBtX3RleHR1cmVUeXBlKDApCisgICAg
LCBtX3RleHR1cmVDb3VudCgwKQorICAgICwgbV95dXYoZmFsc2UpCit7CisjaWZuZGVmIFFUX09Q
RU5HTF9FUworICAgIGdsQWN0aXZlVGV4dHVyZSA9IChfZ2xBY3RpdmVUZXh0dXJlKW1fY29udGV4
dC0+Z2V0UHJvY0FkZHJlc3MoUUxhdGluMVN0cmluZygiZ2xBY3RpdmVUZXh0dXJlIikpOworI2Vu
ZGlmCit9CisKK1FWaWRlb1N1cmZhY2VHTFBhaW50ZXI6On5RVmlkZW9TdXJmYWNlR0xQYWludGVy
KCkKK3sKK30KKworUUxpc3Q8UVZpZGVvRnJhbWU6OlBpeGVsRm9ybWF0PiBRVmlkZW9TdXJmYWNl
R0xQYWludGVyOjpzdXBwb3J0ZWRQaXhlbEZvcm1hdHMoCisgICAgICAgIFFBYnN0cmFjdFZpZGVv
QnVmZmVyOjpIYW5kbGVUeXBlIGhhbmRsZVR5cGUpIGNvbnN0Cit7CisgICAgc3dpdGNoIChoYW5k
bGVUeXBlKSB7CisgICAgY2FzZSBRQWJzdHJhY3RWaWRlb0J1ZmZlcjo6Tm9IYW5kbGU6CisgICAg
ICAgIHJldHVybiBtX2ltYWdlUGl4ZWxGb3JtYXRzOworICAgIGNhc2UgUUFic3RyYWN0VmlkZW9C
dWZmZXI6OkdMVGV4dHVyZUhhbmRsZToKKyAgICAgICAgcmV0dXJuIG1fZ2xQaXhlbEZvcm1hdHM7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIFFMaXN0PFFWaWRlb0ZyYW1lOjpQaXhlbEZv
cm1hdD4oKTsKKyAgICB9Cit9CisKK2Jvb2wgUVZpZGVvU3VyZmFjZUdMUGFpbnRlcjo6aXNGb3Jt
YXRTdXBwb3J0ZWQoCisgICAgICAgIGNvbnN0IFFWaWRlb1N1cmZhY2VGb3JtYXQgJmZvcm1hdCwg
UVZpZGVvU3VyZmFjZUZvcm1hdCAqKSBjb25zdAoreworICAgIGlmIChmb3JtYXQuZnJhbWVTaXpl
KCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKGZvcm1h
dC5oYW5kbGVUeXBlKCkpIHsKKyAgICBjYXNlIFFBYnN0cmFjdFZpZGVvQnVmZmVyOjpOb0hhbmRs
ZToKKyAgICAgICAgcmV0dXJuIG1faW1hZ2VQaXhlbEZvcm1hdHMuY29udGFpbnMoZm9ybWF0LnBp
eGVsRm9ybWF0KCkpOworICAgIGNhc2UgUUFic3RyYWN0VmlkZW9CdWZmZXI6OkdMVGV4dHVyZUhh
bmRsZToKKyAgICAgICAgcmV0dXJuIG1fZ2xQaXhlbEZvcm1hdHMuY29udGFpbnMoZm9ybWF0LnBp
eGVsRm9ybWF0KCkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
Cit9CisKK1FBYnN0cmFjdFZpZGVvU3VyZmFjZTo6RXJyb3IgUVZpZGVvU3VyZmFjZUdMUGFpbnRl
cjo6c2V0Q3VycmVudEZyYW1lKGNvbnN0IFFWaWRlb0ZyYW1lICZmcmFtZSkKK3sKKyAgICBtX2Zy
YW1lID0gZnJhbWU7CisKKyAgICBpZiAobV9oYW5kbGVUeXBlID09IFFBYnN0cmFjdFZpZGVvQnVm
ZmVyOjpHTFRleHR1cmVIYW5kbGUpIHsKKyAgICAgICAgbV90ZXh0dXJlSWRzWzBdID0gZnJhbWUu
aGFuZGxlKCkudG9JbnQoKTsKKyAgICB9IGVsc2UgaWYgKG1fZnJhbWUubWFwKFFBYnN0cmFjdFZp
ZGVvQnVmZmVyOjpSZWFkT25seSkpIHsKKyAgICAgICAgbV9jb250ZXh0LT5tYWtlQ3VycmVudCgp
OworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV90ZXh0dXJlQ291bnQ7ICsraSkgewor
ICAgICAgICAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmVJZHNbaV0p
OworICAgICAgICAgICAgZ2xUZXhJbWFnZTJEKAorICAgICAgICAgICAgICAgICAgICBHTF9URVhU
VVJFXzJELAorICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICBtX3Rl
eHR1cmVJbnRlcm5hbEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgbV90ZXh0dXJlV2lkdGhz
W2ldLAorICAgICAgICAgICAgICAgICAgICBtX3RleHR1cmVIZWlnaHRzW2ldLAorICAgICAgICAg
ICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICBtX3RleHR1cmVGb3JtYXQsCisgICAg
ICAgICAgICAgICAgICAgIG1fdGV4dHVyZVR5cGUsCisgICAgICAgICAgICAgICAgICAgIG1fZnJh
bWUuYml0cygpICsgbV90ZXh0dXJlT2Zmc2V0c1tpXSk7CisgICAgICAgICAgICBnbFRleFBhcmFt
ZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwor
ICAgICAgICAgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlO
X0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICAgICAgICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhU
VVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfUkVQRUFUKTsKKyAgICAgICAgICAgIGdsVGV4
UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfUkVQRUFUKTsK
KyAgICAgICAgfQorICAgICAgICBtX2ZyYW1lLnVubWFwKCk7CisgICAgfSBlbHNlIGlmIChtX2Zy
YW1lLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIFFBYnN0cmFjdFZpZGVvU3VyZmFjZTo6SW5j
b3JyZWN0Rm9ybWF0RXJyb3I7CisKKyAgICByZXR1cm4gUUFic3RyYWN0VmlkZW9TdXJmYWNlOjpO
b0Vycm9yOworfQorCit2b2lkIFFWaWRlb1N1cmZhY2VHTFBhaW50ZXI6OnVwZGF0ZUNvbG9ycyhp
bnQgYnJpZ2h0bmVzcywgaW50IGNvbnRyYXN0LCBpbnQgaHVlLCBpbnQgc2F0dXJhdGlvbikKK3sK
KyAgICBjb25zdCBxcmVhbCBiID0gYnJpZ2h0bmVzcyAvIDIwMC4wOworICAgIGNvbnN0IHFyZWFs
IGMgPSBjb250cmFzdCAvIDEwMC4wICsgMS4wOworICAgIGNvbnN0IHFyZWFsIGggPSBodWUgLyAy
MDAuMDsKKyAgICBjb25zdCBxcmVhbCBzID0gc2F0dXJhdGlvbiAvIDEwMC4wICsgMS4wOworCisg
ICAgY29uc3QgcXJlYWwgY29zSCA9IHFDb3MoTV9QSSAqIGgpOworICAgIGNvbnN0IHFyZWFsIHNp
bkggPSBxU2luKE1fUEkgKiBoKTsKKworICAgIGNvbnN0IHFyZWFsIGgxMSA9IC0wLjQ3MjggKiBj
b3NIICsgMC43OTU0ICogc2luSCArIDEuNDcyODsKKyAgICBjb25zdCBxcmVhbCBoMjEgPSAtMC45
MjUzICogY29zSCAtIDAuMDExOCAqIHNpbkggKyAwLjk1MjM7CisgICAgY29uc3QgcXJlYWwgaDMx
ID0gIDAuNDUyNSAqIGNvc0ggKyAwLjgwNzIgKiBzaW5IIC0gMC40NTI0OworCisgICAgY29uc3Qg
cXJlYWwgaDEyID0gIDEuNDcyOCAqIGNvc0ggLSAxLjM3MjggKiBzaW5IIC0gMS40NzI4OworICAg
IGNvbnN0IHFyZWFsIGgyMiA9ICAxLjkyNTMgKiBjb3NIICsgMC41ODkxICogc2luSCAtIDAuOTI1
MzsKKyAgICBjb25zdCBxcmVhbCBoMzIgPSAtMC40NTI1ICogY29zSCAtIDEuOTYxOSAqIHNpbkgg
KyAwLjQ1MjU7CisKKyAgICBjb25zdCBxcmVhbCBoMTMgPSAgMS40NzI4ICogY29zSCAtIDAuMjE4
MSAqIHNpbkggLSAxLjQ3Mjg7CisgICAgY29uc3QgcXJlYWwgaDIzID0gIDAuOTI1MyAqIGNvc0gg
KyAxLjE2NjUgKiBzaW5IIC0gMC45MjUzOworICAgIGNvbnN0IHFyZWFsIGgzMyA9ICAwLjU0NzUg
KiBjb3NIIC0gMS4zODQ2ICogc2luSCArIDAuNDUyNTsKKworICAgIGNvbnN0IHFyZWFsIHNyID0g
KDEuMCAtIHMpICogMC4zMDg2OworICAgIGNvbnN0IHFyZWFsIHNnID0gKDEuMCAtIHMpICogMC42
MDk0OworICAgIGNvbnN0IHFyZWFsIHNiID0gKDEuMCAtIHMpICogMC4wODIwOworCisgICAgY29u
c3QgcXJlYWwgc3JTID0gc3IgKyBzOworICAgIGNvbnN0IHFyZWFsIHNnUyA9IHNnICsgczsKKyAg
ICBjb25zdCBxcmVhbCBzYlMgPSBzciArIHM7CisKKyAgICBjb25zdCBmbG9hdCBtNCA9IChzICsg
c3IgKyBzZyArIHNiKSAqICgwLjUgLSAwLjUgKiBjICsgYik7CisKKyAgICBtX2NvbG9yTWF0cml4
KDAsIDApID0gYyAqIChzclMgKiBoMTEgKyBzZyAqIGgyMSArIHNiICogaDMxKTsKKyAgICBtX2Nv
bG9yTWF0cml4KDAsIDEpID0gYyAqIChzclMgKiBoMTIgKyBzZyAqIGgyMiArIHNiICogaDMyKTsK
KyAgICBtX2NvbG9yTWF0cml4KDAsIDIpID0gYyAqIChzclMgKiBoMTMgKyBzZyAqIGgyMyArIHNi
ICogaDMzKTsKKyAgICBtX2NvbG9yTWF0cml4KDAsIDMpID0gbTQ7CisKKyAgICBtX2NvbG9yTWF0
cml4KDEsIDApID0gYyAqIChzciAqIGgxMSArIHNnUyAqIGgyMSArIHNiICogaDMxKTsKKyAgICBt
X2NvbG9yTWF0cml4KDEsIDEpID0gYyAqIChzciAqIGgxMiArIHNnUyAqIGgyMiArIHNiICogaDMy
KTsKKyAgICBtX2NvbG9yTWF0cml4KDEsIDIpID0gYyAqIChzciAqIGgxMyArIHNnUyAqIGgyMyAr
IHNiICogaDMzKTsKKyAgICBtX2NvbG9yTWF0cml4KDEsIDMpID0gbTQ7CisKKyAgICBtX2NvbG9y
TWF0cml4KDIsIDApID0gYyAqIChzciAqIGgxMSArIHNnICogaDIxICsgc2JTICogaDMxKTsKKyAg
ICBtX2NvbG9yTWF0cml4KDIsIDEpID0gYyAqIChzciAqIGgxMiArIHNnICogaDIyICsgc2JTICog
aDMyKTsKKyAgICBtX2NvbG9yTWF0cml4KDIsIDIpID0gYyAqIChzciAqIGgxMyArIHNnICogaDIz
ICsgc2JTICogaDMzKTsKKyAgICBtX2NvbG9yTWF0cml4KDIsIDMpID0gbTQ7CisKKyAgICBtX2Nv
bG9yTWF0cml4KDMsIDApID0gMC4wOworICAgIG1fY29sb3JNYXRyaXgoMywgMSkgPSAwLjA7Cisg
ICAgbV9jb2xvck1hdHJpeCgzLCAyKSA9IDAuMDsKKyAgICBtX2NvbG9yTWF0cml4KDMsIDMpID0g
MS4wOworCisgICAgaWYgKG1feXV2KSB7CisgICAgICAgIG1fY29sb3JNYXRyaXggPSBtX2NvbG9y
TWF0cml4ICogUU1hdHJpeDR4NCgKKyAgICAgICAgICAgICAgICAxLjAsICAwLjAwMCwgIDEuMTQw
LCAtMC41NzAwLAorICAgICAgICAgICAgICAgIDEuMCwgLTAuMzk0LCAtMC41ODEsICAwLjQ4NzUs
CisgICAgICAgICAgICAgICAgMS4wLCAgMi4wMjgsICAwLjAwMCwgLTEuMDE0MCwKKyAgICAgICAg
ICAgICAgICAwLjAsICAwLjAwMCwgIDAuMDAwLCAgMS4wMDAwKTsKKyAgICB9Cit9CisKK3ZvaWQg
UVZpZGVvU3VyZmFjZUdMUGFpbnRlcjo6aW5pdFJnYlRleHR1cmVJbmZvKAorICAgICAgICBHTGVu
dW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBRU2l6
ZSAmc2l6ZSkKK3sKKyAgICBtX3l1diA9IGZhbHNlOworICAgIG1fdGV4dHVyZUludGVybmFsRm9y
bWF0ID0gaW50ZXJuYWxGb3JtYXQ7CisgICAgbV90ZXh0dXJlRm9ybWF0ID0gZm9ybWF0OworICAg
IG1fdGV4dHVyZVR5cGUgPSB0eXBlOworICAgIG1fdGV4dHVyZUNvdW50ID0gMTsKKyAgICBtX3Rl
eHR1cmVXaWR0aHNbMF0gPSBzaXplLndpZHRoKCk7CisgICAgbV90ZXh0dXJlSGVpZ2h0c1swXSA9
IHNpemUuaGVpZ2h0KCk7CisgICAgbV90ZXh0dXJlT2Zmc2V0c1swXSA9IDA7Cit9CisKK3ZvaWQg
UVZpZGVvU3VyZmFjZUdMUGFpbnRlcjo6aW5pdFl1djQyMFBUZXh0dXJlSW5mbyhjb25zdCBRU2l6
ZSAmc2l6ZSkKK3sKKyAgICBtX3l1diA9IHRydWU7CisgICAgbV90ZXh0dXJlSW50ZXJuYWxGb3Jt
YXQgPSBHTF9MVU1JTkFOQ0U7CisgICAgbV90ZXh0dXJlRm9ybWF0ID0gR0xfTFVNSU5BTkNFOwor
ICAgIG1fdGV4dHVyZVR5cGUgPSBHTF9VTlNJR05FRF9CWVRFOworICAgIG1fdGV4dHVyZUNvdW50
ID0gMzsKKyAgICBtX3RleHR1cmVXaWR0aHNbMF0gPSBzaXplLndpZHRoKCk7CisgICAgbV90ZXh0
dXJlSGVpZ2h0c1swXSA9IHNpemUuaGVpZ2h0KCk7CisgICAgbV90ZXh0dXJlT2Zmc2V0c1swXSA9
IDA7CisgICAgbV90ZXh0dXJlV2lkdGhzWzFdID0gc2l6ZS53aWR0aCgpIC8gMjsKKyAgICBtX3Rl
eHR1cmVIZWlnaHRzWzFdID0gc2l6ZS5oZWlnaHQoKSAvIDI7CisgICAgbV90ZXh0dXJlT2Zmc2V0
c1sxXSA9IHNpemUud2lkdGgoKSAqIHNpemUuaGVpZ2h0KCk7CisgICAgbV90ZXh0dXJlV2lkdGhz
WzJdID0gc2l6ZS53aWR0aCgpIC8gMjsKKyAgICBtX3RleHR1cmVIZWlnaHRzWzJdID0gc2l6ZS5o
ZWlnaHQoKSAvIDI7CisgICAgbV90ZXh0dXJlT2Zmc2V0c1syXSA9IHNpemUud2lkdGgoKSAqIHNp
emUuaGVpZ2h0KCkgKiA1IC8gNDsKK30KKwordm9pZCBRVmlkZW9TdXJmYWNlR0xQYWludGVyOjpp
bml0WXYxMlRleHR1cmVJbmZvKGNvbnN0IFFTaXplICZzaXplKQoreworICAgIG1feXV2ID0gdHJ1
ZTsKKyAgICBtX3RleHR1cmVJbnRlcm5hbEZvcm1hdCA9IEdMX0xVTUlOQU5DRTsKKyAgICBtX3Rl
eHR1cmVGb3JtYXQgPSBHTF9MVU1JTkFOQ0U7CisgICAgbV90ZXh0dXJlVHlwZSA9IEdMX1VOU0lH
TkVEX0JZVEU7CisgICAgbV90ZXh0dXJlQ291bnQgPSAzOworICAgIG1fdGV4dHVyZVdpZHRoc1sw
XSA9IHNpemUud2lkdGgoKTsKKyAgICBtX3RleHR1cmVIZWlnaHRzWzBdID0gc2l6ZS5oZWlnaHQo
KTsKKyAgICBtX3RleHR1cmVPZmZzZXRzWzBdID0gMDsKKyAgICBtX3RleHR1cmVXaWR0aHNbMV0g
PSBzaXplLndpZHRoKCkgLyAyOworICAgIG1fdGV4dHVyZUhlaWdodHNbMV0gPSBzaXplLmhlaWdo
dCgpIC8gMjsKKyAgICBtX3RleHR1cmVPZmZzZXRzWzFdID0gc2l6ZS53aWR0aCgpICogc2l6ZS5o
ZWlnaHQoKSAqIDUgLyA0OworICAgIG1fdGV4dHVyZVdpZHRoc1syXSA9IHNpemUud2lkdGgoKSAv
IDI7CisgICAgbV90ZXh0dXJlSGVpZ2h0c1syXSA9IHNpemUuaGVpZ2h0KCkgLyAyOworICAgIG1f
dGV4dHVyZU9mZnNldHNbMl0gPSBzaXplLndpZHRoKCkgKiBzaXplLmhlaWdodCgpOworfQorCisj
aWZuZGVmIFFUX09QRU5HTF9FUworCisjIGlmbmRlZiBHTF9GUkFHTUVOVF9QUk9HUkFNX0FSQgor
IyAgZGVmaW5lIEdMX0ZSQUdNRU5UX1BST0dSQU1fQVJCICAgICAgICAgICAweDg4MDQKKyMgIGRl
ZmluZSBHTF9QUk9HUkFNX0ZPUk1BVF9BU0NJSV9BUkIgICAgICAgMHg4ODc1CisjIGVuZGlmCisK
Ky8vIFBhaW50cyBhbiBSR0IzMiBmcmFtZQorc3RhdGljIGNvbnN0IGNoYXIgKnF0X2FyYmZwX3hy
Z2JTaGFkZXJQcm9ncmFtID0KKyAgICAiISFBUkJmcDEuMFxuIgorICAgICJQQVJBTSBtYXRyaXhb
NF0gPSB7IHByb2dyYW0ubG9jYWxbMC4uMl0sIgorICAgICJ7IDAuMCwgMC4wLCAwLjAsIDEuMCB9
IH07XG4iCisgICAgIlRFTVAgeHJnYjtcbiIKKyAgICAiVEVYIHhyZ2IueHl6LCBmcmFnbWVudC50
ZXhjb29yZFswXSwgdGV4dHVyZVswXSwgMkQ7XG4iCisgICAgIk1PViB4cmdiLncsIG1hdHJpeFsz
XS53O1xuIgorICAgICJEUDQgcmVzdWx0LmNvbG9yLngsIHhyZ2Iuenl4dywgbWF0cml4WzBdO1xu
IgorICAgICJEUDQgcmVzdWx0LmNvbG9yLnksIHhyZ2Iuenl4dywgbWF0cml4WzFdO1xuIgorICAg
ICJEUDQgcmVzdWx0LmNvbG9yLnosIHhyZ2Iuenl4dywgbWF0cml4WzJdO1xuIgorICAgICJFTkQi
OworCisvLyBQYWludHMgYW4gQVJHQiBmcmFtZS4KK3N0YXRpYyBjb25zdCBjaGFyICpxdF9hcmJm
cF9hcmdiU2hhZGVyUHJvZ3JhbSA9CisgICAgIiEhQVJCZnAxLjBcbiIKKyAgICAiUEFSQU0gbWF0
cml4WzRdID0geyBwcm9ncmFtLmxvY2FsWzAuLjJdLCIKKyAgICAieyAwLjAsIDAuMCwgMC4wLCAx
LjAgfSB9O1xuIgorICAgICJURU1QIGFyZ2I7XG4iCisgICAgIlRFWCBhcmdiLCBmcmFnbWVudC50
ZXhjb29yZFswXSwgdGV4dHVyZVswXSwgMkQ7XG4iCisgICAgIk1PViBhcmdiLncsIG1hdHJpeFsz
XS53O1xuIgorICAgICJEUDQgcmVzdWx0LmNvbG9yLngsIGFyZ2Iuenl4dywgbWF0cml4WzBdO1xu
IgorICAgICJEUDQgcmVzdWx0LmNvbG9yLnksIGFyZ2Iuenl4dywgbWF0cml4WzFdO1xuIgorICAg
ICJEUDQgcmVzdWx0LmNvbG9yLnosIGFyZ2Iuenl4dywgbWF0cml4WzJdO1xuIgorICAgICJURVgg
cmVzdWx0LmNvbG9yLncsIGZyYWdtZW50LnRleGNvb3JkWzBdLCB0ZXh0dXJlLCAyRDtcbiIKKyAg
ICAiRU5EIjsKKworLy8gUGFpbnRzIGFuIFJHQihBKSBmcmFtZS4KK3N0YXRpYyBjb25zdCBjaGFy
ICpxdF9hcmJmcF9yZ2JTaGFkZXJQcm9ncmFtID0KKyAgICAiISFBUkJmcDEuMFxuIgorICAgICJQ
QVJBTSBtYXRyaXhbNF0gPSB7IHByb2dyYW0ubG9jYWxbMC4uMl0sIgorICAgICJ7IDAuMCwgMC4w
LCAwLjAsIDEuMCB9IH07XG4iCisgICAgIlRFTVAgcmdiO1xuIgorICAgICJURVggcmdiLCBmcmFn
bWVudC50ZXhjb29yZFswXSwgdGV4dHVyZVswXSwgMkQ7XG4iCisgICAgIk1PViByZ2IudywgbWF0
cml4WzNdLnc7XG4iCisgICAgIkRQNCByZXN1bHQuY29sb3IueCwgcmdiLCBtYXRyaXhbMF07XG4i
CisgICAgIkRQNCByZXN1bHQuY29sb3IueSwgcmdiLCBtYXRyaXhbMV07XG4iCisgICAgIkRQNCBy
ZXN1bHQuY29sb3IueiwgcmdiLCBtYXRyaXhbMl07XG4iCisgICAgIlRFWCByZXN1bHQuY29sb3Iu
dywgZnJhZ21lbnQudGV4Y29vcmRbMF0sIHRleHR1cmUsIDJEO1xuIgorICAgICJFTkQiOworCisv
LyBQYWludHMgYSBZVVY0MjBQIG9yIFlWMTIgZnJhbWUuCitzdGF0aWMgY29uc3QgY2hhciAqcXRf
YXJiZnBfeXV2UGxhbmFyU2hhZGVyUHJvZ3JhbSA9CisgICAgIiEhQVJCZnAxLjBcbiIKKyAgICAi
UEFSQU0gbWF0cml4WzRdID0geyBwcm9ncmFtLmxvY2FsWzAuLjJdLCIKKyAgICAieyAwLjAsIDAu
MCwgMC4wLCAxLjAgfSB9O1xuIgorICAgICJURU1QIHl1djtcbiIKKyAgICAiVEVYIHl1di54LCBm
cmFnbWVudC50ZXhjb29yZFswXSwgdGV4dHVyZVswXSwgMkQ7XG4iCisgICAgIlRFWCB5dXYueSwg
ZnJhZ21lbnQudGV4Y29vcmRbMF0sIHRleHR1cmVbMV0sIDJEO1xuIgorICAgICJURVggeXV2Lnos
IGZyYWdtZW50LnRleGNvb3JkWzBdLCB0ZXh0dXJlWzJdLCAyRDtcbiIKKyAgICAiTU9WIHl1di53
LCBtYXRyaXhbM10udztcbiIKKyAgICAiRFA0IHJlc3VsdC5jb2xvci54LCB5dXYsIG1hdHJpeFsw
XTtcbiIKKyAgICAiRFA0IHJlc3VsdC5jb2xvci55LCB5dXYsIG1hdHJpeFsxXTtcbiIKKyAgICAi
RFA0IHJlc3VsdC5jb2xvci56LCB5dXYsIG1hdHJpeFsyXTtcbiIKKyAgICAiRU5EIjsKKworCitj
bGFzcyBRVmlkZW9TdXJmYWNlQXJiRnBQYWludGVyIDogcHVibGljIFFWaWRlb1N1cmZhY2VHTFBh
aW50ZXIgeworcHVibGljOgorICAgIFFWaWRlb1N1cmZhY2VBcmJGcFBhaW50ZXIoUUdMQ29udGV4
dCAqY29udGV4dCk7CisKKyAgICBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6OkVycm9yIHN0YXJ0KGNv
bnN0IFFWaWRlb1N1cmZhY2VGb3JtYXQgJmZvcm1hdCk7CisgICAgdm9pZCBzdG9wKCk7CisKKyAg
ICBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6OkVycm9yIHBhaW50KAorICAgICAgICAgICAgY29uc3Qg
UVJlY3RGICZ0YXJnZXQsIFFQYWludGVyICpwYWludGVyLCBjb25zdCBRUmVjdEYgJnNvdXJjZSk7
CisKK3ByaXZhdGU6CisgICAgdHlwZWRlZiB2b2lkIChBUElFTlRSWSAqX2dsUHJvZ3JhbVN0cmlu
Z0FSQikgKEdMZW51bSwgR0xlbnVtLCBHTHNpemVpLCBjb25zdCBHTHZvaWQgKik7CisgICAgdHlw
ZWRlZiB2b2lkIChBUElFTlRSWSAqX2dsQmluZFByb2dyYW1BUkIpIChHTGVudW0sIEdMdWludCk7
CisgICAgdHlwZWRlZiB2b2lkIChBUElFTlRSWSAqX2dsRGVsZXRlUHJvZ3JhbXNBUkIpIChHTHNp
emVpLCBjb25zdCBHTHVpbnQgKik7CisgICAgdHlwZWRlZiB2b2lkIChBUElFTlRSWSAqX2dsR2Vu
UHJvZ3JhbXNBUkIpIChHTHNpemVpLCBHTHVpbnQgKik7CisgICAgdHlwZWRlZiB2b2lkIChBUElF
TlRSWSAqX2dsUHJvZ3JhbUxvY2FsUGFyYW1ldGVyNGZBUkIpICgKKyAgICAgICAgICAgIEdMZW51
bSwgR0x1aW50LCBHTGZsb2F0LCBHTGZsb2F0LCBHTGZsb2F0LCBHTGZsb2F0KTsKKyAgICB0eXBl
ZGVmIHZvaWQgKEFQSUVOVFJZICpfZ2xBY3RpdmVUZXh0dXJlKSAoR0xlbnVtKTsKKworICAgIF9n
bFByb2dyYW1TdHJpbmdBUkIgZ2xQcm9ncmFtU3RyaW5nQVJCOworICAgIF9nbEJpbmRQcm9ncmFt
QVJCIGdsQmluZFByb2dyYW1BUkI7CisgICAgX2dsRGVsZXRlUHJvZ3JhbXNBUkIgZ2xEZWxldGVQ
cm9ncmFtc0FSQjsKKyAgICBfZ2xHZW5Qcm9ncmFtc0FSQiBnbEdlblByb2dyYW1zQVJCOworICAg
IF9nbFByb2dyYW1Mb2NhbFBhcmFtZXRlcjRmQVJCIGdsUHJvZ3JhbUxvY2FsUGFyYW1ldGVyNGZB
UkI7CisKKyAgICBHTHVpbnQgbV9wcm9ncmFtSWQ7CisgICAgUVNpemUgbV9mcmFtZVNpemU7Cit9
OworCitRVmlkZW9TdXJmYWNlQXJiRnBQYWludGVyOjpRVmlkZW9TdXJmYWNlQXJiRnBQYWludGVy
KFFHTENvbnRleHQgKmNvbnRleHQpCisgICAgOiBRVmlkZW9TdXJmYWNlR0xQYWludGVyKGNvbnRl
eHQpCisgICAgLCBtX3Byb2dyYW1JZCgwKQoreworICAgIGdsUHJvZ3JhbVN0cmluZ0FSQiA9IChf
Z2xQcm9ncmFtU3RyaW5nQVJCKSBtX2NvbnRleHQtPmdldFByb2NBZGRyZXNzKAorICAgICAgICAg
ICAgICAgIFFMYXRpbjFTdHJpbmcoImdsUHJvZ3JhbVN0cmluZ0FSQiIpKTsKKyAgICBnbEJpbmRQ
cm9ncmFtQVJCID0gKF9nbEJpbmRQcm9ncmFtQVJCKSBtX2NvbnRleHQtPmdldFByb2NBZGRyZXNz
KAorICAgICAgICAgICAgICAgIFFMYXRpbjFTdHJpbmcoImdsQmluZFByb2dyYW1BUkIiKSk7Cisg
ICAgZ2xEZWxldGVQcm9ncmFtc0FSQiA9IChfZ2xEZWxldGVQcm9ncmFtc0FSQikgbV9jb250ZXh0
LT5nZXRQcm9jQWRkcmVzcygKKyAgICAgICAgICAgICAgICBRTGF0aW4xU3RyaW5nKCJnbERlbGV0
ZVByb2dyYW1zQVJCIikpOworICAgIGdsR2VuUHJvZ3JhbXNBUkIgPSAoX2dsR2VuUHJvZ3JhbXNB
UkIpIG1fY29udGV4dC0+Z2V0UHJvY0FkZHJlc3MoCisgICAgICAgICAgICAgICAgUUxhdGluMVN0
cmluZygiZ2xHZW5Qcm9ncmFtc0FSQiIpKTsKKyAgICBnbFByb2dyYW1Mb2NhbFBhcmFtZXRlcjRm
QVJCID0gKF9nbFByb2dyYW1Mb2NhbFBhcmFtZXRlcjRmQVJCKSBtX2NvbnRleHQtPmdldFByb2NB
ZGRyZXNzKAorICAgICAgICAgICAgICAgIFFMYXRpbjFTdHJpbmcoImdsUHJvZ3JhbUxvY2FsUGFy
YW1ldGVyNGZBUkIiKSk7CisKKyAgICBtX2ltYWdlUGl4ZWxGb3JtYXRzCisgICAgICAgICAgICA8
PCBRVmlkZW9GcmFtZTo6Rm9ybWF0X1JHQjMyCisgICAgICAgICAgICA8PCBRVmlkZW9GcmFtZTo6
Rm9ybWF0X0FSR0IzMgorICAgICAgICAgICAgPDwgUVZpZGVvRnJhbWU6OkZvcm1hdF9SR0IyNAor
ICAgICAgICAgICAgPDwgUVZpZGVvRnJhbWU6OkZvcm1hdF9SR0I1NjUKKyAgICAgICAgICAgIDw8
IFFWaWRlb0ZyYW1lOjpGb3JtYXRfWVYxMgorICAgICAgICAgICAgPDwgUVZpZGVvRnJhbWU6OkZv
cm1hdF9ZVVY0MjBQOworICAgIG1fZ2xQaXhlbEZvcm1hdHMKKyAgICAgICAgICAgIDw8IFFWaWRl
b0ZyYW1lOjpGb3JtYXRfUkdCMzIKKyAgICAgICAgICAgIDw8IFFWaWRlb0ZyYW1lOjpGb3JtYXRf
QVJHQjMyOworfQorCitRQWJzdHJhY3RWaWRlb1N1cmZhY2U6OkVycm9yIFFWaWRlb1N1cmZhY2VB
cmJGcFBhaW50ZXI6OnN0YXJ0KGNvbnN0IFFWaWRlb1N1cmZhY2VGb3JtYXQgJmZvcm1hdCkKK3sK
KyAgICBRX0FTU0VSVCghbV90ZXh0dXJlQ291bnQpOworCisgICAgUUFic3RyYWN0VmlkZW9TdXJm
YWNlOjpFcnJvciBlcnJvciA9IFFBYnN0cmFjdFZpZGVvU3VyZmFjZTo6Tm9FcnJvcjsKKworICAg
IG1fY29udGV4dC0+bWFrZUN1cnJlbnQoKTsKKworICAgIGNvbnN0IGNoYXIgKnByb2dyYW0gPSAw
OworCisgICAgaWYgKGZvcm1hdC5oYW5kbGVUeXBlKCkgPT0gUUFic3RyYWN0VmlkZW9CdWZmZXI6
Ok5vSGFuZGxlKSB7CisgICAgICAgIHN3aXRjaCAoZm9ybWF0LnBpeGVsRm9ybWF0KCkpIHsKKyAg
ICAgICAgY2FzZSBRVmlkZW9GcmFtZTo6Rm9ybWF0X1JHQjMyOgorICAgICAgICAgICAgaW5pdFJn
YlRleHR1cmVJbmZvKEdMX1JHQkEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGZvcm1hdC5m
cmFtZVNpemUoKSk7CisgICAgICAgICAgICBwcm9ncmFtID0gcXRfYXJiZnBfeHJnYlNoYWRlclBy
b2dyYW07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBRVmlkZW9GcmFtZTo6Rm9y
bWF0X0FSR0IzMjoKKyAgICAgICAgICAgIGluaXRSZ2JUZXh0dXJlSW5mbyhHTF9SR0JBLCBHTF9S
R0JBLCBHTF9VTlNJR05FRF9CWVRFLCBmb3JtYXQuZnJhbWVTaXplKCkpOworICAgICAgICAgICAg
cHJvZ3JhbSA9IHF0X2FyYmZwX2FyZ2JTaGFkZXJQcm9ncmFtOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgUVZpZGVvRnJhbWU6OkZvcm1hdF9SR0IyNDoKKyAgICAgICAgICAgIGlu
aXRSZ2JUZXh0dXJlSW5mbyhHTF9SR0I4LCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBmb3Jt
YXQuZnJhbWVTaXplKCkpOworICAgICAgICAgICAgcHJvZ3JhbSA9IHF0X2FyYmZwX2FyZ2JTaGFk
ZXJQcm9ncmFtOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUVZpZGVvRnJhbWU6
OkZvcm1hdF9SR0I1NjU6CisgICAgICAgICAgICBpbml0UmdiVGV4dHVyZUluZm8oR0xfUkdCLCBH
TF9SR0IsIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81LCBmb3JtYXQuZnJhbWVTaXplKCkpOworICAg
ICAgICAgICAgcHJvZ3JhbSA9IHF0X2FyYmZwX3JnYlNoYWRlclByb2dyYW07CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBRVmlkZW9GcmFtZTo6Rm9ybWF0X1lWMTI6CisgICAgICAg
ICAgICBpbml0WXYxMlRleHR1cmVJbmZvKGZvcm1hdC5mcmFtZVNpemUoKSk7CisgICAgICAgICAg
ICBwcm9ncmFtID0gcXRfYXJiZnBfeXV2UGxhbmFyU2hhZGVyUHJvZ3JhbTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFFWaWRlb0ZyYW1lOjpGb3JtYXRfWVVWNDIwUDoKKyAgICAg
ICAgICAgIGluaXRZdXY0MjBQVGV4dHVyZUluZm8oZm9ybWF0LmZyYW1lU2l6ZSgpKTsKKyAgICAg
ICAgICAgIHByb2dyYW0gPSBxdF9hcmJmcF95dXZQbGFuYXJTaGFkZXJQcm9ncmFtOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSBpZiAoZm9ybWF0LmhhbmRsZVR5cGUoKSA9PSBRQWJzdHJhY3RWaWRl
b0J1ZmZlcjo6R0xUZXh0dXJlSGFuZGxlKSB7CisgICAgICAgIHN3aXRjaCAoZm9ybWF0LnBpeGVs
Rm9ybWF0KCkpIHsKKyAgICAgICAgY2FzZSBRVmlkZW9GcmFtZTo6Rm9ybWF0X1JHQjMyOgorICAg
ICAgICBjYXNlIFFWaWRlb0ZyYW1lOjpGb3JtYXRfQVJHQjMyOgorICAgICAgICAgICAgbV95dXYg
PSBmYWxzZTsKKyAgICAgICAgICAgIG1fdGV4dHVyZUNvdW50ID0gMTsKKyAgICAgICAgICAgIHBy
b2dyYW0gPSBxdF9hcmJmcF9yZ2JTaGFkZXJQcm9ncmFtOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgZXJyb3IgPSBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6
OlVuc3VwcG9ydGVkRm9ybWF0RXJyb3I7CisgICAgZWxzZSB7CisgICAgICAgIGdsR2VuUHJvZ3Jh
bXNBUkIoMSwgJm1fcHJvZ3JhbUlkKTsKKworICAgICAgICBHTGVudW0gZ2xFcnJvciA9IGdsR2V0
RXJyb3IoKTsKKyAgICAgICAgaWYgKGdsRXJyb3IgIT0gR0xfTk9fRVJST1IpIHsKKyAgICAgICAg
ICAgIHFXYXJuaW5nKCJRUGFpbnRlclZpZGVvU3VyZmFjZTogQVJCZmIgU2hhZGVyIGFsbG9jYXRp
b24gZXJyb3IgJXgiLCBpbnQoZ2xFcnJvcikpOworICAgICAgICAgICAgbV90ZXh0dXJlQ291bnQg
PSAwOworICAgICAgICAgICAgbV9wcm9ncmFtSWQgPSAwOworCisgICAgICAgICAgICBlcnJvciA9
IFFBYnN0cmFjdFZpZGVvU3VyZmFjZTo6UmVzb3VyY2VFcnJvcjsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGdsQmluZFByb2dyYW1BUkIoR0xfRlJBR01FTlRfUFJPR1JBTV9BUkIsIG1f
cHJvZ3JhbUlkKTsKKyAgICAgICAgICAgIGdsUHJvZ3JhbVN0cmluZ0FSQigKKyAgICAgICAgICAg
ICAgICAgICAgR0xfRlJBR01FTlRfUFJPR1JBTV9BUkIsCisgICAgICAgICAgICAgICAgICAgIEdM
X1BST0dSQU1fRk9STUFUX0FTQ0lJX0FSQiwKKyAgICAgICAgICAgICAgICAgICAgcXN0cmxlbihw
cm9ncmFtKSwKKyAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBHTHZv
aWQgKj4ocHJvZ3JhbSkpOworCisgICAgICAgICAgICBpZiAoKGdsRXJyb3IgPSBnbEdldEVycm9y
KCkpICE9IEdMX05PX0VSUk9SKSB7CisgICAgICAgICAgICAgICAgY29uc3QgR0x1Ynl0ZSogZXJy
b3JTdHJpbmcgPSBnbEdldFN0cmluZyhHTF9QUk9HUkFNX0VSUk9SX1NUUklOR19BUkIpOworCisg
ICAgICAgICAgICAgICAgcVdhcm5pbmcoIlFQYWludGVyVmlkZW9TdXJmYWNlOiBBUkJmcCBTaGFk
ZXIgY29tcGlsZSBlcnJvciAleCwgJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludChn
bEVycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0
IGNoYXIgKj4oZXJyb3JTdHJpbmcpKTsKKyAgICAgICAgICAgICAgICBnbERlbGV0ZVByb2dyYW1z
QVJCKDEsICZtX3Byb2dyYW1JZCk7CisKKyAgICAgICAgICAgICAgICBtX3RleHR1cmVDb3VudCA9
IDA7CisgICAgICAgICAgICAgICAgbV9wcm9ncmFtSWQgPSAwOworCisgICAgICAgICAgICAgICAg
ZXJyb3IgPSBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6OlJlc291cmNlRXJyb3I7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1faGFuZGxlVHlwZSA9IGZvcm1hdC5oYW5kbGVU
eXBlKCk7CisgICAgICAgICAgICAgICAgbV9zY2FuTGluZURpcmVjdGlvbiA9IGZvcm1hdC5zY2Fu
TGluZURpcmVjdGlvbigpOworICAgICAgICAgICAgICAgIG1fZnJhbWVTaXplID0gZm9ybWF0LmZy
YW1lU2l6ZSgpOworCisgICAgICAgICAgICAgICAgaWYgKG1faGFuZGxlVHlwZSA9PSBRQWJzdHJh
Y3RWaWRlb0J1ZmZlcjo6Tm9IYW5kbGUpCisgICAgICAgICAgICAgICAgICAgIGdsR2VuVGV4dHVy
ZXMobV90ZXh0dXJlQ291bnQsIG1fdGV4dHVyZUlkcyk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgUVZpZGVvU3VyZmFjZUFy
YkZwUGFpbnRlcjo6c3RvcCgpCit7CisgICAgbV9jb250ZXh0LT5tYWtlQ3VycmVudCgpOworCisg
ICAgaWYgKG1faGFuZGxlVHlwZSAhPSBRQWJzdHJhY3RWaWRlb0J1ZmZlcjo6R0xUZXh0dXJlSGFu
ZGxlKQorICAgICAgICBnbERlbGV0ZVRleHR1cmVzKG1fdGV4dHVyZUNvdW50LCBtX3RleHR1cmVJ
ZHMpOworICAgIGdsRGVsZXRlUHJvZ3JhbXNBUkIoMSwgJm1fcHJvZ3JhbUlkKTsKKworICAgIG1f
dGV4dHVyZUNvdW50ID0gMDsKKyAgICBtX3Byb2dyYW1JZCA9IDA7CisgICAgbV9oYW5kbGVUeXBl
ID0gUUFic3RyYWN0VmlkZW9CdWZmZXI6Ok5vSGFuZGxlOworfQorCitRQWJzdHJhY3RWaWRlb1N1
cmZhY2U6OkVycm9yIFFWaWRlb1N1cmZhY2VBcmJGcFBhaW50ZXI6OnBhaW50KAorICAgICAgICBj
b25zdCBRUmVjdEYgJnRhcmdldCwgUVBhaW50ZXIgKnBhaW50ZXIsIGNvbnN0IFFSZWN0RiAmc291
cmNlKQoreworICAgIGlmIChtX2ZyYW1lLmlzVmFsaWQoKSkgeworICAgICAgICBwYWludGVyLT5i
ZWdpbk5hdGl2ZVBhaW50aW5nKCk7CisKKyAgICAgICAgY29uc3QgZmxvYXQgdHhMZWZ0ID0gc291
cmNlLmxlZnQoKSAvIG1fZnJhbWVTaXplLndpZHRoKCk7CisgICAgICAgIGNvbnN0IGZsb2F0IHR4
UmlnaHQgPSBzb3VyY2UucmlnaHQoKSAvIG1fZnJhbWVTaXplLndpZHRoKCk7CisgICAgICAgIGNv
bnN0IGZsb2F0IHR4VG9wID0gbV9zY2FuTGluZURpcmVjdGlvbiA9PSBRVmlkZW9TdXJmYWNlRm9y
bWF0OjpUb3BUb0JvdHRvbQorICAgICAgICAgICAgICAgID8gc291cmNlLnRvcCgpIC8gbV9mcmFt
ZVNpemUuaGVpZ2h0KCkKKyAgICAgICAgICAgICAgICA6IHNvdXJjZS5ib3R0b20oKSAvIG1fZnJh
bWVTaXplLmhlaWdodCgpOworICAgICAgICBjb25zdCBmbG9hdCB0eEJvdHRvbSA9IG1fc2Nhbkxp
bmVEaXJlY3Rpb24gPT0gUVZpZGVvU3VyZmFjZUZvcm1hdDo6VG9wVG9Cb3R0b20KKyAgICAgICAg
ICAgICAgICA/IHNvdXJjZS5ib3R0b20oKSAvIG1fZnJhbWVTaXplLmhlaWdodCgpCisgICAgICAg
ICAgICAgICAgOiBzb3VyY2UudG9wKCkgLyBtX2ZyYW1lU2l6ZS5oZWlnaHQoKTsKKworICAgICAg
ICBjb25zdCBmbG9hdCB0eEFycmF5W10gPQorICAgICAgICB7CisgICAgICAgICAgICB0eExlZnQg
LCB0eEJvdHRvbSwKKyAgICAgICAgICAgIHR4UmlnaHQsIHR4Qm90dG9tLAorICAgICAgICAgICAg
dHhMZWZ0ICwgdHhUb3AsCisgICAgICAgICAgICB0eFJpZ2h0LCB0eFRvcAorICAgICAgICB9Owor
CisgICAgICAgIGNvbnN0IEdMZmxvYXQgdlRvcCA9IG1fc2NhbkxpbmVEaXJlY3Rpb24gPT0gUVZp
ZGVvU3VyZmFjZUZvcm1hdDo6VG9wVG9Cb3R0b20KKyAgICAgICAgICAgICAgICA/IHRhcmdldC50
b3AoKQorICAgICAgICAgICAgICAgIDogdGFyZ2V0LmJvdHRvbSgpICsgMTsKKyAgICAgICAgY29u
c3QgR0xmbG9hdCB2Qm90dG9tID0gbV9zY2FuTGluZURpcmVjdGlvbiA9PSBRVmlkZW9TdXJmYWNl
Rm9ybWF0OjpUb3BUb0JvdHRvbQorICAgICAgICAgICAgICAgID8gdGFyZ2V0LmJvdHRvbSgpICsg
MQorICAgICAgICAgICAgICAgIDogdGFyZ2V0LnRvcCgpOworCisgICAgICAgIGNvbnN0IEdMZmxv
YXQgdkFycmF5W10gPQorICAgICAgICB7CisgICAgICAgICAgICB0YXJnZXQubGVmdCgpICAgICAs
IHZCb3R0b20sCisgICAgICAgICAgICB0YXJnZXQucmlnaHQoKSArIDEsIHZCb3R0b20sCisgICAg
ICAgICAgICB0YXJnZXQubGVmdCgpICAgICAsIHZUb3AsCisgICAgICAgICAgICB0YXJnZXQucmln
aHQoKSArIDEsIHZUb3AKKyAgICAgICAgfTsKKworICAgICAgICBnbEVuYWJsZShHTF9GUkFHTUVO
VF9QUk9HUkFNX0FSQik7CisgICAgICAgIGdsQmluZFByb2dyYW1BUkIoR0xfRlJBR01FTlRfUFJP
R1JBTV9BUkIsIG1fcHJvZ3JhbUlkKTsKKworICAgICAgICBnbFByb2dyYW1Mb2NhbFBhcmFtZXRl
cjRmQVJCKAorICAgICAgICAgICAgICAgIEdMX0ZSQUdNRU5UX1BST0dSQU1fQVJCLAorICAgICAg
ICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgbV9jb2xvck1hdHJpeCgwLCAwKSwKKyAgICAg
ICAgICAgICAgICBtX2NvbG9yTWF0cml4KDAsIDEpLAorICAgICAgICAgICAgICAgIG1fY29sb3JN
YXRyaXgoMCwgMiksCisgICAgICAgICAgICAgICAgbV9jb2xvck1hdHJpeCgwLCAzKSk7CisgICAg
ICAgIGdsUHJvZ3JhbUxvY2FsUGFyYW1ldGVyNGZBUkIoCisgICAgICAgICAgICAgICAgR0xfRlJB
R01FTlRfUFJPR1JBTV9BUkIsCisgICAgICAgICAgICAgICAgMSwKKyAgICAgICAgICAgICAgICBt
X2NvbG9yTWF0cml4KDEsIDApLAorICAgICAgICAgICAgICAgIG1fY29sb3JNYXRyaXgoMSwgMSks
CisgICAgICAgICAgICAgICAgbV9jb2xvck1hdHJpeCgxLCAyKSwKKyAgICAgICAgICAgICAgICBt
X2NvbG9yTWF0cml4KDEsIDMpKTsKKyAgICAgICAgZ2xQcm9ncmFtTG9jYWxQYXJhbWV0ZXI0ZkFS
QigKKyAgICAgICAgICAgICAgICBHTF9GUkFHTUVOVF9QUk9HUkFNX0FSQiwKKyAgICAgICAgICAg
ICAgICAyLAorICAgICAgICAgICAgICAgIG1fY29sb3JNYXRyaXgoMiwgMCksCisgICAgICAgICAg
ICAgICAgbV9jb2xvck1hdHJpeCgyLCAxKSwKKyAgICAgICAgICAgICAgICBtX2NvbG9yTWF0cml4
KDIsIDIpLAorICAgICAgICAgICAgICAgIG1fY29sb3JNYXRyaXgoMiwgMykpOworCisgICAgICAg
IGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCk7CisgICAgICAgIGdsQmluZFRleHR1cmUoR0xf
VEVYVFVSRV8yRCwgbV90ZXh0dXJlSWRzWzBdKTsKKworICAgICAgICBpZiAobV90ZXh0dXJlQ291
bnQgPT0gMykgeworICAgICAgICAgICAgZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUxKTsKKyAg
ICAgICAgICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlSWRzWzFdKTsK
KyAgICAgICAgICAgIGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMik7CisgICAgICAgICAgICBn
bEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZUlkc1syXSk7CisgICAgICAgICAg
ICBnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApOworICAgICAgICB9CisKKyAgICAgICAgZ2xW
ZXJ0ZXhQb2ludGVyKDIsIEdMX0ZMT0FULCAwLCB2QXJyYXkpOworICAgICAgICBnbFRleENvb3Jk
UG9pbnRlcigyLCBHTF9GTE9BVCwgMCwgdHhBcnJheSk7CisKKyAgICAgICAgZ2xFbmFibGVDbGll
bnRTdGF0ZShHTF9WRVJURVhfQVJSQVkpOworICAgICAgICBnbEVuYWJsZUNsaWVudFN0YXRlKEdM
X1RFWFRVUkVfQ09PUkRfQVJSQVkpOworCisgICAgICAgIGdsRHJhd0FycmF5cyhHTF9UUklBTkdM
RV9TVFJJUCwgMCwgNCk7CisKKyAgICAgICAgZ2xEaXNhYmxlQ2xpZW50U3RhdGUoR0xfVEVYVFVS
RV9DT09SRF9BUlJBWSk7CisgICAgICAgIGdsRGlzYWJsZUNsaWVudFN0YXRlKEdMX1ZFUlRFWF9B
UlJBWSk7CisgICAgICAgIGdsRGlzYWJsZShHTF9GUkFHTUVOVF9QUk9HUkFNX0FSQik7CisKKyAg
ICAgICAgcGFpbnRlci0+ZW5kTmF0aXZlUGFpbnRpbmcoKTsKKyAgICB9CisgICAgcmV0dXJuIFFB
YnN0cmFjdFZpZGVvU3VyZmFjZTo6Tm9FcnJvcjsKK30KKworI2VuZGlmCisKK3N0YXRpYyBjb25z
dCBjaGFyICpxdF9nbHNsX3ZlcnRleFNoYWRlclByb2dyYW0gPQorICAgICAgICAiYXR0cmlidXRl
IGhpZ2hwIHZlYzQgdmVydGV4Q29vcmRBcnJheTtcbiIKKyAgICAgICAgImF0dHJpYnV0ZSBoaWdo
cCB2ZWMyIHRleHR1cmVDb29yZEFycmF5O1xuIgorICAgICAgICAidW5pZm9ybSBoaWdocCBtYXQ0
IHBvc2l0aW9uTWF0cml4O1xuIgorICAgICAgICAidmFyeWluZyBoaWdocCB2ZWMyIHRleHR1cmVD
b29yZDtcbiIKKyAgICAgICAgInZvaWQgbWFpbih2b2lkKVxuIgorICAgICAgICAie1xuIgorICAg
ICAgICAiICAgZ2xfUG9zaXRpb24gPSBwb3NpdGlvbk1hdHJpeCAqIHZlcnRleENvb3JkQXJyYXk7
XG4iCisgICAgICAgICIgICB0ZXh0dXJlQ29vcmQgPSB0ZXh0dXJlQ29vcmRBcnJheTtcbiIKKyAg
ICAgICAgIn1cbiI7CisKKy8vIFBhaW50cyBhbiBSR0IzMiBmcmFtZQorc3RhdGljIGNvbnN0IGNo
YXIgKnF0X2dsc2xfeHJnYlNoYWRlclByb2dyYW0gPQorICAgICAgICAidW5pZm9ybSBzYW1wbGVy
MkQgdGV4UmdiO1xuIgorICAgICAgICAidW5pZm9ybSBtZWRpdW1wIG1hdDQgY29sb3JNYXRyaXg7
XG4iCisgICAgICAgICJ2YXJ5aW5nIGhpZ2hwIHZlYzIgdGV4dHVyZUNvb3JkO1xuIgorICAgICAg
ICAidm9pZCBtYWluKHZvaWQpXG4iCisgICAgICAgICJ7XG4iCisgICAgICAgICIgICAgaGlnaHAg
dmVjNCBjb2xvciA9IHZlYzQodGV4dHVyZTJEKHRleFJnYiwgdGV4dHVyZUNvb3JkLnN0KS5iZ3Is
IDEuMCk7XG4iCisgICAgICAgICIgICAgZ2xfRnJhZ0NvbG9yID0gY29sb3JNYXRyaXggKiBjb2xv
cjtcbiIKKyAgICAgICAgIn1cbiI7CisKKy8vIFBhaW50cyBhbiBBUkdCIGZyYW1lLgorc3RhdGlj
IGNvbnN0IGNoYXIgKnF0X2dsc2xfYXJnYlNoYWRlclByb2dyYW0gPQorICAgICAgICAidW5pZm9y
bSBzYW1wbGVyMkQgdGV4UmdiO1xuIgorICAgICAgICAidW5pZm9ybSBtZWRpdW1wIG1hdDQgY29s
b3JNYXRyaXg7XG4iCisgICAgICAgICJ2YXJ5aW5nIGhpZ2hwIHZlYzIgdGV4dHVyZUNvb3JkO1xu
IgorICAgICAgICAidm9pZCBtYWluKHZvaWQpXG4iCisgICAgICAgICJ7XG4iCisgICAgICAgICIg
ICAgaGlnaHAgdmVjNCBjb2xvciA9IHZlYzQodGV4dHVyZTJEKHRleFJnYiwgdGV4dHVyZUNvb3Jk
LnN0KS5iZ3IsIDEuMCk7XG4iCisgICAgICAgICIgICAgY29sb3IgPSBjb2xvck1hdHJpeCAqIGNv
bG9yO1xuIgorICAgICAgICAiICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IucmdiLCB0ZXh0
dXJlMkQodGV4UmdiLCB0ZXh0dXJlQ29vcmQuc3QpLmEpO1xuIgorICAgICAgICAifVxuIjsKKwor
Ly8gUGFpbnRzIGFuIFJHQihBKSBmcmFtZS4KK3N0YXRpYyBjb25zdCBjaGFyICpxdF9nbHNsX3Jn
YlNoYWRlclByb2dyYW0gPQorICAgICAgICAidW5pZm9ybSBzYW1wbGVyMkQgdGV4UmdiO1xuIgor
ICAgICAgICAidW5pZm9ybSBtZWRpdW1wIG1hdDQgY29sb3JNYXRyaXg7XG4iCisgICAgICAgICJ2
YXJ5aW5nIGhpZ2hwIHZlYzIgdGV4dHVyZUNvb3JkO1xuIgorICAgICAgICAidm9pZCBtYWluKHZv
aWQpXG4iCisgICAgICAgICJ7XG4iCisgICAgICAgICIgICAgaGlnaHAgdmVjNCBjb2xvciA9IHZl
YzQodGV4dHVyZTJEKHRleFJnYiwgdGV4dHVyZUNvb3JkLnN0KS5yZ2IsIDEuMCk7XG4iCisgICAg
ICAgICIgICAgY29sb3IgPSBjb2xvck1hdHJpeCAqIGNvbG9yO1xuIgorICAgICAgICAiICAgIGds
X0ZyYWdDb2xvciA9IHZlYzQoY29sb3IucmdiLCB0ZXh0dXJlMkQodGV4UmdiLCB0ZXh0dXJlQ29v
cmQuc3QpLmEpO1xuIgorICAgICAgICAifVxuIjsKKworLy8gUGFpbnRzIGEgWVVWNDIwUCBvciBZ
VjEyIGZyYW1lLgorc3RhdGljIGNvbnN0IGNoYXIgKnF0X2dsc2xfeXV2UGxhbmFyU2hhZGVyUHJv
Z3JhbSA9CisgICAgICAgICJ1bmlmb3JtIHNhbXBsZXIyRCB0ZXhZO1xuIgorICAgICAgICAidW5p
Zm9ybSBzYW1wbGVyMkQgdGV4VTtcbiIKKyAgICAgICAgInVuaWZvcm0gc2FtcGxlcjJEIHRleFY7
XG4iCisgICAgICAgICJ1bmlmb3JtIG1lZGl1bXAgbWF0NCBjb2xvck1hdHJpeDtcbiIKKyAgICAg
ICAgInZhcnlpbmcgaGlnaHAgdmVjMiB0ZXh0dXJlQ29vcmQ7XG4iCisgICAgICAgICJ2b2lkIG1h
aW4odm9pZClcbiIKKyAgICAgICAgIntcbiIKKyAgICAgICAgIiAgICBoaWdocCB2ZWM0IGNvbG9y
ID0gdmVjNChcbiIKKyAgICAgICAgIiAgICAgICAgICAgdGV4dHVyZTJEKHRleFksIHRleHR1cmVD
b29yZC5zdCkucixcbiIKKyAgICAgICAgIiAgICAgICAgICAgdGV4dHVyZTJEKHRleFUsIHRleHR1
cmVDb29yZC5zdCkucixcbiIKKyAgICAgICAgIiAgICAgICAgICAgdGV4dHVyZTJEKHRleFYsIHRl
eHR1cmVDb29yZC5zdCkucixcbiIKKyAgICAgICAgIiAgICAgICAgICAgMS4wKTtcbiIKKyAgICAg
ICAgIiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvck1hdHJpeCAqIGNvbG9yO1xuIgorICAgICAgICAi
fVxuIjsKKworCitjbGFzcyBRVmlkZW9TdXJmYWNlR2xzbFBhaW50ZXIgOiBwdWJsaWMgUVZpZGVv
U3VyZmFjZUdMUGFpbnRlciB7CitwdWJsaWM6CisgICAgUVZpZGVvU3VyZmFjZUdsc2xQYWludGVy
KFFHTENvbnRleHQgKmNvbnRleHQpOworCisgICAgUUFic3RyYWN0VmlkZW9TdXJmYWNlOjpFcnJv
ciBzdGFydChjb25zdCBRVmlkZW9TdXJmYWNlRm9ybWF0ICZmb3JtYXQpOworICAgIHZvaWQgc3Rv
cCgpOworCisgICAgUUFic3RyYWN0VmlkZW9TdXJmYWNlOjpFcnJvciBwYWludCgKKyAgICAgICAg
ICAgIGNvbnN0IFFSZWN0RiAmdGFyZ2V0LCBRUGFpbnRlciAqcGFpbnRlciwgY29uc3QgUVJlY3RG
ICZzb3VyY2UpOworCitwcml2YXRlOgorICAgIFFHTFNoYWRlclByb2dyYW0gbV9wcm9ncmFtOwor
ICAgIFFTaXplIG1fZnJhbWVTaXplOworfTsKKworUVZpZGVvU3VyZmFjZUdsc2xQYWludGVyOjpR
VmlkZW9TdXJmYWNlR2xzbFBhaW50ZXIoUUdMQ29udGV4dCAqY29udGV4dCkKKyAgICA6IFFWaWRl
b1N1cmZhY2VHTFBhaW50ZXIoY29udGV4dCkKKyAgICAsIG1fcHJvZ3JhbShjb250ZXh0KQorewor
ICAgIG1faW1hZ2VQaXhlbEZvcm1hdHMKKyAgICAgICAgICAgIDw8IFFWaWRlb0ZyYW1lOjpGb3Jt
YXRfUkdCMzIKKyAgICAgICAgICAgIDw8IFFWaWRlb0ZyYW1lOjpGb3JtYXRfQVJHQjMyCisjaWZu
ZGVmIFFUX09QRU5HTF9FUworICAgICAgICAgICAgPDwgUVZpZGVvRnJhbWU6OkZvcm1hdF9SR0Iy
NAorI2VuZGlmCisgICAgICAgICAgICA8PCBRVmlkZW9GcmFtZTo6Rm9ybWF0X1JHQjU2NQorICAg
ICAgICAgICAgPDwgUVZpZGVvRnJhbWU6OkZvcm1hdF9ZVjEyCisgICAgICAgICAgICA8PCBRVmlk
ZW9GcmFtZTo6Rm9ybWF0X1lVVjQyMFA7CisgICAgbV9nbFBpeGVsRm9ybWF0cworICAgICAgICAg
ICAgPDwgUVZpZGVvRnJhbWU6OkZvcm1hdF9SR0IzMgorICAgICAgICAgICAgPDwgUVZpZGVvRnJh
bWU6OkZvcm1hdF9BUkdCMzI7Cit9CisKK1FBYnN0cmFjdFZpZGVvU3VyZmFjZTo6RXJyb3IgUVZp
ZGVvU3VyZmFjZUdsc2xQYWludGVyOjpzdGFydChjb25zdCBRVmlkZW9TdXJmYWNlRm9ybWF0ICZm
b3JtYXQpCit7CisgICAgUV9BU1NFUlQoIW1fdGV4dHVyZUNvdW50KTsKKworICAgIFFBYnN0cmFj
dFZpZGVvU3VyZmFjZTo6RXJyb3IgZXJyb3IgPSBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6Ok5vRXJy
b3I7CisKKyAgICBtX2NvbnRleHQtPm1ha2VDdXJyZW50KCk7CisKKyAgICBjb25zdCBjaGFyICpm
cmFnbWVudFByb2dyYW0gPSAwOworCisgICAgaWYgKGZvcm1hdC5oYW5kbGVUeXBlKCkgPT0gUUFi
c3RyYWN0VmlkZW9CdWZmZXI6Ok5vSGFuZGxlKSB7CisgICAgICAgIHN3aXRjaCAoZm9ybWF0LnBp
eGVsRm9ybWF0KCkpIHsKKyAgICAgICAgY2FzZSBRVmlkZW9GcmFtZTo6Rm9ybWF0X1JHQjMyOgor
ICAgICAgICAgICAgaW5pdFJnYlRleHR1cmVJbmZvKEdMX1JHQkEsIEdMX1JHQkEsIEdMX1VOU0lH
TkVEX0JZVEUsIGZvcm1hdC5mcmFtZVNpemUoKSk7CisgICAgICAgICAgICBmcmFnbWVudFByb2dy
YW0gPSBxdF9nbHNsX3hyZ2JTaGFkZXJQcm9ncmFtOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgUVZpZGVvRnJhbWU6OkZvcm1hdF9BUkdCMzI6CisgICAgICAgICAgICBpbml0Umdi
VGV4dHVyZUluZm8oR0xfUkdCQSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgZm9ybWF0LmZy
YW1lU2l6ZSgpKTsKKyAgICAgICAgICAgIGZyYWdtZW50UHJvZ3JhbSA9IHF0X2dsc2xfYXJnYlNo
YWRlclByb2dyYW07CisgICAgICAgICAgICBicmVhazsKKyNpZm5kZWYgUVRfT1BFTkdMX0VTCisg
ICAgICAgIGNhc2UgUVZpZGVvRnJhbWU6OkZvcm1hdF9SR0IyNDoKKyAgICAgICAgICAgIGluaXRS
Z2JUZXh0dXJlSW5mbyhHTF9SR0I4LCBHTF9SR0IsIEdMX1VOU0lHTkVEX0JZVEUsIGZvcm1hdC5m
cmFtZVNpemUoKSk7CisgICAgICAgICAgICBmcmFnbWVudFByb2dyYW0gPSBxdF9nbHNsX3JnYlNo
YWRlclByb2dyYW07CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgICBjYXNlIFFW
aWRlb0ZyYW1lOjpGb3JtYXRfUkdCNTY1OgorICAgICAgICAgICAgaW5pdFJnYlRleHR1cmVJbmZv
KEdMX1JHQiwgR0xfUkdCLCBHTF9VTlNJR05FRF9TSE9SVF81XzZfNSwgZm9ybWF0LmZyYW1lU2l6
ZSgpKTsKKyAgICAgICAgICAgIGZyYWdtZW50UHJvZ3JhbSA9IHF0X2dsc2xfcmdiU2hhZGVyUHJv
Z3JhbTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFFWaWRlb0ZyYW1lOjpGb3Jt
YXRfWVYxMjoKKyAgICAgICAgICAgIGluaXRZdjEyVGV4dHVyZUluZm8oZm9ybWF0LmZyYW1lU2l6
ZSgpKTsKKyAgICAgICAgICAgIGZyYWdtZW50UHJvZ3JhbSA9IHF0X2dsc2xfeXV2UGxhbmFyU2hh
ZGVyUHJvZ3JhbTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFFWaWRlb0ZyYW1l
OjpGb3JtYXRfWVVWNDIwUDoKKyAgICAgICAgICAgIGluaXRZdXY0MjBQVGV4dHVyZUluZm8oZm9y
bWF0LmZyYW1lU2l6ZSgpKTsKKyAgICAgICAgICAgIGZyYWdtZW50UHJvZ3JhbSA9IHF0X2dsc2xf
eXV2UGxhbmFyU2hhZGVyUHJvZ3JhbTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGZvcm1h
dC5oYW5kbGVUeXBlKCkgPT0gUUFic3RyYWN0VmlkZW9CdWZmZXI6OkdMVGV4dHVyZUhhbmRsZSkg
eworICAgICAgICBzd2l0Y2ggKGZvcm1hdC5waXhlbEZvcm1hdCgpKSB7CisgICAgICAgIGNhc2Ug
UVZpZGVvRnJhbWU6OkZvcm1hdF9SR0IzMjoKKyAgICAgICAgY2FzZSBRVmlkZW9GcmFtZTo6Rm9y
bWF0X0FSR0IzMjoKKyAgICAgICAgICAgIG1feXV2ID0gZmFsc2U7CisgICAgICAgICAgICBtX3Rl
eHR1cmVDb3VudCA9IDE7CisgICAgICAgICAgICBmcmFnbWVudFByb2dyYW0gPSBxdF9nbHNsX3Jn
YlNoYWRlclByb2dyYW07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFmcmFnbWVudFBy
b2dyYW0pIHsKKyAgICAgICAgZXJyb3IgPSBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6OlVuc3VwcG9y
dGVkRm9ybWF0RXJyb3I7CisgICAgfSBlbHNlIGlmICghbV9wcm9ncmFtLmFkZFNoYWRlckZyb21T
b3VyY2VDb2RlKFFHTFNoYWRlcjo6VmVydGV4LCBxdF9nbHNsX3ZlcnRleFNoYWRlclByb2dyYW0p
KSB7CisgICAgICAgIHFXYXJuaW5nKCJRUGFpbnRlclZpZGVvU3VyZmFjZTogVmVydGV4IHNoYWRl
ciBjb21waWxlIGVycm9yICVzIiwKKyAgICAgICAgICAgICAgICAgcVByaW50YWJsZShtX3Byb2dy
YW0ubG9nKCkpKTsKKyAgICAgICAgZXJyb3IgPSBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6OlJlc291
cmNlRXJyb3I7CisgICAgfSBlbHNlIGlmICghbV9wcm9ncmFtLmFkZFNoYWRlckZyb21Tb3VyY2VD
b2RlKFFHTFNoYWRlcjo6RnJhZ21lbnQsIGZyYWdtZW50UHJvZ3JhbSkpIHsKKyAgICAgICAgcVdh
cm5pbmcoIlFQYWludGVyVmlkZW9TdXJmYWNlOiBTaGFkZXIgY29tcGlsZSBlcnJvciAlcyIsIHFQ
cmludGFibGUobV9wcm9ncmFtLmxvZygpKSk7CisgICAgICAgIGVycm9yID0gUUFic3RyYWN0Vmlk
ZW9TdXJmYWNlOjpSZXNvdXJjZUVycm9yOworICAgICAgICBtX3Byb2dyYW0ucmVtb3ZlQWxsU2hh
ZGVycygpOworICAgIH0gZWxzZSBpZiAoIW1fcHJvZ3JhbS5saW5rKCkpIHsKKyAgICAgICAgcVdh
cm5pbmcoIlFQYWludGVyVmlkZW9TdXJmYWNlOiBTaGFkZXIgbGluayBlcnJvciAlcyIsIHFQcmlu
dGFibGUobV9wcm9ncmFtLmxvZygpKSk7CisgICAgICAgIG1fcHJvZ3JhbS5yZW1vdmVBbGxTaGFk
ZXJzKCk7CisgICAgICAgIGVycm9yID0gUUFic3RyYWN0VmlkZW9TdXJmYWNlOjpSZXNvdXJjZUVy
cm9yOworICAgIH0gZWxzZSB7CisgICAgICAgIG1faGFuZGxlVHlwZSA9IGZvcm1hdC5oYW5kbGVU
eXBlKCk7CisgICAgICAgIG1fc2NhbkxpbmVEaXJlY3Rpb24gPSBmb3JtYXQuc2NhbkxpbmVEaXJl
Y3Rpb24oKTsKKyAgICAgICAgbV9mcmFtZVNpemUgPSBmb3JtYXQuZnJhbWVTaXplKCk7CisKKyAg
ICAgICAgaWYgKG1faGFuZGxlVHlwZSA9PSBRQWJzdHJhY3RWaWRlb0J1ZmZlcjo6Tm9IYW5kbGUp
CisgICAgICAgICAgICBnbEdlblRleHR1cmVzKG1fdGV4dHVyZUNvdW50LCBtX3RleHR1cmVJZHMp
OworICAgIH0KKworICAgIHJldHVybiBlcnJvcjsKK30KKwordm9pZCBRVmlkZW9TdXJmYWNlR2xz
bFBhaW50ZXI6OnN0b3AoKQoreworICAgIG1fY29udGV4dC0+bWFrZUN1cnJlbnQoKTsKKworICAg
IGlmIChtX2hhbmRsZVR5cGUgIT0gUUFic3RyYWN0VmlkZW9CdWZmZXI6OkdMVGV4dHVyZUhhbmRs
ZSkKKyAgICAgICAgZ2xEZWxldGVUZXh0dXJlcyhtX3RleHR1cmVDb3VudCwgbV90ZXh0dXJlSWRz
KTsKKyAgICBtX3Byb2dyYW0ucmVtb3ZlQWxsU2hhZGVycygpOworCisgICAgbV90ZXh0dXJlQ291
bnQgPSAwOworICAgIG1faGFuZGxlVHlwZSA9IFFBYnN0cmFjdFZpZGVvQnVmZmVyOjpOb0hhbmRs
ZTsKK30KKworUUFic3RyYWN0VmlkZW9TdXJmYWNlOjpFcnJvciBRVmlkZW9TdXJmYWNlR2xzbFBh
aW50ZXI6OnBhaW50KAorICAgICAgICBjb25zdCBRUmVjdEYgJnRhcmdldCwgUVBhaW50ZXIgKnBh
aW50ZXIsIGNvbnN0IFFSZWN0RiAmc291cmNlKQoreworICAgIGlmIChtX2ZyYW1lLmlzVmFsaWQo
KSkgeworICAgICAgICBwYWludGVyLT5iZWdpbk5hdGl2ZVBhaW50aW5nKCk7CisKKyAgICAgICAg
Y29uc3QgaW50IHdpZHRoID0gUUdMQ29udGV4dDo6Y3VycmVudENvbnRleHQoKS0+ZGV2aWNlKCkt
PndpZHRoKCk7CisgICAgICAgIGNvbnN0IGludCBoZWlnaHQgPSBRR0xDb250ZXh0OjpjdXJyZW50
Q29udGV4dCgpLT5kZXZpY2UoKS0+aGVpZ2h0KCk7CisKKyAgICAgICAgY29uc3QgUVRyYW5zZm9y
bSB0cmFuc2Zvcm0gPSBwYWludGVyLT5kZXZpY2VUcmFuc2Zvcm0oKTsKKworICAgICAgICBjb25z
dCBHTGZsb2F0IHdmYWN0b3IgPSAyLjAgLyB3aWR0aDsKKyAgICAgICAgY29uc3QgR0xmbG9hdCBo
ZmFjdG9yID0gLTIuMCAvIGhlaWdodDsKKworICAgICAgICBjb25zdCBHTGZsb2F0IHBvc2l0aW9u
TWF0cml4WzRdWzRdID0KKyAgICAgICAgeworICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IC8qKDAsMCkqLyB3ZmFjdG9yICogdHJhbnNmb3JtLm0xMSgpIC0gdHJhbnNmb3JtLm0xMygpLAor
ICAgICAgICAgICAgICAgIC8qKDAsMSkqLyBoZmFjdG9yICogdHJhbnNmb3JtLm0xMigpICsgdHJh
bnNmb3JtLm0xMygpLAorICAgICAgICAgICAgICAgIC8qKDAsMikqLyAwLjAsCisgICAgICAgICAg
ICAgICAgLyooMCwzKSovIHRyYW5zZm9ybS5tMTMoKQorICAgICAgICAgICAgfSwgeworICAgICAg
ICAgICAgICAgIC8qKDEsMCkqLyB3ZmFjdG9yICogdHJhbnNmb3JtLm0yMSgpIC0gdHJhbnNmb3Jt
Lm0yMygpLAorICAgICAgICAgICAgICAgIC8qKDEsMSkqLyBoZmFjdG9yICogdHJhbnNmb3JtLm0y
MigpICsgdHJhbnNmb3JtLm0yMygpLAorICAgICAgICAgICAgICAgIC8qKDEsMikqLyAwLjAsCisg
ICAgICAgICAgICAgICAgLyooMSwzKSovIHRyYW5zZm9ybS5tMjMoKQorICAgICAgICAgICAgfSwg
eworICAgICAgICAgICAgICAgIC8qKDIsMCkqLyAwLjAsCisgICAgICAgICAgICAgICAgLyooMiwx
KSovIDAuMCwKKyAgICAgICAgICAgICAgICAvKigyLDIpKi8gLTEuMCwKKyAgICAgICAgICAgICAg
ICAvKigyLDMpKi8gMC4wCisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgLyooMyww
KSovIHdmYWN0b3IgKiB0cmFuc2Zvcm0uZHgoKSAtIHRyYW5zZm9ybS5tMzMoKSwKKyAgICAgICAg
ICAgICAgICAvKigzLDEpKi8gaGZhY3RvciAqIHRyYW5zZm9ybS5keSgpICsgdHJhbnNmb3JtLm0z
MygpLAorICAgICAgICAgICAgICAgIC8qKDMsMikqLyAwLjAsCisgICAgICAgICAgICAgICAgLyoo
MywzKSovIHRyYW5zZm9ybS5tMzMoKQorICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAg
ICAgIGNvbnN0IEdMZmxvYXQgdlRvcCA9IG1fc2NhbkxpbmVEaXJlY3Rpb24gPT0gUVZpZGVvU3Vy
ZmFjZUZvcm1hdDo6VG9wVG9Cb3R0b20KKyAgICAgICAgICAgICAgICA/IHRhcmdldC50b3AoKQor
ICAgICAgICAgICAgICAgIDogdGFyZ2V0LmJvdHRvbSgpICsgMTsKKyAgICAgICAgY29uc3QgR0xm
bG9hdCB2Qm90dG9tID0gbV9zY2FuTGluZURpcmVjdGlvbiA9PSBRVmlkZW9TdXJmYWNlRm9ybWF0
OjpUb3BUb0JvdHRvbQorICAgICAgICAgICAgICAgID8gdGFyZ2V0LmJvdHRvbSgpICsgMQorICAg
ICAgICAgICAgICAgIDogdGFyZ2V0LnRvcCgpOworCisKKyAgICAgICAgY29uc3QgR0xmbG9hdCB2
ZXJ0ZXhDb29yZEFycmF5W10gPQorICAgICAgICB7CisgICAgICAgICAgICB0YXJnZXQubGVmdCgp
ICAgICAsIHZCb3R0b20sCisgICAgICAgICAgICB0YXJnZXQucmlnaHQoKSArIDEsIHZCb3R0b20s
CisgICAgICAgICAgICB0YXJnZXQubGVmdCgpICAgICAsIHZUb3AsCisgICAgICAgICAgICB0YXJn
ZXQucmlnaHQoKSArIDEsIHZUb3AKKyAgICAgICAgfTsKKworICAgICAgICBjb25zdCBHTGZsb2F0
IHR4TGVmdCA9IHNvdXJjZS5sZWZ0KCkgLyBtX2ZyYW1lU2l6ZS53aWR0aCgpOworICAgICAgICBj
b25zdCBHTGZsb2F0IHR4UmlnaHQgPSBzb3VyY2UucmlnaHQoKSAvIG1fZnJhbWVTaXplLndpZHRo
KCk7CisgICAgICAgIGNvbnN0IEdMZmxvYXQgdHhUb3AgPSBtX3NjYW5MaW5lRGlyZWN0aW9uID09
IFFWaWRlb1N1cmZhY2VGb3JtYXQ6OlRvcFRvQm90dG9tCisgICAgICAgICAgICAgICAgPyBzb3Vy
Y2UudG9wKCkgLyBtX2ZyYW1lU2l6ZS5oZWlnaHQoKQorICAgICAgICAgICAgICAgIDogc291cmNl
LmJvdHRvbSgpIC8gbV9mcmFtZVNpemUuaGVpZ2h0KCk7CisgICAgICAgIGNvbnN0IEdMZmxvYXQg
dHhCb3R0b20gPSBtX3NjYW5MaW5lRGlyZWN0aW9uID09IFFWaWRlb1N1cmZhY2VGb3JtYXQ6OlRv
cFRvQm90dG9tCisgICAgICAgICAgICAgICAgPyBzb3VyY2UuYm90dG9tKCkgLyBtX2ZyYW1lU2l6
ZS5oZWlnaHQoKQorICAgICAgICAgICAgICAgIDogc291cmNlLnRvcCgpIC8gbV9mcmFtZVNpemUu
aGVpZ2h0KCk7CisKKyAgICAgICAgY29uc3QgR0xmbG9hdCB0ZXh0dXJlQ29vcmRBcnJheVtdID0K
KyAgICAgICAgeworICAgICAgICAgICAgdHhMZWZ0ICwgdHhCb3R0b20sCisgICAgICAgICAgICB0
eFJpZ2h0LCB0eEJvdHRvbSwKKyAgICAgICAgICAgIHR4TGVmdCAsIHR4VG9wLAorICAgICAgICAg
ICAgdHhSaWdodCwgdHhUb3AKKyAgICAgICAgfTsKKworICAgICAgICBtX3Byb2dyYW0uYmluZCgp
OworCisgICAgICAgIG1fcHJvZ3JhbS5lbmFibGVBdHRyaWJ1dGVBcnJheSgidmVydGV4Q29vcmRB
cnJheSIpOworICAgICAgICBtX3Byb2dyYW0uZW5hYmxlQXR0cmlidXRlQXJyYXkoInRleHR1cmVD
b29yZEFycmF5Iik7CisgICAgICAgIG1fcHJvZ3JhbS5zZXRBdHRyaWJ1dGVBcnJheSgidmVydGV4
Q29vcmRBcnJheSIsIHZlcnRleENvb3JkQXJyYXksIDIpOworICAgICAgICBtX3Byb2dyYW0uc2V0
QXR0cmlidXRlQXJyYXkoInRleHR1cmVDb29yZEFycmF5IiwgdGV4dHVyZUNvb3JkQXJyYXksIDIp
OworICAgICAgICBtX3Byb2dyYW0uc2V0VW5pZm9ybVZhbHVlKCJwb3NpdGlvbk1hdHJpeCIsIHBv
c2l0aW9uTWF0cml4KTsKKworICAgICAgICBpZiAobV90ZXh0dXJlQ291bnQgPT0gMykgeworICAg
ICAgICAgICAgZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsKKyAgICAgICAgICAgIGdsQmlu
ZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlSWRzWzBdKTsKKyAgICAgICAgICAgIGds
QWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMSk7CisgICAgICAgICAgICBnbEJpbmRUZXh0dXJlKEdM
X1RFWFRVUkVfMkQsIG1fdGV4dHVyZUlkc1sxXSk7CisgICAgICAgICAgICBnbEFjdGl2ZVRleHR1
cmUoR0xfVEVYVFVSRTIpOworICAgICAgICAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJE
LCBtX3RleHR1cmVJZHNbMl0pOworICAgICAgICAgICAgZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRV
UkUwKTsKKworICAgICAgICAgICAgbV9wcm9ncmFtLnNldFVuaWZvcm1WYWx1ZSgidGV4WSIsIDAp
OworICAgICAgICAgICAgbV9wcm9ncmFtLnNldFVuaWZvcm1WYWx1ZSgidGV4VSIsIDEpOworICAg
ICAgICAgICAgbV9wcm9ncmFtLnNldFVuaWZvcm1WYWx1ZSgidGV4ViIsIDIpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsKKyAgICAg
ICAgICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlSWRzWzBdKTsKKwor
ICAgICAgICAgICAgbV9wcm9ncmFtLnNldFVuaWZvcm1WYWx1ZSgidGV4UmdiIiwgMCk7CisgICAg
ICAgIH0KKyAgICAgICAgbV9wcm9ncmFtLnNldFVuaWZvcm1WYWx1ZSgiY29sb3JNYXRyaXgiLCBt
X2NvbG9yTWF0cml4KTsKKworICAgICAgICBnbERyYXdBcnJheXMoR0xfVFJJQU5HTEVfU1RSSVAs
IDAsIDQpOworCisgICAgICAgIG1fcHJvZ3JhbS5yZWxlYXNlKCk7CisKKyAgICAgICAgcGFpbnRl
ci0+ZW5kTmF0aXZlUGFpbnRpbmcoKTsKKyAgICB9CisgICAgcmV0dXJuIFFBYnN0cmFjdFZpZGVv
U3VyZmFjZTo6Tm9FcnJvcjsKK30KKworI2VuZGlmCisKK1FQYWludGVyVmlkZW9TdXJmYWNlOjpR
UGFpbnRlclZpZGVvU3VyZmFjZShRT2JqZWN0ICpwYXJlbnQpCisgICAgOiBRQWJzdHJhY3RWaWRl
b1N1cmZhY2UocGFyZW50KQorICAgICwgbV9wYWludGVyKDApCisjaWYgIWRlZmluZWQoUVRfTk9f
T1BFTkdMKSAmJiAhZGVmaW5lZChRVF9PUEVOR0xfRVNfMV9DTCkgJiYgIWRlZmluZWQoUVRfT1BF
TkdMX0VTXzEpCisgICAgLCBtX2dsQ29udGV4dCgwKQorICAgICwgbV9zaGFkZXJUeXBlcyhOb1No
YWRlcnMpCisgICAgLCBtX3NoYWRlclR5cGUoTm9TaGFkZXJzKQorI2VuZGlmCisgICAgLCBtX2Jy
aWdodG5lc3MoMCkKKyAgICAsIG1fY29udHJhc3QoMCkKKyAgICAsIG1faHVlKDApCisgICAgLCBt
X3NhdHVyYXRpb24oMCkKKyAgICAsIG1fcGl4ZWxGb3JtYXQoUVZpZGVvRnJhbWU6OkZvcm1hdF9J
bnZhbGlkKQorICAgICwgbV9jb2xvcnNEaXJ0eSh0cnVlKQorICAgICwgbV9yZWFkeShmYWxzZSkK
K3sKK30KKworUVBhaW50ZXJWaWRlb1N1cmZhY2U6On5RUGFpbnRlclZpZGVvU3VyZmFjZSgpCit7
CisgICAgaWYgKGlzQWN0aXZlKCkpCisgICAgICAgIG1fcGFpbnRlci0+c3RvcCgpOworCisgICAg
ZGVsZXRlIG1fcGFpbnRlcjsKK30KKworUUxpc3Q8UVZpZGVvRnJhbWU6OlBpeGVsRm9ybWF0PiBR
UGFpbnRlclZpZGVvU3VyZmFjZTo6c3VwcG9ydGVkUGl4ZWxGb3JtYXRzKAorICAgICAgICBRQWJz
dHJhY3RWaWRlb0J1ZmZlcjo6SGFuZGxlVHlwZSBoYW5kbGVUeXBlKSBjb25zdAoreworICAgIGlm
ICghbV9wYWludGVyKQorICAgICAgICBjb25zdF9jYXN0PFFQYWludGVyVmlkZW9TdXJmYWNlICo+
KHRoaXMpLT5jcmVhdGVQYWludGVyKCk7CisKKyAgICByZXR1cm4gbV9wYWludGVyLT5zdXBwb3J0
ZWRQaXhlbEZvcm1hdHMoaGFuZGxlVHlwZSk7Cit9CisKK2Jvb2wgUVBhaW50ZXJWaWRlb1N1cmZh
Y2U6OmlzRm9ybWF0U3VwcG9ydGVkKAorICAgICAgICBjb25zdCBRVmlkZW9TdXJmYWNlRm9ybWF0
ICZmb3JtYXQsIFFWaWRlb1N1cmZhY2VGb3JtYXQgKnNpbWlsYXIpIGNvbnN0Cit7CisgICAgaWYg
KCFtX3BhaW50ZXIpCisgICAgICAgIGNvbnN0X2Nhc3Q8UVBhaW50ZXJWaWRlb1N1cmZhY2UgKj4o
dGhpcyktPmNyZWF0ZVBhaW50ZXIoKTsKKworICAgIHJldHVybiBtX3BhaW50ZXItPmlzRm9ybWF0
U3VwcG9ydGVkKGZvcm1hdCwgc2ltaWxhcik7Cit9CisKK2Jvb2wgUVBhaW50ZXJWaWRlb1N1cmZh
Y2U6OnN0YXJ0KGNvbnN0IFFWaWRlb1N1cmZhY2VGb3JtYXQgJmZvcm1hdCkKK3sKKyAgICBpZiAo
aXNBY3RpdmUoKSkKKyAgICAgICAgbV9wYWludGVyLT5zdG9wKCk7CisKKyAgICBpZiAoIW1fcGFp
bnRlcikKKyAgICAgICAgY3JlYXRlUGFpbnRlcigpOworCisgICAgaWYgKGZvcm1hdC5mcmFtZVNp
emUoKS5pc0VtcHR5KCkpCisgICAgICAgIHNldEVycm9yKFVuc3VwcG9ydGVkRm9ybWF0RXJyb3Ip
OworICAgIGVsc2UgeworICAgICAgICBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6OkVycm9yIGVycm9y
ID0gbV9wYWludGVyLT5zdGFydChmb3JtYXQpOworCisgICAgICAgIGlmIChlcnJvciAhPSBRQWJz
dHJhY3RWaWRlb1N1cmZhY2U6Ok5vRXJyb3IpCisgICAgICAgICAgICBzZXRFcnJvcihlcnJvcik7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbV9waXhlbEZvcm1hdCA9IGZvcm1hdC5waXhl
bEZvcm1hdCgpOworICAgICAgICAgICAgbV9mcmFtZVNpemUgPSBmb3JtYXQuZnJhbWVTaXplKCk7
CisgICAgICAgICAgICBtX3NvdXJjZVJlY3QgPSBmb3JtYXQudmlld3BvcnQoKTsKKyAgICAgICAg
ICAgIG1fY29sb3JzRGlydHkgPSB0cnVlOworICAgICAgICAgICAgbV9yZWFkeSA9IHRydWU7CisK
KyAgICAgICAgICAgIHJldHVybiBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6OnN0YXJ0KGZvcm1hdCk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6OnN0b3AoKTsK
KworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBRUGFpbnRlclZpZGVvU3VyZmFjZTo6c3Rv
cCgpCit7CisgICAgaWYgKGlzQWN0aXZlKCkpIHsKKyAgICAgICAgbV9wYWludGVyLT5zdG9wKCk7
CisgICAgICAgIG1fcmVhZHkgPSBmYWxzZTsKKworICAgICAgICBRQWJzdHJhY3RWaWRlb1N1cmZh
Y2U6OnN0b3AoKTsKKyAgICB9Cit9CisKK2Jvb2wgUVBhaW50ZXJWaWRlb1N1cmZhY2U6OnByZXNl
bnQoY29uc3QgUVZpZGVvRnJhbWUgJmZyYW1lKQoreworICAgIGlmICghbV9yZWFkeSkgeworICAg
ICAgICBpZiAoIWlzQWN0aXZlKCkpCisgICAgICAgICAgICBzZXRFcnJvcihTdG9wcGVkRXJyb3Ip
OworICAgIH0gZWxzZSBpZiAoZnJhbWUuaXNWYWxpZCgpIAorICAgICAgICAgICAgJiYgKGZyYW1l
LnBpeGVsRm9ybWF0KCkgIT0gbV9waXhlbEZvcm1hdCB8fCBmcmFtZS5zaXplKCkgIT0gbV9mcmFt
ZVNpemUpKSB7CisgICAgICAgIHNldEVycm9yKEluY29ycmVjdEZvcm1hdEVycm9yKTsKKworICAg
ICAgICBzdG9wKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUUFic3RyYWN0VmlkZW9TdXJmYWNl
OjpFcnJvciBlcnJvciA9IG1fcGFpbnRlci0+c2V0Q3VycmVudEZyYW1lKGZyYW1lKTsKKworICAg
ICAgICBpZiAoZXJyb3IgIT0gUUFic3RyYWN0VmlkZW9TdXJmYWNlOjpOb0Vycm9yKSB7CisgICAg
ICAgICAgICBzZXRFcnJvcihlcnJvcik7CisKKyAgICAgICAgICAgIHN0b3AoKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIG1fcmVhZHkgPSBmYWxzZTsKKworICAgICAgICAgICAgZW1p
dCBmcmFtZUNoYW5nZWQoKTsKKworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbnQgUVBhaW50ZXJWaWRlb1N1cmZhY2U6
OmJyaWdodG5lc3MoKSBjb25zdAoreworICAgIHJldHVybiBtX2JyaWdodG5lc3M7Cit9CisKK3Zv
aWQgUVBhaW50ZXJWaWRlb1N1cmZhY2U6OnNldEJyaWdodG5lc3MoaW50IGJyaWdodG5lc3MpCit7
CisgICAgbV9icmlnaHRuZXNzID0gYnJpZ2h0bmVzczsKKworICAgIG1fY29sb3JzRGlydHkgPSB0
cnVlOworfQorCitpbnQgUVBhaW50ZXJWaWRlb1N1cmZhY2U6OmNvbnRyYXN0KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9jb250cmFzdDsKK30KKwordm9pZCBRUGFpbnRlclZpZGVvU3VyZmFjZTo6
c2V0Q29udHJhc3QoaW50IGNvbnRyYXN0KQoreworICAgIG1fY29udHJhc3QgPSBjb250cmFzdDsK
KworICAgIG1fY29sb3JzRGlydHkgPSB0cnVlOworfQorCitpbnQgUVBhaW50ZXJWaWRlb1N1cmZh
Y2U6Omh1ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faHVlOworfQorCit2b2lkIFFQYWludGVy
VmlkZW9TdXJmYWNlOjpzZXRIdWUoaW50IGh1ZSkKK3sKKyAgICBtX2h1ZSA9IGh1ZTsKKworICAg
IG1fY29sb3JzRGlydHkgPSB0cnVlOworfQorCitpbnQgUVBhaW50ZXJWaWRlb1N1cmZhY2U6OnNh
dHVyYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX3NhdHVyYXRpb247Cit9CisKK3ZvaWQg
UVBhaW50ZXJWaWRlb1N1cmZhY2U6OnNldFNhdHVyYXRpb24oaW50IHNhdHVyYXRpb24pCit7Cisg
ICAgbV9zYXR1cmF0aW9uID0gc2F0dXJhdGlvbjsKKworICAgIG1fY29sb3JzRGlydHkgPSB0cnVl
OworfQorCitib29sIFFQYWludGVyVmlkZW9TdXJmYWNlOjppc1JlYWR5KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9yZWFkeTsKK30KKwordm9pZCBRUGFpbnRlclZpZGVvU3VyZmFjZTo6c2V0UmVh
ZHkoYm9vbCByZWFkeSkKK3sKKyAgICBtX3JlYWR5ID0gcmVhZHk7Cit9CisKK3ZvaWQgUVBhaW50
ZXJWaWRlb1N1cmZhY2U6OnBhaW50KFFQYWludGVyICpwYWludGVyLCBjb25zdCBRUmVjdEYgJnRh
cmdldCwgY29uc3QgUVJlY3RGICZzb3VyY2UpCit7CisgICAgaWYgKCFpc0FjdGl2ZSgpKQorICAg
ICAgICBwYWludGVyLT5maWxsUmVjdCh0YXJnZXQsIFFCcnVzaChRdDo6YmxhY2spKTsKKyAgICBl
bHNlIHsKKyAgICAgICAgaWYgKG1fY29sb3JzRGlydHkpIHsKKyAgICAgICAgICAgIG1fcGFpbnRl
ci0+dXBkYXRlQ29sb3JzKG1fYnJpZ2h0bmVzcywgbV9jb250cmFzdCwgbV9odWUsIG1fc2F0dXJh
dGlvbik7CisgICAgICAgICAgICBtX2NvbG9yc0RpcnR5ID0gZmFsc2U7CisgICAgICAgIH0KKwor
ICAgICAgICBjb25zdCBRUmVjdEYgc291cmNlUmVjdCgKKyAgICAgICAgICAgICAgICBtX3NvdXJj
ZVJlY3QueCgpICsgbV9zb3VyY2VSZWN0LndpZHRoKCkgKiBzb3VyY2UueCgpLAorICAgICAgICAg
ICAgICAgIG1fc291cmNlUmVjdC55KCkgKyBtX3NvdXJjZVJlY3QuaGVpZ2h0KCkgKiBzb3VyY2Uu
eSgpLAorICAgICAgICAgICAgICAgIG1fc291cmNlUmVjdC53aWR0aCgpICogc291cmNlLndpZHRo
KCksCisgICAgICAgICAgICAgICAgbV9zb3VyY2VSZWN0LmhlaWdodCgpICogc291cmNlLmhlaWdo
dCgpKTsKKworICAgICAgICBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6OkVycm9yIGVycm9yID0gbV9w
YWludGVyLT5wYWludCh0YXJnZXQsIHBhaW50ZXIsIHNvdXJjZVJlY3QpOworCisgICAgICAgIGlm
IChlcnJvciAhPSBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6Ok5vRXJyb3IpIHsKKyAgICAgICAgICAg
IHNldEVycm9yKGVycm9yKTsKKworICAgICAgICAgICAgc3RvcCgpOworICAgICAgICB9CisgICAg
fQorfQorCisjaWYgIWRlZmluZWQoUVRfTk9fT1BFTkdMKSAmJiAhZGVmaW5lZChRVF9PUEVOR0xf
RVNfMV9DTCkgJiYgIWRlZmluZWQoUVRfT1BFTkdMX0VTXzEpCisKK2NvbnN0IFFHTENvbnRleHQg
KlFQYWludGVyVmlkZW9TdXJmYWNlOjpnbENvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBt
X2dsQ29udGV4dDsKK30KKwordm9pZCBRUGFpbnRlclZpZGVvU3VyZmFjZTo6c2V0R0xDb250ZXh0
KFFHTENvbnRleHQgKmNvbnRleHQpCit7CisgICAgaWYgKG1fZ2xDb250ZXh0ID09IGNvbnRleHQp
CisgICAgICAgIHJldHVybjsKKworICAgIG1fZ2xDb250ZXh0ID0gY29udGV4dDsKKworICAgIG1f
c2hhZGVyVHlwZXMgPSBOb1NoYWRlcnM7CisKKyAgICBpZiAobV9nbENvbnRleHQpIHsKKyAgICAg
ICAgbV9nbENvbnRleHQtPm1ha2VDdXJyZW50KCk7CisKKyAgICAgICAgY29uc3QgUUJ5dGVBcnJh
eSBleHRlbnNpb25zKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhciAqPihnbEdldFN0cmluZyhH
TF9FWFRFTlNJT05TKSkpOworI2lmbmRlZiBRVF9PUEVOR0xfRVMKKworICAgICAgICBpZiAoZXh0
ZW5zaW9ucy5jb250YWlucygiQVJCX2ZyYWdtZW50X3Byb2dyYW0iKSkKKyAgICAgICAgICAgIG1f
c2hhZGVyVHlwZXMgfD0gRnJhZ21lbnRQcm9ncmFtU2hhZGVyOworI2VuZGlmCisKKyAgICAgICAg
aWYgKFFHTFNoYWRlclByb2dyYW06Omhhc09wZW5HTFNoYWRlclByb2dyYW1zKG1fZ2xDb250ZXh0
KQorICAgICAgICAgICAgICAgICYmIGV4dGVuc2lvbnMuY29udGFpbnMoIkFSQl9zaGFkZXJfb2Jq
ZWN0cyIpKQorICAgICAgICAgICAgbV9zaGFkZXJUeXBlcyB8PSBHbHNsU2hhZGVyOworICAgIH0K
KworICAgIFNoYWRlclR5cGUgdHlwZSA9IChtX3NoYWRlclR5cGUgJiBtX3NoYWRlclR5cGVzKQor
ICAgICAgICAgICAgPyBtX3NoYWRlclR5cGUKKyAgICAgICAgICAgIDogTm9TaGFkZXJzOworCisg
ICAgaWYgKHR5cGUgIT0gbV9zaGFkZXJUeXBlIHx8IHR5cGUgIT0gTm9TaGFkZXJzKSB7CisgICAg
ICAgIG1fc2hhZGVyVHlwZSA9IHR5cGU7CisKKyAgICAgICAgaWYgKGlzQWN0aXZlKCkpIHsKKyAg
ICAgICAgICAgIG1fcGFpbnRlci0+c3RvcCgpOworICAgICAgICAgICAgZGVsZXRlIG1fcGFpbnRl
cjsKKyAgICAgICAgICAgIG1fcGFpbnRlciA9IDA7CisgICAgICAgICAgICBtX3JlYWR5ID0gZmFs
c2U7CisKKyAgICAgICAgICAgIHNldEVycm9yKFJlc291cmNlRXJyb3IpOworICAgICAgICAgICAg
UUFic3RyYWN0VmlkZW9TdXJmYWNlOjpzdG9wKCk7CisgICAgICAgIH0KKyAgICAgICAgZW1pdCBz
dXBwb3J0ZWRGb3JtYXRzQ2hhbmdlZCgpOworICAgIH0KK30KKworUVBhaW50ZXJWaWRlb1N1cmZh
Y2U6OlNoYWRlclR5cGVzIFFQYWludGVyVmlkZW9TdXJmYWNlOjpzdXBwb3J0ZWRTaGFkZXJUeXBl
cygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2hhZGVyVHlwZXM7Cit9CisKK1FQYWludGVyVmlk
ZW9TdXJmYWNlOjpTaGFkZXJUeXBlIFFQYWludGVyVmlkZW9TdXJmYWNlOjpzaGFkZXJUeXBlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9zaGFkZXJUeXBlOworfQorCit2b2lkIFFQYWludGVyVmlk
ZW9TdXJmYWNlOjpzZXRTaGFkZXJUeXBlKFNoYWRlclR5cGUgdHlwZSkKK3sKKyAgICBpZiAoISh0
eXBlICYgbV9zaGFkZXJUeXBlcykpCisgICAgICAgIHR5cGUgPSBOb1NoYWRlcnM7CisKKyAgICBp
ZiAodHlwZSAhPSBtX3NoYWRlclR5cGUpIHsKKyAgICAgICAgbV9zaGFkZXJUeXBlID0gdHlwZTsK
KworICAgICAgICBpZiAoaXNBY3RpdmUoKSkgeworICAgICAgICAgICAgbV9wYWludGVyLT5zdG9w
KCk7CisgICAgICAgICAgICBkZWxldGUgbV9wYWludGVyOworICAgICAgICAgICAgbV9wYWludGVy
ID0gMDsKKyAgICAgICAgICAgIG1fcmVhZHkgPSBmYWxzZTsKKworICAgICAgICAgICAgc2V0RXJy
b3IoUmVzb3VyY2VFcnJvcik7CisgICAgICAgICAgICBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6OnN0
b3AoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRlbGV0ZSBtX3BhaW50ZXI7Cisg
ICAgICAgICAgICBtX3BhaW50ZXIgPSAwOworICAgICAgICB9CisgICAgICAgIGVtaXQgc3VwcG9y
dGVkRm9ybWF0c0NoYW5nZWQoKTsKKyAgICB9Cit9CisKKyNlbmRpZgorCit2b2lkIFFQYWludGVy
VmlkZW9TdXJmYWNlOjpjcmVhdGVQYWludGVyKCkKK3sKKyAgICBRX0FTU0VSVCghbV9wYWludGVy
KTsKKworI2lmICFkZWZpbmVkKFFUX05PX09QRU5HTCkgJiYgIWRlZmluZWQoUVRfT1BFTkdMX0VT
XzFfQ0wpICYmICFkZWZpbmVkKFFUX09QRU5HTF9FU18xKQorICAgIHN3aXRjaCAobV9zaGFkZXJU
eXBlKSB7CisjaWZuZGVmIFFUX09QRU5HTF9FUworICAgIGNhc2UgRnJhZ21lbnRQcm9ncmFtU2hh
ZGVyOgorICAgICAgICBRX0FTU0VSVChtX2dsQ29udGV4dCk7CisgICAgICAgIG1fZ2xDb250ZXh0
LT5tYWtlQ3VycmVudCgpOworICAgICAgICBtX3BhaW50ZXIgPSBuZXcgUVZpZGVvU3VyZmFjZUFy
YkZwUGFpbnRlcihtX2dsQ29udGV4dCk7CisgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgY2Fz
ZSBHbHNsU2hhZGVyOgorICAgICAgICBRX0FTU0VSVChtX2dsQ29udGV4dCk7CisgICAgICAgIG1f
Z2xDb250ZXh0LT5tYWtlQ3VycmVudCgpOworICAgICAgICBtX3BhaW50ZXIgPSBuZXcgUVZpZGVv
U3VyZmFjZUdsc2xQYWludGVyKG1fZ2xDb250ZXh0KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgbV9wYWludGVyID0gbmV3IFFWaWRlb1N1cmZhY2VSYXN0ZXJQYWludGVy
OworICAgICAgICBicmVhazsKKyAgICB9CisjZWxzZQorICAgIG1fcGFpbnRlciA9IG5ldyBRVmlk
ZW9TdXJmYWNlUmFzdGVyUGFpbnRlcjsKKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNpbmNsdWRlICJtb2NfUVBhaW50ZXJWaWRlb1N1cmZhY2UuY3BwIgorCisKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvUVBhaW50ZXJWaWRlb1N1cmZhY2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1FQYWludGVyVmlkZW9TdXJm
YWNlLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1FQYWlu
dGVyVmlkZW9TdXJmYWNlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTE5IEBACisvKgorICAg
IENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAg
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAg
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisqLworCisjaWZuZGVmIFFQYWludGVyVmlkZW9TdXJmYWNlX2gKKyNkZWZpbmUgUVBh
aW50ZXJWaWRlb1N1cmZhY2VfaAorCisjaW5jbHVkZSA8UXRDb3JlL3FzaXplLmg+CisjaW5jbHVk
ZSA8UXRHdWkvcWltYWdlLmg+CisjaW5jbHVkZSA8UXRHdWkvcW1hdHJpeDR4NC5oPgorI2luY2x1
ZGUgPFF0R3VpL3FwYWludGVuZ2luZS5oPgorI2luY2x1ZGUgPFF0TXVsdGltZWRpYS9xYWJzdHJh
Y3R2aWRlb3N1cmZhY2UuaD4KKyNpbmNsdWRlIDxRdE11bHRpbWVkaWEvcXZpZGVvZnJhbWUuaD4K
KworUVRfQkVHSU5fTkFNRVNQQUNFCitjbGFzcyBRR0xDb250ZXh0OworUVRfRU5EX05BTUVTUEFD
RQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFFWaWRlb1N1cmZhY2VQYWludGVyOwor
Y2xhc3MgUV9BVVRPVEVTVF9FWFBPUlQgUVBhaW50ZXJWaWRlb1N1cmZhY2UgOiBwdWJsaWMgUUFi
c3RyYWN0VmlkZW9TdXJmYWNlIHsKKyAgICBRX09CSkVDVAorcHVibGljOgorICAgIGV4cGxpY2l0
IFFQYWludGVyVmlkZW9TdXJmYWNlKFFPYmplY3QgKnBhcmVudCA9IDApOworICAgIH5RUGFpbnRl
clZpZGVvU3VyZmFjZSgpOworCisgICAgUUxpc3Q8UVZpZGVvRnJhbWU6OlBpeGVsRm9ybWF0PiBz
dXBwb3J0ZWRQaXhlbEZvcm1hdHMoCisgICAgICAgICAgICBRQWJzdHJhY3RWaWRlb0J1ZmZlcjo6
SGFuZGxlVHlwZSBoYW5kbGVUeXBlID0gUUFic3RyYWN0VmlkZW9CdWZmZXI6Ok5vSGFuZGxlKSBj
b25zdDsKKworICAgIGJvb2wgaXNGb3JtYXRTdXBwb3J0ZWQoCisgICAgICAgICAgICBjb25zdCBR
VmlkZW9TdXJmYWNlRm9ybWF0ICZmb3JtYXQsIFFWaWRlb1N1cmZhY2VGb3JtYXQgKnNpbWlsYXIg
PSAwKSBjb25zdDsKKworICAgIGJvb2wgc3RhcnQoY29uc3QgUVZpZGVvU3VyZmFjZUZvcm1hdCAm
Zm9ybWF0KTsKKyAgICB2b2lkIHN0b3AoKTsKKworICAgIGJvb2wgcHJlc2VudChjb25zdCBRVmlk
ZW9GcmFtZSAmZnJhbWUpOworCisgICAgaW50IGJyaWdodG5lc3MoKSBjb25zdDsKKyAgICB2b2lk
IHNldEJyaWdodG5lc3MoaW50IGJyaWdodG5lc3MpOworCisgICAgaW50IGNvbnRyYXN0KCkgY29u
c3Q7CisgICAgdm9pZCBzZXRDb250cmFzdChpbnQgY29udHJhc3QpOworCisgICAgaW50IGh1ZSgp
IGNvbnN0OworICAgIHZvaWQgc2V0SHVlKGludCBodWUpOworCisgICAgaW50IHNhdHVyYXRpb24o
KSBjb25zdDsKKyAgICB2b2lkIHNldFNhdHVyYXRpb24oaW50IHNhdHVyYXRpb24pOworCisgICAg
Ym9vbCBpc1JlYWR5KCkgY29uc3Q7CisgICAgdm9pZCBzZXRSZWFkeShib29sIHJlYWR5KTsKKwor
ICAgIHZvaWQgcGFpbnQoUVBhaW50ZXIgKnBhaW50ZXIsIGNvbnN0IFFSZWN0RiAmdGFyZ2V0LCBj
b25zdCBRUmVjdEYgJnNvdXJjZSA9IFFSZWN0RigwLCAwLCAxLCAxKSk7CisKKyNpZiAhZGVmaW5l
ZChRVF9OT19PUEVOR0wpICYmICFkZWZpbmVkKFFUX09QRU5HTF9FU18xX0NMKSAmJiAhZGVmaW5l
ZChRVF9PUEVOR0xfRVNfMSkKKyAgICBjb25zdCBRR0xDb250ZXh0ICpnbENvbnRleHQoKSBjb25z
dDsKKyAgICB2b2lkIHNldEdMQ29udGV4dChRR0xDb250ZXh0ICpjb250ZXh0KTsKKworICAgIGVu
dW0gU2hhZGVyVHlwZSB7CisgICAgICAgIE5vU2hhZGVycyA9IDB4MDAsCisgICAgICAgIEZyYWdt
ZW50UHJvZ3JhbVNoYWRlciA9IDB4MDEsCisgICAgICAgIEdsc2xTaGFkZXIgPSAweDAyCisgICAg
fTsKKworICAgIFFfREVDTEFSRV9GTEFHUyhTaGFkZXJUeXBlcywgU2hhZGVyVHlwZSkKKworICAg
IFNoYWRlclR5cGVzIHN1cHBvcnRlZFNoYWRlclR5cGVzKCkgY29uc3Q7CisKKyAgICBTaGFkZXJU
eXBlIHNoYWRlclR5cGUoKSBjb25zdDsKKyAgICB2b2lkIHNldFNoYWRlclR5cGUoU2hhZGVyVHlw
ZSB0eXBlKTsKKyNlbmRpZgorCitRX1NJR05BTFM6CisgICAgdm9pZCBmcmFtZUNoYW5nZWQoKTsK
KworcHJpdmF0ZToKKyAgICB2b2lkIGNyZWF0ZVBhaW50ZXIoKTsKKworICAgIFFWaWRlb1N1cmZh
Y2VQYWludGVyICptX3BhaW50ZXI7CisjaWYgIWRlZmluZWQoUVRfTk9fT1BFTkdMKSAmJiAhZGVm
aW5lZChRVF9PUEVOR0xfRVNfMV9DTCkgJiYgIWRlZmluZWQoUVRfT1BFTkdMX0VTXzEpCisgICAg
UUdMQ29udGV4dCAqbV9nbENvbnRleHQ7CisgICAgU2hhZGVyVHlwZXMgbV9zaGFkZXJUeXBlczsK
KyAgICBTaGFkZXJUeXBlIG1fc2hhZGVyVHlwZTsKKyNlbmRpZgorICAgIGludCBtX2JyaWdodG5l
c3M7CisgICAgaW50IG1fY29udHJhc3Q7CisgICAgaW50IG1faHVlOworICAgIGludCBtX3NhdHVy
YXRpb247CisKKyAgICBRVmlkZW9GcmFtZTo6UGl4ZWxGb3JtYXQgbV9waXhlbEZvcm1hdDsKKyAg
ICBRU2l6ZSBtX2ZyYW1lU2l6ZTsKKyAgICBRUmVjdCBtX3NvdXJjZVJlY3Q7CisgICAgYm9vbCBt
X2NvbG9yc0RpcnR5OworICAgIGJvb2wgbV9yZWFkeTsKK307CisKKyNpZiAhZGVmaW5lZChRVF9O
T19PUEVOR0wpICYmICFkZWZpbmVkKFFUX09QRU5HTF9FU18xX0NMKSAmJiAhZGVmaW5lZChRVF9P
UEVOR0xfRVNfMSkKK1FfREVDTEFSRV9PUEVSQVRPUlNfRk9SX0ZMQUdTKFFQYWludGVyVmlkZW9T
dXJmYWNlOjpTaGFkZXJUeXBlcykKKyNlbmRpZgorCit9CisKKyNlbmRpZgpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuY3BwCShyZXZpc2lvbiA1NDU4NCkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5
LDcgQEAKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udFNlbGVjdG9yLmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgog
I2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgpAQCAtNDcsNiArNDgsNyBAQAogI2luY2x1ZGUgIlJl
bmRlckJveC5oIgogI2luY2x1ZGUgIlJlbmRlclNsaWRlci5oIgogI2luY2x1ZGUgIlJlbmRlclRo
ZW1lLmgiCisjaW5jbHVkZSAiVGltZVJhbmdlcy5oIgogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1l
UXQuaCIKICNpbmNsdWRlICJVc2VyQWdlbnRTdHlsZVNoZWV0cy5oIgogI2luY2x1ZGUgInF3ZWJw
YWdlLmgiCkBAIC04ODIsMTAgKzg4NCwxNiBAQCBIVE1MTWVkaWFFbGVtZW50KiBSZW5kZXJUaGVt
ZVF0OjpnZXRNZWRpCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxNZWRpYUVsZW1lbnQqPiht
ZWRpYU5vZGUpOwogfQogCitkb3VibGUgUmVuZGVyVGhlbWVRdDo6bWVkaWFDb250cm9sc0Jhc2Vs
aW5lT3BhY2l0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIDAuNDsKK30KKwogdm9pZCBSZW5kZXJU
aGVtZVF0OjpwYWludE1lZGlhQmFja2dyb3VuZChRUGFpbnRlciogcGFpbnRlciwgY29uc3QgSW50
UmVjdCYgcikgY29uc3QKIHsKICAgICBwYWludGVyLT5zZXRQZW4oUXQ6Ok5vUGVuKTsKLSAgICBz
dGF0aWMgUUNvbG9yIHRyYW5zcGFyZW50QmxhY2soMCwgMCwgMCwgMTAwKTsKKyAgICBzdGF0aWMg
Y29uc3QgUUNvbG9yIHNoYWRvdyA9IFFBcHBsaWNhdGlvbjo6cGFsZXR0ZSgpLmJydXNoKFFQYWxl
dHRlOjpBY3RpdmUsIFFQYWxldHRlOjpTaGFkb3cpLmNvbG9yKCk7CisgICAgc3RhdGljIFFDb2xv
ciB0cmFuc3BhcmVudEJsYWNrKHNoYWRvdy5yZWQoKSwgc2hhZG93LmdyZWVuKCksIHNoYWRvdy5i
bHVlKCksIG1lZGlhQ29udHJvbHNCYXNlbGluZU9wYWNpdHkoKSAqIDI1NSk7CiAgICAgcGFpbnRl
ci0+c2V0QnJ1c2godHJhbnNwYXJlbnRCbGFjayk7CiAgICAgcGFpbnRlci0+ZHJhd1JvdW5kZWRS
ZWN0KHIueCgpLCByLnkoKSwgci53aWR0aCgpLCByLmhlaWdodCgpLCA1LjAsIDUuMCk7CiB9CkBA
IC05MjEsMTQgKzkyOSwxMCBAQCBib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50TWVkaWFNdXRlQnV0
dG9uCiAgICAgY29uc3QgUVBvaW50RiBzcGVha2VyUG9seWdvbls2XSA9IHsgUVBvaW50RigyMCwg
MzApLCBRUG9pbnRGKDUwLCAzMCksIFFQb2ludEYoODAsIDApLAogICAgICAgICAgICAgUVBvaW50
Rig4MCwgMTAwKSwgUVBvaW50Rig1MCwgNzApLCBRUG9pbnRGKDIwLCA3MCl9OwogCi0gICAgcC5w
YWludGVyLT5zZXRCcnVzaChnZXRNZWRpYUNvbnRyb2xGb3JlZ3JvdW5kQ29sb3IobykpOworICAg
IHAucGFpbnRlci0+c2V0UGVuKG1lZGlhRWxlbWVudC0+bXV0ZWQoKSA/IFF0OjpkYXJrR3JheSA6
IFF0OjpsaWdodEdyYXkpOworICAgIHAucGFpbnRlci0+c2V0QnJ1c2gobWVkaWFFbGVtZW50LT5t
dXRlZCgpID8gUXQ6OmRhcmtSZWQgOiBnZXRNZWRpYUNvbnRyb2xGb3JlZ3JvdW5kQ29sb3Iobykp
OwogICAgIHAucGFpbnRlci0+ZHJhd1BvbHlnb24oc3BlYWtlclBvbHlnb24sIDYpOwogCi0gICAg
aWYgKG1lZGlhRWxlbWVudC0+bXV0ZWQoKSkgewotICAgICAgICBwLnBhaW50ZXItPnNldFBlbihR
dDo6cmVkKTsKLSAgICAgICAgcC5wYWludGVyLT5kcmF3TGluZSgwLCAxMDAsIDEwMCwgMCk7Ci0g
ICAgfQotCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC05NzEsNiArOTc1LDkyIEBAIGJvb2wg
UmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVNlZWtGb3J3YXIKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKK2Jvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYUN1cnJlbnRUaW1lKFJlbmRlck9iamVj
dCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UmVjdCYgcikKK3sKKyAgICBTdHlsZVBhaW50ZXIgcCh0aGlzLCBwYWludEluZm8pOworICAgIGlm
ICghcC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKG8tPnN0eWxl
KCkpIHsKKyAgICAgICAgLy8gU2V0IHRoZSB0ZXh0IGNvbG9yIGRlcGVuZGluZyBvbiBwbGF0Zm9y
bQorICAgICAgICBRUGFsZXR0ZSBwYWwgPSBRQXBwbGljYXRpb246OnBhbGV0dGUoKTsKKyAgICAg
ICAgby0+c3R5bGUoKS0+c2V0VGV4dEZpbGxDb2xvcihwYWwuYnJ1c2goUVBhbGV0dGU6OkFjdGl2
ZSwgUVBhbGV0dGU6OkhpZ2hsaWdodGVkVGV4dCkuY29sb3IoKSk7CisgICAgfQorCisgICAgcC5w
YWludGVyLT5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIHRydWUpOworICAg
IHBhaW50TWVkaWFCYWNrZ3JvdW5kKHAucGFpbnRlciwgcik7CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK1N0cmluZyBSZW5kZXJUaGVtZVF0Ojpmb3JtYXRNZWRpYUNvbnRyb2xzQ3VycmVudFRp
bWUoZmxvYXQgY3VycmVudFRpbWUsIGZsb2F0IGR1cmF0aW9uKSBjb25zdAoreworICAgIHJldHVy
biBmb3JtYXRNZWRpYUNvbnRyb2xzVGltZShjdXJyZW50VGltZSkgKyAiIC8gIiArIGZvcm1hdE1l
ZGlhQ29udHJvbHNUaW1lKGR1cmF0aW9uKTsKK30KKworU3RyaW5nIFJlbmRlclRoZW1lUXQ6OmZv
cm1hdE1lZGlhQ29udHJvbHNSZW1haW5pbmdUaW1lKGZsb2F0IGN1cnJlbnRUaW1lLCBmbG9hdCBk
dXJhdGlvbikgY29uc3QKK3sKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK2Jvb2wgUmVuZGVy
VGhlbWVRdDo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCAqbywgY29u
c3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8gJnBhaW50SW5mbywgY29uc3QgSW50UmVjdCAmcikK
K3sKKyAgICBTdHlsZVBhaW50ZXIgcCh0aGlzLCBwYWludEluZm8pOworICAgIGlmICghcC5pc1Zh
bGlkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcC5wYWludGVyLT5zZXRSZW5kZXJI
aW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIHRydWUpOworCisgICAgcGFpbnRNZWRpYUJhY2tn
cm91bmQocC5wYWludGVyLCByKTsKKworICAgIGlmICghby0+aXNTbGlkZXIoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgSW50UmVjdCBiID0gdG9SZW5kZXJCb3gobyktPmNvbnRlbnRC
b3hSZWN0KCk7CisKKyAgICAvLyBQb3NpdGlvbiB0aGUgb3V0ZXIgcmVjdGFuZ2xlCisgICAgaW50
IHRvcCA9IHIueSgpICsgYi55KCk7CisgICAgaW50IGxlZnQgPSByLngoKSArIGIueCgpOworICAg
IGludCB3aWR0aCA9IGIud2lkdGgoKTsKKyAgICBpbnQgaGVpZ2h0ID0gYi5oZWlnaHQoKTsKKwor
ICAgIHN0YXRpYyBjb25zdCBRQ29sb3IgaGlnaGxpZ2h0VGV4dCA9IFFBcHBsaWNhdGlvbjo6cGFs
ZXR0ZSgpLmJydXNoKFFQYWxldHRlOjpBY3RpdmUsIFFQYWxldHRlOjpIaWdobGlnaHRlZFRleHQp
LmNvbG9yKCk7CisgICAgc3RhdGljIGNvbnN0IFFDb2xvciBzY2FsZUNvbG9yKGhpZ2hsaWdodFRl
eHQucmVkKCksIGhpZ2hsaWdodFRleHQuZ3JlZW4oKSwgaGlnaGxpZ2h0VGV4dC5ibHVlKCksIG1l
ZGlhQ29udHJvbHNCYXNlbGluZU9wYWNpdHkoKSAqIDI1NSk7CisKKyAgICAvLyBEcmF3IHRoZSBv
dXRlciByZWN0YW5nbGUKKyAgICBwLnBhaW50ZXItPnNldFBlbihRdDo6bGlnaHRHcmF5KTsKKyAg
ICBwLnBhaW50ZXItPnNldEJydXNoKHNjYWxlQ29sb3IpOworICAgIHAucGFpbnRlci0+ZHJhd1Jl
Y3QobGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIGlmICghby0+bm9kZSgpIHx8ICFv
LT5ub2RlKCktPmhhc1RhZ05hbWUoaW5wdXRUYWcpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBIVE1MSW5wdXRFbGVtZW50KiBzbGlkZXIgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVt
ZW50Kj4oby0+bm9kZSgpKTsKKworICAgIC8vIFBvc2l0aW9uIHRoZSBpbm5lciByZWN0YW5nbGUK
KyAgICBoZWlnaHQgPSAoaGVpZ2h0IC0gMikgKiBzbGlkZXItPnZhbHVlQXNOdW1iZXIoKTsKKyAg
ICB3aWR0aCAtPSAyOworICAgIGxlZnQgKz0gMTsKKyAgICB0b3AgKz0gKGIuaGVpZ2h0KCkgLSBo
ZWlnaHQpIC0gMTsKKworICAgIC8vIERyYXcgdGhlIGlubmVyIHJlY3RhbmdsZQorICAgIHAucGFp
bnRlci0+c2V0UGVuKFF0OjpOb1Blbik7CisgICAgcC5wYWludGVyLT5zZXRCcnVzaChnZXRNZWRp
YUNvbnRyb2xGb3JlZ3JvdW5kQ29sb3IobykpOworICAgIHAucGFpbnRlci0+ZHJhd1JlY3QobGVm
dCwgdG9wLCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBS
ZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0ICpv
LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyAmcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0
ICZyKQoreworICAgIFN0eWxlUGFpbnRlciBwKHRoaXMsIHBhaW50SW5mbyk7CisgICAgaWYgKCFw
LmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBOb3RoaW5nIHRvIGRy
YXcgaGVyZSwgdGhpcyBpcyBhbGwgZG9uZSBpbiB0aGUgdHJhY2sKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKIGJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKFJlbmRlck9i
amVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
SW50UmVjdCYgcikKIHsKICAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBnZXRN
ZWRpYUVsZW1lbnRGcm9tUmVuZGVyT2JqZWN0KG8pOwpAQCAtOTg1LDE1ICsxMDc1LDMxIEBAIGJv
b2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVNsaWRlclRyYWMKIAogICAgIHBhaW50TWVkaWFC
YWNrZ3JvdW5kKHAucGFpbnRlciwgcik7CiAKKyAgICAjaWYgUVRfVkVSU0lPTiA+PSAweDA0MDcw
MAorICAgIGlmIChNZWRpYVBsYXllciogcGxheWVyID0gbWVkaWFFbGVtZW50LT5wbGF5ZXIoKSkg
eworICAgICAgICAvLyBHZXQgdGhlIGJ1ZmZlcmVkIHBhcnRzIG9mIHRoZSBtZWRpYQorICAgICAg
ICBQYXNzUmVmUHRyPFRpbWVSYW5nZXM+IGJ1ZmZlcmVkID0gcGxheWVyLT5idWZmZXJlZCgpOwor
ICAgICAgICBpZiAoYnVmZmVyZWQtPmxlbmd0aCgpID4gMCAmJiBwbGF5ZXItPmR1cmF0aW9uKCkg
PCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSkgeworICAgICAgICAgICAg
Ly8gU2V0IHRoZSB0cmFuc2Zvcm0gYW5kIGJydXNoCisgICAgICAgICAgICBXb3JsZE1hdHJpeFRy
YW5zZm9ybWVyIHRyYW5zZm9ybWVyKHAucGFpbnRlciwgbywgcik7CisgICAgICAgICAgICBwLnBh
aW50ZXItPnNldEJydXNoKGdldE1lZGlhQ29udHJvbEZvcmVncm91bmRDb2xvcigpKTsKKworICAg
ICAgICAgICAgLy8gUGFpbnQgZWFjaCBidWZmZXJlZCBzZWN0aW9uCisgICAgICAgICAgICBFeGNl
cHRpb25Db2RlIGV4OworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBidWZmZXJlZC0+
bGVuZ3RoKCk7IGkrKykgeworICAgICAgICAgICAgICAgIGZsb2F0IHN0YXJ0WCA9IChidWZmZXJl
ZC0+c3RhcnQoaSwgZXgpIC8gcGxheWVyLT5kdXJhdGlvbigpKSAqIDEwMDsKKyAgICAgICAgICAg
ICAgICBmbG9hdCB3aWR0aCA9ICgoYnVmZmVyZWQtPmVuZChpLCBleCkgLyBwbGF5ZXItPmR1cmF0
aW9uKCkpICogMTAwKSAtIHN0YXJ0WDsKKyAgICAgICAgICAgICAgICBwLnBhaW50ZXItPmRyYXdS
ZWN0KHN0YXJ0WCwgMzcsIHdpZHRoLCAyNik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgI2VuZGlmCisKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgUmVuZGVyVGhl
bWVRdDo6cGFpbnRNZWRpYVNsaWRlclRodW1iKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVy
T2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKLSAgICBI
VE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBnZXRNZWRpYUVsZW1lbnRGcm9tUmVuZGVy
T2JqZWN0KG8tPnBhcmVudCgpKTsKLSAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCiAgICAgU3R5bGVQYWludGVyIHAodGhpcywgcGFpbnRJbmZvKTsKICAgICBp
ZiAoIXAuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEwMTksNiArMTEyNSwx
MyBAQCB2b2lkIFJlbmRlclRoZW1lUXQ6OmFkanVzdFNsaWRlclRodW1iU2l6CiAgICAgICAgIGlu
dCBwYXJlbnRIZWlnaHQgPSBwYXJlbnRTdHlsZS0+aGVpZ2h0KCkudmFsdWUoKTsKICAgICAgICAg
by0+c3R5bGUoKS0+c2V0V2lkdGgoTGVuZ3RoKHBhcmVudEhlaWdodCAvIDMsIEZpeGVkKSk7CiAg
ICAgICAgIG8tPnN0eWxlKCktPnNldEhlaWdodChMZW5ndGgocGFyZW50SGVpZ2h0LCBGaXhlZCkp
OworICAgIH0gZWxzZSBpZiAocGFydCA9PSBNZWRpYVZvbHVtZVNsaWRlclRodW1iUGFydCkgewor
ICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBvLT5wYXJlbnQoKS0+c3R5bGUoKTsK
KyAgICAgICAgUV9BU1NFUlQocGFyZW50U3R5bGUpOworCisgICAgICAgIGludCBwYXJlbnRXaWR0
aCA9IHBhcmVudFN0eWxlLT53aWR0aCgpLnZhbHVlKCk7CisgICAgICAgIG8tPnN0eWxlKCktPnNl
dEhlaWdodChMZW5ndGgocGFyZW50V2lkdGggLyAzLCBGaXhlZCkpOworICAgICAgICBvLT5zdHls
ZSgpLT5zZXRXaWR0aChMZW5ndGgocGFyZW50V2lkdGgsIEZpeGVkKSk7CiAgICAgfSBlbHNlIGlm
IChwYXJ0ID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgfHwgcGFydCA9PSBTbGlkZXJUaHVt
YlZlcnRpY2FsUGFydCkgewogICAgICAgICBRU3R5bGVPcHRpb25TbGlkZXIgb3B0aW9uOwogICAg
ICAgICBpZiAocGFydCA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vcXQvUmVuZGVyVGhlbWVRdC5oCShyZXZpc2lvbiA1NDU4NCkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vcXQvUmVuZGVyVGhlbWVRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsMTAgKzEyNywxNSBA
QCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFTZWVrRm9yd2FyZEJ1dHRv
bihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNsaWRlclRyYWNrKFJlbmRlck9i
amVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwog
ICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29u
c3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KKyAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRNZWRpYUN1cnJlbnRUaW1lKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBw
YWludE1lZGlhVm9sdW1lU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50
TWVkaWFWb2x1bWVTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBmb3JtYXRN
ZWRpYUNvbnRyb2xzQ3VycmVudFRpbWUoZmxvYXQgY3VycmVudFRpbWUsIGZsb2F0IGR1cmF0aW9u
KSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyBmb3JtYXRNZWRpYUNvbnRyb2xzUmVtYWluaW5n
VGltZShmbG9hdCBjdXJyZW50VGltZSwgZmxvYXQgZHVyYXRpb24pIGNvbnN0OwogcHJpdmF0ZToK
ICAgICBIVE1MTWVkaWFFbGVtZW50KiBnZXRNZWRpYUVsZW1lbnRGcm9tUmVuZGVyT2JqZWN0KFJl
bmRlck9iamVjdCogbykgY29uc3Q7CiAgICAgdm9pZCBwYWludE1lZGlhQmFja2dyb3VuZChRUGFp
bnRlciogcGFpbnRlciwgY29uc3QgSW50UmVjdCYgcikgY29uc3Q7CisgICAgZG91YmxlIG1lZGlh
Q29udHJvbHNCYXNlbGluZU9wYWNpdHkoKSBjb25zdDsKICAgICBRQ29sb3IgZ2V0TWVkaWFDb250
cm9sRm9yZWdyb3VuZENvbG9yKFJlbmRlck9iamVjdCogbyA9IDApIGNvbnN0OwogI2VuZGlmCiAg
ICAgdm9pZCBjb21wdXRlU2l6ZUJhc2VkT25TdHlsZShSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUp
IGNvbnN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48548</attachid>
            <date>2010-02-10 22:21:21 -0800</date>
            <delta_ts>2010-02-18 23:40:46 -0800</delta_ts>
            <desc>Updated Patch - Addressed issues from review</desc>
            <filename>webkit-qtmultimedia-integration.txt</filename>
            <type>text/plain</type>
            <size>94317</size>
            <attacher name="Nick Young">nicholas.young</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDY0MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTI1IEBACisyMDEwLTAyLTEwICBOaWNob2xhcyBZb3VuZyAgPG5pY2hvbGFzLnlv
dW5nQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBbUXRdIFN3aXRjaGluZyBmcm9tIFBob25vbiB0byBRdE11bHRpbWVkaWEgQmFja2Vu
ZCBmb3IgUXQgNC43CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zNDYzMQorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhpcyBwYXRjaCBvbmx5IGFmZmVj
dHMgbXVsdGltZWRpYSBiYWNrZW5kLgorCisgICAgICAgICogV2ViQ29yZS5wcm86IEJ1aWxkIGRl
cGVuZHMgb24gUXQgVmVyc2lvbi4KKyAgICAgICAgKiBjc3MvbWVkaWFDb250cm9sc1F0LmNzczog
VXBkYXRlZCBtZWRpYSBjb250cm9scy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRp
YVBsYXllci5jcHA6IERpZmZlcmVudCBiYWNrZW5kIGluY2x1ZGVkIGRlcGVuZGluZyBvbiBRdCB2
ZXJzaW9uLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0
ZVF0LmNwcDogQWRkZWQgbmV3IFF0TXVsdGltZWRpYSBCYWNrZW5kLgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlRGVmYXVsdDo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVEZWZhdWx0OjpzdXBwb3J0c0Z1bGxzY3JlZW4pOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpyZWdpc3Rlck1lZGlhRW5naW5lKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6Z2V0U3VwcG9ydGVkVHlwZXMpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpzdXBwb3J0c1R5cGUpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpNZWRpYVBsYXllclByaXZhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjp+TWVkaWFQbGF5ZXJQcml2YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6aGFzVmlkZW8pOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpoYXNBdWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGU6OmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlOjpjYW5jZWxMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZTo6cGxheSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnBhdXNlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6cGF1c2VkKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6c2Vlayk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGU6OnNlZWtpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlOjpkdXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGU6OmN1cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6
YnVmZmVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjptYXhUaW1l
U2Vla2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpieXRlc0xv
YWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnRvdGFsQnl0ZXMp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRSYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0Vm9sdW1lKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0TXV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlOjpuZXR3b3JrU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlOjpyZWFkeVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZTo6c2V0VmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGU6Om1lZGlhU3RhdHVzQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGU6OmhhbmRsZUVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZTo6c3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZTo6cG9zaXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZTo6ZHVyYXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZTo6dXBkYXRlU3RhdGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZURl
ZmF1bHQ6Ok1lZGlhUGxheWVyUHJpdmF0ZURlZmF1bHQpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlRGVmYXVsdDo6fk1lZGlhUGxheWVyUHJpdmF0ZURlZmF1bHQpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlRGVmYXVsdDo6bmF0dXJhbFNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlRGVmYXVsdDo6cGFpbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlRGVmYXVsdDo6cmVwYWludCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuaDogQWRkZWQg
bmV3IFF0TXVsdGltZWRpYSBCYWNrZW5kLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlOjppc0F2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGU6OnJlcGFpbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L1FQYWludGVyVmlk
ZW9TdXJmYWNlLmNwcDogQWRkZWQgUVBhaW50ZXJWaWRlb1N1cmZhY2UgdG8gV2ViQ29yZSBhcyBh
IHRlbXBvcmFyeSBzb2x1dGlvbiB0byB0aGUgdXNlIG9mIGEgcHJpdmF0ZSBRdCBoZWFkZXIuCisg
ICAgICAgIChXZWJDb3JlOjpRVmlkZW9TdXJmYWNlUGFpbnRlcjo6flFWaWRlb1N1cmZhY2VQYWlu
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlFWaWRlb1N1cmZhY2VSYXN0ZXJQYWludGVyOjpRVmlk
ZW9TdXJmYWNlUmFzdGVyUGFpbnRlcik6CisgICAgICAgIChXZWJDb3JlOjpRVmlkZW9TdXJmYWNl
UmFzdGVyUGFpbnRlcjo6c3VwcG9ydGVkUGl4ZWxGb3JtYXRzKToKKyAgICAgICAgKFdlYkNvcmU6
OlFWaWRlb1N1cmZhY2VSYXN0ZXJQYWludGVyOjppc0Zvcm1hdFN1cHBvcnRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpRVmlkZW9TdXJmYWNlUmFzdGVyUGFpbnRlcjo6c3RhcnQpOgorICAgICAgICAo
V2ViQ29yZTo6UVZpZGVvU3VyZmFjZVJhc3RlclBhaW50ZXI6OnN0b3ApOgorICAgICAgICAoV2Vi
Q29yZTo6UVZpZGVvU3VyZmFjZVJhc3RlclBhaW50ZXI6OnNldEN1cnJlbnRGcmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpRVmlkZW9TdXJmYWNlUmFzdGVyUGFpbnRlcjo6cGFpbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6UVZpZGVvU3VyZmFjZVJhc3RlclBhaW50ZXI6OnVwZGF0ZUNvbG9ycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpRVmlkZW9TdXJmYWNlR0xQYWludGVyOjpRVmlkZW9TdXJmYWNlR0xQ
YWludGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlFWaWRlb1N1cmZhY2VHTFBhaW50ZXI6On5RVmlk
ZW9TdXJmYWNlR0xQYWludGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlFWaWRlb1N1cmZhY2VHTFBh
aW50ZXI6OnN1cHBvcnRlZFBpeGVsRm9ybWF0cyk6CisgICAgICAgIChXZWJDb3JlOjpRVmlkZW9T
dXJmYWNlR0xQYWludGVyOjppc0Zvcm1hdFN1cHBvcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpR
VmlkZW9TdXJmYWNlR0xQYWludGVyOjpzZXRDdXJyZW50RnJhbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6UVZpZGVvU3VyZmFjZUdMUGFpbnRlcjo6dXBkYXRlQ29sb3JzKToKKyAgICAgICAgKFdlYkNv
cmU6OlFWaWRlb1N1cmZhY2VHTFBhaW50ZXI6OmluaXRSZ2JUZXh0dXJlSW5mbyk6CisgICAgICAg
IChXZWJDb3JlOjpRVmlkZW9TdXJmYWNlR0xQYWludGVyOjppbml0WXV2NDIwUFRleHR1cmVJbmZv
KToKKyAgICAgICAgKFdlYkNvcmU6OlFWaWRlb1N1cmZhY2VHTFBhaW50ZXI6OmluaXRZdjEyVGV4
dHVyZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6UVZpZGVvU3VyZmFjZUFyYkZwUGFpbnRlcjo6
UVZpZGVvU3VyZmFjZUFyYkZwUGFpbnRlcik6CisgICAgICAgIChXZWJDb3JlOjpRVmlkZW9TdXJm
YWNlQXJiRnBQYWludGVyOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpRVmlkZW9TdXJmYWNl
QXJiRnBQYWludGVyOjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlFWaWRlb1N1cmZhY2VBcmJG
cFBhaW50ZXI6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlFWaWRlb1N1cmZhY2VHbHNsUGFp
bnRlcjo6UVZpZGVvU3VyZmFjZUdsc2xQYWludGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlFWaWRl
b1N1cmZhY2VHbHNsUGFpbnRlcjo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UVZpZGVvU3Vy
ZmFjZUdsc2xQYWludGVyOjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlFWaWRlb1N1cmZhY2VH
bHNsUGFpbnRlcjo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UVBhaW50ZXJWaWRlb1N1cmZh
Y2U6OlFQYWludGVyVmlkZW9TdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlFQYWludGVyVmlk
ZW9TdXJmYWNlOjp+UVBhaW50ZXJWaWRlb1N1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6UVBh
aW50ZXJWaWRlb1N1cmZhY2U6OnN1cHBvcnRlZFBpeGVsRm9ybWF0cyk6CisgICAgICAgIChXZWJD
b3JlOjpRUGFpbnRlclZpZGVvU3VyZmFjZTo6aXNGb3JtYXRTdXBwb3J0ZWQpOgorICAgICAgICAo
V2ViQ29yZTo6UVBhaW50ZXJWaWRlb1N1cmZhY2U6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6
OlFQYWludGVyVmlkZW9TdXJmYWNlOjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlFQYWludGVy
VmlkZW9TdXJmYWNlOjpwcmVzZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlFQYWludGVyVmlkZW9T
dXJmYWNlOjpicmlnaHRuZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OlFQYWludGVyVmlkZW9TdXJm
YWNlOjpzZXRCcmlnaHRuZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OlFQYWludGVyVmlkZW9TdXJm
YWNlOjpjb250cmFzdCk6CisgICAgICAgIChXZWJDb3JlOjpRUGFpbnRlclZpZGVvU3VyZmFjZTo6
c2V0Q29udHJhc3QpOgorICAgICAgICAoV2ViQ29yZTo6UVBhaW50ZXJWaWRlb1N1cmZhY2U6Omh1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpRUGFpbnRlclZpZGVvU3VyZmFjZTo6c2V0SHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlFQYWludGVyVmlkZW9TdXJmYWNlOjpzYXR1cmF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlFQYWludGVyVmlkZW9TdXJmYWNlOjpzZXRTYXR1cmF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlFQYWludGVyVmlkZW9TdXJmYWNlOjppc1JlYWR5KToKKyAgICAgICAgKFdl
YkNvcmU6OlFQYWludGVyVmlkZW9TdXJmYWNlOjpzZXRSZWFkeSk6CisgICAgICAgIChXZWJDb3Jl
OjpRUGFpbnRlclZpZGVvU3VyZmFjZTo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UVBhaW50
ZXJWaWRlb1N1cmZhY2U6OmdsQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpRUGFpbnRlclZp
ZGVvU3VyZmFjZTo6c2V0R0xDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlFQYWludGVyVmlk
ZW9TdXJmYWNlOjpzdXBwb3J0ZWRTaGFkZXJUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpRUGFp
bnRlclZpZGVvU3VyZmFjZTo6c2hhZGVyVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpRUGFpbnRl
clZpZGVvU3VyZmFjZTo6c2V0U2hhZGVyVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpRUGFpbnRl
clZpZGVvU3VyZmFjZTo6Y3JlYXRlUGFpbnRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvUVBhaW50ZXJWaWRlb1N1cmZhY2UuaDogQWRkZWQgUVBhaW50ZXJWaWRlb1N1cmZhY2Ug
dG8gV2ViQ29yZSBhcyBhIHRlbXBvcmFyeSBzb2x1dGlvbiB0byB0aGUgdXNlIG9mIGEgcHJpdmF0
ZSBRdCBoZWFkZXIuCisgICAgICAgIChXZWJDb3JlOjopOiBBZGRlZCBRUGFpbnRlclZpZGVvU3Vy
ZmFjZSB0byBXZWJDb3JlIGFzIGEgdGVtcG9yYXJ5IHNvbHV0aW9uIHRvIHRoZSB1c2Ugb2YgYSBw
cml2YXRlIFF0IGhlYWRlci4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmNw
cDogVXBkYXRlZCBtZWRpYSBjb250cm9scy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
UXQ6Om1lZGlhQ29udHJvbHNCYXNlbGluZU9wYWNpdHkpOiBOZXcgbWV0aG9kIGRldGVybWluZXMg
YmFzZWxpbmUgb3BhY2l0eSB3aGVuIGNvbnRyb2xzIGFyZSBzaG93bi4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lUXQ6OnBhaW50TWVkaWFNdXRlQnV0dG9uKTogQ2hhbmdlZCBzdHlsaW5n
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYUN1cnJlbnRUaW1l
KTogQWRkZWQgY3VycmVudCB0aW1lIGRpc3BsYXkuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZVF0Ojpmb3JtYXRNZWRpYUNvbnRyb2xzQ3VycmVudFRpbWUpOiBBZGRlZCB0aW1lIGZvcm1h
dHRpbmcuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0Ojpmb3JtYXRNZWRpYUNvbnRy
b2xzUmVtYWluaW5nVGltZSk6IEFkZGVkIHRpbWUgZm9ybWF0dGluZy4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lUXQ6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUcmFjayk6IFZvbHVtZSBz
bGlkZXIgYWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlh
Vm9sdW1lU2xpZGVyVGh1bWIpOiBWb2x1bWUgc2xpZGVyIGFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKTogVXBkYXRlZCBmb3IgUXRN
dWx0aW1lZGlhLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVNs
aWRlclRodW1iKTogRHJvcHBlZCBhbiB1bm5lY2Vzc2FyeSBjaGVjay4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lUXQ6OmFkanVzdFNsaWRlclRodW1iU2l6ZSk6IEhhbmRsZSBhIG1pc3Np
bmcgY2FzZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0Lmg6IFJlaW1wbGVt
ZW50ZWQgYSBmZXcgbW9yZSBtZXRob2RzLgorCiAyMDEwLTAyLTEwICBFbnJpY2EgQ2FzdWNjaSAg
PGVucmljYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgpJ
bmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUu
cHJvCShyZXZpc2lvbiA1NDY0MSkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29w
eSkKQEAgLTEzMSwxMiArMTMxLDIwIEBAIG1hbWVvNXxzeW1iaWFufGVtYmVkZGVkIHsKIAogaW5j
bHVkZSgkJFBXRC8uLi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcmkpCiAKLSMgRGlz
YWJsZSBIVE1MNSBtZWRpYSBjb21waWxhdGlvbiBpZiBwaG9ub24gaXMgdW5hdmFpbGFibGUKLSFj
b250YWlucyhERUZJTkVTLCBFTkFCTEVfVklERU89MSkgewotICAgICFjb250YWlucyhRVF9DT05G
SUcsIHBob25vbikgewotICAgICAgICBERUZJTkVTIC09IEVOQUJMRV9WSURFTz0xCi0gICAgICAg
IERFRklORVMgKz0gRU5BQkxFX1ZJREVPPTAKLSAgICB9CisKKyMgSFRNTDUgTWVkaWEgU3VwcG9y
dAorIyBXZSByZXF1aXJlIHBob25vbiBmb3IgdmVyc2lvbnMgb2YgUXQgPCA0LjcKKyMgV2UgcmVx
dWlyZSBRdE11bHRpbWVkaWEgZm9yIHZlcnNpb25zIG9mIFF0ID49IDQuNworREVGSU5FUyAtPSBF
TkFCTEVfVklERU89MQorREVGSU5FUyArPSBFTkFCTEVfVklERU89MAorCitsZXNzVGhhbihRVF9N
SU5PUl9WRVJTSU9OLCA3KTpjb250YWlucyhRVF9DT05GSUcsIHBob25vbikgeworICAgIERFRklO
RVMgLT0gRU5BQkxFX1ZJREVPPTAKKyAgICBERUZJTkVTICs9IEVOQUJMRV9WSURFTz0xCit9Cish
bGVzc1RoYW4oUVRfTUlOT1JfVkVSU0lPTiwgNyk6Y29udGFpbnMoUVRfQ09ORklHLCBtdWx0aW1l
ZGlhKSB7CisgICAgREVGSU5FUyAtPSBFTkFCTEVfVklERU89MAorICAgIERFRklORVMgKz0gRU5B
QkxFX1ZJREVPPTEKIH0KIAogIyBFeHRyYWN0IHNvdXJjZXMgdG8gYnVpbGQgZnJvbSB0aGUgZ2Vu
ZXJhdG9yIGRlZmluaXRpb25zCkBAIC0yMzAwLDIxICsyMzA4LDM1IEBAIGNvbnRhaW5zKERFRklO
RVMsIEVOQUJMRV9WSURFTz0xKSB7CiAgICAgICAgIHJlbmRlcmluZy9SZW5kZXJNZWRpYS5jcHAg
XAogICAgICAgICBiaW5kaW5ncy9qcy9KU0F1ZGlvQ29uc3RydWN0b3IuY3BwCiAKLSAgICAgICAg
SEVBREVSUyArPSBcCi0gICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXll
clByaXZhdGVQaG9ub24uaAorICAgICAgICAjIFF0TXVsdGltZWRpYSBzaW5jZSA0LjcKKyAgICAg
ICAgZ3JlYXRlclRoYW4oUVRfTUlOT1JfVkVSU0lPTiwgNikgeworICAgICAgICAgICAgSEVBREVS
UyArPSBcCisgICAgICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQ
cml2YXRlUXQuaCBcCisgICAgICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvUVBhaW50
ZXJWaWRlb1N1cmZhY2UuaAorCisgICAgICAgICAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAgICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5jcHAgXAorICAg
ICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L1FQYWludGVyVmlkZW9TdXJmYWNlLmNw
cAogCi0gICAgICAgIFNPVVJDRVMgKz0gXAotICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uLmNwcAorICAgICAgICAgICAgUVQgKz0gbXVsdGlt
ZWRpYQorICAgICAgICAgICAgY29udGFpbnMoUVRfQ09ORklHLCBvcGVuZ2wpOiBRVCArPSBvcGVu
Z2wKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEhFQURFUlMgKz0gXAorICAgICAgICAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVBob25vbi5oCisK
KyAgICAgICAgICAgIFNPVVJDRVMgKz0gXAorICAgICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVBob25vbi5jcHAKIAotICAgICAgICAjIEFkZCBwaG9u
b24gbWFudWFsbHkgdG8gcHJldmVudCBpdCBmcm9tIGNvbWluZyBmaXJzdCBpbgotICAgICAgICAj
IHRoZSBpbmNsdWRlIHBhdGhzLCBhcyBQaG9ub24ncyBwYXRoLmggY29uZmxpY3RzIHdpdGgKLSAg
ICAgICAgIyBXZWJDb3JlJ3MgUGF0aC5oIG9uIGNhc2UtaW5zZW5zaXRpdmUgZmlsZXN5c3RlbXMu
Ci0gICAgICAgIHF0QWRkTGlicmFyeShwaG9ub24pCi0gICAgICAgIElOQ0xVREVQQVRIIC09ICQk
UU1BS0VfSU5DRElSX1FUL3Bob25vbgotICAgICAgICBJTkNMVURFUEFUSCArPSAkJFFNQUtFX0lO
Q0RJUl9RVC9waG9ub24KLSAgICAgICAgbWFjIHsKLSAgICAgICAgICAgIElOQ0xVREVQQVRIIC09
ICQkUU1BS0VfTElCRElSX1FUL3Bob25vbi5mcmFtZXdvcmsvSGVhZGVycwotICAgICAgICAgICAg
SU5DTFVERVBBVEggKz0gJCRRTUFLRV9MSUJESVJfUVQvcGhvbm9uLmZyYW1ld29yay9IZWFkZXJz
CisgICAgICAgICAgICAjIEFkZCBwaG9ub24gbWFudWFsbHkgdG8gcHJldmVudCBpdCBmcm9tIGNv
bWluZyBmaXJzdCBpbgorICAgICAgICAgICAgIyB0aGUgaW5jbHVkZSBwYXRocywgYXMgUGhvbm9u
J3MgcGF0aC5oIGNvbmZsaWN0cyB3aXRoCisgICAgICAgICAgICAjIFdlYkNvcmUncyBQYXRoLmgg
b24gY2FzZS1pbnNlbnNpdGl2ZSBmaWxlc3lzdGVtcy4KKyAgICAgICAgICAgIHF0QWRkTGlicmFy
eShwaG9ub24pCisgICAgICAgICAgICBJTkNMVURFUEFUSCAtPSAkJFFNQUtFX0lOQ0RJUl9RVC9w
aG9ub24KKyAgICAgICAgICAgIElOQ0xVREVQQVRIICs9ICQkUU1BS0VfSU5DRElSX1FUL3Bob25v
bgorICAgICAgICAgICAgbWFjIHsKKyAgICAgICAgICAgICAgICBJTkNMVURFUEFUSCAtPSAkJFFN
QUtFX0xJQkRJUl9RVC9waG9ub24uZnJhbWV3b3JrL0hlYWRlcnMKKyAgICAgICAgICAgICAgICBJ
TkNMVURFUEFUSCArPSAkJFFNQUtFX0xJQkRJUl9RVC9waG9ub24uZnJhbWV3b3JrL0hlYWRlcnMK
KyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiB9CkluZGV4OiBXZWJDb3JlL2Nzcy9tZWRpYUNv
bnRyb2xzUXQuY3NzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL21lZGlhQ29udHJvbHNRdC5j
c3MJKHJldmlzaW9uIDU0NjQxKQorKysgV2ViQ29yZS9jc3MvbWVkaWFDb250cm9sc1F0LmNzcwko
d29ya2luZyBjb3B5KQpAQCAtNTEsOCArNTEsNiBAQCB2aWRlbzotd2Via2l0LWZ1bGwtcGFnZS1t
ZWRpYTo6LXdlYmtpdC1tCiB9CiAKIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLW11dGUt
YnV0dG9uLCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1tdXRlLWJ1dHRvbiB7Ci0gICAg
bGVmdDogYXV0bzsKLSAgICByaWdodDogNXB4OwogICAgIHdpZHRoOiAxMnB4OwogICAgIGhlaWdo
dDogMTJweDsKICAgICBwYWRkaW5nOiA2cHg7CkBAIC02MCw3ICs1OCw2IEBAIGF1ZGlvOjotd2Vi
a2l0LW1lZGlhLWNvbnRyb2xzLW11dGUtYnV0dG8KIH0KIAogYXVkaW86Oi13ZWJraXQtbWVkaWEt
Y29udHJvbHMtcGxheS1idXR0b24sIHZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXBsYXkt
YnV0dG9uIHsKLSAgICBsZWZ0OiA1cHg7CiAgICAgd2lkdGg6IDlweDsKICAgICBoZWlnaHQ6IDEy
cHg7CiAgICAgcGFkZGluZzogNnB4IDEycHggNnB4IDExcHg7CkBAIC03Miw3ICs2OSwyMCBAQCBh
dWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lbGluZS1jCiB9CiAKIGF1ZGlvOjotd2Vi
a2l0LW1lZGlhLWNvbnRyb2xzLWN1cnJlbnQtdGltZS1kaXNwbGF5LCB2aWRlbzo6LXdlYmtpdC1t
ZWRpYS1jb250cm9scy1jdXJyZW50LXRpbWUtZGlzcGxheSB7Ci0gICAgZGlzcGxheTogbm9uZTsK
KyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG1lZGlhLWN1cnJlbnQtdGltZS1kaXNwbGF5OworICAg
IC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CisgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwor
ICAgIGhlaWdodDogMTJweDsKKyAgICBwYWRkaW5nOiA2cHg7CisgICAgbWFyZ2luOiA1cHggM3B4
OworCisgICAgb3ZlcmZsb3c6IGhpZGRlbjsKKyAgICBjdXJzb3I6IGRlZmF1bHQ7CisKKyAgICB0
ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgZm9udC1zaXplOiAxMHB4OworICAgIGZvbnQtZmFtaWx5
OiBWZXJkYW5hOworICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogfQogCiBhdWRpbzo6LXdlYmtpdC1t
ZWRpYS1jb250cm9scy10aW1lLXJlbWFpbmluZy1kaXNwbGF5LCB2aWRlbzo6LXdlYmtpdC1tZWRp
YS1jb250cm9scy10aW1lLXJlbWFpbmluZy1kaXNwbGF5IHsKQEAgLTgwLDUxICs5MCwzOCBAQCBh
dWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lLXJlbWFpCiB9CiAKIGF1ZGlvOjotd2Vi
a2l0LW1lZGlhLWNvbnRyb2xzLXRpbWVsaW5lLCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9s
cy10aW1lbGluZSB7Ci0gICAgbGVmdDogNDJweDsKLSAgICByaWdodDogMzRweDsKICAgICBoZWln
aHQ6IDEycHg7CiAgICAgcGFkZGluZzogNnB4IDhweDsKLSAgICBtYXJnaW46IDVweCAwcHg7Cisg
ICAgbWFyZ2luOiA1cHggM3B4OwogfQogCiBhdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy12
b2x1bWUtc2xpZGVyLWNvbnRhaW5lciwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdm9s
dW1lLXNsaWRlci1jb250YWluZXIgewotICAgIGRpc3BsYXk6IG5vbmU7CisgICAgLXdlYmtpdC1h
cHBlYXJhbmNlOiBtZWRpYS12b2x1bWUtc2xpZGVyLWNvbnRhaW5lcjsKKyAgICBwb3NpdGlvbjog
YWJzb2x1dGU7CisgICAgaGVpZ2h0OiAxMDNweDsKKyAgICB3aWR0aDogMjRweDsKIH0KIAogYXVk
aW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdm9sdW1lLXNsaWRlciwgdmlkZW86Oi13ZWJraXQt
bWVkaWEtY29udHJvbHMtdm9sdW1lLXNsaWRlciB7Ci0gICAgZGlzcGxheTogbm9uZTsKKyAgICAt
d2Via2l0LWFwcGVhcmFuY2U6IG1lZGlhLXZvbHVtZS1zbGlkZXI7CisgICAgZGlzcGxheTogaW5s
aW5lOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKworICAgIHdpZHRoOiAxMnB4OworICAgIHBh
ZGRpbmc6IDZweDsKKyAgICBoZWlnaHQ6IDg4cHg7CisgICAgbWFyZ2luOiAwIDAgM3B4IDA7CiB9
CiAKIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXNlZWstYmFjay1idXR0b24sIHZpZGVv
Ojotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXNlZWstYmFjay1idXR0b24gewotICAgIC8qIFNpbmNl
IE1lZGlhQ29udHJvbEVsZW1lbnRzIGFyZSBhbHdheXMgY3JlYXRlZCB3aXRoIGEgcmVuZGVyZXIg
d2UgaGF2ZSB0byBoaWRlCi0gICAgICAgdGhlIGNvbnRyb2xzIHdlIGRvbid0IHVzZSwgc28gdGhl
eSBkb24ndCBtZXNzIHVwIGFjdGl2YXRpb24gYW5kIGV2ZW50IGhhbmRsaW5nICovCi0gICAgbGVm
dDogMHB4OwotICAgIHRvcDogMHB4OwotICAgIHdpZHRoOiAwcHg7Ci0gICAgaGVpZ2h0OiAwcHg7
Ci0KICAgICBkaXNwbGF5OiBub25lOwogfQogCiBhdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9s
cy1zZWVrLWZvcndhcmQtYnV0dG9uLCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1zZWVr
LWZvcndhcmQtYnV0dG9uIHsKLSAgICAvKiBTaW5jZSBNZWRpYUNvbnRyb2xFbGVtZW50cyBhcmUg
YWx3YXlzIGNyZWF0ZWQgd2l0aCBhIHJlbmRlcmVyIHdlIGhhdmUgdG8gaGlkZQotICAgICAgIHRo
ZSBjb250cm9scyB3ZSBkb24ndCB1c2UsIHNvIHRoZXkgZG9uJ3QgbWVzcyB1cCBhY3RpdmF0aW9u
IGFuZCBldmVudCBoYW5kbGluZyAqLwotICAgIGxlZnQ6IDBweDsKLSAgICB0b3A6IDBweDsKLSAg
ICB3aWR0aDogMHB4OwotICAgIGhlaWdodDogMHB4OwotCiAgICAgZGlzcGxheTogbm9uZTsKIH0K
IAogYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtZnVsbHNjcmVlbi1idXR0b24sIHZpZGVv
Ojotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWZ1bGxzY3JlZW4tYnV0dG9uIHsKLSAgICAvKiBTaW5j
ZSBNZWRpYUNvbnRyb2xFbGVtZW50cyBhcmUgYWx3YXlzIGNyZWF0ZWQgd2l0aCBhIHJlbmRlcmVy
IHdlIGhhdmUgdG8gaGlkZQotICAgICAgIHRoZSBjb250cm9scyB3ZSBkb24ndCB1c2UsIHNvIHRo
ZXkgZG9uJ3QgbWVzcyB1cCBhY3RpdmF0aW9uIGFuZCBldmVudCBoYW5kbGluZyAqLwotICAgIGxl
ZnQ6IDBweDsKLSAgICB0b3A6IDBweDsKLSAgICB3aWR0aDogMHB4OwotICAgIGhlaWdodDogMHB4
OwotCiAgICAgZGlzcGxheTogbm9uZTsKIH0KIApAQCAtMTM2LDMgKzEzMyw3IEBAIGF1ZGlvOjot
d2Via2l0LW1lZGlhLWNvbnRyb2xzLXJldHVybi10by0KICAgICBkaXNwbGF5OiBub25lOwogfQog
CithdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10b2dnbGUtY2xvc2VkLWNhcHRpb25zLWJ1
dHRvbiwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdG9nZ2xlLWNsb3NlZC1jYXB0aW9u
cy1idXR0b24geworICAgIGRpc3BsYXk6IG5vbmU7Cit9CisKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCShyZXZpc2lvbiA1NDY0MSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2
ICszNywxMCBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiVGltZVJhbmdlcy5o
IgogCisjaWYgUExBVEZPUk0oUVQpCisjaW5jbHVkZSA8UXRHbG9iYWw+CisjZW5kaWYKKwogI2lm
IFBMQVRGT1JNKE1BQykKICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVRVEtpdC5oIgogI2Vs
aWYgT1MoV0lOQ0UpICYmICFQTEFURk9STShRVCkKQEAgLTQ2LDcgKzUwLDExIEBACiAjZWxpZiBQ
TEFURk9STShHVEspCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgiCiAj
ZWxpZiBQTEFURk9STShRVCkKLSNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVQaG9ub24uaCIK
KyAgICAjaWYgUVRfVkVSU0lPTiA8IDB4MDQwNzAwCisgICAgI2luY2x1ZGUgIk1lZGlhUGxheWVy
UHJpdmF0ZVBob25vbi5oIgorICAgICNlbHNlCisgICAgI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJp
dmF0ZVF0LmgiCisgICAgI2VuZGlmCiAjZWxpZiBQTEFURk9STShDSFJPTUlVTSkKICNpbmNsdWRl
ICJNZWRpYVBsYXllclByaXZhdGVDaHJvbWl1bS5oIgogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmNwcAko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQ
cml2YXRlUXQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUzMiBAQAorLyoKKyAgICBDb3B5
cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0
ZVF0LmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGll
bnRRdC5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUVBhaW50ZXJWaWRl
b1N1cmZhY2UuaCIKKyNpbmNsdWRlICJUaW1lUmFuZ2VzLmgiCisjaW5jbHVkZSAiV2lkZ2V0Lmgi
CisKKyNpbmNsdWRlICJxd2ViZnJhbWUuaCIKKyNpbmNsdWRlICJxd2VicGFnZS5oIgorCisjaW5j
bHVkZSA8UU5ldHdvcmtBY2Nlc3NNYW5hZ2VyPgorI2luY2x1ZGUgPFFOZXR3b3JrQ29va2llSmFy
PgorI2luY2x1ZGUgPFFOZXR3b3JrUmVxdWVzdD4KKyNpbmNsdWRlIDxRUGFpbnRlcj4KKyNpbmNs
dWRlIDxRUmVjdD4KKyNpbmNsdWRlIDxRVGltZT4KKyNpbmNsdWRlIDxRVXJsPgorI2luY2x1ZGUg
PFFWaWRlb1N1cmZhY2VGb3JtYXQ+CisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+CisKKyNpZiAhZGVmaW5lZChRVF9OT19PUEVOR0wpICYmICFkZWZpbmVkKFFUX09Q
RU5HTF9FU18xX0NMKSAmJiAhZGVmaW5lZChRVF9PUEVOR0xfRVNfMSkKKyNpbmNsdWRlIDxRR0xD
b250ZXh0PgorI2VuZGlmCisKKy8vIFF0IE11bHRpbWVkaWEgSW5jbHVkZXMKKyNpbmNsdWRlIDxR
TWVkaWFTZXJ2aWNlPgorI2luY2x1ZGUgPFFWaWRlb091dHB1dENvbnRyb2w+CisjaW5jbHVkZSA8
UVZpZGVvUmVuZGVyZXJDb250cm9sPgorCit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZURlZmF1bHQgOiBwdWJsaWMg
TWVkaWFQbGF5ZXJQcml2YXRlIHsKK3B1YmxpYzoKKyAgICBJbnRTaXplIG5hdHVyYWxTaXplKCkg
Y29uc3Q7CisgICAgdm9pZCBzZXRTaXplKGNvbnN0IEludFNpemUmKSB7IH0KKyAgICB2b2lkIHBh
aW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKKyAgICBib29sIHN1cHBvcnRz
RnVsbHNjcmVlbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKK3ByaXZhdGUgc2xvdHM6Cisg
ICAgdm9pZCByZXBhaW50KCk7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIE1lZGlhUGxh
eWVyUHJpdmF0ZTsKKyAgICBNZWRpYVBsYXllclByaXZhdGVEZWZhdWx0KE1lZGlhUGxheWVyKik7
CisgICAgfk1lZGlhUGxheWVyUHJpdmF0ZURlZmF1bHQoKTsKKworICAgIFFQYWludGVyVmlkZW9T
dXJmYWNlKiBtX3ZpZGVvU3VyZmFjZTsKKyAgICBRVmlkZW9PdXRwdXRDb250cm9sKiBtX291dHB1
dENvbnRyb2w7CisgICAgUVZpZGVvUmVuZGVyZXJDb250cm9sKiBtX3JlbmRlcmVyQ29udHJvbDsK
KworICAgIGJvb2wgbV9pc0FjdGl2ZTsKK307CisKK01lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFj
ZSogTWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVhdGUoTWVkaWFQbGF5ZXIqIHBsYXllcikKK3sKKyAg
ICByZXR1cm4gbmV3IE1lZGlhUGxheWVyUHJpdmF0ZURlZmF1bHQocGxheWVyKTsKK30KKwordm9p
ZCBNZWRpYVBsYXllclByaXZhdGU6OnJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdp
c3RyYXIgcmVnaXN0cmFyKQoreworICAgIHJlZ2lzdHJhcihjcmVhdGUsIGdldFN1cHBvcnRlZFR5
cGVzLCBzdXBwb3J0c1R5cGUpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Z2V0U3Vw
cG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmc+ICZzdXBwb3J0ZWQpCit7CisgICAgUVN0cmluZ0xp
c3QgdHlwZXMgPSBRTWVkaWFQbGF5ZXI6OnN1cHBvcnRlZE1pbWVUeXBlcygpOworCisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCB0eXBlcy5zaXplKCk7IGkrKykKKyAgICAgICAgc3VwcG9ydGVkLmFk
ZCh0eXBlcy5hdChpKSk7Cit9CisKK01lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5
ZXJQcml2YXRlOjpzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiBtaW1lLCBjb25zdCBTdHJpbmcm
IGNvZGVjKQoreworICAgIGlmIChRTWVkaWFQbGF5ZXI6Omhhc1N1cHBvcnQobWltZSwgUVN0cmlu
Z0xpc3QoY29kZWMpKSA+PSBRdE1lZGlhOjpQcm9iYWJseVN1cHBvcnRlZCkKKyAgICAgICAgcmV0
dXJuIE1lZGlhUGxheWVyOjpJc1N1cHBvcnRlZDsKKworICAgIHJldHVybiBNZWRpYVBsYXllcjo6
TWF5QmVTdXBwb3J0ZWQ7Cit9CisKK01lZGlhUGxheWVyUHJpdmF0ZTo6TWVkaWFQbGF5ZXJQcml2
YXRlKE1lZGlhUGxheWVyKiBwbGF5ZXIpCisgICAgOiBtX3BsYXllcihwbGF5ZXIpCisgICAgLCBt
X21lZGlhUGxheWVyKG5ldyBRTWVkaWFQbGF5ZXIpCisgICAgLCBtX25ldHdvcmtTdGF0ZShNZWRp
YVBsYXllcjo6RW1wdHkpCisgICAgLCBtX3JlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OkhhdmVOb3Ro
aW5nKQorICAgICwgbV9pc1Zpc2libGUoZmFsc2UpCisgICAgLCBtX2lzU2Vla2luZyhmYWxzZSkK
KyAgICAsIG1fcXVldWVkU2VlaygtMSkKK3sKKyAgICAvLyBTaWduYWwgSGFuZGxlcnMKKyAgICBj
b25uZWN0KG1fbWVkaWFQbGF5ZXIsIFNJR05BTChtZWRpYVN0YXR1c0NoYW5nZWQoUU1lZGlhUGxh
eWVyOjpNZWRpYVN0YXR1cykpLAorICAgICAgICAgICAgdGhpcywgU0xPVChtZWRpYVN0YXR1c0No
YW5nZWQoUU1lZGlhUGxheWVyOjpNZWRpYVN0YXR1cykpKTsKKyAgICBjb25uZWN0KG1fbWVkaWFQ
bGF5ZXIsIFNJR05BTChzdGF0ZUNoYW5nZWQoUU1lZGlhUGxheWVyOjpTdGF0ZSkpLAorICAgICAg
ICAgICAgdGhpcywgU0xPVChzdGF0ZUNoYW5nZWQoUU1lZGlhUGxheWVyOjpTdGF0ZSkpKTsKKyAg
ICBjb25uZWN0KG1fbWVkaWFQbGF5ZXIsIFNJR05BTChlcnJvcihRTWVkaWFQbGF5ZXI6OkVycm9y
KSksCisgICAgICAgICAgICB0aGlzLCBTTE9UKGhhbmRsZUVycm9yKFFNZWRpYVBsYXllcjo6RXJy
b3IpKSk7CisgICAgY29ubmVjdChtX21lZGlhUGxheWVyLCBTSUdOQUwoZHVyYXRpb25DaGFuZ2Vk
KHFpbnQ2NCkpLAorICAgICAgICAgICAgdGhpcywgU0xPVChkdXJhdGlvbkNoYW5nZWQocWludDY0
KSkpOworICAgIGNvbm5lY3QobV9tZWRpYVBsYXllciwgU0lHTkFMKHBvc2l0aW9uQ2hhbmdlZChx
aW50NjQpKSwKKyAgICAgICAgICAgIHRoaXMsIFNMT1QocG9zaXRpb25DaGFuZ2VkKHFpbnQ2NCkp
KTsKKworICAgIC8vIEdyYWIgdGhlIHBsYXllciBjb250cm9sCisgICAgUU1lZGlhU2VydmljZSog
c2VydmljZSA9IG1fbWVkaWFQbGF5ZXItPnNlcnZpY2UoKTsKKyAgICBpZiAoc2VydmljZSkgewor
ICAgICAgICBtX21lZGlhUGxheWVyQ29udHJvbCA9IHFvYmplY3RfY2FzdDxRTWVkaWFQbGF5ZXJD
b250cm9sICo+KAorICAgICAgICAgICAgICAgIHNlcnZpY2UtPmNvbnRyb2woUU1lZGlhUGxheWVy
Q29udHJvbF9paWQpKTsKKyAgICB9Cit9CisKK01lZGlhUGxheWVyUHJpdmF0ZTo6fk1lZGlhUGxh
eWVyUHJpdmF0ZSgpCit7CisgICAgZGVsZXRlIG1fbWVkaWFQbGF5ZXI7CisgICAgbV9tZWRpYVBs
YXllciA9IDA7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpoYXNWaWRlbygpIGNvbnN0
Cit7CisgICAgLy8gcmV0dXJuIG1fbWVkaWFQbGF5ZXItPmlzVmlkZW9BdmFpbGFibGUoKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGU6Omhhc0F1ZGlvKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6
OmxvYWQoY29uc3QgU3RyaW5nJiB1cmwpCit7CisgICAgLy8gV2UgYXJlIG5vdyBsb2FkaW5nCisg
ICAgaWYgKG1fbmV0d29ya1N0YXRlICE9IE1lZGlhUGxheWVyOjpMb2FkaW5nKSB7CisgICAgICAg
IG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRpbmc7CisgICAgICAgIG1fcGxheWVy
LT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CisgICAgfQorCisgICAgLy8gQW5kIHdlIGRvbid0IGhh
dmUgYW55IGRhdGEgeWV0CisgICAgaWYgKG1fcmVhZHlTdGF0ZSAhPSBNZWRpYVBsYXllcjo6SGF2
ZU5vdGhpbmcpIHsKKyAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3Ro
aW5nOworICAgICAgICBtX3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKKyAgICB9CisKKyAg
ICBjb25zdCBRVXJsIHJVcmwgPSBRVXJsKFFTdHJpbmcodXJsKSk7CisgICAgY29uc3QgUVN0cmlu
ZyBzY2hlbWUgPSByVXJsLnNjaGVtZSgpLnRvTG93ZXIoKTsKKworICAgIC8vIENvbnN0cnVjdCB0
aGUgbWVkaWEgY29udGVudCB3aXRoIGEgbmV0d29yayByZXF1ZXN0IGlmIHRoZSByZXNvdXJjZSBp
cyBodHRwW3NdCisgICAgaWYgKHNjaGVtZSA9PSAiaHR0cCIgfHwgc2NoZW1lID09ICJodHRwcyIp
IHsKKyAgICAgICAgUU5ldHdvcmtSZXF1ZXN0IHJlcXVlc3QgPSBRTmV0d29ya1JlcXVlc3QoclVy
bCk7CisKKyAgICAgICAgLy8gR3JhYiB0aGUgY3VycmVudCBkb2N1bWVudCBhbmQgbmV0d29yayBt
YW5hZ2VyCisgICAgICAgIEZyYW1lKiBmcmFtZSA9IG1fcGxheWVyLT5mcmFtZVZpZXcoKSA/IG1f
cGxheWVyLT5mcmFtZVZpZXcoKS0+ZnJhbWUoKSA6IDA7CisgICAgICAgIERvY3VtZW50KiBkb2N1
bWVudCA9IGZyYW1lID8gZnJhbWUtPmRvY3VtZW50KCkgOiAwOworICAgICAgICBGcmFtZUxvYWRl
ckNsaWVudFF0KiBmcmFtZUxvYWRlciA9ICBmcmFtZSA/IHN0YXRpY19jYXN0PEZyYW1lTG9hZGVy
Q2xpZW50UXQqPihmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpKSA6IDA7CisgICAgICAgIFFOZXR3
b3JrQWNjZXNzTWFuYWdlciogbWFuYWdlciA9IGZyYW1lTG9hZGVyID8gZnJhbWVMb2FkZXItPndl
YkZyYW1lKCktPnBhZ2UoKS0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKSA6IDA7CisKKyAgICAgICAg
aWYgKGRvY3VtZW50ICYmIG1hbmFnZXIpIHsKKyAgICAgICAgICAgIC8vIFNldCB0aGUgY29va2ll
cworICAgICAgICAgICAgUU5ldHdvcmtDb29raWVKYXIqIGphciA9IG1hbmFnZXItPmNvb2tpZUph
cigpOworICAgICAgICAgICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+IGNvb2tpZXMgPSBqYXItPmNv
b2tpZXNGb3JVcmwoclVybCk7CisKKyAgICAgICAgICAgIC8vIERvbid0IHNldCB0aGUgaGVhZGVy
IGlmIHRoZXJlIGFyZSBubyBjb29raWVzLgorICAgICAgICAgICAgLy8gVGhpcyBwcmV2ZW50cyBh
IHdhcm5pbmcgZnJvbSBiZWluZyBlbWl0dGVkLgorICAgICAgICAgICAgaWYgKCFjb29raWVzLmlz
RW1wdHkoKSkKKyAgICAgICAgICAgICAgICByZXF1ZXN0LnNldEhlYWRlcihRTmV0d29ya1JlcXVl
c3Q6OkNvb2tpZUhlYWRlciwgcVZhcmlhbnRGcm9tVmFsdWUoY29va2llcykpOworCisgICAgICAg
ICAgICAvLyBTZXQgdGhlIHJlZmZlcmVyLCBidXQgbm90IHdoZW4gcmVxdWVzdGluZyBpbnNlY3Vy
ZSBjb250ZW50IGZyb20gYSBzZWN1cmUgcGFnZQorICAgICAgICAgICAgUVVybCBkb2N1bWVudFVy
bCA9IFFVcmwoUVN0cmluZyhkb2N1bWVudC0+ZG9jdW1lbnRVUkkoKSkpOworICAgICAgICAgICAg
aWYgKGRvY3VtZW50VXJsLnNjaGVtZSgpLnRvTG93ZXIoKSA9PSAiaHR0cCIgfHwgc2NoZW1lID09
ICJodHRwcyIpCisgICAgICAgICAgICAgICAgcmVxdWVzdC5zZXRSYXdIZWFkZXIoIlJlZmVyZXIi
LCBkb2N1bWVudFVybC50b0VuY29kZWQoKSk7CisKKyAgICAgICAgICAgIC8vIFNldCB0aGUgdXNl
ciBhZ2VudAorICAgICAgICAgICAgcmVxdWVzdC5zZXRSYXdIZWFkZXIoIlVzZXItQWdlbnQiLCBm
cmFtZUxvYWRlci0+dXNlckFnZW50KHJVcmwpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICB9CisK
KyAgICAgICAgbV9tZWRpYVBsYXllci0+c2V0TWVkaWEoUU1lZGlhQ29udGVudChyZXF1ZXN0KSk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT3RoZXJ3aXNlLCBqdXN0IHVzZSB0aGUgVVJMCisg
ICAgICAgIG1fbWVkaWFQbGF5ZXItPnNldE1lZGlhKFFNZWRpYUNvbnRlbnQoclVybCkpOworICAg
IH0KKworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Y2FuY2VsTG9hZCgpCit7CisgICAg
bV9tZWRpYVBsYXllci0+c2V0TWVkaWEoUU1lZGlhQ29udGVudCgpKTsKKyAgICB1cGRhdGVTdGF0
ZXMoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnBsYXkoKQoreworICAgIGlmICht
X21lZGlhUGxheWVyLT5zdGF0ZSgpICE9IFFNZWRpYVBsYXllcjo6UGxheWluZ1N0YXRlKQorICAg
ICAgICBtX21lZGlhUGxheWVyLT5wbGF5KCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
OjpwYXVzZSgpCit7CisgICAgaWYgKG1fbWVkaWFQbGF5ZXItPnN0YXRlKCkgPT0gUU1lZGlhUGxh
eWVyOjpQbGF5aW5nU3RhdGUpCisgICAgICAgIG1fbWVkaWFQbGF5ZXItPnBhdXNlKCk7Cit9CisK
K2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpwYXVzZWQoKSBjb25zdAoreworICAgIHJldHVybiAo
bV9tZWRpYVBsYXllci0+c3RhdGUoKSAhPSBRTWVkaWFQbGF5ZXI6OlBsYXlpbmdTdGF0ZSk7Cit9
CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZWVrKGZsb2F0IHBvc2l0aW9uKQoreworICAg
IGlmICghbV9tZWRpYVBsYXllci0+aXNTZWVrYWJsZSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAobV9tZWRpYVBsYXllckNvbnRyb2wgJiYgIW1fbWVkaWFQbGF5ZXJDb250cm9sLT5hdmFp
bGFibGVQbGF5YmFja1JhbmdlcygpLmNvbnRhaW5zKHBvc2l0aW9uICogMTAwMCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChwb3NpdGlvbiA+IGR1cmF0aW9uKCkpCisgICAgICAgIHBvc2l0
aW9uID0gZHVyYXRpb24oKTsKKworICAgIC8vIFNlZWtpbmcgaXMgbW9zdCByZWxpYWJsZSB3aGVu
IHdlJ3JlIHBhdXNlZC4KKyAgICAvLyBXZWJraXQgd2lsbCB0cnkgdG8gcGF1c2UgYmVmb3JlIHNl
ZWtpbmcsIGJ1dCBkdWUgdG8gdGhlIGFzeW5jaHJvbm91cyBuYXR1cmUKKyAgICAvLyBvZiB0aGUg
YmFja2VuZCwgdGhlIHBsYXllciBtYXkgbm90IGFjdHVhbGx5IGJlIHBhdXNlZCB5ZXQuCisgICAg
Ly8gSW4gdGhpcyBjYXNlLCB3ZSBzaG91bGQgcXVldWUgdGhlIHNlZWsgYW5kIHdhaXQgdW50aWwg
cGF1c2luZyBoYXMgY29tcGxldGVkCisgICAgLy8gYmVmb3JlIGF0dGVtcHRpbmcgdG8gc2Vlay4K
KyAgICBpZiAobV9tZWRpYVBsYXllci0+c3RhdGUoKSA9PSBRTWVkaWFQbGF5ZXI6OlBsYXlpbmdT
dGF0ZSkgeworICAgICAgICBtX21lZGlhUGxheWVyLT5wYXVzZSgpOworICAgICAgICBtX2lzU2Vl
a2luZyA9IHRydWU7CisgICAgICAgIG1fcXVldWVkU2VlayA9IHN0YXRpY19jYXN0PHFpbnQ2ND4o
cG9zaXRpb24gKiAxMDAwKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2lzU2Vla2luZyA9IHRy
dWU7CisgICAgICAgIG1fbWVkaWFQbGF5ZXItPnNldFBvc2l0aW9uKHN0YXRpY19jYXN0PHFpbnQ2
ND4ocG9zaXRpb24gKiAxMDAwKSk7CisgICAgfQorfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0
ZTo6c2Vla2luZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faXNTZWVraW5nOworfQorCitmbG9h
dCBNZWRpYVBsYXllclByaXZhdGU6OmR1cmF0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAobV9yZWFk
eVN0YXRlIDwgTWVkaWFQbGF5ZXI6OkhhdmVNZXRhZGF0YSkKKyAgICAgICAgcmV0dXJuIDAuMGY7
CisKKyAgICBmbG9hdCBkdXJhdGlvbiA9IG1fbWVkaWFQbGF5ZXItPmR1cmF0aW9uKCkgLyAxMDAw
LjBmOworCisgICAgLy8gV2UgYXJlIHN0cmVhbWluZworICAgIGlmIChkdXJhdGlvbiA8PSAwLjBm
KQorICAgICAgICBkdXJhdGlvbiA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0
eSgpOworCisgICAgcmV0dXJuIGR1cmF0aW9uOworfQorCitmbG9hdCBNZWRpYVBsYXllclByaXZh
dGU6OmN1cnJlbnRUaW1lKCkgY29uc3QKK3sKKyAgICBmbG9hdCBjdXJyZW50VGltZSA9IG1fbWVk
aWFQbGF5ZXItPnBvc2l0aW9uKCkgLyAxMDAwLjBmOworICAgIHJldHVybiBjdXJyZW50VGltZTsK
K30KKworUGFzc1JlZlB0cjxUaW1lUmFuZ2VzPiBNZWRpYVBsYXllclByaXZhdGU6OmJ1ZmZlcmVk
KCkgY29uc3QKK3sKKyAgICBSZWZQdHI8VGltZVJhbmdlcz4gYnVmZmVyZWQgPSBUaW1lUmFuZ2Vz
OjpjcmVhdGUoKTsKKworICAgIGlmICghbV9tZWRpYVBsYXllckNvbnRyb2wpCisgICAgICAgIHJl
dHVybiBidWZmZXJlZDsKKworICAgIFFNZWRpYVRpbWVSYW5nZSBwbGF5YmFja1JhbmdlcyA9IG1f
bWVkaWFQbGF5ZXJDb250cm9sLT5hdmFpbGFibGVQbGF5YmFja1JhbmdlcygpOworCisgICAgZm9y
ZWFjaCAoY29uc3QgUU1lZGlhVGltZUludGVydmFsIGludGVydmFsLCBwbGF5YmFja1Jhbmdlcy5p
bnRlcnZhbHMoKSkgeworICAgICAgICBmbG9hdCByYW5nZU1pbiA9IHN0YXRpY19jYXN0PGZsb2F0
PihpbnRlcnZhbC5zdGFydCgpKSAvIDEwMDAuMGY7CisgICAgICAgIGZsb2F0IHJhbmdlTWF4ID0g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KGludGVydmFsLmVuZCgpKSAvIDEwMDAuMGY7CisgICAgICAgIGJ1
ZmZlcmVkLT5hZGQocmFuZ2VNaW4sIHJhbmdlTWF4KTsKKyAgICB9CisKKyAgICByZXR1cm4gYnVm
ZmVyZWQucmVsZWFzZSgpOworfQorCitmbG9hdCBNZWRpYVBsYXllclByaXZhdGU6Om1heFRpbWVT
ZWVrYWJsZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX21lZGlhUGxheWVyQ29udHJvbCkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fbWVkaWFQbGF5
ZXJDb250cm9sLT5hdmFpbGFibGVQbGF5YmFja1JhbmdlcygpLmxhdGVzdFRpbWUoKSkgLyAxMDAw
LjBmOworfQorCit1bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGU6OmJ5dGVzTG9hZGVkKCkgY29u
c3QKK3sKKyAgICB1bnNpZ25lZCBwZXJjZW50YWdlID0gbV9tZWRpYVBsYXllci0+YnVmZmVyU3Rh
dHVzKCk7CisKKyAgICBpZiAocGVyY2VudGFnZSA9PSAxMDApIHsKKyAgICAgICAgaWYgKG1fbmV0
d29ya1N0YXRlICE9IE1lZGlhUGxheWVyOjpJZGxlKSB7CisgICAgICAgICAgICBtX25ldHdvcmtT
dGF0ZSA9IE1lZGlhUGxheWVyOjpJZGxlOworICAgICAgICAgICAgbV9wbGF5ZXItPm5ldHdvcmtT
dGF0ZUNoYW5nZWQoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9yZWFkeVN0YXRlICE9IE1l
ZGlhUGxheWVyOjpIYXZlRW5vdWdoRGF0YSkgeworICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0g
TWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhOworICAgICAgICAgICAgbV9wbGF5ZXItPnJlYWR5
U3RhdGVDaGFuZ2VkKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBRTGF0aW4xU3RyaW5nIGJs
S2V5KCJieXRlcy1sb2FkZWQiKTsKKyAgICBpZiAobV9tZWRpYVBsYXllci0+YXZhaWxhYmxlRXh0
ZW5kZWRNZXRhRGF0YSgpLmNvbnRhaW5zKGJsS2V5KSkKKyAgICAgICAgcmV0dXJuIG1fbWVkaWFQ
bGF5ZXItPmV4dGVuZGVkTWV0YURhdGEoYmxLZXkpLnRvSW50KCk7CisKKyAgICByZXR1cm4gcGVy
Y2VudGFnZTsKK30KKwordW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRlOjp0b3RhbEJ5dGVzKCkg
Y29uc3QKK3sKKyAgICBpZiAobV9tZWRpYVBsYXllci0+YXZhaWxhYmxlTWV0YURhdGEoKS5jb250
YWlucyhRdE1lZGlhOjpTaXplKSkKKyAgICAgICAgcmV0dXJuIG1fbWVkaWFQbGF5ZXItPm1ldGFE
YXRhKFF0TWVkaWE6OlNpemUpLnRvSW50KCk7CisKKyAgICByZXR1cm4gMTAwOworfQorCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0UmF0ZShmbG9hdCByYXRlKQoreworICAgIG1fbWVkaWFQ
bGF5ZXItPnNldFBsYXliYWNrUmF0ZShyYXRlKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZh
dGU6OnNldFZvbHVtZShmbG9hdCB2b2x1bWUpCit7CisgICAgbV9tZWRpYVBsYXllci0+c2V0Vm9s
dW1lKHN0YXRpY19jYXN0PGludD4odm9sdW1lICogMTAwLjApKTsKK30KKwordm9pZCBNZWRpYVBs
YXllclByaXZhdGU6OnNldE11dGVkKGJvb2wgbXV0ZWQpCit7CisgICAgbV9tZWRpYVBsYXllci0+
c2V0TXV0ZWQobXV0ZWQpOworfQorCitNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIE1lZGlhUGxh
eWVyUHJpdmF0ZTo6bmV0d29ya1N0YXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9uZXR3b3Jr
U3RhdGU7Cit9CisKK01lZGlhUGxheWVyOjpSZWFkeVN0YXRlIE1lZGlhUGxheWVyUHJpdmF0ZTo6
cmVhZHlTdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVhZHlTdGF0ZTsKK30KKwordm9p
ZCBNZWRpYVBsYXllclByaXZhdGU6OnNldFZpc2libGUoYm9vbCB2aXNpYmxlKQoreworICAgIG1f
aXNWaXNpYmxlID0gdmlzaWJsZTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om1lZGlh
U3RhdHVzQ2hhbmdlZChRTWVkaWFQbGF5ZXI6Ok1lZGlhU3RhdHVzKQoreworICAgIHVwZGF0ZVN0
YXRlcygpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6aGFuZGxlRXJyb3IoUU1lZGlh
UGxheWVyOjpFcnJvcikKK3sKKyAgICB1cGRhdGVTdGF0ZXMoKTsKK30KKwordm9pZCBNZWRpYVBs
YXllclByaXZhdGU6OnN0YXRlQ2hhbmdlZChRTWVkaWFQbGF5ZXI6OlN0YXRlIHN0YXRlKQorewor
ICAgIGlmIChzdGF0ZSAhPSBRTWVkaWFQbGF5ZXI6OlBsYXlpbmdTdGF0ZSAmJiBtX2lzU2Vla2lu
ZyAmJiBtX3F1ZXVlZFNlZWsgPj0gMCkgeworICAgICAgICBtX21lZGlhUGxheWVyLT5zZXRQb3Np
dGlvbihtX3F1ZXVlZFNlZWspOworICAgICAgICBtX3F1ZXVlZFNlZWsgPSAtMTsKKyAgICB9Cit9
CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpwb3NpdGlvbkNoYW5nZWQocWludDY0KQorewor
ICAgIC8vIE9ubHkgcHJvcG9nYXRlIHRoaXMgZXZlbnQgaWYgd2UgYXJlIHNlZWtpbmcKKyAgICBp
ZiAobV9pc1NlZWtpbmcgJiYgbV9xdWV1ZWRTZWVrID09IC0xKSB7CisgICAgICAgIG1fcGxheWVy
LT50aW1lQ2hhbmdlZCgpOworICAgICAgICBtX2lzU2Vla2luZyA9IGZhbHNlOworICAgIH0KK30K
Kwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmR1cmF0aW9uQ2hhbmdlZChxaW50NjQpCit7Cisg
ICAgbV9wbGF5ZXItPmR1cmF0aW9uQ2hhbmdlZCgpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZTo6dXBkYXRlU3RhdGVzKCkKK3sKKyAgICAvLyBTdG9yZSB0aGUgb2xkIHN0YXRlcyBzbyB0
aGF0IHdlIGNhbiBkZXRlY3QgYSBjaGFuZ2UgYW5kIHJhaXNlIGNoYW5nZSBldmVudHMKKyAgICBN
ZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG9sZE5ldHdvcmtTdGF0ZSA9IG1fbmV0d29ya1N0YXRl
OworICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG9sZFJlYWR5U3RhdGUgPSBtX3JlYWR5U3Rh
dGU7CisKKyAgICBRTWVkaWFQbGF5ZXI6Ok1lZGlhU3RhdHVzIGN1cnJlbnRTdGF0dXMgPSBtX21l
ZGlhUGxheWVyLT5tZWRpYVN0YXR1cygpOworICAgIFFNZWRpYVBsYXllcjo6RXJyb3IgY3VycmVu
dEVycm9yID0gbV9tZWRpYVBsYXllci0+ZXJyb3IoKTsKKworICAgIGlmIChjdXJyZW50RXJyb3Ig
IT0gUU1lZGlhUGxheWVyOjpOb0Vycm9yKSB7CisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlh
UGxheWVyOjpIYXZlTm90aGluZzsKKyAgICAgICAgaWYgKGN1cnJlbnRFcnJvciA9PSBRTWVkaWFQ
bGF5ZXI6OkZvcm1hdEVycm9yKQorICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBs
YXllcjo6Rm9ybWF0RXJyb3I7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fbmV0d29ya1N0
YXRlID0gTWVkaWFQbGF5ZXI6Ok5ldHdvcmtFcnJvcjsKKyAgICB9IGVsc2UgaWYgKGN1cnJlbnRT
dGF0dXMgPT0gUU1lZGlhUGxheWVyOjpVbmtub3duTWVkaWFTdGF0dXMKKyAgICAgICAgICAgICAg
IHx8IGN1cnJlbnRTdGF0dXMgPT0gUU1lZGlhUGxheWVyOjpOb01lZGlhKSB7CisgICAgICAgIG1f
bmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OklkbGU7CisgICAgICAgIG1fcmVhZHlTdGF0ZSA9
IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKKyAgICB9IGVsc2UgaWYgKGN1cnJlbnRTdGF0dXMg
PT0gUU1lZGlhUGxheWVyOjpMb2FkaW5nTWVkaWEpIHsKKyAgICAgICAgbV9uZXR3b3JrU3RhdGUg
PSBNZWRpYVBsYXllcjo6TG9hZGluZzsKKyAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5
ZXI6OkhhdmVOb3RoaW5nOworICAgIH0gZWxzZSBpZiAoY3VycmVudFN0YXR1cyA9PSBRTWVkaWFQ
bGF5ZXI6OkxvYWRlZE1lZGlhKSB7CisgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5
ZXI6OkxvYWRpbmc7CisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTWV0
YWRhdGE7CisgICAgfSBlbHNlIGlmIChjdXJyZW50U3RhdHVzID09IFFNZWRpYVBsYXllcjo6QnVm
ZmVyaW5nTWVkaWEpIHsKKyAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9h
ZGluZzsKKyAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVGdXR1cmVEYXRh
OworICAgIH0gZWxzZSBpZiAoY3VycmVudFN0YXR1cyA9PSBRTWVkaWFQbGF5ZXI6OlN0YWxsZWRN
ZWRpYSkgeworICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOwor
ICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUN1cnJlbnREYXRhOworICAg
IH0gZWxzZSBpZiAoY3VycmVudFN0YXR1cyA9PSBRTWVkaWFQbGF5ZXI6OkJ1ZmZlcmVkTWVkaWEK
KyAgICAgICAgICAgICAgIHx8IGN1cnJlbnRTdGF0dXMgPT0gUU1lZGlhUGxheWVyOjpFbmRPZk1l
ZGlhKSB7CisgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OklkbGU7CisgICAg
ICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlRW5vdWdoRGF0YTsKKyAgICB9IGVs
c2UgaWYgKGN1cnJlbnRTdGF0dXMgPT0gUU1lZGlhUGxheWVyOjpJbnZhbGlkTWVkaWEpIHsKKyAg
ICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TmV0d29ya0Vycm9yOworICAgICAg
ICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7CisgICAgfQorCisgICAg
Ly8gTG9nIHRoZSBzdGF0ZSBjaGFuZ2VzIGFuZCByYWlzZSB0aGUgc3RhdGUgY2hhbmdlIGV2ZW50
cworICAgIC8vIE5COiBUaGUgcmVhZHlTdGF0ZUNoYW5nZWQgZXZlbnQgbXVzdCBjb21lIGJlZm9y
ZSB0aGUgbmV0d29ya1N0YXRlQ2hhbmdlZCBldmVudC4KKyAgICAvLyBCcmVha2luZyB0aGlzIGlu
dmFyaWFudCB3aWxsIGNhdXNlIHRoZSByZXNvdXJjZSBzZWxlY3Rpb24gYWxnb3JpdGhtIGZvciBt
dWx0aXBsZQorICAgIC8vIHNvdXJjZXMgdG8gZmFpbC4KKyAgICBpZiAobV9yZWFkeVN0YXRlICE9
IG9sZFJlYWR5U3RhdGUpCisgICAgICAgIG1fcGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOwor
CisgICAgaWYgKG1fbmV0d29ya1N0YXRlICE9IG9sZE5ldHdvcmtTdGF0ZSkKKyAgICAgICAgbV9w
bGF5ZXItPm5ldHdvcmtTdGF0ZUNoYW5nZWQoKTsKK30KKworTWVkaWFQbGF5ZXJQcml2YXRlRGVm
YXVsdDo6TWVkaWFQbGF5ZXJQcml2YXRlRGVmYXVsdChNZWRpYVBsYXllciogcGxheWVyKQorICAg
IDogTWVkaWFQbGF5ZXJQcml2YXRlKHBsYXllcikKKyAgICAsIG1fdmlkZW9TdXJmYWNlKG5ldyBR
UGFpbnRlclZpZGVvU3VyZmFjZShtX21lZGlhUGxheWVyKSkKK3sKKyAgICBRTWVkaWFTZXJ2aWNl
KiBzZXJ2aWNlID0gbV9tZWRpYVBsYXllci0+c2VydmljZSgpOworICAgIGlmIChzZXJ2aWNlKSB7
CisgICAgICAgIG1fb3V0cHV0Q29udHJvbCA9IHFvYmplY3RfY2FzdDxRVmlkZW9PdXRwdXRDb250
cm9sKj4oCisgICAgICAgICAgICAgICAgc2VydmljZS0+Y29udHJvbChRVmlkZW9PdXRwdXRDb250
cm9sX2lpZCkpOworICAgICAgICBtX3JlbmRlcmVyQ29udHJvbCA9IHFvYmplY3RfY2FzdDxRVmlk
ZW9SZW5kZXJlckNvbnRyb2wqPigKKyAgICAgICAgICAgICAgICBzZXJ2aWNlLT5jb250cm9sKFFW
aWRlb1JlbmRlcmVyQ29udHJvbF9paWQpKTsKKworICAgICAgICBpZiAobV9vdXRwdXRDb250cm9s
ICYmIG1fcmVuZGVyZXJDb250cm9sKSB7CisgICAgICAgICAgICBjb25uZWN0KG1fdmlkZW9TdXJm
YWNlLCBTSUdOQUwoZnJhbWVDaGFuZ2VkKCkpLCB0aGlzLCBTTE9UKHJlcGFpbnQoKSkpOworCisg
ICAgICAgICAgICBtX3JlbmRlcmVyQ29udHJvbC0+c2V0U3VyZmFjZShtX3ZpZGVvU3VyZmFjZSk7
CisgICAgICAgICAgICBtX291dHB1dENvbnRyb2wtPnNldE91dHB1dChRVmlkZW9PdXRwdXRDb250
cm9sOjpSZW5kZXJlck91dHB1dCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK01lZGlhUGxheWVy
UHJpdmF0ZURlZmF1bHQ6On5NZWRpYVBsYXllclByaXZhdGVEZWZhdWx0KCkKK3sKKyAgICBkZWxl
dGUgbV92aWRlb1N1cmZhY2U7CisgICAgbV92aWRlb1N1cmZhY2UgPSAwOworfQorCitJbnRTaXpl
IE1lZGlhUGxheWVyUHJpdmF0ZURlZmF1bHQ6Om5hdHVyYWxTaXplKCkgY29uc3QKK3sKKyAgICBp
ZiAoIWhhc1ZpZGVvKCkgfHwgbV9yZWFkeVN0YXRlIDwgTWVkaWFQbGF5ZXI6OkhhdmVNZXRhZGF0
YSkKKyAgICAgICAgcmV0dXJuIEludFNpemUoKTsKKworICAgIFFTaXplIHZpZGVvU2l6ZSA9IG1f
dmlkZW9TdXJmYWNlLT5zdXJmYWNlRm9ybWF0KCkuc2l6ZUhpbnQoKTsKKworICAgIGlmICh2aWRl
b1NpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gSW50U2l6ZSgpOworCisgICAgcmV0dXJu
IEludFNpemUodmlkZW9TaXplKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVEZWZhdWx0
OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7
CisgICAgaWYgKGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFtX2lzVmlzaWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gR3JhYiB0
aGUgcGFpbnRlcgorICAgIFFQYWludGVyKiBwYWludGVyID0gY29udGV4dC0+cGxhdGZvcm1Db250
ZXh0KCk7CisKKyAgICBpZiAoIW1faXNBY3RpdmUpIHsKKyAgICAgICAgLy8gQXR0ZW1wdCBHTCBT
ZXR1cAorI2lmICFkZWZpbmVkKFFUX05PX09QRU5HTCkgJiYgIWRlZmluZWQoUVRfT1BFTkdMX0VT
XzFfQ0wpICYmICFkZWZpbmVkKFFUX09QRU5HTF9FU18xKQorICAgICAgICBpZiAoKHBhaW50ZXIt
PnBhaW50RW5naW5lKCktPnR5cGUoKSA9PSBRUGFpbnRFbmdpbmU6Ok9wZW5HTAorICAgICAgICAg
ICAgIHx8IHBhaW50ZXItPnBhaW50RW5naW5lKCktPnR5cGUoKSA9PSBRUGFpbnRFbmdpbmU6Ok9w
ZW5HTDIpKSB7CisgICAgICAgICAgICAvLyBTZXQgR0wgQ29udGV4dAorICAgICAgICAgICAgbV92
aWRlb1N1cmZhY2UtPnNldEdMQ29udGV4dChjb25zdF9jYXN0PFFHTENvbnRleHQqPihRR0xDb250
ZXh0OjpjdXJyZW50Q29udGV4dCgpKSk7CisKKyAgICAgICAgICAgIC8vIENoZWNrIFNoYWRlciBU
eXBlcworICAgICAgICAgICAgaWYgKG1fdmlkZW9TdXJmYWNlLT5zdXBwb3J0ZWRTaGFkZXJUeXBl
cygpICYgUVBhaW50ZXJWaWRlb1N1cmZhY2U6Okdsc2xTaGFkZXIpCisgICAgICAgICAgICAgICAg
bV92aWRlb1N1cmZhY2UtPnNldFNoYWRlclR5cGUoUVBhaW50ZXJWaWRlb1N1cmZhY2U6Okdsc2xT
aGFkZXIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fdmlkZW9TdXJmYWNl
LT5zZXRTaGFkZXJUeXBlKFFQYWludGVyVmlkZW9TdXJmYWNlOjpGcmFnbWVudFByb2dyYW1TaGFk
ZXIpOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICAvLyBTZXR1cCBDb21wbGV0ZWQKKyAg
ICAgICAgbV9pc0FjdGl2ZSA9IHRydWU7CisgICAgfQorCisgICAgLy8gUGFpbnQgdGhlIGZyYW1l
CisgICAgbV92aWRlb1N1cmZhY2UtPnBhaW50KHBhaW50ZXIsIFFSZWN0KHJlY3QpKTsKKyAgICBt
X3ZpZGVvU3VyZmFjZS0+c2V0UmVhZHkodHJ1ZSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlRGVmYXVsdDo6cmVwYWludCgpCit7CisgICAgbV9wbGF5ZXItPnJlcGFpbnQoKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjaW5jbHVkZSAibW9jX01lZGlhUGxheWVyUHJpdmF0
ZVF0LmNwcCIKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQ
cml2YXRlUXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01l
ZGlhUGxheWVyUHJpdmF0ZVF0LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTA4IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAg
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIE1lZGlhUGxheWVyUHJpdmF0ZVF0
X2gKKyNkZWZpbmUgTWVkaWFQbGF5ZXJQcml2YXRlUXRfaAorCisjaW5jbHVkZSAiTWVkaWFQbGF5
ZXJQcml2YXRlLmgiCisKKyNpbmNsdWRlIDxRTWVkaWFQbGF5ZXI+CisjaW5jbHVkZSA8UU1lZGlh
UGxheWVyQ29udHJvbD4KKyNpbmNsdWRlIDxRT2JqZWN0PgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZSA6IHB1YmxpYyBRT2JqZWN0LCBwdWJsaWMgTWVk
aWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlIHsKKworICAgIFFfT0JKRUNUCisKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlKiBjcmVhdGUoTWVkaWFQbGF5ZXIq
IHBsYXllcik7CisgICAgdmlydHVhbCB+TWVkaWFQbGF5ZXJQcml2YXRlKCk7CisKKyAgICBzdGF0
aWMgdm9pZCByZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyKTsKKyAgICBz
dGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mKTsKKyAgICBzdGF0
aWMgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiB0
eXBlLCBjb25zdCBTdHJpbmcmIGNvZGVjcyk7CisgICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUo
KSB7IHJldHVybiB0cnVlOyB9CisKKyAgICBib29sIGhhc1ZpZGVvKCkgY29uc3Q7CisgICAgYm9v
bCBoYXNBdWRpbygpIGNvbnN0OworCisgICAgdm9pZCBsb2FkKGNvbnN0IFN0cmluZyAmdXJsKTsK
KyAgICB2b2lkIGNhbmNlbExvYWQoKTsKKworICAgIHZvaWQgcGxheSgpOworICAgIHZvaWQgcGF1
c2UoKTsKKworICAgIGJvb2wgcGF1c2VkKCkgY29uc3Q7CisgICAgYm9vbCBzZWVraW5nKCkgY29u
c3Q7CisKKyAgICBmbG9hdCBkdXJhdGlvbigpIGNvbnN0OworICAgIGZsb2F0IGN1cnJlbnRUaW1l
KCkgY29uc3Q7CisgICAgdm9pZCBzZWVrKGZsb2F0KTsKKworICAgIHZvaWQgc2V0UmF0ZShmbG9h
dCk7CisgICAgdm9pZCBzZXRWb2x1bWUoZmxvYXQpOworICAgIHZvaWQgc2V0TXV0ZWQoYm9vbCk7
CisKKyAgICAvLyBTdGF0ZSBJbmZvcm1hdGlvbgorICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3Rh
dGUgbmV0d29ya1N0YXRlKCkgY29uc3Q7CisgICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVh
ZHlTdGF0ZSgpIGNvbnN0OworCisgICAgLy8gTmV0d29yayBJbmZvcm1hdGlvbgorICAgIFBhc3NS
ZWZQdHI8VGltZVJhbmdlcz4gYnVmZmVyZWQoKSBjb25zdDsKKyAgICBmbG9hdCBtYXhUaW1lU2Vl
a2FibGUoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBieXRlc0xvYWRlZCgpIGNvbnN0OworICAgIHVu
c2lnbmVkIHRvdGFsQnl0ZXMoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxl
KGJvb2wpOworCisgICAgdmlydHVhbCBJbnRTaXplIG5hdHVyYWxTaXplKCkgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRTaXplKGNvbnN0IEludFNpemUmKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKSA9IDA7CisgICAg
dmlydHVhbCBib29sIHN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0ID0gMDsKKworcHJvdGVjdGVk
IHNsb3RzOgorICAgIHZpcnR1YWwgdm9pZCBtZWRpYVN0YXR1c0NoYW5nZWQoUU1lZGlhUGxheWVy
OjpNZWRpYVN0YXR1cyk7CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUVycm9yKFFNZWRpYVBsYXll
cjo6RXJyb3IpOworICAgIHZpcnR1YWwgdm9pZCBzdGF0ZUNoYW5nZWQoUU1lZGlhUGxheWVyOjpT
dGF0ZSk7CisgICAgdmlydHVhbCB2b2lkIHBvc2l0aW9uQ2hhbmdlZChxaW50NjQpOworICAgIHZp
cnR1YWwgdm9pZCBkdXJhdGlvbkNoYW5nZWQocWludDY0KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVw
YWludCgpIHt9CisKK3Byb3RlY3RlZDoKKyAgICBNZWRpYVBsYXllclByaXZhdGUoTWVkaWFQbGF5
ZXIqKTsKKworICAgIE1lZGlhUGxheWVyKiBtX3BsYXllcjsKKyAgICBRTWVkaWFQbGF5ZXIqIG1f
bWVkaWFQbGF5ZXI7CisgICAgUU1lZGlhUGxheWVyQ29udHJvbCogbV9tZWRpYVBsYXllckNvbnRy
b2w7CisKKyAgICBtdXRhYmxlIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbV9uZXR3b3JrU3Rh
dGU7CisgICAgbXV0YWJsZSBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBtX3JlYWR5U3RhdGU7CisK
KyAgICBib29sIG1faXNWaXNpYmxlOworICAgIGJvb2wgbV9pc1NlZWtpbmc7CisgICAgcWludDY0
IG1fcXVldWVkU2VlazsKKworcHJpdmF0ZToKKyAgICB2b2lkIHVwZGF0ZVN0YXRlcygpOworfTsK
K30KKworI2VuZGlmIC8vIE1lZGlhUGxheWVyUHJpdmF0ZVF0X2gKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvUVBhaW50ZXJWaWRlb1N1cmZhY2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvUVBhaW50ZXJWaWRlb1N1cmZhY2UuY3BwCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9RUGFpbnRlclZpZGVv
U3VyZmFjZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTM4NCBAQAorLyoKKyAgICBDb3B5
cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlFQYWludGVyVmlkZW9TdXJm
YWNlLmgiCisKKyNpbmNsdWRlIDxRUGFpbnRlcj4KKyNpbmNsdWRlIDxRVmFyaWFudD4KKyNpbmNs
dWRlIDxRVmlkZW9TdXJmYWNlRm9ybWF0PgorI2luY2x1ZGUgPHFtYXRoLmg+CisKKyNpZiAhZGVm
aW5lZChRVF9OT19PUEVOR0wpICYmICFkZWZpbmVkKFFUX09QRU5HTF9FU18xX0NMKSAmJiAhZGVm
aW5lZChRVF9PUEVOR0xfRVNfMSkKKyNpbmNsdWRlIDxxZ2xzaGFkZXJwcm9ncmFtLmg+CisjZW5k
aWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBUaGVyZSBjbGFzc2VzIGRlZmluZWQgd2l0
aGluIHRoaXMgZmlsZSBhcmUgY2xhc3NlcyB3aGljaCBoYXZlIGJlZW4gYm9ycm93ZWQgZnJvbQor
Ly8gUXRNdWx0aW1lZGlhIHdoaWNoIGFyZSBkZWZpbmVkIHdpdGhpbiBwcml2YXRlIGhlYWRlcnMu
IFRoZXNlIGFyZSBiYXNpY2FsbHkgdmVyYmF0aW0gY29waWVzLgorLy8gVGhlIGluY2x1c2lvbiBv
ZiB0aGVzZSBjbGFzc2VzIHdpdGhpbiBXZWJraXQgaXMgdGVtcG9yYXJ5IC0gdGhleSB3aWxsIGJl
IHJlbW92ZWQgb25jZQorLy8gdGhlIHJlbGV2YW50IGNsYXNzZXMgaGF2ZSByZWNpZXZlZCBzdWZm
aWNpZW50IHNjcnV0aW55IGFuZCBoYXZlIGJlZW4gcHJvbW90ZWQgdG8gcHVibGljIEFQSXMuCisK
K2NsYXNzIFFWaWRlb1N1cmZhY2VQYWludGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5RVmlk
ZW9TdXJmYWNlUGFpbnRlcigpOworCisgICAgdmlydHVhbCBRTGlzdDxRVmlkZW9GcmFtZTo6UGl4
ZWxGb3JtYXQ+IHN1cHBvcnRlZFBpeGVsRm9ybWF0cygKKyAgICAgICAgICAgIFFBYnN0cmFjdFZp
ZGVvQnVmZmVyOjpIYW5kbGVUeXBlIGhhbmRsZVR5cGUpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1
YWwgYm9vbCBpc0Zvcm1hdFN1cHBvcnRlZCgKKyAgICAgICAgICAgIGNvbnN0IFFWaWRlb1N1cmZh
Y2VGb3JtYXQgJmZvcm1hdCwgUVZpZGVvU3VyZmFjZUZvcm1hdCAqc2ltaWxhcikgY29uc3QgPSAw
OworCisgICAgdmlydHVhbCBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6OkVycm9yIHN0YXJ0KGNvbnN0
IFFWaWRlb1N1cmZhY2VGb3JtYXQgJmZvcm1hdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdG9w
KCkgPSAwOworCisgICAgdmlydHVhbCBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6OkVycm9yIHNldEN1
cnJlbnRGcmFtZShjb25zdCBRVmlkZW9GcmFtZSAmZnJhbWUpID0gMDsKKworICAgIHZpcnR1YWwg
UUFic3RyYWN0VmlkZW9TdXJmYWNlOjpFcnJvciBwYWludCgKKyAgICAgICAgICAgIGNvbnN0IFFS
ZWN0RiAmdGFyZ2V0LCBRUGFpbnRlciAqcGFpbnRlciwgY29uc3QgUVJlY3RGICZzb3VyY2UpID0g
MDsKKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb2xvcnMoaW50IGJyaWdodG5lc3MsIGludCBj
b250cmFzdCwgaW50IGh1ZSwgaW50IHNhdHVyYXRpb24pID0gMDsKK307CisKK1FWaWRlb1N1cmZh
Y2VQYWludGVyOjp+UVZpZGVvU3VyZmFjZVBhaW50ZXIoKQoreworfQorCitjbGFzcyBRVmlkZW9T
dXJmYWNlUmFzdGVyUGFpbnRlciA6IHB1YmxpYyBRVmlkZW9TdXJmYWNlUGFpbnRlciB7CitwdWJs
aWM6CisgICAgUVZpZGVvU3VyZmFjZVJhc3RlclBhaW50ZXIoKTsKKworICAgIFFMaXN0PFFWaWRl
b0ZyYW1lOjpQaXhlbEZvcm1hdD4gc3VwcG9ydGVkUGl4ZWxGb3JtYXRzKAorICAgICAgICAgICAg
UUFic3RyYWN0VmlkZW9CdWZmZXI6OkhhbmRsZVR5cGUgaGFuZGxlVHlwZSkgY29uc3Q7CisKKyAg
ICBib29sIGlzRm9ybWF0U3VwcG9ydGVkKAorICAgICAgICAgICAgY29uc3QgUVZpZGVvU3VyZmFj
ZUZvcm1hdCAmZm9ybWF0LCBRVmlkZW9TdXJmYWNlRm9ybWF0ICpzaW1pbGFyKSBjb25zdDsKKwor
ICAgIFFBYnN0cmFjdFZpZGVvU3VyZmFjZTo6RXJyb3Igc3RhcnQoY29uc3QgUVZpZGVvU3VyZmFj
ZUZvcm1hdCAmZm9ybWF0KTsKKyAgICB2b2lkIHN0b3AoKTsKKworICAgIFFBYnN0cmFjdFZpZGVv
U3VyZmFjZTo6RXJyb3Igc2V0Q3VycmVudEZyYW1lKGNvbnN0IFFWaWRlb0ZyYW1lICZmcmFtZSk7
CisKKyAgICBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6OkVycm9yIHBhaW50KAorICAgICAgICAgICAg
Y29uc3QgUVJlY3RGICZ0YXJnZXQsIFFQYWludGVyICpwYWludGVyLCBjb25zdCBRUmVjdEYgJnNv
dXJjZSk7CisKKyAgICB2b2lkIHVwZGF0ZUNvbG9ycyhpbnQgYnJpZ2h0bmVzcywgaW50IGNvbnRy
YXN0LCBpbnQgaHVlLCBpbnQgc2F0dXJhdGlvbik7CisKK3ByaXZhdGU6CisgICAgUUxpc3Q8UVZp
ZGVvRnJhbWU6OlBpeGVsRm9ybWF0PiBtX2ltYWdlUGl4ZWxGb3JtYXRzOworICAgIFFWaWRlb0Zy
YW1lIG1fZnJhbWU7CisgICAgUVNpemUgbV9pbWFnZVNpemU7CisgICAgUUltYWdlOjpGb3JtYXQg
bV9pbWFnZUZvcm1hdDsKKyAgICBRVmlkZW9TdXJmYWNlRm9ybWF0OjpEaXJlY3Rpb24gbV9zY2Fu
TGluZURpcmVjdGlvbjsKK307CisKK1FWaWRlb1N1cmZhY2VSYXN0ZXJQYWludGVyOjpRVmlkZW9T
dXJmYWNlUmFzdGVyUGFpbnRlcigpCisgICAgOiBtX2ltYWdlRm9ybWF0KFFJbWFnZTo6Rm9ybWF0
X0ludmFsaWQpCisgICAgLCBtX3NjYW5MaW5lRGlyZWN0aW9uKFFWaWRlb1N1cmZhY2VGb3JtYXQ6
OlRvcFRvQm90dG9tKQoreworICAgIG1faW1hZ2VQaXhlbEZvcm1hdHMKKyAgICAgICAgPDwgUVZp
ZGVvRnJhbWU6OkZvcm1hdF9SR0IzMgorI2lmbmRlZiBRVF9PUEVOR0xfRVMgLy8gVGhlIHJhc3Rl
ciBmb3JtYXRzIHNob3VsZCBiZSBhIHN1YnNldCBvZiB0aGUgR0wgZm9ybWF0cy4KKyAgICAgICAg
PDwgUVZpZGVvRnJhbWU6OkZvcm1hdF9SR0IyNAorI2VuZGlmCisgICAgICAgIDw8IFFWaWRlb0Zy
YW1lOjpGb3JtYXRfQVJHQjMyCisgICAgICAgIDw8IFFWaWRlb0ZyYW1lOjpGb3JtYXRfUkdCNTY1
OworfQorCitRTGlzdDxRVmlkZW9GcmFtZTo6UGl4ZWxGb3JtYXQ+IFFWaWRlb1N1cmZhY2VSYXN0
ZXJQYWludGVyOjpzdXBwb3J0ZWRQaXhlbEZvcm1hdHMoCisgICAgICAgIFFBYnN0cmFjdFZpZGVv
QnVmZmVyOjpIYW5kbGVUeXBlIGhhbmRsZVR5cGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhbmRs
ZVR5cGUgPT0gUUFic3RyYWN0VmlkZW9CdWZmZXI6Ok5vSGFuZGxlCisgICAgICAgID8gbV9pbWFn
ZVBpeGVsRm9ybWF0cworICAgICAgICA6IFFMaXN0PFFWaWRlb0ZyYW1lOjpQaXhlbEZvcm1hdD4o
KTsKK30KKworYm9vbCBRVmlkZW9TdXJmYWNlUmFzdGVyUGFpbnRlcjo6aXNGb3JtYXRTdXBwb3J0
ZWQoCisgICAgICAgIGNvbnN0IFFWaWRlb1N1cmZhY2VGb3JtYXQgJmZvcm1hdCwgUVZpZGVvU3Vy
ZmFjZUZvcm1hdCAqKSBjb25zdAoreworICAgIHJldHVybiBmb3JtYXQuaGFuZGxlVHlwZSgpID09
IFFBYnN0cmFjdFZpZGVvQnVmZmVyOjpOb0hhbmRsZQorICAgICAgICAgICAgJiYgbV9pbWFnZVBp
eGVsRm9ybWF0cy5jb250YWlucyhmb3JtYXQucGl4ZWxGb3JtYXQoKSkKKyAgICAgICAgICAgICYm
ICFmb3JtYXQuZnJhbWVTaXplKCkuaXNFbXB0eSgpOworfQorCitRQWJzdHJhY3RWaWRlb1N1cmZh
Y2U6OkVycm9yIFFWaWRlb1N1cmZhY2VSYXN0ZXJQYWludGVyOjpzdGFydChjb25zdCBRVmlkZW9T
dXJmYWNlRm9ybWF0ICZmb3JtYXQpCit7CisgICAgbV9mcmFtZSA9IFFWaWRlb0ZyYW1lKCk7Cisg
ICAgbV9pbWFnZUZvcm1hdCA9IFFWaWRlb0ZyYW1lOjppbWFnZUZvcm1hdEZyb21QaXhlbEZvcm1h
dChmb3JtYXQucGl4ZWxGb3JtYXQoKSk7CisgICAgbV9pbWFnZVNpemUgPSBmb3JtYXQuZnJhbWVT
aXplKCk7CisgICAgbV9zY2FuTGluZURpcmVjdGlvbiA9IGZvcm1hdC5zY2FuTGluZURpcmVjdGlv
bigpOworCisgICAgcmV0dXJuIGZvcm1hdC5oYW5kbGVUeXBlKCkgPT0gUUFic3RyYWN0VmlkZW9C
dWZmZXI6Ok5vSGFuZGxlCisgICAgICAgICAgICAmJiBtX2ltYWdlRm9ybWF0ICE9IFFJbWFnZTo6
Rm9ybWF0X0ludmFsaWQKKyAgICAgICAgICAgICYmICFtX2ltYWdlU2l6ZS5pc0VtcHR5KCkKKyAg
ICAgICAgICAgID8gUUFic3RyYWN0VmlkZW9TdXJmYWNlOjpOb0Vycm9yCisgICAgICAgICAgICA6
IFFBYnN0cmFjdFZpZGVvU3VyZmFjZTo6VW5zdXBwb3J0ZWRGb3JtYXRFcnJvcjsKK30KKwordm9p
ZCBRVmlkZW9TdXJmYWNlUmFzdGVyUGFpbnRlcjo6c3RvcCgpCit7CisgICAgbV9mcmFtZSA9IFFW
aWRlb0ZyYW1lKCk7Cit9CisKK1FBYnN0cmFjdFZpZGVvU3VyZmFjZTo6RXJyb3IgUVZpZGVvU3Vy
ZmFjZVJhc3RlclBhaW50ZXI6OnNldEN1cnJlbnRGcmFtZShjb25zdCBRVmlkZW9GcmFtZSAmZnJh
bWUpCit7CisgICAgbV9mcmFtZSA9IGZyYW1lOworCisgICAgcmV0dXJuIFFBYnN0cmFjdFZpZGVv
U3VyZmFjZTo6Tm9FcnJvcjsKK30KKworUUFic3RyYWN0VmlkZW9TdXJmYWNlOjpFcnJvciBRVmlk
ZW9TdXJmYWNlUmFzdGVyUGFpbnRlcjo6cGFpbnQoCisgICAgICAgICAgICBjb25zdCBRUmVjdEYg
JnRhcmdldCwgUVBhaW50ZXIgKnBhaW50ZXIsIGNvbnN0IFFSZWN0RiAmc291cmNlKQoreworICAg
IGlmIChtX2ZyYW1lLm1hcChRQWJzdHJhY3RWaWRlb0J1ZmZlcjo6UmVhZE9ubHkpKSB7CisgICAg
ICAgIFFJbWFnZSBpbWFnZSgKKyAgICAgICAgICAgICAgICBtX2ZyYW1lLmJpdHMoKSwKKyAgICAg
ICAgICAgICAgICBtX2ltYWdlU2l6ZS53aWR0aCgpLAorICAgICAgICAgICAgICAgIG1faW1hZ2VT
aXplLmhlaWdodCgpLAorICAgICAgICAgICAgICAgIG1fZnJhbWUuYnl0ZXNQZXJMaW5lKCksCisg
ICAgICAgICAgICAgICAgbV9pbWFnZUZvcm1hdCk7CisKKyAgICAgICAgaWYgKG1fc2NhbkxpbmVE
aXJlY3Rpb24gPT0gUVZpZGVvU3VyZmFjZUZvcm1hdDo6Qm90dG9tVG9Ub3ApIHsKKyAgICAgICAg
ICAgIGNvbnN0IFFUcmFuc2Zvcm0gb2xkVHJhbnNmb3JtID0gcGFpbnRlci0+dHJhbnNmb3JtKCk7
CisKKyAgICAgICAgICAgIHBhaW50ZXItPnNjYWxlKDEsIC0xKTsKKyAgICAgICAgICAgIHBhaW50
ZXItPnRyYW5zbGF0ZSgwLCAtdGFyZ2V0LmJvdHRvbSgpKTsKKyAgICAgICAgICAgIHBhaW50ZXIt
PmRyYXdJbWFnZSgKKyAgICAgICAgICAgICAgICBRUmVjdEYodGFyZ2V0LngoKSwgMCwgdGFyZ2V0
LndpZHRoKCksIHRhcmdldC5oZWlnaHQoKSksIGltYWdlLCBzb3VyY2UpOworICAgICAgICAgICAg
cGFpbnRlci0+c2V0VHJhbnNmb3JtKG9sZFRyYW5zZm9ybSk7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgcGFpbnRlci0+ZHJhd0ltYWdlKHRhcmdldCwgaW1hZ2UsIHNvdXJjZSk7CisKKyAg
ICAgICAgbV9mcmFtZS51bm1hcCgpOworICAgIH0gZWxzZSBpZiAobV9mcmFtZS5pc1ZhbGlkKCkp
CisgICAgICAgIHJldHVybiBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6OkluY29ycmVjdEZvcm1hdEVy
cm9yOworICAgIGVsc2UKKyAgICAgICAgcGFpbnRlci0+ZmlsbFJlY3QodGFyZ2V0LCBRdDo6Ymxh
Y2spOworCisgICAgcmV0dXJuIFFBYnN0cmFjdFZpZGVvU3VyZmFjZTo6Tm9FcnJvcjsKK30KKwor
dm9pZCBRVmlkZW9TdXJmYWNlUmFzdGVyUGFpbnRlcjo6dXBkYXRlQ29sb3JzKGludCwgaW50LCBp
bnQsIGludCkKK3sKK30KKworI2lmICFkZWZpbmVkKFFUX05PX09QRU5HTCkgJiYgIWRlZmluZWQo
UVRfT1BFTkdMX0VTXzFfQ0wpICYmICFkZWZpbmVkKFFUX09QRU5HTF9FU18xKQorCisjaWZuZGVm
IFFfV1NfTUFDCisjIGlmbmRlZiBBUElFTlRSWVAKKyMgICBpZmRlZiBBUElFTlRSWQorIyAgICAg
ZGVmaW5lIEFQSUVOVFJZUCBBUElFTlRSWSAqCisjICAgZWxzZQorIyAgICAgZGVmaW5lIEFQSUVO
VFJZCisjICAgICBkZWZpbmUgQVBJRU5UUllQICoKKyMgICBlbmRpZgorIyBlbmRpZgorI2Vsc2UK
KyMgZGVmaW5lIEFQSUVOVFJZCisjIGRlZmluZSBBUElFTlRSWVAgKgorI2VuZGlmCisKKyNpZm5k
ZWYgR0xfVEVYVFVSRTAKKyMgIGRlZmluZSBHTF9URVhUVVJFMCAgICAweDg0QzAKKyMgIGRlZmlu
ZSBHTF9URVhUVVJFMSAgICAweDg0QzEKKyMgIGRlZmluZSBHTF9URVhUVVJFMiAgICAweDg0QzIK
KyNlbmRpZgorI2lmbmRlZiBHTF9QUk9HUkFNX0VSUk9SX1NUUklOR19BUkIKKyMgIGRlZmluZSBH
TF9QUk9HUkFNX0VSUk9SX1NUUklOR19BUkIgICAgICAgMHg4ODc0CisjZW5kaWYKKworI2lmbmRl
ZiBHTF9VTlNJR05FRF9TSE9SVF81XzZfNQorIyAgZGVmaW5lIEdMX1VOU0lHTkVEX1NIT1JUXzVf
Nl81IDMzNjM1CisjZW5kaWYKKworY2xhc3MgUVZpZGVvU3VyZmFjZUdMUGFpbnRlciA6IHB1Ymxp
YyBRVmlkZW9TdXJmYWNlUGFpbnRlciB7CitwdWJsaWM6CisgICAgUVZpZGVvU3VyZmFjZUdMUGFp
bnRlcihRR0xDb250ZXh0ICpjb250ZXh0KTsKKyAgICB+UVZpZGVvU3VyZmFjZUdMUGFpbnRlcigp
OworICAgIFFMaXN0PFFWaWRlb0ZyYW1lOjpQaXhlbEZvcm1hdD4gc3VwcG9ydGVkUGl4ZWxGb3Jt
YXRzKAorICAgICAgICAgICAgUUFic3RyYWN0VmlkZW9CdWZmZXI6OkhhbmRsZVR5cGUgaGFuZGxl
VHlwZSkgY29uc3Q7CisKKyAgICBib29sIGlzRm9ybWF0U3VwcG9ydGVkKAorICAgICAgICAgICAg
Y29uc3QgUVZpZGVvU3VyZmFjZUZvcm1hdCAmZm9ybWF0LCBRVmlkZW9TdXJmYWNlRm9ybWF0ICpz
aW1pbGFyKSBjb25zdDsKKworICAgIFFBYnN0cmFjdFZpZGVvU3VyZmFjZTo6RXJyb3Igc2V0Q3Vy
cmVudEZyYW1lKGNvbnN0IFFWaWRlb0ZyYW1lICZmcmFtZSk7CisKKyAgICB2b2lkIHVwZGF0ZUNv
bG9ycyhpbnQgYnJpZ2h0bmVzcywgaW50IGNvbnRyYXN0LCBpbnQgaHVlLCBpbnQgc2F0dXJhdGlv
bik7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGluaXRSZ2JUZXh0dXJlSW5mbyhHTGVudW0gaW50
ZXJuYWxGb3JtYXQsIEdMdWludCBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBRU2l6ZSAmc2l6
ZSk7CisgICAgdm9pZCBpbml0WXV2NDIwUFRleHR1cmVJbmZvKGNvbnN0IFFTaXplICZzaXplKTsK
KyAgICB2b2lkIGluaXRZdjEyVGV4dHVyZUluZm8oY29uc3QgUVNpemUgJnNpemUpOworCisjaWZu
ZGVmIFFUX09QRU5HTF9FUworICAgIHR5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKl9nbEFjdGl2ZVRl
eHR1cmUpIChHTGVudW0pOworICAgIF9nbEFjdGl2ZVRleHR1cmUgZ2xBY3RpdmVUZXh0dXJlOwor
I2VuZGlmCisKKyAgICBRTGlzdDxRVmlkZW9GcmFtZTo6UGl4ZWxGb3JtYXQ+IG1faW1hZ2VQaXhl
bEZvcm1hdHM7CisgICAgUUxpc3Q8UVZpZGVvRnJhbWU6OlBpeGVsRm9ybWF0PiBtX2dsUGl4ZWxG
b3JtYXRzOworICAgIFFNYXRyaXg0eDQgbV9jb2xvck1hdHJpeDsKKyAgICBRVmlkZW9GcmFtZSBt
X2ZyYW1lOworCisgICAgUUdMQ29udGV4dCogbV9jb250ZXh0OworICAgIFFBYnN0cmFjdFZpZGVv
QnVmZmVyOjpIYW5kbGVUeXBlIG1faGFuZGxlVHlwZTsKKyAgICBRVmlkZW9TdXJmYWNlRm9ybWF0
OjpEaXJlY3Rpb24gbV9zY2FuTGluZURpcmVjdGlvbjsKKyAgICBHTGVudW0gbV90ZXh0dXJlRm9y
bWF0OworICAgIEdMdWludCBtX3RleHR1cmVJbnRlcm5hbEZvcm1hdDsKKyAgICBHTGVudW0gbV90
ZXh0dXJlVHlwZTsKKyAgICBpbnQgbV90ZXh0dXJlQ291bnQ7CisgICAgR0x1aW50IG1fdGV4dHVy
ZUlkc1szXTsKKyAgICBpbnQgbV90ZXh0dXJlV2lkdGhzWzNdOworICAgIGludCBtX3RleHR1cmVI
ZWlnaHRzWzNdOworICAgIGludCBtX3RleHR1cmVPZmZzZXRzWzNdOworICAgIGJvb2wgbV95dXY7
Cit9OworCitRVmlkZW9TdXJmYWNlR0xQYWludGVyOjpRVmlkZW9TdXJmYWNlR0xQYWludGVyKFFH
TENvbnRleHQgKmNvbnRleHQpCisgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1faGFu
ZGxlVHlwZShRQWJzdHJhY3RWaWRlb0J1ZmZlcjo6Tm9IYW5kbGUpCisgICAgLCBtX3NjYW5MaW5l
RGlyZWN0aW9uKFFWaWRlb1N1cmZhY2VGb3JtYXQ6OlRvcFRvQm90dG9tKQorICAgICwgbV90ZXh0
dXJlRm9ybWF0KDApCisgICAgLCBtX3RleHR1cmVJbnRlcm5hbEZvcm1hdCgwKQorICAgICwgbV90
ZXh0dXJlVHlwZSgwKQorICAgICwgbV90ZXh0dXJlQ291bnQoMCkKKyAgICAsIG1feXV2KGZhbHNl
KQoreworI2lmbmRlZiBRVF9PUEVOR0xfRVMKKyAgICBnbEFjdGl2ZVRleHR1cmUgPSAoX2dsQWN0
aXZlVGV4dHVyZSltX2NvbnRleHQtPmdldFByb2NBZGRyZXNzKFFMYXRpbjFTdHJpbmcoImdsQWN0
aXZlVGV4dHVyZSIpKTsKKyNlbmRpZgorfQorCitRVmlkZW9TdXJmYWNlR0xQYWludGVyOjp+UVZp
ZGVvU3VyZmFjZUdMUGFpbnRlcigpCit7Cit9CisKK1FMaXN0PFFWaWRlb0ZyYW1lOjpQaXhlbEZv
cm1hdD4gUVZpZGVvU3VyZmFjZUdMUGFpbnRlcjo6c3VwcG9ydGVkUGl4ZWxGb3JtYXRzKAorICAg
ICAgICBRQWJzdHJhY3RWaWRlb0J1ZmZlcjo6SGFuZGxlVHlwZSBoYW5kbGVUeXBlKSBjb25zdAor
eworICAgIHN3aXRjaCAoaGFuZGxlVHlwZSkgeworICAgIGNhc2UgUUFic3RyYWN0VmlkZW9CdWZm
ZXI6Ok5vSGFuZGxlOgorICAgICAgICByZXR1cm4gbV9pbWFnZVBpeGVsRm9ybWF0czsKKyAgICBj
YXNlIFFBYnN0cmFjdFZpZGVvQnVmZmVyOjpHTFRleHR1cmVIYW5kbGU6CisgICAgICAgIHJldHVy
biBtX2dsUGl4ZWxGb3JtYXRzOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBRTGlzdDxR
VmlkZW9GcmFtZTo6UGl4ZWxGb3JtYXQ+KCk7CisgICAgfQorfQorCitib29sIFFWaWRlb1N1cmZh
Y2VHTFBhaW50ZXI6OmlzRm9ybWF0U3VwcG9ydGVkKAorICAgICAgICBjb25zdCBRVmlkZW9TdXJm
YWNlRm9ybWF0ICZmb3JtYXQsIFFWaWRlb1N1cmZhY2VGb3JtYXQgKikgY29uc3QKK3sKKyAgICBp
ZiAoZm9ybWF0LmZyYW1lU2l6ZSgpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgc3dpdGNoIChmb3JtYXQuaGFuZGxlVHlwZSgpKSB7CisgICAgY2FzZSBRQWJzdHJhY3RW
aWRlb0J1ZmZlcjo6Tm9IYW5kbGU6CisgICAgICAgIHJldHVybiBtX2ltYWdlUGl4ZWxGb3JtYXRz
LmNvbnRhaW5zKGZvcm1hdC5waXhlbEZvcm1hdCgpKTsKKyAgICBjYXNlIFFBYnN0cmFjdFZpZGVv
QnVmZmVyOjpHTFRleHR1cmVIYW5kbGU6CisgICAgICAgIHJldHVybiBtX2dsUGl4ZWxGb3JtYXRz
LmNvbnRhaW5zKGZvcm1hdC5waXhlbEZvcm1hdCgpKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitRQWJzdHJhY3RWaWRlb1N1cmZhY2U6OkVycm9yIFFW
aWRlb1N1cmZhY2VHTFBhaW50ZXI6OnNldEN1cnJlbnRGcmFtZShjb25zdCBRVmlkZW9GcmFtZSAm
ZnJhbWUpCit7CisgICAgbV9mcmFtZSA9IGZyYW1lOworCisgICAgaWYgKG1faGFuZGxlVHlwZSA9
PSBRQWJzdHJhY3RWaWRlb0J1ZmZlcjo6R0xUZXh0dXJlSGFuZGxlKSB7CisgICAgICAgIG1fdGV4
dHVyZUlkc1swXSA9IGZyYW1lLmhhbmRsZSgpLnRvSW50KCk7CisgICAgfSBlbHNlIGlmIChtX2Zy
YW1lLm1hcChRQWJzdHJhY3RWaWRlb0J1ZmZlcjo6UmVhZE9ubHkpKSB7CisgICAgICAgIG1fY29u
dGV4dC0+bWFrZUN1cnJlbnQoKTsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fdGV4
dHVyZUNvdW50OyArK2kpIHsKKyAgICAgICAgICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8y
RCwgbV90ZXh0dXJlSWRzW2ldKTsKKyAgICAgICAgICAgIGdsVGV4SW1hZ2UyRCgKKyAgICAgICAg
ICAgICAgICAgICAgR0xfVEVYVFVSRV8yRCwKKyAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAg
ICAgICAgICAgICAgICAgbV90ZXh0dXJlSW50ZXJuYWxGb3JtYXQsCisgICAgICAgICAgICAgICAg
ICAgIG1fdGV4dHVyZVdpZHRoc1tpXSwKKyAgICAgICAgICAgICAgICAgICAgbV90ZXh0dXJlSGVp
Z2h0c1tpXSwKKyAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgbV90
ZXh0dXJlRm9ybWF0LAorICAgICAgICAgICAgICAgICAgICBtX3RleHR1cmVUeXBlLAorICAgICAg
ICAgICAgICAgICAgICBtX2ZyYW1lLmJpdHMoKSArIG1fdGV4dHVyZU9mZnNldHNbaV0pOworICAg
ICAgICAgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJ
TFRFUiwgR0xfTElORUFSKTsKKyAgICAgICAgICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJF
XzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgICAgICAgICBnbFRl
eFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX1JFUEVBVCk7
CisgICAgICAgICAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9X
UkFQX1QsIEdMX1JFUEVBVCk7CisgICAgICAgIH0KKyAgICAgICAgbV9mcmFtZS51bm1hcCgpOwor
ICAgIH0gZWxzZSBpZiAobV9mcmFtZS5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBRQWJzdHJh
Y3RWaWRlb1N1cmZhY2U6OkluY29ycmVjdEZvcm1hdEVycm9yOworCisgICAgcmV0dXJuIFFBYnN0
cmFjdFZpZGVvU3VyZmFjZTo6Tm9FcnJvcjsKK30KKwordm9pZCBRVmlkZW9TdXJmYWNlR0xQYWlu
dGVyOjp1cGRhdGVDb2xvcnMoaW50IGJyaWdodG5lc3MsIGludCBjb250cmFzdCwgaW50IGh1ZSwg
aW50IHNhdHVyYXRpb24pCit7CisgICAgY29uc3QgcXJlYWwgYiA9IGJyaWdodG5lc3MgLyAyMDAu
MDsKKyAgICBjb25zdCBxcmVhbCBjID0gY29udHJhc3QgLyAxMDAuMCArIDEuMDsKKyAgICBjb25z
dCBxcmVhbCBoID0gaHVlIC8gMjAwLjA7CisgICAgY29uc3QgcXJlYWwgcyA9IHNhdHVyYXRpb24g
LyAxMDAuMCArIDEuMDsKKworICAgIGNvbnN0IHFyZWFsIGNvc0ggPSBxQ29zKE1fUEkgKiBoKTsK
KyAgICBjb25zdCBxcmVhbCBzaW5IID0gcVNpbihNX1BJICogaCk7CisKKyAgICBjb25zdCBxcmVh
bCBoMTEgPSAtMC40NzI4ICogY29zSCArIDAuNzk1NCAqIHNpbkggKyAxLjQ3Mjg7CisgICAgY29u
c3QgcXJlYWwgaDIxID0gLTAuOTI1MyAqIGNvc0ggLSAwLjAxMTggKiBzaW5IICsgMC45NTIzOwor
ICAgIGNvbnN0IHFyZWFsIGgzMSA9ICAwLjQ1MjUgKiBjb3NIICsgMC44MDcyICogc2luSCAtIDAu
NDUyNDsKKworICAgIGNvbnN0IHFyZWFsIGgxMiA9ICAxLjQ3MjggKiBjb3NIIC0gMS4zNzI4ICog
c2luSCAtIDEuNDcyODsKKyAgICBjb25zdCBxcmVhbCBoMjIgPSAgMS45MjUzICogY29zSCArIDAu
NTg5MSAqIHNpbkggLSAwLjkyNTM7CisgICAgY29uc3QgcXJlYWwgaDMyID0gLTAuNDUyNSAqIGNv
c0ggLSAxLjk2MTkgKiBzaW5IICsgMC40NTI1OworCisgICAgY29uc3QgcXJlYWwgaDEzID0gIDEu
NDcyOCAqIGNvc0ggLSAwLjIxODEgKiBzaW5IIC0gMS40NzI4OworICAgIGNvbnN0IHFyZWFsIGgy
MyA9ICAwLjkyNTMgKiBjb3NIICsgMS4xNjY1ICogc2luSCAtIDAuOTI1MzsKKyAgICBjb25zdCBx
cmVhbCBoMzMgPSAgMC41NDc1ICogY29zSCAtIDEuMzg0NiAqIHNpbkggKyAwLjQ1MjU7CisKKyAg
ICBjb25zdCBxcmVhbCBzciA9ICgxLjAgLSBzKSAqIDAuMzA4NjsKKyAgICBjb25zdCBxcmVhbCBz
ZyA9ICgxLjAgLSBzKSAqIDAuNjA5NDsKKyAgICBjb25zdCBxcmVhbCBzYiA9ICgxLjAgLSBzKSAq
IDAuMDgyMDsKKworICAgIGNvbnN0IHFyZWFsIHNyUyA9IHNyICsgczsKKyAgICBjb25zdCBxcmVh
bCBzZ1MgPSBzZyArIHM7CisgICAgY29uc3QgcXJlYWwgc2JTID0gc3IgKyBzOworCisgICAgY29u
c3QgZmxvYXQgbTQgPSAocyArIHNyICsgc2cgKyBzYikgKiAoMC41IC0gMC41ICogYyArIGIpOwor
CisgICAgbV9jb2xvck1hdHJpeCgwLCAwKSA9IGMgKiAoc3JTICogaDExICsgc2cgKiBoMjEgKyBz
YiAqIGgzMSk7CisgICAgbV9jb2xvck1hdHJpeCgwLCAxKSA9IGMgKiAoc3JTICogaDEyICsgc2cg
KiBoMjIgKyBzYiAqIGgzMik7CisgICAgbV9jb2xvck1hdHJpeCgwLCAyKSA9IGMgKiAoc3JTICog
aDEzICsgc2cgKiBoMjMgKyBzYiAqIGgzMyk7CisgICAgbV9jb2xvck1hdHJpeCgwLCAzKSA9IG00
OworCisgICAgbV9jb2xvck1hdHJpeCgxLCAwKSA9IGMgKiAoc3IgKiBoMTEgKyBzZ1MgKiBoMjEg
KyBzYiAqIGgzMSk7CisgICAgbV9jb2xvck1hdHJpeCgxLCAxKSA9IGMgKiAoc3IgKiBoMTIgKyBz
Z1MgKiBoMjIgKyBzYiAqIGgzMik7CisgICAgbV9jb2xvck1hdHJpeCgxLCAyKSA9IGMgKiAoc3Ig
KiBoMTMgKyBzZ1MgKiBoMjMgKyBzYiAqIGgzMyk7CisgICAgbV9jb2xvck1hdHJpeCgxLCAzKSA9
IG00OworCisgICAgbV9jb2xvck1hdHJpeCgyLCAwKSA9IGMgKiAoc3IgKiBoMTEgKyBzZyAqIGgy
MSArIHNiUyAqIGgzMSk7CisgICAgbV9jb2xvck1hdHJpeCgyLCAxKSA9IGMgKiAoc3IgKiBoMTIg
KyBzZyAqIGgyMiArIHNiUyAqIGgzMik7CisgICAgbV9jb2xvck1hdHJpeCgyLCAyKSA9IGMgKiAo
c3IgKiBoMTMgKyBzZyAqIGgyMyArIHNiUyAqIGgzMyk7CisgICAgbV9jb2xvck1hdHJpeCgyLCAz
KSA9IG00OworCisgICAgbV9jb2xvck1hdHJpeCgzLCAwKSA9IDAuMDsKKyAgICBtX2NvbG9yTWF0
cml4KDMsIDEpID0gMC4wOworICAgIG1fY29sb3JNYXRyaXgoMywgMikgPSAwLjA7CisgICAgbV9j
b2xvck1hdHJpeCgzLCAzKSA9IDEuMDsKKworICAgIGlmIChtX3l1dikgeworICAgICAgICBtX2Nv
bG9yTWF0cml4ID0gbV9jb2xvck1hdHJpeCAqIFFNYXRyaXg0eDQoCisgICAgICAgICAgICAgICAg
MS4wLCAgMC4wMDAsICAxLjE0MCwgLTAuNTcwMCwKKyAgICAgICAgICAgICAgICAxLjAsIC0wLjM5
NCwgLTAuNTgxLCAgMC40ODc1LAorICAgICAgICAgICAgICAgIDEuMCwgIDIuMDI4LCAgMC4wMDAs
IC0xLjAxNDAsCisgICAgICAgICAgICAgICAgMC4wLCAgMC4wMDAsICAwLjAwMCwgIDEuMDAwMCk7
CisgICAgfQorfQorCit2b2lkIFFWaWRlb1N1cmZhY2VHTFBhaW50ZXI6OmluaXRSZ2JUZXh0dXJl
SW5mbygKKyAgICAgICAgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgZm9ybWF0LCBHTGVu
dW0gdHlwZSwgY29uc3QgUVNpemUgJnNpemUpCit7CisgICAgbV95dXYgPSBmYWxzZTsKKyAgICBt
X3RleHR1cmVJbnRlcm5hbEZvcm1hdCA9IGludGVybmFsRm9ybWF0OworICAgIG1fdGV4dHVyZUZv
cm1hdCA9IGZvcm1hdDsKKyAgICBtX3RleHR1cmVUeXBlID0gdHlwZTsKKyAgICBtX3RleHR1cmVD
b3VudCA9IDE7CisgICAgbV90ZXh0dXJlV2lkdGhzWzBdID0gc2l6ZS53aWR0aCgpOworICAgIG1f
dGV4dHVyZUhlaWdodHNbMF0gPSBzaXplLmhlaWdodCgpOworICAgIG1fdGV4dHVyZU9mZnNldHNb
MF0gPSAwOworfQorCit2b2lkIFFWaWRlb1N1cmZhY2VHTFBhaW50ZXI6OmluaXRZdXY0MjBQVGV4
dHVyZUluZm8oY29uc3QgUVNpemUgJnNpemUpCit7CisgICAgbV95dXYgPSB0cnVlOworICAgIG1f
dGV4dHVyZUludGVybmFsRm9ybWF0ID0gR0xfTFVNSU5BTkNFOworICAgIG1fdGV4dHVyZUZvcm1h
dCA9IEdMX0xVTUlOQU5DRTsKKyAgICBtX3RleHR1cmVUeXBlID0gR0xfVU5TSUdORURfQllURTsK
KyAgICBtX3RleHR1cmVDb3VudCA9IDM7CisgICAgbV90ZXh0dXJlV2lkdGhzWzBdID0gc2l6ZS53
aWR0aCgpOworICAgIG1fdGV4dHVyZUhlaWdodHNbMF0gPSBzaXplLmhlaWdodCgpOworICAgIG1f
dGV4dHVyZU9mZnNldHNbMF0gPSAwOworICAgIG1fdGV4dHVyZVdpZHRoc1sxXSA9IHNpemUud2lk
dGgoKSAvIDI7CisgICAgbV90ZXh0dXJlSGVpZ2h0c1sxXSA9IHNpemUuaGVpZ2h0KCkgLyAyOwor
ICAgIG1fdGV4dHVyZU9mZnNldHNbMV0gPSBzaXplLndpZHRoKCkgKiBzaXplLmhlaWdodCgpOwor
ICAgIG1fdGV4dHVyZVdpZHRoc1syXSA9IHNpemUud2lkdGgoKSAvIDI7CisgICAgbV90ZXh0dXJl
SGVpZ2h0c1syXSA9IHNpemUuaGVpZ2h0KCkgLyAyOworICAgIG1fdGV4dHVyZU9mZnNldHNbMl0g
PSBzaXplLndpZHRoKCkgKiBzaXplLmhlaWdodCgpICogNSAvIDQ7Cit9CisKK3ZvaWQgUVZpZGVv
U3VyZmFjZUdMUGFpbnRlcjo6aW5pdFl2MTJUZXh0dXJlSW5mbyhjb25zdCBRU2l6ZSAmc2l6ZSkK
K3sKKyAgICBtX3l1diA9IHRydWU7CisgICAgbV90ZXh0dXJlSW50ZXJuYWxGb3JtYXQgPSBHTF9M
VU1JTkFOQ0U7CisgICAgbV90ZXh0dXJlRm9ybWF0ID0gR0xfTFVNSU5BTkNFOworICAgIG1fdGV4
dHVyZVR5cGUgPSBHTF9VTlNJR05FRF9CWVRFOworICAgIG1fdGV4dHVyZUNvdW50ID0gMzsKKyAg
ICBtX3RleHR1cmVXaWR0aHNbMF0gPSBzaXplLndpZHRoKCk7CisgICAgbV90ZXh0dXJlSGVpZ2h0
c1swXSA9IHNpemUuaGVpZ2h0KCk7CisgICAgbV90ZXh0dXJlT2Zmc2V0c1swXSA9IDA7CisgICAg
bV90ZXh0dXJlV2lkdGhzWzFdID0gc2l6ZS53aWR0aCgpIC8gMjsKKyAgICBtX3RleHR1cmVIZWln
aHRzWzFdID0gc2l6ZS5oZWlnaHQoKSAvIDI7CisgICAgbV90ZXh0dXJlT2Zmc2V0c1sxXSA9IHNp
emUud2lkdGgoKSAqIHNpemUuaGVpZ2h0KCkgKiA1IC8gNDsKKyAgICBtX3RleHR1cmVXaWR0aHNb
Ml0gPSBzaXplLndpZHRoKCkgLyAyOworICAgIG1fdGV4dHVyZUhlaWdodHNbMl0gPSBzaXplLmhl
aWdodCgpIC8gMjsKKyAgICBtX3RleHR1cmVPZmZzZXRzWzJdID0gc2l6ZS53aWR0aCgpICogc2l6
ZS5oZWlnaHQoKTsKK30KKworI2lmbmRlZiBRVF9PUEVOR0xfRVMKKworIyBpZm5kZWYgR0xfRlJB
R01FTlRfUFJPR1JBTV9BUkIKKyMgIGRlZmluZSBHTF9GUkFHTUVOVF9QUk9HUkFNX0FSQiAgICAg
ICAgICAgMHg4ODA0CisjICBkZWZpbmUgR0xfUFJPR1JBTV9GT1JNQVRfQVNDSUlfQVJCICAgICAg
IDB4ODg3NQorIyBlbmRpZgorCisvLyBQYWludHMgYW4gUkdCMzIgZnJhbWUKK3N0YXRpYyBjb25z
dCBjaGFyICpxdF9hcmJmcF94cmdiU2hhZGVyUHJvZ3JhbSA9CisgICAgIiEhQVJCZnAxLjBcbiIK
KyAgICAiUEFSQU0gbWF0cml4WzRdID0geyBwcm9ncmFtLmxvY2FsWzAuLjJdLCIKKyAgICAieyAw
LjAsIDAuMCwgMC4wLCAxLjAgfSB9O1xuIgorICAgICJURU1QIHhyZ2I7XG4iCisgICAgIlRFWCB4
cmdiLnh5eiwgZnJhZ21lbnQudGV4Y29vcmRbMF0sIHRleHR1cmVbMF0sIDJEO1xuIgorICAgICJN
T1YgeHJnYi53LCBtYXRyaXhbM10udztcbiIKKyAgICAiRFA0IHJlc3VsdC5jb2xvci54LCB4cmdi
Lnp5eHcsIG1hdHJpeFswXTtcbiIKKyAgICAiRFA0IHJlc3VsdC5jb2xvci55LCB4cmdiLnp5eHcs
IG1hdHJpeFsxXTtcbiIKKyAgICAiRFA0IHJlc3VsdC5jb2xvci56LCB4cmdiLnp5eHcsIG1hdHJp
eFsyXTtcbiIKKyAgICAiRU5EIjsKKworLy8gUGFpbnRzIGFuIEFSR0IgZnJhbWUuCitzdGF0aWMg
Y29uc3QgY2hhciAqcXRfYXJiZnBfYXJnYlNoYWRlclByb2dyYW0gPQorICAgICIhIUFSQmZwMS4w
XG4iCisgICAgIlBBUkFNIG1hdHJpeFs0XSA9IHsgcHJvZ3JhbS5sb2NhbFswLi4yXSwiCisgICAg
InsgMC4wLCAwLjAsIDAuMCwgMS4wIH0gfTtcbiIKKyAgICAiVEVNUCBhcmdiO1xuIgorICAgICJU
RVggYXJnYiwgZnJhZ21lbnQudGV4Y29vcmRbMF0sIHRleHR1cmVbMF0sIDJEO1xuIgorICAgICJN
T1YgYXJnYi53LCBtYXRyaXhbM10udztcbiIKKyAgICAiRFA0IHJlc3VsdC5jb2xvci54LCBhcmdi
Lnp5eHcsIG1hdHJpeFswXTtcbiIKKyAgICAiRFA0IHJlc3VsdC5jb2xvci55LCBhcmdiLnp5eHcs
IG1hdHJpeFsxXTtcbiIKKyAgICAiRFA0IHJlc3VsdC5jb2xvci56LCBhcmdiLnp5eHcsIG1hdHJp
eFsyXTtcbiIKKyAgICAiVEVYIHJlc3VsdC5jb2xvci53LCBmcmFnbWVudC50ZXhjb29yZFswXSwg
dGV4dHVyZSwgMkQ7XG4iCisgICAgIkVORCI7CisKKy8vIFBhaW50cyBhbiBSR0IoQSkgZnJhbWUu
CitzdGF0aWMgY29uc3QgY2hhciAqcXRfYXJiZnBfcmdiU2hhZGVyUHJvZ3JhbSA9CisgICAgIiEh
QVJCZnAxLjBcbiIKKyAgICAiUEFSQU0gbWF0cml4WzRdID0geyBwcm9ncmFtLmxvY2FsWzAuLjJd
LCIKKyAgICAieyAwLjAsIDAuMCwgMC4wLCAxLjAgfSB9O1xuIgorICAgICJURU1QIHJnYjtcbiIK
KyAgICAiVEVYIHJnYiwgZnJhZ21lbnQudGV4Y29vcmRbMF0sIHRleHR1cmVbMF0sIDJEO1xuIgor
ICAgICJNT1YgcmdiLncsIG1hdHJpeFszXS53O1xuIgorICAgICJEUDQgcmVzdWx0LmNvbG9yLngs
IHJnYiwgbWF0cml4WzBdO1xuIgorICAgICJEUDQgcmVzdWx0LmNvbG9yLnksIHJnYiwgbWF0cml4
WzFdO1xuIgorICAgICJEUDQgcmVzdWx0LmNvbG9yLnosIHJnYiwgbWF0cml4WzJdO1xuIgorICAg
ICJURVggcmVzdWx0LmNvbG9yLncsIGZyYWdtZW50LnRleGNvb3JkWzBdLCB0ZXh0dXJlLCAyRDtc
biIKKyAgICAiRU5EIjsKKworLy8gUGFpbnRzIGEgWVVWNDIwUCBvciBZVjEyIGZyYW1lLgorc3Rh
dGljIGNvbnN0IGNoYXIgKnF0X2FyYmZwX3l1dlBsYW5hclNoYWRlclByb2dyYW0gPQorICAgICIh
IUFSQmZwMS4wXG4iCisgICAgIlBBUkFNIG1hdHJpeFs0XSA9IHsgcHJvZ3JhbS5sb2NhbFswLi4y
XSwiCisgICAgInsgMC4wLCAwLjAsIDAuMCwgMS4wIH0gfTtcbiIKKyAgICAiVEVNUCB5dXY7XG4i
CisgICAgIlRFWCB5dXYueCwgZnJhZ21lbnQudGV4Y29vcmRbMF0sIHRleHR1cmVbMF0sIDJEO1xu
IgorICAgICJURVggeXV2LnksIGZyYWdtZW50LnRleGNvb3JkWzBdLCB0ZXh0dXJlWzFdLCAyRDtc
biIKKyAgICAiVEVYIHl1di56LCBmcmFnbWVudC50ZXhjb29yZFswXSwgdGV4dHVyZVsyXSwgMkQ7
XG4iCisgICAgIk1PViB5dXYudywgbWF0cml4WzNdLnc7XG4iCisgICAgIkRQNCByZXN1bHQuY29s
b3IueCwgeXV2LCBtYXRyaXhbMF07XG4iCisgICAgIkRQNCByZXN1bHQuY29sb3IueSwgeXV2LCBt
YXRyaXhbMV07XG4iCisgICAgIkRQNCByZXN1bHQuY29sb3IueiwgeXV2LCBtYXRyaXhbMl07XG4i
CisgICAgIkVORCI7CisKKworY2xhc3MgUVZpZGVvU3VyZmFjZUFyYkZwUGFpbnRlciA6IHB1Ymxp
YyBRVmlkZW9TdXJmYWNlR0xQYWludGVyIHsKK3B1YmxpYzoKKyAgICBRVmlkZW9TdXJmYWNlQXJi
RnBQYWludGVyKFFHTENvbnRleHQgKmNvbnRleHQpOworCisgICAgUUFic3RyYWN0VmlkZW9TdXJm
YWNlOjpFcnJvciBzdGFydChjb25zdCBRVmlkZW9TdXJmYWNlRm9ybWF0ICZmb3JtYXQpOworICAg
IHZvaWQgc3RvcCgpOworCisgICAgUUFic3RyYWN0VmlkZW9TdXJmYWNlOjpFcnJvciBwYWludCgK
KyAgICAgICAgICAgIGNvbnN0IFFSZWN0RiAmdGFyZ2V0LCBRUGFpbnRlciAqcGFpbnRlciwgY29u
c3QgUVJlY3RGICZzb3VyY2UpOworCitwcml2YXRlOgorICAgIHR5cGVkZWYgdm9pZCAoQVBJRU5U
UlkgKl9nbFByb2dyYW1TdHJpbmdBUkIpIChHTGVudW0sIEdMZW51bSwgR0xzaXplaSwgY29uc3Qg
R0x2b2lkICopOworICAgIHR5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKl9nbEJpbmRQcm9ncmFtQVJC
KSAoR0xlbnVtLCBHTHVpbnQpOworICAgIHR5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKl9nbERlbGV0
ZVByb2dyYW1zQVJCKSAoR0xzaXplaSwgY29uc3QgR0x1aW50ICopOworICAgIHR5cGVkZWYgdm9p
ZCAoQVBJRU5UUlkgKl9nbEdlblByb2dyYW1zQVJCKSAoR0xzaXplaSwgR0x1aW50ICopOworICAg
IHR5cGVkZWYgdm9pZCAoQVBJRU5UUlkgKl9nbFByb2dyYW1Mb2NhbFBhcmFtZXRlcjRmQVJCKSAo
CisgICAgICAgICAgICBHTGVudW0sIEdMdWludCwgR0xmbG9hdCwgR0xmbG9hdCwgR0xmbG9hdCwg
R0xmbG9hdCk7CisgICAgdHlwZWRlZiB2b2lkIChBUElFTlRSWSAqX2dsQWN0aXZlVGV4dHVyZSkg
KEdMZW51bSk7CisKKyAgICBfZ2xQcm9ncmFtU3RyaW5nQVJCIGdsUHJvZ3JhbVN0cmluZ0FSQjsK
KyAgICBfZ2xCaW5kUHJvZ3JhbUFSQiBnbEJpbmRQcm9ncmFtQVJCOworICAgIF9nbERlbGV0ZVBy
b2dyYW1zQVJCIGdsRGVsZXRlUHJvZ3JhbXNBUkI7CisgICAgX2dsR2VuUHJvZ3JhbXNBUkIgZ2xH
ZW5Qcm9ncmFtc0FSQjsKKyAgICBfZ2xQcm9ncmFtTG9jYWxQYXJhbWV0ZXI0ZkFSQiBnbFByb2dy
YW1Mb2NhbFBhcmFtZXRlcjRmQVJCOworCisgICAgR0x1aW50IG1fcHJvZ3JhbUlkOworICAgIFFT
aXplIG1fZnJhbWVTaXplOworfTsKKworUVZpZGVvU3VyZmFjZUFyYkZwUGFpbnRlcjo6UVZpZGVv
U3VyZmFjZUFyYkZwUGFpbnRlcihRR0xDb250ZXh0ICpjb250ZXh0KQorICAgIDogUVZpZGVvU3Vy
ZmFjZUdMUGFpbnRlcihjb250ZXh0KQorICAgICwgbV9wcm9ncmFtSWQoMCkKK3sKKyAgICBnbFBy
b2dyYW1TdHJpbmdBUkIgPSAoX2dsUHJvZ3JhbVN0cmluZ0FSQikgbV9jb250ZXh0LT5nZXRQcm9j
QWRkcmVzcygKKyAgICAgICAgICAgICAgICBRTGF0aW4xU3RyaW5nKCJnbFByb2dyYW1TdHJpbmdB
UkIiKSk7CisgICAgZ2xCaW5kUHJvZ3JhbUFSQiA9IChfZ2xCaW5kUHJvZ3JhbUFSQikgbV9jb250
ZXh0LT5nZXRQcm9jQWRkcmVzcygKKyAgICAgICAgICAgICAgICBRTGF0aW4xU3RyaW5nKCJnbEJp
bmRQcm9ncmFtQVJCIikpOworICAgIGdsRGVsZXRlUHJvZ3JhbXNBUkIgPSAoX2dsRGVsZXRlUHJv
Z3JhbXNBUkIpIG1fY29udGV4dC0+Z2V0UHJvY0FkZHJlc3MoCisgICAgICAgICAgICAgICAgUUxh
dGluMVN0cmluZygiZ2xEZWxldGVQcm9ncmFtc0FSQiIpKTsKKyAgICBnbEdlblByb2dyYW1zQVJC
ID0gKF9nbEdlblByb2dyYW1zQVJCKSBtX2NvbnRleHQtPmdldFByb2NBZGRyZXNzKAorICAgICAg
ICAgICAgICAgIFFMYXRpbjFTdHJpbmcoImdsR2VuUHJvZ3JhbXNBUkIiKSk7CisgICAgZ2xQcm9n
cmFtTG9jYWxQYXJhbWV0ZXI0ZkFSQiA9IChfZ2xQcm9ncmFtTG9jYWxQYXJhbWV0ZXI0ZkFSQikg
bV9jb250ZXh0LT5nZXRQcm9jQWRkcmVzcygKKyAgICAgICAgICAgICAgICBRTGF0aW4xU3RyaW5n
KCJnbFByb2dyYW1Mb2NhbFBhcmFtZXRlcjRmQVJCIikpOworCisgICAgbV9pbWFnZVBpeGVsRm9y
bWF0cworICAgICAgICAgICAgPDwgUVZpZGVvRnJhbWU6OkZvcm1hdF9SR0IzMgorICAgICAgICAg
ICAgPDwgUVZpZGVvRnJhbWU6OkZvcm1hdF9BUkdCMzIKKyAgICAgICAgICAgIDw8IFFWaWRlb0Zy
YW1lOjpGb3JtYXRfUkdCMjQKKyAgICAgICAgICAgIDw8IFFWaWRlb0ZyYW1lOjpGb3JtYXRfUkdC
NTY1CisgICAgICAgICAgICA8PCBRVmlkZW9GcmFtZTo6Rm9ybWF0X1lWMTIKKyAgICAgICAgICAg
IDw8IFFWaWRlb0ZyYW1lOjpGb3JtYXRfWVVWNDIwUDsKKyAgICBtX2dsUGl4ZWxGb3JtYXRzCisg
ICAgICAgICAgICA8PCBRVmlkZW9GcmFtZTo6Rm9ybWF0X1JHQjMyCisgICAgICAgICAgICA8PCBR
VmlkZW9GcmFtZTo6Rm9ybWF0X0FSR0IzMjsKK30KKworUUFic3RyYWN0VmlkZW9TdXJmYWNlOjpF
cnJvciBRVmlkZW9TdXJmYWNlQXJiRnBQYWludGVyOjpzdGFydChjb25zdCBRVmlkZW9TdXJmYWNl
Rm9ybWF0ICZmb3JtYXQpCit7CisgICAgUV9BU1NFUlQoIW1fdGV4dHVyZUNvdW50KTsKKworICAg
IFFBYnN0cmFjdFZpZGVvU3VyZmFjZTo6RXJyb3IgZXJyb3IgPSBRQWJzdHJhY3RWaWRlb1N1cmZh
Y2U6Ok5vRXJyb3I7CisKKyAgICBtX2NvbnRleHQtPm1ha2VDdXJyZW50KCk7CisKKyAgICBjb25z
dCBjaGFyICpwcm9ncmFtID0gMDsKKworICAgIGlmIChmb3JtYXQuaGFuZGxlVHlwZSgpID09IFFB
YnN0cmFjdFZpZGVvQnVmZmVyOjpOb0hhbmRsZSkgeworICAgICAgICBzd2l0Y2ggKGZvcm1hdC5w
aXhlbEZvcm1hdCgpKSB7CisgICAgICAgIGNhc2UgUVZpZGVvRnJhbWU6OkZvcm1hdF9SR0IzMjoK
KyAgICAgICAgICAgIGluaXRSZ2JUZXh0dXJlSW5mbyhHTF9SR0JBLCBHTF9SR0JBLCBHTF9VTlNJ
R05FRF9CWVRFLCBmb3JtYXQuZnJhbWVTaXplKCkpOworICAgICAgICAgICAgcHJvZ3JhbSA9IHF0
X2FyYmZwX3hyZ2JTaGFkZXJQcm9ncmFtOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgUVZpZGVvRnJhbWU6OkZvcm1hdF9BUkdCMzI6CisgICAgICAgICAgICBpbml0UmdiVGV4dHVy
ZUluZm8oR0xfUkdCQSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgZm9ybWF0LmZyYW1lU2l6
ZSgpKTsKKyAgICAgICAgICAgIHByb2dyYW0gPSBxdF9hcmJmcF9hcmdiU2hhZGVyUHJvZ3JhbTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFFWaWRlb0ZyYW1lOjpGb3JtYXRfUkdC
MjQ6CisgICAgICAgICAgICBpbml0UmdiVGV4dHVyZUluZm8oR0xfUkdCOCwgR0xfUkdCQSwgR0xf
VU5TSUdORURfQllURSwgZm9ybWF0LmZyYW1lU2l6ZSgpKTsKKyAgICAgICAgICAgIHByb2dyYW0g
PSBxdF9hcmJmcF9hcmdiU2hhZGVyUHJvZ3JhbTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFFWaWRlb0ZyYW1lOjpGb3JtYXRfUkdCNTY1OgorICAgICAgICAgICAgaW5pdFJnYlRl
eHR1cmVJbmZvKEdMX1JHQiwgR0xfUkdCLCBHTF9VTlNJR05FRF9TSE9SVF81XzZfNSwgZm9ybWF0
LmZyYW1lU2l6ZSgpKTsKKyAgICAgICAgICAgIHByb2dyYW0gPSBxdF9hcmJmcF9yZ2JTaGFkZXJQ
cm9ncmFtOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUVZpZGVvRnJhbWU6OkZv
cm1hdF9ZVjEyOgorICAgICAgICAgICAgaW5pdFl2MTJUZXh0dXJlSW5mbyhmb3JtYXQuZnJhbWVT
aXplKCkpOworICAgICAgICAgICAgcHJvZ3JhbSA9IHF0X2FyYmZwX3l1dlBsYW5hclNoYWRlclBy
b2dyYW07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBRVmlkZW9GcmFtZTo6Rm9y
bWF0X1lVVjQyMFA6CisgICAgICAgICAgICBpbml0WXV2NDIwUFRleHR1cmVJbmZvKGZvcm1hdC5m
cmFtZVNpemUoKSk7CisgICAgICAgICAgICBwcm9ncmFtID0gcXRfYXJiZnBfeXV2UGxhbmFyU2hh
ZGVyUHJvZ3JhbTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGZvcm1hdC5oYW5kbGVUeXBl
KCkgPT0gUUFic3RyYWN0VmlkZW9CdWZmZXI6OkdMVGV4dHVyZUhhbmRsZSkgeworICAgICAgICBz
d2l0Y2ggKGZvcm1hdC5waXhlbEZvcm1hdCgpKSB7CisgICAgICAgIGNhc2UgUVZpZGVvRnJhbWU6
OkZvcm1hdF9SR0IzMjoKKyAgICAgICAgY2FzZSBRVmlkZW9GcmFtZTo6Rm9ybWF0X0FSR0IzMjoK
KyAgICAgICAgICAgIG1feXV2ID0gZmFsc2U7CisgICAgICAgICAgICBtX3RleHR1cmVDb3VudCA9
IDE7CisgICAgICAgICAgICBwcm9ncmFtID0gcXRfYXJiZnBfcmdiU2hhZGVyUHJvZ3JhbTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIXByb2dyYW0pCisgICAgICAgIGVycm9yID0gUUFi
c3RyYWN0VmlkZW9TdXJmYWNlOjpVbnN1cHBvcnRlZEZvcm1hdEVycm9yOworICAgIGVsc2Ugewor
ICAgICAgICBnbEdlblByb2dyYW1zQVJCKDEsICZtX3Byb2dyYW1JZCk7CisKKyAgICAgICAgR0xl
bnVtIGdsRXJyb3IgPSBnbEdldEVycm9yKCk7CisgICAgICAgIGlmIChnbEVycm9yICE9IEdMX05P
X0VSUk9SKSB7CisgICAgICAgICAgICBxV2FybmluZygiUVBhaW50ZXJWaWRlb1N1cmZhY2U6IEFS
QmZiIFNoYWRlciBhbGxvY2F0aW9uIGVycm9yICV4IiwgaW50KGdsRXJyb3IpKTsKKyAgICAgICAg
ICAgIG1fdGV4dHVyZUNvdW50ID0gMDsKKyAgICAgICAgICAgIG1fcHJvZ3JhbUlkID0gMDsKKwor
ICAgICAgICAgICAgZXJyb3IgPSBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6OlJlc291cmNlRXJyb3I7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBnbEJpbmRQcm9ncmFtQVJCKEdMX0ZSQUdN
RU5UX1BST0dSQU1fQVJCLCBtX3Byb2dyYW1JZCk7CisgICAgICAgICAgICBnbFByb2dyYW1TdHJp
bmdBUkIoCisgICAgICAgICAgICAgICAgICAgIEdMX0ZSQUdNRU5UX1BST0dSQU1fQVJCLAorICAg
ICAgICAgICAgICAgICAgICBHTF9QUk9HUkFNX0ZPUk1BVF9BU0NJSV9BUkIsCisgICAgICAgICAg
ICAgICAgICAgIHFzdHJsZW4ocHJvZ3JhbSksCisgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgR0x2b2lkICo+KHByb2dyYW0pKTsKKworICAgICAgICAgICAgaWYgKChn
bEVycm9yID0gZ2xHZXRFcnJvcigpKSAhPSBHTF9OT19FUlJPUikgeworICAgICAgICAgICAgICAg
IGNvbnN0IEdMdWJ5dGUqIGVycm9yU3RyaW5nID0gZ2xHZXRTdHJpbmcoR0xfUFJPR1JBTV9FUlJP
Ul9TVFJJTkdfQVJCKTsKKworICAgICAgICAgICAgICAgIHFXYXJuaW5nKCJRUGFpbnRlclZpZGVv
U3VyZmFjZTogQVJCZnAgU2hhZGVyIGNvbXBpbGUgZXJyb3IgJXgsICVzIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQoZ2xFcnJvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBjaGFyICo+KGVycm9yU3RyaW5nKSk7CisgICAgICAgICAgICAg
ICAgZ2xEZWxldGVQcm9ncmFtc0FSQigxLCAmbV9wcm9ncmFtSWQpOworCisgICAgICAgICAgICAg
ICAgbV90ZXh0dXJlQ291bnQgPSAwOworICAgICAgICAgICAgICAgIG1fcHJvZ3JhbUlkID0gMDsK
KworICAgICAgICAgICAgICAgIGVycm9yID0gUUFic3RyYWN0VmlkZW9TdXJmYWNlOjpSZXNvdXJj
ZUVycm9yOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtX2hhbmRsZVR5
cGUgPSBmb3JtYXQuaGFuZGxlVHlwZSgpOworICAgICAgICAgICAgICAgIG1fc2NhbkxpbmVEaXJl
Y3Rpb24gPSBmb3JtYXQuc2NhbkxpbmVEaXJlY3Rpb24oKTsKKyAgICAgICAgICAgICAgICBtX2Zy
YW1lU2l6ZSA9IGZvcm1hdC5mcmFtZVNpemUoKTsKKworICAgICAgICAgICAgICAgIGlmIChtX2hh
bmRsZVR5cGUgPT0gUUFic3RyYWN0VmlkZW9CdWZmZXI6Ok5vSGFuZGxlKQorICAgICAgICAgICAg
ICAgICAgICBnbEdlblRleHR1cmVzKG1fdGV4dHVyZUNvdW50LCBtX3RleHR1cmVJZHMpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworfQorCit2
b2lkIFFWaWRlb1N1cmZhY2VBcmJGcFBhaW50ZXI6OnN0b3AoKQoreworICAgIG1fY29udGV4dC0+
bWFrZUN1cnJlbnQoKTsKKworICAgIGlmIChtX2hhbmRsZVR5cGUgIT0gUUFic3RyYWN0VmlkZW9C
dWZmZXI6OkdMVGV4dHVyZUhhbmRsZSkKKyAgICAgICAgZ2xEZWxldGVUZXh0dXJlcyhtX3RleHR1
cmVDb3VudCwgbV90ZXh0dXJlSWRzKTsKKyAgICBnbERlbGV0ZVByb2dyYW1zQVJCKDEsICZtX3By
b2dyYW1JZCk7CisKKyAgICBtX3RleHR1cmVDb3VudCA9IDA7CisgICAgbV9wcm9ncmFtSWQgPSAw
OworICAgIG1faGFuZGxlVHlwZSA9IFFBYnN0cmFjdFZpZGVvQnVmZmVyOjpOb0hhbmRsZTsKK30K
KworUUFic3RyYWN0VmlkZW9TdXJmYWNlOjpFcnJvciBRVmlkZW9TdXJmYWNlQXJiRnBQYWludGVy
OjpwYWludCgKKyAgICAgICAgY29uc3QgUVJlY3RGICZ0YXJnZXQsIFFQYWludGVyICpwYWludGVy
LCBjb25zdCBRUmVjdEYgJnNvdXJjZSkKK3sKKyAgICBpZiAobV9mcmFtZS5pc1ZhbGlkKCkpIHsK
KyAgICAgICAgcGFpbnRlci0+YmVnaW5OYXRpdmVQYWludGluZygpOworCisgICAgICAgIGNvbnN0
IGZsb2F0IHR4TGVmdCA9IHNvdXJjZS5sZWZ0KCkgLyBtX2ZyYW1lU2l6ZS53aWR0aCgpOworICAg
ICAgICBjb25zdCBmbG9hdCB0eFJpZ2h0ID0gc291cmNlLnJpZ2h0KCkgLyBtX2ZyYW1lU2l6ZS53
aWR0aCgpOworICAgICAgICBjb25zdCBmbG9hdCB0eFRvcCA9IG1fc2NhbkxpbmVEaXJlY3Rpb24g
PT0gUVZpZGVvU3VyZmFjZUZvcm1hdDo6VG9wVG9Cb3R0b20KKyAgICAgICAgICAgICAgICA/IHNv
dXJjZS50b3AoKSAvIG1fZnJhbWVTaXplLmhlaWdodCgpCisgICAgICAgICAgICAgICAgOiBzb3Vy
Y2UuYm90dG9tKCkgLyBtX2ZyYW1lU2l6ZS5oZWlnaHQoKTsKKyAgICAgICAgY29uc3QgZmxvYXQg
dHhCb3R0b20gPSBtX3NjYW5MaW5lRGlyZWN0aW9uID09IFFWaWRlb1N1cmZhY2VGb3JtYXQ6OlRv
cFRvQm90dG9tCisgICAgICAgICAgICAgICAgPyBzb3VyY2UuYm90dG9tKCkgLyBtX2ZyYW1lU2l6
ZS5oZWlnaHQoKQorICAgICAgICAgICAgICAgIDogc291cmNlLnRvcCgpIC8gbV9mcmFtZVNpemUu
aGVpZ2h0KCk7CisKKyAgICAgICAgY29uc3QgZmxvYXQgdHhBcnJheVtdID0KKyAgICAgICAgewor
ICAgICAgICAgICAgdHhMZWZ0ICwgdHhCb3R0b20sCisgICAgICAgICAgICB0eFJpZ2h0LCB0eEJv
dHRvbSwKKyAgICAgICAgICAgIHR4TGVmdCAsIHR4VG9wLAorICAgICAgICAgICAgdHhSaWdodCwg
dHhUb3AKKyAgICAgICAgfTsKKworICAgICAgICBjb25zdCBHTGZsb2F0IHZUb3AgPSBtX3NjYW5M
aW5lRGlyZWN0aW9uID09IFFWaWRlb1N1cmZhY2VGb3JtYXQ6OlRvcFRvQm90dG9tCisgICAgICAg
ICAgICAgICAgPyB0YXJnZXQudG9wKCkKKyAgICAgICAgICAgICAgICA6IHRhcmdldC5ib3R0b20o
KSArIDE7CisgICAgICAgIGNvbnN0IEdMZmxvYXQgdkJvdHRvbSA9IG1fc2NhbkxpbmVEaXJlY3Rp
b24gPT0gUVZpZGVvU3VyZmFjZUZvcm1hdDo6VG9wVG9Cb3R0b20KKyAgICAgICAgICAgICAgICA/
IHRhcmdldC5ib3R0b20oKSArIDEKKyAgICAgICAgICAgICAgICA6IHRhcmdldC50b3AoKTsKKwor
ICAgICAgICBjb25zdCBHTGZsb2F0IHZBcnJheVtdID0KKyAgICAgICAgeworICAgICAgICAgICAg
dGFyZ2V0LmxlZnQoKSAgICAgLCB2Qm90dG9tLAorICAgICAgICAgICAgdGFyZ2V0LnJpZ2h0KCkg
KyAxLCB2Qm90dG9tLAorICAgICAgICAgICAgdGFyZ2V0LmxlZnQoKSAgICAgLCB2VG9wLAorICAg
ICAgICAgICAgdGFyZ2V0LnJpZ2h0KCkgKyAxLCB2VG9wCisgICAgICAgIH07CisKKyAgICAgICAg
Z2xFbmFibGUoR0xfRlJBR01FTlRfUFJPR1JBTV9BUkIpOworICAgICAgICBnbEJpbmRQcm9ncmFt
QVJCKEdMX0ZSQUdNRU5UX1BST0dSQU1fQVJCLCBtX3Byb2dyYW1JZCk7CisKKyAgICAgICAgZ2xQ
cm9ncmFtTG9jYWxQYXJhbWV0ZXI0ZkFSQigKKyAgICAgICAgICAgICAgICBHTF9GUkFHTUVOVF9Q
Uk9HUkFNX0FSQiwKKyAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgIG1fY29sb3JN
YXRyaXgoMCwgMCksCisgICAgICAgICAgICAgICAgbV9jb2xvck1hdHJpeCgwLCAxKSwKKyAgICAg
ICAgICAgICAgICBtX2NvbG9yTWF0cml4KDAsIDIpLAorICAgICAgICAgICAgICAgIG1fY29sb3JN
YXRyaXgoMCwgMykpOworICAgICAgICBnbFByb2dyYW1Mb2NhbFBhcmFtZXRlcjRmQVJCKAorICAg
ICAgICAgICAgICAgIEdMX0ZSQUdNRU5UX1BST0dSQU1fQVJCLAorICAgICAgICAgICAgICAgIDEs
CisgICAgICAgICAgICAgICAgbV9jb2xvck1hdHJpeCgxLCAwKSwKKyAgICAgICAgICAgICAgICBt
X2NvbG9yTWF0cml4KDEsIDEpLAorICAgICAgICAgICAgICAgIG1fY29sb3JNYXRyaXgoMSwgMiks
CisgICAgICAgICAgICAgICAgbV9jb2xvck1hdHJpeCgxLCAzKSk7CisgICAgICAgIGdsUHJvZ3Jh
bUxvY2FsUGFyYW1ldGVyNGZBUkIoCisgICAgICAgICAgICAgICAgR0xfRlJBR01FTlRfUFJPR1JB
TV9BUkIsCisgICAgICAgICAgICAgICAgMiwKKyAgICAgICAgICAgICAgICBtX2NvbG9yTWF0cml4
KDIsIDApLAorICAgICAgICAgICAgICAgIG1fY29sb3JNYXRyaXgoMiwgMSksCisgICAgICAgICAg
ICAgICAgbV9jb2xvck1hdHJpeCgyLCAyKSwKKyAgICAgICAgICAgICAgICBtX2NvbG9yTWF0cml4
KDIsIDMpKTsKKworICAgICAgICBnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApOworICAgICAg
ICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZUlkc1swXSk7CisKKyAgICAg
ICAgaWYgKG1fdGV4dHVyZUNvdW50ID09IDMpIHsKKyAgICAgICAgICAgIGdsQWN0aXZlVGV4dHVy
ZShHTF9URVhUVVJFMSk7CisgICAgICAgICAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQs
IG1fdGV4dHVyZUlkc1sxXSk7CisgICAgICAgICAgICBnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVS
RTIpOworICAgICAgICAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmVJ
ZHNbMl0pOworICAgICAgICAgICAgZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGdsVmVydGV4UG9pbnRlcigyLCBHTF9GTE9BVCwgMCwgdkFycmF5KTsK
KyAgICAgICAgZ2xUZXhDb29yZFBvaW50ZXIoMiwgR0xfRkxPQVQsIDAsIHR4QXJyYXkpOworCisg
ICAgICAgIGdsRW5hYmxlQ2xpZW50U3RhdGUoR0xfVkVSVEVYX0FSUkFZKTsKKyAgICAgICAgZ2xF
bmFibGVDbGllbnRTdGF0ZShHTF9URVhUVVJFX0NPT1JEX0FSUkFZKTsKKworICAgICAgICBnbERy
YXdBcnJheXMoR0xfVFJJQU5HTEVfU1RSSVAsIDAsIDQpOworCisgICAgICAgIGdsRGlzYWJsZUNs
aWVudFN0YXRlKEdMX1RFWFRVUkVfQ09PUkRfQVJSQVkpOworICAgICAgICBnbERpc2FibGVDbGll
bnRTdGF0ZShHTF9WRVJURVhfQVJSQVkpOworICAgICAgICBnbERpc2FibGUoR0xfRlJBR01FTlRf
UFJPR1JBTV9BUkIpOworCisgICAgICAgIHBhaW50ZXItPmVuZE5hdGl2ZVBhaW50aW5nKCk7Cisg
ICAgfQorICAgIHJldHVybiBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6Ok5vRXJyb3I7Cit9CisKKyNl
bmRpZgorCitzdGF0aWMgY29uc3QgY2hhciAqcXRfZ2xzbF92ZXJ0ZXhTaGFkZXJQcm9ncmFtID0K
KyAgICAgICAgImF0dHJpYnV0ZSBoaWdocCB2ZWM0IHZlcnRleENvb3JkQXJyYXk7XG4iCisgICAg
ICAgICJhdHRyaWJ1dGUgaGlnaHAgdmVjMiB0ZXh0dXJlQ29vcmRBcnJheTtcbiIKKyAgICAgICAg
InVuaWZvcm0gaGlnaHAgbWF0NCBwb3NpdGlvbk1hdHJpeDtcbiIKKyAgICAgICAgInZhcnlpbmcg
aGlnaHAgdmVjMiB0ZXh0dXJlQ29vcmQ7XG4iCisgICAgICAgICJ2b2lkIG1haW4odm9pZClcbiIK
KyAgICAgICAgIntcbiIKKyAgICAgICAgIiAgIGdsX1Bvc2l0aW9uID0gcG9zaXRpb25NYXRyaXgg
KiB2ZXJ0ZXhDb29yZEFycmF5O1xuIgorICAgICAgICAiICAgdGV4dHVyZUNvb3JkID0gdGV4dHVy
ZUNvb3JkQXJyYXk7XG4iCisgICAgICAgICJ9XG4iOworCisvLyBQYWludHMgYW4gUkdCMzIgZnJh
bWUKK3N0YXRpYyBjb25zdCBjaGFyICpxdF9nbHNsX3hyZ2JTaGFkZXJQcm9ncmFtID0KKyAgICAg
ICAgInVuaWZvcm0gc2FtcGxlcjJEIHRleFJnYjtcbiIKKyAgICAgICAgInVuaWZvcm0gbWVkaXVt
cCBtYXQ0IGNvbG9yTWF0cml4O1xuIgorICAgICAgICAidmFyeWluZyBoaWdocCB2ZWMyIHRleHR1
cmVDb29yZDtcbiIKKyAgICAgICAgInZvaWQgbWFpbih2b2lkKVxuIgorICAgICAgICAie1xuIgor
ICAgICAgICAiICAgIGhpZ2hwIHZlYzQgY29sb3IgPSB2ZWM0KHRleHR1cmUyRCh0ZXhSZ2IsIHRl
eHR1cmVDb29yZC5zdCkuYmdyLCAxLjApO1xuIgorICAgICAgICAiICAgIGdsX0ZyYWdDb2xvciA9
IGNvbG9yTWF0cml4ICogY29sb3I7XG4iCisgICAgICAgICJ9XG4iOworCisvLyBQYWludHMgYW4g
QVJHQiBmcmFtZS4KK3N0YXRpYyBjb25zdCBjaGFyICpxdF9nbHNsX2FyZ2JTaGFkZXJQcm9ncmFt
ID0KKyAgICAgICAgInVuaWZvcm0gc2FtcGxlcjJEIHRleFJnYjtcbiIKKyAgICAgICAgInVuaWZv
cm0gbWVkaXVtcCBtYXQ0IGNvbG9yTWF0cml4O1xuIgorICAgICAgICAidmFyeWluZyBoaWdocCB2
ZWMyIHRleHR1cmVDb29yZDtcbiIKKyAgICAgICAgInZvaWQgbWFpbih2b2lkKVxuIgorICAgICAg
ICAie1xuIgorICAgICAgICAiICAgIGhpZ2hwIHZlYzQgY29sb3IgPSB2ZWM0KHRleHR1cmUyRCh0
ZXhSZ2IsIHRleHR1cmVDb29yZC5zdCkuYmdyLCAxLjApO1xuIgorICAgICAgICAiICAgIGNvbG9y
ID0gY29sb3JNYXRyaXggKiBjb2xvcjtcbiIKKyAgICAgICAgIiAgICBnbF9GcmFnQ29sb3IgPSB2
ZWM0KGNvbG9yLnJnYiwgdGV4dHVyZTJEKHRleFJnYiwgdGV4dHVyZUNvb3JkLnN0KS5hKTtcbiIK
KyAgICAgICAgIn1cbiI7CisKKy8vIFBhaW50cyBhbiBSR0IoQSkgZnJhbWUuCitzdGF0aWMgY29u
c3QgY2hhciAqcXRfZ2xzbF9yZ2JTaGFkZXJQcm9ncmFtID0KKyAgICAgICAgInVuaWZvcm0gc2Ft
cGxlcjJEIHRleFJnYjtcbiIKKyAgICAgICAgInVuaWZvcm0gbWVkaXVtcCBtYXQ0IGNvbG9yTWF0
cml4O1xuIgorICAgICAgICAidmFyeWluZyBoaWdocCB2ZWMyIHRleHR1cmVDb29yZDtcbiIKKyAg
ICAgICAgInZvaWQgbWFpbih2b2lkKVxuIgorICAgICAgICAie1xuIgorICAgICAgICAiICAgIGhp
Z2hwIHZlYzQgY29sb3IgPSB2ZWM0KHRleHR1cmUyRCh0ZXhSZ2IsIHRleHR1cmVDb29yZC5zdCku
cmdiLCAxLjApO1xuIgorICAgICAgICAiICAgIGNvbG9yID0gY29sb3JNYXRyaXggKiBjb2xvcjtc
biIKKyAgICAgICAgIiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYiwgdGV4dHVyZTJE
KHRleFJnYiwgdGV4dHVyZUNvb3JkLnN0KS5hKTtcbiIKKyAgICAgICAgIn1cbiI7CisKKy8vIFBh
aW50cyBhIFlVVjQyMFAgb3IgWVYxMiBmcmFtZS4KK3N0YXRpYyBjb25zdCBjaGFyICpxdF9nbHNs
X3l1dlBsYW5hclNoYWRlclByb2dyYW0gPQorICAgICAgICAidW5pZm9ybSBzYW1wbGVyMkQgdGV4
WTtcbiIKKyAgICAgICAgInVuaWZvcm0gc2FtcGxlcjJEIHRleFU7XG4iCisgICAgICAgICJ1bmlm
b3JtIHNhbXBsZXIyRCB0ZXhWO1xuIgorICAgICAgICAidW5pZm9ybSBtZWRpdW1wIG1hdDQgY29s
b3JNYXRyaXg7XG4iCisgICAgICAgICJ2YXJ5aW5nIGhpZ2hwIHZlYzIgdGV4dHVyZUNvb3JkO1xu
IgorICAgICAgICAidm9pZCBtYWluKHZvaWQpXG4iCisgICAgICAgICJ7XG4iCisgICAgICAgICIg
ICAgaGlnaHAgdmVjNCBjb2xvciA9IHZlYzQoXG4iCisgICAgICAgICIgICAgICAgICAgIHRleHR1
cmUyRCh0ZXhZLCB0ZXh0dXJlQ29vcmQuc3QpLnIsXG4iCisgICAgICAgICIgICAgICAgICAgIHRl
eHR1cmUyRCh0ZXhVLCB0ZXh0dXJlQ29vcmQuc3QpLnIsXG4iCisgICAgICAgICIgICAgICAgICAg
IHRleHR1cmUyRCh0ZXhWLCB0ZXh0dXJlQ29vcmQuc3QpLnIsXG4iCisgICAgICAgICIgICAgICAg
ICAgIDEuMCk7XG4iCisgICAgICAgICIgICAgZ2xfRnJhZ0NvbG9yID0gY29sb3JNYXRyaXggKiBj
b2xvcjtcbiIKKyAgICAgICAgIn1cbiI7CisKKworY2xhc3MgUVZpZGVvU3VyZmFjZUdsc2xQYWlu
dGVyIDogcHVibGljIFFWaWRlb1N1cmZhY2VHTFBhaW50ZXIgeworcHVibGljOgorICAgIFFWaWRl
b1N1cmZhY2VHbHNsUGFpbnRlcihRR0xDb250ZXh0ICpjb250ZXh0KTsKKworICAgIFFBYnN0cmFj
dFZpZGVvU3VyZmFjZTo6RXJyb3Igc3RhcnQoY29uc3QgUVZpZGVvU3VyZmFjZUZvcm1hdCAmZm9y
bWF0KTsKKyAgICB2b2lkIHN0b3AoKTsKKworICAgIFFBYnN0cmFjdFZpZGVvU3VyZmFjZTo6RXJy
b3IgcGFpbnQoCisgICAgICAgICAgICBjb25zdCBRUmVjdEYgJnRhcmdldCwgUVBhaW50ZXIgKnBh
aW50ZXIsIGNvbnN0IFFSZWN0RiAmc291cmNlKTsKKworcHJpdmF0ZToKKyAgICBRR0xTaGFkZXJQ
cm9ncmFtIG1fcHJvZ3JhbTsKKyAgICBRU2l6ZSBtX2ZyYW1lU2l6ZTsKK307CisKK1FWaWRlb1N1
cmZhY2VHbHNsUGFpbnRlcjo6UVZpZGVvU3VyZmFjZUdsc2xQYWludGVyKFFHTENvbnRleHQgKmNv
bnRleHQpCisgICAgOiBRVmlkZW9TdXJmYWNlR0xQYWludGVyKGNvbnRleHQpCisgICAgLCBtX3By
b2dyYW0oY29udGV4dCkKK3sKKyAgICBtX2ltYWdlUGl4ZWxGb3JtYXRzCisgICAgICAgICAgICA8
PCBRVmlkZW9GcmFtZTo6Rm9ybWF0X1JHQjMyCisgICAgICAgICAgICA8PCBRVmlkZW9GcmFtZTo6
Rm9ybWF0X0FSR0IzMgorI2lmbmRlZiBRVF9PUEVOR0xfRVMKKyAgICAgICAgICAgIDw8IFFWaWRl
b0ZyYW1lOjpGb3JtYXRfUkdCMjQKKyNlbmRpZgorICAgICAgICAgICAgPDwgUVZpZGVvRnJhbWU6
OkZvcm1hdF9SR0I1NjUKKyAgICAgICAgICAgIDw8IFFWaWRlb0ZyYW1lOjpGb3JtYXRfWVYxMgor
ICAgICAgICAgICAgPDwgUVZpZGVvRnJhbWU6OkZvcm1hdF9ZVVY0MjBQOworICAgIG1fZ2xQaXhl
bEZvcm1hdHMKKyAgICAgICAgICAgIDw8IFFWaWRlb0ZyYW1lOjpGb3JtYXRfUkdCMzIKKyAgICAg
ICAgICAgIDw8IFFWaWRlb0ZyYW1lOjpGb3JtYXRfQVJHQjMyOworfQorCitRQWJzdHJhY3RWaWRl
b1N1cmZhY2U6OkVycm9yIFFWaWRlb1N1cmZhY2VHbHNsUGFpbnRlcjo6c3RhcnQoY29uc3QgUVZp
ZGVvU3VyZmFjZUZvcm1hdCAmZm9ybWF0KQoreworICAgIFFfQVNTRVJUKCFtX3RleHR1cmVDb3Vu
dCk7CisKKyAgICBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6OkVycm9yIGVycm9yID0gUUFic3RyYWN0
VmlkZW9TdXJmYWNlOjpOb0Vycm9yOworCisgICAgbV9jb250ZXh0LT5tYWtlQ3VycmVudCgpOwor
CisgICAgY29uc3QgY2hhciAqZnJhZ21lbnRQcm9ncmFtID0gMDsKKworICAgIGlmIChmb3JtYXQu
aGFuZGxlVHlwZSgpID09IFFBYnN0cmFjdFZpZGVvQnVmZmVyOjpOb0hhbmRsZSkgeworICAgICAg
ICBzd2l0Y2ggKGZvcm1hdC5waXhlbEZvcm1hdCgpKSB7CisgICAgICAgIGNhc2UgUVZpZGVvRnJh
bWU6OkZvcm1hdF9SR0IzMjoKKyAgICAgICAgICAgIGluaXRSZ2JUZXh0dXJlSW5mbyhHTF9SR0JB
LCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBmb3JtYXQuZnJhbWVTaXplKCkpOworICAgICAg
ICAgICAgZnJhZ21lbnRQcm9ncmFtID0gcXRfZ2xzbF94cmdiU2hhZGVyUHJvZ3JhbTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFFWaWRlb0ZyYW1lOjpGb3JtYXRfQVJHQjMyOgor
ICAgICAgICAgICAgaW5pdFJnYlRleHR1cmVJbmZvKEdMX1JHQkEsIEdMX1JHQkEsIEdMX1VOU0lH
TkVEX0JZVEUsIGZvcm1hdC5mcmFtZVNpemUoKSk7CisgICAgICAgICAgICBmcmFnbWVudFByb2dy
YW0gPSBxdF9nbHNsX2FyZ2JTaGFkZXJQcm9ncmFtOworICAgICAgICAgICAgYnJlYWs7CisjaWZu
ZGVmIFFUX09QRU5HTF9FUworICAgICAgICBjYXNlIFFWaWRlb0ZyYW1lOjpGb3JtYXRfUkdCMjQ6
CisgICAgICAgICAgICBpbml0UmdiVGV4dHVyZUluZm8oR0xfUkdCOCwgR0xfUkdCLCBHTF9VTlNJ
R05FRF9CWVRFLCBmb3JtYXQuZnJhbWVTaXplKCkpOworICAgICAgICAgICAgZnJhZ21lbnRQcm9n
cmFtID0gcXRfZ2xzbF9yZ2JTaGFkZXJQcm9ncmFtOworICAgICAgICAgICAgYnJlYWs7CisjZW5k
aWYKKyAgICAgICAgY2FzZSBRVmlkZW9GcmFtZTo6Rm9ybWF0X1JHQjU2NToKKyAgICAgICAgICAg
IGluaXRSZ2JUZXh0dXJlSW5mbyhHTF9SR0IsIEdMX1JHQiwgR0xfVU5TSUdORURfU0hPUlRfNV82
XzUsIGZvcm1hdC5mcmFtZVNpemUoKSk7CisgICAgICAgICAgICBmcmFnbWVudFByb2dyYW0gPSBx
dF9nbHNsX3JnYlNoYWRlclByb2dyYW07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBRVmlkZW9GcmFtZTo6Rm9ybWF0X1lWMTI6CisgICAgICAgICAgICBpbml0WXYxMlRleHR1cmVJ
bmZvKGZvcm1hdC5mcmFtZVNpemUoKSk7CisgICAgICAgICAgICBmcmFnbWVudFByb2dyYW0gPSBx
dF9nbHNsX3l1dlBsYW5hclNoYWRlclByb2dyYW07CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBRVmlkZW9GcmFtZTo6Rm9ybWF0X1lVVjQyMFA6CisgICAgICAgICAgICBpbml0WXV2
NDIwUFRleHR1cmVJbmZvKGZvcm1hdC5mcmFtZVNpemUoKSk7CisgICAgICAgICAgICBmcmFnbWVu
dFByb2dyYW0gPSBxdF9nbHNsX3l1dlBsYW5hclNoYWRlclByb2dyYW07CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgfSBlbHNlIGlmIChmb3JtYXQuaGFuZGxlVHlwZSgpID09IFFBYnN0cmFjdFZpZGVvQnVmZmVy
OjpHTFRleHR1cmVIYW5kbGUpIHsKKyAgICAgICAgc3dpdGNoIChmb3JtYXQucGl4ZWxGb3JtYXQo
KSkgeworICAgICAgICBjYXNlIFFWaWRlb0ZyYW1lOjpGb3JtYXRfUkdCMzI6CisgICAgICAgIGNh
c2UgUVZpZGVvRnJhbWU6OkZvcm1hdF9BUkdCMzI6CisgICAgICAgICAgICBtX3l1diA9IGZhbHNl
OworICAgICAgICAgICAgbV90ZXh0dXJlQ291bnQgPSAxOworICAgICAgICAgICAgZnJhZ21lbnRQ
cm9ncmFtID0gcXRfZ2xzbF9yZ2JTaGFkZXJQcm9ncmFtOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmICghZnJhZ21lbnRQcm9ncmFtKSB7CisgICAgICAgIGVycm9yID0gUUFic3RyYWN0Vmlk
ZW9TdXJmYWNlOjpVbnN1cHBvcnRlZEZvcm1hdEVycm9yOworICAgIH0gZWxzZSBpZiAoIW1fcHJv
Z3JhbS5hZGRTaGFkZXJGcm9tU291cmNlQ29kZShRR0xTaGFkZXI6OlZlcnRleCwgcXRfZ2xzbF92
ZXJ0ZXhTaGFkZXJQcm9ncmFtKSkgeworICAgICAgICBxV2FybmluZygiUVBhaW50ZXJWaWRlb1N1
cmZhY2U6IFZlcnRleCBzaGFkZXIgY29tcGlsZSBlcnJvciAlcyIsCisgICAgICAgICAgICAgICAg
IHFQcmludGFibGUobV9wcm9ncmFtLmxvZygpKSk7CisgICAgICAgIGVycm9yID0gUUFic3RyYWN0
VmlkZW9TdXJmYWNlOjpSZXNvdXJjZUVycm9yOworICAgIH0gZWxzZSBpZiAoIW1fcHJvZ3JhbS5h
ZGRTaGFkZXJGcm9tU291cmNlQ29kZShRR0xTaGFkZXI6OkZyYWdtZW50LCBmcmFnbWVudFByb2dy
YW0pKSB7CisgICAgICAgIHFXYXJuaW5nKCJRUGFpbnRlclZpZGVvU3VyZmFjZTogU2hhZGVyIGNv
bXBpbGUgZXJyb3IgJXMiLCBxUHJpbnRhYmxlKG1fcHJvZ3JhbS5sb2coKSkpOworICAgICAgICBl
cnJvciA9IFFBYnN0cmFjdFZpZGVvU3VyZmFjZTo6UmVzb3VyY2VFcnJvcjsKKyAgICAgICAgbV9w
cm9ncmFtLnJlbW92ZUFsbFNoYWRlcnMoKTsKKyAgICB9IGVsc2UgaWYgKCFtX3Byb2dyYW0ubGlu
aygpKSB7CisgICAgICAgIHFXYXJuaW5nKCJRUGFpbnRlclZpZGVvU3VyZmFjZTogU2hhZGVyIGxp
bmsgZXJyb3IgJXMiLCBxUHJpbnRhYmxlKG1fcHJvZ3JhbS5sb2coKSkpOworICAgICAgICBtX3By
b2dyYW0ucmVtb3ZlQWxsU2hhZGVycygpOworICAgICAgICBlcnJvciA9IFFBYnN0cmFjdFZpZGVv
U3VyZmFjZTo6UmVzb3VyY2VFcnJvcjsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2hhbmRsZVR5
cGUgPSBmb3JtYXQuaGFuZGxlVHlwZSgpOworICAgICAgICBtX3NjYW5MaW5lRGlyZWN0aW9uID0g
Zm9ybWF0LnNjYW5MaW5lRGlyZWN0aW9uKCk7CisgICAgICAgIG1fZnJhbWVTaXplID0gZm9ybWF0
LmZyYW1lU2l6ZSgpOworCisgICAgICAgIGlmIChtX2hhbmRsZVR5cGUgPT0gUUFic3RyYWN0Vmlk
ZW9CdWZmZXI6Ok5vSGFuZGxlKQorICAgICAgICAgICAgZ2xHZW5UZXh0dXJlcyhtX3RleHR1cmVD
b3VudCwgbV90ZXh0dXJlSWRzKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK3Zv
aWQgUVZpZGVvU3VyZmFjZUdsc2xQYWludGVyOjpzdG9wKCkKK3sKKyAgICBtX2NvbnRleHQtPm1h
a2VDdXJyZW50KCk7CisKKyAgICBpZiAobV9oYW5kbGVUeXBlICE9IFFBYnN0cmFjdFZpZGVvQnVm
ZmVyOjpHTFRleHR1cmVIYW5kbGUpCisgICAgICAgIGdsRGVsZXRlVGV4dHVyZXMobV90ZXh0dXJl
Q291bnQsIG1fdGV4dHVyZUlkcyk7CisgICAgbV9wcm9ncmFtLnJlbW92ZUFsbFNoYWRlcnMoKTsK
KworICAgIG1fdGV4dHVyZUNvdW50ID0gMDsKKyAgICBtX2hhbmRsZVR5cGUgPSBRQWJzdHJhY3RW
aWRlb0J1ZmZlcjo6Tm9IYW5kbGU7Cit9CisKK1FBYnN0cmFjdFZpZGVvU3VyZmFjZTo6RXJyb3Ig
UVZpZGVvU3VyZmFjZUdsc2xQYWludGVyOjpwYWludCgKKyAgICAgICAgY29uc3QgUVJlY3RGICZ0
YXJnZXQsIFFQYWludGVyICpwYWludGVyLCBjb25zdCBRUmVjdEYgJnNvdXJjZSkKK3sKKyAgICBp
ZiAobV9mcmFtZS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgcGFpbnRlci0+YmVnaW5OYXRpdmVQYWlu
dGluZygpOworCisgICAgICAgIGNvbnN0IGludCB3aWR0aCA9IFFHTENvbnRleHQ6OmN1cnJlbnRD
b250ZXh0KCktPmRldmljZSgpLT53aWR0aCgpOworICAgICAgICBjb25zdCBpbnQgaGVpZ2h0ID0g
UUdMQ29udGV4dDo6Y3VycmVudENvbnRleHQoKS0+ZGV2aWNlKCktPmhlaWdodCgpOworCisgICAg
ICAgIGNvbnN0IFFUcmFuc2Zvcm0gdHJhbnNmb3JtID0gcGFpbnRlci0+ZGV2aWNlVHJhbnNmb3Jt
KCk7CisKKyAgICAgICAgY29uc3QgR0xmbG9hdCB3ZmFjdG9yID0gMi4wIC8gd2lkdGg7CisgICAg
ICAgIGNvbnN0IEdMZmxvYXQgaGZhY3RvciA9IC0yLjAgLyBoZWlnaHQ7CisKKyAgICAgICAgY29u
c3QgR0xmbG9hdCBwb3NpdGlvbk1hdHJpeFs0XVs0XSA9CisgICAgICAgIHsKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAvKigwLDApKi8gd2ZhY3RvciAqIHRyYW5zZm9ybS5tMTEoKSAt
IHRyYW5zZm9ybS5tMTMoKSwKKyAgICAgICAgICAgICAgICAvKigwLDEpKi8gaGZhY3RvciAqIHRy
YW5zZm9ybS5tMTIoKSArIHRyYW5zZm9ybS5tMTMoKSwKKyAgICAgICAgICAgICAgICAvKigwLDIp
Ki8gMC4wLAorICAgICAgICAgICAgICAgIC8qKDAsMykqLyB0cmFuc2Zvcm0ubTEzKCkKKyAgICAg
ICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICAvKigxLDApKi8gd2ZhY3RvciAqIHRyYW5zZm9y
bS5tMjEoKSAtIHRyYW5zZm9ybS5tMjMoKSwKKyAgICAgICAgICAgICAgICAvKigxLDEpKi8gaGZh
Y3RvciAqIHRyYW5zZm9ybS5tMjIoKSArIHRyYW5zZm9ybS5tMjMoKSwKKyAgICAgICAgICAgICAg
ICAvKigxLDIpKi8gMC4wLAorICAgICAgICAgICAgICAgIC8qKDEsMykqLyB0cmFuc2Zvcm0ubTIz
KCkKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICAvKigyLDApKi8gMC4wLAorICAg
ICAgICAgICAgICAgIC8qKDIsMSkqLyAwLjAsCisgICAgICAgICAgICAgICAgLyooMiwyKSovIC0x
LjAsCisgICAgICAgICAgICAgICAgLyooMiwzKSovIDAuMAorICAgICAgICAgICAgfSwgeworICAg
ICAgICAgICAgICAgIC8qKDMsMCkqLyB3ZmFjdG9yICogdHJhbnNmb3JtLmR4KCkgLSB0cmFuc2Zv
cm0ubTMzKCksCisgICAgICAgICAgICAgICAgLyooMywxKSovIGhmYWN0b3IgKiB0cmFuc2Zvcm0u
ZHkoKSArIHRyYW5zZm9ybS5tMzMoKSwKKyAgICAgICAgICAgICAgICAvKigzLDIpKi8gMC4wLAor
ICAgICAgICAgICAgICAgIC8qKDMsMykqLyB0cmFuc2Zvcm0ubTMzKCkKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfTsKKworICAgICAgICBjb25zdCBHTGZsb2F0IHZUb3AgPSBtX3NjYW5MaW5lRGly
ZWN0aW9uID09IFFWaWRlb1N1cmZhY2VGb3JtYXQ6OlRvcFRvQm90dG9tCisgICAgICAgICAgICAg
ICAgPyB0YXJnZXQudG9wKCkKKyAgICAgICAgICAgICAgICA6IHRhcmdldC5ib3R0b20oKSArIDE7
CisgICAgICAgIGNvbnN0IEdMZmxvYXQgdkJvdHRvbSA9IG1fc2NhbkxpbmVEaXJlY3Rpb24gPT0g
UVZpZGVvU3VyZmFjZUZvcm1hdDo6VG9wVG9Cb3R0b20KKyAgICAgICAgICAgICAgICA/IHRhcmdl
dC5ib3R0b20oKSArIDEKKyAgICAgICAgICAgICAgICA6IHRhcmdldC50b3AoKTsKKworCisgICAg
ICAgIGNvbnN0IEdMZmxvYXQgdmVydGV4Q29vcmRBcnJheVtdID0KKyAgICAgICAgeworICAgICAg
ICAgICAgdGFyZ2V0LmxlZnQoKSAgICAgLCB2Qm90dG9tLAorICAgICAgICAgICAgdGFyZ2V0LnJp
Z2h0KCkgKyAxLCB2Qm90dG9tLAorICAgICAgICAgICAgdGFyZ2V0LmxlZnQoKSAgICAgLCB2VG9w
LAorICAgICAgICAgICAgdGFyZ2V0LnJpZ2h0KCkgKyAxLCB2VG9wCisgICAgICAgIH07CisKKyAg
ICAgICAgY29uc3QgR0xmbG9hdCB0eExlZnQgPSBzb3VyY2UubGVmdCgpIC8gbV9mcmFtZVNpemUu
d2lkdGgoKTsKKyAgICAgICAgY29uc3QgR0xmbG9hdCB0eFJpZ2h0ID0gc291cmNlLnJpZ2h0KCkg
LyBtX2ZyYW1lU2l6ZS53aWR0aCgpOworICAgICAgICBjb25zdCBHTGZsb2F0IHR4VG9wID0gbV9z
Y2FuTGluZURpcmVjdGlvbiA9PSBRVmlkZW9TdXJmYWNlRm9ybWF0OjpUb3BUb0JvdHRvbQorICAg
ICAgICAgICAgICAgID8gc291cmNlLnRvcCgpIC8gbV9mcmFtZVNpemUuaGVpZ2h0KCkKKyAgICAg
ICAgICAgICAgICA6IHNvdXJjZS5ib3R0b20oKSAvIG1fZnJhbWVTaXplLmhlaWdodCgpOworICAg
ICAgICBjb25zdCBHTGZsb2F0IHR4Qm90dG9tID0gbV9zY2FuTGluZURpcmVjdGlvbiA9PSBRVmlk
ZW9TdXJmYWNlRm9ybWF0OjpUb3BUb0JvdHRvbQorICAgICAgICAgICAgICAgID8gc291cmNlLmJv
dHRvbSgpIC8gbV9mcmFtZVNpemUuaGVpZ2h0KCkKKyAgICAgICAgICAgICAgICA6IHNvdXJjZS50
b3AoKSAvIG1fZnJhbWVTaXplLmhlaWdodCgpOworCisgICAgICAgIGNvbnN0IEdMZmxvYXQgdGV4
dHVyZUNvb3JkQXJyYXlbXSA9CisgICAgICAgIHsKKyAgICAgICAgICAgIHR4TGVmdCAsIHR4Qm90
dG9tLAorICAgICAgICAgICAgdHhSaWdodCwgdHhCb3R0b20sCisgICAgICAgICAgICB0eExlZnQg
LCB0eFRvcCwKKyAgICAgICAgICAgIHR4UmlnaHQsIHR4VG9wCisgICAgICAgIH07CisKKyAgICAg
ICAgbV9wcm9ncmFtLmJpbmQoKTsKKworICAgICAgICBtX3Byb2dyYW0uZW5hYmxlQXR0cmlidXRl
QXJyYXkoInZlcnRleENvb3JkQXJyYXkiKTsKKyAgICAgICAgbV9wcm9ncmFtLmVuYWJsZUF0dHJp
YnV0ZUFycmF5KCJ0ZXh0dXJlQ29vcmRBcnJheSIpOworICAgICAgICBtX3Byb2dyYW0uc2V0QXR0
cmlidXRlQXJyYXkoInZlcnRleENvb3JkQXJyYXkiLCB2ZXJ0ZXhDb29yZEFycmF5LCAyKTsKKyAg
ICAgICAgbV9wcm9ncmFtLnNldEF0dHJpYnV0ZUFycmF5KCJ0ZXh0dXJlQ29vcmRBcnJheSIsIHRl
eHR1cmVDb29yZEFycmF5LCAyKTsKKyAgICAgICAgbV9wcm9ncmFtLnNldFVuaWZvcm1WYWx1ZSgi
cG9zaXRpb25NYXRyaXgiLCBwb3NpdGlvbk1hdHJpeCk7CisKKyAgICAgICAgaWYgKG1fdGV4dHVy
ZUNvdW50ID09IDMpIHsKKyAgICAgICAgICAgIGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCk7
CisgICAgICAgICAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZUlkc1sw
XSk7CisgICAgICAgICAgICBnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTEpOworICAgICAgICAg
ICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmVJZHNbMV0pOworICAgICAg
ICAgICAgZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUyKTsKKyAgICAgICAgICAgIGdsQmluZFRl
eHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlSWRzWzJdKTsKKyAgICAgICAgICAgIGdsQWN0
aXZlVGV4dHVyZShHTF9URVhUVVJFMCk7CisKKyAgICAgICAgICAgIG1fcHJvZ3JhbS5zZXRVbmlm
b3JtVmFsdWUoInRleFkiLCAwKTsKKyAgICAgICAgICAgIG1fcHJvZ3JhbS5zZXRVbmlmb3JtVmFs
dWUoInRleFUiLCAxKTsKKyAgICAgICAgICAgIG1fcHJvZ3JhbS5zZXRVbmlmb3JtVmFsdWUoInRl
eFYiLCAyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGdsQWN0aXZlVGV4dHVyZShH
TF9URVhUVVJFMCk7CisgICAgICAgICAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1f
dGV4dHVyZUlkc1swXSk7CisKKyAgICAgICAgICAgIG1fcHJvZ3JhbS5zZXRVbmlmb3JtVmFsdWUo
InRleFJnYiIsIDApOworICAgICAgICB9CisgICAgICAgIG1fcHJvZ3JhbS5zZXRVbmlmb3JtVmFs
dWUoImNvbG9yTWF0cml4IiwgbV9jb2xvck1hdHJpeCk7CisKKyAgICAgICAgZ2xEcmF3QXJyYXlz
KEdMX1RSSUFOR0xFX1NUUklQLCAwLCA0KTsKKworICAgICAgICBtX3Byb2dyYW0ucmVsZWFzZSgp
OworCisgICAgICAgIHBhaW50ZXItPmVuZE5hdGl2ZVBhaW50aW5nKCk7CisgICAgfQorICAgIHJl
dHVybiBRQWJzdHJhY3RWaWRlb1N1cmZhY2U6Ok5vRXJyb3I7Cit9CisKKyNlbmRpZgorCitRUGFp
bnRlclZpZGVvU3VyZmFjZTo6UVBhaW50ZXJWaWRlb1N1cmZhY2UoUU9iamVjdCAqcGFyZW50KQor
ICAgIDogUUFic3RyYWN0VmlkZW9TdXJmYWNlKHBhcmVudCkKKyAgICAsIG1fcGFpbnRlcigwKQor
I2lmICFkZWZpbmVkKFFUX05PX09QRU5HTCkgJiYgIWRlZmluZWQoUVRfT1BFTkdMX0VTXzFfQ0wp
ICYmICFkZWZpbmVkKFFUX09QRU5HTF9FU18xKQorICAgICwgbV9nbENvbnRleHQoMCkKKyAgICAs
IG1fc2hhZGVyVHlwZXMoTm9TaGFkZXJzKQorICAgICwgbV9zaGFkZXJUeXBlKE5vU2hhZGVycykK
KyNlbmRpZgorICAgICwgbV9icmlnaHRuZXNzKDApCisgICAgLCBtX2NvbnRyYXN0KDApCisgICAg
LCBtX2h1ZSgwKQorICAgICwgbV9zYXR1cmF0aW9uKDApCisgICAgLCBtX3BpeGVsRm9ybWF0KFFW
aWRlb0ZyYW1lOjpGb3JtYXRfSW52YWxpZCkKKyAgICAsIG1fY29sb3JzRGlydHkodHJ1ZSkKKyAg
ICAsIG1fcmVhZHkoZmFsc2UpCit7Cit9CisKK1FQYWludGVyVmlkZW9TdXJmYWNlOjp+UVBhaW50
ZXJWaWRlb1N1cmZhY2UoKQoreworICAgIGlmIChpc0FjdGl2ZSgpKQorICAgICAgICBtX3BhaW50
ZXItPnN0b3AoKTsKKworICAgIGRlbGV0ZSBtX3BhaW50ZXI7Cit9CisKK1FMaXN0PFFWaWRlb0Zy
YW1lOjpQaXhlbEZvcm1hdD4gUVBhaW50ZXJWaWRlb1N1cmZhY2U6OnN1cHBvcnRlZFBpeGVsRm9y
bWF0cygKKyAgICAgICAgUUFic3RyYWN0VmlkZW9CdWZmZXI6OkhhbmRsZVR5cGUgaGFuZGxlVHlw
ZSkgY29uc3QKK3sKKyAgICBpZiAoIW1fcGFpbnRlcikKKyAgICAgICAgY29uc3RfY2FzdDxRUGFp
bnRlclZpZGVvU3VyZmFjZSAqPih0aGlzKS0+Y3JlYXRlUGFpbnRlcigpOworCisgICAgcmV0dXJu
IG1fcGFpbnRlci0+c3VwcG9ydGVkUGl4ZWxGb3JtYXRzKGhhbmRsZVR5cGUpOworfQorCitib29s
IFFQYWludGVyVmlkZW9TdXJmYWNlOjppc0Zvcm1hdFN1cHBvcnRlZCgKKyAgICAgICAgY29uc3Qg
UVZpZGVvU3VyZmFjZUZvcm1hdCAmZm9ybWF0LCBRVmlkZW9TdXJmYWNlRm9ybWF0ICpzaW1pbGFy
KSBjb25zdAoreworICAgIGlmICghbV9wYWludGVyKQorICAgICAgICBjb25zdF9jYXN0PFFQYWlu
dGVyVmlkZW9TdXJmYWNlICo+KHRoaXMpLT5jcmVhdGVQYWludGVyKCk7CisKKyAgICByZXR1cm4g
bV9wYWludGVyLT5pc0Zvcm1hdFN1cHBvcnRlZChmb3JtYXQsIHNpbWlsYXIpOworfQorCitib29s
IFFQYWludGVyVmlkZW9TdXJmYWNlOjpzdGFydChjb25zdCBRVmlkZW9TdXJmYWNlRm9ybWF0ICZm
b3JtYXQpCit7CisgICAgaWYgKGlzQWN0aXZlKCkpCisgICAgICAgIG1fcGFpbnRlci0+c3RvcCgp
OworCisgICAgaWYgKCFtX3BhaW50ZXIpCisgICAgICAgIGNyZWF0ZVBhaW50ZXIoKTsKKworICAg
IGlmIChmb3JtYXQuZnJhbWVTaXplKCkuaXNFbXB0eSgpKQorICAgICAgICBzZXRFcnJvcihVbnN1
cHBvcnRlZEZvcm1hdEVycm9yKTsKKyAgICBlbHNlIHsKKyAgICAgICAgUUFic3RyYWN0VmlkZW9T
dXJmYWNlOjpFcnJvciBlcnJvciA9IG1fcGFpbnRlci0+c3RhcnQoZm9ybWF0KTsKKworICAgICAg
ICBpZiAoZXJyb3IgIT0gUUFic3RyYWN0VmlkZW9TdXJmYWNlOjpOb0Vycm9yKQorICAgICAgICAg
ICAgc2V0RXJyb3IoZXJyb3IpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1fcGl4ZWxG
b3JtYXQgPSBmb3JtYXQucGl4ZWxGb3JtYXQoKTsKKyAgICAgICAgICAgIG1fZnJhbWVTaXplID0g
Zm9ybWF0LmZyYW1lU2l6ZSgpOworICAgICAgICAgICAgbV9zb3VyY2VSZWN0ID0gZm9ybWF0LnZp
ZXdwb3J0KCk7CisgICAgICAgICAgICBtX2NvbG9yc0RpcnR5ID0gdHJ1ZTsKKyAgICAgICAgICAg
IG1fcmVhZHkgPSB0cnVlOworCisgICAgICAgICAgICByZXR1cm4gUUFic3RyYWN0VmlkZW9TdXJm
YWNlOjpzdGFydChmb3JtYXQpOworICAgICAgICB9CisgICAgfQorCisgICAgUUFic3RyYWN0Vmlk
ZW9TdXJmYWNlOjpzdG9wKCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUVBhaW50
ZXJWaWRlb1N1cmZhY2U6OnN0b3AoKQoreworICAgIGlmIChpc0FjdGl2ZSgpKSB7CisgICAgICAg
IG1fcGFpbnRlci0+c3RvcCgpOworICAgICAgICBtX3JlYWR5ID0gZmFsc2U7CisKKyAgICAgICAg
UUFic3RyYWN0VmlkZW9TdXJmYWNlOjpzdG9wKCk7CisgICAgfQorfQorCitib29sIFFQYWludGVy
VmlkZW9TdXJmYWNlOjpwcmVzZW50KGNvbnN0IFFWaWRlb0ZyYW1lICZmcmFtZSkKK3sKKyAgICBp
ZiAoIW1fcmVhZHkpIHsKKyAgICAgICAgaWYgKCFpc0FjdGl2ZSgpKQorICAgICAgICAgICAgc2V0
RXJyb3IoU3RvcHBlZEVycm9yKTsKKyAgICB9IGVsc2UgaWYgKGZyYW1lLmlzVmFsaWQoKSAKKyAg
ICAgICAgICAgICYmIChmcmFtZS5waXhlbEZvcm1hdCgpICE9IG1fcGl4ZWxGb3JtYXQgfHwgZnJh
bWUuc2l6ZSgpICE9IG1fZnJhbWVTaXplKSkgeworICAgICAgICBzZXRFcnJvcihJbmNvcnJlY3RG
b3JtYXRFcnJvcik7CisKKyAgICAgICAgc3RvcCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIFFB
YnN0cmFjdFZpZGVvU3VyZmFjZTo6RXJyb3IgZXJyb3IgPSBtX3BhaW50ZXItPnNldEN1cnJlbnRG
cmFtZShmcmFtZSk7CisKKyAgICAgICAgaWYgKGVycm9yICE9IFFBYnN0cmFjdFZpZGVvU3VyZmFj
ZTo6Tm9FcnJvcikgeworICAgICAgICAgICAgc2V0RXJyb3IoZXJyb3IpOworCisgICAgICAgICAg
ICBzdG9wKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX3JlYWR5ID0gZmFsc2U7
CisKKyAgICAgICAgICAgIGVtaXQgZnJhbWVDaGFuZ2VkKCk7CisKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworaW50IFFQ
YWludGVyVmlkZW9TdXJmYWNlOjpicmlnaHRuZXNzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9i
cmlnaHRuZXNzOworfQorCit2b2lkIFFQYWludGVyVmlkZW9TdXJmYWNlOjpzZXRCcmlnaHRuZXNz
KGludCBicmlnaHRuZXNzKQoreworICAgIG1fYnJpZ2h0bmVzcyA9IGJyaWdodG5lc3M7CisKKyAg
ICBtX2NvbG9yc0RpcnR5ID0gdHJ1ZTsKK30KKworaW50IFFQYWludGVyVmlkZW9TdXJmYWNlOjpj
b250cmFzdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udHJhc3Q7Cit9CisKK3ZvaWQgUVBh
aW50ZXJWaWRlb1N1cmZhY2U6OnNldENvbnRyYXN0KGludCBjb250cmFzdCkKK3sKKyAgICBtX2Nv
bnRyYXN0ID0gY29udHJhc3Q7CisKKyAgICBtX2NvbG9yc0RpcnR5ID0gdHJ1ZTsKK30KKworaW50
IFFQYWludGVyVmlkZW9TdXJmYWNlOjpodWUoKSBjb25zdAoreworICAgIHJldHVybiBtX2h1ZTsK
K30KKwordm9pZCBRUGFpbnRlclZpZGVvU3VyZmFjZTo6c2V0SHVlKGludCBodWUpCit7CisgICAg
bV9odWUgPSBodWU7CisKKyAgICBtX2NvbG9yc0RpcnR5ID0gdHJ1ZTsKK30KKworaW50IFFQYWlu
dGVyVmlkZW9TdXJmYWNlOjpzYXR1cmF0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zYXR1
cmF0aW9uOworfQorCit2b2lkIFFQYWludGVyVmlkZW9TdXJmYWNlOjpzZXRTYXR1cmF0aW9uKGlu
dCBzYXR1cmF0aW9uKQoreworICAgIG1fc2F0dXJhdGlvbiA9IHNhdHVyYXRpb247CisKKyAgICBt
X2NvbG9yc0RpcnR5ID0gdHJ1ZTsKK30KKworYm9vbCBRUGFpbnRlclZpZGVvU3VyZmFjZTo6aXNS
ZWFkeSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVhZHk7Cit9CisKK3ZvaWQgUVBhaW50ZXJW
aWRlb1N1cmZhY2U6OnNldFJlYWR5KGJvb2wgcmVhZHkpCit7CisgICAgbV9yZWFkeSA9IHJlYWR5
OworfQorCit2b2lkIFFQYWludGVyVmlkZW9TdXJmYWNlOjpwYWludChRUGFpbnRlciAqcGFpbnRl
ciwgY29uc3QgUVJlY3RGICZ0YXJnZXQsIGNvbnN0IFFSZWN0RiAmc291cmNlKQoreworICAgIGlm
ICghaXNBY3RpdmUoKSkKKyAgICAgICAgcGFpbnRlci0+ZmlsbFJlY3QodGFyZ2V0LCBRQnJ1c2go
UXQ6OmJsYWNrKSk7CisgICAgZWxzZSB7CisgICAgICAgIGlmIChtX2NvbG9yc0RpcnR5KSB7Cisg
ICAgICAgICAgICBtX3BhaW50ZXItPnVwZGF0ZUNvbG9ycyhtX2JyaWdodG5lc3MsIG1fY29udHJh
c3QsIG1faHVlLCBtX3NhdHVyYXRpb24pOworICAgICAgICAgICAgbV9jb2xvcnNEaXJ0eSA9IGZh
bHNlOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgUVJlY3RGIHNvdXJjZVJlY3QoCisgICAg
ICAgICAgICAgICAgbV9zb3VyY2VSZWN0LngoKSArIG1fc291cmNlUmVjdC53aWR0aCgpICogc291
cmNlLngoKSwKKyAgICAgICAgICAgICAgICBtX3NvdXJjZVJlY3QueSgpICsgbV9zb3VyY2VSZWN0
LmhlaWdodCgpICogc291cmNlLnkoKSwKKyAgICAgICAgICAgICAgICBtX3NvdXJjZVJlY3Qud2lk
dGgoKSAqIHNvdXJjZS53aWR0aCgpLAorICAgICAgICAgICAgICAgIG1fc291cmNlUmVjdC5oZWln
aHQoKSAqIHNvdXJjZS5oZWlnaHQoKSk7CisKKyAgICAgICAgUUFic3RyYWN0VmlkZW9TdXJmYWNl
OjpFcnJvciBlcnJvciA9IG1fcGFpbnRlci0+cGFpbnQodGFyZ2V0LCBwYWludGVyLCBzb3VyY2VS
ZWN0KTsKKworICAgICAgICBpZiAoZXJyb3IgIT0gUUFic3RyYWN0VmlkZW9TdXJmYWNlOjpOb0Vy
cm9yKSB7CisgICAgICAgICAgICBzZXRFcnJvcihlcnJvcik7CisKKyAgICAgICAgICAgIHN0b3Ao
KTsKKyAgICAgICAgfQorICAgIH0KK30KKworI2lmICFkZWZpbmVkKFFUX05PX09QRU5HTCkgJiYg
IWRlZmluZWQoUVRfT1BFTkdMX0VTXzFfQ0wpICYmICFkZWZpbmVkKFFUX09QRU5HTF9FU18xKQor
Citjb25zdCBRR0xDb250ZXh0ICpRUGFpbnRlclZpZGVvU3VyZmFjZTo6Z2xDb250ZXh0KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9nbENvbnRleHQ7Cit9CisKK3ZvaWQgUVBhaW50ZXJWaWRlb1N1
cmZhY2U6OnNldEdMQ29udGV4dChRR0xDb250ZXh0ICpjb250ZXh0KQoreworICAgIGlmIChtX2ds
Q29udGV4dCA9PSBjb250ZXh0KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2dsQ29udGV4dCA9
IGNvbnRleHQ7CisKKyAgICBtX3NoYWRlclR5cGVzID0gTm9TaGFkZXJzOworCisgICAgaWYgKG1f
Z2xDb250ZXh0KSB7CisgICAgICAgIG1fZ2xDb250ZXh0LT5tYWtlQ3VycmVudCgpOworCisgICAg
ICAgIGNvbnN0IFFCeXRlQXJyYXkgZXh0ZW5zaW9ucyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNo
YXIgKj4oZ2xHZXRTdHJpbmcoR0xfRVhURU5TSU9OUykpKTsKKyNpZm5kZWYgUVRfT1BFTkdMX0VT
CisKKyAgICAgICAgaWYgKGV4dGVuc2lvbnMuY29udGFpbnMoIkFSQl9mcmFnbWVudF9wcm9ncmFt
IikpCisgICAgICAgICAgICBtX3NoYWRlclR5cGVzIHw9IEZyYWdtZW50UHJvZ3JhbVNoYWRlcjsK
KyNlbmRpZgorCisgICAgICAgIGlmIChRR0xTaGFkZXJQcm9ncmFtOjpoYXNPcGVuR0xTaGFkZXJQ
cm9ncmFtcyhtX2dsQ29udGV4dCkKKyAgICAgICAgICAgICAgICAmJiBleHRlbnNpb25zLmNvbnRh
aW5zKCJBUkJfc2hhZGVyX29iamVjdHMiKSkKKyAgICAgICAgICAgIG1fc2hhZGVyVHlwZXMgfD0g
R2xzbFNoYWRlcjsKKyAgICB9CisKKyAgICBTaGFkZXJUeXBlIHR5cGUgPSAobV9zaGFkZXJUeXBl
ICYgbV9zaGFkZXJUeXBlcykKKyAgICAgICAgICAgID8gbV9zaGFkZXJUeXBlCisgICAgICAgICAg
ICA6IE5vU2hhZGVyczsKKworICAgIGlmICh0eXBlICE9IG1fc2hhZGVyVHlwZSB8fCB0eXBlICE9
IE5vU2hhZGVycykgeworICAgICAgICBtX3NoYWRlclR5cGUgPSB0eXBlOworCisgICAgICAgIGlm
IChpc0FjdGl2ZSgpKSB7CisgICAgICAgICAgICBtX3BhaW50ZXItPnN0b3AoKTsKKyAgICAgICAg
ICAgIGRlbGV0ZSBtX3BhaW50ZXI7CisgICAgICAgICAgICBtX3BhaW50ZXIgPSAwOworICAgICAg
ICAgICAgbV9yZWFkeSA9IGZhbHNlOworCisgICAgICAgICAgICBzZXRFcnJvcihSZXNvdXJjZUVy
cm9yKTsKKyAgICAgICAgICAgIFFBYnN0cmFjdFZpZGVvU3VyZmFjZTo6c3RvcCgpOworICAgICAg
ICB9CisgICAgICAgIGVtaXQgc3VwcG9ydGVkRm9ybWF0c0NoYW5nZWQoKTsKKyAgICB9Cit9CisK
K1FQYWludGVyVmlkZW9TdXJmYWNlOjpTaGFkZXJUeXBlcyBRUGFpbnRlclZpZGVvU3VyZmFjZTo6
c3VwcG9ydGVkU2hhZGVyVHlwZXMoKSBjb25zdAoreworICAgIHJldHVybiBtX3NoYWRlclR5cGVz
OworfQorCitRUGFpbnRlclZpZGVvU3VyZmFjZTo6U2hhZGVyVHlwZSBRUGFpbnRlclZpZGVvU3Vy
ZmFjZTo6c2hhZGVyVHlwZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2hhZGVyVHlwZTsKK30K
Kwordm9pZCBRUGFpbnRlclZpZGVvU3VyZmFjZTo6c2V0U2hhZGVyVHlwZShTaGFkZXJUeXBlIHR5
cGUpCit7CisgICAgaWYgKCEodHlwZSAmIG1fc2hhZGVyVHlwZXMpKQorICAgICAgICB0eXBlID0g
Tm9TaGFkZXJzOworCisgICAgaWYgKHR5cGUgIT0gbV9zaGFkZXJUeXBlKSB7CisgICAgICAgIG1f
c2hhZGVyVHlwZSA9IHR5cGU7CisKKyAgICAgICAgaWYgKGlzQWN0aXZlKCkpIHsKKyAgICAgICAg
ICAgIG1fcGFpbnRlci0+c3RvcCgpOworICAgICAgICAgICAgZGVsZXRlIG1fcGFpbnRlcjsKKyAg
ICAgICAgICAgIG1fcGFpbnRlciA9IDA7CisgICAgICAgICAgICBtX3JlYWR5ID0gZmFsc2U7CisK
KyAgICAgICAgICAgIHNldEVycm9yKFJlc291cmNlRXJyb3IpOworICAgICAgICAgICAgUUFic3Ry
YWN0VmlkZW9TdXJmYWNlOjpzdG9wKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBk
ZWxldGUgbV9wYWludGVyOworICAgICAgICAgICAgbV9wYWludGVyID0gMDsKKyAgICAgICAgfQor
ICAgICAgICBlbWl0IHN1cHBvcnRlZEZvcm1hdHNDaGFuZ2VkKCk7CisgICAgfQorfQorCisjZW5k
aWYKKwordm9pZCBRUGFpbnRlclZpZGVvU3VyZmFjZTo6Y3JlYXRlUGFpbnRlcigpCit7CisgICAg
UV9BU1NFUlQoIW1fcGFpbnRlcik7CisKKyNpZiAhZGVmaW5lZChRVF9OT19PUEVOR0wpICYmICFk
ZWZpbmVkKFFUX09QRU5HTF9FU18xX0NMKSAmJiAhZGVmaW5lZChRVF9PUEVOR0xfRVNfMSkKKyAg
ICBzd2l0Y2ggKG1fc2hhZGVyVHlwZSkgeworI2lmbmRlZiBRVF9PUEVOR0xfRVMKKyAgICBjYXNl
IEZyYWdtZW50UHJvZ3JhbVNoYWRlcjoKKyAgICAgICAgUV9BU1NFUlQobV9nbENvbnRleHQpOwor
ICAgICAgICBtX2dsQ29udGV4dC0+bWFrZUN1cnJlbnQoKTsKKyAgICAgICAgbV9wYWludGVyID0g
bmV3IFFWaWRlb1N1cmZhY2VBcmJGcFBhaW50ZXIobV9nbENvbnRleHQpOworICAgICAgICBicmVh
azsKKyNlbmRpZgorICAgIGNhc2UgR2xzbFNoYWRlcjoKKyAgICAgICAgUV9BU1NFUlQobV9nbENv
bnRleHQpOworICAgICAgICBtX2dsQ29udGV4dC0+bWFrZUN1cnJlbnQoKTsKKyAgICAgICAgbV9w
YWludGVyID0gbmV3IFFWaWRlb1N1cmZhY2VHbHNsUGFpbnRlcihtX2dsQ29udGV4dCk7CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIG1fcGFpbnRlciA9IG5ldyBRVmlkZW9T
dXJmYWNlUmFzdGVyUGFpbnRlcjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorI2Vsc2UKKyAgICBt
X3BhaW50ZXIgPSBuZXcgUVZpZGVvU3VyZmFjZVJhc3RlclBhaW50ZXI7CisjZW5kaWYKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjaW5jbHVkZSAibW9jX1FQYWludGVyVmlkZW9TdXJm
YWNlLmNwcCIKKworCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1FQYWludGVy
VmlkZW9TdXJmYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9RUGFpbnRlclZpZGVvU3VyZmFjZS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9RUGFpbnRlclZpZGVvU3VyZmFjZS5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDExOSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBRUGFpbnRlclZpZGVvU3Vy
ZmFjZV9oCisjZGVmaW5lIFFQYWludGVyVmlkZW9TdXJmYWNlX2gKKworI2luY2x1ZGUgPFF0Q29y
ZS9xc2l6ZS5oPgorI2luY2x1ZGUgPFF0R3VpL3FpbWFnZS5oPgorI2luY2x1ZGUgPFF0R3VpL3Ft
YXRyaXg0eDQuaD4KKyNpbmNsdWRlIDxRdEd1aS9xcGFpbnRlbmdpbmUuaD4KKyNpbmNsdWRlIDxR
dE11bHRpbWVkaWEvcWFic3RyYWN0dmlkZW9zdXJmYWNlLmg+CisjaW5jbHVkZSA8UXRNdWx0aW1l
ZGlhL3F2aWRlb2ZyYW1lLmg+CisKK1FUX0JFR0lOX05BTUVTUEFDRQorY2xhc3MgUUdMQ29udGV4
dDsKK1FUX0VORF9OQU1FU1BBQ0UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBRVmlk
ZW9TdXJmYWNlUGFpbnRlcjsKK2NsYXNzIFFQYWludGVyVmlkZW9TdXJmYWNlIDogcHVibGljIFFB
YnN0cmFjdFZpZGVvU3VyZmFjZSB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBleHBsaWNp
dCBRUGFpbnRlclZpZGVvU3VyZmFjZShRT2JqZWN0ICpwYXJlbnQgPSAwKTsKKyAgICB+UVBhaW50
ZXJWaWRlb1N1cmZhY2UoKTsKKworICAgIFFMaXN0PFFWaWRlb0ZyYW1lOjpQaXhlbEZvcm1hdD4g
c3VwcG9ydGVkUGl4ZWxGb3JtYXRzKAorICAgICAgICAgICAgUUFic3RyYWN0VmlkZW9CdWZmZXI6
OkhhbmRsZVR5cGUgaGFuZGxlVHlwZSA9IFFBYnN0cmFjdFZpZGVvQnVmZmVyOjpOb0hhbmRsZSkg
Y29uc3Q7CisKKyAgICBib29sIGlzRm9ybWF0U3VwcG9ydGVkKAorICAgICAgICAgICAgY29uc3Qg
UVZpZGVvU3VyZmFjZUZvcm1hdCAmZm9ybWF0LCBRVmlkZW9TdXJmYWNlRm9ybWF0ICpzaW1pbGFy
ID0gMCkgY29uc3Q7CisKKyAgICBib29sIHN0YXJ0KGNvbnN0IFFWaWRlb1N1cmZhY2VGb3JtYXQg
JmZvcm1hdCk7CisgICAgdm9pZCBzdG9wKCk7CisKKyAgICBib29sIHByZXNlbnQoY29uc3QgUVZp
ZGVvRnJhbWUgJmZyYW1lKTsKKworICAgIGludCBicmlnaHRuZXNzKCkgY29uc3Q7CisgICAgdm9p
ZCBzZXRCcmlnaHRuZXNzKGludCBicmlnaHRuZXNzKTsKKworICAgIGludCBjb250cmFzdCgpIGNv
bnN0OworICAgIHZvaWQgc2V0Q29udHJhc3QoaW50IGNvbnRyYXN0KTsKKworICAgIGludCBodWUo
KSBjb25zdDsKKyAgICB2b2lkIHNldEh1ZShpbnQgaHVlKTsKKworICAgIGludCBzYXR1cmF0aW9u
KCkgY29uc3Q7CisgICAgdm9pZCBzZXRTYXR1cmF0aW9uKGludCBzYXR1cmF0aW9uKTsKKworICAg
IGJvb2wgaXNSZWFkeSgpIGNvbnN0OworICAgIHZvaWQgc2V0UmVhZHkoYm9vbCByZWFkeSk7CisK
KyAgICB2b2lkIHBhaW50KFFQYWludGVyICpwYWludGVyLCBjb25zdCBRUmVjdEYgJnRhcmdldCwg
Y29uc3QgUVJlY3RGICZzb3VyY2UgPSBRUmVjdEYoMCwgMCwgMSwgMSkpOworCisjaWYgIWRlZmlu
ZWQoUVRfTk9fT1BFTkdMKSAmJiAhZGVmaW5lZChRVF9PUEVOR0xfRVNfMV9DTCkgJiYgIWRlZmlu
ZWQoUVRfT1BFTkdMX0VTXzEpCisgICAgY29uc3QgUUdMQ29udGV4dCAqZ2xDb250ZXh0KCkgY29u
c3Q7CisgICAgdm9pZCBzZXRHTENvbnRleHQoUUdMQ29udGV4dCAqY29udGV4dCk7CisKKyAgICBl
bnVtIFNoYWRlclR5cGUgeworICAgICAgICBOb1NoYWRlcnMgPSAweDAwLAorICAgICAgICBGcmFn
bWVudFByb2dyYW1TaGFkZXIgPSAweDAxLAorICAgICAgICBHbHNsU2hhZGVyID0gMHgwMgorICAg
IH07CisKKyAgICBRX0RFQ0xBUkVfRkxBR1MoU2hhZGVyVHlwZXMsIFNoYWRlclR5cGUpCisKKyAg
ICBTaGFkZXJUeXBlcyBzdXBwb3J0ZWRTaGFkZXJUeXBlcygpIGNvbnN0OworCisgICAgU2hhZGVy
VHlwZSBzaGFkZXJUeXBlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRTaGFkZXJUeXBlKFNoYWRlclR5
cGUgdHlwZSk7CisjZW5kaWYKKworUV9TSUdOQUxTOgorICAgIHZvaWQgZnJhbWVDaGFuZ2VkKCk7
CisKK3ByaXZhdGU6CisgICAgdm9pZCBjcmVhdGVQYWludGVyKCk7CisKKyAgICBRVmlkZW9TdXJm
YWNlUGFpbnRlciAqbV9wYWludGVyOworI2lmICFkZWZpbmVkKFFUX05PX09QRU5HTCkgJiYgIWRl
ZmluZWQoUVRfT1BFTkdMX0VTXzFfQ0wpICYmICFkZWZpbmVkKFFUX09QRU5HTF9FU18xKQorICAg
IFFHTENvbnRleHQgKm1fZ2xDb250ZXh0OworICAgIFNoYWRlclR5cGVzIG1fc2hhZGVyVHlwZXM7
CisgICAgU2hhZGVyVHlwZSBtX3NoYWRlclR5cGU7CisjZW5kaWYKKyAgICBpbnQgbV9icmlnaHRu
ZXNzOworICAgIGludCBtX2NvbnRyYXN0OworICAgIGludCBtX2h1ZTsKKyAgICBpbnQgbV9zYXR1
cmF0aW9uOworCisgICAgUVZpZGVvRnJhbWU6OlBpeGVsRm9ybWF0IG1fcGl4ZWxGb3JtYXQ7Cisg
ICAgUVNpemUgbV9mcmFtZVNpemU7CisgICAgUVJlY3QgbV9zb3VyY2VSZWN0OworICAgIGJvb2wg
bV9jb2xvcnNEaXJ0eTsKKyAgICBib29sIG1fcmVhZHk7Cit9OworCisjaWYgIWRlZmluZWQoUVRf
Tk9fT1BFTkdMKSAmJiAhZGVmaW5lZChRVF9PUEVOR0xfRVNfMV9DTCkgJiYgIWRlZmluZWQoUVRf
T1BFTkdMX0VTXzEpCitRX0RFQ0xBUkVfT1BFUkFUT1JTX0ZPUl9GTEFHUyhRUGFpbnRlclZpZGVv
U3VyZmFjZTo6U2hhZGVyVHlwZXMpCisjZW5kaWYKKworfQorCisjZW5kaWYKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmNwcAkocmV2aXNpb24gNTQ2NDEpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICsz
OSw3IEBACiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKQEAgLTQ3LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJS
ZW5kZXJCb3guaCIKICNpbmNsdWRlICJSZW5kZXJTbGlkZXIuaCIKICNpbmNsdWRlICJSZW5kZXJU
aGVtZS5oIgorI2luY2x1ZGUgIlRpbWVSYW5nZXMuaCIKICNpbmNsdWRlICJTY3JvbGxiYXJUaGVt
ZVF0LmgiCiAjaW5jbHVkZSAiVXNlckFnZW50U3R5bGVTaGVldHMuaCIKICNpbmNsdWRlICJxd2Vi
cGFnZS5oIgpAQCAtODgyLDEwICs4ODQsMTYgQEAgSFRNTE1lZGlhRWxlbWVudCogUmVuZGVyVGhl
bWVRdDo6Z2V0TWVkaQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MTWVkaWFFbGVtZW50Kj4o
bWVkaWFOb2RlKTsKIH0KIAorZG91YmxlIFJlbmRlclRoZW1lUXQ6Om1lZGlhQ29udHJvbHNCYXNl
bGluZU9wYWNpdHkoKSBjb25zdAoreworICAgIHJldHVybiAwLjQ7Cit9CisKIHZvaWQgUmVuZGVy
VGhlbWVRdDo6cGFpbnRNZWRpYUJhY2tncm91bmQoUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IElu
dFJlY3QmIHIpIGNvbnN0CiB7CiAgICAgcGFpbnRlci0+c2V0UGVuKFF0OjpOb1Blbik7Ci0gICAg
c3RhdGljIFFDb2xvciB0cmFuc3BhcmVudEJsYWNrKDAsIDAsIDAsIDEwMCk7CisgICAgc3RhdGlj
IGNvbnN0IFFDb2xvciBzaGFkb3cgPSBRQXBwbGljYXRpb246OnBhbGV0dGUoKS5icnVzaChRUGFs
ZXR0ZTo6QWN0aXZlLCBRUGFsZXR0ZTo6U2hhZG93KS5jb2xvcigpOworICAgIHN0YXRpYyBRQ29s
b3IgdHJhbnNwYXJlbnRCbGFjayhzaGFkb3cucmVkKCksIHNoYWRvdy5ncmVlbigpLCBzaGFkb3cu
Ymx1ZSgpLCBtZWRpYUNvbnRyb2xzQmFzZWxpbmVPcGFjaXR5KCkgKiAyNTUpOwogICAgIHBhaW50
ZXItPnNldEJydXNoKHRyYW5zcGFyZW50QmxhY2spOwogICAgIHBhaW50ZXItPmRyYXdSb3VuZGVk
UmVjdChyLngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSwgNS4wLCA1LjApOwogfQpA
QCAtOTIxLDE0ICs5MjksMTAgQEAgYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhTXV0ZUJ1
dHRvbgogICAgIGNvbnN0IFFQb2ludEYgc3BlYWtlclBvbHlnb25bNl0gPSB7IFFQb2ludEYoMjAs
IDMwKSwgUVBvaW50Rig1MCwgMzApLCBRUG9pbnRGKDgwLCAwKSwKICAgICAgICAgICAgIFFQb2lu
dEYoODAsIDEwMCksIFFQb2ludEYoNTAsIDcwKSwgUVBvaW50RigyMCwgNzApfTsKIAotICAgIHAu
cGFpbnRlci0+c2V0QnJ1c2goZ2V0TWVkaWFDb250cm9sRm9yZWdyb3VuZENvbG9yKG8pKTsKKyAg
ICBwLnBhaW50ZXItPnNldFBlbihtZWRpYUVsZW1lbnQtPm11dGVkKCkgPyBRdDo6ZGFya0dyYXkg
OiBRdDo6bGlnaHRHcmF5KTsKKyAgICBwLnBhaW50ZXItPnNldEJydXNoKG1lZGlhRWxlbWVudC0+
bXV0ZWQoKSA/IFF0OjpkYXJrUmVkIDogZ2V0TWVkaWFDb250cm9sRm9yZWdyb3VuZENvbG9yKG8p
KTsKICAgICBwLnBhaW50ZXItPmRyYXdQb2x5Z29uKHNwZWFrZXJQb2x5Z29uLCA2KTsKIAotICAg
IGlmIChtZWRpYUVsZW1lbnQtPm11dGVkKCkpIHsKLSAgICAgICAgcC5wYWludGVyLT5zZXRQZW4o
UXQ6OnJlZCk7Ci0gICAgICAgIHAucGFpbnRlci0+ZHJhd0xpbmUoMCwgMTAwLCAxMDAsIDApOwot
ICAgIH0KLQogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtOTcxLDYgKzk3NSw5NiBAQCBib29s
IFJlbmRlclRoZW1lUXQ6OnBhaW50TWVkaWFTZWVrRm9yd2FyCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCitib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50TWVkaWFDdXJyZW50VGltZShSZW5kZXJPYmpl
Y3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IElu
dFJlY3QmIHIpCit7CisgICAgU3R5bGVQYWludGVyIHAodGhpcywgcGFpbnRJbmZvKTsKKyAgICBp
ZiAoIXAuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChvLT5zdHls
ZSgpKSB7CisgICAgICAgIC8vIFNldCB0aGUgdGV4dCBjb2xvciBkZXBlbmRpbmcgb24gcGxhdGZv
cm0KKyAgICAgICAgUVBhbGV0dGUgcGFsID0gUUFwcGxpY2F0aW9uOjpwYWxldHRlKCk7CisgICAg
ICAgIHNldFBhbGV0dGVGcm9tUGFnZUNsaWVudElmRXhpc3RzKHBhbCk7CisgICAgICAgIG8tPnN0
eWxlKCktPnNldFRleHRGaWxsQ29sb3IocGFsLmJydXNoKFFQYWxldHRlOjpBY3RpdmUsIFFQYWxl
dHRlOjpIaWdobGlnaHRlZFRleHQpLmNvbG9yKCkpOworICAgIH0KKworICAgIHAucGFpbnRlci0+
c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCB0cnVlKTsKKyAgICBwYWludE1l
ZGlhQmFja2dyb3VuZChwLnBhaW50ZXIsIHIpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitT
dHJpbmcgUmVuZGVyVGhlbWVRdDo6Zm9ybWF0TWVkaWFDb250cm9sc0N1cnJlbnRUaW1lKGZsb2F0
IGN1cnJlbnRUaW1lLCBmbG9hdCBkdXJhdGlvbikgY29uc3QKK3sKKyAgICByZXR1cm4gZm9ybWF0
TWVkaWFDb250cm9sc1RpbWUoY3VycmVudFRpbWUpICsgIiAvICIgKyBmb3JtYXRNZWRpYUNvbnRy
b2xzVGltZShkdXJhdGlvbik7Cit9CisKK1N0cmluZyBSZW5kZXJUaGVtZVF0Ojpmb3JtYXRNZWRp
YUNvbnRyb2xzUmVtYWluaW5nVGltZShmbG9hdCBjdXJyZW50VGltZSwgZmxvYXQgZHVyYXRpb24p
IGNvbnN0Cit7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitib29sIFJlbmRlclRoZW1lUXQ6
OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QgKm8sIGNvbnN0IFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvICZwYWludEluZm8sIGNvbnN0IEludFJlY3QgJnIpCit7CisgICAg
U3R5bGVQYWludGVyIHAodGhpcywgcGFpbnRJbmZvKTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHAucGFpbnRlci0+c2V0UmVuZGVySGludChRUGFp
bnRlcjo6QW50aWFsaWFzaW5nLCB0cnVlKTsKKworICAgIHBhaW50TWVkaWFCYWNrZ3JvdW5kKHAu
cGFpbnRlciwgcik7CisKKyAgICBpZiAoIW8tPmlzU2xpZGVyKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIEludFJlY3QgYiA9IHRvUmVuZGVyQm94KG8pLT5jb250ZW50Qm94UmVjdCgp
OworCisgICAgLy8gUG9zaXRpb24gdGhlIG91dGVyIHJlY3RhbmdsZQorICAgIGludCB0b3AgPSBy
LnkoKSArIGIueSgpOworICAgIGludCBsZWZ0ID0gci54KCkgKyBiLngoKTsKKyAgICBpbnQgd2lk
dGggPSBiLndpZHRoKCk7CisgICAgaW50IGhlaWdodCA9IGIuaGVpZ2h0KCk7CisKKyAgICAvLyBH
ZXQgdGhlIHNjYWxlIGNvbG9yIGZyb20gdGhlIHBhZ2UgY2xpZW50CisgICAgUVBhbGV0dGUgcGFs
ID0gUUFwcGxpY2F0aW9uOjpwYWxldHRlKCk7CisgICAgc2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50
SWZFeGlzdHMocGFsKTsKKyAgICBjb25zdCBRQ29sb3IgaGlnaGxpZ2h0VGV4dCA9IHBhbC5icnVz
aChRUGFsZXR0ZTo6QWN0aXZlLCBRUGFsZXR0ZTo6SGlnaGxpZ2h0ZWRUZXh0KS5jb2xvcigpOwor
ICAgIGNvbnN0IFFDb2xvciBzY2FsZUNvbG9yKGhpZ2hsaWdodFRleHQucmVkKCksIGhpZ2hsaWdo
dFRleHQuZ3JlZW4oKSwgaGlnaGxpZ2h0VGV4dC5ibHVlKCksIG1lZGlhQ29udHJvbHNCYXNlbGlu
ZU9wYWNpdHkoKSAqIDI1NSk7CisKKyAgICAvLyBEcmF3IHRoZSBvdXRlciByZWN0YW5nbGUKKyAg
ICBwLnBhaW50ZXItPnNldFBlbihRdDo6bGlnaHRHcmF5KTsKKyAgICBwLnBhaW50ZXItPnNldEJy
dXNoKHNjYWxlQ29sb3IpOworICAgIHAucGFpbnRlci0+ZHJhd1JlY3QobGVmdCwgdG9wLCB3aWR0
aCwgaGVpZ2h0KTsKKworICAgIGlmICghby0+bm9kZSgpIHx8ICFvLT5ub2RlKCktPmhhc1RhZ05h
bWUoaW5wdXRUYWcpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBIVE1MSW5wdXRFbGVt
ZW50KiBzbGlkZXIgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oby0+bm9kZSgpKTsK
KworICAgIC8vIFBvc2l0aW9uIHRoZSBpbm5lciByZWN0YW5nbGUKKyAgICBoZWlnaHQgPSAoaGVp
Z2h0IC0gMikgKiBzbGlkZXItPnZhbHVlQXNOdW1iZXIoKTsKKyAgICB3aWR0aCAtPSAyOworICAg
IGxlZnQgKz0gMTsKKyAgICB0b3AgKz0gKGIuaGVpZ2h0KCkgLSBoZWlnaHQpIC0gMTsKKworICAg
IC8vIERyYXcgdGhlIGlubmVyIHJlY3RhbmdsZQorICAgIHAucGFpbnRlci0+c2V0UGVuKFF0OjpO
b1Blbik7CisgICAgcC5wYWludGVyLT5zZXRCcnVzaChnZXRNZWRpYUNvbnRyb2xGb3JlZ3JvdW5k
Q29sb3IobykpOworICAgIHAucGFpbnRlci0+ZHJhd1JlY3QobGVmdCwgdG9wLCB3aWR0aCwgaGVp
Z2h0KTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWlu
dE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0ICpvLCBjb25zdCBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyAmcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0ICZyKQoreworICAgIFN0eWxl
UGFpbnRlciBwKHRoaXMsIHBhaW50SW5mbyk7CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBOb3RoaW5nIHRvIGRyYXcgaGVyZSwgdGhpcyBpcyBh
bGwgZG9uZSBpbiB0aGUgdHJhY2sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIGJvb2wgUmVuZGVy
VGhlbWVRdDo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVu
ZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKICAg
ICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBnZXRNZWRpYUVsZW1lbnRGcm9tUmVu
ZGVyT2JqZWN0KG8pOwpAQCAtOTg1LDE1ICsxMDc5LDMxIEBAIGJvb2wgUmVuZGVyVGhlbWVRdDo6
cGFpbnRNZWRpYVNsaWRlclRyYWMKIAogICAgIHBhaW50TWVkaWFCYWNrZ3JvdW5kKHAucGFpbnRl
ciwgcik7CiAKKyNpZiBRVF9WRVJTSU9OID49IDB4MDQwNzAwCisgICAgaWYgKE1lZGlhUGxheWVy
KiBwbGF5ZXIgPSBtZWRpYUVsZW1lbnQtPnBsYXllcigpKSB7CisgICAgICAgIC8vIEdldCB0aGUg
YnVmZmVyZWQgcGFydHMgb2YgdGhlIG1lZGlhCisgICAgICAgIFBhc3NSZWZQdHI8VGltZVJhbmdl
cz4gYnVmZmVyZWQgPSBwbGF5ZXItPmJ1ZmZlcmVkKCk7CisgICAgICAgIGlmIChidWZmZXJlZC0+
bGVuZ3RoKCkgPiAwICYmIHBsYXllci0+ZHVyYXRpb24oKSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8
ZmxvYXQ+OjppbmZpbml0eSgpKSB7CisgICAgICAgICAgICAvLyBTZXQgdGhlIHRyYW5zZm9ybSBh
bmQgYnJ1c2gKKyAgICAgICAgICAgIFdvcmxkTWF0cml4VHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIo
cC5wYWludGVyLCBvLCByKTsKKyAgICAgICAgICAgIHAucGFpbnRlci0+c2V0QnJ1c2goZ2V0TWVk
aWFDb250cm9sRm9yZWdyb3VuZENvbG9yKCkpOworCisgICAgICAgICAgICAvLyBQYWludCBlYWNo
IGJ1ZmZlcmVkIHNlY3Rpb24KKyAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZXg7CisgICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGJ1ZmZlcmVkLT5sZW5ndGgoKTsgaSsrKSB7CisgICAg
ICAgICAgICAgICAgZmxvYXQgc3RhcnRYID0gKGJ1ZmZlcmVkLT5zdGFydChpLCBleCkgLyBwbGF5
ZXItPmR1cmF0aW9uKCkpICogMTAwOworICAgICAgICAgICAgICAgIGZsb2F0IHdpZHRoID0gKChi
dWZmZXJlZC0+ZW5kKGksIGV4KSAvIHBsYXllci0+ZHVyYXRpb24oKSkgKiAxMDApIC0gc3RhcnRY
OworICAgICAgICAgICAgICAgIHAucGFpbnRlci0+ZHJhd1JlY3Qoc3RhcnRYLCAzNywgd2lkdGgs
IDI2KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCiBib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50TWVkaWFTbGlkZXJUaHVt
YihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEludFJlY3QmIHIpCiB7Ci0gICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVt
ZW50ID0gZ2V0TWVkaWFFbGVtZW50RnJvbVJlbmRlck9iamVjdChvLT5wYXJlbnQoKSk7Ci0gICAg
aWYgKCFtZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgIFN0eWxlUGFp
bnRlciBwKHRoaXMsIHBhaW50SW5mbyk7CiAgICAgaWYgKCFwLmlzVmFsaWQoKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CkBAIC0xMDE5LDYgKzExMjksMTMgQEAgdm9pZCBSZW5kZXJUaGVtZVF0Ojph
ZGp1c3RTbGlkZXJUaHVtYlNpegogICAgICAgICBpbnQgcGFyZW50SGVpZ2h0ID0gcGFyZW50U3R5
bGUtPmhlaWdodCgpLnZhbHVlKCk7CiAgICAgICAgIG8tPnN0eWxlKCktPnNldFdpZHRoKExlbmd0
aChwYXJlbnRIZWlnaHQgLyAzLCBGaXhlZCkpOwogICAgICAgICBvLT5zdHlsZSgpLT5zZXRIZWln
aHQoTGVuZ3RoKHBhcmVudEhlaWdodCwgRml4ZWQpKTsKKyAgICB9IGVsc2UgaWYgKHBhcnQgPT0g
TWVkaWFWb2x1bWVTbGlkZXJUaHVtYlBhcnQpIHsKKyAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVu
dFN0eWxlID0gby0+cGFyZW50KCktPnN0eWxlKCk7CisgICAgICAgIFFfQVNTRVJUKHBhcmVudFN0
eWxlKTsKKworICAgICAgICBpbnQgcGFyZW50V2lkdGggPSBwYXJlbnRTdHlsZS0+d2lkdGgoKS52
YWx1ZSgpOworICAgICAgICBvLT5zdHlsZSgpLT5zZXRIZWlnaHQoTGVuZ3RoKHBhcmVudFdpZHRo
IC8gMywgRml4ZWQpKTsKKyAgICAgICAgby0+c3R5bGUoKS0+c2V0V2lkdGgoTGVuZ3RoKHBhcmVu
dFdpZHRoLCBGaXhlZCkpOwogICAgIH0gZWxzZSBpZiAocGFydCA9PSBTbGlkZXJUaHVtYkhvcml6
b250YWxQYXJ0IHx8IHBhcnQgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpIHsKICAgICAgICAg
UVN0eWxlT3B0aW9uU2xpZGVyIG9wdGlvbjsKICAgICAgICAgaWYgKHBhcnQgPT0gU2xpZGVyVGh1
bWJWZXJ0aWNhbFBhcnQpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuaAkocmV2
aXNpb24gNTQ2NDEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuaAkod29y
a2luZyBjb3B5KQpAQCAtMTI3LDEwICsxMjcsMTUgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwg
Ym9vbCBwYWludE1lZGlhU2Vla0ZvcndhcmRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVu
ZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29s
IHBhaW50TWVkaWFTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRp
YVNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpOwotCisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFDdXJyZW50
VGltZShSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNr
KFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIoUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7CisgICAgdmlydHVhbCBTdHJpbmcgZm9ybWF0TWVkaWFDb250cm9sc0N1cnJlbnRUaW1lKGZs
b2F0IGN1cnJlbnRUaW1lLCBmbG9hdCBkdXJhdGlvbikgY29uc3Q7CisgICAgdmlydHVhbCBTdHJp
bmcgZm9ybWF0TWVkaWFDb250cm9sc1JlbWFpbmluZ1RpbWUoZmxvYXQgY3VycmVudFRpbWUsIGZs
b2F0IGR1cmF0aW9uKSBjb25zdDsKIHByaXZhdGU6CiAgICAgSFRNTE1lZGlhRWxlbWVudCogZ2V0
TWVkaWFFbGVtZW50RnJvbVJlbmRlck9iamVjdChSZW5kZXJPYmplY3QqIG8pIGNvbnN0OwogICAg
IHZvaWQgcGFpbnRNZWRpYUJhY2tncm91bmQoUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IEludFJl
Y3QmIHIpIGNvbnN0OworICAgIGRvdWJsZSBtZWRpYUNvbnRyb2xzQmFzZWxpbmVPcGFjaXR5KCkg
Y29uc3Q7CiAgICAgUUNvbG9yIGdldE1lZGlhQ29udHJvbEZvcmVncm91bmRDb2xvcihSZW5kZXJP
YmplY3QqIG8gPSAwKSBjb25zdDsKICNlbmRpZgogICAgIHZvaWQgY29tcHV0ZVNpemVCYXNlZE9u
U3R5bGUoUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlKSBjb25zdDsK
</data>
<flag name="review"
          id="31252"
          type_id="1"
          status="-"
          setter="vestbo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49059</attachid>
            <date>2010-02-18 23:40:46 -0800</date>
            <delta_ts>2010-02-18 23:51:17 -0800</delta_ts>
            <desc>Updated Patch - Simplified and Improved</desc>
            <filename>webkit-qtmultimedia-integration.txt</filename>
            <type>text/plain</type>
            <size>40962</size>
            <attacher name="Nick Young">nicholas.young</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YzU3MTRlMi4uMDg4MjkxZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3OSBAQAorMjAxMC0wMi0xOCAgTmljaG9sYXMgWW91
bmcgIDxuaWNob2xhcy55b3VuZ0Bub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0XSBTd2l0Y2hpbmcgZnJvbSBQaG9ub24gdG8gUXRN
dWx0aW1lZGlhIEJhY2tlbmQgZm9yIFF0IDQuNworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ2MzEKKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMg
cGF0Y2ggb25seSBhZmZlY3RzIG11bHRpbWVkaWEgYmFja2VuZC4KKworICAgICAgICAqIFdlYkNv
cmUucHJvOiBCdWlsZCBkZXBlbmRzIG9uIFF0IHZlcnNpb24uCisgICAgICAgICogY3NzL21lZGlh
Q29udHJvbHNRdC5jc3M6IFVwZGF0ZWQgbWVkaWEgY29udHJvbHMuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwOiBEaWZmZXJlbnQgYmFja2VuZCBpbmNsdWRlZCBk
ZXBlbmRpbmcgb24gUXQgdmVyc2lvbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9N
ZWRpYVBsYXllclByaXZhdGVRdC5jcHA6IEFkZGVkIG5ldyBRdE11bHRpbWVkaWEgQmFja2VuZC4K
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6cmVnaXN0ZXJNZWRpYUVuZ2luZSk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OmdldFN1cHBvcnRlZFR5cGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6c3VwcG9ydHNUeXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6TWVkaWFQbGF5ZXJQcml2YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6fk1lZGlhUGxheWVyUHJpdmF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6Omhhc1ZpZGVvKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6aGFzQXVkaW8pOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZTo6Y2FuY2VsTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGU6OnBsYXkpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpw
YXVzZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnBhdXNlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnNlZWspOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpzZWVraW5nKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZTo6ZHVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlOjpjdXJyZW50VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGU6OmJ1ZmZlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6
bWF4VGltZVNlZWthYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6
Ynl0ZXNMb2FkZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjp0b3Rh
bEJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0UmF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnNldFZvbHVtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnN1cHBvcnRzTXV0aW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0TXV0ZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpuZXR3b3JrU3RhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpyZWFkeVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZTo6c2V0VmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGU6Om1lZGlhU3RhdHVzQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGU6OmhhbmRsZUVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZTo6c3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZTo6bmF0aXZlU2l6ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlOjpxdWV1ZWRTZWVrVGltZW91dCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGU6OnNlZWtUaW1lb3V0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZTo6cG9zaXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZTo6ZHVyYXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZTo6dm9sdW1lQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGU6Om11dGVkQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGU6OnVwZGF0ZVN0YXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6
OnNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpuYXR1cmFs
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnBhaW50KToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6cmVwYWludCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuaDogQWRkZWQgbmV3IFF0
TXVsdGltZWRpYSBCYWNrZW5kLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
Ojppc0F2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnN1
cHBvcnRzRnVsbHNjcmVlbik6CisgICAgICAgICogcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjptZWRpYUNvbnRyb2xzQmFzZWxp
bmVPcGFjaXR5KTogTmV3IG1ldGhvZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6
OnBhaW50TWVkaWFCYWNrZ3JvdW5kKTogQmFja2dyb3VuZCBkZXBlbmRzIG9uIGJhc2VsaW5lIG9w
YWNpdHkuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhTXV0ZUJ1
dHRvbik6IENoYW5nZWQgc3R5bGluZy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6
OnBhaW50TWVkaWFDdXJyZW50VGltZSk6IEFkZGVkIGN1cnJlbnQgdGltZSBkaXNwbGF5LgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6Zm9ybWF0TWVkaWFDb250cm9sc0N1cnJlbnRU
aW1lKTogQWRkZWQgdGltZSBmb3JtYXR0aW5nLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVRdDo6Zm9ybWF0TWVkaWFDb250cm9sc1JlbWFpbmluZ1RpbWUpOiBBZGRlZCB0aW1lIGZvcm1h
dHRpbmcuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhVm9sdW1l
U2xpZGVyVHJhY2spOiBWb2x1bWUgc2xpZGVyIGFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRodW1iKTogVm9sdW1lIHNsaWRlciBh
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBhaW50TWVkaWFTbGlkZXJU
cmFjayk6IFVwZGF0ZWQgZm9yIFF0TXVsdGltZWRpYS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lUXQ6OnBhaW50TWVkaWFTbGlkZXJUaHVtYik6IERyb3BwZWQgYW4gdW5uZWNlc3Nhcnkg
Y2hlY2suCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjphZGp1c3RTbGlkZXJUaHVt
YlNpemUpOiBIYW5kbGUgYSBtaXNzaW5nIGNhc2UuCisgICAgICAgICogcGxhdGZvcm0vcXQvUmVu
ZGVyVGhlbWVRdC5oOiBSZWltcGxlbWVudGVkIGEgZmV3IG1vcmUgbWV0aG9kcy4KKwogMjAxMC0w
Mi0xOCAgWWFhciBTY2huaXRtYW4gIDx5YWFyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9X
ZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IDRjYjQ3OTQuLjkwNjQ3YWUgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtMTMxLDExICsx
MzEsMjEgQEAgbWFtZW81fHN5bWJpYW58ZW1iZWRkZWQgewogCiBpbmNsdWRlKCQkUFdELy4uL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnByaSkKIAotIyBEaXNhYmxlIEhUTUw1IG1lZGlh
IGNvbXBpbGF0aW9uIGlmIHBob25vbiBpcyB1bmF2YWlsYWJsZQotIWNvbnRhaW5zKERFRklORVMs
IEVOQUJMRV9WSURFTz0xKSB7Ci0gICAgIWNvbnRhaW5zKFFUX0NPTkZJRywgcGhvbm9uKSB7Ci0g
ICAgICAgIERFRklORVMgLT0gRU5BQkxFX1ZJREVPPTEKLSAgICAgICAgREVGSU5FUyArPSBFTkFC
TEVfVklERU89MAorCisjIEhUTUw1IE1lZGlhIFN1cHBvcnQKKyMgV2UgcmVxdWlyZSBwaG9ub24g
Zm9yIHZlcnNpb25zIG9mIFF0IDwgNC43CisjIFdlIHJlcXVpcmUgUXRNdWx0aW1lZGlhIGZvciB2
ZXJzaW9ucyBvZiBRdCA+PSA0LjcKKyFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfVklERU89MSk6
IWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9WSURFTz0wKSB7CisgICAgREVGSU5FUyAtPSBFTkFC
TEVfVklERU89MQorICAgIERFRklORVMgKz0gRU5BQkxFX1ZJREVPPTAKKworICAgIGxlc3NUaGFu
KFFUX01JTk9SX1ZFUlNJT04sIDcpOmNvbnRhaW5zKFFUX0NPTkZJRywgcGhvbm9uKSB7CisgICAg
ICAgIERFRklORVMgLT0gRU5BQkxFX1ZJREVPPTAKKyAgICAgICAgREVGSU5FUyArPSBFTkFCTEVf
VklERU89MQorICAgIH0KKyAgICAhbGVzc1RoYW4oUVRfTUlOT1JfVkVSU0lPTiwgNyk6Y29udGFp
bnMoUVRfQ09ORklHLCBtdWx0aW1lZGlhKSB7CisgICAgICAgIERFRklORVMgLT0gRU5BQkxFX1ZJ
REVPPTAKKyAgICAgICAgREVGSU5FUyArPSBFTkFCTEVfVklERU89MQogICAgIH0KIH0KIApAQCAt
MjMwNSwyMSArMjMxNSwyOSBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfVklERU89MSkgewog
ICAgICAgICByZW5kZXJpbmcvUmVuZGVyTWVkaWEuY3BwIFwKICAgICAgICAgYmluZGluZ3MvanMv
SlNBdWRpb0NvbnN0cnVjdG9yLmNwcAogCi0gICAgICAgIEhFQURFUlMgKz0gXAotICAgICAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uLmgKKyAgICAg
ICAgIyBRdE11bHRpbWVkaWEgc2luY2UgNC43CisgICAgICAgIGdyZWF0ZXJUaGFuKFFUX01JTk9S
X1ZFUlNJT04sIDYpIHsKKyAgICAgICAgICAgIEhFQURFUlMgKz0gcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuaAorICAgICAgICAgICAgU09VUkNFUyArPSBwbGF0Zm9y
bS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5jcHAKIAotICAgICAgICBTT1VSQ0VT
ICs9IFwKLSAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0
ZVBob25vbi5jcHAKLQotICAgICAgICAjIEFkZCBwaG9ub24gbWFudWFsbHkgdG8gcHJldmVudCBp
dCBmcm9tIGNvbWluZyBmaXJzdCBpbgotICAgICAgICAjIHRoZSBpbmNsdWRlIHBhdGhzLCBhcyBQ
aG9ub24ncyBwYXRoLmggY29uZmxpY3RzIHdpdGgKLSAgICAgICAgIyBXZWJDb3JlJ3MgUGF0aC5o
IG9uIGNhc2UtaW5zZW5zaXRpdmUgZmlsZXN5c3RlbXMuCi0gICAgICAgIHF0QWRkTGlicmFyeShw
aG9ub24pCi0gICAgICAgIElOQ0xVREVQQVRIIC09ICQkUU1BS0VfSU5DRElSX1FUL3Bob25vbgot
ICAgICAgICBJTkNMVURFUEFUSCArPSAkJFFNQUtFX0lOQ0RJUl9RVC9waG9ub24KLSAgICAgICAg
bWFjIHsKLSAgICAgICAgICAgIElOQ0xVREVQQVRIIC09ICQkUU1BS0VfTElCRElSX1FUL3Bob25v
bi5mcmFtZXdvcmsvSGVhZGVycwotICAgICAgICAgICAgSU5DTFVERVBBVEggKz0gJCRRTUFLRV9M
SUJESVJfUVQvcGhvbm9uLmZyYW1ld29yay9IZWFkZXJzCisgICAgICAgICAgICBRVCArPSBtdWx0
aW1lZGlhCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBIRUFERVJTICs9IFwKKyAgICAg
ICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVQaG9ub24u
aAorCisgICAgICAgICAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAgICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVQaG9ub24uY3BwCisKKyAgICAgICAgICAgICMg
QWRkIHBob25vbiBtYW51YWxseSB0byBwcmV2ZW50IGl0IGZyb20gY29taW5nIGZpcnN0IGluCisg
ICAgICAgICAgICAjIHRoZSBpbmNsdWRlIHBhdGhzLCBhcyBQaG9ub24ncyBwYXRoLmggY29uZmxp
Y3RzIHdpdGgKKyAgICAgICAgICAgICMgV2ViQ29yZSdzIFBhdGguaCBvbiBjYXNlLWluc2Vuc2l0
aXZlIGZpbGVzeXN0ZW1zLgorICAgICAgICAgICAgcXRBZGRMaWJyYXJ5KHBob25vbikKKyAgICAg
ICAgICAgIElOQ0xVREVQQVRIIC09ICQkUU1BS0VfSU5DRElSX1FUL3Bob25vbgorICAgICAgICAg
ICAgSU5DTFVERVBBVEggKz0gJCRRTUFLRV9JTkNESVJfUVQvcGhvbm9uCisgICAgICAgICAgICBt
YWMgeworICAgICAgICAgICAgICAgIElOQ0xVREVQQVRIIC09ICQkUU1BS0VfTElCRElSX1FUL3Bo
b25vbi5mcmFtZXdvcmsvSGVhZGVycworICAgICAgICAgICAgICAgIElOQ0xVREVQQVRIICs9ICQk
UU1BS0VfTElCRElSX1FUL3Bob25vbi5mcmFtZXdvcmsvSGVhZGVycworICAgICAgICAgICAgfQog
ICAgICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL21lZGlhQ29udHJvbHNRdC5j
c3MgYi9XZWJDb3JlL2Nzcy9tZWRpYUNvbnRyb2xzUXQuY3NzCmluZGV4IGE5YzM2MDkuLmQ0OWZl
OTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL21lZGlhQ29udHJvbHNRdC5jc3MKKysrIGIvV2Vi
Q29yZS9jc3MvbWVkaWFDb250cm9sc1F0LmNzcwpAQCAtNTEsOCArNTEsNiBAQCB2aWRlbzotd2Vi
a2l0LWZ1bGwtcGFnZS1tZWRpYTo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1wYW5lbCB7CiB9CiAK
IGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLW11dGUtYnV0dG9uLCB2aWRlbzo6LXdlYmtp
dC1tZWRpYS1jb250cm9scy1tdXRlLWJ1dHRvbiB7Ci0gICAgbGVmdDogYXV0bzsKLSAgICByaWdo
dDogNXB4OwogICAgIHdpZHRoOiAxMnB4OwogICAgIGhlaWdodDogMTJweDsKICAgICBwYWRkaW5n
OiA2cHg7CkBAIC02MCw3ICs1OCw2IEBAIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLW11
dGUtYnV0dG9uLCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1tdXRlLWJ1CiB9CiAKIGF1
ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXBsYXktYnV0dG9uLCB2aWRlbzo6LXdlYmtpdC1t
ZWRpYS1jb250cm9scy1wbGF5LWJ1dHRvbiB7Ci0gICAgbGVmdDogNXB4OwogICAgIHdpZHRoOiA5
cHg7CiAgICAgaGVpZ2h0OiAxMnB4OwogICAgIHBhZGRpbmc6IDZweCAxMnB4IDZweCAxMXB4OwpA
QCAtNzIsNyArNjksMjEgQEAgYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdGltZWxpbmUt
Y29udGFpbmVyLCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy0KIH0KIAogYXVkaW86Oi13
ZWJraXQtbWVkaWEtY29udHJvbHMtY3VycmVudC10aW1lLWRpc3BsYXksIHZpZGVvOjotd2Via2l0
LW1lZGlhLWNvbnRyb2xzLWN1cnJlbnQtdGltZS1kaXNwbGF5IHsKLSAgICBkaXNwbGF5OiBub25l
OworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbWVkaWEtY3VycmVudC10aW1lLWRpc3BsYXk7Cisg
ICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKKyAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7
CisgICAgaGVpZ2h0OiAxMnB4OworICAgIHBhZGRpbmc6IDZweDsKKyAgICBtYXJnaW46IDVweCAz
cHg7CisKKyAgICBvdmVyZmxvdzogaGlkZGVuOworICAgIGN1cnNvcjogZGVmYXVsdDsKKworICAg
IHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICBmb250LXNpemU6IDEwcHg7CisgICAgZm9udC1mYW1p
bHk6IFZlcmRhbmE7CisgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgY29sb3I6IHdoaXRlOwog
fQogCiBhdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lLXJlbWFpbmluZy1kaXNwbGF5
LCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lLXJlbWFpbmluZy1kaXNwbGF5IHsK
QEAgLTgwLDUxICs5MSwzOCBAQCBhdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lLXJl
bWFpbmluZy1kaXNwbGF5LCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cgogfQogCiBhdWRpbzo6
LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lbGluZSwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29u
dHJvbHMtdGltZWxpbmUgewotICAgIGxlZnQ6IDQycHg7Ci0gICAgcmlnaHQ6IDM0cHg7CiAgICAg
aGVpZ2h0OiAxMnB4OwogICAgIHBhZGRpbmc6IDZweCA4cHg7Ci0gICAgbWFyZ2luOiA1cHggMHB4
OworICAgIG1hcmdpbjogNXB4IDNweDsKIH0KIAogYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJv
bHMtdm9sdW1lLXNsaWRlci1jb250YWluZXIsIHZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xz
LXZvbHVtZS1zbGlkZXItY29udGFpbmVyIHsKLSAgICBkaXNwbGF5OiBub25lOworICAgIC13ZWJr
aXQtYXBwZWFyYW5jZTogbWVkaWEtdm9sdW1lLXNsaWRlci1jb250YWluZXI7CisgICAgcG9zaXRp
b246IGFic29sdXRlOworICAgIGhlaWdodDogMTAzcHg7CisgICAgd2lkdGg6IDI0cHg7CiB9CiAK
IGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXZvbHVtZS1zbGlkZXIsIHZpZGVvOjotd2Vi
a2l0LW1lZGlhLWNvbnRyb2xzLXZvbHVtZS1zbGlkZXIgewotICAgIGRpc3BsYXk6IG5vbmU7Cisg
ICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBtZWRpYS12b2x1bWUtc2xpZGVyOworICAgIGRpc3BsYXk6
IGlubGluZTsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisKKyAgICB3aWR0aDogMTJweDsKKyAg
ICBwYWRkaW5nOiA2cHg7CisgICAgaGVpZ2h0OiA4OHB4OworICAgIG1hcmdpbjogMCAwIDNweCAw
OwogfQogCiBhdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1zZWVrLWJhY2stYnV0dG9uLCB2
aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1zZWVrLWJhY2stYnV0dG9uIHsKLSAgICAvKiBT
aW5jZSBNZWRpYUNvbnRyb2xFbGVtZW50cyBhcmUgYWx3YXlzIGNyZWF0ZWQgd2l0aCBhIHJlbmRl
cmVyIHdlIGhhdmUgdG8gaGlkZQotICAgICAgIHRoZSBjb250cm9scyB3ZSBkb24ndCB1c2UsIHNv
IHRoZXkgZG9uJ3QgbWVzcyB1cCBhY3RpdmF0aW9uIGFuZCBldmVudCBoYW5kbGluZyAqLwotICAg
IGxlZnQ6IDBweDsKLSAgICB0b3A6IDBweDsKLSAgICB3aWR0aDogMHB4OwotICAgIGhlaWdodDog
MHB4OwotCiAgICAgZGlzcGxheTogbm9uZTsKIH0KIAogYXVkaW86Oi13ZWJraXQtbWVkaWEtY29u
dHJvbHMtc2Vlay1mb3J3YXJkLWJ1dHRvbiwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMt
c2Vlay1mb3J3YXJkLWJ1dHRvbiB7Ci0gICAgLyogU2luY2UgTWVkaWFDb250cm9sRWxlbWVudHMg
YXJlIGFsd2F5cyBjcmVhdGVkIHdpdGggYSByZW5kZXJlciB3ZSBoYXZlIHRvIGhpZGUKLSAgICAg
ICB0aGUgY29udHJvbHMgd2UgZG9uJ3QgdXNlLCBzbyB0aGV5IGRvbid0IG1lc3MgdXAgYWN0aXZh
dGlvbiBhbmQgZXZlbnQgaGFuZGxpbmcgKi8KLSAgICBsZWZ0OiAwcHg7Ci0gICAgdG9wOiAwcHg7
Ci0gICAgd2lkdGg6IDBweDsKLSAgICBoZWlnaHQ6IDBweDsKLQogICAgIGRpc3BsYXk6IG5vbmU7
CiB9CiAKIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWZ1bGxzY3JlZW4tYnV0dG9uLCB2
aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1mdWxsc2NyZWVuLWJ1dHRvbiB7Ci0gICAgLyog
U2luY2UgTWVkaWFDb250cm9sRWxlbWVudHMgYXJlIGFsd2F5cyBjcmVhdGVkIHdpdGggYSByZW5k
ZXJlciB3ZSBoYXZlIHRvIGhpZGUKLSAgICAgICB0aGUgY29udHJvbHMgd2UgZG9uJ3QgdXNlLCBz
byB0aGV5IGRvbid0IG1lc3MgdXAgYWN0aXZhdGlvbiBhbmQgZXZlbnQgaGFuZGxpbmcgKi8KLSAg
ICBsZWZ0OiAwcHg7Ci0gICAgdG9wOiAwcHg7Ci0gICAgd2lkdGg6IDBweDsKLSAgICBoZWlnaHQ6
IDBweDsKLQogICAgIGRpc3BsYXk6IG5vbmU7CiB9CiAKQEAgLTEzNiwzICsxMzQsNyBAQCBhdWRp
bzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1yZXR1cm4tdG8tcmVhbHRpbWUtYnV0dG9uLCB2aWRl
bzo6LXdlYmtpdC1tZWRpYS1jbwogICAgIGRpc3BsYXk6IG5vbmU7CiB9CiAKK2F1ZGlvOjotd2Vi
a2l0LW1lZGlhLWNvbnRyb2xzLXRvZ2dsZS1jbG9zZWQtY2FwdGlvbnMtYnV0dG9uLCB2aWRlbzo6
LXdlYmtpdC1tZWRpYS1jb250cm9scy10b2dnbGUtY2xvc2VkLWNhcHRpb25zLWJ1dHRvbiB7Cisg
ICAgZGlzcGxheTogbm9uZTsKK30KKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9NZWRpYVBsYXllci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxh
eWVyLmNwcAppbmRleCA5ZjhlOTIzLi5mZjkzMDNhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL01lZGlhUGxheWVyLmNwcApAQCAtMzcsNiArMzcsMTAgQEAKICNpbmNsdWRlICJEb2N1bWVu
dC5oIgogI2luY2x1ZGUgIlRpbWVSYW5nZXMuaCIKIAorI2lmIFBMQVRGT1JNKFFUKQorI2luY2x1
ZGUgPFF0R2xvYmFsPgorI2VuZGlmCisKICNpZiBQTEFURk9STShNQUMpCiAjaW5jbHVkZSAiTWVk
aWFQbGF5ZXJQcml2YXRlUVRLaXQuaCIKICNlbGlmIE9TKFdJTkNFKSAmJiAhUExBVEZPUk0oUVQp
CkBAIC00Niw3ICs1MCwxMSBAQAogI2VsaWYgUExBVEZPUk0oR1RLKQogI2luY2x1ZGUgIk1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oIgogI2VsaWYgUExBVEZPUk0oUVQpCisjaWYgUVRfVkVS
U0lPTiA8IDB4MDQwNzAwCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uLmgiCisj
ZWxzZQorI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZVF0LmgiCisjZW5kaWYKICNlbGlmIFBM
QVRGT1JNKENIUk9NSVVNKQogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUNocm9taXVtLmgi
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQ
bGF5ZXJQcml2YXRlUXQuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBs
YXllclByaXZhdGVRdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjky
MmE3NQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVk
aWFQbGF5ZXJQcml2YXRlUXQuY3BwCkBAIC0wLDAgKzEsNTQwIEBACisvKgorICAgIENvcHlyaWdo
dCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
KworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlUXQu
aCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudFF0
LmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CisjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1l
bnQuaCIKKyNpbmNsdWRlICJUaW1lUmFuZ2VzLmgiCisjaW5jbHVkZSAiV2lkZ2V0LmgiCisjaW5j
bHVkZSAicXdlYmZyYW1lLmgiCisjaW5jbHVkZSAicXdlYnBhZ2UuaCIKKworI2luY2x1ZGUgPFFH
cmFwaGljc1NjZW5lPgorI2luY2x1ZGUgPFFHcmFwaGljc1ZpZGVvSXRlbT4KKyNpbmNsdWRlIDxR
TWVkaWFQbGF5ZXJDb250cm9sPgorI2luY2x1ZGUgPFFNZWRpYVNlcnZpY2U+CisjaW5jbHVkZSA8
UU5ldHdvcmtBY2Nlc3NNYW5hZ2VyPgorI2luY2x1ZGUgPFFOZXR3b3JrQ29va2llSmFyPgorI2lu
Y2x1ZGUgPFFOZXR3b3JrUmVxdWVzdD4KKyNpbmNsdWRlIDxRUGFpbnRlcj4KKyNpbmNsdWRlIDxR
UG9pbnQ+CisjaW5jbHVkZSA8UVJlY3Q+CisjaW5jbHVkZSA8UVRpbWU+CisjaW5jbHVkZSA8UVRp
bWVyPgorI2luY2x1ZGUgPFFVcmw+CisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlKiBNZWRpYVBsYXllclByaXZhdGU6OmNyZWF0
ZShNZWRpYVBsYXllciogcGxheWVyKQoreworICAgIHJldHVybiBuZXcgTWVkaWFQbGF5ZXJQcml2
YXRlKHBsYXllcik7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpyZWdpc3Rlck1lZGlh
RW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sKKyAgICByZWdpc3RyYXIo
Y3JlYXRlLCBnZXRTdXBwb3J0ZWRUeXBlcywgc3VwcG9ydHNUeXBlKTsKK30KKwordm9pZCBNZWRp
YVBsYXllclByaXZhdGU6OmdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiAmc3VwcG9y
dGVkKQoreworICAgIFFTdHJpbmdMaXN0IHR5cGVzID0gUU1lZGlhUGxheWVyOjpzdXBwb3J0ZWRN
aW1lVHlwZXMoKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZXMuc2l6ZSgpOyBpKysp
CisgICAgICAgIHN1cHBvcnRlZC5hZGQodHlwZXMuYXQoaSkpOworfQorCitNZWRpYVBsYXllcjo6
U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyUHJpdmF0ZTo6c3VwcG9ydHNUeXBlKGNvbnN0IFN0cmlu
ZyYgbWltZSwgY29uc3QgU3RyaW5nJiBjb2RlYykKK3sKKyAgICBpZiAoUU1lZGlhUGxheWVyOjpo
YXNTdXBwb3J0KG1pbWUsIFFTdHJpbmdMaXN0KGNvZGVjKSkgPj0gUXRNZWRpYTo6UHJvYmFibHlT
dXBwb3J0ZWQpCisgICAgICAgIHJldHVybiBNZWRpYVBsYXllcjo6SXNTdXBwb3J0ZWQ7CisKKyAg
ICByZXR1cm4gTWVkaWFQbGF5ZXI6Ok1heUJlU3VwcG9ydGVkOworfQorCitNZWRpYVBsYXllclBy
aXZhdGU6Ok1lZGlhUGxheWVyUHJpdmF0ZShNZWRpYVBsYXllciogcGxheWVyKQorICAgIDogbV9w
bGF5ZXIocGxheWVyKQorICAgICwgbV9tZWRpYVBsYXllcihuZXcgUU1lZGlhUGxheWVyKQorICAg
ICwgbV92aWRlb0l0ZW0obmV3IFFHcmFwaGljc1ZpZGVvSXRlbSkKKyAgICAsIG1fdmlkZW9TY2Vu
ZShuZXcgUUdyYXBoaWNzU2NlbmUpCisgICAgLCBtX25ldHdvcmtTdGF0ZShNZWRpYVBsYXllcjo6
RW1wdHkpCisgICAgLCBtX3JlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nKQorICAg
ICwgbV9pc1Zpc2libGUoZmFsc2UpCisgICAgLCBtX2lzU2Vla2luZyhmYWxzZSkKKyAgICAsIG1f
cXVldWVkU2VlaygtMSkKK3sKKyAgICBtX3ZpZGVvSXRlbS0+c2V0TWVkaWFPYmplY3QobV9tZWRp
YVBsYXllcik7CisgICAgbV92aWRlb1NjZW5lLT5hZGRJdGVtKG1fdmlkZW9JdGVtKTsKKworICAg
IC8vIFNpZ25hbCBIYW5kbGVycworICAgIGNvbm5lY3QobV9tZWRpYVBsYXllciwgU0lHTkFMKG1l
ZGlhU3RhdHVzQ2hhbmdlZChRTWVkaWFQbGF5ZXI6Ok1lZGlhU3RhdHVzKSksCisgICAgICAgICAg
ICB0aGlzLCBTTE9UKG1lZGlhU3RhdHVzQ2hhbmdlZChRTWVkaWFQbGF5ZXI6Ok1lZGlhU3RhdHVz
KSkpOworICAgIGNvbm5lY3QobV9tZWRpYVBsYXllciwgU0lHTkFMKHN0YXRlQ2hhbmdlZChRTWVk
aWFQbGF5ZXI6OlN0YXRlKSksCisgICAgICAgICAgICB0aGlzLCBTTE9UKHN0YXRlQ2hhbmdlZChR
TWVkaWFQbGF5ZXI6OlN0YXRlKSkpOworICAgIGNvbm5lY3QobV9tZWRpYVBsYXllciwgU0lHTkFM
KGVycm9yKFFNZWRpYVBsYXllcjo6RXJyb3IpKSwKKyAgICAgICAgICAgIHRoaXMsIFNMT1QoaGFu
ZGxlRXJyb3IoUU1lZGlhUGxheWVyOjpFcnJvcikpKTsKKyAgICBjb25uZWN0KG1fbWVkaWFQbGF5
ZXIsIFNJR05BTChkdXJhdGlvbkNoYW5nZWQocWludDY0KSksCisgICAgICAgICAgICB0aGlzLCBT
TE9UKGR1cmF0aW9uQ2hhbmdlZChxaW50NjQpKSk7CisgICAgY29ubmVjdChtX21lZGlhUGxheWVy
LCBTSUdOQUwocG9zaXRpb25DaGFuZ2VkKHFpbnQ2NCkpLAorICAgICAgICAgICAgdGhpcywgU0xP
VChwb3NpdGlvbkNoYW5nZWQocWludDY0KSkpOworICAgIGNvbm5lY3QobV9tZWRpYVBsYXllciwg
U0lHTkFMKHZvbHVtZUNoYW5nZWQoaW50KSksCisgICAgICAgICAgICB0aGlzLCBTTE9UKHZvbHVt
ZUNoYW5nZWQoaW50KSkpOworICAgIGNvbm5lY3QobV9tZWRpYVBsYXllciwgU0lHTkFMKG11dGVk
Q2hhbmdlZChib29sKSksCisgICAgICAgICAgICB0aGlzLCBTTE9UKG11dGVkQ2hhbmdlZChib29s
KSkpOworICAgIGNvbm5lY3QobV92aWRlb1NjZW5lLCBTSUdOQUwoY2hhbmdlZChRTGlzdDxRUmVj
dEY+KSksCisgICAgICAgICAgICB0aGlzLCBTTE9UKHJlcGFpbnQoKSkpOworICAgIGNvbm5lY3Qo
bV92aWRlb0l0ZW0sIFNJR05BTChuYXRpdmVTaXplQ2hhbmdlZChRU2l6ZUYpKSwKKyAgICAgICAg
ICAgdGhpcywgU0xPVChuYXRpdmVTaXplQ2hhbmdlZChRU2l6ZUYpKSk7CisKKyAgICAvLyBHcmFi
IHRoZSBwbGF5ZXIgY29udHJvbAorICAgIFFNZWRpYVNlcnZpY2UqIHNlcnZpY2UgPSBtX21lZGlh
UGxheWVyLT5zZXJ2aWNlKCk7CisgICAgaWYgKHNlcnZpY2UpIHsKKyAgICAgICAgbV9tZWRpYVBs
YXllckNvbnRyb2wgPSBxb2JqZWN0X2Nhc3Q8UU1lZGlhUGxheWVyQ29udHJvbCAqPigKKyAgICAg
ICAgICAgICAgICBzZXJ2aWNlLT5jb250cm9sKFFNZWRpYVBsYXllckNvbnRyb2xfaWlkKSk7Cisg
ICAgfQorfQorCitNZWRpYVBsYXllclByaXZhdGU6On5NZWRpYVBsYXllclByaXZhdGUoKQorewor
ICAgIGRlbGV0ZSBtX21lZGlhUGxheWVyOworICAgIGRlbGV0ZSBtX3ZpZGVvU2NlbmU7Cit9CisK
K2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpoYXNWaWRlbygpIGNvbnN0Cit7CisgICAgLy8gcmV0
dXJuIG1fbWVkaWFQbGF5ZXItPmlzVmlkZW9BdmFpbGFibGUoKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGU6Omhhc0F1ZGlvKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmxvYWQoY29uc3QgU3Ry
aW5nJiB1cmwpCit7CisgICAgLy8gV2UgYXJlIG5vdyBsb2FkaW5nCisgICAgaWYgKG1fbmV0d29y
a1N0YXRlICE9IE1lZGlhUGxheWVyOjpMb2FkaW5nKSB7CisgICAgICAgIG1fbmV0d29ya1N0YXRl
ID0gTWVkaWFQbGF5ZXI6OkxvYWRpbmc7CisgICAgICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVD
aGFuZ2VkKCk7CisgICAgfQorCisgICAgLy8gQW5kIHdlIGRvbid0IGhhdmUgYW55IGRhdGEgeWV0
CisgICAgaWYgKG1fcmVhZHlTdGF0ZSAhPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcpIHsKKyAg
ICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOworICAgICAgICBt
X3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKKyAgICB9CisKKyAgICBjb25zdCBRVXJsIHJV
cmwgPSBRVXJsKFFTdHJpbmcodXJsKSk7CisgICAgY29uc3QgUVN0cmluZyBzY2hlbWUgPSByVXJs
LnNjaGVtZSgpLnRvTG93ZXIoKTsKKworICAgIC8vIEdyYWIgdGhlIGNsaWVudCBtZWRpYSBlbGVt
ZW50CisgICAgSFRNTE1lZGlhRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxNZWRp
YUVsZW1lbnQqPihtX3BsYXllci0+bWVkaWFQbGF5ZXJDbGllbnQoKSk7CisKKyAgICAvLyBDb25z
dHJ1Y3QgdGhlIG1lZGlhIGNvbnRlbnQgd2l0aCBhIG5ldHdvcmsgcmVxdWVzdCBpZiB0aGUgcmVz
b3VyY2UgaXMgaHR0cFtzXQorICAgIGlmIChzY2hlbWUgPT0gImh0dHAiIHx8IHNjaGVtZSA9PSAi
aHR0cHMiKSB7CisgICAgICAgIFFOZXR3b3JrUmVxdWVzdCByZXF1ZXN0ID0gUU5ldHdvcmtSZXF1
ZXN0KHJVcmwpOworCisgICAgICAgIC8vIEdyYWIgdGhlIGN1cnJlbnQgZG9jdW1lbnQKKyAgICAg
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZWxlbWVudC0+ZG9jdW1lbnQoKTsKKyAgICAgICAgaWYg
KCFkb2N1bWVudCkKKyAgICAgICAgICAgIGRvY3VtZW50ID0gZWxlbWVudC0+b3duZXJEb2N1bWVu
dCgpOworCisgICAgICAgIC8vIEdyYWIgdGhlIGZyYW1lIGFuZCBuZXR3b3JrIG1hbmFnZXIKKyAg
ICAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQgPyBkb2N1bWVudC0+ZnJhbWUoKSA6IDA7Cisg
ICAgICAgIEZyYW1lTG9hZGVyQ2xpZW50UXQqIGZyYW1lTG9hZGVyID0gIGZyYW1lID8gc3RhdGlj
X2Nhc3Q8RnJhbWVMb2FkZXJDbGllbnRRdCo+KGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCkpIDog
MDsKKyAgICAgICAgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyKiBtYW5hZ2VyID0gZnJhbWVMb2FkZXIg
PyBmcmFtZUxvYWRlci0+d2ViRnJhbWUoKS0+cGFnZSgpLT5uZXR3b3JrQWNjZXNzTWFuYWdlcigp
IDogMDsKKworICAgICAgICBpZiAoZG9jdW1lbnQgJiYgbWFuYWdlcikgeworICAgICAgICAgICAg
Ly8gU2V0IHRoZSBjb29raWVzCisgICAgICAgICAgICBRTmV0d29ya0Nvb2tpZUphciogamFyID0g
bWFuYWdlci0+Y29va2llSmFyKCk7CisgICAgICAgICAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT4g
Y29va2llcyA9IGphci0+Y29va2llc0ZvclVybChyVXJsKTsKKworICAgICAgICAgICAgLy8gRG9u
J3Qgc2V0IHRoZSBoZWFkZXIgaWYgdGhlcmUgYXJlIG5vIGNvb2tpZXMuCisgICAgICAgICAgICAv
LyBUaGlzIHByZXZlbnRzIGEgd2FybmluZyBmcm9tIGJlaW5nIGVtaXR0ZWQuCisgICAgICAgICAg
ICBpZiAoIWNvb2tpZXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHJlcXVlc3Quc2V0SGVh
ZGVyKFFOZXR3b3JrUmVxdWVzdDo6Q29va2llSGVhZGVyLCBxVmFyaWFudEZyb21WYWx1ZShjb29r
aWVzKSk7CisKKyAgICAgICAgICAgIC8vIFNldCB0aGUgcmVmZmVyZXIsIGJ1dCBub3Qgd2hlbiBy
ZXF1ZXN0aW5nIGluc2VjdXJlIGNvbnRlbnQgZnJvbSBhIHNlY3VyZSBwYWdlCisgICAgICAgICAg
ICBRVXJsIGRvY3VtZW50VXJsID0gUVVybChRU3RyaW5nKGRvY3VtZW50LT5kb2N1bWVudFVSSSgp
KSk7CisgICAgICAgICAgICBpZiAoZG9jdW1lbnRVcmwuc2NoZW1lKCkudG9Mb3dlcigpID09ICJo
dHRwIiB8fCBzY2hlbWUgPT0gImh0dHBzIikKKyAgICAgICAgICAgICAgICByZXF1ZXN0LnNldFJh
d0hlYWRlcigiUmVmZXJlciIsIGRvY3VtZW50VXJsLnRvRW5jb2RlZCgpKTsKKworICAgICAgICAg
ICAgLy8gU2V0IHRoZSB1c2VyIGFnZW50CisgICAgICAgICAgICByZXF1ZXN0LnNldFJhd0hlYWRl
cigiVXNlci1BZ2VudCIsIGZyYW1lTG9hZGVyLT51c2VyQWdlbnQoclVybCkudXRmOCgpLmRhdGEo
KSk7CisgICAgICAgIH0KKworICAgICAgICBtX21lZGlhUGxheWVyLT5zZXRNZWRpYShRTWVkaWFD
b250ZW50KHJlcXVlc3QpKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBPdGhlcndpc2UsIGp1
c3QgdXNlIHRoZSBVUkwKKyAgICAgICAgbV9tZWRpYVBsYXllci0+c2V0TWVkaWEoUU1lZGlhQ29u
dGVudChyVXJsKSk7CisgICAgfQorCisgICAgLy8gU2V0IHRoZSBjdXJyZW50IHZvbHVtZSBhbmQg
bXV0ZSBzdGF0dXMKKyAgICAvLyBXZSBnZXQgdGhlc2UgZnJvbSB0aGUgZWxlbWVudCwgcmF0aGVy
IHRoYW4gdGhlIHBsYXllciwgaW4gY2FzZSB3ZSBoYXZlCisgICAgLy8gdHJhbnNpdGlvbmVkIGZy
b20gYSBtZWRpYSBlbmdpbmUgd2hpY2ggZG9lc24ndCBzdXBwb3J0IG11dGluZywgdG8gYSBtZWRp
YQorICAgIC8vIGVuZ2luZSB3aGljaCBkb2VzLgorICAgIG1fbWVkaWFQbGF5ZXItPnNldE11dGVk
KGVsZW1lbnQtPm11dGVkKCkpOworICAgIG1fbWVkaWFQbGF5ZXItPnNldFZvbHVtZShzdGF0aWNf
Y2FzdDxpbnQ+KGVsZW1lbnQtPnZvbHVtZSgpICogMTAwLjApKTsKK30KKwordm9pZCBNZWRpYVBs
YXllclByaXZhdGU6OmNhbmNlbExvYWQoKQoreworICAgIG1fbWVkaWFQbGF5ZXItPnNldE1lZGlh
KFFNZWRpYUNvbnRlbnQoKSk7CisgICAgdXBkYXRlU3RhdGVzKCk7Cit9CisKK3ZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlOjpwbGF5KCkKK3sKKyAgICBpZiAobV9tZWRpYVBsYXllci0+c3RhdGUoKSAh
PSBRTWVkaWFQbGF5ZXI6OlBsYXlpbmdTdGF0ZSkKKyAgICAgICAgbV9tZWRpYVBsYXllci0+cGxh
eSgpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGF1c2UoKQoreworICAgIGlmICht
X21lZGlhUGxheWVyLT5zdGF0ZSgpID09IFFNZWRpYVBsYXllcjo6UGxheWluZ1N0YXRlKQorICAg
ICAgICBtX21lZGlhUGxheWVyLT5wYXVzZSgpOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0
ZTo6cGF1c2VkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1fbWVkaWFQbGF5ZXItPnN0YXRlKCkg
IT0gUU1lZGlhUGxheWVyOjpQbGF5aW5nU3RhdGUpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZTo6c2VlayhmbG9hdCBwb3NpdGlvbikKK3sKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXItPmlz
U2Vla2FibGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fbWVkaWFQbGF5ZXJDb250
cm9sICYmICFtX21lZGlhUGxheWVyQ29udHJvbC0+YXZhaWxhYmxlUGxheWJhY2tSYW5nZXMoKS5j
b250YWlucyhwb3NpdGlvbiAqIDEwMDApKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9p
c1NlZWtpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChwb3NpdGlvbiA+IGR1cmF0aW9u
KCkpCisgICAgICAgIHBvc2l0aW9uID0gZHVyYXRpb24oKTsKKworICAgIC8vIFNlZWtpbmcgaXMg
bW9zdCByZWxpYWJsZSB3aGVuIHdlJ3JlIHBhdXNlZC4KKyAgICAvLyBXZWJraXQgd2lsbCB0cnkg
dG8gcGF1c2UgYmVmb3JlIHNlZWtpbmcsIGJ1dCBkdWUgdG8gdGhlIGFzeW5jaHJvbm91cyBuYXR1
cmUKKyAgICAvLyBvZiB0aGUgYmFja2VuZCwgdGhlIHBsYXllciBtYXkgbm90IGFjdHVhbGx5IGJl
IHBhdXNlZCB5ZXQuCisgICAgLy8gSW4gdGhpcyBjYXNlLCB3ZSBzaG91bGQgcXVldWUgdGhlIHNl
ZWsgYW5kIHdhaXQgdW50aWwgcGF1c2luZyBoYXMgY29tcGxldGVkCisgICAgLy8gYmVmb3JlIGF0
dGVtcHRpbmcgdG8gc2Vlay4KKyAgICBpZiAobV9tZWRpYVBsYXllci0+c3RhdGUoKSA9PSBRTWVk
aWFQbGF5ZXI6OlBsYXlpbmdTdGF0ZSkgeworICAgICAgICBtX21lZGlhUGxheWVyLT5wYXVzZSgp
OworICAgICAgICBtX2lzU2Vla2luZyA9IHRydWU7CisgICAgICAgIG1fcXVldWVkU2VlayA9IHN0
YXRpY19jYXN0PHFpbnQ2ND4ocG9zaXRpb24gKiAxMDAwKTsKKworICAgICAgICAvLyBTZXQgYSB0
aW1lb3V0LCBzbyB0aGF0IGluIHRoZSBldmVudCB0aGF0IHdlIGRvbid0IGdldCBhIHN0YXRlIGNo
YW5nZWQKKyAgICAgICAgLy8gc2lnbmFsLCB3ZSBzdGlsbCBhdHRlbXB0IHRoZSBzZWVrLgorICAg
ICAgICBRVGltZXI6OnNpbmdsZVNob3QoMTAwMCwgdGhpcywgU0xPVChxdWV1ZWRTZWVrVGltZW91
dCgpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9pc1NlZWtpbmcgPSB0cnVlOworICAgICAg
ICBtX21lZGlhUGxheWVyLT5zZXRQb3NpdGlvbihzdGF0aWNfY2FzdDxxaW50NjQ+KHBvc2l0aW9u
ICogMTAwMCkpOworCisgICAgICAgIC8vIFNldCBhIHRpbWVvdXQsIGluIGNhc2Ugd2UgZG9uJ3Qg
Z2V0IGEgcG9zaXRpb24gY2hhbmdlZCBzaWduYWwKKyAgICAgICAgUVRpbWVyOjpzaW5nbGVTaG90
KDEwMDAwLCB0aGlzLCBTTE9UKHNlZWtUaW1lb3V0KCkpKTsKKyAgICB9Cit9CisKK2Jvb2wgTWVk
aWFQbGF5ZXJQcml2YXRlOjpzZWVraW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pc1NlZWtp
bmc7Cit9CisKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZTo6ZHVyYXRpb24oKSBjb25zdAorewor
ICAgIGlmIChtX3JlYWR5U3RhdGUgPCBNZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRhKQorICAgICAg
ICByZXR1cm4gMC4wZjsKKworICAgIGZsb2F0IGR1cmF0aW9uID0gbV9tZWRpYVBsYXllci0+ZHVy
YXRpb24oKSAvIDEwMDAuMGY7CisKKyAgICAvLyBXZSBhcmUgc3RyZWFtaW5nCisgICAgaWYgKGR1
cmF0aW9uIDw9IDAuMGYpCisgICAgICAgIGR1cmF0aW9uID0gc3RkOjpudW1lcmljX2xpbWl0czxm
bG9hdD46OmluZmluaXR5KCk7CisKKyAgICByZXR1cm4gZHVyYXRpb247Cit9CisKK2Zsb2F0IE1l
ZGlhUGxheWVyUHJpdmF0ZTo6Y3VycmVudFRpbWUoKSBjb25zdAoreworICAgIGZsb2F0IGN1cnJl
bnRUaW1lID0gbV9tZWRpYVBsYXllci0+cG9zaXRpb24oKSAvIDEwMDAuMGY7CisgICAgcmV0dXJu
IGN1cnJlbnRUaW1lOworfQorCitQYXNzUmVmUHRyPFRpbWVSYW5nZXM+IE1lZGlhUGxheWVyUHJp
dmF0ZTo6YnVmZmVyZWQoKSBjb25zdAoreworICAgIFJlZlB0cjxUaW1lUmFuZ2VzPiBidWZmZXJl
ZCA9IFRpbWVSYW5nZXM6OmNyZWF0ZSgpOworCisgICAgaWYgKCFtX21lZGlhUGxheWVyQ29udHJv
bCkKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcmVkOworCisgICAgUU1lZGlhVGltZVJhbmdlIHBsYXli
YWNrUmFuZ2VzID0gbV9tZWRpYVBsYXllckNvbnRyb2wtPmF2YWlsYWJsZVBsYXliYWNrUmFuZ2Vz
KCk7CisKKyAgICBmb3JlYWNoIChjb25zdCBRTWVkaWFUaW1lSW50ZXJ2YWwgaW50ZXJ2YWwsIHBs
YXliYWNrUmFuZ2VzLmludGVydmFscygpKSB7CisgICAgICAgIGZsb2F0IHJhbmdlTWluID0gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KGludGVydmFsLnN0YXJ0KCkpIC8gMTAwMC4wZjsKKyAgICAgICAgZmxv
YXQgcmFuZ2VNYXggPSBzdGF0aWNfY2FzdDxmbG9hdD4oaW50ZXJ2YWwuZW5kKCkpIC8gMTAwMC4w
ZjsKKyAgICAgICAgYnVmZmVyZWQtPmFkZChyYW5nZU1pbiwgcmFuZ2VNYXgpOworICAgIH0KKwor
ICAgIHJldHVybiBidWZmZXJlZC5yZWxlYXNlKCk7Cit9CisKK2Zsb2F0IE1lZGlhUGxheWVyUHJp
dmF0ZTo6bWF4VGltZVNlZWthYmxlKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXJD
b250cm9sKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9h
dD4obV9tZWRpYVBsYXllckNvbnRyb2wtPmF2YWlsYWJsZVBsYXliYWNrUmFuZ2VzKCkubGF0ZXN0
VGltZSgpKSAvIDEwMDAuMGY7Cit9CisKK3Vuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Ynl0
ZXNMb2FkZWQoKSBjb25zdAoreworICAgIHVuc2lnbmVkIHBlcmNlbnRhZ2UgPSBtX21lZGlhUGxh
eWVyLT5idWZmZXJTdGF0dXMoKTsKKworICAgIGlmIChwZXJjZW50YWdlID09IDEwMCkgeworICAg
ICAgICBpZiAobV9uZXR3b3JrU3RhdGUgIT0gTWVkaWFQbGF5ZXI6OklkbGUpIHsKKyAgICAgICAg
ICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OklkbGU7CisgICAgICAgICAgICBtX3Bs
YXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgpOworICAgICAgICB9CisgICAgICAgIGlmIChtX3Jl
YWR5U3RhdGUgIT0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhKSB7CisgICAgICAgICAgICBt
X3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGE7CisgICAgICAgICAgICBt
X3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFFM
YXRpbjFTdHJpbmcgYmxLZXkoImJ5dGVzLWxvYWRlZCIpOworICAgIGlmIChtX21lZGlhUGxheWVy
LT5hdmFpbGFibGVFeHRlbmRlZE1ldGFEYXRhKCkuY29udGFpbnMoYmxLZXkpKQorICAgICAgICBy
ZXR1cm4gbV9tZWRpYVBsYXllci0+ZXh0ZW5kZWRNZXRhRGF0YShibEtleSkudG9JbnQoKTsKKwor
ICAgIHJldHVybiBwZXJjZW50YWdlOworfQorCit1bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGU6
OnRvdGFsQnl0ZXMoKSBjb25zdAoreworICAgIGlmIChtX21lZGlhUGxheWVyLT5hdmFpbGFibGVN
ZXRhRGF0YSgpLmNvbnRhaW5zKFF0TWVkaWE6OlNpemUpKQorICAgICAgICByZXR1cm4gbV9tZWRp
YVBsYXllci0+bWV0YURhdGEoUXRNZWRpYTo6U2l6ZSkudG9JbnQoKTsKKworICAgIHJldHVybiAx
MDA7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRSYXRlKGZsb2F0IHJhdGUpCit7
CisgICAgbV9tZWRpYVBsYXllci0+c2V0UGxheWJhY2tSYXRlKHJhdGUpOworfQorCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZTo6c2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSkKK3sKKyAgICBtX21lZGlh
UGxheWVyLT5zZXRWb2x1bWUoc3RhdGljX2Nhc3Q8aW50Pih2b2x1bWUgKiAxMDAuMCkpOworfQor
Citib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6c3VwcG9ydHNNdXRpbmcoKSBjb25zdAoreworICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0TXV0ZWQoYm9v
bCBtdXRlZCkKK3sKKyAgICBtX21lZGlhUGxheWVyLT5zZXRNdXRlZChtdXRlZCk7Cit9CisKK01l
ZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgTWVkaWFQbGF5ZXJQcml2YXRlOjpuZXR3b3JrU3RhdGUo
KSBjb25zdAoreworICAgIHJldHVybiBtX25ldHdvcmtTdGF0ZTsKK30KKworTWVkaWFQbGF5ZXI6
OlJlYWR5U3RhdGUgTWVkaWFQbGF5ZXJQcml2YXRlOjpyZWFkeVN0YXRlKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9yZWFkeVN0YXRlOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0
VmlzaWJsZShib29sIHZpc2libGUpCit7CisgICAgbV9pc1Zpc2libGUgPSB2aXNpYmxlOworfQor
Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6bWVkaWFTdGF0dXNDaGFuZ2VkKFFNZWRpYVBsYXll
cjo6TWVkaWFTdGF0dXMpCit7CisgICAgdXBkYXRlU3RhdGVzKCk7Cit9CisKK3ZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlOjpoYW5kbGVFcnJvcihRTWVkaWFQbGF5ZXI6OkVycm9yKQoreworICAgIHVw
ZGF0ZVN0YXRlcygpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c3RhdGVDaGFuZ2Vk
KFFNZWRpYVBsYXllcjo6U3RhdGUgc3RhdGUpCit7CisgICAgaWYgKHN0YXRlICE9IFFNZWRpYVBs
YXllcjo6UGxheWluZ1N0YXRlICYmIG1faXNTZWVraW5nICYmIG1fcXVldWVkU2VlayA+PSAwKSB7
CisgICAgICAgIG1fbWVkaWFQbGF5ZXItPnNldFBvc2l0aW9uKG1fcXVldWVkU2Vlayk7CisgICAg
ICAgIG1fcXVldWVkU2VlayA9IC0xOworICAgIH0KK30KKwordm9pZCBNZWRpYVBsYXllclByaXZh
dGU6Om5hdGl2ZVNpemVDaGFuZ2VkKGNvbnN0IFFTaXplRiYpCit7CisgICAgbV9wbGF5ZXItPnNp
emVDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpxdWV1ZWRTZWVrVGlt
ZW91dCgpCit7CisgICAgLy8gSWYgd2UgaGF2ZW4ndCBoZWFyZCBhbnl0aGluZywgYXNzdW1lIHRo
ZSBwbGF5ZXIgaXMgbm93IHBhdXNlZAorICAgIC8vIGFuZCB3ZSBjYW4gYXR0ZW1wdCB0aGUgc2Vl
aworICAgIGlmIChtX2lzU2Vla2luZyAmJiBtX3F1ZXVlZFNlZWsgPj0gMCkgeworICAgICAgICBt
X21lZGlhUGxheWVyLT5zZXRQb3NpdGlvbihtX3F1ZXVlZFNlZWspOworICAgICAgICBtX3F1ZXVl
ZFNlZWsgPSAtMTsKKworICAgICAgICAvLyBTZXQgYSB0aW1lb3V0LCBpbiBjYXNlIHdlIGRvbid0
IGdldCBhIHBvc2l0aW9uIGNoYW5nZWQgc2lnbmFsCisgICAgICAgIFFUaW1lcjo6c2luZ2xlU2hv
dCgxMDAwMCwgdGhpcywgU0xPVChzZWVrVGltZW91dCgpKSk7CisgICAgfQorfQorCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZTo6c2Vla1RpbWVvdXQoKQoreworICAgIC8vIElmIHdlIGhhdmVuJ3Qg
aGVhcmQgYW55dGhpbmcsIGFzc3VtZSB0aGUgc2VlayBzdWNjZWVkZWQKKyAgICBpZiAobV9pc1Nl
ZWtpbmcpIHsKKyAgICAgICAgbV9wbGF5ZXItPnRpbWVDaGFuZ2VkKCk7CisgICAgICAgIG1faXNT
ZWVraW5nID0gZmFsc2U7CisgICAgfQorfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cG9z
aXRpb25DaGFuZ2VkKHFpbnQ2NCkKK3sKKyAgICAvLyBPbmx5IHByb3BvZ2F0ZSB0aGlzIGV2ZW50
IGlmIHdlIGFyZSBzZWVraW5nCisgICAgaWYgKG1faXNTZWVraW5nICYmIG1fcXVldWVkU2VlayA9
PSAtMSkgeworICAgICAgICBtX3BsYXllci0+dGltZUNoYW5nZWQoKTsKKyAgICAgICAgbV9pc1Nl
ZWtpbmcgPSBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpkdXJh
dGlvbkNoYW5nZWQocWludDY0KQoreworICAgIG1fcGxheWVyLT5kdXJhdGlvbkNoYW5nZWQoKTsK
K30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnZvbHVtZUNoYW5nZWQoaW50IHZvbHVtZSkK
K3sKKyAgICBtX3BsYXllci0+dm9sdW1lQ2hhbmdlZChzdGF0aWNfY2FzdDxmbG9hdD4odm9sdW1l
KSAvIDEwMC4wKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om11dGVkQ2hhbmdlZChi
b29sIG11dGVkKQoreworICAgIG1fcGxheWVyLT5tdXRlQ2hhbmdlZChtdXRlZCk7Cit9CisKK3Zv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlOjp1cGRhdGVTdGF0ZXMoKQoreworICAgIC8vIFN0b3JlIHRo
ZSBvbGQgc3RhdGVzIHNvIHRoYXQgd2UgY2FuIGRldGVjdCBhIGNoYW5nZSBhbmQgcmFpc2UgY2hh
bmdlIGV2ZW50cworICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgb2xkTmV0d29ya1N0YXRl
ID0gbV9uZXR3b3JrU3RhdGU7CisgICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgb2xkUmVhZHlT
dGF0ZSA9IG1fcmVhZHlTdGF0ZTsKKworICAgIFFNZWRpYVBsYXllcjo6TWVkaWFTdGF0dXMgY3Vy
cmVudFN0YXR1cyA9IG1fbWVkaWFQbGF5ZXItPm1lZGlhU3RhdHVzKCk7CisgICAgUU1lZGlhUGxh
eWVyOjpFcnJvciBjdXJyZW50RXJyb3IgPSBtX21lZGlhUGxheWVyLT5lcnJvcigpOworCisgICAg
aWYgKGN1cnJlbnRFcnJvciAhPSBRTWVkaWFQbGF5ZXI6Ok5vRXJyb3IpIHsKKyAgICAgICAgbV9y
ZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOworICAgICAgICBpZiAoY3VycmVu
dEVycm9yID09IFFNZWRpYVBsYXllcjo6Rm9ybWF0RXJyb3IpCisgICAgICAgICAgICBtX25ldHdv
cmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpGb3JtYXRFcnJvcjsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TmV0d29ya0Vycm9yOworICAgIH0g
ZWxzZSBpZiAoY3VycmVudFN0YXR1cyA9PSBRTWVkaWFQbGF5ZXI6OlVua25vd25NZWRpYVN0YXR1
cworICAgICAgICAgICAgICAgfHwgY3VycmVudFN0YXR1cyA9PSBRTWVkaWFQbGF5ZXI6Ok5vTWVk
aWEpIHsKKyAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6SWRsZTsKKyAgICAg
ICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOworICAgIH0gZWxzZSBp
ZiAoY3VycmVudFN0YXR1cyA9PSBRTWVkaWFQbGF5ZXI6OkxvYWRpbmdNZWRpYSkgeworICAgICAg
ICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOworICAgICAgICBtX3JlYWR5
U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7CisgICAgfSBlbHNlIGlmIChjdXJyZW50
U3RhdHVzID09IFFNZWRpYVBsYXllcjo6TG9hZGVkTWVkaWEpIHsKKyAgICAgICAgbV9uZXR3b3Jr
U3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGluZzsKKyAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVk
aWFQbGF5ZXI6OkhhdmVNZXRhZGF0YTsKKyAgICB9IGVsc2UgaWYgKGN1cnJlbnRTdGF0dXMgPT0g
UU1lZGlhUGxheWVyOjpCdWZmZXJpbmdNZWRpYSkgeworICAgICAgICBtX25ldHdvcmtTdGF0ZSA9
IE1lZGlhUGxheWVyOjpMb2FkaW5nOworICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXll
cjo6SGF2ZUZ1dHVyZURhdGE7CisgICAgfSBlbHNlIGlmIChjdXJyZW50U3RhdHVzID09IFFNZWRp
YVBsYXllcjo6U3RhbGxlZE1lZGlhKSB7CisgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQ
bGF5ZXI6OkxvYWRpbmc7CisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZl
Q3VycmVudERhdGE7CisgICAgfSBlbHNlIGlmIChjdXJyZW50U3RhdHVzID09IFFNZWRpYVBsYXll
cjo6QnVmZmVyZWRNZWRpYQorICAgICAgICAgICAgICAgfHwgY3VycmVudFN0YXR1cyA9PSBRTWVk
aWFQbGF5ZXI6OkVuZE9mTWVkaWEpIHsKKyAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBs
YXllcjo6SWRsZTsKKyAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91
Z2hEYXRhOworICAgIH0gZWxzZSBpZiAoY3VycmVudFN0YXR1cyA9PSBRTWVkaWFQbGF5ZXI6Oklu
dmFsaWRNZWRpYSkgeworICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpOZXR3
b3JrRXJyb3I7CisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGlu
ZzsKKyAgICB9CisKKyAgICAvLyBMb2cgdGhlIHN0YXRlIGNoYW5nZXMgYW5kIHJhaXNlIHRoZSBz
dGF0ZSBjaGFuZ2UgZXZlbnRzCisgICAgLy8gTkI6IFRoZSByZWFkeVN0YXRlQ2hhbmdlZCBldmVu
dCBtdXN0IGNvbWUgYmVmb3JlIHRoZSBuZXR3b3JrU3RhdGVDaGFuZ2VkIGV2ZW50LgorICAgIC8v
IEJyZWFraW5nIHRoaXMgaW52YXJpYW50IHdpbGwgY2F1c2UgdGhlIHJlc291cmNlIHNlbGVjdGlv
biBhbGdvcml0aG0gZm9yIG11bHRpcGxlCisgICAgLy8gc291cmNlcyB0byBmYWlsLgorICAgIGlm
IChtX3JlYWR5U3RhdGUgIT0gb2xkUmVhZHlTdGF0ZSkKKyAgICAgICAgbV9wbGF5ZXItPnJlYWR5
U3RhdGVDaGFuZ2VkKCk7CisKKyAgICBpZiAobV9uZXR3b3JrU3RhdGUgIT0gb2xkTmV0d29ya1N0
YXRlKQorICAgICAgICBtX3BsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgpOworfQorCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQoreworICAg
IGlmIChzaXplID09IG1fY3VycmVudFNpemUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY3Vy
cmVudFNpemUgPSBzaXplOworICAgIG1fdmlkZW9JdGVtLT5zZXRTaXplKFFTaXplRihRU2l6ZShz
aXplKSkpOworfQorCitJbnRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZTo6bmF0dXJhbFNpemUoKSBj
b25zdAoreworICAgIGlmICghaGFzVmlkZW8oKSB8fCBtX3JlYWR5U3RhdGUgPCBNZWRpYVBsYXll
cjo6SGF2ZU1ldGFkYXRhKQorICAgICAgICByZXR1cm4gSW50U2l6ZSgpOworCisgICAgcmV0dXJu
IEludFNpemUobV92aWRlb0l0ZW0tPm5hdGl2ZVNpemUoKS50b1NpemUoKSk7Cit9CisKK3ZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlOjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2lzVmlzaWJsZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gR3JhYiB0aGUgcGFpbnRlciBhbmQgd2lkZ2V0CisgICAgUVBhaW50ZXIqIHBh
aW50ZXIgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKworICAgIC8vIFJlbmRlciB0aGUg
dmlkZW8KKyAgICBtX3ZpZGVvU2NlbmUtPnJlbmRlcihwYWludGVyLCBRUmVjdEYoUVJlY3QocmVj
dCkpKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnJlcGFpbnQoKQoreworICAgIG1f
cGxheWVyLT5yZXBhaW50KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2luY2x1
ZGUgIm1vY19NZWRpYVBsYXllclByaXZhdGVRdC5jcHAiCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmggYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNjIzNDMxMQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuaApAQCAtMCwwICsxLDEyMSBA
QAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBNZWRpYVBsYXllclByaXZhdGVRdF9oCisj
ZGVmaW5lIE1lZGlhUGxheWVyUHJpdmF0ZVF0X2gKKworI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJp
dmF0ZS5oIgorCisjaW5jbHVkZSA8UU1lZGlhUGxheWVyPgorI2luY2x1ZGUgPFFPYmplY3Q+CisK
K2NsYXNzIFFNZWRpYVBsYXllckNvbnRyb2w7CitjbGFzcyBRR3JhcGhpY3NWaWRlb0l0ZW07Citj
bGFzcyBRR3JhcGhpY3NTY2VuZTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBNZWRp
YVBsYXllclByaXZhdGUgOiBwdWJsaWMgUU9iamVjdCwgcHVibGljIE1lZGlhUGxheWVyUHJpdmF0
ZUludGVyZmFjZSB7CisKKyAgICBRX09CSkVDVAorCitwdWJsaWM6CisgICAgc3RhdGljIE1lZGlh
UGxheWVyUHJpdmF0ZUludGVyZmFjZSogY3JlYXRlKE1lZGlhUGxheWVyKiBwbGF5ZXIpOworICAg
IH5NZWRpYVBsYXllclByaXZhdGUoKTsKKworICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyTWVkaWFF
bmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIpOworICAgIHN0YXRpYyB2b2lkIGdldFN1cHBvcnRl
ZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiYpOworICAgIHN0YXRpYyBNZWRpYVBsYXllcjo6U3VwcG9y
dHNUeXBlIHN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKKyAgICBz
dGF0aWMgYm9vbCBpc0F2YWlsYWJsZSgpIHsgcmV0dXJuIHRydWU7IH0KKworICAgIGJvb2wgaGFz
VmlkZW8oKSBjb25zdDsKKyAgICBib29sIGhhc0F1ZGlvKCkgY29uc3Q7CisKKyAgICB2b2lkIGxv
YWQoY29uc3QgU3RyaW5nICZ1cmwpOworICAgIHZvaWQgY2FuY2VsTG9hZCgpOworCisgICAgdm9p
ZCBwbGF5KCk7CisgICAgdm9pZCBwYXVzZSgpOworCisgICAgYm9vbCBwYXVzZWQoKSBjb25zdDsK
KyAgICBib29sIHNlZWtpbmcoKSBjb25zdDsKKworICAgIGZsb2F0IGR1cmF0aW9uKCkgY29uc3Q7
CisgICAgZmxvYXQgY3VycmVudFRpbWUoKSBjb25zdDsKKyAgICB2b2lkIHNlZWsoZmxvYXQpOwor
CisgICAgdm9pZCBzZXRSYXRlKGZsb2F0KTsKKyAgICB2b2lkIHNldFZvbHVtZShmbG9hdCk7CisK
KyAgICBib29sIHN1cHBvcnRzTXV0aW5nKCkgY29uc3Q7CisgICAgdm9pZCBzZXRNdXRlZChib29s
KTsKKworICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlKCkgY29uc3Q7
CisgICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0OworCisgICAg
UGFzc1JlZlB0cjxUaW1lUmFuZ2VzPiBidWZmZXJlZCgpIGNvbnN0OworICAgIGZsb2F0IG1heFRp
bWVTZWVrYWJsZSgpIGNvbnN0OworICAgIHVuc2lnbmVkIGJ5dGVzTG9hZGVkKCkgY29uc3Q7Cisg
ICAgdW5zaWduZWQgdG90YWxCeXRlcygpIGNvbnN0OworCisgICAgdm9pZCBzZXRWaXNpYmxlKGJv
b2wpOworCisgICAgSW50U2l6ZSBuYXR1cmFsU2l6ZSgpIGNvbnN0OworICAgIHZvaWQgc2V0U2l6
ZShjb25zdCBJbnRTaXplJik7CisKKyAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IEludFJlY3QmKTsKKworICAgIGJvb2wgc3VwcG9ydHNGdWxsc2NyZWVuKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKworcHJpdmF0ZSBzbG90czoKKyAgICB2b2lkIG1lZGlhU3RhdHVzQ2hh
bmdlZChRTWVkaWFQbGF5ZXI6Ok1lZGlhU3RhdHVzKTsKKyAgICB2b2lkIGhhbmRsZUVycm9yKFFN
ZWRpYVBsYXllcjo6RXJyb3IpOworICAgIHZvaWQgc3RhdGVDaGFuZ2VkKFFNZWRpYVBsYXllcjo6
U3RhdGUpOworICAgIHZvaWQgbmF0aXZlU2l6ZUNoYW5nZWQoY29uc3QgUVNpemVGJik7CisgICAg
dm9pZCBxdWV1ZWRTZWVrVGltZW91dCgpOworICAgIHZvaWQgc2Vla1RpbWVvdXQoKTsKKyAgICB2
b2lkIHBvc2l0aW9uQ2hhbmdlZChxaW50NjQpOworICAgIHZvaWQgZHVyYXRpb25DaGFuZ2VkKHFp
bnQ2NCk7CisgICAgdm9pZCB2b2x1bWVDaGFuZ2VkKGludCk7CisgICAgdm9pZCBtdXRlZENoYW5n
ZWQoYm9vbCk7CisgICAgdm9pZCByZXBhaW50KCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCB1cGRh
dGVTdGF0ZXMoKTsKKworcHJpdmF0ZToKKyAgICBNZWRpYVBsYXllclByaXZhdGUoTWVkaWFQbGF5
ZXIqKTsKKworICAgIE1lZGlhUGxheWVyKiBtX3BsYXllcjsKKyAgICBRTWVkaWFQbGF5ZXIqIG1f
bWVkaWFQbGF5ZXI7CisgICAgUU1lZGlhUGxheWVyQ29udHJvbCogbV9tZWRpYVBsYXllckNvbnRy
b2w7CisgICAgUUdyYXBoaWNzVmlkZW9JdGVtKiBtX3ZpZGVvSXRlbTsKKyAgICBRR3JhcGhpY3NT
Y2VuZSogbV92aWRlb1NjZW5lOworCisgICAgbXV0YWJsZSBNZWRpYVBsYXllcjo6TmV0d29ya1N0
YXRlIG1fbmV0d29ya1N0YXRlOworICAgIG11dGFibGUgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUg
bV9yZWFkeVN0YXRlOworCisgICAgSW50U2l6ZSBtX2N1cnJlbnRTaXplOworICAgIGJvb2wgbV9p
c1Zpc2libGU7CisgICAgYm9vbCBtX2lzU2Vla2luZzsKKyAgICBxaW50NjQgbV9xdWV1ZWRTZWVr
OworfTsKK30KKworI2VuZGlmIC8vIE1lZGlhUGxheWVyUHJpdmF0ZVF0X2gKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3Jt
L3F0L1JlbmRlclRoZW1lUXQuY3BwCmluZGV4IDI3MWMxMWEuLjM4OWI2YTggMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkZv
bnQuaCIKICNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE1lZGlh
RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCkBAIC00Nyw2ICs0OCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyU2xpZGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKKyNpbmNsdWRlICJU
aW1lUmFuZ2VzLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVRdC5oIgogI2luY2x1ZGUgIlVz
ZXJBZ2VudFN0eWxlU2hlZXRzLmgiCiAjaW5jbHVkZSAicXdlYnBhZ2UuaCIKQEAgLTg4MiwxMCAr
ODg0LDE1IEBAIEhUTUxNZWRpYUVsZW1lbnQqIFJlbmRlclRoZW1lUXQ6OmdldE1lZGlhRWxlbWVu
dEZyb21SZW5kZXJPYmplY3QoUmVuZGVyT2JqZWN0KiBvCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PEhUTUxNZWRpYUVsZW1lbnQqPihtZWRpYU5vZGUpOwogfQogCitkb3VibGUgUmVuZGVyVGhlbWVR
dDo6bWVkaWFDb250cm9sc0Jhc2VsaW5lT3BhY2l0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIDAu
NDsKK30KKwogdm9pZCBSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhQmFja2dyb3VuZChRUGFpbnRl
ciogcGFpbnRlciwgY29uc3QgSW50UmVjdCYgcikgY29uc3QKIHsKICAgICBwYWludGVyLT5zZXRQ
ZW4oUXQ6Ok5vUGVuKTsKLSAgICBzdGF0aWMgUUNvbG9yIHRyYW5zcGFyZW50QmxhY2soMCwgMCwg
MCwgMTAwKTsKKyAgICBzdGF0aWMgUUNvbG9yIHRyYW5zcGFyZW50QmxhY2soMCwgMCwgMCwgbWVk
aWFDb250cm9sc0Jhc2VsaW5lT3BhY2l0eSgpICogMjU1KTsKICAgICBwYWludGVyLT5zZXRCcnVz
aCh0cmFuc3BhcmVudEJsYWNrKTsKICAgICBwYWludGVyLT5kcmF3Um91bmRlZFJlY3Qoci54KCks
IHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCksIDUuMCwgNS4wKTsKIH0KQEAgLTkyMSwxNCAr
OTI4LDEwIEBAIGJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYU11dGVCdXR0b24oUmVuZGVy
T2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhCiAgICAgY29uc3QgUVBvaW50RiBzcGVh
a2VyUG9seWdvbls2XSA9IHsgUVBvaW50RigyMCwgMzApLCBRUG9pbnRGKDUwLCAzMCksIFFQb2lu
dEYoODAsIDApLAogICAgICAgICAgICAgUVBvaW50Rig4MCwgMTAwKSwgUVBvaW50Rig1MCwgNzAp
LCBRUG9pbnRGKDIwLCA3MCl9OwogCi0gICAgcC5wYWludGVyLT5zZXRCcnVzaChnZXRNZWRpYUNv
bnRyb2xGb3JlZ3JvdW5kQ29sb3IobykpOworICAgIHAucGFpbnRlci0+c2V0UGVuKG1lZGlhRWxl
bWVudC0+bXV0ZWQoKSA/IFF0OjpkYXJrR3JheSA6IFF0OjpsaWdodEdyYXkpOworICAgIHAucGFp
bnRlci0+c2V0QnJ1c2gobWVkaWFFbGVtZW50LT5tdXRlZCgpID8gUXQ6OmRhcmtSZWQgOiBnZXRN
ZWRpYUNvbnRyb2xGb3JlZ3JvdW5kQ29sb3IobykpOwogICAgIHAucGFpbnRlci0+ZHJhd1BvbHln
b24oc3BlYWtlclBvbHlnb24sIDYpOwogCi0gICAgaWYgKG1lZGlhRWxlbWVudC0+bXV0ZWQoKSkg
ewotICAgICAgICBwLnBhaW50ZXItPnNldFBlbihRdDo6cmVkKTsKLSAgICAgICAgcC5wYWludGVy
LT5kcmF3TGluZSgwLCAxMDAsIDEwMCwgMCk7Ci0gICAgfQotCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCkBAIC05NzEsNiArOTc0LDg5IEBAIGJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVNl
ZWtGb3J3YXJkQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCitib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50TWVkaWFDdXJyZW50VGlt
ZShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgU3R5bGVQYWludGVyIHAodGhpcywgcGFpbnRJ
bmZvKTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IHAucGFpbnRlci0+c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCB0cnVlKTsK
KyAgICBwYWludE1lZGlhQmFja2dyb3VuZChwLnBhaW50ZXIsIHIpOworCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitTdHJpbmcgUmVuZGVyVGhlbWVRdDo6Zm9ybWF0TWVkaWFDb250cm9sc0N1cnJl
bnRUaW1lKGZsb2F0IGN1cnJlbnRUaW1lLCBmbG9hdCBkdXJhdGlvbikgY29uc3QKK3sKKyAgICBy
ZXR1cm4gZm9ybWF0TWVkaWFDb250cm9sc1RpbWUoY3VycmVudFRpbWUpICsgIiAvICIgKyBmb3Jt
YXRNZWRpYUNvbnRyb2xzVGltZShkdXJhdGlvbik7Cit9CisKK1N0cmluZyBSZW5kZXJUaGVtZVF0
Ojpmb3JtYXRNZWRpYUNvbnRyb2xzUmVtYWluaW5nVGltZShmbG9hdCBjdXJyZW50VGltZSwgZmxv
YXQgZHVyYXRpb24pIGNvbnN0Cit7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitib29sIFJl
bmRlclRoZW1lUXQ6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QgKm8s
IGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvICZwYWludEluZm8sIGNvbnN0IEludFJlY3Qg
JnIpCit7CisgICAgU3R5bGVQYWludGVyIHAodGhpcywgcGFpbnRJbmZvKTsKKyAgICBpZiAoIXAu
aXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHAucGFpbnRlci0+c2V0UmVu
ZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCB0cnVlKTsKKworICAgIHBhaW50TWVkaWFC
YWNrZ3JvdW5kKHAucGFpbnRlciwgcik7CisKKyAgICBpZiAoIW8tPmlzU2xpZGVyKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIEludFJlY3QgYiA9IHRvUmVuZGVyQm94KG8pLT5jb250
ZW50Qm94UmVjdCgpOworCisgICAgLy8gUG9zaXRpb24gdGhlIG91dGVyIHJlY3RhbmdsZQorICAg
IGludCB0b3AgPSByLnkoKSArIGIueSgpOworICAgIGludCBsZWZ0ID0gci54KCkgKyBiLngoKTsK
KyAgICBpbnQgd2lkdGggPSBiLndpZHRoKCk7CisgICAgaW50IGhlaWdodCA9IGIuaGVpZ2h0KCk7
CisKKyAgICAvLyBHZXQgdGhlIHNjYWxlIGNvbG9yIGZyb20gdGhlIHBhZ2UgY2xpZW50CisgICAg
UVBhbGV0dGUgcGFsID0gUUFwcGxpY2F0aW9uOjpwYWxldHRlKCk7CisgICAgc2V0UGFsZXR0ZUZy
b21QYWdlQ2xpZW50SWZFeGlzdHMocGFsKTsKKyAgICBjb25zdCBRQ29sb3IgaGlnaGxpZ2h0VGV4
dCA9IHBhbC5icnVzaChRUGFsZXR0ZTo6QWN0aXZlLCBRUGFsZXR0ZTo6SGlnaGxpZ2h0ZWRUZXh0
KS5jb2xvcigpOworICAgIGNvbnN0IFFDb2xvciBzY2FsZUNvbG9yKGhpZ2hsaWdodFRleHQucmVk
KCksIGhpZ2hsaWdodFRleHQuZ3JlZW4oKSwgaGlnaGxpZ2h0VGV4dC5ibHVlKCksIG1lZGlhQ29u
dHJvbHNCYXNlbGluZU9wYWNpdHkoKSAqIDI1NSk7CisKKyAgICAvLyBEcmF3IHRoZSBvdXRlciBy
ZWN0YW5nbGUKKyAgICBwLnBhaW50ZXItPnNldFBlbihRdDo6bGlnaHRHcmF5KTsKKyAgICBwLnBh
aW50ZXItPnNldEJydXNoKHNjYWxlQ29sb3IpOworICAgIHAucGFpbnRlci0+ZHJhd1JlY3QobGVm
dCwgdG9wLCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIGlmICghby0+bm9kZSgpIHx8ICFvLT5ub2Rl
KCktPmhhc1RhZ05hbWUoaW5wdXRUYWcpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBI
VE1MSW5wdXRFbGVtZW50KiBzbGlkZXIgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4o
by0+bm9kZSgpKTsKKworICAgIC8vIFBvc2l0aW9uIHRoZSBpbm5lciByZWN0YW5nbGUKKyAgICBo
ZWlnaHQgPSAoaGVpZ2h0IC0gMikgKiBzbGlkZXItPnZhbHVlQXNOdW1iZXIoKTsKKyAgICB3aWR0
aCAtPSAyOworICAgIGxlZnQgKz0gMTsKKyAgICB0b3AgKz0gKGIuaGVpZ2h0KCkgLSBoZWlnaHQp
IC0gMTsKKworICAgIC8vIERyYXcgdGhlIGlubmVyIHJlY3RhbmdsZQorICAgIHAucGFpbnRlci0+
c2V0UGVuKFF0OjpOb1Blbik7CisgICAgcC5wYWludGVyLT5zZXRCcnVzaChnZXRNZWRpYUNvbnRy
b2xGb3JlZ3JvdW5kQ29sb3IobykpOworICAgIHAucGFpbnRlci0+ZHJhd1JlY3QobGVmdCwgdG9w
LCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJU
aGVtZVF0OjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0ICpvLCBjb25z
dCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyAmcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0ICZyKQor
eworICAgIFN0eWxlUGFpbnRlciBwKHRoaXMsIHBhaW50SW5mbyk7CisgICAgaWYgKCFwLmlzVmFs
aWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBOb3RoaW5nIHRvIGRyYXcgaGVy
ZSwgdGhpcyBpcyBhbGwgZG9uZSBpbiB0aGUgdHJhY2sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
IGJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCog
bywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVj
dCYgcikKIHsKICAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBnZXRNZWRpYUVs
ZW1lbnRGcm9tUmVuZGVyT2JqZWN0KG8pOwpAQCAtOTg1LDE1ICsxMDcxLDMxIEBAIGJvb2wgUmVu
ZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCogbywgY29uc3Qg
UmVuZGVyT2JqZWN0OjpQCiAKICAgICBwYWludE1lZGlhQmFja2dyb3VuZChwLnBhaW50ZXIsIHIp
OwogCisjaWYgUVRfVkVSU0lPTiA+PSAweDA0MDcwMAorICAgIGlmIChNZWRpYVBsYXllciogcGxh
eWVyID0gbWVkaWFFbGVtZW50LT5wbGF5ZXIoKSkgeworICAgICAgICAvLyBHZXQgdGhlIGJ1ZmZl
cmVkIHBhcnRzIG9mIHRoZSBtZWRpYQorICAgICAgICBQYXNzUmVmUHRyPFRpbWVSYW5nZXM+IGJ1
ZmZlcmVkID0gcGxheWVyLT5idWZmZXJlZCgpOworICAgICAgICBpZiAoYnVmZmVyZWQtPmxlbmd0
aCgpID4gMCAmJiBwbGF5ZXItPmR1cmF0aW9uKCkgPCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0
Pjo6aW5maW5pdHkoKSkgeworICAgICAgICAgICAgLy8gU2V0IHRoZSB0cmFuc2Zvcm0gYW5kIGJy
dXNoCisgICAgICAgICAgICBXb3JsZE1hdHJpeFRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyKHAucGFp
bnRlciwgbywgcik7CisgICAgICAgICAgICBwLnBhaW50ZXItPnNldEJydXNoKGdldE1lZGlhQ29u
dHJvbEZvcmVncm91bmRDb2xvcigpKTsKKworICAgICAgICAgICAgLy8gUGFpbnQgZWFjaCBidWZm
ZXJlZCBzZWN0aW9uCisgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGV4OworICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBidWZmZXJlZC0+bGVuZ3RoKCk7IGkrKykgeworICAgICAgICAg
ICAgICAgIGZsb2F0IHN0YXJ0WCA9IChidWZmZXJlZC0+c3RhcnQoaSwgZXgpIC8gcGxheWVyLT5k
dXJhdGlvbigpKSAqIDEwMDsKKyAgICAgICAgICAgICAgICBmbG9hdCB3aWR0aCA9ICgoYnVmZmVy
ZWQtPmVuZChpLCBleCkgLyBwbGF5ZXItPmR1cmF0aW9uKCkpICogMTAwKSAtIHN0YXJ0WDsKKyAg
ICAgICAgICAgICAgICBwLnBhaW50ZXItPmRyYXdSZWN0KHN0YXJ0WCwgMzcsIHdpZHRoLCAyNik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKwogICAgIHJldHVybiBm
YWxzZTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhU2xpZGVyVGh1bWIoUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBJbnRSZWN0JiByKQogewotICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9
IGdldE1lZGlhRWxlbWVudEZyb21SZW5kZXJPYmplY3Qoby0+cGFyZW50KCkpOwotICAgIGlmICgh
bWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICBTdHlsZVBhaW50ZXIg
cCh0aGlzLCBwYWludEluZm8pOwogICAgIGlmICghcC5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVy
biB0cnVlOwpAQCAtMTAxOSw2ICsxMTIxLDEzIEBAIHZvaWQgUmVuZGVyVGhlbWVRdDo6YWRqdXN0
U2xpZGVyVGh1bWJTaXplKFJlbmRlck9iamVjdCogbykgY29uc3QKICAgICAgICAgaW50IHBhcmVu
dEhlaWdodCA9IHBhcmVudFN0eWxlLT5oZWlnaHQoKS52YWx1ZSgpOwogICAgICAgICBvLT5zdHls
ZSgpLT5zZXRXaWR0aChMZW5ndGgocGFyZW50SGVpZ2h0IC8gMywgRml4ZWQpKTsKICAgICAgICAg
by0+c3R5bGUoKS0+c2V0SGVpZ2h0KExlbmd0aChwYXJlbnRIZWlnaHQsIEZpeGVkKSk7CisgICAg
fSBlbHNlIGlmIChwYXJ0ID09IE1lZGlhVm9sdW1lU2xpZGVyVGh1bWJQYXJ0KSB7CisgICAgICAg
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IG8tPnBhcmVudCgpLT5zdHlsZSgpOworICAgICAg
ICBRX0FTU0VSVChwYXJlbnRTdHlsZSk7CisKKyAgICAgICAgaW50IHBhcmVudFdpZHRoID0gcGFy
ZW50U3R5bGUtPndpZHRoKCkudmFsdWUoKTsKKyAgICAgICAgby0+c3R5bGUoKS0+c2V0SGVpZ2h0
KExlbmd0aChwYXJlbnRXaWR0aCAvIDMsIEZpeGVkKSk7CisgICAgICAgIG8tPnN0eWxlKCktPnNl
dFdpZHRoKExlbmd0aChwYXJlbnRXaWR0aCwgRml4ZWQpKTsKICAgICB9IGVsc2UgaWYgKHBhcnQg
PT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCB8fCBwYXJ0ID09IFNsaWRlclRodW1iVmVydGlj
YWxQYXJ0KSB7CiAgICAgICAgIFFTdHlsZU9wdGlvblNsaWRlciBvcHRpb247CiAgICAgICAgIGlm
IChwYXJ0ID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmggYi9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRo
ZW1lUXQuaAppbmRleCA1Mzg1ODgxLi44YTIyZGYxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRm
b3JtL3F0L1JlbmRlclRoZW1lUXQuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRo
ZW1lUXQuaApAQCAtMTI3LDEwICsxMjcsMTUgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9v
bCBwYWludE1lZGlhU2Vla0ZvcndhcmRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVy
T2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIHBh
aW50TWVkaWFTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNs
aWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOwotCisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFDdXJyZW50VGlt
ZShSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKFJl
bmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIoUmVuZGVy
T2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
CisgICAgdmlydHVhbCBTdHJpbmcgZm9ybWF0TWVkaWFDb250cm9sc0N1cnJlbnRUaW1lKGZsb2F0
IGN1cnJlbnRUaW1lLCBmbG9hdCBkdXJhdGlvbikgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcg
Zm9ybWF0TWVkaWFDb250cm9sc1JlbWFpbmluZ1RpbWUoZmxvYXQgY3VycmVudFRpbWUsIGZsb2F0
IGR1cmF0aW9uKSBjb25zdDsKIHByaXZhdGU6CiAgICAgSFRNTE1lZGlhRWxlbWVudCogZ2V0TWVk
aWFFbGVtZW50RnJvbVJlbmRlck9iamVjdChSZW5kZXJPYmplY3QqIG8pIGNvbnN0OwogICAgIHZv
aWQgcGFpbnRNZWRpYUJhY2tncm91bmQoUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IEludFJlY3Qm
IHIpIGNvbnN0OworICAgIGRvdWJsZSBtZWRpYUNvbnRyb2xzQmFzZWxpbmVPcGFjaXR5KCkgY29u
c3Q7CiAgICAgUUNvbG9yIGdldE1lZGlhQ29udHJvbEZvcmVncm91bmRDb2xvcihSZW5kZXJPYmpl
Y3QqIG8gPSAwKSBjb25zdDsKICNlbmRpZgogICAgIHZvaWQgY29tcHV0ZVNpemVCYXNlZE9uU3R5
bGUoUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlKSBjb25zdDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49060</attachid>
            <date>2010-02-18 23:51:17 -0800</date>
            <delta_ts>2010-02-21 17:37:00 -0800</delta_ts>
            <desc>Updated Patch..</desc>
            <filename>webkit-qtmultimedia-integration.txt</filename>
            <type>text/plain</type>
            <size>40962</size>
            <attacher name="Nick Young">nicholas.young</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YzU3MTRlMi4uZmU3NDU1OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3NiBAQAorMjAxMC0wMi0xOCAgTmljaG9sYXMgWW91
bmcgIDxuaWNob2xhcy55b3VuZ0Bub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0XSBTd2l0Y2hpbmcgZnJvbSBQaG9ub24gdG8gUXRN
dWx0aW1lZGlhIEJhY2tlbmQgZm9yIFF0IDQuNworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ2MzEKKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMg
cGF0Y2ggb25seSBhZmZlY3RzIG11bHRpbWVkaWEgYmFja2VuZC4KKworICAgICAgICAqIFdlYkNv
cmUucHJvOiBCdWlsZCBkZXBlbmRzIG9uIFF0IHZlcnNpb24uCisgICAgICAgICogY3NzL21lZGlh
Q29udHJvbHNRdC5jc3M6IFVwZGF0ZWQgbWVkaWEgY29udHJvbHMuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwOiBEaWZmZXJlbnQgYmFja2VuZCBpbmNsdWRlZCBk
ZXBlbmRpbmcgb24gUXQgdmVyc2lvbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9N
ZWRpYVBsYXllclByaXZhdGVRdC5jcHA6IEFkZGVkIG5ldyBRdE11bHRpbWVkaWEgQmFja2VuZC4K
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6cmVnaXN0ZXJNZWRpYUVuZ2luZSk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OmdldFN1cHBvcnRlZFR5cGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6c3VwcG9ydHNUeXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6TWVkaWFQbGF5ZXJQcml2YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6fk1lZGlhUGxheWVyUHJpdmF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6Omhhc1ZpZGVvKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6aGFzQXVkaW8pOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZTo6Y2FuY2VsTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGU6OnBsYXkpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpw
YXVzZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnBhdXNlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnNlZWspOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpzZWVraW5nKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZTo6ZHVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlOjpjdXJyZW50VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGU6OmJ1ZmZlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6
bWF4VGltZVNlZWthYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6
Ynl0ZXNMb2FkZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjp0b3Rh
bEJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0UmF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnNldFZvbHVtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnN1cHBvcnRzTXV0aW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0TXV0ZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpuZXR3b3JrU3RhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpyZWFkeVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZTo6c2V0VmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGU6Om1lZGlhU3RhdHVzQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGU6OmhhbmRsZUVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZTo6c3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZTo6bmF0aXZlU2l6ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlOjpxdWV1ZWRTZWVrVGltZW91dCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGU6OnNlZWtUaW1lb3V0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZTo6cG9zaXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZTo6ZHVyYXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZTo6dm9sdW1lQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGU6Om11dGVkQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGU6OnVwZGF0ZVN0YXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6
OnNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpuYXR1cmFs
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnBhaW50KToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6cmVwYWludCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuaDogQWRkZWQgbmV3IFF0
TXVsdGltZWRpYSBCYWNrZW5kLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
Ojppc0F2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnN1
cHBvcnRzRnVsbHNjcmVlbik6CisgICAgICAgICogcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjptZWRpYUNvbnRyb2xzQmFzZWxp
bmVPcGFjaXR5KTogTmV3IG1ldGhvZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6
OnBhaW50TWVkaWFCYWNrZ3JvdW5kKTogQmFja2dyb3VuZCBkZXBlbmRzIG9uIGJhc2VsaW5lIG9w
YWNpdHkuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhTXV0ZUJ1
dHRvbik6IENoYW5nZWQgc3R5bGluZy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6
OnBhaW50TWVkaWFDdXJyZW50VGltZSk6IEFkZGVkIGN1cnJlbnQgdGltZSBkaXNwbGF5LgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6Zm9ybWF0TWVkaWFDb250cm9sc0N1cnJlbnRU
aW1lKTogQWRkZWQgdGltZSBmb3JtYXR0aW5nLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVRdDo6Zm9ybWF0TWVkaWFDb250cm9sc1JlbWFpbmluZ1RpbWUpOiBBZGRlZCB0aW1lIGZvcm1h
dHRpbmcuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhVm9sdW1l
U2xpZGVyVHJhY2spOiBWb2x1bWUgc2xpZGVyIGFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRodW1iKTogVm9sdW1lIHNsaWRlciBh
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBhaW50TWVkaWFTbGlkZXJU
cmFjayk6IFVwZGF0ZWQgZm9yIFF0TXVsdGltZWRpYS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lUXQ6OnBhaW50TWVkaWFTbGlkZXJUaHVtYik6IERyb3BwZWQgYW4gdW5uZWNlc3Nhcnkg
Y2hlY2suCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjphZGp1c3RTbGlkZXJUaHVt
YlNpemUpOiBIYW5kbGUgYSBtaXNzaW5nIGNhc2UuCisgICAgICAgICogcGxhdGZvcm0vcXQvUmVu
ZGVyVGhlbWVRdC5oOiBSZWltcGxlbWVudGVkIGEgZmV3IG1vcmUgbWV0aG9kcy4KKwogMjAxMC0w
Mi0xOCAgWWFhciBTY2huaXRtYW4gIDx5YWFyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9X
ZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IDRjYjQ3OTQuLjkwNjQ3YWUgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtMTMxLDExICsx
MzEsMjEgQEAgbWFtZW81fHN5bWJpYW58ZW1iZWRkZWQgewogCiBpbmNsdWRlKCQkUFdELy4uL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnByaSkKIAotIyBEaXNhYmxlIEhUTUw1IG1lZGlh
IGNvbXBpbGF0aW9uIGlmIHBob25vbiBpcyB1bmF2YWlsYWJsZQotIWNvbnRhaW5zKERFRklORVMs
IEVOQUJMRV9WSURFTz0xKSB7Ci0gICAgIWNvbnRhaW5zKFFUX0NPTkZJRywgcGhvbm9uKSB7Ci0g
ICAgICAgIERFRklORVMgLT0gRU5BQkxFX1ZJREVPPTEKLSAgICAgICAgREVGSU5FUyArPSBFTkFC
TEVfVklERU89MAorCisjIEhUTUw1IE1lZGlhIFN1cHBvcnQKKyMgV2UgcmVxdWlyZSBwaG9ub24g
Zm9yIHZlcnNpb25zIG9mIFF0IDwgNC43CisjIFdlIHJlcXVpcmUgUXRNdWx0aW1lZGlhIGZvciB2
ZXJzaW9ucyBvZiBRdCA+PSA0LjcKKyFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfVklERU89MSk6
IWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9WSURFTz0wKSB7CisgICAgREVGSU5FUyAtPSBFTkFC
TEVfVklERU89MQorICAgIERFRklORVMgKz0gRU5BQkxFX1ZJREVPPTAKKworICAgIGxlc3NUaGFu
KFFUX01JTk9SX1ZFUlNJT04sIDcpOmNvbnRhaW5zKFFUX0NPTkZJRywgcGhvbm9uKSB7CisgICAg
ICAgIERFRklORVMgLT0gRU5BQkxFX1ZJREVPPTAKKyAgICAgICAgREVGSU5FUyArPSBFTkFCTEVf
VklERU89MQorICAgIH0KKyAgICAhbGVzc1RoYW4oUVRfTUlOT1JfVkVSU0lPTiwgNyk6Y29udGFp
bnMoUVRfQ09ORklHLCBtdWx0aW1lZGlhKSB7CisgICAgICAgIERFRklORVMgLT0gRU5BQkxFX1ZJ
REVPPTAKKyAgICAgICAgREVGSU5FUyArPSBFTkFCTEVfVklERU89MQogICAgIH0KIH0KIApAQCAt
MjMwNSwyMSArMjMxNSwyOSBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfVklERU89MSkgewog
ICAgICAgICByZW5kZXJpbmcvUmVuZGVyTWVkaWEuY3BwIFwKICAgICAgICAgYmluZGluZ3MvanMv
SlNBdWRpb0NvbnN0cnVjdG9yLmNwcAogCi0gICAgICAgIEhFQURFUlMgKz0gXAotICAgICAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uLmgKKyAgICAg
ICAgIyBRdE11bHRpbWVkaWEgc2luY2UgNC43CisgICAgICAgIGdyZWF0ZXJUaGFuKFFUX01JTk9S
X1ZFUlNJT04sIDYpIHsKKyAgICAgICAgICAgIEhFQURFUlMgKz0gcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuaAorICAgICAgICAgICAgU09VUkNFUyArPSBwbGF0Zm9y
bS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5jcHAKIAotICAgICAgICBTT1VSQ0VT
ICs9IFwKLSAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0
ZVBob25vbi5jcHAKLQotICAgICAgICAjIEFkZCBwaG9ub24gbWFudWFsbHkgdG8gcHJldmVudCBp
dCBmcm9tIGNvbWluZyBmaXJzdCBpbgotICAgICAgICAjIHRoZSBpbmNsdWRlIHBhdGhzLCBhcyBQ
aG9ub24ncyBwYXRoLmggY29uZmxpY3RzIHdpdGgKLSAgICAgICAgIyBXZWJDb3JlJ3MgUGF0aC5o
IG9uIGNhc2UtaW5zZW5zaXRpdmUgZmlsZXN5c3RlbXMuCi0gICAgICAgIHF0QWRkTGlicmFyeShw
aG9ub24pCi0gICAgICAgIElOQ0xVREVQQVRIIC09ICQkUU1BS0VfSU5DRElSX1FUL3Bob25vbgot
ICAgICAgICBJTkNMVURFUEFUSCArPSAkJFFNQUtFX0lOQ0RJUl9RVC9waG9ub24KLSAgICAgICAg
bWFjIHsKLSAgICAgICAgICAgIElOQ0xVREVQQVRIIC09ICQkUU1BS0VfTElCRElSX1FUL3Bob25v
bi5mcmFtZXdvcmsvSGVhZGVycwotICAgICAgICAgICAgSU5DTFVERVBBVEggKz0gJCRRTUFLRV9M
SUJESVJfUVQvcGhvbm9uLmZyYW1ld29yay9IZWFkZXJzCisgICAgICAgICAgICBRVCArPSBtdWx0
aW1lZGlhCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBIRUFERVJTICs9IFwKKyAgICAg
ICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVQaG9ub24u
aAorCisgICAgICAgICAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAgICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVQaG9ub24uY3BwCisKKyAgICAgICAgICAgICMg
QWRkIHBob25vbiBtYW51YWxseSB0byBwcmV2ZW50IGl0IGZyb20gY29taW5nIGZpcnN0IGluCisg
ICAgICAgICAgICAjIHRoZSBpbmNsdWRlIHBhdGhzLCBhcyBQaG9ub24ncyBwYXRoLmggY29uZmxp
Y3RzIHdpdGgKKyAgICAgICAgICAgICMgV2ViQ29yZSdzIFBhdGguaCBvbiBjYXNlLWluc2Vuc2l0
aXZlIGZpbGVzeXN0ZW1zLgorICAgICAgICAgICAgcXRBZGRMaWJyYXJ5KHBob25vbikKKyAgICAg
ICAgICAgIElOQ0xVREVQQVRIIC09ICQkUU1BS0VfSU5DRElSX1FUL3Bob25vbgorICAgICAgICAg
ICAgSU5DTFVERVBBVEggKz0gJCRRTUFLRV9JTkNESVJfUVQvcGhvbm9uCisgICAgICAgICAgICBt
YWMgeworICAgICAgICAgICAgICAgIElOQ0xVREVQQVRIIC09ICQkUU1BS0VfTElCRElSX1FUL3Bo
b25vbi5mcmFtZXdvcmsvSGVhZGVycworICAgICAgICAgICAgICAgIElOQ0xVREVQQVRIICs9ICQk
UU1BS0VfTElCRElSX1FUL3Bob25vbi5mcmFtZXdvcmsvSGVhZGVycworICAgICAgICAgICAgfQog
ICAgICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL21lZGlhQ29udHJvbHNRdC5j
c3MgYi9XZWJDb3JlL2Nzcy9tZWRpYUNvbnRyb2xzUXQuY3NzCmluZGV4IGE5YzM2MDkuLmQ0OWZl
OTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL21lZGlhQ29udHJvbHNRdC5jc3MKKysrIGIvV2Vi
Q29yZS9jc3MvbWVkaWFDb250cm9sc1F0LmNzcwpAQCAtNTEsOCArNTEsNiBAQCB2aWRlbzotd2Vi
a2l0LWZ1bGwtcGFnZS1tZWRpYTo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1wYW5lbCB7CiB9CiAK
IGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLW11dGUtYnV0dG9uLCB2aWRlbzo6LXdlYmtp
dC1tZWRpYS1jb250cm9scy1tdXRlLWJ1dHRvbiB7Ci0gICAgbGVmdDogYXV0bzsKLSAgICByaWdo
dDogNXB4OwogICAgIHdpZHRoOiAxMnB4OwogICAgIGhlaWdodDogMTJweDsKICAgICBwYWRkaW5n
OiA2cHg7CkBAIC02MCw3ICs1OCw2IEBAIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLW11
dGUtYnV0dG9uLCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1tdXRlLWJ1CiB9CiAKIGF1
ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXBsYXktYnV0dG9uLCB2aWRlbzo6LXdlYmtpdC1t
ZWRpYS1jb250cm9scy1wbGF5LWJ1dHRvbiB7Ci0gICAgbGVmdDogNXB4OwogICAgIHdpZHRoOiA5
cHg7CiAgICAgaGVpZ2h0OiAxMnB4OwogICAgIHBhZGRpbmc6IDZweCAxMnB4IDZweCAxMXB4OwpA
QCAtNzIsNyArNjksMjEgQEAgYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdGltZWxpbmUt
Y29udGFpbmVyLCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy0KIH0KIAogYXVkaW86Oi13
ZWJraXQtbWVkaWEtY29udHJvbHMtY3VycmVudC10aW1lLWRpc3BsYXksIHZpZGVvOjotd2Via2l0
LW1lZGlhLWNvbnRyb2xzLWN1cnJlbnQtdGltZS1kaXNwbGF5IHsKLSAgICBkaXNwbGF5OiBub25l
OworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbWVkaWEtY3VycmVudC10aW1lLWRpc3BsYXk7Cisg
ICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKKyAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7
CisgICAgaGVpZ2h0OiAxMnB4OworICAgIHBhZGRpbmc6IDZweDsKKyAgICBtYXJnaW46IDVweCAz
cHg7CisKKyAgICBvdmVyZmxvdzogaGlkZGVuOworICAgIGN1cnNvcjogZGVmYXVsdDsKKworICAg
IHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICBmb250LXNpemU6IDEwcHg7CisgICAgZm9udC1mYW1p
bHk6IFZlcmRhbmE7CisgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgY29sb3I6IHdoaXRlOwog
fQogCiBhdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lLXJlbWFpbmluZy1kaXNwbGF5
LCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lLXJlbWFpbmluZy1kaXNwbGF5IHsK
QEAgLTgwLDUxICs5MSwzOCBAQCBhdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lLXJl
bWFpbmluZy1kaXNwbGF5LCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cgogfQogCiBhdWRpbzo6
LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lbGluZSwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29u
dHJvbHMtdGltZWxpbmUgewotICAgIGxlZnQ6IDQycHg7Ci0gICAgcmlnaHQ6IDM0cHg7CiAgICAg
aGVpZ2h0OiAxMnB4OwogICAgIHBhZGRpbmc6IDZweCA4cHg7Ci0gICAgbWFyZ2luOiA1cHggMHB4
OworICAgIG1hcmdpbjogNXB4IDNweDsKIH0KIAogYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJv
bHMtdm9sdW1lLXNsaWRlci1jb250YWluZXIsIHZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xz
LXZvbHVtZS1zbGlkZXItY29udGFpbmVyIHsKLSAgICBkaXNwbGF5OiBub25lOworICAgIC13ZWJr
aXQtYXBwZWFyYW5jZTogbWVkaWEtdm9sdW1lLXNsaWRlci1jb250YWluZXI7CisgICAgcG9zaXRp
b246IGFic29sdXRlOworICAgIGhlaWdodDogMTAzcHg7CisgICAgd2lkdGg6IDI0cHg7CiB9CiAK
IGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXZvbHVtZS1zbGlkZXIsIHZpZGVvOjotd2Vi
a2l0LW1lZGlhLWNvbnRyb2xzLXZvbHVtZS1zbGlkZXIgewotICAgIGRpc3BsYXk6IG5vbmU7Cisg
ICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBtZWRpYS12b2x1bWUtc2xpZGVyOworICAgIGRpc3BsYXk6
IGlubGluZTsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisKKyAgICB3aWR0aDogMTJweDsKKyAg
ICBwYWRkaW5nOiA2cHg7CisgICAgaGVpZ2h0OiA4OHB4OworICAgIG1hcmdpbjogMCAwIDNweCAw
OwogfQogCiBhdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1zZWVrLWJhY2stYnV0dG9uLCB2
aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1zZWVrLWJhY2stYnV0dG9uIHsKLSAgICAvKiBT
aW5jZSBNZWRpYUNvbnRyb2xFbGVtZW50cyBhcmUgYWx3YXlzIGNyZWF0ZWQgd2l0aCBhIHJlbmRl
cmVyIHdlIGhhdmUgdG8gaGlkZQotICAgICAgIHRoZSBjb250cm9scyB3ZSBkb24ndCB1c2UsIHNv
IHRoZXkgZG9uJ3QgbWVzcyB1cCBhY3RpdmF0aW9uIGFuZCBldmVudCBoYW5kbGluZyAqLwotICAg
IGxlZnQ6IDBweDsKLSAgICB0b3A6IDBweDsKLSAgICB3aWR0aDogMHB4OwotICAgIGhlaWdodDog
MHB4OwotCiAgICAgZGlzcGxheTogbm9uZTsKIH0KIAogYXVkaW86Oi13ZWJraXQtbWVkaWEtY29u
dHJvbHMtc2Vlay1mb3J3YXJkLWJ1dHRvbiwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMt
c2Vlay1mb3J3YXJkLWJ1dHRvbiB7Ci0gICAgLyogU2luY2UgTWVkaWFDb250cm9sRWxlbWVudHMg
YXJlIGFsd2F5cyBjcmVhdGVkIHdpdGggYSByZW5kZXJlciB3ZSBoYXZlIHRvIGhpZGUKLSAgICAg
ICB0aGUgY29udHJvbHMgd2UgZG9uJ3QgdXNlLCBzbyB0aGV5IGRvbid0IG1lc3MgdXAgYWN0aXZh
dGlvbiBhbmQgZXZlbnQgaGFuZGxpbmcgKi8KLSAgICBsZWZ0OiAwcHg7Ci0gICAgdG9wOiAwcHg7
Ci0gICAgd2lkdGg6IDBweDsKLSAgICBoZWlnaHQ6IDBweDsKLQogICAgIGRpc3BsYXk6IG5vbmU7
CiB9CiAKIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWZ1bGxzY3JlZW4tYnV0dG9uLCB2
aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1mdWxsc2NyZWVuLWJ1dHRvbiB7Ci0gICAgLyog
U2luY2UgTWVkaWFDb250cm9sRWxlbWVudHMgYXJlIGFsd2F5cyBjcmVhdGVkIHdpdGggYSByZW5k
ZXJlciB3ZSBoYXZlIHRvIGhpZGUKLSAgICAgICB0aGUgY29udHJvbHMgd2UgZG9uJ3QgdXNlLCBz
byB0aGV5IGRvbid0IG1lc3MgdXAgYWN0aXZhdGlvbiBhbmQgZXZlbnQgaGFuZGxpbmcgKi8KLSAg
ICBsZWZ0OiAwcHg7Ci0gICAgdG9wOiAwcHg7Ci0gICAgd2lkdGg6IDBweDsKLSAgICBoZWlnaHQ6
IDBweDsKLQogICAgIGRpc3BsYXk6IG5vbmU7CiB9CiAKQEAgLTEzNiwzICsxMzQsNyBAQCBhdWRp
bzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1yZXR1cm4tdG8tcmVhbHRpbWUtYnV0dG9uLCB2aWRl
bzo6LXdlYmtpdC1tZWRpYS1jbwogICAgIGRpc3BsYXk6IG5vbmU7CiB9CiAKK2F1ZGlvOjotd2Vi
a2l0LW1lZGlhLWNvbnRyb2xzLXRvZ2dsZS1jbG9zZWQtY2FwdGlvbnMtYnV0dG9uLCB2aWRlbzo6
LXdlYmtpdC1tZWRpYS1jb250cm9scy10b2dnbGUtY2xvc2VkLWNhcHRpb25zLWJ1dHRvbiB7Cisg
ICAgZGlzcGxheTogbm9uZTsKK30KKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9NZWRpYVBsYXllci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxh
eWVyLmNwcAppbmRleCA5ZjhlOTIzLi5mZjkzMDNhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL01lZGlhUGxheWVyLmNwcApAQCAtMzcsNiArMzcsMTAgQEAKICNpbmNsdWRlICJEb2N1bWVu
dC5oIgogI2luY2x1ZGUgIlRpbWVSYW5nZXMuaCIKIAorI2lmIFBMQVRGT1JNKFFUKQorI2luY2x1
ZGUgPFF0R2xvYmFsPgorI2VuZGlmCisKICNpZiBQTEFURk9STShNQUMpCiAjaW5jbHVkZSAiTWVk
aWFQbGF5ZXJQcml2YXRlUVRLaXQuaCIKICNlbGlmIE9TKFdJTkNFKSAmJiAhUExBVEZPUk0oUVQp
CkBAIC00Niw3ICs1MCwxMSBAQAogI2VsaWYgUExBVEZPUk0oR1RLKQogI2luY2x1ZGUgIk1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oIgogI2VsaWYgUExBVEZPUk0oUVQpCisjaWYgUVRfVkVS
U0lPTiA8IDB4MDQwNzAwCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uLmgiCisj
ZWxzZQorI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZVF0LmgiCisjZW5kaWYKICNlbGlmIFBM
QVRGT1JNKENIUk9NSVVNKQogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUNocm9taXVtLmgi
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQ
bGF5ZXJQcml2YXRlUXQuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBs
YXllclByaXZhdGVRdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjky
MmE3NQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVk
aWFQbGF5ZXJQcml2YXRlUXQuY3BwCkBAIC0wLDAgKzEsNTQwIEBACisvKgorICAgIENvcHlyaWdo
dCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
KworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlUXQu
aCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudFF0
LmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CisjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1l
bnQuaCIKKyNpbmNsdWRlICJUaW1lUmFuZ2VzLmgiCisjaW5jbHVkZSAiV2lkZ2V0LmgiCisjaW5j
bHVkZSAicXdlYmZyYW1lLmgiCisjaW5jbHVkZSAicXdlYnBhZ2UuaCIKKworI2luY2x1ZGUgPFFH
cmFwaGljc1NjZW5lPgorI2luY2x1ZGUgPFFHcmFwaGljc1ZpZGVvSXRlbT4KKyNpbmNsdWRlIDxR
TWVkaWFQbGF5ZXJDb250cm9sPgorI2luY2x1ZGUgPFFNZWRpYVNlcnZpY2U+CisjaW5jbHVkZSA8
UU5ldHdvcmtBY2Nlc3NNYW5hZ2VyPgorI2luY2x1ZGUgPFFOZXR3b3JrQ29va2llSmFyPgorI2lu
Y2x1ZGUgPFFOZXR3b3JrUmVxdWVzdD4KKyNpbmNsdWRlIDxRUGFpbnRlcj4KKyNpbmNsdWRlIDxR
UG9pbnQ+CisjaW5jbHVkZSA8UVJlY3Q+CisjaW5jbHVkZSA8UVRpbWU+CisjaW5jbHVkZSA8UVRp
bWVyPgorI2luY2x1ZGUgPFFVcmw+CisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlKiBNZWRpYVBsYXllclByaXZhdGU6OmNyZWF0
ZShNZWRpYVBsYXllciogcGxheWVyKQoreworICAgIHJldHVybiBuZXcgTWVkaWFQbGF5ZXJQcml2
YXRlKHBsYXllcik7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpyZWdpc3Rlck1lZGlh
RW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sKKyAgICByZWdpc3RyYXIo
Y3JlYXRlLCBnZXRTdXBwb3J0ZWRUeXBlcywgc3VwcG9ydHNUeXBlKTsKK30KKwordm9pZCBNZWRp
YVBsYXllclByaXZhdGU6OmdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiAmc3VwcG9y
dGVkKQoreworICAgIFFTdHJpbmdMaXN0IHR5cGVzID0gUU1lZGlhUGxheWVyOjpzdXBwb3J0ZWRN
aW1lVHlwZXMoKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZXMuc2l6ZSgpOyBpKysp
CisgICAgICAgIHN1cHBvcnRlZC5hZGQodHlwZXMuYXQoaSkpOworfQorCitNZWRpYVBsYXllcjo6
U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyUHJpdmF0ZTo6c3VwcG9ydHNUeXBlKGNvbnN0IFN0cmlu
ZyYgbWltZSwgY29uc3QgU3RyaW5nJiBjb2RlYykKK3sKKyAgICBpZiAoUU1lZGlhUGxheWVyOjpo
YXNTdXBwb3J0KG1pbWUsIFFTdHJpbmdMaXN0KGNvZGVjKSkgPj0gUXRNZWRpYTo6UHJvYmFibHlT
dXBwb3J0ZWQpCisgICAgICAgIHJldHVybiBNZWRpYVBsYXllcjo6SXNTdXBwb3J0ZWQ7CisKKyAg
ICByZXR1cm4gTWVkaWFQbGF5ZXI6Ok1heUJlU3VwcG9ydGVkOworfQorCitNZWRpYVBsYXllclBy
aXZhdGU6Ok1lZGlhUGxheWVyUHJpdmF0ZShNZWRpYVBsYXllciogcGxheWVyKQorICAgIDogbV9w
bGF5ZXIocGxheWVyKQorICAgICwgbV9tZWRpYVBsYXllcihuZXcgUU1lZGlhUGxheWVyKQorICAg
ICwgbV92aWRlb0l0ZW0obmV3IFFHcmFwaGljc1ZpZGVvSXRlbSkKKyAgICAsIG1fdmlkZW9TY2Vu
ZShuZXcgUUdyYXBoaWNzU2NlbmUpCisgICAgLCBtX25ldHdvcmtTdGF0ZShNZWRpYVBsYXllcjo6
RW1wdHkpCisgICAgLCBtX3JlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nKQorICAg
ICwgbV9pc1Zpc2libGUoZmFsc2UpCisgICAgLCBtX2lzU2Vla2luZyhmYWxzZSkKKyAgICAsIG1f
cXVldWVkU2VlaygtMSkKK3sKKyAgICBtX3ZpZGVvSXRlbS0+c2V0TWVkaWFPYmplY3QobV9tZWRp
YVBsYXllcik7CisgICAgbV92aWRlb1NjZW5lLT5hZGRJdGVtKG1fdmlkZW9JdGVtKTsKKworICAg
IC8vIFNpZ25hbCBIYW5kbGVycworICAgIGNvbm5lY3QobV9tZWRpYVBsYXllciwgU0lHTkFMKG1l
ZGlhU3RhdHVzQ2hhbmdlZChRTWVkaWFQbGF5ZXI6Ok1lZGlhU3RhdHVzKSksCisgICAgICAgICAg
ICB0aGlzLCBTTE9UKG1lZGlhU3RhdHVzQ2hhbmdlZChRTWVkaWFQbGF5ZXI6Ok1lZGlhU3RhdHVz
KSkpOworICAgIGNvbm5lY3QobV9tZWRpYVBsYXllciwgU0lHTkFMKHN0YXRlQ2hhbmdlZChRTWVk
aWFQbGF5ZXI6OlN0YXRlKSksCisgICAgICAgICAgICB0aGlzLCBTTE9UKHN0YXRlQ2hhbmdlZChR
TWVkaWFQbGF5ZXI6OlN0YXRlKSkpOworICAgIGNvbm5lY3QobV9tZWRpYVBsYXllciwgU0lHTkFM
KGVycm9yKFFNZWRpYVBsYXllcjo6RXJyb3IpKSwKKyAgICAgICAgICAgIHRoaXMsIFNMT1QoaGFu
ZGxlRXJyb3IoUU1lZGlhUGxheWVyOjpFcnJvcikpKTsKKyAgICBjb25uZWN0KG1fbWVkaWFQbGF5
ZXIsIFNJR05BTChkdXJhdGlvbkNoYW5nZWQocWludDY0KSksCisgICAgICAgICAgICB0aGlzLCBT
TE9UKGR1cmF0aW9uQ2hhbmdlZChxaW50NjQpKSk7CisgICAgY29ubmVjdChtX21lZGlhUGxheWVy
LCBTSUdOQUwocG9zaXRpb25DaGFuZ2VkKHFpbnQ2NCkpLAorICAgICAgICAgICAgdGhpcywgU0xP
VChwb3NpdGlvbkNoYW5nZWQocWludDY0KSkpOworICAgIGNvbm5lY3QobV9tZWRpYVBsYXllciwg
U0lHTkFMKHZvbHVtZUNoYW5nZWQoaW50KSksCisgICAgICAgICAgICB0aGlzLCBTTE9UKHZvbHVt
ZUNoYW5nZWQoaW50KSkpOworICAgIGNvbm5lY3QobV9tZWRpYVBsYXllciwgU0lHTkFMKG11dGVk
Q2hhbmdlZChib29sKSksCisgICAgICAgICAgICB0aGlzLCBTTE9UKG11dGVkQ2hhbmdlZChib29s
KSkpOworICAgIGNvbm5lY3QobV92aWRlb1NjZW5lLCBTSUdOQUwoY2hhbmdlZChRTGlzdDxRUmVj
dEY+KSksCisgICAgICAgICAgICB0aGlzLCBTTE9UKHJlcGFpbnQoKSkpOworICAgIGNvbm5lY3Qo
bV92aWRlb0l0ZW0sIFNJR05BTChuYXRpdmVTaXplQ2hhbmdlZChRU2l6ZUYpKSwKKyAgICAgICAg
ICAgdGhpcywgU0xPVChuYXRpdmVTaXplQ2hhbmdlZChRU2l6ZUYpKSk7CisKKyAgICAvLyBHcmFi
IHRoZSBwbGF5ZXIgY29udHJvbAorICAgIFFNZWRpYVNlcnZpY2UqIHNlcnZpY2UgPSBtX21lZGlh
UGxheWVyLT5zZXJ2aWNlKCk7CisgICAgaWYgKHNlcnZpY2UpIHsKKyAgICAgICAgbV9tZWRpYVBs
YXllckNvbnRyb2wgPSBxb2JqZWN0X2Nhc3Q8UU1lZGlhUGxheWVyQ29udHJvbCAqPigKKyAgICAg
ICAgICAgICAgICBzZXJ2aWNlLT5jb250cm9sKFFNZWRpYVBsYXllckNvbnRyb2xfaWlkKSk7Cisg
ICAgfQorfQorCitNZWRpYVBsYXllclByaXZhdGU6On5NZWRpYVBsYXllclByaXZhdGUoKQorewor
ICAgIGRlbGV0ZSBtX21lZGlhUGxheWVyOworICAgIGRlbGV0ZSBtX3ZpZGVvU2NlbmU7Cit9CisK
K2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpoYXNWaWRlbygpIGNvbnN0Cit7CisgICAgLy8gcmV0
dXJuIG1fbWVkaWFQbGF5ZXItPmlzVmlkZW9BdmFpbGFibGUoKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGU6Omhhc0F1ZGlvKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmxvYWQoY29uc3QgU3Ry
aW5nJiB1cmwpCit7CisgICAgLy8gV2UgYXJlIG5vdyBsb2FkaW5nCisgICAgaWYgKG1fbmV0d29y
a1N0YXRlICE9IE1lZGlhUGxheWVyOjpMb2FkaW5nKSB7CisgICAgICAgIG1fbmV0d29ya1N0YXRl
ID0gTWVkaWFQbGF5ZXI6OkxvYWRpbmc7CisgICAgICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVD
aGFuZ2VkKCk7CisgICAgfQorCisgICAgLy8gQW5kIHdlIGRvbid0IGhhdmUgYW55IGRhdGEgeWV0
CisgICAgaWYgKG1fcmVhZHlTdGF0ZSAhPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcpIHsKKyAg
ICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOworICAgICAgICBt
X3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKKyAgICB9CisKKyAgICBjb25zdCBRVXJsIHJV
cmwgPSBRVXJsKFFTdHJpbmcodXJsKSk7CisgICAgY29uc3QgUVN0cmluZyBzY2hlbWUgPSByVXJs
LnNjaGVtZSgpLnRvTG93ZXIoKTsKKworICAgIC8vIEdyYWIgdGhlIGNsaWVudCBtZWRpYSBlbGVt
ZW50CisgICAgSFRNTE1lZGlhRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxNZWRp
YUVsZW1lbnQqPihtX3BsYXllci0+bWVkaWFQbGF5ZXJDbGllbnQoKSk7CisKKyAgICAvLyBDb25z
dHJ1Y3QgdGhlIG1lZGlhIGNvbnRlbnQgd2l0aCBhIG5ldHdvcmsgcmVxdWVzdCBpZiB0aGUgcmVz
b3VyY2UgaXMgaHR0cFtzXQorICAgIGlmIChzY2hlbWUgPT0gImh0dHAiIHx8IHNjaGVtZSA9PSAi
aHR0cHMiKSB7CisgICAgICAgIFFOZXR3b3JrUmVxdWVzdCByZXF1ZXN0ID0gUU5ldHdvcmtSZXF1
ZXN0KHJVcmwpOworCisgICAgICAgIC8vIEdyYWIgdGhlIGN1cnJlbnQgZG9jdW1lbnQKKyAgICAg
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZWxlbWVudC0+ZG9jdW1lbnQoKTsKKyAgICAgICAgaWYg
KCFkb2N1bWVudCkKKyAgICAgICAgICAgIGRvY3VtZW50ID0gZWxlbWVudC0+b3duZXJEb2N1bWVu
dCgpOworCisgICAgICAgIC8vIEdyYWIgdGhlIGZyYW1lIGFuZCBuZXR3b3JrIG1hbmFnZXIKKyAg
ICAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQgPyBkb2N1bWVudC0+ZnJhbWUoKSA6IDA7Cisg
ICAgICAgIEZyYW1lTG9hZGVyQ2xpZW50UXQqIGZyYW1lTG9hZGVyID0gIGZyYW1lID8gc3RhdGlj
X2Nhc3Q8RnJhbWVMb2FkZXJDbGllbnRRdCo+KGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCkpIDog
MDsKKyAgICAgICAgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyKiBtYW5hZ2VyID0gZnJhbWVMb2FkZXIg
PyBmcmFtZUxvYWRlci0+d2ViRnJhbWUoKS0+cGFnZSgpLT5uZXR3b3JrQWNjZXNzTWFuYWdlcigp
IDogMDsKKworICAgICAgICBpZiAoZG9jdW1lbnQgJiYgbWFuYWdlcikgeworICAgICAgICAgICAg
Ly8gU2V0IHRoZSBjb29raWVzCisgICAgICAgICAgICBRTmV0d29ya0Nvb2tpZUphciogamFyID0g
bWFuYWdlci0+Y29va2llSmFyKCk7CisgICAgICAgICAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT4g
Y29va2llcyA9IGphci0+Y29va2llc0ZvclVybChyVXJsKTsKKworICAgICAgICAgICAgLy8gRG9u
J3Qgc2V0IHRoZSBoZWFkZXIgaWYgdGhlcmUgYXJlIG5vIGNvb2tpZXMuCisgICAgICAgICAgICAv
LyBUaGlzIHByZXZlbnRzIGEgd2FybmluZyBmcm9tIGJlaW5nIGVtaXR0ZWQuCisgICAgICAgICAg
ICBpZiAoIWNvb2tpZXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHJlcXVlc3Quc2V0SGVh
ZGVyKFFOZXR3b3JrUmVxdWVzdDo6Q29va2llSGVhZGVyLCBxVmFyaWFudEZyb21WYWx1ZShjb29r
aWVzKSk7CisKKyAgICAgICAgICAgIC8vIFNldCB0aGUgcmVmZmVyZXIsIGJ1dCBub3Qgd2hlbiBy
ZXF1ZXN0aW5nIGluc2VjdXJlIGNvbnRlbnQgZnJvbSBhIHNlY3VyZSBwYWdlCisgICAgICAgICAg
ICBRVXJsIGRvY3VtZW50VXJsID0gUVVybChRU3RyaW5nKGRvY3VtZW50LT5kb2N1bWVudFVSSSgp
KSk7CisgICAgICAgICAgICBpZiAoZG9jdW1lbnRVcmwuc2NoZW1lKCkudG9Mb3dlcigpID09ICJo
dHRwIiB8fCBzY2hlbWUgPT0gImh0dHBzIikKKyAgICAgICAgICAgICAgICByZXF1ZXN0LnNldFJh
d0hlYWRlcigiUmVmZXJlciIsIGRvY3VtZW50VXJsLnRvRW5jb2RlZCgpKTsKKworICAgICAgICAg
ICAgLy8gU2V0IHRoZSB1c2VyIGFnZW50CisgICAgICAgICAgICByZXF1ZXN0LnNldFJhd0hlYWRl
cigiVXNlci1BZ2VudCIsIGZyYW1lTG9hZGVyLT51c2VyQWdlbnQoclVybCkudXRmOCgpLmRhdGEo
KSk7CisgICAgICAgIH0KKworICAgICAgICBtX21lZGlhUGxheWVyLT5zZXRNZWRpYShRTWVkaWFD
b250ZW50KHJlcXVlc3QpKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBPdGhlcndpc2UsIGp1
c3QgdXNlIHRoZSBVUkwKKyAgICAgICAgbV9tZWRpYVBsYXllci0+c2V0TWVkaWEoUU1lZGlhQ29u
dGVudChyVXJsKSk7CisgICAgfQorCisgICAgLy8gU2V0IHRoZSBjdXJyZW50IHZvbHVtZSBhbmQg
bXV0ZSBzdGF0dXMKKyAgICAvLyBXZSBnZXQgdGhlc2UgZnJvbSB0aGUgZWxlbWVudCwgcmF0aGVy
IHRoYW4gdGhlIHBsYXllciwgaW4gY2FzZSB3ZSBoYXZlCisgICAgLy8gdHJhbnNpdGlvbmVkIGZy
b20gYSBtZWRpYSBlbmdpbmUgd2hpY2ggZG9lc24ndCBzdXBwb3J0IG11dGluZywgdG8gYSBtZWRp
YQorICAgIC8vIGVuZ2luZSB3aGljaCBkb2VzLgorICAgIG1fbWVkaWFQbGF5ZXItPnNldE11dGVk
KGVsZW1lbnQtPm11dGVkKCkpOworICAgIG1fbWVkaWFQbGF5ZXItPnNldFZvbHVtZShzdGF0aWNf
Y2FzdDxpbnQ+KGVsZW1lbnQtPnZvbHVtZSgpICogMTAwLjApKTsKK30KKwordm9pZCBNZWRpYVBs
YXllclByaXZhdGU6OmNhbmNlbExvYWQoKQoreworICAgIG1fbWVkaWFQbGF5ZXItPnNldE1lZGlh
KFFNZWRpYUNvbnRlbnQoKSk7CisgICAgdXBkYXRlU3RhdGVzKCk7Cit9CisKK3ZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlOjpwbGF5KCkKK3sKKyAgICBpZiAobV9tZWRpYVBsYXllci0+c3RhdGUoKSAh
PSBRTWVkaWFQbGF5ZXI6OlBsYXlpbmdTdGF0ZSkKKyAgICAgICAgbV9tZWRpYVBsYXllci0+cGxh
eSgpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGF1c2UoKQoreworICAgIGlmICht
X21lZGlhUGxheWVyLT5zdGF0ZSgpID09IFFNZWRpYVBsYXllcjo6UGxheWluZ1N0YXRlKQorICAg
ICAgICBtX21lZGlhUGxheWVyLT5wYXVzZSgpOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0
ZTo6cGF1c2VkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1fbWVkaWFQbGF5ZXItPnN0YXRlKCkg
IT0gUU1lZGlhUGxheWVyOjpQbGF5aW5nU3RhdGUpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZTo6c2VlayhmbG9hdCBwb3NpdGlvbikKK3sKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXItPmlz
U2Vla2FibGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fbWVkaWFQbGF5ZXJDb250
cm9sICYmICFtX21lZGlhUGxheWVyQ29udHJvbC0+YXZhaWxhYmxlUGxheWJhY2tSYW5nZXMoKS5j
b250YWlucyhwb3NpdGlvbiAqIDEwMDApKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9p
c1NlZWtpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChwb3NpdGlvbiA+IGR1cmF0aW9u
KCkpCisgICAgICAgIHBvc2l0aW9uID0gZHVyYXRpb24oKTsKKworICAgIC8vIFNlZWtpbmcgaXMg
bW9zdCByZWxpYWJsZSB3aGVuIHdlJ3JlIHBhdXNlZC4KKyAgICAvLyBXZWJraXQgd2lsbCB0cnkg
dG8gcGF1c2UgYmVmb3JlIHNlZWtpbmcsIGJ1dCBkdWUgdG8gdGhlIGFzeW5jaHJvbm91cyBuYXR1
cmUKKyAgICAvLyBvZiB0aGUgYmFja2VuZCwgdGhlIHBsYXllciBtYXkgbm90IGFjdHVhbGx5IGJl
IHBhdXNlZCB5ZXQuCisgICAgLy8gSW4gdGhpcyBjYXNlLCB3ZSBzaG91bGQgcXVldWUgdGhlIHNl
ZWsgYW5kIHdhaXQgdW50aWwgcGF1c2luZyBoYXMgY29tcGxldGVkCisgICAgLy8gYmVmb3JlIGF0
dGVtcHRpbmcgdG8gc2Vlay4KKyAgICBpZiAobV9tZWRpYVBsYXllci0+c3RhdGUoKSA9PSBRTWVk
aWFQbGF5ZXI6OlBsYXlpbmdTdGF0ZSkgeworICAgICAgICBtX21lZGlhUGxheWVyLT5wYXVzZSgp
OworICAgICAgICBtX2lzU2Vla2luZyA9IHRydWU7CisgICAgICAgIG1fcXVldWVkU2VlayA9IHN0
YXRpY19jYXN0PHFpbnQ2ND4ocG9zaXRpb24gKiAxMDAwKTsKKworICAgICAgICAvLyBTZXQgYSB0
aW1lb3V0LCBzbyB0aGF0IGluIHRoZSBldmVudCB0aGF0IHdlIGRvbid0IGdldCBhIHN0YXRlIGNo
YW5nZWQKKyAgICAgICAgLy8gc2lnbmFsLCB3ZSBzdGlsbCBhdHRlbXB0IHRoZSBzZWVrLgorICAg
ICAgICBRVGltZXI6OnNpbmdsZVNob3QoMTAwMCwgdGhpcywgU0xPVChxdWV1ZWRTZWVrVGltZW91
dCgpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9pc1NlZWtpbmcgPSB0cnVlOworICAgICAg
ICBtX21lZGlhUGxheWVyLT5zZXRQb3NpdGlvbihzdGF0aWNfY2FzdDxxaW50NjQ+KHBvc2l0aW9u
ICogMTAwMCkpOworCisgICAgICAgIC8vIFNldCBhIHRpbWVvdXQsIGluIGNhc2Ugd2UgZG9uJ3Qg
Z2V0IGEgcG9zaXRpb24gY2hhbmdlZCBzaWduYWwKKyAgICAgICAgUVRpbWVyOjpzaW5nbGVTaG90
KDEwMDAwLCB0aGlzLCBTTE9UKHNlZWtUaW1lb3V0KCkpKTsKKyAgICB9Cit9CisKK2Jvb2wgTWVk
aWFQbGF5ZXJQcml2YXRlOjpzZWVraW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pc1NlZWtp
bmc7Cit9CisKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZTo6ZHVyYXRpb24oKSBjb25zdAorewor
ICAgIGlmIChtX3JlYWR5U3RhdGUgPCBNZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRhKQorICAgICAg
ICByZXR1cm4gMC4wZjsKKworICAgIGZsb2F0IGR1cmF0aW9uID0gbV9tZWRpYVBsYXllci0+ZHVy
YXRpb24oKSAvIDEwMDAuMGY7CisKKyAgICAvLyBXZSBhcmUgc3RyZWFtaW5nCisgICAgaWYgKGR1
cmF0aW9uIDw9IDAuMGYpCisgICAgICAgIGR1cmF0aW9uID0gc3RkOjpudW1lcmljX2xpbWl0czxm
bG9hdD46OmluZmluaXR5KCk7CisKKyAgICByZXR1cm4gZHVyYXRpb247Cit9CisKK2Zsb2F0IE1l
ZGlhUGxheWVyUHJpdmF0ZTo6Y3VycmVudFRpbWUoKSBjb25zdAoreworICAgIGZsb2F0IGN1cnJl
bnRUaW1lID0gbV9tZWRpYVBsYXllci0+cG9zaXRpb24oKSAvIDEwMDAuMGY7CisgICAgcmV0dXJu
IGN1cnJlbnRUaW1lOworfQorCitQYXNzUmVmUHRyPFRpbWVSYW5nZXM+IE1lZGlhUGxheWVyUHJp
dmF0ZTo6YnVmZmVyZWQoKSBjb25zdAoreworICAgIFJlZlB0cjxUaW1lUmFuZ2VzPiBidWZmZXJl
ZCA9IFRpbWVSYW5nZXM6OmNyZWF0ZSgpOworCisgICAgaWYgKCFtX21lZGlhUGxheWVyQ29udHJv
bCkKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcmVkOworCisgICAgUU1lZGlhVGltZVJhbmdlIHBsYXli
YWNrUmFuZ2VzID0gbV9tZWRpYVBsYXllckNvbnRyb2wtPmF2YWlsYWJsZVBsYXliYWNrUmFuZ2Vz
KCk7CisKKyAgICBmb3JlYWNoIChjb25zdCBRTWVkaWFUaW1lSW50ZXJ2YWwgaW50ZXJ2YWwsIHBs
YXliYWNrUmFuZ2VzLmludGVydmFscygpKSB7CisgICAgICAgIGZsb2F0IHJhbmdlTWluID0gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KGludGVydmFsLnN0YXJ0KCkpIC8gMTAwMC4wZjsKKyAgICAgICAgZmxv
YXQgcmFuZ2VNYXggPSBzdGF0aWNfY2FzdDxmbG9hdD4oaW50ZXJ2YWwuZW5kKCkpIC8gMTAwMC4w
ZjsKKyAgICAgICAgYnVmZmVyZWQtPmFkZChyYW5nZU1pbiwgcmFuZ2VNYXgpOworICAgIH0KKwor
ICAgIHJldHVybiBidWZmZXJlZC5yZWxlYXNlKCk7Cit9CisKK2Zsb2F0IE1lZGlhUGxheWVyUHJp
dmF0ZTo6bWF4VGltZVNlZWthYmxlKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbWVkaWFQbGF5ZXJD
b250cm9sKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9h
dD4obV9tZWRpYVBsYXllckNvbnRyb2wtPmF2YWlsYWJsZVBsYXliYWNrUmFuZ2VzKCkubGF0ZXN0
VGltZSgpKSAvIDEwMDAuMGY7Cit9CisKK3Vuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Ynl0
ZXNMb2FkZWQoKSBjb25zdAoreworICAgIHVuc2lnbmVkIHBlcmNlbnRhZ2UgPSBtX21lZGlhUGxh
eWVyLT5idWZmZXJTdGF0dXMoKTsKKworICAgIGlmIChwZXJjZW50YWdlID09IDEwMCkgeworICAg
ICAgICBpZiAobV9uZXR3b3JrU3RhdGUgIT0gTWVkaWFQbGF5ZXI6OklkbGUpIHsKKyAgICAgICAg
ICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OklkbGU7CisgICAgICAgICAgICBtX3Bs
YXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgpOworICAgICAgICB9CisgICAgICAgIGlmIChtX3Jl
YWR5U3RhdGUgIT0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhKSB7CisgICAgICAgICAgICBt
X3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGE7CisgICAgICAgICAgICBt
X3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFFM
YXRpbjFTdHJpbmcgYmxLZXkoImJ5dGVzLWxvYWRlZCIpOworICAgIGlmIChtX21lZGlhUGxheWVy
LT5hdmFpbGFibGVFeHRlbmRlZE1ldGFEYXRhKCkuY29udGFpbnMoYmxLZXkpKQorICAgICAgICBy
ZXR1cm4gbV9tZWRpYVBsYXllci0+ZXh0ZW5kZWRNZXRhRGF0YShibEtleSkudG9JbnQoKTsKKwor
ICAgIHJldHVybiBwZXJjZW50YWdlOworfQorCit1bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGU6
OnRvdGFsQnl0ZXMoKSBjb25zdAoreworICAgIGlmIChtX21lZGlhUGxheWVyLT5hdmFpbGFibGVN
ZXRhRGF0YSgpLmNvbnRhaW5zKFF0TWVkaWE6OlNpemUpKQorICAgICAgICByZXR1cm4gbV9tZWRp
YVBsYXllci0+bWV0YURhdGEoUXRNZWRpYTo6U2l6ZSkudG9JbnQoKTsKKworICAgIHJldHVybiAx
MDA7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRSYXRlKGZsb2F0IHJhdGUpCit7
CisgICAgbV9tZWRpYVBsYXllci0+c2V0UGxheWJhY2tSYXRlKHJhdGUpOworfQorCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZTo6c2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSkKK3sKKyAgICBtX21lZGlh
UGxheWVyLT5zZXRWb2x1bWUoc3RhdGljX2Nhc3Q8aW50Pih2b2x1bWUgKiAxMDAuMCkpOworfQor
Citib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6c3VwcG9ydHNNdXRpbmcoKSBjb25zdAoreworICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0TXV0ZWQoYm9v
bCBtdXRlZCkKK3sKKyAgICBtX21lZGlhUGxheWVyLT5zZXRNdXRlZChtdXRlZCk7Cit9CisKK01l
ZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgTWVkaWFQbGF5ZXJQcml2YXRlOjpuZXR3b3JrU3RhdGUo
KSBjb25zdAoreworICAgIHJldHVybiBtX25ldHdvcmtTdGF0ZTsKK30KKworTWVkaWFQbGF5ZXI6
OlJlYWR5U3RhdGUgTWVkaWFQbGF5ZXJQcml2YXRlOjpyZWFkeVN0YXRlKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9yZWFkeVN0YXRlOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0
VmlzaWJsZShib29sIHZpc2libGUpCit7CisgICAgbV9pc1Zpc2libGUgPSB2aXNpYmxlOworfQor
Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6bWVkaWFTdGF0dXNDaGFuZ2VkKFFNZWRpYVBsYXll
cjo6TWVkaWFTdGF0dXMpCit7CisgICAgdXBkYXRlU3RhdGVzKCk7Cit9CisKK3ZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlOjpoYW5kbGVFcnJvcihRTWVkaWFQbGF5ZXI6OkVycm9yKQoreworICAgIHVw
ZGF0ZVN0YXRlcygpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c3RhdGVDaGFuZ2Vk
KFFNZWRpYVBsYXllcjo6U3RhdGUgc3RhdGUpCit7CisgICAgaWYgKHN0YXRlICE9IFFNZWRpYVBs
YXllcjo6UGxheWluZ1N0YXRlICYmIG1faXNTZWVraW5nICYmIG1fcXVldWVkU2VlayA+PSAwKSB7
CisgICAgICAgIG1fbWVkaWFQbGF5ZXItPnNldFBvc2l0aW9uKG1fcXVldWVkU2Vlayk7CisgICAg
ICAgIG1fcXVldWVkU2VlayA9IC0xOworICAgIH0KK30KKwordm9pZCBNZWRpYVBsYXllclByaXZh
dGU6Om5hdGl2ZVNpemVDaGFuZ2VkKGNvbnN0IFFTaXplRiYpCit7CisgICAgbV9wbGF5ZXItPnNp
emVDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpxdWV1ZWRTZWVrVGlt
ZW91dCgpCit7CisgICAgLy8gSWYgd2UgaGF2ZW4ndCBoZWFyZCBhbnl0aGluZywgYXNzdW1lIHRo
ZSBwbGF5ZXIgaXMgbm93IHBhdXNlZAorICAgIC8vIGFuZCB3ZSBjYW4gYXR0ZW1wdCB0aGUgc2Vl
aworICAgIGlmIChtX2lzU2Vla2luZyAmJiBtX3F1ZXVlZFNlZWsgPj0gMCkgeworICAgICAgICBt
X21lZGlhUGxheWVyLT5zZXRQb3NpdGlvbihtX3F1ZXVlZFNlZWspOworICAgICAgICBtX3F1ZXVl
ZFNlZWsgPSAtMTsKKworICAgICAgICAvLyBTZXQgYSB0aW1lb3V0LCBpbiBjYXNlIHdlIGRvbid0
IGdldCBhIHBvc2l0aW9uIGNoYW5nZWQgc2lnbmFsCisgICAgICAgIFFUaW1lcjo6c2luZ2xlU2hv
dCgxMDAwMCwgdGhpcywgU0xPVChzZWVrVGltZW91dCgpKSk7CisgICAgfQorfQorCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZTo6c2Vla1RpbWVvdXQoKQoreworICAgIC8vIElmIHdlIGhhdmVuJ3Qg
aGVhcmQgYW55dGhpbmcsIGFzc3VtZSB0aGUgc2VlayBzdWNjZWVkZWQKKyAgICBpZiAobV9pc1Nl
ZWtpbmcpIHsKKyAgICAgICAgbV9wbGF5ZXItPnRpbWVDaGFuZ2VkKCk7CisgICAgICAgIG1faXNT
ZWVraW5nID0gZmFsc2U7CisgICAgfQorfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cG9z
aXRpb25DaGFuZ2VkKHFpbnQ2NCkKK3sKKyAgICAvLyBPbmx5IHByb3BvZ2F0ZSB0aGlzIGV2ZW50
IGlmIHdlIGFyZSBzZWVraW5nCisgICAgaWYgKG1faXNTZWVraW5nICYmIG1fcXVldWVkU2VlayA9
PSAtMSkgeworICAgICAgICBtX3BsYXllci0+dGltZUNoYW5nZWQoKTsKKyAgICAgICAgbV9pc1Nl
ZWtpbmcgPSBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpkdXJh
dGlvbkNoYW5nZWQocWludDY0KQoreworICAgIG1fcGxheWVyLT5kdXJhdGlvbkNoYW5nZWQoKTsK
K30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnZvbHVtZUNoYW5nZWQoaW50IHZvbHVtZSkK
K3sKKyAgICBtX3BsYXllci0+dm9sdW1lQ2hhbmdlZChzdGF0aWNfY2FzdDxmbG9hdD4odm9sdW1l
KSAvIDEwMC4wKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om11dGVkQ2hhbmdlZChi
b29sIG11dGVkKQoreworICAgIG1fcGxheWVyLT5tdXRlQ2hhbmdlZChtdXRlZCk7Cit9CisKK3Zv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlOjp1cGRhdGVTdGF0ZXMoKQoreworICAgIC8vIFN0b3JlIHRo
ZSBvbGQgc3RhdGVzIHNvIHRoYXQgd2UgY2FuIGRldGVjdCBhIGNoYW5nZSBhbmQgcmFpc2UgY2hh
bmdlIGV2ZW50cworICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgb2xkTmV0d29ya1N0YXRl
ID0gbV9uZXR3b3JrU3RhdGU7CisgICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgb2xkUmVhZHlT
dGF0ZSA9IG1fcmVhZHlTdGF0ZTsKKworICAgIFFNZWRpYVBsYXllcjo6TWVkaWFTdGF0dXMgY3Vy
cmVudFN0YXR1cyA9IG1fbWVkaWFQbGF5ZXItPm1lZGlhU3RhdHVzKCk7CisgICAgUU1lZGlhUGxh
eWVyOjpFcnJvciBjdXJyZW50RXJyb3IgPSBtX21lZGlhUGxheWVyLT5lcnJvcigpOworCisgICAg
aWYgKGN1cnJlbnRFcnJvciAhPSBRTWVkaWFQbGF5ZXI6Ok5vRXJyb3IpIHsKKyAgICAgICAgbV9y
ZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOworICAgICAgICBpZiAoY3VycmVu
dEVycm9yID09IFFNZWRpYVBsYXllcjo6Rm9ybWF0RXJyb3IpCisgICAgICAgICAgICBtX25ldHdv
cmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpGb3JtYXRFcnJvcjsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TmV0d29ya0Vycm9yOworICAgIH0g
ZWxzZSBpZiAoY3VycmVudFN0YXR1cyA9PSBRTWVkaWFQbGF5ZXI6OlVua25vd25NZWRpYVN0YXR1
cworICAgICAgICAgICAgICAgfHwgY3VycmVudFN0YXR1cyA9PSBRTWVkaWFQbGF5ZXI6Ok5vTWVk
aWEpIHsKKyAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6SWRsZTsKKyAgICAg
ICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOworICAgIH0gZWxzZSBp
ZiAoY3VycmVudFN0YXR1cyA9PSBRTWVkaWFQbGF5ZXI6OkxvYWRpbmdNZWRpYSkgeworICAgICAg
ICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOworICAgICAgICBtX3JlYWR5
U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7CisgICAgfSBlbHNlIGlmIChjdXJyZW50
U3RhdHVzID09IFFNZWRpYVBsYXllcjo6TG9hZGVkTWVkaWEpIHsKKyAgICAgICAgbV9uZXR3b3Jr
U3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGluZzsKKyAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVk
aWFQbGF5ZXI6OkhhdmVNZXRhZGF0YTsKKyAgICB9IGVsc2UgaWYgKGN1cnJlbnRTdGF0dXMgPT0g
UU1lZGlhUGxheWVyOjpCdWZmZXJpbmdNZWRpYSkgeworICAgICAgICBtX25ldHdvcmtTdGF0ZSA9
IE1lZGlhUGxheWVyOjpMb2FkaW5nOworICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXll
cjo6SGF2ZUZ1dHVyZURhdGE7CisgICAgfSBlbHNlIGlmIChjdXJyZW50U3RhdHVzID09IFFNZWRp
YVBsYXllcjo6U3RhbGxlZE1lZGlhKSB7CisgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQ
bGF5ZXI6OkxvYWRpbmc7CisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZl
Q3VycmVudERhdGE7CisgICAgfSBlbHNlIGlmIChjdXJyZW50U3RhdHVzID09IFFNZWRpYVBsYXll
cjo6QnVmZmVyZWRNZWRpYQorICAgICAgICAgICAgICAgfHwgY3VycmVudFN0YXR1cyA9PSBRTWVk
aWFQbGF5ZXI6OkVuZE9mTWVkaWEpIHsKKyAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBs
YXllcjo6SWRsZTsKKyAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91
Z2hEYXRhOworICAgIH0gZWxzZSBpZiAoY3VycmVudFN0YXR1cyA9PSBRTWVkaWFQbGF5ZXI6Oklu
dmFsaWRNZWRpYSkgeworICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpOZXR3
b3JrRXJyb3I7CisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGlu
ZzsKKyAgICB9CisKKyAgICAvLyBMb2cgdGhlIHN0YXRlIGNoYW5nZXMgYW5kIHJhaXNlIHRoZSBz
dGF0ZSBjaGFuZ2UgZXZlbnRzCisgICAgLy8gTkI6IFRoZSByZWFkeVN0YXRlQ2hhbmdlZCBldmVu
dCBtdXN0IGNvbWUgYmVmb3JlIHRoZSBuZXR3b3JrU3RhdGVDaGFuZ2VkIGV2ZW50LgorICAgIC8v
IEJyZWFraW5nIHRoaXMgaW52YXJpYW50IHdpbGwgY2F1c2UgdGhlIHJlc291cmNlIHNlbGVjdGlv
biBhbGdvcml0aG0gZm9yIG11bHRpcGxlCisgICAgLy8gc291cmNlcyB0byBmYWlsLgorICAgIGlm
IChtX3JlYWR5U3RhdGUgIT0gb2xkUmVhZHlTdGF0ZSkKKyAgICAgICAgbV9wbGF5ZXItPnJlYWR5
U3RhdGVDaGFuZ2VkKCk7CisKKyAgICBpZiAobV9uZXR3b3JrU3RhdGUgIT0gb2xkTmV0d29ya1N0
YXRlKQorICAgICAgICBtX3BsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgpOworfQorCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQoreworICAg
IGlmIChzaXplID09IG1fY3VycmVudFNpemUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY3Vy
cmVudFNpemUgPSBzaXplOworICAgIG1fdmlkZW9JdGVtLT5zZXRTaXplKFFTaXplRihRU2l6ZShz
aXplKSkpOworfQorCitJbnRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZTo6bmF0dXJhbFNpemUoKSBj
b25zdAoreworICAgIGlmICghaGFzVmlkZW8oKSB8fCBtX3JlYWR5U3RhdGUgPCBNZWRpYVBsYXll
cjo6SGF2ZU1ldGFkYXRhKQorICAgICAgICByZXR1cm4gSW50U2l6ZSgpOworCisgICAgcmV0dXJu
IEludFNpemUobV92aWRlb0l0ZW0tPm5hdGl2ZVNpemUoKS50b1NpemUoKSk7Cit9CisKK3ZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlOjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2lzVmlzaWJsZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gR3JhYiB0aGUgcGFpbnRlciBhbmQgd2lkZ2V0CisgICAgUVBhaW50ZXIqIHBh
aW50ZXIgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKworICAgIC8vIFJlbmRlciB0aGUg
dmlkZW8KKyAgICBtX3ZpZGVvU2NlbmUtPnJlbmRlcihwYWludGVyLCBRUmVjdEYoUVJlY3QocmVj
dCkpKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnJlcGFpbnQoKQoreworICAgIG1f
cGxheWVyLT5yZXBhaW50KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2luY2x1
ZGUgIm1vY19NZWRpYVBsYXllclByaXZhdGVRdC5jcHAiCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmggYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNjIzNDMxMQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuaApAQCAtMCwwICsxLDEyMSBA
QAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBNZWRpYVBsYXllclByaXZhdGVRdF9oCisj
ZGVmaW5lIE1lZGlhUGxheWVyUHJpdmF0ZVF0X2gKKworI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJp
dmF0ZS5oIgorCisjaW5jbHVkZSA8UU1lZGlhUGxheWVyPgorI2luY2x1ZGUgPFFPYmplY3Q+CisK
K2NsYXNzIFFNZWRpYVBsYXllckNvbnRyb2w7CitjbGFzcyBRR3JhcGhpY3NWaWRlb0l0ZW07Citj
bGFzcyBRR3JhcGhpY3NTY2VuZTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBNZWRp
YVBsYXllclByaXZhdGUgOiBwdWJsaWMgUU9iamVjdCwgcHVibGljIE1lZGlhUGxheWVyUHJpdmF0
ZUludGVyZmFjZSB7CisKKyAgICBRX09CSkVDVAorCitwdWJsaWM6CisgICAgc3RhdGljIE1lZGlh
UGxheWVyUHJpdmF0ZUludGVyZmFjZSogY3JlYXRlKE1lZGlhUGxheWVyKiBwbGF5ZXIpOworICAg
IH5NZWRpYVBsYXllclByaXZhdGUoKTsKKworICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyTWVkaWFF
bmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIpOworICAgIHN0YXRpYyB2b2lkIGdldFN1cHBvcnRl
ZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiYpOworICAgIHN0YXRpYyBNZWRpYVBsYXllcjo6U3VwcG9y
dHNUeXBlIHN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKKyAgICBz
dGF0aWMgYm9vbCBpc0F2YWlsYWJsZSgpIHsgcmV0dXJuIHRydWU7IH0KKworICAgIGJvb2wgaGFz
VmlkZW8oKSBjb25zdDsKKyAgICBib29sIGhhc0F1ZGlvKCkgY29uc3Q7CisKKyAgICB2b2lkIGxv
YWQoY29uc3QgU3RyaW5nICZ1cmwpOworICAgIHZvaWQgY2FuY2VsTG9hZCgpOworCisgICAgdm9p
ZCBwbGF5KCk7CisgICAgdm9pZCBwYXVzZSgpOworCisgICAgYm9vbCBwYXVzZWQoKSBjb25zdDsK
KyAgICBib29sIHNlZWtpbmcoKSBjb25zdDsKKworICAgIGZsb2F0IGR1cmF0aW9uKCkgY29uc3Q7
CisgICAgZmxvYXQgY3VycmVudFRpbWUoKSBjb25zdDsKKyAgICB2b2lkIHNlZWsoZmxvYXQpOwor
CisgICAgdm9pZCBzZXRSYXRlKGZsb2F0KTsKKyAgICB2b2lkIHNldFZvbHVtZShmbG9hdCk7CisK
KyAgICBib29sIHN1cHBvcnRzTXV0aW5nKCkgY29uc3Q7CisgICAgdm9pZCBzZXRNdXRlZChib29s
KTsKKworICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlKCkgY29uc3Q7
CisgICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0OworCisgICAg
UGFzc1JlZlB0cjxUaW1lUmFuZ2VzPiBidWZmZXJlZCgpIGNvbnN0OworICAgIGZsb2F0IG1heFRp
bWVTZWVrYWJsZSgpIGNvbnN0OworICAgIHVuc2lnbmVkIGJ5dGVzTG9hZGVkKCkgY29uc3Q7Cisg
ICAgdW5zaWduZWQgdG90YWxCeXRlcygpIGNvbnN0OworCisgICAgdm9pZCBzZXRWaXNpYmxlKGJv
b2wpOworCisgICAgSW50U2l6ZSBuYXR1cmFsU2l6ZSgpIGNvbnN0OworICAgIHZvaWQgc2V0U2l6
ZShjb25zdCBJbnRTaXplJik7CisKKyAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IEludFJlY3QmKTsKKworICAgIGJvb2wgc3VwcG9ydHNGdWxsc2NyZWVuKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKworcHJpdmF0ZSBzbG90czoKKyAgICB2b2lkIG1lZGlhU3RhdHVzQ2hh
bmdlZChRTWVkaWFQbGF5ZXI6Ok1lZGlhU3RhdHVzKTsKKyAgICB2b2lkIGhhbmRsZUVycm9yKFFN
ZWRpYVBsYXllcjo6RXJyb3IpOworICAgIHZvaWQgc3RhdGVDaGFuZ2VkKFFNZWRpYVBsYXllcjo6
U3RhdGUpOworICAgIHZvaWQgbmF0aXZlU2l6ZUNoYW5nZWQoY29uc3QgUVNpemVGJik7CisgICAg
dm9pZCBxdWV1ZWRTZWVrVGltZW91dCgpOworICAgIHZvaWQgc2Vla1RpbWVvdXQoKTsKKyAgICB2
b2lkIHBvc2l0aW9uQ2hhbmdlZChxaW50NjQpOworICAgIHZvaWQgZHVyYXRpb25DaGFuZ2VkKHFp
bnQ2NCk7CisgICAgdm9pZCB2b2x1bWVDaGFuZ2VkKGludCk7CisgICAgdm9pZCBtdXRlZENoYW5n
ZWQoYm9vbCk7CisgICAgdm9pZCByZXBhaW50KCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCB1cGRh
dGVTdGF0ZXMoKTsKKworcHJpdmF0ZToKKyAgICBNZWRpYVBsYXllclByaXZhdGUoTWVkaWFQbGF5
ZXIqKTsKKworICAgIE1lZGlhUGxheWVyKiBtX3BsYXllcjsKKyAgICBRTWVkaWFQbGF5ZXIqIG1f
bWVkaWFQbGF5ZXI7CisgICAgUU1lZGlhUGxheWVyQ29udHJvbCogbV9tZWRpYVBsYXllckNvbnRy
b2w7CisgICAgUUdyYXBoaWNzVmlkZW9JdGVtKiBtX3ZpZGVvSXRlbTsKKyAgICBRR3JhcGhpY3NT
Y2VuZSogbV92aWRlb1NjZW5lOworCisgICAgbXV0YWJsZSBNZWRpYVBsYXllcjo6TmV0d29ya1N0
YXRlIG1fbmV0d29ya1N0YXRlOworICAgIG11dGFibGUgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUg
bV9yZWFkeVN0YXRlOworCisgICAgSW50U2l6ZSBtX2N1cnJlbnRTaXplOworICAgIGJvb2wgbV9p
c1Zpc2libGU7CisgICAgYm9vbCBtX2lzU2Vla2luZzsKKyAgICBxaW50NjQgbV9xdWV1ZWRTZWVr
OworfTsKK30KKworI2VuZGlmIC8vIE1lZGlhUGxheWVyUHJpdmF0ZVF0X2gKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3Jt
L3F0L1JlbmRlclRoZW1lUXQuY3BwCmluZGV4IDI3MWMxMWEuLjM4OWI2YTggMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkZv
bnQuaCIKICNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE1lZGlh
RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCkBAIC00Nyw2ICs0OCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyU2xpZGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKKyNpbmNsdWRlICJU
aW1lUmFuZ2VzLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVRdC5oIgogI2luY2x1ZGUgIlVz
ZXJBZ2VudFN0eWxlU2hlZXRzLmgiCiAjaW5jbHVkZSAicXdlYnBhZ2UuaCIKQEAgLTg4MiwxMCAr
ODg0LDE1IEBAIEhUTUxNZWRpYUVsZW1lbnQqIFJlbmRlclRoZW1lUXQ6OmdldE1lZGlhRWxlbWVu
dEZyb21SZW5kZXJPYmplY3QoUmVuZGVyT2JqZWN0KiBvCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PEhUTUxNZWRpYUVsZW1lbnQqPihtZWRpYU5vZGUpOwogfQogCitkb3VibGUgUmVuZGVyVGhlbWVR
dDo6bWVkaWFDb250cm9sc0Jhc2VsaW5lT3BhY2l0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIDAu
NDsKK30KKwogdm9pZCBSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhQmFja2dyb3VuZChRUGFpbnRl
ciogcGFpbnRlciwgY29uc3QgSW50UmVjdCYgcikgY29uc3QKIHsKICAgICBwYWludGVyLT5zZXRQ
ZW4oUXQ6Ok5vUGVuKTsKLSAgICBzdGF0aWMgUUNvbG9yIHRyYW5zcGFyZW50QmxhY2soMCwgMCwg
MCwgMTAwKTsKKyAgICBzdGF0aWMgUUNvbG9yIHRyYW5zcGFyZW50QmxhY2soMCwgMCwgMCwgbWVk
aWFDb250cm9sc0Jhc2VsaW5lT3BhY2l0eSgpICogMjU1KTsKICAgICBwYWludGVyLT5zZXRCcnVz
aCh0cmFuc3BhcmVudEJsYWNrKTsKICAgICBwYWludGVyLT5kcmF3Um91bmRlZFJlY3Qoci54KCks
IHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCksIDUuMCwgNS4wKTsKIH0KQEAgLTkyMSwxNCAr
OTI4LDEwIEBAIGJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYU11dGVCdXR0b24oUmVuZGVy
T2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhCiAgICAgY29uc3QgUVBvaW50RiBzcGVh
a2VyUG9seWdvbls2XSA9IHsgUVBvaW50RigyMCwgMzApLCBRUG9pbnRGKDUwLCAzMCksIFFQb2lu
dEYoODAsIDApLAogICAgICAgICAgICAgUVBvaW50Rig4MCwgMTAwKSwgUVBvaW50Rig1MCwgNzAp
LCBRUG9pbnRGKDIwLCA3MCl9OwogCi0gICAgcC5wYWludGVyLT5zZXRCcnVzaChnZXRNZWRpYUNv
bnRyb2xGb3JlZ3JvdW5kQ29sb3IobykpOworICAgIHAucGFpbnRlci0+c2V0UGVuKG1lZGlhRWxl
bWVudC0+bXV0ZWQoKSA/IFF0OjpkYXJrR3JheSA6IFF0OjpsaWdodEdyYXkpOworICAgIHAucGFp
bnRlci0+c2V0QnJ1c2gobWVkaWFFbGVtZW50LT5tdXRlZCgpID8gUXQ6OmRhcmtSZWQgOiBnZXRN
ZWRpYUNvbnRyb2xGb3JlZ3JvdW5kQ29sb3IobykpOwogICAgIHAucGFpbnRlci0+ZHJhd1BvbHln
b24oc3BlYWtlclBvbHlnb24sIDYpOwogCi0gICAgaWYgKG1lZGlhRWxlbWVudC0+bXV0ZWQoKSkg
ewotICAgICAgICBwLnBhaW50ZXItPnNldFBlbihRdDo6cmVkKTsKLSAgICAgICAgcC5wYWludGVy
LT5kcmF3TGluZSgwLCAxMDAsIDEwMCwgMCk7Ci0gICAgfQotCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCkBAIC05NzEsNiArOTc0LDg5IEBAIGJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVNl
ZWtGb3J3YXJkQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCitib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50TWVkaWFDdXJyZW50VGlt
ZShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgU3R5bGVQYWludGVyIHAodGhpcywgcGFpbnRJ
bmZvKTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IHAucGFpbnRlci0+c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCB0cnVlKTsK
KyAgICBwYWludE1lZGlhQmFja2dyb3VuZChwLnBhaW50ZXIsIHIpOworCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitTdHJpbmcgUmVuZGVyVGhlbWVRdDo6Zm9ybWF0TWVkaWFDb250cm9sc0N1cnJl
bnRUaW1lKGZsb2F0IGN1cnJlbnRUaW1lLCBmbG9hdCBkdXJhdGlvbikgY29uc3QKK3sKKyAgICBy
ZXR1cm4gZm9ybWF0TWVkaWFDb250cm9sc1RpbWUoY3VycmVudFRpbWUpICsgIiAvICIgKyBmb3Jt
YXRNZWRpYUNvbnRyb2xzVGltZShkdXJhdGlvbik7Cit9CisKK1N0cmluZyBSZW5kZXJUaGVtZVF0
Ojpmb3JtYXRNZWRpYUNvbnRyb2xzUmVtYWluaW5nVGltZShmbG9hdCBjdXJyZW50VGltZSwgZmxv
YXQgZHVyYXRpb24pIGNvbnN0Cit7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitib29sIFJl
bmRlclRoZW1lUXQ6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QgKm8s
IGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvICZwYWludEluZm8sIGNvbnN0IEludFJlY3Qg
JnIpCit7CisgICAgU3R5bGVQYWludGVyIHAodGhpcywgcGFpbnRJbmZvKTsKKyAgICBpZiAoIXAu
aXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHAucGFpbnRlci0+c2V0UmVu
ZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCB0cnVlKTsKKworICAgIHBhaW50TWVkaWFC
YWNrZ3JvdW5kKHAucGFpbnRlciwgcik7CisKKyAgICBpZiAoIW8tPmlzU2xpZGVyKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIEludFJlY3QgYiA9IHRvUmVuZGVyQm94KG8pLT5jb250
ZW50Qm94UmVjdCgpOworCisgICAgLy8gUG9zaXRpb24gdGhlIG91dGVyIHJlY3RhbmdsZQorICAg
IGludCB0b3AgPSByLnkoKSArIGIueSgpOworICAgIGludCBsZWZ0ID0gci54KCkgKyBiLngoKTsK
KyAgICBpbnQgd2lkdGggPSBiLndpZHRoKCk7CisgICAgaW50IGhlaWdodCA9IGIuaGVpZ2h0KCk7
CisKKyAgICAvLyBHZXQgdGhlIHNjYWxlIGNvbG9yIGZyb20gdGhlIHBhZ2UgY2xpZW50CisgICAg
UVBhbGV0dGUgcGFsID0gUUFwcGxpY2F0aW9uOjpwYWxldHRlKCk7CisgICAgc2V0UGFsZXR0ZUZy
b21QYWdlQ2xpZW50SWZFeGlzdHMocGFsKTsKKyAgICBjb25zdCBRQ29sb3IgaGlnaGxpZ2h0VGV4
dCA9IHBhbC5icnVzaChRUGFsZXR0ZTo6QWN0aXZlLCBRUGFsZXR0ZTo6SGlnaGxpZ2h0ZWRUZXh0
KS5jb2xvcigpOworICAgIGNvbnN0IFFDb2xvciBzY2FsZUNvbG9yKGhpZ2hsaWdodFRleHQucmVk
KCksIGhpZ2hsaWdodFRleHQuZ3JlZW4oKSwgaGlnaGxpZ2h0VGV4dC5ibHVlKCksIG1lZGlhQ29u
dHJvbHNCYXNlbGluZU9wYWNpdHkoKSAqIDI1NSk7CisKKyAgICAvLyBEcmF3IHRoZSBvdXRlciBy
ZWN0YW5nbGUKKyAgICBwLnBhaW50ZXItPnNldFBlbihRdDo6bGlnaHRHcmF5KTsKKyAgICBwLnBh
aW50ZXItPnNldEJydXNoKHNjYWxlQ29sb3IpOworICAgIHAucGFpbnRlci0+ZHJhd1JlY3QobGVm
dCwgdG9wLCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIGlmICghby0+bm9kZSgpIHx8ICFvLT5ub2Rl
KCktPmhhc1RhZ05hbWUoaW5wdXRUYWcpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBI
VE1MSW5wdXRFbGVtZW50KiBzbGlkZXIgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4o
by0+bm9kZSgpKTsKKworICAgIC8vIFBvc2l0aW9uIHRoZSBpbm5lciByZWN0YW5nbGUKKyAgICBo
ZWlnaHQgPSAoaGVpZ2h0IC0gMikgKiBzbGlkZXItPnZhbHVlQXNOdW1iZXIoKTsKKyAgICB3aWR0
aCAtPSAyOworICAgIGxlZnQgKz0gMTsKKyAgICB0b3AgKz0gKGIuaGVpZ2h0KCkgLSBoZWlnaHQp
IC0gMTsKKworICAgIC8vIERyYXcgdGhlIGlubmVyIHJlY3RhbmdsZQorICAgIHAucGFpbnRlci0+
c2V0UGVuKFF0OjpOb1Blbik7CisgICAgcC5wYWludGVyLT5zZXRCcnVzaChnZXRNZWRpYUNvbnRy
b2xGb3JlZ3JvdW5kQ29sb3IobykpOworICAgIHAucGFpbnRlci0+ZHJhd1JlY3QobGVmdCwgdG9w
LCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJU
aGVtZVF0OjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0ICpvLCBjb25z
dCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyAmcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0ICZyKQor
eworICAgIFN0eWxlUGFpbnRlciBwKHRoaXMsIHBhaW50SW5mbyk7CisgICAgaWYgKCFwLmlzVmFs
aWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBOb3RoaW5nIHRvIGRyYXcgaGVy
ZSwgdGhpcyBpcyBhbGwgZG9uZSBpbiB0aGUgdHJhY2sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
IGJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCog
bywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVj
dCYgcikKIHsKICAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBnZXRNZWRpYUVs
ZW1lbnRGcm9tUmVuZGVyT2JqZWN0KG8pOwpAQCAtOTg1LDE1ICsxMDcxLDMxIEBAIGJvb2wgUmVu
ZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCogbywgY29uc3Qg
UmVuZGVyT2JqZWN0OjpQCiAKICAgICBwYWludE1lZGlhQmFja2dyb3VuZChwLnBhaW50ZXIsIHIp
OwogCisjaWYgUVRfVkVSU0lPTiA+PSAweDA0MDcwMAorICAgIGlmIChNZWRpYVBsYXllciogcGxh
eWVyID0gbWVkaWFFbGVtZW50LT5wbGF5ZXIoKSkgeworICAgICAgICAvLyBHZXQgdGhlIGJ1ZmZl
cmVkIHBhcnRzIG9mIHRoZSBtZWRpYQorICAgICAgICBQYXNzUmVmUHRyPFRpbWVSYW5nZXM+IGJ1
ZmZlcmVkID0gcGxheWVyLT5idWZmZXJlZCgpOworICAgICAgICBpZiAoYnVmZmVyZWQtPmxlbmd0
aCgpID4gMCAmJiBwbGF5ZXItPmR1cmF0aW9uKCkgPCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0
Pjo6aW5maW5pdHkoKSkgeworICAgICAgICAgICAgLy8gU2V0IHRoZSB0cmFuc2Zvcm0gYW5kIGJy
dXNoCisgICAgICAgICAgICBXb3JsZE1hdHJpeFRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyKHAucGFp
bnRlciwgbywgcik7CisgICAgICAgICAgICBwLnBhaW50ZXItPnNldEJydXNoKGdldE1lZGlhQ29u
dHJvbEZvcmVncm91bmRDb2xvcigpKTsKKworICAgICAgICAgICAgLy8gUGFpbnQgZWFjaCBidWZm
ZXJlZCBzZWN0aW9uCisgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGV4OworICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBidWZmZXJlZC0+bGVuZ3RoKCk7IGkrKykgeworICAgICAgICAg
ICAgICAgIGZsb2F0IHN0YXJ0WCA9IChidWZmZXJlZC0+c3RhcnQoaSwgZXgpIC8gcGxheWVyLT5k
dXJhdGlvbigpKSAqIDEwMDsKKyAgICAgICAgICAgICAgICBmbG9hdCB3aWR0aCA9ICgoYnVmZmVy
ZWQtPmVuZChpLCBleCkgLyBwbGF5ZXItPmR1cmF0aW9uKCkpICogMTAwKSAtIHN0YXJ0WDsKKyAg
ICAgICAgICAgICAgICBwLnBhaW50ZXItPmRyYXdSZWN0KHN0YXJ0WCwgMzcsIHdpZHRoLCAyNik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKwogICAgIHJldHVybiBm
YWxzZTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhU2xpZGVyVGh1bWIoUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBJbnRSZWN0JiByKQogewotICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9
IGdldE1lZGlhRWxlbWVudEZyb21SZW5kZXJPYmplY3Qoby0+cGFyZW50KCkpOwotICAgIGlmICgh
bWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICBTdHlsZVBhaW50ZXIg
cCh0aGlzLCBwYWludEluZm8pOwogICAgIGlmICghcC5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVy
biB0cnVlOwpAQCAtMTAxOSw2ICsxMTIxLDEzIEBAIHZvaWQgUmVuZGVyVGhlbWVRdDo6YWRqdXN0
U2xpZGVyVGh1bWJTaXplKFJlbmRlck9iamVjdCogbykgY29uc3QKICAgICAgICAgaW50IHBhcmVu
dEhlaWdodCA9IHBhcmVudFN0eWxlLT5oZWlnaHQoKS52YWx1ZSgpOwogICAgICAgICBvLT5zdHls
ZSgpLT5zZXRXaWR0aChMZW5ndGgocGFyZW50SGVpZ2h0IC8gMywgRml4ZWQpKTsKICAgICAgICAg
by0+c3R5bGUoKS0+c2V0SGVpZ2h0KExlbmd0aChwYXJlbnRIZWlnaHQsIEZpeGVkKSk7CisgICAg
fSBlbHNlIGlmIChwYXJ0ID09IE1lZGlhVm9sdW1lU2xpZGVyVGh1bWJQYXJ0KSB7CisgICAgICAg
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IG8tPnBhcmVudCgpLT5zdHlsZSgpOworICAgICAg
ICBRX0FTU0VSVChwYXJlbnRTdHlsZSk7CisKKyAgICAgICAgaW50IHBhcmVudFdpZHRoID0gcGFy
ZW50U3R5bGUtPndpZHRoKCkudmFsdWUoKTsKKyAgICAgICAgby0+c3R5bGUoKS0+c2V0SGVpZ2h0
KExlbmd0aChwYXJlbnRXaWR0aCAvIDMsIEZpeGVkKSk7CisgICAgICAgIG8tPnN0eWxlKCktPnNl
dFdpZHRoKExlbmd0aChwYXJlbnRXaWR0aCwgRml4ZWQpKTsKICAgICB9IGVsc2UgaWYgKHBhcnQg
PT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCB8fCBwYXJ0ID09IFNsaWRlclRodW1iVmVydGlj
YWxQYXJ0KSB7CiAgICAgICAgIFFTdHlsZU9wdGlvblNsaWRlciBvcHRpb247CiAgICAgICAgIGlm
IChwYXJ0ID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmggYi9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRo
ZW1lUXQuaAppbmRleCA1Mzg1ODgxLi44YTIyZGYxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRm
b3JtL3F0L1JlbmRlclRoZW1lUXQuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRo
ZW1lUXQuaApAQCAtMTI3LDEwICsxMjcsMTUgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9v
bCBwYWludE1lZGlhU2Vla0ZvcndhcmRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVy
T2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIHBh
aW50TWVkaWFTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNs
aWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOwotCisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFDdXJyZW50VGlt
ZShSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKFJl
bmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIoUmVuZGVy
T2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
CisgICAgdmlydHVhbCBTdHJpbmcgZm9ybWF0TWVkaWFDb250cm9sc0N1cnJlbnRUaW1lKGZsb2F0
IGN1cnJlbnRUaW1lLCBmbG9hdCBkdXJhdGlvbikgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcg
Zm9ybWF0TWVkaWFDb250cm9sc1JlbWFpbmluZ1RpbWUoZmxvYXQgY3VycmVudFRpbWUsIGZsb2F0
IGR1cmF0aW9uKSBjb25zdDsKIHByaXZhdGU6CiAgICAgSFRNTE1lZGlhRWxlbWVudCogZ2V0TWVk
aWFFbGVtZW50RnJvbVJlbmRlck9iamVjdChSZW5kZXJPYmplY3QqIG8pIGNvbnN0OwogICAgIHZv
aWQgcGFpbnRNZWRpYUJhY2tncm91bmQoUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IEludFJlY3Qm
IHIpIGNvbnN0OworICAgIGRvdWJsZSBtZWRpYUNvbnRyb2xzQmFzZWxpbmVPcGFjaXR5KCkgY29u
c3Q7CiAgICAgUUNvbG9yIGdldE1lZGlhQ29udHJvbEZvcmVncm91bmRDb2xvcihSZW5kZXJPYmpl
Y3QqIG8gPSAwKSBjb25zdDsKICNlbmRpZgogICAgIHZvaWQgY29tcHV0ZVNpemVCYXNlZE9uU3R5
bGUoUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlKSBjb25zdDsK
</data>
<flag name="review"
          id="31818"
          type_id="1"
          status="-"
          setter="vestbo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49180</attachid>
            <date>2010-02-21 17:37:00 -0800</date>
            <delta_ts>2010-02-22 05:39:52 -0800</delta_ts>
            <desc>Patch - Round 10</desc>
            <filename>webkit-qtmultimedia-integration.txt</filename>
            <type>text/plain</type>
            <size>40791</size>
            <attacher name="Nick Young">nicholas.young</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NjY4NzQ4Yy4uNmVkOWFkNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3NiBAQAorMjAxMC0wMi0yMSAgTmljaG9sYXMgWW91
bmcgIDxuaWNob2xhcy55b3VuZ0Bub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0XSBTd2l0Y2hpbmcgZnJvbSBQaG9ub24gdG8gUXRN
dWx0aW1lZGlhIEJhY2tlbmQgZm9yIFF0IDQuNworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ2MzEKKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMg
cGF0Y2ggb25seSBhZmZlY3RzIG11bHRpbWVkaWEgYmFja2VuZC4KKworICAgICAgICAqIFdlYkNv
cmUucHJvOiBCdWlsZCBkZXBlbmRzIG9uIFF0IHZlcnNpb24uCisgICAgICAgICogY3NzL21lZGlh
Q29udHJvbHNRdC5jc3M6IFVwZGF0ZWQgbWVkaWEgY29udHJvbHMuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwOiBEaWZmZXJlbnQgYmFja2VuZCBpbmNsdWRlZCBk
ZXBlbmRpbmcgb24gUXQgdmVyc2lvbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9N
ZWRpYVBsYXllclByaXZhdGVRdC5jcHA6IEFkZGVkIG5ldyBRdE11bHRpbWVkaWEgQmFja2VuZC4K
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6cmVnaXN0ZXJNZWRpYUVuZ2luZSk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OmdldFN1cHBvcnRlZFR5cGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6c3VwcG9ydHNUeXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6TWVkaWFQbGF5ZXJQcml2YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6fk1lZGlhUGxheWVyUHJpdmF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6Omhhc1ZpZGVvKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6aGFzQXVkaW8pOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZTo6Y2FuY2VsTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGU6OnBsYXkpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpw
YXVzZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnBhdXNlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnNlZWspOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpzZWVraW5nKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZTo6ZHVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlOjpjdXJyZW50VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGU6OmJ1ZmZlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6
bWF4VGltZVNlZWthYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6
Ynl0ZXNMb2FkZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjp0b3Rh
bEJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0UmF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnNldFZvbHVtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnN1cHBvcnRzTXV0aW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0TXV0ZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpuZXR3b3JrU3RhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpyZWFkeVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZTo6c2V0VmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGU6Om1lZGlhU3RhdHVzQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGU6OmhhbmRsZUVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZTo6c3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZTo6bmF0aXZlU2l6ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlOjpxdWV1ZWRTZWVrVGltZW91dCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGU6OnNlZWtUaW1lb3V0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZTo6cG9zaXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZTo6ZHVyYXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZTo6dm9sdW1lQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGU6Om11dGVkQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGU6OnVwZGF0ZVN0YXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6
OnNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpuYXR1cmFs
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnBhaW50KToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6cmVwYWludCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuaDogQWRkZWQgbmV3IFF0
TXVsdGltZWRpYSBCYWNrZW5kLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
Ojppc0F2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnN1
cHBvcnRzRnVsbHNjcmVlbik6CisgICAgICAgICogcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjptZWRpYUNvbnRyb2xzQmFzZWxp
bmVPcGFjaXR5KTogTmV3IG1ldGhvZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6
OnBhaW50TWVkaWFCYWNrZ3JvdW5kKTogQmFja2dyb3VuZCBkZXBlbmRzIG9uIGJhc2VsaW5lIG9w
YWNpdHkuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhTXV0ZUJ1
dHRvbik6IENoYW5nZWQgc3R5bGluZy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6
OnBhaW50TWVkaWFDdXJyZW50VGltZSk6IEFkZGVkIGN1cnJlbnQgdGltZSBkaXNwbGF5LgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6Zm9ybWF0TWVkaWFDb250cm9sc0N1cnJlbnRU
aW1lKTogQWRkZWQgdGltZSBmb3JtYXR0aW5nLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVRdDo6Zm9ybWF0TWVkaWFDb250cm9sc1JlbWFpbmluZ1RpbWUpOiBBZGRlZCB0aW1lIGZvcm1h
dHRpbmcuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhVm9sdW1l
U2xpZGVyVHJhY2spOiBWb2x1bWUgc2xpZGVyIGFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRodW1iKTogVm9sdW1lIHNsaWRlciBh
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBhaW50TWVkaWFTbGlkZXJU
cmFjayk6IFVwZGF0ZWQgZm9yIFF0TXVsdGltZWRpYS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lUXQ6OnBhaW50TWVkaWFTbGlkZXJUaHVtYik6IERyb3BwZWQgYW4gdW5uZWNlc3Nhcnkg
Y2hlY2suCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjphZGp1c3RTbGlkZXJUaHVt
YlNpemUpOiBIYW5kbGUgYSBtaXNzaW5nIGNhc2UuCisgICAgICAgICogcGxhdGZvcm0vcXQvUmVu
ZGVyVGhlbWVRdC5oOiBSZWltcGxlbWVudGVkIGEgZmV3IG1vcmUgbWV0aG9kcy4KKwogMjAxMC0w
Mi0yMSAgSnVsaWVuIENoYWZmcmFpeCAgPGpjaGFmZnJhaXhAd2Via2l0Lm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5w
cm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IDRjYjQ3OTQuLmIxNzI4ODkgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtMTMx
LDExICsxMzEsMjEgQEAgbWFtZW81fHN5bWJpYW58ZW1iZWRkZWQgewogCiBpbmNsdWRlKCQkUFdE
Ly4uL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnByaSkKIAotIyBEaXNhYmxlIEhUTUw1
IG1lZGlhIGNvbXBpbGF0aW9uIGlmIHBob25vbiBpcyB1bmF2YWlsYWJsZQotIWNvbnRhaW5zKERF
RklORVMsIEVOQUJMRV9WSURFTz0xKSB7Ci0gICAgIWNvbnRhaW5zKFFUX0NPTkZJRywgcGhvbm9u
KSB7Ci0gICAgICAgIERFRklORVMgLT0gRU5BQkxFX1ZJREVPPTEKLSAgICAgICAgREVGSU5FUyAr
PSBFTkFCTEVfVklERU89MAorCisjIEhUTUw1IE1lZGlhIFN1cHBvcnQKKyMgV2UgcmVxdWlyZSBw
aG9ub24gZm9yIHZlcnNpb25zIG9mIFF0IDwgNC43CisjIFdlIHJlcXVpcmUgUXRNdWx0aW1lZGlh
IGZvciB2ZXJzaW9ucyBvZiBRdCA+PSA0LjcKKyFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfVklE
RU89LikgeworICAgIERFRklORVMgLT0gRU5BQkxFX1ZJREVPPTEKKyAgICBERUZJTkVTICs9IEVO
QUJMRV9WSURFTz0wCisKKyAgICBsZXNzVGhhbihRVF9NSU5PUl9WRVJTSU9OLCA3KTpjb250YWlu
cyhRVF9DT05GSUcsIHBob25vbikgeworICAgICAgICBERUZJTkVTIC09IEVOQUJMRV9WSURFTz0w
CisgICAgICAgIERFRklORVMgKz0gRU5BQkxFX1ZJREVPPTEKKyAgICB9CisgICAgIWxlc3NUaGFu
KFFUX01JTk9SX1ZFUlNJT04sIDcpOmNvbnRhaW5zKFFUX0NPTkZJRywgbXVsdGltZWRpYSkgewor
ICAgICAgICBERUZJTkVTIC09IEVOQUJMRV9WSURFTz0wCisgICAgICAgIERFRklORVMgKz0gRU5B
QkxFX1ZJREVPPTEKICAgICB9CiB9CiAKQEAgLTIzMDUsMjEgKzIzMTUsMjkgQEAgY29udGFpbnMo
REVGSU5FUywgRU5BQkxFX1ZJREVPPTEpIHsKICAgICAgICAgcmVuZGVyaW5nL1JlbmRlck1lZGlh
LmNwcCBcCiAgICAgICAgIGJpbmRpbmdzL2pzL0pTQXVkaW9Db25zdHJ1Y3Rvci5jcHAKIAotICAg
ICAgICBIRUFERVJTICs9IFwKLSAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlh
UGxheWVyUHJpdmF0ZVBob25vbi5oCisgICAgICAgICMgUXRNdWx0aW1lZGlhIHNpbmNlIDQuNwor
ICAgICAgICBncmVhdGVyVGhhbihRVF9NSU5PUl9WRVJTSU9OLCA2KSB7CisgICAgICAgICAgICBI
RUFERVJTICs9IHBsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmgKKyAg
ICAgICAgICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2
YXRlUXQuY3BwCiAKLSAgICAgICAgU09VUkNFUyArPSBcCi0gICAgICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVQaG9ub24uY3BwCi0KLSAgICAgICAgIyBBZGQg
cGhvbm9uIG1hbnVhbGx5IHRvIHByZXZlbnQgaXQgZnJvbSBjb21pbmcgZmlyc3QgaW4KLSAgICAg
ICAgIyB0aGUgaW5jbHVkZSBwYXRocywgYXMgUGhvbm9uJ3MgcGF0aC5oIGNvbmZsaWN0cyB3aXRo
Ci0gICAgICAgICMgV2ViQ29yZSdzIFBhdGguaCBvbiBjYXNlLWluc2Vuc2l0aXZlIGZpbGVzeXN0
ZW1zLgotICAgICAgICBxdEFkZExpYnJhcnkocGhvbm9uKQotICAgICAgICBJTkNMVURFUEFUSCAt
PSAkJFFNQUtFX0lOQ0RJUl9RVC9waG9ub24KLSAgICAgICAgSU5DTFVERVBBVEggKz0gJCRRTUFL
RV9JTkNESVJfUVQvcGhvbm9uCi0gICAgICAgIG1hYyB7Ci0gICAgICAgICAgICBJTkNMVURFUEFU
SCAtPSAkJFFNQUtFX0xJQkRJUl9RVC9waG9ub24uZnJhbWV3b3JrL0hlYWRlcnMKLSAgICAgICAg
ICAgIElOQ0xVREVQQVRIICs9ICQkUU1BS0VfTElCRElSX1FUL3Bob25vbi5mcmFtZXdvcmsvSGVh
ZGVycworICAgICAgICAgICAgUVQgKz0gbXVsdGltZWRpYQorICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgSEVBREVSUyArPSBcCisgICAgICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uLmgKKworICAgICAgICAgICAgU09VUkNFUyArPSBc
CisgICAgICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRl
UGhvbm9uLmNwcAorCisgICAgICAgICAgICAjIEFkZCBwaG9ub24gbWFudWFsbHkgdG8gcHJldmVu
dCBpdCBmcm9tIGNvbWluZyBmaXJzdCBpbgorICAgICAgICAgICAgIyB0aGUgaW5jbHVkZSBwYXRo
cywgYXMgUGhvbm9uJ3MgcGF0aC5oIGNvbmZsaWN0cyB3aXRoCisgICAgICAgICAgICAjIFdlYkNv
cmUncyBQYXRoLmggb24gY2FzZS1pbnNlbnNpdGl2ZSBmaWxlc3lzdGVtcy4KKyAgICAgICAgICAg
IHF0QWRkTGlicmFyeShwaG9ub24pCisgICAgICAgICAgICBJTkNMVURFUEFUSCAtPSAkJFFNQUtF
X0lOQ0RJUl9RVC9waG9ub24KKyAgICAgICAgICAgIElOQ0xVREVQQVRIICs9ICQkUU1BS0VfSU5D
RElSX1FUL3Bob25vbgorICAgICAgICAgICAgbWFjIHsKKyAgICAgICAgICAgICAgICBJTkNMVURF
UEFUSCAtPSAkJFFNQUtFX0xJQkRJUl9RVC9waG9ub24uZnJhbWV3b3JrL0hlYWRlcnMKKyAgICAg
ICAgICAgICAgICBJTkNMVURFUEFUSCArPSAkJFFNQUtFX0xJQkRJUl9RVC9waG9ub24uZnJhbWV3
b3JrL0hlYWRlcnMKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2Nzcy9tZWRpYUNvbnRyb2xzUXQuY3NzIGIvV2ViQ29yZS9jc3MvbWVkaWFDb250cm9s
c1F0LmNzcwppbmRleCBhOWMzNjA5Li5kNDlmZTk2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2Nzcy9t
ZWRpYUNvbnRyb2xzUXQuY3NzCisrKyBiL1dlYkNvcmUvY3NzL21lZGlhQ29udHJvbHNRdC5jc3MK
QEAgLTUxLDggKzUxLDYgQEAgdmlkZW86LXdlYmtpdC1mdWxsLXBhZ2UtbWVkaWE6Oi13ZWJraXQt
bWVkaWEtY29udHJvbHMtcGFuZWwgewogfQogCiBhdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9s
cy1tdXRlLWJ1dHRvbiwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtbXV0ZS1idXR0b24g
ewotICAgIGxlZnQ6IGF1dG87Ci0gICAgcmlnaHQ6IDVweDsKICAgICB3aWR0aDogMTJweDsKICAg
ICBoZWlnaHQ6IDEycHg7CiAgICAgcGFkZGluZzogNnB4OwpAQCAtNjAsNyArNTgsNiBAQCBhdWRp
bzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1tdXRlLWJ1dHRvbiwgdmlkZW86Oi13ZWJraXQtbWVk
aWEtY29udHJvbHMtbXV0ZS1idQogfQogCiBhdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1w
bGF5LWJ1dHRvbiwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtcGxheS1idXR0b24gewot
ICAgIGxlZnQ6IDVweDsKICAgICB3aWR0aDogOXB4OwogICAgIGhlaWdodDogMTJweDsKICAgICBw
YWRkaW5nOiA2cHggMTJweCA2cHggMTFweDsKQEAgLTcyLDcgKzY5LDIxIEBAIGF1ZGlvOjotd2Vi
a2l0LW1lZGlhLWNvbnRyb2xzLXRpbWVsaW5lLWNvbnRhaW5lciwgdmlkZW86Oi13ZWJraXQtbWVk
aWEtY29udHJvbHMtCiB9CiAKIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWN1cnJlbnQt
dGltZS1kaXNwbGF5LCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1jdXJyZW50LXRpbWUt
ZGlzcGxheSB7Ci0gICAgZGlzcGxheTogbm9uZTsKKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG1l
ZGlhLWN1cnJlbnQtdGltZS1kaXNwbGF5OworICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7
CisgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICAgIGhlaWdodDogMTJweDsKKyAgICBwYWRk
aW5nOiA2cHg7CisgICAgbWFyZ2luOiA1cHggM3B4OworCisgICAgb3ZlcmZsb3c6IGhpZGRlbjsK
KyAgICBjdXJzb3I6IGRlZmF1bHQ7CisKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgZm9u
dC1zaXplOiAxMHB4OworICAgIGZvbnQtZmFtaWx5OiBWZXJkYW5hOworICAgIGZvbnQtd2VpZ2h0
OiBib2xkOworICAgIGNvbG9yOiB3aGl0ZTsKIH0KIAogYXVkaW86Oi13ZWJraXQtbWVkaWEtY29u
dHJvbHMtdGltZS1yZW1haW5pbmctZGlzcGxheSwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJv
bHMtdGltZS1yZW1haW5pbmctZGlzcGxheSB7CkBAIC04MCw1MSArOTEsMzggQEAgYXVkaW86Oi13
ZWJraXQtbWVkaWEtY29udHJvbHMtdGltZS1yZW1haW5pbmctZGlzcGxheSwgdmlkZW86Oi13ZWJr
aXQtbWVkaWEtY29udHIKIH0KIAogYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdGltZWxp
bmUsIHZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXRpbWVsaW5lIHsKLSAgICBsZWZ0OiA0
MnB4OwotICAgIHJpZ2h0OiAzNHB4OwogICAgIGhlaWdodDogMTJweDsKICAgICBwYWRkaW5nOiA2
cHggOHB4OwotICAgIG1hcmdpbjogNXB4IDBweDsKKyAgICBtYXJnaW46IDVweCAzcHg7CiB9CiAK
IGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXZvbHVtZS1zbGlkZXItY29udGFpbmVyLCB2
aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy12b2x1bWUtc2xpZGVyLWNvbnRhaW5lciB7Ci0g
ICAgZGlzcGxheTogbm9uZTsKKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG1lZGlhLXZvbHVtZS1z
bGlkZXItY29udGFpbmVyOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICBoZWlnaHQ6IDEw
M3B4OworICAgIHdpZHRoOiAyNHB4OwogfQogCiBhdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9s
cy12b2x1bWUtc2xpZGVyLCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy12b2x1bWUtc2xp
ZGVyIHsKLSAgICBkaXNwbGF5OiBub25lOworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbWVkaWEt
dm9sdW1lLXNsaWRlcjsKKyAgICBkaXNwbGF5OiBpbmxpbmU7CisgICAgcG9zaXRpb246IGFic29s
dXRlOworCisgICAgd2lkdGg6IDEycHg7CisgICAgcGFkZGluZzogNnB4OworICAgIGhlaWdodDog
ODhweDsKKyAgICBtYXJnaW46IDAgMCAzcHggMDsKIH0KIAogYXVkaW86Oi13ZWJraXQtbWVkaWEt
Y29udHJvbHMtc2Vlay1iYWNrLWJ1dHRvbiwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMt
c2Vlay1iYWNrLWJ1dHRvbiB7Ci0gICAgLyogU2luY2UgTWVkaWFDb250cm9sRWxlbWVudHMgYXJl
IGFsd2F5cyBjcmVhdGVkIHdpdGggYSByZW5kZXJlciB3ZSBoYXZlIHRvIGhpZGUKLSAgICAgICB0
aGUgY29udHJvbHMgd2UgZG9uJ3QgdXNlLCBzbyB0aGV5IGRvbid0IG1lc3MgdXAgYWN0aXZhdGlv
biBhbmQgZXZlbnQgaGFuZGxpbmcgKi8KLSAgICBsZWZ0OiAwcHg7Ci0gICAgdG9wOiAwcHg7Ci0g
ICAgd2lkdGg6IDBweDsKLSAgICBoZWlnaHQ6IDBweDsKLQogICAgIGRpc3BsYXk6IG5vbmU7CiB9
CiAKIGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXNlZWstZm9yd2FyZC1idXR0b24sIHZp
ZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXNlZWstZm9yd2FyZC1idXR0b24gewotICAgIC8q
IFNpbmNlIE1lZGlhQ29udHJvbEVsZW1lbnRzIGFyZSBhbHdheXMgY3JlYXRlZCB3aXRoIGEgcmVu
ZGVyZXIgd2UgaGF2ZSB0byBoaWRlCi0gICAgICAgdGhlIGNvbnRyb2xzIHdlIGRvbid0IHVzZSwg
c28gdGhleSBkb24ndCBtZXNzIHVwIGFjdGl2YXRpb24gYW5kIGV2ZW50IGhhbmRsaW5nICovCi0g
ICAgbGVmdDogMHB4OwotICAgIHRvcDogMHB4OwotICAgIHdpZHRoOiAwcHg7Ci0gICAgaGVpZ2h0
OiAwcHg7Ci0KICAgICBkaXNwbGF5OiBub25lOwogfQogCiBhdWRpbzo6LXdlYmtpdC1tZWRpYS1j
b250cm9scy1mdWxsc2NyZWVuLWJ1dHRvbiwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMt
ZnVsbHNjcmVlbi1idXR0b24gewotICAgIC8qIFNpbmNlIE1lZGlhQ29udHJvbEVsZW1lbnRzIGFy
ZSBhbHdheXMgY3JlYXRlZCB3aXRoIGEgcmVuZGVyZXIgd2UgaGF2ZSB0byBoaWRlCi0gICAgICAg
dGhlIGNvbnRyb2xzIHdlIGRvbid0IHVzZSwgc28gdGhleSBkb24ndCBtZXNzIHVwIGFjdGl2YXRp
b24gYW5kIGV2ZW50IGhhbmRsaW5nICovCi0gICAgbGVmdDogMHB4OwotICAgIHRvcDogMHB4Owot
ICAgIHdpZHRoOiAwcHg7Ci0gICAgaGVpZ2h0OiAwcHg7Ci0KICAgICBkaXNwbGF5OiBub25lOwog
fQogCkBAIC0xMzYsMyArMTM0LDcgQEAgYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtcmV0
dXJuLXRvLXJlYWx0aW1lLWJ1dHRvbiwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY28KICAgICBkaXNw
bGF5OiBub25lOwogfQogCithdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10b2dnbGUtY2xv
c2VkLWNhcHRpb25zLWJ1dHRvbiwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdG9nZ2xl
LWNsb3NlZC1jYXB0aW9ucy1idXR0b24geworICAgIGRpc3BsYXk6IG5vbmU7Cit9CisKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAKaW5kZXggOWY4ZTkyMy4uZmY5MzAz
YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAKQEAgLTM3LDYg
KzM3LDEwIEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJUaW1lUmFuZ2VzLmgi
CiAKKyNpZiBQTEFURk9STShRVCkKKyNpbmNsdWRlIDxRdEdsb2JhbD4KKyNlbmRpZgorCiAjaWYg
UExBVEZPUk0oTUFDKQogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0LmgiCiAjZWxp
ZiBPUyhXSU5DRSkgJiYgIVBMQVRGT1JNKFFUKQpAQCAtNDYsNyArNTAsMTEgQEAKICNlbGlmIFBM
QVRGT1JNKEdUSykKICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaCIKICNl
bGlmIFBMQVRGT1JNKFFUKQorI2lmIFFUX1ZFUlNJT04gPCAweDA0MDcwMAogI2luY2x1ZGUgIk1l
ZGlhUGxheWVyUHJpdmF0ZVBob25vbi5oIgorI2Vsc2UKKyNpbmNsdWRlICJNZWRpYVBsYXllclBy
aXZhdGVRdC5oIgorI2VuZGlmCiAjZWxpZiBQTEFURk9STShDSFJPTUlVTSkKICNpbmNsdWRlICJN
ZWRpYVBsYXllclByaXZhdGVDaHJvbWl1bS5oIgogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNzgxNDQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmNwcApAQCAtMCww
ICsxLDUzOSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZVF0LmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisj
aW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnRRdC5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQu
aCIKKyNpbmNsdWRlICJIVE1MVmlkZW9FbGVtZW50LmgiCisjaW5jbHVkZSAiVGltZVJhbmdlcy5o
IgorI2luY2x1ZGUgIldpZGdldC5oIgorI2luY2x1ZGUgInF3ZWJmcmFtZS5oIgorI2luY2x1ZGUg
InF3ZWJwYWdlLmgiCisKKyNpbmNsdWRlIDxRR3JhcGhpY3NTY2VuZT4KKyNpbmNsdWRlIDxRR3Jh
cGhpY3NWaWRlb0l0ZW0+CisjaW5jbHVkZSA8UU1lZGlhUGxheWVyQ29udHJvbD4KKyNpbmNsdWRl
IDxRTWVkaWFTZXJ2aWNlPgorI2luY2x1ZGUgPFFOZXR3b3JrQWNjZXNzTWFuYWdlcj4KKyNpbmNs
dWRlIDxRTmV0d29ya0Nvb2tpZUphcj4KKyNpbmNsdWRlIDxRTmV0d29ya1JlcXVlc3Q+CisjaW5j
bHVkZSA8UVBhaW50ZXI+CisjaW5jbHVkZSA8UVBvaW50PgorI2luY2x1ZGUgPFFSZWN0PgorI2lu
Y2x1ZGUgPFFUaW1lPgorI2luY2x1ZGUgPFFUaW1lcj4KKyNpbmNsdWRlIDxRVXJsPgorI2luY2x1
ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorCit1c2luZyBuYW1lc3BhY2Ug
V1RGOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK01lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFj
ZSogTWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVhdGUoTWVkaWFQbGF5ZXIqIHBsYXllcikKK3sKKyAg
ICByZXR1cm4gbmV3IE1lZGlhUGxheWVyUHJpdmF0ZShwbGF5ZXIpOworfQorCit2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZTo6cmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJlZ2lzdHJhciBy
ZWdpc3RyYXIpCit7CisgICAgcmVnaXN0cmFyKGNyZWF0ZSwgZ2V0U3VwcG9ydGVkVHlwZXMsIHN1
cHBvcnRzVHlwZSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpnZXRTdXBwb3J0ZWRU
eXBlcyhIYXNoU2V0PFN0cmluZz4gJnN1cHBvcnRlZCkKK3sKKyAgICBRU3RyaW5nTGlzdCB0eXBl
cyA9IFFNZWRpYVBsYXllcjo6c3VwcG9ydGVkTWltZVR5cGVzKCk7CisKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IHR5cGVzLnNpemUoKTsgaSsrKQorICAgICAgICBzdXBwb3J0ZWQuYWRkKHR5cGVz
LmF0KGkpKTsKK30KKworTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZh
dGU6OnN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmIG1pbWUsIGNvbnN0IFN0cmluZyYgY29kZWMp
Cit7CisgICAgaWYgKFFNZWRpYVBsYXllcjo6aGFzU3VwcG9ydChtaW1lLCBRU3RyaW5nTGlzdChj
b2RlYykpID49IFF0TXVsdGltZWRpYTo6UHJvYmFibHlTdXBwb3J0ZWQpCisgICAgICAgIHJldHVy
biBNZWRpYVBsYXllcjo6SXNTdXBwb3J0ZWQ7CisKKyAgICByZXR1cm4gTWVkaWFQbGF5ZXI6Ok1h
eUJlU3VwcG9ydGVkOworfQorCitNZWRpYVBsYXllclByaXZhdGU6Ok1lZGlhUGxheWVyUHJpdmF0
ZShNZWRpYVBsYXllciogcGxheWVyKQorICAgIDogbV9wbGF5ZXIocGxheWVyKQorICAgICwgbV9t
ZWRpYVBsYXllcihuZXcgUU1lZGlhUGxheWVyKQorICAgICwgbV92aWRlb0l0ZW0obmV3IFFHcmFw
aGljc1ZpZGVvSXRlbSkKKyAgICAsIG1fdmlkZW9TY2VuZShuZXcgUUdyYXBoaWNzU2NlbmUpCisg
ICAgLCBtX25ldHdvcmtTdGF0ZShNZWRpYVBsYXllcjo6RW1wdHkpCisgICAgLCBtX3JlYWR5U3Rh
dGUoTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nKQorICAgICwgbV9pc1Zpc2libGUoZmFsc2UpCisg
ICAgLCBtX2lzU2Vla2luZyhmYWxzZSkKKyAgICAsIG1fcXVldWVkU2VlaygtMSkKK3sKKyAgICBt
X3ZpZGVvSXRlbS0+c2V0TWVkaWFPYmplY3QobV9tZWRpYVBsYXllcik7CisgICAgbV92aWRlb1Nj
ZW5lLT5hZGRJdGVtKG1fdmlkZW9JdGVtKTsKKworICAgIC8vIFNpZ25hbCBIYW5kbGVycworICAg
IGNvbm5lY3QobV9tZWRpYVBsYXllciwgU0lHTkFMKG1lZGlhU3RhdHVzQ2hhbmdlZChRTWVkaWFQ
bGF5ZXI6Ok1lZGlhU3RhdHVzKSksCisgICAgICAgICAgICB0aGlzLCBTTE9UKG1lZGlhU3RhdHVz
Q2hhbmdlZChRTWVkaWFQbGF5ZXI6Ok1lZGlhU3RhdHVzKSkpOworICAgIGNvbm5lY3QobV9tZWRp
YVBsYXllciwgU0lHTkFMKHN0YXRlQ2hhbmdlZChRTWVkaWFQbGF5ZXI6OlN0YXRlKSksCisgICAg
ICAgICAgICB0aGlzLCBTTE9UKHN0YXRlQ2hhbmdlZChRTWVkaWFQbGF5ZXI6OlN0YXRlKSkpOwor
ICAgIGNvbm5lY3QobV9tZWRpYVBsYXllciwgU0lHTkFMKGVycm9yKFFNZWRpYVBsYXllcjo6RXJy
b3IpKSwKKyAgICAgICAgICAgIHRoaXMsIFNMT1QoaGFuZGxlRXJyb3IoUU1lZGlhUGxheWVyOjpF
cnJvcikpKTsKKyAgICBjb25uZWN0KG1fbWVkaWFQbGF5ZXIsIFNJR05BTChkdXJhdGlvbkNoYW5n
ZWQocWludDY0KSksCisgICAgICAgICAgICB0aGlzLCBTTE9UKGR1cmF0aW9uQ2hhbmdlZChxaW50
NjQpKSk7CisgICAgY29ubmVjdChtX21lZGlhUGxheWVyLCBTSUdOQUwocG9zaXRpb25DaGFuZ2Vk
KHFpbnQ2NCkpLAorICAgICAgICAgICAgdGhpcywgU0xPVChwb3NpdGlvbkNoYW5nZWQocWludDY0
KSkpOworICAgIGNvbm5lY3QobV9tZWRpYVBsYXllciwgU0lHTkFMKHZvbHVtZUNoYW5nZWQoaW50
KSksCisgICAgICAgICAgICB0aGlzLCBTTE9UKHZvbHVtZUNoYW5nZWQoaW50KSkpOworICAgIGNv
bm5lY3QobV9tZWRpYVBsYXllciwgU0lHTkFMKG11dGVkQ2hhbmdlZChib29sKSksCisgICAgICAg
ICAgICB0aGlzLCBTTE9UKG11dGVkQ2hhbmdlZChib29sKSkpOworICAgIGNvbm5lY3QobV92aWRl
b1NjZW5lLCBTSUdOQUwoY2hhbmdlZChRTGlzdDxRUmVjdEY+KSksCisgICAgICAgICAgICB0aGlz
LCBTTE9UKHJlcGFpbnQoKSkpOworICAgIGNvbm5lY3QobV92aWRlb0l0ZW0sIFNJR05BTChuYXRp
dmVTaXplQ2hhbmdlZChRU2l6ZUYpKSwKKyAgICAgICAgICAgdGhpcywgU0xPVChuYXRpdmVTaXpl
Q2hhbmdlZChRU2l6ZUYpKSk7CisKKyAgICAvLyBHcmFiIHRoZSBwbGF5ZXIgY29udHJvbAorICAg
IFFNZWRpYVNlcnZpY2UqIHNlcnZpY2UgPSBtX21lZGlhUGxheWVyLT5zZXJ2aWNlKCk7CisgICAg
aWYgKHNlcnZpY2UpIHsKKyAgICAgICAgbV9tZWRpYVBsYXllckNvbnRyb2wgPSBxb2JqZWN0X2Nh
c3Q8UU1lZGlhUGxheWVyQ29udHJvbCAqPigKKyAgICAgICAgICAgICAgICBzZXJ2aWNlLT5jb250
cm9sKFFNZWRpYVBsYXllckNvbnRyb2xfaWlkKSk7CisgICAgfQorfQorCitNZWRpYVBsYXllclBy
aXZhdGU6On5NZWRpYVBsYXllclByaXZhdGUoKQoreworICAgIGRlbGV0ZSBtX21lZGlhUGxheWVy
OworICAgIGRlbGV0ZSBtX3ZpZGVvU2NlbmU7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRl
OjpoYXNWaWRlbygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbWVkaWFQbGF5ZXItPmlzVmlkZW9B
dmFpbGFibGUoKTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGU6Omhhc0F1ZGlvKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6Omxv
YWQoY29uc3QgU3RyaW5nJiB1cmwpCit7CisgICAgLy8gV2UgYXJlIG5vdyBsb2FkaW5nCisgICAg
aWYgKG1fbmV0d29ya1N0YXRlICE9IE1lZGlhUGxheWVyOjpMb2FkaW5nKSB7CisgICAgICAgIG1f
bmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRpbmc7CisgICAgICAgIG1fcGxheWVyLT5u
ZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CisgICAgfQorCisgICAgLy8gQW5kIHdlIGRvbid0IGhhdmUg
YW55IGRhdGEgeWV0CisgICAgaWYgKG1fcmVhZHlTdGF0ZSAhPSBNZWRpYVBsYXllcjo6SGF2ZU5v
dGhpbmcpIHsKKyAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5n
OworICAgICAgICBtX3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKKyAgICB9CisKKyAgICBj
b25zdCBRVXJsIHJVcmwgPSBRVXJsKFFTdHJpbmcodXJsKSk7CisgICAgY29uc3QgUVN0cmluZyBz
Y2hlbWUgPSByVXJsLnNjaGVtZSgpLnRvTG93ZXIoKTsKKworICAgIC8vIEdyYWIgdGhlIGNsaWVu
dCBtZWRpYSBlbGVtZW50CisgICAgSFRNTE1lZGlhRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19j
YXN0PEhUTUxNZWRpYUVsZW1lbnQqPihtX3BsYXllci0+bWVkaWFQbGF5ZXJDbGllbnQoKSk7CisK
KyAgICAvLyBDb25zdHJ1Y3QgdGhlIG1lZGlhIGNvbnRlbnQgd2l0aCBhIG5ldHdvcmsgcmVxdWVz
dCBpZiB0aGUgcmVzb3VyY2UgaXMgaHR0cFtzXQorICAgIGlmIChzY2hlbWUgPT0gImh0dHAiIHx8
IHNjaGVtZSA9PSAiaHR0cHMiKSB7CisgICAgICAgIFFOZXR3b3JrUmVxdWVzdCByZXF1ZXN0ID0g
UU5ldHdvcmtSZXF1ZXN0KHJVcmwpOworCisgICAgICAgIC8vIEdyYWIgdGhlIGN1cnJlbnQgZG9j
dW1lbnQKKyAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZWxlbWVudC0+ZG9jdW1lbnQoKTsK
KyAgICAgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgICAgIGRvY3VtZW50ID0gZWxlbWVudC0+
b3duZXJEb2N1bWVudCgpOworCisgICAgICAgIC8vIEdyYWIgdGhlIGZyYW1lIGFuZCBuZXR3b3Jr
IG1hbmFnZXIKKyAgICAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQgPyBkb2N1bWVudC0+ZnJh
bWUoKSA6IDA7CisgICAgICAgIEZyYW1lTG9hZGVyQ2xpZW50UXQqIGZyYW1lTG9hZGVyID0gIGZy
YW1lID8gc3RhdGljX2Nhc3Q8RnJhbWVMb2FkZXJDbGllbnRRdCo+KGZyYW1lLT5sb2FkZXIoKS0+
Y2xpZW50KCkpIDogMDsKKyAgICAgICAgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyKiBtYW5hZ2VyID0g
ZnJhbWVMb2FkZXIgPyBmcmFtZUxvYWRlci0+d2ViRnJhbWUoKS0+cGFnZSgpLT5uZXR3b3JrQWNj
ZXNzTWFuYWdlcigpIDogMDsKKworICAgICAgICBpZiAoZG9jdW1lbnQgJiYgbWFuYWdlcikgewor
ICAgICAgICAgICAgLy8gU2V0IHRoZSBjb29raWVzCisgICAgICAgICAgICBRTmV0d29ya0Nvb2tp
ZUphciogamFyID0gbWFuYWdlci0+Y29va2llSmFyKCk7CisgICAgICAgICAgICBRTGlzdDxRTmV0
d29ya0Nvb2tpZT4gY29va2llcyA9IGphci0+Y29va2llc0ZvclVybChyVXJsKTsKKworICAgICAg
ICAgICAgLy8gRG9uJ3Qgc2V0IHRoZSBoZWFkZXIgaWYgdGhlcmUgYXJlIG5vIGNvb2tpZXMuCisg
ICAgICAgICAgICAvLyBUaGlzIHByZXZlbnRzIGEgd2FybmluZyBmcm9tIGJlaW5nIGVtaXR0ZWQu
CisgICAgICAgICAgICBpZiAoIWNvb2tpZXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHJl
cXVlc3Quc2V0SGVhZGVyKFFOZXR3b3JrUmVxdWVzdDo6Q29va2llSGVhZGVyLCBxVmFyaWFudEZy
b21WYWx1ZShjb29raWVzKSk7CisKKyAgICAgICAgICAgIC8vIFNldCB0aGUgcmVmZmVyZXIsIGJ1
dCBub3Qgd2hlbiByZXF1ZXN0aW5nIGluc2VjdXJlIGNvbnRlbnQgZnJvbSBhIHNlY3VyZSBwYWdl
CisgICAgICAgICAgICBRVXJsIGRvY3VtZW50VXJsID0gUVVybChRU3RyaW5nKGRvY3VtZW50LT5k
b2N1bWVudFVSSSgpKSk7CisgICAgICAgICAgICBpZiAoZG9jdW1lbnRVcmwuc2NoZW1lKCkudG9M
b3dlcigpID09ICJodHRwIiB8fCBzY2hlbWUgPT0gImh0dHBzIikKKyAgICAgICAgICAgICAgICBy
ZXF1ZXN0LnNldFJhd0hlYWRlcigiUmVmZXJlciIsIGRvY3VtZW50VXJsLnRvRW5jb2RlZCgpKTsK
KworICAgICAgICAgICAgLy8gU2V0IHRoZSB1c2VyIGFnZW50CisgICAgICAgICAgICByZXF1ZXN0
LnNldFJhd0hlYWRlcigiVXNlci1BZ2VudCIsIGZyYW1lTG9hZGVyLT51c2VyQWdlbnQoclVybCku
dXRmOCgpLmRhdGEoKSk7CisgICAgICAgIH0KKworICAgICAgICBtX21lZGlhUGxheWVyLT5zZXRN
ZWRpYShRTWVkaWFDb250ZW50KHJlcXVlc3QpKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBP
dGhlcndpc2UsIGp1c3QgdXNlIHRoZSBVUkwKKyAgICAgICAgbV9tZWRpYVBsYXllci0+c2V0TWVk
aWEoUU1lZGlhQ29udGVudChyVXJsKSk7CisgICAgfQorCisgICAgLy8gU2V0IHRoZSBjdXJyZW50
IHZvbHVtZSBhbmQgbXV0ZSBzdGF0dXMKKyAgICAvLyBXZSBnZXQgdGhlc2UgZnJvbSB0aGUgZWxl
bWVudCwgcmF0aGVyIHRoYW4gdGhlIHBsYXllciwgaW4gY2FzZSB3ZSBoYXZlCisgICAgLy8gdHJh
bnNpdGlvbmVkIGZyb20gYSBtZWRpYSBlbmdpbmUgd2hpY2ggZG9lc24ndCBzdXBwb3J0IG11dGlu
ZywgdG8gYSBtZWRpYQorICAgIC8vIGVuZ2luZSB3aGljaCBkb2VzLgorICAgIG1fbWVkaWFQbGF5
ZXItPnNldE11dGVkKGVsZW1lbnQtPm11dGVkKCkpOworICAgIG1fbWVkaWFQbGF5ZXItPnNldFZv
bHVtZShzdGF0aWNfY2FzdDxpbnQ+KGVsZW1lbnQtPnZvbHVtZSgpICogMTAwLjApKTsKK30KKwor
dm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmNhbmNlbExvYWQoKQoreworICAgIG1fbWVkaWFQbGF5
ZXItPnNldE1lZGlhKFFNZWRpYUNvbnRlbnQoKSk7CisgICAgdXBkYXRlU3RhdGVzKCk7Cit9CisK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpwbGF5KCkKK3sKKyAgICBpZiAobV9tZWRpYVBsYXll
ci0+c3RhdGUoKSAhPSBRTWVkaWFQbGF5ZXI6OlBsYXlpbmdTdGF0ZSkKKyAgICAgICAgbV9tZWRp
YVBsYXllci0+cGxheSgpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGF1c2UoKQor
eworICAgIGlmIChtX21lZGlhUGxheWVyLT5zdGF0ZSgpID09IFFNZWRpYVBsYXllcjo6UGxheWlu
Z1N0YXRlKQorICAgICAgICBtX21lZGlhUGxheWVyLT5wYXVzZSgpOworfQorCitib29sIE1lZGlh
UGxheWVyUHJpdmF0ZTo6cGF1c2VkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1fbWVkaWFQbGF5
ZXItPnN0YXRlKCkgIT0gUU1lZGlhUGxheWVyOjpQbGF5aW5nU3RhdGUpOworfQorCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZTo6c2VlayhmbG9hdCBwb3NpdGlvbikKK3sKKyAgICBpZiAoIW1fbWVk
aWFQbGF5ZXItPmlzU2Vla2FibGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fbWVk
aWFQbGF5ZXJDb250cm9sICYmICFtX21lZGlhUGxheWVyQ29udHJvbC0+YXZhaWxhYmxlUGxheWJh
Y2tSYW5nZXMoKS5jb250YWlucyhwb3NpdGlvbiAqIDEwMDApKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAobV9pc1NlZWtpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChwb3NpdGlv
biA+IGR1cmF0aW9uKCkpCisgICAgICAgIHBvc2l0aW9uID0gZHVyYXRpb24oKTsKKworICAgIC8v
IFNlZWtpbmcgaXMgbW9zdCByZWxpYWJsZSB3aGVuIHdlJ3JlIHBhdXNlZC4KKyAgICAvLyBXZWJr
aXQgd2lsbCB0cnkgdG8gcGF1c2UgYmVmb3JlIHNlZWtpbmcsIGJ1dCBkdWUgdG8gdGhlIGFzeW5j
aHJvbm91cyBuYXR1cmUKKyAgICAvLyBvZiB0aGUgYmFja2VuZCwgdGhlIHBsYXllciBtYXkgbm90
IGFjdHVhbGx5IGJlIHBhdXNlZCB5ZXQuCisgICAgLy8gSW4gdGhpcyBjYXNlLCB3ZSBzaG91bGQg
cXVldWUgdGhlIHNlZWsgYW5kIHdhaXQgdW50aWwgcGF1c2luZyBoYXMgY29tcGxldGVkCisgICAg
Ly8gYmVmb3JlIGF0dGVtcHRpbmcgdG8gc2Vlay4KKyAgICBpZiAobV9tZWRpYVBsYXllci0+c3Rh
dGUoKSA9PSBRTWVkaWFQbGF5ZXI6OlBsYXlpbmdTdGF0ZSkgeworICAgICAgICBtX21lZGlhUGxh
eWVyLT5wYXVzZSgpOworICAgICAgICBtX2lzU2Vla2luZyA9IHRydWU7CisgICAgICAgIG1fcXVl
dWVkU2VlayA9IHN0YXRpY19jYXN0PHFpbnQ2ND4ocG9zaXRpb24gKiAxMDAwKTsKKworICAgICAg
ICAvLyBTZXQgYSB0aW1lb3V0LCBzbyB0aGF0IGluIHRoZSBldmVudCB0aGF0IHdlIGRvbid0IGdl
dCBhIHN0YXRlIGNoYW5nZWQKKyAgICAgICAgLy8gc2lnbmFsLCB3ZSBzdGlsbCBhdHRlbXB0IHRo
ZSBzZWVrLgorICAgICAgICBRVGltZXI6OnNpbmdsZVNob3QoMTAwMCwgdGhpcywgU0xPVChxdWV1
ZWRTZWVrVGltZW91dCgpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9pc1NlZWtpbmcgPSB0
cnVlOworICAgICAgICBtX21lZGlhUGxheWVyLT5zZXRQb3NpdGlvbihzdGF0aWNfY2FzdDxxaW50
NjQ+KHBvc2l0aW9uICogMTAwMCkpOworCisgICAgICAgIC8vIFNldCBhIHRpbWVvdXQsIGluIGNh
c2Ugd2UgZG9uJ3QgZ2V0IGEgcG9zaXRpb24gY2hhbmdlZCBzaWduYWwKKyAgICAgICAgUVRpbWVy
OjpzaW5nbGVTaG90KDEwMDAwLCB0aGlzLCBTTE9UKHNlZWtUaW1lb3V0KCkpKTsKKyAgICB9Cit9
CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZWVraW5nKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9pc1NlZWtpbmc7Cit9CisKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZTo6ZHVyYXRpb24o
KSBjb25zdAoreworICAgIGlmIChtX3JlYWR5U3RhdGUgPCBNZWRpYVBsYXllcjo6SGF2ZU1ldGFk
YXRhKQorICAgICAgICByZXR1cm4gMC4wZjsKKworICAgIGZsb2F0IGR1cmF0aW9uID0gbV9tZWRp
YVBsYXllci0+ZHVyYXRpb24oKSAvIDEwMDAuMGY7CisKKyAgICAvLyBXZSBhcmUgc3RyZWFtaW5n
CisgICAgaWYgKGR1cmF0aW9uIDw9IDAuMGYpCisgICAgICAgIGR1cmF0aW9uID0gc3RkOjpudW1l
cmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCk7CisKKyAgICByZXR1cm4gZHVyYXRpb247Cit9
CisKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZTo6Y3VycmVudFRpbWUoKSBjb25zdAoreworICAg
IGZsb2F0IGN1cnJlbnRUaW1lID0gbV9tZWRpYVBsYXllci0+cG9zaXRpb24oKSAvIDEwMDAuMGY7
CisgICAgcmV0dXJuIGN1cnJlbnRUaW1lOworfQorCitQYXNzUmVmUHRyPFRpbWVSYW5nZXM+IE1l
ZGlhUGxheWVyUHJpdmF0ZTo6YnVmZmVyZWQoKSBjb25zdAoreworICAgIFJlZlB0cjxUaW1lUmFu
Z2VzPiBidWZmZXJlZCA9IFRpbWVSYW5nZXM6OmNyZWF0ZSgpOworCisgICAgaWYgKCFtX21lZGlh
UGxheWVyQ29udHJvbCkKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcmVkOworCisgICAgUU1lZGlhVGlt
ZVJhbmdlIHBsYXliYWNrUmFuZ2VzID0gbV9tZWRpYVBsYXllckNvbnRyb2wtPmF2YWlsYWJsZVBs
YXliYWNrUmFuZ2VzKCk7CisKKyAgICBmb3JlYWNoIChjb25zdCBRTWVkaWFUaW1lSW50ZXJ2YWwg
aW50ZXJ2YWwsIHBsYXliYWNrUmFuZ2VzLmludGVydmFscygpKSB7CisgICAgICAgIGZsb2F0IHJh
bmdlTWluID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGludGVydmFsLnN0YXJ0KCkpIC8gMTAwMC4wZjsK
KyAgICAgICAgZmxvYXQgcmFuZ2VNYXggPSBzdGF0aWNfY2FzdDxmbG9hdD4oaW50ZXJ2YWwuZW5k
KCkpIC8gMTAwMC4wZjsKKyAgICAgICAgYnVmZmVyZWQtPmFkZChyYW5nZU1pbiwgcmFuZ2VNYXgp
OworICAgIH0KKworICAgIHJldHVybiBidWZmZXJlZC5yZWxlYXNlKCk7Cit9CisKK2Zsb2F0IE1l
ZGlhUGxheWVyUHJpdmF0ZTo6bWF4VGltZVNlZWthYmxlKCkgY29uc3QKK3sKKyAgICBpZiAoIW1f
bWVkaWFQbGF5ZXJDb250cm9sKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxmbG9hdD4obV9tZWRpYVBsYXllckNvbnRyb2wtPmF2YWlsYWJsZVBsYXliYWNrUmFu
Z2VzKCkubGF0ZXN0VGltZSgpKSAvIDEwMDAuMGY7Cit9CisKK3Vuc2lnbmVkIE1lZGlhUGxheWVy
UHJpdmF0ZTo6Ynl0ZXNMb2FkZWQoKSBjb25zdAoreworICAgIHVuc2lnbmVkIHBlcmNlbnRhZ2Ug
PSBtX21lZGlhUGxheWVyLT5idWZmZXJTdGF0dXMoKTsKKworICAgIGlmIChwZXJjZW50YWdlID09
IDEwMCkgeworICAgICAgICBpZiAobV9uZXR3b3JrU3RhdGUgIT0gTWVkaWFQbGF5ZXI6OklkbGUp
IHsKKyAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OklkbGU7CisgICAg
ICAgICAgICBtX3BsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgpOworICAgICAgICB9CisgICAg
ICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhKSB7Cisg
ICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGE7Cisg
ICAgICAgICAgICBtX3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIFFMYXRpbjFTdHJpbmcgYnl0ZXNMb2FkZWRLZXkoImJ5dGVzLWxvYWRlZCIpOwor
ICAgIGlmIChtX21lZGlhUGxheWVyLT5hdmFpbGFibGVFeHRlbmRlZE1ldGFEYXRhKCkuY29udGFp
bnMoYnl0ZXNMb2FkZWRLZXkpKQorICAgICAgICByZXR1cm4gbV9tZWRpYVBsYXllci0+ZXh0ZW5k
ZWRNZXRhRGF0YShieXRlc0xvYWRlZEtleSkudG9JbnQoKTsKKworICAgIHJldHVybiBwZXJjZW50
YWdlOworfQorCit1bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGU6OnRvdGFsQnl0ZXMoKSBjb25z
dAoreworICAgIGlmIChtX21lZGlhUGxheWVyLT5hdmFpbGFibGVNZXRhRGF0YSgpLmNvbnRhaW5z
KFF0TXVsdGltZWRpYTo6U2l6ZSkpCisgICAgICAgIHJldHVybiBtX21lZGlhUGxheWVyLT5tZXRh
RGF0YShRdE11bHRpbWVkaWE6OlNpemUpLnRvSW50KCk7CisKKyAgICByZXR1cm4gMTAwOworfQor
Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0UmF0ZShmbG9hdCByYXRlKQoreworICAgIG1f
bWVkaWFQbGF5ZXItPnNldFBsYXliYWNrUmF0ZShyYXRlKTsKK30KKwordm9pZCBNZWRpYVBsYXll
clByaXZhdGU6OnNldFZvbHVtZShmbG9hdCB2b2x1bWUpCit7CisgICAgbV9tZWRpYVBsYXllci0+
c2V0Vm9sdW1lKHN0YXRpY19jYXN0PGludD4odm9sdW1lICogMTAwLjApKTsKK30KKworYm9vbCBN
ZWRpYVBsYXllclByaXZhdGU6OnN1cHBvcnRzTXV0aW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldE11dGVkKGJvb2wgbXV0ZWQp
Cit7CisgICAgbV9tZWRpYVBsYXllci0+c2V0TXV0ZWQobXV0ZWQpOworfQorCitNZWRpYVBsYXll
cjo6TmV0d29ya1N0YXRlIE1lZGlhUGxheWVyUHJpdmF0ZTo6bmV0d29ya1N0YXRlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9uZXR3b3JrU3RhdGU7Cit9CisKK01lZGlhUGxheWVyOjpSZWFkeVN0
YXRlIE1lZGlhUGxheWVyUHJpdmF0ZTo6cmVhZHlTdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fcmVhZHlTdGF0ZTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldFZpc2libGUo
Ym9vbCB2aXNpYmxlKQoreworICAgIG1faXNWaXNpYmxlID0gdmlzaWJsZTsKK30KKwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGU6Om1lZGlhU3RhdHVzQ2hhbmdlZChRTWVkaWFQbGF5ZXI6Ok1lZGlh
U3RhdHVzKQoreworICAgIHVwZGF0ZVN0YXRlcygpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZTo6aGFuZGxlRXJyb3IoUU1lZGlhUGxheWVyOjpFcnJvcikKK3sKKyAgICB1cGRhdGVTdGF0
ZXMoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnN0YXRlQ2hhbmdlZChRTWVkaWFQ
bGF5ZXI6OlN0YXRlIHN0YXRlKQoreworICAgIGlmIChzdGF0ZSAhPSBRTWVkaWFQbGF5ZXI6OlBs
YXlpbmdTdGF0ZSAmJiBtX2lzU2Vla2luZyAmJiBtX3F1ZXVlZFNlZWsgPj0gMCkgeworICAgICAg
ICBtX21lZGlhUGxheWVyLT5zZXRQb3NpdGlvbihtX3F1ZXVlZFNlZWspOworICAgICAgICBtX3F1
ZXVlZFNlZWsgPSAtMTsKKyAgICB9Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpuYXRp
dmVTaXplQ2hhbmdlZChjb25zdCBRU2l6ZUYmKQoreworICAgIG1fcGxheWVyLT5zaXplQ2hhbmdl
ZCgpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cXVldWVkU2Vla1RpbWVvdXQoKQor
eworICAgIC8vIElmIHdlIGhhdmVuJ3QgaGVhcmQgYW55dGhpbmcsIGFzc3VtZSB0aGUgcGxheWVy
IGlzIG5vdyBwYXVzZWQKKyAgICAvLyBhbmQgd2UgY2FuIGF0dGVtcHQgdGhlIHNlZWsKKyAgICBp
ZiAobV9pc1NlZWtpbmcgJiYgbV9xdWV1ZWRTZWVrID49IDApIHsKKyAgICAgICAgbV9tZWRpYVBs
YXllci0+c2V0UG9zaXRpb24obV9xdWV1ZWRTZWVrKTsKKyAgICAgICAgbV9xdWV1ZWRTZWVrID0g
LTE7CisKKyAgICAgICAgLy8gU2V0IGEgdGltZW91dCwgaW4gY2FzZSB3ZSBkb24ndCBnZXQgYSBw
b3NpdGlvbiBjaGFuZ2VkIHNpZ25hbAorICAgICAgICBRVGltZXI6OnNpbmdsZVNob3QoMTAwMDAs
IHRoaXMsIFNMT1Qoc2Vla1RpbWVvdXQoKSkpOworICAgIH0KK30KKwordm9pZCBNZWRpYVBsYXll
clByaXZhdGU6OnNlZWtUaW1lb3V0KCkKK3sKKyAgICAvLyBJZiB3ZSBoYXZlbid0IGhlYXJkIGFu
eXRoaW5nLCBhc3N1bWUgdGhlIHNlZWsgc3VjY2VlZGVkCisgICAgaWYgKG1faXNTZWVraW5nKSB7
CisgICAgICAgIG1fcGxheWVyLT50aW1lQ2hhbmdlZCgpOworICAgICAgICBtX2lzU2Vla2luZyA9
IGZhbHNlOworICAgIH0KK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnBvc2l0aW9uQ2hh
bmdlZChxaW50NjQpCit7CisgICAgLy8gT25seSBwcm9wb2dhdGUgdGhpcyBldmVudCBpZiB3ZSBh
cmUgc2Vla2luZworICAgIGlmIChtX2lzU2Vla2luZyAmJiBtX3F1ZXVlZFNlZWsgPT0gLTEpIHsK
KyAgICAgICAgbV9wbGF5ZXItPnRpbWVDaGFuZ2VkKCk7CisgICAgICAgIG1faXNTZWVraW5nID0g
ZmFsc2U7CisgICAgfQorfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6ZHVyYXRpb25DaGFu
Z2VkKHFpbnQ2NCkKK3sKKyAgICBtX3BsYXllci0+ZHVyYXRpb25DaGFuZ2VkKCk7Cit9CisKK3Zv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlOjp2b2x1bWVDaGFuZ2VkKGludCB2b2x1bWUpCit7CisgICAg
bV9wbGF5ZXItPnZvbHVtZUNoYW5nZWQoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZvbHVtZSkgLyAxMDAu
MCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjptdXRlZENoYW5nZWQoYm9vbCBtdXRl
ZCkKK3sKKyAgICBtX3BsYXllci0+bXV0ZUNoYW5nZWQobXV0ZWQpOworfQorCit2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZTo6dXBkYXRlU3RhdGVzKCkKK3sKKyAgICAvLyBTdG9yZSB0aGUgb2xkIHN0
YXRlcyBzbyB0aGF0IHdlIGNhbiBkZXRlY3QgYSBjaGFuZ2UgYW5kIHJhaXNlIGNoYW5nZSBldmVu
dHMKKyAgICBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG9sZE5ldHdvcmtTdGF0ZSA9IG1fbmV0
d29ya1N0YXRlOworICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG9sZFJlYWR5U3RhdGUgPSBt
X3JlYWR5U3RhdGU7CisKKyAgICBRTWVkaWFQbGF5ZXI6Ok1lZGlhU3RhdHVzIGN1cnJlbnRTdGF0
dXMgPSBtX21lZGlhUGxheWVyLT5tZWRpYVN0YXR1cygpOworICAgIFFNZWRpYVBsYXllcjo6RXJy
b3IgY3VycmVudEVycm9yID0gbV9tZWRpYVBsYXllci0+ZXJyb3IoKTsKKworICAgIGlmIChjdXJy
ZW50RXJyb3IgIT0gUU1lZGlhUGxheWVyOjpOb0Vycm9yKSB7CisgICAgICAgIG1fcmVhZHlTdGF0
ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKKyAgICAgICAgaWYgKGN1cnJlbnRFcnJvciA9
PSBRTWVkaWFQbGF5ZXI6OkZvcm1hdEVycm9yKQorICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUg
PSBNZWRpYVBsYXllcjo6Rm9ybWF0RXJyb3I7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1f
bmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6Ok5ldHdvcmtFcnJvcjsKKyAgICB9IGVsc2UgaWYg
KGN1cnJlbnRTdGF0dXMgPT0gUU1lZGlhUGxheWVyOjpVbmtub3duTWVkaWFTdGF0dXMKKyAgICAg
ICAgICAgICAgIHx8IGN1cnJlbnRTdGF0dXMgPT0gUU1lZGlhUGxheWVyOjpOb01lZGlhKSB7Cisg
ICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OklkbGU7CisgICAgICAgIG1fcmVh
ZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKKyAgICB9IGVsc2UgaWYgKGN1cnJl
bnRTdGF0dXMgPT0gUU1lZGlhUGxheWVyOjpMb2FkaW5nTWVkaWEpIHsKKyAgICAgICAgbV9uZXR3
b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGluZzsKKyAgICAgICAgbV9yZWFkeVN0YXRlID0g
TWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOworICAgIH0gZWxzZSBpZiAoY3VycmVudFN0YXR1cyA9
PSBRTWVkaWFQbGF5ZXI6OkxvYWRlZE1lZGlhKSB7CisgICAgICAgIG1fbmV0d29ya1N0YXRlID0g
TWVkaWFQbGF5ZXI6OkxvYWRpbmc7CisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVy
OjpIYXZlTWV0YWRhdGE7CisgICAgfSBlbHNlIGlmIChjdXJyZW50U3RhdHVzID09IFFNZWRpYVBs
YXllcjo6QnVmZmVyaW5nTWVkaWEpIHsKKyAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBs
YXllcjo6TG9hZGluZzsKKyAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVG
dXR1cmVEYXRhOworICAgIH0gZWxzZSBpZiAoY3VycmVudFN0YXR1cyA9PSBRTWVkaWFQbGF5ZXI6
OlN0YWxsZWRNZWRpYSkgeworICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpM
b2FkaW5nOworICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUN1cnJlbnRE
YXRhOworICAgIH0gZWxzZSBpZiAoY3VycmVudFN0YXR1cyA9PSBRTWVkaWFQbGF5ZXI6OkJ1ZmZl
cmVkTWVkaWEKKyAgICAgICAgICAgICAgIHx8IGN1cnJlbnRTdGF0dXMgPT0gUU1lZGlhUGxheWVy
OjpFbmRPZk1lZGlhKSB7CisgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6Oklk
bGU7CisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlRW5vdWdoRGF0YTsK
KyAgICB9IGVsc2UgaWYgKGN1cnJlbnRTdGF0dXMgPT0gUU1lZGlhUGxheWVyOjpJbnZhbGlkTWVk
aWEpIHsKKyAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TmV0d29ya0Vycm9y
OworICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7CisgICAg
fQorCisgICAgLy8gTG9nIHRoZSBzdGF0ZSBjaGFuZ2VzIGFuZCByYWlzZSB0aGUgc3RhdGUgY2hh
bmdlIGV2ZW50cworICAgIC8vIE5COiBUaGUgcmVhZHlTdGF0ZUNoYW5nZWQgZXZlbnQgbXVzdCBj
b21lIGJlZm9yZSB0aGUgbmV0d29ya1N0YXRlQ2hhbmdlZCBldmVudC4KKyAgICAvLyBCcmVha2lu
ZyB0aGlzIGludmFyaWFudCB3aWxsIGNhdXNlIHRoZSByZXNvdXJjZSBzZWxlY3Rpb24gYWxnb3Jp
dGhtIGZvciBtdWx0aXBsZQorICAgIC8vIHNvdXJjZXMgdG8gZmFpbC4KKyAgICBpZiAobV9yZWFk
eVN0YXRlICE9IG9sZFJlYWR5U3RhdGUpCisgICAgICAgIG1fcGxheWVyLT5yZWFkeVN0YXRlQ2hh
bmdlZCgpOworCisgICAgaWYgKG1fbmV0d29ya1N0YXRlICE9IG9sZE5ldHdvcmtTdGF0ZSkKKyAg
ICAgICAgbV9wbGF5ZXItPm5ldHdvcmtTdGF0ZUNoYW5nZWQoKTsKK30KKwordm9pZCBNZWRpYVBs
YXllclByaXZhdGU6OnNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAoc2l6
ZSA9PSBtX2N1cnJlbnRTaXplKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2N1cnJlbnRTaXpl
ID0gc2l6ZTsKKyAgICBtX3ZpZGVvSXRlbS0+c2V0U2l6ZShRU2l6ZUYoUVNpemUoc2l6ZSkpKTsK
K30KKworSW50U2l6ZSBNZWRpYVBsYXllclByaXZhdGU6Om5hdHVyYWxTaXplKCkgY29uc3QKK3sK
KyAgICBpZiAoIWhhc1ZpZGVvKCkgfHwgbV9yZWFkeVN0YXRlIDwgTWVkaWFQbGF5ZXI6OkhhdmVN
ZXRhZGF0YSkKKyAgICAgICAgcmV0dXJuIEludFNpemUoKTsKKworICAgIHJldHVybiBJbnRTaXpl
KG1fdmlkZW9JdGVtLT5uYXRpdmVTaXplKCkudG9TaXplKCkpOworfQorCit2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZTo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0
JiByZWN0KQoreworICAgIGlmIChjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmICghbV9pc1Zpc2libGUpCisgICAgICAgIHJldHVybjsKKworICAg
IC8vIEdyYWIgdGhlIHBhaW50ZXIgYW5kIHdpZGdldAorICAgIFFQYWludGVyKiBwYWludGVyID0g
Y29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisKKyAgICAvLyBSZW5kZXIgdGhlIHZpZGVvCisg
ICAgbV92aWRlb1NjZW5lLT5yZW5kZXIocGFpbnRlciwgUVJlY3RGKFFSZWN0KHJlY3QpKSk7Cit9
CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpyZXBhaW50KCkKK3sKKyAgICBtX3BsYXllci0+
cmVwYWludCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNpbmNsdWRlICJtb2Nf
TWVkaWFQbGF5ZXJQcml2YXRlUXQuY3BwIgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjYyMzQzMTEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmgKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisg
ICAgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyovCisKKyNpZm5kZWYgTWVkaWFQbGF5ZXJQcml2YXRlUXRfaAorI2RlZmluZSBN
ZWRpYVBsYXllclByaXZhdGVRdF9oCisKKyNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGUuaCIK
KworI2luY2x1ZGUgPFFNZWRpYVBsYXllcj4KKyNpbmNsdWRlIDxRT2JqZWN0PgorCitjbGFzcyBR
TWVkaWFQbGF5ZXJDb250cm9sOworY2xhc3MgUUdyYXBoaWNzVmlkZW9JdGVtOworY2xhc3MgUUdy
YXBoaWNzU2NlbmU7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTWVkaWFQbGF5ZXJQ
cml2YXRlIDogcHVibGljIFFPYmplY3QsIHB1YmxpYyBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZh
Y2UgeworCisgICAgUV9PQkpFQ1QKKworcHVibGljOgorICAgIHN0YXRpYyBNZWRpYVBsYXllclBy
aXZhdGVJbnRlcmZhY2UqIGNyZWF0ZShNZWRpYVBsYXllciogcGxheWVyKTsKKyAgICB+TWVkaWFQ
bGF5ZXJQcml2YXRlKCk7CisKKyAgICBzdGF0aWMgdm9pZCByZWdpc3Rlck1lZGlhRW5naW5lKE1l
ZGlhRW5naW5lUmVnaXN0cmFyKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRUeXBlcyhI
YXNoU2V0PFN0cmluZz4mKTsKKyAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBz
dXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7CisgICAgc3RhdGljIGJv
b2wgaXNBdmFpbGFibGUoKSB7IHJldHVybiB0cnVlOyB9CisKKyAgICBib29sIGhhc1ZpZGVvKCkg
Y29uc3Q7CisgICAgYm9vbCBoYXNBdWRpbygpIGNvbnN0OworCisgICAgdm9pZCBsb2FkKGNvbnN0
IFN0cmluZyAmdXJsKTsKKyAgICB2b2lkIGNhbmNlbExvYWQoKTsKKworICAgIHZvaWQgcGxheSgp
OworICAgIHZvaWQgcGF1c2UoKTsKKworICAgIGJvb2wgcGF1c2VkKCkgY29uc3Q7CisgICAgYm9v
bCBzZWVraW5nKCkgY29uc3Q7CisKKyAgICBmbG9hdCBkdXJhdGlvbigpIGNvbnN0OworICAgIGZs
b2F0IGN1cnJlbnRUaW1lKCkgY29uc3Q7CisgICAgdm9pZCBzZWVrKGZsb2F0KTsKKworICAgIHZv
aWQgc2V0UmF0ZShmbG9hdCk7CisgICAgdm9pZCBzZXRWb2x1bWUoZmxvYXQpOworCisgICAgYm9v
bCBzdXBwb3J0c011dGluZygpIGNvbnN0OworICAgIHZvaWQgc2V0TXV0ZWQoYm9vbCk7CisKKyAg
ICBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG5ldHdvcmtTdGF0ZSgpIGNvbnN0OworICAgIE1l
ZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdDsKKworICAgIFBhc3NSZWZQ
dHI8VGltZVJhbmdlcz4gYnVmZmVyZWQoKSBjb25zdDsKKyAgICBmbG9hdCBtYXhUaW1lU2Vla2Fi
bGUoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBieXRlc0xvYWRlZCgpIGNvbnN0OworICAgIHVuc2ln
bmVkIHRvdGFsQnl0ZXMoKSBjb25zdDsKKworICAgIHZvaWQgc2V0VmlzaWJsZShib29sKTsKKwor
ICAgIEludFNpemUgbmF0dXJhbFNpemUoKSBjb25zdDsKKyAgICB2b2lkIHNldFNpemUoY29uc3Qg
SW50U2l6ZSYpOworCisgICAgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRS
ZWN0Jik7CisKKyAgICBib29sIHN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CisKK3ByaXZhdGUgc2xvdHM6CisgICAgdm9pZCBtZWRpYVN0YXR1c0NoYW5nZWQoUU1l
ZGlhUGxheWVyOjpNZWRpYVN0YXR1cyk7CisgICAgdm9pZCBoYW5kbGVFcnJvcihRTWVkaWFQbGF5
ZXI6OkVycm9yKTsKKyAgICB2b2lkIHN0YXRlQ2hhbmdlZChRTWVkaWFQbGF5ZXI6OlN0YXRlKTsK
KyAgICB2b2lkIG5hdGl2ZVNpemVDaGFuZ2VkKGNvbnN0IFFTaXplRiYpOworICAgIHZvaWQgcXVl
dWVkU2Vla1RpbWVvdXQoKTsKKyAgICB2b2lkIHNlZWtUaW1lb3V0KCk7CisgICAgdm9pZCBwb3Np
dGlvbkNoYW5nZWQocWludDY0KTsKKyAgICB2b2lkIGR1cmF0aW9uQ2hhbmdlZChxaW50NjQpOwor
ICAgIHZvaWQgdm9sdW1lQ2hhbmdlZChpbnQpOworICAgIHZvaWQgbXV0ZWRDaGFuZ2VkKGJvb2wp
OworICAgIHZvaWQgcmVwYWludCgpOworCitwcml2YXRlOgorICAgIHZvaWQgdXBkYXRlU3RhdGVz
KCk7CisKK3ByaXZhdGU6CisgICAgTWVkaWFQbGF5ZXJQcml2YXRlKE1lZGlhUGxheWVyKik7CisK
KyAgICBNZWRpYVBsYXllciogbV9wbGF5ZXI7CisgICAgUU1lZGlhUGxheWVyKiBtX21lZGlhUGxh
eWVyOworICAgIFFNZWRpYVBsYXllckNvbnRyb2wqIG1fbWVkaWFQbGF5ZXJDb250cm9sOworICAg
IFFHcmFwaGljc1ZpZGVvSXRlbSogbV92aWRlb0l0ZW07CisgICAgUUdyYXBoaWNzU2NlbmUqIG1f
dmlkZW9TY2VuZTsKKworICAgIG11dGFibGUgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBtX25l
dHdvcmtTdGF0ZTsKKyAgICBtdXRhYmxlIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG1fcmVhZHlT
dGF0ZTsKKworICAgIEludFNpemUgbV9jdXJyZW50U2l6ZTsKKyAgICBib29sIG1faXNWaXNpYmxl
OworICAgIGJvb2wgbV9pc1NlZWtpbmc7CisgICAgcWludDY0IG1fcXVldWVkU2VlazsKK307Cit9
CisKKyNlbmRpZiAvLyBNZWRpYVBsYXllclByaXZhdGVRdF9oCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5k
ZXJUaGVtZVF0LmNwcAppbmRleCAyNzFjMTFhLi5hZjU4MzU2IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vcXQv
UmVuZGVyVGhlbWVRdC5jcHAKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJGb250LmgiCiAj
aW5jbHVkZSAiRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisj
aW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQu
aCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgpA
QCAtNDcsNiArNDgsNyBAQAogI2luY2x1ZGUgIlJlbmRlckJveC5oIgogI2luY2x1ZGUgIlJlbmRl
clNsaWRlci5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCisjaW5jbHVkZSAiVGltZVJhbmdl
cy5oIgogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lUXQuaCIKICNpbmNsdWRlICJVc2VyQWdlbnRT
dHlsZVNoZWV0cy5oIgogI2luY2x1ZGUgInF3ZWJwYWdlLmgiCkBAIC04ODIsMTAgKzg4NCwxNSBA
QCBIVE1MTWVkaWFFbGVtZW50KiBSZW5kZXJUaGVtZVF0OjpnZXRNZWRpYUVsZW1lbnRGcm9tUmVu
ZGVyT2JqZWN0KFJlbmRlck9iamVjdCogbwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MTWVk
aWFFbGVtZW50Kj4obWVkaWFOb2RlKTsKIH0KIAorZG91YmxlIFJlbmRlclRoZW1lUXQ6Om1lZGlh
Q29udHJvbHNCYXNlbGluZU9wYWNpdHkoKSBjb25zdAoreworICAgIHJldHVybiAwLjQ7Cit9CisK
IHZvaWQgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYUJhY2tncm91bmQoUVBhaW50ZXIqIHBhaW50
ZXIsIGNvbnN0IEludFJlY3QmIHIpIGNvbnN0CiB7CiAgICAgcGFpbnRlci0+c2V0UGVuKFF0OjpO
b1Blbik7Ci0gICAgc3RhdGljIFFDb2xvciB0cmFuc3BhcmVudEJsYWNrKDAsIDAsIDAsIDEwMCk7
CisgICAgc3RhdGljIFFDb2xvciB0cmFuc3BhcmVudEJsYWNrKDAsIDAsIDAsIG1lZGlhQ29udHJv
bHNCYXNlbGluZU9wYWNpdHkoKSAqIDI1NSk7CiAgICAgcGFpbnRlci0+c2V0QnJ1c2godHJhbnNw
YXJlbnRCbGFjayk7CiAgICAgcGFpbnRlci0+ZHJhd1JvdW5kZWRSZWN0KHIueCgpLCByLnkoKSwg
ci53aWR0aCgpLCByLmhlaWdodCgpLCA1LjAsIDUuMCk7CiB9CkBAIC05MjEsMTQgKzkyOCw5IEBA
IGJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYU11dGVCdXR0b24oUmVuZGVyT2JqZWN0KiBv
LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhCiAgICAgY29uc3QgUVBvaW50RiBzcGVha2VyUG9seWdv
bls2XSA9IHsgUVBvaW50RigyMCwgMzApLCBRUG9pbnRGKDUwLCAzMCksIFFQb2ludEYoODAsIDAp
LAogICAgICAgICAgICAgUVBvaW50Rig4MCwgMTAwKSwgUVBvaW50Rig1MCwgNzApLCBRUG9pbnRG
KDIwLCA3MCl9OwogCi0gICAgcC5wYWludGVyLT5zZXRCcnVzaChnZXRNZWRpYUNvbnRyb2xGb3Jl
Z3JvdW5kQ29sb3IobykpOworICAgIHAucGFpbnRlci0+c2V0QnJ1c2gobWVkaWFFbGVtZW50LT5t
dXRlZCgpID8gUXQ6OmRhcmtSZWQgOiBnZXRNZWRpYUNvbnRyb2xGb3JlZ3JvdW5kQ29sb3Iobykp
OwogICAgIHAucGFpbnRlci0+ZHJhd1BvbHlnb24oc3BlYWtlclBvbHlnb24sIDYpOwogCi0gICAg
aWYgKG1lZGlhRWxlbWVudC0+bXV0ZWQoKSkgewotICAgICAgICBwLnBhaW50ZXItPnNldFBlbihR
dDo6cmVkKTsKLSAgICAgICAgcC5wYWludGVyLT5kcmF3TGluZSgwLCAxMDAsIDEwMCwgMCk7Ci0g
ICAgfQotCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC05NzEsNiArOTczLDg2IEBAIGJvb2wg
UmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVNlZWtGb3J3YXJkQnV0dG9uKFJlbmRlck9iamVjdCos
IGNvbnN0IFJlbmRlck9iamVjCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitib29sIFJlbmRlclRo
ZW1lUXQ6OnBhaW50TWVkaWFDdXJyZW50VGltZShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAg
U3R5bGVQYWludGVyIHAodGhpcywgcGFpbnRJbmZvKTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHAucGFpbnRlci0+c2V0UmVuZGVySGludChRUGFp
bnRlcjo6QW50aWFsaWFzaW5nLCB0cnVlKTsKKyAgICBwYWludE1lZGlhQmFja2dyb3VuZChwLnBh
aW50ZXIsIHIpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitTdHJpbmcgUmVuZGVyVGhlbWVR
dDo6Zm9ybWF0TWVkaWFDb250cm9sc0N1cnJlbnRUaW1lKGZsb2F0IGN1cnJlbnRUaW1lLCBmbG9h
dCBkdXJhdGlvbikgY29uc3QKK3sKKyAgICByZXR1cm4gZm9ybWF0TWVkaWFDb250cm9sc1RpbWUo
Y3VycmVudFRpbWUpICsgIiAvICIgKyBmb3JtYXRNZWRpYUNvbnRyb2xzVGltZShkdXJhdGlvbik7
Cit9CisKK1N0cmluZyBSZW5kZXJUaGVtZVF0Ojpmb3JtYXRNZWRpYUNvbnRyb2xzUmVtYWluaW5n
VGltZShmbG9hdCBjdXJyZW50VGltZSwgZmxvYXQgZHVyYXRpb24pIGNvbnN0Cit7CisgICAgcmV0
dXJuIFN0cmluZygpOworfQorCitib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50TWVkaWFWb2x1bWVT
bGlkZXJUcmFjayhSZW5kZXJPYmplY3QgKm8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
ICZwYWludEluZm8sIGNvbnN0IEludFJlY3QgJnIpCit7CisgICAgU3R5bGVQYWludGVyIHAodGhp
cywgcGFpbnRJbmZvKTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIHAucGFpbnRlci0+c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5n
LCB0cnVlKTsKKworICAgIHBhaW50TWVkaWFCYWNrZ3JvdW5kKHAucGFpbnRlciwgcik7CisKKyAg
ICBpZiAoIW8tPmlzU2xpZGVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEludFJl
Y3QgYiA9IHRvUmVuZGVyQm94KG8pLT5jb250ZW50Qm94UmVjdCgpOworCisgICAgLy8gUG9zaXRp
b24gdGhlIG91dGVyIHJlY3RhbmdsZQorICAgIGludCB0b3AgPSByLnkoKSArIGIueSgpOworICAg
IGludCBsZWZ0ID0gci54KCkgKyBiLngoKTsKKyAgICBpbnQgd2lkdGggPSBiLndpZHRoKCk7Cisg
ICAgaW50IGhlaWdodCA9IGIuaGVpZ2h0KCk7CisKKyAgICAvLyBHZXQgdGhlIHNjYWxlIGNvbG9y
IGZyb20gdGhlIHBhZ2UgY2xpZW50CisgICAgUVBhbGV0dGUgcGFsID0gUUFwcGxpY2F0aW9uOjpw
YWxldHRlKCk7CisgICAgc2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMocGFsKTsKKyAg
ICBjb25zdCBRQ29sb3IgaGlnaGxpZ2h0VGV4dCA9IHBhbC5icnVzaChRUGFsZXR0ZTo6QWN0aXZl
LCBRUGFsZXR0ZTo6SGlnaGxpZ2h0ZWRUZXh0KS5jb2xvcigpOworICAgIGNvbnN0IFFDb2xvciBz
Y2FsZUNvbG9yKGhpZ2hsaWdodFRleHQucmVkKCksIGhpZ2hsaWdodFRleHQuZ3JlZW4oKSwgaGln
aGxpZ2h0VGV4dC5ibHVlKCksIG1lZGlhQ29udHJvbHNCYXNlbGluZU9wYWNpdHkoKSAqIDI1NSk7
CisKKyAgICAvLyBEcmF3IHRoZSBvdXRlciByZWN0YW5nbGUKKyAgICBwLnBhaW50ZXItPnNldEJy
dXNoKHNjYWxlQ29sb3IpOworICAgIHAucGFpbnRlci0+ZHJhd1JlY3QobGVmdCwgdG9wLCB3aWR0
aCwgaGVpZ2h0KTsKKworICAgIGlmICghby0+bm9kZSgpIHx8ICFvLT5ub2RlKCktPmhhc1RhZ05h
bWUoaW5wdXRUYWcpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBIVE1MSW5wdXRFbGVt
ZW50KiBzbGlkZXIgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oby0+bm9kZSgpKTsK
KworICAgIC8vIFBvc2l0aW9uIHRoZSBpbm5lciByZWN0YW5nbGUKKyAgICBoZWlnaHQgPSBoZWln
aHQgKiBzbGlkZXItPnZhbHVlQXNOdW1iZXIoKTsKKyAgICB0b3AgKz0gYi5oZWlnaHQoKSAtIGhl
aWdodDsKKworICAgIC8vIERyYXcgdGhlIGlubmVyIHJlY3RhbmdsZQorICAgIHAucGFpbnRlci0+
c2V0UGVuKFF0OjpOb1Blbik7CisgICAgcC5wYWludGVyLT5zZXRCcnVzaChnZXRNZWRpYUNvbnRy
b2xGb3JlZ3JvdW5kQ29sb3IobykpOworICAgIHAucGFpbnRlci0+ZHJhd1JlY3QobGVmdCwgdG9w
LCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJU
aGVtZVF0OjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0ICpvLCBjb25z
dCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyAmcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0ICZyKQor
eworICAgIFN0eWxlUGFpbnRlciBwKHRoaXMsIHBhaW50SW5mbyk7CisgICAgaWYgKCFwLmlzVmFs
aWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBOb3RoaW5nIHRvIGRyYXcgaGVy
ZSwgdGhpcyBpcyBhbGwgZG9uZSBpbiB0aGUgdHJhY2sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
IGJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCog
bywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVj
dCYgcikKIHsKICAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBnZXRNZWRpYUVs
ZW1lbnRGcm9tUmVuZGVyT2JqZWN0KG8pOwpAQCAtOTg1LDE1ICsxMDY3LDMxIEBAIGJvb2wgUmVu
ZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCogbywgY29uc3Qg
UmVuZGVyT2JqZWN0OjpQCiAKICAgICBwYWludE1lZGlhQmFja2dyb3VuZChwLnBhaW50ZXIsIHIp
OwogCisjaWYgUVRfVkVSU0lPTiA+PSAweDA0MDcwMAorICAgIGlmIChNZWRpYVBsYXllciogcGxh
eWVyID0gbWVkaWFFbGVtZW50LT5wbGF5ZXIoKSkgeworICAgICAgICAvLyBHZXQgdGhlIGJ1ZmZl
cmVkIHBhcnRzIG9mIHRoZSBtZWRpYQorICAgICAgICBQYXNzUmVmUHRyPFRpbWVSYW5nZXM+IGJ1
ZmZlcmVkID0gcGxheWVyLT5idWZmZXJlZCgpOworICAgICAgICBpZiAoYnVmZmVyZWQtPmxlbmd0
aCgpID4gMCAmJiBwbGF5ZXItPmR1cmF0aW9uKCkgPCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0
Pjo6aW5maW5pdHkoKSkgeworICAgICAgICAgICAgLy8gU2V0IHRoZSB0cmFuc2Zvcm0gYW5kIGJy
dXNoCisgICAgICAgICAgICBXb3JsZE1hdHJpeFRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyKHAucGFp
bnRlciwgbywgcik7CisgICAgICAgICAgICBwLnBhaW50ZXItPnNldEJydXNoKGdldE1lZGlhQ29u
dHJvbEZvcmVncm91bmRDb2xvcigpKTsKKworICAgICAgICAgICAgLy8gUGFpbnQgZWFjaCBidWZm
ZXJlZCBzZWN0aW9uCisgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGV4OworICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBidWZmZXJlZC0+bGVuZ3RoKCk7IGkrKykgeworICAgICAgICAg
ICAgICAgIGZsb2F0IHN0YXJ0WCA9IChidWZmZXJlZC0+c3RhcnQoaSwgZXgpIC8gcGxheWVyLT5k
dXJhdGlvbigpKSAqIDEwMDsKKyAgICAgICAgICAgICAgICBmbG9hdCB3aWR0aCA9ICgoYnVmZmVy
ZWQtPmVuZChpLCBleCkgLyBwbGF5ZXItPmR1cmF0aW9uKCkpICogMTAwKSAtIHN0YXJ0WDsKKyAg
ICAgICAgICAgICAgICBwLnBhaW50ZXItPmRyYXdSZWN0KHN0YXJ0WCwgMzcsIHdpZHRoLCAyNik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKwogICAgIHJldHVybiBm
YWxzZTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhU2xpZGVyVGh1bWIoUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBJbnRSZWN0JiByKQogewotICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9
IGdldE1lZGlhRWxlbWVudEZyb21SZW5kZXJPYmplY3Qoby0+cGFyZW50KCkpOwotICAgIGlmICgh
bWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICBTdHlsZVBhaW50ZXIg
cCh0aGlzLCBwYWludEluZm8pOwogICAgIGlmICghcC5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVy
biB0cnVlOwpAQCAtMTAxOSw2ICsxMTE3LDEzIEBAIHZvaWQgUmVuZGVyVGhlbWVRdDo6YWRqdXN0
U2xpZGVyVGh1bWJTaXplKFJlbmRlck9iamVjdCogbykgY29uc3QKICAgICAgICAgaW50IHBhcmVu
dEhlaWdodCA9IHBhcmVudFN0eWxlLT5oZWlnaHQoKS52YWx1ZSgpOwogICAgICAgICBvLT5zdHls
ZSgpLT5zZXRXaWR0aChMZW5ndGgocGFyZW50SGVpZ2h0IC8gMywgRml4ZWQpKTsKICAgICAgICAg
by0+c3R5bGUoKS0+c2V0SGVpZ2h0KExlbmd0aChwYXJlbnRIZWlnaHQsIEZpeGVkKSk7CisgICAg
fSBlbHNlIGlmIChwYXJ0ID09IE1lZGlhVm9sdW1lU2xpZGVyVGh1bWJQYXJ0KSB7CisgICAgICAg
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IG8tPnBhcmVudCgpLT5zdHlsZSgpOworICAgICAg
ICBRX0FTU0VSVChwYXJlbnRTdHlsZSk7CisKKyAgICAgICAgaW50IHBhcmVudFdpZHRoID0gcGFy
ZW50U3R5bGUtPndpZHRoKCkudmFsdWUoKTsKKyAgICAgICAgby0+c3R5bGUoKS0+c2V0SGVpZ2h0
KExlbmd0aChwYXJlbnRXaWR0aCAvIDMsIEZpeGVkKSk7CisgICAgICAgIG8tPnN0eWxlKCktPnNl
dFdpZHRoKExlbmd0aChwYXJlbnRXaWR0aCwgRml4ZWQpKTsKICAgICB9IGVsc2UgaWYgKHBhcnQg
PT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCB8fCBwYXJ0ID09IFNsaWRlclRodW1iVmVydGlj
YWxQYXJ0KSB7CiAgICAgICAgIFFTdHlsZU9wdGlvblNsaWRlciBvcHRpb247CiAgICAgICAgIGlm
IChwYXJ0ID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmggYi9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRo
ZW1lUXQuaAppbmRleCA1Mzg1ODgxLi44YTIyZGYxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRm
b3JtL3F0L1JlbmRlclRoZW1lUXQuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRo
ZW1lUXQuaApAQCAtMTI3LDEwICsxMjcsMTUgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9v
bCBwYWludE1lZGlhU2Vla0ZvcndhcmRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVy
T2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIHBh
aW50TWVkaWFTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNs
aWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOwotCisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFDdXJyZW50VGlt
ZShSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKFJl
bmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIoUmVuZGVy
T2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
CisgICAgdmlydHVhbCBTdHJpbmcgZm9ybWF0TWVkaWFDb250cm9sc0N1cnJlbnRUaW1lKGZsb2F0
IGN1cnJlbnRUaW1lLCBmbG9hdCBkdXJhdGlvbikgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcg
Zm9ybWF0TWVkaWFDb250cm9sc1JlbWFpbmluZ1RpbWUoZmxvYXQgY3VycmVudFRpbWUsIGZsb2F0
IGR1cmF0aW9uKSBjb25zdDsKIHByaXZhdGU6CiAgICAgSFRNTE1lZGlhRWxlbWVudCogZ2V0TWVk
aWFFbGVtZW50RnJvbVJlbmRlck9iamVjdChSZW5kZXJPYmplY3QqIG8pIGNvbnN0OwogICAgIHZv
aWQgcGFpbnRNZWRpYUJhY2tncm91bmQoUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IEludFJlY3Qm
IHIpIGNvbnN0OworICAgIGRvdWJsZSBtZWRpYUNvbnRyb2xzQmFzZWxpbmVPcGFjaXR5KCkgY29u
c3Q7CiAgICAgUUNvbG9yIGdldE1lZGlhQ29udHJvbEZvcmVncm91bmRDb2xvcihSZW5kZXJPYmpl
Y3QqIG8gPSAwKSBjb25zdDsKICNlbmRpZgogICAgIHZvaWQgY29tcHV0ZVNpemVCYXNlZE9uU3R5
bGUoUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlKSBjb25zdDsK
</data>
<flag name="review"
          id="31960"
          type_id="1"
          status="+"
          setter="vestbo"
    />
          </attachment>
      

    </bug>

</bugzilla>