<?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>128893</bug_id>
          
          <creation_ts>2014-02-17 00:56:39 -0800</creation_ts>
          <short_desc>jsDocumentPrototypeFunctionGetElementById should not create an AtomicString for the function argument</short_desc>
          <delta_ts>2014-02-21 14:42:30 -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>New Bugs</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="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>ap</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>d-r</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>fmalita</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>pdr</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>981346</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-02-17 00:56:39 -0800</bug_when>
    <thetext>jsDocumentPrototypeFunctionGetElementById should not create an AtomicString for the function argument</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>981347</commentid>
    <comment_count>1</comment_count>
      <attachid>224340</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-02-17 01:11:21 -0800</bug_when>
    <thetext>Created attachment 224340
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>981524</commentid>
    <comment_count>2</comment_count>
      <attachid>224340</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-02-17 10:33:10 -0800</bug_when>
    <thetext>Comment on attachment 224340
Patch

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

&gt; Source/WTF/wtf/text/AtomicString.h:92
&gt; +    static AtomicStringImpl* find(StringImpl* string)
&gt; +    {
&gt; +        if (!string || string-&gt;isAtomic())
&gt; +            return static_cast&lt;AtomicStringImpl*&gt;(string);

Is this correct? We don&apos;t perform any searching whenever the argument is an atomic string.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>981562</commentid>
    <comment_count>3</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-02-17 11:21:50 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 224340 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=224340&amp;action=review
&gt; 
&gt; &gt; Source/WTF/wtf/text/AtomicString.h:92
&gt; &gt; +    static AtomicStringImpl* find(StringImpl* string)
&gt; &gt; +    {
&gt; &gt; +        if (!string || string-&gt;isAtomic())
&gt; &gt; +            return static_cast&lt;AtomicStringImpl*&gt;(string);
&gt; 
&gt; Is this correct? We don&apos;t perform any searching whenever the argument is an atomic string.

The flag &quot;isAtomic&quot; marks strings that are in the atomic string table. If the flag is set on the current StringImpl, that string is what would be returned by find().

You remind me of something. I am supposed to assert that the string is in the right string table (in case of multithread).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>981574</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-02-17 11:34:12 -0800</bug_when>
    <thetext>My bad, I somehow overlooked that this function is static, and thought that this was about finding a substring!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>982424</commentid>
    <comment_count>5</comment_count>
      <attachid>224340</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-02-19 10:46:40 -0800</bug_when>
    <thetext>Comment on attachment 224340
Patch

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

Seems to me that in the future we might want to have functions like this take a StringView rather than a const String&amp;.

&gt; Source/WTF/wtf/text/AtomicString.cpp:407
&gt; +AtomicStringImpl* AtomicString::findStringWithHash(const StringImpl* stringImpl)

Since you’re renaming this, I suggest also changing it to take a reference instead of a pointer.

&gt; Source/WTF/wtf/text/AtomicString.cpp:452
&gt; +AtomicStringImpl* AtomicString::findSlowCase(StringImpl* string)

Seems like this should take a reference rather than a pointer.

&gt; Source/WTF/wtf/text/AtomicString.cpp:454
&gt; +    ASSERT_WITH_MESSAGE(!string-&gt;isAtomic(), &quot;We should not hit the slow case if the string is already atomic.&quot;);

Message seems to just repeat what the assertion says, not sure it’s helpful.

&gt; Source/WTF/wtf/text/AtomicString.cpp:461
&gt; +    HashSet&lt;StringImpl*&gt;&amp; atomicStringTable = stringTable();
&gt; +    auto iterator = atomicStringTable.find(string);
&gt; +    if (iterator != atomicStringTable.end())
&gt; +        return static_cast&lt;AtomicStringImpl*&gt;(*iterator);
&gt; +    return nullptr;

We really should add HashSet::get for cases like this one. If that existed, then this would be:

    return static_cast&lt;AtomicStringImpl*&gt;(stringTable().get(string));

I think that reads much better than the 5 lines of code above.

&gt; Source/WebCore/ChangeLog:31
&gt; +        When getting and AtomicString, the case of a empty string is not important, use isNull() instead.

typo: &quot;and&quot; instead of &quot;an&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>982425</commentid>
    <comment_count>6</comment_count>
      <attachid>224340</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-02-19 10:47:12 -0800</bug_when>
    <thetext>Comment on attachment 224340
Patch

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

&gt; Source/WebCore/ChangeLog:26
&gt; +        Now that there are two overloads for TreeScope::getElementById(), the conversion from NSString*
&gt; +        is ambiguous. I add the keyword ObjCExplicitAtomicString to force an explicit conversion to AtomicString.

I think this is really awkward. Lets try to find a better solution in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983375</commentid>
    <comment_count>7</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-02-21 14:42:30 -0800</bug_when>
    <thetext>Committed r164505: &lt;http://trac.webkit.org/changeset/164505&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>224340</attachid>
            <date>2014-02-17 01:11:21 -0800</date>
            <delta_ts>2014-02-19 10:47:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-128893-20140217011117.patch</filename>
            <type>text/plain</type>
            <size>17209</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNjQyMTEpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDE0LTAyLTE3ICBCZW5qYW1pbiBQb3VsYWluICA8
YmVuamFtaW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBqc0RvY3VtZW50UHJvdG90eXBlRnVuY3Rp
b25HZXRFbGVtZW50QnlJZCBzaG91bGQgbm90IGNyZWF0ZSBhbiBBdG9taWNTdHJpbmcgZm9yIHRo
ZSBmdW5jdGlvbiBhcmd1bWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTI4ODkzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQXRvbWljU3RyaW5nOjpmaW5kKCkgaXMgYSBzcGVjaWFsIGNhc2Ugb3B0aW1p
emVkIGZvciB0aGUgSmF2YVNjcmlwdCBiaW5kaW5ncy4gVGhlIG1ldGhvZCBjYW4gb25seQorICAg
ICAgICBiZSBjYWxsZWQgdW5kZXIgc3BlY2lmaWMgY29uZGl0aW9ucy4KKyAgICAgICAgVGhlIG1l
dGhvZCBpcyByZW5hbWVkIHRvIGZpbmRTdHJpbmdXaXRoSGFzaCgpLgorCisgICAgICAgIFRoZSBu
ZXcgQXRvbWljU3RyaW5nOjpmaW5kIGlzIGdlbmVyaWMgYW5kIGRvZXMgbm90IHJlcXVpcmUgYW55
IHByb3Blcnkgb24gdGhlIGlucHV0LgorCisgICAgICAgICogd3RmL3RleHQvQXRvbWljU3RyaW5n
LmNwcDoKKyAgICAgICAgKFdURjo6QXRvbWljU3RyaW5nOjpmaW5kU3RyaW5nV2l0aEhhc2gpOgor
ICAgICAgICAoV1RGOjpBdG9taWNTdHJpbmc6OmZpbmRTbG93Q2FzZSk6CisgICAgICAgICogd3Rm
L3RleHQvQXRvbWljU3RyaW5nLmg6CisgICAgICAgIChXVEY6OkF0b21pY1N0cmluZzo6ZmluZCk6
CisKIDIwMTQtMDItMTUgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAg
ICBGVEwgc2hvdWxkIGlubGluZSBwb2x5bW9ycGhpYyBoZWFwIGFjY2Vzc2VzCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvdGV4dC9BdG9taWNTdHJpbmcuY3BwCShyZXZpc2lvbiAxNjQyMDIpCisrKyBTb3VyY2Uv
V1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwNCw3ICs0
MDQsNyBAQCBzdGF0aWMgaW5saW5lIEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjppdGVyCiAgICAgcmV0
dXJuIHN0cmluZ1RhYmxlKCkuZmluZDxIYXNoQW5kQ2hhcmFjdGVyc1RyYW5zbGF0b3I8Q2hhcmFj
dGVyVHlwZT4+KGJ1ZmZlcik7CiB9CiAKLUF0b21pY1N0cmluZ0ltcGwqIEF0b21pY1N0cmluZzo6
ZmluZChjb25zdCBTdHJpbmdJbXBsKiBzdHJpbmdJbXBsKQorQXRvbWljU3RyaW5nSW1wbCogQXRv
bWljU3RyaW5nOjpmaW5kU3RyaW5nV2l0aEhhc2goY29uc3QgU3RyaW5nSW1wbCogc3RyaW5nSW1w
bCkKIHsKICAgICBBU1NFUlQoc3RyaW5nSW1wbCk7CiAgICAgQVNTRVJUKHN0cmluZ0ltcGwtPmV4
aXN0aW5nSGFzaCgpKTsKQEAgLTQ0OSw2ICs0NDksMTggQEAgQXRvbWljU3RyaW5nIEF0b21pY1N0
cmluZzo6bG93ZXIoKSBjb25zdAogICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIAorQXRvbWlj
U3RyaW5nSW1wbCogQXRvbWljU3RyaW5nOjpmaW5kU2xvd0Nhc2UoU3RyaW5nSW1wbCogc3RyaW5n
KQoreworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIXN0cmluZy0+aXNBdG9taWMoKSwgIldlIHNo
b3VsZCBub3QgaGl0IHRoZSBzbG93IGNhc2UgaWYgdGhlIHN0cmluZyBpcyBhbHJlYWR5IGF0b21p
Yy4iKTsKKworICAgIEF0b21pY1N0cmluZ1RhYmxlTG9ja2VyIGxvY2tlcjsKKyAgICBIYXNoU2V0
PFN0cmluZ0ltcGwqPiYgYXRvbWljU3RyaW5nVGFibGUgPSBzdHJpbmdUYWJsZSgpOworICAgIGF1
dG8gaXRlcmF0b3IgPSBhdG9taWNTdHJpbmdUYWJsZS5maW5kKHN0cmluZyk7CisgICAgaWYgKGl0
ZXJhdG9yICE9IGF0b21pY1N0cmluZ1RhYmxlLmVuZCgpKQorICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8QXRvbWljU3RyaW5nSW1wbCo+KCppdGVyYXRvcik7CisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKIEF0b21pY1N0cmluZyBBdG9taWNTdHJpbmc6OmZyb21VVEY4SW50ZXJuYWwoY29uc3Qg
Y2hhciogY2hhcmFjdGVyc1N0YXJ0LCBjb25zdCBjaGFyKiBjaGFyYWN0ZXJzRW5kKQogewogICAg
IEhhc2hBbmRVVEY4Q2hhcmFjdGVycyBidWZmZXI7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0
L0F0b21pY1N0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWlj
U3RyaW5nLmgJKHJldmlzaW9uIDE2NDIwMikKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWlj
U3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDEzIEBAIHB1YmxpYzoKICAgICBB
dG9taWNTdHJpbmcoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKSA6IG1fc3RyaW5nKFdU
Rjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKSB7IH0KICAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRl
ZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUo
KTsgfQogCi0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBBdG9taWNTdHJpbmdJbXBs
KiBmaW5kKGNvbnN0IFN0cmluZ0ltcGwqKTsKKyAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc3Rh
dGljIEF0b21pY1N0cmluZ0ltcGwqIGZpbmRTdHJpbmdXaXRoSGFzaChjb25zdCBTdHJpbmdJbXBs
Kik7CisgICAgc3RhdGljIEF0b21pY1N0cmluZ0ltcGwqIGZpbmQoU3RyaW5nSW1wbCogc3RyaW5n
KQorICAgIHsKKyAgICAgICAgaWYgKCFzdHJpbmcgfHwgc3RyaW5nLT5pc0F0b21pYygpKQorICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEF0b21pY1N0cmluZ0ltcGwqPihzdHJpbmcpOwor
ICAgICAgICByZXR1cm4gZmluZFNsb3dDYXNlKHN0cmluZyk7CisgICAgfQogCiAgICAgb3BlcmF0
b3IgY29uc3QgU3RyaW5nJigpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nOyB9CiAgICAgY29uc3Qg
U3RyaW5nJiBzdHJpbmcoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZzsgfTsKQEAgLTE5MCw2ICsx
OTYsNyBAQCBwcml2YXRlOgogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgUGFzc1Jl
ZlB0cjxTdHJpbmdJbXBsPiBhZGQoQ0ZTdHJpbmdSZWYpOwogI2VuZGlmCiAKKyAgICBXVEZfRVhQ
T1JUX1NUUklOR19BUEkgc3RhdGljIEF0b21pY1N0cmluZ0ltcGwqIGZpbmRTbG93Q2FzZShTdHJp
bmdJbXBsKik7CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBBdG9taWNTdHJpbmcg
ZnJvbVVURjhJbnRlcm5hbChjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOwogCiAjaWYgIUFTU0VS
VF9ESVNBQkxFRApJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY0MjExKQorKysgU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTUgQEAKKzIwMTQtMDIt
MTcgIEJlbmphbWluIFBvdWxhaW4gIDxiZW5qYW1pbkB3ZWJraXQub3JnPgorCisgICAgICAgIGpz
RG9jdW1lbnRQcm90b3R5cGVGdW5jdGlvbkdldEVsZW1lbnRCeUlkIHNob3VsZCBub3QgY3JlYXRl
IGFuIEF0b21pY1N0cmluZyBmb3IgdGhlIGZ1bmN0aW9uIGFyZ3VtZW50CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjg4OTMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgZGVjbGFyYXRpb24gb2YgVHJl
ZVNjb3BlOjpnZXRFbGVtZW50QnlJZCgpIHdhcyB0YWtpbmcgYW4gQXRvbWljU3RyaW5nIGFzIHRo
ZSBwYXJhbWV0ZXIuCisgICAgICAgIEJlY2F1c2Ugb2YgdGhpcywgYWxsIHRoZSBjYWxsIHNpdGVz
IG1hbmlwdWxhdGluZyBTdHJpbmcgd2VyZSBjcmVhdGluZyBhbmQga2VlcGluZyBhbGl2ZSBhbiBB
dG9taWNTdHJpbmcKKyAgICAgICAgdG8gbWFrZSB0aGUgY2FsbC4KKworICAgICAgICBUaGlzIGhh
ZCB0d28gbmVnYXRpdmUgY29uc2VxdWVuY2VzOgorICAgICAgICAtVGhlIGNhbGwgc2l0ZXMgd2Vy
ZSByZWYtaW5nIHRoZSBJRCdzIGF0b21pYyBzdHJpbmcgZm9yIG5vIHJlYXNvbi4KKyAgICAgICAg
LVdoZW4gdGhlcmUgaXMgbm8gSUQgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbnB1dCBzdHJpbmcsIGFu
IGF0b21pYyBzdHJpbmcgd2FzIGNyZWF0ZWQgZm9yIHRoZSBzb2xlCisgICAgICAgICBwdXJwb3Nl
IG9mIGZhaWxpbmcgdGhlIHF1ZXJ5LiBTaW5jZSBJRHMgYXJlIHN0b3JlZCBhcyBBdG9taWNTdHJp
bmcsIGlmIHRoZXJlIGlzIG5vdCBhbiBleGlzdGluZworICAgICAgICAgQXRvbWljU3RyaW5nIGZv
ciB0aGUgaW5wdXQsIHRoZXJlIGlzIG5vIHJlYXNvbiB0byBxdWVyeSBhbnl0aGluZy4KKworICAg
ICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGlu
Zy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaW5kQXRvbWljU3RyaW5nKTogVXBkYXRlIHRoaXMg
YWZ0ZXIgdGhlIHJlbmFtZS4KKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvck9iakMucG06CisgICAgICAgIChHZW5lcmF0ZUltcGxlbWVudGF0aW9uKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0OgorICAgICAgICBOb3cgdGhhdCB0
aGVyZSBhcmUgdHdvIG92ZXJsb2FkcyBmb3IgVHJlZVNjb3BlOjpnZXRFbGVtZW50QnlJZCgpLCB0
aGUgY29udmVyc2lvbiBmcm9tIE5TU3RyaW5nKgorICAgICAgICBpcyBhbWJpZ3VvdXMuIEkgYWRk
IHRoZSBrZXl3b3JkIE9iakNFeHBsaWNpdEF0b21pY1N0cmluZyB0byBmb3JjZSBhbiBleHBsaWNp
dCBjb252ZXJzaW9uIHRvIEF0b21pY1N0cmluZy4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5p
ZGw6CisgICAgICAgICogZG9tL1RyZWVTY29wZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUcmVl
U2NvcGU6OmdldEVsZW1lbnRCeUlkKToKKyAgICAgICAgV2hlbiBnZXR0aW5nIGFuZCBBdG9taWNT
dHJpbmcsIHRoZSBjYXNlIG9mIGEgZW1wdHkgc3RyaW5nIGlzIG5vdCBpbXBvcnRhbnQsIHVzZSBp
c051bGwoKSBpbnN0ZWFkLgorICAgICAgICBXaGVuIGdldHRpbmcgYSBTdHJpbmcsIGdldCB0aGUg
Y29ycmVzcG9uZGluZyBBdG9taWNTdHJpbmcgaWYgYW55IGFuZCB1c2UgdGhhdCBmb3IgZ2V0dGlu
ZyB0aGUgZWxlbWVudC4KKworICAgICAgICAqIGRvbS9UcmVlU2NvcGUuaDoKKyAgICAgICAgKiBo
dG1sL0ZUUERpcmVjdG9yeURvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZUUERpcmVj
dG9yeURvY3VtZW50UGFyc2VyOjpsb2FkRG9jdW1lbnRUZW1wbGF0ZSk6CisgICAgICAgIFNvbHZl
IHRoZSBhbWJpZ3VvdXMgY2FsbC4KKworICAgICAgICAqIHN2Zy9TVkdBRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdBRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAg
ICAgIFRoaXMgaXMgYSB3b25kZXJmdWwgY2FuZGlkYXRlIGZvciBzdWJzdHJpbmdTaGFyaW5nSW1w
bC4gVGhlIHN1YnN0cmluZyBkb2VzIG5vdCBzdXJ2aXZlIHRoZSBjYWxsIHNpbmNlCisgICAgICAg
IHRoZSBuZXcgZ2V0RWxlbWVudEJ5SWQgbmV2ZXIgY3JlYXRlIGFueSBBdG9taWNTdHJpbmcuCisK
KyAgICAgICAgKiBzdmcvU1ZHU1ZHRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdT
VkdFbGVtZW50OjpnZXRFbGVtZW50QnlJZCk6CisgICAgICAgIEl0IGxvb2tzIGxpa2UgdGhlcmUg
YXJlIG9wcG9ydHVuaXRpZXMgdG8gZ2V0IGZhc3RlciBoZXJlLCBSeW9zdWtlIHNob3VsZCBoYXZl
IGEgbG9vay4KKworICAgICAgICAqIHN2Zy9TVkdTVkdFbGVtZW50Lmg6CisgICAgICAgICogeG1s
L1hNTFRyZWVWaWV3ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MVHJlZVZpZXdlcjo6dHJh
bnNmb3JtRG9jdW1lbnRUb1RyZWVWaWV3KToKKyAgICAgICAgVW5yZWxhdGVkIGNsZWFudXA6IG5v
U3R5bGVNZXNzYWdlIHdhcyB1c2VsZXNzLgorCiAyMDE0LTAyLTE2ICBBbmRyZWFzIEtsaW5nICA8
YWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBFbnN1cmUgdGhhdCByZW1vdmluZyBhbiBpZnJh
bWUgZnJvbSB0aGUgRE9NIHRyZWUgZGlzY29ubmVjdHMgaXRzIEZyYW1lLgpJbmRleDogU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5leHAuaW4JKHJldmlzaW9uIDE2NDIwMikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
ZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0xODcwLDcgKzE4NzAsNyBAQCBfX1pOSzdXZWJDb3Jl
OUlubGluZUJveDIyY2FuQWNjb21tb2RhdGVFCiBfX1pOSzdXZWJDb3JlOVBhZ2VDYWNoZTEwZnJh
bWVDb3VudEV2CiBfX1pOSzdXZWJDb3JlOVJlbmRlckJveDExY2xpZW50V2lkdGhFdgogX19aTks3
V2ViQ29yZTlSZW5kZXJCb3gxMmNsaWVudEhlaWdodEV2Ci1fX1pOSzdXZWJDb3JlOVRyZWVTY29w
ZTE0Z2V0RWxlbWVudEJ5SWRFUktOM1dURjEyQXRvbWljU3RyaW5nRQorX19aTks3V2ViQ29yZTlU
cmVlU2NvcGUxNGdldEVsZW1lbnRCeUlkRVJLTjNXVEY2U3RyaW5nRQogX19aVFZON1dlYkNvcmUx
MkNocm9tZUNsaWVudEUKIF9fWlRWTjdXZWJDb3JlMTRMb2FkZXJTdHJhdGVneUUKIF9fWlRWTjdX
ZWJDb3JlMTRTdGF0aWNOb2RlTGlzdEUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQmluZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01CaW5kaW5nLmNwcAkocmV2aXNpb24gMTY0MjAyKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEw
OCw3IEBAIEF0b21pY1N0cmluZ0ltcGwqIGZpbmRBdG9taWNTdHJpbmcoUHJvcGUKICAgICBpZiAo
IWltcGwpCiAgICAgICAgIHJldHVybiAwOwogICAgIEFTU0VSVChpbXBsLT5leGlzdGluZ0hhc2go
KSk7Ci0gICAgcmV0dXJuIEF0b21pY1N0cmluZzo6ZmluZChpbXBsKTsKKyAgICByZXR1cm4gQXRv
bWljU3RyaW5nOjpmaW5kU3RyaW5nV2l0aEhhc2goaW1wbCk7CiB9CiAKIFN0cmluZyB2YWx1ZVRv
U3RyaW5nV2l0aE51bGxDaGVjayhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JPYmpDLnBtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ck9iakMucG0JKHJldmlzaW9uIDE2NDIwMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvck9iakMucG0JKHdvcmtpbmcgY29weSkKQEAgLTE2NjYsNyArMTY2
NiwxMiBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgIEFkZElu
Y2x1ZGVzRm9yVHlwZSgkcGFyYW0tPnR5cGUpOwogCiAgICAgICAgICAgICAgICAgbXkgJGlkbFR5
cGUgPSAkcGFyYW0tPnR5cGU7Ci0gICAgICAgICAgICAgICAgbXkgJGltcGxHZXR0ZXIgPSBHZXRP
YmpDVHlwZUdldHRlcigkcGFyYW1OYW1lLCAkaWRsVHlwZSk7CisgICAgICAgICAgICAgICAgbXkg
JGltcGxHZXR0ZXI7CisgICAgICAgICAgICAgICAgaWYgKCRwYXJhbS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57Ik9iakNFeHBsaWNpdEF0b21pY1N0cmluZyJ9KSB7CisgICAgICAgICAgICAgICAgICAg
ICRpbXBsR2V0dGVyID0gIkF0b21pY1N0cmluZygkcGFyYW1OYW1lKSIKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAkaW1wbEdldHRlciA9IEdldE9iakNUeXBl
R2V0dGVyKCRwYXJhbU5hbWUsICRpZGxUeXBlKTsKKyAgICAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgICAgICBwdXNoKEBwYXJhbWV0ZXJOYW1lcywgJGltcGxHZXR0ZXIpOwogICAgICAgICAg
ICAgICAgICRuZWVkc0N1c3RvbXsiWFBhdGhOU1Jlc29sdmVyIn0gPSAkcGFyYW1OYW1lIGlmICRp
ZGxUeXBlIGVxICJYUGF0aE5TUmVzb2x2ZXIiOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0CShyZXZpc2lvbiAxNjQyMDIpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC04OCw2ICs4OCw3IEBAIE5vSW50ZXJmYWNlT2JqZWN0CiBOb3RFbnVtZXJh
YmxlCiBOb3REZWxldGFibGUKIE9iakNDdXN0b21JbXBsZW1lbnRhdGlvbgorT2JqQ0V4cGxpY2l0
QXRvbWljU3RyaW5nCiBPYmpDTGVnYWN5VW5uYW1lZFBhcmFtZXRlcnMKIE9iakNQb2x5bW9ycGhp
YwogT2JqQ1Byb3RvY29sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaWRsCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwJKHJldmlzaW9uIDE2
NDIwMikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwJKHdvcmtpbmcgY29weSkK
QEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyZWF0TnVsbEFzPU51bGxTdHJp
bmcsRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIERPTVN0cmluZyBxdWFsaWZpZWROYW1lKTsK
ICAgICBbT2JqQ0xlZ2FjeVVubmFtZWRQYXJhbWV0ZXJzXSBOb2RlTGlzdCBnZXRFbGVtZW50c0J5
VGFnTmFtZU5TKFtUcmVhdE51bGxBcz1OdWxsU3RyaW5nLERlZmF1bHQ9VW5kZWZpbmVkXSBvcHRp
b25hbCBET01TdHJpbmcgbmFtZXNwYWNlVVJJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgW0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCBET01T
dHJpbmcgbG9jYWxOYW1lKTsKLSAgICBFbGVtZW50IGdldEVsZW1lbnRCeUlkKFtEZWZhdWx0PVVu
ZGVmaW5lZF0gb3B0aW9uYWwgRE9NU3RyaW5nIGVsZW1lbnRJZCk7CisgICAgRWxlbWVudCBnZXRF
bGVtZW50QnlJZChbRGVmYXVsdD1VbmRlZmluZWQsT2JqQ0V4cGxpY2l0QXRvbWljU3RyaW5nXSBv
cHRpb25hbCBET01TdHJpbmcgZWxlbWVudElkKTsKIAogICAgIC8vIERPTSBMZXZlbCAzIENvcmUK
IApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAJKHJldmlzaW9uIDE2NDIwMikKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsMTMg
KzEwMiwyNCBAQCB2b2lkIFRyZWVTY29wZTo6c2V0UGFyZW50VHJlZVNjb3BlKFRyZWVTCiAKIEVs
ZW1lbnQqIFRyZWVTY29wZTo6Z2V0RWxlbWVudEJ5SWQoY29uc3QgQXRvbWljU3RyaW5nJiBlbGVt
ZW50SWQpIGNvbnN0CiB7Ci0gICAgaWYgKGVsZW1lbnRJZC5pc0VtcHR5KCkpCisgICAgaWYgKGVs
ZW1lbnRJZC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKCFtX2Vs
ZW1lbnRzQnlJZCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIG1fZWxlbWVu
dHNCeUlkLT5nZXRFbGVtZW50QnlJZCgqZWxlbWVudElkLmltcGwoKSwgKnRoaXMpOwogfQogCitF
bGVtZW50KiBUcmVlU2NvcGU6OmdldEVsZW1lbnRCeUlkKGNvbnN0IFN0cmluZyYgZWxlbWVudElk
KSBjb25zdAoreworICAgIGlmICghbV9lbGVtZW50c0J5SWQpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgaWYgKEF0b21pY1N0cmluZ0ltcGwqIGF0b21pY0VsZW1lbnRJZCA9IEF0b21p
Y1N0cmluZzo6ZmluZChlbGVtZW50SWQuaW1wbCgpKSkKKyAgICAgICAgcmV0dXJuIG1fZWxlbWVu
dHNCeUlkLT5nZXRFbGVtZW50QnlJZCgqYXRvbWljRWxlbWVudElkLCAqdGhpcyk7CisKKyAgICBy
ZXR1cm4gbnVsbHB0cjsKK30KKwogY29uc3QgVmVjdG9yPEVsZW1lbnQqPiogVHJlZVNjb3BlOjpn
ZXRBbGxFbGVtZW50c0J5SWQoY29uc3QgQXRvbWljU3RyaW5nJiBlbGVtZW50SWQpIGNvbnN0CiB7
CiAgICAgaWYgKGVsZW1lbnRJZC5pc0VtcHR5KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
VHJlZVNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5o
CShyZXZpc2lvbiAxNjQyMDIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDcgQEAgcHVibGljOgogCiAgICAgRWxlbWVudCogZm9j
dXNlZEVsZW1lbnQoKTsKICAgICBFbGVtZW50KiBnZXRFbGVtZW50QnlJZChjb25zdCBBdG9taWNT
dHJpbmcmKSBjb25zdDsKKyAgICBFbGVtZW50KiBnZXRFbGVtZW50QnlJZChjb25zdCBTdHJpbmcm
KSBjb25zdDsKICAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+KiBnZXRBbGxFbGVtZW50c0J5SWQo
Y29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7CiAgICAgYm9vbCBoYXNFbGVtZW50V2l0aElkKGNv
bnN0IEF0b21pY1N0cmluZ0ltcGwmKSBjb25zdDsKICAgICBib29sIGNvbnRhaW5zTXVsdGlwbGVF
bGVtZW50c1dpdGhJZChjb25zdCBBdG9taWNTdHJpbmcmIGlkKSBjb25zdDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxNjQy
MDIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0ZUUERpcmVjdG9yeURvY3VtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjk3LDcgKzI5Nyw3IEBAIGJvb2wgRlRQRGlyZWN0b3J5RG9jdW1lbnRQ
YXJzZXI6OmxvYWREb2MKIAogICAgIEhUTUxEb2N1bWVudFBhcnNlcjo6aW5zZXJ0KFN0cmluZyh0
ZW1wbGF0ZURvY3VtZW50RGF0YS0+ZGF0YSgpLCB0ZW1wbGF0ZURvY3VtZW50RGF0YS0+c2l6ZSgp
KSk7CiAKLSAgICBSZWZQdHI8RWxlbWVudD4gdGFibGVFbGVtZW50ID0gZG9jdW1lbnQoKS0+Z2V0
RWxlbWVudEJ5SWQoImZ0cERpcmVjdG9yeVRhYmxlIik7CisgICAgUmVmUHRyPEVsZW1lbnQ+IHRh
YmxlRWxlbWVudCA9IGRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKFN0cmluZyhBU0NJSUxpdGVy
YWwoImZ0cERpcmVjdG9yeVRhYmxlIikpKTsKICAgICBpZiAoIXRhYmxlRWxlbWVudCkKICAgICAg
ICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZmluZCBlbGVtZW50IGJ5IGlkIFwiZnRwRGlyZWN0b3J5
VGFibGVcIiBpbiB0aGUgdGVtcGxhdGUgZG9jdW1lbnQuIik7CiAgICAgZWxzZSBpZiAoIWlzSFRN
TFRhYmxlRWxlbWVudCh0YWJsZUVsZW1lbnQuZ2V0KCkpKQpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0FFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjQyMDIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsNyArMTU4LDcgQEAgdm9pZCBTVkdB
RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdgogICAgICAgICAgICAgU3RyaW5nIHVybCA9
IHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyhocmVmKCkpOwogCiAgICAgICAgICAg
ICBpZiAodXJsWzBdID09ICcjJykgewotICAgICAgICAgICAgICAgIEVsZW1lbnQqIHRhcmdldEVs
ZW1lbnQgPSB0cmVlU2NvcGUoKS5nZXRFbGVtZW50QnlJZCh1cmwuc3Vic3RyaW5nKDEpKTsKKyAg
ICAgICAgICAgICAgICBFbGVtZW50KiB0YXJnZXRFbGVtZW50ID0gdHJlZVNjb3BlKCkuZ2V0RWxl
bWVudEJ5SWQodXJsLnN1YnN0cmluZ1NoYXJpbmdJbXBsKDEpKTsKICAgICAgICAgICAgICAgICBp
ZiAodGFyZ2V0RWxlbWVudCAmJiBpc1NWR1NNSUxFbGVtZW50KCp0YXJnZXRFbGVtZW50KSkgewog
ICAgICAgICAgICAgICAgICAgICB0b1NWR1NNSUxFbGVtZW50KCp0YXJnZXRFbGVtZW50KS5iZWdp
bkJ5TGlua0FjdGl2YXRpb24oKTsKICAgICAgICAgICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1
bHRIYW5kbGVkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCShyZXZp
c2lvbiAxNjQyMDIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc2NSwxMiArNzY1LDEzIEBAIHZvaWQgU1ZHU1ZHRWxlbWVudDo6ZG9j
dW1lbnREaWRSZXN1bWVGcm8KIAogLy8gZ2V0RWxlbWVudEJ5SWQgb24gU1ZHU1ZHRWxlbWVudCBp
cyByZXN0cmljdGVkIHRvIG9ubHkgdGhlIGNoaWxkIHN1YnRyZWUgZGVmaW5lZCBieSB0aGUgPHN2
Zz4gZWxlbWVudC4KIC8vIFNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9zdHJ1Y3QuaHRt
bCNJbnRlcmZhY2VTVkdTVkdFbGVtZW50Ci1FbGVtZW50KiBTVkdTVkdFbGVtZW50OjpnZXRFbGVt
ZW50QnlJZChjb25zdCBBdG9taWNTdHJpbmcmIGlkKQorRWxlbWVudCogU1ZHU1ZHRWxlbWVudDo6
Z2V0RWxlbWVudEJ5SWQoY29uc3QgU3RyaW5nJiBpZCkKIHsKICAgICBFbGVtZW50KiBlbGVtZW50
ID0gdHJlZVNjb3BlKCkuZ2V0RWxlbWVudEJ5SWQoaWQpOwogICAgIGlmIChlbGVtZW50ICYmIGVs
ZW1lbnQtPmlzRGVzY2VuZGFudE9mKHRoaXMpKQogICAgICAgICByZXR1cm4gZWxlbWVudDsKIAor
ICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgdHJlZVNjb3BlKCkuZ2V0QWxsRWxlbWVudHNC
eUlkLgogICAgIC8vIEZhbGwgYmFjayB0byB0cmF2ZXJzaW5nIG91ciBzdWJ0cmVlLiBEdXBsaWNh
dGUgaWRzIGFyZSBhbGxvd2VkLCB0aGUgZmlyc3QgZm91bmQgd2lsbAogICAgIC8vIGJlIHJldHVy
bmVkLgogICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGRlc2NlbmRhbnRzT2ZUeXBlPEVsZW1lbnQ+
KCp0aGlzKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5oCShyZXZpc2lvbiAx
NjQyMDIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjIsNyArMTIyLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXR1cEluaXRpYWxW
aWV3KGNvbnN0IFN0cmluZyYgZnJhZ21lbnRJZGVudGlmaWVyLCBFbGVtZW50KiBhbmNob3JOb2Rl
KTsKIAotICAgIEVsZW1lbnQqIGdldEVsZW1lbnRCeUlkKGNvbnN0IEF0b21pY1N0cmluZyYpOwor
ICAgIEVsZW1lbnQqIGdldEVsZW1lbnRCeUlkKGNvbnN0IFN0cmluZyYpOwogCiAgICAgYm9vbCB3
aWR0aEF0dHJpYnV0ZUVzdGFibGlzaGVzVmlld3BvcnQoKSBjb25zdDsKICAgICBib29sIGhlaWdo
dEF0dHJpYnV0ZUVzdGFibGlzaGVzVmlld3BvcnQoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3htbC9YTUxUcmVlVmlld2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94
bWwvWE1MVHJlZVZpZXdlci5jcHAJKHJldmlzaW9uIDE2NDIwMikKKysrIFNvdXJjZS9XZWJDb3Jl
L3htbC9YTUxUcmVlVmlld2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsMTIgKzU3LDExIEBA
IHZvaWQgWE1MVHJlZVZpZXdlcjo6dHJhbnNmb3JtRG9jdW1lbnRUb1QKIAogICAgIFN0cmluZyBz
Y3JpcHRTdHJpbmcgPSBTdHJpbmdJbXBsOjpjcmVhdGVXaXRob3V0Q29weWluZyhYTUxWaWV3ZXJf
anMsIHNpemVvZihYTUxWaWV3ZXJfanMpKTsKICAgICBtX2RvY3VtZW50LmZyYW1lKCktPnNjcmlw
dCgpLmV2YWx1YXRlKFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0U3RyaW5nKSk7Ci0gICAgU3RyaW5n
IG5vU3R5bGVNZXNzYWdlKCJUaGlzIFhNTCBmaWxlIGRvZXMgbm90IGFwcGVhciB0byBoYXZlIGFu
eSBzdHlsZSBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggaXQuIFRoZSBkb2N1bWVudCB0cmVl
IGlzIHNob3duIGJlbG93LiIpOwotICAgIG1fZG9jdW1lbnQuZnJhbWUoKS0+c2NyaXB0KCkuZXZh
bHVhdGUoU2NyaXB0U291cmNlQ29kZSgicHJlcGFyZVdlYktpdFhNTFZpZXdlcignIiArIG5vU3R5
bGVNZXNzYWdlICsgIicpOyIpKTsKKyAgICBtX2RvY3VtZW50LmZyYW1lKCktPnNjcmlwdCgpLmV2
YWx1YXRlKFNjcmlwdFNvdXJjZUNvZGUoQXRvbWljU3RyaW5nKCJwcmVwYXJlV2ViS2l0WE1MVmll
d2VyKCdUaGlzIFhNTCBmaWxlIGRvZXMgbm90IGFwcGVhciB0byBoYXZlIGFueSBzdHlsZSBpbmZv
cm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggaXQuIFRoZSBkb2N1bWVudCB0cmVlIGlzIHNob3duIGJl
bG93LicpOyIpKSk7CiAKICAgICBTdHJpbmcgY3NzU3RyaW5nID0gU3RyaW5nSW1wbDo6Y3JlYXRl
V2l0aG91dENvcHlpbmcoWE1MVmlld2VyX2Nzcywgc2l6ZW9mKFhNTFZpZXdlcl9jc3MpKTsKICAg
ICBSZWZQdHI8VGV4dD4gdGV4dCA9IG1fZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzU3RyaW5n
KTsKLSAgICBtX2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ4bWwtdmlld2VyLXN0eWxlIiktPmFw
cGVuZENoaWxkKHRleHQsIElHTk9SRV9FWENFUFRJT04pOworICAgIG1fZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoU3RyaW5nKEFTQ0lJTGl0ZXJhbCgieG1sLXZpZXdlci1zdHlsZSIpKSktPmFwcGVu
ZENoaWxkKHRleHQsIElHTk9SRV9FWENFUFRJT04pOwogICAgIG1fZG9jdW1lbnQuc3R5bGVSZXNv
bHZlckNoYW5nZWQoUmVjYWxjU3R5bGVJbW1lZGlhdGVseSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDE2NDIxMSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE0LTAyLTE3ICBCZW5qYW1pbiBQb3VsYWluICA8YmVu
amFtaW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBqc0RvY3VtZW50UHJvdG90eXBlRnVuY3Rpb25H
ZXRFbGVtZW50QnlJZCBzaG91bGQgbm90IGNyZWF0ZSBhbiBBdG9taWNTdHJpbmcgZm9yIHRoZSBm
dW5jdGlvbiBhcmd1bWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTI4ODkzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGU6OnBhZ2VOdW1iZXJGb3JFbGVtZW50QnlJ
ZCk6IFJlbW92ZSB0aGUgZXhwbGljaXQgY29udmVyc2lvbiB0byB1c2UgdGhlIHJpZ2h0IG92ZXJs
b2FkLgorCiAyMDE0LTAyLTE2ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAg
ICAgICAgU3BlY3VsYXRpdmUgaU9TIGJ1aWxkIGZpeC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUu
Y3BwCShyZXZpc2lvbiAxNjQyMDIpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM3LDcgKzQz
Nyw3IEBAIGludCBJbmplY3RlZEJ1bmRsZTo6cGFnZU51bWJlckZvckVsZW1lbnQKICAgICBpZiAo
IWNvcmVGcmFtZSkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgRWxlbWVudCogZWxlbWVudCA9
IGNvcmVGcmFtZS0+ZG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQoQXRvbWljU3RyaW5nKGlkKSk7
CisgICAgRWxlbWVudCogZWxlbWVudCA9IGNvcmVGcmFtZS0+ZG9jdW1lbnQoKS0+Z2V0RWxlbWVu
dEJ5SWQoaWQpOwogICAgIGlmICghZWxlbWVudCkKICAgICAgICAgcmV0dXJuIC0xOwogCg==
</data>
<flag name="review"
          id="248426"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>