<?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>82631</bug_id>
          
          <creation_ts>2012-03-29 11:30:00 -0700</creation_ts>
          <short_desc>Delay post-insertion notifications until new DOM tree is complete</short_desc>
          <delta_ts>2012-04-09 14:41:47 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</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>
          <dependson>82967</dependson>
    
    <dependson>83384</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Klein">adamk</reporter>
          <assigned_to name="Adam Klein">adamk</assigned_to>
          <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>mjs</cc>
    
    <cc>ojan</cc>
    
    <cc>rafaelw</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>591366</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2012-03-29 11:30:00 -0700</bug_when>
    <thetext>EDelay post-insertion notifications until new DOM tree is complete</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591367</commentid>
    <comment_count>1</comment_count>
      <attachid>134626</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2012-03-29 11:30:50 -0700</bug_when>
    <thetext>Created attachment 134626
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591373</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-29 11:33:54 -0700</bug_when>
    <thetext>Attachment 134626 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/ChangeLog:8:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
Total errors found: 1 in 2 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>595026</commentid>
    <comment_count>3</comment_count>
      <attachid>135454</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2012-04-03 16:36:02 -0700</bug_when>
    <thetext>Created attachment 135454
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595841</commentid>
    <comment_count>4</comment_count>
      <attachid>135658</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2012-04-04 13:16:43 -0700</bug_when>
    <thetext>Created attachment 135658
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595845</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2012-04-04 13:18:46 -0700</bug_when>
    <thetext>Now ready for review. The big idea here is to ensure that inserting a document fragment doesn&apos;t have any side-effects _while the DOM tree is being constructed_.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596064</commentid>
    <comment_count>6</comment_count>
      <attachid>135658</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-04-04 16:15:36 -0700</bug_when>
    <thetext>Comment on attachment 135658
Patch

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

I&apos;m uncomfortably excited about this change. :)

&gt; Source/WebCore/dom/ContainerNode.cpp:169
&gt;          // Due to arbitrary code running in response to a DOM mutation event it&apos;s
&gt; -        // possible that &quot;next&quot; is no longer a child of &quot;this&quot;.
&gt; -        // It&apos;s also possible that &quot;child&quot; has been inserted elsewhere.
&gt; -        // In either of those cases, we&apos;ll just stop.
&gt; -        if (next-&gt;parentNode() != this)
&gt; -            break;
&gt; -        if (child-&gt;parentNode())
&gt; +        // possible that &quot;child&quot; has been inserted elsewhere.

Is the only case this happens now if you&apos;re appending a script element?

&gt; Source/WebCore/dom/ContainerNode.cpp:175
&gt;          treeScope()-&gt;adoptIfNeeded(child);

Here and below, it might be worth adding a comment that adoptIfNeeded will never fire sync JS events because we&apos;ve already removed the child from it&apos;s existing parent and so there are no DOM mutations involved here.

&gt; Source/WebCore/dom/ContainerNode.cpp:1090
&gt; +        // FIXME: Attachment should be the first operation in this function, but some code

Nit: s/this function/this loop/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596074</commentid>
    <comment_count>7</comment_count>
      <attachid>135658</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2012-04-04 16:24:33 -0700</bug_when>
    <thetext>Comment on attachment 135658
Patch

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

&gt;&gt; Source/WebCore/dom/ContainerNode.cpp:169
&gt;&gt; +        // possible that &quot;child&quot; has been inserted elsewhere.
&gt; 
&gt; Is the only case this happens now if you&apos;re appending a script element?

No, this is still checking for the case of gaining a parent due to events fired during reparenting, above. I left this here to avoid a second loop.

I think the cleanest thing will be to move this check (and the vector resizing) into collectChildrenAndRemoveFromOldParent, but that can be easily accomplished in a followup change; I wanted to keep the restructuring to a minimum in this one.

&gt;&gt; Source/WebCore/dom/ContainerNode.cpp:175
&gt;&gt;          treeScope()-&gt;adoptIfNeeded(child);
&gt; 
&gt; Here and below, it might be worth adding a comment that adoptIfNeeded will never fire sync JS events because we&apos;ve already removed the child from it&apos;s existing parent and so there are no DOM mutations involved here.

TreeScope::adoptIfNeeded doesn&apos;t do reparenting (and thus fires no mutation events, ever). Document::adoptNode is what you&apos;re thinking of, but that calls removeChild explicitly. I don&apos;t think a comment is called for, or if it is, it belongs on adoptIfNeeded, not its callers.

&gt;&gt; Source/WebCore/dom/ContainerNode.cpp:1090
&gt;&gt; +        // FIXME: Attachment should be the first operation in this function, but some code
&gt; 
&gt; Nit: s/this function/this loop/

I think I still mean &quot;this function&quot;: why should this happen after childrenChanged?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596116</commentid>
    <comment_count>8</comment_count>
      <attachid>135658</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-04 17:05:42 -0700</bug_when>
    <thetext>Comment on attachment 135658
Patch

Clearing flags on attachment: 135658

Committed r113267: &lt;http://trac.webkit.org/changeset/113267&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596117</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-04 17:05:47 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>597631</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-04-06 13:56:46 -0700</bug_when>
    <thetext>Reopen the bug since the patch was rolled out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>597843</commentid>
    <comment_count>11</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2012-04-06 17:22:38 -0700</bug_when>
    <thetext>After some investigation with Ojan, it looks to be a basic issue with the structure of this code: the code in this patch calls attach() in a separate loop from that which appended the node to the DOM tree. For innerHTML calls with many (thousands) of top-level nodes, this can cause a 2x (or worse) slowdown, presumably due to cache misses the second time through the loop.

Still looking for a nice solution.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598625</commentid>
    <comment_count>12</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2012-04-09 14:41:47 -0700</bug_when>
    <thetext>Carrying out this change seems to cause an unavoidable perf regression when a DocumentFragment containing many Nodes is added, since it&apos;s now necessary to touch each Node twice, once when setting its siblings and parent pointers and then again, later, to notify it of insertion, attach a renderer, etc. Balanced against the perf regression, I don&apos;t think this refactoring is worthwhile.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134626</attachid>
            <date>2012-03-29 11:30:50 -0700</date>
            <delta_ts>2012-04-03 16:36:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82631-20120329113049.patch</filename>
            <type>text/plain</type>
            <size>9594</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyNTQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzk0NTJhOTRhNDc2YmZi
MzMwYjkxNTY3MWUwYWEwZGMxNTJiMWQzMC4uYjdhNjZmMzA0YjRiMDMxMjUzNTU3ZTIyMjBlZDk4
NzNkZmRlMWRhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDIyIEBACiAyMDEyLTAzLTI5ICBBZGFt
IEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgogCisgICAgICAgIERlbGF5IHBvc3QtaW5zZXJ0
aW9uIG5vdGlmaWNhdGlvbnMgdW50aWwgbmV3IERPTSB0cmVlIGlzIGNvbXBsZXRlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MjYzMQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9P
UFMhKQorCisgICAgICAgICogZG9tL0NvbnRhaW5lck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjppbnNlcnRCZWZvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6cmVwbGFjZUNoaWxkKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRhaW5lck5vZGU6OmFwcGVuZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OmRp
c3BhdGNoQ2hpbGRJbnNlcnRpb25FdmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6bm90aWZ5Q2hp
bGRyZW5JbnNlcnRlZCk6CisKKzIwMTItMDMtMjkgIEFkYW0gS2xlaW4gIDxhZGFta0BjaHJvbWl1
bS5vcmc+CisKICAgICAgICAgRmFjdG9yIG91dCBjb21tb24gcG9zdC1pbnNlcnRpb24gbG9naWMg
aW4gQ29udGFpbmVyTm9kZQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9ODI1NDQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5l
ck5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCmluZGV4IDQ4
MzA0OWRmOTRhNjgzYjk4YmU5ZTNiODFjOGMyZTBhNzAzMzY5MzYuLmIwNTdhY2IxMGQ3ZDBhNWVl
OWMzODgyYWM4MWY5NDA4ZGQ4Yzg1YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9D
b250YWluZXJOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5j
cHAKQEAgLTUwLDcgKzUwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogc3RhdGljIHZvaWQgbm90
aWZ5Q2hpbGRJbnNlcnRlZChOb2RlKik7CiBzdGF0aWMgdm9pZCBkaXNwYXRjaENoaWxkSW5zZXJ0
aW9uRXZlbnRzKE5vZGUqKTsKIHN0YXRpYyB2b2lkIGRpc3BhdGNoQ2hpbGRSZW1vdmFsRXZlbnRz
KE5vZGUqKTsKLXN0YXRpYyB2b2lkIHVwZGF0ZVRyZWVBZnRlckluc2VydGlvbihDb250YWluZXJO
b2RlKiwgTm9kZSosIGJvb2wgc2hvdWxkTGF6eUF0dGFjaCk7CitzdGF0aWMgdm9pZCBub3RpZnlD
aGlsZHJlbkluc2VydGVkKFBhc3NSZWZQdHI8Q29udGFpbmVyTm9kZT4sIGNvbnN0IE5vZGVWZWN0
b3ImLCBib29sIHNob3VsZExhenlBdHRhY2gpOwogCiB0eXBlZGVmIHBhaXI8UmVmUHRyPE5vZGU+
LCB1bnNpZ25lZD4gQ2FsbGJhY2tQYXJhbWV0ZXJzOwogdHlwZWRlZiBwYWlyPE5vZGVDYWxsYmFj
aywgQ2FsbGJhY2tQYXJhbWV0ZXJzPiBDYWxsYmFja0luZm87CkBAIC0xMjEsNyArMTIxLDcgQEAg
Ym9vbCBDb250YWluZXJOb2RlOjppbnNlcnRCZWZvcmUoUGFzc1JlZlB0cjxOb2RlPiBuZXdDaGls
ZCwgTm9kZSogcmVmQ2hpbGQsIEV4Y2UKICAgICAvLyBJZiBpdCBpcywgaXQgY2FuIGJlIGRlbGV0
ZWQgYXMgYSBzaWRlIGVmZmVjdCBvZiBzZW5kaW5nIG11dGF0aW9uIGV2ZW50cy4KICAgICBBU1NF
UlQocmVmQ291bnQoKSB8fCBwYXJlbnRPckhvc3ROb2RlKCkpOwogCi0gICAgUmVmUHRyPE5vZGU+
IHByb3RlY3QodGhpcyk7CisgICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IHByb3RlY3QodGhpcyk7
CiAKICAgICBlYyA9IDA7CiAKQEAgLTE1MiwyMSArMTUyLDI0IEBAIGJvb2wgQ29udGFpbmVyTm9k
ZTo6aW5zZXJ0QmVmb3JlKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Q2hpbGQsIE5vZGUqIHJlZkNoaWxk
LCBFeGNlCiAgICAgaWYgKHRhcmdldHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAorICAgIC8vIER1ZSB0byBhcmJpdHJhcnkgY29kZSBydW5uaW5nIGluIHJlc3BvbnNlIHRvIGEg
RE9NIG11dGF0aW9uIGV2ZW50IGl0J3MKKyAgICAvLyBwb3NzaWJsZSB0aGF0ICJuZXh0IiBpcyBu
byBsb25nZXIgYSBjaGlsZCBvZiAidGhpcyIuCisgICAgaWYgKG5leHQtPnBhcmVudE5vZGUoKSAh
PSB0aGlzKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwogI2lmIEVOQUJMRShNVVRBVElPTl9PQlNF
UlZFUlMpCiAgICAgQ2hpbGRMaXN0TXV0YXRpb25TY29wZSBtdXRhdGlvbih0aGlzKTsKICNlbmRp
ZgogCi0gICAgZm9yIChOb2RlVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdCA9IHRhcmdldHMuYmVn
aW4oKTsgaXQgIT0gdGFyZ2V0cy5lbmQoKTsgKytpdCkgewotICAgICAgICBOb2RlKiBjaGlsZCA9
IGl0LT5nZXQoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRhcmdldHMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgTm9kZSogY2hpbGQgPSB0YXJnZXRzW2ldLmdldCgpOwogCiAgICAgICAg
IC8vIER1ZSB0byBhcmJpdHJhcnkgY29kZSBydW5uaW5nIGluIHJlc3BvbnNlIHRvIGEgRE9NIG11
dGF0aW9uIGV2ZW50IGl0J3MKLSAgICAgICAgLy8gcG9zc2libGUgdGhhdCAibmV4dCIgaXMgbm8g
bG9uZ2VyIGEgY2hpbGQgb2YgInRoaXMiLgotICAgICAgICAvLyBJdCdzIGFsc28gcG9zc2libGUg
dGhhdCAiY2hpbGQiIGhhcyBiZWVuIGluc2VydGVkIGVsc2V3aGVyZS4KLSAgICAgICAgLy8gSW4g
ZWl0aGVyIG9mIHRob3NlIGNhc2VzLCB3ZSdsbCBqdXN0IHN0b3AuCi0gICAgICAgIGlmIChuZXh0
LT5wYXJlbnROb2RlKCkgIT0gdGhpcykKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAo
Y2hpbGQtPnBhcmVudE5vZGUoKSkKKyAgICAgICAgLy8gcG9zc2libGUgdGhhdCAiY2hpbGQiIGhh
cyBiZWVuIGluc2VydGVkIGVsc2V3aGVyZS4KKyAgICAgICAgaWYgKGNoaWxkLT5wYXJlbnROb2Rl
KCkpIHsKKyAgICAgICAgICAgIHRhcmdldHMucmVzaXplKGkpOwogICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgICAgIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6d2lsbEluc2VydERPTU5vZGUoZG9jdW1lbnQoKSwgY2hpbGQsIHRoaXMp
OwpAQCAtMTc2LDEwICsxNzksMTIgQEAgYm9vbCBDb250YWluZXJOb2RlOjppbnNlcnRCZWZvcmUo
UGFzc1JlZlB0cjxOb2RlPiBuZXdDaGlsZCwgTm9kZSogcmVmQ2hpbGQsIEV4Y2UKIAogICAgICAg
ICBpbnNlcnRCZWZvcmVDb21tb24obmV4dC5nZXQoKSwgY2hpbGQpOwogCi0gICAgICAgIHVwZGF0
ZVRyZWVBZnRlckluc2VydGlvbih0aGlzLCBjaGlsZCwgc2hvdWxkTGF6eUF0dGFjaCk7CisjaWYg
RU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAgICAgICAgbXV0YXRpb24uY2hpbGRBZGRlZChj
aGlsZCk7CisjZW5kaWYKICAgICB9CiAKLSAgICBkaXNwYXRjaFN1YnRyZWVNb2RpZmllZEV2ZW50
KCk7CisgICAgbm90aWZ5Q2hpbGRyZW5JbnNlcnRlZChwcm90ZWN0LnJlbGVhc2UoKSwgdGFyZ2V0
cywgc2hvdWxkTGF6eUF0dGFjaCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTI0MCw3ICsy
NDUsNyBAQCBib29sIENvbnRhaW5lck5vZGU6OnJlcGxhY2VDaGlsZChQYXNzUmVmUHRyPE5vZGU+
IG5ld0NoaWxkLCBOb2RlKiBvbGRDaGlsZCwgRXhjZQogICAgIC8vIElmIGl0IGlzLCBpdCBjYW4g
YmUgZGVsZXRlZCBhcyBhIHNpZGUgZWZmZWN0IG9mIHNlbmRpbmcgbXV0YXRpb24gZXZlbnRzLgog
ICAgIEFTU0VSVChyZWZDb3VudCgpIHx8IHBhcmVudE9ySG9zdE5vZGUoKSk7CiAKLSAgICBSZWZQ
dHI8Tm9kZT4gcHJvdGVjdCh0aGlzKTsKKyAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4gcHJvdGVj
dCh0aGlzKTsKIAogICAgIGVjID0gMDsKIApAQCAtMjc4LDE4ICsyODMsMjAgQEAgYm9vbCBDb250
YWluZXJOb2RlOjpyZXBsYWNlQ2hpbGQoUGFzc1JlZlB0cjxOb2RlPiBuZXdDaGlsZCwgTm9kZSog
b2xkQ2hpbGQsIEV4Y2UKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IC8vIEFkZCB0aGUgbmV3IGNoaWxkKHJlbikKLSAgICBmb3IgKE5vZGVWZWN0b3I6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gdGFyZ2V0cy5iZWdpbigpOyBpdCAhPSB0YXJnZXRzLmVuZCgpOyArK2l0KSB7
Ci0gICAgICAgIE5vZGUqIGNoaWxkID0gaXQtPmdldCgpOworICAgIC8vIER1ZSB0byBhcmJpdHJh
cnkgY29kZSBydW5uaW5nIGluIHJlc3BvbnNlIHRvIGEgRE9NIG11dGF0aW9uIGV2ZW50IGl0J3MK
KyAgICAvLyBwb3NzaWJsZSB0aGF0ICJuZXh0IiBpcyBubyBsb25nZXIgYSBjaGlsZCBvZiAidGhp
cyIuCisgICAgaWYgKG5leHQgJiYgbmV4dC0+cGFyZW50Tm9kZSgpICE9IHRoaXMpCisgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0YXJnZXRzLnNpemUo
KTsgKytpKSB7CisgICAgICAgIE5vZGUqIGNoaWxkID0gdGFyZ2V0c1tpXS5nZXQoKTsKIAogICAg
ICAgICAvLyBEdWUgdG8gYXJiaXRyYXJ5IGNvZGUgcnVubmluZyBpbiByZXNwb25zZSB0byBhIERP
TSBtdXRhdGlvbiBldmVudCBpdCdzCi0gICAgICAgIC8vIHBvc3NpYmxlIHRoYXQgIm5leHQiIGlz
IG5vIGxvbmdlciBhIGNoaWxkIG9mICJ0aGlzIi4KLSAgICAgICAgLy8gSXQncyBhbHNvIHBvc3Np
YmxlIHRoYXQgImNoaWxkIiBoYXMgYmVlbiBpbnNlcnRlZCBlbHNld2hlcmUuCi0gICAgICAgIC8v
IEluIGVpdGhlciBvZiB0aG9zZSBjYXNlcywgd2UnbGwganVzdCBzdG9wLgotICAgICAgICBpZiAo
bmV4dCAmJiBuZXh0LT5wYXJlbnROb2RlKCkgIT0gdGhpcykKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBpZiAoY2hpbGQtPnBhcmVudE5vZGUoKSkKKyAgICAgICAgLy8gcG9zc2libGUgdGhh
dCAiY2hpbGQiIGhhcyBiZWVuIGluc2VydGVkIGVsc2V3aGVyZS4KKyAgICAgICAgaWYgKGNoaWxk
LT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgICAgIHRhcmdldHMucmVzaXplKGkpOwogICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgICAg
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbEluc2VydERPTU5vZGUoZG9jdW1lbnQoKSwg
Y2hpbGQsIHRoaXMpOwpAQCAtMzA1LDEwICszMTIsMTIgQEAgYm9vbCBDb250YWluZXJOb2RlOjpy
ZXBsYWNlQ2hpbGQoUGFzc1JlZlB0cjxOb2RlPiBuZXdDaGlsZCwgTm9kZSogb2xkQ2hpbGQsIEV4
Y2UKICAgICAgICAgICAgIGFwcGVuZENoaWxkVG9Db250YWluZXIoY2hpbGQsIHRoaXMpOwogICAg
ICAgICBhbGxvd0V2ZW50RGlzcGF0Y2goKTsKIAotICAgICAgICB1cGRhdGVUcmVlQWZ0ZXJJbnNl
cnRpb24odGhpcywgY2hpbGQsIHNob3VsZExhenlBdHRhY2gpOworI2lmIEVOQUJMRShNVVRBVElP
Tl9PQlNFUlZFUlMpCisgICAgICAgIG11dGF0aW9uLmNoaWxkQWRkZWQoY2hpbGQpOworI2VuZGlm
CiAgICAgfQogCi0gICAgZGlzcGF0Y2hTdWJ0cmVlTW9kaWZpZWRFdmVudCgpOworICAgIG5vdGlm
eUNoaWxkcmVuSW5zZXJ0ZWQocHJvdGVjdC5yZWxlYXNlKCksIHRhcmdldHMsIHNob3VsZExhenlB
dHRhY2gpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC01NjIsMTUgKzU3MSwxNiBAQCBib29s
IENvbnRhaW5lck5vZGU6OmFwcGVuZENoaWxkKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Q2hpbGQsIEV4
Y2VwdGlvbkNvZGUmIGVjLCBibwogICAgIENoaWxkTGlzdE11dGF0aW9uU2NvcGUgbXV0YXRpb24o
dGhpcyk7CiAjZW5kaWYKIAotICAgIC8vIE5vdyBhY3R1YWxseSBhZGQgdGhlIGNoaWxkKHJlbikK
LSAgICBmb3IgKE5vZGVWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGFyZ2V0cy5iZWdpbigp
OyBpdCAhPSB0YXJnZXRzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIE5vZGUqIGNoaWxkID0gaXQt
PmdldCgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGFyZ2V0cy5zaXplKCk7ICsraSkg
eworICAgICAgICBOb2RlKiBjaGlsZCA9IHRhcmdldHNbaV0uZ2V0KCk7CiAKICAgICAgICAgLy8g
SWYgdGhlIGNoaWxkIGhhcyBhIHBhcmVudCBhZ2FpbiwganVzdCBzdG9wIHdoYXQgd2UncmUgZG9p
bmcsIGJlY2F1c2UKICAgICAgICAgLy8gdGhhdCBtZWFucyBzb21lb25lIGlzIGRvaW5nIHNvbWV0
aGluZyB3aXRoIERPTSBtdXRhdGlvbiAtLSBjYW4ndCByZS1wYXJlbnQKICAgICAgICAgLy8gYSBj
aGlsZCB0aGF0IGFscmVhZHkgaGFzIGEgcGFyZW50LgotICAgICAgICBpZiAoY2hpbGQtPnBhcmVu
dE5vZGUoKSkKKyAgICAgICAgaWYgKGNoaWxkLT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgICAg
IHRhcmdldHMucmVzaXplKGkpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KIAogI2lm
IEVOQUJMRShJTlNQRUNUT1IpCiAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2ls
bEluc2VydERPTU5vZGUoZG9jdW1lbnQoKSwgY2hpbGQsIHRoaXMpOwpAQCAtNTgzLDEwICs1OTMs
MTIgQEAgYm9vbCBDb250YWluZXJOb2RlOjphcHBlbmRDaGlsZChQYXNzUmVmUHRyPE5vZGU+IG5l
d0NoaWxkLCBFeGNlcHRpb25Db2RlJiBlYywgYm8KICAgICAgICAgYXBwZW5kQ2hpbGRUb0NvbnRh
aW5lcihjaGlsZCwgdGhpcyk7CiAgICAgICAgIGFsbG93RXZlbnREaXNwYXRjaCgpOwogCi0gICAg
ICAgIHVwZGF0ZVRyZWVBZnRlckluc2VydGlvbih0aGlzLCBjaGlsZCwgc2hvdWxkTGF6eUF0dGFj
aCk7CisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAgICAgICAgbXV0YXRpb24uY2hp
bGRBZGRlZChjaGlsZCk7CisjZW5kaWYKICAgICB9CiAKLSAgICBkaXNwYXRjaFN1YnRyZWVNb2Rp
ZmllZEV2ZW50KCk7CisgICAgbm90aWZ5Q2hpbGRyZW5JbnNlcnRlZChwcm90ZWN0LnJlbGVhc2Uo
KSwgdGFyZ2V0cywgc2hvdWxkTGF6eUF0dGFjaCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAg
LTEwMzcsMTMgKzEwNDksNiBAQCBzdGF0aWMgdm9pZCBkaXNwYXRjaENoaWxkSW5zZXJ0aW9uRXZl
bnRzKE5vZGUqIGNoaWxkKQogICAgIFJlZlB0cjxOb2RlPiBjID0gY2hpbGQ7CiAgICAgUmVmUHRy
PERvY3VtZW50PiBkb2N1bWVudCA9IGNoaWxkLT5kb2N1bWVudCgpOwogCi0jaWYgRU5BQkxFKE1V
VEFUSU9OX09CU0VSVkVSUykKLSAgICBpZiAoYy0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIENo
aWxkTGlzdE11dGF0aW9uU2NvcGUgbXV0YXRpb24oYy0+cGFyZW50Tm9kZSgpKTsKLSAgICAgICAg
bXV0YXRpb24uY2hpbGRBZGRlZChjLmdldCgpKTsKLSAgICB9Ci0jZW5kaWYKLQogICAgIGlmIChj
LT5wYXJlbnROb2RlKCkgJiYgZG9jdW1lbnQtPmhhc0xpc3RlbmVyVHlwZShEb2N1bWVudDo6RE9N
Tk9ERUlOU0VSVEVEX0xJU1RFTkVSKSkKICAgICAgICAgYy0+ZGlzcGF0Y2hTY29wZWRFdmVudChN
dXRhdGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLkRPTU5vZGVJbnNlcnRlZEV2ZW50LCB0
cnVlLCBjLT5wYXJlbnROb2RlKCkpKTsKIApAQCAtMTA4NywyNSArMTA5MiwzMiBAQCBzdGF0aWMg
dm9pZCBkaXNwYXRjaENoaWxkUmVtb3ZhbEV2ZW50cyhOb2RlKiBjaGlsZCkKICAgICB9CiB9CiAK
LXN0YXRpYyB2b2lkIHVwZGF0ZVRyZWVBZnRlckluc2VydGlvbihDb250YWluZXJOb2RlKiBwYXJl
bnQsIE5vZGUqIGNoaWxkLCBib29sIHNob3VsZExhenlBdHRhY2gpCitzdGF0aWMgdm9pZCBub3Rp
ZnlDaGlsZHJlbkluc2VydGVkKFBhc3NSZWZQdHI8Q29udGFpbmVyTm9kZT4gcGFyZW50LCBjb25z
dCBOb2RlVmVjdG9yJiBjaGlsZHJlbiwgYm9vbCBzaG91bGRMYXp5QXR0YWNoKQogewotICAgIEFT
U0VSVChwYXJlbnQtPnJlZkNvdW50KCkpOwotICAgIEFTU0VSVChjaGlsZC0+cmVmQ291bnQoKSk7
CisgICAgaWYgKGNoaWxkcmVuLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcGFy
ZW50LT5jaGlsZHJlbkNoYW5nZWQoZmFsc2UsIGNoaWxkcmVuLmZpcnN0KCktPnByZXZpb3VzU2li
bGluZygpLCBjaGlsZHJlbi5sYXN0KCktPm5leHRTaWJsaW5nKCksIGNoaWxkcmVuLnNpemUoKSk7
CiAKLSAgICBwYXJlbnQtPmNoaWxkcmVuQ2hhbmdlZChmYWxzZSwgY2hpbGQtPnByZXZpb3VzU2li
bGluZygpLCBjaGlsZC0+bmV4dFNpYmxpbmcoKSwgMSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBjaGlsZHJlbi5zaXplKCk7ICsraSkgeworICAgICAgICBOb2RlKiBjaGlsZCA9IGNoaWxk
cmVuW2ldLmdldCgpOworICAgICAgICBub3RpZnlDaGlsZEluc2VydGVkKGNoaWxkKTsKIAotICAg
IG5vdGlmeUNoaWxkSW5zZXJ0ZWQoY2hpbGQpOworICAgICAgICAvLyBGSVhNRTogQXR0YWNobWVu
dCBzaG91bGQgYmUgdGhlIGZpcnN0IG9wZXJhdGlvbiBpbiB0aGlzIGZ1bmN0aW9uLCBidXQgc29t
ZSBjb2RlCisgICAgICAgIC8vIChmb3IgZXhhbXBsZSwgSFRNTEZvcm1Db250cm9sRWxlbWVudCdz
IGF1dG9mb2N1cyBzdXBwb3J0KSByZXF1aXJlcyB0aGlzIG9yZGVyaW5nLgorICAgICAgICBpZiAo
cGFyZW50LT5hdHRhY2hlZCgpICYmICFjaGlsZC0+YXR0YWNoZWQoKSAmJiBjaGlsZC0+cGFyZW50
Tm9kZSgpID09IHBhcmVudCkgeworICAgICAgICAgICAgaWYgKHNob3VsZExhenlBdHRhY2gpCisg
ICAgICAgICAgICAgICAgY2hpbGQtPmxhenlBdHRhY2goKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBjaGlsZC0+YXR0YWNoKCk7CisgICAgICAgIH0KIAotICAgIC8vIEZJWE1F
OiBBdHRhY2htZW50IHNob3VsZCBiZSB0aGUgZmlyc3Qgb3BlcmF0aW9uIGluIHRoaXMgZnVuY3Rp
b24sIGJ1dCBzb21lIGNvZGUKLSAgICAvLyAoZm9yIGV4YW1wbGUsIEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQncyBhdXRvZm9jdXMgc3VwcG9ydCkgcmVxdWlyZXMgdGhpcyBvcmRlcmluZy4KLSAgICBp
ZiAocGFyZW50LT5hdHRhY2hlZCgpICYmICFjaGlsZC0+YXR0YWNoZWQoKSAmJiBjaGlsZC0+cGFy
ZW50Tm9kZSgpID09IHBhcmVudCkgewotICAgICAgICBpZiAoc2hvdWxkTGF6eUF0dGFjaCkKLSAg
ICAgICAgICAgIGNoaWxkLT5sYXp5QXR0YWNoKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGNoaWxkLT5hdHRhY2goKTsKKyAgICAgICAgLy8gTm93IHRoYXQgdGhlIGNoaWxkIGlzIGF0dGFj
aGVkIHRvIHRoZSByZW5kZXIgdHJlZSwgZGlzcGF0Y2gKKyAgICAgICAgLy8gdGhlIHJlbGV2YW50
IG11dGF0aW9uIGV2ZW50cy4KKyAgICAgICAgZGlzcGF0Y2hDaGlsZEluc2VydGlvbkV2ZW50cyhj
aGlsZCk7CiAgICAgfQogCi0gICAgZGlzcGF0Y2hDaGlsZEluc2VydGlvbkV2ZW50cyhjaGlsZCk7
CisgICAgcGFyZW50LT5kaXNwYXRjaFN1YnRyZWVNb2RpZmllZEV2ZW50KCk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135454</attachid>
            <date>2012-04-03 16:36:02 -0700</date>
            <delta_ts>2012-04-04 13:16:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82631-20120403163601.patch</filename>
            <type>text/plain</type>
            <size>17586</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEzMDY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWYyZDg0NWQ0NjQwNDI4
ZDU3MGE3Yjk3YTE3MmJkNmI4MzVmYmQxOS4uMjRiMmE4MjlmMjUyOGFkMzhhMTk4NWIyODlhNTI0
ZTgzNjA2OTQyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDEyLTA0LTAyICBBZGFt
IEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgorCisgICAgICAgIERlbGF5IHBvc3QtaW5zZXJ0
aW9uIG5vdGlmaWNhdGlvbnMgdW50aWwgbmV3IERPTSB0cmVlIGlzIGNvbXBsZXRlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MjYzMQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdoZW4gaW5zZXJ0aW5nIGEg
RG9jdW1lbnRGcmFnbWVudCwgV2ViS2l0IHByZXZpb3VzbHkgd291bGQgdXBkYXRlIGJvdGgKKyAg
ICAgICAgaW50ZXJuYWwgV2ViQ29yZSBzdGF0ZSBhbmQgbXV0YXRpb24gZXZlbnQgbGlzdGVuZXJz
IGFmdGVyIGVhY2ggbm9kZQorICAgICAgICB3YXMgaW5zZXJ0ZWQuIFRoaXMgaXMgaW5jb25zaXN0
ZW50IG5vdCBvbmx5IHdpdGggRE9NNCwgYnV0IGFsc28KKyAgICAgICAgd2l0aCAoYXQgbGVhc3Qp
IEZpcmVmb3ggYW5kIElFLiBHaXZlbiB0aGUgbWFueSBidWdzIG92ZXIgdGhlIHllYXJzIGluCisg
ICAgICAgIFdlYktpdCBkdWUgdG8gdGhpcyBiZWhhdmlvciwgaXQgc2VlbXMgYmV0dGVyIHRvIGRl
bGF5IG5vdGlmaWNhdGlvbgorICAgICAgICB1bnRpbCB0aGUgZnJhZ21lbnQgaXMgY29tcGxldGVs
eSBpbnNlcnRlZC4KKworICAgICAgICBUaGUgY2hhbmdlcyB0byB0aGUgdGhyZWUgY29yZSBtdXRh
dGlvbiBtZXRob2RzIGJlbG93IGFyZSBzaW1pbGFyLgorCisgICAgICAgIFRlc3Q6IGZhc3QvZXZl
bnRzL2RvbW5vZGVpbnNlcnRlZC1lbnRpcmUtZnJhZ21lbnQuaHRtbAorCisgICAgICAgICogZG9t
L0NvbnRhaW5lck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZSk6IFJlbmFtZWQgdXBkYXRlVHJl
ZUFmdGVySW5zZXJ0aW9uIHRvIG5vdGlmeUNoaWxkcmVuSW5zZXJ0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpDb250YWluZXJOb2RlOjppbnNlcnRCZWZvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGFpbmVyTm9kZTo6cmVwbGFjZUNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5v
ZGU6OmFwcGVuZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OmRpc3BhdGNoQ2hpbGRJbnNlcnRp
b25FdmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6bm90aWZ5Q2hpbGRyZW5JbnNlcnRlZCk6CisK
IDIwMTItMDQtMDMgIEppYSBQdSAgPGpwdUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVuYW1lIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcoKSB0byBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0No
aWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwCmluZGV4IGM1Y2IzYWQ5ZjZlYWI3OGQ4OWU1ZDY3ZWE5
YzQzNTIzMjI5N2UwN2UuLjRkMjRlMTJjMTlmMTc0NmM5ZmEyNTM4ZWY5NDBiNzY1NGVkZmU4MDkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHAKQEAg
LTU1LDE0ICs1NSwxNCBAQCBwdWJsaWM6CiAgICAgTXV0YXRpb25BY2N1bXVsYXRvcihQYXNzUmVm
UHRyPE5vZGU+LCBQYXNzT3duUHRyPE11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwPiBvYnNl
cnZlcnMpOwogICAgIH5NdXRhdGlvbkFjY3VtdWxhdG9yKCk7CiAKLSAgICB2b2lkIGNoaWxkQWRk
ZWQoUGFzc1JlZlB0cjxOb2RlPik7CisgICAgdm9pZCBjaGlsZHJlbkFkZGVkKGNvbnN0IE5vZGVW
ZWN0b3ImKTsKICAgICB2b2lkIHdpbGxSZW1vdmVDaGlsZChQYXNzUmVmUHRyPE5vZGU+KTsKICAg
ICB2b2lkIGVucXVldWVNdXRhdGlvblJlY29yZCgpOwogCiBwcml2YXRlOgogICAgIHZvaWQgY2xl
YXIoKTsKICAgICBib29sIGlzRW1wdHkoKTsKLSAgICBib29sIGlzQWRkZWROb2RlSW5PcmRlcihO
b2RlKik7CisgICAgYm9vbCBhcmVBZGRlZE5vZGVzSW5PcmRlcihjb25zdCBOb2RlVmVjdG9yJik7
CiAgICAgYm9vbCBpc1JlbW92ZWROb2RlSW5PcmRlcihOb2RlKik7CiAgICAgUmVmUHRyPE5vZGU+
IG1fdGFyZ2V0OwogCkBAIC04NywyNiArODcsMjcgQEAgQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6
TXV0YXRpb25BY2N1bXVsYXRvcjo6fk11dGF0aW9uQWNjdW11bGF0b3IoKQogICAgIEFTU0VSVChp
c0VtcHR5KCkpOwogfQogCi1pbmxpbmUgYm9vbCBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRh
dGlvbkFjY3VtdWxhdG9yOjppc0FkZGVkTm9kZUluT3JkZXIoTm9kZSogY2hpbGQpCitpbmxpbmUg
Ym9vbCBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdG9yOjphcmVBZGRl
ZE5vZGVzSW5PcmRlcihjb25zdCBOb2RlVmVjdG9yJiBjaGlsZHJlbikKIHsKLSAgICByZXR1cm4g
aXNFbXB0eSgpIHx8IChtX2xhc3RBZGRlZCA9PSBjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkgJiYg
bV9uZXh0U2libGluZyA9PSBjaGlsZC0+bmV4dFNpYmxpbmcoKSk7CisgICAgcmV0dXJuIGlzRW1w
dHkoKSB8fCAobV9sYXN0QWRkZWQgPT0gY2hpbGRyZW4uZmlyc3QoKS0+cHJldmlvdXNTaWJsaW5n
KCkgJiYgbV9uZXh0U2libGluZyA9PSBjaGlsZHJlbi5sYXN0KCktPm5leHRTaWJsaW5nKCkpOwog
fQogCi12b2lkIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0b3I6OmNo
aWxkQWRkZWQoUGFzc1JlZlB0cjxOb2RlPiBwcnBDaGlsZCkKK3ZvaWQgQ2hpbGRMaXN0TXV0YXRp
b25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRvcjo6Y2hpbGRyZW5BZGRlZChjb25zdCBOb2RlVmVj
dG9yJiBjaGlsZHJlbikKIHsKLSAgICBSZWZQdHI8Tm9kZT4gY2hpbGQgPSBwcnBDaGlsZDsKKyAg
ICBBU1NFUlQoIWNoaWxkcmVuLmlzRW1wdHkoKSk7CiAKLSAgICBBU1NFUlQoaXNBZGRlZE5vZGVJ
bk9yZGVyKGNoaWxkLmdldCgpKSk7Ci0gICAgaWYgKCFpc0FkZGVkTm9kZUluT3JkZXIoY2hpbGQu
Z2V0KCkpKQorICAgIGlmICghYXJlQWRkZWROb2Rlc0luT3JkZXIoY2hpbGRyZW4pKSB7CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBlbnF1ZXVlTXV0YXRpb25SZWNvcmQo
KTsKKyAgICB9CiAKICAgICBpZiAoaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fcHJldmlvdXNTaWJs
aW5nID0gY2hpbGQtPnByZXZpb3VzU2libGluZygpOwotICAgICAgICBtX25leHRTaWJsaW5nID0g
Y2hpbGQtPm5leHRTaWJsaW5nKCk7CisgICAgICAgIG1fcHJldmlvdXNTaWJsaW5nID0gY2hpbGRy
ZW4uZmlyc3QoKS0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgIG1fbmV4dFNpYmxpbmcgPSBj
aGlsZHJlbi5sYXN0KCktPm5leHRTaWJsaW5nKCk7CiAgICAgfQogCi0gICAgbV9hZGRlZE5vZGVz
LmFwcGVuZChjaGlsZCk7Ci0gICAgbV9sYXN0QWRkZWQgPSBjaGlsZDsKKyAgICBtX2FkZGVkTm9k
ZXMuYXBwZW5kKGNoaWxkcmVuKTsKKyAgICBtX2xhc3RBZGRlZCA9IGNoaWxkcmVuLmxhc3QoKTsK
IH0KIAogaW5saW5lIGJvb2wgQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVs
YXRvcjo6aXNSZW1vdmVkTm9kZUluT3JkZXIoTm9kZSogY2hpbGQpCkBAIC0xODksMTQgKzE5MCwx
NCBAQCBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlciog
Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YQogICAgIHJldHVybiBzX2luc3RhbmNlOwogfQog
Ci12b2lkIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVy
OjpjaGlsZEFkZGVkKE5vZGUqIHRhcmdldCwgTm9kZSogY2hpbGQpCit2b2lkIENoaWxkTGlzdE11
dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyOjpjaGlsZHJlbkFkZGVkKE5v
ZGUqIHRhcmdldCwgY29uc3QgTm9kZVZlY3RvciYgY2hpbGRyZW4pCiB7CiAgICAgSGFzaE1hcDxO
b2RlKiwgT3duUHRyPENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0b3I+
ID46Oml0ZXJhdG9yIGl0ZXIgPSBtX2FjY3VtdWxhdGlvbnMuZmluZCh0YXJnZXQpOwogICAgIEFT
U0VSVChpdGVyICE9IG1fYWNjdW11bGF0aW9ucy5lbmQoKSk7CiAgICAgaWYgKGl0ZXIgPT0gbV9h
Y2N1bXVsYXRpb25zLmVuZCgpIHx8ICFpdGVyLT5zZWNvbmQpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGl0ZXItPnNlY29uZC0+Y2hpbGRBZGRlZChjaGlsZCk7CisgICAgaXRlci0+c2Vjb25kLT5j
aGlsZHJlbkFkZGVkKGNoaWxkcmVuKTsKIH0KIAogdm9pZCBDaGlsZExpc3RNdXRhdGlvblNjb3Bl
OjpNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6d2lsbFJlbW92ZUNoaWxkKE5vZGUqIHRhcmdl
dCwgTm9kZSogY2hpbGQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0
TXV0YXRpb25TY29wZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTGlzdE11dGF0aW9uU2Nv
cGUuaAppbmRleCA2ZGQ1MjM2NDBiNjFmMDZmM2E1M2JhNTc1YjVjYWVkOTIzN2M0MDVmLi5hNzg5
YzY1Yzc2ODIwMDg5NDVjZWU4ZmY4NGVhODk1Zjc5M2I5NDU3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmgKQEAgLTMzLDYgKzMzLDcgQEAKIAogI2lmIEVO
QUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCiAKKyNpbmNsdWRlICJDb250YWluZXJOb2RlLmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiV2ViS2l0
TXV0YXRpb25PYnNlcnZlci5oIgpAQCAtNTgsMTAgKzU5LDEwIEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIE11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyOjppbnN0YW5jZSgpLT5kZWNyZW1lbnRTY29w
aW5nTGV2ZWwobV90YXJnZXQpOwogICAgIH0KIAotICAgIHZvaWQgY2hpbGRBZGRlZChOb2RlKiBj
aGlsZCkKKyAgICB2b2lkIGNoaWxkcmVuQWRkZWQoY29uc3QgTm9kZVZlY3RvciYgY2hpbGRyZW4p
CiAgICAgewogICAgICAgICBpZiAobV90YXJnZXQpCi0gICAgICAgICAgICBNdXRhdGlvbkFjY3Vt
dWxhdGlvblJvdXRlcjo6aW5zdGFuY2UoKS0+Y2hpbGRBZGRlZChtX3RhcmdldCwgY2hpbGQpOwor
ICAgICAgICAgICAgTXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6Omluc3RhbmNlKCktPmNoaWxk
cmVuQWRkZWQobV90YXJnZXQsIGNoaWxkcmVuKTsKICAgICB9CiAKICAgICB2b2lkIHdpbGxSZW1v
dmVDaGlsZChOb2RlKiBjaGlsZCkKQEAgLTgzLDcgKzg0LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
dm9pZCBpbmNyZW1lbnRTY29waW5nTGV2ZWwoTm9kZSopOwogICAgICAgICB2b2lkIGRlY3JlbWVu
dFNjb3BpbmdMZXZlbChOb2RlKik7CiAKLSAgICAgICAgdm9pZCBjaGlsZEFkZGVkKE5vZGUqIHRh
cmdldCwgTm9kZSogY2hpbGQpOworICAgICAgICB2b2lkIGNoaWxkcmVuQWRkZWQoTm9kZSogdGFy
Z2V0LCBjb25zdCBOb2RlVmVjdG9yJiBjaGlsZHJlbik7CiAgICAgICAgIHZvaWQgd2lsbFJlbW92
ZUNoaWxkKE5vZGUqIHRhcmdldCwgTm9kZSogY2hpbGQpOwogCiAgICAgcHJpdmF0ZToKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAppbmRleCA0ODMwNDlkZjk0YTY4M2I5OGJlOWUzYjgx
YzhjMmUwYTcwMzM2OTM2Li5mNmQ5ZjA4ZDFiZTVlMTQ1NjRjNzM3OTkwYTY5NGIxNmRhNjRlY2Iy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCkBAIC01MCw3ICs1MCw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIHN0YXRpYyB2b2lkIG5vdGlmeUNoaWxkSW5zZXJ0ZWQoTm9kZSop
Owogc3RhdGljIHZvaWQgZGlzcGF0Y2hDaGlsZEluc2VydGlvbkV2ZW50cyhOb2RlKik7CiBzdGF0
aWMgdm9pZCBkaXNwYXRjaENoaWxkUmVtb3ZhbEV2ZW50cyhOb2RlKik7Ci1zdGF0aWMgdm9pZCB1
cGRhdGVUcmVlQWZ0ZXJJbnNlcnRpb24oQ29udGFpbmVyTm9kZSosIE5vZGUqLCBib29sIHNob3Vs
ZExhenlBdHRhY2gpOworc3RhdGljIHZvaWQgbm90aWZ5Q2hpbGRyZW5JbnNlcnRlZChQYXNzUmVm
UHRyPENvbnRhaW5lck5vZGU+LCBjb25zdCBOb2RlVmVjdG9yJiwgYm9vbCBzaG91bGRMYXp5QXR0
YWNoKTsKIAogdHlwZWRlZiBwYWlyPFJlZlB0cjxOb2RlPiwgdW5zaWduZWQ+IENhbGxiYWNrUGFy
YW1ldGVyczsKIHR5cGVkZWYgcGFpcjxOb2RlQ2FsbGJhY2ssIENhbGxiYWNrUGFyYW1ldGVycz4g
Q2FsbGJhY2tJbmZvOwpAQCAtMTIxLDcgKzEyMSw3IEBAIGJvb2wgQ29udGFpbmVyTm9kZTo6aW5z
ZXJ0QmVmb3JlKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Q2hpbGQsIE5vZGUqIHJlZkNoaWxkLCBFeGNl
CiAgICAgLy8gSWYgaXQgaXMsIGl0IGNhbiBiZSBkZWxldGVkIGFzIGEgc2lkZSBlZmZlY3Qgb2Yg
c2VuZGluZyBtdXRhdGlvbiBldmVudHMuCiAgICAgQVNTRVJUKHJlZkNvdW50KCkgfHwgcGFyZW50
T3JIb3N0Tm9kZSgpKTsKIAotICAgIFJlZlB0cjxOb2RlPiBwcm90ZWN0KHRoaXMpOworICAgIFJl
ZlB0cjxDb250YWluZXJOb2RlPiBwcm90ZWN0KHRoaXMpOwogCiAgICAgZWMgPSAwOwogCkBAIC0x
NTIsMzQgKzE1MiwzNyBAQCBib29sIENvbnRhaW5lck5vZGU6Omluc2VydEJlZm9yZShQYXNzUmVm
UHRyPE5vZGU+IG5ld0NoaWxkLCBOb2RlKiByZWZDaGlsZCwgRXhjZQogICAgIGlmICh0YXJnZXRz
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKKyAgICAvLyBEdWUgdG8gYXJiaXRy
YXJ5IGNvZGUgcnVubmluZyBpbiByZXNwb25zZSB0byBhIERPTSBtdXRhdGlvbiBldmVudCBpdCdz
CisgICAgLy8gcG9zc2libGUgdGhhdCAibmV4dCIgaXMgbm8gbG9uZ2VyIGEgY2hpbGQgb2YgInRo
aXMiLgorICAgIGlmIChuZXh0LT5wYXJlbnROb2RlKCkgIT0gdGhpcykKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6d2lsbEluc2VydERPTU5vZGUoZG9jdW1lbnQoKSwgMCwgdGhpcyk7CisjZW5kaWYKKwog
I2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCiAgICAgQ2hpbGRMaXN0TXV0YXRpb25TY29w
ZSBtdXRhdGlvbih0aGlzKTsKICNlbmRpZgogCi0gICAgZm9yIChOb2RlVmVjdG9yOjpjb25zdF9p
dGVyYXRvciBpdCA9IHRhcmdldHMuYmVnaW4oKTsgaXQgIT0gdGFyZ2V0cy5lbmQoKTsgKytpdCkg
ewotICAgICAgICBOb2RlKiBjaGlsZCA9IGl0LT5nZXQoKTsKKyAgICBmb3JiaWRFdmVudERpc3Bh
dGNoKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0YXJnZXRzLnNpemUoKTsgKytpKSB7
CisgICAgICAgIE5vZGUqIGNoaWxkID0gdGFyZ2V0c1tpXS5nZXQoKTsKIAogICAgICAgICAvLyBE
dWUgdG8gYXJiaXRyYXJ5IGNvZGUgcnVubmluZyBpbiByZXNwb25zZSB0byBhIERPTSBtdXRhdGlv
biBldmVudCBpdCdzCi0gICAgICAgIC8vIHBvc3NpYmxlIHRoYXQgIm5leHQiIGlzIG5vIGxvbmdl
ciBhIGNoaWxkIG9mICJ0aGlzIi4KLSAgICAgICAgLy8gSXQncyBhbHNvIHBvc3NpYmxlIHRoYXQg
ImNoaWxkIiBoYXMgYmVlbiBpbnNlcnRlZCBlbHNld2hlcmUuCi0gICAgICAgIC8vIEluIGVpdGhl
ciBvZiB0aG9zZSBjYXNlcywgd2UnbGwganVzdCBzdG9wLgotICAgICAgICBpZiAobmV4dC0+cGFy
ZW50Tm9kZSgpICE9IHRoaXMpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgaWYgKGNoaWxk
LT5wYXJlbnROb2RlKCkpCisgICAgICAgIC8vIHBvc3NpYmxlIHRoYXQgImNoaWxkIiBoYXMgYmVl
biBpbnNlcnRlZCBlbHNld2hlcmUuCisgICAgICAgIGlmIChjaGlsZC0+cGFyZW50Tm9kZSgpKSB7
CisgICAgICAgICAgICB0YXJnZXRzLnJlc2l6ZShpKTsKICAgICAgICAgICAgIGJyZWFrOwotCi0j
aWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3
aWxsSW5zZXJ0RE9NTm9kZShkb2N1bWVudCgpLCBjaGlsZCwgdGhpcyk7Ci0jZW5kaWYKKyAgICAg
ICAgfQogCiAgICAgICAgIHRyZWVTY29wZSgpLT5hZG9wdElmTmVlZGVkKGNoaWxkKTsKIAogICAg
ICAgICBpbnNlcnRCZWZvcmVDb21tb24obmV4dC5nZXQoKSwgY2hpbGQpOwotCi0gICAgICAgIHVw
ZGF0ZVRyZWVBZnRlckluc2VydGlvbih0aGlzLCBjaGlsZCwgc2hvdWxkTGF6eUF0dGFjaCk7CiAg
ICAgfQorICAgIGFsbG93RXZlbnREaXNwYXRjaCgpOwogCi0gICAgZGlzcGF0Y2hTdWJ0cmVlTW9k
aWZpZWRFdmVudCgpOworICAgIG5vdGlmeUNoaWxkcmVuSW5zZXJ0ZWQocHJvdGVjdC5yZWxlYXNl
KCksIHRhcmdldHMsIHNob3VsZExhenlBdHRhY2gpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBA
IC0yNDAsNyArMjQzLDcgQEAgYm9vbCBDb250YWluZXJOb2RlOjpyZXBsYWNlQ2hpbGQoUGFzc1Jl
ZlB0cjxOb2RlPiBuZXdDaGlsZCwgTm9kZSogb2xkQ2hpbGQsIEV4Y2UKICAgICAvLyBJZiBpdCBp
cywgaXQgY2FuIGJlIGRlbGV0ZWQgYXMgYSBzaWRlIGVmZmVjdCBvZiBzZW5kaW5nIG11dGF0aW9u
IGV2ZW50cy4KICAgICBBU1NFUlQocmVmQ291bnQoKSB8fCBwYXJlbnRPckhvc3ROb2RlKCkpOwog
Ci0gICAgUmVmUHRyPE5vZGU+IHByb3RlY3QodGhpcyk7CisgICAgUmVmUHRyPENvbnRhaW5lck5v
ZGU+IHByb3RlY3QodGhpcyk7CiAKICAgICBlYyA9IDA7CiAKQEAgLTI3OCwzNyArMjgxLDM2IEBA
IGJvb2wgQ29udGFpbmVyTm9kZTo6cmVwbGFjZUNoaWxkKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Q2hp
bGQsIE5vZGUqIG9sZENoaWxkLCBFeGNlCiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICAvLyBBZGQgdGhlIG5ldyBjaGlsZChyZW4pCi0gICAgZm9yIChOb2RlVmVjdG9y
Ojpjb25zdF9pdGVyYXRvciBpdCA9IHRhcmdldHMuYmVnaW4oKTsgaXQgIT0gdGFyZ2V0cy5lbmQo
KTsgKytpdCkgewotICAgICAgICBOb2RlKiBjaGlsZCA9IGl0LT5nZXQoKTsKLQotICAgICAgICAv
LyBEdWUgdG8gYXJiaXRyYXJ5IGNvZGUgcnVubmluZyBpbiByZXNwb25zZSB0byBhIERPTSBtdXRh
dGlvbiBldmVudCBpdCdzCi0gICAgICAgIC8vIHBvc3NpYmxlIHRoYXQgIm5leHQiIGlzIG5vIGxv
bmdlciBhIGNoaWxkIG9mICJ0aGlzIi4KLSAgICAgICAgLy8gSXQncyBhbHNvIHBvc3NpYmxlIHRo
YXQgImNoaWxkIiBoYXMgYmVlbiBpbnNlcnRlZCBlbHNld2hlcmUuCi0gICAgICAgIC8vIEluIGVp
dGhlciBvZiB0aG9zZSBjYXNlcywgd2UnbGwganVzdCBzdG9wLgotICAgICAgICBpZiAobmV4dCAm
JiBuZXh0LT5wYXJlbnROb2RlKCkgIT0gdGhpcykKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBpZiAoY2hpbGQtPnBhcmVudE5vZGUoKSkKLSAgICAgICAgICAgIGJyZWFrOworICAgIC8vIER1
ZSB0byBhcmJpdHJhcnkgY29kZSBydW5uaW5nIGluIHJlc3BvbnNlIHRvIGEgRE9NIG11dGF0aW9u
IGV2ZW50IGl0J3MKKyAgICAvLyBwb3NzaWJsZSB0aGF0ICJuZXh0IiBpcyBubyBsb25nZXIgYSBj
aGlsZCBvZiAidGhpcyIuCisgICAgaWYgKG5leHQgJiYgbmV4dC0+cGFyZW50Tm9kZSgpICE9IHRo
aXMpCisgICAgICAgIHJldHVybiB0cnVlOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICAg
ICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsSW5zZXJ0RE9NTm9kZShkb2N1bWVudCgp
LCBjaGlsZCwgdGhpcyk7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsSW5zZXJ0
RE9NTm9kZShkb2N1bWVudCgpLCAwLCB0aGlzKTsKICNlbmRpZgogCisgICAgZm9yYmlkRXZlbnRE
aXNwYXRjaCgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGFyZ2V0cy5zaXplKCk7ICsr
aSkgeworICAgICAgICBOb2RlKiBjaGlsZCA9IHRhcmdldHNbaV0uZ2V0KCk7CisKKyAgICAgICAg
Ly8gRHVlIHRvIGFyYml0cmFyeSBjb2RlIHJ1bm5pbmcgaW4gcmVzcG9uc2UgdG8gYSBET00gbXV0
YXRpb24gZXZlbnQgaXQncworICAgICAgICAvLyBwb3NzaWJsZSB0aGF0ICJjaGlsZCIgaGFzIGJl
ZW4gaW5zZXJ0ZWQgZWxzZXdoZXJlLgorICAgICAgICBpZiAoY2hpbGQtPnBhcmVudE5vZGUoKSkg
eworICAgICAgICAgICAgdGFyZ2V0cy5yZXNpemUoaSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorCiAgICAgICAgIHRyZWVTY29wZSgpLT5hZG9wdElmTmVlZGVkKGNoaWxkKTsKIAot
ICAgICAgICAvLyBBZGQgY2hpbGQgYmVmb3JlICJuZXh0Ii4KLSAgICAgICAgZm9yYmlkRXZlbnRE
aXNwYXRjaCgpOwogICAgICAgICBpZiAobmV4dCkKICAgICAgICAgICAgIGluc2VydEJlZm9yZUNv
bW1vbihuZXh0LmdldCgpLCBjaGlsZCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGFwcGVu
ZENoaWxkVG9Db250YWluZXIoY2hpbGQsIHRoaXMpOwotICAgICAgICBhbGxvd0V2ZW50RGlzcGF0
Y2goKTsKLQotICAgICAgICB1cGRhdGVUcmVlQWZ0ZXJJbnNlcnRpb24odGhpcywgY2hpbGQsIHNo
b3VsZExhenlBdHRhY2gpOwogICAgIH0KKyAgICBhbGxvd0V2ZW50RGlzcGF0Y2goKTsKIAotICAg
IGRpc3BhdGNoU3VidHJlZU1vZGlmaWVkRXZlbnQoKTsKKyAgICBub3RpZnlDaGlsZHJlbkluc2Vy
dGVkKHByb3RlY3QucmVsZWFzZSgpLCB0YXJnZXRzLCBzaG91bGRMYXp5QXR0YWNoKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNTU4LDM1ICs1NjAsMzMgQEAgYm9vbCBDb250YWluZXJOb2Rl
OjphcHBlbmRDaGlsZChQYXNzUmVmUHRyPE5vZGU+IG5ld0NoaWxkLCBFeGNlcHRpb25Db2RlJiBl
YywgYm8KICAgICBpZiAodGFyZ2V0cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwog
CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Ondp
bGxJbnNlcnRET01Ob2RlKGRvY3VtZW50KCksIDAsIHRoaXMpOworI2VuZGlmCisKICNpZiBFTkFC
TEUoTVVUQVRJT05fT0JTRVJWRVJTKQogICAgIENoaWxkTGlzdE11dGF0aW9uU2NvcGUgbXV0YXRp
b24odGhpcyk7CiAjZW5kaWYKIAotICAgIC8vIE5vdyBhY3R1YWxseSBhZGQgdGhlIGNoaWxkKHJl
bikKLSAgICBmb3IgKE5vZGVWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGFyZ2V0cy5iZWdp
bigpOyBpdCAhPSB0YXJnZXRzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIE5vZGUqIGNoaWxkID0g
aXQtPmdldCgpOworICAgIGZvcmJpZEV2ZW50RGlzcGF0Y2goKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHRhcmdldHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTm9kZSogY2hpbGQgPSB0
YXJnZXRzW2ldLmdldCgpOwogCiAgICAgICAgIC8vIElmIHRoZSBjaGlsZCBoYXMgYSBwYXJlbnQg
YWdhaW4sIGp1c3Qgc3RvcCB3aGF0IHdlJ3JlIGRvaW5nLCBiZWNhdXNlCiAgICAgICAgIC8vIHRo
YXQgbWVhbnMgc29tZW9uZSBpcyBkb2luZyBzb21ldGhpbmcgd2l0aCBET00gbXV0YXRpb24gLS0g
Y2FuJ3QgcmUtcGFyZW50CiAgICAgICAgIC8vIGEgY2hpbGQgdGhhdCBhbHJlYWR5IGhhcyBhIHBh
cmVudC4KLSAgICAgICAgaWYgKGNoaWxkLT5wYXJlbnROb2RlKCkpCisgICAgICAgIGlmIChjaGls
ZC0+cGFyZW50Tm9kZSgpKSB7CisgICAgICAgICAgICB0YXJnZXRzLnJlc2l6ZShpKTsKICAgICAg
ICAgICAgIGJyZWFrOwotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICAgICAgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjp3aWxsSW5zZXJ0RE9NTm9kZShkb2N1bWVudCgpLCBjaGlsZCwgdGhp
cyk7Ci0jZW5kaWYKKyAgICAgICAgfQogCiAgICAgICAgIHRyZWVTY29wZSgpLT5hZG9wdElmTmVl
ZGVkKGNoaWxkKTsKIAotICAgICAgICAvLyBBcHBlbmQgY2hpbGQgdG8gdGhlIGVuZCBvZiB0aGUg
bGlzdAotICAgICAgICBmb3JiaWRFdmVudERpc3BhdGNoKCk7CiAgICAgICAgIGFwcGVuZENoaWxk
VG9Db250YWluZXIoY2hpbGQsIHRoaXMpOwotICAgICAgICBhbGxvd0V2ZW50RGlzcGF0Y2goKTsK
LQotICAgICAgICB1cGRhdGVUcmVlQWZ0ZXJJbnNlcnRpb24odGhpcywgY2hpbGQsIHNob3VsZExh
enlBdHRhY2gpOwogICAgIH0KKyAgICBhbGxvd0V2ZW50RGlzcGF0Y2goKTsKIAotICAgIGRpc3Bh
dGNoU3VidHJlZU1vZGlmaWVkRXZlbnQoKTsKKyAgICBub3RpZnlDaGlsZHJlbkluc2VydGVkKHBy
b3RlY3QucmVsZWFzZSgpLCB0YXJnZXRzLCBzaG91bGRMYXp5QXR0YWNoKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApAQCAtMTAzNywxMyArMTAzNyw2IEBAIHN0YXRpYyB2b2lkIGRpc3BhdGNoQ2hp
bGRJbnNlcnRpb25FdmVudHMoTm9kZSogY2hpbGQpCiAgICAgUmVmUHRyPE5vZGU+IGMgPSBjaGls
ZDsKICAgICBSZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50ID0gY2hpbGQtPmRvY3VtZW50KCk7CiAK
LSNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQotICAgIGlmIChjLT5wYXJlbnROb2RlKCkp
IHsKLSAgICAgICAgQ2hpbGRMaXN0TXV0YXRpb25TY29wZSBtdXRhdGlvbihjLT5wYXJlbnROb2Rl
KCkpOwotICAgICAgICBtdXRhdGlvbi5jaGlsZEFkZGVkKGMuZ2V0KCkpOwotICAgIH0KLSNlbmRp
ZgotCiAgICAgaWYgKGMtPnBhcmVudE5vZGUoKSAmJiBkb2N1bWVudC0+aGFzTGlzdGVuZXJUeXBl
KERvY3VtZW50OjpET01OT0RFSU5TRVJURURfTElTVEVORVIpKQogICAgICAgICBjLT5kaXNwYXRj
aFNjb3BlZEV2ZW50KE11dGF0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuRE9NTm9kZUlu
c2VydGVkRXZlbnQsIHRydWUsIGMtPnBhcmVudE5vZGUoKSkpOwogCkBAIC0xMDg3LDI1ICsxMDgw
LDM2IEBAIHN0YXRpYyB2b2lkIGRpc3BhdGNoQ2hpbGRSZW1vdmFsRXZlbnRzKE5vZGUqIGNoaWxk
KQogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgdXBkYXRlVHJlZUFmdGVySW5zZXJ0aW9uKENvbnRh
aW5lck5vZGUqIHBhcmVudCwgTm9kZSogY2hpbGQsIGJvb2wgc2hvdWxkTGF6eUF0dGFjaCkKK3N0
YXRpYyB2b2lkIG5vdGlmeUNoaWxkcmVuSW5zZXJ0ZWQoUGFzc1JlZlB0cjxDb250YWluZXJOb2Rl
PiBwYXJlbnQsIGNvbnN0IE5vZGVWZWN0b3ImIGNoaWxkcmVuLCBib29sIHNob3VsZExhenlBdHRh
Y2gpCiB7Ci0gICAgQVNTRVJUKHBhcmVudC0+cmVmQ291bnQoKSk7Ci0gICAgQVNTRVJUKGNoaWxk
LT5yZWZDb3VudCgpKTsKKyAgICBpZiAoY2hpbGRyZW4uaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm47CisKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgIENoaWxkTGlzdE11dGF0
aW9uU2NvcGUocGFyZW50LmdldCgpKS5jaGlsZHJlbkFkZGVkKGNoaWxkcmVuKTsKKyNlbmRpZgog
Ci0gICAgcGFyZW50LT5jaGlsZHJlbkNoYW5nZWQoZmFsc2UsIGNoaWxkLT5wcmV2aW91c1NpYmxp
bmcoKSwgY2hpbGQtPm5leHRTaWJsaW5nKCksIDEpOworICAgIHBhcmVudC0+Y2hpbGRyZW5DaGFu
Z2VkKGZhbHNlLCBjaGlsZHJlbi5maXJzdCgpLT5wcmV2aW91c1NpYmxpbmcoKSwgY2hpbGRyZW4u
bGFzdCgpLT5uZXh0U2libGluZygpLCBjaGlsZHJlbi5zaXplKCkpOworCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjaGlsZHJlbi5zaXplKCk7ICsraSkgeworICAgICAgICBOb2RlKiBjaGls
ZCA9IGNoaWxkcmVuW2ldLmdldCgpOworICAgICAgICBub3RpZnlDaGlsZEluc2VydGVkKGNoaWxk
KTsKIAotICAgIG5vdGlmeUNoaWxkSW5zZXJ0ZWQoY2hpbGQpOworICAgICAgICAvLyBGSVhNRTog
QXR0YWNobWVudCBzaG91bGQgYmUgdGhlIGZpcnN0IG9wZXJhdGlvbiBpbiB0aGlzIGZ1bmN0aW9u
LCBidXQgc29tZSBjb2RlCisgICAgICAgIC8vIChmb3IgZXhhbXBsZSwgSFRNTEZvcm1Db250cm9s
RWxlbWVudCdzIGF1dG9mb2N1cyBzdXBwb3J0KSByZXF1aXJlcyB0aGlzIG9yZGVyaW5nLgorICAg
ICAgICBpZiAocGFyZW50LT5hdHRhY2hlZCgpICYmICFjaGlsZC0+YXR0YWNoZWQoKSAmJiBjaGls
ZC0+cGFyZW50Tm9kZSgpID09IHBhcmVudCkgeworICAgICAgICAgICAgaWYgKHNob3VsZExhenlB
dHRhY2gpCisgICAgICAgICAgICAgICAgY2hpbGQtPmxhenlBdHRhY2goKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBjaGlsZC0+YXR0YWNoKCk7CisgICAgICAgIH0KIAotICAg
IC8vIEZJWE1FOiBBdHRhY2htZW50IHNob3VsZCBiZSB0aGUgZmlyc3Qgb3BlcmF0aW9uIGluIHRo
aXMgZnVuY3Rpb24sIGJ1dCBzb21lIGNvZGUKLSAgICAvLyAoZm9yIGV4YW1wbGUsIEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQncyBhdXRvZm9jdXMgc3VwcG9ydCkgcmVxdWlyZXMgdGhpcyBvcmRlcmlu
Zy4KLSAgICBpZiAocGFyZW50LT5hdHRhY2hlZCgpICYmICFjaGlsZC0+YXR0YWNoZWQoKSAmJiBj
aGlsZC0+cGFyZW50Tm9kZSgpID09IHBhcmVudCkgewotICAgICAgICBpZiAoc2hvdWxkTGF6eUF0
dGFjaCkKLSAgICAgICAgICAgIGNoaWxkLT5sYXp5QXR0YWNoKCk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGNoaWxkLT5hdHRhY2goKTsKKyAgICAgICAgLy8gTm93IHRoYXQgdGhlIGNoaWxk
IGlzIGF0dGFjaGVkIHRvIHRoZSByZW5kZXIgdHJlZSwgZGlzcGF0Y2gKKyAgICAgICAgLy8gdGhl
IHJlbGV2YW50IG11dGF0aW9uIGV2ZW50cy4KKyAgICAgICAgZGlzcGF0Y2hDaGlsZEluc2VydGlv
bkV2ZW50cyhjaGlsZCk7CiAgICAgfQogCi0gICAgZGlzcGF0Y2hDaGlsZEluc2VydGlvbkV2ZW50
cyhjaGlsZCk7CisgICAgcGFyZW50LT5kaXNwYXRjaFN1YnRyZWVNb2RpZmllZEV2ZW50KCk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBmMDRmOGI1ZDQ0MDcxMWQ1NDYzY2E1
YWNkMWRkYzI2MzY2YzJmNmY0Li45NDYzYmU2MGUyZGFiNDM5MmNiMzM5M2FhNDk4ZGViNDBhZTFl
YTgzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTItMDQtMDIgIEFkYW0gS2xlaW4gIDxhZGFt
a0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgRGVsYXkgcG9zdC1pbnNlcnRpb24gbm90aWZpY2F0
aW9ucyB1bnRpbCBuZXcgRE9NIHRyZWUgaXMgY29tcGxldGUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNjMxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L2V2ZW50cy9kb21ub2RlaW5zZXJ0ZWQt
ZW50aXJlLWZyYWdtZW50LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVu
dHMvZG9tbm9kZWluc2VydGVkLWVudGlyZS1mcmFnbWVudC5odG1sOiBBZGRlZC4KKwogMjAxMi0w
NC0wMyAgQW1pIEZpc2NobWFuICA8ZmlzY2htYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIExh
eW91dCBUZXN0IG1lZGlhL3ZpZGVvLXNyYy1zb3VyY2UuaHRtbCBpcyBmbGFreQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvZG9tbm9kZWluc2VydGVkLWVudGlyZS1mcmFnbWVu
dC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9kb21ub2RlaW5zZXJ0ZWQt
ZW50aXJlLWZyYWdtZW50LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMDJjMGIyMjM0YTJiMzQy
NzhhMDI3NjAzMzc1ZWI4YzkyYTBhYzdiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9ldmVudHMvZG9tbm9kZWluc2VydGVkLWVudGlyZS1mcmFnbWVudC1leHBlY3RlZC50eHQK
QEAgLTAsMCArMSwxMiBAQAorRE9NTm9kZUluc2VydGVkIGV2ZW50cyBzaG91bGQgYmUgZmlyZWQg
YWZ0ZXIgYWxsIG5vZGVzIGluIGEgRG9jdW1lbnRGcmFnbWVudCBhcmUgaW5zZXJ0ZWQuCisKK09u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGNvbnRhaW5lci5jaGlsZE5vZGVzLmxl
bmd0aCBpcyAzCitQQVNTIGNvbnRhaW5lci5jaGlsZE5vZGVzLmxlbmd0aCBpcyAzCitQQVNTIGNv
bnRhaW5lci5jaGlsZE5vZGVzLmxlbmd0aCBpcyAzCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9l
dmVudHMvZG9tbm9kZWluc2VydGVkLWVudGlyZS1mcmFnbWVudC5odG1sIGIvTGF5b3V0VGVzdHMv
ZmFzdC9ldmVudHMvZG9tbm9kZWluc2VydGVkLWVudGlyZS1mcmFnbWVudC5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmI2MWQwYTVjMjlkY2IyMTdmODNmNDc5NzQxMjE2NTRhODZhMWQwYjAKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9kb21ub2RlaW5zZXJ0ZWQtZW50aXJlLWZy
YWdtZW50Lmh0bWwKQEAgLTAsMCArMSwxNiBAQAorPGRpdiBpZD1jb250YWluZXI+PC9kaXY+Cis8
c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQ+CitkZXNjcmlwdGlvbignRE9NTm9kZUluc2VydGVkIGV2ZW50cyBzaG91bGQgYmUgZmly
ZWQgYWZ0ZXIgYWxsIG5vZGVzIGluIGEgRG9jdW1lbnRGcmFnbWVudCBhcmUgaW5zZXJ0ZWQuJyk7
CisKK3ZhciBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKK2Zy
YWdtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKSk7CitmcmFnbWVu
dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdiJykpOworZnJhZ21lbnQuYXBw
ZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaScpKTsKK3ZhciBjb250YWluZXIgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGFpbmVyJyk7Citjb250YWluZXIuYWRkRXZlbnRM
aXN0ZW5lcignRE9NTm9kZUluc2VydGVkJywgZnVuY3Rpb24oZXZ0KSB7CisgICAgc2hvdWxkQmUo
J2NvbnRhaW5lci5jaGlsZE5vZGVzLmxlbmd0aCcsICczJyk7Cit9KTsKK2NvbnRhaW5lci5hcHBl
bmRDaGlsZChmcmFnbWVudCk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135658</attachid>
            <date>2012-04-04 13:16:43 -0700</date>
            <delta_ts>2012-04-04 17:05:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82631-20120404131642.patch</filename>
            <type>text/plain</type>
            <size>19429</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEzMjMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzI3MjhlYzBjM2E1NWRk
ZDk1MWI4YTVlMDA2M2Q2NWI5OTY1NGYyNy4uNTU4OGMzMGQ0Y2JkYjEwMWRhMWRhNDE0OGQ5ZTI0
ZWM5YWI3NmI5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDYxIEBACiAyMDEyLTA0LTA0ICBBZGFt
IEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgogCisgICAgICAgIERlbGF5IHBvc3QtaW5zZXJ0
aW9uIG5vdGlmaWNhdGlvbnMgdW50aWwgbmV3IERPTSB0cmVlIGlzIGNvbXBsZXRlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MjYzMQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdoZW4gaW5zZXJ0aW5nIGEg
RG9jdW1lbnRGcmFnbWVudCwgV2ViS2l0IHByZXZpb3VzbHkgd291bGQgdXBkYXRlIGJvdGgKKyAg
ICAgICAgaW50ZXJuYWwgV2ViQ29yZSBzdGF0ZSBhbmQgbXV0YXRpb24gZXZlbnQgbGlzdGVuZXJz
IGFmdGVyIGVhY2ggbm9kZQorICAgICAgICB3YXMgaW5zZXJ0ZWQuIFRoaXMgaXMgaW5jb25zaXN0
ZW50IG5vdCBvbmx5IHdpdGggRE9NNCwgYnV0IGFsc28KKyAgICAgICAgd2l0aCAoYXQgbGVhc3Qp
IEZpcmVmb3ggYW5kIElFLiBHaXZlbiB0aGUgbWFueSBidWdzIG92ZXIgdGhlIHllYXJzIGluCisg
ICAgICAgIFdlYktpdCBkdWUgdG8gdGhpcyBiZWhhdmlvciwgaXQgc2VlbXMgYmV0dGVyIHRvIGRl
bGF5IG5vdGlmaWNhdGlvbgorICAgICAgICB1bnRpbCB0aGUgZnJhZ21lbnQgaXMgY29tcGxldGVs
eSBpbnNlcnRlZC4KKworICAgICAgICBUaGUgY2hhbmdlcyB0byB0aGUgdGhyZWUgY29yZSBtdXRh
dGlvbiBtZXRob2RzIGJlbG93IGFyZSBzaW1pbGFyOgorICAgICAgICB0aGUgb25seSBsb2dpYyBy
ZW1haW5pbmcgaW4gdGhlIGxvb3AgaXMgY2hlY2tpbmcgdGhhdCBpbnNlcnRpb24gaXMKKyAgICAg
ICAgcG9zc2libGUgYW5kIHRha2luZyBjYXJlIG9mIHRoYXQgaW5zZXJ0aW9uLiBUaGUgZW50aXJl
IGxvb3AgaXMgdGhlbgorICAgICAgICB3cmFwcGVkIGluIGZvcmJpZEV2ZW50RGlzcGF0Y2gvYWxs
b3dFdmVudERpc3BhdGNoLCBlZmZlY3RpdmVseQorICAgICAgICBhc3NlcnRpbmcgdGhhdCBub25l
IG9mIHRoZSBjb2RlIGluc2lkZSB3aWxsIGhhdmUgc2lkZSBlZmZlY3RzLgorCisgICAgICAgIFRo
ZSBvbmUgYml0IG9mIGxvZ2ljIGFkZGVkIHRvIHRoZSBsb29wIGlzIHJlc2l6aW5nIHRoZSB0YXJn
ZXRzCisgICAgICAgIHZlY3RvciBkb3duIHRvIHRoZSBzZXQgb2Ygbm9kZXMgYWN0dWFsbHkgaW5z
ZXJ0ZWQgYXMgcGFydCBvZiB0aGUKKyAgICAgICAgbG9vcC4gVGhpcyBtYWtlcyBpdCBwb3NzaWJs
ZSB0byBzaW1wbHkgcGFzcyB0aGUgdmVjdG9yIG9uIHRvCisgICAgICAgIG5vdGlmeUNoaWxkcmVu
SW5zZXJ0ZWQgd2l0aG91dCBoYXZpbmcgdG8gYWxzbyBwYXNzIGFsb25nIGEgY291bnQgb2YKKyAg
ICAgICAgYWN0dWFsbHktaW5zZXJ0ZWQgbm9kZXMuCisKKyAgICAgICAgQXMgZm9yIHRoZSBjb2Rl
IHRoYXQgdXNlZCB0byBsaXZlIGluc2lkZSB0aGUgbG9vcCB0aGF0IGNvdWxkIGhhdmUKKyAgICAg
ICAgc2lkZS1lZmZlY3RzLCBvciBkZXBlbmRlZCBvbiB0aG9zZSBzaWRlLWVmZmVjdHMsIGl0IGhh
cyBiZWVuIG1vdmVkCisgICAgICAgIG91dCwgZWl0aGVyIGFib3ZlICh0aGUgY2hlY2sgdGhhdCB0
aGUgcmVmQ2hpbGQgaXMgc3RpbGwgdmFsaWQgaW4KKyAgICAgICAgaW5zZXJ0QmVmb3JlKSBvciBh
ZnRlciAodGhlIGNhbGxzIHRvIG5vdGlmeUNoaWxkcmVuSW5zZXJ0ZWQpLgorCisgICAgICAgIEZp
bmFsbHksIGl0IHdhcyBuZWNlc3NhcnkgdG8gcmV0cm9maXQgQ2hpbGRMaXN0TXV0YXRpb25TY29w
ZSB0byB0YWtlIGEKKyAgICAgICAgdmVjdG9yIG9mIGFkZGVkIG5vZGVzIGluc3RlYWQgb2YgYSBz
aW5nbGUgbm9kZSBhdCBhIHRpbWUsIGR1ZSB0byB0aGUKKyAgICAgICAgYXNzZXJ0aW9ucyBpbiBp
c0FkZGVkTm9kZUluT3JkZXIgKG5vdyByZW5hbWVkIHRvIGJlIHBsdXJhbCkuIE5vdGUgdGhhdAor
ICAgICAgICB0aGVyZSBpcyBub3cgYSBzaW5nbGUgY2FsbCB0byBDaGlsZExpc3RNdXRhdGlvblNj
b3BlOjpjaGlsZHJlbkFkZGVkLAorICAgICAgICBpbnNpZGUgbm90aWZ5Q2hpbGRyZW5JbnNlcnRl
ZC4KKworICAgICAgICBUZXN0OiBmYXN0L2V2ZW50cy9kb21ub2RlaW5zZXJ0ZWQtZW50aXJlLWZy
YWdtZW50Lmh0bWwKKworICAgICAgICAqIGRvbS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcDoK
KyAgICAgICAgKENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0b3IpOiBS
ZW5hbWVkIG1ldGhvZCB0byBiZSBwbHVyYWwuCisgICAgICAgIChXZWJDb3JlOjpDaGlsZExpc3RN
dXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdG9yOjphcmVBZGRlZE5vZGVzSW5PcmRlcik6
IEhhbmRsZSBhIE5vZGVWZWN0b3IgaW5zdGVhZCBvZiBhIE5vZGUuCisgICAgICAgIChXZWJDb3Jl
OjpDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdG9yOjpjaGlsZHJlbkFk
ZGVkKTogSGFuZGxlIGFkZGluZyBhIE5vZGVWZWN0b3IgaW5zdGVhZCBvZiBhIE5vZGUuCisgICAg
ICAgIChXZWJDb3JlOjpDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdGlv
blJvdXRlcjo6Y2hpbGRyZW5BZGRlZCk6IFJlbmFtZWQgdG8gYmUgcGx1cmFsLCBwYXNzIE5vZGVW
ZWN0b3IgdGhyb3VnaC4KKyAgICAgICAgKiBkb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6Y2hpbGRyZW5BZGRlZCk6
IGRpdHRvLgorICAgICAgICAoTXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXIpOgorICAgICAgICAq
IGRvbS9Db250YWluZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOiBSZW5hbWVkIHVwZGF0
ZVRyZWVBZnRlckluc2VydGlvbiB0byBub3RpZnlDaGlsZHJlbkluc2VydGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6aW5zZXJ0QmVmb3JlKTogU2VlIG1haW4gQ2hhbmdlTG9n
IGV4cGxhbmF0aW9uLgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6cmVwbGFjZUNo
aWxkKTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjphcHBlbmRDaGls
ZCk6IGRpdHRvLgorICAgICAgICAoV2ViQ29yZTo6ZGlzcGF0Y2hDaGlsZEluc2VydGlvbkV2ZW50
cyk6IFJlbW92ZSBNdXRhdGlvbk9ic2VydmVyIGhhbmRsaW5nLgorICAgICAgICAoV2ViQ29yZTo6
bm90aWZ5Q2hpbGRyZW5JbnNlcnRlZCk6IEhhbmRsZSBhIE5vZGVWZWN0b3Igb2YgYWxsIGluc2Vy
dGVkIGNoaWxkcmVuLAorICAgICAgICBhbmQgdGFrZSBvbiByZXNwb25zaWJsaXR5IGZvciBNdXRh
dGlvbk9ic2VydmVyIGhhbmRsaW5nIGFzIHdlbGwgYXMgZGlzcGF0Y2hTdWJ0cmVlTW9kaWZpZWRF
dmVudC4KKworMjAxMi0wNC0wNCAgQWRhbSBLbGVpbiAgPGFkYW1rQGNocm9taXVtLm9yZz4KKwog
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBicmVhayBvbiBET00gbm9kZSBpbnNlcnRpb24gb25seSBv
bmNlIHBlciBvcGVyYXRpb24sIG5vdCBvbmNlIHBlciBpbnNlcnRlZCBub2RlCiAgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjk2NwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHAKaW5kZXggYzVjYjNhZDlmNmVh
Yjc4ZDg5ZTVkNjdlYTljNDM1MjMyMjk3ZTA3ZS4uNGQyNGUxMmMxOWYxNzQ2YzlmYTI1MzhlZjk0
MGI3NjU0ZWRmZTgwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTGlzdE11
dGF0aW9uU2NvcGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZExpc3RNdXRhdGlv
blNjb3BlLmNwcApAQCAtNTUsMTQgKzU1LDE0IEBAIHB1YmxpYzoKICAgICBNdXRhdGlvbkFjY3Vt
dWxhdG9yKFBhc3NSZWZQdHI8Tm9kZT4sIFBhc3NPd25QdHI8TXV0YXRpb25PYnNlcnZlckludGVy
ZXN0R3JvdXA+IG9ic2VydmVycyk7CiAgICAgfk11dGF0aW9uQWNjdW11bGF0b3IoKTsKIAotICAg
IHZvaWQgY2hpbGRBZGRlZChQYXNzUmVmUHRyPE5vZGU+KTsKKyAgICB2b2lkIGNoaWxkcmVuQWRk
ZWQoY29uc3QgTm9kZVZlY3RvciYpOwogICAgIHZvaWQgd2lsbFJlbW92ZUNoaWxkKFBhc3NSZWZQ
dHI8Tm9kZT4pOwogICAgIHZvaWQgZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCk7CiAKIHByaXZhdGU6
CiAgICAgdm9pZCBjbGVhcigpOwogICAgIGJvb2wgaXNFbXB0eSgpOwotICAgIGJvb2wgaXNBZGRl
ZE5vZGVJbk9yZGVyKE5vZGUqKTsKKyAgICBib29sIGFyZUFkZGVkTm9kZXNJbk9yZGVyKGNvbnN0
IE5vZGVWZWN0b3ImKTsKICAgICBib29sIGlzUmVtb3ZlZE5vZGVJbk9yZGVyKE5vZGUqKTsKICAg
ICBSZWZQdHI8Tm9kZT4gbV90YXJnZXQ7CiAKQEAgLTg3LDI2ICs4NywyNyBAQCBDaGlsZExpc3RN
dXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdG9yOjp+TXV0YXRpb25BY2N1bXVsYXRvcigp
CiAgICAgQVNTRVJUKGlzRW1wdHkoKSk7CiB9CiAKLWlubGluZSBib29sIENoaWxkTGlzdE11dGF0
aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0b3I6OmlzQWRkZWROb2RlSW5PcmRlcihOb2RlKiBj
aGlsZCkKK2lubGluZSBib29sIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11
bGF0b3I6OmFyZUFkZGVkTm9kZXNJbk9yZGVyKGNvbnN0IE5vZGVWZWN0b3ImIGNoaWxkcmVuKQog
ewotICAgIHJldHVybiBpc0VtcHR5KCkgfHwgKG1fbGFzdEFkZGVkID09IGNoaWxkLT5wcmV2aW91
c1NpYmxpbmcoKSAmJiBtX25leHRTaWJsaW5nID09IGNoaWxkLT5uZXh0U2libGluZygpKTsKKyAg
ICByZXR1cm4gaXNFbXB0eSgpIHx8IChtX2xhc3RBZGRlZCA9PSBjaGlsZHJlbi5maXJzdCgpLT5w
cmV2aW91c1NpYmxpbmcoKSAmJiBtX25leHRTaWJsaW5nID09IGNoaWxkcmVuLmxhc3QoKS0+bmV4
dFNpYmxpbmcoKSk7CiB9CiAKLXZvaWQgQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25B
Y2N1bXVsYXRvcjo6Y2hpbGRBZGRlZChQYXNzUmVmUHRyPE5vZGU+IHBycENoaWxkKQordm9pZCBD
aGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhdGlvbkFjY3VtdWxhdG9yOjpjaGlsZHJlbkFkZGVk
KGNvbnN0IE5vZGVWZWN0b3ImIGNoaWxkcmVuKQogewotICAgIFJlZlB0cjxOb2RlPiBjaGlsZCA9
IHBycENoaWxkOworICAgIEFTU0VSVCghY2hpbGRyZW4uaXNFbXB0eSgpKTsKIAotICAgIEFTU0VS
VChpc0FkZGVkTm9kZUluT3JkZXIoY2hpbGQuZ2V0KCkpKTsKLSAgICBpZiAoIWlzQWRkZWROb2Rl
SW5PcmRlcihjaGlsZC5nZXQoKSkpCisgICAgaWYgKCFhcmVBZGRlZE5vZGVzSW5PcmRlcihjaGls
ZHJlbikpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGVucXVldWVN
dXRhdGlvblJlY29yZCgpOworICAgIH0KIAogICAgIGlmIChpc0VtcHR5KCkpIHsKLSAgICAgICAg
bV9wcmV2aW91c1NpYmxpbmcgPSBjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgICAgIG1f
bmV4dFNpYmxpbmcgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgbV9wcmV2aW91c1Np
YmxpbmcgPSBjaGlsZHJlbi5maXJzdCgpLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICAgICAgbV9u
ZXh0U2libGluZyA9IGNoaWxkcmVuLmxhc3QoKS0+bmV4dFNpYmxpbmcoKTsKICAgICB9CiAKLSAg
ICBtX2FkZGVkTm9kZXMuYXBwZW5kKGNoaWxkKTsKLSAgICBtX2xhc3RBZGRlZCA9IGNoaWxkOwor
ICAgIG1fYWRkZWROb2Rlcy5hcHBlbmQoY2hpbGRyZW4pOworICAgIG1fbGFzdEFkZGVkID0gY2hp
bGRyZW4ubGFzdCgpOwogfQogCiBpbmxpbmUgYm9vbCBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpN
dXRhdGlvbkFjY3VtdWxhdG9yOjppc1JlbW92ZWROb2RlSW5PcmRlcihOb2RlKiBjaGlsZCkKQEAg
LTE4OSwxNCArMTkwLDE0IEBAIENoaWxkTGlzdE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11
bGF0aW9uUm91dGVyKiBDaGlsZExpc3RNdXRhdGlvblNjb3BlOjpNdXRhCiAgICAgcmV0dXJuIHNf
aW5zdGFuY2U7CiB9CiAKLXZvaWQgQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1
bXVsYXRpb25Sb3V0ZXI6OmNoaWxkQWRkZWQoTm9kZSogdGFyZ2V0LCBOb2RlKiBjaGlsZCkKK3Zv
aWQgQ2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6OmNo
aWxkcmVuQWRkZWQoTm9kZSogdGFyZ2V0LCBjb25zdCBOb2RlVmVjdG9yJiBjaGlsZHJlbikKIHsK
ICAgICBIYXNoTWFwPE5vZGUqLCBPd25QdHI8Q2hpbGRMaXN0TXV0YXRpb25TY29wZTo6TXV0YXRp
b25BY2N1bXVsYXRvcj4gPjo6aXRlcmF0b3IgaXRlciA9IG1fYWNjdW11bGF0aW9ucy5maW5kKHRh
cmdldCk7CiAgICAgQVNTRVJUKGl0ZXIgIT0gbV9hY2N1bXVsYXRpb25zLmVuZCgpKTsKICAgICBp
ZiAoaXRlciA9PSBtX2FjY3VtdWxhdGlvbnMuZW5kKCkgfHwgIWl0ZXItPnNlY29uZCkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgaXRlci0+c2Vjb25kLT5jaGlsZEFkZGVkKGNoaWxkKTsKKyAgICBp
dGVyLT5zZWNvbmQtPmNoaWxkcmVuQWRkZWQoY2hpbGRyZW4pOwogfQogCiB2b2lkIENoaWxkTGlz
dE11dGF0aW9uU2NvcGU6Ok11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyOjp3aWxsUmVtb3ZlQ2hp
bGQoTm9kZSogdGFyZ2V0LCBOb2RlKiBjaGlsZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRM
aXN0TXV0YXRpb25TY29wZS5oCmluZGV4IDZkZDUyMzY0MGI2MWYwNmYzYTUzYmE1NzViNWNhZWQ5
MjM3YzQwNWYuLmE3ODljNjVjNzY4MjAwODk0NWNlZThmZjg0ZWE4OTVmNzkzYjk0NTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZExpc3RNdXRhdGlvblNjb3BlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTGlzdE11dGF0aW9uU2NvcGUuaApAQCAtMzMsNiArMzMs
NyBAQAogCiAjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKIAorI2luY2x1ZGUgIkNvbnRh
aW5lck5vZGUuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIk5vZGUuaCIKICNp
bmNsdWRlICJXZWJLaXRNdXRhdGlvbk9ic2VydmVyLmgiCkBAIC01OCwxMCArNTksMTAgQEAgcHVi
bGljOgogICAgICAgICAgICAgTXV0YXRpb25BY2N1bXVsYXRpb25Sb3V0ZXI6Omluc3RhbmNlKCkt
PmRlY3JlbWVudFNjb3BpbmdMZXZlbChtX3RhcmdldCk7CiAgICAgfQogCi0gICAgdm9pZCBjaGls
ZEFkZGVkKE5vZGUqIGNoaWxkKQorICAgIHZvaWQgY2hpbGRyZW5BZGRlZChjb25zdCBOb2RlVmVj
dG9yJiBjaGlsZHJlbikKICAgICB7CiAgICAgICAgIGlmIChtX3RhcmdldCkKLSAgICAgICAgICAg
IE11dGF0aW9uQWNjdW11bGF0aW9uUm91dGVyOjppbnN0YW5jZSgpLT5jaGlsZEFkZGVkKG1fdGFy
Z2V0LCBjaGlsZCk7CisgICAgICAgICAgICBNdXRhdGlvbkFjY3VtdWxhdGlvblJvdXRlcjo6aW5z
dGFuY2UoKS0+Y2hpbGRyZW5BZGRlZChtX3RhcmdldCwgY2hpbGRyZW4pOwogICAgIH0KIAogICAg
IHZvaWQgd2lsbFJlbW92ZUNoaWxkKE5vZGUqIGNoaWxkKQpAQCAtODMsNyArODQsNyBAQCBwcml2
YXRlOgogICAgICAgICB2b2lkIGluY3JlbWVudFNjb3BpbmdMZXZlbChOb2RlKik7CiAgICAgICAg
IHZvaWQgZGVjcmVtZW50U2NvcGluZ0xldmVsKE5vZGUqKTsKIAotICAgICAgICB2b2lkIGNoaWxk
QWRkZWQoTm9kZSogdGFyZ2V0LCBOb2RlKiBjaGlsZCk7CisgICAgICAgIHZvaWQgY2hpbGRyZW5B
ZGRlZChOb2RlKiB0YXJnZXQsIGNvbnN0IE5vZGVWZWN0b3ImIGNoaWxkcmVuKTsKICAgICAgICAg
dm9pZCB3aWxsUmVtb3ZlQ2hpbGQoTm9kZSogdGFyZ2V0LCBOb2RlKiBjaGlsZCk7CiAKICAgICBw
cml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCmluZGV4IDAzYmJkYzEyZDg2
OThiYWI4M2ViZmY5YzA5ZjdkZjEwZTk0Y2QzODkuLmQ3ZDIzMzdiODk3ZWI3ZGVmZTczMDkwMGI0
Y2IwYTczYjZjNjYwMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJO
b2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKQEAgLTUw
LDcgKzUwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogc3RhdGljIHZvaWQgbm90aWZ5Q2hpbGRJ
bnNlcnRlZChOb2RlKik7CiBzdGF0aWMgdm9pZCBkaXNwYXRjaENoaWxkSW5zZXJ0aW9uRXZlbnRz
KE5vZGUqKTsKIHN0YXRpYyB2b2lkIGRpc3BhdGNoQ2hpbGRSZW1vdmFsRXZlbnRzKE5vZGUqKTsK
LXN0YXRpYyB2b2lkIHVwZGF0ZVRyZWVBZnRlckluc2VydGlvbihDb250YWluZXJOb2RlKiwgTm9k
ZSosIGJvb2wgc2hvdWxkTGF6eUF0dGFjaCk7CitzdGF0aWMgdm9pZCBub3RpZnlDaGlsZHJlbklu
c2VydGVkKFBhc3NSZWZQdHI8Q29udGFpbmVyTm9kZT4sIGNvbnN0IE5vZGVWZWN0b3ImLCBib29s
IHNob3VsZExhenlBdHRhY2gpOwogCiB0eXBlZGVmIHBhaXI8UmVmUHRyPE5vZGU+LCB1bnNpZ25l
ZD4gQ2FsbGJhY2tQYXJhbWV0ZXJzOwogdHlwZWRlZiBwYWlyPE5vZGVDYWxsYmFjaywgQ2FsbGJh
Y2tQYXJhbWV0ZXJzPiBDYWxsYmFja0luZm87CkBAIC0xMjEsNyArMTIxLDcgQEAgYm9vbCBDb250
YWluZXJOb2RlOjppbnNlcnRCZWZvcmUoUGFzc1JlZlB0cjxOb2RlPiBuZXdDaGlsZCwgTm9kZSog
cmVmQ2hpbGQsIEV4Y2UKICAgICAvLyBJZiBpdCBpcywgaXQgY2FuIGJlIGRlbGV0ZWQgYXMgYSBz
aWRlIGVmZmVjdCBvZiBzZW5kaW5nIG11dGF0aW9uIGV2ZW50cy4KICAgICBBU1NFUlQocmVmQ291
bnQoKSB8fCBwYXJlbnRPckhvc3ROb2RlKCkpOwogCi0gICAgUmVmUHRyPE5vZGU+IHByb3RlY3Qo
dGhpcyk7CisgICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IHByb3RlY3QodGhpcyk7CiAKICAgICBl
YyA9IDA7CiAKQEAgLTE1MiwzNCArMTUyLDMzIEBAIGJvb2wgQ29udGFpbmVyTm9kZTo6aW5zZXJ0
QmVmb3JlKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Q2hpbGQsIE5vZGUqIHJlZkNoaWxkLCBFeGNlCiAg
ICAgaWYgKHRhcmdldHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAorICAgIC8v
IER1ZSB0byBhcmJpdHJhcnkgY29kZSBydW5uaW5nIGluIHJlc3BvbnNlIHRvIGEgRE9NIG11dGF0
aW9uIGV2ZW50IGl0J3MKKyAgICAvLyBwb3NzaWJsZSB0aGF0ICJuZXh0IiBpcyBubyBsb25nZXIg
YSBjaGlsZCBvZiAidGhpcyIuCisgICAgaWYgKG5leHQtPnBhcmVudE5vZGUoKSAhPSB0aGlzKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKwogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsSW5zZXJ0RE9NTm9kZShkb2N1bWVudCgpLCB0aGlzKTsK
ICNlbmRpZgogCi0jaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKLSAgICBDaGlsZExpc3RN
dXRhdGlvblNjb3BlIG11dGF0aW9uKHRoaXMpOwotI2VuZGlmCi0KLSAgICBmb3IgKE5vZGVWZWN0
b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGFyZ2V0cy5iZWdpbigpOyBpdCAhPSB0YXJnZXRzLmVu
ZCgpOyArK2l0KSB7Ci0gICAgICAgIE5vZGUqIGNoaWxkID0gaXQtPmdldCgpOworICAgIGZvcmJp
ZEV2ZW50RGlzcGF0Y2goKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRhcmdldHMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgTm9kZSogY2hpbGQgPSB0YXJnZXRzW2ldLmdldCgpOwogCiAg
ICAgICAgIC8vIER1ZSB0byBhcmJpdHJhcnkgY29kZSBydW5uaW5nIGluIHJlc3BvbnNlIHRvIGEg
RE9NIG11dGF0aW9uIGV2ZW50IGl0J3MKLSAgICAgICAgLy8gcG9zc2libGUgdGhhdCAibmV4dCIg
aXMgbm8gbG9uZ2VyIGEgY2hpbGQgb2YgInRoaXMiLgotICAgICAgICAvLyBJdCdzIGFsc28gcG9z
c2libGUgdGhhdCAiY2hpbGQiIGhhcyBiZWVuIGluc2VydGVkIGVsc2V3aGVyZS4KLSAgICAgICAg
Ly8gSW4gZWl0aGVyIG9mIHRob3NlIGNhc2VzLCB3ZSdsbCBqdXN0IHN0b3AuCi0gICAgICAgIGlm
IChuZXh0LT5wYXJlbnROb2RlKCkgIT0gdGhpcykKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBpZiAoY2hpbGQtPnBhcmVudE5vZGUoKSkKKyAgICAgICAgLy8gcG9zc2libGUgdGhhdCAiY2hp
bGQiIGhhcyBiZWVuIGluc2VydGVkIGVsc2V3aGVyZS4KKyAgICAgICAgaWYgKGNoaWxkLT5wYXJl
bnROb2RlKCkpIHsKKyAgICAgICAgICAgIHRhcmdldHMucmVzaXplKGkpOwogICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KIAogICAgICAgICB0cmVlU2NvcGUoKS0+YWRvcHRJZk5lZWRlZChj
aGlsZCk7CiAKICAgICAgICAgaW5zZXJ0QmVmb3JlQ29tbW9uKG5leHQuZ2V0KCksIGNoaWxkKTsK
LQotICAgICAgICB1cGRhdGVUcmVlQWZ0ZXJJbnNlcnRpb24odGhpcywgY2hpbGQsIHNob3VsZExh
enlBdHRhY2gpOwogICAgIH0KKyAgICBhbGxvd0V2ZW50RGlzcGF0Y2goKTsKIAotICAgIGRpc3Bh
dGNoU3VidHJlZU1vZGlmaWVkRXZlbnQoKTsKKyAgICBub3RpZnlDaGlsZHJlbkluc2VydGVkKHBy
b3RlY3QucmVsZWFzZSgpLCB0YXJnZXRzLCBzaG91bGRMYXp5QXR0YWNoKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApAQCAtMjQwLDcgKzIzOSw3IEBAIGJvb2wgQ29udGFpbmVyTm9kZTo6cmVwbGFj
ZUNoaWxkKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Q2hpbGQsIE5vZGUqIG9sZENoaWxkLCBFeGNlCiAg
ICAgLy8gSWYgaXQgaXMsIGl0IGNhbiBiZSBkZWxldGVkIGFzIGEgc2lkZSBlZmZlY3Qgb2Ygc2Vu
ZGluZyBtdXRhdGlvbiBldmVudHMuCiAgICAgQVNTRVJUKHJlZkNvdW50KCkgfHwgcGFyZW50T3JI
b3N0Tm9kZSgpKTsKIAotICAgIFJlZlB0cjxOb2RlPiBwcm90ZWN0KHRoaXMpOworICAgIFJlZlB0
cjxDb250YWluZXJOb2RlPiBwcm90ZWN0KHRoaXMpOwogCiAgICAgZWMgPSAwOwogCkBAIC0yNzgs
MzcgKzI3NywzNiBAQCBib29sIENvbnRhaW5lck5vZGU6OnJlcGxhY2VDaGlsZChQYXNzUmVmUHRy
PE5vZGU+IG5ld0NoaWxkLCBOb2RlKiBvbGRDaGlsZCwgRXhjZQogICAgIGlmIChlYykKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCisgICAgLy8gRHVlIHRvIGFyYml0cmFyeSBjb2RlIHJ1bm5pbmcg
aW4gcmVzcG9uc2UgdG8gYSBET00gbXV0YXRpb24gZXZlbnQgaXQncworICAgIC8vIHBvc3NpYmxl
IHRoYXQgIm5leHQiIGlzIG5vIGxvbmdlciBhIGNoaWxkIG9mICJ0aGlzIi4KKyAgICBpZiAobmV4
dCAmJiBuZXh0LT5wYXJlbnROb2RlKCkgIT0gdGhpcykKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
ICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2ls
bEluc2VydERPTU5vZGUoZG9jdW1lbnQoKSwgdGhpcyk7CiAjZW5kaWYKIAotICAgIC8vIEFkZCB0
aGUgbmV3IGNoaWxkKHJlbikKLSAgICBmb3IgKE5vZGVWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gdGFyZ2V0cy5iZWdpbigpOyBpdCAhPSB0YXJnZXRzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAg
IE5vZGUqIGNoaWxkID0gaXQtPmdldCgpOworICAgIGZvcmJpZEV2ZW50RGlzcGF0Y2goKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRhcmdldHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
Tm9kZSogY2hpbGQgPSB0YXJnZXRzW2ldLmdldCgpOwogCiAgICAgICAgIC8vIER1ZSB0byBhcmJp
dHJhcnkgY29kZSBydW5uaW5nIGluIHJlc3BvbnNlIHRvIGEgRE9NIG11dGF0aW9uIGV2ZW50IGl0
J3MKLSAgICAgICAgLy8gcG9zc2libGUgdGhhdCAibmV4dCIgaXMgbm8gbG9uZ2VyIGEgY2hpbGQg
b2YgInRoaXMiLgotICAgICAgICAvLyBJdCdzIGFsc28gcG9zc2libGUgdGhhdCAiY2hpbGQiIGhh
cyBiZWVuIGluc2VydGVkIGVsc2V3aGVyZS4KLSAgICAgICAgLy8gSW4gZWl0aGVyIG9mIHRob3Nl
IGNhc2VzLCB3ZSdsbCBqdXN0IHN0b3AuCi0gICAgICAgIGlmIChuZXh0ICYmIG5leHQtPnBhcmVu
dE5vZGUoKSAhPSB0aGlzKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmIChjaGlsZC0+
cGFyZW50Tm9kZSgpKQorICAgICAgICAvLyBwb3NzaWJsZSB0aGF0ICJjaGlsZCIgaGFzIGJlZW4g
aW5zZXJ0ZWQgZWxzZXdoZXJlLgorICAgICAgICBpZiAoY2hpbGQtPnBhcmVudE5vZGUoKSkgewor
ICAgICAgICAgICAgdGFyZ2V0cy5yZXNpemUoaSk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQogCiAgICAgICAgIHRyZWVTY29wZSgpLT5hZG9wdElmTmVlZGVkKGNoaWxkKTsKIAotICAg
ICAgICAvLyBBZGQgY2hpbGQgYmVmb3JlICJuZXh0Ii4KLSAgICAgICAgZm9yYmlkRXZlbnREaXNw
YXRjaCgpOwogICAgICAgICBpZiAobmV4dCkKICAgICAgICAgICAgIGluc2VydEJlZm9yZUNvbW1v
bihuZXh0LmdldCgpLCBjaGlsZCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGFwcGVuZENo
aWxkVG9Db250YWluZXIoY2hpbGQsIHRoaXMpOwotICAgICAgICBhbGxvd0V2ZW50RGlzcGF0Y2go
KTsKLQotICAgICAgICB1cGRhdGVUcmVlQWZ0ZXJJbnNlcnRpb24odGhpcywgY2hpbGQsIHNob3Vs
ZExhenlBdHRhY2gpOwogICAgIH0KKyAgICBhbGxvd0V2ZW50RGlzcGF0Y2goKTsKIAotICAgIGRp
c3BhdGNoU3VidHJlZU1vZGlmaWVkRXZlbnQoKTsKKyAgICBub3RpZnlDaGlsZHJlbkluc2VydGVk
KHByb3RlY3QucmVsZWFzZSgpLCB0YXJnZXRzLCBzaG91bGRMYXp5QXR0YWNoKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApAQCAtNTYyLDMxICs1NjAsMjUgQEAgYm9vbCBDb250YWluZXJOb2RlOjph
cHBlbmRDaGlsZChQYXNzUmVmUHRyPE5vZGU+IG5ld0NoaWxkLCBFeGNlcHRpb25Db2RlJiBlYywg
Ym8KICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxJbnNlcnRET01Ob2RlKGRvY3Vt
ZW50KCksIHRoaXMpOwogI2VuZGlmCiAKLSNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQot
ICAgIENoaWxkTGlzdE11dGF0aW9uU2NvcGUgbXV0YXRpb24odGhpcyk7Ci0jZW5kaWYKLQotICAg
IC8vIE5vdyBhY3R1YWxseSBhZGQgdGhlIGNoaWxkKHJlbikKLSAgICBmb3IgKE5vZGVWZWN0b3I6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGFyZ2V0cy5iZWdpbigpOyBpdCAhPSB0YXJnZXRzLmVuZCgp
OyArK2l0KSB7Ci0gICAgICAgIE5vZGUqIGNoaWxkID0gaXQtPmdldCgpOworICAgIGZvcmJpZEV2
ZW50RGlzcGF0Y2goKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRhcmdldHMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgTm9kZSogY2hpbGQgPSB0YXJnZXRzW2ldLmdldCgpOwogCiAgICAg
ICAgIC8vIElmIHRoZSBjaGlsZCBoYXMgYSBwYXJlbnQgYWdhaW4sIGp1c3Qgc3RvcCB3aGF0IHdl
J3JlIGRvaW5nLCBiZWNhdXNlCiAgICAgICAgIC8vIHRoYXQgbWVhbnMgc29tZW9uZSBpcyBkb2lu
ZyBzb21ldGhpbmcgd2l0aCBET00gbXV0YXRpb24gLS0gY2FuJ3QgcmUtcGFyZW50CiAgICAgICAg
IC8vIGEgY2hpbGQgdGhhdCBhbHJlYWR5IGhhcyBhIHBhcmVudC4KLSAgICAgICAgaWYgKGNoaWxk
LT5wYXJlbnROb2RlKCkpCisgICAgICAgIGlmIChjaGlsZC0+cGFyZW50Tm9kZSgpKSB7CisgICAg
ICAgICAgICB0YXJnZXRzLnJlc2l6ZShpKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CiAKICAgICAgICAgdHJlZVNjb3BlKCktPmFkb3B0SWZOZWVkZWQoY2hpbGQpOwogCi0gICAgICAg
IC8vIEFwcGVuZCBjaGlsZCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0Ci0gICAgICAgIGZvcmJpZEV2
ZW50RGlzcGF0Y2goKTsKICAgICAgICAgYXBwZW5kQ2hpbGRUb0NvbnRhaW5lcihjaGlsZCwgdGhp
cyk7Ci0gICAgICAgIGFsbG93RXZlbnREaXNwYXRjaCgpOwotCi0gICAgICAgIHVwZGF0ZVRyZWVB
ZnRlckluc2VydGlvbih0aGlzLCBjaGlsZCwgc2hvdWxkTGF6eUF0dGFjaCk7CiAgICAgfQorICAg
IGFsbG93RXZlbnREaXNwYXRjaCgpOwogCi0gICAgZGlzcGF0Y2hTdWJ0cmVlTW9kaWZpZWRFdmVu
dCgpOworICAgIG5vdGlmeUNoaWxkcmVuSW5zZXJ0ZWQocHJvdGVjdC5yZWxlYXNlKCksIHRhcmdl
dHMsIHNob3VsZExhenlBdHRhY2gpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMDM3LDEz
ICsxMDI5LDYgQEAgc3RhdGljIHZvaWQgZGlzcGF0Y2hDaGlsZEluc2VydGlvbkV2ZW50cyhOb2Rl
KiBjaGlsZCkKICAgICBSZWZQdHI8Tm9kZT4gYyA9IGNoaWxkOwogICAgIFJlZlB0cjxEb2N1bWVu
dD4gZG9jdW1lbnQgPSBjaGlsZC0+ZG9jdW1lbnQoKTsKIAotI2lmIEVOQUJMRShNVVRBVElPTl9P
QlNFUlZFUlMpCi0gICAgaWYgKGMtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBDaGlsZExpc3RN
dXRhdGlvblNjb3BlIG11dGF0aW9uKGMtPnBhcmVudE5vZGUoKSk7Ci0gICAgICAgIG11dGF0aW9u
LmNoaWxkQWRkZWQoYy5nZXQoKSk7Ci0gICAgfQotI2VuZGlmCi0KICAgICBpZiAoYy0+cGFyZW50
Tm9kZSgpICYmIGRvY3VtZW50LT5oYXNMaXN0ZW5lclR5cGUoRG9jdW1lbnQ6OkRPTU5PREVJTlNF
UlRFRF9MSVNURU5FUikpCiAgICAgICAgIGMtPmRpc3BhdGNoU2NvcGVkRXZlbnQoTXV0YXRpb25F
dmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5ET01Ob2RlSW5zZXJ0ZWRFdmVudCwgdHJ1ZSwgYy0+
cGFyZW50Tm9kZSgpKSk7CiAKQEAgLTEwODcsMjUgKzEwNzIsMzYgQEAgc3RhdGljIHZvaWQgZGlz
cGF0Y2hDaGlsZFJlbW92YWxFdmVudHMoTm9kZSogY2hpbGQpCiAgICAgfQogfQogCi1zdGF0aWMg
dm9pZCB1cGRhdGVUcmVlQWZ0ZXJJbnNlcnRpb24oQ29udGFpbmVyTm9kZSogcGFyZW50LCBOb2Rl
KiBjaGlsZCwgYm9vbCBzaG91bGRMYXp5QXR0YWNoKQorc3RhdGljIHZvaWQgbm90aWZ5Q2hpbGRy
ZW5JbnNlcnRlZChQYXNzUmVmUHRyPENvbnRhaW5lck5vZGU+IHBhcmVudCwgY29uc3QgTm9kZVZl
Y3RvciYgY2hpbGRyZW4sIGJvb2wgc2hvdWxkTGF6eUF0dGFjaCkKIHsKLSAgICBBU1NFUlQocGFy
ZW50LT5yZWZDb3VudCgpKTsKLSAgICBBU1NFUlQoY2hpbGQtPnJlZkNvdW50KCkpOworICAgIGlm
IChjaGlsZHJlbi5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKIAotICAgIHBhcmVudC0+Y2hp
bGRyZW5DaGFuZ2VkKGZhbHNlLCBjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCksIGNoaWxkLT5uZXh0
U2libGluZygpLCAxKTsKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgIENoaWxk
TGlzdE11dGF0aW9uU2NvcGUocGFyZW50LmdldCgpKS5jaGlsZHJlbkFkZGVkKGNoaWxkcmVuKTsK
KyNlbmRpZgogCi0gICAgbm90aWZ5Q2hpbGRJbnNlcnRlZChjaGlsZCk7CisgICAgcGFyZW50LT5j
aGlsZHJlbkNoYW5nZWQoZmFsc2UsIGNoaWxkcmVuLmZpcnN0KCktPnByZXZpb3VzU2libGluZygp
LCBjaGlsZHJlbi5sYXN0KCktPm5leHRTaWJsaW5nKCksIGNoaWxkcmVuLnNpemUoKSk7CiAKLSAg
ICAvLyBGSVhNRTogQXR0YWNobWVudCBzaG91bGQgYmUgdGhlIGZpcnN0IG9wZXJhdGlvbiBpbiB0
aGlzIGZ1bmN0aW9uLCBidXQgc29tZSBjb2RlCi0gICAgLy8gKGZvciBleGFtcGxlLCBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50J3MgYXV0b2ZvY3VzIHN1cHBvcnQpIHJlcXVpcmVzIHRoaXMgb3JkZXJp
bmcuCi0gICAgaWYgKHBhcmVudC0+YXR0YWNoZWQoKSAmJiAhY2hpbGQtPmF0dGFjaGVkKCkgJiYg
Y2hpbGQtPnBhcmVudE5vZGUoKSA9PSBwYXJlbnQpIHsKLSAgICAgICAgaWYgKHNob3VsZExhenlB
dHRhY2gpCi0gICAgICAgICAgICBjaGlsZC0+bGF6eUF0dGFjaCgpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBjaGlsZC0+YXR0YWNoKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBj
aGlsZHJlbi5zaXplKCk7ICsraSkgeworICAgICAgICBOb2RlKiBjaGlsZCA9IGNoaWxkcmVuW2ld
LmdldCgpOworICAgICAgICBub3RpZnlDaGlsZEluc2VydGVkKGNoaWxkKTsKKworICAgICAgICAv
LyBGSVhNRTogQXR0YWNobWVudCBzaG91bGQgYmUgdGhlIGZpcnN0IG9wZXJhdGlvbiBpbiB0aGlz
IGZ1bmN0aW9uLCBidXQgc29tZSBjb2RlCisgICAgICAgIC8vIChmb3IgZXhhbXBsZSwgSFRNTEZv
cm1Db250cm9sRWxlbWVudCdzIGF1dG9mb2N1cyBzdXBwb3J0KSByZXF1aXJlcyB0aGlzIG9yZGVy
aW5nLgorICAgICAgICBpZiAocGFyZW50LT5hdHRhY2hlZCgpICYmICFjaGlsZC0+YXR0YWNoZWQo
KSAmJiBjaGlsZC0+cGFyZW50Tm9kZSgpID09IHBhcmVudCkgeworICAgICAgICAgICAgaWYgKHNo
b3VsZExhenlBdHRhY2gpCisgICAgICAgICAgICAgICAgY2hpbGQtPmxhenlBdHRhY2goKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjaGlsZC0+YXR0YWNoKCk7CisgICAgICAg
IH0KKworICAgICAgICAvLyBOb3cgdGhhdCB0aGUgY2hpbGQgaXMgYXR0YWNoZWQgdG8gdGhlIHJl
bmRlciB0cmVlLCBkaXNwYXRjaAorICAgICAgICAvLyB0aGUgcmVsZXZhbnQgbXV0YXRpb24gZXZl
bnRzLgorICAgICAgICBkaXNwYXRjaENoaWxkSW5zZXJ0aW9uRXZlbnRzKGNoaWxkKTsKICAgICB9
CiAKLSAgICBkaXNwYXRjaENoaWxkSW5zZXJ0aW9uRXZlbnRzKGNoaWxkKTsKKyAgICBwYXJlbnQt
PmRpc3BhdGNoU3VidHJlZU1vZGlmaWVkRXZlbnQoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCmluZGV4IDU1MzNiZjU5YTBhZjQ2MWI5NTg5YjcwOTY1MjM5Njc4YzE5YjdkZDguLjRk
MGViMjEzNWQ4Njc3MWUwMDEzMGUxYzIyZmM0ZTM0MGQ5MDJlZWUgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsNSArMSwx
NSBAQAogMjAxMi0wNC0wNCAgQWRhbSBLbGVpbiAgPGFkYW1rQGNocm9taXVtLm9yZz4KIAorICAg
ICAgICBEZWxheSBwb3N0LWluc2VydGlvbiBub3RpZmljYXRpb25zIHVudGlsIG5ldyBET00gdHJl
ZSBpcyBjb21wbGV0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9ODI2MzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIGZhc3QvZXZlbnRzL2RvbW5vZGVpbnNlcnRlZC1lbnRpcmUtZnJhZ21lbnQtZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9kb21ub2RlaW5zZXJ0ZWQtZW50
aXJlLWZyYWdtZW50Lmh0bWw6IEFkZGVkLgorCisyMDEyLTA0LTA0ICBBZGFtIEtsZWluICA8YWRh
bWtAY2hyb21pdW0ub3JnPgorCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGJyZWFrIG9uIERPTSBu
b2RlIGluc2VydGlvbiBvbmx5IG9uY2UgcGVyIG9wZXJhdGlvbiwgbm90IG9uY2UgcGVyIGluc2Vy
dGVkIG5vZGUKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTgyOTY3CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2RvbW5vZGVpbnNl
cnRlZC1lbnRpcmUtZnJhZ21lbnQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVu
dHMvZG9tbm9kZWluc2VydGVkLWVudGlyZS1mcmFnbWVudC1leHBlY3RlZC50eHQKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYjAyYzBiMjIzNGEyYjM0Mjc4YTAyNzYwMzM3NWViOGM5MmEwYWM3YgotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2RvbW5vZGVpbnNlcnRlZC1lbnRpcmUtZnJh
Z21lbnQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTIgQEAKK0RPTU5vZGVJbnNlcnRlZCBldmVu
dHMgc2hvdWxkIGJlIGZpcmVkIGFmdGVyIGFsbCBub2RlcyBpbiBhIERvY3VtZW50RnJhZ21lbnQg
YXJlIGluc2VydGVkLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBjb250
YWluZXIuY2hpbGROb2Rlcy5sZW5ndGggaXMgMworUEFTUyBjb250YWluZXIuY2hpbGROb2Rlcy5s
ZW5ndGggaXMgMworUEFTUyBjb250YWluZXIuY2hpbGROb2Rlcy5sZW5ndGggaXMgMworUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2RvbW5vZGVpbnNlcnRlZC1lbnRpcmUtZnJhZ21lbnQu
aHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2RvbW5vZGVpbnNlcnRlZC1lbnRpcmUtZnJh
Z21lbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNjFkMGE1YzI5ZGNiMjE3ZjgzZjQ3OTc0MTIxNjU0YTg2
YTFkMGIwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvZG9tbm9k
ZWluc2VydGVkLWVudGlyZS1mcmFnbWVudC5odG1sCkBAIC0wLDAgKzEsMTYgQEAKKzxkaXYgaWQ9
Y29udGFpbmVyPjwvZGl2PgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oJ0RPTU5vZGVJbnNlcnRlZCBl
dmVudHMgc2hvdWxkIGJlIGZpcmVkIGFmdGVyIGFsbCBub2RlcyBpbiBhIERvY3VtZW50RnJhZ21l
bnQgYXJlIGluc2VydGVkLicpOworCit2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1
bWVudEZyYWdtZW50KCk7CitmcmFnbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdhJykpOworZnJhZ21lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
YicpKTsKK2ZyYWdtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2knKSk7
Cit2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRhaW5lcicpOwor
Y29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ0RPTU5vZGVJbnNlcnRlZCcsIGZ1bmN0aW9uKGV2
dCkgeworICAgIHNob3VsZEJlKCdjb250YWluZXIuY2hpbGROb2Rlcy5sZW5ndGgnLCAnMycpOwor
fSk7Citjb250YWluZXIuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpOworPC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>