<?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>22001</bug_id>
          
          <creation_ts>2008-10-31 08:22:06 -0700</creation_ts>
          <short_desc>AtomicStringImpl* keys of event listener maps can outlive their strings</short_desc>
          <delta_ts>2008-11-01 00:26:08 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</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="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>97244</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-10-31 08:22:06 -0700</bug_when>
    <thetext>Turns out that we actually have bugs caused by not ref&apos;ing HashMap and HashSet keys, see attachment.

We should audit other uses of StringImpl* and AtomicStringImpl*, too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97245</commentid>
    <comment_count>1</comment_count>
      <attachid>24799</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-10-31 08:23:39 -0700</bug_when>
    <thetext>Created attachment 24799
test case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97247</commentid>
    <comment_count>2</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-10-31 09:04:13 -0700</bug_when>
    <thetext>It would be good if the testcase printed a PASS or FAIL; it&apos;s hard to see what it&apos;s doing.

Have you identified the HashMap/HashSet in question?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97254</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-31 10:07:22 -0700</bug_when>
    <thetext>I&apos;m not sure I agree with the title of this bug.

Sure, it&apos;d be easier to program with a map and set that did a ref/deref on its keys. But there are at least two other solutions to problems at any individual call site:

    1) Add code to remove the string when it no longer should be in the collection. That code can be run by the owner of the string.

    2) Add explicit ref/deref.

These are both possibly tricky to get right, and may be inferior solutions to the problem. But I generally would prefer not to name bugs after a particular solution to a problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97268</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-10-31 11:25:03 -0700</bug_when>
    <thetext>I was (and still am) going to tackle this myself, so the test is indeed somewhat sub-standard, and the bug title indeed implies the solution I plan to employ.

This particular case is XMLHttpRequest::m_eventListeners, but similar code exists elsewhere.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97273</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-10-31 11:39:19 -0700</bug_when>
    <thetext>On the other hand, the promise to audit all the uses of AtomicStringImpl* as a key was a bit presumptuous, as many of these are in code I&apos;m not closely familiar with. So I&apos;m going to fix just the EventListenersMap bug here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97281</commentid>
    <comment_count>6</comment_count>
      <attachid>24807</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-10-31 12:25:49 -0700</bug_when>
    <thetext>Created attachment 24807
proposed fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97284</commentid>
    <comment_count>7</comment_count>
      <attachid>24807</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-31 12:37:54 -0700</bug_when>
    <thetext>Comment on attachment 24807
proposed fix

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97362</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-11-01 00:26:08 -0700</bug_when>
    <thetext>Committed r38064.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>24799</attachid>
            <date>2008-10-31 08:23:39 -0700</date>
            <delta_ts>2008-10-31 08:23:39 -0700</delta_ts>
            <desc>test case</desc>
            <filename>DestroyedAtomicString.html</filename>
            <type>text/html</type>
            <size>481</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">PHNjcmlwdD4KZnVuY3Rpb24gZ2MoKQp7CiAgICBpZiAod2luZG93LkdDQ29udHJvbGxlcikKICAg
ICAgICByZXR1cm4gR0NDb250cm9sbGVyLmNvbGxlY3QoKTsKCiAgICBmb3IgKHZhciBpID0gMDsg
aSA8IDEwMDAwOyBpKyspIHsgLy8gPiBmb3JjZSBnYXJiYWdlIGNvbGxlY3Rpb24gKEZGIHJlcXVp
cmVzIGFib3V0IDlLIGFsbG9jYXRpb25zIGJlZm9yZSBhIGNvbGxlY3QpCiAgICAgICAgdmFyIHMg
PSBuZXcgU3RyaW5nKCJhYmMiKTsKICAgIH0KfQoKdmFyIHJlcSA9IG5ldyBYTUxIdHRwUmVxdWVz
dDsKcmVxLmFkZEV2ZW50TGlzdGVuZXIoImZvbyIsIGZ1bmN0aW9uKCkgeyBhbGVydCgwKSB9LCB0
cnVlKTsKdmFyIGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCJNZXNzYWdlRXZlbnQiKTsKZ2Mo
KTsKZXZ0LmluaXRNZXNzYWdlRXZlbnQoImZvbyIpOwpyZXEuZGlzcGF0Y2hFdmVudChldnQpOwpl
dnQgPSAwOwpnYygpOwoKPC9zY3JpcHQ+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24807</attachid>
            <date>2008-10-31 12:25:49 -0700</date>
            <delta_ts>2008-10-31 12:37:54 -0700</delta_ts>
            <desc>proposed fix</desc>
            <filename>AtomicStringImpl.txt</filename>
            <type>text/plain</type>
            <size>17595</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzODA0MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzQgQEAKKzIwMDgtMTAtMzEgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjAwMQorICAgICAgICBB
dG9taWNTdHJpbmdJbXBsKiBrZXlzIG9mIGV2ZW50IGxpc3RlbmVyIG1hcHMgY2FuIG91dGxpdmUg
dGhlaXIgc3RyaW5ncworCisgICAgICAgIFRlc3Q6IGZhc3QvZXZlbnRzL2Rlc3Ryb3llZC1hdG9t
aWMtc3RyaW5nLmh0bWwKKworICAgICAgICAqIGRvbS9NZXNzYWdlUG9ydC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpNZXNzYWdlUG9ydDo6YWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJD
b3JlOjpNZXNzYWdlUG9ydDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3Jl
OjpNZXNzYWdlUG9ydDo6ZGlzcGF0Y2hFdmVudCk6CisgICAgICAgICogZG9tL01lc3NhZ2VQb3J0
Lmg6CisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RE9NQXBwbGljYXRpb25DYWNoZTo6YWRkRXZlbnRMaXN0ZW5lcik6
CisgICAgICAgIChXZWJDb3JlOjpET01BcHBsaWNhdGlvbkNhY2hlOjpyZW1vdmVFdmVudExpc3Rl
bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6OmRpc3BhdGNoRXZl
bnQpOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9ET01BcHBsaWNhdGlvbkNhY2hlLmg6Cisg
ICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0
dHBSZXF1ZXN0OjphZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBS
ZXF1ZXN0OjpyZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBS
ZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuaDoK
KyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3RVcGxvYWQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6WE1MSHR0cFJlcXVlc3RVcGxvYWQ6OmFkZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6WE1MSHR0cFJlcXVlc3RVcGxvYWQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3RVcGxvYWQ6OmRpc3BhdGNoRXZlbnQpOgorICAgICAg
ICAqIHhtbC9YTUxIdHRwUmVxdWVzdFVwbG9hZC5oOgorICAgICAgICBDaGFuZ2VkIEV2ZW50TGlz
dGVuZXJzTWFwIHRvIHVzZSBBdG9taWNTdHJpbmcgYXMga2V5IChpbnN0ZWFkIG9mIEF0b21pY1N0
cmluZ0ltcGwqKS4KKwogMjAwOC0xMC0zMSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBs
ZS5jb20+CiAKICAgICAgICAgQWRkIG1hbnVhbCB0ZXN0cyB0aGF0IGNoZWNrIGJyZWFrcG9pbnRz
IG9uIGEgYmxvY2tsZXNzIGJvZHkgb2YgImZvciIgbG9vcHMuCkluZGV4OiBXZWJDb3JlL2RvbS9N
ZXNzYWdlUG9ydC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuY3Bw
CShyZXZpc2lvbiAzODAzMikKKysrIFdlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjU5LDExICsyNTksMTEgQEAgdm9pZCBNZXNzYWdlUG9ydDo6ZGlzcGF0Y2hD
bG9zZUV2ZW50KCkKIAogdm9pZCBNZXNzYWdlUG9ydDo6YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBB
dG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExp
c3RlbmVyLCBib29sKQogewotICAgIEV2ZW50TGlzdGVuZXJzTWFwOjppdGVyYXRvciBpdGVyID0g
bV9ldmVudExpc3RlbmVycy5maW5kKGV2ZW50VHlwZS5pbXBsKCkpOworICAgIEV2ZW50TGlzdGVu
ZXJzTWFwOjppdGVyYXRvciBpdGVyID0gbV9ldmVudExpc3RlbmVycy5maW5kKGV2ZW50VHlwZSk7
CiAgICAgaWYgKGl0ZXIgPT0gbV9ldmVudExpc3RlbmVycy5lbmQoKSkgewogICAgICAgICBMaXN0
ZW5lclZlY3RvciBsaXN0ZW5lcnM7CiAgICAgICAgIGxpc3RlbmVycy5hcHBlbmQoZXZlbnRMaXN0
ZW5lcik7Ci0gICAgICAgIG1fZXZlbnRMaXN0ZW5lcnMuYWRkKGV2ZW50VHlwZS5pbXBsKCksIGxp
c3RlbmVycyk7CisgICAgICAgIG1fZXZlbnRMaXN0ZW5lcnMuYWRkKGV2ZW50VHlwZSwgbGlzdGVu
ZXJzKTsKICAgICB9IGVsc2UgewogICAgICAgICBMaXN0ZW5lclZlY3RvciYgbGlzdGVuZXJzID0g
aXRlci0+c2Vjb25kOwogICAgICAgICBmb3IgKExpc3RlbmVyVmVjdG9yOjppdGVyYXRvciBsaXN0
ZW5lckl0ZXIgPSBsaXN0ZW5lcnMuYmVnaW4oKTsgbGlzdGVuZXJJdGVyICE9IGxpc3RlbmVycy5l
bmQoKTsgKytsaXN0ZW5lckl0ZXIpIHsKQEAgLTI3MiwxMyArMjcyLDEzIEBAIHZvaWQgTWVzc2Fn
ZVBvcnQ6OmFkZEV2ZW50TGlzdGVuZXIoY29uc3QKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgbGlzdGVuZXJzLmFwcGVuZChldmVudExpc3RlbmVyKTsKLSAgICAgICAgbV9ldmVudExpc3Rl
bmVycy5hZGQoZXZlbnRUeXBlLmltcGwoKSwgbGlzdGVuZXJzKTsKKyAgICAgICAgbV9ldmVudExp
c3RlbmVycy5hZGQoZXZlbnRUeXBlLCBsaXN0ZW5lcnMpOwogICAgIH0gICAgCiB9CiAKIHZvaWQg
TWVzc2FnZVBvcnQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVu
dFR5cGUsIEV2ZW50TGlzdGVuZXIqIGV2ZW50TGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKIHsK
LSAgICBFdmVudExpc3RlbmVyc01hcDo6aXRlcmF0b3IgaXRlciA9IG1fZXZlbnRMaXN0ZW5lcnMu
ZmluZChldmVudFR5cGUuaW1wbCgpKTsKKyAgICBFdmVudExpc3RlbmVyc01hcDo6aXRlcmF0b3Ig
aXRlciA9IG1fZXZlbnRMaXN0ZW5lcnMuZmluZChldmVudFR5cGUpOwogICAgIGlmIChpdGVyID09
IG1fZXZlbnRMaXN0ZW5lcnMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKQEAgLTI5OCw3
ICsyOTgsNyBAQCBib29sIE1lc3NhZ2VQb3J0OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQCiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKLSAgICBMaXN0ZW5lclZlY3RvciBsaXN0ZW5l
cnNDb3B5ID0gbV9ldmVudExpc3RlbmVycy5nZXQoZXZlbnQtPnR5cGUoKS5pbXBsKCkpOworICAg
IExpc3RlbmVyVmVjdG9yIGxpc3RlbmVyc0NvcHkgPSBtX2V2ZW50TGlzdGVuZXJzLmdldChldmVu
dC0+dHlwZSgpKTsKICAgICBmb3IgKExpc3RlbmVyVmVjdG9yOjpjb25zdF9pdGVyYXRvciBsaXN0
ZW5lckl0ZXIgPSBsaXN0ZW5lcnNDb3B5LmJlZ2luKCk7IGxpc3RlbmVySXRlciAhPSBsaXN0ZW5l
cnNDb3B5LmVuZCgpOyArK2xpc3RlbmVySXRlcikgewogICAgICAgICBldmVudC0+c2V0VGFyZ2V0
KHRoaXMpOwogICAgICAgICBldmVudC0+c2V0Q3VycmVudFRhcmdldCh0aGlzKTsKSW5kZXg6IFdl
YkNvcmUvZG9tL01lc3NhZ2VQb3J0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTWVzc2Fn
ZVBvcnQuaAkocmV2aXNpb24gMzgwMzIpCisrKyBXZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaWZuZGVmIE1lc3NhZ2VQb3J0X2gKICNk
ZWZpbmUgTWVzc2FnZVBvcnRfaAogCisjaW5jbHVkZSAiQXRvbWljU3RyaW5nSGFzaC5oIgogI2lu
Y2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJFdmVudFRhcmdldC5oIgogCkBAIC04
MSw3ICs4Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBib29sIGRp
c3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4sIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgICAg
ICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gPiBMaXN0ZW5lclZlY3RvcjsK
LSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBMaXN0ZW5lclZlY3Rv
cj4gRXZlbnRMaXN0ZW5lcnNNYXA7CisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJp
bmcsIExpc3RlbmVyVmVjdG9yPiBFdmVudExpc3RlbmVyc01hcDsKICAgICAgICAgRXZlbnRMaXN0
ZW5lcnNNYXAmIGV2ZW50TGlzdGVuZXJzKCkgeyByZXR1cm4gbV9ldmVudExpc3RlbmVyczsgfQog
CiAgICAgICAgIHVzaW5nIFRocmVhZFNhZmVTaGFyZWQ8TWVzc2FnZVBvcnQ+OjpyZWY7CkluZGV4
OiBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9ET01BcHBsaWNhdGlvbkNhY2hlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9ET01BcHBsaWNhdGlvbkNhY2hlLmNwcAko
cmV2aXNpb24gMzgwMzIpCisrKyBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9ET01BcHBsaWNhdGlv
bkNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc4LDExICsxNzgsMTEgQEAgdm9pZCBET01B
cHBsaWNhdGlvbkNhY2hlOjpyZW1vdmUoY29uc3QgSwogICAgIAogdm9pZCBET01BcHBsaWNhdGlv
bkNhY2hlOjphZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQ
YXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIsIGJvb2wpCiB7Ci0gICAgRXZl
bnRMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2V2ZW50TGlzdGVuZXJzLmZpbmQoZXZl
bnRUeXBlLmltcGwoKSk7CisgICAgRXZlbnRMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBt
X2V2ZW50TGlzdGVuZXJzLmZpbmQoZXZlbnRUeXBlKTsKICAgICBpZiAoaXRlciA9PSBtX2V2ZW50
TGlzdGVuZXJzLmVuZCgpKSB7CiAgICAgICAgIExpc3RlbmVyVmVjdG9yIGxpc3RlbmVyczsKICAg
ICAgICAgbGlzdGVuZXJzLmFwcGVuZChldmVudExpc3RlbmVyKTsKLSAgICAgICAgbV9ldmVudExp
c3RlbmVycy5hZGQoZXZlbnRUeXBlLmltcGwoKSwgbGlzdGVuZXJzKTsKKyAgICAgICAgbV9ldmVu
dExpc3RlbmVycy5hZGQoZXZlbnRUeXBlLCBsaXN0ZW5lcnMpOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIExpc3RlbmVyVmVjdG9yJiBsaXN0ZW5lcnMgPSBpdGVyLT5zZWNvbmQ7CiAgICAgICAgIGZv
ciAoTGlzdGVuZXJWZWN0b3I6Oml0ZXJhdG9yIGxpc3RlbmVySXRlciA9IGxpc3RlbmVycy5iZWdp
bigpOyBsaXN0ZW5lckl0ZXIgIT0gbGlzdGVuZXJzLmVuZCgpOyArK2xpc3RlbmVySXRlcikgewpA
QCAtMTkxLDEzICsxOTEsMTMgQEAgdm9pZCBET01BcHBsaWNhdGlvbkNhY2hlOjphZGRFdmVudExp
c3RlbgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBsaXN0ZW5lcnMuYXBwZW5kKGV2ZW50
TGlzdGVuZXIpOwotICAgICAgICBtX2V2ZW50TGlzdGVuZXJzLmFkZChldmVudFR5cGUuaW1wbCgp
LCBsaXN0ZW5lcnMpOworICAgICAgICBtX2V2ZW50TGlzdGVuZXJzLmFkZChldmVudFR5cGUsIGxp
c3RlbmVycyk7CiAgICAgfSAgICAKIH0KIAogdm9pZCBET01BcHBsaWNhdGlvbkNhY2hlOjpyZW1v
dmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3Rl
bmVyKiBldmVudExpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpCiB7Ci0gICAgRXZlbnRMaXN0ZW5l
cnNNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2V2ZW50TGlzdGVuZXJzLmZpbmQoZXZlbnRUeXBlLmlt
cGwoKSk7CisgICAgRXZlbnRMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2V2ZW50TGlz
dGVuZXJzLmZpbmQoZXZlbnRUeXBlKTsKICAgICBpZiAoaXRlciA9PSBtX2V2ZW50TGlzdGVuZXJz
LmVuZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCkBAIC0yMTcsNyArMjE3LDcgQEAgYm9vbCBE
T01BcHBsaWNhdGlvbkNhY2hlOjpkaXNwYXRjaEV2ZW50KAogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAgICAgCi0gICAgTGlzdGVuZXJWZWN0b3IgbGlzdGVuZXJzQ29weSA9IG1fZXZlbnRM
aXN0ZW5lcnMuZ2V0KGV2ZW50LT50eXBlKCkuaW1wbCgpKTsKKyAgICBMaXN0ZW5lclZlY3RvciBs
aXN0ZW5lcnNDb3B5ID0gbV9ldmVudExpc3RlbmVycy5nZXQoZXZlbnQtPnR5cGUoKSk7CiAgICAg
Zm9yIChMaXN0ZW5lclZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgbGlzdGVuZXJJdGVyID0gbGlzdGVu
ZXJzQ29weS5iZWdpbigpOyBsaXN0ZW5lckl0ZXIgIT0gbGlzdGVuZXJzQ29weS5lbmQoKTsgKyts
aXN0ZW5lckl0ZXIpIHsKICAgICAgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKICAgICAgICAg
ZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQodGhpcyk7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9hcHBj
YWNoZS9ET01BcHBsaWNhdGlvbkNhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIv
YXBwY2FjaGUvRE9NQXBwbGljYXRpb25DYWNoZS5oCShyZXZpc2lvbiAzODAzMikKKysrIFdlYkNv
cmUvbG9hZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMjgsMTIgKzI4LDEyIEBACiAKICNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05T
KQogCi0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlICJBdG9taWNTdHJpbmdI
YXNoLmgiCiAjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKLQogI2luY2x1ZGUgIkV2ZW50TGlzdGVu
ZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+LCBFeGNlcHRpb25Db2Rl
Jik7CiAgICAgCiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPEV2ZW50TGlzdGVuZXI+ID4gTGlz
dGVuZXJWZWN0b3I7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBMaXN0
ZW5lclZlY3Rvcj4gRXZlbnRMaXN0ZW5lcnNNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21p
Y1N0cmluZywgTGlzdGVuZXJWZWN0b3I+IEV2ZW50TGlzdGVuZXJzTWFwOwogICAgIEV2ZW50TGlz
dGVuZXJzTWFwJiBldmVudExpc3RlbmVycygpIHsgcmV0dXJuIG1fZXZlbnRMaXN0ZW5lcnM7IH0K
IAogICAgIHVzaW5nIFJlZkNvdW50ZWQ8RE9NQXBwbGljYXRpb25DYWNoZT46OnJlZjsKSW5kZXg6
IFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3ht
bC9YTUxIdHRwUmVxdWVzdC5jcHAJKHJldmlzaW9uIDM4MDMyKQorKysgV2ViQ29yZS94bWwvWE1M
SHR0cFJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDgsMTEgKzI0OCwxMSBAQCBYTUxI
dHRwUmVxdWVzdFVwbG9hZCogWE1MSHR0cFJlcXVlc3Q6OnVwCiAKIHZvaWQgWE1MSHR0cFJlcXVl
c3Q6OmFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NS
ZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lciwgYm9vbCkKIHsKLSAgICBFdmVudExp
c3RlbmVyc01hcDo6aXRlcmF0b3IgaXRlciA9IG1fZXZlbnRMaXN0ZW5lcnMuZmluZChldmVudFR5
cGUuaW1wbCgpKTsKKyAgICBFdmVudExpc3RlbmVyc01hcDo6aXRlcmF0b3IgaXRlciA9IG1fZXZl
bnRMaXN0ZW5lcnMuZmluZChldmVudFR5cGUpOwogICAgIGlmIChpdGVyID09IG1fZXZlbnRMaXN0
ZW5lcnMuZW5kKCkpIHsKICAgICAgICAgTGlzdGVuZXJWZWN0b3IgbGlzdGVuZXJzOwogICAgICAg
ICBsaXN0ZW5lcnMuYXBwZW5kKGV2ZW50TGlzdGVuZXIpOwotICAgICAgICBtX2V2ZW50TGlzdGVu
ZXJzLmFkZChldmVudFR5cGUuaW1wbCgpLCBsaXN0ZW5lcnMpOworICAgICAgICBtX2V2ZW50TGlz
dGVuZXJzLmFkZChldmVudFR5cGUsIGxpc3RlbmVycyk7CiAgICAgfSBlbHNlIHsKICAgICAgICAg
TGlzdGVuZXJWZWN0b3ImIGxpc3RlbmVycyA9IGl0ZXItPnNlY29uZDsKICAgICAgICAgZm9yIChM
aXN0ZW5lclZlY3Rvcjo6aXRlcmF0b3IgbGlzdGVuZXJJdGVyID0gbGlzdGVuZXJzLmJlZ2luKCk7
IGxpc3RlbmVySXRlciAhPSBsaXN0ZW5lcnMuZW5kKCk7ICsrbGlzdGVuZXJJdGVyKQpAQCAtMjYw
LDEzICsyNjAsMTMgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6YWRkRXZlbnRMaXN0ZW5lcihjbwog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgICAgIGxpc3RlbmVycy5hcHBl
bmQoZXZlbnRMaXN0ZW5lcik7Ci0gICAgICAgIG1fZXZlbnRMaXN0ZW5lcnMuYWRkKGV2ZW50VHlw
ZS5pbXBsKCksIGxpc3RlbmVycyk7CisgICAgICAgIG1fZXZlbnRMaXN0ZW5lcnMuYWRkKGV2ZW50
VHlwZSwgbGlzdGVuZXJzKTsKICAgICB9CiB9CiAKIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OnJlbW92
ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVu
ZXIqIGV2ZW50TGlzdGVuZXIsIGJvb2wpCiB7Ci0gICAgRXZlbnRMaXN0ZW5lcnNNYXA6Oml0ZXJh
dG9yIGl0ZXIgPSBtX2V2ZW50TGlzdGVuZXJzLmZpbmQoZXZlbnRUeXBlLmltcGwoKSk7CisgICAg
RXZlbnRMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2V2ZW50TGlzdGVuZXJzLmZpbmQo
ZXZlbnRUeXBlKTsKICAgICBpZiAoaXRlciA9PSBtX2V2ZW50TGlzdGVuZXJzLmVuZCgpKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTI4Niw3ICsyODYsNyBAQCBib29sIFhNTEh0dHBSZXF1ZXN0Ojpk
aXNwYXRjaEV2ZW50KFBhc3NSCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIExp
c3RlbmVyVmVjdG9yIGxpc3RlbmVyc0NvcHkgPSBtX2V2ZW50TGlzdGVuZXJzLmdldChldnQtPnR5
cGUoKS5pbXBsKCkpOworICAgIExpc3RlbmVyVmVjdG9yIGxpc3RlbmVyc0NvcHkgPSBtX2V2ZW50
TGlzdGVuZXJzLmdldChldnQtPnR5cGUoKSk7CiAgICAgZm9yIChMaXN0ZW5lclZlY3Rvcjo6Y29u
c3RfaXRlcmF0b3IgbGlzdGVuZXJJdGVyID0gbGlzdGVuZXJzQ29weS5iZWdpbigpOyBsaXN0ZW5l
ckl0ZXIgIT0gbGlzdGVuZXJzQ29weS5lbmQoKTsgKytsaXN0ZW5lckl0ZXIpIHsKICAgICAgICAg
ZXZ0LT5zZXRUYXJnZXQodGhpcyk7CiAgICAgICAgIGV2dC0+c2V0Q3VycmVudFRhcmdldCh0aGlz
KTsKSW5kZXg6IFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaAkocmV2aXNpb24gMzgwMzIpCisrKyBXZWJDb3JlL3ht
bC9YTUxIdHRwUmVxdWVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBACiAjZGVm
aW5lIFhNTEh0dHBSZXF1ZXN0X2gKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2lu
Y2x1ZGUgIkF0b21pY1N0cmluZ0hhc2guaCIKICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCiAj
aW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKICNpbmNsdWRlICJGb3JtRGF0YS5oIgpAQCAtOTcsNyAr
OTgsNyBAQCBwdWJsaWM6CiAgICAgRXZlbnRMaXN0ZW5lciogb25wcm9ncmVzcygpIGNvbnN0IHsg
cmV0dXJuIG1fb25Qcm9ncmVzc0xpc3RlbmVyLmdldCgpOyB9CiAKICAgICB0eXBlZGVmIFZlY3Rv
cjxSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gPiBMaXN0ZW5lclZlY3RvcjsKLSAgICB0eXBlZGVmIEhh
c2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIExpc3RlbmVyVmVjdG9yPiBFdmVudExpc3RlbmVyc01h
cDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBMaXN0ZW5lclZlY3Rvcj4gRXZl
bnRMaXN0ZW5lcnNNYXA7CiAKICAgICAvLyB1c2VDYXB0dXJlIGlzIG5vdCB1c2VkLCBldmVuIGZv
ciBhZGQvcmVtb3ZlIHBhaXJpbmcgKGZvciBGaXJlZm94IGNvbXBhdGliaWxpdHkpLgogICAgIHZp
cnR1YWwgdm9pZCBhZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBl
LCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+LCBib29sIHVzZUNhcHR1cmUpOwpJbmRleDogV2Vi
Q29yZS94bWwvWE1MSHR0cFJlcXVlc3RVcGxvYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
eG1sL1hNTEh0dHBSZXF1ZXN0VXBsb2FkLmNwcAkocmV2aXNpb24gMzgwMzIpCisrKyBXZWJDb3Jl
L3htbC9YTUxIdHRwUmVxdWVzdFVwbG9hZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDExICs1
NCwxMSBAQCBGcmFtZSogWE1MSHR0cFJlcXVlc3RVcGxvYWQ6OmFzc29jaWF0ZWRGCiAKIHZvaWQg
WE1MSHR0cFJlcXVlc3RVcGxvYWQ6OmFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5n
JiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lciwgYm9v
bCkKIHsKLSAgICBFdmVudExpc3RlbmVyc01hcDo6aXRlcmF0b3IgaXRlciA9IG1fZXZlbnRMaXN0
ZW5lcnMuZmluZChldmVudFR5cGUuaW1wbCgpKTsKKyAgICBFdmVudExpc3RlbmVyc01hcDo6aXRl
cmF0b3IgaXRlciA9IG1fZXZlbnRMaXN0ZW5lcnMuZmluZChldmVudFR5cGUpOwogICAgIGlmIChp
dGVyID09IG1fZXZlbnRMaXN0ZW5lcnMuZW5kKCkpIHsKICAgICAgICAgTGlzdGVuZXJWZWN0b3Ig
bGlzdGVuZXJzOwogICAgICAgICBsaXN0ZW5lcnMuYXBwZW5kKGV2ZW50TGlzdGVuZXIpOwotICAg
ICAgICBtX2V2ZW50TGlzdGVuZXJzLmFkZChldmVudFR5cGUuaW1wbCgpLCBsaXN0ZW5lcnMpOwor
ICAgICAgICBtX2V2ZW50TGlzdGVuZXJzLmFkZChldmVudFR5cGUsIGxpc3RlbmVycyk7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgTGlzdGVuZXJWZWN0b3ImIGxpc3RlbmVycyA9IGl0ZXItPnNlY29u
ZDsKICAgICAgICAgZm9yIChMaXN0ZW5lclZlY3Rvcjo6aXRlcmF0b3IgbGlzdGVuZXJJdGVyID0g
bGlzdGVuZXJzLmJlZ2luKCk7IGxpc3RlbmVySXRlciAhPSBsaXN0ZW5lcnMuZW5kKCk7ICsrbGlz
dGVuZXJJdGVyKSB7CkBAIC02NywxMyArNjcsMTMgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdFVwbG9h
ZDo6YWRkRXZlbnRMaXN0ZQogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBsaXN0ZW5lcnMu
YXBwZW5kKGV2ZW50TGlzdGVuZXIpOwotICAgICAgICBtX2V2ZW50TGlzdGVuZXJzLmFkZChldmVu
dFR5cGUuaW1wbCgpLCBsaXN0ZW5lcnMpOworICAgICAgICBtX2V2ZW50TGlzdGVuZXJzLmFkZChl
dmVudFR5cGUsIGxpc3RlbmVycyk7CiAgICAgfQogfQogCiB2b2lkIFhNTEh0dHBSZXF1ZXN0VXBs
b2FkOjpyZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBF
dmVudExpc3RlbmVyKiBldmVudExpc3RlbmVyLCBib29sKQogewotICAgIEV2ZW50TGlzdGVuZXJz
TWFwOjppdGVyYXRvciBpdGVyID0gbV9ldmVudExpc3RlbmVycy5maW5kKGV2ZW50VHlwZS5pbXBs
KCkpOworICAgIEV2ZW50TGlzdGVuZXJzTWFwOjppdGVyYXRvciBpdGVyID0gbV9ldmVudExpc3Rl
bmVycy5maW5kKGV2ZW50VHlwZSk7CiAgICAgaWYgKGl0ZXIgPT0gbV9ldmVudExpc3RlbmVycy5l
bmQoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC05NCw3ICs5NCw3IEBAIGJvb2wgWE1MSHR0cFJl
cXVlc3RVcGxvYWQ6OmRpc3BhdGNoRXZlbnQKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
Ci0gICAgTGlzdGVuZXJWZWN0b3IgbGlzdGVuZXJzQ29weSA9IG1fZXZlbnRMaXN0ZW5lcnMuZ2V0
KGV2dC0+dHlwZSgpLmltcGwoKSk7CisgICAgTGlzdGVuZXJWZWN0b3IgbGlzdGVuZXJzQ29weSA9
IG1fZXZlbnRMaXN0ZW5lcnMuZ2V0KGV2dC0+dHlwZSgpKTsKICAgICBmb3IgKExpc3RlbmVyVmVj
dG9yOjpjb25zdF9pdGVyYXRvciBsaXN0ZW5lckl0ZXIgPSBsaXN0ZW5lcnNDb3B5LmJlZ2luKCk7
IGxpc3RlbmVySXRlciAhPSBsaXN0ZW5lcnNDb3B5LmVuZCgpOyArK2xpc3RlbmVySXRlcikgewog
ICAgICAgICBldnQtPnNldFRhcmdldCh0aGlzKTsKICAgICAgICAgZXZ0LT5zZXRDdXJyZW50VGFy
Z2V0KHRoaXMpOwpJbmRleDogV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RVcGxvYWQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdFVwbG9hZC5oCShyZXZpc2lvbiAz
ODAzMikKKysrIFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0VXBsb2FkLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgWE1MSHR0cFJlcXVlc3RVcGxvYWRfaAogI2Rl
ZmluZSBYTUxIdHRwUmVxdWVzdFVwbG9hZF9oCiAKKyNpbmNsdWRlICJBdG9taWNTdHJpbmdIYXNo
LmgiCiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0Lmgi
CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTc2LDcgKzc3LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICBFdmVudExpc3RlbmVyKiBvbnByb2dyZXNzKCkgY29uc3QgeyByZXR1
cm4gbV9vblByb2dyZXNzTGlzdGVuZXIuZ2V0KCk7IH0KIAogICAgICAgICB0eXBlZGVmIFZlY3Rv
cjxSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gPiBMaXN0ZW5lclZlY3RvcjsKLSAgICAgICAgdHlwZWRl
ZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBMaXN0ZW5lclZlY3Rvcj4gRXZlbnRMaXN0ZW5l
cnNNYXA7CisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmcsIExpc3RlbmVyVmVj
dG9yPiBFdmVudExpc3RlbmVyc01hcDsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgYWRkRXZlbnRM
aXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExp
c3RlbmVyPiwgYm9vbCB1c2VDYXB0dXJlKTsKICAgICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUV2
ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIq
LCBib29sIHVzZUNhcHR1cmUpOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMzgwNDEpCisrKyBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAwOC0xMC0z
MSAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIyMDAxCisgICAgICAgIEF0b21pY1N0cmluZ0ltcGwqIGtleXMgb2Yg
ZXZlbnQgbGlzdGVuZXIgbWFwcyBjYW4gb3V0bGl2ZSB0aGVpciBzdHJpbmdzCisKKyAgICAgICAg
KiBmYXN0L2V2ZW50cy9kZXN0cm95ZWQtYXRvbWljLXN0cmluZy1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvZXZlbnRzL2Rlc3Ryb3llZC1hdG9taWMtc3RyaW5nLmh0bWw6IEFk
ZGVkLgorCiAyMDA4LTEwLTMwICBKdXN0aW4gR2FyY2lhICA8anVzdGluLmdhcmNpYUBhcHBsZS5j
b20+CiAKICAgICAgICAgQWRkZWQgYW5vdGhlciBsYXlvdXQgdGVzdCBmb3IgcHJldmlvdXMgY2hl
Y2staW4uCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9kZXN0cm95ZWQtYXRvbWljLXN0
cmluZy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMv
ZGVzdHJveWVkLWF0b21pYy1zdHJpbmctZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvZGVzdHJveWVkLWF0b21pYy1zdHJpbmctZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQgQEAKK1Rlc3QgdGhhdCBhZGRpbmcgYW4gZXZlbnQg
bGlzdGVuZXIgZm9yIGFuIGV2ZW50IHdpdGggYSB1bmlxdWUgbmFtZSB3b3JrcyBjb3JyZWN0bHkg
KHRoaXMgdXNlZCB0byBjb3JydXB0IGV2ZW50IGxpc3RlbmVyIG1hcCBhZnRlciBHQykuCisKK1BB
U1MKKwoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvZGVzdHJv
eWVkLWF0b21pYy1zdHJpbmctZXhwZWN0ZWQudHh0Cl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOm1pbWUt
dHlwZQogICArIHRleHQvcGxhaW4KTmFtZTogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2Rlc3Ryb3llZC1hdG9taWMtc3RyaW5nLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvZGVzdHJveWVkLWF0b21pYy1z
dHJpbmcuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2Rlc3Ry
b3llZC1hdG9taWMtc3RyaW5nLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODQgQEAKKzxi
b2R5PgorPHA+VGVzdCB0aGF0IGFkZGluZyBhbiBldmVudCBsaXN0ZW5lciBmb3IgYW4gZXZlbnQg
d2l0aCBhIHVuaXF1ZSBuYW1lIHdvcmtzIGNvcnJlY3RseSAodGhpcyB1c2VkIHRvIGNvcnJ1cHQg
ZXZlbnQgbGlzdGVuZXIgbWFwIGFmdGVyIEdDKS48L3A+Cis8cHJlIGlkPWxvZz48L3ByZT4KKwor
PHNjcmlwdD4KK2Z1bmN0aW9uIGdjKCkKK3sKKyAgICBpZiAod2luZG93LkdDQ29udHJvbGxlcikK
KyAgICAgICAgcmV0dXJuIEdDQ29udHJvbGxlci5jb2xsZWN0KCk7CisKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IDEwMDAwOyBpKyspIHsgLy8gPiBmb3JjZSBnYXJiYWdlIGNvbGxlY3Rpb24gKEZG
IHJlcXVpcmVzIGFib3V0IDlLIGFsbG9jYXRpb25zIGJlZm9yZSBhIGNvbGxlY3QpCisgICAgICAg
IHZhciBzID0gbmV3IFN0cmluZygiYWJjIik7CisgICAgfQorfQorCitmdW5jdGlvbiBsb2cobWVz
c2FnZSkKK3sKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9nIikuaW5uZXJIVE1MICs9
IG1lc3NhZ2UgKyAiPGJyPiI7Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCit2YXIgbGlzdGVuZXJD
YWxsQ291bnQgPSAwOwordmFyIGV4cGVjdGVkTGlzdGVuZXJDYWxsQ291bnQgPSAwOworZnVuY3Rp
b24gbGlzdGVuZXIoKQoreworICAgICsrbGlzdGVuZXJDYWxsQ291bnQ7Cit9CisKK2Z1bmN0aW9u
IGFkZExpc3RlbmVyKHRhcmdldE5hbWUsIG5hbWUpCit7CisgICAgdmFyIHRhcmdldDsKKyAgICB0
cnkgeworICAgICAgICB0YXJnZXQgPSBldmFsKHRhcmdldE5hbWUpOworICAgICAgICBldmFsKHRh
cmdldCkuYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCBsaXN0ZW5lciwgdHJ1ZSk7CisgICAgICAgICsr
ZXhwZWN0ZWRMaXN0ZW5lckNhbGxDb3VudDsKKyAgICB9IGNhdGNoIChleCkgeworICAgICAgICBs
b2coKHRhcmdldCA/IHRhcmdldCA6IHRhcmdldE5hbWUpICsgIiBpcyBub3Qgc3VwcG9ydGVkLCBv
ciBjYW5ub3QgYmUgdXNlZCB0byByZWdpc3RlciBhcmJpdHJhcnkgZXZlbnQgaGFuZGxlcnMuIik7
CisgICAgfQorfQorCitmdW5jdGlvbiBkaXNwYXRjaEV2ZW50KHRhcmdldCwgbmFtZSkKK3sKKyAg
ICB0cnkgeworICAgICAgICB2YXIgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoIk1lc3NhZ2VF
dmVudCIpOworICAgICAgICBldnQuaW5pdE1lc3NhZ2VFdmVudChuYW1lKTsKKyAgICAgICAgZXZh
bCh0YXJnZXQpLmRpc3BhdGNoRXZlbnQoZXZ0KTsKKyAgICB9IGNhdGNoIChleCkgeworICAgIH0K
K30KKwordmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdDsKK2FkZExpc3RlbmVyKCJ4aHIiLCAi
Zm9vMSIpOworYWRkTGlzdGVuZXIoInhoci51cGxvYWQiLCAiZm9vMiIpOworYWRkTGlzdGVuZXIo
IndpbmRvdy5hcHBsaWNhdGlvbkNhY2hlIiwgImZvbzMiKTsKK3ZhciBjaGFubmVsOwordHJ5IHsK
KyAgICBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsOworICAgIGNoYW5uZWwucG9ydDEuYWRk
RXZlbnRMaXN0ZW5lcigiZm9vNCIsIGxpc3RlbmVyLCB0cnVlKTsKKyAgICArK2V4cGVjdGVkTGlz
dGVuZXJDYWxsQ291bnQ7Cit9IGNhdGNoIChleCkgeworICAgIGxvZygiTWVzc2FnZUNoYW5uZWwg
aXMgbm90IHN1cHBvcnRlZCwgb3IgY2Fubm90IGJlIHVzZWQgdG8gcmVnaXN0ZXIgYXJiaXRyYXJ5
IGV2ZW50IGhhbmRsZXJzLiIpOworfQorLy8gd2luZG93LmRpc3BhdGNoRXZlbnQgaXMgY3VycmVu
dGx5IHVuaW1wbGVtZW50ZWQuCisvLyB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiZm9vNSIsIGxp
c3RlbmVyLCB0cnVlKTsKKy8vICsrZXhwZWN0ZWRMaXN0ZW5lckNhbGxDb3VudDsKK2RvY3VtZW50
LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigiZm9vNiIsIGxpc3RlbmVyLCB0cnVlKTsKKysrZXhwZWN0
ZWRMaXN0ZW5lckNhbGxDb3VudDsKKworZ2MoKTsKKworZGlzcGF0Y2hFdmVudCgieGhyIiwgImZv
bzEiKTsKK2Rpc3BhdGNoRXZlbnQoInhoci51cGxvYWQiLCAiZm9vMiIpOworZGlzcGF0Y2hFdmVu
dCgid2luZG93LmFwcGxpY2F0aW9uQ2FjaGUiLCAiZm9vMyIpOworZGlzcGF0Y2hFdmVudCgiY2hh
bm5lbC5wb3J0MSIsICJmb280Iik7CitkaXNwYXRjaEV2ZW50KCJ3aW5kb3ciLCAiZm9vNSIpOwor
ZGlzcGF0Y2hFdmVudCgiZG9jdW1lbnQuYm9keSIsICJmb282Iik7CisKK2djKCk7CisKK2xvZygo
bGlzdGVuZXJDYWxsQ291bnQgPT0gZXhwZWN0ZWRMaXN0ZW5lckNhbGxDb3VudCkgPyAiUEFTUyIg
OiAiRkFJTCIpOworPC9zY3JpcHQ+Cis8L2JvZHk+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy9kZXN0cm95ZWQtYXRvbWljLXN0cmluZy5odG1sCl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KTmFtZTogc3ZuOm1pbWUtdHlwZQogICArIHRleHQvaHRtbAoK
</data>
<flag name="review"
          id="11356"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>