<?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>71082</bug_id>
          
          <creation_ts>2011-10-27 17:08:17 -0700</creation_ts>
          <short_desc>[Qt][WK2] Implement favicon support</short_desc>
          <delta_ts>2011-12-20 13:37:05 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Qt</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>Qt</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Rafael Brandao">rafael.lobo</reporter>
          <assigned_to name="Rafael Brandao">rafael.lobo</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>hausmann</cc>
    
    <cc>kenneth</cc>
    
    <cc>kling</cc>
    
    <cc>levin+threading</cc>
    
    <cc>menard</cc>
    
    <cc>ossy</cc>
    
    <cc>rafael.lobo</cc>
    
    <cc>vestbo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>492109</commentid>
    <comment_count>0</comment_count>
    <who name="Rafael Brandao">rafael.lobo</who>
    <bug_when>2011-10-27 17:08:17 -0700</bug_when>
    <thetext>I&apos;ve been working on a patch to implement basic support for favicons on Qt, and I&apos;ll upload it soon. We&apos;d have to discuss how exactly we would like to expose it on QML.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494298</commentid>
    <comment_count>1</comment_count>
      <attachid>113256</attachid>
    <who name="Rafael Brandao">rafael.lobo</who>
    <bug_when>2011-11-01 16:41:11 -0700</bug_when>
    <thetext>Created attachment 113256
Adds basic implementation for showing favicons on QML and cleaning up the icon database.

Currently a Favicon component needs to target a DesktopWebView so it can fetch the data for its url whenever it changes. The data is stored by WebIconDatabase, and it&apos;s using the default icon database path for now. I had to change the visibility of WebContext::iconDatabasePath so I could use it when I&apos;m doing the setup for QtWebIconDatabase. I wonder if there&apos;s a way (probably there is) to use it without this change, but I couldn&apos;t think of anything more practical right now. Its setup is done when we create the single WebContext. It&apos;s destroyed when that WebContext is destroyed. Here&apos;s an example of usage on QML:

Favicon {
    id: favicon
    webView: pageWidget.webView
    width: 16
    height: 16
    MouseArea {
        anchors.fill: parent
        onClicked: favicon.removeAllIcons()
    }
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494304</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-01 16:46:15 -0700</bug_when>
    <thetext>Attachment 113256 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit/qt/ChangeLog&apos;, u&apos;Source/WebK...&quot; exit_code: 1

Source/WebKit2/UIProcess/qt/QtWebPageProxy.cpp:45:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit2/UIProcess/API/qt/qfavicon.cpp:87:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
Source/WebKit2/UIProcess/API/qt/qfavicon.cpp:112:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
Source/WebKit2/UIProcess/qt/QtWebIconDatabase.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit2/UIProcess/qt/QtWebIconDatabase.h:25:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit2/UIProcess/qt/QtWebIconDatabase.h:28:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 6 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494485</commentid>
    <comment_count>3</comment_count>
      <attachid>113256</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-11-02 00:59:06 -0700</bug_when>
    <thetext>Comment on attachment 113256
Adds basic implementation for showing favicons on QML and cleaning up the icon database.

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

This is just a first rough review, I didn&apos;t go much into details. I&apos;ve added a few comments on the implementation first. There&apos;s one thing that I think we need to clarify first, design wise:

I like the idea that the favicons have their own &quot;element&quot; in QML and that they can be associated with webviews (it doesn&apos;t have to be a desktop one, btw). That gives me the impression that they&apos;re a much more reusable component.

As such the implementation however should not be a painted item. I&apos;d rather see a real QQuickItem that uses the C++ scene graph API to create a proper image node.

I&apos;m giving r- because this will need a few iterations, but I think conceptually it&apos;s a good start (like I said, I really like the idea of a reusable qml element that is bindable to a webview and updates automatically)

&gt; Source/WebKit2/UIProcess/qt/QtWebIconDatabase.cpp:67
&gt; +QPixmap QtWebIconDatabase::synchronousIconForPageURL(const QUrl&amp; pageURL)
&gt; +{
&gt; +    String url = WebCore::KURL(pageURL).string();
&gt; +    RefPtr&lt;WebCore::Image&gt; image = m_context-&gt;iconDatabase()-&gt;imageForPageURL(url);
&gt; +    if (!image)
&gt; +        return QPixmap();

Ok, we can&apos;t do this unfortunately :(. A synchronous icon lookup like this will send a synchronous message to the web process.

Synchronous messages to the web process are a major PITA and have been a great source of crashes during the development of the N9 browser, to the extend where we had to make an effort to avoid them like the plague. So let&apos;s not repeat this mistake :)

&gt; Source/WebKit2/UIProcess/qt/QtWebIconDatabase.h:37
&gt; +class QWEBKIT_EXPORT QtWebIconDatabase : public QObject {

I don&apos;t think we need to export this class, do we?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494504</commentid>
    <comment_count>4</comment_count>
      <attachid>113256</attachid>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-11-02 01:55:04 -0700</bug_when>
    <thetext>Comment on attachment 113256
Adds basic implementation for showing favicons on QML and cleaning up the icon database.

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

&gt; Source/WebKit/qt/declarative/plugin.cpp:55
&gt; +        qmlRegisterType&lt;QFavicon&gt;(uri, 3, 0, &quot;Favicon&quot;);

The class name should be different in my opinion. QWebFavIcon or similar so we respect the naming convention. The QML name also should be different.

&gt; Source/WebKit2/ChangeLog:6
&gt; +        Handles favicon data with a singleton QtWebIconDatabase

The implementation handles...

&gt; Source/WebKit2/ChangeLog:7
&gt; +        which will be listened by QML components named Favicon.

QML component. FavIcon.

&gt; Source/WebKit2/UIProcess/API/qt/qfavicon.cpp:30
&gt; +QFavicon::QFavicon(QQuickItem* parent)

Whatever name in the future &quot;i&quot; should be upper case.

&gt; Source/WebKit2/UIProcess/API/qt/qfavicon.h:45
&gt; +    QDesktopWebView* webView() const { return m_webView; }

It needs to work for both views.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495696</commentid>
    <comment_count>5</comment_count>
    <who name="Rafael Brandao">rafael.lobo</who>
    <bug_when>2011-11-03 12:02:41 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 113256 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=113256&amp;action=review
&gt; 
&gt; This is just a first rough review, I didn&apos;t go much into details. I&apos;ve added a few comments on the implementation first. There&apos;s one thing that I think we need to clarify first, design wise:
&gt; 
&gt; I like the idea that the favicons have their own &quot;element&quot; in QML and that they can be associated with webviews (it doesn&apos;t have to be a desktop one, btw). That gives me the impression that they&apos;re a much more reusable component.
&gt; 

I&apos;ll change it to support both webviews.

&gt; As such the implementation however should not be a painted item. I&apos;d rather see a real QQuickItem that uses the C++ scene graph API to create a proper image node.

I&apos;ll give it try.

&gt; 
&gt; I&apos;m giving r- because this will need a few iterations, but I think conceptually it&apos;s a good start (like I said, I really like the idea of a reusable qml element that is bindable to a webview and updates automatically)

No problem, and thanks for your review. :)

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/qt/QtWebIconDatabase.cpp:67
&gt; &gt; +QPixmap QtWebIconDatabase::synchronousIconForPageURL(const QUrl&amp; pageURL)
&gt; &gt; +{
&gt; &gt; +    String url = WebCore::KURL(pageURL).string();
&gt; &gt; +    RefPtr&lt;WebCore::Image&gt; image = m_context-&gt;iconDatabase()-&gt;imageForPageURL(url);
&gt; &gt; +    if (!image)
&gt; &gt; +        return QPixmap();
&gt; 
&gt; Ok, we can&apos;t do this unfortunately :(. A synchronous icon lookup like this will send a synchronous message to the web process.
&gt; 
&gt; Synchronous messages to the web process are a major PITA and have been a great source of crashes during the development of the N9 browser, to the extend where we had to make an effort to avoid them like the plague. So let&apos;s not repeat this mistake :)

The good thing about IconDatabase is that the database itself lies on UIProcess, so this lookup won&apos;t send any synchronous message to the WebProcess. Besides the name, IconDatabase works asynchronously: if you ask for an icon when its data is not ready yet, then the page url requesting its icon data will be marked as interested on it and will return an empty image on the &quot;sync&quot; function. When the data is ready we&apos;ll receive a signal about that. So we can finally request the actual data to display on UI. WebIconDatabase uses the function imageForPageURL and then it uses IconDatabase&apos;s synchronousIconForPageURL. Maybe I should rename that function on QtWebIconDatabase to imageForPageURL instead.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/qt/QtWebIconDatabase.h:37
&gt; &gt; +class QWEBKIT_EXPORT QtWebIconDatabase : public QObject {
&gt; 
&gt; I don&apos;t think we need to export this class, do we?

We don&apos;t, thanks for pointing that out. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495698</commentid>
    <comment_count>6</comment_count>
    <who name="Rafael Brandao">rafael.lobo</who>
    <bug_when>2011-11-03 12:06:08 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 113256 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=113256&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/qt/declarative/plugin.cpp:55
&gt; &gt; +        qmlRegisterType&lt;QFavicon&gt;(uri, 3, 0, &quot;Favicon&quot;);
&gt; 
&gt; The class name should be different in my opinion. QWebFavIcon or similar so we respect the naming convention. The QML name also should be different.
&gt; 
&gt; &gt; Source/WebKit2/ChangeLog:6
&gt; &gt; +        Handles favicon data with a singleton QtWebIconDatabase
&gt; 
&gt; The implementation handles...
&gt; 
&gt; &gt; Source/WebKit2/ChangeLog:7
&gt; &gt; +        which will be listened by QML components named Favicon.
&gt; 
&gt; QML component. FavIcon.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qfavicon.cpp:30
&gt; &gt; +QFavicon::QFavicon(QQuickItem* parent)
&gt; 
&gt; Whatever name in the future &quot;i&quot; should be upper case.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qfavicon.h:45
&gt; &gt; +    QDesktopWebView* webView() const { return m_webView; }
&gt; 
&gt; It needs to work for both views.

Thanks! I&apos;ll give more attention to the names this time. I like your suggestions. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502106</commentid>
    <comment_count>7</comment_count>
      <attachid>114991</attachid>
    <who name="Rafael Brandao">rafael.lobo</who>
    <bug_when>2011-11-14 11:10:05 -0800</bug_when>
    <thetext>Created attachment 114991
Use a QDeclarativeImageProvider to display FavIcons instead of creating a new component

QtWebIconDatabase requests a favicon once the webview changes its url, and then it associates an id for the favicon requested. All pages that has the same url will share the same favicon, so they receive the same favicon id and sets its favicon source url with that id. That url will request the icon from QtWebFavIconImageProvider which will access QtWebIconDatabase&apos;s favicon storage to get the QPixmap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502172</commentid>
    <comment_count>8</comment_count>
      <attachid>114991</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2011-11-14 12:17:47 -0800</bug_when>
    <thetext>Comment on attachment 114991
Use a QDeclarativeImageProvider to display FavIcons instead of creating a new component

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

Rafael, there are a bunch of comments. I like that the final solution is smaller than we expected in the beginning, but I feel we need another iteration :-)

I think you could improve the patch ChangeLog by explaining that the icons are actually stored on the UIProcess and how this relates to the IconDatabase in the WebProcess. Understanding this big picture helps understanding the patch.

&gt; Source/WebKit/qt/declarative/plugin.cpp:30
&gt; +#include &quot;qwebfaviconimageprovider.h&quot;

Shouldn&apos;t be public API, so either use &quot;qwebfaviconimageprovider_p.h&quot; or move it to non-API directory if possible.

&gt; Source/WebKit/qt/declarative/plugin.cpp:48
&gt; +
&gt; +#endif

Nit pick: swap these two lines.

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:358
&gt; +        QObject::connect(q_ptr, SIGNAL(urlChanged(QUrl)), qtWebIconDatabase(), SLOT(requestIconIdForPageURL(QUrl)));

Nit pick: use q instead of q_ptr.

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:433
&gt; +void QQuickWebView::requestIconIdForPageURL(const QUrl&amp; pageURL)
&gt; +{
&gt; +    Q_D(const QQuickWebView);
&gt; +    d-&gt;pageProxy-&gt;requestIconIdForPageURL(pageURL);
&gt; +}

I think this shouldn&apos;t be exposed at API level. If other entities in the future want to expose different favicons (History Items), they can do by exposing a favIconSource like the WebView did.

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:439
&gt; +void QQuickWebView::cleanupIconDatabase()
&gt; +{
&gt; +    Q_D(const QQuickWebView);
&gt; +    d-&gt;pageProxy-&gt;cleanupIconDatabase();
&gt; +}

I think this shouldn&apos;t be exposed at API level. At least not in QML. Specially considering that cleanupIconDatabase() would clean for all WebViews, which could be a bit surprising. Maybe a candidate to be in a future object that represents the webcontext in C++?

&gt; Source/WebKit2/UIProcess/API/qt/qwebfaviconimageprovider.cpp:38
&gt; +QPixmap QWebFavIconImageProvider::requestPixmap(const QString &amp;id, QSize *size, const QSize &amp;requestedSize)

Style.

&gt; Source/WebKit2/UIProcess/API/qt/qwebfaviconimageprovider.cpp:44
&gt; +        if (size)
&gt; +            *size = m_defaultFavIcon.size();
&gt; +        return m_defaultFavIcon;

What about replacing this with &quot;icon = m_defaultFavIcon;&quot;?

&gt; Source/WebKit2/UIProcess/API/qt/qwebfaviconimageprovider.h:31
&gt; +    QPixmap requestPixmap(const QString &amp; id, QSize * size, const QSize &amp; requestedSize);

Style.

&gt; Source/WebKit2/UIProcess/WebContext.h:194
&gt; +    String iconDatabasePath() const;

Could add comment why you need that? I think iconDatabasePath() is serving as a getter for the property set as well as a way to get the default value for the property, maybe you can improve this. (Relates to previous comment about setter before)

&gt; Source/WebKit2/UIProcess/qt/QtViewInterface.h:88
&gt; +    virtual void didChangeFavIconSource(const QUrl&amp;);

Is this a fit for ViewInterface? I wonder if a SIGNAL in QtWebPageProxy would suffice -- specially because later you ask the QtWebPageProxy in the property getter.

&gt; Source/WebKit2/UIProcess/qt/QtWebIconDatabase.cpp:36
&gt; +QtWebIconDatabase* qtWebIconDatabase()
&gt; +{
&gt; +    return globalQtIconDatabase;
&gt; +}

Not very important, but what about changing it to a static class function and storing the globalQtIconDatabase as a static class member?

&gt; Source/WebKit2/UIProcess/qt/QtWebIconDatabase.cpp:49
&gt; +    // FIXME: user should be able to set its own icon database path
&gt; +    // rather than always using the default path.

You can remove this. This is not a concern right now, we don&apos;t support this level of customization for other things as well.

&gt; Source/WebKit2/UIProcess/qt/QtWebIconDatabase.cpp:50
&gt; +    m_context-&gt;setIconDatabasePath(m_context-&gt;iconDatabasePath());

I think this line deserve some explanation: looks like setting something to its current value. I know that setIconDatabasePath have a side effect that you want to trigger, and the default path is accessible by the &quot;getter&quot;. Maybe you can even improve this in WebContext in another patch ;-)

&gt; Source/WebKit2/UIProcess/qt/QtWebIconDatabase.cpp:61
&gt; +    if (!m_context)
&gt; +        return QPixmap();

I think this case will never happen with current code. Same applies for the next functions.

&gt; Source/WebKit2/UIProcess/qt/QtWebIconDatabase.cpp:72
&gt; +    QPixmap* nativeImage = image-&gt;nativeImageForCurrentFrame();
&gt; +    if (!nativeImage)
&gt; +        return QPixmap();
&gt; +
&gt; +    return *nativeImage;

When image is destroyed, will this new QPixmap still be valid? Or at this point we know more about the image&apos;s lifetime?

&gt; Source/WebKit2/UIProcess/qt/QtWebIconDatabase.cpp:84
&gt; +    m_pixmapForIconId[++m_lastIconId] = icon;

Maybe create a getNextAvailableIconId() function? I&apos;ll let Alexis complain about the overflow ;-)

&gt; Source/WebKit2/UIProcess/qt/QtWebIconDatabase.cpp:98
&gt; +    QMap&lt;int, QPixmap&gt;::iterator it = m_pixmapForIconId.find(id);

const_iterator?

&gt; Source/WebKit2/UIProcess/qt/QtWebIconDatabase.cpp:108
&gt; +    if (it != m_retainCountForIconId.constEnd()) {

end() instead of constEnd()?

&gt; Source/WebKit2/UIProcess/qt/QtWebIconDatabase.cpp:109
&gt; +        ++m_retainCountForIconId[id];

You can change the iterator value here, instead of looking up again.

&gt; Source/WebKit2/UIProcess/qt/QtWebIconDatabase.cpp:118
&gt; +    if (it == m_retainCountForIconId.constEnd())

end() instead of constEnd()?

&gt; Source/WebKit2/UIProcess/qt/QtWebIconDatabase.cpp:127
&gt; +    --m_retainCountForIconId[id];

Same as before, use iterator value instead of looking it up again.

&gt; Source/WebKit2/UIProcess/qt/QtWebIconDatabase.h:59
&gt; +    WebContext* m_context;

Maybe just save a reference to the IconDatabase is enough?

&gt; Source/WebKit2/UIProcess/qt/QtWebPageProxy.cpp:88
&gt; +        // FIXME: This is where the icondatabase&apos;s client is injected,
&gt; +        // if there&apos;s no instance of it by now, then it&apos;s created.

I don&apos;t think you need this comment.

&gt; Source/WebKit2/UIProcess/qt/QtWebPageProxy.cpp:177
&gt; +            if (qtWebIconDatabase())
&gt; +                delete qtWebIconDatabase();

You don&apos;t need the &quot;if&quot; here, just delete.

&gt; Source/WebKit2/UIProcess/qt/QtWebPageProxy.cpp:943
&gt; +void QtWebPageProxy::setFavIconId(int id)

Nit pick: updateFavIconId()? :)

&gt; Source/WebKit2/UIProcess/qt/QtWebPageProxy.cpp:945
&gt; +    if (!qtWebIconDatabase() || m_favIconId == id)

Do we need to check qtWebIconDatabase() here?

&gt; Source/WebKit2/UIProcess/qt/QtWebPageProxy.h:271
&gt; +    int m_favIconId;
&gt; +    QUrl m_favIconSource;

It doesn&apos;t feel right that we need to keep two representations of the same data. Can the string be always generated? Usually this property will be queried once each time it changed (or twice if you count the value passed in the signal).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502554</commentid>
    <comment_count>9</comment_count>
      <attachid>115075</attachid>
    <who name="Rafael Brandao">rafael.lobo</who>
    <bug_when>2011-11-14 17:56:55 -0800</bug_when>
    <thetext>Created attachment 115075
Addressing caio&apos;s comments on previous patch.

Thanks Caio for the review. I&apos;ve had some trouble when I&apos;ve changed the header/source files to &quot;_p&quot; suffix, so I have to include it differently now on plugin.cpp. I did the changes you proposed, let me know if there&apos;s something missing or needing improvement. On MiniBrowser, we only display the favicon for the current page (previously I had a click event there to show how to cleanup the database).

I&apos;ve tried to explain a bit more on ChangeLog, hope it was clear enough and not too long. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502600</commentid>
    <comment_count>10</comment_count>
      <attachid>115088</attachid>
    <who name="Rafael Brandao">rafael.lobo</who>
    <bug_when>2011-11-14 20:15:01 -0800</bug_when>
    <thetext>Created attachment 115088
Just a small change on ChangeLog.

I&apos;d also want to notice that a few changes on this patch are there just to fix style issues (meaningless names, alphabetical order of includes, and so on).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503744</commentid>
    <comment_count>11</comment_count>
      <attachid>114991</attachid>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-11-16 03:45:36 -0800</bug_when>
    <thetext>Comment on attachment 114991
Use a QDeclarativeImageProvider to display FavIcons instead of creating a new component

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

&gt; Source/WebKit/qt/declarative/plugin.cpp:45
&gt; +        engine-&gt;addImageProvider(QLatin1String(&quot;favicon&quot;), new QWebFavIconImageProvider);

The documentation doesn&apos;t say anything (which you should probably fix) but what about the ownership of the provider?

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.h:58
&gt; +    Q_PROPERTY(QUrl favIconSource READ favIconSource NOTIFY favIconSourceChanged)

FINAL missing we want to get the optimizations of QML and we know that this function is not meant to be overridden by a subclass.

&gt; Source/WebKit2/UIProcess/API/qt/qwebfaviconimageprovider.cpp:30
&gt; +    m_defaultFavIcon.fill(QColor(0, 0, 0, 0));

What about Qt::transparent?

&gt;&gt; Source/WebKit2/UIProcess/qt/QtWebIconDatabase.cpp:108
&gt;&gt; +    if (it != m_retainCountForIconId.constEnd()) {
&gt; 
&gt; end() instead of constEnd()?

and you can move the end() call outside the loop as you don&apos;t change the size of the container.

&gt;&gt; Source/WebKit2/UIProcess/qt/QtWebIconDatabase.cpp:127
&gt;&gt; +    --m_retainCountForIconId[id];
&gt; 
&gt; Same as before, use iterator value instead of looking it up again.

I feel this entire block weird code. Is the map the best approach? What you want here is a basic ref counting and when the last ref is released then the thing goes away.

&gt; Source/WebKit2/UIProcess/qt/QtWebIconDatabase.h:62
&gt; +    int m_lastIconId;

This may overflow. Think about embedded system where the system is never restarted. Could be improved in a separate patch but still need to be fixed to me. We have plenty of war stories in Qt where this happened. Not sure about the WebKit code base in general...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503941</commentid>
    <comment_count>12</comment_count>
    <who name="Rafael Brandao">rafael.lobo</who>
    <bug_when>2011-11-16 08:56:58 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 114991 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=114991&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/qt/declarative/plugin.cpp:45
&gt; &gt; +        engine-&gt;addImageProvider(QLatin1String(&quot;favicon&quot;), new QWebFavIconImageProvider);
&gt; 
&gt; The documentation doesn&apos;t say anything (which you should probably fix) but what about the ownership of the provider?

Actually it does: http://doc.qt.nokia.com/5.0-snapshot/qdeclarativeengine.html#addImageProvider. The QDeclarativeEngine takes the ownership.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.h:58
&gt; &gt; +    Q_PROPERTY(QUrl favIconSource READ favIconSource NOTIFY favIconSourceChanged)
&gt; 
&gt; FINAL missing we want to get the optimizations of QML and we know that this function is not meant to be overridden by a subclass.

Will do that.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qwebfaviconimageprovider.cpp:30
&gt; &gt; +    m_defaultFavIcon.fill(QColor(0, 0, 0, 0));
&gt; 
&gt; What about Qt::transparent?

Sounds good. :)

&gt; 
&gt; &gt;&gt; Source/WebKit2/UIProcess/qt/QtWebIconDatabase.cpp:108
&gt; &gt;&gt; +    if (it != m_retainCountForIconId.constEnd()) {
&gt; &gt; 
&gt; &gt; end() instead of constEnd()?
&gt; 
&gt; and you can move the end() call outside the loop as you don&apos;t change the size of the container.

I don&apos;t understand what loop you&apos;re talking about.

&gt; 
&gt; &gt;&gt; Source/WebKit2/UIProcess/qt/QtWebIconDatabase.cpp:127
&gt; &gt;&gt; +    --m_retainCountForIconId[id];
&gt; &gt; 
&gt; &gt; Same as before, use iterator value instead of looking it up again.
&gt; 
&gt; I feel this entire block weird code. Is the map the best approach? What you want here is a basic ref counting and when the last ref is released then the thing goes away.

As I&apos;m not reusing icon ids so I may get a long value for it eventually. But on the way there might be many holes (ids that has been discarded). The QMap will abstract this for now, but we could improve it to use direct access in an array once we get the icon ids generated in a better way.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/qt/QtWebIconDatabase.h:62
&gt; &gt; +    int m_lastIconId;
&gt; 
&gt; This may overflow. Think about embedded system where the system is never restarted. Could be improved in a separate patch but still need to be fixed to me. We have plenty of war stories in Qt where this happened. Not sure about the WebKit code base in general...

I see. This will be done in a following patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503953</commentid>
    <comment_count>13</comment_count>
      <attachid>114991</attachid>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-11-16 09:10:22 -0800</bug_when>
    <thetext>Comment on attachment 114991
Use a QDeclarativeImageProvider to display FavIcons instead of creating a new component

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

&gt;&gt;&gt;&gt; Source/WebKit2/UIProcess/qt/QtWebIconDatabase.cpp:108
&gt;&gt;&gt;&gt; +    if (it != m_retainCountForIconId.constEnd()) {
&gt;&gt;&gt; 
&gt;&gt;&gt; end() instead of constEnd()?
&gt;&gt; 
&gt;&gt; and you can move the end() call outside the loop as you don&apos;t change the size of the container.
&gt; 
&gt; I don&apos;t understand what loop you&apos;re talking about.

Yes I thought the if was a &quot;for&quot;. I smoked too much...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>504084</commentid>
    <comment_count>14</comment_count>
      <attachid>115088</attachid>
    <who name="Jesus Sanchez-Palencia">jesus</who>
    <bug_when>2011-11-16 11:28:01 -0800</bug_when>
    <thetext>Comment on attachment 115088
Just a small change on ChangeLog.

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

Nitpick mode on :)

&gt; Source/WebKit/qt/declarative/plugin.cpp:23
&gt; +#include &lt;QtDeclarative/qdeclarativeengine.h&gt;

if we are only using this include when HAVE_WEBKIT2 is defined, perhaps we should move this include in there as well?

&gt; Source/WebKit2/ChangeLog:6
&gt; +        QtWebIconDatabase was created to handle FavIcon requests and store

&quot;(...) and stores them (...)&quot; or &quot;(...) and to store them (...)&quot; ?!

&gt; Source/WebKit2/UIProcess/API/qt/qwebfaviconimageprovider_p.cpp:38
&gt; +QPixmap QWebFavIconImageProvider::requestPixmap(const QString&amp; id, QSize* size, const QSize&amp;)

Does our style agree with leaving this last QSize without the var name in a cpp?

&gt; Source/WebKit2/UIProcess/qt/ClientImpl.cpp:181
&gt; +    // FIXME: implement the callback for this event.

Why adding this callback now? You could just leave it for the next patch, right?

&gt; Source/WebKit2/UIProcess/qt/ClientImpl.cpp:382
&gt; +    iconDatabaseClient.didRemoveAllIcons = qt_wk_iconDatabaseDidRemoveAllIcons;

Ditto.

&gt; Source/WebKit2/UIProcess/qt/QtWebIconDatabase.cpp:31
&gt; +QtWebIconDatabase* QtWebIconDatabase::m_instance = 0;

change it to follow the s_ naming pattern, perhaps?



The rest we have talked live, so everything else LGTM!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>504095</commentid>
    <comment_count>15</comment_count>
      <attachid>115088</attachid>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-11-16 11:36:36 -0800</bug_when>
    <thetext>Comment on attachment 115088
Just a small change on ChangeLog.

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

&gt;&gt; Source/WebKit2/UIProcess/API/qt/qwebfaviconimageprovider_p.cpp:38
&gt;&gt; +QPixmap QWebFavIconImageProvider::requestPixmap(const QString&amp; id, QSize* size, const QSize&amp;)
&gt; 
&gt; Does our style agree with leaving this last QSize without the var name in a cpp?

Seems to be a common practice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>504136</commentid>
    <comment_count>16</comment_count>
      <attachid>115088</attachid>
    <who name="Jesus Sanchez-Palencia">jesus</who>
    <bug_when>2011-11-16 12:30:03 -0800</bug_when>
    <thetext>Comment on attachment 115088
Just a small change on ChangeLog.

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

&gt; Source/WebKit2/UIProcess/qt/QtWebIconDatabase.h:62
&gt; +    WebIconDatabase* m_iconDatabase;

I would protect this in a RefPtr and make the init() become create().

&gt; Source/WebKit2/UIProcess/qt/QtWebPageProxy.cpp:173
&gt; +            delete QtWebIconDatabase::instance();

I&apos;m almost sure you will need to ensure that QtWebIconDatabase::m_instance = 0 as well. So, again, maybe you could protect it in a RefPtr and then call clear() here? Whatever you like!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>504160</commentid>
    <comment_count>17</comment_count>
      <attachid>115427</attachid>
    <who name="Rafael Brandao">rafael.lobo</who>
    <bug_when>2011-11-16 12:52:48 -0800</bug_when>
    <thetext>Created attachment 115427
Addressing some of Jesus&apos; concerns and added QML test to check if FavIcon load is done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>504332</commentid>
    <comment_count>18</comment_count>
      <attachid>115463</attachid>
    <who name="Rafael Brandao">rafael.lobo</who>
    <bug_when>2011-11-16 15:37:56 -0800</bug_when>
    <thetext>Created attachment 115463
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509239</commentid>
    <comment_count>19</comment_count>
    <who name="Rafael Brandao">rafael.lobo</who>
    <bug_when>2011-11-25 12:11:36 -0800</bug_when>
    <thetext>Could anyone review this? At this point this need a new rebase, but I&apos;m more worried about the concept itself... are we ok about it (the image provider solution)?

I forgot to say, but in the last patch I&apos;ve added a qmltest for the favicon that checks for the favicon&apos;s image size once it changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509252</commentid>
    <comment_count>20</comment_count>
      <attachid>115463</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-11-25 13:23:33 -0800</bug_when>
    <thetext>Comment on attachment 115463
Patch

I like the general concept. I think however that the property in WebView should just be called &quot;icon&quot;.

The favourite icon is such a basic concept that we probably should keep it straight in the WebView instead of having it in experimental first. Tor Arne, what do you think?

Conceptually the icon urls should continue to work when the WebView is destroyed or showing a different url. This may make the current id based storage unsuitable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509253</commentid>
    <comment_count>21</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-11-25 13:36:15 -0800</bug_when>
    <thetext>Hang on, maybe I&apos;m totally missing something here (it&apos;s kind of late and it&apos;s been a long week, to bear with me :), but what about this:

The icon database in its C API is all based on the idea that the _key_ to an icon is the page url. So if you&apos;d like to store favourite icons, you need to simply store the urls (and we need to make sure to retain them?). So what again was speaking against having a WebIcon alike element again?

WebIcon { // Is actually a QML Image element
    id: myIcon
    source: myWebView.url;
}

If you&apos;d like to &quot;store&quot; the icon, well, you simply store the page url.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509265</commentid>
    <comment_count>22</comment_count>
    <who name="Rafael Brandao">rafael.lobo</who>
    <bug_when>2011-11-25 14:30:34 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; Hang on, maybe I&apos;m totally missing something here (it&apos;s kind of late and it&apos;s been a long week, to bear with me :), but what about this:

Thank you for your time and comments. :)

&gt; 
&gt; The icon database in its C API is all based on the idea that the _key_ to an icon is the page url. So if you&apos;d like to store favourite icons, you need to simply store the urls (and we need to make sure to retain them?). So what again was speaking against having a WebIcon alike element again?
&gt; 
&gt; WebIcon { // Is actually a QML Image element
&gt;     id: myIcon
&gt;     source: myWebView.url;
&gt; }
&gt; 
&gt; If you&apos;d like to &quot;store&quot; the icon, well, you simply store the page url.

Does this mean that we should use private headers from QtDeclarative? I&apos;d rather try to implement this on top of QQuickImage, so I probably could force an update whenever I wanted and could ignore the use of ids for FavIcons (their purpose was just to create something new to have as source for the image that would force it to be updated)... and could even get rid of the QDeclarativeImageProvider.

The only reason I couldn&apos;t just use the page urls was this limitation on image&apos;s API to request a refresh on it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509276</commentid>
    <comment_count>23</comment_count>
    <who name="Rafael Brandao">rafael.lobo</who>
    <bug_when>2011-11-25 14:59:29 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; (In reply to comment #21)
&gt; &gt; Hang on, maybe I&apos;m totally missing something here (it&apos;s kind of late and it&apos;s been a long week, to bear with me :), but what about this:
&gt; 
&gt; Thank you for your time and comments. :)
&gt; 
&gt; &gt; 
&gt; &gt; The icon database in its C API is all based on the idea that the _key_ to an icon is the page url. So if you&apos;d like to store favourite icons, you need to simply store the urls (and we need to make sure to retain them?). So what again was speaking against having a WebIcon alike element again?
&gt; &gt; 
&gt; &gt; WebIcon { // Is actually a QML Image element
&gt; &gt;     id: myIcon
&gt; &gt;     source: myWebView.url;
&gt; &gt; }
&gt; &gt; 
&gt; &gt; If you&apos;d like to &quot;store&quot; the icon, well, you simply store the page url.
&gt; 
&gt; Does this mean that we should use private headers from QtDeclarative? I&apos;d rather try to implement this on top of QQuickImage, so I probably could force an update whenever I wanted and could ignore the use of ids for FavIcons (their purpose was just to create something new to have as source for the image that would force it to be updated)... and could even get rid of the QDeclarativeImageProvider.
&gt; 
&gt; The only reason I couldn&apos;t just use the page urls was this limitation on image&apos;s API to request a refresh on it.

Actually the image provider will still be necessary, but there&apos;s no problem to keep it. I&apos;m planning to add QtDeclarative private headers to try this idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509373</commentid>
    <comment_count>24</comment_count>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2011-11-26 11:02:34 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; Hang on, maybe I&apos;m totally missing something here (it&apos;s kind of late and it&apos;s been a long week, to bear with me :), but what about this:
&gt; 
&gt; The icon database in its C API is all based on the idea that the _key_ to an icon is the page url. So if you&apos;d like to store favourite icons, you need to simply store the urls (and we need to make sure to retain them?). So what again was speaking against having a WebIcon alike element again?
&gt; 
&gt; WebIcon { // Is actually a QML Image element
&gt;     id: myIcon
&gt;     source: myWebView.url;
&gt; }
&gt; 
&gt; If you&apos;d like to &quot;store&quot; the icon, well, you simply store the page url.

I&apos;ll look at this more closely on Monday, but my gut feeling is that we should not need a new QML item type, a regular Image should be able to point its source property to the webview:

Image {
    source: webView.icon
}

Similarly, the navigation history items should expose an icon, so if you&apos;re visualizing the navigation history you&apos;ll have something like:

ListView {
   model: webView.navigationHistory.backItems
   delegate: Component {
       Image {
           source: model.icon
       }
}

Also, the spec [1] says the UA should choose the most appropriate icon, but we might have to think how we would support icons of other sizes, eg

&lt;link rel=icon href=iphone.png sizes=&quot;57x57&quot; type=&quot;image/png&quot;&gt;
  
[1] http://www.w3.org/TR/html5/links.html#rel-icon</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510059</commentid>
    <comment_count>25</comment_count>
    <who name="Rafael Brandao">rafael.lobo</who>
    <bug_when>2011-11-28 12:10:50 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; (In reply to comment #21)
&gt; &gt; Hang on, maybe I&apos;m totally missing something here (it&apos;s kind of late and it&apos;s been a long week, to bear with me :), but what about this:
&gt; &gt; 
&gt; &gt; The icon database in its C API is all based on the idea that the _key_ to an icon is the page url. So if you&apos;d like to store favourite icons, you need to simply store the urls (and we need to make sure to retain them?). So what again was speaking against having a WebIcon alike element again?
&gt; &gt; 
&gt; &gt; WebIcon { // Is actually a QML Image element
&gt; &gt;     id: myIcon
&gt; &gt;     source: myWebView.url;
&gt; &gt; }
&gt; &gt; 
&gt; &gt; If you&apos;d like to &quot;store&quot; the icon, well, you simply store the page url.
&gt; 
&gt; I&apos;ll look at this more closely on Monday, but my gut feeling is that we should not need a new QML item type, a regular Image should be able to point its source property to the webview:
&gt; 
&gt; Image {
&gt;     source: webView.icon
&gt; }

I like the idea of not creating a new element as well. The only problem is that we need to create unique source urls in order to force everything that relies on it to be updated (imagine a favicon that has changed dynamically for example). This idea was already implemented in the last patch.

In the other hand, if we create an element that derives from QQuickImage, it would probably be possible to take control of this update once we receive the signal that the icon has changed for some page url, but we would need to use private headers of qtdeclarative, and as I didn&apos;t see it anywhere on webkit code I think this may not be a good idea.

I would stick with the first option for now, and then we could think of improvements in the future.

&gt; 
&gt; Similarly, the navigation history items should expose an icon, so if you&apos;re visualizing the navigation history you&apos;ll have something like:
&gt; 
&gt; ListView {
&gt;    model: webView.navigationHistory.backItems
&gt;    delegate: Component {
&gt;        Image {
&gt;            source: model.icon
&gt;        }
&gt; }
&gt; 
&gt; Also, the spec [1] says the UA should choose the most appropriate icon, but we might have to think how we would support icons of other sizes, eg
&gt; 
&gt; &lt;link rel=icon href=iphone.png sizes=&quot;57x57&quot; type=&quot;image/png&quot;&gt;
&gt; 
&gt; [1] http://www.w3.org/TR/html5/links.html#rel-icon

There&apos;s currently no support for it on webkit itself, as we only keep one icon for page url for now. Maybe we should use the requested size parameter on image provider&apos;s function as entry-point for this, but we wouldn&apos;t support it right now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511887</commentid>
    <comment_count>26</comment_count>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2011-11-30 10:55:12 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; I like the idea of not creating a new element as well. The only problem is that we need to create unique source urls in order to force everything that relies on it to be updated (imagine a favicon that has changed dynamically for example). This idea was already implemented in the last patch.

Aren&apos;t the urls of favicons uniqe anwyays? If you do a dynamic favicon it would have different urls, either to static images or data-urls? And if the url of the page&apos;s favicon changes, then the webView.icon property will change, and trigger a reload of any Image that has its source property bound to the icon property. Why do we need a derived QQuickImage for this behavior?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511922</commentid>
    <comment_count>27</comment_count>
    <who name="Rafael Brandao">rafael.lobo</who>
    <bug_when>2011-11-30 11:14:01 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; (In reply to comment #25)
&gt; &gt; I like the idea of not creating a new element as well. The only problem is that we need to create unique source urls in order to force everything that relies on it to be updated (imagine a favicon that has changed dynamically for example). This idea was already implemented in the last patch.
&gt; 
&gt; Aren&apos;t the urls of favicons uniqe anwyays? If you do a dynamic favicon it would have different urls, either to static images or data-urls? And if the url of the page&apos;s favicon changes, then the webView.icon property will change, and trigger a reload of any Image that has its source property bound to the icon property. Why do we need a derived QQuickImage for this behavior?

It&apos;s because we map page urls to favicon urls. We don&apos;t use the favicon url itself to get the image from the database. So if a page change its own favicon, its url won&apos;t change (only the favicon url), and then the image source url wouldn&apos;t change as well, unless we do some kind of trick like generating icon ids.

The other point that is also tricky is that when the image gets its image source with, let`s say, the favicon url and somehow try to get the image for it, the icon database may not have that favicon ready... so it would just return an empty QPixmap. But, at some point later, the QPixmap will be ready for use, we just need to request it again... but in this case, we wouldn&apos;t be able to refresh the image, as the favicon url didn&apos;t change, so what we could do to trigger a reload to everything that is associated to this favicon url? If we create an element that is actually a QQuickImage, we can do this... we can force it to update when we need.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512016</commentid>
    <comment_count>28</comment_count>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2011-11-30 12:36:46 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; (In reply to comment #26)
&gt; &gt; (In reply to comment #25)
&gt; &gt; &gt; I like the idea of not creating a new element as well. The only problem is that we need to create unique source urls in order to force everything that relies on it to be updated (imagine a favicon that has changed dynamically for example). This idea was already implemented in the last patch.
&gt; &gt; 
&gt; &gt; Aren&apos;t the urls of favicons uniqe anwyays? If you do a dynamic favicon it would have different urls, either to static images or data-urls? And if the url of the page&apos;s favicon changes, then the webView.icon property will change, and trigger a reload of any Image that has its source property bound to the icon property. Why do we need a derived QQuickImage for this behavior?
&gt; 
&gt; It&apos;s because we map page urls to favicon urls. We don&apos;t use the favicon url itself to get the image from the database. So if a page change its own favicon, its url won&apos;t change (only the favicon url), and then the image source url wouldn&apos;t change as well, unless we do some kind of trick like generating icon ids.

The assumption about a page having only one favicon is limiting us in this case. Sounds like we should fix the mapping part then? 

&gt; The other point that is also tricky is that when the image gets its image source with, let`s say, the favicon url and somehow try to get the image for it, the icon database may not have that favicon ready... so it would just return an empty QPixmap. But, at some point later, the QPixmap will be ready for use, we just need to request it again... but in this case, we wouldn&apos;t be able to refresh the image, as the favicon url didn&apos;t change, so what we could do to trigger a reload to everything that is associated to this favicon url? If we create an element that is actually a QQuickImage, we can do this... we can force it to update when we need.

Our image provider should provide QImages, and block until the image is ready in the database. If the Image needs async loading it can then set asynchronous: true.

Additionally, we can support icons of various sizes, eg touch icons, by respecting the requestedSize argument to the image provider, which maps to the sourceSize property of the image:

Image {
   id: appleTouchIcon
   source: webView.icon
   sourceSize.width: 57
   sourceSize.height: 57
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512067</commentid>
    <comment_count>29</comment_count>
      <attachid>117261</attachid>
    <who name="Rafael Brandao">rafael.lobo</who>
    <bug_when>2011-11-30 13:26:09 -0800</bug_when>
    <thetext>Created attachment 117261
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512075</commentid>
    <comment_count>30</comment_count>
      <attachid>117261</attachid>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2011-11-30 13:36:29 -0800</bug_when>
    <thetext>Comment on attachment 117261
Patch

Let&apos;s clarify how we want to solve this first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512133</commentid>
    <comment_count>31</comment_count>
    <who name="Rafael Brandao">rafael.lobo</who>
    <bug_when>2011-11-30 14:28:02 -0800</bug_when>
    <thetext>&gt; &gt; It&apos;s because we map page urls to favicon urls. We don&apos;t use the favicon url itself to get the image from the database. So if a page change its own favicon, its url won&apos;t change (only the favicon url), and then the image source url wouldn&apos;t change as well, unless we do some kind of trick like generating icon ids.
&gt; 
&gt; The assumption about a page having only one favicon is limiting us in this case. Sounds like we should fix the mapping part then?
&gt;

It is also strange the concept of using the icon url directly. What about bookmarks and history? We conceptually should just keep the page urls for them, not the favicon urls as well. The purpose of the favicons is to be the visual representation of a page and the approach that we already have on WebCore reflects this. What I like about Simon idea is how easily it fits inside the use case present on IconDatabase. WebIcon is basically just a client for it. For all browser-like apps that I have in mind, the usage of WebIcon handles them well.

&gt; &gt; The other point that is also tricky is that when the image gets its image source with, let`s say, the favicon url and somehow try to get the image for it, the icon database may not have that favicon ready... so it would just return an empty QPixmap. But, at some point later, the QPixmap will be ready for use, we just need to request it again... but in this case, we wouldn&apos;t be able to refresh the image, as the favicon url didn&apos;t change, so what we could do to trigger a reload to everything that is associated to this favicon url? If we create an element that is actually a QQuickImage, we can do this... we can force it to update when we need.
&gt; 
&gt; Our image provider should provide QImages, and block until the image is ready in the database. If the Image needs async loading it can then set asynchronous: true.
&gt; 
&gt; Additionally, we can support icons of various sizes, eg touch icons, by respecting the requestedSize argument to the image provider, which maps to the sourceSize property of the image:
&gt; 
&gt; Image {
&gt;    id: appleTouchIcon
&gt;    source: webView.icon
&gt;    sourceSize.width: 57
&gt;    sourceSize.height: 57
&gt; }

The same trick can be used in WebIcon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513648</commentid>
    <comment_count>32</comment_count>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2011-12-02 03:25:13 -0800</bug_when>
    <thetext>Okey, so we had a discussion about this yesterday and came to the following conclusion. Assuming you have the following:

WebView {
    id: webView
}

Image {
    source:  webView.icon
}

We want to support the use-case of dynamic favicons (changing the DOM to change the icon, eg [1]). This means the image item must be notified that the icon changed. The proposed solution of a custom QML element with a side-chain update-signal is not necessary, as QML already has this feature built in: bindings. When the source of the image is bound to the icon property of the webView, any changes to the icon property will update the image. 

This means that when an favicon changes, the webView url needs to change as well. One way of achieving this would be to reflect the real favicon url in the webView.icon url, eg: http://foo.com/icon.png, and the  update it to http://foo.com/icon2.png, etc. This has limitations such as:

 - Not loading the resource through the same QNAM as the web process
 - Not sharing authentication/authorization to resources
 - Not sharing accepted certificates
 - No easy way to expose icons of multiple sized in the api without having multiple properties or a list of icons

We can remedy the first three of these by instead exposing a url to our own image provider:

 image://webicon/______identifier_here_____

Where the identifier is just an encoded version of the icon url. But, that leaves the size variations:

IWebView {
    id: webView
}

Image {
    id: favIcon
    source:  webView.icon
}

Image {
    id: touchIcon
    source:  webView.icon
    sourceSize.width: 57
    sourceSize.height: 57
}

In this case we don&apos;t want the webView.icon property to be the encoded icon-url, since the final icon-url could potentially be different for the two images. This points us back to the page url, since that&apos;s what&apos;s shared between the two.

Incidentally this is also the key to an icon in the icon database (which lives in the UI process), but we&apos;re then left with solving the dynamic icon case. We can solve this by appending an incremental id to the encoded page url every time we get an update from the icon database that icons for a page has changed. So the final url is:

 image://webicon/&lt;encoded page url&gt;/&lt;incremental id&gt;

Ideally this should give us:

  - Loading of icons done by the web process (shared certs, etc)
  - Potential to support multiple sizes
  - Allows updates to the images through the basic binding update mechanism of QML (no extra item needed).

The same url would be reflected in the navigationHistory items, if you want to visualize the back-forward history. And if you&apos;re a browser and want to serialize the browsing history you&apos;ll hook up to loadFinished and record the url and icon url, potentially also fetching the icon data and serializing that too, for faster icon lookups later on.

Does that make sense?


[1] http://ajaxify.com/run/favicon/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514841</commentid>
    <comment_count>33</comment_count>
    <who name="Rafael Brandao">rafael.lobo</who>
    <bug_when>2011-12-04 19:48:19 -0800</bug_when>
    <thetext>(In reply to comment #32)
&gt; Okey, so we had a discussion about this yesterday and came to the following conclusion. Assuming you have the following:
&gt; 
&gt; WebView {
&gt;     id: webView
&gt; }
&gt; 
&gt; Image {
&gt;     source:  webView.icon
&gt; }
&gt; 
&gt; We want to support the use-case of dynamic favicons (changing the DOM to change the icon, eg [1]). This means the image item must be notified that the icon changed. The proposed solution of a custom QML element with a side-chain update-signal is not necessary, as QML already has this feature built in: bindings. When the source of the image is bound to the icon property of the webView, any changes to the icon property will update the image. 
&gt; 
&gt; This means that when an favicon changes, the webView url needs to change as well. One way of achieving this would be to reflect the real favicon url in the webView.icon url, eg: http://foo.com/icon.png, and the  update it to http://foo.com/icon2.png, etc. This has limitations such as:
&gt; 
&gt;  - Not loading the resource through the same QNAM as the web process
&gt;  - Not sharing authentication/authorization to resources
&gt;  - Not sharing accepted certificates
&gt;  - No easy way to expose icons of multiple sized in the api without having multiple properties or a list of icons
&gt; 
&gt; We can remedy the first three of these by instead exposing a url to our own image provider:
&gt; 
&gt;  image://webicon/______identifier_here_____
&gt; 
&gt; Where the identifier is just an encoded version of the icon url. But, that leaves the size variations:
&gt; 
&gt; IWebView {
&gt;     id: webView
&gt; }
&gt; 
&gt; Image {
&gt;     id: favIcon
&gt;     source:  webView.icon
&gt; }
&gt; 
&gt; Image {
&gt;     id: touchIcon
&gt;     source:  webView.icon
&gt;     sourceSize.width: 57
&gt;     sourceSize.height: 57
&gt; }
&gt; 
&gt; In this case we don&apos;t want the webView.icon property to be the encoded icon-url, since the final icon-url could potentially be different for the two images. This points us back to the page url, since that&apos;s what&apos;s shared between the two.
&gt; 
&gt; Incidentally this is also the key to an icon in the icon database (which lives in the UI process), but we&apos;re then left with solving the dynamic icon case. We can solve this by appending an incremental id to the encoded page url every time we get an update from the icon database that icons for a page has changed. So the final url is:
&gt; 
&gt;  image://webicon/&lt;encoded page url&gt;/&lt;incremental id&gt;
&gt; 
&gt; Ideally this should give us:
&gt; 
&gt;   - Loading of icons done by the web process (shared certs, etc)
&gt;   - Potential to support multiple sizes
&gt;   - Allows updates to the images through the basic binding update mechanism of QML (no extra item needed).
&gt; 
&gt; The same url would be reflected in the navigationHistory items, if you want to visualize the back-forward history. And if you&apos;re a browser and want to serialize the browsing history you&apos;ll hook up to loadFinished and record the url and icon url, potentially also fetching the icon data and serializing that too, for faster icon lookups later on.
&gt; 
&gt; Does that make sense?
&gt; 
&gt; 
&gt; [1] http://ajaxify.com/run/favicon/

Makes sense. :)

But I&apos;d like to clarify some points:

* Should we store different images for different incremental ids for the same page url? When I&apos;ve read this, I&apos;ve imagined that we could just discard the id in the end as we are only interested in the page url itself to access the icon database and fetch the icon (and the requested size). So once we get the full url on the image provider, it would just use the page url and ignore the incremental id. But later when we restart the app, we could simply restart the ids as well. And for bookmark/history, we wouldn&apos;t even need to keep the icon url as it could be easily generated later based on its page url.

- I think that if both images points to the same url but one of them has a different requested size, and both images have caching enabled, the image provider will get only one request (so we don&apos;t know if it will get the one with the requested size or not), so in the end, wouldn&apos;t both images be the same?

- As browsers, aren&apos;t we happy enough with the serialization done by the icon database? I mean, do we really need to keep another reference to icons?

I&apos;ll try to get earlier this Monday on office (a few hours from now) so we can talk on IRC. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515579</commentid>
    <comment_count>34</comment_count>
      <attachid>117976</attachid>
    <who name="Rafael Brandao">rafael.lobo</who>
    <bug_when>2011-12-05 18:35:36 -0800</bug_when>
    <thetext>Created attachment 117976
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515581</commentid>
    <comment_count>35</comment_count>
    <who name="Rafael Brandao">rafael.lobo</who>
    <bug_when>2011-12-05 18:39:18 -0800</bug_when>
    <thetext>(In reply to comment #34)
&gt; Created an attachment (id=117976) [details]
&gt; Patch

Let me know what you think of this version. I&apos;ve added a favicon on MiniBrowser so you can see how it can be used. My concern about disabling cache was already addressed by the image provider... it make two different requests for it even when the cache is enabled. But if you ask twice for the same id and same requestedSize, then it applies the cache... cool. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515788</commentid>
    <comment_count>36</comment_count>
      <attachid>117976</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-12-06 03:48:59 -0800</bug_when>
    <thetext>Comment on attachment 117976
Patch

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

Yeah, this feels like it&apos;s the right API. Let&apos;s iterate on the implementation :)

As a general comment, there are a few too many KURL &lt;&gt; QURL &lt;&gt; QString conversions for my taste. Those can be expensive in terms of unnecessary url parsing and copying, especially given that we generally do not seem to extract components from the QUrl but just do the parsing ourselves(!) after convering the QUrl back to a string.

The WK2 C API expects strings, the QML image provider seems to give us strings. It&apos;s only our API layer that needs a QUrl, right? Perhaps there&apos;s a way to stick with strings all the way until we convert to a QUrl in the &quot;last minute&quot; when needed.

&gt; Source/WebKit2/UIProcess/API/qt/qwebiconimageprovider.cpp:44
&gt; +QImage QWebIconImageProvider::requestImage(const QString&amp; id, QSize* size, const QSize&amp; requestedSize)
&gt; +{
&gt; +    RefPtr&lt;QtWebContext&gt; context = QtWebContext::defaultContext();
&gt; +    QtWebIconDatabase* iconDatabase = context-&gt;iconDatabase();
&gt; +    QUrl pageURL = QtWebIconDatabase::fromIconURLtoPageURL(id);

Note how the QML documentation says that requestImage can be called by multiple threads. Is our code thread-safe?

&gt; Source/WebKit2/UIProcess/qt/QtWebIconDatabase.cpp:44
&gt; +    // FIXME: this setter doesn&apos;t only set the icon database path, but it also
&gt; +    // trigger the startup of WebContext&apos;s WebIconDatabase. The getter will return
&gt; +    // the default platform path and will start WebIconDatabase with it.

If it&apos;s a FIXME, perhaps you should also mention what needs to be fixed ;). Do you _not_ want it to start up the database thread here?

&gt; Source/WebKit2/UIProcess/qt/QtWebPageProxy.cpp:471
&gt; +void QtWebPageProxy::onIconReadyForPageURL(const QUrl&amp; pageURL, const QUrl&amp; iconURL)
&gt; +{
&gt; +    if (url() != pageURL)
&gt; +        return;
&gt; +
&gt; +    if (m_iconURL == iconURL)
&gt; +        return;
&gt; +
&gt; +    QtWebIconDatabase* iconDatabase = m_context-&gt;iconDatabase();
&gt; +    QUrl oldPageURL = QtWebIconDatabase::fromIconURLtoPageURL(m_iconURL.toString());
&gt; +    if (!oldPageURL.isEmpty())
&gt; +        iconDatabase-&gt;releaseIconForPageURL(oldPageURL);
&gt; +    m_iconURL = iconURL;
&gt; +    if (!pageURL.isEmpty())
&gt; +        iconDatabase-&gt;retainIconForPageURL(pageURL);
&gt; +
&gt; +    emit m_qmlWebView-&gt;iconChanged(iconURL);
&gt; +}

We&apos;re trying to get rid of QtWebPageProxy. I&apos;d prefer if we did _not_ add any code to a class we&apos;re trying to get rid of :). QQuickWebViewPrivate and Q_PRIVATE_SLOT in QQuickWebView should do the trick I think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515797</commentid>
    <comment_count>37</comment_count>
      <attachid>117976</attachid>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2011-12-06 04:11:53 -0800</bug_when>
    <thetext>Comment on attachment 117976
Patch

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

&gt; Source/WebKit2/UIProcess/qt/QtWebIconDatabase.cpp:90
&gt; +    QUrl iconURL = QUrl(pattern.arg(url.toString()).arg(nextIconID()));

Should we percent/url-encode the url?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515882</commentid>
    <comment_count>38</comment_count>
    <who name="Rafael Brandao">rafael.lobo</who>
    <bug_when>2011-12-06 06:47:21 -0800</bug_when>
    <thetext>(In reply to comment #36)
&gt; (From update of attachment 117976 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=117976&amp;action=review
&gt; 
&gt; Yeah, this feels like it&apos;s the right API. Let&apos;s iterate on the implementation :)
&gt; 
&gt; As a general comment, there are a few too many KURL &lt;&gt; QURL &lt;&gt; QString conversions for my taste. Those can be expensive in terms of unnecessary url parsing and copying, especially given that we generally do not seem to extract components from the QUrl but just do the parsing ourselves(!) after convering the QUrl back to a string.
&gt; 
&gt; The WK2 C API expects strings, the QML image provider seems to give us strings. It&apos;s only our API layer that needs a QUrl, right? Perhaps there&apos;s a way to stick with strings all the way until we convert to a QUrl in the &quot;last minute&quot; when needed.

Good point. I&apos;ll fix that.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qwebiconimageprovider.cpp:44
&gt; &gt; +QImage QWebIconImageProvider::requestImage(const QString&amp; id, QSize* size, const QSize&amp; requestedSize)
&gt; &gt; +{
&gt; &gt; +    RefPtr&lt;QtWebContext&gt; context = QtWebContext::defaultContext();
&gt; &gt; +    QtWebIconDatabase* iconDatabase = context-&gt;iconDatabase();
&gt; &gt; +    QUrl pageURL = QtWebIconDatabase::fromIconURLtoPageURL(id);
&gt; 
&gt; Note how the QML documentation says that requestImage can be called by multiple threads. Is our code thread-safe?

We are actually using IconDatabase::synchronousIconForPageURL that I know to be thread-safe. The other stuff are just access to pointers or string manipulation. I believe this make it thread-safe as well, right?

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/qt/QtWebIconDatabase.cpp:44
&gt; &gt; +    // FIXME: this setter doesn&apos;t only set the icon database path, but it also
&gt; &gt; +    // trigger the startup of WebContext&apos;s WebIconDatabase. The getter will return
&gt; &gt; +    // the default platform path and will start WebIconDatabase with it.
&gt; 
&gt; If it&apos;s a FIXME, perhaps you should also mention what needs to be fixed ;). Do you _not_ want it to start up the database thread here?

Oh I get it. What I actually meant is that it looks weird that I use a set to its get value... it looks wrong. But I actually want it to startup the database right there, and this set is the one who does the trick. :)

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/qt/QtWebPageProxy.cpp:471
&gt; &gt; +void QtWebPageProxy::onIconReadyForPageURL(const QUrl&amp; pageURL, const QUrl&amp; iconURL)
&gt; &gt; +{
&gt; &gt; +    if (url() != pageURL)
&gt; &gt; +        return;
&gt; &gt; +
&gt; &gt; +    if (m_iconURL == iconURL)
&gt; &gt; +        return;
&gt; &gt; +
&gt; &gt; +    QtWebIconDatabase* iconDatabase = m_context-&gt;iconDatabase();
&gt; &gt; +    QUrl oldPageURL = QtWebIconDatabase::fromIconURLtoPageURL(m_iconURL.toString());
&gt; &gt; +    if (!oldPageURL.isEmpty())
&gt; &gt; +        iconDatabase-&gt;releaseIconForPageURL(oldPageURL);
&gt; &gt; +    m_iconURL = iconURL;
&gt; &gt; +    if (!pageURL.isEmpty())
&gt; &gt; +        iconDatabase-&gt;retainIconForPageURL(pageURL);
&gt; &gt; +
&gt; &gt; +    emit m_qmlWebView-&gt;iconChanged(iconURL);
&gt; &gt; +}
&gt; 
&gt; We&apos;re trying to get rid of QtWebPageProxy. I&apos;d prefer if we did _not_ add any code to a class we&apos;re trying to get rid of :). QQuickWebViewPrivate and Q_PRIVATE_SLOT in QQuickWebView should do the trick I think.

Oh, my mistake. Will move this out, sorry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515901</commentid>
    <comment_count>39</comment_count>
    <who name="Rafael Brandao">rafael.lobo</who>
    <bug_when>2011-12-06 07:31:42 -0800</bug_when>
    <thetext>&gt; &gt; &gt; Source/WebKit2/UIProcess/API/qt/qwebiconimageprovider.cpp:44
&gt; &gt; &gt; +QImage QWebIconImageProvider::requestImage(const QString&amp; id, QSize* size, const QSize&amp; requestedSize)
&gt; &gt; &gt; +{
&gt; &gt; &gt; +    RefPtr&lt;QtWebContext&gt; context = QtWebContext::defaultContext();
&gt; &gt; &gt; +    QtWebIconDatabase* iconDatabase = context-&gt;iconDatabase();
&gt; &gt; &gt; +    QUrl pageURL = QtWebIconDatabase::fromIconURLtoPageURL(id);
&gt; &gt; 
&gt; &gt; Note how the QML documentation says that requestImage can be called by multiple threads. Is our code thread-safe?
&gt; 
&gt; We are actually using IconDatabase::synchronousIconForPageURL that I know to be thread-safe. The other stuff are just access to pointers or string manipulation. I believe this make it thread-safe as well, right?
&gt; 

Maybe I have misunderstand the concept of thread-safety, but if you mean you want them all to work _at the same time_, then the answer is no. :-( IconDatabase&apos;s synchronousIconForPageURL is protected by mutex lockers and it was meant to allow only one thread per time.

There&apos;s also another concern that is commented in the end of that IconDatabase function... it starts with &quot;PARANOID DISCUSSION&quot; and it says that we can&apos;t control when the Image we get from IconDatabase will be disposed from memory, then there&apos;s a chance that we don&apos;t even have a chance to transform it to our client-specific representation (e.g convert to QImage). This was always been the case, but I believe that when we play with many threads this becomes more risky. :-/

Should we stick with a image provider that uses a QPixmap for now until we figure out a good way to do this on IconDatabase, or try it out with a QImage and see how it goes? Or another suggestion?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515909</commentid>
    <comment_count>40</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-12-06 07:38:55 -0800</bug_when>
    <thetext>(In reply to comment #39)
&gt; &gt; &gt; &gt; Source/WebKit2/UIProcess/API/qt/qwebiconimageprovider.cpp:44
&gt; &gt; &gt; &gt; +QImage QWebIconImageProvider::requestImage(const QString&amp; id, QSize* size, const QSize&amp; requestedSize)
&gt; &gt; &gt; &gt; +{
&gt; &gt; &gt; &gt; +    RefPtr&lt;QtWebContext&gt; context = QtWebContext::defaultContext();
&gt; &gt; &gt; &gt; +    QtWebIconDatabase* iconDatabase = context-&gt;iconDatabase();
&gt; &gt; &gt; &gt; +    QUrl pageURL = QtWebIconDatabase::fromIconURLtoPageURL(id);
&gt; &gt; &gt; 
&gt; &gt; &gt; Note how the QML documentation says that requestImage can be called by multiple threads. Is our code thread-safe?
&gt; &gt; 
&gt; &gt; We are actually using IconDatabase::synchronousIconForPageURL that I know to be thread-safe. The other stuff are just access to pointers or string manipulation. I believe this make it thread-safe as well, right?
&gt; &gt; 
&gt; 
&gt; Maybe I have misunderstand the concept of thread-safety, but if you mean you want them all to work _at the same time_, then the answer is no. :-( IconDatabase&apos;s synchronousIconForPageURL is protected by mutex lockers and it was meant to allow only one thread per time.

I don&apos;t think the calls have to work at the same time. I just glanced at the code and I think you&apos;re right, this code is probably safe to call.
 
&gt; There&apos;s also another concern that is commented in the end of that IconDatabase function... it starts with &quot;PARANOID DISCUSSION&quot; and it says that we can&apos;t control when the Image we get from IconDatabase will be disposed from memory, then there&apos;s a chance that we don&apos;t even have a chance to transform it to our client-specific representation (e.g convert to QImage). This was always been the case, but I believe that when we play with many threads this becomes more risky. :-/

I suppose what we could do here to avoid taking any risk is to use the fact that we have only one single caller site for this function (the code you&apos;re adding), and there we _could_ add another protecting mutex that is released when we successfully created our QImage.
 
&gt; Should we stick with a image provider that uses a QPixmap for now until we figure out a good way to do this on IconDatabase, or try it out with a QImage and see how it goes? Or another suggestion?

No, I think we should use QImage only. In Qt 5 QPixmap is just a QImage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516342</commentid>
    <comment_count>41</comment_count>
      <attachid>118136</attachid>
    <who name="Rafael Brandao">rafael.lobo</who>
    <bug_when>2011-12-06 16:17:34 -0800</bug_when>
    <thetext>Created attachment 118136
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516344</commentid>
    <comment_count>42</comment_count>
    <who name="Rafael Brandao">rafael.lobo</who>
    <bug_when>2011-12-06 16:25:46 -0800</bug_when>
    <thetext>The fixes and proposals as we&apos;ve talked on IRC today. I&apos;d be happy to add tests in a following patch. I already have it in a previous patch, but it has been a pain to keep all of this rebased. In any case, there&apos;s MiniBrowser&apos;s favicon as example.

It was more complicated than I&apos;ve thought to avoid many conversions between QUrl &lt;-&gt; QString &lt;-&gt; String, then I&apos;ve figured out which ones would be more costly if they were not of a certain type and then I&apos;ve kept them like that. Of course at some points I still have to convert but I believe it&apos;s far less than before. I&apos;ve also decided to convert directly to String in many cases, instead of QUrl -&gt; QString -&gt; String as before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517352</commentid>
    <comment_count>43</comment_count>
      <attachid>118136</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-12-08 06:07:07 -0800</bug_when>
    <thetext>Comment on attachment 118136
Patch

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

&gt; Source/WebKit2/UIProcess/qt/QtWebIconDatabaseClient.cpp:93
&gt; +    QString iconUrlString = url.toString();
&gt; +    QImage icon = iconImageForPageURL(iconUrlString);
&gt; +    if (icon.isNull())
&gt; +        return;
&gt; +
&gt; +    static QString pattern = QLatin1String(&quot;image://webicon/%1/%2&quot;);
&gt; +    QUrl iconURL(pattern.arg(iconUrlString).arg(nextIconID()));

This way of encoding the url into the icon url is wrong. &quot;iconUrlString&quot; may contain characters that are not permitted as the path, such as ? or #.

I believe one correct way of doing that would be something along these lines:

QUrl iconURL;
iconURL.setScheme(QStringLiteral(&quot;image&quot;));
iconURL.setHost(QStringLiteral(&quot;webicon&quot;));
iconURL.setEncodedPath(url.toEncoded());  // Note how we avoid an unecessary url.toString() here!
iconURL.setFragment(QString::number(nextIconID());

Note that using this pattern and the QUrl API, you can avoid your own parsing easily:

QUrl iconURL = ...
ASSERT(iconURL.scheme() == QStringLiteral(&quot;image&quot;));
ASSERT(iconURL.host() == QStringLiteral(&quot;webicon&quot;));

QUrl pageUrl = QUrl::fromEncoded(iconURL.encodedPath());


However this format isn&apos;t quiite as easy to decode if all you have is a unicode string, as we get it from the image provider and would want to avoid
throwing QUrl&apos;s parser at it (avoid QUrl-from-QString creation as much as possible). So perhaps a format like this would be better:

image://webicon/&lt;id&gt;/url-encoded-as-path

Then you could search for the slash:

QString imageId = ...;

ASSERT(imageId.startsWith(&quot;image://webicon/&quot;));

imageId.remove(0, 16); // Remove leading scheme and host.
imageId.remove(0, id.indexOf(&apos;/&apos;) + 1); // Ignore &amp; remove icon id.

QString pageURL = QUrl::fromPercentEncoding(id.toUtf8());</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517391</commentid>
    <comment_count>44</comment_count>
      <attachid>118136</attachid>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2011-12-08 07:11:34 -0800</bug_when>
    <thetext>Comment on attachment 118136
Patch

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

&gt;&gt; Source/WebKit2/UIProcess/qt/QtWebIconDatabaseClient.cpp:93
&gt;&gt; +    QUrl iconURL(pattern.arg(iconUrlString).arg(nextIconID()));
&gt; 
&gt; This way of encoding the url into the icon url is wrong. &quot;iconUrlString&quot; may contain characters that are not permitted as the path, such as ? or #.
&gt; 
&gt; I believe one correct way of doing that would be something along these lines:
&gt; 
&gt; QUrl iconURL;
&gt; iconURL.setScheme(QStringLiteral(&quot;image&quot;));
&gt; iconURL.setHost(QStringLiteral(&quot;webicon&quot;));
&gt; iconURL.setEncodedPath(url.toEncoded());  // Note how we avoid an unecessary url.toString() here!
&gt; iconURL.setFragment(QString::number(nextIconID());
&gt; 
&gt; Note that using this pattern and the QUrl API, you can avoid your own parsing easily:
&gt; 
&gt; QUrl iconURL = ...
&gt; ASSERT(iconURL.scheme() == QStringLiteral(&quot;image&quot;));
&gt; ASSERT(iconURL.host() == QStringLiteral(&quot;webicon&quot;));
&gt; 
&gt; QUrl pageUrl = QUrl::fromEncoded(iconURL.encodedPath());
&gt; 
&gt; 
&gt; However this format isn&apos;t quiite as easy to decode if all you have is a unicode string, as we get it from the image provider and would want to avoid
&gt; throwing QUrl&apos;s parser at it (avoid QUrl-from-QString creation as much as possible). So perhaps a format like this would be better:
&gt; 
&gt; image://webicon/&lt;id&gt;/url-encoded-as-path
&gt; 
&gt; Then you could search for the slash:
&gt; 
&gt; QString imageId = ...;
&gt; 
&gt; ASSERT(imageId.startsWith(&quot;image://webicon/&quot;));
&gt; 
&gt; imageId.remove(0, 16); // Remove leading scheme and host.
&gt; imageId.remove(0, id.indexOf(&apos;/&apos;) + 1); // Ignore &amp; remove icon id.
&gt; 
&gt; QString pageURL = QUrl::fromPercentEncoding(id.toUtf8());

Come to think of it, the id should probably be a hash of the real icon url (you can use String::hash()). Otherwise the QML image cache will treat every change to the url as a new image and cache that, even if you&apos;re just switching between two icons (urls). We could also use QImage&apos;s key/hash, but that&apos;s mor expensive, so the url hash is a compromise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517526</commentid>
    <comment_count>45</comment_count>
    <who name="Rafael Brandao">rafael.lobo</who>
    <bug_when>2011-12-08 10:26:19 -0800</bug_when>
    <thetext>(In reply to comment #44)
&gt; 
&gt; Come to think of it, the id should probably be a hash of the real icon url (you can use String::hash()). Otherwise the QML image cache will treat every change to the url as a new image and cache that, even if you&apos;re just switching between two icons (urls). We could also use QImage&apos;s key/hash, but that&apos;s mor expensive, so the url hash is a compromise.

Excellent idea! :D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518630</commentid>
    <comment_count>46</comment_count>
      <attachid>118664</attachid>
    <who name="Rafael Brandao">rafael.lobo</who>
    <bug_when>2011-12-09 16:40:19 -0800</bug_when>
    <thetext>Created attachment 118664
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518635</commentid>
    <comment_count>47</comment_count>
    <who name="Rafael Brandao">rafael.lobo</who>
    <bug_when>2011-12-09 16:44:36 -0800</bug_when>
    <thetext>(In reply to comment #46)
&gt; Created an attachment (id=118664) [details]
&gt; Patch

I&apos;ve got some weird ids coming from image provider when I didn&apos;t put a &apos;/&apos; preceding the path when I was setting the icon url. In the docs it seems that it should be there, so I had to prepend it. :/

I really loved the idea of the hash, it made things look simpler and of course a lot more efficient. :)

Let me know your thoughts about this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518795</commentid>
    <comment_count>48</comment_count>
      <attachid>118664</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-12-10 08:04:39 -0800</bug_when>
    <thetext>Comment on attachment 118664
Patch

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

a few comments but this is starting to look really nice. Very easy to use from qml. Could you make the example show how to show a fallback icon if the page has no favicon? a bit like in QtTestBrowser

&gt; Source/WebKit/qt/ChangeLog:7
&gt; +        as source for QQuickImages in order to display it. All images

Images with s?  Don&apos;t you want to say QQuickImage

&gt; Source/WebKit/qt/ChangeLog:10
&gt; +        in different times (i.e. dynamically changing favicon).

at* not in

&gt; Source/WebKit/qt/ChangeLog:12
&gt; +        Reviewed by NOBODY (OOPS!).

We normally keep this line just below the bug link

&gt; Source/WebKit2/UIProcess/API/qt/qwebiconimageprovider.cpp:31
&gt; +    , m_defaultFavIcon(1, 1, QImage::Format_ARGB4444_Premultiplied)

Is that a proper default size? or why is it?

&gt; Source/WebKit2/UIProcess/qt/QtWebIconDatabaseClient.cpp:46
&gt; +    // FIXME: a setter using its getter looks wrong but the first actually trigger
&gt; +    // the startup of IconDatabase, this is why we need it. We should separate this setup
&gt; +    // in another function for the sake of clarity.

I think this could be reworded.

// The setter calls the getter here as it triggers the start up of the icon database.
// FIXME: Separate this setup into another method to make this clear.

You could even just drop the last line</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519091</commentid>
    <comment_count>49</comment_count>
      <attachid>118664</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-12-12 03:05:13 -0800</bug_when>
    <thetext>Comment on attachment 118664
Patch

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

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:158
&gt; +    if (q-&gt;url() != pageURL)

The call to q-&gt;url() expands to q-&gt;d-&gt;pageProxy-&gt;url(), so you can simply write

    if (pageProxy-&gt;url() != pageURL)

here.

&gt;&gt; Source/WebKit2/UIProcess/API/qt/qwebiconimageprovider.cpp:31
&gt;&gt; +    , m_defaultFavIcon(1, 1, QImage::Format_ARGB4444_Premultiplied)
&gt; 
&gt; Is that a proper default size? or why is it?

This ties into another aspect of the API that I&apos;m wondering about:

Imagine an application that wants to show a favicon only if there is one and nothing otherwise?

How would we do that? Is it tied to the dimension? like visible: width &gt; 0 &amp;&amp; height &gt; 0?

(or wait, zero doesn&apos;t work because our default favicon is 1x1 :)

&gt; Source/WebKit2/UIProcess/qt/QtWebIconDatabaseClient.cpp:42
&gt; +    : m_imageLock(new WTF::Mutex)

Any particular reason to allocate the mutex on the heap?

(If yes, then at least use an OwnPtr instead of the manual memory management)

&gt; Source/WebKit2/UIProcess/qt/QtWebIconDatabaseClient.cpp:104
&gt; +    url.setScheme(QStringLiteral(&quot;image&quot;));
&gt; +    url.setHost(QStringLiteral(&quot;webicon&quot;));
&gt; +    url.setPath(QString::number(iconID).prepend(&apos;/&apos;));
&gt; +    url.setEncodedFragment(pageURL.toEncoded());

Any particular reason why you chose the fragment to encode the url instead my suggestion of image://webicon/&lt;id&gt;/url-encoded-as-path ?

I personally find the latter easier to read (for debugging) and the extraction of the encoded url from the path can be done without
creating temporary strings (compared to id.right(id.size() - id.indexOf(&apos;#&apos;) - 1)).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520461</commentid>
    <comment_count>50</comment_count>
    <who name="Rafael Brandao">rafael.lobo</who>
    <bug_when>2011-12-13 16:19:59 -0800</bug_when>
    <thetext>(In reply to comment #48)
&gt; (From update of attachment 118664 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=118664&amp;action=review
&gt; 
&gt; a few comments but this is starting to look really nice. Very easy to use from qml. Could you make the example show how to show a fallback icon if the page has no favicon? a bit like in QtTestBrowser

I will have to handle this somehow. My current idea is to clean the icon url (use an empty url) once we request to load a new page. If the page actually has an icon, then we will update it. Then we could check on the size of the icon to realize whether we have one or not.

&gt; 
&gt; &gt; Source/WebKit/qt/ChangeLog:7
&gt; &gt; +        as source for QQuickImages in order to display it. All images
&gt; 
&gt; Images with s?  Don&apos;t you want to say QQuickImage

Sure.

&gt; 
&gt; &gt; Source/WebKit/qt/ChangeLog:10
&gt; &gt; +        in different times (i.e. dynamically changing favicon).
&gt; 
&gt; at* not in

Nice, thanks.

&gt; 
&gt; &gt; Source/WebKit/qt/ChangeLog:12
&gt; &gt; +        Reviewed by NOBODY (OOPS!).
&gt; 
&gt; We normally keep this line just below the bug link

Hm, I don&apos;t remember that but I will fix.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qwebiconimageprovider.cpp:31
&gt; &gt; +    , m_defaultFavIcon(1, 1, QImage::Format_ARGB4444_Premultiplied)
&gt; 
&gt; Is that a proper default size? or why is it?

At that time I just wanted to put a transparent icon there. The size itself is not a problem, but as Simon commented we could use it better, so I will probably discard the default favicon and then let the client handle it.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/qt/QtWebIconDatabaseClient.cpp:46
&gt; &gt; +    // FIXME: a setter using its getter looks wrong but the first actually trigger
&gt; &gt; +    // the startup of IconDatabase, this is why we need it. We should separate this setup
&gt; &gt; +    // in another function for the sake of clarity.
&gt; 
&gt; I think this could be reworded.
&gt; 
&gt; // The setter calls the getter here as it triggers the start up of the icon database.
&gt; // FIXME: Separate this setup into another method to make this clear.
&gt; 
&gt; You could even just drop the last line

Thanks! I have problems with excess with words... like right now in this sentence. :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520467</commentid>
    <comment_count>51</comment_count>
    <who name="Rafael Brandao">rafael.lobo</who>
    <bug_when>2011-12-13 16:27:10 -0800</bug_when>
    <thetext>(In reply to comment #49)
&gt; (From update of attachment 118664 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=118664&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:158
&gt; &gt; +    if (q-&gt;url() != pageURL)
&gt; 
&gt; The call to q-&gt;url() expands to q-&gt;d-&gt;pageProxy-&gt;url(), so you can simply write
&gt; 
&gt;     if (pageProxy-&gt;url() != pageURL)
&gt; 
&gt; here.

I was worried about pageProxy, it may disappear at some point, so I wouldn&apos;t want to change my patch because of that... but I can fix this. :-)

&gt; 
&gt; &gt;&gt; Source/WebKit2/UIProcess/API/qt/qwebiconimageprovider.cpp:31
&gt; &gt;&gt; +    , m_defaultFavIcon(1, 1, QImage::Format_ARGB4444_Premultiplied)
&gt; &gt; 
&gt; &gt; Is that a proper default size? or why is it?
&gt; 
&gt; This ties into another aspect of the API that I&apos;m wondering about:
&gt; 
&gt; Imagine an application that wants to show a favicon only if there is one and nothing otherwise?
&gt; 
&gt; How would we do that? Is it tied to the dimension? like visible: width &gt; 0 &amp;&amp; height &gt; 0?
&gt; 
&gt; (or wait, zero doesn&apos;t work because our default favicon is 1x1 :)
&gt; 

Good point! I didn&apos;t think on the case where there&apos;s no favicon. I will work on this tomorrow and see if I can get better solution, but my idea right now is to get rid of the default favicon and return an empty QImage.

As we can get a favicon of any size, it&apos;s more safe if we specify the size we want to display on the view, so it can make it smaller if we get a bigger one, for example. In this case, I believe we can&apos;t rely on the sizes... I&apos;ve got to give some more thoughts to this, but I&apos;d appreciate ideas. :-)

&gt; &gt; Source/WebKit2/UIProcess/qt/QtWebIconDatabaseClient.cpp:42
&gt; &gt; +    : m_imageLock(new WTF::Mutex)
&gt; 
&gt; Any particular reason to allocate the mutex on the heap?
&gt; 
&gt; (If yes, then at least use an OwnPtr instead of the manual memory management)

I&apos;ve got some trouble trying to include the mutex headers on QtWebIconDatabaseClient header file. Maybe I can get rid of this pointer, but if not I will fix it as you&apos;ve suggested.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/qt/QtWebIconDatabaseClient.cpp:104
&gt; &gt; +    url.setScheme(QStringLiteral(&quot;image&quot;));
&gt; &gt; +    url.setHost(QStringLiteral(&quot;webicon&quot;));
&gt; &gt; +    url.setPath(QString::number(iconID).prepend(&apos;/&apos;));
&gt; &gt; +    url.setEncodedFragment(pageURL.toEncoded());
&gt; 
&gt; Any particular reason why you chose the fragment to encode the url instead my suggestion of image://webicon/&lt;id&gt;/url-encoded-as-path ?
&gt; 
&gt; I personally find the latter easier to read (for debugging) and the extraction of the encoded url from the path can be done without
&gt; creating temporary strings (compared to id.right(id.size() - id.indexOf(&apos;#&apos;) - 1)).

When we use &quot;&lt;id&gt;/url-encoded-as-path&quot;, we are setting this as the path. To accomplish that I would need to concatenate strings earlier just to set it. I&apos;ve thought it would be more efficient to use the fragment instead.

The use of id.right there is because we get a const QString&amp; as id, so I can&apos;t get rid of the prefix as you&apos;ve suggested (actually I think I could but it would involve taking the constness away and I don&apos;t know if the caller of this function will use this id later).

I&apos;m in a hurry to leave, sorry if didn&apos;t make sense. Will try to get earlier tomorrow so we can talk if you want.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522265</commentid>
    <comment_count>52</comment_count>
    <who name="Rafael Brandao">rafael.lobo</who>
    <bug_when>2011-12-15 15:31:30 -0800</bug_when>
    <thetext>A solution to handle both cases when the user wants to display nothing or a different default favicon for his client is to not provide a default favicon. We cannot rely on the favicon size (width and height) because user may set those on its interface so the favicon will adjust its size to it.

In this case what we can do is to rely on the image source for the favicon. If we provide an empty url when there&apos;s no favicon, then we solve our problems. The webview will only change its icon url when we&apos;re sure that we have an image ready for it. So when we have a source into that image, then we should have an image to display, otherwise, we display nothing (and the user can use it to display his own default favicon). Here&apos;s how we could use on MiniBrowser:

    Item {
        id: favIconArea
        width: 16
        height: 16
        anchors {
            left: parent.left
            leftMargin: 4
            verticalCenter: parent.verticalCenter
        }
        Image {
            id: favIcon
            source: webView.icon
            anchors.fill: parent
            visible: source != &apos;&apos;
        }
        Image {
            id: defaultFavIcon
            source: &apos;../icons/favicon.png&apos;
            anchors.fill: parent
            visible: !favIcon.visible
        }
    }

Are we ok with this approach?

And I&apos;m in a bit of trouble to include WTF libraries into icon database client header, as it is a QObject and it complains when compiling its moc file that &quot;error: &apos;WTF_EXPORT_PRIVATE&apos; does not name a type&quot;. I&apos;ll ask the guys here tomorrow if they know a good way to do it, I would love to get rid of that pointer (or use OwnPtr), but right now I don&apos;t know how to do it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523161</commentid>
    <comment_count>53</comment_count>
      <attachid>119700</attachid>
    <who name="Rafael Brandao">rafael.lobo</who>
    <bug_when>2011-12-16 16:52:35 -0800</bug_when>
    <thetext>Created attachment 119700
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523285</commentid>
    <comment_count>54</comment_count>
      <attachid>119700</attachid>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-12-17 04:28:20 -0800</bug_when>
    <thetext>Comment on attachment 119700
Patch

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

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h:56
&gt; +    Q_PROPERTY(QUrl icon READ icon NOTIFY iconChanged)

FINAL? I know the other around doesn&apos;t have it but they should (an easy fix for you).

&gt; Tools/MiniBrowser/qt/qml/BrowserWindow.qml:219
&gt; +                    source: webView.icon

Can you just do -&gt; source : webview.icon != &apos;&apos; ? webView.icon : &quot;../icons/favicon.png&quot; so you have only one Image element?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523909</commentid>
    <comment_count>55</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-12-19 07:39:58 -0800</bug_when>
    <thetext>(In reply to comment #51)
&gt; &gt; &gt; Source/WebKit2/UIProcess/qt/QtWebIconDatabaseClient.cpp:104
&gt; &gt; &gt; +    url.setScheme(QStringLiteral(&quot;image&quot;));
&gt; &gt; &gt; +    url.setHost(QStringLiteral(&quot;webicon&quot;));
&gt; &gt; &gt; +    url.setPath(QString::number(iconID).prepend(&apos;/&apos;));
&gt; &gt; &gt; +    url.setEncodedFragment(pageURL.toEncoded());
&gt; &gt; 
&gt; &gt; Any particular reason why you chose the fragment to encode the url instead my suggestion of image://webicon/&lt;id&gt;/url-encoded-as-path ?
&gt; &gt; 
&gt; &gt; I personally find the latter easier to read (for debugging) and the extraction of the encoded url from the path can be done without
&gt; &gt; creating temporary strings (compared to id.right(id.size() - id.indexOf(&apos;#&apos;) - 1)).
&gt; 
&gt; When we use &quot;&lt;id&gt;/url-encoded-as-path&quot;, we are setting this as the path. To accomplish that I would need to concatenate strings earlier just to set it. I&apos;ve thought it would be more efficient to use the fragment instead.

Somebody is going to concatenate anyway, either you or QUrl :)
 
&gt; The use of id.right there is because we get a const QString&amp; as id, so I can&apos;t get rid of the prefix as you&apos;ve suggested (actually I think I could but it would involve taking the constness away and I don&apos;t know if the caller of this function will use this id later).

You&apos;re going to have to make a copy anyway, but I think it&apos;s better to make that explicit in the code instead of
implicit through temporaries.

It boils down to this: (const QString&amp; id)

QString encodedIconUrl = id;

encodedIconUrl.remove(0, encodedIconUrl.indexOf(&apos;#&apos;) + 1);

QUrl iconUrl = QUrl::fromPercentEncoding(encodedUrl);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523911</commentid>
    <comment_count>56</comment_count>
      <attachid>119700</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-12-19 07:53:21 -0800</bug_when>
    <thetext>Comment on attachment 119700
Patch

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

I&apos;m going to say r+, this is rather close.

A few comments below that can be fixed in follow-up patches, or also in this one if you want.

There is however one bigger design issue (that can also be solved later if you want): We are breaking the association of WebViews with a context by always using QWebContext::defaultContext(). In almost all of the cases in this patch the use of defaultContext() is not entirely correct and the view specific context should be used instead (which right now _happens_ to be the default context, but it will change in the future).

I think we may have to keep track of the web contexts in a vector, encode the index in the icon url and use that as a mechanism to get back the correct context when the image provider needs the image for the icon url.

Am I missing something perhaps?

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:521
&gt; +    String newPageURL = WebCore::KURL(q-&gt;url()).string();

This is a completely unnecessary url conversion. We call q-&gt;url(), which will end up converting the main frame&apos;s url (string) to a QUrl. Then upon returning here it&apos;ll be converted to a KURL and then back to a string. Each conversion involves parsing the url, no reason. It would be better to directly access the main frame&apos;s url string here.

&gt; Source/WebKit2/UIProcess/API/qt/qwebiconimageprovider.cpp:34
&gt; +

Stray newline?

&gt; Source/WebKit2/UIProcess/API/qt/qwebiconimageprovider.cpp:39
&gt; +

Stray newline?

&gt;&gt; Tools/MiniBrowser/qt/qml/BrowserWindow.qml:219

&gt; 
&gt; Can you just do -&gt; source : webview.icon != &apos;&apos; ? webView.icon : &quot;../icons/favicon.png&quot; so you have only one Image element?

I agree with Alexis here, using one image element is much better/easier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524177</commentid>
    <comment_count>57</comment_count>
    <who name="Rafael Brandao">rafael.lobo</who>
    <bug_when>2011-12-19 14:04:42 -0800</bug_when>
    <thetext>(In reply to comment #56)
&gt; (From update of attachment 119700 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=119700&amp;action=review
&gt; 
&gt; I&apos;m going to say r+, this is rather close.
&gt; 
&gt; A few comments below that can be fixed in follow-up patches, or also in this one if you want.
&gt; 
&gt; There is however one bigger design issue (that can also be solved later if you want): We are breaking the association of WebViews with a context by always using QWebContext::defaultContext(). In almost all of the cases in this patch the use of defaultContext() is not entirely correct and the view specific context should be used instead (which right now _happens_ to be the default context, but it will change in the future).
&gt; 
&gt; I think we may have to keep track of the web contexts in a vector, encode the index in the icon url and use that as a mechanism to get back the correct context when the image provider needs the image for the icon url.
&gt; 
&gt; Am I missing something perhaps?

Thanks. I don&apos;t see multiple WebIconDatabase (one for each context), but a singleton that every context will point to (or just have a global/static function to get it). This is because we would have many entities dealing with the same database which doesn&apos;t make sense (at least for contexts), or different databases but we would never know at the next application start up which one we should use to display favicons. So I think we won&apos;t need to know the context the icon url is related as we will just have one place to access. 

But the multi-webprocess issue is still there, for example WebIconDatabase doesn&apos;t know where to ask for the resource, so we currently sent the request to all web processes. We will need to figure out how to avoid this in the future, so I think the best thing to do right now is to postpone it right now and think more about it.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:521
&gt; &gt; +    String newPageURL = WebCore::KURL(q-&gt;url()).string();
&gt; 
&gt; This is a completely unnecessary url conversion. We call q-&gt;url(), which will end up converting the main frame&apos;s url (string) to a QUrl. Then upon returning here it&apos;ll be converted to a KURL and then back to a string. Each conversion involves parsing the url, no reason. It would be better to directly access the main frame&apos;s url string here.

Oh yea, we already have it. You got me. :-)

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qwebiconimageprovider.cpp:34
&gt; &gt; +
&gt; 
&gt; Stray newline?
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qwebiconimageprovider.cpp:39
&gt; &gt; +
&gt; 
&gt; Stray newline?
&gt; 
&gt; &gt;&gt; Tools/MiniBrowser/qt/qml/BrowserWindow.qml:219
&gt; 
&gt; &gt; 
&gt; &gt; Can you just do -&gt; source : webview.icon != &apos;&apos; ? webView.icon : &quot;../icons/favicon.png&quot; so you have only one Image element?
&gt; 
&gt; I agree with Alexis here, using one image element is much better/easier.

This is why QML is so fantastic, it makes things so simple. Thanks! :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524309</commentid>
    <comment_count>58</comment_count>
      <attachid>119954</attachid>
    <who name="Rafael Brandao">rafael.lobo</who>
    <bug_when>2011-12-19 17:04:29 -0800</bug_when>
    <thetext>Created attachment 119954
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524507</commentid>
    <comment_count>59</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-12-20 02:40:28 -0800</bug_when>
    <thetext>(In reply to comment #57)
&gt; (In reply to comment #56)
&gt; &gt; (From update of attachment 119700 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=119700&amp;action=review
&gt; &gt; 
&gt; &gt; I&apos;m going to say r+, this is rather close.
&gt; &gt; 
&gt; &gt; A few comments below that can be fixed in follow-up patches, or also in this one if you want.
&gt; &gt; 
&gt; &gt; There is however one bigger design issue (that can also be solved later if you want): We are breaking the association of WebViews with a context by always using QWebContext::defaultContext(). In almost all of the cases in this patch the use of defaultContext() is not entirely correct and the view specific context should be used instead (which right now _happens_ to be the default context, but it will change in the future).
&gt; &gt; 
&gt; &gt; I think we may have to keep track of the web contexts in a vector, encode the index in the icon url and use that as a mechanism to get back the correct context when the image provider needs the image for the icon url.
&gt; &gt; 
&gt; &gt; Am I missing something perhaps?
&gt; 
&gt; Thanks. I don&apos;t see multiple WebIconDatabase (one for each context), but a singleton that every context will point to (or just have a global/static function to get it). This is because we would have many entities dealing with the same database which doesn&apos;t make sense (at least for contexts), or different databases but we would never know at the next application start up which one we should use to display favicons. So I think we won&apos;t need to know the context the icon url is related as we will just have one place to access. 

I disagree.

Look at the design:

A document is loaded in the web process and the frame loader&apos;s IconController asks the proxy icondatabase for a load decision. The load decision message is sent from WebIconDatabaseProxy::loadDecisionForIconURL like this:

    m_process-&gt;connection()-&gt;send(Messages::WebIconDatabase::GetLoadDecisionForIconURL(iconURL, id), 0);

That means it ends up in

    void WebContext::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments)

where it will be delegated to the context&apos;s WebIconDatabase. If the database is not initialized/open, then the icon load decision is negative.

So each context has its own WebIconDatabase, which is responsible for all icon requests from the context (usually == process) it belongs to. If you have two WebContext instances, then you also need two databases if you want favicons to work there. The actual _data_ is loaded from the processes the contexts own and sent to the context specific icon database.


And this seems like a sensible design. If you are using multiple contexts, then you do _not_ want them to share data (from a privacy perspective, and favicons beautifully provide information about websites you&apos;ve visisted).

My guts feeling is that we need a per-context storage location that can serve as the base directory for things like the icondatabase or web databases.

With your current patch favicons will only work for webviews that belong to the default webcontext.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524509</commentid>
    <comment_count>60</comment_count>
      <attachid>119954</attachid>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2011-12-20 02:58:45 -0800</bug_when>
    <thetext>Comment on attachment 119954
Patch

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

In general this looks good, agreed.

&gt; Source/WebKit2/UIProcess/qt/QtWebIconDatabaseClient.cpp:99
&gt; +    url.setHost(QStringLiteral(&quot;webicon&quot;));
&gt; +    url.setPath(QString::number(iconID).prepend(&apos;/&apos;));

I&apos;m a little confused by this format, why image://webicon/id#page?  A page has an icon, so to me the url would be the reverse, image://webicon/page/id ? or page#id, or page?icon=id

&gt; Source/WebKit2/UIProcess/qt/QtWebPageLoadClient.cpp:174
&gt; +    client-&gt;m_webView-&gt;d_func()-&gt;setIcon(QUrl());

The title does not change until the load commits, so should probably the icon?

&gt; Tools/MiniBrowser/qt/qml/BrowserWindow.qml:210
&gt; +                source: webView.icon != &apos;&apos; ? webView.icon : &apos;../icons/favicon.png&apos;

This is a much nicer short-form, agreed. Though, in a real browser you&apos;d probably actually want two Images, and have the visibility of the default one depend on the state != Image.Ready of the web icon, so that you don&apos;t get a blinking effect between setting the source and the image being ready.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524522</commentid>
    <comment_count>61</comment_count>
      <attachid>119954</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-12-20 03:47:21 -0800</bug_when>
    <thetext>Comment on attachment 119954
Patch

Let&apos;s get this in. I&apos;ll fix up the icon changed notification in a separate change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524523</commentid>
    <comment_count>62</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-12-20 03:51:32 -0800</bug_when>
    <thetext>Committed r103316: &lt;http://trac.webkit.org/changeset/103316&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524534</commentid>
    <comment_count>63</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-12-20 04:50:18 -0800</bug_when>
    <thetext>(In reply to comment #62)
&gt; Committed r103316: &lt;http://trac.webkit.org/changeset/103316&gt;

It seems it made many tests crash. Could you check it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524535</commentid>
    <comment_count>64</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-12-20 04:50:33 -0800</bug_when>
    <thetext>.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524536</commentid>
    <comment_count>65</comment_count>
      <attachid>119954</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-12-20 04:51:00 -0800</bug_when>
    <thetext>Comment on attachment 119954
Patch

Remove r+ from landed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524791</commentid>
    <comment_count>66</comment_count>
    <who name="Rafael Brandao">rafael.lobo</who>
    <bug_when>2011-12-20 13:37:05 -0800</bug_when>
    <thetext>The commit http://trac.webkit.org/changeset/103323 has fixed the test crashes. I&apos;ll mark this one as resolved then.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113256</attachid>
            <date>2011-11-01 16:41:11 -0700</date>
            <delta_ts>2011-11-14 11:10:05 -0800</delta_ts>
            <desc>Adds basic implementation for showing favicons on QML and cleaning up the icon database.</desc>
            <filename>webicondatabase-v1_4.diff</filename>
            <type>text/plain</type>
            <size>22872</size>
            <attacher name="Rafael Brandao">rafael.lobo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9x
dC9DaGFuZ2VMb2cKaW5kZXggODkxNTc1Zi4uNjdlZTA1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9xdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOCBAQAorMjAxMS0xMS0wMSAgUmFmYWVsIEJyYW5kYW8gIDxyYWZhZWwubG9ib0BvcGVu
Ym9zc2Eub3JnPgorCisgICAgICAgIFtRdF1bV0syXSBJbXBsZW1lbnQgZmF2aWNvbiBzdXBwb3J0
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTA4Mgor
CisgICAgICAgIFJlZ2lzdGVyIFFGYXZpY29uIGFzIEZhdmljb24gb24gUU1MIHRvIGRpc3BsYXkg
YQorICAgICAgICBmYXZpY29uIGZvciBhbiB1cmwgZGVmaW5lZCBieSBpdHMgdGFyZ2V0IERlc2t0
b3BXZWJWaWV3LgorICAgICAgICBJdCBjYW4gYWxzbyBjYWxsIHJlbW92ZUFsbEljb25zIHRvIGNs
ZWFudXAgZGF0YWJhc2UsCisgICAgICAgIG1ha2luZyB0aGVtIGludmlzaWJsZSB1bnRpbCBpdHMg
dXJsIGNoYW5nZXMuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBkZWNsYXJhdGl2ZS9wbHVnaW4uY3BwOgorICAgICAgICAoV2ViS2l0UW1sUGx1Z2lu
OjpyZWdpc3RlclR5cGVzKToKKwogMjAxMS0xMS0wMSAgQWxleGlzIE1lbmFyZCAgPGFsZXhpcy5t
ZW5hcmRAb3BlbmJvc3NhLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIFF0IGRvY3VtZW50YXRp
b24gZml4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9wbHVnaW4u
Y3BwIGIvU291cmNlL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9wbHVnaW4uY3BwCmluZGV4IGNmM2Jk
ZDQuLjdkYWM2ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvcGx1
Z2luLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL3BsdWdpbi5jcHAKQEAg
LTI0LDYgKzI0LDcgQEAKIAogI2lmIGRlZmluZWQoSEFWRV9XRUJLSVQyKQogI2luY2x1ZGUgInFk
ZXNrdG9wd2Vidmlldy5oIgorI2luY2x1ZGUgInFmYXZpY29uLmgiCiAjaW5jbHVkZSAicXRvdWNo
d2VicGFnZS5oIgogI2luY2x1ZGUgInF0b3VjaHdlYnZpZXcuaCIKICNpbmNsdWRlICJxd2VibmF2
aWdhdGlvbmNvbnRyb2xsZXIuaCIKQEAgLTUxLDYgKzUyLDcgQEAgcHVibGljOgogI2lmIGRlZmlu
ZWQoSEFWRV9XRUJLSVQyKQogICAgICAgICBxbWxSZWdpc3RlclR5cGU8UURlc2t0b3BXZWJWaWV3
Pih1cmksIDMsIDAsICJEZXNrdG9wV2ViVmlldyIpOwogICAgICAgICBxbWxSZWdpc3RlclR5cGU8
UVRvdWNoV2ViVmlldz4odXJpLCAzLCAwLCAiVG91Y2hXZWJWaWV3Iik7CisgICAgICAgIHFtbFJl
Z2lzdGVyVHlwZTxRRmF2aWNvbj4odXJpLCAzLCAwLCAiRmF2aWNvbiIpOwogICAgICAgICBxbWxS
ZWdpc3RlclVuY3JlYXRhYmxlVHlwZTxRV2ViTmF2aWdhdGlvbkNvbnRyb2xsZXI+KHVyaSwgMywg
MCwgIk5hdmlnYXRpb25Db250cm9sbGVyIiwgUU9iamVjdDo6dHIoIkNhbm5vdCBjcmVhdGUgc2Vw
YXJhdGUgaW5zdGFuY2Ugb2YgTmF2aWdhdGlvbkNvbnRyb2xsZXIiKSk7CiAgICAgICAgIHFtbFJl
Z2lzdGVyVW5jcmVhdGFibGVUeXBlPFFXZWJQcmVmZXJlbmNlcz4odXJpLCAzLCAwLCAiV2ViUHJl
ZmVyZW5jZXMiLCBRT2JqZWN0Ojp0cigiQ2Fubm90IGNyZWF0ZSBzZXBhcmF0ZSBpbnN0YW5jZSBv
ZiBXZWJQcmVmZXJlbmNlcyIpKTsKICAgICAgICAgcW1sUmVnaXN0ZXJVbmNyZWF0YWJsZVR5cGU8
UVRvdWNoV2ViUGFnZT4odXJpLCAzLCAwLCAiVG91Y2hXZWJQYWdlIiwgUU9iamVjdDo6dHIoIkNh
bm5vdCBjcmVhdGUgc2VwYXJhdGUgaW5zdGFuY2Ugb2YgVG91Y2hXZWJQYWdlLCB1c2UgVG91Y2hX
ZWJWaWV3IikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDA0YjhiZjEuLjI3ODFiMjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAg
LTEsMyArMSw1MyBAQAorMjAxMS0xMS0wMSAgUmFmYWVsIEJyYW5kYW8gIDxyYWZhZWwubG9ib0Bv
cGVuYm9zc2Eub3JnPgorCisgICAgICAgIFtRdF1bV0syXSBJbXBsZW1lbnQgZmF2aWNvbiBzdXBw
b3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTA4
MgorCisgICAgICAgIEhhbmRsZXMgZmF2aWNvbiBkYXRhIHdpdGggYSBzaW5nbGV0b24gUXRXZWJJ
Y29uRGF0YWJhc2UKKyAgICAgICAgd2hpY2ggd2lsbCBiZSBsaXN0ZW5lZCBieSBRTUwgY29tcG9u
ZW50cyBuYW1lZCBGYXZpY29uLgorICAgICAgICBFYWNoIEZhdmljb24gbmVlZHMgYSBEZXNrdG9w
V2ViVmlldyBhcyB0YXJnZXQgdG8gYXNzdW1lCisgICAgICAgIGl0cyB1cmwgaWRlbnRpdHkgYW5k
IGZldGNoIHRoZSBpY29uIGRhdGEgZm9yIHRoYXQgdXJsCisgICAgICAgIHdoZW5ldmVyIGl0IGNo
YW5nZXMuIERhdGEgaXMgcHJvdmlkZWQgYnkgV2ViSWNvbkRhdGFiYXNlLgorICAgICAgICBDdXJy
ZW50bHkgc3VwcG9ydHMgZmV0Y2hpbmcgaW1hZ2UgZGF0YSBhbmQgc2hvd2luZyBpdCwgYW5kCisg
ICAgICAgIGNsZWFuaW5nIHVwIGFsbCBkYXRhYmFzZS4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvV0tWaWV3Lmg6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xZmF2aWNvbi5jcHA6IEFkZGVkLgorICAgICAgICAo
UUZhdmljb246OlFGYXZpY29uKToKKyAgICAgICAgKFFGYXZpY29uOjp+UUZhdmljb24pOgorICAg
ICAgICAoUUZhdmljb246OnNldFBhZ2VVcmwpOgorICAgICAgICAoUUZhdmljb246OnVwZGF0ZUlj
b24pOgorICAgICAgICAoUUZhdmljb246OnNldFdlYlZpZXcpOgorICAgICAgICAoUUZhdmljb246
Om9uRmF2aWNvbkNoYW5nZWQpOgorICAgICAgICAoUUZhdmljb246OnBhaW50KToKKyAgICAgICAg
KFFGYXZpY29uOjpyZW1vdmVBbGxJY29ucyk6CisgICAgICAgIChRRmF2aWNvbjo6b25EaWRSZW1v
dmVBbGxGYXZpY29uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FmYXZpY29uLmg6IEFk
ZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb250ZXh0Lmg6IENoYW5nZWQgdmlzaWJpbGl0
eSBvZiBpY29uRGF0YWJhc2VQYXRoCisgICAgICAgIHNvIGl0IGNvdWxkIGJlIHVzZWQgYnkgUXRX
ZWJJY29uRGF0YWJhc2Ugb24gaXRzIHNldHVwLgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9DbGll
bnRJbXBsLmNwcDoKKyAgICAgICAgKHRvUXRXZWJJY29uRGF0YWJhc2UpOgorICAgICAgICAocXRf
d2tfaWNvbkRhdGFiYXNlRGlkQ2hhbmdlSWNvbkZvclBhZ2VVUkwpOgorICAgICAgICAocXRfd2tf
aWNvbkRhdGFiYXNlRGlkUmVtb3ZlQWxsSWNvbnMpOgorICAgICAgICAoc2V0dXBJY29uRGF0YWJh
c2VDbGllbnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9DbGllbnRJbXBsLmg6CisgICAgICAg
ICogVUlQcm9jZXNzL3F0L1F0V2ViSWNvbkRhdGFiYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChx
dFdlYkljb25EYXRhYmFzZSk6CisgICAgICAgIChRdFdlYkljb25EYXRhYmFzZTo6aW5pdCk6Cisg
ICAgICAgIChRdFdlYkljb25EYXRhYmFzZTo6UXRXZWJJY29uRGF0YWJhc2UpOgorICAgICAgICAo
UXRXZWJJY29uRGF0YWJhc2U6On5RdFdlYkljb25EYXRhYmFzZSk6CisgICAgICAgIChRdFdlYklj
b25EYXRhYmFzZTo6c3luY2hyb25vdXNJY29uRm9yUGFnZVVSTCk6CisgICAgICAgIChRdFdlYklj
b25EYXRhYmFzZTo6cmVtb3ZlQWxsSWNvbnMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFdl
Ykljb25EYXRhYmFzZS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRXZWJQYWdl
UHJveHkuY3BwOgorICAgICAgICAoUXRXZWJQYWdlUHJveHk6OmRlZmF1bHRXS0NvbnRleHQpOgor
ICAgICAgICAoUXRXZWJQYWdlUHJveHk6On5RdFdlYlBhZ2VQcm94eSk6IERlc3Ryb3lzIFF0V2Vi
SWNvbkRhdGFiYXNlCisgICAgICAgIHdoZW4gdGhlIG9ubHkgV2ViQ29udGV4dCBpcyBkZXN0cm95
ZWQuCisgICAgICAgICogV2ViS2l0Mi5wcm86CisgICAgICAgICogV2ViS2l0MkFQSS5wcmk6CisK
IDIwMTEtMTEtMDEgIEpvY2VseW4gVHVyY290dGUgIDxqb2NlbHluLnR1cmNvdHRlQG5va2lhLmNv
bT4KIAogICAgICAgICBbUXRdIE1lcmdlIGNvbW1vbiBkZXNrdG9wIGFuZCB0b3VjaCB2aWV3IEFQ
SXMgdW5kZXIgYSBiYXNlIGNsYXNzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC9XS1ZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvV0tW
aWV3LmgKaW5kZXggMzFmNjcyNi4uNjVlMDk3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9xdC9XS1ZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L1dLVmlldy5oCkBAIC0yMSw2ICsyMSw3IEBACiAjZGVmaW5lIFdLVmlld19oCiAKICNp
bmNsdWRlIDxXZWJLaXQyL3FkZXNrdG9wd2Vidmlldy5oPgorI2luY2x1ZGUgPFdlYktpdDIvcWZh
dmljb24uaD4KICNpbmNsdWRlIDxXZWJLaXQyL3F0b3VjaHdlYnZpZXcuaD4KICNpbmNsdWRlIDxX
ZWJLaXQyL3F0b3VjaHdlYnBhZ2UuaD4KICNpbmNsdWRlIDxXZWJLaXQyL3F3ZWJuYXZpZ2F0aW9u
Y29udHJvbGxlci5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC9xZmF2aWNvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FmYXZpY29u
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjZkMmU5Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xZmF2aWNvbi5jcHAK
QEAgLTAsMCArMSwxMjkgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
ICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
CisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJxZmF2aWNvbi5oIgorCisjaW5jbHVkZSAiUXRXZWJJY29uRGF0YWJhc2Uu
aCIKKyNpbmNsdWRlICJxZGVza3RvcHdlYnZpZXcuaCIKKyNpbmNsdWRlIDxRdENvcmUvUU9iamVj
dD4KKyNpbmNsdWRlIDxRdENvcmUvUVVybD4KKyNpbmNsdWRlIDxRdEd1aS9RQ29sb3I+CisjaW5j
bHVkZSA8UXRHdWkvUVBhaW50ZXI+CisKK1FGYXZpY29uOjpRRmF2aWNvbihRUXVpY2tJdGVtKiBw
YXJlbnQpCisgICAgOiBRUXVpY2tQYWludGVkSXRlbShwYXJlbnQpCisgICAgLCBtX3dlYlZpZXco
MCkKK3sKK30KKworUUZhdmljb246On5RRmF2aWNvbigpCit7Cit9CisKK3ZvaWQgUUZhdmljb246
OnNldFBhZ2VVcmwoY29uc3QgUVVybCYgdXJsKQoreworICAgIGlmIChtX3BhZ2VVcmwgPT0gdXJs
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3BhZ2VVcmwgPSB1cmw7CisgICAgZW1pdCBwYWdl
VXJsQ2hhbmdlZCgpOworICAgIHVwZGF0ZUljb24oKTsKK30KKwordm9pZCBRRmF2aWNvbjo6dXBk
YXRlSWNvbigpCit7CisgICAgYm9vbCBzaG91bGRVcGRhdGUgPSBmYWxzZTsKKyAgICBpZiAoIW1f
cGl4bWFwLmlzTnVsbCgpKSB7CisgICAgICAgIG1fcGl4bWFwID0gUVBpeG1hcCgpOworICAgICAg
ICBzaG91bGRVcGRhdGUgPSB0cnVlOworICAgIH0KKyAgICBpZiAocXRXZWJJY29uRGF0YWJhc2Uo
KSkgeworICAgICAgICBtX3BpeG1hcCA9IHF0V2ViSWNvbkRhdGFiYXNlKCktPnN5bmNocm9ub3Vz
SWNvbkZvclBhZ2VVUkwocGFnZVVybCgpKTsKKyAgICAgICAgc2hvdWxkVXBkYXRlID0gdHJ1ZTsK
KyAgICB9CisgICAgaWYgKHNob3VsZFVwZGF0ZSkKKyAgICAgICAgdXBkYXRlKCk7Cit9CisKK3Zv
aWQgUUZhdmljb246OnNldFdlYlZpZXcoUURlc2t0b3BXZWJWaWV3KiB0YXJnZXQpCit7CisgICAg
aWYgKG1fd2ViVmlldyA9PSB0YXJnZXQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3dl
YlZpZXcpIHsKKyAgICAgICAgZGlzY29ubmVjdChtX3dlYlZpZXcsIDAsIHRoaXMsIDApOworICAg
ICAgICBpZiAocXRXZWJJY29uRGF0YWJhc2UoKSkKKyAgICAgICAgICAgIGRpc2Nvbm5lY3QocXRX
ZWJJY29uRGF0YWJhc2UoKSwgMCwgdGhpcywgMCk7CisgICAgfQorCisgICAgbV93ZWJWaWV3ID0g
dGFyZ2V0OworCisgICAgaWYgKG1fd2ViVmlldykgeworICAgICAgICBzZXRQYWdlVXJsKG1fd2Vi
Vmlldy0+dXJsKCkpOworICAgICAgICBjb25uZWN0KG1fd2ViVmlldywgU0lHTkFMKHVybENoYW5n
ZWQoUVVybCkpLCB0aGlzLCBTTE9UKHNldFBhZ2VVcmwoUVVybCkpKTsKKyAgICAgICAgZW1pdCB3
ZWJWaWV3Q2hhbmdlZCgpOworICAgICAgICBpZiAocXRXZWJJY29uRGF0YWJhc2UoKSkgeworICAg
ICAgICAgICAgY29ubmVjdChxdFdlYkljb25EYXRhYmFzZSgpLCBTSUdOQUwoaWNvbkNoYW5nZWRG
b3JQYWdlVVJMKFFVcmwpKSwgdGhpcywgU0xPVChvbkZhdmljb25DaGFuZ2VkKFFVcmwpKSk7Cisg
ICAgICAgICAgICBjb25uZWN0KHF0V2ViSWNvbkRhdGFiYXNlKCksIFNJR05BTChkaWRSZW1vdmVB
bGxJY29ucygpKSwgdGhpcywgU0xPVChvbkRpZFJlbW92ZUFsbEljb24oKSkpOworICAgICAgICB9
CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBRVXJsIGVtcHR5VXJsOworICAgICAgICBzZXRQ
YWdlVXJsKGVtcHR5VXJsKTsKKyAgICB9Cit9CisKKwordm9pZCBRRmF2aWNvbjo6b25GYXZpY29u
Q2hhbmdlZChjb25zdCBRVXJsJiB1cmwpCit7CisgICAgaWYgKCFtX3dlYlZpZXcgfHwgIXF0V2Vi
SWNvbkRhdGFiYXNlKCkgfHwgcGFnZVVybCgpICE9IHVybCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgdXBkYXRlSWNvbigpOworfQorCit2b2lkIFFGYXZpY29uOjpwYWludChRUGFpbnRlciogcGFp
bnRlcikKK3sKKyAgICBpZiAobV9waXhtYXAuaXNOdWxsKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGNvbnN0IFFSZWN0RiByZWN0ID0gYm91bmRpbmdSZWN0KCk7CisgICAgaWYgKHJlY3Quc2l6
ZSgpICE9IG1fcGl4bWFwLnNpemUoKSkgeworICAgICAgICBRUGl4bWFwIHJlc2l6ZWQgPSBtX3Bp
eG1hcC5zY2FsZWQocmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICAgICAgcGFpbnRl
ci0+ZHJhd1BpeG1hcChyZWN0LCByZXNpemVkLCByZWN0KTsKKyAgICB9CisgICAgZWxzZQorICAg
ICAgICBwYWludGVyLT5kcmF3UGl4bWFwKHJlY3QsIG1fcGl4bWFwLCByZWN0KTsKK30KKwordm9p
ZCBRRmF2aWNvbjo6cmVtb3ZlQWxsSWNvbnMoKQoreworICAgIGlmIChxdFdlYkljb25EYXRhYmFz
ZSgpKQorICAgICAgICBxdFdlYkljb25EYXRhYmFzZSgpLT5yZW1vdmVBbGxJY29ucygpOworfQor
Cit2b2lkIFFGYXZpY29uOjpvbkRpZFJlbW92ZUFsbEljb24oKQoreworICAgIGlmICghcXRXZWJJ
Y29uRGF0YWJhc2UoKSB8fCBtX3BpeG1hcC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9waXhtYXAgPSBRUGl4bWFwKCk7CisgICAgdXBkYXRlKCk7Cit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FmYXZpY29uLmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL3F0L3FmYXZpY29uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uYWQzNTdjYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvcWZhdmljb24uaApAQCAtMCwwICsxLDY4IEBACisvKgorICAgIENvcHlyaWdo
dCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
KworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisq
LworCisjaWZuZGVmIHFmYXZpY29uX2gKKyNkZWZpbmUgcWZhdmljb25faAorCisjaW5jbHVkZSAi
cXdlYmtpdGdsb2JhbC5oIgorI2luY2x1ZGUgPFF0RGVjbGFyYXRpdmUvUVF1aWNrUGFpbnRlZEl0
ZW0+CisjaW5jbHVkZSA8UXRHdWkvUVBpeG1hcD4KKworY2xhc3MgUURlc2t0b3BXZWJWaWV3Owor
CitRVF9CRUdJTl9OQU1FU1BBQ0UKK2NsYXNzIFFQYWludGVyOworY2xhc3MgUVVybDsKK1FUX0VO
RF9OQU1FU1BBQ0UKKworY2xhc3MgUVdFQktJVF9FWFBPUlQgUUZhdmljb24gOiBwdWJsaWMgUVF1
aWNrUGFpbnRlZEl0ZW0geworICAgIFFfT0JKRUNUCisKKyAgICBRX1BST1BFUlRZKFFVcmwgcGFn
ZVVybCBSRUFEIHBhZ2VVcmwgTk9USUZZIHBhZ2VVcmxDaGFuZ2VkKQorICAgIFFfUFJPUEVSVFko
UURlc2t0b3BXZWJWaWV3KiB3ZWJWaWV3IFJFQUQgd2ViVmlldyBXUklURSBzZXRXZWJWaWV3IE5P
VElGWSB3ZWJWaWV3Q2hhbmdlZCkKK3B1YmxpYzoKKyAgICBRRmF2aWNvbihRUXVpY2tJdGVtKiBw
YXJlbnQgPSAwKTsKKyAgICB+UUZhdmljb24oKTsKKyAgICB2b2lkIHBhaW50KFFQYWludGVyKiBw
YWludGVyKTsKKworICAgIFFVcmwgcGFnZVVybCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZVVybDsg
fQorICAgIFFEZXNrdG9wV2ViVmlldyogd2ViVmlldygpIGNvbnN0IHsgcmV0dXJuIG1fd2ViVmll
dzsgfQorICAgIHZvaWQgc2V0V2ViVmlldyhRRGVza3RvcFdlYlZpZXcqIHRhcmdldCk7CisKK1Ff
U0lHTkFMUzoKKyAgICB2b2lkIHBhZ2VVcmxDaGFuZ2VkKCk7CisgICAgdm9pZCB3ZWJWaWV3Q2hh
bmdlZCgpOworCitwdWJsaWMgUV9TTE9UUzoKKyAgICB2b2lkIHJlbW92ZUFsbEljb25zKCk7CisK
K3ByaXZhdGUgUV9TTE9UUzoKKyAgICB2b2lkIG9uRmF2aWNvbkNoYW5nZWQoY29uc3QgUVVybCYp
OworICAgIHZvaWQgc2V0UGFnZVVybChjb25zdCBRVXJsJik7CisgICAgdm9pZCBvbkRpZFJlbW92
ZUFsbEljb24oKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHVwZGF0ZUljb24oKTsKKworICAgIFFV
cmwgbV9wYWdlVXJsOworICAgIFFQaXhtYXAgbV9waXhtYXA7CisgICAgUURlc2t0b3BXZWJWaWV3
KiBtX3dlYlZpZXc7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJDb250ZXh0LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4
dC5oCmluZGV4IGYxZjMyNGMuLmRhNTJhMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNv
bnRleHQuaApAQCAtMTkxLDYgKzE5MSw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGdldFdl
YkNvcmVTdGF0aXN0aWNzKFBhc3NSZWZQdHI8RGljdGlvbmFyeUNhbGxiYWNrPik7CiAgICAgdm9p
ZCBnYXJiYWdlQ29sbGVjdEphdmFTY3JpcHRPYmplY3RzKCk7CisgICAgU3RyaW5nIGljb25EYXRh
YmFzZVBhdGgoKSBjb25zdDsKIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICBzdGF0aWMgYm9vbCBv
bWl0UERGU3VwcG9ydCgpOwpAQCAtMjMwLDcgKzIzMSw2IEBAIHByaXZhdGU6CiAgICAgU3RyaW5n
IGRhdGFiYXNlRGlyZWN0b3J5KCkgY29uc3Q7CiAgICAgU3RyaW5nIHBsYXRmb3JtRGVmYXVsdERh
dGFiYXNlRGlyZWN0b3J5KCkgY29uc3Q7CiAKLSAgICBTdHJpbmcgaWNvbkRhdGFiYXNlUGF0aCgp
IGNvbnN0OwogICAgIFN0cmluZyBwbGF0Zm9ybURlZmF1bHRJY29uRGF0YWJhc2VQYXRoKCkgY29u
c3Q7CiAKICAgICBTdHJpbmcgbG9jYWxTdG9yYWdlRGlyZWN0b3J5KCkgY29uc3Q7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvQ2xpZW50SW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvcXQvQ2xpZW50SW1wbC5jcHAKaW5kZXggZWFlNWYyMS4uMzBkMTdi
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0NsaWVudEltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9DbGllbnRJbXBsLmNwcApAQCAtMjcs
NiArMjcsNyBAQAogI2luY2x1ZGUgIldLVVJMUXQuaCIKICNpbmNsdWRlIDxRdFBvbGljeUludGVy
ZmFjZS5oPgogI2luY2x1ZGUgPFF0Vmlld0ludGVyZmFjZS5oPgorI2luY2x1ZGUgPFF0V2ViSWNv
bkRhdGFiYXNlLmg+CiAjaW5jbHVkZSA8UXRXZWJQYWdlUHJveHkuaD4KICNpbmNsdWRlIDxXS0Fy
cmF5Lmg+CiAjaW5jbHVkZSA8V0tGcmFtZS5oPgpAQCAtNTgsNiArNTksMTIgQEAgc3RhdGljIGlu
bGluZSBRdFBvbGljeUludGVyZmFjZSogdG9RdFBvbGljeUludGVyZmFjZShjb25zdCB2b2lkKiBj
bGllbnRJbmZvKQogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFF0UG9saWN5SW50ZXJmYWNl
Kj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOwogfQogCitzdGF0aWMgaW5saW5lIFF0
V2ViSWNvbkRhdGFiYXNlKiB0b1F0V2ViSWNvbkRhdGFiYXNlKGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pCit7CisgICAgQVNTRVJUKGNsaWVudEluZm8pOworICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PFF0V2ViSWNvbkRhdGFiYXNlKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOwor
fQorCiBzdGF0aWMgdm9pZCBkaXNwYXRjaExvYWRTdWNjZWVkZWQoV0tGcmFtZVJlZiBmcmFtZSwg
Y29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsKICAgICBpZiAoIVdLRnJhbWVJc01haW5GcmFtZShm
cmFtZSkpCkBAIC0xNjEsNiArMTY4LDE3IEBAIHN0YXRpYyBib29sIHF0X3drX3J1bkphdmFTY3Jp
cHRDb25maXJtKFdLUGFnZVJlZiwgV0tTdHJpbmdSZWYgbWVzc2FnZSwgV0tGcmFtZVJlCiAgICAg
cmV0dXJuIHRvUXRWaWV3SW50ZXJmYWNlKGNsaWVudEluZm8pLT5ydW5KYXZhU2NyaXB0Q29uZmly
bShxTWVzc2FnZSk7CiB9CiAKK3N0YXRpYyB2b2lkIHF0X3drX2ljb25EYXRhYmFzZURpZENoYW5n
ZUljb25Gb3JQYWdlVVJMKFdLSWNvbkRhdGFiYXNlUmVmIGljb25EYXRhYmFzZSwgV0tVUkxSZWYg
cGFnZVVSTCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBRVXJsIHFVcmwgPSBXS1VS
TENvcHlRVXJsKHBhZ2VVUkwpOworICAgIGVtaXQgdG9RdFdlYkljb25EYXRhYmFzZShjbGllbnRJ
bmZvKS0+aWNvbkNoYW5nZWRGb3JQYWdlVVJMKHFVcmwpOworfQorCitzdGF0aWMgdm9pZCBxdF93
a19pY29uRGF0YWJhc2VEaWRSZW1vdmVBbGxJY29ucyhXS0ljb25EYXRhYmFzZVJlZiBpY29uRGF0
YWJhc2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgZW1pdCB0b1F0V2ViSWNvbkRh
dGFiYXNlKGNsaWVudEluZm8pLT5kaWRSZW1vdmVBbGxJY29ucygpOworfQorCiBzdGF0aWMgaW5s
aW5lIFdLU3RyaW5nUmVmIGNyZWF0ZU51bGxXS1N0cmluZygpCiB7CiAgICAgUmVmUHRyPFdlYlN0
cmluZz4gd2ViU3RyaW5nID0gV2ViU3RyaW5nOjpjcmVhdGVOdWxsKCk7CkBAIC0zMjMsMyArMzQx
LDE0IEBAIHZvaWQgc2V0dXBQYWdlUG9saWN5Q2xpZW50KFF0UG9saWN5SW50ZXJmYWNlKiBwb2xp
Y3lJbnRlcmZhY2UsIFdlYlBhZ2VQcm94eSogd2ViCiAgICAgcG9saWN5Q2xpZW50LmRlY2lkZVBv
bGljeUZvclJlc3BvbnNlID0gcXRfd2tfZGVjaWRlUG9saWN5Rm9yUmVzcG9uc2U7CiAgICAgV0tQ
YWdlU2V0UGFnZVBvbGljeUNsaWVudCh0b0FQSSh3ZWJQYWdlUHJveHkpLCAmcG9saWN5Q2xpZW50
KTsKIH0KKwordm9pZCBzZXR1cEljb25EYXRhYmFzZUNsaWVudChRdFdlYkljb25EYXRhYmFzZSog
cXRXZWJJY29uRGF0YWJhc2UsIFdlYkljb25EYXRhYmFzZSogd2ViSWNvbkRhdGFiYXNlKQorewor
ICAgIFdLSWNvbkRhdGFiYXNlQ2xpZW50IGljb25EYXRhYmFzZUNsaWVudDsKKyAgICBtZW1zZXQo
Jmljb25EYXRhYmFzZUNsaWVudCwgMCwgc2l6ZW9mKFdLSWNvbkRhdGFiYXNlQ2xpZW50KSk7Cisg
ICAgaWNvbkRhdGFiYXNlQ2xpZW50LnZlcnNpb24gPSBrV0tJY29uRGF0YWJhc2VDbGllbnRDdXJy
ZW50VmVyc2lvbjsKKyAgICBpY29uRGF0YWJhc2VDbGllbnQuY2xpZW50SW5mbyA9IHF0V2ViSWNv
bkRhdGFiYXNlOworICAgIGljb25EYXRhYmFzZUNsaWVudC5kaWRDaGFuZ2VJY29uRm9yUGFnZVVS
TCA9IHF0X3drX2ljb25EYXRhYmFzZURpZENoYW5nZUljb25Gb3JQYWdlVVJMOworICAgIGljb25E
YXRhYmFzZUNsaWVudC5kaWRSZW1vdmVBbGxJY29ucyA9IHF0X3drX2ljb25EYXRhYmFzZURpZFJl
bW92ZUFsbEljb25zOworICAgIFdLSWNvbkRhdGFiYXNlU2V0SWNvbkRhdGFiYXNlQ2xpZW50KHRv
QVBJKHdlYkljb25EYXRhYmFzZSksICZpY29uRGF0YWJhc2VDbGllbnQpOworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0NsaWVudEltcGwuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9xdC9DbGllbnRJbXBsLmgKaW5kZXggYzI4YTAxMC4uMzZlZGQ4MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0NsaWVudEltcGwuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvQ2xpZW50SW1wbC5oCkBAIC0yMywxMyArMjMsMTUg
QEAKICNpbmNsdWRlIDxXZWJLaXQyL1dLUGFnZS5oPgogCiBjbGFzcyBRdFdlYlBhZ2VQcm94eTsK
K2NsYXNzIFF0V2ViSWNvbkRhdGFiYXNlOwogbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBRdFBv
bGljeUludGVyZmFjZTsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKK2NsYXNzIFdlYkljb25EYXRhYmFz
ZTsKIH0KIHZvaWQgc2V0dXBQYWdlTG9hZGVyQ2xpZW50KFF0V2ViUGFnZVByb3h5KiwgV2ViS2l0
OjpXZWJQYWdlUHJveHkqKTsKIHZvaWQgc2V0dXBQYWdlVWlDbGllbnQoUXRXZWJQYWdlUHJveHkq
LCBXZWJLaXQ6OldlYlBhZ2VQcm94eSopOwogdm9pZCBzZXR1cFBhZ2VQb2xpY3lDbGllbnQoV2Vi
S2l0OjpRdFBvbGljeUludGVyZmFjZSosIFdlYktpdDo6V2ViUGFnZVByb3h5Kik7Cit2b2lkIHNl
dHVwSWNvbkRhdGFiYXNlQ2xpZW50KFF0V2ViSWNvbkRhdGFiYXNlKiwgV2ViS2l0OjpXZWJJY29u
RGF0YWJhc2UqKTsKIAogI2VuZGlmIC8qIENsaWVudEltcGxfaCAqLwotCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJJY29uRGF0YWJhc2UuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViSWNvbkRhdGFiYXNlLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTc3OTMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViSWNvbkRhdGFiYXNlLmNwcApAQCAtMCwwICsxLDc5
IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
UXRXZWJJY29uRGF0YWJhc2UuaCIKKworI2luY2x1ZGUgIkNsaWVudEltcGwuaCIKKyNpbmNsdWRl
ICJJbWFnZS5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIK
KyNpbmNsdWRlICJXZWJDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViSWNvbkRhdGFiYXNlLmgiCisj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPFF0Q29yZS9RT2JqZWN0Pgor
I2luY2x1ZGUgPFF0Q29yZS9RVXJsPgorI2luY2x1ZGUgPFF0R3VpL1FJbWFnZT4KKyNpbmNsdWRl
IDxRdEd1aS9RUGl4bWFwPgorCitzdGF0aWMgUXRXZWJJY29uRGF0YWJhc2UqIGdsb2JhbFF0SWNv
bkRhdGFiYXNlID0gMDsKKworUXRXZWJJY29uRGF0YWJhc2UqIHF0V2ViSWNvbkRhdGFiYXNlKCkK
K3sKKyAgICByZXR1cm4gZ2xvYmFsUXRJY29uRGF0YWJhc2U7Cit9CisKK3ZvaWQgUXRXZWJJY29u
RGF0YWJhc2U6OmluaXQoV2ViQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBpZiAoIWdsb2JhbFF0
SWNvbkRhdGFiYXNlKSB7CisgICAgICAgIC8vIEZJWE1FOiB1c2VyIHNob3VsZCBiZSBhYmxlIHRv
IHNldCBpdHMgb3duIGljb24gZGF0YWJhc2UgcGF0aAorICAgICAgICAvLyByYXRoZXIgdGhhbiBh
bHdheXMgdXNpbmcgdGhlIGRlZmF1bHQgcGF0aC4KKyAgICAgICAgY29udGV4dC0+c2V0SWNvbkRh
dGFiYXNlUGF0aChjb250ZXh0LT5pY29uRGF0YWJhc2VQYXRoKCkpOworICAgICAgICBnbG9iYWxR
dEljb25EYXRhYmFzZSA9IG5ldyBRdFdlYkljb25EYXRhYmFzZShjb250ZXh0KTsKKyAgICB9Cit9
CisKK1F0V2ViSWNvbkRhdGFiYXNlOjpRdFdlYkljb25EYXRhYmFzZShXZWJDb250ZXh0KiBjb250
ZXh0KQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCit7CisgICAgc2V0dXBJY29uRGF0YWJhc2VD
bGllbnQodGhpcywgY29udGV4dC0+aWNvbkRhdGFiYXNlKCkpOworfQorCitRdFdlYkljb25EYXRh
YmFzZTo6flF0V2ViSWNvbkRhdGFiYXNlKCkKK3sKK30KKworUVBpeG1hcCBRdFdlYkljb25EYXRh
YmFzZTo6c3luY2hyb25vdXNJY29uRm9yUGFnZVVSTChjb25zdCBRVXJsJiBwYWdlVVJMKQorewor
ICAgIFN0cmluZyB1cmwgPSBXZWJDb3JlOjpLVVJMKHBhZ2VVUkwpLnN0cmluZygpOworICAgIFJl
ZlB0cjxXZWJDb3JlOjpJbWFnZT4gaW1hZ2UgPSBtX2NvbnRleHQtPmljb25EYXRhYmFzZSgpLT5p
bWFnZUZvclBhZ2VVUkwodXJsKTsKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gUVBp
eG1hcCgpOworCisgICAgUVBpeG1hcCogbmF0aXZlSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VG
b3JDdXJyZW50RnJhbWUoKTsKKyAgICBpZiAoIW5hdGl2ZUltYWdlKQorICAgICAgICByZXR1cm4g
UVBpeG1hcCgpOworCisgICAgcmV0dXJuIG5hdGl2ZUltYWdlLT5jb3B5KCk7Cit9CisKK3ZvaWQg
UXRXZWJJY29uRGF0YWJhc2U6OnJlbW92ZUFsbEljb25zKCkKK3sKKyAgICBtX2NvbnRleHQtPmlj
b25EYXRhYmFzZSgpLT5yZW1vdmVBbGxJY29ucygpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViSWNvbkRhdGFiYXNlLmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvUXRXZWJJY29uRGF0YWJhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi41ZmI3ZTU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3F0L1F0V2ViSWNvbkRhdGFiYXNlLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAgICBD
b3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5
KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorKi8KKworCisjaWZuZGVmIFF0V2ViSWNvbkRhdGFiYXNlX2gKKyNkZWZpbmUgUXRXZWJJ
Y29uRGF0YWJhc2VfaAorCisjaW5jbHVkZSAicXdlYmtpdGdsb2JhbC5oIgorI2luY2x1ZGUgIldL
SWNvbkRhdGFiYXNlLmgiCisjaW5jbHVkZSA8UXRHdWkvUUltYWdlPgorI2luY2x1ZGUgPFF0R3Vp
L1FQaXhtYXA+CisjaW5jbHVkZSA8UXRDb3JlL1FPYmplY3Q+CisjaW5jbHVkZSA8UXRDb3JlL1FV
cmw+CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViQ29udGV4dDsKK30KKwordXNpbmcg
bmFtZXNwYWNlIFdlYktpdDsKKworY2xhc3MgUVdFQktJVF9FWFBPUlQgUXRXZWJJY29uRGF0YWJh
c2UgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpFQ1QKKworcHVibGljOgorICAgIHN0YXRp
YyB2b2lkIGluaXQoV2ViQ29udGV4dCopOworICAgIH5RdFdlYkljb25EYXRhYmFzZSgpOworCitw
dWJsaWMgUV9TTE9UUzoKKyAgICBRUGl4bWFwIHN5bmNocm9ub3VzSWNvbkZvclBhZ2VVUkwoY29u
c3QgUVVybCYpOworICAgIHZvaWQgcmVtb3ZlQWxsSWNvbnMoKTsKKworcHVibGljOgorICAgIFFf
U0lHTkFMIHZvaWQgaWNvbkNoYW5nZWRGb3JQYWdlVVJMKGNvbnN0IFFVcmwmKTsKKyAgICBRX1NJ
R05BTCB2b2lkIGRpZFJlbW92ZUFsbEljb25zKCk7CisKK3ByaXZhdGU6CisgICAgUXRXZWJJY29u
RGF0YWJhc2UoV2ViQ29udGV4dCopOworICAgIFdlYkNvbnRleHQqIG1fY29udGV4dDsKK307CisK
Ky8vIEZ1bmN0aW9uIHRvIGdldCB0aGUgZ2xvYmFsIGluc3RhbmNlIG9mIFF0V2ViSWNvbkRhdGFi
YXNlLgorUXRXZWJJY29uRGF0YWJhc2UqIHF0V2ViSWNvbkRhdGFiYXNlKCk7CisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVByb3h5LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VQcm94eS5jcHAKaW5kZXgg
NmE0NGFkNS4uMDJkNzE0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0
L1F0V2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRX
ZWJQYWdlUHJveHkuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKICNpbmNsdWRlICJRdFBvbGljeUludGVyZmFjZS5oIgogI2luY2x1ZGUgIlF0Vmlld0lu
dGVyZmFjZS5oIgorI2luY2x1ZGUgIlF0V2ViSWNvbkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiUXRX
ZWJVbmRvQ29tbWFuZC5oIgogI2luY2x1ZGUgIldlYkJhY2tGb3J3YXJkTGlzdC5oIgogI2luY2x1
ZGUgIldlYkNvbnRleHQuaCIKQEAgLTQxLDYgKzQyLDcgQEAKICNpbmNsdWRlICJXZWJFZGl0Q29t
bWFuZFByb3h5LmgiCiAjaW5jbHVkZSAiV2ViRXZlbnRGYWN0b3J5UXQuaCIKICNpbmNsdWRlICJX
ZWJQb3B1cE1lbnVQcm94eVF0LmgiCisjaW5jbHVkZSAiV0tJY29uRGF0YWJhc2UuaCIKICNpbmNs
dWRlICJXS1N0cmluZ1F0LmgiCiAjaW5jbHVkZSAiV0tVUkxRdC5oIgogI2luY2x1ZGUgPFFBcHBs
aWNhdGlvbj4KQEAgLTY4LDggKzcwLDEzIEBAIHVuc2lnbmVkIFF0V2ViUGFnZVByb3h5OjpzX2Rl
ZmF1bHRQYWdlUHJveHlDb3VudCA9IDA7CiAKIFBhc3NSZWZQdHI8V2ViQ29udGV4dD4gUXRXZWJQ
YWdlUHJveHk6OmRlZmF1bHRXS0NvbnRleHQoKQogewotICAgIGlmICghc19kZWZhdWx0Q29udGV4
dCkKKyAgICBpZiAoIXNfZGVmYXVsdENvbnRleHQpIHsKICAgICAgICAgc19kZWZhdWx0Q29udGV4
dCA9IFdlYkNvbnRleHQ6OmNyZWF0ZShTdHJpbmcoKSk7CisKKyAgICAgICAgLy8gRklYTUU6IFRo
aXMgaXMgd2hlcmUgdGhlIGljb25kYXRhYmFzZSdzIGNsaWVudCBpcyBpbmplY3RlZCwKKyAgICAg
ICAgLy8gaWYgdGhlcmUncyBubyBpbnN0YW5jZSBvZiBpdCBieSBub3csIHRoZW4gaXQncyBjcmVh
dGVkLgorICAgICAgICBRdFdlYkljb25EYXRhYmFzZTo6aW5pdChzX2RlZmF1bHRDb250ZXh0Lmdl
dCgpKTsKKyAgICB9CiAgICAgcmV0dXJuIHNfZGVmYXVsdENvbnRleHQ7CiB9CiAKQEAgLTEzMyw4
ICsxNDAsMTEgQEAgUXRXZWJQYWdlUHJveHk6On5RdFdlYlBhZ2VQcm94eSgpCiAgICAgaWYgKG1f
Y29udGV4dCA9PSBzX2RlZmF1bHRDb250ZXh0KSB7CiAgICAgICAgIEFTU0VSVChzX2RlZmF1bHRQ
YWdlUHJveHlDb3VudCA+IDApOwogICAgICAgICBzX2RlZmF1bHRQYWdlUHJveHlDb3VudC0tOwot
ICAgICAgICBpZiAoIXNfZGVmYXVsdFBhZ2VQcm94eUNvdW50KQorICAgICAgICBpZiAoIXNfZGVm
YXVsdFBhZ2VQcm94eUNvdW50KSB7CiAgICAgICAgICAgICBzX2RlZmF1bHRDb250ZXh0LmNsZWFy
KCk7CisgICAgICAgICAgICBpZiAocXRXZWJJY29uRGF0YWJhc2UoKSkKKyAgICAgICAgICAgICAg
ICBkZWxldGUgcXRXZWJJY29uRGF0YWJhc2UoKTsKKyAgICAgICAgfQogICAgIH0KICAgICBkZWxl
dGUgbV9oaXN0b3J5OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcm8g
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnBybwppbmRleCAwZDIxNjg4Li4xNTE1NzRmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnBybworKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJLaXQyLnBybwpAQCAtMjYxLDYgKzI2MSw3IEBAIEhFQURFUlMgKz0gXAogICAgIFVJUHJvY2Vz
cy9xdC9RdFRvdWNoV2ViUGFnZVByb3h5LmggXAogICAgIFVJUHJvY2Vzcy9xdC9RdFdlYkVycm9y
LmggXAogICAgIFVJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VQcm94eS5oIFwKKyAgICBVSVByb2Nlc3Mv
cXQvUXRXZWJJY29uRGF0YWJhc2UuaCBcCiAgICAgVUlQcm9jZXNzL3F0L3F3a2hpc3RvcnkuaCBc
CiAgICAgVUlQcm9jZXNzL3F0L3F3a2hpc3RvcnlfcC5oIFwKICAgICBVSVByb2Nlc3MvcXQvUXRT
R1VwZGF0ZVF1ZXVlLmggXApAQCAtNTA1LDYgKzUwNiw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFVJ
UHJvY2Vzcy9xdC9RdFRvdWNoV2ViUGFnZVByb3h5LmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0
V2ViRXJyb3IuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuY3BwIFwKKyAg
ICBVSVByb2Nlc3MvcXQvUXRXZWJJY29uRGF0YWJhc2UuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQv
cXdraGlzdG9yeS5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9RdFNHVXBkYXRlUXVldWUuY3BwIFwK
ICAgICBVSVByb2Nlc3MvcXQvUXRTR1RpbGVOb2RlLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJLaXQyQVBJLnByaSBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDJBUEkucHJpCmlu
ZGV4IDUxODU5NTcuLjA2ZGM2MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDJB
UEkucHJpCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDJBUEkucHJpCkBAIC01NCw2ICs1NCw3
IEBAIFdFQktJVDJfQVBJX1NPVVJDRVMgPSBcCiAgICAgJCRTT1VSQ0VfRElSL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJ2aWV3LmNwcCBcCiAgICAgJCRTT1VSQ0VfRElSL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9xdC9xd2VibmF2aWdhdGlvbmNvbnRyb2xsZXIuY3BwIFwKICAgICAk
JFNPVVJDRV9ESVIvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJwcmVmZXJlbmNlcy5jcHAg
XAorICAgICQkU09VUkNFX0RJUi9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcWZhdmljb24uY3Bw
IFwKICAgICAkJFNPVVJDRV9ESVIvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9jL1dLQnVuZGxlLmNwcCBcCiAgICAgJCRTT1VSQ0VfRElSL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUJhY2tGb3J3YXJkTGlzdC5jcHAgXAogICAgICQk
U09VUkNFX0RJUi9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5k
bGVCYWNrRm9yd2FyZExpc3RJdGVtLmNwcCBcCkBAIC0xNDAsNiArMTQxLDcgQEAgV0VCS0lUMl9B
UElfSEVBREVSUyArPSBcCiAgICAgJCRTT1VSQ0VfRElSL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC9xdG91Y2h3ZWJ2aWV3LmggXAogICAgICQkU09VUkNFX0RJUi9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvcXRvdWNod2Vidmlld19wLmggXAogICAgICQkU09VUkNFX0RJUi9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvcXdlYm5hdmlnYXRpb25jb250cm9sbGVyLmggXAorICAgICQkU09VUkNFX0RJ
Ui9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcWZhdmljb24uaCBcCiAgICAgJCRTT1VSQ0VfRElS
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUJhY2tGb3J3
YXJkTGlzdC5oIFwKICAgICAkJFNPVVJDRV9ESVIvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9jL1dLQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbS5oIFwKICAgICAkJFNPVVJD
RV9ESVIvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlSGl0
VGVzdFJlc3VsdC5oIFwK
</data>
<flag name="review"
          id="111546"
          type_id="1"
          status="-"
          setter="hausmann"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114991</attachid>
            <date>2011-11-14 11:10:05 -0800</date>
            <delta_ts>2011-11-16 09:10:22 -0800</delta_ts>
            <desc>Use a QDeclarativeImageProvider to display FavIcons instead of creating a new component</desc>
            <filename>favicon-wip-v7-changelog.diff</filename>
            <type>text/plain</type>
            <size>34745</size>
            <attacher name="Rafael Brandao">rafael.lobo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9x
dC9DaGFuZ2VMb2cKaW5kZXggOTU0NzdkNC4uZGE5ZmMyOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTUgQEAKKzIwMTEtMTEtMTQgIFJhZmFlbCBCcmFuZGFvICA8cmFmYWVsLmxvYm9Ab3Bl
bmJvc3NhLm9yZz4KKworICAgICAgICBbUXRdW1dLMl0gSW1wbGVtZW50IGZhdmljb24gc3VwcG9y
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEwODIK
KworICAgICAgICBTZXR1cCBGYXZJY29uIGltYWdlIHByb3ZpZGVyIHRvIHRoZSBlbmdpbmUgb24g
c3RhcnR1cC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIGRlY2xhcmF0aXZlL3BsdWdpbi5jcHA6CisgICAgICAgIChXZWJLaXRRbWxQbHVnaW46Omlu
aXRpYWxpemVFbmdpbmUpOgorCiAyMDExLTExLTExICBQaWVycmUgUm9zc2kgIDxwaWVycmUucm9z
c2lAZ21haWwuY29tPgogCiAgICAgICAgIFtRdF0gUmVtb3ZlIHRoZSBRU3R5bGUgZGVwZW5kZW5j
eSBpbiBRdCdzIG1vYmlsZSB0aGVtZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9kZWNs
YXJhdGl2ZS9wbHVnaW4uY3BwIGIvU291cmNlL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9wbHVnaW4u
Y3BwCmluZGV4IDM3OWI5NzkuLjNmZTg5ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQv
ZGVjbGFyYXRpdmUvcGx1Z2luLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZl
L3BsdWdpbi5jcHAKQEAgLTIwLDEyICsyMCwxNCBAQAogI2luY2x1ZGUgInFkZWNsYXJhdGl2ZXdl
YnZpZXdfcC5oIgogCiAjaW5jbHVkZSA8UXREZWNsYXJhdGl2ZS9xZGVjbGFyYXRpdmUuaD4KKyNp
bmNsdWRlIDxRdERlY2xhcmF0aXZlL3FkZWNsYXJhdGl2ZWVuZ2luZS5oPgogI2luY2x1ZGUgPFF0
RGVjbGFyYXRpdmUvcWRlY2xhcmF0aXZlZXh0ZW5zaW9ucGx1Z2luLmg+CiAKICNpZiBkZWZpbmVk
KEhBVkVfV0VCS0lUMikKICNpbmNsdWRlICJxcXVpY2t3ZWJwYWdlLmgiCiAjaW5jbHVkZSAicXF1
aWNrd2Vidmlldy5oIgogI2luY2x1ZGUgInF3ZWJkb3dubG9hZGl0ZW0uaCIKKyNpbmNsdWRlICJx
d2ViZmF2aWNvbmltYWdlcHJvdmlkZXIuaCIKICNpbmNsdWRlICJxd2VicHJlZmVyZW5jZXMuaCIK
IAogI2luY2x1ZGUgPFF0TmV0d29yay9xbmV0d29ya3JlcGx5Lmg+CkBAIC0zNiw2ICszOCwxNCBA
QCBRVF9CRUdJTl9OQU1FU1BBQ0UKIGNsYXNzIFdlYktpdFFtbFBsdWdpbiA6IHB1YmxpYyBRRGVj
bGFyYXRpdmVFeHRlbnNpb25QbHVnaW4gewogICAgIFFfT0JKRUNUCiBwdWJsaWM6CisjaWYgZGVm
aW5lZChIQVZFX1dFQktJVDIpCisgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVFbmdpbmUoUURl
Y2xhcmF0aXZlRW5naW5lKiBlbmdpbmUsIGNvbnN0IGNoYXIqIHVyaSkKKyAgICB7CisgICAgICAg
IFFfQVNTRVJUKFFMYXRpbjFTdHJpbmcodXJpKSA9PSBRTGF0aW4xU3RyaW5nKCJRdFdlYktpdCIp
KTsKKyAgICAgICAgZW5naW5lLT5hZGRJbWFnZVByb3ZpZGVyKFFMYXRpbjFTdHJpbmcoImZhdmlj
b24iKSwgbmV3IFFXZWJGYXZJY29uSW1hZ2VQcm92aWRlcik7CisgICAgfQorCisjZW5kaWYKICAg
ICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJUeXBlcyhjb25zdCBjaGFyKiB1cmkpCiAgICAgewogICAg
ICAgICBRX0FTU0VSVChRTGF0aW4xU3RyaW5nKHVyaSkgPT0gUUxhdGluMVN0cmluZygiUXRXZWJL
aXQiKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKaW5kZXggOTI0MjE4ZC4uNWU0ZTM3YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDY2IEBACisyMDExLTExLTE0ICBSYWZhZWwgQnJhbmRhbyAgPHJhZmFlbC5sb2JvQG9wZW5i
b3NzYS5vcmc+CisKKyAgICAgICAgW1F0XVtXSzJdIEltcGxlbWVudCBmYXZpY29uIHN1cHBvcnQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMDgyCisK
KyAgICAgICAgUXRXZWJJY29uRGF0YWJhc2Ugd2FzIGNyZWF0ZWQgdG8gaGFuZGxlIEZhdkljb24g
cmVxdWVzdHMgYW5kIHN0b3JlCisgICAgICAgIHRoZW0gdG8gYmUgdXNlZCBieSBRdFdlYkZhdklj
b25JbWFnZVByb3ZpZGVyLiBUaGUgcmVxdWVzdCBpcyBkb25lIHdoZW4KKyAgICAgICAgUVF1aWNr
V2ViVmlldyBjaGFuZ2VzIGl0cyB1cmwuIEVhY2ggRmF2SWNvbiBoYXMgYW4gaWQsIGFuZCBwYWdl
cyB0aGF0CisgICAgICAgIHNoYXJlIHRoZSBzYW1lIHVybCB3aWxsIGFsc28gc2hhcmUgdGhlIHNh
bWUgaWNvbi4gVGhlIHZpZXcgbm93IGhhcyBhCisgICAgICAgIG5ldyBhdHRyaWJ1dGUgKGZhdklj
b25Tb3VyY2UpIGFuZCBpdCBzaG91bGQgYmUgYXR0YWNoZWQgdG8gYW4gSW1hZ2UncworICAgICAg
ICBzb3VyY2Ugb24gUU1MIHRvIHNob3cgdGhlIGljb24uIEl0IGNhbiBhbHNvIHJlcXVlc3QgZm9y
IGEgY2xlYW51cCBvbgorICAgICAgICBJY29uRGF0YWJhc2UsIGFuZCBvbmNlIHRoZSBjbGVhbiBp
cyBkb25lIGFsbCBGYXZJY29ucyBjaGFuZ2VzIHRvIGEKKyAgICAgICAgZGVmYXVsdCBGYXZJY29u
IChjdXJyZW50bHkgYSB0cmFuc3BhcmVudCBRUGl4bWFwKS4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9xdC9XS1ZpZXcuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlj
a3dlYnZpZXcuY3BwOgorICAgICAgICAoUVF1aWNrV2ViVmlld1ByaXZhdGU6OnNldFBhZ2VQcm94
eSk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3OjpyZXF1ZXN0SWNvbklkRm9yUGFnZVVSTCk6Cisg
ICAgICAgIChRUXVpY2tXZWJWaWV3OjpjbGVhbnVwSWNvbkRhdGFiYXNlKToKKyAgICAgICAgKFFR
dWlja1dlYlZpZXc6OmZhdkljb25Tb3VyY2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQv
cXF1aWNrd2Vidmlldy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXdlYmZhdmljb25p
bWFnZXByb3ZpZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChRV2ViRmF2SWNvbkltYWdlUHJvdmlk
ZXI6OlFXZWJGYXZJY29uSW1hZ2VQcm92aWRlcik6CisgICAgICAgIChRV2ViRmF2SWNvbkltYWdl
UHJvdmlkZXI6On5RV2ViRmF2SWNvbkltYWdlUHJvdmlkZXIpOgorICAgICAgICAoUVdlYkZhdklj
b25JbWFnZVByb3ZpZGVyOjpyZXF1ZXN0UGl4bWFwKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L3F0L3F3ZWJmYXZpY29uaW1hZ2Vwcm92aWRlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvcXQvQ2xpZW50SW1wbC5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb250
ZXh0Lmg6CisgICAgICAgICogVUlQcm9jZXNzL3F0L0NsaWVudEltcGwuY3BwOgorICAgICAgICAo
dG9RdFdlYkljb25EYXRhYmFzZSk6CisgICAgICAgIChxdF93a19pY29uRGF0YWJhc2VEaWRDaGFu
Z2VJY29uRm9yUGFnZVVSTCk6CisgICAgICAgIChxdF93a19pY29uRGF0YWJhc2VEaWRSZW1vdmVB
bGxJY29ucyk6CisgICAgICAgIChzZXR1cEljb25EYXRhYmFzZUNsaWVudCk6CisgICAgICAgICog
VUlQcm9jZXNzL3F0L0NsaWVudEltcGwuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRWaWV3
SW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3SW50ZXJmYWNlOjpkaWRDaGFu
Z2VGYXZJY29uU291cmNlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRWaWV3SW50ZXJmYWNl
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0V2ViSWNvbkRhdGFiYXNlLmNwcDogQWRkZWQu
CisgICAgICAgIChxdFdlYkljb25EYXRhYmFzZSk6CisgICAgICAgIChRdFdlYkljb25EYXRhYmFz
ZTo6aW5pdCk6CisgICAgICAgIChRdFdlYkljb25EYXRhYmFzZTo6UXRXZWJJY29uRGF0YWJhc2Up
OgorICAgICAgICAoUXRXZWJJY29uRGF0YWJhc2U6On5RdFdlYkljb25EYXRhYmFzZSk6CisgICAg
ICAgIChRdFdlYkljb25EYXRhYmFzZTo6aWNvbkltYWdlRm9yUGFnZVVSTCk6CisgICAgICAgIChR
dFdlYkljb25EYXRhYmFzZTo6cmVxdWVzdEljb25JZEZvclBhZ2VVUkwpOgorICAgICAgICAoUXRX
ZWJJY29uRGF0YWJhc2U6OnJlbW92ZUFsbEljb25zKToKKyAgICAgICAgKFF0V2ViSWNvbkRhdGFi
YXNlOjppY29uSW1hZ2VGb3JJY29uSWQpOgorICAgICAgICAoUXRXZWJJY29uRGF0YWJhc2U6OnJl
dGFpbkljb25JZCk6CisgICAgICAgIChRdFdlYkljb25EYXRhYmFzZTo6cmVsZWFzZUljb25JZCk6
CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0V2ViSWNvbkRhdGFiYXNlLmg6IEFkZGVkLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChRdFdlYlBh
Z2VQcm94eTo6ZGVmYXVsdFdLQ29udGV4dCk6CisgICAgICAgIChRdFdlYlBhZ2VQcm94eTo6flF0
V2ViUGFnZVByb3h5KToKKyAgICAgICAgKFF0V2ViUGFnZVByb3h5OjpwYWdlUmVmKToKKyAgICAg
ICAgKFF0V2ViUGFnZVByb3h5OjpyZXF1ZXN0SWNvbklkRm9yUGFnZVVSTCk6CisgICAgICAgIChR
dFdlYlBhZ2VQcm94eTo6Y2xlYW51cEljb25EYXRhYmFzZSk6CisgICAgICAgIChRdFdlYlBhZ2VQ
cm94eTo6c2V0RmF2SWNvbklkKToKKyAgICAgICAgKFF0V2ViUGFnZVByb3h5OjpkaWRSZWNlaXZl
SWNvbklkRm9yUGFnZVVSTCk6CisgICAgICAgIChRdFdlYlBhZ2VQcm94eTo6ZGlkQ2xlYW51cElj
b25EYXRhYmFzZSk6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVByb3h5Lmg6Cisg
ICAgICAgIChRdFdlYlBhZ2VQcm94eTo6ZmF2SWNvblNvdXJjZSk6CisKIDIwMTEtMTEtMTQgIEFs
ZXhpcyBNZW5hcmQgIDxhbGV4aXMubWVuYXJkQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAgW1F0
XVtXSzJdIENsZWFudXAgUU1MIHRlc3RzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVGFy
Z2V0LnByaSBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKaW5kZXggYWQxM2IzZi4uZjJmZTdl
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9UYXJnZXQucHJpCkBAIC0yNDgsNiArMjQ4LDcgQEAgSEVBREVSUyArPSBcCiAgICAgVUlQ
cm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmggXAogICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXF1
aWNrd2Vidmlld19wLmggXAogICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld3ByaXZh
dGVleHRlbnNpb25fcC5oIFwKKyAgICBVSVByb2Nlc3MvQVBJL3F0L3F3ZWJmYXZpY29uaW1hZ2Vw
cm92aWRlci5oIFwKICAgICBVSVByb2Nlc3MvQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRpb25D
aGFsbGVuZ2VQcm94eS5oIFwKICAgICBVSVByb2Nlc3MvQXV0aGVudGljYXRpb24vQXV0aGVudGlj
YXRpb25EZWNpc2lvbkxpc3RlbmVyLmggXAogICAgIFVJUHJvY2Vzcy9BdXRoZW50aWNhdGlvbi9X
ZWJDcmVkZW50aWFsLmggXApAQCAtMzE4LDYgKzMxOSw3IEBAIEhFQURFUlMgKz0gXAogICAgIFVJ
UHJvY2Vzcy9xdC9RdFdlYkVycm9yLmggXAogICAgIFVJUHJvY2Vzcy9xdC9RdERvd25sb2FkTWFu
YWdlci5oIFwKICAgICBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuaCBcCisgICAgVUlQcm9j
ZXNzL3F0L1F0V2ViSWNvbkRhdGFiYXNlLmggXAogICAgIFVJUHJvY2Vzcy9xdC9xd2toaXN0b3J5
LmggXAogICAgIFVJUHJvY2Vzcy9xdC9xd2toaXN0b3J5X3AuaCBcCiAgICAgVUlQcm9jZXNzL3F0
L1F0U0dVcGRhdGVRdWV1ZS5oIFwKQEAgLTU0OCw2ICs1NTAsNyBAQCBTT1VSQ0VTICs9IFwKICAg
ICBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwIFwKICAgICBVSVByb2Nlc3MvQVBJ
L3F0L3F3ZWJwcmVmZXJlbmNlcy5jcHAgXAogICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vi
dmlld3ByaXZhdGVleHRlbnNpb24uY3BwIFwKKyAgICBVSVByb2Nlc3MvQVBJL3F0L3F3ZWJmYXZp
Y29uaW1hZ2Vwcm92aWRlci5jcHAgXAogICAgIFVJUHJvY2Vzcy9BdXRoZW50aWNhdGlvbi9BdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5LmNwcCBcCiAgICAgVUlQcm9jZXNzL0F1dGhlbnRpY2F0
aW9uL0F1dGhlbnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5lci5jcHAgXAogICAgIFVJUHJvY2Vzcy9B
dXRoZW50aWNhdGlvbi9XZWJDcmVkZW50aWFsLmNwcCBcCkBAIC02MjIsNiArNjI1LDcgQEAgU09V
UkNFUyArPSBcCiAgICAgVUlQcm9jZXNzL3F0L1F0V2ViRXJyb3IuY3BwIFwKICAgICBVSVByb2Nl
c3MvcXQvUXREb3dubG9hZE1hbmFnZXIuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvUXRXZWJQYWdl
UHJveHkuY3BwIFwKKyAgICBVSVByb2Nlc3MvcXQvUXRXZWJJY29uRGF0YWJhc2UuY3BwIFwKICAg
ICBVSVByb2Nlc3MvcXQvcXdraGlzdG9yeS5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9RdFNHVXBk
YXRlUXVldWUuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvUXRTR1RpbGVOb2RlLmNwcCBcCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L1dLVmlldy5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9XS1ZpZXcuaAppbmRleCA4YzAxMTIwLi4yYzM0ZmJm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L1dLVmlldy5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvV0tWaWV3LmgKQEAgLTIzLDYgKzIz
LDcgQEAKICNpbmNsdWRlIDxXZWJLaXQyL3FxdWlja3dlYnBhZ2UuaD4KICNpbmNsdWRlIDxXZWJL
aXQyL3FxdWlja3dlYnZpZXcuaD4KICNpbmNsdWRlIDxXZWJLaXQyL3F3ZWJkb3dubG9hZGl0ZW0u
aD4KKyNpbmNsdWRlIDxXZWJLaXQyL3F3ZWJmYXZpY29uaW1hZ2Vwcm92aWRlci5oPgogI2luY2x1
ZGUgPFdlYktpdDIvcXdlYnByZWZlcmVuY2VzLmg+CiAKICNlbmRpZiAvKiBXS1ZpZXdfaCAqLwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAK
aW5kZXggNmQwYTZjNi4uN2M3Zjk4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAi
cXF1aWNrd2Vidmlldy5oIgogCiAjaW5jbHVkZSAiUXRWaWV3SW50ZXJmYWNlLmgiCisjaW5jbHVk
ZSAiUXRXZWJJY29uRGF0YWJhc2UuaCIKICNpbmNsdWRlICJRdFdlYlBhZ2VQcm94eS5oIgogI2lu
Y2x1ZGUgIlV0aWxzUXQuaCIKICNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKQEAgLTM1Myw2ICsz
NTQsMTEgQEAgdm9pZCBRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6c2V0UGFnZVByb3h5KFF0V2ViUGFn
ZVByb3h5KiBwYWdlUHJveHkpCiAgICAgUV9RKFFRdWlja1dlYlZpZXcpOwogICAgIHRoaXMtPnBh
Z2VQcm94eS5yZXNldChwYWdlUHJveHkpOwogICAgIFFPYmplY3Q6OmNvbm5lY3QocGFnZVByb3h5
LCBTSUdOQUwocmVjZWl2ZWRNZXNzYWdlRnJvbU5hdmlnYXRvclF0T2JqZWN0KFFWYXJpYW50TWFw
KSksIHEsIFNJR05BTChtZXNzYWdlUmVjZWl2ZWQoUVZhcmlhbnRNYXApKSk7CisgICAgaWYgKHF0
V2ViSWNvbkRhdGFiYXNlKCkpIHsKKyAgICAgICAgUU9iamVjdDo6Y29ubmVjdChxX3B0ciwgU0lH
TkFMKHVybENoYW5nZWQoUVVybCkpLCBxdFdlYkljb25EYXRhYmFzZSgpLCBTTE9UKHJlcXVlc3RJ
Y29uSWRGb3JQYWdlVVJMKFFVcmwpKSk7CisgICAgICAgIFFPYmplY3Q6OmNvbm5lY3QocXRXZWJJ
Y29uRGF0YWJhc2UoKSwgU0lHTkFMKGljb25JZFJlYWR5Rm9yUGFnZVVSTChpbnQsIFFVcmwpKSwg
cGFnZVByb3h5LCBTTE9UKGRpZFJlY2VpdmVJY29uSWRGb3JQYWdlVVJMKGludCwgUVVybCkpKTsK
KyAgICAgICAgUU9iamVjdDo6Y29ubmVjdChxdFdlYkljb25EYXRhYmFzZSgpLCBTSUdOQUwoZGlk
UmVtb3ZlQWxsSWNvbnMoKSksIHBhZ2VQcm94eSwgU0xPVChkaWRDbGVhbnVwSWNvbkRhdGFiYXNl
KCkpKTsKKyAgICB9CiB9CiAKIFFRdWlja1dlYlZpZXc6OlFRdWlja1dlYlZpZXcoUVF1aWNrSXRl
bSogcGFyZW50KQpAQCAtNDIwLDYgKzQyNiwyNCBAQCB2b2lkIFFRdWlja1dlYlZpZXc6OnJlbG9h
ZCgpCiAgICAgZC0+cGFnZVByb3h5LT5yZWxvYWQoKTsKIH0KIAordm9pZCBRUXVpY2tXZWJWaWV3
OjpyZXF1ZXN0SWNvbklkRm9yUGFnZVVSTChjb25zdCBRVXJsJiBwYWdlVVJMKQoreworICAgIFFf
RChjb25zdCBRUXVpY2tXZWJWaWV3KTsKKyAgICBkLT5wYWdlUHJveHktPnJlcXVlc3RJY29uSWRG
b3JQYWdlVVJMKHBhZ2VVUkwpOworfQorCit2b2lkIFFRdWlja1dlYlZpZXc6OmNsZWFudXBJY29u
RGF0YWJhc2UoKQoreworICAgIFFfRChjb25zdCBRUXVpY2tXZWJWaWV3KTsKKyAgICBkLT5wYWdl
UHJveHktPmNsZWFudXBJY29uRGF0YWJhc2UoKTsKK30KKworUVVybCBRUXVpY2tXZWJWaWV3Ojpm
YXZJY29uU291cmNlKCkgY29uc3QKK3sKKyAgICBRX0QoY29uc3QgUVF1aWNrV2ViVmlldyk7Cisg
ICAgcmV0dXJuIGQtPnBhZ2VQcm94eS0+ZmF2SWNvblNvdXJjZSgpOworfQorCiBRVXJsIFFRdWlj
a1dlYlZpZXc6OnVybCgpIGNvbnN0CiB7CiAgICAgUV9EKGNvbnN0IFFRdWlja1dlYlZpZXcpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuaAppbmRl
eCBmOGJhODE3Li41Yzk0YzBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3FxdWlja3dlYnZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3FxdWlja3dlYnZpZXcuaApAQCAtNTUsNiArNTUsNyBAQCBjbGFzcyBRV0VCS0lUX0VYUE9S
VCBRUXVpY2tXZWJWaWV3IDogcHVibGljIFFRdWlja0l0ZW0gewogICAgIFFfUFJPUEVSVFkoYm9v
bCBjYW5Hb0ZvcndhcmQgUkVBRCBjYW5Hb0ZvcndhcmQgTk9USUZZIG5hdmlnYXRpb25TdGF0ZUNo
YW5nZWQgRklOQUwpCiAgICAgUV9QUk9QRVJUWShib29sIGNhblN0b3AgUkVBRCBjYW5TdG9wIE5P
VElGWSBuYXZpZ2F0aW9uU3RhdGVDaGFuZ2VkIEZJTkFMKQogICAgIFFfUFJPUEVSVFkoYm9vbCBj
YW5SZWxvYWQgUkVBRCBjYW5SZWxvYWQgTk9USUZZIG5hdmlnYXRpb25TdGF0ZUNoYW5nZWQgRklO
QUwpCisgICAgUV9QUk9QRVJUWShRVXJsIGZhdkljb25Tb3VyY2UgUkVBRCBmYXZJY29uU291cmNl
IE5PVElGWSBmYXZJY29uU291cmNlQ2hhbmdlZCkKICAgICBRX1BST1BFUlRZKFFXZWJQcmVmZXJl
bmNlcyogcHJlZmVyZW5jZXMgUkVBRCBwcmVmZXJlbmNlcyBDT05TVEFOVCBGSU5BTCkKICAgICBR
X1BST1BFUlRZKFFRdWlja1dlYlBhZ2UqIHBhZ2UgUkVBRCBwYWdlIENPTlNUQU5UIEZJTkFMKQog
ICAgIFFfRU5VTVMoTmF2aWdhdGlvblBvbGljeSkKQEAgLTc4LDYgKzc5LDcgQEAgcHVibGljOgog
ICAgIFFVcmwgdXJsKCkgY29uc3Q7CiAgICAgUVN0cmluZyB0aXRsZSgpIGNvbnN0OwogICAgIGlu
dCBsb2FkUHJvZ3Jlc3MoKSBjb25zdDsKKyAgICBRVXJsIGZhdkljb25Tb3VyY2UoKSBjb25zdDsK
IAogICAgIGJvb2wgY2FuR29CYWNrKCkgY29uc3Q7CiAgICAgYm9vbCBjYW5Hb0ZvcndhcmQoKSBj
b25zdDsKQEAgLTk1LDYgKzk3LDggQEAgcHVibGljIFFfU0xPVFM6CiAgICAgdm9pZCBnb0Zvcndh
cmQoKTsKICAgICB2b2lkIHN0b3AoKTsKICAgICB2b2lkIHJlbG9hZCgpOworICAgIHZvaWQgcmVx
dWVzdEljb25JZEZvclBhZ2VVUkwoY29uc3QgUVVybCYpOworICAgIHZvaWQgY2xlYW51cEljb25E
YXRhYmFzZSgpOwogCiBRX1NJR05BTFM6CiAgICAgdm9pZCB0aXRsZUNoYW5nZWQoY29uc3QgUVN0
cmluZyYgdGl0bGUpOwpAQCAtMTA5LDYgKzExMyw3IEBAIFFfU0lHTkFMUzoKICAgICB2b2lkIGxp
bmtIb3ZlcmVkKGNvbnN0IFFVcmwmIHVybCwgY29uc3QgUVN0cmluZyYgdGl0bGUpOwogICAgIHZv
aWQgdmlld01vZGVDaGFuZ2VkKCk7CiAgICAgdm9pZCBuYXZpZ2F0aW9uU3RhdGVDaGFuZ2VkKCk7
CisgICAgdm9pZCBmYXZJY29uU291cmNlQ2hhbmdlZChjb25zdCBRVXJsJiB1cmwpOwogCiBwcm90
ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGdlb21ldHJ5Q2hhbmdlZChjb25zdCBRUmVjdEYmLCBj
b25zdCBRUmVjdEYmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
cXQvcXdlYmZhdmljb25pbWFnZXByb3ZpZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvcXdlYmZhdmljb25pbWFnZXByb3ZpZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi41ZGZlOTFjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9xdC9xd2ViZmF2aWNvbmltYWdlcHJvdmlkZXIuY3BwCkBAIC0wLDAg
KzEsNTAgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJxd2ViZmF2aWNvbmltYWdlcHJvdmlkZXIuaCIKKworI2luY2x1ZGUgIlF0V2ViSWNvbkRh
dGFiYXNlLmgiCisjaW5jbHVkZSA8UXRHdWkvUUNvbG9yPgorCitRV2ViRmF2SWNvbkltYWdlUHJv
dmlkZXI6OlFXZWJGYXZJY29uSW1hZ2VQcm92aWRlcigpCisgICAgOiBRRGVjbGFyYXRpdmVJbWFn
ZVByb3ZpZGVyKFFEZWNsYXJhdGl2ZUltYWdlUHJvdmlkZXI6OlBpeG1hcCkKKyAgICAsIG1fZGVm
YXVsdEZhdkljb24oMSwgMSkKK3sKKyAgICBtX2RlZmF1bHRGYXZJY29uLmZpbGwoUUNvbG9yKDAs
IDAsIDAsIDApKTsKK30KKworUVdlYkZhdkljb25JbWFnZVByb3ZpZGVyOjp+UVdlYkZhdkljb25J
bWFnZVByb3ZpZGVyKCkKK3sKKworfQorCitRUGl4bWFwIFFXZWJGYXZJY29uSW1hZ2VQcm92aWRl
cjo6cmVxdWVzdFBpeG1hcChjb25zdCBRU3RyaW5nICZpZCwgUVNpemUgKnNpemUsIGNvbnN0IFFT
aXplICZyZXF1ZXN0ZWRTaXplKQoreworICAgIFFQaXhtYXAgaWNvbjsKKyAgICBpZiAoIXF0V2Vi
SWNvbkRhdGFiYXNlKCkgfHwgKGljb24gPSBxdFdlYkljb25EYXRhYmFzZSgpLT5pY29uSW1hZ2VG
b3JJY29uSWQoaWQudG9JbnQoKSkpLmlzTnVsbCgpKSB7CisgICAgICAgIGlmIChzaXplKQorICAg
ICAgICAgICAgKnNpemUgPSBtX2RlZmF1bHRGYXZJY29uLnNpemUoKTsKKyAgICAgICAgcmV0dXJu
IG1fZGVmYXVsdEZhdkljb247CisgICAgfQorICAgIGlmIChzaXplKQorICAgICAgICAqc2l6ZSA9
IGljb24uc2l6ZSgpOworCisgICAgcmV0dXJuIGljb247Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJmYXZpY29uaW1hZ2Vwcm92aWRlci5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2ViZmF2aWNvbmltYWdlcHJvdmlkZXIuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTU3ZWE4Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2ViZmF2aWNvbmltYWdlcHJv
dmlkZXIuaApAQCAtMCwwICsxLDM2IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIHF3
ZWJmYXZpY29uaW1hZ2Vwcm92aWRlcl9oCisjZGVmaW5lIHF3ZWJmYXZpY29uaW1hZ2Vwcm92aWRl
cl9oCisKKyNpbmNsdWRlICJxd2Via2l0Z2xvYmFsLmgiCisjaW5jbHVkZSA8UXREZWNsYXJhdGl2
ZS9RRGVjbGFyYXRpdmVJbWFnZVByb3ZpZGVyPgorI2luY2x1ZGUgPFF0R3VpL1FQaXhtYXA+CisK
K2NsYXNzIFFXRUJLSVRfRVhQT1JUIFFXZWJGYXZJY29uSW1hZ2VQcm92aWRlciA6IHB1YmxpYyBR
RGVjbGFyYXRpdmVJbWFnZVByb3ZpZGVyIHsKK3B1YmxpYzoKKyAgICBRV2ViRmF2SWNvbkltYWdl
UHJvdmlkZXIoKTsKKyAgICB+UVdlYkZhdkljb25JbWFnZVByb3ZpZGVyKCk7CisgICAgUVBpeG1h
cCByZXF1ZXN0UGl4bWFwKGNvbnN0IFFTdHJpbmcgJiBpZCwgUVNpemUgKiBzaXplLCBjb25zdCBR
U2l6ZSAmIHJlcXVlc3RlZFNpemUpOworcHJpdmF0ZToKKyAgICBRUGl4bWFwIG1fZGVmYXVsdEZh
dkljb247Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJDb250ZXh0LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5oCmlu
ZGV4IDE1NGQ0OTkuLjM0MTE1NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQu
aApAQCAtMTkxLDYgKzE5MSw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGdldFdlYkNvcmVT
dGF0aXN0aWNzKFBhc3NSZWZQdHI8RGljdGlvbmFyeUNhbGxiYWNrPik7CiAgICAgdm9pZCBnYXJi
YWdlQ29sbGVjdEphdmFTY3JpcHRPYmplY3RzKCk7CisgICAgU3RyaW5nIGljb25EYXRhYmFzZVBh
dGgoKSBjb25zdDsKIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICBzdGF0aWMgYm9vbCBvbWl0UERG
U3VwcG9ydCgpOwpAQCAtMjMyLDcgKzIzMyw2IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIGRhdGFi
YXNlRGlyZWN0b3J5KCkgY29uc3Q7CiAgICAgU3RyaW5nIHBsYXRmb3JtRGVmYXVsdERhdGFiYXNl
RGlyZWN0b3J5KCkgY29uc3Q7CiAKLSAgICBTdHJpbmcgaWNvbkRhdGFiYXNlUGF0aCgpIGNvbnN0
OwogICAgIFN0cmluZyBwbGF0Zm9ybURlZmF1bHRJY29uRGF0YWJhc2VQYXRoKCkgY29uc3Q7CiAK
ICAgICBTdHJpbmcgbG9jYWxTdG9yYWdlRGlyZWN0b3J5KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvQ2xpZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvcXQvQ2xpZW50SW1wbC5jcHAKaW5kZXggODAyZWRlNi4uYjU2NDdhZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0NsaWVudEltcGwuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9DbGllbnRJbXBsLmNwcApAQCAtMjEsMTIgKzIx
LDEzIEBACiAjaW5jbHVkZSAiQ2xpZW50SW1wbC5oIgogCiAjaW5jbHVkZSAiUXRXZWJFcnJvci5o
IgotI2luY2x1ZGUgIldlYkZyYW1lUHJveHkuaCIKICNpbmNsdWRlICJXS0FQSUNhc3QuaCIKICNp
bmNsdWRlICJXS1N0cmluZ1F0LmgiCiAjaW5jbHVkZSAiV0tVUkxRdC5oIgorI2luY2x1ZGUgIldl
YkZyYW1lUHJveHkuaCIKICNpbmNsdWRlIDxRdFBvbGljeUludGVyZmFjZS5oPgogI2luY2x1ZGUg
PFF0Vmlld0ludGVyZmFjZS5oPgorI2luY2x1ZGUgPFF0V2ViSWNvbkRhdGFiYXNlLmg+CiAjaW5j
bHVkZSA8UXRXZWJQYWdlUHJveHkuaD4KICNpbmNsdWRlIDxXS0FycmF5Lmg+CiAjaW5jbHVkZSA8
V0tGcmFtZS5oPgpAQCAtNjAsNiArNjEsMTIgQEAgc3RhdGljIGlubGluZSBRdFBvbGljeUludGVy
ZmFjZSogdG9RdFBvbGljeUludGVyZmFjZShjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PFF0UG9saWN5SW50ZXJmYWNlKj4oY29uc3RfY2FzdDx2b2lk
Kj4oY2xpZW50SW5mbykpOwogfQogCitzdGF0aWMgaW5saW5lIFF0V2ViSWNvbkRhdGFiYXNlKiB0
b1F0V2ViSWNvbkRhdGFiYXNlKGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgQVNTRVJU
KGNsaWVudEluZm8pOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFF0V2ViSWNvbkRhdGFi
YXNlKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOworfQorCiBzdGF0aWMgdm9pZCBk
aXNwYXRjaExvYWRTdWNjZWVkZWQoV0tGcmFtZVJlZiBmcmFtZSwgY29uc3Qgdm9pZCogY2xpZW50
SW5mbykKIHsKICAgICBpZiAoIVdLRnJhbWVJc01haW5GcmFtZShmcmFtZSkpCkBAIC0xNjMsNiAr
MTcwLDE3IEBAIHN0YXRpYyBib29sIHF0X3drX3J1bkphdmFTY3JpcHRDb25maXJtKFdLUGFnZVJl
ZiwgV0tTdHJpbmdSZWYgbWVzc2FnZSwgV0tGcmFtZVJlCiAgICAgcmV0dXJuIHRvUXRWaWV3SW50
ZXJmYWNlKGNsaWVudEluZm8pLT5ydW5KYXZhU2NyaXB0Q29uZmlybShxTWVzc2FnZSk7CiB9CiAK
K3N0YXRpYyB2b2lkIHF0X3drX2ljb25EYXRhYmFzZURpZENoYW5nZUljb25Gb3JQYWdlVVJMKFdL
SWNvbkRhdGFiYXNlUmVmIGljb25EYXRhYmFzZSwgV0tVUkxSZWYgcGFnZVVSTCwgY29uc3Qgdm9p
ZCogY2xpZW50SW5mbykKK3sKKyAgICBRVXJsIHFVcmwgPSBXS1VSTENvcHlRVXJsKHBhZ2VVUkwp
OworICAgIHRvUXRXZWJJY29uRGF0YWJhc2UoY2xpZW50SW5mbyktPnJlcXVlc3RJY29uSWRGb3JQ
YWdlVVJMKHFVcmwpOworfQorCitzdGF0aWMgdm9pZCBxdF93a19pY29uRGF0YWJhc2VEaWRSZW1v
dmVBbGxJY29ucyhXS0ljb25EYXRhYmFzZVJlZiBpY29uRGF0YWJhc2UsIGNvbnN0IHZvaWQqIGNs
aWVudEluZm8pCit7CisgICAgZW1pdCB0b1F0V2ViSWNvbkRhdGFiYXNlKGNsaWVudEluZm8pLT5k
aWRSZW1vdmVBbGxJY29ucygpOworfQorCiBzdGF0aWMgaW5saW5lIFdLU3RyaW5nUmVmIGNyZWF0
ZU51bGxXS1N0cmluZygpCiB7CiAgICAgUmVmUHRyPFdlYlN0cmluZz4gd2ViU3RyaW5nID0gV2Vi
U3RyaW5nOjpjcmVhdGVOdWxsKCk7CkBAIC0zNTMsMyArMzcxLDE0IEBAIHZvaWQgc2V0dXBDb250
ZXh0SW5qZWN0ZWRCdW5kbGVDbGllbnQoV0tDb250ZXh0UmVmIGNvbnRleHQpCiAgICAgaW5qZWN0
ZWRCdW5kbGVDbGllbnQuZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUgPSBxdF93
a19kaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZTsKICAgICBXS0NvbnRleHRTZXRJ
bmplY3RlZEJ1bmRsZUNsaWVudChjb250ZXh0LCAmaW5qZWN0ZWRCdW5kbGVDbGllbnQpOwogfQor
Cit2b2lkIHNldHVwSWNvbkRhdGFiYXNlQ2xpZW50KFF0V2ViSWNvbkRhdGFiYXNlKiBxdFdlYklj
b25EYXRhYmFzZSwgV2ViSWNvbkRhdGFiYXNlKiB3ZWJJY29uRGF0YWJhc2UpCit7CisgICAgV0tJ
Y29uRGF0YWJhc2VDbGllbnQgaWNvbkRhdGFiYXNlQ2xpZW50OworICAgIG1lbXNldCgmaWNvbkRh
dGFiYXNlQ2xpZW50LCAwLCBzaXplb2YoV0tJY29uRGF0YWJhc2VDbGllbnQpKTsKKyAgICBpY29u
RGF0YWJhc2VDbGllbnQudmVyc2lvbiA9IGtXS0ljb25EYXRhYmFzZUNsaWVudEN1cnJlbnRWZXJz
aW9uOworICAgIGljb25EYXRhYmFzZUNsaWVudC5jbGllbnRJbmZvID0gcXRXZWJJY29uRGF0YWJh
c2U7CisgICAgaWNvbkRhdGFiYXNlQ2xpZW50LmRpZENoYW5nZUljb25Gb3JQYWdlVVJMID0gcXRf
d2tfaWNvbkRhdGFiYXNlRGlkQ2hhbmdlSWNvbkZvclBhZ2VVUkw7CisgICAgaWNvbkRhdGFiYXNl
Q2xpZW50LmRpZFJlbW92ZUFsbEljb25zID0gcXRfd2tfaWNvbkRhdGFiYXNlRGlkUmVtb3ZlQWxs
SWNvbnM7CisgICAgV0tJY29uRGF0YWJhc2VTZXRJY29uRGF0YWJhc2VDbGllbnQodG9BUEkod2Vi
SWNvbkRhdGFiYXNlKSwgJmljb25EYXRhYmFzZUNsaWVudCk7Cit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvQ2xpZW50SW1wbC5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3F0L0NsaWVudEltcGwuaAppbmRleCA0ZWY4OTc1Li42Y2ZhMmZlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvQ2xpZW50SW1wbC5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9xdC9DbGllbnRJbXBsLmgKQEAgLTIzLDE2ICsyMywxOCBAQAogI2lu
Y2x1ZGUgPFdlYktpdDIvV0tDb250ZXh0Lmg+CiAKIGNsYXNzIFF0V2ViUGFnZVByb3h5OworY2xh
c3MgUXRXZWJJY29uRGF0YWJhc2U7CiBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIFF0UG9saWN5
SW50ZXJmYWNlOwogY2xhc3MgV2ViUGFnZVByb3h5OworY2xhc3MgV2ViSWNvbkRhdGFiYXNlOwog
fQogCiB2b2lkIHNldHVwUGFnZUxvYWRlckNsaWVudChRdFdlYlBhZ2VQcm94eSosIFdlYktpdDo6
V2ViUGFnZVByb3h5Kik7CiB2b2lkIHNldHVwUGFnZVVpQ2xpZW50KFF0V2ViUGFnZVByb3h5Kiwg
V2ViS2l0OjpXZWJQYWdlUHJveHkqKTsKIHZvaWQgc2V0dXBQYWdlUG9saWN5Q2xpZW50KFdlYktp
dDo6UXRQb2xpY3lJbnRlcmZhY2UqLCBXZWJLaXQ6OldlYlBhZ2VQcm94eSopOwordm9pZCBzZXR1
cEljb25EYXRhYmFzZUNsaWVudChRdFdlYkljb25EYXRhYmFzZSosIFdlYktpdDo6V2ViSWNvbkRh
dGFiYXNlKik7CiAKIHZvaWQgc2V0dXBDb250ZXh0SW5qZWN0ZWRCdW5kbGVDbGllbnQoV0tDb250
ZXh0UmVmKTsKIAogI2VuZGlmIC8qIENsaWVudEltcGxfaCAqLwotCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRWaWV3SW50ZXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9xdC9RdFZpZXdJbnRlcmZhY2UuY3BwCmluZGV4IDZkODMyOWIuLjYyNDFk
NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFZpZXdJbnRlcmZh
Y2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFZpZXdJbnRlcmZhY2Uu
Y3BwCkBAIC0yNDMsNSArMjQzLDEwIEBAIHZvaWQgUXRWaWV3SW50ZXJmYWNlOjpjaG9vc2VGaWxl
cyhXS09wZW5QYW5lbFJlc3VsdExpc3RlbmVyUmVmIGxpc3RlbmVyUmVmLCBjb25zCiAgICAgbV92
aWV3cG9ydFZpZXctPmRfZnVuYygpLT5jaG9vc2VGaWxlcyhsaXN0ZW5lclJlZiwgc2VsZWN0ZWRG
aWxlTmFtZXMsIHR5cGUpOwogfQogCit2b2lkIFF0Vmlld0ludGVyZmFjZTo6ZGlkQ2hhbmdlRmF2
SWNvblNvdXJjZShjb25zdCBRVXJsJiB1cmwpCit7CisgICAgZW1pdCBtX3ZpZXdwb3J0Vmlldy0+
ZmF2SWNvblNvdXJjZUNoYW5nZWQodXJsKTsKK30KKwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRWaWV3SW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvUXRWaWV3SW50ZXJmYWNlLmgKaW5kZXggNTRjODM0MS4uYWY5ZDEwMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld0ludGVyZmFjZS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFZpZXdJbnRlcmZhY2UuaApAQCAtODUs
NiArODUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGxvYWREaWRTdWNjZWVkKCk7CiAg
ICAgdmlydHVhbCB2b2lkIGxvYWREaWRGYWlsKGNvbnN0IFF0V2ViRXJyb3ImKTsKICAgICB2aXJ0
dWFsIHZvaWQgZGlkQ2hhbmdlTG9hZFByb2dyZXNzKGludCk7CisgICAgdmlydHVhbCB2b2lkIGRp
ZENoYW5nZUZhdkljb25Tb3VyY2UoY29uc3QgUVVybCYpOwogCiAgICAgdmlydHVhbCB2b2lkIHNo
b3dDb250ZXh0TWVudShRU2hhcmVkUG9pbnRlcjxRTWVudT4pOwogICAgIHZpcnR1YWwgdm9pZCBo
aWRlQ29udGV4dE1lbnUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9x
dC9RdFdlYkljb25EYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRX
ZWJJY29uRGF0YWJhc2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEx
NWZkMjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRX
ZWJJY29uRGF0YWJhc2UuY3BwCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICAgIENvcHlyaWdodCAo
QykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUXRXZWJJY29uRGF0YWJhc2UuaCIKKwor
I2luY2x1ZGUgIkNsaWVudEltcGwuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIktV
UkwuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJXZWJDb250ZXh0Lmgi
CisjaW5jbHVkZSAiV2ViSWNvbkRhdGFiYXNlLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorCitzdGF0aWMgUXRXZWJJY29uRGF0YWJhc2UqIGdsb2JhbFF0SWNvbkRhdGFiYXNlID0g
MDsKKworUXRXZWJJY29uRGF0YWJhc2UqIHF0V2ViSWNvbkRhdGFiYXNlKCkKK3sKKyAgICByZXR1
cm4gZ2xvYmFsUXRJY29uRGF0YWJhc2U7Cit9CisKK3ZvaWQgUXRXZWJJY29uRGF0YWJhc2U6Omlu
aXQoV2ViQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBpZiAoIWdsb2JhbFF0SWNvbkRhdGFiYXNl
KQorICAgICAgICBnbG9iYWxRdEljb25EYXRhYmFzZSA9IG5ldyBRdFdlYkljb25EYXRhYmFzZShj
b250ZXh0KTsKK30KKworUXRXZWJJY29uRGF0YWJhc2U6OlF0V2ViSWNvbkRhdGFiYXNlKFdlYkNv
bnRleHQqIGNvbnRleHQpCisgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1fbGFzdElj
b25JZCgwKQoreworICAgIC8vIEZJWE1FOiB1c2VyIHNob3VsZCBiZSBhYmxlIHRvIHNldCBpdHMg
b3duIGljb24gZGF0YWJhc2UgcGF0aAorICAgIC8vIHJhdGhlciB0aGFuIGFsd2F5cyB1c2luZyB0
aGUgZGVmYXVsdCBwYXRoLgorICAgIG1fY29udGV4dC0+c2V0SWNvbkRhdGFiYXNlUGF0aChtX2Nv
bnRleHQtPmljb25EYXRhYmFzZVBhdGgoKSk7CisgICAgc2V0dXBJY29uRGF0YWJhc2VDbGllbnQo
dGhpcywgbV9jb250ZXh0LT5pY29uRGF0YWJhc2UoKSk7Cit9CisKK1F0V2ViSWNvbkRhdGFiYXNl
Ojp+UXRXZWJJY29uRGF0YWJhc2UoKQoreworfQorCitRUGl4bWFwIFF0V2ViSWNvbkRhdGFiYXNl
OjppY29uSW1hZ2VGb3JQYWdlVVJMKGNvbnN0IFFVcmwmIHBhZ2VVUkwpCit7CisgICAgaWYgKCFt
X2NvbnRleHQpCisgICAgICAgIHJldHVybiBRUGl4bWFwKCk7CisKKyAgICBTdHJpbmcgdXJsID0g
V2ViQ29yZTo6S1VSTChwYWdlVVJMKS5zdHJpbmcoKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SW1h
Z2U+IGltYWdlID0gbV9jb250ZXh0LT5pY29uRGF0YWJhc2UoKS0+aW1hZ2VGb3JQYWdlVVJMKHVy
bCk7CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuIFFQaXhtYXAoKTsKKworICAgIFFQ
aXhtYXAqIG5hdGl2ZUltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7
CisgICAgaWYgKCFuYXRpdmVJbWFnZSkKKyAgICAgICAgcmV0dXJuIFFQaXhtYXAoKTsKKworICAg
IHJldHVybiAqbmF0aXZlSW1hZ2U7Cit9CisKK3ZvaWQgUXRXZWJJY29uRGF0YWJhc2U6OnJlcXVl
c3RJY29uSWRGb3JQYWdlVVJMKGNvbnN0IFFVcmwmIHVybCkKK3sKKyAgICBpZiAoIW1fY29udGV4
dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgUVBpeG1hcCBpY29uID0gaWNvbkltYWdlRm9yUGFn
ZVVSTCh1cmwpOworICAgIGlmIChpY29uLmlzTnVsbCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX3BpeG1hcEZvckljb25JZFsrK21fbGFzdEljb25JZF0gPSBpY29uOworICAgIGVtaXQgaWNv
bklkUmVhZHlGb3JQYWdlVVJMKG1fbGFzdEljb25JZCwgdXJsKTsKK30KKwordm9pZCBRdFdlYklj
b25EYXRhYmFzZTo6cmVtb3ZlQWxsSWNvbnMoKQoreworICAgIGlmICghbV9jb250ZXh0KQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX2NvbnRleHQtPmljb25EYXRhYmFzZSgpLT5yZW1vdmVBbGxJ
Y29ucygpOworfQorCitRUGl4bWFwIFF0V2ViSWNvbkRhdGFiYXNlOjppY29uSW1hZ2VGb3JJY29u
SWQoaW50IGlkKQoreworICAgIFFNYXA8aW50LCBRUGl4bWFwPjo6aXRlcmF0b3IgaXQgPSBtX3Bp
eG1hcEZvckljb25JZC5maW5kKGlkKTsKKyAgICBpZiAoaXQgPT0gbV9waXhtYXBGb3JJY29uSWQu
Y29uc3RFbmQoKSkKKyAgICAgICAgcmV0dXJuIFFQaXhtYXAoKTsKKworICAgIHJldHVybiBpdC52
YWx1ZSgpOworfQorCit2b2lkIFF0V2ViSWNvbkRhdGFiYXNlOjpyZXRhaW5JY29uSWQoaW50IGlk
KQoreworICAgIFFNYXA8aW50LCBpbnQ+OjppdGVyYXRvciBpdCA9IG1fcmV0YWluQ291bnRGb3JJ
Y29uSWQuZmluZChpZCk7CisgICAgaWYgKGl0ICE9IG1fcmV0YWluQ291bnRGb3JJY29uSWQuY29u
c3RFbmQoKSkgeworICAgICAgICArK21fcmV0YWluQ291bnRGb3JJY29uSWRbaWRdOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIG1fcmV0YWluQ291bnRGb3JJY29uSWRbaWRdID0gMTsKK30K
Kwordm9pZCBRdFdlYkljb25EYXRhYmFzZTo6cmVsZWFzZUljb25JZChpbnQgaWQpCit7CisgICAg
UU1hcDxpbnQsIGludD46Oml0ZXJhdG9yIGl0ID0gbV9yZXRhaW5Db3VudEZvckljb25JZC5maW5k
KGlkKTsKKyAgICBpZiAoaXQgPT0gbV9yZXRhaW5Db3VudEZvckljb25JZC5jb25zdEVuZCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoaXQudmFsdWUoKSA9PSAxKSB7CisgICAgICAgIG1f
cmV0YWluQ291bnRGb3JJY29uSWQucmVtb3ZlKGlkKTsKKyAgICAgICAgbV9waXhtYXBGb3JJY29u
SWQucmVtb3ZlKGlkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC0tbV9yZXRhaW5D
b3VudEZvckljb25JZFtpZF07Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvUXRXZWJJY29uRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9R
dFdlYkljb25EYXRhYmFzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYw
NTczNmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRX
ZWJJY29uRGF0YWJhc2UuaApAQCAtMCwwICsxLDY4IEBACisvKgorICAgIENvcHlyaWdodCAoQykg
MjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAg
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisK
KyNpZm5kZWYgUXRXZWJJY29uRGF0YWJhc2VfaAorI2RlZmluZSBRdFdlYkljb25EYXRhYmFzZV9o
CisKKyNpbmNsdWRlICJXS0ljb25EYXRhYmFzZS5oIgorI2luY2x1ZGUgInF3ZWJraXRnbG9iYWwu
aCIKKyNpbmNsdWRlIDxRdENvcmUvUU1hcD4KKyNpbmNsdWRlIDxRdENvcmUvUU9iamVjdD4KKyNp
bmNsdWRlIDxRdENvcmUvUVVybD4KKyNpbmNsdWRlIDxRdEd1aS9RUGl4bWFwPgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKK2NsYXNzIFdlYkNvbnRleHQ7Cit9CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJL
aXQ7CisKK2NsYXNzIFF0V2ViSWNvbkRhdGFiYXNlIDogcHVibGljIFFPYmplY3QgeworICAgIFFf
T0JKRUNUCisKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBpbml0KFdlYkNvbnRleHQqKTsKKyAg
ICB+UXRXZWJJY29uRGF0YWJhc2UoKTsKKworICAgIFFQaXhtYXAgaWNvbkltYWdlRm9ySWNvbklk
KGludCBpZCk7CisgICAgUVBpeG1hcCBpY29uSW1hZ2VGb3JQYWdlVVJMKGNvbnN0IFFVcmwmKTsK
KyAgICB2b2lkIHJldGFpbkljb25JZChpbnQgaWQpOworICAgIHZvaWQgcmVsZWFzZUljb25JZChp
bnQgaWQpOworCitwdWJsaWMgUV9TTE9UUzoKKyAgICB2b2lkIHJlbW92ZUFsbEljb25zKCk7Cisg
ICAgdm9pZCByZXF1ZXN0SWNvbklkRm9yUGFnZVVSTChjb25zdCBRVXJsJik7CisKK3B1YmxpYzoK
KyAgICBRX1NJR05BTCB2b2lkIGRpZFJlbW92ZUFsbEljb25zKCk7CisgICAgUV9TSUdOQUwgdm9p
ZCBpY29uSWRSZWFkeUZvclBhZ2VVUkwoaW50LCBjb25zdCBRVXJsJik7CisKK3ByaXZhdGU6Cisg
ICAgUXRXZWJJY29uRGF0YWJhc2UoV2ViQ29udGV4dCopOworICAgIFdlYkNvbnRleHQqIG1fY29u
dGV4dDsKKyAgICBRTWFwPGludCwgUVBpeG1hcD4gbV9waXhtYXBGb3JJY29uSWQ7CisgICAgUU1h
cDxpbnQsIGludD4gbV9yZXRhaW5Db3VudEZvckljb25JZDsKKyAgICBpbnQgbV9sYXN0SWNvbklk
OworfTsKKworLy8gRnVuY3Rpb24gdG8gZ2V0IHRoZSBnbG9iYWwgaW5zdGFuY2Ugb2YgUXRXZWJJ
Y29uRGF0YWJhc2UuCitRdFdlYkljb25EYXRhYmFzZSogcXRXZWJJY29uRGF0YWJhc2UoKTsKKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdl
UHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVByb3h5LmNw
cAppbmRleCAzNTY0ZGQ2Li4xNDdhMjUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9xdC9RdFdlYlBhZ2VQcm94eS5jcHAKQEAgLTIxLDE3ICsyMSw5IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiUXRXZWJQYWdlUHJveHkuaCIKIAotI2luY2x1ZGUgIlF0V2ViRXJy
b3IuaCIKLSNpbmNsdWRlICJxd2ViZG93bmxvYWRpdGVtLmgiCi0jaW5jbHVkZSAicXdlYmRvd25s
b2FkaXRlbV9wLmgiCi0jaW5jbHVkZSAicXdlYnByZWZlcmVuY2VzLmgiCi0jaW5jbHVkZSAicXdl
YnByZWZlcmVuY2VzX3AuaCIKLQogI2luY2x1ZGUgIkNsaWVudEltcGwuaCIKICNpbmNsdWRlICJE
b3dubG9hZFByb3h5LmgiCiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eUltcGwuaCIKLSNpbmNs
dWRlICJxd2toaXN0b3J5LmgiCi0jaW5jbHVkZSAicXdraGlzdG9yeV9wLmgiCiAjaW5jbHVkZSAi
RmluZEluZGljYXRvci5oIgogI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKICNpbmNsdWRl
ICJNdXRhYmxlQXJyYXkuaCIKQEAgLTQyLDE3ICszNCwyNiBAQAogI2luY2x1ZGUgIlF0UG9saWN5
SW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiUXRWaWV3SW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiUXRW
aWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmgiCisjaW5jbHVkZSAiUXRXZWJFcnJvci5oIgorI2lu
Y2x1ZGUgIlF0V2ViSWNvbkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiUXRXZWJVbmRvQ29tbWFuZC5o
IgorI2luY2x1ZGUgIldLSWNvbkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiV0tTdHJpbmdRdC5oIgor
I2luY2x1ZGUgIldLVVJMUXQuaCIKICNpbmNsdWRlICJXZWJCYWNrRm9yd2FyZExpc3QuaCIKICNp
bmNsdWRlICJXZWJDb250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViQ29udGV4dE1lbnVQcm94eVF0Lmgi
CiAjaW5jbHVkZSAiV2ViRWRpdENvbW1hbmRQcm94eS5oIgogI2luY2x1ZGUgIldlYkV2ZW50RmFj
dG9yeVF0LmgiCiAjaW5jbHVkZSAiV2ViUG9wdXBNZW51UHJveHlRdC5oIgotI2luY2x1ZGUgIldL
U3RyaW5nUXQuaCIKLSNpbmNsdWRlICJXS1VSTFF0LmgiCi0jaW5jbHVkZSA8UUd1aUFwcGxpY2F0
aW9uPgorI2luY2x1ZGUgInF3ZWJkb3dubG9hZGl0ZW0uaCIKKyNpbmNsdWRlICJxd2ViZG93bmxv
YWRpdGVtX3AuaCIKKyNpbmNsdWRlICJxd2VicHJlZmVyZW5jZXMuaCIKKyNpbmNsdWRlICJxd2Vi
cHJlZmVyZW5jZXNfcC5oIgorI2luY2x1ZGUgInF3a2hpc3RvcnkuaCIKKyNpbmNsdWRlICJxd2to
aXN0b3J5X3AuaCIKICNpbmNsdWRlIDxRR3JhcGhpY3NTY2VuZU1vdXNlRXZlbnQ+CisjaW5jbHVk
ZSA8UUd1aUFwcGxpY2F0aW9uPgogI2luY2x1ZGUgPFFKU0VuZ2luZT4KICNpbmNsdWRlIDxRTWlt
ZURhdGE+CiAjaW5jbHVkZSA8UVN0eWxlSGludHM+CkBAIC04Miw2ICs4MywxMCBAQCBQYXNzUmVm
UHRyPFdlYkNvbnRleHQ+IFF0V2ViUGFnZVByb3h5OjpkZWZhdWx0V0tDb250ZXh0KCkKICAgICAg
ICAgc19kZWZhdWx0Q29udGV4dCA9IFdlYkNvbnRleHQ6OmNyZWF0ZShTdHJpbmcoKSk7CiAgICAg
ICAgIHNldHVwQ29udGV4dEluamVjdGVkQnVuZGxlQ2xpZW50KHRvQVBJKHNfZGVmYXVsdENvbnRl
eHQuZ2V0KCkpKTsKICAgICAgICAgc19kb3dubG9hZE1hbmFnZXIgPSBRdERvd25sb2FkTWFuYWdl
cjo6Y3JlYXRlKHNfZGVmYXVsdENvbnRleHQuZ2V0KCkpOworCisgICAgICAgIC8vIEZJWE1FOiBU
aGlzIGlzIHdoZXJlIHRoZSBpY29uZGF0YWJhc2UncyBjbGllbnQgaXMgaW5qZWN0ZWQsCisgICAg
ICAgIC8vIGlmIHRoZXJlJ3Mgbm8gaW5zdGFuY2Ugb2YgaXQgYnkgbm93LCB0aGVuIGl0J3MgY3Jl
YXRlZC4KKyAgICAgICAgUXRXZWJJY29uRGF0YWJhc2U6OmluaXQoc19kZWZhdWx0Q29udGV4dC5n
ZXQoKSk7CiAgICAgfQogICAgIHJldHVybiBzX2RlZmF1bHRDb250ZXh0OwogfQpAQCAtMTY4LDYg
KzE3Myw4IEBAIFF0V2ViUGFnZVByb3h5Ojp+UXRXZWJQYWdlUHJveHkoKQogICAgICAgICBpZiAo
IXNfZGVmYXVsdFBhZ2VQcm94eUNvdW50KSB7CiAgICAgICAgICAgICBzX2RlZmF1bHRDb250ZXh0
LmNsZWFyKCk7CiAgICAgICAgICAgICBzX2Rvd25sb2FkTWFuYWdlci5jbGVhcigpOworICAgICAg
ICAgICAgaWYgKHF0V2ViSWNvbkRhdGFiYXNlKCkpCisgICAgICAgICAgICAgICAgZGVsZXRlIHF0
V2ViSWNvbkRhdGFiYXNlKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgZGVsZXRlIG1faGlzdG9y
eTsKQEAgLTU0Myw3ICs1NTAsNyBAQCB2b2lkIFF0V2ViUGFnZVByb3h5OjpmbGFzaEJhY2tpbmdT
dG9yZVVwZGF0ZXMoY29uc3QgVmVjdG9yPEludFJlY3Q+JikKIAogV0tQYWdlUmVmIFF0V2ViUGFn
ZVByb3h5OjpwYWdlUmVmKCkgY29uc3QKIHsKLSAgICByZXR1cm4gdG9BUEkobV93ZWJQYWdlUHJv
eHkuZ2V0KCkpOzsKKyAgICByZXR1cm4gdG9BUEkobV93ZWJQYWdlUHJveHkuZ2V0KCkpOwogfQog
CiB2b2lkIFF0V2ViUGFnZVByb3h5OjpkaWRGaW5kWm9vbWFibGVBcmVhKGNvbnN0IEludFBvaW50
JiB0YXJnZXQsIGNvbnN0IEludFJlY3QmIGFyZWEpCkBAIC05MTksNCArOTI2LDQ3IEBAIHZvaWQg
UXRXZWJQYWdlUHJveHk6OmZpbmRab29tYWJsZUFyZWFGb3JQb2ludChjb25zdCBRUG9pbnQmIHBv
aW50KQogICAgIG1fd2ViUGFnZVByb3h5LT5maW5kWm9vbWFibGVBcmVhRm9yUG9pbnQocG9pbnQp
OwogfQogCit2b2lkIFF0V2ViUGFnZVByb3h5OjpyZXF1ZXN0SWNvbklkRm9yUGFnZVVSTChjb25z
dCBRVXJsJiBwYWdlVVJMKQoreworICAgIGlmICghcXRXZWJJY29uRGF0YWJhc2UoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIHF0V2ViSWNvbkRhdGFiYXNlKCktPnJlcXVlc3RJY29uSWRGb3JQYWdl
VVJMKHBhZ2VVUkwpOworfQorCit2b2lkIFF0V2ViUGFnZVByb3h5OjpjbGVhbnVwSWNvbkRhdGFi
YXNlKCkKK3sKKyAgICBpZiAoIXF0V2ViSWNvbkRhdGFiYXNlKCkpCisgICAgICAgIHJldHVybjsK
KyAgICBxdFdlYkljb25EYXRhYmFzZSgpLT5yZW1vdmVBbGxJY29ucygpOworfQorCit2b2lkIFF0
V2ViUGFnZVByb3h5OjpzZXRGYXZJY29uSWQoaW50IGlkKQoreworICAgIGlmICghcXRXZWJJY29u
RGF0YWJhc2UoKSB8fCBtX2Zhdkljb25JZCA9PSBpZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKG1fZmF2SWNvbklkKQorICAgICAgICBxdFdlYkljb25EYXRhYmFzZSgpLT5yZWxlYXNlSWNv
bklkKG1fZmF2SWNvbklkKTsKKyAgICBtX2Zhdkljb25JZCA9IGlkOworICAgIGlmIChtX2Zhdklj
b25JZCkKKyAgICAgICAgcXRXZWJJY29uRGF0YWJhc2UoKS0+cmV0YWluSWNvbklkKG1fZmF2SWNv
bklkKTsKKworICAgIFFTdHJpbmcgZmF2SWNvblNvdXJjZSA9IFFMYXRpbjFTdHJpbmcoImltYWdl
Oi8vZmF2aWNvbi8lMSIpOworICAgIG1fZmF2SWNvblNvdXJjZSA9IFFVcmwoZmF2SWNvblNvdXJj
ZS5hcmcobV9mYXZJY29uSWQpKTsKKyAgICB2aWV3SW50ZXJmYWNlKCktPmRpZENoYW5nZUZhdklj
b25Tb3VyY2UobV9mYXZJY29uU291cmNlKTsKK30KKwordm9pZCBRdFdlYlBhZ2VQcm94eTo6ZGlk
UmVjZWl2ZUljb25JZEZvclBhZ2VVUkwoaW50IGlkLCBjb25zdCBRVXJsJiBwYWdlVVJMKQorewor
ICAgIGlmICh1cmwoKSAhPSBwYWdlVVJMKQorICAgICAgICByZXR1cm47CisKKyAgICBzZXRGYXZJ
Y29uSWQoaWQpOworfQorCit2b2lkIFF0V2ViUGFnZVByb3h5OjpkaWRDbGVhbnVwSWNvbkRhdGFi
YXNlKCkKK3sKKyAgICBzZXRGYXZJY29uSWQoMCk7Cit9CisKICNpbmNsdWRlICJtb2NfUXRXZWJQ
YWdlUHJveHkuY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0
V2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlUHJv
eHkuaAppbmRleCA2NmRjNDdkLi45YmFkNDU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvUXRXZWJQYWdlUHJveHkuaApAQCAtMzQsMTMgKzM0LDEzIEBACiAjaW5jbHVkZSAiVmll
d3BvcnRBcmd1bWVudHMuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0LmgiCiAjaW5jbHVkZSAiV2Vi
UGFnZVByb3h5LmgiCi0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPFFCYXNpY1Rp
bWVyPgogI2luY2x1ZGUgPFFHcmFwaGljc1ZpZXc+CiAjaW5jbHVkZSA8UUtleUV2ZW50PgotI2lu
Y2x1ZGUgPFFUb3VjaEV2ZW50PgogI2luY2x1ZGUgPFFNZW51PgogI2luY2x1ZGUgPFFTaGFyZWRQ
b2ludGVyPgorI2luY2x1ZGUgPFFUb3VjaEV2ZW50PgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
IAogUVRfQkVHSU5fTkFNRVNQQUNFCiBjbGFzcyBRVW5kb1N0YWNrOwpAQCAtNTIsNyArNTIsNyBA
QCBjbGFzcyBRV0tIaXN0b3J5OwogCiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCi1XZWJDb3Jl
OjpEcmFnT3BlcmF0aW9uIGRyb3BBY3Rpb25Ub0RyYWdPcGVyYXRpb24oUXQ6OkRyb3BBY3Rpb25z
IGFjdGlvbnMpOworV2ViQ29yZTo6RHJhZ09wZXJhdGlvbiBkcm9wQWN0aW9uVG9EcmFnT3BlcmF0
aW9uKFF0OjpEcm9wQWN0aW9ucyk7CiAKIC8vIEZJWE1FOiBuZWVkcyBmb2N1cyBpbi9vdXQsIHdp
bmRvdyBhY3RpdmF0aW9uLCBzdXBwb3J0IHRocm91Z2ggdmlld1N0YXRlRGlkQ2hhbmdlKCkuCiBj
bGFzcyBRdFdlYlBhZ2VQcm94eSA6IHB1YmxpYyBRT2JqZWN0LCBXZWJLaXQ6OlBhZ2VDbGllbnQg
ewpAQCAtMTA0LDcgKzEwNCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc3RhcnREcmFn
KGNvbnN0IFdlYkNvcmU6OkRyYWdEYXRhJiwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGRy
YWdJbWFnZSk7CiAgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVZpZXdwb3J0UHJvcGVydGllcyhj
b25zdCBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRD
dXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJik7Ci0gICAgdmlydHVhbCB2b2lkIHNldEN1cnNv
ckhpZGRlblVudGlsTW91c2VNb3Zlcyhib29sIGhpZGRlblVudGlsTW91c2VNb3Zlcyk7CisgICAg
dmlydHVhbCB2b2lkIHNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zlcyhib29sKTsKICAgICB2
aXJ0dWFsIHZvaWQgdG9vbFRpcENoYW5nZWQoY29uc3QgV1RGOjpTdHJpbmcmLCBjb25zdCBXVEY6
OlN0cmluZyYpOwogICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckVkaXRDb21tYW5kKFBhc3NSZWZQ
dHI8V2ViS2l0OjpXZWJFZGl0Q29tbWFuZFByb3h5PiwgV2ViS2l0OjpXZWJQYWdlUHJveHk6OlVu
ZG9PclJlZG8pOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhckFsbEVkaXRDb21tYW5kcygpOwpAQCAt
MTYwLDggKzE2MCw5IEBAIHB1YmxpYzoKIAogICAgIFdLUGFnZVJlZiBwYWdlUmVmKCkgY29uc3Q7
CiAKLSAgICB2b2lkIGxvYWQoY29uc3QgUVVybCYgdXJsKTsKKyAgICB2b2lkIGxvYWQoY29uc3Qg
UVVybCYpOwogICAgIFFVcmwgdXJsKCkgY29uc3Q7CisgICAgUVVybCBmYXZJY29uU291cmNlKCkg
Y29uc3QgeyByZXR1cm4gbV9mYXZJY29uU291cmNlOyB9CiAKICAgICB2b2lkIHNldERyYXdpbmdB
cmVhU2l6ZShjb25zdCBRU2l6ZSYpOwogCkBAIC0xODEsOCArMTgyLDggQEAgcHVibGljOgogCiAg
ICAgcXJlYWwgdGV4dFpvb21GYWN0b3IoKSBjb25zdDsKICAgICBxcmVhbCBwYWdlWm9vbUZhY3Rv
cigpIGNvbnN0OwotICAgIHZvaWQgc2V0VGV4dFpvb21GYWN0b3IocXJlYWwgem9vbUZhY3Rvcik7
Ci0gICAgdm9pZCBzZXRQYWdlWm9vbUZhY3RvcihxcmVhbCB6b29tRmFjdG9yKTsKKyAgICB2b2lk
IHNldFRleHRab29tRmFjdG9yKHFyZWFsKTsKKyAgICB2b2lkIHNldFBhZ2Vab29tRmFjdG9yKHFy
ZWFsKTsKICAgICB2b2lkIHNldFBhZ2VBbmRUZXh0Wm9vbUZhY3RvcnMocXJlYWwgcGFnZVpvb21G
YWN0b3IsIHFyZWFsIHRleHRab29tRmFjdG9yKTsKIAogICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRl
bnRSZWN0QW5kU2NhbGUoY29uc3QgUVJlY3RGJiwgZmxvYXQpOwpAQCAtMTk5LDkgKzIwMCwxNCBA
QCBwdWJsaWM6CiAgICAgdm9pZCBoYW5kbGVTaW5nbGVUYXBFdmVudChjb25zdCBRVG91Y2hFdmVu
dDo6VG91Y2hQb2ludCYpOwogICAgIHZvaWQgaGFuZGxlRG91YmxlVGFwRXZlbnQoY29uc3QgUVRv
dWNoRXZlbnQ6OlRvdWNoUG9pbnQmKTsKIAorICAgIHZvaWQgcmVxdWVzdEljb25JZEZvclBhZ2VV
UkwoY29uc3QgUVVybCYpOworICAgIHZvaWQgY2xlYW51cEljb25EYXRhYmFzZSgpOworCiBwdWJs
aWMgUV9TTE9UUzoKICAgICB2b2lkIG5hdmlnYXRpb25TdGF0ZUNoYW5nZWQoKTsKICAgICB2b2lk
IGRpZFJlY2VpdmVEb3dubG9hZFJlc3BvbnNlKFFXZWJEb3dubG9hZEl0ZW0qKTsKKyAgICB2b2lk
IGRpZFJlY2VpdmVJY29uSWRGb3JQYWdlVVJMKGludCwgY29uc3QgUVVybCYpOworICAgIHZvaWQg
ZGlkQ2xlYW51cEljb25EYXRhYmFzZSgpOwogCiBwdWJsaWM6CiAgICAgUV9TSUdOQUwgdm9pZCB6
b29tYWJsZUFyZWFGb3VuZChjb25zdCBRUmVjdCYpOwpAQCAtMjA5LDcgKzIxNSw3IEBAIHB1Ymxp
YzoKICAgICBRX1NJR05BTCB2b2lkIHJlY2VpdmVkTWVzc2FnZUZyb21OYXZpZ2F0b3JRdE9iamVj
dChjb25zdCBRVmFyaWFudE1hcCYpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIHBh
aW50Q29udGVudChRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVJlY3QmIGFyZWEpOworICAgIHZp
cnR1YWwgdm9pZCBwYWludENvbnRlbnQoUVBhaW50ZXIqLCBjb25zdCBRUmVjdCYgYXJlYSk7CiAg
ICAgUmVmUHRyPFdlYktpdDo6V2ViUGFnZVByb3h5PiBtX3dlYlBhZ2VQcm94eTsKICAgICBXZWJL
aXQ6OlF0Vmlld0ludGVyZmFjZSogY29uc3QgbV92aWV3SW50ZXJmYWNlOwogICAgIFF0Vmlld3Bv
cnRJbnRlcmFjdGlvbkVuZ2luZSogbV9pbnRlcmFjdGlvbkVuZ2luZTsKQEAgLTIzNSw2ICsyNDEs
OCBAQCBwcml2YXRlOgogICAgIGJvb2wgaGFuZGxlRHJhZ01vdmVFdmVudChRRHJhZ01vdmVFdmVu
dCopOwogICAgIGJvb2wgaGFuZGxlRHJvcEV2ZW50KFFEcm9wRXZlbnQqKTsKIAorICAgIHZvaWQg
c2V0RmF2SWNvbklkKGludCk7CisKICAgICB2aXJ0dWFsIHZvaWQgdGltZXJFdmVudChRVGltZXJF
dmVudCopOwogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKQEAgLTI1OSw2ICsyNjcsOCBAQCBw
cml2YXRlOgogICAgIGJvb2wgbV9uYXZpZ2F0b3JRdE9iamVjdEVuYWJsZWQ7CiAgICAgUVBvaW50
IG1fdHJpcGxlQ2xpY2s7CiAgICAgUUJhc2ljVGltZXIgbV90cmlwbGVDbGlja1RpbWVyOworICAg
IGludCBtX2Zhdkljb25JZDsKKyAgICBRVXJsIG1fZmF2SWNvblNvdXJjZTsKIH07CiAKICNlbmRp
ZiAvKiBRdFdlYlBhZ2VQcm94eV9oICovCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9U
b29scy9DaGFuZ2VMb2cKaW5kZXggNWY1MjE4Yi4uMGUyOWIzMSAxMDA2NDQKLS0tIGEvVG9vbHMv
Q2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDExLTEx
LTE0ICBSYWZhZWwgQnJhbmRhbyAgPHJhZmFlbC5sb2JvQG9wZW5ib3NzYS5vcmc+CisKKyAgICAg
ICAgW1F0XVtXSzJdIEltcGxlbWVudCBmYXZpY29uIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMDgyCisKKyAgICAgICAgQWRkZWQgYSBG
YXZJY29uIHRvIE1pbmlCcm93c2VyIGFzIGFuIGV4YW1wbGUgb2YgaXRzIHVzZS4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE1pbmlCcm93c2VyL3F0
L3FtbC9Ccm93c2VyV2luZG93LnFtbDoKKwogMjAxMS0xMS0xNCAgQW5kcmV3IFNjaGVya3VzICA8
c2NoZXJrdXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gU2tpcCBtZWRpYSBs
YXlvdXQgdGVzdHMgb24gY2hyb21pdW0tZ3B1LWNnLW1hYy1sZW9wYXJkIHBsYXRmb3JtCmRpZmYg
LS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvQnJvd3NlcldpbmRvdy5xbWwgYi9Ub29s
cy9NaW5pQnJvd3Nlci9xdC9xbWwvQnJvd3NlcldpbmRvdy5xbWwKaW5kZXggNWNjMTUyYS4uMmRh
YThjMyAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvcW1sL0Jyb3dzZXJXaW5kb3cu
cW1sCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L3FtbC9Ccm93c2VyV2luZG93LnFtbApAQCAt
MTU3LDYgKzE1NywyMiBAQCBSZWN0YW5nbGUgewogICAgICAgICAgICAgICAgIHZpc2libGU6IHdl
YlZpZXcubG9hZFByb2dyZXNzICE9IDEwMAogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBJ
bWFnZSB7CisgICAgICAgICAgICAgICAgaWQ6IGZhdmljb24KKyAgICAgICAgICAgICAgICBzb3Vy
Y2U6IHdlYlZpZXcuZmF2SWNvblNvdXJjZQorICAgICAgICAgICAgICAgIHdpZHRoOiAxNgorICAg
ICAgICAgICAgICAgIGhlaWdodDogMTYKKyAgICAgICAgICAgICAgICBhbmNob3JzIHsKKyAgICAg
ICAgICAgICAgICAgICAgbGVmdDogcGFyZW50LmxlZnQKKyAgICAgICAgICAgICAgICAgICAgbGVm
dE1hcmdpbjogMgorICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbENlbnRlcjogcGFyZW50LnZl
cnRpY2FsQ2VudGVyCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIE1vdXNlQXJl
YSB7CisgICAgICAgICAgICAgICAgICAgIGFuY2hvcnMuZmlsbDogcGFyZW50CisgICAgICAgICAg
ICAgICAgICAgIG9uRG91YmxlQ2xpY2tlZDogd2ViVmlldy5jbGVhbnVwSWNvbkRhdGFiYXNlKCkK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIFRleHRJbnB1
dCB7CiAgICAgICAgICAgICAgICAgaWQ6IGFkZHJlc3NMaW5lCiAgICAgICAgICAgICAgICAgY2xp
cDogdHJ1ZQpAQCAtMTY3LDcgKzE4Myw3IEBAIFJlY3RhbmdsZSB7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIGFuY2hvcnMgewogICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNh
bENlbnRlcjogcGFyZW50LnZlcnRpY2FsQ2VudGVyCi0gICAgICAgICAgICAgICAgICAgIGxlZnQ6
IHBhcmVudC5sZWZ0CisgICAgICAgICAgICAgICAgICAgIGxlZnQ6IGZhdmljb24ucmlnaHQKICAg
ICAgICAgICAgICAgICAgICAgcmlnaHQ6IHBhcmVudC5yaWdodAogICAgICAgICAgICAgICAgICAg
ICBtYXJnaW5zOiAyCiAgICAgICAgICAgICAgICAgfQo=
</data>
<flag name="review"
          id="113773"
          type_id="1"
          status="-"
          setter="cmarcelo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115075</attachid>
            <date>2011-11-14 17:56:55 -0800</date>
            <delta_ts>2011-11-14 20:15:01 -0800</delta_ts>
            <desc>Addressing caio&apos;s comments on previous patch.</desc>
            <filename>favicon-wip-v8-changelog.diff</filename>
            <type>text/plain</type>
            <size>32705</size>
            <attacher name="Rafael Brandao">rafael.lobo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9x
dC9DaGFuZ2VMb2cKaW5kZXggOTU0NzdkNC4uZGE5ZmMyOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTUgQEAKKzIwMTEtMTEtMTQgIFJhZmFlbCBCcmFuZGFvICA8cmFmYWVsLmxvYm9Ab3Bl
bmJvc3NhLm9yZz4KKworICAgICAgICBbUXRdW1dLMl0gSW1wbGVtZW50IGZhdmljb24gc3VwcG9y
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEwODIK
KworICAgICAgICBTZXR1cCBGYXZJY29uIGltYWdlIHByb3ZpZGVyIHRvIHRoZSBlbmdpbmUgb24g
c3RhcnR1cC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIGRlY2xhcmF0aXZlL3BsdWdpbi5jcHA6CisgICAgICAgIChXZWJLaXRRbWxQbHVnaW46Omlu
aXRpYWxpemVFbmdpbmUpOgorCiAyMDExLTExLTExICBQaWVycmUgUm9zc2kgIDxwaWVycmUucm9z
c2lAZ21haWwuY29tPgogCiAgICAgICAgIFtRdF0gUmVtb3ZlIHRoZSBRU3R5bGUgZGVwZW5kZW5j
eSBpbiBRdCdzIG1vYmlsZSB0aGVtZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9kZWNs
YXJhdGl2ZS9wbHVnaW4uY3BwIGIvU291cmNlL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9wbHVnaW4u
Y3BwCmluZGV4IDM3OWI5NzkuLjYyMzc0ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQv
ZGVjbGFyYXRpdmUvcGx1Z2luLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZl
L3BsdWdpbi5jcHAKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlICJxZGVjbGFyYXRpdmV3ZWJ2
aWV3X3AuaCIKIAogI2luY2x1ZGUgPFF0RGVjbGFyYXRpdmUvcWRlY2xhcmF0aXZlLmg+CisjaW5j
bHVkZSA8UXREZWNsYXJhdGl2ZS9xZGVjbGFyYXRpdmVlbmdpbmUuaD4KICNpbmNsdWRlIDxRdERl
Y2xhcmF0aXZlL3FkZWNsYXJhdGl2ZWV4dGVuc2lvbnBsdWdpbi5oPgogCiAjaWYgZGVmaW5lZChI
QVZFX1dFQktJVDIpCkBAIC0yOSw2ICszMCw3IEBACiAjaW5jbHVkZSAicXdlYnByZWZlcmVuY2Vz
LmgiCiAKICNpbmNsdWRlIDxRdE5ldHdvcmsvcW5ldHdvcmtyZXBseS5oPgorI2luY2x1ZGUgPFdl
YktpdDIvcXdlYmZhdmljb25pbWFnZXByb3ZpZGVyX3AuaD4KICNlbmRpZgogCiBRVF9CRUdJTl9O
QU1FU1BBQ0UKQEAgLTM2LDYgKzM4LDE0IEBAIFFUX0JFR0lOX05BTUVTUEFDRQogY2xhc3MgV2Vi
S2l0UW1sUGx1Z2luIDogcHVibGljIFFEZWNsYXJhdGl2ZUV4dGVuc2lvblBsdWdpbiB7CiAgICAg
UV9PQkpFQ1QKIHB1YmxpYzoKKyNpZiBkZWZpbmVkKEhBVkVfV0VCS0lUMikKKyAgICB2aXJ0dWFs
IHZvaWQgaW5pdGlhbGl6ZUVuZ2luZShRRGVjbGFyYXRpdmVFbmdpbmUqIGVuZ2luZSwgY29uc3Qg
Y2hhciogdXJpKQorICAgIHsKKyAgICAgICAgUV9BU1NFUlQoUUxhdGluMVN0cmluZyh1cmkpID09
IFFMYXRpbjFTdHJpbmcoIlF0V2ViS2l0IikpOworICAgICAgICBlbmdpbmUtPmFkZEltYWdlUHJv
dmlkZXIoUUxhdGluMVN0cmluZygiZmF2aWNvbiIpLCBuZXcgUVdlYkZhdkljb25JbWFnZVByb3Zp
ZGVyKTsKKyAgICB9CisjZW5kaWYKKwogICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlclR5cGVzKGNv
bnN0IGNoYXIqIHVyaSkKICAgICB7CiAgICAgICAgIFFfQVNTRVJUKFFMYXRpbjFTdHJpbmcodXJp
KSA9PSBRTGF0aW4xU3RyaW5nKCJRdFdlYktpdCIpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA5MjQyMThkLi4x
OTNmNTM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjMgQEAKKzIwMTEtMTEtMTQgIFJhZmFlbCBC
cmFuZGFvICA8cmFmYWVsLmxvYm9Ab3BlbmJvc3NhLm9yZz4KKworICAgICAgICBbUXRdW1dLMl0g
SW1wbGVtZW50IGZhdmljb24gc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzEwODIKKworICAgICAgICBRdFdlYkljb25EYXRhYmFzZSB3YXMg
Y3JlYXRlZCB0byBoYW5kbGUgRmF2SWNvbiByZXF1ZXN0cyBhbmQgc3RvcmUKKyAgICAgICAgdGhl
bSB0byBiZSB1c2VkIGJ5IFF0V2ViRmF2SWNvbkltYWdlUHJvdmlkZXIuIFRoZSByZXF1ZXN0IGlz
IGRvbmUgd2hlbgorICAgICAgICBvdXIgV2ViVmlldyBjaGFuZ2VzIGl0cyB1cmwuIEVhY2ggRmF2
SWNvbiBoYXMgYW4gaWQsIGFuZCBwYWdlcyB0aGF0CisgICAgICAgIHNoYXJlIHRoZSBzYW1lIHVy
bCB3aWxsIGFsc28gc2hhcmUgdGhlIHNhbWUgaWNvbi4gVGhlIHZpZXcgbm93IGhhcyBhCisgICAg
ICAgIG5ldyBhdHRyaWJ1dGUgKGZhdkljb25Tb3VyY2UpIGFuZCBpdCBzaG91bGQgYmUgYXR0YWNo
ZWQgdG8gYW4gSW1hZ2UncworICAgICAgICBzb3VyY2Ugb24gUU1MIHRvIHNob3cgdGhlIGljb24u
IEljb25EYXRhYmFzZSBzdG9yYWdlIGxpZXMgb24gVUlQcm9jZXNzLAorICAgICAgICBhbmQgdGhl
IHN5bmNocm9ub3VzIGNhbGwgZm9yIHRoZSBpbWFnZSB0aGF0IGhhcHBlbnMgb24gV2ViSWNvbkRh
dGFiYXNlCisgICAgICAgIHdvbid0IG5lZWQgdG8gc2VuZCBhbnkgbWVzc2FnZSB0byBXZWJQcm9j
ZXNzLiBUaGUgcGFydCBvZiBJY29uRGF0YWJhc2Ugb24KKyAgICAgICAgV2ViUHJvY2VzcyBoYW5k
bGVzIHRoZSBkb3dubG9hZCBvZiB0aGUgcmVzb3VyY2Ugd2hlbiBpdCBpcyBuZWVkZWQsIGFuZCB0
aGVuCisgICAgICAgIHRoZSBjb250ZW50IGRvd25sb2FkZWQgdGhlcmUgaXMgc2VudCB0aHJvdWdo
IElQQyB0byB0aGUgYWN0dWFsIGRhdGFiYXNlLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL3F0L1dLVmlldy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmll
dy5jcHA6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6c2V0UGFnZVByb3h5KToKKyAg
ICAgICAgKFFRdWlja1dlYlZpZXc6OmZhdkljb25Tb3VyY2UpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvcXQvcXF1aWNrd2Vidmlldy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXdl
YmZhdmljb25pbWFnZXByb3ZpZGVyX3AuY3BwOgorICAgICAgICAoUVdlYkZhdkljb25JbWFnZVBy
b3ZpZGVyOjpRV2ViRmF2SWNvbkltYWdlUHJvdmlkZXIpOgorICAgICAgICAoUVdlYkZhdkljb25J
bWFnZVByb3ZpZGVyOjp+UVdlYkZhdkljb25JbWFnZVByb3ZpZGVyKToKKyAgICAgICAgKFFXZWJG
YXZJY29uSW1hZ2VQcm92aWRlcjo6cmVxdWVzdFBpeG1hcCk6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9xdC9xd2ViZmF2aWNvbmltYWdlcHJvdmlkZXJfcC5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJDb250ZXh0Lmg6IEV4cG9zZWQgYSBwcml2YXRlIGZ1bmN0aW9uIHRoYXQgcmV0dXJuIHRo
ZSBkZWZhdWx0IGljb24gZGF0YWJhc2UgcGF0aCBzbyB0aGUgaWNvbgorICAgICAgICBkYXRhYmFz
ZSBzdGFydHVwIGNvdWxkIGJlIGRvbmUuIEl0cyBzdGFydHVwIHJlcXVpcmVzIGEgZnVsbCBwYXRo
IGZvciBhIGZpbGVuYW1lIHdoZXJlIHRoZSBmYXZpY29ucyB3aWxsIGJlCisgICAgICAgIGxvYWRl
ZCBhbmQgc3RvcmVkLCBidXQgdGhpcyB3YXMgbm90IGRvbmUgaW5zaWRlIFdlYkNvbnRleHQuIAor
ICAgICAgICAqIFVJUHJvY2Vzcy9xdC9DbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKHRvUXRXZWJJ
Y29uRGF0YWJhc2UpOgorICAgICAgICAocXRfd2tfaWNvbkRhdGFiYXNlRGlkQ2hhbmdlSWNvbkZv
clBhZ2VVUkwpOgorICAgICAgICAocXRfd2tfaWNvbkRhdGFiYXNlRGlkUmVtb3ZlQWxsSWNvbnMp
OgorICAgICAgICAoc2V0dXBJY29uRGF0YWJhc2VDbGllbnQpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9xdC9DbGllbnRJbXBsLmg6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0V2ViSWNvbkRhdGFi
YXNlLmNwcDogQWRkZWQuCisgICAgICAgIChRdFdlYkljb25EYXRhYmFzZTo6aW5pdCk6CisgICAg
ICAgIChRdFdlYkljb25EYXRhYmFzZTo6UXRXZWJJY29uRGF0YWJhc2UpOgorICAgICAgICAoUXRX
ZWJJY29uRGF0YWJhc2U6On5RdFdlYkljb25EYXRhYmFzZSk6CisgICAgICAgIChRdFdlYkljb25E
YXRhYmFzZTo6aWNvbkltYWdlRm9yUGFnZVVSTCk6CisgICAgICAgIChRdFdlYkljb25EYXRhYmFz
ZTo6cmVxdWVzdEljb25JZEZvclBhZ2VVUkwpOgorICAgICAgICAoUXRXZWJJY29uRGF0YWJhc2U6
Omljb25JbWFnZUZvckljb25JZCk6CisgICAgICAgIChRdFdlYkljb25EYXRhYmFzZTo6cmV0YWlu
SWNvbklkKToKKyAgICAgICAgKFF0V2ViSWNvbkRhdGFiYXNlOjpyZWxlYXNlSWNvbklkKToKKyAg
ICAgICAgKFF0V2ViSWNvbkRhdGFiYXNlOjpnZXROZXh0QXZhaWxhYmxlSWNvbklkKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvcXQvUXRXZWJJY29uRGF0YWJhc2UuaDogQWRkZWQuCisgICAgICAgIChR
dFdlYkljb25EYXRhYmFzZTo6aW5zdGFuY2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFdl
YlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChRdFdlYlBhZ2VQcm94eTo6ZGVmYXVsdFdLQ29udGV4
dCk6CisgICAgICAgIChRdFdlYlBhZ2VQcm94eTo6flF0V2ViUGFnZVByb3h5KToKKyAgICAgICAg
KFF0V2ViUGFnZVByb3h5OjpwYWdlUmVmKToKKyAgICAgICAgKFF0V2ViUGFnZVByb3h5OjpyZXF1
ZXN0SWNvbklkRm9yUGFnZVVSTCk6CisgICAgICAgIChRdFdlYlBhZ2VQcm94eTo6ZmF2SWNvblNv
dXJjZSk6CisgICAgICAgIChRdFdlYlBhZ2VQcm94eTo6dXBkYXRlRmF2SWNvbklkKToKKyAgICAg
ICAgKFF0V2ViUGFnZVByb3h5OjpkaWRSZWNlaXZlSWNvbklkRm9yUGFnZVVSTCk6CisgICAgICAg
ICogVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVByb3h5Lmg6CisKIDIwMTEtMTEtMTQgIEFsZXhpcyBN
ZW5hcmQgIDxhbGV4aXMubWVuYXJkQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAgW1F0XVtXSzJd
IENsZWFudXAgUU1MIHRlc3RzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVGFyZ2V0LnBy
aSBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKaW5kZXggYWQxM2IzZi4uYzgzYWI3NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9U
YXJnZXQucHJpCkBAIC0yNDgsNiArMjQ4LDcgQEAgSEVBREVSUyArPSBcCiAgICAgVUlQcm9jZXNz
L0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmggXAogICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vi
dmlld19wLmggXAogICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld3ByaXZhdGVleHRl
bnNpb25fcC5oIFwKKyAgICBVSVByb2Nlc3MvQVBJL3F0L3F3ZWJmYXZpY29uaW1hZ2Vwcm92aWRl
cl9wLmggXAogICAgIFVJUHJvY2Vzcy9BdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZVByb3h5LmggXAogICAgIFVJUHJvY2Vzcy9BdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdGlv
bkRlY2lzaW9uTGlzdGVuZXIuaCBcCiAgICAgVUlQcm9jZXNzL0F1dGhlbnRpY2F0aW9uL1dlYkNy
ZWRlbnRpYWwuaCBcCkBAIC0zMTgsNiArMzE5LDcgQEAgSEVBREVSUyArPSBcCiAgICAgVUlQcm9j
ZXNzL3F0L1F0V2ViRXJyb3IuaCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0RG93bmxvYWRNYW5hZ2Vy
LmggXAogICAgIFVJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VQcm94eS5oIFwKKyAgICBVSVByb2Nlc3Mv
cXQvUXRXZWJJY29uRGF0YWJhc2UuaCBcCiAgICAgVUlQcm9jZXNzL3F0L3F3a2hpc3RvcnkuaCBc
CiAgICAgVUlQcm9jZXNzL3F0L3F3a2hpc3RvcnlfcC5oIFwKICAgICBVSVByb2Nlc3MvcXQvUXRT
R1VwZGF0ZVF1ZXVlLmggXApAQCAtNTQ4LDYgKzU1MCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFVJ
UHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAgXAogICAgIFVJUHJvY2Vzcy9BUEkvcXQv
cXdlYnByZWZlcmVuY2VzLmNwcCBcCiAgICAgVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3
cHJpdmF0ZWV4dGVuc2lvbi5jcHAgXAorICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXdlYmZhdmljb25p
bWFnZXByb3ZpZGVyX3AuY3BwIFwKICAgICBVSVByb2Nlc3MvQXV0aGVudGljYXRpb24vQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2VQcm94eS5jcHAgXAogICAgIFVJUHJvY2Vzcy9BdXRoZW50aWNhdGlv
bi9BdXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXIuY3BwIFwKICAgICBVSVByb2Nlc3MvQXV0
aGVudGljYXRpb24vV2ViQ3JlZGVudGlhbC5jcHAgXApAQCAtNjIyLDYgKzYyNSw3IEBAIFNPVVJD
RVMgKz0gXAogICAgIFVJUHJvY2Vzcy9xdC9RdFdlYkVycm9yLmNwcCBcCiAgICAgVUlQcm9jZXNz
L3F0L1F0RG93bmxvYWRNYW5hZ2VyLmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVBy
b3h5LmNwcCBcCisgICAgVUlQcm9jZXNzL3F0L1F0V2ViSWNvbkRhdGFiYXNlLmNwcCBcCiAgICAg
VUlQcm9jZXNzL3F0L3F3a2hpc3RvcnkuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvUXRTR1VwZGF0
ZVF1ZXVlLmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0U0dUaWxlTm9kZS5jcHAgXApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9XS1ZpZXcuaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvV0tWaWV3LmgKaW5kZXggOGMwMTEyMC4uNDliNmNmMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9XS1ZpZXcuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L1dLVmlldy5oCkBAIC0yMyw2ICsyMyw3
IEBACiAjaW5jbHVkZSA8V2ViS2l0Mi9xcXVpY2t3ZWJwYWdlLmg+CiAjaW5jbHVkZSA8V2ViS2l0
Mi9xcXVpY2t3ZWJ2aWV3Lmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9xd2ViZG93bmxvYWRpdGVtLmg+
CisjaW5jbHVkZSA8V2ViS2l0Mi9xd2ViZmF2aWNvbmltYWdlcHJvdmlkZXJfcC5oPgogI2luY2x1
ZGUgPFdlYktpdDIvcXdlYnByZWZlcmVuY2VzLmg+CiAKICNlbmRpZiAvKiBXS1ZpZXdfaCAqLwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAK
aW5kZXggNmQwYTZjNi4uZGQzMTIzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAi
cXF1aWNrd2Vidmlldy5oIgogCiAjaW5jbHVkZSAiUXRWaWV3SW50ZXJmYWNlLmgiCisjaW5jbHVk
ZSAiUXRXZWJJY29uRGF0YWJhc2UuaCIKICNpbmNsdWRlICJRdFdlYlBhZ2VQcm94eS5oIgogI2lu
Y2x1ZGUgIlV0aWxzUXQuaCIKICNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKQEAgLTM1Myw2ICsz
NTQsMTEgQEAgdm9pZCBRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6c2V0UGFnZVByb3h5KFF0V2ViUGFn
ZVByb3h5KiBwYWdlUHJveHkpCiAgICAgUV9RKFFRdWlja1dlYlZpZXcpOwogICAgIHRoaXMtPnBh
Z2VQcm94eS5yZXNldChwYWdlUHJveHkpOwogICAgIFFPYmplY3Q6OmNvbm5lY3QocGFnZVByb3h5
LCBTSUdOQUwocmVjZWl2ZWRNZXNzYWdlRnJvbU5hdmlnYXRvclF0T2JqZWN0KFFWYXJpYW50TWFw
KSksIHEsIFNJR05BTChtZXNzYWdlUmVjZWl2ZWQoUVZhcmlhbnRNYXApKSk7CisgICAgUU9iamVj
dDo6Y29ubmVjdChwYWdlUHJveHksIFNJR05BTChkaWRDaGFuZ2VGYXZJY29uU291cmNlKFFVcmwp
KSwgcSwgU0lHTkFMKGZhdkljb25Tb3VyY2VDaGFuZ2VkKFFVcmwpKSk7CisKKyAgICBRdFdlYklj
b25EYXRhYmFzZSogaWNvbkRhdGFiYXNlID0gUXRXZWJJY29uRGF0YWJhc2U6Omluc3RhbmNlKCk7
CisgICAgUU9iamVjdDo6Y29ubmVjdChxLCBTSUdOQUwodXJsQ2hhbmdlZChRVXJsKSksIGljb25E
YXRhYmFzZSwgU0xPVChyZXF1ZXN0SWNvbklkRm9yUGFnZVVSTChRVXJsKSkpOworICAgIFFPYmpl
Y3Q6OmNvbm5lY3QoaWNvbkRhdGFiYXNlLCBTSUdOQUwoaWNvbklkUmVhZHlGb3JQYWdlVVJMKGlu
dCwgUVVybCkpLCBwYWdlUHJveHksIFNMT1QoZGlkUmVjZWl2ZUljb25JZEZvclBhZ2VVUkwoaW50
LCBRVXJsKSkpOwogfQogCiBRUXVpY2tXZWJWaWV3OjpRUXVpY2tXZWJWaWV3KFFRdWlja0l0ZW0q
IHBhcmVudCkKQEAgLTQyMCw2ICs0MjYsMTIgQEAgdm9pZCBRUXVpY2tXZWJWaWV3OjpyZWxvYWQo
KQogICAgIGQtPnBhZ2VQcm94eS0+cmVsb2FkKCk7CiB9CiAKK1FVcmwgUVF1aWNrV2ViVmlldzo6
ZmF2SWNvblNvdXJjZSgpIGNvbnN0Cit7CisgICAgUV9EKGNvbnN0IFFRdWlja1dlYlZpZXcpOwor
ICAgIHJldHVybiBkLT5wYWdlUHJveHktPmZhdkljb25Tb3VyY2UoKTsKK30KKwogUVVybCBRUXVp
Y2tXZWJWaWV3Ojp1cmwoKSBjb25zdAogewogICAgIFFfRChjb25zdCBRUXVpY2tXZWJWaWV3KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmll
dy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmgKaW5k
ZXggZjhiYTgxNy4uOTUyNmM4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9xdC9xcXVpY2t3ZWJ2aWV3LmgKQEAgLTU1LDYgKzU1LDcgQEAgY2xhc3MgUVdFQktJVF9FWFBP
UlQgUVF1aWNrV2ViVmlldyA6IHB1YmxpYyBRUXVpY2tJdGVtIHsKICAgICBRX1BST1BFUlRZKGJv
b2wgY2FuR29Gb3J3YXJkIFJFQUQgY2FuR29Gb3J3YXJkIE5PVElGWSBuYXZpZ2F0aW9uU3RhdGVD
aGFuZ2VkIEZJTkFMKQogICAgIFFfUFJPUEVSVFkoYm9vbCBjYW5TdG9wIFJFQUQgY2FuU3RvcCBO
T1RJRlkgbmF2aWdhdGlvblN0YXRlQ2hhbmdlZCBGSU5BTCkKICAgICBRX1BST1BFUlRZKGJvb2wg
Y2FuUmVsb2FkIFJFQUQgY2FuUmVsb2FkIE5PVElGWSBuYXZpZ2F0aW9uU3RhdGVDaGFuZ2VkIEZJ
TkFMKQorICAgIFFfUFJPUEVSVFkoUVVybCBmYXZJY29uU291cmNlIFJFQUQgZmF2SWNvblNvdXJj
ZSBOT1RJRlkgZmF2SWNvblNvdXJjZUNoYW5nZWQpCiAgICAgUV9QUk9QRVJUWShRV2ViUHJlZmVy
ZW5jZXMqIHByZWZlcmVuY2VzIFJFQUQgcHJlZmVyZW5jZXMgQ09OU1RBTlQgRklOQUwpCiAgICAg
UV9QUk9QRVJUWShRUXVpY2tXZWJQYWdlKiBwYWdlIFJFQUQgcGFnZSBDT05TVEFOVCBGSU5BTCkK
ICAgICBRX0VOVU1TKE5hdmlnYXRpb25Qb2xpY3kpCkBAIC03OCw2ICs3OSw3IEBAIHB1YmxpYzoK
ICAgICBRVXJsIHVybCgpIGNvbnN0OwogICAgIFFTdHJpbmcgdGl0bGUoKSBjb25zdDsKICAgICBp
bnQgbG9hZFByb2dyZXNzKCkgY29uc3Q7CisgICAgUVVybCBmYXZJY29uU291cmNlKCkgY29uc3Q7
CiAKICAgICBib29sIGNhbkdvQmFjaygpIGNvbnN0OwogICAgIGJvb2wgY2FuR29Gb3J3YXJkKCkg
Y29uc3Q7CkBAIC0xMDksNiArMTExLDcgQEAgUV9TSUdOQUxTOgogICAgIHZvaWQgbGlua0hvdmVy
ZWQoY29uc3QgUVVybCYgdXJsLCBjb25zdCBRU3RyaW5nJiB0aXRsZSk7CiAgICAgdm9pZCB2aWV3
TW9kZUNoYW5nZWQoKTsKICAgICB2b2lkIG5hdmlnYXRpb25TdGF0ZUNoYW5nZWQoKTsKKyAgICB2
b2lkIGZhdkljb25Tb3VyY2VDaGFuZ2VkKGNvbnN0IFFVcmwmIHVybCk7CiAKIHByb3RlY3RlZDoK
ICAgICB2aXJ0dWFsIHZvaWQgZ2VvbWV0cnlDaGFuZ2VkKGNvbnN0IFFSZWN0RiYsIGNvbnN0IFFS
ZWN0RiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2Vi
ZmF2aWNvbmltYWdlcHJvdmlkZXJfcC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3F3ZWJmYXZpY29uaW1hZ2Vwcm92aWRlcl9wLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5mOWFmNWY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9xdC9xd2ViZmF2aWNvbmltYWdlcHJvdmlkZXJfcC5jcHAKQEAgLTAsMCAr
MSw1MCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAg
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgInF3ZWJmYXZpY29uaW1hZ2Vwcm92aWRlcl9wLmgiCisKKyNpbmNsdWRlICJRdFdlYkljb25E
YXRhYmFzZS5oIgorI2luY2x1ZGUgPFF0R3VpL1FDb2xvcj4KKworUVdlYkZhdkljb25JbWFnZVBy
b3ZpZGVyOjpRV2ViRmF2SWNvbkltYWdlUHJvdmlkZXIoKQorICAgIDogUURlY2xhcmF0aXZlSW1h
Z2VQcm92aWRlcihRRGVjbGFyYXRpdmVJbWFnZVByb3ZpZGVyOjpQaXhtYXApCisgICAgLCBtX2Rl
ZmF1bHRGYXZJY29uKDEsIDEpCit7CisgICAgbV9kZWZhdWx0RmF2SWNvbi5maWxsKFFDb2xvcigw
LCAwLCAwLCAwKSk7Cit9CisKK1FXZWJGYXZJY29uSW1hZ2VQcm92aWRlcjo6flFXZWJGYXZJY29u
SW1hZ2VQcm92aWRlcigpCit7CisKK30KKworUVBpeG1hcCBRV2ViRmF2SWNvbkltYWdlUHJvdmlk
ZXI6OnJlcXVlc3RQaXhtYXAoY29uc3QgUVN0cmluZyYgaWQsIFFTaXplKiBzaXplLCBjb25zdCBR
U2l6ZSYpCit7CisgICAgUVBpeG1hcCBpY29uOworICAgIFF0V2ViSWNvbkRhdGFiYXNlKiBpY29u
RGF0YWJhc2UgPSBRdFdlYkljb25EYXRhYmFzZTo6aW5zdGFuY2UoKTsKKworICAgIGlmICgoaWNv
biA9IGljb25EYXRhYmFzZS0+aWNvbkltYWdlRm9ySWNvbklkKGlkLnRvSW50KCkpKS5pc051bGwo
KSkKKyAgICAgICAgaWNvbiA9IG1fZGVmYXVsdEZhdkljb247CisKKyAgICBpZiAoc2l6ZSkKKyAg
ICAgICAgKnNpemUgPSBpY29uLnNpemUoKTsKKworICAgIHJldHVybiBpY29uOworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2ViZmF2aWNvbmltYWdlcHJv
dmlkZXJfcC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2ViZmF2aWNvbmlt
YWdlcHJvdmlkZXJfcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNjBj
OGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3
ZWJmYXZpY29uaW1hZ2Vwcm92aWRlcl9wLmgKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAgICBDb3B5
cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorKi8KKworI2lmbmRlZiBxd2ViZmF2aWNvbmltYWdlcHJvdmlkZXJfcF9oCisjZGVmaW5lIHF3
ZWJmYXZpY29uaW1hZ2Vwcm92aWRlcl9wX2gKKworI2luY2x1ZGUgInF3ZWJraXRnbG9iYWwuaCIK
KyNpbmNsdWRlIDxRdERlY2xhcmF0aXZlL1FEZWNsYXJhdGl2ZUltYWdlUHJvdmlkZXI+CisjaW5j
bHVkZSA8UXRHdWkvUVBpeG1hcD4KKworY2xhc3MgUVdFQktJVF9FWFBPUlQgUVdlYkZhdkljb25J
bWFnZVByb3ZpZGVyIDogcHVibGljIFFEZWNsYXJhdGl2ZUltYWdlUHJvdmlkZXIgeworcHVibGlj
OgorICAgIFFXZWJGYXZJY29uSW1hZ2VQcm92aWRlcigpOworICAgIH5RV2ViRmF2SWNvbkltYWdl
UHJvdmlkZXIoKTsKKyAgICBRUGl4bWFwIHJlcXVlc3RQaXhtYXAoY29uc3QgUVN0cmluZyYgaWQs
IFFTaXplKiBzaXplLCBjb25zdCBRU2l6ZSYgcmVxdWVzdGVkU2l6ZSk7CisKK3ByaXZhdGU6Cisg
ICAgUVBpeG1hcCBtX2RlZmF1bHRGYXZJY29uOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYkNvbnRleHQuaAppbmRleCAxNTRkNDk5Li5kNTM0NTRmZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5oCkBAIC0xNjksNiArMTY5LDggQEAgcHVibGljOgogICAg
IHZvaWQgc2V0SWNvbkRhdGFiYXNlUGF0aChjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHNldExv
Y2FsU3RvcmFnZURpcmVjdG9yeShjb25zdCBTdHJpbmcmIGRpcikgeyBtX292ZXJyaWRlTG9jYWxT
dG9yYWdlRGlyZWN0b3J5ID0gZGlyOyB9CiAKKyAgICBTdHJpbmcgaWNvbkRhdGFiYXNlUGF0aCgp
IGNvbnN0OworCiAgICAgU3RyaW5nIG92ZXJyaWRlV2ViSW5zcGVjdG9yQmFzZURpcmVjdG9yeSgp
IGNvbnN0IHsgcmV0dXJuIG1fb3ZlcnJpZGVXZWJJbnNwZWN0b3JCYXNlRGlyZWN0b3J5OyB9CiAg
ICAgdm9pZCBzZXRPdmVycmlkZVdlYkluc3BlY3RvckJhc2VEaXJlY3RvcnkoY29uc3QgU3RyaW5n
JiBwYXRoKSB7IG1fb3ZlcnJpZGVXZWJJbnNwZWN0b3JCYXNlRGlyZWN0b3J5ID0gcGF0aDsgfQog
CkBAIC0yMzIsNyArMjM0LDYgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgZGF0YWJhc2VEaXJlY3Rv
cnkoKSBjb25zdDsKICAgICBTdHJpbmcgcGxhdGZvcm1EZWZhdWx0RGF0YWJhc2VEaXJlY3Rvcnko
KSBjb25zdDsKIAotICAgIFN0cmluZyBpY29uRGF0YWJhc2VQYXRoKCkgY29uc3Q7CiAgICAgU3Ry
aW5nIHBsYXRmb3JtRGVmYXVsdEljb25EYXRhYmFzZVBhdGgoKSBjb25zdDsKIAogICAgIFN0cmlu
ZyBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9xdC9DbGllbnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9xdC9DbGllbnRJbXBsLmNwcAppbmRleCA4MDJlZGU2Li4xYmUwNzhhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvQ2xpZW50SW1wbC5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL3F0L0NsaWVudEltcGwuY3BwCkBAIC0yMSwxMiArMjEsMTMgQEAKICNp
bmNsdWRlICJDbGllbnRJbXBsLmgiCiAKICNpbmNsdWRlICJRdFdlYkVycm9yLmgiCi0jaW5jbHVk
ZSAiV2ViRnJhbWVQcm94eS5oIgogI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgogI2luY2x1ZGUgIldL
U3RyaW5nUXQuaCIKICNpbmNsdWRlICJXS1VSTFF0LmgiCisjaW5jbHVkZSAiV2ViRnJhbWVQcm94
eS5oIgogI2luY2x1ZGUgPFF0UG9saWN5SW50ZXJmYWNlLmg+CiAjaW5jbHVkZSA8UXRWaWV3SW50
ZXJmYWNlLmg+CisjaW5jbHVkZSA8UXRXZWJJY29uRGF0YWJhc2UuaD4KICNpbmNsdWRlIDxRdFdl
YlBhZ2VQcm94eS5oPgogI2luY2x1ZGUgPFdLQXJyYXkuaD4KICNpbmNsdWRlIDxXS0ZyYW1lLmg+
CkBAIC02MCw2ICs2MSwxMiBAQCBzdGF0aWMgaW5saW5lIFF0UG9saWN5SW50ZXJmYWNlKiB0b1F0
UG9saWN5SW50ZXJmYWNlKGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8UXRQb2xpY3lJbnRlcmZhY2UqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJ
bmZvKSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgUXRXZWJJY29uRGF0YWJhc2UqIHRvUXRXZWJJY29u
RGF0YWJhc2UoY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBBU1NFUlQoY2xpZW50SW5m
byk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UXRXZWJJY29uRGF0YWJhc2UqPihjb25z
dF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSk7Cit9CisKIHN0YXRpYyB2b2lkIGRpc3BhdGNoTG9h
ZFN1Y2NlZWRlZChXS0ZyYW1lUmVmIGZyYW1lLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewog
ICAgIGlmICghV0tGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkKQEAgLTE2Myw2ICsxNzAsMTcgQEAg
c3RhdGljIGJvb2wgcXRfd2tfcnVuSmF2YVNjcmlwdENvbmZpcm0oV0tQYWdlUmVmLCBXS1N0cmlu
Z1JlZiBtZXNzYWdlLCBXS0ZyYW1lUmUKICAgICByZXR1cm4gdG9RdFZpZXdJbnRlcmZhY2UoY2xp
ZW50SW5mbyktPnJ1bkphdmFTY3JpcHRDb25maXJtKHFNZXNzYWdlKTsKIH0KIAorc3RhdGljIHZv
aWQgcXRfd2tfaWNvbkRhdGFiYXNlRGlkQ2hhbmdlSWNvbkZvclBhZ2VVUkwoV0tJY29uRGF0YWJh
c2VSZWYgaWNvbkRhdGFiYXNlLCBXS1VSTFJlZiBwYWdlVVJMLCBjb25zdCB2b2lkKiBjbGllbnRJ
bmZvKQoreworICAgIFFVcmwgcVVybCA9IFdLVVJMQ29weVFVcmwocGFnZVVSTCk7CisgICAgdG9R
dFdlYkljb25EYXRhYmFzZShjbGllbnRJbmZvKS0+cmVxdWVzdEljb25JZEZvclBhZ2VVUkwocVVy
bCk7Cit9CisKK3N0YXRpYyB2b2lkIHF0X3drX2ljb25EYXRhYmFzZURpZFJlbW92ZUFsbEljb25z
KFdLSWNvbkRhdGFiYXNlUmVmIGljb25EYXRhYmFzZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykK
K3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRoZSBjYWxsYmFjayBmb3IgdGhpcyBldmVudC4K
K30KKwogc3RhdGljIGlubGluZSBXS1N0cmluZ1JlZiBjcmVhdGVOdWxsV0tTdHJpbmcoKQogewog
ICAgIFJlZlB0cjxXZWJTdHJpbmc+IHdlYlN0cmluZyA9IFdlYlN0cmluZzo6Y3JlYXRlTnVsbCgp
OwpAQCAtMzUzLDMgKzM3MSwxNCBAQCB2b2lkIHNldHVwQ29udGV4dEluamVjdGVkQnVuZGxlQ2xp
ZW50KFdLQ29udGV4dFJlZiBjb250ZXh0KQogICAgIGluamVjdGVkQnVuZGxlQ2xpZW50LmRpZFJl
Y2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlID0gcXRfd2tfZGlkUmVjZWl2ZU1lc3NhZ2VG
cm9tSW5qZWN0ZWRCdW5kbGU7CiAgICAgV0tDb250ZXh0U2V0SW5qZWN0ZWRCdW5kbGVDbGllbnQo
Y29udGV4dCwgJmluamVjdGVkQnVuZGxlQ2xpZW50KTsKIH0KKwordm9pZCBzZXR1cEljb25EYXRh
YmFzZUNsaWVudChRdFdlYkljb25EYXRhYmFzZSogcXRXZWJJY29uRGF0YWJhc2UsIFdlYkljb25E
YXRhYmFzZSogd2ViSWNvbkRhdGFiYXNlKQoreworICAgIFdLSWNvbkRhdGFiYXNlQ2xpZW50IGlj
b25EYXRhYmFzZUNsaWVudDsKKyAgICBtZW1zZXQoJmljb25EYXRhYmFzZUNsaWVudCwgMCwgc2l6
ZW9mKFdLSWNvbkRhdGFiYXNlQ2xpZW50KSk7CisgICAgaWNvbkRhdGFiYXNlQ2xpZW50LnZlcnNp
b24gPSBrV0tJY29uRGF0YWJhc2VDbGllbnRDdXJyZW50VmVyc2lvbjsKKyAgICBpY29uRGF0YWJh
c2VDbGllbnQuY2xpZW50SW5mbyA9IHF0V2ViSWNvbkRhdGFiYXNlOworICAgIGljb25EYXRhYmFz
ZUNsaWVudC5kaWRDaGFuZ2VJY29uRm9yUGFnZVVSTCA9IHF0X3drX2ljb25EYXRhYmFzZURpZENo
YW5nZUljb25Gb3JQYWdlVVJMOworICAgIGljb25EYXRhYmFzZUNsaWVudC5kaWRSZW1vdmVBbGxJ
Y29ucyA9IHF0X3drX2ljb25EYXRhYmFzZURpZFJlbW92ZUFsbEljb25zOworICAgIFdLSWNvbkRh
dGFiYXNlU2V0SWNvbkRhdGFiYXNlQ2xpZW50KHRvQVBJKHdlYkljb25EYXRhYmFzZSksICZpY29u
RGF0YWJhc2VDbGllbnQpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3F0L0NsaWVudEltcGwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9DbGllbnRJbXBs
LmgKaW5kZXggNGVmODk3NS4uNmNmYTJmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3F0L0NsaWVudEltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQv
Q2xpZW50SW1wbC5oCkBAIC0yMywxNiArMjMsMTggQEAKICNpbmNsdWRlIDxXZWJLaXQyL1dLQ29u
dGV4dC5oPgogCiBjbGFzcyBRdFdlYlBhZ2VQcm94eTsKK2NsYXNzIFF0V2ViSWNvbkRhdGFiYXNl
OwogbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBRdFBvbGljeUludGVyZmFjZTsKIGNsYXNzIFdl
YlBhZ2VQcm94eTsKK2NsYXNzIFdlYkljb25EYXRhYmFzZTsKIH0KIAogdm9pZCBzZXR1cFBhZ2VM
b2FkZXJDbGllbnQoUXRXZWJQYWdlUHJveHkqLCBXZWJLaXQ6OldlYlBhZ2VQcm94eSopOwogdm9p
ZCBzZXR1cFBhZ2VVaUNsaWVudChRdFdlYlBhZ2VQcm94eSosIFdlYktpdDo6V2ViUGFnZVByb3h5
Kik7CiB2b2lkIHNldHVwUGFnZVBvbGljeUNsaWVudChXZWJLaXQ6OlF0UG9saWN5SW50ZXJmYWNl
KiwgV2ViS2l0OjpXZWJQYWdlUHJveHkqKTsKK3ZvaWQgc2V0dXBJY29uRGF0YWJhc2VDbGllbnQo
UXRXZWJJY29uRGF0YWJhc2UqLCBXZWJLaXQ6OldlYkljb25EYXRhYmFzZSopOwogCiB2b2lkIHNl
dHVwQ29udGV4dEluamVjdGVkQnVuZGxlQ2xpZW50KFdLQ29udGV4dFJlZik7CiAKICNlbmRpZiAv
KiBDbGllbnRJbXBsX2ggKi8KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3F0L1F0V2ViSWNvbkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9R
dFdlYkljb25EYXRhYmFzZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ZWRiOWM4OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9R
dFdlYkljb25EYXRhYmFzZS5jcHAKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgICAgQ29weXJpZ2h0
IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJRdFdlYkljb25EYXRhYmFzZS5oIgor
CisjaW5jbHVkZSAiQ2xpZW50SW1wbC5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAi
S1VSTC5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkNvbnRleHQu
aCIKKyNpbmNsdWRlICJXZWJJY29uRGF0YWJhc2UuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CisKK1F0V2ViSWNvbkRhdGFiYXNlKiBRdFdlYkljb25EYXRhYmFzZTo6bV9pbnN0YW5j
ZSA9IDA7CisKK3ZvaWQgUXRXZWJJY29uRGF0YWJhc2U6OmluaXQoV2ViQ29udGV4dCogY29udGV4
dCkKK3sKKyAgICBpZiAoIW1faW5zdGFuY2UpCisgICAgICAgIG1faW5zdGFuY2UgPSBuZXcgUXRX
ZWJJY29uRGF0YWJhc2UoY29udGV4dCk7Cit9CisKK1F0V2ViSWNvbkRhdGFiYXNlOjpRdFdlYklj
b25EYXRhYmFzZShXZWJDb250ZXh0KiBjb250ZXh0KQorICAgIDogbV9sYXN0SWNvbklkKDApCit7
CisgICAgLy8gRklYTUU6IHRoaXMgc2V0dGVyIGRvZXNuJ3Qgb25seSBzZXQgdGhlIGljb24gZGF0
YWJhc2UgcGF0aCwgYnV0IGl0IGFsc28KKyAgICAvLyB0cmlnZ2VyIHRoZSBzdGFydHVwIG9mIFdl
YkNvbnRleHQncyBXZWJJY29uRGF0YWJhc2UuIFRoZSBnZXR0ZXIgd2lsbCByZXR1cm4KKyAgICAv
LyB0aGUgZGVmYXVsdCBwbGF0Zm9ybSBwYXRoIGFuZCB3aWxsIHN0YXJ0IFdlYkljb25EYXRhYmFz
ZSB3aXRoIGl0LgorICAgIGNvbnRleHQtPnNldEljb25EYXRhYmFzZVBhdGgoY29udGV4dC0+aWNv
bkRhdGFiYXNlUGF0aCgpKTsKKyAgICBtX2ljb25EYXRhYmFzZSA9IGNvbnRleHQtPmljb25EYXRh
YmFzZSgpOworICAgIHNldHVwSWNvbkRhdGFiYXNlQ2xpZW50KHRoaXMsIG1faWNvbkRhdGFiYXNl
KTsKK30KKworUXRXZWJJY29uRGF0YWJhc2U6On5RdFdlYkljb25EYXRhYmFzZSgpCit7Cit9CisK
K1FQaXhtYXAgUXRXZWJJY29uRGF0YWJhc2U6Omljb25JbWFnZUZvclBhZ2VVUkwoY29uc3QgUVVy
bCYgcGFnZVVSTCkKK3sKKyAgICBTdHJpbmcgdXJsID0gV2ViQ29yZTo6S1VSTChwYWdlVVJMKS5z
dHJpbmcoKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2U+IGltYWdlID0gbV9pY29uRGF0YWJh
c2UtPmltYWdlRm9yUGFnZVVSTCh1cmwpOworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVy
biBRUGl4bWFwKCk7CisKKyAgICBRUGl4bWFwKiBuYXRpdmVJbWFnZSA9IGltYWdlLT5uYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIGlmICghbmF0aXZlSW1hZ2UpCisgICAgICAgIHJl
dHVybiBRUGl4bWFwKCk7CisKKyAgICByZXR1cm4gbmF0aXZlSW1hZ2UtPmNvcHkoKTsKK30KKwor
dm9pZCBRdFdlYkljb25EYXRhYmFzZTo6cmVxdWVzdEljb25JZEZvclBhZ2VVUkwoY29uc3QgUVVy
bCYgdXJsKQoreworCisgICAgUVBpeG1hcCBpY29uID0gaWNvbkltYWdlRm9yUGFnZVVSTCh1cmwp
OworICAgIGlmIChpY29uLmlzTnVsbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgaWNv
bklkID0gZ2V0TmV4dEF2YWlsYWJsZUljb25JZCgpOworICAgIG1fcGl4bWFwRm9ySWNvbklkW2lj
b25JZF0gPSBpY29uOworICAgIGVtaXQgaWNvbklkUmVhZHlGb3JQYWdlVVJMKGljb25JZCwgdXJs
KTsKK30KKworUVBpeG1hcCBRdFdlYkljb25EYXRhYmFzZTo6aWNvbkltYWdlRm9ySWNvbklkKGlu
dCBpZCkgY29uc3QKK3sKKyAgICBRTWFwPGludCwgUVBpeG1hcD46OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9waXhtYXBGb3JJY29uSWQuZmluZChpZCk7CisgICAgaWYgKGl0ID09IG1fcGl4bWFwRm9y
SWNvbklkLmNvbnN0RW5kKCkpCisgICAgICAgIHJldHVybiBRUGl4bWFwKCk7CisKKyAgICByZXR1
cm4gaXQudmFsdWUoKTsKK30KKwordm9pZCBRdFdlYkljb25EYXRhYmFzZTo6cmV0YWluSWNvbklk
KGludCBpZCkKK3sKKyAgICBRTWFwPGludCwgaW50Pjo6aXRlcmF0b3IgaXQgPSBtX3JldGFpbkNv
dW50Rm9ySWNvbklkLmZpbmQoaWQpOworICAgIGlmIChpdCAhPSBtX3JldGFpbkNvdW50Rm9ySWNv
bklkLmVuZCgpKSB7CisgICAgICAgIGl0LnZhbHVlKCkrKzsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBtX3JldGFpbkNvdW50Rm9ySWNvbklkW2lkXSA9IDE7Cit9CisKK3ZvaWQgUXRXZWJJ
Y29uRGF0YWJhc2U6OnJlbGVhc2VJY29uSWQoaW50IGlkKQoreworICAgIFFNYXA8aW50LCBpbnQ+
OjppdGVyYXRvciBpdCA9IG1fcmV0YWluQ291bnRGb3JJY29uSWQuZmluZChpZCk7CisgICAgaWYg
KGl0ID09IG1fcmV0YWluQ291bnRGb3JJY29uSWQuZW5kKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChpdC52YWx1ZSgpID09IDEpIHsKKyAgICAgICAgbV9yZXRhaW5Db3VudEZvckljb25J
ZC5yZW1vdmUoaWQpOworICAgICAgICBtX3BpeG1hcEZvckljb25JZC5yZW1vdmUoaWQpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaXQudmFsdWUoKS0tOworfQorCitpbnQgUXRXZWJJ
Y29uRGF0YWJhc2U6OmdldE5leHRBdmFpbGFibGVJY29uSWQoKQoreworICAgIC8vIEZJWE1FOiBS
ZXVzZSBpZHMgdG8gYXZvaWQgb3ZlcmZsb3cuCisgICAgcmV0dXJuICsrbV9sYXN0SWNvbklkOwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViSWNvbkRhdGFi
YXNlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJJY29uRGF0YWJhc2UuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjhmZDgwCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViSWNvbkRhdGFiYXNlLmgKQEAg
LTAsMCArMSw2OCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
ICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAg
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAg
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworCisjaWZuZGVmIFF0V2ViSWNvbkRh
dGFiYXNlX2gKKyNkZWZpbmUgUXRXZWJJY29uRGF0YWJhc2VfaAorCisjaW5jbHVkZSAiV0tJY29u
RGF0YWJhc2UuaCIKKyNpbmNsdWRlICJxd2Via2l0Z2xvYmFsLmgiCisjaW5jbHVkZSA8UXRDb3Jl
L1FNYXA+CisjaW5jbHVkZSA8UXRDb3JlL1FPYmplY3Q+CisjaW5jbHVkZSA8UXRDb3JlL1FVcmw+
CisjaW5jbHVkZSA8UXRHdWkvUVBpeG1hcD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBX
ZWJDb250ZXh0OworY2xhc3MgV2ViSWNvbkRhdGFiYXNlOworfQorCit1c2luZyBuYW1lc3BhY2Ug
V2ViS2l0OworCitjbGFzcyBRdFdlYkljb25EYXRhYmFzZSA6IHB1YmxpYyBRT2JqZWN0IHsKKyAg
ICBRX09CSkVDVAorCitwdWJsaWM6CisgICAgc3RhdGljIFF0V2ViSWNvbkRhdGFiYXNlKiBpbnN0
YW5jZSgpIHsgcmV0dXJuIG1faW5zdGFuY2U7IH0KKyAgICBzdGF0aWMgdm9pZCBpbml0KFdlYkNv
bnRleHQqKTsKKyAgICB+UXRXZWJJY29uRGF0YWJhc2UoKTsKKworICAgIFFQaXhtYXAgaWNvbklt
YWdlRm9ySWNvbklkKGludCBpZCkgY29uc3Q7CisgICAgUVBpeG1hcCBpY29uSW1hZ2VGb3JQYWdl
VVJMKGNvbnN0IFFVcmwmKTsKKyAgICB2b2lkIHJldGFpbkljb25JZChpbnQgaWQpOworICAgIHZv
aWQgcmVsZWFzZUljb25JZChpbnQgaWQpOworCitwdWJsaWMgUV9TTE9UUzoKKyAgICB2b2lkIHJl
cXVlc3RJY29uSWRGb3JQYWdlVVJMKGNvbnN0IFFVcmwmKTsKKworcHVibGljOgorICAgIFFfU0lH
TkFMIHZvaWQgaWNvbklkUmVhZHlGb3JQYWdlVVJMKGludCwgY29uc3QgUVVybCYpOworCitwcml2
YXRlOgorICAgIGludCBnZXROZXh0QXZhaWxhYmxlSWNvbklkKCk7CisgICAgc3RhdGljIFF0V2Vi
SWNvbkRhdGFiYXNlKiBtX2luc3RhbmNlOworCisgICAgUXRXZWJJY29uRGF0YWJhc2UoV2ViQ29u
dGV4dCopOworICAgIFdlYkljb25EYXRhYmFzZSogbV9pY29uRGF0YWJhc2U7CisgICAgUU1hcDxp
bnQsIFFQaXhtYXA+IG1fcGl4bWFwRm9ySWNvbklkOworICAgIFFNYXA8aW50LCBpbnQ+IG1fcmV0
YWluQ291bnRGb3JJY29uSWQ7CisgICAgaW50IG1fbGFzdEljb25JZDsKK307CisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVByb3h5LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VQcm94eS5jcHAKaW5kZXgg
MzU2NGRkNi4uODY1OWQ1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0
L1F0V2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRX
ZWJQYWdlUHJveHkuY3BwCkBAIC0yMSwxNyArMjEsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIlF0V2ViUGFnZVByb3h5LmgiCiAKLSNpbmNsdWRlICJRdFdlYkVycm9yLmgiCi0j
aW5jbHVkZSAicXdlYmRvd25sb2FkaXRlbS5oIgotI2luY2x1ZGUgInF3ZWJkb3dubG9hZGl0ZW1f
cC5oIgotI2luY2x1ZGUgInF3ZWJwcmVmZXJlbmNlcy5oIgotI2luY2x1ZGUgInF3ZWJwcmVmZXJl
bmNlc19wLmgiCi0KICNpbmNsdWRlICJDbGllbnRJbXBsLmgiCiAjaW5jbHVkZSAiRG93bmxvYWRQ
cm94eS5oIgogI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlJbXBsLmgiCi0jaW5jbHVkZSAicXdr
aGlzdG9yeS5oIgotI2luY2x1ZGUgInF3a2hpc3RvcnlfcC5oIgogI2luY2x1ZGUgIkZpbmRJbmRp
Y2F0b3IuaCIKICNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCiAjaW5jbHVkZSAiTXV0YWJs
ZUFycmF5LmgiCkBAIC00MiwxNyArMzQsMjYgQEAKICNpbmNsdWRlICJRdFBvbGljeUludGVyZmFj
ZS5oIgogI2luY2x1ZGUgIlF0Vmlld0ludGVyZmFjZS5oIgogI2luY2x1ZGUgIlF0Vmlld3BvcnRJ
bnRlcmFjdGlvbkVuZ2luZS5oIgorI2luY2x1ZGUgIlF0V2ViRXJyb3IuaCIKKyNpbmNsdWRlICJR
dFdlYkljb25EYXRhYmFzZS5oIgogI2luY2x1ZGUgIlF0V2ViVW5kb0NvbW1hbmQuaCIKKyNpbmNs
dWRlICJXS0ljb25EYXRhYmFzZS5oIgorI2luY2x1ZGUgIldLU3RyaW5nUXQuaCIKKyNpbmNsdWRl
ICJXS1VSTFF0LmgiCiAjaW5jbHVkZSAiV2ViQmFja0ZvcndhcmRMaXN0LmgiCiAjaW5jbHVkZSAi
V2ViQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvbnRleHRNZW51UHJveHlRdC5oIgogI2luY2x1
ZGUgIldlYkVkaXRDb21tYW5kUHJveHkuaCIKICNpbmNsdWRlICJXZWJFdmVudEZhY3RvcnlRdC5o
IgogI2luY2x1ZGUgIldlYlBvcHVwTWVudVByb3h5UXQuaCIKLSNpbmNsdWRlICJXS1N0cmluZ1F0
LmgiCi0jaW5jbHVkZSAiV0tVUkxRdC5oIgotI2luY2x1ZGUgPFFHdWlBcHBsaWNhdGlvbj4KKyNp
bmNsdWRlICJxd2ViZG93bmxvYWRpdGVtLmgiCisjaW5jbHVkZSAicXdlYmRvd25sb2FkaXRlbV9w
LmgiCisjaW5jbHVkZSAicXdlYnByZWZlcmVuY2VzLmgiCisjaW5jbHVkZSAicXdlYnByZWZlcmVu
Y2VzX3AuaCIKKyNpbmNsdWRlICJxd2toaXN0b3J5LmgiCisjaW5jbHVkZSAicXdraGlzdG9yeV9w
LmgiCiAjaW5jbHVkZSA8UUdyYXBoaWNzU2NlbmVNb3VzZUV2ZW50PgorI2luY2x1ZGUgPFFHdWlB
cHBsaWNhdGlvbj4KICNpbmNsdWRlIDxRSlNFbmdpbmU+CiAjaW5jbHVkZSA8UU1pbWVEYXRhPgog
I2luY2x1ZGUgPFFTdHlsZUhpbnRzPgpAQCAtODIsNiArODMsNyBAQCBQYXNzUmVmUHRyPFdlYkNv
bnRleHQ+IFF0V2ViUGFnZVByb3h5OjpkZWZhdWx0V0tDb250ZXh0KCkKICAgICAgICAgc19kZWZh
dWx0Q29udGV4dCA9IFdlYkNvbnRleHQ6OmNyZWF0ZShTdHJpbmcoKSk7CiAgICAgICAgIHNldHVw
Q29udGV4dEluamVjdGVkQnVuZGxlQ2xpZW50KHRvQVBJKHNfZGVmYXVsdENvbnRleHQuZ2V0KCkp
KTsKICAgICAgICAgc19kb3dubG9hZE1hbmFnZXIgPSBRdERvd25sb2FkTWFuYWdlcjo6Y3JlYXRl
KHNfZGVmYXVsdENvbnRleHQuZ2V0KCkpOworICAgICAgICBRdFdlYkljb25EYXRhYmFzZTo6aW5p
dChzX2RlZmF1bHRDb250ZXh0LmdldCgpKTsKICAgICB9CiAgICAgcmV0dXJuIHNfZGVmYXVsdENv
bnRleHQ7CiB9CkBAIC0xNjgsNiArMTcwLDcgQEAgUXRXZWJQYWdlUHJveHk6On5RdFdlYlBhZ2VQ
cm94eSgpCiAgICAgICAgIGlmICghc19kZWZhdWx0UGFnZVByb3h5Q291bnQpIHsKICAgICAgICAg
ICAgIHNfZGVmYXVsdENvbnRleHQuY2xlYXIoKTsKICAgICAgICAgICAgIHNfZG93bmxvYWRNYW5h
Z2VyLmNsZWFyKCk7CisgICAgICAgICAgICBkZWxldGUgUXRXZWJJY29uRGF0YWJhc2U6Omluc3Rh
bmNlKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgZGVsZXRlIG1faGlzdG9yeTsKQEAgLTU0Myw3
ICs1NDYsNyBAQCB2b2lkIFF0V2ViUGFnZVByb3h5OjpmbGFzaEJhY2tpbmdTdG9yZVVwZGF0ZXMo
Y29uc3QgVmVjdG9yPEludFJlY3Q+JikKIAogV0tQYWdlUmVmIFF0V2ViUGFnZVByb3h5OjpwYWdl
UmVmKCkgY29uc3QKIHsKLSAgICByZXR1cm4gdG9BUEkobV93ZWJQYWdlUHJveHkuZ2V0KCkpOzsK
KyAgICByZXR1cm4gdG9BUEkobV93ZWJQYWdlUHJveHkuZ2V0KCkpOwogfQogCiB2b2lkIFF0V2Vi
UGFnZVByb3h5OjpkaWRGaW5kWm9vbWFibGVBcmVhKGNvbnN0IEludFBvaW50JiB0YXJnZXQsIGNv
bnN0IEludFJlY3QmIGFyZWEpCkBAIC05MTksNCArOTIyLDM4IEBAIHZvaWQgUXRXZWJQYWdlUHJv
eHk6OmZpbmRab29tYWJsZUFyZWFGb3JQb2ludChjb25zdCBRUG9pbnQmIHBvaW50KQogICAgIG1f
d2ViUGFnZVByb3h5LT5maW5kWm9vbWFibGVBcmVhRm9yUG9pbnQocG9pbnQpOwogfQogCit2b2lk
IFF0V2ViUGFnZVByb3h5OjpyZXF1ZXN0SWNvbklkRm9yUGFnZVVSTChjb25zdCBRVXJsJiBwYWdl
VVJMKQoreworICAgIFF0V2ViSWNvbkRhdGFiYXNlOjppbnN0YW5jZSgpLT5yZXF1ZXN0SWNvbklk
Rm9yUGFnZVVSTChwYWdlVVJMKTsKK30KKworUVVybCBRdFdlYlBhZ2VQcm94eTo6ZmF2SWNvblNv
dXJjZSgpIGNvbnN0Cit7CisgICAgc3RhdGljIFFTdHJpbmcgZmF2SWNvblNvdXJjZVRlbXBsYXRl
ID0gUUxhdGluMVN0cmluZygiaW1hZ2U6Ly9mYXZpY29uLyUxIik7CisgICAgcmV0dXJuIFFVcmwo
ZmF2SWNvblNvdXJjZVRlbXBsYXRlLmFyZyhtX2Zhdkljb25JZCkpOworfQorCit2b2lkIFF0V2Vi
UGFnZVByb3h5Ojp1cGRhdGVGYXZJY29uSWQoaW50IGlkKQoreworICAgIGlmIChtX2Zhdkljb25J
ZCA9PSBpZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgUXRXZWJJY29uRGF0YWJhc2UqIGljb25E
YXRhYmFzZSA9IFF0V2ViSWNvbkRhdGFiYXNlOjppbnN0YW5jZSgpOworICAgIGlmIChtX2Zhdklj
b25JZCkKKyAgICAgICAgaWNvbkRhdGFiYXNlLT5yZWxlYXNlSWNvbklkKG1fZmF2SWNvbklkKTsK
KyAgICBtX2Zhdkljb25JZCA9IGlkOworICAgIGlmIChtX2Zhdkljb25JZCkKKyAgICAgICBpY29u
RGF0YWJhc2UtPnJldGFpbkljb25JZChtX2Zhdkljb25JZCk7CisKKyAgICBlbWl0IGRpZENoYW5n
ZUZhdkljb25Tb3VyY2UoZmF2SWNvblNvdXJjZSgpKTsKK30KKwordm9pZCBRdFdlYlBhZ2VQcm94
eTo6ZGlkUmVjZWl2ZUljb25JZEZvclBhZ2VVUkwoaW50IGlkLCBjb25zdCBRVXJsJiBwYWdlVVJM
KQoreworICAgIGlmICh1cmwoKSAhPSBwYWdlVVJMKQorICAgICAgICByZXR1cm47CisKKyAgICB1
cGRhdGVGYXZJY29uSWQoaWQpOworfQorCiAjaW5jbHVkZSAibW9jX1F0V2ViUGFnZVByb3h5LmNw
cCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VQcm94
eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVByb3h5LmgKaW5kZXgg
NjZkYzQ3ZC4uMWU0NGIyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0
L1F0V2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2Vi
UGFnZVByb3h5LmgKQEAgLTM0LDEzICszNCwxMyBAQAogI2luY2x1ZGUgIlZpZXdwb3J0QXJndW1l
bnRzLmgiCiAjaW5jbHVkZSAiV2ViQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5o
IgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDxRQmFzaWNUaW1lcj4KICNpbmNs
dWRlIDxRR3JhcGhpY3NWaWV3PgogI2luY2x1ZGUgPFFLZXlFdmVudD4KLSNpbmNsdWRlIDxRVG91
Y2hFdmVudD4KICNpbmNsdWRlIDxRTWVudT4KICNpbmNsdWRlIDxRU2hhcmVkUG9pbnRlcj4KKyNp
bmNsdWRlIDxRVG91Y2hFdmVudD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIFFUX0JFR0lO
X05BTUVTUEFDRQogY2xhc3MgUVVuZG9TdGFjazsKQEAgLTUyLDcgKzUyLDcgQEAgY2xhc3MgUVdL
SGlzdG9yeTsKIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAotV2ViQ29yZTo6RHJhZ09wZXJh
dGlvbiBkcm9wQWN0aW9uVG9EcmFnT3BlcmF0aW9uKFF0OjpEcm9wQWN0aW9ucyBhY3Rpb25zKTsK
K1dlYkNvcmU6OkRyYWdPcGVyYXRpb24gZHJvcEFjdGlvblRvRHJhZ09wZXJhdGlvbihRdDo6RHJv
cEFjdGlvbnMpOwogCiAvLyBGSVhNRTogbmVlZHMgZm9jdXMgaW4vb3V0LCB3aW5kb3cgYWN0aXZh
dGlvbiwgc3VwcG9ydCB0aHJvdWdoIHZpZXdTdGF0ZURpZENoYW5nZSgpLgogY2xhc3MgUXRXZWJQ
YWdlUHJveHkgOiBwdWJsaWMgUU9iamVjdCwgV2ViS2l0OjpQYWdlQ2xpZW50IHsKQEAgLTEwNCw3
ICsxMDQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0RHJhZyhjb25zdCBXZWJD
b3JlOjpEcmFnRGF0YSYsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBkcmFnSW1hZ2UpOwog
ICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VWaWV3cG9ydFByb3BlcnRpZXMoY29uc3QgV2ViQ29y
ZTo6Vmlld3BvcnRBcmd1bWVudHMmKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29yKGNvbnN0
IFdlYkNvcmU6OkN1cnNvciYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJzb3JIaWRkZW5VbnRp
bE1vdXNlTW92ZXMoYm9vbCBoaWRkZW5VbnRpbE1vdXNlTW92ZXMpOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lk
IHRvb2xUaXBDaGFuZ2VkKGNvbnN0IFdURjo6U3RyaW5nJiwgY29uc3QgV1RGOjpTdHJpbmcmKTsK
ICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJFZGl0Q29tbWFuZChQYXNzUmVmUHRyPFdlYktpdDo6
V2ViRWRpdENvbW1hbmRQcm94eT4sIFdlYktpdDo6V2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKTsK
ICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBbGxFZGl0Q29tbWFuZHMoKTsKQEAgLTE2MCw4ICsxNjAs
OSBAQCBwdWJsaWM6CiAKICAgICBXS1BhZ2VSZWYgcGFnZVJlZigpIGNvbnN0OwogCi0gICAgdm9p
ZCBsb2FkKGNvbnN0IFFVcmwmIHVybCk7CisgICAgdm9pZCBsb2FkKGNvbnN0IFFVcmwmKTsKICAg
ICBRVXJsIHVybCgpIGNvbnN0OworICAgIFFVcmwgZmF2SWNvblNvdXJjZSgpIGNvbnN0OwogCiAg
ICAgdm9pZCBzZXREcmF3aW5nQXJlYVNpemUoY29uc3QgUVNpemUmKTsKIApAQCAtMTgxLDggKzE4
Miw4IEBAIHB1YmxpYzoKIAogICAgIHFyZWFsIHRleHRab29tRmFjdG9yKCkgY29uc3Q7CiAgICAg
cXJlYWwgcGFnZVpvb21GYWN0b3IoKSBjb25zdDsKLSAgICB2b2lkIHNldFRleHRab29tRmFjdG9y
KHFyZWFsIHpvb21GYWN0b3IpOwotICAgIHZvaWQgc2V0UGFnZVpvb21GYWN0b3IocXJlYWwgem9v
bUZhY3Rvcik7CisgICAgdm9pZCBzZXRUZXh0Wm9vbUZhY3RvcihxcmVhbCk7CisgICAgdm9pZCBz
ZXRQYWdlWm9vbUZhY3RvcihxcmVhbCk7CiAgICAgdm9pZCBzZXRQYWdlQW5kVGV4dFpvb21GYWN0
b3JzKHFyZWFsIHBhZ2Vab29tRmFjdG9yLCBxcmVhbCB0ZXh0Wm9vbUZhY3Rvcik7CiAKICAgICB2
b2lkIHNldFZpc2libGVDb250ZW50UmVjdEFuZFNjYWxlKGNvbnN0IFFSZWN0RiYsIGZsb2F0KTsK
QEAgLTE5OSwxNyArMjAwLDIxIEBAIHB1YmxpYzoKICAgICB2b2lkIGhhbmRsZVNpbmdsZVRhcEV2
ZW50KGNvbnN0IFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50Jik7CiAgICAgdm9pZCBoYW5kbGVEb3Vi
bGVUYXBFdmVudChjb25zdCBRVG91Y2hFdmVudDo6VG91Y2hQb2ludCYpOwogCisgICAgdm9pZCBy
ZXF1ZXN0SWNvbklkRm9yUGFnZVVSTChjb25zdCBRVXJsJik7CisKIHB1YmxpYyBRX1NMT1RTOgog
ICAgIHZvaWQgbmF2aWdhdGlvblN0YXRlQ2hhbmdlZCgpOwogICAgIHZvaWQgZGlkUmVjZWl2ZURv
d25sb2FkUmVzcG9uc2UoUVdlYkRvd25sb2FkSXRlbSopOworICAgIHZvaWQgZGlkUmVjZWl2ZUlj
b25JZEZvclBhZ2VVUkwoaW50LCBjb25zdCBRVXJsJik7CiAKIHB1YmxpYzoKICAgICBRX1NJR05B
TCB2b2lkIHpvb21hYmxlQXJlYUZvdW5kKGNvbnN0IFFSZWN0Jik7CiAgICAgUV9TSUdOQUwgdm9p
ZCB1cGRhdGVOYXZpZ2F0aW9uU3RhdGUoKTsKICAgICBRX1NJR05BTCB2b2lkIHJlY2VpdmVkTWVz
c2FnZUZyb21OYXZpZ2F0b3JRdE9iamVjdChjb25zdCBRVmFyaWFudE1hcCYpOworICAgIFFfU0lH
TkFMIHZvaWQgZGlkQ2hhbmdlRmF2SWNvblNvdXJjZShjb25zdCBRVXJsJik7CiAKIHByb3RlY3Rl
ZDoKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50KFFQYWludGVyKiBwYWludGVyLCBjb25z
dCBRUmVjdCYgYXJlYSk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudChRUGFpbnRlcios
IGNvbnN0IFFSZWN0JiBhcmVhKTsKICAgICBSZWZQdHI8V2ViS2l0OjpXZWJQYWdlUHJveHk+IG1f
d2ViUGFnZVByb3h5OwogICAgIFdlYktpdDo6UXRWaWV3SW50ZXJmYWNlKiBjb25zdCBtX3ZpZXdJ
bnRlcmZhY2U7CiAgICAgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKiBtX2ludGVyYWN0aW9u
RW5naW5lOwpAQCAtMjM1LDYgKzI0MCw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBoYW5kbGVEcmFn
TW92ZUV2ZW50KFFEcmFnTW92ZUV2ZW50Kik7CiAgICAgYm9vbCBoYW5kbGVEcm9wRXZlbnQoUURy
b3BFdmVudCopOwogCisgICAgdm9pZCB1cGRhdGVGYXZJY29uSWQoaW50KTsKKwogICAgIHZpcnR1
YWwgdm9pZCB0aW1lckV2ZW50KFFUaW1lckV2ZW50Kik7CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZF
TlRTKQpAQCAtMjU5LDYgKzI2Niw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX25hdmlnYXRvclF0
T2JqZWN0RW5hYmxlZDsKICAgICBRUG9pbnQgbV90cmlwbGVDbGljazsKICAgICBRQmFzaWNUaW1l
ciBtX3RyaXBsZUNsaWNrVGltZXI7CisgICAgaW50IG1fZmF2SWNvbklkOwogfTsKIAogI2VuZGlm
IC8qIFF0V2ViUGFnZVByb3h5X2ggKi8KZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rv
b2xzL0NoYW5nZUxvZwppbmRleCA1ZjUyMThiLi4wZTI5YjMxIDEwMDY0NAotLS0gYS9Ub29scy9D
aGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMTEt
MTQgIFJhZmFlbCBCcmFuZGFvICA8cmFmYWVsLmxvYm9Ab3BlbmJvc3NhLm9yZz4KKworICAgICAg
ICBbUXRdW1dLMl0gSW1wbGVtZW50IGZhdmljb24gc3VwcG9ydAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEwODIKKworICAgICAgICBBZGRlZCBhIEZh
dkljb24gdG8gTWluaUJyb3dzZXIgYXMgYW4gZXhhbXBsZSBvZiBpdHMgdXNlLgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTWluaUJyb3dzZXIvcXQv
cW1sL0Jyb3dzZXJXaW5kb3cucW1sOgorCiAyMDExLTExLTE0ICBBbmRyZXcgU2NoZXJrdXMgIDxz
Y2hlcmt1c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBTa2lwIG1lZGlhIGxh
eW91dCB0ZXN0cyBvbiBjaHJvbWl1bS1ncHUtY2ctbWFjLWxlb3BhcmQgcGxhdGZvcm0KZGlmZiAt
LWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L3FtbC9Ccm93c2VyV2luZG93LnFtbCBiL1Rvb2xz
L01pbmlCcm93c2VyL3F0L3FtbC9Ccm93c2VyV2luZG93LnFtbAppbmRleCA1Y2MxNTJhLi41ODcy
MWNkIDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvQnJvd3NlcldpbmRvdy5x
bWwKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvcW1sL0Jyb3dzZXJXaW5kb3cucW1sCkBAIC0x
NTcsNiArMTU3LDE4IEBAIFJlY3RhbmdsZSB7CiAgICAgICAgICAgICAgICAgdmlzaWJsZTogd2Vi
Vmlldy5sb2FkUHJvZ3Jlc3MgIT0gMTAwCiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIElt
YWdlIHsKKyAgICAgICAgICAgICAgICBpZDogZmF2aWNvbgorICAgICAgICAgICAgICAgIHNvdXJj
ZTogd2ViVmlldy5mYXZJY29uU291cmNlCisgICAgICAgICAgICAgICAgd2lkdGg6IDE2CisgICAg
ICAgICAgICAgICAgaGVpZ2h0OiAxNgorICAgICAgICAgICAgICAgIGFuY2hvcnMgeworICAgICAg
ICAgICAgICAgICAgICBsZWZ0OiBwYXJlbnQubGVmdAorICAgICAgICAgICAgICAgICAgICBsZWZ0
TWFyZ2luOiAyCisgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsQ2VudGVyOiBwYXJlbnQudmVy
dGljYWxDZW50ZXIKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKICAgICAgICAg
ICAgIFRleHRJbnB1dCB7CiAgICAgICAgICAgICAgICAgaWQ6IGFkZHJlc3NMaW5lCiAgICAgICAg
ICAgICAgICAgY2xpcDogdHJ1ZQpAQCAtMTY3LDcgKzE3OSw3IEBAIFJlY3RhbmdsZSB7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGFuY2hvcnMgewogICAgICAgICAgICAgICAg
ICAgICB2ZXJ0aWNhbENlbnRlcjogcGFyZW50LnZlcnRpY2FsQ2VudGVyCi0gICAgICAgICAgICAg
ICAgICAgIGxlZnQ6IHBhcmVudC5sZWZ0CisgICAgICAgICAgICAgICAgICAgIGxlZnQ6IGZhdmlj
b24ucmlnaHQKICAgICAgICAgICAgICAgICAgICAgcmlnaHQ6IHBhcmVudC5yaWdodAogICAgICAg
ICAgICAgICAgICAgICBtYXJnaW5zOiAyCiAgICAgICAgICAgICAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115088</attachid>
            <date>2011-11-14 20:15:01 -0800</date>
            <delta_ts>2011-11-16 12:52:48 -0800</delta_ts>
            <desc>Just a small change on ChangeLog.</desc>
            <filename>favicon.diff</filename>
            <type>text/plain</type>
            <size>32708</size>
            <attacher name="Rafael Brandao">rafael.lobo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9x
dC9DaGFuZ2VMb2cKaW5kZXggOTU0NzdkNC4uZGE5ZmMyOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTUgQEAKKzIwMTEtMTEtMTQgIFJhZmFlbCBCcmFuZGFvICA8cmFmYWVsLmxvYm9Ab3Bl
bmJvc3NhLm9yZz4KKworICAgICAgICBbUXRdW1dLMl0gSW1wbGVtZW50IGZhdmljb24gc3VwcG9y
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEwODIK
KworICAgICAgICBTZXR1cCBGYXZJY29uIGltYWdlIHByb3ZpZGVyIHRvIHRoZSBlbmdpbmUgb24g
c3RhcnR1cC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIGRlY2xhcmF0aXZlL3BsdWdpbi5jcHA6CisgICAgICAgIChXZWJLaXRRbWxQbHVnaW46Omlu
aXRpYWxpemVFbmdpbmUpOgorCiAyMDExLTExLTExICBQaWVycmUgUm9zc2kgIDxwaWVycmUucm9z
c2lAZ21haWwuY29tPgogCiAgICAgICAgIFtRdF0gUmVtb3ZlIHRoZSBRU3R5bGUgZGVwZW5kZW5j
eSBpbiBRdCdzIG1vYmlsZSB0aGVtZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9kZWNs
YXJhdGl2ZS9wbHVnaW4uY3BwIGIvU291cmNlL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9wbHVnaW4u
Y3BwCmluZGV4IDM3OWI5NzkuLjYyMzc0ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQv
ZGVjbGFyYXRpdmUvcGx1Z2luLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZl
L3BsdWdpbi5jcHAKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlICJxZGVjbGFyYXRpdmV3ZWJ2
aWV3X3AuaCIKIAogI2luY2x1ZGUgPFF0RGVjbGFyYXRpdmUvcWRlY2xhcmF0aXZlLmg+CisjaW5j
bHVkZSA8UXREZWNsYXJhdGl2ZS9xZGVjbGFyYXRpdmVlbmdpbmUuaD4KICNpbmNsdWRlIDxRdERl
Y2xhcmF0aXZlL3FkZWNsYXJhdGl2ZWV4dGVuc2lvbnBsdWdpbi5oPgogCiAjaWYgZGVmaW5lZChI
QVZFX1dFQktJVDIpCkBAIC0yOSw2ICszMCw3IEBACiAjaW5jbHVkZSAicXdlYnByZWZlcmVuY2Vz
LmgiCiAKICNpbmNsdWRlIDxRdE5ldHdvcmsvcW5ldHdvcmtyZXBseS5oPgorI2luY2x1ZGUgPFdl
YktpdDIvcXdlYmZhdmljb25pbWFnZXByb3ZpZGVyX3AuaD4KICNlbmRpZgogCiBRVF9CRUdJTl9O
QU1FU1BBQ0UKQEAgLTM2LDYgKzM4LDE0IEBAIFFUX0JFR0lOX05BTUVTUEFDRQogY2xhc3MgV2Vi
S2l0UW1sUGx1Z2luIDogcHVibGljIFFEZWNsYXJhdGl2ZUV4dGVuc2lvblBsdWdpbiB7CiAgICAg
UV9PQkpFQ1QKIHB1YmxpYzoKKyNpZiBkZWZpbmVkKEhBVkVfV0VCS0lUMikKKyAgICB2aXJ0dWFs
IHZvaWQgaW5pdGlhbGl6ZUVuZ2luZShRRGVjbGFyYXRpdmVFbmdpbmUqIGVuZ2luZSwgY29uc3Qg
Y2hhciogdXJpKQorICAgIHsKKyAgICAgICAgUV9BU1NFUlQoUUxhdGluMVN0cmluZyh1cmkpID09
IFFMYXRpbjFTdHJpbmcoIlF0V2ViS2l0IikpOworICAgICAgICBlbmdpbmUtPmFkZEltYWdlUHJv
dmlkZXIoUUxhdGluMVN0cmluZygiZmF2aWNvbiIpLCBuZXcgUVdlYkZhdkljb25JbWFnZVByb3Zp
ZGVyKTsKKyAgICB9CisjZW5kaWYKKwogICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlclR5cGVzKGNv
bnN0IGNoYXIqIHVyaSkKICAgICB7CiAgICAgICAgIFFfQVNTRVJUKFFMYXRpbjFTdHJpbmcodXJp
KSA9PSBRTGF0aW4xU3RyaW5nKCJRdFdlYktpdCIpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA5MjQyMThkLi4x
OTNmNTM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjMgQEAKKzIwMTEtMTEtMTQgIFJhZmFlbCBC
cmFuZGFvICA8cmFmYWVsLmxvYm9Ab3BlbmJvc3NhLm9yZz4KKworICAgICAgICBbUXRdW1dLMl0g
SW1wbGVtZW50IGZhdmljb24gc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzEwODIKKworICAgICAgICBRdFdlYkljb25EYXRhYmFzZSB3YXMg
Y3JlYXRlZCB0byBoYW5kbGUgRmF2SWNvbiByZXF1ZXN0cyBhbmQgc3RvcmUKKyAgICAgICAgdGhl
bSB0byBiZSB1c2VkIGJ5IFF0V2ViRmF2SWNvbkltYWdlUHJvdmlkZXIuIFRoZSByZXF1ZXN0IGlz
IGRvbmUgd2hlbgorICAgICAgICBvdXIgV2ViVmlldyBjaGFuZ2VzIGl0cyB1cmwuIEVhY2ggRmF2
SWNvbiBoYXMgYW4gaWQsIGFuZCBwYWdlcyB0aGF0CisgICAgICAgIHNoYXJlIHRoZSBzYW1lIHVy
bCB3aWxsIGFsc28gc2hhcmUgdGhlIHNhbWUgaWNvbi4gVGhlIHZpZXcgbm93IGhhcyBhCisgICAg
ICAgIG5ldyBhdHRyaWJ1dGUgKGZhdkljb25Tb3VyY2UpIGFuZCBpdCBzaG91bGQgYmUgYXR0YWNo
ZWQgdG8gYW4gSW1hZ2UncworICAgICAgICBzb3VyY2Ugb24gUU1MIHRvIHNob3cgdGhlIGljb24u
CisgICAgICAgIAorICAgICAgICBJY29uRGF0YWJhc2Ugc3RvcmFnZSBsaWVzIG9uIFVJUHJvY2Vz
cyBhbmQgdGhlIHN5bmNocm9ub3VzIGNhbGwgZm9yIHRoZSBpY29uCisgICAgICAgIGltYWdlIHRo
YXQgaGFwcGVucyBvbiBXZWJJY29uRGF0YWJhc2Ugd29uJ3QgbmVlZCB0byBzZW5kIGFueSBtZXNz
YWdlIHRvIFdlYlByb2Nlc3MuCisgICAgICAgIFRoZSBwYXJ0IG9mIEljb25EYXRhYmFzZSBvbiBX
ZWJQcm9jZXNzIGhhbmRsZXMgdGhlIGRvd25sb2FkIG9mIHRoZSByZXNvdXJjZSB3aGVuZXZlcgor
ICAgICAgICBpdCBpcyBuZWVkZWQuIFRoZSBjb250ZW50IGRvd25sb2FkZWQgaXMgc2VudCB0aHJv
dWdoIElQQyB0byB0aGUgYWN0dWFsIGRhdGFiYXNlLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL3F0L1dLVmlldy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vi
dmlldy5jcHA6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6c2V0UGFnZVByb3h5KToK
KyAgICAgICAgKFFRdWlja1dlYlZpZXc6OmZhdkljb25Tb3VyY2UpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQv
cXdlYmZhdmljb25pbWFnZXByb3ZpZGVyX3AuY3BwOgorICAgICAgICAoUVdlYkZhdkljb25JbWFn
ZVByb3ZpZGVyOjpRV2ViRmF2SWNvbkltYWdlUHJvdmlkZXIpOgorICAgICAgICAoUVdlYkZhdklj
b25JbWFnZVByb3ZpZGVyOjp+UVdlYkZhdkljb25JbWFnZVByb3ZpZGVyKToKKyAgICAgICAgKFFX
ZWJGYXZJY29uSW1hZ2VQcm92aWRlcjo6cmVxdWVzdFBpeG1hcCk6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9xdC9xd2ViZmF2aWNvbmltYWdlcHJvdmlkZXJfcC5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJDb250ZXh0Lmg6IEV4cG9zZWQgYSBwcml2YXRlIGZ1bmN0aW9uIHRoYXQgcmV0dXJu
IHRoZSBkZWZhdWx0IGljb24gZGF0YWJhc2UgcGF0aCBzbyB0aGUgaWNvbgorICAgICAgICBkYXRh
YmFzZSBzdGFydHVwIGNvdWxkIGJlIGRvbmUuIEl0cyBzdGFydHVwIHJlcXVpcmVzIGEgZnVsbCBw
YXRoIGZvciBhIGZpbGVuYW1lIHdoZXJlIHRoZSBmYXZpY29ucyB3aWxsIGJlCisgICAgICAgIGxv
YWRlZCBhbmQgc3RvcmVkLCBidXQgdGhpcyB3YXMgbm90IGRvbmUgaW5zaWRlIFdlYkNvbnRleHQu
IAorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9DbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKHRvUXRX
ZWJJY29uRGF0YWJhc2UpOgorICAgICAgICAocXRfd2tfaWNvbkRhdGFiYXNlRGlkQ2hhbmdlSWNv
bkZvclBhZ2VVUkwpOgorICAgICAgICAocXRfd2tfaWNvbkRhdGFiYXNlRGlkUmVtb3ZlQWxsSWNv
bnMpOgorICAgICAgICAoc2V0dXBJY29uRGF0YWJhc2VDbGllbnQpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9xdC9DbGllbnRJbXBsLmg6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0V2ViSWNvbkRh
dGFiYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChRdFdlYkljb25EYXRhYmFzZTo6aW5pdCk6Cisg
ICAgICAgIChRdFdlYkljb25EYXRhYmFzZTo6UXRXZWJJY29uRGF0YWJhc2UpOgorICAgICAgICAo
UXRXZWJJY29uRGF0YWJhc2U6On5RdFdlYkljb25EYXRhYmFzZSk6CisgICAgICAgIChRdFdlYklj
b25EYXRhYmFzZTo6aWNvbkltYWdlRm9yUGFnZVVSTCk6CisgICAgICAgIChRdFdlYkljb25EYXRh
YmFzZTo6cmVxdWVzdEljb25JZEZvclBhZ2VVUkwpOgorICAgICAgICAoUXRXZWJJY29uRGF0YWJh
c2U6Omljb25JbWFnZUZvckljb25JZCk6CisgICAgICAgIChRdFdlYkljb25EYXRhYmFzZTo6cmV0
YWluSWNvbklkKToKKyAgICAgICAgKFF0V2ViSWNvbkRhdGFiYXNlOjpyZWxlYXNlSWNvbklkKToK
KyAgICAgICAgKFF0V2ViSWNvbkRhdGFiYXNlOjpnZXROZXh0QXZhaWxhYmxlSWNvbklkKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvcXQvUXRXZWJJY29uRGF0YWJhc2UuaDogQWRkZWQuCisgICAgICAg
IChRdFdlYkljb25EYXRhYmFzZTo6aW5zdGFuY2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9R
dFdlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChRdFdlYlBhZ2VQcm94eTo6ZGVmYXVsdFdLQ29u
dGV4dCk6CisgICAgICAgIChRdFdlYlBhZ2VQcm94eTo6flF0V2ViUGFnZVByb3h5KToKKyAgICAg
ICAgKFF0V2ViUGFnZVByb3h5OjpwYWdlUmVmKToKKyAgICAgICAgKFF0V2ViUGFnZVByb3h5Ojpy
ZXF1ZXN0SWNvbklkRm9yUGFnZVVSTCk6CisgICAgICAgIChRdFdlYlBhZ2VQcm94eTo6ZmF2SWNv
blNvdXJjZSk6CisgICAgICAgIChRdFdlYlBhZ2VQcm94eTo6dXBkYXRlRmF2SWNvbklkKToKKyAg
ICAgICAgKFF0V2ViUGFnZVByb3h5OjpkaWRSZWNlaXZlSWNvbklkRm9yUGFnZVVSTCk6CisgICAg
ICAgICogVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVByb3h5Lmg6CisKIDIwMTEtMTEtMTQgIEFsZXhp
cyBNZW5hcmQgIDxhbGV4aXMubWVuYXJkQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAgW1F0XVtX
SzJdIENsZWFudXAgUU1MIHRlc3RzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVGFyZ2V0
LnByaSBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKaW5kZXggYWQxM2IzZi4uYzgzYWI3NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9UYXJnZXQucHJpCkBAIC0yNDgsNiArMjQ4LDcgQEAgSEVBREVSUyArPSBcCiAgICAgVUlQcm9j
ZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmggXAogICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNr
d2Vidmlld19wLmggXAogICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld3ByaXZhdGVl
eHRlbnNpb25fcC5oIFwKKyAgICBVSVByb2Nlc3MvQVBJL3F0L3F3ZWJmYXZpY29uaW1hZ2Vwcm92
aWRlcl9wLmggXAogICAgIFVJUHJvY2Vzcy9BdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdGlvbkNo
YWxsZW5nZVByb3h5LmggXAogICAgIFVJUHJvY2Vzcy9BdXRoZW50aWNhdGlvbi9BdXRoZW50aWNh
dGlvbkRlY2lzaW9uTGlzdGVuZXIuaCBcCiAgICAgVUlQcm9jZXNzL0F1dGhlbnRpY2F0aW9uL1dl
YkNyZWRlbnRpYWwuaCBcCkBAIC0zMTgsNiArMzE5LDcgQEAgSEVBREVSUyArPSBcCiAgICAgVUlQ
cm9jZXNzL3F0L1F0V2ViRXJyb3IuaCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0RG93bmxvYWRNYW5h
Z2VyLmggXAogICAgIFVJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VQcm94eS5oIFwKKyAgICBVSVByb2Nl
c3MvcXQvUXRXZWJJY29uRGF0YWJhc2UuaCBcCiAgICAgVUlQcm9jZXNzL3F0L3F3a2hpc3Rvcnku
aCBcCiAgICAgVUlQcm9jZXNzL3F0L3F3a2hpc3RvcnlfcC5oIFwKICAgICBVSVByb2Nlc3MvcXQv
UXRTR1VwZGF0ZVF1ZXVlLmggXApAQCAtNTQ4LDYgKzU1MCw3IEBAIFNPVVJDRVMgKz0gXAogICAg
IFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAgXAogICAgIFVJUHJvY2Vzcy9BUEkv
cXQvcXdlYnByZWZlcmVuY2VzLmNwcCBcCiAgICAgVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2
aWV3cHJpdmF0ZWV4dGVuc2lvbi5jcHAgXAorICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXdlYmZhdmlj
b25pbWFnZXByb3ZpZGVyX3AuY3BwIFwKICAgICBVSVByb2Nlc3MvQXV0aGVudGljYXRpb24vQXV0
aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5jcHAgXAogICAgIFVJUHJvY2Vzcy9BdXRoZW50aWNh
dGlvbi9BdXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXIuY3BwIFwKICAgICBVSVByb2Nlc3Mv
QXV0aGVudGljYXRpb24vV2ViQ3JlZGVudGlhbC5jcHAgXApAQCAtNjIyLDYgKzYyNSw3IEBAIFNP
VVJDRVMgKz0gXAogICAgIFVJUHJvY2Vzcy9xdC9RdFdlYkVycm9yLmNwcCBcCiAgICAgVUlQcm9j
ZXNzL3F0L1F0RG93bmxvYWRNYW5hZ2VyLmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0V2ViUGFn
ZVByb3h5LmNwcCBcCisgICAgVUlQcm9jZXNzL3F0L1F0V2ViSWNvbkRhdGFiYXNlLmNwcCBcCiAg
ICAgVUlQcm9jZXNzL3F0L3F3a2hpc3RvcnkuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvUXRTR1Vw
ZGF0ZVF1ZXVlLmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0U0dUaWxlTm9kZS5jcHAgXApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9XS1ZpZXcuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvV0tWaWV3LmgKaW5kZXggOGMwMTEyMC4uNDliNmNm
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9XS1ZpZXcuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L1dLVmlldy5oCkBAIC0yMyw2ICsy
Myw3IEBACiAjaW5jbHVkZSA8V2ViS2l0Mi9xcXVpY2t3ZWJwYWdlLmg+CiAjaW5jbHVkZSA8V2Vi
S2l0Mi9xcXVpY2t3ZWJ2aWV3Lmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9xd2ViZG93bmxvYWRpdGVt
Lmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9xd2ViZmF2aWNvbmltYWdlcHJvdmlkZXJfcC5oPgogI2lu
Y2x1ZGUgPFdlYktpdDIvcXdlYnByZWZlcmVuY2VzLmg+CiAKICNlbmRpZiAvKiBXS1ZpZXdfaCAq
LwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2
aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5j
cHAKaW5kZXggNmQwYTZjNi4uZGQzMTIzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVk
ZSAicXF1aWNrd2Vidmlldy5oIgogCiAjaW5jbHVkZSAiUXRWaWV3SW50ZXJmYWNlLmgiCisjaW5j
bHVkZSAiUXRXZWJJY29uRGF0YWJhc2UuaCIKICNpbmNsdWRlICJRdFdlYlBhZ2VQcm94eS5oIgog
I2luY2x1ZGUgIlV0aWxzUXQuaCIKICNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKQEAgLTM1Myw2
ICszNTQsMTEgQEAgdm9pZCBRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6c2V0UGFnZVByb3h5KFF0V2Vi
UGFnZVByb3h5KiBwYWdlUHJveHkpCiAgICAgUV9RKFFRdWlja1dlYlZpZXcpOwogICAgIHRoaXMt
PnBhZ2VQcm94eS5yZXNldChwYWdlUHJveHkpOwogICAgIFFPYmplY3Q6OmNvbm5lY3QocGFnZVBy
b3h5LCBTSUdOQUwocmVjZWl2ZWRNZXNzYWdlRnJvbU5hdmlnYXRvclF0T2JqZWN0KFFWYXJpYW50
TWFwKSksIHEsIFNJR05BTChtZXNzYWdlUmVjZWl2ZWQoUVZhcmlhbnRNYXApKSk7CisgICAgUU9i
amVjdDo6Y29ubmVjdChwYWdlUHJveHksIFNJR05BTChkaWRDaGFuZ2VGYXZJY29uU291cmNlKFFV
cmwpKSwgcSwgU0lHTkFMKGZhdkljb25Tb3VyY2VDaGFuZ2VkKFFVcmwpKSk7CisKKyAgICBRdFdl
Ykljb25EYXRhYmFzZSogaWNvbkRhdGFiYXNlID0gUXRXZWJJY29uRGF0YWJhc2U6Omluc3RhbmNl
KCk7CisgICAgUU9iamVjdDo6Y29ubmVjdChxLCBTSUdOQUwodXJsQ2hhbmdlZChRVXJsKSksIGlj
b25EYXRhYmFzZSwgU0xPVChyZXF1ZXN0SWNvbklkRm9yUGFnZVVSTChRVXJsKSkpOworICAgIFFP
YmplY3Q6OmNvbm5lY3QoaWNvbkRhdGFiYXNlLCBTSUdOQUwoaWNvbklkUmVhZHlGb3JQYWdlVVJM
KGludCwgUVVybCkpLCBwYWdlUHJveHksIFNMT1QoZGlkUmVjZWl2ZUljb25JZEZvclBhZ2VVUkwo
aW50LCBRVXJsKSkpOwogfQogCiBRUXVpY2tXZWJWaWV3OjpRUXVpY2tXZWJWaWV3KFFRdWlja0l0
ZW0qIHBhcmVudCkKQEAgLTQyMCw2ICs0MjYsMTIgQEAgdm9pZCBRUXVpY2tXZWJWaWV3OjpyZWxv
YWQoKQogICAgIGQtPnBhZ2VQcm94eS0+cmVsb2FkKCk7CiB9CiAKK1FVcmwgUVF1aWNrV2ViVmll
dzo6ZmF2SWNvblNvdXJjZSgpIGNvbnN0Cit7CisgICAgUV9EKGNvbnN0IFFRdWlja1dlYlZpZXcp
OworICAgIHJldHVybiBkLT5wYWdlUHJveHktPmZhdkljb25Tb3VyY2UoKTsKK30KKwogUVVybCBR
UXVpY2tXZWJWaWV3Ojp1cmwoKSBjb25zdAogewogICAgIFFfRChjb25zdCBRUXVpY2tXZWJWaWV3
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vi
dmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmgK
aW5kZXggZjhiYTgxNy4uOTUyNmM4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmgKQEAgLTU1LDYgKzU1LDcgQEAgY2xhc3MgUVdFQktJVF9F
WFBPUlQgUVF1aWNrV2ViVmlldyA6IHB1YmxpYyBRUXVpY2tJdGVtIHsKICAgICBRX1BST1BFUlRZ
KGJvb2wgY2FuR29Gb3J3YXJkIFJFQUQgY2FuR29Gb3J3YXJkIE5PVElGWSBuYXZpZ2F0aW9uU3Rh
dGVDaGFuZ2VkIEZJTkFMKQogICAgIFFfUFJPUEVSVFkoYm9vbCBjYW5TdG9wIFJFQUQgY2FuU3Rv
cCBOT1RJRlkgbmF2aWdhdGlvblN0YXRlQ2hhbmdlZCBGSU5BTCkKICAgICBRX1BST1BFUlRZKGJv
b2wgY2FuUmVsb2FkIFJFQUQgY2FuUmVsb2FkIE5PVElGWSBuYXZpZ2F0aW9uU3RhdGVDaGFuZ2Vk
IEZJTkFMKQorICAgIFFfUFJPUEVSVFkoUVVybCBmYXZJY29uU291cmNlIFJFQUQgZmF2SWNvblNv
dXJjZSBOT1RJRlkgZmF2SWNvblNvdXJjZUNoYW5nZWQpCiAgICAgUV9QUk9QRVJUWShRV2ViUHJl
ZmVyZW5jZXMqIHByZWZlcmVuY2VzIFJFQUQgcHJlZmVyZW5jZXMgQ09OU1RBTlQgRklOQUwpCiAg
ICAgUV9QUk9QRVJUWShRUXVpY2tXZWJQYWdlKiBwYWdlIFJFQUQgcGFnZSBDT05TVEFOVCBGSU5B
TCkKICAgICBRX0VOVU1TKE5hdmlnYXRpb25Qb2xpY3kpCkBAIC03OCw2ICs3OSw3IEBAIHB1Ymxp
YzoKICAgICBRVXJsIHVybCgpIGNvbnN0OwogICAgIFFTdHJpbmcgdGl0bGUoKSBjb25zdDsKICAg
ICBpbnQgbG9hZFByb2dyZXNzKCkgY29uc3Q7CisgICAgUVVybCBmYXZJY29uU291cmNlKCkgY29u
c3Q7CiAKICAgICBib29sIGNhbkdvQmFjaygpIGNvbnN0OwogICAgIGJvb2wgY2FuR29Gb3J3YXJk
KCkgY29uc3Q7CkBAIC0xMDksNiArMTExLDcgQEAgUV9TSUdOQUxTOgogICAgIHZvaWQgbGlua0hv
dmVyZWQoY29uc3QgUVVybCYgdXJsLCBjb25zdCBRU3RyaW5nJiB0aXRsZSk7CiAgICAgdm9pZCB2
aWV3TW9kZUNoYW5nZWQoKTsKICAgICB2b2lkIG5hdmlnYXRpb25TdGF0ZUNoYW5nZWQoKTsKKyAg
ICB2b2lkIGZhdkljb25Tb3VyY2VDaGFuZ2VkKGNvbnN0IFFVcmwmIHVybCk7CiAKIHByb3RlY3Rl
ZDoKICAgICB2aXJ0dWFsIHZvaWQgZ2VvbWV0cnlDaGFuZ2VkKGNvbnN0IFFSZWN0RiYsIGNvbnN0
IFFSZWN0RiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9x
d2ViZmF2aWNvbmltYWdlcHJvdmlkZXJfcC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3F3ZWJmYXZpY29uaW1hZ2Vwcm92aWRlcl9wLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5mOWFmNWY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9xdC9xd2ViZmF2aWNvbmltYWdlcHJvdmlkZXJfcC5jcHAKQEAgLTAs
MCArMSw1MCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgInF3ZWJmYXZpY29uaW1hZ2Vwcm92aWRlcl9wLmgiCisKKyNpbmNsdWRlICJRdFdlYklj
b25EYXRhYmFzZS5oIgorI2luY2x1ZGUgPFF0R3VpL1FDb2xvcj4KKworUVdlYkZhdkljb25JbWFn
ZVByb3ZpZGVyOjpRV2ViRmF2SWNvbkltYWdlUHJvdmlkZXIoKQorICAgIDogUURlY2xhcmF0aXZl
SW1hZ2VQcm92aWRlcihRRGVjbGFyYXRpdmVJbWFnZVByb3ZpZGVyOjpQaXhtYXApCisgICAgLCBt
X2RlZmF1bHRGYXZJY29uKDEsIDEpCit7CisgICAgbV9kZWZhdWx0RmF2SWNvbi5maWxsKFFDb2xv
cigwLCAwLCAwLCAwKSk7Cit9CisKK1FXZWJGYXZJY29uSW1hZ2VQcm92aWRlcjo6flFXZWJGYXZJ
Y29uSW1hZ2VQcm92aWRlcigpCit7CisKK30KKworUVBpeG1hcCBRV2ViRmF2SWNvbkltYWdlUHJv
dmlkZXI6OnJlcXVlc3RQaXhtYXAoY29uc3QgUVN0cmluZyYgaWQsIFFTaXplKiBzaXplLCBjb25z
dCBRU2l6ZSYpCit7CisgICAgUVBpeG1hcCBpY29uOworICAgIFF0V2ViSWNvbkRhdGFiYXNlKiBp
Y29uRGF0YWJhc2UgPSBRdFdlYkljb25EYXRhYmFzZTo6aW5zdGFuY2UoKTsKKworICAgIGlmICgo
aWNvbiA9IGljb25EYXRhYmFzZS0+aWNvbkltYWdlRm9ySWNvbklkKGlkLnRvSW50KCkpKS5pc051
bGwoKSkKKyAgICAgICAgaWNvbiA9IG1fZGVmYXVsdEZhdkljb247CisKKyAgICBpZiAoc2l6ZSkK
KyAgICAgICAgKnNpemUgPSBpY29uLnNpemUoKTsKKworICAgIHJldHVybiBpY29uOworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2ViZmF2aWNvbmltYWdl
cHJvdmlkZXJfcC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2ViZmF2aWNv
bmltYWdlcHJvdmlkZXJfcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFk
NjBjOGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0
L3F3ZWJmYXZpY29uaW1hZ2Vwcm92aWRlcl9wLmgKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAgICBD
b3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5
KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorKi8KKworI2lmbmRlZiBxd2ViZmF2aWNvbmltYWdlcHJvdmlkZXJfcF9oCisjZGVmaW5l
IHF3ZWJmYXZpY29uaW1hZ2Vwcm92aWRlcl9wX2gKKworI2luY2x1ZGUgInF3ZWJraXRnbG9iYWwu
aCIKKyNpbmNsdWRlIDxRdERlY2xhcmF0aXZlL1FEZWNsYXJhdGl2ZUltYWdlUHJvdmlkZXI+Cisj
aW5jbHVkZSA8UXRHdWkvUVBpeG1hcD4KKworY2xhc3MgUVdFQktJVF9FWFBPUlQgUVdlYkZhdklj
b25JbWFnZVByb3ZpZGVyIDogcHVibGljIFFEZWNsYXJhdGl2ZUltYWdlUHJvdmlkZXIgeworcHVi
bGljOgorICAgIFFXZWJGYXZJY29uSW1hZ2VQcm92aWRlcigpOworICAgIH5RV2ViRmF2SWNvbklt
YWdlUHJvdmlkZXIoKTsKKyAgICBRUGl4bWFwIHJlcXVlc3RQaXhtYXAoY29uc3QgUVN0cmluZyYg
aWQsIFFTaXplKiBzaXplLCBjb25zdCBRU2l6ZSYgcmVxdWVzdGVkU2l6ZSk7CisKK3ByaXZhdGU6
CisgICAgUVBpeG1hcCBtX2RlZmF1bHRGYXZJY29uOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYkNvbnRleHQuaAppbmRleCAxNTRkNDk5Li5kNTM0NTRmZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5oCkBAIC0xNjksNiArMTY5LDggQEAgcHVibGljOgog
ICAgIHZvaWQgc2V0SWNvbkRhdGFiYXNlUGF0aChjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHNl
dExvY2FsU3RvcmFnZURpcmVjdG9yeShjb25zdCBTdHJpbmcmIGRpcikgeyBtX292ZXJyaWRlTG9j
YWxTdG9yYWdlRGlyZWN0b3J5ID0gZGlyOyB9CiAKKyAgICBTdHJpbmcgaWNvbkRhdGFiYXNlUGF0
aCgpIGNvbnN0OworCiAgICAgU3RyaW5nIG92ZXJyaWRlV2ViSW5zcGVjdG9yQmFzZURpcmVjdG9y
eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcnJpZGVXZWJJbnNwZWN0b3JCYXNlRGlyZWN0b3J5OyB9
CiAgICAgdm9pZCBzZXRPdmVycmlkZVdlYkluc3BlY3RvckJhc2VEaXJlY3RvcnkoY29uc3QgU3Ry
aW5nJiBwYXRoKSB7IG1fb3ZlcnJpZGVXZWJJbnNwZWN0b3JCYXNlRGlyZWN0b3J5ID0gcGF0aDsg
fQogCkBAIC0yMzIsNyArMjM0LDYgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgZGF0YWJhc2VEaXJl
Y3RvcnkoKSBjb25zdDsKICAgICBTdHJpbmcgcGxhdGZvcm1EZWZhdWx0RGF0YWJhc2VEaXJlY3Rv
cnkoKSBjb25zdDsKIAotICAgIFN0cmluZyBpY29uRGF0YWJhc2VQYXRoKCkgY29uc3Q7CiAgICAg
U3RyaW5nIHBsYXRmb3JtRGVmYXVsdEljb25EYXRhYmFzZVBhdGgoKSBjb25zdDsKIAogICAgIFN0
cmluZyBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9xdC9DbGllbnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC9DbGllbnRJbXBsLmNwcAppbmRleCA4MDJlZGU2Li4xYmUwNzhhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvQ2xpZW50SW1wbC5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3F0L0NsaWVudEltcGwuY3BwCkBAIC0yMSwxMiArMjEsMTMgQEAK
ICNpbmNsdWRlICJDbGllbnRJbXBsLmgiCiAKICNpbmNsdWRlICJRdFdlYkVycm9yLmgiCi0jaW5j
bHVkZSAiV2ViRnJhbWVQcm94eS5oIgogI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgogI2luY2x1ZGUg
IldLU3RyaW5nUXQuaCIKICNpbmNsdWRlICJXS1VSTFF0LmgiCisjaW5jbHVkZSAiV2ViRnJhbWVQ
cm94eS5oIgogI2luY2x1ZGUgPFF0UG9saWN5SW50ZXJmYWNlLmg+CiAjaW5jbHVkZSA8UXRWaWV3
SW50ZXJmYWNlLmg+CisjaW5jbHVkZSA8UXRXZWJJY29uRGF0YWJhc2UuaD4KICNpbmNsdWRlIDxR
dFdlYlBhZ2VQcm94eS5oPgogI2luY2x1ZGUgPFdLQXJyYXkuaD4KICNpbmNsdWRlIDxXS0ZyYW1l
Lmg+CkBAIC02MCw2ICs2MSwxMiBAQCBzdGF0aWMgaW5saW5lIFF0UG9saWN5SW50ZXJmYWNlKiB0
b1F0UG9saWN5SW50ZXJmYWNlKGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8UXRQb2xpY3lJbnRlcmZhY2UqPihjb25zdF9jYXN0PHZvaWQqPihjbGll
bnRJbmZvKSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgUXRXZWJJY29uRGF0YWJhc2UqIHRvUXRXZWJJ
Y29uRGF0YWJhc2UoY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBBU1NFUlQoY2xpZW50
SW5mbyk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UXRXZWJJY29uRGF0YWJhc2UqPihj
b25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSk7Cit9CisKIHN0YXRpYyB2b2lkIGRpc3BhdGNo
TG9hZFN1Y2NlZWRlZChXS0ZyYW1lUmVmIGZyYW1lLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQog
ewogICAgIGlmICghV0tGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkKQEAgLTE2Myw2ICsxNzAsMTcg
QEAgc3RhdGljIGJvb2wgcXRfd2tfcnVuSmF2YVNjcmlwdENvbmZpcm0oV0tQYWdlUmVmLCBXS1N0
cmluZ1JlZiBtZXNzYWdlLCBXS0ZyYW1lUmUKICAgICByZXR1cm4gdG9RdFZpZXdJbnRlcmZhY2Uo
Y2xpZW50SW5mbyktPnJ1bkphdmFTY3JpcHRDb25maXJtKHFNZXNzYWdlKTsKIH0KIAorc3RhdGlj
IHZvaWQgcXRfd2tfaWNvbkRhdGFiYXNlRGlkQ2hhbmdlSWNvbkZvclBhZ2VVUkwoV0tJY29uRGF0
YWJhc2VSZWYgaWNvbkRhdGFiYXNlLCBXS1VSTFJlZiBwYWdlVVJMLCBjb25zdCB2b2lkKiBjbGll
bnRJbmZvKQoreworICAgIFFVcmwgcVVybCA9IFdLVVJMQ29weVFVcmwocGFnZVVSTCk7CisgICAg
dG9RdFdlYkljb25EYXRhYmFzZShjbGllbnRJbmZvKS0+cmVxdWVzdEljb25JZEZvclBhZ2VVUkwo
cVVybCk7Cit9CisKK3N0YXRpYyB2b2lkIHF0X3drX2ljb25EYXRhYmFzZURpZFJlbW92ZUFsbElj
b25zKFdLSWNvbkRhdGFiYXNlUmVmIGljb25EYXRhYmFzZSwgY29uc3Qgdm9pZCogY2xpZW50SW5m
bykKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRoZSBjYWxsYmFjayBmb3IgdGhpcyBldmVu
dC4KK30KKwogc3RhdGljIGlubGluZSBXS1N0cmluZ1JlZiBjcmVhdGVOdWxsV0tTdHJpbmcoKQog
ewogICAgIFJlZlB0cjxXZWJTdHJpbmc+IHdlYlN0cmluZyA9IFdlYlN0cmluZzo6Y3JlYXRlTnVs
bCgpOwpAQCAtMzUzLDMgKzM3MSwxNCBAQCB2b2lkIHNldHVwQ29udGV4dEluamVjdGVkQnVuZGxl
Q2xpZW50KFdLQ29udGV4dFJlZiBjb250ZXh0KQogICAgIGluamVjdGVkQnVuZGxlQ2xpZW50LmRp
ZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlID0gcXRfd2tfZGlkUmVjZWl2ZU1lc3Nh
Z2VGcm9tSW5qZWN0ZWRCdW5kbGU7CiAgICAgV0tDb250ZXh0U2V0SW5qZWN0ZWRCdW5kbGVDbGll
bnQoY29udGV4dCwgJmluamVjdGVkQnVuZGxlQ2xpZW50KTsKIH0KKwordm9pZCBzZXR1cEljb25E
YXRhYmFzZUNsaWVudChRdFdlYkljb25EYXRhYmFzZSogcXRXZWJJY29uRGF0YWJhc2UsIFdlYklj
b25EYXRhYmFzZSogd2ViSWNvbkRhdGFiYXNlKQoreworICAgIFdLSWNvbkRhdGFiYXNlQ2xpZW50
IGljb25EYXRhYmFzZUNsaWVudDsKKyAgICBtZW1zZXQoJmljb25EYXRhYmFzZUNsaWVudCwgMCwg
c2l6ZW9mKFdLSWNvbkRhdGFiYXNlQ2xpZW50KSk7CisgICAgaWNvbkRhdGFiYXNlQ2xpZW50LnZl
cnNpb24gPSBrV0tJY29uRGF0YWJhc2VDbGllbnRDdXJyZW50VmVyc2lvbjsKKyAgICBpY29uRGF0
YWJhc2VDbGllbnQuY2xpZW50SW5mbyA9IHF0V2ViSWNvbkRhdGFiYXNlOworICAgIGljb25EYXRh
YmFzZUNsaWVudC5kaWRDaGFuZ2VJY29uRm9yUGFnZVVSTCA9IHF0X3drX2ljb25EYXRhYmFzZURp
ZENoYW5nZUljb25Gb3JQYWdlVVJMOworICAgIGljb25EYXRhYmFzZUNsaWVudC5kaWRSZW1vdmVB
bGxJY29ucyA9IHF0X3drX2ljb25EYXRhYmFzZURpZFJlbW92ZUFsbEljb25zOworICAgIFdLSWNv
bkRhdGFiYXNlU2V0SWNvbkRhdGFiYXNlQ2xpZW50KHRvQVBJKHdlYkljb25EYXRhYmFzZSksICZp
Y29uRGF0YWJhc2VDbGllbnQpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L0NsaWVudEltcGwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9DbGllbnRJ
bXBsLmgKaW5kZXggNGVmODk3NS4uNmNmYTJmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL3F0L0NsaWVudEltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
cXQvQ2xpZW50SW1wbC5oCkBAIC0yMywxNiArMjMsMTggQEAKICNpbmNsdWRlIDxXZWJLaXQyL1dL
Q29udGV4dC5oPgogCiBjbGFzcyBRdFdlYlBhZ2VQcm94eTsKK2NsYXNzIFF0V2ViSWNvbkRhdGFi
YXNlOwogbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBRdFBvbGljeUludGVyZmFjZTsKIGNsYXNz
IFdlYlBhZ2VQcm94eTsKK2NsYXNzIFdlYkljb25EYXRhYmFzZTsKIH0KIAogdm9pZCBzZXR1cFBh
Z2VMb2FkZXJDbGllbnQoUXRXZWJQYWdlUHJveHkqLCBXZWJLaXQ6OldlYlBhZ2VQcm94eSopOwog
dm9pZCBzZXR1cFBhZ2VVaUNsaWVudChRdFdlYlBhZ2VQcm94eSosIFdlYktpdDo6V2ViUGFnZVBy
b3h5Kik7CiB2b2lkIHNldHVwUGFnZVBvbGljeUNsaWVudChXZWJLaXQ6OlF0UG9saWN5SW50ZXJm
YWNlKiwgV2ViS2l0OjpXZWJQYWdlUHJveHkqKTsKK3ZvaWQgc2V0dXBJY29uRGF0YWJhc2VDbGll
bnQoUXRXZWJJY29uRGF0YWJhc2UqLCBXZWJLaXQ6OldlYkljb25EYXRhYmFzZSopOwogCiB2b2lk
IHNldHVwQ29udGV4dEluamVjdGVkQnVuZGxlQ2xpZW50KFdLQ29udGV4dFJlZik7CiAKICNlbmRp
ZiAvKiBDbGllbnRJbXBsX2ggKi8KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L1F0V2ViSWNvbkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9x
dC9RdFdlYkljb25EYXRhYmFzZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uZWRiOWM4OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9x
dC9RdFdlYkljb25EYXRhYmFzZS5jcHAKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgICAgQ29weXJp
Z2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJRdFdlYkljb25EYXRhYmFzZS5o
IgorCisjaW5jbHVkZSAiQ2xpZW50SW1wbC5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVk
ZSAiS1VSTC5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkNvbnRl
eHQuaCIKKyNpbmNsdWRlICJXZWJJY29uRGF0YWJhc2UuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisKK1F0V2ViSWNvbkRhdGFiYXNlKiBRdFdlYkljb25EYXRhYmFzZTo6bV9pbnN0
YW5jZSA9IDA7CisKK3ZvaWQgUXRXZWJJY29uRGF0YWJhc2U6OmluaXQoV2ViQ29udGV4dCogY29u
dGV4dCkKK3sKKyAgICBpZiAoIW1faW5zdGFuY2UpCisgICAgICAgIG1faW5zdGFuY2UgPSBuZXcg
UXRXZWJJY29uRGF0YWJhc2UoY29udGV4dCk7Cit9CisKK1F0V2ViSWNvbkRhdGFiYXNlOjpRdFdl
Ykljb25EYXRhYmFzZShXZWJDb250ZXh0KiBjb250ZXh0KQorICAgIDogbV9sYXN0SWNvbklkKDAp
Cit7CisgICAgLy8gRklYTUU6IHRoaXMgc2V0dGVyIGRvZXNuJ3Qgb25seSBzZXQgdGhlIGljb24g
ZGF0YWJhc2UgcGF0aCwgYnV0IGl0IGFsc28KKyAgICAvLyB0cmlnZ2VyIHRoZSBzdGFydHVwIG9m
IFdlYkNvbnRleHQncyBXZWJJY29uRGF0YWJhc2UuIFRoZSBnZXR0ZXIgd2lsbCByZXR1cm4KKyAg
ICAvLyB0aGUgZGVmYXVsdCBwbGF0Zm9ybSBwYXRoIGFuZCB3aWxsIHN0YXJ0IFdlYkljb25EYXRh
YmFzZSB3aXRoIGl0LgorICAgIGNvbnRleHQtPnNldEljb25EYXRhYmFzZVBhdGgoY29udGV4dC0+
aWNvbkRhdGFiYXNlUGF0aCgpKTsKKyAgICBtX2ljb25EYXRhYmFzZSA9IGNvbnRleHQtPmljb25E
YXRhYmFzZSgpOworICAgIHNldHVwSWNvbkRhdGFiYXNlQ2xpZW50KHRoaXMsIG1faWNvbkRhdGFi
YXNlKTsKK30KKworUXRXZWJJY29uRGF0YWJhc2U6On5RdFdlYkljb25EYXRhYmFzZSgpCit7Cit9
CisKK1FQaXhtYXAgUXRXZWJJY29uRGF0YWJhc2U6Omljb25JbWFnZUZvclBhZ2VVUkwoY29uc3Qg
UVVybCYgcGFnZVVSTCkKK3sKKyAgICBTdHJpbmcgdXJsID0gV2ViQ29yZTo6S1VSTChwYWdlVVJM
KS5zdHJpbmcoKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2U+IGltYWdlID0gbV9pY29uRGF0
YWJhc2UtPmltYWdlRm9yUGFnZVVSTCh1cmwpOworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJl
dHVybiBRUGl4bWFwKCk7CisKKyAgICBRUGl4bWFwKiBuYXRpdmVJbWFnZSA9IGltYWdlLT5uYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIGlmICghbmF0aXZlSW1hZ2UpCisgICAgICAg
IHJldHVybiBRUGl4bWFwKCk7CisKKyAgICByZXR1cm4gbmF0aXZlSW1hZ2UtPmNvcHkoKTsKK30K
Kwordm9pZCBRdFdlYkljb25EYXRhYmFzZTo6cmVxdWVzdEljb25JZEZvclBhZ2VVUkwoY29uc3Qg
UVVybCYgdXJsKQoreworCisgICAgUVBpeG1hcCBpY29uID0gaWNvbkltYWdlRm9yUGFnZVVSTCh1
cmwpOworICAgIGlmIChpY29uLmlzTnVsbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQg
aWNvbklkID0gZ2V0TmV4dEF2YWlsYWJsZUljb25JZCgpOworICAgIG1fcGl4bWFwRm9ySWNvbklk
W2ljb25JZF0gPSBpY29uOworICAgIGVtaXQgaWNvbklkUmVhZHlGb3JQYWdlVVJMKGljb25JZCwg
dXJsKTsKK30KKworUVBpeG1hcCBRdFdlYkljb25EYXRhYmFzZTo6aWNvbkltYWdlRm9ySWNvbklk
KGludCBpZCkgY29uc3QKK3sKKyAgICBRTWFwPGludCwgUVBpeG1hcD46OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9waXhtYXBGb3JJY29uSWQuZmluZChpZCk7CisgICAgaWYgKGl0ID09IG1fcGl4bWFw
Rm9ySWNvbklkLmNvbnN0RW5kKCkpCisgICAgICAgIHJldHVybiBRUGl4bWFwKCk7CisKKyAgICBy
ZXR1cm4gaXQudmFsdWUoKTsKK30KKwordm9pZCBRdFdlYkljb25EYXRhYmFzZTo6cmV0YWluSWNv
bklkKGludCBpZCkKK3sKKyAgICBRTWFwPGludCwgaW50Pjo6aXRlcmF0b3IgaXQgPSBtX3JldGFp
bkNvdW50Rm9ySWNvbklkLmZpbmQoaWQpOworICAgIGlmIChpdCAhPSBtX3JldGFpbkNvdW50Rm9y
SWNvbklkLmVuZCgpKSB7CisgICAgICAgIGl0LnZhbHVlKCkrKzsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBtX3JldGFpbkNvdW50Rm9ySWNvbklkW2lkXSA9IDE7Cit9CisKK3ZvaWQgUXRX
ZWJJY29uRGF0YWJhc2U6OnJlbGVhc2VJY29uSWQoaW50IGlkKQoreworICAgIFFNYXA8aW50LCBp
bnQ+OjppdGVyYXRvciBpdCA9IG1fcmV0YWluQ291bnRGb3JJY29uSWQuZmluZChpZCk7CisgICAg
aWYgKGl0ID09IG1fcmV0YWluQ291bnRGb3JJY29uSWQuZW5kKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChpdC52YWx1ZSgpID09IDEpIHsKKyAgICAgICAgbV9yZXRhaW5Db3VudEZvcklj
b25JZC5yZW1vdmUoaWQpOworICAgICAgICBtX3BpeG1hcEZvckljb25JZC5yZW1vdmUoaWQpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaXQudmFsdWUoKS0tOworfQorCitpbnQgUXRX
ZWJJY29uRGF0YWJhc2U6OmdldE5leHRBdmFpbGFibGVJY29uSWQoKQoreworICAgIC8vIEZJWE1F
OiBSZXVzZSBpZHMgdG8gYXZvaWQgb3ZlcmZsb3cuCisgICAgcmV0dXJuICsrbV9sYXN0SWNvbklk
OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViSWNvbkRh
dGFiYXNlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJJY29uRGF0YWJhc2Uu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjhmZDgwCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViSWNvbkRhdGFiYXNlLmgK
QEAgLTAsMCArMSw2OCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworCisjaWZuZGVmIFF0V2ViSWNv
bkRhdGFiYXNlX2gKKyNkZWZpbmUgUXRXZWJJY29uRGF0YWJhc2VfaAorCisjaW5jbHVkZSAiV0tJ
Y29uRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJxd2Via2l0Z2xvYmFsLmgiCisjaW5jbHVkZSA8UXRD
b3JlL1FNYXA+CisjaW5jbHVkZSA8UXRDb3JlL1FPYmplY3Q+CisjaW5jbHVkZSA8UXRDb3JlL1FV
cmw+CisjaW5jbHVkZSA8UXRHdWkvUVBpeG1hcD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFz
cyBXZWJDb250ZXh0OworY2xhc3MgV2ViSWNvbkRhdGFiYXNlOworfQorCit1c2luZyBuYW1lc3Bh
Y2UgV2ViS2l0OworCitjbGFzcyBRdFdlYkljb25EYXRhYmFzZSA6IHB1YmxpYyBRT2JqZWN0IHsK
KyAgICBRX09CSkVDVAorCitwdWJsaWM6CisgICAgc3RhdGljIFF0V2ViSWNvbkRhdGFiYXNlKiBp
bnN0YW5jZSgpIHsgcmV0dXJuIG1faW5zdGFuY2U7IH0KKyAgICBzdGF0aWMgdm9pZCBpbml0KFdl
YkNvbnRleHQqKTsKKyAgICB+UXRXZWJJY29uRGF0YWJhc2UoKTsKKworICAgIFFQaXhtYXAgaWNv
bkltYWdlRm9ySWNvbklkKGludCBpZCkgY29uc3Q7CisgICAgUVBpeG1hcCBpY29uSW1hZ2VGb3JQ
YWdlVVJMKGNvbnN0IFFVcmwmKTsKKyAgICB2b2lkIHJldGFpbkljb25JZChpbnQgaWQpOworICAg
IHZvaWQgcmVsZWFzZUljb25JZChpbnQgaWQpOworCitwdWJsaWMgUV9TTE9UUzoKKyAgICB2b2lk
IHJlcXVlc3RJY29uSWRGb3JQYWdlVVJMKGNvbnN0IFFVcmwmKTsKKworcHVibGljOgorICAgIFFf
U0lHTkFMIHZvaWQgaWNvbklkUmVhZHlGb3JQYWdlVVJMKGludCwgY29uc3QgUVVybCYpOworCitw
cml2YXRlOgorICAgIGludCBnZXROZXh0QXZhaWxhYmxlSWNvbklkKCk7CisgICAgc3RhdGljIFF0
V2ViSWNvbkRhdGFiYXNlKiBtX2luc3RhbmNlOworCisgICAgUXRXZWJJY29uRGF0YWJhc2UoV2Vi
Q29udGV4dCopOworICAgIFdlYkljb25EYXRhYmFzZSogbV9pY29uRGF0YWJhc2U7CisgICAgUU1h
cDxpbnQsIFFQaXhtYXA+IG1fcGl4bWFwRm9ySWNvbklkOworICAgIFFNYXA8aW50LCBpbnQ+IG1f
cmV0YWluQ291bnRGb3JJY29uSWQ7CisgICAgaW50IG1fbGFzdEljb25JZDsKK307CisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVByb3h5
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VQcm94eS5jcHAKaW5k
ZXggMzU2NGRkNi4uODY1OWQ1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3F0L1F0V2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQv
UXRXZWJQYWdlUHJveHkuY3BwCkBAIC0yMSwxNyArMjEsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlF0V2ViUGFnZVByb3h5LmgiCiAKLSNpbmNsdWRlICJRdFdlYkVycm9yLmgi
Ci0jaW5jbHVkZSAicXdlYmRvd25sb2FkaXRlbS5oIgotI2luY2x1ZGUgInF3ZWJkb3dubG9hZGl0
ZW1fcC5oIgotI2luY2x1ZGUgInF3ZWJwcmVmZXJlbmNlcy5oIgotI2luY2x1ZGUgInF3ZWJwcmVm
ZXJlbmNlc19wLmgiCi0KICNpbmNsdWRlICJDbGllbnRJbXBsLmgiCiAjaW5jbHVkZSAiRG93bmxv
YWRQcm94eS5oIgogI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlJbXBsLmgiCi0jaW5jbHVkZSAi
cXdraGlzdG9yeS5oIgotI2luY2x1ZGUgInF3a2hpc3RvcnlfcC5oIgogI2luY2x1ZGUgIkZpbmRJ
bmRpY2F0b3IuaCIKICNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCiAjaW5jbHVkZSAiTXV0
YWJsZUFycmF5LmgiCkBAIC00MiwxNyArMzQsMjYgQEAKICNpbmNsdWRlICJRdFBvbGljeUludGVy
ZmFjZS5oIgogI2luY2x1ZGUgIlF0Vmlld0ludGVyZmFjZS5oIgogI2luY2x1ZGUgIlF0Vmlld3Bv
cnRJbnRlcmFjdGlvbkVuZ2luZS5oIgorI2luY2x1ZGUgIlF0V2ViRXJyb3IuaCIKKyNpbmNsdWRl
ICJRdFdlYkljb25EYXRhYmFzZS5oIgogI2luY2x1ZGUgIlF0V2ViVW5kb0NvbW1hbmQuaCIKKyNp
bmNsdWRlICJXS0ljb25EYXRhYmFzZS5oIgorI2luY2x1ZGUgIldLU3RyaW5nUXQuaCIKKyNpbmNs
dWRlICJXS1VSTFF0LmgiCiAjaW5jbHVkZSAiV2ViQmFja0ZvcndhcmRMaXN0LmgiCiAjaW5jbHVk
ZSAiV2ViQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvbnRleHRNZW51UHJveHlRdC5oIgogI2lu
Y2x1ZGUgIldlYkVkaXRDb21tYW5kUHJveHkuaCIKICNpbmNsdWRlICJXZWJFdmVudEZhY3RvcnlR
dC5oIgogI2luY2x1ZGUgIldlYlBvcHVwTWVudVByb3h5UXQuaCIKLSNpbmNsdWRlICJXS1N0cmlu
Z1F0LmgiCi0jaW5jbHVkZSAiV0tVUkxRdC5oIgotI2luY2x1ZGUgPFFHdWlBcHBsaWNhdGlvbj4K
KyNpbmNsdWRlICJxd2ViZG93bmxvYWRpdGVtLmgiCisjaW5jbHVkZSAicXdlYmRvd25sb2FkaXRl
bV9wLmgiCisjaW5jbHVkZSAicXdlYnByZWZlcmVuY2VzLmgiCisjaW5jbHVkZSAicXdlYnByZWZl
cmVuY2VzX3AuaCIKKyNpbmNsdWRlICJxd2toaXN0b3J5LmgiCisjaW5jbHVkZSAicXdraGlzdG9y
eV9wLmgiCiAjaW5jbHVkZSA8UUdyYXBoaWNzU2NlbmVNb3VzZUV2ZW50PgorI2luY2x1ZGUgPFFH
dWlBcHBsaWNhdGlvbj4KICNpbmNsdWRlIDxRSlNFbmdpbmU+CiAjaW5jbHVkZSA8UU1pbWVEYXRh
PgogI2luY2x1ZGUgPFFTdHlsZUhpbnRzPgpAQCAtODIsNiArODMsNyBAQCBQYXNzUmVmUHRyPFdl
YkNvbnRleHQ+IFF0V2ViUGFnZVByb3h5OjpkZWZhdWx0V0tDb250ZXh0KCkKICAgICAgICAgc19k
ZWZhdWx0Q29udGV4dCA9IFdlYkNvbnRleHQ6OmNyZWF0ZShTdHJpbmcoKSk7CiAgICAgICAgIHNl
dHVwQ29udGV4dEluamVjdGVkQnVuZGxlQ2xpZW50KHRvQVBJKHNfZGVmYXVsdENvbnRleHQuZ2V0
KCkpKTsKICAgICAgICAgc19kb3dubG9hZE1hbmFnZXIgPSBRdERvd25sb2FkTWFuYWdlcjo6Y3Jl
YXRlKHNfZGVmYXVsdENvbnRleHQuZ2V0KCkpOworICAgICAgICBRdFdlYkljb25EYXRhYmFzZTo6
aW5pdChzX2RlZmF1bHRDb250ZXh0LmdldCgpKTsKICAgICB9CiAgICAgcmV0dXJuIHNfZGVmYXVs
dENvbnRleHQ7CiB9CkBAIC0xNjgsNiArMTcwLDcgQEAgUXRXZWJQYWdlUHJveHk6On5RdFdlYlBh
Z2VQcm94eSgpCiAgICAgICAgIGlmICghc19kZWZhdWx0UGFnZVByb3h5Q291bnQpIHsKICAgICAg
ICAgICAgIHNfZGVmYXVsdENvbnRleHQuY2xlYXIoKTsKICAgICAgICAgICAgIHNfZG93bmxvYWRN
YW5hZ2VyLmNsZWFyKCk7CisgICAgICAgICAgICBkZWxldGUgUXRXZWJJY29uRGF0YWJhc2U6Omlu
c3RhbmNlKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgZGVsZXRlIG1faGlzdG9yeTsKQEAgLTU0
Myw3ICs1NDYsNyBAQCB2b2lkIFF0V2ViUGFnZVByb3h5OjpmbGFzaEJhY2tpbmdTdG9yZVVwZGF0
ZXMoY29uc3QgVmVjdG9yPEludFJlY3Q+JikKIAogV0tQYWdlUmVmIFF0V2ViUGFnZVByb3h5Ojpw
YWdlUmVmKCkgY29uc3QKIHsKLSAgICByZXR1cm4gdG9BUEkobV93ZWJQYWdlUHJveHkuZ2V0KCkp
OzsKKyAgICByZXR1cm4gdG9BUEkobV93ZWJQYWdlUHJveHkuZ2V0KCkpOwogfQogCiB2b2lkIFF0
V2ViUGFnZVByb3h5OjpkaWRGaW5kWm9vbWFibGVBcmVhKGNvbnN0IEludFBvaW50JiB0YXJnZXQs
IGNvbnN0IEludFJlY3QmIGFyZWEpCkBAIC05MTksNCArOTIyLDM4IEBAIHZvaWQgUXRXZWJQYWdl
UHJveHk6OmZpbmRab29tYWJsZUFyZWFGb3JQb2ludChjb25zdCBRUG9pbnQmIHBvaW50KQogICAg
IG1fd2ViUGFnZVByb3h5LT5maW5kWm9vbWFibGVBcmVhRm9yUG9pbnQocG9pbnQpOwogfQogCit2
b2lkIFF0V2ViUGFnZVByb3h5OjpyZXF1ZXN0SWNvbklkRm9yUGFnZVVSTChjb25zdCBRVXJsJiBw
YWdlVVJMKQoreworICAgIFF0V2ViSWNvbkRhdGFiYXNlOjppbnN0YW5jZSgpLT5yZXF1ZXN0SWNv
bklkRm9yUGFnZVVSTChwYWdlVVJMKTsKK30KKworUVVybCBRdFdlYlBhZ2VQcm94eTo6ZmF2SWNv
blNvdXJjZSgpIGNvbnN0Cit7CisgICAgc3RhdGljIFFTdHJpbmcgZmF2SWNvblNvdXJjZVRlbXBs
YXRlID0gUUxhdGluMVN0cmluZygiaW1hZ2U6Ly9mYXZpY29uLyUxIik7CisgICAgcmV0dXJuIFFV
cmwoZmF2SWNvblNvdXJjZVRlbXBsYXRlLmFyZyhtX2Zhdkljb25JZCkpOworfQorCit2b2lkIFF0
V2ViUGFnZVByb3h5Ojp1cGRhdGVGYXZJY29uSWQoaW50IGlkKQoreworICAgIGlmIChtX2Zhdklj
b25JZCA9PSBpZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgUXRXZWJJY29uRGF0YWJhc2UqIGlj
b25EYXRhYmFzZSA9IFF0V2ViSWNvbkRhdGFiYXNlOjppbnN0YW5jZSgpOworICAgIGlmIChtX2Zh
dkljb25JZCkKKyAgICAgICAgaWNvbkRhdGFiYXNlLT5yZWxlYXNlSWNvbklkKG1fZmF2SWNvbklk
KTsKKyAgICBtX2Zhdkljb25JZCA9IGlkOworICAgIGlmIChtX2Zhdkljb25JZCkKKyAgICAgICBp
Y29uRGF0YWJhc2UtPnJldGFpbkljb25JZChtX2Zhdkljb25JZCk7CisKKyAgICBlbWl0IGRpZENo
YW5nZUZhdkljb25Tb3VyY2UoZmF2SWNvblNvdXJjZSgpKTsKK30KKwordm9pZCBRdFdlYlBhZ2VQ
cm94eTo6ZGlkUmVjZWl2ZUljb25JZEZvclBhZ2VVUkwoaW50IGlkLCBjb25zdCBRVXJsJiBwYWdl
VVJMKQoreworICAgIGlmICh1cmwoKSAhPSBwYWdlVVJMKQorICAgICAgICByZXR1cm47CisKKyAg
ICB1cGRhdGVGYXZJY29uSWQoaWQpOworfQorCiAjaW5jbHVkZSAibW9jX1F0V2ViUGFnZVByb3h5
LmNwcCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VQ
cm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVByb3h5LmgKaW5k
ZXggNjZkYzQ3ZC4uMWU0NGIyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3F0L1F0V2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0
V2ViUGFnZVByb3h5LmgKQEAgLTM0LDEzICszNCwxMyBAQAogI2luY2x1ZGUgIlZpZXdwb3J0QXJn
dW1lbnRzLmgiCiAjaW5jbHVkZSAiV2ViQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94
eS5oIgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDxRQmFzaWNUaW1lcj4KICNp
bmNsdWRlIDxRR3JhcGhpY3NWaWV3PgogI2luY2x1ZGUgPFFLZXlFdmVudD4KLSNpbmNsdWRlIDxR
VG91Y2hFdmVudD4KICNpbmNsdWRlIDxRTWVudT4KICNpbmNsdWRlIDxRU2hhcmVkUG9pbnRlcj4K
KyNpbmNsdWRlIDxRVG91Y2hFdmVudD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIFFUX0JF
R0lOX05BTUVTUEFDRQogY2xhc3MgUVVuZG9TdGFjazsKQEAgLTUyLDcgKzUyLDcgQEAgY2xhc3Mg
UVdLSGlzdG9yeTsKIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAotV2ViQ29yZTo6RHJhZ09w
ZXJhdGlvbiBkcm9wQWN0aW9uVG9EcmFnT3BlcmF0aW9uKFF0OjpEcm9wQWN0aW9ucyBhY3Rpb25z
KTsKK1dlYkNvcmU6OkRyYWdPcGVyYXRpb24gZHJvcEFjdGlvblRvRHJhZ09wZXJhdGlvbihRdDo6
RHJvcEFjdGlvbnMpOwogCiAvLyBGSVhNRTogbmVlZHMgZm9jdXMgaW4vb3V0LCB3aW5kb3cgYWN0
aXZhdGlvbiwgc3VwcG9ydCB0aHJvdWdoIHZpZXdTdGF0ZURpZENoYW5nZSgpLgogY2xhc3MgUXRX
ZWJQYWdlUHJveHkgOiBwdWJsaWMgUU9iamVjdCwgV2ViS2l0OjpQYWdlQ2xpZW50IHsKQEAgLTEw
NCw3ICsxMDQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0RHJhZyhjb25zdCBX
ZWJDb3JlOjpEcmFnRGF0YSYsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBkcmFnSW1hZ2Up
OwogICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VWaWV3cG9ydFByb3BlcnRpZXMoY29uc3QgV2Vi
Q29yZTo6Vmlld3BvcnRBcmd1bWVudHMmKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29yKGNv
bnN0IFdlYkNvcmU6OkN1cnNvciYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJzb3JIaWRkZW5V
bnRpbE1vdXNlTW92ZXMoYm9vbCBoaWRkZW5VbnRpbE1vdXNlTW92ZXMpOworICAgIHZpcnR1YWwg
dm9pZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCk7CiAgICAgdmlydHVhbCB2
b2lkIHRvb2xUaXBDaGFuZ2VkKGNvbnN0IFdURjo6U3RyaW5nJiwgY29uc3QgV1RGOjpTdHJpbmcm
KTsKICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJFZGl0Q29tbWFuZChQYXNzUmVmUHRyPFdlYktp
dDo6V2ViRWRpdENvbW1hbmRQcm94eT4sIFdlYktpdDo6V2ViUGFnZVByb3h5OjpVbmRvT3JSZWRv
KTsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBbGxFZGl0Q29tbWFuZHMoKTsKQEAgLTE2MCw4ICsx
NjAsOSBAQCBwdWJsaWM6CiAKICAgICBXS1BhZ2VSZWYgcGFnZVJlZigpIGNvbnN0OwogCi0gICAg
dm9pZCBsb2FkKGNvbnN0IFFVcmwmIHVybCk7CisgICAgdm9pZCBsb2FkKGNvbnN0IFFVcmwmKTsK
ICAgICBRVXJsIHVybCgpIGNvbnN0OworICAgIFFVcmwgZmF2SWNvblNvdXJjZSgpIGNvbnN0Owog
CiAgICAgdm9pZCBzZXREcmF3aW5nQXJlYVNpemUoY29uc3QgUVNpemUmKTsKIApAQCAtMTgxLDgg
KzE4Miw4IEBAIHB1YmxpYzoKIAogICAgIHFyZWFsIHRleHRab29tRmFjdG9yKCkgY29uc3Q7CiAg
ICAgcXJlYWwgcGFnZVpvb21GYWN0b3IoKSBjb25zdDsKLSAgICB2b2lkIHNldFRleHRab29tRmFj
dG9yKHFyZWFsIHpvb21GYWN0b3IpOwotICAgIHZvaWQgc2V0UGFnZVpvb21GYWN0b3IocXJlYWwg
em9vbUZhY3Rvcik7CisgICAgdm9pZCBzZXRUZXh0Wm9vbUZhY3RvcihxcmVhbCk7CisgICAgdm9p
ZCBzZXRQYWdlWm9vbUZhY3RvcihxcmVhbCk7CiAgICAgdm9pZCBzZXRQYWdlQW5kVGV4dFpvb21G
YWN0b3JzKHFyZWFsIHBhZ2Vab29tRmFjdG9yLCBxcmVhbCB0ZXh0Wm9vbUZhY3Rvcik7CiAKICAg
ICB2b2lkIHNldFZpc2libGVDb250ZW50UmVjdEFuZFNjYWxlKGNvbnN0IFFSZWN0RiYsIGZsb2F0
KTsKQEAgLTE5OSwxNyArMjAwLDIxIEBAIHB1YmxpYzoKICAgICB2b2lkIGhhbmRsZVNpbmdsZVRh
cEV2ZW50KGNvbnN0IFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50Jik7CiAgICAgdm9pZCBoYW5kbGVE
b3VibGVUYXBFdmVudChjb25zdCBRVG91Y2hFdmVudDo6VG91Y2hQb2ludCYpOwogCisgICAgdm9p
ZCByZXF1ZXN0SWNvbklkRm9yUGFnZVVSTChjb25zdCBRVXJsJik7CisKIHB1YmxpYyBRX1NMT1RT
OgogICAgIHZvaWQgbmF2aWdhdGlvblN0YXRlQ2hhbmdlZCgpOwogICAgIHZvaWQgZGlkUmVjZWl2
ZURvd25sb2FkUmVzcG9uc2UoUVdlYkRvd25sb2FkSXRlbSopOworICAgIHZvaWQgZGlkUmVjZWl2
ZUljb25JZEZvclBhZ2VVUkwoaW50LCBjb25zdCBRVXJsJik7CiAKIHB1YmxpYzoKICAgICBRX1NJ
R05BTCB2b2lkIHpvb21hYmxlQXJlYUZvdW5kKGNvbnN0IFFSZWN0Jik7CiAgICAgUV9TSUdOQUwg
dm9pZCB1cGRhdGVOYXZpZ2F0aW9uU3RhdGUoKTsKICAgICBRX1NJR05BTCB2b2lkIHJlY2VpdmVk
TWVzc2FnZUZyb21OYXZpZ2F0b3JRdE9iamVjdChjb25zdCBRVmFyaWFudE1hcCYpOworICAgIFFf
U0lHTkFMIHZvaWQgZGlkQ2hhbmdlRmF2SWNvblNvdXJjZShjb25zdCBRVXJsJik7CiAKIHByb3Rl
Y3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50KFFQYWludGVyKiBwYWludGVyLCBj
b25zdCBRUmVjdCYgYXJlYSk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudChRUGFpbnRl
ciosIGNvbnN0IFFSZWN0JiBhcmVhKTsKICAgICBSZWZQdHI8V2ViS2l0OjpXZWJQYWdlUHJveHk+
IG1fd2ViUGFnZVByb3h5OwogICAgIFdlYktpdDo6UXRWaWV3SW50ZXJmYWNlKiBjb25zdCBtX3Zp
ZXdJbnRlcmZhY2U7CiAgICAgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKiBtX2ludGVyYWN0
aW9uRW5naW5lOwpAQCAtMjM1LDYgKzI0MCw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBoYW5kbGVE
cmFnTW92ZUV2ZW50KFFEcmFnTW92ZUV2ZW50Kik7CiAgICAgYm9vbCBoYW5kbGVEcm9wRXZlbnQo
UURyb3BFdmVudCopOwogCisgICAgdm9pZCB1cGRhdGVGYXZJY29uSWQoaW50KTsKKwogICAgIHZp
cnR1YWwgdm9pZCB0aW1lckV2ZW50KFFUaW1lckV2ZW50Kik7CiAKICNpZiBFTkFCTEUoVE9VQ0hf
RVZFTlRTKQpAQCAtMjU5LDYgKzI2Niw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX25hdmlnYXRv
clF0T2JqZWN0RW5hYmxlZDsKICAgICBRUG9pbnQgbV90cmlwbGVDbGljazsKICAgICBRQmFzaWNU
aW1lciBtX3RyaXBsZUNsaWNrVGltZXI7CisgICAgaW50IG1fZmF2SWNvbklkOwogfTsKIAogI2Vu
ZGlmIC8qIFF0V2ViUGFnZVByb3h5X2ggKi8KZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA1ZjUyMThiLi4wZTI5YjMxIDEwMDY0NAotLS0gYS9Ub29s
cy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEt
MTEtMTQgIFJhZmFlbCBCcmFuZGFvICA8cmFmYWVsLmxvYm9Ab3BlbmJvc3NhLm9yZz4KKworICAg
ICAgICBbUXRdW1dLMl0gSW1wbGVtZW50IGZhdmljb24gc3VwcG9ydAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEwODIKKworICAgICAgICBBZGRlZCBh
IEZhdkljb24gdG8gTWluaUJyb3dzZXIgYXMgYW4gZXhhbXBsZSBvZiBpdHMgdXNlLgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTWluaUJyb3dzZXIv
cXQvcW1sL0Jyb3dzZXJXaW5kb3cucW1sOgorCiAyMDExLTExLTE0ICBBbmRyZXcgU2NoZXJrdXMg
IDxzY2hlcmt1c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBTa2lwIG1lZGlh
IGxheW91dCB0ZXN0cyBvbiBjaHJvbWl1bS1ncHUtY2ctbWFjLWxlb3BhcmQgcGxhdGZvcm0KZGlm
ZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L3FtbC9Ccm93c2VyV2luZG93LnFtbCBiL1Rv
b2xzL01pbmlCcm93c2VyL3F0L3FtbC9Ccm93c2VyV2luZG93LnFtbAppbmRleCA1Y2MxNTJhLi41
ODcyMWNkIDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvQnJvd3NlcldpbmRv
dy5xbWwKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvcW1sL0Jyb3dzZXJXaW5kb3cucW1sCkBA
IC0xNTcsNiArMTU3LDE4IEBAIFJlY3RhbmdsZSB7CiAgICAgICAgICAgICAgICAgdmlzaWJsZTog
d2ViVmlldy5sb2FkUHJvZ3Jlc3MgIT0gMTAwCiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAg
IEltYWdlIHsKKyAgICAgICAgICAgICAgICBpZDogZmF2aWNvbgorICAgICAgICAgICAgICAgIHNv
dXJjZTogd2ViVmlldy5mYXZJY29uU291cmNlCisgICAgICAgICAgICAgICAgd2lkdGg6IDE2Cisg
ICAgICAgICAgICAgICAgaGVpZ2h0OiAxNgorICAgICAgICAgICAgICAgIGFuY2hvcnMgeworICAg
ICAgICAgICAgICAgICAgICBsZWZ0OiBwYXJlbnQubGVmdAorICAgICAgICAgICAgICAgICAgICBs
ZWZ0TWFyZ2luOiAyCisgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsQ2VudGVyOiBwYXJlbnQu
dmVydGljYWxDZW50ZXIKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKICAgICAg
ICAgICAgIFRleHRJbnB1dCB7CiAgICAgICAgICAgICAgICAgaWQ6IGFkZHJlc3NMaW5lCiAgICAg
ICAgICAgICAgICAgY2xpcDogdHJ1ZQpAQCAtMTY3LDcgKzE3OSw3IEBAIFJlY3RhbmdsZSB7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGFuY2hvcnMgewogICAgICAgICAgICAg
ICAgICAgICB2ZXJ0aWNhbENlbnRlcjogcGFyZW50LnZlcnRpY2FsQ2VudGVyCi0gICAgICAgICAg
ICAgICAgICAgIGxlZnQ6IHBhcmVudC5sZWZ0CisgICAgICAgICAgICAgICAgICAgIGxlZnQ6IGZh
dmljb24ucmlnaHQKICAgICAgICAgICAgICAgICAgICAgcmlnaHQ6IHBhcmVudC5yaWdodAogICAg
ICAgICAgICAgICAgICAgICBtYXJnaW5zOiAyCiAgICAgICAgICAgICAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115427</attachid>
            <date>2011-11-16 12:52:48 -0800</date>
            <delta_ts>2011-11-16 15:37:48 -0800</delta_ts>
            <desc>Addressing some of Jesus&apos; concerns and added QML test to check if FavIcon load is done</desc>
            <filename>favicon-wip-v10-changelog.diff</filename>
            <type>text/plain</type>
            <size>40174</size>
            <attacher name="Rafael Brandao">rafael.lobo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9x
dC9DaGFuZ2VMb2cKaW5kZXggMzg1MzM0MS4uOWEwZTkwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9xdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNSBAQAorMjAxMS0xMS0xNiAgUmFmYWVsIEJyYW5kYW8gIDxyYWZhZWwubG9ib0BvcGVu
Ym9zc2Eub3JnPgorCisgICAgICAgIFtRdF1bV0syXSBJbXBsZW1lbnQgZmF2aWNvbiBzdXBwb3J0
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTA4Mgor
CisgICAgICAgIFNldHVwIEZhdkljb24gaW1hZ2UgcHJvdmlkZXIgdG8gdGhlIGVuZ2luZSBvbiBz
dGFydHVwLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogZGVjbGFyYXRpdmUvcGx1Z2luLmNwcDoKKyAgICAgICAgKFdlYktpdFFtbFBsdWdpbjo6aW5p
dGlhbGl6ZUVuZ2luZSk6CisKIDIwMTEtMTEtMTYgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmll
dy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMDA0
NDguCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL3BsdWdpbi5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL3BsdWdpbi5jcHAKaW5kZXggMzc5Yjk3OS4u
ZmQyOWJkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9wbHVnaW4u
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvcGx1Z2luLmNwcApAQCAtMjgs
NyArMjgsOSBAQAogI2luY2x1ZGUgInF3ZWJkb3dubG9hZGl0ZW0uaCIKICNpbmNsdWRlICJxd2Vi
cHJlZmVyZW5jZXMuaCIKIAorI2luY2x1ZGUgPFF0RGVjbGFyYXRpdmUvcWRlY2xhcmF0aXZlZW5n
aW5lLmg+CiAjaW5jbHVkZSA8UXROZXR3b3JrL3FuZXR3b3JrcmVwbHkuaD4KKyNpbmNsdWRlIDxX
ZWJLaXQyL3F3ZWJmYXZpY29uaW1hZ2Vwcm92aWRlcl9wLmg+CiAjZW5kaWYKIAogUVRfQkVHSU5f
TkFNRVNQQUNFCkBAIC0zNiw2ICszOCwxNCBAQCBRVF9CRUdJTl9OQU1FU1BBQ0UKIGNsYXNzIFdl
YktpdFFtbFBsdWdpbiA6IHB1YmxpYyBRRGVjbGFyYXRpdmVFeHRlbnNpb25QbHVnaW4gewogICAg
IFFfT0JKRUNUCiBwdWJsaWM6CisjaWYgZGVmaW5lZChIQVZFX1dFQktJVDIpCisgICAgdmlydHVh
bCB2b2lkIGluaXRpYWxpemVFbmdpbmUoUURlY2xhcmF0aXZlRW5naW5lKiBlbmdpbmUsIGNvbnN0
IGNoYXIqIHVyaSkKKyAgICB7CisgICAgICAgIFFfQVNTRVJUKFFMYXRpbjFTdHJpbmcodXJpKSA9
PSBRTGF0aW4xU3RyaW5nKCJRdFdlYktpdCIpKTsKKyAgICAgICAgZW5naW5lLT5hZGRJbWFnZVBy
b3ZpZGVyKFFMYXRpbjFTdHJpbmcoImZhdmljb24iKSwgbmV3IFFXZWJGYXZJY29uSW1hZ2VQcm92
aWRlcik7CisgICAgfQorI2VuZGlmCisKICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJUeXBlcyhj
b25zdCBjaGFyKiB1cmkpCiAgICAgewogICAgICAgICBRX0FTU0VSVChRTGF0aW4xU3RyaW5nKHVy
aSkgPT0gUUxhdGluMVN0cmluZygiUXRXZWJLaXQiKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMzRlNWQ0Ny4u
YTM1NDdkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDExLTExLTE2ICBSYWZhZWwg
QnJhbmRhbyAgPHJhZmFlbC5sb2JvQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgW1F0XVtXSzJd
IEltcGxlbWVudCBmYXZpY29uIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTcxMDgyCisKKyAgICAgICAgUXRXZWJJY29uRGF0YWJhc2Ugd2Fz
IGNyZWF0ZWQgdG8gaGFuZGxlIEZhdkljb24gcmVxdWVzdHMgYW5kIHN0b3JlcworICAgICAgICB0
aGVtIHRvIGJlIHVzZWQgYnkgUXRXZWJGYXZJY29uSW1hZ2VQcm92aWRlci4gVGhlIHJlcXVlc3Qg
aXMgZG9uZSB3aGVuCisgICAgICAgIG91ciBXZWJWaWV3IGNoYW5nZXMgaXRzIHVybC4gRWFjaCBG
YXZJY29uIGhhcyBhbiBpZCwgYW5kIHBhZ2VzIHRoYXQKKyAgICAgICAgc2hhcmUgdGhlIHNhbWUg
dXJsIHdpbGwgYWxzbyBzaGFyZSB0aGUgc2FtZSBpY29uLiBUaGUgdmlldyBub3cgaGFzIGEKKyAg
ICAgICAgbmV3IGF0dHJpYnV0ZSAoZmF2SWNvblNvdXJjZSkgYW5kIGl0IHNob3VsZCBiZSBhdHRh
Y2hlZCB0byBhbiBJbWFnZSdzCisgICAgICAgIHNvdXJjZSBvbiBRTUwgdG8gc2hvdyB0aGUgaWNv
bi4KKworICAgICAgICBJY29uRGF0YWJhc2Ugc3RvcmFnZSBsaWVzIG9uIFVJUHJvY2VzcyBhbmQg
dGhlIHN5bmNocm9ub3VzIGNhbGwgZm9yIHRoZSBpY29uCisgICAgICAgIGltYWdlIHRoYXQgaGFw
cGVucyBvbiBXZWJJY29uRGF0YWJhc2Ugd29uJ3QgbmVlZCB0byBzZW5kIGFueSBtZXNzYWdlIHRv
IFdlYlByb2Nlc3MuCisgICAgICAgIFRoZSBwYXJ0IG9mIEljb25EYXRhYmFzZSBvbiBXZWJQcm9j
ZXNzIGhhbmRsZXMgdGhlIGRvd25sb2FkIG9mIHRoZSByZXNvdXJjZSB3aGVuZXZlcgorICAgICAg
ICBpdCBpcyBuZWVkZWQuIFRoZSBjb250ZW50IGRvd25sb2FkZWQgaXMgc2VudCB0aHJvdWdoIElQ
QyB0byB0aGUgYWN0dWFsIGRhdGFiYXNlLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L3F0L1dLVmlldy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5j
cHA6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6c2V0UGFnZVByb3h5KToKKyAgICAg
ICAgKFFRdWlja1dlYlZpZXc6OmZhdkljb25Tb3VyY2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvcXQvcXF1aWNrd2Vidmlldy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXdlYmZh
dmljb25pbWFnZXByb3ZpZGVyX3AuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvQ2xpZW50SW1wbC5oLgorICAgICAgICAoUVdlYkZhdkljb25JbWFnZVByb3ZpZGVy
OjpRV2ViRmF2SWNvbkltYWdlUHJvdmlkZXIpOgorICAgICAgICAoUVdlYkZhdkljb25JbWFnZVBy
b3ZpZGVyOjp+UVdlYkZhdkljb25JbWFnZVByb3ZpZGVyKToKKyAgICAgICAgKFFXZWJGYXZJY29u
SW1hZ2VQcm92aWRlcjo6cmVxdWVzdFBpeG1hcCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9x
dC9xd2ViZmF2aWNvbmltYWdlcHJvdmlkZXJfcC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvcXQvQ2xpZW50SW1wbC5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQv
dGVzdHMvcW1sdGVzdHMvV2ViVmlldy90c3RfZmF2SWNvbkxvYWQucW1sOiBBZGRlZC4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL2NvbW1vbi9iYXNpYy5wbmc6IEFk
ZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvY29tbW9uL2Zh
dmljb24uaHRtbDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0
ZXN0cy9xbWx0ZXN0cy5wcm86CisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvbnRleHQuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvcXQvQ2xpZW50SW1wbC5jcHA6CisgICAgICAgICh0b1F0V2ViSWNv
bkRhdGFiYXNlKToKKyAgICAgICAgKHF0X3drX2ljb25EYXRhYmFzZURpZENoYW5nZUljb25Gb3JQ
YWdlVVJMKToKKyAgICAgICAgKHNldHVwSWNvbkRhdGFiYXNlQ2xpZW50KToKKyAgICAgICAgKiBV
SVByb2Nlc3MvcXQvQ2xpZW50SW1wbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFdlYklj
b25EYXRhYmFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoUXRXZWJJY29uRGF0YWJhc2U6OmluaXQp
OgorICAgICAgICAoUXRXZWJJY29uRGF0YWJhc2U6OmRlc3Ryb3kpOgorICAgICAgICAoUXRXZWJJ
Y29uRGF0YWJhc2U6OlF0V2ViSWNvbkRhdGFiYXNlKToKKyAgICAgICAgKFF0V2ViSWNvbkRhdGFi
YXNlOjp+UXRXZWJJY29uRGF0YWJhc2UpOgorICAgICAgICAoUXRXZWJJY29uRGF0YWJhc2U6Omlj
b25JbWFnZUZvclBhZ2VVUkwpOgorICAgICAgICAoUXRXZWJJY29uRGF0YWJhc2U6OnJlcXVlc3RJ
Y29uSWRGb3JQYWdlVVJMKToKKyAgICAgICAgKFF0V2ViSWNvbkRhdGFiYXNlOjppY29uSW1hZ2VG
b3JJY29uSWQpOgorICAgICAgICAoUXRXZWJJY29uRGF0YWJhc2U6OnJldGFpbkljb25JZCk6Cisg
ICAgICAgIChRdFdlYkljb25EYXRhYmFzZTo6cmVsZWFzZUljb25JZCk6CisgICAgICAgIChRdFdl
Ykljb25EYXRhYmFzZTo6Z2V0TmV4dEF2YWlsYWJsZUljb25JZCk6CisgICAgICAgICogVUlQcm9j
ZXNzL3F0L1F0V2ViSWNvbkRhdGFiYXNlLmg6IEFkZGVkLgorICAgICAgICAoUXRXZWJJY29uRGF0
YWJhc2U6Omluc3RhbmNlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlUHJveHku
Y3BwOgorICAgICAgICAoUXRXZWJQYWdlUHJveHk6OmRlZmF1bHRXS0NvbnRleHQpOgorICAgICAg
ICAoUXRXZWJQYWdlUHJveHk6On5RdFdlYlBhZ2VQcm94eSk6CisgICAgICAgIChRdFdlYlBhZ2VQ
cm94eTo6cGFnZVJlZik6CisgICAgICAgIChRdFdlYlBhZ2VQcm94eTo6cmVxdWVzdEljb25JZEZv
clBhZ2VVUkwpOgorICAgICAgICAoUXRXZWJQYWdlUHJveHk6OmZhdkljb25Tb3VyY2UpOgorICAg
ICAgICAoUXRXZWJQYWdlUHJveHk6OnVwZGF0ZUZhdkljb25JZCk6CisgICAgICAgIChRdFdlYlBh
Z2VQcm94eTo6ZGlkUmVjZWl2ZUljb25JZEZvclBhZ2VVUkwpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9xdC9RdFdlYlBhZ2VQcm94eS5oOgorCiAyMDExLTExLTE2ICBWaWF0Y2hlc2xhdiBPc3RhcGVu
a28gIDxvc3RhcGVua28udmlhdGNoZXNsYXZAbm9raWEuY29tPgogCiAgICAgICAgIFtRdF0gW1dL
Ml0gQ3Jhc2ggaW4gQ29ubmVjdGlvbjo6cmVhZHlSZWFkSGFuZGxlcigpIG9uIHNvY2tldCBlcnJv
cgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJLaXQy
L1RhcmdldC5wcmkKaW5kZXggZDM3OGM1NC4uMmNjYWQyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCkBAIC0yNTEs
NiArMjUxLDcgQEAgSEVBREVSUyArPSBcCiAgICAgVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2
aWV3LmggXAogICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmggXAogICAgIFVJ
UHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld3ByaXZhdGVleHRlbnNpb25fcC5oIFwKKyAgICBV
SVByb2Nlc3MvQVBJL3F0L3F3ZWJmYXZpY29uaW1hZ2Vwcm92aWRlcl9wLmggXAogICAgIFVJUHJv
Y2Vzcy9BdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5LmggXAogICAg
IFVJUHJvY2Vzcy9BdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXIu
aCBcCiAgICAgVUlQcm9jZXNzL0F1dGhlbnRpY2F0aW9uL1dlYkNyZWRlbnRpYWwuaCBcCkBAIC0z
MjEsNiArMzIyLDcgQEAgSEVBREVSUyArPSBcCiAgICAgVUlQcm9jZXNzL3F0L1F0V2ViRXJyb3Iu
aCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0RG93bmxvYWRNYW5hZ2VyLmggXAogICAgIFVJUHJvY2Vz
cy9xdC9RdFdlYlBhZ2VQcm94eS5oIFwKKyAgICBVSVByb2Nlc3MvcXQvUXRXZWJJY29uRGF0YWJh
c2UuaCBcCiAgICAgVUlQcm9jZXNzL3F0L3F3a2hpc3RvcnkuaCBcCiAgICAgVUlQcm9jZXNzL3F0
L3F3a2hpc3RvcnlfcC5oIFwKICAgICBVSVByb2Nlc3MvcXQvUXRTR1VwZGF0ZVF1ZXVlLmggXApA
QCAtNTU0LDYgKzU1Niw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXF1
aWNrd2Vidmlldy5jcHAgXAogICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXdlYnByZWZlcmVuY2VzLmNw
cCBcCiAgICAgVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3cHJpdmF0ZWV4dGVuc2lvbi5j
cHAgXAorICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXdlYmZhdmljb25pbWFnZXByb3ZpZGVyX3AuY3Bw
IFwKICAgICBVSVByb2Nlc3MvQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQ
cm94eS5jcHAgXAogICAgIFVJUHJvY2Vzcy9BdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdGlvbkRl
Y2lzaW9uTGlzdGVuZXIuY3BwIFwKICAgICBVSVByb2Nlc3MvQXV0aGVudGljYXRpb24vV2ViQ3Jl
ZGVudGlhbC5jcHAgXApAQCAtNjI4LDYgKzYzMSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFVJUHJv
Y2Vzcy9xdC9RdFdlYkVycm9yLmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0RG93bmxvYWRNYW5h
Z2VyLmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVByb3h5LmNwcCBcCisgICAgVUlQ
cm9jZXNzL3F0L1F0V2ViSWNvbkRhdGFiYXNlLmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L3F3a2hp
c3RvcnkuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvUXRTR1VwZGF0ZVF1ZXVlLmNwcCBcCiAgICAg
VUlQcm9jZXNzL3F0L1F0U0dUaWxlTm9kZS5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9xdC9XS1ZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvV0tWaWV3LmgKaW5kZXggOGMwMTEyMC4uNDliNmNmMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9XS1ZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL3F0L1dLVmlldy5oCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8V2Vi
S2l0Mi9xcXVpY2t3ZWJwYWdlLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9xcXVpY2t3ZWJ2aWV3Lmg+
CiAjaW5jbHVkZSA8V2ViS2l0Mi9xd2ViZG93bmxvYWRpdGVtLmg+CisjaW5jbHVkZSA8V2ViS2l0
Mi9xd2ViZmF2aWNvbmltYWdlcHJvdmlkZXJfcC5oPgogI2luY2x1ZGUgPFdlYktpdDIvcXdlYnBy
ZWZlcmVuY2VzLmg+CiAKICNlbmRpZiAvKiBXS1ZpZXdfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAKaW5kZXggNmQwYTZjNi4uZGQz
MTIzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3
ZWJ2aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dl
YnZpZXcuY3BwCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAicXF1aWNrd2Vidmlldy5oIgog
CiAjaW5jbHVkZSAiUXRWaWV3SW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiUXRXZWJJY29uRGF0YWJh
c2UuaCIKICNpbmNsdWRlICJRdFdlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIlV0aWxzUXQuaCIK
ICNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKQEAgLTM1Myw2ICszNTQsMTEgQEAgdm9pZCBRUXVp
Y2tXZWJWaWV3UHJpdmF0ZTo6c2V0UGFnZVByb3h5KFF0V2ViUGFnZVByb3h5KiBwYWdlUHJveHkp
CiAgICAgUV9RKFFRdWlja1dlYlZpZXcpOwogICAgIHRoaXMtPnBhZ2VQcm94eS5yZXNldChwYWdl
UHJveHkpOwogICAgIFFPYmplY3Q6OmNvbm5lY3QocGFnZVByb3h5LCBTSUdOQUwocmVjZWl2ZWRN
ZXNzYWdlRnJvbU5hdmlnYXRvclF0T2JqZWN0KFFWYXJpYW50TWFwKSksIHEsIFNJR05BTChtZXNz
YWdlUmVjZWl2ZWQoUVZhcmlhbnRNYXApKSk7CisgICAgUU9iamVjdDo6Y29ubmVjdChwYWdlUHJv
eHksIFNJR05BTChkaWRDaGFuZ2VGYXZJY29uU291cmNlKFFVcmwpKSwgcSwgU0lHTkFMKGZhdklj
b25Tb3VyY2VDaGFuZ2VkKFFVcmwpKSk7CisKKyAgICBRdFdlYkljb25EYXRhYmFzZSogaWNvbkRh
dGFiYXNlID0gUXRXZWJJY29uRGF0YWJhc2U6Omluc3RhbmNlKCk7CisgICAgUU9iamVjdDo6Y29u
bmVjdChxLCBTSUdOQUwodXJsQ2hhbmdlZChRVXJsKSksIGljb25EYXRhYmFzZSwgU0xPVChyZXF1
ZXN0SWNvbklkRm9yUGFnZVVSTChRVXJsKSkpOworICAgIFFPYmplY3Q6OmNvbm5lY3QoaWNvbkRh
dGFiYXNlLCBTSUdOQUwoaWNvbklkUmVhZHlGb3JQYWdlVVJMKGludCwgUVVybCkpLCBwYWdlUHJv
eHksIFNMT1QoZGlkUmVjZWl2ZUljb25JZEZvclBhZ2VVUkwoaW50LCBRVXJsKSkpOwogfQogCiBR
UXVpY2tXZWJWaWV3OjpRUXVpY2tXZWJWaWV3KFFRdWlja0l0ZW0qIHBhcmVudCkKQEAgLTQyMCw2
ICs0MjYsMTIgQEAgdm9pZCBRUXVpY2tXZWJWaWV3OjpyZWxvYWQoKQogICAgIGQtPnBhZ2VQcm94
eS0+cmVsb2FkKCk7CiB9CiAKK1FVcmwgUVF1aWNrV2ViVmlldzo6ZmF2SWNvblNvdXJjZSgpIGNv
bnN0Cit7CisgICAgUV9EKGNvbnN0IFFRdWlja1dlYlZpZXcpOworICAgIHJldHVybiBkLT5wYWdl
UHJveHktPmZhdkljb25Tb3VyY2UoKTsKK30KKwogUVVybCBRUXVpY2tXZWJWaWV3Ojp1cmwoKSBj
b25zdAogewogICAgIFFfRChjb25zdCBRUXVpY2tXZWJWaWV3KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmgKaW5kZXggZjhiYTgxNy4uMjJjNmJm
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2
aWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3
LmgKQEAgLTU1LDYgKzU1LDcgQEAgY2xhc3MgUVdFQktJVF9FWFBPUlQgUVF1aWNrV2ViVmlldyA6
IHB1YmxpYyBRUXVpY2tJdGVtIHsKICAgICBRX1BST1BFUlRZKGJvb2wgY2FuR29Gb3J3YXJkIFJF
QUQgY2FuR29Gb3J3YXJkIE5PVElGWSBuYXZpZ2F0aW9uU3RhdGVDaGFuZ2VkIEZJTkFMKQogICAg
IFFfUFJPUEVSVFkoYm9vbCBjYW5TdG9wIFJFQUQgY2FuU3RvcCBOT1RJRlkgbmF2aWdhdGlvblN0
YXRlQ2hhbmdlZCBGSU5BTCkKICAgICBRX1BST1BFUlRZKGJvb2wgY2FuUmVsb2FkIFJFQUQgY2Fu
UmVsb2FkIE5PVElGWSBuYXZpZ2F0aW9uU3RhdGVDaGFuZ2VkIEZJTkFMKQorICAgIFFfUFJPUEVS
VFkoUVVybCBmYXZJY29uU291cmNlIFJFQUQgZmF2SWNvblNvdXJjZSBOT1RJRlkgZmF2SWNvblNv
dXJjZUNoYW5nZWQgRklOQUwpCiAgICAgUV9QUk9QRVJUWShRV2ViUHJlZmVyZW5jZXMqIHByZWZl
cmVuY2VzIFJFQUQgcHJlZmVyZW5jZXMgQ09OU1RBTlQgRklOQUwpCiAgICAgUV9QUk9QRVJUWShR
UXVpY2tXZWJQYWdlKiBwYWdlIFJFQUQgcGFnZSBDT05TVEFOVCBGSU5BTCkKICAgICBRX0VOVU1T
KE5hdmlnYXRpb25Qb2xpY3kpCkBAIC03OCw2ICs3OSw3IEBAIHB1YmxpYzoKICAgICBRVXJsIHVy
bCgpIGNvbnN0OwogICAgIFFTdHJpbmcgdGl0bGUoKSBjb25zdDsKICAgICBpbnQgbG9hZFByb2dy
ZXNzKCkgY29uc3Q7CisgICAgUVVybCBmYXZJY29uU291cmNlKCkgY29uc3Q7CiAKICAgICBib29s
IGNhbkdvQmFjaygpIGNvbnN0OwogICAgIGJvb2wgY2FuR29Gb3J3YXJkKCkgY29uc3Q7CkBAIC0x
MDksNiArMTExLDcgQEAgUV9TSUdOQUxTOgogICAgIHZvaWQgbGlua0hvdmVyZWQoY29uc3QgUVVy
bCYgdXJsLCBjb25zdCBRU3RyaW5nJiB0aXRsZSk7CiAgICAgdm9pZCB2aWV3TW9kZUNoYW5nZWQo
KTsKICAgICB2b2lkIG5hdmlnYXRpb25TdGF0ZUNoYW5nZWQoKTsKKyAgICB2b2lkIGZhdkljb25T
b3VyY2VDaGFuZ2VkKGNvbnN0IFFVcmwmIHVybCk7CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFs
IHZvaWQgZ2VvbWV0cnlDaGFuZ2VkKGNvbnN0IFFSZWN0RiYsIGNvbnN0IFFSZWN0RiYpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2ViZmF2aWNvbmltYWdl
cHJvdmlkZXJfcC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJmYXZp
Y29uaW1hZ2Vwcm92aWRlcl9wLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5hMWI3NjY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9xdC9xd2ViZmF2aWNvbmltYWdlcHJvdmlkZXJfcC5jcHAKQEAgLTAsMCArMSw0OSBAQAorLyoK
KyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInF3ZWJmYXZp
Y29uaW1hZ2Vwcm92aWRlcl9wLmgiCisKKyNpbmNsdWRlICJRdFdlYkljb25EYXRhYmFzZS5oIgor
I2luY2x1ZGUgPFF0R3VpL1FDb2xvcj4KKworUVdlYkZhdkljb25JbWFnZVByb3ZpZGVyOjpRV2Vi
RmF2SWNvbkltYWdlUHJvdmlkZXIoKQorICAgIDogUURlY2xhcmF0aXZlSW1hZ2VQcm92aWRlcihR
RGVjbGFyYXRpdmVJbWFnZVByb3ZpZGVyOjpQaXhtYXApCisgICAgLCBtX2RlZmF1bHRGYXZJY29u
KDEsIDEpCit7CisgICAgbV9kZWZhdWx0RmF2SWNvbi5maWxsKFF0Ojp0cmFuc3BhcmVudCk7Cit9
CisKK1FXZWJGYXZJY29uSW1hZ2VQcm92aWRlcjo6flFXZWJGYXZJY29uSW1hZ2VQcm92aWRlcigp
Cit7CisKK30KKworUVBpeG1hcCBRV2ViRmF2SWNvbkltYWdlUHJvdmlkZXI6OnJlcXVlc3RQaXht
YXAoY29uc3QgUVN0cmluZyYgaWQsIFFTaXplKiBzaXplLCBjb25zdCBRU2l6ZSYpCit7CisgICAg
UVBpeG1hcCBpY29uOworICAgIFF0V2ViSWNvbkRhdGFiYXNlKiBpY29uRGF0YWJhc2UgPSBRdFdl
Ykljb25EYXRhYmFzZTo6aW5zdGFuY2UoKTsKKyAgICBpZiAoKGljb24gPSBpY29uRGF0YWJhc2Ut
Pmljb25JbWFnZUZvckljb25JZChpZC50b0ludCgpKSkuaXNOdWxsKCkpCisgICAgICAgIGljb24g
PSBtX2RlZmF1bHRGYXZJY29uOworCisgICAgaWYgKHNpemUpCisgICAgICAgICpzaXplID0gaWNv
bi5zaXplKCk7CisKKyAgICByZXR1cm4gaWNvbjsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdlYmZhdmljb25pbWFnZXByb3ZpZGVyX3AuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdlYmZhdmljb25pbWFnZXByb3ZpZGVyX3AuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDYwYzhhCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2ViZmF2aWNvbmltYWdlcHJv
dmlkZXJfcC5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYg
cXdlYmZhdmljb25pbWFnZXByb3ZpZGVyX3BfaAorI2RlZmluZSBxd2ViZmF2aWNvbmltYWdlcHJv
dmlkZXJfcF9oCisKKyNpbmNsdWRlICJxd2Via2l0Z2xvYmFsLmgiCisjaW5jbHVkZSA8UXREZWNs
YXJhdGl2ZS9RRGVjbGFyYXRpdmVJbWFnZVByb3ZpZGVyPgorI2luY2x1ZGUgPFF0R3VpL1FQaXht
YXA+CisKK2NsYXNzIFFXRUJLSVRfRVhQT1JUIFFXZWJGYXZJY29uSW1hZ2VQcm92aWRlciA6IHB1
YmxpYyBRRGVjbGFyYXRpdmVJbWFnZVByb3ZpZGVyIHsKK3B1YmxpYzoKKyAgICBRV2ViRmF2SWNv
bkltYWdlUHJvdmlkZXIoKTsKKyAgICB+UVdlYkZhdkljb25JbWFnZVByb3ZpZGVyKCk7CisgICAg
UVBpeG1hcCByZXF1ZXN0UGl4bWFwKGNvbnN0IFFTdHJpbmcmIGlkLCBRU2l6ZSogc2l6ZSwgY29u
c3QgUVNpemUmIHJlcXVlc3RlZFNpemUpOworCitwcml2YXRlOgorICAgIFFQaXhtYXAgbV9kZWZh
dWx0RmF2SWNvbjsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9XZWJWaWV3L3RzdF9mYXZJY29uTG9hZC5xbWwg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL1dlYlZpZXcv
dHN0X2Zhdkljb25Mb2FkLnFtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5m
NGVhNTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC90ZXN0cy9xbWx0ZXN0cy9XZWJWaWV3L3RzdF9mYXZJY29uTG9hZC5xbWwKQEAgLTAsMCArMSwz
NCBAQAoraW1wb3J0IFF0UXVpY2sgMi4wCitpbXBvcnQgUXRUZXN0IDEuMAoraW1wb3J0IFF0V2Vi
S2l0IDMuMAorCitXZWJWaWV3IHsKKyAgICBpZDogd2ViVmlldworCisgICAgcHJvcGVydHkgdmFy
aWFudCB0ZXN0VXJsCisKKyAgICBTaWduYWxTcHkgeworICAgICAgICBpZDogc3B5CisgICAgICAg
IHRhcmdldDogd2ViVmlldworICAgICAgICBzaWduYWxOYW1lOiAiZmF2SWNvblNvdXJjZUNoYW5n
ZWQiCisgICAgfQorCisgICAgSW1hZ2UgeworICAgICAgICBpZDogZmF2aWNvbgorICAgICAgICBz
b3VyY2U6IHdlYlZpZXcuZmF2SWNvblNvdXJjZQorICAgIH0KKworICAgIFRlc3RDYXNlIHsKKyAg
ICAgICAgaWQ6IHRlc3QKKyAgICAgICAgbmFtZTogIldlYlZpZXdMb2FkRmF2SWNvbiIKKyAgICAg
ICAgZnVuY3Rpb24gdGVzdF9mYXZJY29uTG9hZCgpIHsKKyAgICAgICAgICAgIGNvbXBhcmUoc3B5
LmNvdW50LCAwKQorICAgICAgICAgICAgdGVzdFVybCA9IFF0LnJlc29sdmVkVXJsKCIuLi9jb21t
b24vZmF2aWNvbi5odG1sIikKKyAgICAgICAgICAgIHdlYlZpZXcubG9hZCh0ZXN0VXJsKQorICAg
ICAgICAgICAgc3B5LndhaXQoKQorICAgICAgICAgICAgY29tcGFyZShzcHkuY291bnQsIDEpCisg
ICAgICAgICAgICBjb21wYXJlKGZhdmljb24ucGFpbnRlZFdpZHRoLCA0OCkKKyAgICAgICAgICAg
IGNvbXBhcmUoZmF2aWNvbi5wYWludGVkSGVpZ2h0LCA0OCkKKyAgICAgICAgfQorICAgIH0KK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVz
dHMvY29tbW9uL2Jhc2ljLnBuZyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVz
dHMvcW1sdGVzdHMvY29tbW9uL2Jhc2ljLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNTcxN2NjYTU4Zjk3Yzc5
YzNkMzI0ZTgzNTdiNGM0ZjdiMWUxNDY0CkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAzOTYxCnpj
bVYtPDR+Rm9HUCk8aDszS3xMazAwMGUxTkpMVHEwMDF4bTAwMXh1MV5AczZSfDVIbTAwMDA2Vm9P
SXYwUjh+fQp6MFJIUDMpUGV2MjAxMHFOUyN0bVkwN3c3OzA3dzh2JCFrNlUwMDBTZ2E2eEFQMDAx
eG0wMDF4bSZoQ3M/MDAwaTYKek5rbDxaWHhgUERZbWdqUWI7cDFBLXRNMEYmZ15AJl4yKEFlMj87
JW4zOV5GYElNeyZBQlJJdkk2ZWZ2Tkt0YlkpCnpUP1Vob1BAeTBwdTJlcWNWRkgxfE53N29sITNC
bUdORmNfYnZVeGE7RUwjR30obl8rdFRKMzd6eVIkUlh1WH1Hawp6YmtGU1VMKUhyWGc7UkJeZHdQ
MCR7e01VYT1pSis7VFVjeFBidkViNHh7d2U7RzxSMlErcyhGYj9UYXZhOyNhdncKejgpJXNWbVRt
aigtVVF1cmxYYFJDezwzNiNERlB8KmNFQz40dno7ND9xRmZudHZia09wI2BTMSVXLV4+T0pLRn1A
CnowMit1Plp8KW53VHE9PUVDWGoreHNrQH5lRldjKnVkZnozej58M29COW0/Xjklb0wxcGlifV9V
SERMYE1gQC1yLQp6VGNlTkloNEY3Uk12Zm5kWVBBSSpUO1dZWj5uNV5wMCZTITJQXnNqNXcocS1C
eTRlcVBiWl91X0hlRlRqPS1EQz4KejRuZD58OytQPGMzQnM2MG5DdiUjMjx5K18pSjdaMTl9Nyhz
b0RnJjRfZUFzS0MrZD9rd0lHPFUwZ2FTTWwjKHpuCnozVnteNzFsK0RgWmdgKVlEU2MrIU9KNzt1
eEAmKDk9QFB7O2V4d09Qb2RBeV97M3lsYFdCZjNwNWt+a3lAKV5Lagp6a2lqJiRnKEN8eDR0fCFj
KSRhfUpHaVBWVmo/TWFXYkJrPzY7KXt7RVhjY05vQ2IjWFh7Jk40Tz8tWlFlJlQ9e0gKemNJQXFj
M0kmNExmSm4yYFQ4eCF3Pik7clJxWVJFeElNVSFLZ0huUD44PnxLR158MDllVE9FIStkWlNneF9C
byNYCnpyPWpkQzl+cGM4N1paIXFYWGIkIzswcXoqN219Mi05YE5ObypJdHpeX0M0SHtiTmY1YCZr
Rjc1JD5vYj1UbkJfawp6VT12VXB2fTRpNnBwYEBgTVhVXzJCWjsmYERNX1QwMGt6ZzVqZ0o+cld2
JW50TmBDSXA5V31MWnJMZ2g2PkVFan4Kej5XeCVWYGpRQVYhVDA+ZT51JD1IJGAxQHd2WHhAYlgp
RzRaWmd5VU05YnYzbkJkQElgKSlMbndwcW5HRWx0anR8Cnp5cGpAJEsmUjZ8YXIqITBEanVYVUds
O0opRTdkZEl4M0dEfjVIcTc2TzlfWkpKYSNRUCRybEtLRWJQOF5TR0wmawp6el4yfH1yRUJta2p3
X01FcD9gMkk4Q1QmczNiKk0+O2k/Ml5BeyZ7dzVJOW56TUN6KlRGOW1wb2kxTlQweD1SUGgKekVG
M1QzUlE0NzN6VUVKVzA/K3t6ZmheeiVBPl9JVTJxOSEpKlJJfTxhX0BJSF4lZzdUNFFGczFmI1dF
d2NJZlRqCnppMGUybDtFdDN5Tn18JHpCP1lvTUA9X3dESyY4R2tfZClEKlY2X1hAMmVuQXwmPFZR
cCRGZjt6LWpVel9AfCNsPAp6ckY1R0NseFYtZVNfR1FYc2RSN3E9MEdKayZeaD0jJThAUGlhJlR0
Jjg1fHsoNXFBPmNzdExSV0hVVGNBSyNCeW8KejVYdHZWaWAqYHZNdUBkQlFifmptPFRfYGA8bSNA
ZllgOFBLO3F0OTFfIyUpOCs/QU51aWghKEt7bnxHY0pAMmFpCnpPPjtzeVlINCZHTUo2aTw/Qmpn
dkttTH1aaGFTVGIlWWpRTlRZI21JWlF4bVF6KyRQM0pQWHQxUig+UztWIyR9TQp6dXVmT20tVDBD
fU9GPFY+VW5NMkUjXl5pNmFgXylOXzdeZ2xvSn1zU0IjeDd+UWlARDUhdEgjVGxmKEQoZ0t2SWAK
ekkwX1M+MiY0ZG5ORVNydGVnWnJ0MCQyK3s3IXM9LVF+QiN6WT80VDI9ajF8NEBvOHwlbntyIVRg
aWZMT2NfNm5rCnozTShUWmR0VWo1LXxPcT45bjYtO2xKS2lVJnh3US1qdzJHdUQxbGUzKEolKSVj
Sk4xdHduYj5XTlgzZHthVUExXgp6MG5NQD1kITFsYWt+M3twdEUyWmNVTmw+QmR4cXt4YXBxRUFt
SjJOYyZEbDFXP1lOX3VpIyNfSXJMdCZObWMqcX0KejJxX1JVKFg1Kl9PcFR2TiR9NlBlU1pOayhF
cSlqaCNfX1VtXjdXSCtiayZ3M3B3aXJOVmhZOHhmWStWZnhjU08tCno8ZUxQWENpZUNTaTJSUDFf
WWVlfF41eVpDWmJ8aG05ZmZqTFFVPE4wS0pWZ0pHeCY9Y3MmZ3wwZWpTQG1YeFIzKAp6dm43bVU+
T3BgdWRLcEMtRXotJFJ2TCN3MEZQanhpTndURm1UKWtMdWROI2QyI3A8TzVUdEVzVE1FZ1cwYXsy
UHgKekRnfkskYXY9IVcoa3chdEx7ZD9MKmliIXA3NWxEeEJjVjB+Vk45bEA2V2xDZTctT3UoVDck
OE1EMmwyMTBidnhTCnokRDV3flZifDxXKnw+ODhEUF5pUG5Ne2g+Qi1LaDlHVHVCPCs8UFBORkRk
WTQ1bS1qUkReJVdCcztxUzxtSGVyLQp6N1JSKzFUY3klQjA0a0YlKzlMY1lMVGlJSTJHTXdvT240
cmxXQWN0QiU0I0NsNWEkZkIqMkxPP3dSQ2l4ckNmMG0Kek5kbUAjKEdzSC0rUExXMDVPLUR5ISVU
UEElZUxSe05MXlFzNDg1JFomck9EM2B9WH4ocExFKndGQy1ndG5HVVItCnpPSnZYLUYjfXA/dE5+
KnpyNDEpfV54PVBKfDZCZXIxKjhjaGpVUis4SGhsVXNrTW88YW8jZik/MF9BbV9YRlRZOQp6U015
ViZXO3lXaW9EViMrRUNRS35tcVIjTTMmdlc2MGNrQTg3X2JzNigobyFuJV4jIWdNPk44YVNgZWht
PHRTT0sKekRhaHBISSlNRmhyblNMdSMzZGxOTTQrZH5pP2s2WnBDMlcrYUV4MyZPRDNEYWJEYm80
ck5tZkc5N2x2PCNMUF48Cno8biVQYyVNZ1p8Rml0JHU4Z3EkdnNhamk8NXx7UnkqbXs2ITVoITxF
KGNAKGIySUNYITcoZWhhSFlTUHtQTmI2Mwp6Q0szczBaTG4mWj40fFlWYFpmfjhGPH40TiNoTkpB
VDxqKChqeDNMVGR5PTMzPypnWmZFXl97P1BjRSsqK0xtWVEKem8rQTYtKVhVSjt7Q2FxX1JpV1Zn
VDtOfFdKQnlkRzcmc2AkcHRXZiZ6TEdWSlhqS1ZvTEsrUHBGR3wyQ3d+fFJOCnp5Ynl1c2pAOV9i
S1J3Uio1cjVoN1N+Y2RfITNCO1RUO016Ums4I3NgMjYqb3NtdFF6Q0h0QmVAZ2dTcmJPZTJtJAp6
eVdgZEdMaDBBaW5BdUhycytaOFcjRjApc1BGJSt0dHFveVhmcjlrREglIVN+aGA+VyU5XzVwXzkk
cDIwcjVSKVMKej9wTWRTYHlHZHY4VkBjb19RfVJze3pEVW1rIUo1M0s4VFduYHJJXiFBTl5OS3ta
RkJUMHpyS1RMWXlhQzl3N2BtCnprQCpzU2x0P0Z4YlErMHglXlchVDxOXjxWe2B1QSVBY1NEK28r
NE41RHphcn5mIWNoYD43ekJDez5kIVcqPGBqSgp6ZjhPV3NLWUU8TWRTSzdtRiN6aTxKMFFmbHgl
cnQ1YEM9dVIrNiFmTi1TfE5jfElnPn4zZDhobGVpZkMwRWopa3QKejBGfVdgJFExQntoKUFhaW9P
VUV1TWomVnk/KXs3N0UlMnBJbSQkcnNra2BMK1V8RkAmK09qd29eTSRgMD05ITwmCnowZFZeMEJM
RGVzcXh8O29aKE5mXmQjJHJedT13RUF4bzJaUE94aHN6QVZNcFRFQkY1YWVzdjR1QyFmVDQxcVFG
YQp6bmEoVHMoRm1mbl5OX1NxezN3YVFOJjtYMTtzfHEtNWRjYUYtaDJCZC10enZ6VyNHP2BffXV4
e2dGTzR4MHcyRzMKekMpQFh5bVZXPUd2KHklcnVjM3JVQXxScEZxY3JqUyM2IzJQZWxoUWQ1JW5O
VU5yWSU4JWpOcSZLPEQ9QmxWZlNDCnpyMElUfTJrQ082LUh0cGwtYGR9TVU0e0tgP3BebCVgNE9L
Xy1GQWZPQHNOOHphZXwrSWV+TGYpPn4+cilBc0c2Rwp6cisrLVJBX3MoNzZAbHZVQk9fNnh4PV5k
dlhhb19CQWZ6NWRHPWhsR059T19rMHpNX3oxZkxLfGAje2xoMEBsRmoKej18PTFHd1hmPyZJYnMj
fmdfJEhtKjIwT1c3d09zSHYyamJUYj44c2QjUzJIRUVoKTUje0k1KXA5UCU0c29QdGtDCnopTFVj
e0BDJWRBUUpzOF9oOTk8T1ZMd1U7d00qI1NuRmRpe1RKcVZ0cip1S15MY2s0Zz4qTCtHWnZ0VFJq
emE2KQp6az5VRHMwJT9jYVN4STItKnBZdTBQVWJfaHZWQX19LXFNT1JKOzdLQEYjYVU2YFYqOUBR
SCFAPkhyen5YQTxgekQKeiRkKWVaY31ydHRFcUVFUkNpdiN9VDNmdSNJK2hfVEJoYnRQN1JQSjRL
N1VWYl5vZCV+bWR5MWFXTzM+Z3dHJj9fCnpBT0RkNDRQKjU3U0x5RlFqMkx8dy0+KHpKdDl3dHE4
IzgzezNQfGV2dnhsbjgmcVMrNnpHO3RzVn1rcXM8YGUqQAp6akBEWW9TSV5BcDFpUnY+MGl1T3g5
PXFReGpHVjdtI31sbkRvRl9XPEg0MyF7ODUlZjlVd0BUQ0F3IXslcHxleDQKemRGVTcmR3lqYzw4
PzByNm8wcWl3Xzs7ciRSYWBjdWZUUkBjZXsoTmdlT35MRk07PClTPWw9V3pxbzxaK2JMRm5XCnp2
VExSfXUkKHt8MXF9cXopWERlQXZCemVEYGFFamxkLVFjM3JuNzY3WSp2eFV5NSNhMTNkSm4+TFdX
WEZhPmVGaAp6JUpiaHgqa34xalVEcXJ2blYpYHFtTTAjVz1JKG9VdmlxN2NIQHZObitkZ3B4cFp4
T2ZXaDgkNVVzTEVmKFBFK0cKenUoaHFNdyVifV9HZUI1QmJeTiRsODJAbH4+Yz99STlDMkpnM2Vt
ZHBjM25qLUA4UDdrblhVX2l7bG56dmY0MXNeCnpAQkh1KGVTP3tGa2w+NC04cz4pJlA0TXkwP2N7
eFRaTnwkO2BVVyQ2XjJAdWFebXdhJmY3NSNoPSlXd3hDVl5HRwp6UUVST2dMVERnWkpiTGh2O0A7
eGxrPztBfnhQTl9selY7aiZkUGgtP0NKYVRvSG5QTlZ2aFkoWCFpXl9NK0x9d0kKejlLbEVhZEs7
aGx6fFlhS0NHWlhSZWZBV09KYjBkNipMMU1gc3QpRitMIU4hQU5ARm96MSMpJlc8VStQKWJKdHBI
CnooemJTRUB0RmYoRCghZ3Jna3Z8e1F8LVE/JWJ6KC1lcmxNQDJGR3cqIXw8dWk3KEJ9UGI3Wl9w
Vm9AWSVDQDs1ZAp6ZHJRM2drMm1xKTdlKXlFcV56RGZVZ09PMThzQitmajJFJjt6Y0UyM3RHTS19
bzdXfHdyZkhJZzRFNUA8Z1d1QlUKemhKUUNaXzFJVj5KRUdiMFROeXQwM1FuRkZwcWtzcWVBbXM0
QHA/dypVcSF1cS0zMmZCPTM1OCgpUDF7YCklVWU1CnpuXiM8YU9KNkd8OTlMNFR4YSpJPU4rfCk8
TXhIKDclfW1ecysxantNRUZTK0l6cHwmP0N8QG5EYTFsVjE5VXtzTwp6YVdUOTZCP1VoSGx8QjZN
cCRVIzNzeHRhcWdWfjlZWStsa2NrWVErUm9+dktvJHhIV0BuSCZxYT1PZSNofENAVGIKejwraX5+
QmhXXm9ETX1tR1dfOUBWazNRe21fVEhEPCh6c2k9YEJ6MnhqaEBhQTZeKyprSHRHMD9pYCpTNUNB
amhKCnp7b01IV2VnTnYjN155XlN6R3p6Q1YyMDByYnVWNjRFXjcqfW80XlZaJjFicWdvfUctVXZw
PX1ZJkYzckw7MSNjTgp6JF4qOXU8P2dhN2kqQG9zPlVzdyZHeC1IOVUlRGBpbTg0ZH1UaTI4Tkhh
UnMoTF9pU0w+d1l3UjxYZHAkZHd9UFoKenlTa2xYY185Q34oeDsodGBGYVdiRHpAJWQ0VnNnajVU
WkhSI1UlT0JaMS1qMmBJJX13S1Fyb0FVb3cyKStxeitsCnpiPCVzKyNGOU09PX1hb0gwK0RWcD45
K21jUldKYW9Le2VgbjFUWmhnbFhed2xsbHMpTkshdjJJLT5oYDQqOXV0dgp6Z3VlWXJlZTt8UGok
Xy1fMldEVDRjT19RN2NDZUNeV2JPQVBSPXFFQTM0aChuJDZ0eFM4ZjBpQWJne1FwVVgoWGgKent2
U3pAcm9XMnVpcVFaNzAzfiFxU2FmNEBXbnB3PkVvNVBJV2RKZlRGZ1l6VEZmQX1PUjUzTz5HQnI5
ZEdBbDdLCnpJeHNMQUc9QkwyMDAxUilNT2J1Z1opOW1eY2BhbU5iWSVjQ0ZmY2hTRiklR0tIQj5Q
K0l4O21uRmZ1REtGZ2g/VwpUTVRIMj4wMDAwME5rdlhYdTBtamY0Uk5XKAoKbGl0ZXJhbCAwCkhj
bVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90
ZXN0cy9xbWx0ZXN0cy9jb21tb24vZmF2aWNvbi5odG1sIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9jb21tb24vZmF2aWNvbi5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNjhiMTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL2NvbW1vbi9mYXZpY29u
Lmh0bWwKQEAgLTAsMCArMSwxMSBAQAorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5JY29uIGlzIG5v
dCBsb2FkaW5nLjwvdGl0bGU+Cis8bGluayB0eXBlPSJpbWFnZS9wbmciIGhyZWY9ImJhc2ljLnBu
ZyIgc2l6ZXM9IjY0eDY0IiByZWw9Imljb24iIC8+Cis8c3R5bGU+Cis8L3N0eWxlPgorPC9oZWFk
PgorPGJvZHk+CitZb3UgY2FuIG9ubHkgc2VlIHRoaXMgaWNvbiBpZiB5b3Ugb3BlbiB0aGlzIHBh
Z2UgdGhyb3VnaCBodHRwIG9yIGh0dHBzIHByb3RvY29sLgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9x
bWx0ZXN0cy5wcm8gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRl
c3RzL3FtbHRlc3RzLnBybwppbmRleCAyNjlkYTc0Li43ODc3ZjNmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL3FtbHRlc3RzLnBybwor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL3FtbHRl
c3RzLnBybwpAQCAtMjEsNiArMjEsNyBAQCBPVEhFUl9GSUxFUyArPSBcCiAgICAgV2ViVmlldy90
c3RfbG9hZFByb2dyZXNzU2lnbmFsLnFtbCBcCiAgICAgV2ViVmlldy90c3RfbG9hZFplcm9TaXpl
Vmlldy5xbWwgXAogICAgIFdlYlZpZXcvdHN0X3ByZWZlcmVuY2VzLnFtbCBcCisgICAgV2ViVmll
dy90c3RfZmF2SWNvbkxvYWQucW1sIFwKICAgICBEZXNrdG9wQmVoYXZpb3IvdHN0X2xpbmtIb3Zl
cmVkLnFtbCBcCiAgICAgRGVza3RvcEJlaGF2aW9yL3RzdF9tZXNzYWdpbmcucW1sIFwKICAgICBE
ZXNrdG9wQmVoYXZpb3IvdHN0X2Rvd25sb2FkLnFtbCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YkNvbnRleHQuaAppbmRleCBjNTdhNjdiLi4wYmZlYWVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJDb250ZXh0LmgKQEAgLTE3MSw2ICsxNzEsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRJ
Y29uRGF0YWJhc2VQYXRoKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgc2V0TG9jYWxTdG9yYWdl
RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgZGlyKSB7IG1fb3ZlcnJpZGVMb2NhbFN0b3JhZ2VEaXJl
Y3RvcnkgPSBkaXI7IH0KIAorICAgIFN0cmluZyBpY29uRGF0YWJhc2VQYXRoKCkgY29uc3Q7CisK
ICAgICBTdHJpbmcgb3ZlcnJpZGVXZWJJbnNwZWN0b3JCYXNlRGlyZWN0b3J5KCkgY29uc3QgeyBy
ZXR1cm4gbV9vdmVycmlkZVdlYkluc3BlY3RvckJhc2VEaXJlY3Rvcnk7IH0KICAgICB2b2lkIHNl
dE92ZXJyaWRlV2ViSW5zcGVjdG9yQmFzZURpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgpIHsg
bV9vdmVycmlkZVdlYkluc3BlY3RvckJhc2VEaXJlY3RvcnkgPSBwYXRoOyB9CiAKQEAgLTIzNCw3
ICsyMzYsNiBAQCBwcml2YXRlOgogICAgIFN0cmluZyBkYXRhYmFzZURpcmVjdG9yeSgpIGNvbnN0
OwogICAgIFN0cmluZyBwbGF0Zm9ybURlZmF1bHREYXRhYmFzZURpcmVjdG9yeSgpIGNvbnN0Owog
Ci0gICAgU3RyaW5nIGljb25EYXRhYmFzZVBhdGgoKSBjb25zdDsKICAgICBTdHJpbmcgcGxhdGZv
cm1EZWZhdWx0SWNvbkRhdGFiYXNlUGF0aCgpIGNvbnN0OwogCiAgICAgU3RyaW5nIGxvY2FsU3Rv
cmFnZURpcmVjdG9yeSgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L0NsaWVudEltcGwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0NsaWVu
dEltcGwuY3BwCmluZGV4IDgwMmVkZTYuLmVkMjhiYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9xdC9DbGllbnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvQ2xpZW50SW1wbC5jcHAKQEAgLTIxLDEyICsyMSwxMyBAQAogI2luY2x1ZGUgIkNs
aWVudEltcGwuaCIKIAogI2luY2x1ZGUgIlF0V2ViRXJyb3IuaCIKLSNpbmNsdWRlICJXZWJGcmFt
ZVByb3h5LmgiCiAjaW5jbHVkZSAiV0tBUElDYXN0LmgiCiAjaW5jbHVkZSAiV0tTdHJpbmdRdC5o
IgogI2luY2x1ZGUgIldLVVJMUXQuaCIKKyNpbmNsdWRlICJXZWJGcmFtZVByb3h5LmgiCiAjaW5j
bHVkZSA8UXRQb2xpY3lJbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxRdFZpZXdJbnRlcmZhY2UuaD4K
KyNpbmNsdWRlIDxRdFdlYkljb25EYXRhYmFzZS5oPgogI2luY2x1ZGUgPFF0V2ViUGFnZVByb3h5
Lmg+CiAjaW5jbHVkZSA8V0tBcnJheS5oPgogI2luY2x1ZGUgPFdLRnJhbWUuaD4KQEAgLTYwLDYg
KzYxLDEyIEBAIHN0YXRpYyBpbmxpbmUgUXRQb2xpY3lJbnRlcmZhY2UqIHRvUXRQb2xpY3lJbnRl
cmZhY2UoY29uc3Qgdm9pZCogY2xpZW50SW5mbykKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxRdFBvbGljeUludGVyZmFjZSo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKTsKIH0K
IAorc3RhdGljIGlubGluZSBRdFdlYkljb25EYXRhYmFzZSogdG9RdFdlYkljb25EYXRhYmFzZShj
b25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIEFTU0VSVChjbGllbnRJbmZvKTsKKyAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxRdFdlYkljb25EYXRhYmFzZSo+KGNvbnN0X2Nhc3Q8dm9p
ZCo+KGNsaWVudEluZm8pKTsKK30KKwogc3RhdGljIHZvaWQgZGlzcGF0Y2hMb2FkU3VjY2VlZGVk
KFdLRnJhbWVSZWYgZnJhbWUsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiB7CiAgICAgaWYgKCFX
S0ZyYW1lSXNNYWluRnJhbWUoZnJhbWUpKQpAQCAtMTYzLDYgKzE3MCwxMiBAQCBzdGF0aWMgYm9v
bCBxdF93a19ydW5KYXZhU2NyaXB0Q29uZmlybShXS1BhZ2VSZWYsIFdLU3RyaW5nUmVmIG1lc3Nh
Z2UsIFdLRnJhbWVSZQogICAgIHJldHVybiB0b1F0Vmlld0ludGVyZmFjZShjbGllbnRJbmZvKS0+
cnVuSmF2YVNjcmlwdENvbmZpcm0ocU1lc3NhZ2UpOwogfQogCitzdGF0aWMgdm9pZCBxdF93a19p
Y29uRGF0YWJhc2VEaWRDaGFuZ2VJY29uRm9yUGFnZVVSTChXS0ljb25EYXRhYmFzZVJlZiBpY29u
RGF0YWJhc2UsIFdLVVJMUmVmIHBhZ2VVUkwsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7Cisg
ICAgUVVybCBxVXJsID0gV0tVUkxDb3B5UVVybChwYWdlVVJMKTsKKyAgICB0b1F0V2ViSWNvbkRh
dGFiYXNlKGNsaWVudEluZm8pLT5yZXF1ZXN0SWNvbklkRm9yUGFnZVVSTChxVXJsKTsKK30KKwog
c3RhdGljIGlubGluZSBXS1N0cmluZ1JlZiBjcmVhdGVOdWxsV0tTdHJpbmcoKQogewogICAgIFJl
ZlB0cjxXZWJTdHJpbmc+IHdlYlN0cmluZyA9IFdlYlN0cmluZzo6Y3JlYXRlTnVsbCgpOwpAQCAt
MzUzLDMgKzM2NiwxMyBAQCB2b2lkIHNldHVwQ29udGV4dEluamVjdGVkQnVuZGxlQ2xpZW50KFdL
Q29udGV4dFJlZiBjb250ZXh0KQogICAgIGluamVjdGVkQnVuZGxlQ2xpZW50LmRpZFJlY2VpdmVN
ZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlID0gcXRfd2tfZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5q
ZWN0ZWRCdW5kbGU7CiAgICAgV0tDb250ZXh0U2V0SW5qZWN0ZWRCdW5kbGVDbGllbnQoY29udGV4
dCwgJmluamVjdGVkQnVuZGxlQ2xpZW50KTsKIH0KKwordm9pZCBzZXR1cEljb25EYXRhYmFzZUNs
aWVudChRdFdlYkljb25EYXRhYmFzZSogcXRXZWJJY29uRGF0YWJhc2UsIFdlYkljb25EYXRhYmFz
ZSogd2ViSWNvbkRhdGFiYXNlKQoreworICAgIFdLSWNvbkRhdGFiYXNlQ2xpZW50IGljb25EYXRh
YmFzZUNsaWVudDsKKyAgICBtZW1zZXQoJmljb25EYXRhYmFzZUNsaWVudCwgMCwgc2l6ZW9mKFdL
SWNvbkRhdGFiYXNlQ2xpZW50KSk7CisgICAgaWNvbkRhdGFiYXNlQ2xpZW50LnZlcnNpb24gPSBr
V0tJY29uRGF0YWJhc2VDbGllbnRDdXJyZW50VmVyc2lvbjsKKyAgICBpY29uRGF0YWJhc2VDbGll
bnQuY2xpZW50SW5mbyA9IHF0V2ViSWNvbkRhdGFiYXNlOworICAgIGljb25EYXRhYmFzZUNsaWVu
dC5kaWRDaGFuZ2VJY29uRm9yUGFnZVVSTCA9IHF0X3drX2ljb25EYXRhYmFzZURpZENoYW5nZUlj
b25Gb3JQYWdlVVJMOworICAgIFdLSWNvbkRhdGFiYXNlU2V0SWNvbkRhdGFiYXNlQ2xpZW50KHRv
QVBJKHdlYkljb25EYXRhYmFzZSksICZpY29uRGF0YWJhc2VDbGllbnQpOworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0NsaWVudEltcGwuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9xdC9DbGllbnRJbXBsLmgKaW5kZXggNGVmODk3NS4uNmNmYTJmZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0NsaWVudEltcGwuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvQ2xpZW50SW1wbC5oCkBAIC0yMywxNiArMjMsMTgg
QEAKICNpbmNsdWRlIDxXZWJLaXQyL1dLQ29udGV4dC5oPgogCiBjbGFzcyBRdFdlYlBhZ2VQcm94
eTsKK2NsYXNzIFF0V2ViSWNvbkRhdGFiYXNlOwogbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBR
dFBvbGljeUludGVyZmFjZTsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKK2NsYXNzIFdlYkljb25EYXRh
YmFzZTsKIH0KIAogdm9pZCBzZXR1cFBhZ2VMb2FkZXJDbGllbnQoUXRXZWJQYWdlUHJveHkqLCBX
ZWJLaXQ6OldlYlBhZ2VQcm94eSopOwogdm9pZCBzZXR1cFBhZ2VVaUNsaWVudChRdFdlYlBhZ2VQ
cm94eSosIFdlYktpdDo6V2ViUGFnZVByb3h5Kik7CiB2b2lkIHNldHVwUGFnZVBvbGljeUNsaWVu
dChXZWJLaXQ6OlF0UG9saWN5SW50ZXJmYWNlKiwgV2ViS2l0OjpXZWJQYWdlUHJveHkqKTsKK3Zv
aWQgc2V0dXBJY29uRGF0YWJhc2VDbGllbnQoUXRXZWJJY29uRGF0YWJhc2UqLCBXZWJLaXQ6Oldl
Ykljb25EYXRhYmFzZSopOwogCiB2b2lkIHNldHVwQ29udGV4dEluamVjdGVkQnVuZGxlQ2xpZW50
KFdLQ29udGV4dFJlZik7CiAKICNlbmRpZiAvKiBDbGllbnRJbXBsX2ggKi8KLQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViSWNvbkRhdGFiYXNlLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYkljb25EYXRhYmFzZS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmYyMTYxNQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYkljb25EYXRhYmFzZS5jcHAKQEAgLTAsMCAr
MSwxMjQgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJRdFdlYkljb25EYXRhYmFzZS5oIgorCisjaW5jbHVkZSAiQ2xpZW50SW1wbC5oIgorI2lu
Y2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZl
ci5oIgorI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJJY29uRGF0YWJhc2Uu
aCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK1F0V2ViSWNvbkRhdGFiYXNlKiBR
dFdlYkljb25EYXRhYmFzZTo6c19pbnN0YW5jZSA9IDA7CisKK3ZvaWQgUXRXZWJJY29uRGF0YWJh
c2U6OmluaXQoV2ViQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBpZiAoIXNfaW5zdGFuY2UpCisg
ICAgICAgIHNfaW5zdGFuY2UgPSBuZXcgUXRXZWJJY29uRGF0YWJhc2UoY29udGV4dCk7Cit9CisK
K3ZvaWQgUXRXZWJJY29uRGF0YWJhc2U6OmRlc3Ryb3koKQoreworICAgIGRlbGV0ZSBzX2luc3Rh
bmNlOworICAgIHNfaW5zdGFuY2UgPSAwOworfQorCitRdFdlYkljb25EYXRhYmFzZTo6UXRXZWJJ
Y29uRGF0YWJhc2UoV2ViQ29udGV4dCogY29udGV4dCkKKyAgICA6IG1fbGFzdEljb25JZCgwKQor
eworICAgIC8vIEZJWE1FOiB0aGlzIHNldHRlciBkb2Vzbid0IG9ubHkgc2V0IHRoZSBpY29uIGRh
dGFiYXNlIHBhdGgsIGJ1dCBpdCBhbHNvCisgICAgLy8gdHJpZ2dlciB0aGUgc3RhcnR1cCBvZiBX
ZWJDb250ZXh0J3MgV2ViSWNvbkRhdGFiYXNlLiBUaGUgZ2V0dGVyIHdpbGwgcmV0dXJuCisgICAg
Ly8gdGhlIGRlZmF1bHQgcGxhdGZvcm0gcGF0aCBhbmQgd2lsbCBzdGFydCBXZWJJY29uRGF0YWJh
c2Ugd2l0aCBpdC4KKyAgICBjb250ZXh0LT5zZXRJY29uRGF0YWJhc2VQYXRoKGNvbnRleHQtPmlj
b25EYXRhYmFzZVBhdGgoKSk7CisgICAgbV9pY29uRGF0YWJhc2UgPSBjb250ZXh0LT5pY29uRGF0
YWJhc2UoKTsKKyAgICBzZXR1cEljb25EYXRhYmFzZUNsaWVudCh0aGlzLCBtX2ljb25EYXRhYmFz
ZSk7Cit9CisKK1F0V2ViSWNvbkRhdGFiYXNlOjp+UXRXZWJJY29uRGF0YWJhc2UoKQoreworfQor
CitRUGl4bWFwIFF0V2ViSWNvbkRhdGFiYXNlOjppY29uSW1hZ2VGb3JQYWdlVVJMKGNvbnN0IFFV
cmwmIHBhZ2VVUkwpCit7CisgICAgU3RyaW5nIHVybCA9IFdlYkNvcmU6OktVUkwocGFnZVVSTCku
c3RyaW5nKCk7CisgICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlPiBpbWFnZSA9IG1faWNvbkRhdGFi
YXNlLT5pbWFnZUZvclBhZ2VVUkwodXJsKTsKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1
cm4gUVBpeG1hcCgpOworCisgICAgUVBpeG1hcCogbmF0aXZlSW1hZ2UgPSBpbWFnZS0+bmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBpZiAoIW5hdGl2ZUltYWdlKQorICAgICAgICBy
ZXR1cm4gUVBpeG1hcCgpOworCisgICAgcmV0dXJuIG5hdGl2ZUltYWdlLT5jb3B5KCk7Cit9CisK
K3ZvaWQgUXRXZWJJY29uRGF0YWJhc2U6OnJlcXVlc3RJY29uSWRGb3JQYWdlVVJMKGNvbnN0IFFV
cmwmIHVybCkKK3sKKworICAgIFFQaXhtYXAgaWNvbiA9IGljb25JbWFnZUZvclBhZ2VVUkwodXJs
KTsKKyAgICBpZiAoaWNvbi5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50IGlj
b25JZCA9IGdldE5leHRBdmFpbGFibGVJY29uSWQoKTsKKyAgICBtX3BpeG1hcEZvckljb25JZFtp
Y29uSWRdID0gaWNvbjsKKyAgICBlbWl0IGljb25JZFJlYWR5Rm9yUGFnZVVSTChpY29uSWQsIHVy
bCk7Cit9CisKK1FQaXhtYXAgUXRXZWJJY29uRGF0YWJhc2U6Omljb25JbWFnZUZvckljb25JZChp
bnQgaWQpIGNvbnN0Cit7CisgICAgUU1hcDxpbnQsIFFQaXhtYXA+Ojpjb25zdF9pdGVyYXRvciBp
dCA9IG1fcGl4bWFwRm9ySWNvbklkLmZpbmQoaWQpOworICAgIGlmIChpdCA9PSBtX3BpeG1hcEZv
ckljb25JZC5jb25zdEVuZCgpKQorICAgICAgICByZXR1cm4gUVBpeG1hcCgpOworCisgICAgcmV0
dXJuIGl0LnZhbHVlKCk7Cit9CisKK3ZvaWQgUXRXZWJJY29uRGF0YWJhc2U6OnJldGFpbkljb25J
ZChpbnQgaWQpCit7CisgICAgUU1hcDxpbnQsIGludD46Oml0ZXJhdG9yIGl0ID0gbV9yZXRhaW5D
b3VudEZvckljb25JZC5maW5kKGlkKTsKKyAgICBpZiAoaXQgIT0gbV9yZXRhaW5Db3VudEZvcklj
b25JZC5lbmQoKSkgeworICAgICAgICBpdC52YWx1ZSgpKys7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgbV9yZXRhaW5Db3VudEZvckljb25JZFtpZF0gPSAxOworfQorCit2b2lkIFF0V2Vi
SWNvbkRhdGFiYXNlOjpyZWxlYXNlSWNvbklkKGludCBpZCkKK3sKKyAgICBRTWFwPGludCwgaW50
Pjo6aXRlcmF0b3IgaXQgPSBtX3JldGFpbkNvdW50Rm9ySWNvbklkLmZpbmQoaWQpOworICAgIGlm
IChpdCA9PSBtX3JldGFpbkNvdW50Rm9ySWNvbklkLmVuZCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoaXQudmFsdWUoKSA9PSAxKSB7CisgICAgICAgIG1fcmV0YWluQ291bnRGb3JJY29u
SWQucmVtb3ZlKGlkKTsKKyAgICAgICAgbV9waXhtYXBGb3JJY29uSWQucmVtb3ZlKGlkKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGl0LnZhbHVlKCktLTsKK30KKworaW50IFF0V2Vi
SWNvbkRhdGFiYXNlOjpnZXROZXh0QXZhaWxhYmxlSWNvbklkKCkKK3sKKyAgICAvLyBGSVhNRTog
UmV1c2UgaWRzIHRvIGF2b2lkIG92ZXJmbG93LgorICAgIHJldHVybiArK21fbGFzdEljb25JZDsK
K30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYkljb25EYXRh
YmFzZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViSWNvbkRhdGFiYXNlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdmZjcyZgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYkljb25EYXRhYmFzZS5oCkBA
IC0wLDAgKzEsNjkgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAg
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKworI2lmbmRlZiBRdFdlYkljb25E
YXRhYmFzZV9oCisjZGVmaW5lIFF0V2ViSWNvbkRhdGFiYXNlX2gKKworI2luY2x1ZGUgIldLSWNv
bkRhdGFiYXNlLmgiCisjaW5jbHVkZSAicXdlYmtpdGdsb2JhbC5oIgorI2luY2x1ZGUgPFF0Q29y
ZS9RTWFwPgorI2luY2x1ZGUgPFF0Q29yZS9RT2JqZWN0PgorI2luY2x1ZGUgPFF0Q29yZS9RVXJs
PgorI2luY2x1ZGUgPFF0R3VpL1FQaXhtYXA+CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3Mg
V2ViQ29udGV4dDsKK2NsYXNzIFdlYkljb25EYXRhYmFzZTsKK30KKwordXNpbmcgbmFtZXNwYWNl
IFdlYktpdDsKKworY2xhc3MgUXRXZWJJY29uRGF0YWJhc2UgOiBwdWJsaWMgUU9iamVjdCB7Cisg
ICAgUV9PQkpFQ1QKKworcHVibGljOgorICAgIHN0YXRpYyBRdFdlYkljb25EYXRhYmFzZSogaW5z
dGFuY2UoKSB7IHJldHVybiBzX2luc3RhbmNlOyB9CisgICAgc3RhdGljIHZvaWQgaW5pdChXZWJD
b250ZXh0Kik7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveSgpOworICAgIH5RdFdlYkljb25EYXRh
YmFzZSgpOworCisgICAgUVBpeG1hcCBpY29uSW1hZ2VGb3JJY29uSWQoaW50IGlkKSBjb25zdDsK
KyAgICBRUGl4bWFwIGljb25JbWFnZUZvclBhZ2VVUkwoY29uc3QgUVVybCYpOworICAgIHZvaWQg
cmV0YWluSWNvbklkKGludCBpZCk7CisgICAgdm9pZCByZWxlYXNlSWNvbklkKGludCBpZCk7CisK
K3B1YmxpYyBRX1NMT1RTOgorICAgIHZvaWQgcmVxdWVzdEljb25JZEZvclBhZ2VVUkwoY29uc3Qg
UVVybCYpOworCitwdWJsaWM6CisgICAgUV9TSUdOQUwgdm9pZCBpY29uSWRSZWFkeUZvclBhZ2VV
UkwoaW50LCBjb25zdCBRVXJsJik7CisKK3ByaXZhdGU6CisgICAgaW50IGdldE5leHRBdmFpbGFi
bGVJY29uSWQoKTsKKyAgICBzdGF0aWMgUXRXZWJJY29uRGF0YWJhc2UqIHNfaW5zdGFuY2U7CisK
KyAgICBRdFdlYkljb25EYXRhYmFzZShXZWJDb250ZXh0Kik7CisgICAgV2ViSWNvbkRhdGFiYXNl
KiBtX2ljb25EYXRhYmFzZTsKKyAgICBRTWFwPGludCwgUVBpeG1hcD4gbV9waXhtYXBGb3JJY29u
SWQ7CisgICAgUU1hcDxpbnQsIGludD4gbV9yZXRhaW5Db3VudEZvckljb25JZDsKKyAgICBpbnQg
bV9sYXN0SWNvbklkOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3F0L1F0V2ViUGFnZVByb3h5LmNwcAppbmRleCAzNTY0ZGQ2Li4wYmE4ODY1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VQcm94eS5jcHAKQEAgLTIxLDE3ICsy
MSw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUXRXZWJQYWdlUHJveHkuaCIK
IAotI2luY2x1ZGUgIlF0V2ViRXJyb3IuaCIKLSNpbmNsdWRlICJxd2ViZG93bmxvYWRpdGVtLmgi
Ci0jaW5jbHVkZSAicXdlYmRvd25sb2FkaXRlbV9wLmgiCi0jaW5jbHVkZSAicXdlYnByZWZlcmVu
Y2VzLmgiCi0jaW5jbHVkZSAicXdlYnByZWZlcmVuY2VzX3AuaCIKLQogI2luY2x1ZGUgIkNsaWVu
dEltcGwuaCIKICNpbmNsdWRlICJEb3dubG9hZFByb3h5LmgiCiAjaW5jbHVkZSAiRHJhd2luZ0Fy
ZWFQcm94eUltcGwuaCIKLSNpbmNsdWRlICJxd2toaXN0b3J5LmgiCi0jaW5jbHVkZSAicXdraGlz
dG9yeV9wLmgiCiAjaW5jbHVkZSAiRmluZEluZGljYXRvci5oIgogI2luY2x1ZGUgIkxvY2FsaXpl
ZFN0cmluZ3MuaCIKICNpbmNsdWRlICJNdXRhYmxlQXJyYXkuaCIKQEAgLTQyLDE3ICszNCwyNiBA
QAogI2luY2x1ZGUgIlF0UG9saWN5SW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiUXRWaWV3SW50ZXJm
YWNlLmgiCiAjaW5jbHVkZSAiUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmgiCisjaW5jbHVk
ZSAiUXRXZWJFcnJvci5oIgorI2luY2x1ZGUgIlF0V2ViSWNvbkRhdGFiYXNlLmgiCiAjaW5jbHVk
ZSAiUXRXZWJVbmRvQ29tbWFuZC5oIgorI2luY2x1ZGUgIldLSWNvbkRhdGFiYXNlLmgiCisjaW5j
bHVkZSAiV0tTdHJpbmdRdC5oIgorI2luY2x1ZGUgIldLVVJMUXQuaCIKICNpbmNsdWRlICJXZWJC
YWNrRm9yd2FyZExpc3QuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0LmgiCiAjaW5jbHVkZSAiV2Vi
Q29udGV4dE1lbnVQcm94eVF0LmgiCiAjaW5jbHVkZSAiV2ViRWRpdENvbW1hbmRQcm94eS5oIgog
I2luY2x1ZGUgIldlYkV2ZW50RmFjdG9yeVF0LmgiCiAjaW5jbHVkZSAiV2ViUG9wdXBNZW51UHJv
eHlRdC5oIgotI2luY2x1ZGUgIldLU3RyaW5nUXQuaCIKLSNpbmNsdWRlICJXS1VSTFF0LmgiCi0j
aW5jbHVkZSA8UUd1aUFwcGxpY2F0aW9uPgorI2luY2x1ZGUgInF3ZWJkb3dubG9hZGl0ZW0uaCIK
KyNpbmNsdWRlICJxd2ViZG93bmxvYWRpdGVtX3AuaCIKKyNpbmNsdWRlICJxd2VicHJlZmVyZW5j
ZXMuaCIKKyNpbmNsdWRlICJxd2VicHJlZmVyZW5jZXNfcC5oIgorI2luY2x1ZGUgInF3a2hpc3Rv
cnkuaCIKKyNpbmNsdWRlICJxd2toaXN0b3J5X3AuaCIKICNpbmNsdWRlIDxRR3JhcGhpY3NTY2Vu
ZU1vdXNlRXZlbnQ+CisjaW5jbHVkZSA8UUd1aUFwcGxpY2F0aW9uPgogI2luY2x1ZGUgPFFKU0Vu
Z2luZT4KICNpbmNsdWRlIDxRTWltZURhdGE+CiAjaW5jbHVkZSA8UVN0eWxlSGludHM+CkBAIC04
Miw2ICs4Myw3IEBAIFBhc3NSZWZQdHI8V2ViQ29udGV4dD4gUXRXZWJQYWdlUHJveHk6OmRlZmF1
bHRXS0NvbnRleHQoKQogICAgICAgICBzX2RlZmF1bHRDb250ZXh0ID0gV2ViQ29udGV4dDo6Y3Jl
YXRlKFN0cmluZygpKTsKICAgICAgICAgc2V0dXBDb250ZXh0SW5qZWN0ZWRCdW5kbGVDbGllbnQo
dG9BUEkoc19kZWZhdWx0Q29udGV4dC5nZXQoKSkpOwogICAgICAgICBzX2Rvd25sb2FkTWFuYWdl
ciA9IFF0RG93bmxvYWRNYW5hZ2VyOjpjcmVhdGUoc19kZWZhdWx0Q29udGV4dC5nZXQoKSk7Cisg
ICAgICAgIFF0V2ViSWNvbkRhdGFiYXNlOjppbml0KHNfZGVmYXVsdENvbnRleHQuZ2V0KCkpOwog
ICAgIH0KICAgICByZXR1cm4gc19kZWZhdWx0Q29udGV4dDsKIH0KQEAgLTE2OCw2ICsxNzAsNyBA
QCBRdFdlYlBhZ2VQcm94eTo6flF0V2ViUGFnZVByb3h5KCkKICAgICAgICAgaWYgKCFzX2RlZmF1
bHRQYWdlUHJveHlDb3VudCkgewogICAgICAgICAgICAgc19kZWZhdWx0Q29udGV4dC5jbGVhcigp
OwogICAgICAgICAgICAgc19kb3dubG9hZE1hbmFnZXIuY2xlYXIoKTsKKyAgICAgICAgICAgIFF0
V2ViSWNvbkRhdGFiYXNlOjpkZXN0cm95KCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgZGVsZXRl
IG1faGlzdG9yeTsKQEAgLTU0Myw3ICs1NDYsNyBAQCB2b2lkIFF0V2ViUGFnZVByb3h5OjpmbGFz
aEJhY2tpbmdTdG9yZVVwZGF0ZXMoY29uc3QgVmVjdG9yPEludFJlY3Q+JikKIAogV0tQYWdlUmVm
IFF0V2ViUGFnZVByb3h5OjpwYWdlUmVmKCkgY29uc3QKIHsKLSAgICByZXR1cm4gdG9BUEkobV93
ZWJQYWdlUHJveHkuZ2V0KCkpOzsKKyAgICByZXR1cm4gdG9BUEkobV93ZWJQYWdlUHJveHkuZ2V0
KCkpOwogfQogCiB2b2lkIFF0V2ViUGFnZVByb3h5OjpkaWRGaW5kWm9vbWFibGVBcmVhKGNvbnN0
IEludFBvaW50JiB0YXJnZXQsIGNvbnN0IEludFJlY3QmIGFyZWEpCkBAIC05MTksNCArOTIyLDM4
IEBAIHZvaWQgUXRXZWJQYWdlUHJveHk6OmZpbmRab29tYWJsZUFyZWFGb3JQb2ludChjb25zdCBR
UG9pbnQmIHBvaW50KQogICAgIG1fd2ViUGFnZVByb3h5LT5maW5kWm9vbWFibGVBcmVhRm9yUG9p
bnQocG9pbnQpOwogfQogCit2b2lkIFF0V2ViUGFnZVByb3h5OjpyZXF1ZXN0SWNvbklkRm9yUGFn
ZVVSTChjb25zdCBRVXJsJiBwYWdlVVJMKQoreworICAgIFF0V2ViSWNvbkRhdGFiYXNlOjppbnN0
YW5jZSgpLT5yZXF1ZXN0SWNvbklkRm9yUGFnZVVSTChwYWdlVVJMKTsKK30KKworUVVybCBRdFdl
YlBhZ2VQcm94eTo6ZmF2SWNvblNvdXJjZSgpIGNvbnN0Cit7CisgICAgc3RhdGljIFFTdHJpbmcg
ZmF2SWNvblNvdXJjZVRlbXBsYXRlID0gUUxhdGluMVN0cmluZygiaW1hZ2U6Ly9mYXZpY29uLyUx
Iik7CisgICAgcmV0dXJuIFFVcmwoZmF2SWNvblNvdXJjZVRlbXBsYXRlLmFyZyhtX2Zhdkljb25J
ZCkpOworfQorCit2b2lkIFF0V2ViUGFnZVByb3h5Ojp1cGRhdGVGYXZJY29uSWQoaW50IGlkKQor
eworICAgIGlmIChtX2Zhdkljb25JZCA9PSBpZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgUXRX
ZWJJY29uRGF0YWJhc2UqIGljb25EYXRhYmFzZSA9IFF0V2ViSWNvbkRhdGFiYXNlOjppbnN0YW5j
ZSgpOworICAgIGlmIChtX2Zhdkljb25JZCkKKyAgICAgICAgaWNvbkRhdGFiYXNlLT5yZWxlYXNl
SWNvbklkKG1fZmF2SWNvbklkKTsKKyAgICBtX2Zhdkljb25JZCA9IGlkOworICAgIGlmIChtX2Zh
dkljb25JZCkKKyAgICAgICBpY29uRGF0YWJhc2UtPnJldGFpbkljb25JZChtX2Zhdkljb25JZCk7
CisKKyAgICBlbWl0IGRpZENoYW5nZUZhdkljb25Tb3VyY2UoZmF2SWNvblNvdXJjZSgpKTsKK30K
Kwordm9pZCBRdFdlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZUljb25JZEZvclBhZ2VVUkwoaW50IGlk
LCBjb25zdCBRVXJsJiBwYWdlVVJMKQoreworICAgIGlmICh1cmwoKSAhPSBwYWdlVVJMKQorICAg
ICAgICByZXR1cm47CisKKyAgICB1cGRhdGVGYXZJY29uSWQoaWQpOworfQorCiAjaW5jbHVkZSAi
bW9jX1F0V2ViUGFnZVByb3h5LmNwcCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC9RdFdlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0
V2ViUGFnZVByb3h5LmgKaW5kZXggNjZkYzQ3ZC4uMWU0NGIyMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVByb3h5LmgKQEAgLTM0LDEzICszNCwxMyBAQAogI2lu
Y2x1ZGUgIlZpZXdwb3J0QXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiV2ViQ29udGV4dC5oIgogI2lu
Y2x1ZGUgIldlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRl
IDxRQmFzaWNUaW1lcj4KICNpbmNsdWRlIDxRR3JhcGhpY3NWaWV3PgogI2luY2x1ZGUgPFFLZXlF
dmVudD4KLSNpbmNsdWRlIDxRVG91Y2hFdmVudD4KICNpbmNsdWRlIDxRTWVudT4KICNpbmNsdWRl
IDxRU2hhcmVkUG9pbnRlcj4KKyNpbmNsdWRlIDxRVG91Y2hFdmVudD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CiAKIFFUX0JFR0lOX05BTUVTUEFDRQogY2xhc3MgUVVuZG9TdGFjazsKQEAgLTUy
LDcgKzUyLDcgQEAgY2xhc3MgUVdLSGlzdG9yeTsKIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsK
IAotV2ViQ29yZTo6RHJhZ09wZXJhdGlvbiBkcm9wQWN0aW9uVG9EcmFnT3BlcmF0aW9uKFF0OjpE
cm9wQWN0aW9ucyBhY3Rpb25zKTsKK1dlYkNvcmU6OkRyYWdPcGVyYXRpb24gZHJvcEFjdGlvblRv
RHJhZ09wZXJhdGlvbihRdDo6RHJvcEFjdGlvbnMpOwogCiAvLyBGSVhNRTogbmVlZHMgZm9jdXMg
aW4vb3V0LCB3aW5kb3cgYWN0aXZhdGlvbiwgc3VwcG9ydCB0aHJvdWdoIHZpZXdTdGF0ZURpZENo
YW5nZSgpLgogY2xhc3MgUXRXZWJQYWdlUHJveHkgOiBwdWJsaWMgUU9iamVjdCwgV2ViS2l0OjpQ
YWdlQ2xpZW50IHsKQEAgLTEwNCw3ICsxMDQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IHN0YXJ0RHJhZyhjb25zdCBXZWJDb3JlOjpEcmFnRGF0YSYsIFBhc3NSZWZQdHI8U2hhcmVhYmxl
Qml0bWFwPiBkcmFnSW1hZ2UpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VWaWV3cG9ydFBy
b3BlcnRpZXMoY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMmKTsKICAgICB2aXJ0dWFs
IHZvaWQgc2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYpOwotICAgIHZpcnR1YWwgdm9p
ZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCBoaWRkZW5VbnRpbE1vdXNlTW92
ZXMpOworICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9v
bCk7CiAgICAgdmlydHVhbCB2b2lkIHRvb2xUaXBDaGFuZ2VkKGNvbnN0IFdURjo6U3RyaW5nJiwg
Y29uc3QgV1RGOjpTdHJpbmcmKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJFZGl0Q29tbWFu
ZChQYXNzUmVmUHRyPFdlYktpdDo6V2ViRWRpdENvbW1hbmRQcm94eT4sIFdlYktpdDo6V2ViUGFn
ZVByb3h5OjpVbmRvT3JSZWRvKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBbGxFZGl0Q29tbWFu
ZHMoKTsKQEAgLTE2MCw4ICsxNjAsOSBAQCBwdWJsaWM6CiAKICAgICBXS1BhZ2VSZWYgcGFnZVJl
ZigpIGNvbnN0OwogCi0gICAgdm9pZCBsb2FkKGNvbnN0IFFVcmwmIHVybCk7CisgICAgdm9pZCBs
b2FkKGNvbnN0IFFVcmwmKTsKICAgICBRVXJsIHVybCgpIGNvbnN0OworICAgIFFVcmwgZmF2SWNv
blNvdXJjZSgpIGNvbnN0OwogCiAgICAgdm9pZCBzZXREcmF3aW5nQXJlYVNpemUoY29uc3QgUVNp
emUmKTsKIApAQCAtMTgxLDggKzE4Miw4IEBAIHB1YmxpYzoKIAogICAgIHFyZWFsIHRleHRab29t
RmFjdG9yKCkgY29uc3Q7CiAgICAgcXJlYWwgcGFnZVpvb21GYWN0b3IoKSBjb25zdDsKLSAgICB2
b2lkIHNldFRleHRab29tRmFjdG9yKHFyZWFsIHpvb21GYWN0b3IpOwotICAgIHZvaWQgc2V0UGFn
ZVpvb21GYWN0b3IocXJlYWwgem9vbUZhY3Rvcik7CisgICAgdm9pZCBzZXRUZXh0Wm9vbUZhY3Rv
cihxcmVhbCk7CisgICAgdm9pZCBzZXRQYWdlWm9vbUZhY3RvcihxcmVhbCk7CiAgICAgdm9pZCBz
ZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKHFyZWFsIHBhZ2Vab29tRmFjdG9yLCBxcmVhbCB0ZXh0
Wm9vbUZhY3Rvcik7CiAKICAgICB2b2lkIHNldFZpc2libGVDb250ZW50UmVjdEFuZFNjYWxlKGNv
bnN0IFFSZWN0RiYsIGZsb2F0KTsKQEAgLTE5OSwxNyArMjAwLDIxIEBAIHB1YmxpYzoKICAgICB2
b2lkIGhhbmRsZVNpbmdsZVRhcEV2ZW50KGNvbnN0IFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50Jik7
CiAgICAgdm9pZCBoYW5kbGVEb3VibGVUYXBFdmVudChjb25zdCBRVG91Y2hFdmVudDo6VG91Y2hQ
b2ludCYpOwogCisgICAgdm9pZCByZXF1ZXN0SWNvbklkRm9yUGFnZVVSTChjb25zdCBRVXJsJik7
CisKIHB1YmxpYyBRX1NMT1RTOgogICAgIHZvaWQgbmF2aWdhdGlvblN0YXRlQ2hhbmdlZCgpOwog
ICAgIHZvaWQgZGlkUmVjZWl2ZURvd25sb2FkUmVzcG9uc2UoUVdlYkRvd25sb2FkSXRlbSopOwor
ICAgIHZvaWQgZGlkUmVjZWl2ZUljb25JZEZvclBhZ2VVUkwoaW50LCBjb25zdCBRVXJsJik7CiAK
IHB1YmxpYzoKICAgICBRX1NJR05BTCB2b2lkIHpvb21hYmxlQXJlYUZvdW5kKGNvbnN0IFFSZWN0
Jik7CiAgICAgUV9TSUdOQUwgdm9pZCB1cGRhdGVOYXZpZ2F0aW9uU3RhdGUoKTsKICAgICBRX1NJ
R05BTCB2b2lkIHJlY2VpdmVkTWVzc2FnZUZyb21OYXZpZ2F0b3JRdE9iamVjdChjb25zdCBRVmFy
aWFudE1hcCYpOworICAgIFFfU0lHTkFMIHZvaWQgZGlkQ2hhbmdlRmF2SWNvblNvdXJjZShjb25z
dCBRVXJsJik7CiAKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50KFFQ
YWludGVyKiBwYWludGVyLCBjb25zdCBRUmVjdCYgYXJlYSk7CisgICAgdmlydHVhbCB2b2lkIHBh
aW50Q29udGVudChRUGFpbnRlciosIGNvbnN0IFFSZWN0JiBhcmVhKTsKICAgICBSZWZQdHI8V2Vi
S2l0OjpXZWJQYWdlUHJveHk+IG1fd2ViUGFnZVByb3h5OwogICAgIFdlYktpdDo6UXRWaWV3SW50
ZXJmYWNlKiBjb25zdCBtX3ZpZXdJbnRlcmZhY2U7CiAgICAgUXRWaWV3cG9ydEludGVyYWN0aW9u
RW5naW5lKiBtX2ludGVyYWN0aW9uRW5naW5lOwpAQCAtMjM1LDYgKzI0MCw4IEBAIHByaXZhdGU6
CiAgICAgYm9vbCBoYW5kbGVEcmFnTW92ZUV2ZW50KFFEcmFnTW92ZUV2ZW50Kik7CiAgICAgYm9v
bCBoYW5kbGVEcm9wRXZlbnQoUURyb3BFdmVudCopOwogCisgICAgdm9pZCB1cGRhdGVGYXZJY29u
SWQoaW50KTsKKwogICAgIHZpcnR1YWwgdm9pZCB0aW1lckV2ZW50KFFUaW1lckV2ZW50Kik7CiAK
ICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQpAQCAtMjU5LDYgKzI2Niw3IEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBtX25hdmlnYXRvclF0T2JqZWN0RW5hYmxlZDsKICAgICBRUG9pbnQgbV90cmlwbGVD
bGljazsKICAgICBRQmFzaWNUaW1lciBtX3RyaXBsZUNsaWNrVGltZXI7CisgICAgaW50IG1fZmF2
SWNvbklkOwogfTsKIAogI2VuZGlmIC8qIFF0V2ViUGFnZVByb3h5X2ggKi8KZGlmZiAtLWdpdCBh
L1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA2MzRkNTcwLi4zMjE2MmFj
IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTQgQEAKKzIwMTEtMTEtMTYgIFJhZmFlbCBCcmFuZGFvICA8cmFmYWVsLmxvYm9Ab3Bl
bmJvc3NhLm9yZz4KKworICAgICAgICBbUXRdW1dLMl0gSW1wbGVtZW50IGZhdmljb24gc3VwcG9y
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEwODIK
KworICAgICAgICBBZGRlZCBhIEZhdkljb24gdG8gTWluaUJyb3dzZXIgYXMgYW4gZXhhbXBsZSBv
ZiBpdHMgdXNlLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogTWluaUJyb3dzZXIvcXQvcW1sL0Jyb3dzZXJXaW5kb3cucW1sOgorCiAyMDExLTExLTE2
ICBBZGFtIFJvYmVuICA8YXJvYmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBNb3ZlIGZpbGVuYW1l
cy9saW5lIG51bWJlcnMgb2ZmIHRvIHRoZSByaWdodCBlZGdlIGluIExlYWtzIFZpZXdlcgpkaWZm
IC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvcW1sL0Jyb3dzZXJXaW5kb3cucW1sIGIvVG9v
bHMvTWluaUJyb3dzZXIvcXQvcW1sL0Jyb3dzZXJXaW5kb3cucW1sCmluZGV4IDVjYzE1MmEuLjU4
NzIxY2QgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L3FtbC9Ccm93c2VyV2luZG93
LnFtbAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvQnJvd3NlcldpbmRvdy5xbWwKQEAg
LTE1Nyw2ICsxNTcsMTggQEAgUmVjdGFuZ2xlIHsKICAgICAgICAgICAgICAgICB2aXNpYmxlOiB3
ZWJWaWV3LmxvYWRQcm9ncmVzcyAhPSAxMDAKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAg
SW1hZ2UgeworICAgICAgICAgICAgICAgIGlkOiBmYXZpY29uCisgICAgICAgICAgICAgICAgc291
cmNlOiB3ZWJWaWV3LmZhdkljb25Tb3VyY2UKKyAgICAgICAgICAgICAgICB3aWR0aDogMTYKKyAg
ICAgICAgICAgICAgICBoZWlnaHQ6IDE2CisgICAgICAgICAgICAgICAgYW5jaG9ycyB7CisgICAg
ICAgICAgICAgICAgICAgIGxlZnQ6IHBhcmVudC5sZWZ0CisgICAgICAgICAgICAgICAgICAgIGxl
ZnRNYXJnaW46IDIKKyAgICAgICAgICAgICAgICAgICAgdmVydGljYWxDZW50ZXI6IHBhcmVudC52
ZXJ0aWNhbENlbnRlcgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwogICAgICAg
ICAgICAgVGV4dElucHV0IHsKICAgICAgICAgICAgICAgICBpZDogYWRkcmVzc0xpbmUKICAgICAg
ICAgICAgICAgICBjbGlwOiB0cnVlCkBAIC0xNjcsNyArMTc5LDcgQEAgUmVjdGFuZ2xlIHsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYW5jaG9ycyB7CiAgICAgICAgICAgICAg
ICAgICAgIHZlcnRpY2FsQ2VudGVyOiBwYXJlbnQudmVydGljYWxDZW50ZXIKLSAgICAgICAgICAg
ICAgICAgICAgbGVmdDogcGFyZW50LmxlZnQKKyAgICAgICAgICAgICAgICAgICAgbGVmdDogZmF2
aWNvbi5yaWdodAogICAgICAgICAgICAgICAgICAgICByaWdodDogcGFyZW50LnJpZ2h0CiAgICAg
ICAgICAgICAgICAgICAgIG1hcmdpbnM6IDIKICAgICAgICAgICAgICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115463</attachid>
            <date>2011-11-16 15:37:56 -0800</date>
            <delta_ts>2011-11-30 13:26:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71082-20111116203000.patch</filename>
            <type>text/plain</type>
            <size>41733</size>
            <attacher name="Rafael Brandao">rafael.lobo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAwNDU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IDM4NTMzNDEwNjVh
YWRjNmZkODY2ZGI2ZDQwM2Y0NjAzNDY1OTNiNDguLjlhMGU5MDFkN2NhYzRiMjgwZjQ0ODYwMWMw
YmVkMjM0ODg3ZDYyZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMTEt
MTYgIFJhZmFlbCBCcmFuZGFvICA8cmFmYWVsLmxvYm9Ab3BlbmJvc3NhLm9yZz4KKworICAgICAg
ICBbUXRdW1dLMl0gSW1wbGVtZW50IGZhdmljb24gc3VwcG9ydAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEwODIKKworICAgICAgICBTZXR1cCBGYXZJ
Y29uIGltYWdlIHByb3ZpZGVyIHRvIHRoZSBlbmdpbmUgb24gc3RhcnR1cC4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGRlY2xhcmF0aXZlL3BsdWdp
bi5jcHA6CisgICAgICAgIChXZWJLaXRRbWxQbHVnaW46OmluaXRpYWxpemVFbmdpbmUpOgorCiAy
MDExLTExLTE2ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAog
ICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTAwNDQ4LgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDM0
ZTVkNDc3OWI5MWViYTNlZjJmZDZjYmY5M2NmMmIzNWE5MGJjZGQuLmEzYzM4YzNkNDBjYjgzNjFh
NjQ2Nzc5M2EzZWVlZWYzNjVhMzEwMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2NSBAQAorMjAx
MS0xMS0xNiAgUmFmYWVsIEJyYW5kYW8gIDxyYWZhZWwubG9ib0BvcGVuYm9zc2Eub3JnPgorCisg
ICAgICAgIFtRdF1bV0syXSBJbXBsZW1lbnQgZmF2aWNvbiBzdXBwb3J0CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTA4MgorCisgICAgICAgIFF0V2Vi
SWNvbkRhdGFiYXNlIHdhcyBjcmVhdGVkIHRvIGhhbmRsZSBGYXZJY29uIHJlcXVlc3RzIGFuZCBz
dG9yZXMKKyAgICAgICAgdGhlbSB0byBiZSB1c2VkIGJ5IFF0V2ViRmF2SWNvbkltYWdlUHJvdmlk
ZXIuIFRoZSByZXF1ZXN0IGlzIGRvbmUgd2hlbgorICAgICAgICBvdXIgV2ViVmlldyBjaGFuZ2Vz
IGl0cyB1cmwuIEVhY2ggRmF2SWNvbiBoYXMgYW4gaWQsIGFuZCBwYWdlcyB0aGF0CisgICAgICAg
IHNoYXJlIHRoZSBzYW1lIHVybCB3aWxsIGFsc28gc2hhcmUgdGhlIHNhbWUgaWNvbi4gVGhlIHZp
ZXcgbm93IGhhcyBhCisgICAgICAgIG5ldyBhdHRyaWJ1dGUgKGZhdkljb25Tb3VyY2UpIGFuZCBp
dCBzaG91bGQgYmUgYXR0YWNoZWQgdG8gYW4gSW1hZ2UncworICAgICAgICBzb3VyY2Ugb24gUU1M
IHRvIHNob3cgdGhlIGljb24uCisKKyAgICAgICAgSWNvbkRhdGFiYXNlIHN0b3JhZ2UgbGllcyBv
biBVSVByb2Nlc3MgYW5kIHRoZSBzeW5jaHJvbm91cyBjYWxsIGZvciB0aGUgaWNvbgorICAgICAg
ICBpbWFnZSB0aGF0IGhhcHBlbnMgb24gV2ViSWNvbkRhdGFiYXNlIHdvbid0IG5lZWQgdG8gc2Vu
ZCBhbnkgbWVzc2FnZSB0byBXZWJQcm9jZXNzLgorICAgICAgICBUaGUgcGFydCBvZiBJY29uRGF0
YWJhc2Ugb24gV2ViUHJvY2VzcyBoYW5kbGVzIHRoZSBkb3dubG9hZCBvZiB0aGUgcmVzb3VyY2Ug
d2hlbmV2ZXIKKyAgICAgICAgaXQgaXMgbmVlZGVkLiBUaGUgY29udGVudCBkb3dubG9hZGVkIGlz
IHNlbnQgdGhyb3VnaCBJUEMgdG8gdGhlIGFjdHVhbCBkYXRhYmFzZS4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9xdC9XS1ZpZXcuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0
L3FxdWlja3dlYnZpZXcuY3BwOgorICAgICAgICAoUVF1aWNrV2ViVmlld1ByaXZhdGU6OnNldFBh
Z2VQcm94eSk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3OjpmYXZJY29uU291cmNlKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL3F0L3F3ZWJmYXZpY29uaW1hZ2Vwcm92aWRlcl9wLmNwcDoKKyAgICAgICAgKFFXZWJG
YXZJY29uSW1hZ2VQcm92aWRlcjo6UVdlYkZhdkljb25JbWFnZVByb3ZpZGVyKToKKyAgICAgICAg
KFFXZWJGYXZJY29uSW1hZ2VQcm92aWRlcjo6flFXZWJGYXZJY29uSW1hZ2VQcm92aWRlcik6Cisg
ICAgICAgIChRV2ViRmF2SWNvbkltYWdlUHJvdmlkZXI6OnJlcXVlc3RQaXhtYXApOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXdlYmZhdmljb25pbWFnZXByb3ZpZGVyX3AuaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL1dlYlZpZXcvdHN0X2Zhdkljb25M
b2FkLnFtbDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0
cy9jb21tb24vYmFzaWMucG5nOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3Rl
c3RzL3FtbHRlc3RzL2NvbW1vbi9mYXZpY29uLmh0bWw6IEFkZGVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvcW1sdGVzdHMucHJvOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJDb250ZXh0Lmg6CisgICAgICAgICogVUlQcm9jZXNzL3F0L0NsaWVudEltcGwuY3Bw
OgorICAgICAgICAodG9RdFdlYkljb25EYXRhYmFzZSk6CisgICAgICAgIChxdF93a19pY29uRGF0
YWJhc2VEaWRDaGFuZ2VJY29uRm9yUGFnZVVSTCk6CisgICAgICAgIChzZXR1cEljb25EYXRhYmFz
ZUNsaWVudCk6CisgICAgICAgICogVUlQcm9jZXNzL3F0L0NsaWVudEltcGwuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvcXQvUXRXZWJJY29uRGF0YWJhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFF0
V2ViSWNvbkRhdGFiYXNlOjpjcmVhdGUpOgorICAgICAgICAoUXRXZWJJY29uRGF0YWJhc2U6OlF0
V2ViSWNvbkRhdGFiYXNlKToKKyAgICAgICAgKFF0V2ViSWNvbkRhdGFiYXNlOjp+UXRXZWJJY29u
RGF0YWJhc2UpOgorICAgICAgICAoUXRXZWJJY29uRGF0YWJhc2U6Omljb25JbWFnZUZvclBhZ2VV
UkwpOgorICAgICAgICAoUXRXZWJJY29uRGF0YWJhc2U6OnJlcXVlc3RJY29uSWRGb3JQYWdlVVJM
KToKKyAgICAgICAgKFF0V2ViSWNvbkRhdGFiYXNlOjppY29uSW1hZ2VGb3JJY29uSWQpOgorICAg
ICAgICAoUXRXZWJJY29uRGF0YWJhc2U6OnJldGFpbkljb25JZCk6CisgICAgICAgIChRdFdlYklj
b25EYXRhYmFzZTo6cmVsZWFzZUljb25JZCk6CisgICAgICAgIChRdFdlYkljb25EYXRhYmFzZTo6
Z2V0TmV4dEF2YWlsYWJsZUljb25JZCk6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0V2ViSWNv
bkRhdGFiYXNlLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VQcm94
eS5jcHA6CisgICAgICAgIChRdFdlYlBhZ2VQcm94eTo6ZGVmYXVsdFdLQ29udGV4dCk6CisgICAg
ICAgIChRdFdlYlBhZ2VQcm94eTo6flF0V2ViUGFnZVByb3h5KToKKyAgICAgICAgKFF0V2ViUGFn
ZVByb3h5OjpwYWdlUmVmKToKKyAgICAgICAgKFF0V2ViUGFnZVByb3h5OjpyZXF1ZXN0SWNvbklk
Rm9yUGFnZVVSTCk6CisgICAgICAgIChRdFdlYlBhZ2VQcm94eTo6ZmF2SWNvblNvdXJjZSk6Cisg
ICAgICAgIChRdFdlYlBhZ2VQcm94eTo6dXBkYXRlRmF2SWNvbklkKToKKyAgICAgICAgKFF0V2Vi
UGFnZVByb3h5OjpkaWRSZWNlaXZlSWNvbklkRm9yUGFnZVVSTCk6CisgICAgICAgICogVUlQcm9j
ZXNzL3F0L1F0V2ViUGFnZVByb3h5Lmg6CisgICAgICAgIChRdFdlYlBhZ2VQcm94eTo6aWNvbkRh
dGFiYXNlKToKKwogMjAxMS0xMS0xNiAgVmlhdGNoZXNsYXYgT3N0YXBlbmtvICA8b3N0YXBlbmtv
LnZpYXRjaGVzbGF2QG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdIFtXSzJdIENyYXNoIGluIENv
bm5lY3Rpb246OnJlYWR5UmVhZEhhbmRsZXIoKSBvbiBzb2NrZXQgZXJyb3IKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvcGx1Z2luLmNwcCBiL1NvdXJjZS9XZWJLaXQv
cXQvZGVjbGFyYXRpdmUvcGx1Z2luLmNwcAppbmRleCAzNzliOTc5MGYwZjZmNjFmMzVmZDdmYWMx
ZjE0ZjE3OTNiMWYyY2JlLi5mZDI5YmQyZjY1NDJjZjYxODY1M2IwOGU1OWFmODhkMGFjZjUwNDQ5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL3BsdWdpbi5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9wbHVnaW4uY3BwCkBAIC0yOCw3ICsyOCw5
IEBACiAjaW5jbHVkZSAicXdlYmRvd25sb2FkaXRlbS5oIgogI2luY2x1ZGUgInF3ZWJwcmVmZXJl
bmNlcy5oIgogCisjaW5jbHVkZSA8UXREZWNsYXJhdGl2ZS9xZGVjbGFyYXRpdmVlbmdpbmUuaD4K
ICNpbmNsdWRlIDxRdE5ldHdvcmsvcW5ldHdvcmtyZXBseS5oPgorI2luY2x1ZGUgPFdlYktpdDIv
cXdlYmZhdmljb25pbWFnZXByb3ZpZGVyX3AuaD4KICNlbmRpZgogCiBRVF9CRUdJTl9OQU1FU1BB
Q0UKQEAgLTM2LDYgKzM4LDE0IEBAIFFUX0JFR0lOX05BTUVTUEFDRQogY2xhc3MgV2ViS2l0UW1s
UGx1Z2luIDogcHVibGljIFFEZWNsYXJhdGl2ZUV4dGVuc2lvblBsdWdpbiB7CiAgICAgUV9PQkpF
Q1QKIHB1YmxpYzoKKyNpZiBkZWZpbmVkKEhBVkVfV0VCS0lUMikKKyAgICB2aXJ0dWFsIHZvaWQg
aW5pdGlhbGl6ZUVuZ2luZShRRGVjbGFyYXRpdmVFbmdpbmUqIGVuZ2luZSwgY29uc3QgY2hhciog
dXJpKQorICAgIHsKKyAgICAgICAgUV9BU1NFUlQoUUxhdGluMVN0cmluZyh1cmkpID09IFFMYXRp
bjFTdHJpbmcoIlF0V2ViS2l0IikpOworICAgICAgICBlbmdpbmUtPmFkZEltYWdlUHJvdmlkZXIo
UUxhdGluMVN0cmluZygiZmF2aWNvbiIpLCBuZXcgUVdlYkZhdkljb25JbWFnZVByb3ZpZGVyKTsK
KyAgICB9CisjZW5kaWYKKwogICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlclR5cGVzKGNvbnN0IGNo
YXIqIHVyaSkKICAgICB7CiAgICAgICAgIFFfQVNTRVJUKFFMYXRpbjFTdHJpbmcodXJpKSA9PSBR
TGF0aW4xU3RyaW5nKCJRdFdlYktpdCIpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1Rh
cmdldC5wcmkgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCmluZGV4IGQzNzhjNTRkNTAxNzJk
YzNhZjFiMTJkNzQ2OGY3NjI2YjYwOTIzZmIuLjJjY2FkMjM4YTdhMGE2NTYwYWRkNGFkODYxMTRi
ZmY1ZDk2ZDFkYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKKysrIGIv
U291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQpAQCAtMjUxLDYgKzI1MSw3IEBAIEhFQURFUlMgKz0g
XAogICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5oIFwKICAgICBVSVByb2Nlc3Mv
QVBJL3F0L3FxdWlja3dlYnZpZXdfcC5oIFwKICAgICBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dl
YnZpZXdwcml2YXRlZXh0ZW5zaW9uX3AuaCBcCisgICAgVUlQcm9jZXNzL0FQSS9xdC9xd2ViZmF2
aWNvbmltYWdlcHJvdmlkZXJfcC5oIFwKICAgICBVSVByb2Nlc3MvQXV0aGVudGljYXRpb24vQXV0
aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5oIFwKICAgICBVSVByb2Nlc3MvQXV0aGVudGljYXRp
b24vQXV0aGVudGljYXRpb25EZWNpc2lvbkxpc3RlbmVyLmggXAogICAgIFVJUHJvY2Vzcy9BdXRo
ZW50aWNhdGlvbi9XZWJDcmVkZW50aWFsLmggXApAQCAtMzIxLDYgKzMyMiw3IEBAIEhFQURFUlMg
Kz0gXAogICAgIFVJUHJvY2Vzcy9xdC9RdFdlYkVycm9yLmggXAogICAgIFVJUHJvY2Vzcy9xdC9R
dERvd25sb2FkTWFuYWdlci5oIFwKICAgICBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuaCBc
CisgICAgVUlQcm9jZXNzL3F0L1F0V2ViSWNvbkRhdGFiYXNlLmggXAogICAgIFVJUHJvY2Vzcy9x
dC9xd2toaXN0b3J5LmggXAogICAgIFVJUHJvY2Vzcy9xdC9xd2toaXN0b3J5X3AuaCBcCiAgICAg
VUlQcm9jZXNzL3F0L1F0U0dVcGRhdGVRdWV1ZS5oIFwKQEAgLTU1NCw2ICs1NTYsNyBAQCBTT1VS
Q0VTICs9IFwKICAgICBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwIFwKICAgICBV
SVByb2Nlc3MvQVBJL3F0L3F3ZWJwcmVmZXJlbmNlcy5jcHAgXAogICAgIFVJUHJvY2Vzcy9BUEkv
cXQvcXF1aWNrd2Vidmlld3ByaXZhdGVleHRlbnNpb24uY3BwIFwKKyAgICBVSVByb2Nlc3MvQVBJ
L3F0L3F3ZWJmYXZpY29uaW1hZ2Vwcm92aWRlcl9wLmNwcCBcCiAgICAgVUlQcm9jZXNzL0F1dGhl
bnRpY2F0aW9uL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuY3BwIFwKICAgICBVSVByb2Nl
c3MvQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRpb25EZWNpc2lvbkxpc3RlbmVyLmNwcCBcCiAg
ICAgVUlQcm9jZXNzL0F1dGhlbnRpY2F0aW9uL1dlYkNyZWRlbnRpYWwuY3BwIFwKQEAgLTYyOCw2
ICs2MzEsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBVSVByb2Nlc3MvcXQvUXRXZWJFcnJvci5jcHAg
XAogICAgIFVJUHJvY2Vzcy9xdC9RdERvd25sb2FkTWFuYWdlci5jcHAgXAogICAgIFVJUHJvY2Vz
cy9xdC9RdFdlYlBhZ2VQcm94eS5jcHAgXAorICAgIFVJUHJvY2Vzcy9xdC9RdFdlYkljb25EYXRh
YmFzZS5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9xd2toaXN0b3J5LmNwcCBcCiAgICAgVUlQcm9j
ZXNzL3F0L1F0U0dVcGRhdGVRdWV1ZS5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9RdFNHVGlsZU5v
ZGUuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvV0tW
aWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L1dLVmlldy5oCmluZGV4IDhj
MDExMjA2YmM3MDgwOGU3N2UzMTYwYjQzMjkyYjRmNjRlNzVhYWMuLjQ5YjZjZjNmZTdiNzBhMTIx
ODc0NmM4NmFhOGM4YzM1ODUyY2U5OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvV0tWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC9XS1ZpZXcuaApAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPFdlYktpdDIvcXF1aWNrd2Vi
cGFnZS5oPgogI2luY2x1ZGUgPFdlYktpdDIvcXF1aWNrd2Vidmlldy5oPgogI2luY2x1ZGUgPFdl
YktpdDIvcXdlYmRvd25sb2FkaXRlbS5oPgorI2luY2x1ZGUgPFdlYktpdDIvcXdlYmZhdmljb25p
bWFnZXByb3ZpZGVyX3AuaD4KICNpbmNsdWRlIDxXZWJLaXQyL3F3ZWJwcmVmZXJlbmNlcy5oPgog
CiAjZW5kaWYgLyogV0tWaWV3X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwCmluZGV4IDZkMGE2YzYyZDcwZTcxNWZmYjAyZjViNGJl
NzdlMzVmYjVmZmRjNGEuLmJkYjhjNGU2NGU0Y2RhMzY5MDkwNWJlODhhZjRlMzgzOTFkYjBkNjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmll
dy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3
LmNwcApAQCAtMzUzLDYgKzM1MywxMSBAQCB2b2lkIFFRdWlja1dlYlZpZXdQcml2YXRlOjpzZXRQ
YWdlUHJveHkoUXRXZWJQYWdlUHJveHkqIHBhZ2VQcm94eSkKICAgICBRX1EoUVF1aWNrV2ViVmll
dyk7CiAgICAgdGhpcy0+cGFnZVByb3h5LnJlc2V0KHBhZ2VQcm94eSk7CiAgICAgUU9iamVjdDo6
Y29ubmVjdChwYWdlUHJveHksIFNJR05BTChyZWNlaXZlZE1lc3NhZ2VGcm9tTmF2aWdhdG9yUXRP
YmplY3QoUVZhcmlhbnRNYXApKSwgcSwgU0lHTkFMKG1lc3NhZ2VSZWNlaXZlZChRVmFyaWFudE1h
cCkpKTsKKyAgICBRT2JqZWN0Ojpjb25uZWN0KHBhZ2VQcm94eSwgU0lHTkFMKGRpZENoYW5nZUZh
dkljb25Tb3VyY2UoUVVybCkpLCBxLCBTSUdOQUwoZmF2SWNvblNvdXJjZUNoYW5nZWQoUVVybCkp
KTsKKworICAgIFF0V2ViSWNvbkRhdGFiYXNlKiBpY29uRGF0YWJhc2UgPSBRdFdlYlBhZ2VQcm94
eTo6aWNvbkRhdGFiYXNlKCk7CisgICAgUU9iamVjdDo6Y29ubmVjdChxLCBTSUdOQUwodXJsQ2hh
bmdlZChRVXJsKSksIGljb25EYXRhYmFzZSwgU0xPVChyZXF1ZXN0SWNvbklkRm9yUGFnZVVSTChR
VXJsKSkpOworICAgIFFPYmplY3Q6OmNvbm5lY3QoaWNvbkRhdGFiYXNlLCBTSUdOQUwoaWNvbklk
UmVhZHlGb3JQYWdlVVJMKGludCwgUVVybCkpLCBwYWdlUHJveHksIFNMT1QoZGlkUmVjZWl2ZUlj
b25JZEZvclBhZ2VVUkwoaW50LCBRVXJsKSkpOwogfQogCiBRUXVpY2tXZWJWaWV3OjpRUXVpY2tX
ZWJWaWV3KFFRdWlja0l0ZW0qIHBhcmVudCkKQEAgLTQyMCw2ICs0MjUsMTIgQEAgdm9pZCBRUXVp
Y2tXZWJWaWV3OjpyZWxvYWQoKQogICAgIGQtPnBhZ2VQcm94eS0+cmVsb2FkKCk7CiB9CiAKK1FV
cmwgUVF1aWNrV2ViVmlldzo6ZmF2SWNvblNvdXJjZSgpIGNvbnN0Cit7CisgICAgUV9EKGNvbnN0
IFFRdWlja1dlYlZpZXcpOworICAgIHJldHVybiBkLT5wYWdlUHJveHktPmZhdkljb25Tb3VyY2Uo
KTsKK30KKwogUVVybCBRUXVpY2tXZWJWaWV3Ojp1cmwoKSBjb25zdAogewogICAgIFFfRChjb25z
dCBRUXVpY2tXZWJWaWV3KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvcXF1aWNrd2Vidmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9x
cXVpY2t3ZWJ2aWV3LmgKaW5kZXggZjhiYTgxN2ExZjM3NTE5NDM1NDlhM2NlMDA4ZjEyODU2ODkz
NjA3My4uMjJjNmJmZDJjYjM5Yjc4ZTIxNGEwYmFlNDE2MTExOWQxMjQ2MDNiOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmgKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmgKQEAgLTU1LDYg
KzU1LDcgQEAgY2xhc3MgUVdFQktJVF9FWFBPUlQgUVF1aWNrV2ViVmlldyA6IHB1YmxpYyBRUXVp
Y2tJdGVtIHsKICAgICBRX1BST1BFUlRZKGJvb2wgY2FuR29Gb3J3YXJkIFJFQUQgY2FuR29Gb3J3
YXJkIE5PVElGWSBuYXZpZ2F0aW9uU3RhdGVDaGFuZ2VkIEZJTkFMKQogICAgIFFfUFJPUEVSVFko
Ym9vbCBjYW5TdG9wIFJFQUQgY2FuU3RvcCBOT1RJRlkgbmF2aWdhdGlvblN0YXRlQ2hhbmdlZCBG
SU5BTCkKICAgICBRX1BST1BFUlRZKGJvb2wgY2FuUmVsb2FkIFJFQUQgY2FuUmVsb2FkIE5PVElG
WSBuYXZpZ2F0aW9uU3RhdGVDaGFuZ2VkIEZJTkFMKQorICAgIFFfUFJPUEVSVFkoUVVybCBmYXZJ
Y29uU291cmNlIFJFQUQgZmF2SWNvblNvdXJjZSBOT1RJRlkgZmF2SWNvblNvdXJjZUNoYW5nZWQg
RklOQUwpCiAgICAgUV9QUk9QRVJUWShRV2ViUHJlZmVyZW5jZXMqIHByZWZlcmVuY2VzIFJFQUQg
cHJlZmVyZW5jZXMgQ09OU1RBTlQgRklOQUwpCiAgICAgUV9QUk9QRVJUWShRUXVpY2tXZWJQYWdl
KiBwYWdlIFJFQUQgcGFnZSBDT05TVEFOVCBGSU5BTCkKICAgICBRX0VOVU1TKE5hdmlnYXRpb25Q
b2xpY3kpCkBAIC03OCw2ICs3OSw3IEBAIHB1YmxpYzoKICAgICBRVXJsIHVybCgpIGNvbnN0Owog
ICAgIFFTdHJpbmcgdGl0bGUoKSBjb25zdDsKICAgICBpbnQgbG9hZFByb2dyZXNzKCkgY29uc3Q7
CisgICAgUVVybCBmYXZJY29uU291cmNlKCkgY29uc3Q7CiAKICAgICBib29sIGNhbkdvQmFjaygp
IGNvbnN0OwogICAgIGJvb2wgY2FuR29Gb3J3YXJkKCkgY29uc3Q7CkBAIC0xMDksNiArMTExLDcg
QEAgUV9TSUdOQUxTOgogICAgIHZvaWQgbGlua0hvdmVyZWQoY29uc3QgUVVybCYgdXJsLCBjb25z
dCBRU3RyaW5nJiB0aXRsZSk7CiAgICAgdm9pZCB2aWV3TW9kZUNoYW5nZWQoKTsKICAgICB2b2lk
IG5hdmlnYXRpb25TdGF0ZUNoYW5nZWQoKTsKKyAgICB2b2lkIGZhdkljb25Tb3VyY2VDaGFuZ2Vk
KGNvbnN0IFFVcmwmIHVybCk7CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgZ2VvbWV0
cnlDaGFuZ2VkKGNvbnN0IFFSZWN0RiYsIGNvbnN0IFFSZWN0RiYpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2ViZmF2aWNvbmltYWdlcHJvdmlkZXJfcC5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJmYXZpY29uaW1hZ2Vwcm92
aWRlcl9wLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZjY4ZTZjNTI0NjVjYmRiN2VmNTFhNjZmYzFkNTdlMzJi
N2M2NjJmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC9xd2ViZmF2aWNvbmltYWdlcHJvdmlkZXJfcC5jcHAKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAg
ICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
ICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInF3ZWJmYXZpY29u
aW1hZ2Vwcm92aWRlcl9wLmgiCisKKyNpbmNsdWRlICJRdFdlYlBhZ2VQcm94eS5oIgorI2luY2x1
ZGUgPFF0R3VpL1FDb2xvcj4KKworUVdlYkZhdkljb25JbWFnZVByb3ZpZGVyOjpRV2ViRmF2SWNv
bkltYWdlUHJvdmlkZXIoKQorICAgIDogUURlY2xhcmF0aXZlSW1hZ2VQcm92aWRlcihRRGVjbGFy
YXRpdmVJbWFnZVByb3ZpZGVyOjpQaXhtYXApCisgICAgLCBtX2RlZmF1bHRGYXZJY29uKDEsIDEp
Cit7CisgICAgbV9kZWZhdWx0RmF2SWNvbi5maWxsKFF0Ojp0cmFuc3BhcmVudCk7Cit9CisKK1FX
ZWJGYXZJY29uSW1hZ2VQcm92aWRlcjo6flFXZWJGYXZJY29uSW1hZ2VQcm92aWRlcigpCit7CisK
K30KKworUVBpeG1hcCBRV2ViRmF2SWNvbkltYWdlUHJvdmlkZXI6OnJlcXVlc3RQaXhtYXAoY29u
c3QgUVN0cmluZyYgaWQsIFFTaXplKiBzaXplLCBjb25zdCBRU2l6ZSYpCit7CisgICAgUVBpeG1h
cCBpY29uOworICAgIFF0V2ViSWNvbkRhdGFiYXNlKiBpY29uRGF0YWJhc2UgPSBRdFdlYlBhZ2VQ
cm94eTo6aWNvbkRhdGFiYXNlKCk7CisgICAgaWYgKChpY29uID0gaWNvbkRhdGFiYXNlLT5pY29u
SW1hZ2VGb3JJY29uSWQoaWQudG9JbnQoKSkpLmlzTnVsbCgpKQorICAgICAgICBpY29uID0gbV9k
ZWZhdWx0RmF2SWNvbjsKKworICAgIGlmIChzaXplKQorICAgICAgICAqc2l6ZSA9IGljb24uc2l6
ZSgpOworCisgICAgcmV0dXJuIGljb247Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL3F0L3F3ZWJmYXZpY29uaW1hZ2Vwcm92aWRlcl9wLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJmYXZpY29uaW1hZ2Vwcm92aWRlcl9wLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYWQ2MGM4YWNiYTAxMmY3NmU3NGFiZDUwMjJjNTlmZTBmNzhiMTZiMQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdlYmZhdmljb25pbWFn
ZXByb3ZpZGVyX3AuaApAQCAtMCwwICsxLDM3IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAx
MSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZu
ZGVmIHF3ZWJmYXZpY29uaW1hZ2Vwcm92aWRlcl9wX2gKKyNkZWZpbmUgcXdlYmZhdmljb25pbWFn
ZXByb3ZpZGVyX3BfaAorCisjaW5jbHVkZSAicXdlYmtpdGdsb2JhbC5oIgorI2luY2x1ZGUgPFF0
RGVjbGFyYXRpdmUvUURlY2xhcmF0aXZlSW1hZ2VQcm92aWRlcj4KKyNpbmNsdWRlIDxRdEd1aS9R
UGl4bWFwPgorCitjbGFzcyBRV0VCS0lUX0VYUE9SVCBRV2ViRmF2SWNvbkltYWdlUHJvdmlkZXIg
OiBwdWJsaWMgUURlY2xhcmF0aXZlSW1hZ2VQcm92aWRlciB7CitwdWJsaWM6CisgICAgUVdlYkZh
dkljb25JbWFnZVByb3ZpZGVyKCk7CisgICAgflFXZWJGYXZJY29uSW1hZ2VQcm92aWRlcigpOwor
ICAgIFFQaXhtYXAgcmVxdWVzdFBpeG1hcChjb25zdCBRU3RyaW5nJiBpZCwgUVNpemUqIHNpemUs
IGNvbnN0IFFTaXplJiByZXF1ZXN0ZWRTaXplKTsKKworcHJpdmF0ZToKKyAgICBRUGl4bWFwIG1f
ZGVmYXVsdEZhdkljb247Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvV2ViVmlldy90c3RfZmF2SWNvbkxvYWQu
cW1sIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9XZWJW
aWV3L3RzdF9mYXZJY29uTG9hZC5xbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjRlYTU0NDUzMTczYTUwOTdlMDE5
OWQxZGJlZDRhNzk5YjU4ODEwYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvV2ViVmlldy90c3RfZmF2SWNvbkxvYWQucW1s
CkBAIC0wLDAgKzEsMzQgQEAKK2ltcG9ydCBRdFF1aWNrIDIuMAoraW1wb3J0IFF0VGVzdCAxLjAK
K2ltcG9ydCBRdFdlYktpdCAzLjAKKworV2ViVmlldyB7CisgICAgaWQ6IHdlYlZpZXcKKworICAg
IHByb3BlcnR5IHZhcmlhbnQgdGVzdFVybAorCisgICAgU2lnbmFsU3B5IHsKKyAgICAgICAgaWQ6
IHNweQorICAgICAgICB0YXJnZXQ6IHdlYlZpZXcKKyAgICAgICAgc2lnbmFsTmFtZTogImZhdklj
b25Tb3VyY2VDaGFuZ2VkIgorICAgIH0KKworICAgIEltYWdlIHsKKyAgICAgICAgaWQ6IGZhdmlj
b24KKyAgICAgICAgc291cmNlOiB3ZWJWaWV3LmZhdkljb25Tb3VyY2UKKyAgICB9CisKKyAgICBU
ZXN0Q2FzZSB7CisgICAgICAgIGlkOiB0ZXN0CisgICAgICAgIG5hbWU6ICJXZWJWaWV3TG9hZEZh
dkljb24iCisgICAgICAgIGZ1bmN0aW9uIHRlc3RfZmF2SWNvbkxvYWQoKSB7CisgICAgICAgICAg
ICBjb21wYXJlKHNweS5jb3VudCwgMCkKKyAgICAgICAgICAgIHRlc3RVcmwgPSBRdC5yZXNvbHZl
ZFVybCgiLi4vY29tbW9uL2Zhdmljb24uaHRtbCIpCisgICAgICAgICAgICB3ZWJWaWV3LmxvYWQo
dGVzdFVybCkKKyAgICAgICAgICAgIHNweS53YWl0KCkKKyAgICAgICAgICAgIGNvbXBhcmUoc3B5
LmNvdW50LCAxKQorICAgICAgICAgICAgY29tcGFyZShmYXZpY29uLnBhaW50ZWRXaWR0aCwgNDgp
CisgICAgICAgICAgICBjb21wYXJlKGZhdmljb24ucGFpbnRlZEhlaWdodCwgNDgpCisgICAgICAg
IH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0
L3Rlc3RzL3FtbHRlc3RzL2NvbW1vbi9iYXNpYy5wbmcgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL2NvbW1vbi9iYXNpYy5wbmcKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzU3
MTdjY2E1OGY5N2M3OWMzZDMyNGU4MzU3YjRjNGY3YjFlMTQ2NApHSVQgYmluYXJ5IHBhdGNoCmxp
dGVyYWwgMzk2MQp6Y21WLTw0fkZvR1ApPGg7M0t8TGswMDBlMU5KTFRxMDAxeG0wMDF4dTFeQHM2
Unw1SG0wMDAwNlZvT0l2MFI4fn0KejBSSFAzKVBldjIwMTBxTlMjdG1ZMDd3NzswN3c4diQhazZV
MDAwU2dhNnhBUDAwMXhtMDAxeG0maENzPzAwMGk2CnpOa2w8Wlh4YFBEWW1nalFiO3AxQS10TTBG
JmdeQCZeMihBZTI/OyVuMzleRmBJTXsmQUJSSXZJNmVmdk5LdGJZKQp6VD9VaG9QQHkwcHUyZXFj
VkZIMXxOdzdvbCEzQm1HTkZjX2J2VXhhO0VMI0d9KG5fK3RUSjM3enlSJFJYdVh9R2sKemJrRlNV
TClIclhnO1JCXmR3UDAke3tNVWE9aUorO1RVY3hQYnZFYjR4e3dlO0c8UjJRK3MoRmI/VGF2YTsj
YXZ3Cno4KSVzVm1UbWooLVVRdXJsWGBSQ3s8MzYjREZQfCpjRUM+NHZ6OzQ/cUZmbnR2YmtPcCNg
UzElVy1ePk9KS0Z9QAp6MDIrdT5afClud1RxPT1FQ1hqK3hza0B+ZUZXYyp1ZGZ6M3o+fDNvQjlt
P145JW9MMXBpYn1fVUhETGBNYEAtci0KelRjZU5JaDRGN1JNdmZuZFlQQUkqVDtXWVo+bjVecDAm
UyEyUF5zajV3KHEtQnk0ZXFQYlpfdV9IZUZUaj0tREM+Cno0bmQ+fDsrUDxjM0JzNjBuQ3YlIzI8
eStfKUo3WjE5fTcoc29EZyY0X2VBc0tDK2Q/a3dJRzxVMGdhU01sIyh6bgp6M1Z7XjcxbCtEYFpn
YClZRFNjKyFPSjc7dXhAJig5PUBQeztleHdPUG9kQXlfezN5bGBXQmYzcDVrfmt5QCleS2oKemtp
aiYkZyhDfHg0dHwhYykkYX1KR2lQVlZqP01hV2JCaz82Oyl7e0VYY2NOb0NiI1hYeyZONE8/LVpR
ZSZUPXtICnpjSUFxYzNJJjRMZkpuMmBUOHghdz4pO3JScVlSRXhJTVUhS2dIblA+OD58S0defDA5
ZVRPRSErZFpTZ3hfQm8jWAp6cj1qZEM5fnBjODdaWiFxWFhiJCM7MHF6KjdtfTItOWBOTm8qSXR6
Xl9DNEh7Yk5mNWAma0Y3NSQ+b2I9VG5CX2sKelU9dlVwdn00aTZwcGBAYE1YVV8yQlo7JmBETV9U
MDBremc1amdKPnJXdiVudE5gQ0lwOVd9TFpyTGdoNj5FRWp+Cno+V3glVmBqUUFWIVQwPmU+dSQ9
SCRgMUB3dlh4QGJYKUc0WlpneVVNOWJ2M25CZEBJYCkpTG53cHFuR0VsdGp0fAp6eXBqQCRLJlI2
fGFyKiEwRGp1WFVHbDtKKUU3ZGRJeDNHRH41SHE3Nk85X1pKSmEjUVAkcmxLS0ViUDheU0dMJmsK
enpeMnx9ckVCbWtqd19NRXA/YDJJOENUJnMzYipNPjtpPzJeQXsme3c1STluek1DeipURjltcG9p
MU5UMHg9UlBoCnpFRjNUM1JRNDczelVFSlcwPyt7emZoXnolQT5fSVUycTkhKSpSSX08YV9ASUhe
JWc3VDRRRnMxZiNXRXdjSWZUagp6aTBlMmw7RXQzeU59fCR6Qj9Zb01APV93REsmOEdrX2QpRCpW
Nl9YQDJlbkF8JjxWUXAkRmY7ei1qVXpfQHwjbDwKenJGNUdDbHhWLWVTX0dRWHNkUjdxPTBHSmsm
Xmg9IyU4QFBpYSZUdCY4NXx7KDVxQT5jc3RMUldIVVRjQUsjQnlvCno1WHR2VmlgKmB2TXVAZEJR
Yn5qbTxUX2BgPG0jQGZZYDhQSztxdDkxXyMlKTgrP0FOdWloIShLe258R2NKQDJhaQp6Tz47c3lZ
SDQmR01KNmk8P0JqZ3ZLbUx9WmhhU1RiJVlqUU5UWSNtSVpReG1ReiskUDNKUFh0MVIoPlM7ViMk
fU0KenV1Zk9tLVQwQ31PRjxWPlVuTTJFI15eaTZhYF8pTl83Xmdsb0p9c1NCI3g3flFpQEQ1IXRI
I1RsZihEKGdLdklgCnpJMF9TPjImNGRuTkVTcnRlZ1pydDAkMit7NyFzPS1RfkIjelk/NFQyPWox
fDRAbzh8JW57ciFUYGlmTE9jXzZuawp6M00oVFpkdFVqNS18T3E+OW42LTtsSktpVSZ4d1Etancy
R3VEMWxlMyhKJSklY0pOMXR3bmI+V05YM2R7YVVBMV4KejBuTUA9ZCExbGFrfjN7cHRFMlpjVU5s
PkJkeHF7eGFwcUVBbUoyTmMmRGwxVz9ZTl91aSMjX0lyTHQmTm1jKnF9CnoycV9SVShYNSpfT3BU
dk4kfTZQZVNaTmsoRXEpamgjX19VbV43V0grYmsmdzNwd2lyTlZoWTh4ZlkrVmZ4Y1NPLQp6PGVM
UFhDaWVDU2kyUlAxX1llZXxeNXlaQ1pifGhtOWZmakxRVTxOMEtKVmdKR3gmPWNzJmd8MGVqU0Bt
WHhSMygKenZuN21VPk9wYHVkS3BDLUV6LSRSdkwjdzBGUGp4aU53VEZtVClrTHVkTiNkMiNwPE81
VHRFc1RNRWdXMGF7MlB4CnpEZ35LJGF2PSFXKGt3IXRMe2Q/TCppYiFwNzVsRHhCY1YwflZOOWxA
NldsQ2U3LU91KFQ3JDhNRDJsMjEwYnZ4Uwp6JEQ1d35WYnw8Vyp8Pjg4RFBeaVBuTXtoPkItS2g5
R1R1QjwrPFBQTkZEZFk0NW0talJEXiVXQnM7cVM8bUhlci0KejdSUisxVGN5JUIwNGtGJSs5TGNZ
TFRpSUkyR013b09uNHJsV0FjdEIlNCNDbDVhJGZCKjJMTz93UkNpeHJDZjBtCnpOZG1AIyhHc0gt
K1BMVzA1Ty1EeSElVFBBJWVMUntOTF5RczQ4NSRaJnJPRDNgfVh+KHBMRSp3RkMtZ3RuR1VSLQp6
T0p2WC1GI31wP3ROfip6cjQxKX1eeD1QSnw2QmVyMSo4Y2hqVVIrOEhobFVza01vPGFvI2YpPzBf
QW1fWEZUWTkKelNNeVYmVzt5V2lvRFYjK0VDUUt+bXFSI00zJnZXNjBja0E4N19iczYoKG8hbiVe
IyFnTT5OOGFTYGVobTx0U09LCnpEYWhwSEkpTUZocm5TTHUjM2RsTk00K2R+aT9rNlpwQzJXK2FF
eDMmT0QzRGFiRGJvNHJObWZHOTdsdjwjTFBePAp6PG4lUGMlTWdafEZpdCR1OGdxJHZzYWppPDV8
e1J5Km17NiE1aCE8RShjQChiMklDWCE3KGVoYUhZU1B7UE5iNjMKekNLM3MwWkxuJlo+NHxZVmBa
Zn44Rjx+NE4jaE5KQVQ8aigoangzTFRkeT0zMz8qZ1pmRV5fez9QY0UrKitMbVlRCnpvK0E2LSlY
VUo7e0NhcV9SaVdWZ1Q7TnxXSkJ5ZEc3JnNgJHB0V2YmekxHVkpYaktWb0xLK1BwRkd8MkN3fnxS
Tgp6eWJ5dXNqQDlfYktSd1IqNXI1aDdTfmNkXyEzQjtUVDtNelJrOCNzYDI2Km9zbXRRekNIdEJl
QGdnU3JiT2UybSQKenlXYGRHTGgwQWluQXVIcnMrWjhXI0YwKXNQRiUrdHRxb3lYZnI5a0RIJSFT
fmhgPlclOV81cF85JHAyMHI1UilTCno/cE1kU2B5R2R2OFZAY29fUX1Sc3t6RFVtayFKNTNLOFRX
bmBySV4hQU5eTkt7WkZCVDB6cktUTFl5YUM5dzdgbQp6a0Aqc1NsdD9GeGJRKzB4JV5XIVQ8Tl48
VntgdUElQWNTRCtvKzRONUR6YXJ+ZiFjaGA+N3pCQ3s+ZCFXKjxgakoKemY4T1dzS1lFPE1kU0s3
bUYjemk8SjBRZmx4JXJ0NWBDPXVSKzYhZk4tU3xOY3xJZz5+M2Q4aGxlaWZDMEVqKWt0CnowRn1X
YCRRMUJ7aClBYWlvT1VFdU1qJlZ5Pyl7NzdFJTJwSW0kJHJza2tgTCtVfEZAJitPandvXk0kYDA9
OSE8Jgp6MGRWXjBCTERlc3F4fDtvWihOZl5kIyRyXnU9d0VBeG8yWlBPeGhzekFWTXBURUJGNWFl
c3Y0dUMhZlQ0MXFRRmEKem5hKFRzKEZtZm5eTl9TcXszd2FRTiY7WDE7c3xxLTVkY2FGLWgyQmQt
dHp2elcjRz9gX311eHtnRk80eDB3MkczCnpDKUBYeW1WVz1Hdih5JXJ1YzNyVUF8UnBGcWNyalMj
NiMyUGVsaFFkNSVuTlVOclklOCVqTnEmSzxEPUJsVmZTQwp6cjBJVH0ya0NPNi1IdHBsLWBkfU1V
NHtLYD9wXmwlYDRPS18tRkFmT0BzTjh6YWV8K0llfkxmKT5+PnIpQXNHNkcKenIrKy1SQV9zKDc2
QGx2VUJPXzZ4eD1eZHZYYW9fQkFmejVkRz1obEdOfU9fazB6TV96MWZMS3xgI3tsaDBAbEZqCno9
fD0xR3dYZj8mSWJzI35nXyRIbSoyME9XN3dPc0h2MmpiVGI+OHNkI1MySEVFaCk1I3tJNSlwOVAl
NHNvUHRrQwp6KUxVY3tAQyVkQVFKczhfaDk5PE9WTHdVO3dNKiNTbkZkaXtUSnFWdHIqdUteTGNr
NGc+KkwrR1p2dFRSanphNikKems+VURzMCU/Y2FTeEkyLSpwWXUwUFViX2h2VkF9fS1xTU9SSjs3
S0BGI2FVNmBWKjlAUUghQD5Icnp+WEE8YHpECnokZCllWmN9cnR0RXFFRVJDaXYjfVQzZnUjSSto
X1RCaGJ0UDdSUEo0SzdVVmJeb2Qlfm1keTFhV08zPmd3RyY/Xwp6QU9EZDQ0UCo1N1NMeUZRajJM
fHctPih6SnQ5d3RxOCM4M3szUHxldnZ4bG44JnFTKzZ6Rzt0c1Z9a3FzPGBlKkAKempARFlvU0le
QXAxaVJ2PjBpdU94OT1xUXhqR1Y3bSN9bG5Eb0ZfVzxINDMhezg1JWY5VXdAVENBdyF7JXB8ZXg0
CnpkRlU3Jkd5amM8OD8wcjZvMHFpd187O3IkUmFgY3VmVFJAY2V7KE5nZU9+TEZNOzwpUz1sPVd6
cW88WitiTEZuVwp6dlRMUn11JCh7fDFxfXF6KVhEZUF2QnplRGBhRWpsZC1RYzNybjc2N1kqdnhV
eTUjYTEzZEpuPkxXV1hGYT5lRmgKeiVKYmh4Kmt+MWpVRHFydm5WKWBxbU0wI1c9SShvVXZpcTdj
SEB2Tm4rZGdweHBaeE9mV2g4JDVVc0xFZihQRStHCnp1KGhxTXclYn1fR2VCNUJiXk4kbDgyQGx+
PmM/fUk5QzJKZzNlbWRwYzNuai1AOFA3a25YVV9pe2xuenZmNDFzXgp6QEJIdShlUz97RmtsPjQt
OHM+KSZQNE15MD9je3hUWk58JDtgVVckNl4yQHVhXm13YSZmNzUjaD0pV3d4Q1ZeR0cKelFFUk9n
TFREZ1pKYkxodjtAO3hsaz87QX54UE5fbHpWO2omZFBoLT9DSmFUb0huUE5WdmhZKFghaV5fTStM
fXdJCno5S2xFYWRLO2hsenxZYUtDR1pYUmVmQVdPSmIwZDYqTDFNYHN0KUYrTCFOIUFOQEZvejEj
KSZXPFUrUCliSnRwSAp6KHpiU0VAdEZmKEQoIWdyZ2t2fHtRfC1RPyVieigtZXJsTUAyRkd3KiF8
PHVpNyhCfVBiN1pfcFZvQFklQ0A7NWQKemRyUTNnazJtcSk3ZSl5RXFeekRmVWdPTzE4c0IrZmoy
RSY7emNFMjN0R00tfW83V3x3cmZISWc0RTVAPGdXdUJVCnpoSlFDWl8xSVY+SkVHYjBUTnl0MDNR
bkZGcHFrc3FlQW1zNEBwP3cqVXEhdXEtMzJmQj0zNTgoKVAxe2ApJVVlNQp6bl4jPGFPSjZHfDk5
TDRUeGEqST1OK3wpPE14SCg3JX1tXnMrMWp7TUVGUytJenB8Jj9DfEBuRGExbFYxOVV7c08KemFX
VDk2Qj9VaEhsfEI2TXAkVSMzc3h0YXFnVn45WVkrbGtja1lRK1JvfnZLbyR4SFdAbkgmcWE9T2Uj
aHxDQFRiCno8K2l+fkJoV15vRE19bUdXXzlAVmszUXttX1RIRDwoenNpPWBCejJ4amhAYUE2Xisq
a0h0RzA/aWAqUzVDQWpoSgp6e29NSFdlZ052IzdeeV5Tekd6ekNWMjAwcmJ1VjY0RV43Kn1vNF5W
WiYxYnFnb31HLVV2cD19WSZGM3JMOzEjY04KeiReKjl1PD9nYTdpKkBvcz5Vc3cmR3gtSDlVJURg
aW04NGR9VGkyOE5IYVJzKExfaVNMPndZd1I8WGRwJGR3fVBaCnp5U2tsWGNfOUN+KHg7KHRgRmFX
YkR6QCVkNFZzZ2o1VFpIUiNVJU9CWjEtajJgSSV9d0tRcm9BVW93MikrcXorbAp6YjwlcysjRjlN
PT19YW9IMCtEVnA+OSttY1JXSmFvS3tlYG4xVFpoZ2xYXndsbGxzKU5LIXYySS0+aGA0Kjl1dHYK
emd1ZVlyZWU7fFBqJF8tXzJXRFQ0Y09fUTdjQ2VDXldiT0FQUj1xRUEzNGgobiQ2dHhTOGYwaUFi
Z3tRcFVYKFhoCnp7dlN6QHJvVzJ1aXFRWjcwM34hcVNhZjRAV25wdz5FbzVQSVdkSmZURmdZelRG
ZkF9T1I1M08+R0JyOWRHQWw3Swp6SXhzTEFHPUJMMjAwMVIpTU9idWdaKTltXmNgYW1OYlklY0NG
ZmNoU0YpJUdLSEI+UCtJeDttbkZmdURLRmdoP1cKVE1USDI+MDAwMDBOa3ZYWHUwbWpmNFJOVygK
CmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvY29tbW9uL2Zhdmljb24uaHRtbCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvY29tbW9uL2Zhdmljb24uaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4xZDY4YjExMDcyMzc2ZWQ4ZTM4MTEyMTRhNjA1YjEwOTlmNDgxMGVjCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9x
bWx0ZXN0cy9jb21tb24vZmF2aWNvbi5odG1sCkBAIC0wLDAgKzEsMTEgQEAKKzxodG1sPgorPGhl
YWQ+Cis8dGl0bGU+SWNvbiBpcyBub3QgbG9hZGluZy48L3RpdGxlPgorPGxpbmsgdHlwZT0iaW1h
Z2UvcG5nIiBocmVmPSJiYXNpYy5wbmciIHNpemVzPSI2NHg2NCIgcmVsPSJpY29uIiAvPgorPHN0
eWxlPgorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorWW91IGNhbiBvbmx5IHNlZSB0aGlzIGlj
b24gaWYgeW91IG9wZW4gdGhpcyBwYWdlIHRocm91Z2ggaHR0cCBvciBodHRwcyBwcm90b2NvbC4K
KzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvdGVzdHMvcW1sdGVzdHMvcW1sdGVzdHMucHJvIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9xbWx0ZXN0cy5wcm8KaW5kZXggMjY5ZGE3NGM5ODI3
MTFhOGNiZjA1ZmQyMjYxNzQ3YWIyZDA5YmFjYy4uNzg3N2YzZjM0ODA3MzcyMDc0YjY2ZmE5OTMw
ODFjZDY3MGExNTMxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC90ZXN0cy9xbWx0ZXN0cy9xbWx0ZXN0cy5wcm8KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9xbWx0ZXN0cy5wcm8KQEAgLTIxLDYgKzIxLDcgQEAg
T1RIRVJfRklMRVMgKz0gXAogICAgIFdlYlZpZXcvdHN0X2xvYWRQcm9ncmVzc1NpZ25hbC5xbWwg
XAogICAgIFdlYlZpZXcvdHN0X2xvYWRaZXJvU2l6ZVZpZXcucW1sIFwKICAgICBXZWJWaWV3L3Rz
dF9wcmVmZXJlbmNlcy5xbWwgXAorICAgIFdlYlZpZXcvdHN0X2Zhdkljb25Mb2FkLnFtbCBcCiAg
ICAgRGVza3RvcEJlaGF2aW9yL3RzdF9saW5rSG92ZXJlZC5xbWwgXAogICAgIERlc2t0b3BCZWhh
dmlvci90c3RfbWVzc2FnaW5nLnFtbCBcCiAgICAgRGVza3RvcEJlaGF2aW9yL3RzdF9kb3dubG9h
ZC5xbWwgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQu
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmgKaW5kZXggYzU3YTY3YmM3
ZjkxODM1MGViYmY5NmE3NzU4N2I4YThiY2JmOTBlMS4uMGJmZWFlYzhhM2Q4M2ExYmFlYjgyMGMx
ZjhjMDI2M2VlMTFkNmU1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YkNvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5oCkBA
IC0xNzEsNiArMTcxLDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0SWNvbkRhdGFiYXNlUGF0aChj
b25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHNldExvY2FsU3RvcmFnZURpcmVjdG9yeShjb25zdCBT
dHJpbmcmIGRpcikgeyBtX292ZXJyaWRlTG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gZGlyOyB9CiAK
KyAgICBTdHJpbmcgaWNvbkRhdGFiYXNlUGF0aCgpIGNvbnN0OworCiAgICAgU3RyaW5nIG92ZXJy
aWRlV2ViSW5zcGVjdG9yQmFzZURpcmVjdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcnJpZGVX
ZWJJbnNwZWN0b3JCYXNlRGlyZWN0b3J5OyB9CiAgICAgdm9pZCBzZXRPdmVycmlkZVdlYkluc3Bl
Y3RvckJhc2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKSB7IG1fb3ZlcnJpZGVXZWJJbnNw
ZWN0b3JCYXNlRGlyZWN0b3J5ID0gcGF0aDsgfQogCkBAIC0yMzQsNyArMjM2LDYgQEAgcHJpdmF0
ZToKICAgICBTdHJpbmcgZGF0YWJhc2VEaXJlY3RvcnkoKSBjb25zdDsKICAgICBTdHJpbmcgcGxh
dGZvcm1EZWZhdWx0RGF0YWJhc2VEaXJlY3RvcnkoKSBjb25zdDsKIAotICAgIFN0cmluZyBpY29u
RGF0YWJhc2VQYXRoKCkgY29uc3Q7CiAgICAgU3RyaW5nIHBsYXRmb3JtRGVmYXVsdEljb25EYXRh
YmFzZVBhdGgoKSBjb25zdDsKIAogICAgIFN0cmluZyBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKSBj
b25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9DbGllbnRJbXBs
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9DbGllbnRJbXBsLmNwcAppbmRleCA4
MDJlZGU2ZDYxMzc3MGI2OTEwYTZlM2ZkYzdlYWIzYWVlMGI3NjlhLi5lZDI4YmJjM2YzNTk5ODBj
NDI5OTA4MzkwNmI2OTY0NDE3MGRlYzkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvQ2xpZW50SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0
L0NsaWVudEltcGwuY3BwCkBAIC0yMSwxMiArMjEsMTMgQEAKICNpbmNsdWRlICJDbGllbnRJbXBs
LmgiCiAKICNpbmNsdWRlICJRdFdlYkVycm9yLmgiCi0jaW5jbHVkZSAiV2ViRnJhbWVQcm94eS5o
IgogI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgogI2luY2x1ZGUgIldLU3RyaW5nUXQuaCIKICNpbmNs
dWRlICJXS1VSTFF0LmgiCisjaW5jbHVkZSAiV2ViRnJhbWVQcm94eS5oIgogI2luY2x1ZGUgPFF0
UG9saWN5SW50ZXJmYWNlLmg+CiAjaW5jbHVkZSA8UXRWaWV3SW50ZXJmYWNlLmg+CisjaW5jbHVk
ZSA8UXRXZWJJY29uRGF0YWJhc2UuaD4KICNpbmNsdWRlIDxRdFdlYlBhZ2VQcm94eS5oPgogI2lu
Y2x1ZGUgPFdLQXJyYXkuaD4KICNpbmNsdWRlIDxXS0ZyYW1lLmg+CkBAIC02MCw2ICs2MSwxMiBA
QCBzdGF0aWMgaW5saW5lIFF0UG9saWN5SW50ZXJmYWNlKiB0b1F0UG9saWN5SW50ZXJmYWNlKGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UXRQb2xp
Y3lJbnRlcmZhY2UqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSk7CiB9CiAKK3N0YXRp
YyBpbmxpbmUgUXRXZWJJY29uRGF0YWJhc2UqIHRvUXRXZWJJY29uRGF0YWJhc2UoY29uc3Qgdm9p
ZCogY2xpZW50SW5mbykKK3sKKyAgICBBU1NFUlQoY2xpZW50SW5mbyk7CisgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8UXRXZWJJY29uRGF0YWJhc2UqPihjb25zdF9jYXN0PHZvaWQqPihjbGll
bnRJbmZvKSk7Cit9CisKIHN0YXRpYyB2b2lkIGRpc3BhdGNoTG9hZFN1Y2NlZWRlZChXS0ZyYW1l
UmVmIGZyYW1lLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewogICAgIGlmICghV0tGcmFtZUlz
TWFpbkZyYW1lKGZyYW1lKSkKQEAgLTE2Myw2ICsxNzAsMTIgQEAgc3RhdGljIGJvb2wgcXRfd2tf
cnVuSmF2YVNjcmlwdENvbmZpcm0oV0tQYWdlUmVmLCBXS1N0cmluZ1JlZiBtZXNzYWdlLCBXS0Zy
YW1lUmUKICAgICByZXR1cm4gdG9RdFZpZXdJbnRlcmZhY2UoY2xpZW50SW5mbyktPnJ1bkphdmFT
Y3JpcHRDb25maXJtKHFNZXNzYWdlKTsKIH0KIAorc3RhdGljIHZvaWQgcXRfd2tfaWNvbkRhdGFi
YXNlRGlkQ2hhbmdlSWNvbkZvclBhZ2VVUkwoV0tJY29uRGF0YWJhc2VSZWYgaWNvbkRhdGFiYXNl
LCBXS1VSTFJlZiBwYWdlVVJMLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIFFVcmwg
cVVybCA9IFdLVVJMQ29weVFVcmwocGFnZVVSTCk7CisgICAgdG9RdFdlYkljb25EYXRhYmFzZShj
bGllbnRJbmZvKS0+cmVxdWVzdEljb25JZEZvclBhZ2VVUkwocVVybCk7Cit9CisKIHN0YXRpYyBp
bmxpbmUgV0tTdHJpbmdSZWYgY3JlYXRlTnVsbFdLU3RyaW5nKCkKIHsKICAgICBSZWZQdHI8V2Vi
U3RyaW5nPiB3ZWJTdHJpbmcgPSBXZWJTdHJpbmc6OmNyZWF0ZU51bGwoKTsKQEAgLTM1MywzICsz
NjYsMTMgQEAgdm9pZCBzZXR1cENvbnRleHRJbmplY3RlZEJ1bmRsZUNsaWVudChXS0NvbnRleHRS
ZWYgY29udGV4dCkKICAgICBpbmplY3RlZEJ1bmRsZUNsaWVudC5kaWRSZWNlaXZlTWVzc2FnZUZy
b21JbmplY3RlZEJ1bmRsZSA9IHF0X3drX2RpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVu
ZGxlOwogICAgIFdLQ29udGV4dFNldEluamVjdGVkQnVuZGxlQ2xpZW50KGNvbnRleHQsICZpbmpl
Y3RlZEJ1bmRsZUNsaWVudCk7CiB9CisKK3ZvaWQgc2V0dXBJY29uRGF0YWJhc2VDbGllbnQoUXRX
ZWJJY29uRGF0YWJhc2UqIHF0V2ViSWNvbkRhdGFiYXNlLCBXZWJJY29uRGF0YWJhc2UqIHdlYklj
b25EYXRhYmFzZSkKK3sKKyAgICBXS0ljb25EYXRhYmFzZUNsaWVudCBpY29uRGF0YWJhc2VDbGll
bnQ7CisgICAgbWVtc2V0KCZpY29uRGF0YWJhc2VDbGllbnQsIDAsIHNpemVvZihXS0ljb25EYXRh
YmFzZUNsaWVudCkpOworICAgIGljb25EYXRhYmFzZUNsaWVudC52ZXJzaW9uID0ga1dLSWNvbkRh
dGFiYXNlQ2xpZW50Q3VycmVudFZlcnNpb247CisgICAgaWNvbkRhdGFiYXNlQ2xpZW50LmNsaWVu
dEluZm8gPSBxdFdlYkljb25EYXRhYmFzZTsKKyAgICBpY29uRGF0YWJhc2VDbGllbnQuZGlkQ2hh
bmdlSWNvbkZvclBhZ2VVUkwgPSBxdF93a19pY29uRGF0YWJhc2VEaWRDaGFuZ2VJY29uRm9yUGFn
ZVVSTDsKKyAgICBXS0ljb25EYXRhYmFzZVNldEljb25EYXRhYmFzZUNsaWVudCh0b0FQSSh3ZWJJ
Y29uRGF0YWJhc2UpLCAmaWNvbkRhdGFiYXNlQ2xpZW50KTsKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9DbGllbnRJbXBsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvQ2xpZW50SW1wbC5oCmluZGV4IDRlZjg5NzVjZGY3Njg1ZmE4M2RkODlhMzYyMjY4
YTlmYjU4NTk2MmQuLjZjZmEyZmU0ZTM3MGViYjI2ZDQ4OTE4YzU5N2E5M2Y1YmQ3NTk0NDIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9DbGllbnRJbXBsLmgKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0NsaWVudEltcGwuaApAQCAtMjMsMTYgKzIzLDE4
IEBACiAjaW5jbHVkZSA8V2ViS2l0Mi9XS0NvbnRleHQuaD4KIAogY2xhc3MgUXRXZWJQYWdlUHJv
eHk7CitjbGFzcyBRdFdlYkljb25EYXRhYmFzZTsKIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3Mg
UXRQb2xpY3lJbnRlcmZhY2U7CiBjbGFzcyBXZWJQYWdlUHJveHk7CitjbGFzcyBXZWJJY29uRGF0
YWJhc2U7CiB9CiAKIHZvaWQgc2V0dXBQYWdlTG9hZGVyQ2xpZW50KFF0V2ViUGFnZVByb3h5Kiwg
V2ViS2l0OjpXZWJQYWdlUHJveHkqKTsKIHZvaWQgc2V0dXBQYWdlVWlDbGllbnQoUXRXZWJQYWdl
UHJveHkqLCBXZWJLaXQ6OldlYlBhZ2VQcm94eSopOwogdm9pZCBzZXR1cFBhZ2VQb2xpY3lDbGll
bnQoV2ViS2l0OjpRdFBvbGljeUludGVyZmFjZSosIFdlYktpdDo6V2ViUGFnZVByb3h5Kik7Cit2
b2lkIHNldHVwSWNvbkRhdGFiYXNlQ2xpZW50KFF0V2ViSWNvbkRhdGFiYXNlKiwgV2ViS2l0OjpX
ZWJJY29uRGF0YWJhc2UqKTsKIAogdm9pZCBzZXR1cENvbnRleHRJbmplY3RlZEJ1bmRsZUNsaWVu
dChXS0NvbnRleHRSZWYpOwogCiAjZW5kaWYgLyogQ2xpZW50SW1wbF9oICovCi0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYkljb25EYXRhYmFzZS5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJJY29uRGF0YWJhc2UuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjJhMmJjMzZjZDY1YzljOTVjNGU0YWQyNzk1ZDQ0MGE0OGM5MDVlMDEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJJY29uRGF0YWJhc2UuY3Bw
CkBAIC0wLDAgKzEsMTE1IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiUXRXZWJJY29uRGF0YWJhc2UuaCIKKworI2luY2x1ZGUgIkNsaWVudElt
cGwuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJT
aGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJXZWJDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViSWNv
bkRhdGFiYXNlLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCitRdFdlYkljb25E
YXRhYmFzZSogUXRXZWJJY29uRGF0YWJhc2U6OmNyZWF0ZShXZWJDb250ZXh0KiBjb250ZXh0KQor
eworICAgIHJldHVybiBuZXcgUXRXZWJJY29uRGF0YWJhc2UoY29udGV4dCk7Cit9CisKK1F0V2Vi
SWNvbkRhdGFiYXNlOjpRdFdlYkljb25EYXRhYmFzZShXZWJDb250ZXh0KiBjb250ZXh0KQorICAg
IDogbV9sYXN0SWNvbklkKDApCit7CisgICAgLy8gRklYTUU6IHRoaXMgc2V0dGVyIGRvZXNuJ3Qg
b25seSBzZXQgdGhlIGljb24gZGF0YWJhc2UgcGF0aCwgYnV0IGl0IGFsc28KKyAgICAvLyB0cmln
Z2VyIHRoZSBzdGFydHVwIG9mIFdlYkNvbnRleHQncyBXZWJJY29uRGF0YWJhc2UuIFRoZSBnZXR0
ZXIgd2lsbCByZXR1cm4KKyAgICAvLyB0aGUgZGVmYXVsdCBwbGF0Zm9ybSBwYXRoIGFuZCB3aWxs
IHN0YXJ0IFdlYkljb25EYXRhYmFzZSB3aXRoIGl0LgorICAgIGNvbnRleHQtPnNldEljb25EYXRh
YmFzZVBhdGgoY29udGV4dC0+aWNvbkRhdGFiYXNlUGF0aCgpKTsKKyAgICBtX2ljb25EYXRhYmFz
ZSA9IGNvbnRleHQtPmljb25EYXRhYmFzZSgpOworICAgIHNldHVwSWNvbkRhdGFiYXNlQ2xpZW50
KHRoaXMsIG1faWNvbkRhdGFiYXNlKTsKK30KKworUXRXZWJJY29uRGF0YWJhc2U6On5RdFdlYklj
b25EYXRhYmFzZSgpCit7Cit9CisKK1FQaXhtYXAgUXRXZWJJY29uRGF0YWJhc2U6Omljb25JbWFn
ZUZvclBhZ2VVUkwoY29uc3QgUVVybCYgcGFnZVVSTCkKK3sKKyAgICBTdHJpbmcgdXJsID0gV2Vi
Q29yZTo6S1VSTChwYWdlVVJMKS5zdHJpbmcoKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2U+
IGltYWdlID0gbV9pY29uRGF0YWJhc2UtPmltYWdlRm9yUGFnZVVSTCh1cmwpOworICAgIGlmICgh
aW1hZ2UpCisgICAgICAgIHJldHVybiBRUGl4bWFwKCk7CisKKyAgICBRUGl4bWFwKiBuYXRpdmVJ
bWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIGlmICghbmF0
aXZlSW1hZ2UpCisgICAgICAgIHJldHVybiBRUGl4bWFwKCk7CisKKyAgICByZXR1cm4gbmF0aXZl
SW1hZ2UtPmNvcHkoKTsKK30KKwordm9pZCBRdFdlYkljb25EYXRhYmFzZTo6cmVxdWVzdEljb25J
ZEZvclBhZ2VVUkwoY29uc3QgUVVybCYgdXJsKQoreworCisgICAgUVBpeG1hcCBpY29uID0gaWNv
bkltYWdlRm9yUGFnZVVSTCh1cmwpOworICAgIGlmIChpY29uLmlzTnVsbCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpbnQgaWNvbklkID0gZ2V0TmV4dEF2YWlsYWJsZUljb25JZCgpOworICAg
IG1fcGl4bWFwRm9ySWNvbklkW2ljb25JZF0gPSBpY29uOworICAgIGVtaXQgaWNvbklkUmVhZHlG
b3JQYWdlVVJMKGljb25JZCwgdXJsKTsKK30KKworUVBpeG1hcCBRdFdlYkljb25EYXRhYmFzZTo6
aWNvbkltYWdlRm9ySWNvbklkKGludCBpZCkgY29uc3QKK3sKKyAgICBRTWFwPGludCwgUVBpeG1h
cD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9waXhtYXBGb3JJY29uSWQuZmluZChpZCk7CisgICAg
aWYgKGl0ID09IG1fcGl4bWFwRm9ySWNvbklkLmNvbnN0RW5kKCkpCisgICAgICAgIHJldHVybiBR
UGl4bWFwKCk7CisKKyAgICByZXR1cm4gaXQudmFsdWUoKTsKK30KKwordm9pZCBRdFdlYkljb25E
YXRhYmFzZTo6cmV0YWluSWNvbklkKGludCBpZCkKK3sKKyAgICBRTWFwPGludCwgaW50Pjo6aXRl
cmF0b3IgaXQgPSBtX3JldGFpbkNvdW50Rm9ySWNvbklkLmZpbmQoaWQpOworICAgIGlmIChpdCAh
PSBtX3JldGFpbkNvdW50Rm9ySWNvbklkLmVuZCgpKSB7CisgICAgICAgIGl0LnZhbHVlKCkrKzsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX3JldGFpbkNvdW50Rm9ySWNvbklkW2lkXSA9
IDE7Cit9CisKK3ZvaWQgUXRXZWJJY29uRGF0YWJhc2U6OnJlbGVhc2VJY29uSWQoaW50IGlkKQor
eworICAgIFFNYXA8aW50LCBpbnQ+OjppdGVyYXRvciBpdCA9IG1fcmV0YWluQ291bnRGb3JJY29u
SWQuZmluZChpZCk7CisgICAgaWYgKGl0ID09IG1fcmV0YWluQ291bnRGb3JJY29uSWQuZW5kKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChpdC52YWx1ZSgpID09IDEpIHsKKyAgICAgICAg
bV9yZXRhaW5Db3VudEZvckljb25JZC5yZW1vdmUoaWQpOworICAgICAgICBtX3BpeG1hcEZvcklj
b25JZC5yZW1vdmUoaWQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaXQudmFsdWUo
KS0tOworfQorCitpbnQgUXRXZWJJY29uRGF0YWJhc2U6OmdldE5leHRBdmFpbGFibGVJY29uSWQo
KQoreworICAgIC8vIEZJWE1FOiBSZXVzZSBpZHMgdG8gYXZvaWQgb3ZlcmZsb3cuCisgICAgcmV0
dXJuICsrbV9sYXN0SWNvbklkOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L1F0V2ViSWNvbkRhdGFiYXNlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQv
UXRXZWJJY29uRGF0YWJhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NDZkMTE2MjQ2YjRhMGZhOTAzYjhjYjYx
OWU5NzQ5ZWQzNGU5YTMyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L1F0V2ViSWNvbkRhdGFiYXNlLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAgICBDb3B5
cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorKi8KKworCisjaWZuZGVmIFF0V2ViSWNvbkRhdGFiYXNlX2gKKyNkZWZpbmUgUXRXZWJJY29u
RGF0YWJhc2VfaAorCisjaW5jbHVkZSAiV0tJY29uRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJxd2Vi
a2l0Z2xvYmFsLmgiCisjaW5jbHVkZSA8UXRDb3JlL1FNYXA+CisjaW5jbHVkZSA8UXRDb3JlL1FP
YmplY3Q+CisjaW5jbHVkZSA8UXRDb3JlL1FVcmw+CisjaW5jbHVkZSA8UXRHdWkvUVBpeG1hcD4K
KworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJDb250ZXh0OworY2xhc3MgV2ViSWNvbkRh
dGFiYXNlOworfQorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitjbGFzcyBRdFdlYkljb25E
YXRhYmFzZSA6IHB1YmxpYyBRT2JqZWN0IHsKKyAgICBRX09CSkVDVAorCitwdWJsaWM6CisgICAg
c3RhdGljIFF0V2ViSWNvbkRhdGFiYXNlKiBjcmVhdGUoV2ViQ29udGV4dCopOworICAgIH5RdFdl
Ykljb25EYXRhYmFzZSgpOworCisgICAgUVBpeG1hcCBpY29uSW1hZ2VGb3JJY29uSWQoaW50IGlk
KSBjb25zdDsKKyAgICBRUGl4bWFwIGljb25JbWFnZUZvclBhZ2VVUkwoY29uc3QgUVVybCYpOwor
ICAgIHZvaWQgcmV0YWluSWNvbklkKGludCBpZCk7CisgICAgdm9pZCByZWxlYXNlSWNvbklkKGlu
dCBpZCk7CisKK3B1YmxpYyBRX1NMT1RTOgorICAgIHZvaWQgcmVxdWVzdEljb25JZEZvclBhZ2VV
UkwoY29uc3QgUVVybCYpOworCitwdWJsaWM6CisgICAgUV9TSUdOQUwgdm9pZCBpY29uSWRSZWFk
eUZvclBhZ2VVUkwoaW50LCBjb25zdCBRVXJsJik7CisKK3ByaXZhdGU6CisgICAgaW50IGdldE5l
eHRBdmFpbGFibGVJY29uSWQoKTsKKworICAgIFF0V2ViSWNvbkRhdGFiYXNlKFdlYkNvbnRleHQq
KTsKKyAgICBXZWJJY29uRGF0YWJhc2UqIG1faWNvbkRhdGFiYXNlOworICAgIFFNYXA8aW50LCBR
UGl4bWFwPiBtX3BpeG1hcEZvckljb25JZDsKKyAgICBRTWFwPGludCwgaW50PiBtX3JldGFpbkNv
dW50Rm9ySWNvbklkOworICAgIGludCBtX2xhc3RJY29uSWQ7Cit9OworCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VQcm94eS5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuY3BwCmluZGV4IDM1NjRk
ZDZiNmQ4MmIwODE1MDc0NmQ4ZDYyMjFkZDUzNTM0YjEzNDMuLmVmN2MxNDZlYzIyNjIwYWMyYzgy
MTdjZmRhYjI2NTVhN2JkYjMzNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9xdC9RdFdlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0
L1F0V2ViUGFnZVByb3h5LmNwcApAQCAtMjEsMTcgKzIxLDkgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJRdFdlYlBhZ2VQcm94eS5oIgogCi0jaW5jbHVkZSAiUXRXZWJFcnJvci5o
IgotI2luY2x1ZGUgInF3ZWJkb3dubG9hZGl0ZW0uaCIKLSNpbmNsdWRlICJxd2ViZG93bmxvYWRp
dGVtX3AuaCIKLSNpbmNsdWRlICJxd2VicHJlZmVyZW5jZXMuaCIKLSNpbmNsdWRlICJxd2VicHJl
ZmVyZW5jZXNfcC5oIgotCiAjaW5jbHVkZSAiQ2xpZW50SW1wbC5oIgogI2luY2x1ZGUgIkRvd25s
b2FkUHJveHkuaCIKICNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5SW1wbC5oIgotI2luY2x1ZGUg
InF3a2hpc3RvcnkuaCIKLSNpbmNsdWRlICJxd2toaXN0b3J5X3AuaCIKICNpbmNsdWRlICJGaW5k
SW5kaWNhdG9yLmgiCiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgogI2luY2x1ZGUgIk11
dGFibGVBcnJheS5oIgpAQCAtNDIsMTcgKzM0LDI1IEBACiAjaW5jbHVkZSAiUXRQb2xpY3lJbnRl
cmZhY2UuaCIKICNpbmNsdWRlICJRdFZpZXdJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJRdFZpZXdw
b3J0SW50ZXJhY3Rpb25FbmdpbmUuaCIKKyNpbmNsdWRlICJRdFdlYkVycm9yLmgiCiAjaW5jbHVk
ZSAiUXRXZWJVbmRvQ29tbWFuZC5oIgorI2luY2x1ZGUgIldLSWNvbkRhdGFiYXNlLmgiCisjaW5j
bHVkZSAiV0tTdHJpbmdRdC5oIgorI2luY2x1ZGUgIldLVVJMUXQuaCIKICNpbmNsdWRlICJXZWJC
YWNrRm9yd2FyZExpc3QuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0LmgiCiAjaW5jbHVkZSAiV2Vi
Q29udGV4dE1lbnVQcm94eVF0LmgiCiAjaW5jbHVkZSAiV2ViRWRpdENvbW1hbmRQcm94eS5oIgog
I2luY2x1ZGUgIldlYkV2ZW50RmFjdG9yeVF0LmgiCiAjaW5jbHVkZSAiV2ViUG9wdXBNZW51UHJv
eHlRdC5oIgotI2luY2x1ZGUgIldLU3RyaW5nUXQuaCIKLSNpbmNsdWRlICJXS1VSTFF0LmgiCi0j
aW5jbHVkZSA8UUd1aUFwcGxpY2F0aW9uPgorI2luY2x1ZGUgInF3ZWJkb3dubG9hZGl0ZW0uaCIK
KyNpbmNsdWRlICJxd2ViZG93bmxvYWRpdGVtX3AuaCIKKyNpbmNsdWRlICJxd2VicHJlZmVyZW5j
ZXMuaCIKKyNpbmNsdWRlICJxd2VicHJlZmVyZW5jZXNfcC5oIgorI2luY2x1ZGUgInF3a2hpc3Rv
cnkuaCIKKyNpbmNsdWRlICJxd2toaXN0b3J5X3AuaCIKICNpbmNsdWRlIDxRR3JhcGhpY3NTY2Vu
ZU1vdXNlRXZlbnQ+CisjaW5jbHVkZSA8UUd1aUFwcGxpY2F0aW9uPgogI2luY2x1ZGUgPFFKU0Vu
Z2luZT4KICNpbmNsdWRlIDxRTWltZURhdGE+CiAjaW5jbHVkZSA8UVN0eWxlSGludHM+CkBAIC03
Myw2ICs3Myw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBSZWZQdHI8V2ViQ29udGV4
dD4gUXRXZWJQYWdlUHJveHk6OnNfZGVmYXVsdENvbnRleHQ7CiBSZWZQdHI8UXREb3dubG9hZE1h
bmFnZXI+IFF0V2ViUGFnZVByb3h5OjpzX2Rvd25sb2FkTWFuYWdlcjsKK1F0V2ViSWNvbkRhdGFi
YXNlKiBRdFdlYlBhZ2VQcm94eTo6c19pY29uRGF0YWJhc2U7CiAKIHVuc2lnbmVkIFF0V2ViUGFn
ZVByb3h5OjpzX2RlZmF1bHRQYWdlUHJveHlDb3VudCA9IDA7CiAKQEAgLTgyLDYgKzgzLDcgQEAg
UGFzc1JlZlB0cjxXZWJDb250ZXh0PiBRdFdlYlBhZ2VQcm94eTo6ZGVmYXVsdFdLQ29udGV4dCgp
CiAgICAgICAgIHNfZGVmYXVsdENvbnRleHQgPSBXZWJDb250ZXh0OjpjcmVhdGUoU3RyaW5nKCkp
OwogICAgICAgICBzZXR1cENvbnRleHRJbmplY3RlZEJ1bmRsZUNsaWVudCh0b0FQSShzX2RlZmF1
bHRDb250ZXh0LmdldCgpKSk7CiAgICAgICAgIHNfZG93bmxvYWRNYW5hZ2VyID0gUXREb3dubG9h
ZE1hbmFnZXI6OmNyZWF0ZShzX2RlZmF1bHRDb250ZXh0LmdldCgpKTsKKyAgICAgICAgc19pY29u
RGF0YWJhc2UgPSBRdFdlYkljb25EYXRhYmFzZTo6Y3JlYXRlKHNfZGVmYXVsdENvbnRleHQuZ2V0
KCkpOwogICAgIH0KICAgICByZXR1cm4gc19kZWZhdWx0Q29udGV4dDsKIH0KQEAgLTE2OCw2ICsx
NzAsOCBAQCBRdFdlYlBhZ2VQcm94eTo6flF0V2ViUGFnZVByb3h5KCkKICAgICAgICAgaWYgKCFz
X2RlZmF1bHRQYWdlUHJveHlDb3VudCkgewogICAgICAgICAgICAgc19kZWZhdWx0Q29udGV4dC5j
bGVhcigpOwogICAgICAgICAgICAgc19kb3dubG9hZE1hbmFnZXIuY2xlYXIoKTsKKyAgICAgICAg
ICAgIGRlbGV0ZSBzX2ljb25EYXRhYmFzZTsKKyAgICAgICAgICAgIHNfaWNvbkRhdGFiYXNlID0g
MDsKICAgICAgICAgfQogICAgIH0KICAgICBkZWxldGUgbV9oaXN0b3J5OwpAQCAtNTQzLDcgKzU0
Nyw3IEBAIHZvaWQgUXRXZWJQYWdlUHJveHk6OmZsYXNoQmFja2luZ1N0b3JlVXBkYXRlcyhjb25z
dCBWZWN0b3I8SW50UmVjdD4mKQogCiBXS1BhZ2VSZWYgUXRXZWJQYWdlUHJveHk6OnBhZ2VSZWYo
KSBjb25zdAogewotICAgIHJldHVybiB0b0FQSShtX3dlYlBhZ2VQcm94eS5nZXQoKSk7OworICAg
IHJldHVybiB0b0FQSShtX3dlYlBhZ2VQcm94eS5nZXQoKSk7CiB9CiAKIHZvaWQgUXRXZWJQYWdl
UHJveHk6OmRpZEZpbmRab29tYWJsZUFyZWEoY29uc3QgSW50UG9pbnQmIHRhcmdldCwgY29uc3Qg
SW50UmVjdCYgYXJlYSkKQEAgLTkxOSw0ICs5MjMsMzcgQEAgdm9pZCBRdFdlYlBhZ2VQcm94eTo6
ZmluZFpvb21hYmxlQXJlYUZvclBvaW50KGNvbnN0IFFQb2ludCYgcG9pbnQpCiAgICAgbV93ZWJQ
YWdlUHJveHktPmZpbmRab29tYWJsZUFyZWFGb3JQb2ludChwb2ludCk7CiB9CiAKK3ZvaWQgUXRX
ZWJQYWdlUHJveHk6OnJlcXVlc3RJY29uSWRGb3JQYWdlVVJMKGNvbnN0IFFVcmwmIHBhZ2VVUkwp
Cit7CisgICAgc19pY29uRGF0YWJhc2UtPnJlcXVlc3RJY29uSWRGb3JQYWdlVVJMKHBhZ2VVUkwp
OworfQorCitRVXJsIFF0V2ViUGFnZVByb3h5OjpmYXZJY29uU291cmNlKCkgY29uc3QKK3sKKyAg
ICBzdGF0aWMgUVN0cmluZyBmYXZJY29uU291cmNlVGVtcGxhdGUgPSBRTGF0aW4xU3RyaW5nKCJp
bWFnZTovL2Zhdmljb24vJTEiKTsKKyAgICByZXR1cm4gUVVybChmYXZJY29uU291cmNlVGVtcGxh
dGUuYXJnKG1fZmF2SWNvbklkKSk7Cit9CisKK3ZvaWQgUXRXZWJQYWdlUHJveHk6OnVwZGF0ZUZh
dkljb25JZChpbnQgaWQpCit7CisgICAgaWYgKG1fZmF2SWNvbklkID09IGlkKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAobV9mYXZJY29uSWQpCisgICAgICAgIHNfaWNvbkRhdGFiYXNlLT5y
ZWxlYXNlSWNvbklkKG1fZmF2SWNvbklkKTsKKyAgICBtX2Zhdkljb25JZCA9IGlkOworICAgIGlm
IChtX2Zhdkljb25JZCkKKyAgICAgICAgc19pY29uRGF0YWJhc2UtPnJldGFpbkljb25JZChtX2Zh
dkljb25JZCk7CisKKyAgICBlbWl0IGRpZENoYW5nZUZhdkljb25Tb3VyY2UoZmF2SWNvblNvdXJj
ZSgpKTsKK30KKwordm9pZCBRdFdlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZUljb25JZEZvclBhZ2VV
UkwoaW50IGlkLCBjb25zdCBRVXJsJiBwYWdlVVJMKQoreworICAgIGlmICh1cmwoKSAhPSBwYWdl
VVJMKQorICAgICAgICByZXR1cm47CisKKyAgICB1cGRhdGVGYXZJY29uSWQoaWQpOworfQorCiAj
aW5jbHVkZSAibW9jX1F0V2ViUGFnZVByb3h5LmNwcCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L1F0V2ViUGFnZVByb3h5LmgKaW5kZXggNjZkYzQ3ZDYwOTI3ZTA4YjQwYTczYzU0OGY2
ZjBiZThiNGFkZmE3Ni4uNzk5YWU5NDUzZTM5NjA4OGEzMzM0MjU1ZTg3Yzg2M2Y3Y2Y4YWViMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVByb3h5LmgK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVByb3h5LmgKQEAgLTMw
LDE3ICszMCwxOCBAQAogI2luY2x1ZGUgIlF0UG9saWN5SW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAi
UXRUYXBHZXN0dXJlUmVjb2duaXplci5oIgogI2luY2x1ZGUgIlF0Vmlld0ludGVyZmFjZS5oIgor
I2luY2x1ZGUgIlF0V2ViSWNvbkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFw
LmgiCiAjaW5jbHVkZSAiVmlld3BvcnRBcmd1bWVudHMuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0
LmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgog
I2luY2x1ZGUgPFFCYXNpY1RpbWVyPgogI2luY2x1ZGUgPFFHcmFwaGljc1ZpZXc+CiAjaW5jbHVk
ZSA8UUtleUV2ZW50PgotI2luY2x1ZGUgPFFUb3VjaEV2ZW50PgogI2luY2x1ZGUgPFFNZW51Pgog
I2luY2x1ZGUgPFFTaGFyZWRQb2ludGVyPgorI2luY2x1ZGUgPFFUb3VjaEV2ZW50PgorI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KIAogUVRfQkVHSU5fTkFNRVNQQUNFCiBjbGFzcyBRVW5kb1N0YWNr
OwpAQCAtNTIsNyArNTMsNyBAQCBjbGFzcyBRV0tIaXN0b3J5OwogCiB1c2luZyBuYW1lc3BhY2Ug
V2ViS2l0OwogCi1XZWJDb3JlOjpEcmFnT3BlcmF0aW9uIGRyb3BBY3Rpb25Ub0RyYWdPcGVyYXRp
b24oUXQ6OkRyb3BBY3Rpb25zIGFjdGlvbnMpOworV2ViQ29yZTo6RHJhZ09wZXJhdGlvbiBkcm9w
QWN0aW9uVG9EcmFnT3BlcmF0aW9uKFF0OjpEcm9wQWN0aW9ucyk7CiAKIC8vIEZJWE1FOiBuZWVk
cyBmb2N1cyBpbi9vdXQsIHdpbmRvdyBhY3RpdmF0aW9uLCBzdXBwb3J0IHRocm91Z2ggdmlld1N0
YXRlRGlkQ2hhbmdlKCkuCiBjbGFzcyBRdFdlYlBhZ2VQcm94eSA6IHB1YmxpYyBRT2JqZWN0LCBX
ZWJLaXQ6OlBhZ2VDbGllbnQgewpAQCAtMTA0LDcgKzEwNSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgc3RhcnREcmFnKGNvbnN0IFdlYkNvcmU6OkRyYWdEYXRhJiwgUGFzc1JlZlB0cjxT
aGFyZWFibGVCaXRtYXA+IGRyYWdJbWFnZSk7CiAgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVZp
ZXdwb3J0UHJvcGVydGllcyhjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYpOwogICAg
IHZpcnR1YWwgdm9pZCBzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJik7Ci0gICAgdmly
dHVhbCB2b2lkIHNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zlcyhib29sIGhpZGRlblVudGls
TW91c2VNb3Zlcyk7CisgICAgdmlydHVhbCB2b2lkIHNldEN1cnNvckhpZGRlblVudGlsTW91c2VN
b3Zlcyhib29sKTsKICAgICB2aXJ0dWFsIHZvaWQgdG9vbFRpcENoYW5nZWQoY29uc3QgV1RGOjpT
dHJpbmcmLCBjb25zdCBXVEY6OlN0cmluZyYpOwogICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckVk
aXRDb21tYW5kKFBhc3NSZWZQdHI8V2ViS2l0OjpXZWJFZGl0Q29tbWFuZFByb3h5PiwgV2ViS2l0
OjpXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhckFsbEVk
aXRDb21tYW5kcygpOwpAQCAtMTYwLDggKzE2MSw5IEBAIHB1YmxpYzoKIAogICAgIFdLUGFnZVJl
ZiBwYWdlUmVmKCkgY29uc3Q7CiAKLSAgICB2b2lkIGxvYWQoY29uc3QgUVVybCYgdXJsKTsKKyAg
ICB2b2lkIGxvYWQoY29uc3QgUVVybCYpOwogICAgIFFVcmwgdXJsKCkgY29uc3Q7CisgICAgUVVy
bCBmYXZJY29uU291cmNlKCkgY29uc3Q7CiAKICAgICB2b2lkIHNldERyYXdpbmdBcmVhU2l6ZShj
b25zdCBRU2l6ZSYpOwogCkBAIC0xODEsOCArMTgzLDggQEAgcHVibGljOgogCiAgICAgcXJlYWwg
dGV4dFpvb21GYWN0b3IoKSBjb25zdDsKICAgICBxcmVhbCBwYWdlWm9vbUZhY3RvcigpIGNvbnN0
OwotICAgIHZvaWQgc2V0VGV4dFpvb21GYWN0b3IocXJlYWwgem9vbUZhY3Rvcik7Ci0gICAgdm9p
ZCBzZXRQYWdlWm9vbUZhY3RvcihxcmVhbCB6b29tRmFjdG9yKTsKKyAgICB2b2lkIHNldFRleHRa
b29tRmFjdG9yKHFyZWFsKTsKKyAgICB2b2lkIHNldFBhZ2Vab29tRmFjdG9yKHFyZWFsKTsKICAg
ICB2b2lkIHNldFBhZ2VBbmRUZXh0Wm9vbUZhY3RvcnMocXJlYWwgcGFnZVpvb21GYWN0b3IsIHFy
ZWFsIHRleHRab29tRmFjdG9yKTsKIAogICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRSZWN0QW5k
U2NhbGUoY29uc3QgUVJlY3RGJiwgZmxvYXQpOwpAQCAtMTk5LDE3ICsyMDEsMjIgQEAgcHVibGlj
OgogICAgIHZvaWQgaGFuZGxlU2luZ2xlVGFwRXZlbnQoY29uc3QgUVRvdWNoRXZlbnQ6OlRvdWNo
UG9pbnQmKTsKICAgICB2b2lkIGhhbmRsZURvdWJsZVRhcEV2ZW50KGNvbnN0IFFUb3VjaEV2ZW50
OjpUb3VjaFBvaW50Jik7CiAKKyAgICB2b2lkIHJlcXVlc3RJY29uSWRGb3JQYWdlVVJMKGNvbnN0
IFFVcmwmKTsKKyAgICBzdGF0aWMgUXRXZWJJY29uRGF0YWJhc2UqIGljb25EYXRhYmFzZSgpIHsg
cmV0dXJuIHNfaWNvbkRhdGFiYXNlOyB9CisKIHB1YmxpYyBRX1NMT1RTOgogICAgIHZvaWQgbmF2
aWdhdGlvblN0YXRlQ2hhbmdlZCgpOwogICAgIHZvaWQgZGlkUmVjZWl2ZURvd25sb2FkUmVzcG9u
c2UoUVdlYkRvd25sb2FkSXRlbSopOworICAgIHZvaWQgZGlkUmVjZWl2ZUljb25JZEZvclBhZ2VV
UkwoaW50LCBjb25zdCBRVXJsJik7CiAKIHB1YmxpYzoKICAgICBRX1NJR05BTCB2b2lkIHpvb21h
YmxlQXJlYUZvdW5kKGNvbnN0IFFSZWN0Jik7CiAgICAgUV9TSUdOQUwgdm9pZCB1cGRhdGVOYXZp
Z2F0aW9uU3RhdGUoKTsKICAgICBRX1NJR05BTCB2b2lkIHJlY2VpdmVkTWVzc2FnZUZyb21OYXZp
Z2F0b3JRdE9iamVjdChjb25zdCBRVmFyaWFudE1hcCYpOworICAgIFFfU0lHTkFMIHZvaWQgZGlk
Q2hhbmdlRmF2SWNvblNvdXJjZShjb25zdCBRVXJsJik7CiAKIHByb3RlY3RlZDoKLSAgICB2aXJ0
dWFsIHZvaWQgcGFpbnRDb250ZW50KFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRUmVjdCYgYXJl
YSk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudChRUGFpbnRlciosIGNvbnN0IFFSZWN0
JiBhcmVhKTsKICAgICBSZWZQdHI8V2ViS2l0OjpXZWJQYWdlUHJveHk+IG1fd2ViUGFnZVByb3h5
OwogICAgIFdlYktpdDo6UXRWaWV3SW50ZXJmYWNlKiBjb25zdCBtX3ZpZXdJbnRlcmZhY2U7CiAg
ICAgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKiBtX2ludGVyYWN0aW9uRW5naW5lOwpAQCAt
MjM1LDYgKzI0Miw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBoYW5kbGVEcmFnTW92ZUV2ZW50KFFE
cmFnTW92ZUV2ZW50Kik7CiAgICAgYm9vbCBoYW5kbGVEcm9wRXZlbnQoUURyb3BFdmVudCopOwog
CisgICAgdm9pZCB1cGRhdGVGYXZJY29uSWQoaW50KTsKKwogICAgIHZpcnR1YWwgdm9pZCB0aW1l
ckV2ZW50KFFUaW1lckV2ZW50Kik7CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQpAQCAtMjQ2
LDYgKzI1NSw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViQ29udGV4dD4g
ZGVmYXVsdFdLQ29udGV4dCgpOwogICAgIHN0YXRpYyBSZWZQdHI8V2ViQ29udGV4dD4gc19kZWZh
dWx0Q29udGV4dDsKICAgICBzdGF0aWMgUmVmUHRyPFF0RG93bmxvYWRNYW5hZ2VyPiBzX2Rvd25s
b2FkTWFuYWdlcjsKKyAgICBzdGF0aWMgUXRXZWJJY29uRGF0YWJhc2UqIHNfaWNvbkRhdGFiYXNl
OwogICAgIHN0YXRpYyB1bnNpZ25lZCBzX2RlZmF1bHRQYWdlUHJveHlDb3VudDsKIAogICAgIFJl
ZlB0cjxXZWJDb250ZXh0PiBtX2NvbnRleHQ7CkBAIC0yNTksNiArMjY5LDcgQEAgcHJpdmF0ZToK
ICAgICBib29sIG1fbmF2aWdhdG9yUXRPYmplY3RFbmFibGVkOwogICAgIFFQb2ludCBtX3RyaXBs
ZUNsaWNrOwogICAgIFFCYXNpY1RpbWVyIG1fdHJpcGxlQ2xpY2tUaW1lcjsKKyAgICBpbnQgbV9m
YXZJY29uSWQ7CiB9OwogCiAjZW5kaWYgLyogUXRXZWJQYWdlUHJveHlfaCAqLwpkaWZmIC0tZ2l0
IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDYzNGQ1NzA4Y2M4YTVh
ZjllZmQyNTU1MTA3NWRmZTZlNzU3ODA2OWEuLjMyMTYyYWM5MTlmYWY1NzA1YTJiYzYxY2RkOGE4
OWFlOGM1ZDBiZTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMS0xMS0xNiAgUmFmYWVsIEJyYW5kYW8gIDxyYWZh
ZWwubG9ib0BvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIFtRdF1bV0syXSBJbXBsZW1lbnQgZmF2
aWNvbiBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03MTA4MgorCisgICAgICAgIEFkZGVkIGEgRmF2SWNvbiB0byBNaW5pQnJvd3NlciBhcyBh
biBleGFtcGxlIG9mIGl0cyB1c2UuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBNaW5pQnJvd3Nlci9xdC9xbWwvQnJvd3NlcldpbmRvdy5xbWw6CisK
IDIwMTEtMTEtMTYgIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAgIE1v
dmUgZmlsZW5hbWVzL2xpbmUgbnVtYmVycyBvZmYgdG8gdGhlIHJpZ2h0IGVkZ2UgaW4gTGVha3Mg
Vmlld2VyCmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvQnJvd3NlcldpbmRv
dy5xbWwgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvQnJvd3NlcldpbmRvdy5xbWwKaW5kZXgg
NWNjMTUyYWY0OTdjNTFiYjNiZjQ0OWIxZDllZDAyYmMzODNkMTRmYy4uNTg3MjFjZGRlMDU1NTY0
MzgxZDVkYjllZTBkOTg2NTQwMDZhMjNmZSAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIv
cXQvcW1sL0Jyb3dzZXJXaW5kb3cucW1sCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L3FtbC9C
cm93c2VyV2luZG93LnFtbApAQCAtMTU3LDYgKzE1NywxOCBAQCBSZWN0YW5nbGUgewogICAgICAg
ICAgICAgICAgIHZpc2libGU6IHdlYlZpZXcubG9hZFByb2dyZXNzICE9IDEwMAogICAgICAgICAg
ICAgfQogCisgICAgICAgICAgICBJbWFnZSB7CisgICAgICAgICAgICAgICAgaWQ6IGZhdmljb24K
KyAgICAgICAgICAgICAgICBzb3VyY2U6IHdlYlZpZXcuZmF2SWNvblNvdXJjZQorICAgICAgICAg
ICAgICAgIHdpZHRoOiAxNgorICAgICAgICAgICAgICAgIGhlaWdodDogMTYKKyAgICAgICAgICAg
ICAgICBhbmNob3JzIHsKKyAgICAgICAgICAgICAgICAgICAgbGVmdDogcGFyZW50LmxlZnQKKyAg
ICAgICAgICAgICAgICAgICAgbGVmdE1hcmdpbjogMgorICAgICAgICAgICAgICAgICAgICB2ZXJ0
aWNhbENlbnRlcjogcGFyZW50LnZlcnRpY2FsQ2VudGVyCisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorCiAgICAgICAgICAgICBUZXh0SW5wdXQgewogICAgICAgICAgICAgICAgIGlk
OiBhZGRyZXNzTGluZQogICAgICAgICAgICAgICAgIGNsaXA6IHRydWUKQEAgLTE2Nyw3ICsxNzks
NyBAQCBSZWN0YW5nbGUgewogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBhbmNo
b3JzIHsKICAgICAgICAgICAgICAgICAgICAgdmVydGljYWxDZW50ZXI6IHBhcmVudC52ZXJ0aWNh
bENlbnRlcgotICAgICAgICAgICAgICAgICAgICBsZWZ0OiBwYXJlbnQubGVmdAorICAgICAgICAg
ICAgICAgICAgICBsZWZ0OiBmYXZpY29uLnJpZ2h0CiAgICAgICAgICAgICAgICAgICAgIHJpZ2h0
OiBwYXJlbnQucmlnaHQKICAgICAgICAgICAgICAgICAgICAgbWFyZ2luczogMgogICAgICAgICAg
ICAgICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117261</attachid>
            <date>2011-11-30 13:26:09 -0800</date>
            <delta_ts>2011-12-05 18:35:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71082-20111130182607.patch</filename>
            <type>text/plain</type>
            <size>27870</size>
            <attacher name="Rafael Brandao">rafael.lobo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxNTQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IGY0NzhlMGRjN2Mw
ZTkwYzg3NjIwZjBlNzk2NWI0Y2FkZjI1NjAxMWEuLmU3ODBjM2VjMzViMDVkMmE4NWFkZmE0YjVj
YmYzM2VlMjkzMWU0YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMTEt
MzAgIFJhZmFlbCBCcmFuZGFvICA8cmFmYWVsLmxvYm9Ab3BlbmJvc3NhLm9yZz4KKworICAgICAg
ICBbUXRdW1dLMl0gSW1wbGVtZW50IGZhdmljb24gc3VwcG9ydAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEwODIKKworICAgICAgICBBZGRlZCBXZWJJ
Y29uIGFzIGFuIGVsZW1lbnQgb24gUU1MIHRvIGRpc3BsYXkgZmF2b3JpdGUgaWNvbnMuCisgICAg
ICAgIEhlcmUgdGhlIGltYWdlIHByb3ZpZGVyIHdhcyBhZGRlZCB0byB0aGUgUURlY2xhcmF0aXZl
RW5naW5lCisgICAgICAgIGFuZCB0aGUgUU1MIGVsZW1lbnQgd2FzIGV4cG9zZWQuCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBkZWNsYXJhdGl2ZS9w
bHVnaW4uY3BwOgorICAgICAgICAoV2ViS2l0UW1sUGx1Z2luOjppbml0aWFsaXplRW5naW5lKToK
KyAgICAgICAgKFdlYktpdFFtbFBsdWdpbjo6cmVnaXN0ZXJUeXBlcyk6CisgICAgICAgICogZGVj
bGFyYXRpdmUvcHVibGljLnByaToKKwogMjAxMS0xMS0zMCAgU2ltb24gSGF1c21hbm4gIDxzaW1v
bi5oYXVzbWFubkBub2tpYS5jb20+CiAKICAgICAgICAgW1F0XSBGaXggY3Jhc2ggd2hlbiB1c2lu
ZyBRdCBEUlQgd2l0aCBWOC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA0ZjRhZGJhMjVlOWYwZDBhNmY4ZWI4ZTE1
M2M4MDA1MDcwMGE2NGVlLi4yNDU3OGFkYzJlOGQyNzAyNDYxODc1YjEzOTJjNzY0ZjU2M2MyYjM2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTAgQEAKKzIwMTEtMTEtMzAgIFJhZmFlbCBCcmFuZGFv
ICA8cmFmYWVsLmxvYm9Ab3BlbmJvc3NhLm9yZz4KKworICAgICAgICBbUXRdW1dLMl0gSW1wbGVt
ZW50IGZhdmljb24gc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NzEwODIKKworICAgICAgICBBZGRlZCBXZWJJY29uIGFzIGFuIGVsZW1lbnQg
b24gUU1MIHRvIGRpc3BsYXkgZmF2b3JpdGUgaWNvbnMuCisgICAgICAgIEl0cyBzb3VyY2UgYXR0
cmlidXRlIHNob3VsZCBwb2ludCB0byB0aGUgb3JpZ2luYXRpbmcgcGFnZSB1cmwKKyAgICAgICAg
Zm9yIHRoZSBmYXZpY29uLiBJdCBrZWVwcyB0aGF0IHVybCBhbmQgcmVxdWVzdHMgdGhlIHBpeG1h
cCB0bworICAgICAgICBhbiBpbWFnZSBwcm92aWRlciB0aGF0IHdpbGwgY2hlY2sgZm9yIGl0IGlu
c2lkZSB0aGUgSWNvbkRhdGFiYXNlLgorCisgICAgICAgIEljb25EYXRhYmFzZSBzdG9yYWdlIGxp
ZXMgb24gVUlQcm9jZXNzIGFuZCB0aGUgc3luY2hyb25vdXMgY2FsbCBmb3IKKyAgICAgICAgdGhl
IGljb24gdGhhdCBoYXBwZW5zIG9uIFdlYkljb25EYXRhYmFzZSB3b24ndCBuZWVkIHRvIHNlbmQg
YW55IG1lc3NhZ2UKKyAgICAgICAgdG8gV2ViUHJvY2Vzcy4gVGhlIHBhcnQgb2YgSWNvbkRhdGFi
YXNlIG9uIFdlYlByb2Nlc3MgaGFuZGxlcyB0aGUgZG93bmxvYWQKKyAgICAgICAgb2YgdGhlIHJl
c291cmNlIHdoZW5ldmVyIGl0IGlzIG5lZWRlZC4gVGhlbiB0aGUgY29udGVudCBkb3dubG9hZGVk
IGlzIHNlbnQKKyAgICAgICAgdGhyb3VnaCBJUEMgdG8gdGhlIGFjdHVhbCBkYXRhYmFzZSwgb24g
VUlQcm9jZXNzLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYmlj
b24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFFRdWlja1dlYkljb246OlFRdWlja1dlYkljb24pOgor
ICAgICAgICAoUVF1aWNrV2ViSWNvbjo6flFRdWlja1dlYkljb24pOgorICAgICAgICAoUVF1aWNr
V2ViSWNvbjo6c2V0U291cmNlKToKKyAgICAgICAgKFFRdWlja1dlYkljb246Om9uSWNvblJlYWR5
Rm9yUGFnZVVSTCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJpY29uX3Au
aDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xd2ViaWNvbmltYWdlcHJvdmlk
ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFFXZWJJY29uSW1hZ2VQcm92aWRlcjo6UVdlYkljb25J
bWFnZVByb3ZpZGVyKToKKyAgICAgICAgKFFXZWJJY29uSW1hZ2VQcm92aWRlcjo6flFXZWJJY29u
SW1hZ2VQcm92aWRlcik6CisgICAgICAgIChRV2ViSWNvbkltYWdlUHJvdmlkZXI6OnJlcXVlc3RQ
aXhtYXApOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXdlYmljb25pbWFnZXByb3ZpZGVy
X3AuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvbnRleHQuaDogSXQgd2FzIG5l
ZWRlZCB0byBleHBvc2UgaWNvbkRhdGFiYXNlUGF0aCBhcyBwdWJsaWMKKyAgICAgICAgdG8gcmV0
cmlldmUgdGhlIHBsYXRmb3JtJ3MgZGVmYXVsdCBwYXRoIGFuZCB1c2UgaXQgdG8gc2V0dXAgdGhl
IGljb24gZGF0YWJhc2UuCisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0V2ViQ29udGV4dC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OlF0V2ViQ29udGV4dDo6aW5pdGlhbGl6ZSk6CisgICAgICAgICog
VUlQcm9jZXNzL3F0L1F0V2ViQ29udGV4dC5oOgorICAgICAgICAoV2ViS2l0OjpRdFdlYkNvbnRl
eHQ6Omljb25EYXRhYmFzZSk6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0V2ViSWNvbkRhdGFi
YXNlLmNwcDogQWRkZWQuCisgICAgICAgICh0b1F0V2ViSWNvbkRhdGFiYXNlKToKKyAgICAgICAg
KFF0V2ViSWNvbkRhdGFiYXNlOjpRdFdlYkljb25EYXRhYmFzZSk6CisgICAgICAgIChRdFdlYklj
b25EYXRhYmFzZTo6flF0V2ViSWNvbkRhdGFiYXNlKToKKyAgICAgICAgKFF0V2ViSWNvbkRhdGFi
YXNlOjpkaWRDaGFuZ2VJY29uRm9yUGFnZVVSTCk6CisgICAgICAgIChRdFdlYkljb25EYXRhYmFz
ZTo6aWNvbkltYWdlRm9yUGFnZVVSTCk6CisgICAgICAgIChRdFdlYkljb25EYXRhYmFzZTo6cmVx
dWVzdEljb25Gb3JQYWdlVVJMKToKKyAgICAgICAgKFF0V2ViSWNvbkRhdGFiYXNlOjpyZXRhaW5J
Y29uRm9yUGFnZVVSTCk6CisgICAgICAgIChRdFdlYkljb25EYXRhYmFzZTo6cmVsZWFzZUljb25G
b3JQYWdlVVJMKToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRXZWJJY29uRGF0YWJhc2UuaDog
QWRkZWQuCisKIDIwMTEtMTEtMjkgIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgogCiAg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Mjc1MQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9wbHVnaW4uY3BwIGIvU291cmNl
L1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9wbHVnaW4uY3BwCmluZGV4IGQwMzliOGE5OThiMmYwOGVk
OWVjOWVmOTI4NGRlZWFiMGY3ZTMyMGYuLjU3MmRlZDZjNmFkYTlkZTM3ZDM1MjlhYTA3M2NhMDA3
OTM2MTViMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvcGx1Z2lu
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL3BsdWdpbi5jcHAKQEAgLTIz
LDExICsyMywxNCBAQAogI2luY2x1ZGUgPFF0RGVjbGFyYXRpdmUvcWRlY2xhcmF0aXZlZXh0ZW5z
aW9ucGx1Z2luLmg+CiAKICNpZiBkZWZpbmVkKEhBVkVfV0VCS0lUMikKKyNpbmNsdWRlICJxcXVp
Y2t3ZWJpY29uX3AuaCIKICNpbmNsdWRlICJxcXVpY2t3ZWJwYWdlX3AuaCIKICNpbmNsdWRlICJx
cXVpY2t3ZWJ2aWV3X3AuaCIKKyNpbmNsdWRlICJxd2ViaWNvbmltYWdlcHJvdmlkZXJfcC5oIgog
I2luY2x1ZGUgInF3ZWJwZXJtaXNzaW9ucmVxdWVzdF9wLmgiCiAjaW5jbHVkZSAicXdlYnByZWZl
cmVuY2VzX3AuaCIKIAorI2luY2x1ZGUgPFF0RGVjbGFyYXRpdmUvcWRlY2xhcmF0aXZlZW5naW5l
Lmg+CiAjaW5jbHVkZSA8UXROZXR3b3JrL3FuZXR3b3JrcmVwbHkuaD4KICNlbmRpZgogCkBAIC0z
Niw2ICszOSwxNCBAQCBRVF9CRUdJTl9OQU1FU1BBQ0UKIGNsYXNzIFdlYktpdFFtbFBsdWdpbiA6
IHB1YmxpYyBRRGVjbGFyYXRpdmVFeHRlbnNpb25QbHVnaW4gewogICAgIFFfT0JKRUNUCiBwdWJs
aWM6CisjaWYgZGVmaW5lZChIQVZFX1dFQktJVDIpCisgICAgdmlydHVhbCB2b2lkIGluaXRpYWxp
emVFbmdpbmUoUURlY2xhcmF0aXZlRW5naW5lKiBlbmdpbmUsIGNvbnN0IGNoYXIqIHVyaSkKKyAg
ICB7CisgICAgICAgIFFfQVNTRVJUKFFMYXRpbjFTdHJpbmcodXJpKSA9PSBRTGF0aW4xU3RyaW5n
KCJRdFdlYktpdCIpKTsKKyAgICAgICAgZW5naW5lLT5hZGRJbWFnZVByb3ZpZGVyKFFMYXRpbjFT
dHJpbmcoImZhdmljb24iKSwgbmV3IFFXZWJJY29uSW1hZ2VQcm92aWRlcik7CisgICAgfQorI2Vu
ZGlmCisKICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJUeXBlcyhjb25zdCBjaGFyKiB1cmkpCiAg
ICAgewogICAgICAgICBRX0FTU0VSVChRTGF0aW4xU3RyaW5nKHVyaSkgPT0gUUxhdGluMVN0cmlu
ZygiUXRXZWJLaXQiKSk7CkBAIC00OSw2ICs2MCw3IEBAIHB1YmxpYzoKIAogI2lmIGRlZmluZWQo
SEFWRV9XRUJLSVQyKQogICAgICAgICBxbWxSZWdpc3RlclR5cGU8UVF1aWNrV2ViVmlldz4odXJp
LCAzLCAwLCAiV2ViVmlldyIpOworICAgICAgICBxbWxSZWdpc3RlclR5cGU8UVF1aWNrV2ViSWNv
bj4odXJpLCAzLCAwLCAiV2ViSWNvbiIpOwogICAgICAgICBxbWxSZWdpc3RlclVuY3JlYXRhYmxl
VHlwZTxRV2ViUHJlZmVyZW5jZXM+KHVyaSwgMywgMCwgIldlYlByZWZlcmVuY2VzIiwgUU9iamVj
dDo6dHIoIkNhbm5vdCBjcmVhdGUgc2VwYXJhdGUgaW5zdGFuY2Ugb2YgV2ViUHJlZmVyZW5jZXMi
KSk7CiAgICAgICAgIHFtbFJlZ2lzdGVyVW5jcmVhdGFibGVUeXBlPFFRdWlja1dlYlBhZ2U+KHVy
aSwgMywgMCwgIldlYlBhZ2UiLCBRT2JqZWN0Ojp0cigiQ2Fubm90IGNyZWF0ZSBzZXBhcmF0ZSBp
bnN0YW5jZSBvZiBXZWJQYWdlLCB1c2UgV2ViVmlldyIpKTsKICAgICAgICAgcW1sUmVnaXN0ZXJV
bmNyZWF0YWJsZVR5cGU8UU5ldHdvcmtSZXBseT4odXJpLCAzLCAwLCAiTmV0d29ya1JlcGx5Iiwg
UU9iamVjdDo6dHIoIkNhbm5vdCBjcmVhdGUgc2VwYXJhdGUgaW5zdGFuY2Ugb2YgTmV0d29ya1Jl
cGx5IikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9wdWJsaWMu
cHJpIGIvU291cmNlL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9wdWJsaWMucHJpCmluZGV4IGIzMzEz
Mzk1NTYyY2ViNTFhMTJiMDI3ODRiZGQ4NTIxODBiMDI5OTIuLmM5MjlhNzM3YzRhODI5NmRlNzM0
MjFlYTYxMzNhNzEwZDY0NDFmZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvZGVjbGFy
YXRpdmUvcHVibGljLnByaQorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL3B1Ymxp
Yy5wcmkKQEAgLTI5LDcgKzI5LDcgQEAgd2luY2UqOkxJQlMgKz0gJCRRTUFLRV9MSUJTX0dVSQog
CiBDT05GSUcgKz0gcXR3ZWJraXQgcXR3ZWJraXQtcHJpdmF0ZQogCi1RVCArPSBkZWNsYXJhdGl2
ZQorUVQgKz0gZGVjbGFyYXRpdmUgZGVjbGFyYXRpdmUtcHJpdmF0ZQogaGF2ZVF0KDUpOiBRVCAr
PSB3aWRnZXRzCiAKIGNvbnRhaW5zKFFUX0NPTkZJRywgcXRxdWljazEpOiB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQpp
bmRleCA0YjdmY2U5NDFlZmM5NjNlYmJkMzgyNDY1ZjY1NjRiMWNlNWM4ZWFiLi4wMGY0ODZlMTI0
YTVhNmU4Mjk2NDg5ZDdiM2M5MTZkY2ZmZGE0NmJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKQEAgLTE4LDcgKzE4
LDcgQEAgQ09ORklHICs9IHN0YXRpY2xpYgogVEFSR0VUID0gJCRXRUJLSVQyX1RBUkdFVAogREVT
VERJUiA9ICQkV0VCS0lUMl9ERVNURElSCiAKLVFUICs9IGRlY2xhcmF0aXZlCitRVCArPSBkZWNs
YXJhdGl2ZSBkZWNsYXJhdGl2ZS1wcml2YXRlCiAKIEhFQURFUlMgKz0gXAogICAgIFBsYXRmb3Jt
L0NvcmVJUEMvQXJndW1lbnREZWNvZGVyLmggXApAQCAtMTc5LDYgKzE3OSw3IEBAIEhFQURFUlMg
Kz0gXAogICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZV9wX3AuaCBcCiAgICAgVUlQ
cm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaCBcCiAgICAgVUlQcm9jZXNzL0FQSS9xdC9x
cXVpY2t3ZWJ2aWV3X3BfcC5oIFwKKyAgICBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYmljb25f
cC5oIFwKICAgICBVSVByb2Nlc3MvQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRpb25DaGFsbGVu
Z2VQcm94eS5oIFwKICAgICBVSVByb2Nlc3MvQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRpb25E
ZWNpc2lvbkxpc3RlbmVyLmggXAogICAgIFVJUHJvY2Vzcy9BdXRoZW50aWNhdGlvbi9XZWJDcmVk
ZW50aWFsLmggXApAQCAtMjYyLDYgKzI2Myw3IEBAIEhFQURFUlMgKz0gXAogICAgIFVJUHJvY2Vz
cy9xdC9RdFNHVGlsZU5vZGUuaCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRJbnRlcmFj
dGlvbkVuZ2luZS5oIFwKICAgICBVSVByb2Nlc3MvcXQvUXRXZWJVbmRvQ29tbWFuZC5oIFwKKyAg
ICBVSVByb2Nlc3MvcXQvUXRXZWJJY29uRGF0YWJhc2UuaCBcCiAgICAgVUlQcm9jZXNzL3F0L1dl
YkNvbnRleHRNZW51UHJveHlRdC5oIFwKICAgICBVSVByb2Nlc3MvcXQvV2ViR2VvbG9jYXRpb25Q
cm92aWRlclF0LmggXAogICAgIFVJUHJvY2Vzcy9xdC9XZWJQb3B1cE1lbnVQcm94eVF0LmggXApA
QCAtNDg2LDYgKzQ4OCw4IEBAIFNPVVJDRVMgKz0gXAogICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXdl
YnBlcm1pc3Npb25yZXF1ZXN0LmNwcCBcCiAgICAgVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJw
YWdlLmNwcCBcCiAgICAgVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcCBcCisgICAg
VUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJpY29uLmNwcCBcCisgICAgVUlQcm9jZXNzL0FQSS9x
dC9xd2ViaWNvbmltYWdlcHJvdmlkZXIuY3BwIFwKICAgICBVSVByb2Nlc3MvQVBJL3F0L3F3ZWJw
cmVmZXJlbmNlcy5jcHAgXAogICAgIFVJUHJvY2Vzcy9BdXRoZW50aWNhdGlvbi9BdXRoZW50aWNh
dGlvbkNoYWxsZW5nZVByb3h5LmNwcCBcCiAgICAgVUlQcm9jZXNzL0F1dGhlbnRpY2F0aW9uL0F1
dGhlbnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5lci5jcHAgXApAQCAtNTgzLDYgKzU4Nyw3IEBAIFNP
VVJDRVMgKz0gXAogICAgIFVJUHJvY2Vzcy9xdC9XZWJQb3B1cE1lbnVQcm94eVF0LmNwcCBcCiAg
ICAgVUlQcm9jZXNzL3F0L1dlYlBvcHVwTWVudVByb3h5UXREZXNrdG9wLmNwcCBcCiAgICAgVUlQ
cm9jZXNzL3F0L1dlYlByZWZlcmVuY2VzUXQuY3BwIFwKKyAgICBVSVByb2Nlc3MvcXQvUXRXZWJJ
Y29uRGF0YWJhc2UuY3BwIFwKICAgICBXZWJQcm9jZXNzL0FwcGxpY2F0aW9uQ2FjaGUvV2ViQXBw
bGljYXRpb25DYWNoZU1hbmFnZXIuY3BwIFwKICAgICBXZWJQcm9jZXNzL0F1dGhlbnRpY2F0aW9u
L0F1dGhlbnRpY2F0aW9uTWFuYWdlci5jcHAgXAogICAgIFdlYlByb2Nlc3MvQ29va2llcy9XZWJD
b29raWVNYW5hZ2VyLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3FxdWlja3dlYmljb24uY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC9xcXVpY2t3ZWJpY29uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMzAzYzVlNzhkY2MyZmRiYmRmMzEzNTM5
MWM0NTNjM2Q4YTFlZTc0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC9xcXVpY2t3ZWJpY29uLmNwcApAQCAtMCwwICsxLDcxIEBACisvKgorICAgIENv
cHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicXF1aWNrd2ViaWNvbl9w
LmgiCisKKyNpbmNsdWRlICJRdFdlYkNvbnRleHQuaCIKKyNpbmNsdWRlICJRdFdlYkljb25EYXRh
YmFzZS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitRUXVpY2tXZWJJY29uOjpRUXVp
Y2tXZWJJY29uKCkKKyAgICA6IG1fZmlyc3RSZXF1ZXN0KHRydWUpCit7CisgICAgLy8gV2UgbWF5
IGhhdmUgZGlmZmVyZW50IFFQaXhtYXBzIGZvciB0aGUgc2FtZSBzb3VyY2UgaW4gZGlmZmVyZW50
IHRpbWVzLCBzbyB3ZSBkb24ndCB3YW50IHRvIGNhY2hlLgorICAgIHNldENhY2hlKGZhbHNlKTsK
K30KKworUVF1aWNrV2ViSWNvbjo6flFRdWlja1dlYkljb24oKQoreworfQorCit2b2lkIFFRdWlj
a1dlYkljb246OnNldFNvdXJjZShjb25zdCBRVXJsJiB1cmwpCit7CisgICAgLy8gV2UgZG9uJ3Qg
d2FudCB0byBjcmVhdGUgdGhlIGRlZmF1bHQgY29udGV4dCB0b28gZWFybHkuIFRoaXMgaXMgd2h5
IHdlIGNoZWNrIGZvciB0aGUgZGVmYXVsdCBjb250ZXh0CisgICAgLy8gb25seSB3aGVuIHdlIG5l
ZWQgaXQuIEF0IHRoaXMgcG9pbnQsIGl0IGlzIGV4cGVjdGVkIHRoYXQgaXQgaXMgYWxyZWFkeSBj
cmVhdGVkLiBPdGhlcndpc2UsIGl0IHdpbGwgYmUuCisgICAgUmVmUHRyPFdlYktpdDo6UXRXZWJD
b250ZXh0PiBjb250ZXh0ID0gV2ViS2l0OjpRdFdlYkNvbnRleHQ6OmRlZmF1bHRDb250ZXh0KCk7
CisgICAgUXRXZWJJY29uRGF0YWJhc2UqIGljb25EYXRhYmFzZSA9IGNvbnRleHQtPmljb25EYXRh
YmFzZSgpOworICAgIGlmIChtX2ZpcnN0UmVxdWVzdCkgeworICAgICAgICBtX2ZpcnN0UmVxdWVz
dCA9IGZhbHNlOworICAgICAgICBRX0FTU0VSVChpY29uRGF0YWJhc2UpOworICAgICAgICBRT2Jq
ZWN0Ojpjb25uZWN0KGljb25EYXRhYmFzZSwgU0lHTkFMKGljb25SZWFkeUZvclBhZ2VVUkwoUVVy
bCkpLCB0aGlzLCBTTE9UKG9uSWNvblJlYWR5Rm9yUGFnZVVSTChRVXJsKSkpOworICAgIH0KKyAg
ICBpZiAoIWljb25EYXRhYmFzZSB8fCBtX3BhZ2VVUkwgPT0gdXJsKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoIW1fcGFnZVVSTC5pc0VtcHR5KCkpCisgICAgICAgIGljb25EYXRhYmFzZS0+
cmVsZWFzZUljb25Gb3JQYWdlVVJMKG1fcGFnZVVSTCk7CisgICAgbV9wYWdlVVJMID0gdXJsOwor
ICAgIGlmICghbV9wYWdlVVJMLmlzRW1wdHkoKSkKKyAgICAgICAgaWNvbkRhdGFiYXNlLT5yZXRh
aW5JY29uRm9yUGFnZVVSTChtX3BhZ2VVUkwpOworCisgICAgc3RhdGljIFFTdHJpbmcgcGF0dGVy
biA9IFFMYXRpbjFTdHJpbmcoImltYWdlOi8vZmF2aWNvbi8lMSIpOworICAgIFFRdWlja0ltYWdl
QmFzZTo6c2V0U291cmNlKFFVcmwocGF0dGVybi5hcmcobV9wYWdlVVJMLnRvU3RyaW5nKCkpKSk7
Cit9CisKK3ZvaWQgUVF1aWNrV2ViSWNvbjo6b25JY29uUmVhZHlGb3JQYWdlVVJMKGNvbnN0IFFV
cmwmIHBhZ2VVUkwpCit7CisgICAgaWYgKHBhZ2VVUkwgIT0gbV9wYWdlVVJMKQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBSZWZyZXNoIHRoZSBpbWFnZSB3aXRoIHRoZSBuZXcgUVBpeG1hcCBm
b3IgdGhpcyBzb3VyY2UuCisgICAgaWYgKGlzQ29tcG9uZW50Q29tcGxldGUoKSkKKyAgICAgICAg
bG9hZCgpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9x
cXVpY2t3ZWJpY29uX3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNr
d2ViaWNvbl9wLmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjg2NDRjODFmNTJmZDI5YTUzYWY0NTc4N2UyMjQ4ZTUx
NjdlN2I5NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
cXQvcXF1aWNrd2ViaWNvbl9wLmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAgICBDb3B5cmlnaHQg
KEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8K
KworI2lmbmRlZiBxcXVpY2t3ZWJpY29uX3BfaAorI2RlZmluZSBxcXVpY2t3ZWJpY29uX3BfaAor
CisjaW5jbHVkZSAicXdlYmtpdGdsb2JhbC5oIgorI2luY2x1ZGUgPFF0RGVjbGFyYXRpdmUvcHJp
dmF0ZS9xcXVpY2tpbWFnZV9wLmg+CisKK2NsYXNzIFFXRUJLSVRfRVhQT1JUIFFRdWlja1dlYklj
b24gOiBwdWJsaWMgUVF1aWNrSW1hZ2UgeworICAgIFFfT0JKRUNUCisKK3B1YmxpYzoKKyAgICBR
UXVpY2tXZWJJY29uKCk7CisgICAgflFRdWlja1dlYkljb24oKTsKKworICAgIHZvaWQgc2V0U291
cmNlKGNvbnN0IFFVcmwmIHVybCk7CisKK3ByaXZhdGUgUV9TTE9UUzoKKyAgICB2b2lkIG9uSWNv
blJlYWR5Rm9yUGFnZVVSTChjb25zdCBRVXJsJiBwYWdlVVJMKTsKKworcHJpdmF0ZToKKyAgICBR
VXJsIG1fcGFnZVVSTDsKKyAgICBib29sIG1fZmlyc3RSZXF1ZXN0OworfTsKKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJpY29uaW1hZ2Vw
cm92aWRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJpY29uaW1h
Z2Vwcm92aWRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWIxYzYwOWI2YzBjMzFkOTQ3NzEzZTQzNTJmN2M3
OWM3NDM0ODY1ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvcXdlYmljb25pbWFnZXByb3ZpZGVyLmNwcApAQCAtMCwwICsxLDUzIEBACisvKgorICAg
IENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAg
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAg
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicXdlYmljb25pbWFn
ZXByb3ZpZGVyX3AuaCIKKworI2luY2x1ZGUgIlF0V2ViSWNvbkRhdGFiYXNlLmgiCisjaW5jbHVk
ZSAiUXRXZWJQYWdlUHJveHkuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworUVdlYklj
b25JbWFnZVByb3ZpZGVyOjpRV2ViSWNvbkltYWdlUHJvdmlkZXIoKQorICAgIDogUURlY2xhcmF0
aXZlSW1hZ2VQcm92aWRlcihRRGVjbGFyYXRpdmVJbWFnZVByb3ZpZGVyOjpQaXhtYXApCisgICAg
LCBtX2RlZmF1bHRGYXZJY29uKFFQaXhtYXAoMSwgMSkpCit7CisgICAgbV9kZWZhdWx0RmF2SWNv
bi5maWxsKFF0Ojp0cmFuc3BhcmVudCk7Cit9CisKK1FXZWJJY29uSW1hZ2VQcm92aWRlcjo6flFX
ZWJJY29uSW1hZ2VQcm92aWRlcigpCit7CisKK30KKworUVBpeG1hcCBRV2ViSWNvbkltYWdlUHJv
dmlkZXI6OnJlcXVlc3RQaXhtYXAoY29uc3QgUVN0cmluZyYgaWQsIFFTaXplKiBzaXplLCBjb25z
dCBRU2l6ZSYpCit7CisgICAgUmVmUHRyPFF0V2ViQ29udGV4dD4gY29udGV4dCA9IFF0V2ViQ29u
dGV4dDo6ZGVmYXVsdENvbnRleHQoKTsKKyAgICBRdFdlYkljb25EYXRhYmFzZSogaWNvbkRhdGFi
YXNlID0gY29udGV4dC0+aWNvbkRhdGFiYXNlKCk7CisKKyAgICBRUGl4bWFwIGljb247CisgICAg
aWYgKCFpY29uRGF0YWJhc2UgfHwgKGljb24gPSBpY29uRGF0YWJhc2UtPmljb25JbWFnZUZvclBh
Z2VVUkwoUVVybChpZCkpKS5pc051bGwoKSkKKyAgICAgICAgaWNvbiA9IG1fZGVmYXVsdEZhdklj
b247CisKKyAgICBpZiAoc2l6ZSkKKyAgICAgICAgKnNpemUgPSBpY29uLnNpemUoKTsKKworICAg
IHJldHVybiBpY29uOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9xdC9xd2ViaWNvbmltYWdlcHJvdmlkZXJfcC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9xdC9xd2ViaWNvbmltYWdlcHJvdmlkZXJfcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk4ZmU5NTgzZTAw
NDNmNjI3MWQ2NGIyYTliZTQ2MTUwY2QzZjEyMDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJpY29uaW1hZ2Vwcm92aWRlcl9wLmgKQEAgLTAs
MCArMSwzNyBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBxd2ViaWNvbmltYWdlcHJv
dmlkZXJfcF9oCisjZGVmaW5lIHF3ZWJpY29uaW1hZ2Vwcm92aWRlcl9wX2gKKworI2luY2x1ZGUg
InF3ZWJraXRnbG9iYWwuaCIKKyNpbmNsdWRlIDxRdERlY2xhcmF0aXZlL1FEZWNsYXJhdGl2ZUlt
YWdlUHJvdmlkZXI+CisjaW5jbHVkZSA8UXRHdWkvUVBpeG1hcD4KKworY2xhc3MgUVdFQktJVF9F
WFBPUlQgUVdlYkljb25JbWFnZVByb3ZpZGVyIDogcHVibGljIFFEZWNsYXJhdGl2ZUltYWdlUHJv
dmlkZXIgeworcHVibGljOgorICAgIFFXZWJJY29uSW1hZ2VQcm92aWRlcigpOworICAgIH5RV2Vi
SWNvbkltYWdlUHJvdmlkZXIoKTsKKyAgICBRUGl4bWFwIHJlcXVlc3RQaXhtYXAoY29uc3QgUVN0
cmluZyYgaWQsIFFTaXplKiBzaXplLCBjb25zdCBRU2l6ZSYgcmVxdWVzdGVkU2l6ZSk7CisKK3By
aXZhdGU6CisgICAgUVBpeG1hcCBtX2RlZmF1bHRGYXZJY29uOworfTsKKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuaAppbmRleCA3MDQyODVlZWU3NWZjMTZjMGI1M2M5
ZmJiMGY3NmY1MTMyNGViM2UyLi4yMWYyMTkxNDlhYzkzZTkyNWVlZGE3ZWFlYzViMTQ4OWE1Zjli
NmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmgKQEAgLTE3MSw2ICsxNzEs
NyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldERhdGFiYXNlRGlyZWN0b3J5KGNvbnN0IFN0cmlu
ZyYgZGlyKSB7IG1fb3ZlcnJpZGVEYXRhYmFzZURpcmVjdG9yeSA9IGRpcjsgfQogICAgIHZvaWQg
c2V0SWNvbkRhdGFiYXNlUGF0aChjb25zdCBTdHJpbmcmKTsKKyAgICBTdHJpbmcgaWNvbkRhdGFi
YXNlUGF0aCgpIGNvbnN0OwogICAgIHZvaWQgc2V0TG9jYWxTdG9yYWdlRGlyZWN0b3J5KGNvbnN0
IFN0cmluZyYgZGlyKSB7IG1fb3ZlcnJpZGVMb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBkaXI7IH0K
IAogICAgIFN0cmluZyBvdmVycmlkZVdlYkluc3BlY3RvckJhc2VEaXJlY3RvcnkoKSBjb25zdCB7
IHJldHVybiBtX292ZXJyaWRlV2ViSW5zcGVjdG9yQmFzZURpcmVjdG9yeTsgfQpAQCAtMjM2LDcg
KzIzNyw2IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIGRhdGFiYXNlRGlyZWN0b3J5KCkgY29uc3Q7
CiAgICAgU3RyaW5nIHBsYXRmb3JtRGVmYXVsdERhdGFiYXNlRGlyZWN0b3J5KCkgY29uc3Q7CiAK
LSAgICBTdHJpbmcgaWNvbkRhdGFiYXNlUGF0aCgpIGNvbnN0OwogICAgIFN0cmluZyBwbGF0Zm9y
bURlZmF1bHRJY29uRGF0YWJhc2VQYXRoKCkgY29uc3Q7CiAKICAgICBTdHJpbmcgbG9jYWxTdG9y
YWdlRGlyZWN0b3J5KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvUXRXZWJDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdl
YkNvbnRleHQuY3BwCmluZGV4IGExZmYxZDIwZDFlMGJlNGIwNGJjNTBiZDE3MzcxOTE1ZjU3MDE4
YWMuLjBlN2JhMDEyNTU3YjI1OGEyZWUwMzM1ZGVmZDhjOGNlYzdlMmExOGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYkNvbnRleHQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYkNvbnRleHQuY3BwCkBAIC0yMyw2ICsyMyw3IEBA
CiAKICNpbmNsdWRlICJNdXRhYmxlQXJyYXkuaCIKICNpbmNsdWRlICJRdERvd25sb2FkTWFuYWdl
ci5oIgorI2luY2x1ZGUgIlF0V2ViSWNvbkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiV0tBUElDYXN0
LmgiCiAjaW5jbHVkZSAiV2ViQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgpA
QCAtOTMsNiArOTQsNyBAQCB2b2lkIFF0V2ViQ29udGV4dDo6cG9zdE1lc3NhZ2VUb05hdmlnYXRv
clF0T2JqZWN0KFdlYlBhZ2VQcm94eSogd2ViUGFnZVByb3h5LCBjbwogdm9pZCBRdFdlYkNvbnRl
eHQ6OmluaXRpYWxpemUoKQogewogICAgIG1fZG93bmxvYWRNYW5hZ2VyID0gYWRvcHRQdHIobmV3
IFF0RG93bmxvYWRNYW5hZ2VyKG1fY29udGV4dC5nZXQoKSkpOworICAgIG1faWNvbkRhdGFiYXNl
ID0gYWRvcHRQdHIobmV3IFF0V2ViSWNvbkRhdGFiYXNlKG1fY29udGV4dC5nZXQoKSkpOwogICAg
IGluaXRpYWxpemVDb250ZXh0SW5qZWN0ZWRCdW5kbGVDbGllbnQoKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViQ29udGV4dC5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViQ29udGV4dC5oCmluZGV4IDk3Y2UyNmQ2ZjlhMjEyNDFm
YjcwNTVlY2FkOWJmMGQ4NDE5ZWE0MjkuLjQ3YzRkYjhhZjg5NGY4N2UyZDM1NzJkMTdkYmRhYmFk
OGViMGMxM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYkNv
bnRleHQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJDb250ZXh0LmgK
QEAgLTM1LDYgKzM1LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFBhZ2VDbGllbnQ7
CiBjbGFzcyBRdERvd25sb2FkTWFuYWdlcjsKK2NsYXNzIFF0V2ViSWNvbkRhdGFiYXNlOwogY2xh
c3MgV2ViQ29udGV4dDsKIGNsYXNzIFdlYlBhZ2VHcm91cDsKIGNsYXNzIFdlYlBhZ2VQcm94eTsK
QEAgLTQ5LDYgKzUwLDcgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8V2ViUGFnZVByb3h5PiBj
cmVhdGVXZWJQYWdlKFBhZ2VDbGllbnQqLCBXZWJQYWdlR3JvdXAqKTsKIAogICAgIFF0RG93bmxv
YWRNYW5hZ2VyKiBkb3dubG9hZE1hbmFnZXIoKSB7IHJldHVybiBtX2Rvd25sb2FkTWFuYWdlci5n
ZXQoKTsgfQorICAgIFF0V2ViSWNvbkRhdGFiYXNlKiBpY29uRGF0YWJhc2UoKSB7IHJldHVybiBt
X2ljb25EYXRhYmFzZS5nZXQoKTsgfQogCiAgICAgdm9pZCBzZXROYXZpZ2F0b3JRdE9iamVjdEVu
YWJsZWQoV2ViUGFnZVByb3h5KiwgYm9vbCk7CiAgICAgdm9pZCBwb3N0TWVzc2FnZVRvTmF2aWdh
dG9yUXRPYmplY3QoV2ViUGFnZVByb3h5KiwgY29uc3QgUVN0cmluZyYpOwpAQCAtNjYsNiArNjgs
NyBAQCBwcml2YXRlOgogCiAgICAgUmVmUHRyPFdlYkNvbnRleHQ+IG1fY29udGV4dDsKICAgICBP
d25QdHI8UXREb3dubG9hZE1hbmFnZXI+IG1fZG93bmxvYWRNYW5hZ2VyOworICAgIE93blB0cjxR
dFdlYkljb25EYXRhYmFzZT4gbV9pY29uRGF0YWJhc2U7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJJY29uRGF0YWJhc2UuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViSWNvbkRhdGFiYXNlLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
OWMzZGZiMWFiYzhjYTZhZmEzNTIyNjIxNTZmNjQzZTFiZjE3ZjRhCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViSWNvbkRhdGFiYXNlLmNwcApAQCAt
MCwwICsxLDk5IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAg
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAg
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiUXRXZWJJY29uRGF0YWJhc2UuaCIKKworI2luY2x1ZGUgIkltYWdlLmgiCisjaW5j
bHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgIldLVVJM
UXQuaCIKKyNpbmNsdWRlICJXZWJDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViSWNvbkRhdGFiYXNl
LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK3N0YXRpYyBpbmxpbmUgUXRXZWJJY29u
RGF0YWJhc2UqIHRvUXRXZWJJY29uRGF0YWJhc2UoY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sK
KyAgICBBU1NFUlQoY2xpZW50SW5mbyk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UXRX
ZWJJY29uRGF0YWJhc2UqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSk7Cit9CisKK1F0
V2ViSWNvbkRhdGFiYXNlOjpRdFdlYkljb25EYXRhYmFzZShXZWJDb250ZXh0KiBjb250ZXh0KQor
eworICAgIC8vIEZJWE1FOiB0aGlzIHNldHRlciBkb2Vzbid0IG9ubHkgc2V0IHRoZSBpY29uIGRh
dGFiYXNlIHBhdGgsIGJ1dCBpdCBhbHNvCisgICAgLy8gdHJpZ2dlciB0aGUgc3RhcnR1cCBvZiBX
ZWJDb250ZXh0J3MgV2ViSWNvbkRhdGFiYXNlLiBUaGUgZ2V0dGVyIHdpbGwgcmV0dXJuCisgICAg
Ly8gdGhlIGRlZmF1bHQgcGxhdGZvcm0gcGF0aCBhbmQgd2lsbCBzdGFydCBXZWJJY29uRGF0YWJh
c2Ugd2l0aCBpdC4KKyAgICBjb250ZXh0LT5zZXRJY29uRGF0YWJhc2VQYXRoKGNvbnRleHQtPmlj
b25EYXRhYmFzZVBhdGgoKSk7CisgICAgbV9pY29uRGF0YWJhc2UgPSBjb250ZXh0LT5pY29uRGF0
YWJhc2UoKTsKKworICAgIFdLSWNvbkRhdGFiYXNlQ2xpZW50IGljb25EYXRhYmFzZUNsaWVudDsK
KyAgICBtZW1zZXQoJmljb25EYXRhYmFzZUNsaWVudCwgMCwgc2l6ZW9mKFdLSWNvbkRhdGFiYXNl
Q2xpZW50KSk7CisgICAgaWNvbkRhdGFiYXNlQ2xpZW50LnZlcnNpb24gPSBrV0tJY29uRGF0YWJh
c2VDbGllbnRDdXJyZW50VmVyc2lvbjsKKyAgICBpY29uRGF0YWJhc2VDbGllbnQuY2xpZW50SW5m
byA9IHRoaXM7CisgICAgaWNvbkRhdGFiYXNlQ2xpZW50LmRpZENoYW5nZUljb25Gb3JQYWdlVVJM
ID0gZGlkQ2hhbmdlSWNvbkZvclBhZ2VVUkw7CisgICAgV0tJY29uRGF0YWJhc2VTZXRJY29uRGF0
YWJhc2VDbGllbnQodG9BUEkobV9pY29uRGF0YWJhc2UpLCAmaWNvbkRhdGFiYXNlQ2xpZW50KTsK
K30KKworUXRXZWJJY29uRGF0YWJhc2U6On5RdFdlYkljb25EYXRhYmFzZSgpCit7CisKK30KKwor
Cit2b2lkIFF0V2ViSWNvbkRhdGFiYXNlOjpkaWRDaGFuZ2VJY29uRm9yUGFnZVVSTChXS0ljb25E
YXRhYmFzZVJlZiBpY29uRGF0YWJhc2UsIFdLVVJMUmVmIHBhZ2VVUkwsIGNvbnN0IHZvaWQqIGNs
aWVudEluZm8pCit7CisgICAgUVVybCBxVXJsID0gV0tVUkxDb3B5UVVybChwYWdlVVJMKTsKKyAg
ICB0b1F0V2ViSWNvbkRhdGFiYXNlKGNsaWVudEluZm8pLT5yZXF1ZXN0SWNvbkZvclBhZ2VVUkwo
cVVybCk7Cit9CisKK1FQaXhtYXAgUXRXZWJJY29uRGF0YWJhc2U6Omljb25JbWFnZUZvclBhZ2VV
UkwoY29uc3QgUVVybCYgcGFnZVVSTCkKK3sKKyAgICBTdHJpbmcgdXJsID0gV2ViQ29yZTo6S1VS
TChwYWdlVVJMKS5zdHJpbmcoKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2U+IGltYWdlID0g
bV9pY29uRGF0YWJhc2UtPmltYWdlRm9yUGFnZVVSTCh1cmwpOworICAgIGlmICghaW1hZ2UpCisg
ICAgICAgIHJldHVybiBRUGl4bWFwKCk7CisKKyAgICBRUGl4bWFwKiBuYXRpdmVJbWFnZSA9IGlt
YWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIGlmICghbmF0aXZlSW1hZ2Up
CisgICAgICAgIHJldHVybiBRUGl4bWFwKCk7CisKKyAgICByZXR1cm4gbmF0aXZlSW1hZ2UtPmNv
cHkoKTsKK30KKwordm9pZCBRdFdlYkljb25EYXRhYmFzZTo6cmVxdWVzdEljb25Gb3JQYWdlVVJM
KGNvbnN0IFFVcmwmIHVybCkKK3sKKyAgICBRUGl4bWFwIGljb24gPSBpY29uSW1hZ2VGb3JQYWdl
VVJMKHVybCk7CisgICAgaWYgKGljb24uaXNOdWxsKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGVtaXQgaWNvblJlYWR5Rm9yUGFnZVVSTCh1cmwpOworfQorCit2b2lkIFF0V2ViSWNvbkRhdGFi
YXNlOjpyZXRhaW5JY29uRm9yUGFnZVVSTChjb25zdCBRVXJsJiBwYWdlVVJMKQoreworICAgIFN0
cmluZyB1cmwgPSBXZWJDb3JlOjpLVVJMKHBhZ2VVUkwpLnN0cmluZygpOworICAgIG1faWNvbkRh
dGFiYXNlLT5yZXRhaW5JY29uRm9yUGFnZVVSTCh1cmwpOworfQorCit2b2lkIFF0V2ViSWNvbkRh
dGFiYXNlOjpyZWxlYXNlSWNvbkZvclBhZ2VVUkwoY29uc3QgUVVybCYgcGFnZVVSTCkKK3sKKyAg
ICBTdHJpbmcgdXJsID0gV2ViQ29yZTo6S1VSTChwYWdlVVJMKS5zdHJpbmcoKTsKKyAgICBtX2lj
b25EYXRhYmFzZS0+cmVsZWFzZUljb25Gb3JQYWdlVVJMKHVybCk7Cit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJJY29uRGF0YWJhc2UuaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYkljb25EYXRhYmFzZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIzMTI4
ZDUxYWI5ZThmYjFhZWZiNjMxOWJkZjA2ZGIxZjk1ZDFkMzIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJJY29uRGF0YWJhc2UuaApAQCAtMCwwICsx
LDU5IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAg
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisKKyNpZm5kZWYgUXRXZWJJY29uRGF0YWJhc2Vf
aAorI2RlZmluZSBRdFdlYkljb25EYXRhYmFzZV9oCisKKyNpbmNsdWRlICJXS0ljb25EYXRhYmFz
ZS5oIgorI2luY2x1ZGUgInF3ZWJraXRnbG9iYWwuaCIKKyNpbmNsdWRlIDxRdENvcmUvUU1hcD4K
KyNpbmNsdWRlIDxRdENvcmUvUU9iamVjdD4KKyNpbmNsdWRlIDxRdENvcmUvUVVybD4KKyNpbmNs
dWRlIDxRdEd1aS9RUGl4bWFwPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYkNvbnRl
eHQ7CitjbGFzcyBXZWJJY29uRGF0YWJhc2U7CisKK2NsYXNzIFF0V2ViSWNvbkRhdGFiYXNlIDog
cHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNUCisKK3B1YmxpYzoKKyAgICBRdFdlYkljb25E
YXRhYmFzZShXZWJDb250ZXh0Kik7CisgICAgflF0V2ViSWNvbkRhdGFiYXNlKCk7CisKKyAgICBR
UGl4bWFwIGljb25JbWFnZUZvclBhZ2VVUkwoY29uc3QgUVVybCYpOworICAgIHZvaWQgcmV0YWlu
SWNvbkZvclBhZ2VVUkwoY29uc3QgUVVybCYpOworICAgIHZvaWQgcmVsZWFzZUljb25Gb3JQYWdl
VVJMKGNvbnN0IFFVcmwmKTsKKworcHVibGljIFFfU0xPVFM6CisgICAgdm9pZCByZXF1ZXN0SWNv
bkZvclBhZ2VVUkwoY29uc3QgUVVybCYpOworCitwdWJsaWM6CisgICAgUV9TSUdOQUwgdm9pZCBp
Y29uUmVhZHlGb3JQYWdlVVJMKGNvbnN0IFFVcmwmKTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMg
dm9pZCBkaWRDaGFuZ2VJY29uRm9yUGFnZVVSTChXS0ljb25EYXRhYmFzZVJlZiwgV0tVUkxSZWYg
cGFnZVVSTCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisgICAgV2ViSWNvbkRhdGFiYXNlKiBt
X2ljb25EYXRhYmFzZTsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvcXR3
ZWJraXQtZXhwb3J0Lm1hcCBiL1NvdXJjZS9xdHdlYmtpdC1leHBvcnQubWFwCmluZGV4IGE1NDZj
YjJmZmU0OWI1YzY4YTkwYzY5YTUwNmY5ZmI4NDE5OTZkM2IuLmE0MGExM2UyMGMzNTExZTk3NjRi
MzFkZTk5MmI3N2U3MmYzYzY3YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9xdHdlYmtpdC1leHBvcnQu
bWFwCisrKyBiL1NvdXJjZS9xdHdlYmtpdC1leHBvcnQubWFwCkBAIC0xMDksNiArMTA5LDE1IEBA
IHF3a18xLjAgewogICAgICAgICAqUVF1aWNrV2ViVmlld1ByaXZhdGU7CiAgICAgICAgIG5vbi12
aXJ0dWFsP3RodW5rP3RvP1FRdWlja1dlYlZpZXdQcml2YXRlKjsKICAgICAgICAgUVF1aWNrV2Vi
Vmlld1ByaXZhdGU6Oio7CisgICAgICAgICpRUXVpY2tXZWJJY29uOworICAgICAgICBub24tdmly
dHVhbD90aHVuaz90bz9RUXVpY2tXZWJJY29uKjsKKyAgICAgICAgUVF1aWNrV2ViSWNvbjo6KjsK
KyAgICAgICAgKlFXZWJJY29uSW1hZ2VQcm92aWRlcjsKKyAgICAgICAgbm9uLXZpcnR1YWw/dGh1
bms/dG8/UVdlYkljb25JbWFnZVByb3ZpZGVyKjsKKyAgICAgICAgUVdlYkljb25JbWFnZVByb3Zp
ZGVyOjoqOworICAgICAgICAqUXRXZWJJY29uRGF0YWJhc2U7CisgICAgICAgIG5vbi12aXJ0dWFs
P3RodW5rP3RvP1F0V2ViSWNvbkRhdGFiYXNlKjsKKyAgICAgICAgUXRXZWJJY29uRGF0YWJhc2U6
Oio7CiAgICAgICAgICpRUXVpY2tXZWJWaWV3UHJpdmF0ZUV4dGVuc2lvbjsKICAgICAgICAgbm9u
LXZpcnR1YWw/dGh1bms/dG8/UVF1aWNrV2ViVmlld1ByaXZhdGVFeHRlbnNpb24qOwogICAgICAg
ICBRUXVpY2tXZWJWaWV3UHJpdmF0ZUV4dGVuc2lvbjo6KjsKZGlmZiAtLWdpdCBhL1Rvb2xzL0No
YW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA3ZDI2MjE2Yzg3OWUyZmU5MDYzYmE4YWE5
OTBjMDE4M2UzMGJlZWI2Li42NzlkZjc2MDY0M2I5YjQ1ODk2MGQ3ZWEwMDU1Zjg5N2UzNTJjZjhk
IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTQgQEAKKzIwMTEtMTEtMzAgIFJhZmFlbCBCcmFuZGFvICA8cmFmYWVsLmxvYm9Ab3Bl
bmJvc3NhLm9yZz4KKworICAgICAgICBbUXRdW1dLMl0gSW1wbGVtZW50IGZhdmljb24gc3VwcG9y
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEwODIK
KworICAgICAgICBBZGRlZCBXZWJJY29uIG9uIE1pbmlCcm93c2VyIHRvIHNob3cgYW4gZXhhbXBs
ZSBvZiBpdHMgdXNhZ2UuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBNaW5pQnJvd3Nlci9xdC9xbWwvQnJvd3NlcldpbmRvdy5xbWw6CisKIDIwMTEt
MTEtMzAgIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgTlJX
VCBzaG93IERSVC9XVFIgYnVpbGQgbG9ncyB3aGVuIHRoZSBidWlsZCBmYWlscyBvciAtLXZlcmJv
c2UgaXMgcGFzc2VkCmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvQnJvd3Nl
cldpbmRvdy5xbWwgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvQnJvd3NlcldpbmRvdy5xbWwK
aW5kZXggNWNjMTUyYWY0OTdjNTFiYjNiZjQ0OWIxZDllZDAyYmMzODNkMTRmYy4uZTYwZTFmYjgw
MGIxOWQ1NTk2YzRlOGZhYTQzNGFiNjIzZDE2MjhiMCAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJy
b3dzZXIvcXQvcW1sL0Jyb3dzZXJXaW5kb3cucW1sCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3F0
L3FtbC9Ccm93c2VyV2luZG93LnFtbApAQCAtMTU3LDYgKzE1NywxOCBAQCBSZWN0YW5nbGUgewog
ICAgICAgICAgICAgICAgIHZpc2libGU6IHdlYlZpZXcubG9hZFByb2dyZXNzICE9IDEwMAogICAg
ICAgICAgICAgfQogCisgICAgICAgICAgICBXZWJJY29uIHsKKyAgICAgICAgICAgICAgICBpZDog
ZmF2aWNvbgorICAgICAgICAgICAgICAgIHNvdXJjZTogd2ViVmlldy51cmwKKyAgICAgICAgICAg
ICAgICB3aWR0aDogMTYKKyAgICAgICAgICAgICAgICBoZWlnaHQ6IDE2CisgICAgICAgICAgICAg
ICAgYW5jaG9ycyB7CisgICAgICAgICAgICAgICAgICAgIGxlZnQ6IHBhcmVudC5sZWZ0CisgICAg
ICAgICAgICAgICAgICAgIGxlZnRNYXJnaW46IDIKKyAgICAgICAgICAgICAgICAgICAgdmVydGlj
YWxDZW50ZXI6IHBhcmVudC52ZXJ0aWNhbENlbnRlcgorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKwogICAgICAgICAgICAgVGV4dElucHV0IHsKICAgICAgICAgICAgICAgICBpZDog
YWRkcmVzc0xpbmUKICAgICAgICAgICAgICAgICBjbGlwOiB0cnVlCkBAIC0xNjcsNyArMTc5LDcg
QEAgUmVjdGFuZ2xlIHsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYW5jaG9y
cyB7CiAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsQ2VudGVyOiBwYXJlbnQudmVydGljYWxD
ZW50ZXIKLSAgICAgICAgICAgICAgICAgICAgbGVmdDogcGFyZW50LmxlZnQKKyAgICAgICAgICAg
ICAgICAgICAgbGVmdDogZmF2aWNvbi5yaWdodAogICAgICAgICAgICAgICAgICAgICByaWdodDog
cGFyZW50LnJpZ2h0CiAgICAgICAgICAgICAgICAgICAgIG1hcmdpbnM6IDIKICAgICAgICAgICAg
ICAgICB9CmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggMDMxNzE3YTgx
OGM4NWMzNDBhOGI0YmIyNzk3MjFjM2MwMjcxMmQ4Yy4uZDE3ODAxZjczNGY5ZTEzNmYzNTNjODA2
N2M1MTFhYThhNmU5NzYxZSAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE0IEBACisyMDExLTExLTMwICBSYWZhZWwgQnJhbmRhbyAgPHJhZmFlbC5sb2Jv
QG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgW1F0XVtXSzJdIEltcGxlbWVudCBmYXZpY29uIHN1
cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcx
MDgyCisKKyAgICAgICAgQWRkZWQgV2ViSWNvbiBhcyBhbiBlbGVtZW50IG9uIFFNTCB0byBkaXNw
bGF5IGZhdm9yaXRlIGljb25zLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogU291cmNlL3F0d2Via2l0LWV4cG9ydC5tYXA6CisKIDIwMTEtMTEtMzAg
IE1hcnkgV3UgIDxtYXJ5Lnd1QHRvcmNobW9iaWxlLmNvbS5jbj4KIAogICAgICAgICByZW1vdmUg
YnVpbGRpbmZvcm1hdGlvbiBmcm9tIEJsYWNrQmVycnkgcG9ydGluZyBidWlsZCBzeXN0ZW0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117976</attachid>
            <date>2011-12-05 18:35:36 -0800</date>
            <delta_ts>2011-12-06 16:17:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71082-20111205233534.patch</filename>
            <type>text/plain</type>
            <size>31423</size>
            <attacher name="Rafael Brandao">rafael.lobo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyMDA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IDI1NmY0M2IyZGRm
MjBkMDIxN2MzNDZhOTM1MGI3ZjVjOWFlYjdmOTQuLjg4MDA5MDBmYzkzOGRjMmZjNmRlZGI2Y2Vk
ZmRiMTc0OTk5NGM0OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTEtMTIt
MDUgIFJhZmFlbCBCcmFuZGFvICA8cmFmYWVsLmxvYm9Ab3BlbmJvc3NhLm9yZz4KKworICAgICAg
ICBbUXRdW1dLMl0gSW1wbGVtZW50IGZhdmljb24gc3VwcG9ydAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEwODIKKworICAgICAgICBBZGRlZCBhdHRy
aWJ1dGUgdG8gUVF1aWNrV2ViVmlldyBuYW1lZCAiaWNvbiIgdGhhdCBzaG91bGQgYmUgdXNlZAor
ICAgICAgICBhcyBzb3VyY2UgZm9yIFFRdWlja0ltYWdlcyBpbiBvcmRlciB0byBkaXNwbGF5IGl0
LiBBbGwgaW1hZ2VzCisgICAgICAgIHBvaW50aW5nIHRvIGl0IHdpbGwgcmVmcmVzaCB3aGVuIHRo
ZSBpY29uIGlzIHJlYWR5LiBXZSBhbHNvIHVzZSBJRHMKKyAgICAgICAgdG8gbWFrZSBpdCBwb3Nz
aWJsZSB0byBoYW5kbGUgZGlmZmVyZW50IGljb25zIGZvciB0aGUgc2FtZSBwYWdlIFVSTAorICAg
ICAgICBpbiBkaWZmZXJlbnQgdGltZXMgKGkuZS4gZHluYW1pY2FsbHkgY2hhbmdpbmcgZmF2aWNv
bikuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBk
ZWNsYXJhdGl2ZS9wbHVnaW4uY3BwOgorICAgICAgICAoV2ViS2l0UW1sUGx1Z2luOjppbml0aWFs
aXplRW5naW5lKTogU2V0dXAgZm9yIHRoZSBRRGVjbGFyYXRpdmVJbWFnZVByb3ZpZGVyIHRvIGRp
c3BsYXkgZmF2aWNvbnMuCisgICAgICAgIEl0cyBoYW5kbGVkIHVybHMgZm9ybWF0IGZvbGxvd3M6
ICJpbWFnZTovL3dlYmljb24vPHBhZ2VVUkw+LzxpY29uSUQ+Ii4KKwogMjAxMS0xMi0wMiAgSGFq
aW1lIE1vcnJpdGEgIDxtb3JyaXRhQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2Vk
LCByb2xsaW5nIG91dCByMTAxNzUxIGFuZCByMTAxNzc1LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDJiMWFhNGUy
YmI3N2UzY2Q1MTNkOTYxODFiMDUyZDUzZDIwZWUzYWQuLmYxZDZkYjViYjFhMTVmNzFmYTIxNmQw
N2YxZWIzODA3ZjYzYWNjMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MSBAQAorMjAxMS0xMi0w
NSAgUmFmYWVsIEJyYW5kYW8gIDxyYWZhZWwubG9ib0BvcGVuYm9zc2Eub3JnPgorCisgICAgICAg
IFtRdF1bV0syXSBJbXBsZW1lbnQgZmF2aWNvbiBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTA4MgorCisgICAgICAgIEFkZGVkIGF0dHJp
YnV0ZSB0byBRUXVpY2tXZWJWaWV3IG5hbWVkICJpY29uIiB0aGF0IHNob3VsZCBiZSB1c2VkCisg
ICAgICAgIGFzIHNvdXJjZSBmb3IgUVF1aWNrSW1hZ2VzIGluIG9yZGVyIHRvIGRpc3BsYXkgaXQu
IEFsbCBpbWFnZXMKKyAgICAgICAgcG9pbnRpbmcgdG8gaXQgd2lsbCByZWZyZXNoIHdoZW4gdGhl
IGljb24gaXMgcmVhZHkuIFdlIGFsc28gdXNlIElEcworICAgICAgICB0byBtYWtlIGl0IHBvc3Np
YmxlIHRvIGhhbmRsZSBkaWZmZXJlbnQgaWNvbnMgZm9yIHRoZSBzYW1lIHBhZ2UgVVJMCisgICAg
ICAgIGluIGRpZmZlcmVudCB0aW1lcyAoaS5lLiBkeW5hbWljYWxseSBjaGFuZ2luZyBmYXZpY29u
KS4KKyAgICAgICAgCisgICAgICAgIEljb25EYXRhYmFzZSBzdG9yYWdlIGxpZXMgb24gVUlQcm9j
ZXNzIGFuZCB0aGUgc3luY2hyb25vdXMgY2FsbCBmb3IKKyAgICAgICAgdGhlIGljb24gdGhhdCBo
YXBwZW5zIG9uIFdlYkljb25EYXRhYmFzZSB3b24ndCBuZWVkIHRvIHNlbmQgYW55IG1lc3NhZ2UK
KyAgICAgICAgdG8gV2ViUHJvY2Vzcy4gVGhlIHBhcnQgb2YgSWNvbkRhdGFiYXNlIG9uIFdlYlBy
b2Nlc3MgaGFuZGxlcyB0aGUgZG93bmxvYWQKKyAgICAgICAgb2YgdGhlIHJlc291cmNlIHdoZW5l
dmVyIGl0IGlzIG5lZWRlZC4gVGhlbiB0aGUgY29udGVudCBkb3dubG9hZGVkIGlzIHNlbnQKKyAg
ICAgICAgdGhyb3VnaCBJUEMgdG8gdGhlIGFjdHVhbCBkYXRhYmFzZSwgb24gVUlQcm9jZXNzLgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGFyZ2V0
LnByaToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwOgorICAg
ICAgICAoUVF1aWNrV2ViVmlldzo6aWNvbik6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9x
cXVpY2t3ZWJ2aWV3X3AuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3F3ZWJpY29uaW1h
Z2Vwcm92aWRlci5jcHA6IEFkZGVkLgorICAgICAgICAoUVdlYkljb25JbWFnZVByb3ZpZGVyOjpR
V2ViSWNvbkltYWdlUHJvdmlkZXIpOgorICAgICAgICAoUVdlYkljb25JbWFnZVByb3ZpZGVyOjp+
UVdlYkljb25JbWFnZVByb3ZpZGVyKToKKyAgICAgICAgKFFXZWJJY29uSW1hZ2VQcm92aWRlcjo6
cmVxdWVzdEltYWdlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3F3ZWJpY29uaW1hZ2Vw
cm92aWRlcl9wLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb250ZXh0Lmg6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYkljb25EYXRhYmFzZTo6aW1hZ2VGb3JQYWdlVVJMKTogQWRkZWQgaWNvblNpemUgcGFyYW1l
dGVyCisgICAgICAgIGFuZCBhbHNvIGl0cyBkZWZhdWx0IHZhbHVlIHNvIGl0IHdvbid0IGJyZWFr
IGFueXRoaW5nIHRoYXQgcmVsaWVzIG9uIHRoZQorICAgICAgICBvbGQgdXNhZ2UuIEJ1dCB0aGUg
c3VwcG9ydCBmb3IgbXVsdGlwbGUgc2l6ZXMgb24gZmF2aWNvbnMgaXMgc3RpbGwgbWlzc2luZy4K
KyAgICAgICAgKiBVSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmg6IFNhbWUgYXMgYWJvdmUuCisg
ICAgICAgICogVUlQcm9jZXNzL3F0L1F0V2ViQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OlF0V2ViQ29udGV4dDo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0V2Vi
Q29udGV4dC5oOgorICAgICAgICAoV2ViS2l0OjpRdFdlYkNvbnRleHQ6Omljb25EYXRhYmFzZSk6
CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0V2ViSWNvbkRhdGFiYXNlLmNwcDogQWRkZWQuCisg
ICAgICAgICh0b1F0V2ViSWNvbkRhdGFiYXNlKToKKyAgICAgICAgKFF0V2ViSWNvbkRhdGFiYXNl
OjpRdFdlYkljb25EYXRhYmFzZSk6CisgICAgICAgIChRdFdlYkljb25EYXRhYmFzZTo6flF0V2Vi
SWNvbkRhdGFiYXNlKToKKyAgICAgICAgKFF0V2ViSWNvbkRhdGFiYXNlOjpkaWRDaGFuZ2VJY29u
Rm9yUGFnZVVSTCk6CisgICAgICAgIChRdFdlYkljb25EYXRhYmFzZTo6aWNvbkltYWdlRm9yUGFn
ZVVSTCk6CisgICAgICAgIChRdFdlYkljb25EYXRhYmFzZTo6cmVxdWVzdEljb25Gb3JQYWdlVVJM
KToKKyAgICAgICAgKFF0V2ViSWNvbkRhdGFiYXNlOjpyZXRhaW5JY29uRm9yUGFnZVVSTCk6Cisg
ICAgICAgIChRdFdlYkljb25EYXRhYmFzZTo6cmVsZWFzZUljb25Gb3JQYWdlVVJMKToKKyAgICAg
ICAgKFF0V2ViSWNvbkRhdGFiYXNlOjpuZXh0SWNvbklEKToKKyAgICAgICAgKFF0V2ViSWNvbkRh
dGFiYXNlOjpmcm9tSWNvblVSTHRvUGFnZVVSTCk6IEV4dHJhY3RzIHRoZSBwYWdlVVJMIGZyb20g
aWNvblVSTCBhcworICAgICAgICB3ZSBmb2xsb3cgdGhlIGZvcm1hdCBmb3IgaWNvblVSTHMgIjxw
YWdlVVJMPi88aWNvbklEPiIuIFRoZSBwcmVmaXggImltYWdlOi8vd2ViaWNvbi8iCisgICAgICAg
IGlzIHRha2VuIGF3YXkgb25jZSBpdCBnZXRzIGF0IHRoZSBpbWFnZSBwcm92aWRlci4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvcXQvUXRXZWJJY29uRGF0YWJhc2UuaDogQWRkZWQuCisgICAgICAgICog
VUlQcm9jZXNzL3F0L1F0V2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFF0V2ViUGFnZVByb3h5
OjpRdFdlYlBhZ2VQcm94eSk6CisgICAgICAgIChRdFdlYlBhZ2VQcm94eTo6b25JY29uUmVhZHlG
b3JQYWdlVVJMKToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuaDoKKyAg
ICAgICAgKFF0V2ViUGFnZVByb3h5OjppY29uKToKKwogMjAxMS0xMi0wNSAgTGFzemxvIEdvbWJv
cyAgPGxhc3psby4xLmdvbWJvc0Bub2tpYS5jb20+CiAKICAgICAgICAgW1F0XSBSZW1vdmUgdmll
d01vZGVDaGFuZ2VkKCkgZnJvbSBRUXVpY2tXZWJWaWV3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L3F0L2RlY2xhcmF0aXZlL3BsdWdpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0
aXZlL3BsdWdpbi5jcHAKaW5kZXggZDAzOWI4YTk5OGIyZjA4ZWQ5ZWM5ZWY5Mjg0ZGVlYWIwZjdl
MzIwZi4uMGRjZjkzMWY5MDM0YjU0ZDY5YmQ3NjNiZWRjMzU1N2Y0YTI5MjUyMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9wbHVnaW4uY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvcXQvZGVjbGFyYXRpdmUvcGx1Z2luLmNwcApAQCAtMjUsOSArMjUsMTEgQEAKICNpZiBk
ZWZpbmVkKEhBVkVfV0VCS0lUMikKICNpbmNsdWRlICJxcXVpY2t3ZWJwYWdlX3AuaCIKICNpbmNs
dWRlICJxcXVpY2t3ZWJ2aWV3X3AuaCIKKyNpbmNsdWRlICJxd2ViaWNvbmltYWdlcHJvdmlkZXJf
cC5oIgogI2luY2x1ZGUgInF3ZWJwZXJtaXNzaW9ucmVxdWVzdF9wLmgiCiAjaW5jbHVkZSAicXdl
YnByZWZlcmVuY2VzX3AuaCIKIAorI2luY2x1ZGUgPFF0RGVjbGFyYXRpdmUvcWRlY2xhcmF0aXZl
ZW5naW5lLmg+CiAjaW5jbHVkZSA8UXROZXR3b3JrL3FuZXR3b3JrcmVwbHkuaD4KICNlbmRpZgog
CkBAIC0zNiw2ICszOCwxNCBAQCBRVF9CRUdJTl9OQU1FU1BBQ0UKIGNsYXNzIFdlYktpdFFtbFBs
dWdpbiA6IHB1YmxpYyBRRGVjbGFyYXRpdmVFeHRlbnNpb25QbHVnaW4gewogICAgIFFfT0JKRUNU
CiBwdWJsaWM6CisjaWYgZGVmaW5lZChIQVZFX1dFQktJVDIpCisgICAgdmlydHVhbCB2b2lkIGlu
aXRpYWxpemVFbmdpbmUoUURlY2xhcmF0aXZlRW5naW5lKiBlbmdpbmUsIGNvbnN0IGNoYXIqIHVy
aSkKKyAgICB7CisgICAgICAgIFFfQVNTRVJUKFFMYXRpbjFTdHJpbmcodXJpKSA9PSBRTGF0aW4x
U3RyaW5nKCJRdFdlYktpdCIpKTsKKyAgICAgICAgZW5naW5lLT5hZGRJbWFnZVByb3ZpZGVyKFFM
YXRpbjFTdHJpbmcoIndlYmljb24iKSwgbmV3IFFXZWJJY29uSW1hZ2VQcm92aWRlcik7CisgICAg
fQorI2VuZGlmCisKICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJUeXBlcyhjb25zdCBjaGFyKiB1
cmkpCiAgICAgewogICAgICAgICBRX0FTU0VSVChRTGF0aW4xU3RyaW5nKHVyaSkgPT0gUUxhdGlu
MVN0cmluZygiUXRXZWJLaXQiKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQu
cHJpIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQppbmRleCAxYjYzYTI3ZDYzY2I1M2QzMzQw
ODZkY2JmZjU2ZjI3MzBmNDc2NDFjLi5hNTAwNTAxNTQ0ZTc3NTRlMGRlODA5MDAyZjM3NTRjYjFi
ZWIzN2UxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1RhcmdldC5wcmkKQEAgLTI2Myw2ICsyNjMsNyBAQCBIRUFERVJTICs9IFwKICAg
ICBVSVByb2Nlc3MvcXQvUXRTR1RpbGVOb2RlLmggXAogICAgIFVJUHJvY2Vzcy9xdC9RdFZpZXdw
b3J0SW50ZXJhY3Rpb25FbmdpbmUuaCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0V2ViVW5kb0NvbW1h
bmQuaCBcCisgICAgVUlQcm9jZXNzL3F0L1F0V2ViSWNvbkRhdGFiYXNlLmggXAogICAgIFVJUHJv
Y2Vzcy9xdC9XZWJDb250ZXh0TWVudVByb3h5UXQuaCBcCiAgICAgVUlQcm9jZXNzL3F0L1dlYkdl
b2xvY2F0aW9uUHJvdmlkZXJRdC5oIFwKICAgICBVSVByb2Nlc3MvcXQvV2ViUG9wdXBNZW51UHJv
eHlRdC5oIFwKQEAgLTQ4Nyw2ICs0ODgsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBVSVByb2Nlc3Mv
QVBJL3F0L3F3ZWJwZXJtaXNzaW9ucmVxdWVzdC5jcHAgXAogICAgIFVJUHJvY2Vzcy9BUEkvcXQv
cXF1aWNrd2VicGFnZS5jcHAgXAogICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5j
cHAgXAorICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXdlYmljb25pbWFnZXByb3ZpZGVyLmNwcCBcCiAg
ICAgVUlQcm9jZXNzL0FQSS9xdC9xd2VicHJlZmVyZW5jZXMuY3BwIFwKICAgICBVSVByb2Nlc3Mv
QXV0aGVudGljYXRpb24vQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5jcHAgXAogICAgIFVJ
UHJvY2Vzcy9BdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXIuY3Bw
IFwKQEAgLTU4NSw2ICs1ODcsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBVSVByb2Nlc3MvcXQvV2Vi
UG9wdXBNZW51UHJveHlRdC5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9XZWJQb3B1cE1lbnVQcm94
eVF0RGVza3RvcC5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9XZWJQcmVmZXJlbmNlc1F0LmNwcCBc
CisgICAgVUlQcm9jZXNzL3F0L1F0V2ViSWNvbkRhdGFiYXNlLmNwcCBcCiAgICAgV2ViUHJvY2Vz
cy9BcHBsaWNhdGlvbkNhY2hlL1dlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLmNwcCBcCiAgICAg
V2ViUHJvY2Vzcy9BdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdGlvbk1hbmFnZXIuY3BwIFwKICAg
ICBXZWJQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAgXApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAKaW5kZXggM2EwZjlk
ZTI4NGI3MjdmYWU0NTIwNjM2MmIzNGNmZDY4MTUzOWJhYS4uNjZmYTRlMDcxYzBlZTYzMzU2Y2E1
OTRhNzZiMjk0YjkyMTg2ZmI5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwCkBAIC01NTgsNiArNTU4LDEyIEBAIFFVcmwgUVF1aWNr
V2ViVmlldzo6dXJsKCkgY29uc3QKICAgICByZXR1cm4gZC0+cGFnZVByb3h5LT51cmwoKTsKIH0K
IAorUVVybCBRUXVpY2tXZWJWaWV3OjppY29uKCkgY29uc3QKK3sKKyAgICBRX0QoY29uc3QgUVF1
aWNrV2ViVmlldyk7CisgICAgcmV0dXJuIGQtPnBhZ2VQcm94eS0+aWNvbigpOworfQorCiBpbnQg
UVF1aWNrV2ViVmlldzo6bG9hZFByb2dyZXNzKCkgY29uc3QKIHsKICAgICBRX0QoY29uc3QgUVF1
aWNrV2ViVmlldyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0
L3FxdWlja3dlYnZpZXdfcC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVp
Y2t3ZWJ2aWV3X3AuaAppbmRleCA2N2IwOGZkODE0NDYyODdiYzkxODdkZjIxZTY3NjllM2Y5Mzhk
MDc5Li4yNDIwYjk1YWQzMDQwYjJkNzEyOGIwYzg5YTMyNTJkYzdlMmMxMTNiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmgKQEAgLTUw
LDYgKzUwLDcgQEAgY2xhc3MgUVdFQktJVF9FWFBPUlQgUVF1aWNrV2ViVmlldyA6IHB1YmxpYyBR
UXVpY2tJdGVtIHsKICAgICBRX09CSkVDVAogICAgIFFfUFJPUEVSVFkoUVN0cmluZyB0aXRsZSBS
RUFEIHRpdGxlIE5PVElGWSB0aXRsZUNoYW5nZWQpCiAgICAgUV9QUk9QRVJUWShRVXJsIHVybCBS
RUFEIHVybCBOT1RJRlkgdXJsQ2hhbmdlZCkKKyAgICBRX1BST1BFUlRZKFFVcmwgaWNvbiBSRUFE
IGljb24gTk9USUZZIGljb25DaGFuZ2VkKQogICAgIFFfUFJPUEVSVFkoaW50IGxvYWRQcm9ncmVz
cyBSRUFEIGxvYWRQcm9ncmVzcyBOT1RJRlkgbG9hZFByb2dyZXNzQ2hhbmdlZCkKICAgICBRX1BS
T1BFUlRZKGJvb2wgY2FuR29CYWNrIFJFQUQgY2FuR29CYWNrIE5PVElGWSBuYXZpZ2F0aW9uU3Rh
dGVDaGFuZ2VkIEZJTkFMKQogICAgIFFfUFJPUEVSVFkoYm9vbCBjYW5Hb0ZvcndhcmQgUkVBRCBj
YW5Hb0ZvcndhcmQgTk9USUZZIG5hdmlnYXRpb25TdGF0ZUNoYW5nZWQgRklOQUwpCkBAIC03Nyw2
ICs3OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5RUXVpY2tXZWJWaWV3KCk7CiAKICAgICBR
VXJsIHVybCgpIGNvbnN0OworICAgIFFVcmwgaWNvbigpIGNvbnN0OwogICAgIFFTdHJpbmcgdGl0
bGUoKSBjb25zdDsKICAgICBpbnQgbG9hZFByb2dyZXNzKCkgY29uc3Q7CiAKQEAgLTEwOSw2ICsx
MTEsNyBAQCBRX1NJR05BTFM6CiAgICAgdm9pZCBsb2FkRmFpbGVkKFFRdWlja1dlYlZpZXc6OkVy
cm9yVHlwZSBlcnJvclR5cGUsIGludCBlcnJvckNvZGUsIGNvbnN0IFFVcmwmIHVybCk7CiAgICAg
dm9pZCBsb2FkUHJvZ3Jlc3NDaGFuZ2VkKGludCBwcm9ncmVzcyk7CiAgICAgdm9pZCB1cmxDaGFu
Z2VkKGNvbnN0IFFVcmwmIHVybCk7CisgICAgdm9pZCBpY29uQ2hhbmdlZChjb25zdCBRVXJsJiBp
Y29uVVJMKTsKICAgICB2b2lkIG1lc3NhZ2VSZWNlaXZlZChjb25zdCBRVmFyaWFudE1hcCYgbWVz
c2FnZSk7CiAgICAgdm9pZCBsaW5rSG92ZXJlZChjb25zdCBRVXJsJiB1cmwsIGNvbnN0IFFTdHJp
bmcmIHRpdGxlKTsKICAgICB2b2lkIG5hdmlnYXRpb25TdGF0ZUNoYW5nZWQoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdlYmljb25pbWFnZXByb3ZpZGVy
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdlYmljb25pbWFnZXByb3Zp
ZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5jNGY5N2Y5Y2NhZmRiNmMzNWY5MTA3YzU1ZDEzNjFkNTZmODY3
MDUxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9x
d2ViaWNvbmltYWdlcHJvdmlkZXIuY3BwCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgICAgQ29weXJp
Z2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJxd2ViaWNvbmltYWdlcHJvdmlk
ZXJfcC5oIgorCisjaW5jbHVkZSAiUXRXZWJJY29uRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJRdFdl
YlBhZ2VQcm94eS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitRV2ViSWNvbkltYWdl
UHJvdmlkZXI6OlFXZWJJY29uSW1hZ2VQcm92aWRlcigpCisgICAgOiBRRGVjbGFyYXRpdmVJbWFn
ZVByb3ZpZGVyKFFEZWNsYXJhdGl2ZUltYWdlUHJvdmlkZXI6OkltYWdlKQorICAgICwgbV9kZWZh
dWx0RmF2SWNvbigxLCAxLCBRSW1hZ2U6OkZvcm1hdF9BUkdCNDQ0NF9QcmVtdWx0aXBsaWVkKQor
eworICAgIG1fZGVmYXVsdEZhdkljb24uZmlsbChRdDo6dHJhbnNwYXJlbnQpOworfQorCitRV2Vi
SWNvbkltYWdlUHJvdmlkZXI6On5RV2ViSWNvbkltYWdlUHJvdmlkZXIoKQoreworCit9CisKK1FJ
bWFnZSBRV2ViSWNvbkltYWdlUHJvdmlkZXI6OnJlcXVlc3RJbWFnZShjb25zdCBRU3RyaW5nJiBp
ZCwgUVNpemUqIHNpemUsIGNvbnN0IFFTaXplJiByZXF1ZXN0ZWRTaXplKQoreworICAgIFJlZlB0
cjxRdFdlYkNvbnRleHQ+IGNvbnRleHQgPSBRdFdlYkNvbnRleHQ6OmRlZmF1bHRDb250ZXh0KCk7
CisgICAgUXRXZWJJY29uRGF0YWJhc2UqIGljb25EYXRhYmFzZSA9IGNvbnRleHQtPmljb25EYXRh
YmFzZSgpOworICAgIFFVcmwgcGFnZVVSTCA9IFF0V2ViSWNvbkRhdGFiYXNlOjpmcm9tSWNvblVS
THRvUGFnZVVSTChpZCk7CisgICAgUUltYWdlIGljb247CisgICAgaWYgKGljb25EYXRhYmFzZSkg
eworICAgICAgICBpZiAocmVxdWVzdGVkU2l6ZS5pc1ZhbGlkKCkpCisgICAgICAgICAgICBpY29u
ID0gaWNvbkRhdGFiYXNlLT5pY29uSW1hZ2VGb3JQYWdlVVJMKHBhZ2VVUkwsIHJlcXVlc3RlZFNp
emUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBpY29uID0gaWNvbkRhdGFiYXNlLT5pY29u
SW1hZ2VGb3JQYWdlVVJMKHBhZ2VVUkwpOworICAgIH0KKyAgICBpZiAoaWNvbi5pc051bGwoKSkK
KyAgICAgICAgaWNvbiA9IG1fZGVmYXVsdEZhdkljb247CisKKyAgICBpZiAoc2l6ZSkKKyAgICAg
ICAgKnNpemUgPSBpY29uLnNpemUoKTsKKworICAgIHJldHVybiBpY29uOworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2ViaWNvbmltYWdlcHJvdmlkZXJf
cC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2ViaWNvbmltYWdlcHJvdmlk
ZXJfcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjYzYzM3ZTAwYmZlNDc1MzI4YmU1YjhlODE1ZWM0NzcxMTkxNTlk
ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3
ZWJpY29uaW1hZ2Vwcm92aWRlcl9wLmgKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAgICBDb3B5cmln
aHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
Ki8KKworI2lmbmRlZiBxd2ViaWNvbmltYWdlcHJvdmlkZXJfcF9oCisjZGVmaW5lIHF3ZWJpY29u
aW1hZ2Vwcm92aWRlcl9wX2gKKworI2luY2x1ZGUgInF3ZWJraXRnbG9iYWwuaCIKKyNpbmNsdWRl
IDxRdERlY2xhcmF0aXZlL1FEZWNsYXJhdGl2ZUltYWdlUHJvdmlkZXI+CisjaW5jbHVkZSA8UXRH
dWkvUUltYWdlPgorCitjbGFzcyBRV0VCS0lUX0VYUE9SVCBRV2ViSWNvbkltYWdlUHJvdmlkZXIg
OiBwdWJsaWMgUURlY2xhcmF0aXZlSW1hZ2VQcm92aWRlciB7CitwdWJsaWM6CisgICAgUVdlYklj
b25JbWFnZVByb3ZpZGVyKCk7CisgICAgflFXZWJJY29uSW1hZ2VQcm92aWRlcigpOworICAgIFFJ
bWFnZSByZXF1ZXN0SW1hZ2UoY29uc3QgUVN0cmluZyYgaWQsIFFTaXplKiBzaXplLCBjb25zdCBR
U2l6ZSYgcmVxdWVzdGVkU2l6ZSk7CisKK3ByaXZhdGU6CisgICAgUUltYWdlIG1fZGVmYXVsdEZh
dkljb247Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJDb250ZXh0LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5oCmlu
ZGV4IDcwNDI4NWVlZTc1ZmMxNmMwYjUzYzlmYmIwZjc2ZjUxMzI0ZWIzZTIuLjIxZjIxOTE0OWFj
OTNlOTI1ZWVkYTdlYWVjNWIxNDg5YTVmOWI2ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YkNvbnRleHQuaApAQCAtMTcxLDYgKzE3MSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0RGF0
YWJhc2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBkaXIpIHsgbV9vdmVycmlkZURhdGFiYXNlRGly
ZWN0b3J5ID0gZGlyOyB9CiAgICAgdm9pZCBzZXRJY29uRGF0YWJhc2VQYXRoKGNvbnN0IFN0cmlu
ZyYpOworICAgIFN0cmluZyBpY29uRGF0YWJhc2VQYXRoKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRM
b2NhbFN0b3JhZ2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBkaXIpIHsgbV9vdmVycmlkZUxvY2Fs
U3RvcmFnZURpcmVjdG9yeSA9IGRpcjsgfQogCiAgICAgU3RyaW5nIG92ZXJyaWRlV2ViSW5zcGVj
dG9yQmFzZURpcmVjdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcnJpZGVXZWJJbnNwZWN0b3JC
YXNlRGlyZWN0b3J5OyB9CkBAIC0yMzYsNyArMjM3LDYgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcg
ZGF0YWJhc2VEaXJlY3RvcnkoKSBjb25zdDsKICAgICBTdHJpbmcgcGxhdGZvcm1EZWZhdWx0RGF0
YWJhc2VEaXJlY3RvcnkoKSBjb25zdDsKIAotICAgIFN0cmluZyBpY29uRGF0YWJhc2VQYXRoKCkg
Y29uc3Q7CiAgICAgU3RyaW5nIHBsYXRmb3JtRGVmYXVsdEljb25EYXRhYmFzZVBhdGgoKSBjb25z
dDsKIAogICAgIFN0cmluZyBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKSBjb25zdDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5jcHAKaW5kZXggODQyN2NhMzVlMDg1
M2JkZGZjZmNiZGU2MjQ4MzU4NDFhMzViYTE0OC4uZTBkYWNhMmZiNjNmODQ2N2JmYTgzZjZlNmE2
MGJjNWMwYWI2YzJhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYklj
b25EYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRh
YmFzZS5jcHAKQEAgLTE3NSwxNCArMTc1LDE0IEBAIHZvaWQgV2ViSWNvbkRhdGFiYXNlOjpnZXRM
b2FkRGVjaXNpb25Gb3JJY29uVVJMKGNvbnN0IFN0cmluZyYgaWNvblVSTCwgdWludDY0X3QKICAg
ICBtX3dlYkNvbnRleHQtPnNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViSWNvbkRhdGFi
YXNlUHJveHk6OlJlY2VpdmVkSWNvbkxvYWREZWNpc2lvbigoaW50KWRlY2lzaW9uLCBjYWxsYmFj
a0lEKSk7CiB9CiAKLUltYWdlKiBXZWJJY29uRGF0YWJhc2U6OmltYWdlRm9yUGFnZVVSTChjb25z
dCBTdHJpbmcmIHBhZ2VVUkwpCitJbWFnZSogV2ViSWNvbkRhdGFiYXNlOjppbWFnZUZvclBhZ2VV
UkwoY29uc3QgU3RyaW5nJiBwYWdlVVJMLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBpY29uU2l6
ZSkKIHsKICAgICBpZiAoIW1fd2ViQ29udGV4dCB8fCAhbV9pY29uRGF0YWJhc2VJbXBsIHx8ICFt
X2ljb25EYXRhYmFzZUltcGwtPmlzT3BlbigpIHx8IHBhZ2VVUkwuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm4gMDsgICAgCiAKICAgICAvLyBUaGUgV2ViQ29yZSBJY29uRGF0YWJhc2UgaWdub3Jl
cyB0aGUgcGFzc2VkIGluIHNpemUgcGFyYW1ldGVyLgogICAgIC8vIElmIHRoYXQgY2hhbmdlcyB3
ZSdsbCBuZWVkIHRvIHJldGhpbmsgaG93IHRoaXMgQVBJIGlzIGV4cG9zZWQuCi0gICAgcmV0dXJu
IG1faWNvbkRhdGFiYXNlSW1wbC0+c3luY2hyb25vdXNJY29uRm9yUGFnZVVSTChwYWdlVVJMLCBX
ZWJDb3JlOjpJbnRTaXplKDMyLCAzMikpOworICAgIHJldHVybiBtX2ljb25EYXRhYmFzZUltcGwt
PnN5bmNocm9ub3VzSWNvbkZvclBhZ2VVUkwocGFnZVVSTCwgaWNvblNpemUpOwogfQogCiB2b2lk
IFdlYkljb25EYXRhYmFzZTo6cmVtb3ZlQWxsSWNvbnMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYkljb25EYXRhYmFzZS5oCmluZGV4IDBjMjQzZWYwODcyMDIxOWJhMTA1ZGU0YjFhYzZk
ZDQ3N2Q2ODQ5YWQuLmI3NGMyMTA4NjQ4NTE3MDA5NjczNDk4MGRiMTcwNTlmMmNkZTI4MTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmgKQEAgLTMxLDYgKzMx
LDcgQEAKICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiV2ViSWNvbkRhdGFiYXNl
Q2xpZW50LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9JY29uRGF0YWJhc2VDbGllbnQuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0ludFNpemUuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtNzYsNyAr
NzcsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBnZXRMb2FkRGVjaXNpb25Gb3JJY29uVVJM
KGNvbnN0IFN0cmluZyYsIHVpbnQ2NF90IGNhbGxiYWNrSUQpOwogCi0gICAgV2ViQ29yZTo6SW1h
Z2UqIGltYWdlRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmKTsKKyAgICBXZWJDb3JlOjpJbWFnZSog
aW1hZ2VGb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGlj
b25TaXplID0gV2ViQ29yZTo6SW50U2l6ZSgzMiwgMzIpKTsKICAgICAKICAgICB2b2lkIHJlbW92
ZUFsbEljb25zKCk7CiAgICAgdm9pZCBjaGVja0ludGVncml0eUJlZm9yZU9wZW5pbmcoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYkNvbnRleHQuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViQ29udGV4dC5jcHAKaW5kZXggYTFmZjFk
MjBkMWUwYmU0YjA0YmM1MGJkMTczNzE5MTVmNTcwMThhYy4uMGU3YmEwMTI1NTdiMjU4YTJlZTAz
MzVkZWZkOGM4Y2VjN2UyYTE4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3F0L1F0V2ViQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0
V2ViQ29udGV4dC5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgIk11dGFibGVBcnJh
eS5oIgogI2luY2x1ZGUgIlF0RG93bmxvYWRNYW5hZ2VyLmgiCisjaW5jbHVkZSAiUXRXZWJJY29u
RGF0YWJhc2UuaCIKICNpbmNsdWRlICJXS0FQSUNhc3QuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0
LmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCkBAIC05Myw2ICs5NCw3IEBAIHZvaWQgUXRX
ZWJDb250ZXh0Ojpwb3N0TWVzc2FnZVRvTmF2aWdhdG9yUXRPYmplY3QoV2ViUGFnZVByb3h5KiB3
ZWJQYWdlUHJveHksIGNvCiB2b2lkIFF0V2ViQ29udGV4dDo6aW5pdGlhbGl6ZSgpCiB7CiAgICAg
bV9kb3dubG9hZE1hbmFnZXIgPSBhZG9wdFB0cihuZXcgUXREb3dubG9hZE1hbmFnZXIobV9jb250
ZXh0LmdldCgpKSk7CisgICAgbV9pY29uRGF0YWJhc2UgPSBhZG9wdFB0cihuZXcgUXRXZWJJY29u
RGF0YWJhc2UobV9jb250ZXh0LmdldCgpKSk7CiAgICAgaW5pdGlhbGl6ZUNvbnRleHRJbmplY3Rl
ZEJ1bmRsZUNsaWVudCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvUXRXZWJDb250ZXh0LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJD
b250ZXh0LmgKaW5kZXggOTdjZTI2ZDZmOWEyMTI0MWZiNzA1NWVjYWQ5YmYwZDg0MTllYTQyOS4u
NDdjNGRiOGFmODk0Zjg3ZTJkMzU3MmQxN2RiZGFiYWQ4ZWIwYzEzZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9xdC9RdFdlYkNvbnRleHQuaApAQCAtMzUsNiArMzUsNyBAQCBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAogY2xhc3MgUGFnZUNsaWVudDsKIGNsYXNzIFF0RG93bmxvYWRNYW5hZ2Vy
OworY2xhc3MgUXRXZWJJY29uRGF0YWJhc2U7CiBjbGFzcyBXZWJDb250ZXh0OwogY2xhc3MgV2Vi
UGFnZUdyb3VwOwogY2xhc3MgV2ViUGFnZVByb3h5OwpAQCAtNDksNiArNTAsNyBAQCBwdWJsaWM6
CiAgICAgUGFzc1JlZlB0cjxXZWJQYWdlUHJveHk+IGNyZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCos
IFdlYlBhZ2VHcm91cCopOwogCiAgICAgUXREb3dubG9hZE1hbmFnZXIqIGRvd25sb2FkTWFuYWdl
cigpIHsgcmV0dXJuIG1fZG93bmxvYWRNYW5hZ2VyLmdldCgpOyB9CisgICAgUXRXZWJJY29uRGF0
YWJhc2UqIGljb25EYXRhYmFzZSgpIHsgcmV0dXJuIG1faWNvbkRhdGFiYXNlLmdldCgpOyB9CiAK
ICAgICB2b2lkIHNldE5hdmlnYXRvclF0T2JqZWN0RW5hYmxlZChXZWJQYWdlUHJveHkqLCBib29s
KTsKICAgICB2b2lkIHBvc3RNZXNzYWdlVG9OYXZpZ2F0b3JRdE9iamVjdChXZWJQYWdlUHJveHkq
LCBjb25zdCBRU3RyaW5nJik7CkBAIC02Niw2ICs2OCw3IEBAIHByaXZhdGU6CiAKICAgICBSZWZQ
dHI8V2ViQ29udGV4dD4gbV9jb250ZXh0OwogICAgIE93blB0cjxRdERvd25sb2FkTWFuYWdlcj4g
bV9kb3dubG9hZE1hbmFnZXI7CisgICAgT3duUHRyPFF0V2ViSWNvbkRhdGFiYXNlPiBtX2ljb25E
YXRhYmFzZTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9x
dC9RdFdlYkljb25EYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRX
ZWJJY29uRGF0YWJhc2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYyZDMwZGYxM2YxM2FjYzcwMTVkNjk5NThh
YzdiYzE1YTIxZmE2NDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvUXRXZWJJY29uRGF0YWJhc2UuY3BwCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICAgIENv
cHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUXRXZWJJY29uRGF0YWJh
c2UuaCIKKworI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUg
IlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgIldLVVJMUXQuaCIKKyNpbmNsdWRlICJXZWJDb250
ZXh0LmgiCisjaW5jbHVkZSAiV2ViSWNvbkRhdGFiYXNlLmgiCisjaW5jbHVkZSA8UXRDb3JlL1FT
dHJpbmdSZWY+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK3N0YXRpYyBpbmxpbmUgUXRX
ZWJJY29uRGF0YWJhc2UqIHRvUXRXZWJJY29uRGF0YWJhc2UoY29uc3Qgdm9pZCogY2xpZW50SW5m
bykKK3sKKyAgICBBU1NFUlQoY2xpZW50SW5mbyk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8UXRXZWJJY29uRGF0YWJhc2UqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSk7Cit9
CisKK1F0V2ViSWNvbkRhdGFiYXNlOjpRdFdlYkljb25EYXRhYmFzZShXZWJDb250ZXh0KiBjb250
ZXh0KQorICAgIDogbV9pY29uSUQoMCkKK3sKKyAgICAvLyBGSVhNRTogdGhpcyBzZXR0ZXIgZG9l
c24ndCBvbmx5IHNldCB0aGUgaWNvbiBkYXRhYmFzZSBwYXRoLCBidXQgaXQgYWxzbworICAgIC8v
IHRyaWdnZXIgdGhlIHN0YXJ0dXAgb2YgV2ViQ29udGV4dCdzIFdlYkljb25EYXRhYmFzZS4gVGhl
IGdldHRlciB3aWxsIHJldHVybgorICAgIC8vIHRoZSBkZWZhdWx0IHBsYXRmb3JtIHBhdGggYW5k
IHdpbGwgc3RhcnQgV2ViSWNvbkRhdGFiYXNlIHdpdGggaXQuCisgICAgY29udGV4dC0+c2V0SWNv
bkRhdGFiYXNlUGF0aChjb250ZXh0LT5pY29uRGF0YWJhc2VQYXRoKCkpOworICAgIG1faWNvbkRh
dGFiYXNlID0gY29udGV4dC0+aWNvbkRhdGFiYXNlKCk7CisKKyAgICBXS0ljb25EYXRhYmFzZUNs
aWVudCBpY29uRGF0YWJhc2VDbGllbnQ7CisgICAgbWVtc2V0KCZpY29uRGF0YWJhc2VDbGllbnQs
IDAsIHNpemVvZihXS0ljb25EYXRhYmFzZUNsaWVudCkpOworICAgIGljb25EYXRhYmFzZUNsaWVu
dC52ZXJzaW9uID0ga1dLSWNvbkRhdGFiYXNlQ2xpZW50Q3VycmVudFZlcnNpb247CisgICAgaWNv
bkRhdGFiYXNlQ2xpZW50LmNsaWVudEluZm8gPSB0aGlzOworICAgIGljb25EYXRhYmFzZUNsaWVu
dC5kaWRDaGFuZ2VJY29uRm9yUGFnZVVSTCA9IGRpZENoYW5nZUljb25Gb3JQYWdlVVJMOworICAg
IFdLSWNvbkRhdGFiYXNlU2V0SWNvbkRhdGFiYXNlQ2xpZW50KHRvQVBJKG1faWNvbkRhdGFiYXNl
KSwgJmljb25EYXRhYmFzZUNsaWVudCk7Cit9CisKK1F0V2ViSWNvbkRhdGFiYXNlOjp+UXRXZWJJ
Y29uRGF0YWJhc2UoKQoreworCit9CisKKwordm9pZCBRdFdlYkljb25EYXRhYmFzZTo6ZGlkQ2hh
bmdlSWNvbkZvclBhZ2VVUkwoV0tJY29uRGF0YWJhc2VSZWYgaWNvbkRhdGFiYXNlLCBXS1VSTFJl
ZiBwYWdlVVJMLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIFFVcmwgcVVybCA9IFdL
VVJMQ29weVFVcmwocGFnZVVSTCk7CisgICAgdG9RdFdlYkljb25EYXRhYmFzZShjbGllbnRJbmZv
KS0+cmVxdWVzdEljb25Gb3JQYWdlVVJMKHFVcmwpOworfQorCitRSW1hZ2UgUXRXZWJJY29uRGF0
YWJhc2U6Omljb25JbWFnZUZvclBhZ2VVUkwoY29uc3QgUVVybCYgcGFnZVVSTCwgY29uc3QgUVNp
emUmIGljb25TaXplKQoreworICAgIFN0cmluZyB1cmwgPSBXZWJDb3JlOjpLVVJMKHBhZ2VVUkwp
LnN0cmluZygpOworICAgIFdlYkNvcmU6OkludFNpemUgc2l6ZShpY29uU2l6ZS53aWR0aCgpLCBp
Y29uU2l6ZS5oZWlnaHQoKSk7CisgICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlPiBpbWFnZSA9IG1f
aWNvbkRhdGFiYXNlLT5pbWFnZUZvclBhZ2VVUkwodXJsLCBzaXplKTsKKyAgICBpZiAoIWltYWdl
KQorICAgICAgICByZXR1cm4gUUltYWdlKCk7CisKKyAgICBRUGl4bWFwKiBuYXRpdmVJbWFnZSA9
IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIGlmICghbmF0aXZlSW1h
Z2UpCisgICAgICAgIHJldHVybiBRSW1hZ2UoKTsKKworICAgIHJldHVybiBuYXRpdmVJbWFnZS0+
dG9JbWFnZSgpOworfQorCit2b2lkIFF0V2ViSWNvbkRhdGFiYXNlOjpyZXF1ZXN0SWNvbkZvclBh
Z2VVUkwoY29uc3QgUVVybCYgdXJsKQoreworICAgIFFJbWFnZSBpY29uID0gaWNvbkltYWdlRm9y
UGFnZVVSTCh1cmwpOworICAgIGlmIChpY29uLmlzTnVsbCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBzdGF0aWMgUVN0cmluZyBwYXR0ZXJuID0gUUxhdGluMVN0cmluZygiaW1hZ2U6Ly93ZWJp
Y29uLyUxLyUyIik7CisgICAgUVVybCBpY29uVVJMID0gUVVybChwYXR0ZXJuLmFyZyh1cmwudG9T
dHJpbmcoKSkuYXJnKG5leHRJY29uSUQoKSkpOworICAgIGVtaXQgaWNvblJlYWR5Rm9yUGFnZVVS
TCh1cmwsIGljb25VUkwpOworfQorCit2b2lkIFF0V2ViSWNvbkRhdGFiYXNlOjpyZXRhaW5JY29u
Rm9yUGFnZVVSTChjb25zdCBRVXJsJiBwYWdlVVJMKQoreworICAgIFN0cmluZyB1cmwgPSBXZWJD
b3JlOjpLVVJMKHBhZ2VVUkwpLnN0cmluZygpOworICAgIG1faWNvbkRhdGFiYXNlLT5yZXRhaW5J
Y29uRm9yUGFnZVVSTCh1cmwpOworfQorCit2b2lkIFF0V2ViSWNvbkRhdGFiYXNlOjpyZWxlYXNl
SWNvbkZvclBhZ2VVUkwoY29uc3QgUVVybCYgcGFnZVVSTCkKK3sKKyAgICBTdHJpbmcgdXJsID0g
V2ViQ29yZTo6S1VSTChwYWdlVVJMKS5zdHJpbmcoKTsKKyAgICBtX2ljb25EYXRhYmFzZS0+cmVs
ZWFzZUljb25Gb3JQYWdlVVJMKHVybCk7Cit9CisKK3F1aW50NjQgUXRXZWJJY29uRGF0YWJhc2U6
Om5leHRJY29uSUQoKQoreworICAgIHJldHVybiArK21faWNvbklEOworfQorCitRVXJsIFF0V2Vi
SWNvbkRhdGFiYXNlOjpmcm9tSWNvblVSTHRvUGFnZVVSTChjb25zdCBRU3RyaW5nJiBpY29uVVJM
KQoreworICAgIFFTdHJpbmcgdXJsOworICAgIGlmIChpY29uVVJMLmxlZnQoOCkgPT0gUUxhdGlu
MVN0cmluZygiaW1hZ2U6Ly8iKSkgeworICAgICAgICAvLyBSZW1vdmUgdGhlIHByZWZpeCAiaW1h
Z2U6Ly93ZWJpY29uLyIgZnJvbSBpY29uVVJMLgorICAgICAgICB1cmwgPSBpY29uVVJMLnJpZ2h0
KGljb25VUkwubGVuZ3RoKCkgLSAxNik7CisgICAgfSBlbHNlCisgICAgICAgIHVybCA9IGljb25V
Ukw7CisKKyAgICBpbnQgayA9IHVybC5sYXN0SW5kZXhPZignLycpOworICAgIGlmIChrID09IC0x
KQorICAgICAgICByZXR1cm4gUVVybCgpOworCisgICAgcmV0dXJuIFFVcmwodXJsLmxlZnRSZWYo
aykudG9TdHJpbmcoKSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
cXQvUXRXZWJJY29uRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdl
Ykljb25EYXRhYmFzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc2ZWE0ZThlM2U1ZTU0YzU5ZWJjZjViOWQxZjYx
ZDdmYTdhZGExNzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
cXQvUXRXZWJJY29uRGF0YWJhc2UuaApAQCAtMCwwICsxLDY0IEBACisvKgorICAgIENvcHlyaWdo
dCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
KworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisq
LworCisKKyNpZm5kZWYgUXRXZWJJY29uRGF0YWJhc2VfaAorI2RlZmluZSBRdFdlYkljb25EYXRh
YmFzZV9oCisKKyNpbmNsdWRlICJXS0ljb25EYXRhYmFzZS5oIgorI2luY2x1ZGUgInF3ZWJraXRn
bG9iYWwuaCIKKyNpbmNsdWRlIDxRdENvcmUvUU1hcD4KKyNpbmNsdWRlIDxRdENvcmUvUU9iamVj
dD4KKyNpbmNsdWRlIDxRdENvcmUvUVVybD4KKyNpbmNsdWRlIDxRdEd1aS9RUGl4bWFwPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYkNvbnRleHQ7CitjbGFzcyBXZWJJY29uRGF0YWJh
c2U7CisKK2NsYXNzIFF0V2ViSWNvbkRhdGFiYXNlIDogcHVibGljIFFPYmplY3QgeworICAgIFFf
T0JKRUNUCisKK3B1YmxpYzoKKyAgICBRdFdlYkljb25EYXRhYmFzZShXZWJDb250ZXh0Kik7Cisg
ICAgflF0V2ViSWNvbkRhdGFiYXNlKCk7CisKKyAgICBRSW1hZ2UgaWNvbkltYWdlRm9yUGFnZVVS
TChjb25zdCBRVXJsJiwgY29uc3QgUVNpemUmIGljb25TaXplID0gUVNpemUoMzIsIDMyKSk7Cisg
ICAgdm9pZCByZXRhaW5JY29uRm9yUGFnZVVSTChjb25zdCBRVXJsJik7CisgICAgdm9pZCByZWxl
YXNlSWNvbkZvclBhZ2VVUkwoY29uc3QgUVVybCYpOworCisgICAgcXVpbnQ2NCBuZXh0SWNvbklE
KCk7CisKKyAgICBzdGF0aWMgUVVybCBmcm9tSWNvblVSTHRvUGFnZVVSTChjb25zdCBRU3RyaW5n
Jik7CisKK3B1YmxpYyBRX1NMT1RTOgorICAgIHZvaWQgcmVxdWVzdEljb25Gb3JQYWdlVVJMKGNv
bnN0IFFVcmwmKTsKKworcHVibGljOgorICAgIFFfU0lHTkFMIHZvaWQgaWNvblJlYWR5Rm9yUGFn
ZVVSTChjb25zdCBRVXJsJiwgY29uc3QgUVVybCYgaWNvbik7CisKK3ByaXZhdGU6CisgICAgc3Rh
dGljIHZvaWQgZGlkQ2hhbmdlSWNvbkZvclBhZ2VVUkwoV0tJY29uRGF0YWJhc2VSZWYsIFdLVVJM
UmVmIHBhZ2VVUkwsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIFdlYkljb25EYXRhYmFz
ZSogbV9pY29uRGF0YWJhc2U7CisgICAgcXVpbnQ2NCBtX2ljb25JRDsKK307CisKK30KKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlUHJv
eHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVByb3h5LmNwcApp
bmRleCBhYjFkYjQ3ZjRmOGE2Yzg1M2FmZmI2ODMwMDY0YjUxYTcyNjY5MGNiLi5iYmQ1YTRlMzlk
NzFkNWRmN2YzZjI3MGMwM2U5ZDY0OTRhOTRlMmFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9xdC9RdFdlYlBhZ2VQcm94eS5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRl
ICJxd2toaXN0b3J5X3AuaCIKICNpbmNsdWRlICJRdERvd25sb2FkTWFuYWdlci5oIgogI2luY2x1
ZGUgIlF0UGFnZUNsaWVudC5oIgorI2luY2x1ZGUgIlF0V2ViSWNvbkRhdGFiYXNlLmgiCiAjaW5j
bHVkZSAiUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmgiCiAjaW5jbHVkZSAiUXRXZWJVbmRvQ29tbWFu
ZC5oIgogI2luY2x1ZGUgIldlYkJhY2tGb3J3YXJkTGlzdC5oIgpAQCAtNjYsNiArNjcsMTAgQEAg
UXRXZWJQYWdlUHJveHk6OlF0V2ViUGFnZVByb3h5KFFRdWlja1dlYlBhZ2UqIHFtbFdlYlBhZ2Us
IFFRdWlja1dlYlZpZXcqIHFtbFdlYlYKIHsKICAgICBtX3dlYlBhZ2VQcm94eSA9IG1fY29udGV4
dC0+Y3JlYXRlV2ViUGFnZShwYWdlQ2xpZW50LCB0b0ltcGwocGFnZUdyb3VwUmVmKSk7CiAgICAg
bV9oaXN0b3J5ID0gUVdLSGlzdG9yeVByaXZhdGU6OmNyZWF0ZUhpc3RvcnkodGhpcywgbV93ZWJQ
YWdlUHJveHktPmJhY2tGb3J3YXJkTGlzdCgpKTsKKworICAgIFF0V2ViSWNvbkRhdGFiYXNlKiBp
Y29uRGF0YWJhc2UgPSBtX2NvbnRleHQtPmljb25EYXRhYmFzZSgpOworICAgIFFPYmplY3Q6OmNv
bm5lY3QoaWNvbkRhdGFiYXNlLCBTSUdOQUwoaWNvblJlYWR5Rm9yUGFnZVVSTChRVXJsLCBRVXJs
KSksIHRoaXMsIFNMT1Qob25JY29uUmVhZHlGb3JQYWdlVVJMKFFVcmwsIFFVcmwpKSk7CisgICAg
UU9iamVjdDo6Y29ubmVjdChxbWxXZWJWaWV3LCBTSUdOQUwodXJsQ2hhbmdlZChRVXJsKSksIGlj
b25EYXRhYmFzZSwgU0xPVChyZXF1ZXN0SWNvbkZvclBhZ2VVUkwoUVVybCkpKTsKIH0KIAogdm9p
ZCBRdFdlYlBhZ2VQcm94eTo6aW5pdChRdFdlYlBhZ2VFdmVudEhhbmRsZXIqIGV2ZW50SGFuZGxl
cikKQEAgLTQ0Niw0ICs0NTEsMjMgQEAgdm9pZCBRdFdlYlBhZ2VQcm94eTo6c2V0VmlzaWJsZUNv
bnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcihjb25zdCBRUG9pbnRGJiB0cmFqZWMKICAgICBtX3dl
YlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKS0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9y
eVZlY3Rvcih0cmFqZWN0b3J5VmVjdG9yKTsKIH0KIAordm9pZCBRdFdlYlBhZ2VQcm94eTo6b25J
Y29uUmVhZHlGb3JQYWdlVVJMKGNvbnN0IFFVcmwmIHBhZ2VVUkwsIGNvbnN0IFFVcmwmIGljb25V
UkwpCit7CisgICAgaWYgKHVybCgpICE9IHBhZ2VVUkwpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChtX2ljb25VUkwgPT0gaWNvblVSTCkKKyAgICAgICAgcmV0dXJuOworCisgICAgUXRXZWJJ
Y29uRGF0YWJhc2UqIGljb25EYXRhYmFzZSA9IG1fY29udGV4dC0+aWNvbkRhdGFiYXNlKCk7Cisg
ICAgUVVybCBvbGRQYWdlVVJMID0gUXRXZWJJY29uRGF0YWJhc2U6OmZyb21JY29uVVJMdG9QYWdl
VVJMKG1faWNvblVSTC50b1N0cmluZygpKTsKKyAgICBpZiAoIW9sZFBhZ2VVUkwuaXNFbXB0eSgp
KQorICAgICAgICBpY29uRGF0YWJhc2UtPnJlbGVhc2VJY29uRm9yUGFnZVVSTChvbGRQYWdlVVJM
KTsKKyAgICBtX2ljb25VUkwgPSBpY29uVVJMOworICAgIGlmICghcGFnZVVSTC5pc0VtcHR5KCkp
CisgICAgICAgIGljb25EYXRhYmFzZS0+cmV0YWluSWNvbkZvclBhZ2VVUkwocGFnZVVSTCk7CisK
KyAgICBlbWl0IG1fcW1sV2ViVmlldy0+aWNvbkNoYW5nZWQoaWNvblVSTCk7Cit9CisKICNpbmNs
dWRlICJtb2NfUXRXZWJQYWdlUHJveHkuY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL3F0L1F0V2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
cXQvUXRXZWJQYWdlUHJveHkuaAppbmRleCAyZTZiZTU2MmFlMTM5YjBjNjJmMDE2ZTczMGU3MDdi
ZjI1MDRmM2IyLi45ZWEwYTIyYjEzNjljYzlhMGMxMWM2YTQ2NDVlNmI0Y2Y4MTJlZjcxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuaApAQCAtMjksNiAr
MjksNyBAQAogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDxRTWVudT4KICNpbmNs
dWRlIDxRU2hhcmVkUG9pbnRlcj4KKyNpbmNsdWRlIDxRdENvcmUvUVVybD4KIAogUVRfQkVHSU5f
TkFNRVNQQUNFCiBjbGFzcyBRVW5kb1N0YWNrOwpAQCAtMTEzLDYgKzExNCw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGxvYWQoY29uc3QgUVVybCYgdXJsKTsKICAgICB2b2lkIGxvYWRIVE1MU3RyaW5n
KGNvbnN0IFFTdHJpbmcmIGh0bWwsIGNvbnN0IFFVcmwmIGJhc2VVcmwpOwogICAgIFFVcmwgdXJs
KCkgY29uc3Q7CisgICAgUVVybCBpY29uKCkgY29uc3QgeyByZXR1cm4gbV9pY29uVVJMOyB9CiAK
ICAgICB2b2lkIHNldERyYXdpbmdBcmVhU2l6ZShjb25zdCBRU2l6ZSYpOwogCkBAIC0xNTUsNiAr
MTU3LDcgQEAgcHVibGljOgogCiBwdWJsaWMgUV9TTE9UUzoKICAgICB2b2lkIGRpZFJlY2VpdmVE
b3dubG9hZFJlc3BvbnNlKFFXZWJEb3dubG9hZEl0ZW0qIGRvd25sb2FkSXRlbSk7CisgICAgdm9p
ZCBvbkljb25SZWFkeUZvclBhZ2VVUkwoY29uc3QgUVVybCYgcGFnZVVSTCwgY29uc3QgUVVybCYg
aWNvblVSTCk7CiAKIHB1YmxpYzoKICAgICBRX1NJR05BTCB2b2lkIHpvb21hYmxlQXJlYUZvdW5k
KGNvbnN0IFFSZWN0Jik7CkBAIC0xODEsNiArMTg0LDcgQEAgcHJpdmF0ZToKIAogICAgIFFTaGFy
ZWRQb2ludGVyPFFNZW51PiBhY3RpdmVNZW51OwogICAgIFF0V2ViUGFnZUV2ZW50SGFuZGxlciog
bV9ldmVudEhhbmRsZXI7CisgICAgUVVybCBtX2ljb25VUkw7CiB9OwogCiAjZW5kaWYgLyogUXRX
ZWJQYWdlUHJveHlfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL3F0d2Via2l0LWV4cG9ydC5tYXAg
Yi9Tb3VyY2UvcXR3ZWJraXQtZXhwb3J0Lm1hcAppbmRleCBhNTQ2Y2IyZmZlNDliNWM2OGE5MGM2
OWE1MDZmOWZiODQxOTk2ZDNiLi5iYTNiM2ZjY2E0NzNhYmViNDVhNGQ2N2RmNTYxMjZjZmUwZTg3
OTM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvcXR3ZWJraXQtZXhwb3J0Lm1hcAorKysgYi9Tb3VyY2Uv
cXR3ZWJraXQtZXhwb3J0Lm1hcApAQCAtMTA5LDYgKzEwOSwxMiBAQCBxd2tfMS4wIHsKICAgICAg
ICAgKlFRdWlja1dlYlZpZXdQcml2YXRlOwogICAgICAgICBub24tdmlydHVhbD90aHVuaz90bz9R
UXVpY2tXZWJWaWV3UHJpdmF0ZSo7CiAgICAgICAgIFFRdWlja1dlYlZpZXdQcml2YXRlOjoqOwor
ICAgICAgICAqUVdlYkljb25JbWFnZVByb3ZpZGVyOworICAgICAgICBub24tdmlydHVhbD90aHVu
az90bz9RV2ViSWNvbkltYWdlUHJvdmlkZXIqOworICAgICAgICBRV2ViSWNvbkltYWdlUHJvdmlk
ZXI6Oio7CisgICAgICAgICpRdFdlYkljb25EYXRhYmFzZTsKKyAgICAgICAgbm9uLXZpcnR1YWw/
dGh1bms/dG8/UXRXZWJJY29uRGF0YWJhc2UqOworICAgICAgICBRdFdlYkljb25EYXRhYmFzZTo6
KjsKICAgICAgICAgKlFRdWlja1dlYlZpZXdQcml2YXRlRXh0ZW5zaW9uOwogICAgICAgICBub24t
dmlydHVhbD90aHVuaz90bz9RUXVpY2tXZWJWaWV3UHJpdmF0ZUV4dGVuc2lvbio7CiAgICAgICAg
IFFRdWlja1dlYlZpZXdQcml2YXRlRXh0ZW5zaW9uOjoqOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hh
bmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDBiNDRiYzU5NzJjODRiZWMxNTFmNjBiNmI5
ZjNmYTcyN2VjODg0MmMuLmYyMDlhZjZhMDg2NTdjMGVlNGFiMDgyYTQ5YmQ0YmYwNWUxODc0MWQg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMCBAQAorMjAxMS0xMi0wNSAgUmFmYWVsIEJyYW5kYW8gIDxyYWZhZWwubG9ib0BvcGVu
Ym9zc2Eub3JnPgorCisgICAgICAgIFtRdF1bV0syXSBJbXBsZW1lbnQgZmF2aWNvbiBzdXBwb3J0
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTA4Mgor
CisgICAgICAgIEFkZGVkIGF0dHJpYnV0ZSB0byBRUXVpY2tXZWJWaWV3IG5hbWVkICJpY29uIiB0
aGF0IHNob3VsZCBiZSB1c2VkCisgICAgICAgIGFzIHNvdXJjZSBmb3IgUVF1aWNrSW1hZ2VzIGlu
IG9yZGVyIHRvIGRpc3BsYXkgaXQuIEFsbCBpbWFnZXMKKyAgICAgICAgcG9pbnRpbmcgdG8gaXQg
d2lsbCByZWZyZXNoIHdoZW4gdGhlIGljb24gaXMgcmVhZHkuIFdlIGFsc28gdXNlIElEcworICAg
ICAgICB0byBtYWtlIGl0IHBvc3NpYmxlIHRvIGhhbmRsZSBkaWZmZXJlbnQgaWNvbnMgZm9yIHRo
ZSBzYW1lIHBhZ2UgVVJMCisgICAgICAgIGluIGRpZmZlcmVudCB0aW1lcyAoaS5lLiBkeW5hbWlj
YWxseSBjaGFuZ2luZyBmYXZpY29uKS4KKworICAgICAgICBJdCB3YXMgYWRkZWQgYW4gdXNhZ2Ug
b2YgZmF2aWNvbnMgb24gTWluaUJyb3dzZXIgYXMgZXhhbXBsZS4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE1pbmlCcm93c2VyL3F0L3FtbC9Ccm93
c2VyV2luZG93LnFtbDoKKwogMjAxMS0xMi0wNSAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5j
b20+CiAKICAgICAgICAgUmVkZXBsb3kgYXBwbGUtbWFjcHJvLTcgYW5kIGFwcGxlLXhzZXJ2ZS0x
CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvQnJvd3NlcldpbmRvdy5xbWwg
Yi9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvQnJvd3NlcldpbmRvdy5xbWwKaW5kZXggMjIwMmFm
ZDYwOTdhOGM5YjYzZjdjMDZhN2JjNzZhNTI4ZTJiMjUxYS4uNzU1ZDAyNzIwZmJmOTFkMDAwNTRj
OTQwZTJiMjY4ZDIxNDA4NTk3YyAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvcW1s
L0Jyb3dzZXJXaW5kb3cucW1sCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L3FtbC9Ccm93c2Vy
V2luZG93LnFtbApAQCAtMTg0LDYgKzE4NCwxNyBAQCBSZWN0YW5nbGUgewogICAgICAgICAgICAg
ICAgIG9wYWNpdHk6IDAuMwogICAgICAgICAgICAgICAgIHZpc2libGU6IHdlYlZpZXcubG9hZFBy
b2dyZXNzICE9IDEwMAogICAgICAgICAgICAgfQorICAgICAgICAgICAgSW1hZ2UgeworICAgICAg
ICAgICAgICAgIGlkOiBmYXZpY29uCisgICAgICAgICAgICAgICAgc291cmNlOiB3ZWJWaWV3Lmlj
b24KKyAgICAgICAgICAgICAgICB3aWR0aDogMTYKKyAgICAgICAgICAgICAgICBoZWlnaHQ6IDE2
CisgICAgICAgICAgICAgICAgYW5jaG9ycyB7CisgICAgICAgICAgICAgICAgICAgIGxlZnQ6IHBh
cmVudC5sZWZ0CisgICAgICAgICAgICAgICAgICAgIGxlZnRNYXJnaW46IDIKKyAgICAgICAgICAg
ICAgICAgICAgdmVydGljYWxDZW50ZXI6IHBhcmVudC52ZXJ0aWNhbENlbnRlcgorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIFRleHRJbnB1dCB7CiAgICAgICAg
ICAgICAgICAgaWQ6IGFkZHJlc3NMaW5lCiAgICAgICAgICAgICAgICAgY2xpcDogdHJ1ZQpAQCAt
MTk0LDcgKzIwNSw3IEBAIFJlY3RhbmdsZSB7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIGFuY2hvcnMgewogICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbENlbnRlcjogcGFy
ZW50LnZlcnRpY2FsQ2VudGVyCi0gICAgICAgICAgICAgICAgICAgIGxlZnQ6IHBhcmVudC5sZWZ0
CisgICAgICAgICAgICAgICAgICAgIGxlZnQ6IGZhdmljb24ucmlnaHQKICAgICAgICAgICAgICAg
ICAgICAgcmlnaHQ6IHBhcmVudC5yaWdodAogICAgICAgICAgICAgICAgICAgICBtYXJnaW5zOiA2
CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmlu
ZGV4IDI0NTJjMjQ4OTFhZTVhMTEzNjhhZjE2MDIyMDliZmFlYWEyM2NmYTYuLjBmZTY1ZWY3YzVl
Njc0Y2U0MDljZTUwMmE0OTk2MzA5YTlkNjZkMWIgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysg
Yi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMS0xMi0wNSAgUmFmYWVsIEJyYW5kYW8g
IDxyYWZhZWwubG9ib0BvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIFtRdF1bV0syXSBJbXBsZW1l
bnQgZmF2aWNvbiBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03MTA4MgorCisgICAgICAgIEFkZGVkIGF0dHJpYnV0ZSB0byBRUXVpY2tXZWJW
aWV3IG5hbWVkICJpY29uIiB0aGF0IHNob3VsZCBiZSB1c2VkCisgICAgICAgIGFzIHNvdXJjZSBm
b3IgUVF1aWNrSW1hZ2VzIGluIG9yZGVyIHRvIGRpc3BsYXkgaXQuIEFsbCBpbWFnZXMKKyAgICAg
ICAgcG9pbnRpbmcgdG8gaXQgd2lsbCByZWZyZXNoIHdoZW4gdGhlIGljb24gaXMgcmVhZHkuIFdl
IGFsc28gdXNlIElEcworICAgICAgICB0byBtYWtlIGl0IHBvc3NpYmxlIHRvIGhhbmRsZSBkaWZm
ZXJlbnQgaWNvbnMgZm9yIHRoZSBzYW1lIHBhZ2UgVVJMCisgICAgICAgIGluIGRpZmZlcmVudCB0
aW1lcyAoaS5lLiBkeW5hbWljYWxseSBjaGFuZ2luZyBmYXZpY29uKS4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNvdXJjZS9xdHdlYmtpdC1leHBv
cnQubWFwOgorCiAyMDExLTEyLTA1ICBBbGV4YW5kZXIgRsOmcsO4eSAgPGFsZXhhbmRlci5mYWVy
b3lAbm9raWEuY29tPgogCiAgICAgICAgIFtRdF0gQWRkIFNvdXJjZS9xdHdlYmtpdHZlcnNpb24u
aCB0byAuZ2l0aWdub3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118136</attachid>
            <date>2011-12-06 16:17:34 -0800</date>
            <delta_ts>2011-12-09 16:40:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71082-20111206211732.patch</filename>
            <type>text/plain</type>
            <size>32895</size>
            <attacher name="Rafael Brandao">rafael.lobo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyMTg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IGM2YzhlMGYyMzFm
M2Y4OWUxZDRlMGFkNTkxYzQ1MTllZThmMjkxNDguLjkwMjQ1OWJhMTE3YmVmMmM1NGRjYjRiYzJm
ZWMyNjMzNzIyOWYxMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTEtMTIt
MDYgIFJhZmFlbCBCcmFuZGFvICA8cmFmYWVsLmxvYm9Ab3BlbmJvc3NhLm9yZz4KKworICAgICAg
ICBbUXRdW1dLMl0gSW1wbGVtZW50IGZhdmljb24gc3VwcG9ydAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEwODIKKworICAgICAgICBBZGRlZCBhdHRy
aWJ1dGUgdG8gUVF1aWNrV2ViVmlldyBuYW1lZCAiaWNvbiIgdGhhdCBzaG91bGQgYmUgdXNlZAor
ICAgICAgICBhcyBzb3VyY2UgZm9yIFFRdWlja0ltYWdlcyBpbiBvcmRlciB0byBkaXNwbGF5IGl0
LiBBbGwgaW1hZ2VzCisgICAgICAgIHBvaW50aW5nIHRvIGl0IHdpbGwgcmVmcmVzaCB3aGVuIHRo
ZSBpY29uIGlzIHJlYWR5LiBXZSBhbHNvIHVzZSBJRHMKKyAgICAgICAgdG8gbWFrZSBpdCBwb3Nz
aWJsZSB0byBoYW5kbGUgZGlmZmVyZW50IGljb25zIGZvciB0aGUgc2FtZSBwYWdlIFVSTAorICAg
ICAgICBpbiBkaWZmZXJlbnQgdGltZXMgKGkuZS4gZHluYW1pY2FsbHkgY2hhbmdpbmcgZmF2aWNv
bikuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBk
ZWNsYXJhdGl2ZS9wbHVnaW4uY3BwOgorICAgICAgICAoV2ViS2l0UW1sUGx1Z2luOjppbml0aWFs
aXplRW5naW5lKTogU2V0dXAgZm9yIHRoZSBRRGVjbGFyYXRpdmVJbWFnZVByb3ZpZGVyIHRvIGRp
c3BsYXkgZmF2aWNvbnMuCisgICAgICAgIEl0cyBoYW5kbGVkIHVybHMgZm9ybWF0IGZvbGxvd3M6
ICJpbWFnZTovL3dlYmljb24vPHBhZ2VVUkw+LzxpY29uSUQ+Ii4KKwogMjAxMS0xMi0wNiAgWmVu
byBBbGJpc3NlciAgPHplbm9Ad2Via2l0Lm9yZz4KIAogICAgICAgICBbUXRdW01hY10gQnVpbGRp
bmcgZGVidWcgdmVyc2lvbiBvbmx5IGZhaWxzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDM0MjIzM2E5NGI5NjU3
YzQzYWJiOTdlYmE0OTliOWJkNmVmMDdiNzQuLjg2Yzc2NGI4MWI3N2NmNjQxZWNmZTI0NTA3ZGRj
NDc4ZGM5ZmY3NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MCBAQAorMjAxMS0xMi0wNiAgUmFm
YWVsIEJyYW5kYW8gIDxyYWZhZWwubG9ib0BvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIFtRdF1b
V0syXSBJbXBsZW1lbnQgZmF2aWNvbiBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTA4MgorCisgICAgICAgIEFkZGVkIGF0dHJpYnV0ZSB0
byBRUXVpY2tXZWJWaWV3IG5hbWVkICJpY29uIiB0aGF0IHNob3VsZCBiZSB1c2VkCisgICAgICAg
IGFzIHNvdXJjZSBmb3IgUVF1aWNrSW1hZ2VzIGluIG9yZGVyIHRvIGRpc3BsYXkgaXQuIEFsbCBp
bWFnZXMKKyAgICAgICAgcG9pbnRpbmcgdG8gaXQgd2lsbCByZWZyZXNoIHdoZW4gdGhlIGljb24g
aXMgcmVhZHkuIFdlIGFsc28gdXNlIElEcworICAgICAgICB0byBtYWtlIGl0IHBvc3NpYmxlIHRv
IGhhbmRsZSBkaWZmZXJlbnQgaWNvbnMgZm9yIHRoZSBzYW1lIHBhZ2UgVVJMCisgICAgICAgIGlu
IGRpZmZlcmVudCB0aW1lcyAoaS5lLiBkeW5hbWljYWxseSBjaGFuZ2luZyBmYXZpY29uKS4KKyAg
ICAgICAgCisgICAgICAgIEljb25EYXRhYmFzZSBzdG9yYWdlIGxpZXMgb24gVUlQcm9jZXNzIGFu
ZCB0aGUgc3luY2hyb25vdXMgY2FsbCBmb3IKKyAgICAgICAgdGhlIGljb24gdGhhdCBoYXBwZW5z
IG9uIFdlYkljb25EYXRhYmFzZSB3b24ndCBuZWVkIHRvIHNlbmQgYW55IG1lc3NhZ2UKKyAgICAg
ICAgdG8gV2ViUHJvY2Vzcy4gVGhlIHBhcnQgb2YgSWNvbkRhdGFiYXNlIG9uIFdlYlByb2Nlc3Mg
aGFuZGxlcyB0aGUgZG93bmxvYWQKKyAgICAgICAgb2YgdGhlIHJlc291cmNlIHdoZW5ldmVyIGl0
IGlzIG5lZWRlZC4gVGhlbiB0aGUgY29udGVudCBkb3dubG9hZGVkIGlzIHNlbnQKKyAgICAgICAg
dGhyb3VnaCBJUEMgdG8gdGhlIGFjdHVhbCBkYXRhYmFzZSwgb24gVUlQcm9jZXNzLgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGFyZ2V0LnByaToK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwOgorICAgICAgICAo
UVF1aWNrV2ViVmlld1ByaXZhdGU6OlFRdWlja1dlYlZpZXdQcml2YXRlKToKKyAgICAgICAgKFFR
dWlja1dlYlZpZXdQcml2YXRlOjpfcV9vbkljb25DaGFuZ2VkRm9yUGFnZVVSTCk6CisgICAgICAg
IChRUXVpY2tXZWJWaWV3OjppY29uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlj
a3dlYnZpZXdfcC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19w
X3AuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3F3ZWJpY29uaW1hZ2Vwcm92aWRlci5j
cHA6IEFkZGVkLgorICAgICAgICAoUVdlYkljb25JbWFnZVByb3ZpZGVyOjpRV2ViSWNvbkltYWdl
UHJvdmlkZXIpOgorICAgICAgICAoUVdlYkljb25JbWFnZVByb3ZpZGVyOjp+UVdlYkljb25JbWFn
ZVByb3ZpZGVyKToKKyAgICAgICAgKFFXZWJJY29uSW1hZ2VQcm92aWRlcjo6cmVxdWVzdEltYWdl
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3F3ZWJpY29uaW1hZ2Vwcm92aWRlcl9wLmg6
IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb250ZXh0Lmg6CisgICAgICAgICogVUlQ
cm9jZXNzL1dlYkljb25EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkljb25EYXRh
YmFzZTo6aW1hZ2VGb3JQYWdlVVJMKTogQWRkZWQgaWNvblNpemUgcGFyYW1ldGVyCisgICAgICAg
IGFuZCBpdHMgZGVmYXVsdCB2YWx1ZSB0byBub3QgYnJlYWsgdGhlIG9sZCB1c2FnZS4gVGhlIHN1
cHBvcnQgZm9yIG11bHRpcGxlCisgICAgICAgIHNpemVzIG9mIGZhdmljb25zIGlzIHN0aWxsIG1p
c3Npbmcgb24gV2ViQ29yZSdzIEljb25EYXRhYmFzZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
SWNvbkRhdGFiYXNlLmg6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0V2ViQ29udGV4dC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OlF0V2ViQ29udGV4dDo6aW5pdGlhbGl6ZSk6CisgICAgICAgICog
VUlQcm9jZXNzL3F0L1F0V2ViQ29udGV4dC5oOgorICAgICAgICAoV2ViS2l0OjpRdFdlYkNvbnRl
eHQ6Omljb25EYXRhYmFzZSk6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0V2ViSWNvbkRhdGFi
YXNlQ2xpZW50LmNwcDogQWRkZWQuCisgICAgICAgICh0b1F0V2ViSWNvbkRhdGFiYXNlQ2xpZW50
KToKKyAgICAgICAgKFF0V2ViSWNvbkRhdGFiYXNlQ2xpZW50OjpRdFdlYkljb25EYXRhYmFzZUNs
aWVudCk6CisgICAgICAgIChRdFdlYkljb25EYXRhYmFzZUNsaWVudDo6flF0V2ViSWNvbkRhdGFi
YXNlQ2xpZW50KToKKyAgICAgICAgKFF0V2ViSWNvbkRhdGFiYXNlQ2xpZW50OjpkaWRDaGFuZ2VJ
Y29uRm9yUGFnZVVSTCk6CisgICAgICAgIChRdFdlYkljb25EYXRhYmFzZUNsaWVudDo6aWNvbklt
YWdlRm9yUGFnZVVSTCk6CisgICAgICAgIChRdFdlYkljb25EYXRhYmFzZUNsaWVudDo6cmVxdWVz
dEljb25Gb3JQYWdlVVJMKToKKyAgICAgICAgKFF0V2ViSWNvbkRhdGFiYXNlQ2xpZW50OjpyZXRh
aW5JY29uRm9yUGFnZVVSTCk6CisgICAgICAgIChRdFdlYkljb25EYXRhYmFzZUNsaWVudDo6cmVs
ZWFzZUljb25Gb3JQYWdlVVJMKToKKyAgICAgICAgKFF0V2ViSWNvbkRhdGFiYXNlQ2xpZW50Ojpu
ZXh0SWNvbklEKToKKyAgICAgICAgKFF0V2ViSWNvbkRhdGFiYXNlQ2xpZW50OjpnZXRQYWdlVVJM
RnJvbUZ1bGxJY29uVVJMKTogSGVscGVyIGZ1bmN0aW9uIHRvIGhhbmRsZQorICAgICAgICBmdWxs
IGZhdmljb24gdXJscyAoaW5jbHVkaW5nIHByZWZpeCB1c2VkIGJ5IHRoZSBpbWFnZSBwcm92aWRl
cikuCisgICAgICAgIChRdFdlYkljb25EYXRhYmFzZUNsaWVudDo6Z2V0UGFnZVVSTEZyb21JY29u
VVJMKTogSGVscGVyIGZ1bmN0aW9uIHRvIGhhbmRsZQorICAgICAgICBmYXZpY29uIHVybHMgKG9u
bHkgcGFnZVVSTCBhbmQgaWNvblVSTCBhcmUgdGhlcmUpLgorICAgICAgICAqIFVJUHJvY2Vzcy9x
dC9RdFdlYkljb25EYXRhYmFzZUNsaWVudC5oOiBBZGRlZC4KKwogMjAxMS0xMi0wNiAgQW5keSBF
c3RlcyAgPGFlc3Rlc0BhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTiAocjEwMTgzOCk6
IENyYXNoIGluIExheWVyVHJlZUhvc3RDQTo6aW5pdGlhbGl6ZSgpIHdoZW4gYWNjZWxlcmF0ZWQg
ZHJhd2luZyBpcyBlbmFibGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0
aXZlL3BsdWdpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL3BsdWdpbi5jcHAK
aW5kZXggZDAzOWI4YTk5OGIyZjA4ZWQ5ZWM5ZWY5Mjg0ZGVlYWIwZjdlMzIwZi4uMGRjZjkzMWY5
MDM0YjU0ZDY5YmQ3NjNiZWRjMzU1N2Y0YTI5MjUyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9xdC9kZWNsYXJhdGl2ZS9wbHVnaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvZGVjbGFy
YXRpdmUvcGx1Z2luLmNwcApAQCAtMjUsOSArMjUsMTEgQEAKICNpZiBkZWZpbmVkKEhBVkVfV0VC
S0lUMikKICNpbmNsdWRlICJxcXVpY2t3ZWJwYWdlX3AuaCIKICNpbmNsdWRlICJxcXVpY2t3ZWJ2
aWV3X3AuaCIKKyNpbmNsdWRlICJxd2ViaWNvbmltYWdlcHJvdmlkZXJfcC5oIgogI2luY2x1ZGUg
InF3ZWJwZXJtaXNzaW9ucmVxdWVzdF9wLmgiCiAjaW5jbHVkZSAicXdlYnByZWZlcmVuY2VzX3Au
aCIKIAorI2luY2x1ZGUgPFF0RGVjbGFyYXRpdmUvcWRlY2xhcmF0aXZlZW5naW5lLmg+CiAjaW5j
bHVkZSA8UXROZXR3b3JrL3FuZXR3b3JrcmVwbHkuaD4KICNlbmRpZgogCkBAIC0zNiw2ICszOCwx
NCBAQCBRVF9CRUdJTl9OQU1FU1BBQ0UKIGNsYXNzIFdlYktpdFFtbFBsdWdpbiA6IHB1YmxpYyBR
RGVjbGFyYXRpdmVFeHRlbnNpb25QbHVnaW4gewogICAgIFFfT0JKRUNUCiBwdWJsaWM6CisjaWYg
ZGVmaW5lZChIQVZFX1dFQktJVDIpCisgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVFbmdpbmUo
UURlY2xhcmF0aXZlRW5naW5lKiBlbmdpbmUsIGNvbnN0IGNoYXIqIHVyaSkKKyAgICB7CisgICAg
ICAgIFFfQVNTRVJUKFFMYXRpbjFTdHJpbmcodXJpKSA9PSBRTGF0aW4xU3RyaW5nKCJRdFdlYktp
dCIpKTsKKyAgICAgICAgZW5naW5lLT5hZGRJbWFnZVByb3ZpZGVyKFFMYXRpbjFTdHJpbmcoIndl
Ymljb24iKSwgbmV3IFFXZWJJY29uSW1hZ2VQcm92aWRlcik7CisgICAgfQorI2VuZGlmCisKICAg
ICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJUeXBlcyhjb25zdCBjaGFyKiB1cmkpCiAgICAgewogICAg
ICAgICBRX0FTU0VSVChRTGF0aW4xU3RyaW5nKHVyaSkgPT0gUUxhdGluMVN0cmluZygiUXRXZWJL
aXQiKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpIGIvU291cmNlL1dl
YktpdDIvVGFyZ2V0LnByaQppbmRleCA5NzY5MTRlNTliOGQ0NTE1YmU2NjIwZjllMGI0ZTYyNGM2
M2ViYmIyLi42NTYzY2QxNjVhOTY5YjMwNmVhYWQxM2FhODdjODYxYTBkOGFmMzQwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJLaXQyL1Rhcmdl
dC5wcmkKQEAgLTI2NCw2ICsyNjQsNyBAQCBIRUFERVJTICs9IFwKICAgICBVSVByb2Nlc3MvcXQv
UXRTR1RpbGVOb2RlLmggXAogICAgIFVJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SW50ZXJhY3Rpb25F
bmdpbmUuaCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0V2ViVW5kb0NvbW1hbmQuaCBcCisgICAgVUlQ
cm9jZXNzL3F0L1F0V2ViSWNvbkRhdGFiYXNlQ2xpZW50LmggXAogICAgIFVJUHJvY2Vzcy9xdC9X
ZWJDb250ZXh0TWVudVByb3h5UXQuaCBcCiAgICAgVUlQcm9jZXNzL3F0L1dlYkdlb2xvY2F0aW9u
UHJvdmlkZXJRdC5oIFwKICAgICBVSVByb2Nlc3MvcXQvV2ViUG9wdXBNZW51UHJveHlRdC5oIFwK
QEAgLTQ4OSw2ICs0OTAsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBVSVByb2Nlc3MvQVBJL3F0L3F3
ZWJwZXJtaXNzaW9ucmVxdWVzdC5jcHAgXAogICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vi
cGFnZS5jcHAgXAogICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAgXAorICAg
IFVJUHJvY2Vzcy9BUEkvcXQvcXdlYmljb25pbWFnZXByb3ZpZGVyLmNwcCBcCiAgICAgVUlQcm9j
ZXNzL0FQSS9xdC9xd2VicHJlZmVyZW5jZXMuY3BwIFwKICAgICBVSVByb2Nlc3MvQXV0aGVudGlj
YXRpb24vQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5jcHAgXAogICAgIFVJUHJvY2Vzcy9B
dXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXIuY3BwIFwKQEAgLTU4
OCw2ICs1OTAsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBVSVByb2Nlc3MvcXQvV2ViUG9wdXBNZW51
UHJveHlRdC5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9XZWJQb3B1cE1lbnVQcm94eVF0RGVza3Rv
cC5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9XZWJQcmVmZXJlbmNlc1F0LmNwcCBcCisgICAgVUlQ
cm9jZXNzL3F0L1F0V2ViSWNvbkRhdGFiYXNlQ2xpZW50LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9B
cHBsaWNhdGlvbkNhY2hlL1dlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLmNwcCBcCiAgICAgV2Vi
UHJvY2Vzcy9BdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdGlvbk1hbmFnZXIuY3BwIFwKICAgICBX
ZWJQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAgXApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAKaW5kZXggZDBhNjUxYzI3
NWEzZTBkYTlmMjEzMTdkZGQ4MzExZjk1OGU1Yjc2ZC4uYWU2MTMxM2E5ZmQwNGE0MjYxOGU4YTIy
OTE0ODk4MWQ0NGZiMjU0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3FxdWlja3dlYnZpZXcuY3BwCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAicXF1aWNr
d2Vidmlld19wLmgiCiAKICNpbmNsdWRlICJRdERpYWxvZ1J1bm5lci5oIgorI2luY2x1ZGUgIlF0
V2ViSWNvbkRhdGFiYXNlQ2xpZW50LmgiCiAjaW5jbHVkZSAiUXRXZWJQYWdlUHJveHkuaCIKICNp
bmNsdWRlICJVdGlsc1F0LmgiCiAjaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCkBAIC0zNSw2ICsz
Niw3IEBACiAjaW5jbHVkZSA8UXRXaWRnZXRzL1FGaWxlRGlhbG9nPgogI2luY2x1ZGUgPFF0V2lk
Z2V0cy9RSW5wdXREaWFsb2c+CiAjaW5jbHVkZSA8V0tPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lci5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBRUXVpY2tXZWJWaWV3UHJpdmF0
ZTo6UVF1aWNrV2ViVmlld1ByaXZhdGUoUVF1aWNrV2ViVmlldyogdmlld3BvcnQsIFdLQ29udGV4
dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYpCiAgICAgOiBxX3B0
cih2aWV3cG9ydCkKQEAgLTYxLDYgKzYzLDExIEBAIFFRdWlja1dlYlZpZXdQcml2YXRlOjpRUXVp
Y2tXZWJWaWV3UHJpdmF0ZShRUXVpY2tXZWJWaWV3KiB2aWV3cG9ydCwgV0tDb250ZXh0UmVmCiAg
ICAgcGFnZVVJQ2xpZW50LnJlc2V0KG5ldyBRdFdlYlBhZ2VVSUNsaWVudChwYWdlUHJveHktPnBh
Z2VSZWYoKSwgcV9wdHIpKTsKICAgICBldmVudEhhbmRsZXIucmVzZXQobmV3IFF0V2ViUGFnZUV2
ZW50SGFuZGxlcihwYWdlUHJveHktPnBhZ2VSZWYoKSkpOwogCisgICAgUmVmUHRyPFF0V2ViQ29u
dGV4dD4gY29udGV4dCA9IFF0V2ViQ29udGV4dDo6ZGVmYXVsdENvbnRleHQoKTsKKyAgICBRdFdl
Ykljb25EYXRhYmFzZUNsaWVudCogaWNvbkRhdGFiYXNlID0gY29udGV4dC0+aWNvbkRhdGFiYXNl
KCk7CisgICAgUU9iamVjdDo6Y29ubmVjdChpY29uRGF0YWJhc2UsIFNJR05BTChpY29uQ2hhbmdl
ZEZvclBhZ2VVUkwoUVVybCwgUVVybCkpLCB2aWV3cG9ydCwgU0xPVChfcV9vbkljb25DaGFuZ2Vk
Rm9yUGFnZVVSTChRVXJsLCBRVXJsKSkpOworICAgIFFPYmplY3Q6OmNvbm5lY3Qodmlld3BvcnQs
IFNJR05BTCh1cmxDaGFuZ2VkKFFVcmwpKSwgaWNvbkRhdGFiYXNlLCBTTE9UKHJlcXVlc3RJY29u
Rm9yUGFnZVVSTChRVXJsKSkpOworCiAgICAgLy8gQW55IHBhZ2Ugc2V0dGluZyBzaG91bGQgcHJl
ZmVycmFibGUgYmUgc2V0IGJlZm9yZSBjcmVhdGluZyB0aGUgcGFnZSwgc28gc2V0IHRoZW0gaGVy
ZToKICAgICBzZXRVc2VUcmFkaXRpb25hbERlc2t0b3BCZWhhdmlvdXIoZmFsc2UpOwogICAgIFFX
ZWJQcmVmZXJlbmNlc1ByaXZhdGU6OmdldChwYWdlUHJveHktPnByZWZlcmVuY2VzKCkpLT5zZXRB
dHRyaWJ1dGUoUVdlYlByZWZlcmVuY2VzUHJpdmF0ZTo6QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Vu
YWJsZWQsIHRydWUpOwpAQCAtMTQxLDYgKzE0OCwyOSBAQCB2b2lkIFFRdWlja1dlYlZpZXdQcml2
YXRlOjpkaWRGaW5pc2hGaXJzdE5vbkVtcHR5TGF5b3V0KCkKICAgICB9CiB9CiAKK3ZvaWQgUVF1
aWNrV2ViVmlld1ByaXZhdGU6Ol9xX29uSWNvbkNoYW5nZWRGb3JQYWdlVVJMKGNvbnN0IFFVcmwm
IHBhZ2VVUkwsIGNvbnN0IFFVcmwmIGljb25VUkwpCit7CisgICAgUV9RKFFRdWlja1dlYlZpZXcp
OworICAgIGlmIChxLT51cmwoKSAhPSBwYWdlVVJMKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAobV9pY29uVVJMID09IGljb25VUkwpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxR
dFdlYkNvbnRleHQ+IGNvbnRleHQgPSBRdFdlYkNvbnRleHQ6OmRlZmF1bHRDb250ZXh0KCk7Cisg
ICAgUXRXZWJJY29uRGF0YWJhc2VDbGllbnQqIGljb25EYXRhYmFzZSA9IGNvbnRleHQtPmljb25E
YXRhYmFzZSgpOworICAgIFN0cmluZyBvbGRQYWdlVVJMID0gUXRXZWJJY29uRGF0YWJhc2VDbGll
bnQ6OmdldFBhZ2VVUkxGcm9tRnVsbEljb25VUkwobV9pY29uVVJMKTsKKyAgICBTdHJpbmcgbmV3
UGFnZVVSTChwYWdlVVJMLnRvU3RyaW5nKCkpOworCisgICAgaWYgKCFvbGRQYWdlVVJMLmlzRW1w
dHkoKSkKKyAgICAgICAgaWNvbkRhdGFiYXNlLT5yZWxlYXNlSWNvbkZvclBhZ2VVUkwob2xkUGFn
ZVVSTCk7CisgICAgbV9pY29uVVJMID0gaWNvblVSTDsKKyAgICBpZiAoIW5ld1BhZ2VVUkwuaXNF
bXB0eSgpKQorICAgICAgICBpY29uRGF0YWJhc2UtPnJldGFpbkljb25Gb3JQYWdlVVJMKG5ld1Bh
Z2VVUkwpOworCisgICAgZW1pdCBxLT5pY29uQ2hhbmdlZChtX2ljb25VUkwpOworfQorCiB2b2lk
IFFRdWlja1dlYlZpZXdQcml2YXRlOjpfcV9zdXNwZW5kKCkKIHsKICAgICBwYWdlSXNTdXNwZW5k
ZWQgPSB0cnVlOwpAQCAtNTY0LDYgKzU5NCwxMiBAQCBRVXJsIFFRdWlja1dlYlZpZXc6OnVybCgp
IGNvbnN0CiAgICAgcmV0dXJuIGQtPnBhZ2VQcm94eS0+dXJsKCk7CiB9CiAKK1FVcmwgUVF1aWNr
V2ViVmlldzo6aWNvbigpIGNvbnN0Cit7CisgICAgUV9EKGNvbnN0IFFRdWlja1dlYlZpZXcpOwor
ICAgIHJldHVybiBkLT5tX2ljb25VUkw7Cit9CisKIGludCBRUXVpY2tXZWJWaWV3Ojpsb2FkUHJv
Z3Jlc3MoKSBjb25zdAogewogICAgIFFfRChjb25zdCBRUXVpY2tXZWJWaWV3KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcC5oCmluZGV4IGE3
OTJkMGQ3ZmExYjlhYmI5NWJhNGI5NmYxYjBhZmViZDk0ZWE0ZTkuLjk4OWJiN2I4YjdkOTJhNDQ4
MjY0MTY3NDc4OGI1MmRmOGM5ZmQyYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaApAQCAtNTAsNiArNTAsNyBAQCBjbGFzcyBRV0VC
S0lUX0VYUE9SVCBRUXVpY2tXZWJWaWV3IDogcHVibGljIFFRdWlja0l0ZW0gewogICAgIFFfT0JK
RUNUCiAgICAgUV9QUk9QRVJUWShRU3RyaW5nIHRpdGxlIFJFQUQgdGl0bGUgTk9USUZZIHRpdGxl
Q2hhbmdlZCkKICAgICBRX1BST1BFUlRZKFFVcmwgdXJsIFJFQUQgdXJsIE5PVElGWSB1cmxDaGFu
Z2VkKQorICAgIFFfUFJPUEVSVFkoUVVybCBpY29uIFJFQUQgaWNvbiBOT1RJRlkgaWNvbkNoYW5n
ZWQpCiAgICAgUV9QUk9QRVJUWShpbnQgbG9hZFByb2dyZXNzIFJFQUQgbG9hZFByb2dyZXNzIE5P
VElGWSBsb2FkUHJvZ3Jlc3NDaGFuZ2VkKQogICAgIFFfUFJPUEVSVFkoYm9vbCBjYW5Hb0JhY2sg
UkVBRCBjYW5Hb0JhY2sgTk9USUZZIG5hdmlnYXRpb25TdGF0ZUNoYW5nZWQgRklOQUwpCiAgICAg
UV9QUk9QRVJUWShib29sIGNhbkdvRm9yd2FyZCBSRUFEIGNhbkdvRm9yd2FyZCBOT1RJRlkgbmF2
aWdhdGlvblN0YXRlQ2hhbmdlZCBGSU5BTCkKQEAgLTc3LDYgKzc4LDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgflFRdWlja1dlYlZpZXcoKTsKIAogICAgIFFVcmwgdXJsKCkgY29uc3Q7CisgICAg
UVVybCBpY29uKCkgY29uc3Q7CiAgICAgUVN0cmluZyB0aXRsZSgpIGNvbnN0OwogICAgIGludCBs
b2FkUHJvZ3Jlc3MoKSBjb25zdDsKIApAQCAtMTA5LDYgKzExMSw3IEBAIFFfU0lHTkFMUzoKICAg
ICB2b2lkIGxvYWRGYWlsZWQoUVF1aWNrV2ViVmlldzo6RXJyb3JUeXBlIGVycm9yVHlwZSwgaW50
IGVycm9yQ29kZSwgY29uc3QgUVVybCYgdXJsKTsKICAgICB2b2lkIGxvYWRQcm9ncmVzc0NoYW5n
ZWQoaW50IHByb2dyZXNzKTsKICAgICB2b2lkIHVybENoYW5nZWQoY29uc3QgUVVybCYgdXJsKTsK
KyAgICB2b2lkIGljb25DaGFuZ2VkKGNvbnN0IFFVcmwmIGljb25VUkwpOwogICAgIHZvaWQgbWVz
c2FnZVJlY2VpdmVkKGNvbnN0IFFWYXJpYW50TWFwJiBtZXNzYWdlKTsKICAgICB2b2lkIGxpbmtI
b3ZlcmVkKGNvbnN0IFFVcmwmIHVybCwgY29uc3QgUVN0cmluZyYgdGl0bGUpOwogICAgIHZvaWQg
bmF2aWdhdGlvblN0YXRlQ2hhbmdlZCgpOwpAQCAtMTMyLDYgKzEzNSw3IEBAIHByaXZhdGU6CiAg
ICAgUV9QUklWQVRFX1NMT1QoZF9mdW5jKCksIHZvaWQgX3Ffb25PcGVuUGFuZWxGaWxlc1NlbGVj
dGVkKCkpOwogICAgIFFfUFJJVkFURV9TTE9UKGRfZnVuYygpLCB2b2lkIF9xX29uT3BlblBhbmVs
RmluaXNoZWQoaW50IHJlc3VsdCkpOwogICAgIFFfUFJJVkFURV9TTE9UKGRfZnVuYygpLCB2b2lk
IF9xX29uVmlzaWJsZUNoYW5nZWQoKSk7CisgICAgUV9QUklWQVRFX1NMT1QoZF9mdW5jKCksIHZv
aWQgX3Ffb25JY29uQ2hhbmdlZEZvclBhZ2VVUkwoY29uc3QgUVVybCYsIGNvbnN0IFFVcmwmKSk7
CiAgICAgLy8gSGlkZXMgUU9iamVjdDo6ZF9wdHIgYWxsb3dpbmcgdXMgdG8gdXNlIHRoZSBjb252
ZW5pZW5jZSBtYWNyb3MuCiAgICAgUVNjb3BlZFBvaW50ZXI8UVF1aWNrV2ViVmlld1ByaXZhdGU+
IGRfcHRyOwogICAgIFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWwqIG1fZXhwZXJpbWVudGFsOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3
X3BfcC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3Bf
cC5oCmluZGV4IDYzNGU4MDIwODkxNjFlMjllODkxMzAyMDE1NjdjZGVhMTQ4ZWFjNjEuLjM4Y2Nh
NmVlZjBiZGE1NTA4OWNlN2RkZjRmZTgwZDgwNTdmYzYzODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wX3AuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcF9wLmgKQEAgLTc0LDYgKzc0
LDcgQEAgcHVibGljOgogICAgIHZvaWQgX3Ffb25PcGVuUGFuZWxGaWxlc1NlbGVjdGVkKCk7CiAg
ICAgdm9pZCBfcV9vbk9wZW5QYW5lbEZpbmlzaGVkKGludCByZXN1bHQpOwogICAgIHZvaWQgX3Ff
b25WaXNpYmxlQ2hhbmdlZCgpOworICAgIHZvaWQgX3Ffb25JY29uQ2hhbmdlZEZvclBhZ2VVUkwo
Y29uc3QgUVVybCYgcGFnZVVSTCwgY29uc3QgUVVybCYgaWNvblVSTFN0cmluZyk7CiAKICAgICB2
b2lkIGNob29zZUZpbGVzKFdLT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJSZWYsIGNvbnN0IFFTdHJp
bmdMaXN0JiBzZWxlY3RlZEZpbGVOYW1lcywgUXRXZWJQYWdlVUlDbGllbnQ6OkZpbGVDaG9vc2Vy
VHlwZSk7CiAgICAgdm9pZCBydW5KYXZhU2NyaXB0QWxlcnQoY29uc3QgUVN0cmluZyYpOwpAQCAt
MTM2LDYgKzEzNyw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCB1c2VUcmFkaXRpb25hbERlc2t0b3BC
ZWhhdmlvdXI7CiAgICAgUUZpbGVEaWFsb2cqIGZpbGVEaWFsb2c7CiAgICAgV0tPcGVuUGFuZWxS
ZXN1bHRMaXN0ZW5lclJlZiBvcGVuUGFuZWxSZXN1bHRMaXN0ZW5lcjsKKyAgICBRVXJsIG1faWNv
blVSTDsKIH07CiAKICNlbmRpZiAvLyBxcXVpY2t3ZWJ2aWV3X3BfcF9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJpY29uaW1hZ2Vwcm92aWRlci5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJpY29uaW1hZ2Vwcm92aWRlci5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYTZjMjA2NTcxYzA3ZDAwZjJiMjc0OGJiNWRkY2QzMjg1ZTdiZmFkYQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdlYmlj
b25pbWFnZXByb3ZpZGVyLmNwcApAQCAtMCwwICsxLDYwIEBACisvKgorICAgIENvcHlyaWdodCAo
QykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicXdlYmljb25pbWFnZXByb3ZpZGVyX3Au
aCIKKworI2luY2x1ZGUgIlF0V2ViQ29udGV4dC5oIgorI2luY2x1ZGUgIlF0V2ViSWNvbkRhdGFi
YXNlQ2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBXZWJLaXQ7CisKK1FXZWJJY29uSW1hZ2VQcm92aWRlcjo6UVdlYkljb25JbWFnZVBy
b3ZpZGVyKCkKKyAgICA6IFFEZWNsYXJhdGl2ZUltYWdlUHJvdmlkZXIoUURlY2xhcmF0aXZlSW1h
Z2VQcm92aWRlcjo6SW1hZ2UpCisgICAgLCBtX2RlZmF1bHRGYXZJY29uKDEsIDEsIFFJbWFnZTo6
Rm9ybWF0X0FSR0I0NDQ0X1ByZW11bHRpcGxpZWQpCit7CisgICAgbV9kZWZhdWx0RmF2SWNvbi5m
aWxsKFF0Ojp0cmFuc3BhcmVudCk7Cit9CisKK1FXZWJJY29uSW1hZ2VQcm92aWRlcjo6flFXZWJJ
Y29uSW1hZ2VQcm92aWRlcigpCit7CisKK30KKworUUltYWdlIFFXZWJJY29uSW1hZ2VQcm92aWRl
cjo6cmVxdWVzdEltYWdlKGNvbnN0IFFTdHJpbmcmIGlkLCBRU2l6ZSogc2l6ZSwgY29uc3QgUVNp
emUmIHJlcXVlc3RlZFNpemUpCit7CisgICAgUmVmUHRyPFF0V2ViQ29udGV4dD4gY29udGV4dCA9
IFF0V2ViQ29udGV4dDo6ZGVmYXVsdENvbnRleHQoKTsKKyAgICBRdFdlYkljb25EYXRhYmFzZUNs
aWVudCogaWNvbkRhdGFiYXNlID0gY29udGV4dC0+aWNvbkRhdGFiYXNlKCk7CisgICAgU3RyaW5n
IHBhZ2VVUkwgPSBRdFdlYkljb25EYXRhYmFzZUNsaWVudDo6Z2V0UGFnZVVSTEZyb21JY29uVVJM
KGlkKTsKKyAgICBRSW1hZ2UgaWNvbjsKKyAgICBpZiAoaWNvbkRhdGFiYXNlKSB7CisgICAgICAg
IGlmIChyZXF1ZXN0ZWRTaXplLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIGljb24gPSBpY29uRGF0
YWJhc2UtPmljb25JbWFnZUZvclBhZ2VVUkwocGFnZVVSTCwgcmVxdWVzdGVkU2l6ZSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGljb24gPSBpY29uRGF0YWJhc2UtPmljb25JbWFnZUZvclBh
Z2VVUkwocGFnZVVSTCk7CisgICAgfQorICAgIGlmIChpY29uLmlzTnVsbCgpKQorICAgICAgICBp
Y29uID0gbV9kZWZhdWx0RmF2SWNvbjsKKworICAgIGlmIChzaXplKQorICAgICAgICAqc2l6ZSA9
IGljb24uc2l6ZSgpOworCisgICAgcmV0dXJuIGljb247Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJpY29uaW1hZ2Vwcm92aWRlcl9wLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJpY29uaW1hZ2Vwcm92aWRlcl9wLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNjNjMzdlMDBiZmU0NzUzMjhiZTViOGU4MTVlYzQ3NzExOTE1OWRlNQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdlYmljb25pbWFn
ZXByb3ZpZGVyX3AuaApAQCAtMCwwICsxLDM3IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAx
MSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZu
ZGVmIHF3ZWJpY29uaW1hZ2Vwcm92aWRlcl9wX2gKKyNkZWZpbmUgcXdlYmljb25pbWFnZXByb3Zp
ZGVyX3BfaAorCisjaW5jbHVkZSAicXdlYmtpdGdsb2JhbC5oIgorI2luY2x1ZGUgPFF0RGVjbGFy
YXRpdmUvUURlY2xhcmF0aXZlSW1hZ2VQcm92aWRlcj4KKyNpbmNsdWRlIDxRdEd1aS9RSW1hZ2U+
CisKK2NsYXNzIFFXRUJLSVRfRVhQT1JUIFFXZWJJY29uSW1hZ2VQcm92aWRlciA6IHB1YmxpYyBR
RGVjbGFyYXRpdmVJbWFnZVByb3ZpZGVyIHsKK3B1YmxpYzoKKyAgICBRV2ViSWNvbkltYWdlUHJv
dmlkZXIoKTsKKyAgICB+UVdlYkljb25JbWFnZVByb3ZpZGVyKCk7CisgICAgUUltYWdlIHJlcXVl
c3RJbWFnZShjb25zdCBRU3RyaW5nJiBpZCwgUVNpemUqIHNpemUsIGNvbnN0IFFTaXplJiByZXF1
ZXN0ZWRTaXplKTsKKworcHJpdmF0ZToKKyAgICBRSW1hZ2UgbV9kZWZhdWx0RmF2SWNvbjsKK307
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRl
eHQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmgKaW5kZXggNzA0Mjg1
ZWVlNzVmYzE2YzBiNTNjOWZiYjBmNzZmNTEzMjRlYjNlMi4uMjFmMjE5MTQ5YWM5M2U5MjVlZWRh
N2VhZWM1YjE0ODlhNWY5YjZmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYkNvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5o
CkBAIC0xNzEsNiArMTcxLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXREYXRhYmFzZURpcmVj
dG9yeShjb25zdCBTdHJpbmcmIGRpcikgeyBtX292ZXJyaWRlRGF0YWJhc2VEaXJlY3RvcnkgPSBk
aXI7IH0KICAgICB2b2lkIHNldEljb25EYXRhYmFzZVBhdGgoY29uc3QgU3RyaW5nJik7CisgICAg
U3RyaW5nIGljb25EYXRhYmFzZVBhdGgoKSBjb25zdDsKICAgICB2b2lkIHNldExvY2FsU3RvcmFn
ZURpcmVjdG9yeShjb25zdCBTdHJpbmcmIGRpcikgeyBtX292ZXJyaWRlTG9jYWxTdG9yYWdlRGly
ZWN0b3J5ID0gZGlyOyB9CiAKICAgICBTdHJpbmcgb3ZlcnJpZGVXZWJJbnNwZWN0b3JCYXNlRGly
ZWN0b3J5KCkgY29uc3QgeyByZXR1cm4gbV9vdmVycmlkZVdlYkluc3BlY3RvckJhc2VEaXJlY3Rv
cnk7IH0KQEAgLTIzNiw3ICsyMzcsNiBAQCBwcml2YXRlOgogICAgIFN0cmluZyBkYXRhYmFzZURp
cmVjdG9yeSgpIGNvbnN0OwogICAgIFN0cmluZyBwbGF0Zm9ybURlZmF1bHREYXRhYmFzZURpcmVj
dG9yeSgpIGNvbnN0OwogCi0gICAgU3RyaW5nIGljb25EYXRhYmFzZVBhdGgoKSBjb25zdDsKICAg
ICBTdHJpbmcgcGxhdGZvcm1EZWZhdWx0SWNvbkRhdGFiYXNlUGF0aCgpIGNvbnN0OwogCiAgICAg
U3RyaW5nIGxvY2FsU3RvcmFnZURpcmVjdG9yeSgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmNwcAppbmRleCA4NDI3Y2EzNWUwODUzYmRkZmNmY2Jk
ZTYyNDgzNTg0MWEzNWJhMTQ4Li5lMGRhY2EyZmI2M2Y4NDY3YmZhODNmNmU2YTYwYmM1YzBhYjZj
MmFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNl
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmNwcApA
QCAtMTc1LDE0ICsxNzUsMTQgQEAgdm9pZCBXZWJJY29uRGF0YWJhc2U6OmdldExvYWREZWNpc2lv
bkZvckljb25VUkwoY29uc3QgU3RyaW5nJiBpY29uVVJMLCB1aW50NjRfdAogICAgIG1fd2ViQ29u
dGV4dC0+c2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJJY29uRGF0YWJhc2VQcm94eTo6
UmVjZWl2ZWRJY29uTG9hZERlY2lzaW9uKChpbnQpZGVjaXNpb24sIGNhbGxiYWNrSUQpKTsKIH0K
IAotSW1hZ2UqIFdlYkljb25EYXRhYmFzZTo6aW1hZ2VGb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYg
cGFnZVVSTCkKK0ltYWdlKiBXZWJJY29uRGF0YWJhc2U6OmltYWdlRm9yUGFnZVVSTChjb25zdCBT
dHJpbmcmIHBhZ2VVUkwsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGljb25TaXplKQogewogICAg
IGlmICghbV93ZWJDb250ZXh0IHx8ICFtX2ljb25EYXRhYmFzZUltcGwgfHwgIW1faWNvbkRhdGFi
YXNlSW1wbC0+aXNPcGVuKCkgfHwgcGFnZVVSTC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAw
OyAgICAKIAogICAgIC8vIFRoZSBXZWJDb3JlIEljb25EYXRhYmFzZSBpZ25vcmVzIHRoZSBwYXNz
ZWQgaW4gc2l6ZSBwYXJhbWV0ZXIuCiAgICAgLy8gSWYgdGhhdCBjaGFuZ2VzIHdlJ2xsIG5lZWQg
dG8gcmV0aGluayBob3cgdGhpcyBBUEkgaXMgZXhwb3NlZC4KLSAgICByZXR1cm4gbV9pY29uRGF0
YWJhc2VJbXBsLT5zeW5jaHJvbm91c0ljb25Gb3JQYWdlVVJMKHBhZ2VVUkwsIFdlYkNvcmU6Oklu
dFNpemUoMzIsIDMyKSk7CisgICAgcmV0dXJuIG1faWNvbkRhdGFiYXNlSW1wbC0+c3luY2hyb25v
dXNJY29uRm9yUGFnZVVSTChwYWdlVVJMLCBpY29uU2l6ZSk7CiB9CiAKIHZvaWQgV2ViSWNvbkRh
dGFiYXNlOjpyZW1vdmVBbGxJY29ucygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSWNv
bkRhdGFiYXNlLmgKaW5kZXggMGMyNDNlZjA4NzIwMjE5YmExMDVkZTRiMWFjNmRkNDc3ZDY4NDlh
ZC4uYjc0YzIxMDg2NDg1MTcwMDk2NzM0OTgwZGIxNzA1OWYyY2RlMjgxNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuaApAQCAtMzEsNiArMzEsNyBAQAogI2lu
Y2x1ZGUgIkNvbm5lY3Rpb24uaCIKICNpbmNsdWRlICJXZWJJY29uRGF0YWJhc2VDbGllbnQuaCIK
ICNpbmNsdWRlIDxXZWJDb3JlL0ljb25EYXRhYmFzZUNsaWVudC5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvSW50U2l6ZS5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC03Niw3ICs3Nyw3IEBAIHB1
YmxpYzoKICAgICAKICAgICB2b2lkIGdldExvYWREZWNpc2lvbkZvckljb25VUkwoY29uc3QgU3Ry
aW5nJiwgdWludDY0X3QgY2FsbGJhY2tJRCk7CiAKLSAgICBXZWJDb3JlOjpJbWFnZSogaW1hZ2VG
b3JQYWdlVVJMKGNvbnN0IFN0cmluZyYpOworICAgIFdlYkNvcmU6OkltYWdlKiBpbWFnZUZvclBh
Z2VVUkwoY29uc3QgU3RyaW5nJiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgaWNvblNpemUgPSBX
ZWJDb3JlOjpJbnRTaXplKDMyLCAzMikpOwogICAgIAogICAgIHZvaWQgcmVtb3ZlQWxsSWNvbnMo
KTsKICAgICB2b2lkIGNoZWNrSW50ZWdyaXR5QmVmb3JlT3BlbmluZygpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJDb250ZXh0LmNwcAppbmRleCBhMWZmMWQyMGQxZTBiZTRi
MDRiYzUwYmQxNzM3MTkxNWY1NzAxOGFjLi5iYzMyNjY4NzNlZmM2NDY3NGZhZTM1OTc1MDJmNmRj
MjcyZjFiYWY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJD
b250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJDb250ZXh0
LmNwcApAQCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVkZSAiTXV0YWJsZUFycmF5LmgiCiAjaW5j
bHVkZSAiUXREb3dubG9hZE1hbmFnZXIuaCIKKyNpbmNsdWRlICJRdFdlYkljb25EYXRhYmFzZUNs
aWVudC5oIgogI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgogI2luY2x1ZGUgIldlYkNvbnRleHQuaCIK
ICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKQEAgLTkzLDYgKzk0LDcgQEAgdm9pZCBRdFdlYkNv
bnRleHQ6OnBvc3RNZXNzYWdlVG9OYXZpZ2F0b3JRdE9iamVjdChXZWJQYWdlUHJveHkqIHdlYlBh
Z2VQcm94eSwgY28KIHZvaWQgUXRXZWJDb250ZXh0Ojppbml0aWFsaXplKCkKIHsKICAgICBtX2Rv
d25sb2FkTWFuYWdlciA9IGFkb3B0UHRyKG5ldyBRdERvd25sb2FkTWFuYWdlcihtX2NvbnRleHQu
Z2V0KCkpKTsKKyAgICBtX2ljb25EYXRhYmFzZSA9IGFkb3B0UHRyKG5ldyBRdFdlYkljb25EYXRh
YmFzZUNsaWVudChtX2NvbnRleHQuZ2V0KCkpKTsKICAgICBpbml0aWFsaXplQ29udGV4dEluamVj
dGVkQnVuZGxlQ2xpZW50KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC9RdFdlYkNvbnRleHQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdl
YkNvbnRleHQuaAppbmRleCA5N2NlMjZkNmY5YTIxMjQxZmI3MDU1ZWNhZDliZjBkODQxOWVhNDI5
Li5lYWIzZDdjNDc2ODg1OWFmZmZiY2Y2MmJhZDZiZTE4YjNkYWM2ZjA5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJDb250ZXh0LmgKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViQ29udGV4dC5oCkBAIC0zNSw2ICszNSw3IEBAIG5hbWVz
cGFjZSBXZWJLaXQgewogCiBjbGFzcyBQYWdlQ2xpZW50OwogY2xhc3MgUXREb3dubG9hZE1hbmFn
ZXI7CitjbGFzcyBRdFdlYkljb25EYXRhYmFzZUNsaWVudDsKIGNsYXNzIFdlYkNvbnRleHQ7CiBj
bGFzcyBXZWJQYWdlR3JvdXA7CiBjbGFzcyBXZWJQYWdlUHJveHk7CkBAIC00OSw2ICs1MCw3IEBA
IHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPFdlYlBhZ2VQcm94eT4gY3JlYXRlV2ViUGFnZShQYWdl
Q2xpZW50KiwgV2ViUGFnZUdyb3VwKik7CiAKICAgICBRdERvd25sb2FkTWFuYWdlciogZG93bmxv
YWRNYW5hZ2VyKCkgeyByZXR1cm4gbV9kb3dubG9hZE1hbmFnZXIuZ2V0KCk7IH0KKyAgICBRdFdl
Ykljb25EYXRhYmFzZUNsaWVudCogaWNvbkRhdGFiYXNlKCkgeyByZXR1cm4gbV9pY29uRGF0YWJh
c2UuZ2V0KCk7IH0KIAogICAgIHZvaWQgc2V0TmF2aWdhdG9yUXRPYmplY3RFbmFibGVkKFdlYlBh
Z2VQcm94eSosIGJvb2wpOwogICAgIHZvaWQgcG9zdE1lc3NhZ2VUb05hdmlnYXRvclF0T2JqZWN0
KFdlYlBhZ2VQcm94eSosIGNvbnN0IFFTdHJpbmcmKTsKQEAgLTY2LDYgKzY4LDcgQEAgcHJpdmF0
ZToKIAogICAgIFJlZlB0cjxXZWJDb250ZXh0PiBtX2NvbnRleHQ7CiAgICAgT3duUHRyPFF0RG93
bmxvYWRNYW5hZ2VyPiBtX2Rvd25sb2FkTWFuYWdlcjsKKyAgICBPd25QdHI8UXRXZWJJY29uRGF0
YWJhc2VDbGllbnQ+IG1faWNvbkRhdGFiYXNlOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViSWNvbkRhdGFiYXNlQ2xpZW50LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYkljb25EYXRhYmFzZUNsaWVudC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNWJiMDkyNjc2NWY3MWIyYTI2YjZmZDJhZjFkNzk1NDM5YWNlNmU3NwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYkljb25EYXRhYmFzZUNs
aWVudC5jcHAKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJRdFdlYkljb25EYXRhYmFzZUNsaWVudC5oIgorCisjaW5j
bHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVy
LmgiCisjaW5jbHVkZSAiVGhyZWFkaW5nLmgiCisjaW5jbHVkZSAiV0tVUkxRdC5oIgorI2luY2x1
ZGUgIldlYkNvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJJY29uRGF0YWJhc2UuaCIKKwordXNpbmcg
bmFtZXNwYWNlIFdlYktpdDsKKworc3RhdGljIGlubGluZSBRdFdlYkljb25EYXRhYmFzZUNsaWVu
dCogdG9RdFdlYkljb25EYXRhYmFzZUNsaWVudChjb25zdCB2b2lkKiBjbGllbnRJbmZvKQorewor
ICAgIEFTU0VSVChjbGllbnRJbmZvKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxRdFdl
Ykljb25EYXRhYmFzZUNsaWVudCo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKTsKK30K
KworUXRXZWJJY29uRGF0YWJhc2VDbGllbnQ6OlF0V2ViSWNvbkRhdGFiYXNlQ2xpZW50KFdlYkNv
bnRleHQqIGNvbnRleHQpCisgICAgOiBtX2ljb25JRCgwKQorICAgICwgbV9pbWFnZUxvY2sobmV3
IFdURjo6TXV0ZXgpCit7CisgICAgLy8gRklYTUU6IGEgc2V0dGVyIHVzaW5nIGl0cyBnZXR0ZXIg
bG9va3Mgd3JvbmcgYnV0IHRoZSBmaXJzdCBhY3R1YWxseSB0cmlnZ2VyCisgICAgLy8gdGhlIHN0
YXJ0dXAgb2YgSWNvbkRhdGFiYXNlLCB0aGlzIGlzIHdoeSB3ZSBuZWVkIGl0LiBXZSBzaG91bGQg
c2VwYXJhdGUgdGhpcyBzZXR1cAorICAgIC8vIGluIGFub3RoZXIgZnVuY3Rpb24gZm9yIHRoZSBz
YWtlIG9mIGNsYXJpdHkuCisgICAgY29udGV4dC0+c2V0SWNvbkRhdGFiYXNlUGF0aChjb250ZXh0
LT5pY29uRGF0YWJhc2VQYXRoKCkpOworICAgIG1faWNvbkRhdGFiYXNlID0gY29udGV4dC0+aWNv
bkRhdGFiYXNlKCk7CisKKyAgICBXS0ljb25EYXRhYmFzZUNsaWVudCBpY29uRGF0YWJhc2VDbGll
bnQ7CisgICAgbWVtc2V0KCZpY29uRGF0YWJhc2VDbGllbnQsIDAsIHNpemVvZihXS0ljb25EYXRh
YmFzZUNsaWVudCkpOworICAgIGljb25EYXRhYmFzZUNsaWVudC52ZXJzaW9uID0ga1dLSWNvbkRh
dGFiYXNlQ2xpZW50Q3VycmVudFZlcnNpb247CisgICAgaWNvbkRhdGFiYXNlQ2xpZW50LmNsaWVu
dEluZm8gPSB0aGlzOworICAgIGljb25EYXRhYmFzZUNsaWVudC5kaWRDaGFuZ2VJY29uRm9yUGFn
ZVVSTCA9IGRpZENoYW5nZUljb25Gb3JQYWdlVVJMOworICAgIFdLSWNvbkRhdGFiYXNlU2V0SWNv
bkRhdGFiYXNlQ2xpZW50KHRvQVBJKG1faWNvbkRhdGFiYXNlKSwgJmljb25EYXRhYmFzZUNsaWVu
dCk7Cit9CisKK1F0V2ViSWNvbkRhdGFiYXNlQ2xpZW50Ojp+UXRXZWJJY29uRGF0YWJhc2VDbGll
bnQoKQoreworICAgIGRlbGV0ZSBtX2ltYWdlTG9jazsKKyAgICBtX2ltYWdlTG9jayA9IDA7Cit9
CisKK3ZvaWQgUXRXZWJJY29uRGF0YWJhc2VDbGllbnQ6OmRpZENoYW5nZUljb25Gb3JQYWdlVVJM
KFdLSWNvbkRhdGFiYXNlUmVmIGljb25EYXRhYmFzZSwgV0tVUkxSZWYgcGFnZVVSTCwgY29uc3Qg
dm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBRVXJsIHFVcmwgPSBXS1VSTENvcHlRVXJsKHBhZ2VV
UkwpOworICAgIHRvUXRXZWJJY29uRGF0YWJhc2VDbGllbnQoY2xpZW50SW5mbyktPnJlcXVlc3RJ
Y29uRm9yUGFnZVVSTChxVXJsKTsKK30KKworUUltYWdlIFF0V2ViSWNvbkRhdGFiYXNlQ2xpZW50
OjppY29uSW1hZ2VGb3JQYWdlVVJMKGNvbnN0IFFTdHJpbmcmIHBhZ2VVUkwsIGNvbnN0IFFTaXpl
JiBpY29uU2l6ZSkKK3sKKyAgICBXVEY6Ok11dGV4TG9ja2VyIGxvY2tlcigqbV9pbWFnZUxvY2sp
OworICAgIFN0cmluZyB1cmwocGFnZVVSTCk7CisgICAgV2ViQ29yZTo6SW50U2l6ZSBzaXplKGlj
b25TaXplLndpZHRoKCksIGljb25TaXplLmhlaWdodCgpKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6
SW1hZ2U+IGltYWdlID0gbV9pY29uRGF0YWJhc2UtPmltYWdlRm9yUGFnZVVSTCh1cmwsIHNpemUp
OworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybiBRSW1hZ2UoKTsKKworICAgIFFQaXht
YXAqIG5hdGl2ZUltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Cisg
ICAgaWYgKCFuYXRpdmVJbWFnZSkKKyAgICAgICAgcmV0dXJuIFFJbWFnZSgpOworCisgICAgcmV0
dXJuIG5hdGl2ZUltYWdlLT50b0ltYWdlKCk7Cit9CisKK3ZvaWQgUXRXZWJJY29uRGF0YWJhc2VD
bGllbnQ6OnJlcXVlc3RJY29uRm9yUGFnZVVSTChjb25zdCBRVXJsJiB1cmwpCit7CisgICAgUVN0
cmluZyBpY29uVXJsU3RyaW5nID0gdXJsLnRvU3RyaW5nKCk7CisgICAgUUltYWdlIGljb24gPSBp
Y29uSW1hZ2VGb3JQYWdlVVJMKGljb25VcmxTdHJpbmcpOworICAgIGlmIChpY29uLmlzTnVsbCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBzdGF0aWMgUVN0cmluZyBwYXR0ZXJuID0gUUxhdGlu
MVN0cmluZygiaW1hZ2U6Ly93ZWJpY29uLyUxLyUyIik7CisgICAgUVVybCBpY29uVVJMKHBhdHRl
cm4uYXJnKGljb25VcmxTdHJpbmcpLmFyZyhuZXh0SWNvbklEKCkpKTsKKyAgICBlbWl0IGljb25D
aGFuZ2VkRm9yUGFnZVVSTCh1cmwsIGljb25VUkwpOworfQorCit2b2lkIFF0V2ViSWNvbkRhdGFi
YXNlQ2xpZW50OjpyZXRhaW5JY29uRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmIHBhZ2VVUkwpCit7
CisgICAgbV9pY29uRGF0YWJhc2UtPnJldGFpbkljb25Gb3JQYWdlVVJMKHBhZ2VVUkwpOworfQor
Cit2b2lkIFF0V2ViSWNvbkRhdGFiYXNlQ2xpZW50OjpyZWxlYXNlSWNvbkZvclBhZ2VVUkwoY29u
c3QgU3RyaW5nJiBwYWdlVVJMKQoreworICAgIG1faWNvbkRhdGFiYXNlLT5yZWxlYXNlSWNvbkZv
clBhZ2VVUkwocGFnZVVSTCk7Cit9CisKK3F1aW50NjQgUXRXZWJJY29uRGF0YWJhc2VDbGllbnQ6
Om5leHRJY29uSUQoKQoreworICAgIHJldHVybiArK21faWNvbklEOworfQorCitTdHJpbmcgUXRX
ZWJJY29uRGF0YWJhc2VDbGllbnQ6OmdldFBhZ2VVUkxGcm9tRnVsbEljb25VUkwoY29uc3QgUVVy
bCYgaWNvblVSTCkKK3sKKyAgICBTdHJpbmcgdXJsKGljb25VUkwudG9TdHJpbmcoKSk7CisgICAg
Ly8gUmVtb3ZlIHRoZSBwcmVmaXggImltYWdlOi8vd2ViaWNvbi8iIHNvIHdlIGdldCB0aGUgdXJs
IGluIHRoZSBmb3JtYXQgIjxwYWdlVVJMPi88aWNvbklEPiIuCisgICAgcmV0dXJuIGdldFBhZ2VV
UkxGcm9tSWNvblVSTCh1cmwucmlnaHQodXJsLmxlbmd0aCgpIC0gMTYpKTsKK30KKworU3RyaW5n
IFF0V2ViSWNvbkRhdGFiYXNlQ2xpZW50OjpnZXRQYWdlVVJMRnJvbUljb25VUkwoY29uc3QgUVN0
cmluZyYgaWNvblVSTCkKK3sKKyAgICBTdHJpbmcgdXJsKGljb25VUkwpOworICAgIHJldHVybiBn
ZXRQYWdlVVJMRnJvbUljb25VUkwodXJsKTsKK30KKworU3RyaW5nIFF0V2ViSWNvbkRhdGFiYXNl
Q2xpZW50OjpnZXRQYWdlVVJMRnJvbUljb25VUkwoY29uc3QgU3RyaW5nJiB1cmwpCit7CisgICAg
aW50IGsgPSB1cmwucmV2ZXJzZUZpbmQoJy8nKTsKKyAgICBpZiAoayA9PSBub3RGb3VuZCkKKyAg
ICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiB1cmwubGVmdChrKTsKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYkljb25EYXRhYmFzZUNsaWVu
dC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViSWNvbkRhdGFiYXNlQ2xpZW50
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNWFlMGViNDA3NjVmYmU4NGI1MGE3YzdkNDE4NTRiODg1ZDJhMGQxOAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYkljb25E
YXRhYmFzZUNsaWVudC5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAy
MDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKwor
I2lmbmRlZiBRdFdlYkljb25EYXRhYmFzZUNsaWVudF9oCisjZGVmaW5lIFF0V2ViSWNvbkRhdGFi
YXNlQ2xpZW50X2gKKworI2luY2x1ZGUgIldLSWNvbkRhdGFiYXNlLmgiCisjaW5jbHVkZSAicXdl
YmtpdGdsb2JhbC5oIgorI2luY2x1ZGUgPFF0Q29yZS9RTWFwPgorI2luY2x1ZGUgPFF0Q29yZS9R
T2JqZWN0PgorI2luY2x1ZGUgPFF0Q29yZS9RVXJsPgorI2luY2x1ZGUgPFF0R3VpL1FJbWFnZT4K
KworbmFtZXNwYWNlIFdURiB7CitjbGFzcyBNdXRleDsKK2NsYXNzIFN0cmluZzsKK30KKworbmFt
ZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJDb250ZXh0OworY2xhc3MgV2ViSWNvbkRhdGFiYXNl
OworCitjbGFzcyBRdFdlYkljb25EYXRhYmFzZUNsaWVudCA6IHB1YmxpYyBRT2JqZWN0IHsKKyAg
ICBRX09CSkVDVAorCitwdWJsaWM6CisgICAgUXRXZWJJY29uRGF0YWJhc2VDbGllbnQoV2ViQ29u
dGV4dCopOworICAgIH5RdFdlYkljb25EYXRhYmFzZUNsaWVudCgpOworCisgICAgUUltYWdlIGlj
b25JbWFnZUZvclBhZ2VVUkwoY29uc3QgUVN0cmluZyYgcGFnZVVSTCwgY29uc3QgUVNpemUmIGlj
b25TaXplID0gUVNpemUoMzIsIDMyKSk7CisgICAgdm9pZCByZXRhaW5JY29uRm9yUGFnZVVSTChj
b25zdCBXVEY6OlN0cmluZyYpOworICAgIHZvaWQgcmVsZWFzZUljb25Gb3JQYWdlVVJMKGNvbnN0
IFdURjo6U3RyaW5nJik7CisKKyAgICBxdWludDY0IG5leHRJY29uSUQoKTsKKworICAgIHN0YXRp
YyBXVEY6OlN0cmluZyBnZXRQYWdlVVJMRnJvbUZ1bGxJY29uVVJMKGNvbnN0IFFVcmwmKTsKKyAg
ICBzdGF0aWMgV1RGOjpTdHJpbmcgZ2V0UGFnZVVSTEZyb21JY29uVVJMKGNvbnN0IFFTdHJpbmcm
KTsKKworcHVibGljIFFfU0xPVFM6CisgICAgdm9pZCByZXF1ZXN0SWNvbkZvclBhZ2VVUkwoY29u
c3QgUVVybCYpOworCitwdWJsaWM6CisgICAgUV9TSUdOQUwgdm9pZCBpY29uQ2hhbmdlZEZvclBh
Z2VVUkwoY29uc3QgUVVybCYgcGFnZVVSTCwgY29uc3QgUVVybCYgaWNvblVSTCk7CisKK3ByaXZh
dGU6CisgICAgc3RhdGljIFdURjo6U3RyaW5nIGdldFBhZ2VVUkxGcm9tSWNvblVSTChjb25zdCBX
VEY6OlN0cmluZyYpOworCisgICAgc3RhdGljIHZvaWQgZGlkQ2hhbmdlSWNvbkZvclBhZ2VVUkwo
V0tJY29uRGF0YWJhc2VSZWYsIFdLVVJMUmVmIHBhZ2VVUkwsIGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pOworICAgIFdlYkljb25EYXRhYmFzZSogbV9pY29uRGF0YWJhc2U7CisgICAgcXVpbnQ2NCBt
X2ljb25JRDsKKyAgICBXVEY6Ok11dGV4KiBtX2ltYWdlTG9jazsKK307CisKK30KKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvcXR3ZWJraXQtZXhwb3J0Lm1hcCBiL1NvdXJjZS9xdHdlYmtp
dC1leHBvcnQubWFwCmluZGV4IGE1NDZjYjJmZmU0OWI1YzY4YTkwYzY5YTUwNmY5ZmI4NDE5OTZk
M2IuLjI3ZmMzMzk3NDk3MTIxZWYzNjIzYzc0OTkxMTAzMjQwYzczOTU4N2QgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9xdHdlYmtpdC1leHBvcnQubWFwCisrKyBiL1NvdXJjZS9xdHdlYmtpdC1leHBvcnQu
bWFwCkBAIC0xMDksNiArMTA5LDEyIEBAIHF3a18xLjAgewogICAgICAgICAqUVF1aWNrV2ViVmll
d1ByaXZhdGU7CiAgICAgICAgIG5vbi12aXJ0dWFsP3RodW5rP3RvP1FRdWlja1dlYlZpZXdQcml2
YXRlKjsKICAgICAgICAgUVF1aWNrV2ViVmlld1ByaXZhdGU6Oio7CisgICAgICAgICpRV2ViSWNv
bkltYWdlUHJvdmlkZXI7CisgICAgICAgIG5vbi12aXJ0dWFsP3RodW5rP3RvP1FXZWJJY29uSW1h
Z2VQcm92aWRlcio7CisgICAgICAgIFFXZWJJY29uSW1hZ2VQcm92aWRlcjo6KjsKKyAgICAgICAg
KlF0V2ViSWNvbkRhdGFiYXNlQ2xpZW50OworICAgICAgICBub24tdmlydHVhbD90aHVuaz90bz9R
dFdlYkljb25EYXRhYmFzZUNsaWVudCo7CisgICAgICAgIFF0V2ViSWNvbkRhdGFiYXNlQ2xpZW50
OjoqOwogICAgICAgICAqUVF1aWNrV2ViVmlld1ByaXZhdGVFeHRlbnNpb247CiAgICAgICAgIG5v
bi12aXJ0dWFsP3RodW5rP3RvP1FRdWlja1dlYlZpZXdQcml2YXRlRXh0ZW5zaW9uKjsKICAgICAg
ICAgUVF1aWNrV2ViVmlld1ByaXZhdGVFeHRlbnNpb246Oio7CmRpZmYgLS1naXQgYS9Ub29scy9D
aGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZmIyODE2ZTIyODE5NGRhNzRlZjNkZTRl
MjQ5MzFmMmZmYTFhODQzMy4uMDI1NWExMTEwYjI5NmE0ODNjOTEwOWNhMzg3NDZkYTQ5YTVhZDIw
MCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDIwIEBACisyMDExLTEyLTA2ICBSYWZhZWwgQnJhbmRhbyAgPHJhZmFlbC5sb2JvQG9w
ZW5ib3NzYS5vcmc+CisKKyAgICAgICAgW1F0XVtXSzJdIEltcGxlbWVudCBmYXZpY29uIHN1cHBv
cnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMDgy
CisKKyAgICAgICAgQWRkZWQgYXR0cmlidXRlIHRvIFFRdWlja1dlYlZpZXcgbmFtZWQgImljb24i
IHRoYXQgc2hvdWxkIGJlIHVzZWQKKyAgICAgICAgYXMgc291cmNlIGZvciBRUXVpY2tJbWFnZXMg
aW4gb3JkZXIgdG8gZGlzcGxheSBpdC4gQWxsIGltYWdlcworICAgICAgICBwb2ludGluZyB0byBp
dCB3aWxsIHJlZnJlc2ggd2hlbiB0aGUgaWNvbiBpcyByZWFkeS4gV2UgYWxzbyB1c2UgSURzCisg
ICAgICAgIHRvIG1ha2UgaXQgcG9zc2libGUgdG8gaGFuZGxlIGRpZmZlcmVudCBpY29ucyBmb3Ig
dGhlIHNhbWUgcGFnZSBVUkwKKyAgICAgICAgaW4gZGlmZmVyZW50IHRpbWVzIChpLmUuIGR5bmFt
aWNhbGx5IGNoYW5naW5nIGZhdmljb24pLgorCisgICAgICAgIEl0IHdhcyBhZGRlZCBhbiB1c2Fn
ZSBvZiBmYXZpY29ucyBvbiBNaW5pQnJvd3NlciBhcyBleGFtcGxlLgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTWluaUJyb3dzZXIvcXQvcW1sL0Jy
b3dzZXJXaW5kb3cucW1sOgorCiAyMDExLTEyLTA2ICBBZGFtIFJvYmVuICA8YXJvYmVuQGFwcGxl
LmNvbT4KIAogICAgICAgICBBZGQgYSBwaWQgcGFyYW1ldGVyIHRvIENyYXNoTG9ncy5maW5kX25l
d2VzdF9sb2cKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L3FtbC9Ccm93c2VyV2lu
ZG93LnFtbCBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L3FtbC9Ccm93c2VyV2luZG93LnFtbAppbmRl
eCAwNDgwYTI2NWExZGE3ZDRjOGYzN2EzMmFmZGQ3MGYwYjZjZjlkYWFmLi5mYjE2MTJmZTU3MzVm
MjljZGI0NDA1MmEwYWI2YmRhYzU5NTI2MzljIDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nl
ci9xdC9xbWwvQnJvd3NlcldpbmRvdy5xbWwKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvcW1s
L0Jyb3dzZXJXaW5kb3cucW1sCkBAIC0xODQsNiArMTg0LDE3IEBAIFJlY3RhbmdsZSB7CiAgICAg
ICAgICAgICAgICAgb3BhY2l0eTogMC4zCiAgICAgICAgICAgICAgICAgdmlzaWJsZTogd2ViVmll
dy5sb2FkUHJvZ3Jlc3MgIT0gMTAwCiAgICAgICAgICAgICB9CisgICAgICAgICAgICBJbWFnZSB7
CisgICAgICAgICAgICAgICAgaWQ6IGZhdmljb24KKyAgICAgICAgICAgICAgICBzb3VyY2U6IHdl
YlZpZXcuaWNvbgorICAgICAgICAgICAgICAgIHdpZHRoOiAxNgorICAgICAgICAgICAgICAgIGhl
aWdodDogMTYKKyAgICAgICAgICAgICAgICBhbmNob3JzIHsKKyAgICAgICAgICAgICAgICAgICAg
bGVmdDogcGFyZW50LmxlZnQKKyAgICAgICAgICAgICAgICAgICAgbGVmdE1hcmdpbjogMgorICAg
ICAgICAgICAgICAgICAgICB2ZXJ0aWNhbENlbnRlcjogcGFyZW50LnZlcnRpY2FsQ2VudGVyCisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgVGV4dElucHV0IHsK
ICAgICAgICAgICAgICAgICBpZDogYWRkcmVzc0xpbmUKICAgICAgICAgICAgICAgICBjbGlwOiB0
cnVlCkBAIC0xOTQsNyArMjA1LDcgQEAgUmVjdGFuZ2xlIHsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgYW5jaG9ycyB7CiAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsQ2Vu
dGVyOiBwYXJlbnQudmVydGljYWxDZW50ZXIKLSAgICAgICAgICAgICAgICAgICAgbGVmdDogcGFy
ZW50LmxlZnQKKyAgICAgICAgICAgICAgICAgICAgbGVmdDogZmF2aWNvbi5yaWdodAogICAgICAg
ICAgICAgICAgICAgICByaWdodDogcGFyZW50LnJpZ2h0CiAgICAgICAgICAgICAgICAgICAgIG1h
cmdpbnM6IDYKICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFu
Z2VMb2cKaW5kZXggODBhNmQ3ZTQ1YTRkMGE1ZjAyZTY4Njg1NWNiZjkxMjBhZGZhZDZmNS4uODAx
YmMwY2IyMWVjMDZiZGUxY2JjODJhMzA3ZWE4MTg4ZGU4OTIzMiAxMDA2NDQKLS0tIGEvQ2hhbmdl
TG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDExLTEyLTA2ICBSYWZhZWwg
QnJhbmRhbyAgPHJhZmFlbC5sb2JvQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgW1F0XVtXSzJd
IEltcGxlbWVudCBmYXZpY29uIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTcxMDgyCisKKyAgICAgICAgQWRkZWQgYXR0cmlidXRlIHRvIFFR
dWlja1dlYlZpZXcgbmFtZWQgImljb24iIHRoYXQgc2hvdWxkIGJlIHVzZWQKKyAgICAgICAgYXMg
c291cmNlIGZvciBRUXVpY2tJbWFnZXMgaW4gb3JkZXIgdG8gZGlzcGxheSBpdC4gQWxsIGltYWdl
cworICAgICAgICBwb2ludGluZyB0byBpdCB3aWxsIHJlZnJlc2ggd2hlbiB0aGUgaWNvbiBpcyBy
ZWFkeS4gV2UgYWxzbyB1c2UgSURzCisgICAgICAgIHRvIG1ha2UgaXQgcG9zc2libGUgdG8gaGFu
ZGxlIGRpZmZlcmVudCBpY29ucyBmb3IgdGhlIHNhbWUgcGFnZSBVUkwKKyAgICAgICAgaW4gZGlm
ZmVyZW50IHRpbWVzIChpLmUuIGR5bmFtaWNhbGx5IGNoYW5naW5nIGZhdmljb24pLgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU291cmNlL3F0d2Vi
a2l0LWV4cG9ydC5tYXA6CisKIDIwMTEtMTItMDYgIFNpbW9uIEhhdXNtYW5uICA8c2ltb24uaGF1
c21hbm5Abm9raWEuY29tPgogCiAgICAgICAgIFtRdF0gYnVpbGQtanNjIHNjcmlwdCBkb2Vzbid0
IHdvcmsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118664</attachid>
            <date>2011-12-09 16:40:19 -0800</date>
            <delta_ts>2011-12-16 16:52:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71082-20111209214017.patch</filename>
            <type>text/plain</type>
            <size>33126</size>
            <attacher name="Rafael Brandao">rafael.lobo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyNDU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IGUwYThkN2NjYTg2
MWM1MWEyYWJiNDBjMzVlMjAxMjA0OTU1YTE5NzQuLjRmMmJmY2UxNjFkZTIxOTljMjEwY2E0ZTdl
MTkzYzc0NjhkNDFiODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTEtMTIt
MDkgIFJhZmFlbCBCcmFuZGFvICA8cmFmYWVsLmxvYm9Ab3BlbmJvc3NhLm9yZz4KKworICAgICAg
ICBbUXRdW1dLMl0gSW1wbGVtZW50IGZhdmljb24gc3VwcG9ydAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEwODIKKworICAgICAgICBBZGRlZCBhdHRy
aWJ1dGUgdG8gUVF1aWNrV2ViVmlldyBuYW1lZCAiaWNvbiIgdGhhdCBzaG91bGQgYmUgdXNlZAor
ICAgICAgICBhcyBzb3VyY2UgZm9yIFFRdWlja0ltYWdlcyBpbiBvcmRlciB0byBkaXNwbGF5IGl0
LiBBbGwgaW1hZ2VzCisgICAgICAgIHBvaW50aW5nIHRvIGl0IHdpbGwgcmVmcmVzaCB3aGVuIHRo
ZSBpY29uIGlzIHJlYWR5LiBXZSBhbHNvIHVzZSBJRHMKKyAgICAgICAgdG8gbWFrZSBpdCBwb3Nz
aWJsZSB0byBoYW5kbGUgZGlmZmVyZW50IGljb25zIGZvciB0aGUgc2FtZSBwYWdlIFVSTAorICAg
ICAgICBpbiBkaWZmZXJlbnQgdGltZXMgKGkuZS4gZHluYW1pY2FsbHkgY2hhbmdpbmcgZmF2aWNv
bikuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBk
ZWNsYXJhdGl2ZS9wbHVnaW4uY3BwOgorICAgICAgICAoV2ViS2l0UW1sUGx1Z2luOjppbml0aWFs
aXplRW5naW5lKTogU2V0dXAgZm9yIHRoZSBRRGVjbGFyYXRpdmVJbWFnZVByb3ZpZGVyIHRvIGRp
c3BsYXkgZmF2aWNvbnMuCisgICAgICAgIEl0cyBoYW5kbGVzIHRoZSBmb2xsb3dpbmcgdXJsIGZv
cm1hdDogImltYWdlOi8vd2ViaWNvbi88aWNvbklEPiM8cGFnZVVSTD4iLgorCiAyMDExLTEyLTA4
ICBQaWVycmUgUm9zc2kgIDxwaWVycmUucm9zc2lAZ21haWwuY29tPgogCiAgICAgICAgIERyb3Ag
RU5BQkxFX05PX0xJU1RCT1hfUkVOREVSSU5HLCBhbmQgbWFrZSBpdCBhIHJ1bnRpbWUgZGVjaXNp
b24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKaW5kZXggOWU3ZjA4NTM5ZGRlMWE0YjM5MDNiNjg3ZTlmNGI5MDBjYjVkZDZj
Mi4uNmJlMmE4MTNiMDJkNWNjOTVhYmMwZmYzOWUyMmJiNmRmNTZkNTY4NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDU4IEBACisyMDExLTEyLTA5ICBSYWZhZWwgQnJhbmRhbyAgPHJhZmFlbC5sb2Jv
QG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgW1F0XVtXSzJdIEltcGxlbWVudCBmYXZpY29uIHN1
cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcx
MDgyCisKKyAgICAgICAgQWRkZWQgYXR0cmlidXRlIHRvIFFRdWlja1dlYlZpZXcgbmFtZWQgImlj
b24iIHRoYXQgc2hvdWxkIGJlIHVzZWQKKyAgICAgICAgYXMgc291cmNlIGZvciBRUXVpY2tJbWFn
ZXMgaW4gb3JkZXIgdG8gZGlzcGxheSBpdC4gQWxsIGltYWdlcworICAgICAgICBwb2ludGluZyB0
byBpdCB3aWxsIHJlZnJlc2ggd2hlbiB0aGUgaWNvbiBpcyByZWFkeS4gV2UgYWxzbyB1c2UgSURz
CisgICAgICAgIHRvIG1ha2UgaXQgcG9zc2libGUgdG8gaGFuZGxlIGRpZmZlcmVudCBpY29ucyBm
b3IgdGhlIHNhbWUgcGFnZSBVUkwKKyAgICAgICAgaW4gZGlmZmVyZW50IHRpbWVzIChpLmUuIGR5
bmFtaWNhbGx5IGNoYW5naW5nIGZhdmljb24pLgorICAgICAgICAKKyAgICAgICAgSWNvbkRhdGFi
YXNlIHN0b3JhZ2UgbGllcyBvbiBVSVByb2Nlc3MgYW5kIHRoZSBzeW5jaHJvbm91cyBjYWxsIGZv
cgorICAgICAgICB0aGUgaWNvbiB0aGF0IGhhcHBlbnMgb24gV2ViSWNvbkRhdGFiYXNlIHdvbid0
IG5lZWQgdG8gc2VuZCBhbnkgbWVzc2FnZQorICAgICAgICB0byBXZWJQcm9jZXNzLiBUaGUgcGFy
dCBvZiBJY29uRGF0YWJhc2Ugb24gV2ViUHJvY2VzcyBoYW5kbGVzIHRoZSBkb3dubG9hZAorICAg
ICAgICBvZiB0aGUgcmVzb3VyY2Ugd2hlbmV2ZXIgaXQgaXMgbmVlZGVkLiBUaGVuIHRoZSBjb250
ZW50IGRvd25sb2FkZWQgaXMgc2VudAorICAgICAgICB0aHJvdWdoIElQQyB0byB0aGUgYWN0dWFs
IGRhdGFiYXNlLCBvbiBVSVByb2Nlc3MuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
cXQvcXF1aWNrd2Vidmlldy5jcHA6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6UVF1
aWNrV2ViVmlld1ByaXZhdGUpOgorICAgICAgICAoUVF1aWNrV2ViVmlld1ByaXZhdGU6Ol9xX29u
SWNvbkNoYW5nZWRGb3JQYWdlVVJMKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXc6Omljb24pOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmg6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3BfcC5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvcXQvcXdlYmljb25pbWFnZXByb3ZpZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChRV2Vi
SWNvbkltYWdlUHJvdmlkZXI6OlFXZWJJY29uSW1hZ2VQcm92aWRlcik6CisgICAgICAgIChRV2Vi
SWNvbkltYWdlUHJvdmlkZXI6On5RV2ViSWNvbkltYWdlUHJvdmlkZXIpOgorICAgICAgICAoUVdl
Ykljb25JbWFnZVByb3ZpZGVyOjpyZXF1ZXN0SW1hZ2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvcXQvcXdlYmljb25pbWFnZXByb3ZpZGVyX3AuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9j
ZXNzL1dlYkNvbnRleHQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViSWNvbkRhdGFiYXNlOjpzeW5jaHJvbm91c0ljb25VUkxG
b3JQYWdlVVJMKToKKyAgICAgICAgKFdlYktpdDo6V2ViSWNvbkRhdGFiYXNlOjpzeW5jaHJvbm91
c0ljb25EYXRhS25vd25Gb3JJY29uVVJMKToKKyAgICAgICAgKFdlYktpdDo6V2ViSWNvbkRhdGFi
YXNlOjppbWFnZUZvclBhZ2VVUkwpOiBBZGRlZCBpY29uU2l6ZSBwYXJhbWV0ZXIKKyAgICAgICAg
YW5kIGl0cyBkZWZhdWx0IHZhbHVlIHRvIG5vdCBicmVhayB0aGUgb2xkIHVzYWdlLiBUaGUgc3Vw
cG9ydCBmb3IgbXVsdGlwbGUKKyAgICAgICAgc2l6ZXMgb2YgZmF2aWNvbnMgaXMgc3RpbGwgbWlz
c2luZyBvbiBXZWJDb3JlJ3MgSWNvbkRhdGFiYXNlLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJJ
Y29uRGF0YWJhc2UuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRXZWJDb250ZXh0LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6UXRXZWJDb250ZXh0Ojppbml0aWFsaXplKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvcXQvUXRXZWJDb250ZXh0Lmg6CisgICAgICAgIChXZWJLaXQ6OlF0V2ViQ29udGV4
dDo6aWNvbkRhdGFiYXNlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRXZWJJY29uRGF0YWJh
c2VDbGllbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKHRvUXRXZWJJY29uRGF0YWJhc2VDbGllbnQp
OgorICAgICAgICAoUXRXZWJJY29uRGF0YWJhc2VDbGllbnQ6OlF0V2ViSWNvbkRhdGFiYXNlQ2xp
ZW50KToKKyAgICAgICAgKFF0V2ViSWNvbkRhdGFiYXNlQ2xpZW50Ojp+UXRXZWJJY29uRGF0YWJh
c2VDbGllbnQpOgorICAgICAgICAoUXRXZWJJY29uRGF0YWJhc2VDbGllbnQ6OmRpZENoYW5nZUlj
b25Gb3JQYWdlVVJMKToKKyAgICAgICAgKFF0V2ViSWNvbkRhdGFiYXNlQ2xpZW50OjppY29uSW1h
Z2VGb3JQYWdlVVJMKToKKyAgICAgICAgKFF0V2ViSWNvbkRhdGFiYXNlQ2xpZW50OjppY29uVVJM
SGFzaEZvclBhZ2VVUkwpOgorICAgICAgICAoUXRXZWJJY29uRGF0YWJhc2VDbGllbnQ6OnJlcXVl
c3RJY29uRm9yUGFnZVVSTCk6CisgICAgICAgIChRdFdlYkljb25EYXRhYmFzZUNsaWVudDo6cmV0
YWluSWNvbkZvclBhZ2VVUkwpOgorICAgICAgICAoUXRXZWJJY29uRGF0YWJhc2VDbGllbnQ6OnJl
bGVhc2VJY29uRm9yUGFnZVVSTCk6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0V2ViSWNvbkRh
dGFiYXNlQ2xpZW50Lmg6IEFkZGVkLgorCiAyMDExLTEyLTA4ICBKb2NlbHluIFR1cmNvdHRlICA8
am9jZWx5bi50dXJjb3R0ZUBub2tpYS5jb20+CiAKICAgICAgICAgW1F0XSBVcGRhdGUgV2ViR3Jh
cGhpY0xheWVyJ3MgY2hpbGQgY29udGVudCBzY2FsZSBpbiBhbGwgY2hpbGQgYmluZGluZyBtZXRo
b2QuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL3BsdWdpbi5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL3BsdWdpbi5jcHAKaW5kZXggZDAzOWI4YTk5
OGIyZjA4ZWQ5ZWM5ZWY5Mjg0ZGVlYWIwZjdlMzIwZi4uMGRjZjkzMWY5MDM0YjU0ZDY5YmQ3NjNi
ZWRjMzU1N2Y0YTI5MjUyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9kZWNsYXJhdGl2
ZS9wbHVnaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvcGx1Z2luLmNw
cApAQCAtMjUsOSArMjUsMTEgQEAKICNpZiBkZWZpbmVkKEhBVkVfV0VCS0lUMikKICNpbmNsdWRl
ICJxcXVpY2t3ZWJwYWdlX3AuaCIKICNpbmNsdWRlICJxcXVpY2t3ZWJ2aWV3X3AuaCIKKyNpbmNs
dWRlICJxd2ViaWNvbmltYWdlcHJvdmlkZXJfcC5oIgogI2luY2x1ZGUgInF3ZWJwZXJtaXNzaW9u
cmVxdWVzdF9wLmgiCiAjaW5jbHVkZSAicXdlYnByZWZlcmVuY2VzX3AuaCIKIAorI2luY2x1ZGUg
PFF0RGVjbGFyYXRpdmUvcWRlY2xhcmF0aXZlZW5naW5lLmg+CiAjaW5jbHVkZSA8UXROZXR3b3Jr
L3FuZXR3b3JrcmVwbHkuaD4KICNlbmRpZgogCkBAIC0zNiw2ICszOCwxNCBAQCBRVF9CRUdJTl9O
QU1FU1BBQ0UKIGNsYXNzIFdlYktpdFFtbFBsdWdpbiA6IHB1YmxpYyBRRGVjbGFyYXRpdmVFeHRl
bnNpb25QbHVnaW4gewogICAgIFFfT0JKRUNUCiBwdWJsaWM6CisjaWYgZGVmaW5lZChIQVZFX1dF
QktJVDIpCisgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVFbmdpbmUoUURlY2xhcmF0aXZlRW5n
aW5lKiBlbmdpbmUsIGNvbnN0IGNoYXIqIHVyaSkKKyAgICB7CisgICAgICAgIFFfQVNTRVJUKFFM
YXRpbjFTdHJpbmcodXJpKSA9PSBRTGF0aW4xU3RyaW5nKCJRdFdlYktpdCIpKTsKKyAgICAgICAg
ZW5naW5lLT5hZGRJbWFnZVByb3ZpZGVyKFFMYXRpbjFTdHJpbmcoIndlYmljb24iKSwgbmV3IFFX
ZWJJY29uSW1hZ2VQcm92aWRlcik7CisgICAgfQorI2VuZGlmCisKICAgICB2aXJ0dWFsIHZvaWQg
cmVnaXN0ZXJUeXBlcyhjb25zdCBjaGFyKiB1cmkpCiAgICAgewogICAgICAgICBRX0FTU0VSVChR
TGF0aW4xU3RyaW5nKHVyaSkgPT0gUUxhdGluMVN0cmluZygiUXRXZWJLaXQiKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnBy
aQppbmRleCBhNWQ0YzZkNjU2ZTVlYzhkM2Y2MmI1OTAwNzNmMWZkNjNjYTU1MzZhLi5hZWJiNTFi
YmRkMmRhMjc1MzcwYjBkNjQyMTdkNzZiOWM2Zjg5ZTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKQEAgLTI2OCw2
ICsyNjgsNyBAQCBIRUFERVJTICs9IFwKICAgICBVSVByb2Nlc3MvcXQvUXRTR1RpbGVOb2RlLmgg
XAogICAgIFVJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuaCBcCiAgICAg
VUlQcm9jZXNzL3F0L1F0V2ViVW5kb0NvbW1hbmQuaCBcCisgICAgVUlQcm9jZXNzL3F0L1F0V2Vi
SWNvbkRhdGFiYXNlQ2xpZW50LmggXAogICAgIFVJUHJvY2Vzcy9xdC9XZWJDb250ZXh0TWVudVBy
b3h5UXQuaCBcCiAgICAgVUlQcm9jZXNzL3F0L1dlYkdlb2xvY2F0aW9uUHJvdmlkZXJRdC5oIFwK
ICAgICBVSVByb2Nlc3MvcXQvV2ViUG9wdXBNZW51UHJveHlRdC5oIFwKQEAgLTQ5Nyw2ICs0OTgs
NyBAQCBTT1VSQ0VTICs9IFwKICAgICBVSVByb2Nlc3MvQVBJL3F0L3F3ZWJwZXJtaXNzaW9ucmVx
dWVzdC5jcHAgXAogICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAgXAogICAg
IFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAgXAorICAgIFVJUHJvY2Vzcy9BUEkv
cXQvcXdlYmljb25pbWFnZXByb3ZpZGVyLmNwcCBcCiAgICAgVUlQcm9jZXNzL0FQSS9xdC9xd2Vi
cHJlZmVyZW5jZXMuY3BwIFwKICAgICBVSVByb2Nlc3MvQXV0aGVudGljYXRpb24vQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2VQcm94eS5jcHAgXAogICAgIFVJUHJvY2Vzcy9BdXRoZW50aWNhdGlvbi9B
dXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXIuY3BwIFwKQEAgLTU5OCw2ICs2MDAsNyBAQCBT
T1VSQ0VTICs9IFwKICAgICBVSVByb2Nlc3MvcXQvV2ViUG9wdXBNZW51UHJveHlRdC5jcHAgXAog
ICAgIFVJUHJvY2Vzcy9xdC9XZWJQb3B1cE1lbnVQcm94eVF0RGVza3RvcC5jcHAgXAogICAgIFVJ
UHJvY2Vzcy9xdC9XZWJQcmVmZXJlbmNlc1F0LmNwcCBcCisgICAgVUlQcm9jZXNzL3F0L1F0V2Vi
SWNvbkRhdGFiYXNlQ2xpZW50LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9BcHBsaWNhdGlvbkNhY2hl
L1dlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9BdXRoZW50
aWNhdGlvbi9BdXRoZW50aWNhdGlvbk1hbmFnZXIuY3BwIFwKICAgICBXZWJQcm9jZXNzL0Nvb2tp
ZXMvV2ViQ29va2llTWFuYWdlci5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAKaW5kZXggMzA4NjA0MmE0MjVmNTg0NThlNDhjMjhj
YWZjOGU5MDAxM2Y5M2E2Ny4uZDdjZDg1MThiOWY2MjdmOGFhMWVjZDE1Nzc1MzRjYmYzYjlkMDE3
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2
aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZp
ZXcuY3BwCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAicXF1aWNrd2Vidmlld19wLmgiCiAK
ICNpbmNsdWRlICJRdERpYWxvZ1J1bm5lci5oIgorI2luY2x1ZGUgIlF0V2ViSWNvbkRhdGFiYXNl
Q2xpZW50LmgiCiAjaW5jbHVkZSAiUXRXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJVdGlsc1F0
LmgiCiAjaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCkBAIC0zNiw2ICszNyw3IEBACiAjaW5jbHVk
ZSA8UUlucHV0RGlhbG9nPgogI2luY2x1ZGUgPFF0UXVpY2svUVF1aWNrQ2FudmFzPgogI2luY2x1
ZGUgPFdLT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIAogUVF1aWNrV2ViVmlld1ByaXZhdGU6OlFRdWlja1dlYlZpZXdQcml2YXRlKFFR
dWlja1dlYlZpZXcqIHZpZXdwb3J0LCBXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3Jv
dXBSZWYgcGFnZUdyb3VwUmVmKQogICAgIDogcV9wdHIodmlld3BvcnQpCkBAIC02Miw2ICs2NCwx
MSBAQCBRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6UVF1aWNrV2ViVmlld1ByaXZhdGUoUVF1aWNrV2Vi
Vmlldyogdmlld3BvcnQsIFdLQ29udGV4dFJlZgogICAgIHBhZ2VVSUNsaWVudC5yZXNldChuZXcg
UXRXZWJQYWdlVUlDbGllbnQocGFnZVByb3h5LT5wYWdlUmVmKCksIHFfcHRyKSk7CiAgICAgZXZl
bnRIYW5kbGVyLnJlc2V0KG5ldyBRdFdlYlBhZ2VFdmVudEhhbmRsZXIocGFnZVByb3h5LT5wYWdl
UmVmKCkpKTsKIAorICAgIFJlZlB0cjxRdFdlYkNvbnRleHQ+IGNvbnRleHQgPSBRdFdlYkNvbnRl
eHQ6OmRlZmF1bHRDb250ZXh0KCk7CisgICAgUXRXZWJJY29uRGF0YWJhc2VDbGllbnQqIGljb25E
YXRhYmFzZSA9IGNvbnRleHQtPmljb25EYXRhYmFzZSgpOworICAgIFFPYmplY3Q6OmNvbm5lY3Qo
aWNvbkRhdGFiYXNlLCBTSUdOQUwoaWNvbkNoYW5nZWRGb3JQYWdlVVJMKFFVcmwsIFFVcmwpKSwg
dmlld3BvcnQsIFNMT1QoX3Ffb25JY29uQ2hhbmdlZEZvclBhZ2VVUkwoUVVybCwgUVVybCkpKTsK
KyAgICBRT2JqZWN0Ojpjb25uZWN0KHZpZXdwb3J0LCBTSUdOQUwodXJsQ2hhbmdlZChRVXJsKSks
IGljb25EYXRhYmFzZSwgU0xPVChyZXF1ZXN0SWNvbkZvclBhZ2VVUkwoUVVybCkpKTsKKwogICAg
IC8vIEFueSBwYWdlIHNldHRpbmcgc2hvdWxkIHByZWZlcnJhYmxlIGJlIHNldCBiZWZvcmUgY3Jl
YXRpbmcgdGhlIHBhZ2UsIHNvIHNldCB0aGVtIGhlcmU6CiAgICAgc2V0VXNlVHJhZGl0aW9uYWxE
ZXNrdG9wQmVoYXZpb3VyKGZhbHNlKTsKICAgICBRV2ViUHJlZmVyZW5jZXNQcml2YXRlOjpnZXQo
cGFnZVByb3h5LT5wcmVmZXJlbmNlcygpKS0+c2V0QXR0cmlidXRlKFFXZWJQcmVmZXJlbmNlc1By
aXZhdGU6OkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkLCB0cnVlKTsKQEAgLTE0NSw2ICsx
NTIsMzIgQEAgdm9pZCBRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6ZGlkRmluaXNoRmlyc3ROb25FbXB0
eUxheW91dCgpCiAgICAgfQogfQogCit2b2lkIFFRdWlja1dlYlZpZXdQcml2YXRlOjpfcV9vbklj
b25DaGFuZ2VkRm9yUGFnZVVSTChjb25zdCBRVXJsJiBwYWdlVVJMLCBjb25zdCBRVXJsJiBpY29u
VVJMKQoreworICAgIFFfUShRUXVpY2tXZWJWaWV3KTsKKyAgICBpZiAocS0+dXJsKCkgIT0gcGFn
ZVVSTCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1faWNvblVSTCA9PSBpY29uVVJMKQor
ICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgb2xkUGFnZVVSTCA9IFFVcmw6OmZyb21QZXJj
ZW50RW5jb2RpbmcobV9pY29uVVJMLmVuY29kZWRGcmFnbWVudCgpKTsKKyAgICBTdHJpbmcgbmV3
UGFnZVVSTCA9IFdlYkNvcmU6OktVUkwocGFnZVVSTCkuc3RyaW5nKCk7CisKKyAgICBpZiAob2xk
UGFnZVVSTCAhPSBuZXdQYWdlVVJMKSB7CisgICAgICAgIFJlZlB0cjxRdFdlYkNvbnRleHQ+IGNv
bnRleHQgPSBRdFdlYkNvbnRleHQ6OmRlZmF1bHRDb250ZXh0KCk7CisgICAgICAgIFF0V2ViSWNv
bkRhdGFiYXNlQ2xpZW50KiBpY29uRGF0YWJhc2UgPSBjb250ZXh0LT5pY29uRGF0YWJhc2UoKTsK
KyAgICAgICAgaWYgKCFvbGRQYWdlVVJMLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGljb25EYXRh
YmFzZS0+cmVsZWFzZUljb25Gb3JQYWdlVVJMKG9sZFBhZ2VVUkwpOworCisgICAgICAgIGlmICgh
bmV3UGFnZVVSTC5pc0VtcHR5KCkpCisgICAgICAgICAgICBpY29uRGF0YWJhc2UtPnJldGFpbklj
b25Gb3JQYWdlVVJMKG5ld1BhZ2VVUkwpOworICAgIH0KKworICAgIG1faWNvblVSTCA9IGljb25V
Ukw7CisgICAgZW1pdCBxLT5pY29uQ2hhbmdlZChtX2ljb25VUkwpOworfQorCiB2b2lkIFFRdWlj
a1dlYlZpZXdQcml2YXRlOjpfcV9zdXNwZW5kKCkKIHsKICAgICBwYWdlSXNTdXNwZW5kZWQgPSB0
cnVlOwpAQCAtNTY4LDYgKzYwMSwxMiBAQCBRVXJsIFFRdWlja1dlYlZpZXc6OnVybCgpIGNvbnN0
CiAgICAgcmV0dXJuIGQtPnBhZ2VQcm94eS0+dXJsKCk7CiB9CiAKK1FVcmwgUVF1aWNrV2ViVmll
dzo6aWNvbigpIGNvbnN0Cit7CisgICAgUV9EKGNvbnN0IFFRdWlja1dlYlZpZXcpOworICAgIHJl
dHVybiBkLT5tX2ljb25VUkw7Cit9CisKIGludCBRUXVpY2tXZWJWaWV3Ojpsb2FkUHJvZ3Jlc3Mo
KSBjb25zdAogewogICAgIFFfRChjb25zdCBRUXVpY2tXZWJWaWV3KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcC5oCmluZGV4IDQ1Njc3NzNl
OTAxNWI3OTE3NGFhM2U3OTJkMTI5ZThmNjA0NDdhNTMuLmYwN2U3MDk2YjA5Y2Y5OTQxMDlkMDE5
OTBhNGZhNmY4NjRjMWZmN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvcXF1aWNrd2Vidmlld19wLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaApAQCAtNTAsNiArNTAsNyBAQCBjbGFzcyBRV0VCS0lUX0VY
UE9SVCBRUXVpY2tXZWJWaWV3IDogcHVibGljIFFRdWlja0l0ZW0gewogICAgIFFfT0JKRUNUCiAg
ICAgUV9QUk9QRVJUWShRU3RyaW5nIHRpdGxlIFJFQUQgdGl0bGUgTk9USUZZIHRpdGxlQ2hhbmdl
ZCkKICAgICBRX1BST1BFUlRZKFFVcmwgdXJsIFJFQUQgdXJsIE5PVElGWSB1cmxDaGFuZ2VkKQor
ICAgIFFfUFJPUEVSVFkoUVVybCBpY29uIFJFQUQgaWNvbiBOT1RJRlkgaWNvbkNoYW5nZWQpCiAg
ICAgUV9QUk9QRVJUWShpbnQgbG9hZFByb2dyZXNzIFJFQUQgbG9hZFByb2dyZXNzIE5PVElGWSBs
b2FkUHJvZ3Jlc3NDaGFuZ2VkKQogICAgIFFfUFJPUEVSVFkoYm9vbCBjYW5Hb0JhY2sgUkVBRCBj
YW5Hb0JhY2sgTk9USUZZIG5hdmlnYXRpb25TdGF0ZUNoYW5nZWQgRklOQUwpCiAgICAgUV9QUk9Q
RVJUWShib29sIGNhbkdvRm9yd2FyZCBSRUFEIGNhbkdvRm9yd2FyZCBOT1RJRlkgbmF2aWdhdGlv
blN0YXRlQ2hhbmdlZCBGSU5BTCkKQEAgLTc3LDYgKzc4LDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgflFRdWlja1dlYlZpZXcoKTsKIAogICAgIFFVcmwgdXJsKCkgY29uc3Q7CisgICAgUVVybCBp
Y29uKCkgY29uc3Q7CiAgICAgUVN0cmluZyB0aXRsZSgpIGNvbnN0OwogICAgIGludCBsb2FkUHJv
Z3Jlc3MoKSBjb25zdDsKIApAQCAtMTExLDYgKzExMyw3IEBAIFFfU0lHTkFMUzoKICAgICB2b2lk
IGxvYWRGYWlsZWQoUVF1aWNrV2ViVmlldzo6RXJyb3JUeXBlIGVycm9yVHlwZSwgaW50IGVycm9y
Q29kZSwgY29uc3QgUVVybCYgdXJsKTsKICAgICB2b2lkIGxvYWRQcm9ncmVzc0NoYW5nZWQoaW50
IHByb2dyZXNzKTsKICAgICB2b2lkIHVybENoYW5nZWQoY29uc3QgUVVybCYgdXJsKTsKKyAgICB2
b2lkIGljb25DaGFuZ2VkKGNvbnN0IFFVcmwmIGljb25VUkwpOwogICAgIHZvaWQgbWVzc2FnZVJl
Y2VpdmVkKGNvbnN0IFFWYXJpYW50TWFwJiBtZXNzYWdlKTsKICAgICB2b2lkIGxpbmtIb3ZlcmVk
KGNvbnN0IFFVcmwmIHVybCwgY29uc3QgUVN0cmluZyYgdGl0bGUpOwogICAgIHZvaWQgbmF2aWdh
dGlvblN0YXRlQ2hhbmdlZCgpOwpAQCAtMTM0LDYgKzEzNyw3IEBAIHByaXZhdGU6CiAgICAgUV9Q
UklWQVRFX1NMT1QoZF9mdW5jKCksIHZvaWQgX3Ffb25PcGVuUGFuZWxGaWxlc1NlbGVjdGVkKCkp
OwogICAgIFFfUFJJVkFURV9TTE9UKGRfZnVuYygpLCB2b2lkIF9xX29uT3BlblBhbmVsRmluaXNo
ZWQoaW50IHJlc3VsdCkpOwogICAgIFFfUFJJVkFURV9TTE9UKGRfZnVuYygpLCB2b2lkIF9xX29u
VmlzaWJsZUNoYW5nZWQoKSk7CisgICAgUV9QUklWQVRFX1NMT1QoZF9mdW5jKCksIHZvaWQgX3Ff
b25JY29uQ2hhbmdlZEZvclBhZ2VVUkwoY29uc3QgUVVybCYsIGNvbnN0IFFVcmwmKSk7CiAgICAg
Ly8gSGlkZXMgUU9iamVjdDo6ZF9wdHIgYWxsb3dpbmcgdXMgdG8gdXNlIHRoZSBjb252ZW5pZW5j
ZSBtYWNyb3MuCiAgICAgUVNjb3BlZFBvaW50ZXI8UVF1aWNrV2ViVmlld1ByaXZhdGU+IGRfcHRy
OwogICAgIFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWwqIG1fZXhwZXJpbWVudGFsOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3BfcC5o
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3BfcC5oCmlu
ZGV4IDYzNGU4MDIwODkxNjFlMjllODkxMzAyMDE1NjdjZGVhMTQ4ZWFjNjEuLjM4Y2NhNmVlZjBi
ZGE1NTA4OWNlN2RkZjRmZTgwZDgwNTdmYzYzODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wX3AuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcF9wLmgKQEAgLTc0LDYgKzc0LDcgQEAg
cHVibGljOgogICAgIHZvaWQgX3Ffb25PcGVuUGFuZWxGaWxlc1NlbGVjdGVkKCk7CiAgICAgdm9p
ZCBfcV9vbk9wZW5QYW5lbEZpbmlzaGVkKGludCByZXN1bHQpOwogICAgIHZvaWQgX3Ffb25WaXNp
YmxlQ2hhbmdlZCgpOworICAgIHZvaWQgX3Ffb25JY29uQ2hhbmdlZEZvclBhZ2VVUkwoY29uc3Qg
UVVybCYgcGFnZVVSTCwgY29uc3QgUVVybCYgaWNvblVSTFN0cmluZyk7CiAKICAgICB2b2lkIGNo
b29zZUZpbGVzKFdLT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJSZWYsIGNvbnN0IFFTdHJpbmdMaXN0
JiBzZWxlY3RlZEZpbGVOYW1lcywgUXRXZWJQYWdlVUlDbGllbnQ6OkZpbGVDaG9vc2VyVHlwZSk7
CiAgICAgdm9pZCBydW5KYXZhU2NyaXB0QWxlcnQoY29uc3QgUVN0cmluZyYpOwpAQCAtMTM2LDYg
KzEzNyw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCB1c2VUcmFkaXRpb25hbERlc2t0b3BCZWhhdmlv
dXI7CiAgICAgUUZpbGVEaWFsb2cqIGZpbGVEaWFsb2c7CiAgICAgV0tPcGVuUGFuZWxSZXN1bHRM
aXN0ZW5lclJlZiBvcGVuUGFuZWxSZXN1bHRMaXN0ZW5lcjsKKyAgICBRVXJsIG1faWNvblVSTDsK
IH07CiAKICNlbmRpZiAvLyBxcXVpY2t3ZWJ2aWV3X3BfcF9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJpY29uaW1hZ2Vwcm92aWRlci5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJpY29uaW1hZ2Vwcm92aWRlci5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMjdlNWUxYTEyM2ZlZTNhYzUwOTg1MTIxMDVjMzYxOGY5MjgzZWFmYQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdlYmljb25pbWFn
ZXByb3ZpZGVyLmNwcApAQCAtMCwwICsxLDY0IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAx
MSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicXdlYmljb25pbWFnZXByb3ZpZGVyX3AuaCIKKwor
I2luY2x1ZGUgIlF0V2ViQ29udGV4dC5oIgorI2luY2x1ZGUgIlF0V2ViSWNvbkRhdGFiYXNlQ2xp
ZW50LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJLaXQ7CisKK1FXZWJJY29uSW1hZ2VQcm92aWRlcjo6UVdlYkljb25JbWFnZVByb3ZpZGVy
KCkKKyAgICA6IFFEZWNsYXJhdGl2ZUltYWdlUHJvdmlkZXIoUURlY2xhcmF0aXZlSW1hZ2VQcm92
aWRlcjo6SW1hZ2UpCisgICAgLCBtX2RlZmF1bHRGYXZJY29uKDEsIDEsIFFJbWFnZTo6Rm9ybWF0
X0FSR0I0NDQ0X1ByZW11bHRpcGxpZWQpCit7CisgICAgbV9kZWZhdWx0RmF2SWNvbi5maWxsKFF0
Ojp0cmFuc3BhcmVudCk7Cit9CisKK1FXZWJJY29uSW1hZ2VQcm92aWRlcjo6flFXZWJJY29uSW1h
Z2VQcm92aWRlcigpCit7CisKK30KKworUUltYWdlIFFXZWJJY29uSW1hZ2VQcm92aWRlcjo6cmVx
dWVzdEltYWdlKGNvbnN0IFFTdHJpbmcmIGlkLCBRU2l6ZSogc2l6ZSwgY29uc3QgUVNpemUmIHJl
cXVlc3RlZFNpemUpCit7CisgICAgUmVmUHRyPFF0V2ViQ29udGV4dD4gY29udGV4dCA9IFF0V2Vi
Q29udGV4dDo6ZGVmYXVsdENvbnRleHQoKTsKKyAgICBRdFdlYkljb25EYXRhYmFzZUNsaWVudCog
aWNvbkRhdGFiYXNlID0gY29udGV4dC0+aWNvbkRhdGFiYXNlKCk7CisKKyAgICAvLyBFeHRyYWN0
IHRoZSBlbmNvZGVkIGZyYWdtZW50IGZyb20gc291cmNlIHVybCB3aGljaCBpcyBhbHJlYWR5IHdp
dGhvdXQgc2NoZW1lIGFuZCBob3N0LgorICAgIFFTdHJpbmcgZW5jb2RlZFBhZ2VVUkwoaWQucmln
aHQoaWQuc2l6ZSgpIC0gaWQuaW5kZXhPZignIycpIC0gMSkpOworICAgIFN0cmluZyBwYWdlVVJM
KFFVcmw6OmZyb21QZXJjZW50RW5jb2RpbmcoZW5jb2RlZFBhZ2VVUkwudG9VdGY4KCkpKTsKKwor
ICAgIFFJbWFnZSBpY29uOworICAgIGlmIChpY29uRGF0YWJhc2UpIHsKKyAgICAgICAgaWYgKHJl
cXVlc3RlZFNpemUuaXNWYWxpZCgpKQorICAgICAgICAgICAgaWNvbiA9IGljb25EYXRhYmFzZS0+
aWNvbkltYWdlRm9yUGFnZVVSTChwYWdlVVJMLCByZXF1ZXN0ZWRTaXplKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgaWNvbiA9IGljb25EYXRhYmFzZS0+aWNvbkltYWdlRm9yUGFnZVVSTChw
YWdlVVJMKTsKKyAgICB9CisKKyAgICBpZiAoaWNvbi5pc051bGwoKSkKKyAgICAgICAgaWNvbiA9
IG1fZGVmYXVsdEZhdkljb247CisgICAgaWYgKHNpemUpCisgICAgICAgICpzaXplID0gaWNvbi5z
aXplKCk7CisKKyAgICByZXR1cm4gaWNvbjsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvcXQvcXdlYmljb25pbWFnZXByb3ZpZGVyX3AuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdlYmljb25pbWFnZXByb3ZpZGVyX3AuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li42M2MzN2UwMGJmZTQ3NTMyOGJlNWI4ZTgxNWVjNDc3MTE5MTU5ZGU1Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2ViaWNvbmltYWdlcHJvdmlk
ZXJfcC5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAg
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgcXdl
Ymljb25pbWFnZXByb3ZpZGVyX3BfaAorI2RlZmluZSBxd2ViaWNvbmltYWdlcHJvdmlkZXJfcF9o
CisKKyNpbmNsdWRlICJxd2Via2l0Z2xvYmFsLmgiCisjaW5jbHVkZSA8UXREZWNsYXJhdGl2ZS9R
RGVjbGFyYXRpdmVJbWFnZVByb3ZpZGVyPgorI2luY2x1ZGUgPFF0R3VpL1FJbWFnZT4KKworY2xh
c3MgUVdFQktJVF9FWFBPUlQgUVdlYkljb25JbWFnZVByb3ZpZGVyIDogcHVibGljIFFEZWNsYXJh
dGl2ZUltYWdlUHJvdmlkZXIgeworcHVibGljOgorICAgIFFXZWJJY29uSW1hZ2VQcm92aWRlcigp
OworICAgIH5RV2ViSWNvbkltYWdlUHJvdmlkZXIoKTsKKyAgICBRSW1hZ2UgcmVxdWVzdEltYWdl
KGNvbnN0IFFTdHJpbmcmIGlkLCBRU2l6ZSogc2l6ZSwgY29uc3QgUVNpemUmIHJlcXVlc3RlZFNp
emUpOworCitwcml2YXRlOgorICAgIFFJbWFnZSBtX2RlZmF1bHRGYXZJY29uOworfTsKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuaAppbmRleCA3MDQyODVlZWU3NWZj
MTZjMGI1M2M5ZmJiMGY3NmY1MTMyNGViM2UyLi4yMWYyMTkxNDlhYzkzZTkyNWVlZGE3ZWFlYzVi
MTQ4OWE1ZjliNmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29u
dGV4dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmgKQEAgLTE3
MSw2ICsxNzEsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldERhdGFiYXNlRGlyZWN0b3J5KGNv
bnN0IFN0cmluZyYgZGlyKSB7IG1fb3ZlcnJpZGVEYXRhYmFzZURpcmVjdG9yeSA9IGRpcjsgfQog
ICAgIHZvaWQgc2V0SWNvbkRhdGFiYXNlUGF0aChjb25zdCBTdHJpbmcmKTsKKyAgICBTdHJpbmcg
aWNvbkRhdGFiYXNlUGF0aCgpIGNvbnN0OwogICAgIHZvaWQgc2V0TG9jYWxTdG9yYWdlRGlyZWN0
b3J5KGNvbnN0IFN0cmluZyYgZGlyKSB7IG1fb3ZlcnJpZGVMb2NhbFN0b3JhZ2VEaXJlY3Rvcnkg
PSBkaXI7IH0KIAogICAgIFN0cmluZyBvdmVycmlkZVdlYkluc3BlY3RvckJhc2VEaXJlY3Rvcnko
KSBjb25zdCB7IHJldHVybiBtX292ZXJyaWRlV2ViSW5zcGVjdG9yQmFzZURpcmVjdG9yeTsgfQpA
QCAtMjM2LDcgKzIzNyw2IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIGRhdGFiYXNlRGlyZWN0b3J5
KCkgY29uc3Q7CiAgICAgU3RyaW5nIHBsYXRmb3JtRGVmYXVsdERhdGFiYXNlRGlyZWN0b3J5KCkg
Y29uc3Q7CiAKLSAgICBTdHJpbmcgaWNvbkRhdGFiYXNlUGF0aCgpIGNvbnN0OwogICAgIFN0cmlu
ZyBwbGF0Zm9ybURlZmF1bHRJY29uRGF0YWJhc2VQYXRoKCkgY29uc3Q7CiAKICAgICBTdHJpbmcg
bG9jYWxTdG9yYWdlRGlyZWN0b3J5KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJJY29uRGF0YWJhc2UuY3BwCmluZGV4IDg0MjdjYTM1ZTA4NTNiZGRmY2ZjYmRlNjI0ODM1
ODQxYTM1YmExNDguLjgwMTZjZmJkNmU3ZTFmNzY4YWE4ZDE2YzI1ZWNjN2Y2YjA3OTM1ZmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuY3BwCkBAIC0xMzMs
OSArMTMzLDE0IEBAIHZvaWQgV2ViSWNvbkRhdGFiYXNlOjpzeW5jaHJvbm91c0ljb25EYXRhRm9y
UGFnZVVSTChjb25zdCBTdHJpbmcmLCBDb3JlSVBDOjpEYXRhCiAgICAgaWNvbkRhdGEgPSBDb3Jl
SVBDOjpEYXRhUmVmZXJlbmNlKCk7CiB9CiAKLXZvaWQgV2ViSWNvbkRhdGFiYXNlOjpzeW5jaHJv
bm91c0ljb25VUkxGb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYsIFN0cmluZyYgaWNvblVSTCkKK3Zv
aWQgV2ViSWNvbkRhdGFiYXNlOjpzeW5jaHJvbm91c0ljb25VUkxGb3JQYWdlVVJMKGNvbnN0IFN0
cmluZyYgcGFnZVVSTCwgU3RyaW5nJiBpY29uVVJMKQogewotICAgIGljb25VUkwgPSBTdHJpbmco
KTsKKyAgICBpZiAoIW1faWNvbkRhdGFiYXNlSW1wbCkgeworICAgICAgICBpY29uVVJMID0gU3Ry
aW5nKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpY29uVVJMID0gbV9pY29uRGF0
YWJhc2VJbXBsLT5zeW5jaHJvbm91c0ljb25VUkxGb3JQYWdlVVJMKHBhZ2VVUkwpOwogfQogCiB2
b2lkIFdlYkljb25EYXRhYmFzZTo6c3luY2hyb25vdXNJY29uRGF0YUtub3duRm9ySWNvblVSTChj
b25zdCBTdHJpbmcmLCBib29sJiBpY29uRGF0YUtub3duKSBjb25zdApAQCAtMTc1LDE0ICsxODAs
MTQgQEAgdm9pZCBXZWJJY29uRGF0YWJhc2U6OmdldExvYWREZWNpc2lvbkZvckljb25VUkwoY29u
c3QgU3RyaW5nJiBpY29uVVJMLCB1aW50NjRfdAogICAgIG1fd2ViQ29udGV4dC0+c2VuZFRvQWxs
UHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJJY29uRGF0YWJhc2VQcm94eTo6UmVjZWl2ZWRJY29uTG9h
ZERlY2lzaW9uKChpbnQpZGVjaXNpb24sIGNhbGxiYWNrSUQpKTsKIH0KIAotSW1hZ2UqIFdlYklj
b25EYXRhYmFzZTo6aW1hZ2VGb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYgcGFnZVVSTCkKK0ltYWdl
KiBXZWJJY29uRGF0YWJhc2U6OmltYWdlRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmIHBhZ2VVUkws
IGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGljb25TaXplKQogewogICAgIGlmICghbV93ZWJDb250
ZXh0IHx8ICFtX2ljb25EYXRhYmFzZUltcGwgfHwgIW1faWNvbkRhdGFiYXNlSW1wbC0+aXNPcGVu
KCkgfHwgcGFnZVVSTC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAwOyAgICAKIAogICAgIC8v
IFRoZSBXZWJDb3JlIEljb25EYXRhYmFzZSBpZ25vcmVzIHRoZSBwYXNzZWQgaW4gc2l6ZSBwYXJh
bWV0ZXIuCiAgICAgLy8gSWYgdGhhdCBjaGFuZ2VzIHdlJ2xsIG5lZWQgdG8gcmV0aGluayBob3cg
dGhpcyBBUEkgaXMgZXhwb3NlZC4KLSAgICByZXR1cm4gbV9pY29uRGF0YWJhc2VJbXBsLT5zeW5j
aHJvbm91c0ljb25Gb3JQYWdlVVJMKHBhZ2VVUkwsIFdlYkNvcmU6OkludFNpemUoMzIsIDMyKSk7
CisgICAgcmV0dXJuIG1faWNvbkRhdGFiYXNlSW1wbC0+c3luY2hyb25vdXNJY29uRm9yUGFnZVVS
TChwYWdlVVJMLCBpY29uU2l6ZSk7CiB9CiAKIHZvaWQgV2ViSWNvbkRhdGFiYXNlOjpyZW1vdmVB
bGxJY29ucygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSWNvbkRh
dGFiYXNlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmgKaW5k
ZXggMGMyNDNlZjA4NzIwMjE5YmExMDVkZTRiMWFjNmRkNDc3ZDY4NDlhZC4uYjc0YzIxMDg2NDg1
MTcwMDk2NzM0OTgwZGIxNzA1OWYyY2RlMjgxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJJY29uRGF0YWJhc2UuaApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkNvbm5lY3Rp
b24uaCIKICNpbmNsdWRlICJXZWJJY29uRGF0YWJhc2VDbGllbnQuaCIKICNpbmNsdWRlIDxXZWJD
b3JlL0ljb25EYXRhYmFzZUNsaWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC03Niw3ICs3Nyw3IEBAIHB1YmxpYzoKICAgICAKICAg
ICB2b2lkIGdldExvYWREZWNpc2lvbkZvckljb25VUkwoY29uc3QgU3RyaW5nJiwgdWludDY0X3Qg
Y2FsbGJhY2tJRCk7CiAKLSAgICBXZWJDb3JlOjpJbWFnZSogaW1hZ2VGb3JQYWdlVVJMKGNvbnN0
IFN0cmluZyYpOworICAgIFdlYkNvcmU6OkltYWdlKiBpbWFnZUZvclBhZ2VVUkwoY29uc3QgU3Ry
aW5nJiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgaWNvblNpemUgPSBXZWJDb3JlOjpJbnRTaXpl
KDMyLCAzMikpOwogICAgIAogICAgIHZvaWQgcmVtb3ZlQWxsSWNvbnMoKTsKICAgICB2b2lkIGNo
ZWNrSW50ZWdyaXR5QmVmb3JlT3BlbmluZygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL3F0L1F0V2ViQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
cXQvUXRXZWJDb250ZXh0LmNwcAppbmRleCBhMWZmMWQyMGQxZTBiZTRiMDRiYzUwYmQxNzM3MTkx
NWY1NzAxOGFjLi5iYzMyNjY4NzNlZmM2NDY3NGZhZTM1OTc1MDJmNmRjMjcyZjFiYWY0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJDb250ZXh0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJDb250ZXh0LmNwcApAQCAtMjMsNiAr
MjMsNyBAQAogCiAjaW5jbHVkZSAiTXV0YWJsZUFycmF5LmgiCiAjaW5jbHVkZSAiUXREb3dubG9h
ZE1hbmFnZXIuaCIKKyNpbmNsdWRlICJRdFdlYkljb25EYXRhYmFzZUNsaWVudC5oIgogI2luY2x1
ZGUgIldLQVBJQ2FzdC5oIgogI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJQ
YWdlUHJveHkuaCIKQEAgLTkzLDYgKzk0LDcgQEAgdm9pZCBRdFdlYkNvbnRleHQ6OnBvc3RNZXNz
YWdlVG9OYXZpZ2F0b3JRdE9iamVjdChXZWJQYWdlUHJveHkqIHdlYlBhZ2VQcm94eSwgY28KIHZv
aWQgUXRXZWJDb250ZXh0Ojppbml0aWFsaXplKCkKIHsKICAgICBtX2Rvd25sb2FkTWFuYWdlciA9
IGFkb3B0UHRyKG5ldyBRdERvd25sb2FkTWFuYWdlcihtX2NvbnRleHQuZ2V0KCkpKTsKKyAgICBt
X2ljb25EYXRhYmFzZSA9IGFkb3B0UHRyKG5ldyBRdFdlYkljb25EYXRhYmFzZUNsaWVudChtX2Nv
bnRleHQuZ2V0KCkpKTsKICAgICBpbml0aWFsaXplQ29udGV4dEluamVjdGVkQnVuZGxlQ2xpZW50
KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYkNv
bnRleHQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYkNvbnRleHQuaAppbmRl
eCA5N2NlMjZkNmY5YTIxMjQxZmI3MDU1ZWNhZDliZjBkODQxOWVhNDI5Li5lYWIzZDdjNDc2ODg1
OWFmZmZiY2Y2MmJhZDZiZTE4YjNkYWM2ZjA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvUXRXZWJDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3F0L1F0V2ViQ29udGV4dC5oCkBAIC0zNSw2ICszNSw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewog
CiBjbGFzcyBQYWdlQ2xpZW50OwogY2xhc3MgUXREb3dubG9hZE1hbmFnZXI7CitjbGFzcyBRdFdl
Ykljb25EYXRhYmFzZUNsaWVudDsKIGNsYXNzIFdlYkNvbnRleHQ7CiBjbGFzcyBXZWJQYWdlR3Jv
dXA7CiBjbGFzcyBXZWJQYWdlUHJveHk7CkBAIC00OSw2ICs1MCw3IEBAIHB1YmxpYzoKICAgICBQ
YXNzUmVmUHRyPFdlYlBhZ2VQcm94eT4gY3JlYXRlV2ViUGFnZShQYWdlQ2xpZW50KiwgV2ViUGFn
ZUdyb3VwKik7CiAKICAgICBRdERvd25sb2FkTWFuYWdlciogZG93bmxvYWRNYW5hZ2VyKCkgeyBy
ZXR1cm4gbV9kb3dubG9hZE1hbmFnZXIuZ2V0KCk7IH0KKyAgICBRdFdlYkljb25EYXRhYmFzZUNs
aWVudCogaWNvbkRhdGFiYXNlKCkgeyByZXR1cm4gbV9pY29uRGF0YWJhc2UuZ2V0KCk7IH0KIAog
ICAgIHZvaWQgc2V0TmF2aWdhdG9yUXRPYmplY3RFbmFibGVkKFdlYlBhZ2VQcm94eSosIGJvb2wp
OwogICAgIHZvaWQgcG9zdE1lc3NhZ2VUb05hdmlnYXRvclF0T2JqZWN0KFdlYlBhZ2VQcm94eSos
IGNvbnN0IFFTdHJpbmcmKTsKQEAgLTY2LDYgKzY4LDcgQEAgcHJpdmF0ZToKIAogICAgIFJlZlB0
cjxXZWJDb250ZXh0PiBtX2NvbnRleHQ7CiAgICAgT3duUHRyPFF0RG93bmxvYWRNYW5hZ2VyPiBt
X2Rvd25sb2FkTWFuYWdlcjsKKyAgICBPd25QdHI8UXRXZWJJY29uRGF0YWJhc2VDbGllbnQ+IG1f
aWNvbkRhdGFiYXNlOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L1F0V2ViSWNvbkRhdGFiYXNlQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC9RdFdlYkljb25EYXRhYmFzZUNsaWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTZjNTA5MDQ0
ZTllOGMzN2Q4MzY1M2RmZTIxNDQwZTIyZGRhYTU2ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYkljb25EYXRhYmFzZUNsaWVudC5jcHAKQEAgLTAs
MCArMSwxMTYgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAg
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJRdFdlYkljb25EYXRhYmFzZUNsaWVudC5oIgorCisjaW5jbHVkZSAiSW1hZ2UuaCIK
KyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSAi
VGhyZWFkaW5nLmgiCisjaW5jbHVkZSAiV0tVUkxRdC5oIgorI2luY2x1ZGUgIldlYkNvbnRleHQu
aCIKKyNpbmNsdWRlICJXZWJJY29uRGF0YWJhc2UuaCIKKyNpbmNsdWRlIDxRdENvcmUvUUhhc2g+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJL
aXQ7CisKK3N0YXRpYyBpbmxpbmUgUXRXZWJJY29uRGF0YWJhc2VDbGllbnQqIHRvUXRXZWJJY29u
RGF0YWJhc2VDbGllbnQoY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBBU1NFUlQoY2xp
ZW50SW5mbyk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UXRXZWJJY29uRGF0YWJhc2VD
bGllbnQqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSk7Cit9CisKK1F0V2ViSWNvbkRh
dGFiYXNlQ2xpZW50OjpRdFdlYkljb25EYXRhYmFzZUNsaWVudChXZWJDb250ZXh0KiBjb250ZXh0
KQorICAgIDogbV9pbWFnZUxvY2sobmV3IFdURjo6TXV0ZXgpCit7CisgICAgLy8gRklYTUU6IGEg
c2V0dGVyIHVzaW5nIGl0cyBnZXR0ZXIgbG9va3Mgd3JvbmcgYnV0IHRoZSBmaXJzdCBhY3R1YWxs
eSB0cmlnZ2VyCisgICAgLy8gdGhlIHN0YXJ0dXAgb2YgSWNvbkRhdGFiYXNlLCB0aGlzIGlzIHdo
eSB3ZSBuZWVkIGl0LiBXZSBzaG91bGQgc2VwYXJhdGUgdGhpcyBzZXR1cAorICAgIC8vIGluIGFu
b3RoZXIgZnVuY3Rpb24gZm9yIHRoZSBzYWtlIG9mIGNsYXJpdHkuCisgICAgY29udGV4dC0+c2V0
SWNvbkRhdGFiYXNlUGF0aChjb250ZXh0LT5pY29uRGF0YWJhc2VQYXRoKCkpOworICAgIG1faWNv
bkRhdGFiYXNlID0gY29udGV4dC0+aWNvbkRhdGFiYXNlKCk7CisKKyAgICBXS0ljb25EYXRhYmFz
ZUNsaWVudCBpY29uRGF0YWJhc2VDbGllbnQ7CisgICAgbWVtc2V0KCZpY29uRGF0YWJhc2VDbGll
bnQsIDAsIHNpemVvZihXS0ljb25EYXRhYmFzZUNsaWVudCkpOworICAgIGljb25EYXRhYmFzZUNs
aWVudC52ZXJzaW9uID0ga1dLSWNvbkRhdGFiYXNlQ2xpZW50Q3VycmVudFZlcnNpb247CisgICAg
aWNvbkRhdGFiYXNlQ2xpZW50LmNsaWVudEluZm8gPSB0aGlzOworICAgIGljb25EYXRhYmFzZUNs
aWVudC5kaWRDaGFuZ2VJY29uRm9yUGFnZVVSTCA9IGRpZENoYW5nZUljb25Gb3JQYWdlVVJMOwor
ICAgIFdLSWNvbkRhdGFiYXNlU2V0SWNvbkRhdGFiYXNlQ2xpZW50KHRvQVBJKG1faWNvbkRhdGFi
YXNlKSwgJmljb25EYXRhYmFzZUNsaWVudCk7Cit9CisKK1F0V2ViSWNvbkRhdGFiYXNlQ2xpZW50
Ojp+UXRXZWJJY29uRGF0YWJhc2VDbGllbnQoKQoreworICAgIGRlbGV0ZSBtX2ltYWdlTG9jazsK
KyAgICBtX2ltYWdlTG9jayA9IDA7Cit9CisKK3ZvaWQgUXRXZWJJY29uRGF0YWJhc2VDbGllbnQ6
OmRpZENoYW5nZUljb25Gb3JQYWdlVVJMKFdLSWNvbkRhdGFiYXNlUmVmIGljb25EYXRhYmFzZSwg
V0tVUkxSZWYgcGFnZVVSTCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBRVXJsIHFV
cmwgPSBXS1VSTENvcHlRVXJsKHBhZ2VVUkwpOworICAgIHRvUXRXZWJJY29uRGF0YWJhc2VDbGll
bnQoY2xpZW50SW5mbyktPnJlcXVlc3RJY29uRm9yUGFnZVVSTChxVXJsKTsKK30KKworUUltYWdl
IFF0V2ViSWNvbkRhdGFiYXNlQ2xpZW50OjppY29uSW1hZ2VGb3JQYWdlVVJMKGNvbnN0IFN0cmlu
ZyYgcGFnZVVSTCwgY29uc3QgUVNpemUmIGljb25TaXplKQoreworICAgIFdURjo6TXV0ZXhMb2Nr
ZXIgbG9ja2VyKCptX2ltYWdlTG9jayk7CisKKyAgICBXZWJDb3JlOjpJbnRTaXplIHNpemUoaWNv
blNpemUud2lkdGgoKSwgaWNvblNpemUuaGVpZ2h0KCkpOworICAgIFJlZlB0cjxXZWJDb3JlOjpJ
bWFnZT4gaW1hZ2UgPSBtX2ljb25EYXRhYmFzZS0+aW1hZ2VGb3JQYWdlVVJMKHBhZ2VVUkwsIHNp
emUpOworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybiBRSW1hZ2UoKTsKKworICAgIFFQ
aXhtYXAqIG5hdGl2ZUltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7
CisgICAgaWYgKCFuYXRpdmVJbWFnZSkKKyAgICAgICAgcmV0dXJuIFFJbWFnZSgpOworCisgICAg
cmV0dXJuIG5hdGl2ZUltYWdlLT50b0ltYWdlKCk7Cit9CisKK3Vuc2lnbmVkIFF0V2ViSWNvbkRh
dGFiYXNlQ2xpZW50OjppY29uVVJMSGFzaEZvclBhZ2VVUkwoY29uc3QgV1RGOjpTdHJpbmcmIHBh
Z2VVUkwpCit7CisgICAgU3RyaW5nIGljb25VUkw7CisgICAgbV9pY29uRGF0YWJhc2UtPnN5bmNo
cm9ub3VzSWNvblVSTEZvclBhZ2VVUkwocGFnZVVSTCwgaWNvblVSTCk7CisgICAgcmV0dXJuIFN0
cmluZ0hhc2g6Omhhc2goaWNvblVSTCk7Cit9CisKK3ZvaWQgUXRXZWJJY29uRGF0YWJhc2VDbGll
bnQ6OnJlcXVlc3RJY29uRm9yUGFnZVVSTChjb25zdCBRVXJsJiBwYWdlVVJMKQoreworICAgIFN0
cmluZyBwYWdlVVJMU3RyaW5nID0gV2ViQ29yZTo6S1VSTChwYWdlVVJMKS5zdHJpbmcoKTsKKyAg
ICBpZiAoaWNvbkltYWdlRm9yUGFnZVVSTChwYWdlVVJMU3RyaW5nKS5pc051bGwoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgdW5zaWduZWQgaWNvbklEID0gaWNvblVSTEhhc2hGb3JQYWdlVVJM
KHBhZ2VVUkxTdHJpbmcpOworICAgIFFVcmwgdXJsOworICAgIHVybC5zZXRTY2hlbWUoUVN0cmlu
Z0xpdGVyYWwoImltYWdlIikpOworICAgIHVybC5zZXRIb3N0KFFTdHJpbmdMaXRlcmFsKCJ3ZWJp
Y29uIikpOworICAgIHVybC5zZXRQYXRoKFFTdHJpbmc6Om51bWJlcihpY29uSUQpLnByZXBlbmQo
Jy8nKSk7CisgICAgdXJsLnNldEVuY29kZWRGcmFnbWVudChwYWdlVVJMLnRvRW5jb2RlZCgpKTsK
KyAgICBlbWl0IGljb25DaGFuZ2VkRm9yUGFnZVVSTChwYWdlVVJMLCB1cmwpOworfQorCit2b2lk
IFF0V2ViSWNvbkRhdGFiYXNlQ2xpZW50OjpyZXRhaW5JY29uRm9yUGFnZVVSTChjb25zdCBTdHJp
bmcmIHBhZ2VVUkwpCit7CisgICAgbV9pY29uRGF0YWJhc2UtPnJldGFpbkljb25Gb3JQYWdlVVJM
KHBhZ2VVUkwpOworfQorCit2b2lkIFF0V2ViSWNvbkRhdGFiYXNlQ2xpZW50OjpyZWxlYXNlSWNv
bkZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJiBwYWdlVVJMKQoreworICAgIG1faWNvbkRhdGFiYXNl
LT5yZWxlYXNlSWNvbkZvclBhZ2VVUkwocGFnZVVSTCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJJY29uRGF0YWJhc2VDbGllbnQuaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYkljb25EYXRhYmFzZUNsaWVudC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjhiZTE1YjcwNTdiMmRkYzQxNTdiODRlOGRiMWZhNmY1NTcyNmVlZmMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJJY29uRGF0YWJhc2VDbGllbnQu
aApAQCAtMCwwICsxLDY2IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisKKyNpZm5kZWYgUXRXZWJJ
Y29uRGF0YWJhc2VDbGllbnRfaAorI2RlZmluZSBRdFdlYkljb25EYXRhYmFzZUNsaWVudF9oCisK
KyNpbmNsdWRlICJXS0ljb25EYXRhYmFzZS5oIgorI2luY2x1ZGUgInF3ZWJraXRnbG9iYWwuaCIK
KyNpbmNsdWRlIDxRdENvcmUvUU1hcD4KKyNpbmNsdWRlIDxRdENvcmUvUU9iamVjdD4KKyNpbmNs
dWRlIDxRdENvcmUvUVVybD4KKyNpbmNsdWRlIDxRdEd1aS9RSW1hZ2U+CisKK25hbWVzcGFjZSBX
VEYgeworY2xhc3MgTXV0ZXg7CitjbGFzcyBTdHJpbmc7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQg
eworY2xhc3MgV2ViQ29udGV4dDsKK2NsYXNzIFdlYkljb25EYXRhYmFzZTsKKworY2xhc3MgUXRX
ZWJJY29uRGF0YWJhc2VDbGllbnQgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpFQ1QKKwor
cHVibGljOgorICAgIFF0V2ViSWNvbkRhdGFiYXNlQ2xpZW50KFdlYkNvbnRleHQqKTsKKyAgICB+
UXRXZWJJY29uRGF0YWJhc2VDbGllbnQoKTsKKworICAgIFFJbWFnZSBpY29uSW1hZ2VGb3JQYWdl
VVJMKGNvbnN0IFdURjo6U3RyaW5nJiBwYWdlVVJMLCBjb25zdCBRU2l6ZSYgaWNvblNpemUgPSBR
U2l6ZSgzMiwgMzIpKTsKKyAgICB2b2lkIHJldGFpbkljb25Gb3JQYWdlVVJMKGNvbnN0IFdURjo6
U3RyaW5nJik7CisgICAgdm9pZCByZWxlYXNlSWNvbkZvclBhZ2VVUkwoY29uc3QgV1RGOjpTdHJp
bmcmKTsKKworcHVibGljIFFfU0xPVFM6CisgICAgdm9pZCByZXF1ZXN0SWNvbkZvclBhZ2VVUkwo
Y29uc3QgUVVybCYpOworCitwdWJsaWM6CisgICAgUV9TSUdOQUwgdm9pZCBpY29uQ2hhbmdlZEZv
clBhZ2VVUkwoY29uc3QgUVVybCYgcGFnZVVSTCwgY29uc3QgUVVybCYgaWNvblVSTCk7CisKK3By
aXZhdGU6CisgICAgdW5zaWduZWQgaWNvblVSTEhhc2hGb3JQYWdlVVJMKGNvbnN0IFdURjo6U3Ry
aW5nJik7CisgICAgc3RhdGljIHZvaWQgZGlkQ2hhbmdlSWNvbkZvclBhZ2VVUkwoV0tJY29uRGF0
YWJhc2VSZWYsIFdLVVJMUmVmIHBhZ2VVUkwsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAg
IFdlYkljb25EYXRhYmFzZSogbV9pY29uRGF0YWJhc2U7CisgICAgV1RGOjpNdXRleCogbV9pbWFn
ZUxvY2s7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL3F0d2Via2l0LWV4
cG9ydC5tYXAgYi9Tb3VyY2UvcXR3ZWJraXQtZXhwb3J0Lm1hcAppbmRleCBhNTQ2Y2IyZmZlNDli
NWM2OGE5MGM2OWE1MDZmOWZiODQxOTk2ZDNiLi4yN2ZjMzM5NzQ5NzEyMWVmMzYyM2M3NDk5MTEw
MzI0MGM3Mzk1ODdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvcXR3ZWJraXQtZXhwb3J0Lm1hcAorKysg
Yi9Tb3VyY2UvcXR3ZWJraXQtZXhwb3J0Lm1hcApAQCAtMTA5LDYgKzEwOSwxMiBAQCBxd2tfMS4w
IHsKICAgICAgICAgKlFRdWlja1dlYlZpZXdQcml2YXRlOwogICAgICAgICBub24tdmlydHVhbD90
aHVuaz90bz9RUXVpY2tXZWJWaWV3UHJpdmF0ZSo7CiAgICAgICAgIFFRdWlja1dlYlZpZXdQcml2
YXRlOjoqOworICAgICAgICAqUVdlYkljb25JbWFnZVByb3ZpZGVyOworICAgICAgICBub24tdmly
dHVhbD90aHVuaz90bz9RV2ViSWNvbkltYWdlUHJvdmlkZXIqOworICAgICAgICBRV2ViSWNvbklt
YWdlUHJvdmlkZXI6Oio7CisgICAgICAgICpRdFdlYkljb25EYXRhYmFzZUNsaWVudDsKKyAgICAg
ICAgbm9uLXZpcnR1YWw/dGh1bms/dG8/UXRXZWJJY29uRGF0YWJhc2VDbGllbnQqOworICAgICAg
ICBRdFdlYkljb25EYXRhYmFzZUNsaWVudDo6KjsKICAgICAgICAgKlFRdWlja1dlYlZpZXdQcml2
YXRlRXh0ZW5zaW9uOwogICAgICAgICBub24tdmlydHVhbD90aHVuaz90bz9RUXVpY2tXZWJWaWV3
UHJpdmF0ZUV4dGVuc2lvbio7CiAgICAgICAgIFFRdWlja1dlYlZpZXdQcml2YXRlRXh0ZW5zaW9u
OjoqOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4
IGQ2OTQ1ZDg1YTEwNDE1MTM2ZWZhZDJiYTIwN2Q3ZWY0ZmVkZDJiNzEuLjM3OWRkNTRiZTg5ZWVh
ZGJmYzE1M2YzYmIyNmU2OTgzM2MxYTE1OGIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZwor
KysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMS0xMi0wOSAgUmFmYWVs
IEJyYW5kYW8gIDxyYWZhZWwubG9ib0BvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIFtRdF1bV0sy
XSBJbXBsZW1lbnQgZmF2aWNvbiBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD03MTA4MgorCisgICAgICAgIEFkZGVkIGF0dHJpYnV0ZSB0byBR
UXVpY2tXZWJWaWV3IG5hbWVkICJpY29uIiB0aGF0IHNob3VsZCBiZSB1c2VkCisgICAgICAgIGFz
IHNvdXJjZSBmb3IgUVF1aWNrSW1hZ2VzIGluIG9yZGVyIHRvIGRpc3BsYXkgaXQuIEFsbCBpbWFn
ZXMKKyAgICAgICAgcG9pbnRpbmcgdG8gaXQgd2lsbCByZWZyZXNoIHdoZW4gdGhlIGljb24gaXMg
cmVhZHkuIFdlIGFsc28gdXNlIElEcworICAgICAgICB0byBtYWtlIGl0IHBvc3NpYmxlIHRvIGhh
bmRsZSBkaWZmZXJlbnQgaWNvbnMgZm9yIHRoZSBzYW1lIHBhZ2UgVVJMCisgICAgICAgIGluIGRp
ZmZlcmVudCB0aW1lcyAoaS5lLiBkeW5hbWljYWxseSBjaGFuZ2luZyBmYXZpY29uKS4KKworICAg
ICAgICBJdCB3YXMgYWRkZWQgYW4gdXNhZ2Ugb2YgZmF2aWNvbnMgb24gTWluaUJyb3dzZXIgYXMg
ZXhhbXBsZS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIE1pbmlCcm93c2VyL3F0L3FtbC9Ccm93c2VyV2luZG93LnFtbDoKKwogMjAxMS0xMi0wOSAg
Sm9jZWx5biBUdXJjb3R0ZSAgPGpvY2VseW4udHVyY290dGVAbm9raWEuY29tPgogCiAgICAgICAg
IFtRdF0gUmVtb3ZlIGEgd3JvbmdseSBwbGFjZWQgQVNTRVJULgpkaWZmIC0tZ2l0IGEvVG9vbHMv
TWluaUJyb3dzZXIvcXQvcW1sL0Jyb3dzZXJXaW5kb3cucW1sIGIvVG9vbHMvTWluaUJyb3dzZXIv
cXQvcW1sL0Jyb3dzZXJXaW5kb3cucW1sCmluZGV4IDA0ODBhMjY1YTFkYTdkNGM4ZjM3YTMyYWZk
ZDcwZjBiNmNmOWRhYWYuLmZiMTYxMmZlNTczNWYyOWNkYjQ0MDUyYTBhYjZiZGFjNTk1MjYzOWMg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L3FtbC9Ccm93c2VyV2luZG93LnFtbAor
KysgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvQnJvd3NlcldpbmRvdy5xbWwKQEAgLTE4NCw2
ICsxODQsMTcgQEAgUmVjdGFuZ2xlIHsKICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjMKICAg
ICAgICAgICAgICAgICB2aXNpYmxlOiB3ZWJWaWV3LmxvYWRQcm9ncmVzcyAhPSAxMDAKICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIEltYWdlIHsKKyAgICAgICAgICAgICAgICBpZDogZmF2aWNv
bgorICAgICAgICAgICAgICAgIHNvdXJjZTogd2ViVmlldy5pY29uCisgICAgICAgICAgICAgICAg
d2lkdGg6IDE2CisgICAgICAgICAgICAgICAgaGVpZ2h0OiAxNgorICAgICAgICAgICAgICAgIGFu
Y2hvcnMgeworICAgICAgICAgICAgICAgICAgICBsZWZ0OiBwYXJlbnQubGVmdAorICAgICAgICAg
ICAgICAgICAgICBsZWZ0TWFyZ2luOiAyCisgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsQ2Vu
dGVyOiBwYXJlbnQudmVydGljYWxDZW50ZXIKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBUZXh0SW5wdXQgewogICAgICAgICAgICAgICAgIGlkOiBhZGRyZXNz
TGluZQogICAgICAgICAgICAgICAgIGNsaXA6IHRydWUKQEAgLTE5NCw3ICsyMDUsNyBAQCBSZWN0
YW5nbGUgewogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBhbmNob3JzIHsKICAg
ICAgICAgICAgICAgICAgICAgdmVydGljYWxDZW50ZXI6IHBhcmVudC52ZXJ0aWNhbENlbnRlcgot
ICAgICAgICAgICAgICAgICAgICBsZWZ0OiBwYXJlbnQubGVmdAorICAgICAgICAgICAgICAgICAg
ICBsZWZ0OiBmYXZpY29uLnJpZ2h0CiAgICAgICAgICAgICAgICAgICAgIHJpZ2h0OiBwYXJlbnQu
cmlnaHQKICAgICAgICAgICAgICAgICAgICAgbWFyZ2luczogNgogICAgICAgICAgICAgICAgIH0K
ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA1MTJmNWZjNDRlNzY3ZDBk
YTkwZmM4NjcxODM1MTBkNjY5ZjUwNTM5Li43MDc5MDBkMzU3NjdkNDQzYzM2YmQyOGJkZjFjODQ2
NjgyOTg2MTAwIDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTggQEAKKzIwMTEtMTItMDkgIFJhZmFlbCBCcmFuZGFvICA8cmFmYWVsLmxvYm9Ab3BlbmJv
c3NhLm9yZz4KKworICAgICAgICBbUXRdW1dLMl0gSW1wbGVtZW50IGZhdmljb24gc3VwcG9ydAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEwODIKKwor
ICAgICAgICBBZGRlZCBhdHRyaWJ1dGUgdG8gUVF1aWNrV2ViVmlldyBuYW1lZCAiaWNvbiIgdGhh
dCBzaG91bGQgYmUgdXNlZAorICAgICAgICBhcyBzb3VyY2UgZm9yIFFRdWlja0ltYWdlcyBpbiBv
cmRlciB0byBkaXNwbGF5IGl0LiBBbGwgaW1hZ2VzCisgICAgICAgIHBvaW50aW5nIHRvIGl0IHdp
bGwgcmVmcmVzaCB3aGVuIHRoZSBpY29uIGlzIHJlYWR5LiBXZSBhbHNvIHVzZSBJRHMKKyAgICAg
ICAgdG8gbWFrZSBpdCBwb3NzaWJsZSB0byBoYW5kbGUgZGlmZmVyZW50IGljb25zIGZvciB0aGUg
c2FtZSBwYWdlIFVSTAorICAgICAgICBpbiBkaWZmZXJlbnQgdGltZXMgKGkuZS4gZHluYW1pY2Fs
bHkgY2hhbmdpbmcgZmF2aWNvbikuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBTb3VyY2UvcXR3ZWJraXQtZXhwb3J0Lm1hcDoKKwogMjAxMS0xMi0w
OSAgSm9vbmUgSHVyICA8am9vbmUuaHVyQGNvbGxhYm9yYS5jby51az4KIAogICAgICAgICBbR1RL
XSBJbml0aWFsIGltcGxlbWVudGF0aW9uIG9mIEFjY2VsZXJhdGVkIENvbXBvc2l0aW5nIHVzaW5n
IENsdXR0ZXIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119700</attachid>
            <date>2011-12-16 16:52:35 -0800</date>
            <delta_ts>2011-12-19 17:04:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71082-20111216215231.patch</filename>
            <type>text/plain</type>
            <size>35436</size>
            <attacher name="Rafael Brandao">rafael.lobo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzMTE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IDY3YzNhZGFlZmE1
OGZiYzY5NTgyOWJmZmIyMjc3Nzg4ZGNjZjljNjIuLjgwZGIwYjI1MjIyMGE1NWFkNzZkNWU0ZjUw
Yzc5NmRiZWYxMjIxNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMTIt
MTYgIFJhZmFlbCBCcmFuZGFvICA8cmFmYWVsLmxvYm9Ab3BlbmJvc3NhLm9yZz4KKworICAgICAg
ICBbUXRdW1dLMl0gSW1wbGVtZW50IGZhdmljb24gc3VwcG9ydAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEwODIKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGRlY2xhcmF0aXZlL3BsdWdpbi5jcHA6Cisg
ICAgICAgIChXZWJLaXRRbWxQbHVnaW46OmluaXRpYWxpemVFbmdpbmUpOiBTZXR1cCBmb3IgdGhl
IFFEZWNsYXJhdGl2ZUltYWdlUHJvdmlkZXIgdG8gZGlzcGxheSBmYXZpY29ucy4KKyAgICAgICAg
SXRzIGhhbmRsZXMgdGhlIGZvbGxvd2luZyB1cmwgZm9ybWF0OiAiaW1hZ2U6Ly93ZWJpY29uLzxp
Y29uSUQ+IzxwYWdlVVJMPiIuCisKIDIwMTEtMTItMTYgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0
Lm9yZz4KIAogICAgICAgICBHaXZlIFBsYXRmb3JtRXZlbnRzIGEgYmFzZSBjbGFzcwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CmluZGV4IGQyY2Q1OTY0NmI4ZjFjMWUwMTE3NjZmNjA3OGE5NzU4OTZiNTcyYzguLjFjNDJmZWM1
ZGE1OWRlMDgyYWVlNzVhNjllOTcxZTkwYmU3NDkwYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2
MCBAQAorMjAxMS0xMi0xNiAgUmFmYWVsIEJyYW5kYW8gIDxyYWZhZWwubG9ib0BvcGVuYm9zc2Eu
b3JnPgorCisgICAgICAgIFtRdF1bV0syXSBJbXBsZW1lbnQgZmF2aWNvbiBzdXBwb3J0CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTA4MgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGF0dHJpYnV0
ZSB0byBRUXVpY2tXZWJWaWV3IG5hbWVkICJpY29uIiB0aGF0IHNob3VsZCBiZSB1c2VkCisgICAg
ICAgIGFzIHNvdXJjZSBmb3IgUVF1aWNrSW1hZ2UgaW4gb3JkZXIgdG8gZGlzcGxheSBpdC4gQWxs
IGltYWdlcworICAgICAgICBwb2ludGluZyB0byBpdCB3aWxsIHJlZnJlc2ggd2hlbiB0aGUgaWNv
biBpcyByZWFkeS4gV2UgYWxzbyB1c2UgSURzCisgICAgICAgIHRvIG1ha2UgaXQgcG9zc2libGUg
dG8gaGFuZGxlIGRpZmZlcmVudCBpY29ucyBmb3IgdGhlIHNhbWUgcGFnZSBVUkwKKyAgICAgICAg
YXQgZGlmZmVyZW50IHRpbWVzIChpLmUuIGR5bmFtaWNhbGx5IGNoYW5naW5nIGZhdmljb24pLgor
CisgICAgICAgIEljb25EYXRhYmFzZSBzdG9yYWdlIGxpZXMgb24gVUlQcm9jZXNzIGFuZCB0aGUg
c3luY2hyb25vdXMgY2FsbCBmb3IKKyAgICAgICAgdGhlIGljb24gdGhhdCBoYXBwZW5zIG9uIFdl
Ykljb25EYXRhYmFzZSB3b24ndCBuZWVkIHRvIHNlbmQgYW55IG1lc3NhZ2UKKyAgICAgICAgdG8g
V2ViUHJvY2Vzcy4gVGhlIHBhcnQgb2YgSWNvbkRhdGFiYXNlIG9uIFdlYlByb2Nlc3MgaGFuZGxl
cyB0aGUgZG93bmxvYWQKKyAgICAgICAgb2YgdGhlIHJlc291cmNlIHdoZW5ldmVyIGl0IGlzIG5l
ZWRlZC4gVGhlbiB0aGUgY29udGVudCBkb3dubG9hZGVkIGlzIHNlbnQKKyAgICAgICAgdGhyb3Vn
aCBJUEMgdG8gdGhlIGFjdHVhbCBkYXRhYmFzZSwgb24gVUlQcm9jZXNzLgorCisgICAgICAgICog
VGFyZ2V0LnByaToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3Bw
OgorICAgICAgICAoUVF1aWNrV2ViVmlld1ByaXZhdGU6OmluaXRpYWxpemUpOgorICAgICAgICAo
UVF1aWNrV2ViVmlld1ByaXZhdGU6Ol9xX29uSWNvbkNoYW5nZWRGb3JQYWdlVVJMKToKKyAgICAg
ICAgKFFRdWlja1dlYlZpZXdQcml2YXRlOjpzZXRJY29uKToKKyAgICAgICAgKFFRdWlja1dlYlZp
ZXc6Omljb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmg6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3BfcC5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXdlYmljb25pbWFnZXByb3ZpZGVyLmNwcDogQWRkZWQuCisg
ICAgICAgIChRV2ViSWNvbkltYWdlUHJvdmlkZXI6OlFXZWJJY29uSW1hZ2VQcm92aWRlcik6Cisg
ICAgICAgIChRV2ViSWNvbkltYWdlUHJvdmlkZXI6On5RV2ViSWNvbkltYWdlUHJvdmlkZXIpOgor
ICAgICAgICAoUVdlYkljb25JbWFnZVByb3ZpZGVyOjpyZXF1ZXN0SW1hZ2UpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvcXQvcXdlYmljb25pbWFnZXByb3ZpZGVyX3AuaDogQWRkZWQuCisgICAg
ICAgICogVUlQcm9jZXNzL1dlYkNvbnRleHQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViSWNv
bkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSWNvbkRhdGFiYXNlOjpzeW5jaHJv
bm91c0ljb25VUkxGb3JQYWdlVVJMKToKKyAgICAgICAgKFdlYktpdDo6V2ViSWNvbkRhdGFiYXNl
OjppbWFnZUZvclBhZ2VVUkwpOiBBZGRlZCBpY29uU2l6ZSBwYXJhbWV0ZXIKKyAgICAgICAgYW5k
IGEgZGVmYXVsdCB2YWx1ZSBmb3IgaXQgdG8gbm90IGJyZWFrIHRoZSBvbGQgdXNhZ2UuIFRoZSBz
dXBwb3J0IGZvcgorICAgICAgICBtdWx0aXBsZSBzaXplcyBvZiBmYXZpY29ucyBpcyBzdGlsbCBt
aXNzaW5nIG9uIFdlYkNvcmUuCisgICAgICAgICogVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFdlYkNvbnRleHQuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpRdFdlYkNvbnRleHQ6OmluaXRpYWxpemUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9R
dFdlYkNvbnRleHQuaDoKKyAgICAgICAgKFdlYktpdDo6UXRXZWJDb250ZXh0OjppY29uRGF0YWJh
c2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFdlYkljb25EYXRhYmFzZUNsaWVudC5jcHA6
IEFkZGVkLgorICAgICAgICAodG9RdFdlYkljb25EYXRhYmFzZUNsaWVudCk6CisgICAgICAgIChR
dFdlYkljb25EYXRhYmFzZUNsaWVudDo6UXRXZWJJY29uRGF0YWJhc2VDbGllbnQpOgorICAgICAg
ICAoUXRXZWJJY29uRGF0YWJhc2VDbGllbnQ6On5RdFdlYkljb25EYXRhYmFzZUNsaWVudCk6Cisg
ICAgICAgIChRdFdlYkljb25EYXRhYmFzZUNsaWVudDo6ZGlkQ2hhbmdlSWNvbkZvclBhZ2VVUkwp
OgorICAgICAgICAoUXRXZWJJY29uRGF0YWJhc2VDbGllbnQ6Omljb25JbWFnZUZvclBhZ2VVUkwp
OgorICAgICAgICAoUXRXZWJJY29uRGF0YWJhc2VDbGllbnQ6Omljb25VUkxIYXNoRm9yUGFnZVVS
TCk6CisgICAgICAgIChRdFdlYkljb25EYXRhYmFzZUNsaWVudDo6cmVxdWVzdEljb25Gb3JQYWdl
VVJMKToKKyAgICAgICAgKFF0V2ViSWNvbkRhdGFiYXNlQ2xpZW50OjpyZXRhaW5JY29uRm9yUGFn
ZVVSTCk6CisgICAgICAgIChRdFdlYkljb25EYXRhYmFzZUNsaWVudDo6cmVsZWFzZUljb25Gb3JQ
YWdlVVJMKToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRXZWJJY29uRGF0YWJhc2VDbGllbnQu
aDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0V2ViUGFnZUxvYWRDbGllbnQuY3Bw
OgorICAgICAgICAoUXRXZWJQYWdlTG9hZENsaWVudDo6ZGlkU3RhcnRQcm9ncmVzcyk6CisKIDIw
MTEtMTItMTYgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAg
ICBBZGQgYSBwcmV0dHkgZHVtYiB0aWxlIGNhY2hlIHRvIFdlYlRpbGVDYWNoZUxheWVyCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL3BsdWdpbi5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L3F0L2RlY2xhcmF0aXZlL3BsdWdpbi5jcHAKaW5kZXggYmFmYmI1OTQxYzJkYzVjYTk5
ZDM4YWM4ODVhMzEzODQxYTY3YTgwOC4uNjQ2MzhlNDY5NzZiNTkzMzJkNDVlOTI2YjU3MTc4ODNj
NjljOGNhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9wbHVnaW4u
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvcGx1Z2luLmNwcApAQCAtMjUs
MTAgKzI1LDEyIEBACiAjaWYgZGVmaW5lZChIQVZFX1dFQktJVDIpCiAjaW5jbHVkZSAicXF1aWNr
d2VicGFnZV9wLmgiCiAjaW5jbHVkZSAicXF1aWNrd2Vidmlld19wLmgiCisjaW5jbHVkZSAicXdl
Ymljb25pbWFnZXByb3ZpZGVyX3AuaCIKICNpbmNsdWRlICJxd2VibmF2aWdhdGlvbnJlcXVlc3Rf
cC5oIgogI2luY2x1ZGUgInF3ZWJwZXJtaXNzaW9ucmVxdWVzdF9wLmgiCiAjaW5jbHVkZSAicXdl
YnByZWZlcmVuY2VzX3AuaCIKIAorI2luY2x1ZGUgPFF0RGVjbGFyYXRpdmUvcWRlY2xhcmF0aXZl
ZW5naW5lLmg+CiAjaW5jbHVkZSA8UXROZXR3b3JrL3FuZXR3b3JrcmVwbHkuaD4KICNlbmRpZgog
CkBAIC0zNyw2ICszOSwxNCBAQCBRVF9CRUdJTl9OQU1FU1BBQ0UKIGNsYXNzIFdlYktpdFFtbFBs
dWdpbiA6IHB1YmxpYyBRRGVjbGFyYXRpdmVFeHRlbnNpb25QbHVnaW4gewogICAgIFFfT0JKRUNU
CiBwdWJsaWM6CisjaWYgZGVmaW5lZChIQVZFX1dFQktJVDIpCisgICAgdmlydHVhbCB2b2lkIGlu
aXRpYWxpemVFbmdpbmUoUURlY2xhcmF0aXZlRW5naW5lKiBlbmdpbmUsIGNvbnN0IGNoYXIqIHVy
aSkKKyAgICB7CisgICAgICAgIFFfQVNTRVJUKFFMYXRpbjFTdHJpbmcodXJpKSA9PSBRTGF0aW4x
U3RyaW5nKCJRdFdlYktpdCIpKTsKKyAgICAgICAgZW5naW5lLT5hZGRJbWFnZVByb3ZpZGVyKFFM
YXRpbjFTdHJpbmcoIndlYmljb24iKSwgbmV3IFFXZWJJY29uSW1hZ2VQcm92aWRlcik7CisgICAg
fQorI2VuZGlmCisKICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJUeXBlcyhjb25zdCBjaGFyKiB1
cmkpCiAgICAgewogICAgICAgICBRX0FTU0VSVChRTGF0aW4xU3RyaW5nKHVyaSkgPT0gUUxhdGlu
MVN0cmluZygiUXRXZWJLaXQiKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQu
cHJpIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQppbmRleCBjZjE1ZGNmYTg2NjIyMDcyMDg3
MGNlMjA0YmY4ODVkZmFhNzJiOWVlLi4yNjFiZGQ0MDRiNzVhMzMyYjBhNmMyNDFjODkxZmM4NmU4
ZDUxY2IzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1RhcmdldC5wcmkKQEAgLTI3Miw2ICsyNzIsNyBAQCBIRUFERVJTICs9IFwKICAg
ICBVSVByb2Nlc3MvcXQvUXRTR1RpbGVOb2RlLmggXAogICAgIFVJUHJvY2Vzcy9xdC9RdFZpZXdw
b3J0SW50ZXJhY3Rpb25FbmdpbmUuaCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0V2ViVW5kb0NvbnRy
b2xsZXIuaCBcCisgICAgVUlQcm9jZXNzL3F0L1F0V2ViSWNvbkRhdGFiYXNlQ2xpZW50LmggXAog
ICAgIFVJUHJvY2Vzcy9xdC9XZWJDb250ZXh0TWVudVByb3h5UXQuaCBcCiAgICAgVUlQcm9jZXNz
L3F0L1dlYkdlb2xvY2F0aW9uUHJvdmlkZXJRdC5oIFwKICAgICBVSVByb2Nlc3MvcXQvV2ViUG9w
dXBNZW51UHJveHlRdC5oIFwKQEAgLTUwMyw2ICs1MDQsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBV
SVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwIFwKICAgICBVSVByb2Nlc3MvQVBJL3F0
L3F3ZWJuYXZpZ2F0aW9uaGlzdG9yeS5jcHAgXAogICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNr
d2Vidmlldy5jcHAgXAorICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXdlYmljb25pbWFnZXByb3ZpZGVy
LmNwcCBcCiAgICAgVUlQcm9jZXNzL0FQSS9xdC9xd2VicHJlZmVyZW5jZXMuY3BwIFwKICAgICBV
SVByb2Nlc3MvQVBJL3F0L3F3ZWJ2aWV3cG9ydGluZm8uY3BwIFwKICAgICBVSVByb2Nlc3MvQXV0
aGVudGljYXRpb24vQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5jcHAgXApAQCAtNjAzLDYg
KzYwNSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFVJUHJvY2Vzcy9xdC9XZWJQYWdlUHJveHlRdC5j
cHAgXAogICAgIFVJUHJvY2Vzcy9xdC9XZWJQb3B1cE1lbnVQcm94eVF0LmNwcCBcCiAgICAgVUlQ
cm9jZXNzL3F0L1dlYlByZWZlcmVuY2VzUXQuY3BwIFwKKyAgICBVSVByb2Nlc3MvcXQvUXRXZWJJ
Y29uRGF0YWJhc2VDbGllbnQuY3BwIFwKICAgICBXZWJQcm9jZXNzL0FwcGxpY2F0aW9uQ2FjaGUv
V2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuY3BwIFwKICAgICBXZWJQcm9jZXNzL0F1dGhlbnRp
Y2F0aW9uL0F1dGhlbnRpY2F0aW9uTWFuYWdlci5jcHAgXAogICAgIFdlYlByb2Nlc3MvQ29va2ll
cy9XZWJDb29raWVNYW5hZ2VyLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcAppbmRleCBhYTc0NGMyMGRkYmNiNDk4MDJjNDhiZjA5
MzhmM2NkNzdiYjg1ZWQxLi43MzY4MTczZDU5NGU5M2VkMjg5OTExYTc4YzhlOWM5NTU1ZmFlYzAx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZp
ZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmll
dy5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJRdERpYWxvZ1J1bm5lci5oIgogI2lu
Y2x1ZGUgIlF0RG93bmxvYWRNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiUXRXZWJDb250ZXh0LmgiCisj
aW5jbHVkZSAiUXRXZWJJY29uRGF0YWJhc2VDbGllbnQuaCIKICNpbmNsdWRlICJRdFdlYlBhZ2VF
dmVudEhhbmRsZXIuaCIKICNpbmNsdWRlICJVdGlsc1F0LmgiCiAjaW5jbHVkZSAiV2ViQmFja0Zv
cndhcmRMaXN0LmgiCkBAIC00Niw2ICs0Nyw3IEBACiAjaW5jbHVkZSA8UUZpbGVEaWFsb2c+CiAj
aW5jbHVkZSA8UXRRdWljay9RUXVpY2tDYW52YXM+CiAjaW5jbHVkZSA8V0tPcGVuUGFuZWxSZXN1
bHRMaXN0ZW5lci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBRUXVpY2tX
ZWJWaWV3UHJpdmF0ZTo6UVF1aWNrV2ViVmlld1ByaXZhdGUoUVF1aWNrV2ViVmlldyogdmlld3Bv
cnQpCiAgICAgOiBxX3B0cih2aWV3cG9ydCkKQEAgLTg0LDYgKzg2LDExIEBAIHZvaWQgUVF1aWNr
V2ViVmlld1ByaXZhdGU6OmluaXRpYWxpemUoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFn
ZUdyb3VwUmVmIHBhCiAgICAgcGFnZVVJQ2xpZW50LnJlc2V0KG5ldyBRdFdlYlBhZ2VVSUNsaWVu
dCh0b0FQSSh3ZWJQYWdlUHJveHkuZ2V0KCkpLCBxX3B0cikpOwogICAgIG5hdmlnYXRpb25IaXN0
b3J5ID0gYWRvcHRQdHIoUVdlYk5hdmlnYXRpb25IaXN0b3J5UHJpdmF0ZTo6Y3JlYXRlSGlzdG9y
eSh0b0FQSSh3ZWJQYWdlUHJveHkuZ2V0KCkpKSk7CiAKKyAgICBSZWZQdHI8UXRXZWJDb250ZXh0
PiBjb250ZXh0ID0gUXRXZWJDb250ZXh0OjpkZWZhdWx0Q29udGV4dCgpOworICAgIFF0V2ViSWNv
bkRhdGFiYXNlQ2xpZW50KiBpY29uRGF0YWJhc2UgPSBjb250ZXh0LT5pY29uRGF0YWJhc2UoKTsK
KyAgICBRT2JqZWN0Ojpjb25uZWN0KGljb25EYXRhYmFzZSwgU0lHTkFMKGljb25DaGFuZ2VkRm9y
UGFnZVVSTChRVXJsLCBRVXJsKSksIHFfcHRyLCBTTE9UKF9xX29uSWNvbkNoYW5nZWRGb3JQYWdl
VVJMKFFVcmwsIFFVcmwpKSk7CisgICAgUU9iamVjdDo6Y29ubmVjdChxX3B0ciwgU0lHTkFMKHVy
bENoYW5nZWQoUVVybCkpLCBpY29uRGF0YWJhc2UsIFNMT1QocmVxdWVzdEljb25Gb3JQYWdlVVJM
KFFVcmwpKSk7CisKICAgICAvLyBBbnkgcGFnZSBzZXR0aW5nIHNob3VsZCBwcmVmZXJyYWJsZSBi
ZSBzZXQgYmVmb3JlIGNyZWF0aW5nIHRoZSBwYWdlLgogICAgIHNldFVzZVRyYWRpdGlvbmFsRGVz
a3RvcEJlaGF2aW91cihmYWxzZSk7CiAgICAgd2ViUGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJl
ZmVyZW5jZXMoKS0+c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQodHJ1ZSk7CkBAIC0x
NTgsNiArMTY1LDE1IEBAIHZvaWQgUVF1aWNrV2ViVmlld1ByaXZhdGU6OmRpZEZpbmlzaEZpcnN0
Tm9uRW1wdHlMYXlvdXQoKQogICAgIH0KIH0KIAordm9pZCBRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6
X3Ffb25JY29uQ2hhbmdlZEZvclBhZ2VVUkwoY29uc3QgUVVybCYgcGFnZVVSTCwgY29uc3QgUVVy
bCYgaWNvblVSTCkKK3sKKyAgICBRX1EoUVF1aWNrV2ViVmlldyk7CisgICAgaWYgKHEtPnVybCgp
ICE9IHBhZ2VVUkwpCisgICAgICAgIHJldHVybjsKKworICAgIHNldEljb24oaWNvblVSTCk7Cit9
CisKIHZvaWQgUVF1aWNrV2ViVmlld1ByaXZhdGU6Ol9xX3N1c3BlbmQoKQogewogICAgIHBhZ2VJ
c1N1c3BlbmRlZCA9IHRydWU7CkBAIC00OTUsNiArNTExLDI5IEBAIHZvaWQgUVF1aWNrV2ViVmll
d1ByaXZhdGU6OnNldFZpZXdJbkF0dGFjaGVkUHJvcGVydGllcyhRT2JqZWN0KiBvYmplY3QpCiAg
ICAgYXR0YWNoZWQtPnNldFZpZXcocSk7CiB9CiAKK3ZvaWQgUVF1aWNrV2ViVmlld1ByaXZhdGU6
OnNldEljb24oY29uc3QgUVVybCYgaWNvblVSTCkKK3sKKyAgICBRX1EoUVF1aWNrV2ViVmlldyk7
CisgICAgaWYgKG1faWNvblVSTCA9PSBpY29uVVJMKQorICAgICAgICByZXR1cm47CisKKyAgICBT
dHJpbmcgb2xkUGFnZVVSTCA9IFFVcmw6OmZyb21QZXJjZW50RW5jb2RpbmcobV9pY29uVVJMLmVu
Y29kZWRGcmFnbWVudCgpKTsKKyAgICBTdHJpbmcgbmV3UGFnZVVSTCA9IFdlYkNvcmU6OktVUkwo
cS0+dXJsKCkpLnN0cmluZygpOworCisgICAgaWYgKG9sZFBhZ2VVUkwgIT0gbmV3UGFnZVVSTCkg
eworICAgICAgICBSZWZQdHI8UXRXZWJDb250ZXh0PiBjb250ZXh0ID0gUXRXZWJDb250ZXh0Ojpk
ZWZhdWx0Q29udGV4dCgpOworICAgICAgICBRdFdlYkljb25EYXRhYmFzZUNsaWVudCogaWNvbkRh
dGFiYXNlID0gY29udGV4dC0+aWNvbkRhdGFiYXNlKCk7CisgICAgICAgIGlmICghb2xkUGFnZVVS
TC5pc0VtcHR5KCkpCisgICAgICAgICAgICBpY29uRGF0YWJhc2UtPnJlbGVhc2VJY29uRm9yUGFn
ZVVSTChvbGRQYWdlVVJMKTsKKworICAgICAgICBpZiAoIW5ld1BhZ2VVUkwuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgaWNvbkRhdGFiYXNlLT5yZXRhaW5JY29uRm9yUGFnZVVSTChuZXdQYWdlVVJM
KTsKKyAgICB9CisKKyAgICBtX2ljb25VUkwgPSBpY29uVVJMOworICAgIGVtaXQgcS0+aWNvbkNo
YW5nZWQobV9pY29uVVJMKTsKK30KKwogYm9vbCBRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6bmF2aWdh
dG9yUXRPYmplY3RFbmFibGVkKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9uYXZpZ2F0b3JRdE9i
amVjdEVuYWJsZWQ7CkBAIC03NDQsNiArNzgzLDEyIEBAIFFVcmwgUVF1aWNrV2ViVmlldzo6dXJs
KCkgY29uc3QKICAgICByZXR1cm4gUVVybChRU3RyaW5nKG1haW5GcmFtZS0+dXJsKCkpKTsKIH0K
IAorUVVybCBRUXVpY2tXZWJWaWV3OjppY29uKCkgY29uc3QKK3sKKyAgICBRX0QoY29uc3QgUVF1
aWNrV2ViVmlldyk7CisgICAgcmV0dXJuIGQtPm1faWNvblVSTDsKK30KKwogaW50IFFRdWlja1dl
YlZpZXc6OmxvYWRQcm9ncmVzcygpIGNvbnN0CiB7CiAgICAgUV9EKGNvbnN0IFFRdWlja1dlYlZp
ZXcpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3
ZWJ2aWV3X3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmll
d19wLmgKaW5kZXggZTQ0ODQzNzQzNjc1ZTRhMmY3MGE5M2ViYWU1YjQzYTdkNmM2YzQ2Yi4uYmUx
ZmY3MzZkMjFmN2NjMjVmMjkxNTVjZWQyNWNhNzc3MWNmNmYxMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcC5oCkBAIC01Myw2ICs1Myw3
IEBAIGNsYXNzIFFXRUJLSVRfRVhQT1JUIFFRdWlja1dlYlZpZXcgOiBwdWJsaWMgUVF1aWNrSXRl
bSB7CiAgICAgUV9PQkpFQ1QKICAgICBRX1BST1BFUlRZKFFTdHJpbmcgdGl0bGUgUkVBRCB0aXRs
ZSBOT1RJRlkgdGl0bGVDaGFuZ2VkKQogICAgIFFfUFJPUEVSVFkoUVVybCB1cmwgUkVBRCB1cmwg
Tk9USUZZIHVybENoYW5nZWQpCisgICAgUV9QUk9QRVJUWShRVXJsIGljb24gUkVBRCBpY29uIE5P
VElGWSBpY29uQ2hhbmdlZCkKICAgICBRX1BST1BFUlRZKGludCBsb2FkUHJvZ3Jlc3MgUkVBRCBs
b2FkUHJvZ3Jlc3MgTk9USUZZIGxvYWRQcm9ncmVzc0NoYW5nZWQpCiAgICAgUV9QUk9QRVJUWShi
b29sIGNhbkdvQmFjayBSRUFEIGNhbkdvQmFjayBOT1RJRlkgbmF2aWdhdGlvblN0YXRlQ2hhbmdl
ZCBGSU5BTCkKICAgICBRX1BST1BFUlRZKGJvb2wgY2FuR29Gb3J3YXJkIFJFQUQgY2FuR29Gb3J3
YXJkIE5PVElGWSBuYXZpZ2F0aW9uU3RhdGVDaGFuZ2VkIEZJTkFMKQpAQCAtNzgsNiArNzksNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB+UVF1aWNrV2ViVmlldygpOwogCiAgICAgUVVybCB1cmwo
KSBjb25zdDsKKyAgICBRVXJsIGljb24oKSBjb25zdDsKICAgICBRU3RyaW5nIHRpdGxlKCkgY29u
c3Q7CiAgICAgaW50IGxvYWRQcm9ncmVzcygpIGNvbnN0OwogCkBAIC0xMTAsNiArMTEyLDcgQEAg
UV9TSUdOQUxTOgogICAgIHZvaWQgbG9hZEZhaWxlZChRUXVpY2tXZWJWaWV3OjpFcnJvclR5cGUg
ZXJyb3JUeXBlLCBpbnQgZXJyb3JDb2RlLCBjb25zdCBRVXJsJiB1cmwpOwogICAgIHZvaWQgbG9h
ZFByb2dyZXNzQ2hhbmdlZChpbnQgcHJvZ3Jlc3MpOwogICAgIHZvaWQgdXJsQ2hhbmdlZChjb25z
dCBRVXJsJiB1cmwpOworICAgIHZvaWQgaWNvbkNoYW5nZWQoY29uc3QgUVVybCYgaWNvblVSTCk7
CiAgICAgdm9pZCBsaW5rSG92ZXJlZChjb25zdCBRVXJsJiB1cmwsIGNvbnN0IFFTdHJpbmcmIHRp
dGxlKTsKICAgICB2b2lkIG5hdmlnYXRpb25TdGF0ZUNoYW5nZWQoKTsKICAgICB2b2lkIG5hdmln
YXRpb25SZXF1ZXN0ZWQoUVdlYk5hdmlnYXRpb25SZXF1ZXN0KiByZXF1ZXN0KTsKQEAgLTEzMiw2
ICsxMzUsNyBAQCBwcml2YXRlOgogICAgIFFfUFJJVkFURV9TTE9UKGRfZnVuYygpLCB2b2lkIF9x
X29uT3BlblBhbmVsRmluaXNoZWQoaW50IHJlc3VsdCkpOwogICAgIFFfUFJJVkFURV9TTE9UKGRf
ZnVuYygpLCB2b2lkIF9xX29uVmlzaWJsZUNoYW5nZWQoKSk7CiAgICAgUV9QUklWQVRFX1NMT1Qo
ZF9mdW5jKCksIHZvaWQgX3Ffb25SZWNlaXZlZFJlc3BvbnNlRnJvbURvd25sb2FkKFFXZWJEb3du
bG9hZEl0ZW0qKSk7CisgICAgUV9QUklWQVRFX1NMT1QoZF9mdW5jKCksIHZvaWQgX3Ffb25JY29u
Q2hhbmdlZEZvclBhZ2VVUkwoY29uc3QgUVVybCYsIGNvbnN0IFFVcmwmKSk7CiAgICAgLy8gSGlk
ZXMgUU9iamVjdDo6ZF9wdHIgYWxsb3dpbmcgdXMgdG8gdXNlIHRoZSBjb252ZW5pZW5jZSBtYWNy
b3MuCiAgICAgUVNjb3BlZFBvaW50ZXI8UVF1aWNrV2ViVmlld1ByaXZhdGU+IGRfcHRyOwogICAg
IFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWwqIG1fZXhwZXJpbWVudGFsOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3BfcC5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3BfcC5oCmluZGV4IGE5
NmQ0MzQ2MjA0NGQ0ZDM5NzA0ZGIxN2JkMzA4MGNkM2NhNWM1YTkuLjNiOTk5MjgyYjk3MjU5ZTA2
YzgzNTVhYTJkMTA4Y2E4MmFiZjc0ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wX3AuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcF9wLmgKQEAgLTg5LDYgKzg5LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgX3Ffb25PcGVuUGFuZWxGaW5pc2hlZChpbnQgcmVzdWx0KTsKICAgICB2b2lk
IF9xX29uVmlzaWJsZUNoYW5nZWQoKTsKICAgICB2b2lkIF9xX29uUmVjZWl2ZWRSZXNwb25zZUZy
b21Eb3dubG9hZChRV2ViRG93bmxvYWRJdGVtKik7CisgICAgdm9pZCBfcV9vbkljb25DaGFuZ2Vk
Rm9yUGFnZVVSTChjb25zdCBRVXJsJiBwYWdlVVJMLCBjb25zdCBRVXJsJiBpY29uVVJMU3RyaW5n
KTsKIAogICAgIHZvaWQgY2hvb3NlRmlsZXMoV0tPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclJlZiwg
Y29uc3QgUVN0cmluZ0xpc3QmIHNlbGVjdGVkRmlsZU5hbWVzLCBRdFdlYlBhZ2VVSUNsaWVudDo6
RmlsZUNob29zZXJUeXBlKTsKICAgICB2b2lkIHJ1bkphdmFTY3JpcHRBbGVydChjb25zdCBRU3Ry
aW5nJik7CkBAIC05Nyw2ICs5OCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0VXNlVHJhZGl0
aW9uYWxEZXNrdG9wQmVoYXZpb3VyKGJvb2wgZW5hYmxlKTsKICAgICB2b2lkIHNldFZpZXdJbkF0
dGFjaGVkUHJvcGVydGllcyhRT2JqZWN0Kik7CisgICAgdm9pZCBzZXRJY29uKGNvbnN0IFFVcmwm
KTsKIAogICAgIGJvb2wgbmF2aWdhdG9yUXRPYmplY3RFbmFibGVkKCkgY29uc3Q7CiAgICAgdm9p
ZCBzZXROYXZpZ2F0b3JRdE9iamVjdEVuYWJsZWQoYm9vbCk7CkBAIC0xNjAsNiArMTYyLDcgQEAg
cHJpdmF0ZToKIAogICAgIGJvb2wgdXNlVHJhZGl0aW9uYWxEZXNrdG9wQmVoYXZpb3VyOwogICAg
IGJvb2wgbV9uYXZpZ2F0b3JRdE9iamVjdEVuYWJsZWQ7CisgICAgUVVybCBtX2ljb25VUkw7CiB9
OwogCiAjZW5kaWYgLy8gcXF1aWNrd2Vidmlld19wX3BfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2ViaWNvbmltYWdlcHJvdmlkZXIuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2ViaWNvbmltYWdlcHJvdmlkZXIuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmRmMDcxMmEzMDliOGM4NWYzMzgzMDVmNTNiNmY2Yzg3MDE5ZTY0MTIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJpY29uaW1hZ2Vw
cm92aWRlci5jcHAKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInF3ZWJpY29uaW1hZ2Vwcm92aWRlcl9wLmgiCisKKyNp
bmNsdWRlICJRdFdlYkNvbnRleHQuaCIKKyNpbmNsdWRlICJRdFdlYkljb25EYXRhYmFzZUNsaWVu
dC5oIgorI2luY2x1ZGUgPFF0Q29yZS9RVXJsPgorI2luY2x1ZGUgPFF0R3VpL1FJbWFnZT4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsK
KworUVdlYkljb25JbWFnZVByb3ZpZGVyOjpRV2ViSWNvbkltYWdlUHJvdmlkZXIoKQorICAgIDog
UURlY2xhcmF0aXZlSW1hZ2VQcm92aWRlcihRRGVjbGFyYXRpdmVJbWFnZVByb3ZpZGVyOjpJbWFn
ZSkKK3sKKworfQorCitRV2ViSWNvbkltYWdlUHJvdmlkZXI6On5RV2ViSWNvbkltYWdlUHJvdmlk
ZXIoKQoreworCit9CisKK1FJbWFnZSBRV2ViSWNvbkltYWdlUHJvdmlkZXI6OnJlcXVlc3RJbWFn
ZShjb25zdCBRU3RyaW5nJiBpZCwgUVNpemUqIHNpemUsIGNvbnN0IFFTaXplJiByZXF1ZXN0ZWRT
aXplKQoreworICAgIFJlZlB0cjxRdFdlYkNvbnRleHQ+IGNvbnRleHQgPSBRdFdlYkNvbnRleHQ6
OmRlZmF1bHRDb250ZXh0KCk7CisgICAgUXRXZWJJY29uRGF0YWJhc2VDbGllbnQqIGljb25EYXRh
YmFzZSA9IGNvbnRleHQtPmljb25EYXRhYmFzZSgpOworCisgICAgLy8gRXh0cmFjdCB0aGUgZW5j
b2RlZCBmcmFnbWVudCBmcm9tIHNvdXJjZSB1cmwgd2hpY2ggaXMgYWxyZWFkeSB3aXRob3V0IHNj
aGVtZSBhbmQgaG9zdC4KKyAgICBRU3RyaW5nIGVuY29kZWRQYWdlVVJMKGlkLnJpZ2h0KGlkLnNp
emUoKSAtIGlkLmluZGV4T2YoJyMnKSAtIDEpKTsKKyAgICBTdHJpbmcgcGFnZVVSTChRVXJsOjpm
cm9tUGVyY2VudEVuY29kaW5nKGVuY29kZWRQYWdlVVJMLnRvVXRmOCgpKSk7CisKKyAgICBRSW1h
Z2UgaWNvbiA9IHJlcXVlc3RlZFNpemUuaXNWYWxpZCgpID8gaWNvbkRhdGFiYXNlLT5pY29uSW1h
Z2VGb3JQYWdlVVJMKHBhZ2VVUkwsIHJlcXVlc3RlZFNpemUpIDogaWNvbkRhdGFiYXNlLT5pY29u
SW1hZ2VGb3JQYWdlVVJMKHBhZ2VVUkwpOworICAgIEFTU0VSVCghaWNvbi5pc051bGwoKSk7CisK
KyAgICBpZiAoc2l6ZSkKKyAgICAgICAgKnNpemUgPSBpY29uLnNpemUoKTsKKworICAgIHJldHVy
biBpY29uOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9x
d2ViaWNvbmltYWdlcHJvdmlkZXJfcC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC9xd2ViaWNvbmltYWdlcHJvdmlkZXJfcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg4MTVkN2I3NmI2M2Q1NDMy
NjFiNzk3NTljZTMzMGY1NzYxNjQyNzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJpY29uaW1hZ2Vwcm92aWRlcl9wLmgKQEAgLTAsMCArMSwz
MyBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBxd2ViaWNvbmltYWdlcHJvdmlkZXJf
cF9oCisjZGVmaW5lIHF3ZWJpY29uaW1hZ2Vwcm92aWRlcl9wX2gKKworI2luY2x1ZGUgInF3ZWJr
aXRnbG9iYWwuaCIKKyNpbmNsdWRlIDxRdERlY2xhcmF0aXZlL1FEZWNsYXJhdGl2ZUltYWdlUHJv
dmlkZXI+CisKK2NsYXNzIFFXRUJLSVRfRVhQT1JUIFFXZWJJY29uSW1hZ2VQcm92aWRlciA6IHB1
YmxpYyBRRGVjbGFyYXRpdmVJbWFnZVByb3ZpZGVyIHsKK3B1YmxpYzoKKyAgICBRV2ViSWNvbklt
YWdlUHJvdmlkZXIoKTsKKyAgICB+UVdlYkljb25JbWFnZVByb3ZpZGVyKCk7CisgICAgUUltYWdl
IHJlcXVlc3RJbWFnZShjb25zdCBRU3RyaW5nJiBpZCwgUVNpemUqIHNpemUsIGNvbnN0IFFTaXpl
JiByZXF1ZXN0ZWRTaXplKTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJD
b250ZXh0LmgKaW5kZXggNzA0Mjg1ZWVlNzVmYzE2YzBiNTNjOWZiYjBmNzZmNTEzMjRlYjNlMi4u
MjFmMjE5MTQ5YWM5M2U5MjVlZWRhN2VhZWM1YjE0ODlhNWY5YjZmMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViQ29udGV4dC5oCkBAIC0xNzEsNiArMTcxLDcgQEAgcHVibGljOgogCiAgICAg
dm9pZCBzZXREYXRhYmFzZURpcmVjdG9yeShjb25zdCBTdHJpbmcmIGRpcikgeyBtX292ZXJyaWRl
RGF0YWJhc2VEaXJlY3RvcnkgPSBkaXI7IH0KICAgICB2b2lkIHNldEljb25EYXRhYmFzZVBhdGgo
Y29uc3QgU3RyaW5nJik7CisgICAgU3RyaW5nIGljb25EYXRhYmFzZVBhdGgoKSBjb25zdDsKICAg
ICB2b2lkIHNldExvY2FsU3RvcmFnZURpcmVjdG9yeShjb25zdCBTdHJpbmcmIGRpcikgeyBtX292
ZXJyaWRlTG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gZGlyOyB9CiAKICAgICBTdHJpbmcgb3ZlcnJp
ZGVXZWJJbnNwZWN0b3JCYXNlRGlyZWN0b3J5KCkgY29uc3QgeyByZXR1cm4gbV9vdmVycmlkZVdl
Ykluc3BlY3RvckJhc2VEaXJlY3Rvcnk7IH0KQEAgLTIzNiw3ICsyMzcsNiBAQCBwcml2YXRlOgog
ICAgIFN0cmluZyBkYXRhYmFzZURpcmVjdG9yeSgpIGNvbnN0OwogICAgIFN0cmluZyBwbGF0Zm9y
bURlZmF1bHREYXRhYmFzZURpcmVjdG9yeSgpIGNvbnN0OwogCi0gICAgU3RyaW5nIGljb25EYXRh
YmFzZVBhdGgoKSBjb25zdDsKICAgICBTdHJpbmcgcGxhdGZvcm1EZWZhdWx0SWNvbkRhdGFiYXNl
UGF0aCgpIGNvbnN0OwogCiAgICAgU3RyaW5nIGxvY2FsU3RvcmFnZURpcmVjdG9yeSgpIGNvbnN0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmNwcAppbmRleCA4
NDI3Y2EzNWUwODUzYmRkZmNmY2JkZTYyNDgzNTg0MWEzNWJhMTQ4Li44MDE2Y2ZiZDZlN2UxZjc2
OGFhOGQxNmMyNWVjYzdmNmIwNzkzNWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViSWNvbkRhdGFiYXNlLmNwcApAQCAtMTMzLDkgKzEzMywxNCBAQCB2b2lkIFdlYkljb25EYXRh
YmFzZTo6c3luY2hyb25vdXNJY29uRGF0YUZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJiwgQ29yZUlQ
Qzo6RGF0YQogICAgIGljb25EYXRhID0gQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSgpOwogfQogCi12
b2lkIFdlYkljb25EYXRhYmFzZTo6c3luY2hyb25vdXNJY29uVVJMRm9yUGFnZVVSTChjb25zdCBT
dHJpbmcmLCBTdHJpbmcmIGljb25VUkwpCit2b2lkIFdlYkljb25EYXRhYmFzZTo6c3luY2hyb25v
dXNJY29uVVJMRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmIHBhZ2VVUkwsIFN0cmluZyYgaWNvblVS
TCkKIHsKLSAgICBpY29uVVJMID0gU3RyaW5nKCk7CisgICAgaWYgKCFtX2ljb25EYXRhYmFzZUlt
cGwpIHsKKyAgICAgICAgaWNvblVSTCA9IFN0cmluZygpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWNvblVSTCA9IG1faWNvbkRhdGFiYXNlSW1wbC0+c3luY2hyb25vdXNJY29uVVJM
Rm9yUGFnZVVSTChwYWdlVVJMKTsKIH0KIAogdm9pZCBXZWJJY29uRGF0YWJhc2U6OnN5bmNocm9u
b3VzSWNvbkRhdGFLbm93bkZvckljb25VUkwoY29uc3QgU3RyaW5nJiwgYm9vbCYgaWNvbkRhdGFL
bm93bikgY29uc3QKQEAgLTE3NSwxNCArMTgwLDE0IEBAIHZvaWQgV2ViSWNvbkRhdGFiYXNlOjpn
ZXRMb2FkRGVjaXNpb25Gb3JJY29uVVJMKGNvbnN0IFN0cmluZyYgaWNvblVSTCwgdWludDY0X3QK
ICAgICBtX3dlYkNvbnRleHQtPnNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViSWNvbkRh
dGFiYXNlUHJveHk6OlJlY2VpdmVkSWNvbkxvYWREZWNpc2lvbigoaW50KWRlY2lzaW9uLCBjYWxs
YmFja0lEKSk7CiB9CiAKLUltYWdlKiBXZWJJY29uRGF0YWJhc2U6OmltYWdlRm9yUGFnZVVSTChj
b25zdCBTdHJpbmcmIHBhZ2VVUkwpCitJbWFnZSogV2ViSWNvbkRhdGFiYXNlOjppbWFnZUZvclBh
Z2VVUkwoY29uc3QgU3RyaW5nJiBwYWdlVVJMLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBpY29u
U2l6ZSkKIHsKICAgICBpZiAoIW1fd2ViQ29udGV4dCB8fCAhbV9pY29uRGF0YWJhc2VJbXBsIHx8
ICFtX2ljb25EYXRhYmFzZUltcGwtPmlzT3BlbigpIHx8IHBhZ2VVUkwuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm4gMDsgICAgCiAKICAgICAvLyBUaGUgV2ViQ29yZSBJY29uRGF0YWJhc2UgaWdu
b3JlcyB0aGUgcGFzc2VkIGluIHNpemUgcGFyYW1ldGVyLgogICAgIC8vIElmIHRoYXQgY2hhbmdl
cyB3ZSdsbCBuZWVkIHRvIHJldGhpbmsgaG93IHRoaXMgQVBJIGlzIGV4cG9zZWQuCi0gICAgcmV0
dXJuIG1faWNvbkRhdGFiYXNlSW1wbC0+c3luY2hyb25vdXNJY29uRm9yUGFnZVVSTChwYWdlVVJM
LCBXZWJDb3JlOjpJbnRTaXplKDMyLCAzMikpOworICAgIHJldHVybiBtX2ljb25EYXRhYmFzZUlt
cGwtPnN5bmNocm9ub3VzSWNvbkZvclBhZ2VVUkwocGFnZVVSTCwgaWNvblNpemUpOwogfQogCiB2
b2lkIFdlYkljb25EYXRhYmFzZTo6cmVtb3ZlQWxsSWNvbnMoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYkljb25EYXRhYmFzZS5oCmluZGV4IDBjMjQzZWYwODcyMDIxOWJhMTA1ZGU0YjFh
YzZkZDQ3N2Q2ODQ5YWQuLmI3NGMyMTA4NjQ4NTE3MDA5NjczNDk4MGRiMTcwNTlmMmNkZTI4MTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmgKQEAgLTMxLDYg
KzMxLDcgQEAKICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiV2ViSWNvbkRhdGFi
YXNlQ2xpZW50LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9JY29uRGF0YWJhc2VDbGllbnQuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtNzYs
NyArNzcsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBnZXRMb2FkRGVjaXNpb25Gb3JJY29u
VVJMKGNvbnN0IFN0cmluZyYsIHVpbnQ2NF90IGNhbGxiYWNrSUQpOwogCi0gICAgV2ViQ29yZTo6
SW1hZ2UqIGltYWdlRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmKTsKKyAgICBXZWJDb3JlOjpJbWFn
ZSogaW1hZ2VGb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYsIGNvbnN0IFdlYkNvcmU6OkludFNpemUm
IGljb25TaXplID0gV2ViQ29yZTo6SW50U2l6ZSgzMiwgMzIpKTsKICAgICAKICAgICB2b2lkIHJl
bW92ZUFsbEljb25zKCk7CiAgICAgdm9pZCBjaGVja0ludGVncml0eUJlZm9yZU9wZW5pbmcoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYkNvbnRleHQuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViQ29udGV4dC5jcHAKaW5kZXggYTFm
ZjFkMjBkMWUwYmU0YjA0YmM1MGJkMTczNzE5MTVmNTcwMThhYy4uYmMzMjY2ODczZWZjNjQ2NzRm
YWUzNTk3NTAyZjZkYzI3MmYxYmFmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L1F0V2ViQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0
L1F0V2ViQ29udGV4dC5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgIk11dGFibGVB
cnJheS5oIgogI2luY2x1ZGUgIlF0RG93bmxvYWRNYW5hZ2VyLmgiCisjaW5jbHVkZSAiUXRXZWJJ
Y29uRGF0YWJhc2VDbGllbnQuaCIKICNpbmNsdWRlICJXS0FQSUNhc3QuaCIKICNpbmNsdWRlICJX
ZWJDb250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCkBAIC05Myw2ICs5NCw3IEBA
IHZvaWQgUXRXZWJDb250ZXh0Ojpwb3N0TWVzc2FnZVRvTmF2aWdhdG9yUXRPYmplY3QoV2ViUGFn
ZVByb3h5KiB3ZWJQYWdlUHJveHksIGNvCiB2b2lkIFF0V2ViQ29udGV4dDo6aW5pdGlhbGl6ZSgp
CiB7CiAgICAgbV9kb3dubG9hZE1hbmFnZXIgPSBhZG9wdFB0cihuZXcgUXREb3dubG9hZE1hbmFn
ZXIobV9jb250ZXh0LmdldCgpKSk7CisgICAgbV9pY29uRGF0YWJhc2UgPSBhZG9wdFB0cihuZXcg
UXRXZWJJY29uRGF0YWJhc2VDbGllbnQobV9jb250ZXh0LmdldCgpKSk7CiAgICAgaW5pdGlhbGl6
ZUNvbnRleHRJbmplY3RlZEJ1bmRsZUNsaWVudCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJDb250ZXh0LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvUXRXZWJDb250ZXh0LmgKaW5kZXggOTdjZTI2ZDZmOWEyMTI0MWZiNzA1NWVjYWQ5
YmYwZDg0MTllYTQyOS4uZWFiM2Q3YzQ3Njg4NTlhZmZmYmNmNjJiYWQ2YmUxOGIzZGFjNmYwOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViQ29udGV4dC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYkNvbnRleHQuaApAQCAtMzUsNiAr
MzUsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgUGFnZUNsaWVudDsKIGNsYXNzIFF0
RG93bmxvYWRNYW5hZ2VyOworY2xhc3MgUXRXZWJJY29uRGF0YWJhc2VDbGllbnQ7CiBjbGFzcyBX
ZWJDb250ZXh0OwogY2xhc3MgV2ViUGFnZUdyb3VwOwogY2xhc3MgV2ViUGFnZVByb3h5OwpAQCAt
NDksNiArNTAsNyBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxXZWJQYWdlUHJveHk+IGNyZWF0
ZVdlYlBhZ2UoUGFnZUNsaWVudCosIFdlYlBhZ2VHcm91cCopOwogCiAgICAgUXREb3dubG9hZE1h
bmFnZXIqIGRvd25sb2FkTWFuYWdlcigpIHsgcmV0dXJuIG1fZG93bmxvYWRNYW5hZ2VyLmdldCgp
OyB9CisgICAgUXRXZWJJY29uRGF0YWJhc2VDbGllbnQqIGljb25EYXRhYmFzZSgpIHsgcmV0dXJu
IG1faWNvbkRhdGFiYXNlLmdldCgpOyB9CiAKICAgICB2b2lkIHNldE5hdmlnYXRvclF0T2JqZWN0
RW5hYmxlZChXZWJQYWdlUHJveHkqLCBib29sKTsKICAgICB2b2lkIHBvc3RNZXNzYWdlVG9OYXZp
Z2F0b3JRdE9iamVjdChXZWJQYWdlUHJveHkqLCBjb25zdCBRU3RyaW5nJik7CkBAIC02Niw2ICs2
OCw3IEBAIHByaXZhdGU6CiAKICAgICBSZWZQdHI8V2ViQ29udGV4dD4gbV9jb250ZXh0OwogICAg
IE93blB0cjxRdERvd25sb2FkTWFuYWdlcj4gbV9kb3dubG9hZE1hbmFnZXI7CisgICAgT3duUHRy
PFF0V2ViSWNvbkRhdGFiYXNlQ2xpZW50PiBtX2ljb25EYXRhYmFzZTsKIH07CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYkljb25EYXRhYmFzZUNsaWVu
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJJY29uRGF0YWJhc2VDbGll
bnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjE3MWU5NzFiNmE4ZTRmYmQwYjk2ZDkyNGQ0ZDhiNjQxZWUwNmFj
ODIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJJ
Y29uRGF0YWJhc2VDbGllbnQuY3BwCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICAgIENvcHlyaWdo
dCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
KworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUXRXZWJJY29uRGF0YWJhc2VDbGll
bnQuaCIKKworI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUg
IlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgIldLVVJMUXQuaCIKKyNpbmNsdWRlICJXZWJDb250
ZXh0LmgiCisjaW5jbHVkZSAiV2ViSWNvbkRhdGFiYXNlLmgiCisjaW5jbHVkZSA8UXRDb3JlL1FI
YXNoPgorI2luY2x1ZGUgPFF0Q29yZS9RT2JqZWN0PgorI2luY2x1ZGUgPFF0Q29yZS9RVXJsPgor
I2luY2x1ZGUgPFF0R3VpL1FJbWFnZT4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworc3Rh
dGljIGlubGluZSBRdFdlYkljb25EYXRhYmFzZUNsaWVudCogdG9RdFdlYkljb25EYXRhYmFzZUNs
aWVudChjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIEFTU0VSVChjbGllbnRJbmZvKTsK
KyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxRdFdlYkljb25EYXRhYmFzZUNsaWVudCo+KGNv
bnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKTsKK30KKworUXRXZWJJY29uRGF0YWJhc2VDbGll
bnQ6OlF0V2ViSWNvbkRhdGFiYXNlQ2xpZW50KFdlYkNvbnRleHQqIGNvbnRleHQpCit7CisgICAg
Ly8gVGhlIHNldHRlciBjYWxscyB0aGUgZ2V0dGVyIGhlcmUgYXMgaXQgdHJpZ2dlcnMgdGhlIHN0
YXJ0dXAgb2YgdGhlIGljb24gZGF0YWJhc2UuCisgICAgY29udGV4dC0+c2V0SWNvbkRhdGFiYXNl
UGF0aChjb250ZXh0LT5pY29uRGF0YWJhc2VQYXRoKCkpOworICAgIG1faWNvbkRhdGFiYXNlID0g
Y29udGV4dC0+aWNvbkRhdGFiYXNlKCk7CisKKyAgICBXS0ljb25EYXRhYmFzZUNsaWVudCBpY29u
RGF0YWJhc2VDbGllbnQ7CisgICAgbWVtc2V0KCZpY29uRGF0YWJhc2VDbGllbnQsIDAsIHNpemVv
ZihXS0ljb25EYXRhYmFzZUNsaWVudCkpOworICAgIGljb25EYXRhYmFzZUNsaWVudC52ZXJzaW9u
ID0ga1dLSWNvbkRhdGFiYXNlQ2xpZW50Q3VycmVudFZlcnNpb247CisgICAgaWNvbkRhdGFiYXNl
Q2xpZW50LmNsaWVudEluZm8gPSB0aGlzOworICAgIGljb25EYXRhYmFzZUNsaWVudC5kaWRDaGFu
Z2VJY29uRm9yUGFnZVVSTCA9IGRpZENoYW5nZUljb25Gb3JQYWdlVVJMOworICAgIFdLSWNvbkRh
dGFiYXNlU2V0SWNvbkRhdGFiYXNlQ2xpZW50KHRvQVBJKG1faWNvbkRhdGFiYXNlKSwgJmljb25E
YXRhYmFzZUNsaWVudCk7Cit9CisKK1F0V2ViSWNvbkRhdGFiYXNlQ2xpZW50Ojp+UXRXZWJJY29u
RGF0YWJhc2VDbGllbnQoKQoreworfQorCit2b2lkIFF0V2ViSWNvbkRhdGFiYXNlQ2xpZW50Ojpk
aWRDaGFuZ2VJY29uRm9yUGFnZVVSTChXS0ljb25EYXRhYmFzZVJlZiBpY29uRGF0YWJhc2UsIFdL
VVJMUmVmIHBhZ2VVUkwsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgUVVybCBxVXJs
ID0gV0tVUkxDb3B5UVVybChwYWdlVVJMKTsKKyAgICB0b1F0V2ViSWNvbkRhdGFiYXNlQ2xpZW50
KGNsaWVudEluZm8pLT5yZXF1ZXN0SWNvbkZvclBhZ2VVUkwocVVybCk7Cit9CisKK1FJbWFnZSBR
dFdlYkljb25EYXRhYmFzZUNsaWVudDo6aWNvbkltYWdlRm9yUGFnZVVSTChjb25zdCBTdHJpbmcm
IHBhZ2VVUkwsIGNvbnN0IFFTaXplJiBpY29uU2l6ZSkKK3sKKyAgICBNdXRleExvY2tlciBsb2Nr
ZXIobV9pbWFnZUxvY2spOworCisgICAgV2ViQ29yZTo6SW50U2l6ZSBzaXplKGljb25TaXplLndp
ZHRoKCksIGljb25TaXplLmhlaWdodCgpKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2U+IGlt
YWdlID0gbV9pY29uRGF0YWJhc2UtPmltYWdlRm9yUGFnZVVSTChwYWdlVVJMLCBzaXplKTsKKyAg
ICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gUUltYWdlKCk7CisKKyAgICBRUGl4bWFwKiBu
YXRpdmVJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIGlm
ICghbmF0aXZlSW1hZ2UpCisgICAgICAgIHJldHVybiBRSW1hZ2UoKTsKKworICAgIHJldHVybiBu
YXRpdmVJbWFnZS0+dG9JbWFnZSgpOworfQorCit1bnNpZ25lZCBRdFdlYkljb25EYXRhYmFzZUNs
aWVudDo6aWNvblVSTEhhc2hGb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYgcGFnZVVSTCkKK3sKKyAg
ICBTdHJpbmcgaWNvblVSTDsKKyAgICBtX2ljb25EYXRhYmFzZS0+c3luY2hyb25vdXNJY29uVVJM
Rm9yUGFnZVVSTChwYWdlVVJMLCBpY29uVVJMKTsKKyAgICByZXR1cm4gU3RyaW5nSGFzaDo6aGFz
aChpY29uVVJMKTsKK30KKwordm9pZCBRdFdlYkljb25EYXRhYmFzZUNsaWVudDo6cmVxdWVzdElj
b25Gb3JQYWdlVVJMKGNvbnN0IFFVcmwmIHBhZ2VVUkwpCit7CisgICAgU3RyaW5nIHBhZ2VVUkxT
dHJpbmcgPSBXZWJDb3JlOjpLVVJMKHBhZ2VVUkwpLnN0cmluZygpOworICAgIGlmIChpY29uSW1h
Z2VGb3JQYWdlVVJMKHBhZ2VVUkxTdHJpbmcpLmlzTnVsbCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICB1bnNpZ25lZCBpY29uSUQgPSBpY29uVVJMSGFzaEZvclBhZ2VVUkwocGFnZVVSTFN0cmlu
Zyk7CisgICAgUVVybCB1cmw7CisgICAgdXJsLnNldFNjaGVtZShRU3RyaW5nTGl0ZXJhbCgiaW1h
Z2UiKSk7CisgICAgdXJsLnNldEhvc3QoUVN0cmluZ0xpdGVyYWwoIndlYmljb24iKSk7CisgICAg
dXJsLnNldFBhdGgoUVN0cmluZzo6bnVtYmVyKGljb25JRCkucHJlcGVuZCgnLycpKTsKKyAgICB1
cmwuc2V0RW5jb2RlZEZyYWdtZW50KHBhZ2VVUkwudG9FbmNvZGVkKCkpOworICAgIGVtaXQgaWNv
bkNoYW5nZWRGb3JQYWdlVVJMKHBhZ2VVUkwsIHVybCk7Cit9CisKK3ZvaWQgUXRXZWJJY29uRGF0
YWJhc2VDbGllbnQ6OnJldGFpbkljb25Gb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYgcGFnZVVSTCkK
K3sKKyAgICBtX2ljb25EYXRhYmFzZS0+cmV0YWluSWNvbkZvclBhZ2VVUkwocGFnZVVSTCk7Cit9
CisKK3ZvaWQgUXRXZWJJY29uRGF0YWJhc2VDbGllbnQ6OnJlbGVhc2VJY29uRm9yUGFnZVVSTChj
b25zdCBTdHJpbmcmIHBhZ2VVUkwpCit7CisgICAgbV9pY29uRGF0YWJhc2UtPnJlbGVhc2VJY29u
Rm9yUGFnZVVSTChwYWdlVVJMKTsKK30KKworI2luY2x1ZGUgIm1vY19RdFdlYkljb25EYXRhYmFz
ZUNsaWVudC5jcHAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRX
ZWJJY29uRGF0YWJhc2VDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdl
Ykljb25EYXRhYmFzZUNsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJjZDBhOTBlMzk4ZmIwNDEwZmI5ZDQy
OGVlYzRjMTM5MWRlNjhlZWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvUXRXZWJJY29uRGF0YWJhc2VDbGllbnQuaApAQCAtMCwwICsxLDY2IEBACisvKgor
ICAgIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisqLworCisKKyNpZm5kZWYgUXRXZWJJY29uRGF0YWJhc2VDbGllbnRfaAorI2Rl
ZmluZSBRdFdlYkljb25EYXRhYmFzZUNsaWVudF9oCisKKyNpbmNsdWRlICJXS0ljb25EYXRhYmFz
ZS5oIgorI2luY2x1ZGUgInF3ZWJraXRnbG9iYWwuaCIKKyNpbmNsdWRlIDxRdENvcmUvUU9iamVj
dD4KKyNpbmNsdWRlIDxRdENvcmUvUVNpemU+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitRVF9CRUdJTl9OQU1FU1BBQ0UKK2Ns
YXNzIFFJbWFnZTsKK2NsYXNzIFFVcmw7CitRVF9FTkRfTkFNRVNQQUNFCisKK25hbWVzcGFjZSBX
ZWJLaXQgeworY2xhc3MgV2ViQ29udGV4dDsKK2NsYXNzIFdlYkljb25EYXRhYmFzZTsKKworY2xh
c3MgUXRXZWJJY29uRGF0YWJhc2VDbGllbnQgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpF
Q1QKKworcHVibGljOgorICAgIFF0V2ViSWNvbkRhdGFiYXNlQ2xpZW50KFdlYktpdDo6V2ViQ29u
dGV4dCopOworICAgIH5RdFdlYkljb25EYXRhYmFzZUNsaWVudCgpOworCisgICAgUUltYWdlIGlj
b25JbWFnZUZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJiBwYWdlVVJMLCBjb25zdCBRU2l6ZSYgaWNv
blNpemUgPSBRU2l6ZSgzMiwgMzIpKTsKKyAgICB2b2lkIHJldGFpbkljb25Gb3JQYWdlVVJMKGNv
bnN0IFN0cmluZyYpOworICAgIHZvaWQgcmVsZWFzZUljb25Gb3JQYWdlVVJMKGNvbnN0IFN0cmlu
ZyYpOworCitwdWJsaWMgUV9TTE9UUzoKKyAgICB2b2lkIHJlcXVlc3RJY29uRm9yUGFnZVVSTChj
b25zdCBRVXJsJik7CisKK3B1YmxpYzoKKyAgICBRX1NJR05BTCB2b2lkIGljb25DaGFuZ2VkRm9y
UGFnZVVSTChjb25zdCBRVXJsJiBwYWdlVVJMLCBjb25zdCBRVXJsJiBpY29uVVJMKTsKKworcHJp
dmF0ZToKKyAgICB1bnNpZ25lZCBpY29uVVJMSGFzaEZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJik7
CisgICAgc3RhdGljIHZvaWQgZGlkQ2hhbmdlSWNvbkZvclBhZ2VVUkwoV0tJY29uRGF0YWJhc2VS
ZWYsIFdLVVJMUmVmIHBhZ2VVUkwsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIFdlYktp
dDo6V2ViSWNvbkRhdGFiYXNlKiBtX2ljb25EYXRhYmFzZTsKKyAgICBNdXRleCBtX2ltYWdlTG9j
azsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvUXRXZWJQYWdlTG9hZENsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
cXQvUXRXZWJQYWdlTG9hZENsaWVudC5jcHAKaW5kZXggMTNhZmIyMTQwMjdiMjlmODVjZGViMzFl
N2VlYWIyYjY4OTI0N2M3ZS4uMTkyNzU1YzhiNDYwN2MxNTczNjBjNTQ4MDYzNjY0ZGJkYTE1Y2Rj
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZUxvYWRD
bGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VMb2Fk
Q2xpZW50LmNwcApAQCAtMTY5LDcgKzE2OSw5IEBAIHZvaWQgUXRXZWJQYWdlTG9hZENsaWVudDo6
ZGlkUmVjZWl2ZVRpdGxlRm9yRnJhbWUoV0tQYWdlUmVmLCBXS1N0cmluZ1JlZiB0aXRsZSwKIAog
dm9pZCBRdFdlYlBhZ2VMb2FkQ2xpZW50OjpkaWRTdGFydFByb2dyZXNzKFdLUGFnZVJlZiwgY29u
c3Qgdm9pZCogY2xpZW50SW5mbykKIHsKLSAgICB0b1F0V2ViUGFnZUxvYWRDbGllbnQoY2xpZW50
SW5mbyktPnNldExvYWRQcm9ncmVzcygwKTsKKyAgICBRdFdlYlBhZ2VMb2FkQ2xpZW50KiBjbGll
bnQgPSB0b1F0V2ViUGFnZUxvYWRDbGllbnQoY2xpZW50SW5mbyk7CisgICAgY2xpZW50LT5zZXRM
b2FkUHJvZ3Jlc3MoMCk7CisgICAgY2xpZW50LT5tX3dlYlZpZXctPmRfZnVuYygpLT5zZXRJY29u
KFFVcmwoKSk7CiB9CiAKIHZvaWQgUXRXZWJQYWdlTG9hZENsaWVudDo6ZGlkQ2hhbmdlUHJvZ3Jl
c3MoV0tQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCmRpZmYgLS1naXQgYS9T
b3VyY2UvcXR3ZWJraXQtZXhwb3J0Lm1hcCBiL1NvdXJjZS9xdHdlYmtpdC1leHBvcnQubWFwCmlu
ZGV4IDgzMjA1YzhkNDg4MTFiMDZiNmVkNjMyMTdkNWY4YjdmMTA1Zjk3NTAuLjQ5NThjODUxM2Rk
NTYxYjg0NmM0MzEyYmIwMmMwMjVlN2ZhMTVjNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9xdHdlYmtp
dC1leHBvcnQubWFwCisrKyBiL1NvdXJjZS9xdHdlYmtpdC1leHBvcnQubWFwCkBAIC0xMDksNiAr
MTA5LDEyIEBAIHF3a18xLjAgewogICAgICAgICAqUVF1aWNrV2ViVmlld1ByaXZhdGU7CiAgICAg
ICAgIG5vbi12aXJ0dWFsP3RodW5rP3RvP1FRdWlja1dlYlZpZXdQcml2YXRlKjsKICAgICAgICAg
UVF1aWNrV2ViVmlld1ByaXZhdGU6Oio7CisgICAgICAgICpRV2ViSWNvbkltYWdlUHJvdmlkZXI7
CisgICAgICAgIG5vbi12aXJ0dWFsP3RodW5rP3RvP1FXZWJJY29uSW1hZ2VQcm92aWRlcio7Cisg
ICAgICAgIFFXZWJJY29uSW1hZ2VQcm92aWRlcjo6KjsKKyAgICAgICAgKlF0V2ViSWNvbkRhdGFi
YXNlQ2xpZW50OworICAgICAgICBub24tdmlydHVhbD90aHVuaz90bz9RdFdlYkljb25EYXRhYmFz
ZUNsaWVudCo7CisgICAgICAgIFF0V2ViSWNvbkRhdGFiYXNlQ2xpZW50OjoqOwogICAgICAgICAq
UVF1aWNrV2ViVmlld1ByaXZhdGVFeHRlbnNpb247CiAgICAgICAgIG5vbi12aXJ0dWFsP3RodW5r
P3RvP1FRdWlja1dlYlZpZXdQcml2YXRlRXh0ZW5zaW9uKjsKICAgICAgICAgUVF1aWNrV2ViVmll
d1ByaXZhdGVFeHRlbnNpb246Oio7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29s
cy9DaGFuZ2VMb2cKaW5kZXggNWEzMjIyOTRjZTgzYzY1ODZkZWQ5N2FkNDQ0NmY5YTI0MjhmMDRj
YS4uNGRjNjQzOTZjNmY4MzM5ZThlYTJjNTc5ZWJmZTVjNzRhYWQzODliMiAxMDA2NDQKLS0tIGEv
VG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisy
MDExLTEyLTE2ICBSYWZhZWwgQnJhbmRhbyAgPHJhZmFlbC5sb2JvQG9wZW5ib3NzYS5vcmc+CisK
KyAgICAgICAgW1F0XVtXSzJdIEltcGxlbWVudCBmYXZpY29uIHN1cHBvcnQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMDgyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQSBmYXZvcml0ZSBpY29uIHdhcyBh
ZGRlZCBvbiBNaW5pQnJvd3NlcidzIHVybCBiYXIgYXMgZXhhbXBsZS4KKyAgICAgICAgV2UgZGlz
cGxheSBhIGRlZmF1bHQgaWNvbiB3aGVuIHRoZSBwYWdlIGRvZXNuJ3QgaGF2ZSBhbiBpY29uIHJl
YWR5LgorCisgICAgICAgICogTWluaUJyb3dzZXIvcXQvTWluaUJyb3dzZXIucXJjOgorICAgICAg
ICAqIE1pbmlCcm93c2VyL3F0L2ljb25zL2Zhdmljb24ucG5nOiBBZGRlZC4KKyAgICAgICAgKiBN
aW5pQnJvd3Nlci9xdC9xbWwvQnJvd3NlcldpbmRvdy5xbWw6CisKIDIwMTEtMTItMTYgIERlYW4g
SmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCB3ZWJraXQtYnVnLWltcG9y
dGVyQGdyb3VwLmFwcGxlLmNvbSB0byBhY2NvdW50cwpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJy
b3dzZXIvcXQvTWluaUJyb3dzZXIucXJjIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvTWluaUJyb3dz
ZXIucXJjCmluZGV4IDI2NjY4M2RiYWI3ZDZiZGJkZDNlMWFlYzA1N2M1MGFmNDhhNzc5YjYuLjcx
MGE2Y2RmNDc2ZjFmOTcxNGUxZWQzZjI5YWZmYzM2NzgxN2RlY2QgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L01pbmlCcm93c2VyL3F0L01pbmlCcm93c2VyLnFyYworKysgYi9Ub29scy9NaW5pQnJvd3Nlci9x
dC9NaW5pQnJvd3Nlci5xcmMKQEAgLTExLDUgKzExLDYgQEAKICAgICAgICAgPGZpbGU+cW1sL01v
Y2tUb3VjaFBvaW50LnFtbDwvZmlsZT4KICAgICAgICAgPGZpbGU+cW1sL1ZpZXdwb3J0SW5mb0l0
ZW0ucW1sPC9maWxlPgogICAgICAgICA8ZmlsZT51c2VyYWdlbnRsaXN0LnR4dDwvZmlsZT4KKyAg
ICAgICAgPGZpbGU+aWNvbnMvZmF2aWNvbi5wbmc8L2ZpbGU+CiAgICAgPC9xcmVzb3VyY2U+CiA8
L1JDQz4KZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L2ljb25zL2Zhdmljb24ucG5n
IGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvaWNvbnMvZmF2aWNvbi5wbmcKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDQ2
Mjc1MmE1M2JhZWIwNWQ5YTk4ZjhhZTIzZmE4MDdlN2NlZWU0YQpHSVQgYmluYXJ5IHBhdGNoCmxp
dGVyYWwgODkxCnpjbVYtPjFCQ3BFUCk8aDszS3xMazAwMGUxTkpMVHEwMDBtRzAwMG1PMV5AczZB
TV5pVjAwMDAxYjVjaF8wSXRwKQp6PT5QeCZIQXpINFI1KHVzIU9jJDtYOF4kQS19fXh4R2RyKiE0
Ny1iaFZKJDQhcVJAYnZHKTteI3swK1NyKUFaKVcKekcoR2VXRDVzdSMpa0R2e247elFRIyZ+TkpR
ZDV5dTVuK0xhbTFURVhjNll3I29qIzhNXytvd2l1ey1OTkcjcnlHCnozPCpYTmNGclVkMkJxcEgj
dFNhMyhfXiQhbjVOQjFxan1QOG9qcmEyOz5CYSooS2xhajNfR29GXkUxO1ZMU2M8TAp6M2BQTl5Z
TUpzPm5VNm5OO3Jma2JDTXkrYFdyMVotdTJ1XzJqbUU4S3p4XlZWQT4/PVk9XnwwO1E9WH1qZFBE
TVYKemZ0bEpvaX1nQnx2TTNZXlNoa0hITVRCWEJwVCFpNUU+WT9+R15WODdzNGd1clVNd01uamNy
KkotM29KYTMoUVEtCnpBZi1ZWWxBTFdMNWdaO0koQWEmMFA5Pm88a3NfQnpzeGlqaDNXbV4+aWJk
ajdsWkcrUDR7Y2lBYjFZfF5MVmtqQgp6V3MzUWF0YFV0PUJDaylyeW5yJHMyZzZaLUxEaWsyKlk1
RHtWNHQxRjVuNSokWH54YWZQcX15SjQjJXcpUGs7WGQKektoQjc+TClfZChObUchOURYKEBtTiY1
a19ePXI4MERAO3NDanRAP05ndVQ2OHtgJkpERTxCRylEVGcqUExMR3VFCnpwXlRoRUNeVkNrNiZC
YSh0UztZUmB8VTJUfDkjMUwhNkVTczA/Kl5+K3NreDFVMFU1OVFmZFolT3B0MSVaRCE9Ngp6Z25a
NWRvZSV+LWkqcSVVSGMmeHxCKlQmeGJGKCRwQDdeV3lgaU1CZ2t8NnlII0RufHl2ajw7Jk5vRS1R
eX04TkMKekBeIzlTNj5RcmtPJWpxTUxJXjwrI2BGZ1JhPCltfWRIbnFBR3YwMSpxazZwX2FoZyVl
PU5OaDtmKj5IdkdMKHxVCnppRHV7aEpHJEwtZio+RmpubHl+S3h3PVhrTWBXcGlGPFlEOFhucmBS
U2plO0FKaXReSVpyTFUwKmxmTXRWbUtPKwp6N1k9emw0PjNxKCgoWlI/b300bDBeLXomTXIqfiVZ
XjFvTGtOeWNmbmh1ZG1sK1pMJllPUDhteWx9UnYrTlRrTHgKejtQa0FgemBzRTIxZnxSaHhrM0Bz
dj5DVUBYbSZjcG5XbzwjYU1XcmRnYTklZVE7fGZQdH5hM0g+bDYwfGw8aExjCnopc0A+SyhCOGVQ
bSMwQ2V5ZyUzeyQ+Nmx6VmQjZms0Mkw4LXFnWDhCUEVOM1FjISltPXhnczFFT09zRUcjKyQ5QAp6
WWlwbSlFWSlrYjdWMzM2b2k+QzExKDZtQSF6OSlUWCRGSH4kVnVtJUkwZmJUUjhkZDl8TE1tY3tz
JTQkZzw0K2UKUkVmND96MDAyb3ZQREhMa1YxbmxqbyFrSGIKCmxpdGVyYWwgMApIY21WP2QwMDAw
MQoKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L3FtbC9Ccm93c2VyV2luZG93LnFt
bCBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L3FtbC9Ccm93c2VyV2luZG93LnFtbAppbmRleCA4MmQx
MGIyMzhmMGFjNzU3Yzg2ZWQ4NTU5N2JjNDM3YWQ3ZjlhZGY1Li4yYjBmYTk2MTFjZDI4Y2JjNTA2
YmI4OTZiNWM0YWM3OWExMTRjYjYzIDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9x
bWwvQnJvd3NlcldpbmRvdy5xbWwKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvcW1sL0Jyb3dz
ZXJXaW5kb3cucW1sCkBAIC0yMDUsNiArMjA1LDI4IEBAIFJlY3RhbmdsZSB7CiAgICAgICAgICAg
ICAgICAgb3BhY2l0eTogMC4zCiAgICAgICAgICAgICAgICAgdmlzaWJsZTogd2ViVmlldy5sb2Fk
UHJvZ3Jlc3MgIT0gMTAwCiAgICAgICAgICAgICB9CisgICAgICAgICAgICBJdGVtIHsKKyAgICAg
ICAgICAgICAgICBpZDogZmF2SWNvbkFyZWEKKyAgICAgICAgICAgICAgICB3aWR0aDogMTYKKyAg
ICAgICAgICAgICAgICBoZWlnaHQ6IDE2CisgICAgICAgICAgICAgICAgYW5jaG9ycyB7CisgICAg
ICAgICAgICAgICAgICAgIGxlZnQ6IHBhcmVudC5sZWZ0CisgICAgICAgICAgICAgICAgICAgIGxl
ZnRNYXJnaW46IDQKKyAgICAgICAgICAgICAgICAgICAgdmVydGljYWxDZW50ZXI6IHBhcmVudC52
ZXJ0aWNhbENlbnRlcgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBJbWFnZSB7
CisgICAgICAgICAgICAgICAgICAgIGlkOiBmYXZJY29uCisgICAgICAgICAgICAgICAgICAgIHNv
dXJjZTogd2ViVmlldy5pY29uCisgICAgICAgICAgICAgICAgICAgIGFuY2hvcnMuZmlsbDogcGFy
ZW50CisgICAgICAgICAgICAgICAgICAgIHZpc2libGU6IHNvdXJjZSAhPSAnJworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBJbWFnZSB7CisgICAgICAgICAgICAgICAgICAgIGlk
OiBkZWZhdWx0RmF2SWNvbgorICAgICAgICAgICAgICAgICAgICBzb3VyY2U6ICcuLi9pY29ucy9m
YXZpY29uLnBuZycKKyAgICAgICAgICAgICAgICAgICAgYW5jaG9ycy5maWxsOiBwYXJlbnQKKyAg
ICAgICAgICAgICAgICAgICAgdmlzaWJsZTogIWZhdkljb24udmlzaWJsZQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIFRleHRJbnB1dCB7CiAgICAgICAgICAg
ICAgICAgaWQ6IGFkZHJlc3NMaW5lCiAgICAgICAgICAgICAgICAgY2xpcDogdHJ1ZQpAQCAtMjE1
LDcgKzIzNyw3IEBAIFJlY3RhbmdsZSB7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIGFuY2hvcnMgewogICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbENlbnRlcjogcGFyZW50
LnZlcnRpY2FsQ2VudGVyCi0gICAgICAgICAgICAgICAgICAgIGxlZnQ6IHBhcmVudC5sZWZ0Cisg
ICAgICAgICAgICAgICAgICAgIGxlZnQ6IGZhdkljb25BcmVhLnJpZ2h0CiAgICAgICAgICAgICAg
ICAgICAgIHJpZ2h0OiBwYXJlbnQucmlnaHQKICAgICAgICAgICAgICAgICAgICAgbWFyZ2luczog
NgogICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwpp
bmRleCAyMDkzNmU4OWM4NTczYjk5NTZjZDU5MDAyMWY0MGIzYmQwOWZhZGQ0Li45M2JkYTcwMDc5
Mjc4MDI0YTNiNjFlODFkNTQ1NWYzNjQxMjBiOTU1IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysr
IGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTEtMTItMTYgIFJhZmFlbCBCcmFuZGFv
ICA8cmFmYWVsLmxvYm9Ab3BlbmJvc3NhLm9yZz4KKworICAgICAgICBbUXRdW1dLMl0gSW1wbGVt
ZW50IGZhdmljb24gc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NzEwODIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIFNvdXJjZS9xdHdlYmtpdC1leHBvcnQubWFwOiBBZGRlZCBuZXcgY2xhc3Nl
cy4KKwogMjAxMS0xMi0xNiAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29t
PgogCiAgICAgICAgIERlLXZpcnR1YWxpemUgZGVzdHJ1Y3RvcnMK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119954</attachid>
            <date>2011-12-19 17:04:29 -0800</date>
            <delta_ts>2011-12-20 04:51:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71082-20111219220427.patch</filename>
            <type>text/plain</type>
            <size>35064</size>
            <attacher name="Rafael Brandao">rafael.lobo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzMjU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IDg5MDgwNmJkMGVm
MTA3NDlhMzg3MDU3NGY1NmNjMjkyYWUzMDU4MjguLmE4NDc1ZjhhMDgyMjZlNjE2NjNjMTY1NWNm
MmVmZjI3YTA3ZDhmMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMTIt
MTkgIFJhZmFlbCBCcmFuZGFvICA8cmFmYWVsLmxvYm9Ab3BlbmJvc3NhLm9yZz4KKworICAgICAg
ICBbUXRdW1dLMl0gSW1wbGVtZW50IGZhdmljb24gc3VwcG9ydAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEwODIKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGRlY2xhcmF0aXZlL3BsdWdpbi5jcHA6Cisg
ICAgICAgIChXZWJLaXRRbWxQbHVnaW46OmluaXRpYWxpemVFbmdpbmUpOiBTZXR1cCBmb3IgdGhl
IFFEZWNsYXJhdGl2ZUltYWdlUHJvdmlkZXIgdG8gZGlzcGxheSBmYXZpY29ucy4KKyAgICAgICAg
SXRzIGhhbmRsZXMgdGhlIGZvbGxvd2luZyB1cmwgZm9ybWF0OiAiaW1hZ2U6Ly93ZWJpY29uLzxp
Y29uSUQ+IzxwYWdlVVJMPiIuCisKIDIwMTEtMTItMTkgIEFsZXhhbmRlciBGw6Zyw7h5ICA8YWhm
QDB4OTAuZGs+CiAKICAgICAgICAgW1F0XSBDbGVhbnVwIFFUTV9OQU1FU1BBQ0UgdXNhZ2UgaW4g
RGV2aWNlT3JpZW50YXRpb25Qcm92aWRlclF0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMTdjMTZjNzk2ZjNkYzg1
YTA0NzgzNzdhZDE0MzY0MTA5NDZlMTc0Ni4uM2E1ZjI1ZmQ1MjJlOThjMDU1NDQzYTZmYzU1ZjVm
ZWQ2MGRlOWYzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDExLTEyLTE5ICBSYWZh
ZWwgQnJhbmRhbyAgPHJhZmFlbC5sb2JvQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgW1F0XVtX
SzJdIEltcGxlbWVudCBmYXZpY29uIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMDgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgYXR0cmlidXRlIHRvIFFRdWlja1dlYlZpZXcgbmFt
ZWQgImljb24iIHRoYXQgc2hvdWxkIGJlIHVzZWQKKyAgICAgICAgYXMgc291cmNlIGZvciBRUXVp
Y2tJbWFnZSBpbiBvcmRlciB0byBkaXNwbGF5IGl0LiBBbGwgaW1hZ2VzCisgICAgICAgIHBvaW50
aW5nIHRvIGl0IHdpbGwgcmVmcmVzaCB3aGVuIHRoZSBpY29uIGlzIHJlYWR5LiBXZSBhbHNvIHVz
ZSBJRHMKKyAgICAgICAgdG8gbWFrZSBpdCBwb3NzaWJsZSB0byBoYW5kbGUgZGlmZmVyZW50IGlj
b25zIGZvciB0aGUgc2FtZSBwYWdlIFVSTAorICAgICAgICBhdCBkaWZmZXJlbnQgdGltZXMgKGku
ZS4gZHluYW1pY2FsbHkgY2hhbmdpbmcgZmF2aWNvbikuCisKKyAgICAgICAgSWNvbkRhdGFiYXNl
IHN0b3JhZ2UgbGllcyBvbiBVSVByb2Nlc3MgYW5kIHRoZSBzeW5jaHJvbm91cyBjYWxsIGZvcgor
ICAgICAgICB0aGUgaWNvbiB0aGF0IGhhcHBlbnMgb24gV2ViSWNvbkRhdGFiYXNlIHdvbid0IG5l
ZWQgdG8gc2VuZCBhbnkgbWVzc2FnZQorICAgICAgICB0byBXZWJQcm9jZXNzLiBUaGUgcGFydCBv
ZiBJY29uRGF0YWJhc2Ugb24gV2ViUHJvY2VzcyBoYW5kbGVzIHRoZSBkb3dubG9hZAorICAgICAg
ICBvZiB0aGUgcmVzb3VyY2Ugd2hlbmV2ZXIgaXQgaXMgbmVlZGVkLiBUaGVuIHRoZSBjb250ZW50
IGRvd25sb2FkZWQgaXMgc2VudAorICAgICAgICB0aHJvdWdoIElQQyB0byB0aGUgYWN0dWFsIGRh
dGFiYXNlLCBvbiBVSVByb2Nlc3MuCisKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHA6CisgICAgICAgIChRUXVpY2tXZWJW
aWV3UHJpdmF0ZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6
X3Ffb25JY29uQ2hhbmdlZEZvclBhZ2VVUkwpOgorICAgICAgICAoUVF1aWNrV2ViVmlld1ByaXZh
dGU6OnNldEljb24pOgorICAgICAgICAoUVF1aWNrV2ViVmlldzo6aWNvbik6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL3F0L3FxdWlja3dlYnZpZXdfcF9wLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9x
d2ViaWNvbmltYWdlcHJvdmlkZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFFXZWJJY29uSW1hZ2VQ
cm92aWRlcjo6UVdlYkljb25JbWFnZVByb3ZpZGVyKToKKyAgICAgICAgKFFXZWJJY29uSW1hZ2VQ
cm92aWRlcjo6flFXZWJJY29uSW1hZ2VQcm92aWRlcik6CisgICAgICAgIChRV2ViSWNvbkltYWdl
UHJvdmlkZXI6OnJlcXVlc3RJbWFnZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xd2Vi
aWNvbmltYWdlcHJvdmlkZXJfcC5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQ29u
dGV4dC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2UuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJJY29uRGF0YWJhc2U6OnN5bmNocm9ub3VzSWNvblVSTEZvclBhZ2VVUkwp
OgorICAgICAgICAoV2ViS2l0OjpXZWJJY29uRGF0YWJhc2U6OmltYWdlRm9yUGFnZVVSTCk6IEFk
ZGVkIGljb25TaXplIHBhcmFtZXRlcgorICAgICAgICBhbmQgYSBkZWZhdWx0IHZhbHVlIGZvciBp
dCB0byBub3QgYnJlYWsgdGhlIG9sZCB1c2FnZS4gVGhlIHN1cHBvcnQgZm9yCisgICAgICAgIG11
bHRpcGxlIHNpemVzIG9mIGZhdmljb25zIGlzIHN0aWxsIG1pc3Npbmcgb24gV2ViQ29yZS4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmg6CisgICAgICAgICogVUlQcm9jZXNz
L3F0L1F0V2ViQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlF0V2ViQ29udGV4dDo6aW5p
dGlhbGl6ZSk6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0V2ViQ29udGV4dC5oOgorICAgICAg
ICAoV2ViS2l0OjpRdFdlYkNvbnRleHQ6Omljb25EYXRhYmFzZSk6CisgICAgICAgICogVUlQcm9j
ZXNzL3F0L1F0V2ViSWNvbkRhdGFiYXNlQ2xpZW50LmNwcDogQWRkZWQuCisgICAgICAgICh0b1F0
V2ViSWNvbkRhdGFiYXNlQ2xpZW50KToKKyAgICAgICAgKFF0V2ViSWNvbkRhdGFiYXNlQ2xpZW50
OjpRdFdlYkljb25EYXRhYmFzZUNsaWVudCk6CisgICAgICAgIChRdFdlYkljb25EYXRhYmFzZUNs
aWVudDo6flF0V2ViSWNvbkRhdGFiYXNlQ2xpZW50KToKKyAgICAgICAgKFF0V2ViSWNvbkRhdGFi
YXNlQ2xpZW50OjpkaWRDaGFuZ2VJY29uRm9yUGFnZVVSTCk6CisgICAgICAgIChRdFdlYkljb25E
YXRhYmFzZUNsaWVudDo6aWNvbkltYWdlRm9yUGFnZVVSTCk6CisgICAgICAgIChRdFdlYkljb25E
YXRhYmFzZUNsaWVudDo6aWNvblVSTEhhc2hGb3JQYWdlVVJMKToKKyAgICAgICAgKFF0V2ViSWNv
bkRhdGFiYXNlQ2xpZW50OjpyZXF1ZXN0SWNvbkZvclBhZ2VVUkwpOgorICAgICAgICAoUXRXZWJJ
Y29uRGF0YWJhc2VDbGllbnQ6OnJldGFpbkljb25Gb3JQYWdlVVJMKToKKyAgICAgICAgKFF0V2Vi
SWNvbkRhdGFiYXNlQ2xpZW50OjpyZWxlYXNlSWNvbkZvclBhZ2VVUkwpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9xdC9RdFdlYkljb25EYXRhYmFzZUNsaWVudC5oOiBBZGRlZC4KKyAgICAgICAgKiBV
SVByb2Nlc3MvcXQvUXRXZWJQYWdlTG9hZENsaWVudC5jcHA6CisgICAgICAgIChRdFdlYlBhZ2VM
b2FkQ2xpZW50OjpkaWRTdGFydFByb2dyZXNzKToKKwogMjAxMS0xMi0xOSAgRXJpYyBDYXJsc29u
ICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBFbmFibGUgPHRyYWNrPiBmb3Ig
TWFjIGJ1aWxkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL3BsdWdp
bi5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL3BsdWdpbi5jcHAKaW5kZXggYmFm
YmI1OTQxYzJkYzVjYTk5ZDM4YWM4ODVhMzEzODQxYTY3YTgwOC4uNjQ2MzhlNDY5NzZiNTkzMzJk
NDVlOTI2YjU3MTc4ODNjNjljOGNhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9kZWNs
YXJhdGl2ZS9wbHVnaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvcGx1
Z2luLmNwcApAQCAtMjUsMTAgKzI1LDEyIEBACiAjaWYgZGVmaW5lZChIQVZFX1dFQktJVDIpCiAj
aW5jbHVkZSAicXF1aWNrd2VicGFnZV9wLmgiCiAjaW5jbHVkZSAicXF1aWNrd2Vidmlld19wLmgi
CisjaW5jbHVkZSAicXdlYmljb25pbWFnZXByb3ZpZGVyX3AuaCIKICNpbmNsdWRlICJxd2VibmF2
aWdhdGlvbnJlcXVlc3RfcC5oIgogI2luY2x1ZGUgInF3ZWJwZXJtaXNzaW9ucmVxdWVzdF9wLmgi
CiAjaW5jbHVkZSAicXdlYnByZWZlcmVuY2VzX3AuaCIKIAorI2luY2x1ZGUgPFF0RGVjbGFyYXRp
dmUvcWRlY2xhcmF0aXZlZW5naW5lLmg+CiAjaW5jbHVkZSA8UXROZXR3b3JrL3FuZXR3b3JrcmVw
bHkuaD4KICNlbmRpZgogCkBAIC0zNyw2ICszOSwxNCBAQCBRVF9CRUdJTl9OQU1FU1BBQ0UKIGNs
YXNzIFdlYktpdFFtbFBsdWdpbiA6IHB1YmxpYyBRRGVjbGFyYXRpdmVFeHRlbnNpb25QbHVnaW4g
ewogICAgIFFfT0JKRUNUCiBwdWJsaWM6CisjaWYgZGVmaW5lZChIQVZFX1dFQktJVDIpCisgICAg
dmlydHVhbCB2b2lkIGluaXRpYWxpemVFbmdpbmUoUURlY2xhcmF0aXZlRW5naW5lKiBlbmdpbmUs
IGNvbnN0IGNoYXIqIHVyaSkKKyAgICB7CisgICAgICAgIFFfQVNTRVJUKFFMYXRpbjFTdHJpbmco
dXJpKSA9PSBRTGF0aW4xU3RyaW5nKCJRdFdlYktpdCIpKTsKKyAgICAgICAgZW5naW5lLT5hZGRJ
bWFnZVByb3ZpZGVyKFFMYXRpbjFTdHJpbmcoIndlYmljb24iKSwgbmV3IFFXZWJJY29uSW1hZ2VQ
cm92aWRlcik7CisgICAgfQorI2VuZGlmCisKICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJUeXBl
cyhjb25zdCBjaGFyKiB1cmkpCiAgICAgewogICAgICAgICBRX0FTU0VSVChRTGF0aW4xU3RyaW5n
KHVyaSkgPT0gUUxhdGluMVN0cmluZygiUXRXZWJLaXQiKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9UYXJnZXQucHJpIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQppbmRleCA1NDFm
OTRhMjI3YWUwZDhmNGU5OGYwOTQ0YzM0YzQ3Y2EyZjRkZWY1Li4yYTRmZTc1NTE2NWM2MTE2OTE4
OTE2MDAzNjhjZGVkMTRkMzE4YWNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQu
cHJpCisrKyBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKQEAgLTI3MSw2ICsyNzEsNyBAQCBI
RUFERVJTICs9IFwKICAgICBVSVByb2Nlc3MvcXQvUXRTR1RpbGVOb2RlLmggXAogICAgIFVJUHJv
Y2Vzcy9xdC9RdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuaCBcCiAgICAgVUlQcm9jZXNzL3F0
L1F0V2ViVW5kb0NvbnRyb2xsZXIuaCBcCisgICAgVUlQcm9jZXNzL3F0L1F0V2ViSWNvbkRhdGFi
YXNlQ2xpZW50LmggXAogICAgIFVJUHJvY2Vzcy9xdC9XZWJDb250ZXh0TWVudVByb3h5UXQuaCBc
CiAgICAgVUlQcm9jZXNzL3F0L1dlYkdlb2xvY2F0aW9uUHJvdmlkZXJRdC5oIFwKICAgICBVSVBy
b2Nlc3MvcXQvV2ViUG9wdXBNZW51UHJveHlRdC5oIFwKQEAgLTUwMiw2ICs1MDMsNyBAQCBTT1VS
Q0VTICs9IFwKICAgICBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwIFwKICAgICBV
SVByb2Nlc3MvQVBJL3F0L3F3ZWJuYXZpZ2F0aW9uaGlzdG9yeS5jcHAgXAogICAgIFVJUHJvY2Vz
cy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAgXAorICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXdlYmlj
b25pbWFnZXByb3ZpZGVyLmNwcCBcCiAgICAgVUlQcm9jZXNzL0FQSS9xdC9xd2VicHJlZmVyZW5j
ZXMuY3BwIFwKICAgICBVSVByb2Nlc3MvQVBJL3F0L3F3ZWJ2aWV3cG9ydGluZm8uY3BwIFwKICAg
ICBVSVByb2Nlc3MvQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5j
cHAgXApAQCAtNjAyLDYgKzYwNCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFVJUHJvY2Vzcy9xdC9X
ZWJQYWdlUHJveHlRdC5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9XZWJQb3B1cE1lbnVQcm94eVF0
LmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1dlYlByZWZlcmVuY2VzUXQuY3BwIFwKKyAgICBVSVBy
b2Nlc3MvcXQvUXRXZWJJY29uRGF0YWJhc2VDbGllbnQuY3BwIFwKICAgICBXZWJQcm9jZXNzL0Fw
cGxpY2F0aW9uQ2FjaGUvV2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuY3BwIFwKICAgICBXZWJQ
cm9jZXNzL0F1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0aW9uTWFuYWdlci5jcHAgXAogICAgIFdl
YlByb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcAppbmRleCBhYTc0NGMyMGRk
YmNiNDk4MDJjNDhiZjA5MzhmM2NkNzdiYjg1ZWQxLi5iZDM4OTQzMzc3MDUzOTExODNhNjY5NTFi
MTY1Yzg1ZmUxMTk0OTY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3FxdWlja3dlYnZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
cXQvcXF1aWNrd2Vidmlldy5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJRdERpYWxv
Z1J1bm5lci5oIgogI2luY2x1ZGUgIlF0RG93bmxvYWRNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiUXRX
ZWJDb250ZXh0LmgiCisjaW5jbHVkZSAiUXRXZWJJY29uRGF0YWJhc2VDbGllbnQuaCIKICNpbmNs
dWRlICJRdFdlYlBhZ2VFdmVudEhhbmRsZXIuaCIKICNpbmNsdWRlICJVdGlsc1F0LmgiCiAjaW5j
bHVkZSAiV2ViQmFja0ZvcndhcmRMaXN0LmgiCkBAIC00Niw2ICs0Nyw3IEBACiAjaW5jbHVkZSA8
UUZpbGVEaWFsb2c+CiAjaW5jbHVkZSA8UXRRdWljay9RUXVpY2tDYW52YXM+CiAjaW5jbHVkZSA8
V0tPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgogCiBRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6UVF1aWNrV2ViVmlld1ByaXZhdGUoUVF1aWNr
V2ViVmlldyogdmlld3BvcnQpCiAgICAgOiBxX3B0cih2aWV3cG9ydCkKQEAgLTg0LDYgKzg2LDEx
IEBAIHZvaWQgUVF1aWNrV2ViVmlld1ByaXZhdGU6OmluaXRpYWxpemUoV0tDb250ZXh0UmVmIGNv
bnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhCiAgICAgcGFnZVVJQ2xpZW50LnJlc2V0KG5ldyBR
dFdlYlBhZ2VVSUNsaWVudCh0b0FQSSh3ZWJQYWdlUHJveHkuZ2V0KCkpLCBxX3B0cikpOwogICAg
IG5hdmlnYXRpb25IaXN0b3J5ID0gYWRvcHRQdHIoUVdlYk5hdmlnYXRpb25IaXN0b3J5UHJpdmF0
ZTo6Y3JlYXRlSGlzdG9yeSh0b0FQSSh3ZWJQYWdlUHJveHkuZ2V0KCkpKSk7CiAKKyAgICBSZWZQ
dHI8UXRXZWJDb250ZXh0PiBjb250ZXh0ID0gUXRXZWJDb250ZXh0OjpkZWZhdWx0Q29udGV4dCgp
OworICAgIFF0V2ViSWNvbkRhdGFiYXNlQ2xpZW50KiBpY29uRGF0YWJhc2UgPSBjb250ZXh0LT5p
Y29uRGF0YWJhc2UoKTsKKyAgICBRT2JqZWN0Ojpjb25uZWN0KGljb25EYXRhYmFzZSwgU0lHTkFM
KGljb25DaGFuZ2VkRm9yUGFnZVVSTChRVXJsLCBRVXJsKSksIHFfcHRyLCBTTE9UKF9xX29uSWNv
bkNoYW5nZWRGb3JQYWdlVVJMKFFVcmwsIFFVcmwpKSk7CisgICAgUU9iamVjdDo6Y29ubmVjdChx
X3B0ciwgU0lHTkFMKHVybENoYW5nZWQoUVVybCkpLCBpY29uRGF0YWJhc2UsIFNMT1QocmVxdWVz
dEljb25Gb3JQYWdlVVJMKFFVcmwpKSk7CisKICAgICAvLyBBbnkgcGFnZSBzZXR0aW5nIHNob3Vs
ZCBwcmVmZXJyYWJsZSBiZSBzZXQgYmVmb3JlIGNyZWF0aW5nIHRoZSBwYWdlLgogICAgIHNldFVz
ZVRyYWRpdGlvbmFsRGVza3RvcEJlaGF2aW91cihmYWxzZSk7CiAgICAgd2ViUGFnZVByb3h5LT5w
YWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJs
ZWQodHJ1ZSk7CkBAIC0xNTgsNiArMTY1LDE1IEBAIHZvaWQgUVF1aWNrV2ViVmlld1ByaXZhdGU6
OmRpZEZpbmlzaEZpcnN0Tm9uRW1wdHlMYXlvdXQoKQogICAgIH0KIH0KIAordm9pZCBRUXVpY2tX
ZWJWaWV3UHJpdmF0ZTo6X3Ffb25JY29uQ2hhbmdlZEZvclBhZ2VVUkwoY29uc3QgUVVybCYgcGFn
ZVVSTCwgY29uc3QgUVVybCYgaWNvblVSTCkKK3sKKyAgICBRX1EoUVF1aWNrV2ViVmlldyk7Cisg
ICAgaWYgKHEtPnVybCgpICE9IHBhZ2VVUkwpCisgICAgICAgIHJldHVybjsKKworICAgIHNldElj
b24oaWNvblVSTCk7Cit9CisKIHZvaWQgUVF1aWNrV2ViVmlld1ByaXZhdGU6Ol9xX3N1c3BlbmQo
KQogewogICAgIHBhZ2VJc1N1c3BlbmRlZCA9IHRydWU7CkBAIC00OTUsNiArNTExLDI5IEBAIHZv
aWQgUVF1aWNrV2ViVmlld1ByaXZhdGU6OnNldFZpZXdJbkF0dGFjaGVkUHJvcGVydGllcyhRT2Jq
ZWN0KiBvYmplY3QpCiAgICAgYXR0YWNoZWQtPnNldFZpZXcocSk7CiB9CiAKK3ZvaWQgUVF1aWNr
V2ViVmlld1ByaXZhdGU6OnNldEljb24oY29uc3QgUVVybCYgaWNvblVSTCkKK3sKKyAgICBRX1Eo
UVF1aWNrV2ViVmlldyk7CisgICAgaWYgKG1faWNvblVSTCA9PSBpY29uVVJMKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBTdHJpbmcgb2xkUGFnZVVSTCA9IFFVcmw6OmZyb21QZXJjZW50RW5jb2Rp
bmcobV9pY29uVVJMLmVuY29kZWRGcmFnbWVudCgpKTsKKyAgICBTdHJpbmcgbmV3UGFnZVVSTCA9
IHdlYlBhZ2VQcm94eS0+bWFpbkZyYW1lKCktPnVybCgpOworCisgICAgaWYgKG9sZFBhZ2VVUkwg
IT0gbmV3UGFnZVVSTCkgeworICAgICAgICBSZWZQdHI8UXRXZWJDb250ZXh0PiBjb250ZXh0ID0g
UXRXZWJDb250ZXh0OjpkZWZhdWx0Q29udGV4dCgpOworICAgICAgICBRdFdlYkljb25EYXRhYmFz
ZUNsaWVudCogaWNvbkRhdGFiYXNlID0gY29udGV4dC0+aWNvbkRhdGFiYXNlKCk7CisgICAgICAg
IGlmICghb2xkUGFnZVVSTC5pc0VtcHR5KCkpCisgICAgICAgICAgICBpY29uRGF0YWJhc2UtPnJl
bGVhc2VJY29uRm9yUGFnZVVSTChvbGRQYWdlVVJMKTsKKworICAgICAgICBpZiAoIW5ld1BhZ2VV
UkwuaXNFbXB0eSgpKQorICAgICAgICAgICAgaWNvbkRhdGFiYXNlLT5yZXRhaW5JY29uRm9yUGFn
ZVVSTChuZXdQYWdlVVJMKTsKKyAgICB9CisKKyAgICBtX2ljb25VUkwgPSBpY29uVVJMOworICAg
IGVtaXQgcS0+aWNvbkNoYW5nZWQobV9pY29uVVJMKTsKK30KKwogYm9vbCBRUXVpY2tXZWJWaWV3
UHJpdmF0ZTo6bmF2aWdhdG9yUXRPYmplY3RFbmFibGVkKCkgY29uc3QKIHsKICAgICByZXR1cm4g
bV9uYXZpZ2F0b3JRdE9iamVjdEVuYWJsZWQ7CkBAIC03NDQsNiArNzgzLDEyIEBAIFFVcmwgUVF1
aWNrV2ViVmlldzo6dXJsKCkgY29uc3QKICAgICByZXR1cm4gUVVybChRU3RyaW5nKG1haW5GcmFt
ZS0+dXJsKCkpKTsKIH0KIAorUVVybCBRUXVpY2tXZWJWaWV3OjppY29uKCkgY29uc3QKK3sKKyAg
ICBRX0QoY29uc3QgUVF1aWNrV2ViVmlldyk7CisgICAgcmV0dXJuIGQtPm1faWNvblVSTDsKK30K
KwogaW50IFFRdWlja1dlYlZpZXc6OmxvYWRQcm9ncmVzcygpIGNvbnN0CiB7CiAgICAgUV9EKGNv
bnN0IFFRdWlja1dlYlZpZXcpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
cXQvcXF1aWNrd2Vidmlld19wLmgKaW5kZXggZTQ0ODQzNzQzNjc1ZTRhMmY3MGE5M2ViYWU1YjQz
YTdkNmM2YzQ2Yi4uNDk5MGJhOGM4ZjU5MTkzMzFjNGQ2NDQwZGQ5ZTk2NTE2Mzc0N2Q4NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3Au
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcC5o
CkBAIC01Myw2ICs1Myw3IEBAIGNsYXNzIFFXRUJLSVRfRVhQT1JUIFFRdWlja1dlYlZpZXcgOiBw
dWJsaWMgUVF1aWNrSXRlbSB7CiAgICAgUV9PQkpFQ1QKICAgICBRX1BST1BFUlRZKFFTdHJpbmcg
dGl0bGUgUkVBRCB0aXRsZSBOT1RJRlkgdGl0bGVDaGFuZ2VkKQogICAgIFFfUFJPUEVSVFkoUVVy
bCB1cmwgUkVBRCB1cmwgTk9USUZZIHVybENoYW5nZWQpCisgICAgUV9QUk9QRVJUWShRVXJsIGlj
b24gUkVBRCBpY29uIE5PVElGWSBpY29uQ2hhbmdlZCBGSU5BTCkKICAgICBRX1BST1BFUlRZKGlu
dCBsb2FkUHJvZ3Jlc3MgUkVBRCBsb2FkUHJvZ3Jlc3MgTk9USUZZIGxvYWRQcm9ncmVzc0NoYW5n
ZWQpCiAgICAgUV9QUk9QRVJUWShib29sIGNhbkdvQmFjayBSRUFEIGNhbkdvQmFjayBOT1RJRlkg
bmF2aWdhdGlvblN0YXRlQ2hhbmdlZCBGSU5BTCkKICAgICBRX1BST1BFUlRZKGJvb2wgY2FuR29G
b3J3YXJkIFJFQUQgY2FuR29Gb3J3YXJkIE5PVElGWSBuYXZpZ2F0aW9uU3RhdGVDaGFuZ2VkIEZJ
TkFMKQpAQCAtNzgsNiArNzksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+UVF1aWNrV2ViVmll
dygpOwogCiAgICAgUVVybCB1cmwoKSBjb25zdDsKKyAgICBRVXJsIGljb24oKSBjb25zdDsKICAg
ICBRU3RyaW5nIHRpdGxlKCkgY29uc3Q7CiAgICAgaW50IGxvYWRQcm9ncmVzcygpIGNvbnN0Owog
CkBAIC0xMTAsNiArMTEyLDcgQEAgUV9TSUdOQUxTOgogICAgIHZvaWQgbG9hZEZhaWxlZChRUXVp
Y2tXZWJWaWV3OjpFcnJvclR5cGUgZXJyb3JUeXBlLCBpbnQgZXJyb3JDb2RlLCBjb25zdCBRVXJs
JiB1cmwpOwogICAgIHZvaWQgbG9hZFByb2dyZXNzQ2hhbmdlZChpbnQgcHJvZ3Jlc3MpOwogICAg
IHZvaWQgdXJsQ2hhbmdlZChjb25zdCBRVXJsJiB1cmwpOworICAgIHZvaWQgaWNvbkNoYW5nZWQo
Y29uc3QgUVVybCYgaWNvblVSTCk7CiAgICAgdm9pZCBsaW5rSG92ZXJlZChjb25zdCBRVXJsJiB1
cmwsIGNvbnN0IFFTdHJpbmcmIHRpdGxlKTsKICAgICB2b2lkIG5hdmlnYXRpb25TdGF0ZUNoYW5n
ZWQoKTsKICAgICB2b2lkIG5hdmlnYXRpb25SZXF1ZXN0ZWQoUVdlYk5hdmlnYXRpb25SZXF1ZXN0
KiByZXF1ZXN0KTsKQEAgLTEzMiw2ICsxMzUsNyBAQCBwcml2YXRlOgogICAgIFFfUFJJVkFURV9T
TE9UKGRfZnVuYygpLCB2b2lkIF9xX29uT3BlblBhbmVsRmluaXNoZWQoaW50IHJlc3VsdCkpOwog
ICAgIFFfUFJJVkFURV9TTE9UKGRfZnVuYygpLCB2b2lkIF9xX29uVmlzaWJsZUNoYW5nZWQoKSk7
CiAgICAgUV9QUklWQVRFX1NMT1QoZF9mdW5jKCksIHZvaWQgX3Ffb25SZWNlaXZlZFJlc3BvbnNl
RnJvbURvd25sb2FkKFFXZWJEb3dubG9hZEl0ZW0qKSk7CisgICAgUV9QUklWQVRFX1NMT1QoZF9m
dW5jKCksIHZvaWQgX3Ffb25JY29uQ2hhbmdlZEZvclBhZ2VVUkwoY29uc3QgUVVybCYsIGNvbnN0
IFFVcmwmKSk7CiAgICAgLy8gSGlkZXMgUU9iamVjdDo6ZF9wdHIgYWxsb3dpbmcgdXMgdG8gdXNl
IHRoZSBjb252ZW5pZW5jZSBtYWNyb3MuCiAgICAgUVNjb3BlZFBvaW50ZXI8UVF1aWNrV2ViVmll
d1ByaXZhdGU+IGRfcHRyOwogICAgIFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWwqIG1fZXhwZXJp
bWVudGFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVp
Y2t3ZWJ2aWV3X3BfcC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3
ZWJ2aWV3X3BfcC5oCmluZGV4IGE5NmQ0MzQ2MjA0NGQ0ZDM5NzA0ZGIxN2JkMzA4MGNkM2NhNWM1
YTkuLjNiOTk5MjgyYjk3MjU5ZTA2YzgzNTVhYTJkMTA4Y2E4MmFiZjc0ZjcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wX3AuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcF9wLmgKQEAg
LTg5LDYgKzg5LDcgQEAgcHVibGljOgogICAgIHZvaWQgX3Ffb25PcGVuUGFuZWxGaW5pc2hlZChp
bnQgcmVzdWx0KTsKICAgICB2b2lkIF9xX29uVmlzaWJsZUNoYW5nZWQoKTsKICAgICB2b2lkIF9x
X29uUmVjZWl2ZWRSZXNwb25zZUZyb21Eb3dubG9hZChRV2ViRG93bmxvYWRJdGVtKik7CisgICAg
dm9pZCBfcV9vbkljb25DaGFuZ2VkRm9yUGFnZVVSTChjb25zdCBRVXJsJiBwYWdlVVJMLCBjb25z
dCBRVXJsJiBpY29uVVJMU3RyaW5nKTsKIAogICAgIHZvaWQgY2hvb3NlRmlsZXMoV0tPcGVuUGFu
ZWxSZXN1bHRMaXN0ZW5lclJlZiwgY29uc3QgUVN0cmluZ0xpc3QmIHNlbGVjdGVkRmlsZU5hbWVz
LCBRdFdlYlBhZ2VVSUNsaWVudDo6RmlsZUNob29zZXJUeXBlKTsKICAgICB2b2lkIHJ1bkphdmFT
Y3JpcHRBbGVydChjb25zdCBRU3RyaW5nJik7CkBAIC05Nyw2ICs5OCw3IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgc2V0VXNlVHJhZGl0aW9uYWxEZXNrdG9wQmVoYXZpb3VyKGJvb2wgZW5hYmxlKTsK
ICAgICB2b2lkIHNldFZpZXdJbkF0dGFjaGVkUHJvcGVydGllcyhRT2JqZWN0Kik7CisgICAgdm9p
ZCBzZXRJY29uKGNvbnN0IFFVcmwmKTsKIAogICAgIGJvb2wgbmF2aWdhdG9yUXRPYmplY3RFbmFi
bGVkKCkgY29uc3Q7CiAgICAgdm9pZCBzZXROYXZpZ2F0b3JRdE9iamVjdEVuYWJsZWQoYm9vbCk7
CkBAIC0xNjAsNiArMTYyLDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgdXNlVHJhZGl0aW9uYWxE
ZXNrdG9wQmVoYXZpb3VyOwogICAgIGJvb2wgbV9uYXZpZ2F0b3JRdE9iamVjdEVuYWJsZWQ7Cisg
ICAgUVVybCBtX2ljb25VUkw7CiB9OwogCiAjZW5kaWYgLy8gcXF1aWNrd2Vidmlld19wX3BfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2ViaWNvbmltYWdl
cHJvdmlkZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2ViaWNvbmlt
YWdlcHJvdmlkZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY2M2MzOGUxMGZjZGZmMmM5YzRmOTEzYjIyZjdi
MGI0OWY4YTliYTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3F3ZWJpY29uaW1hZ2Vwcm92aWRlci5jcHAKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAg
ICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
ICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInF3ZWJpY29uaW1h
Z2Vwcm92aWRlcl9wLmgiCisKKyNpbmNsdWRlICJRdFdlYkNvbnRleHQuaCIKKyNpbmNsdWRlICJR
dFdlYkljb25EYXRhYmFzZUNsaWVudC5oIgorI2luY2x1ZGUgPFF0Q29yZS9RVXJsPgorI2luY2x1
ZGUgPFF0R3VpL1FJbWFnZT4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwordXNp
bmcgbmFtZXNwYWNlIFdlYktpdDsKKworUVdlYkljb25JbWFnZVByb3ZpZGVyOjpRV2ViSWNvbklt
YWdlUHJvdmlkZXIoKQorICAgIDogUURlY2xhcmF0aXZlSW1hZ2VQcm92aWRlcihRRGVjbGFyYXRp
dmVJbWFnZVByb3ZpZGVyOjpJbWFnZSkKK3sKK30KKworUVdlYkljb25JbWFnZVByb3ZpZGVyOjp+
UVdlYkljb25JbWFnZVByb3ZpZGVyKCkKK3sKK30KKworUUltYWdlIFFXZWJJY29uSW1hZ2VQcm92
aWRlcjo6cmVxdWVzdEltYWdlKGNvbnN0IFFTdHJpbmcmIGlkLCBRU2l6ZSogc2l6ZSwgY29uc3Qg
UVNpemUmIHJlcXVlc3RlZFNpemUpCit7CisgICAgUmVmUHRyPFF0V2ViQ29udGV4dD4gY29udGV4
dCA9IFF0V2ViQ29udGV4dDo6ZGVmYXVsdENvbnRleHQoKTsKKyAgICBRdFdlYkljb25EYXRhYmFz
ZUNsaWVudCogaWNvbkRhdGFiYXNlID0gY29udGV4dC0+aWNvbkRhdGFiYXNlKCk7CisKKyAgICBR
U3RyaW5nIGVuY29kZWRJY29uVXJsID0gaWQ7CisgICAgZW5jb2RlZEljb25VcmwucmVtb3ZlKDAs
IGVuY29kZWRJY29uVXJsLmluZGV4T2YoJyMnKSArIDEpOworICAgIFN0cmluZyBwYWdlVVJMID0g
UVVybDo6ZnJvbVBlcmNlbnRFbmNvZGluZyhlbmNvZGVkSWNvblVybC50b1V0ZjgoKSk7CisKKyAg
ICBRSW1hZ2UgaWNvbiA9IHJlcXVlc3RlZFNpemUuaXNWYWxpZCgpID8gaWNvbkRhdGFiYXNlLT5p
Y29uSW1hZ2VGb3JQYWdlVVJMKHBhZ2VVUkwsIHJlcXVlc3RlZFNpemUpIDogaWNvbkRhdGFiYXNl
LT5pY29uSW1hZ2VGb3JQYWdlVVJMKHBhZ2VVUkwpOworICAgIEFTU0VSVCghaWNvbi5pc051bGwo
KSk7CisKKyAgICBpZiAoc2l6ZSkKKyAgICAgICAgKnNpemUgPSBpY29uLnNpemUoKTsKKworICAg
IHJldHVybiBpY29uOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9xdC9xd2ViaWNvbmltYWdlcHJvdmlkZXJfcC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9xdC9xd2ViaWNvbmltYWdlcHJvdmlkZXJfcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg4MTVkN2I3NmI2
M2Q1NDMyNjFiNzk3NTljZTMzMGY1NzYxNjQyNzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJpY29uaW1hZ2Vwcm92aWRlcl9wLmgKQEAgLTAs
MCArMSwzMyBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBxd2ViaWNvbmltYWdlcHJv
dmlkZXJfcF9oCisjZGVmaW5lIHF3ZWJpY29uaW1hZ2Vwcm92aWRlcl9wX2gKKworI2luY2x1ZGUg
InF3ZWJraXRnbG9iYWwuaCIKKyNpbmNsdWRlIDxRdERlY2xhcmF0aXZlL1FEZWNsYXJhdGl2ZUlt
YWdlUHJvdmlkZXI+CisKK2NsYXNzIFFXRUJLSVRfRVhQT1JUIFFXZWJJY29uSW1hZ2VQcm92aWRl
ciA6IHB1YmxpYyBRRGVjbGFyYXRpdmVJbWFnZVByb3ZpZGVyIHsKK3B1YmxpYzoKKyAgICBRV2Vi
SWNvbkltYWdlUHJvdmlkZXIoKTsKKyAgICB+UVdlYkljb25JbWFnZVByb3ZpZGVyKCk7CisgICAg
UUltYWdlIHJlcXVlc3RJbWFnZShjb25zdCBRU3RyaW5nJiBpZCwgUVNpemUqIHNpemUsIGNvbnN0
IFFTaXplJiByZXF1ZXN0ZWRTaXplKTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJDb250ZXh0LmgKaW5kZXggNzA0Mjg1ZWVlNzVmYzE2YzBiNTNjOWZiYjBmNzZmNTEzMjRl
YjNlMi4uMjFmMjE5MTQ5YWM5M2U5MjVlZWRhN2VhZWM1YjE0ODlhNWY5YjZmMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5oCkBAIC0xNzEsNiArMTcxLDcgQEAgcHVibGljOgog
CiAgICAgdm9pZCBzZXREYXRhYmFzZURpcmVjdG9yeShjb25zdCBTdHJpbmcmIGRpcikgeyBtX292
ZXJyaWRlRGF0YWJhc2VEaXJlY3RvcnkgPSBkaXI7IH0KICAgICB2b2lkIHNldEljb25EYXRhYmFz
ZVBhdGgoY29uc3QgU3RyaW5nJik7CisgICAgU3RyaW5nIGljb25EYXRhYmFzZVBhdGgoKSBjb25z
dDsKICAgICB2b2lkIHNldExvY2FsU3RvcmFnZURpcmVjdG9yeShjb25zdCBTdHJpbmcmIGRpcikg
eyBtX292ZXJyaWRlTG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gZGlyOyB9CiAKICAgICBTdHJpbmcg
b3ZlcnJpZGVXZWJJbnNwZWN0b3JCYXNlRGlyZWN0b3J5KCkgY29uc3QgeyByZXR1cm4gbV9vdmVy
cmlkZVdlYkluc3BlY3RvckJhc2VEaXJlY3Rvcnk7IH0KQEAgLTIzNiw3ICsyMzcsNiBAQCBwcml2
YXRlOgogICAgIFN0cmluZyBkYXRhYmFzZURpcmVjdG9yeSgpIGNvbnN0OwogICAgIFN0cmluZyBw
bGF0Zm9ybURlZmF1bHREYXRhYmFzZURpcmVjdG9yeSgpIGNvbnN0OwogCi0gICAgU3RyaW5nIGlj
b25EYXRhYmFzZVBhdGgoKSBjb25zdDsKICAgICBTdHJpbmcgcGxhdGZvcm1EZWZhdWx0SWNvbkRh
dGFiYXNlUGF0aCgpIGNvbnN0OwogCiAgICAgU3RyaW5nIGxvY2FsU3RvcmFnZURpcmVjdG9yeSgp
IGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRh
YmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmNwcApp
bmRleCA4NDI3Y2EzNWUwODUzYmRkZmNmY2JkZTYyNDgzNTg0MWEzNWJhMTQ4Li44MDE2Y2ZiZDZl
N2UxZjc2OGFhOGQxNmMyNWVjYzdmNmIwNzkzNWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmNwcApAQCAtMTMzLDkgKzEzMywxNCBAQCB2b2lkIFdlYklj
b25EYXRhYmFzZTo6c3luY2hyb25vdXNJY29uRGF0YUZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJiwg
Q29yZUlQQzo6RGF0YQogICAgIGljb25EYXRhID0gQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSgpOwog
fQogCi12b2lkIFdlYkljb25EYXRhYmFzZTo6c3luY2hyb25vdXNJY29uVVJMRm9yUGFnZVVSTChj
b25zdCBTdHJpbmcmLCBTdHJpbmcmIGljb25VUkwpCit2b2lkIFdlYkljb25EYXRhYmFzZTo6c3lu
Y2hyb25vdXNJY29uVVJMRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmIHBhZ2VVUkwsIFN0cmluZyYg
aWNvblVSTCkKIHsKLSAgICBpY29uVVJMID0gU3RyaW5nKCk7CisgICAgaWYgKCFtX2ljb25EYXRh
YmFzZUltcGwpIHsKKyAgICAgICAgaWNvblVSTCA9IFN0cmluZygpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWNvblVSTCA9IG1faWNvbkRhdGFiYXNlSW1wbC0+c3luY2hyb25vdXNJ
Y29uVVJMRm9yUGFnZVVSTChwYWdlVVJMKTsKIH0KIAogdm9pZCBXZWJJY29uRGF0YWJhc2U6OnN5
bmNocm9ub3VzSWNvbkRhdGFLbm93bkZvckljb25VUkwoY29uc3QgU3RyaW5nJiwgYm9vbCYgaWNv
bkRhdGFLbm93bikgY29uc3QKQEAgLTE3NSwxNCArMTgwLDE0IEBAIHZvaWQgV2ViSWNvbkRhdGFi
YXNlOjpnZXRMb2FkRGVjaXNpb25Gb3JJY29uVVJMKGNvbnN0IFN0cmluZyYgaWNvblVSTCwgdWlu
dDY0X3QKICAgICBtX3dlYkNvbnRleHQtPnNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2Vi
SWNvbkRhdGFiYXNlUHJveHk6OlJlY2VpdmVkSWNvbkxvYWREZWNpc2lvbigoaW50KWRlY2lzaW9u
LCBjYWxsYmFja0lEKSk7CiB9CiAKLUltYWdlKiBXZWJJY29uRGF0YWJhc2U6OmltYWdlRm9yUGFn
ZVVSTChjb25zdCBTdHJpbmcmIHBhZ2VVUkwpCitJbWFnZSogV2ViSWNvbkRhdGFiYXNlOjppbWFn
ZUZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJiBwYWdlVVJMLCBjb25zdCBXZWJDb3JlOjpJbnRTaXpl
JiBpY29uU2l6ZSkKIHsKICAgICBpZiAoIW1fd2ViQ29udGV4dCB8fCAhbV9pY29uRGF0YWJhc2VJ
bXBsIHx8ICFtX2ljb25EYXRhYmFzZUltcGwtPmlzT3BlbigpIHx8IHBhZ2VVUkwuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm4gMDsgICAgCiAKICAgICAvLyBUaGUgV2ViQ29yZSBJY29uRGF0YWJh
c2UgaWdub3JlcyB0aGUgcGFzc2VkIGluIHNpemUgcGFyYW1ldGVyLgogICAgIC8vIElmIHRoYXQg
Y2hhbmdlcyB3ZSdsbCBuZWVkIHRvIHJldGhpbmsgaG93IHRoaXMgQVBJIGlzIGV4cG9zZWQuCi0g
ICAgcmV0dXJuIG1faWNvbkRhdGFiYXNlSW1wbC0+c3luY2hyb25vdXNJY29uRm9yUGFnZVVSTChw
YWdlVVJMLCBXZWJDb3JlOjpJbnRTaXplKDMyLCAzMikpOworICAgIHJldHVybiBtX2ljb25EYXRh
YmFzZUltcGwtPnN5bmNocm9ub3VzSWNvbkZvclBhZ2VVUkwocGFnZVVSTCwgaWNvblNpemUpOwog
fQogCiB2b2lkIFdlYkljb25EYXRhYmFzZTo6cmVtb3ZlQWxsSWNvbnMoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5oCmluZGV4IDBjMjQzZWYwODcyMDIxOWJhMTA1
ZGU0YjFhYzZkZDQ3N2Q2ODQ5YWQuLmI3NGMyMTA4NjQ4NTE3MDA5NjczNDk4MGRiMTcwNTlmMmNk
ZTI4MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJh
c2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmgKQEAg
LTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiV2ViSWNv
bkRhdGFiYXNlQ2xpZW50LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9JY29uRGF0YWJhc2VDbGllbnQu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpA
QCAtNzYsNyArNzcsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBnZXRMb2FkRGVjaXNpb25G
b3JJY29uVVJMKGNvbnN0IFN0cmluZyYsIHVpbnQ2NF90IGNhbGxiYWNrSUQpOwogCi0gICAgV2Vi
Q29yZTo6SW1hZ2UqIGltYWdlRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmKTsKKyAgICBXZWJDb3Jl
OjpJbWFnZSogaW1hZ2VGb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYsIGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIGljb25TaXplID0gV2ViQ29yZTo6SW50U2l6ZSgzMiwgMzIpKTsKICAgICAKICAgICB2
b2lkIHJlbW92ZUFsbEljb25zKCk7CiAgICAgdm9pZCBjaGVja0ludGVncml0eUJlZm9yZU9wZW5p
bmcoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYkNvbnRl
eHQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViQ29udGV4dC5jcHAKaW5k
ZXggYTFmZjFkMjBkMWUwYmU0YjA0YmM1MGJkMTczNzE5MTVmNTcwMThhYy4uYmMzMjY2ODczZWZj
NjQ2NzRmYWUzNTk3NTAyZjZkYzI3MmYxYmFmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL3F0L1F0V2ViQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L1F0V2ViQ29udGV4dC5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgIk11
dGFibGVBcnJheS5oIgogI2luY2x1ZGUgIlF0RG93bmxvYWRNYW5hZ2VyLmgiCisjaW5jbHVkZSAi
UXRXZWJJY29uRGF0YWJhc2VDbGllbnQuaCIKICNpbmNsdWRlICJXS0FQSUNhc3QuaCIKICNpbmNs
dWRlICJXZWJDb250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCkBAIC05Myw2ICs5
NCw3IEBAIHZvaWQgUXRXZWJDb250ZXh0Ojpwb3N0TWVzc2FnZVRvTmF2aWdhdG9yUXRPYmplY3Qo
V2ViUGFnZVByb3h5KiB3ZWJQYWdlUHJveHksIGNvCiB2b2lkIFF0V2ViQ29udGV4dDo6aW5pdGlh
bGl6ZSgpCiB7CiAgICAgbV9kb3dubG9hZE1hbmFnZXIgPSBhZG9wdFB0cihuZXcgUXREb3dubG9h
ZE1hbmFnZXIobV9jb250ZXh0LmdldCgpKSk7CisgICAgbV9pY29uRGF0YWJhc2UgPSBhZG9wdFB0
cihuZXcgUXRXZWJJY29uRGF0YWJhc2VDbGllbnQobV9jb250ZXh0LmdldCgpKSk7CiAgICAgaW5p
dGlhbGl6ZUNvbnRleHRJbmplY3RlZEJ1bmRsZUNsaWVudCgpOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJDb250ZXh0LmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvcXQvUXRXZWJDb250ZXh0LmgKaW5kZXggOTdjZTI2ZDZmOWEyMTI0MWZiNzA1
NWVjYWQ5YmYwZDg0MTllYTQyOS4uZWFiM2Q3YzQ3Njg4NTlhZmZmYmNmNjJiYWQ2YmUxOGIzZGFj
NmYwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViQ29udGV4
dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYkNvbnRleHQuaApAQCAt
MzUsNiArMzUsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgUGFnZUNsaWVudDsKIGNs
YXNzIFF0RG93bmxvYWRNYW5hZ2VyOworY2xhc3MgUXRXZWJJY29uRGF0YWJhc2VDbGllbnQ7CiBj
bGFzcyBXZWJDb250ZXh0OwogY2xhc3MgV2ViUGFnZUdyb3VwOwogY2xhc3MgV2ViUGFnZVByb3h5
OwpAQCAtNDksNiArNTAsNyBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxXZWJQYWdlUHJveHk+
IGNyZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCosIFdlYlBhZ2VHcm91cCopOwogCiAgICAgUXREb3du
bG9hZE1hbmFnZXIqIGRvd25sb2FkTWFuYWdlcigpIHsgcmV0dXJuIG1fZG93bmxvYWRNYW5hZ2Vy
LmdldCgpOyB9CisgICAgUXRXZWJJY29uRGF0YWJhc2VDbGllbnQqIGljb25EYXRhYmFzZSgpIHsg
cmV0dXJuIG1faWNvbkRhdGFiYXNlLmdldCgpOyB9CiAKICAgICB2b2lkIHNldE5hdmlnYXRvclF0
T2JqZWN0RW5hYmxlZChXZWJQYWdlUHJveHkqLCBib29sKTsKICAgICB2b2lkIHBvc3RNZXNzYWdl
VG9OYXZpZ2F0b3JRdE9iamVjdChXZWJQYWdlUHJveHkqLCBjb25zdCBRU3RyaW5nJik7CkBAIC02
Niw2ICs2OCw3IEBAIHByaXZhdGU6CiAKICAgICBSZWZQdHI8V2ViQ29udGV4dD4gbV9jb250ZXh0
OwogICAgIE93blB0cjxRdERvd25sb2FkTWFuYWdlcj4gbV9kb3dubG9hZE1hbmFnZXI7CisgICAg
T3duUHRyPFF0V2ViSWNvbkRhdGFiYXNlQ2xpZW50PiBtX2ljb25EYXRhYmFzZTsKIH07CiAKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYkljb25EYXRhYmFz
ZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJJY29uRGF0YWJh
c2VDbGllbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE3MWU5NzFiNmE4ZTRmYmQwYjk2ZDkyNGQ0ZDhiNjQx
ZWUwNmFjODIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQv
UXRXZWJJY29uRGF0YWJhc2VDbGllbnQuY3BwCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICAgIENv
cHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUXRXZWJJY29uRGF0YWJh
c2VDbGllbnQuaCIKKworI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2lu
Y2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgIldLVVJMUXQuaCIKKyNpbmNsdWRlICJX
ZWJDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViSWNvbkRhdGFiYXNlLmgiCisjaW5jbHVkZSA8UXRD
b3JlL1FIYXNoPgorI2luY2x1ZGUgPFF0Q29yZS9RT2JqZWN0PgorI2luY2x1ZGUgPFF0Q29yZS9R
VXJsPgorI2luY2x1ZGUgPFF0R3VpL1FJbWFnZT4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsK
Kworc3RhdGljIGlubGluZSBRdFdlYkljb25EYXRhYmFzZUNsaWVudCogdG9RdFdlYkljb25EYXRh
YmFzZUNsaWVudChjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIEFTU0VSVChjbGllbnRJ
bmZvKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxRdFdlYkljb25EYXRhYmFzZUNsaWVu
dCo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKTsKK30KKworUXRXZWJJY29uRGF0YWJh
c2VDbGllbnQ6OlF0V2ViSWNvbkRhdGFiYXNlQ2xpZW50KFdlYkNvbnRleHQqIGNvbnRleHQpCit7
CisgICAgLy8gVGhlIHNldHRlciBjYWxscyB0aGUgZ2V0dGVyIGhlcmUgYXMgaXQgdHJpZ2dlcnMg
dGhlIHN0YXJ0dXAgb2YgdGhlIGljb24gZGF0YWJhc2UuCisgICAgY29udGV4dC0+c2V0SWNvbkRh
dGFiYXNlUGF0aChjb250ZXh0LT5pY29uRGF0YWJhc2VQYXRoKCkpOworICAgIG1faWNvbkRhdGFi
YXNlID0gY29udGV4dC0+aWNvbkRhdGFiYXNlKCk7CisKKyAgICBXS0ljb25EYXRhYmFzZUNsaWVu
dCBpY29uRGF0YWJhc2VDbGllbnQ7CisgICAgbWVtc2V0KCZpY29uRGF0YWJhc2VDbGllbnQsIDAs
IHNpemVvZihXS0ljb25EYXRhYmFzZUNsaWVudCkpOworICAgIGljb25EYXRhYmFzZUNsaWVudC52
ZXJzaW9uID0ga1dLSWNvbkRhdGFiYXNlQ2xpZW50Q3VycmVudFZlcnNpb247CisgICAgaWNvbkRh
dGFiYXNlQ2xpZW50LmNsaWVudEluZm8gPSB0aGlzOworICAgIGljb25EYXRhYmFzZUNsaWVudC5k
aWRDaGFuZ2VJY29uRm9yUGFnZVVSTCA9IGRpZENoYW5nZUljb25Gb3JQYWdlVVJMOworICAgIFdL
SWNvbkRhdGFiYXNlU2V0SWNvbkRhdGFiYXNlQ2xpZW50KHRvQVBJKG1faWNvbkRhdGFiYXNlKSwg
Jmljb25EYXRhYmFzZUNsaWVudCk7Cit9CisKK1F0V2ViSWNvbkRhdGFiYXNlQ2xpZW50Ojp+UXRX
ZWJJY29uRGF0YWJhc2VDbGllbnQoKQoreworfQorCit2b2lkIFF0V2ViSWNvbkRhdGFiYXNlQ2xp
ZW50OjpkaWRDaGFuZ2VJY29uRm9yUGFnZVVSTChXS0ljb25EYXRhYmFzZVJlZiBpY29uRGF0YWJh
c2UsIFdLVVJMUmVmIHBhZ2VVUkwsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgUVVy
bCBxVXJsID0gV0tVUkxDb3B5UVVybChwYWdlVVJMKTsKKyAgICB0b1F0V2ViSWNvbkRhdGFiYXNl
Q2xpZW50KGNsaWVudEluZm8pLT5yZXF1ZXN0SWNvbkZvclBhZ2VVUkwocVVybCk7Cit9CisKK1FJ
bWFnZSBRdFdlYkljb25EYXRhYmFzZUNsaWVudDo6aWNvbkltYWdlRm9yUGFnZVVSTChjb25zdCBT
dHJpbmcmIHBhZ2VVUkwsIGNvbnN0IFFTaXplJiBpY29uU2l6ZSkKK3sKKyAgICBNdXRleExvY2tl
ciBsb2NrZXIobV9pbWFnZUxvY2spOworCisgICAgV2ViQ29yZTo6SW50U2l6ZSBzaXplKGljb25T
aXplLndpZHRoKCksIGljb25TaXplLmhlaWdodCgpKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SW1h
Z2U+IGltYWdlID0gbV9pY29uRGF0YWJhc2UtPmltYWdlRm9yUGFnZVVSTChwYWdlVVJMLCBzaXpl
KTsKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gUUltYWdlKCk7CisKKyAgICBRUGl4
bWFwKiBuYXRpdmVJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwor
ICAgIGlmICghbmF0aXZlSW1hZ2UpCisgICAgICAgIHJldHVybiBRSW1hZ2UoKTsKKworICAgIHJl
dHVybiBuYXRpdmVJbWFnZS0+dG9JbWFnZSgpOworfQorCit1bnNpZ25lZCBRdFdlYkljb25EYXRh
YmFzZUNsaWVudDo6aWNvblVSTEhhc2hGb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYgcGFnZVVSTCkK
K3sKKyAgICBTdHJpbmcgaWNvblVSTDsKKyAgICBtX2ljb25EYXRhYmFzZS0+c3luY2hyb25vdXNJ
Y29uVVJMRm9yUGFnZVVSTChwYWdlVVJMLCBpY29uVVJMKTsKKyAgICByZXR1cm4gU3RyaW5nSGFz
aDo6aGFzaChpY29uVVJMKTsKK30KKwordm9pZCBRdFdlYkljb25EYXRhYmFzZUNsaWVudDo6cmVx
dWVzdEljb25Gb3JQYWdlVVJMKGNvbnN0IFFVcmwmIHBhZ2VVUkwpCit7CisgICAgU3RyaW5nIHBh
Z2VVUkxTdHJpbmcgPSBXZWJDb3JlOjpLVVJMKHBhZ2VVUkwpLnN0cmluZygpOworICAgIGlmIChp
Y29uSW1hZ2VGb3JQYWdlVVJMKHBhZ2VVUkxTdHJpbmcpLmlzTnVsbCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICB1bnNpZ25lZCBpY29uSUQgPSBpY29uVVJMSGFzaEZvclBhZ2VVUkwocGFnZVVS
TFN0cmluZyk7CisgICAgUVVybCB1cmw7CisgICAgdXJsLnNldFNjaGVtZShRU3RyaW5nTGl0ZXJh
bCgiaW1hZ2UiKSk7CisgICAgdXJsLnNldEhvc3QoUVN0cmluZ0xpdGVyYWwoIndlYmljb24iKSk7
CisgICAgdXJsLnNldFBhdGgoUVN0cmluZzo6bnVtYmVyKGljb25JRCkucHJlcGVuZCgnLycpKTsK
KyAgICB1cmwuc2V0RW5jb2RlZEZyYWdtZW50KHBhZ2VVUkwudG9FbmNvZGVkKCkpOworICAgIGVt
aXQgaWNvbkNoYW5nZWRGb3JQYWdlVVJMKHBhZ2VVUkwsIHVybCk7Cit9CisKK3ZvaWQgUXRXZWJJ
Y29uRGF0YWJhc2VDbGllbnQ6OnJldGFpbkljb25Gb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYgcGFn
ZVVSTCkKK3sKKyAgICBtX2ljb25EYXRhYmFzZS0+cmV0YWluSWNvbkZvclBhZ2VVUkwocGFnZVVS
TCk7Cit9CisKK3ZvaWQgUXRXZWJJY29uRGF0YWJhc2VDbGllbnQ6OnJlbGVhc2VJY29uRm9yUGFn
ZVVSTChjb25zdCBTdHJpbmcmIHBhZ2VVUkwpCit7CisgICAgbV9pY29uRGF0YWJhc2UtPnJlbGVh
c2VJY29uRm9yUGFnZVVSTChwYWdlVVJMKTsKK30KKworI2luY2x1ZGUgIm1vY19RdFdlYkljb25E
YXRhYmFzZUNsaWVudC5jcHAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
cXQvUXRXZWJJY29uRGF0YWJhc2VDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9x
dC9RdFdlYkljb25EYXRhYmFzZUNsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJjZDBhOTBlMzk4ZmIwNDEw
ZmI5ZDQyOGVlYzRjMTM5MWRlNjhlZWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvcXQvUXRXZWJJY29uRGF0YWJhc2VDbGllbnQuaApAQCAtMCwwICsxLDY2IEBA
CisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisqLworCisKKyNpZm5kZWYgUXRXZWJJY29uRGF0YWJhc2VDbGllbnRf
aAorI2RlZmluZSBRdFdlYkljb25EYXRhYmFzZUNsaWVudF9oCisKKyNpbmNsdWRlICJXS0ljb25E
YXRhYmFzZS5oIgorI2luY2x1ZGUgInF3ZWJraXRnbG9iYWwuaCIKKyNpbmNsdWRlIDxRdENvcmUv
UU9iamVjdD4KKyNpbmNsdWRlIDxRdENvcmUvUVNpemU+CisjaW5jbHVkZSA8d3RmL1RocmVhZGlu
Zy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitRVF9CRUdJTl9OQU1FU1BB
Q0UKK2NsYXNzIFFJbWFnZTsKK2NsYXNzIFFVcmw7CitRVF9FTkRfTkFNRVNQQUNFCisKK25hbWVz
cGFjZSBXZWJLaXQgeworY2xhc3MgV2ViQ29udGV4dDsKK2NsYXNzIFdlYkljb25EYXRhYmFzZTsK
KworY2xhc3MgUXRXZWJJY29uRGF0YWJhc2VDbGllbnQgOiBwdWJsaWMgUU9iamVjdCB7CisgICAg
UV9PQkpFQ1QKKworcHVibGljOgorICAgIFF0V2ViSWNvbkRhdGFiYXNlQ2xpZW50KFdlYktpdDo6
V2ViQ29udGV4dCopOworICAgIH5RdFdlYkljb25EYXRhYmFzZUNsaWVudCgpOworCisgICAgUUlt
YWdlIGljb25JbWFnZUZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJiBwYWdlVVJMLCBjb25zdCBRU2l6
ZSYgaWNvblNpemUgPSBRU2l6ZSgzMiwgMzIpKTsKKyAgICB2b2lkIHJldGFpbkljb25Gb3JQYWdl
VVJMKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgcmVsZWFzZUljb25Gb3JQYWdlVVJMKGNvbnN0
IFN0cmluZyYpOworCitwdWJsaWMgUV9TTE9UUzoKKyAgICB2b2lkIHJlcXVlc3RJY29uRm9yUGFn
ZVVSTChjb25zdCBRVXJsJik7CisKK3B1YmxpYzoKKyAgICBRX1NJR05BTCB2b2lkIGljb25DaGFu
Z2VkRm9yUGFnZVVSTChjb25zdCBRVXJsJiBwYWdlVVJMLCBjb25zdCBRVXJsJiBpY29uVVJMKTsK
KworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBpY29uVVJMSGFzaEZvclBhZ2VVUkwoY29uc3QgU3Ry
aW5nJik7CisgICAgc3RhdGljIHZvaWQgZGlkQ2hhbmdlSWNvbkZvclBhZ2VVUkwoV0tJY29uRGF0
YWJhc2VSZWYsIFdLVVJMUmVmIHBhZ2VVUkwsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAg
IFdlYktpdDo6V2ViSWNvbkRhdGFiYXNlKiBtX2ljb25EYXRhYmFzZTsKKyAgICBNdXRleCBtX2lt
YWdlTG9jazsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvUXRXZWJQYWdlTG9hZENsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvUXRXZWJQYWdlTG9hZENsaWVudC5jcHAKaW5kZXggMTNhZmIyMTQwMjdiMjlmODVj
ZGViMzFlN2VlYWIyYjY4OTI0N2M3ZS4uMTkyNzU1YzhiNDYwN2MxNTczNjBjNTQ4MDYzNjY0ZGJk
YTE1Y2RjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFn
ZUxvYWRDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBh
Z2VMb2FkQ2xpZW50LmNwcApAQCAtMTY5LDcgKzE2OSw5IEBAIHZvaWQgUXRXZWJQYWdlTG9hZENs
aWVudDo6ZGlkUmVjZWl2ZVRpdGxlRm9yRnJhbWUoV0tQYWdlUmVmLCBXS1N0cmluZ1JlZiB0aXRs
ZSwKIAogdm9pZCBRdFdlYlBhZ2VMb2FkQ2xpZW50OjpkaWRTdGFydFByb2dyZXNzKFdLUGFnZVJl
ZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsKLSAgICB0b1F0V2ViUGFnZUxvYWRDbGllbnQo
Y2xpZW50SW5mbyktPnNldExvYWRQcm9ncmVzcygwKTsKKyAgICBRdFdlYlBhZ2VMb2FkQ2xpZW50
KiBjbGllbnQgPSB0b1F0V2ViUGFnZUxvYWRDbGllbnQoY2xpZW50SW5mbyk7CisgICAgY2xpZW50
LT5zZXRMb2FkUHJvZ3Jlc3MoMCk7CisgICAgY2xpZW50LT5tX3dlYlZpZXctPmRfZnVuYygpLT5z
ZXRJY29uKFFVcmwoKSk7CiB9CiAKIHZvaWQgUXRXZWJQYWdlTG9hZENsaWVudDo6ZGlkQ2hhbmdl
UHJvZ3Jlc3MoV0tQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvcXR3ZWJraXQtZXhwb3J0Lm1hcCBiL1NvdXJjZS9xdHdlYmtpdC1leHBvcnQu
bWFwCmluZGV4IDgzMjA1YzhkNDg4MTFiMDZiNmVkNjMyMTdkNWY4YjdmMTA1Zjk3NTAuLjQ5NThj
ODUxM2RkNTYxYjg0NmM0MzEyYmIwMmMwMjVlN2ZhMTVjNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9x
dHdlYmtpdC1leHBvcnQubWFwCisrKyBiL1NvdXJjZS9xdHdlYmtpdC1leHBvcnQubWFwCkBAIC0x
MDksNiArMTA5LDEyIEBAIHF3a18xLjAgewogICAgICAgICAqUVF1aWNrV2ViVmlld1ByaXZhdGU7
CiAgICAgICAgIG5vbi12aXJ0dWFsP3RodW5rP3RvP1FRdWlja1dlYlZpZXdQcml2YXRlKjsKICAg
ICAgICAgUVF1aWNrV2ViVmlld1ByaXZhdGU6Oio7CisgICAgICAgICpRV2ViSWNvbkltYWdlUHJv
dmlkZXI7CisgICAgICAgIG5vbi12aXJ0dWFsP3RodW5rP3RvP1FXZWJJY29uSW1hZ2VQcm92aWRl
cio7CisgICAgICAgIFFXZWJJY29uSW1hZ2VQcm92aWRlcjo6KjsKKyAgICAgICAgKlF0V2ViSWNv
bkRhdGFiYXNlQ2xpZW50OworICAgICAgICBub24tdmlydHVhbD90aHVuaz90bz9RdFdlYkljb25E
YXRhYmFzZUNsaWVudCo7CisgICAgICAgIFF0V2ViSWNvbkRhdGFiYXNlQ2xpZW50OjoqOwogICAg
ICAgICAqUVF1aWNrV2ViVmlld1ByaXZhdGVFeHRlbnNpb247CiAgICAgICAgIG5vbi12aXJ0dWFs
P3RodW5rP3RvP1FRdWlja1dlYlZpZXdQcml2YXRlRXh0ZW5zaW9uKjsKICAgICAgICAgUVF1aWNr
V2ViVmlld1ByaXZhdGVFeHRlbnNpb246Oio7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMDg2MTliOTNjNWE3NWZkYzhkYjg3MWJlOWFjZjYyMDcw
ZTgzNWM5Mi4uZTk4MDAwMWE4MjUyMjAyYTNlOTI1ZmI2Yzg4MmI3ZWIyNTRjMmQwYiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3
IEBACisyMDExLTEyLTE5ICBSYWZhZWwgQnJhbmRhbyAgPHJhZmFlbC5sb2JvQG9wZW5ib3NzYS5v
cmc+CisKKyAgICAgICAgW1F0XVtXSzJdIEltcGxlbWVudCBmYXZpY29uIHN1cHBvcnQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMDgyCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQSBmYXZvcml0ZSBpY29u
IHdhcyBhZGRlZCBvbiBNaW5pQnJvd3NlcidzIHVybCBiYXIgYXMgZXhhbXBsZS4KKyAgICAgICAg
V2UgZGlzcGxheSBhIGRlZmF1bHQgaWNvbiB3aGVuIHRoZSBwYWdlIGRvZXNuJ3QgaGF2ZSBhbiBp
Y29uIHJlYWR5LgorCisgICAgICAgICogTWluaUJyb3dzZXIvcXQvTWluaUJyb3dzZXIucXJjOgor
ICAgICAgICAqIE1pbmlCcm93c2VyL3F0L2ljb25zL2Zhdmljb24ucG5nOiBBZGRlZC4KKyAgICAg
ICAgKiBNaW5pQnJvd3Nlci9xdC9xbWwvQnJvd3NlcldpbmRvdy5xbWw6CisKIDIwMTEtMTItMTkg
IERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgd2Via2l0cHk6
IGZpbmlzaCByZWZhY3RvcmluZyBwb3J0IGNsYXNzZXMgdG8gbWFrZSBhIGhvc3QgbWFuZGF0b3J5
CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9NaW5pQnJvd3Nlci5xcmMgYi9Ub29s
cy9NaW5pQnJvd3Nlci9xdC9NaW5pQnJvd3Nlci5xcmMKaW5kZXggMjY2NjgzZGJhYjdkNmJkYmRk
M2UxYWVjMDU3YzUwYWY0OGE3NzliNi4uNzEwYTZjZGY0NzZmMWY5NzE0ZTFlZDNmMjlhZmZjMzY3
ODE3ZGVjZCAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvTWluaUJyb3dzZXIucXJj
CisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L01pbmlCcm93c2VyLnFyYwpAQCAtMTEsNSArMTEs
NiBAQAogICAgICAgICA8ZmlsZT5xbWwvTW9ja1RvdWNoUG9pbnQucW1sPC9maWxlPgogICAgICAg
ICA8ZmlsZT5xbWwvVmlld3BvcnRJbmZvSXRlbS5xbWw8L2ZpbGU+CiAgICAgICAgIDxmaWxlPnVz
ZXJhZ2VudGxpc3QudHh0PC9maWxlPgorICAgICAgICA8ZmlsZT5pY29ucy9mYXZpY29uLnBuZzwv
ZmlsZT4KICAgICA8L3FyZXNvdXJjZT4KIDwvUkNDPgpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJy
b3dzZXIvcXQvaWNvbnMvZmF2aWNvbi5wbmcgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9pY29ucy9m
YXZpY29uLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NDYyNzUyYTUzYmFlYjA1ZDlhOThmOGFlMjNmYTgwN2U3
Y2VlZTRhCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCA4OTEKemNtVi0+MUJDcEVQKTxoOzNLfExr
MDAwZTFOSkxUcTAwMG1HMDAwbU8xXkBzNkFNXmlWMDAwMDFiNWNoXzBJdHApCno9PlB4JkhBekg0
UjUodXMhT2MkO1g4XiRBLX19eHhHZHIqITQ3LWJoVkokNCFxUkBidkcpO14jezArU3IpQVopVwp6
RyhHZVdENXN1IylrRHZ7bjt6UVEjJn5OSlFkNXl1NW4rTGFtMVRFWGM2WXcjb2ojOE1fK293aXV7
LU5ORyNyeUcKejM8KlhOY0ZyVWQyQnFwSCN0U2EzKF9eJCFuNU5CMXFqfVA4b2pyYTI7PkJhKihL
bGFqM19Hb0ZeRTE7VkxTYzxMCnozYFBOXllNSnM+blU2bk47cmZrYkNNeStgV3IxWi11MnVfMmpt
RThLenheVlZBPj89WT1efDA7UT1YfWpkUERNVgp6ZnRsSm9pfWdCfHZNM1leU2hrSEhNVEJYQnBU
IWk1RT5ZP35HXlY4N3M0Z3VyVU13TW5qY3IqSi0zb0phMyhRUS0KekFmLVlZbEFMV0w1Z1o7SShB
YSYwUDk+bzxrc19CenN4aWpoM1dtXj5pYmRqN2xaRytQNHtjaUFiMVl8XkxWa2pCCnpXczNRYXRg
VXQ9QkNrKXJ5bnIkczJnNlotTERpazIqWTVEe1Y0dDFGNW41KiRYfnhhZlBxfXlKNCMldylQaztY
ZAp6S2hCNz5MKV9kKE5tRyE5RFgoQG1OJjVrX149cjgwREA7c0NqdEA/Tmd1VDY4e2AmSkRFPEJH
KURUZypQTExHdUUKenBeVGhFQ15WQ2s2JkJhKHRTO1lSYHxVMlR8OSMxTCE2RVNzMD8qXn4rc2t4
MVUwVTU5UWZkWiVPcHQxJVpEIT02Cnpnblo1ZG9lJX4taSpxJVVIYyZ4fEIqVCZ4YkYoJHBAN15X
eWBpTUJna3w2eUgjRG58eXZqPDsmTm9FLVF5fThOQwp6QF4jOVM2PlFya08lanFNTElePCsjYEZn
UmE8KW19ZEhucUFHdjAxKnFrNnBfYWhnJWU9Tk5oO2YqPkh2R0wofFUKemlEdXtoSkckTC1mKj5G
am5seX5LeHc9WGtNYFdwaUY8WUQ4WG5yYFJTamU7QUppdF5JWnJMVTAqbGZNdFZtS08rCno3WT16
bDQ+M3EoKChaUj9vfTRsMF4teiZNcip+JVleMW9Ma055Y2ZuaHVkbWwrWkwmWU9QOG15bH1SditO
VGtMeAp6O1BrQWB6YHNFMjFmfFJoeGszQHN2PkNVQFhtJmNwbldvPCNhTVdyZGdhOSVlUTt8ZlB0
fmEzSD5sNjB8bDxoTGMKeilzQD5LKEI4ZVBtIzBDZXlnJTN7JD42bHpWZCNmazQyTDgtcWdYOEJQ
RU4zUWMhKW09eGdzMUVPT3NFRyMrJDlACnpZaXBtKUVZKWtiN1YzMzZvaT5DMTEoNm1BIXo5KVRY
JEZIfiRWdW0lSTBmYlRSOGRkOXxMTW1je3MlNCRnPDQrZQpSRWY0P3owMDJvdlBESExrVjFubGpv
IWtIYgoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dz
ZXIvcXQvcW1sL0Jyb3dzZXJXaW5kb3cucW1sIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvcW1sL0Jy
b3dzZXJXaW5kb3cucW1sCmluZGV4IDgyZDEwYjIzOGYwYWM3NTdjODZlZDg1NTk3YmM0MzdhZDdm
OWFkZjUuLmMzNWUzMzVkMTI4MWE4MWRjMjQwMjU2MmFlM2VjZDM0NmU3ZGM0NTQgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L3FtbC9Ccm93c2VyV2luZG93LnFtbAorKysgYi9Ub29s
cy9NaW5pQnJvd3Nlci9xdC9xbWwvQnJvd3NlcldpbmRvdy5xbWwKQEAgLTIwNSw2ICsyMDUsMTcg
QEAgUmVjdGFuZ2xlIHsKICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjMKICAgICAgICAgICAg
ICAgICB2aXNpYmxlOiB3ZWJWaWV3LmxvYWRQcm9ncmVzcyAhPSAxMDAKICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIEltYWdlIHsKKyAgICAgICAgICAgICAgICBpZDogZmF2SWNvbgorICAgICAg
ICAgICAgICAgIHNvdXJjZTogd2ViVmlldy5pY29uICE9ICcnID8gd2ViVmlldy5pY29uIDogJy4u
L2ljb25zL2Zhdmljb24ucG5nJworICAgICAgICAgICAgICAgIHdpZHRoOiAxNgorICAgICAgICAg
ICAgICAgIGhlaWdodDogMTYKKyAgICAgICAgICAgICAgICBhbmNob3JzIHsKKyAgICAgICAgICAg
ICAgICAgICAgbGVmdDogcGFyZW50LmxlZnQKKyAgICAgICAgICAgICAgICAgICAgbGVmdE1hcmdp
bjogNAorICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbENlbnRlcjogcGFyZW50LnZlcnRpY2Fs
Q2VudGVyCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgVGV4
dElucHV0IHsKICAgICAgICAgICAgICAgICBpZDogYWRkcmVzc0xpbmUKICAgICAgICAgICAgICAg
ICBjbGlwOiB0cnVlCkBAIC0yMTUsNyArMjI2LDcgQEAgUmVjdGFuZ2xlIHsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgYW5jaG9ycyB7CiAgICAgICAgICAgICAgICAgICAgIHZl
cnRpY2FsQ2VudGVyOiBwYXJlbnQudmVydGljYWxDZW50ZXIKLSAgICAgICAgICAgICAgICAgICAg
bGVmdDogcGFyZW50LmxlZnQKKyAgICAgICAgICAgICAgICAgICAgbGVmdDogZmF2SWNvbi5yaWdo
dAogICAgICAgICAgICAgICAgICAgICByaWdodDogcGFyZW50LnJpZ2h0CiAgICAgICAgICAgICAg
ICAgICAgIG1hcmdpbnM6IDYKICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9DaGFuZ2VM
b2cgYi9DaGFuZ2VMb2cKaW5kZXggNTY3MmJmMDVhYzdjMmE2NzY5ZGMwY2U2MTMyMDVlZGI5N2M0
N2E2MS4uYTA2NjdjOGVhODkyNGMyZDhlNTg0NTc3ZjU1YjFkODk5ZWY2OWI0MSAxMDA2NDQKLS0t
IGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDExLTEyLTE5
ICBSYWZhZWwgQnJhbmRhbyAgPHJhZmFlbC5sb2JvQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAg
W1F0XVtXSzJdIEltcGxlbWVudCBmYXZpY29uIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMDgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTb3VyY2UvcXR3ZWJraXQtZXhwb3J0Lm1hcDog
QWRkZWQgbmV3IGNsYXNzZXMuCisKIDIwMTEtMTItMTggIFNpbW9uIEhhdXNtYW5uICA8c2ltb24u
aGF1c21hbm5Abm9raWEuY29tPgogCiAgICAgICAgIFJlbmFtZSBFZGl0Q29tbWFuZFF0IHRvIFVu
ZG9TdGVwUXQK
</data>

          </attachment>
      

    </bug>

</bugzilla>