<?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>98521</bug_id>
          
          <creation_ts>2012-10-05 08:28:42 -0700</creation_ts>
          <short_desc>[Soup] Clean up ResourceError creation</short_desc>
          <delta_ts>2012-10-07 17:35:23 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>98532</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Martin Robinson">mrobinson</assigned_to>
          <cc>cgarcia</cc>
    
    <cc>danw</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>rakuco</cc>
    
    <cc>svillar</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>735654</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-10-05 08:28:42 -0700</bug_when>
    <thetext>ResourceError creation is scattered throughout ResourceHandleSoup.cpp. This bug tracks moving it all to ResourceErrorSoup.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735700</commentid>
    <comment_count>1</comment_count>
      <attachid>167337</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-10-05 09:28:21 -0700</bug_when>
    <thetext>Created attachment 167337
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735731</commentid>
    <comment_count>2</comment_count>
      <attachid>167337</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-10-05 10:00:41 -0700</bug_when>
    <thetext>Comment on attachment 167337
Patch

Attachment 167337 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14178537</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735736</commentid>
    <comment_count>3</comment_count>
      <attachid>167344</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-10-05 10:14:34 -0700</bug_when>
    <thetext>Created attachment 167344
Try to fix the EFL build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735743</commentid>
    <comment_count>4</comment_count>
      <attachid>167337</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-10-05 10:33:31 -0700</bug_when>
    <thetext>Comment on attachment 167337
Patch

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

It seems to me you are adding a lot of more code that what we currently have. Instead of adding more ResourceError constructors maybe we add ErrorsSoup with a similar pattern that ErrorsGtk and add specific errors like transportError and sslError for example. For generic errors we could probably add a constructor that receives a GError and a failing uri.

&gt; Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:409
&gt; +    if (!response.soupMessageTLSErrors())
&gt; +        return false;
&gt;  
&gt; -static inline bool hasUnignoredTLSErrors(ResourceHandle* handle)
&gt; -{
&gt; -    return handle-&gt;getInternal()-&gt;m_response.soupMessageTLSErrors()
&gt; -        &amp;&amp; !gIgnoreSSLErrors
&gt; -        &amp;&amp; !allowsAnyHTTPSCertificateHosts().contains(handle-&gt;firstRequest().url().host().lower());
&gt; +    String lowercaseHostURL = handle-&gt;firstRequest().url().host().lower();
&gt; +    if (gIgnoreSSLErrors || allowsAnyHTTPSCertificateHosts().contains(lowercaseHostURL))
&gt; +        return false;

I prefer a single if, and if gIgnoreSSLErrors or response.soupMessageTLSErrors() is tru you don&apos;t need to convert the host to lowercase:

if (!response.soupMessageTLSErrors() || gIgnoreSSLErrors || allowsAnyHTTPSCertificateHosts().contains(handle-&gt;firstRequest().url().host().lower())
    return;

&gt; Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:413
&gt; +    if (i != clientCertificates().end() || i-&gt;second.contains(response.soupMessageCertificate()))

I think this should be &amp;&amp; not || it means, if we find a certificate map and it contains the response certificate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735759</commentid>
    <comment_count>5</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-10-05 10:49:24 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 167337 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=167337&amp;action=review
&gt; 
&gt; It seems to me you are adding a lot of more code that what we currently have. Instead of adding more ResourceError constructors maybe we add ErrorsSoup with a similar pattern that ErrorsGtk and add specific errors like transportError and sslError for example. For generic errors we could probably add a constructor that receives a GError and a failing uri.

This patch adds a little bit more code, but the code is out of ResourceHandleSoup and separated into methods that fit onto one screen of text, so I think it&apos;s an overall improvement. As to the suggestion to use a pattern like ErrorsGtk, I want to actually move the networking related errors to ResourceErrorsSoup in a future patch, but not this one.  The code is moving in the direction you imagine, but more gradually. Hopefully it&apos;s okay to do things more slowly.
&gt; 
&gt; &gt; Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:409
&gt; &gt; +    if (!response.soupMessageTLSErrors())
&gt; &gt; +        return false;
&gt; &gt;  
&gt; &gt; -static inline bool hasUnignoredTLSErrors(ResourceHandle* handle)
&gt; &gt; -{
&gt; &gt; -    return handle-&gt;getInternal()-&gt;m_response.soupMessageTLSErrors()
&gt; &gt; -        &amp;&amp; !gIgnoreSSLErrors
&gt; &gt; -        &amp;&amp; !allowsAnyHTTPSCertificateHosts().contains(handle-&gt;firstRequest().url().host().lower());
&gt; &gt; +    String lowercaseHostURL = handle-&gt;firstRequest().url().host().lower();
&gt; &gt; +    if (gIgnoreSSLErrors || allowsAnyHTTPSCertificateHosts().contains(lowercaseHostURL))
&gt; &gt; +        return false;
&gt; 
&gt; I prefer a single if, and if gIgnoreSSLErrors or response.soupMessageTLSErrors() is tru you don&apos;t need to convert the host to lowercase:

What I&apos;ll do is to move the check for gIgnoreSSLErrors to the first conditional in this function. That&apos;s a good balance between what you are suggesting and my original intention, which was to avoid the duplicate call to host().lower().

&gt; if (!response.soupMessageTLSErrors() || gIgnoreSSLErrors || allowsAnyHTTPSCertificateHosts().contains(handle-&gt;firstRequest().url().host().lower())
&gt;     return;
&gt; 
&gt; &gt; Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:413
&gt; &gt; +    if (i != clientCertificates().end() || i-&gt;second.contains(response.soupMessageCertificate()))
&gt; 
&gt; I think this should be &amp;&amp; not || it means, if we find a certificate map and it contains the response certificate.

Good catch, I definitely futzed that up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735805</commentid>
    <comment_count>6</comment_count>
      <attachid>167357</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-10-05 11:25:05 -0700</bug_when>
    <thetext>Created attachment 167357
Respond to review comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736202</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-10-06 00:40:45 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; (From update of attachment 167337 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=167337&amp;action=review
&gt; &gt; 
&gt; &gt; It seems to me you are adding a lot of more code that what we currently have. Instead of adding more ResourceError constructors maybe we add ErrorsSoup with a similar pattern that ErrorsGtk and add specific errors like transportError and sslError for example. For generic errors we could probably add a constructor that receives a GError and a failing uri.
&gt; 
&gt; This patch adds a little bit more code, but the code is out of ResourceHandleSoup and separated into methods that fit onto one screen of text, so I think it&apos;s an overall improvement. As to the suggestion to use a pattern like ErrorsGtk, I want to actually move the networking related errors to ResourceErrorsSoup in a future patch, but not this one.  The code is moving in the direction you imagine, but more gradually. Hopefully it&apos;s okay to do things more slowly.

Ah, ok. 

&gt; &gt; &gt; Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:409
&gt; &gt; &gt; +    if (!response.soupMessageTLSErrors())
&gt; &gt; &gt; +        return false;
&gt; &gt; &gt;  
&gt; &gt; &gt; -static inline bool hasUnignoredTLSErrors(ResourceHandle* handle)
&gt; &gt; &gt; -{
&gt; &gt; &gt; -    return handle-&gt;getInternal()-&gt;m_response.soupMessageTLSErrors()
&gt; &gt; &gt; -        &amp;&amp; !gIgnoreSSLErrors
&gt; &gt; &gt; -        &amp;&amp; !allowsAnyHTTPSCertificateHosts().contains(handle-&gt;firstRequest().url().host().lower());
&gt; &gt; &gt; +    String lowercaseHostURL = handle-&gt;firstRequest().url().host().lower();
&gt; &gt; &gt; +    if (gIgnoreSSLErrors || allowsAnyHTTPSCertificateHosts().contains(lowercaseHostURL))
&gt; &gt; &gt; +        return false;
&gt; &gt; 
&gt; &gt; I prefer a single if, and if gIgnoreSSLErrors or response.soupMessageTLSErrors() is tru you don&apos;t need to convert the host to lowercase:
&gt; 
&gt; What I&apos;ll do is to move the check for gIgnoreSSLErrors to the first conditional in this function. That&apos;s a good balance between what you are suggesting and my original intention, which was to avoid the duplicate call to host().lower().

Ah, I see, the lowercase host is used later.

&gt; &gt; if (!response.soupMessageTLSErrors() || gIgnoreSSLErrors || allowsAnyHTTPSCertificateHosts().contains(handle-&gt;firstRequest().url().host().lower())
&gt; &gt;     return;
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:413
&gt; &gt; &gt; +    if (i != clientCertificates().end() || i-&gt;second.contains(response.soupMessageCertificate()))
&gt; &gt; 
&gt; &gt; I think this should be &amp;&amp; not || it means, if we find a certificate map and it contains the response certificate.
&gt; 
&gt; Good catch, I definitely futzed that up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736205</commentid>
    <comment_count>8</comment_count>
      <attachid>167357</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-10-06 00:54:08 -0700</bug_when>
    <thetext>Comment on attachment 167357
Respond to review comments

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

&gt; Source/WebCore/platform/network/soup/ResourceErrorSoup.cpp:71
&gt; +ResourceError::ResourceError(GError* error, SoupRequest* request, SoupMessage* message)
&gt; +    : ResourceErrorBase(errorDomain(message), errorCodeFromErrorAndMessage(error, message), failingURI(request), failureReason(error, message))
&gt; +    , m_tlsErrors(0)
&gt; +{
&gt; +}

Why not split this into two different constructors so that we don&apos;t need to check all the time whether it&apos;s a transport error or not? I find it a bit weird, because the constructor receives two arguments and only needs one of them depending on whether the error is a transport error or not. We could simply have 

ResourceError::ResourceError(SoupRequest* request, GError* error)
ResourceError::ResourceError(SoupRequest* request, SoupMessage* message)

moving the soupRequest as first parameter for consistency with the TLS error constructor that receives first the request and then the error information. With this approach the caller need to check which one to use, but only once, and we don&apos;t need all these small methods to decide what to use.

&gt; Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:409
&gt; +    if (!response.soupMessageTLSErrors() || gIgnoreSSLErrors)
&gt; +        return false;
&gt;  
&gt; -static inline bool hasUnignoredTLSErrors(ResourceHandle* handle)
&gt; -{
&gt; -    return handle-&gt;getInternal()-&gt;m_response.soupMessageTLSErrors()
&gt; -        &amp;&amp; !gIgnoreSSLErrors
&gt; -        &amp;&amp; !allowsAnyHTTPSCertificateHosts().contains(handle-&gt;firstRequest().url().host().lower());
&gt; +    String lowercaseHostURL = handle-&gt;firstRequest().url().host().lower();
&gt; +    if (allowsAnyHTTPSCertificateHosts().contains(lowercaseHostURL))
&gt; +        return false;

Perfect, I think this method is a lot easier to read and follow than the current code.

&gt; Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:417
&gt; +    handle-&gt;client()-&gt;didFail(handle, ResourceError(d-&gt;m_soupRequest.get(),
&gt; +        response.soupMessageTLSErrors(), response.soupMessageCertificate()));

Maybe we could use a single line here and avoid the new style rule that makes the code more difficult to read? I&apos;m not a fan of long lines, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736333</commentid>
    <comment_count>9</comment_count>
      <attachid>167469</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-10-06 23:43:40 -0700</bug_when>
    <thetext>Created attachment 167469
Same patch, but using the factory approach</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736334</commentid>
    <comment_count>10</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-10-06 23:45:51 -0700</bug_when>
    <thetext>(In reply to comment #8)

&gt; Why not split this into two different constructors so that we don&apos;t need to check all the time whether it&apos;s a transport error or not? I find it a bit weird, because the constructor receives two arguments and only needs one of them depending on whether the error is a transport error or not. We could simply have 

I finally took the factory approach we discussed in the end. It&apos;s a bit simpler and we might as well do this now.

&gt; &gt; Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:417
&gt; &gt; +    handle-&gt;client()-&gt;didFail(handle, ResourceError(d-&gt;m_soupRequest.get(),
&gt; &gt; +        response.soupMessageTLSErrors(), response.soupMessageCertificate()));
&gt; 
&gt; Maybe we could use a single line here and avoid the new style rule that makes the code more difficult to read? I&apos;m not a fan of long lines, though.

I went with the long line. I&apos;m not sure that one style is harder to read than the other, but it definitely takes a bit of time to get used to a different style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736343</commentid>
    <comment_count>11</comment_count>
      <attachid>167469</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-10-07 01:34:12 -0700</bug_when>
    <thetext>Comment on attachment 167469
Same patch, but using the factory approach

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

This is a lot simpler, thanks! Please check my comments before landing, most of them are just suggestions or questions.

&gt; Source/WebCore/ChangeLog:23
&gt; +        * platform/network/soup/ResourceErrorSoup.cpp: Added.
&gt; +        (WebCore::isTransportError): Added helper to be used in the constructor.
&gt; +        (WebCore::errorDomain): Ditto.
&gt; +        (WebCore::errorCodeFromErrorAndMessage): Ditto.
&gt; +        (WebCore::failingURI): Ditto.
&gt; +        (WebCore::failureReason): Ditto.
&gt; +        (WebCore::ResourceError::timeoutError): Added this factory.

This needs to be updated to the new factory approach.

&gt; Source/WebCore/platform/network/soup/ResourceErrorSoup.cpp:45
&gt; +ResourceError ResourceError::soupMessageError(SoupMessage* message, GError* error, SoupRequest* request)

soupHTTPError()? it&apos;s consistent with the error domain SOUP_HTTP_ERROR and doesn&apos;t seem like there&apos;s an error in the message itself.

&gt; Source/WebCore/platform/network/soup/ResourceErrorSoup.cpp:50
&gt; +    if (!message || !SOUP_STATUS_IS_TRANSPORT_ERROR(message-&gt;status_code))
&gt; +        return gerrorError(error, request);
&gt; +    return ResourceError(g_quark_to_string(SOUP_HTTP_ERROR), message-&gt;status_code,
&gt; +        failingURI(request), String::fromUTF8(message-&gt;reason_phrase));

Same happens to me here, at a first glance the last line seems to me like a bad indented line instead of the second line of a multiline function call, because it&apos;s lined up with the previous return in the if. Maybe it&apos;s a matter of getting used to it, as you said, but I find it very confusing. Anyway, I&apos;m not suggesting you to change anything, because in the end it&apos;s just my personal feeling, so feel free to leave it this way or use a single line.

&gt; Source/WebCore/platform/network/soup/ResourceErrorSoup.cpp:57
&gt; +ResourceError ResourceError::gerrorError(GError* error, SoupRequest* request)
&gt; +{
&gt; +    return ResourceError(g_quark_to_string(G_IO_ERROR), error-&gt;code,
&gt; +        failingURI(request), String::fromUTF8(error-&gt;message));
&gt; +}

gIOError() maybe? it&apos;s a GIO error in the end not a generic GError. Or you can take the domain from the GError instead of using G_IO_ERROR unconditionally.

&gt; Source/WebCore/platform/network/soup/ResourceErrorSoup.cpp:72
&gt; +    static const char* const  errorDomain = &quot;WebKitnetworkError&quot;;

Why do you need to cache this? why not just using &quot;WebKitnetworkError&quot; directly?

&gt; Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:402
&gt; +    static const ResourceResponse&amp; response = d-&gt;m_response;

I haven&apos;t noticed this before, why is this static? what happens when the ResourceHandleInternal is deleted? Why do you need to cache this instead of simply use d-&gt;m_response directly?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736380</commentid>
    <comment_count>12</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-10-07 10:20:21 -0700</bug_when>
    <thetext>(In reply to comment #11)

Thanks for the review.

&gt; &gt; Source/WebCore/ChangeLog:23
&gt; &gt; +        * platform/network/soup/ResourceErrorSoup.cpp: Added.
&gt; &gt; +        (WebCore::isTransportError): Added helper to be used in the constructor.
&gt; &gt; +        (WebCore::errorDomain): Ditto.
&gt; &gt; +        (WebCore::errorCodeFromErrorAndMessage): Ditto.
&gt; &gt; +        (WebCore::failingURI): Ditto.
&gt; &gt; +        (WebCore::failureReason): Ditto.
&gt; &gt; +        (WebCore::ResourceError::timeoutError): Added this factory.
&gt; 
&gt; This needs to be updated to the new factory approach.

Okay.

&gt; 
&gt; &gt; Source/WebCore/platform/network/soup/ResourceErrorSoup.cpp:45
&gt; &gt; +ResourceError ResourceError::soupMessageError(SoupMessage* message, GError* error, SoupRequest* request)
&gt; 
&gt; soupHTTPError()? it&apos;s consistent with the error domain SOUP_HTTP_ERROR and doesn&apos;t seem like there&apos;s an error in the message itself.

I chose httpError(...)
 
&gt; &gt; Source/WebCore/platform/network/soup/ResourceErrorSoup.cpp:50
&gt; &gt; +    if (!message || !SOUP_STATUS_IS_TRANSPORT_ERROR(message-&gt;status_code))
&gt; &gt; +        return gerrorError(error, request);
&gt; &gt; +    return ResourceError(g_quark_to_string(SOUP_HTTP_ERROR), message-&gt;status_code,
&gt; &gt; +        failingURI(request), String::fromUTF8(message-&gt;reason_phrase));
&gt; 
&gt; Same happens to me here, at a first glance the last line seems to me like a bad indented line instead of the second line of a multiline function call, because it&apos;s lined up with the previous return in the if. Maybe it&apos;s a matter of getting used to it, as you said, but I find it very confusing. Anyway, I&apos;m not suggesting you to change anything, because in the end it&apos;s just my personal feeling, so feel free to leave it this way or use a single line.

Yeah, having the style change on us is pretty annoying.

&gt; &gt; Source/WebCore/platform/network/soup/ResourceErrorSoup.cpp:57
&gt; &gt; +ResourceError ResourceError::gerrorError(GError* error, SoupRequest* request)
&gt; &gt; +{
&gt; &gt; +    return ResourceError(g_quark_to_string(G_IO_ERROR), error-&gt;code,
&gt; &gt; +        failingURI(request), String::fromUTF8(error-&gt;message));
&gt; &gt; +}
&gt; 
&gt; gIOError() maybe? it&apos;s a GIO error in the end not a generic GError. Or you can take the domain from the GError instead of using G_IO_ERROR unconditionally.

Here I chose genericIOError, to stress that it&apos;s just a generic scrape of the GIO GError information.

&gt; &gt; Source/WebCore/platform/network/soup/ResourceErrorSoup.cpp:72
&gt; &gt; +    static const char* const  errorDomain = &quot;WebKitnetworkError&quot;;
&gt; 
&gt; Why do you need to cache this? why not just using &quot;WebKitnetworkError&quot; directly?

It&apos;s not really important to cache it, but putting it in a variable called errorDomain just makes it clear what it refers to.
 
&gt; &gt; Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:402
&gt; &gt; +    static const ResourceResponse&amp; response = d-&gt;m_response;
&gt; 
&gt; I haven&apos;t noticed this before, why is this static? what happens when the ResourceHandleInternal is deleted? Why do you need to cache this instead of simply use d-&gt;m_response directly?

This was an oversight on my part. I&apos;ll fix it before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736450</commentid>
    <comment_count>13</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-10-07 17:35:23 -0700</bug_when>
    <thetext>Committed r130613: &lt;http://trac.webkit.org/changeset/130613&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167337</attachid>
            <date>2012-10-05 09:28:21 -0700</date>
            <delta_ts>2012-10-05 11:24:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98521-20121005092729.patch</filename>
            <type>text/plain</type>
            <size>13908</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwNTA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTc4NzY1ZDkzMWM3Mjlh
MDY5YmRiOWFmZmIzZGUwNGRjZTZmNzZiNi4uNmExZmUzYjU1ODUwYTNjYjJhOWZjNDBiNTEwOTAz
YjVlMjRkNjM2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDEyLTEwLTA1ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbU291cF0gQ2xl
YW4gdXAgUmVzb3VyY2VFcnJvciBjcmVhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTg1MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBTaW1wbGlmeSB0aGUgY3JlYXRpb24gb2YgUmVzb3VyY0Vycm9y
cyBpbiBSZXNvdXJjZUhhbmRsZVNvdXAuIFRoaXMgaXMKKyAgICAgICAgcGFydCBvZiBhIHByb2Nl
c3MgdG8gbWFrZSB0aGUgbGlic291cCBuZXR3b3JraW5nIGJhY2tlbmQgbW9yZSBoYWNrYWJsZS4K
KworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgc2hvdWxkbid0IGNoYW5nZSBmdW5jdGlvbmFs
aXR5LgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbTogQWRkZWQgbmV3IGZpbGUuCisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlRXJyb3IuaDoKKyAgICAgICAg
KFJlc291cmNlRXJyb3IpOiBBZGRlZCBuZXcgY29uc3RydWN0b3JzLgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUVycm9yU291cC5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6aXNUcmFuc3BvcnRFcnJvcik6IEFkZGVkIGhlbHBlciB0byBiZSB1c2VkIGluIHRo
ZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKFdlYkNvcmU6OmVycm9yRG9tYWluKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjplcnJvckNvZGVGcm9tRXJyb3JBbmRNZXNzYWdlKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpmYWlsaW5nVVJJKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpm
YWlsdXJlUmVhc29uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUVycm9yOjp0
aW1lb3V0RXJyb3IpOiBBZGRlZCB0aGlzIGZhY3RvcnkuCisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpoYW5k
bGVVbmlnbm9yZWRUTFNFcnJvcnMpOiBDcmVhdGVkIHRoaXMgaGVscGVyIHdoaWNoIG1lcmdlcwor
ICAgICAgICBzb21lIG9mIHRoZSBsb2dpYyBmcm9tIHNlbmRSZXF1ZXN0Q2FsbGJhY2suCisgICAg
ICAgIChXZWJDb3JlOjpzZW5kUmVxdWVzdENhbGxiYWNrKTogVXNlIHRoZSBuZXcgaGVscGVyLgor
ICAgICAgICAoV2ViQ29yZTo6cmVxdWVzdFRpbWVvdXRDYWxsYmFjayk6IFVzZSB0aGUgbmV3IGZh
Y3RvcnkuCisKIDIwMTItMTAtMDUgIEdhYm9yIFJhcGNzYW55aSAgPHJnYWJvckB3ZWJraXQub3Jn
PgogCiAgICAgICAgIEFkZCBBUk0tTkVPTiBzdXBwb3J0IHRvIFZlY3Rvck1hdGggaW4gV2ViQXVk
aW8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGI4OGY5ZGM5NmE4MDJmOWE0M2Uw
ZDdjNmMxMzAwYzI2YzgxNWFkY2EuLmM2ZjE2ZDRhYTE3MmIyZDgwZDY2Y2Y3YmI1NDQ3YWVkYWE0
MTAwM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysr
IGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNDcwNiw2ICs0NzA2LDcg
QEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvR093blB0clNvdXAuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL1Byb3h5U2VydmVyU291cC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9SZXNvdXJjZUVycm9yLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9SZXNvdXJjZUVycm9yU291cC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0LmggXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcCBcCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VFcnJvci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlRXJyb3IuaApp
bmRleCAzNzg4MGU1MmQ4NGU2YmQyMmU1MjEzZWJmMzliYmNjNjY5MDZiYzlmLi43NWExYjYxODU0
ZjU2ZmExMDg1N2NjN2E0NzZjOTdlZDcwNGQ3M2MxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VFcnJvci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUVycm9yLmgKQEAgLTMwLDYgKzMwLDgg
QEAKICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CiAKIHR5cGVkZWYgc3RydWN0IF9H
VGxzQ2VydGlmaWNhdGUgR1Rsc0NlcnRpZmljYXRlOwordHlwZWRlZiBzdHJ1Y3QgX1NvdXBSZXF1
ZXN0IFNvdXBSZXF1ZXN0OwordHlwZWRlZiBzdHJ1Y3QgX1NvdXBNZXNzYWdlIFNvdXBNZXNzYWdl
OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQxLDE4ICs0MywxNiBAQCBwdWJsaWM6CiAg
ICAgewogICAgIH0KIAorICAgIFJlc291cmNlRXJyb3IoR0Vycm9yKiwgU291cFJlcXVlc3QqLCBT
b3VwTWVzc2FnZSogPSAwKTsKKyAgICBSZXNvdXJjZUVycm9yKFNvdXBSZXF1ZXN0KiwgdW5zaWdu
ZWQgdGxzRXJyb3JzLCBHVGxzQ2VydGlmaWNhdGUqKTsKKwogICAgIFJlc291cmNlRXJyb3IoY29u
c3QgU3RyaW5nJiBkb21haW4sIGludCBlcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZmFpbGluZ1VS
TCwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXNjcmlwdGlvbikKICAgICAgICAgOiBSZXNvdXJj
ZUVycm9yQmFzZShkb21haW4sIGVycm9yQ29kZSwgZmFpbGluZ1VSTCwgbG9jYWxpemVkRGVzY3Jp
cHRpb24pCiAgICAgICAgICwgbV90bHNFcnJvcnMoMCkKICAgICB7CiAgICAgfQogCi0gICAgUmVz
b3VyY2VFcnJvcihjb25zdCBTdHJpbmcmIGRvbWFpbiwgaW50IGVycm9yQ29kZSwgY29uc3QgU3Ry
aW5nJiBmYWlsaW5nVVJMLCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERlc2NyaXB0aW9uLCB1bnNp
Z25lZCB0bHNFcnJvcnMsIEdUbHNDZXJ0aWZpY2F0ZSogY2VydGlmaWNhdGUpCi0gICAgICAgIDog
UmVzb3VyY2VFcnJvckJhc2UoZG9tYWluLCBlcnJvckNvZGUsIGZhaWxpbmdVUkwsIGxvY2FsaXpl
ZERlc2NyaXB0aW9uKQotICAgICAgICAsIG1fdGxzRXJyb3JzKHRsc0Vycm9ycykKLSAgICAgICAg
LCBtX2NlcnRpZmljYXRlKGNlcnRpZmljYXRlKQotICAgIHsKLSAgICB9CisgICAgc3RhdGljIFJl
c291cmNlRXJyb3IgdGltZW91dEVycm9yKGNvbnN0IFN0cmluZyYgZmFpbGluZ1VSTCk7CiAKICAg
ICB1bnNpZ25lZCB0bHNFcnJvcnMoKSBjb25zdCB7IHJldHVybiBtX3Rsc0Vycm9yczsgfQogICAg
IEdUbHNDZXJ0aWZpY2F0ZSogY2VydGlmaWNhdGUoKSBjb25zdCB7IHJldHVybiBtX2NlcnRpZmlj
YXRlLmdldCgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvUmVzb3VyY2VFcnJvclNvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL1Jlc291cmNlRXJyb3JTb3VwLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YmE2YzA5MTY1NTM0
ODM5YjY0ZDI4ZTVmNzQyMjIxNDYyMjJhMTk3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlRXJyb3JTb3VwLmNwcApAQCAtMCww
ICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBJR0FMSUEgUy5MLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKKworI2luY2x1ZGUgIkxvY2Fs
aXplZFN0cmluZ3MuaCIKKyNkZWZpbmUgTElCU09VUF9VU0VfVU5TVEFCTEVfUkVRVUVTVF9BUEkK
KyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAtcmVxdWVzdC5oPgorI2luY2x1ZGUgPGxpYnNvdXAvc291
cC5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGJvb2wgaXNUcmFu
c3BvcnRFcnJvcihTb3VwTWVzc2FnZSogbWVzc2FnZSkKK3sKKyAgICByZXR1cm4gbWVzc2FnZSAm
JiBTT1VQX1NUQVRVU19JU19UUkFOU1BPUlRfRVJST1IobWVzc2FnZS0+c3RhdHVzX2NvZGUpOwor
fQorCitzdGF0aWMgY29uc3QgU3RyaW5nIGVycm9yRG9tYWluKFNvdXBNZXNzYWdlKiBtZXNzYWdl
KQoreworICAgIHJldHVybiBnX3F1YXJrX3RvX3N0cmluZyhpc1RyYW5zcG9ydEVycm9yKG1lc3Nh
Z2UpID8gU09VUF9IVFRQX0VSUk9SIDogR19JT19FUlJPUik7Cit9CisKK3N0YXRpYyBpbnQgZXJy
b3JDb2RlRnJvbUVycm9yQW5kTWVzc2FnZShHRXJyb3IqIGVycm9yLCBTb3VwTWVzc2FnZSogbWVz
c2FnZSkKK3sKKyAgICBBU1NFUlQoZXJyb3IpOworICAgIHJldHVybiBpc1RyYW5zcG9ydEVycm9y
KG1lc3NhZ2UpID8gbWVzc2FnZS0+c3RhdHVzX2NvZGUgOiBlcnJvci0+Y29kZTsKK30KKworc3Rh
dGljIFN0cmluZyBmYWlsaW5nVVJJKFNvdXBSZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIEFTU0VS
VChyZXF1ZXN0KTsKKyAgICBHT3duUHRyPGNoYXI+IHVyaShzb3VwX3VyaV90b19zdHJpbmcoc291
cF9yZXF1ZXN0X2dldF91cmkocmVxdWVzdCksIEZBTFNFKSk7CisgICAgcmV0dXJuIHVyaS5nZXQo
KTsKK30KKworc3RhdGljIFN0cmluZyBmYWlsdXJlUmVhc29uKEdFcnJvciogZXJyb3IsIFNvdXBN
ZXNzYWdlKiBtZXNzYWdlKQoreworICAgIEFTU0VSVChlcnJvcik7CisgICAgcmV0dXJuIFN0cmlu
Zzo6ZnJvbVVURjgoaXNUcmFuc3BvcnRFcnJvcihtZXNzYWdlKSA/IG1lc3NhZ2UtPnJlYXNvbl9w
aHJhc2UgOiBlcnJvci0+bWVzc2FnZSk7Cit9CisKK1Jlc291cmNlRXJyb3I6OlJlc291cmNlRXJy
b3IoR0Vycm9yKiBlcnJvciwgU291cFJlcXVlc3QqIHJlcXVlc3QsIFNvdXBNZXNzYWdlKiBtZXNz
YWdlKQorICAgIDogUmVzb3VyY2VFcnJvckJhc2UoZXJyb3JEb21haW4obWVzc2FnZSksIGVycm9y
Q29kZUZyb21FcnJvckFuZE1lc3NhZ2UoZXJyb3IsIG1lc3NhZ2UpLCBmYWlsaW5nVVJJKHJlcXVl
c3QpLCBmYWlsdXJlUmVhc29uKGVycm9yLCBtZXNzYWdlKSkKKyAgICAsIG1fdGxzRXJyb3JzKDAp
Cit7Cit9CisKK1Jlc291cmNlRXJyb3I6OlJlc291cmNlRXJyb3IoU291cFJlcXVlc3QqIHJlcXVl
c3QsIHVuc2lnbmVkIHRsc0Vycm9ycywgR1Rsc0NlcnRpZmljYXRlKiBjZXJ0aWZpY2F0ZSkKKyAg
ICA6IFJlc291cmNlRXJyb3JCYXNlKGdfcXVhcmtfdG9fc3RyaW5nKFNPVVBfSFRUUF9FUlJPUiks
IFNPVVBfU1RBVFVTX1NTTF9GQUlMRUQsIGZhaWxpbmdVUkkocmVxdWVzdCksIHVuYWNjZXB0YWJs
ZVRMU0NlcnRpZmljYXRlKCkpCisgICAgLCBtX3Rsc0Vycm9ycyh0bHNFcnJvcnMpCisgICAgLCBt
X2NlcnRpZmljYXRlKGNlcnRpZmljYXRlKQoreworfQorCitSZXNvdXJjZUVycm9yIFJlc291cmNl
RXJyb3I6OnRpbWVvdXRFcnJvcihjb25zdCBTdHJpbmcmIGZhaWxpbmdVUkwpCit7CisgICAgLy8g
RklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IGVpdGhlciBiZSBpbnRlZ3JhdGVkIGludG8gRXJy
b3JzKEd0ay9FRkwpLmggb3IgdGhlCisgICAgLy8gbmV0d29ya2luZyBlcnJvcnMgZnJvbSB0aG9z
ZSBmaWxlcyBzaG91bGQgYmUgbW92ZWQgaGVyZS4KKworICAgIC8vIFVzZSB0aGUgc2FtZSB2YWx1
ZSBhcyBpbiBOU1VSTEVycm9yLmgKKyAgICBzdGF0aWMgY29uc3QgaW50IHRpbWVvdXRFcnJvciA9
IC0xMDAxOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCAgZXJyb3JEb21haW4gPSAiV2Vi
S2l0bmV0d29ya0Vycm9yIjsKKyAgICBSZXNvdXJjZUVycm9yIGVycm9yID0gUmVzb3VyY2VFcnJv
cihlcnJvckRvbWFpbiwgdGltZW91dEVycm9yLCBmYWlsaW5nVVJMLCAiUmVxdWVzdCB0aW1lZCBv
dXQiKTsKKyAgICBlcnJvci5zZXRJc1RpbWVvdXQodHJ1ZSk7CisgICAgcmV0dXJuIGVycm9yOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCmluZGV4IDNj
MzRlZmI0NThjY2RkZmU1MzYxZjFlZDM2NTJhODdlZDc1NDgzYzAuLmRiYTA0NjQ1MTFkZjVlMjJj
MGY4MGFjMGFkM2ZlZTdhYWFkOGMyOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCkBAIC03Miw5
ICs3Miw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2RlZmluZSBSRUFEX0JVRkZFUl9TSVpF
IDgxOTIKIAotLy8gVXNlIHRoZSBzYW1lIHZhbHVlIGFzIGluIE5TVVJMRXJyb3IuaAotc3RhdGlj
IGNvbnN0IGludCBnVGltZW91dEVycm9yID0gLTEwMDE7Ci0KIHN0YXRpYyBib29sIGxvYWRpbmdT
eW5jaHJvbm91c1JlcXVlc3QgPSBmYWxzZTsKIAogY2xhc3MgV2ViQ29yZVN5bmNocm9ub3VzTG9h
ZGVyIDogcHVibGljIFJlc291cmNlSGFuZGxlQ2xpZW50IHsKQEAgLTM5OSwzMSArMzk2LDI2IEBA
IHN0YXRpYyB2b2lkIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbihSZXNvdXJjZUhhbmRsZSog
aGFuZGxlLCBib29sIGlzRGVzdHJveWluCiAgICAgICAgIGhhbmRsZS0+ZGVyZWYoKTsKIH0KIAot
c3RhdGljIFJlc291cmNlRXJyb3IgY29udmVydFNvdXBFcnJvclRvUmVzb3VyY2VFcnJvcihHRXJy
b3IqIGVycm9yLCBTb3VwUmVxdWVzdCogcmVxdWVzdCwgU291cE1lc3NhZ2UqIG1lc3NhZ2UgPSAw
KQorc3RhdGljIGJvb2wgaGFuZGxlVW5pZ25vcmVkVExTRXJyb3JzKFJlc291cmNlSGFuZGxlKiBo
YW5kbGUpCiB7Ci0gICAgQVNTRVJUKGVycm9yKTsKLSAgICBBU1NFUlQocmVxdWVzdCk7Ci0KLSAg
ICBHT3duUHRyPGNoYXI+IHVyaShzb3VwX3VyaV90b19zdHJpbmcoc291cF9yZXF1ZXN0X2dldF91
cmkocmVxdWVzdCksIEZBTFNFKSk7Ci0gICAgaWYgKG1lc3NhZ2UgJiYgU09VUF9TVEFUVVNfSVNf
VFJBTlNQT1JUX0VSUk9SKG1lc3NhZ2UtPnN0YXR1c19jb2RlKSkgewotICAgICAgICByZXR1cm4g
UmVzb3VyY2VFcnJvcihnX3F1YXJrX3RvX3N0cmluZyhTT1VQX0hUVFBfRVJST1IpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxnaW50PihtZXNzYWdlLT5zdGF0dXNf
Y29kZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaS5nZXQoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOjpmcm9tVVRGOChtZXNzYWdlLT5yZWFzb25fcGhy
YXNlKSk7Ci0gICAgfQorICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdl
dEludGVybmFsKCk7CisgICAgc3RhdGljIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNl
ID0gZC0+bV9yZXNwb25zZTsKIAotICAgIC8vIE5vbi10cmFuc3BvcnQgZXJyb3JzIGFyZSBoYW5k
bGVkIGRpZmZlcmVudGx5LgotICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGdfcXVhcmtfdG9fc3Ry
aW5nKEdfSU9fRVJST1IpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLT5jb2RlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgIHVyaS5nZXQoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICBTdHJpbmc6OmZyb21VVEY4KGVycm9yLT5tZXNzYWdlKSk7Ci19CisgICAgaWYgKCFyZXNw
b25zZS5zb3VwTWVzc2FnZVRMU0Vycm9ycygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLXN0
YXRpYyBpbmxpbmUgYm9vbCBoYXNVbmlnbm9yZWRUTFNFcnJvcnMoUmVzb3VyY2VIYW5kbGUqIGhh
bmRsZSkKLXsKLSAgICByZXR1cm4gaGFuZGxlLT5nZXRJbnRlcm5hbCgpLT5tX3Jlc3BvbnNlLnNv
dXBNZXNzYWdlVExTRXJyb3JzKCkKLSAgICAgICAgJiYgIWdJZ25vcmVTU0xFcnJvcnMKLSAgICAg
ICAgJiYgIWFsbG93c0FueUhUVFBTQ2VydGlmaWNhdGVIb3N0cygpLmNvbnRhaW5zKGhhbmRsZS0+
Zmlyc3RSZXF1ZXN0KCkudXJsKCkuaG9zdCgpLmxvd2VyKCkpOworICAgIFN0cmluZyBsb3dlcmNh
c2VIb3N0VVJMID0gaGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKS5ob3N0KCkubG93ZXIoKTsK
KyAgICBpZiAoZ0lnbm9yZVNTTEVycm9ycyB8fCBhbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlSG9z
dHMoKS5jb250YWlucyhsb3dlcmNhc2VIb3N0VVJMKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgLy8gV2UgYXJlbid0IGlnbm9yaW5nIGVycm9ycyBnbG9iYWxseSwgYnV0IHRoZSB1c2Vy
IG1heSBoYXZlIGFscmVhZHkgZGVjaWRlZCB0byBhY2NlcHQgdGhpcyBjZXJ0aWZpY2F0ZS4KKyAg
ICBDZXJ0aWZpY2F0ZXNNYXA6Oml0ZXJhdG9yIGkgPSBjbGllbnRDZXJ0aWZpY2F0ZXMoKS5maW5k
KGxvd2VyY2FzZUhvc3RVUkwpOworICAgIGlmIChpICE9IGNsaWVudENlcnRpZmljYXRlcygpLmVu
ZCgpIHx8IGktPnNlY29uZC5jb250YWlucyhyZXNwb25zZS5zb3VwTWVzc2FnZUNlcnRpZmljYXRl
KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBoYW5kbGUtPmNsaWVudCgpLT5kaWRG
YWlsKGhhbmRsZSwgUmVzb3VyY2VFcnJvcihkLT5tX3NvdXBSZXF1ZXN0LmdldCgpLAorICAgICAg
ICByZXNwb25zZS5zb3VwTWVzc2FnZVRMU0Vycm9ycygpLCByZXNwb25zZS5zb3VwTWVzc2FnZUNl
cnRpZmljYXRlKCkpKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGljIHZvaWQgc2VuZFJl
cXVlc3RDYWxsYmFjayhHT2JqZWN0KiwgR0FzeW5jUmVzdWx0KiByZXMsIGdwb2ludGVyIGRhdGEp
CkBAIC00NDcsNyArNDM5LDcgQEAgc3RhdGljIHZvaWQgc2VuZFJlcXVlc3RDYWxsYmFjayhHT2Jq
ZWN0KiwgR0FzeW5jUmVzdWx0KiByZXMsIGdwb2ludGVyIGRhdGEpCiAgICAgR093blB0cjxHRXJy
b3I+IGVycm9yOwogICAgIEdJbnB1dFN0cmVhbSogaW4gPSBzb3VwX3JlcXVlc3Rfc2VuZF9maW5p
c2goZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSwgcmVzLCAmZXJyb3Iub3V0UHRyKCkpOwogICAgIGlm
IChlcnJvcikgewotICAgICAgICBjbGllbnQtPmRpZEZhaWwoaGFuZGxlLmdldCgpLCBjb252ZXJ0
U291cEVycm9yVG9SZXNvdXJjZUVycm9yKGVycm9yLmdldCgpLCBkLT5tX3NvdXBSZXF1ZXN0Lmdl
dCgpLCBzb3VwTWVzc2FnZSkpOworICAgICAgICBjbGllbnQtPmRpZEZhaWwoaGFuZGxlLmdldCgp
LCBSZXNvdXJjZUVycm9yKGVycm9yLmdldCgpLCBkLT5tX3NvdXBSZXF1ZXN0LmdldCgpLCBzb3Vw
TWVzc2FnZSkpOwogICAgICAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxlLmdl
dCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTQ2MiwxNyArNDU0LDExIEBAIHN0YXRp
YyB2b2lkIHNlbmRSZXF1ZXN0Q2FsbGJhY2soR09iamVjdCosIEdBc3luY1Jlc3VsdCogcmVzLCBn
cG9pbnRlciBkYXRhKQogICAgICAgICB9CiAgICAgICAgIGQtPm1fcmVzcG9uc2UudXBkYXRlRnJv
bVNvdXBNZXNzYWdlKHNvdXBNZXNzYWdlKTsKIAotICAgICAgICBpZiAoaGFzVW5pZ25vcmVkVExT
RXJyb3JzKGhhbmRsZS5nZXQoKSkpIHsKLSAgICAgICAgICAgIENlcnRpZmljYXRlc01hcDo6aXRl
cmF0b3IgaXRlciA9IGNsaWVudENlcnRpZmljYXRlcygpLmZpbmQoaGFuZGxlLT5maXJzdFJlcXVl
c3QoKS51cmwoKS5ob3N0KCkubG93ZXIoKSk7Ci0gICAgICAgICAgICBpZiAoaXRlciA9PSBjbGll
bnRDZXJ0aWZpY2F0ZXMoKS5lbmQoKSB8fCAhaXRlci0+c2Vjb25kLmNvbnRhaW5zKGQtPm1fcmVz
cG9uc2Uuc291cE1lc3NhZ2VDZXJ0aWZpY2F0ZSgpKSkgewotICAgICAgICAgICAgICAgIEdPd25Q
dHI8Y2hhcj4gdXJpKHNvdXBfdXJpX3RvX3N0cmluZyhzb3VwX3JlcXVlc3RfZ2V0X3VyaShkLT5t
X3NvdXBSZXF1ZXN0LmdldCgpKSwgRkFMU0UpKTsKLSAgICAgICAgICAgICAgICBjbGllbnQtPmRp
ZEZhaWwoaGFuZGxlLmdldCgpLCBSZXNvdXJjZUVycm9yKGdfcXVhcmtfdG9fc3RyaW5nKFNPVVBf
SFRUUF9FUlJPUiksIFNPVVBfU1RBVFVTX1NTTF9GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmkuZ2V0KCksIHVuYWNj
ZXB0YWJsZVRMU0NlcnRpZmljYXRlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLT5tX3Jlc3BvbnNlLnNvdXBNZXNzYWdlVExT
RXJyb3JzKCksIGQtPm1fcmVzcG9uc2Uuc291cE1lc3NhZ2VDZXJ0aWZpY2F0ZSgpKSk7Ci0gICAg
ICAgICAgICAgICAgY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQorICAgICAgICBpZiAoaGFuZGxl
VW5pZ25vcmVkVExTRXJyb3JzKGhhbmRsZS5nZXQoKSkpIHsKKyAgICAgICAgICAgIGNsZWFudXBT
b3VwUmVxdWVzdE9wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOworICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CisKICAgICB9IGVsc2UgewogICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldFVSTCho
YW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpKTsKICAgICAgICAgY29uc3QgZ2NoYXIqIGNvbnRl
bnRUeXBlID0gc291cF9yZXF1ZXN0X2dldF9jb250ZW50X3R5cGUoZC0+bV9zb3VwUmVxdWVzdC5n
ZXQoKSk7CkBAIC05ODIsNyArOTY4LDcgQEAgc3RhdGljIHZvaWQgcmVhZENhbGxiYWNrKEdPYmpl
Y3QqLCBHQXN5bmNSZXN1bHQqIGFzeW5jUmVzdWx0LCBncG9pbnRlciBkYXRhKQogICAgIEdPd25Q
dHI8R0Vycm9yPiBlcnJvcjsKICAgICBnc3NpemUgYnl0ZXNSZWFkID0gZ19pbnB1dF9zdHJlYW1f
cmVhZF9maW5pc2goZC0+bV9pbnB1dFN0cmVhbS5nZXQoKSwgYXN5bmNSZXN1bHQsICZlcnJvci5v
dXRQdHIoKSk7CiAgICAgaWYgKGVycm9yKSB7Ci0gICAgICAgIGNsaWVudC0+ZGlkRmFpbChoYW5k
bGUuZ2V0KCksIGNvbnZlcnRTb3VwRXJyb3JUb1Jlc291cmNlRXJyb3IoZXJyb3IuZ2V0KCksIGQt
Pm1fc291cFJlcXVlc3QuZ2V0KCkpKTsKKyAgICAgICAgY2xpZW50LT5kaWRGYWlsKGhhbmRsZS5n
ZXQoKSwgUmVzb3VyY2VFcnJvcihlcnJvci5nZXQoKSwgZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSkp
OwogICAgICAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTEwMTksMTIgKzEwMDUsOCBAQCBzdGF0aWMgdm9pZCBy
ZWFkQ2FsbGJhY2soR09iamVjdCosIEdBc3luY1Jlc3VsdCogYXN5bmNSZXN1bHQsIGdwb2ludGVy
IGRhdGEpCiBzdGF0aWMgZ2Jvb2xlYW4gcmVxdWVzdFRpbWVvdXRDYWxsYmFjayhncG9pbnRlciBk
YXRhKQogewogICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gaGFuZGxlID0gc3RhdGljX2Nhc3Q8
UmVzb3VyY2VIYW5kbGUqPihkYXRhKTsKLSAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBkID0g
aGFuZGxlLT5nZXRJbnRlcm5hbCgpOwotICAgIFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQg
PSBoYW5kbGUtPmNsaWVudCgpOwotCi0gICAgUmVzb3VyY2VFcnJvciB0aW1lb3V0RXJyb3IoIldl
YktpdE5ldHdvcmtFcnJvciIsIGdUaW1lb3V0RXJyb3IsIGQtPm1fZmlyc3RSZXF1ZXN0LnVybCgp
LnN0cmluZygpLCAiUmVxdWVzdCB0aW1lZCBvdXQiKTsKLSAgICB0aW1lb3V0RXJyb3Iuc2V0SXNU
aW1lb3V0KHRydWUpOwotICAgIGNsaWVudC0+ZGlkRmFpbChoYW5kbGUuZ2V0KCksIHRpbWVvdXRF
cnJvcik7CisgICAgaGFuZGxlLT5jbGllbnQoKS0+ZGlkRmFpbChoYW5kbGUuZ2V0KCksIFJlc291
cmNlRXJyb3I6OnRpbWVvdXRFcnJvcihoYW5kbGUtPmdldEludGVybmFsKCktPm1fZmlyc3RSZXF1
ZXN0LnVybCgpLnN0cmluZygpKSk7CisgICAgY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKGhh
bmRsZS5nZXQoKSk7CiAgICAgaGFuZGxlLT5jYW5jZWwoKTsKIAogICAgIHJldHVybiBGQUxTRTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167344</attachid>
            <date>2012-10-05 10:14:34 -0700</date>
            <delta_ts>2012-10-05 11:25:01 -0700</delta_ts>
            <desc>Try to fix the EFL build</desc>
            <filename>bug-98521-20121005101342.patch</filename>
            <type>text/plain</type>
            <size>14582</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwNTA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTc4NzY1ZDkzMWM3Mjlh
MDY5YmRiOWFmZmIzZGUwNGRjZTZmNzZiNi4uYzNiNGJiOTgzZWJlYTAyYjUyZGFmNGZkMjI4OWVk
M2Y5NGQ1Zjk2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEyLTEwLTA1ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbU291cF0gQ2xl
YW4gdXAgUmVzb3VyY2VFcnJvciBjcmVhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTg1MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBTaW1wbGlmeSB0aGUgY3JlYXRpb24gb2YgUmVzb3VyY0Vycm9y
cyBpbiBSZXNvdXJjZUhhbmRsZVNvdXAuIFRoaXMgaXMKKyAgICAgICAgcGFydCBvZiBhIHByb2Nl
c3MgdG8gbWFrZSB0aGUgbGlic291cCBuZXR3b3JraW5nIGJhY2tlbmQgbW9yZSBoYWNrYWJsZS4K
KworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgc2hvdWxkbid0IGNoYW5nZSBmdW5jdGlvbmFs
aXR5LgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbTogQWRkZWQgbmV3IGZpbGUuCisg
ICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6IEFkZGVkIG5ldyBmaWxlLgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUVycm9yLmg6CisgICAgICAgIChSZXNvdXJjZUVy
cm9yKTogQWRkZWQgbmV3IGNvbnN0cnVjdG9ycy4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvUmVzb3VyY2VFcnJvclNvdXAuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Omlz
VHJhbnNwb3J0RXJyb3IpOiBBZGRlZCBoZWxwZXIgdG8gYmUgdXNlZCBpbiB0aGUgY29uc3RydWN0
b3IuCisgICAgICAgIChXZWJDb3JlOjplcnJvckRvbWFpbik6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6ZXJyb3JDb2RlRnJvbUVycm9yQW5kTWVzc2FnZSk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6ZmFpbGluZ1VSSSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6ZmFpbHVyZVJlYXNv
bik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VFcnJvcjo6dGltZW91dEVycm9y
KTogQWRkZWQgdGhpcyBmYWN0b3J5LgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9S
ZXNvdXJjZUhhbmRsZVNvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aGFuZGxlVW5pZ25vcmVk
VExTRXJyb3JzKTogQ3JlYXRlZCB0aGlzIGhlbHBlciB3aGljaCBtZXJnZXMKKyAgICAgICAgc29t
ZSBvZiB0aGUgbG9naWMgZnJvbSBzZW5kUmVxdWVzdENhbGxiYWNrLgorICAgICAgICAoV2ViQ29y
ZTo6c2VuZFJlcXVlc3RDYWxsYmFjayk6IFVzZSB0aGUgbmV3IGhlbHBlci4KKyAgICAgICAgKFdl
YkNvcmU6OnJlcXVlc3RUaW1lb3V0Q2FsbGJhY2spOiBVc2UgdGhlIG5ldyBmYWN0b3J5LgorCiAy
MDEyLTEwLTA1ICBHYWJvciBSYXBjc2FueWkgIDxyZ2Fib3JAd2Via2l0Lm9yZz4KIAogICAgICAg
ICBBZGQgQVJNLU5FT04gc3VwcG9ydCB0byBWZWN0b3JNYXRoIGluIFdlYkF1ZGlvCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQppbmRleCBiODhmOWRjOTZhODAyZjlhNDNlMGQ3YzZjMTMwMGMy
NmM4MTVhZGNhLi5jNmYxNmQ0YWExNzJiMmQ4MGQ2NmNmN2JiNTQ0N2FlZGFhNDEwMDNiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTQ3MDYsNiArNDcwNiw3IEBAIHdlYmNvcmVf
c291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0dPd25Q
dHJTb3VwLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Qcm94eVNl
cnZlclNvdXAuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVz
b3VyY2VFcnJvci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVz
b3VyY2VFcnJvclNvdXAuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291cC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5j
bWFrZQppbmRleCAzZDE2MDE1M2I4NWMxYjA5ZDhmYTE3NWJmYjlkNTZkYzI3NzY5N2M2Li40NTBj
MjQ5NTNiZDNhNDllMGY2NGM1YWI0ZWQwZDhiZjYxMmJhYjg1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVm
bC5jbWFrZQpAQCAtNzUsNiArNzUsNyBAQCBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAg
cGxhdGZvcm0vbmV0d29yay9zb3VwL0dPd25QdHJTb3VwLmNwcAogICBwbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvUHJveHlSZXNvbHZlclNvdXAuY3BwCiAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9Qcm94
eVNlcnZlclNvdXAuY3BwCisgIHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUVycm9yU291
cC5jcHAKICAgcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKICAg
cGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdFNvdXAuY3BwCiAgIHBsYXRmb3Jt
L25ldHdvcmsvc291cC9SZXNvdXJjZVJlc3BvbnNlU291cC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUVycm9yLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VFcnJvci5oCmluZGV4IDM3ODgw
ZTUyZDg0ZTZiZDIyZTUyMTNlYmYzOWJiY2M2NjkwNmJjOWYuLjc1YTFiNjE4NTRmNTZmYTEwODU3
Y2M3YTQ3NmM5N2VkNzA0ZDczYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9SZXNvdXJjZUVycm9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL1Jlc291cmNlRXJyb3IuaApAQCAtMzAsNiArMzAsOCBAQAogI2luY2x1
ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KIAogdHlwZWRlZiBzdHJ1Y3QgX0dUbHNDZXJ0aWZp
Y2F0ZSBHVGxzQ2VydGlmaWNhdGU7Cit0eXBlZGVmIHN0cnVjdCBfU291cFJlcXVlc3QgU291cFJl
cXVlc3Q7Cit0eXBlZGVmIHN0cnVjdCBfU291cE1lc3NhZ2UgU291cE1lc3NhZ2U7CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtNDEsMTggKzQzLDE2IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
fQogCisgICAgUmVzb3VyY2VFcnJvcihHRXJyb3IqLCBTb3VwUmVxdWVzdCosIFNvdXBNZXNzYWdl
KiA9IDApOworICAgIFJlc291cmNlRXJyb3IoU291cFJlcXVlc3QqLCB1bnNpZ25lZCB0bHNFcnJv
cnMsIEdUbHNDZXJ0aWZpY2F0ZSopOworCiAgICAgUmVzb3VyY2VFcnJvcihjb25zdCBTdHJpbmcm
IGRvbWFpbiwgaW50IGVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBmYWlsaW5nVVJMLCBjb25zdCBT
dHJpbmcmIGxvY2FsaXplZERlc2NyaXB0aW9uKQogICAgICAgICA6IFJlc291cmNlRXJyb3JCYXNl
KGRvbWFpbiwgZXJyb3JDb2RlLCBmYWlsaW5nVVJMLCBsb2NhbGl6ZWREZXNjcmlwdGlvbikKICAg
ICAgICAgLCBtX3Rsc0Vycm9ycygwKQogICAgIHsKICAgICB9CiAKLSAgICBSZXNvdXJjZUVycm9y
KGNvbnN0IFN0cmluZyYgZG9tYWluLCBpbnQgZXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGZhaWxp
bmdVUkwsIGNvbnN0IFN0cmluZyYgbG9jYWxpemVkRGVzY3JpcHRpb24sIHVuc2lnbmVkIHRsc0Vy
cm9ycywgR1Rsc0NlcnRpZmljYXRlKiBjZXJ0aWZpY2F0ZSkKLSAgICAgICAgOiBSZXNvdXJjZUVy
cm9yQmFzZShkb21haW4sIGVycm9yQ29kZSwgZmFpbGluZ1VSTCwgbG9jYWxpemVkRGVzY3JpcHRp
b24pCi0gICAgICAgICwgbV90bHNFcnJvcnModGxzRXJyb3JzKQotICAgICAgICAsIG1fY2VydGlm
aWNhdGUoY2VydGlmaWNhdGUpCi0gICAgewotICAgIH0KKyAgICBzdGF0aWMgUmVzb3VyY2VFcnJv
ciB0aW1lb3V0RXJyb3IoY29uc3QgU3RyaW5nJiBmYWlsaW5nVVJMKTsKIAogICAgIHVuc2lnbmVk
IHRsc0Vycm9ycygpIGNvbnN0IHsgcmV0dXJuIG1fdGxzRXJyb3JzOyB9CiAgICAgR1Rsc0NlcnRp
ZmljYXRlKiBjZXJ0aWZpY2F0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2VydGlmaWNhdGUuZ2V0KCk7
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNv
dXJjZUVycm9yU291cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
UmVzb3VyY2VFcnJvclNvdXAuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjViYTZjMDkxNjU1MzQ4MzliNjRkMjhl
NWY3NDIyMjE0NjIyMmExOTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VFcnJvclNvdXAuY3BwCkBAIC0wLDAgKzEsOTMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIElHQUxJQSBTLkwuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgorCisjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5n
cy5oIgorI2RlZmluZSBMSUJTT1VQX1VTRV9VTlNUQUJMRV9SRVFVRVNUX0FQSQorI2luY2x1ZGUg
PGxpYnNvdXAvc291cC1yZXF1ZXN0Lmg+CisjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CisjaW5j
bHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgYm9vbCBpc1RyYW5zcG9ydEVycm9y
KFNvdXBNZXNzYWdlKiBtZXNzYWdlKQoreworICAgIHJldHVybiBtZXNzYWdlICYmIFNPVVBfU1RB
VFVTX0lTX1RSQU5TUE9SVF9FUlJPUihtZXNzYWdlLT5zdGF0dXNfY29kZSk7Cit9CisKK3N0YXRp
YyBjb25zdCBTdHJpbmcgZXJyb3JEb21haW4oU291cE1lc3NhZ2UqIG1lc3NhZ2UpCit7CisgICAg
cmV0dXJuIGdfcXVhcmtfdG9fc3RyaW5nKGlzVHJhbnNwb3J0RXJyb3IobWVzc2FnZSkgPyBTT1VQ
X0hUVFBfRVJST1IgOiBHX0lPX0VSUk9SKTsKK30KKworc3RhdGljIGludCBlcnJvckNvZGVGcm9t
RXJyb3JBbmRNZXNzYWdlKEdFcnJvciogZXJyb3IsIFNvdXBNZXNzYWdlKiBtZXNzYWdlKQorewor
ICAgIEFTU0VSVChlcnJvcik7CisgICAgcmV0dXJuIGlzVHJhbnNwb3J0RXJyb3IobWVzc2FnZSkg
PyBtZXNzYWdlLT5zdGF0dXNfY29kZSA6IGVycm9yLT5jb2RlOworfQorCitzdGF0aWMgU3RyaW5n
IGZhaWxpbmdVUkkoU291cFJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgQVNTRVJUKHJlcXVlc3Qp
OworICAgIEdPd25QdHI8Y2hhcj4gdXJpKHNvdXBfdXJpX3RvX3N0cmluZyhzb3VwX3JlcXVlc3Rf
Z2V0X3VyaShyZXF1ZXN0KSwgRkFMU0UpKTsKKyAgICByZXR1cm4gdXJpLmdldCgpOworfQorCitz
dGF0aWMgU3RyaW5nIGZhaWx1cmVSZWFzb24oR0Vycm9yKiBlcnJvciwgU291cE1lc3NhZ2UqIG1l
c3NhZ2UpCit7CisgICAgQVNTRVJUKGVycm9yKTsKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRG
OChpc1RyYW5zcG9ydEVycm9yKG1lc3NhZ2UpID8gbWVzc2FnZS0+cmVhc29uX3BocmFzZSA6IGVy
cm9yLT5tZXNzYWdlKTsKK30KKworUmVzb3VyY2VFcnJvcjo6UmVzb3VyY2VFcnJvcihHRXJyb3Iq
IGVycm9yLCBTb3VwUmVxdWVzdCogcmVxdWVzdCwgU291cE1lc3NhZ2UqIG1lc3NhZ2UpCisgICAg
OiBSZXNvdXJjZUVycm9yQmFzZShlcnJvckRvbWFpbihtZXNzYWdlKSwgZXJyb3JDb2RlRnJvbUVy
cm9yQW5kTWVzc2FnZShlcnJvciwgbWVzc2FnZSksIGZhaWxpbmdVUkkocmVxdWVzdCksIGZhaWx1
cmVSZWFzb24oZXJyb3IsIG1lc3NhZ2UpKQorICAgICwgbV90bHNFcnJvcnMoMCkKK3sKK30KKwor
UmVzb3VyY2VFcnJvcjo6UmVzb3VyY2VFcnJvcihTb3VwUmVxdWVzdCogcmVxdWVzdCwgdW5zaWdu
ZWQgdGxzRXJyb3JzLCBHVGxzQ2VydGlmaWNhdGUqIGNlcnRpZmljYXRlKQorICAgIDogUmVzb3Vy
Y2VFcnJvckJhc2UoZ19xdWFya190b19zdHJpbmcoU09VUF9IVFRQX0VSUk9SKSwgU09VUF9TVEFU
VVNfU1NMX0ZBSUxFRCwgZmFpbGluZ1VSSShyZXF1ZXN0KSwgdW5hY2NlcHRhYmxlVExTQ2VydGlm
aWNhdGUoKSkKKyAgICAsIG1fdGxzRXJyb3JzKHRsc0Vycm9ycykKKyAgICAsIG1fY2VydGlmaWNh
dGUoY2VydGlmaWNhdGUpCit7Cit9CisKK1Jlc291cmNlRXJyb3IgUmVzb3VyY2VFcnJvcjo6dGlt
ZW91dEVycm9yKGNvbnN0IFN0cmluZyYgZmFpbGluZ1VSTCkKK3sKKyAgICAvLyBGSVhNRTogVGhp
cyBzaG91bGQgcHJvYmFibHkgZWl0aGVyIGJlIGludGVncmF0ZWQgaW50byBFcnJvcnMoR3RrL0VG
TCkuaCBvciB0aGUKKyAgICAvLyBuZXR3b3JraW5nIGVycm9ycyBmcm9tIHRob3NlIGZpbGVzIHNo
b3VsZCBiZSBtb3ZlZCBoZXJlLgorCisgICAgLy8gVXNlIHRoZSBzYW1lIHZhbHVlIGFzIGluIE5T
VVJMRXJyb3IuaAorICAgIHN0YXRpYyBjb25zdCBpbnQgdGltZW91dEVycm9yID0gLTEwMDE7Cisg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0ICBlcnJvckRvbWFpbiA9ICJXZWJLaXRuZXR3b3Jr
RXJyb3IiOworICAgIFJlc291cmNlRXJyb3IgZXJyb3IgPSBSZXNvdXJjZUVycm9yKGVycm9yRG9t
YWluLCB0aW1lb3V0RXJyb3IsIGZhaWxpbmdVUkwsICJSZXF1ZXN0IHRpbWVkIG91dCIpOworICAg
IGVycm9yLnNldElzVGltZW91dCh0cnVlKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKaW5kZXggM2MzNGVmYjQ1OGNj
ZGRmZTUzNjFmMWVkMzY1MmE4N2VkNzU0ODNjMC4uZGJhMDQ2NDUxMWRmNWUyMmMwZjgwYWMwYWQz
ZmVlN2FhYWQ4YzI5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKQEAgLTcyLDkgKzcyLDYgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAjZGVmaW5lIFJFQURfQlVGRkVSX1NJWkUgODE5MgogCi0v
LyBVc2UgdGhlIHNhbWUgdmFsdWUgYXMgaW4gTlNVUkxFcnJvci5oCi1zdGF0aWMgY29uc3QgaW50
IGdUaW1lb3V0RXJyb3IgPSAtMTAwMTsKLQogc3RhdGljIGJvb2wgbG9hZGluZ1N5bmNocm9ub3Vz
UmVxdWVzdCA9IGZhbHNlOwogCiBjbGFzcyBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXIgOiBwdWJs
aWMgUmVzb3VyY2VIYW5kbGVDbGllbnQgewpAQCAtMzk5LDMxICszOTYsMjYgQEAgc3RhdGljIHZv
aWQgY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGJv
b2wgaXNEZXN0cm95aW4KICAgICAgICAgaGFuZGxlLT5kZXJlZigpOwogfQogCi1zdGF0aWMgUmVz
b3VyY2VFcnJvciBjb252ZXJ0U291cEVycm9yVG9SZXNvdXJjZUVycm9yKEdFcnJvciogZXJyb3Is
IFNvdXBSZXF1ZXN0KiByZXF1ZXN0LCBTb3VwTWVzc2FnZSogbWVzc2FnZSA9IDApCitzdGF0aWMg
Ym9vbCBoYW5kbGVVbmlnbm9yZWRUTFNFcnJvcnMoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKIHsK
LSAgICBBU1NFUlQoZXJyb3IpOwotICAgIEFTU0VSVChyZXF1ZXN0KTsKLQotICAgIEdPd25QdHI8
Y2hhcj4gdXJpKHNvdXBfdXJpX3RvX3N0cmluZyhzb3VwX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0
KSwgRkFMU0UpKTsKLSAgICBpZiAobWVzc2FnZSAmJiBTT1VQX1NUQVRVU19JU19UUkFOU1BPUlRf
RVJST1IobWVzc2FnZS0+c3RhdHVzX2NvZGUpKSB7Ci0gICAgICAgIHJldHVybiBSZXNvdXJjZUVy
cm9yKGdfcXVhcmtfdG9fc3RyaW5nKFNPVVBfSFRUUF9FUlJPUiksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PGdpbnQ+KG1lc3NhZ2UtPnN0YXR1c19jb2RlKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJpLmdldCgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTdHJpbmc6OmZyb21VVEY4KG1lc3NhZ2UtPnJlYXNvbl9waHJhc2UpKTsKLSAg
ICB9CisgICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwo
KTsKKyAgICBzdGF0aWMgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UgPSBkLT5tX3Jl
c3BvbnNlOwogCi0gICAgLy8gTm9uLXRyYW5zcG9ydCBlcnJvcnMgYXJlIGhhbmRsZWQgZGlmZmVy
ZW50bHkuCi0gICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZ19xdWFya190b19zdHJpbmcoR19JT19F
UlJPUiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3ItPmNvZGUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgdXJpLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmlu
Zzo6ZnJvbVVURjgoZXJyb3ItPm1lc3NhZ2UpKTsKLX0KKyAgICBpZiAoIXJlc3BvbnNlLnNvdXBN
ZXNzYWdlVExTRXJyb3JzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotc3RhdGljIGlubGlu
ZSBib29sIGhhc1VuaWdub3JlZFRMU0Vycm9ycyhSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQotewot
ICAgIHJldHVybiBoYW5kbGUtPmdldEludGVybmFsKCktPm1fcmVzcG9uc2Uuc291cE1lc3NhZ2VU
TFNFcnJvcnMoKQotICAgICAgICAmJiAhZ0lnbm9yZVNTTEVycm9ycwotICAgICAgICAmJiAhYWxs
b3dzQW55SFRUUFNDZXJ0aWZpY2F0ZUhvc3RzKCkuY29udGFpbnMoaGFuZGxlLT5maXJzdFJlcXVl
c3QoKS51cmwoKS5ob3N0KCkubG93ZXIoKSk7CisgICAgU3RyaW5nIGxvd2VyY2FzZUhvc3RVUkwg
PSBoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLmhvc3QoKS5sb3dlcigpOworICAgIGlmIChn
SWdub3JlU1NMRXJyb3JzIHx8IGFsbG93c0FueUhUVFBTQ2VydGlmaWNhdGVIb3N0cygpLmNvbnRh
aW5zKGxvd2VyY2FzZUhvc3RVUkwpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBX
ZSBhcmVuJ3QgaWdub3JpbmcgZXJyb3JzIGdsb2JhbGx5LCBidXQgdGhlIHVzZXIgbWF5IGhhdmUg
YWxyZWFkeSBkZWNpZGVkIHRvIGFjY2VwdCB0aGlzIGNlcnRpZmljYXRlLgorICAgIENlcnRpZmlj
YXRlc01hcDo6aXRlcmF0b3IgaSA9IGNsaWVudENlcnRpZmljYXRlcygpLmZpbmQobG93ZXJjYXNl
SG9zdFVSTCk7CisgICAgaWYgKGkgIT0gY2xpZW50Q2VydGlmaWNhdGVzKCkuZW5kKCkgfHwgaS0+
c2Vjb25kLmNvbnRhaW5zKHJlc3BvbnNlLnNvdXBNZXNzYWdlQ2VydGlmaWNhdGUoKSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGhhbmRsZS0+Y2xpZW50KCktPmRpZEZhaWwoaGFuZGxl
LCBSZXNvdXJjZUVycm9yKGQtPm1fc291cFJlcXVlc3QuZ2V0KCksCisgICAgICAgIHJlc3BvbnNl
LnNvdXBNZXNzYWdlVExTRXJyb3JzKCksIHJlc3BvbnNlLnNvdXBNZXNzYWdlQ2VydGlmaWNhdGUo
KSkpOworICAgIHJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgdm9pZCBzZW5kUmVxdWVzdENhbGxi
YWNrKEdPYmplY3QqLCBHQXN5bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIgZGF0YSkKQEAgLTQ0Nyw3
ICs0MzksNyBAQCBzdGF0aWMgdm9pZCBzZW5kUmVxdWVzdENhbGxiYWNrKEdPYmplY3QqLCBHQXN5
bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIgZGF0YSkKICAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7
CiAgICAgR0lucHV0U3RyZWFtKiBpbiA9IHNvdXBfcmVxdWVzdF9zZW5kX2ZpbmlzaChkLT5tX3Nv
dXBSZXF1ZXN0LmdldCgpLCByZXMsICZlcnJvci5vdXRQdHIoKSk7CiAgICAgaWYgKGVycm9yKSB7
Ci0gICAgICAgIGNsaWVudC0+ZGlkRmFpbChoYW5kbGUuZ2V0KCksIGNvbnZlcnRTb3VwRXJyb3JU
b1Jlc291cmNlRXJyb3IoZXJyb3IuZ2V0KCksIGQtPm1fc291cFJlcXVlc3QuZ2V0KCksIHNvdXBN
ZXNzYWdlKSk7CisgICAgICAgIGNsaWVudC0+ZGlkRmFpbChoYW5kbGUuZ2V0KCksIFJlc291cmNl
RXJyb3IoZXJyb3IuZ2V0KCksIGQtPm1fc291cFJlcXVlc3QuZ2V0KCksIHNvdXBNZXNzYWdlKSk7
CiAgICAgICAgIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpAQCAtNDYyLDE3ICs0NTQsMTEgQEAgc3RhdGljIHZvaWQgc2Vu
ZFJlcXVlc3RDYWxsYmFjayhHT2JqZWN0KiwgR0FzeW5jUmVzdWx0KiByZXMsIGdwb2ludGVyIGRh
dGEpCiAgICAgICAgIH0KICAgICAgICAgZC0+bV9yZXNwb25zZS51cGRhdGVGcm9tU291cE1lc3Nh
Z2Uoc291cE1lc3NhZ2UpOwogCi0gICAgICAgIGlmIChoYXNVbmlnbm9yZWRUTFNFcnJvcnMoaGFu
ZGxlLmdldCgpKSkgewotICAgICAgICAgICAgQ2VydGlmaWNhdGVzTWFwOjppdGVyYXRvciBpdGVy
ID0gY2xpZW50Q2VydGlmaWNhdGVzKCkuZmluZChoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgp
Lmhvc3QoKS5sb3dlcigpKTsKLSAgICAgICAgICAgIGlmIChpdGVyID09IGNsaWVudENlcnRpZmlj
YXRlcygpLmVuZCgpIHx8ICFpdGVyLT5zZWNvbmQuY29udGFpbnMoZC0+bV9yZXNwb25zZS5zb3Vw
TWVzc2FnZUNlcnRpZmljYXRlKCkpKSB7Ci0gICAgICAgICAgICAgICAgR093blB0cjxjaGFyPiB1
cmkoc291cF91cmlfdG9fc3RyaW5nKHNvdXBfcmVxdWVzdF9nZXRfdXJpKGQtPm1fc291cFJlcXVl
c3QuZ2V0KCkpLCBGQUxTRSkpOwotICAgICAgICAgICAgICAgIGNsaWVudC0+ZGlkRmFpbChoYW5k
bGUuZ2V0KCksIFJlc291cmNlRXJyb3IoZ19xdWFya190b19zdHJpbmcoU09VUF9IVFRQX0VSUk9S
KSwgU09VUF9TVEFUVVNfU1NMX0ZBSUxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaS5nZXQoKSwgdW5hY2NlcHRhYmxlVExT
Q2VydGlmaWNhdGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGQtPm1fcmVzcG9uc2Uuc291cE1lc3NhZ2VUTFNFcnJvcnMoKSwg
ZC0+bV9yZXNwb25zZS5zb3VwTWVzc2FnZUNlcnRpZmljYXRlKCkpKTsKLSAgICAgICAgICAgICAg
ICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICB9CisgICAgICAgIGlmIChoYW5kbGVVbmlnbm9yZWRU
TFNFcnJvcnMoaGFuZGxlLmdldCgpKSkgeworICAgICAgICAgICAgY2xlYW51cFNvdXBSZXF1ZXN0
T3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
KwogICAgIH0gZWxzZSB7CiAgICAgICAgIGQtPm1fcmVzcG9uc2Uuc2V0VVJMKGhhbmRsZS0+Zmly
c3RSZXF1ZXN0KCkudXJsKCkpOwogICAgICAgICBjb25zdCBnY2hhciogY29udGVudFR5cGUgPSBz
b3VwX3JlcXVlc3RfZ2V0X2NvbnRlbnRfdHlwZShkLT5tX3NvdXBSZXF1ZXN0LmdldCgpKTsKQEAg
LTk4Miw3ICs5NjgsNyBAQCBzdGF0aWMgdm9pZCByZWFkQ2FsbGJhY2soR09iamVjdCosIEdBc3lu
Y1Jlc3VsdCogYXN5bmNSZXN1bHQsIGdwb2ludGVyIGRhdGEpCiAgICAgR093blB0cjxHRXJyb3I+
IGVycm9yOwogICAgIGdzc2l6ZSBieXRlc1JlYWQgPSBnX2lucHV0X3N0cmVhbV9yZWFkX2Zpbmlz
aChkLT5tX2lucHV0U3RyZWFtLmdldCgpLCBhc3luY1Jlc3VsdCwgJmVycm9yLm91dFB0cigpKTsK
ICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgY2xpZW50LT5kaWRGYWlsKGhhbmRsZS5nZXQoKSwg
Y29udmVydFNvdXBFcnJvclRvUmVzb3VyY2VFcnJvcihlcnJvci5nZXQoKSwgZC0+bV9zb3VwUmVx
dWVzdC5nZXQoKSkpOworICAgICAgICBjbGllbnQtPmRpZEZhaWwoaGFuZGxlLmdldCgpLCBSZXNv
dXJjZUVycm9yKGVycm9yLmdldCgpLCBkLT5tX3NvdXBSZXF1ZXN0LmdldCgpKSk7CiAgICAgICAg
IGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQpAQCAtMTAxOSwxMiArMTAwNSw4IEBAIHN0YXRpYyB2b2lkIHJlYWRDYWxsYmFj
ayhHT2JqZWN0KiwgR0FzeW5jUmVzdWx0KiBhc3luY1Jlc3VsdCwgZ3BvaW50ZXIgZGF0YSkKIHN0
YXRpYyBnYm9vbGVhbiByZXF1ZXN0VGltZW91dENhbGxiYWNrKGdwb2ludGVyIGRhdGEpCiB7CiAg
ICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUhh
bmRsZSo+KGRhdGEpOwotICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdl
dEludGVybmFsKCk7Ci0gICAgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCA9IGhhbmRsZS0+
Y2xpZW50KCk7Ci0KLSAgICBSZXNvdXJjZUVycm9yIHRpbWVvdXRFcnJvcigiV2ViS2l0TmV0d29y
a0Vycm9yIiwgZ1RpbWVvdXRFcnJvciwgZC0+bV9maXJzdFJlcXVlc3QudXJsKCkuc3RyaW5nKCks
ICJSZXF1ZXN0IHRpbWVkIG91dCIpOwotICAgIHRpbWVvdXRFcnJvci5zZXRJc1RpbWVvdXQodHJ1
ZSk7Ci0gICAgY2xpZW50LT5kaWRGYWlsKGhhbmRsZS5nZXQoKSwgdGltZW91dEVycm9yKTsKKyAg
ICBoYW5kbGUtPmNsaWVudCgpLT5kaWRGYWlsKGhhbmRsZS5nZXQoKSwgUmVzb3VyY2VFcnJvcjo6
dGltZW91dEVycm9yKGhhbmRsZS0+Z2V0SW50ZXJuYWwoKS0+bV9maXJzdFJlcXVlc3QudXJsKCku
c3RyaW5nKCkpKTsKKyAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxlLmdldCgp
KTsKICAgICBoYW5kbGUtPmNhbmNlbCgpOwogCiAgICAgcmV0dXJuIEZBTFNFOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167357</attachid>
            <date>2012-10-05 11:25:05 -0700</date>
            <delta_ts>2012-10-06 23:43:36 -0700</delta_ts>
            <desc>Respond to review comments</desc>
            <filename>bug-98521-20121005112413.patch</filename>
            <type>text/plain</type>
            <size>14582</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwNTA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTc4NzY1ZDkzMWM3Mjlh
MDY5YmRiOWFmZmIzZGUwNGRjZTZmNzZiNi4uYzNiNGJiOTgzZWJlYTAyYjUyZGFmNGZkMjI4OWVk
M2Y5NGQ1Zjk2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEyLTEwLTA1ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbU291cF0gQ2xl
YW4gdXAgUmVzb3VyY2VFcnJvciBjcmVhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTg1MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBTaW1wbGlmeSB0aGUgY3JlYXRpb24gb2YgUmVzb3VyY0Vycm9y
cyBpbiBSZXNvdXJjZUhhbmRsZVNvdXAuIFRoaXMgaXMKKyAgICAgICAgcGFydCBvZiBhIHByb2Nl
c3MgdG8gbWFrZSB0aGUgbGlic291cCBuZXR3b3JraW5nIGJhY2tlbmQgbW9yZSBoYWNrYWJsZS4K
KworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgc2hvdWxkbid0IGNoYW5nZSBmdW5jdGlvbmFs
aXR5LgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbTogQWRkZWQgbmV3IGZpbGUuCisg
ICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6IEFkZGVkIG5ldyBmaWxlLgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUVycm9yLmg6CisgICAgICAgIChSZXNvdXJjZUVy
cm9yKTogQWRkZWQgbmV3IGNvbnN0cnVjdG9ycy4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvUmVzb3VyY2VFcnJvclNvdXAuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Omlz
VHJhbnNwb3J0RXJyb3IpOiBBZGRlZCBoZWxwZXIgdG8gYmUgdXNlZCBpbiB0aGUgY29uc3RydWN0
b3IuCisgICAgICAgIChXZWJDb3JlOjplcnJvckRvbWFpbik6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6ZXJyb3JDb2RlRnJvbUVycm9yQW5kTWVzc2FnZSk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6ZmFpbGluZ1VSSSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6ZmFpbHVyZVJlYXNv
bik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VFcnJvcjo6dGltZW91dEVycm9y
KTogQWRkZWQgdGhpcyBmYWN0b3J5LgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9S
ZXNvdXJjZUhhbmRsZVNvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aGFuZGxlVW5pZ25vcmVk
VExTRXJyb3JzKTogQ3JlYXRlZCB0aGlzIGhlbHBlciB3aGljaCBtZXJnZXMKKyAgICAgICAgc29t
ZSBvZiB0aGUgbG9naWMgZnJvbSBzZW5kUmVxdWVzdENhbGxiYWNrLgorICAgICAgICAoV2ViQ29y
ZTo6c2VuZFJlcXVlc3RDYWxsYmFjayk6IFVzZSB0aGUgbmV3IGhlbHBlci4KKyAgICAgICAgKFdl
YkNvcmU6OnJlcXVlc3RUaW1lb3V0Q2FsbGJhY2spOiBVc2UgdGhlIG5ldyBmYWN0b3J5LgorCiAy
MDEyLTEwLTA1ICBHYWJvciBSYXBjc2FueWkgIDxyZ2Fib3JAd2Via2l0Lm9yZz4KIAogICAgICAg
ICBBZGQgQVJNLU5FT04gc3VwcG9ydCB0byBWZWN0b3JNYXRoIGluIFdlYkF1ZGlvCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQppbmRleCBiODhmOWRjOTZhODAyZjlhNDNlMGQ3YzZjMTMwMGMy
NmM4MTVhZGNhLi5jNmYxNmQ0YWExNzJiMmQ4MGQ2NmNmN2JiNTQ0N2FlZGFhNDEwMDNiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTQ3MDYsNiArNDcwNiw3IEBAIHdlYmNvcmVf
c291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0dPd25Q
dHJTb3VwLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Qcm94eVNl
cnZlclNvdXAuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVz
b3VyY2VFcnJvci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVz
b3VyY2VFcnJvclNvdXAuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291cC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5j
bWFrZQppbmRleCAzZDE2MDE1M2I4NWMxYjA5ZDhmYTE3NWJmYjlkNTZkYzI3NzY5N2M2Li40NTBj
MjQ5NTNiZDNhNDllMGY2NGM1YWI0ZWQwZDhiZjYxMmJhYjg1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVm
bC5jbWFrZQpAQCAtNzUsNiArNzUsNyBAQCBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAg
cGxhdGZvcm0vbmV0d29yay9zb3VwL0dPd25QdHJTb3VwLmNwcAogICBwbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvUHJveHlSZXNvbHZlclNvdXAuY3BwCiAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9Qcm94
eVNlcnZlclNvdXAuY3BwCisgIHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUVycm9yU291
cC5jcHAKICAgcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKICAg
cGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdFNvdXAuY3BwCiAgIHBsYXRmb3Jt
L25ldHdvcmsvc291cC9SZXNvdXJjZVJlc3BvbnNlU291cC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUVycm9yLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VFcnJvci5oCmluZGV4IDM3ODgw
ZTUyZDg0ZTZiZDIyZTUyMTNlYmYzOWJiY2M2NjkwNmJjOWYuLjc1YTFiNjE4NTRmNTZmYTEwODU3
Y2M3YTQ3NmM5N2VkNzA0ZDczYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9SZXNvdXJjZUVycm9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL1Jlc291cmNlRXJyb3IuaApAQCAtMzAsNiArMzAsOCBAQAogI2luY2x1
ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KIAogdHlwZWRlZiBzdHJ1Y3QgX0dUbHNDZXJ0aWZp
Y2F0ZSBHVGxzQ2VydGlmaWNhdGU7Cit0eXBlZGVmIHN0cnVjdCBfU291cFJlcXVlc3QgU291cFJl
cXVlc3Q7Cit0eXBlZGVmIHN0cnVjdCBfU291cE1lc3NhZ2UgU291cE1lc3NhZ2U7CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtNDEsMTggKzQzLDE2IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
fQogCisgICAgUmVzb3VyY2VFcnJvcihHRXJyb3IqLCBTb3VwUmVxdWVzdCosIFNvdXBNZXNzYWdl
KiA9IDApOworICAgIFJlc291cmNlRXJyb3IoU291cFJlcXVlc3QqLCB1bnNpZ25lZCB0bHNFcnJv
cnMsIEdUbHNDZXJ0aWZpY2F0ZSopOworCiAgICAgUmVzb3VyY2VFcnJvcihjb25zdCBTdHJpbmcm
IGRvbWFpbiwgaW50IGVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBmYWlsaW5nVVJMLCBjb25zdCBT
dHJpbmcmIGxvY2FsaXplZERlc2NyaXB0aW9uKQogICAgICAgICA6IFJlc291cmNlRXJyb3JCYXNl
KGRvbWFpbiwgZXJyb3JDb2RlLCBmYWlsaW5nVVJMLCBsb2NhbGl6ZWREZXNjcmlwdGlvbikKICAg
ICAgICAgLCBtX3Rsc0Vycm9ycygwKQogICAgIHsKICAgICB9CiAKLSAgICBSZXNvdXJjZUVycm9y
KGNvbnN0IFN0cmluZyYgZG9tYWluLCBpbnQgZXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGZhaWxp
bmdVUkwsIGNvbnN0IFN0cmluZyYgbG9jYWxpemVkRGVzY3JpcHRpb24sIHVuc2lnbmVkIHRsc0Vy
cm9ycywgR1Rsc0NlcnRpZmljYXRlKiBjZXJ0aWZpY2F0ZSkKLSAgICAgICAgOiBSZXNvdXJjZUVy
cm9yQmFzZShkb21haW4sIGVycm9yQ29kZSwgZmFpbGluZ1VSTCwgbG9jYWxpemVkRGVzY3JpcHRp
b24pCi0gICAgICAgICwgbV90bHNFcnJvcnModGxzRXJyb3JzKQotICAgICAgICAsIG1fY2VydGlm
aWNhdGUoY2VydGlmaWNhdGUpCi0gICAgewotICAgIH0KKyAgICBzdGF0aWMgUmVzb3VyY2VFcnJv
ciB0aW1lb3V0RXJyb3IoY29uc3QgU3RyaW5nJiBmYWlsaW5nVVJMKTsKIAogICAgIHVuc2lnbmVk
IHRsc0Vycm9ycygpIGNvbnN0IHsgcmV0dXJuIG1fdGxzRXJyb3JzOyB9CiAgICAgR1Rsc0NlcnRp
ZmljYXRlKiBjZXJ0aWZpY2F0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2VydGlmaWNhdGUuZ2V0KCk7
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNv
dXJjZUVycm9yU291cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
UmVzb3VyY2VFcnJvclNvdXAuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjViYTZjMDkxNjU1MzQ4MzliNjRkMjhl
NWY3NDIyMjE0NjIyMmExOTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VFcnJvclNvdXAuY3BwCkBAIC0wLDAgKzEsOTMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIElHQUxJQSBTLkwuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgorCisjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5n
cy5oIgorI2RlZmluZSBMSUJTT1VQX1VTRV9VTlNUQUJMRV9SRVFVRVNUX0FQSQorI2luY2x1ZGUg
PGxpYnNvdXAvc291cC1yZXF1ZXN0Lmg+CisjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CisjaW5j
bHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgYm9vbCBpc1RyYW5zcG9ydEVycm9y
KFNvdXBNZXNzYWdlKiBtZXNzYWdlKQoreworICAgIHJldHVybiBtZXNzYWdlICYmIFNPVVBfU1RB
VFVTX0lTX1RSQU5TUE9SVF9FUlJPUihtZXNzYWdlLT5zdGF0dXNfY29kZSk7Cit9CisKK3N0YXRp
YyBjb25zdCBTdHJpbmcgZXJyb3JEb21haW4oU291cE1lc3NhZ2UqIG1lc3NhZ2UpCit7CisgICAg
cmV0dXJuIGdfcXVhcmtfdG9fc3RyaW5nKGlzVHJhbnNwb3J0RXJyb3IobWVzc2FnZSkgPyBTT1VQ
X0hUVFBfRVJST1IgOiBHX0lPX0VSUk9SKTsKK30KKworc3RhdGljIGludCBlcnJvckNvZGVGcm9t
RXJyb3JBbmRNZXNzYWdlKEdFcnJvciogZXJyb3IsIFNvdXBNZXNzYWdlKiBtZXNzYWdlKQorewor
ICAgIEFTU0VSVChlcnJvcik7CisgICAgcmV0dXJuIGlzVHJhbnNwb3J0RXJyb3IobWVzc2FnZSkg
PyBtZXNzYWdlLT5zdGF0dXNfY29kZSA6IGVycm9yLT5jb2RlOworfQorCitzdGF0aWMgU3RyaW5n
IGZhaWxpbmdVUkkoU291cFJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgQVNTRVJUKHJlcXVlc3Qp
OworICAgIEdPd25QdHI8Y2hhcj4gdXJpKHNvdXBfdXJpX3RvX3N0cmluZyhzb3VwX3JlcXVlc3Rf
Z2V0X3VyaShyZXF1ZXN0KSwgRkFMU0UpKTsKKyAgICByZXR1cm4gdXJpLmdldCgpOworfQorCitz
dGF0aWMgU3RyaW5nIGZhaWx1cmVSZWFzb24oR0Vycm9yKiBlcnJvciwgU291cE1lc3NhZ2UqIG1l
c3NhZ2UpCit7CisgICAgQVNTRVJUKGVycm9yKTsKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRG
OChpc1RyYW5zcG9ydEVycm9yKG1lc3NhZ2UpID8gbWVzc2FnZS0+cmVhc29uX3BocmFzZSA6IGVy
cm9yLT5tZXNzYWdlKTsKK30KKworUmVzb3VyY2VFcnJvcjo6UmVzb3VyY2VFcnJvcihHRXJyb3Iq
IGVycm9yLCBTb3VwUmVxdWVzdCogcmVxdWVzdCwgU291cE1lc3NhZ2UqIG1lc3NhZ2UpCisgICAg
OiBSZXNvdXJjZUVycm9yQmFzZShlcnJvckRvbWFpbihtZXNzYWdlKSwgZXJyb3JDb2RlRnJvbUVy
cm9yQW5kTWVzc2FnZShlcnJvciwgbWVzc2FnZSksIGZhaWxpbmdVUkkocmVxdWVzdCksIGZhaWx1
cmVSZWFzb24oZXJyb3IsIG1lc3NhZ2UpKQorICAgICwgbV90bHNFcnJvcnMoMCkKK3sKK30KKwor
UmVzb3VyY2VFcnJvcjo6UmVzb3VyY2VFcnJvcihTb3VwUmVxdWVzdCogcmVxdWVzdCwgdW5zaWdu
ZWQgdGxzRXJyb3JzLCBHVGxzQ2VydGlmaWNhdGUqIGNlcnRpZmljYXRlKQorICAgIDogUmVzb3Vy
Y2VFcnJvckJhc2UoZ19xdWFya190b19zdHJpbmcoU09VUF9IVFRQX0VSUk9SKSwgU09VUF9TVEFU
VVNfU1NMX0ZBSUxFRCwgZmFpbGluZ1VSSShyZXF1ZXN0KSwgdW5hY2NlcHRhYmxlVExTQ2VydGlm
aWNhdGUoKSkKKyAgICAsIG1fdGxzRXJyb3JzKHRsc0Vycm9ycykKKyAgICAsIG1fY2VydGlmaWNh
dGUoY2VydGlmaWNhdGUpCit7Cit9CisKK1Jlc291cmNlRXJyb3IgUmVzb3VyY2VFcnJvcjo6dGlt
ZW91dEVycm9yKGNvbnN0IFN0cmluZyYgZmFpbGluZ1VSTCkKK3sKKyAgICAvLyBGSVhNRTogVGhp
cyBzaG91bGQgcHJvYmFibHkgZWl0aGVyIGJlIGludGVncmF0ZWQgaW50byBFcnJvcnMoR3RrL0VG
TCkuaCBvciB0aGUKKyAgICAvLyBuZXR3b3JraW5nIGVycm9ycyBmcm9tIHRob3NlIGZpbGVzIHNo
b3VsZCBiZSBtb3ZlZCBoZXJlLgorCisgICAgLy8gVXNlIHRoZSBzYW1lIHZhbHVlIGFzIGluIE5T
VVJMRXJyb3IuaAorICAgIHN0YXRpYyBjb25zdCBpbnQgdGltZW91dEVycm9yID0gLTEwMDE7Cisg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0ICBlcnJvckRvbWFpbiA9ICJXZWJLaXRuZXR3b3Jr
RXJyb3IiOworICAgIFJlc291cmNlRXJyb3IgZXJyb3IgPSBSZXNvdXJjZUVycm9yKGVycm9yRG9t
YWluLCB0aW1lb3V0RXJyb3IsIGZhaWxpbmdVUkwsICJSZXF1ZXN0IHRpbWVkIG91dCIpOworICAg
IGVycm9yLnNldElzVGltZW91dCh0cnVlKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKaW5kZXggM2MzNGVmYjQ1OGNj
ZGRmZTUzNjFmMWVkMzY1MmE4N2VkNzU0ODNjMC4uNDAxOTkzMTZhZmRiZDkxZjExNjFmYmM4NDcx
N2U5ZDQxMGEzYTc2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKQEAgLTcyLDkgKzcyLDYgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAjZGVmaW5lIFJFQURfQlVGRkVSX1NJWkUgODE5MgogCi0v
LyBVc2UgdGhlIHNhbWUgdmFsdWUgYXMgaW4gTlNVUkxFcnJvci5oCi1zdGF0aWMgY29uc3QgaW50
IGdUaW1lb3V0RXJyb3IgPSAtMTAwMTsKLQogc3RhdGljIGJvb2wgbG9hZGluZ1N5bmNocm9ub3Vz
UmVxdWVzdCA9IGZhbHNlOwogCiBjbGFzcyBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXIgOiBwdWJs
aWMgUmVzb3VyY2VIYW5kbGVDbGllbnQgewpAQCAtMzk5LDMxICszOTYsMjYgQEAgc3RhdGljIHZv
aWQgY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGJv
b2wgaXNEZXN0cm95aW4KICAgICAgICAgaGFuZGxlLT5kZXJlZigpOwogfQogCi1zdGF0aWMgUmVz
b3VyY2VFcnJvciBjb252ZXJ0U291cEVycm9yVG9SZXNvdXJjZUVycm9yKEdFcnJvciogZXJyb3Is
IFNvdXBSZXF1ZXN0KiByZXF1ZXN0LCBTb3VwTWVzc2FnZSogbWVzc2FnZSA9IDApCitzdGF0aWMg
Ym9vbCBoYW5kbGVVbmlnbm9yZWRUTFNFcnJvcnMoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKIHsK
LSAgICBBU1NFUlQoZXJyb3IpOwotICAgIEFTU0VSVChyZXF1ZXN0KTsKLQotICAgIEdPd25QdHI8
Y2hhcj4gdXJpKHNvdXBfdXJpX3RvX3N0cmluZyhzb3VwX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0
KSwgRkFMU0UpKTsKLSAgICBpZiAobWVzc2FnZSAmJiBTT1VQX1NUQVRVU19JU19UUkFOU1BPUlRf
RVJST1IobWVzc2FnZS0+c3RhdHVzX2NvZGUpKSB7Ci0gICAgICAgIHJldHVybiBSZXNvdXJjZUVy
cm9yKGdfcXVhcmtfdG9fc3RyaW5nKFNPVVBfSFRUUF9FUlJPUiksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PGdpbnQ+KG1lc3NhZ2UtPnN0YXR1c19jb2RlKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJpLmdldCgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTdHJpbmc6OmZyb21VVEY4KG1lc3NhZ2UtPnJlYXNvbl9waHJhc2UpKTsKLSAg
ICB9CisgICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwo
KTsKKyAgICBzdGF0aWMgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UgPSBkLT5tX3Jl
c3BvbnNlOwogCi0gICAgLy8gTm9uLXRyYW5zcG9ydCBlcnJvcnMgYXJlIGhhbmRsZWQgZGlmZmVy
ZW50bHkuCi0gICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZ19xdWFya190b19zdHJpbmcoR19JT19F
UlJPUiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3ItPmNvZGUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgdXJpLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmlu
Zzo6ZnJvbVVURjgoZXJyb3ItPm1lc3NhZ2UpKTsKLX0KKyAgICBpZiAoIXJlc3BvbnNlLnNvdXBN
ZXNzYWdlVExTRXJyb3JzKCkgfHwgZ0lnbm9yZVNTTEVycm9ycykKKyAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi1zdGF0aWMgaW5saW5lIGJvb2wgaGFzVW5pZ25vcmVkVExTRXJyb3JzKFJlc291cmNl
SGFuZGxlKiBoYW5kbGUpCi17Ci0gICAgcmV0dXJuIGhhbmRsZS0+Z2V0SW50ZXJuYWwoKS0+bV9y
ZXNwb25zZS5zb3VwTWVzc2FnZVRMU0Vycm9ycygpCi0gICAgICAgICYmICFnSWdub3JlU1NMRXJy
b3JzCi0gICAgICAgICYmICFhbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlSG9zdHMoKS5jb250YWlu
cyhoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLmhvc3QoKS5sb3dlcigpKTsKKyAgICBTdHJp
bmcgbG93ZXJjYXNlSG9zdFVSTCA9IGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuaG9zdCgp
Lmxvd2VyKCk7CisgICAgaWYgKGFsbG93c0FueUhUVFBTQ2VydGlmaWNhdGVIb3N0cygpLmNvbnRh
aW5zKGxvd2VyY2FzZUhvc3RVUkwpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBX
ZSBhcmVuJ3QgaWdub3JpbmcgZXJyb3JzIGdsb2JhbGx5LCBidXQgdGhlIHVzZXIgbWF5IGhhdmUg
YWxyZWFkeSBkZWNpZGVkIHRvIGFjY2VwdCB0aGlzIGNlcnRpZmljYXRlLgorICAgIENlcnRpZmlj
YXRlc01hcDo6aXRlcmF0b3IgaSA9IGNsaWVudENlcnRpZmljYXRlcygpLmZpbmQobG93ZXJjYXNl
SG9zdFVSTCk7CisgICAgaWYgKGkgIT0gY2xpZW50Q2VydGlmaWNhdGVzKCkuZW5kKCkgJiYgaS0+
c2Vjb25kLmNvbnRhaW5zKHJlc3BvbnNlLnNvdXBNZXNzYWdlQ2VydGlmaWNhdGUoKSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGhhbmRsZS0+Y2xpZW50KCktPmRpZEZhaWwoaGFuZGxl
LCBSZXNvdXJjZUVycm9yKGQtPm1fc291cFJlcXVlc3QuZ2V0KCksCisgICAgICAgIHJlc3BvbnNl
LnNvdXBNZXNzYWdlVExTRXJyb3JzKCksIHJlc3BvbnNlLnNvdXBNZXNzYWdlQ2VydGlmaWNhdGUo
KSkpOworICAgIHJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgdm9pZCBzZW5kUmVxdWVzdENhbGxi
YWNrKEdPYmplY3QqLCBHQXN5bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIgZGF0YSkKQEAgLTQ0Nyw3
ICs0MzksNyBAQCBzdGF0aWMgdm9pZCBzZW5kUmVxdWVzdENhbGxiYWNrKEdPYmplY3QqLCBHQXN5
bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIgZGF0YSkKICAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7
CiAgICAgR0lucHV0U3RyZWFtKiBpbiA9IHNvdXBfcmVxdWVzdF9zZW5kX2ZpbmlzaChkLT5tX3Nv
dXBSZXF1ZXN0LmdldCgpLCByZXMsICZlcnJvci5vdXRQdHIoKSk7CiAgICAgaWYgKGVycm9yKSB7
Ci0gICAgICAgIGNsaWVudC0+ZGlkRmFpbChoYW5kbGUuZ2V0KCksIGNvbnZlcnRTb3VwRXJyb3JU
b1Jlc291cmNlRXJyb3IoZXJyb3IuZ2V0KCksIGQtPm1fc291cFJlcXVlc3QuZ2V0KCksIHNvdXBN
ZXNzYWdlKSk7CisgICAgICAgIGNsaWVudC0+ZGlkRmFpbChoYW5kbGUuZ2V0KCksIFJlc291cmNl
RXJyb3IoZXJyb3IuZ2V0KCksIGQtPm1fc291cFJlcXVlc3QuZ2V0KCksIHNvdXBNZXNzYWdlKSk7
CiAgICAgICAgIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpAQCAtNDYyLDE3ICs0NTQsMTEgQEAgc3RhdGljIHZvaWQgc2Vu
ZFJlcXVlc3RDYWxsYmFjayhHT2JqZWN0KiwgR0FzeW5jUmVzdWx0KiByZXMsIGdwb2ludGVyIGRh
dGEpCiAgICAgICAgIH0KICAgICAgICAgZC0+bV9yZXNwb25zZS51cGRhdGVGcm9tU291cE1lc3Nh
Z2Uoc291cE1lc3NhZ2UpOwogCi0gICAgICAgIGlmIChoYXNVbmlnbm9yZWRUTFNFcnJvcnMoaGFu
ZGxlLmdldCgpKSkgewotICAgICAgICAgICAgQ2VydGlmaWNhdGVzTWFwOjppdGVyYXRvciBpdGVy
ID0gY2xpZW50Q2VydGlmaWNhdGVzKCkuZmluZChoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgp
Lmhvc3QoKS5sb3dlcigpKTsKLSAgICAgICAgICAgIGlmIChpdGVyID09IGNsaWVudENlcnRpZmlj
YXRlcygpLmVuZCgpIHx8ICFpdGVyLT5zZWNvbmQuY29udGFpbnMoZC0+bV9yZXNwb25zZS5zb3Vw
TWVzc2FnZUNlcnRpZmljYXRlKCkpKSB7Ci0gICAgICAgICAgICAgICAgR093blB0cjxjaGFyPiB1
cmkoc291cF91cmlfdG9fc3RyaW5nKHNvdXBfcmVxdWVzdF9nZXRfdXJpKGQtPm1fc291cFJlcXVl
c3QuZ2V0KCkpLCBGQUxTRSkpOwotICAgICAgICAgICAgICAgIGNsaWVudC0+ZGlkRmFpbChoYW5k
bGUuZ2V0KCksIFJlc291cmNlRXJyb3IoZ19xdWFya190b19zdHJpbmcoU09VUF9IVFRQX0VSUk9S
KSwgU09VUF9TVEFUVVNfU1NMX0ZBSUxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaS5nZXQoKSwgdW5hY2NlcHRhYmxlVExT
Q2VydGlmaWNhdGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGQtPm1fcmVzcG9uc2Uuc291cE1lc3NhZ2VUTFNFcnJvcnMoKSwg
ZC0+bV9yZXNwb25zZS5zb3VwTWVzc2FnZUNlcnRpZmljYXRlKCkpKTsKLSAgICAgICAgICAgICAg
ICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICB9CisgICAgICAgIGlmIChoYW5kbGVVbmlnbm9yZWRU
TFNFcnJvcnMoaGFuZGxlLmdldCgpKSkgeworICAgICAgICAgICAgY2xlYW51cFNvdXBSZXF1ZXN0
T3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
KwogICAgIH0gZWxzZSB7CiAgICAgICAgIGQtPm1fcmVzcG9uc2Uuc2V0VVJMKGhhbmRsZS0+Zmly
c3RSZXF1ZXN0KCkudXJsKCkpOwogICAgICAgICBjb25zdCBnY2hhciogY29udGVudFR5cGUgPSBz
b3VwX3JlcXVlc3RfZ2V0X2NvbnRlbnRfdHlwZShkLT5tX3NvdXBSZXF1ZXN0LmdldCgpKTsKQEAg
LTk4Miw3ICs5NjgsNyBAQCBzdGF0aWMgdm9pZCByZWFkQ2FsbGJhY2soR09iamVjdCosIEdBc3lu
Y1Jlc3VsdCogYXN5bmNSZXN1bHQsIGdwb2ludGVyIGRhdGEpCiAgICAgR093blB0cjxHRXJyb3I+
IGVycm9yOwogICAgIGdzc2l6ZSBieXRlc1JlYWQgPSBnX2lucHV0X3N0cmVhbV9yZWFkX2Zpbmlz
aChkLT5tX2lucHV0U3RyZWFtLmdldCgpLCBhc3luY1Jlc3VsdCwgJmVycm9yLm91dFB0cigpKTsK
ICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgY2xpZW50LT5kaWRGYWlsKGhhbmRsZS5nZXQoKSwg
Y29udmVydFNvdXBFcnJvclRvUmVzb3VyY2VFcnJvcihlcnJvci5nZXQoKSwgZC0+bV9zb3VwUmVx
dWVzdC5nZXQoKSkpOworICAgICAgICBjbGllbnQtPmRpZEZhaWwoaGFuZGxlLmdldCgpLCBSZXNv
dXJjZUVycm9yKGVycm9yLmdldCgpLCBkLT5tX3NvdXBSZXF1ZXN0LmdldCgpKSk7CiAgICAgICAg
IGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQpAQCAtMTAxOSwxMiArMTAwNSw4IEBAIHN0YXRpYyB2b2lkIHJlYWRDYWxsYmFj
ayhHT2JqZWN0KiwgR0FzeW5jUmVzdWx0KiBhc3luY1Jlc3VsdCwgZ3BvaW50ZXIgZGF0YSkKIHN0
YXRpYyBnYm9vbGVhbiByZXF1ZXN0VGltZW91dENhbGxiYWNrKGdwb2ludGVyIGRhdGEpCiB7CiAg
ICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUhh
bmRsZSo+KGRhdGEpOwotICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdl
dEludGVybmFsKCk7Ci0gICAgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCA9IGhhbmRsZS0+
Y2xpZW50KCk7Ci0KLSAgICBSZXNvdXJjZUVycm9yIHRpbWVvdXRFcnJvcigiV2ViS2l0TmV0d29y
a0Vycm9yIiwgZ1RpbWVvdXRFcnJvciwgZC0+bV9maXJzdFJlcXVlc3QudXJsKCkuc3RyaW5nKCks
ICJSZXF1ZXN0IHRpbWVkIG91dCIpOwotICAgIHRpbWVvdXRFcnJvci5zZXRJc1RpbWVvdXQodHJ1
ZSk7Ci0gICAgY2xpZW50LT5kaWRGYWlsKGhhbmRsZS5nZXQoKSwgdGltZW91dEVycm9yKTsKKyAg
ICBoYW5kbGUtPmNsaWVudCgpLT5kaWRGYWlsKGhhbmRsZS5nZXQoKSwgUmVzb3VyY2VFcnJvcjo6
dGltZW91dEVycm9yKGhhbmRsZS0+Z2V0SW50ZXJuYWwoKS0+bV9maXJzdFJlcXVlc3QudXJsKCku
c3RyaW5nKCkpKTsKKyAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxlLmdldCgp
KTsKICAgICBoYW5kbGUtPmNhbmNlbCgpOwogCiAgICAgcmV0dXJuIEZBTFNFOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167469</attachid>
            <date>2012-10-06 23:43:40 -0700</date>
            <delta_ts>2012-10-07 01:34:12 -0700</delta_ts>
            <desc>Same patch, but using the factory approach</desc>
            <filename>bug-98521-20121006234245.patch</filename>
            <type>text/plain</type>
            <size>14477</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwNTgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjRiMjcyZTljODYzNTZl
YmE5NjgzZDk1NDdiZGY2MDVkYzhkMzZiYi4uNTczMDk2YjJlNjgzZmJjMjJlNjcxNzIwMTFiYWRm
NmQ2ZmIzYjg2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEyLTEwLTA1ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbU291cF0gQ2xl
YW4gdXAgUmVzb3VyY2VFcnJvciBjcmVhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTg1MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBTaW1wbGlmeSB0aGUgY3JlYXRpb24gb2YgUmVzb3VyY0Vycm9y
cyBpbiBSZXNvdXJjZUhhbmRsZVNvdXAuIFRoaXMgaXMKKyAgICAgICAgcGFydCBvZiBhIHByb2Nl
c3MgdG8gbWFrZSB0aGUgbGlic291cCBuZXR3b3JraW5nIGJhY2tlbmQgbW9yZSBoYWNrYWJsZS4K
KworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgc2hvdWxkbid0IGNoYW5nZSBmdW5jdGlvbmFs
aXR5LgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbTogQWRkZWQgbmV3IGZpbGUuCisg
ICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6IEFkZGVkIG5ldyBmaWxlLgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUVycm9yLmg6CisgICAgICAgIChSZXNvdXJjZUVy
cm9yKTogQWRkZWQgbmV3IGNvbnN0cnVjdG9ycy4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvUmVzb3VyY2VFcnJvclNvdXAuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Omlz
VHJhbnNwb3J0RXJyb3IpOiBBZGRlZCBoZWxwZXIgdG8gYmUgdXNlZCBpbiB0aGUgY29uc3RydWN0
b3IuCisgICAgICAgIChXZWJDb3JlOjplcnJvckRvbWFpbik6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6ZXJyb3JDb2RlRnJvbUVycm9yQW5kTWVzc2FnZSk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6ZmFpbGluZ1VSSSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6ZmFpbHVyZVJlYXNv
bik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VFcnJvcjo6dGltZW91dEVycm9y
KTogQWRkZWQgdGhpcyBmYWN0b3J5LgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9S
ZXNvdXJjZUhhbmRsZVNvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aGFuZGxlVW5pZ25vcmVk
VExTRXJyb3JzKTogQ3JlYXRlZCB0aGlzIGhlbHBlciB3aGljaCBtZXJnZXMKKyAgICAgICAgc29t
ZSBvZiB0aGUgbG9naWMgZnJvbSBzZW5kUmVxdWVzdENhbGxiYWNrLgorICAgICAgICAoV2ViQ29y
ZTo6c2VuZFJlcXVlc3RDYWxsYmFjayk6IFVzZSB0aGUgbmV3IGhlbHBlci4KKyAgICAgICAgKFdl
YkNvcmU6OnJlcXVlc3RUaW1lb3V0Q2FsbGJhY2spOiBVc2UgdGhlIG5ldyBmYWN0b3J5LgorCiAy
MDEyLTEwLTA2ICBCeXVuZ3dvbyBMZWUgIDxidzgwLmxlZUBzYW1zdW5nLmNvbT4KIAogICAgICAg
ICBGaXggYnVpbGQgd2FybmluZyA6IC1XdW51c2VkLXBhcmFtZXRlci4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCmluZGV4IDFlOTdiNTdhNzMyNWZlZTA1NWU2M2YwZDA1MDVkYjIyOWY1MjIy
MTMuLmQ3YTRlZGUyMTlmMzU0ODk3NWZiODQxZjUyNjk1MGM0YTUzNTg3M2QgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNDcwMSw2ICs0NzAxLDcgQEAgd2ViY29yZV9zb3VyY2Vz
ICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvR093blB0clNvdXAu
aCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Byb3h5U2VydmVyU291
cC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUVy
cm9yLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUVy
cm9yU291cC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNv
dXJjZUhhbmRsZVNvdXAuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvUmVzb3VyY2VSZXF1ZXN0LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
c291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCmlu
ZGV4IDNkMTYwMTUzYjg1YzFiMDlkOGZhMTc1YmZiOWQ1NmRjMjc3Njk3YzYuLjQ1MGMyNDk1M2Jk
M2E0OWUwZjY0YzVhYjRlZDBkOGJmNjEyYmFiODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtl
CkBAIC03NSw2ICs3NSw3IEBAIExJU1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICBwbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvR093blB0clNvdXAuY3BwCiAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9Q
cm94eVJlc29sdmVyU291cC5jcHAKICAgcGxhdGZvcm0vbmV0d29yay9zb3VwL1Byb3h5U2VydmVy
U291cC5jcHAKKyAgcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlRXJyb3JTb3VwLmNwcAog
ICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAogICBwbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291cC5jcHAKICAgcGxhdGZvcm0vbmV0d29y
ay9zb3VwL1Jlc291cmNlUmVzcG9uc2VTb3VwLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlRXJyb3IuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUVycm9yLmgKaW5kZXggMzc4ODBlNTJkODRl
NmJkMjJlNTIxM2ViZjM5YmJjYzY2OTA2YmM5Zi4uYzg3ZTZiZTFkZDFkZjI0ZGYyNzdiZDZjNGNl
YjY1MmQwNjFhNmZlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL1Jlc291cmNlRXJyb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvUmVzb3VyY2VFcnJvci5oCkBAIC0zMCwzMCArMzAsMzAgQEAKICNpbmNsdWRlIDx3
dGYvZ29iamVjdC9HUmVmUHRyLmg+CiAKIHR5cGVkZWYgc3RydWN0IF9HVGxzQ2VydGlmaWNhdGUg
R1Rsc0NlcnRpZmljYXRlOwordHlwZWRlZiBzdHJ1Y3QgX1NvdXBSZXF1ZXN0IFNvdXBSZXF1ZXN0
OwordHlwZWRlZiBzdHJ1Y3QgX1NvdXBNZXNzYWdlIFNvdXBNZXNzYWdlOwogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIFJlc291cmNlRXJyb3IgOiBwdWJsaWMgUmVzb3VyY2VFcnJvckJh
c2UKIHsKIHB1YmxpYzoKLSAgICBSZXNvdXJjZUVycm9yKCkKLSAgICAgICAgOiBtX3Rsc0Vycm9y
cygwKQotICAgIHsKLSAgICB9Ci0KICAgICBSZXNvdXJjZUVycm9yKGNvbnN0IFN0cmluZyYgZG9t
YWluLCBpbnQgZXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGZhaWxpbmdVUkwsIGNvbnN0IFN0cmlu
ZyYgbG9jYWxpemVkRGVzY3JpcHRpb24pCiAgICAgICAgIDogUmVzb3VyY2VFcnJvckJhc2UoZG9t
YWluLCBlcnJvckNvZGUsIGZhaWxpbmdVUkwsIGxvY2FsaXplZERlc2NyaXB0aW9uKQogICAgICAg
ICAsIG1fdGxzRXJyb3JzKDApCiAgICAgewogICAgIH0KIAotICAgIFJlc291cmNlRXJyb3IoY29u
c3QgU3RyaW5nJiBkb21haW4sIGludCBlcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZmFpbGluZ1VS
TCwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXNjcmlwdGlvbiwgdW5zaWduZWQgdGxzRXJyb3Jz
LCBHVGxzQ2VydGlmaWNhdGUqIGNlcnRpZmljYXRlKQotICAgICAgICA6IFJlc291cmNlRXJyb3JC
YXNlKGRvbWFpbiwgZXJyb3JDb2RlLCBmYWlsaW5nVVJMLCBsb2NhbGl6ZWREZXNjcmlwdGlvbikK
LSAgICAgICAgLCBtX3Rsc0Vycm9ycyh0bHNFcnJvcnMpCi0gICAgICAgICwgbV9jZXJ0aWZpY2F0
ZShjZXJ0aWZpY2F0ZSkKKyAgICBSZXNvdXJjZUVycm9yKCkKKyAgICAgICAgOiBtX3Rsc0Vycm9y
cygwKQogICAgIHsKICAgICB9CiAKKyAgICBzdGF0aWMgUmVzb3VyY2VFcnJvciBzb3VwTWVzc2Fn
ZUVycm9yKFNvdXBNZXNzYWdlKiwgR0Vycm9yKiwgU291cFJlcXVlc3QqKTsKKyAgICBzdGF0aWMg
UmVzb3VyY2VFcnJvciBnZXJyb3JFcnJvcihHRXJyb3IqLCBTb3VwUmVxdWVzdCopOworICAgIHN0
YXRpYyBSZXNvdXJjZUVycm9yIHRsc0Vycm9yKFNvdXBSZXF1ZXN0KiwgdW5zaWduZWQgdGxzRXJy
b3JzLCBHVGxzQ2VydGlmaWNhdGUqKTsKKyAgICBzdGF0aWMgUmVzb3VyY2VFcnJvciB0aW1lb3V0
RXJyb3IoY29uc3QgU3RyaW5nJiBmYWlsaW5nVVJMKTsKKwogICAgIHVuc2lnbmVkIHRsc0Vycm9y
cygpIGNvbnN0IHsgcmV0dXJuIG1fdGxzRXJyb3JzOyB9CiAgICAgR1Rsc0NlcnRpZmljYXRlKiBj
ZXJ0aWZpY2F0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2VydGlmaWNhdGUuZ2V0KCk7IH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlRXJy
b3JTb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJj
ZUVycm9yU291cC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDlkMmFjZjQ5MGEyNWViNDk3ZTYzMGFhMTQzMTY3
MzZhZDg2NjczMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9SZXNvdXJjZUVycm9yU291cC5jcHAKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgSUdBTElBIFMuTC4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJSZXNvdXJjZUVycm9yLmgiCisKKyNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCisj
ZGVmaW5lIExJQlNPVVBfVVNFX1VOU1RBQkxFX1JFUVVFU1RfQVBJCisjaW5jbHVkZSA8bGlic291
cC9zb3VwLXJlcXVlc3QuaD4KKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKyNpbmNsdWRlIDx3
dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBTdHJpbmcgZmFpbGluZ1VSSShTb3VwUmVxdWVz
dCogcmVxdWVzdCkKK3sKKyAgICBBU1NFUlQocmVxdWVzdCk7CisgICAgR093blB0cjxjaGFyPiB1
cmkoc291cF91cmlfdG9fc3RyaW5nKHNvdXBfcmVxdWVzdF9nZXRfdXJpKHJlcXVlc3QpLCBGQUxT
RSkpOworICAgIHJldHVybiB1cmkuZ2V0KCk7Cit9CisKK1Jlc291cmNlRXJyb3IgUmVzb3VyY2VF
cnJvcjo6c291cE1lc3NhZ2VFcnJvcihTb3VwTWVzc2FnZSogbWVzc2FnZSwgR0Vycm9yKiBlcnJv
ciwgU291cFJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgaWYgKCFtZXNzYWdlIHx8ICFTT1VQX1NU
QVRVU19JU19UUkFOU1BPUlRfRVJST1IobWVzc2FnZS0+c3RhdHVzX2NvZGUpKQorICAgICAgICBy
ZXR1cm4gZ2Vycm9yRXJyb3IoZXJyb3IsIHJlcXVlc3QpOworICAgIHJldHVybiBSZXNvdXJjZUVy
cm9yKGdfcXVhcmtfdG9fc3RyaW5nKFNPVVBfSFRUUF9FUlJPUiksIG1lc3NhZ2UtPnN0YXR1c19j
b2RlLAorICAgICAgICBmYWlsaW5nVVJJKHJlcXVlc3QpLCBTdHJpbmc6OmZyb21VVEY4KG1lc3Nh
Z2UtPnJlYXNvbl9waHJhc2UpKTsKK30KKworUmVzb3VyY2VFcnJvciBSZXNvdXJjZUVycm9yOjpn
ZXJyb3JFcnJvcihHRXJyb3IqIGVycm9yLCBTb3VwUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBy
ZXR1cm4gUmVzb3VyY2VFcnJvcihnX3F1YXJrX3RvX3N0cmluZyhHX0lPX0VSUk9SKSwgZXJyb3It
PmNvZGUsCisgICAgICAgIGZhaWxpbmdVUkkocmVxdWVzdCksIFN0cmluZzo6ZnJvbVVURjgoZXJy
b3ItPm1lc3NhZ2UpKTsKK30KKworUmVzb3VyY2VFcnJvciBSZXNvdXJjZUVycm9yOjp0bHNFcnJv
cihTb3VwUmVxdWVzdCogcmVxdWVzdCwgdW5zaWduZWQgdGxzRXJyb3JzLCBHVGxzQ2VydGlmaWNh
dGUqIGNlcnRpZmljYXRlKQoreworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGdfcXVhcmtfdG9f
c3RyaW5nKFNPVVBfSFRUUF9FUlJPUiksIFNPVVBfU1RBVFVTX1NTTF9GQUlMRUQsCisgICAgICAg
IGZhaWxpbmdVUkkocmVxdWVzdCksIHVuYWNjZXB0YWJsZVRMU0NlcnRpZmljYXRlKCkpOworfQor
CitSZXNvdXJjZUVycm9yIFJlc291cmNlRXJyb3I6OnRpbWVvdXRFcnJvcihjb25zdCBTdHJpbmcm
IGZhaWxpbmdVUkwpCit7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IGVpdGhl
ciBiZSBpbnRlZ3JhdGVkIGludG8gRXJyb3JzKEd0ay9FRkwpLmggb3IgdGhlCisgICAgLy8gbmV0
d29ya2luZyBlcnJvcnMgZnJvbSB0aG9zZSBmaWxlcyBzaG91bGQgYmUgbW92ZWQgaGVyZS4KKwor
ICAgIC8vIFVzZSB0aGUgc2FtZSB2YWx1ZSBhcyBpbiBOU1VSTEVycm9yLmgKKyAgICBzdGF0aWMg
Y29uc3QgaW50IHRpbWVvdXRFcnJvciA9IC0xMDAxOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBj
b25zdCAgZXJyb3JEb21haW4gPSAiV2ViS2l0bmV0d29ya0Vycm9yIjsKKyAgICBSZXNvdXJjZUVy
cm9yIGVycm9yID0gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpbiwgdGltZW91dEVycm9yLCBmYWls
aW5nVVJMLCAiUmVxdWVzdCB0aW1lZCBvdXQiKTsKKyAgICBlcnJvci5zZXRJc1RpbWVvdXQodHJ1
ZSk7CisgICAgcmV0dXJuIGVycm9yOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5k
bGVTb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJj
ZUhhbmRsZVNvdXAuY3BwCmluZGV4IDNjMzRlZmI0NThjY2RkZmU1MzYxZjFlZDM2NTJhODdlZDc1
NDgzYzAuLjM1M2QxOTAyMDU4YTJjYTA1NjJhMWViYjk4ZDEyYTkzNmM4MGI2YzIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNv
dXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJj
ZUhhbmRsZVNvdXAuY3BwCkBAIC03Miw5ICs3Miw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
I2RlZmluZSBSRUFEX0JVRkZFUl9TSVpFIDgxOTIKIAotLy8gVXNlIHRoZSBzYW1lIHZhbHVlIGFz
IGluIE5TVVJMRXJyb3IuaAotc3RhdGljIGNvbnN0IGludCBnVGltZW91dEVycm9yID0gLTEwMDE7
Ci0KIHN0YXRpYyBib29sIGxvYWRpbmdTeW5jaHJvbm91c1JlcXVlc3QgPSBmYWxzZTsKIAogY2xh
c3MgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyIDogcHVibGljIFJlc291cmNlSGFuZGxlQ2xpZW50
IHsKQEAgLTM5OSwzMSArMzk2LDI1IEBAIHN0YXRpYyB2b2lkIGNsZWFudXBTb3VwUmVxdWVzdE9w
ZXJhdGlvbihSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBib29sIGlzRGVzdHJveWluCiAgICAgICAg
IGhhbmRsZS0+ZGVyZWYoKTsKIH0KIAotc3RhdGljIFJlc291cmNlRXJyb3IgY29udmVydFNvdXBF
cnJvclRvUmVzb3VyY2VFcnJvcihHRXJyb3IqIGVycm9yLCBTb3VwUmVxdWVzdCogcmVxdWVzdCwg
U291cE1lc3NhZ2UqIG1lc3NhZ2UgPSAwKQorc3RhdGljIGJvb2wgaGFuZGxlVW5pZ25vcmVkVExT
RXJyb3JzKFJlc291cmNlSGFuZGxlKiBoYW5kbGUpCiB7Ci0gICAgQVNTRVJUKGVycm9yKTsKLSAg
ICBBU1NFUlQocmVxdWVzdCk7Ci0KLSAgICBHT3duUHRyPGNoYXI+IHVyaShzb3VwX3VyaV90b19z
dHJpbmcoc291cF9yZXF1ZXN0X2dldF91cmkocmVxdWVzdCksIEZBTFNFKSk7Ci0gICAgaWYgKG1l
c3NhZ2UgJiYgU09VUF9TVEFUVVNfSVNfVFJBTlNQT1JUX0VSUk9SKG1lc3NhZ2UtPnN0YXR1c19j
b2RlKSkgewotICAgICAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihnX3F1YXJrX3RvX3N0cmluZyhT
T1VQX0hUVFBfRVJST1IpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxnaW50PihtZXNzYWdlLT5zdGF0dXNfY29kZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVyaS5nZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOjpmcm9t
VVRGOChtZXNzYWdlLT5yZWFzb25fcGhyYXNlKSk7Ci0gICAgfQorICAgIFJlc291cmNlSGFuZGxl
SW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdldEludGVybmFsKCk7CisgICAgc3RhdGljIGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmIHJlc3BvbnNlID0gZC0+bV9yZXNwb25zZTsKIAotICAgIC8vIE5vbi10
cmFuc3BvcnQgZXJyb3JzIGFyZSBoYW5kbGVkIGRpZmZlcmVudGx5LgotICAgIHJldHVybiBSZXNv
dXJjZUVycm9yKGdfcXVhcmtfdG9fc3RyaW5nKEdfSU9fRVJST1IpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgIGVycm9yLT5jb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgIHVyaS5nZXQo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc6OmZyb21VVEY4KGVycm9yLT5tZXNz
YWdlKSk7Ci19CisgICAgaWYgKCFyZXNwb25zZS5zb3VwTWVzc2FnZVRMU0Vycm9ycygpIHx8IGdJ
Z25vcmVTU0xFcnJvcnMpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotc3RhdGljIGlubGluZSBi
b29sIGhhc1VuaWdub3JlZFRMU0Vycm9ycyhSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQotewotICAg
IHJldHVybiBoYW5kbGUtPmdldEludGVybmFsKCktPm1fcmVzcG9uc2Uuc291cE1lc3NhZ2VUTFNF
cnJvcnMoKQotICAgICAgICAmJiAhZ0lnbm9yZVNTTEVycm9ycwotICAgICAgICAmJiAhYWxsb3dz
QW55SFRUUFNDZXJ0aWZpY2F0ZUhvc3RzKCkuY29udGFpbnMoaGFuZGxlLT5maXJzdFJlcXVlc3Qo
KS51cmwoKS5ob3N0KCkubG93ZXIoKSk7CisgICAgU3RyaW5nIGxvd2VyY2FzZUhvc3RVUkwgPSBo
YW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLmhvc3QoKS5sb3dlcigpOworICAgIGlmIChhbGxv
d3NBbnlIVFRQU0NlcnRpZmljYXRlSG9zdHMoKS5jb250YWlucyhsb3dlcmNhc2VIb3N0VVJMKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gV2UgYXJlbid0IGlnbm9yaW5nIGVycm9y
cyBnbG9iYWxseSwgYnV0IHRoZSB1c2VyIG1heSBoYXZlIGFscmVhZHkgZGVjaWRlZCB0byBhY2Nl
cHQgdGhpcyBjZXJ0aWZpY2F0ZS4KKyAgICBDZXJ0aWZpY2F0ZXNNYXA6Oml0ZXJhdG9yIGkgPSBj
bGllbnRDZXJ0aWZpY2F0ZXMoKS5maW5kKGxvd2VyY2FzZUhvc3RVUkwpOworICAgIGlmIChpICE9
IGNsaWVudENlcnRpZmljYXRlcygpLmVuZCgpICYmIGktPnNlY29uZC5jb250YWlucyhyZXNwb25z
ZS5zb3VwTWVzc2FnZUNlcnRpZmljYXRlKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBoYW5kbGUtPmNsaWVudCgpLT5kaWRGYWlsKGhhbmRsZSwgUmVzb3VyY2VFcnJvcjo6dGxzRXJy
b3IoZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSwgcmVzcG9uc2Uuc291cE1lc3NhZ2VUTFNFcnJvcnMo
KSwgcmVzcG9uc2Uuc291cE1lc3NhZ2VDZXJ0aWZpY2F0ZSgpKSk7CisgICAgcmV0dXJuIHRydWU7
CiB9CiAKIHN0YXRpYyB2b2lkIHNlbmRSZXF1ZXN0Q2FsbGJhY2soR09iamVjdCosIEdBc3luY1Jl
c3VsdCogcmVzLCBncG9pbnRlciBkYXRhKQpAQCAtNDQ3LDcgKzQzOCw3IEBAIHN0YXRpYyB2b2lk
IHNlbmRSZXF1ZXN0Q2FsbGJhY2soR09iamVjdCosIEdBc3luY1Jlc3VsdCogcmVzLCBncG9pbnRl
ciBkYXRhKQogICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKICAgICBHSW5wdXRTdHJlYW0qIGlu
ID0gc291cF9yZXF1ZXN0X3NlbmRfZmluaXNoKGQtPm1fc291cFJlcXVlc3QuZ2V0KCksIHJlcywg
JmVycm9yLm91dFB0cigpKTsKICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgY2xpZW50LT5kaWRG
YWlsKGhhbmRsZS5nZXQoKSwgY29udmVydFNvdXBFcnJvclRvUmVzb3VyY2VFcnJvcihlcnJvci5n
ZXQoKSwgZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSwgc291cE1lc3NhZ2UpKTsKKyAgICAgICAgY2xp
ZW50LT5kaWRGYWlsKGhhbmRsZS5nZXQoKSwgUmVzb3VyY2VFcnJvcjo6c291cE1lc3NhZ2VFcnJv
cihzb3VwTWVzc2FnZSwgZXJyb3IuZ2V0KCksIGQtPm1fc291cFJlcXVlc3QuZ2V0KCkpKTsKICAg
ICAgICAgY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CkBAIC00NjIsMTcgKzQ1MywxMSBAQCBzdGF0aWMgdm9pZCBzZW5kUmVx
dWVzdENhbGxiYWNrKEdPYmplY3QqLCBHQXN5bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIgZGF0YSkK
ICAgICAgICAgfQogICAgICAgICBkLT5tX3Jlc3BvbnNlLnVwZGF0ZUZyb21Tb3VwTWVzc2FnZShz
b3VwTWVzc2FnZSk7CiAKLSAgICAgICAgaWYgKGhhc1VuaWdub3JlZFRMU0Vycm9ycyhoYW5kbGUu
Z2V0KCkpKSB7Ci0gICAgICAgICAgICBDZXJ0aWZpY2F0ZXNNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBj
bGllbnRDZXJ0aWZpY2F0ZXMoKS5maW5kKGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuaG9z
dCgpLmxvd2VyKCkpOwotICAgICAgICAgICAgaWYgKGl0ZXIgPT0gY2xpZW50Q2VydGlmaWNhdGVz
KCkuZW5kKCkgfHwgIWl0ZXItPnNlY29uZC5jb250YWlucyhkLT5tX3Jlc3BvbnNlLnNvdXBNZXNz
YWdlQ2VydGlmaWNhdGUoKSkpIHsKLSAgICAgICAgICAgICAgICBHT3duUHRyPGNoYXI+IHVyaShz
b3VwX3VyaV90b19zdHJpbmcoc291cF9yZXF1ZXN0X2dldF91cmkoZC0+bV9zb3VwUmVxdWVzdC5n
ZXQoKSksIEZBTFNFKSk7Ci0gICAgICAgICAgICAgICAgY2xpZW50LT5kaWRGYWlsKGhhbmRsZS5n
ZXQoKSwgUmVzb3VyY2VFcnJvcihnX3F1YXJrX3RvX3N0cmluZyhTT1VQX0hUVFBfRVJST1IpLCBT
T1VQX1NUQVRVU19TU0xfRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJpLmdldCgpLCB1bmFjY2VwdGFibGVUTFNDZXJ0
aWZpY2F0ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZC0+bV9yZXNwb25zZS5zb3VwTWVzc2FnZVRMU0Vycm9ycygpLCBkLT5t
X3Jlc3BvbnNlLnNvdXBNZXNzYWdlQ2VydGlmaWNhdGUoKSkpOwotICAgICAgICAgICAgICAgIGNs
ZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKGhhbmRsZVVuaWdub3JlZFRMU0Vy
cm9ycyhoYW5kbGUuZ2V0KCkpKSB7CisgICAgICAgICAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVy
YXRpb24oaGFuZGxlLmdldCgpKTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorCiAg
ICAgfSBlbHNlIHsKICAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRVUkwoaGFuZGxlLT5maXJzdFJl
cXVlc3QoKS51cmwoKSk7CiAgICAgICAgIGNvbnN0IGdjaGFyKiBjb250ZW50VHlwZSA9IHNvdXBf
cmVxdWVzdF9nZXRfY29udGVudF90eXBlKGQtPm1fc291cFJlcXVlc3QuZ2V0KCkpOwpAQCAtOTgy
LDcgKzk2Nyw3IEBAIHN0YXRpYyB2b2lkIHJlYWRDYWxsYmFjayhHT2JqZWN0KiwgR0FzeW5jUmVz
dWx0KiBhc3luY1Jlc3VsdCwgZ3BvaW50ZXIgZGF0YSkKICAgICBHT3duUHRyPEdFcnJvcj4gZXJy
b3I7CiAgICAgZ3NzaXplIGJ5dGVzUmVhZCA9IGdfaW5wdXRfc3RyZWFtX3JlYWRfZmluaXNoKGQt
Pm1faW5wdXRTdHJlYW0uZ2V0KCksIGFzeW5jUmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpOwogICAg
IGlmIChlcnJvcikgewotICAgICAgICBjbGllbnQtPmRpZEZhaWwoaGFuZGxlLmdldCgpLCBjb252
ZXJ0U291cEVycm9yVG9SZXNvdXJjZUVycm9yKGVycm9yLmdldCgpLCBkLT5tX3NvdXBSZXF1ZXN0
LmdldCgpKSk7CisgICAgICAgIGNsaWVudC0+ZGlkRmFpbChoYW5kbGUuZ2V0KCksIFJlc291cmNl
RXJyb3I6OmdlcnJvckVycm9yKGVycm9yLmdldCgpLCBkLT5tX3NvdXBSZXF1ZXN0LmdldCgpKSk7
CiAgICAgICAgIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpAQCAtMTAxOSwxMiArMTAwNCw4IEBAIHN0YXRpYyB2b2lkIHJl
YWRDYWxsYmFjayhHT2JqZWN0KiwgR0FzeW5jUmVzdWx0KiBhc3luY1Jlc3VsdCwgZ3BvaW50ZXIg
ZGF0YSkKIHN0YXRpYyBnYm9vbGVhbiByZXF1ZXN0VGltZW91dENhbGxiYWNrKGdwb2ludGVyIGRh
dGEpCiB7CiAgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxS
ZXNvdXJjZUhhbmRsZSo+KGRhdGEpOwotICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBo
YW5kbGUtPmdldEludGVybmFsKCk7Ci0gICAgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCA9
IGhhbmRsZS0+Y2xpZW50KCk7Ci0KLSAgICBSZXNvdXJjZUVycm9yIHRpbWVvdXRFcnJvcigiV2Vi
S2l0TmV0d29ya0Vycm9yIiwgZ1RpbWVvdXRFcnJvciwgZC0+bV9maXJzdFJlcXVlc3QudXJsKCku
c3RyaW5nKCksICJSZXF1ZXN0IHRpbWVkIG91dCIpOwotICAgIHRpbWVvdXRFcnJvci5zZXRJc1Rp
bWVvdXQodHJ1ZSk7Ci0gICAgY2xpZW50LT5kaWRGYWlsKGhhbmRsZS5nZXQoKSwgdGltZW91dEVy
cm9yKTsKKyAgICBoYW5kbGUtPmNsaWVudCgpLT5kaWRGYWlsKGhhbmRsZS5nZXQoKSwgUmVzb3Vy
Y2VFcnJvcjo6dGltZW91dEVycm9yKGhhbmRsZS0+Z2V0SW50ZXJuYWwoKS0+bV9maXJzdFJlcXVl
c3QudXJsKCkuc3RyaW5nKCkpKTsKKyAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFu
ZGxlLmdldCgpKTsKICAgICBoYW5kbGUtPmNhbmNlbCgpOwogCiAgICAgcmV0dXJuIEZBTFNFOwo=
</data>
<flag name="review"
          id="180151"
          type_id="1"
          status="+"
          setter="cgarcia"
    />
    <flag name="commit-queue"
          id="180159"
          type_id="3"
          status="-"
          setter="cgarcia"
    />
          </attachment>
      

    </bug>

</bugzilla>