<?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>102845</bug_id>
          
          <creation_ts>2012-11-20 15:14:56 -0800</creation_ts>
          <short_desc>Make it possible for elements with different tag names to share attribute data.</short_desc>
          <delta_ts>2012-11-21 12:47:57 -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>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andreas Kling">kling</reporter>
          <assigned_to name="Andreas Kling">kling</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>jussi.kukkonen</cc>
    
    <cc>koivisto</cc>
    
    <cc>ojan</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>772205</commentid>
    <comment_count>0</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-11-20 15:14:56 -0800</bug_when>
    <thetext>We currently prevent e.g &lt;div style=&quot;display: none&quot;&gt; and &lt;span style=&quot;display: none&quot;&gt; from sharing attribute data.
The reason we do this is because presentation attributes map to different CSS properties depending on the name of the tag they&apos;re on.

A cool optimization would be to force elements with presentation attributes to always use mutable attribute data.
This way we could share equivalent immutable attribute data between all element types, and shrink ImmutableElementAttributeData by one pointer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772246</commentid>
    <comment_count>1</comment_count>
      <attachid>175295</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-11-20 15:56:31 -0800</bug_when>
    <thetext>Created attachment 175295
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772252</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-20 16:00:14 -0800</bug_when>
    <thetext>Attachment 175295 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/dom/Element.cpp:2567:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/dom/Element.cpp:2568:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Total errors found: 2 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772668</commentid>
    <comment_count>3</comment_count>
      <attachid>175295</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-11-21 02:16:14 -0800</bug_when>
    <thetext>Comment on attachment 175295
Patch

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

&gt; Source/WebCore/ChangeLog:25
&gt; +        On the upside, excluding elements with presentation attributes from the data cache means that
&gt; +        we can move one pointer (m_presentationAttributeStyle) from ImmutableElementAttributeData
&gt; +        to MutableElementAttributeData.

I suppose we could also add 3rd state, ImmutableElementAttributeDataWithPresentationAttributeStyle. Might not be worth it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>773122</commentid>
    <comment_count>4</comment_count>
      <attachid>175295</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-11-21 11:03:39 -0800</bug_when>
    <thetext>Comment on attachment 175295
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:25
&gt;&gt; +        to MutableElementAttributeData.
&gt; 
&gt; I suppose we could also add 3rd state, ImmutableElementAttributeDataWithPresentationAttributeStyle. Might not be worth it.

That would be a reasonable way to go if this causes a monstrous regression on that Y2K content chromium tracks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>773124</commentid>
    <comment_count>5</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-11-21 11:06:23 -0800</bug_when>
    <thetext>Committed r135421: &lt;http://trac.webkit.org/changeset/135421&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>773166</commentid>
    <comment_count>6</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-11-21 12:06:55 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 175295 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=175295&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/ChangeLog:25
&gt; &gt;&gt; +        to MutableElementAttributeData.
&gt; &gt; 
&gt; &gt; I suppose we could also add 3rd state, ImmutableElementAttributeDataWithPresentationAttributeStyle. Might not be worth it.
&gt; 
&gt; That would be a reasonable way to go if this causes a monstrous regression on that Y2K content chromium tracks.

llol. It&apos;s funny cuz it&apos;s true. We talk about updating it once in a while, but noone&apos;s made it a priority. So far, our performance work has mostly gone into doing better about noticing regressions. I expect we&apos;ll get around to this eventually. I actually think tracking both old and new context is worthwhile.

Anyways, I agree. Lets see if we need it. I think it&apos;s unlikely that this will cause a regression in any real content.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>773193</commentid>
    <comment_count>7</comment_count>
    <who name="Jussi Kukkonen (jku)">jussi.kukkonen</who>
    <bug_when>2012-11-21 12:47:57 -0800</bug_when>
    <thetext>This seems to assert editing/undo/replace-by-span-then-remove.html:

11:40:02.722 9037   ASSERTION FAILED: !other.m_inlineStyle-&gt;isMutable()
11:40:02.722 9037   /home/buildslave-1/webkit-buildslave/efl-linux-64-debug-wk2/build/Source/WebCore/dom/ElementAttributeData.cpp(76) : WebCore::ImmutableElementAttributeData::ImmutableElementAttributeData(const WebCore::MutableElementAttributeData&amp;)
11:40:02.722 9037   1   0x7f4b3da4ada6 WebCore::ImmutableElementAttributeData::ImmutableElementAttributeData(WebCore::MutableElementAttributeData const&amp;)
11:40:02.722 9037   2   0x7f4b3da4b2ff WebCore::ElementAttributeData::makeImmutableCopy() const
11:40:02.722 9037   3   0x7f4b3da41e5b WebCore::Element::cloneAttributesFromElement(WebCore::Element const&amp;)
11:40:02.722 9037   4   0x7f4b3da41fc1 WebCore::Element::cloneDataFromElement(WebCore::Element const&amp;)
11:40:02.722 9037   5   0x7f4b3db62171
11:40:02.722 9037   6   0x7f4b3db622c5 WebCore::ReplaceNodeWithSpanCommand::doApply()
11:40:02.722 9037   7   0x7f4b3db1d569 WebCore::SimpleEditCommand::doReapply()
11:40:02.722 9037   8   0x7f4b3db03c42 WebCore::EditCommandComposition::reapply()
11:40:02.722 9037   9   0x7f4b41f20a67 WebKit::WebPage::reapplyEditCommand(unsigned long)
11:40:02.722 9037   10  0x7f4b41fe5cc0 void CoreIPC::callMemberFunction&lt;WebKit::WebPage, void (WebKit::WebPage::*)(unsigned long), unsigned long&gt;(CoreIPC::Arguments1&lt;unsigned long&gt; const&amp;, WebKit::WebPage*, void (WebKit::WebPage::*)(unsigned long))
11:40:02.722 9037   11  0x7f4b41fe44d3 void CoreIPC::handleMessage&lt;Messages::WebPage::ReapplyEditCommand, WebKit::WebPage, void (WebKit::WebPage::*)(unsigned long)&gt;(CoreIPC::MessageDecoder&amp;, WebKit::WebPage*, void (WebKit::WebPage::*)(unsigned long))
11:40:02.722 9037   12  0x7f4b41fe04fe WebKit::WebPage::didReceiveWebPageMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::MessageDecoder&amp;)
11:40:02.722 9037   13  0x7f4b41f2171a WebKit::WebPage::didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::MessageDecoder&amp;)
11:40:02.722 9037   14  0x7f4b41cecedd CoreIPC::MessageReceiverMap::dispatchMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::MessageDecoder&amp;)
11:40:02.722 9037   15  0x7f4b41e4e208 WebKit::WebProcess::didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::MessageDecoder&amp;)
11:40:02.722 9037   16  0x7f4b41ce1e64 CoreIPC::Connection::dispatchMessage(CoreIPC::MessageID, CoreIPC::MessageDecoder&amp;)
11:40:02.722 9037   17  0x7f4b41ce1fd0 CoreIPC::Connection::dispatchMessage(CoreIPC::Connection::Message&lt;CoreIPC::MessageDecoder&gt;&amp;)
11:40:02.722 9037   18  0x7f4b41cdfd07 CoreIPC::Connection::SyncMessageState::dispatchMessages()
11:40:02.722 9037   19  0x7f4b41ce1149 CoreIPC::Connection::waitForSyncReply(unsigned long, double, unsigned int)
11:40:02.722 9037   20  0x7f4b41ce0fb0 CoreIPC::Connection::sendSyncMessage(CoreIPC::MessageID, unsigned long, WTF::PassOwnPtr&lt;CoreIPC::MessageEncoder&gt;, double, unsigned int)
11:40:02.723 9037   21  0x7f4b41ee3780 bool CoreIPC::Connection::sendSync&lt;Messages::WebPageProxy::ExecuteUndoRedo&gt;(Messages::WebPageProxy::ExecuteUndoRedo const&amp;, Messages::WebPageProxy::ExecuteUndoRedo::Reply const&amp;, unsigned long, double, unsigned int)
11:40:02.723 9037   22  0x7f4b41ee2b10 bool CoreIPC::MessageSender&lt;WebKit::WebPage&gt;::sendSync&lt;Messages::WebPageProxy::ExecuteUndoRedo&gt;(Messages::WebPageProxy::ExecuteUndoRedo const&amp;, Messages::WebPageProxy::ExecuteUndoRedo::Reply const&amp;, unsigned long, double)
11:40:02.723 9037   23  0x7f4b41ee2307 bool CoreIPC::MessageSender&lt;WebKit::WebPage&gt;::sendSync&lt;Messages::WebPageProxy::ExecuteUndoRedo&gt;(Messages::WebPageProxy::ExecuteUndoRedo const&amp;, Messages::WebPageProxy::ExecuteUndoRedo::Reply const&amp;, double)
11:40:02.723 9037   24  0x7f4b41ee0c23 WebKit::WebEditorClient::redo()
11:40:02.723 9037   25  0x7f4b3db2cbce WebCore::Editor::redo()
11:40:02.723 9037   26  0x7f4b3db3d77e
11:40:02.723 9037   27  0x7f4b3db3f389 WebCore::Editor::Command::execute(WTF::String const&amp;, WebCore::Event*) const
11:40:02.723 9037   28  0x7f4b3d9dd9da WebCore::Document::execCommand(WTF::String const&amp;, bool, WTF::String const&amp;)
11:40:02.723 9037   29  0x7f4b3e69cf7d WebCore::jsDocumentPrototypeFunctionExecCommand(JSC::ExecState*)
11:40:02.723 9037   30  0x7f4aed3ed265</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>175295</attachid>
            <date>2012-11-20 15:56:31 -0800</date>
            <delta_ts>2012-11-21 11:03:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102845.diff</filename>
            <type>text/plain</type>
            <size>15679</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzOGUzY2ZmLi5kMmU3ZGNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzcg
QEAKKzIwMTItMTEtMjAgIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgorCisgICAg
ICAgIE1ha2UgaXQgcG9zc2libGUgZm9yIGVsZW1lbnRzIHdpdGggZGlmZmVyZW50IHRhZyBuYW1l
cyB0byBzaGFyZSBhdHRyaWJ1dGUgZGF0YS4KKyAgICAgICAgPGh0dHA6Ly93ZWJraXQub3JnL2Iv
MTAyODQ1PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFsbG93IGFsbCBlbGVtZW50cyB0byBzaGFyZSBFbGVtZW50QXR0cmlidXRlRGF0YSB3aXRoIG9u
ZSBhbm90aGVyLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGVsZW1lbnRzCisgICAgICAgIGluIHRoaXMg
aHlwb3RoZXRpY2FsIG1hcmt1cCB3aWxsIGFsbCBwb2ludCB0byB0aGUgc2FtZSBhdHRyaWJ1dGUg
ZGF0YToKKworICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9vIj4KKyAgICAgICAgICAgICAgICA8
c3BhbiBjbGFzcz0iZm9vIj4KKyAgICAgICAgICAgICAgICAgICAgPGhyIGNsYXNzPSJmb28iLz4K
KyAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICA8L2Rpdj4KKworICAgICAgICBU
aGlzIG9wdGltaXphdGlvbiBoYXBwZW5zIGF0IHRoZSBleHBlbnNlIG9mIGFuIG9sZCBvbmUuIFdl
IG5vIGxvbmdlciBzaGFyZSBhdHRyaWJ1dGUgZGF0YQorICAgICAgICBiZXR3ZWVuIGVsZW1lbnRz
IHRoYXQgaGF2ZSBwcmVzZW50YXRpb24gYXR0cmlidXRlcywgc2luY2UgdGhleSBtYXAgdG8gZGlm
ZmVyZW50IENTUyBwcm9wZXJ0aWVzCisgICAgICAgIGRlcGVuZGluZyBvbiB3aGF0IHRhZyB0aGV5
J3JlIGF0dGFjaGVkIHRvLiBUaGVzZSBhcmUgbW9zdGx5IHVzZWQgaW4geWUgb2xkZSB3ZWIgMS4w
IGNvbnRlbnQKKyAgICAgICAgdGhvdWdoLCBhbmQgd2Ugc2hvdWxkIHByZWZlciBvcHRpbWl6aW5n
IGluIGZhdm9yIG9mIG1vZGVybiBtYXJrdXAuIFRoZSBnbG9iYWwgY2FjaGUgZm9yCisgICAgICAg
IHByZXNlbnRhdGlvbiBhdHRyaWJ1dGUgc3R5bGUgaW4gU3R5bGVkRWxlbWVudC5jcHAgc3RpbGwg
cHJldmVudHMgcmVkdW5kYW50IHBhcnNpbmcuCisKKyAgICAgICAgT24gdGhlIHVwc2lkZSwgZXhj
bHVkaW5nIGVsZW1lbnRzIHdpdGggcHJlc2VudGF0aW9uIGF0dHJpYnV0ZXMgZnJvbSB0aGUgZGF0
YSBjYWNoZSBtZWFucyB0aGF0CisgICAgICAgIHdlIGNhbiBtb3ZlIG9uZSBwb2ludGVyIChtX3By
ZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKSBmcm9tIEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVE
YXRhCisgICAgICAgIHRvIE11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YS4KKworICAgICAgICA4
MDBrQiBwcm9ncmVzc2lvbiBvbiBNZW1idXN0ZXIzLgorCisgICAgICAgICogZG9tL0RvY3VtZW50
Lmg6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltbXV0
YWJsZUF0dHJpYnV0ZURhdGFDYWNoZUtleTo6SW1tdXRhYmxlQXR0cmlidXRlRGF0YUNhY2hlS2V5
KToKKyAgICAgICAgKFdlYkNvcmU6OkltbXV0YWJsZUF0dHJpYnV0ZURhdGFDYWNoZUtleTo6b3Bl
cmF0b3IhPSk6CisgICAgICAgIChXZWJDb3JlOjpJbW11dGFibGVBdHRyaWJ1dGVEYXRhQ2FjaGVL
ZXk6Omhhc2gpOgorICAgICAgICAoSW1tdXRhYmxlQXR0cmlidXRlRGF0YUNhY2hlS2V5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpjYWNoZWRJbW11dGFibGVBdHRyaWJ1dGVEYXRhKToK
KyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpw
YXJzZXJTZXRBdHRyaWJ1dGVzKToKKworICAgICAgICAgICAgRG9uJ3QgdXNlIHRoZSBlbGVtZW50
J3MgdGFnIG5hbWUgaW4gdGhlIGtleSBmb3IgdGhlIGltbXV0YWJsZSBhdHRyaWJ1dGUgZGF0YSBj
YWNoZS4KKworICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Y2xvbmVBdHRyaWJ1dGVzRnJvbUVs
ZW1lbnQpOgorCisgICAgICAgICAgICBQcmV2ZW50IGNsb25lTm9kZSgpIGZyb20gY29udmVydGlu
ZyBtdXRhYmxlIGF0dHJpYnV0ZSBkYXRhIHRvIGltbXV0YWJsZSBpZiBpdCBoYXMKKyAgICAgICAg
ICAgIHByZXNlbnRhdGlvbiBhdHRyaWJ1dGVzLgorCisgICAgICAgICogZG9tL0VsZW1lbnRBdHRy
aWJ1dGVEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1
dGVEYXRhOjpJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSk6CisKKyAgICAgICAgICAgIEFk
ZCBhbiBhc3NlcnRpb24gdGhhdCBtdXRhYmxlLXRvLWltbXV0YWJsZSBjb252ZXJzaW9uIG5ldmVy
IGhhcHBlbnMgd2l0aCBwcmVzZW50YXRpb24KKyAgICAgICAgICAgIGF0dHJpYnV0ZSBzdHlsZSBw
cmVzZW50LgorCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50QXR0cmlidXRlRGF0YTo6RWxlbWVu
dEF0dHJpYnV0ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6TXV0YWJsZUVsZW1lbnRBdHRyaWJ1
dGVEYXRhOjpNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
RWxlbWVudEF0dHJpYnV0ZURhdGE6OnJlcG9ydE1lbW9yeVVzYWdlKToKKyAgICAgICAgKiBkb20v
RWxlbWVudEF0dHJpYnV0ZURhdGEuaDoKKyAgICAgICAgKEVsZW1lbnRBdHRyaWJ1dGVEYXRhKToK
KyAgICAgICAgKE11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50QXR0cmlidXRlRGF0YTo6cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50QXR0cmlidXRlRGF0YTo6
c2V0UHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUpOgorCisgICAgICAgICAgICBNb3ZlIHRoZSBS
ZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gdGhhdCBob2xkcyBwcmVzZW50YXRpb24gYXR0cmlidXRl
LWRlcml2ZWQgc3R5bGUKKyAgICAgICAgICAgIGZyb20gdGhlIGNvbW1vbiBFbGVtZW50QXR0cmli
dXRlRGF0YSBiYXNlIGNsYXNzIHRvIE11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YS4KKworICAg
ICAgICAqIGRvbS9TdHlsZWRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZEVs
ZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQpOgorCisgICAgICAgICAgICBBbHdheXMgZGlydHkgdGhl
IHByZXNlbnRhdGlvbiBhdHRyaWJ1dGUgc3R5bGUgd2hlbiBhIHByZXNlbnRhdGlvbiBhdHRyaWJ1
dGUgY2hhbmdlcy4KKworICAgICAgICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVudDo6cmVidWlsZFBy
ZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKToKKworICAgICAgICAgICAgRm9yY2UgcHJvbW90aW9u
IHRvIG11dGFibGUgYXR0cmlidXRlIGRhdGEgd2hlbiBpdCB0dXJucyBvdXQgdGhhdCB3ZSBuZWVk
IHRvIGhhbmcgYQorICAgICAgICAgICAgU3R5bGVQcm9wZXJ0eVNldCB3aXRoIHRoZSBwcmVzZW50
YXRpb24gYXR0cmlidXRlIHN0eWxlIG9mZiBvZiBpdC4KKwogMjAxMi0xMS0yMCAgSmFtZXMgU2lt
b25zZW4gIDxzaW1vbmphbUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQ29uc29saWRhdGUgRnJh
bWVMb2FkZXI6OmxvYWQoKSBpbnRvIG9uZSBmdW5jdGlvbiB0YWtpbmcgYSBGcmFtZUxvYWRSZXF1
ZXN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCA0NTBhMmY4Li4yZDI3ODUwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5jcHAKQEAgLTU5MTAsMTYgKzU5MTAsMTMgQEAgdm9pZCBEb2N1bWVudDo6
cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29u
c3QKIAogY2xhc3MgSW1tdXRhYmxlQXR0cmlidXRlRGF0YUNhY2hlS2V5IHsKIHB1YmxpYzoKLSAg
ICBJbW11dGFibGVBdHRyaWJ1dGVEYXRhQ2FjaGVLZXkoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgY29uc3QgQXR0cmlidXRlKiBhdHRyaWJ1dGVzLCB1bnNpZ25lZCBhdHRyaWJ1dGVDb3Vu
dCkKLSAgICAgICAgOiBtX3RhZ1FOYW1lKHRhZ05hbWUpCi0gICAgICAgICwgbV9hdHRyaWJ1dGVz
KGF0dHJpYnV0ZXMpCisgICAgSW1tdXRhYmxlQXR0cmlidXRlRGF0YUNhY2hlS2V5KGNvbnN0IEF0
dHJpYnV0ZSogYXR0cmlidXRlcywgdW5zaWduZWQgYXR0cmlidXRlQ291bnQpCisgICAgICAgIDog
bV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCiAgICAgICAgICwgbV9hdHRyaWJ1dGVDb3VudChhdHRy
aWJ1dGVDb3VudCkKICAgICB7IH0KIAogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBJbW11dGFi
bGVBdHRyaWJ1dGVEYXRhQ2FjaGVLZXkmIG90aGVyKSBjb25zdAogICAgIHsKLSAgICAgICAgaWYg
KG1fdGFnUU5hbWUgIT0gb3RoZXIubV90YWdRTmFtZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICBpZiAobV9hdHRyaWJ1dGVDb3VudCAhPSBvdGhlci5tX2F0dHJpYnV0ZUNvdW50
KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIHJldHVybiBtZW1jbXAobV9hdHRy
aWJ1dGVzLCBvdGhlci5tX2F0dHJpYnV0ZXMsIHNpemVvZihBdHRyaWJ1dGUpICogbV9hdHRyaWJ1
dGVDb3VudCk7CkBAIC01OTI3LDEyICs1OTI0LDEwIEBAIHB1YmxpYzoKIAogICAgIHVuc2lnbmVk
IGhhc2goKSBjb25zdAogICAgIHsKLSAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlSGFzaCA9IFN0
cmluZ0hhc2hlcjo6aGFzaE1lbW9yeShtX2F0dHJpYnV0ZXMsIG1fYXR0cmlidXRlQ291bnQgKiBz
aXplb2YoQXR0cmlidXRlKSk7Ci0gICAgICAgIHJldHVybiBXVEY6OnBhaXJJbnRIYXNoKG1fdGFn
UU5hbWUubG9jYWxOYW1lKCkuaW1wbCgpLT5leGlzdGluZ0hhc2goKSwgYXR0cmlidXRlSGFzaCk7
CisgICAgICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkobV9hdHRyaWJ1dGVzLCBt
X2F0dHJpYnV0ZUNvdW50ICogc2l6ZW9mKEF0dHJpYnV0ZSkpOwogICAgIH0KIAogcHJpdmF0ZToK
LSAgICBRdWFsaWZpZWROYW1lIG1fdGFnUU5hbWU7CiAgICAgY29uc3QgQXR0cmlidXRlKiBtX2F0
dHJpYnV0ZXM7CiAgICAgdW5zaWduZWQgbV9hdHRyaWJ1dGVDb3VudDsKIH07CkBAIC01OTQ3LDEx
ICs1OTQyLDExIEBAIHN0cnVjdCBJbW11dGFibGVBdHRyaWJ1dGVEYXRhQ2FjaGVFbnRyeSB7CiAg
ICAgUmVmUHRyPEVsZW1lbnRBdHRyaWJ1dGVEYXRhPiB2YWx1ZTsKIH07CiAKLVBhc3NSZWZQdHI8
RWxlbWVudEF0dHJpYnV0ZURhdGE+IERvY3VtZW50OjpjYWNoZWRJbW11dGFibGVBdHRyaWJ1dGVE
YXRhKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFZlY3RvcjxBdHRyaWJ1dGU+JiBhdHRy
aWJ1dGVzKQorUGFzc1JlZlB0cjxFbGVtZW50QXR0cmlidXRlRGF0YT4gRG9jdW1lbnQ6OmNhY2hl
ZEltbXV0YWJsZUF0dHJpYnV0ZURhdGEoY29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4mIGF0dHJpYnV0
ZXMpCiB7CiAgICAgQVNTRVJUKCFhdHRyaWJ1dGVzLmlzRW1wdHkoKSk7CiAKLSAgICBJbW11dGFi
bGVBdHRyaWJ1dGVEYXRhQ2FjaGVLZXkgY2FjaGVLZXkoZWxlbWVudC0+dGFnUU5hbWUoKSwgYXR0
cmlidXRlcy5kYXRhKCksIGF0dHJpYnV0ZXMuc2l6ZSgpKTsKKyAgICBJbW11dGFibGVBdHRyaWJ1
dGVEYXRhQ2FjaGVLZXkgY2FjaGVLZXkoYXR0cmlidXRlcy5kYXRhKCksIGF0dHJpYnV0ZXMuc2l6
ZSgpKTsKICAgICB1bnNpZ25lZCBjYWNoZUhhc2ggPSBjYWNoZUtleS5oYXNoKCk7CiAKICAgICBJ
bW11dGFibGVBdHRyaWJ1dGVEYXRhQ2FjaGU6Oml0ZXJhdG9yIGNhY2hlSXRlcmF0b3IgPSBtX2lt
bXV0YWJsZUF0dHJpYnV0ZURhdGFDYWNoZS5hZGQoY2FjaGVIYXNoLCBudWxscHRyKS5pdGVyYXRv
cjsKQEAgLTU5NjcsNyArNTk2Miw3IEBAIFBhc3NSZWZQdHI8RWxlbWVudEF0dHJpYnV0ZURhdGE+
IERvY3VtZW50OjpjYWNoZWRJbW11dGFibGVBdHRyaWJ1dGVEYXRhKGNvbnN0IEVsCiAgICAgaWYg
KCFjYWNoZUhhc2ggfHwgY2FjaGVJdGVyYXRvci0+dmFsdWUpCiAgICAgICAgIHJldHVybiBhdHRy
aWJ1dGVEYXRhLnJlbGVhc2UoKTsKIAotICAgIGNhY2hlSXRlcmF0b3ItPnZhbHVlID0gYWRvcHRQ
dHIobmV3IEltbXV0YWJsZUF0dHJpYnV0ZURhdGFDYWNoZUVudHJ5KEltbXV0YWJsZUF0dHJpYnV0
ZURhdGFDYWNoZUtleShlbGVtZW50LT50YWdRTmFtZSgpLCBhdHRyaWJ1dGVEYXRhLT5pbW11dGFi
bGVBdHRyaWJ1dGVBcnJheSgpLCBhdHRyaWJ1dGVEYXRhLT5sZW5ndGgoKSksIGF0dHJpYnV0ZURh
dGEpKTsKKyAgICBjYWNoZUl0ZXJhdG9yLT52YWx1ZSA9IGFkb3B0UHRyKG5ldyBJbW11dGFibGVB
dHRyaWJ1dGVEYXRhQ2FjaGVFbnRyeShJbW11dGFibGVBdHRyaWJ1dGVEYXRhQ2FjaGVLZXkoYXR0
cmlidXRlRGF0YS0+aW1tdXRhYmxlQXR0cmlidXRlQXJyYXkoKSwgYXR0cmlidXRlRGF0YS0+bGVu
Z3RoKCkpLCBhdHRyaWJ1dGVEYXRhKSk7CiAKICAgICByZXR1cm4gYXR0cmlidXRlRGF0YS5yZWxl
YXNlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4IDliN2I5N2IuLjM0M2IwZGIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5oCkBAIC0xMTU2LDcgKzExNTYsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0
dWFsIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0IE9WRVJS
SURFOwogCi0gICAgUGFzc1JlZlB0cjxFbGVtZW50QXR0cmlidXRlRGF0YT4gY2FjaGVkSW1tdXRh
YmxlQXR0cmlidXRlRGF0YShjb25zdCBFbGVtZW50KiwgY29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4m
KTsKKyAgICBQYXNzUmVmUHRyPEVsZW1lbnRBdHRyaWJ1dGVEYXRhPiBjYWNoZWRJbW11dGFibGVB
dHRyaWJ1dGVEYXRhKGNvbnN0IFZlY3RvcjxBdHRyaWJ1dGU+Jik7CiAKICAgICB2b2lkIGRpZFJl
bW92ZUFsbFBlbmRpbmdTdHlsZXNoZWV0KCk7CiAgICAgdm9pZCBzZXROZWVkc05vdGlmeVJlbW92
ZUFsbFBlbmRpbmdTdHlsZXNoZWV0KCkgeyBtX25lZWRzTm90aWZ5UmVtb3ZlQWxsUGVuZGluZ1N0
eWxlc2hlZXQgPSB0cnVlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggNzQ3NGM5Ny4uODc5
MjNhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtMTAyMiwxMSArMTAyMiwxMSBAQCB2b2lk
IEVsZW1lbnQ6OnBhcnNlclNldEF0dHJpYnV0ZXMoY29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4mIGF0
dHJpYnV0ZVZlY3RvciwgRnJhZwogICAgIH0KIAogICAgIC8vIFdoZW4gdGhlIGRvY3VtZW50IGlz
IGluIHBhcnNpbmcgc3RhdGUsIHdlIGNhY2hlIGltbXV0YWJsZSBFbGVtZW50QXR0cmlidXRlRGF0
YSBvYmplY3RzIHdpdGggdGhlCi0gICAgLy8gaW5wdXQgYXR0cmlidXRlIHZlY3RvciAoYW5kIHRo
ZSB0YWcgbmFtZSkgYXMga2V5LiAoVGhpcyBjYWNoZSBpcyBoZWxkIGJ5IERvY3VtZW50LikKKyAg
ICAvLyBpbnB1dCBhdHRyaWJ1dGUgdmVjdG9yIGFzIGtleS4gKFRoaXMgY2FjaGUgaXMgaGVsZCBi
eSBEb2N1bWVudC4pCiAgICAgaWYgKCFkb2N1bWVudCgpIHx8ICFkb2N1bWVudCgpLT5wYXJzaW5n
KCkpCiAgICAgICAgIG1fYXR0cmlidXRlRGF0YSA9IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpjcmVh
dGVJbW11dGFibGUoZmlsdGVyZWRBdHRyaWJ1dGVzKTsKICAgICBlbHNlCi0gICAgICAgIG1fYXR0
cmlidXRlRGF0YSA9IGRvY3VtZW50KCktPmNhY2hlZEltbXV0YWJsZUF0dHJpYnV0ZURhdGEodGhp
cywgZmlsdGVyZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgbV9hdHRyaWJ1dGVEYXRhID0gZG9jdW1l
bnQoKS0+Y2FjaGVkSW1tdXRhYmxlQXR0cmlidXRlRGF0YShmaWx0ZXJlZEF0dHJpYnV0ZXMpOwog
CiAgICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBzZXQgb2YgYXR0cmlidXRlcyB3ZSBhbHJlYWR5IGhh
dmUgb24gdGhlIHN0YWNrIGluIGNhc2UKICAgICAvLyBhdHRyaWJ1dGVDaGFuZ2VkIG11dGF0ZXMg
bV9hdHRyaWJ1dGVEYXRhLgpAQCAtMjU2Myw4ICsyNTYzLDEwIEBAIHZvaWQgRWxlbWVudDo6Y2xv
bmVBdHRyaWJ1dGVzRnJvbUVsZW1lbnQoY29uc3QgRWxlbWVudCYgb3RoZXIpCiAgICAgICAgIHVw
ZGF0ZU5hbWUob2xkTmFtZSwgbmV3TmFtZSk7CiAKICAgICAvLyBJZiAnb3RoZXInIGhhcyBhIG11
dGFibGUgRWxlbWVudEF0dHJpYnV0ZURhdGEsIGNvbnZlcnQgaXQgdG8gYW4gaW1tdXRhYmxlIG9u
ZSBzbyB3ZSBjYW4gc2hhcmUgaXQgYmV0d2VlbiBib3RoIGVsZW1lbnRzLgotICAgIC8vIFdlIGNh
biBvbmx5IGRvIHRoaXMgaWYgdGhlcmUgaXMgbm8gQ1NTT00gd3JhcHBlciBmb3Igb3RoZXIncyBp
bmxpbmUgc3R5bGUgKHRoZSBpc011dGFibGUoKSBjaGVjay4pCi0gICAgaWYgKG90aGVyLm1fYXR0
cmlidXRlRGF0YS0+aXNNdXRhYmxlKCkgJiYgKCFvdGhlci5tX2F0dHJpYnV0ZURhdGEtPmlubGlu
ZVN0eWxlKCkgfHwgIW90aGVyLm1fYXR0cmlidXRlRGF0YS0+aW5saW5lU3R5bGUoKS0+aXNNdXRh
YmxlKCkpKQorICAgIC8vIFdlIGNhbiBvbmx5IGRvIHRoaXMgaWYgdGhlcmUgaXMgbm8gQ1NTT00g
d3JhcHBlciBmb3Igb3RoZXIncyBpbmxpbmUgc3R5bGUsIGFuZCB0aGVyZSBhcmUgbm8gcHJlc2Vu
dGF0aW9uIGF0dHJpYnV0ZXMuCisgICAgaWYgKG90aGVyLm1fYXR0cmlidXRlRGF0YS0+aXNNdXRh
YmxlKCkgJiYKKyAgICAgICAgIW90aGVyLm1fYXR0cmlidXRlRGF0YS0+cHJlc2VudGF0aW9uQXR0
cmlidXRlU3R5bGUoKSAmJgorICAgICAgICAoIW90aGVyLm1fYXR0cmlidXRlRGF0YS0+aW5saW5l
U3R5bGUoKSB8fCAhb3RoZXIubV9hdHRyaWJ1dGVEYXRhLT5pbmxpbmVTdHlsZSgpLT5oYXNDU1NP
TVdyYXBwZXIoKSkpCiAgICAgICAgIGNvbnN0X2Nhc3Q8RWxlbWVudCY+KG90aGVyKS5tX2F0dHJp
YnV0ZURhdGEgPSBvdGhlci5tX2F0dHJpYnV0ZURhdGEtPm1ha2VJbW11dGFibGVDb3B5KCk7CiAK
ICAgICBpZiAoIW90aGVyLm1fYXR0cmlidXRlRGF0YS0+aXNNdXRhYmxlKCkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuY3BwIGIvU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcAppbmRleCA5ODE0MTk3Li4yZmNlYmQx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5jcHAKQEAgLTMz
LDcgKzMzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdHJ1Y3QgU2FtZVNpemVBc0VsZW1l
bnRBdHRyaWJ1dGVEYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8U2FtZVNpemVBc0VsZW1lbnRBdHRy
aWJ1dGVEYXRhPiB7CiAgICAgdW5zaWduZWQgYml0ZmllbGQ7Ci0gICAgdm9pZCogcmVmUHRyc1s0
XTsKKyAgICB2b2lkKiByZWZQdHJzWzNdOwogfTsKIAogQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEVs
ZW1lbnRBdHRyaWJ1dGVEYXRhKSA9PSBzaXplb2YoRWxlbWVudEF0dHJpYnV0ZURhdGEpLCBlbGVt
ZW50X2F0dHJpYnV0ZV9kYXRhX3Nob3VsZF9zdGF5X3NtYWxsKTsKQEAgLTcwLDYgKzcwLDggQEAg
SW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGE6On5JbW11dGFibGVFbGVtZW50QXR0cmlidXRl
RGF0YSgpCiBJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YTo6SW1tdXRhYmxlRWxlbWVudEF0
dHJpYnV0ZURhdGEoY29uc3QgTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhJiBvdGhlcikKICAg
ICA6IEVsZW1lbnRBdHRyaWJ1dGVEYXRhKG90aGVyLCBmYWxzZSkKIHsKKyAgICBBU1NFUlQoIW90
aGVyLm1fcHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUpOworCiAgICAgaWYgKG90aGVyLm1faW5s
aW5lU3R5bGUpIHsKICAgICAgICAgQVNTRVJUKCFvdGhlci5tX2lubGluZVN0eWxlLT5pc011dGFi
bGUoKSk7CiAgICAgICAgIG1faW5saW5lU3R5bGUgPSBvdGhlci5tX2lubGluZVN0eWxlLT5pbW11
dGFibGVDb3B5SWZOZWVkZWQoKTsKQEAgLTg0LDcgKzg2LDYgQEAgRWxlbWVudEF0dHJpYnV0ZURh
dGE6OkVsZW1lbnRBdHRyaWJ1dGVEYXRhKGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRhJiBvdGhl
ciwgYm8KICAgICAsIG1fYXJyYXlTaXplKGlzTXV0YWJsZSA/IDAgOiBvdGhlci5sZW5ndGgoKSkK
ICAgICAsIG1fcHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGVJc0RpcnR5KG90aGVyLm1fcHJlc2Vu
dGF0aW9uQXR0cmlidXRlU3R5bGVJc0RpcnR5KQogICAgICwgbV9zdHlsZUF0dHJpYnV0ZUlzRGly
dHkob3RoZXIubV9zdHlsZUF0dHJpYnV0ZUlzRGlydHkpCi0gICAgLCBtX3ByZXNlbnRhdGlvbkF0
dHJpYnV0ZVN0eWxlKG90aGVyLm1fcHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUpCiAgICAgLCBt
X2NsYXNzTmFtZXMob3RoZXIubV9jbGFzc05hbWVzKQogICAgICwgbV9pZEZvclN0eWxlUmVzb2x1
dGlvbihvdGhlci5tX2lkRm9yU3R5bGVSZXNvbHV0aW9uKQogewpAQCAtOTMsNiArOTQsNyBAQCBF
bGVtZW50QXR0cmlidXRlRGF0YTo6RWxlbWVudEF0dHJpYnV0ZURhdGEoY29uc3QgRWxlbWVudEF0
dHJpYnV0ZURhdGEmIG90aGVyLCBibwogCiBNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGE6Ok11
dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YShjb25zdCBNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURh
dGEmIG90aGVyKQogICAgIDogRWxlbWVudEF0dHJpYnV0ZURhdGEob3RoZXIsIHRydWUpCisgICAg
LCBtX3ByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKG90aGVyLm1fcHJlc2VudGF0aW9uQXR0cmli
dXRlU3R5bGUpCiAgICAgLCBtX2F0dHJpYnV0ZVZlY3RvcihvdGhlci5tX2F0dHJpYnV0ZVZlY3Rv
cikKIHsKICAgICBtX2lubGluZVN0eWxlID0gb3RoZXIubV9pbmxpbmVTdHlsZSA/IG90aGVyLm1f
aW5saW5lU3R5bGUtPmNvcHkoKSA6IDA7CkBAIC0xNjEsMTEgKzE2MywxMiBAQCB2b2lkIEVsZW1l
bnRBdHRyaWJ1dGVEYXRhOjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1v
cnlPYmplY3RJbmZvKQogICAgIHNpemVfdCBhY3R1YWxTaXplID0gbV9pc011dGFibGUgPyBzaXpl
b2YoRWxlbWVudEF0dHJpYnV0ZURhdGEpIDogc2l6ZUZvckltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1
dGVEYXRhV2l0aEF0dHJpYnV0ZUNvdW50KG1fYXJyYXlTaXplKTsKICAgICBNZW1vcnlDbGFzc0lu
Zm8gaW5mbyhtZW1vcnlPYmplY3RJbmZvLCB0aGlzLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkRPTSwg
YWN0dWFsU2l6ZSk7CiAgICAgaW5mby5hZGRNZW1iZXIobV9pbmxpbmVTdHlsZSk7Ci0gICAgaW5m
by5hZGRNZW1iZXIobV9wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSk7CiAgICAgaW5mby5hZGRN
ZW1iZXIobV9jbGFzc05hbWVzKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX2lkRm9yU3R5bGVSZXNv
bHV0aW9uKTsKLSAgICBpZiAobV9pc011dGFibGUpCisgICAgaWYgKG1faXNNdXRhYmxlKSB7Cisg
ICAgICAgIGluZm8uYWRkTWVtYmVyKHByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpOwogICAg
ICAgICBpbmZvLmFkZE1lbWJlcihtdXRhYmxlQXR0cmlidXRlVmVjdG9yKCkpOworICAgIH0KICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBsZW4gPSBsZW5ndGgoKTsgaSA8IGxlbjsgaSsrKQogICAg
ICAgICBpbmZvLmFkZE1lbWJlcigqYXR0cmlidXRlSXRlbShpKSk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuaCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5oCmluZGV4IGQ1Y2VhNDUuLjE5NzlkYTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5oCkBAIC01Niw4ICs1Niw4IEBA
IHB1YmxpYzoKIAogICAgIGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIGlubGluZVN0eWxlKCkgY29u
c3QgeyByZXR1cm4gbV9pbmxpbmVTdHlsZS5nZXQoKTsgfQogCi0gICAgY29uc3QgU3R5bGVQcm9w
ZXJ0eVNldCogcHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3By
ZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlLmdldCgpOyB9Ci0gICAgdm9pZCBzZXRQcmVzZW50YXRp
b25BdHRyaWJ1dGVTdHlsZShQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IHN0eWxlKSBjb25z
dCB7IG1fcHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUgPSBzdHlsZTsgfQorICAgIGNvbnN0IFN0
eWxlUHJvcGVydHlTZXQqIHByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkgY29uc3Q7CisgICAg
dm9pZCBzZXRQcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZShQYXNzUmVmUHRyPFN0eWxlUHJvcGVy
dHlTZXQ+KSBjb25zdDsKIAogICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdDsKICAgICBib29sIGlz
RW1wdHkoKSBjb25zdCB7IHJldHVybiAhbGVuZ3RoKCk7IH0KQEAgLTEwNyw3ICsxMDcsNiBAQCBw
cm90ZWN0ZWQ6CiAgICAgbXV0YWJsZSB1bnNpZ25lZCBtX3N0eWxlQXR0cmlidXRlSXNEaXJ0eSA6
IDE7CiAKICAgICBtdXRhYmxlIFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBtX2lubGluZVN0eWxl
OwotICAgIG11dGFibGUgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IG1fcHJlc2VudGF0aW9uQXR0
cmlidXRlU3R5bGU7CiAgICAgbXV0YWJsZSBTcGFjZVNwbGl0U3RyaW5nIG1fY2xhc3NOYW1lczsK
ICAgICBtdXRhYmxlIEF0b21pY1N0cmluZyBtX2lkRm9yU3R5bGVSZXNvbHV0aW9uOwogCkBAIC0x
NDMsNiArMTQyLDcgQEAgcHVibGljOgogICAgIE11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YShj
b25zdCBJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSYpOwogICAgIE11dGFibGVFbGVtZW50
QXR0cmlidXRlRGF0YShjb25zdCBNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEmKTsKIAorICAg
IG11dGFibGUgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IG1fcHJlc2VudGF0aW9uQXR0cmlidXRl
U3R5bGU7CiAgICAgVmVjdG9yPEF0dHJpYnV0ZSwgND4gbV9hdHRyaWJ1dGVWZWN0b3I7CiB9Owog
CkBAIC0xNzEsNiArMTcxLDE5IEBAIGlubGluZSBzaXplX3QgRWxlbWVudEF0dHJpYnV0ZURhdGE6
Omxlbmd0aCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fYXJyYXlTaXplOwogfQogCitpbmxpbmUgY29u
c3QgU3R5bGVQcm9wZXJ0eVNldCogRWxlbWVudEF0dHJpYnV0ZURhdGE6OnByZXNlbnRhdGlvbkF0
dHJpYnV0ZVN0eWxlKCkgY29uc3QKK3sKKyAgICBpZiAoIW1faXNNdXRhYmxlKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgTXV0YWJsZUVsZW1lbnRBdHRy
aWJ1dGVEYXRhKj4odGhpcyktPm1fcHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUuZ2V0KCk7Cit9
CisKK2lubGluZSB2b2lkIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpzZXRQcmVzZW50YXRpb25BdHRy
aWJ1dGVTdHlsZShQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IHN0eWxlKSBjb25zdAorewor
ICAgIEFTU0VSVChtX2lzTXV0YWJsZSk7CisgICAgc3RhdGljX2Nhc3Q8Y29uc3QgTXV0YWJsZUVs
ZW1lbnRBdHRyaWJ1dGVEYXRhKj4odGhpcyktPm1fcHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUg
PSBzdHlsZTsKK30KKwogaW5saW5lIEF0dHJpYnV0ZSogRWxlbWVudEF0dHJpYnV0ZURhdGE6Omdl
dEF0dHJpYnV0ZUl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBib29sIHNob3VsZElnbm9y
ZUF0dHJpYnV0ZUNhc2UpCiB7CiAgICAgc2l6ZV90IGluZGV4ID0gZ2V0QXR0cmlidXRlSXRlbUlu
ZGV4KG5hbWUsIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1N0eWxl
ZEVsZW1lbnQuY3BwCmluZGV4IDA2NDlhZTYuLjI3YzMxNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU3R5
bGVkRWxlbWVudC5jcHAKQEAgLTE2MSw5ICsxNjEsNyBAQCB2b2lkIFN0eWxlZEVsZW1lbnQ6OmF0
dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3Ry
aQogICAgIGlmIChuYW1lID09IHN0eWxlQXR0cikKICAgICAgICAgc3R5bGVBdHRyaWJ1dGVDaGFu
Z2VkKG5ld1ZhbHVlKTsKICAgICBlbHNlIGlmIChpc1ByZXNlbnRhdGlvbkF0dHJpYnV0ZShuYW1l
KSkgewotICAgICAgICAvLyBBdm9pZCBkaXJ0eWluZyB0aGUgcHJlc2VudGF0aW9uIGF0dHJpYnV0
ZSBzdHlsZSBpZiB3ZSdyZSB1c2luZyBzaGFyZWQgYXR0cmlidXRlIGRhdGEgd2l0aCBhbHJlYWR5
IGdlbmVyYXRlZCBzdHlsZS4KLSAgICAgICAgaWYgKGF0dHJpYnV0ZURhdGEoKS0+aXNNdXRhYmxl
KCkgfHwgIWF0dHJpYnV0ZURhdGEoKS0+bV9wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSkKLSAg
ICAgICAgICAgIGF0dHJpYnV0ZURhdGEoKS0+bV9wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZUlz
RGlydHkgPSB0cnVlOworICAgICAgICBhdHRyaWJ1dGVEYXRhKCktPm1fcHJlc2VudGF0aW9uQXR0
cmlidXRlU3R5bGVJc0RpcnR5ID0gdHJ1ZTsKICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhJ
bmxpbmVTdHlsZUNoYW5nZSk7CiAgICAgfQogCkBAIC0zNDIsOCArMzQwLDExIEBAIHZvaWQgU3R5
bGVkRWxlbWVudDo6cmVidWlsZFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkKICAgICAgICAg
fQogICAgIH0KIAotICAgIGF0dHJpYnV0ZURhdGEoKS0+bV9wcmVzZW50YXRpb25BdHRyaWJ1dGVT
dHlsZUlzRGlydHkgPSBmYWxzZTsKLSAgICBhdHRyaWJ1dGVEYXRhKCktPnNldFByZXNlbnRhdGlv
bkF0dHJpYnV0ZVN0eWxlKHN0eWxlLT5pc0VtcHR5KCkgPyAwIDogc3R5bGUpOworICAgIC8vIElt
bXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhIGRvZXNuJ3Qgc3RvcmUgcHJlc2VudGF0aW9uIGF0
dHJpYnV0ZSBzdHlsZSwgc28gbWFrZSBzdXJlIHdlIGhhdmUgYSBNdXRhYmxlRWxlbWVudEF0dHJp
YnV0ZURhdGEuCisgICAgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJpYnV0ZURhdGEgPSBtdXRh
YmxlQXR0cmlidXRlRGF0YSgpOworCisgICAgYXR0cmlidXRlRGF0YS0+bV9wcmVzZW50YXRpb25B
dHRyaWJ1dGVTdHlsZUlzRGlydHkgPSBmYWxzZTsKKyAgICBhdHRyaWJ1dGVEYXRhLT5zZXRQcmVz
ZW50YXRpb25BdHRyaWJ1dGVTdHlsZShzdHlsZS0+aXNFbXB0eSgpID8gMCA6IHN0eWxlKTsKIAog
ICAgIGlmICghY2FjaGVIYXNoIHx8IGNhY2hlSXRlcmF0b3ItPnZhbHVlKQogICAgICAgICByZXR1
cm47Cg==
</data>
<flag name="review"
          id="190767"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>