<?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>153419</bug_id>
          
          <creation_ts>2016-01-25 02:01:40 -0800</creation_ts>
          <short_desc>WTF should have a similar function as equalLettersIgnoringASCIICase to match beginning of strings</short_desc>
          <delta_ts>2016-03-11 07:10:13 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="youenn fablet">youennf</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1158262</commentid>
    <comment_count>0</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-01-25 02:01:40 -0800</bug_when>
    <thetext>startWithLettersIgnoringASCIICase would be useful for checking headers in https://fetch.spec.whatwg.org/#terminology-headers</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158425</commentid>
    <comment_count>1</comment_count>
      <attachid>269774</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-01-25 11:48:59 -0800</bug_when>
    <thetext>Created attachment 269774
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158691</commentid>
    <comment_count>2</comment_count>
      <attachid>269774</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-01-25 21:09:19 -0800</bug_when>
    <thetext>Comment on attachment 269774
Patch

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

Name should be startsWithLettersIgnoringASCIICase, plural.

&gt; Source/WTF/wtf/text/StringCommon.h:562
&gt; +template&lt;typename StringClass&gt; bool equalLettersIgnoringASCIICaseCommonWithLength(const StringClass&amp; string, const char* lowercaseLetters, unsigned length)

I am not sure this is a good name for this helper. This checks if a prefix of string is equal assuming we already know length is &lt;= string.length(), so it’s not a general purpose function so needs a more specific name.

&gt; Source/WTF/wtf/text/StringCommon.h:582
&gt; +    return equalLettersIgnoringASCIICaseCommonWithLength(string, lowercaseLetters, length);

Because the function this calls is not marked inline, this is likely adding a level function call overhead to every call of equalLettersIgnoringASCIICase. We don’t want to do that! Need to mark the function this is calling inline.

&gt; Source/WTF/wtf/text/StringImpl.h:1200
&gt; +template&lt;unsigned length&gt; inline bool startWithLettersIgnoringASCIICase(const StringImpl&amp; string, const char (&amp;lowercaseLetters)[length])
&gt; +{
&gt; +    if (length == 1)
&gt; +        return true;
&gt; +    if (string.length() &lt; (length - 1))
&gt; +        return false;
&gt; +    return equalLettersIgnoringASCIICaseCommonWithLength(string, lowercaseLetters, length - 1);
&gt; +}

I think this should work the same way as equalLettersIgnoringASCIICaseCommon; don’t actually use the length, chose code size over speed (for now). Call a version that just takes a pointer and does strlen.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158756</commentid>
    <comment_count>3</comment_count>
      <attachid>269863</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-01-26 00:41:10 -0800</bug_when>
    <thetext>Created attachment 269863
Updated according review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158781</commentid>
    <comment_count>4</comment_count>
      <attachid>269876</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-01-26 03:35:41 -0800</bug_when>
    <thetext>Created attachment 269876
Fully aligning with equalLetters implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158782</commentid>
    <comment_count>5</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-01-26 03:37:16 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 269774 [details]
&gt; Patch

Thanks for the review.
I fully aligned with equalLettersIgnoringASCIICase for consistency.
I changed the new routine to hasPrefixWithLettersIgnoringASCIICaseCommon</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158819</commentid>
    <comment_count>6</comment_count>
      <attachid>269876</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-01-26 08:18:14 -0800</bug_when>
    <thetext>Comment on attachment 269876
Fully aligning with equalLetters implementation

Excellent.

We will want to follow this patch up by using this everywhere that the member startsWith(x, false) is currently used with a constant string that includes the legal characters.

WebCore/css/CSSParser.cpp:    if (!string.startsWith(&quot;translate&quot;, false))
WebCore/css/CSSFontFaceSrcValue.cpp:        if (!m_resource.startsWith(&quot;data:&quot;, false) &amp;&amp; m_resource.endsWith(&quot;.eot&quot;, false))
WebCore/css/CSSParser.cpp:    if (!string.startsWith(&quot;translate&quot;, false))
WebCore/dom/DOMImplementation.cpp:    return feature.startsWith(&quot;http://www.w3.org/tr/svg11/feature#&quot;, false)
WebCore/dom/DOMImplementation.cpp:    if (feature.startsWith(&quot;http://www.w3.org/TR/SVG&quot;, false)
WebCore/dom/DOMImplementation.cpp:        || feature.startsWith(&quot;org.w3c.dom.svg&quot;, false)
WebCore/dom/DOMImplementation.cpp:        || feature.startsWith(&quot;org.w3c.svg&quot;, false)) {
WebCore/html/HTMLObjectElement.cpp:        if (equalLettersIgnoringASCIICase(metaElement.name(), &quot;generator&quot;) &amp;&amp; metaElement.content().startsWith(&quot;Mac OS X Server Web Services Server&quot;, false))
WebCore/html/HTMLObjectElement.cpp:    if (MIMETypeRegistry::isJavaAppletMIMEType(serviceType()) &amp;&amp; fastGetAttribute(classidAttr).startsWith(&quot;java:&quot;, false))
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;+//Silmaril//dtd html Pro v0r11 19970101//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//AdvaSoft Ltd//DTD HTML 3.0 asWedit + extensions//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//AS//DTD HTML 3.0 asWedit + extensions//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//IETF//DTD HTML 2.0 Level 1//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//IETF//DTD HTML 2.0 Level 2//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//IETF//DTD HTML 2.0 Strict Level 1//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//IETF//DTD HTML 2.0 Strict Level 2//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//IETF//DTD HTML 2.0 Strict//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//IETF//DTD HTML 2.0//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//IETF//DTD HTML 2.1E//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//IETF//DTD HTML 3.0//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//IETF//DTD HTML 3.2 Final//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//IETF//DTD HTML 3.2//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//IETF//DTD HTML 3//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//IETF//DTD HTML Level 0//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//IETF//DTD HTML Level 1//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//IETF//DTD HTML Level 2//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//IETF//DTD HTML Level 3//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//IETF//DTD HTML Strict Level 0//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//IETF//DTD HTML Strict Level 1//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//IETF//DTD HTML Strict Level 2//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//IETF//DTD HTML Strict Level 3//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//IETF//DTD HTML Strict//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//IETF//DTD HTML//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//Metrius//DTD Metrius Presentational//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//Microsoft//DTD Internet Explorer 2.0 HTML Strict//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//Microsoft//DTD Internet Explorer 2.0 HTML//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//Microsoft//DTD Internet Explorer 2.0 Tables//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//Microsoft//DTD Internet Explorer 3.0 HTML Strict//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//Microsoft//DTD Internet Explorer 3.0 HTML//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//Microsoft//DTD Internet Explorer 3.0 Tables//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//Netscape Comm. Corp.//DTD HTML//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//Netscape Comm. Corp.//DTD Strict HTML//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//O&apos;Reilly and Associates//DTD HTML 2.0//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//O&apos;Reilly and Associates//DTD HTML Extended 1.0//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//O&apos;Reilly and Associates//DTD HTML Extended Relaxed 1.0//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//SoftQuad Software//DTD HoTMetaL PRO 6.0::19990601::extensions to HTML 4.0//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//SoftQuad//DTD HoTMetaL PRO 4.0::19971010::extensions to HTML 4.0//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//Spyglass//DTD HTML 2.0 Extended//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//SQ//DTD HTML 2.0 HoTMetaL + extensions//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//Sun Microsystems Corp.//DTD HotJava HTML//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//Sun Microsystems Corp.//DTD HotJava Strict HTML//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//W3C//DTD HTML 3 1995-03-24//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//W3C//DTD HTML 3.2 Draft//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//W3C//DTD HTML 3.2 Final//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//W3C//DTD HTML 3.2//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//W3C//DTD HTML 3.2S Draft//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//W3C//DTD HTML 4.0 Frameset//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//W3C//DTD HTML 4.0 Transitional//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//W3C//DTD HTML Experimental 19960712//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//W3C//DTD HTML Experimental 970421//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//W3C//DTD W3 HTML//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//W3O//DTD W3 HTML 3.0//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//WebTechs//DTD Mozilla HTML 2.0//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//WebTechs//DTD Mozilla HTML//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || (systemId.isEmpty() &amp;&amp; publicId.startsWith(&quot;-//W3C//DTD HTML 4.01 Frameset//&quot;, false))
WebCore/html/parser/HTMLConstructionSite.cpp:        || (systemId.isEmpty() &amp;&amp; publicId.startsWith(&quot;-//W3C//DTD HTML 4.01 Transitional//&quot;, false))) {
WebCore/html/parser/HTMLConstructionSite.cpp:    if (publicId.startsWith(&quot;-//W3C//DTD XHTML 1.0 Frameset//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || publicId.startsWith(&quot;-//W3C//DTD XHTML 1.0 Transitional//&quot;, false)
WebCore/html/parser/HTMLConstructionSite.cpp:        || (!systemId.isEmpty() &amp;&amp; publicId.startsWith(&quot;-//W3C//DTD HTML 4.01 Frameset//&quot;, false))
WebCore/html/parser/HTMLConstructionSite.cpp:        || (!systemId.isEmpty() &amp;&amp; publicId.startsWith(&quot;-//W3C//DTD HTML 4.01 Transitional//&quot;, false))) {
WebCore/page/SecurityOrigin.cpp:    if (!urlString.startsWith(&quot;feed&quot;, false))
WebCore/page/SecurityOrigin.cpp:    return urlString.startsWith(&quot;feed://&quot;, false) 
WebCore/page/SecurityOrigin.cpp:        || urlString.startsWith(&quot;feed:http:&quot;, false) || urlString.startsWith(&quot;feed:https:&quot;, false)
WebCore/page/SecurityOrigin.cpp:        || urlString.startsWith(&quot;feeds:http:&quot;, false) || urlString.startsWith(&quot;feeds:https:&quot;, false)
WebCore/page/SecurityOrigin.cpp:        || urlString.startsWith(&quot;feedsearch:http:&quot;, false) || urlString.startsWith(&quot;feedsearch:https:&quot;, false);
WebCore/platform/MIMETypeRegistry.cpp:    return mimeType.startsWith(&quot;application/x-java-applet&quot;, false)
WebCore/platform/MIMETypeRegistry.cpp:        || mimeType.startsWith(&quot;application/x-java-bean&quot;, false)
WebCore/platform/MIMETypeRegistry.cpp:        || mimeType.startsWith(&quot;application/x-java-vm&quot;, false);
WebCore/platform/MIMETypeRegistry.cpp:    if (mimeType.startsWith(&quot;text/&quot;, false))
WebCore/platform/graphics/MediaPlayer.cpp:            &amp;&amp; (parameters.type.startsWith(&quot;video/webm&quot;, false) || parameters.type.startsWith(&quot;video/x-flv&quot;, false)))
WebCore/platform/network/curl/ResourceHandleManager.cpp:    if (key.startsWith(&quot;x-&quot;, /* caseSensitive */ false))
WebCore/platform/network/curl/ResourceHandleManager.cpp:        } else if (header.startsWith(&quot;HTTP&quot;, false)) {
WebCore/xml/XMLHttpRequest.cpp:    if (name.startsWith(&quot;proxy-&quot;, false))
WebCore/xml/XMLHttpRequest.cpp:    if (name.startsWith(&quot;sec-&quot;, false))
WebCore/xml/parser/XMLDocumentParserLibxml2.cpp:    if (urlString.startsWith(&quot;file:///&quot;, false) &amp;&amp; urlString.endsWith(&quot;/etc/catalog&quot;, false))
WebCore/xml/parser/XMLDocumentParserLibxml2.cpp:    if (urlString.startsWith(&quot;http://www.w3.org/TR/xhtml&quot;, false))
WebCore/xml/parser/XMLDocumentParserLibxml2.cpp:    if (urlString.startsWith(&quot;http://www.w3.org/Graphics/SVG&quot;, false))

WebKit/win/Plugins/PluginDatabaseWin.cpp:            if ((!filename.startsWith(&quot;np&quot;, false) || !filename.endsWith(&quot;dll&quot;, false)) &amp;&amp;
WebKit2/NetworkProcess/cache/NetworkCache.cpp:    if (mimeType.startsWith(&quot;video/&quot;, /*caseSensitive*/ false))
WebKit2/NetworkProcess/cache/NetworkCache.cpp:    if (mimeType.startsWith(&quot;audio/&quot;, /*caseSensitive*/ false))

Our goal will be to eliminate the boolean case sensitivity argument to startsWith entirely, soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158832</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-01-26 09:21:42 -0800</bug_when>
    <thetext>Please note a couple points about this for future consideration:

1) Using non-member functions for string operations is forward looking; it lets us overload the same operations for non-class types such as &quot;const char*&quot; or &quot;pointers plus lengths both as separate argument&quot;. So over time we should start moving these to non-member functions if they can be done efficiently without any special private access.

2) We normally overload for the following types: StringView, StringImpl&amp;, StringImpl*, const String&amp;, const char* (for all-ASCII strings). In some cases we also overload for ASCII literals, char (&amp;)[length], and this is one of those. We can also overload for const CString&amp; if it’s handy. In some cases we may also need to overload for const AtomicString&amp;, AtomicStringImpl&amp;, AtomicStringImpl*, and but this is usually not necessary.

There are additional issues only for string operations that sometimes produce a new string and sometimes just return the original string. And additional issues for string operations that return offsets within a string. And additional issues for string operations that can operate on a substring (such as a find operation that takes a start character offset for where to begin searching). For some of these we may even chose to support the operation only on StringView rather than overloading.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1173713</commentid>
    <comment_count>8</comment_count>
      <attachid>269876</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-11 07:10:08 -0800</bug_when>
    <thetext>Comment on attachment 269876
Fully aligning with equalLetters implementation

Clearing flags on attachment: 269876

Committed r198019: &lt;http://trac.webkit.org/changeset/198019&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1173714</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-11 07:10:13 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269774</attachid>
            <date>2016-01-25 11:48:59 -0800</date>
            <delta_ts>2016-01-26 00:41:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-153419-20160125204830.patch</filename>
            <type>text/plain</type>
            <size>9326</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk1NTI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGZjMjg3NjZhM2Q2NDYwNjdhMTAxMWMy
MDNhOWFmN2UzOTQwYzFkZWIuLjBkZDJhNTQ3ZWYxMjQyMTRmODZiNTBlZGYyZWNmNzViNjkwNGIw
YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTYtMDEtMjUgIFlvdWVubiBGYWJsZXQgIDx5b3Vl
bm4uZmFibGV0QGNyZi5jYW5vbi5mcj4KKworICAgICAgICBXVEYgc2hvdWxkIGhhdmUgYSBzaW1p
bGFyIGZ1bmN0aW9uIGFzIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlIHRvIG1hdGNoIGJl
Z2lubmluZyBvZiBzdHJpbmdzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTM0MTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBJbnRyb2R1Y2luZyBzdGFydFdpdGhMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Us
IHRvIGNoZWNrIHRoZSBiZWdpbm5pbmcgb2YgYSBzdHJpbmcuCisKKyAgICAgICAgKiB3dGYvdGV4
dC9TdHJpbmdDb21tb24uaDoKKyAgICAgICAgKFdURjo6ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2VDb21tb25XaXRoTGVuZ3RoKToKKyAgICAgICAgKFdURjo6ZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2VDb21tb25XaXRob3V0TGVuZ3RoKToKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJp
bmdJbXBsLmg6CisgICAgICAgIChXVEY6OnN0YXJ0V2l0aExldHRlcnNJZ25vcmluZ0FTQ0lJQ2Fz
ZSk6CisgICAgICAgICogd3RmL3RleHQvV1RGU3RyaW5nLmg6CisgICAgICAgIChXVEY6OnN0YXJ0
V2l0aExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSk6CisKIDIwMTYtMDEtMjAgIFJ5b3N1a2UgTml3
YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgSFRNTEVsZW1lbnQ6Om5vZGVOYW1lIHNo
b3VsZCBub3QgdXBwZXIgY2FzZSBub24tQVNDSUkgY2hhcmFjdGVycwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGZh
ODk0OGFlMmQ1MzUwYTIwMTI2YWQyM2RiYmNjYzNiYjVhMDQ3MmMuLjM2NTE0NjYyM2FlMDIwNzE1
NDgzMzgwNDQ2ZGI0NzdkMTI4NDNlZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAx
Ni0wMS0yNSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubi5mYWJsZXRAY3JmLmNhbm9uLmZyPgorCisg
ICAgICAgIFdURiBzaG91bGQgaGF2ZSBhIHNpbWlsYXIgZnVuY3Rpb24gYXMgZXF1YWxMZXR0ZXJz
SWdub3JpbmdBU0NJSUNhc2UgdG8gbWF0Y2ggYmVnaW5uaW5nIG9mIHN0cmluZ3MKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MzQxOQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvdmVyZWQgYnkgYWRkZWQg
dW5pdCB0ZXN0cy4KKworICAgICAgICAqIE1vZHVsZXMvZmV0Y2gvRmV0Y2hIZWFkZXJzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmlzRm9yYmlkZGVuSGVhZGVyTmFtZSk6IFVzaW5nIHN0YXJ0V2l0
aExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZS4KKwogMjAxNi0wMS0yMiAgWW91ZW5uIEZhYmxldCAg
PHlvdWVubi5mYWJsZXRAY3JmLmNhbm9uLmZyPgogCiAgICAgICAgIFtGZXRjaCBBUEldIEltcGxl
bWVudCBGZXRjaCBBUEkgSGVhZGVycwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9T
dHJpbmdDb21tb24uaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQ29tbW9uLmgKaW5kZXgg
MDlmNGUzNDlhOTg4Yjg1OGU4NDY4MTg2NTI0Yjk5N2QwZjc0ZTljYi4uYTQ4YjNjN2Y3ZGE0Mzc2
OTE3Y2VjODU0YzQ5ZTcyOGM2YTY4YmQzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4
dC9TdHJpbmdDb21tb24uaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0NvbW1vbi5o
CkBAIC01NTksMjIgKzU1OSwyOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBp
bmxpbmUgYm9vbCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdAogICAgIHJldHVy
biB0cnVlOwogfQogCi0vLyBUaGlzIGlzIGludGVudGlvbmFsbHkgbm90IG1hcmtlZCBpbmxpbmUg
YmVjYXVzZSBpdCdzIHVzZWQgb2Z0ZW4gYW5kIGlzIG5vdCBzcGVlZC1jcml0aWNhbCBlbm91Z2gg
dG8gd2FudCBpdCBpbmxpbmVkIGV2ZXJ5d2hlcmUuCi10ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdD
bGFzcz4gYm9vbCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZUNvbW1vbldpdGhvdXRMZW5n
dGgoY29uc3QgU3RyaW5nQ2xhc3MmIHN0cmluZywgY29uc3QgY2hhciogbG93ZXJjYXNlTGV0dGVy
cykKK3RlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ0NsYXNzPiBib29sIGVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlQ29tbW9uV2l0aExlbmd0aChjb25zdCBTdHJpbmdDbGFzcyYgc3RyaW5nLCBj
b25zdCBjaGFyKiBsb3dlcmNhc2VMZXR0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAjaWYgIUFT
U0VSVF9ESVNBQkxFRAogICAgIEFTU0VSVCgqbG93ZXJjYXNlTGV0dGVycyk7CiAgICAgZm9yIChj
b25zdCBjaGFyKiBsZXR0ZXIgPSBsb3dlcmNhc2VMZXR0ZXJzOyAqbGV0dGVyOyArK2xldHRlcikK
ICAgICAgICAgQVNTRVJUKHRvQVNDSUlMb3dlclVuY2hlY2tlZCgqbGV0dGVyKSA9PSAqbGV0dGVy
KTsKICNlbmRpZgotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKLSAgICBp
ZiAobGVuZ3RoICE9IHN0cmxlbihsb3dlcmNhc2VMZXR0ZXJzKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIEFTU0VSVChzdHJpbmcubGVuZ3RoKCkgPj0gbGVuZ3RoKTsKKwogICAgIGlmIChz
dHJpbmcuaXM4Qml0KCkpCiAgICAgICAgIHJldHVybiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJ
Q2FzZShzdHJpbmcuY2hhcmFjdGVyczgoKSwgbG93ZXJjYXNlTGV0dGVycywgbGVuZ3RoKTsKICAg
ICByZXR1cm4gZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nLmNoYXJhY3RlcnMx
NigpLCBsb3dlcmNhc2VMZXR0ZXJzLCBsZW5ndGgpOwogfQogCisvLyBUaGlzIGlzIGludGVudGlv
bmFsbHkgbm90IG1hcmtlZCBpbmxpbmUgYmVjYXVzZSBpdCdzIHVzZWQgb2Z0ZW4gYW5kIGlzIG5v
dCBzcGVlZC1jcml0aWNhbCBlbm91Z2ggdG8gd2FudCBpdCBpbmxpbmVkIGV2ZXJ5d2hlcmUuCit0
ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdDbGFzcz4gYm9vbCBlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZUNvbW1vbldpdGhvdXRMZW5ndGgoY29uc3QgU3RyaW5nQ2xhc3MmIHN0cmluZywgY29u
c3QgY2hhciogbG93ZXJjYXNlTGV0dGVycykKK3sKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJp
bmcubGVuZ3RoKCk7CisgICAgaWYgKGxlbmd0aCAhPSBzdHJsZW4obG93ZXJjYXNlTGV0dGVycykp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZXF1YWxMZXR0ZXJzSWdub3JpbmdB
U0NJSUNhc2VDb21tb25XaXRoTGVuZ3RoKHN0cmluZywgbG93ZXJjYXNlTGV0dGVycywgbGVuZ3Ro
KTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nQ2xhc3MsIHVuc2lnbmVkIGxlbmd0aD4g
aW5saW5lIGJvb2wgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2VDb21tb24oY29uc3QgU3Ry
aW5nQ2xhc3MmIHN0cmluZywgY29uc3QgY2hhciAoJmxvd2VyY2FzZUxldHRlcnMpW2xlbmd0aF0p
CiB7CiAgICAgLy8gRG9uJ3QgYWN0dWFsbHkgdXNlIHRoZSBsZW5ndGg7IHdlIGFyZSBjaG9vc2lu
ZyBjb2RlIHNpemUgb3ZlciBzcGVlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQv
U3RyaW5nSW1wbC5oIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKaW5kZXggY2Ey
OTNjNmU2NmFmNWQ2MWE4MGIyNDZmZDBiNTkxODEyMjczOTEwMy4uMGE3M2E5MGY1MTI3Yzk1NGIw
ZTRmMTlkMTRiNzdiOWRhNjQ0Yzk5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9T
dHJpbmdJbXBsLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKQEAgLTEx
OTAsNiArMTE5MCwyMCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxSZWZQdHI8U3Ry
aW5nSW1wbD4+IHsKICAgICB0eXBlZGVmIFN0cmluZ0hhc2ggSGFzaDsKIH07CiAKK3RlbXBsYXRl
PHVuc2lnbmVkIGxlbmd0aD4gaW5saW5lIGJvb2wgc3RhcnRXaXRoTGV0dGVyc0lnbm9yaW5nQVND
SUlDYXNlKGNvbnN0IFN0cmluZ0ltcGwmIHN0cmluZywgY29uc3QgY2hhciAoJmxvd2VyY2FzZUxl
dHRlcnMpW2xlbmd0aF0pCit7CisgICAgaWYgKGxlbmd0aCA9PSAxKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBpZiAoc3RyaW5nLmxlbmd0aCgpIDwgKGxlbmd0aCAtIDEpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlQ29t
bW9uV2l0aExlbmd0aChzdHJpbmcsIGxvd2VyY2FzZUxldHRlcnMsIGxlbmd0aCAtIDEpOworfQor
Cit0ZW1wbGF0ZTx1bnNpZ25lZCBsZW5ndGg+IGlubGluZSBib29sIHN0YXJ0V2l0aExldHRlcnNJ
Z25vcmluZ0FTQ0lJQ2FzZShjb25zdCBTdHJpbmdJbXBsKiBzdHJpbmcsIGNvbnN0IGNoYXIgKCZs
b3dlcmNhc2VMZXR0ZXJzKVtsZW5ndGhdKQoreworICAgIHJldHVybiBzdHJpbmcgJiYgc3RhcnRX
aXRoTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKCpzdHJpbmcsIGxvd2VyY2FzZUxldHRlcnMpOwor
fQorCiB0ZW1wbGF0ZTx1bnNpZ25lZCBsZW5ndGg+IGlubGluZSBib29sIGVxdWFsTGV0dGVyc0ln
bm9yaW5nQVNDSUlDYXNlKGNvbnN0IFN0cmluZ0ltcGwmIHN0cmluZywgY29uc3QgY2hhciAoJmxv
d2VyY2FzZUxldHRlcnMpW2xlbmd0aF0pCiB7CiAgICAgcmV0dXJuIGVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlQ29tbW9uKHN0cmluZywgbG93ZXJjYXNlTGV0dGVycyk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oIGIvU291cmNlL1dURi93dGYvdGV4dC9X
VEZTdHJpbmcuaAppbmRleCAzY2EwZmJmMjAwZDlhNTgxNGU1MjcyZDYxYTVmYjI0Mjc0M2FjNDlm
Li45NjFiYzc3YjJmNWRkOGNhNzUwMTlkMDlkMjZmZWRlZjg5MjM0MWE0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQv
V1RGU3RyaW5nLmgKQEAgLTUxNyw2ICs1MTcsNyBAQCBpbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5n
QVNDSUlDYXNlKGNvbnN0IFN0cmluZyYgYSwgY29uc3QgU3RyaW5nJiBiKSB7IHJldHVybiBlcQog
dGVtcGxhdGU8dW5zaWduZWQgY2hhcmFjdGVyc0NvdW50PiBpbmxpbmUgYm9vbCBlcXVhbElnbm9y
aW5nQVNDSUlDYXNlKGNvbnN0IFN0cmluZyYgYSwgY29uc3QgY2hhciAoJmIpW2NoYXJhY3RlcnND
b3VudF0pIHsgcmV0dXJuIGVxdWFsSWdub3JpbmdBU0NJSUNhc2U8Y2hhcmFjdGVyc0NvdW50Pihh
LmltcGwoKSwgYik7IH0KIAogdGVtcGxhdGU8dW5zaWduZWQgbGVuZ3RoPiBib29sIGVxdWFsTGV0
dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IFN0cmluZyYsIGNvbnN0IGNoYXIgKCZsb3dlcmNh
c2VMZXR0ZXJzKVtsZW5ndGhdKTsKK3RlbXBsYXRlPHVuc2lnbmVkIGxlbmd0aD4gYm9vbCBzdGFy
dFdpdGhMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgU3RyaW5nJiwgY29uc3QgY2hhciAo
Jmxvd2VyY2FzZUxldHRlcnMpW2xlbmd0aF0pOwogCiBpbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5n
TnVsbGl0eShjb25zdCBTdHJpbmcmIGEsIGNvbnN0IFN0cmluZyYgYikgeyByZXR1cm4gZXF1YWxJ
Z25vcmluZ051bGxpdHkoYS5pbXBsKCksIGIuaW1wbCgpKTsgfQogdGVtcGxhdGU8c2l6ZV90IGlu
bGluZUNhcGFjaXR5PiBpbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nTnVsbGl0eShjb25zdCBWZWN0
b3I8VUNoYXIsIGlubGluZUNhcGFjaXR5PiYgYSwgY29uc3QgU3RyaW5nJiBiKSB7IHJldHVybiBl
cXVhbElnbm9yaW5nTnVsbGl0eShhLCBiLmltcGwoKSk7IH0KQEAgLTcxOCw2ICs3MTksMTEgQEAg
dGVtcGxhdGU8dW5zaWduZWQgbGVuZ3RoPiBpbmxpbmUgYm9vbCBlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZShjb25zdCBTdHJpbmcKICAgICByZXR1cm4gZXF1YWxMZXR0ZXJzSWdub3JpbmdB
U0NJSUNhc2Uoc3RyaW5nLmltcGwoKSwgbG93ZXJjYXNlTGV0dGVycyk7CiB9CiAKK3RlbXBsYXRl
PHVuc2lnbmVkIGxlbmd0aD4gaW5saW5lIGJvb2wgc3RhcnRXaXRoTGV0dGVyc0lnbm9yaW5nQVND
SUlDYXNlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBjaGFyICgmbG93ZXJjYXNlTGV0dGVy
cylbbGVuZ3RoXSkKK3sKKyAgICByZXR1cm4gc3RhcnRXaXRoTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKHN0cmluZy5pbXBsKCksIGxvd2VyY2FzZUxldHRlcnMpOworfQorCiB9CiAKIHVzaW5nIFdU
Rjo6Q1N0cmluZzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0
Y2hIZWFkZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hIZWFkZXJz
LmNwcAppbmRleCBkZjkxMDIzNmRlNjgyODA1ZTNiZTI2YmJmMTRkNWE1NTk0NmRhZmIwLi42MDQ2
YzY3YTgzMTMzMzZjZDM4ODYxNmQ0MTQzMWE0YjFhOTg3MTZiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoSGVhZGVycy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9mZXRjaC9GZXRjaEhlYWRlcnMuY3BwCkBAIC03NCw3ICs3NCw3IEBAIHN0YXRp
YyBib29sIGlzRm9yYmlkZGVuSGVhZGVyTmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gbmFtZS5zdGFydHNXaXRo
SWdub3JpbmdBU0NJSUNhc2UoQVNDSUlMaXRlcmFsKCJTZWMtIikpIHx8IG5hbWUuc3RhcnRzV2l0
aElnbm9yaW5nQVNDSUlDYXNlKEFTQ0lJTGl0ZXJhbCgiUHJveHktIikpOworICAgIHJldHVybiBz
dGFydFdpdGhMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgInNlYy0iKSB8fCBzdGFydFdp
dGhMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgInByb3h5LSIpOwogfQogCiBzdGF0aWMg
Ym9vbCBpc0ZvcmJpZGRlblJlc3BvbnNlSGVhZGVyTmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCmRp
ZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMmU2N2Jl
ZDBkOWVlYzhiZmNmNjFjZjlhMDMxYWI3Y2YwNzg3OWFjMS4uODliZDNlNDI5MjNiOTc4NWJhYThi
MjNhOTVjZWEzZGFiYzIyNTJkZCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rv
b2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE2LTAxLTI1ICBZb3Vlbm4gRmFibGV0
ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CisKKyAgICAgICAgV1RGIHNob3VsZCBoYXZl
IGEgc2ltaWxhciBmdW5jdGlvbiBhcyBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSB0byBt
YXRjaCBiZWdpbm5pbmcgb2Ygc3RyaW5ncworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTUzNDE5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdPcGVyYXRv
cnMuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6IEFkZGluZyB0ZXN0IGNhc2Ug
Zm9yIHN0YXJ0V2l0aExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZS4KKworCiAyMDE2LTAxLTI0ICBE
YW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkZWQgcHJvamVjdC54
Y3dvcmtzcGFjZSBhbmQgeGN1c2VyZGF0YSB0byB0aGlzIHByb2plY3TigJlzIHN2bjppZ25vcmUu
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdJbXBsLmNw
cCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmluZ0ltcGwuY3BwCmluZGV4IDc1
ZmFkZjhjNDM3YTdkZGNiNjgzZDQ3NGZmNjViZjIwMTU0ZTQ5MDMuLjMzYTdmZGIyOTY2ZmVlZDdh
ZmUxNmZlYmNiYmQ2YTk0MGIxOTlkMjUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL1N0cmluZ0ltcGwuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL1N0cmluZ0ltcGwuY3BwCkBAIC00MjMsNiArNDIzLDIxIEBAIFRFU1QoV1RGLCBTdHJpbmdJ
bXBsU3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlV2l0aEVtcHR5KQogICAgIEFTU0VSVF9GQUxT
RShlbXB0eS0+c3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKCpyZWZlcmVuY2UuZ2V0KCkpKTsK
IH0KIAorVEVTVChXVEYsIFN0YXJ0V2l0aExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSkKK3sKKyAg
ICBTdHJpbmcgc3RyaW5nKCJUZXN0IHRFU1QiKTsKKyAgICBBU1NFUlRfVFJVRShzdGFydFdpdGhM
ZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nLCAidGVzdCB0IikpOworICAgIEFTU0VSVF9U
UlVFKHN0YXJ0V2l0aExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmcsICJ0ZXN0IHRlIikp
OworICAgIEFTU0VSVF9UUlVFKHN0YXJ0V2l0aExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzdHJp
bmcsICJ0ZXN0IHRlc3QiKSk7CisgICAgQVNTRVJUX0ZBTFNFKHN0YXJ0V2l0aExldHRlcnNJZ25v
cmluZ0FTQ0lJQ2FzZShzdHJpbmcsICJ0ZXN0IHRleCIpKTsKKworICAgIEFTU0VSVF9UUlVFKHN0
YXJ0V2l0aExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmcsICIiKSk7CisgICAgQVNTRVJU
X1RSVUUoc3RhcnRXaXRoTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKFN0cmluZygiIiksICIiKSk7
CisKKyAgICBBU1NFUlRfRkFMU0Uoc3RhcnRXaXRoTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKFN0
cmluZygpLCAidCIpKTsKKyAgICBBU1NFUlRfRkFMU0Uoc3RhcnRXaXRoTGV0dGVyc0lnbm9yaW5n
QVNDSUlDYXNlKFN0cmluZygpLCAiIikpOworfQorCiBURVNUKFdURiwgU3RyaW5nSW1wbEVuZHNX
aXRoSWdub3JpbmdBU0NJSUNhc2VCYXNpYykKIHsKICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVm
ZXJlbmNlID0gc3RyaW5nRnJvbVVURjgoIljDiUNiQSIpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269863</attachid>
            <date>2016-01-26 00:41:10 -0800</date>
            <delta_ts>2016-01-26 03:35:36 -0800</delta_ts>
            <desc>Updated according review</desc>
            <filename>bug-153419-20160126094043.patch</filename>
            <type>text/plain</type>
            <size>9711</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk1NTg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDY4YzhhZjU4MTFhMjY4ZWY3YjU3YWEz
ZTAwM2Q3YWNhZjIxNDQwYWUuLmI2MGVmMjg5ZWEwMDkzYTNhNzIzNjJjODA1OTZjYzFlODZmNDgz
N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTYtMDEtMjUgIFlvdWVubiBGYWJsZXQgIDx5b3Vl
bm4uZmFibGV0QGNyZi5jYW5vbi5mcj4KKworICAgICAgICBXVEYgc2hvdWxkIGhhdmUgYSBzaW1p
bGFyIGZ1bmN0aW9uIGFzIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlIHRvIG1hdGNoIGJl
Z2lubmluZyBvZiBzdHJpbmdzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTM0MTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBJbnRyb2R1Y2luZyBzdGFydHNXaXRoTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
LCB0byBjaGVjayB0aGUgYmVnaW5uaW5nIG9mIGEgc3RyaW5nLgorCisgICAgICAgICogd3RmL3Rl
eHQvU3RyaW5nQ29tbW9uLmg6CisgICAgICAgIChXVEY6OmlzUHJlZml4ZWRXaXRoTGV0dGVyc0ln
bm9yaW5nQVNDSUlDYXNlQ29tbW9uKTogQ29kZSBtb3ZlZCBmcm9tIFdURjo6ZXF1YWxMZXR0ZXJz
SWdub3JpbmdBU0NJSUNhc2VDb21tb25XaXRob3V0TGVuZ3RoLgorICAgICAgICAoV1RGOjplcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZUNvbW1vbldpdGhvdXRMZW5ndGgpOiBNYWtpbmcgdXNl
IG9mIFdURjo6aXNQcmVmaXhlZFdpdGhMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2VDb21tb24uCisg
ICAgICAgICogd3RmL3RleHQvU3RyaW5nSW1wbC5oOgorICAgICAgICAoV1RGOjpzdGFydHNXaXRo
TGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKToKKyAgICAgICAgKiB3dGYvdGV4dC9XVEZTdHJpbmcu
aDoKKyAgICAgICAgKFdURjo6c3RhcnRzV2l0aExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSk6CisK
IDIwMTYtMDEtMjUgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4K
IAogICAgICAgICBbV2luXSBDb3B5IGZvcndhcmRpbmcgaGVhZGVycyBiZWZvcmUgYnVpbGRpbmcg
YSBwcm9qZWN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODNjNmNhYTkyM2IyOWQyY2FjMmYxMGJiOTlkMGQ5ODBk
ODFmNWUzYy4uZTZiZWMxMzBkYTgxMzYxNWUzMzhjZDRhOTlhMzAxNmMzMmY5Y2M4OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwpAQCAtMSw1ICsxLDE3IEBACiAyMDE2LTAxLTI1ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5u
LmZhYmxldEBjcmYuY2Fub24uZnI+CiAKKyAgICAgICAgV1RGIHNob3VsZCBoYXZlIGEgc2ltaWxh
ciBmdW5jdGlvbiBhcyBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSB0byBtYXRjaCBiZWdp
bm5pbmcgb2Ygc3RyaW5ncworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTUzNDE5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQ292ZXJlZCBieSBhZGRlZCB1bmludCB0ZXN0cy4KKworICAgICAgICAqIE1vZHVs
ZXMvZmV0Y2gvRmV0Y2hIZWFkZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzRm9yYmlkZGVu
SGVhZGVyTmFtZSk6IFVzaW5nIHN0YXJ0V2l0aExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZS4KKwor
MjAxNi0wMS0yNSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubi5mYWJsZXRAY3JmLmNhbm9uLmZyPgor
CiAgICAgICAgIFdlYkNvcmVKU0J1aWx0aW5zIGRvIG5vdCB1c2UgdG8gZG8gY29uZGl0aW9uYWwg
aW5jbHVkZQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTUzMzA2CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQ29tbW9uLmgg
Yi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0NvbW1vbi5oCmluZGV4IDA5ZjRlMzQ5YTk4OGI4
NThlODQ2ODE4NjUyNGI5OTdkMGY3NGU5Y2IuLjM0ODU3Mjc3ZjA4ZGZmNTUyMjY1NzU3NTczNTRi
MWIzNmU3ODE3MDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQ29tbW9u
LmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdDb21tb24uaApAQCAtNTU5LDIyICs1
NTksMjkgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gaW5saW5lIGJvb2wgZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
Ly8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IG5vdCBtYXJrZWQgaW5saW5lIGJlY2F1c2UgaXQncyB1
c2VkIG9mdGVuIGFuZCBpcyBub3Qgc3BlZWQtY3JpdGljYWwgZW5vdWdoIHRvIHdhbnQgaXQgaW5s
aW5lZCBldmVyeXdoZXJlLgotdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nQ2xhc3M+IGJvb2wgZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2VDb21tb25XaXRob3V0TGVuZ3RoKGNvbnN0IFN0cmlu
Z0NsYXNzJiBzdHJpbmcsIGNvbnN0IGNoYXIqIGxvd2VyY2FzZUxldHRlcnMpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBTdHJpbmdDbGFzcz4gYm9vbCBpbmxpbmUgaXNQcmVmaXhlZFdpdGhMZXR0ZXJzSWdu
b3JpbmdBU0NJSUNhc2VDb21tb24oY29uc3QgU3RyaW5nQ2xhc3MmIHN0cmluZywgY29uc3QgY2hh
ciogbG93ZXJjYXNlTGV0dGVycywgdW5zaWduZWQgbGVuZ3RoKQogewogI2lmICFBU1NFUlRfRElT
QUJMRUQKICAgICBBU1NFUlQoKmxvd2VyY2FzZUxldHRlcnMpOwogICAgIGZvciAoY29uc3QgY2hh
ciogbGV0dGVyID0gbG93ZXJjYXNlTGV0dGVyczsgKmxldHRlcjsgKytsZXR0ZXIpCiAgICAgICAg
IEFTU0VSVCh0b0FTQ0lJTG93ZXJVbmNoZWNrZWQoKmxldHRlcikgPT0gKmxldHRlcik7CiAjZW5k
aWYKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgaWYgKGxlbmd0
aCAhPSBzdHJsZW4obG93ZXJjYXNlTGV0dGVycykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBBU1NFUlQoc3RyaW5nLmxlbmd0aCgpID49IGxlbmd0aCk7CisKICAgICBpZiAoc3RyaW5nLmlz
OEJpdCgpKQogICAgICAgICByZXR1cm4gZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc3Ry
aW5nLmNoYXJhY3RlcnM4KCksIGxvd2VyY2FzZUxldHRlcnMsIGxlbmd0aCk7CiAgICAgcmV0dXJu
IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgbG93
ZXJjYXNlTGV0dGVycywgbGVuZ3RoKTsKIH0KIAorLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IG5v
dCBtYXJrZWQgaW5saW5lIGJlY2F1c2UgaXQncyB1c2VkIG9mdGVuIGFuZCBpcyBub3Qgc3BlZWQt
Y3JpdGljYWwgZW5vdWdoIHRvIHdhbnQgaXQgaW5saW5lZCBldmVyeXdoZXJlLgordGVtcGxhdGU8
dHlwZW5hbWUgU3RyaW5nQ2xhc3M+IGJvb2wgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2VD
b21tb25XaXRob3V0TGVuZ3RoKGNvbnN0IFN0cmluZ0NsYXNzJiBzdHJpbmcsIGNvbnN0IGNoYXIq
IGxvd2VyY2FzZUxldHRlcnMpCit7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0
aCgpOworICAgIGlmIChsZW5ndGggIT0gc3RybGVuKGxvd2VyY2FzZUxldHRlcnMpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGlzUHJlZml4ZWRXaXRoTGV0dGVyc0lnbm9yaW5n
QVNDSUlDYXNlQ29tbW9uKHN0cmluZywgbG93ZXJjYXNlTGV0dGVycywgbGVuZ3RoKTsKK30KKwog
dGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nQ2xhc3MsIHVuc2lnbmVkIGxlbmd0aD4gaW5saW5lIGJv
b2wgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2VDb21tb24oY29uc3QgU3RyaW5nQ2xhc3Mm
IHN0cmluZywgY29uc3QgY2hhciAoJmxvd2VyY2FzZUxldHRlcnMpW2xlbmd0aF0pCiB7CiAgICAg
Ly8gRG9uJ3QgYWN0dWFsbHkgdXNlIHRoZSBsZW5ndGg7IHdlIGFyZSBjaG9vc2luZyBjb2RlIHNp
emUgb3ZlciBzcGVlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1w
bC5oIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKaW5kZXggY2EyOTNjNmU2NmFm
NWQ2MWE4MGIyNDZmZDBiNTkxODEyMjczOTEwMy4uZWI2YTJjODBlMDk2OTc5YjAwYWUzZjdiMWI2
MjBhZDI3ZDg2ZjkwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBs
LmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKQEAgLTExOTAsNiArMTE5
MCwyMiBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxSZWZQdHI8U3RyaW5nSW1wbD4+
IHsKICAgICB0eXBlZGVmIFN0cmluZ0hhc2ggSGFzaDsKIH07CiAKK3RlbXBsYXRlPHVuc2lnbmVk
IGxlbmd0aD4gYm9vbCBzdGFydHNXaXRoTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IFN0
cmluZ0ltcGwmIHN0cmluZywgY29uc3QgY2hhciAoJmxvd2VyY2FzZUxldHRlcnMpW2xlbmd0aF0p
Cit7CisgICAgLy8gRG9uJ3QgYWN0dWFsbHkgdXNlIHRoZSBsZW5ndGg7IHdlIGFyZSBjaG9vc2lu
ZyBjb2RlIHNpemUgb3ZlciBzcGVlZC4KKyAgICBzaXplX3QgcHJlZml4TGVuZ3RoID0gc3RybGVu
KGxvd2VyY2FzZUxldHRlcnMpOworICAgIGlmICghcHJlZml4TGVuZ3RoKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBpZiAoc3RyaW5nLmxlbmd0aCgpIDwgcHJlZml4TGVuZ3RoKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGlzUHJlZml4ZWRXaXRoTGV0dGVyc0lnbm9yaW5n
QVNDSUlDYXNlQ29tbW9uKHN0cmluZywgbG93ZXJjYXNlTGV0dGVycywgcHJlZml4TGVuZ3RoKTsK
K30KKwordGVtcGxhdGU8dW5zaWduZWQgbGVuZ3RoPiBpbmxpbmUgYm9vbCBzdGFydHNXaXRoTGV0
dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IFN0cmluZ0ltcGwqIHN0cmluZywgY29uc3QgY2hh
ciAoJmxvd2VyY2FzZUxldHRlcnMpW2xlbmd0aF0pCit7CisgICAgcmV0dXJuIHN0cmluZyAmJiBz
dGFydHNXaXRoTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKCpzdHJpbmcsIGxvd2VyY2FzZUxldHRl
cnMpOworfQorCiB0ZW1wbGF0ZTx1bnNpZ25lZCBsZW5ndGg+IGlubGluZSBib29sIGVxdWFsTGV0
dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IFN0cmluZ0ltcGwmIHN0cmluZywgY29uc3QgY2hh
ciAoJmxvd2VyY2FzZUxldHRlcnMpW2xlbmd0aF0pCiB7CiAgICAgcmV0dXJuIGVxdWFsTGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlQ29tbW9uKHN0cmluZywgbG93ZXJjYXNlTGV0dGVycyk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oIGIvU291cmNlL1dURi93dGYv
dGV4dC9XVEZTdHJpbmcuaAppbmRleCAzY2EwZmJmMjAwZDlhNTgxNGU1MjcyZDYxYTVmYjI0Mjc0
M2FjNDlmLi44NzdlMGM3MjRjNGNlNDA2NDMzYTliNThlNDc3NGY4ZWVkZDgyYjFjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L3RleHQvV1RGU3RyaW5nLmgKQEAgLTUxNyw2ICs1MTcsNyBAQCBpbmxpbmUgYm9vbCBlcXVhbEln
bm9yaW5nQVNDSUlDYXNlKGNvbnN0IFN0cmluZyYgYSwgY29uc3QgU3RyaW5nJiBiKSB7IHJldHVy
biBlcQogdGVtcGxhdGU8dW5zaWduZWQgY2hhcmFjdGVyc0NvdW50PiBpbmxpbmUgYm9vbCBlcXVh
bElnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IFN0cmluZyYgYSwgY29uc3QgY2hhciAoJmIpW2NoYXJh
Y3RlcnNDb3VudF0pIHsgcmV0dXJuIGVxdWFsSWdub3JpbmdBU0NJSUNhc2U8Y2hhcmFjdGVyc0Nv
dW50PihhLmltcGwoKSwgYik7IH0KIAogdGVtcGxhdGU8dW5zaWduZWQgbGVuZ3RoPiBib29sIGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IFN0cmluZyYsIGNvbnN0IGNoYXIgKCZs
b3dlcmNhc2VMZXR0ZXJzKVtsZW5ndGhdKTsKK3RlbXBsYXRlPHVuc2lnbmVkIGxlbmd0aD4gYm9v
bCBzdGFydHNXaXRoTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IFN0cmluZyYsIGNvbnN0
IGNoYXIgKCZsb3dlcmNhc2VMZXR0ZXJzKVtsZW5ndGhdKTsKIAogaW5saW5lIGJvb2wgZXF1YWxJ
Z25vcmluZ051bGxpdHkoY29uc3QgU3RyaW5nJiBhLCBjb25zdCBTdHJpbmcmIGIpIHsgcmV0dXJu
IGVxdWFsSWdub3JpbmdOdWxsaXR5KGEuaW1wbCgpLCBiLmltcGwoKSk7IH0KIHRlbXBsYXRlPHNp
emVfdCBpbmxpbmVDYXBhY2l0eT4gaW5saW5lIGJvb2wgZXF1YWxJZ25vcmluZ051bGxpdHkoY29u
c3QgVmVjdG9yPFVDaGFyLCBpbmxpbmVDYXBhY2l0eT4mIGEsIGNvbnN0IFN0cmluZyYgYikgeyBy
ZXR1cm4gZXF1YWxJZ25vcmluZ051bGxpdHkoYSwgYi5pbXBsKCkpOyB9CkBAIC03MTgsNiArNzE5
LDExIEBAIHRlbXBsYXRlPHVuc2lnbmVkIGxlbmd0aD4gaW5saW5lIGJvb2wgZXF1YWxMZXR0ZXJz
SWdub3JpbmdBU0NJSUNhc2UoY29uc3QgU3RyaW5nCiAgICAgcmV0dXJuIGVxdWFsTGV0dGVyc0ln
bm9yaW5nQVNDSUlDYXNlKHN0cmluZy5pbXBsKCksIGxvd2VyY2FzZUxldHRlcnMpOwogfQogCit0
ZW1wbGF0ZTx1bnNpZ25lZCBsZW5ndGg+IGlubGluZSBib29sIHN0YXJ0c1dpdGhMZXR0ZXJzSWdu
b3JpbmdBU0NJSUNhc2UoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IGNoYXIgKCZsb3dlcmNh
c2VMZXR0ZXJzKVtsZW5ndGhdKQoreworICAgIHJldHVybiBzdGFydHNXaXRoTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKHN0cmluZy5pbXBsKCksIGxvd2VyY2FzZUxldHRlcnMpOworfQorCiB9CiAK
IHVzaW5nIFdURjo6Q1N0cmluZzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
ZmV0Y2gvRmV0Y2hIZWFkZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0
Y2hIZWFkZXJzLmNwcAppbmRleCBkZjkxMDIzNmRlNjgyODA1ZTNiZTI2YmJmMTRkNWE1NTk0NmRh
ZmIwLi45MGMzNzI3N2E5OTk2ZDI1NGU3MWFjNDM3MWRlOTBkMDdmOWEyNWQ0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoSGVhZGVycy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEhlYWRlcnMuY3BwCkBAIC03NCw3ICs3NCw3
IEBAIHN0YXRpYyBib29sIGlzRm9yYmlkZGVuSGVhZGVyTmFtZShjb25zdCBTdHJpbmcmIG5hbWUp
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gbmFtZS5z
dGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoQVNDSUlMaXRlcmFsKCJTZWMtIikpIHx8IG5hbWUu
c3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKEFTQ0lJTGl0ZXJhbCgiUHJveHktIikpOworICAg
IHJldHVybiBzdGFydHNXaXRoTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG5hbWUsICJzZWMtIikg
fHwgc3RhcnRzV2l0aExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCAicHJveHktIik7CiB9
CiAKIHN0YXRpYyBib29sIGlzRm9yYmlkZGVuUmVzcG9uc2VIZWFkZXJOYW1lKGNvbnN0IFN0cmlu
ZyYgbmFtZSkKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwpp
bmRleCAzOGIyZDkwYjNmNWM1OGNhYWY1OTUyOTZkOTgwZjE1MDk1OTM1ODFhLi5lZWI4MTY5ZjMz
YmFmODBkMzM2MDI5MGZkNjk1YmE3YzcwZmQ3YzFkIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VM
b2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTYtMDEtMjUgIFlv
dWVubiBGYWJsZXQgIDx5b3Vlbm4uZmFibGV0QGNyZi5jYW5vbi5mcj4KKworICAgICAgICBXVEYg
c2hvdWxkIGhhdmUgYSBzaW1pbGFyIGZ1bmN0aW9uIGFzIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVND
SUlDYXNlIHRvIG1hdGNoIGJlZ2lubmluZyBvZiBzdHJpbmdzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTM0MTkKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0
cmluZ09wZXJhdG9ycy5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKTogQWRkaW5n
IHRlc3QgY2FzZSBmb3Igc3RhcnRXaXRoTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlLgorCisKIDIw
MTYtMDEtMjUgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAg
ICAgR2l2ZSB0aGUgbGF5b3V0IHRlc3QgcmVzdWx0cyBmaWxlIGEgPHRpdGxlPiBzaG93aW5nIHRo
ZSBkYXRlIGFuZCB0aW1lIHRoZSB0ZXN0cyB3ZXJlIHJ1bgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nSW1wbC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9TdHJpbmdJbXBsLmNwcAppbmRleCA3NWZhZGY4YzQzN2E3ZGRjYjY4M2Q0NzRm
ZjY1YmYyMDE1NGU0OTAzLi5kNDM0NzhjZDkwYTg4MDI5NzUzM2U4ZGEyODJhOTE3Yzc4MTJiMWIx
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdJbXBsLmNw
cAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdJbXBsLmNwcApAQCAt
NDIzLDYgKzQyMywyMSBAQCBURVNUKFdURiwgU3RyaW5nSW1wbFN0YXJ0c1dpdGhJZ25vcmluZ0FT
Q0lJQ2FzZVdpdGhFbXB0eSkKICAgICBBU1NFUlRfRkFMU0UoZW1wdHktPnN0YXJ0c1dpdGhJZ25v
cmluZ0FTQ0lJQ2FzZSgqcmVmZXJlbmNlLmdldCgpKSk7CiB9CiAKK1RFU1QoV1RGLCBTdGFydHNX
aXRoTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKQoreworICAgIFN0cmluZyBzdHJpbmcoIlRlc3Qg
dEVTVCIpOworICAgIEFTU0VSVF9UUlVFKHN0YXJ0c1dpdGhMZXR0ZXJzSWdub3JpbmdBU0NJSUNh
c2Uoc3RyaW5nLCAidGVzdCB0IikpOworICAgIEFTU0VSVF9UUlVFKHN0YXJ0c1dpdGhMZXR0ZXJz
SWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nLCAidGVzdCB0ZSIpKTsKKyAgICBBU1NFUlRfVFJVRShz
dGFydHNXaXRoTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHN0cmluZywgInRlc3QgdGVzdCIpKTsK
KyAgICBBU1NFUlRfRkFMU0Uoc3RhcnRzV2l0aExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzdHJp
bmcsICJ0ZXN0IHRleCIpKTsKKworICAgIEFTU0VSVF9UUlVFKHN0YXJ0c1dpdGhMZXR0ZXJzSWdu
b3JpbmdBU0NJSUNhc2Uoc3RyaW5nLCAiIikpOworICAgIEFTU0VSVF9UUlVFKHN0YXJ0c1dpdGhM
ZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoU3RyaW5nKCIiKSwgIiIpKTsKKworICAgIEFTU0VSVF9G
QUxTRShzdGFydHNXaXRoTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKFN0cmluZygpLCAidCIpKTsK
KyAgICBBU1NFUlRfRkFMU0Uoc3RhcnRzV2l0aExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShTdHJp
bmcoKSwgIiIpKTsKK30KKwogVEVTVChXVEYsIFN0cmluZ0ltcGxFbmRzV2l0aElnbm9yaW5nQVND
SUlDYXNlQmFzaWMpCiB7CiAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlZmVyZW5jZSA9IHN0cmlu
Z0Zyb21VVEY4KCJYw4lDYkEiKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269876</attachid>
            <date>2016-01-26 03:35:41 -0800</date>
            <delta_ts>2016-03-11 07:10:08 -0800</delta_ts>
            <desc>Fully aligning with equalLetters implementation</desc>
            <filename>bug-153419-20160126123514.patch</filename>
            <type>text/plain</type>
            <size>10629</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk1NTg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDY4YzhhZjU4MTFhMjY4ZWY3YjU3YWEz
ZTAwM2Q3YWNhZjIxNDQwYWUuLmNjNGMxMzMwZjY2MzBlNmJhYzA5ZDc2MjcxNmViY2ZkZGFiMmE2
MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTYtMDEtMjUgIFlvdWVubiBGYWJsZXQgIDx5b3Vl
bm4uZmFibGV0QGNyZi5jYW5vbi5mcj4KKworICAgICAgICBXVEYgc2hvdWxkIGhhdmUgYSBzaW1p
bGFyIGZ1bmN0aW9uIGFzIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlIHRvIG1hdGNoIGJl
Z2lubmluZyBvZiBzdHJpbmdzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTM0MTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBJbnRyb2R1Y2luZyBzdGFydHNXaXRoTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
LCB0byBjaGVjayB0aGUgYmVnaW5uaW5nIG9mIGEgc3RyaW5nLgorICAgICAgICBNb3Zpbmcgc29t
ZSBjb2RlIGZyb20gV1RGOjplcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZUNvbW1vbldpdGhv
dXRMZW5ndGggaW4KKyAgICAgICAgV1RGOjpoYXNQcmVmaXhXaXRoTGV0dGVyc0lnbm9yaW5nQVND
SUlDYXNlQ29tbW9uIHRvIGVuYWJsZSByZXVzZSBpbgorICAgICAgICBXVEY6OnN0YXJ0c1dpdGhM
ZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2VDb21tb24uCisKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJp
bmdDb21tb24uaDoKKyAgICAgICAgKFdURjo6aGFzUHJlZml4V2l0aExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZUNvbW1vbik6CisgICAgICAgIChXVEY6OmVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlQ29tbW9uV2l0aG91dExlbmd0aCk6CisgICAgICAgIChXVEY6OnN0YXJ0c1dpdGhMZXR0ZXJz
SWdub3JpbmdBU0NJSUNhc2VDb21tb25XaXRob3V0TGVuZ3RoKToKKyAgICAgICAgKFdURjo6c3Rh
cnRzV2l0aExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZUNvbW1vbik6CisgICAgICAgICogd3RmL3Rl
eHQvU3RyaW5nSW1wbC5oOgorICAgICAgICAoV1RGOjpzdGFydHNXaXRoTGV0dGVyc0lnbm9yaW5n
QVNDSUlDYXNlKToKKyAgICAgICAgKiB3dGYvdGV4dC9XVEZTdHJpbmcuaDoKKyAgICAgICAgKFdU
Rjo6c3RhcnRzV2l0aExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSk6CisKIDIwMTYtMDEtMjUgIEFs
ZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBbV2lu
XSBDb3B5IGZvcndhcmRpbmcgaGVhZGVycyBiZWZvcmUgYnVpbGRpbmcgYSBwcm9qZWN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggODNjNmNhYTkyM2IyOWQyY2FjMmYxMGJiOTlkMGQ5ODBkODFmNWUzYy4uNjk4OWI4
NjVlZjc2OWI3ODhhYTUwNjdkZTdlYTI3ZDU1MWZkMDExNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsx
LDE3IEBACiAyMDE2LTAxLTI1ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fu
b24uZnI+CiAKKyAgICAgICAgV1RGIHNob3VsZCBoYXZlIGEgc2ltaWxhciBmdW5jdGlvbiBhcyBl
cXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSB0byBtYXRjaCBiZWdpbm5pbmcgb2Ygc3RyaW5n
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzNDE5
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ292ZXJl
ZCBieSBhZGRlZCB1bmludCB0ZXN0cy4KKworICAgICAgICAqIE1vZHVsZXMvZmV0Y2gvRmV0Y2hI
ZWFkZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzRm9yYmlkZGVuSGVhZGVyTmFtZSk6IFVz
aW5nIHN0YXJ0c1dpdGhMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UuCisKKzIwMTYtMDEtMjUgIFlv
dWVubiBGYWJsZXQgIDx5b3Vlbm4uZmFibGV0QGNyZi5jYW5vbi5mcj4KKwogICAgICAgICBXZWJD
b3JlSlNCdWlsdGlucyBkbyBub3QgdXNlIHRvIGRvIGNvbmRpdGlvbmFsIGluY2x1ZGUKICAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MzMwNgogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0NvbW1vbi5oIGIvU291cmNlL1dURi93
dGYvdGV4dC9TdHJpbmdDb21tb24uaAppbmRleCAwOWY0ZTM0OWE5ODhiODU4ZTg0NjgxODY1MjRi
OTk3ZDBmNzRlOWNiLi41Y2E1MDExZjBhYWIwYTRmNDg5NTc1YTRhMjRlZGJkZGVjMWI3NTAyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0NvbW1vbi5oCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL3RleHQvU3RyaW5nQ29tbW9uLmgKQEAgLTU1OSwyMiArNTU5LDM5IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGlubGluZSBib29sIGVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLS8vIFRoaXMgaXMgaW50
ZW50aW9uYWxseSBub3QgbWFya2VkIGlubGluZSBiZWNhdXNlIGl0J3MgdXNlZCBvZnRlbiBhbmQg
aXMgbm90IHNwZWVkLWNyaXRpY2FsIGVub3VnaCB0byB3YW50IGl0IGlubGluZWQgZXZlcnl3aGVy
ZS4KLXRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ0NsYXNzPiBib29sIGVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlQ29tbW9uV2l0aG91dExlbmd0aChjb25zdCBTdHJpbmdDbGFzcyYgc3RyaW5n
LCBjb25zdCBjaGFyKiBsb3dlcmNhc2VMZXR0ZXJzKQordGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5n
Q2xhc3M+IGJvb2wgaW5saW5lIGhhc1ByZWZpeFdpdGhMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2VD
b21tb24oY29uc3QgU3RyaW5nQ2xhc3MmIHN0cmluZywgY29uc3QgY2hhciogbG93ZXJjYXNlTGV0
dGVycywgdW5zaWduZWQgbGVuZ3RoKQogewogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICBBU1NF
UlQoKmxvd2VyY2FzZUxldHRlcnMpOwogICAgIGZvciAoY29uc3QgY2hhciogbGV0dGVyID0gbG93
ZXJjYXNlTGV0dGVyczsgKmxldHRlcjsgKytsZXR0ZXIpCiAgICAgICAgIEFTU0VSVCh0b0FTQ0lJ
TG93ZXJVbmNoZWNrZWQoKmxldHRlcikgPT0gKmxldHRlcik7CiAjZW5kaWYKLSAgICB1bnNpZ25l
ZCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgaWYgKGxlbmd0aCAhPSBzdHJsZW4obG93
ZXJjYXNlTGV0dGVycykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBBU1NFUlQoc3RyaW5n
Lmxlbmd0aCgpID49IGxlbmd0aCk7CisKICAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKQogICAgICAg
ICByZXR1cm4gZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nLmNoYXJhY3RlcnM4
KCksIGxvd2VyY2FzZUxldHRlcnMsIGxlbmd0aCk7CiAgICAgcmV0dXJuIGVxdWFsTGV0dGVyc0ln
bm9yaW5nQVNDSUlDYXNlKHN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgbG93ZXJjYXNlTGV0dGVycywg
bGVuZ3RoKTsKIH0KIAorLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IG5vdCBtYXJrZWQgaW5saW5l
IGJlY2F1c2UgaXQncyB1c2VkIG9mdGVuIGFuZCBpcyBub3Qgc3BlZWQtY3JpdGljYWwgZW5vdWdo
IHRvIHdhbnQgaXQgaW5saW5lZCBldmVyeXdoZXJlLgordGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5n
Q2xhc3M+IGJvb2wgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2VDb21tb25XaXRob3V0TGVu
Z3RoKGNvbnN0IFN0cmluZ0NsYXNzJiBzdHJpbmcsIGNvbnN0IGNoYXIqIGxvd2VyY2FzZUxldHRl
cnMpCit7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOworICAgIGlmIChs
ZW5ndGggIT0gc3RybGVuKGxvd2VyY2FzZUxldHRlcnMpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgcmV0dXJuIGhhc1ByZWZpeFdpdGhMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2VDb21tb24o
c3RyaW5nLCBsb3dlcmNhc2VMZXR0ZXJzLCBsZW5ndGgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBTdHJpbmdDbGFzcz4gYm9vbCBzdGFydHNXaXRoTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlQ29t
bW9uV2l0aG91dExlbmd0aChjb25zdCBTdHJpbmdDbGFzcyYgc3RyaW5nLCBjb25zdCBjaGFyKiBs
b3dlcmNhc2VMZXR0ZXJzKQoreworICAgIHNpemVfdCBwcmVmaXhMZW5ndGggPSBzdHJsZW4obG93
ZXJjYXNlTGV0dGVycyk7CisgICAgaWYgKCFwcmVmaXhMZW5ndGgpCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIGlmIChzdHJpbmcubGVuZ3RoKCkgPCBwcmVmaXhMZW5ndGgpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICByZXR1cm4gaGFzUHJlZml4V2l0aExldHRlcnNJZ25vcmluZ0FTQ0lJ
Q2FzZUNvbW1vbihzdHJpbmcsIGxvd2VyY2FzZUxldHRlcnMsIHByZWZpeExlbmd0aCk7Cit9CisK
IHRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ0NsYXNzLCB1bnNpZ25lZCBsZW5ndGg+IGlubGluZSBi
b29sIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlQ29tbW9uKGNvbnN0IFN0cmluZ0NsYXNz
JiBzdHJpbmcsIGNvbnN0IGNoYXIgKCZsb3dlcmNhc2VMZXR0ZXJzKVtsZW5ndGhdKQogewogICAg
IC8vIERvbid0IGFjdHVhbGx5IHVzZSB0aGUgbGVuZ3RoOyB3ZSBhcmUgY2hvb3NpbmcgY29kZSBz
aXplIG92ZXIgc3BlZWQuCkBAIC01ODIsNiArNTk5LDEyIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFN0
cmluZ0NsYXNzLCB1bnNpZ25lZCBsZW5ndGg+IGlubGluZSBib29sIGVxdWFsTGV0dGVyc0lnbm9y
aW5nCiAgICAgcmV0dXJuIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlQ29tbW9uV2l0aG91
dExlbmd0aChzdHJpbmcsIHBvaW50ZXIpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdD
bGFzcywgdW5zaWduZWQgbGVuZ3RoPiBpbmxpbmUgYm9vbCBzdGFydHNXaXRoTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlQ29tbW9uKGNvbnN0IFN0cmluZ0NsYXNzJiBzdHJpbmcsIGNvbnN0IGNoYXIg
KCZsb3dlcmNhc2VMZXR0ZXJzKVtsZW5ndGhdKQoreworICAgIGNvbnN0IGNoYXIqIHBvaW50ZXIg
PSBsb3dlcmNhc2VMZXR0ZXJzOworICAgIHJldHVybiBzdGFydHNXaXRoTGV0dGVyc0lnbm9yaW5n
QVNDSUlDYXNlQ29tbW9uV2l0aG91dExlbmd0aChzdHJpbmcsIHBvaW50ZXIpOworfQorCiB9CiAK
IHVzaW5nIFdURjo6ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2U7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3Ry
aW5nSW1wbC5oCmluZGV4IGNhMjkzYzZlNjZhZjVkNjFhODBiMjQ2ZmQwYjU5MTgxMjI3MzkxMDMu
LjMzNDBiMWNlZjAwZGQxZjY3NWZmNmMxNjdjNjVmZjMxNzgzZTc5YzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQv
U3RyaW5nSW1wbC5oCkBAIC0xMTkwLDYgKzExOTAsMTYgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgRGVm
YXVsdEhhc2g8UmVmUHRyPFN0cmluZ0ltcGw+PiB7CiAgICAgdHlwZWRlZiBTdHJpbmdIYXNoIEhh
c2g7CiB9OwogCit0ZW1wbGF0ZTx1bnNpZ25lZCBsZW5ndGg+IGlubGluZSBib29sIHN0YXJ0c1dp
dGhMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgU3RyaW5nSW1wbCYgc3RyaW5nLCBjb25z
dCBjaGFyICgmbG93ZXJjYXNlTGV0dGVycylbbGVuZ3RoXSkKK3sKKyAgICByZXR1cm4gc3RhcnRz
V2l0aExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZUNvbW1vbihzdHJpbmcsIGxvd2VyY2FzZUxldHRl
cnMpOworfQorCit0ZW1wbGF0ZTx1bnNpZ25lZCBsZW5ndGg+IGlubGluZSBib29sIHN0YXJ0c1dp
dGhMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgU3RyaW5nSW1wbCogc3RyaW5nLCBjb25z
dCBjaGFyICgmbG93ZXJjYXNlTGV0dGVycylbbGVuZ3RoXSkKK3sKKyAgICByZXR1cm4gc3RyaW5n
ICYmIHN0YXJ0c1dpdGhMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoKnN0cmluZywgbG93ZXJjYXNl
TGV0dGVycyk7Cit9CisKIHRlbXBsYXRlPHVuc2lnbmVkIGxlbmd0aD4gaW5saW5lIGJvb2wgZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgU3RyaW5nSW1wbCYgc3RyaW5nLCBjb25z
dCBjaGFyICgmbG93ZXJjYXNlTGV0dGVycylbbGVuZ3RoXSkKIHsKICAgICByZXR1cm4gZXF1YWxM
ZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2VDb21tb24oc3RyaW5nLCBsb3dlcmNhc2VMZXR0ZXJzKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmggYi9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L1dURlN0cmluZy5oCmluZGV4IDNjYTBmYmYyMDBkOWE1ODE0ZTUyNzJkNjFhNWZi
MjQyNzQzYWM0OWYuLjg3N2UwYzcyNGM0Y2U0MDY0MzNhOWI1OGU0Nzc0ZjhlZWRkODJiMWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgKKysrIGIvU291cmNlL1dU
Ri93dGYvdGV4dC9XVEZTdHJpbmcuaApAQCAtNTE3LDYgKzUxNyw3IEBAIGlubGluZSBib29sIGVx
dWFsSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgU3RyaW5nJiBhLCBjb25zdCBTdHJpbmcmIGIpIHsg
cmV0dXJuIGVxCiB0ZW1wbGF0ZTx1bnNpZ25lZCBjaGFyYWN0ZXJzQ291bnQ+IGlubGluZSBib29s
IGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgU3RyaW5nJiBhLCBjb25zdCBjaGFyICgmYilb
Y2hhcmFjdGVyc0NvdW50XSkgeyByZXR1cm4gZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZTxjaGFyYWN0
ZXJzQ291bnQ+KGEuaW1wbCgpLCBiKTsgfQogCiB0ZW1wbGF0ZTx1bnNpZ25lZCBsZW5ndGg+IGJv
b2wgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgU3RyaW5nJiwgY29uc3QgY2hh
ciAoJmxvd2VyY2FzZUxldHRlcnMpW2xlbmd0aF0pOwordGVtcGxhdGU8dW5zaWduZWQgbGVuZ3Ro
PiBib29sIHN0YXJ0c1dpdGhMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgU3RyaW5nJiwg
Y29uc3QgY2hhciAoJmxvd2VyY2FzZUxldHRlcnMpW2xlbmd0aF0pOwogCiBpbmxpbmUgYm9vbCBl
cXVhbElnbm9yaW5nTnVsbGl0eShjb25zdCBTdHJpbmcmIGEsIGNvbnN0IFN0cmluZyYgYikgeyBy
ZXR1cm4gZXF1YWxJZ25vcmluZ051bGxpdHkoYS5pbXBsKCksIGIuaW1wbCgpKTsgfQogdGVtcGxh
dGU8c2l6ZV90IGlubGluZUNhcGFjaXR5PiBpbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nTnVsbGl0
eShjb25zdCBWZWN0b3I8VUNoYXIsIGlubGluZUNhcGFjaXR5PiYgYSwgY29uc3QgU3RyaW5nJiBi
KSB7IHJldHVybiBlcXVhbElnbm9yaW5nTnVsbGl0eShhLCBiLmltcGwoKSk7IH0KQEAgLTcxOCw2
ICs3MTksMTEgQEAgdGVtcGxhdGU8dW5zaWduZWQgbGVuZ3RoPiBpbmxpbmUgYm9vbCBlcXVhbExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBTdHJpbmcKICAgICByZXR1cm4gZXF1YWxMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nLmltcGwoKSwgbG93ZXJjYXNlTGV0dGVycyk7CiB9
CiAKK3RlbXBsYXRlPHVuc2lnbmVkIGxlbmd0aD4gaW5saW5lIGJvb2wgc3RhcnRzV2l0aExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBTdHJpbmcmIHN0cmluZywgY29uc3QgY2hhciAoJmxv
d2VyY2FzZUxldHRlcnMpW2xlbmd0aF0pCit7CisgICAgcmV0dXJuIHN0YXJ0c1dpdGhMZXR0ZXJz
SWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nLmltcGwoKSwgbG93ZXJjYXNlTGV0dGVycyk7Cit9CisK
IH0KIAogdXNpbmcgV1RGOjpDU3RyaW5nOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9mZXRjaC9GZXRjaEhlYWRlcnMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRj
aC9GZXRjaEhlYWRlcnMuY3BwCmluZGV4IGRmOTEwMjM2ZGU2ODI4MDVlM2JlMjZiYmYxNGQ1YTU1
OTQ2ZGFmYjAuLjkwYzM3Mjc3YTk5OTZkMjU0ZTcxYWM0MzcxZGU5MGQwN2Y5YTI1ZDQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hIZWFkZXJzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoSGVhZGVycy5jcHAKQEAgLTc0LDcg
Kzc0LDcgQEAgc3RhdGljIGJvb2wgaXNGb3JiaWRkZW5IZWFkZXJOYW1lKGNvbnN0IFN0cmluZyYg
bmFtZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiBu
YW1lLnN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShBU0NJSUxpdGVyYWwoIlNlYy0iKSkgfHwg
bmFtZS5zdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoQVNDSUlMaXRlcmFsKCJQcm94eS0iKSk7
CisgICAgcmV0dXJuIHN0YXJ0c1dpdGhMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgInNl
Yy0iKSB8fCBzdGFydHNXaXRoTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG5hbWUsICJwcm94eS0i
KTsKIH0KIAogc3RhdGljIGJvb2wgaXNGb3JiaWRkZW5SZXNwb25zZUhlYWRlck5hbWUoY29uc3Qg
U3RyaW5nJiBuYW1lKQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdl
TG9nCmluZGV4IDM4YjJkOTBiM2Y1YzU4Y2FhZjU5NTI5NmQ5ODBmMTUwOTU5MzU4MWEuLmFhZDhl
MzQxMTFhYWU5NzAyNzEzODZkODA4MjliOWRlOGFiMDFhYzggMTAwNjQ0Ci0tLSBhL1Rvb2xzL0No
YW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxNi0wMS0y
NSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubi5mYWJsZXRAY3JmLmNhbm9uLmZyPgorCisgICAgICAg
IFdURiBzaG91bGQgaGF2ZSBhIHNpbWlsYXIgZnVuY3Rpb24gYXMgZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2UgdG8gbWF0Y2ggYmVnaW5uaW5nIG9mIHN0cmluZ3MKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MzQxOQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvU3RyaW5nT3BlcmF0b3JzLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOiBB
ZGRpbmcgdGVzdCBjYXNlIGZvciBzdGFydHNXaXRoTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlLgor
CisKIDIwMTYtMDEtMjUgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAK
ICAgICAgICAgR2l2ZSB0aGUgbGF5b3V0IHRlc3QgcmVzdWx0cyBmaWxlIGEgPHRpdGxlPiBzaG93
aW5nIHRoZSBkYXRlIGFuZCB0aW1lIHRoZSB0ZXN0cyB3ZXJlIHJ1bgpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nSW1wbC5jcHAgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdJbXBsLmNwcAppbmRleCA3NWZhZGY4YzQzN2E3ZGRjYjY4
M2Q0NzRmZjY1YmYyMDE1NGU0OTAzLi5kNDM0NzhjZDkwYTg4MDI5NzUzM2U4ZGEyODJhOTE3Yzc4
MTJiMWIxIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdJ
bXBsLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdJbXBsLmNw
cApAQCAtNDIzLDYgKzQyMywyMSBAQCBURVNUKFdURiwgU3RyaW5nSW1wbFN0YXJ0c1dpdGhJZ25v
cmluZ0FTQ0lJQ2FzZVdpdGhFbXB0eSkKICAgICBBU1NFUlRfRkFMU0UoZW1wdHktPnN0YXJ0c1dp
dGhJZ25vcmluZ0FTQ0lJQ2FzZSgqcmVmZXJlbmNlLmdldCgpKSk7CiB9CiAKK1RFU1QoV1RGLCBT
dGFydHNXaXRoTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKQoreworICAgIFN0cmluZyBzdHJpbmco
IlRlc3QgdEVTVCIpOworICAgIEFTU0VSVF9UUlVFKHN0YXJ0c1dpdGhMZXR0ZXJzSWdub3JpbmdB
U0NJSUNhc2Uoc3RyaW5nLCAidGVzdCB0IikpOworICAgIEFTU0VSVF9UUlVFKHN0YXJ0c1dpdGhM
ZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nLCAidGVzdCB0ZSIpKTsKKyAgICBBU1NFUlRf
VFJVRShzdGFydHNXaXRoTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHN0cmluZywgInRlc3QgdGVz
dCIpKTsKKyAgICBBU1NFUlRfRkFMU0Uoc3RhcnRzV2l0aExldHRlcnNJZ25vcmluZ0FTQ0lJQ2Fz
ZShzdHJpbmcsICJ0ZXN0IHRleCIpKTsKKworICAgIEFTU0VSVF9UUlVFKHN0YXJ0c1dpdGhMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nLCAiIikpOworICAgIEFTU0VSVF9UUlVFKHN0YXJ0
c1dpdGhMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoU3RyaW5nKCIiKSwgIiIpKTsKKworICAgIEFT
U0VSVF9GQUxTRShzdGFydHNXaXRoTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKFN0cmluZygpLCAi
dCIpKTsKKyAgICBBU1NFUlRfRkFMU0Uoc3RhcnRzV2l0aExldHRlcnNJZ25vcmluZ0FTQ0lJQ2Fz
ZShTdHJpbmcoKSwgIiIpKTsKK30KKwogVEVTVChXVEYsIFN0cmluZ0ltcGxFbmRzV2l0aElnbm9y
aW5nQVNDSUlDYXNlQmFzaWMpCiB7CiAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlZmVyZW5jZSA9
IHN0cmluZ0Zyb21VVEY4KCJYw4lDYkEiKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>