<?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>218508</bug_id>
          
          <creation_ts>2020-11-03 04:38:14 -0800</creation_ts>
          <short_desc>[LFC][Integration] RenderText::absoluteQuads should use iterator</short_desc>
          <delta_ts>2020-11-03 06:35:22 -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>Layout and Rendering</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>changseok</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>pdr</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1703943</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-11-03 04:38:14 -0800</bug_when>
    <thetext>totally</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1703944</commentid>
    <comment_count>1</comment_count>
      <attachid>413044</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-11-03 04:44:19 -0800</bug_when>
    <thetext>Created attachment 413044
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1703945</commentid>
    <comment_count>2</comment_count>
      <attachid>413045</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-11-03 04:45:27 -0800</bug_when>
    <thetext>Created attachment 413045
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1703946</commentid>
    <comment_count>3</comment_count>
      <attachid>413046</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-11-03 04:48:34 -0800</bug_when>
    <thetext>Created attachment 413046
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1703954</commentid>
    <comment_count>4</comment_count>
      <attachid>413051</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-11-03 05:31:49 -0800</bug_when>
    <thetext>Created attachment 413051
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1703971</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-11-03 06:34:05 -0800</bug_when>
    <thetext>Committed r269301: &lt;https://trac.webkit.org/changeset/269301&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 413051.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1703972</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-11-03 06:35:22 -0800</bug_when>
    <thetext>&lt;rdar://problem/70992478&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>413044</attachid>
            <date>2020-11-03 04:44:19 -0800</date>
            <delta_ts>2020-11-03 04:45:27 -0800</delta_ts>
            <desc>patch</desc>
            <filename>lfc-absolutequads.patch</filename>
            <type>text/plain</type>
            <size>17315</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAppbmRleCBiZWNkZmNlNzZjYjMuLjBkMDA1
N2Q4MDkxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaApAQCAtMTA0LDEyICsx
MDQsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0hvcml6b250YWwoKSBjb25zdCB7IHJldHVybiBt
X2JpdGZpZWxkcy5pc0hvcml6b250YWwoKTsgfQogICAgIHZvaWQgc2V0SXNIb3Jpem9udGFsKGJv
b2wgaXNIb3Jpem9udGFsKSB7IG1fYml0ZmllbGRzLnNldElzSG9yaXpvbnRhbChpc0hvcml6b250
YWwpOyB9CiAKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBjYWxjdWxhdGVCb3VuZGFyaWVzKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4g
RmxvYXRSZWN0KCk7Ci0gICAgfQotCiAgICAgYm9vbCBpc0NvbnN0cnVjdGVkKCkgeyByZXR1cm4g
bV9iaXRmaWVsZHMuY29uc3RydWN0ZWQoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRDb25zdHJ1
Y3RlZCgpIHsgbV9iaXRmaWVsZHMuc2V0Q29uc3RydWN0ZWQodHJ1ZSk7IH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKaW5kZXggODY3Y2ZkNDE2NTk5Li5lNDAyNjI0
OGViMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaApAQCAtMTE2
LDggKzExNiw2IEBAIHByaXZhdGU6CiAgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25IZWlnaHQoKSBj
b25zdDsKIAogcHVibGljOgotICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVCb3VuZGFyaWVzKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gRmxvYXRSZWN0KHgoKSwgeSgpLCB3aWR0aCgpLCBoZWlnaHQo
KSk7IH0KLQogICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBsb2NhbFNlbGVjdGlvblJlY3QodW5zaWdu
ZWQgc3RhcnRQb3MsIHVuc2lnbmVkIGVuZFBvcykgY29uc3Q7CiAgICAgYm9vbCBpc1NlbGVjdGVk
KHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24sIHVuc2lnbmVkIGVuZFBvc2l0aW9uKSBjb25zdDsKICAg
ICBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiBzZWxlY3Rpb25TdGFydEVuZCgpIGNvbnN0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCmluZGV4IDNjYmJjZTNmNmRh
NC4uMzA4YzRiZDQ4OGFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3Bw
CkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJS
ZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiUmVuZGVyZWREb2N1bWVudE1hcmtlci5oIgorI2luY2x1
ZGUgIlNWR0lubGluZVRleHRCb3guaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUg
IlRleHQuaCIKICNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCkBAIC0zOTQsMzMgKzM5
NSw3NiBAQCB2b2lkIFJlbmRlclRleHQ6OmNvbGxlY3RTZWxlY3Rpb25SZWN0cyhWZWN0b3I8U2Vs
ZWN0aW9uUmVjdD4mIHJlY3RzLCB1bnNpZ25lZCBzdAogfQogI2VuZGlmCiAKLXN0YXRpYyBWZWN0
b3I8RmxvYXRRdWFkPiBjb2xsZWN0QWJzb2x1dGVRdWFkc0Zvck5vbkNvbXBsZXhQYXRocyhjb25z
dCBSZW5kZXJUZXh0JiB0ZXh0UmVuZGVyZXIsIGJvb2wqIHdhc0ZpeGVkKQorc3RhdGljIEZsb2F0
UmVjdCBib3VuZGFyaWVzRm9yVGV4dFJ1bihjb25zdCBMYXlvdXRJbnRlZ3JhdGlvbjo6UGF0aFRl
eHRSdW4mIHJ1bikKIHsKLSAgICAvLyBGSVhNRTogVGhpcyBnZW5lcmljIGZ1bmN0aW9uIGRvZXNu
J3QgY3VycmVudGx5IGNvdmVyIGV2ZXJ5dGhpbmcgdGhhdCBpcyBuZWVkZWQgZm9yIHRoZSBjb21w
bGV4IGxpbmUgbGF5b3V0IHBhdGguCi0gICAgQVNTRVJUKCF0ZXh0UmVuZGVyZXIudXNlc0NvbXBs
ZXhMaW5lTGF5b3V0UGF0aCgpKTsKKyAgICBpZiAoaXM8U1ZHSW5saW5lVGV4dEJveD4ocnVuLmxl
Z2FjeUlubGluZUJveCgpKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PFNWR0lubGluZVRleHRC
b3g+KCpydW4ubGVnYWN5SW5saW5lQm94KCkpLmNhbGN1bGF0ZUJvdW5kYXJpZXMoKTsKIAorICAg
IHJldHVybiBydW4ucmVjdCgpOworfQorCitzdGF0aWMgSW50UmVjdCBlbGxpcHNpc1JlY3RGb3JU
ZXh0UnVuKGNvbnN0IExheW91dEludGVncmF0aW9uOjpQYXRoVGV4dFJ1biYgcnVuLCB1bnNpZ25l
ZCBzdGFydCwgdW5zaWduZWQgZW5kKQoreworICAgIC8vIEZJWE1FOiBObyBlbGxpcHNpcyBzdXBw
b3J0IGluIG1vZGVybiBwYXRoIHlldC4KKyAgICBpZiAoIXJ1bi5sZWdhY3lJbmxpbmVCb3goKSkK
KyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8mIGJveCA9ICpydW4ubGVnYWN5SW5saW5l
Qm94KCk7CisKKyAgICB1bnNpZ25lZCBzaG9ydCB0cnVuY2F0aW9uID0gYm94LnRydW5jYXRpb24o
KTsKKyAgICBpZiAodHJ1bmNhdGlvbiA9PSBjTm9UcnVuY2F0aW9uKQorICAgICAgICByZXR1cm4g
eyB9OworCisgICAgYXV0byBlbGxpcHNpcyA9IGJveC5yb290KCkuZWxsaXBzaXNCb3goKTsKKyAg
ICBpZiAoIWVsbGlwc2lzKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgaW50IGVsbGlwc2lz
U3RhcnRQb3NpdGlvbiA9IHN0ZDo6bWF4PGludD4oc3RhcnQgLSBib3guc3RhcnQoKSwgMCk7Cisg
ICAgaW50IGVsbGlwc2lzRW5kUG9zaXRpb24gPSBzdGQ6Om1pbjxpbnQ+KGVuZCAtIGJveC5zdGFy
dCgpLCBib3gubGVuKCkpOworCisgICAgLy8gVGhlIGVsbGlwc2lzIHNob3VsZCBiZSBjb25zaWRl
cmVkIHRvIGJlIHNlbGVjdGVkIGlmIHRoZSBlbmQgb2YKKyAgICAvLyB0aGUgc2VsZWN0aW9uIGlz
IHBhc3QgdGhlIGJlZ2lubmluZyBvZiB0aGUgdHJ1bmNhdGlvbiBhbmQgdGhlCisgICAgLy8gYmVn
aW5uaW5nIG9mIHRoZSBzZWxlY3Rpb24gaXMgYmVmb3JlIG9yIGF0IHRoZSBiZWdpbm5pbmcgb2Yg
dGhlIHRydW5jYXRpb24uCisgICAgaWYgKGVsbGlwc2lzRW5kUG9zaXRpb24gPCB0cnVuY2F0aW9u
ICYmIGVsbGlwc2lzU3RhcnRQb3NpdGlvbiA+IHRydW5jYXRpb24pCisgICAgICAgIHJldHVybiB7
IH07CisKKyAgICByZXR1cm4gZWxsaXBzaXMtPnNlbGVjdGlvblJlY3QoKTsKK30KKworZW51bSBj
bGFzcyBDbGlwcGluZ09wdGlvbiB7IE5vQ2xpcHBpbmcsIENsaXBUb0VsbGlwc2lzIH07CisKKy8v
IEZJWE1FOiBVbmlmeSB3aXRoIGFic29sdXRlUXVhZHNGb3JSYW5nZS4KK3N0YXRpYyBWZWN0b3I8
RmxvYXRRdWFkPiBjb2xsZWN0QWJzb2x1dGVRdWFkcyhjb25zdCBSZW5kZXJUZXh0JiB0ZXh0UmVu
ZGVyZXIsIGJvb2wqIHdhc0ZpeGVkLCBDbGlwcGluZ09wdGlvbiBjbGlwcGluZykKK3sKICAgICBW
ZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsKLSAgICBmb3IgKGF1dG8mIHJ1biA6IExheW91dEludGVn
cmF0aW9uOjp0ZXh0UnVuc0Zvcih0ZXh0UmVuZGVyZXIpKQotICAgICAgICBxdWFkcy5hcHBlbmQo
dGV4dFJlbmRlcmVyLmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRRdWFkKHJ1bi5yZWN0KCkpLCBV
c2VUcmFuc2Zvcm1zLCB3YXNGaXhlZCkpOworICAgIGZvciAoYXV0byYgcnVuIDogTGF5b3V0SW50
ZWdyYXRpb246OnRleHRSdW5zRm9yKHRleHRSZW5kZXJlcikpIHsKKyAgICAgICAgYXV0byBib3Vu
ZGFyaWVzID0gYm91bmRhcmllc0ZvclRleHRSdW4ocnVuKTsKKworICAgICAgICAvLyBTaG9ydGVu
IHRoZSB3aWR0aCBvZiB0aGlzIHRleHQgYm94IGlmIGl0IGVuZHMgaW4gYW4gZWxsaXBzaXMuCisg
ICAgICAgIGF1dG8gZWxsaXBzaXNSZWN0ID0gWyZdIHsKKyAgICAgICAgICAgIGlmIChjbGlwcGlu
ZyA9PSBDbGlwcGluZ09wdGlvbjo6IENsaXBUb0VsbGlwc2lzKQorICAgICAgICAgICAgICAgIHJl
dHVybiBlbGxpcHNpc1JlY3RGb3JUZXh0UnVuKHJ1biwgMCwgdGV4dFJlbmRlcmVyLnRleHQoKS5s
ZW5ndGgoKSk7CisgICAgICAgICAgICByZXR1cm4gSW50UmVjdCB7IH07CisgICAgICAgIH0oKTsK
KyAgICAgICAgaWYgKCFlbGxpcHNpc1JlY3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBpZiAo
dGV4dFJlbmRlcmVyLnN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKKyAgICAgICAg
ICAgICAgICBib3VuZGFyaWVzLnNldFdpZHRoKGVsbGlwc2lzUmVjdC5tYXhYKCkgLSBib3VuZGFy
aWVzLngoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYm91bmRhcmllcy5z
ZXRIZWlnaHQoZWxsaXBzaXNSZWN0Lm1heFkoKSAtIGJvdW5kYXJpZXMueSgpKTsKKyAgICAgICAg
fQorICAgICAgICBxdWFkcy5hcHBlbmQodGV4dFJlbmRlcmVyLmxvY2FsVG9BYnNvbHV0ZVF1YWQo
Ym91bmRhcmllcywgVXNlVHJhbnNmb3Jtcywgd2FzRml4ZWQpKTsKKyAgICB9CiAgICAgcmV0dXJu
IHF1YWRzOwogfQogCiBWZWN0b3I8RmxvYXRRdWFkPiBSZW5kZXJUZXh0OjphYnNvbHV0ZVF1YWRz
Q2xpcHBlZFRvRWxsaXBzaXMoKSBjb25zdAogewotICAgIGlmICghdXNlc0NvbXBsZXhMaW5lTGF5
b3V0UGF0aCgpKSB7Ci0gICAgICAgIEFTU0VSVChzdHlsZSgpLnRleHRPdmVyZmxvdygpICE9IFRl
eHRPdmVyZmxvdzo6RWxsaXBzaXMpOwotICAgICAgICByZXR1cm4gY29sbGVjdEFic29sdXRlUXVh
ZHNGb3JOb25Db21wbGV4UGF0aHMoKnRoaXMsIG51bGxwdHIpOwotICAgIH0KLSAgICByZXR1cm4g
bV9saW5lQm94ZXMuYWJzb2x1dGVRdWFkcygqdGhpcywgbnVsbHB0ciwgUmVuZGVyVGV4dExpbmVC
b3hlczo6Q2xpcFRvRWxsaXBzaXMpOworICAgIHJldHVybiBjb2xsZWN0QWJzb2x1dGVRdWFkcygq
dGhpcywgbnVsbHB0ciwgQ2xpcHBpbmdPcHRpb246OkNsaXBUb0VsbGlwc2lzKTsKIH0KIAogdm9p
ZCBSZW5kZXJUZXh0OjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgYm9v
bCogd2FzRml4ZWQpIGNvbnN0CiB7Ci0gICAgaWYgKCF1c2VzQ29tcGxleExpbmVMYXlvdXRQYXRo
KCkpIHsKLSAgICAgICAgcXVhZHMuYXBwZW5kVmVjdG9yKGNvbGxlY3RBYnNvbHV0ZVF1YWRzRm9y
Tm9uQ29tcGxleFBhdGhzKCp0aGlzLCB3YXNGaXhlZCkpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIHF1YWRzLmFwcGVuZFZlY3RvcihtX2xpbmVCb3hlcy5hYnNvbHV0ZVF1YWRzKCp0aGlz
LCB3YXNGaXhlZCwgUmVuZGVyVGV4dExpbmVCb3hlczo6Tm9DbGlwcGluZykpOworICAgIHF1YWRz
LmFwcGVuZFZlY3Rvcihjb2xsZWN0QWJzb2x1dGVRdWFkcygqdGhpcywgd2FzRml4ZWQsIENsaXBw
aW5nT3B0aW9uOjpOb0NsaXBwaW5nKSk7CiB9CiAKIHN0YXRpYyBGbG9hdFJlY3QgbG9jYWxRdWFk
Rm9yVGV4dFJ1bihjb25zdCBMYXlvdXRJbnRlZ3JhdGlvbjo6UGF0aFRleHRSdW4mIHJ1biwgdW5z
aWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwgYm9vbCB1c2VTZWxlY3Rpb25IZWlnaHQpCkBAIC00
NjAsMTEgKzUwNCw3IEBAIFZlY3RvcjxGbG9hdFF1YWQ+IFJlbmRlclRleHQ6OmFic29sdXRlUXVh
ZHNGb3JSYW5nZSh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kCiAgICAgICAgIGlmIChpZ25v
cmVFbXB0eVRleHRTZWxlY3Rpb25zICYmICFydW4uaXNTZWxlY3RhYmxlKHN0YXJ0LCBlbmQpKQog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChzdGFydCA8PSBydW4uc3RhcnQoKSAm
JiBydW4uZW5kKCkgPD0gZW5kKSB7Ci0gICAgICAgICAgICBhdXRvIGJvdW5kYXJpZXMgPSBbJl0g
ewotICAgICAgICAgICAgICAgIGlmIChydW4ubGVnYWN5SW5saW5lQm94KCkgJiYgcnVuLmxlZ2Fj
eUlubGluZUJveCgpLT5pc1NWR0lubGluZVRleHRCb3goKSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHJ1bi5sZWdhY3lJbmxpbmVCb3goKS0+Y2FsY3VsYXRlQm91bmRhcmllcygpOwotICAg
ICAgICAgICAgICAgIHJldHVybiBydW4ucmVjdCgpOwotICAgICAgICAgICAgfSgpOworICAgICAg
ICAgICAgYXV0byBib3VuZGFyaWVzID0gYm91bmRhcmllc0ZvclRleHRSdW4ocnVuKTsKIAogICAg
ICAgICAgICAgaWYgKHVzZVNlbGVjdGlvbkhlaWdodCkgewogICAgICAgICAgICAgICAgIExheW91
dFJlY3Qgc2VsZWN0aW9uUmVjdCA9IHJ1bi5zZWxlY3Rpb25SZWN0KHN0YXJ0LCBlbmQpOwpAQCAt
MTYyMSwxNCArMTY2MSwxOCBAQCBMYXlvdXRSZWN0IFJlbmRlclRleHQ6OmNvbGxlY3RTZWxlY3Rp
b25SZWN0c0ZvckxpbmVCb3hlcyhjb25zdCBSZW5kZXJMYXllck1vZGVsTwogICAgICAgICByZXR1
cm4gSW50UmVjdCgpOwogCiAgICAgTGF5b3V0UmVjdCByZXN1bHRSZWN0OwotICAgIGlmICghcmVj
dHMpCi0gICAgICAgIHJlc3VsdFJlY3QgPSBtX2xpbmVCb3hlcy5zZWxlY3Rpb25SZWN0Rm9yUmFu
Z2Uoc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIG1fbGluZUJv
eGVzLmNvbGxlY3RTZWxlY3Rpb25SZWN0c0ZvclJhbmdlKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQs
ICpyZWN0cyk7Ci0gICAgICAgIGZvciAoYXV0byYgcmVjdCA6ICpyZWN0cykgewotICAgICAgICAg
ICAgcmVzdWx0UmVjdC51bml0ZShyZWN0KTsKLSAgICAgICAgICAgIHJlY3QgPSBsb2NhbFRvQ29u
dGFpbmVyUXVhZChGbG9hdFJlY3QocmVjdCksIHJlcGFpbnRDb250YWluZXIpLmVuY2xvc2luZ0Jv
dW5kaW5nQm94KCk7Ci0gICAgICAgIH0KKworICAgIGZvciAoYXV0byYgcnVuIDogTGF5b3V0SW50
ZWdyYXRpb246OnRleHRSdW5zRm9yKCp0aGlzKSkgeworICAgICAgICBMYXlvdXRSZWN0IHJlY3Q7
CisgICAgICAgIHJlY3QudW5pdGUocnVuLnNlbGVjdGlvblJlY3Qoc3RhcnRPZmZzZXQsIGVuZE9m
ZnNldCkpOworICAgICAgICByZWN0LnVuaXRlKGVsbGlwc2lzUmVjdEZvclRleHRSdW4ocnVuLCBz
dGFydE9mZnNldCwgZW5kT2Zmc2V0KSk7CisgICAgICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHJlc3VsdFJlY3QudW5pdGUocmVjdCk7CisK
KyAgICAgICAgaWYgKHJlY3RzKQorICAgICAgICAgICAgcmVjdHMtPmFwcGVuZChsb2NhbFRvQ29u
dGFpbmVyUXVhZChGbG9hdFJlY3QocmVjdCksIHJlcGFpbnRDb250YWluZXIpLmVuY2xvc2luZ0Jv
dW5kaW5nQm94KCkpOwogICAgIH0KIAogICAgIGlmIChjbGlwVG9WaXNpYmxlQ29udGVudCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNwcAppbmRl
eCBhZGRiZjU4ZmRkNDMuLjA5ZDRjOTE3MTc3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHRMaW5lQm94ZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNwcApAQCAtMTk0LDY5ICsxOTQsNiBAQCB2b2lk
IFJlbmRlclRleHRMaW5lQm94ZXM6OnNldFNlbGVjdGlvblN0YXRlKFJlbmRlclRleHQmIHJlbmRl
cmVyLCBSZW5kZXJPYmplY3Q6OgogICAgIH0KIH0KIAotc3RhdGljIEludFJlY3QgZWxsaXBzaXNS
ZWN0Rm9yQm94KGNvbnN0IElubGluZVRleHRCb3gmIGJveCwgdW5zaWduZWQgc3RhcnQsIHVuc2ln
bmVkIGVuZCkKLXsKLSAgICB1bnNpZ25lZCBzaG9ydCB0cnVuY2F0aW9uID0gYm94LnRydW5jYXRp
b24oKTsKLSAgICBpZiAodHJ1bmNhdGlvbiA9PSBjTm9UcnVuY2F0aW9uKQotICAgICAgICByZXR1
cm4gSW50UmVjdCgpOwotCi0gICAgYXV0byBlbGxpcHNpcyA9IGJveC5yb290KCkuZWxsaXBzaXNC
b3goKTsKLSAgICBpZiAoIWVsbGlwc2lzKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotICAg
IAotICAgIEludFJlY3QgcmVjdDsKLSAgICBpbnQgZWxsaXBzaXNTdGFydFBvc2l0aW9uID0gc3Rk
OjptYXg8aW50PihzdGFydCAtIGJveC5zdGFydCgpLCAwKTsKLSAgICBpbnQgZWxsaXBzaXNFbmRQ
b3NpdGlvbiA9IHN0ZDo6bWluPGludD4oZW5kIC0gYm94LnN0YXJ0KCksIGJveC5sZW4oKSk7Ci0g
ICAgCi0gICAgLy8gVGhlIGVsbGlwc2lzIHNob3VsZCBiZSBjb25zaWRlcmVkIHRvIGJlIHNlbGVj
dGVkIGlmIHRoZSBlbmQgb2YKLSAgICAvLyB0aGUgc2VsZWN0aW9uIGlzIHBhc3QgdGhlIGJlZ2lu
bmluZyBvZiB0aGUgdHJ1bmNhdGlvbiBhbmQgdGhlCi0gICAgLy8gYmVnaW5uaW5nIG9mIHRoZSBz
ZWxlY3Rpb24gaXMgYmVmb3JlIG9yIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHRydW5jYXRpb24u
Ci0gICAgaWYgKGVsbGlwc2lzRW5kUG9zaXRpb24gPCB0cnVuY2F0aW9uICYmIGVsbGlwc2lzU3Rh
cnRQb3NpdGlvbiA+IHRydW5jYXRpb24pCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0gICAg
cmV0dXJuIGVsbGlwc2lzLT5zZWxlY3Rpb25SZWN0KCk7Ci19Ci0KLUxheW91dFJlY3QgUmVuZGVy
VGV4dExpbmVCb3hlczo6c2VsZWN0aW9uUmVjdEZvclJhbmdlKHVuc2lnbmVkIHN0YXJ0LCB1bnNp
Z25lZCBlbmQpCi17Ci0gICAgTGF5b3V0UmVjdCByZWN0OwotICAgIGZvciAoYXV0byogYm94ID0g
bV9maXJzdDsgYm94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpIHsKLSAgICAgICAgcmVjdC51
bml0ZShib3gtPmxvY2FsU2VsZWN0aW9uUmVjdChzdGFydCwgZW5kKSk7Ci0gICAgICAgIHJlY3Qu
dW5pdGUoZWxsaXBzaXNSZWN0Rm9yQm94KCpib3gsIHN0YXJ0LCBlbmQpKTsKLSAgICB9Ci0gICAg
cmV0dXJuIHJlY3Q7Ci19Ci0KLXZvaWQgUmVuZGVyVGV4dExpbmVCb3hlczo6Y29sbGVjdFNlbGVj
dGlvblJlY3RzRm9yUmFuZ2UodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwgVmVjdG9yPExh
eW91dFJlY3Q+JiByZWN0cykKLXsKLSAgICBmb3IgKGF1dG8qIGJveCA9IG1fZmlyc3Q7IGJveDsg
Ym94ID0gYm94LT5uZXh0VGV4dEJveCgpKSB7Ci0gICAgICAgIExheW91dFJlY3QgcmVjdDsKLSAg
ICAgICAgcmVjdC51bml0ZShib3gtPmxvY2FsU2VsZWN0aW9uUmVjdChzdGFydCwgZW5kKSk7Ci0g
ICAgICAgIHJlY3QudW5pdGUoZWxsaXBzaXNSZWN0Rm9yQm94KCpib3gsIHN0YXJ0LCBlbmQpKTsK
LSAgICAgICAgaWYgKCFyZWN0LnNpemUoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZWN0cy5h
cHBlbmQocmVjdCk7Ci0gICAgfQotfQotCi1WZWN0b3I8RmxvYXRRdWFkPiBSZW5kZXJUZXh0TGlu
ZUJveGVzOjphYnNvbHV0ZVF1YWRzKGNvbnN0IFJlbmRlclRleHQmIHJlbmRlcmVyLCBib29sKiB3
YXNGaXhlZCwgQ2xpcHBpbmdPcHRpb24gb3B0aW9uKSBjb25zdAotewotICAgIFZlY3RvcjxGbG9h
dFF1YWQ+IHF1YWRzOwotICAgIGZvciAoYXV0byogYm94ID0gbV9maXJzdDsgYm94OyBib3ggPSBi
b3gtPm5leHRUZXh0Qm94KCkpIHsKLSAgICAgICAgRmxvYXRSZWN0IGJvdW5kYXJpZXMgPSBib3gt
PmNhbGN1bGF0ZUJvdW5kYXJpZXMoKTsKLQotICAgICAgICAvLyBTaG9ydGVuIHRoZSB3aWR0aCBv
ZiB0aGlzIHRleHQgYm94IGlmIGl0IGVuZHMgaW4gYW4gZWxsaXBzaXMuCi0gICAgICAgIC8vIEZJ
WE1FOiBlbGxpcHNpc1JlY3RGb3JCb3ggc2hvdWxkIHN3aXRjaCB0byByZXR1cm4gRmxvYXRSZWN0
IHNvb24gd2l0aCB0aGUgc3VicGl4ZWxsYXlvdXQgYnJhbmNoLgotICAgICAgICBJbnRSZWN0IGVs
bGlwc2lzUmVjdCA9IChvcHRpb24gPT0gQ2xpcFRvRWxsaXBzaXMpID8gZWxsaXBzaXNSZWN0Rm9y
Qm94KCpib3gsIDAsIHJlbmRlcmVyLnRleHQoKS5sZW5ndGgoKSkgOiBJbnRSZWN0KCk7Ci0gICAg
ICAgIGlmICghZWxsaXBzaXNSZWN0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgaWYgKHJlbmRl
cmVyLnN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKLSAgICAgICAgICAgICAgICBi
b3VuZGFyaWVzLnNldFdpZHRoKGVsbGlwc2lzUmVjdC5tYXhYKCkgLSBib3VuZGFyaWVzLngoKSk7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYm91bmRhcmllcy5zZXRIZWlnaHQo
ZWxsaXBzaXNSZWN0Lm1heFkoKSAtIGJvdW5kYXJpZXMueSgpKTsKLSAgICAgICAgfQotICAgICAg
ICBxdWFkcy5hcHBlbmQocmVuZGVyZXIubG9jYWxUb0Fic29sdXRlUXVhZChib3VuZGFyaWVzLCBV
c2VUcmFuc2Zvcm1zLCB3YXNGaXhlZCkpOwotICAgIH0KLSAgICByZXR1cm4gcXVhZHM7Ci19Ci0K
IHZvaWQgUmVuZGVyVGV4dExpbmVCb3hlczo6ZGlydHlBbGwoKQogewogICAgIGZvciAoYXV0byog
Ym94ID0gbV9maXJzdDsgYm94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRMaW5lQm94ZXMuaAppbmRleCBlMmY5ZjU1ODA2
YWUuLjZlYWIxMzczZDQyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRMaW5lQm94ZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dExpbmVCb3hlcy5oCkBAIC01NywxNCArNTcsOSBAQCBwdWJsaWM6CiAgICAgSW5saW5lVGV4
dEJveCogZmluZE5leHQoaW50IG9mZnNldCwgaW50JiBwb3NpdGlvbikgY29uc3Q7CiAKICAgICB2
b2lkIHNldFNlbGVjdGlvblN0YXRlKFJlbmRlclRleHQmLCBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdo
dFN0YXRlKTsKLSAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3RGb3JSYW5nZSh1bnNpZ25lZCBz
dGFydCwgdW5zaWduZWQgZW5kKTsKLSAgICB2b2lkIGNvbGxlY3RTZWxlY3Rpb25SZWN0c0ZvclJh
bmdlKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQsIFZlY3RvcjxMYXlvdXRSZWN0PiYgcmVj
dHMpOwogCiAgICAgTGF5b3V0UmVjdCB2aXN1YWxPdmVyZmxvd0JvdW5kaW5nQm94KGNvbnN0IFJl
bmRlclRleHQmKSBjb25zdDsKIAotICAgIGVudW0gQ2xpcHBpbmdPcHRpb24geyBOb0NsaXBwaW5n
LCBDbGlwVG9FbGxpcHNpcyB9OwotICAgIFZlY3RvcjxGbG9hdFF1YWQ+IGFic29sdXRlUXVhZHMo
Y29uc3QgUmVuZGVyVGV4dCYsIGJvb2wqIHdhc0ZpeGVkLCBDbGlwcGluZ09wdGlvbikgY29uc3Q7
Ci0KICNpZiBBU1NFUlRfRU5BQkxFRAogICAgIH5SZW5kZXJUZXh0TGluZUJveGVzKCk7CiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5s
aW5lVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGlu
ZVRleHQuY3BwCmluZGV4IGQyMzY2ZmQ0M2Q2OS4uNDU1NTc3NjE4MGUxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKQEAg
LTE0Miw4ICsxNDIsOSBAQCBMYXlvdXRSZWN0IFJlbmRlclNWR0lubGluZVRleHQ6OmxvY2FsQ2Fy
ZXRSZWN0KElubGluZUJveCogYm94LCB1bnNpZ25lZCBjYXJldE9mZgogRmxvYXRSZWN0IFJlbmRl
clNWR0lubGluZVRleHQ6OmZsb2F0TGluZXNCb3VuZGluZ0JveCgpIGNvbnN0CiB7CiAgICAgRmxv
YXRSZWN0IGJvdW5kaW5nQm94OwotICAgIGZvciAoSW5saW5lVGV4dEJveCogYm94ID0gZmlyc3RU
ZXh0Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpKQorICAgIGZvciAoYXV0byog
Ym94ID0gZmlyc3RUZXh0Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpKQogICAg
ICAgICBib3VuZGluZ0JveC51bml0ZShib3gtPmNhbGN1bGF0ZUJvdW5kYXJpZXMoKSk7CisKICAg
ICByZXR1cm4gYm91bmRpbmdCb3g7CiB9CiAKQEAgLTE4OCwxMiArMTg5LDggQEAgVmlzaWJsZVBv
c2l0aW9uIFJlbmRlclNWR0lubGluZVRleHQ6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0
UG9pbnQmIHBvaW50LAogICAgIFNWR0lubGluZVRleHRCb3gqIGNsb3Nlc3REaXN0YW5jZUJveCA9
IG51bGxwdHI7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gZnJhZ21lbnRUcmFuc2Zvcm07Ci0gICAg
Zm9yIChJbmxpbmVUZXh0Qm94KiBib3ggPSBmaXJzdFRleHRCb3goKTsgYm94OyBib3ggPSBib3gt
Pm5leHRUZXh0Qm94KCkpIHsKLSAgICAgICAgaWYgKCFpczxTVkdJbmxpbmVUZXh0Qm94PigqYm94
KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGF1dG8mIHRleHRCb3ggPSBkb3du
Y2FzdDxTVkdJbmxpbmVUZXh0Qm94PigqYm94KTsKLSAgICAgICAgVmVjdG9yPFNWR1RleHRGcmFn
bWVudD4mIGZyYWdtZW50cyA9IHRleHRCb3gudGV4dEZyYWdtZW50cygpOworICAgIGZvciAoYXV0
byogYm94ID0gZmlyc3RUZXh0Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpKSB7
CisgICAgICAgIFZlY3RvcjxTVkdUZXh0RnJhZ21lbnQ+JiBmcmFnbWVudHMgPSBib3gtPnRleHRG
cmFnbWVudHMoKTsKIAogICAgICAgICB1bnNpZ25lZCB0ZXh0RnJhZ21lbnRzU2l6ZSA9IGZyYWdt
ZW50cy5zaXplKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0ZXh0RnJhZ21l
bnRzU2l6ZTsgKytpKSB7CkBAIC0yMDgsNyArMjA1LDcgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRl
clNWR0lubGluZVRleHQ6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50
LAogCiAgICAgICAgICAgICBpZiAoZGlzdGFuY2UgPCBjbG9zZXN0RGlzdGFuY2UpIHsKICAgICAg
ICAgICAgICAgICBjbG9zZXN0RGlzdGFuY2UgPSBkaXN0YW5jZTsKLSAgICAgICAgICAgICAgICBj
bG9zZXN0RGlzdGFuY2VCb3ggPSAmdGV4dEJveDsKKyAgICAgICAgICAgICAgICBjbG9zZXN0RGlz
dGFuY2VCb3ggPSBib3g7CiAgICAgICAgICAgICAgICAgY2xvc2VzdERpc3RhbmNlRnJhZ21lbnQg
PSAmZnJhZ21lbnQ7CiAgICAgICAgICAgICAgICAgY2xvc2VzdERpc3RhbmNlUG9zaXRpb24gPSBm
cmFnbWVudFJlY3QueCgpOwogICAgICAgICAgICAgfQpAQCAtMjUxLDQgKzI0OCw5IEBAIHZvaWQg
UmVuZGVyU1ZHSW5saW5lVGV4dDo6Y29tcHV0ZU5ld1NjYWxlZEZvbnRGb3JTdHlsZShjb25zdCBS
ZW5kZXJPYmplY3QmIHJlbmRlCiAgICAgc2NhbGVkRm9udC51cGRhdGUoJnJlbmRlcmVyLmRvY3Vt
ZW50KCkuZm9udFNlbGVjdG9yKCkpOwogfQogCitTVkdJbmxpbmVUZXh0Qm94KiBSZW5kZXJTVkdJ
bmxpbmVUZXh0OjpmaXJzdFRleHRCb3goKSBjb25zdAoreworICAgIHJldHVybiBkb3duY2FzdDxT
VkdJbmxpbmVUZXh0Qm94PihSZW5kZXJUZXh0OjpmaXJzdFRleHRCb3goKSk7Cit9CisKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4
dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmgK
aW5kZXggZGM5Y2Q5MDZmNTg2Li5mZjQ2M2I4YjA5NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5oCkBAIC00OCw2ICs0OCw4IEBA
IHB1YmxpYzoKICAgICAvLyBQcmVzZXJ2ZXMgZmxvYXRpbmcgcG9pbnQgcHJlY2lzaW9uIGZvciB0
aGUgdXNlIGluIERSVC4gSXQga25vd3MgaG93IHRvIHJvdW5kIGFuZCBkb2VzIGEgYmV0dGVyIGpv
YiB0aGFuIGVuY2xvc2luZ0ludFJlY3QuCiAgICAgRmxvYXRSZWN0IGZsb2F0TGluZXNCb3VuZGlu
Z0JveCgpIGNvbnN0OwogCisgICAgU1ZHSW5saW5lVGV4dEJveCogZmlyc3RUZXh0Qm94KCkgY29u
c3Q7CisKIHByaXZhdGU6CiAgICAgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuICJSZW5kZXJTVkdJbmxpbmVUZXh0IjsgfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZUZsb3dCb3guY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVGbG93Qm94LmNwcAppbmRleCAxZTY3OWNhODVm
ODguLjJiNDk3MTcwODc4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdJbmxpbmVGbG93Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR0lubGluZUZsb3dCb3guY3BwCkBAIC02MiwxMCArNjIsMTUgQEAgdm9pZCBTVkdJbmxpbmVG
bG93Qm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBh
aW50T2Zmc2UKIEZsb2F0UmVjdCBTVkdJbmxpbmVGbG93Qm94OjpjYWxjdWxhdGVCb3VuZGFyaWVz
KCkgY29uc3QKIHsKICAgICBGbG9hdFJlY3QgY2hpbGRSZWN0OwotICAgIGZvciAoSW5saW5lQm94
KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRPbkxpbmUo
KSkgewotICAgICAgICBpZiAoIWNoaWxkLT5pc1NWR0lubGluZVRleHRCb3goKSAmJiAhY2hpbGQt
PmlzU1ZHSW5saW5lRmxvd0JveCgpKQorICAgIGZvciAoYXV0byogY2hpbGQgPSBmaXJzdENoaWxk
KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0T25MaW5lKCkpIHsKKyAgICAgICAgaWYgKGlz
PFNWR0lubGluZVRleHRCb3g+KGNoaWxkKSkgeworICAgICAgICAgICAgY2hpbGRSZWN0LnVuaXRl
KGRvd25jYXN0PFNWR0lubGluZVRleHRCb3g+KCpjaGlsZCkuY2FsY3VsYXRlQm91bmRhcmllcygp
KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChpczxTVkdJ
bmxpbmVGbG93Qm94PihjaGlsZCkpIHsKKyAgICAgICAgICAgIGNoaWxkUmVjdC51bml0ZShkb3du
Y2FzdDxTVkdJbmxpbmVGbG93Qm94PigqY2hpbGQpLmNhbGN1bGF0ZUJvdW5kYXJpZXMoKSk7CiAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY2hpbGRSZWN0LnVuaXRlKGNoaWxkLT5jYWxj
dWxhdGVCb3VuZGFyaWVzKCkpOworICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBjaGlsZFJl
Y3Q7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGlu
ZUZsb3dCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lRmxvd0Jv
eC5oCmluZGV4IDczZjgwYWM5MzIzYy4uOTcwZDNlMDYwMmM4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZUZsb3dCb3guaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZUZsb3dCb3guaApAQCAtMzgsNyArMzgsNyBAQCBw
dWJsaWM6CiAKICAgICBSZW5kZXJTVkdJbmxpbmUmIHJlbmRlcmVyKCkgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8UmVuZGVyU1ZHSW5saW5lJj4oSW5saW5lRmxvd0JveDo6cmVuZGVyZXIoKSk7IH0KIAot
ICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVCb3VuZGFyaWVzKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAg
RmxvYXRSZWN0IGNhbGN1bGF0ZUJvdW5kYXJpZXMoKSBjb25zdDsKIAogICAgIHZvaWQgc2V0TG9n
aWNhbEhlaWdodChmbG9hdCBoKSB7IG1fbG9naWNhbEhlaWdodCA9IGg7IH0KICAgICB2b2lkIHBh
aW50U2VsZWN0aW9uQmFja2dyb3VuZChQYWludEluZm8mKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmgKaW5kZXggZmRlMWYzOGVlZTZkLi5kY2Vm
M2UyZmU4OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5s
aW5lVGV4dEJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5l
VGV4dEJveC5oCkBAIC0yNCwxMiArMjQsMTIgQEAKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyU1ZHSW5saW5lVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jl
c291cmNlLmgiCisjaW5jbHVkZSAiU1ZHVGV4dEZyYWdtZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgUmVuZGVyU1ZHUmVzb3VyY2U7CiBjbGFzcyBTVkdSb290SW5saW5lQm94
Owotc3RydWN0IFNWR1RleHRGcmFnbWVudDsKIAogY2xhc3MgU1ZHSW5saW5lVGV4dEJveCBmaW5h
bCA6IHB1YmxpYyBJbmxpbmVUZXh0Qm94IHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKFNW
R0lubGluZVRleHRCb3gpOwpAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIG1h
cFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMoY29uc3QgU1ZHVGV4dEZy
YWdtZW50JiwgdW5zaWduZWQmIHN0YXJ0UG9zaXRpb24sIHVuc2lnbmVkJiBlbmRQb3NpdGlvbikg
Y29uc3Q7CiAKLSAgICBGbG9hdFJlY3QgY2FsY3VsYXRlQm91bmRhcmllcygpIGNvbnN0IG92ZXJy
aWRlOworICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVCb3VuZGFyaWVzKCkgY29uc3Q7CiAKICAgICB2
b2lkIGNsZWFyVGV4dEZyYWdtZW50cygpIHsgbV90ZXh0RnJhZ21lbnRzLmNsZWFyKCk7IH0KICAg
ICBWZWN0b3I8U1ZHVGV4dEZyYWdtZW50PiYgdGV4dEZyYWdtZW50cygpIHsgcmV0dXJuIG1fdGV4
dEZyYWdtZW50czsgfQpAQCAtNjksNiArNjksOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgT3B0aW9u
U2V0PFJlbmRlclNWR1Jlc291cmNlTW9kZT4gcGFpbnRpbmdSZXNvdXJjZU1vZGUoKSBjb25zdCB7
IHJldHVybiBPcHRpb25TZXQ8UmVuZGVyU1ZHUmVzb3VyY2VNb2RlPjo6ZnJvbVJhdyhtX3BhaW50
aW5nUmVzb3VyY2VNb2RlKTsgfQogICAgIHZvaWQgc2V0UGFpbnRpbmdSZXNvdXJjZU1vZGUoT3B0
aW9uU2V0PFJlbmRlclNWR1Jlc291cmNlTW9kZT4gbW9kZSkgeyBtX3BhaW50aW5nUmVzb3VyY2VN
b2RlID0gbW9kZS50b1JhdygpOyB9CisKKyAgICBTVkdJbmxpbmVUZXh0Qm94KiBuZXh0VGV4dEJv
eCgpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PFNWR0lubGluZVRleHRCb3g+KElubGluZVRleHRC
b3g6Om5leHRUZXh0Qm94KCkpOyB9CiAgICAgCiBwcml2YXRlOgogICAgIGJvb2wgaXNTVkdJbmxp
bmVUZXh0Qm94KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>413045</attachid>
            <date>2020-11-03 04:45:27 -0800</date>
            <delta_ts>2020-11-03 04:48:34 -0800</delta_ts>
            <desc>patch</desc>
            <filename>lfc-absoluteQuads-2.patch</filename>
            <type>text/plain</type>
            <size>19624</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyNjgzMTJiNGM2NzIuLjlkMWU0MmYxODZmZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDQ2IEBACisyMDIwLTExLTAzICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNv
bT4KKworICAgICAgICBbTEZDXVtJbnRlZ3JhdGlvbl0gUmVuZGVyVGV4dDo6YWJzb2x1dGVRdWFk
cyBzaG91bGQgdXNlIGl0ZXJhdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMTg1MDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVCb3guaDoKKyAgICAgICAgKFdlYkNvcmU6
OklubGluZUJveDo6Y2FsY3VsYXRlQm91bmRhcmllcyBjb25zdCk6IERlbGV0ZWQuCisKKyAgICAg
ICAgVGhpcyBmdW5jdGlvbiBpcyBTVkctc3BlY2lmaWMuCisgICAgICAgIFRvIHJlZHVjZSBjb25m
dXNpb24sIG1ha2UgaXQgbm9uLXZpcnR1YWwgYW5kIGF2YWlsYWJsZSBpbiBTVkcgaW5saW5lIGJv
eCBjbGFzc2VzIG9ubHkuCisKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJv
dW5kYXJpZXNGb3JUZXh0UnVuKToKKyAgICAgICAgKFdlYkNvcmU6OmVsbGlwc2lzUmVjdEZvclRl
eHRSdW4pOgorICAgICAgICAoV2ViQ29yZTo6Y29sbGVjdEFic29sdXRlUXVhZHMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6YWJzb2x1dGVRdWFkc0NsaXBwZWRUb0VsbGlwc2lzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmFic29sdXRlUXVhZHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6YWJzb2x1dGVRdWFkc0ZvclJhbmdlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmNvbGxlY3RTZWxlY3Rpb25SZWN0
c0ZvckxpbmVCb3hlcyk6CisKKyAgICAgICAgQWxzbyBpbmxpbmUgc2VsZWN0aW9uUmVjdEZvclJh
bmdlL2NvbGxlY3RTZWxlY3Rpb25SZWN0c0ZvclJhbmdlIHRvIHRoZSBvbmx5IGNhbGxlciBoZXJl
IGFuZCBtYWtlIGl0IHVzZSBpdGVyYXRvci4KKworICAgICAgICAoV2ViQ29yZTo6Y29sbGVjdEFi
c29sdXRlUXVhZHNGb3JOb25Db21wbGV4UGF0aHMpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVsbGlwc2lz
UmVjdEZvckJveCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0TGluZUJv
eGVzOjpzZWxlY3Rpb25SZWN0Rm9yUmFuZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGV4dExpbmVCb3hlczo6Y29sbGVjdFNlbGVjdGlvblJlY3RzRm9yUmFuZ2UpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dExpbmVCb3hlczo6YWJzb2x1dGVRdWFk
cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRMaW5lQm94
ZXMuaDoKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdJbmxpbmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0lubGluZVRl
eHQ6OmZsb2F0TGluZXNCb3VuZGluZ0JveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdJbmxpbmVUZXh0Ojpwb3NpdGlvbkZvclBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR0lubGluZVRleHQ6OmZpcnN0VGV4dEJveCBjb25zdCk6CisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9T
VkdJbmxpbmVGbG93Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZUZsb3dCb3g6
OmNhbGN1bGF0ZUJvdW5kYXJpZXMgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZH
SW5saW5lRmxvd0JveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJv
eC5oOgorCiAyMDIwLTExLTAyICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAg
ICAgICAgQ3Jhc2ggdW5kZXIgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c2NoZWR1bGVUYXNr
VG9EaXNwYXRjaENvbnRleHRMb3N0RXZlbnQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZUJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJv
eC5oCmluZGV4IGJlY2RmY2U3NmNiMy4uMGQwMDU3ZDgwOTFlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZUJveC5oCkBAIC0xMDQsMTIgKzEwNCw2IEBAIHB1YmxpYzoKICAgICBib29sIGlz
SG9yaXpvbnRhbCgpIGNvbnN0IHsgcmV0dXJuIG1fYml0ZmllbGRzLmlzSG9yaXpvbnRhbCgpOyB9
CiAgICAgdm9pZCBzZXRJc0hvcml6b250YWwoYm9vbCBpc0hvcml6b250YWwpIHsgbV9iaXRmaWVs
ZHMuc2V0SXNIb3Jpem9udGFsKGlzSG9yaXpvbnRhbCk7IH0KIAotICAgIHZpcnR1YWwgRmxvYXRS
ZWN0IGNhbGN1bGF0ZUJvdW5kYXJpZXMoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLSAgICB9Ci0KICAgICBi
b29sIGlzQ29uc3RydWN0ZWQoKSB7IHJldHVybiBtX2JpdGZpZWxkcy5jb25zdHJ1Y3RlZCgpOyB9
CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnN0cnVjdGVkKCkgeyBtX2JpdGZpZWxkcy5zZXRDb25z
dHJ1Y3RlZCh0cnVlKTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lVGV4dEJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3gu
aAppbmRleCA4NjdjZmQ0MTY1OTkuLmU0MDI2MjQ4ZWIyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lVGV4dEJveC5oCkBAIC0xMTYsOCArMTE2LDYgQEAgcHJpdmF0ZToKICAgICBM
YXlvdXRVbml0IHNlbGVjdGlvbkhlaWdodCgpIGNvbnN0OwogCiBwdWJsaWM6Ci0gICAgRmxvYXRS
ZWN0IGNhbGN1bGF0ZUJvdW5kYXJpZXMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBGbG9hdFJl
Y3QoeCgpLCB5KCksIHdpZHRoKCksIGhlaWdodCgpKTsgfQotCiAgICAgdmlydHVhbCBMYXlvdXRS
ZWN0IGxvY2FsU2VsZWN0aW9uUmVjdCh1bnNpZ25lZCBzdGFydFBvcywgdW5zaWduZWQgZW5kUG9z
KSBjb25zdDsKICAgICBib29sIGlzU2VsZWN0ZWQodW5zaWduZWQgc3RhcnRQb3NpdGlvbiwgdW5z
aWduZWQgZW5kUG9zaXRpb24pIGNvbnN0OwogICAgIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWdu
ZWQ+IHNlbGVjdGlvblN0YXJ0RW5kKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dC5jcHAKaW5kZXggM2NiYmNlM2Y2ZGE0Li4zMDhjNGJkNDg4YWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRl
ICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJSZW5k
ZXJlZERvY3VtZW50TWFya2VyLmgiCisjaW5jbHVkZSAiU1ZHSW5saW5lVGV4dEJveC5oIgogI2lu
Y2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUgIlRleHRSZXNv
dXJjZURlY29kZXIuaCIKQEAgLTM5NCwzMyArMzk1LDc2IEBAIHZvaWQgUmVuZGVyVGV4dDo6Y29s
bGVjdFNlbGVjdGlvblJlY3RzKFZlY3RvcjxTZWxlY3Rpb25SZWN0PiYgcmVjdHMsIHVuc2lnbmVk
IHN0CiB9CiAjZW5kaWYKIAotc3RhdGljIFZlY3RvcjxGbG9hdFF1YWQ+IGNvbGxlY3RBYnNvbHV0
ZVF1YWRzRm9yTm9uQ29tcGxleFBhdGhzKGNvbnN0IFJlbmRlclRleHQmIHRleHRSZW5kZXJlciwg
Ym9vbCogd2FzRml4ZWQpCitzdGF0aWMgRmxvYXRSZWN0IGJvdW5kYXJpZXNGb3JUZXh0UnVuKGNv
bnN0IExheW91dEludGVncmF0aW9uOjpQYXRoVGV4dFJ1biYgcnVuKQogewotICAgIC8vIEZJWE1F
OiBUaGlzIGdlbmVyaWMgZnVuY3Rpb24gZG9lc24ndCBjdXJyZW50bHkgY292ZXIgZXZlcnl0aGlu
ZyB0aGF0IGlzIG5lZWRlZCBmb3IgdGhlIGNvbXBsZXggbGluZSBsYXlvdXQgcGF0aC4KLSAgICBB
U1NFUlQoIXRleHRSZW5kZXJlci51c2VzQ29tcGxleExpbmVMYXlvdXRQYXRoKCkpOworICAgIGlm
IChpczxTVkdJbmxpbmVUZXh0Qm94PihydW4ubGVnYWN5SW5saW5lQm94KCkpKQorICAgICAgICBy
ZXR1cm4gZG93bmNhc3Q8U1ZHSW5saW5lVGV4dEJveD4oKnJ1bi5sZWdhY3lJbmxpbmVCb3goKSku
Y2FsY3VsYXRlQm91bmRhcmllcygpOwogCisgICAgcmV0dXJuIHJ1bi5yZWN0KCk7Cit9CisKK3N0
YXRpYyBJbnRSZWN0IGVsbGlwc2lzUmVjdEZvclRleHRSdW4oY29uc3QgTGF5b3V0SW50ZWdyYXRp
b246OlBhdGhUZXh0UnVuJiBydW4sIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQpCit7Cisg
ICAgLy8gRklYTUU6IE5vIGVsbGlwc2lzIHN1cHBvcnQgaW4gbW9kZXJuIHBhdGggeWV0LgorICAg
IGlmICghcnVuLmxlZ2FjeUlubGluZUJveCgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAg
YXV0byYgYm94ID0gKnJ1bi5sZWdhY3lJbmxpbmVCb3goKTsKKworICAgIHVuc2lnbmVkIHNob3J0
IHRydW5jYXRpb24gPSBib3gudHJ1bmNhdGlvbigpOworICAgIGlmICh0cnVuY2F0aW9uID09IGNO
b1RydW5jYXRpb24pCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBhdXRvIGVsbGlwc2lzID0g
Ym94LnJvb3QoKS5lbGxpcHNpc0JveCgpOworICAgIGlmICghZWxsaXBzaXMpCisgICAgICAgIHJl
dHVybiB7IH07CisKKyAgICBpbnQgZWxsaXBzaXNTdGFydFBvc2l0aW9uID0gc3RkOjptYXg8aW50
PihzdGFydCAtIGJveC5zdGFydCgpLCAwKTsKKyAgICBpbnQgZWxsaXBzaXNFbmRQb3NpdGlvbiA9
IHN0ZDo6bWluPGludD4oZW5kIC0gYm94LnN0YXJ0KCksIGJveC5sZW4oKSk7CisKKyAgICAvLyBU
aGUgZWxsaXBzaXMgc2hvdWxkIGJlIGNvbnNpZGVyZWQgdG8gYmUgc2VsZWN0ZWQgaWYgdGhlIGVu
ZCBvZgorICAgIC8vIHRoZSBzZWxlY3Rpb24gaXMgcGFzdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0
cnVuY2F0aW9uIGFuZCB0aGUKKyAgICAvLyBiZWdpbm5pbmcgb2YgdGhlIHNlbGVjdGlvbiBpcyBi
ZWZvcmUgb3IgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgdHJ1bmNhdGlvbi4KKyAgICBpZiAoZWxs
aXBzaXNFbmRQb3NpdGlvbiA8IHRydW5jYXRpb24gJiYgZWxsaXBzaXNTdGFydFBvc2l0aW9uID4g
dHJ1bmNhdGlvbikKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiBlbGxpcHNpcy0+
c2VsZWN0aW9uUmVjdCgpOworfQorCitlbnVtIGNsYXNzIENsaXBwaW5nT3B0aW9uIHsgTm9DbGlw
cGluZywgQ2xpcFRvRWxsaXBzaXMgfTsKKworLy8gRklYTUU6IFVuaWZ5IHdpdGggYWJzb2x1dGVR
dWFkc0ZvclJhbmdlLgorc3RhdGljIFZlY3RvcjxGbG9hdFF1YWQ+IGNvbGxlY3RBYnNvbHV0ZVF1
YWRzKGNvbnN0IFJlbmRlclRleHQmIHRleHRSZW5kZXJlciwgYm9vbCogd2FzRml4ZWQsIENsaXBw
aW5nT3B0aW9uIGNsaXBwaW5nKQorewogICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOwotICAg
IGZvciAoYXV0byYgcnVuIDogTGF5b3V0SW50ZWdyYXRpb246OnRleHRSdW5zRm9yKHRleHRSZW5k
ZXJlcikpCi0gICAgICAgIHF1YWRzLmFwcGVuZCh0ZXh0UmVuZGVyZXIubG9jYWxUb0Fic29sdXRl
UXVhZChGbG9hdFF1YWQocnVuLnJlY3QoKSksIFVzZVRyYW5zZm9ybXMsIHdhc0ZpeGVkKSk7Cisg
ICAgZm9yIChhdXRvJiBydW4gOiBMYXlvdXRJbnRlZ3JhdGlvbjo6dGV4dFJ1bnNGb3IodGV4dFJl
bmRlcmVyKSkgeworICAgICAgICBhdXRvIGJvdW5kYXJpZXMgPSBib3VuZGFyaWVzRm9yVGV4dFJ1
bihydW4pOworCisgICAgICAgIC8vIFNob3J0ZW4gdGhlIHdpZHRoIG9mIHRoaXMgdGV4dCBib3gg
aWYgaXQgZW5kcyBpbiBhbiBlbGxpcHNpcy4KKyAgICAgICAgYXV0byBlbGxpcHNpc1JlY3QgPSBb
Jl0geworICAgICAgICAgICAgaWYgKGNsaXBwaW5nID09IENsaXBwaW5nT3B0aW9uOjogQ2xpcFRv
RWxsaXBzaXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIGVsbGlwc2lzUmVjdEZvclRleHRSdW4o
cnVuLCAwLCB0ZXh0UmVuZGVyZXIudGV4dCgpLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIHJldHVy
biBJbnRSZWN0IHsgfTsKKyAgICAgICAgfSgpOworICAgICAgICBpZiAoIWVsbGlwc2lzUmVjdC5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGlmICh0ZXh0UmVuZGVyZXIuc3R5bGUoKS5pc0hvcml6
b250YWxXcml0aW5nTW9kZSgpKQorICAgICAgICAgICAgICAgIGJvdW5kYXJpZXMuc2V0V2lkdGgo
ZWxsaXBzaXNSZWN0Lm1heFgoKSAtIGJvdW5kYXJpZXMueCgpKTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBib3VuZGFyaWVzLnNldEhlaWdodChlbGxpcHNpc1JlY3QubWF4WSgp
IC0gYm91bmRhcmllcy55KCkpOworICAgICAgICB9CisgICAgICAgIHF1YWRzLmFwcGVuZCh0ZXh0
UmVuZGVyZXIubG9jYWxUb0Fic29sdXRlUXVhZChib3VuZGFyaWVzLCBVc2VUcmFuc2Zvcm1zLCB3
YXNGaXhlZCkpOworICAgIH0KICAgICByZXR1cm4gcXVhZHM7CiB9CiAKIFZlY3RvcjxGbG9hdFF1
YWQ+IFJlbmRlclRleHQ6OmFic29sdXRlUXVhZHNDbGlwcGVkVG9FbGxpcHNpcygpIGNvbnN0CiB7
Ci0gICAgaWYgKCF1c2VzQ29tcGxleExpbmVMYXlvdXRQYXRoKCkpIHsKLSAgICAgICAgQVNTRVJU
KHN0eWxlKCkudGV4dE92ZXJmbG93KCkgIT0gVGV4dE92ZXJmbG93OjpFbGxpcHNpcyk7Ci0gICAg
ICAgIHJldHVybiBjb2xsZWN0QWJzb2x1dGVRdWFkc0Zvck5vbkNvbXBsZXhQYXRocygqdGhpcywg
bnVsbHB0cik7Ci0gICAgfQotICAgIHJldHVybiBtX2xpbmVCb3hlcy5hYnNvbHV0ZVF1YWRzKCp0
aGlzLCBudWxscHRyLCBSZW5kZXJUZXh0TGluZUJveGVzOjpDbGlwVG9FbGxpcHNpcyk7CisgICAg
cmV0dXJuIGNvbGxlY3RBYnNvbHV0ZVF1YWRzKCp0aGlzLCBudWxscHRyLCBDbGlwcGluZ09wdGlv
bjo6Q2xpcFRvRWxsaXBzaXMpOwogfQogCiB2b2lkIFJlbmRlclRleHQ6OmFic29sdXRlUXVhZHMo
VmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBib29sKiB3YXNGaXhlZCkgY29uc3QKIHsKLSAgICBp
ZiAoIXVzZXNDb21wbGV4TGluZUxheW91dFBhdGgoKSkgewotICAgICAgICBxdWFkcy5hcHBlbmRW
ZWN0b3IoY29sbGVjdEFic29sdXRlUXVhZHNGb3JOb25Db21wbGV4UGF0aHMoKnRoaXMsIHdhc0Zp
eGVkKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgcXVhZHMuYXBwZW5kVmVjdG9yKG1f
bGluZUJveGVzLmFic29sdXRlUXVhZHMoKnRoaXMsIHdhc0ZpeGVkLCBSZW5kZXJUZXh0TGluZUJv
eGVzOjpOb0NsaXBwaW5nKSk7CisgICAgcXVhZHMuYXBwZW5kVmVjdG9yKGNvbGxlY3RBYnNvbHV0
ZVF1YWRzKCp0aGlzLCB3YXNGaXhlZCwgQ2xpcHBpbmdPcHRpb246Ok5vQ2xpcHBpbmcpKTsKIH0K
IAogc3RhdGljIEZsb2F0UmVjdCBsb2NhbFF1YWRGb3JUZXh0UnVuKGNvbnN0IExheW91dEludGVn
cmF0aW9uOjpQYXRoVGV4dFJ1biYgcnVuLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kLCBi
b29sIHVzZVNlbGVjdGlvbkhlaWdodCkKQEAgLTQ2MCwxMSArNTA0LDcgQEAgVmVjdG9yPEZsb2F0
UXVhZD4gUmVuZGVyVGV4dDo6YWJzb2x1dGVRdWFkc0ZvclJhbmdlKHVuc2lnbmVkIHN0YXJ0LCB1
bnNpZ25lZCBlbmQKICAgICAgICAgaWYgKGlnbm9yZUVtcHR5VGV4dFNlbGVjdGlvbnMgJiYgIXJ1
bi5pc1NlbGVjdGFibGUoc3RhcnQsIGVuZCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgaWYgKHN0YXJ0IDw9IHJ1bi5zdGFydCgpICYmIHJ1bi5lbmQoKSA8PSBlbmQpIHsKLSAgICAg
ICAgICAgIGF1dG8gYm91bmRhcmllcyA9IFsmXSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJ1bi5s
ZWdhY3lJbmxpbmVCb3goKSAmJiBydW4ubGVnYWN5SW5saW5lQm94KCktPmlzU1ZHSW5saW5lVGV4
dEJveCgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcnVuLmxlZ2FjeUlubGluZUJveCgp
LT5jYWxjdWxhdGVCb3VuZGFyaWVzKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJ1bi5yZWN0
KCk7Ci0gICAgICAgICAgICB9KCk7CisgICAgICAgICAgICBhdXRvIGJvdW5kYXJpZXMgPSBib3Vu
ZGFyaWVzRm9yVGV4dFJ1bihydW4pOwogCiAgICAgICAgICAgICBpZiAodXNlU2VsZWN0aW9uSGVp
Z2h0KSB7CiAgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0ID0gcnVuLnNl
bGVjdGlvblJlY3Qoc3RhcnQsIGVuZCk7CkBAIC0xNjIxLDE0ICsxNjYxLDE4IEBAIExheW91dFJl
Y3QgUmVuZGVyVGV4dDo6Y29sbGVjdFNlbGVjdGlvblJlY3RzRm9yTGluZUJveGVzKGNvbnN0IFJl
bmRlckxheWVyTW9kZWxPCiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CiAKICAgICBMYXlvdXRS
ZWN0IHJlc3VsdFJlY3Q7Ci0gICAgaWYgKCFyZWN0cykKLSAgICAgICAgcmVzdWx0UmVjdCA9IG1f
bGluZUJveGVzLnNlbGVjdGlvblJlY3RGb3JSYW5nZShzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsK
LSAgICBlbHNlIHsKLSAgICAgICAgbV9saW5lQm94ZXMuY29sbGVjdFNlbGVjdGlvblJlY3RzRm9y
UmFuZ2Uoc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgKnJlY3RzKTsKLSAgICAgICAgZm9yIChhdXRv
JiByZWN0IDogKnJlY3RzKSB7Ci0gICAgICAgICAgICByZXN1bHRSZWN0LnVuaXRlKHJlY3QpOwot
ICAgICAgICAgICAgcmVjdCA9IGxvY2FsVG9Db250YWluZXJRdWFkKEZsb2F0UmVjdChyZWN0KSwg
cmVwYWludENvbnRhaW5lcikuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKLSAgICAgICAgfQorCisg
ICAgZm9yIChhdXRvJiBydW4gOiBMYXlvdXRJbnRlZ3JhdGlvbjo6dGV4dFJ1bnNGb3IoKnRoaXMp
KSB7CisgICAgICAgIExheW91dFJlY3QgcmVjdDsKKyAgICAgICAgcmVjdC51bml0ZShydW4uc2Vs
ZWN0aW9uUmVjdChzdGFydE9mZnNldCwgZW5kT2Zmc2V0KSk7CisgICAgICAgIHJlY3QudW5pdGUo
ZWxsaXBzaXNSZWN0Rm9yVGV4dFJ1bihydW4sIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpKTsKKyAg
ICAgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgcmVzdWx0UmVjdC51bml0ZShyZWN0KTsKKworICAgICAgICBpZiAocmVjdHMpCisgICAgICAg
ICAgICByZWN0cy0+YXBwZW5kKGxvY2FsVG9Db250YWluZXJRdWFkKEZsb2F0UmVjdChyZWN0KSwg
cmVwYWludENvbnRhaW5lcikuZW5jbG9zaW5nQm91bmRpbmdCb3goKSk7CiAgICAgfQogCiAgICAg
aWYgKGNsaXBUb1Zpc2libGVDb250ZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRMaW5lQm94ZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRMaW5lQm94ZXMuY3BwCmluZGV4IGFkZGJmNThmZGQ0My4uMDlkNGM5MTcxNzcy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hl
cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRMaW5lQm94ZXMu
Y3BwCkBAIC0xOTQsNjkgKzE5NCw2IEBAIHZvaWQgUmVuZGVyVGV4dExpbmVCb3hlczo6c2V0U2Vs
ZWN0aW9uU3RhdGUoUmVuZGVyVGV4dCYgcmVuZGVyZXIsIFJlbmRlck9iamVjdDo6CiAgICAgfQog
fQogCi1zdGF0aWMgSW50UmVjdCBlbGxpcHNpc1JlY3RGb3JCb3goY29uc3QgSW5saW5lVGV4dEJv
eCYgYm94LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kKQotewotICAgIHVuc2lnbmVkIHNo
b3J0IHRydW5jYXRpb24gPSBib3gudHJ1bmNhdGlvbigpOwotICAgIGlmICh0cnVuY2F0aW9uID09
IGNOb1RydW5jYXRpb24pCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0KLSAgICBhdXRvIGVs
bGlwc2lzID0gYm94LnJvb3QoKS5lbGxpcHNpc0JveCgpOwotICAgIGlmICghZWxsaXBzaXMpCi0g
ICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0gICAgCi0gICAgSW50UmVjdCByZWN0OwotICAgIGlu
dCBlbGxpcHNpc1N0YXJ0UG9zaXRpb24gPSBzdGQ6Om1heDxpbnQ+KHN0YXJ0IC0gYm94LnN0YXJ0
KCksIDApOwotICAgIGludCBlbGxpcHNpc0VuZFBvc2l0aW9uID0gc3RkOjptaW48aW50PihlbmQg
LSBib3guc3RhcnQoKSwgYm94LmxlbigpKTsKLSAgICAKLSAgICAvLyBUaGUgZWxsaXBzaXMgc2hv
dWxkIGJlIGNvbnNpZGVyZWQgdG8gYmUgc2VsZWN0ZWQgaWYgdGhlIGVuZCBvZgotICAgIC8vIHRo
ZSBzZWxlY3Rpb24gaXMgcGFzdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0cnVuY2F0aW9uIGFuZCB0
aGUKLSAgICAvLyBiZWdpbm5pbmcgb2YgdGhlIHNlbGVjdGlvbiBpcyBiZWZvcmUgb3IgYXQgdGhl
IGJlZ2lubmluZyBvZiB0aGUgdHJ1bmNhdGlvbi4KLSAgICBpZiAoZWxsaXBzaXNFbmRQb3NpdGlv
biA8IHRydW5jYXRpb24gJiYgZWxsaXBzaXNTdGFydFBvc2l0aW9uID4gdHJ1bmNhdGlvbikKLSAg
ICAgICAgcmV0dXJuIEludFJlY3QoKTsKLSAgICByZXR1cm4gZWxsaXBzaXMtPnNlbGVjdGlvblJl
Y3QoKTsKLX0KLQotTGF5b3V0UmVjdCBSZW5kZXJUZXh0TGluZUJveGVzOjpzZWxlY3Rpb25SZWN0
Rm9yUmFuZ2UodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCkKLXsKLSAgICBMYXlvdXRSZWN0
IHJlY3Q7Ci0gICAgZm9yIChhdXRvKiBib3ggPSBtX2ZpcnN0OyBib3g7IGJveCA9IGJveC0+bmV4
dFRleHRCb3goKSkgewotICAgICAgICByZWN0LnVuaXRlKGJveC0+bG9jYWxTZWxlY3Rpb25SZWN0
KHN0YXJ0LCBlbmQpKTsKLSAgICAgICAgcmVjdC51bml0ZShlbGxpcHNpc1JlY3RGb3JCb3goKmJv
eCwgc3RhcnQsIGVuZCkpOwotICAgIH0KLSAgICByZXR1cm4gcmVjdDsKLX0KLQotdm9pZCBSZW5k
ZXJUZXh0TGluZUJveGVzOjpjb2xsZWN0U2VsZWN0aW9uUmVjdHNGb3JSYW5nZSh1bnNpZ25lZCBz
dGFydCwgdW5zaWduZWQgZW5kLCBWZWN0b3I8TGF5b3V0UmVjdD4mIHJlY3RzKQotewotICAgIGZv
ciAoYXV0byogYm94ID0gbV9maXJzdDsgYm94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpIHsK
LSAgICAgICAgTGF5b3V0UmVjdCByZWN0OwotICAgICAgICByZWN0LnVuaXRlKGJveC0+bG9jYWxT
ZWxlY3Rpb25SZWN0KHN0YXJ0LCBlbmQpKTsKLSAgICAgICAgcmVjdC51bml0ZShlbGxpcHNpc1Jl
Y3RGb3JCb3goKmJveCwgc3RhcnQsIGVuZCkpOwotICAgICAgICBpZiAoIXJlY3Quc2l6ZSgpLmlz
RW1wdHkoKSkKLSAgICAgICAgICAgIHJlY3RzLmFwcGVuZChyZWN0KTsKLSAgICB9Ci19Ci0KLVZl
Y3RvcjxGbG9hdFF1YWQ+IFJlbmRlclRleHRMaW5lQm94ZXM6OmFic29sdXRlUXVhZHMoY29uc3Qg
UmVuZGVyVGV4dCYgcmVuZGVyZXIsIGJvb2wqIHdhc0ZpeGVkLCBDbGlwcGluZ09wdGlvbiBvcHRp
b24pIGNvbnN0Ci17Ci0gICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7Ci0gICAgZm9yIChhdXRv
KiBib3ggPSBtX2ZpcnN0OyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkgewotICAgICAg
ICBGbG9hdFJlY3QgYm91bmRhcmllcyA9IGJveC0+Y2FsY3VsYXRlQm91bmRhcmllcygpOwotCi0g
ICAgICAgIC8vIFNob3J0ZW4gdGhlIHdpZHRoIG9mIHRoaXMgdGV4dCBib3ggaWYgaXQgZW5kcyBp
biBhbiBlbGxpcHNpcy4KLSAgICAgICAgLy8gRklYTUU6IGVsbGlwc2lzUmVjdEZvckJveCBzaG91
bGQgc3dpdGNoIHRvIHJldHVybiBGbG9hdFJlY3Qgc29vbiB3aXRoIHRoZSBzdWJwaXhlbGxheW91
dCBicmFuY2guCi0gICAgICAgIEludFJlY3QgZWxsaXBzaXNSZWN0ID0gKG9wdGlvbiA9PSBDbGlw
VG9FbGxpcHNpcykgPyBlbGxpcHNpc1JlY3RGb3JCb3goKmJveCwgMCwgcmVuZGVyZXIudGV4dCgp
Lmxlbmd0aCgpKSA6IEludFJlY3QoKTsKLSAgICAgICAgaWYgKCFlbGxpcHNpc1JlY3QuaXNFbXB0
eSgpKSB7Ci0gICAgICAgICAgICBpZiAocmVuZGVyZXIuc3R5bGUoKS5pc0hvcml6b250YWxXcml0
aW5nTW9kZSgpKQotICAgICAgICAgICAgICAgIGJvdW5kYXJpZXMuc2V0V2lkdGgoZWxsaXBzaXNS
ZWN0Lm1heFgoKSAtIGJvdW5kYXJpZXMueCgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBib3VuZGFyaWVzLnNldEhlaWdodChlbGxpcHNpc1JlY3QubWF4WSgpIC0gYm91bmRh
cmllcy55KCkpOwotICAgICAgICB9Ci0gICAgICAgIHF1YWRzLmFwcGVuZChyZW5kZXJlci5sb2Nh
bFRvQWJzb2x1dGVRdWFkKGJvdW5kYXJpZXMsIFVzZVRyYW5zZm9ybXMsIHdhc0ZpeGVkKSk7Ci0g
ICAgfQotICAgIHJldHVybiBxdWFkczsKLX0KLQogdm9pZCBSZW5kZXJUZXh0TGluZUJveGVzOjpk
aXJ0eUFsbCgpCiB7CiAgICAgZm9yIChhdXRvKiBib3ggPSBtX2ZpcnN0OyBib3g7IGJveCA9IGJv
eC0+bmV4dFRleHRCb3goKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0TGluZUJveGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dExpbmVCb3hlcy5oCmluZGV4IGUyZjlmNTU4MDZhZS4uNmVhYjEzNzNkNDJiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmgKQEAgLTU3LDE0ICs1
Nyw5IEBAIHB1YmxpYzoKICAgICBJbmxpbmVUZXh0Qm94KiBmaW5kTmV4dChpbnQgb2Zmc2V0LCBp
bnQmIHBvc2l0aW9uKSBjb25zdDsKIAogICAgIHZvaWQgc2V0U2VsZWN0aW9uU3RhdGUoUmVuZGVy
VGV4dCYsIFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGUpOwotICAgIExheW91dFJlY3Qgc2Vs
ZWN0aW9uUmVjdEZvclJhbmdlKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQpOwotICAgIHZv
aWQgY29sbGVjdFNlbGVjdGlvblJlY3RzRm9yUmFuZ2UodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVk
IGVuZCwgVmVjdG9yPExheW91dFJlY3Q+JiByZWN0cyk7CiAKICAgICBMYXlvdXRSZWN0IHZpc3Vh
bE92ZXJmbG93Qm91bmRpbmdCb3goY29uc3QgUmVuZGVyVGV4dCYpIGNvbnN0OwogCi0gICAgZW51
bSBDbGlwcGluZ09wdGlvbiB7IE5vQ2xpcHBpbmcsIENsaXBUb0VsbGlwc2lzIH07Ci0gICAgVmVj
dG9yPEZsb2F0UXVhZD4gYWJzb2x1dGVRdWFkcyhjb25zdCBSZW5kZXJUZXh0JiwgYm9vbCogd2Fz
Rml4ZWQsIENsaXBwaW5nT3B0aW9uKSBjb25zdDsKLQogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAg
flJlbmRlclRleHRMaW5lQm94ZXMoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKaW5kZXggZDIzNjZmZDQzZDY5
Li40NTU1Nzc2MTgwZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcApAQCAtMTQyLDggKzE0Miw5IEBAIExheW91dFJlY3Qg
UmVuZGVyU1ZHSW5saW5lVGV4dDo6bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiBib3gsIHVuc2ln
bmVkIGNhcmV0T2ZmCiBGbG9hdFJlY3QgUmVuZGVyU1ZHSW5saW5lVGV4dDo6ZmxvYXRMaW5lc0Jv
dW5kaW5nQm94KCkgY29uc3QKIHsKICAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3g7Ci0gICAgZm9y
IChJbmxpbmVUZXh0Qm94KiBib3ggPSBmaXJzdFRleHRCb3goKTsgYm94OyBib3ggPSBib3gtPm5l
eHRUZXh0Qm94KCkpCisgICAgZm9yIChhdXRvKiBib3ggPSBmaXJzdFRleHRCb3goKTsgYm94OyBi
b3ggPSBib3gtPm5leHRUZXh0Qm94KCkpCiAgICAgICAgIGJvdW5kaW5nQm94LnVuaXRlKGJveC0+
Y2FsY3VsYXRlQm91bmRhcmllcygpKTsKKwogICAgIHJldHVybiBib3VuZGluZ0JveDsKIH0KIApA
QCAtMTg4LDEyICsxODksOCBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyU1ZHSW5saW5lVGV4dDo6
cG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQsCiAgICAgU1ZHSW5saW5l
VGV4dEJveCogY2xvc2VzdERpc3RhbmNlQm94ID0gbnVsbHB0cjsKIAogICAgIEFmZmluZVRyYW5z
Zm9ybSBmcmFnbWVudFRyYW5zZm9ybTsKLSAgICBmb3IgKElubGluZVRleHRCb3gqIGJveCA9IGZp
cnN0VGV4dEJveCgpOyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkgewotICAgICAgICBp
ZiAoIWlzPFNWR0lubGluZVRleHRCb3g+KCpib3gpKQotICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgYXV0byYgdGV4dEJveCA9IGRvd25jYXN0PFNWR0lubGluZVRleHRCb3g+KCpib3gp
OwotICAgICAgICBWZWN0b3I8U1ZHVGV4dEZyYWdtZW50PiYgZnJhZ21lbnRzID0gdGV4dEJveC50
ZXh0RnJhZ21lbnRzKCk7CisgICAgZm9yIChhdXRvKiBib3ggPSBmaXJzdFRleHRCb3goKTsgYm94
OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpIHsKKyAgICAgICAgVmVjdG9yPFNWR1RleHRGcmFn
bWVudD4mIGZyYWdtZW50cyA9IGJveC0+dGV4dEZyYWdtZW50cygpOwogCiAgICAgICAgIHVuc2ln
bmVkIHRleHRGcmFnbWVudHNTaXplID0gZnJhZ21lbnRzLnNpemUoKTsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHRleHRGcmFnbWVudHNTaXplOyArK2kpIHsKQEAgLTIwOCw3ICsy
MDUsNyBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyU1ZHSW5saW5lVGV4dDo6cG9zaXRpb25Gb3JQ
b2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQsCiAKICAgICAgICAgICAgIGlmIChkaXN0YW5j
ZSA8IGNsb3Nlc3REaXN0YW5jZSkgewogICAgICAgICAgICAgICAgIGNsb3Nlc3REaXN0YW5jZSA9
IGRpc3RhbmNlOwotICAgICAgICAgICAgICAgIGNsb3Nlc3REaXN0YW5jZUJveCA9ICZ0ZXh0Qm94
OworICAgICAgICAgICAgICAgIGNsb3Nlc3REaXN0YW5jZUJveCA9IGJveDsKICAgICAgICAgICAg
ICAgICBjbG9zZXN0RGlzdGFuY2VGcmFnbWVudCA9ICZmcmFnbWVudDsKICAgICAgICAgICAgICAg
ICBjbG9zZXN0RGlzdGFuY2VQb3NpdGlvbiA9IGZyYWdtZW50UmVjdC54KCk7CiAgICAgICAgICAg
ICB9CkBAIC0yNTEsNCArMjQ4LDkgQEAgdm9pZCBSZW5kZXJTVkdJbmxpbmVUZXh0Ojpjb21wdXRl
TmV3U2NhbGVkRm9udEZvclN0eWxlKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGUKICAgICBzY2Fs
ZWRGb250LnVwZGF0ZSgmcmVuZGVyZXIuZG9jdW1lbnQoKS5mb250U2VsZWN0b3IoKSk7CiB9CiAK
K1NWR0lubGluZVRleHRCb3gqIFJlbmRlclNWR0lubGluZVRleHQ6OmZpcnN0VGV4dEJveCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGRvd25jYXN0PFNWR0lubGluZVRleHRCb3g+KFJlbmRlclRleHQ6
OmZpcnN0VGV4dEJveCgpKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuaAppbmRleCBkYzljZDkwNmY1ODYuLmZmNDYzYjhi
MDk2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJ
bmxpbmVUZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJ
bmxpbmVUZXh0LmgKQEAgLTQ4LDYgKzQ4LDggQEAgcHVibGljOgogICAgIC8vIFByZXNlcnZlcyBm
bG9hdGluZyBwb2ludCBwcmVjaXNpb24gZm9yIHRoZSB1c2UgaW4gRFJULiBJdCBrbm93cyBob3cg
dG8gcm91bmQgYW5kIGRvZXMgYSBiZXR0ZXIgam9iIHRoYW4gZW5jbG9zaW5nSW50UmVjdC4KICAg
ICBGbG9hdFJlY3QgZmxvYXRMaW5lc0JvdW5kaW5nQm94KCkgY29uc3Q7CiAKKyAgICBTVkdJbmxp
bmVUZXh0Qm94KiBmaXJzdFRleHRCb3goKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBjb25zdCBj
aGFyKiByZW5kZXJOYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIlJlbmRlclNWR0lubGlu
ZVRleHQiOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
SW5saW5lRmxvd0JveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGlu
ZUZsb3dCb3guY3BwCmluZGV4IDFlNjc5Y2E4NWY4OC4uMmI0OTcxNzA4Nzg1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZUZsb3dCb3guY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lRmxvd0JveC5jcHAKQEAgLTYy
LDEwICs2MiwxNSBAQCB2b2lkIFNWR0lubGluZUZsb3dCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZQogRmxvYXRSZWN0IFNWR0lubGlu
ZUZsb3dCb3g6OmNhbGN1bGF0ZUJvdW5kYXJpZXMoKSBjb25zdAogewogICAgIEZsb2F0UmVjdCBj
aGlsZFJlY3Q7Ci0gICAgZm9yIChJbmxpbmVCb3gqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGls
ZDsgY2hpbGQgPSBjaGlsZC0+bmV4dE9uTGluZSgpKSB7Ci0gICAgICAgIGlmICghY2hpbGQtPmlz
U1ZHSW5saW5lVGV4dEJveCgpICYmICFjaGlsZC0+aXNTVkdJbmxpbmVGbG93Qm94KCkpCisgICAg
Zm9yIChhdXRvKiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5l
eHRPbkxpbmUoKSkgeworICAgICAgICBpZiAoaXM8U1ZHSW5saW5lVGV4dEJveD4oY2hpbGQpKSB7
CisgICAgICAgICAgICBjaGlsZFJlY3QudW5pdGUoZG93bmNhc3Q8U1ZHSW5saW5lVGV4dEJveD4o
KmNoaWxkKS5jYWxjdWxhdGVCb3VuZGFyaWVzKCkpOworICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGlzPFNWR0lubGluZUZsb3dCb3g+KGNoaWxkKSkgeworICAg
ICAgICAgICAgY2hpbGRSZWN0LnVuaXRlKGRvd25jYXN0PFNWR0lubGluZUZsb3dCb3g+KCpjaGls
ZCkuY2FsY3VsYXRlQm91bmRhcmllcygpKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBjaGlsZFJlY3QudW5pdGUoY2hpbGQtPmNhbGN1bGF0ZUJvdW5kYXJpZXMoKSk7CisgICAgICAg
IH0KICAgICB9CiAgICAgcmV0dXJuIGNoaWxkUmVjdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lRmxvd0JveC5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVGbG93Qm94LmgKaW5kZXggNzNmODBhYzkzMjNjLi45NzBk
M2UwNjAyYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5s
aW5lRmxvd0JveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5l
Rmxvd0JveC5oCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKIAogICAgIFJlbmRlclNWR0lubGlu
ZSYgcmVuZGVyZXIoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJTVkdJbmxpbmUmPihJbmxp
bmVGbG93Qm94OjpyZW5kZXJlcigpKTsgfQogCi0gICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUJvdW5k
YXJpZXMoKSBjb25zdCBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlQm91bmRhcmll
cygpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRMb2dpY2FsSGVpZ2h0KGZsb2F0IGgpIHsgbV9sb2dp
Y2FsSGVpZ2h0ID0gaDsgfQogICAgIHZvaWQgcGFpbnRTZWxlY3Rpb25CYWNrZ3JvdW5kKFBhaW50
SW5mbyYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxp
bmVUZXh0Qm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRC
b3guaAppbmRleCBmZGUxZjM4ZWVlNmQuLmRjZWYzZTJmZTg5YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmgKQEAgLTI0LDEyICsyNCwxMiBA
QAogI2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKICNpbmNsdWRlICJSZW5kZXJTVkdJbmxpbmVU
ZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJTVkdUZXh0
RnJhZ21lbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBSZW5kZXJTVkdSZXNv
dXJjZTsKIGNsYXNzIFNWR1Jvb3RJbmxpbmVCb3g7Ci1zdHJ1Y3QgU1ZHVGV4dEZyYWdtZW50Owog
CiBjbGFzcyBTVkdJbmxpbmVUZXh0Qm94IGZpbmFsIDogcHVibGljIElubGluZVRleHRCb3ggewog
ICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoU1ZHSW5saW5lVGV4dEJveCk7CkBAIC01Miw3ICs1
Miw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgbWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJhZ21l
bnRDb29yZGluYXRlcyhjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCB1bnNpZ25lZCYgc3RhcnRQb3Np
dGlvbiwgdW5zaWduZWQmIGVuZFBvc2l0aW9uKSBjb25zdDsKIAotICAgIEZsb2F0UmVjdCBjYWxj
dWxhdGVCb3VuZGFyaWVzKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0
ZUJvdW5kYXJpZXMoKSBjb25zdDsKIAogICAgIHZvaWQgY2xlYXJUZXh0RnJhZ21lbnRzKCkgeyBt
X3RleHRGcmFnbWVudHMuY2xlYXIoKTsgfQogICAgIFZlY3RvcjxTVkdUZXh0RnJhZ21lbnQ+JiB0
ZXh0RnJhZ21lbnRzKCkgeyByZXR1cm4gbV90ZXh0RnJhZ21lbnRzOyB9CkBAIC02OSw2ICs2OSw4
IEBAIHB1YmxpYzoKICAgICAKICAgICBPcHRpb25TZXQ8UmVuZGVyU1ZHUmVzb3VyY2VNb2RlPiBw
YWludGluZ1Jlc291cmNlTW9kZSgpIGNvbnN0IHsgcmV0dXJuIE9wdGlvblNldDxSZW5kZXJTVkdS
ZXNvdXJjZU1vZGU+Ojpmcm9tUmF3KG1fcGFpbnRpbmdSZXNvdXJjZU1vZGUpOyB9CiAgICAgdm9p
ZCBzZXRQYWludGluZ1Jlc291cmNlTW9kZShPcHRpb25TZXQ8UmVuZGVyU1ZHUmVzb3VyY2VNb2Rl
PiBtb2RlKSB7IG1fcGFpbnRpbmdSZXNvdXJjZU1vZGUgPSBtb2RlLnRvUmF3KCk7IH0KKworICAg
IFNWR0lubGluZVRleHRCb3gqIG5leHRUZXh0Qm94KCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8
U1ZHSW5saW5lVGV4dEJveD4oSW5saW5lVGV4dEJveDo6bmV4dFRleHRCb3goKSk7IH0KICAgICAK
IHByaXZhdGU6CiAgICAgYm9vbCBpc1NWR0lubGluZVRleHRCb3goKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiB0cnVlOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>413046</attachid>
            <date>2020-11-03 04:48:34 -0800</date>
            <delta_ts>2020-11-03 05:31:49 -0800</delta_ts>
            <desc>patch</desc>
            <filename>lfc-absoluteQuads-3.patch</filename>
            <type>text/plain</type>
            <size>19623</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyNjgzMTJiNGM2NzIuLjlkMWU0MmYxODZmZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDQ2IEBACisyMDIwLTExLTAzICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNv
bT4KKworICAgICAgICBbTEZDXVtJbnRlZ3JhdGlvbl0gUmVuZGVyVGV4dDo6YWJzb2x1dGVRdWFk
cyBzaG91bGQgdXNlIGl0ZXJhdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMTg1MDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVCb3guaDoKKyAgICAgICAgKFdlYkNvcmU6
OklubGluZUJveDo6Y2FsY3VsYXRlQm91bmRhcmllcyBjb25zdCk6IERlbGV0ZWQuCisKKyAgICAg
ICAgVGhpcyBmdW5jdGlvbiBpcyBTVkctc3BlY2lmaWMuCisgICAgICAgIFRvIHJlZHVjZSBjb25m
dXNpb24sIG1ha2UgaXQgbm9uLXZpcnR1YWwgYW5kIGF2YWlsYWJsZSBpbiBTVkcgaW5saW5lIGJv
eCBjbGFzc2VzIG9ubHkuCisKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJv
dW5kYXJpZXNGb3JUZXh0UnVuKToKKyAgICAgICAgKFdlYkNvcmU6OmVsbGlwc2lzUmVjdEZvclRl
eHRSdW4pOgorICAgICAgICAoV2ViQ29yZTo6Y29sbGVjdEFic29sdXRlUXVhZHMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6YWJzb2x1dGVRdWFkc0NsaXBwZWRUb0VsbGlwc2lzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmFic29sdXRlUXVhZHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6YWJzb2x1dGVRdWFkc0ZvclJhbmdlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmNvbGxlY3RTZWxlY3Rpb25SZWN0
c0ZvckxpbmVCb3hlcyk6CisKKyAgICAgICAgQWxzbyBpbmxpbmUgc2VsZWN0aW9uUmVjdEZvclJh
bmdlL2NvbGxlY3RTZWxlY3Rpb25SZWN0c0ZvclJhbmdlIHRvIHRoZSBvbmx5IGNhbGxlciBoZXJl
IGFuZCBtYWtlIGl0IHVzZSBpdGVyYXRvci4KKworICAgICAgICAoV2ViQ29yZTo6Y29sbGVjdEFi
c29sdXRlUXVhZHNGb3JOb25Db21wbGV4UGF0aHMpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVsbGlwc2lz
UmVjdEZvckJveCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0TGluZUJv
eGVzOjpzZWxlY3Rpb25SZWN0Rm9yUmFuZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGV4dExpbmVCb3hlczo6Y29sbGVjdFNlbGVjdGlvblJlY3RzRm9yUmFuZ2UpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dExpbmVCb3hlczo6YWJzb2x1dGVRdWFk
cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRMaW5lQm94
ZXMuaDoKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdJbmxpbmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0lubGluZVRl
eHQ6OmZsb2F0TGluZXNCb3VuZGluZ0JveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdJbmxpbmVUZXh0Ojpwb3NpdGlvbkZvclBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR0lubGluZVRleHQ6OmZpcnN0VGV4dEJveCBjb25zdCk6CisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9T
VkdJbmxpbmVGbG93Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZUZsb3dCb3g6
OmNhbGN1bGF0ZUJvdW5kYXJpZXMgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZH
SW5saW5lRmxvd0JveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJv
eC5oOgorCiAyMDIwLTExLTAyICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAg
ICAgICAgQ3Jhc2ggdW5kZXIgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c2NoZWR1bGVUYXNr
VG9EaXNwYXRjaENvbnRleHRMb3N0RXZlbnQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZUJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJv
eC5oCmluZGV4IGJlY2RmY2U3NmNiMy4uMGQwMDU3ZDgwOTFlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZUJveC5oCkBAIC0xMDQsMTIgKzEwNCw2IEBAIHB1YmxpYzoKICAgICBib29sIGlz
SG9yaXpvbnRhbCgpIGNvbnN0IHsgcmV0dXJuIG1fYml0ZmllbGRzLmlzSG9yaXpvbnRhbCgpOyB9
CiAgICAgdm9pZCBzZXRJc0hvcml6b250YWwoYm9vbCBpc0hvcml6b250YWwpIHsgbV9iaXRmaWVs
ZHMuc2V0SXNIb3Jpem9udGFsKGlzSG9yaXpvbnRhbCk7IH0KIAotICAgIHZpcnR1YWwgRmxvYXRS
ZWN0IGNhbGN1bGF0ZUJvdW5kYXJpZXMoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLSAgICB9Ci0KICAgICBi
b29sIGlzQ29uc3RydWN0ZWQoKSB7IHJldHVybiBtX2JpdGZpZWxkcy5jb25zdHJ1Y3RlZCgpOyB9
CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnN0cnVjdGVkKCkgeyBtX2JpdGZpZWxkcy5zZXRDb25z
dHJ1Y3RlZCh0cnVlKTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lVGV4dEJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3gu
aAppbmRleCA4NjdjZmQ0MTY1OTkuLmU0MDI2MjQ4ZWIyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lVGV4dEJveC5oCkBAIC0xMTYsOCArMTE2LDYgQEAgcHJpdmF0ZToKICAgICBM
YXlvdXRVbml0IHNlbGVjdGlvbkhlaWdodCgpIGNvbnN0OwogCiBwdWJsaWM6Ci0gICAgRmxvYXRS
ZWN0IGNhbGN1bGF0ZUJvdW5kYXJpZXMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBGbG9hdFJl
Y3QoeCgpLCB5KCksIHdpZHRoKCksIGhlaWdodCgpKTsgfQotCiAgICAgdmlydHVhbCBMYXlvdXRS
ZWN0IGxvY2FsU2VsZWN0aW9uUmVjdCh1bnNpZ25lZCBzdGFydFBvcywgdW5zaWduZWQgZW5kUG9z
KSBjb25zdDsKICAgICBib29sIGlzU2VsZWN0ZWQodW5zaWduZWQgc3RhcnRQb3NpdGlvbiwgdW5z
aWduZWQgZW5kUG9zaXRpb24pIGNvbnN0OwogICAgIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWdu
ZWQ+IHNlbGVjdGlvblN0YXJ0RW5kKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dC5jcHAKaW5kZXggM2NiYmNlM2Y2ZGE0Li5mZGFhZDkzODEzNzEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRl
ICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJSZW5k
ZXJlZERvY3VtZW50TWFya2VyLmgiCisjaW5jbHVkZSAiU1ZHSW5saW5lVGV4dEJveC5oIgogI2lu
Y2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUgIlRleHRSZXNv
dXJjZURlY29kZXIuaCIKQEAgLTM5NCwzMyArMzk1LDc2IEBAIHZvaWQgUmVuZGVyVGV4dDo6Y29s
bGVjdFNlbGVjdGlvblJlY3RzKFZlY3RvcjxTZWxlY3Rpb25SZWN0PiYgcmVjdHMsIHVuc2lnbmVk
IHN0CiB9CiAjZW5kaWYKIAotc3RhdGljIFZlY3RvcjxGbG9hdFF1YWQ+IGNvbGxlY3RBYnNvbHV0
ZVF1YWRzRm9yTm9uQ29tcGxleFBhdGhzKGNvbnN0IFJlbmRlclRleHQmIHRleHRSZW5kZXJlciwg
Ym9vbCogd2FzRml4ZWQpCitzdGF0aWMgRmxvYXRSZWN0IGJvdW5kYXJpZXNGb3JUZXh0UnVuKGNv
bnN0IExheW91dEludGVncmF0aW9uOjpQYXRoVGV4dFJ1biYgcnVuKQogewotICAgIC8vIEZJWE1F
OiBUaGlzIGdlbmVyaWMgZnVuY3Rpb24gZG9lc24ndCBjdXJyZW50bHkgY292ZXIgZXZlcnl0aGlu
ZyB0aGF0IGlzIG5lZWRlZCBmb3IgdGhlIGNvbXBsZXggbGluZSBsYXlvdXQgcGF0aC4KLSAgICBB
U1NFUlQoIXRleHRSZW5kZXJlci51c2VzQ29tcGxleExpbmVMYXlvdXRQYXRoKCkpOworICAgIGlm
IChpczxTVkdJbmxpbmVUZXh0Qm94PihydW4ubGVnYWN5SW5saW5lQm94KCkpKQorICAgICAgICBy
ZXR1cm4gZG93bmNhc3Q8U1ZHSW5saW5lVGV4dEJveD4oKnJ1bi5sZWdhY3lJbmxpbmVCb3goKSku
Y2FsY3VsYXRlQm91bmRhcmllcygpOwogCisgICAgcmV0dXJuIHJ1bi5yZWN0KCk7Cit9CisKK3N0
YXRpYyBJbnRSZWN0IGVsbGlwc2lzUmVjdEZvclRleHRSdW4oY29uc3QgTGF5b3V0SW50ZWdyYXRp
b246OlBhdGhUZXh0UnVuJiBydW4sIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQpCit7Cisg
ICAgLy8gRklYTUU6IE5vIGVsbGlwc2lzIHN1cHBvcnQgaW4gbW9kZXJuIHBhdGggeWV0LgorICAg
IGlmICghcnVuLmxlZ2FjeUlubGluZUJveCgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAg
YXV0byYgYm94ID0gKnJ1bi5sZWdhY3lJbmxpbmVCb3goKTsKKworICAgIHVuc2lnbmVkIHNob3J0
IHRydW5jYXRpb24gPSBib3gudHJ1bmNhdGlvbigpOworICAgIGlmICh0cnVuY2F0aW9uID09IGNO
b1RydW5jYXRpb24pCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBhdXRvIGVsbGlwc2lzID0g
Ym94LnJvb3QoKS5lbGxpcHNpc0JveCgpOworICAgIGlmICghZWxsaXBzaXMpCisgICAgICAgIHJl
dHVybiB7IH07CisKKyAgICBpbnQgZWxsaXBzaXNTdGFydFBvc2l0aW9uID0gc3RkOjptYXg8aW50
PihzdGFydCAtIGJveC5zdGFydCgpLCAwKTsKKyAgICBpbnQgZWxsaXBzaXNFbmRQb3NpdGlvbiA9
IHN0ZDo6bWluPGludD4oZW5kIC0gYm94LnN0YXJ0KCksIGJveC5sZW4oKSk7CisKKyAgICAvLyBU
aGUgZWxsaXBzaXMgc2hvdWxkIGJlIGNvbnNpZGVyZWQgdG8gYmUgc2VsZWN0ZWQgaWYgdGhlIGVu
ZCBvZgorICAgIC8vIHRoZSBzZWxlY3Rpb24gaXMgcGFzdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0
cnVuY2F0aW9uIGFuZCB0aGUKKyAgICAvLyBiZWdpbm5pbmcgb2YgdGhlIHNlbGVjdGlvbiBpcyBi
ZWZvcmUgb3IgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgdHJ1bmNhdGlvbi4KKyAgICBpZiAoZWxs
aXBzaXNFbmRQb3NpdGlvbiA8IHRydW5jYXRpb24gJiYgZWxsaXBzaXNTdGFydFBvc2l0aW9uID4g
dHJ1bmNhdGlvbikKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiBlbGxpcHNpcy0+
c2VsZWN0aW9uUmVjdCgpOworfQorCitlbnVtIGNsYXNzIENsaXBwaW5nT3B0aW9uIHsgTm9DbGlw
cGluZywgQ2xpcFRvRWxsaXBzaXMgfTsKKworLy8gRklYTUU6IFVuaWZ5IHdpdGggYWJzb2x1dGVR
dWFkc0ZvclJhbmdlLgorc3RhdGljIFZlY3RvcjxGbG9hdFF1YWQ+IGNvbGxlY3RBYnNvbHV0ZVF1
YWRzKGNvbnN0IFJlbmRlclRleHQmIHRleHRSZW5kZXJlciwgYm9vbCogd2FzRml4ZWQsIENsaXBw
aW5nT3B0aW9uIGNsaXBwaW5nKQorewogICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOwotICAg
IGZvciAoYXV0byYgcnVuIDogTGF5b3V0SW50ZWdyYXRpb246OnRleHRSdW5zRm9yKHRleHRSZW5k
ZXJlcikpCi0gICAgICAgIHF1YWRzLmFwcGVuZCh0ZXh0UmVuZGVyZXIubG9jYWxUb0Fic29sdXRl
UXVhZChGbG9hdFF1YWQocnVuLnJlY3QoKSksIFVzZVRyYW5zZm9ybXMsIHdhc0ZpeGVkKSk7Cisg
ICAgZm9yIChhdXRvJiBydW4gOiBMYXlvdXRJbnRlZ3JhdGlvbjo6dGV4dFJ1bnNGb3IodGV4dFJl
bmRlcmVyKSkgeworICAgICAgICBhdXRvIGJvdW5kYXJpZXMgPSBib3VuZGFyaWVzRm9yVGV4dFJ1
bihydW4pOworCisgICAgICAgIC8vIFNob3J0ZW4gdGhlIHdpZHRoIG9mIHRoaXMgdGV4dCBib3gg
aWYgaXQgZW5kcyBpbiBhbiBlbGxpcHNpcy4KKyAgICAgICAgYXV0byBlbGxpcHNpc1JlY3QgPSBb
Jl0geworICAgICAgICAgICAgaWYgKGNsaXBwaW5nID09IENsaXBwaW5nT3B0aW9uOjpDbGlwVG9F
bGxpcHNpcykKKyAgICAgICAgICAgICAgICByZXR1cm4gZWxsaXBzaXNSZWN0Rm9yVGV4dFJ1bihy
dW4sIDAsIHRleHRSZW5kZXJlci50ZXh0KCkubGVuZ3RoKCkpOworICAgICAgICAgICAgcmV0dXJu
IEludFJlY3QgeyB9OworICAgICAgICB9KCk7CisgICAgICAgIGlmICghZWxsaXBzaXNSZWN0Lmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgaWYgKHRleHRSZW5kZXJlci5zdHlsZSgpLmlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkpCisgICAgICAgICAgICAgICAgYm91bmRhcmllcy5zZXRXaWR0aChl
bGxpcHNpc1JlY3QubWF4WCgpIC0gYm91bmRhcmllcy54KCkpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIGJvdW5kYXJpZXMuc2V0SGVpZ2h0KGVsbGlwc2lzUmVjdC5tYXhZKCkg
LSBib3VuZGFyaWVzLnkoKSk7CisgICAgICAgIH0KKyAgICAgICAgcXVhZHMuYXBwZW5kKHRleHRS
ZW5kZXJlci5sb2NhbFRvQWJzb2x1dGVRdWFkKGJvdW5kYXJpZXMsIFVzZVRyYW5zZm9ybXMsIHdh
c0ZpeGVkKSk7CisgICAgfQogICAgIHJldHVybiBxdWFkczsKIH0KIAogVmVjdG9yPEZsb2F0UXVh
ZD4gUmVuZGVyVGV4dDo6YWJzb2x1dGVRdWFkc0NsaXBwZWRUb0VsbGlwc2lzKCkgY29uc3QKIHsK
LSAgICBpZiAoIXVzZXNDb21wbGV4TGluZUxheW91dFBhdGgoKSkgewotICAgICAgICBBU1NFUlQo
c3R5bGUoKS50ZXh0T3ZlcmZsb3coKSAhPSBUZXh0T3ZlcmZsb3c6OkVsbGlwc2lzKTsKLSAgICAg
ICAgcmV0dXJuIGNvbGxlY3RBYnNvbHV0ZVF1YWRzRm9yTm9uQ29tcGxleFBhdGhzKCp0aGlzLCBu
dWxscHRyKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fbGluZUJveGVzLmFic29sdXRlUXVhZHMoKnRo
aXMsIG51bGxwdHIsIFJlbmRlclRleHRMaW5lQm94ZXM6OkNsaXBUb0VsbGlwc2lzKTsKKyAgICBy
ZXR1cm4gY29sbGVjdEFic29sdXRlUXVhZHMoKnRoaXMsIG51bGxwdHIsIENsaXBwaW5nT3B0aW9u
OjpDbGlwVG9FbGxpcHNpcyk7CiB9CiAKIHZvaWQgUmVuZGVyVGV4dDo6YWJzb2x1dGVRdWFkcyhW
ZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMsIGJvb2wqIHdhc0ZpeGVkKSBjb25zdAogewotICAgIGlm
ICghdXNlc0NvbXBsZXhMaW5lTGF5b3V0UGF0aCgpKSB7Ci0gICAgICAgIHF1YWRzLmFwcGVuZFZl
Y3Rvcihjb2xsZWN0QWJzb2x1dGVRdWFkc0Zvck5vbkNvbXBsZXhQYXRocygqdGhpcywgd2FzRml4
ZWQpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBxdWFkcy5hcHBlbmRWZWN0b3IobV9s
aW5lQm94ZXMuYWJzb2x1dGVRdWFkcygqdGhpcywgd2FzRml4ZWQsIFJlbmRlclRleHRMaW5lQm94
ZXM6Ok5vQ2xpcHBpbmcpKTsKKyAgICBxdWFkcy5hcHBlbmRWZWN0b3IoY29sbGVjdEFic29sdXRl
UXVhZHMoKnRoaXMsIHdhc0ZpeGVkLCBDbGlwcGluZ09wdGlvbjo6Tm9DbGlwcGluZykpOwogfQog
CiBzdGF0aWMgRmxvYXRSZWN0IGxvY2FsUXVhZEZvclRleHRSdW4oY29uc3QgTGF5b3V0SW50ZWdy
YXRpb246OlBhdGhUZXh0UnVuJiBydW4sIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQsIGJv
b2wgdXNlU2VsZWN0aW9uSGVpZ2h0KQpAQCAtNDYwLDExICs1MDQsNyBAQCBWZWN0b3I8RmxvYXRR
dWFkPiBSZW5kZXJUZXh0OjphYnNvbHV0ZVF1YWRzRm9yUmFuZ2UodW5zaWduZWQgc3RhcnQsIHVu
c2lnbmVkIGVuZAogICAgICAgICBpZiAoaWdub3JlRW1wdHlUZXh0U2VsZWN0aW9ucyAmJiAhcnVu
LmlzU2VsZWN0YWJsZShzdGFydCwgZW5kKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICBpZiAoc3RhcnQgPD0gcnVuLnN0YXJ0KCkgJiYgcnVuLmVuZCgpIDw9IGVuZCkgewotICAgICAg
ICAgICAgYXV0byBib3VuZGFyaWVzID0gWyZdIHsKLSAgICAgICAgICAgICAgICBpZiAocnVuLmxl
Z2FjeUlubGluZUJveCgpICYmIHJ1bi5sZWdhY3lJbmxpbmVCb3goKS0+aXNTVkdJbmxpbmVUZXh0
Qm94KCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBydW4ubGVnYWN5SW5saW5lQm94KCkt
PmNhbGN1bGF0ZUJvdW5kYXJpZXMoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcnVuLnJlY3Qo
KTsKLSAgICAgICAgICAgIH0oKTsKKyAgICAgICAgICAgIGF1dG8gYm91bmRhcmllcyA9IGJvdW5k
YXJpZXNGb3JUZXh0UnVuKHJ1bik7CiAKICAgICAgICAgICAgIGlmICh1c2VTZWxlY3Rpb25IZWln
aHQpIHsKICAgICAgICAgICAgICAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3QgPSBydW4uc2Vs
ZWN0aW9uUmVjdChzdGFydCwgZW5kKTsKQEAgLTE2MjEsMTQgKzE2NjEsMTggQEAgTGF5b3V0UmVj
dCBSZW5kZXJUZXh0Ojpjb2xsZWN0U2VsZWN0aW9uUmVjdHNGb3JMaW5lQm94ZXMoY29uc3QgUmVu
ZGVyTGF5ZXJNb2RlbE8KICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKIAogICAgIExheW91dFJl
Y3QgcmVzdWx0UmVjdDsKLSAgICBpZiAoIXJlY3RzKQotICAgICAgICByZXN1bHRSZWN0ID0gbV9s
aW5lQm94ZXMuc2VsZWN0aW9uUmVjdEZvclJhbmdlKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwot
ICAgIGVsc2UgewotICAgICAgICBtX2xpbmVCb3hlcy5jb2xsZWN0U2VsZWN0aW9uUmVjdHNGb3JS
YW5nZShzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCAqcmVjdHMpOwotICAgICAgICBmb3IgKGF1dG8m
IHJlY3QgOiAqcmVjdHMpIHsKLSAgICAgICAgICAgIHJlc3VsdFJlY3QudW5pdGUocmVjdCk7Ci0g
ICAgICAgICAgICByZWN0ID0gbG9jYWxUb0NvbnRhaW5lclF1YWQoRmxvYXRSZWN0KHJlY3QpLCBy
ZXBhaW50Q29udGFpbmVyKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwotICAgICAgICB9CisKKyAg
ICBmb3IgKGF1dG8mIHJ1biA6IExheW91dEludGVncmF0aW9uOjp0ZXh0UnVuc0ZvcigqdGhpcykp
IHsKKyAgICAgICAgTGF5b3V0UmVjdCByZWN0OworICAgICAgICByZWN0LnVuaXRlKHJ1bi5zZWxl
Y3Rpb25SZWN0KHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpKTsKKyAgICAgICAgcmVjdC51bml0ZShl
bGxpcHNpc1JlY3RGb3JUZXh0UnVuKHJ1biwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCkpOworICAg
ICAgICBpZiAocmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICByZXN1bHRSZWN0LnVuaXRlKHJlY3QpOworCisgICAgICAgIGlmIChyZWN0cykKKyAgICAgICAg
ICAgIHJlY3RzLT5hcHBlbmQobG9jYWxUb0NvbnRhaW5lclF1YWQoRmxvYXRSZWN0KHJlY3QpLCBy
ZXBhaW50Q29udGFpbmVyKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpKTsKICAgICB9CiAKICAgICBp
ZiAoY2xpcFRvVmlzaWJsZUNvbnRlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dExpbmVCb3hlcy5jcHAKaW5kZXggYWRkYmY1OGZkZDQzLi4wOWQ0YzkxNzE3NzIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVz
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5j
cHAKQEAgLTE5NCw2OSArMTk0LDYgQEAgdm9pZCBSZW5kZXJUZXh0TGluZUJveGVzOjpzZXRTZWxl
Y3Rpb25TdGF0ZShSZW5kZXJUZXh0JiByZW5kZXJlciwgUmVuZGVyT2JqZWN0OjoKICAgICB9CiB9
CiAKLXN0YXRpYyBJbnRSZWN0IGVsbGlwc2lzUmVjdEZvckJveChjb25zdCBJbmxpbmVUZXh0Qm94
JiBib3gsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQpCi17Ci0gICAgdW5zaWduZWQgc2hv
cnQgdHJ1bmNhdGlvbiA9IGJveC50cnVuY2F0aW9uKCk7Ci0gICAgaWYgKHRydW5jYXRpb24gPT0g
Y05vVHJ1bmNhdGlvbikKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLQotICAgIGF1dG8gZWxs
aXBzaXMgPSBib3gucm9vdCgpLmVsbGlwc2lzQm94KCk7Ci0gICAgaWYgKCFlbGxpcHNpcykKLSAg
ICAgICAgcmV0dXJuIEludFJlY3QoKTsKLSAgICAKLSAgICBJbnRSZWN0IHJlY3Q7Ci0gICAgaW50
IGVsbGlwc2lzU3RhcnRQb3NpdGlvbiA9IHN0ZDo6bWF4PGludD4oc3RhcnQgLSBib3guc3RhcnQo
KSwgMCk7Ci0gICAgaW50IGVsbGlwc2lzRW5kUG9zaXRpb24gPSBzdGQ6Om1pbjxpbnQ+KGVuZCAt
IGJveC5zdGFydCgpLCBib3gubGVuKCkpOwotICAgIAotICAgIC8vIFRoZSBlbGxpcHNpcyBzaG91
bGQgYmUgY29uc2lkZXJlZCB0byBiZSBzZWxlY3RlZCBpZiB0aGUgZW5kIG9mCi0gICAgLy8gdGhl
IHNlbGVjdGlvbiBpcyBwYXN0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHRydW5jYXRpb24gYW5kIHRo
ZQotICAgIC8vIGJlZ2lubmluZyBvZiB0aGUgc2VsZWN0aW9uIGlzIGJlZm9yZSBvciBhdCB0aGUg
YmVnaW5uaW5nIG9mIHRoZSB0cnVuY2F0aW9uLgotICAgIGlmIChlbGxpcHNpc0VuZFBvc2l0aW9u
IDwgdHJ1bmNhdGlvbiAmJiBlbGxpcHNpc1N0YXJ0UG9zaXRpb24gPiB0cnVuY2F0aW9uKQotICAg
ICAgICByZXR1cm4gSW50UmVjdCgpOwotICAgIHJldHVybiBlbGxpcHNpcy0+c2VsZWN0aW9uUmVj
dCgpOwotfQotCi1MYXlvdXRSZWN0IFJlbmRlclRleHRMaW5lQm94ZXM6OnNlbGVjdGlvblJlY3RG
b3JSYW5nZSh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kKQotewotICAgIExheW91dFJlY3Qg
cmVjdDsKLSAgICBmb3IgKGF1dG8qIGJveCA9IG1fZmlyc3Q7IGJveDsgYm94ID0gYm94LT5uZXh0
VGV4dEJveCgpKSB7Ci0gICAgICAgIHJlY3QudW5pdGUoYm94LT5sb2NhbFNlbGVjdGlvblJlY3Qo
c3RhcnQsIGVuZCkpOwotICAgICAgICByZWN0LnVuaXRlKGVsbGlwc2lzUmVjdEZvckJveCgqYm94
LCBzdGFydCwgZW5kKSk7Ci0gICAgfQotICAgIHJldHVybiByZWN0OwotfQotCi12b2lkIFJlbmRl
clRleHRMaW5lQm94ZXM6OmNvbGxlY3RTZWxlY3Rpb25SZWN0c0ZvclJhbmdlKHVuc2lnbmVkIHN0
YXJ0LCB1bnNpZ25lZCBlbmQsIFZlY3RvcjxMYXlvdXRSZWN0PiYgcmVjdHMpCi17Ci0gICAgZm9y
IChhdXRvKiBib3ggPSBtX2ZpcnN0OyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkgewot
ICAgICAgICBMYXlvdXRSZWN0IHJlY3Q7Ci0gICAgICAgIHJlY3QudW5pdGUoYm94LT5sb2NhbFNl
bGVjdGlvblJlY3Qoc3RhcnQsIGVuZCkpOwotICAgICAgICByZWN0LnVuaXRlKGVsbGlwc2lzUmVj
dEZvckJveCgqYm94LCBzdGFydCwgZW5kKSk7Ci0gICAgICAgIGlmICghcmVjdC5zaXplKCkuaXNF
bXB0eSgpKQotICAgICAgICAgICAgcmVjdHMuYXBwZW5kKHJlY3QpOwotICAgIH0KLX0KLQotVmVj
dG9yPEZsb2F0UXVhZD4gUmVuZGVyVGV4dExpbmVCb3hlczo6YWJzb2x1dGVRdWFkcyhjb25zdCBS
ZW5kZXJUZXh0JiByZW5kZXJlciwgYm9vbCogd2FzRml4ZWQsIENsaXBwaW5nT3B0aW9uIG9wdGlv
bikgY29uc3QKLXsKLSAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsKLSAgICBmb3IgKGF1dG8q
IGJveCA9IG1fZmlyc3Q7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpKSB7Ci0gICAgICAg
IEZsb2F0UmVjdCBib3VuZGFyaWVzID0gYm94LT5jYWxjdWxhdGVCb3VuZGFyaWVzKCk7Ci0KLSAg
ICAgICAgLy8gU2hvcnRlbiB0aGUgd2lkdGggb2YgdGhpcyB0ZXh0IGJveCBpZiBpdCBlbmRzIGlu
IGFuIGVsbGlwc2lzLgotICAgICAgICAvLyBGSVhNRTogZWxsaXBzaXNSZWN0Rm9yQm94IHNob3Vs
ZCBzd2l0Y2ggdG8gcmV0dXJuIEZsb2F0UmVjdCBzb29uIHdpdGggdGhlIHN1YnBpeGVsbGF5b3V0
IGJyYW5jaC4KLSAgICAgICAgSW50UmVjdCBlbGxpcHNpc1JlY3QgPSAob3B0aW9uID09IENsaXBU
b0VsbGlwc2lzKSA/IGVsbGlwc2lzUmVjdEZvckJveCgqYm94LCAwLCByZW5kZXJlci50ZXh0KCku
bGVuZ3RoKCkpIDogSW50UmVjdCgpOwotICAgICAgICBpZiAoIWVsbGlwc2lzUmVjdC5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgIGlmIChyZW5kZXJlci5zdHlsZSgpLmlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkpCi0gICAgICAgICAgICAgICAgYm91bmRhcmllcy5zZXRXaWR0aChlbGxpcHNpc1Jl
Y3QubWF4WCgpIC0gYm91bmRhcmllcy54KCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIGJvdW5kYXJpZXMuc2V0SGVpZ2h0KGVsbGlwc2lzUmVjdC5tYXhZKCkgLSBib3VuZGFy
aWVzLnkoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcXVhZHMuYXBwZW5kKHJlbmRlcmVyLmxvY2Fs
VG9BYnNvbHV0ZVF1YWQoYm91bmRhcmllcywgVXNlVHJhbnNmb3Jtcywgd2FzRml4ZWQpKTsKLSAg
ICB9Ci0gICAgcmV0dXJuIHF1YWRzOwotfQotCiB2b2lkIFJlbmRlclRleHRMaW5lQm94ZXM6OmRp
cnR5QWxsKCkKIHsKICAgICBmb3IgKGF1dG8qIGJveCA9IG1fZmlyc3Q7IGJveDsgYm94ID0gYm94
LT5uZXh0VGV4dEJveCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRMaW5lQm94ZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
TGluZUJveGVzLmgKaW5kZXggZTJmOWY1NTgwNmFlLi42ZWFiMTM3M2Q0MmIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRMaW5lQm94ZXMuaApAQCAtNTcsMTQgKzU3
LDkgQEAgcHVibGljOgogICAgIElubGluZVRleHRCb3gqIGZpbmROZXh0KGludCBvZmZzZXQsIGlu
dCYgcG9zaXRpb24pIGNvbnN0OwogCiAgICAgdm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShSZW5kZXJU
ZXh0JiwgUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZSk7Ci0gICAgTGF5b3V0UmVjdCBzZWxl
Y3Rpb25SZWN0Rm9yUmFuZ2UodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCk7Ci0gICAgdm9p
ZCBjb2xsZWN0U2VsZWN0aW9uUmVjdHNGb3JSYW5nZSh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQg
ZW5kLCBWZWN0b3I8TGF5b3V0UmVjdD4mIHJlY3RzKTsKIAogICAgIExheW91dFJlY3QgdmlzdWFs
T3ZlcmZsb3dCb3VuZGluZ0JveChjb25zdCBSZW5kZXJUZXh0JikgY29uc3Q7CiAKLSAgICBlbnVt
IENsaXBwaW5nT3B0aW9uIHsgTm9DbGlwcGluZywgQ2xpcFRvRWxsaXBzaXMgfTsKLSAgICBWZWN0
b3I8RmxvYXRRdWFkPiBhYnNvbHV0ZVF1YWRzKGNvbnN0IFJlbmRlclRleHQmLCBib29sKiB3YXNG
aXhlZCwgQ2xpcHBpbmdPcHRpb24pIGNvbnN0OwotCiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICB+
UmVuZGVyVGV4dExpbmVCb3hlcygpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAppbmRleCBkMjM2NmZkNDNkNjku
LjQ1NTU3NzYxODBlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR0lubGluZVRleHQuY3BwCkBAIC0xNDIsOCArMTQyLDkgQEAgTGF5b3V0UmVjdCBS
ZW5kZXJTVkdJbmxpbmVUZXh0Ojpsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqIGJveCwgdW5zaWdu
ZWQgY2FyZXRPZmYKIEZsb2F0UmVjdCBSZW5kZXJTVkdJbmxpbmVUZXh0OjpmbG9hdExpbmVzQm91
bmRpbmdCb3goKSBjb25zdAogewogICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveDsKLSAgICBmb3Ig
KElubGluZVRleHRCb3gqIGJveCA9IGZpcnN0VGV4dEJveCgpOyBib3g7IGJveCA9IGJveC0+bmV4
dFRleHRCb3goKSkKKyAgICBmb3IgKGF1dG8qIGJveCA9IGZpcnN0VGV4dEJveCgpOyBib3g7IGJv
eCA9IGJveC0+bmV4dFRleHRCb3goKSkKICAgICAgICAgYm91bmRpbmdCb3gudW5pdGUoYm94LT5j
YWxjdWxhdGVCb3VuZGFyaWVzKCkpOworCiAgICAgcmV0dXJuIGJvdW5kaW5nQm94OwogfQogCkBA
IC0xODgsMTIgKzE4OSw4IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJTVkdJbmxpbmVUZXh0Ojpw
b3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCwKICAgICBTVkdJbmxpbmVU
ZXh0Qm94KiBjbG9zZXN0RGlzdGFuY2VCb3ggPSBudWxscHRyOwogCiAgICAgQWZmaW5lVHJhbnNm
b3JtIGZyYWdtZW50VHJhbnNmb3JtOwotICAgIGZvciAoSW5saW5lVGV4dEJveCogYm94ID0gZmly
c3RUZXh0Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpKSB7Ci0gICAgICAgIGlm
ICghaXM8U1ZHSW5saW5lVGV4dEJveD4oKmJveCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICBhdXRvJiB0ZXh0Qm94ID0gZG93bmNhc3Q8U1ZHSW5saW5lVGV4dEJveD4oKmJveCk7
Ci0gICAgICAgIFZlY3RvcjxTVkdUZXh0RnJhZ21lbnQ+JiBmcmFnbWVudHMgPSB0ZXh0Qm94LnRl
eHRGcmFnbWVudHMoKTsKKyAgICBmb3IgKGF1dG8qIGJveCA9IGZpcnN0VGV4dEJveCgpOyBib3g7
IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkgeworICAgICAgICBWZWN0b3I8U1ZHVGV4dEZyYWdt
ZW50PiYgZnJhZ21lbnRzID0gYm94LT50ZXh0RnJhZ21lbnRzKCk7CiAKICAgICAgICAgdW5zaWdu
ZWQgdGV4dEZyYWdtZW50c1NpemUgPSBmcmFnbWVudHMuc2l6ZSgpOwogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgdGV4dEZyYWdtZW50c1NpemU7ICsraSkgewpAQCAtMjA4LDcgKzIw
NSw3IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJTVkdJbmxpbmVUZXh0Ojpwb3NpdGlvbkZvclBv
aW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCwKIAogICAgICAgICAgICAgaWYgKGRpc3RhbmNl
IDwgY2xvc2VzdERpc3RhbmNlKSB7CiAgICAgICAgICAgICAgICAgY2xvc2VzdERpc3RhbmNlID0g
ZGlzdGFuY2U7Ci0gICAgICAgICAgICAgICAgY2xvc2VzdERpc3RhbmNlQm94ID0gJnRleHRCb3g7
CisgICAgICAgICAgICAgICAgY2xvc2VzdERpc3RhbmNlQm94ID0gYm94OwogICAgICAgICAgICAg
ICAgIGNsb3Nlc3REaXN0YW5jZUZyYWdtZW50ID0gJmZyYWdtZW50OwogICAgICAgICAgICAgICAg
IGNsb3Nlc3REaXN0YW5jZVBvc2l0aW9uID0gZnJhZ21lbnRSZWN0LngoKTsKICAgICAgICAgICAg
IH0KQEAgLTI1MSw0ICsyNDgsOSBAQCB2b2lkIFJlbmRlclNWR0lubGluZVRleHQ6OmNvbXB1dGVO
ZXdTY2FsZWRGb250Rm9yU3R5bGUoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZQogICAgIHNjYWxl
ZEZvbnQudXBkYXRlKCZyZW5kZXJlci5kb2N1bWVudCgpLmZvbnRTZWxlY3RvcigpKTsKIH0KIAor
U1ZHSW5saW5lVGV4dEJveCogUmVuZGVyU1ZHSW5saW5lVGV4dDo6Zmlyc3RUZXh0Qm94KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gZG93bmNhc3Q8U1ZHSW5saW5lVGV4dEJveD4oUmVuZGVyVGV4dDo6
Zmlyc3RUZXh0Qm94KCkpOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5oCmluZGV4IGRjOWNkOTA2ZjU4Ni4uZmY0NjNiOGIw
OTY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lu
bGluZVRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lu
bGluZVRleHQuaApAQCAtNDgsNiArNDgsOCBAQCBwdWJsaWM6CiAgICAgLy8gUHJlc2VydmVzIGZs
b2F0aW5nIHBvaW50IHByZWNpc2lvbiBmb3IgdGhlIHVzZSBpbiBEUlQuIEl0IGtub3dzIGhvdyB0
byByb3VuZCBhbmQgZG9lcyBhIGJldHRlciBqb2IgdGhhbiBlbmNsb3NpbmdJbnRSZWN0LgogICAg
IEZsb2F0UmVjdCBmbG9hdExpbmVzQm91bmRpbmdCb3goKSBjb25zdDsKIAorICAgIFNWR0lubGlu
ZVRleHRCb3gqIGZpcnN0VGV4dEJveCgpIGNvbnN0OworCiBwcml2YXRlOgogICAgIGNvbnN0IGNo
YXIqIHJlbmRlck5hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiUmVuZGVyU1ZHSW5saW5l
VGV4dCI7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJ
bmxpbmVGbG93Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5l
Rmxvd0JveC5jcHAKaW5kZXggMWU2NzljYTg1Zjg4Li4yYjQ5NzE3MDg3ODUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lRmxvd0JveC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVGbG93Qm94LmNwcApAQCAtNjIs
MTAgKzYyLDE1IEBAIHZvaWQgU1ZHSW5saW5lRmxvd0JveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNlCiBGbG9hdFJlY3QgU1ZHSW5saW5l
Rmxvd0JveDo6Y2FsY3VsYXRlQm91bmRhcmllcygpIGNvbnN0CiB7CiAgICAgRmxvYXRSZWN0IGNo
aWxkUmVjdDsKLSAgICBmb3IgKElubGluZUJveCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxk
OyBjaGlsZCA9IGNoaWxkLT5uZXh0T25MaW5lKCkpIHsKLSAgICAgICAgaWYgKCFjaGlsZC0+aXNT
VkdJbmxpbmVUZXh0Qm94KCkgJiYgIWNoaWxkLT5pc1NWR0lubGluZUZsb3dCb3goKSkKKyAgICBm
b3IgKGF1dG8qIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4
dE9uTGluZSgpKSB7CisgICAgICAgIGlmIChpczxTVkdJbmxpbmVUZXh0Qm94PihjaGlsZCkpIHsK
KyAgICAgICAgICAgIGNoaWxkUmVjdC51bml0ZShkb3duY2FzdDxTVkdJbmxpbmVUZXh0Qm94Pigq
Y2hpbGQpLmNhbGN1bGF0ZUJvdW5kYXJpZXMoKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoaXM8U1ZHSW5saW5lRmxvd0JveD4oY2hpbGQpKSB7CisgICAg
ICAgICAgICBjaGlsZFJlY3QudW5pdGUoZG93bmNhc3Q8U1ZHSW5saW5lRmxvd0JveD4oKmNoaWxk
KS5jYWxjdWxhdGVCb3VuZGFyaWVzKCkpOwogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IGNoaWxkUmVjdC51bml0ZShjaGlsZC0+Y2FsY3VsYXRlQm91bmRhcmllcygpKTsKKyAgICAgICAg
fQogICAgIH0KICAgICByZXR1cm4gY2hpbGRSZWN0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVGbG93Qm94LmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR0lubGluZUZsb3dCb3guaAppbmRleCA3M2Y4MGFjOTMyM2MuLjk3MGQz
ZTA2MDJjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxp
bmVGbG93Qm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVG
bG93Qm94LmgKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogCiAgICAgUmVuZGVyU1ZHSW5saW5l
JiByZW5kZXJlcigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclNWR0lubGluZSY+KElubGlu
ZUZsb3dCb3g6OnJlbmRlcmVyKCkpOyB9CiAKLSAgICBGbG9hdFJlY3QgY2FsY3VsYXRlQm91bmRh
cmllcygpIGNvbnN0IG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVCb3VuZGFyaWVz
KCkgY29uc3Q7CiAKICAgICB2b2lkIHNldExvZ2ljYWxIZWlnaHQoZmxvYXQgaCkgeyBtX2xvZ2lj
YWxIZWlnaHQgPSBoOyB9CiAgICAgdm9pZCBwYWludFNlbGVjdGlvbkJhY2tncm91bmQoUGFpbnRJ
bmZvJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGlu
ZVRleHRCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJv
eC5oCmluZGV4IGZkZTFmMzhlZWU2ZC4uZGNlZjNlMmZlODliIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guaApAQCAtMjQsMTIgKzI0LDEyIEBA
CiAjaW5jbHVkZSAiSW5saW5lVGV4dEJveC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0lubGluZVRl
eHQuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgorI2luY2x1ZGUgIlNWR1RleHRG
cmFnbWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFJlbmRlclNWR1Jlc291
cmNlOwogY2xhc3MgU1ZHUm9vdElubGluZUJveDsKLXN0cnVjdCBTVkdUZXh0RnJhZ21lbnQ7CiAK
IGNsYXNzIFNWR0lubGluZVRleHRCb3ggZmluYWwgOiBwdWJsaWMgSW5saW5lVGV4dEJveCB7CiAg
ICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChTVkdJbmxpbmVUZXh0Qm94KTsKQEAgLTUyLDcgKzUy
LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBtYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVu
dENvb3JkaW5hdGVzKGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIHVuc2lnbmVkJiBzdGFydFBvc2l0
aW9uLCB1bnNpZ25lZCYgZW5kUG9zaXRpb24pIGNvbnN0OwogCi0gICAgRmxvYXRSZWN0IGNhbGN1
bGF0ZUJvdW5kYXJpZXMoKSBjb25zdCBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRl
Qm91bmRhcmllcygpIGNvbnN0OwogCiAgICAgdm9pZCBjbGVhclRleHRGcmFnbWVudHMoKSB7IG1f
dGV4dEZyYWdtZW50cy5jbGVhcigpOyB9CiAgICAgVmVjdG9yPFNWR1RleHRGcmFnbWVudD4mIHRl
eHRGcmFnbWVudHMoKSB7IHJldHVybiBtX3RleHRGcmFnbWVudHM7IH0KQEAgLTY5LDYgKzY5LDgg
QEAgcHVibGljOgogICAgIAogICAgIE9wdGlvblNldDxSZW5kZXJTVkdSZXNvdXJjZU1vZGU+IHBh
aW50aW5nUmVzb3VyY2VNb2RlKCkgY29uc3QgeyByZXR1cm4gT3B0aW9uU2V0PFJlbmRlclNWR1Jl
c291cmNlTW9kZT46OmZyb21SYXcobV9wYWludGluZ1Jlc291cmNlTW9kZSk7IH0KICAgICB2b2lk
IHNldFBhaW50aW5nUmVzb3VyY2VNb2RlKE9wdGlvblNldDxSZW5kZXJTVkdSZXNvdXJjZU1vZGU+
IG1vZGUpIHsgbV9wYWludGluZ1Jlc291cmNlTW9kZSA9IG1vZGUudG9SYXcoKTsgfQorCisgICAg
U1ZHSW5saW5lVGV4dEJveCogbmV4dFRleHRCb3goKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxT
VkdJbmxpbmVUZXh0Qm94PihJbmxpbmVUZXh0Qm94OjpuZXh0VGV4dEJveCgpKTsgfQogICAgIAog
cHJpdmF0ZToKICAgICBib29sIGlzU1ZHSW5saW5lVGV4dEJveCgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIHRydWU7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>413051</attachid>
            <date>2020-11-03 05:31:49 -0800</date>
            <delta_ts>2020-11-03 06:34:06 -0800</delta_ts>
            <desc>patch</desc>
            <filename>lfc-absoluteQuads-4.patch</filename>
            <type>text/plain</type>
            <size>19593</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyNjgzMTJiNGM2NzIuLjlkMWU0MmYxODZmZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDQ2IEBACisyMDIwLTExLTAzICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNv
bT4KKworICAgICAgICBbTEZDXVtJbnRlZ3JhdGlvbl0gUmVuZGVyVGV4dDo6YWJzb2x1dGVRdWFk
cyBzaG91bGQgdXNlIGl0ZXJhdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMTg1MDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVCb3guaDoKKyAgICAgICAgKFdlYkNvcmU6
OklubGluZUJveDo6Y2FsY3VsYXRlQm91bmRhcmllcyBjb25zdCk6IERlbGV0ZWQuCisKKyAgICAg
ICAgVGhpcyBmdW5jdGlvbiBpcyBTVkctc3BlY2lmaWMuCisgICAgICAgIFRvIHJlZHVjZSBjb25m
dXNpb24sIG1ha2UgaXQgbm9uLXZpcnR1YWwgYW5kIGF2YWlsYWJsZSBpbiBTVkcgaW5saW5lIGJv
eCBjbGFzc2VzIG9ubHkuCisKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJv
dW5kYXJpZXNGb3JUZXh0UnVuKToKKyAgICAgICAgKFdlYkNvcmU6OmVsbGlwc2lzUmVjdEZvclRl
eHRSdW4pOgorICAgICAgICAoV2ViQ29yZTo6Y29sbGVjdEFic29sdXRlUXVhZHMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6YWJzb2x1dGVRdWFkc0NsaXBwZWRUb0VsbGlwc2lzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmFic29sdXRlUXVhZHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6YWJzb2x1dGVRdWFkc0ZvclJhbmdlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmNvbGxlY3RTZWxlY3Rpb25SZWN0
c0ZvckxpbmVCb3hlcyk6CisKKyAgICAgICAgQWxzbyBpbmxpbmUgc2VsZWN0aW9uUmVjdEZvclJh
bmdlL2NvbGxlY3RTZWxlY3Rpb25SZWN0c0ZvclJhbmdlIHRvIHRoZSBvbmx5IGNhbGxlciBoZXJl
IGFuZCBtYWtlIGl0IHVzZSBpdGVyYXRvci4KKworICAgICAgICAoV2ViQ29yZTo6Y29sbGVjdEFi
c29sdXRlUXVhZHNGb3JOb25Db21wbGV4UGF0aHMpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVsbGlwc2lz
UmVjdEZvckJveCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0TGluZUJv
eGVzOjpzZWxlY3Rpb25SZWN0Rm9yUmFuZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGV4dExpbmVCb3hlczo6Y29sbGVjdFNlbGVjdGlvblJlY3RzRm9yUmFuZ2UpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dExpbmVCb3hlczo6YWJzb2x1dGVRdWFk
cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRMaW5lQm94
ZXMuaDoKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdJbmxpbmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0lubGluZVRl
eHQ6OmZsb2F0TGluZXNCb3VuZGluZ0JveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdJbmxpbmVUZXh0Ojpwb3NpdGlvbkZvclBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR0lubGluZVRleHQ6OmZpcnN0VGV4dEJveCBjb25zdCk6CisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9T
VkdJbmxpbmVGbG93Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZUZsb3dCb3g6
OmNhbGN1bGF0ZUJvdW5kYXJpZXMgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZH
SW5saW5lRmxvd0JveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJv
eC5oOgorCiAyMDIwLTExLTAyICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAg
ICAgICAgQ3Jhc2ggdW5kZXIgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c2NoZWR1bGVUYXNr
VG9EaXNwYXRjaENvbnRleHRMb3N0RXZlbnQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZUJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJv
eC5oCmluZGV4IGJlY2RmY2U3NmNiMy4uMGQwMDU3ZDgwOTFlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZUJveC5oCkBAIC0xMDQsMTIgKzEwNCw2IEBAIHB1YmxpYzoKICAgICBib29sIGlz
SG9yaXpvbnRhbCgpIGNvbnN0IHsgcmV0dXJuIG1fYml0ZmllbGRzLmlzSG9yaXpvbnRhbCgpOyB9
CiAgICAgdm9pZCBzZXRJc0hvcml6b250YWwoYm9vbCBpc0hvcml6b250YWwpIHsgbV9iaXRmaWVs
ZHMuc2V0SXNIb3Jpem9udGFsKGlzSG9yaXpvbnRhbCk7IH0KIAotICAgIHZpcnR1YWwgRmxvYXRS
ZWN0IGNhbGN1bGF0ZUJvdW5kYXJpZXMoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLSAgICB9Ci0KICAgICBi
b29sIGlzQ29uc3RydWN0ZWQoKSB7IHJldHVybiBtX2JpdGZpZWxkcy5jb25zdHJ1Y3RlZCgpOyB9
CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnN0cnVjdGVkKCkgeyBtX2JpdGZpZWxkcy5zZXRDb25z
dHJ1Y3RlZCh0cnVlKTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lVGV4dEJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3gu
aAppbmRleCA4NjdjZmQ0MTY1OTkuLmU0MDI2MjQ4ZWIyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lVGV4dEJveC5oCkBAIC0xMTYsOCArMTE2LDYgQEAgcHJpdmF0ZToKICAgICBM
YXlvdXRVbml0IHNlbGVjdGlvbkhlaWdodCgpIGNvbnN0OwogCiBwdWJsaWM6Ci0gICAgRmxvYXRS
ZWN0IGNhbGN1bGF0ZUJvdW5kYXJpZXMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBGbG9hdFJl
Y3QoeCgpLCB5KCksIHdpZHRoKCksIGhlaWdodCgpKTsgfQotCiAgICAgdmlydHVhbCBMYXlvdXRS
ZWN0IGxvY2FsU2VsZWN0aW9uUmVjdCh1bnNpZ25lZCBzdGFydFBvcywgdW5zaWduZWQgZW5kUG9z
KSBjb25zdDsKICAgICBib29sIGlzU2VsZWN0ZWQodW5zaWduZWQgc3RhcnRQb3NpdGlvbiwgdW5z
aWduZWQgZW5kUG9zaXRpb24pIGNvbnN0OwogICAgIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWdu
ZWQ+IHNlbGVjdGlvblN0YXJ0RW5kKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dC5jcHAKaW5kZXggM2NiYmNlM2Y2ZGE0Li41MzkwNjVlZTA4YjkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRl
ICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJSZW5k
ZXJlZERvY3VtZW50TWFya2VyLmgiCisjaW5jbHVkZSAiU1ZHSW5saW5lVGV4dEJveC5oIgogI2lu
Y2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUgIlRleHRSZXNv
dXJjZURlY29kZXIuaCIKQEAgLTM5NCwzMyArMzk1LDc1IEBAIHZvaWQgUmVuZGVyVGV4dDo6Y29s
bGVjdFNlbGVjdGlvblJlY3RzKFZlY3RvcjxTZWxlY3Rpb25SZWN0PiYgcmVjdHMsIHVuc2lnbmVk
IHN0CiB9CiAjZW5kaWYKIAotc3RhdGljIFZlY3RvcjxGbG9hdFF1YWQ+IGNvbGxlY3RBYnNvbHV0
ZVF1YWRzRm9yTm9uQ29tcGxleFBhdGhzKGNvbnN0IFJlbmRlclRleHQmIHRleHRSZW5kZXJlciwg
Ym9vbCogd2FzRml4ZWQpCitzdGF0aWMgRmxvYXRSZWN0IGJvdW5kYXJpZXNGb3JUZXh0UnVuKGNv
bnN0IExheW91dEludGVncmF0aW9uOjpQYXRoVGV4dFJ1biYgcnVuKQogewotICAgIC8vIEZJWE1F
OiBUaGlzIGdlbmVyaWMgZnVuY3Rpb24gZG9lc24ndCBjdXJyZW50bHkgY292ZXIgZXZlcnl0aGlu
ZyB0aGF0IGlzIG5lZWRlZCBmb3IgdGhlIGNvbXBsZXggbGluZSBsYXlvdXQgcGF0aC4KLSAgICBB
U1NFUlQoIXRleHRSZW5kZXJlci51c2VzQ29tcGxleExpbmVMYXlvdXRQYXRoKCkpOworICAgIGlm
IChpczxTVkdJbmxpbmVUZXh0Qm94PihydW4ubGVnYWN5SW5saW5lQm94KCkpKQorICAgICAgICBy
ZXR1cm4gZG93bmNhc3Q8U1ZHSW5saW5lVGV4dEJveD4oKnJ1bi5sZWdhY3lJbmxpbmVCb3goKSku
Y2FsY3VsYXRlQm91bmRhcmllcygpOwogCisgICAgcmV0dXJuIHJ1bi5yZWN0KCk7Cit9CisKK3N0
YXRpYyBJbnRSZWN0IGVsbGlwc2lzUmVjdEZvclRleHRSdW4oY29uc3QgTGF5b3V0SW50ZWdyYXRp
b246OlBhdGhUZXh0UnVuJiBydW4sIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQpCit7Cisg
ICAgLy8gRklYTUU6IE5vIGVsbGlwc2lzIHN1cHBvcnQgaW4gbW9kZXJuIHBhdGggeWV0LgorICAg
IGlmICghcnVuLmxlZ2FjeUlubGluZUJveCgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAg
YXV0byYgYm94ID0gKnJ1bi5sZWdhY3lJbmxpbmVCb3goKTsKKworICAgIHVuc2lnbmVkIHNob3J0
IHRydW5jYXRpb24gPSBib3gudHJ1bmNhdGlvbigpOworICAgIGlmICh0cnVuY2F0aW9uID09IGNO
b1RydW5jYXRpb24pCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBhdXRvIGVsbGlwc2lzID0g
Ym94LnJvb3QoKS5lbGxpcHNpc0JveCgpOworICAgIGlmICghZWxsaXBzaXMpCisgICAgICAgIHJl
dHVybiB7IH07CisKKyAgICBpbnQgZWxsaXBzaXNTdGFydFBvc2l0aW9uID0gc3RkOjptYXg8aW50
PihzdGFydCAtIGJveC5zdGFydCgpLCAwKTsKKyAgICBpbnQgZWxsaXBzaXNFbmRQb3NpdGlvbiA9
IHN0ZDo6bWluPGludD4oZW5kIC0gYm94LnN0YXJ0KCksIGJveC5sZW4oKSk7CisKKyAgICAvLyBU
aGUgZWxsaXBzaXMgc2hvdWxkIGJlIGNvbnNpZGVyZWQgdG8gYmUgc2VsZWN0ZWQgaWYgdGhlIGVu
ZCBvZgorICAgIC8vIHRoZSBzZWxlY3Rpb24gaXMgcGFzdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0
cnVuY2F0aW9uIGFuZCB0aGUKKyAgICAvLyBiZWdpbm5pbmcgb2YgdGhlIHNlbGVjdGlvbiBpcyBi
ZWZvcmUgb3IgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgdHJ1bmNhdGlvbi4KKyAgICBpZiAoZWxs
aXBzaXNFbmRQb3NpdGlvbiA8IHRydW5jYXRpb24gJiYgZWxsaXBzaXNTdGFydFBvc2l0aW9uID4g
dHJ1bmNhdGlvbikKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiBlbGxpcHNpcy0+
c2VsZWN0aW9uUmVjdCgpOworfQorCitlbnVtIGNsYXNzIENsaXBwaW5nT3B0aW9uIHsgTm9DbGlw
cGluZywgQ2xpcFRvRWxsaXBzaXMgfTsKKworLy8gRklYTUU6IFVuaWZ5IHdpdGggYWJzb2x1dGVR
dWFkc0ZvclJhbmdlLgorc3RhdGljIFZlY3RvcjxGbG9hdFF1YWQ+IGNvbGxlY3RBYnNvbHV0ZVF1
YWRzKGNvbnN0IFJlbmRlclRleHQmIHRleHRSZW5kZXJlciwgYm9vbCogd2FzRml4ZWQsIENsaXBw
aW5nT3B0aW9uIGNsaXBwaW5nKQorewogICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOwotICAg
IGZvciAoYXV0byYgcnVuIDogTGF5b3V0SW50ZWdyYXRpb246OnRleHRSdW5zRm9yKHRleHRSZW5k
ZXJlcikpCi0gICAgICAgIHF1YWRzLmFwcGVuZCh0ZXh0UmVuZGVyZXIubG9jYWxUb0Fic29sdXRl
UXVhZChGbG9hdFF1YWQocnVuLnJlY3QoKSksIFVzZVRyYW5zZm9ybXMsIHdhc0ZpeGVkKSk7Cisg
ICAgZm9yIChhdXRvJiBydW4gOiBMYXlvdXRJbnRlZ3JhdGlvbjo6dGV4dFJ1bnNGb3IodGV4dFJl
bmRlcmVyKSkgeworICAgICAgICBhdXRvIGJvdW5kYXJpZXMgPSBib3VuZGFyaWVzRm9yVGV4dFJ1
bihydW4pOworCisgICAgICAgIC8vIFNob3J0ZW4gdGhlIHdpZHRoIG9mIHRoaXMgdGV4dCBib3gg
aWYgaXQgZW5kcyBpbiBhbiBlbGxpcHNpcy4KKyAgICAgICAgaWYgKGNsaXBwaW5nID09IENsaXBw
aW5nT3B0aW9uOjpDbGlwVG9FbGxpcHNpcykgeworICAgICAgICAgICAgYXV0byBlbGxpcHNpc1Jl
Y3QgPSBlbGxpcHNpc1JlY3RGb3JUZXh0UnVuKHJ1biwgMCwgdGV4dFJlbmRlcmVyLnRleHQoKS5s
ZW5ndGgoKSk7CisgICAgICAgICAgICBpZiAoIWVsbGlwc2lzUmVjdC5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAodGV4dFJlbmRlcmVyLnN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgYm91bmRhcmllcy5zZXRXaWR0aChlbGxpcHNp
c1JlY3QubWF4WCgpIC0gYm91bmRhcmllcy54KCkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgYm91bmRhcmllcy5zZXRIZWlnaHQoZWxsaXBzaXNSZWN0Lm1heFko
KSAtIGJvdW5kYXJpZXMueSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgcXVhZHMuYXBwZW5kKHRleHRSZW5kZXJlci5sb2NhbFRvQWJzb2x1dGVRdWFkKGJv
dW5kYXJpZXMsIFVzZVRyYW5zZm9ybXMsIHdhc0ZpeGVkKSk7CisgICAgfQogICAgIHJldHVybiBx
dWFkczsKIH0KIAogVmVjdG9yPEZsb2F0UXVhZD4gUmVuZGVyVGV4dDo6YWJzb2x1dGVRdWFkc0Ns
aXBwZWRUb0VsbGlwc2lzKCkgY29uc3QKIHsKLSAgICBpZiAoIXVzZXNDb21wbGV4TGluZUxheW91
dFBhdGgoKSkgewotICAgICAgICBBU1NFUlQoc3R5bGUoKS50ZXh0T3ZlcmZsb3coKSAhPSBUZXh0
T3ZlcmZsb3c6OkVsbGlwc2lzKTsKLSAgICAgICAgcmV0dXJuIGNvbGxlY3RBYnNvbHV0ZVF1YWRz
Rm9yTm9uQ29tcGxleFBhdGhzKCp0aGlzLCBudWxscHRyKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1f
bGluZUJveGVzLmFic29sdXRlUXVhZHMoKnRoaXMsIG51bGxwdHIsIFJlbmRlclRleHRMaW5lQm94
ZXM6OkNsaXBUb0VsbGlwc2lzKTsKKyAgICByZXR1cm4gY29sbGVjdEFic29sdXRlUXVhZHMoKnRo
aXMsIG51bGxwdHIsIENsaXBwaW5nT3B0aW9uOjpDbGlwVG9FbGxpcHNpcyk7CiB9CiAKIHZvaWQg
UmVuZGVyVGV4dDo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMsIGJvb2wq
IHdhc0ZpeGVkKSBjb25zdAogewotICAgIGlmICghdXNlc0NvbXBsZXhMaW5lTGF5b3V0UGF0aCgp
KSB7Ci0gICAgICAgIHF1YWRzLmFwcGVuZFZlY3Rvcihjb2xsZWN0QWJzb2x1dGVRdWFkc0Zvck5v
bkNvbXBsZXhQYXRocygqdGhpcywgd2FzRml4ZWQpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBxdWFkcy5hcHBlbmRWZWN0b3IobV9saW5lQm94ZXMuYWJzb2x1dGVRdWFkcygqdGhpcywg
d2FzRml4ZWQsIFJlbmRlclRleHRMaW5lQm94ZXM6Ok5vQ2xpcHBpbmcpKTsKKyAgICBxdWFkcy5h
cHBlbmRWZWN0b3IoY29sbGVjdEFic29sdXRlUXVhZHMoKnRoaXMsIHdhc0ZpeGVkLCBDbGlwcGlu
Z09wdGlvbjo6Tm9DbGlwcGluZykpOwogfQogCiBzdGF0aWMgRmxvYXRSZWN0IGxvY2FsUXVhZEZv
clRleHRSdW4oY29uc3QgTGF5b3V0SW50ZWdyYXRpb246OlBhdGhUZXh0UnVuJiBydW4sIHVuc2ln
bmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQsIGJvb2wgdXNlU2VsZWN0aW9uSGVpZ2h0KQpAQCAtNDYw
LDExICs1MDMsNyBAQCBWZWN0b3I8RmxvYXRRdWFkPiBSZW5kZXJUZXh0OjphYnNvbHV0ZVF1YWRz
Rm9yUmFuZ2UodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZAogICAgICAgICBpZiAoaWdub3Jl
RW1wdHlUZXh0U2VsZWN0aW9ucyAmJiAhcnVuLmlzU2VsZWN0YWJsZShzdGFydCwgZW5kKSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoc3RhcnQgPD0gcnVuLnN0YXJ0KCkgJiYg
cnVuLmVuZCgpIDw9IGVuZCkgewotICAgICAgICAgICAgYXV0byBib3VuZGFyaWVzID0gWyZdIHsK
LSAgICAgICAgICAgICAgICBpZiAocnVuLmxlZ2FjeUlubGluZUJveCgpICYmIHJ1bi5sZWdhY3lJ
bmxpbmVCb3goKS0+aXNTVkdJbmxpbmVUZXh0Qm94KCkpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBydW4ubGVnYWN5SW5saW5lQm94KCktPmNhbGN1bGF0ZUJvdW5kYXJpZXMoKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gcnVuLnJlY3QoKTsKLSAgICAgICAgICAgIH0oKTsKKyAgICAgICAg
ICAgIGF1dG8gYm91bmRhcmllcyA9IGJvdW5kYXJpZXNGb3JUZXh0UnVuKHJ1bik7CiAKICAgICAg
ICAgICAgIGlmICh1c2VTZWxlY3Rpb25IZWlnaHQpIHsKICAgICAgICAgICAgICAgICBMYXlvdXRS
ZWN0IHNlbGVjdGlvblJlY3QgPSBydW4uc2VsZWN0aW9uUmVjdChzdGFydCwgZW5kKTsKQEAgLTE2
MjEsMTQgKzE2NjAsMTggQEAgTGF5b3V0UmVjdCBSZW5kZXJUZXh0Ojpjb2xsZWN0U2VsZWN0aW9u
UmVjdHNGb3JMaW5lQm94ZXMoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE8KICAgICAgICAgcmV0dXJu
IEludFJlY3QoKTsKIAogICAgIExheW91dFJlY3QgcmVzdWx0UmVjdDsKLSAgICBpZiAoIXJlY3Rz
KQotICAgICAgICByZXN1bHRSZWN0ID0gbV9saW5lQm94ZXMuc2VsZWN0aW9uUmVjdEZvclJhbmdl
KHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwotICAgIGVsc2UgewotICAgICAgICBtX2xpbmVCb3hl
cy5jb2xsZWN0U2VsZWN0aW9uUmVjdHNGb3JSYW5nZShzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCAq
cmVjdHMpOwotICAgICAgICBmb3IgKGF1dG8mIHJlY3QgOiAqcmVjdHMpIHsKLSAgICAgICAgICAg
IHJlc3VsdFJlY3QudW5pdGUocmVjdCk7Ci0gICAgICAgICAgICByZWN0ID0gbG9jYWxUb0NvbnRh
aW5lclF1YWQoRmxvYXRSZWN0KHJlY3QpLCByZXBhaW50Q29udGFpbmVyKS5lbmNsb3NpbmdCb3Vu
ZGluZ0JveCgpOwotICAgICAgICB9CisKKyAgICBmb3IgKGF1dG8mIHJ1biA6IExheW91dEludGVn
cmF0aW9uOjp0ZXh0UnVuc0ZvcigqdGhpcykpIHsKKyAgICAgICAgTGF5b3V0UmVjdCByZWN0Owor
ICAgICAgICByZWN0LnVuaXRlKHJ1bi5zZWxlY3Rpb25SZWN0KHN0YXJ0T2Zmc2V0LCBlbmRPZmZz
ZXQpKTsKKyAgICAgICAgcmVjdC51bml0ZShlbGxpcHNpc1JlY3RGb3JUZXh0UnVuKHJ1biwgc3Rh
cnRPZmZzZXQsIGVuZE9mZnNldCkpOworICAgICAgICBpZiAocmVjdC5pc0VtcHR5KCkpCisgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICByZXN1bHRSZWN0LnVuaXRlKHJlY3QpOworCisg
ICAgICAgIGlmIChyZWN0cykKKyAgICAgICAgICAgIHJlY3RzLT5hcHBlbmQobG9jYWxUb0NvbnRh
aW5lclF1YWQoRmxvYXRSZWN0KHJlY3QpLCByZXBhaW50Q29udGFpbmVyKS5lbmNsb3NpbmdCb3Vu
ZGluZ0JveCgpKTsKICAgICB9CiAKICAgICBpZiAoY2xpcFRvVmlzaWJsZUNvbnRlbnQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5jcHAKaW5kZXgg
YWRkYmY1OGZkZDQzLi4wOWQ0YzkxNzE3NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5jcHAKQEAgLTE5NCw2OSArMTk0LDYgQEAgdm9pZCBS
ZW5kZXJUZXh0TGluZUJveGVzOjpzZXRTZWxlY3Rpb25TdGF0ZShSZW5kZXJUZXh0JiByZW5kZXJl
ciwgUmVuZGVyT2JqZWN0OjoKICAgICB9CiB9CiAKLXN0YXRpYyBJbnRSZWN0IGVsbGlwc2lzUmVj
dEZvckJveChjb25zdCBJbmxpbmVUZXh0Qm94JiBib3gsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25l
ZCBlbmQpCi17Ci0gICAgdW5zaWduZWQgc2hvcnQgdHJ1bmNhdGlvbiA9IGJveC50cnVuY2F0aW9u
KCk7Ci0gICAgaWYgKHRydW5jYXRpb24gPT0gY05vVHJ1bmNhdGlvbikKLSAgICAgICAgcmV0dXJu
IEludFJlY3QoKTsKLQotICAgIGF1dG8gZWxsaXBzaXMgPSBib3gucm9vdCgpLmVsbGlwc2lzQm94
KCk7Ci0gICAgaWYgKCFlbGxpcHNpcykKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLSAgICAK
LSAgICBJbnRSZWN0IHJlY3Q7Ci0gICAgaW50IGVsbGlwc2lzU3RhcnRQb3NpdGlvbiA9IHN0ZDo6
bWF4PGludD4oc3RhcnQgLSBib3guc3RhcnQoKSwgMCk7Ci0gICAgaW50IGVsbGlwc2lzRW5kUG9z
aXRpb24gPSBzdGQ6Om1pbjxpbnQ+KGVuZCAtIGJveC5zdGFydCgpLCBib3gubGVuKCkpOwotICAg
IAotICAgIC8vIFRoZSBlbGxpcHNpcyBzaG91bGQgYmUgY29uc2lkZXJlZCB0byBiZSBzZWxlY3Rl
ZCBpZiB0aGUgZW5kIG9mCi0gICAgLy8gdGhlIHNlbGVjdGlvbiBpcyBwYXN0IHRoZSBiZWdpbm5p
bmcgb2YgdGhlIHRydW5jYXRpb24gYW5kIHRoZQotICAgIC8vIGJlZ2lubmluZyBvZiB0aGUgc2Vs
ZWN0aW9uIGlzIGJlZm9yZSBvciBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0cnVuY2F0aW9uLgot
ICAgIGlmIChlbGxpcHNpc0VuZFBvc2l0aW9uIDwgdHJ1bmNhdGlvbiAmJiBlbGxpcHNpc1N0YXJ0
UG9zaXRpb24gPiB0cnVuY2F0aW9uKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotICAgIHJl
dHVybiBlbGxpcHNpcy0+c2VsZWN0aW9uUmVjdCgpOwotfQotCi1MYXlvdXRSZWN0IFJlbmRlclRl
eHRMaW5lQm94ZXM6OnNlbGVjdGlvblJlY3RGb3JSYW5nZSh1bnNpZ25lZCBzdGFydCwgdW5zaWdu
ZWQgZW5kKQotewotICAgIExheW91dFJlY3QgcmVjdDsKLSAgICBmb3IgKGF1dG8qIGJveCA9IG1f
Zmlyc3Q7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpKSB7Ci0gICAgICAgIHJlY3QudW5p
dGUoYm94LT5sb2NhbFNlbGVjdGlvblJlY3Qoc3RhcnQsIGVuZCkpOwotICAgICAgICByZWN0LnVu
aXRlKGVsbGlwc2lzUmVjdEZvckJveCgqYm94LCBzdGFydCwgZW5kKSk7Ci0gICAgfQotICAgIHJl
dHVybiByZWN0OwotfQotCi12b2lkIFJlbmRlclRleHRMaW5lQm94ZXM6OmNvbGxlY3RTZWxlY3Rp
b25SZWN0c0ZvclJhbmdlKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQsIFZlY3RvcjxMYXlv
dXRSZWN0PiYgcmVjdHMpCi17Ci0gICAgZm9yIChhdXRvKiBib3ggPSBtX2ZpcnN0OyBib3g7IGJv
eCA9IGJveC0+bmV4dFRleHRCb3goKSkgewotICAgICAgICBMYXlvdXRSZWN0IHJlY3Q7Ci0gICAg
ICAgIHJlY3QudW5pdGUoYm94LT5sb2NhbFNlbGVjdGlvblJlY3Qoc3RhcnQsIGVuZCkpOwotICAg
ICAgICByZWN0LnVuaXRlKGVsbGlwc2lzUmVjdEZvckJveCgqYm94LCBzdGFydCwgZW5kKSk7Ci0g
ICAgICAgIGlmICghcmVjdC5zaXplKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmVjdHMuYXBw
ZW5kKHJlY3QpOwotICAgIH0KLX0KLQotVmVjdG9yPEZsb2F0UXVhZD4gUmVuZGVyVGV4dExpbmVC
b3hlczo6YWJzb2x1dGVRdWFkcyhjb25zdCBSZW5kZXJUZXh0JiByZW5kZXJlciwgYm9vbCogd2Fz
Rml4ZWQsIENsaXBwaW5nT3B0aW9uIG9wdGlvbikgY29uc3QKLXsKLSAgICBWZWN0b3I8RmxvYXRR
dWFkPiBxdWFkczsKLSAgICBmb3IgKGF1dG8qIGJveCA9IG1fZmlyc3Q7IGJveDsgYm94ID0gYm94
LT5uZXh0VGV4dEJveCgpKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBib3VuZGFyaWVzID0gYm94LT5j
YWxjdWxhdGVCb3VuZGFyaWVzKCk7Ci0KLSAgICAgICAgLy8gU2hvcnRlbiB0aGUgd2lkdGggb2Yg
dGhpcyB0ZXh0IGJveCBpZiBpdCBlbmRzIGluIGFuIGVsbGlwc2lzLgotICAgICAgICAvLyBGSVhN
RTogZWxsaXBzaXNSZWN0Rm9yQm94IHNob3VsZCBzd2l0Y2ggdG8gcmV0dXJuIEZsb2F0UmVjdCBz
b29uIHdpdGggdGhlIHN1YnBpeGVsbGF5b3V0IGJyYW5jaC4KLSAgICAgICAgSW50UmVjdCBlbGxp
cHNpc1JlY3QgPSAob3B0aW9uID09IENsaXBUb0VsbGlwc2lzKSA/IGVsbGlwc2lzUmVjdEZvckJv
eCgqYm94LCAwLCByZW5kZXJlci50ZXh0KCkubGVuZ3RoKCkpIDogSW50UmVjdCgpOwotICAgICAg
ICBpZiAoIWVsbGlwc2lzUmVjdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGlmIChyZW5kZXJl
ci5zdHlsZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgICAgICAgICAgYm91
bmRhcmllcy5zZXRXaWR0aChlbGxpcHNpc1JlY3QubWF4WCgpIC0gYm91bmRhcmllcy54KCkpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJvdW5kYXJpZXMuc2V0SGVpZ2h0KGVs
bGlwc2lzUmVjdC5tYXhZKCkgLSBib3VuZGFyaWVzLnkoKSk7Ci0gICAgICAgIH0KLSAgICAgICAg
cXVhZHMuYXBwZW5kKHJlbmRlcmVyLmxvY2FsVG9BYnNvbHV0ZVF1YWQoYm91bmRhcmllcywgVXNl
VHJhbnNmb3Jtcywgd2FzRml4ZWQpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHF1YWRzOwotfQotCiB2
b2lkIFJlbmRlclRleHRMaW5lQm94ZXM6OmRpcnR5QWxsKCkKIHsKICAgICBmb3IgKGF1dG8qIGJv
eCA9IG1fZmlyc3Q7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRMaW5lQm94ZXMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmgKaW5kZXggZTJmOWY1NTgwNmFl
Li42ZWFiMTM3M2Q0MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0TGluZUJveGVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHRMaW5lQm94ZXMuaApAQCAtNTcsMTQgKzU3LDkgQEAgcHVibGljOgogICAgIElubGluZVRleHRC
b3gqIGZpbmROZXh0KGludCBvZmZzZXQsIGludCYgcG9zaXRpb24pIGNvbnN0OwogCiAgICAgdm9p
ZCBzZXRTZWxlY3Rpb25TdGF0ZShSZW5kZXJUZXh0JiwgUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRT
dGF0ZSk7Ci0gICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0Rm9yUmFuZ2UodW5zaWduZWQgc3Rh
cnQsIHVuc2lnbmVkIGVuZCk7Ci0gICAgdm9pZCBjb2xsZWN0U2VsZWN0aW9uUmVjdHNGb3JSYW5n
ZSh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kLCBWZWN0b3I8TGF5b3V0UmVjdD4mIHJlY3Rz
KTsKIAogICAgIExheW91dFJlY3QgdmlzdWFsT3ZlcmZsb3dCb3VuZGluZ0JveChjb25zdCBSZW5k
ZXJUZXh0JikgY29uc3Q7CiAKLSAgICBlbnVtIENsaXBwaW5nT3B0aW9uIHsgTm9DbGlwcGluZywg
Q2xpcFRvRWxsaXBzaXMgfTsKLSAgICBWZWN0b3I8RmxvYXRRdWFkPiBhYnNvbHV0ZVF1YWRzKGNv
bnN0IFJlbmRlclRleHQmLCBib29sKiB3YXNGaXhlZCwgQ2xpcHBpbmdPcHRpb24pIGNvbnN0Owot
CiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICB+UmVuZGVyVGV4dExpbmVCb3hlcygpOwogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGlu
ZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVU
ZXh0LmNwcAppbmRleCBkMjM2NmZkNDNkNjkuLjQ1NTU3NzYxODBlMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCkBAIC0x
NDIsOCArMTQyLDkgQEAgTGF5b3V0UmVjdCBSZW5kZXJTVkdJbmxpbmVUZXh0Ojpsb2NhbENhcmV0
UmVjdChJbmxpbmVCb3gqIGJveCwgdW5zaWduZWQgY2FyZXRPZmYKIEZsb2F0UmVjdCBSZW5kZXJT
VkdJbmxpbmVUZXh0OjpmbG9hdExpbmVzQm91bmRpbmdCb3goKSBjb25zdAogewogICAgIEZsb2F0
UmVjdCBib3VuZGluZ0JveDsKLSAgICBmb3IgKElubGluZVRleHRCb3gqIGJveCA9IGZpcnN0VGV4
dEJveCgpOyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkKKyAgICBmb3IgKGF1dG8qIGJv
eCA9IGZpcnN0VGV4dEJveCgpOyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkKICAgICAg
ICAgYm91bmRpbmdCb3gudW5pdGUoYm94LT5jYWxjdWxhdGVCb3VuZGFyaWVzKCkpOworCiAgICAg
cmV0dXJuIGJvdW5kaW5nQm94OwogfQogCkBAIC0xODgsMTIgKzE4OSw4IEBAIFZpc2libGVQb3Np
dGlvbiBSZW5kZXJTVkdJbmxpbmVUZXh0Ojpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBv
aW50JiBwb2ludCwKICAgICBTVkdJbmxpbmVUZXh0Qm94KiBjbG9zZXN0RGlzdGFuY2VCb3ggPSBu
dWxscHRyOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtIGZyYWdtZW50VHJhbnNmb3JtOwotICAgIGZv
ciAoSW5saW5lVGV4dEJveCogYm94ID0gZmlyc3RUZXh0Qm94KCk7IGJveDsgYm94ID0gYm94LT5u
ZXh0VGV4dEJveCgpKSB7Ci0gICAgICAgIGlmICghaXM8U1ZHSW5saW5lVGV4dEJveD4oKmJveCkp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBhdXRvJiB0ZXh0Qm94ID0gZG93bmNh
c3Q8U1ZHSW5saW5lVGV4dEJveD4oKmJveCk7Ci0gICAgICAgIFZlY3RvcjxTVkdUZXh0RnJhZ21l
bnQ+JiBmcmFnbWVudHMgPSB0ZXh0Qm94LnRleHRGcmFnbWVudHMoKTsKKyAgICBmb3IgKGF1dG8q
IGJveCA9IGZpcnN0VGV4dEJveCgpOyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkgewor
ICAgICAgICBWZWN0b3I8U1ZHVGV4dEZyYWdtZW50PiYgZnJhZ21lbnRzID0gYm94LT50ZXh0RnJh
Z21lbnRzKCk7CiAKICAgICAgICAgdW5zaWduZWQgdGV4dEZyYWdtZW50c1NpemUgPSBmcmFnbWVu
dHMuc2l6ZSgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGV4dEZyYWdtZW50
c1NpemU7ICsraSkgewpAQCAtMjA4LDcgKzIwNSw3IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJT
VkdJbmxpbmVUZXh0Ojpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCwK
IAogICAgICAgICAgICAgaWYgKGRpc3RhbmNlIDwgY2xvc2VzdERpc3RhbmNlKSB7CiAgICAgICAg
ICAgICAgICAgY2xvc2VzdERpc3RhbmNlID0gZGlzdGFuY2U7Ci0gICAgICAgICAgICAgICAgY2xv
c2VzdERpc3RhbmNlQm94ID0gJnRleHRCb3g7CisgICAgICAgICAgICAgICAgY2xvc2VzdERpc3Rh
bmNlQm94ID0gYm94OwogICAgICAgICAgICAgICAgIGNsb3Nlc3REaXN0YW5jZUZyYWdtZW50ID0g
JmZyYWdtZW50OwogICAgICAgICAgICAgICAgIGNsb3Nlc3REaXN0YW5jZVBvc2l0aW9uID0gZnJh
Z21lbnRSZWN0LngoKTsKICAgICAgICAgICAgIH0KQEAgLTI1MSw0ICsyNDgsOSBAQCB2b2lkIFJl
bmRlclNWR0lubGluZVRleHQ6OmNvbXB1dGVOZXdTY2FsZWRGb250Rm9yU3R5bGUoY29uc3QgUmVu
ZGVyT2JqZWN0JiByZW5kZQogICAgIHNjYWxlZEZvbnQudXBkYXRlKCZyZW5kZXJlci5kb2N1bWVu
dCgpLmZvbnRTZWxlY3RvcigpKTsKIH0KIAorU1ZHSW5saW5lVGV4dEJveCogUmVuZGVyU1ZHSW5s
aW5lVGV4dDo6Zmlyc3RUZXh0Qm94KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZG93bmNhc3Q8U1ZH
SW5saW5lVGV4dEJveD4oUmVuZGVyVGV4dDo6Zmlyc3RUZXh0Qm94KCkpOworfQorCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQu
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5oCmlu
ZGV4IGRjOWNkOTA2ZjU4Ni4uZmY0NjNiOGIwOTY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuaApAQCAtNDgsNiArNDgsOCBAQCBw
dWJsaWM6CiAgICAgLy8gUHJlc2VydmVzIGZsb2F0aW5nIHBvaW50IHByZWNpc2lvbiBmb3IgdGhl
IHVzZSBpbiBEUlQuIEl0IGtub3dzIGhvdyB0byByb3VuZCBhbmQgZG9lcyBhIGJldHRlciBqb2Ig
dGhhbiBlbmNsb3NpbmdJbnRSZWN0LgogICAgIEZsb2F0UmVjdCBmbG9hdExpbmVzQm91bmRpbmdC
b3goKSBjb25zdDsKIAorICAgIFNWR0lubGluZVRleHRCb3gqIGZpcnN0VGV4dEJveCgpIGNvbnN0
OworCiBwcml2YXRlOgogICAgIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiAiUmVuZGVyU1ZHSW5saW5lVGV4dCI7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVGbG93Qm94LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lRmxvd0JveC5jcHAKaW5kZXggMWU2NzljYTg1Zjg4
Li4yYjQ5NzE3MDg3ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHSW5saW5lRmxvd0JveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdJbmxpbmVGbG93Qm94LmNwcApAQCAtNjIsMTAgKzYyLDE1IEBAIHZvaWQgU1ZHSW5saW5lRmxv
d0JveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWlu
dE9mZnNlCiBGbG9hdFJlY3QgU1ZHSW5saW5lRmxvd0JveDo6Y2FsY3VsYXRlQm91bmRhcmllcygp
IGNvbnN0CiB7CiAgICAgRmxvYXRSZWN0IGNoaWxkUmVjdDsKLSAgICBmb3IgKElubGluZUJveCog
Y2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0T25MaW5lKCkp
IHsKLSAgICAgICAgaWYgKCFjaGlsZC0+aXNTVkdJbmxpbmVUZXh0Qm94KCkgJiYgIWNoaWxkLT5p
c1NWR0lubGluZUZsb3dCb3goKSkKKyAgICBmb3IgKGF1dG8qIGNoaWxkID0gZmlyc3RDaGlsZCgp
OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dE9uTGluZSgpKSB7CisgICAgICAgIGlmIChpczxT
VkdJbmxpbmVUZXh0Qm94PihjaGlsZCkpIHsKKyAgICAgICAgICAgIGNoaWxkUmVjdC51bml0ZShk
b3duY2FzdDxTVkdJbmxpbmVUZXh0Qm94PigqY2hpbGQpLmNhbGN1bGF0ZUJvdW5kYXJpZXMoKSk7
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXM8U1ZHSW5s
aW5lRmxvd0JveD4oY2hpbGQpKSB7CisgICAgICAgICAgICBjaGlsZFJlY3QudW5pdGUoZG93bmNh
c3Q8U1ZHSW5saW5lRmxvd0JveD4oKmNoaWxkKS5jYWxjdWxhdGVCb3VuZGFyaWVzKCkpOwogICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGNoaWxkUmVjdC51bml0ZShjaGlsZC0+Y2FsY3Vs
YXRlQm91bmRhcmllcygpKTsKKyAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gY2hpbGRSZWN0
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVG
bG93Qm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZUZsb3dCb3gu
aAppbmRleCA3M2Y4MGFjOTMyM2MuLjk3MGQzZTA2MDJjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVGbG93Qm94LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVGbG93Qm94LmgKQEAgLTM4LDcgKzM4LDcgQEAgcHVi
bGljOgogCiAgICAgUmVuZGVyU1ZHSW5saW5lJiByZW5kZXJlcigpIHsgcmV0dXJuIHN0YXRpY19j
YXN0PFJlbmRlclNWR0lubGluZSY+KElubGluZUZsb3dCb3g6OnJlbmRlcmVyKCkpOyB9CiAKLSAg
ICBGbG9hdFJlY3QgY2FsY3VsYXRlQm91bmRhcmllcygpIGNvbnN0IG92ZXJyaWRlOworICAgIEZs
b2F0UmVjdCBjYWxjdWxhdGVCb3VuZGFyaWVzKCkgY29uc3Q7CiAKICAgICB2b2lkIHNldExvZ2lj
YWxIZWlnaHQoZmxvYXQgaCkgeyBtX2xvZ2ljYWxIZWlnaHQgPSBoOyB9CiAgICAgdm9pZCBwYWlu
dFNlbGVjdGlvbkJhY2tncm91bmQoUGFpbnRJbmZvJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5oCmluZGV4IGZkZTFmMzhlZWU2ZC4uZGNlZjNl
MmZlODliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGlu
ZVRleHRCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRl
eHRCb3guaApAQCAtMjQsMTIgKzI0LDEyIEBACiAjaW5jbHVkZSAiSW5saW5lVGV4dEJveC5oIgog
I2luY2x1ZGUgIlJlbmRlclNWR0lubGluZVRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNv
dXJjZS5oIgorI2luY2x1ZGUgIlNWR1RleHRGcmFnbWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIFJlbmRlclNWR1Jlc291cmNlOwogY2xhc3MgU1ZHUm9vdElubGluZUJveDsK
LXN0cnVjdCBTVkdUZXh0RnJhZ21lbnQ7CiAKIGNsYXNzIFNWR0lubGluZVRleHRCb3ggZmluYWwg
OiBwdWJsaWMgSW5saW5lVGV4dEJveCB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChTVkdJ
bmxpbmVUZXh0Qm94KTsKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBtYXBT
dGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVzKGNvbnN0IFNWR1RleHRGcmFn
bWVudCYsIHVuc2lnbmVkJiBzdGFydFBvc2l0aW9uLCB1bnNpZ25lZCYgZW5kUG9zaXRpb24pIGNv
bnN0OwogCi0gICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUJvdW5kYXJpZXMoKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlQm91bmRhcmllcygpIGNvbnN0OwogCiAgICAgdm9p
ZCBjbGVhclRleHRGcmFnbWVudHMoKSB7IG1fdGV4dEZyYWdtZW50cy5jbGVhcigpOyB9CiAgICAg
VmVjdG9yPFNWR1RleHRGcmFnbWVudD4mIHRleHRGcmFnbWVudHMoKSB7IHJldHVybiBtX3RleHRG
cmFnbWVudHM7IH0KQEAgLTY5LDYgKzY5LDggQEAgcHVibGljOgogICAgIAogICAgIE9wdGlvblNl
dDxSZW5kZXJTVkdSZXNvdXJjZU1vZGU+IHBhaW50aW5nUmVzb3VyY2VNb2RlKCkgY29uc3QgeyBy
ZXR1cm4gT3B0aW9uU2V0PFJlbmRlclNWR1Jlc291cmNlTW9kZT46OmZyb21SYXcobV9wYWludGlu
Z1Jlc291cmNlTW9kZSk7IH0KICAgICB2b2lkIHNldFBhaW50aW5nUmVzb3VyY2VNb2RlKE9wdGlv
blNldDxSZW5kZXJTVkdSZXNvdXJjZU1vZGU+IG1vZGUpIHsgbV9wYWludGluZ1Jlc291cmNlTW9k
ZSA9IG1vZGUudG9SYXcoKTsgfQorCisgICAgU1ZHSW5saW5lVGV4dEJveCogbmV4dFRleHRCb3go
KSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxTVkdJbmxpbmVUZXh0Qm94PihJbmxpbmVUZXh0Qm94
OjpuZXh0VGV4dEJveCgpKTsgfQogICAgIAogcHJpdmF0ZToKICAgICBib29sIGlzU1ZHSW5saW5l
VGV4dEJveCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>