<?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>61201</bug_id>
          
          <creation_ts>2011-05-20 11:19:43 -0700</creation_ts>
          <short_desc>Audit all uses of KURL::prettyURL</short_desc>
          <delta_ts>2011-05-28 12:59:22 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="WebKit Review Bot">webkit.review.bot</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>arv</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>407210</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-20 11:19:43 -0700</bug_when>
    <thetext>Audit all uses of KURL::prettyURL
Requested by abarth on #webkit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407236</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-05-20 11:39:27 -0700</bug_when>
    <thetext>I think that it has its place when displaying a URL to the user, but not necessarily in DOM code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409380</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-24 19:41:29 -0700</bug_when>
    <thetext>Looks like prettyURL is mostly used for location.href and as a sandtrap to confuse code into having bugs:

./WebCore/page/Location.cpp:    return url.hasPath() ? url.prettyURL() : url.prettyURL() + &quot;/&quot;;
./WebCore/page/Location.cpp:    return url.hasPath() ? url.prettyURL() : url.prettyURL() + &quot;/&quot;;
./WebCore/platform/KURL.cpp:String KURL::prettyURL() const
./WebCore/platform/KURL.h:    String prettyURL() const;
./WebCore/platform/KURLGoogle.cpp:String KURL::prettyURL() const
./WebCore/platform/network/soup/ResourceHandleSoup.cpp:    GOwnPtr&lt;SoupURI&gt; soupURI(soup_uri_new(url.prettyURL().utf8().data()));
./WebCore/workers/WorkerLocation.cpp:    return m_url.hasPath() ? m_url.prettyURL() : m_url.prettyURL() + &quot;/&quot;;
./WebCore/workers/WorkerLocation.cpp:    return m_url.hasPath() ? m_url.prettyURL() : m_url.prettyURL() + &quot;/&quot;;
./WebKit/efl/ewk/ewk_frame.cpp:    hit_test-&gt;link.url = eina_stringshare_add(result.absoluteLinkURL().prettyURL().utf8().data());
./WebKit/efl/ewk/ewk_frame.cpp:    WTF::CString uri(sd-&gt;frame-&gt;document()-&gt;url().prettyURL().utf8());
./WebKit/efl/ewk/ewk_view.cpp:    priv-&gt;settings.user_stylesheet = eina_stringshare_add(url.prettyURL().utf8().data());
./WebKit/efl/ewk/ewk_view.cpp:        url.prettyURL().utf8().data(), referrer.utf8().data());
./WebKit/efl/ewk/ewk_view.cpp:        url.prettyURL().utf8().data(), mimeType.utf8().data());
./WebKit/efl/WebCoreSupport/ChromeClientEfl.cpp:            CString urlStr = url.prettyURL().utf8();
./WebKit/efl/WebCoreSupport/FrameLoaderClientEfl.cpp:    CString url = coreRequest.url().prettyURL().utf8();
./WebKit/efl/WebCoreSupport/FrameLoaderClientEfl.cpp:    CString url = coreRequest.url().prettyURL().utf8();
./WebKit/efl/WebCoreSupport/FrameLoaderClientEfl.cpp:    char* url = strdup(resourceRequest.url().prettyURL().utf8().data());
./WebKit/efl/WebCoreSupport/FrameLoaderClientEfl.cpp:    CString url = request.url().prettyURL().utf8();
./WebKit/efl/WebCoreSupport/FrameLoaderClientEfl.cpp:    ResourceError error(&quot;Error&quot;, -999, request.url().prettyURL(),
./WebKit/efl/WebCoreSupport/FrameLoaderClientEfl.cpp:    return ResourceError(&quot;Error&quot;, WebKitErrorCannotUseRestrictedPort, request.url().prettyURL(),
./WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp:            CString urlString = url.prettyURL().utf8();
./WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp:    priv-&gt;uri = g_strdup(core(m_frame)-&gt;document()-&gt;url().prettyURL().utf8().data());
./WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp:    priv-&gt;uri = g_strdup(core(m_frame)-&gt;loader()-&gt;activeDocumentLoader()-&gt;url().prettyURL().utf8().data());
./WebKit/gtk/webkit/webkitwebview.cpp:    String iconURL = iconDatabase().synchronousIconURLForPageURL(core(webView)-&gt;mainFrame()-&gt;document()-&gt;url().prettyURL());
./WebKit/qt/WebCoreSupport/ChromeClientQt.cpp:        emit m_webPage-&gt;linkHovered(lastHoverURL.prettyURL(),
./WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp:        history-&gt;addHistoryEntry(loader-&gt;urlForHistory().prettyURL());
./WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp:    ResourceError error = ResourceError(&quot;QtNetwork&quot;, QNetworkReply::OperationCanceledError, request.url().prettyURL(),
./WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp:    return ResourceError(&quot;WebKitErrorDomain&quot;, WebKitErrorCannotUseRestrictedPort, request.url().prettyURL(),
./WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp:    // qDebug()&lt;&lt;&quot; ++++++++++++++++ url is &quot;&lt;&lt;url.prettyURL()&lt;&lt;&quot;, mime = &quot;&lt;&lt;mimeTypeIn;
./WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp:    // qDebug()&lt;&lt;&quot;------ Creating plugin in FrameLoaderClientQt::createPlugin for &quot;&lt;&lt;url.prettyURL() &lt;&lt; mimeType;
./WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp:    // qDebug()&lt;&lt;&quot;------\t url = &quot;&lt;&lt;url.prettyURL();
./WebKit2/WebProcess/WebCoreSupport/qt/WebErrorsQt.cpp:    ResourceError error = ResourceError(&quot;QtNetwork&quot;, QNetworkReply::OperationCanceledError, request.url().prettyURL(),
./WebKit2/WebProcess/WebCoreSupport/qt/WebErrorsQt.cpp:    return ResourceError(&quot;WebKit&quot;, WebKitErrorCannotUseRestrictedPort, request.url().prettyURL(),
./WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:    return url.hasPath() ? url.prettyURL() : url.prettyURL() + &quot;/&quot;;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>411154</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-26 22:25:33 -0700</bug_when>
    <thetext>AFACT, all these callers are wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>411167</commentid>
    <comment_count>4</comment_count>
      <attachid>95116</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-26 22:33:11 -0700</bug_when>
    <thetext>Created attachment 95116
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>411170</commentid>
    <comment_count>5</comment_count>
      <attachid>95116</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-05-26 22:36:58 -0700</bug_when>
    <thetext>Comment on attachment 95116
Patch

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

&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:-1204
&gt; -    const KURL&amp; url = frame-&gt;document()-&gt;url();
&gt; -    return url.hasPath() ? url.prettyURL() : url.prettyURL() + &quot;/&quot;;

What makes you sure we don’t need this “always make sure we have at least a /” logic?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>411175</commentid>
    <comment_count>6</comment_count>
      <attachid>95116</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-05-26 22:50:05 -0700</bug_when>
    <thetext>Comment on attachment 95116
Patch

Attachment 95116 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/8734961</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>411177</commentid>
    <comment_count>7</comment_count>
      <attachid>95116</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-26 22:55:30 -0700</bug_when>
    <thetext>Comment on attachment 95116
Patch

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

&gt;&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:-1204
&gt;&gt; -    return url.hasPath() ? url.prettyURL() : url.prettyURL() + &quot;/&quot;;
&gt; 
&gt; What makes you sure we don’t need this “always make sure we have at least a /” logic?

The trailing / isn&apos;t required by the URI specs, nor by any URL parser I&apos;m aware of.  (I also couldn&apos;t seem to actually create a document where document()-&gt;url()-&gt;string() was lacking the trailing slash.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>411179</commentid>
    <comment_count>8</comment_count>
      <attachid>95117</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-26 22:58:07 -0700</bug_when>
    <thetext>Created attachment 95117
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>411181</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-26 23:00:44 -0700</bug_when>
    <thetext>e.g., data:text/html,%3Ca%20href=%22http://example.com%22%3E%3Cscript%3Ealert(document.body.firstElementChild.href)%3C/script%3E

has the trailing slash, as does &lt;iframe src=&quot;http://example.com&quot;&gt; and reading document.documentURI inside the frame (which just grabs url().string()).

Safari Version 5.0.5 (6533.21.1)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>411235</commentid>
    <comment_count>10</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-05-27 00:35:02 -0700</bug_when>
    <thetext>Which of these call sites (if any) is responsible for displaying a pretty URL in Safari address bar?

I am unsure what is best for ResourceError URLs, which are strictly for human consumption.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>411239</commentid>
    <comment_count>11</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-27 00:40:47 -0700</bug_when>
    <thetext>&gt; Which of these call sites (if any) is responsible for displaying a pretty URL in Safari address bar?

Presumable none of them because I didn&apos;t change anything that effects WebKit1 on Mac!

&gt; I am unsure what is best for ResourceError URLs, which are strictly for human consumption.

My thinking is that it&apos;s better to have these URLs work like every other URL in the web platform, but I agree that it&apos;s a matter of aesthetics.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>411681</commentid>
    <comment_count>12</comment_count>
      <attachid>95117</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-05-27 15:15:20 -0700</bug_when>
    <thetext>Comment on attachment 95117
Patch

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

Yes - Safari probably relies upon code in NSURLExtras, which is independent of KURL.

&gt; Source/WebCore/page/Location.cpp:69
&gt; +    return url.hasPath() ? url.deprecatedString() : url.deprecatedString() + &quot;/&quot;;

Why not add a FIXME link to &lt;https://bugs.webkit.org/show_bug.cgi?id=30225&gt; in case you don&apos;t resolve this immediately?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>411684</commentid>
    <comment_count>13</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-27 15:20:56 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 95117 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=95117&amp;action=review
&gt;
&gt; &gt; Source/WebCore/page/Location.cpp:69
&gt; &gt; +    return url.hasPath() ? url.deprecatedString() : url.deprecatedString() + &quot;/&quot;;
&gt; 
&gt; Why not add a FIXME link to &lt;https://bugs.webkit.org/show_bug.cgi?id=30225&gt; in case you don&apos;t resolve this immediately?

Thanks.  Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>411700</commentid>
    <comment_count>14</comment_count>
      <attachid>95225</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-27 16:14:18 -0700</bug_when>
    <thetext>Created attachment 95225
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>411883</commentid>
    <comment_count>15</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-28 12:59:22 -0700</bug_when>
    <thetext>Committed r87623: &lt;http://trac.webkit.org/changeset/87623&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95116</attachid>
            <date>2011-05-26 22:33:11 -0700</date>
            <delta_ts>2011-05-26 22:58:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-61201-20110526223309.patch</filename>
            <type>text/plain</type>
            <size>26145</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg3NDY3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTEtMDUtMjYgIEFkYW0gQmFy
dGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBdWRpdCBhbGwgdXNlcyBvZiBLVVJMOjpwcmV0dHlVUkwKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYxMjAxCisKKyAgICAg
ICAgQXMgZmFyIGFzIEkgY2FuIHRlbGwsIGFsbCB0aGUgY2FsbGVycyBvZiB0aGlzIEFQSSBhcmUg
Y29uZnVzZWQuICBUaGVyZQorICAgICAgICBzZWVtcyB0byBiZSBhIGNhcmdvIGN1bHQgb2YgdXNp
bmcgdGhlICJwcmV0dHkiIHZlcnNpb24gb2YgYSBVUkwsIGJ1dCBpbgorICAgICAgICByZWFsaXR5
IGZvbGtzIGp1c3Qgd2FudCB0aGUgVVJMIGl0c2VsZi4gIFRoZSBvbmx5IGNhc2UgSSdtIHVuc3Vy
ZSBhYm91dAorICAgICAgICBpcyBsb2NhdGlvbi5ocmVmLCB3aGljaCBjb3VsZCBoYXZlIHNvbWUg
Y29tcGF0aWJpbGl0eSBjb25zdHJhaW50cy4KKyAgICAgICAgSSd2ZSByZW5hbWVkIHByZXR0eVVS
TCB0byBkZXByZWNhdGVkU3RyaW5nIHRvIGRpc2NvdXJhZ2UgZm9sa3MgZnJvbQorICAgICAgICBm
dXJ0aGVyIGNhcmdvLWN1bHRpbmcuCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAg
ICAgKiBwYWdlL0xvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxvY2F0aW9uOjpocmVm
KToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2F0aW9uOjp0b1N0cmluZyk6CisgICAgICAgICogcGxh
dGZvcm0vS1VSTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpkZXByZWNhdGVkU3RyaW5n
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9LVVJMLmg6CisgICAgICAgICogcGxhdGZvcm0vS1VSTEdv
b2dsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpkZXByZWNhdGVkU3RyaW5nKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpwcmVwYXJlRm9yVVJMKToKKyAgICAgICAg
KiB3b3JrZXJzL1dvcmtlckxvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlckxv
Y2F0aW9uOjpocmVmKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckxvY2F0aW9uOjp0b1N0cmlu
Zyk6CisKIDIwMTEtMDUtMjYgIEVtaWwgQSBFa2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4J
KHJldmlzaW9uIDg3NDY3KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtp
bmcgY29weSkKQEAgLTE2MTQsOCArMTYxNCw4IEBAIF9fWk43V2ViQ29yZTE2U2NyaXB0Q29udHJv
bGxlcjI5Y2xlYW51cFMKIF9fWk43V2ViQ29yZTE2anNTdHJpbmdTbG93Q2FzZUVQTjNKU0M5RXhl
Y1N0YXRlRVJOM1dURjdIYXNoTWFwSVBOUzNfMTBTdHJpbmdJbXBsRU5TMF80V2Vha0lOUzBfOEpT
U3RyaW5nRUVFTlMzXzEwU3RyaW5nSGFzaEVOUzNfMTBIYXNoVHJhaXRzSVM2X0VFTlNCX0lTOV9F
RUVFUzZfCiBfX1pON1dlYkNvcmUxN0hUTUxQbHVnSW5FbGVtZW50MTFnZXROUE9iamVjdEV2CiBf
X1pOSzdXZWJDb3JlMTRTZWN1cml0eU9yaWdpbjljYW5BY2Nlc3NFUEtTMF8KK19fWk5LN1dlYkNv
cmU0S1VSTDZzdHJpbmdFdgogX19aTks3V2ViQ29yZTRLVVJMN2hhc1BhdGhFdgotX19aTks3V2Vi
Q29yZTRLVVJMOXByZXR0eVVSTEV2CiAjZW5kaWYKIAogI2lmIEVOQUJMRShPUklFTlRBVElPTl9F
VkVOVFMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0xvY2F0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0xvY2F0aW9uLmNwcAkocmV2aXNpb24gODc0NjcpCisr
KyBTb3VyY2UvV2ViQ29yZS9wYWdlL0xvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYs
NyArNjYsNyBAQCBTdHJpbmcgTG9jYXRpb246OmhyZWYoKSBjb25zdAogICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CiAKICAgICBjb25zdCBLVVJMJiB1cmwgPSB0aGlzLT51cmwoKTsKLSAgICByZXR1
cm4gdXJsLmhhc1BhdGgoKSA/IHVybC5wcmV0dHlVUkwoKSA6IHVybC5wcmV0dHlVUkwoKSArICIv
IjsKKyAgICByZXR1cm4gdXJsLmhhc1BhdGgoKSA/IHVybC5kZXByZWNhdGVkU3RyaW5nKCkgOiB1
cmwuZGVwcmVjYXRlZFN0cmluZygpICsgIi8iOwogfQogCiBTdHJpbmcgTG9jYXRpb246OnByb3Rv
Y29sKCkgY29uc3QKQEAgLTE1NSw3ICsxNTUsNyBAQCBTdHJpbmcgTG9jYXRpb246OnRvU3RyaW5n
KCkgY29uc3QKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgY29uc3QgS1VSTCYgdXJs
ID0gdGhpcy0+dXJsKCk7Ci0gICAgcmV0dXJuIHVybC5oYXNQYXRoKCkgPyB1cmwucHJldHR5VVJM
KCkgOiB1cmwucHJldHR5VVJMKCkgKyAiLyI7CisgICAgcmV0dXJuIHVybC5oYXNQYXRoKCkgPyB1
cmwuZGVwcmVjYXRlZFN0cmluZygpIDogdXJsLmRlcHJlY2F0ZWRTdHJpbmcoKSArICIvIjsKIH0K
IAogdm9pZCBMb2NhdGlvbjo6c2V0SHJlZihjb25zdCBTdHJpbmcmIHVybFN0cmluZywgRE9NV2lu
ZG93KiBhY3RpdmVXaW5kb3csIERPTVdpbmRvdyogZmlyc3RXaW5kb3cpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9LVVJMLmNwcAkocmV2aXNpb24gODc0NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9LVVJMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODc2LDcgKzg3Niw3IEBAIHZvaWQgS1VS
TDo6c2V0UGF0aChjb25zdCBTdHJpbmcmIHMpCiAgICAgcGFyc2UobV9zdHJpbmcubGVmdChtX3Bv
cnRFbmQpICsgZW5jb2RlV2l0aFVSTEVzY2FwZVNlcXVlbmNlcyhwYXRoKSArIG1fc3RyaW5nLnN1
YnN0cmluZyhtX3BhdGhFbmQpKTsKIH0KIAotU3RyaW5nIEtVUkw6OnByZXR0eVVSTCgpIGNvbnN0
CitTdHJpbmcgS1VSTDo6ZGVwcmVjYXRlZFN0cmluZygpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2lz
VmFsaWQpCiAgICAgICAgIHJldHVybiBtX3N0cmluZzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0tVUkwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LVVJM
LmgJKHJldmlzaW9uIDg3NDY3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS1VSTC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTAsNyArMTUwLDkgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIGJh
c2VBc1N0cmluZygpIGNvbnN0OwogCi0gICAgU3RyaW5nIHByZXR0eVVSTCgpIGNvbnN0OworICAg
IC8vIFRoaXMgZnVuY3Rpb24gaXMgb25seSB1c2VkIGJ5IGxvY2F0aW9uLmhyZWYuIEl0J3MgbGlr
ZWx5IHdlIHNob3VsZG4ndAorICAgIC8vIHVzZSBpdCBmb3IgdGhhdCBwdXJwb3NlLCBidXQgbW9y
ZSBzdHVkeSBpcyBuZWNlc3NhcnkgYmVmb3JlIHdlIHJlbW92ZSBpdC4KKyAgICBTdHJpbmcgZGVw
cmVjYXRlZFN0cmluZygpIGNvbnN0OwogICAgIFN0cmluZyBmaWxlU3lzdGVtUGF0aCgpIGNvbnN0
OwogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50IFVSTCdzIHByb3RvY29sIGlz
IHRoZSBzYW1lIGFzIHRoZSBudWxsLQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS1VS
TEdvb2dsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS1VSTEdv
b2dsZS5jcHAJKHJldmlzaW9uIDg3NDY3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS1VS
TEdvb2dsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3Miw3ICs3NzIsNyBAQCB2b2lkIEtVUkw6
OnNldFBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQogLy8gT24gTWFjLCB0aGlzIGp1c3Qgc2VlbXMg
dG8gcmV0dXJuIHRoZSBzYW1lIFVSTCwgYnV0IHdpdGggIi9mb28vYmFyIiBmb3IKIC8vIGZpbGU6
IFVSTHMgaW5zdGVhZCBvZiBmaWxlOi8vL2Zvby9iYXIuIFdlIGRvbid0IGJvdGhlciB3aXRoIGFu
eSBvZiB0aGlzLAogLy8gYXQgbGVhc3QgZm9yIG5vdy4KLVN0cmluZyBLVVJMOjpwcmV0dHlVUkwo
KSBjb25zdAorU3RyaW5nIEtVUkw6OmRlcHJlY2F0ZWRTdHJpbmcoKSBjb25zdAogewogICAgIGlm
ICghbV91cmwubV9pc1ZhbGlkKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3Vy
Y2VIYW5kbGVTb3VwLmNwcAkocmV2aXNpb24gODc0NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTgwLDkgKzE4MCw5IEBAIHN0YXRpYyB2b2lkIGVuc3VyZVNlc3Npb25Jc0luaXRpYWxpemVk
KFMKICAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChzZXNzaW9uKSwgIndlYmtpdC1pbml0
IiwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oMHhkZWFkYmVlZikpOwogfQogCi12b2lkIFJlc291
cmNlSGFuZGxlOjpwcmVwYXJlRm9yVVJMKGNvbnN0IEtVUkwgJnVybCkKK3ZvaWQgUmVzb3VyY2VI
YW5kbGU6OnByZXBhcmVGb3JVUkwoY29uc3QgS1VSTCYgdXJsKQogewotICAgIEdPd25QdHI8U291
cFVSST4gc291cFVSSShzb3VwX3VyaV9uZXcodXJsLnByZXR0eVVSTCgpLnV0ZjgoKS5kYXRhKCkp
KTsKKyAgICBHT3duUHRyPFNvdXBVUkk+IHNvdXBVUkkoc291cF91cmlfbmV3KHVybC5zdHJpbmco
KS51dGY4KCkuZGF0YSgpKSk7CiAgICAgaWYgKCFzb3VwVVJJKQogICAgICAgICByZXR1cm47CiAg
ICAgc291cF9zZXNzaW9uX3ByZXBhcmVfZm9yX3VyaShSZXNvdXJjZUhhbmRsZTo6ZGVmYXVsdFNl
c3Npb24oKSwgc291cFVSSS5nZXQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dv
cmtlckxvY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dv
cmtlckxvY2F0aW9uLmNwcAkocmV2aXNpb24gODc0NjcpCisrKyBTb3VyY2UvV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlckxvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIFN0cmluZyBXb3JrZXJMb2NhdGlvbjo6aHJlZigpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIG1fdXJsLmhhc1BhdGgoKSA/IG1fdXJsLnByZXR0eVVSTCgpIDogbV91
cmwucHJldHR5VVJMKCkgKyAiLyI7CisgICAgcmV0dXJuIG1fdXJsLmhhc1BhdGgoKSA/IG1fdXJs
LmRlcHJlY2F0ZWRTdHJpbmcoKSA6IG1fdXJsLmRlcHJlY2F0ZWRTdHJpbmcoKSArICIvIjsKIH0K
IAogU3RyaW5nIFdvcmtlckxvY2F0aW9uOjpwcm90b2NvbCgpIGNvbnN0CkBAIC03Niw3ICs3Niw3
IEBAIFN0cmluZyBXb3JrZXJMb2NhdGlvbjo6aGFzaCgpIGNvbnN0CiAKIFN0cmluZyBXb3JrZXJM
b2NhdGlvbjo6dG9TdHJpbmcoKSBjb25zdAogewotICAgIHJldHVybiBtX3VybC5oYXNQYXRoKCkg
PyBtX3VybC5wcmV0dHlVUkwoKSA6IG1fdXJsLnByZXR0eVVSTCgpICsgIi8iOworICAgIHJldHVy
biBtX3VybC5oYXNQYXRoKCkgPyBtX3VybC5kZXByZWNhdGVkU3RyaW5nKCkgOiBtX3VybC5kZXBy
ZWNhdGVkU3RyaW5nKCkgKyAiLyI7CiB9CiAKIApJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gODc0
NjcpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxOCBAQAorMjAxMS0wNS0yNiAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEF1ZGl0IGFsbCB1
c2VzIG9mIEtVUkw6OnByZXR0eVVSTAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NjEyMDEKKworICAgICAgICBVcGRhdGUgY2FsbGVycyBvZiBwcmV0dHlV
UkwgdG8ganVzdCBjYWxsIHN0cmluZy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFt
ZUxvYWRlckNsaWVudDo6Y3JlYXRlUGx1Z2luKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L3F0L1dlYkVycm9yc1F0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6Y2FuY2VsbGVk
RXJyb3IpOgorICAgICAgICAoV2ViS2l0OjpibG9ja2VkRXJyb3IpOgorCiAyMDExLTA1LTI2ICBD
aHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4gQWRsZXIuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAko
cmV2aXNpb24gODc0NjcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5OCwxMiAr
MTE5OCw2IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnRyYW5zZmVyTG9hZGkKICAgICBu
b3RJbXBsZW1lbnRlZCgpOwogfQogCi1zdGF0aWMgU3RyaW5nIGRvY3VtZW50VVJMKEZyYW1lKiBm
cmFtZSkKLXsKLSAgICBjb25zdCBLVVJMJiB1cmwgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCk7
Ci0gICAgcmV0dXJuIHVybC5oYXNQYXRoKCkgPyB1cmwucHJldHR5VVJMKCkgOiB1cmwucHJldHR5
VVJMKCkgKyAiLyI7Ci19Ci0KIFBhc3NSZWZQdHI8V2lkZ2V0PiBXZWJGcmFtZUxvYWRlckNsaWVu
dDo6Y3JlYXRlUGx1Z2luKGNvbnN0IEludFNpemUmLCBIVE1MUGx1Z0luRWxlbWVudCogcGx1Z2lu
RWxlbWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1l
cywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBib29sIGxvYWRNYW51YWxseSkKIHsKICAgICBBU1NFUlQocGFyYW1OYW1lcy5zaXplKCkg
PT0gcGFyYW1WYWx1ZXMuc2l6ZSgpKTsKQEAgLTEyMTcsMTQgKzEyMTEsMTQgQEAgUGFzc1JlZlB0
cjxXaWRnZXQ+IFdlYkZyYW1lTG9hZGVyQ2xpZW50OgogICAgIHBhcmFtZXRlcnMudmFsdWVzID0g
cGFyYW1WYWx1ZXM7CiAgICAgcGFyYW1ldGVycy5taW1lVHlwZSA9IG1pbWVUeXBlOwogICAgIHBh
cmFtZXRlcnMubG9hZE1hbnVhbGx5ID0gbG9hZE1hbnVhbGx5OwotICAgIHBhcmFtZXRlcnMuZG9j
dW1lbnRVUkwgPSBkb2N1bWVudFVSTChtX2ZyYW1lLT5jb3JlRnJhbWUoKSk7CisgICAgcGFyYW1l
dGVycy5kb2N1bWVudFVSTCA9IG1fZnJhbWUtPmNvcmVGcmFtZSgpLT5kb2N1bWVudCgpLT51cmwo
KS0+c3RyaW5nKCk7CiAKICAgICBGcmFtZSogbWFpbkZyYW1lID0gd2ViUGFnZS0+bWFpbkZyYW1l
KCktPmNvcmVGcmFtZSgpOwogICAgIGlmIChtX2ZyYW1lLT5jb3JlRnJhbWUoKSA9PSBtYWluRnJh
bWUpCiAgICAgICAgIHBhcmFtZXRlcnMudG9wbGV2ZWxEb2N1bWVudFVSTCA9IHBhcmFtZXRlcnMu
ZG9jdW1lbnRVUkw7CiAgICAgZWxzZSBpZiAobV9mcmFtZS0+Y29yZUZyYW1lKCktPmRvY3VtZW50
KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2VzcyhtYWluRnJhbWUtPmRvY3VtZW50KCktPnNl
Y3VyaXR5T3JpZ2luKCkpKSB7CiAgICAgICAgIC8vIFdlIG9ubHkgd2FudCB0byBzZXQgdGhlIHRv
cGxldmVsIGRvY3VtZW50IFVSTCBpZiB0aGUgcGx1Zy1pbiBoYXMgYWNjZXNzIHRvIGl0LgotICAg
ICAgICBwYXJhbWV0ZXJzLnRvcGxldmVsRG9jdW1lbnRVUkwgPSBkb2N1bWVudFVSTChtYWluRnJh
bWUpOworICAgICAgICBwYXJhbWV0ZXJzLnRvcGxldmVsRG9jdW1lbnRVUkwgPSBtYWluRnJhbWUt
PmNvcmVGcmFtZSgpLT5kb2N1bWVudCgpLT51cmwoKS0+c3RyaW5nKCk7CiAgICAgfQogCiAgICAg
Ly8gPHJkYXI6Ly9wcm9ibGVtLzg0NDA5MDM+OiBBcHBsZUNvbm5lY3QgaGFzIGEgYnVnIHdoZXJl
IGl0IGRvZXMgbm90CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L3F0L1dlYkVycm9yc1F0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L3F0L1dlYkVycm9yc1F0LmNwcAkocmV2aXNpb24gODc0Njcp
CisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3F0L1dlYkVycm9y
c1F0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBlbnVtIHsKIAogUmVzb3Vy
Y2VFcnJvciBjYW5jZWxsZWRFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7
Ci0gICAgUmVzb3VyY2VFcnJvciBlcnJvciA9IFJlc291cmNlRXJyb3IoIlF0TmV0d29yayIsIFFO
ZXR3b3JrUmVwbHk6Ok9wZXJhdGlvbkNhbmNlbGVkRXJyb3IsIHJlcXVlc3QudXJsKCkucHJldHR5
VVJMKCksCisgICAgUmVzb3VyY2VFcnJvciBlcnJvciA9IFJlc291cmNlRXJyb3IoIlF0TmV0d29y
ayIsIFFOZXR3b3JrUmVwbHk6Ok9wZXJhdGlvbkNhbmNlbGVkRXJyb3IsIHJlcXVlc3QudXJsKCku
c3RyaW5nKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUUNvcmVB
cHBsaWNhdGlvbjo6dHJhbnNsYXRlKCJRV2ViRnJhbWUiLCAiUmVxdWVzdCBjYW5jZWxsZWQiLCAw
LCBRQ29yZUFwcGxpY2F0aW9uOjpVbmljb2RlVVRGOCkpOwogICAgIGVycm9yLnNldElzQ2FuY2Vs
bGF0aW9uKHRydWUpOwogICAgIHJldHVybiBlcnJvcjsgICAgCkBAIC01OSw3ICs1OSw3IEBAIFJl
c291cmNlRXJyb3IgY2FuY2VsbGVkRXJyb3IoY29uc3QgUmVzb3UKIAogUmVzb3VyY2VFcnJvciBi
bG9ja2VkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIHJldHVy
biBSZXNvdXJjZUVycm9yKCJXZWJLaXQiLCBXZWJLaXRFcnJvckNhbm5vdFVzZVJlc3RyaWN0ZWRQ
b3J0LCByZXF1ZXN0LnVybCgpLnByZXR0eVVSTCgpLAorICAgIHJldHVybiBSZXNvdXJjZUVycm9y
KCJXZWJLaXQiLCBXZWJLaXRFcnJvckNhbm5vdFVzZVJlc3RyaWN0ZWRQb3J0LCByZXF1ZXN0LnVy
bCgpLnN0cmluZygpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFFDb3JlQXBwbGljYXRpb246
OnRyYW5zbGF0ZSgiUVdlYkZyYW1lIiwgIlJlcXVlc3QgYmxvY2tlZCIsIDAsIFFDb3JlQXBwbGlj
YXRpb246OlVuaWNvZGVVVEY4KSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZWZsL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cJKHJldmlzaW9u
IDg3NDY3KQorKysgU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjkgQEAKKzIwMTEtMDUtMjYgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBdWRp
dCBhbGwgdXNlcyBvZiBLVVJMOjpwcmV0dHlVUkwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTYxMjAxCisKKyAgICAgICAgVXBkYXRlIGNhbGxlcnMgb2Yg
cHJldHR5VVJMIHRvIGp1c3QgY2FsbCBzdHJpbmcuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9DaHJvbWVDbGllbnRFZmwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50RWZs
Ojptb3VzZURpZE1vdmVPdmVyRWxlbWVudCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJh
bWVMb2FkZXJDbGllbnRFZmwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGll
bnRFZmw6OmRpc3BhdGNoV2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
TG9hZGVyQ2xpZW50RWZsOjphc3NpZ25JZGVudGlmaWVyVG9Jbml0aWFsUmVxdWVzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEVmbDo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lG
b3JOYXZpZ2F0aW9uQWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50
RWZsOjpkb3dubG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEVmbDo6
Y2FuY2VsbGVkRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRFZmw6
OmJsb2NrZWRFcnJvcik6CisgICAgICAgICogZXdrL2V3a19mcmFtZS5jcHA6CisgICAgICAgIChl
d2tfZnJhbWVfaGl0X3Rlc3RfbmV3KToKKyAgICAgICAgKGV3a19mcmFtZV91cmlfY2hhbmdlZCk6
CisgICAgICAgICogZXdrL2V3a192aWV3LmNwcDoKKyAgICAgICAgKF9ld2tfdmlld19wcml2X25l
dyk6CisgICAgICAgIChld2tfdmlld19mcmFtZV9jcmVhdGUpOgorICAgICAgICAoZXdrX3ZpZXdf
cGx1Z2luX2NyZWF0ZSk6CisKIDIwMTEtMDUtMTYgIEpvbiBMZWUgIDxqb25sZWVAYXBwbGUuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KSW5kZXg6IFNvdXJjZS9XZWJL
aXQvZWZsL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEVmbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50RWZsLmNwcAkocmV2
aXNpb24gODc0NjcpCisrKyBTb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVD
bGllbnRFZmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjAsNyArMzYwLDcgQEAgdm9pZCBDaHJv
bWVDbGllbnRFZmw6Om1vdXNlRGlkTW92ZU92ZXJFbAogICAgICAgICBpZiAoIXVybC5pc0VtcHR5
KCkgJiYgdXJsICE9IG1faG92ZXJlZExpbmtVUkwpIHsKICAgICAgICAgICAgIGNvbnN0IGNoYXIq
IGxpbmtbMl07CiAgICAgICAgICAgICBUZXh0RGlyZWN0aW9uIGRpcjsKLSAgICAgICAgICAgIENT
dHJpbmcgdXJsU3RyID0gdXJsLnByZXR0eVVSTCgpLnV0ZjgoKTsKKyAgICAgICAgICAgIENTdHJp
bmcgdXJsU3RyID0gdXJsLnN0cmluZygpLnV0ZjgoKTsKICAgICAgICAgICAgIENTdHJpbmcgdGl0
bGVTdHIgPSBoaXQudGl0bGUoZGlyKS51dGY4KCk7CiAgICAgICAgICAgICBsaW5rWzBdID0gdXJs
U3RyLmRhdGEoKTsKICAgICAgICAgICAgIGxpbmtbMV0gPSB0aXRsZVN0ci5kYXRhKCk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEVmbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRnJhbWVM
b2FkZXJDbGllbnRFZmwuY3BwCShyZXZpc2lvbiA4NzQ2NykKKysrIFNvdXJjZS9XZWJLaXQvZWZs
L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50RWZsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjA5LDcgKzIwOSw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OmRpc3BhdGNoRGlk
Q2EKIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6ZGlzcGF0Y2hXaWxsU2VuZFJlcXVlc3Qo
RG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBSZXNvdXJj
ZVJlcXVlc3QmIGNvcmVSZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiBjb3JlUmVzcG9u
c2UpCiB7Ci0gICAgQ1N0cmluZyB1cmwgPSBjb3JlUmVxdWVzdC51cmwoKS5wcmV0dHlVUkwoKS51
dGY4KCk7CisgICAgQ1N0cmluZyB1cmwgPSBjb3JlUmVxdWVzdC51cmwoKS5zdHJpbmcoKS51dGY4
KCk7CiAgICAgREJHKCJSZXNvdXJjZSB1cmw9JXMiLCB1cmwuZGF0YSgpKTsKIAogICAgIEV3a19G
cmFtZV9SZXNvdXJjZV9SZXF1ZXN0IHJlcXVlc3QgPSB7IDAsIGlkZW50aWZpZXIgfTsKQEAgLTIz
Niw3ICsyMzYsNyBAQCBib29sIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpzaG91bGRVc2VDcmVkCiAK
IHZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OmFzc2lnbklkZW50aWZpZXJUb0luaXRpYWxSZXF1
ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIGNvcmVSZXF1ZXN0KQogewotICAgIENTdHJpbmcgdXJsID0gY29yZVJlcXVl
c3QudXJsKCkucHJldHR5VVJMKCkudXRmOCgpOworICAgIENTdHJpbmcgdXJsID0gY29yZVJlcXVl
c3QudXJsKCkuc3RyaW5nKCkudXRmOCgpOwogICAgIERCRygiUmVzb3VyY2UgdXJsPSVzIiwgdXJs
LmRhdGEoKSk7CiAKICAgICBFd2tfRnJhbWVfUmVzb3VyY2VfUmVxdWVzdCByZXF1ZXN0ID0geyAw
LCBpZGVudGlmaWVyIH07CkBAIC0zMDksNyArMzA5LDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVu
dEVmbDo6ZGlzcGF0Y2hEZWNpZAogICAgIEFTU0VSVChtX2ZyYW1lKTsKICAgICAvLyBpZiBub3Qg
YWNjZXB0TmF2aWdhdGlvblJlcXVlc3QgLSBsb29rIGF0IFF0IC0+IFBvbGljeUlnbm9yZTsKICAg
ICAvLyBGSVhNRTogZG8gcHJvcGVyIGNoZWNrIGFuZCBvbmx5IHJlc2V0IGZvcm1zIHdoZW4gb24g
UG9saWN5SWdub3JlCi0gICAgY2hhciogdXJsID0gc3RyZHVwKHJlc291cmNlUmVxdWVzdC51cmwo
KS5wcmV0dHlVUkwoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBjaGFyKiB1cmwgPSBzdHJkdXAocmVz
b3VyY2VSZXF1ZXN0LnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogICAgIEV3a19GcmFt
ZV9SZXNvdXJjZV9SZXF1ZXN0IHJlcXVlc3QgPSB7IHVybCwgMCB9OwogICAgIEVpbmFfQm9vbCBy
ZXQgPSBld2tfdmlld19uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbihtX3ZpZXcsICZyZXF1ZXN0
KTsKICAgICBmcmVlKHVybCk7CkBAIC03NjQsNyArNzY0LDcgQEAgdm9pZCBGcmFtZUxvYWRlckNs
aWVudEVmbDo6ZG93bmxvYWQoUmVzbwogICAgIGlmICghbV92aWV3KQogICAgICAgICByZXR1cm47
CiAKLSAgICBDU3RyaW5nIHVybCA9IHJlcXVlc3QudXJsKCkucHJldHR5VVJMKCkudXRmOCgpOwor
ICAgIENTdHJpbmcgdXJsID0gcmVxdWVzdC51cmwoKS5zdHJpbmcoKS51dGY4KCk7CiAgICAgRXdr
X0Rvd25sb2FkIGRvd25sb2FkOwogCiAgICAgZG93bmxvYWQudXJsID0gdXJsLmRhdGEoKTsKQEAg
LTc4NCw3ICs3ODQsNyBAQCBlbnVtIHsKIAogUmVzb3VyY2VFcnJvciBGcmFtZUxvYWRlckNsaWVu
dEVmbDo6Y2FuY2VsbGVkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewot
ICAgIFJlc291cmNlRXJyb3IgZXJyb3IoIkVycm9yIiwgLTk5OSwgcmVxdWVzdC51cmwoKS5wcmV0
dHlVUkwoKSwKKyAgICBSZXNvdXJjZUVycm9yIGVycm9yKCJFcnJvciIsIC05OTksIHJlcXVlc3Qu
dXJsKCkuc3RyaW5nKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAiUmVxdWVzdCBjYW5jZWxs
ZWQiKTsKICAgICBlcnJvci5zZXRJc0NhbmNlbGxhdGlvbih0cnVlKTsKICAgICByZXR1cm4gZXJy
b3I7CkBAIC03OTIsNyArNzkyLDcgQEAgUmVzb3VyY2VFcnJvciBGcmFtZUxvYWRlckNsaWVudEVm
bDo6Y2FuYwogCiBSZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpibG9ja2VkRXJy
b3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIHJldHVybiBSZXNvdXJj
ZUVycm9yKCJFcnJvciIsIFdlYktpdEVycm9yQ2Fubm90VXNlUmVzdHJpY3RlZFBvcnQsIHJlcXVl
c3QudXJsKCkucHJldHR5VVJMKCksCisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoIkVycm9yIiwg
V2ViS2l0RXJyb3JDYW5ub3RVc2VSZXN0cmljdGVkUG9ydCwgcmVxdWVzdC51cmwoKS5zdHJpbmco
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVxdWVzdCBibG9ja2VkIik7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwCShyZXZpc2lvbiA4NzQ2NykKKysrIFNv
dXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYy
LDcgKzExNjIsNyBAQCBFd2tfSGl0X1Rlc3QqIGV3a19mcmFtZV9oaXRfdGVzdF9uZXcoY29uCiAg
ICAgICAgIGhpdF90ZXN0LT5mcmFtZSA9IGtpdChyZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkt
PmRvY3VtZW50KCktPmZyYW1lKCkpOwogCiAgICAgaGl0X3Rlc3QtPmxpbmsudGV4dCA9IGVpbmFf
c3RyaW5nc2hhcmVfYWRkKHJlc3VsdC50ZXh0Q29udGVudCgpLnV0ZjgoKS5kYXRhKCkpOwotICAg
IGhpdF90ZXN0LT5saW5rLnVybCA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHJlc3VsdC5hYnNvbHV0
ZUxpbmtVUkwoKS5wcmV0dHlVUkwoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBoaXRfdGVzdC0+bGlu
ay51cmwgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChyZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCkuc3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgaGl0X3Rlc3QtPmxpbmsudGl0bGUgPSBlaW5hX3N0
cmluZ3NoYXJlX2FkZChyZXN1bHQudGl0bGVEaXNwbGF5U3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7
CiAgICAgaGl0X3Rlc3QtPmxpbmsudGFyZ2V0X2ZyYW1lID0ga2l0KHJlc3VsdC50YXJnZXRGcmFt
ZSgpKTsKIApAQCAtMjAxNCw3ICsyMDE0LDcgQEAgRWluYV9Cb29sIGV3a19mcmFtZV91cmlfY2hh
bmdlZChFdmFzX09iagogewogICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBF
SU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1l
LCBFSU5BX0ZBTFNFKTsKLSAgICBXVEY6OkNTdHJpbmcgdXJpKHNkLT5mcmFtZS0+ZG9jdW1lbnQo
KS0+dXJsKCkucHJldHR5VVJMKCkudXRmOCgpKTsKKyAgICBXVEY6OkNTdHJpbmcgdXJpKHNkLT5m
cmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkudXRmOCgpKTsKIAogICAgIElORigidXJp
PSVzIiwgdXJpLmRhdGEoKSk7CiAgICAgaWYgKCF1cmkuZGF0YSgpKSB7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
ZWZsL2V3ay9ld2tfdmlldy5jcHAJKHJldmlzaW9uIDg3NDY3KQorKysgU291cmNlL1dlYktpdC9l
ZmwvZXdrL2V3a192aWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTc3LDcgKzU3Nyw3IEBAIHN0
YXRpYyBFd2tfVmlld19Qcml2YXRlX0RhdGEqIF9ld2tfdmlld18KICAgICBwcml2LT5wYWdlX3Nl
dHRpbmdzLT5zZXRVc2VzRW5jb2RpbmdEZXRlY3Rvcih0cnVlKTsKIAogICAgIHVybCA9IHByaXYt
PnBhZ2Vfc2V0dGluZ3MtPnVzZXJTdHlsZVNoZWV0TG9jYXRpb24oKTsKLSAgICBwcml2LT5zZXR0
aW5ncy51c2VyX3N0eWxlc2hlZXQgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZCh1cmwucHJldHR5VVJM
KCkudXRmOCgpLmRhdGEoKSk7CisgICAgcHJpdi0+c2V0dGluZ3MudXNlcl9zdHlsZXNoZWV0ID0g
ZWluYV9zdHJpbmdzaGFyZV9hZGQodXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCiAgICAg
cHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdfZGVmYXVsdCA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkCiAg
ICAgICAgIChwcml2LT5wYWdlX3NldHRpbmdzLT5kZWZhdWx0VGV4dEVuY29kaW5nTmFtZSgpLnV0
ZjgoKS5kYXRhKCkpOwpAQCAtNDAzNyw3ICs0MDM3LDcgQEAgV1RGOjpQYXNzUmVmUHRyPFdlYkNv
cmU6OkZyYW1lPiBld2tfdmlldwogewogICAgIERCRygibz0lcCwgZnJhbWU9JXAsIG5hbWU9JXMs
IG93bmVyRWxlbWVudD0lcCwgdXJsPSVzLCByZWZlcnJlcj0lcyIsCiAgICAgICAgIG8sIGZyYW1l
LCBuYW1lLnV0ZjgoKS5kYXRhKCksIG93bmVyRWxlbWVudCwKLSAgICAgICAgdXJsLnByZXR0eVVS
TCgpLnV0ZjgoKS5kYXRhKCksIHJlZmVycmVyLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICB1cmwu
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgcmVmZXJyZXIudXRmOCgpLmRhdGEoKSk7CiAKICAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKICAgICBFV0tfVklFV19QUklWX0dF
VF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOwpAQCAtNDA2OSw3ICs0MDY5LDcgQEAgV1RGOjpQYXNz
UmVmUHRyPFdlYkNvcmU6OldpZGdldD4gZXdrX3ZpZQogewogICAgIERCRygibz0lcCwgZnJhbWU9
JXAsIHNpemU9JWR4JWQsIGVsZW1lbnQ9JXAsIHVybD0lcywgbWltZVR5cGU9JXMiLAogICAgICAg
ICBvLCBmcmFtZSwgcGx1Z2luU2l6ZS53aWR0aCgpLCBwbHVnaW5TaXplLmhlaWdodCgpLCBlbGVt
ZW50LAotICAgICAgICB1cmwucHJldHR5VVJMKCkudXRmOCgpLmRhdGEoKSwgbWltZVR5cGUudXRm
OCgpLmRhdGEoKSk7CisgICAgICAgIHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBtaW1lVHlw
ZS51dGY4KCkuZGF0YSgpKTsKIAogICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2Qs
IDApOwogICAgIHNkLT5jaGFuZ2VkLmZyYW1lX3JlY3QgPSBFSU5BX1RSVUU7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ndGsv
Q2hhbmdlTG9nCShyZXZpc2lvbiA4NzQ2NykKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDExLTA1LTI2ICBBZGFtIEJhcnRo
ICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQXVkaXQgYWxsIHVzZXMgb2YgS1VSTDo6cHJldHR5VVJMCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MTIwMQorCisgICAgICAg
IFVwZGF0ZSBjYWxsZXJzIG9mIHByZXR0eVVSTCB0byBqdXN0IGNhbGwgc3RyaW5nLgorCisgICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6Q2hyb21lQ2xpZW50Ojptb3VzZURpZE1vdmVPdmVyRWxlbWVudCk6CisgICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpG
cmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRDaGFuZ2VMb2NhdGlvbldpdGhpblBhZ2UpOgor
ICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRDb21taXRMb2Fk
KToKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0d2Vidmlldy5jcHA6CisgICAgICAgICh3ZWJraXRf
d2ViX3ZpZXdfZ2V0X2ljb25fdXJpKToKKwogMjAxMS0wNS0yNiAgR3VzdGF2byBOb3JvbmhhIFNp
bHZhICA8Z3VzdGF2by5ub3JvbmhhQGNvbGxhYm9yYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgTWFydGluIFJvYmluc29uLgpJbmRleDogU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvQ2hyb21lQ2xpZW50R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCShyZXZpc2lvbiA4NzQ2NykKKysrIFNv
dXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU0MSw3ICs1NDEsNyBAQCB2b2lkIENocm9tZUNsaWVudDo6bW91c2VEaWRN
b3ZlT3ZlckVsZW1lCiAgICAgICAgIGlmICghdXJsLmlzRW1wdHkoKSAmJiB1cmwgIT0gbV9ob3Zl
cmVkTGlua1VSTCkgewogICAgICAgICAgICAgVGV4dERpcmVjdGlvbiBkaXI7CiAgICAgICAgICAg
ICBDU3RyaW5nIHRpdGxlU3RyaW5nID0gaGl0LnRpdGxlKGRpcikudXRmOCgpOwotICAgICAgICAg
ICAgQ1N0cmluZyB1cmxTdHJpbmcgPSB1cmwucHJldHR5VVJMKCkudXRmOCgpOworICAgICAgICAg
ICAgQ1N0cmluZyB1cmxTdHJpbmcgPSB1cmwuc3RyaW5nKCkudXRmOCgpOwogICAgICAgICAgICAg
Z19zaWduYWxfZW1pdF9ieV9uYW1lKG1fd2ViVmlldywgImhvdmVyaW5nLW92ZXItbGluayIsIHRp
dGxlU3RyaW5nLmRhdGEoKSwgdXJsU3RyaW5nLmRhdGEoKSk7CiAgICAgICAgICAgICBtX2hvdmVy
ZWRMaW5rVVJMID0gdXJsOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L2d0ay9XZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCShyZXZp
c2lvbiA4NzQ2NykKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9h
ZGVyQ2xpZW50R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODk1LDcgKzg5NSw3IEBAIHZvaWQg
RnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkQ2hhbmcKIHsKICAgICBXZWJLaXRXZWJGcmFt
ZVByaXZhdGUqIHByaXYgPSBtX2ZyYW1lLT5wcml2OwogICAgIGdfZnJlZShwcml2LT51cmkpOwot
ICAgIHByaXYtPnVyaSA9IGdfc3RyZHVwKGNvcmUobV9mcmFtZSktPmRvY3VtZW50KCktPnVybCgp
LnByZXR0eVVSTCgpLnV0ZjgoKS5kYXRhKCkpOworICAgIHByaXYtPnVyaSA9IGdfc3RyZHVwKGNv
cmUobV9mcmFtZSktPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwog
ICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVDVChtX2ZyYW1lKSwgInVyaSIpOwogICAgIFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcgPSBnZXRWaWV3RnJvbUZyYW1lKG1fZnJhbWUpOwogICAgIGlmICht
X2ZyYW1lID09IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh3ZWJWaWV3KSkKQEAgLTk4
Niw3ICs5ODYsNyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZENvbW1pCiAK
ICAgICBXZWJLaXRXZWJGcmFtZVByaXZhdGUqIHByaXYgPSBtX2ZyYW1lLT5wcml2OwogICAgIGdf
ZnJlZShwcml2LT51cmkpOwotICAgIHByaXYtPnVyaSA9IGdfc3RyZHVwKGNvcmUobV9mcmFtZSkt
PmxvYWRlcigpLT5hY3RpdmVEb2N1bWVudExvYWRlcigpLT51cmwoKS5wcmV0dHlVUkwoKS51dGY4
KCkuZGF0YSgpKTsKKyAgICBwcml2LT51cmkgPSBnX3N0cmR1cChjb3JlKG1fZnJhbWUpLT5sb2Fk
ZXIoKS0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEo
KSk7CiAgICAgZ19mcmVlKHByaXYtPnRpdGxlKTsKICAgICBwcml2LT50aXRsZSA9IE5VTEw7CiAg
ICAgZ19vYmplY3Rfbm90aWZ5KEdfT0JKRUNUKG1fZnJhbWUpLCAidXJpIik7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCShyZXZpc2lvbiA4NzQ2NykK
KysrIFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDk3OCw3ICs0OTc4LDcgQEAgV2ViS2l0SGl0VGVzdFJlc3VsdCogd2Via2l0X3dl
Yl92aWV3X2dldAogR19DT05TVF9SRVRVUk4gZ2NoYXIqIHdlYmtpdF93ZWJfdmlld19nZXRfaWNv
bl91cmkoV2ViS2l0V2ViVmlldyogd2ViVmlldykKIHsKICAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldyksIDApOwotICAgIFN0cmluZyBpY29uVVJMID0g
aWNvbkRhdGFiYXNlKCkuc3luY2hyb25vdXNJY29uVVJMRm9yUGFnZVVSTChjb3JlKHdlYlZpZXcp
LT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKS0+dXJsKCkucHJldHR5VVJMKCkpOworICAgIFN0cmlu
ZyBpY29uVVJMID0gaWNvbkRhdGFiYXNlKCkuc3luY2hyb25vdXNJY29uVVJMRm9yUGFnZVVSTChj
b3JlKHdlYlZpZXcpLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkpOwog
ICAgIHdlYlZpZXctPnByaXYtPmljb25VUkkgPSBpY29uVVJMLnV0ZjgoKTsKICAgICByZXR1cm4g
d2ViVmlldy0+cHJpdi0+aWNvblVSSS5kYXRhKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkocmV2
aXNpb24gODc0NjcpCisrKyBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDIxIEBACisyMDExLTA1LTI2ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QXVkaXQgYWxsIHVzZXMgb2YgS1VSTDo6cHJldHR5VVJMCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MTIwMQorCisgICAgICAgIFVwZGF0ZSBjYWxsZXJz
IG9mIHByZXR0eVVSTCB0byBqdXN0IGNhbGwgc3RyaW5nLgorCisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50
UXQ6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9G
cmFtZUxvYWRlckNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xp
ZW50UXQ6OnVwZGF0ZUdsb2JhbEhpc3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2Fk
ZXJDbGllbnRRdDo6Y2FuY2VsbGVkRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2Fk
ZXJDbGllbnRRdDo6YmxvY2tlZEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVy
Q2xpZW50UXQ6Om9iamVjdENvbnRlbnRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9h
ZGVyQ2xpZW50UXQ6OmNyZWF0ZVBsdWdpbik6CisKIDIwMTEtMDUtMjYgIEFsZXhpcyBNZW5hcmQg
IDxhbGV4aXMubWVuYXJkQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCBidWls
ZCBmaXggZm9yIFF0IGFuZCBRdWlja1RpbWUgYmFja2VuZC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwCShyZXZpc2lvbiA4
NzQ2NykKKysrIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDYsNyArNTA2LDcgQEAgdm9pZCBDaHJvbWVDbGllbnRR
dDo6bW91c2VEaWRNb3ZlT3ZlckVsZQogICAgICAgICBsYXN0SG92ZXJVUkwgPSByZXN1bHQuYWJz
b2x1dGVMaW5rVVJMKCk7CiAgICAgICAgIGxhc3RIb3ZlclRpdGxlID0gcmVzdWx0LnRpdGxlKGRp
cik7CiAgICAgICAgIGxhc3RIb3ZlckNvbnRlbnQgPSByZXN1bHQudGV4dENvbnRlbnQoKTsKLSAg
ICAgICAgZW1pdCBtX3dlYlBhZ2UtPmxpbmtIb3ZlcmVkKGxhc3RIb3ZlclVSTC5wcmV0dHlVUkwo
KSwKKyAgICAgICAgZW1pdCBtX3dlYlBhZ2UtPmxpbmtIb3ZlcmVkKGxhc3RIb3ZlclVSTC5zdHJp
bmcoKSwKICAgICAgICAgICAgICAgICBsYXN0SG92ZXJUaXRsZSwgbGFzdEhvdmVyQ29udGVudCk7
CiAgICAgfQogfQpJbmRleDogU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxv
YWRlckNsaWVudFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCShyZXZpc2lvbiA4NzQ2NykKKysrIFNvdXJj
ZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTgwMiw3ICs4MDIsNyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OnVw
ZGF0ZUdsb2JhbEhpCiAgICAgUVdlYkhpc3RvcnlJbnRlcmZhY2UqIGhpc3RvcnkgPSBRV2ViSGlz
dG9yeUludGVyZmFjZTo6ZGVmYXVsdEludGVyZmFjZSgpOwogICAgIFdlYkNvcmU6OkRvY3VtZW50
TG9hZGVyKiBsb2FkZXIgPSBtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKTsKICAg
ICBpZiAoaGlzdG9yeSkKLSAgICAgICAgaGlzdG9yeS0+YWRkSGlzdG9yeUVudHJ5KGxvYWRlci0+
dXJsRm9ySGlzdG9yeSgpLnByZXR0eVVSTCgpKTsKKyAgICAgICAgaGlzdG9yeS0+YWRkSGlzdG9y
eUVudHJ5KGxvYWRlci0+dXJsRm9ySGlzdG9yeSgpLnN0cmluZygpKTsKIAogICAgIGlmIChkdW1w
SGlzdG9yeUNhbGxiYWNrcykgewogICAgICAgICBwcmludGYoIldlYlZpZXcgbmF2aWdhdGVkIHRv
IHVybCBcIiVzXCIgd2l0aCB0aXRsZSBcIiVzXCIgd2l0aCBIVFRQIGVxdWl2YWxlbnQgbWV0aG9k
IFwiJXNcIi4gIFRoZSBuYXZpZ2F0aW9uIHdhcyAlcyBhbmQgd2FzICVzJXMuXG4iLApAQCAtOTI2
LDcgKzkyNiw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6Y29tbWl0dGVkTG9hZCgKIAog
V2ViQ29yZTo6UmVzb3VyY2VFcnJvciBGcmFtZUxvYWRlckNsaWVudFF0OjpjYW5jZWxsZWRFcnJv
cihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0gICAgUmVzb3Vy
Y2VFcnJvciBlcnJvciA9IFJlc291cmNlRXJyb3IoIlF0TmV0d29yayIsIFFOZXR3b3JrUmVwbHk6
Ok9wZXJhdGlvbkNhbmNlbGVkRXJyb3IsIHJlcXVlc3QudXJsKCkucHJldHR5VVJMKCksCisgICAg
UmVzb3VyY2VFcnJvciBlcnJvciA9IFJlc291cmNlRXJyb3IoIlF0TmV0d29yayIsIFFOZXR3b3Jr
UmVwbHk6Ok9wZXJhdGlvbkNhbmNlbGVkRXJyb3IsIHJlcXVlc3QudXJsKCkuc3RyaW5nKCksCiAg
ICAgICAgICAgICBRQ29yZUFwcGxpY2F0aW9uOjp0cmFuc2xhdGUoIlFXZWJGcmFtZSIsICJSZXF1
ZXN0IGNhbmNlbGxlZCIsIDAsIFFDb3JlQXBwbGljYXRpb246OlVuaWNvZGVVVEY4KSk7CiAgICAg
ZXJyb3Iuc2V0SXNDYW5jZWxsYXRpb24odHJ1ZSk7CiAgICAgcmV0dXJuIGVycm9yOwpAQCAtOTQ2
LDcgKzk0Niw3IEBAIGVudW0gewogCiBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVy
Q2xpZW50UXQ6OmJsb2NrZWRFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QpCiB7Ci0gICAgcmV0dXJuIFJlc291cmNlRXJyb3IoIldlYktpdEVycm9yRG9tYWluIiwg
V2ViS2l0RXJyb3JDYW5ub3RVc2VSZXN0cmljdGVkUG9ydCwgcmVxdWVzdC51cmwoKS5wcmV0dHlV
UkwoKSwKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcigiV2ViS2l0RXJyb3JEb21haW4iLCBXZWJL
aXRFcnJvckNhbm5vdFVzZVJlc3RyaWN0ZWRQb3J0LCByZXF1ZXN0LnVybCgpLnN0cmluZygpLAog
ICAgICAgICAgICAgUUNvcmVBcHBsaWNhdGlvbjo6dHJhbnNsYXRlKCJRV2ViRnJhbWUiLCAiUmVx
dWVzdCBibG9ja2VkIiwgMCwgUUNvcmVBcHBsaWNhdGlvbjo6VW5pY29kZVVURjgpKTsKIH0KIApA
QCAtMTM2MCw3ICsxMzYwLDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0Ojp0cmFuc2Zlckxv
YWRpbgogCiBPYmplY3RDb250ZW50VHlwZSBGcmFtZUxvYWRlckNsaWVudFF0OjpvYmplY3RDb250
ZW50VHlwZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGVJbiwgYm9vbCBz
aG91bGRQcmVmZXJQbHVnSW5zRm9ySW1hZ2VzKQogewotICAgIC8vIHFEZWJ1ZygpPDwiICsrKysr
KysrKysrKysrKysgdXJsIGlzICI8PHVybC5wcmV0dHlVUkwoKTw8IiwgbWltZSA9ICI8PG1pbWVU
eXBlSW47CisgICAgLy8gcURlYnVnKCk8PCIgKysrKysrKysrKysrKysrKyB1cmwgaXMgIjw8dXJs
LnN0cmluZygpPDwiLCBtaW1lID0gIjw8bWltZVR5cGVJbjsKICAgICBRRmlsZUluZm8gZmkodXJs
LnBhdGgoKSk7CiAgICAgU3RyaW5nIGV4dGVuc2lvbiA9IGZpLnN1ZmZpeCgpOwogICAgIGlmICht
aW1lVHlwZUluID09ICJhcHBsaWNhdGlvbi94LXF0LXBsdWdpbiIgfHwgbWltZVR5cGVJbiA9PSAi
YXBwbGljYXRpb24veC1xdC1zdHlsZWQtd2lkZ2V0IikKQEAgLTE1MjMsOCArMTUyMyw4IEBAIHBy
aXZhdGU6CiBQYXNzUmVmUHRyPFdpZGdldD4gRnJhbWVMb2FkZXJDbGllbnRRdDo6Y3JlYXRlUGx1
Z2luKGNvbnN0IEludFNpemUmIHBsdWdpblNpemUsIEhUTUxQbHVnSW5FbGVtZW50KiBlbGVtZW50
LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxs
eSkKIHsKLSAgICAvLyBxRGVidWcoKTw8Ii0tLS0tLSBDcmVhdGluZyBwbHVnaW4gaW4gRnJhbWVM
b2FkZXJDbGllbnRRdDo6Y3JlYXRlUGx1Z2luIGZvciAiPDx1cmwucHJldHR5VVJMKCkgPDwgbWlt
ZVR5cGU7Ci0gICAgLy8gcURlYnVnKCk8PCItLS0tLS1cdCB1cmwgPSAiPDx1cmwucHJldHR5VVJM
KCk7CisgICAgLy8gcURlYnVnKCk8PCItLS0tLS0gQ3JlYXRpbmcgcGx1Z2luIGluIEZyYW1lTG9h
ZGVyQ2xpZW50UXQ6OmNyZWF0ZVBsdWdpbiBmb3IgIjw8dXJsLnN0cmluZygpIDw8IG1pbWVUeXBl
OworICAgIC8vIHFEZWJ1ZygpPDwiLS0tLS0tXHQgdXJsID0gIjw8dXJsLnN0cmluZygpOwogCiAg
ICAgaWYgKCFtX3dlYkZyYW1lKQogICAgICAgICByZXR1cm4gMDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95117</attachid>
            <date>2011-05-26 22:58:07 -0700</date>
            <delta_ts>2011-05-27 16:14:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-61201-20110526225806.patch</filename>
            <type>text/plain</type>
            <size>26134</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg3NDcyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTEtMDUtMjYgIEFkYW0gQmFy
dGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBdWRpdCBhbGwgdXNlcyBvZiBLVVJMOjpwcmV0dHlVUkwKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYxMjAxCisKKyAgICAg
ICAgQXMgZmFyIGFzIEkgY2FuIHRlbGwsIGFsbCB0aGUgY2FsbGVycyBvZiB0aGlzIEFQSSBhcmUg
Y29uZnVzZWQuICBUaGVyZQorICAgICAgICBzZWVtcyB0byBiZSBhIGNhcmdvIGN1bHQgb2YgdXNp
bmcgdGhlICJwcmV0dHkiIHZlcnNpb24gb2YgYSBVUkwsIGJ1dCBpbgorICAgICAgICByZWFsaXR5
IGZvbGtzIGp1c3Qgd2FudCB0aGUgVVJMIGl0c2VsZi4gIFRoZSBvbmx5IGNhc2UgSSdtIHVuc3Vy
ZSBhYm91dAorICAgICAgICBpcyBsb2NhdGlvbi5ocmVmLCB3aGljaCBjb3VsZCBoYXZlIHNvbWUg
Y29tcGF0aWJpbGl0eSBjb25zdHJhaW50cy4KKyAgICAgICAgSSd2ZSByZW5hbWVkIHByZXR0eVVS
TCB0byBkZXByZWNhdGVkU3RyaW5nIHRvIGRpc2NvdXJhZ2UgZm9sa3MgZnJvbQorICAgICAgICBm
dXJ0aGVyIGNhcmdvLWN1bHRpbmcuCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAg
ICAgKiBwYWdlL0xvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxvY2F0aW9uOjpocmVm
KToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2F0aW9uOjp0b1N0cmluZyk6CisgICAgICAgICogcGxh
dGZvcm0vS1VSTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpkZXByZWNhdGVkU3RyaW5n
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9LVVJMLmg6CisgICAgICAgICogcGxhdGZvcm0vS1VSTEdv
b2dsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpkZXByZWNhdGVkU3RyaW5nKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpwcmVwYXJlRm9yVVJMKToKKyAgICAgICAg
KiB3b3JrZXJzL1dvcmtlckxvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlckxv
Y2F0aW9uOjpocmVmKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckxvY2F0aW9uOjp0b1N0cmlu
Zyk6CisKIDIwMTEtMDUtMjYgIE1paGFpIFBhcnBhcml0YSAgPG1paGFpcEBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhw
LmluCShyZXZpc2lvbiA4NzQ3MikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjE0LDggKzE2MTQsOCBAQCBfX1pON1dlYkNvcmUxNlNjcmlwdENv
bnRyb2xsZXIyOWNsZWFudXBTCiBfX1pON1dlYkNvcmUxNmpzU3RyaW5nU2xvd0Nhc2VFUE4zSlND
OUV4ZWNTdGF0ZUVSTjNXVEY3SGFzaE1hcElQTlMzXzEwU3RyaW5nSW1wbEVOUzBfNFdlYWtJTlMw
XzhKU1N0cmluZ0VFRU5TM18xMFN0cmluZ0hhc2hFTlMzXzEwSGFzaFRyYWl0c0lTNl9FRU5TQl9J
UzlfRUVFRVM2XwogX19aTjdXZWJDb3JlMTdIVE1MUGx1Z0luRWxlbWVudDExZ2V0TlBPYmplY3RF
dgogX19aTks3V2ViQ29yZTE0U2VjdXJpdHlPcmlnaW45Y2FuQWNjZXNzRVBLUzBfCitfX1pOSzdX
ZWJDb3JlNEtVUkw2c3RyaW5nRXYKIF9fWk5LN1dlYkNvcmU0S1VSTDdoYXNQYXRoRXYKLV9fWk5L
N1dlYkNvcmU0S1VSTDlwcmV0dHlVUkxFdgogI2VuZGlmCiAKICNpZiBFTkFCTEUoT1JJRU5UQVRJ
T05fRVZFTlRTKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9Mb2NhdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Mb2NhdGlvbi5jcHAJKHJldmlzaW9uIDg3NDcy
KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Mb2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY2LDcgKzY2LDcgQEAgU3RyaW5nIExvY2F0aW9uOjpocmVmKCkgY29uc3QKICAgICAgICAgcmV0
dXJuIFN0cmluZygpOwogCiAgICAgY29uc3QgS1VSTCYgdXJsID0gdGhpcy0+dXJsKCk7Ci0gICAg
cmV0dXJuIHVybC5oYXNQYXRoKCkgPyB1cmwucHJldHR5VVJMKCkgOiB1cmwucHJldHR5VVJMKCkg
KyAiLyI7CisgICAgcmV0dXJuIHVybC5oYXNQYXRoKCkgPyB1cmwuZGVwcmVjYXRlZFN0cmluZygp
IDogdXJsLmRlcHJlY2F0ZWRTdHJpbmcoKSArICIvIjsKIH0KIAogU3RyaW5nIExvY2F0aW9uOjpw
cm90b2NvbCgpIGNvbnN0CkBAIC0xNTUsNyArMTU1LDcgQEAgU3RyaW5nIExvY2F0aW9uOjp0b1N0
cmluZygpIGNvbnN0CiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAogICAgIGNvbnN0IEtVUkwm
IHVybCA9IHRoaXMtPnVybCgpOwotICAgIHJldHVybiB1cmwuaGFzUGF0aCgpID8gdXJsLnByZXR0
eVVSTCgpIDogdXJsLnByZXR0eVVSTCgpICsgIi8iOworICAgIHJldHVybiB1cmwuaGFzUGF0aCgp
ID8gdXJsLmRlcHJlY2F0ZWRTdHJpbmcoKSA6IHVybC5kZXByZWNhdGVkU3RyaW5nKCkgKyAiLyI7
CiB9CiAKIHZvaWQgTG9jYXRpb246OnNldEhyZWYoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsIERP
TVdpbmRvdyogYWN0aXZlV2luZG93LCBET01XaW5kb3cqIGZpcnN0V2luZG93KQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vS1VSTC5jcHAJKHJldmlzaW9uIDg3NDcyKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vS1VSTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3Niw3ICs4NzYsNyBAQCB2b2lk
IEtVUkw6OnNldFBhdGgoY29uc3QgU3RyaW5nJiBzKQogICAgIHBhcnNlKG1fc3RyaW5nLmxlZnQo
bV9wb3J0RW5kKSArIGVuY29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXMocGF0aCkgKyBtX3N0cmlu
Zy5zdWJzdHJpbmcobV9wYXRoRW5kKSk7CiB9CiAKLVN0cmluZyBLVVJMOjpwcmV0dHlVUkwoKSBj
b25zdAorU3RyaW5nIEtVUkw6OmRlcHJlY2F0ZWRTdHJpbmcoKSBjb25zdAogewogICAgIGlmICgh
bV9pc1ZhbGlkKQogICAgICAgICByZXR1cm4gbV9zdHJpbmc7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9LVVJMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
S1VSTC5oCShyZXZpc2lvbiA4NzQ3MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tVUkwu
aAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDcgKzE1MCw5IEBAIHB1YmxpYzoKIAogICAgIFN0cmlu
ZyBiYXNlQXNTdHJpbmcoKSBjb25zdDsKIAotICAgIFN0cmluZyBwcmV0dHlVUkwoKSBjb25zdDsK
KyAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgdXNlZCBieSBsb2NhdGlvbi5ocmVmLiBJdCdz
IGxpa2VseSB3ZSBzaG91bGRuJ3QKKyAgICAvLyB1c2UgaXQgZm9yIHRoYXQgcHVycG9zZSwgYnV0
IG1vcmUgc3R1ZHkgaXMgbmVjZXNzYXJ5IGJlZm9yZSB3ZSByZW1vdmUgaXQuCisgICAgU3RyaW5n
IGRlcHJlY2F0ZWRTdHJpbmcoKSBjb25zdDsKICAgICBTdHJpbmcgZmlsZVN5c3RlbVBhdGgoKSBj
b25zdDsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY3VycmVudCBVUkwncyBwcm90b2Nv
bCBpcyB0aGUgc2FtZSBhcyB0aGUgbnVsbC0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0tVUkxHb29nbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tV
UkxHb29nbGUuY3BwCShyZXZpc2lvbiA4NzQ3MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0tVUkxHb29nbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NzIsNyArNzcyLDcgQEAgdm9pZCBL
VVJMOjpzZXRQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKIC8vIE9uIE1hYywgdGhpcyBqdXN0IHNl
ZW1zIHRvIHJldHVybiB0aGUgc2FtZSBVUkwsIGJ1dCB3aXRoICIvZm9vL2JhciIgZm9yCiAvLyBm
aWxlOiBVUkxzIGluc3RlYWQgb2YgZmlsZTovLy9mb28vYmFyLiBXZSBkb24ndCBib3RoZXIgd2l0
aCBhbnkgb2YgdGhpcywKIC8vIGF0IGxlYXN0IGZvciBub3cuCi1TdHJpbmcgS1VSTDo6cHJldHR5
VVJMKCkgY29uc3QKK1N0cmluZyBLVVJMOjpkZXByZWNhdGVkU3RyaW5nKCkgY29uc3QKIHsKICAg
ICBpZiAoIW1fdXJsLm1faXNWYWxpZCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jl
c291cmNlSGFuZGxlU291cC5jcHAJKHJldmlzaW9uIDg3NDcyKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE4MCw5ICsxODAsOSBAQCBzdGF0aWMgdm9pZCBlbnN1cmVTZXNzaW9uSXNJbml0aWFs
aXplZChTCiAgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1Qoc2Vzc2lvbiksICJ3ZWJraXQt
aW5pdCIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KDB4ZGVhZGJlZWYpKTsKIH0KIAotdm9pZCBS
ZXNvdXJjZUhhbmRsZTo6cHJlcGFyZUZvclVSTChjb25zdCBLVVJMICZ1cmwpCit2b2lkIFJlc291
cmNlSGFuZGxlOjpwcmVwYXJlRm9yVVJMKGNvbnN0IEtVUkwmIHVybCkKIHsKLSAgICBHT3duUHRy
PFNvdXBVUkk+IHNvdXBVUkkoc291cF91cmlfbmV3KHVybC5wcmV0dHlVUkwoKS51dGY4KCkuZGF0
YSgpKSk7CisgICAgR093blB0cjxTb3VwVVJJPiBzb3VwVVJJKHNvdXBfdXJpX25ldyh1cmwuc3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSkpOwogICAgIGlmICghc291cFVSSSkKICAgICAgICAgcmV0dXJu
OwogICAgIHNvdXBfc2Vzc2lvbl9wcmVwYXJlX2Zvcl91cmkoUmVzb3VyY2VIYW5kbGU6OmRlZmF1
bHRTZXNzaW9uKCksIHNvdXBVUkkuZ2V0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXJMb2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXJMb2NhdGlvbi5jcHAJKHJldmlzaW9uIDg3NDcyKQorKysgU291cmNlL1dlYkNvcmUv
d29ya2Vycy9Xb3JrZXJMb2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTdHJpbmcgV29ya2VyTG9jYXRpb246OmhyZWYoKSBj
b25zdAogewotICAgIHJldHVybiBtX3VybC5oYXNQYXRoKCkgPyBtX3VybC5wcmV0dHlVUkwoKSA6
IG1fdXJsLnByZXR0eVVSTCgpICsgIi8iOworICAgIHJldHVybiBtX3VybC5oYXNQYXRoKCkgPyBt
X3VybC5kZXByZWNhdGVkU3RyaW5nKCkgOiBtX3VybC5kZXByZWNhdGVkU3RyaW5nKCkgKyAiLyI7
CiB9CiAKIFN0cmluZyBXb3JrZXJMb2NhdGlvbjo6cHJvdG9jb2woKSBjb25zdApAQCAtNzYsNyAr
NzYsNyBAQCBTdHJpbmcgV29ya2VyTG9jYXRpb246Omhhc2goKSBjb25zdAogCiBTdHJpbmcgV29y
a2VyTG9jYXRpb246OnRvU3RyaW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV91cmwuaGFzUGF0
aCgpID8gbV91cmwucHJldHR5VVJMKCkgOiBtX3VybC5wcmV0dHlVUkwoKSArICIvIjsKKyAgICBy
ZXR1cm4gbV91cmwuaGFzUGF0aCgpID8gbV91cmwuZGVwcmVjYXRlZFN0cmluZygpIDogbV91cmwu
ZGVwcmVjYXRlZFN0cmluZygpICsgIi8iOwogfQogCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9u
IDg3NDcyKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTggQEAKKzIwMTEtMDUtMjYgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBdWRpdCBh
bGwgdXNlcyBvZiBLVVJMOjpwcmV0dHlVUkwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTYxMjAxCisKKyAgICAgICAgVXBkYXRlIGNhbGxlcnMgb2YgcHJl
dHR5VVJMIHRvIGp1c3QgY2FsbCBzdHJpbmcuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
RnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWdpbik6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9xdC9XZWJFcnJvcnNRdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OmNhbmNl
bGxlZEVycm9yKToKKyAgICAgICAgKFdlYktpdDo6YmxvY2tlZEVycm9yKToKKwogMjAxMS0wNS0y
NiAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5j
cHAJKHJldmlzaW9uIDg3NDcyKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOTgs
MTIgKzExOTgsNiBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp0cmFuc2ZlckxvYWRpCiAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotc3RhdGljIFN0cmluZyBkb2N1bWVudFVSTChGcmFt
ZSogZnJhbWUpCi17Ci0gICAgY29uc3QgS1VSTCYgdXJsID0gZnJhbWUtPmRvY3VtZW50KCktPnVy
bCgpOwotICAgIHJldHVybiB1cmwuaGFzUGF0aCgpID8gdXJsLnByZXR0eVVSTCgpIDogdXJsLnBy
ZXR0eVVSTCgpICsgIi8iOwotfQotCiBQYXNzUmVmUHRyPFdpZGdldD4gV2ViRnJhbWVMb2FkZXJD
bGllbnQ6OmNyZWF0ZVBsdWdpbihjb25zdCBJbnRTaXplJiwgSFRNTFBsdWdJbkVsZW1lbnQqIHBs
dWdpbkVsZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFt
TmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpCiB7CiAgICAgQVNTRVJUKHBhcmFtTmFtZXMuc2l6
ZSgpID09IHBhcmFtVmFsdWVzLnNpemUoKSk7CkBAIC0xMjE3LDE0ICsxMjExLDE0IEBAIFBhc3NS
ZWZQdHI8V2lkZ2V0PiBXZWJGcmFtZUxvYWRlckNsaWVudDoKICAgICBwYXJhbWV0ZXJzLnZhbHVl
cyA9IHBhcmFtVmFsdWVzOwogICAgIHBhcmFtZXRlcnMubWltZVR5cGUgPSBtaW1lVHlwZTsKICAg
ICBwYXJhbWV0ZXJzLmxvYWRNYW51YWxseSA9IGxvYWRNYW51YWxseTsKLSAgICBwYXJhbWV0ZXJz
LmRvY3VtZW50VVJMID0gZG9jdW1lbnRVUkwobV9mcmFtZS0+Y29yZUZyYW1lKCkpOworICAgIHBh
cmFtZXRlcnMuZG9jdW1lbnRVUkwgPSBtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+ZG9jdW1lbnQoKS0+
dXJsKCkuc3RyaW5nKCk7CiAKICAgICBGcmFtZSogbWFpbkZyYW1lID0gd2ViUGFnZS0+bWFpbkZy
YW1lKCktPmNvcmVGcmFtZSgpOwogICAgIGlmIChtX2ZyYW1lLT5jb3JlRnJhbWUoKSA9PSBtYWlu
RnJhbWUpCiAgICAgICAgIHBhcmFtZXRlcnMudG9wbGV2ZWxEb2N1bWVudFVSTCA9IHBhcmFtZXRl
cnMuZG9jdW1lbnRVUkw7CiAgICAgZWxzZSBpZiAobV9mcmFtZS0+Y29yZUZyYW1lKCktPmRvY3Vt
ZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2VzcyhtYWluRnJhbWUtPmRvY3VtZW50KCkt
PnNlY3VyaXR5T3JpZ2luKCkpKSB7CiAgICAgICAgIC8vIFdlIG9ubHkgd2FudCB0byBzZXQgdGhl
IHRvcGxldmVsIGRvY3VtZW50IFVSTCBpZiB0aGUgcGx1Zy1pbiBoYXMgYWNjZXNzIHRvIGl0Lgot
ICAgICAgICBwYXJhbWV0ZXJzLnRvcGxldmVsRG9jdW1lbnRVUkwgPSBkb2N1bWVudFVSTChtYWlu
RnJhbWUpOworICAgICAgICBwYXJhbWV0ZXJzLnRvcGxldmVsRG9jdW1lbnRVUkwgPSBtYWluRnJh
bWUtPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpOwogICAgIH0KIAogICAgIC8vIDxyZGFyOi8v
cHJvYmxlbS84NDQwOTAzPjogQXBwbGVDb25uZWN0IGhhcyBhIGJ1ZyB3aGVyZSBpdCBkb2VzIG5v
dApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9xdC9XZWJF
cnJvcnNRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9xdC9XZWJFcnJvcnNRdC5jcHAJKHJldmlzaW9uIDg3NDcyKQorKysgU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9xdC9XZWJFcnJvcnNRdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgZW51bSB7CiAKIFJlc291cmNlRXJyb3IgY2Fu
Y2VsbGVkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIFJlc291
cmNlRXJyb3IgZXJyb3IgPSBSZXNvdXJjZUVycm9yKCJRdE5ldHdvcmsiLCBRTmV0d29ya1JlcGx5
OjpPcGVyYXRpb25DYW5jZWxlZEVycm9yLCByZXF1ZXN0LnVybCgpLnByZXR0eVVSTCgpLAorICAg
IFJlc291cmNlRXJyb3IgZXJyb3IgPSBSZXNvdXJjZUVycm9yKCJRdE5ldHdvcmsiLCBRTmV0d29y
a1JlcGx5OjpPcGVyYXRpb25DYW5jZWxlZEVycm9yLCByZXF1ZXN0LnVybCgpLnN0cmluZygpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFDb3JlQXBwbGljYXRpb246
OnRyYW5zbGF0ZSgiUVdlYkZyYW1lIiwgIlJlcXVlc3QgY2FuY2VsbGVkIiwgMCwgUUNvcmVBcHBs
aWNhdGlvbjo6VW5pY29kZVVURjgpKTsKICAgICBlcnJvci5zZXRJc0NhbmNlbGxhdGlvbih0cnVl
KTsKICAgICByZXR1cm4gZXJyb3I7ICAgIApAQCAtNTksNyArNTksNyBAQCBSZXNvdXJjZUVycm9y
IGNhbmNlbGxlZEVycm9yKGNvbnN0IFJlc291CiAKIFJlc291cmNlRXJyb3IgYmxvY2tlZEVycm9y
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAgICByZXR1cm4gUmVzb3VyY2VF
cnJvcigiV2ViS2l0IiwgV2ViS2l0RXJyb3JDYW5ub3RVc2VSZXN0cmljdGVkUG9ydCwgcmVxdWVz
dC51cmwoKS5wcmV0dHlVUkwoKSwKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcigiV2ViS2l0Iiwg
V2ViS2l0RXJyb3JDYW5ub3RVc2VSZXN0cmljdGVkUG9ydCwgcmVxdWVzdC51cmwoKS5zdHJpbmco
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICBRQ29yZUFwcGxpY2F0aW9uOjp0cmFuc2xhdGUo
IlFXZWJGcmFtZSIsICJSZXF1ZXN0IGJsb2NrZWQiLCAwLCBRQ29yZUFwcGxpY2F0aW9uOjpVbmlj
b2RlVVRGOCkpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCShyZXZpc2lvbiA4NzQ3MikKKysr
IFNvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5
IEBACisyMDExLTA1LTI2ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQXVkaXQgYWxsIHVzZXMg
b2YgS1VSTDo6cHJldHR5VVJMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02MTIwMQorCisgICAgICAgIFVwZGF0ZSBjYWxsZXJzIG9mIHByZXR0eVVSTCB0
byBqdXN0IGNhbGwgc3RyaW5nLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xp
ZW50RWZsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudEVmbDo6bW91c2VEaWRN
b3ZlT3ZlckVsZW1lbnQpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xp
ZW50RWZsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50RWZsOjpkaXNw
YXRjaFdpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVu
dEVmbDo6YXNzaWduSWRlbnRpZmllclRvSW5pdGlhbFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVMb2FkZXJDbGllbnRFZmw6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlv
bkFjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEVmbDo6ZG93bmxv
YWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRFZmw6OmNhbmNlbGxlZEVy
cm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50RWZsOjpibG9ja2VkRXJy
b3IpOgorICAgICAgICAqIGV3ay9ld2tfZnJhbWUuY3BwOgorICAgICAgICAoZXdrX2ZyYW1lX2hp
dF90ZXN0X25ldyk6CisgICAgICAgIChld2tfZnJhbWVfdXJpX2NoYW5nZWQpOgorICAgICAgICAq
IGV3ay9ld2tfdmlldy5jcHA6CisgICAgICAgIChfZXdrX3ZpZXdfcHJpdl9uZXcpOgorICAgICAg
ICAoZXdrX3ZpZXdfZnJhbWVfY3JlYXRlKToKKyAgICAgICAgKGV3a192aWV3X3BsdWdpbl9jcmVh
dGUpOgorCiAyMDExLTA1LTE2ICBKb24gTGVlICA8am9ubGVlQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCkluZGV4OiBTb3VyY2UvV2ViS2l0L2VmbC9XZWJD
b3JlU3VwcG9ydC9DaHJvbWVDbGllbnRFZmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvZWZsL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEVmbC5jcHAJKHJldmlzaW9uIDg3NDcy
KQorKysgU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50RWZsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzYwLDcgKzM2MCw3IEBAIHZvaWQgQ2hyb21lQ2xpZW50RWZs
Ojptb3VzZURpZE1vdmVPdmVyRWwKICAgICAgICAgaWYgKCF1cmwuaXNFbXB0eSgpICYmIHVybCAh
PSBtX2hvdmVyZWRMaW5rVVJMKSB7CiAgICAgICAgICAgICBjb25zdCBjaGFyKiBsaW5rWzJdOwog
ICAgICAgICAgICAgVGV4dERpcmVjdGlvbiBkaXI7Ci0gICAgICAgICAgICBDU3RyaW5nIHVybFN0
ciA9IHVybC5wcmV0dHlVUkwoKS51dGY4KCk7CisgICAgICAgICAgICBDU3RyaW5nIHVybFN0ciA9
IHVybC5zdHJpbmcoKS51dGY4KCk7CiAgICAgICAgICAgICBDU3RyaW5nIHRpdGxlU3RyID0gaGl0
LnRpdGxlKGRpcikudXRmOCgpOwogICAgICAgICAgICAgbGlua1swXSA9IHVybFN0ci5kYXRhKCk7
CiAgICAgICAgICAgICBsaW5rWzFdID0gdGl0bGVTdHIuZGF0YSgpOwpJbmRleDogU291cmNlL1dl
YktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRFZmwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50
RWZsLmNwcAkocmV2aXNpb24gODc0NzIpCisrKyBTb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3Vw
cG9ydC9GcmFtZUxvYWRlckNsaWVudEVmbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOSw3ICsy
MDksNyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpkaXNwYXRjaERpZENhCiAKIHZvaWQg
RnJhbWVMb2FkZXJDbGllbnRFZmw6OmRpc3BhdGNoV2lsbFNlbmRSZXF1ZXN0KERvY3VtZW50TG9h
ZGVyKiBsb2FkZXIsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgUmVzb3VyY2VSZXF1ZXN0JiBj
b3JlUmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgY29yZVJlc3BvbnNlKQogewotICAg
IENTdHJpbmcgdXJsID0gY29yZVJlcXVlc3QudXJsKCkucHJldHR5VVJMKCkudXRmOCgpOworICAg
IENTdHJpbmcgdXJsID0gY29yZVJlcXVlc3QudXJsKCkuc3RyaW5nKCkudXRmOCgpOwogICAgIERC
RygiUmVzb3VyY2UgdXJsPSVzIiwgdXJsLmRhdGEoKSk7CiAKICAgICBFd2tfRnJhbWVfUmVzb3Vy
Y2VfUmVxdWVzdCByZXF1ZXN0ID0geyAwLCBpZGVudGlmaWVyIH07CkBAIC0yMzYsNyArMjM2LDcg
QEAgYm9vbCBGcmFtZUxvYWRlckNsaWVudEVmbDo6c2hvdWxkVXNlQ3JlZAogCiB2b2lkIEZyYW1l
TG9hZGVyQ2xpZW50RWZsOjphc3NpZ25JZGVudGlmaWVyVG9Jbml0aWFsUmVxdWVzdCh1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiBjb3JlUmVxdWVzdCkKIHsKLSAgICBDU3RyaW5nIHVybCA9IGNvcmVSZXF1ZXN0LnVybCgpLnBy
ZXR0eVVSTCgpLnV0ZjgoKTsKKyAgICBDU3RyaW5nIHVybCA9IGNvcmVSZXF1ZXN0LnVybCgpLnN0
cmluZygpLnV0ZjgoKTsKICAgICBEQkcoIlJlc291cmNlIHVybD0lcyIsIHVybC5kYXRhKCkpOwog
CiAgICAgRXdrX0ZyYW1lX1Jlc291cmNlX1JlcXVlc3QgcmVxdWVzdCA9IHsgMCwgaWRlbnRpZmll
ciB9OwpAQCAtMzA5LDcgKzMwOSw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OmRpc3Bh
dGNoRGVjaWQKICAgICBBU1NFUlQobV9mcmFtZSk7CiAgICAgLy8gaWYgbm90IGFjY2VwdE5hdmln
YXRpb25SZXF1ZXN0IC0gbG9vayBhdCBRdCAtPiBQb2xpY3lJZ25vcmU7CiAgICAgLy8gRklYTUU6
IGRvIHByb3BlciBjaGVjayBhbmQgb25seSByZXNldCBmb3JtcyB3aGVuIG9uIFBvbGljeUlnbm9y
ZQotICAgIGNoYXIqIHVybCA9IHN0cmR1cChyZXNvdXJjZVJlcXVlc3QudXJsKCkucHJldHR5VVJM
KCkudXRmOCgpLmRhdGEoKSk7CisgICAgY2hhciogdXJsID0gc3RyZHVwKHJlc291cmNlUmVxdWVz
dC51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKICAgICBFd2tfRnJhbWVfUmVzb3VyY2Vf
UmVxdWVzdCByZXF1ZXN0ID0geyB1cmwsIDAgfTsKICAgICBFaW5hX0Jvb2wgcmV0ID0gZXdrX3Zp
ZXdfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb24obV92aWV3LCAmcmVxdWVzdCk7CiAgICAgZnJl
ZSh1cmwpOwpAQCAtNzY0LDcgKzc2NCw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OmRv
d25sb2FkKFJlc28KICAgICBpZiAoIW1fdmlldykKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ1N0
cmluZyB1cmwgPSByZXF1ZXN0LnVybCgpLnByZXR0eVVSTCgpLnV0ZjgoKTsKKyAgICBDU3RyaW5n
IHVybCA9IHJlcXVlc3QudXJsKCkuc3RyaW5nKCkudXRmOCgpOwogICAgIEV3a19Eb3dubG9hZCBk
b3dubG9hZDsKIAogICAgIGRvd25sb2FkLnVybCA9IHVybC5kYXRhKCk7CkBAIC03ODQsNyArNzg0
LDcgQEAgZW51bSB7CiAKIFJlc291cmNlRXJyb3IgRnJhbWVMb2FkZXJDbGllbnRFZmw6OmNhbmNl
bGxlZEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAgICBSZXNvdXJj
ZUVycm9yIGVycm9yKCJFcnJvciIsIC05OTksIHJlcXVlc3QudXJsKCkucHJldHR5VVJMKCksCisg
ICAgUmVzb3VyY2VFcnJvciBlcnJvcigiRXJyb3IiLCAtOTk5LCByZXF1ZXN0LnVybCgpLnN0cmlu
ZygpLAogICAgICAgICAgICAgICAgICAgICAgICAgIlJlcXVlc3QgY2FuY2VsbGVkIik7CiAgICAg
ZXJyb3Iuc2V0SXNDYW5jZWxsYXRpb24odHJ1ZSk7CiAgICAgcmV0dXJuIGVycm9yOwpAQCAtNzky
LDcgKzc5Miw3IEBAIFJlc291cmNlRXJyb3IgRnJhbWVMb2FkZXJDbGllbnRFZmw6OmNhbmMKIAog
UmVzb3VyY2VFcnJvciBGcmFtZUxvYWRlckNsaWVudEVmbDo6YmxvY2tlZEVycm9yKGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAgICByZXR1cm4gUmVzb3VyY2VFcnJvcigiRXJy
b3IiLCBXZWJLaXRFcnJvckNhbm5vdFVzZVJlc3RyaWN0ZWRQb3J0LCByZXF1ZXN0LnVybCgpLnBy
ZXR0eVVSTCgpLAorICAgIHJldHVybiBSZXNvdXJjZUVycm9yKCJFcnJvciIsIFdlYktpdEVycm9y
Q2Fubm90VXNlUmVzdHJpY3RlZFBvcnQsIHJlcXVlc3QudXJsKCkuc3RyaW5nKCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIlJlcXVlc3QgYmxvY2tlZCIpOwogfQogCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L2VmbC9ld2svZXdrX2ZyYW1lLmNwcAkocmV2aXNpb24gODc0NzIpCisrKyBTb3VyY2UvV2ViS2l0
L2VmbC9ld2svZXdrX2ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2Miw3ICsxMTYyLDcg
QEAgRXdrX0hpdF9UZXN0KiBld2tfZnJhbWVfaGl0X3Rlc3RfbmV3KGNvbgogICAgICAgICBoaXRf
dGVzdC0+ZnJhbWUgPSBraXQocmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVudCgp
LT5mcmFtZSgpKTsKIAogICAgIGhpdF90ZXN0LT5saW5rLnRleHQgPSBlaW5hX3N0cmluZ3NoYXJl
X2FkZChyZXN1bHQudGV4dENvbnRlbnQoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBoaXRfdGVzdC0+
bGluay51cmwgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChyZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCku
cHJldHR5VVJMKCkudXRmOCgpLmRhdGEoKSk7CisgICAgaGl0X3Rlc3QtPmxpbmsudXJsID0gZWlu
YV9zdHJpbmdzaGFyZV9hZGQocmVzdWx0LmFic29sdXRlTGlua1VSTCgpLnN0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOwogICAgIGhpdF90ZXN0LT5saW5rLnRpdGxlID0gZWluYV9zdHJpbmdzaGFyZV9h
ZGQocmVzdWx0LnRpdGxlRGlzcGxheVN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogICAgIGhpdF90
ZXN0LT5saW5rLnRhcmdldF9mcmFtZSA9IGtpdChyZXN1bHQudGFyZ2V0RnJhbWUoKSk7CiAKQEAg
LTIwMTQsNyArMjAxNCw3IEBAIEVpbmFfQm9vbCBld2tfZnJhbWVfdXJpX2NoYW5nZWQoRXZhc19P
YmoKIHsKICAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7
CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxT
RSk7Ci0gICAgV1RGOjpDU3RyaW5nIHVyaShzZC0+ZnJhbWUtPmRvY3VtZW50KCktPnVybCgpLnBy
ZXR0eVVSTCgpLnV0ZjgoKSk7CisgICAgV1RGOjpDU3RyaW5nIHVyaShzZC0+ZnJhbWUtPmRvY3Vt
ZW50KCktPnVybCgpLnN0cmluZygpLnV0ZjgoKSk7CiAKICAgICBJTkYoInVyaT0lcyIsIHVyaS5k
YXRhKCkpOwogICAgIGlmICghdXJpLmRhdGEoKSkgewpJbmRleDogU291cmNlL1dlYktpdC9lZmwv
ZXdrL2V3a192aWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdr
X3ZpZXcuY3BwCShyZXZpc2lvbiA4NzQ3MikKKysrIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tf
dmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3Nyw3ICs1NzcsNyBAQCBzdGF0aWMgRXdrX1Zp
ZXdfUHJpdmF0ZV9EYXRhKiBfZXdrX3ZpZXdfCiAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0
VXNlc0VuY29kaW5nRGV0ZWN0b3IodHJ1ZSk7CiAKICAgICB1cmwgPSBwcml2LT5wYWdlX3NldHRp
bmdzLT51c2VyU3R5bGVTaGVldExvY2F0aW9uKCk7Ci0gICAgcHJpdi0+c2V0dGluZ3MudXNlcl9z
dHlsZXNoZWV0ID0gZWluYV9zdHJpbmdzaGFyZV9hZGQodXJsLnByZXR0eVVSTCgpLnV0ZjgoKS5k
YXRhKCkpOworICAgIHByaXYtPnNldHRpbmdzLnVzZXJfc3R5bGVzaGVldCA9IGVpbmFfc3RyaW5n
c2hhcmVfYWRkKHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIAogICAgIHByaXYtPnNldHRp
bmdzLmVuY29kaW5nX2RlZmF1bHQgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZAogICAgICAgICAocHJp
di0+cGFnZV9zZXR0aW5ncy0+ZGVmYXVsdFRleHRFbmNvZGluZ05hbWUoKS51dGY4KCkuZGF0YSgp
KTsKQEAgLTQwMzcsNyArNDAzNyw3IEBAIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpGcmFtZT4g
ZXdrX3ZpZXcKIHsKICAgICBEQkcoIm89JXAsIGZyYW1lPSVwLCBuYW1lPSVzLCBvd25lckVsZW1l
bnQ9JXAsIHVybD0lcywgcmVmZXJyZXI9JXMiLAogICAgICAgICBvLCBmcmFtZSwgbmFtZS51dGY4
KCkuZGF0YSgpLCBvd25lckVsZW1lbnQsCi0gICAgICAgIHVybC5wcmV0dHlVUkwoKS51dGY4KCku
ZGF0YSgpLCByZWZlcnJlci51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgdXJsLnN0cmluZygpLnV0
ZjgoKS5kYXRhKCksIHJlZmVycmVyLnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJO
KHNkLCBwcml2LCAwKTsKQEAgLTQwNjksNyArNDA2OSw3IEBAIFdURjo6UGFzc1JlZlB0cjxXZWJD
b3JlOjpXaWRnZXQ+IGV3a192aWUKIHsKICAgICBEQkcoIm89JXAsIGZyYW1lPSVwLCBzaXplPSVk
eCVkLCBlbGVtZW50PSVwLCB1cmw9JXMsIG1pbWVUeXBlPSVzIiwKICAgICAgICAgbywgZnJhbWUs
IHBsdWdpblNpemUud2lkdGgoKSwgcGx1Z2luU2l6ZS5oZWlnaHQoKSwgZWxlbWVudCwKLSAgICAg
ICAgdXJsLnByZXR0eVVSTCgpLnV0ZjgoKS5kYXRhKCksIG1pbWVUeXBlLnV0ZjgoKS5kYXRhKCkp
OworICAgICAgICB1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgbWltZVR5cGUudXRmOCgpLmRh
dGEoKSk7CiAKICAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKICAgICBz
ZC0+Y2hhbmdlZC5mcmFtZV9yZWN0ID0gRUlOQV9UUlVFOwpJbmRleDogU291cmNlL1dlYktpdC9n
dGsvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwko
cmV2aXNpb24gODc0NzIpCisrKyBTb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAxMS0wNS0yNiAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3
ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEF1ZGl0IGFsbCB1c2VzIG9mIEtVUkw6OnByZXR0eVVSTAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjEyMDEKKworICAgICAgICBVcGRhdGUgY2Fs
bGVycyBvZiBwcmV0dHlVUkwgdG8ganVzdCBjYWxsIHN0cmluZy4KKworICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNs
aWVudDo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJD
bGllbnQ6OmRpc3BhdGNoRGlkQ2hhbmdlTG9jYXRpb25XaXRoaW5QYWdlKToKKyAgICAgICAgKFdl
YktpdDo6RnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkQ29tbWl0TG9hZCk6CisgICAgICAg
ICogd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2dl
dF9pY29uX3VyaSk6CisKIDIwMTEtMDUtMjYgIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSAgPGd1c3Rh
dm8ubm9yb25oYUBjb2xsYWJvcmEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1hcnRpbiBS
b2JpbnNvbi4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNs
aWVudEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvQ2hyb21lQ2xpZW50R3RrLmNwcAkocmV2aXNpb24gODc0NzIpCisrKyBTb3VyY2UvV2ViS2l0
L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01NDEsNyArNTQxLDcgQEAgdm9pZCBDaHJvbWVDbGllbnQ6Om1vdXNlRGlkTW92ZU92ZXJFbGVt
ZQogICAgICAgICBpZiAoIXVybC5pc0VtcHR5KCkgJiYgdXJsICE9IG1faG92ZXJlZExpbmtVUkwp
IHsKICAgICAgICAgICAgIFRleHREaXJlY3Rpb24gZGlyOwogICAgICAgICAgICAgQ1N0cmluZyB0
aXRsZVN0cmluZyA9IGhpdC50aXRsZShkaXIpLnV0ZjgoKTsKLSAgICAgICAgICAgIENTdHJpbmcg
dXJsU3RyaW5nID0gdXJsLnByZXR0eVVSTCgpLnV0ZjgoKTsKKyAgICAgICAgICAgIENTdHJpbmcg
dXJsU3RyaW5nID0gdXJsLnN0cmluZygpLnV0ZjgoKTsKICAgICAgICAgICAgIGdfc2lnbmFsX2Vt
aXRfYnlfbmFtZShtX3dlYlZpZXcsICJob3ZlcmluZy1vdmVyLWxpbmsiLCB0aXRsZVN0cmluZy5k
YXRhKCksIHVybFN0cmluZy5kYXRhKCkpOwogICAgICAgICAgICAgbV9ob3ZlcmVkTGlua1VSTCA9
IHVybDsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQv
RnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3Rr
L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcAkocmV2aXNpb24gODc0NzIp
CisrKyBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5NSw3ICs4OTUsNyBAQCB2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50OjpkaXNwYXRjaERpZENoYW5nCiB7CiAgICAgV2ViS2l0V2ViRnJhbWVQcml2YXRlKiBw
cml2ID0gbV9mcmFtZS0+cHJpdjsKICAgICBnX2ZyZWUocHJpdi0+dXJpKTsKLSAgICBwcml2LT51
cmkgPSBnX3N0cmR1cChjb3JlKG1fZnJhbWUpLT5kb2N1bWVudCgpLT51cmwoKS5wcmV0dHlVUkwo
KS51dGY4KCkuZGF0YSgpKTsKKyAgICBwcml2LT51cmkgPSBnX3N0cmR1cChjb3JlKG1fZnJhbWUp
LT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKICAgICBnX29iamVj
dF9ub3RpZnkoR19PQkpFQ1QobV9mcmFtZSksICJ1cmkiKTsKICAgICBXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3ID0gZ2V0Vmlld0Zyb21GcmFtZShtX2ZyYW1lKTsKICAgICBpZiAobV9mcmFtZSA9PSB3
ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUod2ViVmlldykpCkBAIC05ODYsNyArOTg2LDcg
QEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRDb21taQogCiAgICAgV2ViS2l0
V2ViRnJhbWVQcml2YXRlKiBwcml2ID0gbV9mcmFtZS0+cHJpdjsKICAgICBnX2ZyZWUocHJpdi0+
dXJpKTsKLSAgICBwcml2LT51cmkgPSBnX3N0cmR1cChjb3JlKG1fZnJhbWUpLT5sb2FkZXIoKS0+
YWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+dXJsKCkucHJldHR5VVJMKCkudXRmOCgpLmRhdGEoKSk7
CisgICAgcHJpdi0+dXJpID0gZ19zdHJkdXAoY29yZShtX2ZyYW1lKS0+bG9hZGVyKCktPmFjdGl2
ZURvY3VtZW50TG9hZGVyKCktPnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogICAgIGdf
ZnJlZShwcml2LT50aXRsZSk7CiAgICAgcHJpdi0+dGl0bGUgPSBOVUxMOwogICAgIGdfb2JqZWN0
X25vdGlmeShHX09CSkVDVChtX2ZyYW1lKSwgInVyaSIpOwpJbmRleDogU291cmNlL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAkocmV2aXNpb24gODc0NzIpCisrKyBTb3VyY2Uv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5
NzgsNyArNDk3OCw3IEBAIFdlYktpdEhpdFRlc3RSZXN1bHQqIHdlYmtpdF93ZWJfdmlld19nZXQK
IEdfQ09OU1RfUkVUVVJOIGdjaGFyKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fdXJpKFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcpCiB7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lT
X1dFQl9WSUVXKHdlYlZpZXcpLCAwKTsKLSAgICBTdHJpbmcgaWNvblVSTCA9IGljb25EYXRhYmFz
ZSgpLnN5bmNocm9ub3VzSWNvblVSTEZvclBhZ2VVUkwoY29yZSh3ZWJWaWV3KS0+bWFpbkZyYW1l
KCktPmRvY3VtZW50KCktPnVybCgpLnByZXR0eVVSTCgpKTsKKyAgICBTdHJpbmcgaWNvblVSTCA9
IGljb25EYXRhYmFzZSgpLnN5bmNocm9ub3VzSWNvblVSTEZvclBhZ2VVUkwoY29yZSh3ZWJWaWV3
KS0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpKTsKICAgICB3ZWJWaWV3
LT5wcml2LT5pY29uVVJJID0gaWNvblVSTC51dGY4KCk7CiAgICAgcmV0dXJuIHdlYlZpZXctPnBy
aXYtPmljb25VUkkuZGF0YSgpOwogfQpJbmRleDogU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDg3NDcy
KQorKysgU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwyMSBAQAorMjAxMS0wNS0yNiAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEF1ZGl0IGFsbCB1
c2VzIG9mIEtVUkw6OnByZXR0eVVSTAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NjEyMDEKKworICAgICAgICBVcGRhdGUgY2FsbGVycyBvZiBwcmV0dHlV
UkwgdG8ganVzdCBjYWxsIHN0cmluZy4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9t
ZUNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudFF0Ojptb3VzZURp
ZE1vdmVPdmVyRWxlbWVudCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJD
bGllbnRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFF0Ojp1cGRh
dGVHbG9iYWxIaXN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50UXQ6
OmNhbmNlbGxlZEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50UXQ6
OmJsb2NrZWRFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFF0Ojpv
YmplY3RDb250ZW50VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFF0
OjpjcmVhdGVQbHVnaW4pOgorCiAyMDExLTA1LTI2ICBBbGV4aXMgTWVuYXJkICA8YWxleGlzLm1l
bmFyZEBvcGVuYm9zc2Eub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVpbGQgZml4IGZvciBR
dCBhbmQgUXVpY2tUaW1lIGJhY2tlbmQuCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcAkocmV2aXNpb24gODc0NzIpCisrKyBT
b3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTA2LDcgKzUwNiw3IEBAIHZvaWQgQ2hyb21lQ2xpZW50UXQ6Om1vdXNlRGlk
TW92ZU92ZXJFbGUKICAgICAgICAgbGFzdEhvdmVyVVJMID0gcmVzdWx0LmFic29sdXRlTGlua1VS
TCgpOwogICAgICAgICBsYXN0SG92ZXJUaXRsZSA9IHJlc3VsdC50aXRsZShkaXIpOwogICAgICAg
ICBsYXN0SG92ZXJDb250ZW50ID0gcmVzdWx0LnRleHRDb250ZW50KCk7Ci0gICAgICAgIGVtaXQg
bV93ZWJQYWdlLT5saW5rSG92ZXJlZChsYXN0SG92ZXJVUkwucHJldHR5VVJMKCksCisgICAgICAg
IGVtaXQgbV93ZWJQYWdlLT5saW5rSG92ZXJlZChsYXN0SG92ZXJVUkwuc3RyaW5nKCksCiAgICAg
ICAgICAgICAgICAgbGFzdEhvdmVyVGl0bGUsIGxhc3RIb3ZlckNvbnRlbnQpOwogICAgIH0KIH0K
SW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRR
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFt
ZUxvYWRlckNsaWVudFF0LmNwcAkocmV2aXNpb24gODc0NzIpCisrKyBTb3VyY2UvV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04MDIsNyArODAyLDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0Ojp1cGRhdGVHbG9iYWxI
aQogICAgIFFXZWJIaXN0b3J5SW50ZXJmYWNlKiBoaXN0b3J5ID0gUVdlYkhpc3RvcnlJbnRlcmZh
Y2U6OmRlZmF1bHRJbnRlcmZhY2UoKTsKICAgICBXZWJDb3JlOjpEb2N1bWVudExvYWRlciogbG9h
ZGVyID0gbV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCk7CiAgICAgaWYgKGhpc3Rv
cnkpCi0gICAgICAgIGhpc3RvcnktPmFkZEhpc3RvcnlFbnRyeShsb2FkZXItPnVybEZvckhpc3Rv
cnkoKS5wcmV0dHlVUkwoKSk7CisgICAgICAgIGhpc3RvcnktPmFkZEhpc3RvcnlFbnRyeShsb2Fk
ZXItPnVybEZvckhpc3RvcnkoKS5zdHJpbmcoKSk7CiAKICAgICBpZiAoZHVtcEhpc3RvcnlDYWxs
YmFja3MpIHsKICAgICAgICAgcHJpbnRmKCJXZWJWaWV3IG5hdmlnYXRlZCB0byB1cmwgXCIlc1wi
IHdpdGggdGl0bGUgXCIlc1wiIHdpdGggSFRUUCBlcXVpdmFsZW50IG1ldGhvZCBcIiVzXCIuICBU
aGUgbmF2aWdhdGlvbiB3YXMgJXMgYW5kIHdhcyAlcyVzLlxuIiwKQEAgLTkyNiw3ICs5MjYsNyBA
QCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNvbW1pdHRlZExvYWQoCiAKIFdlYkNvcmU6OlJl
c291cmNlRXJyb3IgRnJhbWVMb2FkZXJDbGllbnRRdDo6Y2FuY2VsbGVkRXJyb3IoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIFJlc291cmNlRXJyb3IgZXJy
b3IgPSBSZXNvdXJjZUVycm9yKCJRdE5ldHdvcmsiLCBRTmV0d29ya1JlcGx5OjpPcGVyYXRpb25D
YW5jZWxlZEVycm9yLCByZXF1ZXN0LnVybCgpLnByZXR0eVVSTCgpLAorICAgIFJlc291cmNlRXJy
b3IgZXJyb3IgPSBSZXNvdXJjZUVycm9yKCJRdE5ldHdvcmsiLCBRTmV0d29ya1JlcGx5OjpPcGVy
YXRpb25DYW5jZWxlZEVycm9yLCByZXF1ZXN0LnVybCgpLnN0cmluZygpLAogICAgICAgICAgICAg
UUNvcmVBcHBsaWNhdGlvbjo6dHJhbnNsYXRlKCJRV2ViRnJhbWUiLCAiUmVxdWVzdCBjYW5jZWxs
ZWQiLCAwLCBRQ29yZUFwcGxpY2F0aW9uOjpVbmljb2RlVVRGOCkpOwogICAgIGVycm9yLnNldElz
Q2FuY2VsbGF0aW9uKHRydWUpOwogICAgIHJldHVybiBlcnJvcjsKQEAgLTk0Niw3ICs5NDYsNyBA
QCBlbnVtIHsKIAogV2ViQ29yZTo6UmVzb3VyY2VFcnJvciBGcmFtZUxvYWRlckNsaWVudFF0Ojpi
bG9ja2VkRXJyb3IoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewot
ICAgIHJldHVybiBSZXNvdXJjZUVycm9yKCJXZWJLaXRFcnJvckRvbWFpbiIsIFdlYktpdEVycm9y
Q2Fubm90VXNlUmVzdHJpY3RlZFBvcnQsIHJlcXVlc3QudXJsKCkucHJldHR5VVJMKCksCisgICAg
cmV0dXJuIFJlc291cmNlRXJyb3IoIldlYktpdEVycm9yRG9tYWluIiwgV2ViS2l0RXJyb3JDYW5u
b3RVc2VSZXN0cmljdGVkUG9ydCwgcmVxdWVzdC51cmwoKS5zdHJpbmcoKSwKICAgICAgICAgICAg
IFFDb3JlQXBwbGljYXRpb246OnRyYW5zbGF0ZSgiUVdlYkZyYW1lIiwgIlJlcXVlc3QgYmxvY2tl
ZCIsIDAsIFFDb3JlQXBwbGljYXRpb246OlVuaWNvZGVVVEY4KSk7CiB9CiAKQEAgLTEzNjAsNyAr
MTM2MCw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6dHJhbnNmZXJMb2FkaW4KIAogT2Jq
ZWN0Q29udGVudFR5cGUgRnJhbWVMb2FkZXJDbGllbnRRdDo6b2JqZWN0Q29udGVudFR5cGUoY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlSW4sIGJvb2wgc2hvdWxkUHJlZmVy
UGx1Z0luc0ZvckltYWdlcykKIHsKLSAgICAvLyBxRGVidWcoKTw8IiArKysrKysrKysrKysrKysr
IHVybCBpcyAiPDx1cmwucHJldHR5VVJMKCk8PCIsIG1pbWUgPSAiPDxtaW1lVHlwZUluOworICAg
IC8vIHFEZWJ1ZygpPDwiICsrKysrKysrKysrKysrKysgdXJsIGlzICI8PHVybC5zdHJpbmcoKTw8
IiwgbWltZSA9ICI8PG1pbWVUeXBlSW47CiAgICAgUUZpbGVJbmZvIGZpKHVybC5wYXRoKCkpOwog
ICAgIFN0cmluZyBleHRlbnNpb24gPSBmaS5zdWZmaXgoKTsKICAgICBpZiAobWltZVR5cGVJbiA9
PSAiYXBwbGljYXRpb24veC1xdC1wbHVnaW4iIHx8IG1pbWVUeXBlSW4gPT0gImFwcGxpY2F0aW9u
L3gtcXQtc3R5bGVkLXdpZGdldCIpCkBAIC0xNTIzLDggKzE1MjMsOCBAQCBwcml2YXRlOgogUGFz
c1JlZlB0cjxXaWRnZXQ+IEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNyZWF0ZVBsdWdpbihjb25zdCBJ
bnRTaXplJiBwbHVnaW5TaXplLCBIVE1MUGx1Z0luRWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZh
bHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpCiB7Ci0gICAg
Ly8gcURlYnVnKCk8PCItLS0tLS0gQ3JlYXRpbmcgcGx1Z2luIGluIEZyYW1lTG9hZGVyQ2xpZW50
UXQ6OmNyZWF0ZVBsdWdpbiBmb3IgIjw8dXJsLnByZXR0eVVSTCgpIDw8IG1pbWVUeXBlOwotICAg
IC8vIHFEZWJ1ZygpPDwiLS0tLS0tXHQgdXJsID0gIjw8dXJsLnByZXR0eVVSTCgpOworICAgIC8v
IHFEZWJ1ZygpPDwiLS0tLS0tIENyZWF0aW5nIHBsdWdpbiBpbiBGcmFtZUxvYWRlckNsaWVudFF0
OjpjcmVhdGVQbHVnaW4gZm9yICI8PHVybC5zdHJpbmcoKSA8PCBtaW1lVHlwZTsKKyAgICAvLyBx
RGVidWcoKTw8Ii0tLS0tLVx0IHVybCA9ICI8PHVybC5zdHJpbmcoKTsKIAogICAgIGlmICghbV93
ZWJGcmFtZSkKICAgICAgICAgcmV0dXJuIDA7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95225</attachid>
            <date>2011-05-27 16:14:18 -0700</date>
            <delta_ts>2011-05-27 22:40:11 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-61201-20110527161416.patch</filename>
            <type>text/plain</type>
            <size>26511</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg3NTc4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTEtMDUtMjcgIEFkYW0gQmFy
dGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBBbGV4ZXkgUHJv
c2t1cnlha292LgorCisgICAgICAgIEF1ZGl0IGFsbCB1c2VzIG9mIEtVUkw6OnByZXR0eVVSTAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjEyMDEKKwor
ICAgICAgICBBcyBmYXIgYXMgSSBjYW4gdGVsbCwgYWxsIHRoZSBjYWxsZXJzIG9mIHRoaXMgQVBJ
IGFyZSBjb25mdXNlZC4gIFRoZXJlCisgICAgICAgIHNlZW1zIHRvIGJlIGEgY2FyZ28gY3VsdCBv
ZiB1c2luZyB0aGUgInByZXR0eSIgdmVyc2lvbiBvZiBhIFVSTCwgYnV0IGluCisgICAgICAgIHJl
YWxpdHkgZm9sa3MganVzdCB3YW50IHRoZSBVUkwgaXRzZWxmLiAgVGhlIG9ubHkgY2FzZSBJJ20g
dW5zdXJlIGFib3V0CisgICAgICAgIGlzIGxvY2F0aW9uLmhyZWYsIHdoaWNoIGNvdWxkIGhhdmUg
c29tZSBjb21wYXRpYmlsaXR5IGNvbnN0cmFpbnRzLgorICAgICAgICBJJ3ZlIHJlbmFtZWQgcHJl
dHR5VVJMIHRvIGRlcHJlY2F0ZWRTdHJpbmcgdG8gZGlzY291cmFnZSBmb2xrcyBmcm9tCisgICAg
ICAgIGZ1cnRoZXIgY2FyZ28tY3VsdGluZy4KKworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgor
ICAgICAgICAqIHBhZ2UvTG9jYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9jYXRpb246
OmhyZWYpOgorICAgICAgICAoV2ViQ29yZTo6TG9jYXRpb246OnRvU3RyaW5nKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9LVVJMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OmRlcHJlY2F0ZWRT
dHJpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL0tVUkwuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9L
VVJMR29vZ2xlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OmRlcHJlY2F0ZWRTdHJpbmcp
OgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnByZXBhcmVGb3JVUkwpOgorICAg
ICAgICAqIHdvcmtlcnMvV29ya2VyTG9jYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29y
a2VyTG9jYXRpb246OmhyZWYpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyTG9jYXRpb246OnRv
U3RyaW5nKToKKwogMjAxMS0wNS0yNyAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LmV4cC5pbgkocmV2aXNpb24gODc1NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5p
bgkod29ya2luZyBjb3B5KQpAQCAtMTYxMyw4ICsxNjEzLDggQEAgX19aTjdXZWJDb3JlMTZTY3Jp
cHRDb250cm9sbGVyMjljbGVhbnVwUwogX19aTjdXZWJDb3JlMTZqc1N0cmluZ1Nsb3dDYXNlRVBO
M0pTQzlFeGVjU3RhdGVFUk4zV1RGN0hhc2hNYXBJUE5TM18xMFN0cmluZ0ltcGxFTlMwXzRXZWFr
SU5TMF84SlNTdHJpbmdFRUVOUzNfMTBTdHJpbmdIYXNoRU5TM18xMEhhc2hUcmFpdHNJUzZfRUVO
U0JfSVM5X0VFRUVTNl8KIF9fWk43V2ViQ29yZTE3SFRNTFBsdWdJbkVsZW1lbnQxMWdldE5QT2Jq
ZWN0RXYKIF9fWk5LN1dlYkNvcmUxNFNlY3VyaXR5T3JpZ2luOWNhbkFjY2Vzc0VQS1MwXworX19a
Tks3V2ViQ29yZTRLVVJMNnN0cmluZ0V2CiBfX1pOSzdXZWJDb3JlNEtVUkw3aGFzUGF0aEV2Ci1f
X1pOSzdXZWJDb3JlNEtVUkw5cHJldHR5VVJMRXYKICNlbmRpZgogCiAjaWYgRU5BQkxFKE9SSUVO
VEFUSU9OX0VWRU5UUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvTG9jYXRpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvTG9jYXRpb24uY3BwCShyZXZpc2lvbiA4
NzU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvTG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02Niw3ICs2Niw4IEBAIFN0cmluZyBMb2NhdGlvbjo6aHJlZigpIGNvbnN0CiAgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKIAogICAgIGNvbnN0IEtVUkwmIHVybCA9IHRoaXMtPnVybCgpOwot
ICAgIHJldHVybiB1cmwuaGFzUGF0aCgpID8gdXJsLnByZXR0eVVSTCgpIDogdXJsLnByZXR0eVVS
TCgpICsgIi8iOworICAgIC8vIEZJWE1FOiBTdG9wIHVzaW5nIGRlcHJlY2F0ZWRTdHJpbmcoKTog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwMjI1CisgICAgcmV0dXJu
IHVybC5oYXNQYXRoKCkgPyB1cmwuZGVwcmVjYXRlZFN0cmluZygpIDogdXJsLmRlcHJlY2F0ZWRT
dHJpbmcoKSArICIvIjsKIH0KIAogU3RyaW5nIExvY2F0aW9uOjpwcm90b2NvbCgpIGNvbnN0CkBA
IC0xNTUsNyArMTU2LDggQEAgU3RyaW5nIExvY2F0aW9uOjp0b1N0cmluZygpIGNvbnN0CiAgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKIAogICAgIGNvbnN0IEtVUkwmIHVybCA9IHRoaXMtPnVybCgp
OwotICAgIHJldHVybiB1cmwuaGFzUGF0aCgpID8gdXJsLnByZXR0eVVSTCgpIDogdXJsLnByZXR0
eVVSTCgpICsgIi8iOworICAgIC8vIEZJWE1FOiBTdG9wIHVzaW5nIGRlcHJlY2F0ZWRTdHJpbmco
KTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwMjI1CisgICAgcmV0
dXJuIHVybC5oYXNQYXRoKCkgPyB1cmwuZGVwcmVjYXRlZFN0cmluZygpIDogdXJsLmRlcHJlY2F0
ZWRTdHJpbmcoKSArICIvIjsKIH0KIAogdm9pZCBMb2NhdGlvbjo6c2V0SHJlZihjb25zdCBTdHJp
bmcmIHVybFN0cmluZywgRE9NV2luZG93KiBhY3RpdmVXaW5kb3csIERPTVdpbmRvdyogZmlyc3RX
aW5kb3cpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcAkocmV2aXNpb24gODc1NzgpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODc2
LDcgKzg3Niw3IEBAIHZvaWQgS1VSTDo6c2V0UGF0aChjb25zdCBTdHJpbmcmIHMpCiAgICAgcGFy
c2UobV9zdHJpbmcubGVmdChtX3BvcnRFbmQpICsgZW5jb2RlV2l0aFVSTEVzY2FwZVNlcXVlbmNl
cyhwYXRoKSArIG1fc3RyaW5nLnN1YnN0cmluZyhtX3BhdGhFbmQpKTsKIH0KIAotU3RyaW5nIEtV
Ukw6OnByZXR0eVVSTCgpIGNvbnN0CitTdHJpbmcgS1VSTDo6ZGVwcmVjYXRlZFN0cmluZygpIGNv
bnN0CiB7CiAgICAgaWYgKCFtX2lzVmFsaWQpCiAgICAgICAgIHJldHVybiBtX3N0cmluZzsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tVUkwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmgJKHJldmlzaW9uIDg3NTc4KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vS1VSTC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTAsNyArMTUwLDkgQEAgcHVi
bGljOgogCiAgICAgU3RyaW5nIGJhc2VBc1N0cmluZygpIGNvbnN0OwogCi0gICAgU3RyaW5nIHBy
ZXR0eVVSTCgpIGNvbnN0OworICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgb25seSB1c2VkIGJ5IGxv
Y2F0aW9uLmhyZWYuIEl0J3MgbGlrZWx5IHdlIHNob3VsZG4ndAorICAgIC8vIHVzZSBpdCBmb3Ig
dGhhdCBwdXJwb3NlLCBidXQgbW9yZSBzdHVkeSBpcyBuZWNlc3NhcnkgYmVmb3JlIHdlIHJlbW92
ZSBpdC4KKyAgICBTdHJpbmcgZGVwcmVjYXRlZFN0cmluZygpIGNvbnN0OwogICAgIFN0cmluZyBm
aWxlU3lzdGVtUGF0aCgpIGNvbnN0OwogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjdXJy
ZW50IFVSTCdzIHByb3RvY29sIGlzIHRoZSBzYW1lIGFzIHRoZSBudWxsLQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vS1VSTEdvb2dsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vS1VSTEdvb2dsZS5jcHAJKHJldmlzaW9uIDg3NTc4KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vS1VSTEdvb2dsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3Miw3
ICs3NzIsNyBAQCB2b2lkIEtVUkw6OnNldFBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQogLy8gT24g
TWFjLCB0aGlzIGp1c3Qgc2VlbXMgdG8gcmV0dXJuIHRoZSBzYW1lIFVSTCwgYnV0IHdpdGggIi9m
b28vYmFyIiBmb3IKIC8vIGZpbGU6IFVSTHMgaW5zdGVhZCBvZiBmaWxlOi8vL2Zvby9iYXIuIFdl
IGRvbid0IGJvdGhlciB3aXRoIGFueSBvZiB0aGlzLAogLy8gYXQgbGVhc3QgZm9yIG5vdy4KLVN0
cmluZyBLVVJMOjpwcmV0dHlVUkwoKSBjb25zdAorU3RyaW5nIEtVUkw6OmRlcHJlY2F0ZWRTdHJp
bmcoKSBjb25zdAogewogICAgIGlmICghbV91cmwubV9pc1ZhbGlkKQogICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVz
b3VyY2VIYW5kbGVTb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAkocmV2aXNpb24gODc1NzgpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3Vw
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgwLDkgKzE4MCw5IEBAIHN0YXRpYyB2b2lkIGVuc3Vy
ZVNlc3Npb25Jc0luaXRpYWxpemVkKFMKICAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChz
ZXNzaW9uKSwgIndlYmtpdC1pbml0IiwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oMHhkZWFkYmVl
ZikpOwogfQogCi12b2lkIFJlc291cmNlSGFuZGxlOjpwcmVwYXJlRm9yVVJMKGNvbnN0IEtVUkwg
JnVybCkKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OnByZXBhcmVGb3JVUkwoY29uc3QgS1VSTCYgdXJs
KQogewotICAgIEdPd25QdHI8U291cFVSST4gc291cFVSSShzb3VwX3VyaV9uZXcodXJsLnByZXR0
eVVSTCgpLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICBHT3duUHRyPFNvdXBVUkk+IHNvdXBVUkkoc291
cF91cmlfbmV3KHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7CiAgICAgaWYgKCFzb3VwVVJJ
KQogICAgICAgICByZXR1cm47CiAgICAgc291cF9zZXNzaW9uX3ByZXBhcmVfZm9yX3VyaShSZXNv
dXJjZUhhbmRsZTo6ZGVmYXVsdFNlc3Npb24oKSwgc291cFVSSS5nZXQoKSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckxvY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckxvY2F0aW9uLmNwcAkocmV2aXNpb24gODc1NzgpCisr
KyBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckxvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzYsNyArMzYsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFN0cmluZyBXb3JrZXJM
b2NhdGlvbjo6aHJlZigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fdXJsLmhhc1BhdGgoKSA/IG1f
dXJsLnByZXR0eVVSTCgpIDogbV91cmwucHJldHR5VVJMKCkgKyAiLyI7CisgICAgLy8gRklYTUU6
IFN0b3AgdXNpbmcgZGVwcmVjYXRlZFN0cmluZygpOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MzAyMjUKKyAgICByZXR1cm4gbV91cmwuaGFzUGF0aCgpID8gbV91cmwu
ZGVwcmVjYXRlZFN0cmluZygpIDogbV91cmwuZGVwcmVjYXRlZFN0cmluZygpICsgIi8iOwogfQog
CiBTdHJpbmcgV29ya2VyTG9jYXRpb246OnByb3RvY29sKCkgY29uc3QKQEAgLTc2LDcgKzc3LDgg
QEAgU3RyaW5nIFdvcmtlckxvY2F0aW9uOjpoYXNoKCkgY29uc3QKIAogU3RyaW5nIFdvcmtlckxv
Y2F0aW9uOjp0b1N0cmluZygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fdXJsLmhhc1BhdGgoKSA/
IG1fdXJsLnByZXR0eVVSTCgpIDogbV91cmwucHJldHR5VVJMKCkgKyAiLyI7CisgICAgLy8gRklY
TUU6IFN0b3AgdXNpbmcgZGVwcmVjYXRlZFN0cmluZygpOiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MzAyMjUKKyAgICByZXR1cm4gbV91cmwuaGFzUGF0aCgpID8gbV91
cmwuZGVwcmVjYXRlZFN0cmluZygpIDogbV91cmwuZGVwcmVjYXRlZFN0cmluZygpICsgIi8iOwog
fQogCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDg3NTc4KQorKysgU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMDUtMjcgIEFk
YW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBBbGV4
ZXkgUHJvc2t1cnlha292LgorCisgICAgICAgIEF1ZGl0IGFsbCB1c2VzIG9mIEtVUkw6OnByZXR0
eVVSTAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjEy
MDEKKworICAgICAgICBVcGRhdGUgY2FsbGVycyBvZiBwcmV0dHlVUkwgdG8ganVzdCBjYWxsIHN0
cmluZy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2Fk
ZXJDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUxvYWRlckNsaWVudDo6Y3Jl
YXRlUGx1Z2luKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3F0L1dlYkVy
cm9yc1F0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6Y2FuY2VsbGVkRXJyb3IpOgorICAgICAgICAo
V2ViS2l0OjpibG9ja2VkRXJyb3IpOgorCiAyMDExLTA1LTI3ICBKZWZmIE1pbGxlciAgPGplZmZt
QGFwcGxlLmNvbT4KIAogICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBTdGV2ZSBGYWxrZW5idXJn
LgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFt
ZUxvYWRlckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAJKHJldmlzaW9uIDg3NTc4
KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxv
YWRlckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOTgsMTIgKzExOTgsNiBAQCB2b2lk
IFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp0cmFuc2ZlckxvYWRpCiAgICAgbm90SW1wbGVtZW50ZWQo
KTsKIH0KIAotc3RhdGljIFN0cmluZyBkb2N1bWVudFVSTChGcmFtZSogZnJhbWUpCi17Ci0gICAg
Y29uc3QgS1VSTCYgdXJsID0gZnJhbWUtPmRvY3VtZW50KCktPnVybCgpOwotICAgIHJldHVybiB1
cmwuaGFzUGF0aCgpID8gdXJsLnByZXR0eVVSTCgpIDogdXJsLnByZXR0eVVSTCgpICsgIi8iOwot
fQotCiBQYXNzUmVmUHRyPFdpZGdldD4gV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWdp
bihjb25zdCBJbnRTaXplJiwgSFRNTFBsdWdJbkVsZW1lbnQqIHBsdWdpbkVsZW1lbnQsIGNvbnN0
IEtVUkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2Fk
TWFudWFsbHkpCiB7CiAgICAgQVNTRVJUKHBhcmFtTmFtZXMuc2l6ZSgpID09IHBhcmFtVmFsdWVz
LnNpemUoKSk7CkBAIC0xMjE3LDE0ICsxMjExLDE0IEBAIFBhc3NSZWZQdHI8V2lkZ2V0PiBXZWJG
cmFtZUxvYWRlckNsaWVudDoKICAgICBwYXJhbWV0ZXJzLnZhbHVlcyA9IHBhcmFtVmFsdWVzOwog
ICAgIHBhcmFtZXRlcnMubWltZVR5cGUgPSBtaW1lVHlwZTsKICAgICBwYXJhbWV0ZXJzLmxvYWRN
YW51YWxseSA9IGxvYWRNYW51YWxseTsKLSAgICBwYXJhbWV0ZXJzLmRvY3VtZW50VVJMID0gZG9j
dW1lbnRVUkwobV9mcmFtZS0+Y29yZUZyYW1lKCkpOworICAgIHBhcmFtZXRlcnMuZG9jdW1lbnRV
UkwgPSBtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCk7CiAK
ICAgICBGcmFtZSogbWFpbkZyYW1lID0gd2ViUGFnZS0+bWFpbkZyYW1lKCktPmNvcmVGcmFtZSgp
OwogICAgIGlmIChtX2ZyYW1lLT5jb3JlRnJhbWUoKSA9PSBtYWluRnJhbWUpCiAgICAgICAgIHBh
cmFtZXRlcnMudG9wbGV2ZWxEb2N1bWVudFVSTCA9IHBhcmFtZXRlcnMuZG9jdW1lbnRVUkw7CiAg
ICAgZWxzZSBpZiAobV9mcmFtZS0+Y29yZUZyYW1lKCktPmRvY3VtZW50KCktPnNlY3VyaXR5T3Jp
Z2luKCktPmNhbkFjY2VzcyhtYWluRnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkp
KSB7CiAgICAgICAgIC8vIFdlIG9ubHkgd2FudCB0byBzZXQgdGhlIHRvcGxldmVsIGRvY3VtZW50
IFVSTCBpZiB0aGUgcGx1Zy1pbiBoYXMgYWNjZXNzIHRvIGl0LgotICAgICAgICBwYXJhbWV0ZXJz
LnRvcGxldmVsRG9jdW1lbnRVUkwgPSBkb2N1bWVudFVSTChtYWluRnJhbWUpOworICAgICAgICBw
YXJhbWV0ZXJzLnRvcGxldmVsRG9jdW1lbnRVUkwgPSBtYWluRnJhbWUtPmRvY3VtZW50KCktPnVy
bCgpLnN0cmluZygpOwogICAgIH0KIAogICAgIC8vIDxyZGFyOi8vcHJvYmxlbS84NDQwOTAzPjog
QXBwbGVDb25uZWN0IGhhcyBhIGJ1ZyB3aGVyZSBpdCBkb2VzIG5vdApJbmRleDogU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9xdC9XZWJFcnJvcnNRdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9xdC9XZWJF
cnJvcnNRdC5jcHAJKHJldmlzaW9uIDg3NTc4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9xdC9XZWJFcnJvcnNRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUx
LDcgKzUxLDcgQEAgZW51bSB7CiAKIFJlc291cmNlRXJyb3IgY2FuY2VsbGVkRXJyb3IoY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIFJlc291cmNlRXJyb3IgZXJyb3IgPSBS
ZXNvdXJjZUVycm9yKCJRdE5ldHdvcmsiLCBRTmV0d29ya1JlcGx5OjpPcGVyYXRpb25DYW5jZWxl
ZEVycm9yLCByZXF1ZXN0LnVybCgpLnByZXR0eVVSTCgpLAorICAgIFJlc291cmNlRXJyb3IgZXJy
b3IgPSBSZXNvdXJjZUVycm9yKCJRdE5ldHdvcmsiLCBRTmV0d29ya1JlcGx5OjpPcGVyYXRpb25D
YW5jZWxlZEVycm9yLCByZXF1ZXN0LnVybCgpLnN0cmluZygpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFFDb3JlQXBwbGljYXRpb246OnRyYW5zbGF0ZSgiUVdlYkZy
YW1lIiwgIlJlcXVlc3QgY2FuY2VsbGVkIiwgMCwgUUNvcmVBcHBsaWNhdGlvbjo6VW5pY29kZVVU
RjgpKTsKICAgICBlcnJvci5zZXRJc0NhbmNlbGxhdGlvbih0cnVlKTsKICAgICByZXR1cm4gZXJy
b3I7ICAgIApAQCAtNTksNyArNTksNyBAQCBSZXNvdXJjZUVycm9yIGNhbmNlbGxlZEVycm9yKGNv
bnN0IFJlc291CiAKIFJlc291cmNlRXJyb3IgYmxvY2tlZEVycm9yKGNvbnN0IFJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCkKIHsKLSAgICByZXR1cm4gUmVzb3VyY2VFcnJvcigiV2ViS2l0IiwgV2Vi
S2l0RXJyb3JDYW5ub3RVc2VSZXN0cmljdGVkUG9ydCwgcmVxdWVzdC51cmwoKS5wcmV0dHlVUkwo
KSwKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcigiV2ViS2l0IiwgV2ViS2l0RXJyb3JDYW5ub3RV
c2VSZXN0cmljdGVkUG9ydCwgcmVxdWVzdC51cmwoKS5zdHJpbmcoKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICBRQ29yZUFwcGxpY2F0aW9uOjp0cmFuc2xhdGUoIlFXZWJGcmFtZSIsICJSZXF1
ZXN0IGJsb2NrZWQiLCAwLCBRQ29yZUFwcGxpY2F0aW9uOjpVbmljb2RlVVRGOCkpOwogfQogCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9lZmwvQ2hhbmdlTG9nCShyZXZpc2lvbiA4NzU3OCkKKysrIFNvdXJjZS9XZWJLaXQvZWZs
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBACisyMDExLTA1LTI3ICBB
ZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxl
eGV5IFByb3NrdXJ5YWtvdi4KKworICAgICAgICBBdWRpdCBhbGwgdXNlcyBvZiBLVVJMOjpwcmV0
dHlVUkwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYx
MjAxCisKKyAgICAgICAgVXBkYXRlIGNhbGxlcnMgb2YgcHJldHR5VVJMIHRvIGp1c3QgY2FsbCBz
dHJpbmcuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRFZmwuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50RWZsOjptb3VzZURpZE1vdmVPdmVyRWxlbWVu
dCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRFZmwuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRFZmw6OmRpc3BhdGNoV2lsbFNlbmRS
ZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50RWZsOjphc3NpZ25J
ZGVudGlmaWVyVG9Jbml0aWFsUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRl
ckNsaWVudEVmbDo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50RWZsOjpkb3dubG9hZCk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEVmbDo6Y2FuY2VsbGVkRXJyb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRFZmw6OmJsb2NrZWRFcnJvcik6CisgICAgICAg
ICogZXdrL2V3a19mcmFtZS5jcHA6CisgICAgICAgIChld2tfZnJhbWVfaGl0X3Rlc3RfbmV3KToK
KyAgICAgICAgKGV3a19mcmFtZV91cmlfY2hhbmdlZCk6CisgICAgICAgICogZXdrL2V3a192aWV3
LmNwcDoKKyAgICAgICAgKF9ld2tfdmlld19wcml2X25ldyk6CisgICAgICAgIChld2tfdmlld19m
cmFtZV9jcmVhdGUpOgorICAgICAgICAoZXdrX3ZpZXdfcGx1Z2luX2NyZWF0ZSk6CisKIDIwMTEt
MDUtMTYgIEpvbiBMZWUgIDxqb25sZWVAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IFNpbW9uIEZyYXNlci4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0No
cm9tZUNsaWVudEVmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9lZmwvV2ViQ29y
ZVN1cHBvcnQvQ2hyb21lQ2xpZW50RWZsLmNwcAkocmV2aXNpb24gODc1NzgpCisrKyBTb3VyY2Uv
V2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRFZmwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNjAsNyArMzYwLDcgQEAgdm9pZCBDaHJvbWVDbGllbnRFZmw6Om1vdXNlRGlkTW92
ZU92ZXJFbAogICAgICAgICBpZiAoIXVybC5pc0VtcHR5KCkgJiYgdXJsICE9IG1faG92ZXJlZExp
bmtVUkwpIHsKICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGxpbmtbMl07CiAgICAgICAgICAgICBU
ZXh0RGlyZWN0aW9uIGRpcjsKLSAgICAgICAgICAgIENTdHJpbmcgdXJsU3RyID0gdXJsLnByZXR0
eVVSTCgpLnV0ZjgoKTsKKyAgICAgICAgICAgIENTdHJpbmcgdXJsU3RyID0gdXJsLnN0cmluZygp
LnV0ZjgoKTsKICAgICAgICAgICAgIENTdHJpbmcgdGl0bGVTdHIgPSBoaXQudGl0bGUoZGlyKS51
dGY4KCk7CiAgICAgICAgICAgICBsaW5rWzBdID0gdXJsU3RyLmRhdGEoKTsKICAgICAgICAgICAg
IGxpbmtbMV0gPSB0aXRsZVN0ci5kYXRhKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2VmbC9XZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEVmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRFZmwuY3BwCShyZXZp
c2lvbiA4NzU3OCkKKysrIFNvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9h
ZGVyQ2xpZW50RWZsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA5LDcgKzIwOSw3IEBAIHZvaWQg
RnJhbWVMb2FkZXJDbGllbnRFZmw6OmRpc3BhdGNoRGlkQ2EKIAogdm9pZCBGcmFtZUxvYWRlckNs
aWVudEVmbDo6ZGlzcGF0Y2hXaWxsU2VuZFJlcXVlc3QoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwg
dW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBSZXNvdXJjZVJlcXVlc3QmIGNvcmVSZXF1ZXN0LCBj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJiBjb3JlUmVzcG9uc2UpCiB7Ci0gICAgQ1N0cmluZyB1cmwg
PSBjb3JlUmVxdWVzdC51cmwoKS5wcmV0dHlVUkwoKS51dGY4KCk7CisgICAgQ1N0cmluZyB1cmwg
PSBjb3JlUmVxdWVzdC51cmwoKS5zdHJpbmcoKS51dGY4KCk7CiAgICAgREJHKCJSZXNvdXJjZSB1
cmw9JXMiLCB1cmwuZGF0YSgpKTsKIAogICAgIEV3a19GcmFtZV9SZXNvdXJjZV9SZXF1ZXN0IHJl
cXVlc3QgPSB7IDAsIGlkZW50aWZpZXIgfTsKQEAgLTIzNiw3ICsyMzYsNyBAQCBib29sIEZyYW1l
TG9hZGVyQ2xpZW50RWZsOjpzaG91bGRVc2VDcmVkCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRF
Zmw6OmFzc2lnbklkZW50aWZpZXJUb0luaXRpYWxSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRp
ZmllciwgRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIGNvcmVSZXF1ZXN0
KQogewotICAgIENTdHJpbmcgdXJsID0gY29yZVJlcXVlc3QudXJsKCkucHJldHR5VVJMKCkudXRm
OCgpOworICAgIENTdHJpbmcgdXJsID0gY29yZVJlcXVlc3QudXJsKCkuc3RyaW5nKCkudXRmOCgp
OwogICAgIERCRygiUmVzb3VyY2UgdXJsPSVzIiwgdXJsLmRhdGEoKSk7CiAKICAgICBFd2tfRnJh
bWVfUmVzb3VyY2VfUmVxdWVzdCByZXF1ZXN0ID0geyAwLCBpZGVudGlmaWVyIH07CkBAIC0zMDks
NyArMzA5LDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6ZGlzcGF0Y2hEZWNpZAogICAg
IEFTU0VSVChtX2ZyYW1lKTsKICAgICAvLyBpZiBub3QgYWNjZXB0TmF2aWdhdGlvblJlcXVlc3Qg
LSBsb29rIGF0IFF0IC0+IFBvbGljeUlnbm9yZTsKICAgICAvLyBGSVhNRTogZG8gcHJvcGVyIGNo
ZWNrIGFuZCBvbmx5IHJlc2V0IGZvcm1zIHdoZW4gb24gUG9saWN5SWdub3JlCi0gICAgY2hhciog
dXJsID0gc3RyZHVwKHJlc291cmNlUmVxdWVzdC51cmwoKS5wcmV0dHlVUkwoKS51dGY4KCkuZGF0
YSgpKTsKKyAgICBjaGFyKiB1cmwgPSBzdHJkdXAocmVzb3VyY2VSZXF1ZXN0LnVybCgpLnN0cmlu
ZygpLnV0ZjgoKS5kYXRhKCkpOwogICAgIEV3a19GcmFtZV9SZXNvdXJjZV9SZXF1ZXN0IHJlcXVl
c3QgPSB7IHVybCwgMCB9OwogICAgIEVpbmFfQm9vbCByZXQgPSBld2tfdmlld19uYXZpZ2F0aW9u
X3BvbGljeV9kZWNpc2lvbihtX3ZpZXcsICZyZXF1ZXN0KTsKICAgICBmcmVlKHVybCk7CkBAIC03
NjQsNyArNzY0LDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6ZG93bmxvYWQoUmVzbwog
ICAgIGlmICghbV92aWV3KQogICAgICAgICByZXR1cm47CiAKLSAgICBDU3RyaW5nIHVybCA9IHJl
cXVlc3QudXJsKCkucHJldHR5VVJMKCkudXRmOCgpOworICAgIENTdHJpbmcgdXJsID0gcmVxdWVz
dC51cmwoKS5zdHJpbmcoKS51dGY4KCk7CiAgICAgRXdrX0Rvd25sb2FkIGRvd25sb2FkOwogCiAg
ICAgZG93bmxvYWQudXJsID0gdXJsLmRhdGEoKTsKQEAgLTc4NCw3ICs3ODQsNyBAQCBlbnVtIHsK
IAogUmVzb3VyY2VFcnJvciBGcmFtZUxvYWRlckNsaWVudEVmbDo6Y2FuY2VsbGVkRXJyb3IoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIFJlc291cmNlRXJyb3IgZXJyb3Io
IkVycm9yIiwgLTk5OSwgcmVxdWVzdC51cmwoKS5wcmV0dHlVUkwoKSwKKyAgICBSZXNvdXJjZUVy
cm9yIGVycm9yKCJFcnJvciIsIC05OTksIHJlcXVlc3QudXJsKCkuc3RyaW5nKCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAiUmVxdWVzdCBjYW5jZWxsZWQiKTsKICAgICBlcnJvci5zZXRJc0Nh
bmNlbGxhdGlvbih0cnVlKTsKICAgICByZXR1cm4gZXJyb3I7CkBAIC03OTIsNyArNzkyLDcgQEAg
UmVzb3VyY2VFcnJvciBGcmFtZUxvYWRlckNsaWVudEVmbDo6Y2FuYwogCiBSZXNvdXJjZUVycm9y
IEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpibG9ja2VkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0KQogewotICAgIHJldHVybiBSZXNvdXJjZUVycm9yKCJFcnJvciIsIFdlYktpdEVy
cm9yQ2Fubm90VXNlUmVzdHJpY3RlZFBvcnQsIHJlcXVlc3QudXJsKCkucHJldHR5VVJMKCksCisg
ICAgcmV0dXJuIFJlc291cmNlRXJyb3IoIkVycm9yIiwgV2ViS2l0RXJyb3JDYW5ub3RVc2VSZXN0
cmljdGVkUG9ydCwgcmVxdWVzdC51cmwoKS5zdHJpbmcoKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAiUmVxdWVzdCBibG9ja2VkIik7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZWZsL2V3
ay9ld2tfZnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tf
ZnJhbWUuY3BwCShyZXZpc2lvbiA4NzU3OCkKKysrIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tf
ZnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYyLDcgKzExNjIsNyBAQCBFd2tfSGl0X1Rl
c3QqIGV3a19mcmFtZV9oaXRfdGVzdF9uZXcoY29uCiAgICAgICAgIGhpdF90ZXN0LT5mcmFtZSA9
IGtpdChyZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCktPmRvY3VtZW50KCktPmZyYW1lKCkpOwog
CiAgICAgaGl0X3Rlc3QtPmxpbmsudGV4dCA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHJlc3VsdC50
ZXh0Q29udGVudCgpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGhpdF90ZXN0LT5saW5rLnVybCA9IGVp
bmFfc3RyaW5nc2hhcmVfYWRkKHJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKS5wcmV0dHlVUkwoKS51
dGY4KCkuZGF0YSgpKTsKKyAgICBoaXRfdGVzdC0+bGluay51cmwgPSBlaW5hX3N0cmluZ3NoYXJl
X2FkZChyZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAg
ICAgaGl0X3Rlc3QtPmxpbmsudGl0bGUgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChyZXN1bHQudGl0
bGVEaXNwbGF5U3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgaGl0X3Rlc3QtPmxpbmsudGFy
Z2V0X2ZyYW1lID0ga2l0KHJlc3VsdC50YXJnZXRGcmFtZSgpKTsKIApAQCAtMjAxNCw3ICsyMDE0
LDcgQEAgRWluYV9Cb29sIGV3a19mcmFtZV91cmlfY2hhbmdlZChFdmFzX09iagogewogICAgIEVX
S19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKLSAgICBXVEY6
OkNTdHJpbmcgdXJpKHNkLT5mcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkucHJldHR5VVJMKCkudXRm
OCgpKTsKKyAgICBXVEY6OkNTdHJpbmcgdXJpKHNkLT5mcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCku
c3RyaW5nKCkudXRmOCgpKTsKIAogICAgIElORigidXJpPSVzIiwgdXJpLmRhdGEoKSk7CiAgICAg
aWYgKCF1cmkuZGF0YSgpKSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAJKHJl
dmlzaW9uIDg3NTc4KQorKysgU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTc3LDcgKzU3Nyw3IEBAIHN0YXRpYyBFd2tfVmlld19Qcml2YXRlX0Rh
dGEqIF9ld2tfdmlld18KICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRVc2VzRW5jb2RpbmdE
ZXRlY3Rvcih0cnVlKTsKIAogICAgIHVybCA9IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnVzZXJTdHls
ZVNoZWV0TG9jYXRpb24oKTsKLSAgICBwcml2LT5zZXR0aW5ncy51c2VyX3N0eWxlc2hlZXQgPSBl
aW5hX3N0cmluZ3NoYXJlX2FkZCh1cmwucHJldHR5VVJMKCkudXRmOCgpLmRhdGEoKSk7CisgICAg
cHJpdi0+c2V0dGluZ3MudXNlcl9zdHlsZXNoZWV0ID0gZWluYV9zdHJpbmdzaGFyZV9hZGQodXJs
LnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgcHJpdi0+c2V0dGluZ3MuZW5jb2Rpbmdf
ZGVmYXVsdCA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkCiAgICAgICAgIChwcml2LT5wYWdlX3NldHRp
bmdzLT5kZWZhdWx0VGV4dEVuY29kaW5nTmFtZSgpLnV0ZjgoKS5kYXRhKCkpOwpAQCAtNDAzNyw3
ICs0MDM3LDcgQEAgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkZyYW1lPiBld2tfdmlldwogewog
ICAgIERCRygibz0lcCwgZnJhbWU9JXAsIG5hbWU9JXMsIG93bmVyRWxlbWVudD0lcCwgdXJsPSVz
LCByZWZlcnJlcj0lcyIsCiAgICAgICAgIG8sIGZyYW1lLCBuYW1lLnV0ZjgoKS5kYXRhKCksIG93
bmVyRWxlbWVudCwKLSAgICAgICAgdXJsLnByZXR0eVVSTCgpLnV0ZjgoKS5kYXRhKCksIHJlZmVy
cmVyLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICB1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwg
cmVmZXJyZXIudXRmOCgpLmRhdGEoKSk7CiAKICAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KG8sIHNkLCAwKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDAp
OwpAQCAtNDA2OSw3ICs0MDY5LDcgQEAgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OldpZGdldD4g
ZXdrX3ZpZQogewogICAgIERCRygibz0lcCwgZnJhbWU9JXAsIHNpemU9JWR4JWQsIGVsZW1lbnQ9
JXAsIHVybD0lcywgbWltZVR5cGU9JXMiLAogICAgICAgICBvLCBmcmFtZSwgcGx1Z2luU2l6ZS53
aWR0aCgpLCBwbHVnaW5TaXplLmhlaWdodCgpLCBlbGVtZW50LAotICAgICAgICB1cmwucHJldHR5
VVJMKCkudXRmOCgpLmRhdGEoKSwgbWltZVR5cGUudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHVy
bC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBtaW1lVHlwZS51dGY4KCkuZGF0YSgpKTsKIAogICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIDApOwogICAgIHNkLT5jaGFuZ2VkLmZy
YW1lX3JlY3QgPSBFSU5BX1RSVUU7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCShyZXZpc2lvbiA4NzU3
OCkKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDIwIEBACisyMDExLTA1LTI3ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleGV5IFByb3NrdXJ5YWtvdi4KKworICAgICAgICBBdWRp
dCBhbGwgdXNlcyBvZiBLVVJMOjpwcmV0dHlVUkwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTYxMjAxCisKKyAgICAgICAgVXBkYXRlIGNhbGxlcnMgb2Yg
cHJldHR5VVJMIHRvIGp1c3QgY2FsbCBzdHJpbmcuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9DaHJvbWVDbGllbnRHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnQ6Om1v
dXNlRGlkTW92ZU92ZXJFbGVtZW50KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxv
YWRlckNsaWVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50Ojpk
aXNwYXRjaERpZENoYW5nZUxvY2F0aW9uV2l0aGluUGFnZSk6CisgICAgICAgIChXZWJLaXQ6OkZy
YW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZENvbW1pdExvYWQpOgorICAgICAgICAqIHdlYmtp
dC93ZWJraXR3ZWJ2aWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19nZXRfaWNvbl91
cmkpOgorCiAyMDExLTA1LTI2ICBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgIDxndXN0YXZvLm5vcm9u
aGFAY29sbGFib3JhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYXJ0aW4gUm9iaW5zb24u
CkluZGV4OiBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9t
ZUNsaWVudEd0ay5jcHAJKHJldmlzaW9uIDg3NTc4KQorKysgU291cmNlL1dlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQxLDcg
KzU0MSw3IEBAIHZvaWQgQ2hyb21lQ2xpZW50Ojptb3VzZURpZE1vdmVPdmVyRWxlbWUKICAgICAg
ICAgaWYgKCF1cmwuaXNFbXB0eSgpICYmIHVybCAhPSBtX2hvdmVyZWRMaW5rVVJMKSB7CiAgICAg
ICAgICAgICBUZXh0RGlyZWN0aW9uIGRpcjsKICAgICAgICAgICAgIENTdHJpbmcgdGl0bGVTdHJp
bmcgPSBoaXQudGl0bGUoZGlyKS51dGY4KCk7Ci0gICAgICAgICAgICBDU3RyaW5nIHVybFN0cmlu
ZyA9IHVybC5wcmV0dHlVUkwoKS51dGY4KCk7CisgICAgICAgICAgICBDU3RyaW5nIHVybFN0cmlu
ZyA9IHVybC5zdHJpbmcoKS51dGY4KCk7CiAgICAgICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25h
bWUobV93ZWJWaWV3LCAiaG92ZXJpbmctb3Zlci1saW5rIiwgdGl0bGVTdHJpbmcuZGF0YSgpLCB1
cmxTdHJpbmcuZGF0YSgpKTsKICAgICAgICAgICAgIG1faG92ZXJlZExpbmtVUkwgPSB1cmw7CiAg
ICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9h
ZGVyQ2xpZW50R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAJKHJldmlzaW9uIDg3NTc4KQorKysgU291
cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04OTUsNyArODk1LDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6
ZGlzcGF0Y2hEaWRDaGFuZwogewogICAgIFdlYktpdFdlYkZyYW1lUHJpdmF0ZSogcHJpdiA9IG1f
ZnJhbWUtPnByaXY7CiAgICAgZ19mcmVlKHByaXYtPnVyaSk7Ci0gICAgcHJpdi0+dXJpID0gZ19z
dHJkdXAoY29yZShtX2ZyYW1lKS0+ZG9jdW1lbnQoKS0+dXJsKCkucHJldHR5VVJMKCkudXRmOCgp
LmRhdGEoKSk7CisgICAgcHJpdi0+dXJpID0gZ19zdHJkdXAoY29yZShtX2ZyYW1lKS0+ZG9jdW1l
bnQoKS0+dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgZ19vYmplY3Rfbm90aWZ5
KEdfT0JKRUNUKG1fZnJhbWUpLCAidXJpIik7CiAgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9
IGdldFZpZXdGcm9tRnJhbWUobV9mcmFtZSk7CiAgICAgaWYgKG1fZnJhbWUgPT0gd2Via2l0X3dl
Yl92aWV3X2dldF9tYWluX2ZyYW1lKHdlYlZpZXcpKQpAQCAtOTg2LDcgKzk4Niw3IEBAIHZvaWQg
RnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkQ29tbWkKIAogICAgIFdlYktpdFdlYkZyYW1l
UHJpdmF0ZSogcHJpdiA9IG1fZnJhbWUtPnByaXY7CiAgICAgZ19mcmVlKHByaXYtPnVyaSk7Ci0g
ICAgcHJpdi0+dXJpID0gZ19zdHJkdXAoY29yZShtX2ZyYW1lKS0+bG9hZGVyKCktPmFjdGl2ZURv
Y3VtZW50TG9hZGVyKCktPnVybCgpLnByZXR0eVVSTCgpLnV0ZjgoKS5kYXRhKCkpOworICAgIHBy
aXYtPnVyaSA9IGdfc3RyZHVwKGNvcmUobV9mcmFtZSktPmxvYWRlcigpLT5hY3RpdmVEb2N1bWVu
dExvYWRlcigpLT51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKICAgICBnX2ZyZWUocHJp
di0+dGl0bGUpOwogICAgIHByaXYtPnRpdGxlID0gTlVMTDsKICAgICBnX29iamVjdF9ub3RpZnko
R19PQkpFQ1QobV9mcmFtZSksICJ1cmkiKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXR3ZWJ2aWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0d2Vidmlldy5jcHAJKHJldmlzaW9uIDg3NTc4KQorKysgU291cmNlL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTc4LDcgKzQ5
NzgsNyBAQCBXZWJLaXRIaXRUZXN0UmVzdWx0KiB3ZWJraXRfd2ViX3ZpZXdfZ2V0CiBHX0NPTlNU
X1JFVFVSTiBnY2hhciogd2Via2l0X3dlYl92aWV3X2dldF9pY29uX3VyaShXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3KQogewogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklF
Vyh3ZWJWaWV3KSwgMCk7Ci0gICAgU3RyaW5nIGljb25VUkwgPSBpY29uRGF0YWJhc2UoKS5zeW5j
aHJvbm91c0ljb25VUkxGb3JQYWdlVVJMKGNvcmUod2ViVmlldyktPm1haW5GcmFtZSgpLT5kb2N1
bWVudCgpLT51cmwoKS5wcmV0dHlVUkwoKSk7CisgICAgU3RyaW5nIGljb25VUkwgPSBpY29uRGF0
YWJhc2UoKS5zeW5jaHJvbm91c0ljb25VUkxGb3JQYWdlVVJMKGNvcmUod2ViVmlldyktPm1haW5G
cmFtZSgpLT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSk7CiAgICAgd2ViVmlldy0+cHJpdi0+
aWNvblVSSSA9IGljb25VUkwudXRmOCgpOwogICAgIHJldHVybiB3ZWJWaWV3LT5wcml2LT5pY29u
VVJJLmRhdGEoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA4NzU3OCkKKysrIFNv
dXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAK
KzIwMTEtMDUtMjcgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlha292LgorCisgICAgICAgIEF1ZGl0IGFsbCB1c2Vz
IG9mIEtVUkw6OnByZXR0eVVSTAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NjEyMDEKKworICAgICAgICBVcGRhdGUgY2FsbGVycyBvZiBwcmV0dHlVUkwg
dG8ganVzdCBjYWxsIHN0cmluZy4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNs
aWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudFF0Ojptb3VzZURpZE1v
dmVPdmVyRWxlbWVudCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFF0Ojp1cGRhdGVH
bG9iYWxIaXN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNh
bmNlbGxlZEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50UXQ6OmJs
b2NrZWRFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFF0OjpvYmpl
Y3RDb250ZW50VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFF0Ojpj
cmVhdGVQbHVnaW4pOgorCiAyMDExLTA1LTI3ICBBbGV4aXMgTWVuYXJkICA8YWxleGlzLm1lbmFy
ZEBvcGVuYm9zc2Eub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IENzYWJhIE9zenRyb2dvbsOh
Yy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21l
Q2xpZW50UXQuY3BwCShyZXZpc2lvbiA4NzU3OCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDYsNyArNTA2
LDcgQEAgdm9pZCBDaHJvbWVDbGllbnRRdDo6bW91c2VEaWRNb3ZlT3ZlckVsZQogICAgICAgICBs
YXN0SG92ZXJVUkwgPSByZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCk7CiAgICAgICAgIGxhc3RIb3Zl
clRpdGxlID0gcmVzdWx0LnRpdGxlKGRpcik7CiAgICAgICAgIGxhc3RIb3ZlckNvbnRlbnQgPSBy
ZXN1bHQudGV4dENvbnRlbnQoKTsKLSAgICAgICAgZW1pdCBtX3dlYlBhZ2UtPmxpbmtIb3ZlcmVk
KGxhc3RIb3ZlclVSTC5wcmV0dHlVUkwoKSwKKyAgICAgICAgZW1pdCBtX3dlYlBhZ2UtPmxpbmtI
b3ZlcmVkKGxhc3RIb3ZlclVSTC5zdHJpbmcoKSwKICAgICAgICAgICAgICAgICBsYXN0SG92ZXJU
aXRsZSwgbGFzdEhvdmVyQ29udGVudCk7CiAgICAgfQogfQpJbmRleDogU291cmNlL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCShy
ZXZpc2lvbiA4NzU3OCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVM
b2FkZXJDbGllbnRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwMiw3ICs4MDIsNyBAQCB2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50UXQ6OnVwZGF0ZUdsb2JhbEhpCiAgICAgUVdlYkhpc3RvcnlJbnRl
cmZhY2UqIGhpc3RvcnkgPSBRV2ViSGlzdG9yeUludGVyZmFjZTo6ZGVmYXVsdEludGVyZmFjZSgp
OwogICAgIFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiBsb2FkZXIgPSBtX2ZyYW1lLT5sb2FkZXIo
KS0+ZG9jdW1lbnRMb2FkZXIoKTsKICAgICBpZiAoaGlzdG9yeSkKLSAgICAgICAgaGlzdG9yeS0+
YWRkSGlzdG9yeUVudHJ5KGxvYWRlci0+dXJsRm9ySGlzdG9yeSgpLnByZXR0eVVSTCgpKTsKKyAg
ICAgICAgaGlzdG9yeS0+YWRkSGlzdG9yeUVudHJ5KGxvYWRlci0+dXJsRm9ySGlzdG9yeSgpLnN0
cmluZygpKTsKIAogICAgIGlmIChkdW1wSGlzdG9yeUNhbGxiYWNrcykgewogICAgICAgICBwcmlu
dGYoIldlYlZpZXcgbmF2aWdhdGVkIHRvIHVybCBcIiVzXCIgd2l0aCB0aXRsZSBcIiVzXCIgd2l0
aCBIVFRQIGVxdWl2YWxlbnQgbWV0aG9kIFwiJXNcIi4gIFRoZSBuYXZpZ2F0aW9uIHdhcyAlcyBh
bmQgd2FzICVzJXMuXG4iLApAQCAtOTI2LDcgKzkyNiw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGll
bnRRdDo6Y29tbWl0dGVkTG9hZCgKIAogV2ViQ29yZTo6UmVzb3VyY2VFcnJvciBGcmFtZUxvYWRl
ckNsaWVudFF0OjpjYW5jZWxsZWRFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QpCiB7Ci0gICAgUmVzb3VyY2VFcnJvciBlcnJvciA9IFJlc291cmNlRXJyb3IoIlF0
TmV0d29yayIsIFFOZXR3b3JrUmVwbHk6Ok9wZXJhdGlvbkNhbmNlbGVkRXJyb3IsIHJlcXVlc3Qu
dXJsKCkucHJldHR5VVJMKCksCisgICAgUmVzb3VyY2VFcnJvciBlcnJvciA9IFJlc291cmNlRXJy
b3IoIlF0TmV0d29yayIsIFFOZXR3b3JrUmVwbHk6Ok9wZXJhdGlvbkNhbmNlbGVkRXJyb3IsIHJl
cXVlc3QudXJsKCkuc3RyaW5nKCksCiAgICAgICAgICAgICBRQ29yZUFwcGxpY2F0aW9uOjp0cmFu
c2xhdGUoIlFXZWJGcmFtZSIsICJSZXF1ZXN0IGNhbmNlbGxlZCIsIDAsIFFDb3JlQXBwbGljYXRp
b246OlVuaWNvZGVVVEY4KSk7CiAgICAgZXJyb3Iuc2V0SXNDYW5jZWxsYXRpb24odHJ1ZSk7CiAg
ICAgcmV0dXJuIGVycm9yOwpAQCAtOTQ2LDcgKzk0Niw3IEBAIGVudW0gewogCiBXZWJDb3JlOjpS
ZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmJsb2NrZWRFcnJvcihjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0gICAgcmV0dXJuIFJlc291cmNlRXJy
b3IoIldlYktpdEVycm9yRG9tYWluIiwgV2ViS2l0RXJyb3JDYW5ub3RVc2VSZXN0cmljdGVkUG9y
dCwgcmVxdWVzdC51cmwoKS5wcmV0dHlVUkwoKSwKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcigi
V2ViS2l0RXJyb3JEb21haW4iLCBXZWJLaXRFcnJvckNhbm5vdFVzZVJlc3RyaWN0ZWRQb3J0LCBy
ZXF1ZXN0LnVybCgpLnN0cmluZygpLAogICAgICAgICAgICAgUUNvcmVBcHBsaWNhdGlvbjo6dHJh
bnNsYXRlKCJRV2ViRnJhbWUiLCAiUmVxdWVzdCBibG9ja2VkIiwgMCwgUUNvcmVBcHBsaWNhdGlv
bjo6VW5pY29kZVVURjgpKTsKIH0KIApAQCAtMTM2MCw3ICsxMzYwLDcgQEAgdm9pZCBGcmFtZUxv
YWRlckNsaWVudFF0Ojp0cmFuc2ZlckxvYWRpbgogCiBPYmplY3RDb250ZW50VHlwZSBGcmFtZUxv
YWRlckNsaWVudFF0OjpvYmplY3RDb250ZW50VHlwZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0
cmluZyYgbWltZVR5cGVJbiwgYm9vbCBzaG91bGRQcmVmZXJQbHVnSW5zRm9ySW1hZ2VzKQogewot
ICAgIC8vIHFEZWJ1ZygpPDwiICsrKysrKysrKysrKysrKysgdXJsIGlzICI8PHVybC5wcmV0dHlV
UkwoKTw8IiwgbWltZSA9ICI8PG1pbWVUeXBlSW47CisgICAgLy8gcURlYnVnKCk8PCIgKysrKysr
KysrKysrKysrKyB1cmwgaXMgIjw8dXJsLnN0cmluZygpPDwiLCBtaW1lID0gIjw8bWltZVR5cGVJ
bjsKICAgICBRRmlsZUluZm8gZmkodXJsLnBhdGgoKSk7CiAgICAgU3RyaW5nIGV4dGVuc2lvbiA9
IGZpLnN1ZmZpeCgpOwogICAgIGlmIChtaW1lVHlwZUluID09ICJhcHBsaWNhdGlvbi94LXF0LXBs
dWdpbiIgfHwgbWltZVR5cGVJbiA9PSAiYXBwbGljYXRpb24veC1xdC1zdHlsZWQtd2lkZ2V0IikK
QEAgLTE1MjMsOCArMTUyMyw4IEBAIHByaXZhdGU6CiBQYXNzUmVmUHRyPFdpZGdldD4gRnJhbWVM
b2FkZXJDbGllbnRRdDo6Y3JlYXRlUGx1Z2luKGNvbnN0IEludFNpemUmIHBsdWdpblNpemUsIEhU
TUxQbHVnSW5FbGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBwYXJhbU5hbWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBib29sIGxvYWRNYW51YWxseSkKIHsKLSAgICAvLyBxRGVidWcoKTw8Ii0tLS0tLSBD
cmVhdGluZyBwbHVnaW4gaW4gRnJhbWVMb2FkZXJDbGllbnRRdDo6Y3JlYXRlUGx1Z2luIGZvciAi
PDx1cmwucHJldHR5VVJMKCkgPDwgbWltZVR5cGU7Ci0gICAgLy8gcURlYnVnKCk8PCItLS0tLS1c
dCB1cmwgPSAiPDx1cmwucHJldHR5VVJMKCk7CisgICAgLy8gcURlYnVnKCk8PCItLS0tLS0gQ3Jl
YXRpbmcgcGx1Z2luIGluIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNyZWF0ZVBsdWdpbiBmb3IgIjw8
dXJsLnN0cmluZygpIDw8IG1pbWVUeXBlOworICAgIC8vIHFEZWJ1ZygpPDwiLS0tLS0tXHQgdXJs
ID0gIjw8dXJsLnN0cmluZygpOwogCiAgICAgaWYgKCFtX3dlYkZyYW1lKQogICAgICAgICByZXR1
cm4gMDsK
</data>

          </attachment>
      

    </bug>

</bugzilla>