<?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>236997</bug_id>
          
          <creation_ts>2022-02-21 15:11:25 -0800</creation_ts>
          <short_desc>[WTF] LikelyDenseUnsignedIntegerSet::add can cause a very slow reindexing of the entire bit vector with every call in the worst case</short_desc>
          <delta_ts>2022-03-08 18:58:06 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>236269</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Robin Morisset">rmorisset</reporter>
          <assigned_to name="Robin Morisset">rmorisset</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jbedard</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1844403</commentid>
    <comment_count>0</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2022-02-21 15:11:25 -0800</bug_when>
    <thetext>This problem was found while investigating https://bugs.webkit.org/show_bug.cgi?id=236269.

LikelyDenseUnsignedIntegerSet has two forms: either as a HashSet (if sparse) or as a BitVector representing numbers above some value m_min (if sufficiently dense).
This is a massive memory win in most situations (&gt;4x in practice for register allocation in JS2, &gt;20x on some pathological webpages).
But it means that when adding a value below m_min to a set in BitVector shape, we have to rebuild the whole set, which takes a time proportional to the time of the set.
So if building a set by repeatedly adding decreasing values (like in https://bugs.webkit.org/show_bug.cgi?id=236269 where we add 10000, then 9999, then 9998, etc..), we have some awful performance.

In this patch I improve this situation in two ways:
- First I always round down m_min to the next multiple of 64. This means that when adding contiguous values like above we only re-index once every 64 adds.
- It then allows me to do the reindexing by simple memcpy instead of costly iteration of all the set bits, since they are now always at the same offset within the words of the BitVector.

On an M1 MBP (2019), on testair:: testZDefOfSpillSlotWithOffsetNeedingToBeMaterializedInARegister, with n=5000, in release mode, measuring just the part spent building the interference graph:
Before this patch: 107 s
After this patch: 77 ms (note the different unit, it is not a typo!)

Unfortunately, it does not seem to significantly improve the time spent in LikelyDenseUnsignedIntgerSet::add in JetStream2, probably because the pattern of always adding a value just before the minimum is quite pathological/rare. I still think it is worth landing, as we don&apos;t know what code out there may hit this performance problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844409</commentid>
    <comment_count>1</comment_count>
      <attachid>452784</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2022-02-21 15:17:22 -0800</bug_when>
    <thetext>Created attachment 452784
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844500</commentid>
    <comment_count>2</comment_count>
      <attachid>452784</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-02-21 18:23:39 -0800</bug_when>
    <thetext>Comment on attachment 452784
Patch

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

r=me, this looks good. I wonder if there&apos;s something even more we can do here, that&apos;s less divide run time by 64, and perhaps more along the lines of &quot;double memory each time you grow a vector&quot; amortization. I&apos;m not sure we need to go too crazy right now, but just food for thought. What if we were able to instead divide our minimum by 2 (or 4, or similar) each time, if we have reason to believe the set will stay dense.

&gt; Source/WTF/ChangeLog:19
&gt; +        On an M1 MBP (2019), on testair:: testZDefOfSpillSlotWithOffsetNeedingToBeMaterializedInARegister, with n=5000, in release mode, measuring just the time spent building the interference graph:

I think you meant 2020 here.

&gt; Source/WTF/wtf/BitVector.cpp:110
&gt; +        ASSERT(shiftInWords + 1 &lt;= newNumWords);

RELEASE_ASSERT?

&gt; Source/WTF/wtf/BitVector.cpp:117
&gt; +            ASSERT(shiftInWords + oldNumWords &lt;= newNumWords);

RELEASE_ASSERT?

&gt; Source/WTF/wtf/LikelyDenseUnsignedIntegerSet.h:164
&gt; +            m_inline.bitVector.shiftRightByMultipleOf64(m_min - newMin);

nit: ASSERT that newMin &lt; m_min?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844718</commentid>
    <comment_count>3</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2022-02-22 08:21:00 -0800</bug_when>
    <thetext>3 failures in https://ews-build.webkit.org/#/builders/70/builds/972 are known, stopped the build before retries.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1846805</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-02-28 15:12:32 -0800</bug_when>
    <thetext>&lt;rdar://problem/89584035&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1848949</commentid>
    <comment_count>5</comment_count>
      <attachid>454029</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2022-03-07 14:00:01 -0800</bug_when>
    <thetext>Created attachment 454029
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1849474</commentid>
    <comment_count>6</comment_count>
      <attachid>454029</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2022-03-08 16:49:50 -0800</bug_when>
    <thetext>Comment on attachment 454029
Patch

Trying to land this, as all bots are green except for iOS-wk2 which is visibly broken for all patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1849520</commentid>
    <comment_count>7</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-03-08 18:58:00 -0800</bug_when>
    <thetext>Committed r291027 (248201@main): &lt;https://commits.webkit.org/248201@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 454029.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452784</attachid>
            <date>2022-02-21 15:17:22 -0800</date>
            <delta_ts>2022-03-07 14:00:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patchLikelyDense</filename>
            <type>text/plain</type>
            <size>12430</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGRjOTA5NTBiZjgzMi4uZGNiZGVhMGZmN2JlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAyMi0wMi0yMSAgUm9i
aW4gTW9yaXNzZXQgIDxybW9yaXNzZXRAYXBwbGUuY29tPgorCisgICAgICAgIFtXVEZdIExpa2Vs
eURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0OjphZGQgY2FuIGNhdXNlIGEgcmVpbmRleGluZyBvZiB0
aGUgZW50aXJlIGJpdCB2ZWN0b3Igd2l0aCBldmVyeSBjYWxsIGluIHRoZSB3b3JzdCBjYXNlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY5OTcKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBKdXN0IG1ha2Ug
aXQgYSBsaXR0bGUgYml0IGVhc2llciB0byBjaGFuZ2UgdGhlIG51bWJlciBvZiBzdGFjayBzbG90
cyBpbiB0ZXN0WkRlZk9mU3BpbGxTbG90V2l0aE9mZnNldE5lZWRpbmdUb0JlTWF0ZXJpYWxpemVk
SW5BUmVnaXN0ZXIuCisKKyAgICAgICAgKiBiMy9haXIvdGVzdGFpci5jcHA6CisKIDIwMjItMDIt
MTggIEpvc2VwaCBHcmllZ28gIDxqZ3JpZWdvQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0pTQ10g
RW5hYmxlIFNoYWRvdyBSZWFsbXMgc3VwcG9ydCBieSBkZWZhdWx0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL3Rlc3RhaXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci90ZXN0YWlyLmNwcAppbmRleCAzYjZmNjJjNjMxNWQuLjUyNmUzYjhlODBkOCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90ZXN0YWlyLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL3Rlc3RhaXIuY3BwCkBAIC0yMzcxLDcgKzIz
NzEsOCBAQCB2b2lkIHRlc3RaRGVmT2ZTcGlsbFNsb3RXaXRoT2Zmc2V0TmVlZGluZ1RvQmVNYXRl
cmlhbGl6ZWRJbkFSZWdpc3RlcigpCiAgICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxv
Y2soKTsKIAogICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBzbG90czsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgMTAwMDA7ICsraSkKKyAgICB1bnNpZ25lZCBudW1iZXJPZlNsb3RzID0gMTAw
MDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mU2xvdHM7ICsraSkKICAg
ICAgICAgc2xvdHMuYXBwZW5kKGNvZGUuYWRkU3RhY2tTbG90KDgsIFN0YWNrU2xvdEtpbmQ6OlNw
aWxsKSk7CiAKICAgICBmb3IgKGF1dG8qIHNsb3QgOiBzbG90cykKQEAgLTIzODgsNyArMjM4OSw3
IEBAIHZvaWQgdGVzdFpEZWZPZlNwaWxsU2xvdFdpdGhPZmZzZXROZWVkaW5nVG9CZU1hdGVyaWFs
aXplZEluQVJlZ2lzdGVyKCkKICAgICByb290LT5hcHBlbmQoUmV0NjQsIG51bGxwdHIsIFRtcChH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOwogCiAgICAgaW50MzJfdCByZXN1bHQgPSBjb21waWxl
QW5kUnVuPGludD4ocHJvYywgMSk7Ci0gICAgQ0hFQ0socmVzdWx0ID09IDEwMDAwKTsKKyAgICBD
SEVDSyhyZXN1bHQgPT0gc3RhdGljX2Nhc3Q8aW50MzJfdD4obnVtYmVyT2ZTbG90cykpOwogfQog
CiAjZGVmaW5lIFBSRUZJWCAiTyIsIE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCksICI6ICIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggMmUyYjlhZTYyNDlhLi5mYTc5N2NhMjRlMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzggQEAKKzIw
MjItMDItMjEgIFJvYmluIE1vcmlzc2V0ICA8cm1vcmlzc2V0QGFwcGxlLmNvbT4KKworICAgICAg
ICBbV1RGXSBMaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldDo6YWRkIGNhbiBjYXVzZSBhIHJl
aW5kZXhpbmcgb2YgdGhlIGVudGlyZSBiaXQgdmVjdG9yIHdpdGggZXZlcnkgY2FsbCBpbiB0aGUg
d29yc3QgY2FzZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjM2OTk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyBwcm9ibGVtIHdhcyBmb3VuZCB3aGlsZSBpbnZlc3RpZ2F0aW5nIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzYyNjkuCisKKyAgICAgICAgTGlrZWx5RGVu
c2VVbnNpZ25lZEludGVnZXJTZXQgaGFzIHR3byBmb3JtczogZWl0aGVyIGFzIGEgSGFzaFNldCAo
aWYgc3BhcnNlKSBvciBhcyBhIEJpdFZlY3RvciByZXByZXNlbnRpbmcgbnVtYmVycyBhYm92ZSBz
b21lIHZhbHVlIG1fbWluIChpZiBzdWZmaWNpZW50bHkgZGVuc2UpLgorICAgICAgICBUaGlzIGlz
IGEgbWFzc2l2ZSBtZW1vcnkgd2luIGluIG1vc3Qgc2l0dWF0aW9ucyAoPjR4IGluIHByYWN0aWNl
IGZvciByZWdpc3RlciBhbGxvY2F0aW9uIGluIEpTMiwgPjIweCBvbiBzb21lIHBhdGhvbG9naWNh
bCB3ZWJwYWdlcykuCisgICAgICAgIEJ1dCBpdCBtZWFucyB0aGF0IHdoZW4gYWRkaW5nIGEgdmFs
dWUgYmVsb3cgbV9taW4gdG8gYSBzZXQgaW4gQml0VmVjdG9yIHNoYXBlLCB3ZSBoYXZlIHRvIHJl
YnVpbGQgdGhlIHdob2xlIHNldCwgd2hpY2ggdGFrZXMgYSB0aW1lIHByb3BvcnRpb25hbCB0byB0
aGUgdGltZSBvZiB0aGUgc2V0LgorICAgICAgICBTbyBpZiBidWlsZGluZyBhIHNldCBieSByZXBl
YXRlZGx5IGFkZGluZyBkZWNyZWFzaW5nIHZhbHVlcyAobGlrZSBpbiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2MjY5IHdoZXJlIHdlIGFkZCAxMDAwMCwgdGhlbiA5
OTk5LCB0aGVuIDk5OTgsIGV0Yy4uKSwgd2UgaGF2ZSBzb21lIGF3ZnVsIHBlcmZvcm1hbmNlLgor
CisgICAgICAgIEluIHRoaXMgcGF0Y2ggSSBpbXByb3ZlIHRoaXMgc2l0dWF0aW9uIGluIHR3byB3
YXlzOgorICAgICAgICAtIEZpcnN0IEkgYWx3YXlzIHJvdW5kIGRvd24gbV9taW4gdG8gdGhlIG5l
eHQgbXVsdGlwbGUgb2YgNjQuIFRoaXMgbWVhbnMgdGhhdCB3aGVuIGFkZGluZyBjb250aWd1b3Vz
IHZhbHVlcyBsaWtlIGFib3ZlIHdlIG9ubHkgcmUtaW5kZXggb25jZSBldmVyeSA2NCBhZGRzLgor
ICAgICAgICAtIEl0IHRoZW4gYWxsb3dzIG1lIHRvIGRvIHRoZSByZWluZGV4aW5nIGJ5IHNpbXBs
ZSBtZW1jcHkgaW5zdGVhZCBvZiBjb3N0bHkgaXRlcmF0aW9uIG9mIGFsbCB0aGUgc2V0IGJpdHMs
IHNpbmNlIHRoZXkgYXJlIG5vdyBhbHdheXMgYXQgdGhlIHNhbWUgb2Zmc2V0IHdpdGhpbiB0aGUg
d29yZHMgb2YgdGhlIEJpdFZlY3Rvci4KKworICAgICAgICBPbiBhbiBNMSBNQlAgKDIwMTkpLCBv
biB0ZXN0YWlyOjogdGVzdFpEZWZPZlNwaWxsU2xvdFdpdGhPZmZzZXROZWVkaW5nVG9CZU1hdGVy
aWFsaXplZEluQVJlZ2lzdGVyLCB3aXRoIG49NTAwMCwgaW4gcmVsZWFzZSBtb2RlLCBtZWFzdXJp
bmcganVzdCB0aGUgdGltZSBzcGVudCBidWlsZGluZyB0aGUgaW50ZXJmZXJlbmNlIGdyYXBoOgor
ICAgICAgICBCZWZvcmUgdGhpcyBwYXRjaDogMTA3IHMKKyAgICAgICAgQWZ0ZXIgdGhpcyBwYXRj
aDogNzcgbXMgKG5vdGUgdGhlIGRpZmZlcmVudCB1bml0LCBpdCBpcyBub3QgYSB0eXBvISkKKwor
ICAgICAgICBVbmZvcnR1bmF0ZWx5LCBpdCBkb2VzIG5vdCBzZWVtIHRvIHNpZ25pZmljYW50bHkg
aW1wcm92ZSB0aGUgdGltZSBzcGVudCBpbiBMaWtlbHlEZW5zZVVuc2lnbmVkSW50Z2VyU2V0Ojph
ZGQgaW4gSmV0U3RyZWFtMiwKKyAgICAgICAgcHJvYmFibHkgYmVjYXVzZSB0aGUgcGF0dGVybiBv
ZiBhbHdheXMgYWRkaW5nIGEgdmFsdWUganVzdCBiZWZvcmUgdGhlIG1pbmltdW0gaXMgcXVpdGUg
cGF0aG9sb2dpY2FsL3JhcmUuCisgICAgICAgIEkgc3RpbGwgdGhpbmsgaXQgaXMgd29ydGggbGFu
ZGluZywgYXMgd2UgZG9uJ3Qga25vdyB3aGF0IGNvZGUgb3V0IHRoZXJlIG1heSBoaXQgdGhpcyBw
ZXJmb3JtYW5jZSBwcm9ibGVtLgorCisgICAgICAgICogd3RmL0JpdFZlY3Rvci5jcHA6CisgICAg
ICAgIChXVEY6OkJpdFZlY3Rvcjo6c2hpZnRSaWdodEJ5TXVsdGlwbGVPZjY0KToKKyAgICAgICAg
KFdURjo6Qml0VmVjdG9yOjpyZXNpemVPdXRPZkxpbmUpOgorICAgICAgICAqIHd0Zi9CaXRWZWN0
b3IuaDoKKyAgICAgICAgKiB3dGYvTGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQuaDoKKyAg
ICAgICAgKFdURjo6TGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQ6OmFkZCk6CisgICAgICAg
IChXVEY6Okxpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0Ojp2YWxpZGF0ZSBjb25zdCk6Cisg
ICAgICAgIChXVEY6Okxpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0Ojp0cmFuc2l0aW9uVG9C
aXRWZWN0b3IpOgorCiAyMDIyLTAyLTE3ICBNYXR0IFdvb2Ryb3cgIDxtYXR0d29vZHJvd0BhcHBs
ZS5jb20+CiAKICAgICAgICAgRW5hYmxlIHN1YmdyaWQgYnkgZGVmYXVsdC4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3Iu
Y3BwCmluZGV4IDM5MTYxMjExNmVmOC4uZjdhMjM0MTJiZjNhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9CaXRWZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5jcHAK
QEAgLTg5LDIwICs4OSwzMyBAQCB2b2lkIEJpdFZlY3Rvcjo6T3V0T2ZMaW5lQml0czo6ZGVzdHJv
eShPdXRPZkxpbmVCaXRzKiBvdXRPZkxpbmVCaXRzKQogICAgIEJpdFZlY3Rvck1hbGxvYzo6ZnJl
ZShvdXRPZkxpbmVCaXRzKTsKIH0KIAotdm9pZCBCaXRWZWN0b3I6OnJlc2l6ZU91dE9mTGluZShz
aXplX3QgbnVtQml0cykKK3ZvaWQgQml0VmVjdG9yOjpzaGlmdFJpZ2h0QnlNdWx0aXBsZU9mNjQo
c2l6ZV90IHNoaWZ0SW5CaXRzKQoreworICAgIEFTU0VSVCghKHNoaWZ0SW5CaXRzICUgNjQpKTsK
KyAgICBzdGF0aWNfYXNzZXJ0KCEoOCAlIHNpemVvZih2b2lkKikpLCAiQml0VmVjdG9yOjpzaGlm
dFJpZ2h0QnlNdWx0aXBsZU9mNjQgYXNzdW1lcyB0aGF0IHdvcmQgc2l6ZSBpcyBhIGRpdmlzb3Ig
b2YgNjQiKTsKKyAgICBzaXplX3Qgc2hpZnRJbldvcmRzID0gc2hpZnRJbkJpdHMgLyAoOCAqIHNp
emVvZih2b2lkKikpOworICAgIHNpemVfdCBudW1CaXRzID0gc2l6ZSgpICsgc2hpZnRJbkJpdHM7
CisgICAgcmVzaXplT3V0T2ZMaW5lKG51bUJpdHMsIHNoaWZ0SW5Xb3Jkcyk7Cit9CisKK3ZvaWQg
Qml0VmVjdG9yOjpyZXNpemVPdXRPZkxpbmUoc2l6ZV90IG51bUJpdHMsIHNpemVfdCBzaGlmdElu
V29yZHMpCiB7CiAgICAgQVNTRVJUKG51bUJpdHMgPiBtYXhJbmxpbmVCaXRzKCkpOwogICAgIE91
dE9mTGluZUJpdHMqIG5ld091dE9mTGluZUJpdHMgPSBPdXRPZkxpbmVCaXRzOjpjcmVhdGUobnVt
Qml0cyk7CiAgICAgc2l6ZV90IG5ld051bVdvcmRzID0gbmV3T3V0T2ZMaW5lQml0cy0+bnVtV29y
ZHMoKTsKICAgICBpZiAoaXNJbmxpbmUoKSkgeworICAgICAgICBtZW1zZXQobmV3T3V0T2ZMaW5l
Qml0cy0+Yml0cygpLCAwLCBzaGlmdEluV29yZHMgKiBzaXplb2Yodm9pZCopKTsKICAgICAgICAg
Ly8gTWFrZSBzdXJlIHRoYXQgYWxsIG9mIHRoZSBiaXRzIGFyZSB6ZXJvIGluIGNhc2Ugd2UgZG8g
YSBuby1vcCByZXNpemUuCi0gICAgICAgICpuZXdPdXRPZkxpbmVCaXRzLT5iaXRzKCkgPSBtX2Jp
dHNPclBvaW50ZXIgJiB+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkgPDwgbWF4SW5saW5lQml0
cygpKTsKLSAgICAgICAgbWVtc2V0KG5ld091dE9mTGluZUJpdHMtPmJpdHMoKSArIDEsIDAsIChu
ZXdOdW1Xb3JkcyAtIDEpICogc2l6ZW9mKHZvaWQqKSk7CisgICAgICAgICoobmV3T3V0T2ZMaW5l
Qml0cy0+Yml0cygpICsgc2hpZnRJbldvcmRzKSA9IG1fYml0c09yUG9pbnRlciAmIH4oc3RhdGlj
X2Nhc3Q8dWludHB0cl90PigxKSA8PCBtYXhJbmxpbmVCaXRzKCkpOworICAgICAgICBBU1NFUlQo
c2hpZnRJbldvcmRzICsgMSA8PSBuZXdOdW1Xb3Jkcyk7CisgICAgICAgIG1lbXNldChuZXdPdXRP
ZkxpbmVCaXRzLT5iaXRzKCkgKyBzaGlmdEluV29yZHMgKyAxLCAwLCAobmV3TnVtV29yZHMgLSAx
IC0gc2hpZnRJbldvcmRzKSAqIHNpemVvZih2b2lkKikpOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IGlmIChudW1CaXRzID4gc2l6ZSgpKSB7CiAgICAgICAgICAgICBzaXplX3Qgb2xkTnVtV29yZHMg
PSBvdXRPZkxpbmVCaXRzKCktPm51bVdvcmRzKCk7Ci0gICAgICAgICAgICBtZW1jcHkobmV3T3V0
T2ZMaW5lQml0cy0+Yml0cygpLCBvdXRPZkxpbmVCaXRzKCktPmJpdHMoKSwgb2xkTnVtV29yZHMg
KiBzaXplb2Yodm9pZCopKTsKLSAgICAgICAgICAgIG1lbXNldChuZXdPdXRPZkxpbmVCaXRzLT5i
aXRzKCkgKyBvbGROdW1Xb3JkcywgMCwgKG5ld051bVdvcmRzIC0gb2xkTnVtV29yZHMpICogc2l6
ZW9mKHZvaWQqKSk7CisgICAgICAgICAgICBtZW1zZXQobmV3T3V0T2ZMaW5lQml0cy0+Yml0cygp
LCAwLCBzaGlmdEluV29yZHMgKiBzaXplb2Yodm9pZCopKTsKKyAgICAgICAgICAgIG1lbWNweShu
ZXdPdXRPZkxpbmVCaXRzLT5iaXRzKCkgKyBzaGlmdEluV29yZHMsIG91dE9mTGluZUJpdHMoKS0+
Yml0cygpLCBvbGROdW1Xb3JkcyAqIHNpemVvZih2b2lkKikpOworICAgICAgICAgICAgQVNTRVJU
KHNoaWZ0SW5Xb3JkcyArIG9sZE51bVdvcmRzIDw9IG5ld051bVdvcmRzKTsKKyAgICAgICAgICAg
IG1lbXNldChuZXdPdXRPZkxpbmVCaXRzLT5iaXRzKCkgKyBzaGlmdEluV29yZHMgKyBvbGROdW1X
b3JkcywgMCwgKG5ld051bVdvcmRzIC0gb2xkTnVtV29yZHMgLSBzaGlmdEluV29yZHMpICogc2l6
ZW9mKHZvaWQqKSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbWVtY3B5KG5ld091dE9m
TGluZUJpdHMtPmJpdHMoKSwgb3V0T2ZMaW5lQml0cygpLT5iaXRzKCksIG5ld091dE9mTGluZUJp
dHMtPm51bVdvcmRzKCkgKiBzaXplb2Yodm9pZCopKTsKICAgICAgICAgT3V0T2ZMaW5lQml0czo6
ZGVzdHJveShvdXRPZkxpbmVCaXRzKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQml0
VmVjdG9yLmggYi9Tb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAppbmRleCAxOWJlNDcyNjI4Y2Yu
LjE0MzU3YzI1ODEyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgKKysr
IGIvU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgKQEAgLTM1Nyw2ICszNTcsOCBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBieXRlQ291bnQoc2l6ZSgpKTsKICAgICB9CiAgICAgICAgIAorICAg
IFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNoaWZ0UmlnaHRCeU11bHRpcGxlT2Y2NChzaXplX3Qp
OworCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBKU0M6OkNhY2hlZEJpdFZlY3RvcjsKIApA
QCAtNDYxLDcgKzQ2Myw3IEBAIHByaXZhdGU6CiAgICAgY29uc3QgT3V0T2ZMaW5lQml0cyogb3V0
T2ZMaW5lQml0cygpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxjb25zdCBPdXRPZkxpbmVC
aXRzKj4obV9iaXRzT3JQb2ludGVyIDw8IDEpOyB9CiAgICAgT3V0T2ZMaW5lQml0cyogb3V0T2ZM
aW5lQml0cygpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxPdXRPZkxpbmVCaXRzKj4obV9iaXRzT3JQ
b2ludGVyIDw8IDEpOyB9CiAgICAgCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVzaXpl
T3V0T2ZMaW5lKHNpemVfdCBudW1CaXRzKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBy
ZXNpemVPdXRPZkxpbmUoc2l6ZV90IG51bUJpdHMsIHNpemVfdCBzaGlmdEluV29yZHMgPSAwKTsK
ICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRTbG93KGNvbnN0IEJpdFZlY3RvciYgb3Ro
ZXIpOwogICAgIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIG1lcmdlU2xvdyhjb25zdCBC
aXRWZWN0b3ImIG90aGVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0xpa2VseURlbnNl
VW5zaWduZWRJbnRlZ2VyU2V0LmggYi9Tb3VyY2UvV1RGL3d0Zi9MaWtlbHlEZW5zZVVuc2lnbmVk
SW50ZWdlclNldC5oCmluZGV4IDUxNDE2Y2VmZWE4OC4uMjA0NTA1NjgxOWY0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9MaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldC5oCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL0xpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0LmgKQEAgLTM5LDggKzM5
LDEwIEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKExpa2VseURlbnNl
VW5zaWduZWRJbnRlZ2VyU2V0KTsKIAogLy8gVGhpcyBpcyBlZmZlY3RpdmVseSBhIHN0ZDo6dmFy
aWFudDxIYXNoU2V0LCBQYWlyPEJpdFZlY3RvciwgSW5kZXhUeXBlPj4KIC8vIElmIGl0IGlzIGlu
IEJpdFZlY3RvciBtb2RlLCBpdCBrZWVwcyB0cmFjayBvZiB0aGUgbWluaW11bSB2YWx1ZSBpbiB0
aGUgc2V0LCBhbmQgaGFzIHRoZSBiaXRWZWN0b3Igc2hpZnRlZCBieSB0aGUgc2FtZSBhbW91bnQu
Ci0vLyBTbyBmb3IgZXhhbXBsZSB7NDAwMCwgNDAwMiwgNDAwM30gd291bGQgYmUgcmVwcmVzZW50
ZWQgYXMgdGhlIGJpdFZlY3RvciAxMTAxIHdpdGggYSBtX21pbiBvZiA0MDAwLgorLy8gU28gZm9y
IGV4YW1wbGUgezY0MDAwLCA2NDAwMiwgNjQwMDN9IHdvdWxkIGJlIHJlcHJlc2VudGVkIGFzIHRo
ZSBiaXRWZWN0b3IgMTEwMSB3aXRoIGEgbV9taW4gb2YgNjQwMDAuCiAvLyBJdCBzaGlmdHMgYmV0
d2VlbiB0aGUgdHdvIG1vZGVzIHdoZW5ldmVyIHRoYXQgd291bGQgYXQgbGVhc3QgaGFsdmUgaXRz
IG1lbW9yeSB1c2FnZS4gU28gaXQgd2lsbCBuZXZlciB1c2UgbW9yZSB0aGFuIHR3aWNlIHRoZSBv
cHRpbWFsIGFtb3VudCBvZiBtZW1vcnksIGFuZCB5ZXQgc2hvdWxkIG5vdCBwaW5nLXBvbmcgYmV0
d2VlbiB0aGUgdHdvIG1vZGVzIHRvbyBvZnRlbi4KKy8vIEFzIGFuIG9wdGltaXphdGlvbiwgaW5z
dGVhZCBvZiBrZWVwaW5nIHRyYWNrIG9mIHRoZSBtaW5pbXVtIHZhbHVlLCBpdCBrZWVwcyB0cmFj
ayBvZiB0aGUgbWluaW11bSB2YWx1ZSByb3VuZGVkIGRvd24gdG8gdGhlIG5leHQgbXVsdGlwbGUg
b2YgNjQuCisvLyBUaGlzIHJlZHVjZXMgcmVwZWF0ZWQgcmUtaW5kZXhpbmdzIG9mIHRoZSBiaXR2
ZWN0b3Igd2hlbiByZXBlYXRlZGx5IGFkZGluZyBhIHZhbHVlIGp1c3QgYmVsb3cgdGhlIGN1cnJl
bnQgbWluaW11bS4KIHRlbXBsYXRlPHR5cGVuYW1lIEluZGV4VHlwZT4KIGNsYXNzIExpa2VseURl
bnNlVW5zaWduZWRJbnRlZ2VyU2V0IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAg
LTExMSwxOCArMTEzLDIzIEBAIHB1YmxpYzoKIAogICAgICAgICBpZiAoIW1fc2l6ZSkgewogICAg
ICAgICAgICAgQVNTRVJUKGlzQml0VmVjdG9yKCkpOwotICAgICAgICAgICAgbV9taW4gPSB2YWx1
ZTsKKyAgICAgICAgICAgIG1fbWluID0gdmFsdWUgJiB+NjM7CiAgICAgICAgICAgICBtX21heCA9
IHZhbHVlOwogICAgICAgICAgICAgbV9zaXplID0gMTsKLSAgICAgICAgICAgIG1faW5saW5lLmJp
dFZlY3Rvci5xdWlja1NldCgwKTsKKyAgICAgICAgICAgIG1faW5saW5lLmJpdFZlY3Rvci5xdWlj
a1NldCh2YWx1ZSAtIG1fbWluKTsKICAgICAgICAgICAgIHJldHVybiB7IHRydWUgfTsKICAgICAg
ICAgfQogCisgICAgICAgIGF1dG8gY29tcHV0ZU5ld01pbiA9IFsmXSgpIHsKKyAgICAgICAgICAg
IEluZGV4VHlwZSByb3VuZGVkRG93blZhbHVlID0gdmFsdWUgJiB+NjM7CisgICAgICAgICAgICBy
ZXR1cm4gc3RkOjptaW4obV9taW4sIHJvdW5kZWREb3duVmFsdWUpOworICAgICAgICB9OworCiAg
ICAgICAgIGlmICghaXNCaXRWZWN0b3IoKSkgewogICAgICAgICAgICAgYm9vbCBpc05ld0VudHJ5
ID0gbV9pbmxpbmUuaGFzaFNldC5hZGQodmFsdWUpLmlzTmV3RW50cnk7CiAgICAgICAgICAgICBp
ZiAoIWlzTmV3RW50cnkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZmFsc2UgfTsKLSAgICAg
ICAgICAgIG1fbWluID0gc3RkOjptaW4obV9taW4sIHZhbHVlKTsKKyAgICAgICAgICAgIG1fbWlu
ID0gY29tcHV0ZU5ld01pbigpOwogICAgICAgICAgICAgbV9tYXggPSBzdGQ6Om1heChtX21heCwg
dmFsdWUpOwogICAgICAgICAgICAgdW5zaWduZWQgaGFzaFNldFNpemUgPSBtX2lubGluZS5oYXNo
U2V0LmNhcGFjaXR5KCkgKiBzaXplb2YoSW5kZXhUeXBlKTsKICAgICAgICAgICAgIHVuc2lnbmVk
IHdvdWxkQmVCaXRWZWN0b3JTaXplID0gKG1fbWF4IC0gbV9taW4pIC8gODsKQEAgLTE0MCw3ICsx
NDcsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIFdlIGFyZSBpbiBCaXRWZWN0b3IgbW9kZSwgYW5k
IHZhbHVlIGlzIG5vdCBpbiB0aGUgYm91bmRzOiB3ZSB3aWxsIGRlZmluaXRlbHkgaW5zZXJ0IGl0
IGFzIGEgbmV3IGVudHJ5LgogICAgICAgICArK21fc2l6ZTsKIAotICAgICAgICBJbmRleFR5cGUg
bmV3TWluID0gc3RkOjptaW4obV9taW4sIHZhbHVlKTsKKyAgICAgICAgSW5kZXhUeXBlIG5ld01p
biA9IGNvbXB1dGVOZXdNaW4oKTsKICAgICAgICAgSW5kZXhUeXBlIG5ld01heCA9IHN0ZDo6bWF4
KG1fbWF4LCB2YWx1ZSk7CiAgICAgICAgIHVuc2lnbmVkIGJpdFZlY3RvclNpemUgPSAobmV3TWF4
IC0gbmV3TWluKSAvIDg7CiAgICAgICAgIHVuc2lnbmVkIHdvdWxkQmVIYXNoU2V0U2l6ZSA9IGVz
dGltYXRlSGFzaFNldFNpemUobV9zaXplKTsKQEAgLTE1MywyMyArMTYwLDE0IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIHJldHVybiB7IHRydWUgfTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICht
X21pbiA8PSB2YWx1ZSkgewotICAgICAgICAgICAgYm9vbCBpc05ld0VudHJ5ID0gIW1faW5saW5l
LmJpdFZlY3Rvci5zZXQodmFsdWUgLSBtX21pbik7Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VE
KGlzTmV3RW50cnksIGlzTmV3RW50cnkpOwotICAgICAgICAgICAgQVNTRVJUKG5ld01heCA9PSB2
YWx1ZSk7Ci0gICAgICAgICAgICBtX21heCA9IHZhbHVlOwotICAgICAgICAgICAgcmV0dXJuIHsg
dHJ1ZSB9OworICAgICAgICBpZiAodmFsdWUgPCBtX21pbikgeworICAgICAgICAgICAgbV9pbmxp
bmUuYml0VmVjdG9yLnNoaWZ0UmlnaHRCeU11bHRpcGxlT2Y2NChtX21pbiAtIG5ld01pbik7Cisg
ICAgICAgICAgICBtX21pbiA9IG5ld01pbjsKICAgICAgICAgfQogCi0gICAgICAgIEJpdFZlY3Rv
ciBuZXdCaXRWZWN0b3I7Ci0gICAgICAgIG5ld0JpdFZlY3Rvci5yZXNpemUobV9tYXggLSB2YWx1
ZSArIDEpOwotICAgICAgICBJbmRleFR5cGUgc2hpZnRSZWR1Y3Rpb24gPSBtX21pbiAtIHZhbHVl
OwotICAgICAgICBmb3IgKEluZGV4VHlwZSBvbGRJbmRleCA6IG1faW5saW5lLmJpdFZlY3RvcikK
LSAgICAgICAgICAgIG5ld0JpdFZlY3Rvci5xdWlja1NldChvbGRJbmRleCArIHNoaWZ0UmVkdWN0
aW9uKTsKLSAgICAgICAgbmV3Qml0VmVjdG9yLnF1aWNrU2V0KDApOwotICAgICAgICBtX2lubGlu
ZS5iaXRWZWN0b3IgPSBXVEZNb3ZlKG5ld0JpdFZlY3Rvcik7Ci0gICAgICAgIEFTU0VSVChuZXdN
aW4gPT0gdmFsdWUpOwotICAgICAgICBtX21pbiA9IHZhbHVlOworICAgICAgICBib29sIGlzTmV3
RW50cnkgPSAhbV9pbmxpbmUuYml0VmVjdG9yLnNldCh2YWx1ZSAtIG1fbWluKTsKKyAgICAgICAg
QVNTRVJUX1VOVVNFRChpc05ld0VudHJ5LCBpc05ld0VudHJ5KTsKKyAgICAgICAgbV9tYXggPSBu
ZXdNYXg7CiAgICAgICAgIHJldHVybiB7IHRydWUgfTsKICAgICB9CiAKQEAgLTI2NSw3ICsyNjMs
OSBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1fc2l6
ZSkgewotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9taW4gPT0gbWluKTsKKyAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKG1fbWluIDw9IG1pbik7CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChtX21pbiArIDY0ID4gbWluKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEobV9t
aW4gJiA2MykpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9tYXggPT0gbWF4KTsKICAg
ICAgICAgfQogICAgIH0KQEAgLTMxMiw3ICszMTIsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAg
bmV3Qml0VmVjdG9yLnF1aWNrU2V0KG9sZFZhbHVlIC0gbV9taW4pOwogICAgICAgICAgICAgKytt
X3NpemU7CiAgICAgICAgIH0KLSAgICAgICAgQVNTRVJUKG5ld0JpdFZlY3Rvci5xdWlja0dldCgw
KSk7CiAgICAgICAgIG1faW5saW5lLmhhc2hTZXQuflNldCgpOwogICAgICAgICBuZXcgKE5vdE51
bGwsICZtX2lubGluZS5iaXRWZWN0b3IpIEJpdFZlY3RvcihXVEZNb3ZlKG5ld0JpdFZlY3Rvcikp
OwogCg==
</data>
<flag name="review"
          id="479928"
          type_id="1"
          status="+"
          setter="saam"
    />
    <flag name="commit-queue"
          id="479929"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454029</attachid>
            <date>2022-03-07 14:00:01 -0800</date>
            <delta_ts>2022-03-08 18:58:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patchLikelyDense</filename>
            <type>text/plain</type>
            <size>13296</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGM1MWFlOTVlYzllYS4uMzE0YmRlMDcxOGRmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAyMi0wMy0wNyAgUm9i
aW4gTW9yaXNzZXQgIDxybW9yaXNzZXRAYXBwbGUuY29tPgorCisgICAgICAgIFtXVEZdIExpa2Vs
eURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0OjphZGQgY2FuIGNhdXNlIGEgcmVpbmRleGluZyBvZiB0
aGUgZW50aXJlIGJpdCB2ZWN0b3Igd2l0aCBldmVyeSBjYWxsIGluIHRoZSB3b3JzdCBjYXNlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY5OTcKKwor
ICAgICAgICBSZXZpZXdlZCBieSBTYWFtIEJhcmF0aS4KKworICAgICAgICBKdXN0IG1ha2UgaXQg
YSBsaXR0bGUgYml0IGVhc2llciB0byBjaGFuZ2UgdGhlIG51bWJlciBvZiBzdGFjayBzbG90cyBp
biB0ZXN0WkRlZk9mU3BpbGxTbG90V2l0aE9mZnNldE5lZWRpbmdUb0JlTWF0ZXJpYWxpemVkSW5B
UmVnaXN0ZXIuCisKKyAgICAgICAgKiBiMy9haXIvdGVzdGFpci5jcHA6CisKIDIwMjItMDMtMDcg
IFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFtKU0NdIEFk
ZCBtaXNzaW5nIENQVShSSVNDVjY0KSBndWFyZHMgaW4gQ1RJIHRodW5rIHByb2xvZ3VlLCBlcGls
b2d1ZSBnZW5lcmF0b3JzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L3Rlc3RhaXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90ZXN0YWlyLmNwcApp
bmRleCAzYjZmNjJjNjMxNWQuLjUyNmUzYjhlODBkOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci90ZXN0YWlyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL3Rlc3RhaXIuY3BwCkBAIC0yMzcxLDcgKzIzNzEsOCBAQCB2b2lkIHRlc3RaRGVmT2ZT
cGlsbFNsb3RXaXRoT2Zmc2V0TmVlZGluZ1RvQmVNYXRlcmlhbGl6ZWRJbkFSZWdpc3RlcigpCiAg
ICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKIAogICAgIFZlY3RvcjxTdGFj
a1Nsb3QqPiBzbG90czsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkK
KyAgICB1bnNpZ25lZCBudW1iZXJPZlNsb3RzID0gMTAwMDA7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG51bWJlck9mU2xvdHM7ICsraSkKICAgICAgICAgc2xvdHMuYXBwZW5kKGNvZGUu
YWRkU3RhY2tTbG90KDgsIFN0YWNrU2xvdEtpbmQ6OlNwaWxsKSk7CiAKICAgICBmb3IgKGF1dG8q
IHNsb3QgOiBzbG90cykKQEAgLTIzODgsNyArMjM4OSw3IEBAIHZvaWQgdGVzdFpEZWZPZlNwaWxs
U2xvdFdpdGhPZmZzZXROZWVkaW5nVG9CZU1hdGVyaWFsaXplZEluQVJlZ2lzdGVyKCkKICAgICBy
b290LT5hcHBlbmQoUmV0NjQsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikp
OwogCiAgICAgaW50MzJfdCByZXN1bHQgPSBjb21waWxlQW5kUnVuPGludD4ocHJvYywgMSk7Ci0g
ICAgQ0hFQ0socmVzdWx0ID09IDEwMDAwKTsKKyAgICBDSEVDSyhyZXN1bHQgPT0gc3RhdGljX2Nh
c3Q8aW50MzJfdD4obnVtYmVyT2ZTbG90cykpOwogfQogCiAjZGVmaW5lIFBSRUZJWCAiTyIsIE9w
dGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCksICI6ICIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
Q2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggZGI0ZTI4NTM0MzhlLi43YmY3
Y2U0ZDljZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
VEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzggQEAKKzIwMjItMDMtMDcgIFJvYmluIE1vcmlzc2V0
ICA8cm1vcmlzc2V0QGFwcGxlLmNvbT4KKworICAgICAgICBbV1RGXSBMaWtlbHlEZW5zZVVuc2ln
bmVkSW50ZWdlclNldDo6YWRkIGNhbiBjYXVzZSBhIHJlaW5kZXhpbmcgb2YgdGhlIGVudGlyZSBi
aXQgdmVjdG9yIHdpdGggZXZlcnkgY2FsbCBpbiB0aGUgd29yc3QgY2FzZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2OTk3CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgU2FhbSBCYXJhdGkuCisKKyAgICAgICAgVGhpcyBwcm9ibGVtIHdhcyBmb3VuZCB3
aGlsZSBpbnZlc3RpZ2F0aW5nIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMzYyNjkuCisKKyAgICAgICAgTGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQgaGFzIHR3
byBmb3JtczogZWl0aGVyIGFzIGEgSGFzaFNldCAoaWYgc3BhcnNlKSBvciBhcyBhIEJpdFZlY3Rv
ciByZXByZXNlbnRpbmcgbnVtYmVycyBhYm92ZSBzb21lIHZhbHVlIG1fbWluIChpZiBzdWZmaWNp
ZW50bHkgZGVuc2UpLgorICAgICAgICBUaGlzIGlzIGEgbWFzc2l2ZSBtZW1vcnkgd2luIGluIG1v
c3Qgc2l0dWF0aW9ucyAoPjR4IGluIHByYWN0aWNlIGZvciByZWdpc3RlciBhbGxvY2F0aW9uIGlu
IEpTMiwgPjIweCBvbiBzb21lIHBhdGhvbG9naWNhbCB3ZWJwYWdlcykuCisgICAgICAgIEJ1dCBp
dCBtZWFucyB0aGF0IHdoZW4gYWRkaW5nIGEgdmFsdWUgYmVsb3cgbV9taW4gdG8gYSBzZXQgaW4g
Qml0VmVjdG9yIHNoYXBlLCB3ZSBoYXZlIHRvIHJlYnVpbGQgdGhlIHdob2xlIHNldCwgd2hpY2gg
dGFrZXMgYSB0aW1lIHByb3BvcnRpb25hbCB0byB0aGUgdGltZSBvZiB0aGUgc2V0LgorICAgICAg
ICBTbyBpZiBidWlsZGluZyBhIHNldCBieSByZXBlYXRlZGx5IGFkZGluZyBkZWNyZWFzaW5nIHZh
bHVlcyAobGlrZSBpbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2
MjY5IHdoZXJlIHdlIGFkZCAxMDAwMCwgdGhlbiA5OTk5LCB0aGVuIDk5OTgsIGV0Yy4uKSwgd2Ug
aGF2ZSBzb21lIGF3ZnVsIHBlcmZvcm1hbmNlLgorCisgICAgICAgIEluIHRoaXMgcGF0Y2ggSSBp
bXByb3ZlIHRoaXMgc2l0dWF0aW9uIGluIHR3byB3YXlzOgorICAgICAgICAtIEZpcnN0IEkgYWx3
YXlzIHJvdW5kIGRvd24gbV9taW4gdG8gdGhlIG5leHQgbXVsdGlwbGUgb2YgNjQuIFRoaXMgbWVh
bnMgdGhhdCB3aGVuIGFkZGluZyBjb250aWd1b3VzIHZhbHVlcyBsaWtlIGFib3ZlIHdlIG9ubHkg
cmUtaW5kZXggb25jZSBldmVyeSA2NCBhZGRzLgorICAgICAgICAtIEl0IHRoZW4gYWxsb3dzIG1l
IHRvIGRvIHRoZSByZWluZGV4aW5nIGJ5IHNpbXBsZSBtZW1jcHkgaW5zdGVhZCBvZiBjb3N0bHkg
aXRlcmF0aW9uIG9mIGFsbCB0aGUgc2V0IGJpdHMsIHNpbmNlIHRoZXkgYXJlIG5vdyBhbHdheXMg
YXQgdGhlIHNhbWUgb2Zmc2V0IHdpdGhpbiB0aGUgd29yZHMgb2YgdGhlIEJpdFZlY3Rvci4KKwor
ICAgICAgICBPbiBhbiBNMSBNQlAsIG9uIHRlc3RhaXI6OiB0ZXN0WkRlZk9mU3BpbGxTbG90V2l0
aE9mZnNldE5lZWRpbmdUb0JlTWF0ZXJpYWxpemVkSW5BUmVnaXN0ZXIsIHdpdGggbj01MDAwLCBp
biByZWxlYXNlIG1vZGUsIG1lYXN1cmluZyBqdXN0IHRoZSB0aW1lIHNwZW50IGJ1aWxkaW5nIHRo
ZSBpbnRlcmZlcmVuY2UgZ3JhcGg6CisgICAgICAgIEJlZm9yZSB0aGlzIHBhdGNoOiAxMDcgcwor
ICAgICAgICBBZnRlciB0aGlzIHBhdGNoOiA3NyBtcyAobm90ZSB0aGUgZGlmZmVyZW50IHVuaXQs
IGl0IGlzIG5vdCBhIHR5cG8hKQorCisgICAgICAgIFVuZm9ydHVuYXRlbHksIGl0IGRvZXMgbm90
IHNlZW0gdG8gc2lnbmlmaWNhbnRseSBpbXByb3ZlIHRoZSB0aW1lIHNwZW50IGluIExpa2VseURl
bnNlVW5zaWduZWRJbnRnZXJTZXQ6OmFkZCBpbiBKZXRTdHJlYW0yLAorICAgICAgICBwcm9iYWJs
eSBiZWNhdXNlIHRoZSBwYXR0ZXJuIG9mIGFsd2F5cyBhZGRpbmcgYSB2YWx1ZSBqdXN0IGJlZm9y
ZSB0aGUgbWluaW11bSBpcyBxdWl0ZSBwYXRob2xvZ2ljYWwvcmFyZS4KKyAgICAgICAgSSBzdGls
bCB0aGluayBpdCBpcyB3b3J0aCBsYW5kaW5nLCBhcyB3ZSBkb24ndCBrbm93IHdoYXQgY29kZSBv
dXQgdGhlcmUgbWF5IGhpdCB0aGlzIHBlcmZvcm1hbmNlIHByb2JsZW0uCisKKyAgICAgICAgKiB3
dGYvQml0VmVjdG9yLmNwcDoKKyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjpzaGlmdFJpZ2h0QnlN
dWx0aXBsZU9mNjQpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OnJlc2l6ZU91dE9mTGluZSk6
CisgICAgICAgICogd3RmL0JpdFZlY3Rvci5oOgorICAgICAgICAqIHd0Zi9MaWtlbHlEZW5zZVVu
c2lnbmVkSW50ZWdlclNldC5oOgorICAgICAgICAoV1RGOjpMaWtlbHlEZW5zZVVuc2lnbmVkSW50
ZWdlclNldDo6YWRkKToKKyAgICAgICAgKFdURjo6TGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJT
ZXQ6OnZhbGlkYXRlIGNvbnN0KToKKyAgICAgICAgKFdURjo6TGlrZWx5RGVuc2VVbnNpZ25lZElu
dGVnZXJTZXQ6OnRyYW5zaXRpb25Ub0JpdFZlY3Rvcik6CisKIDIwMjItMDMtMDcgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBPcHRpbWl6ZSB0aGUgcGFzc2luZyBv
ZiBkYXRhIGFjcm9zcyB0aHJlYWRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9CaXRWZWN0
b3IuY3BwIGIvU291cmNlL1dURi93dGYvQml0VmVjdG9yLmNwcAppbmRleCAzOTE2MTIxMTZlZjgu
LjM1YjAzOWEzNTUxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQml0VmVjdG9yLmNwcAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg5LDIwICs4OSwzMyBAQCB2b2lkIEJp
dFZlY3Rvcjo6T3V0T2ZMaW5lQml0czo6ZGVzdHJveShPdXRPZkxpbmVCaXRzKiBvdXRPZkxpbmVC
aXRzKQogICAgIEJpdFZlY3Rvck1hbGxvYzo6ZnJlZShvdXRPZkxpbmVCaXRzKTsKIH0KIAotdm9p
ZCBCaXRWZWN0b3I6OnJlc2l6ZU91dE9mTGluZShzaXplX3QgbnVtQml0cykKK3ZvaWQgQml0VmVj
dG9yOjpzaGlmdFJpZ2h0QnlNdWx0aXBsZU9mNjQoc2l6ZV90IHNoaWZ0SW5CaXRzKQoreworICAg
IFJFTEVBU0VfQVNTRVJUKCEoc2hpZnRJbkJpdHMgJSA2NCkpOworICAgIHN0YXRpY19hc3NlcnQo
ISg4ICUgc2l6ZW9mKHZvaWQqKSksICJCaXRWZWN0b3I6OnNoaWZ0UmlnaHRCeU11bHRpcGxlT2Y2
NCBhc3N1bWVzIHRoYXQgd29yZCBzaXplIGlzIGEgZGl2aXNvciBvZiA2NCIpOworICAgIHNpemVf
dCBzaGlmdEluV29yZHMgPSBzaGlmdEluQml0cyAvICg4ICogc2l6ZW9mKHZvaWQqKSk7CisgICAg
c2l6ZV90IG51bUJpdHMgPSBzaXplKCkgKyBzaGlmdEluQml0czsKKyAgICByZXNpemVPdXRPZkxp
bmUobnVtQml0cywgc2hpZnRJbldvcmRzKTsKK30KKwordm9pZCBCaXRWZWN0b3I6OnJlc2l6ZU91
dE9mTGluZShzaXplX3QgbnVtQml0cywgc2l6ZV90IHNoaWZ0SW5Xb3JkcykKIHsKICAgICBBU1NF
UlQobnVtQml0cyA+IG1heElubGluZUJpdHMoKSk7CiAgICAgT3V0T2ZMaW5lQml0cyogbmV3T3V0
T2ZMaW5lQml0cyA9IE91dE9mTGluZUJpdHM6OmNyZWF0ZShudW1CaXRzKTsKICAgICBzaXplX3Qg
bmV3TnVtV29yZHMgPSBuZXdPdXRPZkxpbmVCaXRzLT5udW1Xb3JkcygpOwogICAgIGlmIChpc0lu
bGluZSgpKSB7CisgICAgICAgIG1lbXNldChuZXdPdXRPZkxpbmVCaXRzLT5iaXRzKCksIDAsIHNo
aWZ0SW5Xb3JkcyAqIHNpemVvZih2b2lkKikpOwogICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBh
bGwgb2YgdGhlIGJpdHMgYXJlIHplcm8gaW4gY2FzZSB3ZSBkbyBhIG5vLW9wIHJlc2l6ZS4KLSAg
ICAgICAgKm5ld091dE9mTGluZUJpdHMtPmJpdHMoKSA9IG1fYml0c09yUG9pbnRlciAmIH4oc3Rh
dGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCBtYXhJbmxpbmVCaXRzKCkpOwotICAgICAgICBtZW1z
ZXQobmV3T3V0T2ZMaW5lQml0cy0+Yml0cygpICsgMSwgMCwgKG5ld051bVdvcmRzIC0gMSkgKiBz
aXplb2Yodm9pZCopKTsKKyAgICAgICAgKihuZXdPdXRPZkxpbmVCaXRzLT5iaXRzKCkgKyBzaGlm
dEluV29yZHMpID0gbV9iaXRzT3JQb2ludGVyICYgfihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEp
IDw8IG1heElubGluZUJpdHMoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNoaWZ0SW5Xb3Jk
cyArIDEgPD0gbmV3TnVtV29yZHMpOworICAgICAgICBtZW1zZXQobmV3T3V0T2ZMaW5lQml0cy0+
Yml0cygpICsgc2hpZnRJbldvcmRzICsgMSwgMCwgKG5ld051bVdvcmRzIC0gMSAtIHNoaWZ0SW5X
b3JkcykgKiBzaXplb2Yodm9pZCopKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAobnVtQml0
cyA+IHNpemUoKSkgewogICAgICAgICAgICAgc2l6ZV90IG9sZE51bVdvcmRzID0gb3V0T2ZMaW5l
Qml0cygpLT5udW1Xb3JkcygpOwotICAgICAgICAgICAgbWVtY3B5KG5ld091dE9mTGluZUJpdHMt
PmJpdHMoKSwgb3V0T2ZMaW5lQml0cygpLT5iaXRzKCksIG9sZE51bVdvcmRzICogc2l6ZW9mKHZv
aWQqKSk7Ci0gICAgICAgICAgICBtZW1zZXQobmV3T3V0T2ZMaW5lQml0cy0+Yml0cygpICsgb2xk
TnVtV29yZHMsIDAsIChuZXdOdW1Xb3JkcyAtIG9sZE51bVdvcmRzKSAqIHNpemVvZih2b2lkKikp
OworICAgICAgICAgICAgbWVtc2V0KG5ld091dE9mTGluZUJpdHMtPmJpdHMoKSwgMCwgc2hpZnRJ
bldvcmRzICogc2l6ZW9mKHZvaWQqKSk7CisgICAgICAgICAgICBtZW1jcHkobmV3T3V0T2ZMaW5l
Qml0cy0+Yml0cygpICsgc2hpZnRJbldvcmRzLCBvdXRPZkxpbmVCaXRzKCktPmJpdHMoKSwgb2xk
TnVtV29yZHMgKiBzaXplb2Yodm9pZCopKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNo
aWZ0SW5Xb3JkcyArIG9sZE51bVdvcmRzIDw9IG5ld051bVdvcmRzKTsKKyAgICAgICAgICAgIG1l
bXNldChuZXdPdXRPZkxpbmVCaXRzLT5iaXRzKCkgKyBzaGlmdEluV29yZHMgKyBvbGROdW1Xb3Jk
cywgMCwgKG5ld051bVdvcmRzIC0gb2xkTnVtV29yZHMgLSBzaGlmdEluV29yZHMpICogc2l6ZW9m
KHZvaWQqKSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbWVtY3B5KG5ld091dE9mTGlu
ZUJpdHMtPmJpdHMoKSwgb3V0T2ZMaW5lQml0cygpLT5iaXRzKCksIG5ld091dE9mTGluZUJpdHMt
Pm51bVdvcmRzKCkgKiBzaXplb2Yodm9pZCopKTsKICAgICAgICAgT3V0T2ZMaW5lQml0czo6ZGVz
dHJveShvdXRPZkxpbmVCaXRzKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQml0VmVj
dG9yLmggYi9Tb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAppbmRleCAxOWJlNDcyNjI4Y2YuLjE0
MzU3YzI1ODEyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgKKysrIGIv
U291cmNlL1dURi93dGYvQml0VmVjdG9yLmgKQEAgLTM1Nyw2ICszNTcsOCBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBieXRlQ291bnQoc2l6ZSgpKTsKICAgICB9CiAgICAgICAgIAorICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSB2b2lkIHNoaWZ0UmlnaHRCeU11bHRpcGxlT2Y2NChzaXplX3QpOwor
CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBKU0M6OkNhY2hlZEJpdFZlY3RvcjsKIApAQCAt
NDYxLDcgKzQ2Myw3IEBAIHByaXZhdGU6CiAgICAgY29uc3QgT3V0T2ZMaW5lQml0cyogb3V0T2ZM
aW5lQml0cygpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxjb25zdCBPdXRPZkxpbmVCaXRz
Kj4obV9iaXRzT3JQb2ludGVyIDw8IDEpOyB9CiAgICAgT3V0T2ZMaW5lQml0cyogb3V0T2ZMaW5l
Qml0cygpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxPdXRPZkxpbmVCaXRzKj4obV9iaXRzT3JQb2lu
dGVyIDw8IDEpOyB9CiAgICAgCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVzaXplT3V0
T2ZMaW5lKHNpemVfdCBudW1CaXRzKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCByZXNp
emVPdXRPZkxpbmUoc2l6ZV90IG51bUJpdHMsIHNpemVfdCBzaGlmdEluV29yZHMgPSAwKTsKICAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRTbG93KGNvbnN0IEJpdFZlY3RvciYgb3RoZXIp
OwogICAgIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIG1lcmdlU2xvdyhjb25zdCBCaXRW
ZWN0b3ImIG90aGVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0xpa2VseURlbnNlVW5z
aWduZWRJbnRlZ2VyU2V0LmggYi9Tb3VyY2UvV1RGL3d0Zi9MaWtlbHlEZW5zZVVuc2lnbmVkSW50
ZWdlclNldC5oCmluZGV4IDUxNDE2Y2VmZWE4OC4uZDgxY2ZlNjMxYWJmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9MaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldC5oCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL0xpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0LmgKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSwgMjAyMiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM5LDggKzM5LDEwIEBA
IERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKExpa2VseURlbnNlVW5zaWdu
ZWRJbnRlZ2VyU2V0KTsKIAogLy8gVGhpcyBpcyBlZmZlY3RpdmVseSBhIHN0ZDo6dmFyaWFudDxI
YXNoU2V0LCBQYWlyPEJpdFZlY3RvciwgSW5kZXhUeXBlPj4KIC8vIElmIGl0IGlzIGluIEJpdFZl
Y3RvciBtb2RlLCBpdCBrZWVwcyB0cmFjayBvZiB0aGUgbWluaW11bSB2YWx1ZSBpbiB0aGUgc2V0
LCBhbmQgaGFzIHRoZSBiaXRWZWN0b3Igc2hpZnRlZCBieSB0aGUgc2FtZSBhbW91bnQuCi0vLyBT
byBmb3IgZXhhbXBsZSB7NDAwMCwgNDAwMiwgNDAwM30gd291bGQgYmUgcmVwcmVzZW50ZWQgYXMg
dGhlIGJpdFZlY3RvciAxMTAxIHdpdGggYSBtX21pbiBvZiA0MDAwLgorLy8gU28gZm9yIGV4YW1w
bGUgezY0MDAwLCA2NDAwMiwgNjQwMDN9IHdvdWxkIGJlIHJlcHJlc2VudGVkIGFzIHRoZSBiaXRW
ZWN0b3IgMTEwMSB3aXRoIGEgbV9taW4gb2YgNjQwMDAuCiAvLyBJdCBzaGlmdHMgYmV0d2VlbiB0
aGUgdHdvIG1vZGVzIHdoZW5ldmVyIHRoYXQgd291bGQgYXQgbGVhc3QgaGFsdmUgaXRzIG1lbW9y
eSB1c2FnZS4gU28gaXQgd2lsbCBuZXZlciB1c2UgbW9yZSB0aGFuIHR3aWNlIHRoZSBvcHRpbWFs
IGFtb3VudCBvZiBtZW1vcnksIGFuZCB5ZXQgc2hvdWxkIG5vdCBwaW5nLXBvbmcgYmV0d2VlbiB0
aGUgdHdvIG1vZGVzIHRvbyBvZnRlbi4KKy8vIEFzIGFuIG9wdGltaXphdGlvbiwgaW5zdGVhZCBv
ZiBrZWVwaW5nIHRyYWNrIG9mIHRoZSBtaW5pbXVtIHZhbHVlLCBpdCBrZWVwcyB0cmFjayBvZiB0
aGUgbWluaW11bSB2YWx1ZSByb3VuZGVkIGRvd24gdG8gdGhlIG5leHQgbXVsdGlwbGUgb2YgNjQu
CisvLyBUaGlzIHJlZHVjZXMgcmVwZWF0ZWQgcmUtaW5kZXhpbmdzIG9mIHRoZSBiaXR2ZWN0b3Ig
d2hlbiByZXBlYXRlZGx5IGFkZGluZyBhIHZhbHVlIGp1c3QgYmVsb3cgdGhlIGN1cnJlbnQgbWlu
aW11bS4KIHRlbXBsYXRlPHR5cGVuYW1lIEluZGV4VHlwZT4KIGNsYXNzIExpa2VseURlbnNlVW5z
aWduZWRJbnRlZ2VyU2V0IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTExMSwx
OCArMTEzLDI1IEBAIHB1YmxpYzoKIAogICAgICAgICBpZiAoIW1fc2l6ZSkgewogICAgICAgICAg
ICAgQVNTRVJUKGlzQml0VmVjdG9yKCkpOwotICAgICAgICAgICAgbV9taW4gPSB2YWx1ZTsKKyAg
ICAgICAgICAgIG1fbWluID0gdmFsdWUgJiB+NjM7CiAgICAgICAgICAgICBtX21heCA9IHZhbHVl
OwogICAgICAgICAgICAgbV9zaXplID0gMTsKLSAgICAgICAgICAgIG1faW5saW5lLmJpdFZlY3Rv
ci5xdWlja1NldCgwKTsKKyAgICAgICAgICAgIC8vIG5vdCBxdWlja1NldCwgYXMgdmFsdWUgLSBt
X21pbiBtaWdodCBiZSA2MywgYW5kIHRoZSBpbmxpbmUgYml0IHZlY3RvciBjYW5ub3Qgc3RvcmUg
dGhhdCB2YWx1ZS4KKyAgICAgICAgICAgIC8vIFNvIHRoZXJlIG1pZ2h0IGJlIHNvbWUgb3ZlcmZs
b3cgaGVyZSwgZm9yY2luZyBhbiBhbGxvY2F0aW9uIG9mIGFuIG91dGxpbmUgYml0IHZlY3Rvci4K
KyAgICAgICAgICAgIG1faW5saW5lLmJpdFZlY3Rvci5zZXQodmFsdWUgLSBtX21pbik7CiAgICAg
ICAgICAgICByZXR1cm4geyB0cnVlIH07CiAgICAgICAgIH0KIAorICAgICAgICBhdXRvIGNvbXB1
dGVOZXdNaW4gPSBbJl0oKSB7CisgICAgICAgICAgICBJbmRleFR5cGUgcm91bmRlZERvd25WYWx1
ZSA9IHZhbHVlICYgfjYzOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWluKG1fbWluLCByb3Vu
ZGVkRG93blZhbHVlKTsKKyAgICAgICAgfTsKKwogICAgICAgICBpZiAoIWlzQml0VmVjdG9yKCkp
IHsKICAgICAgICAgICAgIGJvb2wgaXNOZXdFbnRyeSA9IG1faW5saW5lLmhhc2hTZXQuYWRkKHZh
bHVlKS5pc05ld0VudHJ5OwogICAgICAgICAgICAgaWYgKCFpc05ld0VudHJ5KQogICAgICAgICAg
ICAgICAgIHJldHVybiB7IGZhbHNlIH07Ci0gICAgICAgICAgICBtX21pbiA9IHN0ZDo6bWluKG1f
bWluLCB2YWx1ZSk7CisgICAgICAgICAgICBtX21pbiA9IGNvbXB1dGVOZXdNaW4oKTsKICAgICAg
ICAgICAgIG1fbWF4ID0gc3RkOjptYXgobV9tYXgsIHZhbHVlKTsKICAgICAgICAgICAgIHVuc2ln
bmVkIGhhc2hTZXRTaXplID0gbV9pbmxpbmUuaGFzaFNldC5jYXBhY2l0eSgpICogc2l6ZW9mKElu
ZGV4VHlwZSk7CiAgICAgICAgICAgICB1bnNpZ25lZCB3b3VsZEJlQml0VmVjdG9yU2l6ZSA9ICht
X21heCAtIG1fbWluKSAvIDg7CkBAIC0xNDAsNyArMTQ5LDcgQEAgcHVibGljOgogICAgICAgICAv
LyBXZSBhcmUgaW4gQml0VmVjdG9yIG1vZGUsIGFuZCB2YWx1ZSBpcyBub3QgaW4gdGhlIGJvdW5k
czogd2Ugd2lsbCBkZWZpbml0ZWx5IGluc2VydCBpdCBhcyBhIG5ldyBlbnRyeS4KICAgICAgICAg
KyttX3NpemU7CiAKLSAgICAgICAgSW5kZXhUeXBlIG5ld01pbiA9IHN0ZDo6bWluKG1fbWluLCB2
YWx1ZSk7CisgICAgICAgIEluZGV4VHlwZSBuZXdNaW4gPSBjb21wdXRlTmV3TWluKCk7CiAgICAg
ICAgIEluZGV4VHlwZSBuZXdNYXggPSBzdGQ6Om1heChtX21heCwgdmFsdWUpOwogICAgICAgICB1
bnNpZ25lZCBiaXRWZWN0b3JTaXplID0gKG5ld01heCAtIG5ld01pbikgLyA4OwogICAgICAgICB1
bnNpZ25lZCB3b3VsZEJlSGFzaFNldFNpemUgPSBlc3RpbWF0ZUhhc2hTZXRTaXplKG1fc2l6ZSk7
CkBAIC0xNTMsMjMgKzE2MiwxNSBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4geyB0cnVl
IH07CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobV9taW4gPD0gdmFsdWUpIHsKLSAgICAgICAg
ICAgIGJvb2wgaXNOZXdFbnRyeSA9ICFtX2lubGluZS5iaXRWZWN0b3Iuc2V0KHZhbHVlIC0gbV9t
aW4pOwotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChpc05ld0VudHJ5LCBpc05ld0VudHJ5KTsK
LSAgICAgICAgICAgIEFTU0VSVChuZXdNYXggPT0gdmFsdWUpOwotICAgICAgICAgICAgbV9tYXgg
PSB2YWx1ZTsKLSAgICAgICAgICAgIHJldHVybiB7IHRydWUgfTsKKyAgICAgICAgaWYgKHZhbHVl
IDwgbV9taW4pIHsKKyAgICAgICAgICAgIEFTU0VSVChuZXdNaW4gPCBtX21pbik7CisgICAgICAg
ICAgICBtX2lubGluZS5iaXRWZWN0b3Iuc2hpZnRSaWdodEJ5TXVsdGlwbGVPZjY0KG1fbWluIC0g
bmV3TWluKTsKKyAgICAgICAgICAgIG1fbWluID0gbmV3TWluOwogICAgICAgICB9CiAKLSAgICAg
ICAgQml0VmVjdG9yIG5ld0JpdFZlY3RvcjsKLSAgICAgICAgbmV3Qml0VmVjdG9yLnJlc2l6ZSht
X21heCAtIHZhbHVlICsgMSk7Ci0gICAgICAgIEluZGV4VHlwZSBzaGlmdFJlZHVjdGlvbiA9IG1f
bWluIC0gdmFsdWU7Ci0gICAgICAgIGZvciAoSW5kZXhUeXBlIG9sZEluZGV4IDogbV9pbmxpbmUu
Yml0VmVjdG9yKQotICAgICAgICAgICAgbmV3Qml0VmVjdG9yLnF1aWNrU2V0KG9sZEluZGV4ICsg
c2hpZnRSZWR1Y3Rpb24pOwotICAgICAgICBuZXdCaXRWZWN0b3IucXVpY2tTZXQoMCk7Ci0gICAg
ICAgIG1faW5saW5lLmJpdFZlY3RvciA9IFdURk1vdmUobmV3Qml0VmVjdG9yKTsKLSAgICAgICAg
QVNTRVJUKG5ld01pbiA9PSB2YWx1ZSk7Ci0gICAgICAgIG1fbWluID0gdmFsdWU7CisgICAgICAg
IGJvb2wgaXNOZXdFbnRyeSA9ICFtX2lubGluZS5iaXRWZWN0b3Iuc2V0KHZhbHVlIC0gbV9taW4p
OworICAgICAgICBBU1NFUlRfVU5VU0VEKGlzTmV3RW50cnksIGlzTmV3RW50cnkpOworICAgICAg
ICBtX21heCA9IG5ld01heDsKICAgICAgICAgcmV0dXJuIHsgdHJ1ZSB9OwogICAgIH0KIApAQCAt
MjY1LDcgKzI2Niw5IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAg
ICBpZiAobV9zaXplKSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChtX21pbiA9PSBtaW4p
OworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9taW4gPD0gbWluKTsKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKG1fbWluICsgNjQgPiBtaW4pOworICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoIShtX21pbiAmIDYzKSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChtX21heCA9
PSBtYXgpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzEyLDcgKzMxNSw2IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBuZXdCaXRWZWN0b3IucXVpY2tTZXQob2xkVmFsdWUgLSBtX21pbik7CiAgICAg
ICAgICAgICArK21fc2l6ZTsKICAgICAgICAgfQotICAgICAgICBBU1NFUlQobmV3Qml0VmVjdG9y
LnF1aWNrR2V0KDApKTsKICAgICAgICAgbV9pbmxpbmUuaGFzaFNldC5+U2V0KCk7CiAgICAgICAg
IG5ldyAoTm90TnVsbCwgJm1faW5saW5lLmJpdFZlY3RvcikgQml0VmVjdG9yKFdURk1vdmUobmV3
Qml0VmVjdG9yKSk7CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>