<?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>155460</bug_id>
          
          <creation_ts>2016-03-14 13:50:40 -0700</creation_ts>
          <short_desc>Reduce generated JSON HeapSnapshot size</short_desc>
          <delta_ts>2016-03-14 14:50:09 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="Joseph Pecoraro">joepeck</reporter>
          <assigned_to name="Joseph Pecoraro">joepeck</assigned_to>
          <cc>bburg</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>joepeck</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1174680</commentid>
    <comment_count>0</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-03-14 13:50:40 -0700</bug_when>
    <thetext>* SUMMARY
Reduce generated JSON HeapSnapshot size.

Do some extra processing while generating the HeapSnapshot JSON to reduce size. I saw a 10% JSON size reduction on large pages (31.4 MB -&gt; 28.0 MB).

This:
  - removes duplicated edges
  - sorts edges in a reliable order
  - remove edge name duplication
  - avoid multiple cell-&gt;identifier lookups by replacing JSCell* with identifiers in Edge structs
  - clears data as early as possible to reduce backend memory footprint during JSON building</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174689</commentid>
    <comment_count>1</comment_count>
      <attachid>274022</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-03-14 13:56:50 -0700</bug_when>
    <thetext>Created attachment 274022
[PATCH] Proposed Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174691</commentid>
    <comment_count>2</comment_count>
      <attachid>274022</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-03-14 14:00:37 -0700</bug_when>
    <thetext>Comment on attachment 274022
[PATCH] Proposed Fix

Do we have a benchmark that shows the reduction here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174715</commentid>
    <comment_count>3</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-03-14 14:36:43 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 274022 [details]
&gt; [PATCH] Proposed Fix
&gt; 
&gt; Do we have a benchmark that shows the reduction here?

No, I just logged the JSON snapshot string for some very large web pages (I mostly focused on iCloud.com).

I could add a JavaScriptCore/tests/heapProfiler test that creates a lot of objects and measures the generateHeapSnapshot() string length. I shied away from this because it would need to be fuzzy as JavaScriptCore changes. Is there a better way to test this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174726</commentid>
    <comment_count>4</comment_count>
      <attachid>274022</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-14 14:50:07 -0700</bug_when>
    <thetext>Comment on attachment 274022
[PATCH] Proposed Fix

Clearing flags on attachment: 274022

Committed r198159: &lt;http://trac.webkit.org/changeset/198159&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174727</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-14 14:50:09 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274022</attachid>
            <date>2016-03-14 13:56:50 -0700</date>
            <delta_ts>2016-03-14 14:50:07 -0700</delta_ts>
            <desc>[PATCH] Proposed Fix</desc>
            <filename>reduce-json-size.patch</filename>
            <type>text/plain</type>
            <size>22306</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDg4MjJkZjYuLjI5YWFmZjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDE2LTAzLTE0ICBKb3NlcGggUGVjb3Jh
cm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVkdWNlIGdlbmVyYXRlZCBKU09O
IEhlYXBTbmFwc2hvdCBzaXplCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTU0NjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGp1c3QgdGhlIEhlYXBTbmFwc2hvdCBKU09OIHRvIGJldHRlciByZWR1Y2Ug
aXRzIHNpemUuCisgICAgICAgIENoYW5nZXMgaW5jbHVkZToKKworICAgICAgICAgIC0gYXZvaWQg
aW5uZXIgYXJyYXkgZ3JvdXBzIGFuZCBpbnN0ZWFkIGp1c3QgaGF2ZSBhIGxhcmdlIGFycmF5IGZv
cgorICAgICAgICAgICAgbm9kZXMvZWRnZXMuIFRoaXMgcmVtb3ZlcyBsb3RzIG9mIHNtYWxsIGFy
cmF5IGFsbG9jYXRpb25zLgorICAgICAgICAgIC0gZWxpbWluYXRlIGR1cGxpY2F0ZSBlZGdlcwor
ICAgICAgICAgIC0gYXZvaWQgZHVwbGljYXRpbmcgZWRnZSBuYW1lcyBieSBpbmNsdWRpbmcgdGhl
bSBpbiB0aGVpciBvd24gdGFibGU7CisgICAgICAgICAgLSBub3cgYm90aCB0aGUgbm9kZXMgYW5k
IGVkZ2VzIGxpc3RzIGhvbGQgb25seSBpbnRlZ2VycworCisgICAgICAgICogaGVhcC9IZWFwU25h
cHNob3RCdWlsZGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcFNuYXBzaG90QnVpbGRlcjo6anNv
bik6CisgICAgICAgIEFkZCBzb21lIG1vcmUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIHNsaWdodGx5
IG1vZGlmaWVkIGZvcm1hdC4KKyAgICAgICAgV2hpbGUgZ2VuZXJhdGluZywgY2xlYXIgZGF0YSBz
dHJ1Y3R1cmVzIGFzIGVhcmx5IGFzIHBvc3NpYmxlLgorCisgICAgICAgICogaGVhcC9IZWFwU25h
cHNob3RCdWlsZGVyLmg6CisgICAgICAgIChKU0M6OkhlYXBTbmFwc2hvdEVkZ2U6OkhlYXBTbmFw
c2hvdEVkZ2UpOgorICAgICAgICBEdXJpbmcgSlNPTiBidWlsZGluZywgdGhlIGVkZ2UncyBjZWxs
IHBvaW50ZXJzIGFyZSBjb252ZXJ0ZWQgdG8gdGhlCisgICAgICAgIGlkZW50aWZpZXIgdGhleSBw
b2ludCB0by4gVGhpcyBhdm9pZHMgaGF2aW5nIHRvIHJlLWxvb2t1cCB0aGUgaWRlbnRpZmllci4K
KworICAgICAgICAqIHRlc3RzL2hlYXBQcm9maWxlci9kcml2ZXIvZHJpdmVyLmpzOgorICAgICAg
ICAoQ2hlYXBIZWFwU25hcHNob3RFZGdlKToKKyAgICAgICAgKENoZWFwSGVhcFNuYXBzaG90KToK
KyAgICAgICAgKENoZWFwSGVhcFNuYXBzaG90LnByb3RvdHlwZS5lZGdlTmFtZUZyb21UYWJsZUlu
ZGV4KToKKyAgICAgICAgKEhlYXBTbmFwc2hvdCk6CisgICAgICAgIFVwZGF0ZSB0ZXN0IGRyaXZl
ciBmb3Igc2xpZ2h0bHkgZGlmZmVyZW50IHNuYXBzaG90IGZvcm1hdC4KKwogMjAxNi0wMy0xNCAg
U2FhbSBiYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBhc3NpZ25tZW50cyBp
biBmb3ItaW4vZm9yLW9mIGhlYWRlciBub3QgYWxsb3dlZApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcFNuYXBzaG90QnVpbGRlci5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwU25hcHNob3RCdWlsZGVyLmNwcAppbmRleCBkNjJmOGRkLi5lZGYw
MGQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwU25hcHNob3RC
dWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwU25hcHNob3RC
dWlsZGVyLmNwcApAQCAtMTMzLDIyICsxMzMsNDEgQEAgYm9vbCBIZWFwU25hcHNob3RCdWlsZGVy
OjpoYXNFeGlzdGluZ05vZGVGb3JDZWxsKEpTQ2VsbCogY2VsbCkKIC8vICAgewogLy8gICAgICAi
dmVyc2lvbiI6IDEuMCwKIC8vICAgICAgIm5vZGVzIjogWwotLy8gICAgICAgICAgWzxub2RlSWQ+
LCA8c2l6ZUluQnl0ZXM+LCA8bm9kZUNsYXNzTmFtZUluZGV4PiwgPG9wdGlvbmFsSW50ZXJuYWw+
XSwgLi4uCisvLyAgICAgICAgICA8bm9kZUlkPiwgPHNpemVJbkJ5dGVzPiwgPG5vZGVDbGFzc05h
bWVJbmRleD4sIDxpbnRlcm5hbD4sCisvLyAgICAgICAgICA8bm9kZUlkPiwgPHNpemVJbkJ5dGVz
PiwgPG5vZGVDbGFzc05hbWVJbmRleD4sIDxpbnRlcm5hbD4sCisvLyAgICAgICAgICAuLi4KIC8v
ICAgICAgXSwKIC8vICAgICAgIm5vZGVDbGFzc05hbWVzIjogWwogLy8gICAgICAgICAgInN0cmlu
ZyIsICJTdHJ1Y3R1cmUiLCAiT2JqZWN0IiwgLi4uCiAvLyAgICAgIF0sCiAvLyAgICAgICJlZGdl
cyI6IFsKLS8vICAgICAgICAgIFs8ZnJvbU5vZGVJZD4sIDx0b05vZGVJZD4sIDxlZGdlVHlwZUlu
ZGV4PiwgPG9wdGlvbmFsRWRnZUV4dHJhRGF0YT5dLCAuLi4KKy8vICAgICAgICAgIDxmcm9tTm9k
ZUlkPiwgPHRvTm9kZUlkPiwgPGVkZ2VUeXBlSW5kZXg+LCA8ZWRnZUV4dHJhRGF0YT4sCisvLyAg
ICAgICAgICA8ZnJvbU5vZGVJZD4sIDx0b05vZGVJZD4sIDxlZGdlVHlwZUluZGV4PiwgPGVkZ2VF
eHRyYURhdGE+LAorLy8gICAgICAgICAgLi4uCiAvLyAgICAgIF0sCiAvLyAgICAgICJlZGdlVHlw
ZXMiOiBbCiAvLyAgICAgICAgICAiSW50ZXJuYWwiLCAiUHJvcGVydHkiLCAiSW5kZXgiLCAiVmFy
aWFibGUiCisvLyAgICAgIF0sCisvLyAgICAgICJlZGdlTmFtZXMiOiBbCisvLyAgICAgICAgICAi
cHJvcGVydHlOYW1lIiwgInZhcmlhYmxlTmFtZSIsIC4uLgogLy8gICAgICBdCiAvLyAgIH0KIC8v
Ci0vLyBGSVhNRTogUG9zc2libGUgY29tcGFjdGlvbiBpbXByb3ZlbWVudHM6Ci0vLyAgIC0gZWxp
bWluYXRlIGlubmVyIGFycmF5IGdyb3VwcyBhbmQganVzdCBoYXZlIGEgc2luZ2xlIGxpc3Qgd2l0
aCBmaXhlZCBncm91cCBzaXplcyAobWV0YSBkYXRhIHNlY3Rpb24pLgotLy8gICAtIGVsaW1pbmF0
ZSBkdXBsaWNhdGUgZWRnZSBleHRyYSBkYXRhIHN0cmluZ3MsIGhhdmUgYW4gaW5kZXggaW50byBh
IGRlLWR1cGxpY2F0ZWQgbGlrZSBlZGdlVHlwZXMgLyBub2RlQ2xhc3NOYW1lcy4KKy8vIE5vdGVz
OgorLy8KKy8vICAgICA8bm9kZUNsYXNzTmFtZUluZGV4PgorLy8gICAgICAgLSBpbmRleCBpbnRv
IHRoZSAibm9kZUNsYXNzTmFtZXMiIGxpc3QuCisvLworLy8gICAgIDxpbnRlcm5hbD4KKy8vICAg
ICAgIC0gMCA9IGZhbHNlLCAxID0gdHJ1ZS4KKy8vCisvLyAgICAgPGVkZ2VUeXBlSW5kZXg+Cisv
LyAgICAgICAtIGluZGV4IGludG8gdGhlICJlZGdlVHlwZXMiIGxpc3QuCisvLworLy8gICAgIDxl
ZGdlRXh0cmFEYXRhPgorLy8gICAgICAgLSBmb3IgSW50ZXJuYWwgZWRnZXMgdGhpcyBzaG91bGQg
YmUgaWdub3JlZCAoMCkuCisvLyAgICAgICAtIGZvciBJbmRleCBlZGdlcyB0aGlzIGlzIHRoZSBp
bmRleCB2YWx1ZS4KKy8vICAgICAgIC0gZm9yIFByb3BlcnR5IG9yIFZhcmlhYmxlIGVkZ2VzIHRo
aXMgaXMgYW4gaW5kZXggaW50byB0aGUgImVkZ2VOYW1lcyIgbGlzdC4KIAogc3RhdGljIHVpbnQ4
X3QgZWRnZVR5cGVUb051bWJlcihFZGdlVHlwZSB0eXBlKQogewpAQCAtMTg2LDcgKzIwNSwxMiBA
QCBTdHJpbmcgSGVhcFNuYXBzaG90QnVpbGRlcjo6anNvbihzdGQ6OmZ1bmN0aW9uPGJvb2wgKGNv
bnN0IEhlYXBTbmFwc2hvdE5vZGUmKT4gYQogCiAgICAgLy8gQnVpbGQgYSBsaXN0IG9mIHVzZWQg
Y2xhc3MgbmFtZXMuCiAgICAgSGFzaE1hcDxjb25zdCBjaGFyKiwgdW5zaWduZWQ+IGNsYXNzTmFt
ZUluZGV4ZXM7Ci0gICAgdW5zaWduZWQgbmV4dENsYXNzTmFtZUluZGV4ID0gMDsKKyAgICBjbGFz
c05hbWVJbmRleGVzLnNldCgiPHJvb3Q+IiwgMCk7CisgICAgdW5zaWduZWQgbmV4dENsYXNzTmFt
ZUluZGV4ID0gMTsKKworICAgIC8vIEJ1aWxkIGEgbGlzdCBvZiB1c2VkIGVkZ2UgbmFtZXMuCisg
ICAgSGFzaE1hcDxVbmlxdWVkU3RyaW5nSW1wbCosIHVuc2lnbmVkPiBlZGdlTmFtZUluZGV4ZXM7
CisgICAgdW5zaWduZWQgbmV4dEVkZ2VOYW1lSW5kZXggPSAwOwogCiAgICAgU3RyaW5nQnVpbGRl
ciBqc29uOwogCkBAIC0yMDgsNjQgKzIzMiw0OCBAQCBTdHJpbmcgSGVhcFNuYXBzaG90QnVpbGRl
cjo6anNvbihzdGQ6OmZ1bmN0aW9uPGJvb2wgKGNvbnN0IEhlYXBTbmFwc2hvdE5vZGUmKT4gYQog
ICAgICAgICAgICAgaXNJbnRlcm5hbCA9ICFzdHJ1Y3R1cmUgfHwgIXN0cnVjdHVyZS0+Z2xvYmFs
T2JqZWN0KCk7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBbPG5vZGVJZD4sIDxzaXplSW5CeXRl
cz4sIDxjbGFzc05hbWU+LCA8b3B0aW9uYWxJbnRlcm5hbEJvb2xlYW4+XQorICAgICAgICAvLyA8
bm9kZUlkPiwgPHNpemVJbkJ5dGVzPiwgPGNsYXNzTmFtZT4sIDxvcHRpb25hbEludGVybmFsQm9v
bGVhbj4KICAgICAgICAganNvbi5hcHBlbmQoJywnKTsKLSAgICAgICAganNvbi5hcHBlbmQoJ1sn
KTsKICAgICAgICAganNvbi5hcHBlbmROdW1iZXIobm9kZS5pZGVudGlmaWVyKTsKICAgICAgICAg
anNvbi5hcHBlbmQoJywnKTsKICAgICAgICAganNvbi5hcHBlbmROdW1iZXIobm9kZS5jZWxsLT5l
c3RpbWF0ZWRTaXplSW5CeXRlcygpKTsKICAgICAgICAganNvbi5hcHBlbmQoJywnKTsKICAgICAg
ICAganNvbi5hcHBlbmROdW1iZXIoY2xhc3NOYW1lSW5kZXgpOwotICAgICAgICBpZiAoaXNJbnRl
cm5hbCkKLSAgICAgICAgICAgIGpzb24uYXBwZW5kTGl0ZXJhbCgiLDEiKTsKLSAgICAgICAganNv
bi5hcHBlbmQoJ10nKTsKKyAgICAgICAganNvbi5hcHBlbmQoJywnKTsKKyAgICAgICAganNvbi5h
cHBlbmQoaXNJbnRlcm5hbCA/ICcxJyA6ICcwJyk7CiAgICAgfTsKIAogICAgIGJvb2wgZmlyc3RF
ZGdlID0gdHJ1ZTsKICAgICBhdXRvIGFwcGVuZEVkZ2VKU09OID0gWyZdIChjb25zdCBIZWFwU25h
cHNob3RFZGdlJiBlZGdlKSB7Ci0gICAgICAgIC8vIElmIHRoZSBmcm9tIGNlbGwgaXMgbnVsbCwg
dGhpcyBtZWFucyBhIHJvb3QgZWRnZS4KLSAgICAgICAgdW5zaWduZWQgZnJvbUlkZW50aWZpZXIg
PSAwOwotICAgICAgICBpZiAoZWRnZS5mcm9tKSB7Ci0gICAgICAgICAgICBhdXRvIGZyb21Mb29r
dXAgPSBhbGxvd2VkTm9kZUlkZW50aWZpZXJzLmZpbmQoZWRnZS5mcm9tKTsKLSAgICAgICAgICAg
IGlmIChmcm9tTG9va3VwID09IGFsbG93ZWROb2RlSWRlbnRpZmllcnMuZW5kKCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgZnJvbUlkZW50aWZpZXIgPSBmcm9tTG9va3Vw
LT52YWx1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHVuc2lnbmVkIHRvSWRlbnRpZmllciA9IDA7
Ci0gICAgICAgIGlmIChlZGdlLnRvKSB7Ci0gICAgICAgICAgICBhdXRvIHRvTG9va3VwID0gYWxs
b3dlZE5vZGVJZGVudGlmaWVycy5maW5kKGVkZ2UudG8pOwotICAgICAgICAgICAgaWYgKHRvTG9v
a3VwID09IGFsbG93ZWROb2RlSWRlbnRpZmllcnMuZW5kKCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgdG9JZGVudGlmaWVyID0gdG9Mb29rdXAtPnZhbHVlOwotICAgICAg
ICB9Ci0KICAgICAgICAgaWYgKCFmaXJzdEVkZ2UpCiAgICAgICAgICAgICBqc29uLmFwcGVuZCgn
LCcpOwogICAgICAgICBmaXJzdEVkZ2UgPSBmYWxzZTsKIAotICAgICAgICAvLyBbPGZyb21Ob2Rl
SWQ+LCA8dG9Ob2RlSWQ+LCA8ZWRnZVR5cGVJbmRleD4sIDxvcHRpb25hbEVkZ2VFeHRyYURhdGE+
XSwKLSAgICAgICAganNvbi5hcHBlbmQoJ1snKTsKLSAgICAgICAganNvbi5hcHBlbmROdW1iZXIo
ZnJvbUlkZW50aWZpZXIpOworICAgICAgICAvLyA8ZnJvbU5vZGVJZD4sIDx0b05vZGVJZD4sIDxl
ZGdlVHlwZUluZGV4PiwgPGVkZ2VFeHRyYURhdGE+CisgICAgICAgIGpzb24uYXBwZW5kTnVtYmVy
KGVkZ2UuZnJvbS5pZGVudGlmaWVyKTsKICAgICAgICAganNvbi5hcHBlbmQoJywnKTsKLSAgICAg
ICAganNvbi5hcHBlbmROdW1iZXIodG9JZGVudGlmaWVyKTsKKyAgICAgICAganNvbi5hcHBlbmRO
dW1iZXIoZWRnZS50by5pZGVudGlmaWVyKTsKICAgICAgICAganNvbi5hcHBlbmQoJywnKTsKICAg
ICAgICAganNvbi5hcHBlbmROdW1iZXIoZWRnZVR5cGVUb051bWJlcihlZGdlLnR5cGUpKTsKKyAg
ICAgICAganNvbi5hcHBlbmQoJywnKTsKICAgICAgICAgc3dpdGNoIChlZGdlLnR5cGUpIHsKICAg
ICAgICAgY2FzZSBFZGdlVHlwZTo6UHJvcGVydHk6Ci0gICAgICAgIGNhc2UgRWRnZVR5cGU6OlZh
cmlhYmxlOgotICAgICAgICAgICAganNvbi5hcHBlbmQoJywnKTsKLSAgICAgICAgICAgIGpzb24u
YXBwZW5kUXVvdGVkSlNPTlN0cmluZyhlZGdlLnUubmFtZSk7CisgICAgICAgIGNhc2UgRWRnZVR5
cGU6OlZhcmlhYmxlOiB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGVkZ2VOYW1lSW5kZXhl
cy5hZGQoZWRnZS51Lm5hbWUsIG5leHRFZGdlTmFtZUluZGV4KTsKKyAgICAgICAgICAgIGlmIChy
ZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgICAgICAgICBuZXh0RWRnZU5hbWVJbmRleCsrOwor
ICAgICAgICAgICAgdW5zaWduZWQgZWRnZU5hbWVJbmRleCA9IHJlc3VsdC5pdGVyYXRvci0+dmFs
dWU7CisgICAgICAgICAgICBqc29uLmFwcGVuZE51bWJlcihlZGdlTmFtZUluZGV4KTsKICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2UgRWRnZVR5cGU6OkluZGV4Ogot
ICAgICAgICAgICAganNvbi5hcHBlbmQoJywnKTsKICAgICAgICAgICAgIGpzb24uYXBwZW5kTnVt
YmVyKGVkZ2UudS5pbmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgICAgIC8vIE5vIGRhdGEgZm9yIHRoaXMgZWRnZSB0eXBlLgorICAgICAgICAgICAg
anNvbi5hcHBlbmQoJzAnKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAg
IGpzb24uYXBwZW5kKCddJyk7CiAgICAgfTsKIAogICAgIGpzb24uYXBwZW5kKCd7Jyk7CkBAIC0y
NzcsNyArMjg1LDcgQEAgU3RyaW5nIEhlYXBTbmFwc2hvdEJ1aWxkZXI6Ompzb24oc3RkOjpmdW5j
dGlvbjxib29sIChjb25zdCBIZWFwU25hcHNob3ROb2RlJik+IGEKICAgICBqc29uLmFwcGVuZCgn
LCcpOwogICAgIGpzb24uYXBwZW5kTGl0ZXJhbCgiXCJub2Rlc1wiOiIpOwogICAgIGpzb24uYXBw
ZW5kKCdbJyk7Ci0gICAganNvbi5hcHBlbmRMaXRlcmFsKCJbMCwwLFwiPHJvb3Q+XCJdIik7Cisg
ICAganNvbi5hcHBlbmRMaXRlcmFsKCIwLDAsMCwwIik7IC8vIDxyb290PgogICAgIGZvciAoSGVh
cFNuYXBzaG90KiBzbmFwc2hvdCA9IG1fcHJvZmlsZXIubW9zdFJlY2VudFNuYXBzaG90KCk7IHNu
YXBzaG90OyBzbmFwc2hvdCA9IHNuYXBzaG90LT5wcmV2aW91cygpKSB7CiAgICAgICAgIGZvciAo
YXV0byYgbm9kZSA6IHNuYXBzaG90LT5tX25vZGVzKQogICAgICAgICAgICAgYXBwZW5kTm9kZUpT
T04obm9kZSk7CkBAIC0yOTEsNiArMjk5LDcgQEAgU3RyaW5nIEhlYXBTbmFwc2hvdEJ1aWxkZXI6
Ompzb24oc3RkOjpmdW5jdGlvbjxib29sIChjb25zdCBIZWFwU25hcHNob3ROb2RlJik+IGEKICAg
ICBWZWN0b3I8Y29uc3QgY2hhciAqPiBvcmRlcmVkQ2xhc3NOYW1lcyhjbGFzc05hbWVJbmRleGVz
LnNpemUoKSk7CiAgICAgZm9yIChhdXRvJiBlbnRyeSA6IGNsYXNzTmFtZUluZGV4ZXMpCiAgICAg
ICAgIG9yZGVyZWRDbGFzc05hbWVzW2VudHJ5LnZhbHVlXSA9IGVudHJ5LmtleTsKKyAgICBjbGFz
c05hbWVJbmRleGVzLmNsZWFyKCk7CiAgICAgYm9vbCBmaXJzdENsYXNzTmFtZSA9IHRydWU7CiAg
ICAgZm9yIChhdXRvJiBjbGFzc05hbWUgOiBvcmRlcmVkQ2xhc3NOYW1lcykgewogICAgICAgICBp
ZiAoIWZpcnN0Q2xhc3NOYW1lKQpAQCAtMjk4LDggKzMwNyw0MiBAQCBTdHJpbmcgSGVhcFNuYXBz
aG90QnVpbGRlcjo6anNvbihzdGQ6OmZ1bmN0aW9uPGJvb2wgKGNvbnN0IEhlYXBTbmFwc2hvdE5v
ZGUmKT4gYQogICAgICAgICBmaXJzdENsYXNzTmFtZSA9IGZhbHNlOwogICAgICAgICBqc29uLmFw
cGVuZFF1b3RlZEpTT05TdHJpbmcoY2xhc3NOYW1lKTsKICAgICB9CisgICAgb3JkZXJlZENsYXNz
TmFtZXMuY2xlYXIoKTsKICAgICBqc29uLmFwcGVuZCgnXScpOwogCisgICAgLy8gUHJvY2VzcyBl
ZGdlcy4KKyAgICAvLyBSZXBsYWNlIHBvaW50ZXJzIHdpdGggaWRlbnRpZmllcnMuCisgICAgLy8g
UmVtb3ZlIGFueSBlZGdlcyB0aGF0IHdlIHdvbid0IG5lZWQuCisgICAgbV9lZGdlcy5yZW1vdmVB
bGxNYXRjaGluZyhbJl0gKEhlYXBTbmFwc2hvdEVkZ2UmIGVkZ2UpIHsKKyAgICAgICAgLy8gSWYg
dGhlIGZyb20gY2VsbCBpcyBudWxsLCB0aGlzIG1lYW5zIGEgPHJvb3Q+IGVkZ2UuCisgICAgICAg
IGlmICghZWRnZS5mcm9tLmNlbGwpCisgICAgICAgICAgICBlZGdlLmZyb20uaWRlbnRpZmllciA9
IDA7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXV0byBmcm9tTG9va3VwID0gYWxsb3dl
ZE5vZGVJZGVudGlmaWVycy5maW5kKGVkZ2UuZnJvbS5jZWxsKTsKKyAgICAgICAgICAgIGlmIChm
cm9tTG9va3VwID09IGFsbG93ZWROb2RlSWRlbnRpZmllcnMuZW5kKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBlZGdlLmZyb20uaWRlbnRpZmllciA9IGZyb21M
b29rdXAtPnZhbHVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFlZGdlLnRvLmNlbGwpCisg
ICAgICAgICAgICBlZGdlLnRvLmlkZW50aWZpZXIgPSAwOworICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIGF1dG8gdG9Mb29rdXAgPSBhbGxvd2VkTm9kZUlkZW50aWZpZXJzLmZpbmQoZWRnZS50
by5jZWxsKTsKKyAgICAgICAgICAgIGlmICh0b0xvb2t1cCA9PSBhbGxvd2VkTm9kZUlkZW50aWZp
ZXJzLmVuZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgZWRn
ZS50by5pZGVudGlmaWVyID0gdG9Mb29rdXAtPnZhbHVlOworICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0pOworICAgIGFsbG93ZWROb2RlSWRlbnRpZmllcnMuY2xlYXIo
KTsKKyAgICBtX2VkZ2VzLnNocmlua1RvRml0KCk7CisKKyAgICAvLyBTb3J0IGVkZ2VzIGJhc2Vk
IG9uIGZyb20gaWRlbnRpZmllci4KKyAgICBzdGQ6OnNvcnQobV9lZGdlcy5iZWdpbigpLCBtX2Vk
Z2VzLmVuZCgpLCBbJl0gKGNvbnN0IEhlYXBTbmFwc2hvdEVkZ2UmIGEsIGNvbnN0IEhlYXBTbmFw
c2hvdEVkZ2UmIGIpIHsKKyAgICAgICAgcmV0dXJuIGEuZnJvbS5pZGVudGlmaWVyIDwgYi5mcm9t
LmlkZW50aWZpZXI7CisgICAgfSk7CisKICAgICAvLyBlZGdlcwogICAgIGpzb24uYXBwZW5kKCcs
Jyk7CiAgICAganNvbi5hcHBlbmRMaXRlcmFsKCJcImVkZ2VzXCI6Iik7CkBAIC0zMjEsNiArMzY0
LDI0IEBAIFN0cmluZyBIZWFwU25hcHNob3RCdWlsZGVyOjpqc29uKHN0ZDo6ZnVuY3Rpb248Ym9v
bCAoY29uc3QgSGVhcFNuYXBzaG90Tm9kZSYpPiBhCiAgICAganNvbi5hcHBlbmRRdW90ZWRKU09O
U3RyaW5nKGVkZ2VUeXBlVG9TdHJpbmcoRWRnZVR5cGU6OlZhcmlhYmxlKSk7CiAgICAganNvbi5h
cHBlbmQoJ10nKTsKIAorICAgIC8vIGVkZ2UgbmFtZXMKKyAgICBqc29uLmFwcGVuZCgnLCcpOwor
ICAgIGpzb24uYXBwZW5kTGl0ZXJhbCgiXCJlZGdlTmFtZXNcIjoiKTsKKyAgICBqc29uLmFwcGVu
ZCgnWycpOworICAgIFZlY3RvcjxVbmlxdWVkU3RyaW5nSW1wbCo+IG9yZGVyZWRFZGdlTmFtZXMo
ZWRnZU5hbWVJbmRleGVzLnNpemUoKSk7CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IGVkZ2VOYW1l
SW5kZXhlcykKKyAgICAgICAgb3JkZXJlZEVkZ2VOYW1lc1tlbnRyeS52YWx1ZV0gPSBlbnRyeS5r
ZXk7CisgICAgZWRnZU5hbWVJbmRleGVzLmNsZWFyKCk7CisgICAgYm9vbCBmaXJzdEVkZ2VOYW1l
ID0gdHJ1ZTsKKyAgICBmb3IgKGF1dG8mIGVkZ2VOYW1lIDogb3JkZXJlZEVkZ2VOYW1lcykgewor
ICAgICAgICBpZiAoIWZpcnN0RWRnZU5hbWUpCisgICAgICAgICAgICBqc29uLmFwcGVuZCgnLCcp
OworICAgICAgICBmaXJzdEVkZ2VOYW1lID0gZmFsc2U7CisgICAgICAgIGpzb24uYXBwZW5kUXVv
dGVkSlNPTlN0cmluZyhlZGdlTmFtZSk7CisgICAgfQorICAgIG9yZGVyZWRFZGdlTmFtZXMuY2xl
YXIoKTsKKyAgICBqc29uLmFwcGVuZCgnXScpOworCiAgICAganNvbi5hcHBlbmQoJ30nKTsKICAg
ICByZXR1cm4ganNvbi50b1N0cmluZygpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcFNuYXBzaG90QnVpbGRlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcFNuYXBzaG90QnVpbGRlci5oCmluZGV4IDgwMDU4Y2EuLjdmY2FhZWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBTbmFwc2hvdEJ1aWxkZXIuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwU25hcHNob3RCdWlsZGVyLmgKQEAg
LTU3LDM2ICs1Nyw0NiBAQCBlbnVtIGNsYXNzIEVkZ2VUeXBlIDogdWludDhfdCB7CiB9OwogCiBz
dHJ1Y3QgSGVhcFNuYXBzaG90RWRnZSB7Ci0gICAgSGVhcFNuYXBzaG90RWRnZShKU0NlbGwqIGZy
b20sIEpTQ2VsbCogdG8pCi0gICAgICAgIDogZnJvbShmcm9tKQotICAgICAgICAsIHRvKHRvKQot
ICAgICAgICAsIHR5cGUoRWRnZVR5cGU6OkludGVybmFsKQotICAgIHsgfQorICAgIEhlYXBTbmFw
c2hvdEVkZ2UoSlNDZWxsKiBmcm9tQ2VsbCwgSlNDZWxsKiB0b0NlbGwpCisgICAgICAgIDogdHlw
ZShFZGdlVHlwZTo6SW50ZXJuYWwpCisgICAgeworICAgICAgICBmcm9tLmNlbGwgPSBmcm9tQ2Vs
bDsKKyAgICAgICAgdG8uY2VsbCA9IHRvQ2VsbDsKKyAgICB9CiAKLSAgICBIZWFwU25hcHNob3RF
ZGdlKEpTQ2VsbCogZnJvbSwgSlNDZWxsKiB0bywgRWRnZVR5cGUgdHlwZSwgVW5pcXVlZFN0cmlu
Z0ltcGwqIG5hbWUpCi0gICAgICAgIDogZnJvbShmcm9tKQotICAgICAgICAsIHRvKHRvKQotICAg
ICAgICAsIHR5cGUodHlwZSkKKyAgICBIZWFwU25hcHNob3RFZGdlKEpTQ2VsbCogZnJvbUNlbGws
IEpTQ2VsbCogdG9DZWxsLCBFZGdlVHlwZSB0eXBlLCBVbmlxdWVkU3RyaW5nSW1wbCogbmFtZSkK
KyAgICAgICAgOiB0eXBlKHR5cGUpCiAgICAgewogICAgICAgICBBU1NFUlQodHlwZSA9PSBFZGdl
VHlwZTo6UHJvcGVydHkgfHwgdHlwZSA9PSBFZGdlVHlwZTo6VmFyaWFibGUpOworICAgICAgICBm
cm9tLmNlbGwgPSBmcm9tQ2VsbDsKKyAgICAgICAgdG8uY2VsbCA9IHRvQ2VsbDsKICAgICAgICAg
dS5uYW1lID0gbmFtZTsKICAgICB9CiAKLSAgICBIZWFwU25hcHNob3RFZGdlKEpTQ2VsbCogZnJv
bSwgSlNDZWxsKiB0bywgdWludDMyX3QgaW5kZXgpCi0gICAgICAgIDogZnJvbShmcm9tKQotICAg
ICAgICAsIHRvKHRvKQotICAgICAgICAsIHR5cGUoRWRnZVR5cGU6OkluZGV4KQorICAgIEhlYXBT
bmFwc2hvdEVkZ2UoSlNDZWxsKiBmcm9tQ2VsbCwgSlNDZWxsKiB0b0NlbGwsIHVpbnQzMl90IGlu
ZGV4KQorICAgICAgICA6IHR5cGUoRWRnZVR5cGU6OkluZGV4KQogICAgIHsKKyAgICAgICAgZnJv
bS5jZWxsID0gZnJvbUNlbGw7CisgICAgICAgIHRvLmNlbGwgPSB0b0NlbGw7CiAgICAgICAgIHUu
aW5kZXggPSBpbmRleDsKICAgICB9CiAKLSAgICBKU0NlbGwqIGZyb207Ci0gICAgSlNDZWxsKiB0
bzsKLSAgICBFZGdlVHlwZSB0eXBlOworICAgIHVuaW9uIHsKKyAgICAgICAgSlNDZWxsICpjZWxs
OworICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyOworICAgIH0gZnJvbTsKKworICAgIHVuaW9u
IHsKKyAgICAgICAgSlNDZWxsICpjZWxsOworICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyOwor
ICAgIH0gdG87CisKICAgICB1bmlvbiB7CiAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBuYW1l
OwogICAgICAgICB1aW50MzJfdCBpbmRleDsKICAgICB9IHU7CisKKyAgICBFZGdlVHlwZSB0eXBl
OwogfTsKIAogY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgSGVhcFNuYXBzaG90QnVpbGRlciB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvaGVhcFByb2ZpbGVyL2RyaXZl
ci9kcml2ZXIuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvaGVhcFByb2ZpbGVyL2Ry
aXZlci9kcml2ZXIuanMKaW5kZXggODJmODBmMC4uNThlZTVhOCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL2hlYXBQcm9maWxlci9kcml2ZXIvZHJpdmVyLmpzCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9oZWFwUHJvZmlsZXIvZHJpdmVyL2RyaXZlci5q
cwpAQCAtMTgsNyArMTgsNyBAQCBjb25zdCBub2RlSW50ZXJuYWxPZmZzZXQgPSAzOwogY29uc3Qg
bm9kZUZpcnN0RWRnZU9mZnNldCA9IDQ7CiBjb25zdCBub2RlTm9FZGdlVmFsdWUgPSAweGZmZmZm
ZmZmOyAvLyBVSU5UX01BWAogCi0vLyBbPDA6ZnJvbS1pZD4sIDwxOnRvLWlkPiwgPDI6dHlwZVRh
YmxlSW5kZXg+LCA8MzpkYXRhPl0KKy8vIFs8MDpmcm9tSWQ+LCA8MTp0b0lkPiwgPDI6dHlwZVRh
YmxlSW5kZXg+LCA8MzplZGdlRGF0YUluZGV4T3JFZGdlTmFtZUluZGV4Pl0KIGNvbnN0IGVkZ2VG
aWVsZENvdW50ID0gNDsKIGNvbnN0IGVkZ2VGcm9tSWRPZmZzZXQgPSAwOwogY29uc3QgZWRnZVRv
SWRPZmZzZXQgPSAxOwpAQCAtNjAsNyArNjAsMTEgQEAgQ2hlYXBIZWFwU25hcHNob3RFZGdlID0g
Y2xhc3MgQ2hlYXBIZWFwU25hcHNob3RFZGdlCiAgICAgICAgIHRoaXMuZnJvbUlkID0gZWRnZXNb
ZWRnZUluZGV4ICsgZWRnZUZyb21JZE9mZnNldF07CiAgICAgICAgIHRoaXMudG9JZCA9IGVkZ2Vz
W2VkZ2VJbmRleCArIGVkZ2VUb0lkT2Zmc2V0XTsKICAgICAgICAgdGhpcy50eXBlID0gc25hcHNo
b3QuZWRnZVR5cGVGcm9tVGFibGVJbmRleChlZGdlc1tlZGdlSW5kZXggKyBlZGdlVHlwZU9mZnNl
dF0pOwotICAgICAgICB0aGlzLmRhdGEgPSBlZGdlc1tlZGdlSW5kZXggKyBlZGdlRGF0YU9mZnNl
dF07CisKKyAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gIlByb3BlcnR5IiB8fCB0aGlzLnR5cGUg
PT09ICJWYXJpYWJsZSIpCisgICAgICAgICAgICB0aGlzLmRhdGEgPSBzbmFwc2hvdC5lZGdlTmFt
ZUZyb21UYWJsZUluZGV4KGVkZ2VzW2VkZ2VJbmRleCArIGVkZ2VEYXRhT2Zmc2V0XSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHRoaXMuZGF0YSA9IGVkZ2VzW2VkZ2VJbmRleCArIGVkZ2VE
YXRhT2Zmc2V0XTsKICAgICB9CiAKICAgICBnZXQgZnJvbSgpIHsgcmV0dXJuIHRoaXMuc25hcHNo
b3Qubm9kZVdpdGhJZGVudGlmaWVyKHRoaXMuZnJvbUlkKTsgfQpAQCAtNzEsNDEgKzc1LDQ0IEBA
IENoZWFwSGVhcFNuYXBzaG90ID0gY2xhc3MgQ2hlYXBIZWFwU25hcHNob3QKIHsKICAgICBjb25z
dHJ1Y3Rvcihqc29uKQogICAgIHsKLSAgICAgICAgbGV0IHtub2Rlcywgbm9kZUNsYXNzTmFtZXMs
IGVkZ2VzLCBlZGdlVHlwZXN9ID0ganNvbjsKKyAgICAgICAgbGV0IHtub2Rlcywgbm9kZUNsYXNz
TmFtZXMsIGVkZ2VzLCBlZGdlVHlwZXMsIGVkZ2VOYW1lc30gPSBqc29uOwogCiAgICAgICAgIHRo
aXMuX25vZGVzID0gbmV3IFVpbnQzMkFycmF5KG5vZGVzLmxlbmd0aCAqIG5vZGVGaWVsZENvdW50
KTsKICAgICAgICAgdGhpcy5fZWRnZXMgPSBuZXcgVWludDMyQXJyYXkoZWRnZXMubGVuZ3RoICog
ZWRnZUZpZWxkQ291bnQpOwogICAgICAgICB0aGlzLl9ub2RlSWRlbnRpZmllclRvSW5kZXggPSBu
ZXcgTWFwOyAvLyA8aWQ+ID0+IGluZGV4IGluIF9ub2RlcwogCiAgICAgICAgIHRoaXMuX2VkZ2VU
eXBlc1RhYmxlID0gZWRnZVR5cGVzOworICAgICAgICB0aGlzLl9lZGdlTmFtZXNUYWJsZSA9IGVk
Z2VOYW1lczsKICAgICAgICAgdGhpcy5fbm9kZUNsYXNzTmFtZXNUYWJsZSA9IG5vZGVDbGFzc05h
bWVzOwogCiAgICAgICAgIGxldCBuID0gMDsKLSAgICAgICAgbm9kZXMuZm9yRWFjaCgobm9kZVBh
eWxvYWQpID0+IHsKLSAgICAgICAgICAgIGxldCBbaWQsIHNpemUsIGNsYXNzTmFtZVRhYmxlSW5k
ZXgsIGludGVybmFsXSA9IG5vZGVQYXlsb2FkOwotICAgICAgICAgICAgdGhpcy5fbm9kZUlkZW50
aWZpZXJUb0luZGV4LnNldChpZCwgbik7Ci0gICAgICAgICAgICB0aGlzLl9ub2Rlc1tuKytdID0g
aWQ7Ci0gICAgICAgICAgICB0aGlzLl9ub2Rlc1tuKytdID0gc2l6ZTsKLSAgICAgICAgICAgIHRo
aXMuX25vZGVzW24rK10gPSBjbGFzc05hbWVUYWJsZUluZGV4OwotICAgICAgICAgICAgdGhpcy5f
bm9kZXNbbisrXSA9IGludGVybmFsOworICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVz
Lmxlbmd0aDspIHsKKyAgICAgICAgICAgIHRoaXMuX25vZGVJZGVudGlmaWVyVG9JbmRleC5zZXQo
bm9kZXNbaV0sIG4pOworICAgICAgICAgICAgdGhpcy5fbm9kZXNbbisrXSA9IG5vZGVzW2krK107
IC8vIGlkCisgICAgICAgICAgICB0aGlzLl9ub2Rlc1tuKytdID0gbm9kZXNbaSsrXTsgLy8gc2l6
ZQorICAgICAgICAgICAgdGhpcy5fbm9kZXNbbisrXSA9IG5vZGVzW2krK107IC8vIGNsYXNzTmFt
ZVRhYmxlSW5kZXgKKyAgICAgICAgICAgIHRoaXMuX25vZGVzW24rK10gPSBub2Rlc1tpKytdOyAv
LyBpbnRlcm5hbAogICAgICAgICAgICAgdGhpcy5fbm9kZXNbbisrXSA9IG5vZGVOb0VkZ2VWYWx1
ZTsKLSAgICAgICAgfSk7CisgICAgICAgIH0KIAogICAgICAgICBsZXQgZSA9IDA7CiAgICAgICAg
IGxldCBsYXN0Tm9kZUlkZW50aWZpZXIgPSAtMTsKLSAgICAgICAgZWRnZXMuc29ydCgoYSwgYikg
PT4gYVswXSAtIGJbMF0pLmZvckVhY2goKGVkZ2VQYXlsb2FkKSA9PiB7Ci0gICAgICAgICAgICBs
ZXQgW2Zyb21JZGVudGlmaWVyLCB0b0lkZW50aWZpZXIsIGVkZ2VUeXBlVGFibGVJbmRleCwgZGF0
YV0gPSBlZGdlUGF5bG9hZDsKKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlZGdlcy5sZW5n
dGg7KSB7CisgICAgICAgICAgICBsZXQgZnJvbUlkZW50aWZpZXIgPSBlZGdlc1tpKytdOyAvLyBm
cm9tSWRlbnRpZmllcgorICAgICAgICAgICAgbGV0IHRvSWRlbnRpZmllciA9IGVkZ2VzW2krK107
IC8vIHRvSWRlbnRpZmllcgorICAgICAgICAgICAgYXNzZXJ0KGxhc3ROb2RlSWRlbnRpZmllciA8
PSBmcm9tSWRlbnRpZmllciwgIkVkZ2UgbGlzdCBzaG91bGQgYmUgb3JkZXJlZCBieSBmcm9tIG5v
ZGUgaWRlbnRpZmllciIpOwogICAgICAgICAgICAgaWYgKGZyb21JZGVudGlmaWVyICE9PSBsYXN0
Tm9kZUlkZW50aWZpZXIpIHsKICAgICAgICAgICAgICAgICBsZXQgbm9kZUluZGV4ID0gdGhpcy5f
bm9kZUlkZW50aWZpZXJUb0luZGV4LmdldChmcm9tSWRlbnRpZmllcik7CiAgICAgICAgICAgICAg
ICAgYXNzZXJ0KHRoaXMuX25vZGVzW25vZGVJbmRleCArIG5vZGVJZE9mZnNldF0gPT09IGZyb21J
ZGVudGlmaWVyLCAiTm9kZSBsb29rdXAgZmFpbGVkIik7CiAgICAgICAgICAgICAgICAgdGhpcy5f
bm9kZXNbbm9kZUluZGV4ICsgbm9kZUZpcnN0RWRnZU9mZnNldF0gPSBlOwogICAgICAgICAgICAg
ICAgIGxhc3ROb2RlSWRlbnRpZmllciA9IGZyb21JZGVudGlmaWVyOwogICAgICAgICAgICAgfQor
CiAgICAgICAgICAgICB0aGlzLl9lZGdlc1tlKytdID0gZnJvbUlkZW50aWZpZXI7CiAgICAgICAg
ICAgICB0aGlzLl9lZGdlc1tlKytdID0gdG9JZGVudGlmaWVyOwotICAgICAgICAgICAgdGhpcy5f
ZWRnZXNbZSsrXSA9IGVkZ2VUeXBlVGFibGVJbmRleDsKLSAgICAgICAgICAgIHRoaXMuX2VkZ2Vz
W2UrK10gPSBkYXRhOwotICAgICAgICB9KTsKKyAgICAgICAgICAgIHRoaXMuX2VkZ2VzW2UrK10g
PSBlZGdlc1tpKytdOyAvLyBlZGdlVHlwZVRhYmxlSW5kZXgKKyAgICAgICAgICAgIHRoaXMuX2Vk
Z2VzW2UrK10gPSBlZGdlc1tpKytdOyAvLyBkYXRhCisgICAgICAgIH0KICAgICB9CiAKICAgICBn
ZXQgbm9kZXMoKSB7IHJldHVybiB0aGlzLl9ub2RlczsgfQpAQCAtMTM2LDYgKzE0MywxMSBAQCBD
aGVhcEhlYXBTbmFwc2hvdCA9IGNsYXNzIENoZWFwSGVhcFNuYXBzaG90CiAgICAgewogICAgICAg
ICByZXR1cm4gdGhpcy5fZWRnZVR5cGVzVGFibGVbdGFibGVJbmRleF07CiAgICAgfQorCisgICAg
ZWRnZU5hbWVGcm9tVGFibGVJbmRleCh0YWJsZUluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuX2VkZ2VOYW1lc1RhYmxlW3RhYmxlSW5kZXhdOworICAgIH0KIH0KIAogZnVuY3Rpb24g
Y3JlYXRlQ2hlYXBIZWFwU25hcHNob3QoKSB7CkBAIC0xODksMjcgKzIwMSwzOSBAQCBIZWFwU25h
cHNob3QgPSBjbGFzcyBIZWFwU25hcHNob3QKIHsKICAgICBjb25zdHJ1Y3Rvcihqc29uKQogICAg
IHsgICAgICAgIAotICAgICAgICBsZXQge3ZlcnNpb24sIG5vZGVzLCBub2RlQ2xhc3NOYW1lcywg
ZWRnZXMsIGVkZ2VUeXBlc30gPSBqc29uOworICAgICAgICBsZXQge3ZlcnNpb24sIG5vZGVzLCBu
b2RlQ2xhc3NOYW1lcywgZWRnZXMsIGVkZ2VUeXBlcywgZWRnZU5hbWVzfSA9IGpzb247CiAKICAg
ICAgICAgdGhpcy5ub2RlTWFwID0gbmV3IE1hcDsKIAotICAgICAgICB0aGlzLm5vZGVzID0gbm9k
ZXMubWFwKChub2RlUGF5bG9hZCkgPT4gewotICAgICAgICAgICAgbGV0IFtpZCwgc2l6ZSwgY2xh
c3NOYW1lSW5kZXgsIGludGVybmFsXSA9IG5vZGVQYXlsb2FkOworICAgICAgICB0aGlzLm5vZGVz
ID0gW107CisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOykgeworICAg
ICAgICAgICAgbGV0IGlkID0gbm9kZXNbaSsrXTsKKyAgICAgICAgICAgIGxldCBzaXplID0gbm9k
ZXNbaSsrXTsKKyAgICAgICAgICAgIGxldCBjbGFzc05hbWVJbmRleCA9IG5vZGVzW2krK107Cisg
ICAgICAgICAgICBsZXQgaW50ZXJuYWwgPSBub2Rlc1tpKytdOworCiAgICAgICAgICAgICBsZXQg
bm9kZSA9IG5ldyBIZWFwU25hcHNob3ROb2RlKGlkLCBub2RlQ2xhc3NOYW1lc1tjbGFzc05hbWVJ
bmRleF0sIHNpemUsIGludGVybmFsKTsKICAgICAgICAgICAgIHRoaXMubm9kZU1hcC5zZXQoaWQs
IG5vZGUpOwotICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgIH0pOworICAgICAgICAg
ICAgdGhpcy5ub2Rlcy5wdXNoKG5vZGUpOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChsZXQg
aSA9IDA7IGkgPCBlZGdlcy5sZW5ndGg7KSB7CisgICAgICAgICAgICBsZXQgZnJvbUlkZW50aWZp
ZXIgPSBlZGdlc1tpKytdOworICAgICAgICAgICAgbGV0IHRvSWRlbnRpZmllciA9IGVkZ2VzW2kr
K107CisgICAgICAgICAgICBsZXQgZWRnZVR5cGVJbmRleCA9IGVkZ2VzW2krK107CisgICAgICAg
ICAgICBsZXQgZGF0YSA9IGVkZ2VzW2krK107CiAKLSAgICAgICAgZWRnZXMubWFwKChlZGdlUGF5
bG9hZCkgPT4gewotICAgICAgICAgICAgbGV0IFtmcm9tSWRlbnRpZmllciwgdG9JZGVudGlmaWVy
LCBlZGdlVHlwZUluZGV4LCBkYXRhXSA9IGVkZ2VQYXlsb2FkOwogICAgICAgICAgICAgbGV0IGZy
b20gPSB0aGlzLm5vZGVNYXAuZ2V0KGZyb21JZGVudGlmaWVyKTsKICAgICAgICAgICAgIGxldCB0
byA9IHRoaXMubm9kZU1hcC5nZXQodG9JZGVudGlmaWVyKTsKICAgICAgICAgICAgIGFzc2VydChm
cm9tLCAiTWlzc2luZyBub2RlIGZvciBgZnJvbWAgcGFydCBvZiBlZGdlIik7CiAgICAgICAgICAg
ICBhc3NlcnQodG8sICJNaXNzaW5nIG5vZGUgZm9yIGB0b2AgcGFydCBvZiBlZGdlIik7CisgICAg
ICAgICAgICBsZXQgdHlwZSA9IGVkZ2VUeXBlc1tlZGdlVHlwZUluZGV4XTsKKyAgICAgICAgICAg
IGlmICh0eXBlID09PSAiUHJvcGVydHkiIHx8IHR5cGUgPT09ICJWYXJpYWJsZSIpCisgICAgICAg
ICAgICAgICAgZGF0YSA9IGVkZ2VOYW1lc1tkYXRhXTsKICAgICAgICAgICAgIGxldCBlZGdlID0g
bmV3IEhlYXBTbmFwc2hvdEVkZ2UoZnJvbSwgdG8sIGVkZ2VUeXBlc1tlZGdlVHlwZUluZGV4XSwg
ZGF0YSk7CiAgICAgICAgICAgICBmcm9tLm91dGdvaW5nRWRnZXMucHVzaChlZGdlKTsKICAgICAg
ICAgICAgIHRvLmluY29taW5nRWRnZXMucHVzaChlZGdlKTsKLSAgICAgICAgfSk7CisgICAgICAg
IH0KIAogICAgICAgICB0aGlzLnJvb3ROb2RlID0gdGhpcy5ub2RlTWFwLmdldCgwKTsKICAgICAg
ICAgYXNzZXJ0KHRoaXMucm9vdE5vZGUsICJNaXNzaW5nIDxyb290PiBub2RlIHdpdGggaWRlbnRp
ZmllciAwIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCBlN2ViYzdkLi41YzVlMmIyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwxNiBAQAogMjAxNi0wMy0xNCAgSm9z
ZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCisgICAgICAgIFJlZHVjZSBnZW5l
cmF0ZWQgSlNPTiBIZWFwU25hcHNob3Qgc2l6ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1NDYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01vZGVscy9IZWFwU25hcHNob3Qu
anM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LmZyb21QYXlsb2FkKToKKyAg
ICAgICAgVXBkYXRlIGZvciB0aGUgc2xpZ2h0bHkgbW9kaWZpZWQgZm9ybWF0LgorCisyMDE2LTAz
LTE0ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CisKICAgICAgICAgV2Vi
IEluc3BlY3RvcjogUkVHUkVTU0lPTihyMTk3OTc0KTogSGVhcEFsbG9jYXRpb25zVGltZWxpbmVW
aWV3IGJyb2tlbiwgZG9lc24ndCBoYW5kbGUgVGltZWxpbmUgU2lkZWJhciBOYXZpZ2F0aW9uIHJl
bW92YWwKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
NTQ1OAogICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjUxNTA4MDM+CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvSGVhcFNuYXBzaG90LmpzIGIv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0hlYXBTbmFwc2hvdC5q
cwppbmRleCBkODBlOGFiLi43MTJlZDA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9Nb2RlbHMvSGVhcFNuYXBzaG90LmpzCisrKyBiL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9IZWFwU25hcHNob3QuanMKQEAgLTc3LDM2
ICs3NywzOSBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90ID0gY2xhc3MgSGVhcFNuYXBzaG90
IGV4dGVuZHMgV2ViSW5zcGVjdG9yLk9iamVjdAogCiAgICAgc3RhdGljIGZyb21QYXlsb2FkKHBh
eWxvYWQpCiAgICAgewotICAgICAgICBsZXQge3ZlcnNpb24sIG5vZGVzLCBub2RlQ2xhc3NOYW1l
cywgZWRnZXMsIGVkZ2VUeXBlc30gPSBwYXlsb2FkOworICAgICAgICBsZXQge3ZlcnNpb24sIG5v
ZGVzLCBub2RlQ2xhc3NOYW1lcywgZWRnZXMsIGVkZ2VUeXBlcywgZWRnZU5hbWVzfSA9IHBheWxv
YWQ7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHZlcnNpb24gPT09IDEsICJPbmx5IGtub3cgaG93
IHRvIGhhbmRsZSBKYXZhU2NyaXB0Q29yZSBIZWFwIFNuYXBzaG90IEZvcm1hdCBWZXJzaW9uIDEi
KTsKICAgICAgICAgY29uc29sZS5hc3NlcnQoZWRnZVR5cGVzLmV2ZXJ5KCh0eXBlKSA9PiB0eXBl
IGluIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdlLkVkZ2VUeXBlKSwgIlVuZXhwZWN0ZWQg
ZWRnZSB0eXBlIiwgZWRnZVR5cGVzKTsKIAogICAgICAgICBsZXQgbm9kZU1hcCA9IG5ldyBNYXA7
CiAKICAgICAgICAgLy8gVHVybiBub2RlcyBpbnRvIHJlYWwgbm9kZXMuCi0gICAgICAgIGZvciAo
bGV0IGkgPSAwLCBsZW5ndGggPSBub2Rlcy5sZW5ndGg7IGkgPCBsZW5ndGg7ICsraSkgewotICAg
ICAgICAgICAgbGV0IG5vZGVQYXlsb2FkID0gbm9kZXNbaV07Ci0gICAgICAgICAgICBsZXQgaWQg
PSBub2RlUGF5bG9hZFswXTsKLSAgICAgICAgICAgIGxldCBzaXplID0gbm9kZVBheWxvYWRbMV07
Ci0gICAgICAgICAgICBsZXQgY2xhc3NOYW1lSW5kZXggPSBub2RlUGF5bG9hZFsyXTsKLSAgICAg
ICAgICAgIGxldCBpbnRlcm5hbCA9IG5vZGVQYXlsb2FkWzNdOworICAgICAgICBsZXQgcHJvY2Vz
c2VkTm9kZXMgPSBbXTsKKyAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbmd0aCA9IG5vZGVzLmxl
bmd0aDsgaSA8IGxlbmd0aDspIHsKKyAgICAgICAgICAgIGxldCBpZCA9IG5vZGVzW2krK107Cisg
ICAgICAgICAgICBsZXQgc2l6ZSA9IG5vZGVzW2krK107CisgICAgICAgICAgICBsZXQgY2xhc3NO
YW1lSW5kZXggPSBub2Rlc1tpKytdOworICAgICAgICAgICAgbGV0IGludGVybmFsID0gbm9kZXNb
aSsrXTsKIAogICAgICAgICAgICAgbGV0IG5vZGUgPSBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdE5vZGUoaWQsIG5vZGVDbGFzc05hbWVzW2NsYXNzTmFtZUluZGV4XSwgc2l6ZSwgISFpbnRl
cm5hbCk7CiAgICAgICAgICAgICBub2RlTWFwLnNldChpZCwgbm9kZSk7Ci0gICAgICAgICAgICBu
b2Rlc1tpXSA9IG5vZGU7CisgICAgICAgICAgICBwcm9jZXNzZWROb2Rlcy5wdXNoKG5vZGUpOwog
ICAgICAgICB9CiAKICAgICAgICAgLy8gVHVybiBlZGdlcyBpbnRvIHJlYWwgZWRnZXMgYW5kIHNl
dCB0aGVtIG9uIHRoZSBub2Rlcy4KLSAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbmd0aCA9IGVk
Z2VzLmxlbmd0aDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBsZXQgZWRnZVBheWxv
YWQgPSBlZGdlc1tpXTsKLSAgICAgICAgICAgIGxldCBmcm9tSWRlbnRpZmllciA9IGVkZ2VQYXls
b2FkWzBdOwotICAgICAgICAgICAgbGV0IHRvSWRlbnRpZmllciA9IGVkZ2VQYXlsb2FkWzFdOwot
ICAgICAgICAgICAgbGV0IGVkZ2VUeXBlSW5kZXggPSBlZGdlUGF5bG9hZFsyXTsKLSAgICAgICAg
ICAgIGxldCBkYXRhID0gZWRnZVBheWxvYWRbM107CisgICAgICAgIGZvciAobGV0IGkgPSAwLCBs
ZW5ndGggPSBlZGdlcy5sZW5ndGg7IGkgPCBsZW5ndGg7KSB7CisgICAgICAgICAgICBsZXQgZnJv
bUlkZW50aWZpZXIgPSBlZGdlc1tpKytdOworICAgICAgICAgICAgbGV0IHRvSWRlbnRpZmllciA9
IGVkZ2VzW2krK107CisgICAgICAgICAgICBsZXQgZWRnZVR5cGVJbmRleCA9IGVkZ2VzW2krK107
CisgICAgICAgICAgICBsZXQgZGF0YSA9IGVkZ2VzW2krK107CiAKICAgICAgICAgICAgIGxldCBm
cm9tID0gbm9kZU1hcC5nZXQoZnJvbUlkZW50aWZpZXIpOwogICAgICAgICAgICAgbGV0IHRvID0g
bm9kZU1hcC5nZXQodG9JZGVudGlmaWVyKTsKLSAgICAgICAgICAgIGxldCBlZGdlID0gbmV3IFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdlKGZyb20sIHRvLCBlZGdlVHlwZXNbZWRnZVR5cGVJ
bmRleF0sIGRhdGEpOworICAgICAgICAgICAgbGV0IHR5cGUgPSBlZGdlVHlwZXNbZWRnZVR5cGVJ
bmRleF07CisgICAgICAgICAgICBpZiAodHlwZSA9PT0gV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dEVkZ2UuRWRnZVR5cGUuUHJvcGVydHkgfHwgdHlwZSA9PT0gV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdEVkZ2UuRWRnZVR5cGUuVmFyaWFibGUpCisgICAgICAgICAgICAgICAgZGF0YSA9IGVkZ2VO
YW1lc1tkYXRhXTsKKworICAgICAgICAgICAgbGV0IGVkZ2UgPSBuZXcgV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdEVkZ2UoZnJvbSwgdG8sIHR5cGUsIGRhdGEpOwogICAgICAgICAgICAgZnJvbS5v
dXRnb2luZ0VkZ2VzLnB1c2goZWRnZSk7CiAgICAgICAgICAgICB0by5pbmNvbWluZ0VkZ2VzLnB1
c2goZWRnZSk7CiAgICAgICAgIH0KQEAgLTEyMiw3ICsxMjUsNyBAQCBXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90ID0gY2xhc3MgSGVhcFNuYXBzaG90IGV4dGVuZHMgV2ViSW5zcGVjdG9yLk9iamVj
dAogICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuZ3RoID0gcm9vdE5vZGVFZGdlcy5sZW5ndGg7
IGkgPCBsZW5ndGg7ICsraSkKICAgICAgICAgICAgIHJvb3ROb2RlRWRnZXNbaV0udG8uZ2NSb290
ID0gdHJ1ZTsKIAotICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3Qo
cm9vdE5vZGUsIG5vZGVzLCBub2RlTWFwKTsKKyAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0
b3IuSGVhcFNuYXBzaG90KHJvb3ROb2RlLCBwcm9jZXNzZWROb2Rlcywgbm9kZU1hcCk7CiAgICAg
fQogCiAgICAgLy8gUHVibGljCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>