<?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>162811</bug_id>
          
          <creation_ts>2016-09-30 14:40:18 -0700</creation_ts>
          <short_desc>Update Resource Load Statistics</short_desc>
          <delta_ts>2016-10-06 10:42:47 -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>WebKit2</component>
          <version>WebKit 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="John Wilander">wilander</reporter>
          <assigned_to name="John Wilander">wilander</assigned_to>
          <cc>achristensen</cc>
    
    <cc>aestes</cc>
    
    <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>wilander</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1235428</commentid>
    <comment_count>0</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2016-09-30 14:40:18 -0700</bug_when>
    <thetext>Update resource load statistics. Use the Public Suffix list, capture web sockets statistics, capture synchronous XHR requests, skip main resource loads done in SubresourceLoader, and clear data records.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1235453</commentid>
    <comment_count>1</comment_count>
      <attachid>290395</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2016-09-30 15:14:33 -0700</bug_when>
    <thetext>Created attachment 290395
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1235505</commentid>
    <comment_count>2</comment_count>
      <attachid>290395</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2016-09-30 17:00:44 -0700</bug_when>
    <thetext>Comment on attachment 290395
Patch

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

&gt; Source/WebCore/Modules/websockets/WebSocket.cpp:323
&gt; +        } else {
&gt; +            ResourceLoadObserver::sharedObserver().logWebSocketLoading(document.frame(), m_url);

Our style is to omit braces for single-line control clauses.

&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:61
&gt; +static inline bool is3xxRedirect(const ResourceResponse&amp; response)

Can you use ResourceResponse::isRedirected() instead of this function?

&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:63
&gt; +    return !response.isNull() &amp;&amp; response.httpStatusCode() / 100 == 3;

Probably ok to omit the isNull() check. Null responses should have a status code of 0, and 0 / 100 == 0.

&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:66
&gt; +static inline bool shouldLog(bool usesEphemeralSession, RefPtr&lt;ResourceLoadStatisticsStore&gt; store)

Passing a RefPtr by value here causes unnecessary ref count churn.

This would make more sense a private member function that takes a Page* as an argument, since you can derive usesEphemeralSession from a Page, and can access m_store from &apos;this&apos;.

&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:163
&gt; +    if (frame &amp;&amp; frame-&gt;page() &amp;&amp; frame-&gt;page()-&gt;usesEphemeralSession())

You assert that frame and frame-&gt;page() are non-null above, so you don&apos;t need to check for that here.

&gt; Source/WebCore/loader/ResourceLoadStatisticsStore.h:67
&gt; +    WEBCORE_EXPORT Vector&lt;String&gt; getPrevalentResourceDomainsWithoutUserInteraction();

Our style is to omit &apos;get&apos; from getters. This should be called &apos;prevalentResourceDomainsWithoutUserInteraction()&apos;.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:47
&gt; +static const double numberOfSecondsBetweenClearingDataRecords = 600.0;
&gt; +static const double featureVectorLengthThreshold = 3.0;

Our style is to omit the &apos;.0&apos; from literals.

Do these really need to be doubles? Seems like auto would work fine here.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:69
&gt; +    unsigned featureOne = resourceStatistic.subresourceUnderTopFrameOrigins.size();
&gt; +    unsigned featureTwo = resourceStatistic.subresourceUniqueRedirectsTo.size();
&gt; +    unsigned featureThree = resourceStatistic.subframeUnderTopFrameOrigins.size();

I&apos;d use auto instead of unsigned. Also, &apos;feature{One,Two,Three}&apos; seem like poor names. I&apos;d call these subresourceUnderTopFrameOriginsCount, etc.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:79
&gt; +    double vectorLength = 0.0;

Our style is to omit the &apos;.0&apos; from literals.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:86
&gt; +    vectorLength += pow(featureOne, 2);
&gt; +    vectorLength += pow(featureTwo, 2);
&gt; +    vectorLength += pow(featureThree, 2);
&gt; +
&gt; +    ASSERT(vectorLength &gt; 0.0);
&gt; +
&gt; +    return sqrt(vectorLength) &gt; featureVectorLengthThreshold;

This could use a &apos;why&apos; comment.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:96
&gt; +void WebResourceLoadStatisticsStore::clearDataRecords(Vector&lt;String&gt; prevalentResources)

Passing a Vector by value doesn&apos;t seem like the right thing to do here. From looking at this function&apos;s caller, I think you want to pass an rvalue reference (Vector&lt;String&gt;&amp;&amp;).

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:114
&gt; +    RunLoop::main().dispatch([prevalentResources, webResourceLoadStatisticsStore = this] {

Capturing prevalentResources by value makes a copy. This can be avoided by using move capture: [prevalentResources = WTFMove(prevalentResources), ...]. Also, I think you can just capture &apos;this&apos; instead of assigning it to a new variable.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:117
&gt; +        websiteDataStore.fetchData(WebsiteDataType::Cookies, { }, [prevalentResources, webResourceLoadStatisticsStore](auto websiteDataRecords) {

Ditto.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:132
&gt; +            websiteDataStore.removeData(WebsiteDataType::Cookies, { WTFMove(dataRecords) }, [webResourceLoadStatisticsStore] {

Ditto regarding the &apos;this&apos; capture issue.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:147
&gt; +            Vector&lt;String&gt; prevalentResources;
&gt; +            webResourceLoadStatisticsStore-&gt;classifyResource(resourceStatistic);
&gt; +            prevalentResources = webResourceLoadStatisticsStore-&gt;coreStore().getPrevalentResourceDomainsWithoutUserInteraction();

Instead of default-constructing prevalentResources then assigning it a new value, you should construct it with the return value of getPrevalentResourceDomainsWithoutUserInteraction() to take advantage of the return value optimization.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:149
&gt; +            if (prevalentResources.size() &gt; 0)
&gt; +                webResourceLoadStatisticsStore-&gt;clearDataRecords(prevalentResources);

I&apos;d move the &apos;prevalentResources.size() &gt; 0&apos; check into WebResourceLoadStatisticsStore::clearDataRecords(), then either WTFMove() prevalentResources or just move the call to getPrevalentResourceDomainsWithoutUserInteraction() into this statement.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.h:92
&gt; +    double m_lastTimeDataRecordsWereCleared { 0.0 };

Our style is to omit the &apos;.0&apos; from literals.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1235506</commentid>
    <comment_count>3</comment_count>
      <attachid>290395</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2016-09-30 17:08:57 -0700</bug_when>
    <thetext>Comment on attachment 290395
Patch

r- due to the EWS failures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1235512</commentid>
    <comment_count>4</comment_count>
      <attachid>290395</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2016-09-30 17:22:32 -0700</bug_when>
    <thetext>Comment on attachment 290395
Patch

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

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:122
&gt; +                    if (websiteDataRecord.displayName == prevalentResource || websiteDataRecord.displayName.endsWith(&quot;.&quot; + prevalentResource))
&gt; +                        dataRecords.append(websiteDataRecord);

Do websiteDataRecord.displayName and prevalentResource represent hostnames? If so, what if the names differ in case but are otherwise equal?

It&apos;s not great to do two separate string comparisons here. You could do something like this instead:

    if (websiteDataRecord.displayName.endsWith(prevalentResource)) { // should we use endsWithIgnoringASCIICase() instead?
        unsigned suffixStart = websiteDataRecord.displayName.length() - prevalentResource.length();
        if (suffixStart == 0 || websiteDataRecord.displayName[suffixStart - 1] == &apos;.&apos;)
            dataRecords.append(websiteDataRecord);
    }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1235513</commentid>
    <comment_count>5</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2016-09-30 17:25:44 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 290395 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=290395&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:122
&gt; &gt; +                    if (websiteDataRecord.displayName == prevalentResource || websiteDataRecord.displayName.endsWith(&quot;.&quot; + prevalentResource))
&gt; &gt; +                        dataRecords.append(websiteDataRecord);
&gt; 
&gt; Do websiteDataRecord.displayName and prevalentResource represent hostnames?
&gt; If so, what if the names differ in case but are otherwise equal?
&gt; 
&gt; It&apos;s not great to do two separate string comparisons here. You could do
&gt; something like this instead:
&gt; 
&gt;     if (websiteDataRecord.displayName.endsWith(prevalentResource)) { //
&gt; should we use endsWithIgnoringASCIICase() instead?
&gt;         unsigned suffixStart = websiteDataRecord.displayName.length() -
&gt; prevalentResource.length();
&gt;         if (suffixStart == 0 || websiteDataRecord.displayName[suffixStart -
&gt; 1] == &apos;.&apos;)
&gt;             dataRecords.append(websiteDataRecord);
&gt;     }

Note that we already do this for computing cookie partitions, so there is a similar function in NetworkStorageSessionCFNet.cpp: static inline bool hostIsInDomain(). I wonder if we should move that somewhere where it can be reused.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236003</commentid>
    <comment_count>6</comment_count>
      <attachid>290541</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2016-10-03 17:34:02 -0700</bug_when>
    <thetext>Created attachment 290541
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236006</commentid>
    <comment_count>7</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2016-10-03 17:38:34 -0700</bug_when>
    <thetext>Thanks for great review comments, Andy!

I picked up all of it except:

1. ResourceResponse::isRedirected(). I did see this function and considered it. But I want to capture &quot;isRedirecting&quot; which is the 3xx response whereas &quot;isRedirected&quot; I believe is a response that has already been redirected. I might be wrong. We should figure it out and make sure the naming is correct. Maybe also introduce ResourceResponse::isRedirecting().

2. hostIsInDomain(). I agree this would be nice to have as a shared function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236013</commentid>
    <comment_count>8</comment_count>
      <attachid>290542</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2016-10-03 18:09:47 -0700</bug_when>
    <thetext>Created attachment 290542
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236014</commentid>
    <comment_count>9</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2016-10-03 18:10:36 -0700</bug_when>
    <thetext>Fixed a failing test case where a web socket was constructed in a detached frame.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236031</commentid>
    <comment_count>10</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2016-10-03 19:03:53 -0700</bug_when>
    <thetext>r206763 seems to be failing on Windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236710</commentid>
    <comment_count>11</comment_count>
      <attachid>290725</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2016-10-05 10:50:24 -0700</bug_when>
    <thetext>Created attachment 290725
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236712</commentid>
    <comment_count>12</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2016-10-05 10:51:09 -0700</bug_when>
    <thetext>Fixed Windows build error.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236745</commentid>
    <comment_count>13</comment_count>
      <attachid>290725</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-10-05 12:10:22 -0700</bug_when>
    <thetext>Comment on attachment 290725
Patch

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        No new tests. The counting is based on top privately owned domains
&gt; +        which currently is not supported by layout tests nor API tests.

We need to make a way to synthesize things to test this.  We can&apos;t have such a large feature completely untested.

&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:64
&gt; +static inline bool is3xxRedirect(const ResourceResponse&amp; response)
&gt;  {
&gt; -    if (!Settings::resourceLoadStatisticsEnabled())
&gt; -        return;
&gt; +    return response.httpStatusCode() / 100 == 3;
&gt; +}

I&apos;d prefer range checks &gt;= 300 &amp;&amp; &lt;= 399
Do we want to support unknown status codes, like 366 (which has no defined meaning)?

&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:68
&gt; +    // Err on the safe side until we have sorted out what to do in worker contexts

This should be a FIXME.  Workers should have started with something that was once connected to a page.  We&apos;ll probably need to pipe something refcounted around like I did in https://trac.webkit.org/changeset/202930

&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:231
&gt; +    const URL&amp; mainFrameURL = frame ? frame-&gt;mainFrame().document()-&gt;url() : URL();

We already did an early return if frame were null.

&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:278
&gt;  String ResourceLoadObserver::primaryDomain(const URL&amp; url)

This logic ought to be in URL and it should definitely have unit tests.  It should just return a substring of URL.m_string instead of using a StringBuilder to reconstruct a String we&apos;ve split apart.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:88
&gt; +    vectorLength += pow(subresourceUnderTopFrameOriginsCount, 2);
&gt; +    vectorLength += pow(subresourceUniqueRedirectsToCount, 2);
&gt; +    vectorLength += pow(subframeUnderTopFrameOriginsCount, 2);

Don&apos;t use pow(x, 2).  Just use x * x.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236755</commentid>
    <comment_count>14</comment_count>
      <attachid>290740</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2016-10-05 12:37:18 -0700</bug_when>
    <thetext>Created attachment 290740
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236756</commentid>
    <comment_count>15</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2016-10-05 12:42:10 -0700</bug_when>
    <thetext>Thanks for the review, Alex! Fixed all of it. Some comments inline below.

(In reply to comment #13)
&gt; Comment on attachment 290725 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=290725&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:9
&gt; &gt; +        No new tests. The counting is based on top privately owned domains
&gt; &gt; +        which currently is not supported by layout tests nor API tests.
&gt; 
&gt; We need to make a way to synthesize things to test this.  We can&apos;t have such
&gt; a large feature completely untested.

I agree fully and I do have a plan.

&gt; &gt; Source/WebCore/loader/ResourceLoadObserver.cpp:64
&gt; &gt; +static inline bool is3xxRedirect(const ResourceResponse&amp; response)
&gt; &gt;  {
&gt; &gt; -    if (!Settings::resourceLoadStatisticsEnabled())
&gt; &gt; -        return;
&gt; &gt; +    return response.httpStatusCode() / 100 == 3;
&gt; &gt; +}
&gt; 
&gt; I&apos;d prefer range checks &gt;= 300 &amp;&amp; &lt;= 399

Fixed.

&gt; Do we want to support unknown status codes, like 366 (which has no defined
&gt; meaning)?

I believe our network stack handles all of HTTP 300-399 as redirects. That&apos;s why I did it this way.

&gt; &gt; Source/WebCore/loader/ResourceLoadObserver.cpp:68
&gt; &gt; +    // Err on the safe side until we have sorted out what to do in worker contexts
&gt; 
&gt; This should be a FIXME.  Workers should have started with something that was
&gt; once connected to a page.  We&apos;ll probably need to pipe something refcounted
&gt; around like I did in https://trac.webkit.org/changeset/202930

Fixed.

&gt; &gt; Source/WebCore/loader/ResourceLoadObserver.cpp:231
&gt; &gt; +    const URL&amp; mainFrameURL = frame ? frame-&gt;mainFrame().document()-&gt;url() : URL();
&gt; 
&gt; We already did an early return if frame were null.

Fixed.

&gt; &gt; Source/WebCore/loader/ResourceLoadObserver.cpp:278
&gt; &gt;  String ResourceLoadObserver::primaryDomain(const URL&amp; url)
&gt; 
&gt; This logic ought to be in URL and it should definitely have unit tests.  It
&gt; should just return a substring of URL.m_string instead of using a
&gt; StringBuilder to reconstruct a String we&apos;ve split apart.

Although that code didn&apos;t really change with this patch I agree it should have tests. So I removed it instead. WebKit ports without public suffix list support can decide how to go about this if they want to use the feature.

&gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:88
&gt; &gt; +    vectorLength += pow(subresourceUnderTopFrameOriginsCount, 2);
&gt; &gt; +    vectorLength += pow(subresourceUniqueRedirectsToCount, 2);
&gt; &gt; +    vectorLength += pow(subframeUnderTopFrameOriginsCount, 2);
&gt; 
&gt; Don&apos;t use pow(x, 2).  Just use x * x.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1237091</commentid>
    <comment_count>16</comment_count>
      <attachid>290740</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-10-06 09:21:11 -0700</bug_when>
    <thetext>Comment on attachment 290740
Patch

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

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:85
&gt; +    // Vector length for n dimensions is sqrt(a^2 + (...) + n^2).
&gt; +    double vectorLength = 0;

I&apos;m not sure this comment is necessary.  I think it would be obvious if we did something like this:
double vectorLength = sqrt(
    a * a
    + b * b 
    + c * c);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1237125</commentid>
    <comment_count>17</comment_count>
      <attachid>290740</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2016-10-06 10:19:51 -0700</bug_when>
    <thetext>Comment on attachment 290740
Patch

Thanks, Alex! I&apos;ll revisit the vector bit in a subsequent patch since we have more logic to add there anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1237146</commentid>
    <comment_count>18</comment_count>
      <attachid>290740</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-06 10:42:43 -0700</bug_when>
    <thetext>Comment on attachment 290740
Patch

Clearing flags on attachment: 290740

Committed r206869: &lt;http://trac.webkit.org/changeset/206869&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1237147</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-06 10:42:47 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290395</attachid>
            <date>2016-09-30 15:14:33 -0700</date>
            <delta_ts>2016-10-03 17:34:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162811-20160930151128.patch</filename>
            <type>text/plain</type>
            <size>28511</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNjY0MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBACisyMDE2LTA5LTMwICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFVwZGF0ZSBSZXNvdXJjZSBM
b2FkIFN0YXRpc3RpY3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2MjgxMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhlIGNvdW50aW5nIGlzIGJhc2VkIG9uIHRvcCBwcml2YXRl
bHkgb3duZWQgZG9tYWlucworICAgICAgICB3aGljaCBjdXJyZW50bHkgaXMgbm90IHN1cHBvcnRl
ZCBieSBsYXlvdXQgdGVzdHMgbm9yIEFQSSB0ZXN0cy4KKworICAgICAgICAqIE1vZHVsZXMvd2Vi
c29ja2V0cy9XZWJTb2NrZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Ojpjb25u
ZWN0KToKKyAgICAgICAgICAgIE5vdyBjYXB0dXJlcyBzdGF0aXN0aWNzIGZvciB3ZWIgc29ja2V0
cyB0b28uCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgICAg
IE5vdyBjYXB0dXJlcyBzdGF0aXN0aWNzIGZvciBzeW5jaHJvbm91cyBYSFIgdG9vLgorICAgICAg
ICAqIGxvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpp
czN4eFJlZGlyZWN0KToKKyAgICAgICAgICAgIENvbnZlbmllbmNlIGZ1bmN0aW9uLgorICAgICAg
ICAoV2ViQ29yZTo6c2hvdWxkTG9nKToKKyAgICAgICAgICAgIENvbnZlbmllbmNlIGZ1bmN0aW9u
LgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ0ZyYW1lTmF2aWdh
dGlvbik6CisgICAgICAgICAgICBVcGRhdGVkIHRvIG1ha2UgdXNlIG9mIG5ldyBjb252ZW5pZW5j
ZSBmdW5jdGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9n
U3VicmVzb3VyY2VMb2FkaW5nKToKKyAgICAgICAgICAgIFVwZGF0ZWQgdG8gbWFrZSB1c2Ugb2Yg
bmV3IGNvbnZlbmllbmNlIGZ1bmN0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9h
ZE9ic2VydmVyOjpsb2dXZWJTb2NrZXRMb2FkaW5nKToKKyAgICAgICAgICAgIEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1VzZXJJbnRlcmFjdGlvbik6
CisgICAgICAgICAgICBVcGRhdGVkIHRvIG1ha2UgdXNlIG9mIG5ldyBjb252ZW5pZW5jZSBmdW5j
dGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6cHJpbWFyeURv
bWFpbik6CisgICAgICAgICAgICBOb3cgbWFrZXMgdXNlIG9mIHRoZSBQdWJsaWMgU3VmZml4IGxp
c3QuCisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmg6CisgICAgICAgICog
bG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmdldFByZXZhbGVudFJlc291cmNlRG9tYWlu
c1dpdGhvdXRVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAgICAgQ29udmVuaWVuY2UgZnVuY3Rp
b24uCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnByb2Nl
c3NTdGF0aXN0aWNzKTogRGVsZXRlZC4KKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlLmg6CisgICAgICAgICogbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlN1YnJlc291cmNlTG9hZGVyOjp3aWxsU2VuZFJlcXVlc3RJbnRl
cm5hbCk6CisgICAgICAgICAgICBNb3ZlZCBsb2dnaW5nIGNhbGwgaGlnaGVyIHVwIGFuZCBhZGRl
ZCBhIGNoZWNrIGZvciB3aGV0aGVyIHdlCisgICAgICAgICAgICBhcmUgbG9hZGluZyB0aGUgbWFp
biByZXNvdXJjZS4gVGhlIHJlYXNvbiBmb3IgbW92aW5nIGl0IHVwIGlzCisgICAgICAgICAgICB0
byBjYXB0dXJlIHRoZSByZXF1ZXN0IGJlZm9yZSBzb21lIGRhdGEgbWF5IGJlIGNsZWFyZWQgb3V0
IGluCisgICAgICAgICAgICByZWRpcmVjdCBoYW5kbGluZy4gV2UgYWxzbyB3YW50IHRvIGNhcHR1
cmUgZmFpbGVkIENPUlMgcmVxdWVzdHMKKyAgICAgICAgICAgIHNpbmNlIHRoZXkgYXJlIHNlbnQg
YW5kIHRoZW4gY2FuY2VsbGVkIG9uIHRoZSB3YXkgYmFjay4KKwogMjAxNi0wOS0zMCAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlICJyZW0iIHVuaXQg
b3B0aW1pemF0aW9uIGZvciBkb2N1bWVudCBlbGVtZW50IGZvbnQgc2l6ZSBjaGFuZ2VzCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcAko
cmV2aXNpb24gMjA2NjQyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dl
YlNvY2tldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlICJG
cmFtZS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNZXNzYWdlRXZlbnQuaCIK
KyNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRy
b2xsZXIuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAi
U2VjdXJpdHlPcmlnaW4uaCIKQEAgLTMxOCw2ICszMTksOCBAQCB2b2lkIFdlYlNvY2tldDo6Y29u
bmVjdChjb25zdCBTdHJpbmcmIHVyCiAgICAgICAgICAgICB9KTsKICNlbmRpZgogICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZE9ic2VydmVyKCkubG9nV2ViU29ja2V0TG9hZGluZyhkb2N1bWVudC5mcmFt
ZSgpLCBtX3VybCk7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVy
L0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gMjA2NjQyKQorKysgU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsNyBAQAogI2lu
Y2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAj
aW5jbHVkZSAiUmVzb3VyY2VMb2FkSW5mby5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZE9ic2Vy
dmVyLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiU1ZHRG9jdW1l
bnQuaCIKICNpbmNsdWRlICJTVkdMb2NhdGFibGUuaCIKQEAgLTI3NzQsNiArMjc3NSw3IEBAIHVu
c2lnbmVkIGxvbmcgRnJhbWVMb2FkZXI6OmxvYWRSZXNvdXJjZVMKICAgICAgICAgICAgIHBsYXRm
b3JtU3RyYXRlZ2llcygpLT5sb2FkZXJTdHJhdGVneSgpLT5sb2FkUmVzb3VyY2VTeW5jaHJvbm91
c2x5KG5ldHdvcmtpbmdDb250ZXh0KCksIGlkZW50aWZpZXIsIG5ld1JlcXVlc3QsIHN0b3JlZENy
ZWRlbnRpYWxzLCBjbGllbnRDcmVkZW50aWFsUG9saWN5LCBlcnJvciwgcmVzcG9uc2UsIGJ1ZmZl
cik7CiAgICAgICAgICAgICBkYXRhID0gU2hhcmVkQnVmZmVyOjphZG9wdFZlY3RvcihidWZmZXIp
OwogICAgICAgICAgICAgZG9jdW1lbnRMb2FkZXIoKS0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+
bWF5YmVMb2FkRmFsbGJhY2tTeW5jaHJvbm91c2x5KG5ld1JlcXVlc3QsIGVycm9yLCByZXNwb25z
ZSwgZGF0YSk7CisgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2
ZXIoKS5sb2dTdWJyZXNvdXJjZUxvYWRpbmcoJm1fZnJhbWUsIG5ld1JlcXVlc3QsIHJlc3BvbnNl
KTsKICAgICAgICAgfQogICAgIH0KICAgICBub3RpZmllcigpLnNlbmRSZW1haW5pbmdEZWxlZ2F0
ZU1lc3NhZ2VzKG1fZG9jdW1lbnRMb2FkZXIuZ2V0KCksIGlkZW50aWZpZXIsIHJlcXVlc3QsIHJl
c3BvbnNlLCBkYXRhID8gZGF0YS0+ZGF0YSgpIDogbnVsbHB0ciwgZGF0YSA/IGRhdGEtPnNpemUo
KSA6IDAsIC0xLCBlcnJvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VM
b2FkT2JzZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNv
dXJjZUxvYWRPYnNlcnZlci5jcHAJKHJldmlzaW9uIDIwNjY0MikKKysrIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYg
KzMzLDcgQEAKICNpbmNsdWRlICJOZXR3b3JrU3RvcmFnZVNlc3Npb24uaCIKICNpbmNsdWRlICJQ
YWdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJhdGVnaWVzLmgiCisjaW5jbHVkZSAiUHVibGlj
U3VmZml4LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5oIgogI2luY2x1ZGUg
IlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVz
dC5oIgpAQCAtNTcsMjMgKzU4LDMxIEBAIHZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNldFN0
YXRpc3RpY3MKICAgICBtX3N0b3JlID0gV1RGTW92ZShzdG9yZSk7CiB9CiAKLXZvaWQgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OmxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBGcmFtZSYgZnJhbWUsIGNv
bnN0IEZyYW1lJiB0b3BGcmFtZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBuZXdSZXF1ZXN0LCBj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQorc3RhdGljIGlubGluZSBi
b29sIGlzM3h4UmVkaXJlY3QoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7Ci0g
ICAgaWYgKCFTZXR0aW5nczo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOworICAgIHJldHVybiAhcmVzcG9uc2UuaXNOdWxsKCkgJiYgcmVzcG9uc2UuaHR0
cFN0YXR1c0NvZGUoKSAvIDEwMCA9PSAzOworfQogCi0gICAgaWYgKCFtX3N0b3JlKQotICAgICAg
ICByZXR1cm47CitzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkTG9nKGJvb2wgdXNlc0VwaGVtZXJh
bFNlc3Npb24sIFJlZlB0cjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+IHN0b3JlKQorewor
ICAgIHJldHVybiBTZXR0aW5nczo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKQorICAg
ICAgICAmJiAhdXNlc0VwaGVtZXJhbFNlc3Npb24KKyAgICAgICAgJiYgc3RvcmU7Cit9CiAKK3Zv
aWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBGcmFtZSYg
ZnJhbWUsIGNvbnN0IEZyYW1lJiB0b3BGcmFtZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBuZXdS
ZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQorewogICAg
IEFTU0VSVChmcmFtZS5kb2N1bWVudCgpKTsKICAgICBBU1NFUlQodG9wRnJhbWUuZG9jdW1lbnQo
KSk7CiAgICAgQVNTRVJUKHRvcEZyYW1lLnBhZ2UoKSk7Ci0KLSAgICBib29sIG5lZWRQcml2YWN5
ID0gdG9wRnJhbWUucGFnZSgpID8gdG9wRnJhbWUucGFnZSgpLT51c2VzRXBoZW1lcmFsU2Vzc2lv
bigpIDogZmFsc2U7Ci0gICAgaWYgKG5lZWRQcml2YWN5KQorICAgIAorICAgIGJvb2wgdXNlc0Vw
aGVtZXJhbFNlc3Npb24gPSBmYWxzZTsKKyAgICBpZiAodG9wRnJhbWUucGFnZSgpICYmIHRvcEZy
YW1lLnBhZ2UoKS0+dXNlc0VwaGVtZXJhbFNlc3Npb24oKSkKKyAgICAgICAgdXNlc0VwaGVtZXJh
bFNlc3Npb24gPSB0cnVlOworICAgIGlmICghc2hvdWxkTG9nKHVzZXNFcGhlbWVyYWxTZXNzaW9u
LCBtX3N0b3JlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYm9vbCBpc1JlZGlyZWN0ID0gIXJl
ZGlyZWN0UmVzcG9uc2UuaXNOdWxsKCk7CisgICAgYm9vbCBpc1JlZGlyZWN0ID0gaXMzeHhSZWRp
cmVjdChyZWRpcmVjdFJlc3BvbnNlKTsKICAgICBib29sIGlzTWFpbkZyYW1lID0gZnJhbWUuaXNN
YWluRnJhbWUoKTsKICAgICBjb25zdCBVUkwmIHNvdXJjZVVSTCA9IGZyYW1lLmRvY3VtZW50KCkt
PnVybCgpOwogICAgIGNvbnN0IFVSTCYgdGFyZ2V0VVJMID0gbmV3UmVxdWVzdC51cmwoKTsKQEAg
LTE0OCwxNyArMTU3LDE1IEBAIHZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ0ZyYW1lTmF2
aWcKICAgICAKIHZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1N1YnJlc291cmNlTG9hZGlu
Zyhjb25zdCBGcmFtZSogZnJhbWUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgbmV3UmVxdWVzdCwg
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKIHsKLSAgICBpZiAoIVNl
dHRpbmdzOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpKQotICAgICAgICByZXR1cm47
CisgICAgQVNTRVJUKGZyYW1lLT5wYWdlKCkpOwogCi0gICAgaWYgKCFtX3N0b3JlKQorICAgIGJv
b2wgdXNlc0VwaGVtZXJhbFNlc3Npb24gPSBmYWxzZTsKKyAgICBpZiAoZnJhbWUgJiYgZnJhbWUt
PnBhZ2UoKSAmJiBmcmFtZS0+cGFnZSgpLT51c2VzRXBoZW1lcmFsU2Vzc2lvbigpKQorICAgICAg
ICB1c2VzRXBoZW1lcmFsU2Vzc2lvbiA9IHRydWU7CisgICAgaWYgKCFzaG91bGRMb2codXNlc0Vw
aGVtZXJhbFNlc3Npb24sIG1fc3RvcmUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBib29sIG5l
ZWRQcml2YWN5ID0gKGZyYW1lICYmIGZyYW1lLT5wYWdlKCkpID8gZnJhbWUtPnBhZ2UoKS0+dXNl
c0VwaGVtZXJhbFNlc3Npb24oKSA6IGZhbHNlOwotICAgIGlmIChuZWVkUHJpdmFjeSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIGJvb2wgaXNSZWRpcmVjdCA9ICFyZWRpcmVjdFJlc3BvbnNl
LmlzTnVsbCgpOworICAgIGJvb2wgaXNSZWRpcmVjdCA9IGlzM3h4UmVkaXJlY3QocmVkaXJlY3RS
ZXNwb25zZSk7CiAgICAgY29uc3QgVVJMJiBzb3VyY2VVUkwgPSByZWRpcmVjdFJlc3BvbnNlLnVy
bCgpOwogICAgIGNvbnN0IFVSTCYgdGFyZ2V0VVJMID0gbmV3UmVxdWVzdC51cmwoKTsKICAgICBj
b25zdCBVUkwmIG1haW5GcmFtZVVSTCA9IGZyYW1lID8gZnJhbWUtPm1haW5GcmFtZSgpLmRvY3Vt
ZW50KCktPnVybCgpIDogVVJMKCk7CkBAIC0xNjYsMTQgKzE3MywxNyBAQCB2b2lkIFJlc291cmNl
TG9hZE9ic2VydmVyOjpsb2dTdWJyZXNvdXJjCiAgICAgYXV0byB0YXJnZXRIb3N0ID0gdGFyZ2V0
VVJMLmhvc3QoKTsKICAgICBhdXRvIG1haW5GcmFtZUhvc3QgPSBtYWluRnJhbWVVUkwuaG9zdCgp
OwogCi0gICAgaWYgKHRhcmdldEhvc3QuaXNFbXB0eSgpIHx8IG1haW5GcmFtZUhvc3QuaXNFbXB0
eSgpIHx8IHRhcmdldEhvc3QgPT0gbWFpbkZyYW1lSG9zdCB8fCB0YXJnZXRIb3N0ID09IHNvdXJj
ZVVSTC5ob3N0KCkpCisgICAgaWYgKHRhcmdldEhvc3QuaXNFbXB0eSgpCisgICAgICAgIHx8IG1h
aW5GcmFtZUhvc3QuaXNFbXB0eSgpCisgICAgICAgIHx8IHRhcmdldEhvc3QgPT0gbWFpbkZyYW1l
SG9zdAorICAgICAgICB8fCAoaXNSZWRpcmVjdCAmJiB0YXJnZXRIb3N0ID09IHNvdXJjZVVSTC5o
b3N0KCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIHRhcmdldFByaW1hcnlEb21haW4g
PSBwcmltYXJ5RG9tYWluKHRhcmdldFVSTCk7CiAgICAgYXV0byBtYWluRnJhbWVQcmltYXJ5RG9t
YWluID0gcHJpbWFyeURvbWFpbihtYWluRnJhbWVVUkwpOwogICAgIGF1dG8gc291cmNlUHJpbWFy
eURvbWFpbiA9IHByaW1hcnlEb21haW4oc291cmNlVVJMKTsKICAgICAKLSAgICBpZiAodGFyZ2V0
UHJpbWFyeURvbWFpbiA9PSBtYWluRnJhbWVQcmltYXJ5RG9tYWluIHx8IHRhcmdldFByaW1hcnlE
b21haW4gPT0gc291cmNlUHJpbWFyeURvbWFpbikKKyAgICBpZiAodGFyZ2V0UHJpbWFyeURvbWFp
biA9PSBtYWluRnJhbWVQcmltYXJ5RG9tYWluIHx8IChpc1JlZGlyZWN0ICYmIHRhcmdldFByaW1h
cnlEb21haW4gPT0gc291cmNlUHJpbWFyeURvbWFpbikpCiAgICAgICAgIHJldHVybjsKIAogICAg
IGF1dG8mIHRhcmdldFN0YXRpc3RpY3MgPSBtX3N0b3JlLT5lbnN1cmVSZXNvdXJjZVN0YXRpc3Rp
Y3NGb3JQcmltYXJ5RG9tYWluKHRhcmdldFByaW1hcnlEb21haW4pOwpAQCAtMjEwLDIwICsyMjAs
NTkgQEAgdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nU3VicmVzb3VyYwogICAgIAogICAg
IG1fc3RvcmUtPmZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOwogfQorCit2b2lkIFJlc291
cmNlTG9hZE9ic2VydmVyOjpsb2dXZWJTb2NrZXRMb2FkaW5nKGNvbnN0IEZyYW1lKiBmcmFtZSwg
Y29uc3QgVVJMJiB0YXJnZXRVUkwpCit7CisgICAgYm9vbCB1c2VzRXBoZW1lcmFsU2Vzc2lvbiA9
IGZhbHNlOworICAgIGlmIChmcmFtZSAmJiBmcmFtZS0+cGFnZSgpICYmIGZyYW1lLT5wYWdlKCkt
PnVzZXNFcGhlbWVyYWxTZXNzaW9uKCkpCisgICAgICAgIHVzZXNFcGhlbWVyYWxTZXNzaW9uID0g
dHJ1ZTsKKyAgICBpZiAoIXNob3VsZExvZyh1c2VzRXBoZW1lcmFsU2Vzc2lvbiwgbV9zdG9yZSkp
CisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IFVSTCYgbWFpbkZyYW1lVVJMID0gZnJhbWUg
PyBmcmFtZS0+bWFpbkZyYW1lKCkuZG9jdW1lbnQoKS0+dXJsKCkgOiBVUkwoKTsKKworICAgIGF1
dG8gdGFyZ2V0SG9zdCA9IHRhcmdldFVSTC5ob3N0KCk7CisgICAgYXV0byBtYWluRnJhbWVIb3N0
ID0gbWFpbkZyYW1lVVJMLmhvc3QoKTsKKyAgICAKKyAgICBpZiAodGFyZ2V0SG9zdC5pc0VtcHR5
KCkKKyAgICAgICAgfHwgbWFpbkZyYW1lSG9zdC5pc0VtcHR5KCkKKyAgICAgICAgfHwgdGFyZ2V0
SG9zdCA9PSBtYWluRnJhbWVIb3N0KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYXV0byB0
YXJnZXRQcmltYXJ5RG9tYWluID0gcHJpbWFyeURvbWFpbih0YXJnZXRVUkwpOworICAgIGF1dG8g
bWFpbkZyYW1lUHJpbWFyeURvbWFpbiA9IHByaW1hcnlEb21haW4obWFpbkZyYW1lVVJMKTsKKyAg
ICAKKyAgICBpZiAodGFyZ2V0UHJpbWFyeURvbWFpbiA9PSBtYWluRnJhbWVQcmltYXJ5RG9tYWlu
KQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvJiB0YXJnZXRTdGF0aXN0aWNzID0gbV9zdG9y
ZS0+ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbih0YXJnZXRQcmltYXJ5
RG9tYWluKTsKKyAgICAKKyAgICBhdXRvIG1haW5GcmFtZU9yaWdpbiA9IFNlY3VyaXR5T3JpZ2lu
OjpjcmVhdGUobWFpbkZyYW1lVVJMKTsKKyAgICB0YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNl
VW5kZXJUb3BGcmFtZU9yaWdpbnMuYWRkKG1haW5GcmFtZVByaW1hcnlEb21haW4pOworICAgIAor
ICAgICsrdGFyZ2V0U3RhdGlzdGljcy5zdWJyZXNvdXJjZUhhc0JlZW5TdWJyZXNvdXJjZUNvdW50
OwogICAgIAorICAgIGF1dG8gdG90YWxWaXNpdGVkID0gc3RkOjptYXgobV9vcmlnaW5zVmlzaXRl
ZE1hcC5zaXplKCksIDFVKTsKKyAgICAKKyAgICB0YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNl
SGFzQmVlblN1YnJlc291cmNlQ291bnREaXZpZGVkQnlUb3RhbE51bWJlck9mT3JpZ2luc1Zpc2l0
ZWQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KHRhcmdldFN0YXRpc3RpY3Muc3VicmVzb3VyY2VIYXNC
ZWVuU3VicmVzb3VyY2VDb3VudCkgLyB0b3RhbFZpc2l0ZWQ7CisKKyAgICBtX3N0b3JlLT5maXJl
RGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKK30KKwogdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6bG9nVXNlckludGVyYWN0aW9uKGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBp
ZiAoIVNldHRpbmdzOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpKQorICAgIGJvb2wg
dXNlc0VwaGVtZXJhbFNlc3Npb24gPSBmYWxzZTsKKyAgICBpZiAoZG9jdW1lbnQucGFnZSgpICYm
IGRvY3VtZW50LnBhZ2UoKS0+dXNlc0VwaGVtZXJhbFNlc3Npb24oKSkKKyAgICAgICAgdXNlc0Vw
aGVtZXJhbFNlc3Npb24gPSB0cnVlOworICAgIGlmICghc2hvdWxkTG9nKHVzZXNFcGhlbWVyYWxT
ZXNzaW9uLCBtX3N0b3JlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFtX3N0b3JlKQot
ICAgICAgICByZXR1cm47CisgICAgYXV0byYgdXJsID0gZG9jdW1lbnQudXJsKCk7CiAKLSAgICBi
b29sIG5lZWRQcml2YWN5ID0gZG9jdW1lbnQucGFnZSgpID8gZG9jdW1lbnQucGFnZSgpLT51c2Vz
RXBoZW1lcmFsU2Vzc2lvbigpIDogZmFsc2U7Ci0gICAgaWYgKG5lZWRQcml2YWN5KQorICAgIGlm
ICh1cmwuaXNCbGFua1VSTCgpIHx8IHVybC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBtX3N0b3JlLT5lbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NG
b3JQcmltYXJ5RG9tYWluKHByaW1hcnlEb21haW4oZG9jdW1lbnQudXJsKCkpKTsKKyAgICBhdXRv
JiBzdGF0aXN0aWNzID0gbV9zdG9yZS0+ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFy
eURvbWFpbihwcmltYXJ5RG9tYWluKHVybCkpOwogICAgIHN0YXRpc3RpY3MuaGFkVXNlckludGVy
YWN0aW9uID0gdHJ1ZTsKICAgICBtX3N0b3JlLT5maXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIo
KTsKIH0KQEAgLTIzMSwxNiArMjgwLDI0IEBAIHZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6Omxv
Z1VzZXJJbnRlcmEKIFN0cmluZyBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6cHJpbWFyeURvbWFpbihj
b25zdCBVUkwmIHVybCkKIHsKICAgICBTdHJpbmcgaG9zdCA9IHVybC5ob3N0KCk7Ci0gICAgVmVj
dG9yPFN0cmluZz4gaG9zdFNwbGl0T25Eb3Q7Ci0gICAgCi0gICAgaG9zdC5zcGxpdCgnLicsIGZh
bHNlLCBob3N0U3BsaXRPbkRvdCk7Ci0KICAgICBTdHJpbmcgcHJpbWFyeURvbWFpbjsKLSAgICBp
ZiAoaG9zdC5pc051bGwoKSkKKyAgICBpZiAoaG9zdC5pc051bGwoKSB8fCBob3N0LmlzRW1wdHko
KSkKICAgICAgICAgcHJpbWFyeURvbWFpbiA9ICJudWxsT3JpZ2luIjsKKyNpZiBFTkFCTEUoUFVC
TElDX1NVRkZJWF9MSVNUKQorICAgIGVsc2UgeworICAgICAgICBwcmltYXJ5RG9tYWluID0gdG9w
UHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbihob3N0KTsKKyAgICAgICAgLy8gV2Ugd2lsbCBoYXZl
IGFuIGVtcHR5IHN0cmluZyBoZXJlIGlmIHRoZXJlIGlzIG5vIFRMRC4KKyAgICAgICAgLy8gVXNl
IHRoZSBob3N0IGluIHN1Y2ggY2FzZS4KKyAgICAgICAgaWYgKHByaW1hcnlEb21haW4uaXNFbXB0
eSgpKQorICAgICAgICAgICAgcHJpbWFyeURvbWFpbiA9IGhvc3Q7CisgICAgfQorI2Vsc2UKICAg
ICBlbHNlIGlmIChob3N0U3BsaXRPbkRvdC5zaXplKCkgPCAzKQogICAgICAgICBwcmltYXJ5RG9t
YWluID0gaG9zdDsKICAgICBlbHNlIHsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gaG9zdFNwbGl0
T25Eb3Q7CisgICAgICAgIGhvc3Quc3BsaXQoJy4nLCBmYWxzZSwgaG9zdFNwbGl0T25Eb3QpOwor
ICAgICAgICAKICAgICAgICAgLy8gU2tpcCBUTEQgYW5kIHRoZW4gdXAgdG8gdHdvIGRvbWFpbnMg
c21hbGxlciB0aGFuIDQgY2hhcmFjdGVycwogICAgICAgICBpbnQgcHJpbWFyeURvbWFpbkN1dE9m
ZkluZGV4ID0gaG9zdFNwbGl0T25Eb3Quc2l6ZSgpIC0gMjsKIApAQCAtMjY2LDYgKzMyMyw3IEBA
IFN0cmluZyBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6cHJpbWFyeURvbWEKICAgICAgICAgICAgIHBy
aW1hcnlEb21haW4gPSBidWlsZGVyLnRvU3RyaW5nKCk7CiAgICAgICAgIH0KICAgICB9CisjZW5k
aWYKIAogICAgIHJldHVybiBwcmltYXJ5RG9tYWluOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
bG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmgJKHJldmlzaW9uIDIwNjY0MikKKysrIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Nyw2ICs0Nyw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGxvZ0ZyYW1lTmF2aWdh
dGlvbihjb25zdCBGcmFtZSYgZnJhbWUsIGNvbnN0IEZyYW1lJiB0b3BGcmFtZSwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiBuZXdSZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVj
dFJlc3BvbnNlKTsKICAgICB2b2lkIGxvZ1N1YnJlc291cmNlTG9hZGluZyhjb25zdCBGcmFtZSos
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYgbmV3UmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYgcmVkaXJlY3RSZXNwb25zZSk7CisgICAgdm9pZCBsb2dXZWJTb2NrZXRMb2FkaW5nKGNvbnN0
IEZyYW1lKiwgY29uc3QgVVJMJik7CiAKICAgICB2b2lkIGxvZ1VzZXJJbnRlcmFjdGlvbihjb25z
dCBEb2N1bWVudCYpOwogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9h
ZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJKHJldmlzaW9uIDIwNjY0MikKKysr
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTQsNCArMTU0LDE0IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpwcm9jZXMKICAgICBmb3IgKGF1dG8mIHJlc291cmNlU3RhdGlzdGljIDogbV9y
ZXNvdXJjZVN0YXRpc3RpY3NNYXAudmFsdWVzKCkpCiAgICAgICAgIHByb2Nlc3NGdW5jdGlvbihy
ZXNvdXJjZVN0YXRpc3RpYyk7CiB9CisKK1ZlY3RvcjxTdHJpbmc+IFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6Z2V0UHJldmFsZW50UmVzb3VyY2VEb21haW5zV2l0aG91dFVzZXJJbnRlcmFj
dGlvbigpCit7CisgICAgVmVjdG9yPFN0cmluZz4gcHJldmFsZW50UmVzb3VyY2VzOworICAgIGZv
ciAoYXV0byYgcmVzb3VyY2VTdGF0aXN0aWMgOiBtX3Jlc291cmNlU3RhdGlzdGljc01hcC52YWx1
ZXMoKSkgeworICAgICAgICBpZiAocmVzb3VyY2VTdGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJj
ZSAmJiAhcmVzb3VyY2VTdGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uKQorICAgICAgICAgICAg
cHJldmFsZW50UmVzb3VyY2VzLmFwcGVuZChyZXNvdXJjZVN0YXRpc3RpYy5oaWdoTGV2ZWxEb21h
aW4pOworICAgIH0KKyAgICByZXR1cm4gcHJldmFsZW50UmVzb3VyY2VzOworfQogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuaAkocmV2aXNpb24gMjA2NjQyKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2Myw4IEBAIHB1
YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaGFzRW5vdWdoRGF0YUZvclN0YXRpc3Rp
Y3NQcm9jZXNzaW5nKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwcm9jZXNzU3RhdGlzdGlj
cyhzdGQ6OmZ1bmN0aW9uPHZvaWQoUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpPiYmKTsKKworICAg
IFdFQkNPUkVfRVhQT1JUIFZlY3RvcjxTdHJpbmc+IGdldFByZXZhbGVudFJlc291cmNlRG9tYWlu
c1dpdGhvdXRVc2VySW50ZXJhY3Rpb24oKTsKIHByaXZhdGU6CiAgICAgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlKCkgPSBkZWZhdWx0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
U3VicmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9TdWJyZXNvdXJjZUxvYWRlci5jcHAJKHJldmlzaW9uIDIwNjY0MikKKysrIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Myw2
ICsxNzMsOSBAQCB2b2lkIFN1YnJlc291cmNlTG9hZGVyOjp3aWxsU2VuZFJlcXVlc3RJCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKKyAgICBpZiAobmV3UmVxdWVzdC5yZXF1ZXN0ZXIoKSAhPSBS
ZXNvdXJjZVJlcXVlc3RCYXNlOjpSZXF1ZXN0ZXI6Ok1haW4pCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWRPYnNlcnZlcigpLmxvZ1N1YnJlc291cmNlTG9hZGluZyhtX2ZyYW1l
LmdldCgpLCBuZXdSZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKTsKKwogICAgIEFTU0VSVCghbmV3
UmVxdWVzdC5pc051bGwoKSk7CiAgICAgaWYgKCFyZWRpcmVjdFJlc3BvbnNlLmlzTnVsbCgpKSB7
CiAgICAgICAgIGlmIChvcHRpb25zKCkucmVkaXJlY3QgIT0gRmV0Y2hPcHRpb25zOjpSZWRpcmVj
dDo6Rm9sbG93KSB7CkBAIC0yMjgsOCArMjMxLDYgQEAgdm9pZCBTdWJyZXNvdXJjZUxvYWRlcjo6
d2lsbFNlbmRSZXF1ZXN0SQogICAgIFJlc291cmNlTG9hZGVyOjp3aWxsU2VuZFJlcXVlc3RJbnRl
cm5hbChuZXdSZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKTsKICAgICBpZiAobmV3UmVxdWVzdC5p
c051bGwoKSkKICAgICAgICAgY2FuY2VsKCk7Ci0KLSAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkT2JzZXJ2ZXIoKS5sb2dTdWJyZXNvdXJjZUxvYWRpbmcobV9mcmFtZS5nZXQoKSwgbmV3
UmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7CiB9CiAKIHZvaWQgU3VicmVzb3VyY2VMb2FkZXI6
OmRpZFNlbmREYXRhKHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcg
bG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDY2NDIp
CisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwz
MSBAQAorMjAxNi0wOS0zMCAgSm9obiBXaWxhbmRlciAgPHdpbGFuZGVyQGFwcGxlLmNvbT4KKwor
ICAgICAgICBVcGRhdGUgUmVzb3VyY2UgTG9hZCBTdGF0aXN0aWNzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI4MTEKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6Omhhc1ByZXZhbGVudFJlc291cmNlQ2hhcmFjdGVyaXN0aWNzKToKKyAg
ICAgICAgICAgIFN3aXRjaGVkIHRvIHZlY3Rvci1iYXNlZCBjbGFzc2lmaWNhdGlvbi4KKyAgICAg
ICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGFzc2lmeVJlc291
cmNlKToKKyAgICAgICAgICAgIFNpbXBsaWZpZWQgbG9naWMgYW5kIG1vdmVkIHRoZSBzcGxpdCBi
ZXR3ZWVuIGhhcyBhbmQgaGFzCisgICAgICAgICAgICBubyB1c2VyIGludGVyYWN0aW9uIGludG8g
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyRGF0YVJlY29yZHMpOgorICAgICAgICAgICAgQWRk
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVz
b3VyY2VMb2FkU3RhdGlzdGljc1VwZGF0ZWQpOgorICAgICAgICAgICAgVXBkYXRlZCB0byBtYWtl
IHVzZSBvZiB0aGUgbmV3IGZ1bmN0aW9ucy4KKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpwZXJzaXN0ZW50U3RvcmFnZVBhdGgpOgorICAgICAgICAgICAg
UmVtb3ZlZCBzdHJheSB3aGl0ZXNwYWNlLgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OndyaXRlRW5jb2RlclRvRGlzayk6CisgICAgICAgICAgICBSZW1v
dmVkIHN0cmF5IHdoaXRlc3BhY2UuCisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6Y3JlYXRlRGVjb2RlckZyb21EaXNrKToKKyAgICAgICAgICAgIFJlbW92
ZWQgc3RyYXkgd2hpdGVzcGFjZS4KKyAgICAgICAgKFdlYktpdDo6aGFzUHJldmFsZW50UmVzb3Vy
Y2VDaGFyYWN0ZXJpc3RpY3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpjbGFzc2lmeVBy
ZXZhbGVudFJlc291cmNlcyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOgorICAgICAgICAgICAgQWRkZWQgbWVtYmVyIHZhcmlh
YmxlcyBmb3IgY2xlYXJpbmcgb2YgZGF0YSByZWNvcmRzLgorCiAyMDE2LTA5LTI5ICBOYW4gV2Fu
ZyAgPG5fd2FuZ0BhcHBsZS5jb20+CiAKICAgICAgICAgQVg6IGlPUzogVGFwcGluZyA8aW5wdXQ+
IGluIFNhZmFyaSB6b29tcyBpbiBhIGJpdCB3aGVuIHBhZ2UgaGFzIG1heCBzY2FsZSA9IDEKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCShyZXZpc2lvbiAyMDY2NDIpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsMjQgKzI2LDI1IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgiCiAKKyNpbmNsdWRlICJBUElXZWJz
aXRlRGF0YVN0b3JlLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCiAjaW5jbHVk
ZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKICNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmVNZXNzYWdlcy5oIgorI2luY2x1ZGUgIldlYnNpdGVEYXRhRmV0Y2hPcHRpb24uaCIKKyNp
bmNsdWRlICJXZWJzaXRlRGF0YVR5cGUuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0tleWVkQ29kaW5n
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmg+CisjaW5jbHVk
ZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90aHJlYWRzL0JpbmFyeVNlbWFw
aG9yZS5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7
CiAKLS8vIFN1YiBmcmFtZSBjbGFzc2lmaWNhdGlvbiB0aHJlc2hvbGRzCi1zdGF0aWMgY29uc3Qg
dW5zaWduZWQgc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc1RocmVzaG9sZCA9IDM7Ci0gICAg
Ci0vLyBTdWJyZXNvdXJjZSBjbGFzc2lmaWNhdGlvbiB0aHJlc2hvbGRzCi1zdGF0aWMgY29uc3Qg
dW5zaWduZWQgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luc1RocmVzaG9sZCA9IDU7Ci1z
dGF0aWMgY29uc3QgdW5zaWduZWQgc3VicmVzb3VyY2VIYXNCZWVuUmVkaXJlY3RlZEZyb21Ub1Vu
aXF1ZURvbWFpbnNUaHJlc2hvbGQgPSAzOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHJlZGlyZWN0
ZWRUb090aGVyUHJldmFsZW50UmVzb3VyY2VPcmlnaW5zVGhyZXNob2xkID0gMjsKK3N0YXRpYyBj
b25zdCBkb3VibGUgbnVtYmVyT2ZTZWNvbmRzQmV0d2VlbkNsZWFyaW5nRGF0YVJlY29yZHMgPSA2
MDAuMDsKK3N0YXRpYyBjb25zdCBkb3VibGUgZmVhdHVyZVZlY3Rvckxlbmd0aFRocmVzaG9sZCA9
IDMuMDsKIAogUmVmPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4gV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpjcmVhdGUoY29uc3QgU3RyaW5nJiByZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGlyZWN0b3J5KQogewpAQCAtNTEsNyArNTIsNyBAQCBSZWY8V2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlPiBXZWJSCiB9CiAKIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKGNvbnN0IFN0cmluZyYgcmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RpcmVjdG9yeSkKLSAgICA6IG1fcmVzb3VyY2VTdGF0aXN0aWNzU3RvcmUo
V2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjcmVhdGUoKSkKKyAgICA6IG1f
cmVzb3VyY2VTdGF0aXN0aWNzU3RvcmUoUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjcmVh
dGUoKSkKICAgICAsIG1fc3RhdGlzdGljc1F1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUgUHJvY2VzcyBEYXRhIFF1ZXVlIikpCiAgICAgLCBtX3N0
b3JhZ2VQYXRoKHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpCiB7CkBAIC02MSwzNyAr
NjIsOTQgQEAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjp+V2ViUmVzbwogewogfQog
Ci1zdGF0aWMgaW5saW5lIGJvb2wgaGFzUHJldmFsZW50UmVzb3VyY2VDaGFyYWN0ZXJpc3RpY3Mo
Y29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0aWMpCitib29sIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzUHJldmFsZW50UmVzb3VyY2VDaGFyYWN0
ZXJpc3RpY3MoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0aWMp
CiB7Ci0gICAgcmV0dXJuIHJlc291cmNlU3RhdGlzdGljLnN1YmZyYW1lVW5kZXJUb3BGcmFtZU9y
aWdpbnMuc2l6ZSgpID4gc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc1RocmVzaG9sZAotICAg
ICAgICB8fCByZXNvdXJjZVN0YXRpc3RpYy5zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5z
LnNpemUoKSA+IHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnNUaHJlc2hvbGQKLSAgICAg
ICAgfHwgcmVzb3VyY2VTdGF0aXN0aWMuc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby5zaXpl
KCkgPiBzdWJyZXNvdXJjZUhhc0JlZW5SZWRpcmVjdGVkRnJvbVRvVW5pcXVlRG9tYWluc1RocmVz
aG9sZAotICAgICAgICB8fCByZXNvdXJjZVN0YXRpc3RpYy5yZWRpcmVjdGVkVG9PdGhlclByZXZh
bGVudFJlc291cmNlT3JpZ2lucy5zaXplKCkgPiByZWRpcmVjdGVkVG9PdGhlclByZXZhbGVudFJl
c291cmNlT3JpZ2luc1RocmVzaG9sZDsKKyAgICB1bnNpZ25lZCBmZWF0dXJlT25lID0gcmVzb3Vy
Y2VTdGF0aXN0aWMuc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lucy5zaXplKCk7CisgICAg
dW5zaWduZWQgZmVhdHVyZVR3byA9IHJlc291cmNlU3RhdGlzdGljLnN1YnJlc291cmNlVW5pcXVl
UmVkaXJlY3RzVG8uc2l6ZSgpOworICAgIHVuc2lnbmVkIGZlYXR1cmVUaHJlZSA9IHJlc291cmNl
U3RhdGlzdGljLnN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMuc2l6ZSgpOworICAgIAorICAg
IGlmICghZmVhdHVyZU9uZSAmJiAhZmVhdHVyZVR3byAmJiAhZmVhdHVyZVRocmVlKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoZmVhdHVyZU9uZSA+IGZlYXR1cmVWZWN0b3JMZW5n
dGhUaHJlc2hvbGQKKyAgICAgICAgfHwgZmVhdHVyZVR3byA+IGZlYXR1cmVWZWN0b3JMZW5ndGhU
aHJlc2hvbGQKKyAgICAgICAgfHwgZmVhdHVyZVRocmVlID4gZmVhdHVyZVZlY3Rvckxlbmd0aFRo
cmVzaG9sZCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBkb3VibGUgdmVjdG9yTGVuZ3Ro
ID0gMC4wOworICAgIHZlY3Rvckxlbmd0aCArPSBwb3coZmVhdHVyZU9uZSwgMik7CisgICAgdmVj
dG9yTGVuZ3RoICs9IHBvdyhmZWF0dXJlVHdvLCAyKTsKKyAgICB2ZWN0b3JMZW5ndGggKz0gcG93
KGZlYXR1cmVUaHJlZSwgMik7CisKKyAgICBBU1NFUlQodmVjdG9yTGVuZ3RoID4gMC4wKTsKKwor
ICAgIHJldHVybiBzcXJ0KHZlY3Rvckxlbmd0aCkgPiBmZWF0dXJlVmVjdG9yTGVuZ3RoVGhyZXNo
b2xkOwogfQogICAgIAotc3RhdGljIGlubGluZSB2b2lkIGNsYXNzaWZ5UHJldmFsZW50UmVzb3Vy
Y2VzKFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHJlc291cmNlU3RhdGlzdGljLCBWZWN0b3I8U3Ry
aW5nPiYgcHJldmFsZW50UmVzb3VyY2VzLCBWZWN0b3I8U3RyaW5nPiYgcHJldmFsZW50UmVzb3Vy
Y2VzV2l0aFVzZXJJbnRlcmFjdGlvbikKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpjbGFzc2lmeVJlc291cmNlKFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHJlc291cmNlU3Rh
dGlzdGljKQogewotICAgIGlmIChyZXNvdXJjZVN0YXRpc3RpYy5pc1ByZXZhbGVudFJlc291cmNl
IHx8IGhhc1ByZXZhbGVudFJlc291cmNlQ2hhcmFjdGVyaXN0aWNzKHJlc291cmNlU3RhdGlzdGlj
KSkgeworICAgIGlmICghcmVzb3VyY2VTdGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJjZSAmJiBo
YXNQcmV2YWxlbnRSZXNvdXJjZUNoYXJhY3RlcmlzdGljcyhyZXNvdXJjZVN0YXRpc3RpYykpIHsK
ICAgICAgICAgcmVzb3VyY2VTdGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJjZSA9IHRydWU7Ci0g
ICAgICAgIGlmIChyZXNvdXJjZVN0YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb24pCi0gICAgICAg
ICAgICBwcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uLmFwcGVuZChyZXNvdXJj
ZVN0YXRpc3RpYy5oaWdoTGV2ZWxEb21haW4pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBw
cmV2YWxlbnRSZXNvdXJjZXMuYXBwZW5kKHJlc291cmNlU3RhdGlzdGljLmhpZ2hMZXZlbERvbWFp
bik7CiAgICAgfQogfQogCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xl
YXJEYXRhUmVjb3JkcyhWZWN0b3I8U3RyaW5nPiBwcmV2YWxlbnRSZXNvdXJjZXMpCit7CisgICAg
aWYgKG1fZGF0YVN0b3JlQ2xlYXJQZW5kaW5nKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
ZG91YmxlIG5vdyA9IGN1cnJlbnRUaW1lKCk7CisgICAgaWYgKG1fbGFzdFRpbWVEYXRhUmVjb3Jk
c1dlcmVDbGVhcmVkID09IDAuMCkgeworICAgICAgICBtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJl
Q2xlYXJlZCA9IG5vdzsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChub3cgPCAo
bV9sYXN0VGltZURhdGFSZWNvcmRzV2VyZUNsZWFyZWQgKyBudW1iZXJPZlNlY29uZHNCZXR3ZWVu
Q2xlYXJpbmdEYXRhUmVjb3JkcykpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZGF0YVN0b3Jl
Q2xlYXJQZW5kaW5nID0gdHJ1ZTsKKyAgICBtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlQ2xlYXJl
ZCA9IG5vdzsKKworICAgIC8vIFN3aXRjaCB0byB0aGUgbWFpbiB0aHJlYWQgdG8gZ2V0IHRoZSBk
ZWZhdWx0IHdlYnNpdGUgZGF0YSBzdG9yZQorICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChb
cHJldmFsZW50UmVzb3VyY2VzLCB3ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUgPSB0aGlz
XSB7CisgICAgICAgIGF1dG8mIHdlYnNpdGVEYXRhU3RvcmUgPSBBUEk6OldlYnNpdGVEYXRhU3Rv
cmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+d2Vic2l0ZURhdGFTdG9yZSgpOworCisgICAgICAgIHdl
YnNpdGVEYXRhU3RvcmUuZmV0Y2hEYXRhKFdlYnNpdGVEYXRhVHlwZTo6Q29va2llcywgeyB9LCBb
cHJldmFsZW50UmVzb3VyY2VzLCB3ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmVdKGF1dG8g
d2Vic2l0ZURhdGFSZWNvcmRzKSB7CisgICAgICAgICAgICBWZWN0b3I8V2Vic2l0ZURhdGFSZWNv
cmQ+IGRhdGFSZWNvcmRzOworICAgICAgICAgICAgZm9yIChhdXRvJiB3ZWJzaXRlRGF0YVJlY29y
ZCA6IHdlYnNpdGVEYXRhUmVjb3JkcykgeworICAgICAgICAgICAgICAgIGZvciAoYXV0byYgcHJl
dmFsZW50UmVzb3VyY2UgOiBwcmV2YWxlbnRSZXNvdXJjZXMpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHdlYnNpdGVEYXRhUmVjb3JkLmRpc3BsYXlOYW1lID09IHByZXZhbGVudFJlc291cmNl
IHx8IHdlYnNpdGVEYXRhUmVjb3JkLmRpc3BsYXlOYW1lLmVuZHNXaXRoKCIuIiArIHByZXZhbGVu
dFJlc291cmNlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFSZWNvcmRzLmFwcGVuZCh3
ZWJzaXRlRGF0YVJlY29yZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoIWRhdGFSZWNvcmRzLnNpemUoKSkgeworICAgICAgICAgICAgICAgIHdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS0+bV9kYXRhU3RvcmVDbGVhclBlbmRpbmcgPSBm
YWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGF1dG8mIHdlYnNpdGVEYXRhU3RvcmUgPSBBUEk6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1
bHREYXRhU3RvcmUoKS0+d2Vic2l0ZURhdGFTdG9yZSgpOworICAgICAgICAgICAgd2Vic2l0ZURh
dGFTdG9yZS5yZW1vdmVEYXRhKFdlYnNpdGVEYXRhVHlwZTo6Q29va2llcywgeyBXVEZNb3ZlKGRh
dGFSZWNvcmRzKSB9LCBbd2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlXSB7CisgICAgICAg
ICAgICAgICAgd2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLT5tX2RhdGFTdG9yZUNsZWFy
UGVuZGluZyA9IGZhbHNlOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0pOwor
fQorCiB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1VwZGF0ZWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3M+JiBvcmlnaW5zKQogewogICAgIGNvcmVTdG9yZSgpLm1lcmdlU3RhdGlzdGljcyhvcmlnaW5z
KTsKIAotICAgIFZlY3RvcjxTdHJpbmc+IHByZXZhbGVudFJlc291cmNlcywgcHJldmFsZW50UmVz
b3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbjsKICAgICBpZiAoY29yZVN0b3JlKCkuaGFzRW5vdWdo
RGF0YUZvclN0YXRpc3RpY3NQcm9jZXNzaW5nKCkpIHsKLSAgICAgICAgY29yZVN0b3JlKCkucHJv
Y2Vzc1N0YXRpc3RpY3MoW3RoaXMsICZwcmV2YWxlbnRSZXNvdXJjZXMsICZwcmV2YWxlbnRSZXNv
dXJjZXNXaXRoVXNlckludGVyYWN0aW9uXSAoUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgcmVzb3Vy
Y2VTdGF0aXN0aWMpIHsKLSAgICAgICAgICAgIGNsYXNzaWZ5UHJldmFsZW50UmVzb3VyY2VzKHJl
c291cmNlU3RhdGlzdGljLCBwcmV2YWxlbnRSZXNvdXJjZXMsIHByZXZhbGVudFJlc291cmNlc1dp
dGhVc2VySW50ZXJhY3Rpb24pOworICAgICAgICBjb3JlU3RvcmUoKS5wcm9jZXNzU3RhdGlzdGlj
cyhbd2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlID0gdGhpc10gKFJlc291cmNlTG9hZFN0
YXRpc3RpY3MmIHJlc291cmNlU3RhdGlzdGljKSB7CisgICAgICAgICAgICBWZWN0b3I8U3RyaW5n
PiBwcmV2YWxlbnRSZXNvdXJjZXM7CisgICAgICAgICAgICB3ZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUtPmNsYXNzaWZ5UmVzb3VyY2UocmVzb3VyY2VTdGF0aXN0aWMpOworICAgICAgICAg
ICAgcHJldmFsZW50UmVzb3VyY2VzID0gd2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLT5j
b3JlU3RvcmUoKS5nZXRQcmV2YWxlbnRSZXNvdXJjZURvbWFpbnNXaXRob3V0VXNlckludGVyYWN0
aW9uKCk7CisgICAgICAgICAgICBpZiAocHJldmFsZW50UmVzb3VyY2VzLnNpemUoKSA+IDApCisg
ICAgICAgICAgICAgICAgd2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLT5jbGVhckRhdGFS
ZWNvcmRzKHByZXZhbGVudFJlc291cmNlcyk7CiAgICAgICAgIH0pOwogICAgIH0KIAotICAgIC8v
IEZJWE1FOiBOb3RpZnkgaW5kaXZpZHVhbCBXZWJQcm9jZXNzZXMgb2YgcHJldmFsZW50IGRvbWFp
bnMgdXNpbmcgdGhlIHR3byB2ZWN0b3JzIHBvcHVsYXRlZCBieSB0aGUgY2xhc3NpZmllci4gPHJk
YXI6Ly9wcm9ibGVtLzI0NzAzMDk5PgogICAgIGF1dG8gZW5jb2RlciA9IGNvcmVTdG9yZSgpLmNy
ZWF0ZUVuY29kZXJGcm9tRGF0YSgpOwogICAgIAogICAgIHdyaXRlRW5jb2RlclRvRGlzaygqZW5j
b2Rlci5nZXQoKSwgImZ1bGxfYnJvd3Npbmdfc2Vzc2lvbiIpOwpAQCAtMTUyLDcgKzIxMCw3IEBA
IFN0cmluZyBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnAKIHsKICAgICBpZiAobV9z
dG9yYWdlUGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAg
IAorCiAgICAgLy8gVE9ETyBEZWNpZGUgd2hhdCB0byBjYWxsIHRoaXMgZmlsZQogICAgIHJldHVy
biBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9zdG9yYWdlUGF0aCwgbGFiZWwgKyAiX3Jlc291
cmNlTG9nLnBsaXN0Iik7CiB9CkBAIC0xNjIsMjEgKzIyMCwyMSBAQCB2b2lkIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6d3JpCiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gcmF3RGF0
YSA9IGVuY29kZXIuZmluaXNoRW5jb2RpbmcoKTsKICAgICBpZiAoIXJhd0RhdGEpCiAgICAgICAg
IHJldHVybjsKLSAgICAKKwogICAgIFN0cmluZyByZXNvdXJjZUxvZyA9IHBlcnNpc3RlbnRTdG9y
YWdlUGF0aChsYWJlbCk7CiAgICAgaWYgKHJlc291cmNlTG9nLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwotICAgIAorCiAgICAgaWYgKCFtX3N0b3JhZ2VQYXRoLmlzRW1wdHkoKSkKICAgICAg
ICAgbWFrZUFsbERpcmVjdG9yaWVzKG1fc3RvcmFnZVBhdGgpOwotICAgIAorCiAgICAgYXV0byBo
YW5kbGUgPSBvcGVuRmlsZShyZXNvdXJjZUxvZywgT3BlbkZvcldyaXRlKTsKICAgICBpZiAoIWhh
bmRsZSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGludDY0X3Qgd3JpdHRlbkJ5dGVzID0g
d3JpdGVUb0ZpbGUoaGFuZGxlLCByYXdEYXRhLT5kYXRhKCksIHJhd0RhdGEtPnNpemUoKSk7CiAg
ICAgY2xvc2VGaWxlKGhhbmRsZSk7Ci0gICAgCisKICAgICBpZiAod3JpdHRlbkJ5dGVzICE9IHN0
YXRpY19jYXN0PGludDY0X3Q+KHJhd0RhdGEtPnNpemUoKSkpCiAgICAgICAgIFdURkxvZ0Fsd2F5
cygiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOiBXZSBvbmx5IHdyb3RlICVkIG91dCBv
ZiAlZCBieXRlcyB0byBkaXNrIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHdyaXR0ZW5CeXRlcyks
IHJhd0RhdGEtPnNpemUoKSk7CiB9CkBAIC0xODYsMTEgKzI0NCwxMSBAQCBzdGQ6OnVuaXF1ZV9w
dHI8S2V5ZWREZWNvZGVyPiBXZWJSZXNvdXJjCiAgICAgU3RyaW5nIHJlc291cmNlTG9nID0gcGVy
c2lzdGVudFN0b3JhZ2VQYXRoKGxhYmVsKTsKICAgICBpZiAocmVzb3VyY2VMb2cuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKKwogICAgIFJlZlB0cjxTaGFyZWRCdWZm
ZXI+IHJhd0RhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZVdpdGhDb250ZW50c09mRmlsZShyZXNv
dXJjZUxvZyk7CiAgICAgaWYgKCFyYXdEYXRhKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICAKKwogICAgIHJldHVybiBLZXllZERlY29kZXI6OmRlY29kZXIocmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1aW50OF90Kj4ocmF3RGF0YS0+ZGF0YSgpKSwgcmF3RGF0YS0+c2l6ZSgpKTsKIH0KIApJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAkocmV2aXNpb24gMjA2NjQyKQorKysgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJBUElPYmplY3QuaCIKICNpbmNsdWRl
ICJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiV2Vic2l0ZURhdGFSZWNvcmQuaCIKICNpbmNsdWRl
IDxXZWJDb3JlL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oPgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTcxLDYgKzcyLDEw
IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlKGNvbnN0IFN0cmluZyYpOwogCisgICAgYm9vbCBoYXNQcmV2YWxlbnRSZXNvdXJj
ZUNoYXJhY3RlcmlzdGljcyhjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7
CisgICAgdm9pZCBjbGFzc2lmeVJlc291cmNlKFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MmKTsKKyAgICB2b2lkIGNsZWFyRGF0YVJlY29yZHMoVmVjdG9yPFN0cmluZz4gcHJldmFsZW50
UmVzb3VyY2VzKTsKKwogICAgIFN0cmluZyBwZXJzaXN0ZW50U3RvcmFnZVBhdGgoY29uc3QgU3Ry
aW5nJiBsYWJlbCkgY29uc3Q7CiAKICAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgpAQCAtODMs
NiArODgsOSBAQCBwcml2YXRlOgogICAgIFJlZjxXVEY6OldvcmtRdWV1ZT4gbV9zdGF0aXN0aWNz
UXVldWU7CiAgICAgU3RyaW5nIG1fc3RvcmFnZVBhdGg7CiAgICAgYm9vbCBtX3Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NFbmFibGVkIHsgZmFsc2UgfTsKKworICAgIGRvdWJsZSBtX2xhc3RUaW1lRGF0
YVJlY29yZHNXZXJlQ2xlYXJlZCB7IDAuMCB9OworICAgIGJvb2wgbV9kYXRhU3RvcmVDbGVhclBl
bmRpbmcgeyBmYWxzZSB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBUb29s
cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDY2
NzEpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAor
MjAxNi0wOS0zMCAgSm9obiBXaWxhbmRlciAgPHdpbGFuZGVyQGFwcGxlLmNvbT4KKworICAgICAg
ICBVcGRhdGUgUmVzb3VyY2UgTG9hZCBTdGF0aXN0aWNzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI4MTEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvbWFjL1B1Ymxp
Y1N1ZmZpeC5tbToKKyAgICAgICAgICAgIENoYW5nZSBmcm9tIFVTRShQVUJMSUNfU1VGRklYX0xJ
U1QpIHRvIEVOQUJMRShQVUJMSUNfU1VGRklYX0xJU1QpCisKIDIwMTYtMDktMzAgIEFsZXggQ2hy
aXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBGaXggb2ZmLWJ5
LW9uZSBlcnJvciBpbiBVUkxQYXJzZXI6OnBhcnNlSVB2NEhvc3QKSW5kZXg6IFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvbWFjL1B1YmxpY1N1ZmZpeC5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL21hYy9QdWJsaWNTdWZmaXgubW0JKHJldmlzaW9uIDIwNjY0MikK
KysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvbWFjL1B1YmxpY1N1ZmZpeC5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNpZiBV
U0UoUFVCTElDX1NVRkZJWF9MSVNUKQorI2lmIEVOQUJMRShQVUJMSUNfU1VGRklYX0xJU1QpCiAK
ICNpbmNsdWRlICJXVEZTdHJpbmdVdGlsaXRpZXMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1B1Ymxp
Y1N1ZmZpeC5oPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290541</attachid>
            <date>2016-10-03 17:34:02 -0700</date>
            <delta_ts>2016-10-03 18:09:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162811-20161003173052.patch</filename>
            <type>text/plain</type>
            <size>28699</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNjc1MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBACisyMDE2LTEwLTAzICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFVwZGF0ZSBSZXNvdXJjZSBM
b2FkIFN0YXRpc3RpY3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2MjgxMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhlIGNvdW50aW5nIGlzIGJhc2VkIG9uIHRvcCBwcml2YXRl
bHkgb3duZWQgZG9tYWlucworICAgICAgICB3aGljaCBjdXJyZW50bHkgaXMgbm90IHN1cHBvcnRl
ZCBieSBsYXlvdXQgdGVzdHMgbm9yIEFQSSB0ZXN0cy4KKworICAgICAgICAqIE1vZHVsZXMvd2Vi
c29ja2V0cy9XZWJTb2NrZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Ojpjb25u
ZWN0KToKKyAgICAgICAgICAgIE5vdyBjYXB0dXJlcyBzdGF0aXN0aWNzIGZvciB3ZWIgc29ja2V0
cyB0b28uCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgKiBs
b2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwOgorICAgICAgICAgICAgTm93IGNhcHR1cmVz
IHN0YXRpc3RpY3MgZm9yIHN5bmNocm9ub3VzIFhIUiB0b28uCisgICAgICAgIChXZWJDb3JlOjpp
czN4eFJlZGlyZWN0KToKKyAgICAgICAgICAgIENvbnZlbmllbmNlIGZ1bmN0aW9uLgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNob3VsZExvZyk6CisgICAgICAgICAg
ICBDb252ZW5pZW5jZSBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9i
c2VydmVyOjpsb2dGcmFtZU5hdmlnYXRpb24pOgorICAgICAgICAgICAgVXBkYXRlZCB0byBtYWtl
IHVzZSBvZiBuZXcgY29udmVuaWVuY2UgZnVuY3Rpb25zLgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1N1YnJlc291cmNlTG9hZGluZyk6CisgICAgICAgICAgICBV
cGRhdGVkIHRvIG1ha2UgdXNlIG9mIG5ldyBjb252ZW5pZW5jZSBmdW5jdGlvbnMuCisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nV2ViU29ja2V0TG9hZGluZyk6Cisg
ICAgICAgICAgICBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVy
Ojpsb2dVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAgICAgVXBkYXRlZCB0byBtYWtlIHVzZSBv
ZiBuZXcgY29udmVuaWVuY2UgZnVuY3Rpb25zLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnByaW1hcnlEb21haW4pOgorICAgICAgICAgICAgTm93IG1ha2VzIHVzZSBv
ZiB0aGUgUHVibGljIFN1ZmZpeCBsaXN0LgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRP
YnNlcnZlci5oOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcmV2
YWxlbnRSZXNvdXJjZURvbWFpbnNXaXRob3V0VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgICAg
IENvbnZlbmllbmNlIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpwcm9jZXNzU3RhdGlzdGljcyk6IERlbGV0ZWQuCisgICAgICAgICogbG9h
ZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOgorICAgICAgICAqIGxvYWRlci9TdWJy
ZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcjo6
d2lsbFNlbmRSZXF1ZXN0SW50ZXJuYWwpOgorICAgICAgICAgICAgTW92ZWQgbG9nZ2luZyBjYWxs
IGhpZ2hlciB1cCBhbmQgYWRkZWQgYSBjaGVjayBmb3Igd2hldGhlciB3ZQorICAgICAgICAgICAg
YXJlIGxvYWRpbmcgdGhlIG1haW4gcmVzb3VyY2UuIFRoZSByZWFzb24gZm9yIG1vdmluZyBpdCB1
cCBpcworICAgICAgICAgICAgdG8gY2FwdHVyZSB0aGUgcmVxdWVzdCBiZWZvcmUgc29tZSBkYXRh
IG1heSBiZSBjbGVhcmVkIG91dCBpbgorICAgICAgICAgICAgcmVkaXJlY3QgaGFuZGxpbmcuIFdl
IGFsc28gd2FudCB0byBjYXB0dXJlIGZhaWxlZCBDT1JTIHJlcXVlc3RzCisgICAgICAgICAgICBz
aW5jZSB0aGV5IGFyZSBzZW50IGFuZCB0aGVuIGNhbmNlbGxlZCBvbiB0aGUgd2F5IGJhY2suCisK
IDIwMTYtMTAtMDMgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAg
IFJlbW92ZSBEb2N1bWVudDo6ZWxlbWVudFNoZWV0KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwCShyZXZpc2lvbiAyMDY3NTMpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAi
TG9nZ2luZy5oIgogI2luY2x1ZGUgIk1lc3NhZ2VFdmVudC5oIgorI2luY2x1ZGUgIlJlc291cmNl
TG9hZE9ic2VydmVyLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUg
IlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgpA
QCAtMzE4LDcgKzMxOSw4IEBAIHZvaWQgV2ViU29ja2V0Ojpjb25uZWN0KGNvbnN0IFN0cmluZyYg
dXIKICAgICAgICAgICAgIH0pOwogI2VuZGlmCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkT2JzZXJ2ZXIoKS5sb2dXZWJTb2NrZXRMb2FkaW5nKGRvY3VtZW50LmZyYW1lKCksIG1fdXJs
KTsKICAgICB9CiAKICAgICBTdHJpbmcgcHJvdG9jb2xTdHJpbmc7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDIwNjc1MykKKysrIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDYgKzk3LDcg
QEAKICNpbmNsdWRlICJQcm9ncmVzc1RyYWNrZXIuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRs
ZS5oIgogI2luY2x1ZGUgIlJlc291cmNlTG9hZEluZm8uaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxv
YWRPYnNlcnZlci5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgogI2luY2x1ZGUgIlNW
R0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTG9jYXRhYmxlLmgiCkBAIC0yNzc0LDYgKzI3NzUs
NyBAQCB1bnNpZ25lZCBsb25nIEZyYW1lTG9hZGVyOjpsb2FkUmVzb3VyY2VTCiAgICAgICAgICAg
ICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3koKS0+bG9hZFJlc291cmNlU3lu
Y2hyb25vdXNseShuZXR3b3JraW5nQ29udGV4dCgpLCBpZGVudGlmaWVyLCBuZXdSZXF1ZXN0LCBz
dG9yZWRDcmVkZW50aWFscywgY2xpZW50Q3JlZGVudGlhbFBvbGljeSwgZXJyb3IsIHJlc3BvbnNl
LCBidWZmZXIpOwogICAgICAgICAgICAgZGF0YSA9IFNoYXJlZEJ1ZmZlcjo6YWRvcHRWZWN0b3Io
YnVmZmVyKTsKICAgICAgICAgICAgIGRvY3VtZW50TG9hZGVyKCktPmFwcGxpY2F0aW9uQ2FjaGVI
b3N0KCktPm1heWJlTG9hZEZhbGxiYWNrU3luY2hyb25vdXNseShuZXdSZXF1ZXN0LCBlcnJvciwg
cmVzcG9uc2UsIGRhdGEpOworICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZE9ic2VydmVyKCkubG9nU3VicmVzb3VyY2VMb2FkaW5nKCZtX2ZyYW1lLCBuZXdSZXF1ZXN0LCBy
ZXNwb25zZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgbm90aWZpZXIoKS5zZW5kUmVtYWluaW5n
RGVsZWdhdGVNZXNzYWdlcyhtX2RvY3VtZW50TG9hZGVyLmdldCgpLCBpZGVudGlmaWVyLCByZXF1
ZXN0LCByZXNwb25zZSwgZGF0YSA/IGRhdGEtPmRhdGEoKSA6IG51bGxwdHIsIGRhdGEgPyBkYXRh
LT5zaXplKCkgOiAwLCAtMSwgZXJyb3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jl
c291cmNlTG9hZE9ic2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCShyZXZpc2lvbiAyMDY3NTMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmgiCiAjaW5j
bHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyYXRlZ2llcy5oIgorI2luY2x1ZGUg
IlB1YmxpY1N1ZmZpeC5oIgogI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3MuaCIKICNp
bmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIKICNpbmNsdWRlICJSZXNvdXJj
ZVJlcXVlc3QuaCIKQEAgLTU3LDIzICs1OCwzMSBAQCB2b2lkIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzZXRTdGF0aXN0aWNzCiAgICAgbV9zdG9yZSA9IFdURk1vdmUoc3RvcmUpOwogfQogCi12b2lk
IFJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgRnJhbWUmIGZy
YW1lLCBjb25zdCBGcmFtZSYgdG9wRnJhbWUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgbmV3UmVx
dWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKK3N0YXRpYyBp
bmxpbmUgYm9vbCBpczN4eFJlZGlyZWN0KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNl
KQogewotICAgIGlmICghU2V0dGluZ3M6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKKyAgICByZXR1cm4gcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSAv
IDEwMCA9PSAzOworfQogCi0gICAgaWYgKCFtX3N0b3JlKQotICAgICAgICByZXR1cm47Citib29s
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaG91bGRMb2coUGFnZSogcGFnZSkKK3sKKyAgICAvLyBF
cnIgb24gdGhlIHNhZmUgc2lkZSB1bnRpbCB3ZSBoYXZlIHNvcnRlZCBvdXQgd2hhdCB0byBkbyBp
biB3b3JrZXIgY29udGV4dHMKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gU2V0dGluZ3M6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCkKKyAg
ICAgICAgJiYgIXBhZ2UtPnVzZXNFcGhlbWVyYWxTZXNzaW9uKCkKKyAgICAgICAgJiYgbV9zdG9y
ZTsKK30KIAordm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNv
bnN0IEZyYW1lJiBmcmFtZSwgY29uc3QgRnJhbWUmIHRvcEZyYW1lLCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIG5ld1JlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9u
c2UpCit7CiAgICAgQVNTRVJUKGZyYW1lLmRvY3VtZW50KCkpOwogICAgIEFTU0VSVCh0b3BGcmFt
ZS5kb2N1bWVudCgpKTsKICAgICBBU1NFUlQodG9wRnJhbWUucGFnZSgpKTsKLQotICAgIGJvb2wg
bmVlZFByaXZhY3kgPSB0b3BGcmFtZS5wYWdlKCkgPyB0b3BGcmFtZS5wYWdlKCktPnVzZXNFcGhl
bWVyYWxTZXNzaW9uKCkgOiBmYWxzZTsKLSAgICBpZiAobmVlZFByaXZhY3kpCisgICAgCisgICAg
aWYgKCFzaG91bGRMb2codG9wRnJhbWUucGFnZSgpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
Ym9vbCBpc1JlZGlyZWN0ID0gIXJlZGlyZWN0UmVzcG9uc2UuaXNOdWxsKCk7CisgICAgYm9vbCBp
c1JlZGlyZWN0ID0gaXMzeHhSZWRpcmVjdChyZWRpcmVjdFJlc3BvbnNlKTsKICAgICBib29sIGlz
TWFpbkZyYW1lID0gZnJhbWUuaXNNYWluRnJhbWUoKTsKICAgICBjb25zdCBVUkwmIHNvdXJjZVVS
TCA9IGZyYW1lLmRvY3VtZW50KCktPnVybCgpOwogICAgIGNvbnN0IFVSTCYgdGFyZ2V0VVJMID0g
bmV3UmVxdWVzdC51cmwoKTsKQEAgLTE0OCwxNyArMTU3LDEyIEBAIHZvaWQgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OmxvZ0ZyYW1lTmF2aWcKICAgICAKIHZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OmxvZ1N1YnJlc291cmNlTG9hZGluZyhjb25zdCBGcmFtZSogZnJhbWUsIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgbmV3UmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNw
b25zZSkKIHsKLSAgICBpZiAoIVNldHRpbmdzOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxl
ZCgpKQotICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKGZyYW1lLT5wYWdlKCkpOwogCi0gICAg
aWYgKCFtX3N0b3JlKQorICAgIGlmICghc2hvdWxkTG9nKGZyYW1lLT5wYWdlKCkpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBib29sIG5lZWRQcml2YWN5ID0gKGZyYW1lICYmIGZyYW1lLT5wYWdl
KCkpID8gZnJhbWUtPnBhZ2UoKS0+dXNlc0VwaGVtZXJhbFNlc3Npb24oKSA6IGZhbHNlOwotICAg
IGlmIChuZWVkUHJpdmFjeSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGJvb2wgaXNSZWRp
cmVjdCA9ICFyZWRpcmVjdFJlc3BvbnNlLmlzTnVsbCgpOworICAgIGJvb2wgaXNSZWRpcmVjdCA9
IGlzM3h4UmVkaXJlY3QocmVkaXJlY3RSZXNwb25zZSk7CiAgICAgY29uc3QgVVJMJiBzb3VyY2VV
UkwgPSByZWRpcmVjdFJlc3BvbnNlLnVybCgpOwogICAgIGNvbnN0IFVSTCYgdGFyZ2V0VVJMID0g
bmV3UmVxdWVzdC51cmwoKTsKICAgICBjb25zdCBVUkwmIG1haW5GcmFtZVVSTCA9IGZyYW1lID8g
ZnJhbWUtPm1haW5GcmFtZSgpLmRvY3VtZW50KCktPnVybCgpIDogVVJMKCk7CkBAIC0xNjYsMTQg
KzE3MCwxNyBAQCB2b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dTdWJyZXNvdXJjCiAgICAg
YXV0byB0YXJnZXRIb3N0ID0gdGFyZ2V0VVJMLmhvc3QoKTsKICAgICBhdXRvIG1haW5GcmFtZUhv
c3QgPSBtYWluRnJhbWVVUkwuaG9zdCgpOwogCi0gICAgaWYgKHRhcmdldEhvc3QuaXNFbXB0eSgp
IHx8IG1haW5GcmFtZUhvc3QuaXNFbXB0eSgpIHx8IHRhcmdldEhvc3QgPT0gbWFpbkZyYW1lSG9z
dCB8fCB0YXJnZXRIb3N0ID09IHNvdXJjZVVSTC5ob3N0KCkpCisgICAgaWYgKHRhcmdldEhvc3Qu
aXNFbXB0eSgpCisgICAgICAgIHx8IG1haW5GcmFtZUhvc3QuaXNFbXB0eSgpCisgICAgICAgIHx8
IHRhcmdldEhvc3QgPT0gbWFpbkZyYW1lSG9zdAorICAgICAgICB8fCAoaXNSZWRpcmVjdCAmJiB0
YXJnZXRIb3N0ID09IHNvdXJjZVVSTC5ob3N0KCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBh
dXRvIHRhcmdldFByaW1hcnlEb21haW4gPSBwcmltYXJ5RG9tYWluKHRhcmdldFVSTCk7CiAgICAg
YXV0byBtYWluRnJhbWVQcmltYXJ5RG9tYWluID0gcHJpbWFyeURvbWFpbihtYWluRnJhbWVVUkwp
OwogICAgIGF1dG8gc291cmNlUHJpbWFyeURvbWFpbiA9IHByaW1hcnlEb21haW4oc291cmNlVVJM
KTsKICAgICAKLSAgICBpZiAodGFyZ2V0UHJpbWFyeURvbWFpbiA9PSBtYWluRnJhbWVQcmltYXJ5
RG9tYWluIHx8IHRhcmdldFByaW1hcnlEb21haW4gPT0gc291cmNlUHJpbWFyeURvbWFpbikKKyAg
ICBpZiAodGFyZ2V0UHJpbWFyeURvbWFpbiA9PSBtYWluRnJhbWVQcmltYXJ5RG9tYWluIHx8IChp
c1JlZGlyZWN0ICYmIHRhcmdldFByaW1hcnlEb21haW4gPT0gc291cmNlUHJpbWFyeURvbWFpbikp
CiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8mIHRhcmdldFN0YXRpc3RpY3MgPSBtX3N0b3Jl
LT5lbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHRhcmdldFByaW1hcnlE
b21haW4pOwpAQCAtMjEwLDIwICsyMTcsNTcgQEAgdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
bG9nU3VicmVzb3VyYwogICAgIAogICAgIG1fc3RvcmUtPmZpcmVEYXRhTW9kaWZpY2F0aW9uSGFu
ZGxlcigpOwogfQorCit2b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dXZWJTb2NrZXRMb2Fk
aW5nKGNvbnN0IEZyYW1lKiBmcmFtZSwgY29uc3QgVVJMJiB0YXJnZXRVUkwpCit7CisgICAgQVNT
RVJUKGZyYW1lLT5wYWdlKCkpOworCisgICAgaWYgKCFzaG91bGRMb2coZnJhbWUtPnBhZ2UoKSkp
CisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IFVSTCYgbWFpbkZyYW1lVVJMID0gZnJhbWUg
PyBmcmFtZS0+bWFpbkZyYW1lKCkuZG9jdW1lbnQoKS0+dXJsKCkgOiBVUkwoKTsKKworICAgIGF1
dG8gdGFyZ2V0SG9zdCA9IHRhcmdldFVSTC5ob3N0KCk7CisgICAgYXV0byBtYWluRnJhbWVIb3N0
ID0gbWFpbkZyYW1lVVJMLmhvc3QoKTsKKyAgICAKKyAgICBpZiAodGFyZ2V0SG9zdC5pc0VtcHR5
KCkKKyAgICAgICAgfHwgbWFpbkZyYW1lSG9zdC5pc0VtcHR5KCkKKyAgICAgICAgfHwgdGFyZ2V0
SG9zdCA9PSBtYWluRnJhbWVIb3N0KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYXV0byB0
YXJnZXRQcmltYXJ5RG9tYWluID0gcHJpbWFyeURvbWFpbih0YXJnZXRVUkwpOworICAgIGF1dG8g
bWFpbkZyYW1lUHJpbWFyeURvbWFpbiA9IHByaW1hcnlEb21haW4obWFpbkZyYW1lVVJMKTsKKyAg
ICAKKyAgICBpZiAodGFyZ2V0UHJpbWFyeURvbWFpbiA9PSBtYWluRnJhbWVQcmltYXJ5RG9tYWlu
KQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvJiB0YXJnZXRTdGF0aXN0aWNzID0gbV9zdG9y
ZS0+ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbih0YXJnZXRQcmltYXJ5
RG9tYWluKTsKKyAgICAKKyAgICBhdXRvIG1haW5GcmFtZU9yaWdpbiA9IFNlY3VyaXR5T3JpZ2lu
OjpjcmVhdGUobWFpbkZyYW1lVVJMKTsKKyAgICB0YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNl
VW5kZXJUb3BGcmFtZU9yaWdpbnMuYWRkKG1haW5GcmFtZVByaW1hcnlEb21haW4pOworICAgIAor
ICAgICsrdGFyZ2V0U3RhdGlzdGljcy5zdWJyZXNvdXJjZUhhc0JlZW5TdWJyZXNvdXJjZUNvdW50
OworICAgIAorICAgIGF1dG8gdG90YWxWaXNpdGVkID0gc3RkOjptYXgobV9vcmlnaW5zVmlzaXRl
ZE1hcC5zaXplKCksIDFVKTsKICAgICAKKyAgICB0YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNl
SGFzQmVlblN1YnJlc291cmNlQ291bnREaXZpZGVkQnlUb3RhbE51bWJlck9mT3JpZ2luc1Zpc2l0
ZWQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KHRhcmdldFN0YXRpc3RpY3Muc3VicmVzb3VyY2VIYXNC
ZWVuU3VicmVzb3VyY2VDb3VudCkgLyB0b3RhbFZpc2l0ZWQ7CisKKyAgICBtX3N0b3JlLT5maXJl
RGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKK30KKwogdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6bG9nVXNlckludGVyYWN0aW9uKGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBp
ZiAoIVNldHRpbmdzOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpKQotICAgICAgICBy
ZXR1cm47CisgICAgQVNTRVJUKGRvY3VtZW50LnBhZ2UoKSk7CiAKLSAgICBpZiAoIW1fc3RvcmUp
CisgICAgaWYgKCFzaG91bGRMb2coZG9jdW1lbnQucGFnZSgpKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgYm9vbCBuZWVkUHJpdmFjeSA9IGRvY3VtZW50LnBhZ2UoKSA/IGRvY3VtZW50LnBhZ2Uo
KS0+dXNlc0VwaGVtZXJhbFNlc3Npb24oKSA6IGZhbHNlOwotICAgIGlmIChuZWVkUHJpdmFjeSkK
KyAgICBhdXRvJiB1cmwgPSBkb2N1bWVudC51cmwoKTsKKworICAgIGlmICh1cmwuaXNCbGFua1VS
TCgpIHx8IHVybC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8mIHN0YXRp
c3RpY3MgPSBtX3N0b3JlLT5lbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWlu
KHByaW1hcnlEb21haW4oZG9jdW1lbnQudXJsKCkpKTsKKyAgICBhdXRvJiBzdGF0aXN0aWNzID0g
bV9zdG9yZS0+ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihwcmltYXJ5
RG9tYWluKHVybCkpOwogICAgIHN0YXRpc3RpY3MuaGFkVXNlckludGVyYWN0aW9uID0gdHJ1ZTsK
ICAgICBtX3N0b3JlLT5maXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKIH0KQEAgLTIzMSwx
NiArMjc1LDI0IEBAIHZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1VzZXJJbnRlcmEKIFN0
cmluZyBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6cHJpbWFyeURvbWFpbihjb25zdCBVUkwmIHVybCkK
IHsKICAgICBTdHJpbmcgaG9zdCA9IHVybC5ob3N0KCk7Ci0gICAgVmVjdG9yPFN0cmluZz4gaG9z
dFNwbGl0T25Eb3Q7Ci0gICAgCi0gICAgaG9zdC5zcGxpdCgnLicsIGZhbHNlLCBob3N0U3BsaXRP
bkRvdCk7Ci0KICAgICBTdHJpbmcgcHJpbWFyeURvbWFpbjsKLSAgICBpZiAoaG9zdC5pc051bGwo
KSkKKyAgICBpZiAoaG9zdC5pc051bGwoKSB8fCBob3N0LmlzRW1wdHkoKSkKICAgICAgICAgcHJp
bWFyeURvbWFpbiA9ICJudWxsT3JpZ2luIjsKKyNpZiBFTkFCTEUoUFVCTElDX1NVRkZJWF9MSVNU
KQorICAgIGVsc2UgeworICAgICAgICBwcmltYXJ5RG9tYWluID0gdG9wUHJpdmF0ZWx5Q29udHJv
bGxlZERvbWFpbihob3N0KTsKKyAgICAgICAgLy8gV2Ugd2lsbCBoYXZlIGFuIGVtcHR5IHN0cmlu
ZyBoZXJlIGlmIHRoZXJlIGlzIG5vIFRMRC4KKyAgICAgICAgLy8gVXNlIHRoZSBob3N0IGluIHN1
Y2ggY2FzZS4KKyAgICAgICAgaWYgKHByaW1hcnlEb21haW4uaXNFbXB0eSgpKQorICAgICAgICAg
ICAgcHJpbWFyeURvbWFpbiA9IGhvc3Q7CisgICAgfQorI2Vsc2UKICAgICBlbHNlIGlmIChob3N0
U3BsaXRPbkRvdC5zaXplKCkgPCAzKQogICAgICAgICBwcmltYXJ5RG9tYWluID0gaG9zdDsKICAg
ICBlbHNlIHsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gaG9zdFNwbGl0T25Eb3Q7CisgICAgICAg
IGhvc3Quc3BsaXQoJy4nLCBmYWxzZSwgaG9zdFNwbGl0T25Eb3QpOworICAgICAgICAKICAgICAg
ICAgLy8gU2tpcCBUTEQgYW5kIHRoZW4gdXAgdG8gdHdvIGRvbWFpbnMgc21hbGxlciB0aGFuIDQg
Y2hhcmFjdGVycwogICAgICAgICBpbnQgcHJpbWFyeURvbWFpbkN1dE9mZkluZGV4ID0gaG9zdFNw
bGl0T25Eb3Quc2l6ZSgpIC0gMjsKIApAQCAtMjY2LDYgKzMxOCw3IEBAIFN0cmluZyBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6cHJpbWFyeURvbWEKICAgICAgICAgICAgIHByaW1hcnlEb21haW4gPSBi
dWlsZGVyLnRvU3RyaW5nKCk7CiAgICAgICAgIH0KICAgICB9CisjZW5kaWYKIAogICAgIHJldHVy
biBwcmltYXJ5RG9tYWluOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNl
TG9hZE9ic2VydmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291
cmNlTG9hZE9ic2VydmVyLmgJKHJldmlzaW9uIDIwNjc1MykKKysrIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBGcmFtZTsK
K2NsYXNzIFBhZ2U7CiBjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CiBjbGFzcyBSZXNvdXJjZVJlc3Bv
bnNlOwogY2xhc3MgVVJMOwpAQCAtNDcsNiArNDgsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9p
ZCBsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgRnJhbWUmIGZyYW1lLCBjb25zdCBGcmFtZSYgdG9w
RnJhbWUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgbmV3UmVxdWVzdCwgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSk7CiAgICAgdm9pZCBsb2dTdWJyZXNvdXJjZUxvYWRp
bmcoY29uc3QgRnJhbWUqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIG5ld1JlcXVlc3QsIGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpOworICAgIHZvaWQgbG9nV2ViU29j
a2V0TG9hZGluZyhjb25zdCBGcmFtZSosIGNvbnN0IFVSTCYpOwogCiAgICAgdm9pZCBsb2dVc2Vy
SW50ZXJhY3Rpb24oY29uc3QgRG9jdW1lbnQmKTsKICAgICAKQEAgLTU1LDYgKzU3LDcgQEAgcHVi
bGljOgogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzdGF0aXN0aWNzRm9yT3JpZ2luKGNvbnN0
IFN0cmluZyYpOwogCiBwcml2YXRlOgorICAgIGJvb2wgc2hvdWxkTG9nKFBhZ2UqKTsKICAgICBz
dGF0aWMgU3RyaW5nIHByaW1hcnlEb21haW4oY29uc3QgVVJMJik7CiAKICAgICBSZWZQdHI8UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiBtX3N0b3JlOwpJbmRleDogU291cmNlL1dlYkNvcmUv
bG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJKHJldmlz
aW9uIDIwNjc1MykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsNCArMTU0LDE0IEBAIHZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcm9jZXMKICAgICBmb3IgKGF1dG8mIHJlc291cmNl
U3RhdGlzdGljIDogbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAudmFsdWVzKCkpCiAgICAgICAgIHBy
b2Nlc3NGdW5jdGlvbihyZXNvdXJjZVN0YXRpc3RpYyk7CiB9CisKK1ZlY3RvcjxTdHJpbmc+IFJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJldmFsZW50UmVzb3VyY2VEb21haW5zV2l0aG91
dFVzZXJJbnRlcmFjdGlvbigpCit7CisgICAgVmVjdG9yPFN0cmluZz4gcHJldmFsZW50UmVzb3Vy
Y2VzOworICAgIGZvciAoYXV0byYgcmVzb3VyY2VTdGF0aXN0aWMgOiBtX3Jlc291cmNlU3RhdGlz
dGljc01hcC52YWx1ZXMoKSkgeworICAgICAgICBpZiAocmVzb3VyY2VTdGF0aXN0aWMuaXNQcmV2
YWxlbnRSZXNvdXJjZSAmJiAhcmVzb3VyY2VTdGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uKQor
ICAgICAgICAgICAgcHJldmFsZW50UmVzb3VyY2VzLmFwcGVuZChyZXNvdXJjZVN0YXRpc3RpYy5o
aWdoTGV2ZWxEb21haW4pOworICAgIH0KKyAgICByZXR1cm4gcHJldmFsZW50UmVzb3VyY2VzOwor
fQogfQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUuaAkocmV2aXNpb24gMjA2NzUzKQorKysgU291cmNlL1dlYkNvcmUvbG9h
ZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2
ICs2Myw4IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaGFzRW5vdWdoRGF0
YUZvclN0YXRpc3RpY3NQcm9jZXNzaW5nKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwcm9j
ZXNzU3RhdGlzdGljcyhzdGQ6OmZ1bmN0aW9uPHZvaWQoUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYp
PiYmKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIFZlY3RvcjxTdHJpbmc+IHByZXZhbGVudFJlc291
cmNlRG9tYWluc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24oKTsKIHByaXZhdGU6CiAgICAgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlKCkgPSBkZWZhdWx0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHAJKHJldmlzaW9uIDIwNjc1MykKKysrIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE3Myw2ICsxNzMsOSBAQCB2b2lkIFN1YnJlc291cmNlTG9hZGVyOjp3aWxsU2VuZFJlcXVl
c3RJCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBpZiAobmV3UmVxdWVzdC5yZXF1ZXN0
ZXIoKSAhPSBSZXNvdXJjZVJlcXVlc3RCYXNlOjpSZXF1ZXN0ZXI6Ok1haW4pCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWRPYnNlcnZlcigpLmxvZ1N1YnJlc291cmNlTG9hZGlu
ZyhtX2ZyYW1lLmdldCgpLCBuZXdSZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKTsKKwogICAgIEFT
U0VSVCghbmV3UmVxdWVzdC5pc051bGwoKSk7CiAgICAgaWYgKCFyZWRpcmVjdFJlc3BvbnNlLmlz
TnVsbCgpKSB7CiAgICAgICAgIGlmIChvcHRpb25zKCkucmVkaXJlY3QgIT0gRmV0Y2hPcHRpb25z
OjpSZWRpcmVjdDo6Rm9sbG93KSB7CkBAIC0yMjgsOCArMjMxLDYgQEAgdm9pZCBTdWJyZXNvdXJj
ZUxvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0SQogICAgIFJlc291cmNlTG9hZGVyOjp3aWxsU2VuZFJl
cXVlc3RJbnRlcm5hbChuZXdSZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKTsKICAgICBpZiAobmV3
UmVxdWVzdC5pc051bGwoKSkKICAgICAgICAgY2FuY2VsKCk7Ci0KLSAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5sb2dTdWJyZXNvdXJjZUxvYWRpbmcobV9mcmFtZS5n
ZXQoKSwgbmV3UmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7CiB9CiAKIHZvaWQgU3VicmVzb3Vy
Y2VMb2FkZXI6OmRpZFNlbmREYXRhKHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2ln
bmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lv
biAyMDY3NTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwzMSBAQAorMjAxNi0xMC0wMyAgSm9obiBXaWxhbmRlciAgPHdpbGFuZGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBVcGRhdGUgUmVzb3VyY2UgTG9hZCBTdGF0aXN0aWNzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI4MTEKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omhhc1ByZXZhbGVudFJlc291cmNlQ2hhcmFjdGVyaXN0
aWNzKToKKyAgICAgICAgICAgIFN3aXRjaGVkIHRvIHZlY3Rvci1iYXNlZCBjbGFzc2lmaWNhdGlv
bi4KKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGFz
c2lmeVJlc291cmNlKToKKyAgICAgICAgICAgIFNpbXBsaWZpZWQgbG9naWMgYW5kIG1vdmVkIHRo
ZSBzcGxpdCBiZXR3ZWVuIGhhcyBhbmQgaGFzCisgICAgICAgICAgICBubyB1c2VyIGludGVyYWN0
aW9uIGludG8gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLgorICAgICAgICAoV2ViS2l0OjpX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyRGF0YVJlY29yZHMpOgorICAgICAg
ICAgICAgQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1VwZGF0ZWQpOgorICAgICAgICAgICAgVXBkYXRl
ZCB0byBtYWtlIHVzZSBvZiB0aGUgbmV3IGZ1bmN0aW9ucy4KKyAgICAgICAgKFdlYktpdDo6V2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwZXJzaXN0ZW50U3RvcmFnZVBhdGgpOgorICAg
ICAgICAgICAgUmVtb3ZlZCBzdHJheSB3aGl0ZXNwYWNlLgorICAgICAgICAoV2ViS2l0OjpXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OndyaXRlRW5jb2RlclRvRGlzayk6CisgICAgICAg
ICAgICBSZW1vdmVkIHN0cmF5IHdoaXRlc3BhY2UuCisgICAgICAgIChXZWJLaXQ6OldlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y3JlYXRlRGVjb2RlckZyb21EaXNrKToKKyAgICAgICAg
ICAgIFJlbW92ZWQgc3RyYXkgd2hpdGVzcGFjZS4KKyAgICAgICAgKFdlYktpdDo6aGFzUHJldmFs
ZW50UmVzb3VyY2VDaGFyYWN0ZXJpc3RpY3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0Ojpj
bGFzc2lmeVByZXZhbGVudFJlc291cmNlcyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNz
L1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOgorICAgICAgICAgICAgQWRkZWQgbWVt
YmVyIHZhcmlhYmxlcyBmb3IgY2xlYXJpbmcgb2YgZGF0YSByZWNvcmRzLgorCiAyMDE2LTEwLTAz
ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHN1cHBvcnQg
Zm9yIEtleWJvYXJkRXZlbnQua2V5IGF0dHJpYnV0ZQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5j
cHAJKHJldmlzaW9uIDIwNjc1MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwyNCArMjYs
MjYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUuaCIKIAorI2luY2x1ZGUgIkFQSVdlYnNpdGVEYXRhU3RvcmUuaCIKICNpbmNs
dWRlICJXZWJQcm9jZXNzTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgog
I2luY2x1ZGUgIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZU1lc3NhZ2VzLmgiCisjaW5j
bHVkZSAiV2Vic2l0ZURhdGFGZXRjaE9wdGlvbi5oIgorI2luY2x1ZGUgIldlYnNpdGVEYXRhVHlw
ZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvS2V5ZWRDb2RpbmcuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuaD4KKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4K
KyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KICNpbmNsdWRlIDx3dGYvdGhyZWFkcy9CaW5hcnlT
ZW1hcGhvcmUuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJL
aXQgewogCi0vLyBTdWIgZnJhbWUgY2xhc3NpZmljYXRpb24gdGhyZXNob2xkcwotc3RhdGljIGNv
bnN0IHVuc2lnbmVkIHN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNUaHJlc2hvbGQgPSAzOwot
ICAgIAotLy8gU3VicmVzb3VyY2UgY2xhc3NpZmljYXRpb24gdGhyZXNob2xkcwotc3RhdGljIGNv
bnN0IHVuc2lnbmVkIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnNUaHJlc2hvbGQgPSA1
Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHN1YnJlc291cmNlSGFzQmVlblJlZGlyZWN0ZWRGcm9t
VG9VbmlxdWVEb21haW5zVGhyZXNob2xkID0gMzsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCByZWRp
cmVjdGVkVG9PdGhlclByZXZhbGVudFJlc291cmNlT3JpZ2luc1RocmVzaG9sZCA9IDI7CitzdGF0
aWMgY29uc3QgYXV0byBudW1iZXJPZlNlY29uZHNCZXR3ZWVuQ2xlYXJpbmdEYXRhUmVjb3JkcyA9
IDYwMDsKK3N0YXRpYyBjb25zdCBhdXRvIGZlYXR1cmVWZWN0b3JMZW5ndGhUaHJlc2hvbGQgPSAz
OwogCiBSZWY8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OmNyZWF0ZShjb25zdCBTdHJpbmcmIHJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEaXJlY3RvcnkpCiB7CkBAIC01MSw3ICs1Myw3IEBAIFJlZjxXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU+IFdlYlIKIH0KIAogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoY29uc3QgU3RyaW5nJiByZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGlyZWN0b3J5KQotICAgIDogbV9yZXNvdXJjZVN0YXRpc3RpY3NTdG9yZShXZWJD
b3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNyZWF0ZSgpKQorICAgIDogbV9yZXNv
dXJjZVN0YXRpc3RpY3NTdG9yZShSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNyZWF0ZSgp
KQogICAgICwgbV9zdGF0aXN0aWNzUXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoIldlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZSBQcm9jZXNzIERhdGEgUXVldWUiKSkKICAgICAsIG1fc3RvcmFn
ZVBhdGgocmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSkKIHsKQEAgLTYxLDM3ICs2Mywx
MDMgQEAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjp+V2ViUmVzbwogewogfQogCi1z
dGF0aWMgaW5saW5lIGJvb2wgaGFzUHJldmFsZW50UmVzb3VyY2VDaGFyYWN0ZXJpc3RpY3MoY29u
c3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0aWMpCitib29sIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzUHJldmFsZW50UmVzb3VyY2VDaGFyYWN0ZXJp
c3RpY3MoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0aWMpCiB7
Ci0gICAgcmV0dXJuIHJlc291cmNlU3RhdGlzdGljLnN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdp
bnMuc2l6ZSgpID4gc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc1RocmVzaG9sZAotICAgICAg
ICB8fCByZXNvdXJjZVN0YXRpc3RpYy5zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zLnNp
emUoKSA+IHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnNUaHJlc2hvbGQKLSAgICAgICAg
fHwgcmVzb3VyY2VTdGF0aXN0aWMuc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby5zaXplKCkg
PiBzdWJyZXNvdXJjZUhhc0JlZW5SZWRpcmVjdGVkRnJvbVRvVW5pcXVlRG9tYWluc1RocmVzaG9s
ZAotICAgICAgICB8fCByZXNvdXJjZVN0YXRpc3RpYy5yZWRpcmVjdGVkVG9PdGhlclByZXZhbGVu
dFJlc291cmNlT3JpZ2lucy5zaXplKCkgPiByZWRpcmVjdGVkVG9PdGhlclByZXZhbGVudFJlc291
cmNlT3JpZ2luc1RocmVzaG9sZDsKKyAgICBhdXRvIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9y
aWdpbnNDb3VudCA9IHJlc291cmNlU3RhdGlzdGljLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9y
aWdpbnMuc2l6ZSgpOworICAgIGF1dG8gc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50
ID0gcmVzb3VyY2VTdGF0aXN0aWMuc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby5zaXplKCk7
CisgICAgYXV0byBzdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zQ291bnQgPSByZXNvdXJjZVN0
YXRpc3RpYy5zdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zLnNpemUoKTsKKyAgICAKKyAgICBp
ZiAoIXN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnNDb3VudAorICAgICAgICAmJiAhc3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50CisgICAgICAgICYmICFzdWJmcmFtZVVuZGVy
VG9wRnJhbWVPcmlnaW5zQ291bnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChz
dWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zQ291bnQgPiBmZWF0dXJlVmVjdG9yTGVuZ3Ro
VGhyZXNob2xkCisgICAgICAgIHx8IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudCA+
IGZlYXR1cmVWZWN0b3JMZW5ndGhUaHJlc2hvbGQKKyAgICAgICAgfHwgc3ViZnJhbWVVbmRlclRv
cEZyYW1lT3JpZ2luc0NvdW50ID4gZmVhdHVyZVZlY3Rvckxlbmd0aFRocmVzaG9sZCkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBUaGUgcmVzb3VyY2UgaXMgY29uc2lkZXJlZCBwcmV2
YWxlbnQgaWYgdGhlIGZlYXR1cmUgdmVjdG9yCisgICAgLy8gaXMgbG9uZ2VyIHRoYW4gdGhlIHRo
cmVzaG9sZC4KKyAgICAvLyBWZWN0b3IgbGVuZ3RoIGlzIHNxcnQocG93KGEsIDIpICsgKC4uLikg
KyBwb3cobiwgMikpLgorICAgIGRvdWJsZSB2ZWN0b3JMZW5ndGggPSAwOworICAgIHZlY3Rvckxl
bmd0aCArPSBwb3coc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50LCAyKTsKKyAg
ICB2ZWN0b3JMZW5ndGggKz0gcG93KHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudCwg
Mik7CisgICAgdmVjdG9yTGVuZ3RoICs9IHBvdyhzdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5z
Q291bnQsIDIpOworCisgICAgQVNTRVJUKHZlY3Rvckxlbmd0aCA+IDApOworCisgICAgcmV0dXJu
IHNxcnQodmVjdG9yTGVuZ3RoKSA+IGZlYXR1cmVWZWN0b3JMZW5ndGhUaHJlc2hvbGQ7CiB9CiAg
ICAgCi1zdGF0aWMgaW5saW5lIHZvaWQgY2xhc3NpZnlQcmV2YWxlbnRSZXNvdXJjZXMoUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0aWMsIFZlY3RvcjxTdHJpbmc+JiBwcmV2
YWxlbnRSZXNvdXJjZXMsIFZlY3RvcjxTdHJpbmc+JiBwcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNl
ckludGVyYWN0aW9uKQordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsYXNz
aWZ5UmVzb3VyY2UoUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0aWMpCiB7
Ci0gICAgaWYgKHJlc291cmNlU3RhdGlzdGljLmlzUHJldmFsZW50UmVzb3VyY2UgfHwgaGFzUHJl
dmFsZW50UmVzb3VyY2VDaGFyYWN0ZXJpc3RpY3MocmVzb3VyY2VTdGF0aXN0aWMpKSB7CisgICAg
aWYgKCFyZXNvdXJjZVN0YXRpc3RpYy5pc1ByZXZhbGVudFJlc291cmNlICYmIGhhc1ByZXZhbGVu
dFJlc291cmNlQ2hhcmFjdGVyaXN0aWNzKHJlc291cmNlU3RhdGlzdGljKSkgewogICAgICAgICBy
ZXNvdXJjZVN0YXRpc3RpYy5pc1ByZXZhbGVudFJlc291cmNlID0gdHJ1ZTsKLSAgICAgICAgaWYg
KHJlc291cmNlU3RhdGlzdGljLmhhZFVzZXJJbnRlcmFjdGlvbikKLSAgICAgICAgICAgIHByZXZh
bGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24uYXBwZW5kKHJlc291cmNlU3RhdGlzdGlj
LmhpZ2hMZXZlbERvbWFpbik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHByZXZhbGVudFJl
c291cmNlcy5hcHBlbmQocmVzb3VyY2VTdGF0aXN0aWMuaGlnaExldmVsRG9tYWluKTsKICAgICB9
CiB9CiAKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhckRhdGFSZWNv
cmRzKCkKK3sKKyAgICBpZiAobV9kYXRhU3RvcmVDbGVhclBlbmRpbmcpCisgICAgICAgIHJldHVy
bjsKKworICAgIFZlY3RvcjxTdHJpbmc+IHByZXZhbGVudFJlc291cmNlRG9tYWlucyA9IGNvcmVT
dG9yZSgpLnByZXZhbGVudFJlc291cmNlRG9tYWluc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24oKTsK
KyAgICBpZiAoIXByZXZhbGVudFJlc291cmNlRG9tYWlucy5zaXplKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGRvdWJsZSBub3cgPSBjdXJyZW50VGltZSgpOworICAgIGlmICghbV9sYXN0VGlt
ZURhdGFSZWNvcmRzV2VyZUNsZWFyZWQpIHsKKyAgICAgICAgbV9sYXN0VGltZURhdGFSZWNvcmRz
V2VyZUNsZWFyZWQgPSBub3c7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobm93
IDwgKG1fbGFzdFRpbWVEYXRhUmVjb3Jkc1dlcmVDbGVhcmVkICsgbnVtYmVyT2ZTZWNvbmRzQmV0
d2VlbkNsZWFyaW5nRGF0YVJlY29yZHMpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RhdGFT
dG9yZUNsZWFyUGVuZGluZyA9IHRydWU7CisgICAgbV9sYXN0VGltZURhdGFSZWNvcmRzV2VyZUNs
ZWFyZWQgPSBub3c7CisKKyAgICAvLyBTd2l0Y2ggdG8gdGhlIG1haW4gdGhyZWFkIHRvIGdldCB0
aGUgZGVmYXVsdCB3ZWJzaXRlIGRhdGEgc3RvcmUKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0
Y2goW3ByZXZhbGVudFJlc291cmNlRG9tYWlucyA9IFdURk1vdmUocHJldmFsZW50UmVzb3VyY2VE
b21haW5zKSwgdGhpc10gKCkgbXV0YWJsZSB7CisgICAgICAgIGF1dG8mIHdlYnNpdGVEYXRhU3Rv
cmUgPSBBUEk6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+d2Vic2l0ZURh
dGFTdG9yZSgpOworCisgICAgICAgIHdlYnNpdGVEYXRhU3RvcmUuZmV0Y2hEYXRhKFdlYnNpdGVE
YXRhVHlwZTo6Q29va2llcywgeyB9LCBbcHJldmFsZW50UmVzb3VyY2VEb21haW5zID0gV1RGTW92
ZShwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMpLCB0aGlzXShhdXRvIHdlYnNpdGVEYXRhUmVjb3Jk
cykgeworICAgICAgICAgICAgVmVjdG9yPFdlYnNpdGVEYXRhUmVjb3JkPiBkYXRhUmVjb3JkczsK
KyAgICAgICAgICAgIGZvciAoYXV0byYgd2Vic2l0ZURhdGFSZWNvcmQgOiB3ZWJzaXRlRGF0YVJl
Y29yZHMpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIHByZXZhbGVudFJlc291cmNlRG9t
YWluIDogcHJldmFsZW50UmVzb3VyY2VEb21haW5zKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
ICh3ZWJzaXRlRGF0YVJlY29yZC5kaXNwbGF5TmFtZS5lbmRzV2l0aElnbm9yaW5nQVNDSUlDYXNl
KHByZXZhbGVudFJlc291cmNlRG9tYWluKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0
byBzdWZmaXhTdGFydCA9IHdlYnNpdGVEYXRhUmVjb3JkLmRpc3BsYXlOYW1lLmxlbmd0aCgpIC0g
cHJldmFsZW50UmVzb3VyY2VEb21haW4ubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIXN1ZmZpeFN0YXJ0IHx8IHdlYnNpdGVEYXRhUmVjb3JkLmRpc3BsYXlOYW1lW3N1ZmZp
eFN0YXJ0IC0gMV0gPT0gJy4nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFSZWNv
cmRzLmFwcGVuZCh3ZWJzaXRlRGF0YVJlY29yZCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghZGF0YVJl
Y29yZHMuc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgbV9kYXRhU3RvcmVDbGVhclBlbmRpbmcg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGF1dG8mIHdlYnNpdGVEYXRhU3RvcmUgPSBBUEk6OldlYnNpdGVEYXRhU3RvcmU6OmRl
ZmF1bHREYXRhU3RvcmUoKS0+d2Vic2l0ZURhdGFTdG9yZSgpOworICAgICAgICAgICAgd2Vic2l0
ZURhdGFTdG9yZS5yZW1vdmVEYXRhKFdlYnNpdGVEYXRhVHlwZTo6Q29va2llcywgeyBXVEZNb3Zl
KGRhdGFSZWNvcmRzKSB9LCBbdGhpc10geworICAgICAgICAgICAgICAgIG1fZGF0YVN0b3JlQ2xl
YXJQZW5kaW5nID0gZmFsc2U7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7
Cit9CisKIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXNvdXJjZUxvYWRT
dGF0aXN0aWNzVXBkYXRlZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljcz4mIG9yaWdpbnMpCiB7CiAgICAgY29yZVN0b3JlKCkubWVyZ2VTdGF0aXN0aWNzKG9yaWdp
bnMpOwogCi0gICAgVmVjdG9yPFN0cmluZz4gcHJldmFsZW50UmVzb3VyY2VzLCBwcmV2YWxlbnRS
ZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uOwogICAgIGlmIChjb3JlU3RvcmUoKS5oYXNFbm91
Z2hEYXRhRm9yU3RhdGlzdGljc1Byb2Nlc3NpbmcoKSkgewotICAgICAgICBjb3JlU3RvcmUoKS5w
cm9jZXNzU3RhdGlzdGljcyhbdGhpcywgJnByZXZhbGVudFJlc291cmNlcywgJnByZXZhbGVudFJl
c291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb25dIChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiByZXNv
dXJjZVN0YXRpc3RpYykgewotICAgICAgICAgICAgY2xhc3NpZnlQcmV2YWxlbnRSZXNvdXJjZXMo
cmVzb3VyY2VTdGF0aXN0aWMsIHByZXZhbGVudFJlc291cmNlcywgcHJldmFsZW50UmVzb3VyY2Vz
V2l0aFVzZXJJbnRlcmFjdGlvbik7CisgICAgICAgIGNvcmVTdG9yZSgpLnByb2Nlc3NTdGF0aXN0
aWNzKFt0aGlzXSAoUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0aWMpIHsK
KyAgICAgICAgICAgIGNsYXNzaWZ5UmVzb3VyY2UocmVzb3VyY2VTdGF0aXN0aWMpOworICAgICAg
ICAgICAgY2xlYXJEYXRhUmVjb3JkcygpOwogICAgICAgICB9KTsKICAgICB9CiAKLSAgICAvLyBG
SVhNRTogTm90aWZ5IGluZGl2aWR1YWwgV2ViUHJvY2Vzc2VzIG9mIHByZXZhbGVudCBkb21haW5z
IHVzaW5nIHRoZSB0d28gdmVjdG9ycyBwb3B1bGF0ZWQgYnkgdGhlIGNsYXNzaWZpZXIuIDxyZGFy
Oi8vcHJvYmxlbS8yNDcwMzA5OT4KICAgICBhdXRvIGVuY29kZXIgPSBjb3JlU3RvcmUoKS5jcmVh
dGVFbmNvZGVyRnJvbURhdGEoKTsKICAgICAKICAgICB3cml0ZUVuY29kZXJUb0Rpc2soKmVuY29k
ZXIuZ2V0KCksICJmdWxsX2Jyb3dzaW5nX3Nlc3Npb24iKTsKQEAgLTE1Miw3ICsyMjAsNyBAQCBT
dHJpbmcgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwCiB7CiAgICAgaWYgKG1fc3Rv
cmFnZVBhdGguaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICAK
KwogICAgIC8vIFRPRE8gRGVjaWRlIHdoYXQgdG8gY2FsbCB0aGlzIGZpbGUKICAgICByZXR1cm4g
cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1fc3RvcmFnZVBhdGgsIGxhYmVsICsgIl9yZXNvdXJj
ZUxvZy5wbGlzdCIpOwogfQpAQCAtMTYyLDIxICsyMzAsMjEgQEAgdm9pZCBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OndyaQogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHJhd0RhdGEg
PSBlbmNvZGVyLmZpbmlzaEVuY29kaW5nKCk7CiAgICAgaWYgKCFyYXdEYXRhKQogICAgICAgICBy
ZXR1cm47Ci0gICAgCisKICAgICBTdHJpbmcgcmVzb3VyY2VMb2cgPSBwZXJzaXN0ZW50U3RvcmFn
ZVBhdGgobGFiZWwpOwogICAgIGlmIChyZXNvdXJjZUxvZy5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKLSAgICAKKwogICAgIGlmICghbV9zdG9yYWdlUGF0aC5pc0VtcHR5KCkpCiAgICAgICAg
IG1ha2VBbGxEaXJlY3RvcmllcyhtX3N0b3JhZ2VQYXRoKTsKLSAgICAKKwogICAgIGF1dG8gaGFu
ZGxlID0gb3BlbkZpbGUocmVzb3VyY2VMb2csIE9wZW5Gb3JXcml0ZSk7CiAgICAgaWYgKCFoYW5k
bGUpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBpbnQ2NF90IHdyaXR0ZW5CeXRlcyA9IHdy
aXRlVG9GaWxlKGhhbmRsZSwgcmF3RGF0YS0+ZGF0YSgpLCByYXdEYXRhLT5zaXplKCkpOwogICAg
IGNsb3NlRmlsZShoYW5kbGUpOwotICAgIAorCiAgICAgaWYgKHdyaXR0ZW5CeXRlcyAhPSBzdGF0
aWNfY2FzdDxpbnQ2NF90PihyYXdEYXRhLT5zaXplKCkpKQogICAgICAgICBXVEZMb2dBbHdheXMo
IldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTogV2Ugb25seSB3cm90ZSAlZCBvdXQgb2Yg
JWQgYnl0ZXMgdG8gZGlzayIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPih3cml0dGVuQnl0ZXMpLCBy
YXdEYXRhLT5zaXplKCkpOwogfQpAQCAtMTg2LDExICsyNTQsMTEgQEAgc3RkOjp1bmlxdWVfcHRy
PEtleWVkRGVjb2Rlcj4gV2ViUmVzb3VyYwogICAgIFN0cmluZyByZXNvdXJjZUxvZyA9IHBlcnNp
c3RlbnRTdG9yYWdlUGF0aChsYWJlbCk7CiAgICAgaWYgKHJlc291cmNlTG9nLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCisKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVy
PiByYXdEYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGVXaXRoQ29udGVudHNPZkZpbGUocmVzb3Vy
Y2VMb2cpOwogICAgIGlmICghcmF3RGF0YSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
CisKICAgICByZXR1cm4gS2V5ZWREZWNvZGVyOjpkZWNvZGVyKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdWludDhfdCo+KHJhd0RhdGEtPmRhdGEoKSksIHJhd0RhdGEtPnNpemUoKSk7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlLmgJKHJldmlzaW9uIDIwNjc1MykKKysrIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAkod29ya2luZyBjb3B5
KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCiAjaW5jbHVkZSAi
Q29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIldlYnNpdGVEYXRhUmVjb3JkLmgiCiAjaW5jbHVkZSA8
V2ViQ29yZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaD4KICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC03MSw2ICs3MiwxMCBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZShjb25zdCBTdHJpbmcmKTsKIAorICAgIGJvb2wgaGFzUHJldmFsZW50UmVzb3VyY2VD
aGFyYWN0ZXJpc3RpY3MoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpOwor
ICAgIHZvaWQgY2xhc3NpZnlSZXNvdXJjZShXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
Jik7CisgICAgdm9pZCBjbGVhckRhdGFSZWNvcmRzKCk7CisKICAgICBTdHJpbmcgcGVyc2lzdGVu
dFN0b3JhZ2VQYXRoKGNvbnN0IFN0cmluZyYgbGFiZWwpIGNvbnN0OwogCiAgICAgLy8gSVBDOjpN
ZXNzYWdlUmVjZWl2ZXIKQEAgLTgzLDYgKzg4LDkgQEAgcHJpdmF0ZToKICAgICBSZWY8V1RGOjpX
b3JrUXVldWU+IG1fc3RhdGlzdGljc1F1ZXVlOwogICAgIFN0cmluZyBtX3N0b3JhZ2VQYXRoOwog
ICAgIGJvb2wgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCB7IGZhbHNlIH07CisKKyAg
ICBkb3VibGUgbV9sYXN0VGltZURhdGFSZWNvcmRzV2VyZUNsZWFyZWQgeyAwIH07CisgICAgYm9v
bCBtX2RhdGFTdG9yZUNsZWFyUGVuZGluZyB7IGZhbHNlIH07CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDIwNjc2MSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDEzIEBACisyMDE2LTEwLTAzICBKb2huIFdpbGFuZGVyICA8d2lsYW5kZXJA
YXBwbGUuY29tPgorCisgICAgICAgIFVwZGF0ZSBSZXNvdXJjZSBMb2FkIFN0YXRpc3RpY3MKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjgxMQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktp
dEFQSS9UZXN0cy9tYWMvUHVibGljU3VmZml4Lm1tOgorICAgICAgICAgICAgQ2hhbmdlIGZyb20g
VVNFKFBVQkxJQ19TVUZGSVhfTElTVCkgdG8gRU5BQkxFKFBVQkxJQ19TVUZGSVhfTElTVCkKKwog
MjAxNi0xMC0wMyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgog
CiAgICAgICAgIFVSTFBhcnNlciBzaG91bGQgaWdub3JlIHRhYnMgYXQgYWxsIGxvY2F0aW9ucwpJ
bmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9tYWMvUHVibGljU3VmZml4Lm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvbWFjL1B1YmxpY1N1ZmZpeC5tbQko
cmV2aXNpb24gMjA2NzUzKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9tYWMvUHVibGlj
U3VmZml4Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAKICNpbmNsdWRlICJj
b25maWcuaCIKIAotI2lmIFVTRShQVUJMSUNfU1VGRklYX0xJU1QpCisjaWYgRU5BQkxFKFBVQkxJ
Q19TVUZGSVhfTElTVCkKIAogI2luY2x1ZGUgIldURlN0cmluZ1V0aWxpdGllcy5oIgogI2luY2x1
ZGUgPFdlYkNvcmUvUHVibGljU3VmZml4Lmg+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290542</attachid>
            <date>2016-10-03 18:09:47 -0700</date>
            <delta_ts>2016-10-05 10:50:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162811-20161003180638.patch</filename>
            <type>text/plain</type>
            <size>28876</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNjc1MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBACisyMDE2LTEwLTAzICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFVwZGF0ZSBSZXNvdXJjZSBM
b2FkIFN0YXRpc3RpY3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2MjgxMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhlIGNvdW50aW5nIGlzIGJhc2VkIG9uIHRvcCBwcml2YXRl
bHkgb3duZWQgZG9tYWlucworICAgICAgICB3aGljaCBjdXJyZW50bHkgaXMgbm90IHN1cHBvcnRl
ZCBieSBsYXlvdXQgdGVzdHMgbm9yIEFQSSB0ZXN0cy4KKworICAgICAgICAqIE1vZHVsZXMvd2Vi
c29ja2V0cy9XZWJTb2NrZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Ojpjb25u
ZWN0KToKKyAgICAgICAgICAgIE5vdyBjYXB0dXJlcyBzdGF0aXN0aWNzIGZvciB3ZWIgc29ja2V0
cyB0b28uCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgKiBs
b2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwOgorICAgICAgICAgICAgTm93IGNhcHR1cmVz
IHN0YXRpc3RpY3MgZm9yIHN5bmNocm9ub3VzIFhIUiB0b28uCisgICAgICAgIChXZWJDb3JlOjpp
czN4eFJlZGlyZWN0KToKKyAgICAgICAgICAgIENvbnZlbmllbmNlIGZ1bmN0aW9uLgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNob3VsZExvZyk6CisgICAgICAgICAg
ICBDb252ZW5pZW5jZSBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9i
c2VydmVyOjpsb2dGcmFtZU5hdmlnYXRpb24pOgorICAgICAgICAgICAgVXBkYXRlZCB0byBtYWtl
IHVzZSBvZiBuZXcgY29udmVuaWVuY2UgZnVuY3Rpb25zLgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1N1YnJlc291cmNlTG9hZGluZyk6CisgICAgICAgICAgICBV
cGRhdGVkIHRvIG1ha2UgdXNlIG9mIG5ldyBjb252ZW5pZW5jZSBmdW5jdGlvbnMuCisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nV2ViU29ja2V0TG9hZGluZyk6Cisg
ICAgICAgICAgICBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVy
Ojpsb2dVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAgICAgVXBkYXRlZCB0byBtYWtlIHVzZSBv
ZiBuZXcgY29udmVuaWVuY2UgZnVuY3Rpb25zLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnByaW1hcnlEb21haW4pOgorICAgICAgICAgICAgTm93IG1ha2VzIHVzZSBv
ZiB0aGUgUHVibGljIFN1ZmZpeCBsaXN0LgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRP
YnNlcnZlci5oOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcmV2
YWxlbnRSZXNvdXJjZURvbWFpbnNXaXRob3V0VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgICAg
IENvbnZlbmllbmNlIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpwcm9jZXNzU3RhdGlzdGljcyk6IERlbGV0ZWQuCisgICAgICAgICogbG9h
ZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOgorICAgICAgICAqIGxvYWRlci9TdWJy
ZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcjo6
d2lsbFNlbmRSZXF1ZXN0SW50ZXJuYWwpOgorICAgICAgICAgICAgTW92ZWQgbG9nZ2luZyBjYWxs
IGhpZ2hlciB1cCBhbmQgYWRkZWQgYSBjaGVjayBmb3Igd2hldGhlciB3ZQorICAgICAgICAgICAg
YXJlIGxvYWRpbmcgdGhlIG1haW4gcmVzb3VyY2UuIFRoZSByZWFzb24gZm9yIG1vdmluZyBpdCB1
cCBpcworICAgICAgICAgICAgdG8gY2FwdHVyZSB0aGUgcmVxdWVzdCBiZWZvcmUgc29tZSBkYXRh
IG1heSBiZSBjbGVhcmVkIG91dCBpbgorICAgICAgICAgICAgcmVkaXJlY3QgaGFuZGxpbmcuIFdl
IGFsc28gd2FudCB0byBjYXB0dXJlIGZhaWxlZCBDT1JTIHJlcXVlc3RzCisgICAgICAgICAgICBz
aW5jZSB0aGV5IGFyZSBzZW50IGFuZCB0aGVuIGNhbmNlbGxlZCBvbiB0aGUgd2F5IGJhY2suCisK
IDIwMTYtMTAtMDMgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAg
IFJlbW92ZSBEb2N1bWVudDo6ZWxlbWVudFNoZWV0KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwCShyZXZpc2lvbiAyMDY3NTMpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAi
TG9nZ2luZy5oIgogI2luY2x1ZGUgIk1lc3NhZ2VFdmVudC5oIgorI2luY2x1ZGUgIlJlc291cmNl
TG9hZE9ic2VydmVyLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUg
IlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgpA
QCAtMzE4LDcgKzMxOSw4IEBAIHZvaWQgV2ViU29ja2V0Ojpjb25uZWN0KGNvbnN0IFN0cmluZyYg
dXIKICAgICAgICAgICAgIH0pOwogI2VuZGlmCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkT2JzZXJ2ZXIoKS5sb2dXZWJTb2NrZXRMb2FkaW5nKGRvY3VtZW50LmZyYW1lKCksIG1fdXJs
KTsKICAgICB9CiAKICAgICBTdHJpbmcgcHJvdG9jb2xTdHJpbmc7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDIwNjc1MykKKysrIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDYgKzk3LDcg
QEAKICNpbmNsdWRlICJQcm9ncmVzc1RyYWNrZXIuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRs
ZS5oIgogI2luY2x1ZGUgIlJlc291cmNlTG9hZEluZm8uaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxv
YWRPYnNlcnZlci5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgogI2luY2x1ZGUgIlNW
R0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTG9jYXRhYmxlLmgiCkBAIC0yNzc0LDYgKzI3NzUs
NyBAQCB1bnNpZ25lZCBsb25nIEZyYW1lTG9hZGVyOjpsb2FkUmVzb3VyY2VTCiAgICAgICAgICAg
ICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3koKS0+bG9hZFJlc291cmNlU3lu
Y2hyb25vdXNseShuZXR3b3JraW5nQ29udGV4dCgpLCBpZGVudGlmaWVyLCBuZXdSZXF1ZXN0LCBz
dG9yZWRDcmVkZW50aWFscywgY2xpZW50Q3JlZGVudGlhbFBvbGljeSwgZXJyb3IsIHJlc3BvbnNl
LCBidWZmZXIpOwogICAgICAgICAgICAgZGF0YSA9IFNoYXJlZEJ1ZmZlcjo6YWRvcHRWZWN0b3Io
YnVmZmVyKTsKICAgICAgICAgICAgIGRvY3VtZW50TG9hZGVyKCktPmFwcGxpY2F0aW9uQ2FjaGVI
b3N0KCktPm1heWJlTG9hZEZhbGxiYWNrU3luY2hyb25vdXNseShuZXdSZXF1ZXN0LCBlcnJvciwg
cmVzcG9uc2UsIGRhdGEpOworICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZE9ic2VydmVyKCkubG9nU3VicmVzb3VyY2VMb2FkaW5nKCZtX2ZyYW1lLCBuZXdSZXF1ZXN0LCBy
ZXNwb25zZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgbm90aWZpZXIoKS5zZW5kUmVtYWluaW5n
RGVsZWdhdGVNZXNzYWdlcyhtX2RvY3VtZW50TG9hZGVyLmdldCgpLCBpZGVudGlmaWVyLCByZXF1
ZXN0LCByZXNwb25zZSwgZGF0YSA/IGRhdGEtPmRhdGEoKSA6IG51bGxwdHIsIGRhdGEgPyBkYXRh
LT5zaXplKCkgOiAwLCAtMSwgZXJyb3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jl
c291cmNlTG9hZE9ic2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCShyZXZpc2lvbiAyMDY3NTMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmgiCiAjaW5j
bHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyYXRlZ2llcy5oIgorI2luY2x1ZGUg
IlB1YmxpY1N1ZmZpeC5oIgogI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3MuaCIKICNp
bmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIKICNpbmNsdWRlICJSZXNvdXJj
ZVJlcXVlc3QuaCIKQEAgLTU3LDIzICs1OCwzMSBAQCB2b2lkIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzZXRTdGF0aXN0aWNzCiAgICAgbV9zdG9yZSA9IFdURk1vdmUoc3RvcmUpOwogfQogCi12b2lk
IFJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgRnJhbWUmIGZy
YW1lLCBjb25zdCBGcmFtZSYgdG9wRnJhbWUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgbmV3UmVx
dWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKK3N0YXRpYyBp
bmxpbmUgYm9vbCBpczN4eFJlZGlyZWN0KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNl
KQogewotICAgIGlmICghU2V0dGluZ3M6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKKyAgICByZXR1cm4gcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSAv
IDEwMCA9PSAzOworfQogCi0gICAgaWYgKCFtX3N0b3JlKQotICAgICAgICByZXR1cm47Citib29s
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaG91bGRMb2coUGFnZSogcGFnZSkKK3sKKyAgICAvLyBF
cnIgb24gdGhlIHNhZmUgc2lkZSB1bnRpbCB3ZSBoYXZlIHNvcnRlZCBvdXQgd2hhdCB0byBkbyBp
biB3b3JrZXIgY29udGV4dHMKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gU2V0dGluZ3M6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCkKKyAg
ICAgICAgJiYgIXBhZ2UtPnVzZXNFcGhlbWVyYWxTZXNzaW9uKCkKKyAgICAgICAgJiYgbV9zdG9y
ZTsKK30KIAordm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNv
bnN0IEZyYW1lJiBmcmFtZSwgY29uc3QgRnJhbWUmIHRvcEZyYW1lLCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIG5ld1JlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9u
c2UpCit7CiAgICAgQVNTRVJUKGZyYW1lLmRvY3VtZW50KCkpOwogICAgIEFTU0VSVCh0b3BGcmFt
ZS5kb2N1bWVudCgpKTsKICAgICBBU1NFUlQodG9wRnJhbWUucGFnZSgpKTsKLQotICAgIGJvb2wg
bmVlZFByaXZhY3kgPSB0b3BGcmFtZS5wYWdlKCkgPyB0b3BGcmFtZS5wYWdlKCktPnVzZXNFcGhl
bWVyYWxTZXNzaW9uKCkgOiBmYWxzZTsKLSAgICBpZiAobmVlZFByaXZhY3kpCisgICAgCisgICAg
aWYgKCFzaG91bGRMb2codG9wRnJhbWUucGFnZSgpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
Ym9vbCBpc1JlZGlyZWN0ID0gIXJlZGlyZWN0UmVzcG9uc2UuaXNOdWxsKCk7CisgICAgYm9vbCBp
c1JlZGlyZWN0ID0gaXMzeHhSZWRpcmVjdChyZWRpcmVjdFJlc3BvbnNlKTsKICAgICBib29sIGlz
TWFpbkZyYW1lID0gZnJhbWUuaXNNYWluRnJhbWUoKTsKICAgICBjb25zdCBVUkwmIHNvdXJjZVVS
TCA9IGZyYW1lLmRvY3VtZW50KCktPnVybCgpOwogICAgIGNvbnN0IFVSTCYgdGFyZ2V0VVJMID0g
bmV3UmVxdWVzdC51cmwoKTsKQEAgLTE0OCwxNyArMTU3LDEyIEBAIHZvaWQgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OmxvZ0ZyYW1lTmF2aWcKICAgICAKIHZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OmxvZ1N1YnJlc291cmNlTG9hZGluZyhjb25zdCBGcmFtZSogZnJhbWUsIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgbmV3UmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNw
b25zZSkKIHsKLSAgICBpZiAoIVNldHRpbmdzOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxl
ZCgpKQotICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKGZyYW1lLT5wYWdlKCkpOwogCi0gICAg
aWYgKCFtX3N0b3JlKQorICAgIGlmICghc2hvdWxkTG9nKGZyYW1lLT5wYWdlKCkpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBib29sIG5lZWRQcml2YWN5ID0gKGZyYW1lICYmIGZyYW1lLT5wYWdl
KCkpID8gZnJhbWUtPnBhZ2UoKS0+dXNlc0VwaGVtZXJhbFNlc3Npb24oKSA6IGZhbHNlOwotICAg
IGlmIChuZWVkUHJpdmFjeSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGJvb2wgaXNSZWRp
cmVjdCA9ICFyZWRpcmVjdFJlc3BvbnNlLmlzTnVsbCgpOworICAgIGJvb2wgaXNSZWRpcmVjdCA9
IGlzM3h4UmVkaXJlY3QocmVkaXJlY3RSZXNwb25zZSk7CiAgICAgY29uc3QgVVJMJiBzb3VyY2VV
UkwgPSByZWRpcmVjdFJlc3BvbnNlLnVybCgpOwogICAgIGNvbnN0IFVSTCYgdGFyZ2V0VVJMID0g
bmV3UmVxdWVzdC51cmwoKTsKICAgICBjb25zdCBVUkwmIG1haW5GcmFtZVVSTCA9IGZyYW1lID8g
ZnJhbWUtPm1haW5GcmFtZSgpLmRvY3VtZW50KCktPnVybCgpIDogVVJMKCk7CkBAIC0xNjYsMTQg
KzE3MCwxNyBAQCB2b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dTdWJyZXNvdXJjCiAgICAg
YXV0byB0YXJnZXRIb3N0ID0gdGFyZ2V0VVJMLmhvc3QoKTsKICAgICBhdXRvIG1haW5GcmFtZUhv
c3QgPSBtYWluRnJhbWVVUkwuaG9zdCgpOwogCi0gICAgaWYgKHRhcmdldEhvc3QuaXNFbXB0eSgp
IHx8IG1haW5GcmFtZUhvc3QuaXNFbXB0eSgpIHx8IHRhcmdldEhvc3QgPT0gbWFpbkZyYW1lSG9z
dCB8fCB0YXJnZXRIb3N0ID09IHNvdXJjZVVSTC5ob3N0KCkpCisgICAgaWYgKHRhcmdldEhvc3Qu
aXNFbXB0eSgpCisgICAgICAgIHx8IG1haW5GcmFtZUhvc3QuaXNFbXB0eSgpCisgICAgICAgIHx8
IHRhcmdldEhvc3QgPT0gbWFpbkZyYW1lSG9zdAorICAgICAgICB8fCAoaXNSZWRpcmVjdCAmJiB0
YXJnZXRIb3N0ID09IHNvdXJjZVVSTC5ob3N0KCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBh
dXRvIHRhcmdldFByaW1hcnlEb21haW4gPSBwcmltYXJ5RG9tYWluKHRhcmdldFVSTCk7CiAgICAg
YXV0byBtYWluRnJhbWVQcmltYXJ5RG9tYWluID0gcHJpbWFyeURvbWFpbihtYWluRnJhbWVVUkwp
OwogICAgIGF1dG8gc291cmNlUHJpbWFyeURvbWFpbiA9IHByaW1hcnlEb21haW4oc291cmNlVVJM
KTsKICAgICAKLSAgICBpZiAodGFyZ2V0UHJpbWFyeURvbWFpbiA9PSBtYWluRnJhbWVQcmltYXJ5
RG9tYWluIHx8IHRhcmdldFByaW1hcnlEb21haW4gPT0gc291cmNlUHJpbWFyeURvbWFpbikKKyAg
ICBpZiAodGFyZ2V0UHJpbWFyeURvbWFpbiA9PSBtYWluRnJhbWVQcmltYXJ5RG9tYWluIHx8IChp
c1JlZGlyZWN0ICYmIHRhcmdldFByaW1hcnlEb21haW4gPT0gc291cmNlUHJpbWFyeURvbWFpbikp
CiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8mIHRhcmdldFN0YXRpc3RpY3MgPSBtX3N0b3Jl
LT5lbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHRhcmdldFByaW1hcnlE
b21haW4pOwpAQCAtMjEwLDIwICsyMTcsNjAgQEAgdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
bG9nU3VicmVzb3VyYwogICAgIAogICAgIG1fc3RvcmUtPmZpcmVEYXRhTW9kaWZpY2F0aW9uSGFu
ZGxlcigpOwogfQorCit2b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dXZWJTb2NrZXRMb2Fk
aW5nKGNvbnN0IEZyYW1lKiBmcmFtZSwgY29uc3QgVVJMJiB0YXJnZXRVUkwpCit7CisgICAgLy8g
RklYTUU6IFdlYiBzb2NrZXRzIGNhbiBydW4gaW4gZGV0YWNoZWQgZnJhbWVzLiBEZWNpZGUgaG93
IHRvIGNvdW50IHN1Y2ggY29ubmVjdGlvbnMuCisgICAgLy8gU2VlIExheW91dFRlc3RzL2h0dHAv
dGVzdHMvd2Vic29ja2V0L2NvbnN0cnVjdC1pbi1kZXRhY2hlZC1mcmFtZS5odG1sCisgICAgaWYg
KCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFzaG91bGRMb2coZnJhbWUtPnBh
Z2UoKSkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IFVSTCYgbWFpbkZyYW1lVVJMID0g
ZnJhbWUgPyBmcmFtZS0+bWFpbkZyYW1lKCkuZG9jdW1lbnQoKS0+dXJsKCkgOiBVUkwoKTsKKwor
ICAgIGF1dG8gdGFyZ2V0SG9zdCA9IHRhcmdldFVSTC5ob3N0KCk7CisgICAgYXV0byBtYWluRnJh
bWVIb3N0ID0gbWFpbkZyYW1lVVJMLmhvc3QoKTsKICAgICAKKyAgICBpZiAodGFyZ2V0SG9zdC5p
c0VtcHR5KCkKKyAgICAgICAgfHwgbWFpbkZyYW1lSG9zdC5pc0VtcHR5KCkKKyAgICAgICAgfHwg
dGFyZ2V0SG9zdCA9PSBtYWluRnJhbWVIb3N0KQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
YXV0byB0YXJnZXRQcmltYXJ5RG9tYWluID0gcHJpbWFyeURvbWFpbih0YXJnZXRVUkwpOworICAg
IGF1dG8gbWFpbkZyYW1lUHJpbWFyeURvbWFpbiA9IHByaW1hcnlEb21haW4obWFpbkZyYW1lVVJM
KTsKKyAgICAKKyAgICBpZiAodGFyZ2V0UHJpbWFyeURvbWFpbiA9PSBtYWluRnJhbWVQcmltYXJ5
RG9tYWluKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvJiB0YXJnZXRTdGF0aXN0aWNzID0g
bV9zdG9yZS0+ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbih0YXJnZXRQ
cmltYXJ5RG9tYWluKTsKKyAgICAKKyAgICBhdXRvIG1haW5GcmFtZU9yaWdpbiA9IFNlY3VyaXR5
T3JpZ2luOjpjcmVhdGUobWFpbkZyYW1lVVJMKTsKKyAgICB0YXJnZXRTdGF0aXN0aWNzLnN1YnJl
c291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMuYWRkKG1haW5GcmFtZVByaW1hcnlEb21haW4pOwor
ICAgIAorICAgICsrdGFyZ2V0U3RhdGlzdGljcy5zdWJyZXNvdXJjZUhhc0JlZW5TdWJyZXNvdXJj
ZUNvdW50OworICAgIAorICAgIGF1dG8gdG90YWxWaXNpdGVkID0gc3RkOjptYXgobV9vcmlnaW5z
VmlzaXRlZE1hcC5zaXplKCksIDFVKTsKKyAgICAKKyAgICB0YXJnZXRTdGF0aXN0aWNzLnN1YnJl
c291cmNlSGFzQmVlblN1YnJlc291cmNlQ291bnREaXZpZGVkQnlUb3RhbE51bWJlck9mT3JpZ2lu
c1Zpc2l0ZWQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KHRhcmdldFN0YXRpc3RpY3Muc3VicmVzb3Vy
Y2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudCkgLyB0b3RhbFZpc2l0ZWQ7CisKKyAgICBtX3N0b3Jl
LT5maXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKK30KKwogdm9pZCBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6bG9nVXNlckludGVyYWN0aW9uKGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkKIHsK
LSAgICBpZiAoIVNldHRpbmdzOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpKQotICAg
ICAgICByZXR1cm47CisgICAgQVNTRVJUKGRvY3VtZW50LnBhZ2UoKSk7CiAKLSAgICBpZiAoIW1f
c3RvcmUpCisgICAgaWYgKCFzaG91bGRMb2coZG9jdW1lbnQucGFnZSgpKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgYm9vbCBuZWVkUHJpdmFjeSA9IGRvY3VtZW50LnBhZ2UoKSA/IGRvY3VtZW50
LnBhZ2UoKS0+dXNlc0VwaGVtZXJhbFNlc3Npb24oKSA6IGZhbHNlOwotICAgIGlmIChuZWVkUHJp
dmFjeSkKKyAgICBhdXRvJiB1cmwgPSBkb2N1bWVudC51cmwoKTsKKworICAgIGlmICh1cmwuaXNC
bGFua1VSTCgpIHx8IHVybC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8m
IHN0YXRpc3RpY3MgPSBtX3N0b3JlLT5lbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5
RG9tYWluKHByaW1hcnlEb21haW4oZG9jdW1lbnQudXJsKCkpKTsKKyAgICBhdXRvJiBzdGF0aXN0
aWNzID0gbV9zdG9yZS0+ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihw
cmltYXJ5RG9tYWluKHVybCkpOwogICAgIHN0YXRpc3RpY3MuaGFkVXNlckludGVyYWN0aW9uID0g
dHJ1ZTsKICAgICBtX3N0b3JlLT5maXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKIH0KQEAg
LTIzMSwxNiArMjc4LDI0IEBAIHZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1VzZXJJbnRl
cmEKIFN0cmluZyBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6cHJpbWFyeURvbWFpbihjb25zdCBVUkwm
IHVybCkKIHsKICAgICBTdHJpbmcgaG9zdCA9IHVybC5ob3N0KCk7Ci0gICAgVmVjdG9yPFN0cmlu
Zz4gaG9zdFNwbGl0T25Eb3Q7Ci0gICAgCi0gICAgaG9zdC5zcGxpdCgnLicsIGZhbHNlLCBob3N0
U3BsaXRPbkRvdCk7Ci0KICAgICBTdHJpbmcgcHJpbWFyeURvbWFpbjsKLSAgICBpZiAoaG9zdC5p
c051bGwoKSkKKyAgICBpZiAoaG9zdC5pc051bGwoKSB8fCBob3N0LmlzRW1wdHkoKSkKICAgICAg
ICAgcHJpbWFyeURvbWFpbiA9ICJudWxsT3JpZ2luIjsKKyNpZiBFTkFCTEUoUFVCTElDX1NVRkZJ
WF9MSVNUKQorICAgIGVsc2UgeworICAgICAgICBwcmltYXJ5RG9tYWluID0gdG9wUHJpdmF0ZWx5
Q29udHJvbGxlZERvbWFpbihob3N0KTsKKyAgICAgICAgLy8gV2Ugd2lsbCBoYXZlIGFuIGVtcHR5
IHN0cmluZyBoZXJlIGlmIHRoZXJlIGlzIG5vIFRMRC4KKyAgICAgICAgLy8gVXNlIHRoZSBob3N0
IGluIHN1Y2ggY2FzZS4KKyAgICAgICAgaWYgKHByaW1hcnlEb21haW4uaXNFbXB0eSgpKQorICAg
ICAgICAgICAgcHJpbWFyeURvbWFpbiA9IGhvc3Q7CisgICAgfQorI2Vsc2UKICAgICBlbHNlIGlm
IChob3N0U3BsaXRPbkRvdC5zaXplKCkgPCAzKQogICAgICAgICBwcmltYXJ5RG9tYWluID0gaG9z
dDsKICAgICBlbHNlIHsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gaG9zdFNwbGl0T25Eb3Q7Cisg
ICAgICAgIGhvc3Quc3BsaXQoJy4nLCBmYWxzZSwgaG9zdFNwbGl0T25Eb3QpOworICAgICAgICAK
ICAgICAgICAgLy8gU2tpcCBUTEQgYW5kIHRoZW4gdXAgdG8gdHdvIGRvbWFpbnMgc21hbGxlciB0
aGFuIDQgY2hhcmFjdGVycwogICAgICAgICBpbnQgcHJpbWFyeURvbWFpbkN1dE9mZkluZGV4ID0g
aG9zdFNwbGl0T25Eb3Quc2l6ZSgpIC0gMjsKIApAQCAtMjY2LDYgKzMyMSw3IEBAIFN0cmluZyBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6cHJpbWFyeURvbWEKICAgICAgICAgICAgIHByaW1hcnlEb21h
aW4gPSBidWlsZGVyLnRvU3RyaW5nKCk7CiAgICAgICAgIH0KICAgICB9CisjZW5kaWYKIAogICAg
IHJldHVybiBwcmltYXJ5RG9tYWluOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jl
c291cmNlTG9hZE9ic2VydmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVy
L1Jlc291cmNlTG9hZE9ic2VydmVyLmgJKHJldmlzaW9uIDIwNjc1MykKKysrIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2
ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBG
cmFtZTsKK2NsYXNzIFBhZ2U7CiBjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CiBjbGFzcyBSZXNvdXJj
ZVJlc3BvbnNlOwogY2xhc3MgVVJMOwpAQCAtNDcsNiArNDgsNyBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgdm9pZCBsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgRnJhbWUmIGZyYW1lLCBjb25zdCBGcmFt
ZSYgdG9wRnJhbWUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgbmV3UmVxdWVzdCwgY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSk7CiAgICAgdm9pZCBsb2dTdWJyZXNvdXJj
ZUxvYWRpbmcoY29uc3QgRnJhbWUqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIG5ld1JlcXVlc3Qs
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpOworICAgIHZvaWQgbG9n
V2ViU29ja2V0TG9hZGluZyhjb25zdCBGcmFtZSosIGNvbnN0IFVSTCYpOwogCiAgICAgdm9pZCBs
b2dVc2VySW50ZXJhY3Rpb24oY29uc3QgRG9jdW1lbnQmKTsKICAgICAKQEAgLTU1LDYgKzU3LDcg
QEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzdGF0aXN0aWNzRm9yT3JpZ2lu
KGNvbnN0IFN0cmluZyYpOwogCiBwcml2YXRlOgorICAgIGJvb2wgc2hvdWxkTG9nKFBhZ2UqKTsK
ICAgICBzdGF0aWMgU3RyaW5nIHByaW1hcnlEb21haW4oY29uc3QgVVJMJik7CiAKICAgICBSZWZQ
dHI8UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiBtX3N0b3JlOwpJbmRleDogU291cmNlL1dl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJ
KHJldmlzaW9uIDIwNjc1MykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsNCArMTU0LDE0IEBAIHZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcm9jZXMKICAgICBmb3IgKGF1dG8mIHJl
c291cmNlU3RhdGlzdGljIDogbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAudmFsdWVzKCkpCiAgICAg
ICAgIHByb2Nlc3NGdW5jdGlvbihyZXNvdXJjZVN0YXRpc3RpYyk7CiB9CisKK1ZlY3RvcjxTdHJp
bmc+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJldmFsZW50UmVzb3VyY2VEb21haW5z
V2l0aG91dFVzZXJJbnRlcmFjdGlvbigpCit7CisgICAgVmVjdG9yPFN0cmluZz4gcHJldmFsZW50
UmVzb3VyY2VzOworICAgIGZvciAoYXV0byYgcmVzb3VyY2VTdGF0aXN0aWMgOiBtX3Jlc291cmNl
U3RhdGlzdGljc01hcC52YWx1ZXMoKSkgeworICAgICAgICBpZiAocmVzb3VyY2VTdGF0aXN0aWMu
aXNQcmV2YWxlbnRSZXNvdXJjZSAmJiAhcmVzb3VyY2VTdGF0aXN0aWMuaGFkVXNlckludGVyYWN0
aW9uKQorICAgICAgICAgICAgcHJldmFsZW50UmVzb3VyY2VzLmFwcGVuZChyZXNvdXJjZVN0YXRp
c3RpYy5oaWdoTGV2ZWxEb21haW4pOworICAgIH0KKyAgICByZXR1cm4gcHJldmFsZW50UmVzb3Vy
Y2VzOworfQogfQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAkocmV2aXNpb24gMjA2NzUzKQorKysgU291cmNlL1dlYkNv
cmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC02Myw2ICs2Myw4IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaGFzRW5v
dWdoRGF0YUZvclN0YXRpc3RpY3NQcm9jZXNzaW5nKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBwcm9jZXNzU3RhdGlzdGljcyhzdGQ6OmZ1bmN0aW9uPHZvaWQoUmVzb3VyY2VMb2FkU3RhdGlz
dGljcyYpPiYmKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIFZlY3RvcjxTdHJpbmc+IHByZXZhbGVu
dFJlc291cmNlRG9tYWluc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24oKTsKIHByaXZhdGU6CiAgICAg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKCkgPSBkZWZhdWx0OwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHAJKHJldmlzaW9uIDIwNjc1MykK
KysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE3Myw2ICsxNzMsOSBAQCB2b2lkIFN1YnJlc291cmNlTG9hZGVyOjp3aWxsU2Vu
ZFJlcXVlc3RJCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBpZiAobmV3UmVxdWVzdC5y
ZXF1ZXN0ZXIoKSAhPSBSZXNvdXJjZVJlcXVlc3RCYXNlOjpSZXF1ZXN0ZXI6Ok1haW4pCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWRPYnNlcnZlcigpLmxvZ1N1YnJlc291cmNl
TG9hZGluZyhtX2ZyYW1lLmdldCgpLCBuZXdSZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKTsKKwog
ICAgIEFTU0VSVCghbmV3UmVxdWVzdC5pc051bGwoKSk7CiAgICAgaWYgKCFyZWRpcmVjdFJlc3Bv
bnNlLmlzTnVsbCgpKSB7CiAgICAgICAgIGlmIChvcHRpb25zKCkucmVkaXJlY3QgIT0gRmV0Y2hP
cHRpb25zOjpSZWRpcmVjdDo6Rm9sbG93KSB7CkBAIC0yMjgsOCArMjMxLDYgQEAgdm9pZCBTdWJy
ZXNvdXJjZUxvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0SQogICAgIFJlc291cmNlTG9hZGVyOjp3aWxs
U2VuZFJlcXVlc3RJbnRlcm5hbChuZXdSZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKTsKICAgICBp
ZiAobmV3UmVxdWVzdC5pc051bGwoKSkKICAgICAgICAgY2FuY2VsKCk7Ci0KLSAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5sb2dTdWJyZXNvdXJjZUxvYWRpbmcobV9m
cmFtZS5nZXQoKSwgbmV3UmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7CiB9CiAKIHZvaWQgU3Vi
cmVzb3VyY2VMb2FkZXI6OmRpZFNlbmREYXRhKHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQs
IHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAyMDY3NTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwzMSBAQAorMjAxNi0xMC0wMyAgSm9obiBXaWxhbmRlciAgPHdpbGFuZGVy
QGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGUgUmVzb3VyY2UgTG9hZCBTdGF0aXN0aWNzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI4MTEKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omhhc1ByZXZhbGVudFJlc291cmNlQ2hhcmFj
dGVyaXN0aWNzKToKKyAgICAgICAgICAgIFN3aXRjaGVkIHRvIHZlY3Rvci1iYXNlZCBjbGFzc2lm
aWNhdGlvbi4KKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpjbGFzc2lmeVJlc291cmNlKToKKyAgICAgICAgICAgIFNpbXBsaWZpZWQgbG9naWMgYW5kIG1v
dmVkIHRoZSBzcGxpdCBiZXR3ZWVuIGhhcyBhbmQgaGFzCisgICAgICAgICAgICBubyB1c2VyIGlu
dGVyYWN0aW9uIGludG8gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLgorICAgICAgICAoV2Vi
S2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyRGF0YVJlY29yZHMpOgor
ICAgICAgICAgICAgQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1VwZGF0ZWQpOgorICAgICAgICAgICAg
VXBkYXRlZCB0byBtYWtlIHVzZSBvZiB0aGUgbmV3IGZ1bmN0aW9ucy4KKyAgICAgICAgKFdlYktp
dDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwZXJzaXN0ZW50U3RvcmFnZVBhdGgp
OgorICAgICAgICAgICAgUmVtb3ZlZCBzdHJheSB3aGl0ZXNwYWNlLgorICAgICAgICAoV2ViS2l0
OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OndyaXRlRW5jb2RlclRvRGlzayk6Cisg
ICAgICAgICAgICBSZW1vdmVkIHN0cmF5IHdoaXRlc3BhY2UuCisgICAgICAgIChXZWJLaXQ6Oldl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y3JlYXRlRGVjb2RlckZyb21EaXNrKToKKyAg
ICAgICAgICAgIFJlbW92ZWQgc3RyYXkgd2hpdGVzcGFjZS4KKyAgICAgICAgKFdlYktpdDo6aGFz
UHJldmFsZW50UmVzb3VyY2VDaGFyYWN0ZXJpc3RpY3MpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpjbGFzc2lmeVByZXZhbGVudFJlc291cmNlcyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQ
cm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOgorICAgICAgICAgICAgQWRk
ZWQgbWVtYmVyIHZhcmlhYmxlcyBmb3IgY2xlYXJpbmcgb2YgZGF0YSByZWNvcmRzLgorCiAyMDE2
LTEwLTAzICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHN1
cHBvcnQgZm9yIEtleWJvYXJkRXZlbnQua2V5IGF0dHJpYnV0ZQpJbmRleDogU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS5jcHAJKHJldmlzaW9uIDIwNjc1MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwy
NCArMjYsMjYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUuaCIKIAorI2luY2x1ZGUgIkFQSVdlYnNpdGVEYXRhU3RvcmUuaCIK
ICNpbmNsdWRlICJXZWJQcm9jZXNzTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUG9v
bC5oIgogI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZU1lc3NhZ2VzLmgi
CisjaW5jbHVkZSAiV2Vic2l0ZURhdGFGZXRjaE9wdGlvbi5oIgorI2luY2x1ZGUgIldlYnNpdGVE
YXRhVHlwZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvS2V5ZWRDb2RpbmcuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuaD4KKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRp
bWUuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KICNpbmNsdWRlIDx3dGYvdGhyZWFkcy9C
aW5hcnlTZW1hcGhvcmUuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCi0vLyBTdWIgZnJhbWUgY2xhc3NpZmljYXRpb24gdGhyZXNob2xkcwotc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIHN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNUaHJlc2hvbGQg
PSAzOwotICAgIAotLy8gU3VicmVzb3VyY2UgY2xhc3NpZmljYXRpb24gdGhyZXNob2xkcwotc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnNUaHJlc2hv
bGQgPSA1Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHN1YnJlc291cmNlSGFzQmVlblJlZGlyZWN0
ZWRGcm9tVG9VbmlxdWVEb21haW5zVGhyZXNob2xkID0gMzsKLXN0YXRpYyBjb25zdCB1bnNpZ25l
ZCByZWRpcmVjdGVkVG9PdGhlclByZXZhbGVudFJlc291cmNlT3JpZ2luc1RocmVzaG9sZCA9IDI7
CitzdGF0aWMgY29uc3QgYXV0byBudW1iZXJPZlNlY29uZHNCZXR3ZWVuQ2xlYXJpbmdEYXRhUmVj
b3JkcyA9IDYwMDsKK3N0YXRpYyBjb25zdCBhdXRvIGZlYXR1cmVWZWN0b3JMZW5ndGhUaHJlc2hv
bGQgPSAzOwogCiBSZWY8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNyZWF0ZShjb25zdCBTdHJpbmcmIHJlc291cmNlTG9hZFN0
YXRpc3RpY3NEaXJlY3RvcnkpCiB7CkBAIC01MSw3ICs1Myw3IEBAIFJlZjxXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU+IFdlYlIKIH0KIAogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoY29uc3QgU3RyaW5nJiByZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KQotICAgIDogbV9yZXNvdXJjZVN0YXRpc3RpY3NTdG9y
ZShXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNyZWF0ZSgpKQorICAgIDog
bV9yZXNvdXJjZVN0YXRpc3RpY3NTdG9yZShSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNy
ZWF0ZSgpKQogICAgICwgbV9zdGF0aXN0aWNzUXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoIldlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSBQcm9jZXNzIERhdGEgUXVldWUiKSkKICAgICAsIG1f
c3RvcmFnZVBhdGgocmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSkKIHsKQEAgLTYxLDM3
ICs2MywxMDMgQEAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjp+V2ViUmVzbwogewog
fQogCi1zdGF0aWMgaW5saW5lIGJvb2wgaGFzUHJldmFsZW50UmVzb3VyY2VDaGFyYWN0ZXJpc3Rp
Y3MoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0aWMpCitib29s
IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzUHJldmFsZW50UmVzb3VyY2VDaGFy
YWN0ZXJpc3RpY3MoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0
aWMpCiB7Ci0gICAgcmV0dXJuIHJlc291cmNlU3RhdGlzdGljLnN1YmZyYW1lVW5kZXJUb3BGcmFt
ZU9yaWdpbnMuc2l6ZSgpID4gc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc1RocmVzaG9sZAot
ICAgICAgICB8fCByZXNvdXJjZVN0YXRpc3RpYy5zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmln
aW5zLnNpemUoKSA+IHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnNUaHJlc2hvbGQKLSAg
ICAgICAgfHwgcmVzb3VyY2VTdGF0aXN0aWMuc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby5z
aXplKCkgPiBzdWJyZXNvdXJjZUhhc0JlZW5SZWRpcmVjdGVkRnJvbVRvVW5pcXVlRG9tYWluc1Ro
cmVzaG9sZAotICAgICAgICB8fCByZXNvdXJjZVN0YXRpc3RpYy5yZWRpcmVjdGVkVG9PdGhlclBy
ZXZhbGVudFJlc291cmNlT3JpZ2lucy5zaXplKCkgPiByZWRpcmVjdGVkVG9PdGhlclByZXZhbGVu
dFJlc291cmNlT3JpZ2luc1RocmVzaG9sZDsKKyAgICBhdXRvIHN1YnJlc291cmNlVW5kZXJUb3BG
cmFtZU9yaWdpbnNDb3VudCA9IHJlc291cmNlU3RhdGlzdGljLnN1YnJlc291cmNlVW5kZXJUb3BG
cmFtZU9yaWdpbnMuc2l6ZSgpOworICAgIGF1dG8gc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNU
b0NvdW50ID0gcmVzb3VyY2VTdGF0aXN0aWMuc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby5z
aXplKCk7CisgICAgYXV0byBzdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zQ291bnQgPSByZXNv
dXJjZVN0YXRpc3RpYy5zdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zLnNpemUoKTsKKyAgICAK
KyAgICBpZiAoIXN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnNDb3VudAorICAgICAgICAm
JiAhc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50CisgICAgICAgICYmICFzdWJmcmFt
ZVVuZGVyVG9wRnJhbWVPcmlnaW5zQ291bnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmIChzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zQ291bnQgPiBmZWF0dXJlVmVjdG9y
TGVuZ3RoVGhyZXNob2xkCisgICAgICAgIHx8IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9D
b3VudCA+IGZlYXR1cmVWZWN0b3JMZW5ndGhUaHJlc2hvbGQKKyAgICAgICAgfHwgc3ViZnJhbWVV
bmRlclRvcEZyYW1lT3JpZ2luc0NvdW50ID4gZmVhdHVyZVZlY3Rvckxlbmd0aFRocmVzaG9sZCkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBUaGUgcmVzb3VyY2UgaXMgY29uc2lkZXJl
ZCBwcmV2YWxlbnQgaWYgdGhlIGZlYXR1cmUgdmVjdG9yCisgICAgLy8gaXMgbG9uZ2VyIHRoYW4g
dGhlIHRocmVzaG9sZC4KKyAgICAvLyBWZWN0b3IgbGVuZ3RoIGlzIHNxcnQocG93KGEsIDIpICsg
KC4uLikgKyBwb3cobiwgMikpLgorICAgIGRvdWJsZSB2ZWN0b3JMZW5ndGggPSAwOworICAgIHZl
Y3Rvckxlbmd0aCArPSBwb3coc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50LCAy
KTsKKyAgICB2ZWN0b3JMZW5ndGggKz0gcG93KHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9D
b3VudCwgMik7CisgICAgdmVjdG9yTGVuZ3RoICs9IHBvdyhzdWJmcmFtZVVuZGVyVG9wRnJhbWVP
cmlnaW5zQ291bnQsIDIpOworCisgICAgQVNTRVJUKHZlY3Rvckxlbmd0aCA+IDApOworCisgICAg
cmV0dXJuIHNxcnQodmVjdG9yTGVuZ3RoKSA+IGZlYXR1cmVWZWN0b3JMZW5ndGhUaHJlc2hvbGQ7
CiB9CiAgICAgCi1zdGF0aWMgaW5saW5lIHZvaWQgY2xhc3NpZnlQcmV2YWxlbnRSZXNvdXJjZXMo
UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0aWMsIFZlY3RvcjxTdHJpbmc+
JiBwcmV2YWxlbnRSZXNvdXJjZXMsIFZlY3RvcjxTdHJpbmc+JiBwcmV2YWxlbnRSZXNvdXJjZXNX
aXRoVXNlckludGVyYWN0aW9uKQordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OmNsYXNzaWZ5UmVzb3VyY2UoUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0
aWMpCiB7Ci0gICAgaWYgKHJlc291cmNlU3RhdGlzdGljLmlzUHJldmFsZW50UmVzb3VyY2UgfHwg
aGFzUHJldmFsZW50UmVzb3VyY2VDaGFyYWN0ZXJpc3RpY3MocmVzb3VyY2VTdGF0aXN0aWMpKSB7
CisgICAgaWYgKCFyZXNvdXJjZVN0YXRpc3RpYy5pc1ByZXZhbGVudFJlc291cmNlICYmIGhhc1By
ZXZhbGVudFJlc291cmNlQ2hhcmFjdGVyaXN0aWNzKHJlc291cmNlU3RhdGlzdGljKSkgewogICAg
ICAgICByZXNvdXJjZVN0YXRpc3RpYy5pc1ByZXZhbGVudFJlc291cmNlID0gdHJ1ZTsKLSAgICAg
ICAgaWYgKHJlc291cmNlU3RhdGlzdGljLmhhZFVzZXJJbnRlcmFjdGlvbikKLSAgICAgICAgICAg
IHByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24uYXBwZW5kKHJlc291cmNlU3Rh
dGlzdGljLmhpZ2hMZXZlbERvbWFpbik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHByZXZh
bGVudFJlc291cmNlcy5hcHBlbmQocmVzb3VyY2VTdGF0aXN0aWMuaGlnaExldmVsRG9tYWluKTsK
ICAgICB9CiB9CiAKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhckRh
dGFSZWNvcmRzKCkKK3sKKyAgICBpZiAobV9kYXRhU3RvcmVDbGVhclBlbmRpbmcpCisgICAgICAg
IHJldHVybjsKKworICAgIFZlY3RvcjxTdHJpbmc+IHByZXZhbGVudFJlc291cmNlRG9tYWlucyA9
IGNvcmVTdG9yZSgpLnByZXZhbGVudFJlc291cmNlRG9tYWluc1dpdGhvdXRVc2VySW50ZXJhY3Rp
b24oKTsKKyAgICBpZiAoIXByZXZhbGVudFJlc291cmNlRG9tYWlucy5zaXplKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGRvdWJsZSBub3cgPSBjdXJyZW50VGltZSgpOworICAgIGlmICghbV9s
YXN0VGltZURhdGFSZWNvcmRzV2VyZUNsZWFyZWQpIHsKKyAgICAgICAgbV9sYXN0VGltZURhdGFS
ZWNvcmRzV2VyZUNsZWFyZWQgPSBub3c7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAobm93IDwgKG1fbGFzdFRpbWVEYXRhUmVjb3Jkc1dlcmVDbGVhcmVkICsgbnVtYmVyT2ZTZWNv
bmRzQmV0d2VlbkNsZWFyaW5nRGF0YVJlY29yZHMpKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X2RhdGFTdG9yZUNsZWFyUGVuZGluZyA9IHRydWU7CisgICAgbV9sYXN0VGltZURhdGFSZWNvcmRz
V2VyZUNsZWFyZWQgPSBub3c7CisKKyAgICAvLyBTd2l0Y2ggdG8gdGhlIG1haW4gdGhyZWFkIHRv
IGdldCB0aGUgZGVmYXVsdCB3ZWJzaXRlIGRhdGEgc3RvcmUKKyAgICBSdW5Mb29wOjptYWluKCku
ZGlzcGF0Y2goW3ByZXZhbGVudFJlc291cmNlRG9tYWlucyA9IFdURk1vdmUocHJldmFsZW50UmVz
b3VyY2VEb21haW5zKSwgdGhpc10gKCkgbXV0YWJsZSB7CisgICAgICAgIGF1dG8mIHdlYnNpdGVE
YXRhU3RvcmUgPSBBUEk6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+d2Vi
c2l0ZURhdGFTdG9yZSgpOworCisgICAgICAgIHdlYnNpdGVEYXRhU3RvcmUuZmV0Y2hEYXRhKFdl
YnNpdGVEYXRhVHlwZTo6Q29va2llcywgeyB9LCBbcHJldmFsZW50UmVzb3VyY2VEb21haW5zID0g
V1RGTW92ZShwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMpLCB0aGlzXShhdXRvIHdlYnNpdGVEYXRh
UmVjb3JkcykgeworICAgICAgICAgICAgVmVjdG9yPFdlYnNpdGVEYXRhUmVjb3JkPiBkYXRhUmVj
b3JkczsKKyAgICAgICAgICAgIGZvciAoYXV0byYgd2Vic2l0ZURhdGFSZWNvcmQgOiB3ZWJzaXRl
RGF0YVJlY29yZHMpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIHByZXZhbGVudFJlc291
cmNlRG9tYWluIDogcHJldmFsZW50UmVzb3VyY2VEb21haW5zKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmICh3ZWJzaXRlRGF0YVJlY29yZC5kaXNwbGF5TmFtZS5lbmRzV2l0aElnbm9yaW5nQVND
SUlDYXNlKHByZXZhbGVudFJlc291cmNlRG9tYWluKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgYXV0byBzdWZmaXhTdGFydCA9IHdlYnNpdGVEYXRhUmVjb3JkLmRpc3BsYXlOYW1lLmxlbmd0
aCgpIC0gcHJldmFsZW50UmVzb3VyY2VEb21haW4ubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIXN1ZmZpeFN0YXJ0IHx8IHdlYnNpdGVEYXRhUmVjb3JkLmRpc3BsYXlOYW1l
W3N1ZmZpeFN0YXJ0IC0gMV0gPT0gJy4nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGFSZWNvcmRzLmFwcGVuZCh3ZWJzaXRlRGF0YVJlY29yZCk7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgh
ZGF0YVJlY29yZHMuc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgbV9kYXRhU3RvcmVDbGVhclBl
bmRpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGF1dG8mIHdlYnNpdGVEYXRhU3RvcmUgPSBBUEk6OldlYnNpdGVEYXRhU3Rv
cmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+d2Vic2l0ZURhdGFTdG9yZSgpOworICAgICAgICAgICAg
d2Vic2l0ZURhdGFTdG9yZS5yZW1vdmVEYXRhKFdlYnNpdGVEYXRhVHlwZTo6Q29va2llcywgeyBX
VEZNb3ZlKGRhdGFSZWNvcmRzKSB9LCBbdGhpc10geworICAgICAgICAgICAgICAgIG1fZGF0YVN0
b3JlQ2xlYXJQZW5kaW5nID0gZmFsc2U7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7Cisg
ICAgfSk7Cit9CisKIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzVXBkYXRlZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljcz4mIG9yaWdpbnMpCiB7CiAgICAgY29yZVN0b3JlKCkubWVyZ2VTdGF0aXN0aWNz
KG9yaWdpbnMpOwogCi0gICAgVmVjdG9yPFN0cmluZz4gcHJldmFsZW50UmVzb3VyY2VzLCBwcmV2
YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uOwogICAgIGlmIChjb3JlU3RvcmUoKS5o
YXNFbm91Z2hEYXRhRm9yU3RhdGlzdGljc1Byb2Nlc3NpbmcoKSkgewotICAgICAgICBjb3JlU3Rv
cmUoKS5wcm9jZXNzU3RhdGlzdGljcyhbdGhpcywgJnByZXZhbGVudFJlc291cmNlcywgJnByZXZh
bGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb25dIChSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
JiByZXNvdXJjZVN0YXRpc3RpYykgewotICAgICAgICAgICAgY2xhc3NpZnlQcmV2YWxlbnRSZXNv
dXJjZXMocmVzb3VyY2VTdGF0aXN0aWMsIHByZXZhbGVudFJlc291cmNlcywgcHJldmFsZW50UmVz
b3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbik7CisgICAgICAgIGNvcmVTdG9yZSgpLnByb2Nlc3NT
dGF0aXN0aWNzKFt0aGlzXSAoUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0
aWMpIHsKKyAgICAgICAgICAgIGNsYXNzaWZ5UmVzb3VyY2UocmVzb3VyY2VTdGF0aXN0aWMpOwor
ICAgICAgICAgICAgY2xlYXJEYXRhUmVjb3JkcygpOwogICAgICAgICB9KTsKICAgICB9CiAKLSAg
ICAvLyBGSVhNRTogTm90aWZ5IGluZGl2aWR1YWwgV2ViUHJvY2Vzc2VzIG9mIHByZXZhbGVudCBk
b21haW5zIHVzaW5nIHRoZSB0d28gdmVjdG9ycyBwb3B1bGF0ZWQgYnkgdGhlIGNsYXNzaWZpZXIu
IDxyZGFyOi8vcHJvYmxlbS8yNDcwMzA5OT4KICAgICBhdXRvIGVuY29kZXIgPSBjb3JlU3RvcmUo
KS5jcmVhdGVFbmNvZGVyRnJvbURhdGEoKTsKICAgICAKICAgICB3cml0ZUVuY29kZXJUb0Rpc2so
KmVuY29kZXIuZ2V0KCksICJmdWxsX2Jyb3dzaW5nX3Nlc3Npb24iKTsKQEAgLTE1Miw3ICsyMjAs
NyBAQCBTdHJpbmcgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwCiB7CiAgICAgaWYg
KG1fc3RvcmFnZVBhdGguaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsK
LSAgICAKKwogICAgIC8vIFRPRE8gRGVjaWRlIHdoYXQgdG8gY2FsbCB0aGlzIGZpbGUKICAgICBy
ZXR1cm4gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1fc3RvcmFnZVBhdGgsIGxhYmVsICsgIl9y
ZXNvdXJjZUxvZy5wbGlzdCIpOwogfQpAQCAtMTYyLDIxICsyMzAsMjEgQEAgdm9pZCBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OndyaQogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHJh
d0RhdGEgPSBlbmNvZGVyLmZpbmlzaEVuY29kaW5nKCk7CiAgICAgaWYgKCFyYXdEYXRhKQogICAg
ICAgICByZXR1cm47Ci0gICAgCisKICAgICBTdHJpbmcgcmVzb3VyY2VMb2cgPSBwZXJzaXN0ZW50
U3RvcmFnZVBhdGgobGFiZWwpOwogICAgIGlmIChyZXNvdXJjZUxvZy5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICAKKwogICAgIGlmICghbV9zdG9yYWdlUGF0aC5pc0VtcHR5KCkpCiAg
ICAgICAgIG1ha2VBbGxEaXJlY3RvcmllcyhtX3N0b3JhZ2VQYXRoKTsKLSAgICAKKwogICAgIGF1
dG8gaGFuZGxlID0gb3BlbkZpbGUocmVzb3VyY2VMb2csIE9wZW5Gb3JXcml0ZSk7CiAgICAgaWYg
KCFoYW5kbGUpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBpbnQ2NF90IHdyaXR0ZW5CeXRl
cyA9IHdyaXRlVG9GaWxlKGhhbmRsZSwgcmF3RGF0YS0+ZGF0YSgpLCByYXdEYXRhLT5zaXplKCkp
OwogICAgIGNsb3NlRmlsZShoYW5kbGUpOwotICAgIAorCiAgICAgaWYgKHdyaXR0ZW5CeXRlcyAh
PSBzdGF0aWNfY2FzdDxpbnQ2NF90PihyYXdEYXRhLT5zaXplKCkpKQogICAgICAgICBXVEZMb2dB
bHdheXMoIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTogV2Ugb25seSB3cm90ZSAlZCBv
dXQgb2YgJWQgYnl0ZXMgdG8gZGlzayIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPih3cml0dGVuQnl0
ZXMpLCByYXdEYXRhLT5zaXplKCkpOwogfQpAQCAtMTg2LDExICsyNTQsMTEgQEAgc3RkOjp1bmlx
dWVfcHRyPEtleWVkRGVjb2Rlcj4gV2ViUmVzb3VyYwogICAgIFN0cmluZyByZXNvdXJjZUxvZyA9
IHBlcnNpc3RlbnRTdG9yYWdlUGF0aChsYWJlbCk7CiAgICAgaWYgKHJlc291cmNlTG9nLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCisKICAgICBSZWZQdHI8U2hhcmVk
QnVmZmVyPiByYXdEYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGVXaXRoQ29udGVudHNPZkZpbGUo
cmVzb3VyY2VMb2cpOwogICAgIGlmICghcmF3RGF0YSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgCisKICAgICByZXR1cm4gS2V5ZWREZWNvZGVyOjpkZWNvZGVyKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDhfdCo+KHJhd0RhdGEtPmRhdGEoKSksIHJhd0RhdGEtPnNpemUoKSk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgJKHJldmlzaW9uIDIwNjc1MykKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCiAjaW5j
bHVkZSAiQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIldlYnNpdGVEYXRhUmVjb3JkLmgiCiAjaW5j
bHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaD4KICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC03MSw2ICs3
MiwxMCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZShjb25zdCBTdHJpbmcmKTsKIAorICAgIGJvb2wgaGFzUHJldmFsZW50UmVz
b3VyY2VDaGFyYWN0ZXJpc3RpY3MoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyYpOworICAgIHZvaWQgY2xhc3NpZnlSZXNvdXJjZShXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzJik7CisgICAgdm9pZCBjbGVhckRhdGFSZWNvcmRzKCk7CisKICAgICBTdHJpbmcgcGVy
c2lzdGVudFN0b3JhZ2VQYXRoKGNvbnN0IFN0cmluZyYgbGFiZWwpIGNvbnN0OwogCiAgICAgLy8g
SVBDOjpNZXNzYWdlUmVjZWl2ZXIKQEAgLTgzLDYgKzg4LDkgQEAgcHJpdmF0ZToKICAgICBSZWY8
V1RGOjpXb3JrUXVldWU+IG1fc3RhdGlzdGljc1F1ZXVlOwogICAgIFN0cmluZyBtX3N0b3JhZ2VQ
YXRoOwogICAgIGJvb2wgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCB7IGZhbHNlIH07
CisKKyAgICBkb3VibGUgbV9sYXN0VGltZURhdGFSZWNvcmRzV2VyZUNsZWFyZWQgeyAwIH07Cisg
ICAgYm9vbCBtX2RhdGFTdG9yZUNsZWFyUGVuZGluZyB7IGZhbHNlIH07CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNjc2MSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE2LTEwLTAzICBKb2huIFdpbGFuZGVyICA8d2ls
YW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFVwZGF0ZSBSZXNvdXJjZSBMb2FkIFN0YXRpc3Rp
Y3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mjgx
MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9tYWMvUHVibGljU3VmZml4Lm1tOgorICAgICAgICAgICAgQ2hhbmdl
IGZyb20gVVNFKFBVQkxJQ19TVUZGSVhfTElTVCkgdG8gRU5BQkxFKFBVQkxJQ19TVUZGSVhfTElT
VCkKKwogMjAxNi0xMC0wMyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFVSTFBhcnNlciBzaG91bGQgaWdub3JlIHRhYnMgYXQgYWxsIGxvY2F0
aW9ucwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9tYWMvUHVibGljU3VmZml4Lm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvbWFjL1B1YmxpY1N1ZmZp
eC5tbQkocmV2aXNpb24gMjA2NzUzKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9tYWMv
UHVibGljU3VmZml4Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAKICNpbmNs
dWRlICJjb25maWcuaCIKIAotI2lmIFVTRShQVUJMSUNfU1VGRklYX0xJU1QpCisjaWYgRU5BQkxF
KFBVQkxJQ19TVUZGSVhfTElTVCkKIAogI2luY2x1ZGUgIldURlN0cmluZ1V0aWxpdGllcy5oIgog
I2luY2x1ZGUgPFdlYkNvcmUvUHVibGljU3VmZml4Lmg+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290725</attachid>
            <date>2016-10-05 10:50:24 -0700</date>
            <delta_ts>2016-10-05 12:37:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162811-20161005104713.patch</filename>
            <type>text/plain</type>
            <size>30786</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNjc1MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBACisyMDE2LTEwLTA1ICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFVwZGF0ZSBSZXNvdXJjZSBM
b2FkIFN0YXRpc3RpY3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2MjgxMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhlIGNvdW50aW5nIGlzIGJhc2VkIG9uIHRvcCBwcml2YXRl
bHkgb3duZWQgZG9tYWlucworICAgICAgICB3aGljaCBjdXJyZW50bHkgaXMgbm90IHN1cHBvcnRl
ZCBieSBsYXlvdXQgdGVzdHMgbm9yIEFQSSB0ZXN0cy4KKworICAgICAgICAqIE1vZHVsZXMvd2Vi
c29ja2V0cy9XZWJTb2NrZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Ojpjb25u
ZWN0KToKKyAgICAgICAgICAgIE5vdyBjYXB0dXJlcyBzdGF0aXN0aWNzIGZvciB3ZWIgc29ja2V0
cyB0b28uCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgKiBs
b2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwOgorICAgICAgICAgICAgTm93IGNhcHR1cmVz
IHN0YXRpc3RpY3MgZm9yIHN5bmNocm9ub3VzIFhIUiB0b28uCisgICAgICAgIChXZWJDb3JlOjpp
czN4eFJlZGlyZWN0KToKKyAgICAgICAgICAgIENvbnZlbmllbmNlIGZ1bmN0aW9uLgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNob3VsZExvZyk6CisgICAgICAgICAg
ICBDb252ZW5pZW5jZSBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9i
c2VydmVyOjpsb2dGcmFtZU5hdmlnYXRpb24pOgorICAgICAgICAgICAgVXBkYXRlZCB0byBtYWtl
IHVzZSBvZiBuZXcgY29udmVuaWVuY2UgZnVuY3Rpb25zLgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1N1YnJlc291cmNlTG9hZGluZyk6CisgICAgICAgICAgICBV
cGRhdGVkIHRvIG1ha2UgdXNlIG9mIG5ldyBjb252ZW5pZW5jZSBmdW5jdGlvbnMuCisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nV2ViU29ja2V0TG9hZGluZyk6Cisg
ICAgICAgICAgICBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVy
Ojpsb2dVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAgICAgVXBkYXRlZCB0byBtYWtlIHVzZSBv
ZiBuZXcgY29udmVuaWVuY2UgZnVuY3Rpb25zLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnByaW1hcnlEb21haW4pOgorICAgICAgICAgICAgTm93IG1ha2VzIHVzZSBv
ZiB0aGUgUHVibGljIFN1ZmZpeCBsaXN0LgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRP
YnNlcnZlci5oOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcmV2
YWxlbnRSZXNvdXJjZURvbWFpbnNXaXRob3V0VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgICAg
IENvbnZlbmllbmNlIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpwcm9jZXNzU3RhdGlzdGljcyk6IERlbGV0ZWQuCisgICAgICAgICogbG9h
ZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOgorICAgICAgICAqIGxvYWRlci9TdWJy
ZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcjo6
d2lsbFNlbmRSZXF1ZXN0SW50ZXJuYWwpOgorICAgICAgICAgICAgTW92ZWQgbG9nZ2luZyBjYWxs
IGhpZ2hlciB1cCBhbmQgYWRkZWQgYSBjaGVjayBmb3Igd2hldGhlciB3ZQorICAgICAgICAgICAg
YXJlIGxvYWRpbmcgdGhlIG1haW4gcmVzb3VyY2UuIFRoZSByZWFzb24gZm9yIG1vdmluZyBpdCB1
cCBpcworICAgICAgICAgICAgdG8gY2FwdHVyZSB0aGUgcmVxdWVzdCBiZWZvcmUgc29tZSBkYXRh
IG1heSBiZSBjbGVhcmVkIG91dCBpbgorICAgICAgICAgICAgcmVkaXJlY3QgaGFuZGxpbmcuIFdl
IGFsc28gd2FudCB0byBjYXB0dXJlIGZhaWxlZCBDT1JTIHJlcXVlc3RzCisgICAgICAgICAgICBz
aW5jZSB0aGV5IGFyZSBzZW50IGFuZCB0aGVuIGNhbmNlbGxlZCBvbiB0aGUgd2F5IGJhY2suCisK
IDIwMTYtMTAtMDMgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAg
IFJlbW92ZSBEb2N1bWVudDo6ZWxlbWVudFNoZWV0KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwCShyZXZpc2lvbiAyMDY3NTMpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAi
TG9nZ2luZy5oIgogI2luY2x1ZGUgIk1lc3NhZ2VFdmVudC5oIgorI2luY2x1ZGUgIlJlc291cmNl
TG9hZE9ic2VydmVyLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUg
IlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgpA
QCAtMzE4LDcgKzMxOSw4IEBAIHZvaWQgV2ViU29ja2V0Ojpjb25uZWN0KGNvbnN0IFN0cmluZyYg
dXIKICAgICAgICAgICAgIH0pOwogI2VuZGlmCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkT2JzZXJ2ZXIoKS5sb2dXZWJTb2NrZXRMb2FkaW5nKGRvY3VtZW50LmZyYW1lKCksIG1fdXJs
KTsKICAgICB9CiAKICAgICBTdHJpbmcgcHJvdG9jb2xTdHJpbmc7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDIwNjc1MykKKysrIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDYgKzk3LDcg
QEAKICNpbmNsdWRlICJQcm9ncmVzc1RyYWNrZXIuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRs
ZS5oIgogI2luY2x1ZGUgIlJlc291cmNlTG9hZEluZm8uaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxv
YWRPYnNlcnZlci5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgogI2luY2x1ZGUgIlNW
R0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTG9jYXRhYmxlLmgiCkBAIC0yNzc0LDYgKzI3NzUs
NyBAQCB1bnNpZ25lZCBsb25nIEZyYW1lTG9hZGVyOjpsb2FkUmVzb3VyY2VTCiAgICAgICAgICAg
ICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3koKS0+bG9hZFJlc291cmNlU3lu
Y2hyb25vdXNseShuZXR3b3JraW5nQ29udGV4dCgpLCBpZGVudGlmaWVyLCBuZXdSZXF1ZXN0LCBz
dG9yZWRDcmVkZW50aWFscywgY2xpZW50Q3JlZGVudGlhbFBvbGljeSwgZXJyb3IsIHJlc3BvbnNl
LCBidWZmZXIpOwogICAgICAgICAgICAgZGF0YSA9IFNoYXJlZEJ1ZmZlcjo6YWRvcHRWZWN0b3Io
YnVmZmVyKTsKICAgICAgICAgICAgIGRvY3VtZW50TG9hZGVyKCktPmFwcGxpY2F0aW9uQ2FjaGVI
b3N0KCktPm1heWJlTG9hZEZhbGxiYWNrU3luY2hyb25vdXNseShuZXdSZXF1ZXN0LCBlcnJvciwg
cmVzcG9uc2UsIGRhdGEpOworICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZE9ic2VydmVyKCkubG9nU3VicmVzb3VyY2VMb2FkaW5nKCZtX2ZyYW1lLCBuZXdSZXF1ZXN0LCBy
ZXNwb25zZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgbm90aWZpZXIoKS5zZW5kUmVtYWluaW5n
RGVsZWdhdGVNZXNzYWdlcyhtX2RvY3VtZW50TG9hZGVyLmdldCgpLCBpZGVudGlmaWVyLCByZXF1
ZXN0LCByZXNwb25zZSwgZGF0YSA/IGRhdGEtPmRhdGEoKSA6IG51bGxwdHIsIGRhdGEgPyBkYXRh
LT5zaXplKCkgOiAwLCAtMSwgZXJyb3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jl
c291cmNlTG9hZE9ic2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCShyZXZpc2lvbiAyMDY3NTMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmgiCiAjaW5j
bHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyYXRlZ2llcy5oIgorI2luY2x1ZGUg
IlB1YmxpY1N1ZmZpeC5oIgogI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3MuaCIKICNp
bmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIKICNpbmNsdWRlICJSZXNvdXJj
ZVJlcXVlc3QuaCIKQEAgLTU3LDIzICs1OCwzMSBAQCB2b2lkIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzZXRTdGF0aXN0aWNzCiAgICAgbV9zdG9yZSA9IFdURk1vdmUoc3RvcmUpOwogfQogCi12b2lk
IFJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgRnJhbWUmIGZy
YW1lLCBjb25zdCBGcmFtZSYgdG9wRnJhbWUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgbmV3UmVx
dWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKK3N0YXRpYyBp
bmxpbmUgYm9vbCBpczN4eFJlZGlyZWN0KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNl
KQogewotICAgIGlmICghU2V0dGluZ3M6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKKyAgICByZXR1cm4gcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSAv
IDEwMCA9PSAzOworfQogCi0gICAgaWYgKCFtX3N0b3JlKQotICAgICAgICByZXR1cm47Citib29s
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaG91bGRMb2coUGFnZSogcGFnZSkKK3sKKyAgICAvLyBF
cnIgb24gdGhlIHNhZmUgc2lkZSB1bnRpbCB3ZSBoYXZlIHNvcnRlZCBvdXQgd2hhdCB0byBkbyBp
biB3b3JrZXIgY29udGV4dHMKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gU2V0dGluZ3M6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCkKKyAg
ICAgICAgJiYgIXBhZ2UtPnVzZXNFcGhlbWVyYWxTZXNzaW9uKCkKKyAgICAgICAgJiYgbV9zdG9y
ZTsKK30KIAordm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNv
bnN0IEZyYW1lJiBmcmFtZSwgY29uc3QgRnJhbWUmIHRvcEZyYW1lLCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIG5ld1JlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9u
c2UpCit7CiAgICAgQVNTRVJUKGZyYW1lLmRvY3VtZW50KCkpOwogICAgIEFTU0VSVCh0b3BGcmFt
ZS5kb2N1bWVudCgpKTsKICAgICBBU1NFUlQodG9wRnJhbWUucGFnZSgpKTsKLQotICAgIGJvb2wg
bmVlZFByaXZhY3kgPSB0b3BGcmFtZS5wYWdlKCkgPyB0b3BGcmFtZS5wYWdlKCktPnVzZXNFcGhl
bWVyYWxTZXNzaW9uKCkgOiBmYWxzZTsKLSAgICBpZiAobmVlZFByaXZhY3kpCisgICAgCisgICAg
aWYgKCFzaG91bGRMb2codG9wRnJhbWUucGFnZSgpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
Ym9vbCBpc1JlZGlyZWN0ID0gIXJlZGlyZWN0UmVzcG9uc2UuaXNOdWxsKCk7CisgICAgYm9vbCBp
c1JlZGlyZWN0ID0gaXMzeHhSZWRpcmVjdChyZWRpcmVjdFJlc3BvbnNlKTsKICAgICBib29sIGlz
TWFpbkZyYW1lID0gZnJhbWUuaXNNYWluRnJhbWUoKTsKICAgICBjb25zdCBVUkwmIHNvdXJjZVVS
TCA9IGZyYW1lLmRvY3VtZW50KCktPnVybCgpOwogICAgIGNvbnN0IFVSTCYgdGFyZ2V0VVJMID0g
bmV3UmVxdWVzdC51cmwoKTsKQEAgLTE0OCwxNyArMTU3LDEyIEBAIHZvaWQgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OmxvZ0ZyYW1lTmF2aWcKICAgICAKIHZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OmxvZ1N1YnJlc291cmNlTG9hZGluZyhjb25zdCBGcmFtZSogZnJhbWUsIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgbmV3UmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNw
b25zZSkKIHsKLSAgICBpZiAoIVNldHRpbmdzOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxl
ZCgpKQotICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKGZyYW1lLT5wYWdlKCkpOwogCi0gICAg
aWYgKCFtX3N0b3JlKQorICAgIGlmICghc2hvdWxkTG9nKGZyYW1lLT5wYWdlKCkpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBib29sIG5lZWRQcml2YWN5ID0gKGZyYW1lICYmIGZyYW1lLT5wYWdl
KCkpID8gZnJhbWUtPnBhZ2UoKS0+dXNlc0VwaGVtZXJhbFNlc3Npb24oKSA6IGZhbHNlOwotICAg
IGlmIChuZWVkUHJpdmFjeSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGJvb2wgaXNSZWRp
cmVjdCA9ICFyZWRpcmVjdFJlc3BvbnNlLmlzTnVsbCgpOworICAgIGJvb2wgaXNSZWRpcmVjdCA9
IGlzM3h4UmVkaXJlY3QocmVkaXJlY3RSZXNwb25zZSk7CiAgICAgY29uc3QgVVJMJiBzb3VyY2VV
UkwgPSByZWRpcmVjdFJlc3BvbnNlLnVybCgpOwogICAgIGNvbnN0IFVSTCYgdGFyZ2V0VVJMID0g
bmV3UmVxdWVzdC51cmwoKTsKICAgICBjb25zdCBVUkwmIG1haW5GcmFtZVVSTCA9IGZyYW1lID8g
ZnJhbWUtPm1haW5GcmFtZSgpLmRvY3VtZW50KCktPnVybCgpIDogVVJMKCk7CkBAIC0xNjYsMTQg
KzE3MCwxNyBAQCB2b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dTdWJyZXNvdXJjCiAgICAg
YXV0byB0YXJnZXRIb3N0ID0gdGFyZ2V0VVJMLmhvc3QoKTsKICAgICBhdXRvIG1haW5GcmFtZUhv
c3QgPSBtYWluRnJhbWVVUkwuaG9zdCgpOwogCi0gICAgaWYgKHRhcmdldEhvc3QuaXNFbXB0eSgp
IHx8IG1haW5GcmFtZUhvc3QuaXNFbXB0eSgpIHx8IHRhcmdldEhvc3QgPT0gbWFpbkZyYW1lSG9z
dCB8fCB0YXJnZXRIb3N0ID09IHNvdXJjZVVSTC5ob3N0KCkpCisgICAgaWYgKHRhcmdldEhvc3Qu
aXNFbXB0eSgpCisgICAgICAgIHx8IG1haW5GcmFtZUhvc3QuaXNFbXB0eSgpCisgICAgICAgIHx8
IHRhcmdldEhvc3QgPT0gbWFpbkZyYW1lSG9zdAorICAgICAgICB8fCAoaXNSZWRpcmVjdCAmJiB0
YXJnZXRIb3N0ID09IHNvdXJjZVVSTC5ob3N0KCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBh
dXRvIHRhcmdldFByaW1hcnlEb21haW4gPSBwcmltYXJ5RG9tYWluKHRhcmdldFVSTCk7CiAgICAg
YXV0byBtYWluRnJhbWVQcmltYXJ5RG9tYWluID0gcHJpbWFyeURvbWFpbihtYWluRnJhbWVVUkwp
OwogICAgIGF1dG8gc291cmNlUHJpbWFyeURvbWFpbiA9IHByaW1hcnlEb21haW4oc291cmNlVVJM
KTsKICAgICAKLSAgICBpZiAodGFyZ2V0UHJpbWFyeURvbWFpbiA9PSBtYWluRnJhbWVQcmltYXJ5
RG9tYWluIHx8IHRhcmdldFByaW1hcnlEb21haW4gPT0gc291cmNlUHJpbWFyeURvbWFpbikKKyAg
ICBpZiAodGFyZ2V0UHJpbWFyeURvbWFpbiA9PSBtYWluRnJhbWVQcmltYXJ5RG9tYWluIHx8IChp
c1JlZGlyZWN0ICYmIHRhcmdldFByaW1hcnlEb21haW4gPT0gc291cmNlUHJpbWFyeURvbWFpbikp
CiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8mIHRhcmdldFN0YXRpc3RpY3MgPSBtX3N0b3Jl
LT5lbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHRhcmdldFByaW1hcnlE
b21haW4pOwpAQCAtMjEwLDYyICsyMTcsMTEyIEBAIHZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OmxvZ1N1YnJlc291cmMKICAgICAKICAgICBtX3N0b3JlLT5maXJlRGF0YU1vZGlmaWNhdGlvbkhh
bmRsZXIoKTsKIH0KKwordm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nV2ViU29ja2V0TG9h
ZGluZyhjb25zdCBGcmFtZSogZnJhbWUsIGNvbnN0IFVSTCYgdGFyZ2V0VVJMKQoreworICAgIC8v
IEZJWE1FOiBXZWIgc29ja2V0cyBjYW4gcnVuIGluIGRldGFjaGVkIGZyYW1lcy4gRGVjaWRlIGhv
dyB0byBjb3VudCBzdWNoIGNvbm5lY3Rpb25zLgorICAgIC8vIFNlZSBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3dlYnNvY2tldC9jb25zdHJ1Y3QtaW4tZGV0YWNoZWQtZnJhbWUuaHRtbAorICAgIGlm
ICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghc2hvdWxkTG9nKGZyYW1lLT5w
YWdlKCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBVUkwmIG1haW5GcmFtZVVSTCA9
IGZyYW1lID8gZnJhbWUtPm1haW5GcmFtZSgpLmRvY3VtZW50KCktPnVybCgpIDogVVJMKCk7CisK
KyAgICBhdXRvIHRhcmdldEhvc3QgPSB0YXJnZXRVUkwuaG9zdCgpOworICAgIGF1dG8gbWFpbkZy
YW1lSG9zdCA9IG1haW5GcmFtZVVSTC5ob3N0KCk7CisgICAgCisgICAgaWYgKHRhcmdldEhvc3Qu
aXNFbXB0eSgpCisgICAgICAgIHx8IG1haW5GcmFtZUhvc3QuaXNFbXB0eSgpCisgICAgICAgIHx8
IHRhcmdldEhvc3QgPT0gbWFpbkZyYW1lSG9zdCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IGF1dG8gdGFyZ2V0UHJpbWFyeURvbWFpbiA9IHByaW1hcnlEb21haW4odGFyZ2V0VVJMKTsKKyAg
ICBhdXRvIG1haW5GcmFtZVByaW1hcnlEb21haW4gPSBwcmltYXJ5RG9tYWluKG1haW5GcmFtZVVS
TCk7CisgICAgCisgICAgaWYgKHRhcmdldFByaW1hcnlEb21haW4gPT0gbWFpbkZyYW1lUHJpbWFy
eURvbWFpbikKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byYgdGFyZ2V0U3RhdGlzdGljcyA9
IG1fc3RvcmUtPmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4odGFyZ2V0
UHJpbWFyeURvbWFpbik7CisgICAgCisgICAgYXV0byBtYWluRnJhbWVPcmlnaW4gPSBTZWN1cml0
eU9yaWdpbjo6Y3JlYXRlKG1haW5GcmFtZVVSTCk7CisgICAgdGFyZ2V0U3RhdGlzdGljcy5zdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zLmFkZChtYWluRnJhbWVQcmltYXJ5RG9tYWluKTsK
ICAgICAKKyAgICArK3RhcmdldFN0YXRpc3RpY3Muc3VicmVzb3VyY2VIYXNCZWVuU3VicmVzb3Vy
Y2VDb3VudDsKKyAgICAKKyAgICBhdXRvIHRvdGFsVmlzaXRlZCA9IHN0ZDo6bWF4KG1fb3JpZ2lu
c1Zpc2l0ZWRNYXAuc2l6ZSgpLCAxVSk7CisgICAgCisgICAgdGFyZ2V0U3RhdGlzdGljcy5zdWJy
ZXNvdXJjZUhhc0JlZW5TdWJyZXNvdXJjZUNvdW50RGl2aWRlZEJ5VG90YWxOdW1iZXJPZk9yaWdp
bnNWaXNpdGVkID0gc3RhdGljX2Nhc3Q8ZG91YmxlPih0YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291
cmNlSGFzQmVlblN1YnJlc291cmNlQ291bnQpIC8gdG90YWxWaXNpdGVkOworCisgICAgbV9zdG9y
ZS0+ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7Cit9CisKIHZvaWQgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OmxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQpCiB7
Ci0gICAgaWYgKCFTZXR0aW5nczo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOworICAgIEFTU0VSVChkb2N1bWVudC5wYWdlKCkpOwogCi0gICAgaWYgKCFt
X3N0b3JlKQorICAgIGlmICghc2hvdWxkTG9nKGRvY3VtZW50LnBhZ2UoKSkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGJvb2wgbmVlZFByaXZhY3kgPSBkb2N1bWVudC5wYWdlKCkgPyBkb2N1bWVu
dC5wYWdlKCktPnVzZXNFcGhlbWVyYWxTZXNzaW9uKCkgOiBmYWxzZTsKLSAgICBpZiAobmVlZFBy
aXZhY3kpCisgICAgYXV0byYgdXJsID0gZG9jdW1lbnQudXJsKCk7CisKKyAgICBpZiAodXJsLmlz
QmxhbmtVUkwoKSB8fCB1cmwuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRv
JiBzdGF0aXN0aWNzID0gbV9zdG9yZS0+ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFy
eURvbWFpbihwcmltYXJ5RG9tYWluKGRvY3VtZW50LnVybCgpKSk7CisgICAgYXV0byYgc3RhdGlz
dGljcyA9IG1fc3RvcmUtPmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4o
cHJpbWFyeURvbWFpbih1cmwpKTsKICAgICBzdGF0aXN0aWNzLmhhZFVzZXJJbnRlcmFjdGlvbiA9
IHRydWU7CiAgICAgbV9zdG9yZS0+ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CiB9CiAg
ICAgCiBTdHJpbmcgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnByaW1hcnlEb21haW4oY29uc3QgVVJM
JiB1cmwpCiB7Ci0gICAgU3RyaW5nIGhvc3QgPSB1cmwuaG9zdCgpOwotICAgIFZlY3RvcjxTdHJp
bmc+IGhvc3RTcGxpdE9uRG90OwotICAgIAotICAgIGhvc3Quc3BsaXQoJy4nLCBmYWxzZSwgaG9z
dFNwbGl0T25Eb3QpOwotCiAgICAgU3RyaW5nIHByaW1hcnlEb21haW47Ci0gICAgaWYgKGhvc3Qu
aXNOdWxsKCkpCisgICAgU3RyaW5nIGhvc3QgPSB1cmwuaG9zdCgpOworICAgIGlmIChob3N0Lmlz
TnVsbCgpIHx8IGhvc3QuaXNFbXB0eSgpKQogICAgICAgICBwcmltYXJ5RG9tYWluID0gIm51bGxP
cmlnaW4iOwotICAgIGVsc2UgaWYgKGhvc3RTcGxpdE9uRG90LnNpemUoKSA8IDMpCi0gICAgICAg
IHByaW1hcnlEb21haW4gPSBob3N0OworI2lmIEVOQUJMRShQVUJMSUNfU1VGRklYX0xJU1QpCiAg
ICAgZWxzZSB7Ci0gICAgICAgIC8vIFNraXAgVExEIGFuZCB0aGVuIHVwIHRvIHR3byBkb21haW5z
IHNtYWxsZXIgdGhhbiA0IGNoYXJhY3RlcnMKLSAgICAgICAgaW50IHByaW1hcnlEb21haW5DdXRP
ZmZJbmRleCA9IGhvc3RTcGxpdE9uRG90LnNpemUoKSAtIDI7Ci0KLSAgICAgICAgLy8gU3RhcnQg
d2l0aCBUTEQgYXMgYSBnaXZlbiBwYXJ0Ci0gICAgICAgIHNpemVfdCBudW1iZXJPZlBhcnRzID0g
MTsKLSAgICAgICAgZm9yICg7IHByaW1hcnlEb21haW5DdXRPZmZJbmRleCA+PSAwOyAtLXByaW1h
cnlEb21haW5DdXRPZmZJbmRleCkgewotICAgICAgICAgICAgKytudW1iZXJPZlBhcnRzOwotCi0g
ICAgICAgICAgICAvLyBXZSBoYXZlIGVpdGhlciBhIGRvbWFpbiBwYXJ0IHRoYXQncyA0IGNoYXJz
IG9yIGxvbmdlciwgb3IgMyBkb21haW4gcGFydHMgaW5jbHVkaW5nIFRMRAotICAgICAgICAgICAg
aWYgKGhvc3RTcGxpdE9uRG90LmF0KHByaW1hcnlEb21haW5DdXRPZmZJbmRleCkubGVuZ3RoKCkg
Pj0gNCB8fCBudW1iZXJPZlBhcnRzID49IDMpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAocHJpbWFyeURvbWFpbkN1dE9mZkluZGV4IDwgMCkKKyAgICAg
ICAgcHJpbWFyeURvbWFpbiA9IHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW4oaG9zdCk7Cisg
ICAgICAgIC8vIFdlIHdpbGwgaGF2ZSBhbiBlbXB0eSBzdHJpbmcgaGVyZSBpZiB0aGVyZSBpcyBu
byBUTEQuCisgICAgICAgIC8vIFVzZSB0aGUgaG9zdCBpbiBzdWNoIGNhc2UuCisgICAgICAgIGlm
IChwcmltYXJ5RG9tYWluLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHByaW1hcnlEb21haW4gPSBo
b3N0OworICAgIH0KKyNlbHNlCisgICAgZWxzZSB7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IGhv
c3RTcGxpdE9uRG90OworICAgICAgICBob3N0LnNwbGl0KCcuJywgZmFsc2UsIGhvc3RTcGxpdE9u
RG90KTsKKyAgICAgICAgaWYgKGhvc3RTcGxpdE9uRG90LnNpemUoKSA8IDMpCiAgICAgICAgICAg
ICBwcmltYXJ5RG9tYWluID0gaG9zdDsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBTdHJp
bmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZChob3N0U3BsaXRP
bkRvdC5hdChwcmltYXJ5RG9tYWluQ3V0T2ZmSW5kZXgpKTsKLSAgICAgICAgICAgIGZvciAoc2l6
ZV90IGogPSBwcmltYXJ5RG9tYWluQ3V0T2ZmSW5kZXggKyAxOyBqIDwgaG9zdFNwbGl0T25Eb3Qu
c2l6ZSgpOyArK2opIHsKLSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnLicpOwotICAg
ICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGhvc3RTcGxpdE9uRG90W2pdKTsKKyAgICAgICAg
ICAgIC8vIFNraXAgVExEIGFuZCB0aGVuIHVwIHRvIHR3byBkb21haW5zIHNtYWxsZXIgdGhhbiA0
IGNoYXJhY3RlcnMKKyAgICAgICAgICAgIGludCBwcmltYXJ5RG9tYWluQ3V0T2ZmSW5kZXggPSBo
b3N0U3BsaXRPbkRvdC5zaXplKCkgLSAyOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBT
dGFydCB3aXRoIFRMRCBhcyBhIGdpdmVuIHBhcnQKKyAgICAgICAgICAgIHNpemVfdCBudW1iZXJP
ZlBhcnRzID0gMTsKKyAgICAgICAgICAgIGZvciAoOyBwcmltYXJ5RG9tYWluQ3V0T2ZmSW5kZXgg
Pj0gMDsgLS1wcmltYXJ5RG9tYWluQ3V0T2ZmSW5kZXgpIHsKKyAgICAgICAgICAgICAgICArK251
bWJlck9mUGFydHM7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gV2UgaGF2
ZSBlaXRoZXIgYSBkb21haW4gcGFydCB0aGF0J3MgNCBjaGFycyBvciBsb25nZXIsIG9yIDMgZG9t
YWluIHBhcnRzIGluY2x1ZGluZyBUTEQKKyAgICAgICAgICAgICAgICBpZiAoaG9zdFNwbGl0T25E
b3QuYXQocHJpbWFyeURvbWFpbkN1dE9mZkluZGV4KS5sZW5ndGgoKSA+PSA0IHx8IG51bWJlck9m
UGFydHMgPj0gMykKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChwcmltYXJ5RG9tYWluQ3V0T2ZmSW5kZXggPCAw
KQorICAgICAgICAgICAgICAgIHByaW1hcnlEb21haW4gPSBob3N0OworICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgICAgICAgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKGhvc3RTcGxpdE9uRG90LmF0KHByaW1hcnlEb21haW5DdXRPZmZJ
bmRleCkpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSBwcmltYXJ5RG9tYWluQ3V0
T2ZmSW5kZXggKyAxOyBqIDwgaG9zdFNwbGl0T25Eb3Quc2l6ZSgpOyArK2opIHsKKyAgICAgICAg
ICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJy4nKTsKKyAgICAgICAgICAgICAgICAgICAgYnVp
bGRlci5hcHBlbmQoaG9zdFNwbGl0T25Eb3Rbal0pOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBwcmltYXJ5RG9tYWluID0gYnVpbGRlci50b1N0cmluZygpOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgcHJpbWFyeURvbWFpbiA9IGJ1aWxkZXIudG9TdHJpbmcoKTsKICAg
ICAgICAgfQogICAgIH0KKyNlbmRpZgogCiAgICAgcmV0dXJuIHByaW1hcnlEb21haW47CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaAkocmV2
aXNpb24gMjA2NzUzKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2Vy
dmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEZyYW1lOworY2xhc3MgUGFnZTsKIGNsYXNzIFJl
c291cmNlUmVxdWVzdDsKIGNsYXNzIFJlc291cmNlUmVzcG9uc2U7CiBjbGFzcyBVUkw7CkBAIC00
Nyw2ICs0OCw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGxvZ0ZyYW1lTmF2aWdhdGlvbihj
b25zdCBGcmFtZSYgZnJhbWUsIGNvbnN0IEZyYW1lJiB0b3BGcmFtZSwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiBuZXdSZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3Bv
bnNlKTsKICAgICB2b2lkIGxvZ1N1YnJlc291cmNlTG9hZGluZyhjb25zdCBGcmFtZSosIGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgbmV3UmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVk
aXJlY3RSZXNwb25zZSk7CisgICAgdm9pZCBsb2dXZWJTb2NrZXRMb2FkaW5nKGNvbnN0IEZyYW1l
KiwgY29uc3QgVVJMJik7CiAKICAgICB2b2lkIGxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBEb2N1
bWVudCYpOwogICAgIApAQCAtNTUsNiArNTcsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBP
UlQgU3RyaW5nIHN0YXRpc3RpY3NGb3JPcmlnaW4oY29uc3QgU3RyaW5nJik7CiAKIHByaXZhdGU6
CisgICAgYm9vbCBzaG91bGRMb2coUGFnZSopOwogICAgIHN0YXRpYyBTdHJpbmcgcHJpbWFyeURv
bWFpbihjb25zdCBVUkwmKTsKIAogICAgIFJlZlB0cjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU+IG1fc3RvcmU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAkocmV2aXNpb24gMjA2NzUzKQorKysgU291cmNl
L1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE1NCw0ICsxNTQsMTQgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnByb2NlcwogICAgIGZvciAoYXV0byYgcmVzb3VyY2VTdGF0aXN0aWMgOiBtX3Jlc291cmNl
U3RhdGlzdGljc01hcC52YWx1ZXMoKSkKICAgICAgICAgcHJvY2Vzc0Z1bmN0aW9uKHJlc291cmNl
U3RhdGlzdGljKTsKIH0KKworVmVjdG9yPFN0cmluZz4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnNXaXRob3V0VXNlckludGVyYWN0aW9uKCkKK3sK
KyAgICBWZWN0b3I8U3RyaW5nPiBwcmV2YWxlbnRSZXNvdXJjZXM7CisgICAgZm9yIChhdXRvJiBy
ZXNvdXJjZVN0YXRpc3RpYyA6IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnZhbHVlcygpKSB7Cisg
ICAgICAgIGlmIChyZXNvdXJjZVN0YXRpc3RpYy5pc1ByZXZhbGVudFJlc291cmNlICYmICFyZXNv
dXJjZVN0YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb24pCisgICAgICAgICAgICBwcmV2YWxlbnRS
ZXNvdXJjZXMuYXBwZW5kKHJlc291cmNlU3RhdGlzdGljLmhpZ2hMZXZlbERvbWFpbik7CisgICAg
fQorICAgIHJldHVybiBwcmV2YWxlbnRSZXNvdXJjZXM7Cit9CiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCShyZXZp
c2lvbiAyMDY3NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDggQEAgcHVibGljOgogCiAg
ICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBoYXNFbm91Z2hEYXRhRm9yU3RhdGlzdGljc1Byb2Nlc3Np
bmcoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHByb2Nlc3NTdGF0aXN0aWNzKHN0ZDo6ZnVu
Y3Rpb248dm9pZChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik+JiYpOworCisgICAgV0VCQ09SRV9F
WFBPUlQgVmVjdG9yPFN0cmluZz4gcHJldmFsZW50UmVzb3VyY2VEb21haW5zV2l0aG91dFVzZXJJ
bnRlcmFjdGlvbigpOwogcHJpdmF0ZToKICAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUo
KSA9IGRlZmF1bHQ7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxv
YWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNl
TG9hZGVyLmNwcAkocmV2aXNpb24gMjA2NzUzKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1
YnJlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTczLDYgKzE3Myw5IEBAIHZv
aWQgU3VicmVzb3VyY2VMb2FkZXI6OndpbGxTZW5kUmVxdWVzdEkKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAorICAgIGlmIChuZXdSZXF1ZXN0LnJlcXVlc3RlcigpICE9IFJlc291cmNlUmVxdWVz
dEJhc2U6OlJlcXVlc3Rlcjo6TWFpbikKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZE9ic2VydmVyKCkubG9nU3VicmVzb3VyY2VMb2FkaW5nKG1fZnJhbWUuZ2V0KCksIG5ld1Jl
cXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpOworCiAgICAgQVNTRVJUKCFuZXdSZXF1ZXN0LmlzTnVs
bCgpKTsKICAgICBpZiAoIXJlZGlyZWN0UmVzcG9uc2UuaXNOdWxsKCkpIHsKICAgICAgICAgaWYg
KG9wdGlvbnMoKS5yZWRpcmVjdCAhPSBGZXRjaE9wdGlvbnM6OlJlZGlyZWN0OjpGb2xsb3cpIHsK
QEAgLTIyOCw4ICsyMzEsNiBAQCB2b2lkIFN1YnJlc291cmNlTG9hZGVyOjp3aWxsU2VuZFJlcXVl
c3RJCiAgICAgUmVzb3VyY2VMb2FkZXI6OndpbGxTZW5kUmVxdWVzdEludGVybmFsKG5ld1JlcXVl
c3QsIHJlZGlyZWN0UmVzcG9uc2UpOwogICAgIGlmIChuZXdSZXF1ZXN0LmlzTnVsbCgpKQogICAg
ICAgICBjYW5jZWwoKTsKLQotICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWRPYnNlcnZl
cigpLmxvZ1N1YnJlc291cmNlTG9hZGluZyhtX2ZyYW1lLmdldCgpLCBuZXdSZXF1ZXN0LCByZWRp
cmVjdFJlc3BvbnNlKTsKIH0KIAogdm9pZCBTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkU2VuZERhdGEo
dW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0
ZXNUb0JlU2VudCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNjc1MykKKysrIFNvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDE2LTEw
LTA1ICBKb2huIFdpbGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFVwZGF0
ZSBSZXNvdXJjZSBMb2FkIFN0YXRpc3RpY3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2MjgxMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6aGFzUHJldmFsZW50UmVzb3VyY2VDaGFyYWN0ZXJpc3RpY3MpOgorICAgICAgICAgICAgU3dp
dGNoZWQgdG8gdmVjdG9yLWJhc2VkIGNsYXNzaWZpY2F0aW9uLgorICAgICAgICAoV2ViS2l0OjpX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsYXNzaWZ5UmVzb3VyY2UpOgorICAgICAg
ICAgICAgU2ltcGxpZmllZCBsb2dpYyBhbmQgbW92ZWQgdGhlIHNwbGl0IGJldHdlZW4gaGFzIGFu
ZCBoYXMKKyAgICAgICAgICAgIG5vIHVzZXIgaW50ZXJhY3Rpb24gaW50byBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUuCisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6Y2xlYXJEYXRhUmVjb3Jkcyk6CisgICAgICAgICAgICBBZGRlZC4KKyAgICAgICAg
KFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXNvdXJjZUxvYWRTdGF0
aXN0aWNzVXBkYXRlZCk6CisgICAgICAgICAgICBVcGRhdGVkIHRvIG1ha2UgdXNlIG9mIHRoZSBu
ZXcgZnVuY3Rpb25zLgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OnBlcnNpc3RlbnRTdG9yYWdlUGF0aCk6CisgICAgICAgICAgICBSZW1vdmVkIHN0cmF5
IHdoaXRlc3BhY2UuCisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6d3JpdGVFbmNvZGVyVG9EaXNrKToKKyAgICAgICAgICAgIFJlbW92ZWQgc3RyYXkgd2hp
dGVzcGFjZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpjcmVhdGVEZWNvZGVyRnJvbURpc2spOgorICAgICAgICAgICAgUmVtb3ZlZCBzdHJheSB3aGl0
ZXNwYWNlLgorICAgICAgICAoV2ViS2l0OjpoYXNQcmV2YWxlbnRSZXNvdXJjZUNoYXJhY3Rlcmlz
dGljcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OmNsYXNzaWZ5UHJldmFsZW50UmVzb3Vy
Y2VzKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlLmg6CisgICAgICAgICAgICBBZGRlZCBtZW1iZXIgdmFyaWFibGVzIGZvciBjbGVh
cmluZyBvZiBkYXRhIHJlY29yZHMuCisKIDIwMTYtMTAtMDMgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgc3VwcG9ydCBmb3IgS2V5Ym9hcmRFdmVudC5rZXkg
YXR0cmlidXRlCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAkocmV2aXNpb24gMjA2NzUzKQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDI0ICsyNiwyNiBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oIgogCisjaW5j
bHVkZSAiQVBJV2Vic2l0ZURhdGFTdG9yZS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NNZXNzYWdl
cy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCiAjaW5jbHVkZSAiV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJzaXRlRGF0YUZldGNo
T3B0aW9uLmgiCisjaW5jbHVkZSAiV2Vic2l0ZURhdGFUeXBlLmgiCiAjaW5jbHVkZSA8V2ViQ29y
ZS9LZXllZENvZGluZy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cy5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhy
ZWFkLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvUnVuTG9v
cC5oPgogI2luY2x1ZGUgPHd0Zi90aHJlYWRzL0JpbmFyeVNlbWFwaG9yZS5oPgogCiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLS8vIFN1YiBmcmFtZSBj
bGFzc2lmaWNhdGlvbiB0aHJlc2hvbGRzCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc3ViZnJhbWVV
bmRlclRvcEZyYW1lT3JpZ2luc1RocmVzaG9sZCA9IDM7Ci0gICAgCi0vLyBTdWJyZXNvdXJjZSBj
bGFzc2lmaWNhdGlvbiB0aHJlc2hvbGRzCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc3VicmVzb3Vy
Y2VVbmRlclRvcEZyYW1lT3JpZ2luc1RocmVzaG9sZCA9IDU7Ci1zdGF0aWMgY29uc3QgdW5zaWdu
ZWQgc3VicmVzb3VyY2VIYXNCZWVuUmVkaXJlY3RlZEZyb21Ub1VuaXF1ZURvbWFpbnNUaHJlc2hv
bGQgPSAzOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHJlZGlyZWN0ZWRUb090aGVyUHJldmFsZW50
UmVzb3VyY2VPcmlnaW5zVGhyZXNob2xkID0gMjsKK3N0YXRpYyBjb25zdCBhdXRvIG51bWJlck9m
U2Vjb25kc0JldHdlZW5DbGVhcmluZ0RhdGFSZWNvcmRzID0gNjAwOworc3RhdGljIGNvbnN0IGF1
dG8gZmVhdHVyZVZlY3Rvckxlbmd0aFRocmVzaG9sZCA9IDM7CiAKIFJlZjxXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU+IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y3JlYXRl
KGNvbnN0IFN0cmluZyYgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSkKIHsKQEAgLTUx
LDcgKzUzLDcgQEAgUmVmPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4gV2ViUgogfQog
CiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OldlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZShjb25zdCBTdHJpbmcmIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpCi0g
ICAgOiBtX3Jlc291cmNlU3RhdGlzdGljc1N0b3JlKFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6Y3JlYXRlKCkpCisgICAgOiBtX3Jlc291cmNlU3RhdGlzdGljc1N0b3JlKFJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y3JlYXRlKCkpCiAgICAgLCBtX3N0YXRpc3RpY3NR
dWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlIFBy
b2Nlc3MgRGF0YSBRdWV1ZSIpKQogICAgICwgbV9zdG9yYWdlUGF0aChyZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGlyZWN0b3J5KQogewpAQCAtNjEsMzcgKzYzLDEwMyBAQCBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6On5XZWJSZXNvCiB7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBoYXNQ
cmV2YWxlbnRSZXNvdXJjZUNoYXJhY3RlcmlzdGljcyhjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzJiByZXNvdXJjZVN0YXRpc3RpYykKK2Jvb2wgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpoYXNQcmV2YWxlbnRSZXNvdXJjZUNoYXJhY3RlcmlzdGljcyhjb25zdCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzJiByZXNvdXJjZVN0YXRpc3RpYykKIHsKLSAgICByZXR1cm4gcmVzb3VyY2VT
dGF0aXN0aWMuc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucy5zaXplKCkgPiBzdWJmcmFtZVVu
ZGVyVG9wRnJhbWVPcmlnaW5zVGhyZXNob2xkCi0gICAgICAgIHx8IHJlc291cmNlU3RhdGlzdGlj
LnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMuc2l6ZSgpID4gc3VicmVzb3VyY2VVbmRl
clRvcEZyYW1lT3JpZ2luc1RocmVzaG9sZAotICAgICAgICB8fCByZXNvdXJjZVN0YXRpc3RpYy5z
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnNpemUoKSA+IHN1YnJlc291cmNlSGFzQmVlblJl
ZGlyZWN0ZWRGcm9tVG9VbmlxdWVEb21haW5zVGhyZXNob2xkCi0gICAgICAgIHx8IHJlc291cmNl
U3RhdGlzdGljLnJlZGlyZWN0ZWRUb090aGVyUHJldmFsZW50UmVzb3VyY2VPcmlnaW5zLnNpemUo
KSA+IHJlZGlyZWN0ZWRUb090aGVyUHJldmFsZW50UmVzb3VyY2VPcmlnaW5zVGhyZXNob2xkOwor
ICAgIGF1dG8gc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50ID0gcmVzb3VyY2VT
dGF0aXN0aWMuc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lucy5zaXplKCk7CisgICAgYXV0
byBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQgPSByZXNvdXJjZVN0YXRpc3RpYy5z
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnNpemUoKTsKKyAgICBhdXRvIHN1YmZyYW1lVW5k
ZXJUb3BGcmFtZU9yaWdpbnNDb3VudCA9IHJlc291cmNlU3RhdGlzdGljLnN1YmZyYW1lVW5kZXJU
b3BGcmFtZU9yaWdpbnMuc2l6ZSgpOworICAgIAorICAgIGlmICghc3VicmVzb3VyY2VVbmRlclRv
cEZyYW1lT3JpZ2luc0NvdW50CisgICAgICAgICYmICFzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
c1RvQ291bnQKKyAgICAgICAgJiYgIXN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNDb3VudCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHN1YnJlc291cmNlVW5kZXJUb3BGcmFt
ZU9yaWdpbnNDb3VudCA+IGZlYXR1cmVWZWN0b3JMZW5ndGhUaHJlc2hvbGQKKyAgICAgICAgfHwg
c3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50ID4gZmVhdHVyZVZlY3Rvckxlbmd0aFRo
cmVzaG9sZAorICAgICAgICB8fCBzdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zQ291bnQgPiBm
ZWF0dXJlVmVjdG9yTGVuZ3RoVGhyZXNob2xkKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IC8vIFRoZSByZXNvdXJjZSBpcyBjb25zaWRlcmVkIHByZXZhbGVudCBpZiB0aGUgZmVhdHVyZSB2
ZWN0b3IKKyAgICAvLyBpcyBsb25nZXIgdGhhbiB0aGUgdGhyZXNob2xkLgorICAgIC8vIFZlY3Rv
ciBsZW5ndGggaXMgc3FydChwb3coYSwgMikgKyAoLi4uKSArIHBvdyhuLCAyKSkuCisgICAgZG91
YmxlIHZlY3Rvckxlbmd0aCA9IDA7CisgICAgdmVjdG9yTGVuZ3RoICs9IHBvdyhzdWJyZXNvdXJj
ZVVuZGVyVG9wRnJhbWVPcmlnaW5zQ291bnQsIDIpOworICAgIHZlY3Rvckxlbmd0aCArPSBwb3co
c3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50LCAyKTsKKyAgICB2ZWN0b3JMZW5ndGgg
Kz0gcG93KHN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNDb3VudCwgMik7CisKKyAgICBBU1NF
UlQodmVjdG9yTGVuZ3RoID4gMCk7CisKKyAgICByZXR1cm4gc3FydCh2ZWN0b3JMZW5ndGgpID4g
ZmVhdHVyZVZlY3Rvckxlbmd0aFRocmVzaG9sZDsKIH0KICAgICAKLXN0YXRpYyBpbmxpbmUgdm9p
ZCBjbGFzc2lmeVByZXZhbGVudFJlc291cmNlcyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiByZXNv
dXJjZVN0YXRpc3RpYywgVmVjdG9yPFN0cmluZz4mIHByZXZhbGVudFJlc291cmNlcywgVmVjdG9y
PFN0cmluZz4mIHByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24pCit2b2lkIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xhc3NpZnlSZXNvdXJjZShSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzJiByZXNvdXJjZVN0YXRpc3RpYykKIHsKLSAgICBpZiAocmVzb3VyY2VTdGF0
aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJjZSB8fCBoYXNQcmV2YWxlbnRSZXNvdXJjZUNoYXJhY3Rl
cmlzdGljcyhyZXNvdXJjZVN0YXRpc3RpYykpIHsKKyAgICBpZiAoIXJlc291cmNlU3RhdGlzdGlj
LmlzUHJldmFsZW50UmVzb3VyY2UgJiYgaGFzUHJldmFsZW50UmVzb3VyY2VDaGFyYWN0ZXJpc3Rp
Y3MocmVzb3VyY2VTdGF0aXN0aWMpKSB7CiAgICAgICAgIHJlc291cmNlU3RhdGlzdGljLmlzUHJl
dmFsZW50UmVzb3VyY2UgPSB0cnVlOwotICAgICAgICBpZiAocmVzb3VyY2VTdGF0aXN0aWMuaGFk
VXNlckludGVyYWN0aW9uKQotICAgICAgICAgICAgcHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJ
bnRlcmFjdGlvbi5hcHBlbmQocmVzb3VyY2VTdGF0aXN0aWMuaGlnaExldmVsRG9tYWluKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgcHJldmFsZW50UmVzb3VyY2VzLmFwcGVuZChyZXNvdXJj
ZVN0YXRpc3RpYy5oaWdoTGV2ZWxEb21haW4pOwogICAgIH0KIH0KIAordm9pZCBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyRGF0YVJlY29yZHMoKQoreworICAgIGlmIChtX2Rh
dGFTdG9yZUNsZWFyUGVuZGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVjdG9yPFN0cmlu
Zz4gcHJldmFsZW50UmVzb3VyY2VEb21haW5zID0gY29yZVN0b3JlKCkucHJldmFsZW50UmVzb3Vy
Y2VEb21haW5zV2l0aG91dFVzZXJJbnRlcmFjdGlvbigpOworICAgIGlmICghcHJldmFsZW50UmVz
b3VyY2VEb21haW5zLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZG91YmxlIG5vdyA9
IGN1cnJlbnRUaW1lKCk7CisgICAgaWYgKCFtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlQ2xlYXJl
ZCkgeworICAgICAgICBtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlQ2xlYXJlZCA9IG5vdzsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChub3cgPCAobV9sYXN0VGltZURhdGFSZWNv
cmRzV2VyZUNsZWFyZWQgKyBudW1iZXJPZlNlY29uZHNCZXR3ZWVuQ2xlYXJpbmdEYXRhUmVjb3Jk
cykpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZGF0YVN0b3JlQ2xlYXJQZW5kaW5nID0gdHJ1
ZTsKKyAgICBtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlQ2xlYXJlZCA9IG5vdzsKKworICAgIC8v
IFN3aXRjaCB0byB0aGUgbWFpbiB0aHJlYWQgdG8gZ2V0IHRoZSBkZWZhdWx0IHdlYnNpdGUgZGF0
YSBzdG9yZQorICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJldmFsZW50UmVzb3VyY2VE
b21haW5zID0gV1RGTW92ZShwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMpLCB0aGlzXSAoKSBtdXRh
YmxlIHsKKyAgICAgICAgYXV0byYgd2Vic2l0ZURhdGFTdG9yZSA9IEFQSTo6V2Vic2l0ZURhdGFT
dG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT53ZWJzaXRlRGF0YVN0b3JlKCk7CisKKyAgICAgICAg
d2Vic2l0ZURhdGFTdG9yZS5mZXRjaERhdGEoV2Vic2l0ZURhdGFUeXBlOjpDb29raWVzLCB7IH0s
IFtwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMgPSBXVEZNb3ZlKHByZXZhbGVudFJlc291cmNlRG9t
YWlucyksIHRoaXNdKGF1dG8gd2Vic2l0ZURhdGFSZWNvcmRzKSB7CisgICAgICAgICAgICBWZWN0
b3I8V2Vic2l0ZURhdGFSZWNvcmQ+IGRhdGFSZWNvcmRzOworICAgICAgICAgICAgZm9yIChhdXRv
JiB3ZWJzaXRlRGF0YVJlY29yZCA6IHdlYnNpdGVEYXRhUmVjb3JkcykgeworICAgICAgICAgICAg
ICAgIGZvciAoYXV0byYgcHJldmFsZW50UmVzb3VyY2VEb21haW4gOiBwcmV2YWxlbnRSZXNvdXJj
ZURvbWFpbnMpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHdlYnNpdGVEYXRhUmVjb3JkLmRp
c3BsYXlOYW1lLmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UocHJldmFsZW50UmVzb3VyY2VEb21h
aW4pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHN1ZmZpeFN0YXJ0ID0gd2Vic2l0
ZURhdGFSZWNvcmQuZGlzcGxheU5hbWUubGVuZ3RoKCkgLSBwcmV2YWxlbnRSZXNvdXJjZURvbWFp
bi5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3VmZml4U3RhcnQgfHwg
d2Vic2l0ZURhdGFSZWNvcmQuZGlzcGxheU5hbWVbc3VmZml4U3RhcnQgLSAxXSA9PSAnLicpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVJlY29yZHMuYXBwZW5kKHdlYnNpdGVEYXRh
UmVjb3JkKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFkYXRhUmVjb3Jkcy5zaXplKCkpIHsKKyAgICAg
ICAgICAgICAgICBtX2RhdGFTdG9yZUNsZWFyUGVuZGluZyA9IGZhbHNlOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYXV0byYgd2Vic2l0ZURh
dGFTdG9yZSA9IEFQSTo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT53ZWJz
aXRlRGF0YVN0b3JlKCk7CisgICAgICAgICAgICB3ZWJzaXRlRGF0YVN0b3JlLnJlbW92ZURhdGEo
V2Vic2l0ZURhdGFUeXBlOjpDb29raWVzLCB7IFdURk1vdmUoZGF0YVJlY29yZHMpIH0sIFt0aGlz
XSB7CisgICAgICAgICAgICAgICAgbV9kYXRhU3RvcmVDbGVhclBlbmRpbmcgPSBmYWxzZTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwogdm9pZCBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NVcGRhdGVkKGNvbnN0
IFZlY3RvcjxXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiYgb3JpZ2lucykKIHsKICAg
ICBjb3JlU3RvcmUoKS5tZXJnZVN0YXRpc3RpY3Mob3JpZ2lucyk7CiAKLSAgICBWZWN0b3I8U3Ry
aW5nPiBwcmV2YWxlbnRSZXNvdXJjZXMsIHByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJh
Y3Rpb247CiAgICAgaWYgKGNvcmVTdG9yZSgpLmhhc0Vub3VnaERhdGFGb3JTdGF0aXN0aWNzUHJv
Y2Vzc2luZygpKSB7Ci0gICAgICAgIGNvcmVTdG9yZSgpLnByb2Nlc3NTdGF0aXN0aWNzKFt0aGlz
LCAmcHJldmFsZW50UmVzb3VyY2VzLCAmcHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFj
dGlvbl0gKFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHJlc291cmNlU3RhdGlzdGljKSB7Ci0gICAg
ICAgICAgICBjbGFzc2lmeVByZXZhbGVudFJlc291cmNlcyhyZXNvdXJjZVN0YXRpc3RpYywgcHJl
dmFsZW50UmVzb3VyY2VzLCBwcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uKTsK
KyAgICAgICAgY29yZVN0b3JlKCkucHJvY2Vzc1N0YXRpc3RpY3MoW3RoaXNdIChSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzJiByZXNvdXJjZVN0YXRpc3RpYykgeworICAgICAgICAgICAgY2xhc3NpZnlS
ZXNvdXJjZShyZXNvdXJjZVN0YXRpc3RpYyk7CisgICAgICAgICAgICBjbGVhckRhdGFSZWNvcmRz
KCk7CiAgICAgICAgIH0pOwogICAgIH0KIAotICAgIC8vIEZJWE1FOiBOb3RpZnkgaW5kaXZpZHVh
bCBXZWJQcm9jZXNzZXMgb2YgcHJldmFsZW50IGRvbWFpbnMgdXNpbmcgdGhlIHR3byB2ZWN0b3Jz
IHBvcHVsYXRlZCBieSB0aGUgY2xhc3NpZmllci4gPHJkYXI6Ly9wcm9ibGVtLzI0NzAzMDk5Pgog
ICAgIGF1dG8gZW5jb2RlciA9IGNvcmVTdG9yZSgpLmNyZWF0ZUVuY29kZXJGcm9tRGF0YSgpOwog
ICAgIAogICAgIHdyaXRlRW5jb2RlclRvRGlzaygqZW5jb2Rlci5nZXQoKSwgImZ1bGxfYnJvd3Np
bmdfc2Vzc2lvbiIpOwpAQCAtMTUyLDcgKzIyMCw3IEBAIFN0cmluZyBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnAKIHsKICAgICBpZiAobV9zdG9yYWdlUGF0aC5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgIAorCiAgICAgLy8gVE9ETyBEZWNpZGUg
d2hhdCB0byBjYWxsIHRoaXMgZmlsZQogICAgIHJldHVybiBwYXRoQnlBcHBlbmRpbmdDb21wb25l
bnQobV9zdG9yYWdlUGF0aCwgbGFiZWwgKyAiX3Jlc291cmNlTG9nLnBsaXN0Iik7CiB9CkBAIC0x
NjIsMjEgKzIzMCwyMSBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6d3Jp
CiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gcmF3RGF0YSA9IGVuY29kZXIuZmluaXNoRW5jb2Rp
bmcoKTsKICAgICBpZiAoIXJhd0RhdGEpCiAgICAgICAgIHJldHVybjsKLSAgICAKKwogICAgIFN0
cmluZyByZXNvdXJjZUxvZyA9IHBlcnNpc3RlbnRTdG9yYWdlUGF0aChsYWJlbCk7CiAgICAgaWYg
KHJlc291cmNlTG9nLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgaWYg
KCFtX3N0b3JhZ2VQYXRoLmlzRW1wdHkoKSkKICAgICAgICAgbWFrZUFsbERpcmVjdG9yaWVzKG1f
c3RvcmFnZVBhdGgpOwotICAgIAorCiAgICAgYXV0byBoYW5kbGUgPSBvcGVuRmlsZShyZXNvdXJj
ZUxvZywgT3BlbkZvcldyaXRlKTsKICAgICBpZiAoIWhhbmRsZSkKICAgICAgICAgcmV0dXJuOwog
ICAgIAogICAgIGludDY0X3Qgd3JpdHRlbkJ5dGVzID0gd3JpdGVUb0ZpbGUoaGFuZGxlLCByYXdE
YXRhLT5kYXRhKCksIHJhd0RhdGEtPnNpemUoKSk7CiAgICAgY2xvc2VGaWxlKGhhbmRsZSk7Ci0g
ICAgCisKICAgICBpZiAod3JpdHRlbkJ5dGVzICE9IHN0YXRpY19jYXN0PGludDY0X3Q+KHJhd0Rh
dGEtPnNpemUoKSkpCiAgICAgICAgIFdURkxvZ0Fsd2F5cygiV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOiBXZSBvbmx5IHdyb3RlICVkIG91dCBvZiAlZCBieXRlcyB0byBkaXNrIiwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHdyaXR0ZW5CeXRlcyksIHJhd0RhdGEtPnNpemUoKSk7CiB9CkBA
IC0xODYsMTEgKzI1NCwxMSBAQCBzdGQ6OnVuaXF1ZV9wdHI8S2V5ZWREZWNvZGVyPiBXZWJSZXNv
dXJjCiAgICAgU3RyaW5nIHJlc291cmNlTG9nID0gcGVyc2lzdGVudFN0b3JhZ2VQYXRoKGxhYmVs
KTsKICAgICBpZiAocmVzb3VyY2VMb2cuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICAKKwogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHJhd0RhdGEgPSBTaGFyZWRCdWZm
ZXI6OmNyZWF0ZVdpdGhDb250ZW50c09mRmlsZShyZXNvdXJjZUxvZyk7CiAgICAgaWYgKCFyYXdE
YXRhKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKKwogICAgIHJldHVybiBLZXllZERl
Y29kZXI6OmRlY29kZXIocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4ocmF3RGF0YS0+
ZGF0YSgpKSwgcmF3RGF0YS0+c2l6ZSgpKTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAko
cmV2aXNpb24gMjA2NzUzKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAK
ICNpbmNsdWRlICJBUElPYmplY3QuaCIKICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCisjaW5jbHVk
ZSAiV2Vic2l0ZURhdGFSZWNvcmQuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KQEAgLTcxLDYgKzcyLDEwIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgZXhwbGljaXQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKGNvbnN0IFN0cmluZyYp
OwogCisgICAgYm9vbCBoYXNQcmV2YWxlbnRSZXNvdXJjZUNoYXJhY3RlcmlzdGljcyhjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7CisgICAgdm9pZCBjbGFzc2lmeVJlc291
cmNlKFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3MmKTsKKyAgICB2b2lkIGNsZWFyRGF0
YVJlY29yZHMoKTsKKwogICAgIFN0cmluZyBwZXJzaXN0ZW50U3RvcmFnZVBhdGgoY29uc3QgU3Ry
aW5nJiBsYWJlbCkgY29uc3Q7CiAKICAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgpAQCAtODMs
NiArODgsOSBAQCBwcml2YXRlOgogICAgIFJlZjxXVEY6OldvcmtRdWV1ZT4gbV9zdGF0aXN0aWNz
UXVldWU7CiAgICAgU3RyaW5nIG1fc3RvcmFnZVBhdGg7CiAgICAgYm9vbCBtX3Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NFbmFibGVkIHsgZmFsc2UgfTsKKworICAgIGRvdWJsZSBtX2xhc3RUaW1lRGF0
YVJlY29yZHNXZXJlQ2xlYXJlZCB7IDAgfTsKKyAgICBib29sIG1fZGF0YVN0b3JlQ2xlYXJQZW5k
aW5nIHsgZmFsc2UgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogVG9vbHMv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjA2NzYx
KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIw
MTYtMTAtMDUgIEpvaG4gV2lsYW5kZXIgIDx3aWxhbmRlckBhcHBsZS5jb20+CisKKyAgICAgICAg
VXBkYXRlIFJlc291cmNlIExvYWQgU3RhdGlzdGljcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyODExCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL21hYy9QdWJsaWNT
dWZmaXgubW06CisgICAgICAgICAgICBDaGFuZ2UgZnJvbSBVU0UoUFVCTElDX1NVRkZJWF9MSVNU
KSB0byBFTkFCTEUoUFVCTElDX1NVRkZJWF9MSVNUKQorCiAyMDE2LTEwLTAzICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVVJMUGFyc2VyIHNo
b3VsZCBpZ25vcmUgdGFicyBhdCBhbGwgbG9jYXRpb25zCkluZGV4OiBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL21hYy9QdWJsaWNTdWZmaXgubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9tYWMvUHVibGljU3VmZml4Lm1tCShyZXZpc2lvbiAyMDY3NTMpCisrKyBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL21hYy9QdWJsaWNTdWZmaXgubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTI1LDcgKzI1LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaWYgVVNFKFBV
QkxJQ19TVUZGSVhfTElTVCkKKyNpZiBFTkFCTEUoUFVCTElDX1NVRkZJWF9MSVNUKQogCiAjaW5j
bHVkZSAiV1RGU3RyaW5nVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9QdWJsaWNTdWZm
aXguaD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290740</attachid>
            <date>2016-10-05 12:37:18 -0700</date>
            <delta_ts>2016-10-06 10:42:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162811-20161005123406.patch</filename>
            <type>text/plain</type>
            <size>29678</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNjc1MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBACisyMDE2LTEwLTA1ICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFVwZGF0ZSBSZXNvdXJjZSBM
b2FkIFN0YXRpc3RpY3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2MjgxMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhlIGNvdW50aW5nIGlzIGJhc2VkIG9uIHRvcCBwcml2YXRl
bHkgb3duZWQgZG9tYWlucworICAgICAgICB3aGljaCBjdXJyZW50bHkgaXMgbm90IHN1cHBvcnRl
ZCBieSBsYXlvdXQgdGVzdHMgbm9yIEFQSSB0ZXN0cy4KKworICAgICAgICAqIE1vZHVsZXMvd2Vi
c29ja2V0cy9XZWJTb2NrZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Ojpjb25u
ZWN0KToKKyAgICAgICAgICAgIE5vdyBjYXB0dXJlcyBzdGF0aXN0aWNzIGZvciB3ZWIgc29ja2V0
cyB0b28uCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgKiBs
b2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwOgorICAgICAgICAgICAgTm93IGNhcHR1cmVz
IHN0YXRpc3RpY3MgZm9yIHN5bmNocm9ub3VzIFhIUiB0b28uCisgICAgICAgIChXZWJDb3JlOjpp
czN4eFJlZGlyZWN0KToKKyAgICAgICAgICAgIENvbnZlbmllbmNlIGZ1bmN0aW9uLgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNob3VsZExvZyk6CisgICAgICAgICAg
ICBDb252ZW5pZW5jZSBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9i
c2VydmVyOjpsb2dGcmFtZU5hdmlnYXRpb24pOgorICAgICAgICAgICAgVXBkYXRlZCB0byBtYWtl
IHVzZSBvZiBuZXcgY29udmVuaWVuY2UgZnVuY3Rpb25zLgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1N1YnJlc291cmNlTG9hZGluZyk6CisgICAgICAgICAgICBV
cGRhdGVkIHRvIG1ha2UgdXNlIG9mIG5ldyBjb252ZW5pZW5jZSBmdW5jdGlvbnMuCisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nV2ViU29ja2V0TG9hZGluZyk6Cisg
ICAgICAgICAgICBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVy
Ojpsb2dVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAgICAgVXBkYXRlZCB0byBtYWtlIHVzZSBv
ZiBuZXcgY29udmVuaWVuY2UgZnVuY3Rpb25zLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnByaW1hcnlEb21haW4pOgorICAgICAgICAgICAgTm93IG1ha2VzIHVzZSBv
ZiB0aGUgUHVibGljIFN1ZmZpeCBsaXN0LgorICAgICAgICAgICAgUmVtb3ZlZCBvbGQgY3VzdG9t
IHBhcnNpbmcgb2YgcHJpbWFyeSBkb21haW4uCisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9h
ZE9ic2VydmVyLmg6CisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnBy
ZXZhbGVudFJlc291cmNlRG9tYWluc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAg
ICAgQ29udmVuaWVuY2UgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnByb2Nlc3NTdGF0aXN0aWNzKTogRGVsZXRlZC4KKyAgICAgICAgKiBs
b2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmg6CisgICAgICAgICogbG9hZGVyL1N1
YnJlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN1YnJlc291cmNlTG9hZGVy
Ojp3aWxsU2VuZFJlcXVlc3RJbnRlcm5hbCk6CisgICAgICAgICAgICBNb3ZlZCBsb2dnaW5nIGNh
bGwgaGlnaGVyIHVwIGFuZCBhZGRlZCBhIGNoZWNrIGZvciB3aGV0aGVyIHdlCisgICAgICAgICAg
ICBhcmUgbG9hZGluZyB0aGUgbWFpbiByZXNvdXJjZS4gVGhlIHJlYXNvbiBmb3IgbW92aW5nIGl0
IHVwIGlzCisgICAgICAgICAgICB0byBjYXB0dXJlIHRoZSByZXF1ZXN0IGJlZm9yZSBzb21lIGRh
dGEgbWF5IGJlIGNsZWFyZWQgb3V0IGluCisgICAgICAgICAgICByZWRpcmVjdCBoYW5kbGluZy4g
V2UgYWxzbyB3YW50IHRvIGNhcHR1cmUgZmFpbGVkIENPUlMgcmVxdWVzdHMKKyAgICAgICAgICAg
IHNpbmNlIHRoZXkgYXJlIHNlbnQgYW5kIHRoZW4gY2FuY2VsbGVkIG9uIHRoZSB3YXkgYmFjay4K
KwogMjAxNi0xMC0wMyAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmVtb3ZlIERvY3VtZW50OjplbGVtZW50U2hlZXQoKQpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAJKHJldmlzaW9uIDIwNjc1MykK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRl
ICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVzc2FnZUV2ZW50LmgiCisjaW5jbHVkZSAiUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5jbHVk
ZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgi
CkBAIC0zMTgsNyArMzE5LDggQEAgdm9pZCBXZWJTb2NrZXQ6OmNvbm5lY3QoY29uc3QgU3RyaW5n
JiB1cgogICAgICAgICAgICAgfSk7CiAjZW5kaWYKICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWRPYnNlcnZlcigpLmxvZ1dlYlNvY2tldExvYWRpbmcoZG9jdW1lbnQuZnJhbWUoKSwgbV91
cmwpOwogICAgIH0KIAogICAgIFN0cmluZyBwcm90b2NvbFN0cmluZzsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gMjA2NzUzKQorKysgU291cmNlL1dl
YkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcs
NyBAQAogI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFu
ZGxlLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkSW5mby5oIgorI2luY2x1ZGUgIlJlc291cmNl
TG9hZE9ic2VydmVyLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVkZSAi
U1ZHRG9jdW1lbnQuaCIKICNpbmNsdWRlICJTVkdMb2NhdGFibGUuaCIKQEAgLTI3NzQsNiArMjc3
NSw3IEBAIHVuc2lnbmVkIGxvbmcgRnJhbWVMb2FkZXI6OmxvYWRSZXNvdXJjZVMKICAgICAgICAg
ICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5sb2FkZXJTdHJhdGVneSgpLT5sb2FkUmVzb3VyY2VT
eW5jaHJvbm91c2x5KG5ldHdvcmtpbmdDb250ZXh0KCksIGlkZW50aWZpZXIsIG5ld1JlcXVlc3Qs
IHN0b3JlZENyZWRlbnRpYWxzLCBjbGllbnRDcmVkZW50aWFsUG9saWN5LCBlcnJvciwgcmVzcG9u
c2UsIGJ1ZmZlcik7CiAgICAgICAgICAgICBkYXRhID0gU2hhcmVkQnVmZmVyOjphZG9wdFZlY3Rv
cihidWZmZXIpOwogICAgICAgICAgICAgZG9jdW1lbnRMb2FkZXIoKS0+YXBwbGljYXRpb25DYWNo
ZUhvc3QoKS0+bWF5YmVMb2FkRmFsbGJhY2tTeW5jaHJvbm91c2x5KG5ld1JlcXVlc3QsIGVycm9y
LCByZXNwb25zZSwgZGF0YSk7CisgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkT2JzZXJ2ZXIoKS5sb2dTdWJyZXNvdXJjZUxvYWRpbmcoJm1fZnJhbWUsIG5ld1JlcXVlc3Qs
IHJlc3BvbnNlKTsKICAgICAgICAgfQogICAgIH0KICAgICBub3RpZmllcigpLnNlbmRSZW1haW5p
bmdEZWxlZ2F0ZU1lc3NhZ2VzKG1fZG9jdW1lbnRMb2FkZXIuZ2V0KCksIGlkZW50aWZpZXIsIHJl
cXVlc3QsIHJlc3BvbnNlLCBkYXRhID8gZGF0YS0+ZGF0YSgpIDogbnVsbHB0ciwgZGF0YSA/IGRh
dGEtPnNpemUoKSA6IDAsIC0xLCBlcnJvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
UmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAJKHJldmlzaW9uIDIwNjc1MykKKysrIFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJOZXR3b3JrU3RvcmFnZVNlc3Npb24uaCIKICNp
bmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJhdGVnaWVzLmgiCisjaW5jbHVk
ZSAiUHVibGljU3VmZml4LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5oIgog
I2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oIgogI2luY2x1ZGUgIlJlc291
cmNlUmVxdWVzdC5oIgpAQCAtNTcsMjMgKzU4LDMxIEBAIHZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNldFN0YXRpc3RpY3MKICAgICBtX3N0b3JlID0gV1RGTW92ZShzdG9yZSk7CiB9CiAKLXZv
aWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBGcmFtZSYg
ZnJhbWUsIGNvbnN0IEZyYW1lJiB0b3BGcmFtZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBuZXdS
ZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQorc3RhdGlj
IGlubGluZSBib29sIGlzM3h4UmVkaXJlY3QoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9u
c2UpCiB7Ci0gICAgaWYgKCFTZXR0aW5nczo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOworICAgIHJldHVybiByZXNwb25zZS5odHRwU3RhdHVzQ29kZSgp
ID49IDMwMCAmJiByZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpIDw9IDM5OTsKK30KIAotICAgIGlm
ICghbV9zdG9yZSkKLSAgICAgICAgcmV0dXJuOworYm9vbCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hvdWxkTG9nKFBhZ2UqIHBhZ2UpCit7CisgICAgLy8gRklYTUU6IEVyciBvbiB0aGUgc2FmZSBz
aWRlIHVudGlsIHdlIGhhdmUgc29ydGVkIG91dCB3aGF0IHRvIGRvIGluIHdvcmtlciBjb250ZXh0
cworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBTZXR0
aW5nczo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKQorICAgICAgICAmJiAhcGFnZS0+
dXNlc0VwaGVtZXJhbFNlc3Npb24oKQorICAgICAgICAmJiBtX3N0b3JlOworfQogCit2b2lkIFJl
c291cmNlTG9hZE9ic2VydmVyOjpsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgRnJhbWUmIGZyYW1l
LCBjb25zdCBGcmFtZSYgdG9wRnJhbWUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgbmV3UmVxdWVz
dCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKK3sKICAgICBBU1NF
UlQoZnJhbWUuZG9jdW1lbnQoKSk7CiAgICAgQVNTRVJUKHRvcEZyYW1lLmRvY3VtZW50KCkpOwog
ICAgIEFTU0VSVCh0b3BGcmFtZS5wYWdlKCkpOwotCi0gICAgYm9vbCBuZWVkUHJpdmFjeSA9IHRv
cEZyYW1lLnBhZ2UoKSA/IHRvcEZyYW1lLnBhZ2UoKS0+dXNlc0VwaGVtZXJhbFNlc3Npb24oKSA6
IGZhbHNlOwotICAgIGlmIChuZWVkUHJpdmFjeSkKKyAgICAKKyAgICBpZiAoIXNob3VsZExvZyh0
b3BGcmFtZS5wYWdlKCkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBib29sIGlzUmVkaXJlY3Qg
PSAhcmVkaXJlY3RSZXNwb25zZS5pc051bGwoKTsKKyAgICBib29sIGlzUmVkaXJlY3QgPSBpczN4
eFJlZGlyZWN0KHJlZGlyZWN0UmVzcG9uc2UpOwogICAgIGJvb2wgaXNNYWluRnJhbWUgPSBmcmFt
ZS5pc01haW5GcmFtZSgpOwogICAgIGNvbnN0IFVSTCYgc291cmNlVVJMID0gZnJhbWUuZG9jdW1l
bnQoKS0+dXJsKCk7CiAgICAgY29uc3QgVVJMJiB0YXJnZXRVUkwgPSBuZXdSZXF1ZXN0LnVybCgp
OwpAQCAtMTQ4LDE3ICsxNTcsMTIgQEAgdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nRnJh
bWVOYXZpZwogICAgIAogdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nU3VicmVzb3VyY2VM
b2FkaW5nKGNvbnN0IEZyYW1lKiBmcmFtZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBuZXdSZXF1
ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQogewotICAgIGlm
ICghU2V0dGluZ3M6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKKyAgICBBU1NFUlQoZnJhbWUtPnBhZ2UoKSk7CiAKLSAgICBpZiAoIW1fc3RvcmUpCisg
ICAgaWYgKCFzaG91bGRMb2coZnJhbWUtPnBhZ2UoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGJvb2wgbmVlZFByaXZhY3kgPSAoZnJhbWUgJiYgZnJhbWUtPnBhZ2UoKSkgPyBmcmFtZS0+cGFn
ZSgpLT51c2VzRXBoZW1lcmFsU2Vzc2lvbigpIDogZmFsc2U7Ci0gICAgaWYgKG5lZWRQcml2YWN5
KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYm9vbCBpc1JlZGlyZWN0ID0gIXJlZGlyZWN0
UmVzcG9uc2UuaXNOdWxsKCk7CisgICAgYm9vbCBpc1JlZGlyZWN0ID0gaXMzeHhSZWRpcmVjdChy
ZWRpcmVjdFJlc3BvbnNlKTsKICAgICBjb25zdCBVUkwmIHNvdXJjZVVSTCA9IHJlZGlyZWN0UmVz
cG9uc2UudXJsKCk7CiAgICAgY29uc3QgVVJMJiB0YXJnZXRVUkwgPSBuZXdSZXF1ZXN0LnVybCgp
OwogICAgIGNvbnN0IFVSTCYgbWFpbkZyYW1lVVJMID0gZnJhbWUgPyBmcmFtZS0+bWFpbkZyYW1l
KCkuZG9jdW1lbnQoKS0+dXJsKCkgOiBVUkwoKTsKQEAgLTE2NiwxNCArMTcwLDE3IEBAIHZvaWQg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1N1YnJlc291cmMKICAgICBhdXRvIHRhcmdldEhvc3Qg
PSB0YXJnZXRVUkwuaG9zdCgpOwogICAgIGF1dG8gbWFpbkZyYW1lSG9zdCA9IG1haW5GcmFtZVVS
TC5ob3N0KCk7CiAKLSAgICBpZiAodGFyZ2V0SG9zdC5pc0VtcHR5KCkgfHwgbWFpbkZyYW1lSG9z
dC5pc0VtcHR5KCkgfHwgdGFyZ2V0SG9zdCA9PSBtYWluRnJhbWVIb3N0IHx8IHRhcmdldEhvc3Qg
PT0gc291cmNlVVJMLmhvc3QoKSkKKyAgICBpZiAodGFyZ2V0SG9zdC5pc0VtcHR5KCkKKyAgICAg
ICAgfHwgbWFpbkZyYW1lSG9zdC5pc0VtcHR5KCkKKyAgICAgICAgfHwgdGFyZ2V0SG9zdCA9PSBt
YWluRnJhbWVIb3N0CisgICAgICAgIHx8IChpc1JlZGlyZWN0ICYmIHRhcmdldEhvc3QgPT0gc291
cmNlVVJMLmhvc3QoKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gdGFyZ2V0UHJpbWFy
eURvbWFpbiA9IHByaW1hcnlEb21haW4odGFyZ2V0VVJMKTsKICAgICBhdXRvIG1haW5GcmFtZVBy
aW1hcnlEb21haW4gPSBwcmltYXJ5RG9tYWluKG1haW5GcmFtZVVSTCk7CiAgICAgYXV0byBzb3Vy
Y2VQcmltYXJ5RG9tYWluID0gcHJpbWFyeURvbWFpbihzb3VyY2VVUkwpOwogICAgIAotICAgIGlm
ICh0YXJnZXRQcmltYXJ5RG9tYWluID09IG1haW5GcmFtZVByaW1hcnlEb21haW4gfHwgdGFyZ2V0
UHJpbWFyeURvbWFpbiA9PSBzb3VyY2VQcmltYXJ5RG9tYWluKQorICAgIGlmICh0YXJnZXRQcmlt
YXJ5RG9tYWluID09IG1haW5GcmFtZVByaW1hcnlEb21haW4gfHwgKGlzUmVkaXJlY3QgJiYgdGFy
Z2V0UHJpbWFyeURvbWFpbiA9PSBzb3VyY2VQcmltYXJ5RG9tYWluKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgYXV0byYgdGFyZ2V0U3RhdGlzdGljcyA9IG1fc3RvcmUtPmVuc3VyZVJlc291cmNl
U3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4odGFyZ2V0UHJpbWFyeURvbWFpbik7CkBAIC0yMTAs
NjIgKzIxNyw4MiBAQCB2b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dTdWJyZXNvdXJjCiAg
ICAgCiAgICAgbV9zdG9yZS0+ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CiB9CisKK3Zv
aWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1dlYlNvY2tldExvYWRpbmcoY29uc3QgRnJhbWUq
IGZyYW1lLCBjb25zdCBVUkwmIHRhcmdldFVSTCkKK3sKKyAgICAvLyBGSVhNRTogV2ViIHNvY2tl
dHMgY2FuIHJ1biBpbiBkZXRhY2hlZCBmcmFtZXMuIERlY2lkZSBob3cgdG8gY291bnQgc3VjaCBj
b25uZWN0aW9ucy4KKyAgICAvLyBTZWUgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQv
Y29uc3RydWN0LWluLWRldGFjaGVkLWZyYW1lLmh0bWwKKyAgICBpZiAoIWZyYW1lKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoIXNob3VsZExvZyhmcmFtZS0+cGFnZSgpKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgY29uc3QgVVJMJiBtYWluRnJhbWVVUkwgPSBmcmFtZS0+bWFpbkZyYW1l
KCkuZG9jdW1lbnQoKS0+dXJsKCk7CisKKyAgICBhdXRvIHRhcmdldEhvc3QgPSB0YXJnZXRVUkwu
aG9zdCgpOworICAgIGF1dG8gbWFpbkZyYW1lSG9zdCA9IG1haW5GcmFtZVVSTC5ob3N0KCk7CiAg
ICAgCisgICAgaWYgKHRhcmdldEhvc3QuaXNFbXB0eSgpCisgICAgICAgIHx8IG1haW5GcmFtZUhv
c3QuaXNFbXB0eSgpCisgICAgICAgIHx8IHRhcmdldEhvc3QgPT0gbWFpbkZyYW1lSG9zdCkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIGF1dG8gdGFyZ2V0UHJpbWFyeURvbWFpbiA9IHByaW1h
cnlEb21haW4odGFyZ2V0VVJMKTsKKyAgICBhdXRvIG1haW5GcmFtZVByaW1hcnlEb21haW4gPSBw
cmltYXJ5RG9tYWluKG1haW5GcmFtZVVSTCk7CisgICAgCisgICAgaWYgKHRhcmdldFByaW1hcnlE
b21haW4gPT0gbWFpbkZyYW1lUHJpbWFyeURvbWFpbikKKyAgICAgICAgcmV0dXJuOworCisgICAg
YXV0byYgdGFyZ2V0U3RhdGlzdGljcyA9IG1fc3RvcmUtPmVuc3VyZVJlc291cmNlU3RhdGlzdGlj
c0ZvclByaW1hcnlEb21haW4odGFyZ2V0UHJpbWFyeURvbWFpbik7CisgICAgCisgICAgYXV0byBt
YWluRnJhbWVPcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKG1haW5GcmFtZVVSTCk7Cisg
ICAgdGFyZ2V0U3RhdGlzdGljcy5zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zLmFkZCht
YWluRnJhbWVQcmltYXJ5RG9tYWluKTsKKyAgICAKKyAgICArK3RhcmdldFN0YXRpc3RpY3Muc3Vi
cmVzb3VyY2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudDsKKyAgICAKKyAgICBhdXRvIHRvdGFsVmlz
aXRlZCA9IHN0ZDo6bWF4KG1fb3JpZ2luc1Zpc2l0ZWRNYXAuc2l6ZSgpLCAxVSk7CisgICAgCisg
ICAgdGFyZ2V0U3RhdGlzdGljcy5zdWJyZXNvdXJjZUhhc0JlZW5TdWJyZXNvdXJjZUNvdW50RGl2
aWRlZEJ5VG90YWxOdW1iZXJPZk9yaWdpbnNWaXNpdGVkID0gc3RhdGljX2Nhc3Q8ZG91YmxlPih0
YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlSGFzQmVlblN1YnJlc291cmNlQ291bnQpIC8gdG90
YWxWaXNpdGVkOworCisgICAgbV9zdG9yZS0+ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7
Cit9CisKIHZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1VzZXJJbnRlcmFjdGlvbihjb25z
dCBEb2N1bWVudCYgZG9jdW1lbnQpCiB7Ci0gICAgaWYgKCFTZXR0aW5nczo6cmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChkb2N1bWVu
dC5wYWdlKCkpOwogCi0gICAgaWYgKCFtX3N0b3JlKQorICAgIGlmICghc2hvdWxkTG9nKGRvY3Vt
ZW50LnBhZ2UoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGJvb2wgbmVlZFByaXZhY3kgPSBk
b2N1bWVudC5wYWdlKCkgPyBkb2N1bWVudC5wYWdlKCktPnVzZXNFcGhlbWVyYWxTZXNzaW9uKCkg
OiBmYWxzZTsKLSAgICBpZiAobmVlZFByaXZhY3kpCisgICAgYXV0byYgdXJsID0gZG9jdW1lbnQu
dXJsKCk7CisKKyAgICBpZiAodXJsLmlzQmxhbmtVUkwoKSB8fCB1cmwuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBhdXRvJiBzdGF0aXN0aWNzID0gbV9zdG9yZS0+ZW5zdXJlUmVz
b3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihwcmltYXJ5RG9tYWluKGRvY3VtZW50LnVy
bCgpKSk7CisgICAgYXV0byYgc3RhdGlzdGljcyA9IG1fc3RvcmUtPmVuc3VyZVJlc291cmNlU3Rh
dGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJpbWFyeURvbWFpbih1cmwpKTsKICAgICBzdGF0aXN0
aWNzLmhhZFVzZXJJbnRlcmFjdGlvbiA9IHRydWU7CiAgICAgbV9zdG9yZS0+ZmlyZURhdGFNb2Rp
ZmljYXRpb25IYW5kbGVyKCk7CiB9CiAgICAgCiBTdHJpbmcgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnByaW1hcnlEb21haW4oY29uc3QgVVJMJiB1cmwpCiB7Ci0gICAgU3RyaW5nIGhvc3QgPSB1cmwu
aG9zdCgpOwotICAgIFZlY3RvcjxTdHJpbmc+IGhvc3RTcGxpdE9uRG90OwotICAgIAotICAgIGhv
c3Quc3BsaXQoJy4nLCBmYWxzZSwgaG9zdFNwbGl0T25Eb3QpOwotCiAgICAgU3RyaW5nIHByaW1h
cnlEb21haW47Ci0gICAgaWYgKGhvc3QuaXNOdWxsKCkpCisgICAgU3RyaW5nIGhvc3QgPSB1cmwu
aG9zdCgpOworICAgIGlmIChob3N0LmlzTnVsbCgpIHx8IGhvc3QuaXNFbXB0eSgpKQogICAgICAg
ICBwcmltYXJ5RG9tYWluID0gIm51bGxPcmlnaW4iOwotICAgIGVsc2UgaWYgKGhvc3RTcGxpdE9u
RG90LnNpemUoKSA8IDMpCi0gICAgICAgIHByaW1hcnlEb21haW4gPSBob3N0OworI2lmIEVOQUJM
RShQVUJMSUNfU1VGRklYX0xJU1QpCiAgICAgZWxzZSB7Ci0gICAgICAgIC8vIFNraXAgVExEIGFu
ZCB0aGVuIHVwIHRvIHR3byBkb21haW5zIHNtYWxsZXIgdGhhbiA0IGNoYXJhY3RlcnMKLSAgICAg
ICAgaW50IHByaW1hcnlEb21haW5DdXRPZmZJbmRleCA9IGhvc3RTcGxpdE9uRG90LnNpemUoKSAt
IDI7Ci0KLSAgICAgICAgLy8gU3RhcnQgd2l0aCBUTEQgYXMgYSBnaXZlbiBwYXJ0Ci0gICAgICAg
IHNpemVfdCBudW1iZXJPZlBhcnRzID0gMTsKLSAgICAgICAgZm9yICg7IHByaW1hcnlEb21haW5D
dXRPZmZJbmRleCA+PSAwOyAtLXByaW1hcnlEb21haW5DdXRPZmZJbmRleCkgewotICAgICAgICAg
ICAgKytudW1iZXJPZlBhcnRzOwotCi0gICAgICAgICAgICAvLyBXZSBoYXZlIGVpdGhlciBhIGRv
bWFpbiBwYXJ0IHRoYXQncyA0IGNoYXJzIG9yIGxvbmdlciwgb3IgMyBkb21haW4gcGFydHMgaW5j
bHVkaW5nIFRMRAotICAgICAgICAgICAgaWYgKGhvc3RTcGxpdE9uRG90LmF0KHByaW1hcnlEb21h
aW5DdXRPZmZJbmRleCkubGVuZ3RoKCkgPj0gNCB8fCBudW1iZXJPZlBhcnRzID49IDMpCi0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocHJpbWFyeURvbWFp
bkN1dE9mZkluZGV4IDwgMCkKKyAgICAgICAgcHJpbWFyeURvbWFpbiA9IHRvcFByaXZhdGVseUNv
bnRyb2xsZWREb21haW4oaG9zdCk7CisgICAgICAgIC8vIFdlIHdpbGwgaGF2ZSBhbiBlbXB0eSBz
dHJpbmcgaGVyZSBpZiB0aGVyZSBpcyBubyBUTEQuCisgICAgICAgIC8vIFVzZSB0aGUgaG9zdCBp
biBzdWNoIGNhc2UuCisgICAgICAgIGlmIChwcmltYXJ5RG9tYWluLmlzRW1wdHkoKSkKICAgICAg
ICAgICAgIHByaW1hcnlEb21haW4gPSBob3N0OwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGhvc3RT
cGxpdE9uRG90LmF0KHByaW1hcnlEb21haW5DdXRPZmZJbmRleCkpOwotICAgICAgICAgICAgZm9y
IChzaXplX3QgaiA9IHByaW1hcnlEb21haW5DdXRPZmZJbmRleCArIDE7IGogPCBob3N0U3BsaXRP
bkRvdC5zaXplKCk7ICsraikgewotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcuJyk7
Ci0gICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoaG9zdFNwbGl0T25Eb3Rbal0pOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgcHJpbWFyeURvbWFpbiA9IGJ1aWxkZXIudG9TdHJpbmco
KTsKLSAgICAgICAgfQogICAgIH0KKyNlbHNlCisgICAgZWxzZQorICAgICAgICBwcmltYXJ5RG9t
YWluID0gaG9zdDsKKyNlbmRpZgogCiAgICAgcmV0dXJuIHByaW1hcnlEb21haW47CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaAkocmV2aXNp
b24gMjA2NzUzKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEZyYW1lOworY2xhc3MgUGFnZTsKIGNsYXNzIFJlc291
cmNlUmVxdWVzdDsKIGNsYXNzIFJlc291cmNlUmVzcG9uc2U7CiBjbGFzcyBVUkw7CkBAIC00Nyw2
ICs0OCw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGxvZ0ZyYW1lTmF2aWdhdGlvbihjb25z
dCBGcmFtZSYgZnJhbWUsIGNvbnN0IEZyYW1lJiB0b3BGcmFtZSwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiBuZXdSZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNl
KTsKICAgICB2b2lkIGxvZ1N1YnJlc291cmNlTG9hZGluZyhjb25zdCBGcmFtZSosIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgbmV3UmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJl
Y3RSZXNwb25zZSk7CisgICAgdm9pZCBsb2dXZWJTb2NrZXRMb2FkaW5nKGNvbnN0IEZyYW1lKiwg
Y29uc3QgVVJMJik7CiAKICAgICB2b2lkIGxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBEb2N1bWVu
dCYpOwogICAgIApAQCAtNTUsNiArNTcsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQg
U3RyaW5nIHN0YXRpc3RpY3NGb3JPcmlnaW4oY29uc3QgU3RyaW5nJik7CiAKIHByaXZhdGU6Cisg
ICAgYm9vbCBzaG91bGRMb2coUGFnZSopOwogICAgIHN0YXRpYyBTdHJpbmcgcHJpbWFyeURvbWFp
bihjb25zdCBVUkwmKTsKIAogICAgIFJlZlB0cjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+
IG1fc3RvcmU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAkocmV2aXNpb24gMjA2NzUzKQorKysgU291cmNlL1dl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE1NCw0ICsxNTQsMTQgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OnByb2NlcwogICAgIGZvciAoYXV0byYgcmVzb3VyY2VTdGF0aXN0aWMgOiBtX3Jlc291cmNlU3Rh
dGlzdGljc01hcC52YWx1ZXMoKSkKICAgICAgICAgcHJvY2Vzc0Z1bmN0aW9uKHJlc291cmNlU3Rh
dGlzdGljKTsKIH0KKworVmVjdG9yPFN0cmluZz4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnNXaXRob3V0VXNlckludGVyYWN0aW9uKCkKK3sKKyAg
ICBWZWN0b3I8U3RyaW5nPiBwcmV2YWxlbnRSZXNvdXJjZXM7CisgICAgZm9yIChhdXRvJiByZXNv
dXJjZVN0YXRpc3RpYyA6IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnZhbHVlcygpKSB7CisgICAg
ICAgIGlmIChyZXNvdXJjZVN0YXRpc3RpYy5pc1ByZXZhbGVudFJlc291cmNlICYmICFyZXNvdXJj
ZVN0YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb24pCisgICAgICAgICAgICBwcmV2YWxlbnRSZXNv
dXJjZXMuYXBwZW5kKHJlc291cmNlU3RhdGlzdGljLmhpZ2hMZXZlbERvbWFpbik7CisgICAgfQor
ICAgIHJldHVybiBwcmV2YWxlbnRSZXNvdXJjZXM7Cit9CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCShyZXZpc2lv
biAyMDY3NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDggQEAgcHVibGljOgogCiAgICAg
V0VCQ09SRV9FWFBPUlQgYm9vbCBoYXNFbm91Z2hEYXRhRm9yU3RhdGlzdGljc1Byb2Nlc3Npbmco
KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHByb2Nlc3NTdGF0aXN0aWNzKHN0ZDo6ZnVuY3Rp
b248dm9pZChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik+JiYpOworCisgICAgV0VCQ09SRV9FWFBP
UlQgVmVjdG9yPFN0cmluZz4gcHJldmFsZW50UmVzb3VyY2VEb21haW5zV2l0aG91dFVzZXJJbnRl
cmFjdGlvbigpOwogcHJpdmF0ZToKICAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoKSA9
IGRlZmF1bHQ7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9h
ZGVyLmNwcAkocmV2aXNpb24gMjA2NzUzKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YnJl
c291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTczLDYgKzE3Myw5IEBAIHZvaWQg
U3VicmVzb3VyY2VMb2FkZXI6OndpbGxTZW5kUmVxdWVzdEkKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAorICAgIGlmIChuZXdSZXF1ZXN0LnJlcXVlc3RlcigpICE9IFJlc291cmNlUmVxdWVzdEJh
c2U6OlJlcXVlc3Rlcjo6TWFpbikKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZE9ic2VydmVyKCkubG9nU3VicmVzb3VyY2VMb2FkaW5nKG1fZnJhbWUuZ2V0KCksIG5ld1JlcXVl
c3QsIHJlZGlyZWN0UmVzcG9uc2UpOworCiAgICAgQVNTRVJUKCFuZXdSZXF1ZXN0LmlzTnVsbCgp
KTsKICAgICBpZiAoIXJlZGlyZWN0UmVzcG9uc2UuaXNOdWxsKCkpIHsKICAgICAgICAgaWYgKG9w
dGlvbnMoKS5yZWRpcmVjdCAhPSBGZXRjaE9wdGlvbnM6OlJlZGlyZWN0OjpGb2xsb3cpIHsKQEAg
LTIyOCw4ICsyMzEsNiBAQCB2b2lkIFN1YnJlc291cmNlTG9hZGVyOjp3aWxsU2VuZFJlcXVlc3RJ
CiAgICAgUmVzb3VyY2VMb2FkZXI6OndpbGxTZW5kUmVxdWVzdEludGVybmFsKG5ld1JlcXVlc3Qs
IHJlZGlyZWN0UmVzcG9uc2UpOwogICAgIGlmIChuZXdSZXF1ZXN0LmlzTnVsbCgpKQogICAgICAg
ICBjYW5jZWwoKTsKLQotICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWRPYnNlcnZlcigp
LmxvZ1N1YnJlc291cmNlTG9hZGluZyhtX2ZyYW1lLmdldCgpLCBuZXdSZXF1ZXN0LCByZWRpcmVj
dFJlc3BvbnNlKTsKIH0KIAogdm9pZCBTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkU2VuZERhdGEodW5z
aWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNU
b0JlU2VudCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNjc1MykKKysrIFNvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDE2LTEwLTA1
ICBKb2huIFdpbGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFVwZGF0ZSBS
ZXNvdXJjZSBMb2FkIFN0YXRpc3RpY3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2MjgxMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
aGFzUHJldmFsZW50UmVzb3VyY2VDaGFyYWN0ZXJpc3RpY3MpOgorICAgICAgICAgICAgU3dpdGNo
ZWQgdG8gdmVjdG9yLWJhc2VkIGNsYXNzaWZpY2F0aW9uLgorICAgICAgICAoV2ViS2l0OjpXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsYXNzaWZ5UmVzb3VyY2UpOgorICAgICAgICAg
ICAgU2ltcGxpZmllZCBsb2dpYyBhbmQgbW92ZWQgdGhlIHNwbGl0IGJldHdlZW4gaGFzIGFuZCBo
YXMKKyAgICAgICAgICAgIG5vIHVzZXIgaW50ZXJhY3Rpb24gaW50byBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUuCisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6Y2xlYXJEYXRhUmVjb3Jkcyk6CisgICAgICAgICAgICBBZGRlZC4KKyAgICAgICAgKFdl
YktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXNvdXJjZUxvYWRTdGF0aXN0
aWNzVXBkYXRlZCk6CisgICAgICAgICAgICBVcGRhdGVkIHRvIG1ha2UgdXNlIG9mIHRoZSBuZXcg
ZnVuY3Rpb25zLgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnBlcnNpc3RlbnRTdG9yYWdlUGF0aCk6CisgICAgICAgICAgICBSZW1vdmVkIHN0cmF5IHdo
aXRlc3BhY2UuCisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6d3JpdGVFbmNvZGVyVG9EaXNrKToKKyAgICAgICAgICAgIFJlbW92ZWQgc3RyYXkgd2hpdGVz
cGFjZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpj
cmVhdGVEZWNvZGVyRnJvbURpc2spOgorICAgICAgICAgICAgUmVtb3ZlZCBzdHJheSB3aGl0ZXNw
YWNlLgorICAgICAgICAoV2ViS2l0OjpoYXNQcmV2YWxlbnRSZXNvdXJjZUNoYXJhY3RlcmlzdGlj
cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OmNsYXNzaWZ5UHJldmFsZW50UmVzb3VyY2Vz
KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlLmg6CisgICAgICAgICAgICBBZGRlZCBtZW1iZXIgdmFyaWFibGVzIGZvciBjbGVhcmlu
ZyBvZiBkYXRhIHJlY29yZHMuCisKIDIwMTYtMTAtMDMgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFw
cGxlLmNvbT4KIAogICAgICAgICBBZGQgc3VwcG9ydCBmb3IgS2V5Ym9hcmRFdmVudC5rZXkgYXR0
cmlidXRlCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAkocmV2aXNpb24gMjA2NzUzKQorKysg
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDI0ICsyNiwyNiBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oIgogCisjaW5jbHVk
ZSAiQVBJV2Vic2l0ZURhdGFTdG9yZS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NNZXNzYWdlcy5o
IgogI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCiAjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJzaXRlRGF0YUZldGNoT3B0
aW9uLmgiCisjaW5jbHVkZSAiV2Vic2l0ZURhdGFUeXBlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9L
ZXllZENvZGluZy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5o
PgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFk
Lmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5o
PgogI2luY2x1ZGUgPHd0Zi90aHJlYWRzL0JpbmFyeVNlbWFwaG9yZS5oPgogCiB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLS8vIFN1YiBmcmFtZSBjbGFz
c2lmaWNhdGlvbiB0aHJlc2hvbGRzCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc3ViZnJhbWVVbmRl
clRvcEZyYW1lT3JpZ2luc1RocmVzaG9sZCA9IDM7Ci0gICAgCi0vLyBTdWJyZXNvdXJjZSBjbGFz
c2lmaWNhdGlvbiB0aHJlc2hvbGRzCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc3VicmVzb3VyY2VV
bmRlclRvcEZyYW1lT3JpZ2luc1RocmVzaG9sZCA9IDU7Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQg
c3VicmVzb3VyY2VIYXNCZWVuUmVkaXJlY3RlZEZyb21Ub1VuaXF1ZURvbWFpbnNUaHJlc2hvbGQg
PSAzOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHJlZGlyZWN0ZWRUb090aGVyUHJldmFsZW50UmVz
b3VyY2VPcmlnaW5zVGhyZXNob2xkID0gMjsKK3N0YXRpYyBjb25zdCBhdXRvIG51bWJlck9mU2Vj
b25kc0JldHdlZW5DbGVhcmluZ0RhdGFSZWNvcmRzID0gNjAwOworc3RhdGljIGNvbnN0IGF1dG8g
ZmVhdHVyZVZlY3Rvckxlbmd0aFRocmVzaG9sZCA9IDM7CiAKIFJlZjxXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU+IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y3JlYXRlKGNv
bnN0IFN0cmluZyYgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSkKIHsKQEAgLTUxLDcg
KzUzLDcgQEAgUmVmPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4gV2ViUgogfQogCiBX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZShjb25zdCBTdHJpbmcmIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpCi0gICAg
OiBtX3Jlc291cmNlU3RhdGlzdGljc1N0b3JlKFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6Y3JlYXRlKCkpCisgICAgOiBtX3Jlc291cmNlU3RhdGlzdGljc1N0b3JlKFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y3JlYXRlKCkpCiAgICAgLCBtX3N0YXRpc3RpY3NRdWV1
ZShXb3JrUXVldWU6OmNyZWF0ZSgiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlIFByb2Nl
c3MgRGF0YSBRdWV1ZSIpKQogICAgICwgbV9zdG9yYWdlUGF0aChyZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGlyZWN0b3J5KQogewpAQCAtNjEsMzcgKzYzLDEwMyBAQCBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6On5XZWJSZXNvCiB7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBoYXNQcmV2
YWxlbnRSZXNvdXJjZUNoYXJhY3RlcmlzdGljcyhjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
JiByZXNvdXJjZVN0YXRpc3RpYykKK2Jvb2wgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpoYXNQcmV2YWxlbnRSZXNvdXJjZUNoYXJhY3RlcmlzdGljcyhjb25zdCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzJiByZXNvdXJjZVN0YXRpc3RpYykKIHsKLSAgICByZXR1cm4gcmVzb3VyY2VTdGF0
aXN0aWMuc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucy5zaXplKCkgPiBzdWJmcmFtZVVuZGVy
VG9wRnJhbWVPcmlnaW5zVGhyZXNob2xkCi0gICAgICAgIHx8IHJlc291cmNlU3RhdGlzdGljLnN1
YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMuc2l6ZSgpID4gc3VicmVzb3VyY2VVbmRlclRv
cEZyYW1lT3JpZ2luc1RocmVzaG9sZAotICAgICAgICB8fCByZXNvdXJjZVN0YXRpc3RpYy5zdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnNpemUoKSA+IHN1YnJlc291cmNlSGFzQmVlblJlZGly
ZWN0ZWRGcm9tVG9VbmlxdWVEb21haW5zVGhyZXNob2xkCi0gICAgICAgIHx8IHJlc291cmNlU3Rh
dGlzdGljLnJlZGlyZWN0ZWRUb090aGVyUHJldmFsZW50UmVzb3VyY2VPcmlnaW5zLnNpemUoKSA+
IHJlZGlyZWN0ZWRUb090aGVyUHJldmFsZW50UmVzb3VyY2VPcmlnaW5zVGhyZXNob2xkOworICAg
IGF1dG8gc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50ID0gcmVzb3VyY2VTdGF0
aXN0aWMuc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lucy5zaXplKCk7CisgICAgYXV0byBz
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQgPSByZXNvdXJjZVN0YXRpc3RpYy5zdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnNpemUoKTsKKyAgICBhdXRvIHN1YmZyYW1lVW5kZXJU
b3BGcmFtZU9yaWdpbnNDb3VudCA9IHJlc291cmNlU3RhdGlzdGljLnN1YmZyYW1lVW5kZXJUb3BG
cmFtZU9yaWdpbnMuc2l6ZSgpOworICAgIAorICAgIGlmICghc3VicmVzb3VyY2VVbmRlclRvcEZy
YW1lT3JpZ2luc0NvdW50CisgICAgICAgICYmICFzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1Rv
Q291bnQKKyAgICAgICAgJiYgIXN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNDb3VudCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9y
aWdpbnNDb3VudCA+IGZlYXR1cmVWZWN0b3JMZW5ndGhUaHJlc2hvbGQKKyAgICAgICAgfHwgc3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50ID4gZmVhdHVyZVZlY3Rvckxlbmd0aFRocmVz
aG9sZAorICAgICAgICB8fCBzdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zQ291bnQgPiBmZWF0
dXJlVmVjdG9yTGVuZ3RoVGhyZXNob2xkKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8v
IFRoZSByZXNvdXJjZSBpcyBjb25zaWRlcmVkIHByZXZhbGVudCBpZiB0aGUgZmVhdHVyZSB2ZWN0
b3IKKyAgICAvLyBpcyBsb25nZXIgdGhhbiB0aGUgdGhyZXNob2xkLgorICAgIC8vIFZlY3RvciBs
ZW5ndGggZm9yIG4gZGltZW5zaW9ucyBpcyBzcXJ0KGFeMiArICguLi4pICsgbl4yKS4KKyAgICBk
b3VibGUgdmVjdG9yTGVuZ3RoID0gMDsKKyAgICB2ZWN0b3JMZW5ndGggKz0gc3VicmVzb3VyY2VV
bmRlclRvcEZyYW1lT3JpZ2luc0NvdW50ICogc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lu
c0NvdW50OworICAgIHZlY3Rvckxlbmd0aCArPSBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1Rv
Q291bnQgKiBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQ7CisgICAgdmVjdG9yTGVu
Z3RoICs9IHN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNDb3VudCAqIHN1YmZyYW1lVW5kZXJU
b3BGcmFtZU9yaWdpbnNDb3VudDsKKworICAgIEFTU0VSVCh2ZWN0b3JMZW5ndGggPiAwKTsKKwor
ICAgIHJldHVybiBzcXJ0KHZlY3Rvckxlbmd0aCkgPiBmZWF0dXJlVmVjdG9yTGVuZ3RoVGhyZXNo
b2xkOwogfQogICAgIAotc3RhdGljIGlubGluZSB2b2lkIGNsYXNzaWZ5UHJldmFsZW50UmVzb3Vy
Y2VzKFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHJlc291cmNlU3RhdGlzdGljLCBWZWN0b3I8U3Ry
aW5nPiYgcHJldmFsZW50UmVzb3VyY2VzLCBWZWN0b3I8U3RyaW5nPiYgcHJldmFsZW50UmVzb3Vy
Y2VzV2l0aFVzZXJJbnRlcmFjdGlvbikKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpjbGFzc2lmeVJlc291cmNlKFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHJlc291cmNlU3Rh
dGlzdGljKQogewotICAgIGlmIChyZXNvdXJjZVN0YXRpc3RpYy5pc1ByZXZhbGVudFJlc291cmNl
IHx8IGhhc1ByZXZhbGVudFJlc291cmNlQ2hhcmFjdGVyaXN0aWNzKHJlc291cmNlU3RhdGlzdGlj
KSkgeworICAgIGlmICghcmVzb3VyY2VTdGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJjZSAmJiBo
YXNQcmV2YWxlbnRSZXNvdXJjZUNoYXJhY3RlcmlzdGljcyhyZXNvdXJjZVN0YXRpc3RpYykpIHsK
ICAgICAgICAgcmVzb3VyY2VTdGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJjZSA9IHRydWU7Ci0g
ICAgICAgIGlmIChyZXNvdXJjZVN0YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb24pCi0gICAgICAg
ICAgICBwcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uLmFwcGVuZChyZXNvdXJj
ZVN0YXRpc3RpYy5oaWdoTGV2ZWxEb21haW4pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBw
cmV2YWxlbnRSZXNvdXJjZXMuYXBwZW5kKHJlc291cmNlU3RhdGlzdGljLmhpZ2hMZXZlbERvbWFp
bik7CiAgICAgfQogfQogCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xl
YXJEYXRhUmVjb3JkcygpCit7CisgICAgaWYgKG1fZGF0YVN0b3JlQ2xlYXJQZW5kaW5nKQorICAg
ICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8U3RyaW5nPiBwcmV2YWxlbnRSZXNvdXJjZURvbWFp
bnMgPSBjb3JlU3RvcmUoKS5wcmV2YWxlbnRSZXNvdXJjZURvbWFpbnNXaXRob3V0VXNlckludGVy
YWN0aW9uKCk7CisgICAgaWYgKCFwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMuc2l6ZSgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBkb3VibGUgbm93ID0gY3VycmVudFRpbWUoKTsKKyAgICBpZiAo
IW1fbGFzdFRpbWVEYXRhUmVjb3Jkc1dlcmVDbGVhcmVkKSB7CisgICAgICAgIG1fbGFzdFRpbWVE
YXRhUmVjb3Jkc1dlcmVDbGVhcmVkID0gbm93OworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKG5vdyA8IChtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlQ2xlYXJlZCArIG51bWJlck9m
U2Vjb25kc0JldHdlZW5DbGVhcmluZ0RhdGFSZWNvcmRzKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9kYXRhU3RvcmVDbGVhclBlbmRpbmcgPSB0cnVlOworICAgIG1fbGFzdFRpbWVEYXRhUmVj
b3Jkc1dlcmVDbGVhcmVkID0gbm93OworCisgICAgLy8gU3dpdGNoIHRvIHRoZSBtYWluIHRocmVh
ZCB0byBnZXQgdGhlIGRlZmF1bHQgd2Vic2l0ZSBkYXRhIHN0b3JlCisgICAgUnVuTG9vcDo6bWFp
bigpLmRpc3BhdGNoKFtwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMgPSBXVEZNb3ZlKHByZXZhbGVu
dFJlc291cmNlRG9tYWlucyksIHRoaXNdICgpIG11dGFibGUgeworICAgICAgICBhdXRvJiB3ZWJz
aXRlRGF0YVN0b3JlID0gQVBJOjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkt
PndlYnNpdGVEYXRhU3RvcmUoKTsKKworICAgICAgICB3ZWJzaXRlRGF0YVN0b3JlLmZldGNoRGF0
YShXZWJzaXRlRGF0YVR5cGU6OkNvb2tpZXMsIHsgfSwgW3ByZXZhbGVudFJlc291cmNlRG9tYWlu
cyA9IFdURk1vdmUocHJldmFsZW50UmVzb3VyY2VEb21haW5zKSwgdGhpc10oYXV0byB3ZWJzaXRl
RGF0YVJlY29yZHMpIHsKKyAgICAgICAgICAgIFZlY3RvcjxXZWJzaXRlRGF0YVJlY29yZD4gZGF0
YVJlY29yZHM7CisgICAgICAgICAgICBmb3IgKGF1dG8mIHdlYnNpdGVEYXRhUmVjb3JkIDogd2Vi
c2l0ZURhdGFSZWNvcmRzKSB7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBwcmV2YWxlbnRS
ZXNvdXJjZURvbWFpbiA6IHByZXZhbGVudFJlc291cmNlRG9tYWlucykgeworICAgICAgICAgICAg
ICAgICAgICBpZiAod2Vic2l0ZURhdGFSZWNvcmQuZGlzcGxheU5hbWUuZW5kc1dpdGhJZ25vcmlu
Z0FTQ0lJQ2FzZShwcmV2YWxlbnRSZXNvdXJjZURvbWFpbikpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGF1dG8gc3VmZml4U3RhcnQgPSB3ZWJzaXRlRGF0YVJlY29yZC5kaXNwbGF5TmFtZS5s
ZW5ndGgoKSAtIHByZXZhbGVudFJlc291cmNlRG9tYWluLmxlbmd0aCgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFzdWZmaXhTdGFydCB8fCB3ZWJzaXRlRGF0YVJlY29yZC5kaXNwbGF5
TmFtZVtzdWZmaXhTdGFydCAtIDFdID09ICcuJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkYXRhUmVjb3Jkcy5hcHBlbmQod2Vic2l0ZURhdGFSZWNvcmQpOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoIWRhdGFSZWNvcmRzLnNpemUoKSkgeworICAgICAgICAgICAgICAgIG1fZGF0YVN0b3JlQ2xl
YXJQZW5kaW5nID0gZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBhdXRvJiB3ZWJzaXRlRGF0YVN0b3JlID0gQVBJOjpXZWJzaXRlRGF0
YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPndlYnNpdGVEYXRhU3RvcmUoKTsKKyAgICAgICAg
ICAgIHdlYnNpdGVEYXRhU3RvcmUucmVtb3ZlRGF0YShXZWJzaXRlRGF0YVR5cGU6OkNvb2tpZXMs
IHsgV1RGTW92ZShkYXRhUmVjb3JkcykgfSwgW3RoaXNdIHsKKyAgICAgICAgICAgICAgICBtX2Rh
dGFTdG9yZUNsZWFyUGVuZGluZyA9IGZhbHNlOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0p
OworICAgIH0pOworfQorCiB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVz
b3VyY2VMb2FkU3RhdGlzdGljc1VwZGF0ZWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3M+JiBvcmlnaW5zKQogewogICAgIGNvcmVTdG9yZSgpLm1lcmdlU3RhdGlz
dGljcyhvcmlnaW5zKTsKIAotICAgIFZlY3RvcjxTdHJpbmc+IHByZXZhbGVudFJlc291cmNlcywg
cHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbjsKICAgICBpZiAoY29yZVN0b3Jl
KCkuaGFzRW5vdWdoRGF0YUZvclN0YXRpc3RpY3NQcm9jZXNzaW5nKCkpIHsKLSAgICAgICAgY29y
ZVN0b3JlKCkucHJvY2Vzc1N0YXRpc3RpY3MoW3RoaXMsICZwcmV2YWxlbnRSZXNvdXJjZXMsICZw
cmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uXSAoUmVzb3VyY2VMb2FkU3RhdGlz
dGljcyYgcmVzb3VyY2VTdGF0aXN0aWMpIHsKLSAgICAgICAgICAgIGNsYXNzaWZ5UHJldmFsZW50
UmVzb3VyY2VzKHJlc291cmNlU3RhdGlzdGljLCBwcmV2YWxlbnRSZXNvdXJjZXMsIHByZXZhbGVu
dFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24pOworICAgICAgICBjb3JlU3RvcmUoKS5wcm9j
ZXNzU3RhdGlzdGljcyhbdGhpc10gKFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHJlc291cmNlU3Rh
dGlzdGljKSB7CisgICAgICAgICAgICBjbGFzc2lmeVJlc291cmNlKHJlc291cmNlU3RhdGlzdGlj
KTsKKyAgICAgICAgICAgIGNsZWFyRGF0YVJlY29yZHMoKTsKICAgICAgICAgfSk7CiAgICAgfQog
Ci0gICAgLy8gRklYTUU6IE5vdGlmeSBpbmRpdmlkdWFsIFdlYlByb2Nlc3NlcyBvZiBwcmV2YWxl
bnQgZG9tYWlucyB1c2luZyB0aGUgdHdvIHZlY3RvcnMgcG9wdWxhdGVkIGJ5IHRoZSBjbGFzc2lm
aWVyLiA8cmRhcjovL3Byb2JsZW0vMjQ3MDMwOTk+CiAgICAgYXV0byBlbmNvZGVyID0gY29yZVN0
b3JlKCkuY3JlYXRlRW5jb2RlckZyb21EYXRhKCk7CiAgICAgCiAgICAgd3JpdGVFbmNvZGVyVG9E
aXNrKCplbmNvZGVyLmdldCgpLCAiZnVsbF9icm93c2luZ19zZXNzaW9uIik7CkBAIC0xNTIsNyAr
MjIwLDcgQEAgU3RyaW5nIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cAogewogICAg
IGlmIChtX3N0b3JhZ2VQYXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5n
KCk7Ci0gICAgCisKICAgICAvLyBUT0RPIERlY2lkZSB3aGF0IHRvIGNhbGwgdGhpcyBmaWxlCiAg
ICAgcmV0dXJuIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChtX3N0b3JhZ2VQYXRoLCBsYWJlbCAr
ICJfcmVzb3VyY2VMb2cucGxpc3QiKTsKIH0KQEAgLTE2MiwyMSArMjMwLDIxIEBAIHZvaWQgV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjp3cmkKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVy
PiByYXdEYXRhID0gZW5jb2Rlci5maW5pc2hFbmNvZGluZygpOwogICAgIGlmICghcmF3RGF0YSkK
ICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgU3RyaW5nIHJlc291cmNlTG9nID0gcGVyc2lz
dGVudFN0b3JhZ2VQYXRoKGxhYmVsKTsKICAgICBpZiAocmVzb3VyY2VMb2cuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm47Ci0gICAgCisKICAgICBpZiAoIW1fc3RvcmFnZVBhdGguaXNFbXB0eSgp
KQogICAgICAgICBtYWtlQWxsRGlyZWN0b3JpZXMobV9zdG9yYWdlUGF0aCk7Ci0gICAgCisKICAg
ICBhdXRvIGhhbmRsZSA9IG9wZW5GaWxlKHJlc291cmNlTG9nLCBPcGVuRm9yV3JpdGUpOwogICAg
IGlmICghaGFuZGxlKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaW50NjRfdCB3cml0dGVu
Qnl0ZXMgPSB3cml0ZVRvRmlsZShoYW5kbGUsIHJhd0RhdGEtPmRhdGEoKSwgcmF3RGF0YS0+c2l6
ZSgpKTsKICAgICBjbG9zZUZpbGUoaGFuZGxlKTsKLSAgICAKKwogICAgIGlmICh3cml0dGVuQnl0
ZXMgIT0gc3RhdGljX2Nhc3Q8aW50NjRfdD4ocmF3RGF0YS0+c2l6ZSgpKSkKICAgICAgICAgV1RG
TG9nQWx3YXlzKCJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6IFdlIG9ubHkgd3JvdGUg
JWQgb3V0IG9mICVkIGJ5dGVzIHRvIGRpc2siLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4od3JpdHRl
bkJ5dGVzKSwgcmF3RGF0YS0+c2l6ZSgpKTsKIH0KQEAgLTE4NiwxMSArMjU0LDExIEBAIHN0ZDo6
dW5pcXVlX3B0cjxLZXllZERlY29kZXI+IFdlYlJlc291cmMKICAgICBTdHJpbmcgcmVzb3VyY2VM
b2cgPSBwZXJzaXN0ZW50U3RvcmFnZVBhdGgobGFiZWwpOwogICAgIGlmIChyZXNvdXJjZUxvZy5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAorCiAgICAgUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gcmF3RGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlV2l0aENvbnRlbnRzT2ZG
aWxlKHJlc291cmNlTG9nKTsKICAgICBpZiAoIXJhd0RhdGEpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIAorCiAgICAgcmV0dXJuIEtleWVkRGVjb2Rlcjo6ZGVjb2RlcihyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihyYXdEYXRhLT5kYXRhKCkpLCByYXdEYXRhLT5zaXplKCkp
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCShyZXZpc2lvbiAyMDY3NTMpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkFQSU9iamVjdC5oIgog
I2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJXZWJzaXRlRGF0YVJlY29yZC5oIgog
I2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmg+CiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNzEs
NiArNzIsMTAgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBleHBsaWNpdCBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUoY29uc3QgU3RyaW5nJik7CiAKKyAgICBib29sIGhhc1ByZXZhbGVu
dFJlc291cmNlQ2hhcmFjdGVyaXN0aWNzKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3MmKTsKKyAgICB2b2lkIGNsYXNzaWZ5UmVzb3VyY2UoV2ViQ29yZTo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyYpOworICAgIHZvaWQgY2xlYXJEYXRhUmVjb3JkcygpOworCiAgICAgU3RyaW5n
IHBlcnNpc3RlbnRTdG9yYWdlUGF0aChjb25zdCBTdHJpbmcmIGxhYmVsKSBjb25zdDsKIAogICAg
IC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyCkBAIC04Myw2ICs4OCw5IEBAIHByaXZhdGU6CiAgICAg
UmVmPFdURjo6V29ya1F1ZXVlPiBtX3N0YXRpc3RpY3NRdWV1ZTsKICAgICBTdHJpbmcgbV9zdG9y
YWdlUGF0aDsKICAgICBib29sIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQgeyBmYWxz
ZSB9OworCisgICAgZG91YmxlIG1fbGFzdFRpbWVEYXRhUmVjb3Jkc1dlcmVDbGVhcmVkIHsgMCB9
OworICAgIGJvb2wgbV9kYXRhU3RvcmVDbGVhclBlbmRpbmcgeyBmYWxzZSB9OwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDY3NjEpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxNi0xMC0wNSAgSm9obiBXaWxhbmRlciAg
PHdpbGFuZGVyQGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGUgUmVzb3VyY2UgTG9hZCBTdGF0
aXN0aWNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjI4MTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdHMvbWFjL1B1YmxpY1N1ZmZpeC5tbToKKyAgICAgICAgICAgIENo
YW5nZSBmcm9tIFVTRShQVUJMSUNfU1VGRklYX0xJU1QpIHRvIEVOQUJMRShQVUJMSUNfU1VGRklY
X0xJU1QpCisKIDIwMTYtMTAtMDMgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Vi
a2l0Lm9yZz4KIAogICAgICAgICBVUkxQYXJzZXIgc2hvdWxkIGlnbm9yZSB0YWJzIGF0IGFsbCBs
b2NhdGlvbnMKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvbWFjL1B1YmxpY1N1ZmZp
eC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL21hYy9QdWJsaWNT
dWZmaXgubW0JKHJldmlzaW9uIDIwNjc1MykKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
bWFjL1B1YmxpY1N1ZmZpeC5tbQkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAKLSNpZiBVU0UoUFVCTElDX1NVRkZJWF9MSVNUKQorI2lmIEVO
QUJMRShQVUJMSUNfU1VGRklYX0xJU1QpCiAKICNpbmNsdWRlICJXVEZTdHJpbmdVdGlsaXRpZXMu
aCIKICNpbmNsdWRlIDxXZWJDb3JlL1B1YmxpY1N1ZmZpeC5oPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>