<?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>170485</bug_id>
          
          <creation_ts>2017-04-04 16:35:40 -0700</creation_ts>
          <short_desc>B3::fixSSA() needs a tune-up</short_desc>
          <delta_ts>2017-04-04 17:25:55 -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="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>benjamin</cc>
    
    <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dbates</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1294264</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-04-04 16:35:40 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1294273</commentid>
    <comment_count>1</comment_count>
      <attachid>306230</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-04-04 16:40:51 -0700</bug_when>
    <thetext>Created attachment 306230
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1294276</commentid>
    <comment_count>2</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-04-04 16:42:50 -0700</bug_when>
    <thetext>Attachment 306230 did not pass style-queue:


ERROR: Source/WTF/wtf/IndexSparseSet.h:204:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 1 in 10 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>1294294</commentid>
    <comment_count>3</comment_count>
      <attachid>306230</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-04-04 17:14:26 -0700</bug_when>
    <thetext>Comment on attachment 306230
the patch

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:10
&gt; +        changes to make this phase run faster. This is a ~7% wasm -O1 compile time progression.

awesome

&gt; Source/WTF/wtf/IndexSparseSet.h:47
&gt; +    typedef T EntryType;

style nit: can be &quot;using&quot;.

&gt; Source/WTF/wtf/IndexSparseSet.h:57
&gt; +    static T create(T entry)
&gt; +    {
&gt; +        return entry;
&gt; +    }
&gt; +    
&gt; +    static T key(T entry)
&gt; +    {
&gt; +        return entry;
&gt; +    }

maybe these should take &quot;const T&amp; entry&quot;?

&gt; Source/WTF/wtf/IndexSparseSet.h:62
&gt; +    typedef KeyValuePair&lt;KeyType, ValueType&gt; EntryType;

ditto on &quot;using&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1294295</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-04-04 17:22:36 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #3)
&gt; Comment on attachment 306230 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=306230&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:10
&gt; &gt; +        changes to make this phase run faster. This is a ~7% wasm -O1 compile time progression.
&gt; 
&gt; awesome
&gt; 
&gt; &gt; Source/WTF/wtf/IndexSparseSet.h:47
&gt; &gt; +    typedef T EntryType;
&gt; 
&gt; style nit: can be &quot;using&quot;.
&gt; 
&gt; &gt; Source/WTF/wtf/IndexSparseSet.h:57
&gt; &gt; +    static T create(T entry)
&gt; &gt; +    {
&gt; &gt; +        return entry;
&gt; &gt; +    }
&gt; &gt; +    
&gt; &gt; +    static T key(T entry)
&gt; &gt; +    {
&gt; &gt; +        return entry;
&gt; &gt; +    }
&gt; 
&gt; maybe these should take &quot;const T&amp; entry&quot;?

I&apos;ll clean this up.

&gt; 
&gt; &gt; Source/WTF/wtf/IndexSparseSet.h:62
&gt; &gt; +    typedef KeyValuePair&lt;KeyType, ValueType&gt; EntryType;
&gt; 
&gt; ditto on &quot;using&quot;.

I still like typedef in those cases where it&apos;s legal.  Do we have to switch to using?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1294299</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-04-04 17:25:55 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/214917/webkit</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306230</attachid>
            <date>2017-04-04 16:40:51 -0700</date>
            <delta_ts>2017-04-04 17:14:26 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>33220</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE0OTEyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ3IEBA
CisyMDE3LTA0LTA0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjM6OmZpeFNTQSgpIG5lZWRzIGEgdHVuZS11cAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNDg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisgICAgICAgIAorICAgICAgICBBZnRlciB0aGUgdmFyaW91cyBvcHRpbWl6YXRp
b25zIHRvIGxpdmVuZXNzLCByZWdpc3RlciBhbGxvY2F0aW9uLCBhbmQgb3RoZXIgcGhhc2VzLCB0
aGUKKyAgICAgICAgZml4U1NBKCkgcGhhc2Ugbm93IGxvb2tzIGxpa2Ugb25lIG9mIHRoZSB0b3Ag
b2ZmZW5kZXJzLiBUaGlzIGluY2x1ZGVzIGEgYnVuY2ggb2YKKyAgICAgICAgY2hhbmdlcyB0byBt
YWtlIHRoaXMgcGhhc2UgcnVuIGZhc3Rlci4gVGhpcyBpcyBhIH43JSB3YXNtIC1PMSBjb21waWxl
IHRpbWUgcHJvZ3Jlc3Npb24uCisgICAgICAgIAorICAgICAgICBIZXJlJ3Mgd2hhdCBJIGRpZDoK
KyAgICAgICAgCisgICAgICAgIC0gV2Ugbm93IHVzZSBJbmRleFNwYXJzZVNldCBpbnN0ZWFkIG9m
IEluZGV4TWFwIGZvciB0cmFja2luZyB2YXJpYWJsZSB2YWx1ZXMuIFRoaXMKKyAgICAgICAgICBt
YWtlcyBpdCBjaGVhcGVyIHRvIGNoZXcgdGhyb3VnaCBzbWFsbCBibG9ja3Mgd2hpbGUgdGhlcmUg
aXMgYSBub24tdHJpdmlhbCBudW1iZXIgb2YKKyAgICAgICAgICB0b3RhbCB2YXJpYWJsZXMuCisg
ICAgICAgIAorICAgICAgICAtIFdlIG5vdyBkbyBhICJsb2NhbCBTU0EgY29udmVyc2lvbiIgcGFz
cyBiZWZvcmUgYW55dGhpbmcgZWxzZS4gVGhpcyBlbGltaW5hdGVzCisgICAgICAgICAgb2J2aW91
cyBHZXQncy4gSWYgd2Ugd2VyZSB1c2luZyB0ZW1wb3JhcnkgVmFyaWFibGVzLCBpdCB3b3VsZCBl
bGltaW5hdGUgbWFueSBvZgorICAgICAgICAgIHRob3NlLiBUaGF0J3MgdXNlZnVsIGZvciB3aGVu
IHdlIHVzZSBkZW1vdGVWYWx1ZXMoKSBhbmQgZHVwbGNpYXRlVGFpbHMoKS4gRm9yIHdhc20KKyAg
ICAgICAgICAtTzEsIHdlIG1haW5seSBjYXJlIGFib3V0IHRoZSBmYWN0IHRoYXQgaXQgbWFrZXMg
YSBidW5jaCBvZiBTZXQncyBkZWFkLgorICAgICAgICAKKyAgICAgICAgLSBXZSBub3cgZG8gYSBT
ZXQgRENFIHBhc3MgYWZ0ZXIgdGhlIGxvY2FsIFNTQSBidXQgYmVmb3JlIFNTQSBjb252ZXJzaW9u
LiBUaGlzIGVuc3VyZXMKKyAgICAgICAgICB0aGF0IGFueSBibG9jay1sb2NhbCBsaXZlIGludGVy
dmFscyBvZiBWYXJpYWJsZXMgZGlzYXBwZWFyIGFuZCBkb24ndCBuZWVkIGZ1cnRoZXIKKyAgICAg
ICAgICBjb25zaWRlcmF0aW9uLgorICAgICAgICAKKyAgICAgICAgLSBXZSBub3cgY2FjaGUgdGhl
IHJlYWNoaW5nIGRlZnMgY2FsY3VsYXRpb24uCisgICAgICAgIAorICAgICAgICAtIFdlIG5vdyBw
ZXJmb3JtIHRoZSByZWFjaGluZyBkZWZzIGNhbGN1bGF0aW9uIGxhemlseS4KKworICAgICAgICAq
IGIzL0IzRml4U1NBLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OmRlbW90ZVZhbHVlcyk6CisgICAg
ICAgIChKU0M6OkIzOjpmaXhTU0EpOgorICAgICAgICAqIGIzL0IzU1NBQ2FsY3VsYXRvci5jcHA6
CisgICAgICAgIChKU0M6OkIzOjpTU0FDYWxjdWxhdG9yOjpyZWFjaGluZ0RlZkF0VGFpbCk6Cisg
ICAgICAgICogYjMvQjNWYXJpYWJsZUxpdmVuZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlZh
cmlhYmxlTGl2ZW5lc3M6OlZhcmlhYmxlTGl2ZW5lc3MpOgorICAgICAgICAqIGIzL2Fpci9BaXJM
aXZlbmVzcy5oOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMaXZlbmVzczo6TGl2ZW5lc3MpOgor
ICAgICAgICAqIGRmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkxpdmVuZXNzQW5hbHlzaXNQaGFzZTo6TGl2ZW5lc3NBbmFseXNpc1BoYXNlKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpMaXZlbmVzc0FuYWx5c2lzUGhhc2U6OnJ1bik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6TGl2ZW5lc3NBbmFseXNpc1BoYXNlOjpwcm9jZXNz
QmxvY2spOiBEZWxldGVkLgorCiAyMDE3LTA0LTA0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBs
ZS5jb20+CiAKICAgICAgICAgQjM6Okxvd2VyVG9BaXIgaW5jb3JyZWN0bHkgc2VsZWN0cyBCaXRY
b3IoQXRvbWljU3Ryb25nQ0FTKC4uLiksICQxKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzRml4U1NBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNGaXhTU0EuY3BwCShyZXZpc2lvbiAyMTQ5MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNGaXhTU0EuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMDMgKzQyLDgzIEBACiAjaW5j
bHVkZSAiQjNWYXJpYWJsZVZhbHVlLmgiCiAjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgog
I2luY2x1ZGUgPHd0Zi9JbmRleFNldC5oPgorI2luY2x1ZGUgPHd0Zi9JbmRleFNwYXJzZVNldC5o
PgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAogbmFtZXNwYWNlIHsKKwogY29u
c3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7Ci19IC8vIGFub255bW91cyBuYW1lc3BhY2UKIAotdm9p
ZCBkZW1vdGVWYWx1ZXMoUHJvY2VkdXJlJiBwcm9jLCBjb25zdCBJbmRleFNldDxWYWx1ZSo+JiB2
YWx1ZXMpCit2b2lkIGtpbGxEZWFkVmFyaWFibGVzKFByb2NlZHVyZSYgcHJvYykKIHsKLSAgICBI
YXNoTWFwPFZhbHVlKiwgVmFyaWFibGUqPiBtYXA7Ci0gICAgSGFzaE1hcDxWYWx1ZSosIFZhcmlh
YmxlKj4gcGhpTWFwOwotCi0gICAgLy8gQ3JlYXRlIHN0YWNrIHNsb3RzLgotICAgIGZvciAoVmFs
dWUqIHZhbHVlIDogdmFsdWVzLnZhbHVlcyhwcm9jLnZhbHVlcygpKSkgewotICAgICAgICBtYXAu
YWRkKHZhbHVlLCBwcm9jLmFkZFZhcmlhYmxlKHZhbHVlLT50eXBlKCkpKTsKKyAgICBJbmRleFNl
dDxWYXJpYWJsZSo+IGxpdmVWYXJpYWJsZXM7CisgICAgZm9yIChWYWx1ZSogdmFsdWUgOiBwcm9j
LnZhbHVlcygpKSB7CisgICAgICAgIGlmICh2YWx1ZS0+b3Bjb2RlKCkgPT0gR2V0KQorICAgICAg
ICAgICAgbGl2ZVZhcmlhYmxlcy5hZGQodmFsdWUtPmFzPFZhcmlhYmxlVmFsdWU+KCktPnZhcmlh
YmxlKCkpOworICAgIH0KIAotICAgICAgICBpZiAodmFsdWUtPm9wY29kZSgpID09IFBoaSkKLSAg
ICAgICAgICAgIHBoaU1hcC5hZGQodmFsdWUsIHByb2MuYWRkVmFyaWFibGUodmFsdWUtPnR5cGUo
KSkpOworICAgIGZvciAoVmFsdWUqIHZhbHVlIDogcHJvYy52YWx1ZXMoKSkgeworICAgICAgICBp
ZiAodmFsdWUtPm9wY29kZSgpID09IFNldCAmJiAhbGl2ZVZhcmlhYmxlcy5jb250YWlucyh2YWx1
ZS0+YXM8VmFyaWFibGVWYWx1ZT4oKS0+dmFyaWFibGUoKSkpCisgICAgICAgICAgICB2YWx1ZS0+
cmVwbGFjZVdpdGhOb3AoKTsKICAgICB9CiAKLSAgICBpZiAodmVyYm9zZSkgewotICAgICAgICBk
YXRhTG9nKCJEZW1vdGluZyB2YWx1ZXMgYXMgZm9sbG93czpcbiIpOwotICAgICAgICBkYXRhTG9n
KCIgICBtYXAgPSAiKTsKLSAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hOwotICAgICAgICBmb3Ig
KGF1dG8mIGVudHJ5IDogbWFwKQotICAgICAgICAgICAgZGF0YUxvZyhjb21tYSwgKmVudHJ5Lmtl
eSwgIj0+IiwgKmVudHJ5LnZhbHVlKTsKLSAgICAgICAgZGF0YUxvZygiXG4iKTsKLSAgICAgICAg
ZGF0YUxvZygiICAgcGhpTWFwID0gIik7Ci0gICAgICAgIGNvbW1hID0gQ29tbWFQcmludGVyKCk7
Ci0gICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBwaGlNYXApCi0gICAgICAgICAgICBkYXRhTG9n
KGNvbW1hLCAqZW50cnkua2V5LCAiPT4iLCAqZW50cnkudmFsdWUpOwotICAgICAgICBkYXRhTG9n
KCJcbiIpOworICAgIGZvciAoVmFyaWFibGUqIHZhcmlhYmxlIDogcHJvYy52YXJpYWJsZXMoKSkg
eworICAgICAgICBpZiAoIWxpdmVWYXJpYWJsZXMuY29udGFpbnModmFyaWFibGUpKQorICAgICAg
ICAgICAgcHJvYy5kZWxldGVWYXJpYWJsZSh2YXJpYWJsZSk7CiAgICAgfQorfQorCit2b2lkIGZp
eFNTQUxvY2FsbHkoUHJvY2VkdXJlJiBwcm9jKQoreworICAgIEluZGV4U3BhcnNlU2V0PEtleVZh
bHVlUGFpcjx1bnNpZ25lZCwgVmFsdWUqPj4gbWFwcGluZyhwcm9jLnZhcmlhYmxlcygpLnNpemUo
KSk7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IHByb2MuYmxvY2tzSW5QcmVPcmRlcigp
KSB7CisgICAgICAgIG1hcHBpbmcuY2xlYXIoKTsKIAotICAgIC8vIENoYW5nZSBhY2Nlc3NlcyB0
byB0aGUgdmFsdWVzIHRvIGFjY2Vzc2VzIHRvIHRoZSBzdGFjayBzbG90cy4KLSAgICBJbnNlcnRp
b25TZXQgaW5zZXJ0aW9uU2V0KHByb2MpOwotICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBw
cm9jKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgdmFsdWVJbmRleCA9IDA7IHZhbHVlSW5kZXgg
PCBibG9jay0+c2l6ZSgpOyArK3ZhbHVlSW5kZXgpIHsKICAgICAgICAgICAgIFZhbHVlKiB2YWx1
ZSA9IGJsb2NrLT5hdCh2YWx1ZUluZGV4KTsKKyAgICAgICAgICAgIHZhbHVlLT5wZXJmb3JtU3Vi
c3RpdHV0aW9uKCk7CiAKLSAgICAgICAgICAgIGlmICh2YWx1ZS0+b3Bjb2RlKCkgPT0gUGhpKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKFZhcmlhYmxlKiB2YXJpYWJsZSA9IHBoaU1hcC5nZXQodmFs
dWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5KAot
ICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydDxWYXJpYWJsZVZhbHVl
PigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUluZGV4LCBHZXQsIHZhbHVlLT5v
cmlnaW4oKSwgdmFyaWFibGUpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIGZvciAoVmFsdWUqJiBjaGlsZCA6IHZhbHVlLT5jaGlsZHJl
bigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChWYXJpYWJsZSogdmFyaWFibGUgPSBtYXAu
Z2V0KGNoaWxkKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQgPSBpbnNlcnRpb25T
ZXQuaW5zZXJ0PFZhcmlhYmxlVmFsdWU+KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
bHVlSW5kZXgsIEdldCwgdmFsdWUtPm9yaWdpbigpLCB2YXJpYWJsZSk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLT5v
cGNvZGUoKSkgeworICAgICAgICAgICAgY2FzZSBHZXQ6IHsKKyAgICAgICAgICAgICAgICBWYXJp
YWJsZVZhbHVlKiB2YXJpYWJsZVZhbHVlID0gdmFsdWUtPmFzPFZhcmlhYmxlVmFsdWU+KCk7Cisg
ICAgICAgICAgICAgICAgVmFyaWFibGUqIHZhcmlhYmxlID0gdmFyaWFibGVWYWx1ZS0+dmFyaWFi
bGUoKTsKIAotICAgICAgICAgICAgICAgIGlmIChVcHNpbG9uVmFsdWUqIHVwc2lsb24gPSB2YWx1
ZS0+YXM8VXBzaWxvblZhbHVlPigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChWYXJpYWJs
ZSogdmFyaWFibGUgPSBwaGlNYXAuZ2V0KHVwc2lsb24tPnBoaSgpKSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydDxWYXJpYWJsZVZhbHVlPigKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YWx1ZUluZGV4LCBTZXQsIHVwc2lsb24tPm9yaWdpbigpLCB2
YXJpYWJsZSwgdXBzaWxvbi0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgdmFs
dWUtPnJlcGxhY2VXaXRoTm9wKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgaWYgKEtleVZhbHVlUGFpcjx1bnNpZ25lZCwgVmFsdWUq
PiogcmVwbGFjZW1lbnQgPSBtYXBwaW5nLmdldCh2YXJpYWJsZS0+aW5kZXgoKSkpCisgICAgICAg
ICAgICAgICAgICAgIHZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5KHJlcGxhY2VtZW50LT52YWx1
ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICBjYXNlIFNldDogeworICAgICAgICAgICAgICAgIFZhcmlhYmxlVmFs
dWUqIHZhcmlhYmxlVmFsdWUgPSB2YWx1ZS0+YXM8VmFyaWFibGVWYWx1ZT4oKTsKKyAgICAgICAg
ICAgICAgICBWYXJpYWJsZSogdmFyaWFibGUgPSB2YXJpYWJsZVZhbHVlLT52YXJpYWJsZSgpOwog
Ci0gICAgICAgICAgICBpZiAoVmFyaWFibGUqIHZhcmlhYmxlID0gbWFwLmdldCh2YWx1ZSkpIHsK
LSAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0PFZhcmlhYmxlVmFsdWU+KAotICAg
ICAgICAgICAgICAgICAgICB2YWx1ZUluZGV4ICsgMSwgU2V0LCB2YWx1ZS0+b3JpZ2luKCksIHZh
cmlhYmxlLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgbWFwcGluZy5zZXQodmFyaWFibGUtPmlu
ZGV4KCksIHZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxv
Y2spOwogICAgIH0KIH0KIAotYm9vbCBmaXhTU0EoUHJvY2VkdXJlJiBwcm9jKQordm9pZCBmaXhT
U0FHbG9iYWxseShQcm9jZWR1cmUmIHByb2MpCiB7Ci0gICAgUGhhc2VTY29wZSBwaGFzZVNjb3Bl
KHByb2MsICJmaXhTU0EiKTsKLQotICAgIC8vIEp1c3QgZm9yIHNhbml0eSwgcmVtb3ZlIGFueSB1
bnVzZWQgdmFyaWFibGVzIGZpcnN0LiBJdCdzIHVubGlrZWx5IHRoYXQgdGhpcyBjb2RlIGhhcyBh
bnkKLSAgICAvLyBidWdzIGhhdmluZyB0byBkbyB3aXRoIGRlYWQgdmFyaWFibGVzLCBidXQgaXQg
d291bGQgYmUgc2lsbHkgdG8gaGF2ZSB0byBmaXggc3VjaCBhIGJ1ZyBpZgotICAgIC8vIGl0IGRp
ZCBhcmlzZS4KLSAgICBJbmRleFNldDxWYXJpYWJsZSo+IGxpdmVWYXJpYWJsZXM7Ci0gICAgZm9y
IChWYWx1ZSogdmFsdWUgOiBwcm9jLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmIChWYXJpYWJsZVZh
bHVlKiB2YXJpYWJsZVZhbHVlID0gdmFsdWUtPmFzPFZhcmlhYmxlVmFsdWU+KCkpCi0gICAgICAg
ICAgICBsaXZlVmFyaWFibGVzLmFkZCh2YXJpYWJsZVZhbHVlLT52YXJpYWJsZSgpKTsKLSAgICB9
Ci0KLSAgICBmb3IgKFZhcmlhYmxlKiB2YXJpYWJsZSA6IHByb2MudmFyaWFibGVzKCkpIHsKLSAg
ICAgICAgaWYgKCFsaXZlVmFyaWFibGVzLmNvbnRhaW5zKHZhcmlhYmxlKSkKLSAgICAgICAgICAg
IHByb2MuZGVsZXRlVmFyaWFibGUodmFyaWFibGUpOworICAgIFZhcmlhYmxlTGl2ZW5lc3MgbGl2
ZW5lc3MocHJvYyk7CisgICAgCisgICAgLy8gS2lsbCBhbnkgZGVhZCBTZXQncy4gRWFjaCBTZXQg
Y3JlYXRlcyB3b3JrIGZvciB1cywgc28gdGhpcyBpcyBwcm9maXRhYmxlLgorICAgIGZvciAoQmFz
aWNCbG9jayogYmxvY2sgOiBwcm9jKSB7CisgICAgICAgIFZhcmlhYmxlTGl2ZW5lc3M6OkxvY2Fs
Q2FsYyBsb2NhbENhbGMobGl2ZW5lc3MsIGJsb2NrKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCB2
YWx1ZUluZGV4ID0gYmxvY2stPnNpemUoKTsgdmFsdWVJbmRleC0tOykgeworICAgICAgICAgICAg
VmFsdWUqIHZhbHVlID0gYmxvY2stPmF0KHZhbHVlSW5kZXgpOworICAgICAgICAgICAgaWYgKHZh
bHVlLT5vcGNvZGUoKSA9PSBTZXQgJiYgIWxvY2FsQ2FsYy5pc0xpdmUodmFsdWUtPmFzPFZhcmlh
YmxlVmFsdWU+KCktPnZhcmlhYmxlKCkpKQorICAgICAgICAgICAgICAgIHZhbHVlLT5yZXBsYWNl
V2l0aE5vcCgpOworICAgICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUodmFsdWVJbmRleCk7Cisg
ICAgICAgIH0KICAgICB9Ci0KLSAgICBpZiAocHJvYy52YXJpYWJsZXMoKS5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFdlIGtub3cgdGhhdCB3ZSBoYXZlIHZhcmlh
YmxlcyB0byBvcHRpbWl6ZSwgc28gZG8gdGhhdCBub3cuCi0gICAgYnJlYWtDcml0aWNhbEVkZ2Vz
KHByb2MpOwogICAgIAotICAgIFZhcmlhYmxlTGl2ZW5lc3MgbGl2ZW5lc3MocHJvYyk7CiAgICAg
VmFyaWFibGVMaXZlbmVzczo6TGl2ZUF0SGVhZCBsaXZlQXRIZWFkID0gbGl2ZW5lc3MubGl2ZUF0
SGVhZCgpOwogICAgIAogICAgIFNTQUNhbGN1bGF0b3Igc3NhKHByb2MpOwpAQCAtMTY4LDM5ICsx
NDgsNTEgQEAgYm9vbCBmaXhTU0EoUHJvY2VkdXJlJiBwcm9jKQogICAgIH0KIAogICAgIC8vIERl
Y2lkZSB3aGVyZSBQaGlzIGFyZSB0byBiZSBpbnNlcnRlZC4gVGhpcyBjcmVhdGVzIHRoZW0gYnV0
IGRvZXMgbm90IGluc2VydCB0aGVtLgotICAgIHNzYS5jb21wdXRlUGhpcygKLSAgICAgICAgWyZd
IChTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogY2FsY1ZhciwgQmFzaWNCbG9jayogYmxvY2spIC0+
IFZhbHVlKiB7Ci0gICAgICAgICAgICBWYXJpYWJsZSogdmFyaWFibGUgPSBjYWxjVmFyVG9WYXJp
YWJsZVtjYWxjVmFyLT5pbmRleCgpXTsKLSAgICAgICAgICAgIGlmICghbGl2ZUF0SGVhZC5pc0xp
dmVBdEhlYWQoYmxvY2ssIHZhcmlhYmxlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgVmFsdWUqIHBoaSA9IHByb2MuYWRkPFZhbHVl
PihQaGksIHZhcmlhYmxlLT50eXBlKCksIGJsb2NrLT5hdCgwKS0+b3JpZ2luKCkpOwotICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpIHsKLSAgICAgICAgICAgICAgICBkYXRhTG9nKAotICAgICAgICAg
ICAgICAgICAgICAiQWRkaW5nIFBoaSBmb3IgIiwgcG9pbnRlckR1bXAodmFyaWFibGUpLCAiIGF0
ICIsICpibG9jaywgIjogIiwKLSAgICAgICAgICAgICAgICAgICAgZGVlcER1bXAocHJvYywgcGhp
KSwgIlxuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcGhpOwotICAgICAg
ICB9KTsKKyAgICB7CisgICAgICAgIFRpbWluZ1Njb3BlIHRpbWluZ1Njb3BlKCJmaXhTU0E6IGNv
bXB1dGVQaGlzIik7CisgICAgICAgIHNzYS5jb21wdXRlUGhpcygKKyAgICAgICAgICAgIFsmXSAo
U1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIGNhbGNWYXIsIEJhc2ljQmxvY2sqIGJsb2NrKSAtPiBW
YWx1ZSogeworICAgICAgICAgICAgICAgIFZhcmlhYmxlKiB2YXJpYWJsZSA9IGNhbGNWYXJUb1Zh
cmlhYmxlW2NhbGNWYXItPmluZGV4KCldOworICAgICAgICAgICAgICAgIGlmICghbGl2ZUF0SGVh
ZC5pc0xpdmVBdEhlYWQoYmxvY2ssIHZhcmlhYmxlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgVmFsdWUqIHBo
aSA9IHByb2MuYWRkPFZhbHVlPihQaGksIHZhcmlhYmxlLT50eXBlKCksIGJsb2NrLT5hdCgwKS0+
b3JpZ2luKCkpOworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAgICAgICAgICAgICAiQWRkaW5nIFBoaSBmb3Ig
IiwgcG9pbnRlckR1bXAodmFyaWFibGUpLCAiIGF0ICIsICpibG9jaywgIjogIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZXBEdW1wKHByb2MsIHBoaSksICJcbiIpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcGhpOworICAgICAgICAgICAgfSk7CisgICAg
fQogCiAgICAgLy8gTm93IHBlcmZvcm0gdGhlIGNvbnZlcnNpb24uCisgICAgVGltaW5nU2NvcGUg
dGltaW5nU2NvcGUoImZpeFNTQTogY29udmVydCIpOwogICAgIEluc2VydGlvblNldCBpbnNlcnRp
b25TZXQocHJvYyk7Ci0gICAgSW5kZXhNYXA8VmFyaWFibGUqLCBWYWx1ZSo+IG1hcHBpbmcocHJv
Yy52YXJpYWJsZXMoKS5zaXplKCkpOworICAgIEluZGV4U3BhcnNlU2V0PEtleVZhbHVlUGFpcjx1
bnNpZ25lZCwgVmFsdWUqPj4gbWFwcGluZyhwcm9jLnZhcmlhYmxlcygpLnNpemUoKSk7CiAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IHByb2MuYmxvY2tzSW5QcmVPcmRlcigpKSB7CiAgICAg
ICAgIG1hcHBpbmcuY2xlYXIoKTsKLQotICAgICAgICBmb3IgKFZhcmlhYmxlKiB2YXJpYWJsZSA6
IGxpdmVuZXNzLmxpdmVBdEhlYWQoYmxvY2spKSB7CisgICAgICAgIAorICAgICAgICBhdXRvIGVu
c3VyZU1hcHBpbmcgPSBbJl0gKFZhcmlhYmxlKiB2YXJpYWJsZSwgdW5zaWduZWQgdmFsdWVJbmRl
eCwgT3JpZ2luIG9yaWdpbikgLT4gVmFsdWUqIHsKKyAgICAgICAgICAgIEtleVZhbHVlUGFpcjx1
bnNpZ25lZCwgVmFsdWUqPiogZm91bmQgPSBtYXBwaW5nLmdldCh2YXJpYWJsZS0+aW5kZXgoKSk7
CisgICAgICAgICAgICBpZiAoZm91bmQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kLT52
YWx1ZTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUq
IGNhbGNWYXIgPSB2YXJpYWJsZVRvQ2FsY1Zhclt2YXJpYWJsZV07CiAgICAgICAgICAgICBTU0FD
YWxjdWxhdG9yOjpEZWYqIGRlZiA9IHNzYS5yZWFjaGluZ0RlZkF0SGVhZChibG9jaywgY2FsY1Zh
cik7Ci0gICAgICAgICAgICBpZiAoZGVmKQotICAgICAgICAgICAgICAgIG1hcHBpbmdbdmFyaWFi
bGVdID0gZGVmLT52YWx1ZSgpOwotICAgICAgICB9CisgICAgICAgICAgICBpZiAoZGVmKSB7Cisg
ICAgICAgICAgICAgICAgbWFwcGluZy5zZXQodmFyaWFibGUtPmluZGV4KCksIGRlZi0+dmFsdWUo
KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlZi0+dmFsdWUoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIGluc2VydGlvblNldC5pbnNlcnRCb3R0
b20odmFsdWVJbmRleCwgb3JpZ2luLCB2YXJpYWJsZS0+dHlwZSgpKTsKKyAgICAgICAgfTsKIAog
ICAgICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDogc3NhLnBoaXNGb3JCbG9j
ayhibG9jaykpIHsKICAgICAgICAgICAgIFZhcmlhYmxlKiB2YXJpYWJsZSA9IGNhbGNWYXJUb1Zh
cmlhYmxlW3BoaURlZi0+dmFyaWFibGUoKS0+aW5kZXgoKV07CiAKICAgICAgICAgICAgIGluc2Vy
dGlvblNldC5pbnNlcnRWYWx1ZSgwLCBwaGlEZWYtPnZhbHVlKCkpOwotICAgICAgICAgICAgbWFw
cGluZ1t2YXJpYWJsZV0gPSBwaGlEZWYtPnZhbHVlKCk7CisgICAgICAgICAgICBtYXBwaW5nLnNl
dCh2YXJpYWJsZS0+aW5kZXgoKSwgcGhpRGVmLT52YWx1ZSgpKTsKICAgICAgICAgfQogCiAgICAg
ICAgIGZvciAodW5zaWduZWQgdmFsdWVJbmRleCA9IDA7IHZhbHVlSW5kZXggPCBibG9jay0+c2l6
ZSgpOyArK3ZhbHVlSW5kZXgpIHsKQEAgLTIxMiwxMiArMjA0LDcgQEAgYm9vbCBmaXhTU0EoUHJv
Y2VkdXJlJiBwcm9jKQogICAgICAgICAgICAgICAgIFZhcmlhYmxlVmFsdWUqIHZhcmlhYmxlVmFs
dWUgPSB2YWx1ZS0+YXM8VmFyaWFibGVWYWx1ZT4oKTsKICAgICAgICAgICAgICAgICBWYXJpYWJs
ZSogdmFyaWFibGUgPSB2YXJpYWJsZVZhbHVlLT52YXJpYWJsZSgpOwogCi0gICAgICAgICAgICAg
ICAgaWYgKFZhbHVlKiByZXBsYWNlbWVudCA9IG1hcHBpbmdbdmFyaWFibGVdKQotICAgICAgICAg
ICAgICAgICAgICB2YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShyZXBsYWNlbWVudCk7Ci0gICAg
ICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlLT5yZXBsYWNlV2l0
aElkZW50aXR5KAotICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydEJv
dHRvbSh2YWx1ZUluZGV4LCB2YWx1ZSkpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB2YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShlbnN1cmVNYXBwaW5nKHZhcmlhYmxlLCB2
YWx1ZUluZGV4LCB2YWx1ZS0+b3JpZ2luKCkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKQEAgLTIyNSw3ICsyMTIsNyBAQCBib29sIGZp
eFNTQShQcm9jZWR1cmUmIHByb2MpCiAgICAgICAgICAgICAgICAgVmFyaWFibGVWYWx1ZSogdmFy
aWFibGVWYWx1ZSA9IHZhbHVlLT5hczxWYXJpYWJsZVZhbHVlPigpOwogICAgICAgICAgICAgICAg
IFZhcmlhYmxlKiB2YXJpYWJsZSA9IHZhcmlhYmxlVmFsdWUtPnZhcmlhYmxlKCk7CiAKLSAgICAg
ICAgICAgICAgICBtYXBwaW5nW3ZhcmlhYmxlXSA9IHZhbHVlLT5jaGlsZCgwKTsKKyAgICAgICAg
ICAgICAgICBtYXBwaW5nLnNldCh2YXJpYWJsZS0+aW5kZXgoKSwgdmFsdWUtPmNoaWxkKDApKTsK
ICAgICAgICAgICAgICAgICB2YWx1ZS0+cmVwbGFjZVdpdGhOb3AoKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTI0MywxNiArMjMwLDEzIEBAIGJvb2wgZml4U1NB
KFByb2NlZHVyZSYgcHJvYykKICAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJs
ZSogY2FsY1ZhciA9IHBoaURlZi0+dmFyaWFibGUoKTsKICAgICAgICAgICAgICAgICBWYXJpYWJs
ZSogdmFyaWFibGUgPSBjYWxjVmFyVG9WYXJpYWJsZVtjYWxjVmFyLT5pbmRleCgpXTsKIAotICAg
ICAgICAgICAgICAgIFZhbHVlKiBtYXBwZWRWYWx1ZSA9IG1hcHBpbmdbdmFyaWFibGVdOworICAg
ICAgICAgICAgICAgIFZhbHVlKiBtYXBwZWRWYWx1ZSA9IGVuc3VyZU1hcHBpbmcodmFyaWFibGUs
IHVwc2lsb25JbnNlcnRpb25Qb2ludCwgdXBzaWxvbk9yaWdpbik7CiAgICAgICAgICAgICAgICAg
aWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygKICAgICAgICAgICAg
ICAgICAgICAgICAgICJNYXBwZWQgdmFsdWUgZm9yICIsICp2YXJpYWJsZSwgIiB3aXRoIHN1Y2Nl
c3NvciBQaGkgIiwgKnBoaSwKICAgICAgICAgICAgICAgICAgICAgICAgICIgYXQgZW5kIG9mICIs
ICpibG9jaywgIjogIiwgcG9pbnRlckR1bXAobWFwcGVkVmFsdWUpLCAiXG4iKTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKCFtYXBwZWRW
YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgbWFwcGVkVmFsdWUgPSBpbnNlcnRpb25TZXQuaW5z
ZXJ0Qm90dG9tKHVwc2lsb25JbnNlcnRpb25Qb2ludCwgcGhpKTsKLSAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0PFVwc2lsb25WYWx1ZT4oCiAgICAg
ICAgICAgICAgICAgICAgIHVwc2lsb25JbnNlcnRpb25Qb2ludCwgdXBzaWxvbk9yaWdpbiwgbWFw
cGVkVmFsdWUsIHBoaSk7CiAgICAgICAgICAgICB9CkBAIC0yNjUsNyArMjQ5LDk2IEBAIGJvb2wg
Zml4U1NBKFByb2NlZHVyZSYgcHJvYykKICAgICAgICAgZGF0YUxvZygiQjMgYWZ0ZXIgU1NBIGNv
bnZlcnNpb246XG4iKTsKICAgICAgICAgZGF0YUxvZyhwcm9jKTsKICAgICB9Cit9CisKK30gLy8g
YW5vbnltb3VzIG5hbWVzcGFjZQogCit2b2lkIGRlbW90ZVZhbHVlcyhQcm9jZWR1cmUmIHByb2Ms
IGNvbnN0IEluZGV4U2V0PFZhbHVlKj4mIHZhbHVlcykKK3sKKyAgICBIYXNoTWFwPFZhbHVlKiwg
VmFyaWFibGUqPiBtYXA7CisgICAgSGFzaE1hcDxWYWx1ZSosIFZhcmlhYmxlKj4gcGhpTWFwOwor
CisgICAgLy8gQ3JlYXRlIHN0YWNrIHNsb3RzLgorICAgIGZvciAoVmFsdWUqIHZhbHVlIDogdmFs
dWVzLnZhbHVlcyhwcm9jLnZhbHVlcygpKSkgeworICAgICAgICBtYXAuYWRkKHZhbHVlLCBwcm9j
LmFkZFZhcmlhYmxlKHZhbHVlLT50eXBlKCkpKTsKKworICAgICAgICBpZiAodmFsdWUtPm9wY29k
ZSgpID09IFBoaSkKKyAgICAgICAgICAgIHBoaU1hcC5hZGQodmFsdWUsIHByb2MuYWRkVmFyaWFi
bGUodmFsdWUtPnR5cGUoKSkpOworICAgIH0KKworICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAg
IGRhdGFMb2coIkRlbW90aW5nIHZhbHVlcyBhcyBmb2xsb3dzOlxuIik7CisgICAgICAgIGRhdGFM
b2coIiAgIG1hcCA9ICIpOworICAgICAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgICAgIGZv
ciAoYXV0byYgZW50cnkgOiBtYXApCisgICAgICAgICAgICBkYXRhTG9nKGNvbW1hLCAqZW50cnku
a2V5LCAiPT4iLCAqZW50cnkudmFsdWUpOworICAgICAgICBkYXRhTG9nKCJcbiIpOworICAgICAg
ICBkYXRhTG9nKCIgICBwaGlNYXAgPSAiKTsKKyAgICAgICAgY29tbWEgPSBDb21tYVByaW50ZXIo
KTsKKyAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IHBoaU1hcCkKKyAgICAgICAgICAgIGRhdGFM
b2coY29tbWEsICplbnRyeS5rZXksICI9PiIsICplbnRyeS52YWx1ZSk7CisgICAgICAgIGRhdGFM
b2coIlxuIik7CisgICAgfQorCisgICAgLy8gQ2hhbmdlIGFjY2Vzc2VzIHRvIHRoZSB2YWx1ZXMg
dG8gYWNjZXNzZXMgdG8gdGhlIHN0YWNrIHNsb3RzLgorICAgIEluc2VydGlvblNldCBpbnNlcnRp
b25TZXQocHJvYyk7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IHByb2MpIHsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCB2YWx1ZUluZGV4ID0gMDsgdmFsdWVJbmRleCA8IGJsb2NrLT5zaXpl
KCk7ICsrdmFsdWVJbmRleCkgeworICAgICAgICAgICAgVmFsdWUqIHZhbHVlID0gYmxvY2stPmF0
KHZhbHVlSW5kZXgpOworCisgICAgICAgICAgICBpZiAodmFsdWUtPm9wY29kZSgpID09IFBoaSkg
eworICAgICAgICAgICAgICAgIGlmIChWYXJpYWJsZSogdmFyaWFibGUgPSBwaGlNYXAuZ2V0KHZh
bHVlKSkgeworICAgICAgICAgICAgICAgICAgICB2YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eSgK
KyAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQ8VmFyaWFibGVWYWx1
ZT4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVJbmRleCwgR2V0LCB2YWx1ZS0+
b3JpZ2luKCksIHZhcmlhYmxlKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBmb3IgKFZhbHVlKiYgY2hpbGQgOiB2YWx1ZS0+Y2hpbGRy
ZW4oKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoVmFyaWFibGUqIHZhcmlhYmxlID0gbWFw
LmdldChjaGlsZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkID0gaW5zZXJ0aW9u
U2V0Lmluc2VydDxWYXJpYWJsZVZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YWx1ZUluZGV4LCBHZXQsIHZhbHVlLT5vcmlnaW4oKSwgdmFyaWFibGUpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKFVwc2ls
b25WYWx1ZSogdXBzaWxvbiA9IHZhbHVlLT5hczxVcHNpbG9uVmFsdWU+KCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKFZhcmlhYmxlKiB2YXJpYWJsZSA9IHBoaU1hcC5nZXQodXBzaWxvbi0+
cGhpKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0PFZh
cmlhYmxlVmFsdWU+KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlSW5kZXgsIFNl
dCwgdXBzaWxvbi0+b3JpZ2luKCksIHZhcmlhYmxlLCB1cHNpbG9uLT5jaGlsZCgwKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB2YWx1ZS0+cmVwbGFjZVdpdGhOb3AoKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKFZhcmlhYmxlKiB2YXJpYWJsZSA9IG1hcC5nZXQodmFsdWUpKSB7CisgICAgICAgICAg
ICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydDxWYXJpYWJsZVZhbHVlPigKKyAgICAgICAgICAgICAg
ICAgICAgdmFsdWVJbmRleCArIDEsIFNldCwgdmFsdWUtPm9yaWdpbigpLCB2YXJpYWJsZSwgdmFs
dWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGluc2VydGlvblNldC5leGVj
dXRlKGJsb2NrKTsKKyAgICB9Cit9CisKK2Jvb2wgZml4U1NBKFByb2NlZHVyZSYgcHJvYykKK3sK
KyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUocHJvYywgImZpeFNTQSIpOworCisgICAgLy8gTG90
cyBvZiB2YXJpYWJsZXMgaGF2ZSB0cml2aWFsIGxvY2FsIGxpdmVuZXNzLiBXZSBjYW4gYWxsb2Nh
dGUgdGhvc2Ugd2l0aG91dCBhbnkKKyAgICAvLyB0cm91YmxlLgorICAgIGZpeFNTQUxvY2FsbHko
cHJvYyk7CisKKyAgICAvLyBKdXN0IGZvciBzYW5pdHksIHJlbW92ZSBhbnkgdW51c2VkIHZhcmlh
YmxlcyBmaXJzdC4gSXQncyB1bmxpa2VseSB0aGF0IHRoaXMgY29kZSBoYXMgYW55CisgICAgLy8g
YnVncyBoYXZpbmcgdG8gZG8gd2l0aCBkZWFkIHZhcmlhYmxlcywgYnV0IGl0IHdvdWxkIGJlIHNp
bGx5IHRvIGhhdmUgdG8gZml4IHN1Y2ggYSBidWcgaWYKKyAgICAvLyBpdCBkaWQgYXJpc2UuCisg
ICAga2lsbERlYWRWYXJpYWJsZXMocHJvYyk7CisgICAgCisgICAgaWYgKHByb2MudmFyaWFibGVz
KCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgLy8gV2Uga25v
dyB0aGF0IHdlIGhhdmUgdmFyaWFibGVzIHRvIG9wdGltaXplLCBzbyBkbyB0aGF0IG5vdy4KKyAg
ICBicmVha0NyaXRpY2FsRWRnZXMocHJvYyk7CisKKyAgICBmaXhTU0FHbG9iYWxseShwcm9jKTsK
KyAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU1NBQ2FsY3VsYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzU1NBQ2FsY3VsYXRvci5jcHAJKHJldmlzaW9uIDIxNDkwMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1NTQUNhbGN1bGF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
OCwxMSArOTgsMTQgQEAgU1NBQ2FsY3VsYXRvcjo6RGVmKiBTU0FDYWxjdWxhdG9yOjpub25Mbwog
ICAgIHJldHVybiByZWFjaGluZ0RlZkF0VGFpbChtX2RvbWluYXRvcnMtPmlkb20oYmxvY2spLCB2
YXJpYWJsZSk7CiB9CiAKLVNTQUNhbGN1bGF0b3I6OkRlZiogU1NBQ2FsY3VsYXRvcjo6cmVhY2hp
bmdEZWZBdFRhaWwoQmFzaWNCbG9jayogYmxvY2ssIFZhcmlhYmxlKiB2YXJpYWJsZSkKK1NTQUNh
bGN1bGF0b3I6OkRlZiogU1NBQ2FsY3VsYXRvcjo6cmVhY2hpbmdEZWZBdFRhaWwoQmFzaWNCbG9j
ayogc3RhcnRpbmdCbG9jaywgVmFyaWFibGUqIHZhcmlhYmxlKQogewotICAgIGZvciAoOyBibG9j
azsgYmxvY2sgPSBtX2RvbWluYXRvcnMtPmlkb20oYmxvY2spKSB7Ci0gICAgICAgIGlmIChEZWYq
IGRlZiA9IG1fZGF0YVtibG9ja10ubV9kZWZzLmdldCh2YXJpYWJsZSkpCisgICAgZm9yIChCYXNp
Y0Jsb2NrKiBibG9jayA9IHN0YXJ0aW5nQmxvY2s7IGJsb2NrOyBibG9jayA9IG1fZG9taW5hdG9y
cy0+aWRvbShibG9jaykpIHsKKyAgICAgICAgaWYgKERlZiogZGVmID0gbV9kYXRhW2Jsb2NrXS5t
X2RlZnMuZ2V0KHZhcmlhYmxlKSkgeworICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBvdGhl
ckJsb2NrID0gc3RhcnRpbmdCbG9jazsgb3RoZXJCbG9jayAhPSBibG9jazsgb3RoZXJCbG9jayA9
IG1fZG9taW5hdG9ycy0+aWRvbShvdGhlckJsb2NrKSkKKyAgICAgICAgICAgICAgICBtX2RhdGFb
YmxvY2tdLm1fZGVmcy5hZGQodmFyaWFibGUsIGRlZik7CiAgICAgICAgICAgICByZXR1cm4gZGVm
OworICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBudWxscHRyOwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVmFyaWFibGVMaXZlbmVzcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFyaWFibGVMaXZlbmVzcy5jcHAJKHJldmlzaW9u
IDIxNDkwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhcmlhYmxlTGl2ZW5lc3Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMSArMjgsMTQgQEAKIAogI2lmIEVOQUJMRShCM19K
SVQpCiAKKyNpbmNsdWRlICJCM1RpbWluZ1Njb3BlLmgiCisKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgewogCiBWYXJpYWJsZUxpdmVuZXNzOjpWYXJpYWJsZUxpdmVuZXNzKFByb2NlZHVy
ZSYgcHJvYykKICAgICA6IFdURjo6TGl2ZW5lc3M8VmFyaWFibGVMaXZlbmVzc0FkYXB0ZXI+KHBy
b2MuY2ZnKCksIHByb2MpCiB7CisgICAgVGltaW5nU2NvcGUgdGltaW5nU2NvcGUoIkIzOjpWYXJp
YWJsZUxpdmVuZXNzIik7CiAgICAgY29tcHV0ZSgpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCShyZXZpc2lvbiAyMTQ5MDIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoQjNfSklUKQogCiAjaW5jbHVkZSAiQWlyTGl2ZW5l
c3NBZGFwdGVyLmgiCisjaW5jbHVkZSAiQjNUaW1pbmdTY29wZS5oIgogI2luY2x1ZGUgPHd0Zi9M
aXZlbmVzcy5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFp
ciB7CkBAIC0zOSw2ICs0MCw3IEBAIHB1YmxpYzoKICAgICAgICAgOiBXVEY6OkxpdmVuZXNzPEFk
YXB0ZXI+KGNvZGUuY2ZnKCksIGNvZGUpCiAgICAgewogICAgICAgICBTdXBlclNhbXBsZXJTY29w
ZSBzYW1wbGluZ1Njb3BlKGZhbHNlKTsKKyAgICAgICAgVGltaW5nU2NvcGUgdGltaW5nU2NvcGUo
IkFpcjo6TGl2ZW5lc3MiKTsKICAgICAgICAgV1RGOjpMaXZlbmVzczxBZGFwdGVyPjo6Y29tcHV0
ZSgpOwogICAgIH0KIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVu
ZXNzQW5hbHlzaXNQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAyMTQ5MDIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQxLDEyICs0MSwxNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CiAKK25hbWVzcGFjZSB7CisKIC8vIFVuY29tbWVudCB0aGlzIHRvIGxvZyBoYXNo
dGFibGUgb3BlcmF0aW9ucy4KIC8vIHN0YXRpYyBjb25zdCBjaGFyIHRlbXBsYXRlU3RyaW5nW10g
PSAidW5zaWduZWQsIERlZmF1bHRIYXNoPHVuc2lnbmVkPjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdp
dGhaZXJvS2V5SGFzaFRyYWl0czx1bnNpZ25lZD4iOwogLy8gdHlwZWRlZiBMb2dnaW5nSGFzaFNl
dDx0ZW1wbGF0ZVN0cmluZywgdW5zaWduZWQsIERlZmF1bHRIYXNoPHVuc2lnbmVkPjo6SGFzaCwg
V1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1bnNpZ25lZD4+IExpdmVTZXQ7CiAK
IHR5cGVkZWYgSGFzaFNldDx1bnNpZ25lZCwgRGVmYXVsdEhhc2g8dW5zaWduZWQ+OjpIYXNoLCBX
VEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkPj4gTGl2ZVNldDsKIAor
dHlwZWRlZiBJbmRleFNwYXJzZVNldDx1bnNpZ25lZCwgRGVmYXVsdEluZGV4U3BhcnNlU2V0VHJh
aXRzPHVuc2lnbmVkPiwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IFdvcmtzZXQ7CisKIGNsYXNzIExp
dmVuZXNzQW5hbHlzaXNQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiBwdWJsaWM6CiAgICAgTGl2ZW5l
c3NBbmFseXNpc1BoYXNlKEdyYXBoJiBncmFwaCkKQEAgLTU3LDcgKzYxLDcgQEAgcHVibGljOgog
ICAgICAgICAsIG1fbGl2ZUF0VGFpbChtX2dyYXBoKQogICAgIHsKICAgICAgICAgbV9ncmFwaC5t
X2luZGV4aW5nQ2FjaGUtPnJlY29tcHV0ZSgpOwotICAgICAgICBtX3dvcmtzZXQgPSBzdGQ6Om1h
a2VfdW5pcXVlPEluZGV4U3BhcnNlU2V0PFVuc2FmZVZlY3Rvck92ZXJmbG93Pj4obV9ncmFwaC5t
X2luZGV4aW5nQ2FjaGUtPm51bUluZGljZXMoKSk7CisgICAgICAgIG1fd29ya3NldCA9IHN0ZDo6
bWFrZV91bmlxdWU8V29ya3NldD4obV9ncmFwaC5tX2luZGV4aW5nQ2FjaGUtPm51bUluZGljZXMo
KSk7CiAgICAgfQogCiAgICAgYm9vbCBydW4oKQpAQCAtMTg1LDkgKzE4OSwxMSBAQCBwcml2YXRl
OgogICAgIEJsb2NrTWFwPExpdmVTZXQ+IG1fbGl2ZUF0VGFpbDsKIAogICAgIC8vIFNpbmdsZSBz
cGFyc2Ugc2V0IGFsbG9jYXRlZCBvbmNlIGFuZCB1c2VkIGJ5IGV2ZXJ5IGJhc2ljIGJsb2NrLgot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJbmRleFNwYXJzZVNldDxVbnNhZmVWZWN0b3JPdmVyZmxvdz4+
IG1fd29ya3NldDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V29ya3NldD4gbV93b3Jrc2V0OwogfTsK
IAorfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKIGJvb2wgcGVyZm9ybUxpdmVuZXNzQW5hbHlz
aXMoR3JhcGgmIGdyYXBoKQogewogICAgIGdyYXBoLnBhY2tOb2RlSW5kaWNlcygpOwpJbmRleDog
U291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDIxNDkxMikKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMzggQEAKKzIwMTctMDQtMDQgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxl
LmNvbT4KKworICAgICAgICBCMzo6Zml4U1NBKCkgbmVlZHMgYSB0dW5lLXVwCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA0ODUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgbWFrZXMg
SW5kZXhTcGFyc2VTZXQgY2FwYWJsZSBvZiBiZWluZyB1c2VkIGFzIGEgbWFwIGlmIHlvdSBpbnN0
YW50aWF0ZSBpdCB3aXRoCisgICAgICAgIEtleVZhbHVlUGFpcjx1bnNpZ25lZCwgVmFsdWVUeXBl
Pi4KKworICAgICAgICAqIHd0Zi9IYXNoVHJhaXRzLmg6CisgICAgICAgICogd3RmL0luZGV4U3Bh
cnNlU2V0Lmg6CisgICAgICAgIChXVEY6OkRlZmF1bHRJbmRleFNwYXJzZVNldFRyYWl0czo6Y3Jl
YXRlKToKKyAgICAgICAgKFdURjo6RGVmYXVsdEluZGV4U3BhcnNlU2V0VHJhaXRzOjprZXkpOgor
ICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+OjpJbmRleFNwYXJzZVNldCk6CisgICAgICAg
IChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OmFkZCk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFu
ZGxlcj46OnNldCk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OnJlbW92ZSk6Cisg
ICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OmNsZWFyKToKKyAgICAgICAgKFdURjo6T3Zl
cmZsb3dIYW5kbGVyPjo6c2l6ZSk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46Omlz
RW1wdHkpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+Ojpjb250YWlucyk6CisgICAg
ICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OnNvcnQpOgorICAgICAgICAoV1RGOjpJbmRleFNw
YXJzZVNldDxPdmVyZmxvd0hhbmRsZXI+OjpJbmRleFNwYXJzZVNldCk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6OkluZGV4U3BhcnNlU2V0PE92ZXJmbG93SGFuZGxlcj46OmFkZCk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6OkluZGV4U3BhcnNlU2V0PE92ZXJmbG93SGFuZGxlcj46OnJlbW92ZSk6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkluZGV4U3BhcnNlU2V0PE92ZXJmbG93SGFuZGxlcj46
OmNsZWFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6SW5kZXhTcGFyc2VTZXQ8T3ZlcmZsb3dI
YW5kbGVyPjo6c2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkluZGV4U3BhcnNlU2V0PE92
ZXJmbG93SGFuZGxlcj46OmlzRW1wdHkpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpJbmRleFNw
YXJzZVNldDxPdmVyZmxvd0hhbmRsZXI+Ojpjb250YWlucyk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6OkluZGV4U3BhcnNlU2V0PE92ZXJmbG93SGFuZGxlcj46OnNvcnQpOiBEZWxldGVkLgorICAg
ICAgICAqIHd0Zi9MaXZlbmVzcy5oOgorICAgICAgICAoV1RGOjpMaXZlbmVzczo6TG9jYWxDYWxj
OjpJdGVyYWJsZTo6aXRlcmF0b3I6Oml0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6TGl2ZW5lc3M6
OndvcmtzZXQpOgorCiAyMDE3LTA0LTA0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+
CiAKICAgICAgICAgRG9uJ3QgbmVlZCB0byBBaXI6OnJlcG9ydFVzZWRSZWdpc3RlcnMgZm9yIHdh
c20gYXQgLU8xCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9IYXNoVHJhaXRzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvSGFzaFRyYWl0cy5oCShyZXZpc2lvbiAyMTQ5MDIpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9IYXNoVHJhaXRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3MSw2ICszNzEsNyBA
QCBzdHJ1Y3QgQ3VzdG9tSGFzaFRyYWl0cyA6IHB1YmxpYyBHZW5lcmljCiB9IC8vIG5hbWVzcGFj
ZSBXVEYKIAogdXNpbmcgV1RGOjpIYXNoVHJhaXRzOwordXNpbmcgV1RGOjpLZXlWYWx1ZVBhaXI7
CiB1c2luZyBXVEY6OlBhaXJIYXNoVHJhaXRzOwogdXNpbmcgV1RGOjpOdWxsYWJsZUhhc2hUcmFp
dHM7CiB1c2luZyBXVEY6OlNpbXBsZUNsYXNzSGFzaFRyYWl0czsKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL0luZGV4U3BhcnNlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSW5kZXhT
cGFyc2VTZXQuaAkocmV2aXNpb24gMjE0OTAyKQorKysgU291cmNlL1dURi93dGYvSW5kZXhTcGFy
c2VTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIEluZGV4U3BhcnNl
U2V0X2gKICNkZWZpbmUgSW5kZXhTcGFyc2VTZXRfaAogCisjaW5jbHVkZSA8d3RmL0hhc2hUcmFp
dHMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtNDEs
MTkgKzQyLDU1IEBAIG5hbWVzcGFjZSBXVEYgewogLy8gVGhlIGFzc3VtcHRpb24gaGVyZSBpcyB0
aGF0IHdlIG9ubHkgbmVlZCBhIHNwYXJzZSBzdWJzZXQgb2YgbnVtYmVyIGxpdmUgYXQgYW55CiAv
LyB0aW1lLgogCi10ZW1wbGF0ZTx0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIgPSBDcmFzaE9uT3Zl
cmZsb3c+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IERlZmF1bHRJbmRleFNwYXJzZVNl
dFRyYWl0cyB7CisgICAgdHlwZWRlZiBUIEVudHJ5VHlwZTsKKyAgICAKKyAgICBzdGF0aWMgVCBj
cmVhdGUoVCBlbnRyeSkKKyAgICB7CisgICAgICAgIHJldHVybiBlbnRyeTsKKyAgICB9CisgICAg
CisgICAgc3RhdGljIFQga2V5KFQgZW50cnkpCisgICAgeworICAgICAgICByZXR1cm4gZW50cnk7
CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgVmFsdWVU
eXBlPgorc3RydWN0IERlZmF1bHRJbmRleFNwYXJzZVNldFRyYWl0czxLZXlWYWx1ZVBhaXI8S2V5
VHlwZSwgVmFsdWVUeXBlPj4geworICAgIHR5cGVkZWYgS2V5VmFsdWVQYWlyPEtleVR5cGUsIFZh
bHVlVHlwZT4gRW50cnlUeXBlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgUGFzc2VkS2V5VHlw
ZSwgdHlwZW5hbWUgUGFzc2VkVmFsdWVUeXBlPgorICAgIHN0YXRpYyBFbnRyeVR5cGUgY3JlYXRl
KFBhc3NlZEtleVR5cGUmJiBrZXksIFBhc3NlZFZhbHVlVHlwZSYmIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEVudHJ5VHlwZShzdGQ6OmZvcndhcmQ8UGFzc2VkS2V5VHlwZT4oa2V5KSwg
c3RkOjpmb3J3YXJkPFBhc3NlZFZhbHVlVHlwZT4odmFsdWUpKTsKKyAgICB9CisgICAgCisgICAg
c3RhdGljIEtleVR5cGUga2V5KGNvbnN0IEVudHJ5VHlwZSYgZW50cnkpCisgICAgeworICAgICAg
ICByZXR1cm4gZW50cnkua2V5OworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5
VHlwZSA9IHVuc2lnbmVkLCB0eXBlbmFtZSBFbnRyeVR5cGVUcmFpdHMgPSBEZWZhdWx0SW5kZXhT
cGFyc2VTZXRUcmFpdHM8RW50cnlUeXBlPiwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyID0gQ3Jh
c2hPbk92ZXJmbG93PgogY2xhc3MgSW5kZXhTcGFyc2VTZXQgewotICAgIHR5cGVkZWYgVmVjdG9y
PHVuc2lnbmVkLCAwLCBPdmVyZmxvd0hhbmRsZXI+IFZhbHVlTGlzdDsKKyAgICB0eXBlZGVmIFZl
Y3RvcjxFbnRyeVR5cGUsIDAsIE92ZXJmbG93SGFuZGxlcj4gVmFsdWVMaXN0OwogcHVibGljOgog
ICAgIGV4cGxpY2l0IEluZGV4U3BhcnNlU2V0KHVuc2lnbmVkIHNpemUpOwogCi0gICAgYm9vbCBh
ZGQodW5zaWduZWQpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBi
b29sIGFkZCh1bnNpZ25lZCwgQXJndW1lbnRzJiYuLi4pOworICAgIHRlbXBsYXRlPHR5cGVuYW1l
Li4uIEFyZ3VtZW50cz4KKyAgICBib29sIHNldCh1bnNpZ25lZCwgQXJndW1lbnRzJiYuLi4pOwog
ICAgIGJvb2wgcmVtb3ZlKHVuc2lnbmVkKTsKICAgICB2b2lkIGNsZWFyKCk7CiAKICAgICB1bnNp
Z25lZCBzaXplKCkgY29uc3Q7CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7CiAgICAgYm9vbCBj
b250YWlucyh1bnNpZ25lZCkgY29uc3Q7CisgICAgY29uc3QgRW50cnlUeXBlKiBnZXQodW5zaWdu
ZWQpIGNvbnN0OworICAgIEVudHJ5VHlwZSogZ2V0KHVuc2lnbmVkKTsKIAogICAgIHR5cGVkZWYg
dHlwZW5hbWUgVmFsdWVMaXN0Ojpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKICAgICBj
b25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0OwpAQCAtNjgsMzUgKzEwNSw1MSBAQCBwcml2YXRl
OgogICAgIFZhbHVlTGlzdCBtX3ZhbHVlczsKIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE92ZXJm
bG93SGFuZGxlcj4KLWlubGluZSBJbmRleFNwYXJzZVNldDxPdmVyZmxvd0hhbmRsZXI+OjpJbmRl
eFNwYXJzZVNldCh1bnNpZ25lZCBzaXplKQordGVtcGxhdGU8dHlwZW5hbWUgRW50cnlUeXBlLCB0
eXBlbmFtZSBFbnRyeVR5cGVUcmFpdHMsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2lubGlu
ZSBJbmRleFNwYXJzZVNldDxFbnRyeVR5cGUsIEVudHJ5VHlwZVRyYWl0cywgT3ZlcmZsb3dIYW5k
bGVyPjo6SW5kZXhTcGFyc2VTZXQodW5zaWduZWQgc2l6ZSkKIHsKICAgICBtX21hcC5yZXNpemUo
c2l6ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KLWlubGluZSBi
b29sIEluZGV4U3BhcnNlU2V0PE92ZXJmbG93SGFuZGxlcj46OmFkZCh1bnNpZ25lZCB2YWx1ZSkK
K3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5VHlwZSwgdHlwZW5hbWUgRW50cnlUeXBlVHJhaXRzLCB0
eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+Cit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+
CitpbmxpbmUgYm9vbCBJbmRleFNwYXJzZVNldDxFbnRyeVR5cGUsIEVudHJ5VHlwZVRyYWl0cywg
T3ZlcmZsb3dIYW5kbGVyPjo6YWRkKHVuc2lnbmVkIHZhbHVlLCBBcmd1bWVudHMmJi4uLiBhcmd1
bWVudHMpCiB7CiAgICAgaWYgKGNvbnRhaW5zKHZhbHVlKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgdW5zaWduZWQgbmV3UG9zaXRpb24gPSBtX3ZhbHVlcy5zaXplKCk7Ci0gICAgbV92
YWx1ZXMuYXBwZW5kKHZhbHVlKTsKKyAgICBtX3ZhbHVlcy5hcHBlbmQoRW50cnlUeXBlVHJhaXRz
OjpjcmVhdGUodmFsdWUsIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pKTsK
KyAgICBtX21hcFt2YWx1ZV0gPSBuZXdQb3NpdGlvbjsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgRW50cnlUeXBlLCB0eXBlbmFtZSBFbnRyeVR5cGVUcmFpdHMsIHR5
cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK3RlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4K
K2lubGluZSBib29sIEluZGV4U3BhcnNlU2V0PEVudHJ5VHlwZSwgRW50cnlUeXBlVHJhaXRzLCBP
dmVyZmxvd0hhbmRsZXI+OjpzZXQodW5zaWduZWQgdmFsdWUsIEFyZ3VtZW50cyYmLi4uIGFyZ3Vt
ZW50cykKK3sKKyAgICBpZiAoRW50cnlUeXBlKiBlbnRyeSA9IGdldCh2YWx1ZSkpIHsKKyAgICAg
ICAgKmVudHJ5ID0gRW50cnlUeXBlVHJhaXRzOjpjcmVhdGUodmFsdWUsIHN0ZDo6Zm9yd2FyZDxB
cmd1bWVudHM+KGFyZ3VtZW50cykuLi4pOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgdW5zaWduZWQgbmV3UG9zaXRpb24gPSBtX3ZhbHVlcy5zaXplKCk7CisgICAgbV92YWx1
ZXMuYXBwZW5kKEVudHJ5VHlwZVRyYWl0czo6Y3JlYXRlKHZhbHVlLCBzdGQ6OmZvcndhcmQ8QXJn
dW1lbnRzPihhcmd1bWVudHMpLi4uKSk7CiAgICAgbV9tYXBbdmFsdWVdID0gbmV3UG9zaXRpb247
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE92ZXJmbG93SGFuZGxl
cj4KLWlubGluZSBib29sIEluZGV4U3BhcnNlU2V0PE92ZXJmbG93SGFuZGxlcj46OnJlbW92ZSh1
bnNpZ25lZCB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5VHlwZSwgdHlwZW5hbWUgRW50
cnlUeXBlVHJhaXRzLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CitpbmxpbmUgYm9vbCBJbmRl
eFNwYXJzZVNldDxFbnRyeVR5cGUsIEVudHJ5VHlwZVRyYWl0cywgT3ZlcmZsb3dIYW5kbGVyPjo6
cmVtb3ZlKHVuc2lnbmVkIHZhbHVlKQogewogICAgIHVuc2lnbmVkIHBvc2l0aW9uID0gbV9tYXBb
dmFsdWVdOwogICAgIGlmIChwb3NpdGlvbiA+PSBtX3ZhbHVlcy5zaXplKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIGlmIChtX3ZhbHVlc1twb3NpdGlvbl0gPT0gdmFsdWUpIHsKLSAg
ICAgICAgdW5zaWduZWQgbGFzdFZhbHVlID0gbV92YWx1ZXMubGFzdCgpOwotICAgICAgICBtX3Zh
bHVlc1twb3NpdGlvbl0gPSBsYXN0VmFsdWU7Ci0gICAgICAgIG1fbWFwW2xhc3RWYWx1ZV0gPSBw
b3NpdGlvbjsKKyAgICAgICAgRW50cnlUeXBlIGxhc3RWYWx1ZSA9IG1fdmFsdWVzLmxhc3QoKTsK
KyAgICAgICAgbV92YWx1ZXNbcG9zaXRpb25dID0gV1RGTW92ZShsYXN0VmFsdWUpOworICAgICAg
ICBtX21hcFtFbnRyeVR5cGVUcmFpdHM6OmtleShsYXN0VmFsdWUpXSA9IHBvc2l0aW9uOwogICAg
ICAgICBtX3ZhbHVlcy5yZW1vdmVMYXN0KCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
QEAgLTEwNCw1NCArMTU3LDc5IEBAIGlubGluZSBib29sIEluZGV4U3BhcnNlU2V0PE92ZXJmbG93
SGFuZGwKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE92ZXJmbG93
SGFuZGxlcj4KLXZvaWQgSW5kZXhTcGFyc2VTZXQ8T3ZlcmZsb3dIYW5kbGVyPjo6Y2xlYXIoKQor
dGVtcGxhdGU8dHlwZW5hbWUgRW50cnlUeXBlLCB0eXBlbmFtZSBFbnRyeVR5cGVUcmFpdHMsIHR5
cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK3ZvaWQgSW5kZXhTcGFyc2VTZXQ8RW50cnlUeXBlLCBF
bnRyeVR5cGVUcmFpdHMsIE92ZXJmbG93SGFuZGxlcj46OmNsZWFyKCkKIHsKICAgICBtX3ZhbHVl
cy5yZXNpemUoMCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KLXVu
c2lnbmVkIEluZGV4U3BhcnNlU2V0PE92ZXJmbG93SGFuZGxlcj46OnNpemUoKSBjb25zdAordGVt
cGxhdGU8dHlwZW5hbWUgRW50cnlUeXBlLCB0eXBlbmFtZSBFbnRyeVR5cGVUcmFpdHMsIHR5cGVu
YW1lIE92ZXJmbG93SGFuZGxlcj4KK3Vuc2lnbmVkIEluZGV4U3BhcnNlU2V0PEVudHJ5VHlwZSwg
RW50cnlUeXBlVHJhaXRzLCBPdmVyZmxvd0hhbmRsZXI+OjpzaXplKCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gbV92YWx1ZXMuc2l6ZSgpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBPdmVyZmxvd0hh
bmRsZXI+Ci1ib29sIEluZGV4U3BhcnNlU2V0PE92ZXJmbG93SGFuZGxlcj46OmlzRW1wdHkoKSBj
b25zdAordGVtcGxhdGU8dHlwZW5hbWUgRW50cnlUeXBlLCB0eXBlbmFtZSBFbnRyeVR5cGVUcmFp
dHMsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2Jvb2wgSW5kZXhTcGFyc2VTZXQ8RW50cnlU
eXBlLCBFbnRyeVR5cGVUcmFpdHMsIE92ZXJmbG93SGFuZGxlcj46OmlzRW1wdHkoKSBjb25zdAog
ewogICAgIHJldHVybiAhc2l6ZSgpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBPdmVyZmxvd0hh
bmRsZXI+Ci1ib29sIEluZGV4U3BhcnNlU2V0PE92ZXJmbG93SGFuZGxlcj46OmNvbnRhaW5zKHVu
c2lnbmVkIHZhbHVlKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgRW50cnlUeXBlLCB0eXBlbmFt
ZSBFbnRyeVR5cGVUcmFpdHMsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2Jvb2wgSW5kZXhT
cGFyc2VTZXQ8RW50cnlUeXBlLCBFbnRyeVR5cGVUcmFpdHMsIE92ZXJmbG93SGFuZGxlcj46OmNv
bnRhaW5zKHVuc2lnbmVkIHZhbHVlKSBjb25zdAogewogICAgIHVuc2lnbmVkIHBvc2l0aW9uID0g
bV9tYXBbdmFsdWVdOwogICAgIGlmIChwb3NpdGlvbiA+PSBtX3ZhbHVlcy5zaXplKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBtX3ZhbHVlc1twb3NpdGlvbl0gPT0gdmFs
dWU7CisgICAgcmV0dXJuIEVudHJ5VHlwZVRyYWl0czo6a2V5KG1fdmFsdWVzW3Bvc2l0aW9uXSkg
PT0gdmFsdWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5VHlwZSwgdHlwZW5hbWUgRW50
cnlUeXBlVHJhaXRzLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CithdXRvIEluZGV4U3BhcnNl
U2V0PEVudHJ5VHlwZSwgRW50cnlUeXBlVHJhaXRzLCBPdmVyZmxvd0hhbmRsZXI+OjpnZXQodW5z
aWduZWQgdmFsdWUpIC0+IEVudHJ5VHlwZSoKK3sKKyAgICB1bnNpZ25lZCBwb3NpdGlvbiA9IG1f
bWFwW3ZhbHVlXTsKKyAgICBpZiAocG9zaXRpb24gPj0gbV92YWx1ZXMuc2l6ZSgpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIEVudHJ5VHlwZSYgZW50cnkgPSBtX3ZhbHVlc1twb3Np
dGlvbl07CisgICAgaWYgKEVudHJ5VHlwZVRyYWl0czo6a2V5KGVudHJ5KSAhPSB2YWx1ZSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgcmV0dXJuICZlbnRyeTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgRW50cnlUeXBlLCB0eXBlbmFtZSBFbnRyeVR5cGVUcmFpdHMsIHR5cGVu
YW1lIE92ZXJmbG93SGFuZGxlcj4KK2F1dG8gSW5kZXhTcGFyc2VTZXQ8RW50cnlUeXBlLCBFbnRy
eVR5cGVUcmFpdHMsIE92ZXJmbG93SGFuZGxlcj46OmdldCh1bnNpZ25lZCB2YWx1ZSkgY29uc3Qg
LT4gY29uc3QgRW50cnlUeXBlKgoreworICAgIHJldHVybiBjb25zdF9jYXN0PEluZGV4U3BhcnNl
U2V0Kj4odGhpcyktPmdldCh2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE92ZXJmbG93
SGFuZGxlcj4KLXZvaWQgSW5kZXhTcGFyc2VTZXQ8T3ZlcmZsb3dIYW5kbGVyPjo6c29ydCgpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeVR5cGUsIHR5cGVuYW1lIEVudHJ5VHlwZVRyYWl0cywgdHlw
ZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgordm9pZCBJbmRleFNwYXJzZVNldDxFbnRyeVR5cGUsIEVu
dHJ5VHlwZVRyYWl0cywgT3ZlcmZsb3dIYW5kbGVyPjo6c29ydCgpCiB7Ci0gICAgc3RkOjpzb3J0
KG1fdmFsdWVzLmJlZ2luKCksIG1fdmFsdWVzLmVuZCgpKTsKKyAgICBzdGQ6OnNvcnQoCisgICAg
ICAgIG1fdmFsdWVzLmJlZ2luKCksIG1fdmFsdWVzLmVuZCgpLAorICAgICAgICBbJl0gKGNvbnN0
IEVudHJ5VHlwZSYgYSwgY29uc3QgRW50cnlUeXBlJiBiKSB7CisgICAgICAgICAgICByZXR1cm4g
RW50cnlUeXBlVHJhaXRzOjprZXkoYSkgPCBFbnRyeVR5cGVUcmFpdHM6OmtleShiKTsKKyAgICAg
ICAgfSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KLWF1dG8gSW5k
ZXhTcGFyc2VTZXQ8T3ZlcmZsb3dIYW5kbGVyPjo6YmVnaW4oKSBjb25zdCAtPiBjb25zdF9pdGVy
YXRvcgordGVtcGxhdGU8dHlwZW5hbWUgRW50cnlUeXBlLCB0eXBlbmFtZSBFbnRyeVR5cGVUcmFp
dHMsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK2F1dG8gSW5kZXhTcGFyc2VTZXQ8RW50cnlU
eXBlLCBFbnRyeVR5cGVUcmFpdHMsIE92ZXJmbG93SGFuZGxlcj46OmJlZ2luKCkgY29uc3QgLT4g
Y29uc3RfaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV92YWx1ZXMuYmVnaW4oKTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgotYXV0byBJbmRleFNwYXJzZVNldDxPdmVy
Zmxvd0hhbmRsZXI+OjplbmQoKSBjb25zdCAtPiBjb25zdF9pdGVyYXRvcgordGVtcGxhdGU8dHlw
ZW5hbWUgRW50cnlUeXBlLCB0eXBlbmFtZSBFbnRyeVR5cGVUcmFpdHMsIHR5cGVuYW1lIE92ZXJm
bG93SGFuZGxlcj4KK2F1dG8gSW5kZXhTcGFyc2VTZXQ8RW50cnlUeXBlLCBFbnRyeVR5cGVUcmFp
dHMsIE92ZXJmbG93SGFuZGxlcj46OmVuZCgpIGNvbnN0IC0+IGNvbnN0X2l0ZXJhdG9yCiB7CiAg
ICAgcmV0dXJuIG1fdmFsdWVzLmVuZCgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAordXNp
bmcgV1RGOjpEZWZhdWx0SW5kZXhTcGFyc2VTZXRUcmFpdHM7CiB1c2luZyBXVEY6OkluZGV4U3Bh
cnNlU2V0OwogCiAjZW5kaWYgLy8gSW5kZXhTcGFyc2VTZXRfaApJbmRleDogU291cmNlL1dURi93
dGYvTGl2ZW5lc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9MaXZlbmVzcy5oCShy
ZXZpc2lvbiAyMTQ5MDIpCisrKyBTb3VyY2UvV1RGL3d0Zi9MaXZlbmVzcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MCw2ICs0MCw3IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIHR5cGVuYW1lIEFkYXB0
ZXI6OkNGRyBDRkc7CiAgICAgdHlwZWRlZiB0eXBlbmFtZSBBZGFwdGVyOjpUaGluZyBUaGluZzsK
ICAgICB0eXBlZGVmIFZlY3Rvcjx1bnNpZ25lZCwgNCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IElu
ZGV4VmVjdG9yOworICAgIHR5cGVkZWYgSW5kZXhTcGFyc2VTZXQ8dW5zaWduZWQsIERlZmF1bHRJ
bmRleFNwYXJzZVNldFRyYWl0czx1bnNpZ25lZD4sIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBXb3Jr
c2V0OwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KICAgICBMaXZl
bmVzcyhDRkcmIGNmZywgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQpAQCAtNzQsNyArNzUsNyBA
QCBwdWJsaWM6CiAKICAgICAgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKICAgICAgICAgICAgIHB1
YmxpYzoKLSAgICAgICAgICAgICAgICBpdGVyYXRvcihBZGFwdGVyJiBhZGFwdGVyLCBJbmRleFNw
YXJzZVNldDxVbnNhZmVWZWN0b3JPdmVyZmxvdz46OmNvbnN0X2l0ZXJhdG9yIHNwYXJjZVNldEl0
ZXJhdG9yKQorICAgICAgICAgICAgICAgIGl0ZXJhdG9yKEFkYXB0ZXImIGFkYXB0ZXIsIFdvcmtz
ZXQ6OmNvbnN0X2l0ZXJhdG9yIHNwYXJjZVNldEl0ZXJhdG9yKQogICAgICAgICAgICAgICAgICAg
ICA6IG1fYWRhcHRlcihhZGFwdGVyKQogICAgICAgICAgICAgICAgICAgICAsIG1fc3BhcmNlU2V0
SXRlcmF0b3Ioc3BhcmNlU2V0SXRlcmF0b3IpCiAgICAgICAgICAgICAgICAgewpAQCAtOTYsNyAr
OTcsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
QWRhcHRlciYgbV9hZGFwdGVyOwotICAgICAgICAgICAgICAgIEluZGV4U3BhcnNlU2V0PFVuc2Fm
ZVZlY3Rvck92ZXJmbG93Pjo6Y29uc3RfaXRlcmF0b3IgbV9zcGFyY2VTZXRJdGVyYXRvcjsKKyAg
ICAgICAgICAgICAgICBXb3Jrc2V0Ojpjb25zdF9pdGVyYXRvciBtX3NwYXJjZVNldEl0ZXJhdG9y
OwogICAgICAgICAgICAgfTsKIAogICAgICAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7
IHJldHVybiBpdGVyYXRvcihtX2xpdmVuZXNzLCBtX2xpdmVuZXNzLm1fd29ya3NldC5iZWdpbigp
KTsgfQpAQCAtMjI3LDcgKzIyOCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEl0ZXJhYmxl
PEluZGV4VmVjdG9yPigqdGhpcywgbV9saXZlQXRUYWlsW2Jsb2NrXSk7CiAgICAgfQogCi0gICAg
SW5kZXhTcGFyc2VTZXQ8VW5zYWZlVmVjdG9yT3ZlcmZsb3c+JiB3b3Jrc2V0KCkgeyByZXR1cm4g
bV93b3Jrc2V0OyB9CisgICAgV29ya3NldCYgd29ya3NldCgpIHsgcmV0dXJuIG1fd29ya3NldDsg
fQogICAgIAogICAgIGNsYXNzIExpdmVBdEhlYWQgewogICAgIHB1YmxpYzoKQEAgLTM1OSw3ICsz
NjAsNyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMb2NhbENhbGM6Okl0ZXJhYmxlOwog
CiAgICAgQ0ZHJiBtX2NmZzsKLSAgICBJbmRleFNwYXJzZVNldDxVbnNhZmVWZWN0b3JPdmVyZmxv
dz4gbV93b3Jrc2V0OworICAgIFdvcmtzZXQgbV93b3Jrc2V0OwogICAgIHR5cGVuYW1lIENGRzo6
dGVtcGxhdGUgTWFwPEluZGV4VmVjdG9yPiBtX2xpdmVBdEhlYWQ7CiAgICAgdHlwZW5hbWUgQ0ZH
Ojp0ZW1wbGF0ZSBNYXA8SW5kZXhWZWN0b3I+IG1fbGl2ZUF0VGFpbDsKIH07Cg==
</data>
<flag name="review"
          id="327589"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>